%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=mc,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;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot leave &sysmacroname with syscc=&syscc
)
%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 var;
%let fref=%mf_getuniquefileref();
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;
1
%let var=_FILESRVC_&fref._URI;
%let rc=%sysfunc(filename(fref));
%symdel &var;
%end;
%else %do;
0
%let syscc=0;
%end;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot leave mfv_existfolder.sas with syscc=&syscc
)
%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=*;
%mp_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter &sysmacroname with syscc=&syscc
)
%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;
%mp_abort(iftrue=(&syscc ne 0),msg=syscc=&syscc when folder checking)
%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;
%if &SYS_PROCHTTP_STATUS_CODE=401 %then %do;
/* relates to: https://github.com/sasjs/core/issues/400 */
%put 401 thrown in &sysmacroname;
%put sleeping: %sysfunc(sleep(12,1)) secs - will try again;
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;
%end;
%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=mv_createfolder124
,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 201 %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;
%mp_abort(
iftrue=(&syscc ne 0),
msg=Cannot leave &sysmacroname with syscc=&syscc
)
%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) secs 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=*;
%mp_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter &sysmacroname with syscc=&syscc
)
%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)
)
%mp_abort(
iftrue=(&syscc ne 0),
mac=MV_CREATEFILE182
msg=syscc=&syscc after mfv_getpathuri
)
%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: %trim(&base_uri)%mfv_getpathuri(&path/&name);
%put /SASJobExecution?_file=&path/&name;%put;
%if &mdebug=0 %then %do;
/* clear refs */
filename &fname1 clear;
filename &fref clear;
libname &libref2 clear;
%end;
%mp_abort(
iftrue=(&syscc ne 0),
msg=Cannot leave &sysmacroname with syscc=&syscc
)
%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;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot leave &sysmacroname with syscc=&syscc
)
%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=mc,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 var;
%let fref=%mf_getuniquefileref();
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;
1
%let var=_FILESRVC_&fref._URI;
%let rc=%sysfunc(filename(fref));
%symdel &var;
%end;
%else %do;
0
%let syscc=0;
%end;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot leave mfv_existfolder.sas with syscc=&syscc
)
%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=*;
%mp_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter &sysmacroname with syscc=&syscc
)
%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;
%mp_abort(iftrue=(&syscc ne 0),msg=syscc=&syscc when folder checking)
%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;
%if &SYS_PROCHTTP_STATUS_CODE=401 %then %do;
/* relates to: https://github.com/sasjs/core/issues/400 */
%put 401 thrown in &sysmacroname;
%put sleeping: %sysfunc(sleep(12,1)) secs - will try again;
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;
%end;
%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=mv_createfolder124
,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 201 %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;
%mp_abort(
iftrue=(&syscc ne 0),
msg=Cannot leave &sysmacroname with syscc=&syscc
)
%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 'aWNlcy93ZWIvc3R5bGVzLmJmMWE2ZjQ2NTc1YTQ1NGEuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRl'@;
put 'cGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxvZ2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBX'@;
put 'aGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBhY2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9j'@;
put 'YXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPGJv'@;
put 'ZHkgY2RzLXRoZW1lPSJsaWdodCIgY2xhc3M9Im0tMCI+PHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIiIHNlcnZlcnR5cGU9IlNBU1ZJWUEiIGxvZ2lubWVjaGFuaXNtPSJSZWRpcmVjdGVkIiBkZWJ1Zz0iZmFsc2UiIHVzZWNvbXB1dGVhcGk9'@;
put 'InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIiBkY3BhdGg9Ii90bXAvZGMiIGhvdGxpY2VuY2VrZXk9Im5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj4KICA8L3Nhc2pzPgoKICAK'@;
put 'ICAgIDxteS1hcHA+PC9teS1hcHA+CiAgPHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvcnVudGltZS40MDJmYzNjZmJjN2UxYmQ0LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIv'@;
put 'U0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL3BvbHlmaWxscy4wNmU3ZjA1ZGQ3ZDkxMWFlLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2Rj'@;
put 'cGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL3NjcmlwdHMuZjQxOGQ3ZTcxZGJmZDMwOS5qcyIgZGVmZXI9IiI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvbWFpbi42YWYwY2FiNzQ5OWYz'@;
put 'Mzg4LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PgoKPC9ib2R5PjwvaHRtbD4=';
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=mc,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=mc,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.libs as';
put 'select libref from work.sumcat';
put 'union';
put 'select libref from work.sumdsn;';
put 'create table work.statuslibs as';
put 'select a.libref,';
put 'b.libsize,';
put 'b.table_cnt,';
put 'c.catalog_cnt';
put 'from work.libs a';
put 'left join work.sumdsn b';
put 'on a.libref=b.libref';
put 'left join work.sumcat c';
put 'on a.libref=c.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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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.libs as';
put 'select libref from work.sumcat';
put 'union';
put 'select libref from work.sumdsn;';
put 'create table work.statuslibs as';
put 'select a.libref,';
put 'b.libsize,';
put 'b.table_cnt,';
put 'c.catalog_cnt';
put 'from work.libs a';
put 'left join work.sumdsn b';
put 'on a.libref=b.libref';
put 'left join work.sumcat c';
put 'on a.libref=c.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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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=mc,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 'eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5iZjFhNmY0NjU3NWE0NTRhLmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6'@;
put 'IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl'@;
put 'ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl'@;
put 'c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg'@;
put 'ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kZXZ0ZXN0IiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IlJlZGlyZWN0ZWQiIGRlYnVnPSJmYWxzZSIg'@;
put 'dXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiIGRjcGF0aD0iL3RtcC9kYyIgaG90bGljZW5jZWtleT0ibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPgog'@;
put 'IDwvc2FzanM+CgogIDxib2R5IGNkcy10aGVtZT0ibGlnaHQiIGNsYXNzPSJtLTAiPgogICAgPG15LWFwcD48L215LWFwcD4KICA8c2NyaXB0IHNyYz0icnVudGltZS40MDJmYzNjZmJjN2UxYmQ0LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJwb2x5ZmlsbHMuMDZl'@;
put 'N2YwNWRkN2Q5MTFhZS5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ic2NyaXB0cy5mNDE4ZDdlNzFkYmZkMzA5LmpzIiBkZWZlcj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibWFpbi42YWYwY2FiNzQ5OWYzMzg4LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjwvYm9k'@;
put 'eT4KPC9odG1sPgo=';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64,swap=compiled_apploc apploc)
filename filecode clear;
%let filename=main.6af0cab7499f3388.js;
filename filecode temp lrecl=12063672;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbihjZSl7Y2UuZXhwb3J0cz1mdW5jdGlvbihKKXt2YXIgYj17fTtmdW5jdGlvbiBEKF8pe2lmKGJbX10pcmV0dXJuIGJb'@;
put 'X10uZXhwb3J0czt2YXIgcD1iW19dPXtpOl8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gSltfXS5jYWxsKHAuZXhwb3J0cyxwLHAuZXhwb3J0cyxEKSxwLmw9ITAscC5leHBvcnRzfXJldHVybiBELm09SixELmM9YixELmQ9ZnVuY3Rpb24oXyxwLE4pe0QubyhfLHApfHxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoXyxwLHtlbnVtZXJhYmxlOiEwLGdldDpOfSl9LEQucj1mdW5jdGlvbihfKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxELnQ9ZnVuY3Rpb24oXyxwKXtpZigxJnAmJihfPUQoXykpLDgmcHx8NCZwJiYib2JqZWN0Ij09dHlwZW9mIF8mJl8mJl8uX19lc01vZHVsZSlyZXR1cm4gXzt2YXIgTj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEQucihOKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoTiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6X30pLDImcCYmInN0cmluZyIhPXR5cGVvZiBfKWZvcih2YXIgdyBpbiBfKUQuZChOLHcsZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19LmJpbmQobnVsbCx3KSk7cmV0dXJuIE59LEQubj1mdW5jdGlv'@;
put 'bihfKXt2YXIgcD1fJiZfLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gXy5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBffTtyZXR1cm4gRC5kKHAsImEiLHApLHB9LEQubz1mdW5jdGlvbihfLHApe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxw'@;
put 'KX0sRC5wPSIiLEQoRC5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq'@;
put 'KiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DbGFyaXR5SWNvbnNBcGk9dm9pZCAwO3ZhciBfPUQoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1w'@;
put 'bGF0ZS1vYnNlcnZlci50cyIpLHA9e30sTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3LnNpbmdsZUluc3RhbmNlfHwody5zaW5nbGVJbnN0YW5jZT1uZXcgdyksdy5zaW5n'@;
put 'bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx3LnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oRil7aWYoMD09PUYubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtp'@;
put 'ZigvXHMvLnRlc3QoRikpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0sdy5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKEYpe3JldHVybiBGLnRvTG93'@;
put 'ZXJDYXNlKCl9LHcucHJvdG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihGLEgpe3ZhciBSPUgudHJpbSgpO3RoaXMudmFsaWRhdGVOYW1lKEYpJiYoRj10aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShGKSxwW0ZdJiZkZWxldGUgcFtGXSxwW0ZdPVIsXy5TaGFwZVRlbXBsYXRlT2JzZXJ2'@;
put 'ZXIuaW5zdGFuY2UuZW1pdENoYW5nZXMoRixSKSl9LHcucHJvdG90eXBlLnNldEljb25BbGlhc2VzPWZ1bmN0aW9uKEYsSCxSKXtmb3IodmFyIGo9MCxQPVI7ajxQLmxlbmd0aDtqKyspe3ZhciBMPVBbal07dGhpcy52YWxpZGF0ZU5hbWUoTCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLEws'@;
put 'e2dldDpmdW5jdGlvbigpe3JldHVybiBGW0hdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEYpe2lmKCJvYmplY3QiIT10eXBlb2YgRil0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRl'@;
put 'cmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6ICJzaGFwZS10ZW1wbGF0ZSIgfScpO2Zvcih2YXIgSCBpbiBGKUYuaGFzT3duUHJvcGVydHkoSCkmJnRoaXMuc2V0SWNvblRlbXBsYXRlKEgsRltIXSl9LHcucHJvdG90'@;
put 'eXBlLmhhcz1mdW5jdGlvbihGKXtyZXR1cm4hIXBbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoRildfSx3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oRil7aWYoIUYpcmV0dXJuIHA7aWYoInN0cmluZyIhPXR5cGVvZiBGKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ubHkgc3RyaW5nIGFyZ3VtZW50'@;
put 'IGlzIGFsbG93ZWQgaW4gdGhpcyBtZXRob2QuIik7cmV0dXJuIHBbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoRildfSx3LnByb3RvdHlwZS5hbGlhcz1mdW5jdGlvbihGKXtpZigib2JqZWN0IiE9dHlwZW9mIEYpdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmpl'@;
put 'Y3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiBbImFsaWFzLW5hbWUiLCAuLi5dIH0nKTtmb3IodmFyIEggaW4gRilpZihGLmhhc093blByb3BlcnR5KEgpKXtpZighcC5oYXNPd25Qcm9wZXJ0eShIKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoJ0FuIGljb24gIicrSCsiXCIgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGFsaWFzZXMgdG8gZG9lc24ndCBleGlzdCBpbiB0aGUgQ2xhcml0eSBJY29ucyBzZXRzISIpO3RoaXMuc2V0SWNvbkFsaWFzZXMocCxILEZbSF0pfX0sd30oKTtiLkNsYXJpdHlJY29uc0FwaT1O'@;
put 'fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQu'@;
put 'dHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksYi5DbGFyaXR5SWNvbkVsZW1lbnQ9dm9pZCAwO3ZhciBfPUQoCi8qISAuL2Nsci1pY29ucy1hcGkgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiKSxwPUQoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICov'@;
put 'CiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLE49MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIEY9ZnVuY3Rpb24oKXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBIKCl7dmFyIFI9Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIFIuY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrTixOKyssUn0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihGPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3Ry'@;
put 'dWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLGIuQ2xhcml0eUljb25FbGVtZW50PUgsSC5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChILnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7'@;
put 'Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpIfX0pKS5jb25zdHJ1Y3Rvcj1ILEgucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBSPXcuY2xvbmVOb2RlKCExKTtSLmlkPXRoaXMuY2xySWNvblVuaXFJZCxSLnRleHRDb250'@;
put 'ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKFIpfSxILnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oUil7IU51bWJlcihSKXx8TnVtYmVyKFIpPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5z'@;
put 'dHlsZS53aWR0aD1SKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9UisicHgiKX0sSC5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKFIpe3JldHVybiBSLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEgucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7'@;
put 'dmFyIFI9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgaj10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09aiYmKHRo'@;
put 'aXMuY3VycmVudFNpemVBdHRyVmFsPWosdGhpcy5fc2V0SWNvblNpemUoaikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgUD10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv'@;
put 'bj1wLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhQLGZ1bmN0aW9uKEIpe1IuX2luamVjdFRlbXBsYXRlKEIpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPVAsIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJW'@;
put 'YWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgTD1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihMPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVU'@;
put 'ZW1wbGF0ZT1MfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgWT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1ZJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPVkpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0'@;
put 'dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEgucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihSLGosUCl7dmFyIEw9dGhpcztpZigic2l6ZSI9PT1SJiZ0aGlzLl9zZXRJY29uU2l6ZShQKSwic2hhcGUiPT09Uil7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRy'@;
put 'VmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKFApLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1wLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJz'@;
put 'Y3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oWSl7TC5faW5qZWN0VGVtcGxhdGUoWSl9KSksIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUo'@;
put 'KTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1SJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPVAsIXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVj'@;
put 'dFRlbXBsYXRlKCl9LEgucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxILnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24o'@;
put 'KXt2YXIgUj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksUD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO1I/UiYmUi5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmUC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsUisiICIrdGhpcy5jbHJJ'@;
put 'Y29uVW5pcUlkKTpQLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxILnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oUil7UiYmUiE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRl'@;
put 'PVIpLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sSC5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rp'@;
put 'b24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEos'@;
put 'YixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgXz1EKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIikscD1E'@;
put 'KAovKiEgLi9jbHItaWNvbnMtZWxlbWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxOPUQoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1fLkNsYXJpdHlJ'@;
put 'Y29uc0FwaS5pbnN0YW5jZTtiLkNsYXJpdHlJY29ucz13LHcuYWRkKE4uQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz13KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29u'@;
put 'Iil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY2xyLWljb24iLHAuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog'@;
put 'ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZv'@;
put 'dW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Db3JlU2hhcGVzPWIuQ2xyU2hhcGVBcnJvdz1iLkNsclNoYXBlU3RlcEZvcndhcmQyPWIuQ2xyU2hhcGVFeWVIaWRlPWIuQ2xyU2hhcGVF'@;
put 'eWU9Yi5DbHJTaGFwZUV2ZW50PWIuQ2xyU2hhcGVDYWxlbmRhcj1iLkNsclNoYXBlQW5nbGVEb3VibGU9Yi5DbHJTaGFwZVZpZXdDb2x1bW5zPWIuQ2xyU2hhcGVTZWFyY2g9Yi5DbHJTaGFwZVZtQnVnPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkPWIu'@;
put 'Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPWIuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Yi5DbHJTaGFwZUNsb3VkPWIuQ2xyU2hhcGVJbWFnZT1iLkNsclNoYXBlQmVsbD1iLkNsclNoYXBlRm9sZGVyT3Blbj1iLkNsclNoYXBlRm9sZGVyPWIuQ2xyU2hhcGVBbmdsZT1iLkNsclNoYXBl'@;
put 'VXNlcj1iLkNsclNoYXBlQmFycz1iLkNsclNoYXBlSGVscEluZm89Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1iLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1iLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPWIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Yi5DbHJTaGFwZUluZm9DaXJjbGU9Yi5DbHJT'@;
put 'aGFwZUNoZWNrQ2lyY2xlPWIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1iLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1iLkNsclNoYXBlVGltZXM9Yi5DbHJTaGFwZUNoZWNrPWIuQ2xyU2hhcGVDb2c9Yi5DbHJTaGFwZUhvbWU9Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAw'@;
put 'O3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3Zn'@;
put 'LXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMy'@;
put 'LDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4n'@;
put 'KSxiLkNsclNoYXBlSG9tZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjks'@;
put 'MTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAs'@;
put 'MCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwx'@;
put 'LDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZa'@;
put 'Ii8+JyksYi5DbHJTaGFwZUNvZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIz'@;
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 'M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlQ2hlY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x'@;
put 'My43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxiLkNsclNoYXBlVGltZXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+'@;
put 'JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywx'@;
put 'LjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEt'@;
put 'Ljg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywz'@;
put 'LDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEu'@;
put 'NzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxiLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4'@;
put 'LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEs'@;
put 'MSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43'@;
put 'MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxiLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZa'@;
put 'bTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYu'@;
put 'NzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAt'@;
put 'Mi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLGIuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIx'@;
put 'MS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEs'@;
put 'MSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxiLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEw'@;
put 'LjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEs'@;
put 'MSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxiLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN'@;
put 'MjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i'@;
put 'TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAs'@;
put 'cC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs'@;
put 'MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4'@;
put 'LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksYi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwx'@;
put 'LTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2'@;
put 'LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQz'@;
put 'NDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYz'@;
put 'MzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4w'@;
put 'NDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3'@;
put 'OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIy'@;
put 'MTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEz'@;
put 'LjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44'@;
put 'LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLGIuQ2xyU2hhcGVIZWxwSW5mbz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEu'@;
put 'MTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUu'@;
put 'NzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0w'@;
put 'LTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4z'@;
put 'LjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2Mt'@;
put 'MS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3'@;
put 'LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4'@;
put 'LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJT'@;
put 'aGFwZUJhcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJh'@;
put 'MSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlVXNlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
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+JyksYi5DbHJTaGFwZUFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1'@;
put 'LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxiLkNsclNoYXBlRm9sZGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx'@;
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 'XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNs'@;
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+JyksYi5DbHJTaGFwZUJlbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQu'@;
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 'bGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlSW1hZ2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIs'@;
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+JyksYi5DbHJTaGFwZUNsb3VkPSgwLHAuY2xySWNvblNWRyko'@;
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 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNIb3Jp'@;
put 'em9udGFsPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0i'@;
put 'Mi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIu'@;
put 'OSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5D'@;
put 'bHJTaGFwZUZpbHRlckdyaWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjku'@;
put 'N0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1'@;
put 'YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw'@;
put 'LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwu'@;
put 'MTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksYi5DbHJTaGFwZVZtQnVnPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNv'@;
put 'bGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAs'@;
put 'MCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1'@;
put 'LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAs'@;
put 'MCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVh'@;
put 'MS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAs'@;
put 'MCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0i'@;
put 'I2ZmZmZmZiIvPicpLGIuQ2xyU2hhcGVTZWFyY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIu'@;
put 'MDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1'@;
put 'LDMzLjI5WiIvPicpLGIuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIs'@;
put 'MiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksYi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlM'@;
put 'MTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCww'@;
put 'LDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLGIuQ2xyU2hhcGVDYWxlbmRhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
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 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRXZlbnQ9KDAscC5j'@;
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 'YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVFeWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40'@;
put 'OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQz'@;
put 'LDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAs'@;
put 'MSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUz'@;
put 'TDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMu'@;
put 'MjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxi'@;
put 'LkNsclNoYXBlRXllSGlkZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0'@;
put 'Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2'@;
put 'LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4z'@;
put 'Ny0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwx'@;
put 'LjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEu'@;
put 'MTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUz'@;
put 'Yy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTku'@;
put 'OTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgs'@;
put 'MTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwx'@;
put 'Ny4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxiLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcu'@;
put 'MDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNh'@;
put 'MS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFycm93PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUu'@;
put 'NjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksYi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOmIu'@;
put 'Q2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Yi5DbHJTaGFwZUhvbWUsY29nOmIuQ2xyU2hhcGVDb2csY2hlY2s6Yi5DbHJTaGFwZUNoZWNrLHRpbWVzOmIuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpiLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpiLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Yi5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFu'@;
put 'ZGFyZCI6Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOmIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpiLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOmIuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOmIuQ2xyU2hhcGVC'@;
put 'YXJzLHVzZXI6Yi5DbHJTaGFwZVVzZXIsYW5nbGU6Yi5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpiLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Yi5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpiLkNsclNoYXBlQmVsbCxpbWFnZTpiLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Yi5DbHJTaGFwZUNs'@;
put 'b3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Yi5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpiLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpiLkNsclNo'@;
put 'YXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpiLkNsclNoYXBlVm1CdWcsc2VhcmNoOmIuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Yi5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOmIuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpiLkNsclNoYXBlQ2Fs'@;
put 'ZW5kYXIsZXZlbnQ6Yi5DbHJTaGFwZUV2ZW50LGV5ZTpiLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Yi5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpiLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OmIuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29y'@;
put 'ZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KGIuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp'@;
put 'KGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFw'@;
put 'ZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5D'@;
put 'b3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1si'@;
put 'YW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsYi5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8ocCl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHZhbHVlOnB9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v'@;
put 'cHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu'@;
put 'ZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPWIuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsYi5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9'@;
put 'O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcCgpe3RoaXMuY2FsbGJhY2tzPWIuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuc2luZ2xlSW5zdGFuY2V8fChwLnNpbmdsZUlu'@;
put 'c3RhbmNlPW5ldyBwKSxwLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHAucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKE4sdyl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbTl0/LTE9PT10aGlzLmNhbGxiYWNrc1tOXS5pbmRl'@;
put 'eE9mKHcpJiZ0aGlzLmNhbGxiYWNrc1tOXS5wdXNoKHcpOnRoaXMuY2FsbGJhY2tzW05dPVt3XSxmdW5jdGlvbigpe3ZhciBIPUYuY2FsbGJhY2tzW05dLmluZGV4T2Yodyk7Ri5jYWxsYmFja3NbTl0uc3BsaWNlKEgsMSksMD09PUYuY2FsbGJhY2tzW05dLmxlbmd0aCYmZGVsZXRlIEYuY2Fs'@;
put 'bGJhY2tzW05dfX0scC5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oTix3KXt0aGlzLmNhbGxiYWNrc1tOXSYmdGhpcy5jYWxsYmFja3NbTl0ubWFwKGZ1bmN0aW9uKEYpe0Yodyl9KX0scH0oKTtiLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1ffSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv'@;
put 'dXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioq'@;
put 'IQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksYi5jbHJJY29uU1ZHPXZvaWQgMDtiLmNsckljb25TVkc9ZnVuY3Rpb24gdyhGKXt2YXIgSD0iIjtyZXR1cm4gRi5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoSCs9ImNhbi1iYWRnZSAiKSxGLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoSCs9ImNhbi1h'@;
put 'bGVydCAiKSxGLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihIKz0iaGFzLXNvbGlkICIpLChIPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrSCsnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6'@;
put 'Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1p'@;
put 'ZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrRisiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKGNlKXtjZS5leHBv'@;
put 'cnRzPWZ1bmN0aW9uKEope3ZhciBiPXt9O2Z1bmN0aW9uIEQoXyl7aWYoYltfXSlyZXR1cm4gYltfXS5leHBvcnRzO3ZhciBwPWJbX109e2k6XyxsOiExLGV4cG9ydHM6e319O3JldHVybiBKW19dLmNhbGwocC5leHBvcnRzLHAscC5leHBvcnRzLEQpLHAubD0hMCxwLmV4cG9ydHN9cmV0dXJu'@;
put 'IEQubT1KLEQuYz1iLEQuZD1mdW5jdGlvbihfLHAsTil7RC5vKF8scCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHAse2VudW1lcmFibGU6ITAsZ2V0Ok59KX0sRC5yPWZ1bmN0aW9uKF8pe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShfLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEQudD1mdW5jdGlvbihfLHApe2lmKDEmcCYmKF89RChfKSksOCZwfHw0JnAmJiJvYmplY3QiPT10eXBlb2YgXyYmXyYmXy5f'@;
put 'X2VzTW9kdWxlKXJldHVybiBfO3ZhciBOPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoRC5yKE4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpffSksMiZwJiYic3RyaW5nIiE9dHlwZW9mIF8pZm9yKHZhciB3IGluIF8pRC5kKE4sdyxmdW5j'@;
put 'dGlvbihGKXtyZXR1cm4gX1tGXX0uYmluZChudWxsLHcpKTtyZXR1cm4gTn0sRC5uPWZ1bmN0aW9uKF8pe3ZhciBwPV8mJl8uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBfLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIF99O3JldHVybiBELmQocCwiYSIscCkscH0sRC5vPWZ1bmN0'@;
put 'aW9uKF8scCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHApfSxELnA9IiIsRChELnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgov'@;
put 'KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5BbGxTaGFwZXM9dm9pZCAwO3ZhciBfPUQo'@;
put 'Ci8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLHA9RCgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksTj1EKAovKiEgLi9jb3Jl'@;
put 'LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1EKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLEY9RCgKLyohIC4vbWVkaWEtc2hhcGVzICov'@;
put 'CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksSD1EKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLFI9RCgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLGo9RCgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxQPUQoCi8qISAuL3RyYXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTD1bTi5Db3JlU2hhcGVzLHAuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsRi5NZWRpYVNoYXBlcyxILlNvY2lhbFNoYXBlcyxSLlRlY2hub2xvZ3lTaGFwZXMsUC5UcmF2ZWxTaGFwZXMsXy5DaGFydFNoYXBlcyxq'@;
put 'LlRleHRFZGl0U2hhcGVzXSxZPXt9O2IuQWxsU2hhcGVzPVk7Zm9yKHZhciBCPTAsVz1MO0I8Vy5sZW5ndGg7QisrKXt2YXIgWj1XW0JdO2Zvcih2YXIgWCBpbiBaKVouaGFzT3duUHJvcGVydHkoWCkmJihZW1hdPVpbWF0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy'@;
put 'dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChZKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg'@;
put 'ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu'@;
put 'Y3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DaGFydFNoYXBlcz1iLkNsclNoYXBlQmVsbEN1cnZlPWIuQ2xyU2hhcGVUaWNrQ2hhcnQ9Yi5DbHJTaGFwZVNjYXR0ZXJQbG90PWIuQ2xyU2hhcGVQaWVD'@;
put 'aGFydD1iLkNsclNoYXBlTGluZUNoYXJ0PWIuQ2xyU2hhcGVIZWF0TWFwPWIuQ2xyU2hhcGVHcmlkQ2hhcnQ9Yi5DbHJTaGFwZUN1cnZlQ2hhcnQ9Yi5DbHJTaGFwZUNsb3VkQ2hhcnQ9Yi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PWIuQ2xyU2hhcGVCb3hQbG90PWIuQ2xyU2hhcGVCYXJDaGFydD1i'@;
put 'LkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgXz1EKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1EKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJv'@;
put 'amVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUF4aXNDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1'@;
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+JyksYi5DbHJTaGFwZUJhckNoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3'@;
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+PC9wYXRoPicpLGIuQ2xyU2hhcGVCb3hQbG90PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0'@;
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 'MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBD'@;
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 'LjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlQ2xvdWRDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGgg'@;
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+JyksYi5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRo'@;
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+PC9wYXRoPicpLGIuQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCww'@;
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 'Y2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlSGVhdE1hcD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBM'@;
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+JyksYi5DbHJTaGFwZUxp'@;
put 'bmVDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1'@;
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 'MTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlUGllQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIu'@;
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+JyksYi5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIg'@;
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 'ICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLGIuQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5'@;
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 'NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGIuQ2xyU2hhcGVCZWxsQ3VydmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRz'@;
put 'LTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAs'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0IjpiLkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOmIuQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0IjpiLkNsclNoYXBlQnViYmxlQ2hh'@;
put 'cnQsImNsb3VkLWNoYXJ0IjpiLkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOmIuQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0IjpiLkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0IjpiLkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOmIuQ2xyU2hhcGVQaWVD'@;
put 'aGFydCwidGljay1jaGFydCI6Yi5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90IjpiLkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90IjpiLkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOmIuQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjpiLkNsclNoYXBlQmVsbEN1cnZl'@;
put 'fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5k'@;
put 'b3cuQ2xhcml0eUljb25zLmFkZChiLkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg'@;
put 'ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu'@;
put 'Y3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Db21tZXJjZVNoYXBlcz1iLkNsclNoYXBlRmFjdG9yeT1iLkNsclNoYXBlRW1wbG95ZWU9Yi5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Yi5DbHJTaGFwZVJ1'@;
put 'YmxlPWIuQ2xyU2hhcGVQZXNvPWIuQ2xyU2hhcGVDb2luQmFnPWIuQ2xyU2hhcGVCaXRjb2luPWIuQ2xyU2hhcGVZZW49Yi5DbHJTaGFwZVdvbj1iLkNsclNoYXBlUnVwZWU9Yi5DbHJTaGFwZVBvdW5kPWIuQ2xyU2hhcGVFQ2hlY2s9Yi5DbHJTaGFwZURvbGxhckJpbGw9Yi5DbHJTaGFwZUJh'@;
put 'bms9Yi5DbHJTaGFwZUNyZWRpdENhcmQ9Yi5DbHJTaGFwZURvbGxhcj1iLkNsclNoYXBlRXVybz1iLkNsclNoYXBlU3RvcmU9Yi5DbHJTaGFwZVdhbGxldD1iLkNsclNoYXBlU2hvcHBpbmdDYXJ0PWIuQ2xyU2hhcGVQaWdneUJhbms9Yi5DbHJTaGFwZVNob3BwaW5nQmFnPWIuQ2xyU2hhcGVD'@;
put 'YWxjdWxhdG9yPXZvaWQgMDt2YXIgXz1EKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1EKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUNhbGN1bGF0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy'@;
put 'SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwxLDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAxOCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIw'@;
put 'IDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgcG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4'@;
put 'IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAzMCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIyIDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAs'@;
put 'MiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEySDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gx'@;
put 'MFY1SDI2WiIvPicpLGIuQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1'@;
put 'LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2'@;
put 'My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JyksYi5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEw'@;
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 'WiIvPicpLGIuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+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 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlV2FsbGV0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEs'@;
put 'MCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAs'@;
put 'MS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAs'@;
put 'MCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45'@;
put 'NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUi'@;
put 'Lz4nKSxiLkNsclNoYXBlU3RvcmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCww'@;
put 'LDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0'@;
put 'LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcx'@;
put 'LDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAs'@;
put 'MCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2Ey'@;
put 'LjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JyksYi5DbHJTaGFwZUV1cm89KDAscC5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCww'@;
put 'LDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCww'@;
put 'LDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4'@;
put 'LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwx'@;
put 'MS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSxiLkNsclNoYXBlRG9sbGFyPSgwLHAuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQuMzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIzLjg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUEx'@;
put 'MS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCwwLDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEtNy4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2'@;
put 'LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMsMCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlDMTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4'@;
put 'djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4xNCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5'@;
put 'QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0xLjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4y'@;
put 'NWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4xNCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQs'@;
put 'MCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjksMy41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4x'@;
put 'NS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYuNTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1'@;
put 'QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JyksYi5DbHJTaGFwZUNyZWRpdENhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0w'@;
put 'LDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFu'@;
put 'c2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIs'@;
put 'MCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYW5rPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z'@;
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+JyksYi5DbHJTaGFwZURvbGxhckJpbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAs'@;
put 'MCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIu'@;
put 'MDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEw'@;
put 'Ljg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy'@;
put 'LDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40Nyww'@;
put 'LTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAg'@;
put 'ICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSxiLkNsclNoYXBlRUNoZWNrPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1YyNkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQs'@;
put 'OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEuMDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAs'@;
put 'MC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCwwLDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEu'@;
put 'ODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYxLDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAs'@;
put 'MCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAsMCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSwwLDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCww'@;
put 'LDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSxi'@;
put 'LkNsclNoYXBlUG91bmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQs'@;
put 'MCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwx'@;
put 'LDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcy'@;
put 'LS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4y'@;
put 'MiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLGIuQ2xyU2hhcGVSdXBlZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4'@;
put 'LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEu'@;
put 'OTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41'@;
put 'SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLGIuQ2xyU2hhcGVXb249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSww'@;
put 'LDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwxNC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwxLDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEs'@;
put 'MCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0xOCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEs'@;
put 'MTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9'@;
put 'IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+'@;
put 'XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQuMSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43'@;
put 'OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIw'@;
put 'SDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSwwLDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAs'@;
put 'MCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlWWVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEu'@;
put 'Nmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwz'@;
put 'NCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4y'@;
put 'Nkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSxiLkNsclNoYXBlQml0Y29pbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIx'@;
put 'LDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCww'@;
put 'LDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwy'@;
put 'NS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVDb2luQmFnPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
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+JyksYi5DbHJTaGFwZVBlc289KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcu'@;
put 'ODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42'@;
put 'aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44'@;
put 'SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4'@;
put 'LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYu'@;
put 'MzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1'@;
put 'YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVSdWJsZT0oMCxwLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBa'@;
put 'TTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRB'@;
put 'NC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4y'@;
put 'NSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIw'@;
put 'LjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFa'@;
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+JyksYi5DbHJTaGFwZUVtcGxveWVlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwx'@;
put 'Ni40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCww'@;
put 'LDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEu'@;
put 'NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGEx'@;
put 'LDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwx'@;
put 'LTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksYi5DbHJTaGFwZUZhY3Rvcnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQu'@;
put 'NjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pNNiw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZo'@;
put 'OS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0i'@;
put 'MjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5c'@;
put 'biAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEu'@;
put 'NjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCwwLDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZI'@;
put 'MjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOmIuQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjpiLkNsclNoYXBl'@;
put 'UGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOmIuQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6Yi5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6Yi5DbHJTaGFwZVdhbGxldCxzdG9yZTpiLkNsclNoYXBlU3RvcmUsZXVybzpiLkNsclNoYXBlRXVybyxkb2xsYXI6Yi5DbHJT'@;
put 'aGFwZURvbGxhcixwZXNvOmIuQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6Yi5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazpiLkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOmIuQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjpiLkNsclNoYXBlRUNoZWNrLHBvdW5kOmIuQ2xyU2hhcGVQ'@;
put 'b3VuZCxydXBlZTpiLkNsclNoYXBlUnVwZWUsd29uOmIuQ2xyU2hhcGVXb24seWVuOmIuQ2xyU2hhcGVZZW4sYml0Y29pbjpiLkNsclNoYXBlQml0Y29pbixydWJsZTpiLkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjpiLkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOmIuQ2xyU2hh'@;
put 'cGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOmIuQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5OmIuQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvbW1lcmNlU2hhcGVzWyJwaWdn'@;
put 'eS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Db3JlU2hhcGVzPWIuQ2xyU2hhcGVBcnJvdz1i'@;
put 'LkNsclNoYXBlU3RlcEZvcndhcmQyPWIuQ2xyU2hhcGVFeWVIaWRlPWIuQ2xyU2hhcGVFeWU9Yi5DbHJTaGFwZUV2ZW50PWIuQ2xyU2hhcGVDYWxlbmRhcj1iLkNsclNoYXBlQW5nbGVEb3VibGU9Yi5DbHJTaGFwZVZpZXdDb2x1bW5zPWIuQ2xyU2hhcGVTZWFyY2g9Yi5DbHJTaGFwZVZtQnVn'@;
put 'PWIuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkPWIuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPWIuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Yi5DbHJTaGFwZUNsb3VkPWIuQ2xyU2hhcGVJbWFnZT1iLkNsclNoYXBlQmVsbD1iLkNsclNoYXBlRm9s'@;
put 'ZGVyT3Blbj1iLkNsclNoYXBlRm9sZGVyPWIuQ2xyU2hhcGVBbmdsZT1iLkNsclNoYXBlVXNlcj1iLkNsclNoYXBlQmFycz1iLkNsclNoYXBlSGVscEluZm89Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1iLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1iLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJk'@;
put 'PWIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Yi5DbHJTaGFwZUluZm9DaXJjbGU9Yi5DbHJTaGFwZUNoZWNrQ2lyY2xlPWIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1iLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1iLkNsclNoYXBlVGltZXM9Yi5DbHJTaGFwZUNoZWNrPWIuQ2xyU2hh'@;
put 'cGVDb2c9Yi5DbHJTaGFwZUhvbWU9Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGlscy9z'@;
put 'dmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBj'@;
put 'eD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4z'@;
put 'NCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSww'@;
put 'LDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSxiLkNsclNoYXBlSG9tZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCww'@;
put 'LDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEz'@;
put 'VjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgs'@;
put 'NC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44'@;
put 'M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JyksYi5DbHJTaGFwZUNvZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcs'@;
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 'cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlQ2hlY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxiLkNsclNoYXBlVGltZXM9KDAscC5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwx'@;
put 'LjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmEx'@;
put 'LjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9'@;
put 'IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42'@;
put 'NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu'@;
put 'NDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxiLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1'@;
put 'IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEu'@;
put 'NDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxiLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9'@;
put 'Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEs'@;
put 'MSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLGIuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwy'@;
put 'aDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAs'@;
put 'MCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIs'@;
put 'MiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxiLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAs'@;
put 'MmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQs'@;
put 'MTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwx'@;
put 'LTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxiLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLHAuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVh'@;
put 'MS40LDEuNCwwLDEsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+'@;
put 'JyksYi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'IGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwz'@;
put 'NC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMy'@;
put 'Ljg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3'@;
put 'NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTgg'@;
put 'MzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0'@;
put 'MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCww'@;
put 'djEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLGIuQ2xyU2hhcGVIZWxwSW5mbz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEu'@;
put 'NDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUu'@;
put 'NTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTku'@;
put 'MywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIu'@;
put 'NjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIw'@;
put 'Ljc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2'@;
put 'LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40Nywy'@;
put 'LjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUJhcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwx'@;
put 'LDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlVXNlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwx'@;
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+JyksYi5DbHJTaGFwZUFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIu'@;
put 'NTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxiLkNsclNoYXBlRm9sZGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
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 'PicpLGIuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIs'@;
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+JyksYi5DbHJTaGFwZUJlbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44'@;
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 'NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlSW1hZ2U9KDAs'@;
put 'cC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAg'@;
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+JyksYi5DbHJTaGFwZUNsb3VkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAu'@;
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 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxwLmNsckljb25TVkcp'@;
put 'KCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj'@;
put 'aXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAs'@;
put 'MCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUs'@;
put 'MCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAs'@;
put 'MC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQs'@;
put 'MCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwx'@;
put 'NCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1'@;
put 'bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksYi5DbHJTaGFwZVZtQnVnPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMi'@;
put 'IGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywy'@;
put 'Miw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwx'@;
put 'LjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCww'@;
put 'LDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywx'@;
put 'NC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0x'@;
put 'LjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43Nywx'@;
put 'Ljc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLGIuQ2xyU2hhcGVTZWFyY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEw'@;
put 'Ljk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z'@;
put 'NSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLGIuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEy'@;
put 'LDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksYi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLGIuQ2xyU2hhcGVDYWxlbmRhcj0o'@;
put 'MCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx'@;
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 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRXZlbnQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcs'@;
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 'ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVFeWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYu'@;
put 'MjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMu'@;
put 'OC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwx'@;
put 'OCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIs'@;
put 'MTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5'@;
put 'LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9'@;
put 'IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNsclNoYXBlRXllSGlkZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYu'@;
put 'NzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIs'@;
put 'MS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYu'@;
put 'NDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42'@;
put 'MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgs'@;
put 'OC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41Miwx'@;
put 'OS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEs'@;
put 'MCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxiLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFycm93PSgw'@;
put 'LHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIi8+JyksYi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOmIuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Yi5DbHJTaGFwZUhvbWUsY29nOmIuQ2xyU2hhcGVDb2csY2hlY2s6Yi5DbHJTaGFwZUNoZWNrLHRpbWVzOmIuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRp'@;
put 'b24tdHJpYW5nbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpiLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpiLkNsclNoYXBlSW5mb0NpcmNsZSwi'@;
put 'aW5mby1zdGFuZGFyZCI6Yi5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOmIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpiLkNsclNoYXBlV2FybmluZ1N0YW5k'@;
put 'YXJkLCJoZWxwLWluZm8iOmIuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOmIuQ2xyU2hhcGVCYXJzLHVzZXI6Yi5DbHJTaGFwZVVzZXIsYW5nbGU6Yi5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpiLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Yi5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpiLkNs'@;
put 'clNoYXBlQmVsbCxpbWFnZTpiLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Yi5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Yi5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlk'@;
put 'IjpiLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpiLkNsclNoYXBlVm1CdWcsc2VhcmNoOmIuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Yi5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1k'@;
put 'b3VibGUiOmIuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpiLkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6Yi5DbHJTaGFwZUV2ZW50LGV5ZTpiLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Yi5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpiLkNsclNoYXBlU3RlcEZvcndhcmQy'@;
put 'LGFycm93OmIuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNj'@;
put 'cmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjbG9zZSIs'@;
put 'KDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShiLkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBl'@;
put 'c1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNv'@;
put 'bmZpZykoYi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8u'@;
put 'ZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFw'@;
put 'ZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xyU2hhcGVMb2dvdXQ9Yi5DbHJTaGFwZUxvZ2luPWIuQ2xyU2hhcGVIZWxwPWIuQ2xy'@;
put 'U2hhcGVDb3B5PWIuQ2xyU2hhcGVDaGlsZEFycm93PWIuQ2xyU2hhcGVDaXJjbGVBcnJvdz1iLkNsclNoYXBlQWxhcm1DbG9jaz1iLkNsclNoYXBlQ2xvY2s9Yi5DbHJTaGFwZUhpc3Rvcnk9Yi5DbHJTaGFwZVRhZ3M9Yi5DbHJTaGFwZVRhZz1iLkNsclNoYXBlVHJhc2g9Yi5DbHJTaGFwZVRp'@;
put 'bWVzQ2lyY2xlPWIuQ2xyU2hhcGVCYW49Yi5DbHJTaGFwZVBsdXNDaXJjbGU9Yi5DbHJTaGFwZU1pbnVzQ2lyY2xlPWIuQ2xyU2hhcGVNaW51cz1iLkNsclNoYXBlUGx1cz1iLkNsclNoYXBlRmlsZT1iLkNsclNoYXBlUGluPWIuQ2xyU2hhcGVGaWx0ZXI9Yi5DbHJTaGFwZVBvcE91dD1iLkNs'@;
put 'clNoYXBlVXNlcnM9Yi5DbHJTaGFwZVVubG9jaz1iLkNsclNoYXBlTG9jaz1iLkNsclNoYXBlVXBsb2FkPWIuQ2xyU2hhcGVEb3dubG9hZD1iLkNsclNoYXBlTGlnaHRidWxiPWIuQ2xyU2hhcGVWaWV3Q2FyZHM9Yi5DbHJTaGFwZVZpZXdMaXN0PWIuQ2xyU2hhcGVTeW5jPWIuQ2xyU2hhcGVS'@;
put 'ZWZyZXNoPWIuQ2xyU2hhcGVOb3RlPWIuQ2xyU2hhcGVQZW5jaWw9Yi5DbHJTaGFwZVRoZXJtb21ldGVyPWIuQ2xyU2hhcGVCdWc9Yi5DbHJTaGFwZVNjaXNzb3JzPWIuQ2xyU2hhcGVBc3Rlcmlzaz1iLkNsclNoYXBlQm9vaz1iLkNsclNoYXBlT2JqZWN0cz1iLkNsclNoYXBlUmVzaXplPWIu'@;
put 'Q2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9Yi5DbHJTaGFwZUN1cnNvckhhbmQ9Yi5DbHJTaGFwZUN1cnNvckFycm93PWIuQ2xyU2hhcGVHcmlkVmlldz1iLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249Yi5DbHJTaGFwZU5ldz1iLkNsclNoYXBlQWxhcm1PZmY9Yi5DbHJTaGFwZVBpbmJvYXJk'@;
put 'PWIuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxiLkNsclNoYXBlQ2xvbmU9Yi5DbHJTaGFwZUN1cnNvck1vdmU9Yi5DbHJTaGFwZVdhbmQ9Yi5DbHJTaGFwZVN1bj1iLkNsclNoYXBlTW9vbj1iLkNsclNoYXBlRmlsdGVyMj1iLkNsclNoYXBlRHJhZ0hhbmRsZT1iLkNsclNoYXBlQ29weVRvQ2xp'@;
put 'cGJvYXJkPWIuQ2xyU2hhcGVDb2xvclBpY2tlcj1iLkNsclNoYXBlQnJpZWZjYXNlPWIuQ2xyU2hhcGVFeHBhbmRDYXJkPWIuQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9Yi5DbHJTaGFwZVNvcnRCeT1iLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9Yi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPWIuQ2xy'@;
put 'U2hhcGVTaHJpbms9Yi5DbHJTaGFwZVBhcGVyY2xpcD1iLkNsclNoYXBlRmlsZUdyb3VwPWIuQ2xyU2hhcGVSZXBlYXQ9Yi5DbHJTaGFwZUlkQmFkZ2U9Yi5DbHJTaGFwZUJhbGFuY2U9Yi5DbHJTaGFwZU9yZ2FuaXphdGlvbj1iLkNsclNoYXBlTm9BY2Nlc3M9Yi5DbHJTaGFwZUhvdXJnbGFz'@;
put 'cz1iLkNsclNoYXBlRmxhbWU9Yi5DbHJTaGFwZVRhcmdldD1iLkNsclNoYXBlQnVsbHNleWU9Yi5DbHJTaGFwZVdyZW5jaD1iLkNsclNoYXBlQm9sdD1iLkNsclNoYXBlTGlicmFyeT1iLkNsclNoYXBlS2V5PWIuQ2xyU2hhcGVab29tT3V0PWIuQ2xyU2hhcGVab29tSW49Yi5DbHJTaGFwZVdp'@;
put 'bmRvd1Jlc3RvcmU9Yi5DbHJTaGFwZVdpbmRvd01pbj1iLkNsclNoYXBlV2luZG93TWF4PWIuQ2xyU2hhcGVXaW5kb3dDbG9zZT1iLkNsclNoYXBlVG9vbHM9Yi5DbHJTaGFwZVN3aXRjaD1iLkNsclNoYXBlVHdvV2F5QXJyb3dzPWIuQ2xyU2hhcGVGaWxlU2V0dGluZ3M9Yi5DbHJTaGFwZVNj'@;
put 'cm9sbD1iLkNsclNoYXBlVW5kbz1iLkNsclNoYXBlUmVkbz1iLkNsclNoYXBlTGlzdD1iLkNsclNoYXBlRmlyZXdhbGw9Yi5DbHJTaGFwZUNsaXBib2FyZD1iLkNsclNoYXBlU2xpZGVyPWIuQ2xyU2hhcGVXb3JsZD1iLkNsclNoYXBlUHJpbnRlcj12b2lkIDAsYi5Fc3NlbnRpYWxTaGFwZXM9'@;
put 'Yi5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1iLkNsclNoYXBlRmlyc3RBaWQ9Yi5DbHJTaGFwZUJldGE9Yi5DbHJTaGFwZURvdENpcmNsZT1iLkNsclNoYXBlQ2lyY2xlPWIuQ2xyU2hhcGVDcm9zc2hhaXJzPWIuQ2xyU2hhcGVWb2x1bWU9Yi5DbHJTaGFwZVRhYmxlPWIuQ2xyU2hhcGVTbm93Zmxh'@;
put 'a2U9Yi5DbHJTaGFwZUZ1ZWw9Yi5DbHJTaGFwZUZvcm09Yi5DbHJTaGFwZUZpc2g9Yi5DbHJTaGFwZVRyZWU9Yi5DbHJTaGFwZVJlY3ljbGU9Yi5DbHJTaGFwZUZpbHRlck9mZj1iLkNsclNoYXBlRmlsZVppcD1iLkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49Yi5DbHJTaGFwZUN1cnNvckhhbmRH'@;
put 'cmFiPWIuQ2xyU2hhcGVUcmVlVmlldz1iLkNsclNoYXBlUG9ydHJhaXQ9Yi5DbHJTaGFwZVBhc3RlPWIuQ2xyU2hhcGVMYW5kc2NhcGU9Yi5DbHJTaGFwZUVyYXNlcj1iLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1iLkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIF89RCgKLyohIC4uL3V0'@;
put 'aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9RCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp'@;
put 'LE49RCgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO2IuQ2xyU2hhcGVBZGRUZXh0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEs'@;
put 'MjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxiLkNsclNoYXBlUGluYm9hcmQ9KDAscC5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9'@;
put 'Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNs'@;
put 'Mi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTct'@;
put 'N2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgs'@;
put 'MS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLGIuQ2xyU2hhcGVBbGFybU9mZj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2'@;
put 'LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIy'@;
put 'QS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRs'@;
put 'Mi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIs'@;
put 'MjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0'@;
put 'bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLGIuQ2xyU2hhcGVOZXc9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4w'@;
put 'OC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCww'@;
put 'LDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4'@;
put 'IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAx'@;
put 'Ni44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44'@;
put 'NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIs'@;
put 'MkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0x'@;
put 'LjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLGIuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgs'@;
put 'Mi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0'@;
put 'LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRz'@;
put 'Ny4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEs'@;
put 'MCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLGIuQ2xyU2hhcGVHcmlkVmlldz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAs'@;
put 'NEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAs'@;
put 'MCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2'@;
put 'OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9'@;
put 'IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4'@;
put 'PSIyIiByeT0iMiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3'@;
put 'bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCww'@;
put 'LDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAs'@;
put 'MCwwLDI5LDEyLjM2WiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4'@;
put 'LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEu'@;
put 'NDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAs'@;
put 'MS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40'@;
put 'MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4y'@;
put 'OGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMu'@;
put 'MjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYx'@;
put 'NS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAs'@;
put 'MTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0w'@;
put 'LjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQt'@;
put 'MS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUu'@;
put 'OFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYt'@;
put 'My4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2'@;
put 'LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjks'@;
put 'MC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwx'@;
put 'LjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksYi5DbHJTaGFwZVJlc2l6ZT0oMCxwLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksYi5DbHJTaGFwZU9iamVjdHM9KDAscC5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41'@;
put 'Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgz'@;
put 'MlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSww'@;
put 'LDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUs'@;
put 'MjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMi'@;
put 'IGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxiLkNsclNoYXBlQm9vaz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDks'@;
put 'MSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5'@;
put 'LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4w'@;
put 'NiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxiLkNsclNoYXBlQXN0ZXJpc2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44'@;
put 'NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0'@;
put 'LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEt'@;
put 'MS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4'@;
put 'bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksYi5DbHJTaGFwZVNjaXNz'@;
put 'b3JzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1'@;
put 'Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41Nyww'@;
put 'LDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMu'@;
put 'NzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYs'@;
put 'MEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwx'@;
put 'LDcuNDUsMTMuMjNaIi8+JyksYi5DbHJTaGFwZUJ1Zz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
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 'LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLGIuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSww'@;
put 'LDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxiLkNsclNoYXBlUGVuY2lsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAs'@;
put 'MCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQu'@;
put 'MjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4z'@;
put 'MmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLGIuQ2xyU2hhcGVOb3RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwy'@;
put 'LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4y'@;
put 'OCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wy'@;
put 'LjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2'@;
put 'SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwz'@;
put 'LjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSZWZyZXNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDks'@;
put 'MCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDEx'@;
put 'LjY1WiIvPicpLGIuQ2xyU2hhcGVTeW5jPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDgu'@;
put 'NywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSww'@;
put 'LDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCww'@;
put 'LDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksYi5DbHJTaGFwZVZpZXdMaXN0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSww'@;
put 'LDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLGIuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLGIuQ2xyU2hhcGVMaWdodGJ1bGI9KDAscC5jbHJJY29uU1ZHKSgnPHBh'@;
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 'Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxiLkNsclNoYXBlRG93bmxvYWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQx'@;
put 'LTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1'@;
put 'YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5'@;
put 'LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAt'@;
put 'MS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZVVwbG9hZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVh'@;
put 'MSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAs'@;
put 'MS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQs'@;
put 'MSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwx'@;
put 'czEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05Ljlj'@;
put 'LTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEs'@;
put 'MSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40'@;
put 'MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicp'@;
put 'LGIuQ2xyU2hhcGVMb2NrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVa'@;
put 'TTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAs'@;
put 'MCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAs'@;
put 'MSw2LDYuMzZaIi8+JyksYi5DbHJTaGFwZVVubG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2'@;
put 'LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgy'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEs'@;
put 'MSwyLC4wOVoiLz4nKSxiLkNsclNoYXBlVXNlcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44'@;
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 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlUG9wT3V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxiLkNsclNoYXBlRmlsdGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5'@;
put 'bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44'@;
put 'MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywx'@;
put 'LjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVBpbj0oMCxwLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAs'@;
put 'MCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgw'@;
put 'YTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEu'@;
put 'NDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwx'@;
put 'LjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksYi5DbHJTaGFwZUZpbGU9KDAscC5jbHJJY29u'@;
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 'LjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLGIuQ2xyU2hhcGVQbHVz'@;
put 'PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEs'@;
put 'MCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxiLkNsclNoYXBlTWludXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp'@;
put 'LGIuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs'@;
put 'MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThB'@;
put 'MTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVCYW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJa'@;
put 'TTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLGIuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43'@;
put 'Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQs'@;
put 'MCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJs'@;
put 'LTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLGIuQ2xyU2hhcGVUcmFzaD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0'@;
put 'LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxiLkNsclNoYXBlVGFnPSgwLHAuY2xySWNvblNWRykoJzxjaXJj'@;
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 'PicpLGIuQ2xyU2hhcGVUYWdzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45'@;
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+JyksYi5DbHJTaGFwZUhpc3Rvcnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1'@;
put 'LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUNsb2NrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs'@;
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 'MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxi'@;
put 'LkNsclNoYXBlQWxhcm1DbG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
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 'YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx'@;
put 'OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2'@;
put 'LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZUNoaWxkQXJyb3c9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCww'@;
put 'LDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUNvcHk9KDAscC5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNsclNoYXBlSGVscD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkEx'@;
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 'Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlTG9naW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYy'@;
put 'MC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5'@;
put 'LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAs'@;
put 'MCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVMb2dvdXQ9KDAscC5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y'@;
put 'OC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiLz4nKSxiLkNsclNoYXBlUHJpbnRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5'@;
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 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVXb3JsZD0oMCxwLmNsckljb25TVkcpKCc8cGF0'@;
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 'cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVTbGlkZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDgu'@;
put 'NDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwx'@;
put 'Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0'@;
put 'LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAs'@;
put 'MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCww'@;
put 'LDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAs'@;
put 'MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMy'@;
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+JyksYi5DbHJTaGFwZUZpcmV3YWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMy'@;
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 'NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVMaXN0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
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 'LGIuQ2xyU2hhcGVSZWRvPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEz'@;
put 'bC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVVbmRvPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwx'@;
put 'Miw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVTY3JvbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQu'@;
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+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLHAuY2xy'@;
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+JyksYi5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjku'@;
put 'NTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEu'@;
put 'NDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlU3dpdGNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFM'@;
put 'OS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIg'@;
put 'eT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC02IiAvPicpLGIuQ2xyU2hhcGVUb29scz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCww'@;
put 'LDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFM'@;
put 'MzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwx'@;
put 'LDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlV2luZG93Q2xvc2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5'@;
put 'LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlV2luZG93TWF4PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcu'@;
put 'ODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVdpbmRvd01pbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAs'@;
put 'MjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVpvb21Jbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEw'@;
put 'LDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEt'@;
put 'MS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVab29tT3V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCww'@;
put 'LDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNo'@;
put 'YXBlS2V5PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
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 'ZSIgLz4nKSxiLkNsclNoYXBlTGlicmFyeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4'@;
put 'LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMu'@;
put 'OTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUJvbHQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgz'@;
put 'MC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSww'@;
put 'LDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUu'@;
put 'NywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPicpLGIuQ2xyU2hhcGVXcmVuY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcs'@;
put 'MCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42'@;
put 'MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4z'@;
put 'IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAu'@;
put 'NUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAs'@;
put 'MSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUJ1bGxzZXllPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBs'@;
put 'LTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4z'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4'@;
put 'LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRM'@;
put 'MTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEs'@;
put 'MSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEz'@;
put 'LjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlVGFyZ2V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcu'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgs'@;
put 'NC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVGbGFtZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx'@;
put 'Ny43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQz'@;
put 'LDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3'@;
put 'LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0y'@;
put 'LjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIs'@;
put 'Ny44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCww'@;
put 'LDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0'@;
put 'bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlSG91cmdsYXNzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2'@;
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+JyksYi5DbHJTaGFwZU5vQWNjZXNzPSgwLHAuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4y'@;
put 'NUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs'@;
put 'MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxwLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAx'@;
put 'Ny4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDIt'@;
put 'MlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVB'@;
put 'MiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiww'@;
put 'LDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4'@;
put 'LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIy'@;
put 'IiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZUJhbGFuY2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEy'@;
put 'YTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIz'@;
put 'LDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcu'@;
put 'MjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0u'@;
put 'NjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLGIuQ2xyU2hhcGVJZEJhZGdlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0'@;
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+JyksYi5DbHJTaGFwZVJlcGVhdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYs'@;
put 'MTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3'@;
put 'LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxiLkNsclNoYXBlRmlsZUdyb3VwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwx'@;
put 'LTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIg'@;
put 'aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAs'@;
put 'MCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLGIuQ2xyU2hhcGVQYXBlcmNsaXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDks'@;
put 'MCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSww'@;
put 'LDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQu'@;
put 'NjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLGIuQ2xyU2hhcGVTaHJpbms9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksYi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLHAuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAs'@;
put 'MCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAs'@;
put 'Ljc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEt'@;
put 'LjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5'@;
put 'LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4x'@;
put 'MiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjks'@;
put 'Ny4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQz'@;
put 'LDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEs'@;
put 'MCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwz'@;
put 'My4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhh'@;
put 'MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVNvcnRCeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywy'@;
put 'MUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1'@;
put 'LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAt'@;
put 'MS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEs'@;
put 'MCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAscC5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCww'@;
put 'LDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAs'@;
put 'MCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQnJpZWZjYXNlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwy'@;
put 'LDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwx'@;
put 'LDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSww'@;
put 'LDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAs'@;
put 'MCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2'@;
put 'OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQz'@;
put 'QS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUNvbG9yUGlja2Vy'@;
put 'PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2Ey'@;
put 'LjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAs'@;
put 'MS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQu'@;
put 'MDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40'@;
put 'MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLHAuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCww'@;
put 'LDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQy'@;
put 'LTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhB'@;
put 'MS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMz'@;
put 'SDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVGaWx0ZXIyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCww'@;
put 'LDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+'@;
put 'XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZU1vb249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0x'@;
put 'LS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAs'@;
put 'MzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVN1bj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
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 'aWQtcGF0aC05IiAvPicpLGIuQ2xyU2hhcGVXYW5kPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40'@;
put 'NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjha'@;
put 'TTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEz'@;
put 'bC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSww'@;
put 'LDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEu'@;
put 'MTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksYi5DbHJT'@;
put 'aGFwZUN1cnNvck1vdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVh'@;
put 'MSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5'@;
put 'LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQ2xvbmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0'@;
put 'aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAs'@;
put 'MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRGV0YWlscz0oMCxwLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCww'@;
put 'LDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiww'@;
put 'LDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiAvPicpLGIuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVFcmFzZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMy'@;
put 'SDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04'@;
put 'LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwy'@;
put 'OC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgz'@;
put 'LDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlTGFuZHNjYXBlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1'@;
put 'LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNs'@;
put 'MS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwy'@;
put 'LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4w'@;
put 'NiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVBhc3RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0'@;
put 'LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0'@;
put 'djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBI'@;
put 'Mjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAv'@;
put 'PjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02'@;
put 'IiAvPicpLGIuQ2xyU2hhcGVQb3J0cmFpdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTgu'@;
put 'OCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAs'@;
put 'MCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEu'@;
put 'MzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlVHJlZVZpZXc9KDAscC5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9'@;
put 'Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwx'@;
put 'LDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAs'@;
put 'MC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCww'@;
put 'LDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCww'@;
put 'LDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLHAuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44'@;
put 'OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAs'@;
put 'MCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIu'@;
put 'MzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5'@;
put 'aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2'@;
put 'LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3'@;
put 'LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4y'@;
put 'NVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgx'@;
put 'Ljh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVGaWxlWmlwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIw'@;
put 'LjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0'@;
put 'YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAu'@;
put 'NC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0w'@;
put 'LjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMt'@;
put 'M3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFI'@;
put 'MTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRmlsdGVyT2ZmPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAu'@;
put 'MWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwy'@;
put 'My45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFs'@;
put 'OCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVSZWN5Y2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCww'@;
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 'LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlVHJlZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43'@;
put 'QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0x'@;
put 'LTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01'@;
put 'LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAu'@;
put 'OCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQt'@;
put 'MC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxi'@;
put 'LkNsclNoYXBlRmlzaD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44'@;
put 'MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEu'@;
put 'OTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0u'@;
put 'MTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4x'@;
put 'MywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVGb3JtPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSww'@;
put 'LDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEs'@;
put 'MCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEy'@;
put 'LjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAs'@;
put 'MCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCww'@;
put 'LDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlRnVlbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEu'@;
put 'MTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1'@;
put 'LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0x'@;
put 'OCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLGIuQ2xyU2hhcGVTbm93Zmxha2U9KDAscC5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4w'@;
put 'NywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwz'@;
put 'MS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxw'@;
put 'YXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci'@;
put 'IC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxiLkNsclNoYXBlVGFibGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEt'@;
put 'MVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMz'@;
put 'YTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlVm9sdW1lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEt'@;
put 'LjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwx'@;
put 'LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJN'@;
put 'MjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxiLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh'@;
put 'dGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAs'@;
put 'MSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMu'@;
put 'MSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZUNpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYs'@;
put 'MCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZURvdENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0'@;
put 'aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCZXRhPSgwLHAuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdz'@;
put 'LS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZI'@;
put 'MTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTgu'@;
put 'MDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAs'@;
put 'MCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiww'@;
put 'LTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAu'@;
put 'NCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwx'@;
put 'NS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4'@;
put 'LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSxiLkNsclNoYXBlRmlyc3RBaWQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI'@;
put 'NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMs'@;
put 'MS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYu'@;
put 'OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41'@;
put 'YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxiLkNsclNo'@;
put 'YXBlQ29sb3JQYWxldHRlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgs'@;
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 'MCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuRXNzZW50aWFsU2hhcGVzPXsi'@;
put 'YWRkLXRleHQiOmIuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOmIuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpiLkNsclNoYXBlUGluYm9hcmQsbmV3OmIuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Yi5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXci'@;
put 'OmIuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpiLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpiLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOmIuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOmIuQ2xyU2hh'@;
put 'cGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Yi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Yi5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Yi5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpiLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Yi5DbHJT'@;
put 'aGFwZU9iamVjdHMsYm9vazpiLkNsclNoYXBlQm9vayxhc3RlcmlzazpiLkNsclNoYXBlQXN0ZXJpc2ssYnVnOmIuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Yi5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOmIuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Yi5DbHJTaGFwZVBlbmNpbCxu'@;
put 'b3RlOmIuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Yi5DbHJTaGFwZVJlZnJlc2gsc3luYzpiLkNsclNoYXBlU3luYywidmlldy1saXN0IjpiLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOmIuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Yi5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0'@;
put 'YnVsYjpiLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOmIuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6Yi5DbHJTaGFwZVVwbG9hZCxsb2NrOmIuQ2xyU2hhcGVMb2NrLHVubG9jazpiLkNsclNoYXBlVW5sb2NrLHVzZXJzOmIuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Yi5DbHJTaGFwZVBv'@;
put 'cE91dCxmaWx0ZXI6Yi5DbHJTaGFwZUZpbHRlcixwaW46Yi5DbHJTaGFwZVBpbixmaWxlOmIuQ2xyU2hhcGVGaWxlLHBsdXM6Yi5DbHJTaGFwZVBsdXMsbWludXM6Yi5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOmIuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOmIuQ2xy'@;
put 'U2hhcGVQbHVzQ2lyY2xlLGJhbjpiLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOmIuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpiLkNsclNoYXBlVHJhc2gsY2lyY2xlOmIuQ2xyU2hhcGVDaXJjbGUsdGFnOmIuQ2xyU2hhcGVUYWcsdGFnczpiLkNsclNoYXBlVGFncyxoaXN0b3J5OmIu'@;
put 'Q2xyU2hhcGVIaXN0b3J5LGNsb2NrOmIuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOmIuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93Ok4uQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpiLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93IjpiLkNsclNoYXBlQ2hpbGRBcnJv'@;
put 'dyxjb3B5OmIuQ2xyU2hhcGVDb3B5LGhlbHA6Yi5DbHJTaGFwZUhlbHAsbG9naW46Yi5DbHJTaGFwZUxvZ2luLGxvZ291dDpiLkNsclNoYXBlTG9nb3V0LHByaW50ZXI6Yi5DbHJTaGFwZVByaW50ZXIsd29ybGQ6Yi5DbHJTaGFwZVdvcmxkLHNsaWRlcjpiLkNsclNoYXBlU2xpZGVyLGNsaXBi'@;
put 'b2FyZDpiLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOmIuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OmIuQ2xyU2hhcGVMaXN0LHJlZG86Yi5DbHJTaGFwZVJlZG8sdW5kbzpiLkNsclNoYXBlVW5kbyxzY3JvbGw6Yi5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6Yi5DbHJTaGFwZUZp'@;
put 'bGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOmIuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOmIuQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6Yi5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOmIuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6Yi5DbHJTaGFwZVdpbmRvd01h'@;
put 'eCwid2luZG93LW1pbiI6Yi5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOmIuQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjpiLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6Yi5DbHJTaGFwZVpvb21PdXQsa2V5OmIuQ2xyU2hhcGVLZXksbGlicmFyeTpiLkNsclNo'@;
put 'YXBlTGlicmFyeSxib2x0OmIuQ2xyU2hhcGVCb2x0LHdyZW5jaDpiLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOmIuQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6Yi5DbHJTaGFwZVRhcmdldCxmbGFtZTpiLkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOmIuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFj'@;
put 'Y2VzcyI6Yi5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpiLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6Yi5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjpiLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6Yi5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6Yi5DbHJTaGFwZUZp'@;
put 'bGVHcm91cCxwYXBlcmNsaXA6Yi5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6Yi5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjpiLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6Yi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5IjpiLkNsclNo'@;
put 'YXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpiLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6Yi5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOmIuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6Yi5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBi'@;
put 'b2FyZCI6Yi5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOmIuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6Yi5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpiLkNsclNoYXBlTW9vbixzdW46Yi5DbHJTaGFwZVN1bix3YW5kOmIuQ2xyU2hhcGVXYW5kLGNsb25lOmIuQ2xy'@;
put 'U2hhcGVDbG9uZSxkZXRhaWxzOmIuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOmIuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjpiLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpiLkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOmIuQ2xyU2hhcGVQYXN0ZSxwb3J0'@;
put 'cmFpdDpiLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpiLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6Yi5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOmIuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6Yi5DbHJTaGFwZVRyZWUsZmlzaDpiLkNsclNoYXBlRmlzaCxmb3JtOmIuQ2xyU2hh'@;
put 'cGVGb3JtLGZ1ZWw6Yi5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOmIuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6Yi5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjpiLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpiLkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6Yi5DbHJTaGFwZUNyb3NzaGFp'@;
put 'cnMsYmV0YTpiLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6Yi5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp'@;
put 'KGIuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVz'@;
put 'LCJhZGQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmln'@;
put 'KShiLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hh'@;
put 'cGVzLCJsaWdodG5pbmciLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6'@;
put 'YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicGlu'@;
put 'bmVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxfLmRl'@;
put 'c2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3'@;
put 'aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov'@;
put 'Ci8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuTWVkaWFTaGFwZXM9Yi5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPWIuQ2xyU2hhcGVNaWNyb3Bo'@;
put 'b25lPWIuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Yi5DbHJTaGFwZVJlcGxheU9uZT1iLkNsclNoYXBlUmVwbGF5QWxsPWIuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Yi5DbHJTaGFwZU11c2ljTm90ZT1iLkNsclNoYXBlRmlsbVN0cmlwPWIuQ2xyU2hhcGVIZWFkcGhvbmVzPWIuQ2xyU2hhcGVWb2x1'@;
put 'bWVNdXRlPWIuQ2xyU2hhcGVWb2x1bWVVcD1iLkNsclNoYXBlVm9sdW1lRG93bj1iLkNsclNoYXBlU2h1ZmZsZT1iLkNsclNoYXBlVmlkZW9DYW1lcmE9Yi5DbHJTaGFwZUNhbWVyYT1iLkNsclNoYXBlRmFzdEZvcndhcmQ9Yi5DbHJTaGFwZVJld2luZD1iLkNsclNoYXBlUG93ZXI9Yi5DbHJT'@;
put 'aGFwZVN0b3A9Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkPWIuQ2xyU2hhcGVQYXVzZT1iLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIF89RCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2Iu'@;
put 'Q2xyU2hhcGVQbGF5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIu'@;
put 'MDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLGIuQ2xyU2hhcGVQYXVzZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEy'@;
put 'LjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYu'@;
put 'ODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBo'@;
put 'ZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSxiLkNsclNo'@;
put 'YXBlU3RlcEZvcndhcmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2'@;
put 'LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgz'@;
put 'YTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIz'@;
put 'LjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0i'@;
put 'MiIgcnk9IjIiLz4nKSxiLkNsclNoYXBlU3RvcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCww'@;
put 'LDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksYi5DbHJTaGFwZVBvd2VyPSgw'@;
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 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVSZXdpbmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAs'@;
put 'MS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIu'@;
put 'MDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLGIuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxf'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiww'@;
put 'LDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiww'@;
put 'LDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3'@;
put 'LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45Myww'@;
put 'LDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSxiLkNsclNoYXBlQ2FtZXJhPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEy'@;
put 'LDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44'@;
put 'LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAs'@;
put 'MCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLGIuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxfLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEy'@;
put 'LDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVh'@;
put 'LjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCww'@;
put 'LTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxiLkNsclNoYXBlU2h1ZmZsZT0oMCxfLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAs'@;
put 'MC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEs'@;
put 'MTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JyksYi5DbHJTaGFwZVZvbHVtZURvd249KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMy'@;
put 'Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0x'@;
put 'Ljg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0'@;
put 'LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLGIuQ2xyU2hhcGVWb2x1bWVVcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs'@;
put 'MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4z'@;
put 'My03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs'@;
put 'MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwz'@;
put 'MS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLGIuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwy'@;
put 'LDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4y'@;
put 'OEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQu'@;
put 'ODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42'@;
put 'OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2'@;
put 'LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42'@;
put 'N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEu'@;
put 'NzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYu'@;
put 'MTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQu'@;
put 'NjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSxiLkNsclNoYXBlSGVhZHBob25lcz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwx'@;
put 'Ny41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwy'@;
put 'Ljc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwy'@;
put 'NiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFI'@;
put 'NlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSxiLkNsclNoYXBl'@;
put 'RmlsbVN0cmlwPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMw'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4'@;
put 'QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3'@;
put 'aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNI'@;
put 'MjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44'@;
put 'NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JyksYi5DbHJTaGFwZU11c2ljTm90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMt'@;
put 'MTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5'@;
put 'LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMz'@;
put 'LDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUy'@;
put 'LDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4g'@;
put 'ICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAs'@;
put 'Mi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEu'@;
put 'OS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JyksYi5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCww'@;
put 'LDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+'@;
put 'PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0x'@;
put 'LDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGgg'@;
put 'ZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCww'@;
put 'LDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4'@;
put 'TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41'@;
put 'OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYt'@;
put 'NS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSww'@;
put 'LDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlUmVwbGF5'@;
put 'T25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4'@;
put 'TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2'@;
put 'LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz4nKSxiLkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEEx'@;
put 'Ljg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQs'@;
put 'MCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4y'@;
put 'NS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4'@;
put 'LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCww'@;
put 'LTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVNaWNyb3Bob25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4y'@;
put 'LDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYz'@;
put 'MmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45'@;
put 'LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYu'@;
put 'Myw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks'@;
put 'Yi5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0'@;
put 'eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4x'@;
put 'LDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44'@;
put 'LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwx'@;
put 'LjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44'@;
put 'LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4y'@;
put 'QzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFo'@;
put 'LTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLk1lZGlhU2hhcGVzPXtwbGF5OmIuQ2xyU2hhcGVQbGF5LHBhdXNlOmIuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjpiLkNsclNoYXBlU3Rl'@;
put 'cEZvcndhcmQsc3RvcDpiLkNsclNoYXBlU3RvcCxwb3dlcjpiLkNsclNoYXBlUG93ZXIscmV3aW5kOmIuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6Yi5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpiLkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOmIuQ2xyU2hhcGVWaWRl'@;
put 'b0NhbWVyYSxzaHVmZmxlOmIuQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOmIuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOmIuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6Yi5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczpiLkNsclNoYXBlSGVhZHBob25l'@;
put 'cywiZmlsbS1zdHJpcCI6Yi5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6Yi5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6Yi5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6Yi5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6Yi5DbHJTaGFwZVJl'@;
put 'cGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6Yi5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOmIuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOmIuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgi'@;
put 'Q2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAg'@;
put 'ICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz'@;
put 'IGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Tb2NpYWxTaGFwZXM9Yi5DbHJTaGFwZUhhc2h0YWc9Yi5DbHJTaGFwZUNyb3duPWIuQ2xyU2hhcGVUaHVtYnNEb3duPWIuQ2xyU2hh'@;
put 'cGVUaHVtYnNVcD1iLkNsclNoYXBlU2FkRmFjZT1iLkNsclNoYXBlTmV1dHJhbEZhY2U9Yi5DbHJTaGFwZUhhcHB5RmFjZT1iLkNsclNoYXBlUGljdHVyZT1iLkNsclNoYXBlQ2hhdEJ1YmJsZT1iLkNsclNoYXBlVGFsa0J1YmJsZXM9Yi5DbHJTaGFwZUhlYXJ0QnJva2VuPWIuQ2xyU2hhcGVI'@;
put 'ZWFydD1iLkNsclNoYXBlSW5ib3g9Yi5DbHJTaGFwZUZsYWc9Yi5DbHJTaGFwZVRhc2tzPWIuQ2xyU2hhcGVFbnZlbG9wZT1iLkNsclNoYXBlQm9va21hcms9Yi5DbHJTaGFwZUhhbGZTdGFyPWIuQ2xyU2hhcGVTdGFyPWIuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIF89RCgKLyohIC4uL3V0'@;
put 'aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9RCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp'@;
put 'LE49RCgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO2IuQ2xyU2hhcGVTaGFyZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUz'@;
put 'LDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwx'@;
put 'LDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3'@;
put 'QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLGIuQ2xyU2hhcGVTdGFyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4'@;
put 'bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4y'@;
put 'MiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAs'@;
put 'MCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBM'@;
put 'MTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTgu'@;
put 'MzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00'@;
put 'LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVh'@;
put 'Mi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JyksYi5DbHJTaGFwZUhhbGZTdGFyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'IiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41'@;
put 'NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEs'@;
put 'LjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1'@;
put 'LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw'@;
put 'LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEu'@;
put 'MjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAt'@;
put 'MS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSxiLkNsclNoYXBlQm9va21hcms9KDAscC5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIs'@;
put 'MCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42'@;
put 'Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JyksYi5DbHJTaGFwZUVudmVsb3BlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAs'@;
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 'MCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlVGFza3M9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAs'@;
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 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVGbGFnPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwx'@;
put 'NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0'@;
put 'Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4Ljgs'@;
put 'MCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg'@;
put 'ZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIs'@;
put 'MTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JyksYi5DbHJTaGFwZUluYm94PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x'@;
put 'Mi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwz'@;
put 'M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUs'@;
put 'MCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFwZUhlYXJ0'@;
put 'PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJh'@;
put 'OS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0Ljgs'@;
put 'OC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSww'@;
put 'LDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0z'@;
put 'LjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUt'@;
put 'NC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0y'@;
put 'Ljc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42'@;
put 'OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUu'@;
put 'OSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgs'@;
put 'Mi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0'@;
put 'LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQu'@;
put 'MTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVUYWxrQnVi'@;
put 'Ymxlcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgy'@;
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 'ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVj'@;
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+JyksYi5DbHJTaGFwZVBpY3R1cmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww'@;
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+JyksYi5DbHJTaGFwZUhhcHB5RmFjZT0oMCxwLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJB'@;
put 'MTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIs'@;
put 'MiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwx'@;
put 'LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJh'@;
put 'MSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZVNhZEZhY2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx'@;
put 'MS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwx'@;
put 'LDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEs'@;
put 'MS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAs'@;
put 'MCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlVGh1bWJzVXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4w'@;
put 'OEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTku'@;
put 'MTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQs'@;
put 'MjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVGh1bWJzRG93bj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgy'@;
put 'M1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43'@;
put 'NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEw'@;
put 'Ljg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yIiAvPicpLGIuQ2xyU2hhcGVDcm93bj0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+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 'biAgJyksYi5DbHJTaGFwZUhhc2h0YWc9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wt'@;
put 'MS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhM'@;
put 'MjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44'@;
put 'M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCww'@;
put 'LTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJh'@;
put 'MSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksYi5Tb2NpYWxTaGFwZXM9e2Nyb3du'@;
put 'OmIuQ2xyU2hhcGVDcm93bixzaGFyZTpiLkNsclNoYXBlU2hhcmUsc3RhcjpiLkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjpiLkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6Yi5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOmIuQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjpOLkNsclNoYXBl'@;
put 'Q2FsZW5kYXIsZXZlbnQ6Ti5DbHJTaGFwZUV2ZW50LHRhc2tzOmIuQ2xyU2hhcGVUYXNrcyxmbGFnOmIuQ2xyU2hhcGVGbGFnLGluYm94OmIuQ2xyU2hhcGVJbmJveCxoYXNodGFnOmIuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OmIuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpiLkNsclNo'@;
put 'YXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6Yi5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Yi5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpiLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Yi5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpiLkNs'@;
put 'clNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjpiLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpiLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpiLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAs'@;
put 'Xy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlNvY2lh'@;
put 'bFNoYXBlcywiZGF0ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLlNvY2lhbFNoYXBlcyl9LCIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90'@;
put 'ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DbHJTaGFwZVZNV0FwcD1iLkNsclNoYXBlVk09Yi5DbHJTaGFwZVJvdXRlcj1iLkNsclNoYXBlTmV0d29ya1N3aXRjaD1iLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPWIuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9'@;
put 'Yi5DbHJTaGFwZVRhYmxldD1iLkNsclNoYXBlTW9iaWxlPWIuQ2xyU2hhcGVCYXR0ZXJ5PWIuQ2xyU2hhcGVBcHBsaWNhdGlvbj1iLkNsclNoYXBlQ29kZT1iLkNsclNoYXBlVGVybWluYWw9Yi5DbHJTaGFwZURpc3BsYXk9Yi5DbHJTaGFwZUNvbXB1dGVyPWIuQ2xyU2hhcGVGbG9wcHk9Yi5D'@;
put 'bHJTaGFwZVBsdWdpbj1iLkNsclNoYXBlRG93bmxvYWRDbG91ZD1iLkNsclNoYXBlVXBsb2FkQ2xvdWQ9Yi5DbHJTaGFwZUV4cG9ydD1iLkNsclNoYXBlSW1wb3J0PWIuQ2xyU2hhcGVTaGllbGRYPWIuQ2xyU2hhcGVTaGllbGQ9Yi5DbHJTaGFwZVNoaWVsZENoZWNrPWIuQ2xyU2hhcGVSZXNv'@;
put 'dXJjZVBvb2w9Yi5DbHJTaGFwZURhdGFDbHVzdGVyPWIuQ2xyU2hhcGVNZW1vcnk9Yi5DbHJTaGFwZUNQVT1iLkNsclNoYXBlQnVpbGRpbmc9Yi5DbHJTaGFwZUFwcGxpY2F0aW9ucz1iLkNsclNoYXBlQ2x1c3Rlcj1iLkNsclNoYXBlU3RvcmFnZT1iLkNsclNoYXBlSG9zdD1iLkNsclNoYXBl'@;
put 'RGFzaGJvYXJkPWIuQ2xyU2hhcGVNb3VzZT1iLkNsclNoYXBlS2V5Ym9hcmQ9Yi5DbHJTaGFwZURldmljZXM9Yi5DbHJTaGFwZUJhY2t1cD1iLkNsclNoYXBlQmFja3VwUmVzdG9yZT1iLkNsclNoYXBlSGFyZERpc2s9Yi5DbHJTaGFwZVJhY2tTZXJ2ZXI9Yi5DbHJTaGFwZVdpZmk9Yi5DbHJT'@;
put 'aGFwZUJ1bmRsZT1iLkNsclNoYXBlQmxvY2tzR3JvdXA9Yi5DbHJTaGFwZUJsb2NrPWIuQ2xyU2hhcGVMYXllcnM9Yi5DbHJTaGFwZVVuaW5zdGFsbD1iLkNsclNoYXBlSW5zdGFsbD1iLkNsclNoYXBlTm9XaWZpPWIuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9Yi5DbHJTaGFwZVJ1bGVyUGVuY2ls'@;
put 'PXZvaWQgMCxiLlRlY2hub2xvZ3lTaGFwZXM9Yi5DbHJTaGFwZUZpbGVTaGFyZTI9Yi5DbHJTaGFwZUNpQ2Q9Yi5DbHJTaGFwZUFuaW1hdGlvbj1iLkNsclNoYXBlVGFwZURyaXZlPWIuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9Yi5DbHJDb250cm9sTHVuPWIuQ2xyU2hhcGVQb2Q9Yi5DbHJTaGFw'@;
put 'ZU5vZGU9Yi5DbHJTaGFwZU5hbWVzcGFjZT1iLkNsclNoYXBlTm9kZXM9Yi5DbHJTaGFwZU5vZGVHcm91cD1iLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9Yi5DbHJTaGFwZUhvc3RHcm91cD1iLkNsclNoYXBlU3F1aWQ9Yi5DbHJTaGFwZUNhcGFjaXRvcj1iLkNsclNoYXBlUmVzaXN0b3I9Yi5D'@;
put 'bHJTaGFwZUluZHVjdG9yPWIuQ2xyU2hhcGVSYWRhcj1iLkNsclNoYXBlVXNiPWIuQ2xyU2hhcGVRckNvZGU9Yi5DbHJTaGFwZUZpbGVTaGFyZT1iLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPWIuQ2xyU2hhcGVDb250YWluZXI9Yi5DbHJTaGFwZUNkRHZkPWIuQ2xyU2hhcGVCYXJDb2RlPWIu'@;
put 'Q2xyU2hhcGVBdG9tPWIuQ2xyU2hhcGVBc3NpZ25Vc2VyPWIuQ2xyU2hhcGVQcm9jZXNzT25WTT1iLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPWIuQ2xyU2hhcGVCbHVldG9vdGg9Yi5DbHJTaGFwZVNTRD1iLkNsclNoYXBlTlZNZT1iLkNsclNoYXBlSGFyZERyaXZlRGlza3M9Yi5DbHJTaGFwZUhh'@;
put 'cmREcml2ZT1iLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1iLkNsclNoYXBlRmxhc2s9Yi5DbHJTaGFwZUhlbGl4PWIuQ2xyU2hhcGVEZXBsb3k9Yi5DbHJTaGFwZUNsb3VkVHJhZmZpYz1iLkNsclNoYXBlQ2xvdWRTY2FsZT1iLkNsclNoYXBlQ2xvdWROZXR3b3JrPWIuQ2xyU2hhcGVVbmxpbms9'@;
put 'Yi5DbHJTaGFwZUxpbms9Yi5DbHJTaGFwZURpc2Nvbm5lY3Q9Yi5DbHJTaGFwZUNvbm5lY3Q9Yi5DbHJTaGFwZVVuYXJjaGl2ZT1iLkNsclNoYXBlQXJjaGl2ZT1iLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoi'@;
put 'Li9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAs'@;
put 'cC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQu'@;
put 'MTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4w'@;
put 'OEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4z'@;
put 'N1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0x'@;
put 'MCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLGIuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODds'@;
put 'NSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMu'@;
put 'ODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5'@;
put 'LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEz'@;
put 'My43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLGIuQ2xyU2hhcGVO'@;
put 'b1dpZmk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAg'@;
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 'LjQxLTI2LTI2WiIvPlxuJyksYi5DbHJTaGFwZUluc3RhbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJI'@;
put 'NS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3'@;
put 'LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEs'@;
put 'MTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'MC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksYi5DbHJTaGFwZVVuaW5zdGFsbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDls'@;
put 'NS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiww'@;
put 'LDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNB'@;
put 'MSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44'@;
put 'N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwz'@;
put 'LjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIvPlxuJyksYi5DbHJTaGFwZUxheWVycz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEs'@;
put 'MSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwx'@;
put 'LDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEs'@;
put 'MzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0'@;
put 'LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLGIuQ2xyU2hhcGVCbG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh'@;
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 'IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0Ex'@;
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+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIu'@;
put 'Q2xyU2hhcGVCdW5kbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42'@;
put 'LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIu'@;
put 'MTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGEx'@;
put 'LDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2'@;
put 'LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxiLkNsclNoYXBlV2lmaT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4'@;
put 'LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43'@;
put 'MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8'@;
put 'Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0y'@;
put 'OS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwx'@;
put 'LjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSww'@;
put 'LDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksYi5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAscC5j'@;
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 'MkgxMFpNNiwyN0g4djJINloiLz5cbicpLGIuQ2xyU2hhcGVIYXJkRGlzaz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+'@;
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+XG4nKSxiLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIg'@;
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 'Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksYi5DbHJTaGFwZUJhY2t1cD0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
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+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksYi5DbHJTaGFwZURldmljZXM9KDAscC5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhW'@;
put 'MzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEy'@;
put 'LDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy'@;
put 'aDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLGIuQ2xyU2hhcGVLZXlib2FyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
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+XG4nKSxiLkNsclNo'@;
put 'YXBlTW91c2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYy'@;
put 'NGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMs'@;
put 'MCwwLDEsMi42LDBaIi8+XG4nKSxiLkNsclNoYXBlRGFzaGJvYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoi'@;
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 'YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksYi5DbHJTaGFwZUhvc3Q9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwy'@;
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 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJyksYi5DbHJTaGFwZVN0b3JhZ2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
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+XG4nKSxiLkNsclNoYXBlQ2x1c3Rlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwx'@;
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 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxwLmNsckljb25TVkcpKCc8cG9s'@;
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 'LTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQnVpbGRpbmc9KDAscC5jbHJJ'@;
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 'ICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNQVT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEu'@;
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 'OC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlTWVtb3J5PSgwLHAuY2xySWNvblNWRykoJzxyZWN0'@;
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 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhD'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4'@;
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 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3'@;
put 'LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4x'@;
put 'Mi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4'@;
put 'LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSww'@;
put 'LDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41'@;
put 'NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0'@;
put 'LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNoaWVsZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBk'@;
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 'MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlU2hpZWxkWD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5'@;
put 'LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCww'@;
put 'LDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1Ljgy'@;
put 'LDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00Ljgx'@;
put 'LDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx'@;
put 'My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40'@;
put 'LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlSW1wb3J0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3'@;
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 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFw'@;
put 'ZUV4cG9ydD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWkt'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBk'@;
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 'aS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVQbHVnaW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0y'@;
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 'PlxuICAgICAgICAnKSxiLkNsclNoYXBlRmxvcHB5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDEx'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDb21wdXRlcj0oMCxwLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAy'@;
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 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURpc3BsYXk9KDAscC5jbHJJY29uU1ZHKSgnPHBh'@;
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 'YmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVRlcm1pbmFsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhI'@;
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 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNvZGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41'@;
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 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQXBwbGljYXRpb249KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMy'@;
put 'djQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIs'@;
put 'NFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVCYXR0ZXJ5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4w'@;
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 'aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU1vYmlsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs'@;
put 'MCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlVGFibGV0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv'@;
put 'PlxuICAgICAgICAnKSxiLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+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 'Z2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEs'@;
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 'MS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAscC5jbHJJY29uU1ZHKSgnPHBh'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVSb3V0ZXI9KDAscC5jbHJJ'@;
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 'JyksYi5DbHJTaGFwZVZNPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVWTVdBcHA9KDAscC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAy'@;
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 'ICcpLGIuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCww'@;
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 'IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQXJjaGl2ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMs'@;
put 'MCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEs'@;
put 'MjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVW'@;
put 'M2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCww'@;
put 'LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42'@;
put 'NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEy'@;
put 'czAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAs'@;
put 'MSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVVbmFyY2hpdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIs'@;
put 'MCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwx'@;
put 'MkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40'@;
put 'MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQ29ubmVjdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAs'@;
put 'MCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45'@;
put 'NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIx'@;
put 'LDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjIt'@;
put 'NUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVEaXNjb25uZWN0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAs'@;
put 'MCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2'@;
put 'LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4x'@;
put 'NywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2'@;
put 'Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVMaW5rPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwx'@;
put 'LTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45'@;
put 'MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcu'@;
put 'ODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0x'@;
put 'LjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg'@;
put 'JyksYi5DbHJTaGFwZVVubGluaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01'@;
put 'LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAs'@;
put 'NS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBl'@;
put 'Q2xvdWROZXR3b3JrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41'@;
put 'OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNsb3VkU2NhbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwz'@;
put 'LjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwy'@;
put 'LjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJI'@;
put 'MTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4'@;
put 'LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEu'@;
put 'ODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4y'@;
put 'NSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4'@;
put 'LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3'@;
put 'QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURlcGxveT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdB'@;
put 'MSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3'@;
put 'LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUhlbGl4PSgwLHAuY2xySWNvblNW'@;
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 'LGIuQ2xyU2hhcGVGbGFzaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwz'@;
put 'NEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4w'@;
put 'NUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRM'@;
put 'NC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQu'@;
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 'MCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUhhcmREcml2ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVOVk1lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRI'@;
put 'MjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEs'@;
put 'MSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEs'@;
put 'MSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3Qg'@;
put 'eD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNTRD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9'@;
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+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVCbHVldG9vdGg9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAs'@;
put 'MCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3'@;
put 'LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVW'@;
put 'MTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIu'@;
put 'MzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIu'@;
put 'Q2xyU2hhcGVCbHVldG9vdGhPZmY9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0Ey'@;
put 'LDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0z'@;
put 'LjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv'@;
put 'PjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41'@;
put 'NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlUHJvY2Vzc09uVk09KDAscC5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40Niwx'@;
put 'Mi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwx'@;
put 'LjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIs'@;
put 'MTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNh'@;
put 'MSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1'@;
put 'LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUz'@;
put 'LDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMx'@;
put 'Ljg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUu'@;
put 'NTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2Ljgx'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCww'@;
put 'LS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMu'@;
put 'NzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVBdG9tPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwy'@;
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 'KSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYXJDb2RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEs'@;
put 'MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEs'@;
put 'MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLGIuQ2xyU2hhcGVDZER2'@;
put 'ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg'@;
put 'ZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMw'@;
put 'LjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4x'@;
put 'MmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTgu'@;
put 'MjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdB'@;
put 'OC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCww'@;
put 'LTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQ29udGFpbmVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhW'@;
put 'MjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjgu'@;
put 'OCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44'@;
put 'LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzks'@;
put 'MCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs'@;
put 'LjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCww'@;
put 'LDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQu'@;
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 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxiLkNsclNoYXBlRmlsZVNoYXJlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy'@;
put 'LDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0y'@;
put 'MS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42'@;
put 'NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIs'@;
put 'MiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwx'@;
put 'LC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVFyQ29kZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiww'@;
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 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxiLkNs'@;
put 'clNoYXBlVXNiPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAt'@;
put 'MywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAs'@;
put 'MCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwz'@;
put 'LjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2'@;
put 'Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40Mloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIu'@;
put 'MjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJo'@;
put 'NC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSYWRhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTku'@;
put 'NCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0'@;
put 'LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0'@;
put 'YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywy'@;
put 'LjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiAvPicpLGIuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwz'@;
put 'LjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcs'@;
put 'Mi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAs'@;
put 'MCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0x'@;
put 'Ljg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwx'@;
put 'NC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0u'@;
put 'MjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcs'@;
put 'MCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEs'@;
put 'MSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3'@;
put 'LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+Jyks'@;
put 'Yi5DbHJTaGFwZUNhcGFjaXRvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh'@;
put 'dGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwx'@;
put 'LDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNs'@;
put 'clNoYXBlU3F1aWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCww'@;
put 'LDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSww'@;
put 'LTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5'@;
put 'TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlSG9zdEdyb3VwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRB'@;
put 'MS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2'@;
put 'Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwz'@;
put 'MS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksYi5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVy'@;
put 'PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1'@;
put 'VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRo'@;
put 'PSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0i'@;
put 'TTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksYi5DbHJTaGFwZU5vZGVHcm91cD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1Yx'@;
put 'My4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45'@;
put 'NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40'@;
put 'NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0x'@;
put 'VjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1'@;
put 'djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVOb2Rlcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5'@;
put 'VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41'@;
put 'LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQu'@;
put 'OXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksYi5DbHJTaGFwZU5hbWVzcGFjZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwx'@;
put 'LDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDku'@;
put 'NjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAs'@;
put 'MiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGIuQ2xyU2hh'@;
put 'cGVOb2RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIi8+JyksYi5DbHJTaGFwZVBvZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgy'@;
put 'NmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2'@;
put 'LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40'@;
put 'MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxiLkNsckNvbnRyb2xMdW49KDAscC5jbHJJY29uU1ZHKSgn'@;
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+XG4gICcpLGIuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCww'@;
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 'MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJyksYi5DbHJTaGFwZVRhcGVEcml2ZT0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4'@;
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+XG4gICcpLGIuQ2xyU2hhcGVBbmltYXRpb249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEw'@;
put 'LjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIy'@;
put 'LDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIu'@;
put 'MTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9'@;
put 'Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIs'@;
put 'MTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxiLkNsclNoYXBlQ2lDZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwx'@;
put 'LC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcu'@;
put 'NDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwx'@;
put 'LjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCww'@;
put 'LDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwx'@;
put 'LDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAs'@;
put 'MS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJs'@;
put 'LS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGIuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLHAuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIu'@;
put 'MDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2'@;
put 'VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwy'@;
put 'LjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6Yi5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0IjpiLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpiLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6Yi5DbHJTaGFwZUlu'@;
put 'c3RhbGwsdW5pbnN0YWxsOmIuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOmIuQ2xyU2hhcGVMYXllcnMsYmxvY2s6Yi5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOmIuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6Yi5DbHJTaGFwZUJ1bmRsZSx3aWZpOmIuQ2xyU2hhcGVXaWZpLCJy'@;
put 'YWNrLXNlcnZlciI6Yi5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6Yi5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6Yi5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOmIuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpiLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpi'@;
put 'LkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6Yi5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpiLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6Yi5DbHJTaGFwZUhvc3Qsc3RvcmFnZTpiLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOmIuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpiLkNsclNoYXBl'@;
put 'QXBwbGljYXRpb25zLGJ1aWxkaW5nOmIuQ2xyU2hhcGVCdWlsZGluZyxjcHU6Yi5DbHJTaGFwZUNQVSxtZW1vcnk6Yi5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjpiLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOmIuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxk'@;
put 'OmIuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6Yi5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6Yi5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0OmIuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OmIuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6Yi5DbHJTaGFwZVVwbG9hZENs'@;
put 'b3VkLCJkb3dubG9hZC1jbG91ZCI6Yi5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOmIuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5OmIuQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6Yi5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6Yi5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6Yi5DbHJTaGFw'@;
put 'ZVRlcm1pbmFsLGNvZGU6Yi5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246Yi5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6Yi5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOmIuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OmIuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOmIuQ2xyU2hhcGVO'@;
put 'ZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOmIuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpiLkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6Yi5DbHJTaGFwZVJvdXRlcix2bTpiLkNsclNoYXBlVk0sInZtdy1hcHAiOmIuQ2xyU2hhcGVWTVdBcHAs'@;
put 'Y2VydGlmaWNhdGU6Yi5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6Yi5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOmIuQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDpiLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OmIuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6Yi5DbHJTaGFwZUxp'@;
put 'bmssdW5saW5rOmIuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOmIuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjpiLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6Yi5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOmIuQ2xyQ29udHJv'@;
put 'bEx1bixkZXBsb3k6Yi5DbHJTaGFwZURlcGxveSxoZWxpeDpiLkNsclNoYXBlSGVsaXgsZmxhc2s6Yi5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6Yi5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOmIuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOmIu'@;
put 'Q2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOmIuQ2xyU2hhcGVOVk1lLHNzZDpiLkNsclNoYXBlU1NELGJsdWV0b290aDpiLkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpiLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpiLkNsclNoYXBlUHJvY2Vzc09u'@;
put 'Vk0sImFzc2lnbi11c2VyIjpiLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOmIuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6Yi5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6Yi5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpiLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpiLkNs'@;
put 'clNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpiLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpiLkNsclNoYXBlUXJDb2RlLHVzYjpiLkNsclNoYXBlVXNiLHJhZGFyOmIuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6Yi5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpiLkNsclNo'@;
put 'YXBlU3F1aWQsaW5kdWN0b3I6Yi5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOmIuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6Yi5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpiLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOmIuQ2xyU2hhcGVO'@;
put 'b2RlR3JvdXAsbm9kZXM6Yi5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpiLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6Yi5DbHJTaGFwZU5vZGUscG9kOmIuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOmIuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOmIuQ2xyU2hhcGVUYXBl'@;
put 'RHJpdmUsYW5pbWF0aW9uOmIuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpiLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpiLkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxfLmRlc2NyaXB0b3JDb25m'@;
put 'aWcpKGIuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9s'@;
put 'b2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hh'@;
put 'cGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNo'@;
put 'YXBlcywicmVjZWl2ZXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hh'@;
put 'cGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJmb2xk'@;
put 'ZXItc2hhcmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5UZWNobm9sb2d5U2hh'@;
put 'cGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No'@;
put 'YXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuVGV4dEVkaXRTaGFwZXM9Yi5DbHJTaGFwZVN1cGVyc2NyaXB0PWIuQ2xyU2hhcGVTdWJzY3JpcHQ9Yi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Yi5DbHJTaGFwZUluZGVudD1iLkNsclNoYXBlT3V0ZGVu'@;
put 'dD1iLkNsclNoYXBlSGlnaGxpZ2h0ZXI9Yi5DbHJTaGFwZVRleHRDb2xvcj1iLkNsclNoYXBlTGFuZ3VhZ2U9Yi5DbHJTaGFwZUFsaWduVG9wPWIuQ2xyU2hhcGVBbGlnbk1pZGRsZT1iLkNsclNoYXBlQWxpZ25Cb3R0b209Yi5DbHJTaGFwZVVuZGVybGluZT1iLkNsclNoYXBlVGV4dD1iLkNs'@;
put 'clNoYXBlQWxpZ25SaWdodFRleHQ9Yi5DbHJTaGFwZUJsb2NrUXVvdGU9Yi5DbHJTaGFwZVBhaW50Um9sbGVyPWIuQ2xyU2hhcGVOdW1iZXJMaXN0PWIuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PWIuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1iLkNsclNoYXBlSXRhbGljPWIuQ2xyU2hhcGVBbGlnblJp'@;
put 'Z2h0PWIuQ2xyU2hhcGVBbGlnbkxlZnQ9Yi5DbHJTaGFwZUFsaWduQ2VudGVyPWIuQ2xyU2hhcGVGb250U2l6ZT1iLkNsclNoYXBlQ2hlY2tib3hMaXN0PWIuQ2xyU2hhcGVDZW50ZXJUZXh0PWIuQ2xyU2hhcGVCdWxsZXRMaXN0PWIuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgXz1EKAovKiEg'@;
put 'Li4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUJvbGQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2'@;
put 'YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43Mywx'@;
put 'OC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwy'@;
put 'LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUJ1bGxldExpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'Lz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLF8uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWEx'@;
put 'LjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCxf'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5'@;
put 'LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVGb250U2l6ZT0oMCxfLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiAvPicpLGIuQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWEx'@;
put 'LDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp'@;
put 'LGIuQ2xyU2hhcGVBbGlnbkxlZnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhW'@;
put 'MzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEw'@;
put 'VjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQWxpZ25SaWdodD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEy'@;
put 'LDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUl0YWxpYz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEu'@;
put 'MSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlSnVzdGlmeVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'IiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQu'@;
put 'NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv'@;
put 'PjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYs'@;
put 'MTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlTnVt'@;
put 'YmVyTGlzdD0oMCxfLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEu'@;
put 'MDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCww'@;
put 'LTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEu'@;
put 'OTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40'@;
put 'MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCww'@;
put 'LDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAs'@;
put 'MCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIx'@;
put 'IiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSww'@;
put 'LDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQmxvY2tRdW90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQs'@;
put 'MTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQu'@;
put 'MzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEs'@;
put 'MCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwy'@;
put 'MS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1'@;
put 'LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4'@;
put 'LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwy'@;
put 'Ny42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQu'@;
put 'NDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3'@;
put 'LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVV'@;
put 'bmRlcmxpbmU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUs'@;
put 'MCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQWxpZ25Cb3R0b209KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAs'@;
put 'MCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCww'@;
put 'LDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZo'@;
put 'NlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUFsaWduVG9wPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCww'@;
put 'LDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlTGFuZ3VhZ2U9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSww'@;
put 'LjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMt'@;
put 'MS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJM'@;
put 'MTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJo'@;
put 'NS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29u'@;
put 'IHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUu'@;
put 'MWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0x'@;
put 'LjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0'@;
put 'LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVGV4dENvbG9yPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgx'@;
put 'OGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4'@;
put 'LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSww'@;
put 'LDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIy'@;
put 'QTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIy'@;
put 'LTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxy'@;
put 'ZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSxiLkNsclNoYXBlT3V0ZGVudD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmEx'@;
put 'LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu'@;
put 'ICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41Niwy'@;
put 'Mi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLGIuQ2xyU2hhcGVJbmRlbnQ9KDAs'@;
put 'Xy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwx'@;
put 'LDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0'@;
put 'aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2'@;
put 'LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxiLkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5'@;
put 'YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAsMCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAsMC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwx'@;
put 'LjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5'@;
put 'LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3LjczLDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCwwLDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0y'@;
put 'LDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCwwLDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwx'@;
put 'LTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVBNS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZWMjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4w'@;
put 'Niw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCwwLDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2'@;
put 'Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0uMTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwz'@;
put 'LjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42MiwwLDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01'@;
put 'Ii8+JyksYi5DbHJTaGFwZVN1YnNjcmlwdD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4x'@;
put 'NywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwy'@;
put 'LjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgs'@;
put 'Mi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5'@;
put 'LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjlo'@;
put 'MEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQu'@;
put 'NTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAs'@;
put 'MCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNI'@;
put 'MjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGIuVGV4dEVkaXRTaGFwZXM9e2JvbGQ6Yi5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0IjpiLkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6Yi5DbHJTaGFwZUNoZWNrYm94TGlz'@;
put 'dCwibnVtYmVyLWxpc3QiOmIuQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOmIuQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6Yi5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0IjpiLkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0IjpiLkNsclNoYXBlQ2VudGVyVGV4dCwi'@;
put 'YWxpZ24tbGVmdC10ZXh0IjpiLkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6Yi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOmIuQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOmIuQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6Yi5D'@;
put 'bHJTaGFwZVRleHQsdW5kZXJsaW5lOmIuQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6Yi5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0IjpiLkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6Yi5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6Yi5D'@;
put 'bHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOmIuQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjpiLkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6Yi5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjpiLkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOmIuQ2xy'@;
put 'U2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6Yi5DbHJTaGFwZUluZGVudCxvdXRkZW50OmIuQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6Yi5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0OmIuQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6Yi5DbHJTaGFwZVN1cGVyc2Ny'@;
put 'aXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihKLGIsRCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLlRyYXZlbFNoYXBlcz1iLkNsclNoYXBlT25I'@;
put 'b2xpZGF5PWIuQ2xyU2hhcGVUcmFpbGVyPWIuQ2xyU2hhcGVGZXJyeT1iLkNsclNoYXBlQ2FyYXZhbj1iLkNsclNoYXBlQ2FtcGVydmFuPWIuQ2xyU2hhcGVCb2F0PWIuQ2xyU2hhcGVCaWN5Y2xlPWIuQ2xyU2hhcGVNYXBNYXJrZXI9Yi5DbHJTaGFwZUNvbXBhc3M9Yi5DbHJTaGFwZU1hcD1i'@;
put 'LkNsclNoYXBlQ2FyPWIuQ2xyU2hhcGVBaXJwbGFuZT1iLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGls'@;
put 'cy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVHJ1Y2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwx'@;
put 'MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVIMjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCww'@;
put 'SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEs'@;
put 'MSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEs'@;
put 'MCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCwwLDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAs'@;
put 'MTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiwwLDAsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUFp'@;
put 'cnBsYW5lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuNzcsOC4xNmEyLjQzLDIuNDMsMCwwLDAtMS45LTJMMjgsNC44N2E0LjUsNC41LDAsMCwwLTMuNjUuNzlMNywxOC4zLDIuMTQsMTguMUExLjg2LDEu'@;
put 'ODYsMCwwLDAsLjkxLDIxLjQxbDUsMy45M2MuNi43MywxLC41OSwxMC45My00LjgybC45Myw5LjQyYTEuMzYsMS4zNiwwLDAsMCwuODUsMS4xOCwxLjQzLDEuNDMsMCwwLDAsLjU0LjEsMS41NCwxLjU0LDAsMCwwLDEtLjQxbDIuMzktMi4xOGExLjUyLDEuNTIsMCwwLDAsLjQ2LS44M0wyNS4y'@;
put 'LDE1LjljMy41Ny0yLDYuOTUtMy44OCw5LjM2LTUuMjVBMi40MywyLjQzLDAsMCwwLDM1Ljc3LDguMTZabS0yLjIuNzVjLTIuNSwxLjQyLTYsMy40MS05Ljc2LDUuNDdsLS40MS4yM0wyMS4wNywyNy4yOGwtMS40NywxLjM0TDE4LjUsMTcuMzIsMTcuMTcsMThDMTAsMjIsNy42MSwyMy4xNiw2'@;
put 'Ljc5LDIzLjUybC00LjMtMy40MSw1LjA4LjIyLDE4LTEzLjA2YTIuNTEsMi41MSwwLDAsMSwyLS40NWw1Ljg1LDEuMjZhLjQzLjQzLDAsMCwxLC4zNS4zN0EuNDIuNDIsMCwwLDEsMzMuNTcsOC45MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiBkPSJNNywxMi41NGwzLjU2LDEsMS42NC0xLjE5LTQtMS4xNkwxMCwxMC4wOWw1LjQ3LS4xNiwyLjMtMS42N0wxMCw4LjVhMS4yNSwxLjI1LDAsMCwwLS43LjE3TDYuNjcsMTAuMkExLjI4LDEuMjgsMCwwLDAsNywxMi41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LjI1LDExLjUsMTIsMTMuMTZsNi4zMi00LjU5LTkuMDcuMjZBLjUyLjUyLDAsMCwwLDksOC45MUw2LjEzLDEwLjU2QS41MS41MSwwLDAsMCw2LjI1LDExLjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzQuNTIsNi4zNiwyOC4yMiw1YTMuNzgsMy43OCwwLDAsMC0zLjA3LjY3TDYuMTIsMTkuNWwtNC41Ny0uMmExLjI1LDEuMjUsMCwwLDAtLjgzLDIuMjJsNC40NSwzLjUzYS41NS41NSwwLDAsMCwuNTMuMDljMS4yNy0uNDksNi0zLDEx'@;
put 'LjU5LTYuMDdsMS4xMiwxMS41MWEuNTUuNTUsMCwwLDAsLjkuMzdsMi41LTIuMDhhLjc2Ljc2LDAsMCwwLC4yNi0uNDVsMi4zNy0xMy4yOWM0LTIuMjIsNy44Mi00LjM3LDEwLjUxLTUuODlBMS41NSwxLjU1LDAsMCwwLDM0LjUyLDYuMzZaIi8+JyksYi5DbHJTaGFwZUNhcj0oMCxwLmNscklj'@;
put 'b25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0y'@;
put 'Ni40NSwxNC4xN0EyMi4xLDIyLjEsMCwwLDAsMTkuMzgsN2E5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDctLjE0LjkyLS4yLDEuMzZBNCw0LDAsMCwwLDIsMTh2Ni4xM2EyLDIsMCwwLDAsMiwyVjIwSDRWMThhMiwyLDAsMCwxLDItMkgyNC43M0E3'@;
put 'LjI4LDcuMjgsMCwwLDEsMzIsMjMuMjdWMjRoLTJhNC41Myw0LjUzLDAsMSwwLC4zMywySDMyYTIsMiwwLDAsMCwyLTJ2LS43M0E5LjI4LDkuMjgsMCwwLDAsMjYuNDUsMTQuMTdaTTExLDE0SDYuOTNjMC0uMzEuMDktLjYzLjE1LTFBNi41Miw2LjUyLDAsMCwxLDExLDhoMFptMiwwVjcuNThh'@;
put 'OC4xNyw4LjE3LDAsMCwxLDUuMzYsMS4xNkExOSwxOSwwLDAsMSwyMy45LDE0Wk0yNS44LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI1LjgsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIGQ9Ik0xNC4xNywyNGE0LjUzLDQuNTMsMCwxLDAsLjMzLDJoNS4zYzAtLjA4LDAtLjE3LDAtLjI1QTYsNiwwLDAsMSwyMCwyNFpNMTAsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2Ljg3LDE0LjI4QTIyLjM2LDIyLjM2LDAsMCwwLDE5LjY1LDYuOWE5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDktLjE1LDEtLjIxLDEuNGgtMUEyLjU5LDIuNTksMCww'@;
put 'LDAsMiwxNi41OXY4LjU1YS44Ni44NiwwLDAsMCwuODYuODZINC41OWMwLS4xMywwLS4yNiwwLS4zOWE1Ljc3LDUuNzcsMCwwLDEsNy43MS01LjQ1bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMTQuODIsMjZoNS40OGMwLS4x'@;
put 'MywwLS4yNiwwLS4zOUE1Ljc3LDUuNzcsMCwwLDEsMjgsMjAuMTZsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwzMC41MywyNmgyLjYxYS44Ni44NiwwLDAsMCwuODYtLjg2VjIzLjM2QTkuMzksOS4zOSwwLDAsMCwyNi44Nywx'@;
put 'NC4yOFpNMTIsMTRIOGMwLS4zNS4xLS43MS4xNi0xLjA3YTYuNTIsNi41MiwwLDAsMSwzLjg3LTVoMFpNMTAuMzYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAuMzYsMjguMzZaTTE5LDE5SDE2VjE3aDNabS02LTVWNy40N2E4LjE2LDguMTYsMCwwLDEsNS40'@;
put 'LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLGIuQ2xyU2hhcGVNYXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjEx'@;
put 'LDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4z'@;
put 'djIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9'@;
put 'IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMuNTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIz'@;
put 'aDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZoMloiLz4nKSxiLkNsclNoYXBlQ29tcGFzcz0o'@;
put 'MCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVBMTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJW'@;
put 'NC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww'@;
put 'LDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcsMC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5'@;
put 'LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4wNSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBl'@;
put 'TWFwTWFya2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMu'@;
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+JyksYi5DbHJTaGFwZUJpY3ljbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4zOSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEs'@;
put 'Ni41MSwwLDAsMSw4LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCw4LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjcuNSwyOS42NWE2LjUxLDYuNTEsMCwwLDEtNi41LTYu'@;
put 'NSw2LjUsNi41LDAsMCwxLDEzLDBBNi41MSw2LjUxLDAsMCwxLDI3LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCwyNy41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDI0'@;
put 'LjY2SDhhMSwxLDAsMCwxLS44OS0xLjQ1bDUtMTAsMS43OC45TDkuNjIsMjIuNzNIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxMyIgeT0iMTIuNjgiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjkxIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjgsMjQuNjZhMSwxLDAsMCwxLS45NC0uNjZMMjIuMjksMTAuNjZIMjBhMSwxLDAsMCwxLTEtMSwxLDEsMCwwLDEsMS0uOTNoM2EuOTQuOTQsMCwwLDEsLjk0LjZsNSwxNGExLDEsMCwwLDEtLjYsMS4yN0ExLDEsMCwwLDEsMjgs'@;
put 'MjQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTMsMTQuNjZhMSwxLDAsMCwxLS43MS0uMjlsLTEuNy0xLjcxSDhhMSwxLDAsMCwxLTEtMSwuOTQuOTQsMCwwLDEsMS0xaDNhMS4wOCwxLjA4LDAsMCwxLC43NS4yN2wyLDJhMSwx'@;
put 'LDAsMCwxLDAsMS40MUExLDEsMCwwLDEsMTMsMTQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTUsMjEuOWMtMC4yLTItMS4yLTMuOC0yLjktNC45bC0yLjUsNC45SDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgLz48cGF0aCBkPSJNNy4yLDIzLjRjLTAuMi0wLjMtMC4yLTAuNywwLTFsMy4yLTYuM2MtMC42LTAuMi0xLjItMC4yLTEuOC0wLjJDNSwxNS45LDIsMTguOCwyLDIyLjRjMCwzLjYsMi45LDYuNSw2LjUsNi41XG5cdGMzLDAsNS42LTIuMSw2LjMtNUg4QzcuNywyMy45LDcuMywy'@;
put 'My43LDcuMiwyMy40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjEuOWgtNGMwLDAuMiwwLDAuMywwLDAuNWMwLDAuNS0wLjEsMS0wLjIsMS41SDE5VjIxLjl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAv'@;
put 'PjxwYXRoIGQ9Ik0yNy41LDE1LjljLTAuMywwLTAuNiwwLTAuOSwwLjFsMi40LDYuNmMwLjIsMC41LTAuMSwxLjEtMC42LDEuM2MtMC4xLDAtMC4yLDAuMS0wLjMsMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjdsLTIuNC02Ljdcblx0Yy0zLjIsMS42LTQuNSw1LjUtMyw4LjdjMS42LDMuMiw1'@;
put 'LjUsNC41LDguNywzYzMuMi0xLjYsNC41LTUuNSwzLTguN0MzMi4yLDE3LjMsMzAsMTUuOSwyNy41LDE1Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNC43LDE2LjdjMC42LTAuMywxLjMtMC41LDEuOS0wLjZsLTIuNy03LjRDMjMuOCw4'@;
put 'LjIsMjMuNCw4LDIzLDcuOWgtM2MtMC42LDAtMSwwLjUtMSwxLjFjMCwwLjUsMC40LDAuOSwxLDAuOVxuXHRjMCwwLDAsMCwwLDBoMi4zbDAuNywyaC05LjZsLTEuNy0xLjdDMTEuNSwxMC4xLDExLjMsMTAsMTEsMTBIOGMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyLjZsMS4yLDEuMmwt'@;
put 'MS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxiLkNsclNoYXBlQm9hdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2Ljks'@;
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+JyksYi5DbHJTaGFw'@;
put 'ZUNhbXBlcnZhbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOS41LDI0QzkuNSwyNCw5LjUsMjQsOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41YzAsMCwwLDAsMCwwQzYsMjkuNCw3LjYsMzEsOS41LDMxYzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMxMS40LDI0LDkuNSwyNHog'@;
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 'IDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGIuQ2xy'@;
put 'U2hhcGVDYXJhdmFuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy41LDIxQzExLDIxLDksMjMsOSwyNS41czIsNC41LDQuNSw0LjVjMi41LDAsNC41LTIsNC41LTQuNUMxOCwyMywxNiwyMSwxMy41LDIxeiBNMTMuNSwyOGMtMS40LDAtMi41LTEuMS0yLjUtMi41XG5cdFx0czEuMS0y'@;
put 'LjUsMi41LTIuNXMyLjUsMS4xLDIuNSwyLjVTMTQuOSwyOCwxMy41LDI4eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41'@;
put 'SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0XHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgz'@;
put 'djEwaC0zdjJoMTNcblx0XHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMTJIN3Y2aDlWMTJ6IE0xNCwxNkg5di0yaDVWMTZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTMuNSwzMEMxMSwzMCw5LDI4LDksMjUuNXMyLTQuNSw0LjUtNC41czQuNSwyLDQuNSw0LjVDMTgsMjgsMTYsMzAsMTMuNSwzMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0y'@;
put 'di03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSww'@;
put 'LjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDE4SDd2LTZo'@;
put 'OVYxOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUZlcnJ5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBjLTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0w'@;
put 'LjgtMi4xLTEuMi0zLjMtMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJcblx0XHRjLTEuMiwxLjEtMywxLjEtNC4yLDBDMTAsMjUuNCw4LjgsMjUsNy42LDI1Yy0xLjIsMC0yLjQsMC40LTMuNCwxLjFDMy42LDI2LjcsMi44LDI3LDIsMjd2MmMxLjMsMC4xLDIuNS0wLjQsMy40LTEuMlxuXHRc'@;
put 'dEM2LjEsMjcuMyw2LjksMjcsNy43LDI3YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44XG5cdFx0YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhj'@;
put 'MC43LDAsMS41LDAuMywyLDAuOGMwLjksMC43LDIsMS4xLDMuMSwxLjJ2LTEuOWMtMC43LDAtMS40LTAuMy0xLjktMC45XG5cdFx0QzMxLjMsMjUuNCwzMC4xLDI1LDI5LDI1LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS45LDIz'@;
put 'LjJWMjBIMzJsLTMuNSwzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNS0wLjYsMC41LTEuNCwwLjItMi4xYy0wLjQtMC43LTEtMS0xLjgtMWgtNC40XG5cdFx0TDIyLjUsMTFIMTdjLTEuNywwLTMsMS4zLTMsM2gtMlY4LjFINnY2LjFjLTEuMiwwLjQtMiwx'@;
put 'LjUtMiwyLjh2MS4xVjIwdjQuM2wwLjEtMC4xQzQuNiwyMy43LDUuMiwyMy40LDUuOSwyMy4yeiBNOCwxMGgydjRIOFYxMHpcblx0XHQgTTYsMTdjMC0wLjYsMC40LTEsMS0xaDl2LTJjMC0wLjYsMC40LTEsMS0xaDVsMC42LDFIMTh2Mmg1LjhsMS4yLDIuMUg2VjE3eiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LjIsMjVjLTEuMiwwLTIuNCwwLjQtMy4zLDEuMmMtMS4yLDEuMS0zLDEuMS00LjEsMGMtMS45LTEuNi00LjYtMS42LTYuNSwwYy0xLjIsMS4xLTIuOSwxLjEtNC4xLDBcblx0XHRjLTAuOS0wLjgtMi0xLjItMy4y'@;
put 'LTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yQzMuNCwyNi43LDIuNywyNywyLDI3djJjMS4xLTAuMSwyLjItMC41LDMuMS0xLjJDNS42LDI3LjMsNi4zLDI3LDcsMjdcblx0XHRjMC43LDAsMS41LDAuMywyLDAuOGMxLjksMS42LDQuNywxLjYsNi42LDBjMC42LTAuNSwxLjMtMC44LDIuMS0w'@;
put 'LjhjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMFxuXHRcdGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjYsMC4zLDIuMSwwLjhjMC45LDAuOCwyLjIsMS4zLDMuNCwxLjJ2LTJjLTAuOCwwLTEuNi0wLjMtMi4yLTAuOEMzMC43LDI1LjQsMjkuNSwy'@;
put 'NSwyOC4yLDI1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNS44LDIzLjJ2LTMuM2gyNi4xTDI4LjQsMjNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMS0wLjJjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhjLTAuMy0wLjMt'@;
put 'MC44LTAuNC0xLjItMC40XG5cdFx0aC00LjFsLTUuNC03aC01LjVjLTEuNywwLTMsMS4zLTMsM2gtMlY4SDZ2Ni4yYy0xLjIsMC40LTIuMSwxLjUtMi4xLDIuOGwwLDcuMmwwLjEsMEM0LjUsMjMuNyw1LjEsMjMuNCw1LjgsMjMuMnogTTE3LjksMTRoNC4yXG5cdFx0bDEuNCwyaC01LjdWMTR6'@;
put 'IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVHJhaWxlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42'@;
put 'LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxy'@;
put 'ZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjkt'@;
put 'MS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMu'@;
put 'OC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAs'@;
put 'MEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlT25Ib2xpZGF5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYs'@;
put 'Ni4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0QTE3LjkxLDE3LjkxLDAsMCwwLDIzLDI5LjY2bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uMywxLDEsMCwwLDAsLjE2LS41NFYyNS42MWExMywxMywwLDAsMCw0LTkuMjdDMzQuMDgsOC42MiwyNi45LDIuMzQsMTguMDgsMi4zNFpNMjguMzcsMjQu'@;
put 'NDVhMSwxLDAsMCwwLS4zMi43M3Y1LjM0bC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTEsMTYsMTYsMCwwLDEtNC43Ni43MmMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjEsMTEuMSwwLDAsMSwyOC4zNywyNC40NVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4xLDE1LjgyLDMxLDE1LjY3LDI4LjUsMTMuNDRhMy4yNSwzLjI1LDAsMCwwLTIuMzktLjg0bC01LjM4LjM0LTMuNTktM2EuODEuODEsMCwwLDAtLjUyLS4xOUgxMy41NmEuNzguNzgsMCwwLDAtLjY5LjQu'@;
put 'NzcuNzcsMCwwLDAsMCwuNzlsMS4zNiwyLjQ0LTQuNzEuMjksMS4zMSwxLjUyLDE1LjM5LTFhMS42NSwxLjY1LDAsMCwxLDEuMjIuNDNsMi4zNiwyLjEzYS4xMS4xMSwwLDAsMSwwLC4wN2MwLC4wNi0uMDkuMDUtLjEuMDZIMjEuODJsLS4zNS4zNy01LjE5LDUuNTNIMTQuNjRsMi43My01LjlI'@;
put 'OC41NEw3LjEzLDE0LjE2LDYuNTEsMTNhLjguOCwwLDAsMC0xLS4yQS44MS44MSwwLDAsMCw1LjIsMTMuOWwyLDMuOTRhMS4yMSwxLjIxLDAsMCwwLDEuMDguNjVoNi41N2wtMS45NCw0LjE4QTEuMiwxLjIsMCwwLDAsMTMsMjMuODNhMS4yMiwxLjIyLDAsMCwwLDEsLjU2aDIuNDNhMS4xNywx'@;
put 'LjE3LDAsMCwwLC44OC0uMzlsNS4xOC01LjUxaDcuMTZhMS42NSwxLjY1LDAsMCwwLDEuNTItLjkxQTEuNzQsMS43NCwwLDAsMCwzMS4xLDE1LjgyWk0xNC45MiwxMS4zMWgxLjQxbDIuMDksMS43N0wxNiwxMy4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'Ii8+XG4gIFxuICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE3LjkxLDE3LjkxLDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uM0ExLDEsMCwwLDAsMzAsMzIuNVYyNS43N2ExMywxMywwLDAsMCw0LTkuMjdDMzQs'@;
put 'OC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOS44NCwxOEgyMS41MWEuNDIuNDIsMCwwLDAtLjMuMTNsLTUuMyw1LjY0YS4zOS4zOSwwLDAsMS0uMjkuMTNIMTMuMTlhLjQxLjQxLDAsMCwxLS4zNy0uNThsMi40Ny01LjMySDcuNDZhLjQyLjQyLDAsMCwxLS4zNi0uMjJsLTIuNy01SDYuMjRhLjUz'@;
put 'LjUzLDAsMCwxLC4zOS4xOGwxLjU2LDEuNjlhLjM4LjM4LDAsMCwwLC4zMy4xNGw2LjE4LS4zOC0yLTMuNTVoMi44OWEuNDcuNDcsMCwwLDEsLjMxLjExTDE5LjYzLDE0bDYuNjktLjM1YTIuNDQsMi40NCwwLDAsMSwxLjgxLjYzbDIuNDcsMi4yM0EuOTIuOTIsMCwwLDEsMjkuODQsMThaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLGIuVHJhdmVsU2hhcGVzPXt0cnVjazpiLkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6Yi5DbHJTaGFwZUFpcnBsYW5lLGNhcjpiLkNsclNoYXBlQ2FyLG1hcDpiLkNsclNoYXBlTWFwLGNvbXBhc3M6Yi5DbHJTaGFw'@;
put 'ZUNvbXBhc3MsIm1hcC1tYXJrZXIiOmIuQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTpiLkNsclNoYXBlQmljeWNsZSxib2F0OmIuQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjpiLkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46Yi5DbHJTaGFwZUNhcmF2YW4sZmVycnk6Yi5DbHJTaGFwZUZlcnJ5'@;
put 'LHRyYWlsZXI6Yi5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOmIuQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UcmF2ZWxTaGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoYi5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuVHJh'@;
put 'dmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMv'@;
put 'c3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsYi5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8ocCl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZh'@;
put 'bHVlOnB9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3Jj'@;
put 'L3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmlj'@;
put 'dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuY2xySWNvblNWRz12b2lkIDA7Yi5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoRil7dmFyIEg9IiI7cmV0dXJuIEYuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEgrPSJjYW4tYmFkZ2UgIiksRi5pbmRl'@;
put 'eE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEgrPSJjYW4tYWxlcnQgIiksRi5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoSCs9Imhhcy1zb2xpZCAiKSwoSD8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0grJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4'@;
put 'TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAz'@;
put 'NiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK0YrIjwvc3ZnPiJ9'@;
put 'fX0pfSw4OTI5NjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD17fTtiLnIoRCksYi5kKEQse2FycmF5QXZnOigpPT4kWGUsYXJyYXlFYWNoOigpPT5LbixhcnJheUZpbHRlcjooKT0+QW0sYXJyYXlGbGF0dGVuOigpPT5FMmUsYXJyYXlNYXA6KCk9PnlvLGFycmF5TWF4OigpPT5ZWGUs'@;
put 'YXJyYXlNaW46KCk9PkdYZSxhcnJheVJlZHVjZTooKT0+R3UsYXJyYXlTdW06KCk9PngyZSxhcnJheVVuaXF1ZTooKT0+VDJlLGV4dGVuZEFycmF5OigpPT5kJCxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmgkLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5LWGUsZ2V0VW5pb25PZkFy'@;
put 'cmF5czooKT0+WFhlLHBpdm90OigpPT52RSxzdHJpbmdUb0FycmF5OigpPT5mJCx0bzJkQXJyYXk6KCk9Pk0yZX0pO3ZhciBfPXt9O2IucihfKSxiLmQoXyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5MMmUsaXNEZWZpbmVkOigpPT5IYSxpc0VtcHR5OigpPT5qYyxpc1JlZ0V4cDooKT0+QTJl'@;
put 'LGlzVW5kZWZpbmVkOigpPT5iYyxzdHJpbmdpZnk6KCk9Pm9jfSk7dmFyIHA9e307Yi5yKHApLGIuZChwLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5lcWUsaXNQZXJjZW50VmFsdWU6KCk9Pm0kLHJhbmRvbVN0cmluZzooKT0+ZyQsc2FuaXRpemU6KCk9PlBPLHN0cmlwVGFnczooKT0+eSQsc3Vi'@;
put 'c3RpdHV0ZTooKT0+diQsdG9VcHBlckNhc2VGaXJzdDooKT0+ZjF9KTt2YXIgTj17fTtiLnIoTiksYi5kKE4se2Nsb25lOigpPT5zMyxjcmVhdGVPYmplY3RQcm9wTGlzdGVuZXI6KCk9PkZkLGRlZXBDbG9uZTooKT0+cDEsZGVlcEV4dGVuZDooKT0+d0UsZGVlcE9iamVjdFNpemU6KCk9PlZP'@;
put 'LGRlZmluZUdldHRlcjooKT0+VHAsZHVja1NjaGVtYTooKT0+cl8sZXh0ZW5kOigpPT53dSxnZXRQcm9wZXJ0eTooKT0+WjJlLGhhc093blByb3BlcnR5OigpPT5DdSxpbmhlcml0OigpPT5VMmUsaXNPYmplY3Q6KCk9PlhzLGlzT2JqZWN0RXF1YWw6KCk9PkhPLG1peGluOigpPT54bCxvYmpl'@;
put 'Y3RFYWNoOigpPT5xcyxzZXRQcm9wZXJ0eTooKT0+Tk99KTt2YXIgdz17fTtiLnIodyksYi5kKHcse2NhbmNlbEFuaW1hdGlvbkZyYW1lOigpPT5TRSxnZXRDb21wYXJpc29uRnVuY3Rpb246KCk9PlkyZSxpc0NTUjooKT0+VzJlLGlzVG91Y2hTdXBwb3J0ZWQ6KCk9PnckLHJlcXVlc3RBbmlt'@;
put 'YXRpb25GcmFtZTooKT0+Q0V9KTt2YXIgRj17fTtiLnIoRiksYi5kKEYse2lzQ2hyb21lOigpPT5DJCxpc0Nocm9tZVdlYktpdDooKT0+SzJlLGlzRWRnZTooKT0+cTJlLGlzRWRnZVdlYktpdDooKT0+eHFlLGlzRmlyZWZveDooKT0+Qk8saXNGaXJlZm94V2ViS2l0OigpPT5YMmUsaXNJT1M6'@;
put 'KCk9PlMkLGlzSXBhZE9TOigpPT5NJCxpc0xpbnV4T1M6KCk9PkVxZSxpc01hY09TOigpPT56Tyxpc01vYmlsZUJyb3dzZXI6KCk9Pm8zLGlzU2FmYXJpOigpPT5zXyxpc1dpbmRvd3NPUzooKT0+ak8sc2V0QnJvd3Nlck1ldGE6KCk9PkcyZSxzZXRQbGF0Zm9ybU1ldGE6KCk9PiQyZX0pO3Zh'@;
put 'ciBIPXt9O2IucihIKSxiLmQoSCx7SFRNTF9DSEFSQUNURVJTOigpPT5pZmUsYWRkQ2xhc3M6KCk9PkVpLGFkZEV2ZW50OigpPT5rcWUsY2xlYXJUZXh0U2VsZWN0aW9uOigpPT5EJCxjbG9zZXN0OigpPT5EbSxjbG9zZXN0RG93bjooKT0+eEUsZW1wdHk6KCk9PkFwLGZhc3RJbm5lckhUTUw6'@;
put 'KCk9Pmo3LGZhc3RJbm5lclRleHQ6KCk9PkxtLGZpbmRGaXJzdFBhcmVudFdpdGhDbGFzczooKT0+ZWZlLGdldENhcmV0UG9zaXRpb246KCk9PmskLGdldENzc1RyYW5zZm9ybTooKT0+THFlLGdldEZyYWN0aW9uYWxTY2FsaW5nQ29tcGVuc2F0aW9uOigpPT5SJCxnZXRGcmFtZUVsZW1lbnQ6'@;
put 'KCk9PlEyZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+b2ZlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PnNmZSxnZXRQYXJlbnQ6KCk9PkoyZSxnZXRQYXJlbnRXaW5kb3c6KCk9PlY3LGdldFNjcm9sbExlZnQ6KCk9PlQkLGdldFNjcm9sbFRvcDooKT0+Wk8sZ2V0U2Nyb2xsYWJsZUVsZW1l'@;
put 'bnQ6KCk9PkVFLGdldFNjcm9sbGJhcldpZHRoOigpPT5kMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+bGZlLGdldFNlbGVjdGlvblRleHQ6KCk9PklxZSxnZXRTdHlsZTooKT0+VEUsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9Pm9fLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PlVPLGdl'@;
put 'dFdpbmRvd1Njcm9sbFRvcDooKT0+RSQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PlRxZSxoYXNDbGFzczooKT0+Z3MsaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+TyQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PkwkLGhhc1plcm9IZWlnaHQ6KCk9PmFmZSxpbmRleDooKT0+dGZl'@;
put 'LGlubmVySGVpZ2h0OigpPT5sXyxpbm5lcldpZHRoOigpPT5BJCxpc0NoaWxkT2Y6KCk9PkltLGlzRGV0YWNoZWQ6KCk9PlAkLGlzSFRNTEVsZW1lbnQ6KCk9PmtwLGlzSW5wdXQ6KCk9PkRFLGlzSW50ZXJuYWxFbGVtZW50OigpPT5NRSxpc091dHNpZGVJbnB1dDooKT0+WU8saXNWaXNpYmxl'@;
put 'OigpPT56NyxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PkYkLG1hdGNoZXNDU1NSdWxlczooKT0+QXFlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+Y2ZlLG9mZnNldDooKT0+ajAsb3V0ZXJIZWlnaHQ6KCk9PlN1LG91dGVyV2lkdGg6'@;
put 'KCk9Pml1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9PlJtLHJlbW92ZUF0dHJpYnV0ZTooKT0+QjcscmVtb3ZlQ2xhc3M6KCk9PmhzLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PkgkLHJlbW92ZUV2ZW50OigpPT5EcWUscmVtb3ZlVGV4dE5vZGVz'@;
put 'OigpPT54JCxyZXNldENzc1RyYW5zZm9ybTooKT0+a0UscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+dWZlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9Pk9xZSxzZXRBdHRyaWJ1dGU6KCk9Pm1zLHNldENhcmV0UG9zaXRpb246KCk9PkFFLHNldE92ZXJsYXlQ'@;
put 'b3NpdGlvbjooKT0+V099KTt2YXIgUj17fTtiLnIoUiksYi5kKFIse2N1cnJ5OigpPT5oZmUsY3VycnlSaWdodDooKT0+SHFlLGRlYm91bmNlOigpPT5JRSxmYXN0Q2FsbDooKT0+R08saXNGdW5jdGlvbjooKT0+ZmwscGFydGlhbDooKT0+TiQscGlwZTooKT0+RnFlLHRocm90dGxlOigpPT5k'@;
put 'ZmUsdGhyb3R0bGVBZnRlckhpdHM6KCk9PlBxZX0pO3ZhciBqPXt9O2IucihqKSxiLmQoaix7S0VZX0NPREVTOigpPT4kYSxpc0N0cmxLZXk6KCk9PlZxZSxpc0N0cmxNZXRhS2V5OigpPT5wZmUsaXNGdW5jdGlvbktleTooKT0+ViQsaXNLZXk6KCk9PmNfLGlzUHJpbnRhYmxlQ2hhcjooKT0+'@;
put 'ZmZlfSk7dmFyIFA9e307Yi5yKFApLGIuZChQLHtpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDooKT0+T20saXNMZWZ0Q2xpY2s6KCk9PiRPLGlzUmlnaHRDbGljazooKT0+UG0saXNUb3VjaEV2ZW50OigpPT5nZmUsb2Zmc2V0UmVsYXRpdmVUbzooKT0+bWZlLHN0b3BJbW1lZGlhdGVQ'@;
put 'cm9wYWdhdGlvbjooKT0+ejJ9KTt2YXIgTD17fTtiLnIoTCksYi5kKEwse19kYXRhVG9IVE1MOigpPT5xJCxodG1sVG9HcmlkU2V0dGluZ3M6KCk9PmtmZSxpbnN0YW5jZVRvSFRNTDooKT0+WCR9KTt2YXIgWT17fTtiLnIoWSksYi5kKFkse2NsYW1wOigpPT5Bbyxpc051bWVyaWM6KCk9Pmcx'@;
put 'LGlzTnVtZXJpY0xpa2U6KCk9PkRmZSxyYW5nZUVhY2g6KCk9PkthLHJhbmdlRWFjaFJldmVyc2U6KCk9PkokLHZhbHVlQWNjb3JkaW5nUGVyY2VudDooKT0+USR9KTt2YXIgQj17fTtiLnIoQiksYi5kKEIse2NvdW50Rmlyc3RSb3dLZXlzOigpPT5GSyxjcmVhdGVFbXB0eVNwcmVhZHNoZWV0'@;
put 'RGF0YTooKT0+VnR0LGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTooKT0+SHR0LGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+TnR0LGRhdGFSb3dUb0NoYW5nZXNBcnJheTooKT0+UEssaXNBcnJheU9mQXJyYXlzOigpPT5MM2UsaXNBcnJheU9mT2JqZWN0czooKT0+TzNlLHNwcmVhZHNo'@;
put 'ZWV0Q29sdW1uSW5kZXg6KCk9PkZ0dCxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5tUH0pO3ZhciBXPXt9O2IucihXKSxiLmQoVyx7Q0hFQ0tCT1hfQ0hFQ0tFRDooKT0+aHEsQ0hFQ0tCT1hfUkVOREVSRVJfTkFNRVNQQUNFOigpPT5kcSxDSEVDS0JPWF9VTkNIRUNLRUQ6KCk9PmZxLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX0FERF9DT01NRU5UOigpPT5oWCxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlQ6KCk9Pm1YLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9CT1RUT006KCk9PlNYLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9DRU5URVI6KCk9PnlYLENPTlRFWFRNRU5V'@;
put 'X0lURU1TX0FMSUdOTUVOVF9KVVNUSUZZOigpPT5fWCxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTEVGVDooKT0+dlgsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX01JRERMRTooKT0+Q1gsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX1JJR0hUOigpPT5iWCxDT05URVhUTUVO'@;
put 'VV9JVEVNU19BTElHTk1FTlRfVE9QOigpPT53WCxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTOigpPT5NWCxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0JPVFRPTTooKT0+VFgsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19MRUZUOigpPT5BWCxDT05URVhUTUVOVV9JVEVNU19CT1JERVJT'@;
put 'X1JJR0hUOigpPT5FWCxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1RPUDooKT0+eFgsQ09OVEVYVE1FTlVfSVRFTVNfQ0xFQVJfQ09MVU1OOigpPT5uWCxDT05URVhUTUVOVV9JVEVNU19DT1BZOigpPT5yWCxDT05URVhUTUVOVV9JVEVNU19DT1BZX0NPTFVNTl9IRUFERVJTX09OTFk6KCk9'@;
put 'PnNYLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fR1JPVVBfSEVBREVSUzooKT0+YVgsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9IRUFERVJTOigpPT5pWCxDT05URVhUTUVOVV9JVEVNU19DVVQ6KCk9Pm9YLENPTlRFWFRNRU5VX0lURU1TX0VESVRfQ09N'@;
put 'TUVOVDooKT0+ZlgsQ09OVEVYVE1FTlVfSVRFTVNfRlJFRVpFX0NPTFVNTjooKT0+bFgsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9DT0xVTU46KCk9PlJYLENPTlRFWFRNRU5VX0lURU1TX0hJREVfUk9XOigpPT5PWCxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfTEVGVDooKT0+WEssQ09OVEVY'@;
put 'VE1FTlVfSVRFTVNfSU5TRVJUX1JJR0hUOigpPT5xSyxDT05URVhUTUVOVV9JVEVNU19NRVJHRV9DRUxMUzooKT0+dVgsQ09OVEVYVE1FTlVfSVRFTVNfTkVTVEVEX1JPV1NfREVUQUNIX0NISUxEOigpPT5JWCxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19JTlNFUlRfQ0hJTEQ6KCk9'@;
put 'PkRYLENPTlRFWFRNRU5VX0lURU1TX05PX0lURU1TOigpPT5HSyxDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFk6KCk9Pk1QLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWV9DT01NRU5UOigpPT5nWCxDT05URVhUTUVOVV9JVEVNU19SRURPOigpPT50WCxDT05URVhUTUVOVV9JVEVNU19S'@;
put 'RU1PVkVfQk9SREVSUzooKT0+a1gsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTFVNTjooKT0+UUssQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTU1FTlQ6KCk9PnBYLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9ST1c6KCk9PkpLLENPTlRFWFRNRU5VX0lURU1TX1JPV19BQk9WRToo'@;
put 'KT0+JEssQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0JFTE9XOigpPT5LSyxDT05URVhUTUVOVV9JVEVNU19TSE9XX0NPTFVNTjooKT0+TFgsQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19ST1c6KCk9PlBYLENPTlRFWFRNRU5VX0lURU1TX1VORE86KCk9PmVYLENPTlRFWFRNRU5VX0lURU1TX1VORlJF'@;
put 'RVpFX0NPTFVNTjooKT0+Y1gsQ09OVEVYVE1FTlVfSVRFTVNfVU5NRVJHRV9DRUxMUzooKT0+ZFgsQ09OVEVYVF9NRU5VX0lURU1TX05BTUVTUEFDRTooKT0+WTNlLEZJTFRFUlNfQlVUVE9OU19DQU5DRUw6KCk9Pm9xLEZJTFRFUlNfQlVUVE9OU19DTEVBUjooKT0+YXEsRklMVEVSU19CVVRU'@;
put 'T05TX09LOigpPT5zcSxGSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VBUkNIOigpPT5scSxGSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VDT05EX1ZBTFVFOigpPT51cSxGSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfVkFMVUU6KCk9PmNxLEZJTFRFUlNfQlVUVE9OU19TRUxF'@;
put 'Q1RfQUxMOigpPT5pcSxGSUxURVJTX0NPTkRJVElPTlNfQUZURVI6KCk9PlhYLEZJTFRFUlNfQ09ORElUSU9OU19CRUZPUkU6KCk9PnFYLEZJTFRFUlNfQ09ORElUSU9OU19CRUdJTlNfV0lUSDooKT0+QlgsRklMVEVSU19DT05ESVRJT05TX0JFVFdFRU46KCk9PiRYLEZJTFRFUlNfQ09ORElU'@;
put 'SU9OU19CWV9WQUxVRTooKT0+dm50LEZJTFRFUlNfQ09ORElUSU9OU19DT05UQUlOUzooKT0+elgsRklMVEVSU19DT05ESVRJT05TX0VNUFRZOigpPT5GWCxGSUxURVJTX0NPTkRJVElPTlNfRU5EU19XSVRIOigpPT5qWCxGSUxURVJTX0NPTkRJVElPTlNfRVFVQUw6KCk9Pk5YLEZJTFRFUlNf'@;
put 'Q09ORElUSU9OU19HUkVBVEVSX1RIQU46KCk9PlpYLEZJTFRFUlNfQ09ORElUSU9OU19HUkVBVEVSX1RIQU5fT1JfRVFVQUw6KCk9PldYLEZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU46KCk9PllYLEZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5fT1JfRVFVQUw6KCk9PkdYLEZJTFRF'@;
put 'UlNfQ09ORElUSU9OU19OQU1FU1BBQ0U6KCk9PlVjLEZJTFRFUlNfQ09ORElUSU9OU19OT05FOigpPT54UCxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0JFVFdFRU46KCk9PktYLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQ09OVEFJTjooKT0+VVgsRklMVEVSU19DT05ESVRJT05TX05PVF9FTVBU'@;
put 'WTooKT0+SFgsRklMVEVSU19DT05ESVRJT05TX05PVF9FUVVBTDooKT0+VlgsRklMVEVSU19DT05ESVRJT05TX1RPREFZOigpPT5KWCxGSUxURVJTX0NPTkRJVElPTlNfVE9NT1JST1c6KCk9PlFYLEZJTFRFUlNfQ09ORElUSU9OU19ZRVNURVJEQVk6KCk9PmVxLEZJTFRFUlNfRElWU19GSUxU'@;
put 'RVJfQllfQ09ORElUSU9OOigpPT50cSxGSUxURVJTX0RJVlNfRklMVEVSX0JZX1ZBTFVFOigpPT5ucSxGSUxURVJTX0xBQkVMU19DT05KVU5DVElPTjooKT0+cnEsRklMVEVSU19MQUJFTFNfRElTSlVOQ1RJT046KCk9PkVQLEZJTFRFUlNfTkFNRVNQQUNFOigpPT5KMSxGSUxURVJTX1ZBTFVF'@;
put 'U19CTEFOS19DRUxMUzooKT0+VFB9KTt2YXIgWj17fTtmdW5jdGlvbiBYKGMsbCxhLGQsaCxmLHYpe3RyeXt2YXIgTT1jW2ZdKHYpLEk9TS52YWx1ZX1jYXRjaChHKXtyZXR1cm4gdm9pZCBhKEcpfU0uZG9uZT9sKEkpOlByb21pc2UucmVzb2x2ZShJKS50aGVuKGQsaCl9ZnVuY3Rpb24gUShj'@;
put 'KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEkpe1goZixkLGgsdixNLCJuZXh0IixJKX1mdW5jdGlvbiBNKEkpe1goZixkLGgsdixNLCJ0aHJvdyIs'@;
put 'SSl9dih2b2lkIDApfSl9fWIucihaKSxiLmQoWix7Z2V0Tm9ybWFsaXplZERhdGU6KCk9Pkk0ZX0pO2xldCB0ZT1udWxsLHNlPTE7Y29uc3QgZ2U9U3ltYm9sKCJTSUdOQUwiKTtmdW5jdGlvbiBfZShjKXtjb25zdCBsPXRlO3JldHVybiB0ZT1jLGx9ZnVuY3Rpb24geChjKXtpZigoIWxlKGMp'@;
put 'fHxjLmRpcnR5KSYmKGMuZGlydHl8fGMubGFzdENsZWFuRXBvY2ghPT1zZSkpe2lmKCFjLnByb2R1Y2VyTXVzdFJlY29tcHV0ZShjKSYmIW0oYykpcmV0dXJuIGMuZGlydHk9ITEsdm9pZChjLmxhc3RDbGVhbkVwb2NoPXNlKTtjLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUoYyksYy5kaXJ0eT0h'@;
put 'MSxjLmxhc3RDbGVhbkVwb2NoPXNlfX1mdW5jdGlvbiBtKGMpe3dlKGMpO2ZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2wrKyl7Y29uc3QgYT1jLnByb2R1Y2VyTm9kZVtsXSxkPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF07aWYoZCE9PWEudmVyc2lvbnx8KHgoYSks'@;
put 'ZCE9PWEudmVyc2lvbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbmUoYyxsKXtpZihmdW5jdGlvbiBaZShjKXtjLmxpdmVDb25zdW1lck5vZGU/Pz1bXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzPz89W119KGMpLHdlKGMpLDE9PT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKWZv'@;
put 'cihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyluZShjLnByb2R1Y2VyTm9kZVtkXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbZF0pO2NvbnN0IGE9Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0xO2lmKGMubGl2ZUNvbnN1bWVyTm9kZVtsXT1jLmxpdmVDb25zdW1lck5vZGVb'@;
put 'YV0sYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpc1tsXT1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2FdLGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgtLSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aC0tLGw8Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCl7Y29uc3QgZD1jLmxp'@;
put 'dmVDb25zdW1lckluZGV4T2ZUaGlzW2xdLGg9Yy5saXZlQ29uc3VtZXJOb2RlW2xdO3dlKGgpLGgucHJvZHVjZXJJbmRleE9mVGhpc1tkXT1sfX1mdW5jdGlvbiBsZShjKXtyZXR1cm4gYy5jb25zdW1lcklzQWx3YXlzTGl2ZXx8KGM/LmxpdmVDb25zdW1lck5vZGU/Lmxlbmd0aD8/MCk+MH1m'@;
put 'dW5jdGlvbiB3ZShjKXtjLnByb2R1Y2VyTm9kZT8/PVtdLGMucHJvZHVjZXJJbmRleE9mVGhpcz8/PVtdLGMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24/Pz1bXX1sZXQgQWU9bnVsbDtmdW5jdGlvbiBLZShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiB0dChjKXtjb25z'@;
put 'dCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfWNvbnN0IE5lPXR0KGM9PmZ1bmN0aW9uKGEpe2ModGhpcyks'@;
put 'dGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChkLGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMu'@;
put 'ZXJyb3JzPWF9KTtmdW5jdGlvbiB1dChjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEsMSl9fWNsYXNzIEp0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5f'@;
put 'ZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUo'@;
put 'dGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihLZShkKSl0cnl7ZCgpfWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIE5lP2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVs'@;
put 'bDtmb3IoY29uc3QgZiBvZiBoKXRyeXtvaShmKX1jYXRjaCh2KXtsPWw/P1tdLHYgaW5zdGFuY2VvZiBOZT9sPVsuLi5sLC4uLnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IE5lKGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpb2kobCk7'@;
put 'ZWxzZXtpZihsIGluc3RhbmNlb2YgSnQpe2lmKGwuY2xvc2VkfHxsLl9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVu'@;
put 'dChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9b'@;
put 'YSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoYSkmJnV0KGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmdXQoYSxsKSxsIGluc3RhbmNlb2YgSnQm'@;
put 'JmwuX3JlbW92ZVBhcmVudCh0aGlzKX19SnQuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgSnQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgpO2NvbnN0IEx0PUp0LkVNUFRZO2Z1bmN0aW9uIFB0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgSnR8fGMmJiJjbG9zZWQiaW4gYyYmS2UoYy5yZW1vdmUp'@;
put 'JiZLZShjLmFkZCkmJktlKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIG9pKGMpe0tlKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3QgZW49e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hy'@;
put 'b25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sc249e3NldFRpbWVvdXQoYyxsLC4uLmEpe2NvbnN0e2RlbGVnYXRlOmR9PXNuO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNs'@;
put 'ZWFyVGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1zbjtyZXR1cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIElpKGMpe3NuLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PWVuO2lmKCFsKXRo'@;
put 'cm93IGM7bChjKX0pfWZ1bmN0aW9uIGRuKCl7fWNvbnN0IGZ0PWt0KCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBrdChjLGwsYSl7cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBMbj1udWxsO2Z1bmN0aW9uIG90KGMpe2lmKGVuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91'@;
put 'c0Vycm9ySGFuZGxpbmcpe2NvbnN0IGw9IUxuO2lmKGwmJihMbj17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRocm93bjphLGVycm9yOmR9PUxuO2lmKExuPW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyBuaSBleHRlbmRzIEp0e2NvbnN0cnVj'@;
put 'dG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLFB0KGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj1qdH1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IGh0KGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP2FuKGZ1'@;
put 'bmN0aW9uIFp0KGMpe3JldHVybiBrdCgiTiIsYyx2b2lkIDApfShsKSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3RoaXMuaXNTdG9wcGVkP2FuKGZ1bmN0aW9uIEZyKGMpe3JldHVybiBrdCgiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJy'@;
put 'b3IobCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/YW4oZnQsdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249'@;
put 'bnVsbCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwpfV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMu'@;
put 'dW5zdWJzY3JpYmUoKX19fWNvbnN0IFdlPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIEF0KGMsbCl7cmV0dXJuIFdlLmNhbGwoYyxsKX1jbGFzcyBpcntjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9'@;
put 'PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7RXQoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7RXQoZCl9ZWxzZSBFdChsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNl'@;
put 'cnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtFdChhKX19fWNsYXNzIGh0IGV4dGVuZHMgbml7Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksS2UobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21w'@;
put 'bGV0ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmZW4udXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5jcmVhdGUobCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZBdChsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmQXQo'@;
put 'bC5lcnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZBdChsLmNvbXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249bmV3IGlyKGgpfX1mdW5jdGlvbiBFdChjKXtlbi51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIHp0KGMpe2VuLnVzZURlcHJl'@;
put 'Y2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJkxuJiYoTG4uZXJyb3JUaHJvd249ITAsTG4uZXJyb3I9Yyl9KGMpOklpKGMpfWZ1bmN0aW9uIGFuKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PWVuO2EmJnNuLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QganQ9'@;
put 'e2Nsb3NlZDohMCxuZXh0OmRuLGVycm9yOmZ1bmN0aW9uIHpuKGMpe3Rocm93IGN9LGNvbXBsZXRlOmRufSxkaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gY24oYyl7cmV0dXJuIGN9ZnVuY3Rpb24gRGkoYyl7'@;
put 'cmV0dXJuIDA9PT1jLmxlbmd0aD9jbjoxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBRdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBj'@;
put 'O3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiB4aShjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIG5pfHxmdW5jdGlvbiBjYShjKXtyZXR1cm4gYyYmS2UoYy5uZXh0KSYmS2UoYy5lcnJvcikmJktlKGMuY29tcGxl'@;
put 'dGUpfShjKSYmUHQoYyl9KGEpP2E6bmV3IGh0KGEsZCxoKTtyZXR1cm4gb3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJjZTpNfT10aGlzO2YuYWRkKHY/di5jYWxsKGYsTSk6TT90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShh'@;
put 'KXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChkKXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJuIG5ldyhkPXRuKGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IGh0KHtuZXh0Ok09Pnt0cnl7YShNKX1jYXRjaChJKXtmKEkpLHYudW5zdWJzY3JpYmUoKX19LGVycm9y'@;
put 'OmYsY29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W2RpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIERpKGEpKHRo'@;
put 'aXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9dG4oYSkpKChkLGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12LHY9PmgodiksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiB0bihjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShs'@;
put 'PWM/P2VuLlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1jb25zdCB5cj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBHbj0oKCk9PntjbGFzcyBj'@;
put 'IGV4dGVuZHMgUXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3Qg'@;
put 'ZD1uZXcgS2kodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgeXJ9bmV4dChhKXtvdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVy'@;
put 'c3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtvdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3Ro'@;
put 'aXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlzO2Zvcig7ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe290KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3Rv'@;
put 'cHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZl'@;
put 'cnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1'@;
put 'YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0'@;
put 'dXJuIGR8fGg/THQ6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgSnQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCx1dChmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3Bw'@;
put 'ZWQ6Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IFF0O3JldHVybiBhLnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3IEtpKGwsYSksY30pKCk7Y2xhc3MgS2kgZXh0ZW5kcyBHbntjb25zdHJ1Y3Rv'@;
put 'cihsLGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMuc291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0oZD1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3Zh'@;
put 'ciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1s'@;
put 'P3ZvaWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxsKGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOkx0fX1jbGFzcyBK'@;
put 'ciBleHRlbmRzIEdue2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxh'@;
put 'fWdldFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJvcjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiBRcihjKXtyZXR1cm4gS2UoYz8u'@;
put 'bGlmdCl9ZnVuY3Rpb24gTmkoYyl7cmV0dXJuIGw9PntpZihRcihsKSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZh'@;
put 'YmxlIHR5cGUiKX19ZnVuY3Rpb24gSGkoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IElhKGMsbCxhLGQsaCl9Y2xhc3MgSWEgZXh0ZW5kcyBuaXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25l'@;
put 'eHQ9YT9mdW5jdGlvbihNKXt0cnl7YShNKX1jYXRjaChJKXtsLmVycm9yKEkpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihNKXt0cnl7aChNKX1jYXRjaChJKXtsLmVycm9yKEkpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2Nv'@;
put 'bXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKE0pe2wuZXJyb3IoTSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgp'@;
put 'KXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBQcihjLGwpe3JldHVybiBOaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoSGkoZCxm'@;
put 'PT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCBmYT0iaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyI7Y2xhc3MgbnIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGZ1bmN0aW9uIG9hKGMsbCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMoYyl9JHtsPyI6'@;
put 'ICIrbDoiIn1gfShsLGEpKSx0aGlzLmNvZGU9bH19ZnVuY3Rpb24gSG8oYyl7cmV0dXJue3RvU3RyaW5nOmN9LnRvU3RyaW5nKCl9Y29uc3QgdXU9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiBUYShjLGwsYSl7cmV0dXJuIEhvKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBvcihjKXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oLi4uYSl7aWYoYyl7Y29uc3QgZD1jKC4uLmEpO2Zvcihjb25zdCBoIGluIGQpdGhpc1toXT1kW2hdfX19KGwpO2Z1bmN0aW9uIGgoLi4uZil7aWYodGhpcyBpbnN0YW5jZW9mIGgpcmV0dXJuIGQuYXBwbHkodGhpcyxmKSx0aGlzO2NvbnN0IHY9bmV3IGgoLi4uZik7cmV0dXJu'@;
put 'IE0uYW5ub3RhdGlvbj12LE07ZnVuY3Rpb24gTShJLEcscmUpe2NvbnN0IHVlPUkuaGFzT3duUHJvcGVydHkodXUpP0lbdXVdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHV1LHt2YWx1ZTpbXX0pW3V1XTtmb3IoO3VlLmxlbmd0aDw9cmU7KXVlLnB1c2gobnVsbCk7cmV0dXJuKHVlW3JlXT11'@;
put 'ZVtyZV18fFtdKS5wdXNoKHYpLEl9fXJldHVybiBhJiYoaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0aW9uQ2xzPWgsaH0pfWNvbnN0IE50PWdsb2JhbFRoaXM7ZnVuY3Rpb24gVmEoYyl7Zm9yKGxl'@;
put 'dCBsIGluIGMpaWYoY1tsXT09PVZhKXJldHVybiBsO3Rocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gRHUoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3Bl'@;
put 'cnR5KGEpJiYoY1thXT1sW2FdKX1mdW5jdGlvbiBIcihjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoQXJyYXkuaXNBcnJheShjKSlyZXR1cm4iWyIrYy5tYXAoSHIpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PWMpcmV0dXJuIiIrYztpZihjLm92ZXJyaWRkZW5OYW1lKXJl'@;
put 'dHVybmAke2Mub3ZlcnJpZGRlbk5hbWV9YDtpZihjLm5hbWUpcmV0dXJuYCR7Yy5uYW1lfWA7Y29uc3QgbD1jLnRvU3RyaW5nKCk7aWYobnVsbD09bClyZXR1cm4iIitsO2NvbnN0IGE9bC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09YT9sOmwuc3Vic3RyaW5nKDAsYSl9ZnVuY3Rpb24gbGQo'@;
put 'YyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jP251bGw9PT1sPyIiOmw6bnVsbD09bHx8IiI9PT1sP2M6YysiICIrbH1jb25zdCBwZj1WYSh7X19mb3J3YXJkX3JlZl9fOlZhfSk7ZnVuY3Rpb24gd28oYyl7cmV0dXJuIGMuX19mb3J3YXJkX3JlZl9fPXdvLGMudG9TdHJpbmc9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSHIodGhpcygpKX0sY31mdW5jdGlvbiBHaShjKXtyZXR1cm4gdmwoYyk/YygpOmN9ZnVuY3Rpb24gdmwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJmMuaGFzT3duUHJvcGVydHkocGYpJiZjLl9fZm9yd2FyZF9yZWZfXz09PXdvfWZ1bmN0aW9uIHJuKGMpe3JldHVy'@;
put 'bnt0b2tlbjpjLnRva2VuLHByb3ZpZGVkSW46Yy5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6Yy5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gQXIoYyl7cmV0dXJue3Byb3ZpZGVyczpjLnByb3ZpZGVyc3x8W10saW1wb3J0czpjLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBGcyhjKXty'@;
put 'ZXR1cm4gcmwoYyxDbyl8fHJsKGMsTnMpfWZ1bmN0aW9uIHJsKGMsbCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkobCk/Y1tsXTpudWxsfWZ1bmN0aW9uIE5vKGMpe3JldHVybiBjJiYoYy5oYXNPd25Qcm9wZXJ0eShObCl8fGMuaGFzT3duUHJvcGVydHkoSXMpKT9jW05sXTpudWxsfWNvbnN0'@;
put 'IENvPVZhKHtcdTAyNzVwcm92OlZhfSksTmw9VmEoe1x1MDI3NWluajpWYX0pLE5zPVZhKHtuZ0luamVjdGFibGVEZWY6VmF9KSxJcz1WYSh7bmdJbmplY3RvckRlZjpWYX0pO2NsYXNzIFN0e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fZGVzYz1sLHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVj'@;
put 'dGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgYT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWE6dm9pZCAwIT09YSYmKHRoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46dGhpcyxwcm92aWRlZEluOmEucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6YS5m'@;
put 'YWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlvbiBqYShjKXtyZXR1cm4gYyYmISFjLlx1MDI3NXByb3ZpZGVyc31jb25zdCAkcz1WYSh7XHUwMjc1Y21wOlZhfSksS2w9VmEoe1x1'@;
put 'MDI3NWRpcjpWYX0pLGVzPVZhKHtcdTAyNzVwaXBlOlZhfSksYnM9VmEoe1x1MDI3NW1vZDpWYX0pLGppPVZhKHtcdTAyNzVmYWM6VmF9KSxMYz1WYSh7X19OR19FTEVNRU5UX0lEX186VmF9KSxWbD1WYSh7X19OR19FTlZfSURfXzpWYX0pO2Z1bmN0aW9uIFNhKGMpe3JldHVybiJzdHJpbmci'@;
put 'PT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIFNvKGMsbCl7dGhyb3cgbmV3IG5yKC0yMDEsITEpfXZhciByYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRlZmF1bHQ9MF09IkRlZmF1bHQiLGNbYy5Ib3N0PTFdPSJIb3N0IixjW2MuU2VsZj0yXT0iU2VsZiIsY1tj'@;
put 'LlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsY1tjLk9wdGlvbmFsPThdPSJPcHRpb25hbCIsY30ocmF8fHt9KTtsZXQgc3M7ZnVuY3Rpb24gdDUoKXtyZXR1cm4gc3N9ZnVuY3Rpb24geWwoYyl7Y29uc3QgbD1zcztyZXR1cm4gc3M9YyxsfWZ1bmN0aW9uIHRoKGMsbCxhKXtjb25zdCBkPUZzKGMp'@;
put 'O3JldHVybiBkJiYicm9vdCI9PWQucHJvdmlkZWRJbj92b2lkIDA9PT1kLnZhbHVlP2QudmFsdWU9ZC5mYWN0b3J5KCk6ZC52YWx1ZTphJnJhLk9wdGlvbmFsP251bGw6dm9pZCAwIT09bD9sOnZvaWQgU28oKX1jb25zdCAkMD17fSxkdT0iX19OR19ESV9GTEFHX18iLE9jPSJuZ1RlbXBUb2tl'@;
put 'blBhdGgiLEh3PS9cbi9nbSxpbD0iX19zb3VyY2UiO2xldCBSMztmdW5jdGlvbiBuaChjKXtjb25zdCBsPVIzO3JldHVybiBSMz1jLGx9ZnVuY3Rpb24gSTEoYyxsPXJhLkRlZmF1bHQpe2lmKHZvaWQgMD09PVIzKXRocm93IG5ldyBucigtMjAzLCExKTtyZXR1cm4gbnVsbD09PVIzP3RoKGMs'@;
put 'dm9pZCAwLGwpOlIzLmdldChjLGwmcmEuT3B0aW9uYWw/bnVsbDp2b2lkIDAsbCl9ZnVuY3Rpb24gQ3IoYyxsPXJhLkRlZmF1bHQpe3JldHVybih0NSgpfHxJMSkoR2koYyksbCl9ZnVuY3Rpb24gaGkoYyxsPXJhLkRlZmF1bHQpe3JldHVybiBDcihjLG41KGwpKX1mdW5jdGlvbiBuNShjKXty'@;
put 'ZXR1cm4gdHlwZW9mIGM+InUifHwibnVtYmVyIj09dHlwZW9mIGM/YzooYy5vcHRpb25hbCYmOCl8KGMuaG9zdCYmMSl8KGMuc2VsZiYmMil8KGMuc2tpcFNlbGYmJjQpfWZ1bmN0aW9uIHI1KGMpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9R2koY1th'@;
put 'XSk7aWYoQXJyYXkuaXNBcnJheShkKSl7aWYoMD09PWQubGVuZ3RoKXRocm93IG5ldyBucig5MDAsITEpO2xldCBoLGY9cmEuRGVmYXVsdDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7Y29uc3QgTT1kW3ZdLEk9YmYoTSk7Im51bWJlciI9PXR5cGVvZiBJPy0xPT09ST9oPU0udG9rZW46'@;
put 'Znw9STpoPU19bC5wdXNoKENyKGgsZikpfWVsc2UgbC5wdXNoKENyKGQpKX1yZXR1cm4gbH1mdW5jdGlvbiBRdShjLGwpe3JldHVybiBjW2R1XT1sLGMucHJvdG90eXBlW2R1XT1sLGN9ZnVuY3Rpb24gYmYoYyl7cmV0dXJuIGNbZHVdfWNvbnN0IHM1PVF1KFRhKCJJbmplY3QiLGM9Pih7dG9r'@;
put 'ZW46Y30pKSwtMSksUjE9UXUoVGEoIk9wdGlvbmFsIiksOCksdWQ9UXUoVGEoIlNraXBTZWxmIiksNCk7ZnVuY3Rpb24gaHUoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShqaSk/Y1tqaV06bnVsbH1mdW5jdGlvbiBMMyhjLGwpe2MuZm9yRWFjaChhPT5BcnJheS5pc0FycmF5KGEpP0wz'@;
put 'KGEsbCk6bChhKSl9ZnVuY3Rpb24gUmwoYyxsLGEpe2w+PWMubGVuZ3RoP2MucHVzaChhKTpjLnNwbGljZShsLDAsYSl9ZnVuY3Rpb24gSXUoYyxsKXtyZXR1cm4gbD49Yy5sZW5ndGgtMT9jLnBvcCgpOmMuc3BsaWNlKGwsMSlbMF19ZnVuY3Rpb24gdjAoYyxsLGEpe2xldCBkPW4yKGMsbCk7'@;
put 'cmV0dXJuIGQ+PTA/Y1sxfGRdPWE6KGQ9fmQsZnVuY3Rpb24gb3YoYyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1to'@;
put 'LTJdLGgtLTtjW2xdPWEsY1tsKzFdPWR9fShjLGQsbCxhKSksZH1mdW5jdGlvbiBBNihjLGwpe2NvbnN0IGE9bjIoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gbjIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gTDEoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2gh'@;
put 'PT1kOyl7Y29uc3QgZj1kKyhoLWQ+PjEpLHY9Y1tmPDxhXTtpZihsPT09dilyZXR1cm4gZjw8YTt2Pmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCBrMD17fSxKcz1bXSxyMj1uZXcgU3QoIiIpLE8zPW5ldyBTdCgiIiwtMSksazY9bmV3IFN0KCIiKTtjbGFzcyBvNXtn'@;
put 'ZXQobCxhPSQwKXtpZihhPT09JDApe2NvbnN0IGQ9bmV3IEVycm9yKGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICR7SHIobCl9IWApO3Rocm93IGQubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGR9cmV0dXJuIGF9fXZhciBQMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9u'@;
put 'UHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVsdCIsY30oUDN8fHt9KSxxbz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsY1tjLk5vbmU9Ml09Ik5vbmUiLGNbYy5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsY30ocW98fHt9KSxWbj1m'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaWduYWxCYXNlZD0xXT0iU2lnbmFsQmFzZWQiLGNbYy5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybT0yXT0iSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0iLGN9KFZufHx7fSk7ZnVuY3Rpb24gancoYyxsLGEpe2xl'@;
put 'dCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4T2YobCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWZ1'@;
put 'bmN0aW9uIG00KGMsbCxhKXtsZXQgZD0wO2Zvcig7ZDxhLmxlbmd0aDspe2NvbnN0IGg9YVtkXTtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKDAhPT1oKWJyZWFrO2QrKztjb25zdCBmPWFbZCsrXSx2PWFbZCsrXSxNPWFbZCsrXTtjLnNldEF0dHJpYnV0ZShsLHYsTSxmKX1lbHNle2NvbnN0'@;
put 'IGY9aCx2PWFbKytkXTtjNShmKT9jLnNldFByb3BlcnR5KGwsZix2KTpjLnNldEF0dHJpYnV0ZShsLGYsdiksZCsrfX1yZXR1cm4gZH1mdW5jdGlvbiBsNShjKXtyZXR1cm4gMz09PWN8fDQ9PT1jfHw2PT09Y31mdW5jdGlvbiBjNShjKXtyZXR1cm4gNjQ9PT1jLmNoYXJDb2RlQXQoMCl9ZnVu'@;
put 'Y3Rpb24gQ2YoYyxsKXtpZihudWxsIT09bCYmMCE9PWwubGVuZ3RoKWlmKG51bGw9PT1jfHwwPT09Yy5sZW5ndGgpYz1sLnNsaWNlKCk7ZWxzZXtsZXQgYT0tMTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7Y29uc3QgaD1sW2RdOyJudW1iZXIiPT10eXBlb2YgaD9hPWg6MD09PWF8fEQ2'@;
put 'KGMsYSxoLG51bGwsLTE9PT1hfHwyPT09YT9sWysrZF06bnVsbCl9fXJldHVybiBjfWZ1bmN0aW9uIEQ2KGMsbCxhLGQsaCl7bGV0IGY9MCx2PWMubGVuZ3RoO2lmKC0xPT09bCl2PS0xO2Vsc2UgZm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2YrK107aWYoIm51bWJlciI9PXR5cGVvZiBN'@;
put 'KXtpZihNPT09bCl7dj0tMTticmVha31pZihNPmwpe3Y9Zi0xO2JyZWFrfX19Zm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2ZdO2lmKCJudW1iZXIiPT10eXBlb2YgTSlicmVhaztpZihNPT09YSl7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbCE9PWgmJihjW2YrMV09aCkpO2lmKGQ9'@;
put 'PT1jW2YrMV0pcmV0dXJuIHZvaWQoY1tmKzJdPWgpfWYrKyxudWxsIT09ZCYmZisrLG51bGwhPT1oJiZmKyt9LTEhPT12JiYoYy5zcGxpY2UodiwwLGwpLGY9disxKSxjLnNwbGljZShmKyssMCxhKSxudWxsIT09ZCYmYy5zcGxpY2UoZisrLDAsZCksbnVsbCE9PWgmJmMuc3BsaWNlKGYrKyww'@;
put 'LGgpfWNvbnN0IGx2PSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gSTYoYyxsLGEsZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PWp3KGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJu'@;
put 'ITB9ZWxzZSBpZih2NChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhPZigxLGgpLGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdjQoYyl7cmV0dXJu'@;
put 'IDQ9PT1jLnR5cGUmJmMudmFsdWUhPT1sdn1mdW5jdGlvbiB0MChjLGwsYSl7cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOmx2KX1mdW5jdGlvbiB6dyhjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiB1dihjKXtmb3IobGV0IGw9MDts'@;
put 'PGMubGVuZ3RoO2wrKylpZihsNShjW2xdKSlyZXR1cm4gbDtyZXR1cm4gYy5sZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEk9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEkpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUkmJiF0'@;
put 'MChjLEksYSl8fCIiPT09SSYmMT09PWwubGVuZ3RoKXtpZihDYyhkKSlyZXR1cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFJNihjLGgsSSxhKSl7aWYoQ2MoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBHPWxbKytNXSxyZT1GMyhJLGgsdjQoYyksYSk7aWYoLTE9'@;
put 'PT1yZSl7aWYoQ2MoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1pZigiIiE9PUcpe2xldCB1ZTtpZih1ZT1yZT5mPyIiOmhbcmUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJkchPT11ZSl7aWYoQ2MoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhQ2MoZCkmJiFDYyhJKSlyZXR1cm4h'@;
put 'MTtpZih2JiZDYyhJKSljb250aW51ZTt2PSExLGQ9SXwxJmR9fXJldHVybiBDYyhkKXx8dn1mdW5jdGlvbiBDYyhjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gRjMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3Ro'@;
put 'Oyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9PT12fHw2PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2Nv'@;
put 'bnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gZHYoYyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31y'@;
put 'ZXR1cm4tMX0obCxjKX1mdW5jdGlvbiB5NChjLGwsYT0hMSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYoencoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFV3KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVu'@;
put 'Z3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIGh2KGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBadyhjKXtsZXQgbD1jWzBdLGE9'@;
put 'MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2PWNbYV07aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtl'@;
put 'bHNlIiIhPT1oJiYhQ2ModikmJihsKz1odihmLGgpLGg9IiIpLGQ9dixmPWZ8fCFDYyhkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9aHYoZixoKSksbH1mdW5jdGlvbiBOcihjKXtyZXR1cm4gSG8oKCk9Pntjb25zdCBsPVI2KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0'@;
put 'ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09UDMuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczps'@;
put 'LnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3RvcjpudWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fHFvLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8SnMsXzpu'@;
put 'dWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGwsaWQ6IiJ9O0QwKGEpO2NvbnN0IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1kNShkLCExKSxhLnBpcGVEZWZzPWQ1KGQsITApLGEuaWQ9ZnVuY3Rpb24gWXcoYyl7bGV0IGw9MDtjb25zdCBhPVtj'@;
put 'LnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RWYXJzLGMuaG9zdEF0dHJzLGMuY29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5n'@;
put 'aWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYy50eXBlLnByb3RvdHlwZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKXwwO3JldHVybiBs'@;
put 'Kz0yMTQ3NDgzNjQ4LCJjIitsfShhKSxhfSl9ZnVuY3Rpb24gU2YoYyl7cmV0dXJuIEJzKGMpfHxTYyhjKX1mdW5jdGlvbiB1NShjKXtyZXR1cm4gbnVsbCE9PWN9ZnVuY3Rpb24gQWkoYyl7cmV0dXJuIEhvKCgpPT4oe3R5cGU6Yy50eXBlLGJvb3RzdHJhcDpjLmJvb3RzdHJhcHx8SnMsZGVj'@;
put 'bGFyYXRpb25zOmMuZGVjbGFyYXRpb25zfHxKcyxpbXBvcnRzOmMuaW1wb3J0c3x8SnMsZXhwb3J0czpjLmV4cG9ydHN8fEpzLHRyYW5zaXRpdmVDb21waWxlU2NvcGVzOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsaWQ6Yy5pZHx8bnVsbH0pKX1mdW5jdGlvbiBiNChjLGwpe2lmKG51'@;
put 'bGw9PWMpcmV0dXJuIGswO2NvbnN0IGE9e307Zm9yKGNvbnN0IGQgaW4gYylpZihjLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWNbZF07bGV0IGYsdixNPVZuLk5vbmU7QXJyYXkuaXNBcnJheShoKT8oTT1oWzBdLGY9aFsxXSx2PWhbMl0/P2YpOihmPWgsdj1oKSxsPyhhW2ZdPU0hPT1W'@;
put 'bi5Ob25lP1tkLE1dOmQsbFtmXT12KTphW2ZdPWR9cmV0dXJuIGF9ZnVuY3Rpb24gRXIoYyl7cmV0dXJuIEhvKCgpPT57Y29uc3QgbD1SNihjKTtyZXR1cm4gRDAobCksbH0pfWZ1bmN0aW9uIGFsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51bGwscHVyZToh'@;
put 'MSE9PWMucHVyZSxzdGFuZGFsb25lOiEwPT09Yy5zdGFuZGFsb25lLG9uRGVzdHJveTpjLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBCcyhjKXtyZXR1cm4gY1skc118fG51bGx9ZnVuY3Rpb24gU2MoYyl7cmV0dXJuIGNbS2xdfHxudWxsfWZ1bmN0aW9uIHFj'@;
put 'KGMpe3JldHVybiBjW2VzXXx8bnVsbH1mdW5jdGlvbiBSdShjLGwpe2NvbnN0IGE9Y1tic118fG51bGw7aWYoIWEmJiEwPT09bCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtIcihjKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gYX1mdW5jdGlvbiBSNihj'@;
put 'KXtjb25zdCBsPXt9O3JldHVybnt0eXBlOmMudHlwZSxwcm92aWRlcnNSZXNvbHZlcjpudWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6Yy5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6Yy5ob3N0VmFyc3x8MCxob3N0QXR0cnM6Yy5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJp'@;
put 'ZXM6Yy5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0czpsLGlucHV0VHJhbnNmb3JtczpudWxsLGlucHV0Q29uZmlnOmMuaW5wdXRzfHxrMCxleHBvcnRBczpjLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsc2lnbmFsczohMD09PWMuc2lnbmFs'@;
put 'cyxzZWxlY3RvcnM6Yy5zZWxlY3RvcnN8fEpzLHZpZXdRdWVyeTpjLnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpjLmZlYXR1cmVzfHxudWxsLHNldElucHV0Om51bGwsZmluZEhvc3REaXJlY3RpdmVEZWZzOm51bGwsaG9zdERpcmVjdGl2ZXM6bnVsbCxpbnB1dHM6YjQoYy5pbnB1dHMsbCks'@;
put 'b3V0cHV0czpiNChjLm91dHB1dHMpLGRlYnVnSW5mbzpudWxsfX1mdW5jdGlvbiBEMChjKXtjLmZlYXR1cmVzPy5mb3JFYWNoKGw9PmwoYykpfWZ1bmN0aW9uIGQ1KGMsbCl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgYT1sP3FjOlNmO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGM/'@;
put 'YygpOmMpLm1hcChkPT5hKGQpKS5maWx0ZXIodTUpfWZ1bmN0aW9uIEd3KC4uLmMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6cmgoMCxjKSxcdTAyNzVmcm9tTmdNb2R1bGU6ITB9fWZ1bmN0aW9uIHJoKGMsLi4ubCl7Y29uc3QgYT1bXSxkPW5ldyBTZXQ7bGV0IGg7Y29uc3QgZj12PT57YS5w'@;
put 'dXNoKHYpfTtyZXR1cm4gTDMobCx2PT57Y29uc3QgTT12O180KE0sZixbXSxkKSYmKGh8fD1bXSxoLnB1c2goTSkpfSksdm9pZCAwIT09aCYmcHYoaCxmKSxhfWZ1bmN0aW9uIHB2KGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0e25nTW9kdWxlOmQscHJvdmlkZXJzOmh9'@;
put 'PWNbYV07TDYoaCxmPT57bChmLGQpfSl9fWZ1bmN0aW9uIF80KGMsbCxhLGQpe2lmKCEoYz1HaShjKSkpcmV0dXJuITE7bGV0IGg9bnVsbCxmPU5vKGMpO2NvbnN0IHY9IWYmJkJzKGMpO2lmKGZ8fHYpe2lmKHYmJiF2LnN0YW5kYWxvbmUpcmV0dXJuITE7aD1jfWVsc2V7Y29uc3QgST1jLm5n'@;
put 'TW9kdWxlO2lmKGY9Tm8oSSksIWYpcmV0dXJuITE7aD1JfWNvbnN0IE09ZC5oYXMoaCk7aWYodil7aWYoTSlyZXR1cm4hMTtpZihkLmFkZChoKSx2LmRlcGVuZGVuY2llcyl7Y29uc3QgST0iZnVuY3Rpb24iPT10eXBlb2Ygdi5kZXBlbmRlbmNpZXM/di5kZXBlbmRlbmNpZXMoKTp2LmRlcGVu'@;
put 'ZGVuY2llcztmb3IoY29uc3QgRyBvZiBJKV80KEcsbCxhLGQpfX1lbHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFNKXtsZXQgRztkLmFkZChoKTt0cnl7TDMoZi5pbXBvcnRzLHJlPT57XzQocmUsbCxhLGQpJiYoR3x8PVtdLEcucHVzaChyZSkpfSl9ZmluYWxseXt9'@;
put 'dm9pZCAwIT09RyYmcHYoRyxsKX1pZighTSl7Y29uc3QgRz1odShoKXx8KCgpPT5uZXcgaCk7bCh7cHJvdmlkZTpoLHVzZUZhY3Rvcnk6RyxkZXBzOkpzfSxoKSxsKHtwcm92aWRlOms2LHVzZVZhbHVlOmgsbXVsdGk6ITB9LGgpLGwoe3Byb3ZpZGU6cjIsdXNlVmFsdWU6KCk9PkNyKGgpLG11'@;
put 'bHRpOiEwfSxoKX1jb25zdCBJPWYucHJvdmlkZXJzO2lmKG51bGwhPUkmJiFNKXtjb25zdCBHPWM7TDYoSSxyZT0+e2wocmUsRyl9KX19fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gTDYoYyxsKXtmb3IobGV0IGEgb2YgYylqYShhKSYmKGE9YS5cdTAyNzVw'@;
put 'cm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/TDYoYSxsKTpsKGEpfWNvbnN0ICR3PVZhKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpWYX0pO2Z1bmN0aW9uIE82KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYkdyBpbiBjfWZ1bmN0aW9uIHhmKGMpe3JldHVybiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IEY2PW5ldyBTdCgiIiksSDM9e30sS3c9e307bGV0IEg2O2Z1bmN0aW9uIE4zKCl7cmV0dXJuIHZvaWQgMD09PUg2JiYoSDY9bmV3IG81KSxINn1jbGFzcyBxbHt9Y2xhc3MgZGQgZXh0ZW5kcyBxbHtnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMu'@;
put 'X2Rlc3Ryb3llZH1jb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigpLHRoaXMucGFyZW50PWEsdGhpcy5zb3VyY2U9ZCx0aGlzLnNjb3Blcz1oLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuX25nT25EZXN0cm95SG9va3M9bmV3IFNldCx0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXSx0aGlzLl9k'@;
put 'ZXN0cm95ZWQ9ITEsZjUobCx2PT50aGlzLnByb2Nlc3NQcm92aWRlcih2KSksdGhpcy5yZWNvcmRzLnNldChPMyxWMyh2b2lkIDAsdGhpcykpLGguaGFzKCJlbnZpcm9ubWVudCIpJiZ0aGlzLnJlY29yZHMuc2V0KHFsLFYzKHZvaWQgMCx0aGlzKSk7Y29uc3QgZj10aGlzLnJlY29yZHMuZ2V0'@;
put 'KEY2KTtudWxsIT1mJiYic3RyaW5nIj09dHlwZW9mIGYudmFsdWUmJnRoaXMuc2NvcGVzLmFkZChmLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChrNixKcyxyYS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVz'@;
put 'dHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7dHJ5e2Zvcihjb25zdCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxs'@;
put 'eXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGwp'@;
put 'LCgpPT50aGlzLnJlbW92ZU9uRGVzdHJveShsKX1ydW5JbkNvbnRleHQobCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBhPW5oKHRoaXMpLGQ9eWwodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e25oKGEpLHlsKGQpfX1nZXQobCxhPSQwLGQ9cmEuRGVmYXVsdCl7aWYo'@;
put 'dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSxsLmhhc093blByb3BlcnR5KFZsKSlyZXR1cm4gbFtWbF0odGhpcyk7ZD1uNShkKTtjb25zdCBmPW5oKHRoaXMpLHY9eWwodm9pZCAwKTt0cnl7aWYoIShkJnJhLlNraXBTZWxmKSl7bGV0IEk9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9'@;
put 'PT1JKXtjb25zdCBHPWZ1bmN0aW9uIHF3KGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMgaW5zdGFuY2VvZiBTdH0obCkmJkZzKGwpO0k9RyYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShHKT9WMyhoNShsKSxIMyk6bnVsbCx0aGlzLnJlY29y'@;
put 'ZHMuc2V0KGwsSSl9aWYobnVsbCE9SSlyZXR1cm4gdGhpcy5oeWRyYXRlKGwsSSl9cmV0dXJuKGQmcmEuU2VsZj9OMygpOnRoaXMucGFyZW50KS5nZXQobCxhPWQmcmEuT3B0aW9uYWwmJmE9PT0kMD9udWxsOmEpfWNhdGNoKE0pe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1NLm5hbWUpe2lm'@;
put 'KChNW09jXT1NW09jXXx8W10pLnVuc2hpZnQoSHIobCkpLGYpdGhyb3cgTTtyZXR1cm4gZnVuY3Rpb24gYTUoYyxsLGEsZCl7Y29uc3QgaD1jW09jXTt0aHJvdyBsW2lsXSYmaC51bnNoaWZ0KGxbaWxdKSxjLm1lc3NhZ2U9ZnVuY3Rpb24gZzQoYyxsLGEsZD1udWxsKXtjPWMmJiJcbiI9PT1j'@;
put 'LmNoYXJBdCgwKSYmIlx1MDI3NSI9PWMuY2hhckF0KDEpP2Muc2xpY2UoMik6YztsZXQgaD1IcihsKTtpZihBcnJheS5pc0FycmF5KGwpKWg9bC5tYXAoSHIpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbCl7bGV0IGY9W107Zm9yKGxldCB2IGluIGwpaWYobC5oYXNP'@;
put 'd25Qcm9wZXJ0eSh2KSl7bGV0IE09bFt2XTtmLnB1c2godisiOiIrKCJzdHJpbmciPT10eXBlb2YgTT9KU09OLnN0cmluZ2lmeShNKTpIcihNKSkpfWg9YHske2Yuam9pbigiLCAiKX19YH1yZXR1cm5gJHthfSR7ZD8iKCIrZCsiKSI6IiJ9WyR7aH1dOiAke2MucmVwbGFjZShIdywiXG4gICIp'@;
put 'fWB9KCJcbiIrYy5tZXNzYWdlLGgsYSxkKSxjLm5nVG9rZW5QYXRoPWgsY1tPY109bnVsbCxjfShNLGwsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IE19ZmluYWxseXt5bCh2KSxuaChmKX19cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7Y29uc3QgbD1fZShudWxs'@;
put 'KSxhPW5oKHRoaXMpLGQ9eWwodm9pZCAwKTt0cnl7Y29uc3QgZj10aGlzLmdldChyMixKcyxyYS5TZWxmKTtmb3IoY29uc3QgdiBvZiBmKXYoKX1maW5hbGx5e25oKGEpLHlsKGQpLF9lKGwpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5r'@;
put 'ZXlzKCkpbC5wdXNoKEhyKGQpKTtyZXR1cm5gUjNJbmplY3Rvclske2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IG5yKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPXhmKGw9R2kobCkpP2w6R2kobCYmbC5w'@;
put 'cm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIE42KGMpe3JldHVybiBPNihjKT9WMyh2b2lkIDAsYy51c2VWYWx1ZSk6VjMoeXYoYyksSDMpfShsKTtpZigheGYobCkmJiEwPT09bC5tdWx0aSl7bGV0IGg9dGhpcy5yZWNvcmRzLmdldChhKTtofHwoaD1WMyh2b2lkIDAsSDMsITApLGguZmFjdG9y'@;
put 'eT0oKT0+cjUoaC5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChhLGgpKSxhPWwsaC5tdWx0aS5wdXNoKGwpfXRoaXMucmVjb3Jkcy5zZXQoYSxkKX1oeWRyYXRlKGwsYSl7Y29uc3QgZD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1IMyYmKGEudmFsdWU9S3csYS52YWx1ZT1hLmZhY3Rv'@;
put 'cnkoKSksIm9iamVjdCI9PXR5cGVvZiBhLnZhbHVlJiZhLnZhbHVlJiZmdW5jdGlvbiBidihjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMubmdPbkRlc3Ryb3l9KGEudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChh'@;
put 'LnZhbHVlKSxhLnZhbHVlfWZpbmFsbHl7X2UoZCl9fWluamVjdGFibGVEZWZJblNjb3BlKGwpe2lmKCFsLnByb3ZpZGVkSW4pcmV0dXJuITE7Y29uc3QgYT1HaShsLnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8iYW55Ij09PWF8fHRoaXMuc2NvcGVzLmhhcyhhKTp0aGlz'@;
put 'LmluamVjdG9yRGVmVHlwZXMuaGFzKGEpfXJlbW92ZU9uRGVzdHJveShsKXtjb25zdCBhPXRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YobCk7LTEhPT1hJiZ0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoYSwxKX19ZnVuY3Rpb24gaDUoYyl7Y29uc3QgbD1GcyhjKSxhPW51bGwhPT1s'@;
put 'P2wuZmFjdG9yeTpodShjKTtpZihudWxsIT09YSlyZXR1cm4gYTtpZihjIGluc3RhbmNlb2YgU3QpdGhyb3cgbmV3IG5yKDIwNCwhMSk7aWYoYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbiB2dihjKXtpZihjLmxlbmd0aD4wKXRocm93IG5ldyBucigyMDQsITEpO2NvbnN0'@;
put 'IGE9ZnVuY3Rpb24genMoYyl7cmV0dXJuIGMmJihjW0NvXXx8Y1tOc10pfHxudWxsfShjKTtyZXR1cm4gbnVsbCE9PWE/KCk9PmEuZmFjdG9yeShjKTooKT0+bmV3IGN9KGMpO3Rocm93IG5ldyBucigyMDQsITEpfWZ1bmN0aW9uIHl2KGMsbCxhKXtsZXQgZDtpZih4ZihjKSl7Y29uc3QgaD1H'@;
put 'aShjKTtyZXR1cm4gaHUoaCl8fGg1KGgpfWlmKE82KGMpKWQ9KCk9PkdpKGMudXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24gbXYoYyl7cmV0dXJuISghY3x8IWMudXNlRmFjdG9yeSl9KGMpKWQ9KCk9PmMudXNlRmFjdG9yeSguLi5yNShjLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbiBn'@;
put 'dihjKXtyZXR1cm4hKCFjfHwhYy51c2VFeGlzdGluZyl9KGMpKWQ9KCk9PkNyKEdpKGMudXNlRXhpc3RpbmcpKTtlbHNle2NvbnN0IGg9R2koYyYmKGMudXNlQ2xhc3N8fGMucHJvdmlkZSkpO2lmKCFmdW5jdGlvbiBYdyhjKXtyZXR1cm4hIWMuZGVwc30oYykpcmV0dXJuIGh1KGgpfHxoNSho'@;
put 'KTtkPSgpPT5uZXcgaCguLi5yNShjLmRlcHMpKX1yZXR1cm4gZH1mdW5jdGlvbiBWMyhjLGwsYT0hMSl7cmV0dXJue2ZhY3Rvcnk6Yyx2YWx1ZTpsLG11bHRpOmE/W106dm9pZCAwfX1mdW5jdGlvbiBmNShjLGwpe2Zvcihjb25zdCBhIG9mIGMpQXJyYXkuaXNBcnJheShhKT9mNShhLGwpOmEm'@;
put 'JmphKGEpP2Y1KGEuXHUwMjc1cHJvdmlkZXJzLGwpOmwoYSl9ZnVuY3Rpb24gSzAoYyxsKXtjIGluc3RhbmNlb2YgZGQmJmMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3QgZD1uaChjKSxoPXlsKHZvaWQgMCk7dHJ5e3JldHVybiBsKCl9ZmluYWxseXtuaChkKSx5bChoKX19ZnVuY3Rpb24g'@;
put 'X3YoKXtyZXR1cm4gdm9pZCAwIT09dDUoKXx8bnVsbCE9ZnVuY3Rpb24gTncoKXtyZXR1cm4gUjN9KCl9Y29uc3QgajY9RnVuY3Rpb247Y29uc3QgQmw9MCxYaT0xLFdhPTIsZGM9MyxGYz00LG5jPTUsUWM9NixYMD03LHNsPTgsaGM9OSxPMT0xMCx2cz0xMSxBZj0xMixDND0xMyxyMD0xNCxq'@;
put 'bD0xNSxTND0xNixrZj0xNyxoZD0xOCx5MD0xOSxvMj0yMCxsMj0yMSxwNT0yMixEZj0yMyxfcz0yNSx6Nj0xLGZ1PTcsQjM9OSxmYz0xMDt2YXIgZzU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuSGFzVHJhbnNwbGFudGVkVmlld3M9Ml09Ikhhc1RyYW5zcGxh'@;
put 'bnRlZFZpZXdzIixjfShnNXx8e30pO2Z1bmN0aW9uIEx1KGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbejZdfWZ1bmN0aW9uIE91KGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYhMD09PWNbejZdfWZ1bmN0aW9uIGV1KGMpe3JldHVybiEhKDQmYy5m'@;
put 'bGFncyl9ZnVuY3Rpb24gSWYoYyl7cmV0dXJuIGMuY29tcG9uZW50T2Zmc2V0Pi0xfWZ1bmN0aW9uIHEwKGMpe3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gSGMoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHg0KGMpe3JldHVybiEhKDUxMiZjW1dhXSl9Y2xhc3MgYVZ7Y29u'@;
put 'c3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRoaXMuY3VycmVudFZhbHVlPWEsdGhpcy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gS0EoYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZhbHVlVG9JbnB1'@;
put 'dFNpZ25hbChsLGQpOmNbYV09ZH1mdW5jdGlvbiBibCgpe3JldHVybiBYQX1mdW5jdGlvbiBYQShjKXtyZXR1cm4gYy50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKGMuc2V0SW5wdXQ9b1YpLHNWfWZ1bmN0aW9uIHNWKCl7Y29uc3QgYz1KQSh0aGlzKSxsPWM/LmN1cnJlbnQ7aWYobCl7'@;
put 'Y29uc3QgYT1jLnByZXZpb3VzO2lmKGE9PT1rMCljLnByZXZpb3VzPWw7ZWxzZSBmb3IobGV0IGQgaW4gbClhW2RdPWxbZF07Yy5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhsKX19ZnVuY3Rpb24gb1YoYyxsLGEsZCxoKXtjb25zdCBmPXRoaXMuZGVjbGFyZWRJbnB1dHNbZF0sdj1K'@;
put 'QShjKXx8ZnVuY3Rpb24gbFYoYyxsKXtyZXR1cm4gY1txQV09bH0oYyx7cHJldmlvdXM6azAsY3VycmVudDpudWxsfSksTT12LmN1cnJlbnR8fCh2LmN1cnJlbnQ9e30pLEk9di5wcmV2aW91cyxHPUlbZl07TVtmXT1uZXcgYVYoRyYmRy5jdXJyZW50VmFsdWUsYSxJPT09azApLEtBKGMsbCxo'@;
put 'LGEpfWJsLm5nSW5oZXJpdD0hMDtjb25zdCBxQT0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gSkEoYyl7cmV0dXJuIGNbcUFdfHxudWxsfWNvbnN0IGgyPWZ1bmN0aW9uKGMsbCxhKXt9O2xldCBlaz0hMTtmdW5jdGlvbiBfbChjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9Y1tC'@;
put 'bF07cmV0dXJuIGN9ZnVuY3Rpb24gbTUoYyxsKXtyZXR1cm4gX2wobFtjXSl9ZnVuY3Rpb24gSTAoYyxsKXtyZXR1cm4gX2wobFtjLmluZGV4XSl9ZnVuY3Rpb24gWTYoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uIEU0KGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gUDEoYyxsKXtj'@;
put 'b25zdCBhPWxbY107cmV0dXJuIEx1KGEpP2E6YVtCbF19ZnVuY3Rpb24gaUMoYyl7cmV0dXJuISgxMjgmfmNbV2FdKX1mdW5jdGlvbiBmMihjLGwpe3JldHVybiBudWxsPT1sP251bGw6Y1tsXX1mdW5jdGlvbiBhQyhjKXtjW2tmXT0wfWZ1bmN0aW9uIGZWKGMpezEwMjQmY1tXYV18fChjW1dh'@;
put 'XXw9MTAyNCxpQyhjKSYmRzYoYykpfWZ1bmN0aW9uIFN2KGMpe3JldHVybiEhKDkyMTYmY1tXYV18fGNbRGZdPy5kaXJ0eSl9ZnVuY3Rpb24gb0MoYyl7Y1tPMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoMSksU3YoYyk/RzYoYyk6NjQmY1tXYV0mJihmdW5jdGlvbiB1Vigp'@;
put 'e3JldHVybiBla30oKT8oY1tXYV18PTEwMjQsRzYoYykpOmNbTzFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCkpfWZ1bmN0aW9uIEc2KGMpe2NbTzFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCk7bGV0IGw9VDQoYyk7Zm9yKDtudWxsIT09bCYmISg4MTky'@;
put 'JmxbV2FdKSYmKGxbV2FdfD04MTkyLGlDKGwpKTspbD1UNChsKX1mdW5jdGlvbiBNdihjLGwpe2lmKCEoMjU2Jn5jW1dhXSkpdGhyb3cgbmV3IG5yKDkxMSwhMSk7bnVsbD09PWNbbDJdJiYoY1tsMl09W10pLGNbbDJdLnB1c2gobCl9ZnVuY3Rpb24gVDQoYyl7Y29uc3QgbD1jW2RjXTtyZXR1'@;
put 'cm4gT3UobCk/bFtkY106bH1jb25zdCB3cz17bEZyYW1lOmxrKG51bGwpLGJpbmRpbmdzRW5hYmxlZDohMCxza2lwSHlkcmF0aW9uUm9vdFROb2RlOm51bGx9O2Z1bmN0aW9uIGlrKCl7cmV0dXJuIHdzLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiB2NSgpe3JldHVybiBudWxsIT09d3Muc2tp'@;
put 'cEh5ZHJhdGlvblJvb3RUTm9kZX1mdW5jdGlvbiBjaSgpe3JldHVybiB3cy5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gc28oKXtyZXR1cm4gd3MubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHd0KGMpe3JldHVybiB3cy5sRnJhbWUuY29udGV4dExWaWV3PWMsY1tzbF19ZnVuY3Rpb24gQ3QoYyl7cmV0'@;
put 'dXJuIHdzLmxGcmFtZS5jb250ZXh0TFZpZXc9bnVsbCxjfWZ1bmN0aW9uIG9sKCl7bGV0IGM9bEMoKTtmb3IoO251bGwhPT1jJiY2ND09PWMudHlwZTspYz1jLnBhcmVudDtyZXR1cm4gY31mdW5jdGlvbiBsQygpe3JldHVybiB3cy5sRnJhbWUuY3VycmVudFROb2RlfWZ1bmN0aW9uIHAyKGMs'@;
put 'bCl7Y29uc3QgYT13cy5sRnJhbWU7YS5jdXJyZW50VE5vZGU9YyxhLmlzUGFyZW50PWx9ZnVuY3Rpb24gY0MoKXtyZXR1cm4gd3MubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIHVDKCl7d3MubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIFIwKCl7Y29uc3QgYz13cy5sRnJhbWU7bGV0IGw9'@;
put 'Yy5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09bCYmKGw9Yy5iaW5kaW5nUm9vdEluZGV4PWMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLGx9ZnVuY3Rpb24gUmYoKXtyZXR1cm4gd3MubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBhaCgpe3JldHVybiB3cy5sRnJhbWUuYmluZGlu'@;
put 'Z0luZGV4Kyt9ZnVuY3Rpb24gTGYoYyl7Y29uc3QgbD13cy5sRnJhbWUsYT1sLmJpbmRpbmdJbmRleDtyZXR1cm4gbC5iaW5kaW5nSW5kZXg9bC5iaW5kaW5nSW5kZXgrYyxhfWZ1bmN0aW9uIFNWKGMsbCl7Y29uc3QgYT13cy5sRnJhbWU7YS5iaW5kaW5nSW5kZXg9YS5iaW5kaW5nUm9vdElu'@;
put 'ZGV4PWMsZEMobCl9ZnVuY3Rpb24gZEMoYyl7d3MubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleD1jfWZ1bmN0aW9uIGhDKGMpe2NvbnN0IGw9d3MubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtyZXR1cm4tMT09PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGZDKCl7cmV0dXJuIHdzLmxG'@;
put 'cmFtZS5jdXJyZW50UXVlcnlJbmRleH1mdW5jdGlvbiBqMyhjKXt3cy5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg9Y31mdW5jdGlvbiBwQyhjKXtjb25zdCBsPWNbWGldO3JldHVybiAyPT09bC50eXBlP2wuZGVjbFROb2RlOjE9PT1sLnR5cGU/Y1tuY106bnVsbH1mdW5jdGlvbiBFdihjLGws'@;
put 'YSl7aWYoYSZyYS5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7Zm9yKDshKGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmcmEuSG9zdHx8KGg9cEMoZiksbnVsbD09PWh8fChmPWZbcjBdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJldHVybiExO2w9aCxjPWZ9Y29uc3QgZD13cy5sRnJhbWU9ejMo'@;
put 'KTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3PWMsITB9ZnVuY3Rpb24gSzYoYyl7Y29uc3QgbD16MygpLGE9Y1tYaV07d3MubEZyYW1lPWwsbC5jdXJyZW50VE5vZGU9YS5maXJzdENoaWxkLGwubFZpZXc9YyxsLnRWaWV3PWEsbC5jb250ZXh0TFZpZXc9YyxsLmJpbmRpbmdJbmRl'@;
put 'eD1hLmJpbmRpbmdTdGFydEluZGV4LGwuaW5JMThuPSExfWZ1bmN0aW9uIHozKCl7Y29uc3QgYz13cy5sRnJhbWUsbD1udWxsPT09Yz9udWxsOmMuY2hpbGQ7cmV0dXJuIG51bGw9PT1sP2xrKGMpOmx9ZnVuY3Rpb24gbGsoYyl7Y29uc3QgbD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6'@;
put 'ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1'@;
put 'cnJlbnRRdWVyeUluZGV4OjAscGFyZW50OmMsY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09YyYmKGMuY2hpbGQ9bCksbH1mdW5jdGlvbiBUdigpe2NvbnN0IGM9d3MubEZyYW1lO3JldHVybiB3cy5sRnJhbWU9Yy5wYXJlbnQsYy5jdXJyZW50VE5vZGU9bnVsbCxjLmxWaWV3'@;
put 'PW51bGwsY31jb25zdCBjaz1UdjtmdW5jdGlvbiB5NSgpe2NvbnN0IGM9VHYoKTtjLmlzUGFyZW50PSEwLGMudFZpZXc9bnVsbCxjLnNlbGVjdGVkSW5kZXg9LTEsYy5jb250ZXh0TFZpZXc9bnVsbCxjLmVsZW1lbnREZXB0aENvdW50PTAsYy5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsYy5j'@;
put 'dXJyZW50TmFtZXNwYWNlPW51bGwsYy5iaW5kaW5nUm9vdEluZGV4PS0xLGMuYmluZGluZ0luZGV4PS0xLGMuY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBGdSgpe3JldHVybiB3cy5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiBBNChjKXt3cy5sRnJhbWUuc2VsZWN0ZWRJbmRl'@;
put 'eD1jfWZ1bmN0aW9uIEpvKCl7Y29uc3QgYz13cy5sRnJhbWU7cmV0dXJuIFk2KGMudFZpZXcsYy5zZWxlY3RlZEluZGV4KX1sZXQgZGs9ITA7ZnVuY3Rpb24gWDYoKXtyZXR1cm4gZGt9ZnVuY3Rpb24gZzIoYyl7ZGs9Y31mdW5jdGlvbiBBdihjLGwpe2ZvcihsZXQgYT1sLmRpcmVjdGl2ZVN0'@;
put 'YXJ0LGQ9bC5kaXJlY3RpdmVFbmQ7YTxkO2ErKyl7Y29uc3QgZj1jLmRhdGFbYV0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDp2LG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpNLG5nQWZ0ZXJWaWV3SW5pdDpJLG5nQWZ0ZXJWaWV3Q2hlY2tlZDpHLG5nT25EZXN0cm95OnJlfT1m'@;
put 'O3YmJihjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKC1hLHYpLE0mJigoYy5jb250ZW50SG9va3M/Pz1bXSkucHVzaChhLE0pLChjLmNvbnRlbnRDaGVja0hvb2tzPz89W10pLnB1c2goYSxNKSksSSYmKGMudmlld0hvb2tzPz89W10pLnB1c2goLWEsSSksRyYmKChjLnZpZXdIb29rcz8/PVtd'@;
put 'KS5wdXNoKGEsRyksKGMudmlld0NoZWNrSG9va3M/Pz1bXSkucHVzaChhLEcpKSxudWxsIT1yZSYmKGMuZGVzdHJveUhvb2tzPz89W10pLnB1c2goYSxyZSl9fWZ1bmN0aW9uIGt2KGMsbCxhKXtoayhjLGwsMyxhKX1mdW5jdGlvbiBEdihjLGwsYSxkKXsoMyZjW1dhXSk9PT1hJiZoayhjLGws'@;
put 'YSxkKX1mdW5jdGlvbiBtQyhjLGwpe2xldCBhPWNbV2FdOygzJmEpPT09bCYmKGEmPTE2MzgzLGErPTEsY1tXYV09YSl9ZnVuY3Rpb24gaGsoYyxsLGEsZCl7Y29uc3QgZj1kPz8tMSx2PWwubGVuZ3RoLTE7bGV0IE09MDtmb3IobGV0IEk9dm9pZCAwIT09ZD82NTUzNSZjW2tmXTowO0k8djtJ'@;
put 'KyspaWYoIm51bWJlciI9PXR5cGVvZiBsW0krMV0pe2lmKE09bFtJXSxudWxsIT1kJiZNPj1kKWJyZWFrfWVsc2UgbFtJXTwwJiYoY1trZl0rPTY1NTM2KSwoTTxmfHwtMT09ZikmJihEVihjLGEsbCxJKSxjW2tmXT0oNDI5NDkwMTc2MCZjW2tmXSkrSSsyKSxJKyt9ZnVuY3Rpb24gZmsoYyxs'@;
put 'KXtoMig0LGMsbCk7Y29uc3QgYT1fZShudWxsKTt0cnl7bC5jYWxsKGMpfWZpbmFsbHl7X2UoYSksaDIoNSxjLGwpfX1mdW5jdGlvbiBEVihjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbV2FdPj4xNDxjW2tmXT4+MTYmJigzJmNbV2FdKT09'@;
put 'PWwmJihjW1dhXSs9MTYzODQsZmsoTSxmKSk6ZmsoTSxmKX1jb25zdCBrND0tMTtjbGFzcyBGMXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9uIEl2'@;
put 'KGMpe3JldHVybiBjIT09azR9ZnVuY3Rpb24gcTYoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gSjYoYyxsKXtsZXQgYT1mdW5jdGlvbiBGVihjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW3IwXSxhLS07cmV0dXJuIGR9bGV0IHlDPSEwO2Z1bmN0aW9uIFJ2KGMpe2Nv'@;
put 'bnN0IGw9eUM7cmV0dXJuIHlDPWMsbH1jb25zdCBMdj0yNTUsYkM9NTtsZXQgSFY9MDtjb25zdCBtMj17fTtmdW5jdGlvbiBPdihjLGwpe2NvbnN0IGE9UHYoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW1hpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRleD1s'@;
put 'Lmxlbmd0aCxfQyhkLmRhdGEsYyksX0MobCxudWxsKSxfQyhkLmJsdWVwcmludCxudWxsKSk7Y29uc3QgaD1iNShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKEl2KGgpKXtjb25zdCB2PXE2KGgpLE09SjYoaCxsKSxJPU1bWGldLmRhdGE7Zm9yKGxldCBHPTA7Rzw4O0crKylsW2YrR109TVt2'@;
put 'K0ddfElbditHXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBfQyhjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gUHYoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmluamVjdG9ySW5k'@;
put 'ZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gYjUoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9bDtmb3IoO251'@;
put 'bGwhPT1oOyl7aWYoZD1vaChoKSxudWxsPT09ZClyZXR1cm4gazQ7aWYoYSsrLGg9aFtyMF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gazR9ZnVuY3Rpb24gcGQoYyxsLGEpeyFmdW5jdGlvbiBOVihjLGwsYSl7bGV0IGQ7InN0cmlu'@;
put 'ZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFzT3duUHJvcGVydHkoTGMpJiYoZD1hW0xjXSksbnVsbD09ZCYmKGQ9YVtMY109SFYrKyk7Y29uc3QgaD1kJkx2O2wuZGF0YVtjKyhoPj5iQyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gcGsoYyxsLGEpe2lmKGEmcmEuT3B0'@;
put 'aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7U28oKX1mdW5jdGlvbiBzaChjLGwsYSxkKXtpZihhJnJhLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKHJhLlNlbGZ8cmEuSG9zdCkpKXtjb25zdCBoPWNbaGNdLGY9eWwodm9pZCAwKTt0cnl7cmV0dXJuIGg/aC5nZXQobCxk'@;
put 'LGEmcmEuT3B0aW9uYWwpOnRoKGwsZCxhJnJhLk9wdGlvbmFsKX1maW5hbGx5e3lsKGYpfX1yZXR1cm4gcGsoZCwwLGEpfWZ1bmN0aW9uIGdrKGMsbCxhLGQ9cmEuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW1dhXSYmIShkJnJhLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIFoz'@;
put 'KGMsbCxhLGQsaCl7bGV0IGY9Yyx2PWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PXYmJjIwNDgmdltXYV0mJiEoNTEyJnZbV2FdKTspe2NvbnN0IE09XzUoZix2LGEsZHxyYS5TZWxmLG0yKTtpZihNIT09bTIpcmV0dXJuIE07bGV0IEk9Zi5wYXJlbnQ7aWYoIUkpe2NvbnN0IEc9dltvMl07aWYo'@;
put 'Ryl7Y29uc3QgcmU9Ry5nZXQoYSxtMixkKTtpZihyZSE9PW0yKXJldHVybiByZX1JPW9oKHYpLHY9dltyMF19Zj1JfXJldHVybiBofShjLGwsYSxkLG0yKTtpZih2IT09bTIpcmV0dXJuIHZ9Y29uc3QgZj1fNShjLGwsYSxkLG0yKTtpZihmIT09bTIpcmV0dXJuIGZ9cmV0dXJuIHNoKGwsYSxk'@;
put 'LGgpfWZ1bmN0aW9uIF81KGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiB4YyhjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoTGMpP2NbTGNdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/'@;
put 'bD49MD9sJkx2OkowOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtpZighRXYobCxjLGQpKXJldHVybiBkJnJhLkhvc3Q/cGsoaCwwLGQpOnNoKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVsbCE9dnx8ZCZyYS5PcHRpb25hbClyZXR1cm4gdjtTbygpfWZpbmFsbHl7Y2so'@;
put 'KX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCB2PW51bGwsTT1QdihjLGwpLEk9azQsRz1kJnJhLkhvc3Q/bFtqbF1bbmNdOm51bGw7Zm9yKCgtMT09PU18fGQmcmEuU2tpcFNlbGYpJiYoST0tMT09PU0/YjUoYyxsKTpsW00rOF0sSSE9PWs0JiZDNShkLCExKT8odj1sW1hpXSxN'@;
put 'PXE2KEkpLGw9SjYoSSxsKSk6TT0tMSk7LTEhPT1NOyl7Y29uc3QgcmU9bFtYaV07aWYodzUoZixNLHJlLmRhdGEpKXtjb25zdCB1ZT1tayhNLGwsYSx2LGQsRyk7aWYodWUhPT1tMilyZXR1cm4gdWV9ST1sW00rOF0sSSE9PWs0JiZDNShkLGxbWGldLmRhdGFbTSs4XT09PUcpJiZ3NShmLE0s'@;
put 'bCk/KHY9cmUsTT1xNihJKSxsPUo2KEksbCkpOk09LTF9fXJldHVybiBofWZ1bmN0aW9uIG1rKGMsbCxhLGQsaCxmKXtjb25zdCB2PWxbWGldLE09di5kYXRhW2MrOF0scmU9RnYoTSx2LGEsbnVsbD09ZD9JZihNKSYmeUM6ZCE9diYmISEoMyZNLnR5cGUpLGgmcmEuSG9zdCYmZj09PU0pO3Jl'@;
put 'dHVybiBudWxsIT09cmU/RDQobCx2LHJlLE0pOm0yfWZ1bmN0aW9uIEZ2KGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixJPWMuZGlyZWN0aXZlU3RhcnQscmU9Zj4+MjAseWU9aD9NK3JlOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgRWU9'@;
put 'ZD9NOk0rcmU7RWU8eWU7RWUrKyl7Y29uc3QgQmU9dltFZV07aWYoRWU8SSYmYT09PUJlfHxFZT49SSYmQmUudHlwZT09PWEpcmV0dXJuIEVlfWlmKGgpe2NvbnN0IEVlPXZbSV07aWYoRWUmJkhjKEVlKSYmRWUudHlwZT09PWEpcmV0dXJuIEl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDQoYyxs'@;
put 'LGEsZCl7bGV0IGg9Y1thXTtjb25zdCBmPWwuZGF0YTtpZihmdW5jdGlvbiBJVihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEYxfShoKSl7Y29uc3Qgdj1oO3YucmVzb2x2aW5nJiZmdW5jdGlvbiBHMChjLGwpe3Rocm93IGwmJmwuam9pbigiID4gIiksbmV3IG5yKC0yMDAsYyl9KGZ1bmN0aW9u'@;
put 'IGthKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFtZXx8Yy50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6U2EoYyl9KGZbYV0pKTtjb25zdCBNPVJ2'@;
put 'KHYuY2FuU2VlVmlld1Byb3ZpZGVycyk7di5yZXNvbHZpbmc9ITA7Y29uc3QgRz12LmluamVjdEltcGw/eWwodi5pbmplY3RJbXBsKTpudWxsO0V2KGMsZCxyYS5EZWZhdWx0KTt0cnl7aD1jW2FdPXYuZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVj'@;
put 'dGl2ZVN0YXJ0JiZmdW5jdGlvbiBrVihjLGwsYSl7Y29uc3R7bmdPbkNoYW5nZXM6ZCxuZ09uSW5pdDpoLG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IHY9WEEobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsdiksKGEucHJlT3JkZXJDaGVja0hvb2tz'@;
put 'Pz89W10pLnB1c2goYyx2KX1oJiYoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goMC1jLGgpLGYmJigoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PUcmJnlsKEcp'@;
put 'LFJ2KE0pLHYucmVzb2x2aW5nPSExLGNrKCl9fXJldHVybiBofWZ1bmN0aW9uIHc1KGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PmJDKV0mMTw8Yyl9ZnVuY3Rpb24gQzUoYyxsKXtyZXR1cm4hKGMmcmEuU2VsZnx8YyZyYS5Ib3N0JiZsKX1jbGFzcyBIdXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMu'@;
put 'X3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVybiBnayh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxsLG41KGQpLGEpfX1mdW5jdGlvbiBKMCgpe3JldHVybiBuZXcgSHUob2woKSxjaSgpKX1mdW5jdGlvbiBVbyhjKXtyZXR1cm4gSG8oKCk9Pntjb25zdCBsPWMucHJvdG90'@;
put 'eXBlLmNvbnN0cnVjdG9yLGE9bFtqaV18fFBmKGwpLGQ9T2JqZWN0LnByb3RvdHlwZTtsZXQgaD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbamldfHxQZihoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9i'@;
put 'amVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9KX1mdW5jdGlvbiBQZihjKXtyZXR1cm4gdmwoYyk/KCk9Pntjb25zdCBsPVBmKEdpKGMpKTtyZXR1cm4gbCYmbCgpfTpodShjKX1mdW5jdGlvbiBvaChjKXtjb25zdCBsPWNbWGldLGE9bC50eXBlO3JldHVybiAyPT09YT9s'@;
put 'LmRlY2xUTm9kZToxPT09YT9jW25jXTpudWxsfWZ1bmN0aW9uIEZmKGMpe3JldHVybiBmdW5jdGlvbiBWVihjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVu'@;
put 'Z3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYobDUoZikpYnJlYWs7aWYoMD09PWYpaCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9'@;
put 'fX1yZXR1cm4gbnVsbH0ob2woKSxjKX1mdW5jdGlvbiBFQyhjLGw9bnVsbCxhPW51bGwsZCl7Y29uc3QgaD1SNChjLGwsYSxkKTtyZXR1cm4gaC5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxofWZ1bmN0aW9uIFI0KGMsbD1udWxsLGE9bnVsbCxkLGg9bmV3IFNldCl7Y29uc3QgZj1b'@;
put 'YXx8SnMsR3coYyldO3JldHVybiBkPWR8fCgib2JqZWN0Ij09dHlwZW9mIGM/dm9pZCAwOkhyKGMpKSxuZXcgZGQoZixsfHxOMygpLGR8fG51bGwsaCl9bGV0IERvPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuVEhST1dfSUZfTk9UX0ZPVU5EPSQwfXN0YXRpY3t0aGlzLk5VTEw9bmV3IG81'@;
put 'fXN0YXRpYyBjcmVhdGUoYSxkKXtpZihBcnJheS5pc0FycmF5KGEpKXJldHVybiBFQyh7bmFtZToiIn0sZCxhLCIiKTt7Y29uc3QgaD1hLm5hbWU/PyIiO3JldHVybiBFQyh7bmFtZTpofSxhLnBhcmVudCxhLnByb3ZpZGVycyxoKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46'@;
put 'Yyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PkNyKE8zKX0pfXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPS0xfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geDUoYyl7cmV0dXJuIGMubmdPcmlnaW5hbEVycm9yfWNsYXNzIHYye2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1j'@;
put 'b25zb2xlfWhhbmRsZUVycm9yKGwpe2NvbnN0IGE9dGhpcy5fZmluZE9yaWdpbmFsRXJyb3IobCk7dGhpcy5fY29uc29sZS5lcnJvcigiRVJST1IiLGwpLGEmJnRoaXMuX2NvbnNvbGUuZXJyb3IoIk9SSUdJTkFMIEVSUk9SIixhKX1fZmluZE9yaWdpbmFsRXJyb3IobCl7bGV0IGE9bCYmeDUo'@;
put 'bCk7Zm9yKDthJiZ4NShhKTspYT14NShhKTtyZXR1cm4gYXx8bnVsbH19Y29uc3QgX2s9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5oaSh2MikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7bGV0IEU1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX19OR19F'@;
put 'TEVNRU5UX0lEX189WTN9c3RhdGlje3RoaXMuX19OR19FTlZfSURfXz1hPT5hfX1yZXR1cm4gY30pKCk7Y2xhc3MgVzMgZXh0ZW5kcyBFNXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2xWaWV3PWx9b25EZXN0cm95KGwpe3JldHVybiBNdih0aGlzLl9sVmlldyxsKSwoKT0+ZnVuY3Rp'@;
put 'b24geHYoYyxsKXtpZihudWxsPT09Y1tsMl0pcmV0dXJuO2NvbnN0IGE9Y1tsMl0uaW5kZXhPZihsKTstMSE9PWEmJmNbbDJdLnNwbGljZShhLDEpfSh0aGlzLl9sVmlldyxsKX19ZnVuY3Rpb24gWTMoKXtyZXR1cm4gbmV3IFczKGNpKCkpfWZ1bmN0aW9uIHpWKCl7cmV0dXJuIEw0KG9sKCks'@;
put 'Y2koKSl9ZnVuY3Rpb24gTDQoYyxsKXtyZXR1cm4gbmV3IFFpKEkwKGMsbCkpfWxldCBRaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubmF0aXZlRWxlbWVudD1hfXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPXpWfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQ2soYyl7'@;
put 'cmV0dXJuIGMgaW5zdGFuY2VvZiBRaT9jLm5hdGl2ZUVsZW1lbnQ6Y31mdW5jdGlvbiBUQyhjKXtyZXR1cm4gbD0+e3NldFRpbWVvdXQoYyx2b2lkIDAsbCl9fWNvbnN0IEtyPWNsYXNzIFVWIGV4dGVuZHMgR257Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLmRlc3Ryb3lSZWY9dm9p'@;
put 'ZCAwLHRoaXMuX19pc0FzeW5jPWwsX3YoKSYmKHRoaXMuZGVzdHJveVJlZj1oaShFNSx7b3B0aW9uYWw6ITB9KT8/dm9pZCAwKX1lbWl0KGwpe2NvbnN0IGE9X2UobnVsbCk7dHJ5e3N1cGVyLm5leHQobCl9ZmluYWxseXtfZShhKX19c3Vic2NyaWJlKGwsYSxkKXtsZXQgaD1sLGY9YXx8KCgp'@;
put 'PT5udWxsKSx2PWQ7aWYobCYmIm9iamVjdCI9PXR5cGVvZiBsKXtjb25zdCBJPWw7aD1JLm5leHQ/LmJpbmQoSSksZj1JLmVycm9yPy5iaW5kKEkpLHY9SS5jb21wbGV0ZT8uYmluZChJKX10aGlzLl9faXNBc3luYyYmKGY9VEMoZiksaCYmKGg9VEMoaCkpLHYmJih2PVRDKHYpKSk7Y29uc3Qg'@;
put 'TT1zdXBlci5zdWJzY3JpYmUoe25leHQ6aCxlcnJvcjpmLGNvbXBsZXRlOnZ9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIEp0JiZsLmFkZChNKSxNfX07ZnVuY3Rpb24gWlYoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgbGh7Z2V0IGNoYW5nZXMoKXtyZXR1'@;
put 'cm4gdGhpcy5fY2hhbmdlcz8/PW5ldyBLcn1jb25zdHJ1Y3RvcihsPSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT12b2lkIDAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdl'@;
put 'cz12b2lkIDAsdGhpcy5sZW5ndGg9MCx0aGlzLmZpcnN0PXZvaWQgMCx0aGlzLmxhc3Q9dm9pZCAwO2NvbnN0IGE9bGgucHJvdG90eXBlO2FbU3ltYm9sLml0ZXJhdG9yXXx8KGFbU3ltYm9sLml0ZXJhdG9yXT1aVil9Z2V0KGwpe3JldHVybiB0aGlzLl9yZXN1bHRzW2xdfW1hcChsKXtyZXR1'@;
put 'cm4gdGhpcy5fcmVzdWx0cy5tYXAobCl9ZmlsdGVyKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcihsKX1maW5kKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQobCl9cmVkdWNlKGwsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGwsYSl9Zm9yRWFjaChsKXt0aGlzLl9y'@;
put 'ZXN1bHRzLmZvckVhY2gobCl9c29tZShsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKGwpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChsLGEpe3RoaXMuZGlydHk9ITE7Y29u'@;
put 'c3QgZD1mdW5jdGlvbiBlMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9uIF9mKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsr'@;
put 'KXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMsZCxhKSkmJih0aGlzLl9yZXN1bHRzPWQsdGhpcy5sZW5ndGg9ZC5sZW5ndGgsdGhpcy5sYXN0PWRbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD1k'@;
put 'WzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVtaXQodGhpcyl9b25EaXJ0eShsKXt0aGlzLl9vbkRpcnR5PWx9c2V0RGlydHko'@;
put 'KXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/LigpfWRlc3Ryb3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9fWZ1bmN0aW9uIEJ2KGMpe3JldHVybiEoMTI4Jn5jLmZsYWdzKX1jb25z'@;
put 'dCBBQz1uZXcgTWFwO2xldCBZVj0wO2NvbnN0IERDPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBOdShjLGwpe0x1KGwpPyhjW0RDXT1sW3kwXSxmdW5jdGlvbiAkVihjKXtBQy5zZXQoY1t5MF0sYyl9KGwpKTpjW0RDXT1sfWZ1bmN0aW9uIGtrKGMpe3JldHVybiBJayhjW0FmXSl9ZnVuY3Rp'@;
put 'b24gRGsoYyl7cmV0dXJuIElrKGNbRmNdKX1mdW5jdGlvbiBJayhjKXtmb3IoO251bGwhPT1jJiYhT3UoYyk7KWM9Y1tGY107cmV0dXJuIGN9bGV0IFJDO2Z1bmN0aW9uIEczKCl7aWYodm9pZCAwIT09UkMpcmV0dXJuIFJDO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50'@;
put 'O3Rocm93IG5ldyBucigyMTAsITEpfWNvbnN0IFp2PW5ldyBTdCgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ZEJ9KSxkQj0ibmciLE5rPW5ldyBTdCgiIiksaXM9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksVms9bmV3'@;
put 'IFN0KCIiKSxENT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkczKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSk7bGV0IGprPSgpPT5udWxsO2Z1bmN0aW9uIEhDKGMsbCxhPSEx'@;
put 'KXtyZXR1cm4gamsoYyxsLGEpfWNvbnN0IFprPW5ldyBTdCgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtsZXQgS3YsWHY7ZnVuY3Rpb24gTDUoYyl7cmV0dXJuIGZ1bmN0aW9uIHpDKCl7aWYodm9pZCAwPT09S3YmJihLdj1udWxsLE50LnRydXN0ZWRUeXBlcykpdHJ5'@;
put 'e0t2PU50LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIiLHtjcmVhdGVIVE1MOmM9PmMsY3JlYXRlU2NyaXB0OmM9PmMsY3JlYXRlU2NyaXB0VVJMOmM9PmN9KX1jYXRjaHt9cmV0dXJuIEt2fSgpPy5jcmVhdGVIVE1MKGMpfHxjfWZ1bmN0aW9uIFVDKCl7aWYodm9pZCAwPT09'@;
put 'WHYmJihYdj1udWxsLE50LnRydXN0ZWRUeXBlcykpdHJ5e1h2PU50LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gWHZ9'@;
put 'ZnVuY3Rpb24gWWsoYyl7cmV0dXJuIFVDKCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gJGsoYyl7cmV0dXJuIFVDKCk/LmNyZWF0ZVNjcmlwdFVSTChjKXx8Y31jbGFzcyBLa3tjb25zdHJ1Y3RvcihsKXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9bH10'@;
put 'b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke2ZhfSlgfX1mdW5jdGlvbiB5MihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEtrP2MuY2hhbmdpbmdU'@;
put 'aGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpjfWZ1bmN0aW9uIEg0KGMsbCl7Y29uc3QgYT1mdW5jdGlvbiBYayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEtrJiZjLmdldFR5cGVOYW1lKCl8fG51bGx9KGMpO2lmKG51bGwhPWEmJmEhPT1sKXtpZigiUmVzb3VyY2VVUkwiPT09YSYmIlVS'@;
put 'TCI9PT1sKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7bH0sIGdvdCBhICR7YX0gKHNlZSAke2ZhfSlgKX1yZXR1cm4gYT09PWx9Y2xhc3MgcWt7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxlbWVudChs'@;
put 'KXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29uc3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhMNShsKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1l'@;
put 'bnQobCk6KGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSxhKX1jYXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIElCe2NvbnN0cnVjdG9yKGwpe3RoaXMuZGVmYXVsdERvYz1sLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3Vt'@;
put 'ZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGEuaW5uZXJIVE1MPUw1KGwpLGF9fWNvbnN0IFJCPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAt'@;
put 'OSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0aW9uIFdDKGMpe3JldHVybihjPVN0cmluZyhjKSkubWF0Y2goUkIpP2M6InVuc2FmZToiK2N9ZnVuY3Rpb24gTmYoYyl7Y29uc3QgbD17fTtmb3IoY29uc3QgYSBvZiBjLnNwbGl0KCIsIikpbFthXT0hMDtyZXR1cm4gbH1m'@;
put 'dW5jdGlvbiBhOCguLi5jKXtjb25zdCBsPXt9O2Zvcihjb25zdCBhIG9mIGMpZm9yKGNvbnN0IGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiYobFtkXT0hMCk7cmV0dXJuIGx9Y29uc3QgUWs9TmYoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxlRD1OZigiY29sZ3JvdXAsZGQsZHQsbGks'@;
put 'cCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLHREPU5mKCJycCxydCIpLFlDPWE4KFFrLGE4KGVELE5mKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290'@;
put 'ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpbnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxhOCh0RCxOZigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxm'@;
put 'b250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGE4KHRELGVEKSksR0M9TmYoImJhY2tncm91bmQsY2l0ZSxo'@;
put 'cmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6aHJlZiIpLG5EPWE4KEdDLE5mKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNw'@;
put 'YW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRl'@;
put 'ZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUs'@;
put 'dXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxOZigiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRy'@;
put 'b2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEt'@;
put 'aW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIs'@;
put 'YXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNv'@;
put 'cnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSksTEI9TmYoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIHJEe2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVD'@;
put 'aGlsZHJlbihsKXtsZXQgYT1sLmZpcnN0Q2hpbGQsZD0hMCxoPVtdO2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2Fu'@;
put 'aXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZCloLnB1c2goYSksYT1GQihhKTtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBmPVBCKGEpO2lmKGYpe2E9ZjticmVha31hPWgucG9wKCl9cmV0dXJuIHRo'@;
put 'aXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudChsKXtjb25zdCBhPWlEKGwpLnRvTG93ZXJDYXNlKCk7aWYoIVlDLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhTEIuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMu'@;
put 'YnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZC5pdGVtKGgpLHY9Zi5uYW1lLE09di50b0xvd2VyQ2FzZSgpO2lmKCFuRC5oYXNPd25Qcm9wZXJ0eShNKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGlu'@;
put 'dWV9bGV0IEk9Zi52YWx1ZTtHQ1tNXSYmKEk9V0MoSSkpLHRoaXMuYnVmLnB1c2goIiAiLHYsJz0iJyxzRChJKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPWlEKGwpLnRvTG93ZXJDYXNlKCk7WUMuaGFzT3duUHJvcGVydHkoYSkmJiFR'@;
put 'ay5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChhKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKGwpe3RoaXMuYnVmLnB1c2goc0QobCkpfX1mdW5jdGlvbiBQQihjKXtjb25zdCBsPWMubmV4dFNpYmxpbmc7aWYobCYmYyE9PWwucHJldmlv'@;
put 'dXNTaWJsaW5nKXRocm93IGFEKGwpO3JldHVybiBsfWZ1bmN0aW9uIEZCKGMpe2NvbnN0IGw9Yy5maXJzdENoaWxkO2lmKGwmJmZ1bmN0aW9uIE9CKGMsbCl7cmV0dXJuKGMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpIT09'@;
put 'Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll9KGMsbCkpdGhyb3cgYUQobCk7cmV0dXJuIGx9ZnVuY3Rpb24gaUQoYyl7Y29uc3QgbD1jLm5vZGVOYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbD9sOiJGT1JNIn1mdW5jdGlvbiBhRChjKXtyZXR1cm4gbmV3IEVycm9yKGBG'@;
put 'YWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHtjLm91dGVySFRNTH1gKX1jb25zdCBIQj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csTkI9LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIHNEKGMpe3JldHVybiBjLnJlcGxh'@;
put 'Y2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKEhCLGZ1bmN0aW9uKGwpe3JldHVybiImIyIrKDEwMjQqKGwuY2hhckNvZGVBdCgwKS01NTI5NikrKGwuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoTkIsZnVuY3Rpb24obCl7cmV0dXJuIiYjIitsLmNoYXJDb2RlQXQo'@;
put 'MCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9bGV0IHF2O2Z1bmN0aW9uICRDKGMpe3JldHVybiJjb250ZW50ImluIGMmJmZ1bmN0aW9uIEJCKGMpe3JldHVybiBjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT1jLm5v'@;
put 'ZGVOYW1lfShjKT9jLmNvbnRlbnQ6bnVsbH12YXIgUDU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuSFRNTD0xXT0iSFRNTCIsY1tjLlNUWUxFPTJdPSJTVFlMRSIsY1tjLlNDUklQVD0zXT0iU0NSSVBUIixjW2MuVVJMPTRdPSJVUkwiLGNbYy5SRVNPVVJDRV9V'@;
put 'Ukw9NV09IlJFU09VUkNFX1VSTCIsY30oUDV8fHt9KTtmdW5jdGlvbiBWNChjKXtjb25zdCBsPXM4KCk7cmV0dXJuIGw/WWsobC5zYW5pdGl6ZShQNS5IVE1MLGMpfHwiIik6SDQoYywiSFRNTCIpP1lrKHkyKGMpKTpmdW5jdGlvbiBWQihjLGwpe2xldCBhPW51bGw7dHJ5e3F2PXF2fHxmdW5j'@;
put 'dGlvbiBaQyhjKXtjb25zdCBsPW5ldyBJQihjKTtyZXR1cm4gZnVuY3Rpb24gSmsoKXt0cnl7cmV0dXJuISEobmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhMNSgiIiksInRleHQvaHRtbCIpfWNhdGNoe3JldHVybiExfX0oKT9uZXcgcWsobCk6bH0oYyk7bGV0IGQ9bD9T'@;
put 'dHJpbmcobCk6IiI7YT1xdi5nZXRJbmVydEJvZHlFbGVtZW50KGQpO2xldCBoPTUsZj1kO2Rve2lmKDA9PT1oKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtoLS0sZD1mLGY9YS5pbm5lckhUTUwsYT1xdi5n'@;
put 'ZXRJbmVydEJvZHlFbGVtZW50KGQpfXdoaWxlKGQhPT1mKTtyZXR1cm4gTDUoKG5ldyByRCkuc2FuaXRpemVDaGlsZHJlbigkQyhhKXx8YSkpfWZpbmFsbHl7aWYoYSl7Y29uc3QgZD0kQyhhKXx8YTtmb3IoO2QuZmlyc3RDaGlsZDspZC5yZW1vdmVDaGlsZChkLmZpcnN0Q2hpbGQpfX19KEcz'@;
put 'KCksU2EoYykpfWZ1bmN0aW9uIEtDKGMpe2NvbnN0IGw9czgoKTtyZXR1cm4gbD9sLnNhbml0aXplKFA1LlVSTCxjKXx8IiI6SDQoYywiVVJMIik/eTIoYyk6V0MoU2EoYykpfWZ1bmN0aW9uIG9EKGMpe2NvbnN0IGw9czgoKTtpZihsKXJldHVybiAkayhsLnNhbml0aXplKFA1LlJFU09VUkNF'@;
put 'X1VSTCxjKXx8IiIpO2lmKEg0KGMsIlJlc291cmNlVVJMIikpcmV0dXJuICRrKHkyKGMpKTt0aHJvdyBuZXcgbnIoOTA0LCExKX1mdW5jdGlvbiBzOCgpe2NvbnN0IGM9Y2koKTtyZXR1cm4gYyYmY1tPMV0uc2FuaXRpemVyfWNvbnN0IFlCPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2cs'@;
put 'R0I9Lyg8fD4pL2csJEI9Ilx1MjAwYiQxXHUyMDBiIjtmdW5jdGlvbiB0UyhjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIEszKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gSDEoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj9j'@;
put 'KCk6Y312YXIgWDM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsY1tjLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsY30oWDN8fHt9KTtsZXQgblM7ZnVuY3Rpb24gclMoYyxsKXtyZXR1cm4gblMoYyxsKX1mdW5jdGlvbiBINShjLGwsYSxkLGgpe2lmKG51'@;
put 'bGwhPWQpe2xldCBmLHY9ITE7T3UoZCk/Zj1kOkx1KGQpJiYodj0hMCxkPWRbQmxdKTtjb25zdCBNPV9sKGQpOzA9PT1jJiZudWxsIT09YT9udWxsPT1oP255KGwsYSxNKTpaNChsLGEsTSxofHxudWxsLCEwKToxPT09YyYmbnVsbCE9PWE/WjQobCxhLE0saHx8bnVsbCwhMCk6Mj09PWM/ZnVu'@;
put 'Y3Rpb24gZDgoYyxsLGEpe2NvbnN0IGQ9cTMoYyxsKTtkJiZmdW5jdGlvbiBsOChjLGwsYSxkKXtjLnJlbW92ZUNoaWxkKGwsYSxkKX0oYyxkLGwsYSl9KGwsTSx2KTozPT09YyYmbC5kZXN0cm95Tm9kZShNKSxudWxsIT1mJiZmdW5jdGlvbiBzaihjLGwsYSxkLGgpe2NvbnN0IGY9YVtmdV07'@;
put 'ZiE9PV9sKGEpJiZINShsLGMsZCxmLGgpO2ZvcihsZXQgTT1mYztNPGEubGVuZ3RoO00rKyl7Y29uc3QgST1hW01dO3J5KElbWGldLEksYyxsLGQsZil9fShsLGMsZixhLGgpfX1mdW5jdGlvbiBhUyhjLGwpe3JldHVybiBjLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gRjUoYyl7cmV0dXJuIGMu'@;
put 'cmVwbGFjZShZQixsPT5sLnJlcGxhY2UoR0IsJEIpKX0obCkpfWZ1bmN0aW9uIHo0KGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gbUQoYyxsKXtsW08xXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSxyeShjLGwsbFt2c10sMixudWxsLG51'@;
put 'bGwpfWZ1bmN0aW9uIG9TKGMsbCl7Y29uc3QgYT1jW0IzXSxkPWEuaW5kZXhPZihsKTthLnNwbGljZShkLDEpfWZ1bmN0aW9uIG84KGMsbCl7aWYoYy5sZW5ndGg8PWZjKXJldHVybjtjb25zdCBhPWZjK2wsZD1jW2FdO2lmKGQpe2NvbnN0IGg9ZFtTNF07bnVsbCE9PWgmJmghPT1jJiZvUyho'@;
put 'LGQpLGw+MCYmKGNbYS0xXVtGY109ZFtGY10pO2NvbnN0IGY9SXUoYyxmYytsKTshZnVuY3Rpb24gZ0QoYyxsKXttRChjLGwpLGxbQmxdPW51bGwsbFtuY109bnVsbH0oZFtYaV0sZCk7Y29uc3Qgdj1mW2hkXTtudWxsIT09diYmdi5kZXRhY2hWaWV3KGZbWGldKSxkW2RjXT1udWxsLGRbRmNd'@;
put 'PW51bGwsZFtXYV0mPS0xMjl9cmV0dXJuIGR9ZnVuY3Rpb24gVTQoYyxsKXtpZighKDI1NiZsW1dhXSkpe2NvbnN0IGE9bFt2c107YS5kZXN0cm95Tm9kZSYmcnkoYyxsLGEsMyxudWxsLG51bGwpLGZ1bmN0aW9uIG5qKGMpe2xldCBsPWNbQWZdO2lmKCFsKXJldHVybiBsUyhjW1hpXSxjKTtm'@;
put 'b3IoO2w7KXtsZXQgYT1udWxsO2lmKEx1KGwpKWE9bFtBZl07ZWxzZXtjb25zdCBkPWxbZmNdO2QmJihhPWQpfWlmKCFhKXtmb3IoO2wmJiFsW0ZjXSYmbCE9PWM7KUx1KGwpJiZsUyhsW1hpXSxsKSxsPWxbZGNdO251bGw9PT1sJiYobD1jKSxMdShsKSYmbFMobFtYaV0sbCksYT1sJiZsW0Zj'@;
put 'XX1sPWF9fShsKX19ZnVuY3Rpb24gbFMoYyxsKXtpZigyNTYmbFtXYV0pcmV0dXJuO2NvbnN0IGE9X2UobnVsbCk7dHJ5e2xbV2FdJj0tMTI5LGxbV2FdfD0yNTYsbFtEZl0mJmZ1bmN0aW9uIEEoYyl7aWYod2UoYyksbGUoYykpZm9yKGxldCBsPTA7bDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7'@;
put 'bCsrKW5lKGMucHJvZHVjZXJOb2RlW2xdLGMucHJvZHVjZXJJbmRleE9mVGhpc1tsXSk7Yy5wcm9kdWNlck5vZGUubGVuZ3RoPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24ubGVuZ3RoPWMucHJvZHVjZXJJbmRleE9mVGhpcy5sZW5ndGg9MCxjLmxpdmVDb25zdW1lck5vZGUmJihjLmxpdmVD'@;
put 'b25zdW1lck5vZGUubGVuZ3RoPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXMubGVuZ3RoPTApfShsW0RmXSksZnVuY3Rpb24gaWooYyxsKXtsZXQgYTtpZihudWxsIT1jJiZudWxsIT0oYT1jLmRlc3Ryb3lIb29rcykpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKXtjb25zdCBoPWxbYVtk'@;
put 'XV07aWYoIShoIGluc3RhbmNlb2YgRjEpKXtjb25zdCBmPWFbZCsxXTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7dis9Mil7Y29uc3QgTT1oW2Zbdl1dLEk9Zlt2KzFdO2gyKDQsTSxJKTt0cnl7SS5jYWxsKE0pfWZpbmFsbHl7aDIoNSxNLEkpfX1lbHNle2gy'@;
put 'KDQsaCxmKTt0cnl7Zi5jYWxsKGgpfWZpbmFsbHl7aDIoNSxoLGYpfX19fX0oYyxsKSxmdW5jdGlvbiB2RChjLGwpe2NvbnN0IGE9Yy5jbGVhbnVwLGQ9bFtYMF07aWYobnVsbCE9PWEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aC0xO2YrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBhW2ZdKXtjb25z'@;
put 'dCB2PWFbZiszXTt2Pj0wP2Rbdl0oKTpkWy12XS51bnN1YnNjcmliZSgpLGYrPTJ9ZWxzZSBhW2ZdLmNhbGwoZFthW2YrMV1dKTtudWxsIT09ZCYmKGxbWDBdPW51bGwpO2NvbnN0IGg9bFtsMl07aWYobnVsbCE9PWgpe2xbbDJdPW51bGw7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspKDAs'@;
put 'aFtmXSkoKX19KGMsbCksMT09PWxbWGldLnR5cGUmJmxbdnNdLmRlc3Ryb3koKTtjb25zdCBkPWxbUzRdO2lmKG51bGwhPT1kJiZPdShsW2RjXSkpe2QhPT1sW2RjXSYmb1MoZCxsKTtjb25zdCBoPWxbaGRdO251bGwhPT1oJiZoLmRldGFjaFZpZXcoYyl9IWZ1bmN0aW9uIEtWKGMpe0FDLmRl'@;
put 'bGV0ZShjW3kwXSl9KGwpfWZpbmFsbHl7X2UoYSl9fWZ1bmN0aW9uIHR5KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gY1MoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtCbF07e2NvbnN0e2NvbXBvbmVu'@;
put 'dE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRpb246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PXFvLk5vbmV8fGY9PT1xby5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gSTAoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWjQoYyxsLGEs'@;
put 'ZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBueShjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIHlEKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WjQoYyxsLGEsZCxoKTpueShjLGwsYSl9ZnVuY3Rpb24gcTMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwpfWZ1'@;
put 'bmN0aW9uIHU4KGMsbCxhKXtyZXR1cm4gSjMoYyxsLGEpfWxldCBoUyxKMz1mdW5jdGlvbiBkUyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9JMChjLGEpOm51bGx9O2Z1bmN0aW9uIHMwKGMsbCxhLGQpe2NvbnN0IGg9dHkoYyxkLGwpLGY9bFt2c10sTT11OChkLnBhcmVudHx8bFtuY10sZCxs'@;
put 'KTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCBJPTA7STxhLmxlbmd0aDtJKyspeUQoZixoLGFbSV0sTSwhMSk7ZWxzZSB5RChmLGgsYSxNLCExKTt2b2lkIDAhPT1oUyYmaFMoZixkLGwsYSxoKX1mdW5jdGlvbiBRMyhjLGwpe2lmKG51bGwhPT1sKXtjb25zdCBhPWwu'@;
put 'dHlwZTtpZigzJmEpcmV0dXJuIEkwKGwsYyk7aWYoNCZhKXJldHVybiBwUygtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gUTMoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBPdShoKT9wUygtMSxoKTpfbChoKX19aWYoMzIm'@;
put 'YSlyZXR1cm4gclMobCxjKSgpfHxfbChjW2wuaW5kZXhdKTt7Y29uc3QgZD1iRChjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06UTMoVDQoY1tqbF0pLGQpOlEzKGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gYkQoYyxsKXtyZXR1cm4gbnVsbCE9PWw/'@;
put 'Y1tqbF1bbmNdLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIHBTKGMsbCl7Y29uc3QgYT1mYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtYaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gUTMoZCxoKX1yZXR1cm4gbFtmdV19ZnVuY3Rp'@;
put 'b24gZ1MoYyxsLGEsZCxoLGYsdil7Zm9yKDtudWxsIT1hOyl7Y29uc3QgTT1kW2EuaW5kZXhdLEk9YS50eXBlO2lmKHYmJjA9PT1sJiYoTSYmTnUoX2woTSksZCksYS5mbGFnc3w9MiksMzImfmEuZmxhZ3MpaWYoOCZJKWdTKGMsbCxhLmNoaWxkLGQsaCxmLCExKSxINShsLGMsaCxNLGYpO2Vs'@;
put 'c2UgaWYoMzImSSl7Y29uc3QgRz1yUyhhLGQpO2xldCByZTtmb3IoO3JlPUcoKTspSDUobCxjLGgscmUsZik7SDUobCxjLGgsTSxmKX1lbHNlIDE2Jkk/d0QoYyxsLGQsYSxoLGYpOkg1KGwsYyxoLE0sZik7YT12P2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiByeShjLGwsYSxk'@;
put 'LGgsZil7Z1MoYSxkLGMuZmlyc3RDaGlsZCxsLGgsZiwhMSl9ZnVuY3Rpb24gd0QoYyxsLGEsZCxoLGYpe2NvbnN0IHY9YVtqbF0sST12W25jXS5wcm9qZWN0aW9uW2QucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShJKSlmb3IobGV0IEc9MDtHPEkubGVuZ3RoO0crKylINShsLGMsaCxJ'@;
put 'W0ddLGYpO2Vsc2V7bGV0IEc9STtjb25zdCByZT12W2RjXTtCdihkKSYmKEcuZmxhZ3N8PTEyOCksZ1MoYyxsLEcscmUsaCxmLCEwKX19ZnVuY3Rpb24gTUQoYyxsLGEpeyIiPT09YT9jLnJlbW92ZUF0dHJpYnV0ZShsLCJjbGFzcyIpOmMuc2V0QXR0cmlidXRlKGwsImNsYXNzIixhKX1mdW5j'@;
put 'dGlvbiB4RChjLGwsYSl7Y29uc3R7bWVyZ2VkQXR0cnM6ZCxjbGFzc2VzOmgsc3R5bGVzOmZ9PWE7bnVsbCE9PWQmJm00KGMsbCxkKSxudWxsIT09aCYmTUQoYyxsLGgpLG51bGwhPT1mJiZmdW5jdGlvbiBTRChjLGwsYSl7Yy5zZXRBdHRyaWJ1dGUobCwic3R5bGUiLGEpfShjLGwsZil9Y29u'@;
put 'c3QgTHM9e307ZnVuY3Rpb24gZmUoYz0xKXttUyhzbygpLGNpKCksRnUoKStjLCExKX1mdW5jdGlvbiBtUyhjLGwsYSxkKXtpZighZClpZigzJn5sW1dhXSl7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkR2KGwsZiwwLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tI'@;
put 'b29rcztudWxsIT09ZiYma3YobCxmLGEpfUE0KGEpfWZ1bmN0aW9uICRlKGMsbD1yYS5EZWZhdWx0KXtjb25zdCBhPWNpKCk7cmV0dXJuIG51bGw9PT1hP0NyKGMsbCk6Z2sob2woKSxhLEdpKGMpLGwpfWZ1bmN0aW9uIFREKGMsbCxhLGQsaCxmKXtjb25zdCB2PV9lKG51bGwpO3RyeXtsZXQg'@;
put 'TT1udWxsO2gmVm4uU2lnbmFsQmFzZWQmJihNPWxbZF1bZ2VdKSxudWxsIT09TSYmdm9pZCAwIT09TS50cmFuc2Zvcm1GbiYmKGY9TS50cmFuc2Zvcm1GbihmKSksaCZWbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSYmKGY9Yy5pbnB1dFRyYW5zZm9ybXNbZF0uY2FsbChsLGYpKSxudWxs'@;
put 'IT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwsTSxmLGEsZCk6S0EobCxNLGQsZil9ZmluYWxseXtfZSh2KX19ZnVuY3Rpb24gaXkoYyxsLGEsZCxoLGYsdixNLEksRyxyZSl7Y29uc3QgdWU9bC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gdWVbQmxdPWgsdWVbV2FdPTIwNHxkLChudWxsIT09'@;
put 'R3x8YyYmMjA0OCZjW1dhXSkmJih1ZVtXYV18PTIwNDgpLGFDKHVlKSx1ZVtkY109dWVbcjBdPWMsdWVbc2xdPWEsdWVbTzFdPXZ8fGMmJmNbTzFdLHVlW3ZzXT1NfHxjJiZjW3ZzXSx1ZVtoY109SXx8YyYmY1toY118fG51bGwsdWVbbmNdPWYsdWVbeTBdPWZ1bmN0aW9uIEdWKCl7cmV0dXJu'@;
put 'IFlWKyt9KCksdWVbUWNdPXJlLHVlW28yXT1HLHVlW2psXT0yPT1sLnR5cGU/Y1tqbF06dWUsdWV9ZnVuY3Rpb24gTjUoYyxsLGEsZCxoKXtsZXQgZj1jLmRhdGFbbF07aWYobnVsbD09PWYpZj1mdW5jdGlvbiB2UyhjLGwsYSxkLGgpe2NvbnN0IGY9bEMoKSx2PWNDKCksST1jLmRhdGFbbF09'@;
put 'ZnVuY3Rpb24gTEQoYyxsLGEsZCxoLGYpe2xldCB2PWw/bC5pbmplY3RvckluZGV4Oi0xLE09MDtyZXR1cm4gdjUoKSYmKE18PTEyOCkse3R5cGU6YSxpbmRleDpkLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp2LGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDot'@;
put 'MSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxjb21wb25lbnRPZmZzZXQ6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOk0scHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6aCxhdHRyczpmLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlu'@;
put 'cHV0czpudWxsLG91dHB1dHM6bnVsbCx0VmlldzpudWxsLG5leHQ6bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDpsLHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQg'@;
put 'MCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCx2P2Y6ZiYmZi5wYXJlbnQsYSxsLGQsaCk7cmV0dXJuIG51bGw9PT1jLmZpcnN0Q2hpbGQmJihjLmZpcnN0Q2hpbGQ9'@;
put 'SSksbnVsbCE9PWYmJih2P251bGw9PWYuY2hpbGQmJm51bGwhPT1JLnBhcmVudCYmKGYuY2hpbGQ9SSk6bnVsbD09PWYubmV4dCYmKGYubmV4dD1JLEkucHJldj1mKSksSX0oYyxsLGEsZCxoKSxmdW5jdGlvbiBDVigpe3JldHVybiB3cy5sRnJhbWUuaW5JMThufSgpJiYoZi5mbGFnc3w9MzIp'@;
put 'O2Vsc2UgaWYoNjQmZi50eXBlKXtmLnR5cGU9YSxmLnZhbHVlPWQsZi5hdHRycz1oO2NvbnN0IHY9ZnVuY3Rpb24gJDYoKXtjb25zdCBjPXdzLmxGcmFtZSxsPWMuY3VycmVudFROb2RlO3JldHVybiBjLmlzUGFyZW50P2w6bC5wYXJlbnR9KCk7Zi5pbmplY3RvckluZGV4PW51bGw9PT12Py0x'@;
put 'OnYuaW5qZWN0b3JJbmRleH1yZXR1cm4gcDIoZiwhMCksZn1mdW5jdGlvbiBoOChjLGwsYSxkKXtpZigwPT09YSlyZXR1cm4tMTtjb25zdCBoPWwubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8YTtmKyspbC5wdXNoKGQpLGMuYmx1ZXByaW50LnB1c2goZCksYy5kYXRhLnB1c2gobnVsbCk7cmV0dXJu'@;
put 'IGh9ZnVuY3Rpb24gQUQoYyxsLGEsZCxoKXtjb25zdCBmPUZ1KCksdj0yJmQ7dHJ5e0E0KC0xKSx2JiZsLmxlbmd0aD5fcyYmbVMoYyxsLF9zLCExKSxoMih2PzI6MCxoKSxhKGQsaCl9ZmluYWxseXtBNChmKSxoMih2PzM6MSxoKX19ZnVuY3Rpb24geVMoYyxsLGEpe2lmKGV1KGwpKXtjb25z'@;
put 'dCBkPV9lKG51bGwpO3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5kO2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24g'@;
put 'YlMoYyxsLGEpe2lrKCkmJihmdW5jdGlvbiBtaihjLGwsYSxkKXtjb25zdCBoPWEuZGlyZWN0aXZlU3RhcnQsZj1hLmRpcmVjdGl2ZUVuZDtJZihhKSYmZnVuY3Rpb24gQ2ooYyxsLGEpe2NvbnN0IGQ9STAobCxjKSxoPWF5KGEpO2xldCB2PTE2O2Euc2lnbmFscz92PTQwOTY6YS5vblB1c2gm'@;
put 'Jih2PTY0KTtjb25zdCBNPWY4KGMsaXkoYyxoLG51bGwsdixkLGwsbnVsbCxjW08xXS5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoZCxhKSxudWxsLG51bGwsbnVsbCkpO2NbbC5pbmRleF09TX0obCxhLGMuZGF0YVtoK2EuY29tcG9uZW50T2Zmc2V0XSksYy5maXJzdENyZWF0ZVBh'@;
put 'c3N8fE92KGEsbCksTnUoZCxsKTtjb25zdCB2PWEuaW5pdGlhbElucHV0cztmb3IobGV0IE09aDtNPGY7TSsrKXtjb25zdCBJPWMuZGF0YVtNXSxHPUQ0KGwsYyxNLGEpO051KEcsbCksbnVsbCE9PXYmJnN5KDAsTS1oLEcsSSwwLHYpLEhjKEkpJiYoUDEoYS5pbmRleCxsKVtzbF09RDQobCxj'@;
put 'LE0sYSkpfX0oYyxsLGEsSTAoYSxsKSksISg2NCZ+YS5mbGFncykmJkhEKGMsbCxhKSl9ZnVuY3Rpb24gX1MoYyxsLGE9STApe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtjb25zdCB2PWRbZisx'@;
put 'XSxNPS0xPT09dj9hKGwsYyk6Y1t2XTtjW2grK109TX19fWZ1bmN0aW9uIGF5KGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PXdTKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxj'@;
put 'LnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfWZ1bmN0aW9uIHdTKGMsbCxhLGQsaCxmLHYsTSxJLEcscmUpe2NvbnN0IHVlPV9zK2QseWU9dWUraCxFZT1mdW5jdGlvbiBsaihjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxsO2QrKylhLnB1c2go'@;
put 'ZDxjP251bGw6THMpO3JldHVybiBhfSh1ZSx5ZSksQmU9ImZ1bmN0aW9uIj09dHlwZW9mIEc/RygpOkc7cmV0dXJuIEVlW1hpXT17dHlwZTpjLGJsdWVwcmludDpFZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOkVlLnNsaWNlKCkuZmlsbChu'@;
put 'dWxsLHVlKSxiaW5kaW5nU3RhcnRJbmRleDp1ZSxleHBhbmRvU3RhcnRJbmRleDp5ZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVy'@;
put 'SG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29t'@;
put 'cG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpJLGNvbnN0czpCZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOnJl'@;
put 'fX1sZXQga0Q9KCk9Pm51bGw7ZnVuY3Rpb24gT0QoYyxsLGEsZCxoKXtmb3IobGV0IGYgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qgdj1sW2ZdO2lmKHZvaWQgMD09PXYpY29udGludWU7ZD8/PXt9O2xldCBNLEk9Vm4uTm9uZTtBcnJheS5pc0FycmF5KHYp'@;
put 'PyhNPXZbMF0sST12WzFdKTpNPXY7bGV0IEc9ZjtpZihudWxsIT09aCl7aWYoIWguaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Rz1oW2ZdfTA9PT1jP1BEKGQsYSxHLE0sSSk6UEQoZCxhLEcsTSl9cmV0dXJuIGR9ZnVuY3Rpb24gUEQoYyxsLGEsZCxoKXtsZXQgZjtjLmhhc093blByb3Bl'@;
put 'cnR5KGEpPyhmPWNbYV0pLnB1c2gobCxkKTpmPWNbYV09W2wsZF0sdm9pZCAwIT09aCYmZi5wdXNoKGgpfWZ1bmN0aW9uIE8wKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgST1JMChsLGEpO2xldCByZSxHPWwuaW5wdXRzOyFNJiZudWxsIT1HJiYocmU9R1tkXSk/KFRTKGMsYSxyZSxkLGgpLElm'@;
put 'KGwpJiZmdW5jdGlvbiBmaihjLGwpe2NvbnN0IGE9UDEobCxjKTsxNiZhW1dhXXx8KGFbV2FdfD02NCl9KGEsbC5pbmRleCkpOjMmbC50eXBlJiYoZD1mdW5jdGlvbiBoaihjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09'@;
put 'PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1jPyJ0YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoSSxkLGgpKX1mdW5jdGlvbiBD'@;
put 'UyhjLGwsYSxkKXtpZihpaygpKXtjb25zdCBoPW51bGw9PT1kP251bGw6eyIiOi0xfSxmPWZ1bmN0aW9uIHZqKGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGwsaD1udWxsO2lmKGEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXTtpZih5'@;
put 'NChsLHYuc2VsZWN0b3JzLCExKSlpZihkfHwoZD1bXSksSGModikpaWYobnVsbCE9PXYuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtjb25zdCBNPVtdO2g9aHx8bmV3IE1hcCx2LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyh2LE0saCksZC51bnNoaWZ0KC4uLk0sdiksTVMoYyxsLE0ubGVuZ3RoKX1l'@;
put 'bHNlIGQudW5zaGlmdCh2KSxNUyhjLGwsMCk7ZWxzZSBoPWh8fG5ldyBNYXAsdi5maW5kSG9zdERpcmVjdGl2ZURlZnM/Lih2LGQsaCksZC5wdXNoKHYpfXJldHVybiBudWxsPT09ZD9udWxsOltkLGhdfShjLGEpO2xldCB2LE07bnVsbD09PWY/dj1NPW51bGw6W3YsTV09ZixudWxsIT09diYm'@;
put 'U1MoYyxsLGEsdixoLE0pLGgmJmZ1bmN0aW9uIHlqKGMsbCxhKXtpZihsKXtjb25zdCBkPWMubG9jYWxOYW1lcz1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grPTIpe2NvbnN0IGY9YVtsW2grMV1dO2lmKG51bGw9PWYpdGhyb3cgbmV3IG5yKC0zMDEsITEpO2QucHVzaChsW2hdLGYpfX19'@;
put 'KGEsZCxoKX1hLm1lcmdlZEF0dHJzPUNmKGEubWVyZ2VkQXR0cnMsYS5hdHRycyl9ZnVuY3Rpb24gU1MoYyxsLGEsZCxoLGYpe2ZvcihsZXQgRz0wO0c8ZC5sZW5ndGg7RysrKXBkKE92KGEsbCksYyxkW0ddLnR5cGUpOyFmdW5jdGlvbiBfaihjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2'@;
put 'ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJbmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBHPTA7RzxkLmxlbmd0aDtHKyspe2NvbnN0IHJlPWRbR107cmUucHJvdmlkZXJzUmVzb2x2ZXImJnJlLnByb3ZpZGVyc1Jlc29sdmVyKHJlKX1s'@;
put 'ZXQgdj0hMSxNPSExLEk9aDgoYyxsLGQubGVuZ3RoLG51bGwpO2ZvcihsZXQgRz0wO0c8ZC5sZW5ndGg7RysrKXtjb25zdCByZT1kW0ddO2EubWVyZ2VkQXR0cnM9Q2YoYS5tZXJnZWRBdHRycyxyZS5ob3N0QXR0cnMpLHdqKGMsYSxsLEkscmUpLGJqKEkscmUsaCksbnVsbCE9PXJlLmNvbnRl'@;
put 'bnRRdWVyaWVzJiYoYS5mbGFnc3w9NCksKG51bGwhPT1yZS5ob3N0QmluZGluZ3N8fG51bGwhPT1yZS5ob3N0QXR0cnN8fDAhPT1yZS5ob3N0VmFycykmJihhLmZsYWdzfD02NCk7Y29uc3QgdWU9cmUudHlwZS5wcm90b3R5cGU7IXYmJih1ZS5uZ09uQ2hhbmdlc3x8dWUubmdPbkluaXR8fHVl'@;
put 'Lm5nRG9DaGVjaykmJigoYy5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYS5pbmRleCksdj0hMCksIU0mJih1ZS5uZ09uQ2hhbmdlc3x8dWUubmdEb0NoZWNrKSYmKChjLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLE09ITApLEkrK30hZnVuY3Rpb24gZGooYyxsLGEp'@;
put 'e2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQsZj1jLmRhdGEsdj1sLmF0dHJzLE09W107bGV0IEk9bnVsbCxHPW51bGw7Zm9yKGxldCByZT1sLmRpcmVjdGl2ZVN0YXJ0O3JlPGg7cmUrKyl7Y29uc3QgdWU9ZltyZV0seWU9YT9hLmdldCh1ZSk6bnVsbCxCZT15ZT95ZS5vdXRwdXRzOm51bGw7ST1P'@;
put 'RCgwLHVlLmlucHV0cyxyZSxJLHllP3llLmlucHV0czpudWxsKSxHPU9EKDEsdWUub3V0cHV0cyxyZSxHLEJlKTtjb25zdCBHZT1udWxsPT09SXx8bnVsbD09PXZ8fHY0KGwpP251bGw6VkQoSSxyZSx2KTtNLnB1c2goR2UpfW51bGwhPT1JJiYoSS5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYm'@;
put 'KGwuZmxhZ3N8PTgpLEkuaGFzT3duUHJvcGVydHkoInN0eWxlIikmJihsLmZsYWdzfD0xNikpLGwuaW5pdGlhbElucHV0cz1NLGwuaW5wdXRzPUksbC5vdXRwdXRzPUd9KGMsYSxmKX1mdW5jdGlvbiBIRChjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0YXJ0LGg9YS5kaXJlY3RpdmVFbmQs'@;
put 'Zj1hLmluZGV4LHY9ZnVuY3Rpb24gTVYoKXtyZXR1cm4gd3MubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7QTQoZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgST1jLmRhdGFbTV0sRz1sW01dO2RDKE0pLChudWxsIT09SS5ob3N0QmluZGluZ3N8fDAhPT1JLmhvc3RW'@;
put 'YXJzfHxudWxsIT09SS5ob3N0QXR0cnMpJiZORChJLEcpfX1maW5hbGx5e0E0KC0xKSxkQyh2KX19ZnVuY3Rpb24gTkQoYyxsKXtudWxsIT09Yy5ob3N0QmluZGluZ3MmJmMuaG9zdEJpbmRpbmdzKDEsbCl9ZnVuY3Rpb24gTVMoYyxsLGEpe2wuY29tcG9uZW50T2Zmc2V0PWEsKGMuY29tcG9u'@;
put 'ZW50cz8/PVtdKS5wdXNoKGwuaW5kZXgpfWZ1bmN0aW9uIGJqKGMsbCxhKXtpZihhKXtpZihsLmV4cG9ydEFzKWZvcihsZXQgZD0wO2Q8bC5leHBvcnRBcy5sZW5ndGg7ZCsrKWFbbC5leHBvcnRBc1tkXV09YztIYyhsKSYmKGFbIiJdPWMpfX1mdW5jdGlvbiB3aihjLGwsYSxkLGgpe2MuZGF0'@;
put 'YVtkXT1oO2NvbnN0IGY9aC5mYWN0b3J5fHwoaC5mYWN0b3J5PWh1KGgudHlwZSkpLHY9bmV3IEYxKGYsSGMoaCksJGUpO2MuYmx1ZXByaW50W2RdPXYsYVtkXT12LGZ1bmN0aW9uIEZEKGMsbCxhLGQsaCl7Y29uc3QgZj1oLmhvc3RCaW5kaW5ncztpZihmKXtsZXQgdj1jLmhvc3RCaW5kaW5n'@;
put 'T3BDb2RlcztudWxsPT09diYmKHY9Yy5ob3N0QmluZGluZ09wQ29kZXM9W10pO2NvbnN0IE09fmwuaW5kZXg7KGZ1bmN0aW9uIGdqKGMpe2xldCBsPWMubGVuZ3RoO2Zvcig7bD4wOyl7Y29uc3QgYT1jWy0tbF07aWYoIm51bWJlciI9PXR5cGVvZiBhJiZhPDApcmV0dXJuIGF9cmV0dXJuIDB9'@;
put 'KSh2KSE9TSYmdi5wdXNoKE0pLHYucHVzaChhLGQsZil9fShjLGwsZCxoOChjLGEsaC5ob3N0VmFycyxMcyksaCl9ZnVuY3Rpb24gZGgoYyxsLGEsZCxoLGYpe2NvbnN0IHY9STAoYyxsKTshZnVuY3Rpb24geFMoYyxsLGEsZCxoLGYsdil7aWYobnVsbD09ZiljLnJlbW92ZUF0dHJpYnV0ZShs'@;
put 'LGgsYSk7ZWxzZXtjb25zdCBNPW51bGw9PXY/U2EoZik6dihmLGR8fCIiLGgpO2Muc2V0QXR0cmlidXRlKGwsaCxNLGEpfX0obFt2c10sdixmLGMudmFsdWUsYSxkLGgpfWZ1bmN0aW9uIHN5KGMsbCxhLGQsaCxmKXtjb25zdCB2PWZbbF07aWYobnVsbCE9PXYpZm9yKGxldCBNPTA7TTx2Lmxl'@;
put 'bmd0aDspVEQoZCxhLHZbTSsrXSx2W00rK10sdltNKytdLHZbTSsrXSl9ZnVuY3Rpb24gVkQoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigwIT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3du'@;
put 'UHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3Qgdj1jW2ZdO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9MylpZih2W01dPT09bCl7ZC5wdXNoKGYsdltNKzFdLHZbTSsyXSxhW2grMV0pO2JyZWFrfX1oKz0yfWVsc2UgaCs9MjtlbHNlIGgrPTR9cmV0dXJuIGR9ZnVuY3Rpb24g'@;
put 'RVMoYyxsLGEsZCl7cmV0dXJuW2MsITAsMCxsLG51bGwsZCxudWxsLGEsbnVsbCxudWxsXX1mdW5jdGlvbiBCRChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2'@;
put 'PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO2ozKGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIGY4KGMsbCl7cmV0dXJuIGNbQWZdP2NbQzRdW0ZjXT1sOmNbQWZdPWwsY1tDNF09bCxsfWZ1bmN0aW9uIG95KGMs'@;
put 'bCxhKXtqMygwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gakQoYyl7cmV0dXJuIGNbWDBdfHwoY1tYMF09W10pfWZ1bmN0aW9uIHA4KGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFc0KGMsbCxhKXtyZXR1'@;
put 'cm4obnVsbD09PWN8fEhjKGMpKSYmKGE9ZnVuY3Rpb24gckMoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW3o2XSlyZXR1cm4gYztjPWNbQmxdfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVt2c119ZnVuY3Rpb24gVjUoYyxsKXtjb25zdCBhPWNb'@;
put 'aGNdLGQ9YT9hLmdldCh2MixudWxsKTpudWxsO2QmJmQuaGFuZGxlRXJyb3IobCl9ZnVuY3Rpb24gVFMoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3Qgdj1hW2YrK10sTT1hW2YrK10sST1hW2YrK107VEQoYy5kYXRhW3ZdLGxbdl0sZCxNLEksaCl9fWZ1bmN0aW9u'@;
put 'IGIyKGMsbCxhKXtjb25zdCBkPW01KGwsYyk7IWZ1bmN0aW9uIHBEKGMsbCxhKXtjLnNldFZhbHVlKGwsYSl9KGNbdnNdLGQsYSl9ZnVuY3Rpb24gTWooYyxsKXtjb25zdCBhPVAxKGwsYyksZD1hW1hpXTshZnVuY3Rpb24geGooYyxsKXtmb3IobGV0IGE9bC5sZW5ndGg7YTxjLmJsdWVwcmlu'@;
put 'dC5sZW5ndGg7YSsrKWwucHVzaChjLmJsdWVwcmludFthXSl9KGQsYSk7Y29uc3QgaD1hW0JsXTtudWxsIT09aCYmbnVsbD09PWFbUWNdJiYoYVtRY109SEMoaCxhW2hjXSkpLEFTKGQsYSxhW3NsXSl9ZnVuY3Rpb24gQVMoYyxsLGEpe0s2KGwpO3RyeXtjb25zdCBkPWMudmlld1F1ZXJ5O251'@;
put 'bGwhPT1kJiZveSgxLGQsYSk7Y29uc3QgaD1jLnRlbXBsYXRlO251bGwhPT1oJiZBRChjLGwsaCwxLGEpLGMuZmlyc3RDcmVhdGVQYXNzJiYoYy5maXJzdENyZWF0ZVBhc3M9ITEpLGxbaGRdPy5maW5pc2hWaWV3Q3JlYXRpb24oYyksYy5zdGF0aWNDb250ZW50UXVlcmllcyYmQkQoYyxsKSxj'@;
put 'LnN0YXRpY1ZpZXdRdWVyaWVzJiZveSgyLGMudmlld1F1ZXJ5LGEpO2NvbnN0IGY9Yy5jb21wb25lbnRzO251bGwhPT1mJiZmdW5jdGlvbiBFaihjLGwpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKU1qKGMsbFthXSl9KGwsZil9Y2F0Y2goZCl7dGhyb3cgYy5maXJzdENyZWF0ZVBhc3Mm'@;
put 'JihjLmluY29tcGxldGVGaXJzdFBhc3M9ITAsYy5maXJzdENyZWF0ZVBhc3M9ITEpLGR9ZmluYWxseXtsW1dhXSY9LTUseTUoKX19ZnVuY3Rpb24gQjUoYyxsKXtyZXR1cm4hbHx8bnVsbD09PWwuZmlyc3RDaGlsZHx8QnYoYyl9ZnVuY3Rpb24gdjgoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW1hp'@;
put 'XTtpZihmdW5jdGlvbiBzUyhjLGwsYSxkKXtjb25zdCBoPWZjK2QsZj1hLmxlbmd0aDtkPjAmJihhW2gtMV1bRmNdPWwpLGQ8Zi1mYz8obFtGY109YVtoXSxSbChhLGZjK2QsbCkpOihhLnB1c2gobCksbFtGY109bnVsbCksbFtkY109YTtjb25zdCB2PWxbUzRdO251bGwhPT12JiZhIT09diYm'@;
put 'ZnVuY3Rpb24gcmooYyxsKXtjb25zdCBhPWNbQjNdO2xbamxdIT09bFtkY11bZGNdW2psXSYmKGNbV2FdfD1nNS5IYXNUcmFuc3BsYW50ZWRWaWV3cyksbnVsbD09PWE/Y1tCM109W2xdOmEucHVzaChsKX0odixsKTtjb25zdCBNPWxbaGRdO251bGwhPT1NJiZNLmluc2VydFZpZXcoYyksb0Mo'@;
put 'bCksbFtXYV18PTEyOH0oaCxsLGMsYSksZCl7Y29uc3Qgdj1wUyhhLGMpLE09bFt2c10sST1xMyhNLGNbZnVdKTtudWxsIT09SSYmZnVuY3Rpb24gdGooYyxsLGEsZCxoLGYpe2RbQmxdPWgsZFtuY109bCxyeShjLGQsYSwxLGgsZil9KGgsY1tuY10sTSxsLEksdil9Y29uc3QgZj1sW1FjXTtu'@;
put 'dWxsIT09ZiYmbnVsbCE9PWYuZmlyc3RDaGlsZCYmKGYuZmlyc3RDaGlsZD1udWxsKX1mdW5jdGlvbiB5OChjLGwsYSxkLGg9ITEpe2Zvcig7bnVsbCE9PWE7KXtjb25zdCBmPWxbYS5pbmRleF07bnVsbCE9PWYmJmQucHVzaChfbChmKSksT3UoZikmJnpEKGYsZCk7Y29uc3Qgdj1hLnR5cGU7'@;
put 'aWYoOCZ2KXk4KGMsbCxhLmNoaWxkLGQpO2Vsc2UgaWYoMzImdil7Y29uc3QgTT1yUyhhLGwpO2xldCBJO2Zvcig7ST1NKCk7KWQucHVzaChJKX1lbHNlIGlmKDE2JnYpe2NvbnN0IE09YkQobCxhKTtpZihBcnJheS5pc0FycmF5KE0pKWQucHVzaCguLi5NKTtlbHNle2NvbnN0IEk9VDQobFtq'@;
put 'bF0pO3k4KElbWGldLEksTSxkLCEwKX19YT1oP2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fXJldHVybiBkfWZ1bmN0aW9uIHpEKGMsbCl7Zm9yKGxldCBhPWZjO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV0saD1kW1hpXS5maXJzdENoaWxkO251bGwhPT1oJiZ5OChkW1hpXSxkLGgsbCl9'@;
put 'Y1tmdV0hPT1jW0JsXSYmbC5wdXNoKGNbZnVdKX1sZXQgVUQ9W107Y29uc3QgRGo9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2VyTm9kZTp2b2lkIDAscHJvZHVjZXJMYXN0UmVhZFZlcnNpb246dm9pZCAwLHByb2R1Y2VySW5kZXhPZlRoaXM6dm9pZCAwLG5l'@;
put 'eHRQcm9kdWNlckluZGV4OjAsbGl2ZUNvbnN1bWVyTm9kZTp2b2lkIDAsbGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM6dm9pZCAwLGNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXM6ITEsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITEscHJvZHVjZXJNdXN0UmVjb21wdXRlOigpPT4hMSxwcm9kdWNlclJl'@;
put 'Y29tcHV0ZVZhbHVlOigpPT57fSxjb25zdW1lck1hcmtlZERpcnR5OigpPT57fSxjb25zdW1lck9uU2lnbmFsUmVhZDooKT0+e30sY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsY29uc3VtZXJNYXJrZWREaXJ0eTpjPT57RzYoYy5sVmlldyl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5s'@;
put 'Vmlld1tEZl09dGhpc319LFpEPTEwMDtmdW5jdGlvbiBseShjLGw9ITAsYT0wKXtjb25zdCBkPWNbTzFdLGg9ZC5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBJaihjLGwpe0RTKGMsbCk7bGV0IGE9MDtmb3IoO1N2KGMpOyl7aWYoYT09PVpEKXRocm93IG5ldyBu'@;
put 'cigxMDMsITEpO2ErKyxEUyhjLDEpfX0oYyxhKX1jYXRjaCh2KXt0aHJvdyBsJiZWNShjLHYpLHZ9ZmluYWxseXtoLmVuZD8uKCksZC5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCl9fWZ1bmN0aW9uIFJqKGMsbCxhLGQpe2NvbnN0IGg9bFtXYV07aWYoISgyNTYmfmgpKXJldHVybjtsW08x'@;
put 'XS5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCksSzYobCk7bGV0IHY9bnVsbCxNPW51bGw7KGZ1bmN0aW9uIExqKGMpe3JldHVybiAyIT09Yy50eXBlfSkoYykmJihNPWZ1bmN0aW9uIFRqKGMpe3JldHVybiBjW0RmXT8/ZnVuY3Rpb24gQWooYyl7Y29uc3QgbD1VRC5wb3AoKT8/T2JqZWN0'@;
put 'LmNyZWF0ZShEaik7cmV0dXJuIGwubFZpZXc9YyxsfShjKX0obCksdj1mdW5jdGlvbiBVKGMpe3JldHVybiBjJiYoYy5uZXh0UHJvZHVjZXJJbmRleD0wKSxfZShjKX0oTSkpO3RyeXthQyhsKSxmdW5jdGlvbiBzayhjKXtyZXR1cm4gd3MubEZyYW1lLmJpbmRpbmdJbmRleD1jfShjLmJpbmRp'@;
put 'bmdTdGFydEluZGV4KSxudWxsIT09YSYmQUQoYyxsLGEsMixkKTtjb25zdCBJPSEoMyZ+aCk7aWYoSSl7Y29uc3QgdWU9Yy5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PXVlJiZrdihsLHVlLG51bGwpfWVsc2V7Y29uc3QgdWU9Yy5wcmVPcmRlckhvb2tzO251bGwhPT11ZSYmRHYobCx1ZSww'@;
put 'LG51bGwpLG1DKGwsMCl9aWYoZnVuY3Rpb24gT2ooYyl7Zm9yKGxldCBsPWtrKGMpO251bGwhPT1sO2w9RGsobCkpe2lmKCEobFtXYV0mZzUuSGFzVHJhbnNwbGFudGVkVmlld3MpKWNvbnRpbnVlO2NvbnN0IGE9bFtCM107Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2ZWKGFbZF0pfX19'@;
put 'KGwpLFdEKGwsMCksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJkJEKGMsbCksSSl7Y29uc3QgdWU9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09dWUmJmt2KGwsdWUpfWVsc2V7Y29uc3QgdWU9Yy5jb250ZW50SG9va3M7bnVsbCE9PXVlJiZEdihsLHVlLDEpLG1DKGwsMSl9IWZ1bmN0aW9u'@;
put 'IG9qKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09YSl0cnl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTtpZihoPDApQTQofmgpO2Vsc2V7Y29uc3QgZj1oLHY9YVsrK2RdLE09YVsrK2RdO1NWKHYsZiksTSgyLGxbZl0pfX19Zmlu'@;
put 'YWxseXtBNCgtMSl9fShjLGwpO2NvbnN0IEc9Yy5jb21wb25lbnRzO251bGwhPT1HJiZHRChsLEcsMCk7Y29uc3QgcmU9Yy52aWV3UXVlcnk7aWYobnVsbCE9PXJlJiZveSgyLHJlLGQpLEkpe2NvbnN0IHVlPWMudmlld0NoZWNrSG9va3M7bnVsbCE9PXVlJiZrdihsLHVlKX1lbHNle2NvbnN0'@;
put 'IHVlPWMudmlld0hvb2tzO251bGwhPT11ZSYmRHYobCx1ZSwyKSxtQyhsLDIpfWlmKCEwPT09Yy5maXJzdFVwZGF0ZVBhc3MmJihjLmZpcnN0VXBkYXRlUGFzcz0hMSksbFtwNV0pe2Zvcihjb25zdCB1ZSBvZiBsW3A1XSl1ZSgpO2xbcDVdPW51bGx9bFtXYV0mPS03M31jYXRjaChJKXt0aHJv'@;
put 'dyBHNihsKSxJfWZpbmFsbHl7bnVsbCE9PU0mJihmdW5jdGlvbiBFKGMsbCl7aWYoX2UobCksYyYmdm9pZCAwIT09Yy5wcm9kdWNlck5vZGUmJnZvaWQgMCE9PWMucHJvZHVjZXJJbmRleE9mVGhpcyYmdm9pZCAwIT09Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbil7aWYobGUoYykpZm9yKGxl'@;
put 'dCBhPWMubmV4dFByb2R1Y2VySW5kZXg7YTxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7YSsrKW5lKGMucHJvZHVjZXJOb2RlW2FdLGMucHJvZHVjZXJJbmRleE9mVGhpc1thXSk7Zm9yKDtjLnByb2R1Y2VyTm9kZS5sZW5ndGg+Yy5uZXh0UHJvZHVjZXJJbmRleDspYy5wcm9kdWNlck5vZGUucG9w'@;
put 'KCksYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5wb3AoKSxjLnByb2R1Y2VySW5kZXhPZlRoaXMucG9wKCl9fShNLHYpLGZ1bmN0aW9uIGtqKGMpe2MubFZpZXdbRGZdIT09YyYmKGMubFZpZXc9bnVsbCxVRC5wdXNoKGMpKX0oTSkpLHk1KCl9fWZ1bmN0aW9uIFdEKGMsbCl7Zm9yKGxldCBh'@;
put 'PWtrKGMpO251bGwhPT1hO2E9RGsoYSkpZm9yKGxldCBkPWZjO2Q8YS5sZW5ndGg7ZCsrKVlEKGFbZF0sbCl9ZnVuY3Rpb24gUGooYyxsLGEpe1lEKFAxKGwsYyksYSl9ZnVuY3Rpb24gWUQoYyxsKXtpQyhjKSYmRFMoYyxsKX1mdW5jdGlvbiBEUyhjLGwpe2NvbnN0IGQ9Y1tYaV0saD1jW1dh'@;
put 'XSxmPWNbRGZdO2xldCB2PSEhKDA9PT1sJiYxNiZoKTtpZih2fHw9ISEoNjQmaCYmMD09PWwpLHZ8fD0hISgxMDI0JmgpLHZ8fD0hKCFmPy5kaXJ0eXx8IW0oZikpLGYmJihmLmRpcnR5PSExKSxjW1dhXSY9LTkyMTcsdilSaihkLGMsZC50ZW1wbGF0ZSxjW3NsXSk7ZWxzZSBpZig4MTkyJmgp'@;
put 'e1dEKGMsMSk7Y29uc3QgTT1kLmNvbXBvbmVudHM7bnVsbCE9PU0mJkdEKGMsTSwxKX19ZnVuY3Rpb24gR0QoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKVBqKGMsbFtkXSxhKX1mdW5jdGlvbiBiOChjKXtmb3IoY1tPMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3Rp'@;
put 'ZnkoKTtjOyl7Y1tXYV18PTY0O2NvbnN0IGw9VDQoYyk7aWYoeDQoYykmJiFsKXJldHVybiBjO2M9bH1yZXR1cm4gbnVsbH1jbGFzcyBfOHtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbWGldO3JldHVybiB5OChhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rv'@;
put 'cihsLGEsZD0hMCl7dGhpcy5fbFZpZXc9bCx0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXc9YSx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcj1kLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W3Ns'@;
put 'XX1zZXQgY29udGV4dChsKXt0aGlzLl9sVmlld1tzbF09bH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuISgyNTYmfnRoaXMuX2xWaWV3W1dhXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3'@;
put 'Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3W2RjXTtpZihPdShsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKG84KGwsZCksSXUoYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTQodGhpcy5fbFZpZXdbWGldLHRoaXMuX2xW'@;
put 'aWV3KX1vbkRlc3Ryb3kobCl7TXYodGhpcy5fbFZpZXcsbCl9bWFya0ZvckNoZWNrKCl7YjgodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbV2FdJj0tMTI5fXJlYXR0YWNoKCl7b0ModGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3W1dh'@;
put 'XXw9MTI4fWRldGVjdENoYW5nZXMoKXt0aGlzLl9sVmlld1tXYV18PTEwMjQsbHkodGhpcy5fbFZpZXcsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXIpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgbnIoOTAyLCEx'@;
put 'KTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsbUQodGhpcy5fbFZpZXdbWGldLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihsKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcg'@;
put 'bnIoOTAyLCExKTt0aGlzLl9hcHBSZWY9bCxvQyh0aGlzLl9sVmlldyl9fWxldCB3bD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU5qfX1yZXR1cm4gY30pKCk7Y29uc3QgRmo9d2wsSGo9Y2xhc3MgZXh0ZW5kcyBGantjb25zdHJ1Y3RvcihsLGEsZCl7c3Vw'@;
put 'ZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWwsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5lbGVtZW50UmVmPWR9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGws'@;
put 'YSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChsLGEpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwobCxhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gZzgoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7Y29uc3QgZj1sLnRWaWV3LEk9aXkoYyxmLGEsNDA5NiZjW1dhXT80MDk2'@;
put 'OjE2LG51bGwsbCxudWxsLG51bGwsZD8uaW5qZWN0b3I/P251bGwsZD8uZW1iZWRkZWRWaWV3SW5qZWN0b3I/P251bGwsZD8uZGVoeWRyYXRlZFZpZXc/P251bGwpO0lbUzRdPWNbbC5pbmRleF07Y29uc3QgcmU9Y1toZF07cmV0dXJuIG51bGwhPT1yZSYmKElbaGRdPXJlLmNyZWF0ZUVtYmVk'@;
put 'ZGVkVmlldyhmKSksQVMoZixJLGEpLEl9ZmluYWxseXtfZShoKX19KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLGwse2VtYmVkZGVkVmlld0luamVjdG9yOmEsZGVoeWRyYXRlZFZpZXc6ZH0pO3JldHVybiBuZXcgXzgoaCl9fTtmdW5jdGlvbiBO'@;
put 'aigpe3JldHVybiBjeShvbCgpLGNpKCkpfWZ1bmN0aW9uIGN5KGMsbCl7cmV0dXJuIDQmYy50eXBlP25ldyBIaihsLGMsTDQoYyxsKSk6bnVsbH1jbGFzcyBweXt9Y2xhc3Mgb3p7fWNsYXNzIG5Je31jbGFzcyB1entyZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKXt0aHJvdyBmdW5jdGlvbiBs'@;
put 'eihjKXtjb25zdCBsPUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtIcihjKX0uYCk7cmV0dXJuIGwubmdDb21wb25lbnQ9YyxsfShsKX19bGV0IHo1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuTlVMTD1uZXcgdXp9fXJldHVybiBjfSkoKTtjbGFzcyB4OHt9bGV0'@;
put 'IEVzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIGR6KCl7Y29uc3QgYz1jaSgpLGE9UDEob2woKS5pbmRleCxjKTtyZXR1cm4oTHUoYSk/YTpjKVt2c119KCl9fXJldHVy'@;
put 'biBjfSkoKSxoej0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSFM9e30sckk9bmV3IFNldDtmdW5jdGlvbiBfMihjKXtySS5oYXMoYyl8fChySS5h'@;
put 'ZGQoYykscGVyZm9ybWFuY2U/Lm1hcms/LigibWFya19mZWF0dXJlX3VzYWdlIix7ZGV0YWlsOntmZWF0dXJlOmN9fSkpfWZ1bmN0aW9uIGlJKC4uLmMpe31jbGFzcyBHYXtjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6bD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0'@;
put 'ZWN0aW9uOmE9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246ZD0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IoITEpLHRoaXMub25N'@;
put 'aWNyb3Rhc2tFbXB0eT1uZXcgS3IoITEpLHRoaXMub25TdGFibGU9bmV3IEtyKCExKSx0aGlzLm9uRXJyb3I9bmV3IEtyKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IG5yKDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IGg9dGhpcztoLl9uZXN0aW5nPTAsaC5f'@;
put 'b3V0ZXI9aC5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksbCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9y'@;
put 'ayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxoLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IWQmJmEsaC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1kLGgubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGgubmF0aXZlUmVxdWVzdEFuaW1h'@;
put 'dGlvbkZyYW1lPWZ1bmN0aW9uIGZ6KCl7Y29uc3QgYz0iZnVuY3Rpb24iPT10eXBlb2YgTnQucmVxdWVzdEFuaW1hdGlvbkZyYW1lO2xldCBsPU50W2M/InJlcXVlc3RBbmltYXRpb25GcmFtZSI6InNldFRpbWVvdXQiXSxhPU50W2M/ImNhbmNlbEFuaW1hdGlvbkZyYW1lIjoiY2xlYXJUaW1l'@;
put 'b3V0Il07aWYodHlwZW9mIFpvbmU8InUiJiZsJiZhKXtjb25zdCBkPWxbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2QmJihsPWQpO2NvbnN0IGg9YVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aCYmKGE9aCl9cmV0dXJue25hdGl2ZVJlcXVlc3RB'@;
put 'bmltYXRpb25GcmFtZTpsLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZyYW1lOmF9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbiBteihjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIGd6KGMpe2MuaXNDaGVja1N0YWJsZVJ1bm5pbmd8fC0xIT09Yy5sYXN0UmVxdWVzdEFu'@;
put 'aW1hdGlvbkZyYW1lSWR8fChjLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD1jLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZS5jYWxsKE50LCgpPT57Yy5mYWtlVG9wRXZlbnRUYXNrfHwoYy5mYWtlVG9wRXZlbnRUYXNrPVpvbmUucm9vdC5zY2hlZHVsZUV2ZW50VGFzaygiZmFrZVRv'@;
put 'cEV2ZW50VGFzayIsKCk9PntjLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxWUyhjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSEwLE5TKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9LHZvaWQgMCwoKT0+e30sKCk9Pnt9KSksYy5mYWtlVG9wRXZlbnRUYXNrLmludm9rZSgp'@;
put 'fSksVlMoYykpfShjKX07Yy5faW5uZXI9Yy5faW5uZXIuZm9yayh7bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOihhLGQsaCxmLHYsTSk9PntpZihmdW5jdGlvbiB2eihjKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KGMpfHwxIT09Yy5s'@;
put 'ZW5ndGgpJiYhMD09PWNbMF0uZGF0YT8uX19pZ25vcmVfbmdfem9uZV9ffShNKSlyZXR1cm4gYS5pbnZva2VUYXNrKGgsZix2LE0pO3RyeXtyZXR1cm4gZ3koYyksYS5pbnZva2VUYXNrKGgsZix2LE0pfWZpbmFsbHl7KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2'@;
put 'ZW50VGFzayI9PT1mLnR5cGV8fGMuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZsKCksYUkoYyl9fSxvbkludm9rZTooYSxkLGgsZix2LE0sSSk9Pnt0cnl7cmV0dXJuIGd5KGMpLGEuaW52b2tlKGgsZix2LE0sSSl9ZmluYWxseXtjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdl'@;
put 'RGV0ZWN0aW9uJiZsKCksYUkoYyl9fSxvbkhhc1Rhc2s6KGEsZCxoLGYpPT57YS5oYXNUYXNrKGgsZiksZD09PWgmJigibWljcm9UYXNrIj09Zi5jaGFuZ2U/KGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPWYubWljcm9UYXNrLFZTKGMpLE5TKGMpKToibWFjcm9UYXNrIj09Zi5jaGFuZ2UmJihj'@;
put 'Lmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWYubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGEsZCxoLGYpPT4oYS5oYW5kbGVFcnJvcihoLGYpLGMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25FcnJvci5lbWl0KGYpKSwhMSl9KX0oaCl9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVy'@;
put 'biB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIUdhLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBucig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7'@;
put 'aWYoR2EuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IG5yKDkwOSwhMSl9cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGws'@;
put 'cHosaUksaUkpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1maW5hbGx5e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9'@;
put 'fWNvbnN0IHB6PXt9O2Z1bmN0aW9uIE5TKGMpe2lmKDA9PWMuX25lc3RpbmcmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRp'@;
put 'bmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5jLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIFZTKGMpe2MuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENv'@;
put 'YWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiBneShjKXtjLl9uZXN0aW5nKyssYy5pc1N0YWJsZSYmKGMuaXNTdGFibGU9ITEsYy5vblVuc3Rh'@;
put 'YmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIGFJKGMpe2MuX25lc3RpbmctLSxOUyhjKX1jbGFzcyBzSXtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1u'@;
put 'ZXcgS3IsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBLcix0aGlzLm9uU3RhYmxlPW5ldyBLcix0aGlzLm9uRXJyb3I9bmV3IEtyfXJ1bihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwp'@;
put 'e3JldHVybiBsKCl9cnVuVGFzayhsLGEsZCxoKXtyZXR1cm4gbC5hcHBseShhLGQpfX12YXIgZXA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FYXJseVJlYWQ9MF09IkVhcmx5UmVhZCIsY1tjLldyaXRlPTFdPSJXcml0ZSIsY1tjLk1peGVkUmVhZFdyaXRlPTJdPSJNaXhlZFJlYWRXcml0ZSIs'@;
put 'Y1tjLlJlYWQ9M109IlJlYWQiLGN9KGVwfHx7fSk7Y29uc3QgQlM9e2Rlc3Ryb3koKXt9fTtmdW5jdGlvbiBteShjLGwpeyFsJiZmdW5jdGlvbiBFZihjKXtpZighX3YoKSl0aHJvdyBuZXcgbnIoLTIwMywhMSl9KCk7Y29uc3QgYT1sPy5pbmplY3Rvcj8/aGkoRG8pO2lmKCFmdW5jdGlvbiB1'@;
put 'aChjKXtyZXR1cm4iYnJvd3NlciI9PT0oYz8/aGkoRG8pKS5nZXQoaXMpfShhKSlyZXR1cm4gQlM7XzIoIk5nQWZ0ZXJOZXh0UmVuZGVyIik7Y29uc3QgZD1hLmdldChFOCksaD1kLmhhbmRsZXI/Pz1uZXcgY0ksZj1sPy5waGFzZT8/ZXAuTWl4ZWRSZWFkV3JpdGUsdj0oKT0+e2gudW5yZWdp'@;
put 'c3RlcihJKSxNKCl9LE09YS5nZXQoRTUpLm9uRGVzdHJveSh2KSxJPUswKGEsKCk9Pm5ldyBsSShmLCgpPT57digpLGMoKX0pKTtyZXR1cm4gaC5yZWdpc3RlcihJKSx7ZGVzdHJveTp2fX1jbGFzcyBsSXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGhhc2U9bCx0aGlzLmNhbGxiYWNrRm49YSx0'@;
put 'aGlzLnpvbmU9aGkoR2EpLHRoaXMuZXJyb3JIYW5kbGVyPWhpKHYyLHtvcHRpb25hbDohMH0pLGhpKHB5LHtvcHRpb25hbDohMH0pPy5ub3RpZnkoMSl9aW52b2tlKCl7dHJ5e3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmNhbGxiYWNrRm4pfWNhdGNoKGwpe3RoaXMuZXJyb3JI'@;
put 'YW5kbGVyPy5oYW5kbGVFcnJvcihsKX19fWNsYXNzIGNJe2NvbnN0cnVjdG9yKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITEsdGhpcy5idWNrZXRzPXtbZXAuRWFybHlSZWFkXTpuZXcgU2V0LFtlcC5Xcml0ZV06bmV3IFNldCxbZXAuTWl4ZWRSZWFkV3JpdGVdOm5ldyBTZXQsW2VwLlJl'@;
put 'YWRdOm5ldyBTZXR9LHRoaXMuZGVmZXJyZWRDYWxsYmFja3M9bmV3IFNldH1yZWdpc3RlcihsKXsodGhpcy5leGVjdXRpbmdDYWxsYmFja3M/dGhpcy5kZWZlcnJlZENhbGxiYWNrczp0aGlzLmJ1Y2tldHNbbC5waGFzZV0pLmFkZChsKX11bnJlZ2lzdGVyKGwpe3RoaXMuYnVja2V0c1tsLnBo'@;
put 'YXNlXS5kZWxldGUobCksdGhpcy5kZWZlcnJlZENhbGxiYWNrcy5kZWxldGUobCl9ZXhlY3V0ZSgpe3RoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzPSEwO2Zvcihjb25zdCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5idWNrZXRzKSlmb3IoY29uc3QgYSBvZiBsKWEuaW52b2tlKCk7dGhpcy5leGVj'@;
put 'dXRpbmdDYWxsYmFja3M9ITE7Zm9yKGNvbnN0IGwgb2YgdGhpcy5kZWZlcnJlZENhbGxiYWNrcyl0aGlzLmJ1Y2tldHNbbC5waGFzZV0uYWRkKGwpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX1kZXN0cm95KCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tl'@;
put 'dHMpKWwuY2xlYXIoKTt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmNsZWFyKCl9fWxldCBFOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVyPW51bGwsdGhpcy5pbnRlcm5hbENhbGxiYWNrcz1bXX1leGVjdXRlKCl7dGhpcy5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3Mo'@;
put 'KSx0aGlzLmhhbmRsZXI/LmV4ZWN1dGUoKX1leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKXtjb25zdCBhPVsuLi50aGlzLmludGVybmFsQ2FsbGJhY2tzXTt0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wO2Zvcihjb25zdCBkIG9mIGEpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5oYW5k'@;
put 'bGVyPy5kZXN0cm95KCksdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5sZW5ndGg9MH1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB5eShj'@;
put 'LGwsYSl7bGV0IGQ9YT9jLnN0eWxlczpudWxsLGg9YT9jLmNsYXNzZXM6bnVsbCxmPTA7aWYobnVsbCE9PWwpZm9yKGxldCB2PTA7djxsLmxlbmd0aDt2Kyspe2NvbnN0IE09bFt2XTsibnVtYmVyIj09dHlwZW9mIE0/Zj1NOjE9PWY/aD1sZChoLE0pOjI9PWYmJihkPWxkKGQsTSsiOiAiK2xb'@;
put 'Kyt2XSsiOyIpKX1hP2Muc3R5bGVzPWQ6Yy5zdHlsZXNXaXRob3V0SG9zdD1kLGE/Yy5jbGFzc2VzPWg6Yy5jbGFzc2VzV2l0aG91dEhvc3Q9aH1jbGFzcyBoSSBleHRlbmRzIHo1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5'@;
put 'KGwpe2NvbnN0IGE9QnMobCk7cmV0dXJuIG5ldyBrOChhLHRoaXMubmdNb2R1bGUpfX1mdW5jdGlvbiBmSShjKXtjb25zdCBsPVtdO2Zvcihjb25zdCBhIGluIGMpe2lmKCFjLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9Y1thXTt2b2lkIDAhPT1kJiZsLnB1c2goe3Byb3BO'@;
put 'YW1lOkFycmF5LmlzQXJyYXkoZCk/ZFswXTpkLHRlbXBsYXRlTmFtZTphfSl9cmV0dXJuIGx9Y2xhc3MgYnl7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1uNShkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGws'@;
put 'SFMsZCk7cmV0dXJuIGghPT1IU3x8YT09PUhTP2g6dGhpcy5wYXJlbnRJbmplY3Rvci5nZXQobCxhLGQpfX1jbGFzcyBrOCBleHRlbmRzIG5Je2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD1mSShsLmlucHV0cyk7aWYobnVsbCE9'@;
put 'PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgucHJvcE5hbWUpJiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gZkkodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRo'@;
put 'aXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBXdyhjKXtyZXR1cm4gYy5tYXAoWncpLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50'@;
put 'U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMuaXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1fZShudWxsKTt0cnl7bGV0IHY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIHFsP2g6aD8uaW5qZWN0b3I7diYmbnVsbCE9PXRoaXMu'@;
put 'Y29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKHY9dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKHYpfHx2KTtjb25zdCBNPXY/bmV3IGJ5KGwsdik6bCxJPU0uZ2V0KHg4LG51bGwpO2lmKG51bGw9PT1JKXRocm93IG5ldyBucig0MDcsITEpO2NvbnN0'@;
put 'IEc9TS5nZXQoaHosbnVsbCkseWU9e3JlbmRlcmVyRmFjdG9yeTpJLHNhbml0aXplcjpHLGlubGluZUVmZmVjdFJ1bm5lcjpudWxsLGFmdGVyUmVuZGVyRXZlbnRNYW5hZ2VyOk0uZ2V0KEU4LG51bGwpLGNoYW5nZURldGVjdGlvblNjaGVkdWxlcjpNLmdldChweSxudWxsKX0sRWU9SS5jcmVh'@;
put 'dGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxCZT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLEdlPWQ/ZnVuY3Rpb24gY2ooYyxsLGEsZCl7Y29uc3QgZj1kLmdldChaaywhMSl8fGE9PT1xby5TaGFkb3dEb20sdj1jLnNlbGVjdFJvb3RFbGVtZW50'@;
put 'KGwsZik7cmV0dXJuIGZ1bmN0aW9uIHVqKGMpe2tEKGMpfSh2KSx2fShFZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sTSk6ejQoRWUsQmUsZnVuY3Rpb24gd3ooYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJzdmciOiJtYXRoIj09PWw/Im1h'@;
put 'dGgiOm51bGx9KEJlKSk7bGV0IHN0PTUxMjt0aGlzLmNvbXBvbmVudERlZi5zaWduYWxzP3N0fD00MDk2OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaHx8KHN0fD0xNik7bGV0IHB0PW51bGw7bnVsbCE9PUdlJiYocHQ9SEMoR2UsTSwhMCkpO2NvbnN0IGR0PXdTKDAsbnVsbCxudWxsLDEsMCxu'@;
put 'dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkscXQ9aXkobnVsbCxkdCxudWxsLHN0LG51bGwsbnVsbCx5ZSxFZSxNLG51bGwscHQpO2xldCBtbix3bjtLNihxdCk7dHJ5e2NvbnN0IGhuPXRoaXMuY29tcG9uZW50RGVmO2xldCBNbixNcj1udWxsO2huLmZpbmRIb3N0RGlyZWN0aXZlRGVm'@;
put 'cz8oTW49W10sTXI9bmV3IE1hcCxobi5maW5kSG9zdERpcmVjdGl2ZURlZnMoaG4sTW4sTXIpLE1uLnB1c2goaG4pKTpNbj1baG5dO2NvbnN0IGtyPWZ1bmN0aW9uIFN6KGMsbCl7Y29uc3QgYT1jW1hpXSxkPV9zO3JldHVybiBjW2RdPWwsTjUoYSxkLDIsIiNob3N0IixudWxsKX0ocXQsR2Up'@;
put 'LHFuPWZ1bmN0aW9uIE16KGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09aFtYaV07IWZ1bmN0aW9uIHh6KGMsbCxhLGQpe2Zvcihjb25zdCBoIG9mIGMpbC5tZXJnZWRBdHRycz1DZihsLm1lcmdlZEF0dHJzLGguaG9zdEF0dHJzKTtudWxsIT09bC5tZXJnZWRBdHRycyYmKHl5KGwsbC5tZXJnZWRB'@;
put 'dHRycywhMCksbnVsbCE9PWEmJnhEKGQsYSxsKSl9KGQsYyxsLHYpO2xldCBJPW51bGw7bnVsbCE9PWwmJihJPUhDKGwsaFtoY10pKTtjb25zdCBHPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHJlPTE2O2Euc2lnbmFscz9yZT00MDk2OmEub25QdXNoJiYocmU9'@;
put 'NjQpO2NvbnN0IHVlPWl5KGgsYXkoYSksbnVsbCxyZSxoW2MuaW5kZXhdLGMsZixHLG51bGwsbnVsbCxJKTtyZXR1cm4gTS5maXJzdENyZWF0ZVBhc3MmJk1TKE0sYyxkLmxlbmd0aC0xKSxmOChoLHVlKSxoW2MuaW5kZXhdPXVlfShrcixHZSxobixNbixxdCx5ZSxFZSk7d249WTYoZHQsX3Mp'@;
put 'LEdlJiZmdW5jdGlvbiBUeihjLGwsYSxkKXtpZihkKW00KGMsYSxbIm5nLXZlcnNpb24iLCIxNy4zLjEyIl0pO2Vsc2V7Y29uc3R7YXR0cnM6aCxjbGFzc2VzOmZ9PWZ1bmN0aW9uIFhhKGMpe2NvbnN0IGw9W10sYT1bXTtsZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2Rd'@;
put 'O2lmKCJzdHJpbmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwucHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCFDYyhoKSlicmVhaztoPWZ9ZCsrfXJldHVybnthdHRyczpsLGNsYXNzZXM6YX19KGwuc2VsZWN0b3JzWzBdKTtoJiZtNChjLGEsaCksZiYmZi5sZW5n'@;
put 'dGg+MCYmTUQoYyxhLGYuam9pbigiICIpKX19KEVlLGhuLEdlLGQpLHZvaWQgMCE9PWEmJmZ1bmN0aW9uIEF6KGMsbCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mP0FycmF5LmZyb20oZik6'@;
put 'bnVsbCl9fSh3bix0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxhKSxtbj1mdW5jdGlvbiBFeihjLGwsYSxkLGgsZil7Y29uc3Qgdj1vbCgpLE09aFtYaV0sST1JMCh2LGgpO1NTKE0saCx2LGEsbnVsbCxkKTtmb3IobGV0IHJlPTA7cmU8YS5sZW5ndGg7cmUrKylOdShENChoLE0sdi5kaXJlY3Rp'@;
put 'dmVTdGFydCtyZSx2KSxoKTtIRChNLGgsdiksSSYmTnUoSSxoKTtjb25zdCBHPUQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K3YuY29tcG9uZW50T2Zmc2V0LHYpO2lmKGNbc2xdPWhbc2xdPUcsbnVsbCE9PWYpZm9yKGNvbnN0IHJlIG9mIGYpcmUoRyxsKTtyZXR1cm4geVMoTSx2LGgpLEd9KHFu'@;
put 'LGhuLE1uLE1yLHF0LFtrel0pLEFTKGR0LHF0LG51bGwpfWZpbmFsbHl7eTUoKX1yZXR1cm4gbmV3IEN6KHRoaXMuY29tcG9uZW50VHlwZSxtbixMNCh3bixxdCkscXQsd24pfWZpbmFsbHl7X2UoZil9fX1jbGFzcyBDeiBleHRlbmRzIG96e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIo'@;
put 'KSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhpcy5fdE5vZGU9Zix0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBfOChoLHZvaWQgMCwhMSksdGhpcy5jb21wb25l'@;
put 'bnRUeXBlPWx9c2V0SW5wdXQobCxhKXtjb25zdCBkPXRoaXMuX3ROb2RlLmlucHV0cztsZXQgaDtpZihudWxsIT09ZCYmKGg9ZFtsXSkpe2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhsKSYmT2JqZWN0LmlzKHRoaXMu'@;
put 'cHJldmlvdXNJbnB1dFZhbHVlcy5nZXQobCksYSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5fcm9vdExWaWV3O1RTKGZbWGldLGYsaCxsLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQobCxhKSxiOChQMSh0aGlzLl90Tm9kZS5pbmRleCxmKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBu'@;
put 'ZXcgSHUodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGwpfX1mdW5jdGlvbiBreigpe2NvbnN0IGM9b2woKTtBdihjaSgpW1hpXSxjKX1sZXQgVHM9KCgpPT57'@;
put 'Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1Een19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIER6KCl7cmV0dXJuIG1JKG9sKCksY2koKSl9Y29uc3QgSXo9VHMscEk9Y2xhc3MgZXh0ZW5kcyBJentjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVy'@;
put 'PWwsdGhpcy5faG9zdFROb2RlPWEsdGhpcy5faG9zdExWaWV3PWR9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gTDQodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBIdSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFy'@;
put 'ZW50SW5qZWN0b3IoKXtjb25zdCBsPWI1KHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpO2lmKEl2KGwpKXtjb25zdCBhPUo2KGwsdGhpcy5faG9zdExWaWV3KSxkPXE2KGwpO3JldHVybiBuZXcgSHUoYVtYaV0uZGF0YVtkKzhdLGEpfXJldHVybiBuZXcgSHUobnVsbCx0aGlzLl9o'@;
put 'b3N0TFZpZXcpfWNsZWFyKCl7Zm9yKDt0aGlzLmxlbmd0aD4wOyl0aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKX1nZXQobCl7Y29uc3QgYT1nSSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWEmJmFbbF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVy'@;
put 'Lmxlbmd0aC1mY31jcmVhdGVFbWJlZGRlZFZpZXcobCxhLGQpe2xldCBoLGY7Im51bWJlciI9PXR5cGVvZiBkP2g9ZDpudWxsIT1kJiYoaD1kLmluZGV4LGY9ZC5pbmplY3Rvcik7Y29uc3QgTT1sLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoYXx8e30sZixudWxsKTtyZXR1cm4gdGhpcy5pbnNl'@;
put 'cnRJbXBsKE0saCxCNSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLE19Y3JlYXRlQ29tcG9uZW50KGwsYSxkLGgsZil7Y29uc3Qgdj1sJiYhZnVuY3Rpb24gemkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9KGwpO2xldCBNO2lmKHYpTT1hO2Vsc2V7Y29uc3QgQmU9YXx8e307TT1CZS5p'@;
put 'bmRleCxkPUJlLmluamVjdG9yLGg9QmUucHJvamVjdGFibGVOb2RlcyxmPUJlLmVudmlyb25tZW50SW5qZWN0b3J8fEJlLm5nTW9kdWxlUmVmfWNvbnN0IEk9dj9sOm5ldyBrOChCcyhsKSksRz1kfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFmJiZudWxsPT1JLm5nTW9kdWxlKXtjb25zdCBH'@;
put 'ZT0odj9HOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChxbCxudWxsKTtHZSYmKGY9R2UpfUJzKEkuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IEVlPUkuY3JlYXRlKEcsaCxudWxsLGYpO3JldHVybiB0aGlzLmluc2VydEltcGwoRWUuaG9zdFZpZXcsTSxCNSh0aGlzLl9ob3N0VE5vZGUsbnVs'@;
put 'bCkpLEVlfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydEltcGwobCxhLCEwKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3O2lmKGZ1bmN0aW9uIHRrKGMpe3JldHVybiBPdShjW2RjXSl9KGgpKXtjb25zdCBNPXRoaXMuaW5kZXhPZihsKTtpZigtMSE9PU0pdGhpcy5k'@;
put 'ZXRhY2goTSk7ZWxzZXtjb25zdCBJPWhbZGNdLEc9bmV3IHBJKEksSVtuY10sSVtkY10pO0cuZGV0YWNoKEcuaW5kZXhPZihsKSl9fWNvbnN0IGY9dGhpcy5fYWRqdXN0SW5kZXgoYSksdj10aGlzLl9sQ29udGFpbmVyO3JldHVybiB2OCh2LGgsZixkKSxsLmF0dGFjaFRvVmlld0NvbnRhaW5l'@;
put 'clJlZigpLFJsKFpTKHYpLGYsbCksbH1tb3ZlKGwsYSl7cmV0dXJuIHRoaXMuaW5zZXJ0KGwsYSl9aW5kZXhPZihsKXtjb25zdCBhPWdJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YT9hLmluZGV4T2YobCk6LTF9cmVtb3ZlKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgo'@;
put 'bCwtMSksZD1vOCh0aGlzLl9sQ29udGFpbmVyLGEpO2QmJihJdShaUyh0aGlzLl9sQ29udGFpbmVyKSxhKSxVNChkW1hpXSxkKSl9ZGV0YWNoKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1vOCh0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBkJiZudWxsIT1JdShaUyh0'@;
put 'aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgXzgoZCk6bnVsbH1fYWRqdXN0SW5kZXgobCxhPTApe3JldHVybiBsPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24gZ0koYyl7cmV0dXJuIGNbOF19ZnVuY3Rpb24gWlMoYyl7cmV0dXJuIGNbOF18fChjWzhdPVtdKX1mdW5jdGlvbiBtSShjLGwpe2xl'@;
put 'dCBhO2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gT3UoZCk/YT1kOihhPUVTKGQsbCxudWxsLGMpLGxbYy5pbmRleF09YSxmOChsLGEpKSxXUyhhLGwsYyxkKSxuZXcgcEkoYSxjLGwpfWxldCBXUz1mdW5jdGlvbiBZUyhjLGwsYSxkKXtpZihjW2Z1XSlyZXR1cm47bGV0IGg7aD04JmEudHlw'@;
put 'ZT9fbChkKTpmdW5jdGlvbiBSeihjLGwpe2NvbnN0IGE9Y1t2c10sZD1hLmNyZWF0ZUNvbW1lbnQoIiIpLGg9STAobCxjKTtyZXR1cm4gWjQoYSxxMyhhLGgpLGQsZnVuY3Rpb24gdVMoYyxsKXtyZXR1cm4gYy5uZXh0U2libGluZyhsKX0oYSxoKSwhMSksZH0obCxhKSxjW2Z1XT1ofSxfeT0o'@;
put 'KT0+ITE7Y2xhc3MgR1N7Y29uc3RydWN0b3IobCl7dGhpcy5xdWVyeUxpc3Q9bCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgR1ModGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19Y2xhc3Mgd3l7Y29uc3RydWN0b3IobD1b'@;
put 'XSl7dGhpcy5xdWVyaWVzPWx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwpe2NvbnN0IGE9bC5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPW51bGwhPT1sLmNvbnRlbnRRdWVyaWVzP2wuY29udGVudFF1ZXJpZXNbMF06YS5sZW5ndGgsaD1bXTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtjb25zdCB2'@;
put 'PWEuZ2V0QnlJbmRleChmKTtoLnB1c2godGhpcy5xdWVyaWVzW3YuaW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyB3eShoKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGV0YWNoVmlldyhsKXt0aGlz'@;
put 'LmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWZpbmlzaFZpZXdDcmVhdGlvbihsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PXFTKGwsYSkubWF0'@;
put 'Y2hlcyYmdGhpcy5xdWVyaWVzW2FdLnNldERpcnR5KCl9fWNsYXNzIHZJe2NvbnN0cnVjdG9yKGwsYSxkPW51bGwpe3RoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZCx0aGlzLnByZWRpY2F0ZT0ic3RyaW5nIj09dHlwZW9mIGw/ZnVuY3Rpb24gQ0koYyl7cmV0dXJuIGMuc3BsaXQoIiwiKS5tYXAo'@;
put 'bD0+bC50cmltKCkpfShsKTpsfX1jbGFzcyAkU3tjb25zdHJ1Y3RvcihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1lbGVtZW50U3RhcnQobCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS5lbGVtZW50U3RhcnQobCxhKX1lbGVtZW50RW5kKGwp'@;
put 'e2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspdGhpcy5xdWVyaWVzW2FdLmVsZW1lbnRFbmQobCl9ZW1iZWRkZWRUVmlldyhsKXtsZXQgYT1udWxsO2ZvcihsZXQgZD0wO2Q8dGhpcy5sZW5ndGg7ZCsrKXtjb25zdCBoPW51bGwhPT1hP2EubGVuZ3RoOjAsZj10aGlzLmdl'@;
put 'dEJ5SW5kZXgoZCkuZW1iZWRkZWRUVmlldyhsLGgpO2YmJihmLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9ZCxudWxsIT09YT9hLnB1c2goZik6YT1bZl0pfXJldHVybiBudWxsIT09YT9uZXcgJFMoYSk6bnVsbH10ZW1wbGF0ZShsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0'@;
put 'aDtkKyspdGhpcy5xdWVyaWVzW2RdLnRlbXBsYXRlKGwsYSl9Z2V0QnlJbmRleChsKXtyZXR1cm4gdGhpcy5xdWVyaWVzW2xdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayhsKXt0aGlzLnF1ZXJpZXMucHVzaChsKX19Y2xhc3MgS1N7Y29uc3RydWN0b3Io'@;
put 'bCxhPS0xKXt0aGlzLm1ldGFkYXRhPWwsdGhpcy5tYXRjaGVzPW51bGwsdGhpcy5pbmRleEluRGVjbGFyYXRpb25WaWV3PS0xLHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITEsdGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITAsdGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9YX1lbGVtZW50U3Rh'@;
put 'cnQobCxhKXt0aGlzLmlzQXBwbHlpbmdUb05vZGUoYSkmJnRoaXMubWF0Y2hUTm9kZShsLGEpfWVsZW1lbnRFbmQobCl7dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9PT1sLmluZGV4JiYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITEpfXRlbXBsYXRlKGwsYSl7dGhpcy5lbGVtZW50U3Rh'@;
put 'cnQobCxhKX1lbWJlZGRlZFRWaWV3KGwsYSl7cmV0dXJuIHRoaXMuaXNBcHBseWluZ1RvTm9kZShsKT8odGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMCx0aGlzLmFkZE1hdGNoKC1sLmluZGV4LGEpLG5ldyBLUyh0aGlzLm1ldGFkYXRhKSk6bnVsbH1pc0FwcGx5aW5nVG9Ob2RlKGwpe2lmKHRo'@;
put 'aXMuX2FwcGxpZXNUb05leHROb2RlJiYxJn50aGlzLm1ldGFkYXRhLmZsYWdzKXtjb25zdCBhPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4O2xldCBkPWwucGFyZW50O2Zvcig7bnVsbCE9PWQmJjgmZC50eXBlJiZkLmluZGV4IT09YTspZD1kLnBhcmVudDtyZXR1cm4gYT09PShudWxsIT09'@;
put 'ZD9kLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShkKSlmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO3RoaXMubWF0Y2hU'@;
put 'Tm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxGeihhLGYpKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsRnYoYSxsLGYsITEsITEpKX1lbHNlIGQ9PT13bD80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVh'@;
put 'ZE9wdGlvbihsLGEsRnYoYSxsLGQsITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09UWl8fGg9PT1Uc3x8aD09PXdsJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEu'@;
put 'aW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1GdihhLGwsaCwhMSwhMSk7bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1h'@;
put 'dGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBGeihjLGwpe2NvbnN0IGE9Yy5sb2NhbE5hbWVzO2lmKG51bGwhPT1hKWZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCs9MilpZihhW2RdPT09bClyZXR1cm4gYVtkKzFdO3JldHVybiBudWxsfWZ1bmN0aW9uIEh6KGMsbCxhLGQpe3JldHVybi0xPT09'@;
put 'YT9mdW5jdGlvbiB5SShjLGwpe3JldHVybiAxMSZjLnR5cGU/TDQoYyxsKTo0JmMudHlwZT9jeShjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIFhTKGMsbCxhKXtyZXR1cm4gYT09PVFpP0w0KGwsYyk6YT09PXdsP2N5KGwsYyk6YT09PVRzP21JKGwsYyk6dm9pZCAwfShjLGwsZCk6'@;
put 'RDQoYyxjW1hpXSxhLGwpfWZ1bmN0aW9uIFU1KGMsbCxhLGQpe2NvbnN0IGg9bFtoZF0ucXVlcmllc1tkXTtpZihudWxsPT09aC5tYXRjaGVzKXtjb25zdCBmPWMuZGF0YSx2PWEubWF0Y2hlcyxNPVtdO2ZvcihsZXQgST0wO251bGwhPT12JiZJPHYubGVuZ3RoO0krPTIpe2NvbnN0IEc9dltJ'@;
put 'XTtNLnB1c2goRzwwP251bGw6SHoobCxmW0ddLHZbSSsxXSxhLm1ldGFkYXRhLnJlYWQpKX1oLm1hdGNoZXM9TX1yZXR1cm4gaC5tYXRjaGVzfWZ1bmN0aW9uIEQ4KGMsbCxhLGQpe2NvbnN0IGg9Yy5xdWVyaWVzLmdldEJ5SW5kZXgoYSksZj1oLm1hdGNoZXM7aWYobnVsbCE9PWYpe2NvbnN0'@;
put 'IHY9VTUoYyxsLGgsYSk7Zm9yKGxldCBNPTA7TTxmLmxlbmd0aDtNKz0yKXtjb25zdCBJPWZbTV07aWYoST4wKWQucHVzaCh2W00vMl0pO2Vsc2V7Y29uc3QgRz1mW00rMV0scmU9bFstSV07Zm9yKGxldCB1ZT1mYzt1ZTxyZS5sZW5ndGg7dWUrKyl7Y29uc3QgeWU9cmVbdWVdO3llW1M0XT09'@;
put 'PXllW2RjXSYmRDgoeWVbWGldLHllLEcsZCl9aWYobnVsbCE9PXJlW0IzXSl7Y29uc3QgdWU9cmVbQjNdO2ZvcihsZXQgeWU9MDt5ZTx1ZS5sZW5ndGg7eWUrKyl7Y29uc3QgRWU9dWVbeWVdO0Q4KEVlW1hpXSxFZSxHLGQpfX19fX1yZXR1cm4gZH1mdW5jdGlvbiBiSShjLGwsYSl7Y29uc3Qg'@;
put 'ZD1uZXcgbGgoISg0Jn5hKSk7cmV0dXJuIGZ1bmN0aW9uIFJEKGMsbCxhLGQpe2NvbnN0IGg9akQobCk7aC5wdXNoKGEpLGMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKS5wdXNoKGQsaC5sZW5ndGgtMSl9KGMsbCxkLGQuZGVzdHJveSksKGxbaGRdPz89bmV3IHd5KS5xdWVyaWVzLnB1c2gobmV3'@;
put 'IEdTKGQpKS0xfWZ1bmN0aW9uIFNJKGMsbCxhKXtudWxsPT09Yy5xdWVyaWVzJiYoYy5xdWVyaWVzPW5ldyAkUyksYy5xdWVyaWVzLnRyYWNrKG5ldyBLUyhsLGEpKX1mdW5jdGlvbiBxUyhjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBNSShjLGwpe2NvbnN0'@;
put 'IGE9Y1tYaV0sZD1xUyhhLGwpO3JldHVybiBkLmNyb3NzZXNOZ1RlbXBsYXRlP0Q4KGEsYyxsLFtdKTpVNShhLGMsZCxsKX1mdW5jdGlvbiBFSShjKXtyZXR1cm4gZnVuY3Rpb24gQ3koYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJnZvaWQgMCE9PWNbZ2VdfShjKSYmImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGMuc2V0fWZ1bmN0aW9uIENhKGMpe2xldCBsPWZ1bmN0aW9uIG5NKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoSGMoYykpaD1sLlx1MDI3'@;
put 'NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0aHJvdyBuZXcgbnIoOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVzaChoKTtjb25zdCB2PWM7di5pbnB1dHM9UDgoYy5pbnB1dHMpLHYuaW5wdXRUcmFuc2Zvcm1zPVA4KGMuaW5wdXRUcmFuc2Zvcm1z'@;
put 'KSx2LmRlY2xhcmVkSW5wdXRzPVA4KGMuZGVjbGFyZWRJbnB1dHMpLHYub3V0cHV0cz1QOChjLm91dHB1dHMpO2NvbnN0IE09aC5ob3N0QmluZGluZ3M7TSYmVmYoYyxNKTtjb25zdCBJPWgudmlld1F1ZXJ5LEc9aC5jb250ZW50UXVlcmllcztpZihJJiZQSShjLEkpLEcmJiR6KGMsRyksT0ko'@;
put 'YyxoKSxEdShjLm91dHB1dHMsaC5vdXRwdXRzKSxIYyhoKSYmaC5kYXRhLmFuaW1hdGlvbil7Y29uc3QgcmU9Yy5kYXRhO3JlLmFuaW1hdGlvbj0ocmUuYW5pbWF0aW9ufHxbXSkuY29uY2F0KGguZGF0YS5hbmltYXRpb24pfX1jb25zdCBmPWguZmVhdHVyZXM7aWYoZilmb3IobGV0IHY9MDt2'@;
put 'PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdO00mJk0ubmdJbmhlcml0JiZNKGMpLE09PT1DYSYmKGE9ITEpfX1sPU9iamVjdC5nZXRQcm90b3R5cGVPZihsKX0hZnVuY3Rpb24gR3ooYyl7bGV0IGw9MCxhPW51bGw7Zm9yKGxldCBkPWMubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9Y1tk'@;
put 'XTtoLmhvc3RWYXJzPWwrPWguaG9zdFZhcnMsaC5ob3N0QXR0cnM9Q2YoaC5ob3N0QXR0cnMsYT1DZihhLGguaG9zdEF0dHJzKSl9fShkKX1mdW5jdGlvbiBPSShjLGwpe2Zvcihjb25zdCBhIGluIGwuaW5wdXRzKXtpZighbC5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSl8fGMuaW5wdXRzLmhh'@;
put 'c093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9bC5pbnB1dHNbYV07aWYodm9pZCAwIT09ZCYmKGMuaW5wdXRzW2FdPWQsYy5kZWNsYXJlZElucHV0c1thXT1sLmRlY2xhcmVkSW5wdXRzW2FdLG51bGwhPT1sLmlucHV0VHJhbnNmb3Jtcykpe2NvbnN0IGg9QXJyYXkuaXNBcnJheShk'@;
put 'KT9kWzBdOmQ7aWYoIWwuaW5wdXRUcmFuc2Zvcm1zLmhhc093blByb3BlcnR5KGgpKWNvbnRpbnVlO2MuaW5wdXRUcmFuc2Zvcm1zPz89e30sYy5pbnB1dFRyYW5zZm9ybXNbaF09bC5pbnB1dFRyYW5zZm9ybXNbaF19fX1mdW5jdGlvbiBQOChjKXtyZXR1cm4gYz09PWswP3t9OmM9PT1Kcz9b'@;
put 'XTpjfWZ1bmN0aW9uIFBJKGMsbCl7Y29uc3QgYT1jLnZpZXdRdWVyeTtjLnZpZXdRdWVyeT1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiAkeihjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztjLmNvbnRlbnRRdWVyaWVzPWE/KGQsaCxmKT0+e2woZCxoLGYpLGEoZCxo'@;
put 'LGYpfTpsfWZ1bmN0aW9uIFZmKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5ncztjLmhvc3RCaW5kaW5ncz1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiB5ZChjKXtjb25zdCBsPWE9Pntjb25zdCBkPShBcnJheS5pc0FycmF5KGMpP2M6YygpKS5tYXAoaD0+ImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGg/e2RpcmVjdGl2ZTpHaShoKSxpbnB1dHM6azAsb3V0cHV0czprMH06e2RpcmVjdGl2ZTpHaShoLmRpcmVjdGl2ZSksaW5wdXRzOkhJKGguaW5wdXRzKSxvdXRwdXRzOkhJKGgub3V0cHV0cyl9KTtudWxsPT09YS5ob3N0RGlyZWN0aXZlcz8oYS5maW5kSG9zdERpcmVjdGl2'@;
put 'ZURlZnM9RkksYS5ob3N0RGlyZWN0aXZlcz1kKTphLmhvc3REaXJlY3RpdmVzLnVuc2hpZnQoLi4uZCl9O3JldHVybiBsLm5nSW5oZXJpdD0hMCxsfWZ1bmN0aW9uIEZJKGMsbCxhKXtpZihudWxsIT09Yy5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgZCBvZiBjLmhvc3REaXJlY3RpdmVzKXtj'@;
put 'b25zdCBoPVNjKGQuZGlyZWN0aXZlKTtKeihoLmRlY2xhcmVkSW5wdXRzLGQuaW5wdXRzKSxGSShoLGwsYSksYS5zZXQoaCxkKSxsLnB1c2goaCl9fWZ1bmN0aW9uIEhJKGMpe2lmKHZvaWQgMD09PWN8fDA9PT1jLmxlbmd0aClyZXR1cm4gazA7Y29uc3QgbD17fTtmb3IobGV0IGE9MDthPGMu'@;
put 'bGVuZ3RoO2ErPTIpbFtjW2FdXT1jW2ErMV07cmV0dXJuIGx9ZnVuY3Rpb24gSnooYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJihjW2xbYV1dPWNbYV0pfWZ1bmN0aW9uIHpsKGMpe2NvbnN0IGw9Yy5pbnB1dENvbmZpZyxhPXt9O2Zvcihjb25zdCBkIGluIGwp'@;
put 'aWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO0FycmF5LmlzQXJyYXkoaCkmJmhbM10mJihhW2RdPWhbM10pfWMuaW5wdXRUcmFuc2Zvcm1zPWF9Y2xhc3MgcnB7fWNsYXNzIHBje31jbGFzcyBBeSBleHRlbmRzIHJwe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMu'@;
put 'X3BhcmVudD1hLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10sdGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBoSSh0aGlzKTtjb25zdCBoPVJ1KGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9SDEoaC5ib290c3RyYXApLHRoaXMuX3Iz'@;
put 'SW5qZWN0b3I9UjQobCxhLFt7cHJvdmlkZTpycCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTp6NSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sSHIobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSx0aGlzLl9yM0luamVjdG9yLnJlc29sdmVJbmplY3Rv'@;
put 'ckluaXRpYWxpemVycygpLHRoaXMuaW5zdGFuY2U9dGhpcy5fcjNJbmplY3Rvci5nZXQobCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5kZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJv'@;
put 'eUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBreSBleHRlbmRzIHBje2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPWx9Y3JlYXRlKGwpe3JldHVybiBuZXcgQXko'@;
put 'dGhpcy5tb2R1bGVUeXBlLGwsW10pfX1jbGFzcyBGOCBleHRlbmRzIHJwe2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGhJKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtjb25zdCBhPW5ldyBkZChbLi4ubC5wcm92aWRlcnMse3Byb3Zp'@;
put 'ZGU6cnAsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6ejUsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxsLnBhcmVudHx8TjMoKSxsLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9YSxsLnJ1bkVudmlyb25tZW50SW5pdGlh'@;
put 'bGl6ZXJzJiZhLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIEc0KGMsbCxhPW51bGwpe3JldHVybiBuZXcgRjgoe3Byb3ZpZGVyczpj'@;
put 'LHBhcmVudDpsLGRlYnVnTmFtZTphLHJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IEJmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnRhc2tJZD0wLHRoaXMucGVuZGluZ1Rhc2tzPW5ldyBTZXQsdGhpcy5oYXNQZW5kaW5nVGFza3M9bmV3IEpy'@;
put 'KCExKX1nZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLmhhc1BlbmRpbmdUYXNrcy52YWx1ZX1hZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFz'@;
put 'a3MuYWRkKGEpLGF9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tzLmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNs'@;
put 'ZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'LHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBEeShjKXtyZXR1cm4hIXJNKGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShjIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIHJNKGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1bmN0aW9uIHcyKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIE5jKGMsbCxhKXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIGlwKGMsbCxhLGQpe2NvbnN0IGg9TmMoYyxsLGEp'@;
put 'O3JldHVybiBOYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBSeShjLGwsYSxkLGgpe2NvbnN0IGY9aXAoYyxsLGEsZCk7cmV0dXJuIE5jKGMsbCsyLGgpfHxmfWZ1bmN0aW9uIGJkKGMsbCxhLGQsaCxmKXtjb25zdCB2PWlwKGMsbCxhLGQpO3JldHVybiBpcChjLGwrMixoLGYpfHx2fWZ1bmN0aW9u'@;
put 'IGd0KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgST1jaSgpLEc9c28oKSxyZT1jK19zLHVlPUcuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIGlNKGMsbCxhLGQsaCxmLHYsTSxJKXtjb25zdCBHPWwuY29uc3RzLHJlPU41KGwsYyw0LHZ8fG51bGwsZjIoRyxNKSk7Q1MobCxhLHJlLGYyKEcsSSkp'@;
put 'LEF2KGwscmUpO2NvbnN0IHVlPXJlLnRWaWV3PXdTKDIscmUsZCxoLGYsbC5kaXJlY3RpdmVSZWdpc3RyeSxsLnBpcGVSZWdpc3RyeSxudWxsLGwuc2NoZW1hcyxHLG51bGwpO3JldHVybiBudWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscmUpLHVlLnF1ZXJpZXM9bC5x'@;
put 'dWVyaWVzLmVtYmVkZGVkVFZpZXcocmUpKSxyZX0ocmUsRyxJLGwsYSxkLGgsZix2KTpHLmRhdGFbcmVdO3AyKHVlLCExKTtjb25zdCB5ZT16SShHLEksdWUsYyk7WDYoKSYmczAoRyxJLHllLHVlKSxOdSh5ZSxJKTtjb25zdCBFZT1FUyh5ZSxJLHllLHVlKTtyZXR1cm4gSVtyZV09RWUsZjgo'@;
put 'SSxFZSksZnVuY3Rpb24gUDAoYyxsLGEpe3JldHVybiBfeShjLGwsYSl9KEVlLHVlLEkpLHEwKHVlKSYmYlMoRyxJLHVlKSxudWxsIT12JiZfUyhJLHVlLE0pLGd0fWxldCB6ST1mdW5jdGlvbiBhTShjLGwsYSxkKXtyZXR1cm4gZzIoITApLGxbdnNdLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5j'@;
put 'dGlvbiBocihjLGwsYSxkKXtjb25zdCBoPWNpKCk7cmV0dXJuIE5jKGgsYWgoKSxsKSYmKHNvKCksZGgoSm8oKSxoLGMsbCxhLGQpKSxocn1mdW5jdGlvbiBVbChjLGwsYSxkKXtyZXR1cm4gTmMoYyxhaCgpLGEpP2wrU2EoYSkrZDpMc31mdW5jdGlvbiBHcyhjLGwpe3JldHVybiBjPDwxN3xs'@;
put 'PDwyfWZ1bmN0aW9uIFNsKGMpe3JldHVybiBjPj4xNyYzMjc2N31mdW5jdGlvbiBqZihjKXtyZXR1cm4gMnxjfWZ1bmN0aW9uIF9kKGMpe3JldHVybigxMzEwNjgmYyk+PjJ9ZnVuY3Rpb24gcG4oYyxsKXtyZXR1cm4tMTMxMDY5JmN8bDw8Mn1mdW5jdGlvbiBfbihjKXtyZXR1cm4gMXxjfWZ1'@;
put 'bmN0aW9uIF9yKGMsbCxhLGQpe2NvbnN0IGg9Y1thKzFdLGY9bnVsbD09PWw7bGV0IHY9ZD9TbChoKTpfZChoKSxNPSExO2Zvcig7MCE9PXYmJighMT09PU18fGYpOyl7Y29uc3QgRz1jW3YrMV07WnIoY1t2XSxsKSYmKE09ITAsY1t2KzFdPWQ/X24oRyk6amYoRykpLHY9ZD9TbChHKTpfZChH'@;
put 'KX1NJiYoY1thKzFdPWQ/amYoaCk6X24oaCkpfWZ1bmN0aW9uIFpyKGMsbCl7cmV0dXJuIG51bGw9PT1jfHxudWxsPT1sfHwoQXJyYXkuaXNBcnJheShjKT9jWzFdOmMpPT09bHx8ISghQXJyYXkuaXNBcnJheShjKXx8InN0cmluZyIhPXR5cGVvZiBsKSYmbjIoYyxsKT49MH1jb25zdCBpaT17'@;
put 'dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVFbmQ6MH07ZnVuY3Rpb24gdGkoYyl7cmV0dXJuIGMuc3Vic3RyaW5nKGlpLmtleSxpaS5rZXlFbmQpfWZ1bmN0aW9uIG5zKGMsbCl7Y29uc3QgYT1paS50ZXh0RW5kO3JldHVybiBhPT09bD8tMToobD1paS5rZXlFbmQ9ZnVu'@;
put 'Y3Rpb24gbjEoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk+MzI7KWwrKztyZXR1cm4gbH0oYyxpaS5rZXk9bCxhKSxNbyhjLGwsYSkpfWZ1bmN0aW9uIE1vKGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPD0zMjspbCsrO3JldHVybiBsfWZ1bmN0aW9uIE1lKGMsbCxh'@;
put 'KXtjb25zdCBkPWNpKCk7cmV0dXJuIE5jKGQsYWgoKSxsKSYmTzAoc28oKSxKbygpLGQsYyxsLGRbdnNdLGEsITEpLE1lfWZ1bmN0aW9uIGZoKGMsbCxhLGQsaCl7Y29uc3Qgdj1oPyJjbGFzcyI6InN0eWxlIjtUUyhjLGEsbC5pbnB1dHNbdl0sdixkKX1mdW5jdGlvbiBOMShjLGwsYSl7cmV0'@;
put 'dXJuIHpmKGMsbCxhLCExKSxOMX1mdW5jdGlvbiBUcihjLGwpe3JldHVybiB6ZihjLGwsbnVsbCwhMCksVHJ9ZnVuY3Rpb24gc3AoYyxsKXtmb3IobGV0IGE9ZnVuY3Rpb24gVWkoYyl7cmV0dXJuIGZ1bmN0aW9uIEFzKGMpe2lpLmtleT0wLGlpLmtleUVuZD0wLGlpLnZhbHVlPTAsaWkudmFs'@;
put 'dWVFbmQ9MCxpaS50ZXh0RW5kPWMubGVuZ3RofShjKSxucyhjLE1vKGMsMCxpaS50ZXh0RW5kKSl9KGwpO2E+PTA7YT1ucyhsLGEpKXYwKGMsdGkobCksITApfWZ1bmN0aW9uIHpmKGMsbCxhLGQpe2NvbnN0IGg9Y2koKSxmPXNvKCksdj1MZigyKTtmLmZpcnN0VXBkYXRlUGFzcyYmbXJlKGYs'@;
put 'Yyx2LGQpLGwhPT1McyYmTmMoaCx2LGwpJiZ5cmUoZixmLmRhdGFbRnUoKV0saCxoW3ZzXSxjLGhbdisxXT1mdW5jdGlvbiB5OWUoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jfHwoInN0cmluZyI9PXR5cGVvZiBsP2MrPWw6Im9iamVjdCI9PXR5cGVvZiBjJiYoYz1Icih5MihjKSkpKSxj'@;
put 'fShsLGEpLGQsdil9ZnVuY3Rpb24gZ3JlKGMsbCl7cmV0dXJuIGw+PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gbXJlKGMsbCxhLGQpe2NvbnN0IGg9Yy5kYXRhO2lmKG51bGw9PT1oW2ErMV0pe2NvbnN0IGY9aFtGdSgpXSx2PWdyZShjLGEpO19yZShmLGQpJiZudWxsPT09bCYmIXYm'@;
put 'JihsPSExKSxsPWZ1bmN0aW9uIGQ5ZShjLGwsYSxkKXtjb25zdCBoPWhDKGMpO2xldCBmPWQ/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09aCkwPT09KGQ/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncykmJihhPWRNKGE9b1UobnVsbCxjLGwsYSxk'@;
put 'KSxsLmF0dHJzLGQpLGY9bnVsbCk7ZWxzZXtjb25zdCB2PWwuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT12fHxjW3ZdIT09aClpZihhPW9VKGgsYyxsLGEsZCksbnVsbD09PWYpe2xldCBJPWZ1bmN0aW9uIGg5ZShjLGwsYSl7Y29uc3QgZD1hP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxl'@;
put 'QmluZGluZ3M7aWYoMCE9PV9kKGQpKXJldHVybiBjW1NsKGQpXX0oYyxsLGQpO3ZvaWQgMCE9PUkmJkFycmF5LmlzQXJyYXkoSSkmJihJPW9VKG51bGwsYyxsLElbMV0sZCksST1kTShJLGwuYXR0cnMsZCksZnVuY3Rpb24gZjllKGMsbCxhLGQpe2NbU2woYT9sLmNsYXNzQmluZGluZ3M6bC5z'@;
put 'dHlsZUJpbmRpbmdzKV09ZH0oYyxsLGQsSSkpfWVsc2UgZj1mdW5jdGlvbiBwOWUoYyxsLGEpe2xldCBkO2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPTErbC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmPGg7ZisrKWQ9ZE0oZCxjW2ZdLmhvc3RBdHRycyxhKTtyZXR1cm4gZE0oZCxs'@;
put 'LmF0dHJzLGEpfShjLGwsZCl9cmV0dXJuIHZvaWQgMCE9PWYmJihkP2wucmVzaWR1YWxDbGFzc2VzPWY6bC5yZXNpZHVhbFN0eWxlcz1mKSxhfShoLGYsbCxkKSxmdW5jdGlvbiBTbihjLGwsYSxkLGgsZil7bGV0IHY9Zj9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzLE09U2wodiks'@;
put 'ST1fZCh2KTtjW2RdPWE7bGV0IHJlLEc9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8ocmU9YVsxXSwobnVsbD09PXJlfHxuMihhLHJlKT4wKSYmKEc9ITApKTpyZT1hLGgpaWYoMCE9PUkpe2NvbnN0IHllPVNsKGNbTSsxXSk7Y1tkKzFdPUdzKHllLE0pLDAhPT15ZSYmKGNbeWUrMV09cG4oY1t5'@;
put 'ZSsxXSxkKSksY1tNKzFdPWZ1bmN0aW9uIE1sKGMsbCl7cmV0dXJuIDEzMTA3MSZjfGw8PDE3fShjW00rMV0sZCl9ZWxzZSBjW2QrMV09R3MoTSwwKSwwIT09TSYmKGNbTSsxXT1wbihjW00rMV0sZCkpLE09ZDtlbHNlIGNbZCsxXT1HcyhJLDApLDA9PT1NP009ZDpjW0krMV09cG4oY1tJKzFd'@;
put 'LGQpLEk9ZDtHJiYoY1tkKzFdPWpmKGNbZCsxXSkpLF9yKGMscmUsZCwhMCksX3IoYyxyZSxkLCExKSxmdW5jdGlvbiBVbihjLGwsYSxkLGgpe2NvbnN0IGY9aD9jLnJlc2lkdWFsQ2xhc3NlczpjLnJlc2lkdWFsU3R5bGVzO251bGwhPWYmJiJzdHJpbmciPT10eXBlb2YgbCYmbjIoZixsKT49'@;
put 'MCYmKGFbZCsxXT1fbihhW2QrMV0pKX0obCxyZSxjLGQsZiksdj1HcyhNLEkpLGY/bC5jbGFzc0JpbmRpbmdzPXY6bC5zdHlsZUJpbmRpbmdzPXZ9KGgsZixsLGEsdixkKX19ZnVuY3Rpb24gb1UoYyxsLGEsZCxoKXtsZXQgZj1udWxsO2NvbnN0IHY9YS5kaXJlY3RpdmVFbmQ7bGV0IE09YS5k'@;
put 'aXJlY3RpdmVTdHlsaW5nTGFzdDtmb3IoLTE9PT1NP009YS5kaXJlY3RpdmVTdGFydDpNKys7TTx2JiYoZj1sW01dLGQ9ZE0oZCxmLmhvc3RBdHRycyxoKSxmIT09Yyk7KU0rKztyZXR1cm4gbnVsbCE9PWMmJihhLmRpcmVjdGl2ZVN0eWxpbmdMYXN0PU0pLGR9ZnVuY3Rpb24gZE0oYyxsLGEp'@;
put 'e2NvbnN0IGQ9YT8xOjI7bGV0IGg9LTE7aWYobnVsbCE9PWwpZm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0IHY9bFtmXTsibnVtYmVyIj09dHlwZW9mIHY/aD12Omg9PT1kJiYoQXJyYXkuaXNBcnJheShjKXx8KGM9dm9pZCAwPT09Yz9bXTpbIiIsY10pLHYwKGMsdiwhIWF8fGxb'@;
put 'KytmXSkpfXJldHVybiB2b2lkIDA9PT1jP251bGw6Y31mdW5jdGlvbiB5cmUoYyxsLGEsZCxoLGYsdixNKXtpZighKDMmbC50eXBlKSlyZXR1cm47Y29uc3QgST1jLmRhdGEsRz1JW00rMV0scmU9ZnVuY3Rpb24gRG4oYyl7cmV0dXJuISgxJn5jKX0oRyk/YnJlKEksbCxhLGgsX2QoRyksdik6'@;
put 'dm9pZCAwO0dJKHJlKXx8KEdJKGYpfHxmdW5jdGlvbiBtdShjKXtyZXR1cm4hKDImfmMpfShHKSYmKGY9YnJlKEksbnVsbCxhLGgsTSx2KSksZnVuY3Rpb24gQ0QoYyxsLGEsZCxoKXtpZihsKWg/Yy5hZGRDbGFzcyhhLGQpOmMucmVtb3ZlQ2xhc3MoYSxkKTtlbHNle2xldCBmPS0xPT09ZC5p'@;
put 'bmRleE9mKCItIik/dm9pZCAwOlgzLkRhc2hDYXNlO251bGw9PWg/Yy5yZW1vdmVTdHlsZShhLGQsZik6KCJzdHJpbmciPT10eXBlb2YgaCYmaC5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYoaD1oLnNsaWNlKDAsLTEwKSxmfD1YMy5JbXBvcnRhbnQpLGMuc2V0U3R5bGUoYSxkLGgsZikpfX0o'@;
put 'ZCx2LG01KEZ1KCksYSksaCxmKSl9ZnVuY3Rpb24gYnJlKGMsbCxhLGQsaCxmKXtjb25zdCB2PW51bGw9PT1sO2xldCBNO2Zvcig7aD4wOyl7Y29uc3QgST1jW2hdLEc9QXJyYXkuaXNBcnJheShJKSxyZT1HP0lbMV06SSx1ZT1udWxsPT09cmU7bGV0IHllPWFbaCsxXTt5ZT09PUxzJiYoeWU9'@;
put 'dWU/SnM6dm9pZCAwKTtsZXQgRWU9dWU/QTYoeWUsZCk6cmU9PT1kP3llOnZvaWQgMDtpZihHJiYhR0koRWUpJiYoRWU9QTYoSSxkKSksR0koRWUpJiYoTT1FZSx2KSlyZXR1cm4gTTtjb25zdCBCZT1jW2grMV07aD12P1NsKEJlKTpfZChCZSl9aWYobnVsbCE9PWwpe2xldCBJPWY/bC5yZXNp'@;
put 'ZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1JJiYoTT1BNihJLGQpKX1yZXR1cm4gTX1mdW5jdGlvbiBHSShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiBfcmUoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5jdGlvbiB3cmUoYyxsLGEpeyFmdW5jdGlv'@;
put 'biBVZihjLGwsYSxkKXtjb25zdCBoPXNvKCksZj1MZigyKTtoLmZpcnN0VXBkYXRlUGFzcyYmbXJlKGgsbnVsbCxmLGQpO2NvbnN0IHY9Y2koKTtpZihhIT09THMmJk5jKHYsZixhKSl7Y29uc3QgTT1oLmRhdGFbRnUoKV07aWYoX3JlKE0sZCkmJiFncmUoaCxmKSl7bGV0IEk9ZD9NLmNsYXNz'@;
put 'ZXNXaXRob3V0SG9zdDpNLnN0eWxlc1dpdGhvdXRIb3N0O251bGwhPT1JJiYoYT1sZChJLGF8fCIiKSksZmgoaCxNLHYsYSxkKX1lbHNlIWZ1bmN0aW9uIHY5ZShjLGwsYSxkLGgsZix2LE0pe2g9PT1McyYmKGg9SnMpO2xldCBJPTAsRz0wLHJlPTA8aC5sZW5ndGg/aFswXTpudWxsLHVlPTA8'@;
put 'Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PXJlfHxudWxsIT09dWU7KXtjb25zdCB5ZT1JPGgubGVuZ3RoP2hbSSsxXTp2b2lkIDAsRWU9RzxmLmxlbmd0aD9mW0crMV06dm9pZCAwO2xldCBHZSxCZT1udWxsO3JlPT09dWU/KEkrPTIsRys9Mix5ZSE9PUVlJiYoQmU9dWUsR2U9RWUp'@;
put 'KTpudWxsPT09dWV8fG51bGwhPT1yZSYmcmU8dWU/KEkrPTIsQmU9cmUpOihHKz0yLEJlPXVlLEdlPUVlKSxudWxsIT09QmUmJnlyZShjLGwsYSxkLEJlLEdlLHYsTSkscmU9STxoLmxlbmd0aD9oW0ldOm51bGwsdWU9RzxmLmxlbmd0aD9mW0ddOm51bGx9fShoLE0sdix2W3ZzXSx2W2YrMV0s'@;
put 'dltmKzFdPWZ1bmN0aW9uIGc5ZShjLGwsYSl7aWYobnVsbD09YXx8IiI9PT1hKXJldHVybiBKcztjb25zdCBkPVtdLGg9eTIoYSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyljKGQsaFtmXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGgpZm9y'@;
put 'KGNvbnN0IGYgaW4gaCloLmhhc093blByb3BlcnR5KGYpJiZjKGQsZixoW2ZdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBoJiZsKGQsaCk7cmV0dXJuIGR9KGMsbCxhKSxkLGYpfX0odjAsc3AsVWwoY2koKSxjLGwsYSksITApfWZ1bmN0aW9uIGRlKGMsbCxhLGQpe2NvbnN0IGg9Y2koKSxmPXNv'@;
put 'KCksdj1fcytjLE09aFt2c10sST1mLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbiBCOWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bC5jb25zdHMsST1ONShsLGMsMixkLGYyKHYsaCkpO3JldHVybiBDUyhsLGEsSSxmMih2LGYpKSxudWxsIT09SS5hdHRycyYmeXkoSSxJLmF0dHJzLCExKSxudWxs'@;
put 'IT09SS5tZXJnZWRBdHRycyYmeXkoSSxJLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsSSksSX0odixmLGgsbCxhLGQpOmYuZGF0YVt2XSxHPXhyZShmLGgsSSxNLGwsYyk7aFt2XT1HO2NvbnN0IHJlPXEwKEkpO3JldHVybiBwMihJ'@;
put 'LCEwKSx4RChNLEcsSSksIWZ1bmN0aW9uIEg4KGMpe3JldHVybiEoMzImfmMuZmxhZ3MpfShJKSYmWDYoKSYmczAoZixoLEcsSSksMD09PWZ1bmN0aW9uIHBWKCl7cmV0dXJuIHdzLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKSYmTnUoRyxoKSxmdW5jdGlvbiBnVigpe3dzLmxGcmFtZS5l'@;
put 'bGVtZW50RGVwdGhDb3VudCsrfSgpLHJlJiYoYlMoZixoLEkpLHlTKGYsSSxoKSksbnVsbCE9PWQmJl9TKGgsSSksZGV9ZnVuY3Rpb24gaGUoKXtsZXQgYz1vbCgpO2NDKCk/dUMoKTooYz1jLnBhcmVudCxwMihjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBtVihjKXtyZXR1cm4gd3Muc2tp'@;
put 'cEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24gX1YoKXt3cy5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gcmsoKXt3cy5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPXNvKCk7cmV0dXJuIGEuZmlyc3RDcmVhdGVQYXNzJiYo'@;
put 'QXYoYSxjKSxldShjKSYmYS5xdWVyaWVzLmVsZW1lbnRFbmQoYykpLG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBMVihjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmZmgoYSxsLGNpKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWwuc3R5bGVzV2l0aG91'@;
put 'dEhvc3QmJmZ1bmN0aW9uIE9WKGMpe3JldHVybiEhKDE2JmMuZmxhZ3MpfShsKSYmZmgoYSxsLGNpKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSksaGV9ZnVuY3Rpb24gV3QoYyxsLGEsZCl7cmV0dXJuIGRlKGMsbCxhLGQpLGhlKCksV3R9bGV0IHhyZT0oYyxsLGEsZCxoLGYpPT4oZzIoITAp'@;
put 'LHo0KGQsaCxmdW5jdGlvbiB1aygpe3JldHVybiB3cy5sRnJhbWUuY3VycmVudE5hbWVzcGFjZX0oKSkpO2Z1bmN0aW9uIGFpKGMsbCxhKXtjb25zdCBkPWNpKCksaD1zbygpLGY9Yytfcyx2PWguZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFU5ZShjLGwsYSxkLGgpe2NvbnN0IGY9bC5jb25z'@;
put 'dHMsdj1mMihmLGQpLE09TjUobCxjLDgsIm5nLWNvbnRhaW5lciIsdik7cmV0dXJuIG51bGwhPT12JiZ5eShNLHYsITApLENTKGwsYSxNLGYyKGYsaCkpLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxNKSxNfShmLGgsZCxsLGEpOmguZGF0YVtmXTtwMih2LCEw'@;
put 'KTtjb25zdCBNPUVyZShoLGQsdixjKTtyZXR1cm4gZFtmXT1NLFg2KCkmJnMwKGgsZCxNLHYpLE51KE0sZCkscTAodikmJihiUyhoLGQsdikseVMoaCx2LGQpKSxudWxsIT1hJiZfUyhkLHYpLGFpfWZ1bmN0aW9uIHNpKCl7bGV0IGM9b2woKTtjb25zdCBsPXNvKCk7cmV0dXJuIGNDKCk/dUMo'@;
put 'KTooYz1jLnBhcmVudCxwMihjLCExKSksbC5maXJzdENyZWF0ZVBhc3MmJihBdihsLGMpLGV1KGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksc2l9ZnVuY3Rpb24gTGwoYyxsLGEpe3JldHVybiBhaShjLGwsYSksc2koKSxMbH1sZXQgRXJlPShjLGwsYSxkKT0+KGcyKCEwKSxhUyhsW3Zz'@;
put 'XSwiIikpO2Z1bmN0aW9uIE9uKCl7cmV0dXJuIGNpKCl9ZnVuY3Rpb24gb3AoYyxsLGEpe2NvbnN0IGQ9Y2koKTtyZXR1cm4gTmMoZCxhaCgpLGwpJiZPMChzbygpLEpvKCksZCxjLGwsZFt2c10sYSwhMCksb3B9ZnVuY3Rpb24gaFUoYyxsLGEpe2NvbnN0IGQ9Y2koKTtpZihOYyhkLGFoKCks'@;
put 'bCkpe2NvbnN0IGY9c28oKSx2PUpvKCk7TzAoZix2LGQsYyxsLFc0KGhDKGYuZGF0YSksdixkKSxhLCEwKX1yZXR1cm4gaFV9Y29uc3Qgajg9dm9pZCAwO3ZhciBHOWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxqOF0sW1siQU0iLCJQTSJdLGo4LGo4XSxbWyJTIiwiTSIsIlQiLCJX'@;
put 'IiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJT'@;
put 'YSJdXSxqOCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJB'@;
put 'cHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sajgsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQs'@;
put 'IHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixqOCwiezF9ICdhdCcgezB9IixqOF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAz'@;
put 'MCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiBZOWUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBs'@;
put 'YWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XTtsZXQgVnk9e307ZnVuY3Rpb24gYTEoYyl7Y29uc3QgbD1mdW5jdGlvbiBLOWUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9QXJlKGwpO2lmKGEp'@;
put 'cmV0dXJuIGE7Y29uc3QgZD1sLnNwbGl0KCItIilbMF07aWYoYT1BcmUoZCksYSlyZXR1cm4gYTtpZigiZW4iPT09ZClyZXR1cm4gRzllO3Rocm93IG5ldyBucig3MDEsITEpfWZ1bmN0aW9uIEFyZShjKXtyZXR1cm4gYyBpbiBWeXx8KFZ5W2NdPU50Lm5nJiZOdC5uZy5jb21tb24mJk50Lm5n'@;
put 'LmNvbW1vbi5sb2NhbGVzJiZOdC5uZy5jb21tb24ubG9jYWxlc1tjXSksVnlbY119dmFyIFFsPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixjW2MuRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsY1tjLkRheVBlcmlvZHNTdGFuZGFs'@;
put 'b25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsY1tjLkRheXNGb3JtYXQ9M109IkRheXNGb3JtYXQiLGNbYy5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLGNbYy5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsY1tjLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRo'@;
put 'c1N0YW5kYWxvbmUiLGNbYy5FcmFzPTddPSJFcmFzIixjW2MuRmlyc3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixjW2MuV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLGNbYy5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsY1tjLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9y'@;
put 'bWF0IixjW2MuRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZvcm1hdCIsY1tjLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixjW2MuTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLGNbYy5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLGNbYy5DdXJy'@;
put 'ZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixjW2MuQ3VycmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixjW2MuQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLGNbYy5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixjW2MuUGx1cmFsQ2FzZT0yMF09IlBsdXJh'@;
put 'bENhc2UiLGNbYy5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGN9KFFsfHx7fSk7Y29uc3QgQnk9ImVuLVVTIjtsZXQga3JlPUJ5O2Z1bmN0aW9uIEZ0KGMsbCxhLGQpe2NvbnN0IGg9Y2koKSxmPXNvKCksdj1vbCgpO3JldHVybiBtVShmLGgsaFt2c10sdixjLGwsZCksRnR9ZnVuY3Rpb24g'@;
put 'Z1UoYyxsKXtjb25zdCBhPW9sKCksZD1jaSgpLGg9c28oKTtyZXR1cm4gbVUoaCxkLFc0KGhDKGguZGF0YSksYSxkKSxhLGMsbCksZ1V9ZnVuY3Rpb24gbVUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1xMChkKSxHPWMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKSxyZT1sW3NsXSx1ZT1qRChsKTts'@;
put 'ZXQgeWU9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IEdlPUkwKGQsbCksc3Q9dj92KEdlKTpHZSxwdD11ZS5sZW5ndGgsZHQ9dj9tbj0+dihfbChtbltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IHF0PW51bGw7aWYoIXYmJk0mJihxdD1mdW5jdGlvbiBXdmUoYyxsLGEsZCl7Y29uc3QgaD1jLmNs'@;
put 'ZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3RoLTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBNPWxbWDBdLEk9aFtmKzJdO3JldHVybiBNLmxlbmd0aD5JP01bSV06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHYmJihmKz0yKX1yZXR1'@;
put 'cm4gbnVsbH0oYyxsLGgsZC5pbmRleCkpLG51bGwhPT1xdCkocXQuX19uZ0xhc3RMaXN0ZW5lckZuX198fHF0KS5fX25nTmV4dExpc3RlbmVyRm5fXz1mLHF0Ll9fbmdMYXN0TGlzdGVuZXJGbl9fPWYseWU9ITE7ZWxzZXtmPW5pZShkLGwscmUsZiwhMSk7Y29uc3QgbW49YS5saXN0ZW4oc3Qs'@;
put 'aCxmKTt1ZS5wdXNoKGYsbW4pLEcmJkcucHVzaChoLGR0LHB0LHB0KzEpfX1lbHNlIGY9bmllKGQsbCxyZSxmLCExKTtjb25zdCBFZT1kLm91dHB1dHM7bGV0IEJlO2lmKHllJiZudWxsIT09RWUmJihCZT1FZVtoXSkpe2NvbnN0IEdlPUJlLmxlbmd0aDtpZihHZSlmb3IobGV0IHN0PTA7c3Q8'@;
put 'R2U7c3QrPTIpe2NvbnN0IHduPWxbQmVbc3RdXVtCZVtzdCsxXV0uc3Vic2NyaWJlKGYpLGhuPXVlLmxlbmd0aDt1ZS5wdXNoKGYsd24pLEcmJkcucHVzaChoLGQuaW5kZXgsaG4sLShobisxKSl9fX1mdW5jdGlvbiB0aWUoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIGgy'@;
put 'KDYsbCxhKSwhMSE9PWEoZCl9Y2F0Y2goZil7cmV0dXJuIFY1KGMsZiksITF9ZmluYWxseXtoMig3LGwsYSksX2UoaCl9fWZ1bmN0aW9uIG5pZShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKHYpe2lmKHY9PT1GdW5jdGlvbilyZXR1cm4gZDtiOChjLmNvbXBvbmVudE9mZnNldD4tMT9Q'@;
put 'MShjLmluZGV4LGwpOmwpO2xldCBJPXRpZShsLGEsZCx2KSxHPWYuX19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtHOylJPXRpZShsLGEsRyx2KSYmSSxHPUcuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09SSYmdi5wcmV2ZW50RGVmYXVsdCgpLEl9fWZ1bmN0aW9uIExlKGM9'@;
put 'MSl7cmV0dXJuIGZ1bmN0aW9uIHhWKGMpe3JldHVybih3cy5sRnJhbWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIHNDKGMsbCl7Zm9yKDtjPjA7KWw9bFtyMF0sYy0tO3JldHVybiBsfShjLHdzLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtzbF19KGMpfWZ1bmN0aW9uIFl2ZShjLGwpe2xldCBhPW51'@;
put 'bGw7Y29uc3QgZD1mdW5jdGlvbiBjdihjKXtjb25zdCBsPWMuYXR0cnM7aWYobnVsbCE9bCl7Y29uc3QgYT1sLmluZGV4T2YoNSk7aWYoISgxJmEpKXJldHVybiBsW2ErMV19cmV0dXJuIG51bGx9KGMpO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWxbaF07aWYoIioiIT09'@;
put 'Zil7aWYobnVsbD09PWQ/eTQoYyxmLCEwKTpVdyhkLGYpKXJldHVybiBofWVsc2UgYT1ofXJldHVybiBhfWZ1bmN0aW9uIHNhKGMpe2NvbnN0IGw9Y2koKVtqbF1bbmNdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIHQyKGMsbCl7Y29uc3QgYT1bXTtm'@;
put 'b3IobGV0IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0oYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IHY9Yz9ZdmUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25OZXh0PWY6ZFt2XT1m'@;
put 'LGhbdl09ZiksZj1mLm5leHR9fX1mdW5jdGlvbiBXcihjLGw9MCxhKXtjb25zdCBkPWNpKCksaD1zbygpLGY9TjUoaCxfcytjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09PWYucHJvamVjdGlvbiYmKGYucHJvamVjdGlvbj1sKSx1QygpLCghZFtRY118fHY1KCkpJiYzMiZ+Zi5mbGFncyYmZnVu'@;
put 'Y3Rpb24gYWooYyxsLGEpe3dEKGxbdnNdLDAsbCxhLHR5KGMsYSxsKSx1OChhLnBhcmVudHx8bFtuY10sYSxsKSl9KGgsZCxmKX1mdW5jdGlvbiB5TShjLGwsYSl7cmV0dXJuIHZVKGMsIiIsbCwiIixhKSx5TX1mdW5jdGlvbiB2VShjLGwsYSxkLGgpe2NvbnN0IGY9Y2koKSx2PVVsKGYsbCxh'@;
put 'LGQpO3JldHVybiB2IT09THMmJk8wKHNvKCksSm8oKSxmLGMsdixmW3ZzXSxoLCExKSx2VX1mdW5jdGlvbiBhcyhjLGwsYSxkKXshZnVuY3Rpb24gd0koYyxsLGEsZCl7Y29uc3QgaD1zbygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPW9sKCk7U0koaCxuZXcgdkkobCxhLGQpLGYu'@;
put 'aW5kZXgpLGZ1bmN0aW9uIE56KGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5zdGF0aWNDb250ZW50'@;
put 'UXVlcmllcz0hMCl9cmV0dXJuIGJJKGgsY2koKSxhKX0oYyxsLGEsZCl9ZnVuY3Rpb24gRmEoYyxsLGEpeyFmdW5jdGlvbiBfSShjLGwsYSl7Y29uc3QgZD1zbygpO3JldHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKFNJKGQsbmV3IHZJKGMsbCxhKSwtMSksISgyJn5sKSYmKGQuc3RhdGljVmll'@;
put 'd1F1ZXJpZXM9ITApKSxiSShkLGNpKCksbCl9KGMsbCxhKX1mdW5jdGlvbiB5aShjKXtjb25zdCBsPWNpKCksYT1zbygpLGQ9ZkMoKTtqMyhkKzEpO2NvbnN0IGg9cVMoYSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBoVihjKXtyZXR1cm4hKDQmfmNbV2FdKX0obCk9PT0hKDImfmgubWV0YWRh'@;
put 'dGEuZmxhZ3MpKXtpZihudWxsPT09aC5tYXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1NSShsLGQpO2MucmVzZXQoZixDayksYy5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBiaSgpe3JldHVybiBmdW5jdGlvbiBJOChjLGwpe3JldHVybiBjW2hk'@;
put 'XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oY2koKSxmQygpKX1mdW5jdGlvbiBkYShjKXtyZXR1cm4gRTQoZnVuY3Rpb24gd1YoKXtyZXR1cm4gd3MubEZyYW1lLmNvbnRleHRMVmlld30oKSxfcytjKX1mdW5jdGlvbiBPZShjLGw9IiIpe2NvbnN0IGE9Y2koKSxkPXNvKCksaD1jK19zLGY9ZC5m'@;
put 'aXJzdENyZWF0ZVBhc3M/TjUoZCxoLDEsbCxudWxsKTpkLmRhdGFbaF0sdj1faWUoZCxhLGYsbCxjKTthW2hdPXYsWDYoKSYmczAoZCxhLHYsZikscDIoZiwhMSl9bGV0IF9pZT0oYyxsLGEsZCxoKT0+KGcyKCEwKSxmdW5jdGlvbiBqNChjLGwpe3JldHVybiBjLmNyZWF0ZVRleHQobCl9KGxb'@;
put 'dnNdLGQpKTtmdW5jdGlvbiBTcihjKXtyZXR1cm4gTHIoIiIsYywiIiksU3J9ZnVuY3Rpb24gTHIoYyxsLGEpe2NvbnN0IGQ9Y2koKSxoPVVsKGQsYyxsLGEpO3JldHVybiBoIT09THMmJmIyKGQsRnUoKSxoKSxMcn1mdW5jdGlvbiBCdShjLGwsYSxkLGgpe2NvbnN0IGY9Y2koKSx2PWZ1bmN0'@;
put 'aW9uIFpsKGMsbCxhLGQsaCxmKXtjb25zdCBNPWlwKGMsUmYoKSxhLGgpO3JldHVybiBMZigyKSxNP2wrU2EoYSkrZCtTYShoKStmOkxzfShmLGMsbCxhLGQsaCk7cmV0dXJuIHYhPT1McyYmYjIoZixGdSgpLHYpLEJ1fWZ1bmN0aW9uIFpmKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09Y2koKSxJ'@;
put 'PWZ1bmN0aW9uIGd1KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRz1SeShjLFJmKCksYSxoLHYpO3JldHVybiBMZigzKSxHP2wrU2EoYSkrZCtTYShoKStmK1NhKHYpK006THN9KE0sYyxsLGEsZCxoLGYsdik7cmV0dXJuIEkhPT1McyYmYjIoTSxGdSgpLEkpLFpmfWZ1bmN0aW9uIEpJKGMsbCxh'@;
put 'LGQsaCxmLHYsTSxJKXtjb25zdCBHPWNpKCkscmU9ZnVuY3Rpb24gQ2woYyxsLGEsZCxoLGYsdixNLEksRyl7Y29uc3QgdWU9YmQoYyxSZigpLGEsaCx2LEkpO3JldHVybiBMZig0KSx1ZT9sK1NhKGEpK2QrU2EoaCkrZitTYSh2KStNK1NhKEkpK0c6THN9KEcsYyxsLGEsZCxoLGYsdixNLEkp'@;
put 'O3JldHVybiByZSE9PUxzJiZiMihHLEZ1KCkscmUpLEpJfWZ1bmN0aW9uIGZpKGMsbCxhKXtFSShsKSYmKGw9bCgpKTtjb25zdCBkPWNpKCk7cmV0dXJuIE5jKGQsYWgoKSxsKSYmTzAoc28oKSxKbygpLGQsYyxsLGRbdnNdLGEsITEpLGZpfWZ1bmN0aW9uIGdpKGMsbCl7Y29uc3QgYT1FSShj'@;
put 'KTtyZXR1cm4gYSYmYy5zZXQobCksYX1mdW5jdGlvbiBwaShjLGwpe2NvbnN0IGE9Y2koKSxkPXNvKCksaD1vbCgpO3JldHVybiBtVShkLGEsYVt2c10saCxjLGwpLHBpfWZ1bmN0aW9uIHlVKGMsbCxhLGQsaCl7aWYoYz1HaShjKSxBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgZj0wO2Y8Yy5s'@;
put 'ZW5ndGg7ZisrKXlVKGNbZl0sbCxhLGQsaCk7ZWxzZXtjb25zdCBmPXNvKCksdj1jaSgpLE09b2woKTtsZXQgST14ZihjKT9jOkdpKGMucHJvdmlkZSk7Y29uc3QgRz15dihjKSxyZT0xMDQ4NTc1Jk0ucHJvdmlkZXJJbmRleGVzLHVlPU0uZGlyZWN0aXZlU3RhcnQseWU9TS5wcm92aWRlcklu'@;
put 'ZGV4ZXM+PjIwO2lmKHhmKGMpfHwhYy5tdWx0aSl7Y29uc3QgRWU9bmV3IEYxKEcsaCwkZSksQmU9X1UoSSxsLGg/cmU6cmUreWUsdWUpOy0xPT09QmU/KHBkKE92KE0sdiksZixJKSxiVShmLGMsbC5sZW5ndGgpLGwucHVzaChJKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQr'@;
put 'KyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChFZSksdi5wdXNoKEVlKSk6KGFbQmVdPUVlLHZbQmVdPUVlKX1lbHNle2NvbnN0IEVlPV9VKEksbCxyZSt5ZSx1ZSksQmU9X1UoSSxsLHJlLHJlK3llKSxzdD1CZT49MCYmYVtCZV07aWYoaCYmIXN0fHwhaCYmIShFZT49'@;
put 'MCYmYVtFZV0pKXtwZChPdihNLHYpLGYsSSk7Y29uc3QgcHQ9ZnVuY3Rpb24gZHllKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgRjEoYyxhLCRlKTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCxFaWUoZixoLGQmJiFhKSxmfShoP3V5ZTpjeWUsYS5s'@;
put 'ZW5ndGgsaCxkLEcpOyFoJiZzdCYmKGFbQmVdLnByb3ZpZGVyRmFjdG9yeT1wdCksYlUoZixjLGwubGVuZ3RoLDApLGwucHVzaChJKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChwdCksdi5wdXNoKHB0'@;
put 'KX1lbHNlIGJVKGYsYyxFZT4tMT9FZTpCZSxFaWUoYVtoP0JlOkVlXSxHLCFoJiZkKSk7IWgmJmQmJnN0JiZhW0JlXS5jb21wb25lbnRQcm92aWRlcnMrK319fWZ1bmN0aW9uIGJVKGMsbCxhLGQpe2NvbnN0IGg9eGYobCksZj1mdW5jdGlvbiBQNihjKXtyZXR1cm4hIWMudXNlQ2xhc3N9KGwp'@;
put 'O2lmKGh8fGYpe2NvbnN0IEk9KGY/R2kobC51c2VDbGFzcyk6bCkucHJvdG90eXBlLm5nT25EZXN0cm95O2lmKEkpe2NvbnN0IEc9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHJlPUcuaW5kZXhPZihhKTstMT09PXJlP0cucHVzaChh'@;
put 'LFtkLEldKTpHW3JlKzFdLnB1c2goZCxJKX1lbHNlIEcucHVzaChhLEkpfX19ZnVuY3Rpb24gRWllKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBfVShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09'@;
put 'PT1jKXJldHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIGN5ZShjLGwsYSxkKXtyZXR1cm4gd1UodGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gdXllKGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5tdWx0aTtsZXQgZjtpZih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3Qgdj10aGlzLnByb3ZpZGVyRmFj'@;
put 'dG9yeS5jb21wb25lbnRQcm92aWRlcnMsTT1ENChhLGFbWGldLHRoaXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGQpO2Y9TS5zbGljZSgwLHYpLHdVKGgsZik7Zm9yKGxldCBJPXY7STxNLmxlbmd0aDtJKyspZi5wdXNoKE1bSV0pfWVsc2UgZj1bXSx3VShoLGYpO3JldHVybiBmfWZ1bmN0aW9u'@;
put 'IHdVKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbC5wdXNoKCgwLGNbYV0pKCkpO3JldHVybiBsfWZ1bmN0aW9uIHVhKGMsbD1bXSl7cmV0dXJuIGE9PnthLnByb3ZpZGVyc1Jlc29sdmVyPShkLGgpPT5mdW5jdGlvbiBseWUoYyxsLGEpe2NvbnN0IGQ9c28oKTtpZihkLmZpcnN0'@;
put 'Q3JlYXRlUGFzcyl7Y29uc3QgaD1IYyhjKTt5VShhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSx5VShsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWxldCBoeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2Fj'@;
put 'aGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXJoKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/RzQoW2RdLHRoaXMuX2lu'@;
put 'amVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1'@;
put 'ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLHByb3ZpZGVkSW46ImVudmlyb25tZW50IixmYWN0b3J5OigpPT5uZXcgYyhDcihxbCkpfSl9fXJldHVybiBjfSko'@;
put 'KTtmdW5jdGlvbiBRSShjKXtfMigiTmdTdGFuZGFsb25lIiksYy5nZXRTdGFuZGFsb25lSW5qZWN0b3I9bD0+bC5nZXQoaHllKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBabyhjLGwsYSl7Y29uc3QgZD1SMCgpK2MsaD1jaSgpO3JldHVybiBoW2RdPT09THM/'@;
put 'dzIoaCxkLGE/bC5jYWxsKGEpOmwoKSk6ZnVuY3Rpb24gRWMoYyxsKXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBscChjLGwsYSxkKXtyZXR1cm4gQWllKGNpKCksUjAoKSxjLGwsYSxkKX1mdW5jdGlvbiBjcChjLGwsYSxkLGgpe3JldHVybiBraWUoY2koKSxSMCgpLGMsbCxhLGQsaCl9'@;
put 'ZnVuY3Rpb24gYk0oYyxsLGEsZCxoLGYpe3JldHVybiBEaWUoY2koKSxSMCgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiB0UihjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24gSWllKGMsbCxhLGQsaCxmLHYsTSxJKXtjb25zdCBHPWwrYTtyZXR1cm4gYmQoYyxHLGgsZix2LE0pP3cyKGMs'@;
put 'Rys0LEk/ZC5jYWxsKEksaCxmLHYsTSk6ZChoLGYsdixNKSk6X00oYyxHKzQpfShjaSgpLFIwKCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gX00oYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1Mcz92b2lkIDA6YX1mdW5jdGlvbiBBaWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bCthO3Jl'@;
put 'dHVybiBOYyhjLHYsaCk/dzIoYyx2KzEsZj9kLmNhbGwoZixoKTpkKGgpKTpfTShjLHYrMSl9ZnVuY3Rpb24ga2llKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09bCthO3JldHVybiBpcChjLE0saCxmKT93MihjLE0rMix2P2QuY2FsbCh2LGgsZik6ZChoLGYpKTpfTShjLE0rMil9ZnVuY3Rpb24g'@;
put 'RGllKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgST1sK2E7cmV0dXJuIFJ5KGMsSSxoLGYsdik/dzIoYyxJKzMsTT9kLmNhbGwoTSxoLGYsdik6ZChoLGYsdikpOl9NKGMsSSszKX1mdW5jdGlvbiBRbyhjLGwpe2NvbnN0IGE9c28oKTtsZXQgZDtjb25zdCBoPWMrX3M7YS5maXJzdENyZWF0ZVBh'@;
put 'c3M/KGQ9ZnVuY3Rpb24gX3llKGMsbCl7aWYobClmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEuZGVzdHJveUhvb2tzPz89W10pLnB1'@;
put 'c2goaCxkLm9uRGVzdHJveSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PWh1KGQudHlwZSkpLE09eWwoJGUpO3RyeXtjb25zdCBJPVJ2KCExKSxHPWYoKTtyZXR1cm4gUnYoSSksZnVuY3Rpb24gWHZlKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRh'@;
put 'dGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9KGEsY2koKSxoLEcpLEd9ZmluYWxseXt5bChNKX19ZnVuY3Rpb24gQWMoYyxsLGEpe2NvbnN0IGQ9YytfcyxoPWNpKCksZj1FNChoLGQpO3JldHVybiB3TShoLGQpP0FpZShoLFIwKCksbCxmLnRyYW5zZm9ybSxhLGYpOmYu'@;
put 'dHJhbnNmb3JtKGEpfWZ1bmN0aW9uIHo4KGMsbCxhLGQpe2NvbnN0IGg9YytfcyxmPWNpKCksdj1FNChmLGgpO3JldHVybiB3TShmLGgpP2tpZShmLFIwKCksbCx2LnRyYW5zZm9ybSxhLGQsdik6di50cmFuc2Zvcm0oYSxkKX1mdW5jdGlvbiBDVShjLGwsYSxkLGgpe2NvbnN0IGY9Yytfcyx2'@;
put 'PWNpKCksTT1FNCh2LGYpO3JldHVybiB3TSh2LGYpP0RpZSh2LFIwKCksbCxNLnRyYW5zZm9ybSxhLGQsaCxNKTpNLnRyYW5zZm9ybShhLGQsaCl9ZnVuY3Rpb24gd00oYyxsKXtyZXR1cm4gY1tYaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIGdjKGMsbCl7cmV0dXJuIGN5KGMsbCl9Y2xhc3Mg'@;
put 'U017Y29uc3RydWN0b3IobCl7dGhpcy5mdWxsPWw7Y29uc3QgYT1sLnNwbGl0KCIuIik7dGhpcy5tYWpvcj1hWzBdLHRoaXMubWlub3I9YVsxXSx0aGlzLnBhdGNoPWEuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCAkaWU9bmV3IFNNKCIxNy4zLjEyIik7bGV0IEtpZT0oKCk9PntjbGFzcyBj'@;
put 'e2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUud2FybihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46'@;
put 'InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZWFlPW5ldyBTdCgiIiksaVI9bmV3IFN0KCIiKTtsZXQgRFUsQVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5yZWdpc3RyeT1kLHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lz'@;
put 'Wm9uZVN0YWJsZT0hMCx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50YXNrVHJhY2tpbmdab25lPW51bGwsRFV8fChmdW5jdGlvbiBnYmUoYyl7RFU9Y30oaCksaC5hZGRUb1dpbmRvdyhkKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksYS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pv'@;
put 'bmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57R2EuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHko'@;
put 'KX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRo'@;
put 'cm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50'@;
put 'JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9ydW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKXF1ZXVlTWljcm90YXNrKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBhPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVh'@;
put 'clRpbWVvdXQoYS50aW1lb3V0SWQpLGEuZG9uZUNiKCl9fSk7ZWxzZXtsZXQgYT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGQ9PiFkLnVwZGF0ZUNifHwhZC51cGRhdGVDYihhKXx8KGNsZWFyVGltZW91dChkLnRpbWVvdXRJ'@;
put 'ZCksITEpKX19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3VyY2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6'@;
put 'W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYmKGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKHY9PnYudGltZW91dElkIT09ZiksYSgpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJ'@;
put 'ZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZihoJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAi'@;
put 'em9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihh'@;
put 'KXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGQpe3JldHVybiBuZXcoZHx8YykoQ3IoR2EpLENyKGtVKSxDcihpUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLGtVPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlv'@;
put 'bnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGEsZCl7dGhpcy5fYXBwbGljYXRpb25zLnNldChhLGQpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGEpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMu'@;
put 'Y2xlYXIoKX1nZXRUZXN0YWJpbGl0eShhKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChhKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJy'@;
put 'YXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoYSxkPSEwKXtyZXR1cm4gRFU/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGEsZCk/P251bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHhNKGMpe3JldHVybiEhYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn1mdW5jdGlvbiB0YWUoYyl7cmV0'@;
put 'dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9Y29uc3QgSVU9bmV3IFN0KCIiKTtsZXQgUlU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0'@;
put 'aGlzLnJlc29sdmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1oaShJVSx7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgo'@;
put 'KTtpZih4TShmKSlhLnB1c2goZik7ZWxzZSBpZih0YWUoZikpe2NvbnN0IHY9bmV3IFByb21pc2UoKE0sSSk9PntmLnN1YnNjcmliZSh7Y29tcGxldGU6TSxlcnJvcjpJfSl9KTthLnB1c2godil9fWNvbnN0IGQ9KCk9Pnt0aGlzLmRvbmU9ITAsdGhpcy5yZXNvbHZlKCl9O1Byb21pc2UuYWxs'@;
put 'KGEpLnRoZW4oKCk9PntkKCl9KS5jYXRjaChoPT57dGhpcy5yZWplY3QoaCl9KSwwPT09YS5sZW5ndGgmJmQoKSx0aGlzLmluaXRpYWxpemVkPSEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0'@;
put 'b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IExVPW5ldyBTdCgiIik7ZnVuY3Rpb24gaWFlKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoaWFlLGMpOnsuLi5jLC4uLmx9fWxldCB1cD0oKCk9Pntj'@;
put 'bGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXI9aGkoX2spLHRo'@;
put 'aXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyPWhpKEU4KSx0aGlzLmV4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQsdGhpcy5iZWZvcmVSZW5kZXI9bmV3IEduLHRoaXMuYWZ0ZXJUaWNrPW5ldyBHbix0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3Rh'@;
put 'YmxlPWhpKEJmKS5oYXNQZW5kaW5nVGFza3MucGlwZShQcihhPT4hYSkpLHRoaXMuX2luamVjdG9yPWhpKHFsKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1h'@;
put 'IGluc3RhbmNlb2Ygbkk7aWYoIXRoaXMuX2luamVjdG9yLmdldChSVSkuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBhMihjKXtjb25zdCBsPUJzKGMpfHxTYyhjKXx8cWMoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBucig0MDUsITEpO2xldCB2O3Y9aD9hOnRoaXMu'@;
put 'X2luamVjdG9yLmdldCh6NSkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHYuY29tcG9uZW50VHlwZSk7Y29uc3QgTT1mdW5jdGlvbiBtYmUoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfSh2KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0'@;
put 'KHJwKSxHPXYuY3JlYXRlKERvLk5VTEwsW10sZHx8di5zZWxlY3RvcixNKSxyZT1HLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsdWU9Ry5pbmplY3Rvci5nZXQoZWFlLG51bGwpO3JldHVybiB1ZT8ucmVnaXN0ZXJBcHBsaWNhdGlvbihyZSksRy5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZp'@;
put 'ZXcoRy5ob3N0VmlldyksYVIodGhpcy5jb21wb25lbnRzLEcpLHVlPy51bnJlZ2lzdGVyQXBwbGljYXRpb24ocmUpfSksdGhpcy5fbG9hZENvbXBvbmVudChHKSxHfXRpY2soKXt0aGlzLl90aWNrKCEwKX1fdGljayhhKXtpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgbnIoMTAxLCEx'@;
put 'KTtjb25zdCBkPV9lKG51bGwpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMCx0aGlzLmRldGVjdENoYW5nZXNJbkF0dGFjaGVkVmlld3MoYSl9Y2F0Y2goaCl7dGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcihoKX1maW5hbGx5e3RoaXMuYWZ0ZXJUaWNrLm5leHQoKSx0aGlzLl9ydW5uaW5nVGlj'@;
put 'az0hMSxfZShkKX19ZGV0ZWN0Q2hhbmdlc0luQXR0YWNoZWRWaWV3cyhhKXtsZXQgZD0wO2NvbnN0IGg9dGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI7Zm9yKDs7KXtpZihkPT09WkQpdGhyb3cgbmV3IG5yKDEwMywhMSk7aWYoYSl7Y29uc3QgZj0wPT09ZDt0aGlzLmJlZm9yZVJlbmRl'@;
put 'ci5uZXh0KGYpO2ZvcihsZXR7X2xWaWV3OnYsbm90aWZ5RXJyb3JIYW5kbGVyOk19b2YgdGhpcy5fdmlld3MpeWJlKHYsZixNKX1pZihkKyssaC5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSwhWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21l'@;
put 'KCh7X2xWaWV3OmZ9KT0+T1UoZikpJiYoaC5leGVjdXRlKCksIVsuLi50aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c10uc29tZSgoe19sVmlldzpmfSk9Pk9VKGYpKSkpYnJlYWt9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCks'@;
put 'ZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2NvbnN0IGQ9YTthUih0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2go'@;
put 'YSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoTFUsW10pO1suLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMsLi4uZF0uZm9yRWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkp'@;
put 'LHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhp'@;
put 'cy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5hUih0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IG5yKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0'@;
put 'cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGFSKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiB5YmUoYyxsLGEpeyFsJiYhT1UoYyl8fGZ1bmN0aW9uIGJiZShjLGwsYSl7bGV0IGQ7YT8oZD0w'@;
put 'LGNbV2FdfD0xMDI0KTpkPTY0JmNbV2FdPzA6MSxseShjLGwsZCl9KGMsYSxsKX1mdW5jdGlvbiBPVShjKXtyZXR1cm4gU3YoYyl9Y2xhc3MgX2Jle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uZ01vZHVsZUZhY3Rvcnk9bCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1hfX1sZXQgYWFlPSgoKT0+'@;
put 'e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5ldyBreShhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10'@;
put 'aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9SDEoUnUoYSkuZGVjbGFyYXRpb25zKS5yZWR1Y2UoKHYsTSk9Pntjb25zdCBJPUJzKE0pO3JldHVybiBJJiZ2LnB1c2gobmV3IGs4KEkpKSx2fSxbXSk7cmV0dXJuIG5ldyBfYmUoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0Fz'@;
put 'eW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3'@;
put 'KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFNiZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy56b25lPWhpKEdhKSx0aGlzLmFwcGxpY2F0aW9uUmVm'@;
put 'PWhpKHVwKX1pbml0aWFsaXplKCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy56b25lLnJ1bigoKT0+e3RoaXMu'@;
put 'YXBwbGljYXRpb25SZWYudGljaygpfSl9fSkpfW5nT25EZXN0cm95KCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJv'@;
put 'dj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBNYmUoKXtjb25zdCBjPWhpKEdhKSxsPWhpKHYyKTtyZXR1cm4gYT0+Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihhKSl9bGV0IEVi'@;
put 'ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb249bmV3IEp0LHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy56b25lPWhpKEdhKSx0aGlzLnBlbmRpbmdUYXNrcz1oaShCZil9aW5pdGlhbGl6ZSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuaW5p'@;
put 'dGlhbGl6ZWQ9ITA7bGV0IGE9bnVsbDshdGhpcy56b25lLmlzU3RhYmxlJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYoYT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFy'@;
put 'KCgpPT57dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntHYS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PntudWxsIT09YSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5o'@;
put 'YXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShhKSxhPW51bGwpfSl9KSl9KSx0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpPT57R2EuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGE/Pz10aGlzLnBlbmRpbmdU'@;
put 'YXNrcy5hZGQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh'@;
put 'Yyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgV2Y9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5oaShXZixyYS5PcHRpb25hbHxyYS5Ta2lwU2VsZil8fGZ1bmN0aW9uIFRiZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxv'@;
put 'Y2FsaXplLmxvY2FsZXx8Qnl9KCl9KSxQVT1uZXcgU3QoIiIpO2xldCBjYWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9k'@;
put 'dWxlRmFjdG9yeShhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gb0koYz0iem9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9uZXcgc0k6InpvbmUuanMiPT09Yz9uZXcgR2EobCk6Y30oZD8ubmdab25lLGZ1bmN0aW9uIGxhZShjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxk'@;
put 'Q29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpk'@;
put 'Py5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigoKT0+e2NvbnN0IGY9ZnVuY3Rpb24gVkkoYyxsLGEpe3JldHVybiBuZXcgQXkoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBvYWUoYyl7cmV0dXJuW3twcm92aWRlOkdhLHVzZUZhY3Rvcnk6'@;
put 'Y30se3Byb3ZpZGU6cjIsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGw9aGkoU2JlLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5sLmluaXRpYWxpemUoKX19LHtwcm92aWRlOnIyLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWhpKEViZSk7cmV0dXJuKCk9PntsLmlu'@;
put 'aXRpYWxpemUoKX19fSx7cHJvdmlkZTpfayx1c2VGYWN0b3J5Ok1iZX1dfSgoKT0+aCkpLHY9Zi5pbmplY3Rvci5nZXQodjIsbnVsbCk7cmV0dXJuIGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBNPWgub25FcnJvci5zdWJzY3JpYmUoe25leHQ6ST0+e3YuaGFuZGxlRXJyb3IoSSl9'@;
put 'fSk7Zi5vbkRlc3Ryb3koKCk9PnthUih0aGlzLl9tb2R1bGVzLGYpLE0udW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24gcmFlKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIHhNKGQpP2QuY2F0Y2goaD0+e3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3Io'@;
put 'aCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fSh2LGgsKCk9Pntjb25zdCBNPWYuaW5qZWN0b3IuZ2V0KFJVKTtyZXR1cm4gTS5ydW5Jbml0aWFsaXplcnMoKSxNLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlv'@;
put 'biBEcmUoYyl7InN0cmluZyI9PXR5cGVvZiBjJiYoa3JlPWMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGYuaW5qZWN0b3IuZ2V0KFdmLEJ5KXx8QnkpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKGYpLGYpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGEsZD1bXSl7Y29uc3QgaD1p'@;
put 'YWUoe30sZCk7cmV0dXJuIGZ1bmN0aW9uIENiZShjLGwsYSl7Y29uc3QgZD1uZXcga3koYSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShkKX0oMCwwLGEpLnRoZW4oZj0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KGYsaCkpfV9tb2R1bGVEb0Jvb3RzdHJhcChhKXtjb25zdCBkPWEuaW5q'@;
put 'ZWN0b3IuZ2V0KHVwKTtpZihhLl9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKWEuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChoPT5kLmJvb3RzdHJhcChoKSk7ZWxzZXtpZighYS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBucigtNDAzLCExKTthLmluc3RhbmNl'@;
put 'Lm5nRG9Cb290c3RyYXAoZCl9dGhpcy5fbW9kdWxlcy5wdXNoKGEpfW9uRGVzdHJveShhKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IG5yKDQw'@;
put 'NCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZD0+ZC5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChkPT5kKCkpO2NvbnN0IGE9dGhpcy5faW5qZWN0b3IuZ2V0KFBVLG51bGwpO2EmJihhLmZvckVhY2goZD0+ZCgpKSxhLmNsZWFyKCkpLHRoaXMu'@;
put 'X2Rlc3Ryb3llZD0hMH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihEbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm'@;
put 'YWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSkoKSxYNT1udWxsO2NvbnN0IHVhZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIGRhZShjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFN0KGQpO3JldHVybihmPVtdKT0+e2xldCB2PUZVKCk7aWYoIXZ8fHYu'@;
put 'aW5qZWN0b3IuZ2V0KHVhZSwhMSkpe2NvbnN0IE09Wy4uLmEsLi4uZix7cHJvdmlkZTpoLHVzZVZhbHVlOiEwfV07Yz9jKE0pOmZ1bmN0aW9uIERiZShjKXtpZihYNSYmIVg1LmdldCh1YWUsITEpKXRocm93IG5ldyBucig0MDAsITEpOyhmdW5jdGlvbiBuYWUoKXshZnVuY3Rpb24gUmUoYyl7'@;
put 'QWU9Y30oKCk9Pnt0aHJvdyBuZXcgbnIoNjAwLCExKX0pfSkoKSxYNT1jO2NvbnN0IGw9Yy5nZXQoY2FlKTsoZnVuY3Rpb24gZmFlKGMpe2MuZ2V0KE5rLG51bGwpPy5mb3JFYWNoKGE9PmEoKSl9KShjKX0oZnVuY3Rpb24gaGFlKGM9W10sbCl7cmV0dXJuIERvLmNyZWF0ZSh7bmFtZTpsLHBy'@;
put 'b3ZpZGVyczpbe3Byb3ZpZGU6RjYsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6UFUsdXNlVmFsdWU6bmV3IFNldChbKCk9Plg1PW51bGxdKX0sLi4uY119KX0oTSxkKSl9cmV0dXJuIGZ1bmN0aW9uIEliZShjKXtjb25zdCBsPUZVKCk7aWYoIWwpdGhyb3cgbmV3IG5yKDQwMSwhMSk7'@;
put 'cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIEZVKCl7cmV0dXJuIFg1Py5nZXQoY2FlKT8/bnVsbH1sZXQgeG89KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1MYmV9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBMYmUoYyl7cmV0dXJuIGZ1bmN0aW9uIE9iZShjLGwsYSl7'@;
put 'aWYoSWYoYykmJiFhKXtjb25zdCBkPVAxKGMuaW5kZXgsbCk7cmV0dXJuIG5ldyBfOChkLGQpfXJldHVybiA0NyZjLnR5cGU/bmV3IF84KGxbamxdLGwpOm51bGx9KG9sKCksY2koKSwhKDE2Jn5jKSl9Y2xhc3MgeWFle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBEeShsKX1j'@;
put 'cmVhdGUobCl7cmV0dXJuIG5ldyBWYmUobCl9fWNvbnN0IE5iZT0oYyxsKT0+bDtjbGFzcyBWYmV7Y29uc3RydWN0b3IobCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0'@;
put 'aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxz'@;
put 'VGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPWx8fE5iZX1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9pdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0KWwoYSl9Zm9yRWFj'@;
put 'aE9wZXJhdGlvbihsKXtsZXQgYT10aGlzLl9pdEhlYWQsZD10aGlzLl9yZW1vdmFsc0hlYWQsaD0wLGY9bnVsbDtmb3IoO2F8fGQ7KXtjb25zdCB2PSFkfHxhJiZhLmN1cnJlbnRJbmRleDxfYWUoZCxoLGYpP2E6ZCxNPV9hZSh2LGgsZiksST12LmN1cnJlbnRJbmRleDtpZih2PT09ZCloLS0s'@;
put 'ZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxsPT12LnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IEc9TS1oLHJlPUktaDtpZihHIT1yZSl7Zm9yKGxldCB5ZT0wO3llPEc7eWUrKyl7Y29uc3QgRWU9eWU8Zi5sZW5ndGg/Zlt5ZV06Zlt5ZV09MCxC'@;
put 'ZT1FZSt5ZTtyZTw9QmUmJkJlPEcmJihmW3llXT1FZSsxKX1mW3YucHJldmlvdXNJbmRleF09cmUtR319TSE9PUkmJmwodixNLEkpfX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9'@;
put 'Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaE1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0TW92ZWQpbChhKX1mb3JFYWNo'@;
put 'UmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UobCl7bGV0IGE7Zm9yKGE9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRJZGVudGl0'@;
put 'eUNoYW5nZSlsKGEpfWRpZmYobCl7aWYobnVsbD09bCYmKGw9W10pLCFEeShsKSl0aHJvdyBuZXcgbnIoOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGgsZix2LGE9dGhpcy5faXRIZWFkLGQ9ITE7'@;
put 'aWYoQXJyYXkuaXNBcnJheShsKSl7dGhpcy5sZW5ndGg9bC5sZW5ndGg7Zm9yKGxldCBNPTA7TTx0aGlzLmxlbmd0aDtNKyspZj1sW01dLHY9dGhpcy5fdHJhY2tCeUZuKE0sZiksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRp'@;
put 'b24oYSxmLHYsTSkpLE9iamVjdC5pcyhhLml0ZW0sZil8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEsZikpOihhPXRoaXMuX21pc21hdGNoKGEsZix2LE0pLGQ9ITApLGE9YS5fbmV4dH1lbHNlIGg9MCxmdW5jdGlvbiByVShjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBhPTA7'@;
put 'YTxjLmxlbmd0aDthKyspbChjW2FdKTtlbHNle2NvbnN0IGE9Y1tTeW1ib2wuaXRlcmF0b3JdKCk7bGV0IGQ7Zm9yKDshKGQ9YS5uZXh0KCkpLmRvbmU7KWwoZC52YWx1ZSl9fShsLE09Pnt2PXRoaXMuX3RyYWNrQnlGbihoLE0pLG51bGwhPT1hJiZPYmplY3QuaXMoYS50cmFja0J5SWQsdik/'@;
put 'KGQmJihhPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGEsTSx2LGgpKSxPYmplY3QuaXMoYS5pdGVtLE0pfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShhLE0pKTooYT10aGlzLl9taXNtYXRjaChhLE0sdixoKSxkPSEwKSxhPWEuX25leHQsaCsrfSksdGhpcy5sZW5ndGg9aDtyZXR1cm4gdGhp'@;
put 'cy5fdHJ1bmNhdGUoYSksdGhpcy5jb2xsZWN0aW9uPWwsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRp'@;
put 'dHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2ZvcihsPXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09bDts'@;
put 'PWwuX25leHRBZGRlZClsLnByZXZpb3VzSW5kZXg9bC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLGw9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1sO2w9bC5fbmV4dE1vdmVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRl'@;
put 'eDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2gobCxhLGQsaCl7bGV0IGY7'@;
put 'cmV0dXJuIG51bGw9PT1sP2Y9dGhpcy5faXRUYWlsOihmPWwuX3ByZXYsdGhpcy5fcmVtb3ZlKGwpKSxudWxsIT09KGw9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMu'@;
put 'X2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fcmVpbnNlcnRBZnRlcihsLGYsaCkpOm51bGwhPT0obD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGQsaCkpPyhPYmplY3QuaXMobC5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNo'@;
put 'YW5nZShsLGEpLHRoaXMuX21vdmVBZnRlcihsLGYsaCkpOmw9dGhpcy5fYWRkQWZ0ZXIobmV3IEJiZShhLGQpLGYsaCksbH1fdmVyaWZ5UmVpbnNlcnRpb24obCxhLGQsaCl7bGV0IGY9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQo'@;
put 'ZCxudWxsKTtyZXR1cm4gbnVsbCE9PWY/bD10aGlzLl9yZWluc2VydEFmdGVyKGYsbC5fcHJldixoKTpsLmN1cnJlbnRJbmRleCE9aCYmKGwuY3VycmVudEluZGV4PWgsdGhpcy5fYWRkVG9Nb3ZlcyhsLGgpKSxsfV90cnVuY2F0ZShsKXtmb3IoO251bGwhPT1sOyl7Y29uc3QgYT1sLl9uZXh0'@;
put 'O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGwpKSxsPWF9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVs'@;
put 'bCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92'@;
put 'ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIobCxhLGQpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVj'@;
put 'b3Jkcy5yZW1vdmUobCk7Y29uc3QgaD1sLl9wcmV2UmVtb3ZlZCxmPWwuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09aD90aGlzLl9yZW1vdmFsc0hlYWQ9ZjpoLl9uZXh0UmVtb3ZlZD1mLG51bGw9PT1mP3RoaXMuX3JlbW92YWxzVGFpbD1oOmYuX3ByZXZSZW1vdmVkPWgsdGhpcy5faW5z'@;
put 'ZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxsfV9tb3ZlQWZ0ZXIobCxhLGQpe3JldHVybiB0aGlzLl91bmxpbmsobCksdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxsfV9hZGRBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX2luc2Vy'@;
put 'dEFmdGVyKGwsYSxkKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9bDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCxsfV9pbnNlcnRBZnRlcihsLGEsZCl7Y29uc3QgaD1udWxsPT09YT90aGlzLl9pdEhl'@;
put 'YWQ6YS5fbmV4dDtyZXR1cm4gbC5fbmV4dD1oLGwuX3ByZXY9YSxudWxsPT09aD90aGlzLl9pdFRhaWw9bDpoLl9wcmV2PWwsbnVsbD09PWE/dGhpcy5faXRIZWFkPWw6YS5fbmV4dD1sLG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgYmFlKSx0'@;
put 'aGlzLl9saW5rZWRSZWNvcmRzLnB1dChsKSxsLmN1cnJlbnRJbmRleD1kLGx9X3JlbW92ZShsKXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpfV91bmxpbmsobCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3Zl'@;
put 'KGwpO2NvbnN0IGE9bC5fcHJldixkPWwuX25leHQ7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2l0SGVhZD1kOmEuX25leHQ9ZCxudWxsPT09ZD90aGlzLl9pdFRhaWw9YTpkLl9wcmV2PWEsbH1fYWRkVG9Nb3ZlcyhsLGEpe3JldHVybiBsLnByZXZpb3VzSW5kZXg9PT1hfHwodGhpcy5fbW92ZXNU'@;
put 'YWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNIZWFkPWw6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bCksbH1fYWRkVG9SZW1vdmFscyhsKXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgYmFlKSx0'@;
put 'aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZS'@;
put 'ZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVudGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVu'@;
put 'dGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bCxsfX1jbGFzcyBCYmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudElu'@;
put 'ZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92'@;
put 'ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgamJle2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRo'@;
put 'aXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxsLl9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVs'@;
put 'bCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hl'@;
put 'YWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1hOmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgYmFle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQobCl7Y29uc3QgYT1sLnRyYWNrQnlJZDtsZXQgZD10aGlzLm1hcC5nZXQoYSk7ZHx8'@;
put 'KGQ9bmV3IGpiZSx0aGlzLm1hcC5zZXQoYSxkKSksZC5hZGQobCl9Z2V0KGwsYSl7Y29uc3QgaD10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGg/aC5nZXQobCxhKTpudWxsfXJlbW92ZShsKXtjb25zdCBhPWwudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoYSkucmVtb3ZlKGwpJiZ0aGlz'@;
put 'Lm1hcC5kZWxldGUoYSksbH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIF9hZShjLGwsYSl7Y29uc3QgZD1jLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWQpcmV0dXJuIGQ7bGV0IGg9MDtyZXR1cm4gYSYm'@;
put 'ZDxhLmxlbmd0aCYmKGg9YVtkXSksZCtsK2h9Y2xhc3Mgd2Fle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxyTShsKX1jcmVhdGUoKXtyZXR1cm4gbmV3IHpiZX19Y2xhc3MgemJle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFw'@;
put 'LHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxs'@;
put 'LHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7'@;
put 'bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQg'@;
put 'YTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBh'@;
put 'O2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8fHJNKGwpKSl0aHJvdyBuZXcgbnIoOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51'@;
put 'bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVu'@;
put 'ZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0'@;
put 'IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShkLmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFs'@;
put 'dWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNE'@;
put 'aXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQmJihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9'@;
put 'cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jk'@;
put 'cy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsdj1oLl9uZXh0O3JldHVybiBmJiYoZi5fbmV4dD12KSx2JiYodi5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3Qg'@;
put 'ZD1uZXcgVWJlKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMu'@;
put 'X3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVh'@;
put 'ZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxs'@;
put 'fX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRp'@;
put 'b25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRkaXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVh'@;
put 'ZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wgaW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3Mg'@;
put 'VWJle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRS'@;
put 'ZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVuY3Rpb24gQ2FlKCl7cmV0dXJuIG5ldyBxNShbbmV3IHlhZV0pfWxldCBxNT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpDYWV9KX1j'@;
put 'b25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6'@;
put 'ZD0+Yy5jcmVhdGUoYSxkfHxDYWUoKSksZGVwczpbW2MsbmV3IHVkLG5ldyBSMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihudWxsIT1kKXJldHVybiBkO3Rocm93IG5ldyBucig5MDEsITEpfX1yZXR1cm4gY30pKCk7ZnVuY3Rp'@;
put 'b24gU2FlKCl7cmV0dXJuIG5ldyBFTShbbmV3IHdhZV0pfWxldCBFTT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpTYWV9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVh'@;
put 'dGUoYSxkKXtpZihkKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxTYWUoKSksZGVwczpbW2MsbmV3IHVkLG5ldyBSMV1d'@;
put 'fX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBucig5MDEsITEpfX1yZXR1cm4gY30pKCk7Y29uc3QgWWJlPWRhZShudWxsLCJjb3JlIixbXSk7bGV0IEdiZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj'@;
put 'dG9yKGEpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcih1cCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBzMShjKXtyZXR1'@;
put 'cm4iYm9vbGVhbiI9PXR5cGVvZiBjP2M6bnVsbCE9YyYmImZhbHNlIiE9PWN9ZnVuY3Rpb24gV2FlKGMpe2NvbnN0IGw9X2UobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtfZShsKX19ZnVuY3Rpb24gcFIoYyxsKXtjb25zdCBhPUJzKGMpLGQ9bC5lbGVtZW50SW5qZWN0b3J8fE4zKCk7'@;
put 'cmV0dXJuIG5ldyBrOChhKS5jcmVhdGUoZCxsLnByb2plY3RhYmxlTm9kZXMsbC5ob3N0RWxlbWVudCxsLmVudmlyb25tZW50SW5qZWN0b3IpfWxldCBHYWU9bnVsbDtmdW5jdGlvbiBKNSgpe3JldHVybiBHYWV9Y2xhc3Mga19le31jb25zdCBtbz1uZXcgU3QoIiIpO2xldCBVVT0oKCk9Pntj'@;
put 'bGFzcyBje2hpc3RvcnlHbyhhKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmhpKElfZSkscHJvdmlkZWRJbjoicGxhdGZv'@;
put 'cm0ifSl9fXJldHVybiBjfSkoKTtjb25zdCBEX2U9bmV3IFN0KCIiKTtsZXQgSV9lPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBVVXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZG9jPWhpKG1vKSx0aGlzLl9sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cu'@;
put 'aGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gSjUoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoYSl7Y29uc3QgZD1KNSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGQuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3Rh'@;
put 'dGUiLGEsITEpLCgpPT5kLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixhKX1vbkhhc2hDaGFuZ2UoYSl7Y29uc3QgZD1KNSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGQuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsYSwhMSks'@;
put 'KCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsYSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaHJlZn1nZXQgcHJvdG9jb2woKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhv'@;
put 'c3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBvcnR9Z2V0IHBhdGhuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBhdGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9u'@;
put 'Lmhhc2h9c2V0IHBhdGhuYW1lKGEpe3RoaXMuX2xvY2F0aW9uLnBhdGhuYW1lPWF9cHVzaFN0YXRlKGEsZCxoKXt0aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZShhLGQsaCl9cmVwbGFjZVN0YXRlKGEsZCxoKXt0aGlzLl9oaXN0b3J5LnJlcGxhY2VTdGF0ZShhLGQsaCl9Zm9yd2FyZCgpe3RoaXMu'@;
put 'X2hpc3RvcnkuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9oaXN0b3J5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9oaXN0b3J5LmdvKGEpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2hpc3Rvcnkuc3RhdGV9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTooKT0+bmV3IGMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBaVShjLGwpe2lmKDA9PWMubGVuZ3RoKXJldHVybiBsO2lmKDA9PWwubGVuZ3RoKXJldHVybiBjO2xl'@;
put 'dCBhPTA7cmV0dXJuIGMuZW5kc1dpdGgoIi8iKSYmYSsrLGwuc3RhcnRzV2l0aCgiLyIpJiZhKyssMj09YT9jK2wuc3Vic3RyaW5nKDEpOjE9PWE/YytsOmMrIi8iK2x9ZnVuY3Rpb24gJGFlKGMpe2NvbnN0IGw9Yy5tYXRjaCgvI3xcP3wkLyksYT1sJiZsLmluZGV4fHxjLmxlbmd0aDtyZXR1'@;
put 'cm4gYy5zbGljZSgwLGEtKCIvIj09PWNbYS0xXT8xOjApKStjLnNsaWNlKGEpfWZ1bmN0aW9uIFg0KGMpe3JldHVybiBjJiYiPyIhPT1jWzBdPyI/IitjOmN9bGV0IFo4PSgoKT0+e2NsYXNzIGN7aGlzdG9yeUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTooKT0+aGkoWGFlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgS2FlPW5ldyBTdCgiIik7bGV0IFhhZT0oKCk9PntjbGFzcyBjIGV4'@;
put 'dGVuZHMgWjh7Y29uc3RydWN0b3IoYSxkKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249YSx0aGlzLl9yZW1vdmVMaXN0ZW5lckZucz1bXSx0aGlzLl9iYXNlSHJlZj1kPz90aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpPz9oaShtbykubG9jYXRpb24/'@;
put 'Lm9yaWdpbj8/IiJ9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKGEpe3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBv'@;
put 'cFN0YXRlKGEpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKGEpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIFpVKHRoaXMuX2Jhc2VIcmVmLGEpfXBhdGgoYT0hMSl7Y29uc3QgZD10aGlzLl9wbGF0'@;
put 'Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK1g0KHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxoPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gaCYmYT9gJHtkfSR7aH1gOmR9cHVzaFN0YXRlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtY'@;
put 'NChmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLHYpfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtjb25zdCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKGEsZCx2KX1mb3J3YXJkKCl7dGhp'@;
put 'cy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlH'@;
put 'bz8uKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKFVVKSxDcihLYWUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgp'@;
put 'LFJfZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWjh7Y29uc3RydWN0b3IoYSxkKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249YSx0aGlzLl9iYXNlSHJlZj0iIix0aGlzLl9yZW1vdmVMaXN0ZW5lckZucz1bXSxudWxsIT1kJiYodGhpcy5fYmFzZUhyZWY9ZCl9bmdPbkRlc3Ryb3ko'@;
put 'KXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKGEpe3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGEpLHRoaXMuX3BsYXRmb3Jt'@;
put 'TG9jYXRpb24ub25IYXNoQ2hhbmdlKGEpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wYXRoKGE9ITEpe2NvbnN0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoPz8iIyI7cmV0dXJuIGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6ZH1wcmVwYXJlRXh0ZXJuYWxV'@;
put 'cmwoYSl7Y29uc3QgZD1aVSh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtsZXQgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1g0KGYpKTswPT12Lmxlbmd0aCYmKHY9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFt'@;
put 'ZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLHYpfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtsZXQgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1g0KGYpKTswPT12Lmxlbmd0aCYmKHY9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZv'@;
put 'cm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLHYpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhp'@;
put 'c3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoQ3IoVVUpLENyKEthZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpj'@;
put 'Llx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCkscGg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9zdWJqZWN0PW5ldyBLcix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1h'@;
put 'O2NvbnN0IGQ9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIFBfZShjKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChjKSl7Y29uc3RbLGFdPWMuc3BsaXQoL1wvXC9bXlwvXSsvKTtyZXR1cm4gYX1yZXR1cm4g'@;
put 'Y30oJGFlKHFhZShkKSkpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kub25Qb3BTdGF0ZShoPT57dGhpcy5fc3ViamVjdC5lbWl0KHt1cmw6dGhpcy5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6aC5zdGF0ZSx0eXBlOmgudHlwZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91cmxDaGFuZ2VTdWJzY3Jp'@;
put 'cHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdfXBhdGgoYT0hMSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucGF0aChhKSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRTdGF0ZSgp'@;
put 'fWlzQ3VycmVudFBhdGhFcXVhbFRvKGEsZD0iIil7cmV0dXJuIHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShhK1g0KGQpKX1ub3JtYWxpemUoYSl7cmV0dXJuIGMuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uIE9fZShjLGwpe2lmKCFjfHwhbC5zdGFydHNXaXRoKGMpKXJldHVybiBs'@;
put 'O2NvbnN0IGE9bC5zdWJzdHJpbmcoYy5sZW5ndGgpO3JldHVybiIiPT09YXx8WyIvIiwiOyIsIj8iLCIjIl0uaW5jbHVkZXMoYVswXSk/YTpsfSh0aGlzLl9iYXNlUGF0aCxxYWUoYSkpKX1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGEmJiIvIiE9PWFbMF0mJihhPSIvIithKSx0aGlz'@;
put 'Ll9sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChhKX1nbyhhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnB1c2hTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErWDQoZCkp'@;
put 'LGgpfXJlcGxhY2VTdGF0ZShhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErWDQoZCkpLGgpfWZvcndhcmQoKXt0aGlzLl9sb2Nh'@;
put 'dGlvblN0cmF0ZWd5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5oaXN0b3J5R28/LihhKX1vblVybENoYW5nZShhKXtyZXR1cm4gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2go'@;
put 'YSksdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPz89dGhpcy5zdWJzY3JpYmUoZD0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhkLnVybCxkLnN0YXRlKX0pLCgpPT57Y29uc3QgZD10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuaW5kZXhPZihhKTt0aGlzLl91cmxDaGFuZ2VM'@;
put 'aXN0ZW5lcnMuc3BsaWNlKGQsMSksMD09PXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5sZW5ndGgmJih0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwpfX1fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGE9'@;
put 'IiIsZCl7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmZvckVhY2goaD0+aChhLGQpKX1zdWJzY3JpYmUoYSxkLGgpe3JldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQsY29tcGxldGU6aH0pfXN0YXRpY3t0aGlzLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPVg0fXN0'@;
put 'YXRpY3t0aGlzLmpvaW5XaXRoU2xhc2g9WlV9c3RhdGlje3RoaXMuc3RyaXBUcmFpbGluZ1NsYXNoPSRhZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihaOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'KCk9PmZ1bmN0aW9uIExfZSgpe3JldHVybiBuZXcgcGgoQ3IoWjgpKX0oKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gcWFlKGMpe3JldHVybiBjLnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgYzA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Gb3Jt'@;
put 'YXQ9MF09IkZvcm1hdCIsY1tjLlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUiLGN9KGMwfHx7fSksbGw9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OYXJyb3c9MF09Ik5hcnJvdyIsY1tjLkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsY1tjLldpZGU9Ml09IldpZGUiLGNbYy5TaG9ydD0z'@;
put 'XT0iU2hvcnQiLGN9KGxsfHx7fSksQ2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TaG9ydD0wXT0iU2hvcnQiLGNbYy5NZWRpdW09MV09Ik1lZGl1bSIsY1tjLkxvbmc9Ml09IkxvbmciLGNbYy5GdWxsPTNdPSJGdWxsIixjfShDZHx8e30pO2Z1bmN0aW9uIFdVKGMsbCxhKXtjb25zdCBkPWEx'@;
put 'KGMpLGY9TTIoW2RbUWwuRGF5c0Zvcm1hdF0sZFtRbC5EYXlzU3RhbmRhbG9uZV1dLGwpO3JldHVybiBNMihmLGEpfWZ1bmN0aW9uIFlVKGMsbCxhKXtjb25zdCBkPWExKGMpLGY9TTIoW2RbUWwuTW9udGhzRm9ybWF0XSxkW1FsLk1vbnRoc1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gTTIoZixh'@;
put 'KX1mdW5jdGlvbiBNMihjLGwpe2ZvcihsZXQgYT1sO2E+LTE7YS0tKWlmKHR5cGVvZiBjW2FdPCJ1IilyZXR1cm4gY1thXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gc3NlKGMsbCl7bD1lbmNvZGVVUklDb21wb25l'@;
put 'bnQobCk7Zm9yKGNvbnN0IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9Y29u'@;
put 'c3Qgblo9L1xzKy8sb3NlPVtdO2xldCB2dT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdFbD1hLHRoaXMuX3JlbmRlcmVyPWQsdGhpcy5pbml0aWFsQ2xhc3Nlcz1vc2UsdGhpcy5zdGF0ZU1hcD1uZXcgTWFwfXNldCBrbGFzcyhhKXt0aGlzLmluaXRpYWxDbGFzc2Vz'@;
put 'PW51bGwhPWE/YS50cmltKCkuc3BsaXQoblopOm9zZX1zZXQgbmdDbGFzcyhhKXt0aGlzLnJhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgYT9hLnRyaW0oKS5zcGxpdChuWik6YX1uZ0RvQ2hlY2soKXtmb3IoY29uc3QgZCBvZiB0aGlzLmluaXRpYWxDbGFzc2VzKXRoaXMuX3VwZGF0ZVN0YXRl'@;
put 'KGQsITApO2NvbnN0IGE9dGhpcy5yYXdDbGFzcztpZihBcnJheS5pc0FycmF5KGEpfHxhIGluc3RhbmNlb2YgU2V0KWZvcihjb25zdCBkIG9mIGEpdGhpcy5fdXBkYXRlU3RhdGUoZCwhMCk7ZWxzZSBpZihudWxsIT1hKWZvcihjb25zdCBkIG9mIE9iamVjdC5rZXlzKGEpKXRoaXMuX3VwZGF0'@;
put 'ZVN0YXRlKGQsISFhW2RdKTt0aGlzLl9hcHBseVN0YXRlRGlmZigpfV91cGRhdGVTdGF0ZShhLGQpe2NvbnN0IGg9dGhpcy5zdGF0ZU1hcC5nZXQoYSk7dm9pZCAwIT09aD8oaC5lbmFibGVkIT09ZCYmKGguY2hhbmdlZD0hMCxoLmVuYWJsZWQ9ZCksaC50b3VjaGVkPSEwKTp0aGlzLnN0YXRl'@;
put 'TWFwLnNldChhLHtlbmFibGVkOmQsY2hhbmdlZDohMCx0b3VjaGVkOiEwfSl9X2FwcGx5U3RhdGVEaWZmKCl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5zdGF0ZU1hcCl7Y29uc3QgZD1hWzBdLGg9YVsxXTtoLmNoYW5nZWQ/KHRoaXMuX3RvZ2dsZUNsYXNzKGQsaC5lbmFibGVkKSxoLmNoYW5nZWQ9'@;
put 'ITEpOmgudG91Y2hlZHx8KGguZW5hYmxlZCYmdGhpcy5fdG9nZ2xlQ2xhc3MoZCwhMSksdGhpcy5zdGF0ZU1hcC5kZWxldGUoZCkpLGgudG91Y2hlZD0hMX19X3RvZ2dsZUNsYXNzKGEsZCl7KGE9YS50cmltKCkpLmxlbmd0aD4wJiZhLnNwbGl0KG5aKS5mb3JFYWNoKGg9PntkP3RoaXMuX3Jl'@;
put 'bmRlcmVyLmFkZENsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShRaSksJGUoRXMp'@;
put 'KX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbVm4uTm9uZSwiY2xhc3MiLCJrbGFzcyJdLG5nQ2xhc3M6Im5nQ2xhc3MifSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKTtjbGFzcyBfd2V7'@;
put 'Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy4kaW1wbGljaXQ9bCx0aGlzLm5nRm9yT2Y9YSx0aGlzLmluZGV4PWQsdGhpcy5jb3VudD1ofWdldCBmaXJzdCgpe3JldHVybiAwPT09dGhpcy5pbmRleH1nZXQgbGFzdCgpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfWdldCBldmVu'@;
put 'KCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH1nZXQgb2RkKCl7cmV0dXJuIXRoaXMuZXZlbn19bGV0IFFzPSgoKT0+e2NsYXNzIGN7c2V0IG5nRm9yT2YoYSl7dGhpcy5fbmdGb3JPZj1hLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGEpe3RoaXMuX3RyYWNrQnlGbj1h'@;
put 'fWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufWNvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl92aWV3Q29udGFpbmVyPWEsdGhpcy5fdGVtcGxhdGU9ZCx0aGlzLl9kaWZmZXJzPWgsdGhpcy5fbmdGb3JPZj1udWxsLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9k'@;
put 'aWZmZXI9bnVsbH1zZXQgbmdGb3JUZW1wbGF0ZShhKXthJiYodGhpcy5fdGVtcGxhdGU9YSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7Y29uc3QgYT10aGlzLl9uZ0Zvck9mOyF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9'@;
put 'dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSkpfWlmKHRoaXMuX2RpZmZlcil7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ0Zvck9mKTthJiZ0aGlzLl9hcHBseUNoYW5nZXMoYSl9fV9hcHBseUNoYW5nZXMoYSl7Y29uc3QgZD10aGlzLl92'@;
put 'aWV3Q29udGFpbmVyO2EuZm9yRWFjaE9wZXJhdGlvbigoaCxmLHYpPT57aWYobnVsbD09aC5wcmV2aW91c0luZGV4KWQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBfd2UoaC5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT12P3ZvaWQgMDp2KTtlbHNlIGlm'@;
put 'KG51bGw9PXYpZC5yZW1vdmUobnVsbD09PWY/dm9pZCAwOmYpO2Vsc2UgaWYobnVsbCE9PWYpe2NvbnN0IE09ZC5nZXQoZik7ZC5tb3ZlKE0sdiksY3NlKE0saCl9fSk7Zm9yKGxldCBoPTAsZj1kLmxlbmd0aDtoPGY7aCsrKXtjb25zdCBNPWQuZ2V0KGgpLmNvbnRleHQ7TS5pbmRleD1oLE0u'@;
put 'Y291bnQ9ZixNLm5nRm9yT2Y9dGhpcy5fbmdGb3JPZn1hLmZvckVhY2hJZGVudGl0eUNoYW5nZShoPT57Y3NlKGQuZ2V0KGguY3VycmVudEluZGV4KSxoKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGQpe3JldHVybiBuZXcoZHx8YykoJGUoVHMpLCRlKHdsKSwkZShxNSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRy'@;
put 'YWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBjc2UoYyxsKXtjLmNvbnRleHQuJGltcGxpY2l0PWwuaXRlbX1sZXQgYmE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3ZpZXdDb250'@;
put 'YWluZXI9YSx0aGlzLl9jb250ZXh0PW5ldyB3d2UsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1kfXNldCBuZ0lmKGEp'@;
put 'e3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1hLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oYSl7dXNlKCJuZ0lmVGhlbiIsYSksdGhpcy5fdGhlblRlbXBsYXRlUmVmPWEsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9'@;
put 'c2V0IG5nSWZFbHNlKGEpe3VzZSgibmdJZkVsc2UiLGEpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1hLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92'@;
put 'aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0'@;
put 'aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1w'@;
put 'bGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoVHMpLCRlKHdsKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyIiLCJuZ0lmIiwiIl1dLGlucHV0czp7bmdJZjoibmdJZiIsbmdJZlRoZW46Im5nSWZUaGVuIixuZ0lmRWxzZToibmdJZkVsc2UifSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKTtjbGFzcyB3d2V7Y29uc3RydWN0b3IoKXt0aGlzLiRpbXBsaWNpdD1udWxs'@;
put 'LHRoaXMubmdJZj1udWxsfX1mdW5jdGlvbiB1c2UoYyxsKXtpZihsJiYhbC5jcmVhdGVFbWJlZGRlZFZpZXcpdGhyb3cgbmV3IEVycm9yKGAke2N9IG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICcke0hyKGwpfScuYCl9Y2xhc3Mgclp7Y29uc3RydWN0b3IobCxhKXt0aGlz'@;
put 'Ll92aWV3Q29udGFpbmVyUmVmPWwsdGhpcy5fdGVtcGxhdGVSZWY9YSx0aGlzLl9jcmVhdGVkPSExfWNyZWF0ZSgpe3RoaXMuX2NyZWF0ZWQ9ITAsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpfWRlc3Ryb3koKXt0aGlzLl9jcmVh'@;
put 'dGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX1lbmZvcmNlU3RhdGUobCl7bCYmIXRoaXMuX2NyZWF0ZWQ/dGhpcy5jcmVhdGUoKTohbCYmdGhpcy5fY3JlYXRlZCYmdGhpcy5kZXN0cm95KCl9fWxldCB4Mj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVm'@;
put 'YXVsdFZpZXdzPVtdLHRoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9c2V0IG5nU3dpdGNoKGEpe3RoaXMuX25nU3dpdGNoPWEsMD09PXRoaXMuX2Nhc2VDb3VudCYmdGhpcy5f'@;
put 'dXBkYXRlRGVmYXVsdENhc2VzKCEwKX1fYWRkQ2FzZSgpe3JldHVybiB0aGlzLl9jYXNlQ291bnQrK31fYWRkRGVmYXVsdChhKXt0aGlzLl9kZWZhdWx0Vmlld3MucHVzaChhKX1fbWF0Y2hDYXNlKGEpe2NvbnN0IGQ9YT09PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNN'@;
put 'YXRjaGVkfHw9ZCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMu'@;
put 'X2xhc3RDYXNlc01hdGNoZWQ9ITEpLGR9X3VwZGF0ZURlZmF1bHRDYXNlcyhhKXtpZih0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoPjAmJmEhPT10aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9YTtmb3IoY29uc3QgZCBvZiB0aGlzLl9kZWZhdWx0Vmlld3MpZC5lbmZvcmNl'@;
put 'U3RhdGUoYSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2giLCIiXV0saW5wdXRzOntuZ1N3aXRjaDoibmdTd2l0Y2gifSxzdGFuZGFsb25l'@;
put 'OiEwfSl9fXJldHVybiBjfSkoKSxkcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nU3dpdGNoPWgsaC5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3IHJaKGEsZCl9bmdEb0NoZWNrKCl7dGhpcy5fdmlldy5lbmZvcmNlU3RhdGUodGhpcy5uZ1N3aXRjaC5fbWF0Y2hD'@;
put 'YXNlKHRoaXMubmdTd2l0Y2hDYXNlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoVHMpLCRlKHdsKSwkZSh4Miw5KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaENhc2UiLCIi'@;
put 'XV0saW5wdXRzOntuZ1N3aXRjaENhc2U6Im5nU3dpdGNoQ2FzZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLGhzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ0VsPWEsdGhpcy5fZGlmZmVycz1kLHRoaXMuX3JlbmRlcmVyPWgsdGhpcy5fbmdTdHls'@;
put 'ZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGEpe3RoaXMuX25nU3R5bGU9YSwhdGhpcy5fZGlmZmVyJiZhJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChhKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2Rp'@;
put 'ZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X3NldFN0eWxlKGEsZCl7Y29uc3RbaCxmXT1hLnNwbGl0KCIuIiksdj0tMT09PWguaW5kZXhPZigiLSIpP3ZvaWQgMDpYMy5EYXNoQ2FzZTtudWxsIT1kP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRo'@;
put 'aXMuX25nRWwubmF0aXZlRWxlbWVudCxoLGY/YCR7ZH0ke2Z9YDpkLHYpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoLHYpfV9hcHBseUNoYW5nZXMoYSl7YS5mb3JFYWNoUmVtb3ZlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksbnVs'@;
put 'bCkpLGEuZm9yRWFjaEFkZGVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxkLmN1cnJlbnRWYWx1ZSkpLGEuZm9yRWFjaENoYW5nZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LGQuY3VycmVudFZhbHVlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVy'@;
put 'biBuZXcoZHx8YykoJGUoUWkpLCRlKEVNKSwkZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTdHlsZSIsIiJdXSxpbnB1dHM6e25nU3R5bGU6Im5nU3R5bGUifSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxCMT0oKCk9Pntj'@;
put 'bGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdP'@;
put 'bkNoYW5nZXMoYSl7aWYodGhpcy5fc2hvdWxkUmVjcmVhdGVWaWV3KGEpKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXJSZWY7aWYodGhpcy5fdmlld1JlZiYmZC5yZW1vdmUoZC5pbmRleE9mKHRoaXMuX3ZpZXdSZWYpKSwhdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXJldHVybiB2b2lkKHRo'@;
put 'aXMuX3ZpZXdSZWY9bnVsbCk7Y29uc3QgaD10aGlzLl9jcmVhdGVDb250ZXh0Rm9yd2FyZFByb3h5KCk7dGhpcy5fdmlld1JlZj1kLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm5nVGVtcGxhdGVPdXRsZXQsaCx7aW5qZWN0b3I6dGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I/P3ZvaWQg'@;
put 'MH0pfX1fc2hvdWxkUmVjcmVhdGVWaWV3KGEpe3JldHVybiEhYS5uZ1RlbXBsYXRlT3V0bGV0fHwhIWEubmdUZW1wbGF0ZU91dGxldEluamVjdG9yfV9jcmVhdGVDb250ZXh0Rm9yd2FyZFByb3h5KCl7cmV0dXJuIG5ldyBQcm94eSh7fSx7c2V0OihhLGQsaCk9PiEhdGhpcy5uZ1RlbXBsYXRl'@;
put 'T3V0bGV0Q29udGV4dCYmUmVmbGVjdC5zZXQodGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCxkLGgpLGdldDooYSxkLGgpPT57aWYodGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dClyZXR1cm4gUmVmbGVjdC5nZXQodGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCxkLGgpfX0pfXN0'@;
put 'YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKFRzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5n'@;
put 'VGVtcGxhdGVPdXRsZXRDb250ZXh0IixuZ1RlbXBsYXRlT3V0bGV0OiJuZ1RlbXBsYXRlT3V0bGV0IixuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I6Im5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2JsXX0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgeHdl'@;
put 'e2NyZWF0ZVN1YnNjcmlwdGlvbihsLGEpe3JldHVybiBXYWUoKCk9Pmwuc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZD0+e3Rocm93IGR9fSkpfWRpc3Bvc2UobCl7V2FlKCgpPT5sLnVuc3Vic2NyaWJlKCkpfX1jbGFzcyBFd2V7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIGwudGhl'@;
put 'bihhLGQ9Pnt0aHJvdyBkfSl9ZGlzcG9zZShsKXt9fWNvbnN0IFR3ZT1uZXcgRXdlLEF3ZT1uZXcgeHdlO2xldCBJTT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwLHRoaXMuX3N1YnNj'@;
put 'cmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsLHRoaXMuX3N0cmF0ZWd5PW51bGwsdGhpcy5fcmVmPWF9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX2Rpc3Bvc2UoKSx0aGlzLl9yZWY9bnVsbH10cmFuc2Zvcm0oYSl7aWYoIXRoaXMuX29iail7aWYoYSl0cnl7dGhp'@;
put 'cy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSExLHRoaXMuX3N1YnNjcmliZShhKX1maW5hbGx5e3RoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZT0hMH1yZXR1cm4gdGhpcy5fbGF0ZXN0VmFsdWV9cmV0dXJuIGEhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5z'@;
put 'Zm9ybShhKSk6dGhpcy5fbGF0ZXN0VmFsdWV9X3N1YnNjcmliZShhKXt0aGlzLl9vYmo9YSx0aGlzLl9zdHJhdGVneT10aGlzLl9zZWxlY3RTdHJhdGVneShhKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGEsZD0+dGhpcy5fdXBkYXRlTGF0'@;
put 'ZXN0VmFsdWUoYSxkKSl9X3NlbGVjdFN0cmF0ZWd5KGEpe2lmKHhNKGEpKXJldHVybiBUd2U7aWYodGFlKGEpKXJldHVybiBBd2U7dGhyb3cgZnVuY3Rpb24gR2YoYyxsKXtyZXR1cm4gbmV3IG5yKDIxMDAsITEpfSgpfV9kaXNwb3NlKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9z'@;
put 'dWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9X3VwZGF0ZUxhdGVzdFZhbHVlKGEsZCl7YT09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWQsdGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRl'@;
put 'JiZ0aGlzLl9yZWY/Lm1hcmtGb3JDaGVjaygpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZSh4bywxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJhc3luYyIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pfX1y'@;
put 'ZXR1cm4gY30pKCksaVo9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1hbCh7bmFtZToianNvbiIs'@;
put 'dHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCkseFI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRpZmZlcnM9YSx0aGlzLmtleVZhbHVlcz1bXSx0aGlzLmNvbXBhcmVGbj1mc2V9dHJhbnNmb3JtKGEsZD1mc2Upe2lmKCFhfHwhKGEgaW5zdGFu'@;
put 'Y2VvZiBNYXApJiYib2JqZWN0IiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7dGhpcy5kaWZmZXI/Pz10aGlzLmRpZmZlcnMuZmluZChhKS5jcmVhdGUoKTtjb25zdCBoPXRoaXMuZGlmZmVyLmRpZmYoYSksZj1kIT09dGhpcy5jb21wYXJlRm47cmV0dXJuIGgmJih0aGlzLmtleVZhbHVlcz1bXSxo'@;
put 'LmZvckVhY2hJdGVtKHY9Pnt0aGlzLmtleVZhbHVlcy5wdXNoKGZ1bmN0aW9uIEJ3ZShjLGwpe3JldHVybntrZXk6Yyx2YWx1ZTpsfX0odi5rZXksdi5jdXJyZW50VmFsdWUpKX0pKSwoaHx8ZikmJih0aGlzLmtleVZhbHVlcy5zb3J0KGQpLHRoaXMuY29tcGFyZUZuPWQpLHRoaXMua2V5VmFs'@;
put 'dWVzfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKEVNLDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9YWwoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBm'@;
put 'c2UoYyxsKXtjb25zdCBhPWMua2V5LGQ9bC5rZXk7aWYoYT09PWQpcmV0dXJuIDA7aWYodm9pZCAwPT09YSlyZXR1cm4gMTtpZih2b2lkIDA9PT1kKXJldHVybi0xO2lmKG51bGw9PT1hKXJldHVybiAxO2lmKG51bGw9PT1kKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZClyZXR1cm4gYS1kO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8tMToxO2NvbnN0IGg9U3RyaW5nKGEpLGY9U3Ry'@;
put 'aW5nKGQpO3JldHVybiBoPT1mPzA6aDxmPy0xOjF9bGV0IExhPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHt9'@;
put 'KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGVsKGMpe3JldHVybiJicm93c2VyIj09PWN9ZnVuY3Rpb24gZ3NlKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31sZXQgR3dlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0'@;
put 'b3J5OigpPT5lbChoaShpcykpP25ldyAkd2UoaGkobW8pLHdpbmRvdyk6bmV3IFh3ZX0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgJHdle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5kb2N1bWVudD1sLHRoaXMud2luZG93PWEsdGhpcy5vZmZzZXQ9KCk9PlswLDBdfXNldE9mZnNldChsKXt0aGlzLm9m'@;
put 'ZnNldD1BcnJheS5pc0FycmF5KGwpPygpPT5sOmx9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm5bdGhpcy53aW5kb3cuc2Nyb2xsWCx0aGlzLndpbmRvdy5zY3JvbGxZXX1zY3JvbGxUb1Bvc2l0aW9uKGwpe3RoaXMud2luZG93LnNjcm9sbFRvKGxbMF0sbFsxXSl9c2Nyb2xsVG9BbmNob3Io'@;
put 'bCl7Y29uc3QgYT1mdW5jdGlvbiBLd2UoYyxsKXtjb25zdCBhPWMuZ2V0RWxlbWVudEJ5SWQobCl8fGMuZ2V0RWxlbWVudHNCeU5hbWUobClbMF07aWYoYSlyZXR1cm4gYTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jcmVhdGVUcmVlV2Fsa2VyJiZjLmJvZHkmJiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBjLmJvZHkuYXR0YWNoU2hhZG93KXtjb25zdCBkPWMuY3JlYXRlVHJlZVdhbGtlcihjLmJvZHksTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQpO2xldCBoPWQuY3VycmVudE5vZGU7Zm9yKDtoOyl7Y29uc3QgZj1oLnNoYWRvd1Jvb3Q7aWYoZil7Y29uc3Qgdj1mLmdldEVsZW1lbnRCeUlkKGwp'@;
put 'fHxmLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPSIke2x9Il1gKTtpZih2KXJldHVybiB2fWg9ZC5uZXh0Tm9kZSgpfX1yZXR1cm4gbnVsbH0odGhpcy5kb2N1bWVudCxsKTthJiYodGhpcy5zY3JvbGxUb0VsZW1lbnQoYSksYS5mb2N1cygpKX1zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24obCl7'@;
put 'dGhpcy53aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbj1sfXNjcm9sbFRvRWxlbWVudChsKXtjb25zdCBhPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1hLmxlZnQrdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsaD1hLnRvcCt0aGlzLndpbmRvdy5wYWdlWU9mZnNldCxmPXRoaXMu'@;
put 'b2Zmc2V0KCk7dGhpcy53aW5kb3cuc2Nyb2xsVG8oZC1mWzBdLGgtZlsxXSl9fWNsYXNzIFh3ZXtzZXRPZmZzZXQobCl7fWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuWzAsMF19c2Nyb2xsVG9Qb3NpdGlvbihsKXt9c2Nyb2xsVG9BbmNob3IobCl7fXNldEhpc3RvcnlTY3JvbGxSZXN0b3Jh'@;
put 'dGlvbihsKXt9fWNsYXNzIG1zZXt9Y2xhc3MgTUNlIGV4dGVuZHMga19le2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX1jbGFzcyBsWiBleHRlbmRzIE1DZXtzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24gQV9lKGMpe0dh'@;
put 'ZT8/PWN9KG5ldyBsWil9b25BbmRDYW5jZWwobCxhLGQpe3JldHVybiBsLmFkZEV2ZW50TGlzdGVuZXIoYSxkKSwoKT0+e2wucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGQpfX1kaXNwYXRjaEV2ZW50KGwsYSl7bC5kaXNwYXRjaEV2ZW50KGEpfXJlbW92ZShsKXtsLnBhcmVudE5vZGUmJmwucGFy'@;
put 'ZW50Tm9kZS5yZW1vdmVDaGlsZChsKX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuKGE9YXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudChsKX1jcmVhdGVIdG1sRG9jdW1lbnQoKXtyZXR1cm4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3Vt'@;
put 'ZW50KCJmYWtlVGl0bGUiKX1nZXREZWZhdWx0RG9jdW1lbnQoKXtyZXR1cm4gZG9jdW1lbnR9aXNFbGVtZW50Tm9kZShsKXtyZXR1cm4gbC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfWlzU2hhZG93Um9vdChsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9Z2V0'@;
put 'R2xvYmFsRXZlbnRUYXJnZXQobCxhKXtyZXR1cm4id2luZG93Ij09PWE/d2luZG93OiJkb2N1bWVudCI9PT1hP2w6ImJvZHkiPT09YT9sLmJvZHk6bnVsbH1nZXRCYXNlSHJlZihsKXtjb25zdCBhPWZ1bmN0aW9uIHhDZSgpe3JldHVybiBPTT1PTXx8ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi'@;
put 'YmFzZSIpLE9NP09NLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGx9KCk7cmV0dXJuIG51bGw9PWE/bnVsbDpmdW5jdGlvbiBFQ2UoYyl7cmV0dXJuIG5ldyBVUkwoYyxkb2N1bWVudC5iYXNlVVJJKS5wYXRobmFtZX0oYSl9cmVzZXRCYXNlRWxlbWVudCgpe09NPW51bGx9Z2V0VXNlckFnZW50'@;
put 'KCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fWdldENvb2tpZShsKXtyZXR1cm4gc3NlKGRvY3VtZW50LmNvb2tpZSxsKX19bGV0IE9NPW51bGwsQUNlPSgoKT0+e2NsYXNzIGN7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fXN0YXRpY3t0aGlzLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGNaPW5ldyBTdCgiIik7bGV0IHhzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhp'@;
put 'cy5fem9uZT1kLHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luPW5ldyBNYXAsYS5mb3JFYWNoKGg9PntoLm1hbmFnZXI9dGhpc30pLHRoaXMuX3BsdWdpbnM9YS5zbGljZSgpLnJldmVyc2UoKX1hZGRFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihkKS5hZGRF'@;
put 'dmVudExpc3RlbmVyKGEsZCxoKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQbHVnaW5Gb3IoYSl7bGV0IGQ9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KGEpO2lmKGQpcmV0dXJuIGQ7aWYoZD10aGlzLl9wbHVnaW5zLmZpbmQoZj0+Zi5zdXBwb3J0cyhhKSksIWQpdGhy'@;
put 'b3cgbmV3IG5yKDUxMDEsITEpO3JldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQoYSxkKSxkfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKGNaKSxDcihHYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZh'@;
put 'Y3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzIEVzZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kb2M9bH19Y29uc3QgdVo9Im5nLWFwcC1pZCI7bGV0IFRzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGY9e30pe3RoaXMuZG9jPWEsdGhpcy5hcHBJZD1kLHRo'@;
put 'aXMubm9uY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnN0eWxlUmVmPW5ldyBNYXAsdGhpcy5ob3N0Tm9kZXM9bmV3IFNldCx0aGlzLnN0eWxlTm9kZXNJbkRPTT10aGlzLmNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0eWxlcygpLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1nc2UoZiksdGhpcy5y'@;
put 'ZXNldEhvc3ROb2RlcygpfWFkZFN0eWxlcyhhKXtmb3IoY29uc3QgZCBvZiBhKTE9PT10aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwxKSYmdGhpcy5vblN0eWxlQWRkZWQoZCl9cmVtb3ZlU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpdGhpcy5jaGFuZ2VVc2FnZUNvdW50KGQsLTEpPD0wJiZ0'@;
put 'aGlzLm9uU3R5bGVSZW1vdmVkKGQpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnN0eWxlTm9kZXNJbkRPTTthJiYoYS5mb3JFYWNoKGQ9PmQucmVtb3ZlKCkpLGEuY2xlYXIoKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLm9uU3R5bGVSZW1vdmVkKGQpO3Ro'@;
put 'aXMucmVzZXRIb3N0Tm9kZXMoKX1hZGRIb3N0KGEpe3RoaXMuaG9zdE5vZGVzLmFkZChhKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMuYWRkU3R5bGVUb0hvc3QoYSxkKX1yZW1vdmVIb3N0KGEpe3RoaXMuaG9zdE5vZGVzLmRlbGV0ZShhKX1nZXRBbGxTdHlsZXMo'@;
put 'KXtyZXR1cm4gdGhpcy5zdHlsZVJlZi5rZXlzKCl9b25TdHlsZUFkZGVkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuaG9zdE5vZGVzKXRoaXMuYWRkU3R5bGVUb0hvc3QoZCxhKX1vblN0eWxlUmVtb3ZlZChhKXtjb25zdCBkPXRoaXMuc3R5bGVSZWY7ZC5nZXQoYSk/LmVsZW1lbnRzPy5mb3JF'@;
put 'YWNoKGg9PmgucmVtb3ZlKCkpLGQuZGVsZXRlKGEpfWNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0eWxlcygpe2NvbnN0IGE9dGhpcy5kb2MuaGVhZD8ucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbJHt1Wn09IiR7dGhpcy5hcHBJZH0iXWApO2lmKGE/Lmxlbmd0aCl7Y29uc3QgZD1uZXcgTWFwO3Jl'@;
put 'dHVybiBhLmZvckVhY2goaD0+e251bGwhPWgudGV4dENvbnRlbnQmJmQuc2V0KGgudGV4dENvbnRlbnQsaCl9KSxkfXJldHVybiBudWxsfWNoYW5nZVVzYWdlQ291bnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVSZWY7aWYoaC5oYXMoYSkpe2NvbnN0IGY9aC5nZXQoYSk7cmV0dXJuIGYudXNh'@;
put 'Z2UrPWQsZi51c2FnZX1yZXR1cm4gaC5zZXQoYSx7dXNhZ2U6ZCxlbGVtZW50czpbXX0pLGR9Z2V0U3R5bGVFbGVtZW50KGEsZCl7Y29uc3QgaD10aGlzLnN0eWxlTm9kZXNJbkRPTSxmPWg/LmdldChkKTtpZihmPy5wYXJlbnROb2RlPT09YSlyZXR1cm4gaC5kZWxldGUoZCksZi5yZW1vdmVB'@;
put 'dHRyaWJ1dGUodVopLGY7e2NvbnN0IHY9dGhpcy5kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gdGhpcy5ub25jZSYmdi5zZXRBdHRyaWJ1dGUoIm5vbmNlIix0aGlzLm5vbmNlKSx2LnRleHRDb250ZW50PWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZ2LnNldEF0dHJpYnV0ZSh1'@;
put 'Wix0aGlzLmFwcElkKSxhLmFwcGVuZENoaWxkKHYpLHZ9fWFkZFN0eWxlVG9Ib3N0KGEsZCl7Y29uc3QgaD10aGlzLmdldFN0eWxlRWxlbWVudChhLGQpLGY9dGhpcy5zdHlsZVJlZix2PWYuZ2V0KGQpPy5lbGVtZW50czt2P3YucHVzaChoKTpmLnNldChkLHtlbGVtZW50czpbaF0sdXNhZ2U6'@;
put 'MX0pfXJlc2V0SG9zdE5vZGVzKCl7Y29uc3QgYT10aGlzLmhvc3ROb2RlczthLmNsZWFyKCksYS5hZGQodGhpcy5kb2MuaGVhZCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoQ3IobW8pLENyKFp2KSxDcihENSw4KSxDcihpcykpfX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGRaPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMu'@;
put 'b3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LGhaPS8lQ09NUCUvZyxSQ2U9bmV3IFN0KCIiLHtw'@;
put 'cm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMH0pO2Z1bmN0aW9uIGtzZShjLGwpe3JldHVybiBsLm1hcChhPT5hLnJlcGxhY2UoaFosYykpfWxldCBmWj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRz1udWxsKXt0aGlzLmV2ZW50TWFuYWdlcj1hLHRoaXMu'@;
put 'c2hhcmVkU3R5bGVzSG9zdD1kLHRoaXMuYXBwSWQ9aCx0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k9Zix0aGlzLmRvYz12LHRoaXMucGxhdGZvcm1JZD1NLHRoaXMubmdab25lPUksdGhpcy5ub25jZT1HLHRoaXMucmVuZGVyZXJCeUNvbXBJZD1uZXcgTWFwLHRoaXMucGxhdGZvcm1J'@;
put 'c1NlcnZlcj1nc2UoTSksdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IHBaKGEsdixJLHRoaXMucGxhdGZvcm1Jc1NlcnZlcil9Y3JlYXRlUmVuZGVyZXIoYSxkKXtpZighYXx8IWQpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO3RoaXMucGxhdGZvcm1Jc1NlcnZlciYmZC5lbmNhcHN1bGF0'@;
put 'aW9uPT09cW8uU2hhZG93RG9tJiYoZD17Li4uZCxlbmNhcHN1bGF0aW9uOnFvLkVtdWxhdGVkfSk7Y29uc3QgaD10aGlzLmdldE9yQ3JlYXRlUmVuZGVyZXIoYSxkKTtyZXR1cm4gaCBpbnN0YW5jZW9mIElzZT9oLmFwcGx5VG9Ib3N0KGEpOmggaW5zdGFuY2VvZiBnWiYmaC5hcHBseVN0eWxl'@;
put 'cygpLGh9Z2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpe2NvbnN0IGg9dGhpcy5yZW5kZXJlckJ5Q29tcElkO2xldCBmPWguZ2V0KGQuaWQpO2lmKCFmKXtjb25zdCB2PXRoaXMuZG9jLE09dGhpcy5uZ1pvbmUsST10aGlzLmV2ZW50TWFuYWdlcixHPXRoaXMuc2hhcmVkU3R5bGVzSG9zdCxyZT10'@;
put 'aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3ksdWU9dGhpcy5wbGF0Zm9ybUlzU2VydmVyO3N3aXRjaChkLmVuY2Fwc3VsYXRpb24pe2Nhc2UgcW8uRW11bGF0ZWQ6Zj1uZXcgSXNlKEksRyxkLHRoaXMuYXBwSWQscmUsdixNLHVlKTticmVhaztjYXNlIHFvLlNoYWRvd0RvbTpyZXR1cm4g'@;
put 'bmV3IEZDZShJLEcsYSxkLHYsTSx0aGlzLm5vbmNlLHVlKTtkZWZhdWx0OmY9bmV3IGdaKEksRyxkLHJlLHYsTSx1ZSl9aC5zZXQoZC5pZCxmKX1yZXR1cm4gZn1uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKHhzZSksQ3IoVHNlKSxDcihadiksQ3IoUkNlKSxDcihtbyksQ3IoaXMpLENyKEdhKSxDcihENSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzIHBae2Nv'@;
put 'bnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuZXZlbnRNYW5hZ2VyPWwsdGhpcy5kb2M9YSx0aGlzLm5nWm9uZT1kLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1oLHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMudGhyb3dPblN5bnRoZXRpY1Byb3BzPSEwLHRoaXMuZGVzdHJveU5vZGU9'@;
put 'bnVsbH1kZXN0cm95KCl7fWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gYT90aGlzLmRvYy5jcmVhdGVFbGVtZW50TlMoZFpbYV18fGEsbCk6dGhpcy5kb2MuY3JlYXRlRWxlbWVudChsKX1jcmVhdGVDb21tZW50KGwpe3JldHVybiB0aGlzLmRvYy5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRl'@;
put 'eHQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZVRleHROb2RlKGwpfWFwcGVuZENoaWxkKGwsYSl7KERzZShsKT9sLmNvbnRlbnQ6bCkuYXBwZW5kQ2hpbGQoYSl9aW5zZXJ0QmVmb3JlKGwsYSxkKXtsJiYoRHNlKGwpP2wuY29udGVudDpsKS5pbnNlcnRCZWZvcmUoYSxkKX1yZW1vdmVDaGls'@;
put 'ZChsLGEpe2wmJmwucmVtb3ZlQ2hpbGQoYSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtsZXQgZD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5kb2MucXVlcnlTZWxlY3RvcihsKTpsO2lmKCFkKXRocm93IG5ldyBucigtNTEwNCwhMSk7cmV0dXJuIGF8fChkLnRleHRDb250ZW50PSIiKSxkfXBh'@;
put 'cmVudE5vZGUobCl7cmV0dXJuIGwucGFyZW50Tm9kZX1uZXh0U2libGluZyhsKXtyZXR1cm4gbC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUobCxhLGQsaCl7aWYoaCl7YT1oKyI6IithO2NvbnN0IGY9ZFpbaF07Zj9sLnNldEF0dHJpYnV0ZU5TKGYsYSxkKTpsLnNldEF0dHJpYnV0ZShhLGQp'@;
put 'fWVsc2UgbC5zZXRBdHRyaWJ1dGUoYSxkKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe2lmKGQpe2NvbnN0IGg9ZFpbZF07aD9sLnJlbW92ZUF0dHJpYnV0ZU5TKGgsYSk6bC5yZW1vdmVBdHRyaWJ1dGUoYCR7ZH06JHthfWApfWVsc2UgbC5yZW1vdmVBdHRyaWJ1dGUoYSl9YWRkQ2xhc3MobCxh'@;
put 'KXtsLmNsYXNzTGlzdC5hZGQoYSl9cmVtb3ZlQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5yZW1vdmUoYSl9c2V0U3R5bGUobCxhLGQsaCl7aCYoWDMuRGFzaENhc2V8WDMuSW1wb3J0YW50KT9sLnN0eWxlLnNldFByb3BlcnR5KGEsZCxoJlgzLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6bC5z'@;
put 'dHlsZVthXT1kfXJlbW92ZVN0eWxlKGwsYSxkKXtkJlgzLkRhc2hDYXNlP2wuc3R5bGUucmVtb3ZlUHJvcGVydHkoYSk6bC5zdHlsZVthXT0iIn1zZXRQcm9wZXJ0eShsLGEsZCl7bnVsbCE9bCYmKGxbYV09ZCl9c2V0VmFsdWUobCxhKXtsLm5vZGVWYWx1ZT1hfWxpc3RlbihsLGEsZCl7aWYo'@;
put 'InN0cmluZyI9PXR5cGVvZiBsJiYhKGw9SjUoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLmRvYyxsKSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgJHtsfSBmb3IgZXZlbnQgJHthfWApO3JldHVybiB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl'@;
put 'bmVyKGwsYSx0aGlzLmRlY29yYXRlUHJldmVudERlZmF1bHQoZCkpfWRlY29yYXRlUHJldmVudERlZmF1bHQobCl7cmV0dXJuIGE9PntpZigiX19uZ1Vud3JhcF9fIj09PWEpcmV0dXJuIGw7ITE9PT0odGhpcy5wbGF0Zm9ybUlzU2VydmVyP3RoaXMubmdab25lLnJ1bkd1YXJkZWQoKCk9Pmwo'@;
put 'YSkpOmwoYSkpJiZhLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiBEc2UoYyl7cmV0dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNzIEZDZSBleHRlbmRzIHBae2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sSSl7c3VwZXIobCxmLHYsSSksdGhp'@;
put 'cy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCBHPWtzZShoLmlkLGguc3R5bGVzKTtmb3IoY29uc3Qg'@;
put 'cmUgb2YgRyl7Y29uc3QgdWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtNJiZ1ZS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixNKSx1ZS50ZXh0Q29udGVudD1yZSx0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodWUpfX1ub2RlT3JTaGFkb3dSb290KGwpe3JldHVybiBsPT09dGhp'@;
put 'cy5ob3N0RWw/dGhpcy5zaGFkb3dSb290Omx9YXBwZW5kQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfWluc2VydEJlZm9yZShsLGEsZCl7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3Qo'@;
put 'bCksYSxkKX1yZW1vdmVDaGlsZChsLGEpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCksYSl9cGFyZW50Tm9kZShsKXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpKSl9'@;
put 'ZGVzdHJveSgpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9fWNsYXNzIGdaIGV4dGVuZHMgcFp7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxJKXtzdXBlcihsLGYsdixNKSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9YSx0aGlzLnJlbW92ZVN0eWxl'@;
put 'c09uQ29tcERlc3Ryb3k9aCx0aGlzLnN0eWxlcz1JP2tzZShJLGQuc3R5bGVzKTpkLnN0eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXModGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hh'@;
put 'cmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyBJc2UgZXh0ZW5kcyBnWntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEkpe2NvbnN0IEc9aCsiLSIrZC5pZDtzdXBlcihsLGEsZCxmLHYsTSxJLEcpLHRoaXMuY29udGVudEF0dHI9ZnVuY3Rpb24gTENlKGMp'@;
put 'e3JldHVybiJfbmdjb250ZW50LSVDT01QJSIucmVwbGFjZShoWixjKX0oRyksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbiBPQ2UoYyl7cmV0dXJuIl9uZ2hvc3QtJUNPTVAlIi5yZXBsYWNlKGhaLGMpfShHKX1hcHBseVRvSG9zdChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1'@;
put 'dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9fWxldCBIQ2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEVzZXtjb25z'@;
put 'dHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKGQsaCwhMSksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGQsaCl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0'@;
put 'dXJuIGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKG1vKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29u'@;
put 'c3QgUnNlPVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLE5DZT17IlxiIjoiQmFja3NwYWNlIiwiXHQiOiJUYWIiLCJceDdmIjoiRGVsZXRlIiwiXHgxYiI6IkVzY2FwZSIsRGVsOiJEZWxldGUiLEVzYzoiRXNjYXBlIixMZWZ0OiJBcnJvd0xlZnQiLFJpZ2h0OiJBcnJvd1JpZ2h0'@;
put 'IixVcDoiQXJyb3dVcCIsRG93bjoiQXJyb3dEb3duIixNZW51OiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixXaW46Ik9TIn0sVkNlPXthbHQ6Yz0+Yy5hbHRLZXksY29udHJvbDpjPT5jLmN0cmxLZXksbWV0YTpjPT5jLm1ldGFLZXksc2hpZnQ6Yz0+Yy5zaGlmdEtleX07bGV0'@;
put 'IEJDZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRXNle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiBudWxsIT1jLnBhcnNlRXZlbnROYW1lKGEpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe2NvbnN0IGY9Yy5wYXJzZUV2ZW50TmFtZShkKSx2PWMuZXZlbnRDYWxs'@;
put 'YmFjayhmLmZ1bGxLZXksaCx0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+SjUoKS5vbkFuZENhbmNlbChhLGYuZG9tRXZlbnROYW1lLHYpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoYSl7Y29uc3QgZD1h'@;
put 'LnRvTG93ZXJDYXNlKCkuc3BsaXQoIi4iKSxoPWQuc2hpZnQoKTtpZigwPT09ZC5sZW5ndGh8fCJrZXlkb3duIiE9PWgmJiJrZXl1cCIhPT1oKXJldHVybiBudWxsO2NvbnN0IGY9Yy5fbm9ybWFsaXplS2V5KGQucG9wKCkpO2xldCB2PSIiLE09ZC5pbmRleE9mKCJjb2RlIik7aWYoTT4tMSYm'@;
put 'KGQuc3BsaWNlKE0sMSksdj0iY29kZS4iKSxSc2UuZm9yRWFjaChHPT57Y29uc3QgcmU9ZC5pbmRleE9mKEcpO3JlPi0xJiYoZC5zcGxpY2UocmUsMSksdis9RysiLiIpfSksdis9ZiwwIT1kLmxlbmd0aHx8MD09PWYubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IEk9e307cmV0dXJuIEkuZG9t'@;
put 'RXZlbnROYW1lPWgsSS5mdWxsS2V5PXYsSX1zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGEsZCl7bGV0IGg9TkNlW2Eua2V5XXx8YS5rZXksZj0iIjtyZXR1cm4gZC5pbmRleE9mKCJjb2RlLiIpPi0xJiYoaD1hLmNvZGUsZj0iY29kZS4iKSwhKG51bGw9PWh8fCFoKSYmKGg9aC50b0xv'@;
put 'd2VyQ2FzZSgpLCIgIj09PWg/aD0ic3BhY2UiOiIuIj09PWgmJihoPSJkb3QiKSxSc2UuZm9yRWFjaCh2PT57diE9PWgmJigwLFZDZVt2XSkoYSkmJihmKz12KyIuIil9KSxmKz1oLGY9PT1kKX1zdGF0aWMgZXZlbnRDYWxsYmFjayhhLGQsaCl7cmV0dXJuIGY9PntjLm1hdGNoRXZlbnRGdWxs'@;
put 'S2V5Q29kZShmLGEpJiZoLnJ1bkd1YXJkZWQoKCk9PmQoZikpfX1zdGF0aWMgX25vcm1hbGl6ZUtleShhKXtyZXR1cm4iZXNjIj09PWE/ImVzY2FwZSI6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihtbykpfX1zdGF0aWN7dGhpcy5cdTAy'@;
put 'NzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IE9zZT1be3Byb3ZpZGU6aXMsdXNlVmFsdWU6ImJyb3dzZXIifSx7cHJvdmlkZTpOayx1c2VWYWx1ZTpmdW5jdGlvbiBqQ2UoKXtsWi5tYWtlQ3VycmVudCgpfSxtdWx0aTohMH0se3By'@;
put 'b3ZpZGU6bW8sdXNlRmFjdG9yeTpmdW5jdGlvbiBVQ2UoKXtyZXR1cm4gZnVuY3Rpb24gdUIoYyl7UkM9Y30oZG9jdW1lbnQpLGRvY3VtZW50fSxkZXBzOltdfV0sWkNlPWRhZShZYmUsImJyb3dzZXIiLE9zZSksV0NlPW5ldyBTdCgiIiksUHNlPVt7cHJvdmlkZTppUix1c2VDbGFzczpjbGFz'@;
put 'cyBUQ2V7YWRkVG9XaW5kb3cobCl7TnQuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PShkLGg9ITApPT57Y29uc3QgZj1sLmZpbmRUZXN0YWJpbGl0eUluVHJlZShkLGgpO2lmKG51bGw9PWYpdGhyb3cgbmV3IG5yKDUxMDMsITEpO3JldHVybiBmfSxOdC5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGll'@;
put 'cz0oKT0+bC5nZXRBbGxUZXN0YWJpbGl0aWVzKCksTnQuZ2V0QWxsQW5ndWxhclJvb3RFbGVtZW50cz0oKT0+bC5nZXRBbGxSb290RWxlbWVudHMoKSxOdC5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KE50LmZyYW1ld29ya1N0YWJpbGl6ZXJzPVtdKSxOdC5mcmFtZXdvcmtTdGFiaWxpemVycy5w'@;
put 'dXNoKGQ9Pntjb25zdCBoPU50LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCk7bGV0IGY9aC5sZW5ndGg7Y29uc3Qgdj1mdW5jdGlvbigpe2YtLSwwPT1mJiZkKCl9O2guZm9yRWFjaChNPT57TS53aGVuU3RhYmxlKHYpfSl9KX1maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLGQpe3JldHVy'@;
put 'biBudWxsPT1hP251bGw6bC5nZXRUZXN0YWJpbGl0eShhKT8/KGQ/SjUoKS5pc1NoYWRvd1Jvb3QoYSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5wYXJlbnRFbGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119'@;
put 'LHtwcm92aWRlOmVhZSx1c2VDbGFzczpBVSxkZXBzOltHYSxrVSxpUl19LHtwcm92aWRlOkFVLHVzZUNsYXNzOkFVLGRlcHM6W0dhLGtVLGlSXX1dLEZzZT1be3Byb3ZpZGU6RjYsdXNlVmFsdWU6InJvb3QifSx7cHJvdmlkZTp2Mix1c2VGYWN0b3J5OmZ1bmN0aW9uIHpDZSgpe3JldHVybiBu'@;
put 'ZXcgdjJ9LGRlcHM6W119LHtwcm92aWRlOmNaLHVzZUNsYXNzOkhDZSxtdWx0aTohMCxkZXBzOlttbyxHYSxpc119LHtwcm92aWRlOmNaLHVzZUNsYXNzOkJDZSxtdWx0aTohMCxkZXBzOlttb119LGZaLFRzZSx4c2Use3Byb3ZpZGU6eDgsdXNlRXhpc3Rpbmc6Zlp9LHtwcm92aWRlOm1zZSx1'@;
put 'c2VDbGFzczpBQ2UsZGVwczpbXX0sW11dO2xldCBIc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6WnYsdXNlVmFsdWU6YS5hcHBJZH1dfX1zdGF0aWN7dGhp'@;
put 'cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihXQ2UsMTIpKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbLi4uRnNlLC4uLlBzZV0saW1wb3J0czpbTGEsR2JlXX0pfX1yZXR1'@;
put 'cm4gY30pKCksWUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jPWF9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fZG9jLnRpdGxlfXNldFRpdGxlKGEpe3RoaXMuX2RvYy50aXRsZT1hfHwiIn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKShDcihtbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2IoMzc0ODIpLGIoODA2ODUpO2NvbnN0IG1aPXtmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExv'@;
put 'Z2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119fSxKbj17cm9vdFBhcmFtOiIiLGRjTGliOiIiLHhsbWFwczpbXSxlZGl0b3I6e3N0YXJ0dXBTZXQ6ITEsdHJlZU5vZGVMaWJyYXJpZXM6W10sbGlic0FuZFRhYmxlczpbXSxsaWJyYXJpZXM6W10sbGli'@;
put 'cmFyeToiIix0YWJsZToiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119fSx2aWV3ZXI6e3N0YXJ0dXBTZXQ6ITEsdGFibGVzU2V0OiExLGxpYnJhcmllczpbXSx0YWJsZXM6bnVsbCxsaWJy'@;
put 'YXJ5OiIiLHRhYmxlOiIiLGxpYmluZm86W10sbGlicmFyaWVzU2VhcmNoOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX0sY3VycmVudFNlbGVjdGlvbjoiIn0sdmlld2JveGVzOnt9LGxp'@;
put 'bmVhZ2U6e2xpYnJhcnlMaXN0OltdLHRhYmxlc0xpc3Q6W10sY29sdW1uc0xpc3Q6W10sbGlicmFyaWVzU2VhcmNoOiIiLGxpYjoiIix0YWJsZToiIixjb2x1bW46IiIsY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU6IiIsY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOiIifSxtZXRhZGF0YTp7'@;
put 'bWV0YURhdGFMaXN0OnZvaWQgMCxtZXRhRGF0YVNlYXJjaDoiIixtZXRhT2JqZWN0TGlzdDpbXSxtZXRhT2JqZWN0U2VhcmNoOiIiLG1ldGFSZXBvc2l0b3JpZXM6dm9pZCAwLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdml5YUFwaTp7Y29sbGVjdGlvbnNMaXN0OnZvaWQgMCxjb2xsZWN0aW9u'@;
put 'c1NlYXJjaDoiIixzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHVzZXJuYXY6e3VzZXJMaXN0OnZvaWQgMCx1c2VyU2VhcmNoOiIiLGdyb3VwTGlzdDp2b2lkIDAsZ3JvdXBTZWFyY2g6IiIscm9sZUxpc3Q6dm9pZCAwLHJvbGVTZWFyY2g6IiJ9LG9wZXJhdG9yczp7bnVtT3BlcmF0b3JzOlsiPSIs'@;
put 'IjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sY2hhck9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlOUyIsIklOIiwiTk9UIElOIiwiTkUiXX0saGFuZHNvbnRhYmxlOntkYXJrVGFibGVIZWFkZXJDbGFzczoiZGFya1RIIn0sdXNl'@;
put 'ckRyb3Bkb3duQ29uZmlnOntjbG9zZU9uRGVidWdDbGljazohMX19O3ZhciBQcz1iKDk3NTg2KSxqc2U9Yi5uKFBzKTtmdW5jdGlvbiB6c2UoYyxsKXtzd2l0Y2goYyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVy'@;
put 'biBmdW5jdGlvbihhKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGQsaCxmKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2KXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2'@;
put 'LE0pe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxJKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sSSxHKXtyZXR1cm4gbC5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyl9O2Nhc2UgOTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sSSxHLHJlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMTA6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEksRyxyZSx1ZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMp'@;
put 'fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuIil9fWZ1bmN0aW9uIFE1KGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJiEwPT09Y1si'@;
put 'QEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIl19ZnVuY3Rpb24gUTQoYyl7cmV0dXJuIGZ1bmN0aW9uIGwoYSl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RofHxRNShhKT9sOmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBXeShjKXtyZXR1cm4gZnVuY3Rpb24gbChhLGQpe3N3'@;
put 'aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGw7Y2FzZSAxOnJldHVybiBRNShhKT9sOlE0KGZ1bmN0aW9uKGgpe3JldHVybiBjKGEsaCl9KTtkZWZhdWx0OnJldHVybiBRNShhKSYmUTUoZCk/bDpRNShhKT9RNChmdW5jdGlvbihoKXtyZXR1cm4gYyhoLGQpfSk6UTUoZCk/'@;
put 'UTQoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pOmMoYSxkKX19fWZ1bmN0aW9uIFVzZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBkPVtdLGg9MCxmPWMsdj0wLE09ITE7djxsLmxlbmd0aHx8aDxhcmd1bWVudHMubGVuZ3RoOyl7dmFyIEk7djxsLmxlbmd0aCYmKCFRNShs'@;
put 'W3ZdKXx8aD49YXJndW1lbnRzLmxlbmd0aCk/ST1sW3ZdOihJPWFyZ3VtZW50c1toXSxoKz0xKSxkW3ZdPUksUTUoSSk/TT0hMDpmLT0xLHYrPTF9cmV0dXJuIU0mJmY8PTA/YS5hcHBseSh0aGlzLGQpOnpzZShNYXRoLm1heCgwLGYpLFVzZShjLGQsYSkpfX1jb25zdCBac2U9V3koZnVuY3Rp'@;
put 'b24obCxhKXtyZXR1cm4gMT09PWw/UTQoYSk6enNlKGwsVXNlKGwsW10sYSkpfSksV3NlPVd5KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBsfHxudWxsIT1hJiYoYS5jb25zdHJ1Y3Rvcj09PWx8fCJPYmplY3QiPT09bC5uYW1lJiYib2JqZWN0Ij09dHlwZW9mIGEpfSk7ZnVu'@;
put 'Y3Rpb24ga1IoYyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYyl9dmFyIFlzZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IEdzZT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09WXNlLmNhbGwoYXJndW1lbnRz'@;
put 'KT9mdW5jdGlvbihsKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09PVlzZS5jYWxsKGwpfTpmdW5jdGlvbihsKXtyZXR1cm4ga1IoImNhbGxlZSIsbCl9fSgpLFFDZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmbC5sZW5ndGg+PTAmJiJbb2JqZWN0IEFy'@;
put 'cmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCl9O2Z1bmN0aW9uICRzZShjKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX12YXIgblNlPVE0KGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bFsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bC5jb25zdHJ1Y3RvclsiZmFu'@;
put 'dGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lbXB0eT9sLmVtcHR5KCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3IuZW1wdHk/bC5jb25zdHJ1Y3Rvci5lbXB0eSgpOlFDZShsKT9b'@;
put 'XTokc2UobCk/IiI6ZnVuY3Rpb24gZVNlKGMpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfShsKT97fTpHc2UobCk/ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpOmZ1bmN0aW9uIHRTZShjKXt2YXIgbD1PYmplY3QucHJv'@;
put 'dG90eXBlLnRvU3RyaW5nLmNhbGwoYyk7cmV0dXJuIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIj09PWx8fCJbb2JqZWN0IEludDhBcnJheV0iPT09bHx8IltvYmplY3QgVWludDhBcnJheV0iPT09bHx8IltvYmplY3QgSW50MTZBcnJheV0iPT09bHx8IltvYmplY3QgVWludDE2QXJyYXld'@;
put 'Ij09PWx8fCJbb2JqZWN0IEludDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iPT09bHx8IltvYmplY3QgQmlnSW50NjRBcnJheV0iPT09bHx8IltvYmplY3QgQmlnVWlu'@;
put 'dDY0QXJyYXldIj09PWx9KGwpP2wuY29uc3RydWN0b3IuZnJvbSgiIik6dm9pZCAwfSk7Y29uc3QgclNlPW5TZTtmdW5jdGlvbiBLc2UoYyl7Zm9yKHZhciBhLGw9W107IShhPWMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSk7cmV0dXJuIGx9ZnVuY3Rpb24gWHNlKGMsbCxhKXtmb3Io'@;
put 'dmFyIGQ9MCxoPWEubGVuZ3RoO2Q8aDspe2lmKGMobCxhW2RdKSlyZXR1cm4hMDtkKz0xfXJldHVybiExfWNvbnN0IHZaPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uIGFTZShjLGwpe3JldHVybiBjPT09bD8wIT09Y3x8MS9jPT0xL2w6YyE9YyYmbCE9'@;
put 'bH07dmFyIHNTZT0he3RvU3RyaW5nOm51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ0b1N0cmluZyIpLHFzZT1bImNvbnN0cnVjdG9yIiwidmFsdWVPZiIsImlzUHJvdG90eXBlT2YiLCJ0b1N0cmluZyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaGFzT3duUHJvcGVydHkiLCJ0b0xvY2Fs'@;
put 'ZVN0cmluZyJdLEpzZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLG9TZT1mdW5jdGlvbihsLGEpe2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7KXtpZihsW2RdPT09YSlyZXR1cm4hMDtkKz0xfXJldHVybiExfTtjb25zdCBRc2U9'@;
put 'UTQoImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5rZXlzfHxKc2U/ZnVuY3Rpb24obCl7aWYoT2JqZWN0KGwpIT09bClyZXR1cm5bXTt2YXIgYSxkLGg9W10sZj1Kc2UmJkdzZShsKTtmb3IoYSBpbiBsKWtSKGEsbCkmJighZnx8Imxlbmd0aCIhPT1hKSYmKGhbaC5sZW5ndGhdPWEpO2lmKHNT'@;
put 'ZSlmb3IoZD1xc2UubGVuZ3RoLTE7ZD49MDspa1IoYT1xc2VbZF0sbCkmJiFvU2UoaCxhKSYmKGhbaC5sZW5ndGhdPWEpLGQtPTE7cmV0dXJuIGh9OmZ1bmN0aW9uKGwpe3JldHVybiBPYmplY3QobCkhPT1sP1tdOk9iamVjdC5rZXlzKGwpfSksZW9lPVE0KGZ1bmN0aW9uKGwpe3JldHVybiBu'@;
put 'dWxsPT09bD8iTnVsbCI6dm9pZCAwPT09bD8iVW5kZWZpbmVkIjpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSl9KTtmdW5jdGlvbiB0b2UoYyxsLGEsZCl7dmFyIGg9S3NlKGMpO2Z1bmN0aW9uIHYoTSxJKXtyZXR1cm4geVooTSxJLGEuc2xpY2UoKSxkLnNs'@;
put 'aWNlKCkpfXJldHVybiFYc2UoZnVuY3Rpb24oTSxJKXtyZXR1cm4hWHNlKHYsSSxNKX0sS3NlKGwpLGgpfWZ1bmN0aW9uIHlaKGMsbCxhLGQpe2lmKHZaKGMsbCkpcmV0dXJuITA7dmFyIGg9ZW9lKGMpO2lmKGghPT1lb2UobCkpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbImZh'@;
put 'bnRhc3ktbGFuZC9lcXVhbHMiXXx8ImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFzeS1sYW5kL2VxdWFscyJdJiZjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0obCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'WyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJmxbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShjKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYy5lcXVhbHN8fCJmdW5jdGlvbiI9PXR5cGVvZiBsLmVxdWFscylyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYy5lcXVhbHMmJmMuZXF1YWxzKGwpJiYiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgbC5lcXVhbHMmJmwuZXF1YWxzKGMpO3N3aXRjaChoKXtjYXNlIkFyZ3VtZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmlmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbnN0cnVjdG9yJiYiUHJvbWlzZSI9PT1mdW5jdGlvbiBpU2UoYyl7dmFyIGw9U3RyaW5n'@;
put 'KGMpLm1hdGNoKC9eZnVuY3Rpb24gKFx3KikvKTtyZXR1cm4gbnVsbD09bD8iIjpsWzFdfShjLmNvbnN0cnVjdG9yKSlyZXR1cm4gYz09PWw7YnJlYWs7Y2FzZSJCb29sZWFuIjpjYXNlIk51bWJlciI6Y2FzZSJTdHJpbmciOmlmKHR5cGVvZiBjIT10eXBlb2YgbHx8IXZaKGMudmFsdWVPZigp'@;
put 'LGwudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkRhdGUiOmlmKCF2WihjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJFcnJvciI6cmV0dXJuIGMubmFtZT09PWwubmFtZSYmYy5tZXNzYWdlPT09bC5tZXNzYWdlO2Nhc2UiUmVnRXhwIjppZihjLnNv'@;
put 'dXJjZSE9PWwuc291cmNlfHxjLmdsb2JhbCE9PWwuZ2xvYmFsfHxjLmlnbm9yZUNhc2UhPT1sLmlnbm9yZUNhc2V8fGMubXVsdGlsaW5lIT09bC5tdWx0aWxpbmV8fGMuc3RpY2t5IT09bC5zdGlja3l8fGMudW5pY29kZSE9PWwudW5pY29kZSlyZXR1cm4hMX1mb3IodmFyIGY9YS5sZW5ndGgt'@;
put 'MTtmPj0wOyl7aWYoYVtmXT09PWMpcmV0dXJuIGRbZl09PT1sO2YtPTF9c3dpdGNoKGgpe2Nhc2UiTWFwIjpyZXR1cm4gYy5zaXplPT09bC5zaXplJiZ0b2UoYy5lbnRyaWVzKCksbC5lbnRyaWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIlNldCI6cmV0dXJuIGMuc2l6'@;
put 'ZT09PWwuc2l6ZSYmdG9lKGMudmFsdWVzKCksbC52YWx1ZXMoKSxhLmNvbmNhdChbY10pLGQuY29uY2F0KFtsXSkpO2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6Y2FzZSJCb29sZWFuIjpjYXNlIk51bWJlciI6Y2FzZSJTdHJpbmciOmNhc2UiRGF0ZSI6Y2FzZSJF'@;
put 'cnJvciI6Y2FzZSJSZWdFeHAiOmNhc2UiSW50OEFycmF5IjpjYXNlIlVpbnQ4QXJyYXkiOmNhc2UiVWludDhDbGFtcGVkQXJyYXkiOmNhc2UiSW50MTZBcnJheSI6Y2FzZSJVaW50MTZBcnJheSI6Y2FzZSJJbnQzMkFycmF5IjpjYXNlIlVpbnQzMkFycmF5IjpjYXNlIkZsb2F0MzJBcnJheSI6'@;
put 'Y2FzZSJGbG9hdDY0QXJyYXkiOmNhc2UiQXJyYXlCdWZmZXIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9dmFyIHY9UXNlKGMpO2lmKHYubGVuZ3RoIT09UXNlKGwpLmxlbmd0aClyZXR1cm4hMTt2YXIgTT1hLmNvbmNhdChbY10pLEk9ZC5jb25jYXQoW2xdKTtmb3IoZj12Lmxlbmd0aC0xO2Y+'@;
put 'PTA7KXt2YXIgRz12W2ZdO2lmKCFrUihHLGwpfHwheVoobFtHXSxjW0ddLE0sSSkpcmV0dXJuITE7Zi09MX1yZXR1cm4hMH1jb25zdCBkU2U9V3koZnVuY3Rpb24obCxhKXtyZXR1cm4geVoobCxhLFtdLFtdKX0pLG5vZT1RNChmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmZFNlKGwsclNl'@;
put 'KGwpKX0pO2Z1bmN0aW9uIEZNKGMpe3JldHVybiBudWxsPT1jfWZ1bmN0aW9uIEhNKGMpe3JldHVybiBGTShjKXx8bm9lKGMpfWZ1bmN0aW9uIGJaKGMpe3JldHVybiBXc2UoU3RyaW5nLGMpfWZ1bmN0aW9uIGFvZShjLGwpe3JldHVybiBjIT09bH1mdW5jdGlvbiBjb2UoYz13aW5kb3cpe3Jl'@;
put 'dHVybiFGTShjKX1jb25zdCB3U2U9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuKDB8bCk9PT1sfSxTU2U9V3koZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/YS5sZW5ndGgrbDpsO3JldHVybiAkc2UoYSk/YS5jaGFyQXQoZCk6YVtkXX0pLHhTZT1XeShmdW5jdGlvbihsLGEp'@;
put 'e3JldHVybiBsLm1hcChmdW5jdGlvbihkKXtmb3IodmFyIHYsaD1hLGY9MDtmPGQubGVuZ3RoOyl7aWYobnVsbD09aClyZXR1cm47aD13U2Uodj1kW2ZdKT9TU2UodixoKTpoW3ZdLGYrPTF9cmV0dXJuIGh9KX0pLFRTZT1XeShmdW5jdGlvbihsLGEpe3JldHVybiB4U2UoW2xdLGEpWzBdfSks'@;
put 'a1NlPVpzZSgyLChjLGwpPT52b2lkIDAhPT1UU2UoYyxsKSksdW9lPWtTZSh7IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7bGV0IElSLGRvZSxfWix3WjtmdW5jdGlvbiBob2UoYz0hMCl7aWYoIWN8fCFJUil7Y29uc3QgbD1kb2N1bWVudCYmZG9jdW1lbnQucXVlcnlT'@;
put 'ZWxlY3RvcigiW25nLXZlcnNpb25dIik7SVI9bD8iIitsLmdldEF0dHJpYnV0ZSgibmctdmVyc2lvbiIpOnZvaWQgMH1yZXR1cm4gSVJ9ZnVuY3Rpb24gSVNlKGM9ITApe3JldHVybiBjJiZJUnx8KGRvZT13aW5kb3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLGRvZX1mdW5jdGlvbiBmb2Uo'@;
put 'Yz0hMCl7cmV0dXJuIGMmJl9afHwoX1o9d2luZG93Py5DRFM/Ll9yZWFjdD8udmVyc2lvbj93aW5kb3cuQ0RTLl9yZWFjdC52ZXJzaW9uOmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXJlYWN0cm9vdF0sIFtkYXRhLXJlYWN0aWRdIik/InVua25vd24gdmVyc2lvbiI6dm9pZCAwKSxf'@;
put 'Wn1mdW5jdGlvbiBwb2UoYz0hMCl7aWYoIWN8fCF3Wil7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYobFtkXS5fX3Z1ZV9fKXthPWxbZF07YnJlYWt9d1o9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9'@;
put 'cmV0dXJuIHdafWZ1bmN0aW9uIFc4KGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gdm9lKGMpe3JldHVybiBjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSl9Y29uc3QgSFNlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rv'@;
put 'cigpe2lmKHRoaXMuc3VwcG9ydHM9e2pzOiEwfSwhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIpfHwibm8tanMiPT09ZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIpKXtjb25zdCBjPVc4KE9iamVjdC5rZXlzKHRoaXMuc3VwcG9ydHMp'@;
put 'LnJlZHVjZSgobCxhKT0+YCR7bH0gJHt0aGlzLnN1cHBvcnRzW2FdP2E6Im5vLSIrYX1gLCIiKSkudHJpbSgpO2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiLGMpfX19O2NsYXNzIE5Ne3N0YXRpYyBsb2coLi4ubCl7TVooKSYmU1ooKSYmY29uc29sZS5sb2coLi4u'@;
put 'bCl9c3RhdGljIHdhcm4oLi4ubCl7TVooKSYmU1ooKSYmY29uc29sZS53YXJuKC4uLmwpfXN0YXRpYyBlcnJvciguLi5sKXtNWigpJiZTWigpJiZjb25zb2xlLmVycm9yKC4uLmwpfX1mdW5jdGlvbiBTWigpe3JldHVybiF1b2UoWyJqYXNtaW5lIl0pfWZ1bmN0aW9uIE1aKCl7cmV0dXJuIXdp'@;
put 'bmRvdy5DRFMuZW52aXJvbm1lbnQucHJvZHVjdGlvbn1mdW5jdGlvbiBfb2UoKXtjb2UoKSYmKHdpbmRvdy5DRFM9d2luZG93LkNEU3x8e192ZXJzaW9uOltdLF9yZWFjdDp7dmVyc2lvbjp2b2lkIDB9LF9zdXBwb3J0czpIU2Uuc3VwcG9ydHMsX2lzU3RhdGVQcm94aWVkOiExLF9zdGF0ZTp7'@;
put 'Zm9jdXNUcmFwSXRlbXM6W10sbGF5ZXJFbGVtZW50czpbXSxpMThuUmVnaXN0cnk6e30sZWxlbWVudFJlZ2lzdHJ5Ont9LGljb25SZWdpc3RyeTp7fSxtb3Rpb25SZWdpc3RyeTp7fX0sZW52aXJvbm1lbnQ6e3Byb2R1Y3Rpb246ITF9LGdldERldGFpbHM6d29lLGxvZ0RldGFpbHM6TlNlfSxm'@;
put 'dW5jdGlvbigpe2NvbnN0IGM9IjYuMTYuMCI7d2luZG93LkNEUy5fdmVyc2lvbi5pbmRleE9mKGMpPDAmJih3aW5kb3cuQ0RTLl92ZXJzaW9uLnB1c2goYyksZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5zZXRBdHRyaWJ1dGUoImNkcy12ZXJzaW9uIix3aW5kb3cuQ0RTLl92ZXJz'@;
put 'aW9uLmpvaW4oIiAiKSkpLHdpbmRvdy5DRFMuX3ZlcnNpb24ubGVuZ3RoPjEmJk5NLndhcm4oIlJ1bm5pbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIENsYXJpdHkgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLiBQbGVhc2UgZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgbG9hZGVk'@;
put 'LiIpfSgpLHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkfHwod2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWQ9ITAsd2luZG93LkNEUy5fc3RhdGU9bmV3IFByb3h5KHdpbmRvdy5DRFMuX3N0YXRlLHtzZXQ6KGMsbCxhKT0+e2NvbnN0IGQ9e2tleTpsLHByZXY6d2luZG93LkNEUy5fc3RhdGVb'@;
put 'bF0sY3VycmVudDphfTtyZXR1cm4gY1tsXT1hLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJDRFNfU1RBVEVfVVBEQVRFIix7ZGV0YWlsOmR9KSksITB9fSkpKX1mdW5jdGlvbiB3b2UoKXtyZXR1cm57dmVyc2lvbnM6d2luZG93LkNEUy5fdmVyc2lvbixlbnZpcm9u'@;
put 'bWVudDp3aW5kb3cuQ0RTLmVudmlyb25tZW50LHVzZXJBZ2VudDpuYXZpZ2F0b3IudXNlckFnZW50LHN1cHBvcnRzOndpbmRvdy5DRFMuX3N1cHBvcnRzLGFuZ3VsYXJWZXJzaW9uOmhvZSghMSksYW5ndWxhckpTVmVyc2lvbjpJU2UoITEpLHJlYWN0VmVyc2lvbjpmb2UoITEpLHZ1ZVZlcnNp'@;
put 'b246cG9lKCExKSxzdGF0ZTp7Li4ud2luZG93LkNEUy5fc3RhdGUsaWNvblJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmljb25SZWdpc3RyeSksbW90aW9uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUubW90aW9uUmVnaXN0cnkpLGZvY3VzVHJh'@;
put 'cFJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmZvY3VzVHJhcEl0ZW1zLm1hcChjPT5jLmZvY3VzVHJhcElkKSl9fX1mdW5jdGlvbiBOU2UoKXtOTS5sb2coSlNPTi5zdHJpbmdpZnkod29lKCksbnVsbCwyKSl9Y29uc3QgVlNlPVpzZSgzLChjLGwsYSk9PnshZnVuY3Rp'@;
put 'b24gRFNlKGMsbCl7cmV0dXJuIGx8fChsPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhbHx8ISFsLmdldChjKX0oYyl8fGZ1bmN0aW9uIFJTZSgpe3JldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUoYyxs'@;
put 'KSxfb2UoKSx3aW5kb3cmJiFPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnkpLnNvbWUoZD0+ZD09PWMpJiYod2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5PXsuLi53aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnksW2NdOnt9fSkpOk5N'@;
put 'Lndhcm4oYysiIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCIpfSk7ZnVuY3Rpb24gJGYoYyxsLGEsZCl7dmFyIHYsaD1hcmd1bWVudHMubGVuZ3RoLGY9aDwzP2w6bnVsbD09PWQ/ZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsYSk6ZDtpZigib2JqZWN0Ij09dHlwZW9m'@;
put 'IFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWY9UmVmbGVjdC5kZWNvcmF0ZShjLGwsYSxkKTtlbHNlIGZvcih2YXIgTT1jLmxlbmd0aC0xO00+PTA7TS0tKSh2PWNbTV0pJiYoZj0oaDwzP3YoZik6aD4zP3YobCxhLGYpOnYobCxhKSl8fGYpO3JldHVybiBo'@;
put 'PjMmJmYmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGEsZiksZn1mdW5jdGlvbiBlbShjKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGVtPyh0aGlzLnY9Yyx0aGlzKTpuZXcgZW0oYyl9ZnVuY3Rpb24geG9lKGMpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYSxsPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBsP2wuY2FsbChjKTooYz1mdW5jdGlvbiBBWihjKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsYT1sJiZj'@;
put 'W2xdLGQ9MDtpZihhKXJldHVybiBhLmNhbGwoYyk7aWYoYyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBjJiZkPj1jLmxlbmd0aCYmKGM9dm9pZCAwKSx7dmFsdWU6YyYmY1tkKytdLGRvbmU6IWN9fX07dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cihsPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0oYyksYT17fSxkKCJuZXh0IiksZCgidGhyb3ciKSxkKCJyZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhKTtmdW5jdGlv'@;
put 'biBkKGYpe2FbZl09Y1tmXSYmZnVuY3Rpb24odil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKE0sSSl7IWZ1bmN0aW9uIGgoZix2LE0sSSl7UHJvbWlzZS5yZXNvbHZlKEkpLnRoZW4oZnVuY3Rpb24oRyl7Zih7dmFsdWU6Ryxkb25lOk19KX0sdil9KE0sSSwodj1jW2ZdKHYpKS5kb25l'@;
put 'LHYudmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7bGV0IEVvZT0hMTtmdW5jdGlvbiBoTWUoYyl7aWYoKGM9TWF0aC50cnVuYyhjKXx8MCk8MCYmKGMrPXRoaXMubGVuZ3RoKSwhKGM8MHx8Yz49dGhpcy5sZW5ndGgpKXJldHVy'@;
put 'biB0aGlzW2NdfWlmKCFFb2Upe0VvZT0hMDtjb25zdCBjPVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5KTtmb3IoY29uc3QgbCBvZltBcnJheSxTdHJpbmcsY10pT2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLCJhdCIse3ZhbHVlOmhNZSx3cml0YWJsZTohMCxlbnVt'@;
put 'ZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfWxldCBUb2U9ITEsQW9lPSExO2Z1bmN0aW9uIGtvZShjLGwsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKGwp'@;
put 'P3RoaXMuZ2V0QXR0cmlidXRlKGwpOm51bGx9LHNldDpmdW5jdGlvbihkKXtudWxsIT09ZD90aGlzLnNldEF0dHJpYnV0ZShsLGQpOnRoaXMucmVtb3ZlQXR0cmlidXRlKGwpfX0pfVRvZXx8RWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInJvbGUiKXx8KGtvZShFbGVtZW50LnBy'@;
put 'b3RvdHlwZSwicm9sZSIsInJvbGUiKSxUb2U9ITApLEFvZXx8RWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoImFyaWFMYWJlbCIpfHwoQW9lPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJD'@;
put 'b2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJM'@;
put 'YWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwiLCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlw'@;
put 'dGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dTcGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZvckVhY2goYz0+a29lKEVsZW1lbnQucHJvdG90eXBlLCJhcmlhLSIrYy50b0xvd2VyQ2Fz'@;
put 'ZSgpLCJhcmlhIitjKSkpO2NvbnN0IFJSPXdpbmRvdyxEWj1SUi5TaGFkb3dSb290JiYodm9pZCAwPT09UlIuU2hhZHlDU1N8fFJSLlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykmJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZSJpbiBDU1NTdHlsZVNo'@;
put 'ZWV0LnByb3RvdHlwZSxJWj1TeW1ib2woKSxEb2U9bmV3IFdlYWtNYXA7Y2xhc3MgSW9le2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxkIT09SVopdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9y'@;
put 'IGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWwsdGhpcy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgbD10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoRFomJnZvaWQgMD09PWwpe2NvbnN0IGQ9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2QmJihsPURvZS5nZXQoYSkpLHZvaWQgMD09'@;
put 'PWwmJigodGhpcy5vPWw9bmV3IENTU1N0eWxlU2hlZXQpLnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCksZCYmRG9lLnNldChhLGwpKX1yZXR1cm4gbH10b1N0cmluZygpe3JldHVybiB0aGlzLmNzc1RleHR9fWNvbnN0IFJvZT0oYywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06'@;
put 'bC5yZWR1Y2UoKGQsaCxmKT0+ZCsodj0+e2lmKCEwPT09di5fJGNzc1Jlc3VsdCQpcmV0dXJuIHYuY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIHYpcmV0dXJuIHY7dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24g'@;
put 'cmVzdWx0OiAiK3YrIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcgSW9lKGEsYyxJWil9LExvZT1EWj9jPT5jOmM9PmMgaW5zdGFu'@;
put 'Y2VvZiBDU1NTdHlsZVNoZWV0PyhsPT57bGV0IGE9IiI7Zm9yKGNvbnN0IGQgb2YgbC5jc3NSdWxlcylhKz1kLmNzc1RleHQ7cmV0dXJuKGM9Pm5ldyBJb2UoInN0cmluZyI9PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsSVopKShhKX0pKGMpOmM7dmFyIFJaO2NvbnN0IExSPXdpbmRvdyxPb2U9'@;
put 'TFIudHJ1c3RlZFR5cGVzLGdNZT1Pb2U/T29lLmVtcHR5U2NyaXB0OiIiLFBvZT1MUi5yZWFjdGl2ZUVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQsTFo9e3RvQXR0cmlidXRlKGMsbCl7c3dpdGNoKGwpe2Nhc2UgQm9vbGVhbjpjPWM/Z01lOm51bGw7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJh'@;
put 'eTpjPW51bGw9PWM/YzpKU09OLnN0cmluZ2lmeShjKX1yZXR1cm4gY30sZnJvbUF0dHJpYnV0ZShjLGwpe2xldCBhPWM7c3dpdGNoKGwpe2Nhc2UgQm9vbGVhbjphPW51bGwhPT1jO2JyZWFrO2Nhc2UgTnVtYmVyOmE9bnVsbD09PWM/bnVsbDpOdW1iZXIoYyk7YnJlYWs7Y2FzZSBPYmplY3Q6'@;
put 'Y2FzZSBBcnJheTp0cnl7YT1KU09OLnBhcnNlKGMpfWNhdGNoe2E9bnVsbH19cmV0dXJuIGF9fSxGb2U9KGMsbCk9PmwhPT1jJiYobD09bHx8Yz09YyksT1o9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6TFoscmVmbGVjdDohMSxoYXNDaGFuZ2VkOkZvZX0sUFo9ImZpbmFs'@;
put 'aXplZCI7Y2xhc3MgWXkgZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMuXyRFdSgpfXN0YXRpYyBhZGRJbml0aWFsaXpl'@;
put 'cihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lkIDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRp'@;
put 'ZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3JlYXRlUHJvcGVydHkobCxhPU9aKXtpZihhLnN0YXRlJiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0'@;
put 'aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQg'@;
put 'MCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBmPXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0'@;
put 'ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChsKXx8T1p9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShQWikpcmV0dXJuITE7'@;
put 'dGhpc1tQWl09ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYobC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFw'@;
put 'LHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnByb3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3Bl'@;
put 'cnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJz'@;
put 'ZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChMb2UoaCkpfWVsc2Ugdm9pZCAwIT09bCYmYS5wdXNoKExvZShsKSk7cmV0dXJuIGF9c3RhdGljIF8kRXAobCxhKXtjb25zdCBkPWEuYXR0cmlidXRlO3JldHVybiExPT09ZD92b2lkIDA6InN0cmluZyI9PXR5cGVvZiBkP2Q6InN0cmlu'@;
put 'ZyI9PXR5cGVvZiBsP2wudG9Mb3dlckNhc2UoKTp2b2lkIDB9XyRFdSgpe3ZhciBsO3RoaXMuXyRFXz1uZXcgUHJvbWlzZShhPT50aGlzLmVuYWJsZVVwZGF0aW5nPWEpLHRoaXMuXyRBTD1uZXcgTWFwLHRoaXMuXyRFZygpLHRoaXMucmVxdWVzdFVwZGF0ZSgpLG51bGw9PT0obD10aGlzLmNv'@;
put 'bnN0cnVjdG9yLmgpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+YSh0aGlzKSl9YWRkQ29udHJvbGxlcihsKXt2YXIgYSxkOyhudWxsIT09KGE9dGhpcy5fJEVTKSYmdm9pZCAwIT09YT9hOnRoaXMuXyRFUz1bXSkucHVzaChsKSx2b2lkIDAhPT10aGlzLnJlbmRlclJvb3QmJnRoaXMuaXND'@;
put 'b25uZWN0ZWQmJihudWxsPT09KGQ9bC5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGwpKX1yZW1vdmVDb250cm9sbGVyKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLnNwbGljZSh0aGlzLl8kRVMuaW5kZXhPZihsKT4+PjAsMSl9XyRFZygp'@;
put 'e3RoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuaGFzT3duUHJvcGVydHkoYSkmJih0aGlzLl8kRWkuc2V0KGEsdGhpc1thXSksZGVsZXRlIHRoaXNbYV0pfSl9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciBsO2NvbnN0IGE9bnVsbCE9PShsPXRo'@;
put 'aXMuc2hhZG93Um9vdCkmJnZvaWQgMCE9PWw/bDp0aGlzLmF0dGFjaFNoYWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4oKGMsbCk9PntEWj9jLmFkb3B0ZWRTdHlsZVNoZWV0cz1sLm1hcChhPT5hIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD9hOmEuc3R5'@;
put 'bGVTaGVldCk6bC5mb3JFYWNoKGE9Pntjb25zdCBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksaD1SUi5saXROb25jZTt2b2lkIDAhPT1oJiZkLnNldEF0dHJpYnV0ZSgibm9uY2UiLGgpLGQudGV4dENvbnRlbnQ9YS5jc3NUZXh0LGMuYXBwZW5kQ2hpbGQoZCl9KX0pKGEsdGhp'@;
put 'cy5jb25zdHJ1Y3Rvci5lbGVtZW50U3R5bGVzKSxhfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7dm9pZCAwPT09dGhpcy5yZW5kZXJSb290JiYodGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpKSx0aGlzLmVuYWJsZVVwZGF0aW5nKCEwKSxudWxsPT09KGw9dGhpcy5f'@;
put 'JEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShkPWEuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWVuYWJsZVVwZGF0aW5nKGwpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO251bGw9PT0obD10aGlz'@;
put 'Ll8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9YS5ob3N0RGlzY29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jYWxsKGEpfSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGwsYSxkKXt0aGlzLl8kQUsobCxkKX1fJEVPKGwsYSxk'@;
put 'PU9aKXt2YXIgaDtjb25zdCBmPXRoaXMuY29uc3RydWN0b3IuXyRFcChsLGQpO2lmKHZvaWQgMCE9PWYmJiEwPT09ZC5yZWZsZWN0KXtjb25zdCB2PSh2b2lkIDAhPT0obnVsbD09PShoPWQuY29udmVydGVyKXx8dm9pZCAwPT09aD92b2lkIDA6aC50b0F0dHJpYnV0ZSk/ZC5jb252ZXJ0ZXI6'@;
put 'TFopLnRvQXR0cmlidXRlKGEsZC50eXBlKTt0aGlzLl8kRWw9bCxudWxsPT12P3RoaXMucmVtb3ZlQXR0cmlidXRlKGYpOnRoaXMuc2V0QXR0cmlidXRlKGYsdiksdGhpcy5fJEVsPW51bGx9fV8kQUsobCxhKXt2YXIgZDtjb25zdCBoPXRoaXMuY29uc3RydWN0b3IsZj1oLl8kRXYuZ2V0KGwp'@;
put 'O2lmKHZvaWQgMCE9PWYmJnRoaXMuXyRFbCE9PWYpe2NvbnN0IHY9aC5nZXRQcm9wZXJ0eU9wdGlvbnMoZiksTT0iZnVuY3Rpb24iPT10eXBlb2Ygdi5jb252ZXJ0ZXI/e2Zyb21BdHRyaWJ1dGU6di5jb252ZXJ0ZXJ9OnZvaWQgMCE9PShudWxsPT09KGQ9di5jb252ZXJ0ZXIpfHx2b2lkIDA9'@;
put 'PT1kP3ZvaWQgMDpkLmZyb21BdHRyaWJ1dGUpP3YuY29udmVydGVyOkxaO3RoaXMuXyRFbD1mLHRoaXNbZl09TS5mcm9tQXR0cmlidXRlKGEsdi50eXBlKSx0aGlzLl8kRWw9bnVsbH19cmVxdWVzdFVwZGF0ZShsLGEsZCl7bGV0IGg9ITA7dm9pZCAwIT09bCYmKCgoZD1kfHx0aGlzLmNvbnN0'@;
put 'cnVjdG9yLmdldFByb3BlcnR5T3B0aW9ucyhsKSkuaGFzQ2hhbmdlZHx8Rm9lKSh0aGlzW2xdLGEpPyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1h'@;
put 'cCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYodGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgbC5fJEVffWNhdGNoKGQp'@;
put 'e1Byb21pc2UucmVqZWN0KGQpfWNvbnN0IGE9bC5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBudWxsIT1hJiYoeWllbGQgYSksIWwuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGw7aWYo'@;
put 'IXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9yRWFjaCgoaCxmKT0+dGhpc1tmXT1oKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgYT0hMTtjb25zdCBkPXRoaXMuXyRBTDt0cnl7YT10aGlzLnNob3VsZFVwZGF0ZShkKSxhPyh0aGlzLndpbGxVcGRh'@;
put 'dGUoZCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChoPT57dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1oLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoaCl9KSx0aGlzLnVwZGF0ZShkKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaCl7dGhyb3cg'@;
put 'YT0hMSx0aGlzLl8kRWsoKSxofWEmJnRoaXMuXyRBRShkKX13aWxsVXBkYXRlKGwpe31fJEFFKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goZD0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9ZC5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWg/dm9p'@;
put 'ZCAwOmguY2FsbChkKX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChsKSksdGhpcy51cGRhdGVkKGwpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1'@;
put 'cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUobCl7cmV0dXJuITB9dXBkYXRlKGwpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChhLGQpPT50aGlzLl8kRU8oZCx0aGlzW2Rd'@;
put 'LGEpKSx0aGlzLl8kRUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVwZGF0ZWQobCl7fX12YXIgRlo7WXlbUFpdPSEwLFl5LmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAsWXkuZWxlbWVudFN0eWxlcz1bXSxZeS5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9'@;
put 'LFBvZT8uKHtSZWFjdGl2ZUVsZW1lbnQ6WXl9KSwobnVsbCE9PShSWj1MUi5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PVJaP1JaOkxSLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IE9SPXdpbmRvdyxHeT1PUi50cnVzdGVkVHlwZXMs'@;
put 'SG9lPUd5P0d5LmNyZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2b2lkIDAsUFI9IiRsaXQkIixlZz1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLEhaPSI/IitlZyxtTWU9YDwke0hafT5gLFk4PWRvY3VtZW50LFZNPSgpPT5ZOC5jcmVhdGVD'@;
put 'b21tZW50KCIiKSxCTT1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rpb24iIT10eXBlb2YgYyxOb2U9QXJyYXkuaXNBcnJheSxOWj0iWyBcdFxuXGZccl0iLGpNPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLEJvZT0v'@;
put 'LS0+L2csam9lPS8+L2csRzg9UmVnRXhwKGA+fCR7Tlp9KD86KFteXFxzIic+PS9dKykoJHtOWn0qPSR7Tlp9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksem9lPS8nL2csVW9lPS8iL2csWm9lPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxX'@;
put 'b2U9Yz0+KGwsLi4uYSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLHZNZT1Xb2UoMSkseU1lPVdvZSgyKSwkeT1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxfMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLFlvZT1uZXcgV2Vha01hcCwkOD1ZOC5jcmVhdGVUcmVl'@;
put 'V2Fsa2VyKFk4LDEyOSxudWxsLCExKTtmdW5jdGlvbiBHb2UoYyxsKXtpZighQXJyYXkuaXNBcnJheShjKXx8IWMuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09SG9lP0hvZS5jcmVhdGVI'@;
put 'VE1MKGwpOmx9Y2xhc3Mgek17Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFydHM9W107bGV0IGY9MCx2PTA7Y29uc3QgTT1sLmxlbmd0aC0xLEk9dGhpcy5wYXJ0cyxbRyxyZV09KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0'@;
put 'IGgsZj0yPT09bD8iPHN2Zz4iOiIiLHY9ak07Zm9yKGxldCBNPTA7TTxhO00rKyl7Y29uc3QgST1jW01dO2xldCBHLHJlLHVlPS0xLHllPTA7Zm9yKDt5ZTxJLmxlbmd0aCYmKHYubGFzdEluZGV4PXllLHJlPXYuZXhlYyhJKSxudWxsIT09cmUpOyl5ZT12Lmxhc3RJbmRleCx2PT09ak0/IiEt'@;
put 'LSI9PT1yZVsxXT92PUJvZTp2b2lkIDAhPT1yZVsxXT92PWpvZTp2b2lkIDAhPT1yZVsyXT8oWm9lLnRlc3QocmVbMl0pJiYoaD1SZWdFeHAoIjwvIityZVsyXSwiZyIpKSx2PUc4KTp2b2lkIDAhPT1yZVszXSYmKHY9RzgpOnY9PT1HOD8iPiI9PT1yZVswXT8odj1oPz9qTSx1ZT0tMSk6dm9p'@;
put 'ZCAwPT09cmVbMV0/dWU9LTI6KHVlPXYubGFzdEluZGV4LXJlWzJdLmxlbmd0aCxHPXJlWzFdLHY9dm9pZCAwPT09cmVbM10/Rzg6JyInPT09cmVbM10/VW9lOnpvZSk6dj09PVVvZXx8dj09PXpvZT92PUc4OnY9PT1Cb2V8fHY9PT1qb2U/dj1qTToodj1HOCxoPXZvaWQgMCk7Y29uc3QgRWU9'@;
put 'dj09PUc4JiZjW00rMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9dj09PWpNP0krbU1lOnVlPj0wPyhkLnB1c2goRyksSS5zbGljZSgwLHVlKStQUitJLnNsaWNlKHVlKStlZytFZSk6SStlZysoLTI9PT11ZT8oZC5wdXNoKHZvaWQgMCksTSk6RWUpfXJldHVybltHb2UoYyxmKyhjW2Fd'@;
put 'fHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9ek0uY3JlYXRlRWxlbWVudChHLGQpLCQ4LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09YSl7Y29uc3QgdWU9dGhpcy5lbC5jb250ZW50LHllPXVlLmZpcnN0Q2hpbGQ7eWUucmVtb3ZlKCks'@;
put 'dWUuYXBwZW5kKC4uLnllLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShoPSQ4Lm5leHROb2RlKCkpJiZJLmxlbmd0aDxNOyl7aWYoMT09PWgubm9kZVR5cGUpe2lmKGguaGFzQXR0cmlidXRlcygpKXtjb25zdCB1ZT1bXTtmb3IoY29uc3QgeWUgb2YgaC5nZXRBdHRyaWJ1dGVOYW1lcygpKWlm'@;
put 'KHllLmVuZHNXaXRoKFBSKXx8eWUuc3RhcnRzV2l0aChlZykpe2NvbnN0IEVlPXJlW3YrK107aWYodWUucHVzaCh5ZSksdm9pZCAwIT09RWUpe2NvbnN0IEJlPWguZ2V0QXR0cmlidXRlKEVlLnRvTG93ZXJDYXNlKCkrUFIpLnNwbGl0KGVnKSxHZT0vKFsuP0BdKT8oLiopLy5leGVjKEVlKTtJ'@;
put 'LnB1c2goe3R5cGU6MSxpbmRleDpmLG5hbWU6R2VbMl0sc3RyaW5nczpCZSxjdG9yOiIuIj09PUdlWzFdP1hvZToiPyI9PT1HZVsxXT9xb2U6IkAiPT09R2VbMV0/Sm9lOlVNfSl9ZWxzZSBJLnB1c2goe3R5cGU6NixpbmRleDpmfSl9Zm9yKGNvbnN0IHllIG9mIHVlKWgucmVtb3ZlQXR0cmli'@;
put 'dXRlKHllKX1pZihab2UudGVzdChoLnRhZ05hbWUpKXtjb25zdCB1ZT1oLnRleHRDb250ZW50LnNwbGl0KGVnKSx5ZT11ZS5sZW5ndGgtMTtpZih5ZT4wKXtoLnRleHRDb250ZW50PUd5P0d5LmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgRWU9MDtFZTx5ZTtFZSsrKWguYXBwZW5kKHVlW0VlXSxW'@;
put 'TSgpKSwkOC5uZXh0Tm9kZSgpLEkucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKHVlW3llXSxWTSgpKX19fWVsc2UgaWYoOD09PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09SFopSS5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IHVlPS0xO2Zvcig7LTEhPT0odWU9aC5k'@;
put 'YXRhLmluZGV4T2YoZWcsdWUrMSkpOylJLnB1c2goe3R5cGU6NyxpbmRleDpmfSksdWUrPWVnLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPVk4LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24g'@;
put 'SzgoYyxsLGE9YyxkKXt2YXIgaCxmLHYsTTtpZihsPT09JHkpcmV0dXJuIGw7bGV0IEk9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgRz1CTShsKT92b2lkIDA6bC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEk/LmNvbnN0'@;
put 'cnVjdG9yIT09RyYmKG51bGw9PT0oZj1JPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKEksITEpLHZvaWQgMD09PUc/ST12b2lkIDA6KEk9bmV3IEcoYyksSS5fJEFUKGMsYSxkKSksdm9pZCAwIT09ZD8obnVsbCE9PSh2PShNPWEpLl8kQ28pJiZ2b2lkIDAhPT12P3Y6TS5fJENvPVtdKVtk'@;
put 'XT1JOmEuXyRDbD1JKSx2b2lkIDAhPT1JJiYobD1LOChjLEkuXyRBUyhjLGwudmFsdWVzKSxJLGQpKSxsfWNsYXNzIEtvZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJu'@;
put 'IHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2NvbnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOlk4KS5pbXBvcnROb2Rl'@;
put 'KGQsITApOyQ4LmN1cnJlbnROb2RlPWY7bGV0IHY9JDgubmV4dE5vZGUoKSxNPTAsST0wLEc9aFswXTtmb3IoO3ZvaWQgMCE9PUc7KXtpZihNPT09Ry5pbmRleCl7bGV0IHJlOzI9PT1HLnR5cGU/cmU9bmV3IEt5KHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1HLnR5cGU/cmU9bmV3IEcu'@;
put 'Y3Rvcih2LEcubmFtZSxHLnN0cmluZ3MsdGhpcyxsKTo2PT09Ry50eXBlJiYocmU9bmV3IFFvZSh2LHRoaXMsbCkpLHRoaXMuXyRBVi5wdXNoKHJlKSxHPWhbKytJXX1NIT09Rz8uaW5kZXgmJih2PSQ4Lm5leHROb2RlKCksTSsrKX1yZXR1cm4gJDguY3VycmVudE5vZGU9WTgsZn12KGwpe2xl'@;
put 'dCBhPTA7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fJEFWKXZvaWQgMCE9PWQmJih2b2lkIDAhPT1kLnN0cmluZ3M/KGQuXyRBSShsLGQsYSksYSs9ZC5zdHJpbmdzLmxlbmd0aC0yKTpkLl8kQUkobFthXSkpLGErK319Y2xhc3MgS3l7Y29uc3RydWN0b3IobCxhLGQsaCl7dmFyIGY7dGhpcy50eXBl'@;
put 'PTIsdGhpcy5fJEFIPV8wLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWwsdGhpcy5fJEFCPWEsdGhpcy5fJEFNPWQsdGhpcy5vcHRpb25zPWgsdGhpcy5fJENwPW51bGw9PT0oZj1oPy5pc0Nvbm5lY3RlZCl8fHZvaWQgMD09PWZ8fGZ9Z2V0IF8kQVUoKXt2YXIgbCxhO3JldHVybiBudWxs'@;
put 'IT09KGE9bnVsbD09PShsPXRoaXMuXyRBTSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuXyRBVSkmJnZvaWQgMCE9PWE/YTp0aGlzLl8kQ3B9Z2V0IHBhcmVudE5vZGUoKXtsZXQgbD10aGlzLl8kQUEucGFyZW50Tm9kZTtjb25zdCBhPXRoaXMuXyRBTTtyZXR1cm4gdm9pZCAwIT09YSYmMTE9PT1s'@;
put 'Py5ub2RlVHlwZSYmKGw9YS5wYXJlbnROb2RlKSxsfWdldCBzdGFydE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFBfWdldCBlbmROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQn1fJEFJKGwsYT10aGlzKXtsPUs4KHRoaXMsbCxhKSxCTShsKT9sPT09XzB8fG51bGw9PWx8fCIiPT09bD8odGhpcy5fJEFI'@;
put 'IT09XzAmJnRoaXMuXyRBUigpLHRoaXMuXyRBSD1fMCk6bCE9PXRoaXMuXyRBSCYmbCE9PSR5JiZ0aGlzLl8obCk6dm9pZCAwIT09bC5fJGxpdFR5cGUkP3RoaXMuZyhsKTp2b2lkIDAhPT1sLm5vZGVUeXBlP3RoaXMuJChsKTooYz0+Tm9lKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5'@;
put 'bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRB'@;
put 'SCE9PV8wJiZCTSh0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKFk4LmNyZWF0ZVRleHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMo'@;
put 'bCk6KHZvaWQgMD09PWguZWwmJihoLmVsPXpNLmNyZWF0ZUVsZW1lbnQoR29lKGguaCxoLmhbMF0pLHRoaXMub3B0aW9ucykpLGgpO2lmKChudWxsPT09KGE9dGhpcy5fJEFIKXx8dm9pZCAwPT09YT92b2lkIDA6YS5fJEFEKT09PWYpdGhpcy5fJEFILnYoZCk7ZWxzZXtjb25zdCB2PW5ldyBL'@;
put 'b2UoZix0aGlzKSxNPXYudSh0aGlzLm9wdGlvbnMpO3YudihkKSx0aGlzLiQoTSksdGhpcy5fJEFIPXZ9fV8kQUMobCl7bGV0IGE9WW9lLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZZb2Uuc2V0KGwuc3RyaW5ncyxhPW5ldyB6TShsKSksYX1UKGwpe05vZSh0aGlzLl8kQUgp'@;
put 'fHwodGhpcy5fJEFIPVtdLHRoaXMuXyRBUigpKTtjb25zdCBhPXRoaXMuXyRBSDtsZXQgZCxoPTA7Zm9yKGNvbnN0IGYgb2YgbCloPT09YS5sZW5ndGg/YS5wdXNoKGQ9bmV3IEt5KHRoaXMuayhWTSgpKSx0aGlzLmsoVk0oKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpkPWFbaF0sZC5fJEFJKGYp'@;
put 'LGgrKztoPGEubGVuZ3RoJiYodGhpcy5fJEFSKGQmJmQuXyRBQi5uZXh0U2libGluZyxoKSxhLmxlbmd0aD1oKX1fJEFSKGw9dGhpcy5fJEFBLm5leHRTaWJsaW5nLGEpe3ZhciBkO2ZvcihudWxsPT09KGQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKHRoaXMsITEsITAsYSk7bCYm'@;
put 'bCE9PXRoaXMuXyRBQjspe2NvbnN0IGg9bC5uZXh0U2libGluZztsLnJlbW92ZSgpLGw9aH19c2V0Q29ubmVjdGVkKGwpe3ZhciBhO3ZvaWQgMD09PXRoaXMuXyRBTSYmKHRoaXMuXyRDcD1sLG51bGw9PT0oYT10aGlzLl8kQVApfHx2b2lkIDA9PT1hfHxhLmNhbGwodGhpcyxsKSl9fWNsYXNz'@;
put 'IFVNe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy50eXBlPTEsdGhpcy5fJEFIPV8wLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWwsdGhpcy5uYW1lPWEsdGhpcy5fJEFNPWgsdGhpcy5vcHRpb25zPWYsZC5sZW5ndGg+Mnx8IiIhPT1kWzBdfHwiIiE9PWRbMV0/KHRoaXMuXyRB'@;
put 'SD1BcnJheShkLmxlbmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1kKTp0aGlzLl8kQUg9XzB9Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsLGE9dGhpcyxkLGgpe2NvbnN0'@;
put 'IGY9dGhpcy5zdHJpbmdzO2xldCB2PSExO2lmKHZvaWQgMD09PWYpbD1LOCh0aGlzLGwsYSwwKSx2PSFCTShsKXx8bCE9PXRoaXMuXyRBSCYmbCE9PSR5LHYmJih0aGlzLl8kQUg9bCk7ZWxzZXtjb25zdCBNPWw7bGV0IEksRztmb3IobD1mWzBdLEk9MDtJPGYubGVuZ3RoLTE7SSsrKUc9Szgo'@;
put 'dGhpcyxNW2QrSV0sYSxJKSxHPT09JHkmJihHPXRoaXMuXyRBSFtJXSksdnx8KHY9IUJNKEcpfHxHIT09dGhpcy5fJEFIW0ldKSxHPT09XzA/bD1fMDpsIT09XzAmJihsKz0oRz8/IiIpK2ZbSSsxXSksdGhpcy5fJEFIW0ldPUd9diYmIWgmJnRoaXMuaihsKX1qKGwpe2w9PT1fMD90aGlzLmVs'@;
put 'ZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsbD8/IiIpfX1jbGFzcyBYb2UgZXh0ZW5kcyBVTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhp'@;
put 'cy5uYW1lXT1sPT09XzA/dm9pZCAwOmx9fWNvbnN0IGJNZT1HeT9HeS5lbXB0eVNjcmlwdDoiIjtjbGFzcyBxb2UgZXh0ZW5kcyBVTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihsKXtsJiZsIT09XzA/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0'@;
put 'aGlzLm5hbWUsYk1lKTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9fWNsYXNzIEpvZSBleHRlbmRzIFVNe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhLGQsaCxmKSx0aGlzLnR5cGU9NX1fJEFJKGwsYT10aGlzKXt2YXIgZDtpZigobD1udWxsIT09KGQ9'@;
put 'SzgodGhpcyxsLGEsMCkpJiZ2b2lkIDAhPT1kP2Q6XzApPT09JHkpcmV0dXJuO2NvbnN0IGg9dGhpcy5fJEFILGY9bD09PV8wJiZoIT09XzB8fGwuY2FwdHVyZSE9PWguY2FwdHVyZXx8bC5vbmNlIT09aC5vbmNlfHxsLnBhc3NpdmUhPT1oLnBhc3NpdmUsdj1sIT09XzAmJihoPT09XzB8fGYp'@;
put 'O2YmJnRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGgpLHYmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGwpLHRoaXMuXyRBSD1sfWhhbmRsZUV2ZW50KGwpe3ZhciBhLGQ7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMu'@;
put 'XyRBSD90aGlzLl8kQUguY2FsbChudWxsIT09KGQ9bnVsbD09PShhPXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaG9zdCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmVsZW1lbnQsbCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGwpfX1jbGFzcyBRb2V7Y29uc3RydWN0b3IobCxhLGQp'@;
put 'e3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25zPWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtLOCh0aGlzLGwpfX1jb25zdCBlbGU9T1IubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDt2YXIg'@;
put 'VlosQlo7ZWxlPy4oek0sS3kpLChudWxsIT09KEZaPU9SLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PUZaP0ZaOk9SLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjbGFzcyBaTSBleHRlbmRzIFl5e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJl'@;
put 'bmRlck9wdGlvbnM9e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09'@;
put 'bHx8KGEucmVuZGVyQmVmb3JlPWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPSgoYyxs'@;
put 'LGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgdj1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09dil7Y29uc3QgTT1udWxsIT09KGg9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQk'@;
put 'PXY9bmV3IEt5KGwuaW5zZXJ0QmVmb3JlKFZNKCksTSksTSx2b2lkIDAsYT8/e30pfXJldHVybiB2Ll8kQUkoYyksdn0pKGEsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9'@;
put 'PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMSl9cmVuZGVy'@;
put 'KCl7cmV0dXJuICR5fX1aTS5maW5hbGl6ZWQ9ITAsWk0uXyRsaXRFbGVtZW50JD0hMCxudWxsPT09KFZaPWdsb2JhbFRoaXMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0KXx8dm9pZCAwPT09Vlp8fFZaLmNhbGwoZ2xvYmFsVGhpcyx7TGl0RWxlbWVudDpaTX0pO2NvbnN0IHRsZT1nbG9iYWxU'@;
put 'aGlzLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7dGxlPy4oe0xpdEVsZW1lbnQ6Wk19KSwobnVsbCE9PShCWj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUJaP0JaOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMyIpO2NvbnN0'@;
put 'IENNZT1Sb2VgQGNoYXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBj'@;
put 'YWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygxMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNl'@;
put 'LW1kLCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcsIGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91'@;
put 'dC1zcGFjZS14bCwgY2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtj'@;
put 'ZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1z'@;
put 'dGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1s'@;
put 'YXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i'@;
put 'YWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0'@;
put 'aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd'@;
put 'W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ct'@;
put 'cmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1z'@;
put 'dHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91'@;
put 'dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2Vu'@;
put 'dGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1'@;
put 'dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50'@;
put 'fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Zmxl'@;
put 'eC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVt'@;
put 'czpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRl'@;
put 'cn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250'@;
put 'ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRl'@;
put 'bXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4'@;
put 'LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlv'@;
put 'dXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bjp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmln'@;
put 'aHQ6YXV0b31bY2RzLWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2Rz'@;
put 'LWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9w'@;
put 'Il17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlv'@;
put 'dXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDth'@;
put 'bGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtj'@;
put 'ZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVy'@;
put 'O2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bv'@;
put 'c2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlz'@;
put 'cGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIpfVtjZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1sYXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0'@;
put 'KX1bY2RzLWxheW91dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0iZ2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJwOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1w'@;
put 'b3J0YW50fVtjZHMtbGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS3OtDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5'@;
put 'b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFy'@;
put 'KC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50'@;
put 'O3BhZGRpbmctYm90dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMt'@;
put 'bGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60NykhaW1wb3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6'@;
put 'aW5nOmJvcmRlci1ib3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQoKiksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6'@;
put 'c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv'@;
put 'dXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1s'@;
put 'YXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0'@;
put 'aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1s'@;
put 'YXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91'@;
put 'dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFp'@;
put 'bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmln'@;
put 'aHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwt'@;
put 'Y2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBz'@;
put 'bTpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVk'@;
put 'KFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0g'@;
put 'OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12'@;
put 'ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nk'@;
put 'cy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90'@;
put 'dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBt'@;
put 'ZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xv'@;
put 'dHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0'@;
put 'aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs'@;
put 'XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtj'@;
put 'ZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBt'@;
put 'ZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7'@;
put 'bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250'@;
put 'YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv'@;
put 'dXQqPSJhbGlnbkB4bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQo'@;
put 'W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh'@;
put 'bGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9y'@;
put 'aXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5'@;
put 'b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRh'@;
put 'bnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0'@;
put 'Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9'@;
put 'ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1b'@;
put 'Y2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2lu'@;
put 'LXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0i'@;
put 'YWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFs'@;
put 'aWduQHNtOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1z'@;
put 'dGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdp'@;
put 'bi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFs'@;
put 'XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0g'@;
put 'OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0'@;
put 'byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJd'@;
put 'KXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0i'@;
put 'YWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0g'@;
put 'OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6'@;
put 'c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6'@;
put 'dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9'@;
put 'ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4'@;
put 'KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9'@;
put 'W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFp'@;
put 'bXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1s'@;
put 'YXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd'@;
put 'IDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIs'@;
put 'IHNhbnMtc2VyaWYpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4'@;
put 'dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rp'@;
put 'b25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1n'@;
put 'bG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy'@;
put 'YXBoeS1jb2xvci01MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMt'@;
put 'Z2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3Bs'@;
put 'YXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAx'@;
put 'ZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1'@;
put 'ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEu'@;
put 'MWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigt'@;
put 'LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUt'@;
put 'bGV0dGVyLXNwYWNpbmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3'@;
put 'NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDtt'@;
put 'YXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhl'@;
put 'aWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1z'@;
put 'ZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7'@;
put 'd2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAz'@;
put 'N2VtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWds'@;
put 'b2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSot'@;
put 'MSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlv'@;
put 'bi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwu'@;
put 'MTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3'@;
put 'aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n'@;
put 'cmFwaHktYm9keS1mb250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LWJvZHktbGV0dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6'@;
put 'MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkg'@;
put 'KyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWds'@;
put 'b2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIp'@;
put 'KSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2Fs'@;
put 'YygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigt'@;
put 'LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7'@;
put 'ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVt'@;
put 'KSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQs'@;
put 'LjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWln'@;
put 'aHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250'@;
put 'LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9i'@;
put 'YWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBv'@;
put 'Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIi'@;
put 'O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAt'@;
put 'IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6'@;
put 'dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6'@;
put 'ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t'@;
put 'b3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZp'@;
put 'c2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpu'@;
put 'b3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1k'@;
put 'ZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigt'@;
put 'LWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNh'@;
put 'bGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCNjYmQ0ZDgpKSAwIDAgMCB2YXIo'@;
put 'LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSBpbnNldH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQsMzAw'@;
put 'KSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1qdXN0aWZ5XXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGVmdF17dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH1bY2RzLXRleHR+PXJpZ2h0XXt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH1bY2RzLXRleHR+PWNlbnRl'@;
put 'cl17dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOjpiZWZvcmV7Y29udGVudDoiIjttYXJnaW4tdG9wOi0uMTI0ZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MH1bY2RzLXRleHR+PWxoZV06OmFmdGVye2Nv'@;
put 'bnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM117Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVu'@;
put 'aXIgTmV4dCIsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06OmJl'@;
put 'Zm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtj'@;
put 'ZHMtdGV4dCo9aDJdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oM117Zm9udC1zaXplOjEuMXJlbTtsaW5lLWhlaWdodDox'@;
put 'LjA5MDllbTtsZXR0ZXItc3BhY2luZzotLjAxMzYzNmVtfVtjZHMtdGV4dCo9aDNdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4x'@;
put 'NDc1ZW0pICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvIDIpKSotMSkgLSAu'@;
put 'MDQ0ZW0pfTpob3N0e2FsbDppbml0aWFsO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTppbmhlcml0O2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbnRhaW46bGF5'@;
put 'b3V0O2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1zbG90e2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250'@;
put 'LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2Rpc3BsYXk6Y29udGVudHMhaW1wb3J0YW50fTo6c2xvdHRlZCgqKXtmb250LWZhbWlseTppbmhlcml0O2JveC1zaXppbmc6aW5oZXJpdH06OnNsb3R0ZWQoKik6OnBsYWNlaG9sZGVye2NvbG9yOnZh'@;
put 'cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCM0ZjYxNjkpKX06aG9zdChbX2lzLWFuY2hvcl0pLDpob3N0KFtyb2xlPWJ1dHRvbl0pe2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbX2lzLWFu'@;
put 'Y2hvcl0pIDo6c2xvdHRlZCgqKSw6aG9zdChbcm9sZT1idXR0b25dKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJs'@;
put 'ZWRdKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfTpob3N0KFtoaWRkZW5dKSxbaGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0KFtoaWRkZW4qPWZhbHNlXSl7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhv'@;
put 'c3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0pIDo6c2xvdHRlZCgqKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSksOmhvc3QoW3Jv'@;
put 'bGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSkgOjpzbG90dGVkKCope3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9Omhvc3QoW19mb2N1c2VkXSkgLmlucHV0LDpob3N0KFtfZm9jdXNlZF0pIFtmb2N1c2FibGVdLDpob3N0KFt0YWJpbmRleD0iMCJdOmZvY3VzKSw6aG9zdChbdGFiaW5k'@;
put 'ZXg9IjAiXTpmb2N1cykgW2ZvY3VzYWJsZV0sW3RhYmluZGV4PSIwIl1bZm9jdXNhYmxlXTpmb2N1c3tvdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAycHg7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCwxcHgpfWA7ZnVuY3Rpb24galooYyl7cmV0dXJuYGNhbGMoKCR7Y30gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIDFyZW0pYH1jbGFzcyBFTWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZuPWwsdGhpcy5zdWJzY3JpcHRpb25zPWF9dW5z'@;
put 'dWJzY3JpYmUoKXtjb25zdCBsPXRoaXMuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHRoaXMpOy0xIT09bCYmdGhpcy5zdWJzY3JpcHRpb25zLnNwbGljZShsLDEpfX1jb25zdCB6Wj1uZXcgY2xhc3MgVE1le2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXN1YnNjcmliZShsKXtj'@;
put 'b25zdCBhPW5ldyBFTWUobCx0aGlzLnN1YnNjcmlwdGlvbnMpO3JldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhKSxhfWVtaXQobCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS5mbihsKSl9dG9FdmVudE9ic2VydmFibGUoKXtyZXR1cm4gdGhpc319O3paLmxpc3RlbmVy'@;
put 'PWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkNEU19TVEFURV9VUERBVEUiLGM9PnpaLmVtaXQoYy5kZXRhaWwpKTtjbGFzcyBLZntzdGF0aWMgZ2V0IHN0YXRlKCl7cmV0dXJuIF9vZSgpLHdpbmRvdy5DRFMuX3N0YXRlfXN0YXRpYyBnZXRWYWx1ZShsKXtyZXR1cm4gS2Yuc3RhdGVbbF19'@;
put 'c3RhdGljIHNldFZhbHVlKGwsYSl7S2Yuc3RhdGVbbF09YX1zdGF0aWMgbG9nKCl7Tk0ubG9nKEpTT04uc3RyaW5naWZ5KEtmLnN0YXRlLG51bGwsMikpfX1LZi5zdGF0ZVVwZGF0ZXM9eloudG9FdmVudE9ic2VydmFibGUoKTtjb25zdCBBTWU9KGMsbCk9PiJtZXRob2QiPT09bC5raW5kJiZs'@;
put 'LmRlc2NyaXB0b3ImJiEoInZhbHVlImluIGwuZGVzY3JpcHRvcik/ey4uLmwsZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19OntraW5kOiJmaWVsZCIsa2V5OlN5bWJvbCgpLHBsYWNlbWVudDoib3duIixkZXNjcmlwdG9yOnt9LG9yaWdpbmFsS2V5Omwua2V5LGluaXRp'@;
put 'YWxpemVyKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGwuaW5pdGlhbGl6ZXImJih0aGlzW2wua2V5XT1sLmluaXRpYWxpemVyLmNhbGwodGhpcykpfSxmaW5pc2hlcihhKXthLmNyZWF0ZVByb3BlcnR5KGwua2V5LGMpfX0sa01lPShjLGwsYSk9PntsLmNvbnN0cnVjdG9yLmNyZWF0ZVByb3BlcnR5'@;
put 'KGEsYyl9O2Z1bmN0aW9uIG5sZShjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9rTWUoYyxsLGEpOkFNZShjLGwpfWZ1bmN0aW9uIGFsZShjLGwpe3N3aXRjaChsJiZsLnR5cGUpe2Nhc2UgQXJyYXk6Y2FzZSBPYmplY3Q6cmV0dXJue3JlZmxlY3Q6ITEsLi4ubH07Y2FzZSBTdHJpbmc6cmV0'@;
put 'dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlc4KGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YXx8bnVsbH0sLi4ubH07Y2FzZSBOdW1iZXI6cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlc4KGMpLC4uLmx9O2Nhc2UgQm9vbGVhbjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6'@;
put 'VzgoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hPyIiOm51bGwsZnJvbUF0dHJpYnV0ZTphPT5mdW5jdGlvbiBPTWUoYyl7cmV0dXJuIG51bGwhPWMmJiIiK2MhPSJmYWxzZSJ9KGEpfSwuLi5sfTtjYXNlIERhdGU6cmV0dXJue3JlZmxlY3Q6ITEsY29udmVydGVyOntmcm9tQXR0cmli'@;
put 'dXRlOmE9Pm5ldyBEYXRlKGEpfSwuLi5sfTtkZWZhdWx0OnJldHVybnsuLi5sfX19ZnVuY3Rpb24gdG0oYyl7cmV0dXJuKGwsYSk9PihjPy5yZXF1aXJlZCYmZnVuY3Rpb24gUE1lKGMsbCxhKXtjb25zdCBkPWMuZmlyc3RVcGRhdGVkO2MuZmlyc3RVcGRhdGVkPWZ1bmN0aW9uKGgpe2lmKGEm'@;
put 'JmEucmVxdWlyZWQmJkhNKHRoaXNbbF0pKXtjb25zdCBmPWEucmVxdWlyZWRNZXNzYWdlfHxmdW5jdGlvbih2PSJ3YXJuaW5nIixNLEkpe2NvbnN0IEc9SS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3ZvZSh2KX06ICR7TX0gaXMgcmVxdWlyZWQgdG8gdXNlICR7R30gY29tcG9uZW50'@;
put 'LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhob2UoKT9gQW5ndWxhcjogPCR7R30gWyR7TX1dPSIuLi4iPjwvJHtHfT5cbmA6IiIpKyhwb2UoKT9gVnVlOiA8JHtHfSA6JHtNfT0iLi4uIj48LyR7R30+XG5gOiIiKSsoZm9lKCk/YFJlYWN0OiA8JHtmdW5j'@;
put 'dGlvbiBPU2UoYyl7cmV0dXJuIHZvZShmdW5jdGlvbiBMU2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oRyl9ICR7cmU9TSxyZS5zdGFydHNXaXRo'@;
put 'KCJhcmlhIik/VzgocmUpOnJlfT17Li4ufSAvPlxuYDoiIikrYEhUTUw6IDwke0d9ICR7VzgoTSl9PSIuLi4iPjwvJHtHfT5cbkphdmFTY3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7R30nKS4ke019ID0gJy4uLic7XG5cbmA7dmFyIHJlfShhLnJlcXVpcmVkLGwsdGhpcy50YWdO'@;
put 'YW1lKTtpZigiZXJyb3IiPT09YS5yZXF1aXJlZCl0aHJvdyBFcnJvcihmKTtOTS53YXJuKGYsdGhpcyl9ZCYmZC5jYWxsKHRoaXMsaCl9fShsLGEsYyksbmxlKGFsZShhLGMpKShsLGEpKX12YXIgVk1lPVJvZWBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHswJSx0b3tvcGFjaXR5OjB9NzUle29w'@;
put 'YWNpdHk6MX19Omhvc3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcs'@;
put 'Y2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxj'@;
put 'KDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0tY29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tkaXNwbGF5OmJsb2NrfTpob3N0KFtz'@;
put 'aXplKj14c10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4t'@;
put 'aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6'@;
put 'ZSo9c21dKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4t'@;
put 'aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtz'@;
put 'aXplKj1tZF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21p'@;
put 'bi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3Qo'@;
put 'W3NpemUqPWxnXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp'@;
put 'KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9'@;
put 'Omhvc3QoW3NpemUqPXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz'@;
put 'ZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Us'@;
put 'MjApKSl9Omhvc3QoW3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9i'@;
put 'YWwtYmFzZSwyMCkpKSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjAp'@;
put 'KSkpO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21p'@;
put 'bi13aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSl9Omhvc3QoW3Np'@;
put 'emUqPWZpdF0pe2hlaWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjpsYXlvdXR9Omhvc3QoW3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW3N0'@;
put 'YXR1cz1kYW5nZXJdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbc3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtzdGF0dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW3N0YXR1cz1uZXV0cmFs'@;
put 'XSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtpbnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsICNjYmQ0'@;
put 'ZDgpfTpob3N0KFtkaXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRlKDApfTpob3N0KFtkaXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChbZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1sZWZ0'@;
put 'XSl7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhvcml6b250YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfS5hbGVydCwuYmFkZ2V7Zmls'@;
put 'bDp2YXIoLS1iYWRnZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFkZ2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZT1kYW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2UqPXdh'@;
put 'cm5pbmddKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdl'@;
put 'PWluZm9dKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtiYWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZh'@;
put 'cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3Rh'@;
put 'dHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAs'@;
put 'ICM0MjgxMGUpKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZSo9aW5oZXJpdF1baW52'@;
put 'ZXJzZV0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX0uY2RzLWludGVybmFsLWRv'@;
put 'dC0xe2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOmZhZGVJbkFuZE91'@;
put 'dCAxLjhzIGVhc2Utb3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0yLC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7Y29uc3QgQk1lPVsidW5rbm93biIse291'@;
put 'dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0xIiBj'@;
put 'eD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBFb3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246Qk1lWzFdLC4uLktmLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe0tmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uS2Yuc3RhdGUu'@;
put 'aWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IUVvLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PkVvLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChbZCxoXSk9PmgubWFwKGY9PltmLEVv'@;
put 'LnJlZ2lzdHJ5W2RdXSkpO0tmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uS2Yuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX12YXIgZnAsYztmdW5jdGlvbiBaTWUoYyxsKXtsZXQg'@;
put 'YT0iIjtzd2l0Y2goZnVuY3Rpb24gak1lKGMpe3N3aXRjaCghMCl7Y2FzZSBITShjKTpyZXR1cm4gZnAuTmlsU2l6ZVZhbHVlO2Nhc2UgZnVuY3Rpb24gc2xlKGMpe3JldHVyblsieHhzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsInh4bCJdLmluZGV4T2YoYyk+LTF9KGMpOnJldHVybiBm'@;
put 'cC5WYWxpZFNpemVTdHJpbmc7Y2FzZSBmdW5jdGlvbiByb2UoYyl7cmV0dXJuIGJaKGMpJiYhbm9lKGMudHJpbSgpKSYmK2M9PStjfShjKTpyZXR1cm4gZnAuVmFsaWROdW1lcmljU3RyaW5nO2RlZmF1bHQ6cmV0dXJuIGZwLkJhZFNpemVWYWx1ZX19KGZ1bmN0aW9uIHpNZShjKXtyZXR1cm4g'@;
put 'SE0oYyk/IiI6ZnVuY3Rpb24gUFNlKGMsbCxhPSIiKXtjb25zdCBkPWMuc3BsaXQoIiAiKSxoPSIiPT09YT9kLmZpbHRlcihmPT5mIT09bCk6ZC5tYXAoZj0+Zj09PWw/YTpmKTtyZXR1cm4gaC5sZW5ndGg+MD9oLmpvaW4oIiAiKToiIn0oYywiZml0Iil9KGwpKSl7Y2FzZSBmcC5WYWxpZE51'@;
put 'bWVyaWNTdHJpbmc6cmV0dXJuIGE9aloocGFyc2VJbnQobCkpLHZvaWQgZnVuY3Rpb24gTU1lKGMsLi4ubCl7bC5mb3JFYWNoKChbYSxkXSk9PntjLnN0eWxlW2FdPWR9KX0oYywuLi5mdW5jdGlvbiBVTWUoYyxsKXtyZXR1cm4hRk0oYykmJmMuaW5kZXhPZigiZml0Iik+LTE/W1sid2lkdGgi'@;
put 'LCJhdXRvIl0sWyJoZWlnaHQiLCJhdXRvIl0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dOltbIndpZHRoIixsXSxbImhlaWdodCIsbF0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dfShsLGEpKTtjYXNlIGZwLlZhbGlkU2l6ZVN0cmluZzpjYXNlIGZwLk5pbFNp'@;
put 'emVWYWx1ZTpyZXR1cm4gdm9pZCBmdW5jdGlvbiB4TWUoYywuLi5sKXtsLmZvckVhY2goYT0+e2Muc3R5bGVbYV09IiJ9KX0oYywid2lkdGgiLCJoZWlnaHQiLCJtaW4td2lkdGgiLCJtaW4taGVpZ2h0Iik7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIFVaKGMpe3JldHVybiBjLmJhZGdlJiYo'@;
put 'ImluaGVyaXQtdHJpYW5nbGUiPT09Yy5iYWRnZXx8Indhcm5pbmctdHJpYW5nbGUiPT09Yy5iYWRnZSl9KGM9ZnB8fChmcD17fSkpLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixjLlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixjLlZhbGlkTnVtZXJpY1N0cmluZz0idmFsdWUt'@;
put 'aXMtbnVtZXJpYyIsYy5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCI7Y2xhc3MgWGYgZXh0ZW5kcyBaTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVz'@;
put 'KCl7cmV0dXJuW0NNZSxWTWVdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQgc2hhcGUobCl7aWYoZnVuY3Rpb24gZ1NlKGMsbCl7cmV0dXJuIUhNKGMpJiZhb2UoYyxsKX0obCx0aGlzLl9zaGFwZSkpe2NvbnN0IGE9dGhpcy5fc2hhcGU7dGhpcy5fc2hhcGU9bCx0aGlzLnJl'@;
put 'cXVlc3RVcGRhdGUoInNoYXBlIixhKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShsKXtpZihmdW5jdGlvbiBwU2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gZlNlKGMpe3JldHVybiBXc2UoU3RyaW5nLGMpfHxGTShjKX0oYykmJmFvZShjLGwpfShsLHRoaXMuX3NpemUp'@;
put 'KXtjb25zdCBhPXRoaXMuX3NpemU7dGhpcy5fc2l6ZT1sLFpNZSh0aGlzLGwpLHRoaXMucmVxdWVzdFVwZGF0ZSgic2l6ZSIsYSl9fXVwZGF0ZWQobCl7aWYobC5oYXMoImlubmVyT2Zmc2V0IikmJnRoaXMuaW5uZXJPZmZzZXQ+MCl7Y29uc3QgYT1qWigtMSp0aGlzLmlubmVyT2Zmc2V0KSxk'@;
put 'PWBjYWxjKDEwMCUgKyAke2paKDIqdGhpcy5pbm5lck9mZnNldCl9KWA7dGhpcy5zdmcuc3R5bGUud2lkdGg9ZCx0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9ZCx0aGlzLnN2Zy5zdHlsZS5tYXJnaW49YCR7YX0gMCAwICR7YX1gfX1maXJzdFVwZGF0ZWQobCl7aWYoc3VwZXIuZmlyc3RVcGRhdGVk'@;
put 'KGwpLHRoaXMuaXNDb25uZWN0ZWQpe2xldCBhPSJ1bmtub3duIjt0aGlzLnN1YnNjcmlwdGlvbj1LZi5zdGF0ZVVwZGF0ZXMuc3Vic2NyaWJlKGQ9PnsiaWNvblJlZ2lzdHJ5Ij09PWQua2V5JiZFby5yZWdpc3RyeVt0aGlzLnNoYXBlXSYmYSE9PXRoaXMuc2hhcGUmJihhPXRoaXMuc2hhcGUs'@;
put 'dGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIpKX0pfX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9cmVuZGVyKCl7cmV0dXJuIGJaKEVvLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdKT92TWVg'@;
put 'PHNwYW4gLmlubmVySFRNTD0iJHtFby5yZWdpc3RyeVt0aGlzLnNoYXBlXX0iPjwvc3Bhbj5gOnlNZWA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gWU1lKGMpe2NvbnN0IGw9RW8ucmVnaXN0cnlbYy5zaGFwZV0/P0VvLnJlZ2lzdHJ5LnVua25vd247bGV0IGE9Yy5zb2xpZCYmbC5zb2xp'@;
put 'ZD9sLnNvbGlkOmwub3V0bGluZTtyZXR1cm4gYy5iYWRnZSYmIVVaKGMpJiYoYT1jLnNvbGlkP2wuc29saWRCYWRnZWQ/P2E6bC5vdXRsaW5lQmFkZ2VkPz9hKSxVWihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQWxlcnRlZD8/YTpsLm91dGxpbmVBbGVydGVkPz9hKSxhfSh0aGlzKStmdW5jdGlv'@;
put 'biBXTWUoYyl7bGV0IGw9IiI7cmV0dXJuIGMuYmFkZ2UmJlVaKGMpP2w9JzxwYXRoIGQ9Ik0yNi44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4yOCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjggMS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVy'@;
put 'dCIgLz4nOmMuYmFkZ2UmJihsPSc8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJiYWRnZSIgLz4nKSxsfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19ZnVu'@;
put 'Y3Rpb24gV00oYyl7cmV0dXJuISFjJiYoYyBpbnN0YW5jZW9mIFF0fHxLZShjLmxpZnQpJiZLZShjLnN1YnNjcmliZSkpfSRmKFt0bSh7dHlwZTpTdHJpbmd9KV0sWGYucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksJGYoW3RtKHt0eXBlOlN0cmluZ30pXSxYZi5wcm90b3R5cGUsInNpemUiLG51'@;
put 'bGwpLCRmKFt0bSh7dHlwZTpTdHJpbmd9KV0sWGYucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksJGYoW3RtKHt0eXBlOlN0cmluZ30pXSxYZi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksJGYoW3RtKHt0eXBlOkJvb2xlYW59KV0sWGYucHJvdG90eXBlLCJzb2xpZCIsdm9pZCAwKSwk'@;
put 'ZihbdG0oe3R5cGU6U3RyaW5nfSldLFhmLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLCRmKFt0bSh7dHlwZTpCb29sZWFufSldLFhmLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSwkZihbdG0oe3R5cGU6U3RyaW5nfSldLFhmLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCksJGYoW2Z1'@;
put 'bmN0aW9uIEZNZShjKXtyZXR1cm4obCxhKT0+e2NvbnN0IGQ9YWxlKGEsYyk7cmV0dXJuIGQmJihkLnJlZmxlY3Q9ISFjPy5yZWZsZWN0JiZjLnJlZmxlY3QsZC5yZWZsZWN0JiYhYz8uYXR0cmlidXRlJiYoZC5hdHRyaWJ1dGU9Il8iK1c4KGEpKSksbmxlKGQpKGwsYSl9fSh7dHlwZTpOdW1i'@;
put 'ZXJ9KV0sWGYucHJvdG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSwkZihbZnVuY3Rpb24gTk1lKGMsbCl7cmV0dXJuKCh7ZmluaXNoZXI6YyxkZXNjcmlwdG9yOmx9KT0+KGEsZCk9Pnt2YXIgaDtpZih2b2lkIDA9PT1kKXtjb25zdCBmPW51bGwhPT0oaD1hLm9yaWdpbmFsS2V5KSYmdm9p'@;
put 'ZCAwIT09aD9oOmEua2V5LHY9bnVsbCE9bD97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5OmYsZGVzY3JpcHRvcjpsKGEua2V5KX06ey4uLmEsa2V5OmZ9O3JldHVybiBudWxsIT1jJiYodi5maW5pc2hlcj1mdW5jdGlvbihNKXtjKE0sZil9KSx2fXtjb25zdCBmPWEu'@;
put 'Y29uc3RydWN0b3I7dm9pZCAwIT09bCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZCxsKGQpKSxjPy4oZixkKX19KSh7ZGVzY3JpcHRvcjphPT57Y29uc3QgZD17Z2V0KCl7dmFyIGgsZjtyZXR1cm4gbnVsbCE9PShmPW51bGw9PT0oaD10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1oP3Zv'@;
put 'aWQgMDpoLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1mP2Y6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGwpe2NvbnN0IGg9InN5bWJvbCI9PXR5cGVvZiBhP1N5bWJvbCgpOiJfXyIrYTtkLmdldD1mdW5jdGlvbigpe3ZhciBmLHY7cmV0dXJuIHZvaWQgMD09'@;
put 'PXRoaXNbaF0mJih0aGlzW2hdPW51bGwhPT0odj1udWxsPT09KGY9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAwIT09dj92Om51bGwpLHRoaXNbaF19fXJldHVybiBkfX0pfSgic3ZnIildLFhmLnByb3RvdHlwZSwic3ZnIix2'@;
put 'b2lkIDApLGZ1bmN0aW9uIEJTZShjLGwpe2NvZSgpJiZ1b2UoWyJjdXN0b21FbGVtZW50cyJdKSYmVlNlKGMsbCx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfSgiY2RzLWljb24iLFhmKTtjb25zdCBaWj1jPT5jJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2Yg'@;
put 'YztmdW5jdGlvbiBvbGUoYyl7cmV0dXJuIEtlKGM/LnRoZW4pfWZ1bmN0aW9uIGxsZShjKXtyZXR1cm4gS2UoY1tkaV0pfWZ1bmN0aW9uIGNsZShjKXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJktlKGM/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIHVsZShjKXtyZXR1'@;
put 'cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFk'@;
put 'YWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IGRsZT1mdW5jdGlvbiBRTWUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKTtmdW5jdGlvbiBo'@;
put 'bGUoYyl7cmV0dXJuIEtlKGM/LltkbGVdKX1mdW5jdGlvbiBmbGUoYyl7cmV0dXJuIGZ1bmN0aW9uIE1vZShjLGwsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBoLGQ9YS5h'@;
put 'cHBseShjLGx8fFtdKSxmPVtdO3JldHVybiBoPU9iamVjdC5jcmVhdGUoKCJmdW5jdGlvbiI9PXR5cGVvZiBBc3luY0l0ZXJhdG9yP0FzeW5jSXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpLE0oIm5leHQiKSxNKCJ0aHJvdyIpLE0oInJldHVybiIsZnVuY3Rpb24gdihFZSl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKEJlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJlKS50aGVuKEVlLHVlKX19KSxoW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoO2Z1bmN0aW9uIE0oRWUsQmUpe2RbRWVdJiYoaFtFZV09ZnVuY3Rpb24oR2Upe3JldHVybiBuZXcgUHJvbWlz'@;
put 'ZShmdW5jdGlvbihzdCxwdCl7Zi5wdXNoKFtFZSxHZSxzdCxwdF0pPjF8fEkoRWUsR2UpfSl9LEJlJiYoaFtFZV09QmUoaFtFZV0pKSl9ZnVuY3Rpb24gSShFZSxCZSl7dHJ5eyFmdW5jdGlvbiBHKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIGVtP1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52'@;
put 'KS50aGVuKHJlLHVlKTp5ZShmWzBdWzJdLEVlKX0oZFtFZV0oQmUpKX1jYXRjaChHZSl7eWUoZlswXVszXSxHZSl9fWZ1bmN0aW9uIHJlKEVlKXtJKCJuZXh0IixFZSl9ZnVuY3Rpb24gdWUoRWUpe0koInRocm93IixFZSl9ZnVuY3Rpb24geWUoRWUsQmUpe0VlKEJlKSxmLnNoaWZ0KCksZi5s'@;
put 'ZW5ndGgmJkkoZlswXVswXSxmWzBdWzFdKX19KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgZW0oYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIGVtKHZvaWQgMCk7eWllbGQg'@;
put 'eWllbGQgZW0oZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIHBsZShjKXtyZXR1cm4gS2UoYz8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBvMShjKXtpZihjIGluc3RhbmNlb2YgUXQpcmV0dXJuIGM7aWYobnVsbCE9Yyl7aWYobGxlKGMpKXJldHVybiBmdW5jdGlvbiBleGUo'@;
put 'Yyl7cmV0dXJuIG5ldyBRdChsPT57Y29uc3QgYT1jW2RpXSgpO2lmKEtlKGEuc3Vic2NyaWJlKSlyZXR1cm4gYS5zdWJzY3JpYmUobCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0p'@;
put 'fShjKTtpZihaWihjKSlyZXR1cm4gZnVuY3Rpb24gdHhlKGMpe3JldHVybiBuZXcgUXQobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZihvbGUoYykpcmV0dXJuIGZ1bmN0aW9uIG54ZShjKXtyZXR1cm4g'@;
put 'bmV3IFF0KGw9PntjLnRoZW4oYT0+e2wuY2xvc2VkfHwobC5uZXh0KGEpLGwuY29tcGxldGUoKSl9LGE9PmwuZXJyb3IoYSkpLnRoZW4obnVsbCxJaSl9KX0oYyk7aWYoY2xlKGMpKXJldHVybiBnbGUoYyk7aWYoaGxlKGMpKXJldHVybiBmdW5jdGlvbiByeGUoYyl7cmV0dXJuIG5ldyBRdChs'@;
put 'PT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihwbGUoYykpcmV0dXJuIGZ1bmN0aW9uIGl4ZShjKXtyZXR1cm4gZ2xlKGZsZShjKSl9KGMpfXRocm93IHVsZShjKX1mdW5jdGlvbiBnbGUoYyl7cmV0dXJuIG5ldyBR'@;
put 'dChsPT57KGZ1bmN0aW9uIGF4ZShjLGwpe3ZhciBhLGQsaCxmO3JldHVybiBmdW5jdGlvbiBDb2UoYyxsLGEsZCl7cmV0dXJuIG5ldyhhfHwoYT1Qcm9taXNlKSkoZnVuY3Rpb24oZix2KXtmdW5jdGlvbiBNKHJlKXt0cnl7RyhkLm5leHQocmUpKX1jYXRjaCh1ZSl7dih1ZSl9fWZ1bmN0aW9u'@;
put 'IEkocmUpe3RyeXtHKGQudGhyb3cocmUpKX1jYXRjaCh1ZSl7dih1ZSl9fWZ1bmN0aW9uIEcocmUpe3JlLmRvbmU/ZihyZS52YWx1ZSk6ZnVuY3Rpb24gaChmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIGE/ZjpuZXcgYShmdW5jdGlvbih2KXt2KGYpfSl9KHJlLnZhbHVlKS50aGVuKE0sSSl9Rygo'@;
put 'ZD1kLmFwcGx5KGMsbHx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGE9eG9lKGMpOyEoZD15aWVsZCBhLm5leHQoKSkuZG9uZTspaWYobC5uZXh0KGQudmFsdWUpLGwuY2xvc2VkKXJldHVybn1jYXRjaCh2KXtoPXtlcnJvcjp2fX1maW5h'@;
put 'bGx5e3RyeXtkJiYhZC5kb25lJiYoZj1hLnJldHVybikmJih5aWVsZCBmLmNhbGwoYSkpfWZpbmFsbHl7aWYoaCl0aHJvdyBoLmVycm9yfX1sLmNvbXBsZXRlKCl9KX0pKGMsbCkuY2F0Y2goYT0+bC5lcnJvcihhKSl9KX1mdW5jdGlvbiB0ZyhjLGwsYSxkPTAsaD0hMSl7Y29uc3QgZj1sLnNj'@;
put 'aGVkdWxlKGZ1bmN0aW9uKCl7YSgpLGg/Yy5hZGQodGhpcy5zY2hlZHVsZShudWxsLGQpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGQpO2lmKGMuYWRkKGYpLCFoKXJldHVybiBmfWZ1bmN0aW9uIG1sZShjLGw9MCl7cmV0dXJuIE5pKChhLGQpPT57YS5zdWJzY3JpYmUoSGkoZCxoPT50ZyhkLGMs'@;
put 'KCk9PmQubmV4dChoKSxsKSwoKT0+dGcoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+dGcoZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiB2bGUoYyxsPTApe3JldHVybiBOaSgoYSxkKT0+e2QuYWRkKGMuc2NoZWR1bGUoKCk9PmEuc3Vic2NyaWJlKGQpLGwpKX0pfWZ1bmN0'@;
put 'aW9uIHlsZShjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IFF0KGE9Pnt0ZyhhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7dGcoYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2Eu'@;
put 'Y29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIFV1KGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24gZHhlKGMsbCl7aWYobnVsbCE9Yyl7aWYobGxlKGMpKXJldHVybiBmdW5jdGlvbiBzeGUoYyxsKXtyZXR1cm4gbzEoYykucGlwZSh2bGUobCksbWxlKGwpKX0o'@;
put 'YyxsKTtpZihaWihjKSlyZXR1cm4gZnVuY3Rpb24gbHhlKGMsbCl7cmV0dXJuIG5ldyBRdChhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVsZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9'@;
put 'KX0oYyxsKTtpZihvbGUoYykpcmV0dXJuIGZ1bmN0aW9uIG94ZShjLGwpe3JldHVybiBvMShjKS5waXBlKHZsZShsKSxtbGUobCkpfShjLGwpO2lmKGNsZShjKSlyZXR1cm4geWxlKGMsbCk7aWYoaGxlKGMpKXJldHVybiBmdW5jdGlvbiBjeGUoYyxsKXtyZXR1cm4gbmV3IFF0KGE9PntsZXQg'@;
put 'ZDtyZXR1cm4gdGcoYSxsLCgpPT57ZD1jW2RsZV0oKSx0ZyhhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZvaWQgYS5lcnJvcih2KX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PktlKGQ/LnJldHVy'@;
put 'bikmJmQucmV0dXJuKCl9KX0oYyxsKTtpZihwbGUoYykpcmV0dXJuIGZ1bmN0aW9uIHV4ZShjLGwpe3JldHVybiB5bGUoZmxlKGMpLGwpfShjLGwpfXRocm93IHVsZShjKX0oYyxsKTpvMShjKX1mdW5jdGlvbiBibGUoYyl7cmV0dXJuIGMmJktlKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIFdaKGMp'@;
put 'e3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIF9sZShjKXtyZXR1cm4gS2UoV1ooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIFlNKGMpe3JldHVybiBibGUoV1ooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGRzKC4uLmMpe3JldHVybiBVdShjLFlNKGMpKX1jb25zdHtpc0Fy'@;
put 'cmF5OmZ4ZX09QXJyYXkse2dldFByb3RvdHlwZU9mOnB4ZSxwcm90b3R5cGU6Z3hlLGtleXM6bXhlfT1PYmplY3Q7ZnVuY3Rpb24gd2xlKGMpe2lmKDE9PT1jLmxlbmd0aCl7Y29uc3QgbD1jWzBdO2lmKGZ4ZShsKSlyZXR1cm57YXJnczpsLGtleXM6bnVsbH07aWYoZnVuY3Rpb24gdnhlKGMp'@;
put 'e3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGMmJnB4ZShjKT09PWd4ZX0obCkpe2NvbnN0IGE9bXhlKGwpO3JldHVybnthcmdzOmEubWFwKGQ9PmxbZF0pLGtleXM6YX19fXJldHVybnthcmdzOmMsa2V5czpudWxsfX1jb25zdHtpc0FycmF5Onl4ZX09QXJyYXk7ZnVuY3Rpb24gWVooYyl7'@;
put 'cmV0dXJuIFByKGw9PmZ1bmN0aW9uIGJ4ZShjLGwpe3JldHVybiB5eGUobCk/YyguLi5sKTpjKGwpfShjLGwpKX1mdW5jdGlvbiBDbGUoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gWDgoLi4uYyl7Y29uc3QgbD1ZTShjKSxhPV9sZShj'@;
put 'KSx7YXJnczpkLGtleXM6aH09d2xlKGMpO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gVXUoW10sbCk7Y29uc3QgZj1uZXcgUXQoZnVuY3Rpb24gX3hlKGMsbCxhPWNuKXtyZXR1cm4gZD0+e1NsZShsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IHY9aCxNPWg7Zm9y'@;
put 'KGxldCBJPTA7STxoO0krKylTbGUobCwoKT0+e2NvbnN0IEc9VXUoY1tJXSxsKTtsZXQgcmU9ITE7Ry5zdWJzY3JpYmUoSGkoZCx1ZT0+e2ZbSV09dWUscmV8fChyZT0hMCxNLS0pLE18fGQubmV4dChhKGYuc2xpY2UoKSkpfSwoKT0+ey0tdnx8ZC5jb21wbGV0ZSgpfSkpfSxkKX0sZCl9fShk'@;
put 'LGwsaD92PT5DbGUoaCx2KTpjbikpO3JldHVybiBhP2YucGlwZShZWihhKSk6Zn1mdW5jdGlvbiBTbGUoYyxsLGEpe2M/dGcoYSxjLGwpOmwoKX1jb25zdCBGUj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRz'@;
put 'IGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIEYwKGMsbCxhPTEvMCl7cmV0dXJuIEtlKGwpP0YwKChkLGgpPT5QcigoZix2KT0+bChkLGYsaCx2KSkobzEoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksTmkoKGQsaCk9PmZ1bmN0aW9uIHd4ZShjLGwsYSxkLGgsZix2LE0p'@;
put 'e2NvbnN0IEk9W107bGV0IEc9MCxyZT0wLHVlPSExO2NvbnN0IHllPSgpPT57dWUmJiFJLmxlbmd0aCYmIUcmJmwuY29tcGxldGUoKX0sRWU9R2U9Pkc8ZD9CZShHZSk6SS5wdXNoKEdlKSxCZT1HZT0+e2YmJmwubmV4dChHZSksRysrO2xldCBzdD0hMTtvMShhKEdlLHJlKyspKS5zdWJzY3Jp'@;
put 'YmUoSGkobCxwdD0+e2g/LihwdCksZj9FZShwdCk6bC5uZXh0KHB0KX0sKCk9PntzdD0hMH0sdm9pZCAwLCgpPT57aWYoc3QpdHJ5e2ZvcihHLS07SS5sZW5ndGgmJkc8ZDspe2NvbnN0IHB0PUkuc2hpZnQoKTt2P3RnKGwsdiwoKT0+QmUocHQpKTpCZShwdCl9eWUoKX1jYXRjaChwdCl7bC5l'@;
put 'cnJvcihwdCl9fSkpfTtyZXR1cm4gYy5zdWJzY3JpYmUoSGkobCxFZSwoKT0+e3VlPSEwLHllKCl9KSksKCk9PntNPy4oKX19KGQsaCxjLGEpKSl9ZnVuY3Rpb24gWHkoYz0xLzApe3JldHVybiBGMChjbixjKX1mdW5jdGlvbiBHWiguLi5jKXtyZXR1cm4gZnVuY3Rpb24gQ3hlKCl7cmV0dXJu'@;
put 'IFh5KDEpfSgpKFV1KGMsWU0oYykpKX1mdW5jdGlvbiBNbGUoYyl7cmV0dXJuIG5ldyBRdChsPT57bzEoYygpKS5zdWJzY3JpYmUobCl9KX1mdW5jdGlvbiBHTShjLGwpe2NvbnN0IGE9S2UoYyk/YzooKT0+YyxkPWg9PmguZXJyb3IoYSgpKTtyZXR1cm4gbmV3IFF0KGw/aD0+bC5zY2hlZHVs'@;
put 'ZShkLDAsaCk6ZCl9Y29uc3QgRTI9bmV3IFF0KGM9PmMuY29tcGxldGUoKSk7ZnVuY3Rpb24gJFooKXtyZXR1cm4gTmkoKGMsbCk9PntsZXQgYT1udWxsO2MuX3JlZkNvdW50Kys7Y29uc3QgZD1IaShsLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIWN8fGMuX3JlZkNvdW50PD0wfHww'@;
put 'PC0tYy5fcmVmQ291bnQpcmV0dXJuIHZvaWQoYT1udWxsKTtjb25zdCBoPWMuX2Nvbm5lY3Rpb24sZj1hO2E9bnVsbCxoJiYoIWZ8fGg9PT1mKSYmaC51bnN1YnNjcmliZSgpLGwudW5zdWJzY3JpYmUoKX0pO2Muc3Vic2NyaWJlKGQpLGQuY2xvc2VkfHwoYT1jLmNvbm5lY3QoKSl9KX1jbGFz'@;
put 'cyBLWiBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLnNvdXJjZT1sLHRoaXMuc3ViamVjdEZhY3Rvcnk9YSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsUXIobCkmJih0aGlzLmxpZnQ9bC5saWZ0KX1fc3Vi'@;
put 'c2NyaWJlKGwpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUobCl9Z2V0U3ViamVjdCgpe2NvbnN0IGw9dGhpcy5fc3ViamVjdDtyZXR1cm4oIWx8fGwuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFy'@;
put 'ZG93bigpe3RoaXMuX3JlZkNvdW50PTA7Y29uc3R7X2Nvbm5lY3Rpb246bH09dGhpczt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPy51bnN1YnNjcmliZSgpfWNvbm5lY3QoKXtsZXQgbD10aGlzLl9jb25uZWN0aW9uO2lmKCFsKXtsPXRoaXMuX2Nvbm5lY3Rpb249bmV3'@;
put 'IEp0O2NvbnN0IGE9dGhpcy5nZXRTdWJqZWN0KCk7bC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKEhpKGEsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxhLmNvbXBsZXRlKCl9LGQ9Pnt0aGlzLl90ZWFyZG93bigpLGEuZXJyb3IoZCl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLGwu'@;
put 'Y2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLGw9SnQuRU1QVFkpfXJldHVybiBsfXJlZkNvdW50KCl7cmV0dXJuICRaKCkodGhpcyl9fWZ1bmN0aW9uIGoxKGMsbCl7cmV0dXJuIE5pKChhLGQpPT57bGV0IGg9bnVsbCxmPTAsdj0hMTtjb25zdCBNPSgpPT52JiYhaCYmZC5jb21wbGV0'@;
put 'ZSgpO2Euc3Vic2NyaWJlKEhpKGQsST0+e2g/LnVuc3Vic2NyaWJlKCk7bGV0IEc9MDtjb25zdCByZT1mKys7bzEoYyhJLHJlKSkuc3Vic2NyaWJlKGg9SGkoZCx1ZT0+ZC5uZXh0KGw/bChJLHVlLHJlLEcrKyk6dWUpLCgpPT57aD1udWxsLE0oKX0pKX0sKCk9Pnt2PSEwLE0oKX0pKX0pfWZ1'@;
put 'bmN0aW9uIGdoKGMpe3JldHVybiBjPD0wPygpPT5FMjpOaSgobCxhKT0+e2xldCBkPTA7bC5zdWJzY3JpYmUoSGkoYSxoPT57KytkPD1jJiYoYS5uZXh0KGgpLGM8PWQmJmEuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBUMiguLi5jKXtjb25zdCBsPVlNKGMpO3JldHVybiBOaSgoYSxkKT0+'@;
put 'eyhsP0daKGMsYSxsKTpHWihjLGEpKS5zdWJzY3JpYmUoZCl9KX1mdW5jdGlvbiBXbChjLGwpe3JldHVybiBOaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoSGkoZCxmPT5jLmNhbGwobCxmLGgrKykmJmQubmV4dChmKSkpfSl9ZnVuY3Rpb24gSFIoYyl7cmV0dXJuIE5pKChsLGEpPT57'@;
put 'bGV0IGQ9ITE7bC5zdWJzY3JpYmUoSGkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT57ZHx8YS5uZXh0KGMpLGEuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIHhsZShjPU14ZSl7cmV0dXJuIE5pKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoSGkoYSxoPT57ZD0hMCxhLm5leHQoaCl9'@;
put 'LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIE14ZSgpe3JldHVybiBuZXcgRlJ9ZnVuY3Rpb24gbm0oYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP1dsKChoLGYpPT5jKGgsZixkKSk6Y24sZ2goMSksYT9IUihs'@;
put 'KTp4bGUoKCk9Pm5ldyBGUikpfWZ1bmN0aW9uIHF5KGMsbCl7cmV0dXJuIEtlKGwpP0YwKGMsbCwxKTpGMChjLDEpfWZ1bmN0aW9uIFp1KGMsbCxhKXtjb25zdCBkPUtlKGMpfHxsfHxhP3tuZXh0OmMsZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP05pKChoLGYpPT57dmFyIHY7bnVs'@;
put 'bD09PSh2PWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09dnx8di5jYWxsKGQpO2xldCBNPSEwO2guc3Vic2NyaWJlKEhpKGYsST0+e3ZhciBHO251bGw9PT0oRz1kLm5leHQpfHx2b2lkIDA9PT1HfHxHLmNhbGwoZCxJKSxmLm5leHQoSSl9LCgpPT57dmFyIEk7TT0hMSxudWxsPT09KEk9ZC5jb21w'@;
put 'bGV0ZSl8fHZvaWQgMD09PUl8fEkuY2FsbChkKSxmLmNvbXBsZXRlKCl9LEk9Pnt2YXIgRztNPSExLG51bGw9PT0oRz1kLmVycm9yKXx8dm9pZCAwPT09R3x8Ry5jYWxsKGQsSSksZi5lcnJvcihJKX0sKCk9Pnt2YXIgSSxHO00mJihudWxsPT09KEk9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09'@;
put 'PUl8fEkuY2FsbChkKSksbnVsbD09PShHPWQuZmluYWxpemUpfHx2b2lkIDA9PT1HfHxHLmNhbGwoZCl9KSl9KTpjbn1mdW5jdGlvbiBxOChjKXtyZXR1cm4gTmkoKGwsYSk9PntsZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKEhpKGEsdm9pZCAwLHZvaWQgMCx2PT57Zj1vMShjKHYs'@;
put 'cTgoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKX0pfWZ1bmN0aW9uIFhaKGMpe3JldHVybiBjPD0wPygpPT5FMjpOaSgobCxhKT0+e2xldCBkPVtdO2wuc3Vi'@;
put 'c2NyaWJlKEhpKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiAkTShjKXtyZXR1cm4gTmkoKGwsYSk9Pnt0cnl7bC5zdWJzY3Jp'@;
put 'YmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1mdW5jdGlvbiBIMChjKXtyZXR1cm4gTmkoKGwsYSk9PntvMShjKS5zdWJzY3JpYmUoSGkoYSwoKT0+YS5jb21wbGV0ZSgpLGRuKSksIWEuY2xvc2VkJiZsLnN1YnNjcmliZShhKX0pfWNvbnN0IEtzPSJwcmltYXJ5IixLTT1TeW1ib2woIlJvdXRl'@;
put 'VGl0bGUiKTtjbGFzcyBreGV7Y29uc3RydWN0b3IobCl7dGhpcy5wYXJhbXM9bHx8e319aGFzKGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsbCl9Z2V0KGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3Jl'@;
put 'dHVybiBBcnJheS5pc0FycmF5KGEpP2FbMF06YX1yZXR1cm4gbnVsbH1nZXRBbGwobCl7aWYodGhpcy5oYXMobCkpe2NvbnN0IGE9dGhpcy5wYXJhbXNbbF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19cmV0dXJuW119Z2V0IGtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5w'@;
put 'YXJhbXMpfX1mdW5jdGlvbiBKeShjKXtyZXR1cm4gbmV3IGt4ZShjKX1mdW5jdGlvbiBEeGUoYyxsLGEpe2NvbnN0IGQ9YS5wYXRoLnNwbGl0KCIvIik7aWYoZC5sZW5ndGg+Yy5sZW5ndGh8fCJmdWxsIj09PWEucGF0aE1hdGNoJiYobC5oYXNDaGlsZHJlbigpfHxkLmxlbmd0aDxjLmxlbmd0'@;
put 'aCkpcmV0dXJuIG51bGw7Y29uc3QgaD17fTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qgdj1kW2ZdLE09Y1tmXTtpZih2LnN0YXJ0c1dpdGgoIjoiKSloW3Yuc3Vic3RyaW5nKDEpXT1NO2Vsc2UgaWYodiE9PU0ucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6Yy5z'@;
put 'bGljZSgwLGQubGVuZ3RoKSxwb3NQYXJhbXM6aH19ZnVuY3Rpb24gcHAoYyxsKXtjb25zdCBhPWM/cVooYyk6dm9pZCAwLGQ9bD9xWihsKTp2b2lkIDA7aWYoIWF8fCFkfHxhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7bGV0IGg7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspaWYoaD1h'@;
put 'W2ZdLCFFbGUoY1toXSxsW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBxWihjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMoYyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19ZnVuY3Rpb24gRWxlKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJh'@;
put 'eShsKSl7aWYoYy5sZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtjb25zdCBhPVsuLi5jXS5zb3J0KCksZD1bLi4ubF0uc29ydCgpO3JldHVybiBhLmV2ZXJ5KChoLGYpPT5kW2ZdPT09aCl9cmV0dXJuIGM9PT1sfWZ1bmN0aW9uIFRsZShjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3Ro'@;
put 'LTFdOm51bGx9ZnVuY3Rpb24gcm0oYyl7cmV0dXJuIFdNKGMpP2M6eE0oYyk/VXUoUHJvbWlzZS5yZXNvbHZlKGMpKTpkcyhjKX1jb25zdCBSeGU9e2V4YWN0OmZ1bmN0aW9uIERsZShjLGwsYSl7aWYoIUo4KGMuc2VnbWVudHMsbC5zZWdtZW50cyl8fCFOUihjLnNlZ21lbnRzLGwuc2VnbWVu'@;
put 'dHMsYSl8fGMubnVtYmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhRGxlKGMuY2hpbGRyZW5bZF0sbC5jaGlsZHJlbltkXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0Okls'@;
put 'ZX0sQWxlPXtleGFjdDpmdW5jdGlvbiBMeGUoYyxsKXtyZXR1cm4gcHAoYyxsKX0sc3Vic2V0OmZ1bmN0aW9uIE94ZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2JqZWN0LmtleXMobCkuZXZlcnkoYT0+RWxlKGNbYV0sbFthXSkp'@;
put 'fSxpZ25vcmVkOigpPT4hMH07ZnVuY3Rpb24ga2xlKGMsbCxhKXtyZXR1cm4gUnhlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZBbGVbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5m'@;
put 'cmFnbWVudCE9PWwuZnJhZ21lbnQpfWZ1bmN0aW9uIElsZShjLGwsYSl7cmV0dXJuIFJsZShjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBSbGUoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1'@;
put 'cm4hKCFKOChoLGEpfHxsLmhhc0NoaWxkcmVuKCl8fCFOUihoLGEsZCkpfWlmKGMuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFKOChjLnNlZ21lbnRzLGEpfHwhTlIoYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25zdCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRy'@;
put 'ZW5baF18fCFJbGUoYy5jaGlsZHJlbltoXSxsLmNoaWxkcmVuW2hdLGQpKXJldHVybiExO3JldHVybiEwfXtjb25zdCBoPWEuc2xpY2UoMCxjLnNlZ21lbnRzLmxlbmd0aCksZj1hLnNsaWNlKGMuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShKOChjLnNlZ21lbnRzLGgpJiZOUihjLnNlZ21l'@;
put 'bnRzLGgsZCkmJmMuY2hpbGRyZW5bS3NdKSYmUmxlKGMuY2hpbGRyZW5bS3NdLGwsZixkKX19ZnVuY3Rpb24gTlIoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5BbGVbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNzIFF5e2NvbnN0cnVjdG9yKGw9bmV3IFlsKFtd'@;
put 'LHt9KSxhPXt9LGQ9bnVsbCl7dGhpcy5yb290PWwsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMuZnJhZ21lbnQ9ZH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89SnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygp'@;
put 'e3JldHVybiBIeGUuc2VyaWFsaXplKHRoaXMpfX1jbGFzcyBZbHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2VnbWVudHM9bCx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZD0+ZC5wYXJlbnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1'@;
put 'cm4gdGhpcy5udW1iZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIFZSKHRoaXMpfX1jbGFzcyBYTXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFy'@;
put 'YW1ldGVycz1hfWdldCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwPz89SnkodGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJNYXB9dG9TdHJpbmcoKXtyZXR1cm4gUGxlKHRoaXMpfX1mdW5jdGlvbiBKOChjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVu'@;
put 'Z3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBlYj0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyBK'@;
put 'Wixwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgSlp7cGFyc2UobCl7Y29uc3QgYT1uZXcgJHhlKGwpO3JldHVybiBuZXcgUXkoYS5wYXJzZVJvb3RTZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShsKXtjb25z'@;
put 'dCBhPWAvJHtxTShsLnJvb3QsITApfWAsZD1mdW5jdGlvbiBCeGUoYyl7Y29uc3QgbD1PYmplY3QuZW50cmllcyhjKS5tYXAoKFthLGRdKT0+QXJyYXkuaXNBcnJheShkKT9kLm1hcChoPT5gJHtCUihhKX09JHtCUihoKX1gKS5qb2luKCImIik6YCR7QlIoYSl9PSR7QlIoZCl9YCkuZmlsdGVy'@;
put 'KGE9PmEpO3JldHVybiBsLmxlbmd0aD9gPyR7bC5qb2luKCImIil9YDoiIn0obC5xdWVyeVBhcmFtcyksaD0ic3RyaW5nIj09dHlwZW9mIGwuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIE54ZShjKXtyZXR1cm4gZW5jb2RlVVJJKGMpfShsLmZyYWdtZW50KX1gOiIiO3JldHVybmAke2F9JHtkfSR7'@;
put 'aH1gfX1jb25zdCBIeGU9bmV3IEpaO2Z1bmN0aW9uIFZSKGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT5QbGUobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiBxTShjLGwpe2lmKCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIFZSKGMpO2lmKGwpe2NvbnN0IGE9Yy5jaGlsZHJlbltLc10/cU0oYy5j'@;
put 'aGlsZHJlbltLc10sITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT1LcyYmZC5wdXNoKGAke2h9OiR7cU0oZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIvLyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rp'@;
put 'b24gRnhlKGMsbCl7bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2Q9PT1LcyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkIT09S3MmJihhPWEuY29u'@;
put 'Y2F0KGwoaCxkKSkpfSksYX0oYywoZCxoKT0+aD09PUtzP1txTShjLmNoaWxkcmVuW0tzXSwhMSldOltgJHtofToke3FNKGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlbltLc10/YCR7VlIoYyl9LyR7YVswXX1gOmAk'@;
put 'e1ZSKGMpfS8oJHthLmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIExsZShjKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBC'@;
put 'UihjKXtyZXR1cm4gTGxlKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIFFaKGMpe3JldHVybiBMbGUoYykucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24galIoYyl7cmV0dXJuIGRlY29kZVVSSUNv'@;
put 'bXBvbmVudChjKX1mdW5jdGlvbiBPbGUoYyl7cmV0dXJuIGpSKGMucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIFBsZShjKXtyZXR1cm5gJHtRWihjLnBhdGgpfSR7ZnVuY3Rpb24gVnhlKGMpe3JldHVybiBPYmplY3QuZW50cmllcyhjKS5tYXAoKFtsLGFdKT0+YDske1FaKGwpfT0k'@;
put 'e1FaKGEpfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QganhlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIGVXKGMpe2NvbnN0IGw9Yy5tYXRjaChqeGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgenhlPS9eW15cLygpPzs9I10rLyxaeGU9L15bXj0/JiNdKy8sWXhlPS9eW14m'@;
put 'I10rLztjbGFzcyAkeGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVl'@;
put 'a1N0YXJ0c1dpdGgoIiMiKT9uZXcgWWwoW10se30pOm5ldyBZbChbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygpe2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1'@;
put 'bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3Ro'@;
put 'aXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dp'@;
put 'dGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0'@;
put 'c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW0tzXT1uZXcgWWwobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPWVXKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0'@;
put 'c1dpdGgoIjsiKSl0aHJvdyBuZXcgbnIoNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgWE0oalIobCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBh'@;
put 'cnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIFV4ZShjKXtjb25zdCBsPWMubWF0Y2goenhlKTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1'@;
put 'bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPWVXKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFtqUihhKV09alIoZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gV3hlKGMpe2NvbnN0IGw9Yy5tYXRjaChaeGUpO3JldHVybiBsP2xbMF06IiJ9'@;
put 'KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IHY9ZnVuY3Rpb24gR3hlKGMpe2NvbnN0IGw9Yy5tYXRjaChZeGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTt2'@;
put 'JiYoZD12LHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD1PbGUoYSksZj1PbGUoZCk7aWYobC5oYXNPd25Qcm9wZXJ0eShoKSl7bGV0IHY9bFtoXTtBcnJheS5pc0FycmF5KHYpfHwodj1bdl0sbFtoXT12KSx2LnB1c2goZil9ZWxzZSBsW2hdPWZ9cGFyc2VQYXJlbnMobCl7Y29uc3QgYT17fTtm'@;
put 'b3IodGhpcy5jYXB0dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7Y29uc3QgZD1lVyh0aGlzLnJlbWFpbmluZyksaD10aGlzLnJlbWFpbmluZ1tkLmxlbmd0aF07aWYoIi8iIT09aCYmIikiIT09aCYmIjsiIT09aCl0aHJvdyBu'@;
put 'ZXcgbnIoNDAxMCwhMSk7bGV0IGY7ZC5pbmRleE9mKCI6Iik+LTE/KGY9ZC5zbGljZSgwLGQuaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoZiksdGhpcy5jYXB0dXJlKCI6IikpOmwmJihmPUtzKTtjb25zdCB2PXRoaXMucGFyc2VDaGlsZHJlbigpO2FbZl09MT09PU9iamVjdC5rZXlzKHYp'@;
put 'Lmxlbmd0aD92W0tzXTpuZXcgWWwoW10sdiksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIGF9cGVla1N0YXJ0c1dpdGgobCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgobCl9Y29uc3VtZU9wdGlvbmFsKGwpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aChs'@;
put 'KSYmKHRoaXMucmVtYWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhsLmxlbmd0aCksITApfWNhcHR1cmUobCl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKGwpKXRocm93IG5ldyBucig0MDExLCExKX19ZnVuY3Rpb24gRmxlKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25l'@;
put 'dyBZbChbXSx7W0tzXTpjfSk6Y31mdW5jdGlvbiBIbGUoYyl7Y29uc3QgbD17fTtmb3IoY29uc3RbZCxoXW9mIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pKXtjb25zdCBmPUhsZShoKTtpZihkPT09S3MmJjA9PT1mLnNlZ21lbnRzLmxlbmd0aCYmZi5oYXNDaGlsZHJlbigpKWZvcihjb25z'@;
put 'dFt2LE1db2YgT2JqZWN0LmVudHJpZXMoZi5jaGlsZHJlbikpbFt2XT1NO2Vsc2UoZi5zZWdtZW50cy5sZW5ndGg+MHx8Zi5oYXNDaGlsZHJlbigpKSYmKGxbZF09Zil9cmV0dXJuIGZ1bmN0aW9uIEt4ZShjKXtpZigxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiZjLmNoaWxkcmVuW0tzXSl7Y29u'@;
put 'c3QgbD1jLmNoaWxkcmVuW0tzXTtyZXR1cm4gbmV3IFlsKGMuc2VnbWVudHMuY29uY2F0KGwuc2VnbWVudHMpLGwuY2hpbGRyZW4pfXJldHVybiBjfShuZXcgWWwoYy5zZWdtZW50cyxsKSl9ZnVuY3Rpb24gdGIoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBReX1mdW5jdGlvbiBObGUoYyl7bGV0'@;
put 'IGw7Y29uc3QgaD1GbGUoZnVuY3Rpb24gYShmKXtjb25zdCB2PXt9O2Zvcihjb25zdCBJIG9mIGYuY2hpbGRyZW4pe2NvbnN0IEc9YShJKTt2W0kub3V0bGV0XT1HfWNvbnN0IE09bmV3IFlsKGYudXJsLHYpO3JldHVybiBmPT09YyYmKGw9TSksTX0oYy5yb290KSk7cmV0dXJuIGw/P2h9ZnVu'@;
put 'Y3Rpb24gVmxlKGMsbCxhLGQpe2xldCBoPWM7Zm9yKDtoLnBhcmVudDspaD1oLnBhcmVudDtpZigwPT09bC5sZW5ndGgpcmV0dXJuIHRXKGgsaCxoLGEsZCk7Y29uc3QgZj1mdW5jdGlvbiBxeGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjWzBdJiYxPT09Yy5sZW5ndGgmJiIvIj09PWNbMF0p'@;
put 'cmV0dXJuIG5ldyBqbGUoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLHYpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IE09e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW0ks'@;
put 'R10pPT57TVtJXT0ic3RyaW5nIj09dHlwZW9mIEc/Ry5zcGxpdCgiLyIpOkd9KSxbLi4uaCx7b3V0bGV0czpNfV19aWYoZi5zZWdtZW50UGF0aClyZXR1cm5bLi4uaCxmLnNlZ21lbnRQYXRoXX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGY/Wy4uLmgsZl06MD09PXY/KGYuc3BsaXQoIi8iKS5m'@;
put 'b3JFYWNoKChNLEkpPT57MD09SSYmIi4iPT09TXx8KDA9PUkmJiIiPT09TT9hPSEwOiIuLiI9PT1NP2wrKzoiIiE9TSYmaC5wdXNoKE0pKX0pLGgpOlsuLi5oLGZdfSxbXSk7cmV0dXJuIG5ldyBqbGUoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiB0VyhoLGgsbmV3IFlsKFtdLHt9'@;
put 'KSxhLGQpO2NvbnN0IHY9ZnVuY3Rpb24gSnhlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBVUihsLCEwLDApO2lmKCFhKXJldHVybiBuZXcgVVIobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFVSKGEsITAsMCk7Y29uc3QgZD16UihjLmNvbW1hbmRz'@;
put 'WzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIFF4ZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFyZW50LCFkKXRocm93IG5ldyBucig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgVVIoZCwhMSxoLWYpfShhLGEuc2VnbWVudHMu'@;
put 'bGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxNPXYucHJvY2Vzc0NoaWxkcmVuP1FNKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk6emxlKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk7cmV0dXJuIHRXKGgsdi5zZWdtZW50R3JvdXAs'@;
put 'TSxhLGQpfWZ1bmN0aW9uIHpSKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmIWMub3V0bGV0cyYmIWMuc2VnbWVudFBhdGh9ZnVuY3Rpb24gSk0oYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiZjLm91dGxldHN9ZnVuY3Rpb24gdFcoYyxsLGEsZCxo'@;
put 'KXtsZXQgdixmPXt9O2QmJk9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtJLEddKT0+e2ZbSV09QXJyYXkuaXNBcnJheShHKT9HLm1hcChyZT0+YCR7cmV9YCk6YCR7R31gfSksdj1jPT09bD9hOkJsZShjLGwsYSk7Y29uc3QgTT1GbGUoSGxlKHYpKTtyZXR1cm4gbmV3IFF5KE0sZixoKX1m'@;
put 'dW5jdGlvbiBCbGUoYyxsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2RbaF09Zj09PWw/YTpCbGUoZixsLGEpfSksbmV3IFlsKGMuc2VnbWVudHMsZCl9Y2xhc3Mgamxle2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlz'@;
put 'LmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZ6UihkWzBdKSl0aHJvdyBuZXcgbnIoNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoSk0pO2lmKGgmJmghPT1UbGUoZCkpdGhyb3cgbmV3IG5yKDQwMDQsITEpfXRvUm9v'@;
put 'dCgpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyBVUntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zZWdtZW50R3JvdXA9bCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1hLHRoaXMuaW5kZXg9ZH19ZnVu'@;
put 'Y3Rpb24gemxlKGMsbCxhKXtpZihjPz89bmV3IFlsKFtdLHt9KSwwPT09Yy5zZWdtZW50cy5sZW5ndGgmJmMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gUU0oYyxsLGEpO2NvbnN0IGQ9ZnVuY3Rpb24gdEVlKGMsbCxhKXtsZXQgZD0wLGg9bDtjb25zdCBmPXttYXRjaDohMSxwYXRoSW5kZXg6MCxj'@;
put 'b21tYW5kSW5kZXg6MH07Zm9yKDtoPGMuc2VnbWVudHMubGVuZ3RoOyl7aWYoZD49YS5sZW5ndGgpcmV0dXJuIGY7Y29uc3Qgdj1jLnNlZ21lbnRzW2hdLE09YVtkXTtpZihKTShNKSlicmVhaztjb25zdCBJPWAke019YCxHPWQ8YS5sZW5ndGgtMT9hW2QrMV06bnVsbDtpZihoPjAmJnZvaWQg'@;
put 'MD09PUkpYnJlYWs7aWYoSSYmRyYmIm9iamVjdCI9PXR5cGVvZiBHJiZ2b2lkIDA9PT1HLm91dGxldHMpe2lmKCFabGUoSSxHLHYpKXJldHVybiBmO2QrPTJ9ZWxzZXtpZighWmxlKEkse30sdikpcmV0dXJuIGY7ZCsrfWgrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmgsY29tbWFuZElu'@;
put 'ZGV4OmR9fShjLGwsYSksaD1hLnNsaWNlKGQuY29tbWFuZEluZGV4KTtpZihkLm1hdGNoJiZkLnBhdGhJbmRleDxjLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1uZXcgWWwoYy5zZWdtZW50cy5zbGljZSgwLGQucGF0aEluZGV4KSx7fSk7cmV0dXJuIGYuY2hpbGRyZW5bS3NdPW5ldyBZbChj'@;
put 'LnNlZ21lbnRzLnNsaWNlKGQucGF0aEluZGV4KSxjLmNoaWxkcmVuKSxRTShmLDAsaCl9cmV0dXJuIGQubWF0Y2gmJjA9PT1oLmxlbmd0aD9uZXcgWWwoYy5zZWdtZW50cyx7fSk6ZC5tYXRjaCYmIWMuaGFzQ2hpbGRyZW4oKT9uVyhjLGwsYSk6ZC5tYXRjaD9RTShjLDAsaCk6blcoYyxsLGEp'@;
put 'fWZ1bmN0aW9uIFFNKGMsbCxhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBZbChjLnNlZ21lbnRzLHt9KTt7Y29uc3QgZD1mdW5jdGlvbiBlRWUoYyl7cmV0dXJuIEpNKGNbMF0pP2NbMF0ub3V0bGV0czp7W0tzXTpjfX0oYSksaD17fTtpZihPYmplY3Qua2V5cyhkKS5zb21lKGY9PmYh'@;
put 'PT1LcykmJmMuY2hpbGRyZW5bS3NdJiYxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiYwPT09Yy5jaGlsZHJlbltLc10uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBmPVFNKGMuY2hpbGRyZW5bS3NdLGwsYSk7cmV0dXJuIG5ldyBZbChjLnNlZ21lbnRzLGYuY2hpbGRyZW4pfXJldHVybiBPYmplY3Qu'@;
put 'ZW50cmllcyhkKS5mb3JFYWNoKChbZix2XSk9Pnsic3RyaW5nIj09dHlwZW9mIHYmJih2PVt2XSksbnVsbCE9PXYmJihoW2ZdPXpsZShjLmNoaWxkcmVuW2ZdLGwsdikpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2Ysdl0pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09'@;
put 'dil9KSxuZXcgWWwoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gblcoYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKEpNKGYpKXtjb25zdCBJPW5FZShmLm91dGxldHMpO3JldHVybiBuZXcgWWwoZCxJ'@;
put 'KX1pZigwPT09aCYmelIoYVswXSkpe2QucHVzaChuZXcgWE0oYy5zZWdtZW50c1tsXS5wYXRoLFVsZShhWzBdKSkpLGgrKztjb250aW51ZX1jb25zdCB2PUpNKGYpP2Yub3V0bGV0c1tLc106YCR7Zn1gLE09aDxhLmxlbmd0aC0xP2FbaCsxXTpudWxsO3YmJk0mJnpSKE0pPyhkLnB1c2gobmV3'@;
put 'IFhNKHYsVWxlKE0pKSksaCs9Mik6KGQucHVzaChuZXcgWE0odix7fSkpLGgrKyl9cmV0dXJuIG5ldyBZbChkLHt9KX1mdW5jdGlvbiBuRWUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT57InN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0p'@;
put 'LG51bGwhPT1kJiYobFthXT1uVyhuZXcgWWwoW10se30pLDAsZCkpfSksbH1mdW5jdGlvbiBVbGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBabGUoYyxsLGEpe3JldHVybiBjPT1hLnBhdGgm'@;
put 'JnBwKGwsYS5wYXJhbWV0ZXJzKX1jb25zdCBleD0iaW1wZXJhdGl2ZSI7dmFyIFJvPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmF2aWdhdGlvblN0YXJ0PTBdPSJOYXZpZ2F0aW9uU3RhcnQiLGNbYy5OYXZpZ2F0aW9uRW5kPTFdPSJOYXZpZ2F0aW9uRW5kIixjW2MuTmF2aWdhdGlvbkNhbmNl'@;
put 'bD0yXT0iTmF2aWdhdGlvbkNhbmNlbCIsY1tjLk5hdmlnYXRpb25FcnJvcj0zXT0iTmF2aWdhdGlvbkVycm9yIixjW2MuUm91dGVzUmVjb2duaXplZD00XT0iUm91dGVzUmVjb2duaXplZCIsY1tjLlJlc29sdmVTdGFydD01XT0iUmVzb2x2ZVN0YXJ0IixjW2MuUmVzb2x2ZUVuZD02XT0iUmVz'@;
put 'b2x2ZUVuZCIsY1tjLkd1YXJkc0NoZWNrU3RhcnQ9N109Ikd1YXJkc0NoZWNrU3RhcnQiLGNbYy5HdWFyZHNDaGVja0VuZD04XT0iR3VhcmRzQ2hlY2tFbmQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydD05XT0iUm91dGVDb25maWdMb2FkU3RhcnQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRFbmQ9'@;
put 'MTBdPSJSb3V0ZUNvbmZpZ0xvYWRFbmQiLGNbYy5DaGlsZEFjdGl2YXRpb25TdGFydD0xMV09IkNoaWxkQWN0aXZhdGlvblN0YXJ0IixjW2MuQ2hpbGRBY3RpdmF0aW9uRW5kPTEyXT0iQ2hpbGRBY3RpdmF0aW9uRW5kIixjW2MuQWN0aXZhdGlvblN0YXJ0PTEzXT0iQWN0aXZhdGlvblN0YXJ0'@;
put 'IixjW2MuQWN0aXZhdGlvbkVuZD0xNF09IkFjdGl2YXRpb25FbmQiLGNbYy5TY3JvbGw9MTVdPSJTY3JvbGwiLGNbYy5OYXZpZ2F0aW9uU2tpcHBlZD0xNl09Ik5hdmlnYXRpb25Ta2lwcGVkIixjfShSb3x8e30pO2NsYXNzIGdwe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMudXJs'@;
put 'PWF9fWNsYXNzIFpSIGV4dGVuZHMgZ3B7Y29uc3RydWN0b3IobCxhLGQ9ImltcGVyYXRpdmUiLGg9bnVsbCl7c3VwZXIobCxhKSx0aGlzLnR5cGU9Um8uTmF2aWdhdGlvblN0YXJ0LHRoaXMubmF2aWdhdGlvblRyaWdnZXI9ZCx0aGlzLnJlc3RvcmVkU3RhdGU9aH10b1N0cmluZygpe3JldHVy'@;
put 'bmBOYXZpZ2F0aW9uU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBtcCBleHRlbmRzIGdwe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnR5cGU9Um8uTmF2aWdhdGlvbkVuZH10b1N0cmlu'@;
put 'Zygpe3JldHVybmBOYXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScpYH19dmFyIG1oPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUmVkaXJlY3Q9MF09IlJlZGlyZWN0Iixj'@;
put 'W2MuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbj0xXT0iU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiIsY1tjLk5vRGF0YUZyb21SZXNvbHZlcj0yXT0iTm9EYXRhRnJvbVJlc29sdmVyIixjW2MuR3VhcmRSZWplY3RlZD0zXT0iR3VhcmRSZWplY3RlZCIsY30obWh8fHt9KSxXUj1mdW5jdGlv'@;
put 'bihjKXtyZXR1cm4gY1tjLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbj0wXT0iSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uIixjW2MuSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneT0xXT0iSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSIsY30oV1J8fHt9KTtjbGFzcyBuYiBleHRlbmRz'@;
put 'IGdwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9Um8uTmF2aWdhdGlvbkNhbmNlbH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19'@;
put 'Y2xhc3MgcmIgZXh0ZW5kcyBncHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPVJvLk5hdmlnYXRpb25Ta2lwcGVkfX1jbGFzcyBZUiBleHRlbmRzIGdwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhp'@;
put 'cy5lcnJvcj1kLHRoaXMudGFyZ2V0PWgsdGhpcy50eXBlPVJvLk5hdmlnYXRpb25FcnJvcn10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRXJyb3IoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgZXJyb3I6ICR7dGhpcy5lcnJvcn0pYH19Y2xhc3MgV2xlIGV4dGVuZHMg'@;
put 'Z3B7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Sby5Sb3V0ZXNSZWNvZ25pemVkfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlc1JlY29nbml6ZWQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhp'@;
put 'cy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgckVlIGV4dGVuZHMgZ3B7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5z'@;
put 'dGF0ZT1oLHRoaXMudHlwZT1Sby5HdWFyZHNDaGVja1N0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7'@;
put 'dGhpcy5zdGF0ZX0pYH19Y2xhc3MgaUVlIGV4dGVuZHMgZ3B7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy5zaG91bGRBY3RpdmF0ZT1mLHRoaXMudHlwZT1Sby5HdWFyZHNDaGVja0VuZH10b1N0cmlu'@;
put 'Zygpe3JldHVybmBHdWFyZHNDaGVja0VuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3Rp'@;
put 'dmF0ZX0pYH19Y2xhc3MgYUVlIGV4dGVuZHMgZ3B7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Sby5SZXNvbHZlU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZVN0YXJ0KGlkOiAke3Ro'@;
put 'aXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIHNFZSBleHRlbmRzIGdwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRl'@;
put 'clJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9Um8uUmVzb2x2ZUVuZH10b1N0cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0'@;
put 'YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIG9FZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnJvdXRlPWwsdGhpcy50eXBlPVJvLlJvdXRlQ29uZmlnTG9hZFN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFz'@;
put 'cyBsRWV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT1Sby5Sb3V0ZUNvbmZpZ0xvYWRFbmR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBjRWV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFw'@;
put 'c2hvdD1sLHRoaXMudHlwZT1Sby5DaGlsZEFjdGl2YXRpb25TdGFydH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgdUVl'@;
put 'e2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9Um8uQ2hpbGRBY3RpdmF0aW9uRW5kfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBh'@;
put 'dGh8fCIifScpYH19Y2xhc3MgZEVle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9Um8uQWN0aXZhdGlvblN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90'@;
put 'LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgaEVle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9Um8uQWN0aXZhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRo'@;
put 'aXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBZbGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9Um8uU2Nyb2xsfXRvU3RyaW5nKCl7cmV0dXJuYFNjcm9sbChhbmNo'@;
put 'b3I6ICcke3RoaXMuYW5jaG9yfScsIHBvc2l0aW9uOiAnJHt0aGlzLnBvc2l0aW9uP2Ake3RoaXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YDpudWxsfScpYH19Y2xhc3Mgcld7fWNsYXNzIGlXe2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWx9fWNsYXNzIGZFZXtjb25zdHJ1'@;
put 'Y3Rvcigpe3RoaXMub3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyB0eCx0aGlzLmF0dGFjaFJlZj1udWxsfX1sZXQgdHg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1vbkNoaWxk'@;
put 'T3V0bGV0Q3JlYXRlZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoYSk7aC5vdXRsZXQ9ZCx0aGlzLmNvbnRleHRzLnNldChhLGgpfW9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoYSl7Y29uc3QgZD10aGlzLmdldENvbnRleHQoYSk7ZCYmKGQub3V0bGV0PW51bGwsZC5hdHRh'@;
put 'Y2hSZWY9bnVsbCl9b25PdXRsZXREZWFjdGl2YXRlZCgpe2NvbnN0IGE9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLGF9b25PdXRsZXRSZUF0dGFjaGVkKGEpe3RoaXMuY29udGV4dHM9YX1nZXRPckNyZWF0ZUNvbnRleHQoYSl7bGV0IGQ9dGhpcy5nZXRDb250'@;
put 'ZXh0KGEpO3JldHVybiBkfHwoZD1uZXcgZkVlLHRoaXMuY29udGV4dHMuc2V0KGEsZCkpLGR9Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8fG51bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgR2xle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3Jvb3Q9bH1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfXBhcmVudChsKXtjb25z'@;
put 'dCBhPXRoaXMucGF0aEZyb21Sb290KGwpO3JldHVybiBhLmxlbmd0aD4xP2FbYS5sZW5ndGgtMl06bnVsbH1jaGlsZHJlbihsKXtjb25zdCBhPWFXKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGE/YS5jaGlsZHJlbi5tYXAoZD0+ZC52YWx1ZSk6W119Zmlyc3RDaGlsZChsKXtjb25zdCBhPWFXKGws'@;
put 'dGhpcy5fcm9vdCk7cmV0dXJuIGEmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXS52YWx1ZTpudWxsfXNpYmxpbmdzKGwpe2NvbnN0IGE9c1cobCx0aGlzLl9yb290KTtyZXR1cm4gYS5sZW5ndGg8Mj9bXTphW2EubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChoPT5oLnZhbHVlKS5m'@;
put 'aWx0ZXIoaD0+aCE9PWwpfXBhdGhGcm9tUm9vdChsKXtyZXR1cm4gc1cobCx0aGlzLl9yb290KS5tYXAoYT0+YS52YWx1ZSl9fWZ1bmN0aW9uIGFXKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuIGw7Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD1hVyhjLGEpO2lmKGQpcmV0'@;
put 'dXJuIGR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gc1coYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm5bbF07Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD1zVyhjLGEpO2lmKGQubGVuZ3RoKXJldHVybiBkLnVuc2hpZnQobCksZH1yZXR1cm5bXX1jbGFzcyBxZntjb25zdHJ1Y3Rv'@;
put 'cihsLGEpe3RoaXMudmFsdWU9bCx0aGlzLmNoaWxkcmVuPWF9dG9TdHJpbmcoKXtyZXR1cm5gVHJlZU5vZGUoJHt0aGlzLnZhbHVlfSlgfX1mdW5jdGlvbiBpYihjKXtjb25zdCBsPXt9O3JldHVybiBjJiZjLmNoaWxkcmVuLmZvckVhY2goYT0+bFthLnZhbHVlLm91dGxldF09YSksbH1jbGFz'@;
put 'cyAkbGUgZXh0ZW5kcyBHbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsKSx0aGlzLnNuYXBzaG90PWEsY1codGhpcyxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9fWZ1bmN0aW9uIEtsZShjKXtjb25zdCBsPWZ1bmN0aW9uIHBFZShjKXtjb25zdCBmPW5l'@;
put 'dyBsVyhbXSx7fSx7fSwiIix7fSxLcyxjLG51bGwse30pO3JldHVybiBuZXcgWGxlKCIiLG5ldyBxZihmLFtdKSl9KGMpLGE9bmV3IEpyKFtuZXcgWE0oIiIse30pXSksZD1uZXcgSnIoe30pLGg9bmV3IEpyKHt9KSxmPW5ldyBKcih7fSksdj1uZXcgSnIoIiIpLE09bmV3IHl1KGEsZCxmLHYs'@;
put 'aCxLcyxjLGwucm9vdCk7cmV0dXJuIE0uc25hcHNob3Q9bC5yb290LG5ldyAkbGUobmV3IHFmKE0sW10pLGwpfWNsYXNzIHl1e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sSSl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9'@;
put 'ZCx0aGlzLmZyYWdtZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5fZnV0dXJlU25hcHNob3Q9SSx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoUHIoRz0+R1tLTV0pKT8/ZHModm9pZCAwKSx0aGlzLnVy'@;
put 'bD1sLHRoaXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zn1nZXQgcm91dGVDb25maWcoKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1n'@;
put 'ZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1n'@;
put 'ZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz10aGlzLnBhcmFtcy5waXBlKFByKGw9Pkp5KGwpKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAo'@;
put 'KXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PXRoaXMucXVlcnlQYXJhbXMucGlwZShQcihsPT5KeShsKSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6YEZ1dHVyZSgke3RoaXMuX2Z1dHVy'@;
put 'ZVNuYXBzaG90fSlgfX1mdW5jdGlvbiBvVyhjLGwsYT0iZW1wdHlPbmx5Iil7bGV0IGQ7Y29uc3R7cm91dGVDb25maWc6aH09YztyZXR1cm4gZD1udWxsPT09bHx8ImFsd2F5cyIhPT1hJiYiIiE9PWg/LnBhdGgmJihsLmNvbXBvbmVudHx8bC5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCk/'@;
put 'e3BhcmFtczp7Li4uYy5wYXJhbXN9LGRhdGE6ey4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YT8/e319fTp7cGFyYW1zOnsuLi5sLnBhcmFtcywuLi5jLnBhcmFtc30sZGF0YTp7Li4ubC5kYXRhLC4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4u'@;
put 'LmwuZGF0YSwuLi5oPy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YX19LGgmJkpsZShoKSYmKGQucmVzb2x2ZVtLTV09aC50aXRsZSksZH1jbGFzcyBsV3tnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bS01dfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sSSxHKXt0aGlzLnVybD1sLHRo'@;
put 'aXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5yb3V0ZUNvbmZpZz1JLHRoaXMuX3Jlc29sdmU9R31nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290'@;
put 'fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMp'@;
put 'fWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PUp5KHRoaXMucGFyYW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlz'@;
put 'Ll9xdWVyeVBhcmFtTWFwPz89SnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKGQ9PmQudG9TdHJpbmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJv'@;
put 'dXRlQ29uZmlnLnBhdGg6IiJ9JylgfX1jbGFzcyBYbGUgZXh0ZW5kcyBHbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLGNXKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gcWxlKHRoaXMuX3Jvb3QpfX1mdW5jdGlvbiBjVyhjLGwpe2wudmFsdWUuX3JvdXRlclN0YXRl'@;
put 'PWMsbC5jaGlsZHJlbi5mb3JFYWNoKGE9PmNXKGMsYSkpfWZ1bmN0aW9uIHFsZShjKXtjb25zdCBsPWMuY2hpbGRyZW4ubGVuZ3RoPjA/YCB7ICR7Yy5jaGlsZHJlbi5tYXAocWxlKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiB1VyhjKXtpZihj'@;
put 'LnNuYXBzaG90KXtjb25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEscHAobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFyYW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5m'@;
put 'cmFnbWVudFN1YmplY3QubmV4dChhLmZyYWdtZW50KSxwcChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiBJeGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlm'@;
put 'KCFwcChjW2FdLGxbYV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxwcChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBzaG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1Ympl'@;
put 'Y3QubmV4dChjLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBkVyhjLGwpe2NvbnN0IGE9cHAoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBQeGUoYyxsKXtyZXR1cm4gSjgoYyxsKSYmYy5ldmVyeSgoYSxkKT0+cHAoYS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShj'@;
put 'LnVybCxsLnVybCk7cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxkVyhjLnBhcmVudCxsLnBhcmVudCkpfWZ1bmN0aW9uIEpsZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMudGl0bGV8fG51bGw9PT1jLnRpdGxlfWxldCBuZz0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1Lcyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBLcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEtyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBLcix0aGlzLmRldGFj'@;
put 'aEV2ZW50cz1uZXcgS3IsdGhpcy5wYXJlbnRDb250ZXh0cz1oaSh0eCksdGhpcy5sb2NhdGlvbj1oaShUcyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1oaSh4byksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWhpKHFsKSx0aGlzLmlucHV0QmluZGVyPWhpKEdSLHtvcHRpb25hbDohMH0pLHRoaXMu'@;
put 'c3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1'@;
put 'cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2Vk'@;
put 'SW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1'@;
put 'cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVk'@;
put 'KHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRlZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEu'@;
put 'cm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgbnIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0'@;
put 'ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgbnIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1k'@;
put 'ZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IG5yKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRz'@;
put 'LmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxkKXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyks'@;
put 'dGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3RhbmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlz'@;
put 'LmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgbnIoNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sdj1hLnNuYXBzaG90LmNvbXBvbmVudCxNPXRoaXMucGFy'@;
put 'ZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4sST1uZXcgaFcoYSxNLGguaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPWguY3JlYXRlQ29tcG9uZW50KHYse2luZGV4OmgubGVuZ3RoLGluamVjdG9yOkksZW52aXJvbm1lbnRJbmplY3RvcjpkPz90aGlz'@;
put 'LmVudmlyb25tZW50SW5qZWN0b3J9KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5j'@;
put 'ZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGlucHV0czp7bmFtZToibmFtZSJ9LG91dHB1dHM6e2FjdGl2YXRlRXZlbnRzOiJh'@;
put 'Y3RpdmF0ZSIsZGVhY3RpdmF0ZUV2ZW50czoiZGVhY3RpdmF0ZSIsYXR0YWNoRXZlbnRzOiJhdHRhY2giLGRldGFjaEV2ZW50czoiZGV0YWNoIn0sZXhwb3J0QXM6WyJvdXRsZXQiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltibF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIGhXe19fbmdPdXRs'@;
put 'ZXRJbmplY3RvcihsKXtyZXR1cm4gbmV3IGhXKHRoaXMucm91dGUsdGhpcy5jaGlsZENvbnRleHRzLGwpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PXl1P3RoaXMucm91dGU6bD09'@;
put 'PXR4P3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgR1I9bmV3IFN0KCIiKTtsZXQgUWxlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zPW5ldyBNYXB9YmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRD'@;
put 'b21wb25lbnQoYSl7dGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSksdGhpcy5zdWJzY3JpYmVUb1JvdXRlRGF0YShhKX11bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5nZXQoYSk/LnVuc3Vic2NyaWJlKCksdGhpcy5vdXRsZXRE'@;
put 'YXRhU3Vic2NyaXB0aW9ucy5kZWxldGUoYSl9c3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl7Y29uc3R7YWN0aXZhdGVkUm91dGU6ZH09YSxoPVg4KFtkLnF1ZXJ5UGFyYW1zLGQucGFyYW1zLGQuZGF0YV0pLnBpcGUoajEoKFtmLHYsTV0sSSk9PihNPXsuLi5mLC4uLnYsLi4uTX0sMD09PUk/ZHMo'@;
put 'TSk6UHJvbWlzZS5yZXNvbHZlKE0pKSkpLnN1YnNjcmliZShmPT57aWYoIWEuaXNBY3RpdmF0ZWR8fCFhLmFjdGl2YXRlZENvbXBvbmVudFJlZnx8YS5hY3RpdmF0ZWRSb3V0ZSE9PWR8fG51bGw9PT1kLmNvbXBvbmVudClyZXR1cm4gdm9pZCB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0'@;
put 'YShhKTtjb25zdCB2PWZ1bmN0aW9uIFRfZShjKXtjb25zdCBsPUJzKGMpO2lmKCFsKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IGs4KGwpO3JldHVybntnZXQgc2VsZWN0b3IoKXtyZXR1cm4gYS5zZWxlY3Rvcn0sZ2V0IHR5cGUoKXtyZXR1cm4gYS5jb21wb25lbnRUeXBlfSxnZXQgaW5wdXRz'@;
put 'KCl7cmV0dXJuIGEuaW5wdXRzfSxnZXQgb3V0cHV0cygpe3JldHVybiBhLm91dHB1dHN9LGdldCBuZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gYS5uZ0NvbnRlbnRTZWxlY3RvcnN9LGdldCBpc1N0YW5kYWxvbmUoKXtyZXR1cm4gbC5zdGFuZGFsb25lfSxnZXQgaXNTaWduYWwoKXtyZXR1'@;
put 'cm4gbC5zaWduYWxzfX19KGQuY29tcG9uZW50KTtpZih2KWZvcihjb25zdHt0ZW1wbGF0ZU5hbWU6TX1vZiB2LmlucHV0cylhLmFjdGl2YXRlZENvbXBvbmVudFJlZi5zZXRJbnB1dChNLGZbTV0pO2Vsc2UgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl9KTt0aGlzLm91dGxldERh'@;
put 'dGFTdWJzY3JpcHRpb25zLnNldChhLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG54KGMsbCxh'@;
put 'KXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBtRWUoYyxsLGEpe3JldHVybiBsLmNoaWxkcmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2Yg'@;
put 'YS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gbngoYyxkLGgpO3JldHVybiBueChjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IHFmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNoKGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmll'@;
put 'dmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Zi5yb3V0ZTtyZXR1cm4gdi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSx2LmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKE09Pm54KGMsTSkpLHZ9fWNvbnN0IGQ9ZnVuY3Rpb24gdkVlKGMpe3JldHVybiBuZXcgeXUobmV3IEpy'@;
put 'KGMudXJsKSxuZXcgSnIoYy5wYXJhbXMpLG5ldyBKcihjLnF1ZXJ5UGFyYW1zKSxuZXcgSnIoYy5mcmFnbWVudCksbmV3IEpyKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+bngoYyxmKSk7cmV0dXJuIG5ldyBxZihkLGgpfX1j'@;
put 'b25zdCBlY2U9Im5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiB0Y2UoYyxsKXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpkfT10YihsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9bmNl'@;
put 'KCExLG1oLlJlZGlyZWN0KTtyZXR1cm4gaC51cmw9YSxoLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9ZCxofWZ1bmN0aW9uIG5jZShjLGwpe2NvbnN0IGE9bmV3IEVycm9yKGBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6ICR7Y3x8IiJ9YCk7cmV0dXJuIGFbZWNlXT0hMCxhLmNhbmNlbGxh'@;
put 'dGlvbkNvZGU9bCxhfWZ1bmN0aW9uIHJjZShjKXtyZXR1cm4hIWMmJmNbZWNlXX1sZXQgaWNlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpb'@;
put 'WyJuZy1jb21wb25lbnQiXV0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbUUldLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZXdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbbmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVu'@;
put 'Y3Rpb24gZlcoYyl7Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChmVyksYT1sP3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PUtzJiYo'@;
put 'YS5jb21wb25lbnQ9aWNlKSxhfWZ1bmN0aW9uIHZwKGMpe3JldHVybiBjLm91dGxldHx8S3N9ZnVuY3Rpb24gcngoYyl7aWYoIWMpcmV0dXJuIG51bGw7aWYoYy5yb3V0ZUNvbmZpZz8uX2luamVjdG9yKXJldHVybiBjLnJvdXRlQ29uZmlnLl9pbmplY3Rvcjtmb3IobGV0IGw9Yy5wYXJlbnQ7'@;
put 'bDtsPWwucGFyZW50KXtjb25zdCBhPWwucm91dGVDb25maWc7aWYoYT8uX2xvYWRlZEluamVjdG9yKXJldHVybiBhLl9sb2FkZWRJbmplY3RvcjtpZihhPy5faW5qZWN0b3IpcmV0dXJuIGEuX2luamVjdG9yfXJldHVybiBudWxsfWNsYXNzIHhFZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3Ro'@;
put 'aXMucm91dGVSZXVzZVN0cmF0ZWd5PWwsdGhpcy5mdXR1cmVTdGF0ZT1hLHRoaXMuY3VyclN0YXRlPWQsdGhpcy5mb3J3YXJkRXZlbnQ9aCx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQ9Zn1hY3RpdmF0ZShsKXtjb25zdCBhPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3QsZD10aGlzLmN1cnJTdGF0'@;
put 'ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGEsZCxsKSx1Vyh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCl9ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWliKGEpO2wu'@;
put 'Y2hpbGRyZW4uZm9yRWFjaChmPT57Y29uc3Qgdj1mLnZhbHVlLm91dGxldDt0aGlzLmRlYWN0aXZhdGVSb3V0ZXMoZixoW3ZdLGQpLGRlbGV0ZSBoW3ZdfSksT2JqZWN0LnZhbHVlcyhoKS5mb3JFYWNoKGY9Pnt0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGYsZCl9KX1kZWFj'@;
put 'dGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldENvbnRleHQoaC5vdXRsZXQpO3YmJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMu'@;
put 'ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKTtlbHNlIGYmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oYSxkKX1kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihsLGEpe2wudmFsdWUuY29tcG9uZW50JiZ0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRh'@;
put 'Y2gobC52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShsLGEpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGwsYSl9ZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1k'@;
put 'JiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1pYihsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtpZihkJiZkLm91dGxldCl7Y29uc3Qgdj1kLm91dGxldC5kZXRhY2goKSxNPWQuY2hpbGRy'@;
put 'ZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGwudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjp2LHJvdXRlOmwsY29udGV4dHM6TX0pfX1kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZh'@;
put 'bHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1pYihsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCks'@;
put 'ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWliKGEpO2wuY2hpbGRyZW4uZm9yRWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRs'@;
put 'ZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBoRWUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyB1RWUobC52YWx1ZS5zbmFwc2hvdCkpfWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFs'@;
put 'dWU6bnVsbDtpZih1VyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZiho'@;
put 'LmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBNPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91'@;
put 'dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksdi5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoTS5jb250ZXh0cyksdi5hdHRhY2hSZWY9TS5jb21wb25lbnRSZWYsdi5yb3V0ZT1NLnJvdXRlLnZhbHVlLHYub3V0bGV0JiZ2Lm91dGxldC5hdHRhY2goTS5jb21wb25l'@;
put 'bnRSZWYsTS5yb3V0ZS52YWx1ZSksdVcoTS5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX1lbHNle2NvbnN0IE09cngoaC5zbmFwc2hvdCk7di5hdHRhY2hSZWY9bnVsbCx2LnJvdXRlPWgsdi5pbmplY3Rvcj1NLHYub3V0bGV0JiZ2Lm91'@;
put 'dGxldC5hY3RpdmF0ZVdpdGgoaCx2LmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNsYXNzIGFjZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhdGg9bCx0aGlzLnJvdXRl'@;
put 'PXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyAkUntjb25zdHJ1Y3RvcihsLGEpe3RoaXMuY29tcG9uZW50PWwsdGhpcy5yb3V0ZT1hfX1mdW5jdGlvbiBFRWUoYyxsLGEpe2NvbnN0IGQ9Yy5fcm9vdDtyZXR1cm4gaXgoZCxsP2wuX3Jvb3Q6bnVsbCxhLFtkLnZhbHVlXSl9'@;
put 'ZnVuY3Rpb24gYWIoYyxsKXtjb25zdCBhPVN5bWJvbCgpLGQ9bC5nZXQoYyxhKTtyZXR1cm4gZD09PWE/ImZ1bmN0aW9uIiE9dHlwZW9mIGN8fGZ1bmN0aW9uIFFhKGMpe3JldHVybiBudWxsIT09RnMoYyl9KGMpP2wuZ2V0KGMpOmM6ZH1mdW5jdGlvbiBpeChjLGwsYSxkLGg9e2NhbkRlYWN0'@;
put 'aXZhdGVDaGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWliKGwpO3JldHVybiBjLmNoaWxkcmVuLmZvckVhY2godj0+eyhmdW5jdGlvbiBBRWUoYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1jLnZh'@;
put 'bHVlLHY9bD9sLnZhbHVlOm51bGwsTT1hP2EuZ2V0Q29udGV4dChjLnZhbHVlLm91dGxldCk6bnVsbDtpZih2JiZmLnJvdXRlQ29uZmlnPT09di5yb3V0ZUNvbmZpZyl7Y29uc3QgST1mdW5jdGlvbiBrRWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXJldHVybiBhKGMsbCk7c3dp'@;
put 'dGNoKGEpe2Nhc2UicGF0aFBhcmFtc0NoYW5nZSI6cmV0dXJuIUo4KGMudXJsLGwudXJsKTtjYXNlInBhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hSjgoYy51cmwsbC51cmwpfHwhcHAoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtjYXNlImFsd2F5cyI6cmV0dXJu'@;
put 'ITA7Y2FzZSJwYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hZFcoYyxsKXx8IXBwKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7ZGVmYXVsdDpyZXR1cm4hZFcoYyxsKX19KHYsZixmLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7ST9oLmNhbkFjdGl2YXRl'@;
put 'Q2hlY2tzLnB1c2gobmV3IGFjZShkKSk6KGYuZGF0YT12LmRhdGEsZi5fcmVzb2x2ZWREYXRhPXYuX3Jlc29sdmVkRGF0YSksaXgoYyxsLGYuY29tcG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKSxJJiZNJiZNLm91dGxldCYmTS5vdXRsZXQuaXNBY3RpdmF0ZWQmJmguY2FuRGVhY3Rp'@;
put 'dmF0ZUNoZWNrcy5wdXNoKG5ldyAkUihNLm91dGxldC5jb21wb25lbnQsdikpfWVsc2UgdiYmYXgobCxNLGgpLGguY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgYWNlKGQpKSxpeChjLG51bGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpfSkodixmW3YudmFsdWUub3V0'@;
put 'bGV0XSxhLGQuY29uY2F0KFt2LnZhbHVlXSksaCksZGVsZXRlIGZbdi52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW3YsTV0pPT5heChNLGEuZ2V0Q29udGV4dCh2KSxoKSksaH1mdW5jdGlvbiBheChjLGwsYSl7Y29uc3QgZD1pYihjKSxoPWMudmFsdWU7T2Jq'@;
put 'ZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2Ysdl0pPT57YXgodixoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgJFIoaC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2'@;
put 'YXRlZD9sLm91dGxldC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gc3goYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gc2NlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRlJ8fCJFbXB0eUVycm9yIj09PWM/Lm5hbWV9Y29uc3QgS1I9U3ltYm9sKCJJTklUSUFMX1ZB'@;
put 'TFVFIik7ZnVuY3Rpb24gc2IoKXtyZXR1cm4gajEoYz0+WDgoYy5tYXAobD0+bC5waXBlKGdoKDEpLFQyKEtSKSkpKS5waXBlKFByKGw9Pntmb3IoY29uc3QgYSBvZiBsKWlmKCEwIT09YSl7aWYoYT09PUtSKXJldHVybiBLUjtpZighMT09PWF8fGEgaW5zdGFuY2VvZiBReSlyZXR1cm4gYX1y'@;
put 'ZXR1cm4hMH0pLFdsKGw9PmwhPT1LUiksZ2goMSkpKX1mdW5jdGlvbiBvY2UoYyl7cmV0dXJuIGZ1bmN0aW9uIGZuKC4uLmMpe3JldHVybiBEaShjKX0oWnUobD0+e2lmKHRiKGwpKXRocm93IHRjZSgwLGwpfSksUHIobD0+ITA9PT1sKSl9Y2xhc3MgcFd7Y29uc3RydWN0b3IobCl7dGhpcy5z'@;
put 'ZWdtZW50R3JvdXA9bHx8bnVsbH19Y2xhc3MgZ1cgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMudXJsVHJlZT1sfX1mdW5jdGlvbiBvYihjKXtyZXR1cm4gR00obmV3IHBXKGMpKX1jbGFzcyAkRWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnVybFNlcmlhbGl6ZXI9'@;
put 'bCx0aGlzLnVybFRyZWU9YX1saW5lcmFsaXplU2VnbWVudHMobCxhKXtsZXQgZD1bXSxoPWEucm9vdDtmb3IoOzspe2lmKGQ9ZC5jb25jYXQoaC5zZWdtZW50cyksMD09PWgubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gZHMoZCk7aWYoaC5udW1iZXJPZkNoaWxkcmVuPjF8fCFoLmNoaWxkcmVu'@;
put 'W0tzXSlyZXR1cm4gR00obmV3IG5yKDRlMywhMSkpO2g9aC5jaGlsZHJlbltLc119fWFwcGx5UmVkaXJlY3RDb21tYW5kcyhsLGEsZCl7Y29uc3QgaD10aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGwsZCk7aWYoYS5zdGFydHNX'@;
put 'aXRoKCIvIikpdGhyb3cgbmV3IGdXKGgpO3JldHVybiBofWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1cm4gbmV3IFF5KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFy'@;
put 'YW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9PntpZigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25z'@;
put 'dCBNPWYuc3Vic3RyaW5nKDEpO2RbaF09YVtNXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTtsZXQgdj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9y'@;
put 'RWFjaCgoW00sSV0pPT57dltNXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLEksZCxoKX0pLG5ldyBZbChmLHYpfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRzV2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRP'@;
put 'clJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgbnIoNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgp'@;
put 'cmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBtVz17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIEtFZShjLGwsYSxkLGgpe2Nv'@;
put 'bnN0IGY9dlcoYyxsLGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gYkVlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1HNChjLnByb3ZpZGVycyxsLGBSb3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0'@;
put 'aW9uIFdFZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9kcyhoLm1hcCh2PT57Y29uc3QgTT1hYih2LGMpO3JldHVybiBybShmdW5jdGlvbiBQRWUoYyl7cmV0dXJuIGMmJnN4KGMuY2FuTWF0Y2gpfShNKT9NLmNhbk1hdGNoKGwsYSk6SzAoYywo'@;
put 'KT0+TShsLGEpKSl9KSkucGlwZShzYigpLG9jZSgpKTpkcyghMCl9KGQsbCxhKS5waXBlKFByKHY9PiEwPT09dj9mOnsuLi5tV30pKSk6ZHMoZil9ZnVuY3Rpb24gdlcoYyxsLGEpe2lmKCIqKiI9PT1sLnBhdGgpcmV0dXJuIGZ1bmN0aW9uIFhFZShjKXtyZXR1cm57bWF0Y2hlZDohMCxwYXJh'@;
put 'bWV0ZXJzOmMubGVuZ3RoPjA/VGxlKGMpLnBhcmFtZXRlcnM6e30sY29uc3VtZWRTZWdtZW50czpjLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX0oYSk7aWYoIiI9PT1sLnBhdGgpcmV0dXJuImZ1bGwiPT09bC5wYXRoTWF0Y2gmJihjLmhhc0NoaWxk'@;
put 'cmVuKCl8fGEubGVuZ3RoPjApP3suLi5tV306e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czphLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2NvbnN0IGg9KGwubWF0Y2hlcnx8RHhlKShhLGMsbCk7aWYoIWgpcmV0dXJu'@;
put 'ey4uLm1XfTtjb25zdCBmPXt9O09iamVjdC5lbnRyaWVzKGgucG9zUGFyYW1zPz97fSkuZm9yRWFjaCgoW00sSV0pPT57ZltNXT1JLnBhdGh9KTtjb25zdCB2PWguY29uc3VtZWQubGVuZ3RoPjA/ey4uLmYsLi4uaC5jb25zdW1lZFtoLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzfTpm'@;
put 'O3JldHVybnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aC5jb25zdW1lZCxyZW1haW5pbmdTZWdtZW50czphLnNsaWNlKGguY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOnYscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aC5wb3NQYXJhbXM/P3t9fX1mdW5jdGlvbiBsY2UoYyxsLGEs'@;
put 'ZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIFFFZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5YUihjLGwsZCkmJnZwKGQpIT09S3MpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgWWwobCxKRWUoZCxuZXcgWWwoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09'@;
put 'YS5sZW5ndGgmJmZ1bmN0aW9uIGVUZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5YUihjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgWWwoYy5zZWdtZW50cyxxRWUoYyxhLGQsYy5jaGlsZHJlbikpLHNsaWNlZFNlZ21lbnRzOmF9OntzZWdtZW50R3JvdXA6bmV3IFlsKGMuc2Vn'@;
put 'bWVudHMsYy5jaGlsZHJlbiksc2xpY2VkU2VnbWVudHM6YX19ZnVuY3Rpb24gcUVlKGMsbCxhLGQpe2NvbnN0IGg9e307Zm9yKGNvbnN0IGYgb2YgYSlpZihYUihjLGwsZikmJiFkW3ZwKGYpXSl7Y29uc3Qgdj1uZXcgWWwoW10se30pO2hbdnAoZildPXZ9cmV0dXJuey4uLmQsLi4uaH19ZnVu'@;
put 'Y3Rpb24gSkVlKGMsbCl7Y29uc3QgYT17fTthW0tzXT1sO2Zvcihjb25zdCBkIG9mIGMpaWYoIiI9PT1kLnBhdGgmJnZwKGQpIT09S3Mpe2NvbnN0IGg9bmV3IFlsKFtdLHt9KTthW3ZwKGQpXT1ofXJldHVybiBhfWZ1bmN0aW9uIFhSKGMsbCxhKXtyZXR1cm4oIShjLmhhc0NoaWxkcmVuKCl8'@;
put 'fGwubGVuZ3RoPjApfHwiZnVsbCIhPT1hLnBhdGhNYXRjaCkmJiIiPT09YS5wYXRofWNsYXNzIHJUZXt9Y2xhc3Mgc1Rle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0pe3RoaXMuaW5qZWN0b3I9bCx0aGlzLmNvbmZpZ0xvYWRlcj1hLHRoaXMucm9vdENvbXBvbmVudFR5cGU9ZCx0aGlzLmNv'@;
put 'bmZpZz1oLHRoaXMudXJsVHJlZT1mLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT12LHRoaXMudXJsU2VyaWFsaXplcj1NLHRoaXMuYXBwbHlSZWRpcmVjdHM9bmV3ICRFZSh0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy51cmxUcmVlKSx0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudD0w'@;
put 'LHRoaXMuYWxsb3dSZWRpcmVjdHM9ITB9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgbnIoNDAwMixgJyR7bC5zZWdtZW50R3JvdXB9J2ApfXJlY29nbml6ZSgpe2NvbnN0IGw9bGNlKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7cmV0dXJuIHRo'@;
put 'aXMubWF0Y2gobCkucGlwZShQcihhPT57Y29uc3QgZD1uZXcgbFcoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LEtzLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx7fSks'@;
put 'aD1uZXcgcWYoZCxhKSxmPW5ldyBYbGUoIiIsaCksdj1mdW5jdGlvbiBYeGUoYyxsLGE9bnVsbCxkPW51bGwpe3JldHVybiBWbGUoTmxlKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gdi5xdWVyeVBhcmFtcz10'@;
put 'aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2KSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QsbnVsbCkse3N0YXRlOmYsdHJlZTp2fX0pKX1tYXRjaChsKXtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRo'@;
put 'aXMuaW5qZWN0b3IsdGhpcy5jb25maWcsbCxLcykucGlwZShxOChkPT57aWYoZCBpbnN0YW5jZW9mIGdXKXJldHVybiB0aGlzLnVybFRyZWU9ZC51cmxUcmVlLHRoaXMubWF0Y2goZC51cmxUcmVlLnJvb3QpO3Rocm93IGQgaW5zdGFuY2VvZiBwVz90aGlzLm5vTWF0Y2hFcnJvcihkKTpkfSkp'@;
put 'fWluaGVyaXRQYXJhbXNBbmREYXRhKGwsYSl7Y29uc3QgZD1sLnZhbHVlLGg9b1coZCxhLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7ZC5wYXJhbXM9T2JqZWN0LmZyZWV6ZShoLnBhcmFtcyksZC5kYXRhPU9iamVjdC5mcmVlemUoaC5kYXRhKSxsLmNoaWxkcmVuLmZvckVhY2go'@;
put 'Zj0+dGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShmLGQpKX1wcm9jZXNzU2VnbWVudEdyb3VwKGwsYSxkLGgpe3JldHVybiAwPT09ZC5zZWdtZW50cy5sZW5ndGgmJmQuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbihsLGEsZCk6dGhpcy5wcm9jZXNzU2VnbWVudChsLGEsZCxk'@;
put 'LnNlZ21lbnRzLGgsITApLnBpcGUoUHIoZj0+ZiBpbnN0YW5jZW9mIHFmP1tmXTpbXSkpfXByb2Nlc3NDaGlsZHJlbihsLGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBPYmplY3Qua2V5cyhkLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1mP2gudW5zaGlmdChmKTpoLnB1c2goZik7cmV0'@;
put 'dXJuIFV1KGgpLnBpcGUocXkoZj0+e2NvbnN0IHY9ZC5jaGlsZHJlbltmXSxNPWZ1bmN0aW9uIFNFZShjLGwpe2NvbnN0IGE9Yy5maWx0ZXIoZD0+dnAoZCk9PT1sKTtyZXR1cm4gYS5wdXNoKC4uLmMuZmlsdGVyKGQ9PnZwKGQpIT09bCkpLGF9KGEsZik7cmV0dXJuIHRoaXMucHJvY2Vzc1Nl'@;
put 'Z21lbnRHcm91cChsLE0sdixmKX0pLGZ1bmN0aW9uIEV4ZShjLGwpe3JldHVybiBOaShmdW5jdGlvbiB4eGUoYyxsLGEsZCxoKXtyZXR1cm4oZix2KT0+e2xldCBNPWEsST1sLEc9MDtmLnN1YnNjcmliZShIaSh2LHJlPT57Y29uc3QgdWU9RysrO0k9TT9jKEkscmUsdWUpOihNPSEwLHJlKSxk'@;
put 'JiZ2Lm5leHQoSSl9LGgmJigoKT0+e00mJnYubmV4dChJKSx2LmNvbXBsZXRlKCl9KSkpfX0oYyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGYsdik9PihmLnB1c2goLi4udiksZikpLEhSKG51bGwpLGZ1bmN0aW9uIFR4ZShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49Mjty'@;
put 'ZXR1cm4gZD0+ZC5waXBlKGM/V2woKGgsZik9PmMoaCxmLGQpKTpjbixYWigxKSxhP0hSKGwpOnhsZSgoKT0+bmV3IEZSKSl9KCksRjAoZj0+e2lmKG51bGw9PT1mKXJldHVybiBvYihkKTtjb25zdCB2PWNjZShmKTtyZXR1cm4gZnVuY3Rpb24gb1RlKGMpe2Muc29ydCgobCxhKT0+bC52YWx1'@;
put 'ZS5vdXRsZXQ9PT1Lcz8tMTphLnZhbHVlLm91dGxldD09PUtzPzE6bC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfSh2KSxkcyh2KX0pKX1wcm9jZXNzU2VnbWVudChsLGEsZCxoLGYsdil7cmV0dXJuIFV1KGEpLnBpcGUocXkoTT0+dGhpcy5wcm9jZXNzU2Vn'@;
put 'bWVudEFnYWluc3RSb3V0ZShNLl9pbmplY3Rvcj8/bCxhLE0sZCxoLGYsdikucGlwZShxOChJPT57aWYoSSBpbnN0YW5jZW9mIHBXKXJldHVybiBkcyhudWxsKTt0aHJvdyBJfSkpKSxubShNPT4hIU0pLHE4KE09PntpZihzY2UoTSkpcmV0dXJuIGZ1bmN0aW9uIG5UZShjLGwsYSl7cmV0dXJu'@;
put 'IDA9PT1sLmxlbmd0aCYmIWMuY2hpbGRyZW5bYV19KGQsaCxmKT9kcyhuZXcgclRlKTpvYihkKTt0aHJvdyBNfSkpfXByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZix2LE0pe3JldHVybiBmdW5jdGlvbiB0VGUoYyxsLGEsZCl7cmV0dXJuISEodnAoYyk9PT1kfHxkIT09S3Mm'@;
put 'JlhSKGwsYSxjKSkmJnZXKGwsYyxhKS5tYXRjaGVkfShkLGgsZix2KT92b2lkIDA9PT1kLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUobCxoLGQsZix2KTp0aGlzLmFsbG93UmVkaXJlY3RzJiZNP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVk'@;
put 'aXJlY3QobCxoLGEsZCxmLHYpOm9iKGgpOm9iKGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZix2KXtjb25zdHttYXRjaGVkOk0sY29uc3VtZWRTZWdtZW50czpJLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOkcscmVtYWluaW5nU2VnbWVudHM6cmV9'@;
put 'PXZXKGEsaCxmKTtpZighTSlyZXR1cm4gb2IoYSk7aC5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKSYmKHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50KyssdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ+MzEmJih0aGlzLmFsbG93UmVkaXJlY3RzPSExKSk7Y29uc3QgdWU9dGhpcy5hcHBs'@;
put 'eVJlZGlyZWN0cy5hcHBseVJlZGlyZWN0Q29tbWFuZHMoSSxoLnJlZGlyZWN0VG8sRyk7cmV0dXJuIHRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsdWUpLnBpcGUoRjAoeWU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEseWUuY29uY2F0KHJlKSx2LCExKSkpfW1h'@;
put 'dGNoU2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYpe2NvbnN0IHY9S0VlKGEsZCxoLGwpO3JldHVybiIqKiI9PT1kLnBhdGgmJihhLmNoaWxkcmVuPXt9KSx2LnBpcGUoajEoTT0+TS5tYXRjaGVkP3RoaXMuZ2V0Q2hpbGRDb25maWcobD1kLl9pbmplY3Rvcj8/bCxkLGgpLnBpcGUoajEo'@;
put 'KHtyb3V0ZXM6SX0pPT57Y29uc3QgRz1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7Y29uc3VtZWRTZWdtZW50czpyZSxyZW1haW5pbmdTZWdtZW50czp1ZSxwYXJhbWV0ZXJzOnllfT1NLEVlPW5ldyBsVyhyZSx5ZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0'@;
put 'aGlzLnVybFRyZWUuZnJhZ21lbnQsZnVuY3Rpb24gY1RlKGMpe3JldHVybiBjLmRhdGF8fHt9fShkKSx2cChkKSxkLmNvbXBvbmVudD8/ZC5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGQsZnVuY3Rpb24gdVRlKGMpe3JldHVybiBjLnJlc29sdmV8fHt9fShkKSkse3NlZ21lbnRHcm91cDpCZSxz'@;
put 'bGljZWRTZWdtZW50czpHZX09bGNlKGEscmUsdWUsSSk7aWYoMD09PUdlLmxlbmd0aCYmQmUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gdGhpcy5wcm9jZXNzQ2hpbGRyZW4oRyxJLEJlKS5waXBlKFByKHB0PT5udWxsPT09cHQ/bnVsbDpuZXcgcWYoRWUscHQpKSk7aWYoMD09PUkubGVuZ3RoJiYw'@;
put 'PT09R2UubGVuZ3RoKXJldHVybiBkcyhuZXcgcWYoRWUsW10pKTtjb25zdCBzdD12cChkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoRyxJLEJlLEdlLHN0P0tzOmYsITApLnBpcGUoUHIocHQ9Pm5ldyBxZihFZSxwdCBpbnN0YW5jZW9mIHFmP1twdF06W10pKSl9KSk6b2IoYSkp'@;
put 'KX1nZXRDaGlsZENvbmZpZyhsLGEsZCl7cmV0dXJuIGEuY2hpbGRyZW4/ZHMoe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/ZHMoe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5q'@;
put 'ZWN0b3J9KTpmdW5jdGlvbiBaRWUoYyxsLGEsZCl7Y29uc3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9kcyghMCk6ZHMoaC5tYXAodj0+e2NvbnN0IE09YWIodixjKTtyZXR1cm4gcm0oZnVuY3Rpb24gSUVlKGMpe3JldHVybiBjJiZzeChjLmNhbkxvYWQp'@;
put 'fShNKT9NLmNhbkxvYWQobCxhKTpLMChjLCgpPT5NKGwsYSkpKX0pKS5waXBlKHNiKCksb2NlKCkpfShsLGEsZCkucGlwZShGMChoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoWnUoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmpl'@;
put 'Y3Rvcj1mLmluamVjdG9yfSkpOmZ1bmN0aW9uIEdFZShjKXtyZXR1cm4gR00obmNlKCExLG1oLkd1YXJkUmVqZWN0ZWQpKX0oKSkpOmRzKHtyb3V0ZXM6W10saW5qZWN0b3I6bH0pfX1mdW5jdGlvbiBsVGUoYyl7Y29uc3QgbD1jLnZhbHVlLnJvdXRlQ29uZmlnO3JldHVybiBsJiYiIj09PWwu'@;
put 'cGF0aH1mdW5jdGlvbiBjY2UoYyl7Y29uc3QgbD1bXSxhPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYyl7aWYoIWxUZShkKSl7bC5wdXNoKGQpO2NvbnRpbnVlfWNvbnN0IGg9bC5maW5kKGY9PmQudmFsdWUucm91dGVDb25maWc9PT1mLnZhbHVlLnJvdXRlQ29uZmlnKTt2b2lkIDAhPT1oPyho'@;
put 'LmNoaWxkcmVuLnB1c2goLi4uZC5jaGlsZHJlbiksYS5hZGQoaCkpOmwucHVzaChkKX1mb3IoY29uc3QgZCBvZiBhKXtjb25zdCBoPWNjZShkLmNoaWxkcmVuKTtsLnB1c2gobmV3IHFmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIHVjZShjKXtj'@;
put 'b25zdCBsPWMuY2hpbGRyZW4ubWFwKGE9PnVjZShhKSkuZmxhdCgpO3JldHVybltjLC4uLmxdfWZ1bmN0aW9uIHlXKGMpe3JldHVybiBqMShsPT57Y29uc3QgYT1jKGwpO3JldHVybiBhP1V1KGEpLnBpcGUoUHIoKCk9PmwpKTpkcyhsKX0pfWxldCBkY2U9KCgpPT57Y2xhc3MgY3tidWlsZFRp'@;
put 'dGxlKGEpe2xldCBkLGg9YS5yb290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PUtzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtL'@;
put 'TV19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTooKT0+aGkobVRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksbVRlPSgoKT0+e2NsYXNzIGMgZXh0'@;
put 'ZW5kcyBkY2V7Y29uc3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKShDcihZQ2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBsYj1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxj'@;
put 'Yj1uZXcgU3QoIiIpO2xldCBiVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9aGkoYWFlKX1sb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29t'@;
put 'cG9uZW50TG9hZGVycy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBkcyhhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2Nv'@;
put 'bnN0IGQ9cm0oYS5sb2FkQ29tcG9uZW50KCkpLnBpcGUoUHIoaGNlKSxadShmPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9Zn0pLCRNKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxo'@;
put 'PW5ldyBLWihkLCgpPT5uZXcgR24pLnBpcGUoJFooKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xv'@;
put 'YWRlZFJvdXRlcylyZXR1cm4gZHMoe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIHZUZShjLGwsYSxkKXtyZXR1cm4g'@;
put 'cm0oYy5sb2FkQ2hpbGRyZW4oKSkucGlwZShQcihoY2UpLEYwKGg9PmggaW5zdGFuY2VvZiBwY3x8QXJyYXkuaXNBcnJheShoKT9kcyhoKTpVdShsLmNvbXBpbGVNb2R1bGVBc3luYyhoKSkpLFByKGg9PntkJiZkKGMpO2xldCBmLHYsTT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShoKT8odj1o'@;
put 'LCEwKTooZj1oLmNyZWF0ZShhKS5pbmplY3Rvcix2PWYuZ2V0KGNiLFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOnYubWFwKGZXKSxpbmplY3RvcjpmfX0pKX0oZCx0aGlzLmNvbXBpbGVyLGEsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZSgkTSgoKT0+e3Ro'@;
put 'aXMuY2hpbGRyZW5Mb2FkZXJzLmRlbGV0ZShkKX0pKSx2PW5ldyBLWihmLCgpPT5uZXcgR24pLnBpcGUoJFooKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChkLHYpLHZ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0'@;
put 'aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gaGNlKGMpe3JldHVybiBmdW5jdGlvbiB5VGUoYyl7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmImRlZmF1bHQiaW4gY30o'@;
put 'Yyk/Yy5kZWZhdWx0OmN9bGV0IF9XPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTooKT0+aGkoYlRlKSxwcm92aWRlZEluOiJyb290In0pfX1y'@;
put 'ZXR1cm4gY30pKCksYlRlPSgoKT0+e2NsYXNzIGN7c2hvdWxkUHJvY2Vzc1VybChhKXtyZXR1cm4hMH1leHRyYWN0KGEpe3JldHVybiBhfW1lcmdlKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZmNlPW5ldyBTdCgiIikscGNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gX1RlKGMsbCxhKXtjb25zdCBkPWMuZ2V0KHBjZSksaD1jLmdldChtbyk7cmV0'@;
put 'dXJuIGMuZ2V0KEdhKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCFoLnN0YXJ0Vmlld1RyYW5zaXRpb258fGQuc2tpcE5leHRUcmFuc2l0aW9uKXJldHVybiBkLnNraXBOZXh0VHJhbnNpdGlvbj0hMSxuZXcgUHJvbWlzZShHPT5zZXRUaW1lb3V0KEcpKTtsZXQgZjtjb25zdCB2PW5ldyBQ'@;
put 'cm9taXNlKEc9PntmPUd9KSxNPWguc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+KGYoKSxmdW5jdGlvbiB3VGUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntteShsLHtpbmplY3RvcjpjfSl9KX0oYykpKSx7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6SX09ZDtyZXR1cm4gSSYmSzAoYywoKT0+'@;
put 'SSh7dHJhbnNpdGlvbjpNLGZyb206bCx0bzphfSkpLHZ9KX1sZXQgcVI9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJy'@;
put 'ZW50VHJhbnNpdGlvbj1udWxsLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGwsdGhpcy5ldmVudHM9bmV3IEduLHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgR24sdGhpcy5jb25maWdMb2FkZXI9aGkoYlcpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1oaShxbCks'@;
put 'dGhpcy51cmxTZXJpYWxpemVyPWhpKGViKSx0aGlzLnJvb3RDb250ZXh0cz1oaSh0eCksdGhpcy5sb2NhdGlvbj1oaShwaCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1oaShHUix7b3B0aW9uYWw6ITB9KSx0aGlzLnRpdGxlU3RyYXRlZ3k9aGkoZGNlKSx0aGlzLm9wdGlvbnM9'@;
put 'aGkobGIse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT10aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSIsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWhpKF9XKSx0aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9u'@;
put 'PWhpKGZjZSx7b3B0aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5kcyh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0'@;
put 'KG5ldyBsRWUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgb0VlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3QgZD0rK3RoaXMu'@;
put 'bmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IEpyKHtpZDowLGN1cnJlbnRVcmxUcmVlOmQsY3VycmVudFJhd1Vy'@;
put 'bDpkLGV4dHJhY3RlZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSx1cmxBZnRlclJlZGlyZWN0czp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSxyYXdVcmw6ZCxleHRyYXM6e30scmVzb2x2ZTpudWxsLHJlamVjdDpudWxsLHByb21pc2U6UHJvbWlz'@;
put 'ZS5yZXNvbHZlKCEwKSxzb3VyY2U6ZXgscmVzdG9yZWRTdGF0ZTpudWxsLGN1cnJlbnRTbmFwc2hvdDpoLnNuYXBzaG90LHRhcmdldFNuYXBzaG90Om51bGwsY3VycmVudFJvdXRlclN0YXRlOmgsdGFyZ2V0Um91dGVyU3RhdGU6bnVsbCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOltdLGNh'@;
put 'bkRlYWN0aXZhdGVDaGVja3M6W119LGd1YXJkc1Jlc3VsdDpudWxsfSksdGhpcy50cmFuc2l0aW9ucy5waXBlKFdsKGY9PjAhPT1mLmlkKSxQcihmPT4oey4uLmYsZXh0cmFjdGVkVXJsOnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGYucmF3VXJsKX0pKSxqMShmPT57bGV0IHY9'@;
put 'ITEsTT0hMTtyZXR1cm4gZHMoZikucGlwZShqMShJPT57aWYodGhpcy5uYXZpZ2F0aW9uSWQ+Zi5pZClyZXR1cm4gdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLG1oLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLEUyO3RoaXMuY3VycmVudFRyYW5zaXRpb249Zix0aGlz'@;
put 'LmN1cnJlbnROYXZpZ2F0aW9uPXtpZDpJLmlkLGluaXRpYWxVcmw6SS5yYXdVcmwsZXh0cmFjdGVkVXJsOkkuZXh0cmFjdGVkVXJsLHRyaWdnZXI6SS5zb3VyY2UsZXh0cmFzOkkuZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhp'@;
put 'cy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlvdXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9O2NvbnN0IEc9IWEubmF2aWdhdGVkfHx0aGlzLmlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl8fHRoaXMuaXNVcGRhdGVkQnJvd3NlclVybCgpO2lmKCFHJiYicmVsb2FkIiE9PShJLmV4dHJh'@;
put 'cy5vblNhbWVVcmxOYXZpZ2F0aW9uPz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCB1ZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgcmIoSS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEkucmF3VXJsKSx1ZSxXUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24p'@;
put 'KSxJLnJlc29sdmUobnVsbCksRTJ9aWYodGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoSS5yYXdVcmwpKXJldHVybiBkcyhJKS5waXBlKGoxKHVlPT57Y29uc3QgeWU9dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKTtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChu'@;
put 'ZXcgWlIodWUuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh1ZS5leHRyYWN0ZWRVcmwpLHVlLnNvdXJjZSx1ZS5yZXN0b3JlZFN0YXRlKSkseWUhPT10aGlzLnRyYW5zaXRpb25zPy5nZXRWYWx1ZSgpP0UyOlByb21pc2UucmVzb2x2ZSh1ZSl9KSxmdW5jdGlvbiBkVGUoYyxsLGEs'@;
put 'ZCxoLGYpe3JldHVybiBGMCh2PT5mdW5jdGlvbiBpVGUoYyxsLGEsZCxoLGYsdj0iZW1wdHlPbmx5Iil7cmV0dXJuIG5ldyBzVGUoYyxsLGEsZCxoLHYsZikucmVjb2duaXplKCl9KGMsbCxhLGQsdi5leHRyYWN0ZWRVcmwsaCxmKS5waXBlKFByKCh7c3RhdGU6TSx0cmVlOkl9KT0+KHsuLi52'@;
put 'LHRhcmdldFNuYXBzaG90Ok0sdXJsQWZ0ZXJSZWRpcmVjdHM6SX0pKSkpfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0'@;
put 'ZWd5KSxadSh1ZT0+e2YudGFyZ2V0U25hcHNob3Q9dWUudGFyZ2V0U25hcHNob3QsZi51cmxBZnRlclJlZGlyZWN0cz11ZS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOnVlLnVybEFmdGVyUmVkaXJl'@;
put 'Y3RzfTtjb25zdCB5ZT1uZXcgV2xlKHVlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodWUuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHVlLnVybEFmdGVyUmVkaXJlY3RzKSx1ZS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dCh5ZSl9'@;
put 'KSk7aWYoRyYmdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoSS5jdXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6dWUsZXh0cmFjdGVkVXJsOnllLHNvdXJjZTpFZSxyZXN0b3JlZFN0YXRlOkJlLGV4dHJhczpHZX09SSxzdD1uZXcgWlIodWUsdGhpcy51cmxTZXJpYWxp'@;
put 'emVyLnNlcmlhbGl6ZSh5ZSksRWUsQmUpO3RoaXMuZXZlbnRzLm5leHQoc3QpO2NvbnN0IHB0PUtsZSh0aGlzLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdDtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5JLHRhcmdldFNuYXBzaG90OnB0LHVybEFmdGVyUmVkaXJlY3Rz'@;
put 'OnllLGV4dHJhczp7Li4uR2Usc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmZpbmFsVXJsPXllLGRzKGYpfXtjb25zdCB1ZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgcmIoSS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIu'@;
put 'c2VyaWFsaXplKEkuZXh0cmFjdGVkVXJsKSx1ZSxXUi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksSS5yZXNvbHZlKG51bGwpLEUyfX0pLFp1KEk9Pntjb25zdCBHPW5ldyByRWUoSS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEkuZXh0cmFjdGVkVXJsKSx0aGlzLnVy'@;
put 'bFNlcmlhbGl6ZXIuc2VyaWFsaXplKEkudXJsQWZ0ZXJSZWRpcmVjdHMpLEkudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoRyl9KSxQcihJPT4odGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5JLGd1YXJkczpFRWUoSS50YXJnZXRTbmFwc2hvdCxJLmN1cnJlbnRTbmFwc2hv'@;
put 'dCx0aGlzLnJvb3RDb250ZXh0cyl9LGYpKSxmdW5jdGlvbiBGRWUoYyxsKXtyZXR1cm4gRjAoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsY3VycmVudFNuYXBzaG90OmgsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpmLGNhbkRlYWN0aXZhdGVDaGVja3M6dn19PWE7cmV0dXJuIDA9PT12'@;
put 'Lmxlbmd0aCYmMD09PWYubGVuZ3RoP2RzKHsuLi5hLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIEhFZShjLGwsYSxkKXtyZXR1cm4gVXUoYykucGlwZShGMChoPT5mdW5jdGlvbiBVRWUoYyxsLGEsZCxoKXtjb25zdCBmPWwmJmwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5EZWFj'@;
put 'dGl2YXRlOm51bGw7cmV0dXJuIGYmJjAhPT1mLmxlbmd0aD9kcyhmLm1hcChNPT57Y29uc3QgST1yeChsKT8/aCxHPWFiKE0sSSk7cmV0dXJuIHJtKGZ1bmN0aW9uIE9FZShjKXtyZXR1cm4gYyYmc3goYy5jYW5EZWFjdGl2YXRlKX0oRyk/Ry5jYW5EZWFjdGl2YXRlKGMsbCxhLGQpOkswKEks'@;
put 'KCk9PkcoYyxsLGEsZCkpKS5waXBlKG5tKCkpfSkpLnBpcGUoc2IoKSk6ZHMoITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksbm0oaD0+ITAhPT1oLCEwKSl9KHYsZCxoLGMpLnBpcGUoRjAoTT0+TSYmZnVuY3Rpb24gREVlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KE0p'@;
put 'P2Z1bmN0aW9uIE5FZShjLGwsYSxkKXtyZXR1cm4gVXUobCkucGlwZShxeShoPT5HWihmdW5jdGlvbiBCRWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IGNFZShjKSksZHMoITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBWRWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwm'@;
put 'JmwobmV3IGRFZShjKSksZHMoITApfShoLnJvdXRlLGQpLGZ1bmN0aW9uIHpFZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAodj0+ZnVuY3Rpb24gVEVlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29u'@;
put 'ZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gbCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KHYpKS5maWx0ZXIodj0+bnVsbCE9PXYpLm1hcCh2PT5NbGUoKCk9PmRzKHYuZ3VhcmRzLm1hcChJPT57Y29uc3QgRz1yeCh2Lm5vZGUpPz9hLHJlPWFiKEksRyk7'@;
put 'cmV0dXJuIHJtKGZ1bmN0aW9uIExFZShjKXtyZXR1cm4gYyYmc3goYy5jYW5BY3RpdmF0ZUNoaWxkKX0ocmUpP3JlLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpLMChHLCgpPT5yZShkLGMpKSkucGlwZShubSgpKX0pKS5waXBlKHNiKCkpKSk7cmV0dXJuIGRzKGYpLnBpcGUoc2IoKSl9KGMsaC5w'@;
put 'YXRoLGEpLGZ1bmN0aW9uIGpFZShjLGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBkcyghMCk7Y29uc3QgaD1kLm1hcChmPT5NbGUoKCk9Pntjb25zdCB2PXJ4KGwpPz9hLE09YWIoZix2'@;
put 'KTtyZXR1cm4gcm0oZnVuY3Rpb24gUkVlKGMpe3JldHVybiBjJiZzeChjLmNhbkFjdGl2YXRlKX0oTSk/TS5jYW5BY3RpdmF0ZShsLGMpOkswKHYsKCk9Pk0obCxjKSkpLnBpcGUobm0oKSl9KSk7cmV0dXJuIGRzKGgpLnBpcGUoc2IoKSl9KGMsaC5yb3V0ZSxhKSkpLG5tKGg9PiEwIT09aCwh'@;
put 'MCkpfShkLGYsYyxsKTpkcyhNKSksUHIoTT0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpNfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsST0+dGhpcy5ldmVudHMubmV4dChJKSksWnUoST0+e2lmKGYuZ3VhcmRzUmVzdWx0PUkuZ3VhcmRzUmVzdWx0LHRiKEkuZ3VhcmRzUmVzdWx0KSl0'@;
put 'aHJvdyB0Y2UoMCxJLmd1YXJkc1Jlc3VsdCk7Y29uc3QgRz1uZXcgaUVlKEkuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShJLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShJLnVybEFmdGVyUmVkaXJlY3RzKSxJLnRhcmdldFNuYXBzaG90LCEhSS5n'@;
put 'dWFyZHNSZXN1bHQpO3RoaXMuZXZlbnRzLm5leHQoRyl9KSxXbChJPT4hIUkuZ3VhcmRzUmVzdWx0fHwodGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihJLCIiLG1oLkd1YXJkUmVqZWN0ZWQpLCExKSkseVcoST0+e2lmKEkuZ3VhcmRzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aCly'@;
put 'ZXR1cm4gZHMoSSkucGlwZShadShHPT57Y29uc3QgcmU9bmV3IGFFZShHLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoRy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoRy51cmxBZnRlclJlZGlyZWN0cyksRy50YXJnZXRTbmFwc2hvdCk7dGhpcy5l'@;
put 'dmVudHMubmV4dChyZSl9KSxqMShHPT57bGV0IHJlPSExO3JldHVybiBkcyhHKS5waXBlKGZ1bmN0aW9uIGhUZShjLGwpe3JldHVybiBGMChhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gZHMoYSk7'@;
put 'Y29uc3QgZj1uZXcgU2V0KGgubWFwKEk9Pkkucm91dGUpKSx2PW5ldyBTZXQ7Zm9yKGNvbnN0IEkgb2YgZilpZighdi5oYXMoSSkpZm9yKGNvbnN0IEcgb2YgdWNlKEkpKXYuYWRkKEcpO2xldCBNPTA7cmV0dXJuIFV1KHYpLnBpcGUocXkoST0+Zi5oYXMoSSk/ZnVuY3Rpb24gZlRlKGMsbCxh'@;
put 'LGQpe2NvbnN0IGg9Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9PWg/LnRpdGxlJiYhSmxlKGgpJiYoZltLTV09aC50aXRsZSksZnVuY3Rpb24gcFRlKGMsbCxhLGQpe2NvbnN0IGg9cVooYyk7aWYoMD09PWgubGVuZ3RoKXJldHVybiBkcyh7fSk7Y29uc3QgZj17'@;
put 'fTtyZXR1cm4gVXUoaCkucGlwZShGMCh2PT5mdW5jdGlvbiBnVGUoYyxsLGEsZCl7Y29uc3QgaD1yeChsKT8/ZCxmPWFiKGMsaCk7cmV0dXJuIHJtKGYucmVzb2x2ZT9mLnJlc29sdmUobCxhKTpLMChoLCgpPT5mKGwsYSkpKX0oY1t2XSxsLGEsZCkucGlwZShubSgpLFp1KE09PntmW3ZdPU19'@;
put 'KSkpLFhaKDEpLGZ1bmN0aW9uIEF4ZShjKXtyZXR1cm4gUHIoKCk9PmMpfShmKSxxOCh2PT5zY2Uodik/RTI6R00odikpKX0oZixjLGwsZCkucGlwZShQcih2PT4oYy5fcmVzb2x2ZWREYXRhPXYsYy5kYXRhPW9XKGMsYy5wYXJlbnQsYSkucmVzb2x2ZSxudWxsKSkpfShJLGQsYyxsKTooSS5k'@;
put 'YXRhPW9XKEksSS5wYXJlbnQsYykucmVzb2x2ZSxkcyh2b2lkIDApKSksWnUoKCk9Pk0rKyksWFooMSksRjAoST0+TT09PXYuc2l6ZT9kcyhhKTpFMikpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLFp1KHtuZXh0OigpPT5yZT0h'@;
put 'MCxjb21wbGV0ZTooKT0+e3JlfHx0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKEcsIiIsbWguTm9EYXRhRnJvbVJlc29sdmVyKX19KSl9KSxadShHPT57Y29uc3QgcmU9bmV3IHNFZShHLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoRy5leHRyYWN0ZWRVcmwpLHRoaXMu'@;
put 'dXJsU2VyaWFsaXplci5zZXJpYWxpemUoRy51cmxBZnRlclJlZGlyZWN0cyksRy50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChyZSl9KSl9KSx5VyhJPT57Y29uc3QgRz1yZT0+e2NvbnN0IHVlPVtdO3JlLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhcmUucm91dGVDb25m'@;
put 'aWcuX2xvYWRlZENvbXBvbmVudCYmdWUucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29tcG9uZW50KHJlLnJvdXRlQ29uZmlnKS5waXBlKFp1KHllPT57cmUuY29tcG9uZW50PXllfSksUHIoKCk9Pnt9KSkpO2Zvcihjb25zdCB5ZSBvZiByZS5jaGlsZHJlbil1ZS5wdXNoKC4uLkcoeWUp'@;
put 'KTtyZXR1cm4gdWV9O3JldHVybiBYOChHKEkudGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUoSFIobnVsbCksZ2goMSkpfSkseVcoKCk9PnRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uKCkpLGoxKCgpPT57Y29uc3R7Y3VycmVudFNuYXBzaG90OkksdGFyZ2V0U25hcHNob3Q6R309ZixyZT10aGlz'@;
put 'LmNyZWF0ZVZpZXdUcmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLEkucm9vdCxHLnJvb3QpO3JldHVybiByZT9VdShyZSkucGlwZShQcigoKT0+ZikpOmRzKGYpfSksUHIoST0+e2NvbnN0IEc9ZnVuY3Rpb24gZ0VlKGMsbCxhKXtjb25zdCBkPW54KGMsbC5fcm9vdCxhP2Eu'@;
put 'X3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3ICRsZShkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVneSxJLnRhcmdldFNuYXBzaG90LEkuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5JLHRhcmdldFJvdXRlclN0YXRlOkd9LHRoaXMuY3VycmVu'@;
put 'dE5hdmlnYXRpb24udGFyZ2V0Um91dGVyU3RhdGU9RyxmfSksWnUoKCk9Pnt0aGlzLmV2ZW50cy5uZXh0KG5ldyByVyl9KSwoKGMsbCxhLGQpPT5QcihoPT4obmV3IHhFZShsLGgudGFyZ2V0Um91dGVyU3RhdGUsaC5jdXJyZW50Um91dGVyU3RhdGUsYSxkKS5hY3RpdmF0ZShjKSxoKSkpKHRo'@;
put 'aXMucm9vdENvbnRleHRzLGEucm91dGVSZXVzZVN0cmF0ZWd5LEk9PnRoaXMuZXZlbnRzLm5leHQoSSksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkKSxnaCgxKSxadSh7bmV4dDpJPT57dj0hMCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj10aGlzLmN1cnJlbnROYXZpZ2F0aW9uLHRo'@;
put 'aXMuZXZlbnRzLm5leHQobmV3IG1wKEkuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShJLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShJLnVybEFmdGVyUmVkaXJlY3RzKSkpLHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUoSS50YXJnZXRS'@;
put 'b3V0ZXJTdGF0ZS5zbmFwc2hvdCksSS5yZXNvbHZlKCEwKX0sY29tcGxldGU6KCk9Pnt2PSEwfX0pLEgwKHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5waXBlKFp1KEk9Pnt0aHJvdyBJfSkpKSwkTSgoKT0+eyF2JiYhTSYmdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIi'@;
put 'LG1oLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmlkPT09Zi5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwpfSkscTgoST0+e2lmKE09ITAscmNlKEkpKXRoaXMuZXZlbnRzLm5leHQo'@;
put 'bmV3IG5iKGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksSS5tZXNzYWdlLEkuY2FuY2VsbGF0aW9uQ29kZSkpLGZ1bmN0aW9uIHlFZShjKXtyZXR1cm4gcmNlKGMpJiZ0YihjLnVybCl9KEkpP3RoaXMuZXZlbnRzLm5leHQobmV3IGlXKEkudXJsKSk6'@;
put 'Zi5yZXNvbHZlKCExKTtlbHNle3RoaXMuZXZlbnRzLm5leHQobmV3IFlSKGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksSSxmLnRhcmdldFNuYXBzaG90Pz92b2lkIDApKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKEkpKX1jYXRjaChHKXt0'@;
put 'aGlzLm9wdGlvbnMucmVzb2x2ZU5hdmlnYXRpb25Qcm9taXNlT25FcnJvcj9mLnJlc29sdmUoITEpOmYucmVqZWN0KEcpfX1yZXR1cm4gRTJ9KSl9KSl9Y2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oYSxkLGgpe2NvbnN0IGY9bmV3IG5iKGEuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlh'@;
put 'bGl6ZShhLmV4dHJhY3RlZFVybCksZCxoKTt0aGlzLmV2ZW50cy5uZXh0KGYpLGEucmVzb2x2ZSghMSl9aXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRUcmFuc2l0aW9u'@;
put 'Py5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpfWlzVXBkYXRlZEJyb3dzZXJVcmwoKXtyZXR1cm4gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHRoaXMubG9jYXRpb24ucGF0aCghMCkpKS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50'@;
put 'VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkmJiF0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJu'@;
put 'KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIENUZShjKXtyZXR1cm4gYyE9PWV4fWxldCBTVGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OigpPT5oaSh4VGUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBNVGV7c2hvdWxkRGV0YWNoKGwpe3JldHVybiExfXN0b3JlKGwsYSl7fXNob3VsZEF0dGFjaChsKXtyZXR1cm4hMX1y'@;
put 'ZXRyaWV2ZShsKXtyZXR1cm4gbnVsbH1zaG91bGRSZXVzZVJvdXRlKGwsYSl7cmV0dXJuIGwucm91dGVDb25maWc9PT1hLnJvdXRlQ29uZmlnfX1sZXQgeFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBNVGV7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlv'@;
put 'bihoKXtyZXR1cm4oYXx8KGE9VW8oYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksZ2NlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTooKT0+aGkoRVRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksRVRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnY2V7Y29uc3RydWN0b3IoKXtz'@;
put 'dXBlciguLi5hcmd1bWVudHMpLHRoaXMubG9jYXRpb249aGkocGgpLHRoaXMudXJsU2VyaWFsaXplcj1oaShlYiksdGhpcy5vcHRpb25zPWhpKGxiLHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdh'@;
put 'dGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9aGkoX1cpLHRoaXMudXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IFF5LHRoaXMucmF3VXJsVHJl'@;
put 'ZT10aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLnJvdXRlclN0YXRlPUtsZShudWxsKSx0aGlzLnN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpfWdldEN1cnJlbnRVcmxUcmVlKCl7cmV0dXJu'@;
put 'IHRoaXMuY3VycmVudFVybFRyZWV9Z2V0UmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnJhd1VybFRyZWV9cmVzdG9yZWRTdGF0ZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCl9Z2V0IGJyb3dzZXJQYWdlSWQoKXtyZXR1cm4iY29tcHV0ZWQiIT09dGhpcy5jYW5jZWxlZE5hdmln'@;
put 'YXRpb25SZXNvbHV0aW9uP3RoaXMuY3VycmVudFBhZ2VJZDp0aGlzLnJlc3RvcmVkU3RhdGUoKT8uXHUwMjc1cm91dGVyUGFnZUlkPz90aGlzLmN1cnJlbnRQYWdlSWR9Z2V0Um91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5yb3V0ZXJTdGF0ZX1jcmVhdGVTdGF0ZU1lbWVudG8oKXtyZXR1cm57'@;
put 'cmF3VXJsVHJlZTp0aGlzLnJhd1VybFRyZWUsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxyb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfX1yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKGEpe3JldHVybiB0aGlzLmxvY2F0aW9uLnN1YnNj'@;
put 'cmliZShkPT57InBvcHN0YXRlIj09PWQudHlwZSYmYShkLnVybCxkLnN0YXRlKX0pfWhhbmRsZVJvdXRlckV2ZW50KGEsZCl7aWYoYSBpbnN0YW5jZW9mIFpSKXRoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCk7ZWxzZSBpZihhIGluc3RhbmNlb2YgcmIpdGhpcy5y'@;
put 'YXdVcmxUcmVlPWQuaW5pdGlhbFVybDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBXbGUpe2lmKCJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYhZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBoPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJs'@;
put 'LGQuaW5pdGlhbFVybCk7dGhpcy5zZXRCcm93c2VyVXJsKGgsZCl9fWVsc2UgYSBpbnN0YW5jZW9mIHJXPyh0aGlzLmN1cnJlbnRVcmxUcmVlPWQuZmluYWxVcmwsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVybCks'@;
put 'dGhpcy5yb3V0ZXJTdGF0ZT1kLnRhcmdldFJvdXRlclN0YXRlLCJkZWZlcnJlZCI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYoZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfHx0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5yYXdVcmxUcmVlLGQpKSk6YSBpbnN0YW5jZW9mIG5iJiYoYS5j'@;
put 'b2RlPT09bWguR3VhcmRSZWplY3RlZHx8YS5jb2RlPT09bWguTm9EYXRhRnJvbVJlc29sdmVyKT90aGlzLnJlc3RvcmVIaXN0b3J5KGQpOmEgaW5zdGFuY2VvZiBZUj90aGlzLnJlc3RvcmVIaXN0b3J5KGQsITApOmEgaW5zdGFuY2VvZiBtcCYmKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD1hLmlk'@;
put 'LHRoaXMuY3VycmVudFBhZ2VJZD10aGlzLmJyb3dzZXJQYWdlSWQpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29u'@;
put 'c3Qgdj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQpfTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLHYpfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5n'@;
put 'Um91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQrMSl9O3RoaXMubG9jYXRpb24uZ28oaCwiIixmKX19cmVzdG9yZUhpc3RvcnkoYSxkPSExKXtpZigiY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uKXtjb25zdCBmPXRoaXMuY3VycmVudFBhZ2VJ'@;
put 'ZC10aGlzLmJyb3dzZXJQYWdlSWQ7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28oZik6dGhpcy5jdXJyZW50VXJsVHJlZT09PWEuZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfWVsc2UicmVwbGFjZSI9PT10'@;
put 'aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24mJihkJiZ0aGlzLnJlc2V0U3RhdGUoYSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9cmVzZXRTdGF0ZShhKXt0aGlzLnJvdXRlclN0YXRlPXRoaXMuc3RhdGVNZW1lbnRvLnJvdXRlclN0YXRlLHRoaXMuY3VycmVudFVy'@;
put 'bFRyZWU9dGhpcy5zdGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEuZmluYWxVcmw/P3RoaXMucmF3VXJsVHJlZSl9cmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl7dGhp'@;
put 'cy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLnJhd1VybFRyZWUpLCIiLHRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZCx0aGlzLmN1cnJlbnRQYWdlSWQpKX1nZW5lcmF0ZU5nUm91dGVyU3RhdGUo'@;
put 'YSxkKXtyZXR1cm4iY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uP3tuYXZpZ2F0aW9uSWQ6YSxcdTAyNzVyb3V0ZXJQYWdlSWQ6ZH06e25hdmlnYXRpb25JZDphfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgp'@;
put 'e3JldHVybihhfHwoYT1VbyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgb3g9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5DT01QTEVURT0wXT0i'@;
put 'Q09NUExFVEUiLGNbYy5GQUlMRUQ9MV09IkZBSUxFRCIsY1tjLlJFRElSRUNUSU5HPTJdPSJSRURJUkVDVElORyIsY30ob3h8fHt9KTtmdW5jdGlvbiBtY2UoYyxsKXtjLmV2ZW50cy5waXBlKFdsKGE9PmEgaW5zdGFuY2VvZiBtcHx8YSBpbnN0YW5jZW9mIG5ifHxhIGluc3RhbmNlb2YgWVJ8'@;
put 'fGEgaW5zdGFuY2VvZiByYiksUHIoYT0+YSBpbnN0YW5jZW9mIG1wfHxhIGluc3RhbmNlb2YgcmI/b3guQ09NUExFVEU6YSBpbnN0YW5jZW9mIG5iJiYoYS5jb2RlPT09bWguUmVkaXJlY3R8fGEuY29kZT09PW1oLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pP294LlJFRElSRUNUSU5HOm94'@;
put 'LkZBSUxFRCksV2woYT0+YSE9PW94LlJFRElSRUNUSU5HKSxnaCgxKSkuc3Vic2NyaWJlKCgpPT57bCgpfSl9ZnVuY3Rpb24gVFRlKGMpe3Rocm93IGN9Y29uc3QgQVRlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1z'@;
put 'OiJleGFjdCJ9LGtUZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBMbz0oKCk9PntjbGFzcyBje2dldCBjdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRD'@;
put 'dXJyZW50VXJsVHJlZSgpfWdldCByYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJhd1VybFRyZWUoKX1nZXQgZXZlbnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Um91dGVyU3RhdGUo'@;
put 'KX1jb25zdHJ1Y3Rvcigpe3RoaXMuZGlzcG9zZWQ9ITEsdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEsdGhpcy5jb25zb2xlPWhpKEtpZSksdGhpcy5zdGF0ZU1hbmFnZXI9aGkoZ2NlKSx0aGlzLm9wdGlvbnM9aGkobGIse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGVuZGluZ1Rhc2tzPWhpKEJm'@;
put 'KSx0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1oaShxUiksdGhpcy51cmxTZXJpYWxpemVyPWhpKGViKSx0aGlzLmxvY2F0aW9uPWhpKHBoKSx0aGlzLnVybEhhbmRsaW5n'@;
put 'U3RyYXRlZ3k9aGkoX1cpLHRoaXMuX2V2ZW50cz1uZXcgR24sdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8VFRlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWhpKFNUZSksdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPXRoaXMu'@;
put 'b3B0aW9ucy5vblNhbWVVcmxOYXZpZ2F0aW9ufHwiaWdub3JlIix0aGlzLmNvbmZpZz1oaShjYix7b3B0aW9uYWw6ITB9KT8uZmxhdCgpPz9bXSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFoaShHUix7b3B0aW9uYWw6ITB9KSx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbj1u'@;
put 'ZXcgSnQsdGhpcy5pc05nWm9uZUVuYWJsZWQ9aGkoR2EpaW5zdGFuY2VvZiBHYSYmR2EuaXNJbkFuZ3VsYXJab25lKCksdGhpcy5yZXNldENvbmZpZyh0aGlzLmNvbmZpZyksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuc2V0dXBOYXZpZ2F0aW9ucyh0aGlzLHRoaXMuY3VycmVudFVybFRy'@;
put 'ZWUsdGhpcy5yb3V0ZXJTdGF0ZSkuc3Vic2NyaWJlKHtlcnJvcjphPT57dGhpcy5jb25zb2xlLndhcm4oYSl9fSksdGhpcy5zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKX1zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKXtjb25zdCBhPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25z'@;
put 'LmV2ZW50cy5zdWJzY3JpYmUoZD0+e3RyeXtjb25zdCBoPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnRUcmFuc2l0aW9uLGY9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb247aWYobnVsbCE9PWgmJm51bGwhPT1mKWlmKHRoaXMuc3RhdGVNYW5h'@;
put 'Z2VyLmhhbmRsZVJvdXRlckV2ZW50KGQsZiksZCBpbnN0YW5jZW9mIG5iJiZkLmNvZGUhPT1taC5SZWRpcmVjdCYmZC5jb2RlIT09bWguU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbil0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBtcCl0aGlzLm5hdmlnYXRlZD0hMDtl'@;
put 'bHNlIGlmKGQgaW5zdGFuY2VvZiBpVyl7Y29uc3Qgdj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC51cmwsaC5jdXJyZW50UmF3VXJsKSxNPXtpbmZvOmguZXh0cmFzLmluZm8sc2tpcExvY2F0aW9uQ2hhbmdlOmguZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJs'@;
put 'OiJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5fHxDVGUoaC5zb3VyY2UpfTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbih2LGV4LG51bGwsTSx7cmVzb2x2ZTpoLnJlc29sdmUscmVqZWN0OmgucmVqZWN0LHByb21pc2U6aC5wcm9taXNlfSl9KGZ1bmN0aW9uIElUZShjKXtyZXR1cm4h'@;
put 'KGMgaW5zdGFuY2VvZiByV3x8YyBpbnN0YW5jZW9mIGlXKX0pKGQpJiZ0aGlzLl9ldmVudHMubmV4dChkKX1jYXRjaChoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0Lm5leHQoaCl9fSk7dGhpcy5ldmVudHNTdWJzY3JpcHRpb24uYWRkKGEpfXJl'@;
put 'c2V0Um9vdENvbXBvbmVudFR5cGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD1hLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnJvb3RDb21wb25lbnRUeXBlPWF9aW5pdGlhbE5hdmlnYXRpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLHRoaXMu'@;
put 'bmF2aWdhdGlvblRyYW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb258fHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLGV4LHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmVkU3RhdGUoKSl9c2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVy'@;
put 'KCl7dGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN0YXRlTWFuYWdlci5yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKChhLGQpPT57c2V0VGltZW91dCgoKT0+e3RoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nl'@;
put 'cihhLCJwb3BzdGF0ZSIsZCl9LDApfSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQsaCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sdj1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IEk9ey4uLmh9O2RlbGV0ZSBJLm5hdmlnYXRpb25JZCxkZWxldGUgSS5cdTAyNzVy'@;
put 'b3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKEkpLmxlbmd0aCYmKGYuc3RhdGU9SSl9Y29uc3QgTT10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKE0sZCx2LGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9'@;
put 'Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259'@;
put 'cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAoZlcpLHRoaXMubmF2aWdhdGVkPSExfW5nT25EZXN0cm95KCl7dGhpcy5kaXNwb3NlKCl9ZGlzcG9zZSgpe3RoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmNvbXBsZXRlKCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VT'@;
put 'dWJzY3JpcHRpb24mJih0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPXZvaWQgMCksdGhpcy5kaXNwb3NlZD0hMCx0aGlzLmV2ZW50c1N1YnNjcmlwdGlv'@;
put 'bi51bnN1YnNjcmliZSgpfWNyZWF0ZVVybFRyZWUoYSxkPXt9KXtjb25zdHtyZWxhdGl2ZVRvOmgscXVlcnlQYXJhbXM6ZixmcmFnbWVudDp2LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6TSxwcmVzZXJ2ZUZyYWdtZW50Okl9PWQsRz1JP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6djtsZXQg'@;
put 'dWUscmU9bnVsbDtzd2l0Y2goTSl7Y2FzZSJtZXJnZSI6cmU9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6cmU9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0OnJlPWZ8fG51bGx9bnVsbCE9'@;
put 'PXJlJiYocmU9dGhpcy5yZW1vdmVFbXB0eVByb3BzKHJlKSk7dHJ5e3VlPU5sZShoP2guc25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290KX1jYXRjaHsoInN0cmluZyIhPXR5cGVvZiBhWzBdfHwhYVswXS5zdGFydHNXaXRoKCIvIikpJiYoYT1bXSksdWU9dGhpcy5jdXJy'@;
put 'ZW50VXJsVHJlZS5yb290fXJldHVybiBWbGUodWUsYSxyZSxHPz9udWxsKX1uYXZpZ2F0ZUJ5VXJsKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7Y29uc3QgaD10YihhKT9hOnRoaXMucGFyc2VVcmwoYSksZj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoaCx0aGlzLnJhd1Vy'@;
put 'bFRyZWUpO3JldHVybiB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihmLGV4LG51bGwsZCl9bmF2aWdhdGUoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4gZnVuY3Rpb24gRFRlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKG51bGw9PWNbbF0pdGhyb3cgbmV3IG5y'@;
put 'KDQwMDgsITEpfShhKSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKGEsZCksZCl9c2VyaWFsaXplVXJsKGEpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpfXBhcnNlVXJsKGEpe3RyeXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEp'@;
put 'fWNhdGNoe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoIi8iKX19aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uQVRlfTohMT09PWQ/ey4uLmtUZX06ZCx0YihhKSlyZXR1cm4ga2xlKHRoaXMuY3VycmVudFVybFRyZWUsYSxoKTtjb25zdCBmPXRoaXMucGFyc2VV'@;
put 'cmwoYSk7cmV0dXJuIGtsZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGYsaCl9cmVtb3ZlRW1wdHlQcm9wcyhhKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKChkLFtoLGZdKT0+KG51bGwhPWYmJihkW2hdPWYpLGQpLHt9KX1zY2hlZHVsZU5hdmlnYXRpb24oYSxkLGgsZix2KXtpZih0'@;
put 'aGlzLmRpc3Bvc2VkKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCBNLEksRzt2PyhNPXYucmVzb2x2ZSxJPXYucmVqZWN0LEc9di5wcm9taXNlKTpHPW5ldyBQcm9taXNlKCh1ZSx5ZSk9PntNPXVlLEk9eWV9KTtjb25zdCByZT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4g'@;
put 'bWNlKHRoaXMsKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKHJlKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOmQscmVzdG9yZWRTdGF0ZTpoLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3Vy'@;
put 'cmVudFVybFRyZWUsY3VycmVudFJhd1VybDp0aGlzLmN1cnJlbnRVcmxUcmVlLHJhd1VybDphLGV4dHJhczpmLHJlc29sdmU6TSxyZWplY3Q6SSxwcm9taXNlOkcsY3VycmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVy'@;
put 'U3RhdGV9KSxHLmNhdGNoKHVlPT5Qcm9taXNlLnJlamVjdCh1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9'@;
put 'KX19cmV0dXJuIGN9KSgpLGwxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1kLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMubG9jYXRpb25TdHJhdGVneT1NLHRoaXMu'@;
put 'aHJlZj1udWxsLHRoaXMuY29tbWFuZHM9bnVsbCx0aGlzLm9uQ2hhbmdlcz1uZXcgR24sdGhpcy5wcmVzZXJ2ZUZyYWdtZW50PSExLHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlPSExLHRoaXMucmVwbGFjZVVybD0hMTtjb25zdCBJPXYubmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2Fz'@;
put 'ZSgpO3RoaXMuaXNBbmNob3JFbGVtZW50PSJhIj09PUl8fCJhcmVhIj09PUksdGhpcy5pc0FuY2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKEc9PntHIGluc3RhbmNlb2YgbXAmJnRoaXMudXBkYXRlSHJlZigpfSk6dGhpcy5zZXRUYWJJbmRleElmTm90'@;
put 'T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9y'@;
put 'RWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpKToodGhpcy5jb21t'@;
put 'YW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZix2KXtjb25zdCBNPXRoaXMudXJsVHJlZTtyZXR1cm4hIShudWxsPT09TXx8dGhpcy5pc0FuY2hvckVsZW1lbnQmJigwIT09YXx8ZHx8aHx8Znx8dnx8InN0cmluZyI9PXR5cGVv'@;
put 'ZiB0aGlzLnRhcmdldCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTSx7c2tpcExvY2F0aW9uQ2hhbmdlOnRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6dGhpcy5yZXBsYWNlVXJsLHN0YXRlOnRoaXMuc3RhdGUsaW5mbzp0aGlz'@;
put 'LmluZm99KSwhdGhpcy5pc0FuY2hvckVsZW1lbnQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlSHJlZigpe2NvbnN0IGE9dGhpcy51cmxUcmVlO3RoaXMuaHJlZj1udWxsIT09YSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRp'@;
put 'b25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChhKSk6bnVsbDtjb25zdCBkPW51bGw9PT10aGlzLmhyZWY/bnVsbDpmdW5jdGlvbiBsRChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFdCKGMsbCl7cmV0dXJuInNyYyI9PT1sJiYoImVtYmVkIj09'@;
put 'PWN8fCJmcmFtZSI9PT1jfHwiaWZyYW1lIj09PWN8fCJtZWRpYSI9PT1jfHwic2NyaXB0Ij09PWMpfHwiaHJlZiI9PT1sJiYoImJhc2UiPT09Y3x8ImxpbmsiPT09Yyk/b0Q6S0N9KGwsYSkoYyl9KHRoaXMuaHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgp'@;
put 'LCJocmVmIik7dGhpcy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixkKX1hcHBseUF0dHJpYnV0ZVZhbHVlKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyLGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251bGwhPT1kP2guc2V0QXR0cmlidXRlKGYsYSxkKTpoLnJlbW92ZUF0dHJpYnV0ZShm'@;
put 'LGEpfWdldCB1cmxUcmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLmNvbW1hbmRzP251bGw6dGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFt'@;
put 'czp0aGlzLnF1ZXJ5UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0'@;
put 'dXJuIG5ldyhkfHxjKSgkZShMbyksJGUoeXUpLEZmKCJ0YWJpbmRleCIpLCRlKEVzKSwkZShRaSksJGUoWjgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24o'@;
put 'ZCxoKXsxJmQmJkZ0KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2LmJ1dHRvbix2LmN0cmxLZXksdi5zaGlmdEtleSx2LmFsdEtleSx2Lm1ldGFLZXkpfSksMiZkJiZocigidGFyZ2V0IixoLnRhcmdldCl9LGlucHV0czp7dGFyZ2V0OiJ0YXJnZXQiLHF1ZXJ5UGFyYW1z'@;
put 'OiJxdWVyeVBhcmFtcyIsZnJhZ21lbnQ6ImZyYWdtZW50IixxdWVyeVBhcmFtc0hhbmRsaW5nOiJxdWVyeVBhcmFtc0hhbmRsaW5nIixzdGF0ZToic3RhdGUiLGluZm86ImluZm8iLHJlbGF0aXZlVG86InJlbGF0aXZlVG8iLHByZXNlcnZlRnJhZ21lbnQ6W1ZuLkhhc0RlY29yYXRvcklucHV0'@;
put 'VHJhbnNmb3JtLCJwcmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsczFdLHNraXBMb2NhdGlvbkNoYW5nZTpbVm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5nZSIsczFdLHJlcGxhY2VVcmw6W1ZuLkhh'@;
put 'c0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJyZXBsYWNlVXJsIiwicmVwbGFjZVVybCIsczFdLHJvdXRlckxpbms6InJvdXRlckxpbmsifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt6bCxibF19KX19cmV0dXJuIGN9KSgpLHViPSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJu'@;
put 'IHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9dix0aGlzLmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0'@;
put 'aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEtyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShNPT57TSBpbnN0YW5jZW9mIG1wJiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7ZHModGhpcy5saW5rcy5j'@;
put 'aGFuZ2VzLGRzKG51bGwpKS5waXBlKFh5KCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vi'@;
put 'c2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1VdShhKS5waXBlKFh5KCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3Rp'@;
put 'dmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7'@;
put 'dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVk'@;
put 'fHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuY2xhc3Nlcy5mb3JFYWNoKGQ9PnthP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsZCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVs'@;
put 'ZW1lbnQubmF0aXZlRWxlbWVudCxkKX0pLGEmJnZvaWQgMCE9PXRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlP3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiLHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3Ry'@;
put 'aW5nKCkpOnRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiKSx0aGlzLl9pc0FjdGl2ZSE9PWEmJih0aGlzLl9pc0FjdGl2ZT1hLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1p'@;
put 'dChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBSVGUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3Jl'@;
put 'dHVybiBoPT57Y29uc3QgZj1oLnVybFRyZWU7cmV0dXJuISFmJiZhLmlzQWN0aXZlKGYsZCl9fWhhc0FjdGl2ZUxpbmtzKCl7Y29uc3QgYT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7cmV0dXJuIHRoaXMubGluayYmYSh0aGlzLmxpbmspfHx0aGlzLmxpbmtzLnNvbWUoYSl9c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoTG8pLCRlKFFpKSwkZShFcyksJGUoeG8pLCRlKGwxLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVu'@;
put 'dFF1ZXJpZXM6ZnVuY3Rpb24oZCxoLGYpe2lmKDEmZCYmYXMoZixsMSw1KSwyJmQpe2xldCB2O3lpKHY9YmkoKSkmJihoLmxpbmtzPXYpfX0saW5wdXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMiLGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJp'@;
put 'YUN1cnJlbnRXaGVuQWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZlIn0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6ImlzQWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0ZXJMaW5rQWN0aXZlIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbYmxdfSl9fXJldHVy'@;
put 'biBjfSkoKTtjbGFzcyB2Y2V7fWxldCBMVGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucm91dGVyPWEsdGhpcy5pbmplY3Rvcj1oLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWYsdGhpcy5sb2FkZXI9dn1zZXRVcFByZWxvYWRpbmcoKXt0aGlzLnN1YnNjcmlw'@;
put 'dGlvbj10aGlzLnJvdXRlci5ldmVudHMucGlwZShXbChhPT5hIGluc3RhbmNlb2YgbXApLHF5KCgpPT50aGlzLnByZWxvYWQoKSkpLnN1YnNjcmliZSgoKT0+e30pfXByZWxvYWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHRoaXMuaW5qZWN0b3IsdGhpcy5yb3V0ZXIuY29uZmlnKX1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByb2Nlc3NSb3V0ZXMoYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIGQpe2YucHJvdmlkZXJzJiYhZi5faW5qZWN0b3ImJihmLl9pbmplY3Rvcj1HNChmLnByb3ZpZGVy'@;
put 'cyxhLGBSb3V0ZTogJHtmLnBhdGh9YCkpO2NvbnN0IHY9Zi5faW5qZWN0b3I/P2EsTT1mLl9sb2FkZWRJbmplY3Rvcj8/djsoZi5sb2FkQ2hpbGRyZW4mJiFmLl9sb2FkZWRSb3V0ZXMmJnZvaWQgMD09PWYuY2FuTG9hZHx8Zi5sb2FkQ29tcG9uZW50JiYhZi5fbG9hZGVkQ29tcG9uZW50KSYm'@;
put 'aC5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyh2LGYpKSwoZi5jaGlsZHJlbnx8Zi5fbG9hZGVkUm91dGVzKSYmaC5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhNLGYuY2hpbGRyZW4/P2YuX2xvYWRlZFJvdXRlcykpfXJldHVybiBVdShoKS5waXBlKFh5KCkpfXByZWxvYWRDb25maWcoYSxkKXty'@;
put 'ZXR1cm4gdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChkLCgpPT57bGV0IGg7aD1kLmxvYWRDaGlsZHJlbiYmdm9pZCAwPT09ZC5jYW5Mb2FkP3RoaXMubG9hZGVyLmxvYWRDaGlsZHJlbihhLGQpOmRzKG51bGwpO2NvbnN0IGY9aC5waXBlKEYwKHY9Pm51bGw9PT12P2RzKHZvaWQg'@;
put 'MCk6KGQuX2xvYWRlZFJvdXRlcz12LnJvdXRlcyxkLl9sb2FkZWRJbmplY3Rvcj12LmluamVjdG9yLHRoaXMucHJvY2Vzc1JvdXRlcyh2LmluamVjdG9yPz9hLHYucm91dGVzKSkpKTtyZXR1cm4gZC5sb2FkQ29tcG9uZW50JiYhZC5fbG9hZGVkQ29tcG9uZW50P1V1KFtmLHRoaXMubG9hZGVy'@;
put 'LmxvYWRDb21wb25lbnQoZCldKS5waXBlKFh5KCkpOmZ9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihMbyksQ3IoYWFlKSxDcihxbCksQ3IodmNlKSxDcihiVykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHdXPW5ldyBTdCgiIik7bGV0IHljZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdj17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmll'@;
put 'd3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz12LHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1oaShxbCksdi5zY3JvbGxQb3NpdGlv'@;
put 'blJlc3RvcmF0aW9ufHw9ImRpc2FibGVkIix2LmFuY2hvclNjcm9sbGluZ3x8PSJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlv'@;
put 'bigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0'@;
put 'aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgWlI/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVzdG9yZWRJZD1hLnJl'@;
put 'c3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgbXA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KSk6YSBp'@;
put 'bnN0YW5jZW9mIHJiJiZhLmNvZGU9PT1XUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24mJih0aGlzLmxhc3RTb3VyY2U9dm9pZCAwLHRoaXMucmVzdG9yZWRJZD0wLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybCkuZnJhZ21lbnQpKX0p'@;
put 'fWNvbnN1bWVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgWWxlJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxl'@;
put 'ci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5h'@;
put 'bmNob3JTY3JvbGxpbmc/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1z'@;
put 'Y2hlZHVsZVNjcm9sbEV2ZW50KGEsZCl7dmFyIGg9dGhpczt0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoUShmdW5jdGlvbiooKXt5aWVsZCBuZXcgUHJvbWlzZShmPT57c2V0VGltZW91dCgoKT0+e2YoKX0pLG15KCgpPT57ZigpfSx7aW5qZWN0b3I6aC5lbnZpcm9ubWVudEluamVjdG9y'@;
put 'fSl9KSxoLnpvbmUucnVuKCgpPT57aC50cmFuc2l0aW9ucy5ldmVudHMubmV4dChuZXcgWWxlKGEsInBvcHN0YXRlIj09PWgubGFzdFNvdXJjZT9oLnN0b3JlW2gucmVzdG9yZWRJZF06bnVsbCxkKSl9KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPy51'@;
put 'bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXshZnVuY3Rpb24gRUQoKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX0oKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB5cChjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIF9jZSgpe2NvbnN0IGM9aGkoRG8pO3JldHVybiBsPT57Y29uc3QgYT1jLmdldCh1cCk7aWYobCE9'@;
put 'PWEuY29tcG9uZW50c1swXSlyZXR1cm47Y29uc3QgZD1jLmdldChMbyksaD1jLmdldCh3Y2UpOzE9PT1jLmdldChDVykmJmQuaW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChDY2UsbnVsbCxyYS5PcHRpb25hbCk/LnNldFVwUHJlbG9hZGluZygpLGMuZ2V0KHdXLG51bGwscmEuT3B0aW9uYWwp'@;
put 'Py5pbml0KCksZC5yZXNldFJvb3RDb21wb25lbnRUeXBlKGEuY29tcG9uZW50VHlwZXNbMF0pLGguY2xvc2VkfHwoaC5uZXh0KCksaC5jb21wbGV0ZSgpLGgudW5zdWJzY3JpYmUoKSl9fWNvbnN0IHdjZT1uZXcgU3QoIiIse2ZhY3Rvcnk6KCk9Pm5ldyBHbn0pLENXPW5ldyBTdCgiIix7cHJv'@;
put 'dmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+MX0pLENjZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIEhUZShjKXtyZXR1cm4geXAoMCxbe3Byb3ZpZGU6Q2NlLHVzZUV4aXN0aW5nOkxUZX0se3Byb3ZpZGU6dmNlLHVzZUV4aXN0aW5nOmN9XSl9ZnVuY3Rpb24gVlRlKGMpe3JldHVybiB5cCg5LFt7'@;
put 'cHJvdmlkZTpmY2UsdXNlVmFsdWU6X1RlfSx7cHJvdmlkZTpwY2UsdXNlVmFsdWU6e3NraXBOZXh0VHJhbnNpdGlvbjohIWM/LnNraXBJbml0aWFsVHJhbnNpdGlvbiwuLi5jfX1dKX1jb25zdCBTY2U9bmV3IFN0KCJST1VURVJfRk9SUk9PVF9HVUFSRCIpLEJUZT1bcGgse3Byb3ZpZGU6ZWIs'@;
put 'dXNlQ2xhc3M6Slp9LExvLHR4LHtwcm92aWRlOnl1LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gYmNlKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W0xvXX0sYlcsW11dO2xldCBCYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVy'@;
put 'bntuZ01vZHVsZTpjLHByb3ZpZGVyczpbQlRlLFtdLHtwcm92aWRlOmNiLG11bHRpOiEwLHVzZVZhbHVlOmF9LHtwcm92aWRlOlNjZSx1c2VGYWN0b3J5OlpUZSxkZXBzOltbTG8sbmV3IFIxLG5ldyB1ZF1dfSx7cHJvdmlkZTpsYix1c2VWYWx1ZTpkfHx7fX0sZD8udXNlSGFzaD97cHJvdmlk'@;
put 'ZTpaOCx1c2VDbGFzczpSX2V9Ontwcm92aWRlOlo4LHVzZUNsYXNzOlhhZX0se3Byb3ZpZGU6d1csdXNlRmFjdG9yeTooKT0+e2NvbnN0IGM9aGkoR3dlKSxsPWhpKEdhKSxhPWhpKGxiKSxkPWhpKHFSKSxoPWhpKGViKTtyZXR1cm4gYS5zY3JvbGxPZmZzZXQmJmMuc2V0T2Zmc2V0KGEuc2Ny'@;
put 'b2xsT2Zmc2V0KSxuZXcgeWNlKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/SFRlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10sZD8uaW5pdGlhbE5hdmlnYXRpb24/V1RlKGQpOltdLGQ/LmJpbmRUb0NvbXBvbmVudElucHV0cz95cCg4LFtRbGUs'@;
put 'e3Byb3ZpZGU6R1IsdXNlRXhpc3Rpbmc6UWxlfV0pLlx1MDI3NXByb3ZpZGVyczpbXSxkPy5lbmFibGVWaWV3VHJhbnNpdGlvbnM/VlRlKCkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpNY2UsdXNlRmFjdG9yeTpfY2V9LHtwcm92aWRlOkxVLG11bHRpOiEwLHVzZUV4aXN0aW5nOk1j'@;
put 'ZX1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6Y2IsbXVsdGk6ITAsdXNlVmFsdWU6YX1dfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihTY2UsOCkpfX1zdGF0aWN7dGhpcy5c'@;
put 'dTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBaVGUoYyl7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIFdUZShjKXtyZXR1cm5bImRpc2FibGVkIj09PWMuaW5pdGlhbE5hdmlnYXRpb24/eXAoMyxbe3Byb3Zp'@;
put 'ZGU6SVUsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGw9aGkoTG8pO3JldHVybigpPT57bC5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKX19fSx7cHJvdmlkZTpDVyx1c2VWYWx1ZToyfV0pLlx1MDI3NXByb3ZpZGVyczpbXSwiZW5hYmxlZEJsb2NraW5nIj09PWMuaW5pdGlh'@;
put 'bE5hdmlnYXRpb24/eXAoMixbe3Byb3ZpZGU6Q1csdXNlVmFsdWU6MH0se3Byb3ZpZGU6SVUsbXVsdGk6ITAsZGVwczpbRG9dLHVzZUZhY3Rvcnk6bD0+e2NvbnN0IGE9bC5nZXQoRF9lLFByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4oKT0+YS50aGVuKCgpPT5uZXcgUHJvbWlzZShkPT57Y29u'@;
put 'c3QgaD1sLmdldChMbyksZj1sLmdldCh3Y2UpO21jZShoLCgpPT57ZCghMCl9KSxsLmdldChxUikuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/ZHModm9pZCAwKTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3Qg'@;
put 'TWNlPW5ldyBTdCgiIik7dmFyIGRiPWZ1bmN0aW9uKGMpe3JldHVybiBjLmxpZ2h0PSJsaWdodCIsYy5kYXJrPSJkYXJrIixjfShkYnx8e30pLHhjZT1iKDU1MTg4KSxHVGU9Yig3ODc1NSk7Y29uc3QgU1c9e3VzZXJzX2FsbG93ZWQ6MSx2aWV3ZXJfcm93c19hbGxvd2VkOjE1LGVkaXRvcl9y'@;
put 'b3dzX2FsbG93ZWQ6MTUsc3RhZ2Vfcm93c19hbGxvd2VkOjEvMCxoaXN0b3J5X3Jvd3NfYWxsb3dlZDoxNSxzdWJtaXRfcm93c19saW1pdDo1LHZpZXdib3hfbGltaXQ6MSxsaW5lYWdlX2RhaWx5X2xpbWl0OjMsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MzUsdmlld2JveDohMCxmaWxlVXBs'@;
put 'b2FkOiEwLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfTt2YXIgdmg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy52aWV3ZXJfcm93c19hbGxvd2VkPTBdPSJ2aWV3ZXJfcm93c19hbGxvd2VkIixjW2MuZWRpdG9yX3Jvd3NfYWxsb3dlZD0xXT0iZWRpdG9yX3Jvd3NfYWxsb3dlZCIsY1tjLnN0'@;
put 'YWdlX3Jvd3NfYWxsb3dlZD0yXT0ic3RhZ2Vfcm93c19hbGxvd2VkIixjW2MuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9M109Imhpc3Rvcnlfcm93c19hbGxvd2VkIixjW2Muc3VibWl0X3Jvd3NfbGltaXQ9NF09InN1Ym1pdF9yb3dzX2xpbWl0IixjW2MudGFibGVzX2luX2xpYnJhcnlfbGltaXQ9'@;
put 'NV09InRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IixjW2Mudmlld2JveD02XT0idmlld2JveCIsY1tjLnZpZXdib3hfbGltaXQ9N109InZpZXdib3hfbGltaXQiLGNbYy5saW5lYWdlX2RhaWx5X2xpbWl0PThdPSJsaW5lYWdlX2RhaWx5X2xpbWl0IixjW2MuZmlsZVVwbG9hZD05XT0iZmlsZVVw'@;
put 'bG9hZCIsY1tjLmVkaXRSZWNvcmQ9MTBdPSJlZGl0UmVjb3JkIixjW2MuYWRkUmVjb3JkPTExXT0iYWRkUmVjb3JkIixjfSh2aHx8e30pLHloPWIoMzczNCksRWNlPWIubih5aCksTjA9YigxMzI0Nyk7bGV0IFE4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9c2V0RGNBZGFwdGVyU2V0'@;
put 'dGluZ3MoYSl7dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1hfWdldERjQWRhcHRlclNldHRpbmdzKCl7cmV0dXJuIHRoaXMuZGNBZGFwdGVyU2V0dGluZ3N9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4o'@;
put 'e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksTVc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudXNlckNoYW5nZT1uZXcgR259c2V0IHVzZXIoYSl7dGhpcy5fdXNlcj1hLHRoaXMudXNlckNoYW5nZS5uZXh0KGEp'@;
put 'fWdldCB1c2VyKCl7cmV0dXJuIHRoaXMuX3VzZXJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgSlJ7Y29u'@;
put 'c3RydWN0b3IoKXt0aGlzLmRlZmF1bHRTZXR0aW5ncz17cGVyc2lzdFNlbGVjdGVkVGhlbWU6ITAsc2VsZWN0ZWRUaGVtZTpkYi5saWdodH0sdGhpcy5zZXR0aW5ncz1uZXcgSnIodGhpcy5kZWZhdWx0U2V0dGluZ3MpLHRoaXMucmVzdG9yZUFwcFNldHRpbmdzKCl9cmVzdG9yZUFwcFNldHRp'@;
put 'bmdzKCl7dHJ5e2NvbnN0IGw9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFwcC1zZXR0aW5ncyIpO2lmKGwpe2NvbnN0IGE9SlNPTi5wYXJzZShsKTt0aGlzLnNldEFwcFNldHRpbmdzKGEpfWVsc2UgY29uc29sZS5pbmZvKCJObyBhcHAgc2V0dGluZ3Mgc3RvcmVkIGluIHRoZSBsb2NhbFN0b3Jh'@;
put 'Z2UsIHdlIHdpbGwgc2V0IHRvIGRlZmF1bHQgdmFsdWVzLiIpfWNhdGNoKGwpe2NvbnNvbGUud2FybigiRXJyb3IgcmVzdG9yaW5nIHNldHRpbmdzIGZyb20gbG9jYWwgc3RvcmdhZS4iLGwpfX1zdG9yZUFwcFNldHRpbmdzKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFwcC1zZXR0aW5ncyIs'@;
put 'SlNPTi5zdHJpbmdpZnkodGhpcy5zZXR0aW5ncy52YWx1ZSkpfXNldEFwcFNldHRpbmdzKGwpe3RoaXMuc2V0dGluZ3MubmV4dCh7Li4udGhpcy5zZXR0aW5ncy52YWx1ZSwuLi5sfSksdGhpcy5zdG9yZUFwcFNldHRpbmdzKCl9fWxldCBtYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPWEsdGhpcy5vblNpZGViYXJUb2dnbGU9bmV3IEtyLHRoaXMub25TdGFydHVwRGF0YUxvYWRlZD1uZXcgS3IsdGhpcy5vblNob3dBYm9ydE1vZGFsPW5ldyBLcix0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW49bmV3IEtyLHRoaXMub25EZW1vTGltaXRN'@;
put 'b2RhbFNob3c9bmV3IEtyLHRoaXMudmlld0xhc3RVcmw9bnVsbCx0aGlzLnNpZGViYXJDbG9zZUxpbWl0PTEyODAsdGhpcy5kYXJrTW9kZT1uZXcgSnIoITEpfXRvZ2dsZURhcmtNb2RlKGEpe3RoaXMuZGFya01vZGUubmV4dChhKSxhP2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMt'@;
put 'dGhlbWUiLCJkYXJrIik6ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy10aGVtZSIsImxpZ2h0IiksdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0QXBwU2V0dGluZ3Moe3NlbGVjdGVkVGhlbWU6YT9kYi5kYXJrOmRiLmxpZ2h0fSl9c2hvd0RlbW9MaW1pdE1vZGFsKGEpe3RoaXMu'@;
put 'b25EZW1vTGltaXRNb2RhbFNob3cuZW1pdChhKX1zaG93SW5mb01vZGFsKGE9IkluZm8iLGQpe3RoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KHttb2RhbFRpdGxlOmEsbWVzc2FnZTpkLHNhc1NlcnZpY2U6IiIsZGV0YWlsczpudWxsfSl9c2hvd0Fib3J0TW9kYWwoYSxkLGgsZj12b2lkIDAp'@;
put 'e2h8fChoPW51bGwpO2xldCB2PXtzYXNTZXJ2aWNlOmEsbWVzc2FnZTpkLGRldGFpbHM6aH07ZiYmKHYubW9kYWxUaXRsZT1mKSx0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh2KX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMub25SZXF1ZXN0c01vZGFsT3Blbi5lbWl0KCEwKX1jYXRjaFJl'@;
put 'c3BvbnNlRXJyb3IoYSxkKXtsZXQgaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCI7aWYoZC5lcnJvcil7bGV0IGY7aD1kLmVycm9yLm1lc3NhZ2UsZC5lcnJvci5kZXRhaWxzJiZkLmVycm9yLmRldGFpbHMubG9nJiYoZj1kLmVycm9yLmRldGFpbHMubG9nKSwoIWh8fGgudHJpbSgpLmxl'@;
put 'bmd0aDwxKSYmKGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiKSx0aGlzLnNob3dBYm9ydE1vZGFsKGEsaCx7TE9HOmZ9LCJSZXF1ZXN0IGVycm9yIil9ZWxzZSB0aGlzLnNob3dBYm9ydE1vZGFsKGEsaCl9dG9nZ2xlU2lkZWJhcigpe3RoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoKX1j'@;
put 'bG9zZVNpZGViYXIoKXt3aW5kb3cuaW5uZXJXaWR0aDx0aGlzLnNpZGViYXJDbG9zZUxpbWl0JiZ0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KHtvcGVuOiExfSl9b3BlblNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KHtvcGVuOiEwfSl9c3RhcnR1cERhdGFMb2FkZWQoKXt0'@;
put 'aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQuZW1pdCgpfWRpc3BhdGNoRXZlbnQoYSl7bGV0IGQ7ImZ1bmN0aW9uIj09dHlwZW9mIEV2ZW50P2Q9bmV3IEV2ZW50KGEpOihkPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGQuaW5pdEV2ZW50KGEsITAsITApKSx3aW5kb3cuZGlzcGF0Y2hF'@;
put 'dmVudChkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihKUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIFFS'@;
put 'e31jbGFzcyBlTHt9Y2xhc3MgQTJ7Y29uc3RydWN0b3IobCl7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCxsPyJzdHJpbmciPT10eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JF'@;
put 'YWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1oLnRvTG93ZXJDYXNlKCksdj1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShoLGYpLHRoaXMuaGVhZGVycy5oYXMoZik/dGhpcy5oZWFkZXJz'@;
put 'LmdldChmKS5wdXNoKHYpOnRoaXMuaGVhZGVycy5zZXQoZixbdl0pfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2VvZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLnNldEhlYWRlckVudHJpZXMoZCxhKX0pKTp0aGlzLmxhenlJ'@;
put 'bml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZF0pPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGEsZCl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKGwpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKGwudG9M'@;
put 'b3dlckNhc2UoKSl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpO3JldHVybiBhJiZhLmxlbmd0aD4wP2FbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFs'@;
put 'dWVzKCkpfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiYSJ9KX1zZXQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTps'@;
put 'LHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxhKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoYSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwpfWluaXQo'@;
put 'KXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIEEyP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaChsPT50aGlzLmFwcGx5'@;
put 'VXBkYXRlKGwpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKGwpe2wuaW5pdCgpLEFycmF5LmZyb20obC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChhPT57dGhpcy5oZWFkZXJzLnNldChhLGwuaGVhZGVycy5nZXQoYSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwubm9y'@;
put 'bWFsaXplZE5hbWVzLmdldChhKSl9KX1jbG9uZShsKXtjb25zdCBhPW5ldyBBMjtyZXR1cm4gYS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgQTI/dGhpcy5sYXp5SW5pdDp0aGlzLGEubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29u'@;
put 'Y2F0KFtsXSksYX1hcHBseVVwZGF0ZShsKXtjb25zdCBhPWwubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsLm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGQ9bC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksMD09PWQubGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9y'@;
put 'bWFsaXplZE5hbWUobC5uYW1lLGEpO2NvbnN0IGg9KCJhIj09PWwub3A/dGhpcy5oZWFkZXJzLmdldChhKTp2b2lkIDApfHxbXTtoLnB1c2goLi4uZCksdGhpcy5oZWFkZXJzLnNldChhLGgpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgZj1sLnZhbHVlO2lmKGYpe2xldCB2PXRoaXMuaGVhZGVycy5n'@;
put 'ZXQoYSk7aWYoIXYpcmV0dXJuO3Y9di5maWx0ZXIoTT0+LTE9PT1mLmluZGV4T2YoTSkpLDA9PT12Lmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoYSkpOnRoaXMuaGVhZGVycy5zZXQoYSx2KX1lbHNlIHRoaXMuaGVhZGVycy5kZWxl'@;
put 'dGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpfX1zZXRIZWFkZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXkuaXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhpcy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVT'@;
put 'ZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFkZXJzLmdldChhKSkpfX1jbGFzcyAkVGV7ZW5jb2Rl'@;
put 'S2V5KGwpe3JldHVybiBUY2UobCl9ZW5jb2RlVmFsdWUobCl7cmV0dXJuIFRjZShsKX1kZWNvZGVLZXkobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX1kZWNvZGVWYWx1ZShsKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGwpfX1jb25zdCBYVGU9LyUoXGRbYS1mMC05XSkvZ2ks'@;
put 'cVRlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6IjsiLCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBUY2UoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKFhUZSwobCxhKT0+cVRlW2FdPz9sKX1mdW5jdGlvbiB0TChjKXty'@;
put 'ZXR1cm5gJHtjfWB9Y2xhc3MgaW17Y29uc3RydWN0b3IobD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcgJFRlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90'@;
put 'IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uIEtUZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9m'@;
put 'KCI9IiksW3YsTV09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZhbHVlKGguc2xpY2UoZisxKSldLEk9YS5nZXQodil8fFtdO0kucHVzaChNKSxhLnNldCh2LEkpfSksYX0obC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxz'@;
put 'ZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25zdCBkPWwuZnJvbU9iamVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAodEwpOlt0TChkKV07dGhpcy5tYXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVs'@;
put 'bH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXty'@;
put 'ZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0'@;
put 'IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTphLnB1c2goe3BhcmFtOmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6'@;
put 'YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1h'@;
put 'cC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIiIT09bCkuam9pbigiJiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IGltKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNs'@;
put 'b25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygp'@;
put 'LmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKGw9Pntzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAuZ2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2Eu'@;
put 'cHVzaCh0TChsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVlKXt0aGlzLm1hcC5kZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8W107Y29uc3QgaD1kLmluZGV4T2YodEwobC52'@;
put 'YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRlbGV0ZShsLnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyBKVGV7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcg'@;
put 'TWFwfXNldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVybiB0aGlzLm1hcC5kZWxldGUobCksdGhpc31o'@;
put 'YXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gQWNlKGMpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24ga2NlKGMpe3JldHVybiB0eXBlb2YgQmxv'@;
put 'YjwidSImJmMgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIERjZShjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0YW5jZW9mIEZvcm1EYXRhfWNsYXNzIGx4e2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBv'@;
put 'cnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIFFUZShjKXtzd2l0Y2goYyl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6'@;
put 'Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhZi5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIWYud2l0'@;
put 'aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29udGV4dD1mLmNvbnRleHQpLGYucGFyYW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJh'@;
put 'bXMpLHRoaXMudHJhbnNmZXJDYWNoZT1mLnRyYW5zZmVyQ2FjaGUpLHRoaXMuaGVhZGVycz8/PW5ldyBBMix0aGlzLmNvbnRleHQ/Pz1uZXcgSlRlLHRoaXMucGFyYW1zKXtjb25zdCB2PXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PXYubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1h'@;
put 'O2Vsc2V7Y29uc3QgTT1hLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9YSsoLTE9PT1NPyI/IjpNPGEubGVuZ3RoLTE/IiYiOiIiKSt2fX1lbHNlIHRoaXMucGFyYW1zPW5ldyBpbSx0aGlzLnVybFdpdGhQYXJhbXM9YX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlz'@;
put 'LmJvZHk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keXx8QWNlKHRoaXMuYm9keSl8fGtjZSh0aGlzLmJvZHkpfHxEY2UodGhpcy5ib2R5KXx8ZnVuY3Rpb24gZUFlKGMpe3JldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmYyBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFt'@;
put 'c30odGhpcy5ib2R5KT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgaW0/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5'@;
put 'KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9ZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keXx8RGNlKHRoaXMuYm9keSk/bnVsbDprY2UodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpBY2UodGhpcy5ib2R5KT9udWxsOiJzdHJp'@;
put 'bmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiBpbT8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8'@;
put 'ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5PyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfWNsb25lKGw9e30pe2NvbnN0IGE9bC5tZXRob2R8fHRoaXMubWV0aG9kLGQ9bC51cmx8fHRoaXMudXJsLGg9bC5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLGY9bC50cmFuc2ZlckNhY2hl'@;
put 'Pz90aGlzLnRyYW5zZmVyQ2FjaGUsdj12b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxNPWwud2l0aENyZWRlbnRpYWxzPz90aGlzLndpdGhDcmVkZW50aWFscyxJPWwucmVwb3J0UHJvZ3Jlc3M/P3RoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0IEc9bC5oZWFkZXJzfHx0aGlzLmhlYWRl'@;
put 'cnMscmU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IHVlPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1sLnNldEhlYWRlcnMmJihHPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKCh5ZSxFZSk9PnllLnNldChFZSxsLnNldEhlYWRlcnNbRWVdKSxH'@;
put 'KSksbC5zZXRQYXJhbXMmJihyZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKCh5ZSxFZSk9PnllLnNldChFZSxsLnNldFBhcmFtc1tFZV0pLHJlKSksbmV3IGx4KGEsZCx2LHtwYXJhbXM6cmUsaGVhZGVyczpHLGNvbnRleHQ6dWUscmVwb3J0UHJvZ3Jlc3M6SSxyZXNwb25zZVR5'@;
put 'cGU6aCx3aXRoQ3JlZGVudGlhbHM6TSx0cmFuc2ZlckNhY2hlOmZ9KX19dmFyIGFtPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2VudD0wXT0iU2VudCIsY1tjLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIs'@;
put 'Y1tjLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZT00XT0iUmVzcG9uc2UiLGNbYy5Vc2VyPTVdPSJVc2VyIixjfShhbXx8e30pO2NsYXNzIHhXe2NvbnN0cnVjdG9yKGwsYT1jeC5PayxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRlcnN8fG5l'@;
put 'dyBBMix0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIG5MIGV4dGVuZHMgeFd7Y29u'@;
put 'c3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPWFtLlJlc3BvbnNlSGVhZGVyfWNsb25lKGw9e30pe3JldHVybiBuZXcgbkwoe2hlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1Rl'@;
put 'eHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIGU3IGV4dGVuZHMgeFd7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPWFtLlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1sLmJvZHk/bC5ib2R5'@;
put 'Om51bGx9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBlNyh7Ym9keTp2b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3Rh'@;
put 'dHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBoYiBleHRlbmRzIHhXe2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEsdGhpcy5t'@;
put 'ZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wuc3RhdHVz'@;
put 'fSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19dmFyIGN4PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQ29udGludWU9MTAwXT0iQ29udGludWUiLGNbYy5Td2l0Y2hpbmdQcm90b2NvbHM9MTAxXT0iU3dpdGNoaW5nUHJvdG9jb2xzIixjW2MuUHJvY2Vzc2luZz0x'@;
put 'MDJdPSJQcm9jZXNzaW5nIixjW2MuRWFybHlIaW50cz0xMDNdPSJFYXJseUhpbnRzIixjW2MuT2s9MjAwXT0iT2siLGNbYy5DcmVhdGVkPTIwMV09IkNyZWF0ZWQiLGNbYy5BY2NlcHRlZD0yMDJdPSJBY2NlcHRlZCIsY1tjLk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbj0yMDNdPSJOb25B'@;
put 'dXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLGNbYy5Ob0NvbnRlbnQ9MjA0XT0iTm9Db250ZW50IixjW2MuUmVzZXRDb250ZW50PTIwNV09IlJlc2V0Q29udGVudCIsY1tjLlBhcnRpYWxDb250ZW50PTIwNl09IlBhcnRpYWxDb250ZW50IixjW2MuTXVsdGlTdGF0dXM9MjA3XT0iTXVsdGlTdGF0'@;
put 'dXMiLGNbYy5BbHJlYWR5UmVwb3J0ZWQ9MjA4XT0iQWxyZWFkeVJlcG9ydGVkIixjW2MuSW1Vc2VkPTIyNl09IkltVXNlZCIsY1tjLk11bHRpcGxlQ2hvaWNlcz0zMDBdPSJNdWx0aXBsZUNob2ljZXMiLGNbYy5Nb3ZlZFBlcm1hbmVudGx5PTMwMV09Ik1vdmVkUGVybWFuZW50bHkiLGNbYy5G'@;
put 'b3VuZD0zMDJdPSJGb3VuZCIsY1tjLlNlZU90aGVyPTMwM109IlNlZU90aGVyIixjW2MuTm90TW9kaWZpZWQ9MzA0XT0iTm90TW9kaWZpZWQiLGNbYy5Vc2VQcm94eT0zMDVdPSJVc2VQcm94eSIsY1tjLlVudXNlZD0zMDZdPSJVbnVzZWQiLGNbYy5UZW1wb3JhcnlSZWRpcmVjdD0zMDddPSJU'@;
put 'ZW1wb3JhcnlSZWRpcmVjdCIsY1tjLlBlcm1hbmVudFJlZGlyZWN0PTMwOF09IlBlcm1hbmVudFJlZGlyZWN0IixjW2MuQmFkUmVxdWVzdD00MDBdPSJCYWRSZXF1ZXN0IixjW2MuVW5hdXRob3JpemVkPTQwMV09IlVuYXV0aG9yaXplZCIsY1tjLlBheW1lbnRSZXF1aXJlZD00MDJdPSJQYXlt'@;
put 'ZW50UmVxdWlyZWQiLGNbYy5Gb3JiaWRkZW49NDAzXT0iRm9yYmlkZGVuIixjW2MuTm90Rm91bmQ9NDA0XT0iTm90Rm91bmQiLGNbYy5NZXRob2ROb3RBbGxvd2VkPTQwNV09Ik1ldGhvZE5vdEFsbG93ZWQiLGNbYy5Ob3RBY2NlcHRhYmxlPTQwNl09Ik5vdEFjY2VwdGFibGUiLGNbYy5Qcm94'@;
put 'eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NDA3XT0iUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIixjW2MuUmVxdWVzdFRpbWVvdXQ9NDA4XT0iUmVxdWVzdFRpbWVvdXQiLGNbYy5Db25mbGljdD00MDldPSJDb25mbGljdCIsY1tjLkdvbmU9NDEwXT0iR29uZSIsY1tjLkxlbmd0aFJlcXVp'@;
put 'cmVkPTQxMV09Ikxlbmd0aFJlcXVpcmVkIixjW2MuUHJlY29uZGl0aW9uRmFpbGVkPTQxMl09IlByZWNvbmRpdGlvbkZhaWxlZCIsY1tjLlBheWxvYWRUb29MYXJnZT00MTNdPSJQYXlsb2FkVG9vTGFyZ2UiLGNbYy5VcmlUb29Mb25nPTQxNF09IlVyaVRvb0xvbmciLGNbYy5VbnN1cHBvcnRl'@;
put 'ZE1lZGlhVHlwZT00MTVdPSJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsY1tjLlJhbmdlTm90U2F0aXNmaWFibGU9NDE2XT0iUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsY1tjLkV4cGVjdGF0aW9uRmFpbGVkPTQxN109IkV4cGVjdGF0aW9uRmFpbGVkIixjW2MuSW1BVGVhcG90PTQxOF09IkltQVRlYXBv'@;
put 'dCIsY1tjLk1pc2RpcmVjdGVkUmVxdWVzdD00MjFdPSJNaXNkaXJlY3RlZFJlcXVlc3QiLGNbYy5VbnByb2Nlc3NhYmxlRW50aXR5PTQyMl09IlVucHJvY2Vzc2FibGVFbnRpdHkiLGNbYy5Mb2NrZWQ9NDIzXT0iTG9ja2VkIixjW2MuRmFpbGVkRGVwZW5kZW5jeT00MjRdPSJGYWlsZWREZXBl'@;
put 'bmRlbmN5IixjW2MuVG9vRWFybHk9NDI1XT0iVG9vRWFybHkiLGNbYy5VcGdyYWRlUmVxdWlyZWQ9NDI2XT0iVXBncmFkZVJlcXVpcmVkIixjW2MuUHJlY29uZGl0aW9uUmVxdWlyZWQ9NDI4XT0iUHJlY29uZGl0aW9uUmVxdWlyZWQiLGNbYy5Ub29NYW55UmVxdWVzdHM9NDI5XT0iVG9vTWFu'@;
put 'eVJlcXVlc3RzIixjW2MuUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlPTQzMV09IlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsY1tjLlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zPTQ1MV09IlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIixjW2MuSW50ZXJuYWxTZXJ2ZXJFcnJv'@;
put 'cj01MDBdPSJJbnRlcm5hbFNlcnZlckVycm9yIixjW2MuTm90SW1wbGVtZW50ZWQ9NTAxXT0iTm90SW1wbGVtZW50ZWQiLGNbYy5CYWRHYXRld2F5PTUwMl09IkJhZEdhdGV3YXkiLGNbYy5TZXJ2aWNlVW5hdmFpbGFibGU9NTAzXT0iU2VydmljZVVuYXZhaWxhYmxlIixjW2MuR2F0ZXdheVRp'@;
put 'bWVvdXQ9NTA0XT0iR2F0ZXdheVRpbWVvdXQiLGNbYy5IdHRwVmVyc2lvbk5vdFN1cHBvcnRlZD01MDVdPSJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsY1tjLlZhcmlhbnRBbHNvTmVnb3RpYXRlcz01MDZdPSJWYXJpYW50QWxzb05lZ290aWF0ZXMiLGNbYy5JbnN1ZmZpY2llbnRTdG9yYWdl'@;
put 'PTUwN109Ikluc3VmZmljaWVudFN0b3JhZ2UiLGNbYy5Mb29wRGV0ZWN0ZWQ9NTA4XT0iTG9vcERldGVjdGVkIixjW2MuTm90RXh0ZW5kZWQ9NTEwXT0iTm90RXh0ZW5kZWQiLGNbYy5OZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZD01MTFdPSJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1'@;
put 'aXJlZCIsY30oY3h8fHt9KTtmdW5jdGlvbiBFVyhjLGwpe3JldHVybntib2R5OmwsaGVhZGVyczpjLmhlYWRlcnMsY29udGV4dDpjLmNvbnRleHQsb2JzZXJ2ZTpjLm9ic2VydmUscGFyYW1zOmMucGFyYW1zLHJlcG9ydFByb2dyZXNzOmMucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOmMu'@;
put 'cmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpjLndpdGhDcmVkZW50aWFscyx0cmFuc2ZlckNhY2hlOmMudHJhbnNmZXJDYWNoZX19bGV0IFRXPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oYW5kbGVyPWF9cmVxdWVzdChhLGQsaD17fSl7bGV0IGY7aWYoYSBpbnN0YW5j'@;
put 'ZW9mIGx4KWY9YTtlbHNle2xldCBJLEc7ST1oLmhlYWRlcnMgaW5zdGFuY2VvZiBBMj9oLmhlYWRlcnM6bmV3IEEyKGguaGVhZGVycyksaC5wYXJhbXMmJihHPWgucGFyYW1zIGluc3RhbmNlb2YgaW0/aC5wYXJhbXM6bmV3IGltKHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3IGx4KGEs'@;
put 'ZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6SSxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6RyxyZXBvcnRQcm9ncmVzczpoLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpoLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpoLndpdGhDcmVkZW50'@;
put 'aWFscyx0cmFuc2ZlckNhY2hlOmgudHJhbnNmZXJDYWNoZX0pfWNvbnN0IHY9ZHMoZikucGlwZShxeShJPT50aGlzLmhhbmRsZXIuaGFuZGxlKEkpKSk7aWYoYSBpbnN0YW5jZW9mIGx4fHwiZXZlbnRzIj09PWgub2JzZXJ2ZSlyZXR1cm4gdjtjb25zdCBNPXYucGlwZShXbChJPT5JIGluc3Rh'@;
put 'bmNlb2YgZTcpKTtzd2l0Y2goaC5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKGYucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gTS5waXBlKFByKEk9PntpZihudWxsIT09SS5ib2R5JiYhKEkuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhbiBBcnJheUJ1ZmZlci4iKTtyZXR1cm4gSS5ib2R5fSkpO2Nhc2UiYmxvYiI6cmV0dXJuIE0ucGlwZShQcihJPT57aWYobnVsbCE9PUkuYm9keSYmIShJLmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNl'@;
put 'IGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIEkuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBNLnBpcGUoUHIoST0+e2lmKG51bGwhPT1JLmJvZHkmJiJzdHJpbmciIT10eXBlb2YgSS5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiBJLmJv'@;
put 'ZHl9KSk7ZGVmYXVsdDpyZXR1cm4gTS5waXBlKFByKEk9PkkuYm9keSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBNO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAke2gub2JzZXJ2ZX19YCl9fWRlbGV0ZShhLGQ9e30pe3JldHVy'@;
put 'biB0aGlzLnJlcXVlc3QoIkRFTEVURSIsYSxkKX1nZXQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJHRVQiLGEsZCl9aGVhZChhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkhFQUQiLGEsZCl9anNvbnAoYSxkKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsYSx7cGFyYW1z'@;
put 'OihuZXcgaW0pLmFwcGVuZChkLCJKU09OUF9DQUxMQkFDSyIpLG9ic2VydmU6ImJvZHkiLHJlc3BvbnNlVHlwZToianNvbiJ9KX1vcHRpb25zKGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsYSxkKX1wYXRjaChhLGQsaD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUEFU'@;
put 'Q0giLGEsRVcoaCxkKSl9cG9zdChhLGQsaD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUE9TVCIsYSxFVyhoLGQpKX1wdXQoYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBVVCIsYSxFVyhoLGQpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk'@;
put 'fHxjKShDcihRUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFJjZShjLGwpe3JldHVybiBsKGMpfWZ1bmN0aW9uIGFBZShjLGwpe3JldHVybihhLGQpPT5sLmludGVyY2VwdChhLHtoYW5k'@;
put 'bGU6aD0+YyhoLGQpfSl9Y29uc3Qgb0FlPW5ldyBTdCgiIiksdXg9bmV3IFN0KCIiKSxMY2U9bmV3IFN0KCIiKSxPY2U9bmV3IFN0KCIiKTtmdW5jdGlvbiBsQWUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShoaShvQWUse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1'@;
put 'Y2VSaWdodChhQWUsUmNlKSk7Y29uc3QgZD1oaShCZiksaD1kLmFkZCgpO3JldHVybiBjKGwsYSkucGlwZSgkTSgoKT0+ZC5yZW1vdmUoaCkpKX19bGV0IFBjZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUVJ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcigpLHRoaXMuYmFja2VuZD1hLHRoaXMuaW5q'@;
put 'ZWN0b3I9ZCx0aGlzLmNoYWluPW51bGwsdGhpcy5wZW5kaW5nVGFza3M9aGkoQmYpO2NvbnN0IGg9aGkoT2NlLHtvcHRpb25hbDohMH0pO3RoaXMuYmFja2VuZD1oPz9hfWhhbmRsZShhKXtpZihudWxsPT09dGhpcy5jaGFpbil7Y29uc3QgaD1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnRoaXMu'@;
put 'aW5qZWN0b3IuZ2V0KHV4KSwuLi50aGlzLmluamVjdG9yLmdldChMY2UsW10pXSkpO3RoaXMuY2hhaW49aC5yZWR1Y2VSaWdodCgoZix2KT0+ZnVuY3Rpb24gc0FlKGMsbCxhKXtyZXR1cm4oZCxoKT0+SzAoYSwoKT0+bChkLGY9PmMoZixoKSkpfShmLHYsdGhpcy5pbmplY3RvciksUmNlKX1j'@;
put 'b25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZSgkTSgoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKGQpKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8YykoQ3IoZUwpLENyKHFsKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgZkFlPS9eXClcXVx9Jyw/XG4vO2xldCBIY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnhockZh'@;
put 'Y3Rvcnk9YX1oYW5kbGUoYSl7aWYoIkpTT05QIj09PWEubWV0aG9kKXRocm93IG5ldyBucigtMjgwMCwhMSk7Y29uc3QgZD10aGlzLnhockZhY3Rvcnk7cmV0dXJuKGQuXHUwMjc1bG9hZEltcGw/VXUoZC5cdTAyNzVsb2FkSW1wbCgpKTpkcyhudWxsKSkucGlwZShqMSgoKT0+bmV3IFF0KGY9'@;
put 'Pntjb25zdCB2PWQuYnVpbGQoKTtpZih2Lm9wZW4oYS5tZXRob2QsYS51cmxXaXRoUGFyYW1zKSxhLndpdGhDcmVkZW50aWFscyYmKHYud2l0aENyZWRlbnRpYWxzPSEwKSxhLmhlYWRlcnMuZm9yRWFjaCgoR2Usc3QpPT52LnNldFJlcXVlc3RIZWFkZXIoR2Usc3Quam9pbigiLCIpKSksYS5o'@;
put 'ZWFkZXJzLmhhcygiQWNjZXB0Iil8fHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWEuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25zdCBHZT1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PUdl'@;
put 'JiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsR2UpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBHZT1hLnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO3YucmVzcG9uc2VUeXBlPSJqc29uIiE9PUdlP0dlOiJ0ZXh0In1jb25zdCBNPWEuc2VyaWFsaXplQm9keSgpO2xldCBJ'@;
put 'PW51bGw7Y29uc3QgRz0oKT0+e2lmKG51bGwhPT1JKXJldHVybiBJO2NvbnN0IEdlPXYuc3RhdHVzVGV4dHx8Ik9LIixzdD1uZXcgQTIodi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkscHQ9ZnVuY3Rpb24gcEFlKGMpe3JldHVybiJyZXNwb25zZVVSTCJpbiBjJiZjLnJlc3BvbnNlVVJMP2Mu'@;
put 'cmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/Yy5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHYpfHxhLnVybDtyZXR1cm4gST1uZXcgbkwoe2hlYWRlcnM6c3Qsc3RhdHVzOnYuc3RhdHVzLHN0YXR1'@;
put 'c1RleHQ6R2UsdXJsOnB0fSksSX0scmU9KCk9PntsZXR7aGVhZGVyczpHZSxzdGF0dXM6c3Qsc3RhdHVzVGV4dDpwdCx1cmw6ZHR9PUcoKSxxdD1udWxsO3N0IT09Y3guTm9Db250ZW50JiYocXQ9dHlwZW9mIHYucmVzcG9uc2U+InUiP3YucmVzcG9uc2VUZXh0OnYucmVzcG9uc2UpLDA9PT1z'@;
put 'dCYmKHN0PXF0P2N4Lk9rOjApO2xldCBtbj1zdD49MjAwJiZzdDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgcXQpe2NvbnN0IHduPXF0O3F0PXF0LnJlcGxhY2UoZkFlLCIiKTt0cnl7cXQ9IiIhPT1xdD9KU09OLnBhcnNlKHF0KTpudWxsfWNhdGNo'@;
put 'KGhuKXtxdD13bixtbiYmKG1uPSExLHF0PXtlcnJvcjpobix0ZXh0OnF0fSl9fW1uPyhmLm5leHQobmV3IGU3KHtib2R5OnF0LGhlYWRlcnM6R2Usc3RhdHVzOnN0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fHx2b2lkIDB9KSksZi5jb21wbGV0ZSgpKTpmLmVycm9yKG5ldyBoYih7ZXJyb3I6cXQs'@;
put 'aGVhZGVyczpHZSxzdGF0dXM6c3Qsc3RhdHVzVGV4dDpwdCx1cmw6ZHR8fHZvaWQgMH0pKX0sdWU9R2U9Pntjb25zdHt1cmw6c3R9PUcoKSxwdD1uZXcgaGIoe2Vycm9yOkdlLHN0YXR1czp2LnN0YXR1c3x8MCxzdGF0dXNUZXh0OnYuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IiLHVybDpz'@;
put 'dHx8dm9pZCAwfSk7Zi5lcnJvcihwdCl9O2xldCB5ZT0hMTtjb25zdCBFZT1HZT0+e3llfHwoZi5uZXh0KEcoKSkseWU9ITApO2xldCBzdD17dHlwZTphbS5Eb3dubG9hZFByb2dyZXNzLGxvYWRlZDpHZS5sb2FkZWR9O0dlLmxlbmd0aENvbXB1dGFibGUmJihzdC50b3RhbD1HZS50b3RhbCks'@;
put 'InRleHQiPT09YS5yZXNwb25zZVR5cGUmJnYucmVzcG9uc2VUZXh0JiYoc3QucGFydGlhbFRleHQ9di5yZXNwb25zZVRleHQpLGYubmV4dChzdCl9LEJlPUdlPT57bGV0IHN0PXt0eXBlOmFtLlVwbG9hZFByb2dyZXNzLGxvYWRlZDpHZS5sb2FkZWR9O0dlLmxlbmd0aENvbXB1dGFibGUmJihz'@;
put 'dC50b3RhbD1HZS50b3RhbCksZi5uZXh0KHN0KX07cmV0dXJuIHYuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscmUpLHYuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHVlKSx2LmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHVlKSx2LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix1ZSksYS5y'@;
put 'ZXBvcnRQcm9ncmVzcyYmKHYuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEVlKSxudWxsIT09TSYmdi51cGxvYWQmJnYudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixCZSkpLHYuc2VuZChNKSxmLm5leHQoe3R5cGU6YW0uU2VudH0pLCgpPT57di5yZW1vdmVFdmVudExp'@;
put 'c3RlbmVyKCJlcnJvciIsdWUpLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHVlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHJlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHVlKSxhLnJlcG9ydFByb2dyZXNzJiYodi5yZW1vdmVFdmVudExpc3RlbmVyKCJw'@;
put 'cm9ncmVzcyIsRWUpLG51bGwhPT1NJiZ2LnVwbG9hZCYmdi51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEJlKSksdi5yZWFkeVN0YXRlIT09di5ET05FJiZ2LmFib3J0KCl9fSkpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KShDcihtc2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBEVz1uZXcgU3QoIiIpLE5jZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYU1JGLVRPS0VOIn0pLFZj'@;
put 'ZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYLVhTUkYtVE9LRU4ifSk7Y2xhc3MgQmNle31sZXQgdkFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZG9jPWEsdGhpcy5wbGF0Zm9ybT1kLHRoaXMuY29va2llTmFtZT1oLHRoaXMubGFz'@;
put 'dENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2NvbnN0IGE9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gYSE9PXRoaXMubGFzdENvb2tpZVN0cmlu'@;
put 'ZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPXNzZShhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKG1vKSxDcihpcyks'@;
put 'Q3IoTmNlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geUFlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFoaShEVyl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09'@;
put 'PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9aGkoQmNlKS5nZXRUb2tlbigpLGg9aGkoVmNlKTtyZXR1cm4gbnVsbCE9ZCYmIWMuaGVhZGVycy5oYXMoaCkmJihjPWMuY2xvbmUoe2hlYWRlcnM6'@;
put 'Yy5oZWFkZXJzLnNldChoLGQpfSkpLGwoYyl9dmFyIHNtPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuSW50ZXJjZXB0b3JzPTBdPSJJbnRlcmNlcHRvcnMiLGNbYy5MZWdhY3lJbnRlcmNlcHRvcnM9MV09IkxlZ2FjeUludGVyY2VwdG9ycyIsY1tjLkN1c3RvbVhzcmZDb25maWd1cmF0aW9uPTJd'@;
put 'PSJDdXN0b21Yc3JmQ29uZmlndXJhdGlvbiIsY1tjLk5vWHNyZlByb3RlY3Rpb249M109Ik5vWHNyZlByb3RlY3Rpb24iLGNbYy5Kc29ucFN1cHBvcnQ9NF09Ikpzb25wU3VwcG9ydCIsY1tjLlJlcXVlc3RzTWFkZVZpYVBhcmVudD01XT0iUmVxdWVzdHNNYWRlVmlhUGFyZW50IixjW2MuRmV0'@;
put 'Y2g9Nl09IkZldGNoIixjfShzbXx8e30pO2Z1bmN0aW9uIHQ3KGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19ZnVuY3Rpb24gYkFlKC4uLmMpe2NvbnN0IGw9W1RXLEhjZSxQY2Use3Byb3ZpZGU6UVIsdXNlRXhpc3Rpbmc6UGNlfSx7cHJvdmlkZTplTCx1c2VF'@;
put 'eGlzdGluZzpIY2V9LHtwcm92aWRlOnV4LHVzZVZhbHVlOnlBZSxtdWx0aTohMH0se3Byb3ZpZGU6RFcsdXNlVmFsdWU6ITB9LHtwcm92aWRlOkJjZSx1c2VDbGFzczp2QWV9XTtmb3IoY29uc3QgYSBvZiBjKWwucHVzaCguLi5hLlx1MDI3NXByb3ZpZGVycyk7cmV0dXJuIGZ1bmN0aW9uIE1m'@;
put 'KGMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6Y319KGwpfWNvbnN0IGpjZT1uZXcgU3QoIiIpO2xldCB3QWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1z'@;
put 'dGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbYkFlKHQ3KHNtLkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3ZpZGU6amNlLHVzZUZhY3Rvcnk6bEFlfSx7cHJvdmlkZTp1eCx1c2VFeGlzdGluZzpqY2UsbXVsdGk6ITB9XSkpXX0pfX1yZXR1cm4gY30pKCksS2NlPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMudXJsPSIiLHRoaXMuZHJpdmVVcmw9IiIsdGhpcy5odHRwT3B0aW9ucz17d2l0aENyZWRlbnRpYWxzOiEwfX1zZXR1cCgpe2NvbnN0IGE9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0'@;
put 'RGNBZGFwdGVyU2V0dGluZ3MoKTt0aGlzLnVybD1gJHthPy5zZXJ2ZXJVcmx8fCIifS9TQVNqc0FwaWAsdGhpcy5kcml2ZVVybD1gJHt0aGlzLnVybH0vZHJpdmVgfWdldFNlcnZlckluZm8oKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnVybH0vaW5mb2ApfWdldEZpbGVGcm9tRHJp'@;
put 'dmUoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5kcml2ZVVybH0vZmlsZS8/X2ZpbGVQYXRoPSR7YX1gLHRoaXMuaHR0cE9wdGlvbnMpfWdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZvbGRlcj9fZm9s'@;
put 'ZGVyUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlVHJlZUZyb21Ecml2ZSgpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGV0cmVlYCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlRnJvbUZpbGVUcmVlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgo'@;
put 'ZCxoKT0+e3RoaXMuZ2V0RmlsZVRyZWVGcm9tRHJpdmUoKS5zdWJzY3JpYmUoZj0+e2NvbnN0IE09dGhpcy5maW5kSW5UcmVlKGYudHJlZSxhKTtkKE0pfSl9KX1maW5kSW5UcmVlKGEsZCl7aWYoYS5yZWxhdGl2ZVBhdGg9PT1kKXJldHVybiBhO2ZvcihsZXQgaCBvZiBhLmNoaWxkcmVuKXtj'@;
put 'b25zdCBmPXRoaXMuZmluZEluVHJlZShoLGQpO2lmKGYpcmV0dXJuIGZ9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKFRXKSxDcihROCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMs'@;
put 'cHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLElXPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMudml5YUFwaXM9e0FuYWx5dGljc19JbnNpZ2h0czp7aW5zaWdodHM6Ii9pbnNpZ2h0cyJ9LFZpc3Vh'@;
put 'bGlzYXRpb246e3JlcG9ydHM6Ii9yZXBvcnRzIixyZXBvcnRJbWFnZXM6Ii9yZXBvcnRJbWFnZXMiLHJlcG9ydFRyYW5zZm9ybXM6Ii9yZXBvcnRUcmFuc2Zvcm1zIix2aXN1YWxBbmFseXRpY3M6Ii92aXN1YWxBbmFseXRpY3MifSxDb21wdXRlOntqb2JzOiIvam9iRGVmaW5pdGlvbnMiLGpv'@;
put 'YkV4ZWN1dGlvbjoiL2pvYkV4ZWN1dGlvbiIsY29udGV4dHM6Ii9jb21wdXRlL2NvbnRleHRzIn0sRGVjaXNpb25fTWFuYWdlbWVudDp7bW9kZWxNYW5hZ2VtZW50OiIvbW9kZWxNYW5hZ2VtZW50Iixtb2RlbFJlcG9zaXRvcnk6Ii9tb2RlbFJlcG9zaXRvcnkiLG1vZGVsUHVibGlzaDoiL21v'@;
put 'ZGVsUHVibGlzaCIsbWljcm9hbmFseXRpY1Njb3JlOiIvbWljcm9hbmFseXRpY1Njb3JlIixkYXRhTWluaW5nOiIvZGF0YU1pbmluZyIsYnVzaW5lc3NSdWxlczoiL2J1c2luZXNzUnVsZXMiLHJlZmVyZW5jZURhdGE6Ii9yZWZlcmVuY2VEYXRhIix0cmVhdG1lbnREZWZpbml0aW9uczoiL3Ry'@;
put 'ZWF0bWVudERlZmluaXRpb25zIixzdWJqZWN0Q29udGFjdHM6Ii9zdWJqZWN0Q29udGFjdHMiLGRlY2lzaW9uc1J1bnRpbWVCdWlsZGVyOiIvZGVjaXNpb25zUnVudGltZUJ1aWxkZXIifSxDb3JlX1NlcnZpY2VzOntmb2xkZXJzOiIvZm9sZGVycyIsZmlsZXM6Ii9maWxlcyIsYW5ub3RhdGlv'@;
put 'bnM6Ii9hbm5vdGF0aW9ucyIsYXV0aG9yaXphdGlvbjoiL2F1dGhvcml6YXRpb24iLHJlbGF0aW9uc2hpcHM6Ii9yZWxhdGlvbnNoaXBzIixTQVNMb2dvbjoiL1NBU0xvZ29uIn0sQXV0b21hdGVkX01hY2hpbmVfTGVhcm5pbmc6e21sUGlwZWxpbmVBdXRvbWF0aW9uOiIvbWxQaXBlbGluZUF1'@;
put 'dG9tYXRpb24ifSxPdGhlcjp7aWRlbnRpdGllczoiL2lkZW50aXRpZXMifX0sdGhpcy5zZXJ2ZXJVcmw9IiJ9c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy5zZXJ2ZXJVcmw9YT8uc2VydmVyVXJsfHwiIn1nZXRBbGxDb2xs'@;
put 'ZWN0aW9ucygpe3JldHVybiB0aGlzLnZpeWFBcGlzfWdldEJ5VXJsKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QnlDb2xsZWN0aW9uKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7'@;
put 'd2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzYCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlz'@;
put 'LnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Rm9sZGVyQnlQYXRoKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0p'@;
put 'fWdldEZvbGRlck1lbWJlcnMoYSl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9mb2xkZXJzL2ZvbGRlcnMvJHthfS9tZW1iZXJzYCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QWRtaW5Hcm91cHMoYT01ZTMpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0v'@;
put 'aWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEN1cnJlbnRVc2VyKCl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9pZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNlcmAse3dpdGhDcmVkZW50aWFsczoh'@;
put 'MH0pfWdldChhLGQpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGEsZCkucGlwZShxOChoPT4oY29uc29sZS5sb2coInVybCIsYSksY29uc29sZS5sb2coImVyci5zdGF0dXMiLGguc3RhdHVzKSw0NDk9PT1oLnN0YXR1c3x8NDAxPT09aC5zdGF0dXM/dGhpcy5odHRwLmdldChhLGQpOkdNKCgpPT5o'@;
put 'KSkpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihUVyksQ3IoUTgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxWbz0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEkpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy51c2VyU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5zYXNqc1NlcnZpY2U9Zix0aGlzLnNhc1ZpeWFTZXJ2aWNlPXYsdGhpcy5sb2dnZXJTZXJ2aWNlPU0s'@;
put 'dGhpcy5yb3V0ZXI9SSx0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXI9bmV3IEtyLHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlcj1uZXcgS3IsdGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlcj1uZXcgS3IsdGhpcy5zYXNqc0FkYXB0ZXI9bmV3KEVjZSgpKSx0aGlzLmFwcExvY0NoZWNr'@;
put 'UGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBKcighMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IEpyKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMu'@;
put 'c2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5zYXNWaXlhU2VydmljZS5zZXR1cCgpLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Mpe3N3aXRjaCh0aGlzLnNhc2pzQWRhcHRlcj1uZXcoRWNlKCkpKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MpLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Muc2VydmVyVHlw'@;
put 'ZSl7Y2FzZSBOMC5ZLlNhc1ZpeWE6dGhpcy5jaGVja1ZpeWFEZXBsb3kodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncy5hcHBMb2N8fCIiKTticmVhaztjYXNlIE4wLlkuU2FzOTp0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpO2JyZWFrO2Nhc2UgTjAuWS5TYXNqczp0aGlzLmNo'@;
put 'ZWNrU2FzanNEZXBsb3koKX0iUmVkaXJlY3RlZCI9PT10aGlzLmdldFNhc2pzQ29uZmlnKCkubG9naW5NZWNoYW5pc20mJnRoaXMuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGE9PnthJiZ0aGlzLnNhc2pzQWRhcHRlci5sb2dJbigpLnRoZW4oZD0+e2NvbnNvbGUubG9nKCJyZXMiLGQpfSl9KX1l'@;
put 'bHNlIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQWRhcHRlciBzZXR0aW5ncyAoaW5kZXguaHRtbCkgYXJlIG5vdCBwcmVzZW50LiIpfXJlcXVlc3QoYSxkLGgsZil7cmV0dXJuIGZ8fChmPXt9KSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nUmVxdWVzdERhdGEoYT0i'@;
put 'c2VydmljZXMvIithLGQpLG5ldyBQcm9taXNlKCh2LE0pPT57dGhpcy5zYXNqc0FkYXB0ZXIucmVxdWVzdChhLGQsaCwoKT0+e3RoaXMuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKEk9Pntjb25zdCBHPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChyZT0+cmUu'@;
put 'c2VydmljZUxpbms9PT1hKTtpZighMT09PUkubG9naW4mJih0aGlzLnNob3VsZExvZ2luLm5leHQoITApLE0oe2FkYXB0ZXJSZXNwb25zZTohMSxsb2c6Rz8ubG9nRmlsZX0pKSwhdGhpcy51c2VyU2VydmljZS51c2VyJiZJLk1GX0dFVFVTRVImJih0aGlzLnVzZXJTZXJ2aWNlLnVzZXI9e3Vz'@;
put 'ZXJuYW1lOkkuTUZfR0VUVVNFUn0pLEkuU1lTU0lURSYmKHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXIuZW1pdChJLlNZU1NJVEUpLHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmxlbmd0aD4wJiYodGhpcy5nZXRMaWNlbnNlU2l0ZUlkKCkuaW5jbHVkZXMoSS5TWVNTSVRFKXx8dGhpcy5pbmNv'@;
put 'cnJlY3RTaXRlSWRFbWl0dGVyLmVtaXQoSS5TWVNTSVRFKSkpLDQwND09PUkuc3RhdHVzJiZNKHthZGFwdGVyUmVzcG9uc2U6e01FU1NBR0U6SS5ib2R5fHwiU0FTIFJlc3BvbmRlZCB3aXRoIGVycm9yIn0sbG9nOkc/LmxvZ0ZpbGV9KSx0eXBlb2YgSS5zYXNqc0Fib3J0PCJ1Iil7Y29uc3Qg'@;
put 'cmU9SSx1ZT1yZS5zYXNqc0Fib3J0WzBdLk1TRyx5ZT1yZS5zYXNqc0Fib3J0WzBdLk1BQztpZih1ZS5pbmNsdWRlcygiRGF0YV9Db250cm9sbGVyX1NldHRpbmdzKFN0b3JlZFByb2Nlc3MpIG5vdCBmb3VuZCIpKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgp'@;
put 'LHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSx2b2lkIE0oe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6dWV9LGxvZzpHPy5sb2dGaWxlfSk7Zj8uc3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbHx8dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoYS5yZXBsYWNlKCJz'@;
put 'ZXJ2aWNlcy8iLCIiKSx1ZSx7U1lTV0FSTklOR1RFWFQ6cmUuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOnJlLlNZU0VSUk9SVEVYVCxNQUM6eWV9KSxNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOnVlfSxsb2c6Rz8ubG9nRmlsZX0pfXYoe2FkYXB0ZXJSZXNwb25zZTpJLGxvZzpHPy5s'@;
put 'b2dGaWxlfSl9LEk9Pntjb25zb2xlLmVycm9yKEkpO2NvbnN0IEc9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKHJlPT5yZS5zZXJ2aWNlTGluaz09PWEpO2lmKEkuZXJyb3Ipe2xldCB1ZSxyZT1JLmVycm9yLm1lc3NhZ2U7SS5lcnJvci5kZXRhaWxzJiZJLmVycm9y'@;
put 'LmRldGFpbHMubG9nJiYodWU9SS5lcnJvci5kZXRhaWxzLmxvZyksKCFyZXx8cmUudHJpbSgpLmxlbmd0aDwxKSYmKHJlPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksZj8uc3VwcHJlc3NFcnJvckFib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEscmUs'@;
put 'e0xPRzp1ZX0sIlJlcXVlc3QgZXJyb3IiKSxNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOnJlfSxsb2c6Rz8ubG9nRmlsZX0pfU0oe2FkYXB0ZXJSZXNwb25zZTpJLGxvZzpHPy5sb2dGaWxlfSl9KX0pfXVwbG9hZEZpbGUoYSxkLGgpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e3RoaXMu'@;
put 'c2FzanNBZGFwdGVyLnVwbG9hZEZpbGUoYSxkLGgpLnRoZW4oTT0+e2NvbnN0IEk9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKEc9PiJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIj09PUcuc2VydmljZUxpbmspO2Yoe2FkYXB0ZXJSZXNwb25zZTpNLGxvZzpJPy5s'@;
put 'b2dGaWxlfSl9LE09Pntjb25zdCBJPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChHPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1HLnNlcnZpY2VMaW5rKTt2KHtyZXNwb25zZTpNLGxvZzpJPy5sb2dGaWxlfSl9KX0pfWxvZ2luKGEsZCl7dmFyIGg9dGhp'@;
put 'cztyZXR1cm4gUShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0U2VydmVyVHlwZSgpPT09TjAuWS5TYXNqcz8iY2xpZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKHY9Pih2LmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJu'@;
put 'YW1lOnYudXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5nJiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIXYuaXNMb2dnZWRJbiksdi5pc0xvZ2dlZEluKSx2'@;
put 'PT4oY29uc29sZS5lcnJvcih2KSxoLnNob3VsZExvZ2luLm5leHQoITApLCExKSkuY2F0Y2godj0+KDQwMz09PXYmJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfXJlbG9hZFN0YXJ0dXBEYXRhKCl7dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKX1n'@;
put 'ZXRMaWNlbnNlU2l0ZUlkKCl7cmV0dXJuIHRoaXMubGljZW5zZV9zaXRlX2lkLnZhbHVlfHxbXX1zZXRMaWNlbnNlU2l0ZUlkKGEpe3RoaXMubGljZW5zZV9zaXRlX2lkLm5leHQoIm9iamVjdCI9PXR5cGVvZiBhP2E6W2FdKX1jaGVja1Nhc2pzRGVwbG95KCl7dmFyIGE9dGhpcztyZXR1cm4g'@;
put 'UShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2'@;
put 'ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0s'@;
put 'Zj0+e2NvbnN0IHY9InN0cmluZyI9PXR5cGVvZiBmLmVycm9yP2YuZXJyb3I6SlNPTi5zdHJpbmdpZnkoZi5lcnJvcnx8Zik7di5pbmNsdWRlcygiVW5hdXRob3JpemVkIik/KGEuc2hvdWxkTG9naW4ubmV4dCghMCksYS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoTT0+eyExPT09TSYmbG9jYXRp'@;
put 'b24ucmVsb2FkKCl9KSk6di5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJihjb25zb2xlLndhcm4oIlNBU2pzIFNBUyBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5y'@;
put 'b3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKX0pfSkoKX1zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPVEoZnVuY3Rpb24qKGgsZil7YS5jaGVja2luZ0ludGVydmFs'@;
put 'PXNldEludGVydmFsKFEoZnVuY3Rpb24qKCl7YS5zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKHY9Pnt2JiYoY2xlYXJJbnRlcnZhbChhLmNoZWNraW5nSW50ZXJ2YWwpLGgodikpfSkuY2F0Y2godj0+e2NsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxmKHYpfSl9KSwx'@;
put 'ZTMpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KSgpfXNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57Y29uc3Qgdj1gJHth'@;
put 'LmdldFNhc2pzQ29uZmlnKCkuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNqc1NlcnZpY2UuZ2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUodikuc3Vic2NyaWJlKE09PntNLmZpbGVzLmluY2x1ZGVzKCJtYWtlZGF0YS5zYXMiKT9kKCExKTpkKCEwKX0sTT0+eygic3RyaW5nIj09dHlw'@;
put 'ZW9mIE0uZXJyb3I/TS5lcnJvcjpKU09OLnN0cmluZ2lmeShNLmVycm9yfHxNKSkuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiZoKCl9KX0pfSkoKX1jaGVja1ZpeWFEZXBsb3koYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgdixmPSExO2lmKHR5cGVv'@;
put 'ZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiKXtjb25zdCBNPXlpZWxkIGQuYXBwTG9jQ2hlY2soYSk7Zj1NLmZvdW5kLHY9TS5lcnJvck1lc3NhZ2V9ZWxzZSBmPXlpZWxkIGQuYXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpO2Y/ZC52aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgp'@;
put 'LnRoZW4oTT0+e00/ZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTooZC5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpfSxNPT57Y29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgbG9va2luZyBmb3IgdGhl'@;
put 'IGZpbGU6IG1ha2VkYXRhLnNhcyIsTSl9KTpkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsKHZ8fCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MsIG9yIEFQSSBub3QgcmVhY2hhYmxlLiBDaGVjayB0aGUgQURBUFRFUiBjb25m'@;
put 'aWd1cmF0aW9uLiIpK2BcbkFwcExvYzogJHthfWApfSkoKX12aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57Y29uc3QgZj1hLmdldFNhc2pzQ29uZmlnKCksdj1gJHtmLmFwcExvY30vc2Vy'@;
put 'dmljZXMvYWRtaW5gO2Euc2FzVml5YVNlcnZpY2UuZ2V0Rm9sZGVyQnlQYXRoKHYpLnN1YnNjcmliZShNPT57Y29uc3QgST1NLmlkO0l8fChjb25zb2xlLmVycm9yKGBGb2xkZXIgSUQgaXMgbm90IHByZXNlbnQuICR7dn1gLGYpLGQoITEpKSxhLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlck1l'@;
put 'bWJlcnMoSSkuc3Vic2NyaWJlKEc9PntHLml0ZW1zLnNvbWUocmU9PiJtYWtlZGF0YSI9PT1yZS5uYW1lKT9kKCExKTpkKCEwKX0sRz0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIGdldHRpbmcgZm9sZGVyIGNvbnRlbnRzIixHKSxoKCl9KX0sTT0+e2NvbnNvbGUud2FybigiRXJyb3IgZ2V0dGlu'@;
put 'ZyBmb2xkZXIgaW5mbyIsTSksaChNKX0pfSl9KSgpfWFwcExvY0NoZWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGg9UShmdW5jdGlvbiooZix2KXtsZXQgSSxNPSIiO3RyeXtJPXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRj'@;
put 'aChHKXsiTG9naW5SZXF1aXJlZEVycm9yIj09PUcubmFtZT8oZC5hcHBMb2NDaGVja1BlbmRpbmc9ITAsZC5zaG91bGRMb2dpbi5uZXh0KCEwKSxmKHtmb3VuZDohMX0pKTpNPSJOb3RGb3VuZGVFcnJvciI9PT1HLm5hbWU/Ry5tZXNzYWdlOiJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2Vu'@;
put 'dCBvbiB0aGUgY3VycmVudCBhcHBMb2MsIG9yIEFQSSBub3QgcmVhY2hhYmxlLiBDaGVjayB0aGUgQURBUFRFUiBjb25maWd1cmF0aW9uLiJ9aWYoTS5sZW5ndGgpcmV0dXJuIGNvbnNvbGUud2FybihNKSxmKHtmb3VuZDohMSxlcnJvck1lc3NhZ2U6TX0pO2Yoe2ZvdW5kOiEwfSl9KTtyZXR1'@;
put 'cm4gZnVuY3Rpb24oZix2KXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57bGV0IHY9ITE7cmV0dXJuIGZldGNoKGAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHth'@;
put 'fWApLnRoZW4oTT0+KDQwND09PU0uc3RhdHVzJiYodj0hMCksTS50ZXh0KCkpKS50aGVuKE09PntpZih0aGlzLmlzTG9naW5SZXF1aXJlZChNKSl0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMCx0aGlzLnNob3VsZExvZ2luLm5leHQoITApO2Vsc2V7aWYodilyZXR1cm4gY29uc29sZS53YXJu'@;
put 'KCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7bGV0IEk9bnVsbDt0cnl7ST1KU09OLnBhcnNl'@;
put 'KE0pfWNhdGNoe31pZihJJiZJLmh0dHBTdGF0dXNDb2RlJiY0MDQ9PT1JLmh0dHBTdGF0dXNDb2RlKXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxv'@;
put 'YWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtkKCEwKX19KS5jYXRjaChNPT57ZCghMSl9KX0pfWlzTG9naW5SZXF1aXJlZChhKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qTG9nb25bXiJdKikuKj4vZ20udGVzdChhKX1sb2dvdXQoKXt0aGlzLnNh'@;
put 'c2pzQWRhcHRlci5sb2dPdXQoKS50aGVuKCgpPT57bG9jYXRpb24ucmVsb2FkKCl9KX1nZXRTYXNqc0NvbmZpZygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpfWdldFNhc1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3Rz'@;
put 'KCl9c2V0RGVidWdTdGF0ZShhKXt0aGlzLnNhc2pzQWRhcHRlci5zZXREZWJ1Z1N0YXRlKGEpfWdldFNhc2pzSW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXJ9Z2V0U2VydmVyVHlwZSgpe2NvbnN0IGE9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKTtyZXR1cm4g'@;
put 'YS5zZXJ2ZXJUeXBlP2Euc2VydmVyVHlwZToiU0FTVklZQSJ9Z2V0RXhlY3V0aW9uUGF0aCgpe2NvbnN0IGE9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKTtzd2l0Y2goYS5zZXJ2ZXJUeXBlKXtjYXNlIE4wLlkuU2FzVml5YTpyZXR1cm4gYS5wYXRoU0FTVml5YTtjYXNlIE4w'@;
put 'LlkuU2FzOTpyZXR1cm4gYS5wYXRoU0FTOTtjYXNlIE4wLlkuU2FzanM6cmV0dXJuIGEucGF0aFNBU0pTfX1nZXRGaWxlQ29udGVudChhLGQpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRGaWxlQ29udGVudChhLGQpfXVwZGF0ZUZpbGVDb250ZW50KGEsZCxoKXtyZXR1cm4gdGhpcy5z'@;
put 'YXNqc0FkYXB0ZXIudXBkYXRlRmlsZUNvbnRlbnQoYSxkLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKFE4KSxDcihNVyksQ3IobWMpLENyKEtjZSksQ3IoSVcpLENyKFNkKSxDcihMbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJu'@;
put 'KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFNkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pbmplY3Rvcj1hfWxvZyhhLGQpe3RoaXMuaW5qZWN0U2FzU2VydmljZSgpLHRoaXMuc2FzanNDb25maWc/LmRl'@;
put 'YnVnJiYoZD9jb25zb2xlLmxvZyhhLGQpOmNvbnNvbGUubG9nKGEpKX1lcnJvcihhLGQpe2NvbnNvbGUuZXJyb3IoYSxkKX1sb2dSZXF1ZXN0RGF0YShhLGQpe2lmKHRoaXMubG9nKCItLS0gQWRhcHRlciBSZXF1ZXN0IElucHV0IC0tLSIpLHRoaXMubG9nKGEpLGQpe2ZvcihsZXQgaCBvZiBP'@;
put 'YmplY3Qua2V5cyhkKSl0aGlzLmxvZyhoLGRbaF0pO3RoaXMubG9nKCItLS0tLS0iKX1lbHNlIHRoaXMubG9nKCJubyBkYXRhIHNlbnQiKX1pbmplY3RTYXNTZXJ2aWNlKCl7aWYoIXRoaXMuc2FzanNDb25maWcpe2NvbnN0IGE9dGhpcy5pbmplY3Rvci5nZXQoVm8pO3RoaXMuc2FzanNDb25m'@;
put 'aWc9YS5nZXRTYXNqc0NvbmZpZygpfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihEbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJu'@;
put 'IGN9KSgpO2NvbnN0IFhjZT1mdW5jdGlvbiBrQWUoYyxsKXtyZXR1cm4gYz09PWx8fGMhPWMmJmwhPWx9LGlMPWZ1bmN0aW9uIERBZShjLGwpe2Zvcih2YXIgYT1jLmxlbmd0aDthLS07KWlmKFhjZShjW2FdWzBdLGwpKXJldHVybiBhO3JldHVybi0xfTt2YXIgUkFlPUFycmF5LnByb3RvdHlw'@;
put 'ZS5zcGxpY2U7ZnVuY3Rpb24gZmIoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19ZmIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIFRBZSgpe3RoaXMuX19kYXRhX189W10sdGhp'@;
put 'cy5zaXplPTB9LGZiLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gTEFlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1pTChsLGMpO3JldHVybiEoYTwwfHwoYT09bC5sZW5ndGgtMT9sLnBvcCgpOlJBZS5jYWxsKGwsYSwxKSwtLXRoaXMuc2l6ZSwwKSl9LGZiLnByb3RvdHlwZS5nZXQ9ZnVu'@;
put 'Y3Rpb24gUEFlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1pTChsLGMpO3JldHVybiBhPDA/dm9pZCAwOmxbYV1bMV19LGZiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSEFlKGMpe3JldHVybiBpTCh0aGlzLl9fZGF0YV9fLGMpPi0xfSxmYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFZBZShj'@;
put 'LGwpe3ZhciBhPXRoaXMuX19kYXRhX18sZD1pTChhLGMpO3JldHVybiBkPDA/KCsrdGhpcy5zaXplLGEucHVzaChbYyxsXSkpOmFbZF1bMV09bCx0aGlzfTtjb25zdCBhTD1mYixxY2U9Im9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xv'@;
put 'YmFsO3ZhciBYQWU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZjtjb25zdCBicD1xY2V8fFhBZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvbT1icC5TeW1ib2w7dmFyIEpjZT1PYmplY3QucHJvdG90eXBlLFFBZT1KY2UuaGFzT3du'@;
put 'UHJvcGVydHksZWtlPUpjZS50b1N0cmluZyxkeD1vbT9vbS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIGlrZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBRY2U9b20/b20udG9TdHJpbmdUYWc6dm9pZCAwO2NvbnN0IHBiPWZ1bmN0aW9uIGNrZShjKXtyZXR1cm4gbnVsbD09Yz92b2lk'@;
put 'IDA9PT1jPyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjpRY2UmJlFjZSBpbiBPYmplY3QoYyk/ZnVuY3Rpb24gdGtlKGMpe3ZhciBsPVFBZS5jYWxsKGMsZHgpLGE9Y1tkeF07dHJ5e2NbZHhdPXZvaWQgMDt2YXIgZD0hMH1jYXRjaHt9dmFyIGg9ZWtlLmNhbGwoYyk7cmV0'@;
put 'dXJuIGQmJihsP2NbZHhdPWE6ZGVsZXRlIGNbZHhdKSxofShjKTpmdW5jdGlvbiBha2UoYyl7cmV0dXJuIGlrZS5jYWxsKGMpfShjKX0saHg9ZnVuY3Rpb24gdWtlKGMpe3ZhciBsPXR5cGVvZiBjO3JldHVybiBudWxsIT1jJiYoIm9iamVjdCI9PWx8fCJmdW5jdGlvbiI9PWwpfSxldWU9ZnVu'@;
put 'Y3Rpb24gZ2tlKGMpe2lmKCFoeChjKSlyZXR1cm4hMTt2YXIgbD1wYihjKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IFByb3h5XSI9PWx9LFJXPWJwWyJf'@;
put 'X2NvcmUtanNfc2hhcmVkX18iXTt2YXIgdHVlPWZ1bmN0aW9uKCl7dmFyIGM9L1teLl0rJC8uZXhlYyhSVyYmUlcua2V5cyYmUlcua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBjPyJTeW1ib2woc3JjKV8xLiIrYzoiIn0oKTt2YXIgX2tlPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztj'@;
put 'b25zdCBuNz1mdW5jdGlvbiB3a2UoYyl7aWYobnVsbCE9Yyl7dHJ5e3JldHVybiBfa2UuY2FsbChjKX1jYXRjaHt9dHJ5e3JldHVybiBjKyIifWNhdGNoe319cmV0dXJuIiJ9O3ZhciBTa2U9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sQWtlPVJlZ0V4cCgiXiIrRnVuY3Rpb24ucHJv'@;
put 'dG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIp'@;
put 'KyIkIik7Y29uc3QgRGtlPWZ1bmN0aW9uIGtrZShjKXtyZXR1cm4hKCFoeChjKXx8ZnVuY3Rpb24gdmtlKGMpe3JldHVybiEhdHVlJiZ0dWUgaW4gY30oYykpJiYoZXVlKGMpP0FrZTpTa2UpLnRlc3QobjcoYykpfSxyNz1mdW5jdGlvbiBMa2UoYyxsKXt2YXIgYT1mdW5jdGlvbiBJa2UoYyxs'@;
put 'KXtyZXR1cm4gYz8uW2xdfShjLGwpO3JldHVybiBEa2UoYSk/YTp2b2lkIDB9LGZ4PXI3KGJwLCJNYXAiKSxweD1yNyhPYmplY3QsImNyZWF0ZSIpO3ZhciB6a2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgWWtlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7'@;
put 'ZnVuY3Rpb24gZ2IoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19Z2IucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIEZrZSgpe3RoaXMuX19kYXRhX189cHg/cHgobnVsbCk6e30s'@;
put 'dGhpcy5zaXplPTB9LGdiLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gTmtlKGMpe3ZhciBsPXRoaXMuaGFzKGMpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tjXTtyZXR1cm4gdGhpcy5zaXplLT1sPzE6MCxsfSxnYi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIFVrZShjKXt2YXIgbD10aGlzLl9f'@;
put 'ZGF0YV9fO2lmKHB4KXt2YXIgYT1sW2NdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PWE/dm9pZCAwOmF9cmV0dXJuIHprZS5jYWxsKGwsYyk/bFtjXTp2b2lkIDB9LGdiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gR2tlKGMpe3ZhciBsPXRoaXMuX19kYXRhX187cmV0dXJu'@;
put 'IHB4P3ZvaWQgMCE9PWxbY106WWtlLmNhbGwobCxjKX0sZ2IucHJvdG90eXBlLnNldD1mdW5jdGlvbiBYa2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGMpPzA6MSxhW2NdPXB4JiZ2b2lkIDA9PT1sPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5l'@;
put 'ZF9fIjpsLHRoaXN9O2NvbnN0IG51ZT1nYixzTD1mdW5jdGlvbiBuRGUoYyxsKXt2YXIgYT1jLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBlRGUoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuInN0cmluZyI9PWx8fCJudW1iZXIiPT1sfHwic3ltYm9sIj09bHx8ImJvb2xlYW4iPT1sPyJfX3By'@;
put 'b3RvX18iIT09YzpudWxsPT09Y30obCk/YVsic3RyaW5nIj09dHlwZW9mIGw/InN0cmluZyI6Imhhc2giXTphLm1hcH07ZnVuY3Rpb24gbWIoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxk'@;
put 'WzFdKX19bWIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIEprZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IG51ZSxtYXA6bmV3KGZ4fHxhTCksc3RyaW5nOm5ldyBudWV9fSxtYi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIHJEZShjKXt2YXIgbD1zTCh0aGlzLGMp'@;
put 'LmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplLT1sPzE6MCxsfSxtYi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGFEZShjKXtyZXR1cm4gc0wodGhpcyxjKS5nZXQoYyl9LG1iLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gb0RlKGMpe3JldHVybiBzTCh0aGlzLGMpLmhhcyhjKX0sbWIucHJvdG90'@;
put 'eXBlLnNldD1mdW5jdGlvbiBjRGUoYyxsKXt2YXIgYT1zTCh0aGlzLGMpLGQ9YS5zaXplO3JldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZSs9YS5zaXplPT1kPzA6MSx0aGlzfTtjb25zdCBMVz1tYjtmdW5jdGlvbiB2YihjKXt2YXIgbD10aGlzLl9fZGF0YV9fPW5ldyBhTChjKTt0aGlzLnNp'@;
put 'emU9bC5zaXplfXZiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBqQWUoKXt0aGlzLl9fZGF0YV9fPW5ldyBhTCx0aGlzLnNpemU9MH0sdmIucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBVQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWwuZGVsZXRlKGMpO3JldHVybiB0aGlzLnNpemU9'@;
put 'bC5zaXplLGF9LHZiLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gV0FlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChjKX0sdmIucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBHQWUoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGMpfSx2Yi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGhEZShj'@;
put 'LGwpe3ZhciBhPXRoaXMuX19kYXRhX187aWYoYSBpbnN0YW5jZW9mIGFMKXt2YXIgZD1hLl9fZGF0YV9fO2lmKCFmeHx8ZC5sZW5ndGg8MTk5KXJldHVybiBkLnB1c2goW2MsbF0pLHRoaXMuc2l6ZT0rK2Euc2l6ZSx0aGlzO2E9dGhpcy5fX2RhdGFfXz1uZXcgTFcoZCl9cmV0dXJuIGEuc2V0'@;
put 'KGMsbCksdGhpcy5zaXplPWEuc2l6ZSx0aGlzfTtjb25zdCBwRGU9dmI7dmFyIHZEZT1mdW5jdGlvbigpe3RyeXt2YXIgYz1yNyhPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGMoe30sIiIse30pLGN9Y2F0Y2h7fX0oKTtjb25zdCBydWU9dkRlLGl1ZT1mdW5jdGlvbiB5RGUoYyxs'@;
put 'LGEpeyJfX3Byb3RvX18iPT1sJiZydWU/cnVlKGMsbCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6YSx3cml0YWJsZTohMH0pOmNbbF09YX07dmFyIF9EZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IGF1ZT1mdW5jdGlvbiB3RGUoYyxsLGEpe3Zh'@;
put 'ciBkPWNbbF07KCFfRGUuY2FsbChjLGwpfHwhWGNlKGQsYSl8fHZvaWQgMD09PWEmJiEobCBpbiBjKSkmJml1ZShjLGwsYSl9LG9MPWZ1bmN0aW9uIENEZShjLGwsYSxkKXt2YXIgaD0hYTthfHwoYT17fSk7Zm9yKHZhciBmPS0xLHY9bC5sZW5ndGg7KytmPHY7KXt2YXIgTT1sW2ZdLEk9ZD9k'@;
put 'KGFbTV0sY1tNXSxNLGEsYyk6dm9pZCAwO3ZvaWQgMD09PUkmJihJPWNbTV0pLGg/aXVlKGEsTSxJKTphdWUoYSxNLEkpfXJldHVybiBhfSx5Yj1mdW5jdGlvbiB4RGUoYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgY30sc3VlPWZ1bmN0aW9uIFREZShjKXtyZXR1cm4geWIo'@;
put 'YykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1wYihjKX07dmFyIG91ZT1PYmplY3QucHJvdG90eXBlLEFEZT1vdWUuaGFzT3duUHJvcGVydHksa0RlPW91ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxERGU9c3VlKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/c3VlOmZ1bmN0aW9uKGMp'@;
put 'e3JldHVybiB5YihjKSYmQURlLmNhbGwoYywiY2FsbGVlIikmJiFrRGUuY2FsbChjLCJjYWxsZWUiKX07Y29uc3QgSURlPUREZSxiYj1BcnJheS5pc0FycmF5O3ZhciBsdWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxjdWU9'@;
put 'bHVlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsdXVlPWN1ZSYmY3VlLmV4cG9ydHM9PT1sdWU/YnAuQnVmZmVyOnZvaWQgMDtjb25zdCBkdWU9KHV1ZT91dWUuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24gTERlKCl7cmV0dXJu'@;
put 'ITF9O3ZhciBWRGU9L14oPzowfFsxLTldXGQqKSQvO2NvbnN0IGpEZT1mdW5jdGlvbiBCRGUoYyxsKXt2YXIgYT10eXBlb2YgYztyZXR1cm4hIShsPWw/PzkwMDcxOTkyNTQ3NDA5OTEpJiYoIm51bWJlciI9PWF8fCJzeW1ib2wiIT1hJiZWRGUudGVzdChjKSkmJmM+LTEmJmMlMT09MCYmYzxs'@;
put 'fSxodWU9ZnVuY3Rpb24gVURlKGMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYyYmYz4tMSYmYyUxPT0wJiZjPD05MDA3MTk5MjU0NzQwOTkxfTt2YXIgdmM9e307dmNbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPXZjWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT12Y1siW29iamVjdCBJbnQ4'@;
put 'QXJyYXldIl09dmNbIltvYmplY3QgSW50MTZBcnJheV0iXT12Y1siW29iamVjdCBJbnQzMkFycmF5XSJdPXZjWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09dmNbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09dmNbIltvYmplY3QgVWludDE2QXJyYXldIl09dmNbIltvYmplY3QgVWludDMy'@;
put 'QXJyYXldIl09ITAsdmNbIltvYmplY3QgQXJndW1lbnRzXSJdPXZjWyJbb2JqZWN0IEFycmF5XSJdPXZjWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPXZjWyJbb2JqZWN0IEJvb2xlYW5dIl09dmNbIltvYmplY3QgRGF0YVZpZXddIl09dmNbIltvYmplY3QgRGF0ZV0iXT12Y1siW29iamVjdCBF'@;
put 'cnJvcl0iXT12Y1siW29iamVjdCBGdW5jdGlvbl0iXT12Y1siW29iamVjdCBNYXBdIl09dmNbIltvYmplY3QgTnVtYmVyXSJdPXZjWyJbb2JqZWN0IE9iamVjdF0iXT12Y1siW29iamVjdCBSZWdFeHBdIl09dmNbIltvYmplY3QgU2V0XSJdPXZjWyJbb2JqZWN0IFN0cmluZ10iXT12Y1siW29i'@;
put 'amVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IE9XPWZ1bmN0aW9uIG1JZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGMobCl9fTt2YXIgZnVlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZ3g9ZnVlJiYib2JqZWN0Ij09'@;
put 'dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsUFc9Z3gmJmd4LmV4cG9ydHM9PT1mdWUmJnFjZS5wcm9jZXNzO2NvbnN0IF9iPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBneCYmZ3gucmVxdWlyZSYmZ3gucmVxdWlyZSgidXRpbCIpLnR5cGVzfHxQVyYmUFcu'@;
put 'YmluZGluZyYmUFcuYmluZGluZygidXRpbCIpfWNhdGNoe319KCk7dmFyIHB1ZT1fYiYmX2IuaXNUeXBlZEFycmF5O2NvbnN0IF9JZT1wdWU/T1cocHVlKTpmdW5jdGlvbiBwSWUoYyl7cmV0dXJuIHliKGMpJiZodWUoYy5sZW5ndGgpJiYhIXZjW3BiKGMpXX07dmFyIENJZT1PYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IGd1ZT1mdW5jdGlvbiBTSWUoYyxsKXt2YXIgYT1iYihjKSxkPSFhJiZJRGUoYyksaD0hYSYmIWQmJmR1ZShjKSxmPSFhJiYhZCYmIWgmJl9JZShjKSx2PWF8fGR8fGh8fGYsTT12P2Z1bmN0aW9uIFNEZShjLGwpe2Zvcih2YXIgYT0tMSxkPUFy'@;
put 'cmF5KGMpOysrYTxjOylkW2FdPWwoYSk7cmV0dXJuIGR9KGMubGVuZ3RoLFN0cmluZyk6W10sST1NLmxlbmd0aDtmb3IodmFyIEcgaW4gYykobHx8Q0llLmNhbGwoYyxHKSkmJighdnx8ISgibGVuZ3RoIj09R3x8aCYmKCJvZmZzZXQiPT1HfHwicGFyZW50Ij09Ryl8fGYmJigiYnVmZmVyIj09'@;
put 'R3x8ImJ5dGVMZW5ndGgiPT1HfHwiYnl0ZU9mZnNldCI9PUcpfHxqRGUoRyxJKSkpJiZNLnB1c2goRyk7cmV0dXJuIE19O3ZhciBNSWU9T2JqZWN0LnByb3RvdHlwZTtjb25zdCBGVz1mdW5jdGlvbiB4SWUoYyl7dmFyIGw9YyYmYy5jb25zdHJ1Y3RvcjtyZXR1cm4gYz09PSgiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgbCYmbC5wcm90b3R5cGV8fE1JZSl9LG11ZT1mdW5jdGlvbiBFSWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMobChhKSl9fSxBSWU9bXVlKE9iamVjdC5rZXlzLE9iamVjdCk7dmFyIERJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHZ1'@;
put 'ZT1mdW5jdGlvbiBMSWUoYyl7cmV0dXJuIG51bGwhPWMmJmh1ZShjLmxlbmd0aCkmJiFldWUoYyl9LEhXPWZ1bmN0aW9uIE9JZShjKXtyZXR1cm4gdnVlKGMpP2d1ZShjKTpmdW5jdGlvbiBJSWUoYyl7aWYoIUZXKGMpKXJldHVybiBBSWUoYyk7dmFyIGw9W107Zm9yKHZhciBhIGluIE9iamVj'@;
put 'dChjKSlESWUuY2FsbChjLGEpJiYiY29uc3RydWN0b3IiIT1hJiZsLnB1c2goYSk7cmV0dXJuIGx9KGMpfTt2YXIgQkllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgekllPWZ1bmN0aW9uIGpJZShjKXtpZighaHgoYykpcmV0dXJuIGZ1bmN0aW9uIEhJZShjKXt2YXIg'@;
put 'bD1bXTtpZihudWxsIT1jKWZvcih2YXIgYSBpbiBPYmplY3QoYykpbC5wdXNoKGEpO3JldHVybiBsfShjKTt2YXIgbD1GVyhjKSxhPVtdO2Zvcih2YXIgZCBpbiBjKSJjb25zdHJ1Y3RvciI9PWQmJihsfHwhQkllLmNhbGwoYyxkKSl8fGEucHVzaChkKTtyZXR1cm4gYX0sTlc9ZnVuY3Rpb24g'@;
put 'VUllKGMpe3JldHVybiB2dWUoYyk/Z3VlKGMsITApOnpJZShjKX07dmFyIHl1ZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGJ1ZT15dWUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5'@;
put 'cGUmJm1vZHVsZSxfdWU9YnVlJiZidWUuZXhwb3J0cz09PXl1ZT9icC5CdWZmZXI6dm9pZCAwLHd1ZT1fdWU/X3VlLmFsbG9jVW5zYWZlOnZvaWQgMDtjb25zdCBDdWU9ZnVuY3Rpb24gUUllKCl7cmV0dXJuW119O3ZhciB0UmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs'@;
put 'ZSxTdWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuUmU9U3VlP2Z1bmN0aW9uKGMpe3JldHVybiBudWxsPT1jP1tdOihjPU9iamVjdChjKSxmdW5jdGlvbiBxSWUoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGgsaD0wLGY9W107KythPGQ7KXt2YXIgdj1jW2Fd'@;
put 'O2wodixhLGMpJiYoZltoKytdPXYpfXJldHVybiBmfShTdWUoYyksZnVuY3Rpb24obCl7cmV0dXJuIHRSZS5jYWxsKGMsbCl9KSl9OkN1ZTtjb25zdCBWVz1uUmUsTXVlPWZ1bmN0aW9uIGFSZShjLGwpe2Zvcih2YXIgYT0tMSxkPWwubGVuZ3RoLGg9Yy5sZW5ndGg7KythPGQ7KWNbaCthXT1s'@;
put 'W2FdO3JldHVybiBjfSx4dWU9bXVlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO3ZhciBsUmU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihjKXtmb3IodmFyIGw9W107YzspTXVlKGwsVlcoYykpLGM9eHVlKGMpO3JldHVybiBsfTpDdWU7Y29uc3QgRXVlPWxS'@;
put 'ZSxUdWU9ZnVuY3Rpb24gZFJlKGMsbCxhKXt2YXIgZD1sKGMpO3JldHVybiBiYihjKT9kOk11ZShkLGEoYykpfSxmUmU9ZnVuY3Rpb24gaFJlKGMpe3JldHVybiBUdWUoYyxIVyxWVyl9LGdSZT1mdW5jdGlvbiBwUmUoYyl7cmV0dXJuIFR1ZShjLE5XLEV1ZSl9LEJXPXI3KGJwLCJEYXRhVmll'@;
put 'dyIpLGpXPXI3KGJwLCJQcm9taXNlIikselc9cjcoYnAsIlNldCIpLFVXPXI3KGJwLCJXZWFrTWFwIik7dmFyIEF1ZT0iW29iamVjdCBNYXBdIixrdWU9IltvYmplY3QgUHJvbWlzZV0iLER1ZT0iW29iamVjdCBTZXRdIixJdWU9IltvYmplY3QgV2Vha01hcF0iLFJ1ZT0iW29iamVjdCBEYXRh'@;
put 'Vmlld10iLHdSZT1uNyhCVyksQ1JlPW43KGZ4KSxTUmU9bjcoalcpLE1SZT1uNyh6VykseFJlPW43KFVXKSxpNz1wYjsoQlcmJmk3KG5ldyBCVyhuZXcgQXJyYXlCdWZmZXIoMSkpKSE9UnVlfHxmeCYmaTcobmV3IGZ4KSE9QXVlfHxqVyYmaTcoalcucmVzb2x2ZSgpKSE9a3VlfHx6VyYmaTco'@;
put 'bmV3IHpXKSE9RHVlfHxVVyYmaTcobmV3IFVXKSE9SXVlKSYmKGk3PWZ1bmN0aW9uKGMpe3ZhciBsPXBiKGMpLGE9IltvYmplY3QgT2JqZWN0XSI9PWw/Yy5jb25zdHJ1Y3Rvcjp2b2lkIDAsZD1hP243KGEpOiIiO2lmKGQpc3dpdGNoKGQpe2Nhc2Ugd1JlOnJldHVybiBSdWU7Y2FzZSBDUmU6'@;
put 'cmV0dXJuIEF1ZTtjYXNlIFNSZTpyZXR1cm4ga3VlO2Nhc2UgTVJlOnJldHVybiBEdWU7Y2FzZSB4UmU6cmV0dXJuIEl1ZX1yZXR1cm4gbH0pO2NvbnN0IFpXPWk3O3ZhciBUUmU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBMdWU9YnAuVWludDhBcnJheSxXVz1mdW5j'@;
put 'dGlvbiBJUmUoYyl7dmFyIGw9bmV3IGMuY29uc3RydWN0b3IoYy5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IEx1ZShsKS5zZXQobmV3IEx1ZShjKSksbH07dmFyIE9SZT0vXHcqJC87dmFyIE91ZT1vbT9vbS5wcm90b3R5cGU6dm9pZCAwLFB1ZT1PdWU/T3VlLnZhbHVlT2Y6dm9pZCAwO2NvbnN0'@;
put 'IG9MZT1mdW5jdGlvbiBzTGUoYyxsLGEpe3ZhciBkPWMuY29uc3RydWN0b3I7c3dpdGNoKGwpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiBXVyhjKTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuIG5ldyBkKCtjKTtjYXNlIltvYmpl'@;
put 'Y3QgRGF0YVZpZXddIjpyZXR1cm4gZnVuY3Rpb24gUlJlKGMsbCl7dmFyIGE9bD9XVyhjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBjLmNvbnN0cnVjdG9yKGEsYy5ieXRlT2Zmc2V0LGMuYnl0ZUxlbmd0aCl9KGMsYSk7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOmNhc2UiW29i'@;
put 'amVjdCBGbG9hdDY0QXJyYXldIjpjYXNlIltvYmplY3QgSW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6Y2FzZSJbb2Jq'@;
put 'ZWN0IFVpbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuIGZ1bmN0aW9uIFZSZShjLGwpe3ZhciBhPWw/V1coYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmxlbmd0aCl9KGMsYSk7Y2FzZSJbb2Jq'@;
put 'ZWN0IE1hcF0iOmNhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IGQ7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGQoYyk7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBmdW5jdGlvbiBQUmUoYyl7dmFyIGw9bmV3IGMuY29uc3Ry'@;
put 'dWN0b3IoYy5zb3VyY2UsT1JlLmV4ZWMoYykpO3JldHVybiBsLmxhc3RJbmRleD1jLmxhc3RJbmRleCxsfShjKTtjYXNlIltvYmplY3QgU3ltYm9sXSI6cmV0dXJuIGZ1bmN0aW9uIEhSZShjKXtyZXR1cm4gUHVlP09iamVjdChQdWUuY2FsbChjKSk6e319KGMpfX07dmFyIEZ1ZT1PYmplY3Qu'@;
put 'Y3JlYXRlLGxMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9cmV0dXJuIGZ1bmN0aW9uKGwpe2lmKCFoeChsKSlyZXR1cm57fTtpZihGdWUpcmV0dXJuIEZ1ZShsKTtjLnByb3RvdHlwZT1sO3ZhciBhPW5ldyBjO3JldHVybiBjLnByb3RvdHlwZT12b2lkIDAsYX19KCk7Y29uc3QgY0xlPWxM'@;
put 'ZTt2YXIgSHVlPV9iJiZfYi5pc01hcDtjb25zdCBtTGU9SHVlP09XKEh1ZSk6ZnVuY3Rpb24gZkxlKGMpe3JldHVybiB5YihjKSYmIltvYmplY3QgTWFwXSI9PVpXKGMpfTt2YXIgTnVlPV9iJiZfYi5pc1NldDtjb25zdCB3TGU9TnVlP09XKE51ZSk6ZnVuY3Rpb24geUxlKGMpe3JldHVybiB5'@;
put 'YihjKSYmIltvYmplY3QgU2V0XSI9PVpXKGMpfTt2YXIgVnVlPSJbb2JqZWN0IEFyZ3VtZW50c10iLEJ1ZT0iW29iamVjdCBGdW5jdGlvbl0iLGp1ZT0iW29iamVjdCBPYmplY3RdIixhYz17fTthY1tWdWVdPWFjWyJbb2JqZWN0IEFycmF5XSJdPWFjWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJd'@;
put 'PWFjWyJbb2JqZWN0IERhdGFWaWV3XSJdPWFjWyJbb2JqZWN0IEJvb2xlYW5dIl09YWNbIltvYmplY3QgRGF0ZV0iXT1hY1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09YWNbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWFjWyJbb2JqZWN0IEludDhBcnJheV0iXT1hY1siW29iamVjdCBJbnQx'@;
put 'NkFycmF5XSJdPWFjWyJbb2JqZWN0IEludDMyQXJyYXldIl09YWNbIltvYmplY3QgTWFwXSJdPWFjWyJbb2JqZWN0IE51bWJlcl0iXT1hY1tqdWVdPWFjWyJbb2JqZWN0IFJlZ0V4cF0iXT1hY1siW29iamVjdCBTZXRdIl09YWNbIltvYmplY3QgU3RyaW5nXSJdPWFjWyJbb2JqZWN0IFN5bWJv'@;
put 'bF0iXT1hY1siW29iamVjdCBVaW50OEFycmF5XSJdPWFjWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWFjWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPWFjWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLGFjWyJbb2JqZWN0IEVycm9yXSJdPWFjW0J1ZV09YWNbIltvYmplY3QgV2Vh'@;
put 'a01hcF0iXT0hMTtjb25zdCAkTGU9ZnVuY3Rpb24gbEwoYyxsLGEsZCxoLGYpe3ZhciB2LE09MSZsLEk9MiZsLEc9NCZsO2lmKGEmJih2PWg/YShjLGQsaCxmKTphKGMpKSx2b2lkIDAhPT12KXJldHVybiB2O2lmKCFoeChjKSlyZXR1cm4gYzt2YXIgcmU9YmIoYyk7aWYocmUpe2lmKHY9ZnVu'@;
put 'Y3Rpb24gQVJlKGMpe3ZhciBsPWMubGVuZ3RoLGE9bmV3IGMuY29uc3RydWN0b3IobCk7cmV0dXJuIGwmJiJzdHJpbmciPT10eXBlb2YgY1swXSYmVFJlLmNhbGwoYywiaW5kZXgiKSYmKGEuaW5kZXg9Yy5pbmRleCxhLmlucHV0PWMuaW5wdXQpLGF9KGMpLCFNKXJldHVybiBmdW5jdGlvbiBL'@;
put 'SWUoYyxsKXt2YXIgYT0tMSxkPWMubGVuZ3RoO2ZvcihsfHwobD1BcnJheShkKSk7KythPGQ7KWxbYV09Y1thXTtyZXR1cm4gbH0oYyx2KX1lbHNle3ZhciB1ZT1aVyhjKSx5ZT11ZT09QnVlfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT11ZTtpZihkdWUoYykpcmV0dXJuIGZ1bmN0'@;
put 'aW9uIEdJZShjLGwpe2lmKGwpcmV0dXJuIGMuc2xpY2UoKTt2YXIgYT1jLmxlbmd0aCxkPXd1ZT93dWUoYSk6bmV3IGMuY29uc3RydWN0b3IoYSk7cmV0dXJuIGMuY29weShkKSxkfShjLE0pO2lmKHVlPT1qdWV8fHVlPT1WdWV8fHllJiYhaCl7aWYodj1JfHx5ZT97fTpmdW5jdGlvbiB1TGUo'@;
put 'Yyl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGMuY29uc3RydWN0b3J8fEZXKGMpP3t9OmNMZSh4dWUoYykpfShjKSwhTSlyZXR1cm4gST9mdW5jdGlvbiBjUmUoYyxsKXtyZXR1cm4gb0woYyxFdWUoYyksbCl9KGMsZnVuY3Rpb24gWkllKGMsbCl7cmV0dXJuIGMmJm9MKGwsTlcobCksYyl9'@;
put 'KHYsYykpOmZ1bmN0aW9uIHJSZShjLGwpe3JldHVybiBvTChjLFZXKGMpLGwpfShjLGZ1bmN0aW9uIFBJZShjLGwpe3JldHVybiBjJiZvTChsLEhXKGwpLGMpfSh2LGMpKX1lbHNle2lmKCFhY1t1ZV0pcmV0dXJuIGg/Yzp7fTt2PW9MZShjLHVlLE0pfX1mfHwoZj1uZXcgcERlKTt2YXIgRWU9'@;
put 'Zi5nZXQoYyk7aWYoRWUpcmV0dXJuIEVlO2Yuc2V0KGMsdiksd0xlKGMpP2MuZm9yRWFjaChmdW5jdGlvbihzdCl7di5hZGQobEwoc3QsbCxhLHN0LGMsZikpfSk6bUxlKGMpJiZjLmZvckVhY2goZnVuY3Rpb24oc3QscHQpe3Yuc2V0KHB0LGxMKHN0LGwsYSxwdCxjLGYpKX0pO3ZhciBHZT1y'@;
put 'ZT92b2lkIDA6KEc/ST9nUmU6ZlJlOkk/Tlc6SFcpKGMpO3JldHVybiBmdW5jdGlvbiBnRGUoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGg7KythPGQmJiExIT09bChjW2FdLGEsYyk7KTt9KEdlfHxjLGZ1bmN0aW9uKHN0LHB0KXtHZSYmKHN0PWNbcHQ9c3RdKSxhdWUo'@;
put 'dixwdCxsTChzdCxsLGEscHQsYyxmKSl9KSx2fSxjTD1mdW5jdGlvbiBxTGUoYyl7cmV0dXJuICRMZShjLDUpfTt2YXIgSkxlPWIoNzg4NTUpO2xldCBidT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5s'@;
put 'b2FkTW9yZUNvdW50PTUwLHRoaXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29mdD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9'@;
put 'YSBpbnN0YW5jZW9mIERhdGU/YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IEk9ZiszMTU2MTky'@;
put 'ZTU7c3dpdGNoKGQpe2Nhc2UiZGF5cyI6e2xldCBHPUkvODY0ZTU7cmV0dXJuIEc9TWF0aC5hYnMoRyksRz1NYXRoLmZsb29yKEcpLEd9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gSS8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlw'@;
put 'ZW9mIGEmJihhPXBhcnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBNPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gTSs9NjAqbmV3IERhdGUoTSkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoTSl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25G'@;
put 'aWx0ZXIoYSxkKXtsZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSx2PWQuc3BsaXQoIi4iKVsxXSxNPWYrIkFsbCI7YVtmXSYmKGFbTV18fChhW01dPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbTV0pLGgu'@;
put 'bGVuZ3RoPjAmJihhW2ZdPWFbZl0uZmlsdGVyKHY/ST0+SVt2XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6ST0+SS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9y'@;
put 'RWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJp'@;
put 'ZXMoYSkpfWRpc3BsYXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3du'@;
put 'TGlicmFyaWVzO2grKylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5Rmls'@;
put 'dGVyKGEpLGEuZm9yRWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdy'@;
put 'b3VuZCYmZGVsZXRlIGQuaW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVk'@;
put 'Z2UvIik+MCl9Y29udmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmlu'@;
put 'ZygpKSxhLmxlbmd0aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgdiBvZiBkKWRlbGV0ZSBmW3ZdO3JldHVybiBKTGUoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0Rmls'@;
put 'ZShhLGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUu'@;
put 'ZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFw'@;
put 'KGg9PjEqaCk7Y2FzZSJzdHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwiKX19aXNTdHJlYW1pbmdWaXlhKCl7cmV0dXJuIlNBU1ZJWUEiPT09dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSYmISghbG9jYXRpb24uc2VhcmNoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMo'@;
put 'Ij9fZmlsZT0iKXx8IWxvY2F0aW9uLnBhdGhuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoIi9zYXNqb2JleGVjdXRpb24iKSl9ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9'@;
put 'ZGVlcENsb25lKGEpe3JldHVybiBjTChhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihWbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0'@;
put 'dXJuIGN9KSgpLGMxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMubG9nZ2VyU2VydmljZT1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc1NlcnZpY2U9Zix0aGlzLmhlbHBlclNlcnZpY2U9dix0aGlzLnJvdXRl'@;
put 'cj1NLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj0hMSx0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5fbGljZW5jZVN0YXRlPVNXLHRoaXMuYWxsRmVhdHVyZXNPbj17dmlld2VyX3Jvd3NfYWxsb3dlZDoxLzAsZWRpdG9yX3Jvd3NfYWxsb3dlZDoxLzAsc3RhZ2Vfcm93c19hbGxvd2Vk'@;
put 'OjEvMCxoaXN0b3J5X3Jvd3NfYWxsb3dlZDoxLzAsc3VibWl0X3Jvd3NfbGltaXQ6MS8wLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjEvMCx2aWV3Ym94X2xpbWl0OjEvMCxsaW5lYWdlX2RhaWx5X2xpbWl0OjEvMCx2aWV3Ym94OiEwLGZpbGVVcGxvYWQ6ITAsZWRpdFJlY29yZDohMCxhZGRS'@;
put 'ZWNvcmQ6ITB9LHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YT17ZGVtbzohMCxob3RfbGljZW5zZV9rZXk6dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx1c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2Vk'@;
put 'fHwxLHZhbGlkX3VudGlsOlBzKCkuYWRkKDEsInllYXIiKS5mb3JtYXQoIllZWVktTU0tREQiKSxzaXRlX2lkOiIiLHNpdGVfaWRfbXVsdGlwbGU6W119LHRoaXMuaXNBcHBBY3RpdmF0ZWQ9bmV3IEpyKG51bGwpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHk9bmV3IEpyKCExKSx0aGlzLmN1cnJl'@;
put 'bnRVc2VyQ2FuUmVnaXN0ZXI9bmV3IEpyKCExKSx0aGlzLmFwcExvY2tlZD1uZXcgSnIoITEpLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXM9bmV3IEpyKG51bGwpLHRoaXMuaXNBcHBGcmVlVGllcj1uZXcgSnIoITEpLHRoaXMubGljZW5jZVByb2JsZW09bmV3IEpyKG51bGwpLHRoaXMuaG90'@;
put 'X2xpY2Vuc2Vfa2V5PW5ldyBKcih2b2lkIDApLHRoaXMubGljZW5jZVN0YXRlPW5ldyBKcih0aGlzLl9saWNlbmNlU3RhdGUpLHRoaXMuc2FzU2VydmljZS5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShJPT57aWYobnVsbCE9PXRoaXMuaXNBcHBBY3RpdmF0ZWQudmFsdWUmJiF0'@;
put 'aGlzLmlzQXBwRnJlZVRpZXIudmFsdWUpe2NvbnN0IEc9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NtYXRjaCZtaXNzbWF0Y2hJZD0ke0l9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChHKSx0aGlzLmRlYWN0aXZhdGVBcHAoRyl9fSl9YWN0aXZhdGlvbihhKXt2YXIg'@;
put 'ZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGljZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5s'@;
put 'aWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVzKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0'@;
put 'dXJuIFEoZnVuY3Rpb24qKCl7aWYoIWF8fCFhWzBdKXtjb25zdCB2PSdFcnJvciBnZXR0aW5nICJHbG9idmFycyIgZnJvbSBzdGFydHVwc2VydmljZSByZXNwb25zZS4nO3JldHVybiBjb25zb2xlLmVycm9yKHYpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLnJvdXRlci5uYXZp'@;
put 'Z2F0ZUJ5VXJsKGAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKHYpfWApfWxldCBmPWFbMF07cmV0dXJuIHZvaWQgMD09PWYuTElDRU5DRV9LRVl8fHZvaWQgMD09PWYuQUNUSVZBVElPTl9LRVl8fG51bGw9PWYuUkVHSVNURVJDT1VOVHx8bnVsbD09Zi5JU1JF'@;
put 'R0lTVEVSRUQ/KGNvbnNvbGUuZXJyb3IoIlNvbWUgb2YgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IiksaC5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiU29tZSBvZiB0aGUgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50'@;
put 'IGluIHRoZSBzdGFydHVwc2VydmljZSIpKTpmLkxJQ0VOQ0VfS0VZJiZmLkFDVElWQVRJT05fS0VZPyhoLmxpY2VuY2VLZXk9Zi5MSUNFTkNFX0tFWSxoLmFjdGl2YXRpb25LZXk9Zi5BQ1RJVkFUSU9OX0tFWSx2b2lkKHlpZWxkIGguZGVjcnlwdExpY2Vuc2VLZXkoZi5MSUNFTkNFX0tFWSxm'@;
put 'LkFDVElWQVRJT05fS0VZKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9UShmdW5jdGlvbiooTSl7eWllbGQgaC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oTSxmLGQpfSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZnVuY3Rpb24oKXt2YXIgdj1R'@;
put 'KGZ1bmN0aW9uKihNKXtjb25zdCBJPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAke019YDtjb25zb2xlLmVycm9yKEkpO2NvbnN0IEc9YC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWlscz0ke2J0b2EoSSl9JmZvcmNlPXRydWVgO2gubGljZW5jZVByb2JsZW0ubmV4'@;
put 'dChHKSxoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEcpLHNldFRpbWVvdXQoKCk9PmguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxk'@;
put 'IGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQpfSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYp'@;
put 'O2xldCB2PXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO3Z8fCh2PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5'@;
put 'Lm5leHQodiksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJzQWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpNLGRheXNUb0V4cGlyeTpJ'@;
put 'fT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJbj1JLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChJKSxJPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVF'@;
put 'eHBpcnkoTSxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxkJiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNv'@;
put 'ZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9s'@;
put 'aWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbdmgudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW3ZoLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2Fs'@;
put 'bG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW3ZoLnN0YWdlX3Jvd3NfYWxsb3dlZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFt2aC5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFs'@;
put 'dWUoZFt2aC5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFt2aC50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW3ZoLnZpZXdib3hfbGltaXRdKSxs'@;
put 'aW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFt2aC5saW5lYWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW3ZoLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbdmguZmlsZVVwbG9h'@;
put 'ZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFt2aC5lZGl0UmVjb3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbdmguYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3Rh'@;
put 'dGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIg'@;
put 'Zj1RKGZ1bmN0aW9uKih2LE0pe2lmKCF3aW5kb3cuY3J5cHRvfHwhd2luZG93LmNyeXB0by5zdWJ0bGUpdHJ5e2xldCB5ZT1hdG9iKGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSk7dihKU09OLnBhcnNlKHllKSl9Y2F0Y2goeWUpe00oIkVycm9yIHBhcnNpbmcgaHR0cCBsaWNlbnNl'@;
put 'IGtleSBkYXRhLiAiK3llKX1sZXQgRyxJPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1ZmZlcihhKS5jYXRjaCh5ZT0+e00oeWUpfSk7Y29uc3QgcmU9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVmZmVyKGQpLmNhdGNoKHllPT57TSh5ZSl9KTtpZighcmUpcmV0dXJuIHZvaWQgTSgiTWlzc2luZyBh'@;
put 'Y3RpdmF0aW9uIGtleSIpO2xldCB1ZTtHPXJlO3RyeXt1ZT15aWVsZCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixHLHtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLTI1NiJ9LCEwLFsiZGVjcnlwdCJdKX1jYXRjaCh5ZSl7TSgiVW5hYmxlIHRvIGltcG9ydCBkZWNy'@;
put 'eXB0aW9uIGtleTogIit5ZSl9aWYodWUpaWYoSSl0cnl7d2luZG93LmNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZToiUlNBLU9BRVAiLGhhc2g6e25hbWU6IlNIQS0yNTYifX0sdWUsSSkudGhlbih5ZT0+e2xldCBFZT0obmV3IEdUZS5UZXh0RGVjb2RlcikuZGVjb2RlKHllKTt0cnl7dihK'@;
put 'U09OLnBhcnNlKEVlKSl9Y2F0Y2goQmUpe00oIkVycm9yIHBhcnNpbmcgbGljZW5zZSBrZXkgZGF0YS4gIitCZSl9fSx5ZT0+e00oeWUpfSl9Y2F0Y2goeWUpe00oeWUpfWVsc2UgTSgiTGljZW5zZSBrZXkgYnl0ZXMgbWlzc2luZyIpO2Vsc2UgTSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0'@;
put 'aW9uIGtleSIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9Z2V0SG90TGljZW5zZUtleSgpe3JldHVybiB0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZX1nZXRMaWNlbnNlS2V5RGF0YSgpe3JldHVybiB0aGlzLmxpY2Vuc2VLZXlE'@;
put 'YXRhfWRlYWN0aXZhdGVBcHAoYSl7dGhpcy5fbGljZW5jZVN0YXRlPVNXLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSksYSYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1jaGVja0xpbmVhZ2VMaW1pdChhKXtpZih0aGlzLmxpY2VuY2VT'@;
put 'dGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0PT09MS8wKXJldHVybiExO2NvbnN0IGQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIpLGg9UHMoKS52YWx1ZU9mKCk7aWYoIWQpcmV0dXJuIGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExO2NvbnN0IGY9'@;
put 'cGFyc2VJbnQoZC5zcGxpdCgiLCIpWzBdKSx2PXBhcnNlSW50KGQuc3BsaXQoIiwiKVsxXSk7cmV0dXJuIFBzKGYpLmlzU2FtZShQcygpLCJkYXkiKT92Pj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0fHwoYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsdisx'@;
put 'KSwhMSk6KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExKX1zZXRMaW5lYWdlUmVuZGVyKGEsZCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIsYCR7YX0sJHtkfWApfWJhc2U2NFRvQXJyYXlCdWZmZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u'@;
put 'KCl7dmFyIGQ9UShmdW5jdGlvbiooaCxmKXtoKHhjZS5EKGEpKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFycmF5QnVmZmVyVG9CYXNlNjQoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57ZCh4Y2UubChhKSl9KX1zZXRT'@;
put 'aXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2VydmljZS5zZXRMaWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGQsaCxm'@;
put 'KXtsZXQgdj0hMSxNPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQhPT1oKSYmKHY9ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGgpKSYmKE09ITApLHYmJk0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMg'@;
put 'Zm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1lb3V0KCgpPT57Y29uc3QgST0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChJKSx0aGlzLl9saWNlbmNlU3RhdGU9U1csdGhpcy5hcHBsaWNh'@;
put 'dGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChJKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZD1QcyhhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksaD1QcygpLnN0YXJ0'@;
put 'T2YoImRheSIpLGY9ZC5kaWZmKGgsImRheXMiKTtyZXR1cm57ZXhwaXJ5X2RhdGU6ZCxkYXlzVG9FeHBpcnk6Zn19aGFuZGxlRXhwaXJ5KGEsZCxoLGYpe3NldFRpbWVvdXQoKCk9Pntjb25zdCB2PWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0'@;
put 'b2EoIkV4cGlyeSBkYXRlOiAiK2EuZm9ybWF0KCJERC9NTS9ZWVlZIikpfWA7dGhpcy5saWNlbmNlUHJvYmxlbS5uZXh0KHYpLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodil9'@;
put 'KX1oYW5kbGVVc2Vyc0FsbG93ZWQoYSl7YS5kZW1vJiZ2b2lkIDAhPT10aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCYmKGEudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWQ+MD9hLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMu'@;
put 'X2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZH1oYW5kbGVVc2VyUmVnaXN0cmF0aW9uKGEsZCxoKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihkLlJFR0lTVEVSQ09VTlQ+YS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1'@;
put 'c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eS5uZXh0KCEwKSk6ZC5SRUdJU1RFUkNPVU5UPT09YS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1kLklT'@;
put 'UkVHSVNURVJFRClyZXR1cm4gZC5SRUdJU1RFUkNPVU5UPGEudXNlcnNfYWxsb3dlZHx8IXRoaXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0'@;
put 'ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0'@;
put 'ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKFNkKSxDcihROCksQ3IobWMpLENyKFZvKSxDcihidSksQ3IoTG8pKX19c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSx1TD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEkpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRo'@;
put 'aXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPXYsdGhpcy5yb3V0ZXI9TSx0aGlzLmFwcFN0b3JlU2VydmljZT1JLHRoaXMuc3lzc2l0ZT1uZXcgSnIobnVsbCksdGhpcy5lbnZpcm9ubWVudEluZm89e30sdGhpcy5zdWJzY3JpYmUo'@;
put 'KSx0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKHJlPT57cmUgaW5zdGFuY2VvZiBtcCYmIi9kZXBsb3kiPT09cmUudXJsJiZ0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpfSk7Y29uc3QgRz10aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy52YWx1ZTtHLnBl'@;
put 'cnNpc3RTZWxlY3RlZFRoZW1lJiZ0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShHLnNlbGVjdGVkVGhlbWUhPT1kYi5saWdodCYmRy5zZWxlY3RlZFRoZW1lPT09ZGIuZGFyayl9c2FzU2VydmljZUluaXQoKXt0aGlzLnNhc1NlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1zdWJzY3Jp'@;
put 'YmUoKXt0aGlzLnNhc1NlcnZpY2UubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0YXJ0VXBEYXRhKCl9KSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKGE9Pnt0aGlzLnBhdGNoU3lzc2l0ZShhKX0pfWdldEVudmly'@;
put 'b25tZW50SW5mbygpe3JldHVybiB0aGlzLmVudmlyb25tZW50SW5mb31wYXRjaFN5c3NpdGUoYSl7bGV0IGQ9dGhpcy5zeXNzaXRlLmdldFZhbHVlKCk7ZCYmKGQuaW5jbHVkZXMoYSl8fChkLnB1c2goYSksdGhpcy5zeXNzaXRlLm5leHQoZCkpKX1zdGFydFVwRGF0YSgpe3ZhciBhPXRoaXM7'@;
put 'cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IGQ9ITE7eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihmdW5jdGlvbigpe3ZhciBoPVEoZnVuY3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRF'@;
put 'XSk7bGV0IHY9W107aWYoKCFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc3x8Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnMmJiFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXSkmJnYucHVzaCgiR2xvYnZhcnMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNkYXRhc2V0c3x8di5wdXNoKCJT'@;
put 'YXNkYXRhc2V0cyIpLGYuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnN8fHYucHVzaCgiU2FzbGlicyIpLGYuYWRhcHRlclJlc3BvbnNlLnhsbWFwc3x8di5wdXNoKCJYTE1hcHMiKSx2Lmxlbmd0aD4wKXJldHVybiBkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixgJHt2'@;
put 'LmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2VgKSx2b2lkIGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7Y29uc3QgTT1hLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO2EuZW52aXJvbm1lbnRJbmZv'@;
put 'PXtTWVNTSVRFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1NJVEUsU1lTU0NQTDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLFNZU1RDUElQSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVENQSVBIT1NUTkFNRSxTWVNWTE9ORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyxNRU1TSVpF'@;
put 'OmYuYWRhcHRlclJlc3BvbnNlLk1FTVNJWkUsU1lTUFJPQ0VTU01PREU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTUFJPQ0VTU01PREUsU1lTSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsU1lTVVNFUklEOmYuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCxTWVNIT1NUSU5G'@;
put 'T0xPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0VOQ09ESU5HLEFVVE9FWEVDOmYuYWRhcHRlclJlc3BvbnNlLkFVVE9FWEVDLElTQURNSU46Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uSVNBRE1JTixE'@;
put 'Q19BRE1JTl9HUk9VUDpmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ19BRE1JTl9HUk9VUCxBUFBfTE9DOk0/LmFwcExvY307bGV0IHJlLHVlLEk9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHMsRz17fTtmb3IobGV0IEdlIG9mIEkpR1tHZS5MSUJSRUZdfHwoR1tHZS5MSUJS'@;
put 'RUZdPVtdKSxHW0dlLkxJQlJFRl0ucHVzaChHZS5EU04pO2xldCB5ZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEcpKSxFZT1bXTtmb3IobGV0IEdlIG9mIE9iamVjdC5rZXlzKHllKSlFZS5wdXNoKHtMSUJSQVJZUkVGOkdlLHRhYmxlczp5ZVtHZV19KTtsZXQgQmU9RWU7cmU9Ryx1ZT1P'@;
put 'YmplY3Qua2V5cyhHKSx2b2lkIDAhPT1yZSYmKEpuLmVkaXRvci5saWJzQW5kVGFibGVzPXJlKSxKbi54bG1hcHM9Zi5hZGFwdGVyUmVzcG9uc2UueGxtYXBzLm1hcChHZT0+KHtpZDpHZVswXSxkZXNjcmlwdGlvbjpHZVsxXSx0YXJnZXREUzpHZVsyXX0pKSxKbi5lZGl0b3IudHJlZU5vZGVM'@;
put 'aWJyYXJpZXM9QmUsSm4uZWRpdG9yLmxpYnJhcmllcz11ZSxKbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxKbi5kY0xpYj1mLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ0xJQix5aWVsZCBhLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb24oZi5hZGFwdGVyUmVzcG9uc2UpfSk7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGg9PntkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiVGhlcmUgaXMgYW4gaXNzdWUgd2l0aCBzdGFydHVwc2VydmljZSByZXNwb25zZSIpLGEubGljZW5jZVNlcnZp'@;
put 'Y2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSl9KSxhLmxvZ2dlclNlcnZpY2UubG9nKCJBY3RpdmF0ZWQ6IixhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKSxkfHwoYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0'@;
put 'aXZhdGVkLnZhbHVlP2Eucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIik6IWEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFhLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZp'@;
put 'Z2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzaW5nJmZvcmNlPXRydWUiKSl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKGMxKSxDcihtYyksQ3IoVm8pLENyKFNkKSxDcihKUiksQ3IoTG8pLENyKFE4KSl9fXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCksenVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdlPWg9Pnt9LHRoaXMub25U'@;
put 'b3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdl'@;
put 'PWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoRXMpLCRlKFFpKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSl9fXJldHVybiBj'@;
put 'fSkoKSxhNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgenVle3N0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVVvKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbQ2Fd'@;
put 'fSl9fXJldHVybiBjfSkoKTtjb25zdCBfcD1uZXcgU3QoIiIpLGVPZT17cHJvdmlkZTpfcCx1c2VFeGlzdGluZzp3bygoKT0+TWQpLG11bHRpOiEwfTtsZXQgTWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsYSl9c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9VW8oYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9s'@;
put 'TmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25D'@;
put 'aGFuZ2Uodi50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdWEoW2VPZV0pLENhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdE9lPXtwcm92aWRlOl9wLHVzZUV4aXN0aW5nOndvKCgpPT5HbCksbXVsdGk6ITB9LHJP'@;
put 'ZT1uZXcgU3QoIiIpO2xldCBHbD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgenVle2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQpLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1oLHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlv'@;
put 'bk1vZGU9IWZ1bmN0aW9uIG5PZSgpe2NvbnN0IGM9SjUoKT9KNSgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KGMudG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1faGFuZGxlSW5wdXQo'@;
put 'YSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoYSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGEpe3RoaXMuX2NvbXBvc2luZz0hMSx0'@;
put 'aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoRXMpLCRlKFFpKSwkZShyT2UsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5w'@;
put 'dXQiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQi'@;
put 'LCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwibmdNb2RlbCIsIiJdLFsiIiwibmdEZWZhdWx0Q29udHJvbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2hhbmRsZUlucHV0'@;
put 'KHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSkoImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguX2NvbXBvc2l0aW9uU3RhcnQoKX0pKCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2NvbXBv'@;
put 'c2l0aW9uRW5kKHYudGFyZ2V0LnZhbHVlKX0pfSxmZWF0dXJlczpbdWEoW3RPZV0pLENhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdTA9bmV3IFN0KCIiKSxjbT1uZXcgU3QoIiIpO2Z1bmN0aW9uIFl1ZShjKXtyZXR1cm4gZnVuY3Rpb24gbG0oYyl7cmV0dXJuIG51bGw9PWN8fCgic3RyaW5n'@;
put 'Ij09dHlwZW9mIGN8fEFycmF5LmlzQXJyYXkoYykpJiYwPT09Yy5sZW5ndGh9KGMudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBHdWUoYyl7cmV0dXJuITA9PT1jLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBkTChjKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBK'@;
put 'dWUoYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gUXVlKGMpe3JldHVybiB4TShjKT9VdShjKTpjfWZ1bmN0aW9uIGUwZShjKXtsZXQgbD17fTtyZXR1cm4gYy5mb3JFYWNoKGE9PntsPW51bGwhPWE/ey4uLmwsLi4uYX06bH0pLDA9PT1PYmplY3Qua2V5cyhsKS5sZW5ndGg/bnVsbDpsfWZ1'@;
put 'bmN0aW9uIHQwZShjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiBuMGUoYyl7cmV0dXJuIGMubWFwKGw9PmZ1bmN0aW9uIGFPZShjKXtyZXR1cm4hYy52YWxpZGF0ZX0obCk/bDphPT5sLnZhbGlkYXRlKGEpKX1mdW5jdGlvbiBHVyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlv'@;
put 'biByMGUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcihKdWUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBlMGUodDBlKGEsbCkpfX0objBlKGMpKTpudWxsfWZ1bmN0aW9uICRXKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIGkwZShj'@;
put 'KXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPWMuZmlsdGVyKEp1ZSk7cmV0dXJuIDA9PWwubGVuZ3RoP251bGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uIFFMZSguLi5jKXtjb25zdCBsPV9sZShjKSx7YXJnczphLGtleXM6ZH09d2xlKGMpLGg9bmV3IFF0KGY9Pntjb25zdHtsZW5n'@;
put 'dGg6dn09YTtpZighdilyZXR1cm4gdm9pZCBmLmNvbXBsZXRlKCk7Y29uc3QgTT1uZXcgQXJyYXkodik7bGV0IEk9dixHPXY7Zm9yKGxldCByZT0wO3JlPHY7cmUrKyl7bGV0IHVlPSExO28xKGFbcmVdKS5zdWJzY3JpYmUoSGkoZix5ZT0+e3VlfHwodWU9ITAsRy0tKSxNW3JlXT15ZX0sKCk9'@;
put 'PkktLSx2b2lkIDAsKCk9PnsoIUl8fCF1ZSkmJihHfHxmLm5leHQoZD9DbGUoZCxNKTpNKSxmLmNvbXBsZXRlKCkpfSkpfX0pO3JldHVybiBsP2gucGlwZShZWihsKSk6aH0odDBlKGEsbCkubWFwKFF1ZSkpLnBpcGUoUHIoZTBlKSl9fShuMGUoYykpOm51bGx9ZnVuY3Rpb24gYTBlKGMsbCl7'@;
put 'cmV0dXJuIG51bGw9PT1jP1tsXTpBcnJheS5pc0FycmF5KGMpP1suLi5jLGxdOltjLGxdfWZ1bmN0aW9uIEtXKGMpe3JldHVybiBjP0FycmF5LmlzQXJyYXkoYyk/YzpbY106W119ZnVuY3Rpb24gaEwoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jLmluY2x1ZGVzKGwpOmM9PT1sfWZ1'@;
put 'bmN0aW9uIGwwZShjLGwpe2NvbnN0IGE9S1cobCk7cmV0dXJuIEtXKGMpLmZvckVhY2goaD0+e2hMKGEsaCl8fGEucHVzaChoKX0pLGF9ZnVuY3Rpb24gYzBlKGMsbCl7cmV0dXJuIEtXKGwpLmZpbHRlcihhPT4haEwoYyxhKSl9Y2xhc3MgdTBle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3VmFs'@;
put 'aWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRy'@;
put 'b2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250'@;
put 'cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXty'@;
put 'ZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0'@;
put 'IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5j'@;
put 'b250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPWx8fFtdLHRo'@;
put 'aXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R1codGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPSRXKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0'@;
put 'IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5w'@;
put 'dXNoKGwpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldChsPXZvaWQgMCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQobCl9aGFzRXJyb3Io'@;
put 'bCxhKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKGwsYSl9Z2V0RXJyb3IobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcihsLGEpOm51bGx9fWNsYXNzIHoxIGV4dGVuZHMgdTBle2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0'@;
put 'dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19Y2xhc3MgdTEgZXh0ZW5kcyB1MGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyBkMGV7Y29uc3RydWN0'@;
put 'b3IobCl7dGhpcy5fY2Q9bH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9s'@;
put 'Py5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlzUGVu'@;
put 'ZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX1sZXQgdGw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGQwZXtjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdGF0aWN7dGhpcy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZSh1MSwyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlkKSgi'@;
put 'bmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZyl9LGZlYXR1cmVzOltDYV19KX19cmV0dXJuIGN9KSgpLHM3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBkMGV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGQpe3JldHVybiBuZXcoZHx8YykoJGUoejEsMTApKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwi'@;
put 'Il0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGgu'@;
put 'aXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZykoIm5nLXN1Ym1pdHRlZCIsaC5pc1N1Ym1pdHRlZCl9LGZlYXR1cmVzOltDYV19KX19cmV0dXJuIGN9'@;
put 'KSgpO2NvbnN0IG14PSJWQUxJRCIscEw9IklOVkFMSUQiLHdiPSJQRU5ESU5HIix2eD0iRElTQUJMRUQiO2Z1bmN0aW9uIEpXKGMpe3JldHVybihnTChjKT9jLnZhbGlkYXRvcnM6Yyl8fG51bGx9ZnVuY3Rpb24gUVcoYyxsKXtyZXR1cm4oZ0wobCk/bC5hc3luY1ZhbGlkYXRvcnM6Yyl8fG51'@;
put 'bGx9ZnVuY3Rpb24gZ0woYyl7cmV0dXJuIG51bGwhPWMmJiFBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGN9Y2xhc3MgZVl7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuX3Bl'@;
put 'bmRpbmdUb3VjaGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+e30sdGhpcy5fcGFyZW50PW51bGwsdGhpcy5wcmlzdGluZT0hMCx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwpLHRoaXMuX2Fzc2lnbkFz'@;
put 'eW5jVmFsaWRhdG9ycyhhKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcihsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49bH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5f'@;
put 'Y29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcihsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWx9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3Rh'@;
put 'dHVzPT09bXh9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1wTH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09d2J9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09dnh9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT12eH1nZXQg'@;
put 'ZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFs'@;
put 'aWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwpfXNldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl9YWRkVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRvcnMobDBlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5jVmFs'@;
put 'aWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhsMGUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhjMGUobCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMu'@;
put 'c2V0QXN5bmNWYWxpZGF0b3JzKGMwZShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcihsKXtyZXR1cm4gaEwodGhpcy5fcmF3VmFsaWRhdG9ycyxsKX1oYXNBc3luY1ZhbGlkYXRvcihsKXtyZXR1cm4gaEwodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLGwpfWNsZWFy'@;
put 'VmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITAsdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1Rv'@;
put 'dWNoZWQobCl9bWFya0FsbEFzVG91Y2hlZCgpe3RoaXMubWFya0FzVG91Y2hlZCh7b25seVNlbGY6ITB9KSx0aGlzLl9mb3JFYWNoQ2hpbGQobD0+bC5tYXJrQWxsQXNUb3VjaGVkKCkpfW1hcmtBc1VudG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9'@;
put 'ITEsdGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1VudG91Y2hlZCh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1tYXJrQXNEaXJ0eShsPXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVu'@;
put 'dCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eShsKX1tYXJrQXNQcmlzdGluZShsPXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+e2EubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSx0aGlz'@;
put 'Ll9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfW1hcmtBc1BlbmRpbmcobD17fSl7dGhpcy5zdGF0dXM9d2IsITEhPT1sLmVtaXRFdmVudCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmIWwub25s'@;
put 'eVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKGwpfWRpc2FibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlzLnN0YXR1cz12eCx0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5kaXNhYmxlKHsuLi5s'@;
put 'LG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09bC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlz'@;
put 'dGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZD0+ZCghMCkpfWVuYWJsZShsPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMuc3RhdHVzPW14LHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5lbmFibGUoey4uLmws'@;
put 'b25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZD0+'@;
put 'ZCghMSkpfV91cGRhdGVBbmNlc3RvcnMobCl7dGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGwpLGwuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0'@;
put 'ZVRvdWNoZWQoKSl9c2V0UGFyZW50KGwpe3RoaXMuX3BhcmVudD1sfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsPXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlz'@;
put 'Ll9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PW14fHx0aGlzLnN0YXR1cz09PXdiKSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IobC5l'@;
put 'bWl0RXZlbnQpKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5'@;
put 'KGwpfV91cGRhdGVUcmVlVmFsaWRpdHkobD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGE9PmEuX3VwZGF0ZVRyZWVWYWxpZGl0eShsKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlh'@;
put 'bFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT92eDpteH1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKGwpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ip'@;
put 'e3RoaXMuc3RhdHVzPXdiLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtjb25zdCBhPVF1ZSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3lu'@;
put 'Y1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRo'@;
put 'aXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQobCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChh'@;
put 'PWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJuIGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1'@;
put 'cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMu'@;
put 'ZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgS3IsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBLcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJu'@;
put 'IHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT92eDp0aGlzLmVycm9ycz9wTDp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyh3Yik/d2I6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKHBMKT9wTDpteH1fYW55Q29udHJv'@;
put 'bHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+'@;
put 'bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVk'@;
put 'PXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwp'@;
put 'e2dMKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQo'@;
put 'bCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rpb24gY09lKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP0dXKGMpOmN8fG51bGx9'@;
put 'KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uIHVPZShjKXtyZXR1cm4gQXJyYXkuaXNB'@;
put 'cnJheShjKT8kVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyBtTCBleHRlbmRzIGVZe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihKVyhhKSxRVyhkLGEpKSx0aGlzLmNvbnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRl'@;
put 'U3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVyQ29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJv'@;
put 'bHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxhLGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1'@;
put 'ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9sc1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUg'@;
put 'dGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30pe3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25D'@;
put 'b2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpkLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5z'@;
put 'KGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gcDBlKGMsbCxhKXtjLl9mb3JFYWNoQ2hpbGQoKGQsaCk9PntpZih2b2lkIDA9PT1hW2hdKXRocm93IG5ldyBucigxMDAy'@;
put 'LCIiKX0pfSkodGhpcywwLGwpLE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+eyhmdW5jdGlvbiBmMGUoYyxsLGEpe2NvbnN0IGQ9Yy5jb250cm9scztpZighKGw/T2JqZWN0LmtleXMoZCk6ZCkubGVuZ3RoKXRocm93IG5ldyBucigxZTMsIiIpO2lmKCFkW2FdKXRocm93IG5ldyBucigxMDAx'@;
put 'LCIiKX0pKHRoaXMsITAsZCksdGhpcy5jb250cm9sc1tkXS5zZXRWYWx1ZShsW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGwsYT17fSl7bnVsbCE9bCYmKE9iamVjdC5rZXlzKGwpLmZv'@;
put 'ckVhY2goZD0+e2NvbnN0IGg9dGhpcy5jb250cm9sc1tkXTtoJiZoLnBhdGNoVmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSkpfXJlc2V0KGw9e30sYT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKChk'@;
put 'LGgpPT57ZC5yZXNldChsP2xbaF06bnVsbCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0'@;
put 'aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3luY1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51'@;
put 'cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChkLGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hp'@;
put 'bGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2Jq'@;
put 'ZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZh'@;
put 'bHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRy'@;
put 'b2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3Qgbzc9bmV3'@;
put 'IFN0KCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnl4fSkseXg9ImFsd2F5cyI7ZnVuY3Rpb24gYngoYyxsLGE9eXgpe3RZKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09'@;
put 'YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gZk9lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMuX3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJj'@;
put 'aGFuZ2UiPT09Yy51cGRhdGVPbiYmZzBlKGMsbCl9KX0oYyxsKSxmdW5jdGlvbiBnT2UoYyxsKXtjb25zdCBhPShkLGgpPT57bC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoZCksaCYmbC52aWV3VG9Nb2RlbFVwZGF0ZShkKX07Yy5yZWdpc3Rlck9uQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25E'@;
put 'ZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uQ2hhbmdlKGEpfSl9KGMsbCksZnVuY3Rpb24gcE9lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgpPT57Yy5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09Yy51cGRhdGVPbiYmYy5fcGVuZGluZ0NoYW5nZSYmZzBl'@;
put 'KGMsbCksInN1Ym1pdCIhPT1jLnVwZGF0ZU9uJiZjLm1hcmtBc1RvdWNoZWQoKX0pfShjLGwpLGZ1bmN0aW9uIGhPZShjLGwpe2lmKGwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtjb25zdCBhPWQ9PntsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShkKX07Yy5yZWdp'@;
put 'c3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShhKX0pfX0oYyxsKX1mdW5jdGlvbiBiTChjLGwpe2MuZm9yRWFjaChhPT57YS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZhLnJlZ2lzdGVyT25W'@;
put 'YWxpZGF0b3JDaGFuZ2UobCl9KX1mdW5jdGlvbiB0WShjLGwpe2NvbnN0IGE9ZnVuY3Rpb24gczBlKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKGEwZShhLGwudmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGEm'@;
put 'JmMuc2V0VmFsaWRhdG9ycyhbYV0pO2NvbnN0IGQ9ZnVuY3Rpb24gbzBlKGMpe3JldHVybiBjLl9yYXdBc3luY1ZhbGlkYXRvcnN9KGMpO251bGwhPT1sLmFzeW5jVmFsaWRhdG9yP2Muc2V0QXN5bmNWYWxpZGF0b3JzKGEwZShkLGwuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtiTChsLl9yYXdWYWxpZGF0b3JzLGgpLGJMKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBnMGUoYyxsKXtjLl9wZW5kaW5nRGlydHkmJmMubWFya0Fz'@;
put 'RGlydHkoKSxjLnNldFZhbHVlKGMuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksbC52aWV3VG9Nb2RlbFVwZGF0ZShjLl9wZW5kaW5nVmFsdWUpLGMuX3BlbmRpbmdDaGFuZ2U9ITF9Y29uc3QgX09lPXtwcm92aWRlOnoxLHVzZUV4aXN0aW5nOndvKCgpPT53cCl9'@;
put 'LF94PVByb21pc2UucmVzb2x2ZSgpO2xldCB3cD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgejF7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1oLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0'@;
put 'PW5ldyBLcix0aGlzLmZvcm09bmV3IG1MKHt9LEdXKGEpLCRXKGQpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJu'@;
put 'W119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKGEpe194LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTthLmNvbnRyb2w9ZC5yZWdpc3RlckNvbnRyb2woYS5uYW1lLGEuY29udHJvbCksYngoYS5jb250cm9s'@;
put 'LGEsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGEpfSl9Z2V0Q29udHJvbChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXJlbW92ZUNvbnRyb2woYSl7'@;
put 'X3gudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2QmJmQucmVtb3ZlQ29udHJvbChhLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGEpfSl9YWRkRm9ybUdyb3VwKGEpe194LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5w'@;
put 'YXRoKSxoPW5ldyBtTCh7fSk7KGZ1bmN0aW9uIG0wZShjLGwpe3RZKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGEpe194LnRoZW4oKCk9Pntjb25zdCBkPXRo'@;
put 'aXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7X3gudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0p'@;
put 'fXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gdjBlKGMsbCl7Yy5fc3luY1BlbmRpbmdDb250cm9scygpLGwuZm9yRWFjaChhPT57Y29uc3QgZD1hLmNvbnRyb2w7InN1Ym1pdCI9PT1kLnVw'@;
put 'ZGF0ZU9uJiZkLl9wZW5kaW5nQ2hhbmdlJiYoYS52aWV3VG9Nb2RlbFVwZGF0ZShkLl9wZW5kaW5nVmFsdWUpLGQuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9KHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoYSksImRpYWxvZyI9PT1hPy50YXJnZXQ/Lm1ldGhv'@;
put 'ZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oYT12b2lkIDApe3RoaXMuZm9ybS5yZXNldChhKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBk'@;
put 'YXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihhKXtyZXR1cm4gYS5wb3AoKSxhLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGEpOnRoaXMuZm9ybX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZSh1MCwxMCksJGUoY20s'@;
put 'MTApLCRlKG83LDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJmb3JtR3JvdXAiLCIiXSxbIm5nLWZvcm0iXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0'@;
put 'KCJzdWJtaXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uU3VibWl0KHYpfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBoLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6W1ZuLk5vbmUsIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e25nU3VibWl0OiJuZ1N1Ym1p'@;
put 'dCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3VhKFtfT2VdKSxDYV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHkwZShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gYjBlKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYm'@;
put 'bnVsbCE9PWMmJjI9PT1PYmplY3Qua2V5cyhjKS5sZW5ndGgmJiJ2YWx1ZSJpbiBjJiYiZGlzYWJsZWQiaW4gY31jb25zdCBhWT1jbGFzcyBleHRlbmRzIGVZe2NvbnN0cnVjdG9yKGw9bnVsbCxhLGQpe3N1cGVyKEpXKGEpLFFXKGQsYSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhpcy5f'@;
put 'b25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShhKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRo'@;
put 'aXMuYXN5bmNWYWxpZGF0b3J9KSxnTChhKSYmKGEubm9uTnVsbGFibGV8fGEuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPWIwZShsKT9sLnZhbHVlOmwpfXNldFZhbHVlKGwsYT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bCx0aGlzLl9vbkNo'@;
put 'YW5nZS5sZW5ndGgmJiExIT09YS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZD0+ZCh0aGlzLnZhbHVlLCExIT09YS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe3Ro'@;
put 'aXMuc2V0VmFsdWUobCxhKX1yZXNldChsPXRoaXMuZGVmYXVsdFZhbHVlLGE9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMubWFya0FzUHJpc3RpbmUoYSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoYSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGEpLHRoaXMuX3BlbmRpbmdDaGFu'@;
put 'Z2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyhsKXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UobCl7dGhpcy5fb25DaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uQ2hhbmdlKGwpe3kwZSh0aGlz'@;
put 'Ll9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt5MGUodGhpcy5fb25EaXNhYmxlZENoYW5nZSxsKX1fZm9yRWFjaENoaWxkKGwpe31fc3luY1BlbmRpbmdD'@;
put 'b250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUo'@;
put 'dGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKGwpe2IwZShsKT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bC52YWx1ZSxsLmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAs'@;
put 'ZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sfX0sU09lPXtwcm92aWRlOnUxLHVzZUV4aXN0aW5nOndvKCgpPT5Xbyl9LHcwZT1Qcm9taXNlLnJlc29sdmUoKTtsZXQgV289KCgpPT57'@;
put 'Y2xhc3MgYyBleHRlbmRzIHUxe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXYsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1NLHRoaXMuY29udHJvbD1uZXcgYVksdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLm5hbWU9IiIsdGhpcy51'@;
put 'cGRhdGU9bmV3IEtyLHRoaXMuX3BhcmVudD1hLHRoaXMuX3NldFZhbGlkYXRvcnMoZCksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGgpLHRoaXMudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbiBpWShjLGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBhLGQsaDtyZXR1cm4gQXJyYXkuaXNBcnJheShs'@;
put 'KSxsLmZvckVhY2goZj0+e2YuY29uc3RydWN0b3I9PT1HbD9hPWY6ZnVuY3Rpb24geU9lKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5jb25zdHJ1Y3Rvcik9PT1hN30oZik/ZD1mOmg9Zn0pLGh8fGR8fGF8fG51bGx9KDAsZil9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5fY2hl'@;
put 'Y2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gYSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2NvbnN0IGQ9YS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRy'@;
put 'b2woe25hbWU6ZCxwYXRoOnRoaXMuX2dldFBhdGgoZCl9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBhJiZ0aGlzLl91cGRhdGVEaXNhYmxlZChhKSxmdW5jdGlvbiByWShjLGwpe2lmKCFjLmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2NvbnN0IGE9Yy5t'@;
put 'b2RlbDtyZXR1cm4hIWEuaXNGaXJzdENoYW5nZSgpfHwhT2JqZWN0LmlzKGwsYS5jdXJyZW50VmFsdWUpfShhLHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGly'@;
put 'ZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmll'@;
put 'd1RvTW9kZWxVcGRhdGUoYSl7dGhpcy52aWV3TW9kZWw9YSx0aGlzLnVwZGF0ZS5lbWl0KGEpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRD'@;
put 'b250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVy'@;
put 'biF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7YngodGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2Vt'@;
put 'aXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhp'@;
put 'cy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoYSl7dzBlLnRoZW4oKCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVj'@;
put 'aygpfSl9X3VwZGF0ZURpc2FibGVkKGEpe2NvbnN0IGQ9YS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxoPTAhPT1kJiZzMShkKTt3MGUudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0'@;
put 'aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiB2TChjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoejEsOSksJGUodTAsMTApLCRlKGNtLDEwKSwkZShfcCwxMCksJGUoeG8sOCksJGUobzcsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9y'@;
put 'bUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6W1ZuLk5vbmUsImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOltWbi5Ob25lLCJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOltWbi5Ob25lLCJuZ01vZGVsT3B0'@;
put 'aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3VhKFtTT2VdKSxDYSxibF19KX19cmV0dXJuIGN9KSgpLGw3PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIsIiJdXSxob3N0QXR0cnM6WyJub3ZhbGlkYXRlIiwiIl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IE1P'@;
put 'ZT17cHJvdmlkZTpfcCx1c2VFeGlzdGluZzp3bygoKT0+d0wpLG11bHRpOiEwfTtsZXQgd0w9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2Eo'@;
put 'IiI9PWQ/bnVsbDpwYXJzZUZsb2F0KGQpKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9VW8oYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIs'@;
put 'InR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImlucHV0Iixm'@;
put 'dW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdWEoW01PZV0pLENhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeE9lPXtwcm92aWRlOl9wLHVzZUV4aXN0aW5nOndv'@;
put 'KCgpPT5DTCksbXVsdGk6ITB9O2xldCBFT2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoYSxkKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbYSxkXSl9cmVtb3ZlKGEpe2ZvcihsZXQgZD10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZD49MDstLWQp'@;
put 'aWYodGhpcy5fYWNjZXNzb3JzW2RdWzFdPT09YSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGQsMSl9c2VsZWN0KGEpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGQ9Pnt0aGlzLl9pc1NhbWVHcm91cChkLGEpJiZkWzFdIT09YSYmZFsxXS5maXJlVW5jaGVjayhhLnZhbHVl'@;
put 'KX0pfV9pc1NhbWVHcm91cChhLGQpe3JldHVybiEhYVswXS5jb250cm9sJiZhWzBdLl9wYXJlbnQ9PT1kLl9jb250cm9sLl9wYXJlbnQmJmFbMV0ubmFtZT09PWQubmFtZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxDTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYTd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYSxkKSx0aGlzLl9yZWdpc3RyeT1oLHRoaXMuX2luamVjdG9y'@;
put 'PWYsdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1oaShvNyx7b3B0aW9uYWw6ITB9KT8/eXh9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldCh1MSksdGhpcy5fY2hlY2tO'@;
put 'YW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShhKXt0aGlzLl9zdGF0ZT1hPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9zdGF0'@;
put 'ZSl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLl9mbj1hLHRoaXMub25DaGFuZ2U9KCk9PnthKHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShhKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGF8fCJ3aGVuRGlzYWJsZWRGb3JM'@;
put 'ZWdhY3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSksdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soYSl7dGhpcy53cml0ZVZhbHVlKGEpfV9jaGVja05hbWUoKXshdGhpcy5uYW1lJiZ0aGlz'@;
put 'LmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoRXMpLCRlKFFpKSwkZShFT2UpLCRlKERvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgp'@;
put 'ezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNoYW5nZSgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntuYW1lOiJuYW1lIixmb3JtQ29udHJvbE5hbWU6ImZvcm1Db250cm9sTmFtZSIsdmFsdWU6InZhbHVlIn0sZmVh'@;
put 'dHVyZXM6W3VhKFt4T2VdKSxDYV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IG9ZPW5ldyBTdCgiIiksTE9lPXtwcm92aWRlOl9wLHVzZUV4aXN0aW5nOndvKCgpPT5rMiksbXVsdGk6ITB9O2Z1bmN0aW9uIEUwZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVv'@;
put 'ZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgazI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJl'@;
put 'V2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1FMGUodGhpcy5fZ2V0T3B0aW9uSWQoYSksYSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGgpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7'@;
put 'dGhpcy5vbkNoYW5nZT1kPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShkKSxhKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlv'@;
put 'bk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiBPT2UoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29w'@;
put 'dGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKTphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVVvKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsx'@;
put 'JmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W3VhKFtMT2VdKSxDYV19'@;
put 'KX19cmV0dXJuIGN9KSgpLEQyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1kLHRoaXMuX3NlbGVjdD1oLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1'@;
put 'ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCxhKSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoRTBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlz'@;
put 'Ll9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyko'@;
put 'JGUoUWkpLCRlKEVzKSwkZShrMiw5KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUE9lPXtwcm92aWRlOl9wLHVzZUV4'@;
put 'aXN0aW5nOndvKCgpPT53eCksbXVsdGk6ITB9O2Z1bmN0aW9uIFQwZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1s'@;
put 'ZXQgd3g9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBh'@;
put 'cmVXaXRoPWF9d3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZix2KT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZih2LnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPSho'@;
put 'LGYpPT57aC5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCB2PWY7Zm9yKGxldCBNPTA7TTx2Lmxl'@;
put 'bmd0aDtNKyspe2NvbnN0IEc9dGhpcy5fZ2V0T3B0aW9uVmFsdWUodltNXS52YWx1ZSk7aC5wdXNoKEcpfX1lbHNle2NvbnN0IHY9ZC5vcHRpb25zO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBJPXZbTV07aWYoSS5zZWxlY3RlZCl7Y29uc3QgRz10aGlzLl9nZXRPcHRpb25W'@;
put 'YWx1ZShJLnZhbHVlKTtoLnB1c2goRyl9fX10aGlzLnZhbHVlPWgsYShoKX19X3JlZ2lzdGVyT3B0aW9uKGEpe2NvbnN0IGQ9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGQsYSksZH1fZ2V0T3B0aW9uSWQoYSl7Zm9yKGNvbnN0IGQg'@;
put 'b2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92YWx1ZSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiBGT2UoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVsw'@;
put 'XX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWU6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1VbyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdEJp'@;
put 'bmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVz'@;
put 'Olt1YShbUE9lXSksQ2FdfSl9fXJldHVybiBjfSkoKSxJMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRp'@;
put 'b24odGhpcykpfXNldCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKFQwZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2Vs'@;
put 'ZWN0Pyh0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShUMGUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0'@;
put 'UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9X3NldFNlbGVjdGVkKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhp'@;
put 'cy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKFFpKSwkZShFcyksJGUod3gsOSkpfX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpLGM3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9ZEx9bmdPbkNoYW5n'@;
put 'ZXMoYSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gYSl7Y29uc3QgZD10aGlzLm5vcm1hbGl6ZUlucHV0KGFbdGhpcy5pbnB1dE5hbWVdLmN1cnJlbnRWYWx1ZSk7dGhpcy5fZW5hYmxlZD10aGlzLmVuYWJsZWQoZCksdGhpcy5fdmFsaWRhdG9yPXRoaXMuX2VuYWJsZWQ/dGhpcy5jcmVhdGVWYWxp'@;
put 'ZGF0b3IoZCk6ZEwsdGhpcy5fb25DaGFuZ2UmJnRoaXMuX29uQ2hhbmdlKCl9fXZhbGlkYXRlKGEpe3JldHVybiB0aGlzLl92YWxpZGF0b3IoYSl9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShhKXt0aGlzLl9vbkNoYW5nZT1hfWVuYWJsZWQoYSl7cmV0dXJuIG51bGwhPWF9c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGZlYXR1cmVzOltibF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IFZPZT17cHJvdmlkZTp1MCx1c2VFeGlzdGluZzp3bygoKT0+Y1kpLG11bHRpOiEwfSxCT2U9'@;
put 'e3Byb3ZpZGU6dTAsdXNlRXhpc3Rpbmc6d28oKCk9PnVZKSxtdWx0aTohMH07bGV0IGNZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBjN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PXMxLHRoaXMu'@;
put 'Y3JlYXRlVmFsaWRhdG9yPWE9Pll1ZX1lbmFibGVkKGEpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVVvKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxl'@;
put 'Y3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJj'@;
put 'aGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmaHIoInJlcXVpcmVkIixoLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOlt1YShbVk9lXSksQ2FdfSl9fXJldHVybiBjfSkoKSx1WT0oKCk9'@;
put 'PntjbGFzcyBjIGV4dGVuZHMgY1l7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWE9Pkd1ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1VbyhjKSkpKGh8fGMpfX0p'@;
put 'KCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIs'@;
put 'IiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJmhyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0sZmVhdHVyZXM6W3VhKFtCT2VdKSxDYV19KX19'@;
put 'cmV0dXJuIGN9KSgpLEYwZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKSxrYz0o'@;
put 'KCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6bzcsdXNlVmFsdWU6YS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/eXh9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltGMGVdfSl9fXJldHVybiBjfSkoKSxZT2U9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92'@;
put 'aWRlOm9ZLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOm83LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P3l4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0'@;
put 'aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbRjBlXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQ2I9WyJhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNyww'@;
put 'LDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPid9XSxiaD1bImV4Y2xhbWF0aW9uLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxOS44QzE4LjU1IDE5LjggMTkgMTkuMzUgMTkgMTguOFYxM0MxOSAxMi40NSAxOC41NSAx'@;
put 'MiAxOCAxMkMxNy40NSAxMiAxNyAxMi40NSAxNyAxM1YxOC44QzE3IDE5LjM1IDE3LjQ1IDE5LjggMTggMTkuOFpNMTguODUgMjEuOTVDMTguNzMgMjEuODQgMTguNiAyMS43NSAxOC40NiAyMS42OUMxOC4xNyAyMS41NyAxNy44MyAyMS41NyAxNy41NCAyMS42OUMxNy40IDIxLjc1IDE3LjI3'@;
put 'IDIxLjg0IDE3LjE1IDIxLjk1QzE2LjkzIDIyLjE4IDE2LjggMjIuNDggMTYuOCAyMi44QzE2LjggMjMuMTIgMTYuOTMgMjMuNDIgMTcuMTUgMjMuNjVDMTcuMjcgMjMuNzYgMTcuNCAyMy44NSAxNy41NCAyMy45MUMxNy42OSAyMy45NyAxNy44NCAyNCAxOCAyNEMxOC4xNiAyNCAxOC4zMSAy'@;
put 'My45NyAxOC40NiAyMy45MUMxOC42IDIzLjg1IDE4LjczIDIzLjc2IDE4Ljg1IDIzLjY1QzE5LjA3IDIzLjQyIDE5LjIgMjMuMTIgMTkuMiAyMi44QzE5LjIgMjIuNjQgMTkuMTcgMjIuNDkgMTkuMTEgMjIuMzRDMTkuMDUgMjIuMiAxOC45NiAyMi4wNiAxOC44NSAyMS45NVpNMTggNkMxMS4z'@;
put 'OCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMu'@;
put 'NTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE2LjggMTIuNjVDMTYuOCAxMS45OSAxNy4zNCAx'@;
put 'MS40NSAxOCAxMS40NUMxOC42NiAxMS40NSAxOS4yIDExLjk5IDE5LjIgMTIuNjVWMTguNDVDMTkuMiAxOS4xMSAxOC42NiAxOS42NSAxOCAxOS42NUMxNy4zNCAxOS42NSAxNi44IDE5LjExIDE2LjggMTguNDVWMTIuNjVaTTE4Ljk4IDI0LjE1QzE4Ljg0IDI0LjI4IDE4LjY5IDI0LjM4IDE4'@;
put 'LjUzIDI0LjQ1QzE4LjM1IDI0LjUyIDE4LjE4IDI0LjU2IDE4IDI0LjU2QzE3LjgyIDI0LjU2IDE3LjY0IDI0LjUzIDE3LjQ2IDI0LjQ1QzE3LjMxIDI0LjM4IDE3LjE2IDI0LjI5IDE3IDI0LjE0QzE2Ljc0IDIzLjg3IDE2LjU5IDIzLjUyIDE2LjU5IDIzLjE1QzE2LjU5IDIyLjc4IDE2Ljcz'@;
put 'IDIyLjQ0IDE3IDIyLjE1QzE3LjE0IDIyLjAyIDE3LjI5IDIxLjkyIDE3LjQ1IDIxLjg1QzE3LjYyIDIxLjc4IDE3LjggMjEuNzQgMTcuOTkgMjEuNzRDMTguMTggMjEuNzQgMTguMzYgMjEuNzggMTguNTMgMjEuODVDMTguNjggMjEuOTIgMTguODMgMjIuMDIgMTguOTggMjIuMTVDMTkuMSAy'@;
put 'Mi4yNyAxOS4yMSAyMi40MyAxOS4yOCAyMi42MUMxOS4zNSAyMi43OSAxOS4zOSAyMi45NiAxOS4zOSAyMy4xNEMxOS4zOSAyMy41IDE5LjI1IDIzLjg1IDE4Ljk3IDI0LjE0TDE4Ljk4IDI0LjE1WiIvPid9XSxfaD1bImNoZWNrLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMi42MSAx'@;
put 'NC4yMkwxNi4yNSAyMC41OEwxMi43MSAxNy4wNEMxMi4zMiAxNi42NSAxMS42OSAxNi42NSAxMS4zIDE3LjA0QzEwLjkxIDE3LjQzIDEwLjkxIDE4LjA2IDExLjMgMTguNDVMMTYuMjUgMjMuNEwyNC4wMyAxNS42MkMyNC40MiAxNS4yMyAyNC40MiAxNC42IDI0LjAzIDE0LjIxQzIzLjY0IDEz'@;
put 'LjgyIDIzLjAxIDEzLjgyIDIyLjYyIDE0LjIxTDIyLjYxIDE0LjIyWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThD'@;
put 'OCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMw'@;
put 'IDExLjM4IDI0LjYyIDYgMTggNlpNMjQuMTYgMTUuNzhMMTYuMjQgMjMuN0wxMS4xNSAxOC42MUMxMC42OCAxOC4xNCAxMC42OCAxNy4zOCAxMS4xNSAxNi45MUMxMS42MiAxNi40NCAxMi4zOCAxNi40NCAxMi44NSAxNi45MUwxNi4yNCAyMC4zTDIyLjQ2IDE0LjA4QzIyLjkzIDEzLjYxIDIz'@;
put 'LjY5IDEzLjYxIDI0LjE2IDE0LjA4QzI0LjYzIDE0LjU1IDI0LjYzIDE1LjMxIDI0LjE2IDE1Ljc4WiIvPid9XSxIMGU9WyJlbGxpcHNpcy1ob3Jpem9udGFsIix7b3V0bGluZTonPHBhdGggZD0iTTcuOCAxOC4xQzcuOCAxOS43NTY4IDYuNTAxNjMgMjEuMSA0LjkgMjEuMUMzLjI5ODM3IDIx'@;
put 'LjEgMiAxOS43NTY4IDIgMTguMUMyIDE2LjQ0MzEgMy4yOTgzNyAxNS4xIDQuOSAxNS4xQzYuNTAxNjMgMTUuMSA3LjggMTYuNDQzMSA3LjggMTguMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAx'@;
put 'NS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zMS4xIDIxLjFDMzIuNzAxNiAyMS4xIDM0IDE5Ljc1NjggMzQgMTguMUMzNCAxNi40NDMxIDMyLjcwMTYgMTUuMSAzMS4x'@;
put 'IDE1LjFDMjkuNDk4NCAxNS4xIDI4LjIgMTYuNDQzMSAyOC4yIDE4LjFDMjguMiAxOS43NTY4IDI5LjQ5ODQgMjEuMSAzMS4xIDIxLjFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNNC45IDIxLjFDNi41MDE2MyAyMS4xIDcuOCAxOS43NTY4IDcuOCAxOC4xQzcuOCAxNi40NDMxIDYu'@;
put 'NTAxNjMgMTUuMSA0LjkgMTUuMUMzLjI5ODM3IDE1LjEgMiAxNi40NDMxIDIgMTguMUMyIDE5Ljc1NjggMy4yOTgzNyAyMS4xIDQuOSAyMS4xWiIvPjxwYXRoIGQ9Ik0xOCAyMS4xQzE5LjYwMTYgMjEuMSAyMC45IDE5Ljc1NjggMjAuOSAxOC4xQzIwLjkgMTYuNDQzMSAxOS42MDE2IDE1LjEg'@;
put 'MTggMTUuMUMxNi4zOTg0IDE1LjEgMTUuMSAxNi40NDMxIDE1LjEgMTguMUMxNS4xIDE5Ljc1NjggMTYuMzk4NCAyMS4xIDE4IDIxLjFaIi8+PHBhdGggZD0iTTM0IDE4LjFDMzQgMTkuNzU2OCAzMi43MDE2IDIxLjEgMzEuMSAyMS4xQzI5LjQ5ODQgMjEuMSAyOC4yIDE5Ljc1NjggMjguMiAx'@;
put 'OC4xQzI4LjIgMTYuNDQzMSAyOS40OTg0IDE1LjEgMzEuMSAxNS4xQzMyLjcwMTYgMTUuMSAzNCAxNi40NDMxIDM0IDE4LjFaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTgg'@;
put 'MjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLEN4PVsid2luZG93LWNsb3NlIix7b3V0bGluZTonPHBhdGggZD0iTTE5LjQxIDE4LjAwMDNMMjYuNyAxMC43MTAzQzI3LjAzOTggMTAuMzEzNSAyNy4wMTY5IDkuNzIyMDcgMjYuNjQ3NiA5LjM1MjdDMjYuMjc4MiA4Ljk4'@;
put 'MzMzIDI1LjY4NjggOC45NjA0OSAyNS4yOSA5LjMwMDI2TDE4IDE2LjU5MDNMMTAuNzEgOS4yOTAyNkMxMC4zMTMyIDguOTUwNDkgOS43MjE4MSA4Ljk3MzMzIDkuMzUyNDQgOS4zNDI3QzguOTgzMDcgOS43MTIwNyA4Ljk2MDIzIDEwLjMwMzUgOS4zMDAwMSAxMC43MDAzTDE2LjU5IDE4LjAw'@;
put 'MDNMOS4yOTAwMSAyNS4yOTAzQzkuMDA0NjMgMjUuNTM0NyA4Ljg4MDMyIDI1LjkxODQgOC45NjgxOSAyNi4yODM3QzkuMDU2MDcgMjYuNjQ5IDkuMzQxMjkgMjYuOTM0MiA5LjcwNjU5IDI3LjAyMjFDMTAuMDcxOSAyNy4xMDk5IDEwLjQ1NTYgMjYuOTg1NiAxMC43IDI2LjcwMDNMMTggMTku'@;
put 'NDEwM0wyNS4yOSAyNi43MDAzQzI1LjY4NjggMjcuMDQgMjYuMjc4MiAyNy4wMTcyIDI2LjY0NzYgMjYuNjQ3OEMyNy4wMTY5IDI2LjI3ODUgMjcuMDM5OCAyNS42ODcgMjYuNyAyNS4yOTAzTDE5LjQxIDE4LjAwMDNaIi8+J31dLEdPZT1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPHBhdGgg'@;
put 'ZD0iTTIxIDIzSDE5VjE1SDE2QzE1LjQ1IDE1IDE1IDE1LjQ1IDE1IDE2QzE1IDE2LjU1IDE1LjQ1IDE3IDE2IDE3SDE3VjIzSDE1QzE0LjQ1IDIzIDE0IDIzLjQ1IDE0IDI0QzE0IDI0LjU1IDE0LjQ1IDI1IDE1IDI1SDIxQzIxLjU1IDI1IDIyIDI0LjU1IDIyIDI0QzIyIDIzLjQ1IDIxLjU1'@;
put 'IDIzIDIxIDIzWk0xNy45MyAxMy4zQzE4LjcgMTMuMyAxOS4zMyAxMi42NyAxOS4zMyAxMS45QzE5LjMzIDExLjEzIDE4LjcgMTAuNSAxNy45MyAxMC41QzE3LjE2IDEwLjUgMTYuNTMgMTEuMTMgMTYuNTMgMTEuOUMxNi41MyAxMi42NyAxNy4xNiAxMy4zIDE3LjkzIDEzLjNaTTE4IDZDMTEu'@;
put 'MzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIz'@;
put 'LjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNy45MyAxMC4zQzE4LjgxIDEwLjMgMTkuNTMg'@;
put 'MTEuMDIgMTkuNTMgMTEuOUMxOS41MyAxMi43OCAxOC44MSAxMy41IDE3LjkzIDEzLjVDMTcuMDUgMTMuNSAxNi4zMyAxMi43OCAxNi4zMyAxMS45QzE2LjMzIDExLjAyIDE3LjA1IDEwLjMgMTcuOTMgMTAuM1pNMjEgMjUuMkgxNUMxNC4zNCAyNS4yIDEzLjggMjQuNjYgMTMuOCAyNEMxMy44'@;
put 'IDIzLjM0IDE0LjM0IDIyLjggMTUgMjIuOEgxNi44VjE3LjJIMTZDMTUuMzQgMTcuMiAxNC44IDE2LjY2IDE0LjggMTZDMTQuOCAxNS4zNCAxNS4zNCAxNC44IDE2IDE0LjhIMTkuMlYyMi44SDIxQzIxLjY2IDIyLjggMjIuMiAyMy4zNCAyMi4yIDI0QzIyLjIgMjQuNjYgMjEuNjYgMjUuMiAy'@;
put 'MSAyNS4yWiIvPid9XSxOMGU9WyJ0aW1lcyIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40Njk2IDE3Ljk3MzJMMjcuNzU5NiA5LjcwNTQyQzI4LjA5OTQgOS4zMDk3MiAyOC4wNzY1IDguNzE5ODcgMjcuNzA3MSA4LjM1MTQ4QzI3LjMzNzggNy45ODMxIDI2Ljc0NjMgNy45NjAzMiAyNi4zNDk2'@;
put 'IDguMjk5MTlMMTguMDU5NiAxNi41NjdMOS43Njk1OCA4LjI4OTIyQzkuMzc3NDUgNy44OTgxNCA4Ljc0MTcgNy44OTgxNCA4LjM0OTU4IDguMjg5MjJDNy45NTc0NSA4LjY4MDI5IDcuOTU3NDUgOS4zMTQzNCA4LjM0OTU4IDkuNzA1NDJMMTYuNjQ5NiAxNy45NzMyTDguMzQ5NTggMjYuMjQx'@;
put 'QzguMDY0MiAyNi40ODQ4IDcuOTM5ODkgMjYuODY3NSA4LjAyNzc3IDI3LjIzMThDOC4xMTU2NCAyNy41OTYxIDguNDAwODYgMjcuODgwNiA4Ljc2NjE2IDI3Ljk2ODJDOS4xMzE0NiAyOC4wNTU5IDkuNTE1MTkgMjcuOTMxOSA5Ljc1OTU4IDI3LjY0NzNMMTguMDU5NiAxOS4zNzk1TDI2LjM0'@;
put 'OTYgMjcuNjQ3M0MyNi43NDYzIDI3Ljk4NjEgMjcuMzM3OCAyNy45NjM0IDI3LjcwNzEgMjcuNTk1QzI4LjA3NjUgMjcuMjI2NiAyOC4wOTk0IDI2LjYzNjcgMjcuNzU5NiAyNi4yNDFMMTkuNDY5NiAxNy45NzMyWiIvPid9XSxWMGU9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBk'@;
put 'PSJNMjguMzQ5MSAxNy44OTk2QzI4LjUzODQgMTguMDgzNyAyOC43OTQ1IDE4LjE4NjMgMjkuMDYxIDE4LjE4NDhDMjkuNDY0IDE4LjE4MzEgMjkuODI2OCAxNy45NDUxIDI5Ljk4MjEgMTcuNTgwNUMzMC4xMzc0IDE3LjIxNTggMzAuMDU1IDE2Ljc5NTUgMjkuNzcyOSAxNi41MTMzTDE4LjAz'@;
put 'MTggNUw2LjMwMDY3IDE2LjUxMzNDNS45NTk5OSAxNi45MDM0IDUuOTgyODkgMTcuNDg0OSA2LjM1MzI1IDE3Ljg0ODFDNi43MjM2IDE4LjIxMTIgNy4zMTY2IDE4LjIzMzcgNy43MTQ0MiAxNy44OTk2TDE4LjAzMTggNy43ODI0NkwyOC4zNDkxIDE3Ljg5OTZaIi8+PHBhdGggZD0iTTI4LjM0'@;
put 'OTEgMjguNzE0OUMyOC41Mzg0IDI4Ljg5ODkgMjguNzk0NSAyOS4wMDE1IDI5LjA2MSAyOUMyOS40NjQgMjguOTk4NCAyOS44MjY4IDI4Ljc2MDMgMjkuOTgyMSAyOC4zOTU3QzMwLjEzNzQgMjguMDMxMSAzMC4wNTUgMjcuNjEwNyAyOS43NzI5IDI3LjMyODVMMTguMDMxOCAxNS44MTUyTDYu'@;
put 'MzAwNjcgMjcuMzI4NUM1Ljk1OTk5IDI3LjcxODYgNS45ODI4OSAyOC4zMDAxIDYuMzUzMjUgMjguNjYzM0M2LjcyMzYgMjkuMDI2NSA3LjMxNjYgMjkuMDQ4OSA3LjcxNDQyIDI4LjcxNDlMMTguMDMxOCAxOC41OTc3TDI4LjM0OTEgMjguNzE0OVoiLz4nfV0sJE9lPVsiZXZlbnQiLHtvdXRs'@;
put 'aW5lOic8cGF0aCBkPSJNMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEu'@;
put 'NTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4yMiAxOS4wOUwxNi4xNyAyM0wyNC44MSAxNC4zNkMyNS4wMDEzIDE0LjE5NjIgMjUuMjQ3NCAxNC4xMTA2IDI1LjQ5OTEgMTQuMTIwM0MyNS43NTA3IDE0LjEzIDI1Ljk4OTUgMTQuMjM0MyAyNi4xNjc2IDE0'@;
put 'LjQxMjRDMjYuMzQ1NyAxNC41OTA1IDI2LjQ1IDE0LjgyOTMgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjlWOEgzMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUw'@;
put 'MDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45'@;
put 'OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAz'@;
put 'MS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMz'@;
put 'Ljc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMz'@;
put 'My4zMzc0IDYuMzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcg'@;
put 'MTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0Nzgg'@;
put 'OS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5LjcwNzExQzI2Ljg5NDcgOS41'@;
put 'MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40ODA0MyAyNSAyLjczNDc4'@;
put 'IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTIzIDZIMTNWOEgyM1Y2WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIy'@;
put 'MiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3'@;
put 'NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBk'@;
put 'PSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjQgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMDQgMzAuNDIzOCAzMy45NjE5IDMwLjY1NiAzMy44NzYxIDMwLjg3MzVDMzMuNzkwMyAzMS4wOTEgMzMuNjYyNSAzMS4yODk0IDMzLjUgMzEuNDU3NUMzMy4z'@;
put 'Mzc0IDMxLjYyNTYgMzMuMTQzNCAzMS43NiAzMi45Mjg5IDMxLjg1MzFDMzIuNzE0NSAzMS45NDYyIDMyLjQ4MzggMzEuOTk2MSAzMi4yNSAzMkgzLjc1MDAxQzMuNTE2MjUgMzEuOTk2MSAzLjI4NTU1IDMxLjk0NjIgMy4wNzEwOCAzMS44NTMxQzIuODU2NjEgMzEuNzYgMi42NjI1OCAzMS42'@;
put 'MjU2IDIuNTAwMDcgMzEuNDU3NUMyLjMzNzU3IDMxLjI4OTQgMi4yMDk3NiAzMS4wOTEgMi4xMjM5NiAzMC44NzM1QzIuMDM4MTYgMzAuNjU2IDEuOTk2MDQgMzAuNDIzOCAyLjAwMDAxIDMwLjE5VjcuODFDMS45OTYwNCA3LjU3NjI0IDIuMDM4MTYgNy4zNDM5OCAyLjEyMzk2IDcuMTI2NUMy'@;
put 'LjIwOTc2IDYuOTA5MDIgMi4zMzc1NyA2LjcxMDU3IDIuNTAwMDcgNi41NDI0OUMyLjY2MjU4IDYuMzc0NDEgMi44NTY2MSA2LjIzOTk5IDMuMDcxMDggNi4xNDY5MUMzLjI4NTU1IDYuMDUzODMgMy41MTYyNSA2LjAwMzkxIDMuNzUwMDEgNkg3LjAwMDAxVjhINC4wMDAwMVYzMEgzMlYxNS4w'@;
put 'MzY3WiIvPjxwYXRoIGQ9Ik0yNC4xMzMzIDE1LjAzNjdIMjYuNDU3QzI2LjQ1ODMgMTUuMDUxNCAyNi40NTkyIDE1LjA2NjEgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIw'@;
put 'LjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4y'@;
put 'MiAxOS4wOUwxNi4xNyAyM0wyNC4xMzMzIDE1LjAzNjdaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkwyMC43NTk0IDhIMTNWNkgyMS45NTk0WiIvPjxwYXRoIGQ9Ik0xMC43MDcxIDkuNzA3MTFDMTAuNTE5NiA5Ljg5NDY0IDEwLjI2NTIgMTAgMTAgMTBDOS43MzQ4IDEwIDkuNDgwNDQgOS44OTQ2'@;
put 'NCA5LjI5MjkxIDkuNzA3MTFDOS4xMDUzNyA5LjUxOTU3IDkuMDAwMDEgOS4yNjUyMiA5LjAwMDAxIDlWM0M5LjAwMDAxIDIuNzM0NzggOS4xMDUzNyAyLjQ4MDQzIDkuMjkyOTEgMi4yOTI4OUM5LjQ4MDQ0IDIuMTA1MzYgOS43MzQ4IDIgMTAgMkMxMC4yNjUyIDIgMTAuNTE5NiAyLjEwNTM2'@;
put 'IDEwLjcwNzEgMi4yOTI4OUMxMC44OTQ3IDIuNDgwNDMgMTEgMi43MzQ3OCAxMSAzVjlDMTEgOS4yNjUyMiAxMC44OTQ3IDkuNTE5NTcgMTAuNzA3MSA5LjcwNzExWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTEwLjgxIDIwLjVMMTYuMTcgMjUuODZMMjYuMjIgMTUuODFDMjYuMzgz'@;
put 'OCAxNS42MTg3IDI2LjQ2OTQgMTUuMzcyNiAyNi40NTk3IDE1LjEyMDlDMjYuNDUgMTQuODY5MyAyNi4zNDU3IDE0LjYzMDUgMjYuMTY3NiAxNC40NTI0QzI1Ljk4OTUgMTQuMjc0MyAyNS43NTA3IDE0LjE3IDI1LjQ5OTEgMTQuMTYwM0MyNS4yNDc0IDE0LjE1MDYgMjUuMDAxMyAxNC4yMzYy'@;
put 'IDI0LjgxIDE0LjRMMTYuMTcgMjNMMTIuMjMgMTkuMDZDMTIuMDM4NyAxOC44OTYyIDExLjc5MjYgMTguODEwNiAxMS41NDEgMTguODIwM0MxMS4yODkzIDE4LjgzIDExLjA1MDUgMTguOTM0MyAxMC44NzI0IDE5LjExMjRDMTAuNjk0NCAxOS4yOTA1IDEwLjU5IDE5LjUyOTMgMTAuNTgwMyAx'@;
put 'OS43ODA5QzEwLjU3MDYgMjAuMDMyNiAxMC42NTYyIDIwLjI3ODcgMTAuODIgMjAuNDdMMTAuODEgMjAuNVoiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjcz'@;
put 'NDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1'@;
put 'MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0zMiAxMy4yMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2'@;
put 'OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzgg'@;
put 'Mi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAz'@;
put 'MkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4w'@;
put 'MDQgMzAuNDIzOCAzNCAzMC4xOVYxMi4zNEMzMy4zODAyIDEyLjczIDMyLjcwNjMgMTMuMDI2NiAzMiAxMy4yMloiLz48cGF0aCBkPSJNMjIuNSA2SDEzVjhIMjIuNzhDMjIuNTk2OCA3LjM0OTAzIDIyLjUwMjYgNi42NzYyNSAyMi41IDZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEg'@;
put 'MzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcx'@;
put 'MUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0'@;
put 'MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5'@;
put 'LjcwNzExQzI2Ljg5NDcgOS41MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQg'@;
put 'Mi40ODA0MyAyNSAyLjczNDc4IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjguMjVWOUMyOC4yNSA5LjU4MzQ4IDI4LjAxODIgMTAuMTQzMSAyNy42'@;
put 'MDU2IDEwLjU1NTZDMjcuMTkzMSAxMC45NjgyIDI2LjYzMzUgMTEuMiAyNi4wNSAxMS4yQzI1LjQ2NjUgMTEuMiAyNC45MDcgMTAuOTY4MiAyNC40OTQ0IDEwLjU1NTZDMjQuMDgxOCAxMC4xNDMxIDIzLjg1IDkuNTgzNDggMjMuODUgOVY2SDEyLjJWOUMxMi4yIDkuNTgzNDggMTEuOTY4MiAx'@;
put 'MC4xNDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFDMy41NjIwNCA1'@;
put 'Ljk5NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5OSA3LjU3MjA0'@;
put 'IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1'@;
put 'NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkx'@;
put 'IDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4zMzc0IDYuMzc0'@;
put 'NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaTTI1Ljk0IDE2LjU4TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1Mjkg'@;
put 'MTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyNCAxNC42NkMyNC4xMjY3IDE0LjUzMzMg'@;
put 'MjQuMjc3MiAxNC40MzI3IDI0LjQ0MjggMTQuMzY0MkMyNC42MDgzIDE0LjI5NTYgMjQuNzg1OCAxNC4yNjAzIDI0Ljk2NSAxNC4yNjAzQzI1LjE0NDIgMTQuMjYwMyAyNS4zMjE3IDE0LjI5NTYgMjUuNDg3MyAxNC4zNjQyQzI1LjY1MjggMTQuNDMyNyAyNS44MDMzIDE0LjUzMzMgMjUuOTMg'@;
put 'MTQuNjZDMjYuMDU2NyAxNC43ODY3IDI2LjE1NzMgMTQuOTM3MiAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMxMjgg'@;
put 'MjYuMDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDI1Ljk0IDE2LjU4WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAy'@;
put 'MS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEz'@;
put 'IDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAx'@;
put 'MC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2'@;
put 'LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40'@;
put 'MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUw'@;
put 'MDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYg'@;
put 'MzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTUuMDI2M0MzMy44ODg2IDE1LjAzNTQgMzMuNzc2NCAxNS4wMzg5IDMzLjY2MzcgMTUuMDM2N0gyNi4xOTY0QzI2LjIwNjggMTUuMDU4NCAyNi4yMTY2IDE1LjA4MDQgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0'@;
put 'NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEw'@;
put 'LjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjMu'@;
put 'NjIzMyAxNS4wMzY3SDIyLjMzOTVDMjEuMTU3NyAxNS4wNjA0IDIwLjAyMzMgMTQuNDQ4OSAxOS40MjA2IDEzLjM4OTNDMTguODIwNCAxMi4zMzQyIDE4Ljg3MDMgMTEuMDQyMyAxOS41MzYyIDEwLjAzODdMMjEuOTU5NCA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYg'@;
put 'OS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEg'@;
put 'Mi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwIDEw'@;
put 'QzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4'@;
put 'MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJN'@;
put 'MzAgMTMuNUMyOC4wMTA5IDEzLjUgMjYuMTAzMiAxMi43MDk4IDI0LjY5NjcgMTEuMzAzM0MyMy4yOTAyIDkuODk2NzggMjIuNSA3Ljk4OTEyIDIyLjUgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUg'@;
put 'MTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2'@;
put 'LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAu'@;
put 'NjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIu'@;
put 'NDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzgg'@;
put 'MzQgMzAuMTlWMTIuMzRDMzIuODA0MSAxMy4wOTkxIDMxLjQxNjUgMTMuNTAxNSAzMCAxMy41Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4z'@;
put 'MjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40'@;
put 'NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2'@;
put 'NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45'@;
put 'MyAxNi41OUwyNS45NCAxNi41OFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sS09lPVsiY2FsZW5k'@;
put 'YXIiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIgMjBIMjBWMjJIMjJWMjBaTTIwIDI2SDIyVjI0SDIwVjI2Wk0yOCAyNEgyNlYyNkgyOFYyNFpNMjggMjBIMjZWMjJIMjhWMjBaTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAyNiA0'@;
put 'LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTIyIDE2SDIwVjE4SDIyVjE2Wk0yOCAxNkgyNlYxOEgyOFYxNlpNMjQgOEgxMlYxMEgyNFY4Wk0xMCAxNkg4VjE4SDEwVjE2Wk0xMCAyMEg4VjIySDEwVjIwWk0xMCAyNEg4VjI2SDEwVjI0Wk0zMy41IDguNTRDMzMuMTcgOC4y'@;
put 'IDMyLjcyIDguMDEgMzIuMjUgOEgzMFYxMEgzMlYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVD'@;
put 'MzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTQgMjZIMTZWMjRIMTRWMjZaTTE2IDIwSDE0VjIySDE2VjIwWk0xNiAxNkgxNFYxOEgxNlYxNlpNOSAxMkM5LjU1'@;
put 'IDEyIDEwIDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45'@;
put 'MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQu'@;
put 'NzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMg'@;
put 'MTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAu'@;
put 'MTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINlYxMEg0VjMwSDMyVjE1LjAzNjdaIi8+PHBhdGggZD0iTTIwLjc1OTQgOEwxOS41NTk0IDEwSDEyVjhIMjAuNzU5NFoiLz48cGF0aCBkPSJNMjAgMjBIMjJWMjJIMjBWMjBaIi8+PHBhdGgg'@;
put 'ZD0iTTIyIDI2SDIwVjI0SDIyVjI2WiIvPjxwYXRoIGQ9Ik0yNiAyNlYyNEgyOFYyNkgyNloiLz48cGF0aCBkPSJNMjYgMjJWMjBIMjhWMjJIMjZaIi8+PHBhdGggZD0iTTIwIDE2SDIyVjE4SDIwVjE2WiIvPjxwYXRoIGQ9Ik0yNiAxOFYxNkgyOFYxOEgyNloiLz48cGF0aCBkPSJNOCAxNkgx'@;
put 'MFYxOEg4VjE2WiIvPjxwYXRoIGQ9Ik04IDIwSDEwVjIySDhWMjBaIi8+PHBhdGggZD0iTTggMjRIMTBWMjZIOFYyNFoiLz48cGF0aCBkPSJNMTYgMjZIMTRWMjRIMTZWMjZaIi8+PHBhdGggZD0iTTE0IDIwSDE2VjIySDE0VjIwWiIvPjxwYXRoIGQ9Ik0xNCAxNkgxNlYxOEgxNFYxNloiLz48'@;
put 'cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMz'@;
put 'NSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGQ9Ik0yMy4yODk5IDhDMjMuNDU5NCA4LjU2OTYzIDIzLjY5OTUgOS4xMDg4NyAyNCA5LjYwNzU5VjEwSDEyVjhIMjMuMjg5OVoiLz48'@;
put 'cGF0aCBkPSJNMzQgMTEuNzQ1M0MzMy4zOTYgMTIuMTY2NiAzMi43MjI0IDEyLjQ5NTEgMzIgMTIuNzEwMVYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIu'@;
put 'ODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYy'@;
put 'NloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBk'@;
put 'PSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDEx'@;
put 'LjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAy'@;
put 'NiA0LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTMzLjUgOC41NEMzMy4xNyA4LjIgMzIuNzIgOC4wMSAzMi4yNSA4SDI5LjJWMTFDMjkuMiAxMi4yMSAyOC4yMSAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWOEgxMS4yVjExQzExLjIgMTIu'@;
put 'MjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUg'@;
put 'MzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTAuMSAyNi4xSDcuOVYyMy45SDEwLjFWMjYuMVpNMTAuMSAyMi4xSDcuOVYxOS45SDEwLjFWMjIu'@;
put 'MVpNMTAuMSAxOC4xSDcuOVYxNS45SDEwLjFWMTguMVpNMTYuMSAyNi4xSDEzLjlWMjMuOUgxNi4xVjI2LjFaTTE2LjEgMjIuMUgxMy45VjE5LjlIMTYuMVYyMi4xWk0xNi4xIDE4LjFIMTMuOVYxNS45SDE2LjFWMTguMVpNMjIuMSAyNi4xSDE5LjlWMjMuOUgyMi4xVjI2LjFaTTIyLjEgMjIu'@;
put 'MUgxOS45VjE5LjlIMjIuMVYyMi4xWk0yMi4xIDE4LjFIMTkuOVYxNS45SDIyLjFWMTguMVpNMjguMSAyNi4xSDI1LjlWMjMuOUgyOC4xVjI2LjFaTTI4LjEgMjIuMUgyNS45VjE5LjlIMjguMVYyMi4xWk0yOC4xIDE4LjFIMjUuOVYxNS45SDI4LjFWMTguMVpNOSAxMkM5LjU1IDEyIDEwIDEx'@;
put 'LjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5'@;
put 'IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1'@;
put 'OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9'@;
put 'Ik0yMC43NTk0IDhMMTkuNTM2MiAxMC4wMzg3QzE4Ljg3MDMgMTEuMDQyMyAxOC44MjA0IDEyLjMzNDIgMTkuNDIwNiAxMy4zODkzQzIwLjAyMzMgMTQuNDQ4OSAyMS4xNTc3IDE1LjA2MDQgMjIuMzM5NSAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2MyAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAz'@;
put 'NCAxNS4wMjYzVjMwLjE5QzM0LjAxIDMwLjY2IDMzLjgzIDMxLjEyIDMzLjUgMzEuNDZDMzMuMTcgMzEuOCAzMi43MiAzMiAzMi4yNSAzMkgzLjc1QzMuMjggMzEuOTkgMi44MyAzMS44IDIuNSAzMS40NkMyLjE3IDMxLjEyIDIgMzAuNjYgMiAzMC4xOVY5LjgxQzIgOS4zNCAyLjE3IDguODgg'@;
put 'Mi41IDguNTRDMi44MyA4LjIgMy4yOCA4IDMuNzUgOEg2LjhWMTFDNi44IDEyLjIxIDcuNzkgMTMuMiA5IDEzLjJDMTAuMjEgMTMuMiAxMS4yIDEyLjIxIDExLjIgMTFWOEgyMC43NTk0Wk03LjkgMjMuOVYyNi4xSDEwLjFWMjMuOUg3LjlaTTcuOSAxOS45VjIyLjFIMTAuMVYxOS45SDcuOVpN'@;
put 'Ny45IDE1LjlWMTguMUgxMC4xVjE1LjlINy45Wk0xMy45IDI2LjFIMTYuMVYyMy45SDEzLjlWMjYuMVpNMTMuOSAyMi4xSDE2LjFWMTkuOUgxMy45VjIyLjFaTTEzLjkgMTguMUgxNi4xVjE1LjlIMTMuOVYxOC4xWk0xOS45IDI2LjFIMjIuMVYyMy45SDE5LjlWMjYuMVpNMTkuOSAyMi4xSDIy'@;
put 'LjFWMTkuOUgxOS45VjIyLjFaTTE5LjkgMTguMUgyMi4xVjE1LjlIMTkuOVYxOC4xWk0yNS45IDIzLjlWMjYuMUgyOC4xVjIzLjlIMjUuOVpNMjUuOSAxOS45VjIyLjFIMjguMVYxOS45SDI1LjlaTTI1LjkgMTUuOVYxOC4xSDI4LjFWMTUuOUgyNS45WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAx'@;
put 'MS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAz'@;
put 'MCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzQgMTEuNzQ1M0MzMi44NjYyIDEyLjUzNjIgMzEuNDg3MiAxMyAzMCAxM0MyOS40MDYzIDEz'@;
put 'IDI4LjgyOTkgMTIuOTI2MSAyOC4yNzk0IDEyLjc4N0MyNy45MTgzIDEzLjA0NjcgMjcuNDc2MiAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWMTAuNjg2MkMyNC4xMTI2IDkuOTIzOTMgMjMuNTkwNCA5LjAwOTcgMjMuMjg5OSA4SDExLjJWMTFDMTEuMiAxMi4y'@;
put 'MSAxMC4yMSAxMy4yIDkgMTMuMkM3Ljc5IDEzLjIgNi44IDEyLjIxIDYuOCAxMVY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAz'@;
put 'MkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWMTEuNzQ1M1pNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcu'@;
put 'OVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4'@;
put 'LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIg'@;
put 'OCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nfV0sWE9lPVsiZm9sZGVyLW9wZW4iLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuMjYgMTNDMzMuODQgMTIuOTkgMzQuMzggMTMuMjYgMzQuNzEgMTMuNzRDMzUgMTQuMTYgMzUuMDggMTQu'@;
put 'NjkgMzQuOTIgMTUuMThMMzAuNzMgMzAuMjhDMzAuNiAzMC43MiAzMC4xOSAzMS4wMiAyOS43MyAzMUg0LjQxQzMuNjYgMzEuMDIgMy4wMyAzMC40NCAzIDI5LjY5VjdDMyA1LjkgMy45IDUgNSA1SDExLjQ5QzEyLjEzIDUgMTIuNzMgNS4zIDEzLjExIDUuODJMMTUuNDIgOUgyOS4zOUMzMC40'@;
put 'OSA5IDMxLjM5IDkuOSAzMS4zOSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2QzcuOTIgMTQuNjYgNy45MiAxNC41NyA3LjkyIDE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNlpNNS45IDI5SDI4'@;
put 'Ljk0TDMyLjg4IDE0Ljk1SDEwLjE2QzEwLjAxIDE0Ljk4IDkuODcgMTUuMDcgOS43OCAxNS4xOUw1LjkgMjlaIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTI3LjkwNDEgMS42NDYyMUwyMi4yMjI0IDExLjExNTlDMjEuOTUyOSAxMS40OTg0IDIxLjkyODQgMTEuOTk0OSAyMi4xNTkx'@;
put 'IDEyLjQwMDVDMjIuMzg5OCAxMi44MDYgMjIuODM2NiAxMy4wNTE5IDIzLjMxNSAxMy4wMzY3SDM0LjY4ODRDMzUuMTY2OSAxMy4wNTE5IDM1LjYxMzYgMTIuODA2IDM1Ljg0NDMgMTIuNDAwNUMzNi4wNzUgMTEuOTk0OSAzNi4wNTA2IDExLjQ5ODQgMzUuNzgxIDExLjExNTlMMzAuMDk5MyAx'@;
put 'LjY0NjIxQzI5Ljg3MTMgMS4yNjkxMyAyOS40NTM1IDEuMDM3MzUgMjkuMDAxNyAxLjAzNzM1QzI4LjU1IDEuMDM3MzUgMjguMTMyMSAxLjI2OTEzIDI3LjkwNDEgMS42NDYyMVoiLz48cGF0aCBkPSJNMjAuMTA1OCAxMUgxNC45MTAyQzE0LjU5MDIgMTEgMTQuMjkwMiAxMC44NSAxNC4xMDAy'@;
put 'IDEwLjU5TDExLjQ5MDIgN0g1LjAwMDI0VjI1TDcuOTIwMjQgMTQuNjZWMTQuNTJDOC4zMjAyNCAxMy42MyA5LjE5MDI0IDEzLjA0IDEwLjE3MDIgMTNIMjAuMjMyN0MyMC4yODYxIDEzLjEzMjYgMjAuMzQ4OCAxMy4yNjI3IDIwLjQyMDggMTMuMzg5M0MyMC44ODE1IDE0LjE5OTEgMjEuNjUy'@;
put 'NyAxNC43NDcyIDIyLjUxODMgMTQuOTVIMTAuMTYwMkMxMC4wMTAyIDE0Ljk4IDkuODcwMjQgMTUuMDcgOS43ODAyNCAxNS4xOUw1LjkwMDI0IDI5SDI4Ljk0MDJMMzIuODU1OSAxNS4wMzY3SDM0LjY2MzlDMzQuNzYzNiAxNS4wMzg3IDM0Ljg2MyAxNS4wMzYyIDM0Ljk2MTcgMTUuMDI5MkMz'@;
put 'NC45NTAzIDE1LjA3OTggMzQuOTM2NSAxNS4xMzAxIDM0LjkyMDIgMTUuMThMMzAuNzMwMiAzMC4yOEMzMC42MDAyIDMwLjcyIDMwLjE5MDIgMzEuMDIgMjkuNzMwMiAzMUg0LjQxMDI0QzMuNjYwMjQgMzEuMDIgMy4wMzAyNCAzMC40NCAzLjAwMDI0IDI5LjY5VjdDMy4wMDAyNCA1LjkgMy45'@;
put 'MDAyNCA1IDUuMDAwMjQgNUgxMS40OTAyQzEyLjEzMDIgNSAxMi43MzAyIDUuMyAxMy4xMTAyIDUuODJMMTUuNDIwMiA5SDIxLjE1OTdMMjAuNTM2NCAxMC4wMzg3QzIwLjMzNzggMTAuMzM4MSAyMC4xOTM5IDEwLjY2MzIgMjAuMTA1OCAxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9'@;
put 'Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBk'@;
put 'PSJNMjYuMTAxIDExSDE0LjkxQzE0LjU5IDExIDE0LjI5IDEwLjg1IDE0LjEgMTAuNTlMMTEuNDkgN0g1VjI1TDcuOTIgMTQuNjZWMTQuNTJDOC4zMiAxMy42MyA5LjE5IDEzLjA0IDEwLjE3IDEzSDMzLjI2QzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1'@;
put 'LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjQu'@;
put 'NjczNkMyNS4wMjk3IDkuNzQ5NiAyNS41MTUxIDEwLjQyNTkgMjYuMTAxIDExWk0yOC45NCAyOUg1LjlMOS43OCAxNS4xOUM5Ljg3IDE1LjA3IDEwLjAxIDE0Ljk4IDEwLjE2IDE0Ljk1SDMyLjg4TDI4Ljk0IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zNC43MDU4IDEzLjc0QzM0LjM3NDQg'@;
put 'MTMuMjY0MyAzMy44MjIzIDEyLjk4NiAzMy4yMzc5IDEzSDEwLjI1ODNDOS4yNjk1MiAxMy4wNDE0IDguMzg4NTggMTMuNjI5MyA3Ljk4MDYgMTQuNTJDNy45NzcyOSAxNC41NjY2IDcuOTc3MjkgMTQuNjEzNCA3Ljk4MDYgMTQuNjZMNS4wMjQ2MyAyNVY3LjAwMDAxSDExLjU5NDZMMTQuMjM2'@;
put 'NyAxMC41OUMxNC40Mjc5IDEwLjg0ODQgMTQuNzMyNyAxMS4wMDA4IDE1LjA1NjcgMTFIMzEuMzQ0OUMzMS4zNDQ5IDkuODk1NDQgMzAuNDM4NCA5LjAwMDAxIDI5LjMyMDMgOS4wMDAwMUgxNS41NzNMMTMuMjM0NSA1LjgyMDAxQzEyLjg1MjIgNS4zMDMxOCAxMi4yNDI2IDQuOTk4MzUgMTEu'@;
put 'NTk0NiA1LjAwMDAxSDUuMDI0NjNDMy45MDY0NiA1LjAwMDAxIDMgNS44OTU0NCAzIDcuMDAwMDFWMjkuNjlDMy4wMzI4OSAzMC40Mzg5IDMuNjY4OTEgMzEuMDIyNiA0LjQyNzM3IDMxSDI5LjY2NDRDMzAuMTI5MyAzMS4wMTgzIDMwLjU0NjkgMzAuNzIxMyAzMC42NzY4IDMwLjI4TDM0Ljkx'@;
put 'ODQgMTUuMThDMzUuMDc4OCAxNC42OTM1IDM1LjAwMDEgMTQuMTYxIDM0LjcwNTggMTMuNzRaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIy'@;
put 'LjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44'@;
put 'NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjIzMjUgMTNDMjAuMjg1OCAxMy4xMzI2IDIwLjM0ODUgMTMuMjYyNyAyMC40MjA2IDEzLjM4OTNDMjEu'@;
put 'MDIzMyAxNC40NDg5IDIyLjE1NzcgMTUuMDYwNCAyMy4zMzk1IDE1LjAzNjdIMzQuNjYzN0MzNC43NjI5IDE1LjAzODcgMzQuODYxOCAxNS4wMzYyIDM0Ljk2MDEgMTUuMDI5M0MzNC45NDg3IDE1LjA3OTkgMzQuOTM0OCAxNS4xMzAyIDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41'@;
put 'NDY5IDMwLjcyMTMgMzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44'@;
put 'NTIyIDUuMzAzMTggMTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDIxLjE1OTRMMjAuNTM2MiAxMC4wMzg3QzIwLjMzNzUgMTAuMzM4MSAyMC4xOTM3IDEwLjY2MzIgMjAuMTA1NiAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwx'@;
put 'MS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDIwLjIzMjVaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTMx'@;
put 'IDExQzMzLjc2MTQgMTEgMzYgOC43NjE0MiAzNiA2QzM2IDMuMjM4NTggMzMuNzYxNCAxIDMxIDFDMjguMjM4NiAxIDI2IDMuMjM4NTggMjYgNkMyNiA4Ljc2MTQyIDI4LjIzODYgMTEgMzEgMTFaIi8+PHBhdGggZD0iTTI0LjY3MzYgOS4wMDAwMUMyNS4wMjk3IDkuNzQ5NjEgMjUuNTE1MSAx'@;
put 'MC40MjU5IDI2LjEwMSAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwxMS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAx'@;
put 'My42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDMzLjIzNzlDMzMuODIyMyAxMi45ODYgMzQuMzc0NCAxMy4yNjQzIDM0LjcwNTggMTMuNzRDMzUuMDAwMSAxNC4xNjEgMzUuMDc4OCAxNC42OTM1IDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5IDMwLjcyMTMgMzAu'@;
put 'MTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIyIDUuMzAzMTggMTMu'@;
put 'MjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDI0LjY3MzZaIi8+J31dLHFPZT1bIm1pbnVzIix7b3V0bGluZTonPHBhdGggZD0iTTI2IDE3SDEwQzkuNDQ3NzIgMTcgOSAxNy40NDc3IDkgMThDOSAxOC41NTIzIDkuNDQ3NzIgMTkgMTAgMTlIMjZDMjYuNTUyMyAxOSAyNyAxOC41NTIzIDI3'@;
put 'IDE4QzI3IDE3LjQ0NzcgMjYuNTUyMyAxNyAyNiAxN1oiLz4nfV0sSk9lPVsicGx1cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS45OTk5IDE3SDE4Ljk5OTlWNkMxOC45OTk5IDUuNDQ3NzIgMTguNTUyMiA1IDE3Ljk5OTkgNUMxNy40NDc2IDUgMTYuOTk5OSA1LjQ0NzcyIDE2Ljk5OTkgNlYx'@;
put 'N0g1Ljk5OTkyQzUuNDQ3NjQgMTcgNC45OTk5MiAxNy40NDc3IDQuOTk5OTIgMThDNC45ODk5NCAxOC4yNjMgNS4wOTQyNyAxOC41MTc0IDUuMjg2IDE4LjY5NzZDNS40Nzc3MyAxOC44Nzc4IDUuNzM4MDkgMTguOTY2MiA1Ljk5OTkyIDE4Ljk0SDE2Ljk5OTlWMzBDMTYuOTk5OSAzMC41NTIz'@;
put 'IDE3LjQ0NzYgMzEgMTcuOTk5OSAzMUMxOC41NTIyIDMxIDE4Ljk5OTkgMzAuNTUyMyAxOC45OTk5IDMwVjE5SDI5Ljk5OTlDMzAuNTUyMiAxOSAzMC45OTk5IDE4LjU1MjMgMzAuOTk5OSAxOEMzMC45OTk5IDE3LjQ0NzcgMzAuNTUyMiAxNyAyOS45OTk5IDE3WiIvPid9XSxRT2U9WyJleWUt'@;
put 'aGlkZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNC41NDk1IDIwLjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFDMjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4x'@;
put 'NjAxIDE1LjU2MzcgMTEuNDQwMUwxNy4yMDI5IDEzLjA4MDFDMTcuNDYyOCAxMy4wNDAxIDE3LjcyMjcgMTMuMDAwMSAxNy45OTI2IDEzLjAwMDFDMjAuNzUxMyAxMy4wMDAxIDIyLjk5MDIgMTUuMjQwMSAyMi45OTAyIDE4LjAwMDFDMjIuOTkwMiAxOC4yNzAxIDIyLjk1MDIgMTguNTMwMSAy'@;
put 'Mi45MTAzIDE4Ljc5MDFMMjQuNTQ5NSAyMC40MzAxWk0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0'@;
put 'IDIzLjIyMDEgMzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAw'@;
put 'NiAxMi4xNjUzIDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42'@;
put 'ODAwNiAxLjkwMDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAx'@;
put 'MS4wNTU4IDI5LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMg'@;
put 'MzMuOTAwMSAzMy42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTMuODM0NSAxNS4yNTAxTDIwLjc0MTMgMjIuMTYwMUMxOS45NTE2IDIyLjY4MDEgMTkuMDEyMSAyMy4wMDAxIDE3Ljk5MjYgMjMuMDAw'@;
put 'MUMxNS4yMzM5IDIzLjAwMDEgMTIuOTk0OSAyMC43NjAxIDEyLjk5NDkgMTguMDAwMUMxMi45OTQ5IDE2Ljk4MDEgMTMuMzA0OCAxNi4wNDAxIDEzLjgzNDUgMTUuMjUwMVpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUu'@;
put 'MzY4NDggMTUuMTkwMSA3LjQyNzUxIDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4'@;
put 'IDI1LjAwMDEgMjEuMDAxMiAyNC40NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE3Ljk5MjYgOS4wMDAwNkMyMy45ODk4IDkuMDAwMDYgMjkuMzk3'@;
put 'MiAxMi41MjAxIDMxLjg5NiAxOC4wMDAxQzMwLjg5NjUgMjAuMTkwMSAyOS40MjcyIDIyLjA2MDEgMjcuNjQ4IDIzLjUzMDFMMjkuMDY3NCAyNC45NTAxQzMxLjEyNjQgMjMuMjIwMSAzMi44MDU2IDIwLjk5MDEgMzMuOTE1MSAxOC4zOTAxQzM0LjAyNSAxOC4xNDAxIDM0LjAyNSAxNy44NjAx'@;
put 'IDMzLjkxNTEgMTcuNjEwMUMzMS4xODY0IDExLjE2MDEgMjQuOTM5MyA3LjAwMDA2IDE4LjAwMjYgNy4wMDAwNkMxNS45NzM1IDcuMDAwMDYgMTQuMDA0NCA3LjM3MDA2IDEyLjE2NTMgOC4wMzAwNkwxMy43NDQ2IDkuNjEwMDZDMTUuMTAzOSA5LjIxMDA2IDE2LjUzMzIgOS4wMDAwNiAxOC4w'@;
put 'MDI2IDkuMDAwMDZIMTcuOTkyNlpNMy43MDkyNiAyLjI5MDA2QzMuMzE5NDQgMS45MDAwNiAyLjY3OTc0IDEuOTAwMDYgMi4yODk5MiAyLjI5MDA2QzEuOTAwMSAyLjY4MDA2IDEuOTAwMSAzLjMyMDA2IDIuMjg5OTIgMy43MTAwNkw4LjQ3NzAyIDkuOTAwMDZDNS43MDgzMiAxMS43NDAxIDMu'@;
put 'NDQ5MzggMTQuMzgwMSAyLjA4MDAyIDE3LjYxMDFDMS45NzAwNyAxNy44NjAxIDEuOTcwMDcgMTguMTQwMSAyLjA4MDAyIDE4LjM5MDFDNC44MDg3NCAyNC44NDAxIDExLjA1NTggMjkuMDAwMSAxNy45OTI2IDI5LjAwMDFDMjAuNzQxMyAyOS4wMDAxIDIzLjM3IDI4LjM0MDEgMjUuNzE4OSAy'@;
put 'Ny4xNTAxTDMyLjI3NTkgMzMuNzEwMUMzMi40NzU4IDMzLjkxMDEgMzIuNzI1NyAzNC4wMDAxIDMyLjk4NTUgMzQuMDAwMUMzMy4yNDU0IDM0LjAwMDEgMzMuNDk1MyAzMy45MDAxIDMzLjY5NTIgMzMuNzEwMUMzNC4wODUgMzMuMzIwMSAzNC4wODUgMzIuNjkwMSAzMy42OTUyIDMyLjMwMDFM'@;
put 'My43MDkyNiAyLjI5MDA2Wk0xNy45OTI2IDI3LjAwMDFDMTEuOTk1NCAyNy4wMDAxIDYuNTg3OTEgMjMuNDgwMSA0LjA4OTA4IDE4LjAwMDFDNS4zNjg0OCAxNS4xOTAxIDcuNDI3NTEgMTIuOTEwMSA5LjkyNjM0IDExLjM0MDFMMTIuNDA1MiAxMy44MjAxQzExLjUyNTYgMTQuOTkwMSAxMC45'@;
put 'OTU4IDE2LjQzMDEgMTAuOTk1OCAxOC4wMDAxQzEwLjk5NTggMjEuODYwMSAxNC4xMzQ0IDI1LjAwMDEgMTcuOTkyNiAyNS4wMDAxQzE5LjU2MTggMjUuMDAwMSAyMS4wMDEyIDI0LjQ3MDEgMjIuMTcwNiAyMy41OTAxTDI0LjIyOTYgMjUuNjUwMUMyMi4zMTA1IDI2LjUyMDEgMjAuMTkxNSAy'@;
put 'Ny4wMDAxIDE3Ljk5MjYgMjcuMDAwMVpNMTUuNTYzNyAxMS40NDAxTDI0LjU0OTUgMjAuNDMwMUMyNC44Mjk0IDE5LjY3MDEgMjQuOTg5MyAxOC44NjAxIDI0Ljk4OTMgMTguMDAwMUMyNC45ODkzIDE0LjE0MDEgMjEuODUwOCAxMS4wMDAxIDE3Ljk5MjYgMTEuMDAwMUMxNy4xMzMgMTEuMDAw'@;
put 'MSAxNi4zMjMzIDExLjE2MDEgMTUuNTYzNyAxMS40NDAxWiIvPid9XSxlUGU9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcgMjUg'@;
put 'MjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQuMTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTE3Ljk5NzYgMjNDMTUuMjM4IDIzIDEyLjk5ODMgMjAuNzYgMTIuOTk4MyAxOEMxMi45OTgzIDE1LjI0IDE1LjIzOCAxMyAxNy45OTc2IDEzQzIwLjc1NzEgMTMgMjIuOTk2OCAxNS4y'@;
put 'NCAyMi45OTY4IDE4QzIyLjk5NjggMjAuNzYgMjAuNzU3MSAyMyAxNy45OTc2IDIzWk0zMy45MTUxIDE3LjYxQzMxLjE4NTUgMTEuMTcgMjQuOTM2NSA3IDE3Ljk5NzYgN0MxMS4wNTg2IDcgNC44MDk2MiAxMS4xNyAyLjA4MDA1IDE3LjYxQzEuOTcwMDYgMTcuODYgMS45NzAwNiAxOC4xNCAy'@;
put 'LjA4MDA1IDE4LjM5QzQuODA5NjIgMjQuODQgMTEuMDU4NiAyOSAxNy45OTc2IDI5QzI0LjkzNjUgMjkgMzEuMTg1NSAyNC44MyAzMy45MTUxIDE4LjM5QzM0LjAyNTEgMTguMTQgMzQuMDI1MSAxNy44NiAzMy45MTUxIDE3LjYxWk0xNy45OTc2IDI3QzExLjk5ODUgMjcgNi41ODkzNCAyMy40'@;
put 'OCA0LjA4OTczIDE4QzYuNTg5MzQgMTIuNTIgMTEuOTk4NSA5IDE3Ljk5NzYgOUMyMy45OTY2IDkgMjkuNDA1OCAxMi41MiAzMS45MDU0IDE4QzI5LjQwNTggMjMuNDggMjMuOTk2NiAyNyAxNy45OTc2IDI3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTc2IDExQzE0LjEzODIgMTEgMTAu'@;
put 'OTk4NyAxNC4xNCAxMC45OTg3IDE4QzEwLjk5ODcgMjEuODYgMTQuMTM4MiAyNSAxNy45OTc2IDI1QzIxLjg1NyAyNSAyNC45OTY1IDIxLjg2IDI0Ljk5NjUgMThDMjQuOTk2NSAxNC4xNCAyMS44NTcgMTEgMTcuOTk3NiAxMVpNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUg'@;
put 'NyAxNy45OTc2IDdDMTEuMDU4NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4z'@;
put 'OUMzNC4wMjUxIDE4LjE0IDM0LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40'@;
put 'MDU4IDIzLjQ4IDIzLjk5NjYgMjcgMTcuOTk3NiAyN1oiLz4nfV0sdFBlPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYzIDE1'@;
put 'LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMyIDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4NCAx'@;
put 'OS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAxNS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAwMSAz'@;
put 'MS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAxOC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0yMS4xMDAxIDQu'@;
put 'OUMyMS4xMDAxIDYuNTAxNjMgMTkuNzU3IDcuOCAxOC4xMDAxIDcuOEMxNi40NDMyIDcuOCAxNS4xMDAxIDYuNTAxNjMgMTUuMTAwMSA0LjlDMTUuMTAwMSAzLjI5ODM3IDE2LjQ0MzIgMiAxOC4xMDAxIDJDMTkuNzU3IDIgMjEuMTAwMSAzLjI5ODM3IDIxLjEwMDEgNC45WiIvPjxwYXRoIGQ9'@;
put 'Ik0xOC4xMDAxIDIwLjlDMTkuNzU3IDIwLjkgMjEuMTAwMSAxOS42MDE2IDIxLjEwMDEgMThDMjEuMTAwMSAxNi4zOTg0IDE5Ljc1NyAxNS4xIDE4LjEwMDEgMTUuMUMxNi40NDMyIDE1LjEgMTUuMTAwMSAxNi4zOTg0IDE1LjEwMDEgMThDMTUuMTAwMSAxOS42MDE2IDE2LjQ0MzIgMjAuOSAx'@;
put 'OC4xMDAxIDIwLjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMzRDMTkuNzU3IDM0IDIxLjEwMDEgMzIuNzAxNiAyMS4xMDAxIDMxLjFDMjEuMTAwMSAyOS40OTg0IDE5Ljc1NyAyOC4yIDE4LjEwMDEgMjguMkMxNi40NDMyIDI4LjIgMTUuMTAwMSAyOS40OTg0IDE1LjEwMDEgMzEuMUMxNS4xMDAx'@;
put 'IDMyLjcwMTYgMTYuNDQzMiAzNCAxOC4xMDAxIDM0WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxu'@;
put 'UGU9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMxIDVINUMzLjg5NTQzIDUgMyA1Ljg5NTQzIDMgN1YyOUMzIDMwLjEwNDYgMy44OTU0MyAzMSA1IDMxSDMxQzMyLjEwNDYgMzEgMzMgMzAuMTA0NiAz'@;
put 'MyAyOVY3QzMzIDUuODk1NDMgMzIuMTA0NiA1IDMxIDVaTTEzIDI5SDVWN0gxM1YyOVpNMTUgMjlIMjNWN0gxNVYyOVoiLz4nfV0sclBlPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjUwNCAxNS42MzQxTDE3Ljk5NTEgNkw4LjMzOTgxIDE1LjYzNDFDOC4wMjg2OSAxNS44NzE3'@;
put 'IDcuODg0MzIgMTYuMjY5NSA3Ljk3MDMgMTYuNjUyMUM4LjA1NjI5IDE3LjAzNDcgOC4zNTY4NSAxNy4zMzE5IDguNzM5NTIgMTcuNDEyN0M5LjEyMjE5IDE3LjQ5MzUgOS41MTY2NyAxNy4zNDMgOS43NDkxMiAxNy4wMjc2TDE2Ljk5NTYgOS44MTk1NVYyOC45OTc1QzE2Ljk5NTYgMjkuNTUx'@;
put 'MiAxNy40NDMxIDMwIDE3Ljk5NTEgMzBDMTguNTQ3MSAzMCAxOC45OTQ2IDI5LjU1MTIgMTguOTk0NiAyOC45OTc1VjkuODE5NTVMMjYuMjQxMSAxNy4wMjc2QzI2LjYzMyAxNy40MTc5IDI3LjI2NjIgMTcuNDE1NyAyNy42NTU0IDE3LjAyMjZDMjguMDQ0NSAxNi42Mjk1IDI4LjA0MjMgMTUu'@;
put 'OTk0MyAyNy42NTA0IDE1LjYwNFYxNS42MzQxWiIvPid9XSxpUGU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4ODkzIDYuNTIwMDNDNi45MjY0MyA2LjY3NjQ1IDYuNzk3MzQgNi44NjMxNSA2LjcwOTIxIDcuMDY5MjFDNi42MjEwOCA3LjI3NTI2IDYuNTc1Njgg'@;
put 'Ny40OTY1MiA2LjU3NTY4IDcuNzIwMDNDNi41NzU2OCA3Ljk0MzUzIDYuNjIxMDggOC4xNjQ3OSA2LjcwOTIxIDguMzcwODVDNi43OTczNCA4LjU3NjkgNi45MjY0MyA4Ljc2MzYxIDcuMDg4OTMgOC45MjAwM0wxNi42ODcyIDE4TDcuMTI5NjQgMjcuMDhDNi44Mjk3NyAyNy4zOTkxIDYuNjY1'@;
put 'NTQgMjcuODE4OCA2LjY3MDY1IDI4LjI1M0M2LjY3NTc2IDI4LjY4NzIgNi44NDk4MiAyOS4xMDMxIDcuMTU3MTIgMjkuNDE1MkM3LjQ2NDQyIDI5LjcyNzQgNy44ODE2NiAyOS45MTIxIDguMzIzMjMgMjkuOTMxNkM4Ljc2NDggMjkuOTUxMSA5LjE5NzIxIDI5LjgwMzggOS41MzE3NiAyOS41'@;
put 'MkwyMS42NjQ1IDE4TDkuNTMxNzYgNi40NzAwM0M5LjM2ODUxIDYuMzE0ODIgOS4xNzU1OSA2LjE5MjkzIDguOTY0MTMgNi4xMTEzN0M4Ljc1MjY3IDYuMDI5ODIgOC41MjY4NiA1Ljk5MDIyIDguMjk5NzQgNS45OTQ4N0M4LjA3MjYyIDUuOTk5NTIgNy44NDg2OSA2LjA0ODMyIDcuNjQwODcg'@;
put 'Ni4xMzg0NkM3LjQzMzA1IDYuMjI4NTkgNy4yNDU0NiA2LjM1ODI4IDcuMDg4OTMgNi41MjAwM1oiLz48cGF0aCBkPSJNMjYuODQ1MyA1QzI2LjM4NjQgNSAyNS45NDYzIDUuMTc5MTEgMjUuNjIxOCA1LjQ5NzkyQzI1LjI5NzMgNS44MTY3MyAyNS4xMTUgNi4yNDkxMyAyNS4xMTUgNi43VjI5'@;
put 'LjNDMjUuMTE1IDI5Ljc1MDkgMjUuMjk3MyAzMC4xODMzIDI1LjYyMTggMzAuNTAyMUMyNS45NDYzIDMwLjgyMDkgMjYuMzg2NCAzMSAyNi44NDUzIDMxQzI3LjMwNDMgMzEgMjcuNzQ0NCAzMC44MjA5IDI4LjA2ODkgMzAuNTAyMUMyOC4zOTM0IDMwLjE4MzMgMjguNTc1NyAyOS43NTA5IDI4'@;
put 'LjU3NTcgMjkuM1Y2LjdDMjguNTc1NyA2LjI0OTEzIDI4LjM5MzQgNS44MTY3MyAyOC4wNjg5IDUuNDk3OTJDMjcuNzQ0NCA1LjE3OTExIDI3LjMwNDMgNSAyNi44NDUzIDVaIi8+J31dLGFQZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9k'@;
put 'ZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMu'@;
put 'Njg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAx'@;
put 'OCAzMlpNMTcgMjYuODZMMTUgMjUuODZWMjAuNjhMOC40MiAxNEM4LjE1Njc5IDEzLjczMyA4LjAwNjQgMTMuMzc0OSA4IDEzVjEyQzggMTEuNDQ3NyA4LjQ0NzcyIDExIDkgMTFIMjdDMjcuNTUyMyAxMSAyOCAxMS40NDc3IDI4IDEyVjEzQzI3Ljk5MzYgMTMuMzc0OSAyNy44NDMyIDEzLjcz'@;
put 'MyAyNy41OCAxNEwyMSAyMC42OFYyOUwxOSAyOEwxOS4wMyAyMC4yN0MxOS4wMzExIDIwLjAwNzcgMTkuMTM1MyAxOS43NTYzIDE5LjMyIDE5LjU3TDI1Ljc5IDEzSDEwLjIzTDE2LjcxIDE5LjU3QzE2Ljg5NDcgMTkuNzU2MyAxNi45OTg5IDIwLjAwNzcgMTcgMjAuMjdWMjYuODZaIi8+Jyxz'@;
put 'b2xpZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2'@;
put 'ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAyNy44'@;
put 'OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk04IDEyLjEyVjExSDI3Ljk4VjEyLjE0QzI3Ljk3ODEgMTIuMjcxOSAyNy45MjQyIDEyLjM5NzcgMjcuODMgMTIuNDlMMjAuNzEgMTkuNzRDMjAuNjA4MSAxOS44Mjk5IDIwLjU0MzggMTkuOTU0OCAyMC41MyAyMC4wOVYyOC40OEMy'@;
put 'MC41MzAzIDI4LjY1MjggMjAuNDQxNSAyOC44MTM0IDIwLjI5NSAyOC45MDVDMjAuMTQ4NSAyOC45OTY2IDE5Ljk2NTEgMjkuMDA2IDE5LjgxIDI4LjkzTDE1Ljg2IDI3LjUyQzE1LjY4ODMgMjcuNDM1OSAxNS41Nzk2IDI3LjI2MTIgMTUuNTggMjcuMDdWMjAuMThDMTUuNTc4MSAyMC4wNDgx'@;
put 'IDE1LjUyNDIgMTkuOTIyMyAxNS40MyAxOS44M0w4LjE1IDEyLjQ3QzguMDU1NzkgMTIuMzc3NyA4LjAwMTg4IDEyLjI1MTkgOCAxMi4xMloiLz4nfV0sc1BlPVsiZmlsdGVyLWdyaWQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTUgMjMuODZMMTcgMjQuODZWMTguMjdDMTYuOTk4OSAxOC4wMDc3'@;
put 'IDE2Ljg5NDcgMTcuNzU2MyAxNi43MSAxNy41N0wxMC4yMyAxMUgyNS43OUwxOS4zMiAxNy41N0MxOS4xMzUzIDE3Ljc1NjMgMTkuMDMxMSAxOC4wMDc3IDE5LjAzIDE4LjI3TDE5IDI2TDIxIDI3VjE4LjY4TDI3LjU4IDEyQzI3Ljg0MzIgMTEuNzMzIDI3Ljk5MzYgMTEuMzc0OSAyOCAxMVYx'@;
put 'MEMyOCA5LjQ0NzcyIDI3LjU1MjMgOSAyNyA5SDlDOC40NDc3MiA5IDggOS40NDc3MiA4IDEwVjExQzguMDA2NCAxMS4zNzQ5IDguMTU2NzkgMTEuNzMzIDguNDIgMTJMMTUgMTguNjhWMjMuODZaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTggOVYxMC4xMjEyQzguMDAxODggMTAuMjUzMiA4LjA1'@;
put 'NTg1IDEwLjM3OTEgOC4xNTAxNSAxMC40NzE2TDE1LjQzNzQgMTcuODM5M0MxNS41MzE3IDE3LjkzMTcgMTUuNTg1NyAxOC4wNTc3IDE1LjU4NzYgMTguMTg5N1YyNS4wODdDMTUuNTg3MiAyNS4yNzg0IDE1LjY5NiAyNS40NTMyIDE1Ljg2NzkgMjUuNTM3NUwxOS44MjE4IDI2Ljk0ODlDMTku'@;
put 'OTc3MSAyNy4wMjUgMjAuMTYwNyAyNy4wMTU2IDIwLjMwNzMgMjYuOTIzOUMyMC40NTM5IDI2LjgzMjMgMjAuNTQyOSAyNi42NzE0IDIwLjU0MjUgMjYuNDk4NVYxOC4wOTk2QzIwLjU1NjQgMTcuOTY0MyAyMC42MjA3IDE3LjgzOTIgMjAuNzIyNyAxNy43NDkyTDI3Ljg0OTggMTAuNDkxNkMy'@;
put 'Ny45NDQyIDEwLjM5OTIgMjcuOTk4MSAxMC4yNzMyIDI4IDEwLjE0MTJWOUg4WiIvPid9XSxkWT1bImVycm9yLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4IDIyLjYxQzE3LjQ0NzcgMjIuNjEgMTcgMjIuMTYyMyAxNyAyMS42MVY5LjYxQzE3IDkuMDU3NzIgMTcuNDQ3NyA4LjYx'@;
put 'IDE4IDguNjFDMTguNTUyMyA4LjYxIDE5IDkuMDU3NzIgMTkgOS42MVYyMS42MUMxOSAyMi4xNjIzIDE4LjU1MjMgMjIuNjEgMTggMjIuNjFaIi8+PHBhdGggZD0iTTE5LjMzIDI2LjA2QzE5LjMzIDI2Ljc5NDUgMTguNzM0NSAyNy4zOSAxOCAyNy4zOUMxNy4yNjU1IDI3LjM5IDE2LjY3IDI2'@;
put 'Ljc5NDUgMTYuNjcgMjYuMDZDMTYuNjcgMjUuMzI1NSAxNy4yNjU1IDI0LjczIDE4IDI0LjczQzE4LjczNDUgMjQuNzMgMTkuMzMgMjUuMzI1NSAxOS4zMyAyNi4wNloiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiAyNi44MzY2IDku'@;
put 'MTYzNDQgMzQgMTggMzRDMjIuMjQzNSAzNCAyNi4zMTMxIDMyLjMxNDMgMjkuMzEzNyAyOS4zMTM3QzMyLjMxNDMgMjYuMzEzMSAzNCAyMi4yNDM1IDM0IDE4QzM0IDkuMTYzNDQgMjYuODM2NiAyIDE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4Wk00IDE4QzQgMTAuMjY4IDEwLjI2OCA0'@;
put 'IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDI1LjczMiAyNS43MzIgMzIgMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAz'@;
put 'Mi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcgOS42MUMxNyA5LjA2IDE3LjQ1IDguNjEgMTggOC42MUMxOC41NSA4LjYxIDE5IDkuMDYgMTkgOS42MVYyMS42MUMxOSAyMi4xNiAxOC41NSAyMi42MSAxOCAyMi42MUMx'@;
put 'Ny40NSAyMi42MSAxNyAyMi4xNiAxNyAyMS42MVY5LjYxWk0xOCAyNy4yNkMxNy4zNCAyNy4yNiAxNi44IDI2LjcyIDE2LjggMjYuMDZDMTYuOCAyNS40IDE3LjM0IDI0Ljg2IDE4IDI0Ljg2QzE4LjY2IDI0Ljg2IDE5LjIgMjUuNCAxOS4yIDI2LjA2QzE5LjIgMjYuNzIgMTguNjYgMjcuMjYg'@;
put 'MTggMjcuMjZaIi8+J31dLG9QZT1bImhlbHAiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiA5LjE2MzQ0IDkuMTYzNDQgMiAxOCAyQzIyLjI0MzUgMiAyNi4zMTMxIDMuNjg1NzEgMjkuMzEzNyA2LjY4NjI5QzMyLjMx'@;
put 'NDMgOS42ODY4NyAzNCAxMy43NTY1IDM0IDE4QzM0IDI2LjgzNjYgMjYuODM2NiAzNCAxOCAzNEM5LjE2MzQ0IDM0IDIgMjYuODM2NiAyIDE4Wk00IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyMS43MTMgMzIgMjUuMjc0IDMwLjUyNSAyNy44OTk1IDI3Ljg5OTVDMzAuNTI1IDI1LjI3'@;
put 'NCAzMiAyMS43MTMgMzIgMThDMzIgMTAuMjY4IDI1LjczMiA0IDE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOFpNMTguMjkgOC45MkMxNi4wOTYxIDguODgzNzQgMTMuOTk5OCA5LjgyNTYgMTIuNTcgMTEuNDlDMTIuMzcxOCAxMS42NzM3IDEyLjI1NjMgMTEuOTI5OCAxMi4yNSAxMi4yQzEy'@;
put 'LjI0OTkgMTIuNDQ5MyAxMi4zNTA5IDEyLjY4OCAxMi41MyAxMi44NjE0QzEyLjcwOTEgMTMuMDM0OCAxMi45NTA4IDEzLjEyODEgMTMuMiAxMy4xMkMxMy40NjQyIDEzLjExMzUgMTMuNzE2OCAxMy4wMTAzIDEzLjkxIDEyLjgzQzE0Ljk5MTYgMTEuNTYyNSAxNi41NzM3IDEwLjgzMTcgMTgu'@;
put 'MjQgMTAuODNDMjAuNiAxMC44MyAyMi4wNyAxMi4zNSAyMi4wNyAxNC4yNFYxNC4yOUMyMi4wNyAxNi41IDIwLjMxIDE3LjczIDE3LjUzIDE3Ljk0QzE3LjMwMjMgMTcuOTQ4OCAxNy4wODkyIDE4LjA1NDIgMTYuOTQ0MSAxOC4yMjk5QzE2Ljc5OSAxOC40MDU2IDE2LjczNTcgMTguNjM0OCAx'@;
put 'Ni43NyAxOC44NlYyMS42MUMxNi44MjE1IDIyLjEyMjkgMTcuMjU0NSAyMi41MTI2IDE3Ljc3IDIyLjUxSDE3Ljg4QzE4LjM5MjkgMjIuNDU4NSAxOC43ODI2IDIyLjAyNTUgMTguNzggMjEuNTFWMTkuNDVDMjEuNzggMTkuMDMgMjQuMjEgMTcuNDUgMjQuMjEgMTQuMTdWMTQuMTJDMjQuMTgg'@;
put 'MTEuMTIgMjEuODQgOC45MiAxOC4yOSA4LjkyWk0xOS4wMyAyNi4yQzE5LjAzIDI2Ljg5MDQgMTguNDcwNCAyNy40NSAxNy43OCAyNy40NUMxNy4wODk2IDI3LjQ1IDE2LjUzIDI2Ljg5MDQgMTYuNTMgMjYuMkMxNi41MyAyNS41MDk2IDE3LjA4OTYgMjQuOTUgMTcuNzggMjQuOTVDMTguNDcw'@;
put 'NCAyNC45NSAxOS4wMyAyNS41MDk2IDE5LjAzIDI2LjJaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzMuMDAxMyAxMi43Njg5QzMyLjM5NTkgMTMuMDQ2MiAzMS43NTU5IDEzLjI0MDYgMzEuMDk4NiAxMy4zNDY3QzMzLjI2MzYgMTkuNTEwOCAzMC44NzYzIDI2LjM1MjggMjUuMzQ2'@;
put 'NSAyOS44MzJDMTkuODE2NyAzMy4zMTEyIDEyLjYxNTQgMzIuNTAyIDcuOTk1NjkgMjcuODgyMkMzLjM3NTk3IDIzLjI2MjUgMi41NjY3NCAxNi4wNjEzIDYuMDQ1OTIgMTAuNTMxNUM5LjUyNTA5IDUuMDAxNjIgMTYuMzY3MSAyLjYxNDI5IDIyLjUzMTIgNC43NzkzOEMyMi42Mzc1IDQuMTIy'@;
put 'MDUgMjIuODMxOCAzLjQ4MjA0IDIzLjEwOSAyLjg3NjYzQzE2LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAzLjE5MjA1IDQuMzE4MjMgOS41MTAyOUMwLjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4MDYgMjAuMDQ5NCAzNS41MTM1IDI2'@;
put 'LjM2NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5WiIvPjxwYXRoIGQ9Ik0xNy43MTk2IDI3LjM1MzNDMTguNDA3MyAyNy4zNTMzIDE4Ljk2NDggMjYuNzk1OCAxOC45NjQ4IDI2LjEwODFDMTguOTY0OCAyNS40MjAzIDE4LjQwNzMgMjQu'@;
put 'ODYyOCAxNy43MTk2IDI0Ljg2MjhDMTcuMDMxOCAyNC44NjI4IDE2LjQ3NDMgMjUuNDIwMyAxNi40NzQzIDI2LjEwODFDMTYuNDc0MyAyNi43OTU4IDE3LjAzMTggMjcuMzUzMyAxNy43MTk2IDI3LjM1MzNaIi8+PHBhdGggZD0iTTI0LjA5NTMgMTQuMDczOVYxNC4xMjM4QzI0LjA5NTMgMTcu'@;
put 'MzkxMyAyMS42NzQ1IDE4LjkzNTQgMTguNzI1NyAxOS4zODM3VjIxLjQzNTlDMTguNzI4MyAyMS45NDk0IDE4LjM0MDEgMjIuMzgwNyAxNy44MjkxIDIyLjQzMjFIMTcuNzE5NkMxNy4yMDYgMjIuNDM0NyAxNi43NzQ3IDIyLjA0NjUgMTYuNzIzMyAyMS41MzU1VjE4Ljc5NTlDMTYuNjg5MSAx'@;
put 'OC41NzE2IDE2Ljc1MjIgMTguMzQzMiAxNi44OTY4IDE4LjE2ODJDMTcuMDQxMyAxNy45OTMyIDE3LjI1MzcgMTcuODg4MiAxNy40ODA1IDE3Ljg3OTRDMjAuMjQ5OSAxNy42NzAyIDIyLjAwMzIgMTYuNDQ0OSAyMi4wMDMyIDE0LjI0MzNWMTQuMTkzNUMyMi4wMDMyIDEyLjMxMDcgMjAuNTM4'@;
put 'OCAxMC43OTY0IDE4LjE4NzggMTAuNzk2NEMxNi41Mjc4IDEwLjc5ODIgMTQuOTUxNyAxMS41MjYxIDEzLjg3NDIgMTIuNzg4OEMxMy42ODE3IDEyLjk2ODQgMTMuNDMwMSAxMy4wNzEyIDEzLjE2NjkgMTMuMDc3N0MxMi45MTg3IDEzLjA4NTggMTIuNjc3OCAxMi45OTI5IDEyLjQ5OTQgMTIu'@;
put 'ODIwMUMxMi4zMjEgMTIuNjQ3MyAxMi4yMjA0IDEyLjQwOTYgMTIuMjIwNSAxMi4xNjEyQzEyLjIyNjggMTEuODkyMSAxMi4zNDE4IDExLjYzNjkgMTIuNTM5MyAxMS40NTM5QzEzLjk2MzcgOS43OTU4NSAxNi4wNTIgOC44NTc1NyAxOC4yMzc2IDguODkzNjlDMjEuNzY0MSA4Ljg5MzY5IDI0'@;
put 'LjA5NTMgMTEuMDg1MyAyNC4wOTUzIDE0LjA3MzlaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xp'@;
put 'ZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcg'@;
put 'MjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTcuNzggMjcuODVDMTcuMTEyNiAyNy44NSAxNi41MTEgMjcuNDQ4IDE2LjI1NTYgMjYuODMxNEMxNi4wMDAyIDI2LjIxNDkgMTYuMTQxNCAyNS41MDUyIDE2LjYxMzMgMjUuMDMzM0MxNy4wODUyIDI0LjU2'@;
put 'MTQgMTcuNzk0OSAyNC40MjAyIDE4LjQxMTQgMjQuNjc1NkMxOS4wMjggMjQuOTMxIDE5LjQzIDI1LjUzMjYgMTkuNDMgMjYuMkMxOS40MyAyNy4xMTEzIDE4LjY5MTMgMjcuODUgMTcuNzggMjcuODVaTTE5LjE1IDIxLjUxVjE5Ljc5QzIyLjYxIDE5LjIgMjQuNTggMTcuMTYgMjQuNTggMTQu'@;
put 'MTFDMjQuNTggMTAuODEgMjIgOC41MSAxOC4zIDguNTFDMTYuMDAwNSA4LjQ3NDUyIDEzLjgwMzMgOS40NTk1NiAxMi4zIDExLjJDMTIuMDMwNCAxMS40NjM2IDExLjg3NTkgMTEuODIzIDExLjg3IDEyLjJDMTEuODgzIDEyLjc1MTYgMTIuMjI4IDEzLjI0MDYgMTIuNzQzMiAxMy40MzhDMTMu'@;
put 'MjU4NSAxMy42MzUzIDEzLjg0MTkgMTMuNTAxOCAxNC4yMiAxMy4xQzE1LjIwOTIgMTEuOTA2OSAxNi42NzA0IDExLjIwNTYgMTguMjIgMTEuMThDMjAuMjQgMTEuMTggMjEuNjUgMTIuNDIgMjEuNjUgMTQuMjVDMjEuNjUgMTYuOCAxOS4wNCAxNy4zOCAxNy40NyAxNy41QzE3LjE0NDggMTcu'@;
put 'NTE3NSAxNi44NDA5IDE3LjY2NzQgMTYuNjI5MyAxNy45MTVDMTYuNDE3NiAxOC4xNjI1IDE2LjMxNjcgMTguNDg2IDE2LjM1IDE4LjgxVjIxLjU3QzE2LjM2MDQgMjEuOTI3MiAxNi41MTMxIDIyLjI2NTUgMTYuNzc0MSAyMi41MDk2QzE3LjAzNTEgMjIuNzUzNyAxNy4zODI5IDIyLjg4MzUg'@;
put 'MTcuNzQgMjIuODdIMTcuODVDMTguNTc1MyAyMi44MzI5IDE5LjE0NTYgMjIuMjM2MiAxOS4xNSAyMS41MVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjAwMTMgMTIuNzY4OUMzMC4xNjU5IDE0LjA2ODggMjYu'@;
put 'ODIxMiAxMy40Njc5IDI0LjYxNTYgMTEuMjYyM0MyMi40MTAxIDkuMDU2NzQgMjEuODA5MSA1LjcxMiAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5NzM2IDI0LjAzOTkgNi41Njc2NyAy'@;
put 'OS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVpNMTcuNzE5NiAyNy43MTJDMTcuMDU0NyAyNy43MTIgMTYuNDU1NCAyNy4zMTE1IDE2LjIwMDkgMjYuNjk3M0Mx'@;
put 'NS45NDY1IDI2LjA4MyAxNi4wODcyIDI1LjM3NiAxNi41NTczIDI0LjkwNTlDMTcuMDI3NCAyNC40MzU4IDE3LjczNDQgMjQuMjk1MiAxOC4zNDg2IDI0LjU0OTZDMTguOTYyOCAyNC44MDQgMTkuMzYzMyAyNS40MDM0IDE5LjM2MzMgMjYuMDY4MkMxOS4zNzQgMjYuNTExIDE5LjIwNTYgMjYu'@;
put 'OTM5NCAxOC44OTYyIDI3LjI1NjRDMTguNTg2NyAyNy41NzMzIDE4LjE2MjUgMjcuNzUxOSAxNy43MTk2IDI3Ljc1MThWMjcuNzEyWk0xOS4wODQ0IDIxLjM5NlYxOS43MjI0QzIyLjUzMTIgMTkuMTM0NyAyNC40OTM3IDE3LjEwMjQgMjQuNDkzNyAxNC4wMjQxQzI0LjQ5MzcgMTAuNzM2NyAy'@;
put 'MS45MjM1IDguNDQ1NCAxOC4yMzc2IDguNDQ1NEMxNS45NDY4IDguNDEwMDYgMTMuNzU4IDkuMzkxMzYgMTIuMjYwNCAxMS4xMjUyQzExLjk5MTggMTEuMzg3OCAxMS44Mzc5IDExLjc0NTggMTEuODMyIDEyLjEyMTRDMTEuODQ1IDEyLjY3MDkgMTIuMTg4NiAxMy4xNTgxIDEyLjcwMTkgMTMu'@;
put 'MzU0N0MxMy4yMTUyIDEzLjU1MTIgMTMuNzk2NCAxMy40MTgyIDE0LjE3MzEgMTMuMDE4QzE1LjE1ODYgMTEuODI5NCAxNi42MTQxIDExLjEzMDcgMTguMTU3OSAxMS4xMDUzQzIwLjE3MDIgMTEuMTA1MyAyMS41NzQ5IDEyLjM0MDYgMjEuNTc0OSAxNC4xNjM2QzIxLjU3NDkgMTYuNzAzOSAx'@;
put 'OC45NzQ4IDE3LjI4MTcgMTcuNDEwNyAxNy40MDEzQzE3LjA4NjcgMTcuNDE4NiAxNi43ODQgMTcuNTY4MSAxNi41NzMyIDE3LjgxNDdDMTYuMzYyMyAxOC4wNjEzIDE2LjI2MTggMTguMzgzNSAxNi4yOTUgMTguNzA2M1YyMS40NTU4QzE2LjMwNTQgMjEuODExNyAxNi40NTc1IDIyLjE0ODcg'@;
put 'MTYuNzE3NSAyMi4zOTE5QzE2Ljk3NzUgMjIuNjM1MSAxNy4zMjM5IDIyLjc2NDMgMTcuNjc5NyAyMi43NTA5SDE3Ljc4OTNDMTguNTExOCAyMi43MTM5IDE5LjA4IDIyLjExOTUgMTkuMDg0NCAyMS4zOTZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1'@;
put 'IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLGxQZT1bImluZm8tc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYu'@;
put 'MzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4Wk00IDE4QzQgMTAuMjcgMTAuMjcgNCAxOCA0QzI1LjczIDQgMzIgMTAuMjcgMzIgMThDMzIgMjUuNzMgMjUuNzMgMzIgMTggMzJDMTAu'@;
put 'MjcgMzIgNCAyNS43MyA0IDE4Wk0yMSAyNUgxOVYxNEgxNkMxNS40NSAxNCAxNSAxNC40NSAxNSAxNUMxNSAxNS41NSAxNS40NSAxNiAxNiAxNkgxN1YyNUgxNUMxNC40NSAyNSAxNCAyNS40NSAxNCAyNkMxNCAyNi41NSAxNC40NSAyNyAxNSAyN0gyMUMyMS41NSAyNyAyMiAyNi41NSAyMiAy'@;
put 'NkMyMiAyNS40NSAyMS41NSAyNSAyMSAyNVpNMTkuMzcgMTAuNDVDMTkuMzcgMTEuMjIgMTguNzQgMTEuODUgMTcuOTcgMTEuODVDMTcuMiAxMS44NSAxNi41NyAxMS4yMiAxNi41NyAxMC40NUMxNi41NyA5LjY4IDE3LjIgOS4wNSAxNy45NyA5LjA1QzE4Ljc0IDkuMDUgMTkuMzcgOS42OCAx'@;
put 'OS4zNyAxMC40NVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0xNy45'@;
put 'NyA4Ljg1QzE4Ljg1IDguODUgMTkuNTcgOS41NyAxOS41NyAxMC40NUMxOS41NyAxMS4zMyAxOC44NSAxMi4wNSAxNy45NyAxMi4wNUMxNy4wOSAxMi4wNSAxNi4zNyAxMS4zMyAxNi4zNyAxMC40NUMxNi4zNyA5LjU3IDE3LjA5IDguODUgMTcuOTcgOC44NVpNMjEgMjcuMkgxNUMxNC4zNCAy'@;
put 'Ny4yIDEzLjggMjYuNjYgMTMuOCAyNkMxMy44IDI1LjM0IDE0LjM0IDI0LjggMTUgMjQuOEgxNi44VjE2LjJIMTZDMTUuMzQgMTYuMiAxNC44IDE1LjY2IDE0LjggMTVDMTQuOCAxNC4zNCAxNS4zNCAxMy44IDE2IDEzLjhIMTkuMlYyNC44SDIxQzIxLjY2IDI0LjggMjIuMiAyNS4zNCAyMi4y'@;
put 'IDI2QzIyLjIgMjYuNjYgMjEuNjYgMjcuMiAyMSAyNy4yWiIvPid9XSxjUGU9WyJub3RlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LDMwSDZWOEgxOS4yMmwyLTJINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNWwtMiwyWiIvPjxwYXRoIGQ9Ik0z'@;
put 'My41Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwxLjYxLDAsMCwwLTIuMjgsMEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRaTTE4'@;
put 'LjgxLDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2LDI2LjMyLDYuODdsMi44MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAs'@;
put 'MCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNa'@;
put 'Ii8+J31dLGhZPVsic3VjY2Vzcy1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44'@;
put 'MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMy'@;
put 'IDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNMjYuNTkgMTIuMUMyNi45OCAxMS43MTIzIDI3LjYxIDExLjcxMjMgMjggMTIuMUMyOC4xODkzIDEyLjI4NzggMjguMjk1OCAxMi41NDM0IDI4LjI5NTggMTIuODFDMjgu'@;
put 'Mjk1OCAxMy4wNzY2IDI4LjE4OTMgMTMuMzMyMiAyOCAxMy41MkwxNS40OSAyNkw4IDE4LjUzQzcuNjE4OTIgMTguMTE4NSA3LjY0MzU1IDE3LjQ3NjEgOC4wNTUgMTcuMDk1QzguNDY2NDUgMTYuNzEzOSA5LjEwODkyIDE2LjczODUgOS40OSAxNy4xNUwxNS40OSAyMy4xNUwyNi41OSAxMi4x'@;
put 'WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0yOS4zMSA2LjY5QzI2LjMxIDMuNjkgMjIuMjQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjYuODQgMzQgMzQgMjYuODQgMzQgMThDMzQgMTMuNzYgMzIuMzEgOS42OSAyOS4zMSA2LjY5Wk0yOC4xNCAxMy42'@;
put 'NEwxNS42MyAyNi4xMkwxNS40OSAyNi4yNkwxNS4zNSAyNi4xMkw3Ljg1IDE4LjY0QzcuMzkgMTguMTUgNy40MiAxNy4zOCA3LjkyIDE2LjkyQzguMTUgMTYuNzEgOC40NCAxNi42IDguNzUgMTYuNkM5LjA5IDE2LjYgOS40MSAxNi43NCA5LjY0IDE2Ljk4TDE1LjUgMjIuODRMMjYuNDYgMTEu'@;
put 'OTNDMjYuNjkgMTEuNyAyNi45OSAxMS41OCAyNy4zMSAxMS41OEMyNy42MyAxMS41OCAyNy45MyAxMS43IDI4LjE2IDExLjkzQzI4LjM5IDEyLjE1IDI4LjUxIDEyLjQ2IDI4LjUxIDEyLjc4QzI4LjUxIDEzLjEgMjguMzggMTMuNDEgMjguMTYgMTMuNjNMMjguMTQgMTMuNjRaIi8+J31dLHVQ'@;
put 'ZT1bIndhcm5pbmctc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTguMDAwMSAyMi45OTMyQzE4LjU1MDEgMjIuOTkzMiAxOS4wMDAxIDIyLjU0MzQgMTkuMDAwMSAyMS45OTM2VjEwLjk5NzVDMTkuMDAwMSAxMC40NDc3IDE4LjU1MDEgOS45OTc4NiAxOC4wMDAxIDkuOTk3ODZDMTcu'@;
put 'NDUwMSA5Ljk5Nzg2IDE3LjAwMDEgMTAuNDQ3NyAxNy4wMDAxIDEwLjk5NzVWMjEuOTkzNkMxNy4wMDAxIDIyLjU0MzQgMTcuNDUwMSAyMi45OTMyIDE4LjAwMDEgMjIuOTkzMlpNMzMuNTYwMSAyNy4yMTE3TDIwLjc4MDEgNS41Nzk0NEMyMC4yMDAxIDQuNTg5NzkgMTkuMTYwMSA0IDE4LjAw'@;
put 'MDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU4OTc5IDE1LjIyMDEgNS41Nzk0NEwyLjQ0MDEgMjcuMjExN0MxLjg1MDEgMjguMjExNCAxLjg1MDEgMjkuNDAwOSAyLjQzMDEgMzAuNDAwNkMzLjAxMDEgMzEuNDAwMiA0LjA2MDEgMzIgNS4yMjAxIDMySDMwLjc3MDFDMzEuOTQwMSAzMiAzMi45'@;
put 'ODAxIDMxLjQwMDIgMzMuNTYwMSAzMC40MDA2QzM0LjE0MDEgMjkuNDAwOSAzNC4xNDAxIDI4LjIxMTQgMzMuNTUwMSAyNy4yMTE3SDMzLjU2MDFaTTMxLjgxMDEgMjkuNDAwOUMzMS43MTAxIDI5LjU4MDkgMzEuNDAwMSAyOS45OTA3IDMwLjc4MDEgMjkuOTkwN0g1LjIzMDFDNC42MTAxIDI5'@;
put 'Ljk5MDcgNC4zMDAxIDI5LjU4MDkgNC4yMDAxIDI5LjQwMDlDNC4xMDAxIDI5LjIyMSAzLjg5MDEgMjguNzUxMiA0LjIwMDEgMjguMjMxM0wxNi45ODAxIDYuNTg5MDhDMTcuMjkwMSA2LjA2OTI2IDE3LjgwMDEgNi4wMDkyOCAxOC4wMDAxIDYuMDA5MjhDMTguMjAwMSA2LjAwOTI4IDE4Ljcx'@;
put 'MDEgNi4wNjkyNiAxOS4wMjAxIDYuNTg5MDhMMzEuNzkwMSAyOC4yMjEzQzMyLjEwMDEgMjguNzUxMiAzMS45MDAxIDI5LjIyMSAzMS43OTAxIDI5LjM5MDlMMzEuODEwMSAyOS40MDA5Wk0xOC4wMTAxIDI1LjAwMjVDMTcuMjgwMSAyNS4wMDI1IDE2LjY4MDEgMjUuNjAyMyAxNi42ODAxIDI2'@;
put 'LjMzMkMxNi42ODAxIDI3LjA2MTggMTcuMjgwMSAyNy42NjE1IDE4LjAxMDEgMjcuNjYxNUMxOC43NDAxIDI3LjY2MTUgMTkuMzQwMSAyNy4wNjE4IDE5LjM0MDEgMjYuMzMyQzE5LjM0MDEgMjUuNjAyMyAxOC43NDAxIDI1LjAwMjUgMTguMDEwMSAyNS4wMDI1WiIvPicsc29saWQ6JzxwYXRo'@;
put 'IGQ9Ik0zMy41NjAxIDI3LjIyTDIwLjc4MDEgNS41OEMyMC4yMDAxIDQuNTkgMTkuMTYwMSA0IDE4LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU5IDE1LjIyMDEgNS41OEwyLjQ0MDA2IDI3LjIyQzEuODUwMDYgMjguMjIgMS44NTAwNiAyOS40MSAyLjQ0MDA2IDMwLjQxQzMuMDIwMDYg'@;
put 'MzEuNDEgNC4wNzAwNiAzMi4wMSA1LjIzMDA2IDMyLjAxSDMwLjc4MDFDMzEuOTUwMSAzMi4wMSAzMi45OTAxIDMxLjQxIDMzLjU3MDEgMzAuNDFDMzQuMTUwMSAyOS40MSAzNC4xNTAxIDI4LjIyIDMzLjU2MDEgMjcuMjJaTTE2LjkwMDEgMTFDMTYuOTAwMSAxMC4zOSAxNy4zOTAxIDkuOSAx'@;
put 'OC4wMDAxIDkuOUMxOC42MTAxIDkuOSAxOS4xMDAxIDEwLjM5IDE5LjEwMDEgMTFWMjJDMTkuMTAwMSAyMi42MSAxOC42MTAxIDIzLjEgMTguMDAwMSAyMy4xQzE3LjM5MDEgMjMuMSAxNi45MDAxIDIyLjYxIDE2LjkwMDEgMjJWMTFaTTE4LjAwMDEgMjcuNzZDMTcuMjEwMSAyNy43NiAxNi41'@;
put 'NzAxIDI3LjEyIDE2LjU3MDEgMjYuMzNDMTYuNTcwMSAyNS41NCAxNy4yMTAxIDI0LjkgMTguMDAwMSAyNC45QzE4Ljc5MDEgMjQuOSAxOS40MzAxIDI1LjU0IDE5LjQzMDEgMjYuMzNDMTkuNDMwMSAyNy4xMiAxOC43OTAxIDI3Ljc2IDE4LjAwMDEgMjcuNzZaIi8+J31dLGRQZT1bImNpcmNs'@;
put 'ZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4'@;
put 'Wk02IDE4QzYgMjQuNjI3NCAxMS4zNzI2IDMwIDE4IDMwQzIxLjE4MjYgMzAgMjQuMjM0OCAyOC43MzU3IDI2LjQ4NTMgMjYuNDg1M0MyOC43MzU3IDI0LjIzNDggMzAgMjEuMTgyNiAzMCAxOEMzMCAxMS4zNzI2IDI0LjYyNzQgNiAxOCA2QzExLjM3MjYgNiA2IDExLjM3MjYgNiAxOFoiLz4n'@;
put 'LHNvbGlkOic8cGF0aCBkPSJNMTggNEMxMC4yNjggNCA0IDEwLjI2OCA0IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyNS43MzIgMzIgMzIgMjUuNzMyIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0WiIvPid9XSxoUGU9WyJkb3QtY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0i'@;
put 'TTE4IDExQzE5LjM4NDUgMTEgMjAuNzM3OSAxMS40MTA1IDIxLjg4OSAxMi4xNzk3QzIzLjA0MDEgMTIuOTQ4OSAyMy45Mzc0IDE0LjA0MjEgMjQuNDY3MiAxNS4zMjEyQzI0Ljk5NyAxNi42MDAzIDI1LjEzNTYgMTguMDA3OCAyNC44NjU1IDE5LjM2NTZDMjQuNTk1NCAyMC43MjM1IDIzLjky'@;
put 'ODcgMjEuOTcwOCAyMi45NDk4IDIyLjk0OThDMjEuOTcwOCAyMy45Mjg3IDIwLjcyMzUgMjQuNTk1NCAxOS4zNjU2IDI0Ljg2NTVDMTguMDA3OCAyNS4xMzU2IDE2LjYwMDMgMjQuOTk3IDE1LjMyMTIgMjQuNDY3MkMxNC4wNDIxIDIzLjkzNzQgMTIuOTQ4OSAyMy4wNDAxIDEyLjE3OTcgMjEu'@;
put 'ODg5QzExLjQxMDUgMjAuNzM3OSAxMSAxOS4zODQ1IDExIDE4QzExIDE2LjE0MzUgMTEuNzM3NSAxNC4zNjMgMTMuMDUwMyAxMy4wNTAzQzE0LjM2MyAxMS43Mzc1IDE2LjE0MzUgMTEgMTggMTFaIi8+PHBhdGggZD0iTTE4IDM0QzE0LjgzNTUgMzQgMTEuNzQyMSAzMy4wNjE2IDkuMTEwODgg'@;
put 'MzEuMzAzNUM2LjQ3OTcgMjkuNTQ1NCA0LjQyODk0IDI3LjA0NjYgMy4yMTc5MyAyNC4xMjI5QzIuMDA2OTMgMjEuMTk5MyAxLjY5MDA4IDE3Ljk4MjMgMi4zMDc0NCAxNC44Nzg2QzIuOTI0ODEgMTEuNzc0OSA0LjQ0ODY2IDguOTIzOTQgNi42ODYzIDYuNjg2M0M4LjkyMzk0IDQuNDQ4NjYg'@;
put 'MTEuNzc0OSAyLjkyNDgxIDE0Ljg3ODYgMi4zMDc0NEMxNy45ODIzIDEuNjkwMDggMjEuMTk5MyAyLjAwNjkzIDI0LjEyMjkgMy4yMTc5M0MyNy4wNDY2IDQuNDI4OTQgMjkuNTQ1NCA2LjQ3OTcgMzEuMzAzNSA5LjExMDg4QzMzLjA2MTYgMTEuNzQyMSAzNCAxNC44MzU1IDM0IDE4QzM0IDIy'@;
put 'LjI0MzUgMzIuMzE0MyAyNi4zMTMxIDI5LjMxMzcgMjkuMzEzN0MyNi4zMTMxIDMyLjMxNDMgMjIuMjQzNSAzNCAxOCAzNFpNMTggNC4wMDAwMUMxNS4yMzExIDQuMDAwMDEgMTIuNTI0MyA0LjgyMTA5IDEwLjIyMiA2LjM1OTQzQzcuOTE5NzQgNy44OTc3NyA2LjEyNTMyIDEwLjA4NDMgNS4w'@;
put 'NjU2OSAxMi42NDI0QzQuMDA2MDcgMTUuMjAwNiAzLjcyODgyIDE4LjAxNTUgNC4yNjkwMSAyMC43MzEzQzQuODA5MjEgMjMuNDQ3IDYuMTQyNTggMjUuOTQxNiA4LjEwMDUxIDI3Ljg5OTVDMTAuMDU4NCAyOS44NTc0IDEyLjU1MyAzMS4xOTA4IDE1LjI2ODcgMzEuNzMxQzE3Ljk4NDUgMzIu'@;
put 'MjcxMiAyMC43OTk0IDMxLjk5MzkgMjMuMzU3NiAzMC45MzQzQzI1LjkxNTcgMjkuODc0NyAyOC4xMDIyIDI4LjA4MDMgMjkuNjQwNiAyNS43NzhDMzEuMTc4OSAyMy40NzU3IDMyIDIwLjc2ODkgMzIgMThDMzIgMTQuMjg3IDMwLjUyNSAxMC43MjYgMjcuODk5NSA4LjEwMDUxQzI1LjI3NCA1'@;
put 'LjQ3NSAyMS43MTMgNC4wMDAwMSAxOCA0LjAwMDAxWiIvPid9XTtmdW5jdGlvbiBmUGUoYyxsKXtyZXR1cm4gYz09PWx9Y2xhc3MgZ1BlIGV4dGVuZHMgSnR7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpfXNjaGVkdWxlKGwsYT0wKXtyZXR1cm4gdGhpc319Y29uc3QgeEw9e3NldEludGVydmFs'@;
put 'KGMsbCwuLi5hKXtjb25zdHtkZWxlZ2F0ZTpkfT14TDtyZXR1cm4gZD8uc2V0SW50ZXJ2YWw/ZC5zZXRJbnRlcnZhbChjLGwsLi4uYSk6c2V0SW50ZXJ2YWwoYyxsLC4uLmEpfSxjbGVhckludGVydmFsKGMpe2NvbnN0e2RlbGVnYXRlOmx9PXhMO3JldHVybihsPy5jbGVhckludGVydmFsfHxj'@;
put 'bGVhckludGVydmFsKShjKX0sZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyBwWSBleHRlbmRzIGdQZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUobCxhPTApe3ZhciBkO2lmKHRoaXMuY2xvc2Vk'@;
put 'KXJldHVybiB0aGlzO3RoaXMuc3RhdGU9bDtjb25zdCBoPXRoaXMuaWQsZj10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9aCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChmLGgsYSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWEsdGhpcy5pZD1udWxsIT09KGQ9dGhpcy5p'@;
put 'ZCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLnJlcXVlc3RBc3luY0lkKGYsdGhpcy5pZCxhKSx0aGlzfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiB4TC5zZXRJbnRlcnZhbChsLmZsdXNoLmJpbmQobCx0aGlzKSxkKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXtpZihudWxsIT1kJiZ0aGlz'@;
put 'LmRlbGF5PT09ZCYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGE7bnVsbCE9YSYmeEwuY2xlYXJJbnRlcnZhbChhKX1leGVjdXRlKGwsYSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTtjb25z'@;
put 'dCBkPXRoaXMuX2V4ZWN1dGUobCxhKTtpZihkKXJldHVybiBkOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfV9leGVjdXRlKGwsYSl7bGV0IGgsZD0hMTt0cnl7dGhpcy53'@;
put 'b3JrKGwpfWNhdGNoKGYpe2Q9ITAsaD1mfHxuZXcgRXJyb3IoIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKX1pZihkKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksaH11bnN1YnNjcmliZSgpe2lmKCF0aGlzLmNsb3NlZCl7Y29uc3R7aWQ6bCxzY2hlZHVsZXI6YX09dGhp'@;
put 'cyx7YWN0aW9uczpkfT1hO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLHV0KGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGwsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmli'@;
put 'ZSgpfX19Y29uc3QgZ1k9e25vdzooKT0+KGdZLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIFN4e2NvbnN0cnVjdG9yKGwsYT1TeC5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1sLHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5l'@;
put 'dyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5zY2hlZHVsZShkLGEpfX1TeC5ub3c9Z1kubm93O2NsYXNzIG1ZIGV4dGVuZHMgU3h7Y29uc3RydWN0b3IobCxhPVN4Lm5vdyl7c3VwZXIobCxhKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0'@;
put 'e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDts'@;
put 'PWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9fX1jb25zdCBFTD1uZXcgbVkocFkpLG1QZT1FTDtmdW5jdGlvbiB1bShjLGw9RUwpe3JldHVybiBOaSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLHY9bnVsbDtjb25zdCBNPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9'@;
put 'bnVsbDtjb25zdCBHPWY7Zj1udWxsLGQubmV4dChHKX19O2Z1bmN0aW9uIEkoKXtjb25zdCBHPXYrYyxyZT1sLm5vdygpO2lmKHJlPEcpcmV0dXJuIGg9dGhpcy5zY2hlZHVsZSh2b2lkIDAsRy1yZSksdm9pZCBkLmFkZChoKTtNKCl9YS5zdWJzY3JpYmUoSGkoZCxHPT57Zj1HLHY9bC5ub3co'@;
put 'KSxofHwoaD1sLnNjaGVkdWxlKEksYyksZC5hZGQoaCkpfSwoKT0+e00oKSxkLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e2Y9aD1udWxsfSkpfSl9Y29uc3QgdlBlPVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLHlQZT1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExp'@;
put 'c3RlbmVyIl0sYlBlPVsib24iLCJvZmYiXTtmdW5jdGlvbiB4ZChjLGwsYSxkKXtpZihLZShhKSYmKGQ9YSxhPXZvaWQgMCksZClyZXR1cm4geGQoYyxsLGEpLnBpcGUoWVooZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gQ1BlKGMpe3JldHVybiBLZShjLmFkZEV2ZW50TGlzdGVuZXIpJiZLZShj'@;
put 'LnJlbW92ZUV2ZW50TGlzdGVuZXIpfShjKT95UGUubWFwKHY9Pk09PmNbdl0obCxNLGEpKTpmdW5jdGlvbiBfUGUoYyl7cmV0dXJuIEtlKGMuYWRkTGlzdGVuZXIpJiZLZShjLnJlbW92ZUxpc3RlbmVyKX0oYyk/dlBlLm1hcChCMGUoYyxsKSk6ZnVuY3Rpb24gd1BlKGMpe3JldHVybiBLZShj'@;
put 'Lm9uKSYmS2UoYy5vZmYpfShjKT9iUGUubWFwKEIwZShjLGwpKTpbXTtpZighaCYmWlooYykpcmV0dXJuIEYwKHY9PnhkKHYsbCxhKSkobzEoYykpO2lmKCFoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBRdCh2PT57Y29uc3QgTT0oLi4u'@;
put 'SSk9PnYubmV4dCgxPEkubGVuZ3RoP0k6SVswXSk7cmV0dXJuIGgoTSksKCk9PmYoTSl9KX1mdW5jdGlvbiBCMGUoYyxsKXtyZXR1cm4gYT0+ZD0+Y1thXShsLGQpfWNsYXNzIE14IGV4dGVuZHMgR257Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1nWSl7c3VwZXIoKSx0aGlzLl9idWZmZXJT'@;
put 'aXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5f'@;
put 'd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29uc3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxfdGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTp2fT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK3YpKSx0aGlz'@;
put 'Ll90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2NyaWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2Uo'@;
put 'KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoJiYhbC5jbG9zZWQ7dis9ZD8xOjIpbC5uZXh0KGZbdl0pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxf'@;
put 'aW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIpKmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiksIWgpe2NvbnN0IHY9YS5ub3coKTtsZXQgTT0wO2ZvcihsZXQgST0xO0k8ZC5sZW5ndGgmJmRbSV08PXY7SSs9MilNPUk7TSYmZC5zcGxpY2Uo'@;
put 'MCxNKzEpfX19ZnVuY3Rpb24gdlkoYyxsLC4uLmEpe2lmKCEwPT09bClyZXR1cm4gdm9pZCBjKCk7aWYoITE9PT1sKXJldHVybjtjb25zdCBkPW5ldyBodCh7bmV4dDooKT0+e2QudW5zdWJzY3JpYmUoKSxjKCl9fSk7cmV0dXJuIG8xKGwoLi4uYSkpLnN1YnNjcmliZShkKX1mdW5jdGlvbiBq'@;
put 'MGUoYyxsLGEpe2xldCBkLGg9ITE7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYz8oe2J1ZmZlclNpemU6ZD0xLzAsd2luZG93VGltZTpsPTEvMCxyZWZDb3VudDpoPSExLHNjaGVkdWxlcjphfT1jKTpkPWM/PzEvMCxmdW5jdGlvbiBTUGUoYz17fSl7Y29uc3R7Y29ubmVjdG9yOmw9KCgp'@;
put 'PT5uZXcgR24pLHJlc2V0T25FcnJvcjphPSEwLHJlc2V0T25Db21wbGV0ZTpkPSEwLHJlc2V0T25SZWZDb3VudFplcm86aD0hMH09YztyZXR1cm4gZj0+e2xldCB2LE0sSSxHPTAscmU9ITEsdWU9ITE7Y29uc3QgeWU9KCk9PntNPy51bnN1YnNjcmliZSgpLE09dm9pZCAwfSxFZT0oKT0+e3ll'@;
put 'KCksdj1JPXZvaWQgMCxyZT11ZT0hMX0sQmU9KCk9Pntjb25zdCBHZT12O0VlKCksR2U/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBOaSgoR2Usc3QpPT57RysrLCF1ZSYmIXJlJiZ5ZSgpO2NvbnN0IHB0PUk9ST8/bCgpO3N0LmFkZCgoKT0+e0ctLSwwPT09RyYmIXVlJiYhcmUmJihNPXZZKEJl'@;
put 'LGgpKX0pLHB0LnN1YnNjcmliZShzdCksIXYmJkc+MCYmKHY9bmV3IGh0KHtuZXh0OmR0PT5wdC5uZXh0KGR0KSxlcnJvcjpkdD0+e3VlPSEwLHllKCksTT12WShFZSxhLGR0KSxwdC5lcnJvcihkdCl9LGNvbXBsZXRlOigpPT57cmU9ITAseWUoKSxNPXZZKEVlLGQpLHB0LmNvbXBsZXRlKCl9'@;
put 'fSksbzEoR2UpLnN1YnNjcmliZSh2KSl9KShmKX19KHtjb25uZWN0b3I6KCk9Pm5ldyBNeChkLGwsYSkscmVzZXRPbkVycm9yOiEwLHJlc2V0T25Db21wbGV0ZTohMSxyZXNldE9uUmVmQ291bnRaZXJvOmh9KX1mdW5jdGlvbiB4eCguLi5jKXtjb25zdCBsPVlNKGMpLGE9ZnVuY3Rpb24gaHhl'@;
put 'KGMsbCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBXWihjKT9jLnBvcCgpOmx9KGMsMS8wKSxkPWM7cmV0dXJuIGQubGVuZ3RoPzE9PT1kLmxlbmd0aD9vMShkWzBdKTpYeShhKShVdShkLGwpKTpFMn12YXIga3M9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TdGF0ZT0wXT0iU3RhdGUiLGNbYy5U'@;
put 'cmFuc2l0aW9uPTFdPSJUcmFuc2l0aW9uIixjW2MuU2VxdWVuY2U9Ml09IlNlcXVlbmNlIixjW2MuR3JvdXA9M109Ikdyb3VwIixjW2MuQW5pbWF0ZT00XT0iQW5pbWF0ZSIsY1tjLktleWZyYW1lcz01XT0iS2V5ZnJhbWVzIixjW2MuU3R5bGU9Nl09IlN0eWxlIixjW2MuVHJpZ2dlcj03XT0i'@;
put 'VHJpZ2dlciIsY1tjLlJlZmVyZW5jZT04XT0iUmVmZXJlbmNlIixjW2MuQW5pbWF0ZUNoaWxkPTldPSJBbmltYXRlQ2hpbGQiLGNbYy5BbmltYXRlUmVmPTEwXT0iQW5pbWF0ZVJlZiIsY1tjLlF1ZXJ5PTExXT0iUXVlcnkiLGNbYy5TdGFnZ2VyPTEyXT0iU3RhZ2dlciIsY30oa3N8fHt9KTtj'@;
put 'b25zdCByZz0iKiI7ZnVuY3Rpb24gd2goYyxsKXtyZXR1cm57dHlwZTprcy5UcmlnZ2VyLG5hbWU6YyxkZWZpbml0aW9uczpsLG9wdGlvbnM6e319fWZ1bmN0aW9uIHcwKGMsbD1udWxsKXtyZXR1cm57dHlwZTprcy5BbmltYXRlLHN0eWxlczpsLHRpbWluZ3M6Y319ZnVuY3Rpb24gbG8oYyl7'@;
put 'cmV0dXJue3R5cGU6a3MuU3R5bGUsc3R5bGVzOmMsb2Zmc2V0Om51bGx9fWZ1bmN0aW9uIFRMKGMsbCxhKXtyZXR1cm57dHlwZTprcy5TdGF0ZSxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiB4UGUoYyl7cmV0dXJue3R5cGU6a3MuS2V5ZnJhbWVzLHN0ZXBzOmN9fWZ1bmN0'@;
put 'aW9uIHR1KGMsbCxhPW51bGwpe3JldHVybnt0eXBlOmtzLlRyYW5zaXRpb24sZXhwcjpjLGFuaW1hdGlvbjpsLG9wdGlvbnM6YX19Y2xhc3MgRXh7Y29uc3RydWN0b3IobD0wLGE9MCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtd'@;
put 'LHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9wb3NpdGlvbj0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9'@;
put 'bCthfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfW9uU3RhcnQobCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2gobCksdGhpcy5fb25TdGFydEZucy5w'@;
put 'dXNoKGwpfW9uRG9uZShsKXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKGwpLHRoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9aW5pdCgpe31wbGF5KCl7dGhp'@;
put 'cy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9dHJpZ2dlck1pY3JvdGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fb25TdGFydCgpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFj'@;
put 'aChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2UoKXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZp'@;
put 'bmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5z'@;
put 'PXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfXNldFBvc2l0aW9uKGwpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP2wqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJD'@;
put 'YWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgejBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2Zp'@;
put 'bmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0'@;
put 'aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaCh2PT57di5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSx2Lm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSx2Lm9uU3RhcnQo'@;
put 'KCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgodixNKT0+TWF0aC5tYXgodixNLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMu'@;
put 'Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlz'@;
put 'Ll9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7'@;
put 'dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3Rh'@;
put 'cnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRo'@;
put 'aXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5p'@;
put 'c2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0'@;
put 'aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZv'@;
put 'cmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IGJZO3RyeXtiWT10eXBlb2YgSW50bDwidSImJklu'@;
put 'dGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe2JZPSExfWxldCBBeCxUeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3BsYXRmb3JtSWQ9YSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP2VsKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1l'@;
put 'bnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlz'@;
put 'LmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIWJZKSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhp'@;
put 'cy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQp'@;
put 'L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVz'@;
put 'ZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKGlzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4g'@;
put 'Y30pKCk7ZnVuY3Rpb24gTWIoYyl7cmV0dXJuIGZ1bmN0aW9uIERQZSgpe2lmKG51bGw9PUF4JiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT5BeD0hMH0p'@;
put 'KX1maW5hbGx5e0F4PUF4fHwhMX1yZXR1cm4gQXh9KCk/YzohIWMuY2FwdHVyZX12YXIgQ3A9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT1JNQUw9MF09Ik5PUk1BTCIsY1tjLk5FR0FURUQ9MV09Ik5FR0FURUQiLGNbYy5JTlZFUlRFRD0yXT0iSU5WRVJURUQiLGN9KENwfHx7fSk7bGV0IEFM'@;
put 'LHU3LF9ZO2Z1bmN0aW9uIGt4KCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiBDcC5OT1JNQUw7aWYobnVsbD09QUwpe2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksbD1jLnN0eWxlO2MuZGlyPSJydGwiLGwud2lkdGg9IjFweCIs'@;
put 'bC5vdmVyZmxvdz0iYXV0byIsbC52aXNpYmlsaXR5PSJoaWRkZW4iLGwucG9pbnRlckV2ZW50cz0ibm9uZSIsbC5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1hLnN0eWxlO2Qud2lkdGg9IjJweCIsZC5oZWlnaHQ9IjFweCIsYy5h'@;
put 'cHBlbmRDaGlsZChhKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLEFMPUNwLk5PUk1BTCwwPT09Yy5zY3JvbGxMZWZ0JiYoYy5zY3JvbGxMZWZ0PTEsQUw9MD09PWMuc2Nyb2xsTGVmdD9DcC5ORUdBVEVEOkNwLklOVkVSVEVEKSxjLnJlbW92ZSgpfXJldHVybiBBTH1mdW5jdGlvbiBa'@;
put 'MGUoYyl7aWYoZnVuY3Rpb24gUlBlKCl7aWYobnVsbD09X1kpe2NvbnN0IGM9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7X1k9ISghY3x8IWMuY3JlYXRlU2hhZG93Um9vdCYmIWMuYXR0YWNoU2hhZG93KX1yZXR1cm4gX1l9KCkpe2NvbnN0IGw9Yy5nZXRSb290Tm9k'@;
put 'ZT9jLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hhZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJmwgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiBsfXJldHVybiBudWxsfWZ1bmN0aW9uIGtMKGMpe3JldHVybiBjLmNvbXBvc2VkUGF0aD9jLmNvbXBvc2VkUGF0aCgpWzBdOmMu'@;
put 'dGFyZ2V0fWxldCBuRmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybT1hfWlzRGlzYWJsZWQoYSl7cmV0dXJuIGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShhKXtyZXR1cm4gZnVuY3Rpb24gaUZlKGMpe3JldHVybiEhKGMub2Zmc2V0V2lk'@;
put 'dGh8fGMub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRDbGllbnRSZWN0cyYmYy5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KGEpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKGEpLnZpc2liaWxpdHl9aXNUYWJiYWJsZShhKXtpZighdGhpcy5fcGxhdGZvcm0u'@;
put 'aXNCcm93c2VyKXJldHVybiExO2NvbnN0IGQ9ZnVuY3Rpb24gckZlKGMpe3RyeXtyZXR1cm4gYy5mcmFtZUVsZW1lbnR9Y2F0Y2h7cmV0dXJuIG51bGx9fShmdW5jdGlvbiBoRmUoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9'@;
put 'KGEpKTtpZihkJiYoLTE9PT0kMGUoZCl8fCF0aGlzLmlzVmlzaWJsZShkKSkpcmV0dXJuITE7bGV0IGg9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGY9JDBlKGEpO3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1mOiEoImlmcmFtZSI9PT1ofHwib2JqZWN0'@;
put 'Ij09PWh8fHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhZnVuY3Rpb24gdUZlKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJpbnB1dCI9PT1sJiZjLnR5cGU7cmV0dXJuInRleHQiPT09YXx8InBhc3N3b3JkIj09PWF8fCJzZWxlY3QiPT09'@;
put 'bHx8InRleHRhcmVhIj09PWx9KGEpKSYmKCJhdWRpbyI9PT1oPyEhYS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09ZjoidmlkZW8iPT09aD8tMSE9PWYmJihudWxsIT09Znx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8YS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmEudGFiSW5k'@;
put 'ZXg+PTApfWlzRm9jdXNhYmxlKGEsZCl7cmV0dXJuIGZ1bmN0aW9uIGRGZShjKXtyZXR1cm4hZnVuY3Rpb24gc0ZlKGMpe3JldHVybiBmdW5jdGlvbiBsRmUoYyl7cmV0dXJuImlucHV0Ij09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShjKSYmImhpZGRlbiI9PWMudHlwZX0oYykmJihmdW5j'@;
put 'dGlvbiBhRmUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1sfHwic2VsZWN0Ij09PWx8fCJidXR0b24iPT09bHx8InRleHRhcmVhIj09PWx9KGMpfHxmdW5jdGlvbiBvRmUoYyl7cmV0dXJuIGZ1bmN0aW9uIGNGZShjKXtyZXR1cm4iYSI9PWMubm9k'@;
put 'ZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJmMuaGFzQXR0cmlidXRlKCJocmVmIil9KGMpfHxjLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fEcwZShjKSl9KGEpJiYhdGhpcy5pc0Rpc2FibGVkKGEpJiYoZD8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoYSkpfXN0'@;
put 'YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKFR4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRzBlKGMpe2lm'@;
put 'KCFjLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09Yy50YWJJbmRleClyZXR1cm4hMTtsZXQgbD1jLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4hKCFsfHxpc05hTihwYXJzZUludChsLDEwKSkpfWZ1bmN0aW9uICQwZShjKXtpZighRzBlKGMpKXJldHVybiBudWxs'@;
put 'O2NvbnN0IGw9cGFyc2VJbnQoYy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4obCk/LTE6bH1jbGFzcyBLMGV7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChsKXt0aGlzLl9lbmFibGVkPWwsdGhpcy5fc3RhcnRBbmNo'@;
put 'b3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IobCxhLGQsaCxmPSExKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5f'@;
put 'Y2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWgsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJz'@;
put 'dFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsZnx8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fc3RhcnRBbmNob3IsYT10aGlzLl9lbmRBbmNob3I7bCYmKGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JM'@;
put 'aXN0ZW5lciksbC5yZW1vdmUoKSksYSYmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpLGEucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMo'@;
put 'KXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1'@;
put 'cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxlbWVu'@;
put 'dC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5n'@;
put 'KSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KGwpKSl9KX1mb2N1c0Zp'@;
put 'cnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBu'@;
put 'ZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KGwpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtjZGstZm9jdXMtcmVnaW9uLSR7bH1d'@;
put 'LCBbY2RrRm9jdXNSZWdpb24ke2x9XSwgW2Nkay1mb2N1cy0ke2x9XWApO3JldHVybiJzdGFydCI9PWw/YS5sZW5ndGg/YVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTphLmxlbmd0aD9hW2EubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVs'@;
put 'ZW1lbnQodGhpcy5fZWxlbWVudCl9Zm9jdXNJbml0aWFsRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihhKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShhKSl7Y29u'@;
put 'c3QgZD10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChhKTtyZXR1cm4gZD8uZm9jdXMobCksISFkfXJldHVybiBhLmZvY3VzKGwpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKXtjb25zdCBhPXRoaXMu'@;
put 'X2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGEmJmEuZm9jdXMobCksISFhfWhhc0F0dGFjaGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtj'@;
put 'b25zdCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYVtkXSk6bnVsbDtpZihoKXJldHVybiBofXJldHVybiBudWxsfV9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGwpe2lmKHRoaXMuX2NoZWNrZXIuaXNG'@;
put 'b2N1c2FibGUobCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZShsKSlyZXR1cm4gbDtjb25zdCBhPWwuY2hpbGRyZW47Zm9yKGxldCBkPWEubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9YVtkXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0'@;
put 'VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7Y29uc3QgbD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodGhpcy5fZW5hYmxlZCxsKSxs'@;
put 'LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSxsLmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLGwuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxsfV90b2dnbGVBbmNob3JUYWJJbmRleChsLGEpe2w/YS5zZXRBdHRyaWJ1dGUoInRh'@;
put 'YmluZGV4IiwiMCIpOmEucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfXRvZ2dsZUFuY2hvcnMobCl7dGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRh'@;
put 'YkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9X2V4ZWN1dGVPblN0YWJsZShsKXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/bCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGdoKDEpKS5zdWJzY3JpYmUobCl9fWxldCB3WT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlz'@;
put 'Ll9jaGVja2VyPWEsdGhpcy5fbmdab25lPWQsdGhpcy5fZG9jdW1lbnQ9aH1jcmVhdGUoYSxkPSExKXtyZXR1cm4gbmV3IEswZShhLHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3'@;
put 'KGR8fGMpKENyKG5GZSksQ3IoR2EpLENyKG1vKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksWDBlPSgoKT0+e2NsYXNzIGN7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5m'@;
put 'b2N1c1RyYXA/LmVuYWJsZWR8fCExfXNldCBlbmFibGVkKGEpe3RoaXMuZm9jdXNUcmFwJiYodGhpcy5mb2N1c1RyYXAuZW5hYmxlZD1hKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudFJlZj1hLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZCx0aGlzLl9wcmV2aW91c2x5Rm9jdXNl'@;
put 'ZEVsZW1lbnQ9bnVsbCxoaShUeCkuaXNCcm93c2VyJiYodGhpcy5mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCEwKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvY3VzVHJhcD8uZGVzdHJveSgpLHRoaXMuX3ByZXZp'@;
put 'b3VzbHlGb2N1c2VkRWxlbWVudCYmKHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1udWxsKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzVHJhcD8uYXR0YWNoQW5jaG9ycygpLHRoaXMuYXV0b0NhcHR1'@;
put 'cmUmJnRoaXMuX2NhcHR1cmVGb2N1cygpfW5nRG9DaGVjaygpe3RoaXMuZm9jdXNUcmFwJiYhdGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKSYmdGhpcy5mb2N1c1RyYXAuYXR0YWNoQW5jaG9ycygpfW5nT25DaGFuZ2VzKGEpe2NvbnN0IGQ9YS5hdXRvQ2FwdHVyZTtkJiYhZC5maXJzdENo'@;
put 'YW5nZSYmdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5mb2N1c1RyYXA/Lmhhc0F0dGFjaGVkKCkmJnRoaXMuX2NhcHR1cmVGb2N1cygpfV9jYXB0dXJlRm9jdXMoKXt0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZnVuY3Rpb24gTFBlKCl7bGV0IGM9dHlwZW9mIGRvY3VtZW50PCJ1IiYm'@;
put 'ZG9jdW1lbnQ/ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDpudWxsO2Zvcig7YyYmYy5zaGFkb3dSb290Oyl7Y29uc3QgbD1jLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZihsPT09YylicmVhaztjPWx9cmV0dXJuIGN9KCksdGhpcy5mb2N1c1RyYXA/LmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVu'@;
put 'UmVhZHkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShRaSksJGUod1kpLCRlKG1vKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0saW5wdXRzOntlbmFibGVk'@;
put 'OltWbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrVHJhcEZvY3VzIiwiZW5hYmxlZCIsczFdLGF1dG9DYXB0dXJlOltWbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2FwdHVyZSIsczFdfSxleHBvcnRBczpbImNka1Ry'@;
put 'YXBGb2N1cyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3psLGJsXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZDcoYyxsPTApe3JldHVybiBmdW5jdGlvbiB5RmUoYyl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYykpJiYhaXNOYU4oTnVtYmVyKGMpKX0oYyk/TnVtYmVyKGMpOmx9ZnVu'@;
put 'Y3Rpb24gRWQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBRaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jb25zdCBEeD17c2NoZWR1bGUoYyl7bGV0IGw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9Y2FuY2VsQW5pbWF0aW9uRnJhbWU7Y29uc3R7ZGVsZWdhdGU6ZH09RHg7ZCYmKGw9ZC5yZXF1ZXN0QW5p'@;
put 'bWF0aW9uRnJhbWUsYT1kLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtjb25zdCBoPWwoZj0+e2E9dm9pZCAwLGMoZil9KTtyZXR1cm4gbmV3IEp0KCgpPT5hPy4oaCkpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09RHg7cmV0dXJuKGw/LnJlcXVlc3RBbmlt'@;
put 'YXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09RHg7cmV0dXJuKGw/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4uYyl9LGRlbGVnYXRlOnZvaWQg'@;
put 'MH0scTBlPW5ldyBjbGFzcyB3RmUgZXh0ZW5kcyBtWXtmbHVzaChsKXtsZXQgYTt0aGlzLl9hY3RpdmU9ITAsbD9hPWwuaWQ6KGE9dGhpcy5fc2NoZWR1bGVkLHRoaXMuX3NjaGVkdWxlZD12b2lkIDApO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZiho'@;
put 'PWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgX0Zl'@;
put 'IGV4dGVuZHMgcFl7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxs'@;
put 'Ll9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9RHgucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5sLmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEs'@;
put 'ZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJmE9PT1sLl9zY2hlZHVsZWQmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKER4LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpLGwuX3NjaGVkdWxlZD12b2lkIDApfX0pO2xldCBDWSxD'@;
put 'RmU9MTtjb25zdCBETD17fTtmdW5jdGlvbiBKMGUoYyl7cmV0dXJuIGMgaW4gREwmJihkZWxldGUgRExbY10sITApfWNvbnN0IFNGZT17c2V0SW1tZWRpYXRlKGMpe2NvbnN0IGw9Q0ZlKys7cmV0dXJuIERMW2xdPSEwLENZfHwoQ1k9UHJvbWlzZS5yZXNvbHZlKCkpLENZLnRoZW4oKCk9Pkow'@;
put 'ZShsKSYmYygpKSxsfSxjbGVhckltbWVkaWF0ZShjKXtKMGUoYyl9fSx7c2V0SW1tZWRpYXRlOk1GZSxjbGVhckltbWVkaWF0ZTp4RmV9PVNGZSxJTD17c2V0SW1tZWRpYXRlKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PUlMO3JldHVybihsPy5zZXRJbW1lZGlhdGV8fE1GZSkoLi4uYyl9LGNs'@;
put 'ZWFySW1tZWRpYXRlKGMpe2NvbnN0e2RlbGVnYXRlOmx9PUlMO3JldHVybihsPy5jbGVhckltbWVkaWF0ZXx8eEZlKShjKX0sZGVsZWdhdGU6dm9pZCAwfSxBRmU9bmV3IGNsYXNzIFRGZSBleHRlbmRzIG1Ze2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxl'@;
put 'ZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEs'@;
put 'aCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgRUZlIGV4dGVuZHMgcFl7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9'@;
put 'MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9SUwuc2V0SW1tZWRpYXRlKGwuZmx1c2guYmluZChsLHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9'@;
put 'MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKElMLmNsZWFy'@;
put 'SW1tZWRpYXRlKGEpLGwuX3NjaGVkdWxlZD09PWEmJihsLl9zY2hlZHVsZWQ9dm9pZCAwKSl9fSk7ZnVuY3Rpb24gUTBlKGM9MCxsLGE9bVBlKXtsZXQgZD0tMTtyZXR1cm4gbnVsbCE9bCYmKGJsZShsKT9hPWw6ZD1sKSxuZXcgUXQoaD0+e2xldCBmPWZ1bmN0aW9uIERGZShjKXtyZXR1cm4g'@;
put 'YyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IHY9MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KHYrKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRlKCkpfSxmKX0p'@;
put 'fWZ1bmN0aW9uIFNZKGMsbD1FTCl7cmV0dXJuIGZ1bmN0aW9uIGtGZShjKXtyZXR1cm4gTmkoKGwsYSk9PntsZXQgZD0hMSxoPW51bGwsZj1udWxsLHY9ITE7Y29uc3QgTT0oKT0+e2lmKGY/LnVuc3Vic2NyaWJlKCksZj1udWxsLGQpe2Q9ITE7Y29uc3QgRz1oO2g9bnVsbCxhLm5leHQoRyl9'@;
put 'diYmYS5jb21wbGV0ZSgpfSxJPSgpPT57Zj1udWxsLHYmJmEuY29tcGxldGUoKX07bC5zdWJzY3JpYmUoSGkoYSxHPT57ZD0hMCxoPUcsZnx8bzEoYyhHKSkuc3Vic2NyaWJlKGY9SGkoYSxNLEkpKX0sKCk9Pnt2PSEwLCghZHx8IWZ8fGYuY2xvc2VkKSYmYS5jb21wbGV0ZSgpfSkpfSl9KCgp'@;
put 'PT5RMGUoYyxsKSl9Y29uc3QgUkZlPW5ldyBTdCgiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIExGZSgpe3JldHVybiBoaShtbyl9fSksT0ZlPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxI'@;
put 'ZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pO2xldCBkbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IEtyLGEmJih0aGlzLnZhbHVlPWZ1bmN0aW9uIFBGZShjKXtjb25z'@;
put 'dCBsPWM/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PWwmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP09GZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1sPyJydGwiOiJsdHIifSgoYS5ib2R5P2EuYm9keS5k'@;
put 'aXI6bnVsbCl8fChhLmRvY3VtZW50RWxlbWVudD9hLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKFJGZSw4KSl9'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgRkZle31jbGFzcyBORmUgZXh0ZW5kcyBGRmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl9kYXRhPWx9Y29ubmVj'@;
put 'dCgpe3JldHVybiBXTSh0aGlzLl9kYXRhKT90aGlzLl9kYXRhOmRzKHRoaXMuX2RhdGEpfWRpc2Nvbm5lY3QoKXt9fXZhciBobT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJFUExBQ0VEPTBdPSJSRVBMQUNFRCIsY1tjLklOU0VSVEVEPTFdPSJJTlNFUlRFRCIsY1tjLk1PVkVEPTJdPSJNT1ZF'@;
put 'RCIsY1tjLlJFTU9WRUQ9M109IlJFTU9WRUQiLGN9KGhtfHx7fSk7Y29uc3QgTVk9bmV3IFN0KCJfVmlld1JlcGVhdGVyIik7Y2xhc3MgZTFle2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXMobCxhLGQsaCxmKXtsLmZv'@;
put 'ckVhY2hPcGVyYXRpb24oKHYsTSxJKT0+e2xldCBHLHJlO251bGw9PXYucHJldmlvdXNJbmRleD8oRz10aGlzLl9pbnNlcnRWaWV3KCgpPT5kKHYsTSxJKSxJLGEsaCh2KSkscmU9Rz9obS5JTlNFUlRFRDpobS5SRVBMQUNFRCk6bnVsbD09ST8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3KE0s'@;
put 'YSkscmU9aG0uUkVNT1ZFRCk6KEc9dGhpcy5fbW92ZVZpZXcoTSxJLGEsaCh2KSkscmU9aG0uTU9WRUQpLGYmJmYoe2NvbnRleHQ6Rz8uY29udGV4dCxvcGVyYXRpb246cmUscmVjb3JkOnZ9KX0pfWRldGFjaCgpe2Zvcihjb25zdCBsIG9mIHRoaXMuX3ZpZXdDYWNoZSlsLmRlc3Ryb3koKTt0'@;
put 'aGlzLl92aWV3Q2FjaGU9W119X2luc2VydFZpZXcobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGEsZCk7aWYoZilyZXR1cm4gdm9pZChmLmNvbnRleHQuJGltcGxpY2l0PWgpO2NvbnN0IHY9bCgpO3JldHVybiBkLmNyZWF0ZUVtYmVkZGVkVmlldyh2LnRlbXBs'@;
put 'YXRlUmVmLHYuY29udGV4dCx2LmluZGV4KX1fZGV0YWNoQW5kQ2FjaGVWaWV3KGwsYSl7Y29uc3QgZD1hLmRldGFjaChsKTt0aGlzLl9tYXliZUNhY2hlVmlldyhkLGEpfV9tb3ZlVmlldyhsLGEsZCxoKXtjb25zdCBmPWQuZ2V0KGwpO3JldHVybiBkLm1vdmUoZixhKSxmLmNvbnRleHQuJGlt'@;
put 'cGxpY2l0PWgsZn1fbWF5YmVDYWNoZVZpZXcobCxhKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaChsKTtlbHNle2NvbnN0IGQ9YS5pbmRleE9mKGwpOy0xPT09ZD9sLmRlc3Ryb3koKTphLnJlbW92ZShkKX19X2luc2Vy'@;
put 'dFZpZXdGcm9tQ2FjaGUobCxhKXtjb25zdCBkPXRoaXMuX3ZpZXdDYWNoZS5wb3AoKTtyZXR1cm4gZCYmYS5pbnNlcnQoZCxsKSxkfHxudWxsfX1jb25zdCBWRmU9WyJjb250ZW50V3JhcHBlciJdLEJGZT1bIioiXSx0MWU9bmV3IFN0KCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpO2NsYXNz'@;
put 'IGpGZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgR24sdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShmdW5jdGlvbiBmWShjLGw9Y24pe3JldHVybiBjPWM/P2ZQZSxOaSgoYSxkKT0+e2xldCBo'@;
put 'LGY9ITA7YS5zdWJzY3JpYmUoSGkoZCx2PT57Y29uc3QgTT1sKHYpOyhmfHwhYyhoLE0pKSYmKGY9ITEsaD1NLGQubmV4dCh2KSl9KSl9KX0oKSksdGhpcy5fdmlld3BvcnQ9bnVsbCx0aGlzLl9pdGVtU2l6ZT1sLHRoaXMuX21pbkJ1ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZH1hdHRh'@;
put 'Y2gobCl7dGhpcy5fdmlld3BvcnQ9bCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfWRldGFjaCgpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydD1udWxsfXVwZGF0ZUl0ZW1BbmRCdWZm'@;
put 'ZXJTaXplKGwsYSxkKXt0aGlzLl9pdGVtU2l6ZT1sLHRoaXMuX21pbkJ1ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFNjcm9sbGVkKCl7dGhpcy5fdXBkYXRlUmVu'@;
put 'ZGVyZWRSYW5nZSgpfW9uRGF0YUxlbmd0aENoYW5nZWQoKXt0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFJlbmRlcmVkKCl7fW9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl7fXNjcm9sbFRvSW5kZXgobCxhKXt0aGlz'@;
put 'Ll92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2Nyb2xsVG9PZmZzZXQobCp0aGlzLl9pdGVtU2l6ZSxhKX1fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5n'@;
put 'dGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2NvbnN0IGw9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGE9e3N0YXJ0Omwuc3RhcnQsZW5kOmwuZW5kfSxkPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdw'@;
put 'b3J0U2l6ZSgpLGg9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpO2xldCBmPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSx2PXRoaXMuX2l0ZW1TaXplPjA/Zi90aGlzLl9pdGVtU2l6ZTowO2lmKGEuZW5kPmgpe2NvbnN0IEk9TWF0aC5jZWlsKGQvdGhpcy5faXRl'@;
put 'bVNpemUpLEc9TWF0aC5tYXgoMCxNYXRoLm1pbih2LGgtSSkpO3YhPUcmJih2PUcsZj1HKnRoaXMuX2l0ZW1TaXplLGEuc3RhcnQ9TWF0aC5mbG9vcih2KSksYS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihoLGEuc3RhcnQrSSkpfWNvbnN0IE09Zi1hLnN0YXJ0KnRoaXMuX2l0ZW1TaXplO2lm'@;
put 'KE08dGhpcy5fbWluQnVmZmVyUHgmJjAhPWEuc3RhcnQpe2NvbnN0IEk9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1NKS90aGlzLl9pdGVtU2l6ZSk7YS5zdGFydD1NYXRoLm1heCgwLGEuc3RhcnQtSSksYS5lbmQ9TWF0aC5taW4oaCxNYXRoLmNlaWwodisoZCt0aGlzLl9taW5CdWZm'@;
put 'ZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2NvbnN0IEk9YS5lbmQqdGhpcy5faXRlbVNpemUtKGYrZCk7aWYoSTx0aGlzLl9taW5CdWZmZXJQeCYmYS5lbmQhPWgpe2NvbnN0IEc9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1JKS90aGlzLl9pdGVtU2l6ZSk7Rz4wJiYoYS5lbmQ9'@;
put 'TWF0aC5taW4oaCxhLmVuZCtHKSxhLnN0YXJ0PU1hdGgubWF4KDAsTWF0aC5mbG9vcih2LXRoaXMuX21pbkJ1ZmZlclB4L3RoaXMuX2l0ZW1TaXplKSkpfX10aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZFJhbmdlKGEpLHRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0'@;
put 'aGlzLl9pdGVtU2l6ZSphLnN0YXJ0KSx0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLm5leHQoTWF0aC5mbG9vcih2KSl9fWxldCB4Yj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9wbGF0Zm9ybT1kLHRoaXMuX3Njcm9sbGVkPW5ldyBHbix0'@;
put 'aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9aH1yZWdpc3RlcihhKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGEpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0'@;
put 'KGEsYS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoYSkpKX1kZXJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5zY3JvbGxDb250YWluZXJzLmdldChhKTtkJiYoZC51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5kZWxldGUoYSkp'@;
put 'fXNjcm9sbGVkKGE9MjApe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/bmV3IFF0KGQ9Pnt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb258fHRoaXMuX2FkZEdsb2JhbExpc3RlbmVyKCk7Y29uc3QgaD1hPjA/dGhpcy5fc2Nyb2xsZWQucGlwZShTWShhKSkuc3Vic2NyaWJlKGQpOnRo'@;
put 'aXMuX3Njcm9sbGVkLnN1YnNjcmliZShkKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aC51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOmRzKCl9bmdPbkRlc3Ry'@;
put 'b3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChhLGQpPT50aGlzLmRlcmVnaXN0ZXIoZCkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRBbmNlc3RvclNj'@;
put 'cm9sbENvbnRhaW5lcnMoYSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZCkucGlwZShXbChmPT4hZnx8aC5pbmRleE9mKGYpPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpe2NvbnN0IGQ9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChoLGYpPT57dGhp'@;
put 'cy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChmLGEpJiZkLnB1c2goZil9KSxkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGQpe2xldCBoPUVkKGQpLGY9YS5nZXRFbGVtZW50UmVm'@;
put 'KCkubmF0aXZlRWxlbWVudDtkb3tpZihoPT1mKXJldHVybiEwfXdoaWxlKGg9aC5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX1fYWRkR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT54ZCh0aGlzLl9nZXRX'@;
put 'aW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9i'@;
put 'YWxTdWJzY3JpcHRpb249bnVsbCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoQ3IoR2EpLENyKFR4KSxDcihtbyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJy'@;
put 'b290In0pfX1yZXR1cm4gY30pKCksbjFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5zY3JvbGxEaXNwYXRjaGVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLmRpcj1mLHRoaXMuX2Rlc3Ryb3llZD1uZXcgR24sdGhpcy5fZWxlbWVudFNj'@;
put 'cm9sbGVkPW5ldyBRdCh2PT50aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInNjcm9sbCIpLnBpcGUoSDAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHYpKSl9bmdPbkluaXQoKXt0aGlzLnNjcm9sbERpc3BhdGNo'@;
put 'ZXIucmVnaXN0ZXIodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnNjcm9sbERpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfWVsZW1lbnRTY3JvbGxlZCgpe3JldHVybiB0aGlzLl9lbGVtZW50U2Nyb2xs'@;
put 'ZWR9Z2V0RWxlbWVudFJlZigpe3JldHVybiB0aGlzLmVsZW1lbnRSZWZ9c2Nyb2xsVG8oYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxoPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVsbD09YS5sZWZ0JiYoYS5sZWZ0PWg/YS5lbmQ6YS5zdGFydCks'@;
put 'bnVsbD09YS5yaWdodCYmKGEucmlnaHQ9aD9hLnN0YXJ0OmEuZW5kKSxudWxsIT1hLmJvdHRvbSYmKGEudG9wPWQuc2Nyb2xsSGVpZ2h0LWQuY2xpZW50SGVpZ2h0LWEuYm90dG9tKSxoJiZreCgpIT1DcC5OT1JNQUw/KG51bGwhPWEubGVmdCYmKGEucmlnaHQ9ZC5zY3JvbGxXaWR0aC1kLmNs'@;
put 'aWVudFdpZHRoLWEubGVmdCksa3goKT09Q3AuSU5WRVJURUQ/YS5sZWZ0PWEucmlnaHQ6a3goKT09Q3AuTkVHQVRFRCYmKGEubGVmdD1hLnJpZ2h0Py1hLnJpZ2h0OmEucmlnaHQpKTpudWxsIT1hLnJpZ2h0JiYoYS5sZWZ0PWQuc2Nyb2xsV2lkdGgtZC5jbGllbnRXaWR0aC1hLnJpZ2h0KSx0'@;
put 'aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyhhKX1fYXBwbHlTY3JvbGxUb09wdGlvbnMoYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDshZnVuY3Rpb24gSVBlKCl7aWYobnVsbD09dTcpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1'@;
put 'bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiB1Nz0hMSx1NztpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKXU3PSEwO2Vsc2V7Y29uc3QgYz1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbzt1Nz0hIWMmJiEvXHtccypc'@;
put 'W25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChjLnRvU3RyaW5nKCkpfX1yZXR1cm4gdTd9KCk/KG51bGwhPWEudG9wJiYoZC5zY3JvbGxUb3A9YS50b3ApLG51bGwhPWEubGVmdCYmKGQuc2Nyb2xsTGVmdD1hLmxlZnQpKTpkLnNjcm9sbFRvKGEpfW1lYXN1cmVTY3JvbGxPZmZzZXQoYSl7Y29u'@;
put 'c3QgZD0ibGVmdCIsaD0icmlnaHQiLGY9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PWEpcmV0dXJuIGYuc2Nyb2xsVG9wO2lmKCJib3R0b20iPT1hKXJldHVybiBmLnNjcm9sbEhlaWdodC1mLmNsaWVudEhlaWdodC1mLnNjcm9sbFRvcDtjb25zdCB2PXRoaXMuZGly'@;
put 'JiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09YT9hPXY/aDpkOiJlbmQiPT1hJiYoYT12P2Q6aCksdiYma3goKT09Q3AuSU5WRVJURUQ/YT09ZD9mLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGgtZi5zY3JvbGxMZWZ0OmYuc2Nyb2xsTGVmdDp2JiZreCgpPT1DcC5ORUdB'@;
put 'VEVEP2E9PWQ/Zi5zY3JvbGxMZWZ0K2Yuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aDotZi5zY3JvbGxMZWZ0OmE9PWQ/Zi5zY3JvbGxMZWZ0OmYuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aC1mLnNjcm9sbExlZnR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu'@;
put 'ZXcoZHx8YykoJGUoUWkpLCRlKHhiKSwkZShHYSksJGUoZG0sOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrLXNjcm9sbGFibGUiLCIiXSxbIiIsImNka1Njcm9sbGFibGUiLCIiXV0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCks'@;
put 'Ukw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcGxhdGZvcm09YSx0aGlzLl9jaGFuZ2U9bmV3IEduLHRoaXMuX2NoYW5nZUxpc3RlbmVyPWY9Pnt0aGlzLl9jaGFuZ2UubmV4dChmKX0sdGhpcy5fZG9jdW1lbnQ9aCxkLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYo'@;
put 'YS5pc0Jyb3dzZXIpe2NvbnN0IGY9dGhpcy5fZ2V0V2luZG93KCk7Zi5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxmLmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5jaGFuZ2UoKS5z'@;
put 'dWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKX0pfW5nT25EZXN0cm95KCl7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksYS5y'@;
put 'ZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdldFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7Y29uc3QgYT17d2lkdGg6'@;
put 'dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGF9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3QgYT10aGlzLmdldFZpZXdwb3J0U2Ny'@;
put 'b2xsUG9zaXRpb24oKSx7d2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLnRvcCtoLHJpZ2h0OmEubGVmdCtkLGhlaWdodDpoLHdpZHRoOmR9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtpZigh'@;
put 'dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2NvbnN0IGE9dGhpcy5fZG9jdW1lbnQsZD10aGlzLl9nZXRXaW5kb3coKSxoPWEuZG9jdW1lbnRFbGVtZW50LGY9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOi1mLnRvcHx8YS5ib2R5LnNj'@;
put 'cm9sbFRvcHx8ZC5zY3JvbGxZfHxoLnNjcm9sbFRvcHx8MCxsZWZ0Oi1mLmxlZnR8fGEuYm9keS5zY3JvbGxMZWZ0fHxkLnNjcm9sbFh8fGguc2Nyb2xsTGVmdHx8MH19Y2hhbmdlKGE9MjApe3JldHVybiBhPjA/dGhpcy5fY2hhbmdlLnBpcGUoU1koYSkpOnRoaXMuX2NoYW5nZX1fZ2V0V2lu'@;
put 'ZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3VwZGF0ZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6YS5pbm5lcldpZHRoLGhlaWdo'@;
put 'dDphLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoQ3IoVHgpLENyKEdhKSxDcihtbyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh'@;
put 'Yyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcjFlPW5ldyBTdCgiVklSVFVBTF9TQ1JPTExBQkxFIik7bGV0IGkxZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbjFle2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpfW1lYXN1cmVWaWV3cG9ydFNpemUo'@;
put 'YSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT1hP2QuY2xpZW50V2lkdGg6ZC5jbGllbnRIZWlnaHR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoUWkpLCRlKHhiKSwkZShHYSks'@;
put 'JGUoZG0sOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbQ2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBXRmU9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/cTBlOkFGZTtsZXQgRWI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGkxZXtnZXQgb3Jp'@;
put 'ZW50YXRpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb259c2V0IG9yaWVudGF0aW9uKGEpe3RoaXMuX29yaWVudGF0aW9uIT09YSYmKHRoaXMuX29yaWVudGF0aW9uPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpKX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcpe3N1cGVyKGEs'@;
put 'TSxoLHYpLHRoaXMuZWxlbWVudFJlZj1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWQsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9Zix0aGlzLnNjcm9sbGFibGU9Ryx0aGlzLl9wbGF0Zm9ybT1oaShUeCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBHbix0aGlzLl9yZW5kZXJlZFJhbmdlU3Vi'@;
put 'amVjdD1uZXcgR24sdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLmFwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBRdChyZT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUodWU9PlByb21pc2UucmVzb2x2'@;
put 'ZSgpLnRoZW4oKCk9PnRoaXMubmdab25lLnJ1bigoKT0+cmUubmV4dCh1ZSkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90YWxD'@;
put 'b250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEs'@;
put 'dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1KdC5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9SS5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRT'@;
put 'aXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfW5nT25Jbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5zY3Jv'@;
put 'bGxhYmxlPT09dGhpcyYmc3VwZXIubmdPbkluaXQoKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5zY3Jv'@;
put 'bGxhYmxlLmVsZW1lbnRTY3JvbGxlZCgpLnBpcGUoVDIobnVsbCksU1koMCxXRmUpLEgwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50U2Nyb2xsZWQoKSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpfSkpKX1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKSxz'@;
put 'dXBlci5uZ09uRGVzdHJveSgpfWF0dGFjaChhKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Zvck9mPWEsdGhpcy5fZm9yT2YuZGF0YVN0cmVhbS5waXBlKEgwKHRoaXMuX2RldGFjaGVkU3ViamVjdCkpLnN1YnNjcmliZShkPT57Y29uc3QgaD1kLmxlbmd0aDto'@;
put 'IT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9aCx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5l'@;
put 'eHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhT'@;
put 'Y3JvbGxPZmZzZXQoYSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbYV19c2V0VG90YWxDb250ZW50U2l6ZShhKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09YSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9YSx0aGlz'@;
put 'Ll9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGEpeyhmdW5jdGlvbiBaRmUoYyxsKXtyZXR1cm4gYy5zdGFydD09bC5zdGFydCYmYy5lbmQ9PWwuZW5kfSkodGhpcy5fcmVuZGVyZWRSYW5nZSxhKXx8KHRo'@;
put 'aXMuYXBwZW5kT25seSYmKGE9e3N0YXJ0OjAsZW5kOk1hdGgubWF4KHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kLGEuZW5kKX0pLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0Lm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZT1hKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT50'@;
put 'aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRSZW5kZXJlZCgpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVuZGVy'@;
put 'ZWRDb250ZW50T2Zmc2V0KGEsZD0idG8tc3RhcnQiKXthPXRoaXMuYXBwZW5kT25seSYmInRvLXN0YXJ0Ij09PWQ/MDphO2NvbnN0IGY9Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHY9Zj8iWCI6IlkiO2xldCBJPWB0cmFuc2xhdGUke3Z9KCR7TnVtYmVyKChmJiZ0aGlzLmRpciYm'@;
put 'InJ0bCI9PXRoaXMuZGlyLnZhbHVlPy0xOjEpKmEpfXB4KWA7dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PWEsInRvLWVuZCI9PT1kJiYoSSs9YCB0cmFuc2xhdGUke3Z9KC0xMDAlKWAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSEwKSx0aGlzLl9yZW5kZXJl'@;
put 'ZENvbnRlbnRUcmFuc2Zvcm0hPUkmJih0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm09SSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT57dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPyh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQtPXRo'@;
put 'aXMubWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KSk6dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5kZXJl'@;
put 'ZE9mZnNldENoYW5nZWQoKX0pKX1zY3JvbGxUb09mZnNldChhLGQ9ImF1dG8iKXtjb25zdCBoPXtiZWhhdmlvcjpkfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2guc3RhcnQ9YTpoLnRvcD1hLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhoKX1zY3JvbGxUb0luZGV4KGEsZD0i'@;
put 'YXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoYSxkKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEpe2xldCBkO3JldHVybiBkPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9oPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KGgpOmg9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJl'@;
put 'U2Nyb2xsT2Zmc2V0KGgpLE1hdGgubWF4KDAsZChhPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGEpe2xldCBkO2NvbnN0IGg9ImxlZnQiLGY9InJpZ2h0'@;
put 'Iix2PSJydGwiPT10aGlzLmRpcj8udmFsdWU7ZD0ic3RhcnQiPT1hP3Y/ZjpoOiJlbmQiPT1hP3Y/aDpmOmF8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7Y29uc3QgTT10aGlzLnNjcm9sbGFibGUubWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhT'@;
put 'Y3JvbGxPZmZzZXQoZCk7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RdLU19bWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKXtjb25zdCBhPXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6'@;
put 'b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUoYSl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUoYSx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXplKCl7'@;
put 'dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLnNjcm9sbGFibGUubWVhc3VyZVZpZXdwb3J0U2l6ZSh0aGlzLm9yaWVudGF0aW9u'@;
put 'KX1fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZChhKXthJiZ0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKGEpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5n'@;
put 'dWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSkpfV9kb0NoYW5nZURldGVjdGlvbigpe3RoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxlLnRy'@;
put 'YW5zZm9ybT10aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0sdGhpcy5uZ1pvbmUucnVuKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7Y29uc3QgYT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlv'@;
put 'bj1bXTtmb3IoY29uc3QgZCBvZiBhKWQoKX1fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpe3RoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyIiOmAke3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSJo'@;
put 'b3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGA6IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoUWkpLCRlKHhvKSwkZShHYSksJGUodDFlLDgpLCRlKGRtLDgpLCRlKHhiKSwkZShS'@;
put 'TCksJGUocjFlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJkZhKFZGZSw3KSwyJmQpe2xldCBmO3lpKGY9YmkoKSkmJihoLl9jb250'@;
put 'ZW50V3JhcHBlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsImhvcml6b250'@;
put 'YWwiPT09aC5vcmllbnRhdGlvbikoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsImhvcml6b250YWwiIT09aC5vcmllbnRhdGlvbil9LGlucHV0czp7b3JpZW50YXRpb246Im9yaWVudGF0aW9uIixhcHBlbmRPbmx5OltWbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5z'@;
put 'Zm9ybSwiYXBwZW5kT25seSIsImFwcGVuZE9ubHkiLHMxXX0sb3V0cHV0czp7c2Nyb2xsZWRJbmRleENoYW5nZToic2Nyb2xsZWRJbmRleENoYW5nZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3VhKFt7cHJvdmlkZTpuMWUsdXNlRmFjdG9yeTooYSxkKT0+YXx8ZCxkZXBzOltbbmV3IFIx'@;
put 'LG5ldyBzNShyMWUpXSxjXX1dKSx6bCxDYSxRSV0sbmdDb250ZW50U2VsZWN0b3JzOkJGZSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1siY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtc3Bh'@;
put 'Y2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoc2EoKSxkZSgwLCJkaXYiLDEsMCksV3IoMiksaGUoKSxXdCgzLCJkaXYiLDIpKSwyJmQmJihmZSgzKSxOMSgid2lkdGgiLGguX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixoLl90b3RhbENvbnRlbnRIZWlnaHQpKX0sc3R5'@;
put 'bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpz'@;
put 'dHJpY3Q7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBw'@;
put 'ZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12'@;
put 'aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmly'@;
put 'dHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250'@;
put 'ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNj'@;
put 'cm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2Rr'@;
put 'VmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1'@;
put 'YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9w'@;
put 'OjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7Zmxl'@;
put 'eDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBhMWUoYyxsLGEpe2lmKCFhLmdldEJvdW5kaW5nQ2xp'@;
put 'ZW50UmVjdClyZXR1cm4gMDtjb25zdCBoPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09Yz8ic3RhcnQiPT09bD9oLmxlZnQ6aC5yaWdodDoic3RhcnQiPT09bD9oLnRvcDpoLmJvdHRvbX1sZXQgTEw9KCgpPT57Y2xhc3MgY3tnZXQgY2RrVmlydHVhbEZv'@;
put 'ck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGEpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj1hLGZ1bmN0aW9uIEhGZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMuY29ubmVjdCYmIShjIGluc3RhbmNlb2YgS1opfShhKT90aGlz'@;
put 'Ll9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KGEpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IE5GZShXTShhKT9hOkFycmF5LmZyb20oYXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0'@;
put 'dWFsRm9yVHJhY2tCeShhKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hPyhkLGgpPT5hKGQrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxoKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShh'@;
put 'KXthJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9YSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMu'@;
put 'X3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPWQ3KGEpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5fdGVtcGxhdGU9ZCx0aGlzLl9kaWZmZXJzPWgsdGhpcy5fdmlld1JlcGVhdGVyPWYsdGhpcy5fdmlld3BvcnQ9dix0aGlzLnZpZXdD'@;
put 'aGFuZ2U9bmV3IEduLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzPW5ldyBHbix0aGlzLmRhdGFTdHJlYW09dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMucGlwZShUMihudWxsKSxmdW5jdGlvbiBJRmUoKXtyZXR1cm4gTmkoKGMsbCk9PntsZXQgYSxkPSExO2Muc3Vic2NyaWJlKEhpKGwsaD0+e2Nv'@;
put 'bnN0IGY9YTthPWgsZCYmbC5uZXh0KFtmLGhdKSxkPSEwfSkpfSl9KCksajEoKFtJLEddKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShJLEcpKSxqMGUoMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgR24sdGhpcy5kYXRhU3Ry'@;
put 'ZWFtLnN1YnNjcmliZShJPT57dGhpcy5fZGF0YT1JLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnBpcGUoSDAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKEk9Pnt0aGlzLl9yZW5kZXJlZFJhbmdlPUksdGhpcy52'@;
put 'aWV3Q2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJk0ucnVuKCgpPT50aGlzLnZpZXdDaGFuZ2UubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LmF0dGFjaCh0aGlzKX1tZWFzdXJlUmFuZ2VTaXplKGEsZCl7aWYo'@;
put 'YS5zdGFydD49YS5lbmQpcmV0dXJuIDA7Y29uc3QgaD1hLnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsZj1hLmVuZC1hLnN0YXJ0O2xldCB2LE07Zm9yKGxldCBJPTA7STxmO0krKyl7Y29uc3QgRz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChJK2gpO2lmKEcmJkcucm9vdE5v'@;
put 'ZGVzLmxlbmd0aCl7dj1NPUcucm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IEk9Zi0xO0k+LTE7SS0tKXtjb25zdCBHPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KEkraCk7aWYoRyYmRy5yb290Tm9kZXMubGVuZ3RoKXtNPUcucm9vdE5vZGVzW0cucm9vdE5vZGVzLmxlbmd0aC0xXTti'@;
put 'cmVha319cmV0dXJuIHYmJk0/YTFlKGQsImVuZCIsTSktYTFlKGQsInN0YXJ0Iix2KTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7YT90aGlzLl9hcHBseUNoYW5n'@;
put 'ZXMoYSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMu'@;
put 'dmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpe3RoaXMuX3JlbmRlcmVkUmFuZ2UmJih0aGlzLl9yZW5kZXJlZEl0ZW1z'@;
put 'PXRoaXMuX2RhdGEuc2xpY2UodGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCx0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCksdGhpcy5fZGlmZmVyfHwodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLl9yZW5kZXJlZEl0ZW1zKS5jcmVhdGUoKGEsZCk9PnRoaXMuY2RrVmlydHVh'@;
put 'bEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeShhLGQpOmQpKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCl9X2NoYW5nZURhdGFTb3VyY2UoYSxkKXtyZXR1cm4gYSYmYS5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX25lZWRzVXBkYXRlPSEwLGQ/ZC5jb25uZWN0KHRoaXMpOmRzKCl9'@;
put 'X3VwZGF0ZUNvbnRleHQoKXtjb25zdCBhPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBkPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ZC0tOyl7Y29uc3QgaD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChkKTtoLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5z'@;
put 'dGFydCtkLGguY29udGV4dC5jb3VudD1hLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoaC5jb250ZXh0KSxoLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhhKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGEsdGhpcy5fdmlld0NvbnRhaW5lclJl'@;
put 'ZiwoZix2LE0pPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKGYsTSksZj0+Zi5pdGVtKSxhLmZvckVhY2hJZGVudGl0eUNoYW5nZShmPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoZi5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PWYuaXRlbX0pO2NvbnN0IGQ9dGhpcy5f'@;
put 'ZGF0YS5sZW5ndGg7bGV0IGg9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtoLS07KXtjb25zdCBmPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGgpO2YuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2gsZi5jb250ZXh0LmNvdW50PWQsdGhpcy5f'@;
put 'dXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhmLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhhKXthLmZpcnN0PTA9PT1hLmluZGV4LGEubGFzdD1hLmluZGV4PT09YS5jb3VudC0xLGEuZXZlbj1hLmluZGV4JTI9PTAsYS5vZGQ9IWEuZXZlbn1fZ2V0'@;
put 'RW1iZWRkZWRWaWV3QXJncyhhLGQpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6YS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZl'@;
put 'bjohMX0saW5kZXg6ZH19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoVHMpLCRlKHdsKSwkZShxNSksJGUoTVkpLCRlKEViLDQpLCRlKEdhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtW'@;
put 'aXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxh'@;
put 'dGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdWEoW3twcm92aWRlOk1ZLHVzZUNsYXNzOmUxZX1dKV19KX19cmV0dXJuIGN9KSgpLFlGZT0oKCk9PntjbGFzcyBje3N0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB4WShjLGwsYSl7Zm9yKGxldCBkIGluIGwpaWYobC5o'@;
put 'YXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO2g/Yy5zZXRQcm9wZXJ0eShkLGgsYT8uaGFzKGQpPyJpbXBvcnRhbnQiOiIiKTpjLnJlbW92ZVByb3BlcnR5KGQpfXJldHVybiBjfWZ1bmN0aW9uIFRiKGMsbCl7Y29uc3QgYT1sPyIiOiJub25lIjt4WShjLnN0eWxlLHsidG91Y2gtYWN0'@;
put 'aW9uIjpsPyIiOiJub25lIiwiLXdlYmtpdC11c2VyLWRyYWciOmw/IiI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOmw/IiI6InRyYW5zcGFyZW50IiwidXNlci1zZWxlY3QiOmEsIi1tcy11c2VyLXNlbGVjdCI6YSwiLXdlYmtpdC11c2VyLXNlbGVjdCI6YSwiLW1vei11'@;
put 'c2VyLXNlbGVjdCI6YX0pfWZ1bmN0aW9uIHMxZShjLGwsYSl7eFkoYy5zdHlsZSx7cG9zaXRpb246bD8iIjoiZml4ZWQiLHRvcDpsPyIiOiIwIixvcGFjaXR5Omw/IiI6IjAiLGxlZnQ6bD8iIjoiLTk5OWVtIn0sYSl9ZnVuY3Rpb24gT0woYyxsKXtyZXR1cm4gbCYmIm5vbmUiIT1sP2MrIiAi'@;
put 'K2w6Y31mdW5jdGlvbiBvMWUoYyxsKXtjLnN0eWxlLndpZHRoPWAke2wud2lkdGh9cHhgLGMuc3R5bGUuaGVpZ2h0PWAke2wuaGVpZ2h0fXB4YCxjLnN0eWxlLnRyYW5zZm9ybT1QTChsLmxlZnQsbC50b3ApfWZ1bmN0aW9uIFBMKGMsbCl7cmV0dXJuYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3Vu'@;
put 'ZChjKX1weCwgJHtNYXRoLnJvdW5kKGwpfXB4LCAwKWB9ZnVuY3Rpb24gRVkoYyl7Y29uc3QgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6bC50b3AscmlnaHQ6bC5yaWdodCxib3R0b206bC5ib3R0b20sbGVmdDpsLmxlZnQsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5o'@;
put 'ZWlnaHQseDpsLngseTpsLnl9fWZ1bmN0aW9uIFRZKGMsbCxhKXtjb25zdHt0b3A6ZCxib3R0b206aCxsZWZ0OmYscmlnaHQ6dn09YztyZXR1cm4gYT49ZCYmYTw9aCYmbD49ZiYmbDw9dn1mdW5jdGlvbiBJeChjLGwsYSl7Yy50b3ArPWwsYy5ib3R0b209Yy50b3ArYy5oZWlnaHQsYy5sZWZ0'@;
put 'Kz1hLGMucmlnaHQ9Yy5sZWZ0K2Mud2lkdGh9ZnVuY3Rpb24gbDFlKGMsbCxhLGQpe2NvbnN0e3RvcDpoLHJpZ2h0OmYsYm90dG9tOnYsbGVmdDpNLHdpZHRoOkksaGVpZ2h0Okd9PWMscmU9SSpsLHVlPUcqbDtyZXR1cm4gZD5oLXVlJiZkPHYrdWUmJmE+TS1yZSYmYTxmK3JlfWNsYXNzIGMx'@;
put 'ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMucG9zaXRpb25zPW5ldyBNYXB9Y2xlYXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGwpe3RoaXMuY2xlYXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQodGhpcy5fZG9jdW1lbnQse3Njcm9sbFBvc2l0aW9uOnRoaXMu'@;
put 'Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksbC5mb3JFYWNoKGE9Pnt0aGlzLnBvc2l0aW9ucy5zZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEuc2Nyb2xsTGVmdH0sY2xpZW50UmVjdDpFWShhKX0pfSl9aGFuZGxlU2Nyb2xsKGwpe2NvbnN0IGE9a0wo'@;
put 'bCksZD10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnNjcm9sbFBvc2l0aW9uO2xldCBmLHY7aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25zdCBHPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO2Y9Ry50b3Asdj1HLmxlZnR9ZWxzZSBm'@;
put 'PWEuc2Nyb2xsVG9wLHY9YS5zY3JvbGxMZWZ0O2NvbnN0IE09aC50b3AtZixJPWgubGVmdC12O3JldHVybiB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChHLHJlKT0+e0cuY2xpZW50UmVjdCYmYSE9PXJlJiZhLmNvbnRhaW5zKHJlKSYmSXgoRy5jbGllbnRSZWN0LE0sSSl9KSxoLnRvcD1mLGgu'@;
put 'bGVmdD12LHt0b3A6TSxsZWZ0Okl9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm57dG9wOndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1mdW5jdGlvbiB1MWUoYyl7Y29uc3QgbD1jLmNsb25lTm9kZSghMCksYT1sLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0i'@;
put 'KSxkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtsLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKylhW2hdLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09PWQ/ZjFlKGMsbCk6KCJpbnB1dCI9PT1kfHwic2VsZWN0Ij09PWR8fCJ0'@;
put 'ZXh0YXJlYSI9PT1kKSYmaDFlKGMsbCksZDFlKCJjYW52YXMiLGMsbCxmMWUpLGQxZSgiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QiLGMsbCxoMWUpLGx9ZnVuY3Rpb24gZDFlKGMsbCxhLGQpe2NvbnN0IGg9bC5xdWVyeVNlbGVjdG9yQWxsKGMpO2lmKGgubGVuZ3RoKXtjb25zdCBmPWEucXVl'@;
put 'cnlTZWxlY3RvckFsbChjKTtmb3IobGV0IHY9MDt2PGgubGVuZ3RoO3YrKylkKGhbdl0sZlt2XSl9fWxldCAkRmU9MDtmdW5jdGlvbiBoMWUoYyxsKXsiZmlsZSIhPT1sLnR5cGUmJihsLnZhbHVlPWMudmFsdWUpLCJyYWRpbyI9PT1sLnR5cGUmJmwubmFtZSYmKGwubmFtZT1gbWF0LWNsb25l'@;
put 'LSR7bC5uYW1lfS0keyRGZSsrfWApfWZ1bmN0aW9uIGYxZShjLGwpe2NvbnN0IGE9bC5nZXRDb250ZXh0KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGMsMCwwKX1jYXRjaHt9fWZ1bmN0aW9uIHAxZShjLGwpe2NvbnN0IGE9Yy5yb290Tm9kZXM7aWYoMT09PWEubGVuZ3RoJiZhWzBdLm5v'@;
put 'ZGVUeXBlPT09bC5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07Y29uc3QgZD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goaD0+ZC5hcHBlbmRDaGlsZChoKSksZH1mdW5jdGlvbiBnMWUoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXMiKT4tMT8x'@;
put 'OjFlMztyZXR1cm4gcGFyc2VGbG9hdChjKSpsfWZ1bmN0aW9uIEFZKGMsbCl7cmV0dXJuIGMuZ2V0UHJvcGVydHlWYWx1ZShsKS5zcGxpdCgiLCIpLm1hcChkPT5kLnRyaW0oKSl9Y29uc3QgWEZlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBxRmV7Y29uc3RydWN0b3IobCxhLGQsaCxm'@;
put 'LHYsTSxJLEcpe3RoaXMuX2RvY3VtZW50PWwsdGhpcy5fcm9vdEVsZW1lbnQ9YSx0aGlzLl9kaXJlY3Rpb249ZCx0aGlzLl9pbml0aWFsRG9tUmVjdD1oLHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1mLHRoaXMuX3ByZXZpZXdDbGFzcz12LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPU0sdGhp'@;
put 'cy5faW5pdGlhbFRyYW5zZm9ybT1JLHRoaXMuX3pJbmRleD1HfWF0dGFjaChsKXt0aGlzLl9wcmV2aWV3PXRoaXMuX2NyZWF0ZVByZXZpZXcoKSxsLmFwcGVuZENoaWxkKHRoaXMuX3ByZXZpZXcpLCJzaG93UG9wb3ZlciJpbiB0aGlzLl9wcmV2aWV3JiZ0aGlzLl9wcmV2aWV3LnNob3dQb3Bv'@;
put 'dmVyKCl9ZGVzdHJveSgpe3RoaXMuX3ByZXZpZXcucmVtb3ZlKCksdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9dGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz1udWxsfXNldFRyYW5zZm9ybShsKXt0aGlzLl9wcmV2aWV3LnN0eWxlLnRyYW5zZm9y'@;
put 'bT1sfWdldEJvdW5kaW5nQ2xpZW50UmVjdCgpe3JldHVybiB0aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWFkZENsYXNzKGwpe3RoaXMuX3ByZXZpZXcuY2xhc3NMaXN0LmFkZChsKX1nZXRUcmFuc2l0aW9uRHVyYXRpb24oKXtyZXR1cm4gZnVuY3Rpb24gS0ZlKGMpe2Nv'@;
put 'bnN0IGw9Z2V0Q29tcHV0ZWRTdHlsZShjKSxhPUFZKGwsInRyYW5zaXRpb24tcHJvcGVydHkiKSxkPWEuZmluZChNPT4idHJhbnNmb3JtIj09PU18fCJhbGwiPT09TSk7aWYoIWQpcmV0dXJuIDA7Y29uc3QgaD1hLmluZGV4T2YoZCksZj1BWShsLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksdj1B'@;
put 'WShsLCJ0cmFuc2l0aW9uLWRlbGF5Iik7cmV0dXJuIGcxZShmW2hdKStnMWUodltoXSl9KHRoaXMuX3ByZXZpZXcpfWFkZEV2ZW50TGlzdGVuZXIobCxhKXt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIobCxhKX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSl7dGhpcy5fcHJldmlldy5y'@;
put 'ZW1vdmVFdmVudExpc3RlbmVyKGwsYSl9X2NyZWF0ZVByZXZpZXcoKXtjb25zdCBsPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSxhPXRoaXMuX3ByZXZpZXdDbGFzcyxkPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBoO2lmKGQmJmwpe2NvbnN0IGY9bC5tYXRjaFNpemU/dGhpcy5faW5pdGlhbERvbVJl'@;
put 'Y3Q6bnVsbCx2PWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZCxsLmNvbnRleHQpO3YuZGV0ZWN0Q2hhbmdlcygpLGg9cDFlKHYsdGhpcy5fZG9jdW1lbnQpLHRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc9dixsLm1hdGNoU2l6ZT9vMWUoaCxmKTpoLnN0eWxlLnRyYW5zZm9y'@;
put 'bT1QTCh0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpfWVsc2UgaD11MWUodGhpcy5fcm9vdEVsZW1lbnQpLG8xZShoLHRoaXMuX2luaXRpYWxEb21SZWN0KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYoaC5zdHlsZS50cmFuc2Zvcm09'@;
put 'dGhpcy5faW5pdGlhbFRyYW5zZm9ybSk7cmV0dXJuIHhZKGguc3R5bGUseyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLG1hcmdpbjoiMCIscG9zaXRpb246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4Ijp0aGlzLl96SW5kZXgrIiJ9LFhGZSksVGIoaCwhMSksaC5jbGFzc0xpc3Qu'@;
put 'YWRkKCJjZGstZHJhZy1wcmV2aWV3IiksaC5zZXRBdHRyaWJ1dGUoInBvcG92ZXIiLCJtYW51YWwiKSxoLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLl9kaXJlY3Rpb24pLGEmJihBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmPT5oLmNsYXNzTGlzdC5hZGQoZikpOmguY2xhc3NMaXN0LmFk'@;
put 'ZChhKSksaH19Y29uc3QgbTFlPU1iKHtwYXNzaXZlOiEwfSksRkw9TWIoe3Bhc3NpdmU6ITF9KSx2MWU9TWIoe3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLHkxZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgUUZle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8ISgh'@;
put 'dGhpcy5fZHJvcENvbnRhaW5lcnx8IXRoaXMuX2Ryb3BDb250YWluZXIuZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXtsIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1sLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzLmZvckVhY2go'@;
put 'YT0+VGIoYSxsKSkpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXt0aGlzLl9jb25maWc9YSx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PXYsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH0s'@;
put 'dGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITEsdGhpcy5fbW92ZUV2ZW50cz1uZXcgR24sdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249SnQuRU1QVFksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPUp0LkVNUFRZLHRoaXMu'@;
put 'X3Njcm9sbFN1YnNjcmlwdGlvbj1KdC5FTVBUWSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249SnQuRU1QVFksdGhpcy5fYm91bmRhcnlFbGVtZW50PW51bGwsdGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD0hMCx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1u'@;
put 'ZXcgU2V0LHRoaXMuX2RpcmVjdGlvbj0ibHRyIix0aGlzLmRyYWdTdGFydERlbGF5PTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBHbix0aGlzLnN0YXJ0ZWQ9bmV3IEduLHRoaXMucmVsZWFzZWQ9bmV3IEduLHRoaXMuZW5kZWQ9bmV3IEduLHRoaXMuZW50ZXJl'@;
put 'ZD1uZXcgR24sdGhpcy5leGl0ZWQ9bmV3IEduLHRoaXMuZHJvcHBlZD1uZXcgR24sdGhpcy5tb3ZlZD10aGlzLl9tb3ZlRXZlbnRzLHRoaXMuX3BvaW50ZXJEb3duPU09PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBJPXRoaXMuX2dl'@;
put 'dFRhcmdldEhhbmRsZShNKTtJJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhJKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoSSxNKX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UodGhpcy5fcm9vdEVsZW1l'@;
put 'bnQsTSl9LHRoaXMuX3BvaW50ZXJNb3ZlPU09Pntjb25zdCBJPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShNKTtpZighdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKXtpZihNYXRoLmFicyhJLngtdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCkrTWF0aC5hYnMoSS55LXRoaXMu'@;
put 'X3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpPj10aGlzLl9jb25maWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCBFZT1EYXRlLm5vdygpPj10aGlzLl9kcmFnU3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KE0pLEJlPXRoaXMuX2Ryb3BDb250YWluZXI7aWYoIUVlKXJldHVybiB2'@;
put 'b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5jZShNKTsoIUJlfHwhQmUuaXNEcmFnZ2luZygpJiYhQmUuaXNSZWNlaXZpbmcoKSkmJihNLmNhbmNlbGFibGUmJk0ucHJldmVudERlZmF1bHQoKSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITAsdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5fc3Rh'@;
put 'cnREcmFnU2VxdWVuY2UoTSkpKX1yZXR1cm59TS5jYW5jZWxhYmxlJiZNLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgRz10aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihJKTtpZih0aGlzLl9oYXNNb3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249SSx0aGlz'@;
put 'Ll91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEoRyksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKEcsSSk7ZWxzZXtjb25zdCByZT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2luaXRpYWxEb21SZWN0OnRoaXMuX3BpY2t1cFBvc2l0'@;
put 'aW9uT25QYWdlLHVlPXRoaXMuX2FjdGl2ZVRyYW5zZm9ybTt1ZS54PUcueC1yZS54K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueCx1ZS55PUcueS1yZS55K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHVlLngsdWUueSl9dGhpcy5fbW92'@;
put 'ZUV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fbW92ZUV2ZW50cy5uZXh0KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246RyxldmVudDpNLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShHKSxkZWx0YTp0aGlzLl9wb2ludGVyRGly'@;
put 'ZWN0aW9uRGVsdGF9KX0pfSx0aGlzLl9wb2ludGVyVXA9TT0+e3RoaXMuX2VuZERyYWdTZXF1ZW5jZShNKX0sdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0PU09PntpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgST10aGlzLl9nZXRUYXJnZXRIYW5kbGUoTSk7SSYmIXRoaXMuX2Rpc2FibGVk'@;
put 'SGFuZGxlcy5oYXMoSSkmJiF0aGlzLmRpc2FibGVkJiZNLnByZXZlbnREZWZhdWx0KCl9ZWxzZSB0aGlzLmRpc2FibGVkfHxNLnByZXZlbnREZWZhdWx0KCl9LHRoaXMud2l0aFJvb3RFbGVtZW50KGwpLndpdGhQYXJlbnQoYS5wYXJlbnREcmFnUmVmfHxudWxsKSx0aGlzLl9wYXJlbnRQb3Np'@;
put 'dGlvbnM9bmV3IGMxZShkKSx2LnJlZ2lzdGVyRHJhZ0l0ZW0odGhpcyl9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50fWdldFZpc2libGVFbGVtZW50KCl7cmV0dXJuIHRoaXMu'@;
put 'aXNEcmFnZ2luZygpP3RoaXMuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6dGhpcy5nZXRSb290RWxlbWVudCgpfXdpdGhIYW5kbGVzKGwpe3RoaXMuX2hhbmRsZXM9bC5tYXAoZD0+RWQoZCkpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChkPT5UYihkLHRoaXMuZGlzYWJsZWQpKSx0aGlzLl90b2dn'@;
put 'bGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT1uZXcgU2V0O3JldHVybiB0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZm9yRWFjaChkPT57dGhpcy5faGFuZGxlcy5pbmRleE9mKGQpPi0xJiZhLmFkZChkKX0pLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1hLHRoaXN9d2l0aFByZXZpZXdU'@;
put 'ZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcHJldmlld1RlbXBsYXRlPWwsdGhpc313aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1sLHRoaXN9d2l0aFJvb3RFbGVtZW50KGwpe2NvbnN0IGE9RWQobCk7cmV0dXJuIGEhPT10aGlzLl9y'@;
put 'b290RWxlbWVudCYmKHRoaXMuX3Jvb3RFbGVtZW50JiZ0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJE'@;
put 'b3duLEZMKSxhLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLG0xZSksYS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxGTCl9KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9yb290RWxl'@;
put 'bWVudD1hKSx0eXBlb2YgU1ZHRWxlbWVudDwidSImJnRoaXMuX3Jvb3RFbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmKHRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9yb290RWxlbWVudC5vd25lclNWR0VsZW1lbnQpLHRoaXN9d2l0aEJvdW5kYXJ5RWxlbWVudChsKXtyZXR1cm4g'@;
put 'dGhpcy5fYm91bmRhcnlFbGVtZW50PWw/RWQobCk6bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDEwKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NvbnRhaW5JbnNp'@;
put 'ZGVCb3VuZGFyeU9uUmVzaXplKCkpKSx0aGlzfXdpdGhQYXJlbnQobCl7cmV0dXJuIHRoaXMuX3BhcmVudERyYWdSZWY9bCx0aGlzfWRpc3Bvc2UoKXt0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMuX3Jv'@;
put 'b3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJlbW92ZSgpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlz'@;
put 'LmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRl'@;
put 'KCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25z'@;
put 'LmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dp'@;
put 'bmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nJiZ0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcyl9cmVzZXQoKXt0aGlzLl9yb290RWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybXx8IiIsdGhpcy5fYWN0aXZlVHJhbnNm'@;
put 'b3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfX1kaXNhYmxlSGFuZGxlKGwpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiZ0aGlzLl9oYW5kbGVzLmluZGV4T2YobCk+LTEmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuYWRkKGwpLFRiKGwsITApKX1l'@;
put 'bmFibGVIYW5kbGUobCl7dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUobCksVGIobCx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWwsdGhpc31fd2l0aERyb3BDb250YWluZXIo'@;
put 'bCl7dGhpcy5fZHJvcENvbnRhaW5lcj1sfWdldEZyZWVEcmFnUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNmb3JtO3JldHVybnt4OmwueCx5OmwueX19c2V0RnJlZURyYWdQb3NpdGlvbihsKXtyZXR1'@;
put 'cm4gdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9bC54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1sLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8dGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShsLngsbC55KSx0aGlzfXdpdGhQ'@;
put 'cmV2aWV3Q29udGFpbmVyKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3Q29udGFpbmVyPWwsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb247bCYmdGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fdXBkYXRlQWN0'@;
put 'aXZlRHJvcENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKSxsKX1fcmVtb3ZlTGlzdGVuZXJzKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0'@;
put 'aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nZXRTaGFkb3dSb290KCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixfMWUsdjFlKX1fZGVzdHJveVByZXZpZXcoKXt0aGlzLl9wcmV2aWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz1udWxs'@;
put 'fV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0aGlzLl9wbGFjZWhvbGRlcj8ucmVtb3ZlKCksdGhpcy5fcGxhY2Vob2xkZXJSZWY/LmRlc3Ryb3koKSx0aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9wbGFjZWhvbGRlclJlZj1udWxsfV9lbmREcmFnU2VxdWVuY2UobCl7aWYodGhpcy5fZHJhZ0Ryb3BS'@;
put 'ZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpJiYodGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVudC5z'@;
put 'dHlsZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj10aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKSlpZih0aGlzLnJlbGVhc2VkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BDb250'@;
put 'YWluZXIuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMobCksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2lu'@;
put 'Zyh0aGlzKX0pO2Vsc2V7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9uZ1pv'@;
put 'bmUucnVuKCgpPT57dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoYSksZHJvcFBvaW50OmEsZXZlbnQ6bH0pfSksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2lu'@;
put 'Zyh0aGlzKX19X3N0YXJ0RHJhZ1NlcXVlbmNlKGwpe1J4KGwpJiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPXRoaXMuX2dldFNoYWRvd1Jvb3QoKSxkPXRoaXMuX2Ryb3BDb250YWluZXI7'@;
put 'aWYoYSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsXzFlLHYxZSl9KSxkKXtjb25zdCBoPXRoaXMuX3Jvb3RFbGVtZW50LGY9aC5wYXJlbnROb2RlLHY9dGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fY3JlYXRlUGxh'@;
put 'Y2Vob2xkZXJFbGVtZW50KCksTT10aGlzLl9hbmNob3I9dGhpcy5fYW5jaG9yfHx0aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKTtmLmluc2VydEJlZm9yZShNLGgpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC5zdHlsZS50cmFuc2Zvcm18fCIiLHRoaXMuX3ByZXZpZXc9bmV3IHFG'@;
put 'ZSh0aGlzLl9kb2N1bWVudCx0aGlzLl9yb290RWxlbWVudCx0aGlzLl9kaXJlY3Rpb24sdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcHJldmlld1RlbXBsYXRlfHxudWxsLHRoaXMucHJldmlld0NsYXNzfHxudWxsLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLHRoaXMuX2luaXRpYWxU'@;
put 'cmFuc2Zvcm0sdGhpcy5fY29uZmlnLnpJbmRleHx8MWUzKSx0aGlzLl9wcmV2aWV3LmF0dGFjaCh0aGlzLl9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQoZixhKSksczFlKGgsITEseTFlKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYucmVwbGFjZUNoaWxkKHYsaCkpLHRoaXMu'@;
put 'c3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksZC5zdGFydCgpLHRoaXMuX2luaXRpYWxDb250YWluZXI9ZCx0aGlzLl9pbml0aWFsSW5kZXg9ZC5nZXRJdGVtSW5kZXgodGhpcyl9ZWxzZSB0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2lu'@;
put 'aXRpYWxDb250YWluZXI9dGhpcy5faW5pdGlhbEluZGV4PXZvaWQgMDt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUoZD9kLmdldFNjcm9sbGFibGVQYXJlbnRzKCk6W10pfV9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKGwsYSl7dGhpcy5fcGFyZW50RHJhZ1JlZiYmYS5zdG9wUHJvcGFnYXRp'@;
put 'b24oKTtjb25zdCBkPXRoaXMuaXNEcmFnZ2luZygpLGg9UngoYSksZj0haCYmMCE9PWEuYnV0dG9uLHY9dGhpcy5fcm9vdEVsZW1lbnQsTT1rTChhKSxJPSFoJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSs4MDA+RGF0ZS5ub3coKSxHPWg/ZnVu'@;
put 'Y3Rpb24gcEZlKGMpe2NvbnN0IGw9Yy50b3VjaGVzJiZjLnRvdWNoZXNbMF18fGMuY2hhbmdlZFRvdWNoZXMmJmMuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghbHx8LTEhPT1sLmlkZW50aWZpZXJ8fG51bGwhPWwucmFkaXVzWCYmMSE9PWwucmFkaXVzWHx8bnVsbCE9bC5yYWRpdXNZJiYx'@;
put 'IT09bC5yYWRpdXNZKX0oYSk6ZnVuY3Rpb24gZkZlKGMpe3JldHVybiAwPT09Yy5idXR0b25zfHwwPT09Yy5kZXRhaWx9KGEpO2lmKE0mJk0uZHJhZ2dhYmxlJiYibW91c2Vkb3duIj09PWEudHlwZSYmYS5wcmV2ZW50RGVmYXVsdCgpLGR8fGZ8fEl8fEcpcmV0dXJuO2lmKHRoaXMuX2hhbmRs'@;
put 'ZXMubGVuZ3RoKXtjb25zdCB5ZT12LnN0eWxlO3RoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxpZ2h0PXllLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yfHwiIix5ZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQifXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz10aGlzLl9oYXNN'@;
put 'b3ZlZD0hMSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl9pbml0aWFsRG9tUmVjdD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJNb3ZlLnN1YnNj'@;
put 'cmliZSh0aGlzLl9wb2ludGVyTW92ZSksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlclVwLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyVXApLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9s'@;
put 'bGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKHllPT50aGlzLl91cGRhdGVPblNjcm9sbCh5ZSkpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmKHRoaXMuX2JvdW5kYXJ5UmVjdD1FWSh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpKTtjb25zdCByZT10aGlzLl9wcmV2aWV3VGVtcGxh'@;
put 'dGU7dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ9cmUmJnJlLnRlbXBsYXRlJiYhcmUubWF0Y2hTaXplP3t4OjAseTowfTp0aGlzLl9nZXRQb2ludGVyUG9zaXRpb25JbkVsZW1lbnQodGhpcy5faW5pdGlhbERvbVJlY3QsbCxhKTtjb25zdCB1ZT10aGlzLl9waWNrdXBQb3NpdGlvbk9u'@;
put 'UGFnZT10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGEpO3RoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YT17eDowLHk6MH0sdGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlPXt4OnVlLngseTp1ZS55'@;
put 'fSx0aGlzLl9kcmFnU3RhcnRUaW1lPURhdGUubm93KCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdGFydERyYWdnaW5nKHRoaXMsYSl9X2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpe3MxZSh0aGlzLl9yb290RWxlbWVudCwhMCx5MWUpLHRoaXMuX2FuY2hvci5wYXJlbnROb2RlLnJlcGxhY2VD'@;
put 'aGlsZCh0aGlzLl9yb290RWxlbWVudCx0aGlzLl9hbmNob3IpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX2luaXRpYWxUcmFuc2Zv'@;
put 'cm09dm9pZCAwLHRoaXMuX25nWm9uZS5ydW4oKCk9Pntjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXIsZD1hLmdldEl0ZW1JbmRleCh0aGlzKSxoPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKSxmPXRoaXMuX2dldERyYWdEaXN0YW5jZShoKSx2PWEuX2lzT3ZlckNvbnRhaW5l'@;
put 'cihoLngsaC55KTt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOnRoaXMsY3VycmVudEluZGV4OmQscHJldmlvdXNJbmRleDp0aGlzLl9pbml0aWFsSW5kZXgsY29udGFpbmVyOmEscHJl'@;
put 'dmlvdXNDb250YWluZXI6dGhpcy5faW5pdGlhbENvbnRhaW5lcixpc1BvaW50ZXJPdmVyQ29udGFpbmVyOnYsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksYS5kcm9wKHRoaXMsZCx0aGlzLl9pbml0aWFsSW5kZXgsdGhpcy5faW5pdGlhbENvbnRhaW5lcix2LGYsaCxsKSx0aGlz'@;
put 'Ll9kcm9wQ29udGFpbmVyPXRoaXMuX2luaXRpYWxDb250YWluZXJ9KX1fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih7eDpsLHk6YX0se3g6ZCx5Omh9KXtsZXQgZj10aGlzLl9pbml0aWFsQ29udGFpbmVyLl9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKHRoaXMsbCxhKTshZiYm'@;
put 'dGhpcy5fZHJvcENvbnRhaW5lciE9PXRoaXMuX2luaXRpYWxDb250YWluZXImJnRoaXMuX2luaXRpYWxDb250YWluZXIuX2lzT3ZlckNvbnRhaW5lcihsLGEpJiYoZj10aGlzLl9pbml0aWFsQ29udGFpbmVyKSxmJiZmIT09dGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fbmdab25lLnJ1bigo'@;
put 'KT0+e3RoaXMuZXhpdGVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6dGhpcy5fZHJvcENvbnRhaW5lcn0pLHRoaXMuX2Ryb3BDb250YWluZXIuZXhpdCh0aGlzKSx0aGlzLl9kcm9wQ29udGFpbmVyPWYsdGhpcy5fZHJvcENvbnRhaW5lci5lbnRlcih0aGlzLGwsYSxmPT09dGhpcy5faW5p'@;
put 'dGlhbENvbnRhaW5lciYmZi5zb3J0aW5nRGlzYWJsZWQ/dGhpcy5faW5pdGlhbEluZGV4OnZvaWQgMCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6ZixjdXJyZW50SW5kZXg6Zi5nZXRJdGVtSW5kZXgodGhpcyl9KX0pLHRoaXMuaXNEcmFnZ2luZygpJiYodGhpcy5f'@;
put 'ZHJvcENvbnRhaW5lci5fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShkLGgpLHRoaXMuX2Ryb3BDb250YWluZXIuX3NvcnRJdGVtKHRoaXMsbCxhLHRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSksdGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0o'@;
put 'bCxhKTp0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC10aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54LGEtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueSkpfV9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKXtpZighdGhpcy5faGFzTW92ZWQpcmV0dXJuIFByb21p'@;
put 'c2UucmVzb2x2ZSgpO2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcHJldmlldy5hZGRDbGFzcygiY2RrLWRyYWctYW5pbWF0aW5nIiksdGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwubGVmdCxsLnRvcCk7Y29uc3QgYT10aGlzLl9w'@;
put 'cmV2aWV3LmdldFRyYW5zaXRpb25EdXJhdGlvbigpO3JldHVybiAwPT09YT9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPXY9PnsoIXZ8fGtMKHYpPT09dGhpcy5fcHJldmlldyYmInRyYW5zZm9ybSI9'@;
put 'PT12LnByb3BlcnR5TmFtZSkmJih0aGlzLl9wcmV2aWV3Py5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKSxkKCksY2xlYXJUaW1lb3V0KGYpKX0sZj1zZXRUaW1lb3V0KGgsMS41KmEpO3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIs'@;
put 'aCl9KSl9X2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpe2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSxhPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBkO3JldHVybiBhPyh0aGlzLl9wbGFjZWhvbGRlclJlZj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEsbC5j'@;
put 'b250ZXh0KSx0aGlzLl9wbGFjZWhvbGRlclJlZi5kZXRlY3RDaGFuZ2VzKCksZD1wMWUodGhpcy5fcGxhY2Vob2xkZXJSZWYsdGhpcy5fZG9jdW1lbnQpKTpkPXUxZSh0aGlzLl9yb290RWxlbWVudCksZC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixkLmNsYXNzTGlzdC5hZGQoImNkay1k'@;
put 'cmFnLXBsYWNlaG9sZGVyIiksZH1fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLl9yb290RWxlbWVudD9udWxsOmEsZj1oP2guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bCx2PVJ4KGQpP2QudGFyZ2V0VG91Y2hlc1swXTpkLE09dGhpcy5fZ2V0'@;
put 'Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt4OmYubGVmdC1sLmxlZnQrKHYucGFnZVgtZi5sZWZ0LU0ubGVmdCkseTpmLnRvcC1sLnRvcCsodi5wYWdlWS1mLnRvcC1NLnRvcCl9fV9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCl7Y29uc3QgYT10aGlzLl9nZXRWaWV3cG9ydFNj'@;
put 'cm9sbFBvc2l0aW9uKCksZD1SeChsKT9sLnRvdWNoZXNbMF18fGwuY2hhbmdlZFRvdWNoZXNbMF18fHtwYWdlWDowLHBhZ2VZOjB9OmwsaD1kLnBhZ2VYLWEubGVmdCxmPWQucGFnZVktYS50b3A7aWYodGhpcy5fb3duZXJTVkdFbGVtZW50KXtjb25zdCB2PXRoaXMuX293bmVyU1ZHRWxlbWVu'@;
put 'dC5nZXRTY3JlZW5DVE0oKTtpZih2KXtjb25zdCBNPXRoaXMuX293bmVyU1ZHRWxlbWVudC5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBNLng9aCxNLnk9ZixNLm1hdHJpeFRyYW5zZm9ybSh2LmludmVyc2UoKSl9fXJldHVybnt4OmgseTpmfX1fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRp'@;
put 'b24obCl7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyP3RoaXMuX2Ryb3BDb250YWluZXIubG9ja0F4aXM6bnVsbDtsZXR7eDpkLHk6aH09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLmNvbnN0cmFpblBvc2l0aW9uKGwsdGhpcyx0aGlzLl9pbml0aWFsRG9tUmVjdCx0aGlzLl9waWNr'@;
put 'dXBQb3NpdGlvbkluRWxlbWVudCk6bDtpZigieCI9PT10aGlzLmxvY2tBeGlzfHwieCI9PT1hP2g9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueS0odGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC55OjApOigieSI9PT10aGlzLmxvY2tBeGlz'@;
put 'fHwieSI9PT1hKSYmKGQ9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueC0odGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54OjApKSx0aGlzLl9ib3VuZGFyeVJlY3Qpe2NvbnN0e3g6Zix5OnZ9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/e3g6'@;
put 'MCx5OjB9OnRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LE09dGhpcy5fYm91bmRhcnlSZWN0LHt3aWR0aDpJLGhlaWdodDpHfT10aGlzLl9nZXRQcmV2aWV3UmVjdCgpLHJlPU0udG9wK3YsdWU9TS5ib3R0b20tKEctdik7ZD1iMWUoZCxNLmxlZnQrZixNLnJpZ2h0LShJLWYpKSxoPWIx'@;
put 'ZShoLHJlLHVlKX1yZXR1cm57eDpkLHk6aH19X3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShsKXtjb25zdHt4OmEseTpkfT1sLGg9dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhLGY9dGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlLHY9TWF0aC5hYnMoYS1m'@;
put 'LngpLE09TWF0aC5hYnMoZC1mLnkpO3JldHVybiB2PnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC54PWE+Zi54PzE6LTEsZi54PWEpLE0+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLnk9ZD5mLnk/MTotMSxm'@;
put 'Lnk9ZCksaH1fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpe2lmKCF0aGlzLl9yb290RWxlbWVudHx8IXRoaXMuX2hhbmRsZXMpcmV0dXJuO2NvbnN0IGw9dGhpcy5faGFuZGxlcy5sZW5ndGg+MHx8IXRoaXMuaXNEcmFnZ2luZygpO2whPT10aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNF'@;
put 'bmFibGVkJiYodGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD1sLFRiKHRoaXMuX3Jvb3RFbGVtZW50LGwpKX1fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnMobCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLEZMKSxsLnJlbW92ZUV2'@;
put 'ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLG0xZSksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxGTCl9X2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obCxhKXtjb25zdCBkPVBMKGwsYSksaD10aGlzLl9y'@;
put 'b290RWxlbWVudC5zdHlsZTtudWxsPT10aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYodGhpcy5faW5pdGlhbFRyYW5zZm9ybT1oLnRyYW5zZm9ybSYmIm5vbmUiIT1oLnRyYW5zZm9ybT9oLnRyYW5zZm9ybToiIiksaC50cmFuc2Zvcm09T0woZCx0aGlzLl9pbml0aWFsVHJhbnNmb3JtKX1fYXBw'@;
put 'bHlQcmV2aWV3VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3VGVtcGxhdGU/LnRlbXBsYXRlP3ZvaWQgMDp0aGlzLl9pbml0aWFsVHJhbnNmb3JtLGg9UEwobCxhKTt0aGlzLl9wcmV2aWV3LnNldFRyYW5zZm9ybShPTChoLGQpKX1fZ2V0RHJhZ0Rpc3RhbmNlKGwpe2NvbnN0'@;
put 'IGE9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U7cmV0dXJuIGE/e3g6bC54LWEueCx5OmwueS1hLnl9Ont4OjAseTowfX1fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKXt0aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dm9pZCAwLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5j'@;
put 'bGVhcigpfV9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6ZSgpe2xldHt4OmwseTphfT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtO2lmKDA9PT1sJiYwPT09YXx8dGhpcy5pc0RyYWdnaW5nKCl8fCF0aGlzLl9ib3VuZGFyeUVsZW1lbnQpcmV0dXJuO2NvbnN0IGQ9dGhpcy5fcm9vdEVsZW1l'@;
put 'bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD10aGlzLl9ib3VuZGFyeUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PWgud2lkdGgmJjA9PT1oLmhlaWdodHx8MD09PWQud2lkdGgmJjA9PT1kLmhlaWdodClyZXR1cm47Y29uc3QgZj1oLmxlZnQtZC5sZWZ0LHY9ZC5y'@;
put 'aWdodC1oLnJpZ2h0LE09aC50b3AtZC50b3AsST1kLmJvdHRvbS1oLmJvdHRvbTtoLndpZHRoPmQud2lkdGg/KGY+MCYmKGwrPWYpLHY+MCYmKGwtPXYpKTpsPTAsaC5oZWlnaHQ+ZC5oZWlnaHQ/KE0+MCYmKGErPU0pLEk+MCYmKGEtPUkpKTphPTAsKGwhPT10aGlzLl9wYXNzaXZlVHJhbnNm'@;
put 'b3JtLnh8fGEhPT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnkpJiZ0aGlzLnNldEZyZWVEcmFnUG9zaXRpb24oe3k6YSx4Omx9KX1fZ2V0RHJhZ1N0YXJ0RGVsYXkobCl7Y29uc3QgYT10aGlzLmRyYWdTdGFydERlbGF5O3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOlJ4KGwpP2EudG91Y2g6'@;
put 'YT9hLm1vdXNlOjB9X3VwZGF0ZU9uU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChsKTtpZihhKXtjb25zdCBkPWtMKGwpO3RoaXMuX2JvdW5kYXJ5UmVjdCYmZCE9PXRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmZC5jb250YWlucyh0aGlzLl9ib3Vu'@;
put 'ZGFyeUVsZW1lbnQpJiZJeCh0aGlzLl9ib3VuZGFyeVJlY3QsYS50b3AsYS5sZWZ0KSx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54Kz1hLmxlZnQsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSs9YS50b3AsdGhpcy5fZHJvcENvbnRhaW5lcnx8KHRoaXMuX2FjdGl2ZVRyYW5zZm9y'@;
put 'bS54LT1hLmxlZnQsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnktPWEudG9wLHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0odGhpcy5fYWN0aXZlVHJhbnNmb3JtLngsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnkpKX19X2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQodGhpcy5fZG9jdW1lbnQpPy5zY3JvbGxQb3NpdGlvbnx8dGhpcy5fcGFyZW50UG9zaXRpb25zLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX1fZ2V0U2hhZG93Um9vdCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9jYWNoZWRTaGFk'@;
put 'b3dSb290JiYodGhpcy5fY2FjaGVkU2hhZG93Um9vdD1aMGUodGhpcy5fcm9vdEVsZW1lbnQpKSx0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQobCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiO2lmKCJwYXJlbnQiPT09'@;
put 'ZClyZXR1cm4gbDtpZigiZ2xvYmFsIj09PWQpe2NvbnN0IGg9dGhpcy5fZG9jdW1lbnQ7cmV0dXJuIGF8fGguZnVsbHNjcmVlbkVsZW1lbnR8fGgud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGgubW96RnVsbFNjcmVlbkVsZW1lbnR8fGgubXNGdWxsc2NyZWVuRWxlbWVudHx8aC5ib2R5fXJl'@;
put 'dHVybiBFZChkKX1fZ2V0UHJldmlld1JlY3QoKXtyZXR1cm4oIXRoaXMuX3ByZXZpZXdSZWN0fHwhdGhpcy5fcHJldmlld1JlY3Qud2lkdGgmJiF0aGlzLl9wcmV2aWV3UmVjdC5oZWlnaHQpJiYodGhpcy5fcHJldmlld1JlY3Q9dGhpcy5fcHJldmlldz90aGlzLl9wcmV2aWV3LmdldEJvdW5k'@;
put 'aW5nQ2xpZW50UmVjdCgpOnRoaXMuX2luaXRpYWxEb21SZWN0KSx0aGlzLl9wcmV2aWV3UmVjdH1fZ2V0VGFyZ2V0SGFuZGxlKGwpe3JldHVybiB0aGlzLl9oYW5kbGVzLmZpbmQoYT0+bC50YXJnZXQmJihsLnRhcmdldD09PWF8fGEuY29udGFpbnMobC50YXJnZXQpKSl9fWZ1bmN0aW9uIGIx'@;
put 'ZShjLGwsYSl7cmV0dXJuIE1hdGgubWF4KGwsTWF0aC5taW4oYSxjKSl9ZnVuY3Rpb24gUngoYyl7cmV0dXJuInQiPT09Yy50eXBlWzBdfWZ1bmN0aW9uIF8xZShjKXtjLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gdzFlKGMsbCxhKXtjb25zdCBkPUx4KGwsYy5sZW5ndGgtMSksaD1MeChh'@;
put 'LGMubGVuZ3RoLTEpO2lmKGQ9PT1oKXJldHVybjtjb25zdCBmPWNbZF0sdj1oPGQ/LTE6MTtmb3IobGV0IE09ZDtNIT09aDtNKz12KWNbTV09Y1tNK3ZdO2NbaF09Zn1mdW5jdGlvbiBMeChjLGwpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGwsYykpfWNsYXNzIHRIZXtjb25zdHJ1Y3Rv'@;
put 'cihsLGEpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5fcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGE6MCxvdmVybGFwczohMX19c3RhcnQobCl7dGhpcy53'@;
put 'aXRoSXRlbXMobCl9c29ydChsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsdj10aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpO2lmKC0xPT09diYmZi5sZW5ndGg+MClyZXR1cm4gbnVsbDtjb25zdCBNPSJob3Jpem9udGFsIj09PXRoaXMu'@;
put 'b3JpZW50YXRpb24sST1mLmZpbmRJbmRleChzdD0+c3QuZHJhZz09PWwpLEc9Zlt2XSx1ZT1HLmNsaWVudFJlY3QseWU9ST52PzE6LTEsRWU9dGhpcy5fZ2V0SXRlbU9mZnNldFB4KGZbSV0uY2xpZW50UmVjdCx1ZSx5ZSksQmU9dGhpcy5fZ2V0U2libGluZ09mZnNldFB4KEksZix5ZSksR2U9'@;
put 'Zi5zbGljZSgpO3JldHVybiB3MWUoZixJLHYpLGYuZm9yRWFjaCgoc3QscHQpPT57aWYoR2VbcHRdPT09c3QpcmV0dXJuO2NvbnN0IGR0PXN0LmRyYWc9PT1sLHF0PWR0P0VlOkJlLG1uPWR0P2wuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6c3QuZHJhZy5nZXRSb290RWxlbWVudCgpO3N0Lm9m'@;
put 'ZnNldCs9cXQsTT8obW4uc3R5bGUudHJhbnNmb3JtPU9MKGB0cmFuc2xhdGUzZCgke01hdGgucm91bmQoc3Qub2Zmc2V0KX1weCwgMCwgMClgLHN0LmluaXRpYWxUcmFuc2Zvcm0pLEl4KHN0LmNsaWVudFJlY3QsMCxxdCkpOihtbi5zdHlsZS50cmFuc2Zvcm09T0woYHRyYW5zbGF0ZTNkKDAs'@;
put 'ICR7TWF0aC5yb3VuZChzdC5vZmZzZXQpfXB4LCAwKWAsc3QuaW5pdGlhbFRyYW5zZm9ybSksSXgoc3QuY2xpZW50UmVjdCxxdCwwKSl9KSx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9VFkodWUsYSxkKSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1HLmRyYWcsdGhpcy5fcHJldmlvdXNT'@;
put 'd2FwLmRlbHRhPU0/aC54OmgueSx7cHJldmlvdXNJbmRleDpJLGN1cnJlbnRJbmRleDp2fX1lbnRlcihsLGEsZCxoKXtjb25zdCBmPW51bGw9PWh8fGg8MD90aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkKTpoLHY9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcyxNPXYu'@;
put 'aW5kZXhPZihsKSxJPWwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk7bGV0IEc9dltmXTtpZihHPT09bCYmKEc9dltmKzFdKSwhRyYmKG51bGw9PWZ8fC0xPT09Znx8Zjx2Lmxlbmd0aC0xKSYmdGhpcy5fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQoYSxkKSYmKEc9dlswXSksTT4tMSYmdi5zcGxp'@;
put 'Y2UoTSwxKSxHJiYhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKEcpKXtjb25zdCByZT1HLmdldFJvb3RFbGVtZW50KCk7cmUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoSSxyZSksdi5zcGxpY2UoZiwwLGwpfWVsc2UgRWQodGhpcy5fZWxlbWVudCkuYXBwZW5kQ2hpbGQo'@;
put 'SSksdi5wdXNoKGwpO0kuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWwuc2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZShsKXt0aGlzLl9zb3J0'@;
put 'UHJlZGljYXRlPWx9cmVzZXQoKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmZvckVhY2gobD0+e2NvbnN0IGE9bC5nZXRSb290RWxlbWVudCgpO2lmKGEpe2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kKGg9PmguZHJhZz09PWwpPy5pbml0aWFsVHJhbnNmb3JtO2Euc3R5bGUudHJh'@;
put 'bnNmb3JtPWR8fCIifX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1bXSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1udWxsLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT0wLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz0hMX1nZXRBY3RpdmVJdGVt'@;
put 'c1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdnYWJsZXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybigiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYicnRsIj09PXRoaXMuZGlyZWN0aW9uP3RoaXMuX2l0ZW1Qb3NpdGlvbnMuc2xpY2UoKS5yZXZlcnNlKCk6dGhpcy5f'@;
put 'aXRlbVBvc2l0aW9ucykuZmluZEluZGV4KGQ9PmQuZHJhZz09PWwpfXVwZGF0ZU9uU2Nyb2xsKGwsYSl7dGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVjdDpkfSk9PntJeChkLGwsYSl9KSx0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOmR9KT0+e3RoaXMu'@;
put 'X2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhkKSYmZC5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX1fY2FjaGVJdGVtUG9zaXRpb25zKCl7Y29uc3QgbD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO3RoaXMuX2l0ZW1Qb3NpdGlvbnM9dGhpcy5fYWN0aXZlRHJh'@;
put 'Z2dhYmxlcy5tYXAoYT0+e2NvbnN0IGQ9YS5nZXRWaXNpYmxlRWxlbWVudCgpO3JldHVybntkcmFnOmEsb2Zmc2V0OjAsaW5pdGlhbFRyYW5zZm9ybTpkLnN0eWxlLnRyYW5zZm9ybXx8IiIsY2xpZW50UmVjdDpFWShkKX19KS5zb3J0KChhLGQpPT5sP2EuY2xpZW50UmVjdC5sZWZ0LWQuY2xp'@;
put 'ZW50UmVjdC5sZWZ0OmEuY2xpZW50UmVjdC50b3AtZC5jbGllbnRSZWN0LnRvcCl9X2dldEl0ZW1PZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2xldCBmPWg/YS5sZWZ0LWwubGVmdDphLnRvcC1sLnRvcDtyZXR1cm4tMT09PWQmJihmKz1o'@;
put 'P2Eud2lkdGgtbC53aWR0aDphLmhlaWdodC1sLmhlaWdodCksZn1fZ2V0U2libGluZ09mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sZj1hW2xdLmNsaWVudFJlY3Qsdj1hW2wrLTEqZF07bGV0IE09ZltoPyJ3aWR0aCI6ImhlaWdodCJdKmQ7'@;
put 'aWYodil7Y29uc3QgST1oPyJsZWZ0IjoidG9wIixHPWg/InJpZ2h0IjoiYm90dG9tIjstMT09PWQ/TS09di5jbGllbnRSZWN0W0ldLWZbR106TSs9ZltJXS12LmNsaWVudFJlY3RbR119cmV0dXJuIE19X3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGwsYSl7aWYoIXRoaXMuX2FjdGl2ZURyYWdn'@;
put 'YWJsZXMubGVuZ3RoKXJldHVybiExO2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucyxoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247aWYoZFswXS5kcmFnIT09dGhpcy5fYWN0aXZlRHJhZ2dhYmxlc1swXSl7Y29uc3Qgdj1kW2QubGVuZ3RoLTFdLmNsaWVudFJlY3Q7cmV0dXJu'@;
put 'IGg/bD49di5yaWdodDphPj12LmJvdHRvbX17Y29uc3Qgdj1kWzBdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bDw9di5sZWZ0OmE8PXYudG9wfX1fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKXtjb25zdCBmPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sdj10'@;
put 'aGlzLl9pdGVtUG9zaXRpb25zLmZpbmRJbmRleCgoe2RyYWc6TSxjbGllbnRSZWN0Okl9KT0+TSE9PWwmJigoIWh8fE0hPT10aGlzLl9wcmV2aW91c1N3YXAuZHJhZ3x8IXRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwc3x8KGY/aC54OmgueSkhPT10aGlzLl9wcmV2aW91c1N3YXAuZGVsdGEp'@;
put 'JiYoZj9hPj1NYXRoLmZsb29yKEkubGVmdCkmJmE8TWF0aC5mbG9vcihJLnJpZ2h0KTpkPj1NYXRoLmZsb29yKEkudG9wKSYmZDxNYXRoLmZsb29yKEkuYm90dG9tKSkpKTtyZXR1cm4tMSE9PXYmJnRoaXMuX3NvcnRQcmVkaWNhdGUodixsKT92Oi0xfX12YXIgUjI9ZnVuY3Rpb24oYyl7cmV0'@;
put 'dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuVVA9MV09IlVQIixjW2MuRE9XTj0yXT0iRE9XTiIsY30oUjJ8fHt9KSxVMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjfShVMXx8e30pO2NsYXNz'@;
put 'IG5IZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD0hMSx0aGlzLmF1'@;
put 'dG9TY3JvbGxTdGVwPTIsdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IEduLHRoaXMuZW50ZXJlZD1uZXcgR24sdGhpcy5leGl0ZWQ9bmV3IEduLHRoaXMuZHJvcHBlZD1uZXcgR24sdGhpcy5zb3J0ZWQ9'@;
put 'bmV3IEduLHRoaXMucmVjZWl2aW5nU3RhcnRlZD1uZXcgR24sdGhpcy5yZWNlaXZpbmdTdG9wcGVkPW5ldyBHbix0aGlzLl9pc0RyYWdnaW5nPSExLHRoaXMuX2RyYWdnYWJsZXM9W10sdGhpcy5fc2libGluZ3M9W10sdGhpcy5fYWN0aXZlU2libGluZ3M9bmV3IFNldCx0aGlzLl92aWV3cG9y'@;
put 'dFNjcm9sbFN1YnNjcmlwdGlvbj1KdC5FTVBUWSx0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1SMi5OT05FLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249VTEuTk9ORSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzPW5ldyBHbix0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51bGws'@;
put 'dGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbD0oKT0+e3RoaXMuX3N0b3BTY3JvbGxpbmcoKSxmdW5jdGlvbiBHRmUoYz0wLGw9RUwpe3JldHVybiBjPDAmJihjPTApLFEwZShjLGMsbCl9KDAscTBlKS5waXBlKEgwKHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMpKS5zdWJzY3JpYmUoKCk9Pntjb25z'@;
put 'dCB2PXRoaXMuX3Njcm9sbE5vZGUsTT10aGlzLmF1dG9TY3JvbGxTdGVwO3RoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPT09UjIuVVA/di5zY3JvbGxCeSgwLC1NKTp0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PVIyLkRPV04mJnYuc2Nyb2xsQnkoMCxNKSx0aGlzLl9ob3Jp'@;
put 'em9udGFsU2Nyb2xsRGlyZWN0aW9uPT09VTEuTEVGVD92LnNjcm9sbEJ5KC1NLDApOnRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249PT1VMS5SSUdIVCYmdi5zY3JvbGxCeShNLDApfSl9LHRoaXMuZWxlbWVudD1FZChsKSx0aGlzLl9kb2N1bWVudD1kLHRoaXMud2l0aFNjcm9sbGFi'@;
put 'bGVQYXJlbnRzKFt0aGlzLmVsZW1lbnRdKSxhLnJlZ2lzdGVyRHJvcENvbnRhaW5lcih0aGlzKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IGMxZShkKSx0aGlzLl9zb3J0U3RyYXRlZ3k9bmV3IHRIZSh0aGlzLmVsZW1lbnQsYSksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJlZGlj'@;
put 'YXRlKCh2LE0pPT50aGlzLnNvcnRQcmVkaWNhdGUodixNLHRoaXMpKX1kaXNwb3NlKCl7dGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVmb3Jl'@;
put 'U3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5zb3J0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0b3Bw'@;
put 'ZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5jbGVhcigpLHRoaXMuX3Njcm9sbE5vZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVybiB0'@;
put 'aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihsLGEsZCxoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSxudWxsPT1oJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGg9dGhpcy5fZHJhZ2dh'@;
put 'Ymxlcy5pbmRleE9mKGwpKSx0aGlzLl9zb3J0U3RyYXRlZ3kuZW50ZXIobCxhLGQsaCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXMsY3VycmVudEluZGV4'@;
put 'OnRoaXMuZ2V0SXRlbUluZGV4KGwpfSl9ZXhpdChsKXt0aGlzLl9yZXNldCgpLHRoaXMuZXhpdGVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpc30pfWRyb3AobCxhLGQsaCxmLHYsTSxJPXt9KXt0aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmwsY3VycmVudEluZGV4'@;
put 'OmEscHJldmlvdXNJbmRleDpkLGNvbnRhaW5lcjp0aGlzLHByZXZpb3VzQ29udGFpbmVyOmgsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpmLGRpc3RhbmNlOnYsZHJvcFBvaW50Ok0sZXZlbnQ6SX0pfXdpdGhJdGVtcyhsKXtjb25zdCBhPXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMuX2Ry'@;
put 'YWdnYWJsZXM9bCxsLmZvckVhY2goZD0+ZC5fd2l0aERyb3BDb250YWluZXIodGhpcykpLHRoaXMuaXNEcmFnZ2luZygpJiYoYS5maWx0ZXIoaD0+aC5pc0RyYWdnaW5nKCkpLmV2ZXJ5KGg9Pi0xPT09bC5pbmRleE9mKGgpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53aXRo'@;
put 'SXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1sLHRoaXN9Y29ubmVjdGVkVG8obCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzPWwuc2xpY2UoKSx0aGlzfXdpdGhPcmllbnRhdGlvbihsKXtyZXR1'@;
put 'cm4gdGhpcy5fc29ydFN0cmF0ZWd5Lm9yaWVudGF0aW9uPWwsdGhpc313aXRoU2Nyb2xsYWJsZVBhcmVudHMobCl7Y29uc3QgYT1FZCh0aGlzLmVsZW1lbnQpO3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHM9LTE9PT1sLmluZGV4T2YoYSk/W2EsLi4ubF06bC5zbGljZSgpLHRoaXN9'@;
put 'Z2V0U2Nyb2xsYWJsZVBhcmVudHMoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZz90aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0SXRlbUluZGV4KGwpOnRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKX1pc1JlY2Vp'@;
put 'dmluZygpe3JldHVybiB0aGlzLl9hY3RpdmVTaWJsaW5ncy5zaXplPjB9X3NvcnRJdGVtKGwsYSxkLGgpe2lmKHRoaXMuc29ydGluZ0Rpc2FibGVkfHwhdGhpcy5fZG9tUmVjdHx8IWwxZSh0aGlzLl9kb21SZWN0LC4wNSxhLGQpKXJldHVybjtjb25zdCBmPXRoaXMuX3NvcnRTdHJhdGVneS5z'@;
put 'b3J0KGwsYSxkLGgpO2YmJnRoaXMuc29ydGVkLm5leHQoe3ByZXZpb3VzSW5kZXg6Zi5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmx9KX1fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShsLGEpe2lmKHRoaXMuYXV0b1Njcm9s'@;
put 'bERpc2FibGVkKXJldHVybjtsZXQgZCxoPVIyLk5PTkUsZj1VMS5OT05FO2lmKHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZm9yRWFjaCgodixNKT0+e009PT10aGlzLl9kb2N1bWVudHx8IXYuY2xpZW50UmVjdHx8ZHx8bDFlKHYuY2xpZW50UmVjdCwuMDUsbCxhKSYmKFtoLGZd'@;
put 'PWZ1bmN0aW9uIHJIZShjLGwsYSxkLGgpe2NvbnN0IGY9TTFlKGwsaCksdj14MWUobCxkKTtsZXQgTT1SMi5OT05FLEk9VTEuTk9ORTtpZihmKXtjb25zdCBHPWMuc2Nyb2xsVG9wO2Y9PT1SMi5VUD9HPjAmJihNPVIyLlVQKTpjLnNjcm9sbEhlaWdodC1HPmMuY2xpZW50SGVpZ2h0JiYoTT1S'@;
put 'Mi5ET1dOKX1pZih2KXtjb25zdCBHPWMuc2Nyb2xsTGVmdDsicnRsIj09PWE/dj09PVUxLlJJR0hUP0c8MCYmKEk9VTEuUklHSFQpOmMuc2Nyb2xsV2lkdGgrRz5jLmNsaWVudFdpZHRoJiYoST1VMS5MRUZUKTp2PT09VTEuTEVGVD9HPjAmJihJPVUxLkxFRlQpOmMuc2Nyb2xsV2lkdGgtRz5j'@;
put 'LmNsaWVudFdpZHRoJiYoST1VMS5SSUdIVCl9cmV0dXJuW00sSV19KE0sdi5jbGllbnRSZWN0LHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb24sbCxhKSwoaHx8ZikmJihkPU0pKX0pLCFoJiYhZil7Y29uc3R7d2lkdGg6dixoZWlnaHQ6TX09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3'@;
put 'cG9ydFNpemUoKSxJPXt3aWR0aDp2LGhlaWdodDpNLHRvcDowLHJpZ2h0OnYsYm90dG9tOk0sbGVmdDowfTtoPU0xZShJLGEpLGY9eDFlKEksbCksZD13aW5kb3d9ZCYmKGghPT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbnx8ZiE9PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rp'@;
put 'b258fGQhPT10aGlzLl9zY3JvbGxOb2RlKSYmKHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPWgsdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj1mLHRoaXMuX3Njcm9sbE5vZGU9ZCwoaHx8ZikmJmQ/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuX3N0YXJ0'@;
put 'U2Nyb2xsSW50ZXJ2YWwpOnRoaXMuX3N0b3BTY3JvbGxpbmcoKSl9X3N0b3BTY3JvbGxpbmcoKXt0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLm5leHQoKX1fZHJhZ2dpbmdTdGFydGVkKCl7Y29uc3QgbD1FZCh0aGlzLmVsZW1lbnQpLnN0eWxlO3RoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCksdGhp'@;
put 'cy5faXNEcmFnZ2luZz0hMCx0aGlzLl9pbml0aWFsU2Nyb2xsU25hcD1sLm1zU2Nyb2xsU25hcFR5cGV8fGwuc2Nyb2xsU25hcFR5cGV8fCIiLGwuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPSJub25lIix0aGlzLl9zb3J0U3RyYXRlZ3kuc3RhcnQodGhpcy5fZHJhZ2dhYmxl'@;
put 'cyksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl9X2NhY2hlUGFyZW50UG9zaXRpb25zKCl7Y29uc3QgbD1FZCh0aGlzLmVsZW1lbnQpO3RoaXMuX3Bh'@;
put 'cmVudFBvc2l0aW9ucy5jYWNoZSh0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMpLHRoaXMuX2RvbVJlY3Q9dGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQobCkuY2xpZW50UmVjdH1fcmVzZXQoKXt0aGlzLl9pc0RyYWdnaW5nPSExO2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KS5z'@;
put 'dHlsZTtsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxTbmFwVHlwZT10aGlzLl9pbml0aWFsU2Nyb2xsU25hcCx0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0b3BSZWNlaXZpbmcodGhpcykpLHRoaXMuX3NvcnRTdHJhdGVneS5yZXNldCgpLHRoaXMuX3N0b3BTY3JvbGxpbmcoKSx0'@;
put 'aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9pc092ZXJDb250YWluZXIobCxhKXtyZXR1cm4gbnVsbCE9dGhpcy5fZG9tUmVjdCYmVFkodGhpcy5fZG9tUmVjdCxsLGEpfV9nZXRTaWJsaW5nQ29udGFp'@;
put 'bmVyRnJvbVBvc2l0aW9uKGwsYSxkKXtyZXR1cm4gdGhpcy5fc2libGluZ3MuZmluZChoPT5oLl9jYW5SZWNlaXZlKGwsYSxkKSl9X2NhblJlY2VpdmUobCxhLGQpe2lmKCF0aGlzLl9kb21SZWN0fHwhVFkodGhpcy5fZG9tUmVjdCxhLGQpfHwhdGhpcy5lbnRlclByZWRpY2F0ZShsLHRoaXMp'@;
put 'KXJldHVybiExO2NvbnN0IGg9dGhpcy5fZ2V0U2hhZG93Um9vdCgpLmVsZW1lbnRGcm9tUG9pbnQoYSxkKTtpZighaClyZXR1cm4hMTtjb25zdCBmPUVkKHRoaXMuZWxlbWVudCk7cmV0dXJuIGg9PT1mfHxmLmNvbnRhaW5zKGgpfV9zdGFydFJlY2VpdmluZyhsLGEpe2NvbnN0IGQ9dGhpcy5f'@;
put 'YWN0aXZlU2libGluZ3M7IWQuaGFzKGwpJiZhLmV2ZXJ5KGg9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaCx0aGlzKXx8dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGgpPi0xKSYmKGQuYWRkKGwpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMo'@;
put 'KSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhpcyxpdGVtczphfSkpfV9zdG9wUmVjZWl2aW5nKGwpe3RoaXMuX2FjdGl2ZVNpYmxpbmdzLmRlbGV0ZShsKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRo'@;
put 'aXMucmVjZWl2aW5nU3RvcHBlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzfSl9X2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl7dGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkp'@;
put 'LnN1YnNjcmliZShsPT57aWYodGhpcy5pc0RyYWdnaW5nKCkpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChsKTthJiZ0aGlzLl9zb3J0U3RyYXRlZ3kudXBkYXRlT25TY3JvbGwoYS50b3AsYS5sZWZ0KX1lbHNlIHRoaXMuaXNSZWNlaXZpbmcoKSYmdGhpcy5f'@;
put 'Y2FjaGVQYXJlbnRQb3NpdGlvbnMoKX0pfV9nZXRTaGFkb3dSb290KCl7aWYoIXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Qpe2NvbnN0IGw9WjBlKEVkKHRoaXMuZWxlbWVudCkpO3RoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bHx8dGhpcy5fZG9jdW1lbnR9cmV0dXJuIHRoaXMuX2NhY2hlZFNoYWRv'@;
put 'd1Jvb3R9X25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl7Y29uc3QgbD10aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpLmZpbHRlcihhPT5hLmlzRHJhZ2dpbmcoKSk7dGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdGFydFJlY2VpdmluZyh0aGlzLGwpKX19'@;
put 'ZnVuY3Rpb24gTTFlKGMsbCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsaGVpZ2h0Omh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/UjIuVVA6bD49ZC1mJiZsPD1kK2Y/UjIuRE9XTjpSMi5OT05FfWZ1bmN0aW9uIHgxZShjLGwpe2NvbnN0e2xlZnQ6YSxyaWdodDpkLHdpZHRoOmh9'@;
put 'PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/VTEuTEVGVDpsPj1kLWYmJmw8PWQrZj9VMS5SSUdIVDpVMS5OT05FfWNvbnN0IEhMPU1iKHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KSxOTD1uZXcgU2V0O2xldCBpSGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WyJjZGstZHJhZy1yZXNldHMtY29udGFpbmVyIiwiIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbUUldLGRl'@;
put 'Y2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7fSxzdHlsZXM6WyJAbGF5ZXIgY2RrLXJlc2V0c3suY2RrLWRyYWctcHJldmlld3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowO2NvbG9yOmluaGVyaXR9fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRl'@;
put 'Y3Rpb246MH0pfX1yZXR1cm4gY30pKCksYUhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hcHBSZWY9aGkodXApLHRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3I9aGkocWwpLHRoaXMuX2Ryb3BJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9kcmFn'@;
put 'SW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcz1bXSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0ZT1oPT5oLmlzRHJhZ2dpbmcoKSx0aGlzLnBvaW50ZXJNb3ZlPW5ldyBHbix0aGlzLnBvaW50ZXJVcD1uZXcgR24s'@;
put 'dGhpcy5zY3JvbGw9bmV3IEduLHRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZz1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmaC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9aD0+e3RoaXMuX2FjdGl2ZURy'@;
put 'YWdJbnN0YW5jZXMubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNvbWUodGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGUpJiZoLnByZXZlbnREZWZhdWx0KCksdGhpcy5wb2ludGVyTW92ZS5uZXh0KGgpKX0sdGhpcy5fZG9jdW1lbnQ9ZH1yZWdpc3RlckRyb3BDb250YWluZXIo'@;
put 'YSl7dGhpcy5fZHJvcEluc3RhbmNlcy5oYXMoYSl8fHRoaXMuX2Ryb3BJbnN0YW5jZXMuYWRkKGEpfXJlZ2lzdGVyRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5hZGQoYSksMT09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFy'@;
put 'KCgpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsSEwpfSl9cmVtb3ZlRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmRlbGV0ZShhKX1yZW1vdmVEcmFnSXRlbShhKXt0aGlz'@;
put 'Ll9kcmFnSW5zdGFuY2VzLmRlbGV0ZShhKSx0aGlzLnN0b3BEcmFnZ2luZyhhKSwwPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixITCl9c3Rh'@;
put 'cnREcmFnZ2luZyhhLGQpe2lmKCEodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpPi0xKSYmKHRoaXMuX2xvYWRSZXNldHMoKSx0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnB1c2goYSksMT09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoKSl7Y29uc3QgaD1k'@;
put 'LnR5cGUuc3RhcnRzV2l0aCgidG91Y2giKTt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KGg/InRvdWNoZW5kIjoibW91c2V1cCIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyVXAubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0KCJzY3JvbGwiLHtoYW5kbGVyOmY9PnRoaXMuc2Nyb2xsLm5leHQo'@;
put 'Ziksb3B0aW9uczohMH0pLnNldCgic2VsZWN0c3RhcnQiLHtoYW5kbGVyOnRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZyxvcHRpb25zOkhMfSksaHx8dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldCgibW91c2Vtb3ZlIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJNb3ZlLm5leHQo'@;
put 'Ziksb3B0aW9uczpITH0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChmLHYpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2LGYuaGFuZGxlcixmLm9wdGlvbnMpfSl9KX19c3RvcERyYWdnaW5nKGEp'@;
put 'e2NvbnN0IGQ9dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpO2Q+LTEmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNwbGljZShkLDEpLDA9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSl9aXNEcmFn'@;
put 'Z2luZyhhKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpPi0xfXNjcm9sbGVkKGEpe2NvbnN0IGQ9W3RoaXMuc2Nyb2xsXTtyZXR1cm4gYSYmYSE9PXRoaXMuX2RvY3VtZW50JiZkLnB1c2gobmV3IFF0KGg9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxh'@;
put 'cigoKT0+e2NvbnN0IHY9TT0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZoLm5leHQoTSl9O3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdiwhMCksKCk9PnthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdiwhMCl9fSkpKSx4eCguLi5kKX1uZ09u'@;
put 'RGVzdHJveSgpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyYWdJdGVtKGEpKSx0aGlzLl9kcm9wSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcm9wQ29udGFpbmVyKGEpKSx0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpLHRoaXMucG9pbnRl'@;
put 'ck1vdmUuY29tcGxldGUoKSx0aGlzLnBvaW50ZXJVcC5jb21wbGV0ZSgpfV9jbGVhckdsb2JhbExpc3RlbmVycygpe3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChhLGQpPT57dGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGEuaGFuZGxlcixhLm9wdGlvbnMpfSks'@;
put 'dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmNsZWFyKCl9X2xvYWRSZXNldHMoKXtpZighTkwuaGFzKHRoaXMuX2FwcFJlZikpe05MLmFkZCh0aGlzLl9hcHBSZWYpO2NvbnN0IGE9cFIoaUhlLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3J9KTt0aGlzLl9hcHBS'@;
put 'ZWYub25EZXN0cm95KCgpPT57TkwuZGVsZXRlKHRoaXMuX2FwcFJlZiksMD09PU5MLnNpemUmJmEuZGVzdHJveSgpfSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKEdhKSxDcihtbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0'@;
put 'b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHNIZT17ZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1fTtsZXQgVkw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQs'@;
put 'aCxmKXt0aGlzLl9kb2N1bWVudD1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWZ9Y3JlYXRlRHJhZyhhLGQ9c0hlKXtyZXR1cm4gbmV3IFFGZShhLGQsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0'@;
put 'UnVsZXIsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSl9Y3JlYXRlRHJvcExpc3QoYSl7cmV0dXJuIG5ldyBuSGUoYSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihtbyksQ3IoR2EpLENyKFJMKSxDcihhSGUpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBPeD1uZXcgU3QoIkNES19E'@;
put 'UkFHX1BBUkVOVCIpLEUxZT1uZXcgU3QoIkNka0RyYWdIYW5kbGUiKTtsZXQgVDFlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfWNv'@;
put 'bnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50PWEsdGhpcy5fcGFyZW50RHJhZz1kLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgR24sdGhpcy5fZGlzYWJsZWQ9ITEsZD8uX2FkZEhhbmRsZSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3BhcmVudERyYWc/Ll9yZW1vdmVIYW5kbGUodGhpcyks'@;
put 'dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoUWkpLCRlKE94LDEyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnSGFuZGxlIiwi'@;
put 'Il1dLGhvc3RBdHRyczpbMSwiY2RrLWRyYWctaGFuZGxlIl0saW5wdXRzOntkaXNhYmxlZDpbVm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0RyYWdIYW5kbGVEaXNhYmxlZCIsImRpc2FibGVkIixzMV19LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3VhKFt7cHJvdmlkZTpFMWUs'@;
put 'dXNlRXhpc3Rpbmc6Y31dKSx6bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGtZPW5ldyBTdCgiQ0RLX0RSQUdfQ09ORklHIiksRFk9bmV3IFN0KCJDZGtEcm9wTGlzdCIpO2xldCBJWT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9kcmFnSW5zdGFuY2VzPVtdfWdldCBkaXNhYmxlZCgpe3Jl'@;
put 'dHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWEsdGhpcy5fZHJhZ1JlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZH1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJ'@;
put 'LEcscmUsdWUseWUpe3RoaXMuZWxlbWVudD1hLHRoaXMuZHJvcENvbnRhaW5lcj1kLHRoaXMuX25nWm9uZT1mLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9dix0aGlzLl9kaXI9SSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yZSx0aGlzLl9zZWxmSGFuZGxlPXVlLHRoaXMuX3BhcmVudERyYWc9'@;
put 'eWUsdGhpcy5fZGVzdHJveWVkPW5ldyBHbix0aGlzLl9oYW5kbGVzPW5ldyBKcihbXSksdGhpcy5zdGFydGVkPW5ldyBLcix0aGlzLnJlbGVhc2VkPW5ldyBLcix0aGlzLmVuZGVkPW5ldyBLcix0aGlzLmVudGVyZWQ9bmV3IEtyLHRoaXMuZXhpdGVkPW5ldyBLcix0aGlzLmRyb3BwZWQ9bmV3'@;
put 'IEtyLHRoaXMubW92ZWQ9bmV3IFF0KEVlPT57Y29uc3QgQmU9dGhpcy5fZHJhZ1JlZi5tb3ZlZC5waXBlKFByKEdlPT4oe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpHZS5wb2ludGVyUG9zaXRpb24sZXZlbnQ6R2UuZXZlbnQsZGVsdGE6R2UuZGVsdGEsZGlzdGFuY2U6R2UuZGlzdGFu'@;
put 'Y2V9KSkpLnN1YnNjcmliZShFZSk7cmV0dXJuKCk9PntCZS51bnN1YnNjcmliZSgpfX0pLHRoaXMuX2RyYWdSZWY9Ry5jcmVhdGVEcmFnKGEse2RyYWdTdGFydFRocmVzaG9sZDpNJiZudWxsIT1NLmRyYWdTdGFydFRocmVzaG9sZD9NLmRyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJl'@;
put 'Y3Rpb25DaGFuZ2VUaHJlc2hvbGQ6TSYmbnVsbCE9TS5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkP00ucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1LHpJbmRleDpNPy56SW5kZXh9KSx0aGlzLl9kcmFnUmVmLmRhdGE9dGhpcyxjLl9kcmFnSW5zdGFuY2VzLnB1c2go'@;
put 'dGhpcyksTSYmdGhpcy5fYXNzaWduRGVmYXVsdHMoTSksZCYmKHRoaXMuX2RyYWdSZWYuX3dpdGhEcm9wQ29udGFpbmVyKGQuX2Ryb3BMaXN0UmVmKSxkLmFkZEl0ZW0odGhpcykpLHRoaXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2RyYWdS'@;
put 'ZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgpe3RoaXMuX2RyYWdSZWYucmVzZXQoKX1nZXRGcmVl'@;
put 'RHJhZ1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0RnJlZURyYWdQb3NpdGlvbigpfXNldEZyZWVEcmFnUG9zaXRpb24oYSl7dGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxh'@;
put 'cigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGdoKDEpLEgwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksdGhpcy5fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKSx0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdS'@;
put 'ZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfSl9KX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEucm9vdEVsZW1lbnRTZWxlY3RvcixoPWEuZnJlZURyYWdQb3NpdGlvbjtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSxoJiYh'@;
put 'aC5maXJzdENoYW5nZSYmdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1uZ09uRGVzdHJveSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhpcyk7'@;
put 'Y29uc3QgYT1jLl9kcmFnSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJhZ0luc3RhbmNlcy5zcGxpY2UoYSwxKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9oYW5kbGVzLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9k'@;
put 'ZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKX0pfV9hZGRIYW5kbGUoYSl7Y29uc3QgZD10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCk7ZC5wdXNoKGEpLHRoaXMuX2hhbmRsZXMubmV4dChkKX1fcmVtb3ZlSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFuZGxlcy5n'@;
put 'ZXRWYWx1ZSgpLGg9ZC5pbmRleE9mKGEpO2g+LTEmJihkLnNwbGljZShoLDEpLHRoaXMuX2hhbmRsZXMubmV4dChkKSl9X3NldFByZXZpZXdUZW1wbGF0ZShhKXt0aGlzLl9wcmV2aWV3VGVtcGxhdGU9YX1fcmVzZXRQcmV2aWV3VGVtcGxhdGUoYSl7YT09PXRoaXMuX3ByZXZpZXdUZW1wbGF0'@;
put 'ZSYmKHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1udWxsKX1fc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShhKXt0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWF9X3Jlc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShhKXthPT09dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSYmKHRoaXMuX3BsYWNlaG9sZGVy'@;
put 'VGVtcGxhdGU9bnVsbCl9X3VwZGF0ZVJvb3RFbGVtZW50KCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtsZXQgZD1hO3RoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmKGQ9dm9pZCAwIT09YS5jbG9zZXN0P2EuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpOmEu'@;
put 'cGFyZW50RWxlbWVudD8uY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVmLndpdGhSb290RWxlbWVudChkfHxhKX1fZ2V0Qm91bmRhcnlFbGVtZW50KCl7Y29uc3QgYT10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/'@;
put 'dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdChhKTpFZChhKTpudWxsfV9zeW5jSW5wdXRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9PntpZighYS5pc0RyYWdnaW5nKCkpe2NvbnN0IGQ9dGhpcy5fZGlyLGg9dGhpcy5kcmFnU3RhcnREZWxheSxmPXRoaXMuX3Bs'@;
put 'YWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLHY9dGhpcy5fcHJldmlld1Rl'@;
put 'bXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wcmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6dGhpcy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9'@;
put 'Om51bGw7YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLmRyYWdTdGFydERlbGF5PSJvYmplY3QiPT10eXBlb2YgaCYmaD9oOmQ3KGgpLGEuY29uc3RyYWluUG9zaXRpb249dGhpcy5jb25zdHJhaW5Qb3NpdGlvbixhLnByZXZpZXdDbGFzcz10aGlz'@;
put 'LnByZXZpZXdDbGFzcyxhLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5fZ2V0Qm91bmRhcnlFbGVtZW50KCkpLndpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGYpLndpdGhQcmV2aWV3VGVtcGxhdGUodikud2l0aFByZXZpZXdDb250YWluZXIodGhpcy5wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFs'@;
put 'IiksZCYmYS53aXRoRGlyZWN0aW9uKGQudmFsdWUpfX0pLGEuYmVmb3JlU3RhcnRlZC5waXBlKGdoKDEpKS5zdWJzY3JpYmUoKCk9PntpZih0aGlzLl9wYXJlbnREcmFnKXJldHVybiB2b2lkIGEud2l0aFBhcmVudCh0aGlzLl9wYXJlbnREcmFnLl9kcmFnUmVmKTtsZXQgZD10aGlzLmVsZW1l'@;
put 'bnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7ZDspe2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZHJhZyIpKXthLndpdGhQYXJlbnQoYy5fZHJhZ0luc3RhbmNlcy5maW5kKGg9PmguZWxlbWVudC5uYXRpdmVFbGVtZW50PT09ZCk/Ll9kcmFnUmVmfHxudWxsKTticmVh'@;
put 'a31kPWQucGFyZW50RWxlbWVudH19KX1faGFuZGxlRXZlbnRzKGEpe2Euc3RhcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc3RhcnRlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnJlbGVhc2VkLnN1'@;
put 'YnNjcmliZShkPT57dGhpcy5yZWxlYXNlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSl9KSxhLmVuZGVkLnN1YnNjcmliZShkPT57dGhpcy5lbmRlZC5lbWl0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2'@;
put 'ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0'@;
put 'ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOnRoaXN9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5j'@;
put 'dXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGl0ZW06dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQ'@;
put 'b2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSl9KX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnU3RhcnREZWxheTpoLGNvbnN0cmFpblBvc2l0aW9uOmYscHJldmlld0NsYXNzOnYsYm91bmRhcnlFbGVtZW50Ok0sZHJhZ2dpbmdEaXNhYmxlZDpJLHJvb3RF'@;
put 'bGVtZW50U2VsZWN0b3I6RyxwcmV2aWV3Q29udGFpbmVyOnJlfT1hO3RoaXMuZGlzYWJsZWQ9ST8/ITEsdGhpcy5kcmFnU3RhcnREZWxheT1ofHwwLGQmJih0aGlzLmxvY2tBeGlzPWQpLGYmJih0aGlzLmNvbnN0cmFpblBvc2l0aW9uPWYpLHYmJih0aGlzLnByZXZpZXdDbGFzcz12KSxNJiYo'@;
put 'dGhpcy5ib3VuZGFyeUVsZW1lbnQ9TSksRyYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1HKSxyZSYmKHRoaXMucHJldmlld0NvbnRhaW5lcj1yZSl9X3NldHVwSGFuZGxlc0xpc3RlbmVyKCl7dGhpcy5faGFuZGxlcy5waXBlKFp1KGE9Pntjb25zdCBkPWEubWFwKGg9PmguZWxlbWVudCk7'@;
put 'dGhpcy5fc2VsZkhhbmRsZSYmdGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiZkLnB1c2godGhpcy5lbGVtZW50KSx0aGlzLl9kcmFnUmVmLndpdGhIYW5kbGVzKGQpfSksajEoYT0+eHgoLi4uYS5tYXAoZD0+ZC5fc3RhdGVDaGFuZ2VzLnBpcGUoVDIoZCkpKSkpLEgwKHRoaXMuX2Rlc3Ryb3ll'@;
put 'ZCkpLnN1YnNjcmliZShhPT57Y29uc3QgZD10aGlzLl9kcmFnUmVmLGg9YS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7YS5kaXNhYmxlZD9kLmRpc2FibGVIYW5kbGUoaCk6ZC5lbmFibGVIYW5kbGUoaCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KSgkZShRaSksJGUoRFksMTIpLCRlKG1vKSwkZShHYSksJGUoVHMpLCRlKGtZLDgpLCRlKGRtLDgpLCRlKFZMKSwkZSh4byksJGUoRTFlLDEwKSwkZShPeCwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxob3N0QXR0'@;
put 'cnM6WzEsImNkay1kcmFnIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJjZGstZHJhZy1kaXNhYmxlZCIsaC5kaXNhYmxlZCkoImNkay1kcmFnLWRyYWdnaW5nIixoLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSl9LGlucHV0czp7ZGF0YTpbVm4uTm9uZSwi'@;
put 'Y2RrRHJhZ0RhdGEiLCJkYXRhIl0sbG9ja0F4aXM6W1ZuLk5vbmUsImNka0RyYWdMb2NrQXhpcyIsImxvY2tBeGlzIl0scm9vdEVsZW1lbnRTZWxlY3RvcjpbVm4uTm9uZSwiY2RrRHJhZ1Jvb3RFbGVtZW50Iiwicm9vdEVsZW1lbnRTZWxlY3RvciJdLGJvdW5kYXJ5RWxlbWVudDpbVm4uTm9u'@;
put 'ZSwiY2RrRHJhZ0JvdW5kYXJ5IiwiYm91bmRhcnlFbGVtZW50Il0sZHJhZ1N0YXJ0RGVsYXk6W1ZuLk5vbmUsImNka0RyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXSxmcmVlRHJhZ1Bvc2l0aW9uOltWbi5Ob25lLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImZyZWVEcmFnUG9z'@;
put 'aXRpb24iXSxkaXNhYmxlZDpbVm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0RyYWdEaXNhYmxlZCIsImRpc2FibGVkIixzMV0sY29uc3RyYWluUG9zaXRpb246W1ZuLk5vbmUsImNka0RyYWdDb25zdHJhaW5Qb3NpdGlvbiIsImNvbnN0cmFpblBvc2l0aW9uIl0scHJldmlld0Ns'@;
put 'YXNzOltWbi5Ob25lLCJjZGtEcmFnUHJldmlld0NsYXNzIiwicHJldmlld0NsYXNzIl0scHJldmlld0NvbnRhaW5lcjpbVm4uTm9uZSwiY2RrRHJhZ1ByZXZpZXdDb250YWluZXIiLCJwcmV2aWV3Q29udGFpbmVyIl19LG91dHB1dHM6e3N0YXJ0ZWQ6ImNka0RyYWdTdGFydGVkIixyZWxlYXNl'@;
put 'ZDoiY2RrRHJhZ1JlbGVhc2VkIixlbmRlZDoiY2RrRHJhZ0VuZGVkIixlbnRlcmVkOiJjZGtEcmFnRW50ZXJlZCIsZXhpdGVkOiJjZGtEcmFnRXhpdGVkIixkcm9wcGVkOiJjZGtEcmFnRHJvcHBlZCIsbW92ZWQ6ImNka0RyYWdNb3ZlZCJ9LGV4cG9ydEFzOlsiY2RrRHJhZyJdLHN0YW5kYWxv'@;
put 'bmU6ITAsZmVhdHVyZXM6W3VhKFt7cHJvdmlkZTpPeCx1c2VFeGlzdGluZzpjfV0pLHpsLGJsXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUlk9bmV3IFN0KCJDZGtEcm9wTGlzdEdyb3VwIik7bGV0IEExZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faXRlbXM9bmV3IFNldCx0'@;
put 'aGlzLmRpc2FibGVkPSExfW5nT25EZXN0cm95KCl7dGhpcy5faXRlbXMuY2xlYXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0R3Jv'@;
put 'dXAiLCIiXV0saW5wdXRzOntkaXNhYmxlZDpbVm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0R3JvdXBEaXNhYmxlZCIsImRpc2FibGVkIixzMV19LGV4cG9ydEFzOlsiY2RrRHJvcExpc3RHcm91cCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3VhKFt7cHJvdmlk'@;
put 'ZTpSWSx1c2VFeGlzdGluZzpjfV0pLHpsXX0pfX1yZXR1cm4gY30pKCksbEhlPTAsazFlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX2Ryb3BMaXN0cz1bXX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVk'@;
put 'fXNldCBkaXNhYmxlZChhKXt0aGlzLl9kcm9wTGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZD1hfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEkpe3RoaXMuZWxlbWVudD1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWgsdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1mLHRoaXMuX2Rpcj12'@;
put 'LHRoaXMuX2dyb3VwPU0sdGhpcy5fZGVzdHJveWVkPW5ldyBHbix0aGlzLmNvbm5lY3RlZFRvPVtdLHRoaXMuaWQ9ImNkay1kcm9wLWxpc3QtIitsSGUrKyx0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuZHJvcHBlZD1uZXcgS3IsdGhp'@;
put 'cy5lbnRlcmVkPW5ldyBLcix0aGlzLmV4aXRlZD1uZXcgS3IsdGhpcy5zb3J0ZWQ9bmV3IEtyLHRoaXMuX3Vuc29ydGVkSXRlbXM9bmV3IFNldCx0aGlzLl9kcm9wTGlzdFJlZj1kLmNyZWF0ZURyb3BMaXN0KGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmRhdGE9dGhpcyxJJiZ0aGlzLl9hc3NpZ25E'@;
put 'ZWZhdWx0cyhJKSx0aGlzLl9kcm9wTGlzdFJlZi5lbnRlclByZWRpY2F0ZT0oRyxyZSk9PnRoaXMuZW50ZXJQcmVkaWNhdGUoRy5kYXRhLHJlLmRhdGEpLHRoaXMuX2Ryb3BMaXN0UmVmLnNvcnRQcmVkaWNhdGU9KEcscmUsdWUpPT50aGlzLnNvcnRQcmVkaWNhdGUoRyxyZS5kYXRhLHVlLmRh'@;
put 'dGEpLHRoaXMuX3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKHRoaXMuX2Ryb3BMaXN0UmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLGMuX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLE0mJk0uX2l0ZW1zLmFkZCh0aGlzKX1hZGRJdGVtKGEpe3RoaXMuX3Vuc29ydGVk'@;
put 'SXRlbXMuYWRkKGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfXJlbW92ZUl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5kZWxldGUoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRo'@;
put 'UmVmKCl9Z2V0U29ydGVkSXRlbXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl91bnNvcnRlZEl0ZW1zKS5zb3J0KChhLGQpPT5hLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpKSZOb2Rl'@;
put 'LkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8tMToxKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9Yy5fZHJvcExpc3RzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJvcExpc3RzLnNwbGljZShhLDEpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZGVsZXRlKHRoaXMpLHRoaXMu'@;
put 'X3Vuc29ydGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9kcm9wTGlzdFJlZi5kaXNwb3NlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24oYSl7dGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUo'@;
put 'VDIodGhpcy5fZGlyLnZhbHVlKSxIMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZD0+YS53aXRoRGlyZWN0aW9uKGQpKSxhLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBiRmUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/YzpbY119KHRoaXMu'@;
put 'Y29ubmVjdGVkVG8pLm1hcChoPT4ic3RyaW5nIj09dHlwZW9mIGg/Yy5fZHJvcExpc3RzLmZpbmQodj0+di5pZD09PWgpOmgpO2lmKHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZm9yRWFjaChoPT57LTE9PT1kLmluZGV4T2YoaCkmJmQucHVzaChoKX0pLCF0aGlzLl9zY3JvbGxh'@;
put 'YmxlUGFyZW50c1Jlc29sdmVkKXtjb25zdCBoPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuZWxlbWVudCkubWFwKGY9PmYuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhTY3JvbGxhYmxl'@;
put 'UGFyZW50cyhoKSx0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkPSEwfWEuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zb3J0aW5nRGlzYWJsZWQ9dGhpcy5zb3J0aW5nRGlzYWJsZWQsYS5hdXRvU2Nyb2xsRGlzYWJsZWQ9dGhpcy5hdXRv'@;
put 'U2Nyb2xsRGlzYWJsZWQsYS5hdXRvU2Nyb2xsU3RlcD1kNyh0aGlzLmF1dG9TY3JvbGxTdGVwLDIpLGEuY29ubmVjdGVkVG8oZC5maWx0ZXIoaD0+aCYmaCE9PXRoaXMpLm1hcChoPT5oLl9kcm9wTGlzdFJlZikpLndpdGhPcmllbnRhdGlvbih0aGlzLm9yaWVudGF0aW9uKX0pfV9oYW5kbGVF'@;
put 'dmVudHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6dGhpcyxp'@;
put 'dGVtOmQuaXRlbS5kYXRhLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxh'@;
put 'LnNvcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc29ydGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRy'@;
put 'b3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOmQuaXRlbS5kYXRhLGlzUG9pbnRl'@;
put 'ck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHh4KGEucmVjZWl2aW5nU3RhcnRlZCxhLnJl'@;
put 'Y2VpdmluZ1N0b3BwZWQpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdnaW5nRGlzYWJsZWQ6aCxzb3J0aW5nRGlzYWJsZWQ6ZixsaXN0QXV0b1Njcm9sbERpc2FibGVk'@;
put 'OnYsbGlzdE9yaWVudGF0aW9uOk19PWE7dGhpcy5kaXNhYmxlZD1oPz8hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD1mPz8hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD12Pz8hMSx0aGlzLm9yaWVudGF0aW9uPU18fCJ2ZXJ0aWNhbCIsZCYmKHRoaXMubG9ja0F4aXM9ZCl9X3N5bmNJdGVtc1dp'@;
put 'dGhSZWYoKXt0aGlzLl9kcm9wTGlzdFJlZi53aXRoSXRlbXModGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChhPT5hLl9kcmFnUmVmKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoUWkpLCRlKFZMKSwkZSh4byksJGUoeGIpLCRlKGRtLDgp'@;
put 'LCRlKFJZLDEyKSwkZShrWSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdCIsIiJdLFsiY2RrLWRyb3AtbGlzdCJdXSxob3N0QXR0cnM6WzEsImNkay1kcm9wLWxpc3QiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5j'@;
put 'dGlvbihkLGgpezImZCYmKGhyKCJpZCIsaC5pZCksVHIoImNkay1kcm9wLWxpc3QtZGlzYWJsZWQiLGguZGlzYWJsZWQpKCJjZGstZHJvcC1saXN0LWRyYWdnaW5nIixoLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkpKCJjZGstZHJvcC1saXN0LXJlY2VpdmluZyIsaC5fZHJvcExpc3RSZWYu'@;
put 'aXNSZWNlaXZpbmcoKSkpfSxpbnB1dHM6e2Nvbm5lY3RlZFRvOltWbi5Ob25lLCJjZGtEcm9wTGlzdENvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxkYXRhOltWbi5Ob25lLCJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246W1ZuLk5vbmUsImNka0Ryb3BMaXN0T3JpZW50'@;
put 'YXRpb24iLCJvcmllbnRhdGlvbiJdLGlkOiJpZCIsbG9ja0F4aXM6W1ZuLk5vbmUsImNka0Ryb3BMaXN0TG9ja0F4aXMiLCJsb2NrQXhpcyJdLGRpc2FibGVkOltWbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3REaXNhYmxlZCIsImRpc2FibGVkIixzMV0sc29ydGlu'@;
put 'Z0Rpc2FibGVkOltWbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWQiLCJzb3J0aW5nRGlzYWJsZWQiLHMxXSxlbnRlclByZWRpY2F0ZTpbVm4uTm9uZSwiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGljYXRlIl0sc29y'@;
put 'dFByZWRpY2F0ZTpbVm4uTm9uZSwiY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlIiwic29ydFByZWRpY2F0ZSJdLGF1dG9TY3JvbGxEaXNhYmxlZDpbVm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0QXV0b1Njcm9sbERpc2FibGVkIiwiYXV0b1Njcm9sbERpc2FibGVk'@;
put 'IixzMV0sYXV0b1Njcm9sbFN0ZXA6W1ZuLk5vbmUsImNka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXAiLCJhdXRvU2Nyb2xsU3RlcCJdfSxvdXRwdXRzOntkcm9wcGVkOiJjZGtEcm9wTGlzdERyb3BwZWQiLGVudGVyZWQ6ImNka0Ryb3BMaXN0RW50ZXJlZCIsZXhpdGVkOiJjZGtEcm9wTGlzdEV4'@;
put 'aXRlZCIsc29ydGVkOiJjZGtEcm9wTGlzdFNvcnRlZCJ9LGV4cG9ydEFzOlsiY2RrRHJvcExpc3QiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt1YShbe3Byb3ZpZGU6UlksdXNlVmFsdWU6dm9pZCAwfSx7cHJvdmlkZTpEWSx1c2VFeGlzdGluZzpjfV0pLHpsXX0pfX1yZXR1cm4gY30pKCks'@;
put 'RDFlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W1ZMXSxpbXBvcnRzOltZRmVdfSl9fXJl'@;
put 'dHVybiBjfSkoKTtjb25zdCB5cz1bIioiXSxoSGU9W1tbImNsci1hY2NvcmRpb24tdGl0bGUiXSxbImNsci1zdGVwLXRpdGxlIl1dLFtbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9uIl1dLCIqIl0sZkhlPVsiY2xyLWFjY29yZGlvbi10aXRsZSwg'@;
put 'Y2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1kZXNjcmlwdGlvbiIsIioiXTtmdW5jdGlvbiBwSGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDkpLEZ0KCJAdG9nZ2xlLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3Qg'@;
put 'aD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGgpKX0pLGRlKDEsImRpdiIsMTApLFdyKDIsMiksaGUoKSgpfTImYyYmTWUoIkB0b2dnbGUiLHZvaWQgMCl9ZnVuY3Rpb24gZ0hlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWko'@;
put 'MCksZGUoMSwiZGl2IiwyKSgyLCJkaXYiLDMpKDMsImJ1dHRvbiIsNCwwKSxRbyg1LCJhc3luYyIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50b2dnbGVQYW5lbCgpKX0pLGRlKDYsInNwYW4iLDUpLFd0KDcsImNkcy1pY29uIiw2KSxoZSgpLFdyKDgpLFdy'@;
put 'KDksMSksaGUoKSgpLGRlKDEwLCJkaXYiLDcpLGd0KDExLHBIZSwzLDEsImRpdiIsOCksaGUoKSgpLHNpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPWwuJGltcGxpY2l0LGg9TGUoKTtmZSgpLE1lKCJuZ0NsYXNzIixoLmdldFBhbmVsU3RhdGVDbGFzc2VzKGQpKSxmZSgpLGhyKCJyb2xlIixo'@;
put 'LmhlYWRpbmdFbmFibGVkfHxoLmV4cGxpY2l0SGVhZGluZ0xldmVsPyJoZWFkaW5nIjpudWxsKSgiYXJpYS1sZXZlbCIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD9oLmhlYWRpbmdMZXZlbDpudWxsKSxmZSgpLFRyKCJjbHItYWNjb3JkaW9uLWhlYWRlci1oYXMt'@;
put 'ZGVzY3JpcHRpb24iLChudWxsPT0oYT1BYyg1LDE0LGguYWNjb3JkaW9uRGVzY3JpcHRpb24uY2hhbmdlcykpP251bGw6YS5sZW5ndGgpfHxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmxlbmd0aCksTWUoImlkIixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQudGVtcGxhdGVJZCkpKCJkaXNhYmxl'@;
put 'ZCIsZC5kaXNhYmxlZCksaHIoImFyaWEtY29udHJvbHMiLCFkLmRpc2FibGVkJiZkLm9wZW4/aC5nZXRBY2NvcmRpb25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKTpudWxsKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuKSxmZSg3KSxNZSgiQHNraXBJbml0aWFsUmVuZGVyIix2b2lkIDApKCJpZCIs'@;
put 'aC5nZXRBY2NvcmRpb25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKSksaHIoImFyaWEtaGlkZGVuIiwhZC5vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQudGVtcGxhdGVJZCkpLGZlKCksTWUoIm5nSWYiLGQub3Blbil9fWNvbnN0IEhIZT1bImNsckxvYWRp'@;
put 'bmciLCIiXTtmdW5jdGlvbiBOSGUoYyxsKXsxJmMmJihhaSgwKSxXdCgxLCJzcGFuIiwzKSxzaSgpKSwyJmMmJihmZSgpLE1lKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gVkhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwic3BhbiIsNCksRnQoIkB2YWxpZGF0'@;
put 'ZWQuZG9uZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGgubG9hZGluZ1N0YXRlQ2hhbmdlKGguYnV0dG9uU3RhdGUuREVGQVVMVCkpfSksaGUoKSxzaSgpfTImYyYmKGZlKCksTWUoIkB2YWxpZGF0ZWQiLHZvaWQgMCkpfWZ1bmN0aW9uIEJIZShjLGwpezEmYyYm'@;
put 'KGRlKDAsInNwYW4iLDUpLFdyKDEpLGhlKCkpLDImYyYmTWUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIGpIZShjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsImJ1dHRvbiIsMSksV3QoMiwiY2RzLWljb24iLDIpLGhlKCksc2koKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxo'@;
put 'cigiYXJpYS1sYWJlbCIsYS5zaWducG9zdFRyaWdnZXJBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0VG9nZ2xlKSxmZSgpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuaW5mbyl9fWNvbnN0IHpIZT1bW1siY2xyLXNpZ25wb3N0LXRpdGxlIl1dLCIqIl0s'@;
put 'VUhlPVsiY2xyLXNpZ25wb3N0LXRpdGxlIiwiKiJdLFpIZT1bW1siIiwiY2xyQ2hlY2tib3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxbWyJsYWJlbCJdXV0sV0hlPVsiW2NsckNoZWNrYm94XSxbY2xyVG9nZ2xlXSIsImxhYmVsIl07ZnVuY3Rpb24gWUhlKGMsbCl7MSZjJiZXdCgwLCJs'@;
put 'YWJlbCIpfWNvbnN0IEdIZT1bW1sibGFiZWwiXV0sW1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sJEhlPVsibGFi'@;
put 'ZWwiLCJjbHItY2hlY2tib3gtd3JhcHBlcixjbHItdG9nZ2xlLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBLSGUoYyxsKXsxJmMmJld0KDAsImxhYmVsIil9ZnVuY3Rpb24gWEhlKGMsbCl7'@;
put 'MSZjJiYoZGUoMCwiZGl2IiwzKSxXcigxLDIpLGhlKCkpfWZ1bmN0aW9uIHFIZShjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEpIZShjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIFFIZShjLGwpezEmYyYmV3IoMCwzLFsiKm5nSWYiLCJzaG93SW52'@;
put 'YWxpZCJdKX1mdW5jdGlvbiBlTmUoYyxsKXsxJmMmJldyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIHROZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksZ3QoMSxxSGUsMSwwLCJjZHMtaWNvbiIsNCkoMixKSGUsMSwwLCJjZHMtaWNvbiIsNSkoMyxRSGUsMSwwLCJu'@;
put 'Zy1jb250ZW50IiwwKSg0LGVOZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGEuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lm'@;
put 'IixhLnNob3dWYWxpZCl9fWNvbnN0IG5OZT1bImNscktleUZvY3VzIiwiIl0sb05lPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dFByZWZpeCIsIiJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyIiLCJjbHJJbnB1dFN1ZmZpeCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1si'@;
put 'Y2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sbE5lPVsibGFiZWwiLCJbY2xySW5wdXRQcmVmaXhdIiwiW2NscklucHV0XSIsIltjbHJJbnB1dFN1ZmZpeF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9s'@;
put 'LXN1Y2Nlc3MiXTtmdW5jdGlvbiBjTmUoYyxsKXsxJmMmJld0KDAsImxhYmVsIil9ZnVuY3Rpb24gdU5lKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gZE5lKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gaE5lKGMsbCl7MSZjJiZXcigwLDQsWyIq'@;
put 'bmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gZk5lKGMsbCl7MSZjJiZXcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIHBOZShjLGwpezEmYyYmV3IoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gU05lKGMsbCl7MSZjJiZXcigwKX1jb25zdCBN'@;
put 'TmU9WyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIl07ZnVuY3Rpb24geE5lKGMsbCl7aWYoMSZjJiYoZGUoMCwic2VjdGlvbiIsMSksV3IoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7VHIoImFjdGl2ZSIsYS5hY3RpdmUpLE1lKCJpZCIsYS50YWJDb250ZW50SWQpKCJoaWRkZW4iLCFhLmFj'@;
put 'dGl2ZSksaHIoImFyaWEtbGFiZWxsZWRieSIsYS5hcmlhTGFiZWxsZWRCeSkoImFyaWEtaGlkZGVuIiwhYS5hY3RpdmUpfX1jb25zdCBFTmU9WyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciJdLFROZT1bW1siY2xyLXRhYnMtYWN0aW9ucyJdXV0sQU5lPVsiY2xyLXRhYnMtYWN0aW9ucyJdO2Z1'@;
put 'bmN0aW9uIGtOZShjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsImxpIiw1KSxMbCgyLDYpLGhlKCksc2koKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX19ZnVuY3Rpb24gRE5l'@;
put 'KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxrTmUsMywxLCJuZy1jb250YWluZXIiLDQpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSxNZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIElOZShjLGwpezEmYyYm'@;
put 'TGwoMCw2KSwyJmMmJk1lKCJuZ1RlbXBsYXRlT3V0bGV0IixMZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rpb24gUk5lKGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxJTmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSxzaSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQsZD1MZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnRhYnNJZD09PWQudGFic0lkJiZhLmluT3ZlcmZsb3cpfX1mdW5jdGlvbiBMTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDEyKSxGdCgia2V5ZG93bi5lc2NhcGUi'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNsb3NlT25Fc2NhcGVLZXkoKSl9LDAsSzMpKCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSksTGUoKTtjb25zdCBmPWRhKDQpO3JldHVybiBDdChMZSgpLmNsb3NlT25PdXRzaWRlQ2xpY2soaCxmKSl9LCExLEszKSgiZm9jdXNvdXQi'@;
put 'LGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS5jbG9zZU9uRm9jdXNPdXQoaCkpfSksZ3QoMSxSTmUsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoIm5nRm9yT2YiLGEudGFiTGlua0RpcmVjdGl2ZXMpfX1mdW5jdGlvbiBP'@;
put 'TmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJkaXYiLDcpKDIsImxpIiw4KSgzLCJidXR0b24iLDksMSksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5fbW91c2Vkb3duPSEwKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'd3QoYSksQ3QoTGUoKS5vcGVuT3ZlcmZsb3dPbkZvY3VzKCkpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnRvZ2dsZU92ZXJmbG93T25DbGljaygpKX0pLFd0KDUsImNkcy1pY29uIiwxMCksaGUoKSgpLGd0KDYsTE5lLDIsMSwiY2xyLXRhYi1vdmVyZmxvdy1j'@;
put 'b250ZW50IiwxMSksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksVHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxmZSgyKSxUcigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksaHIoInRhYmluZGV4Iixh'@;
put 'LmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUpLGZlKDIpLGhyKCJzdGF0dXMiLGEudG9nZ2xlU2VydmljZS5vcGVuPyJpbmZvIjpudWxsKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'Lm1vcmUpLGZlKCksTWUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gUE5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxX'@;
put 'dCgxLCJjZHMtaWNvbiIsNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtUcigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxocigiYXJpYS1jb250cm9scyIsYS5jb250ZW50SWQpKCJhcmlhLWV4cGFuZGVkIixhLmFyaWFFeHBhbmRlZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8'@;
put 'fGEuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKSxmZSgpLGhyKCJkaXJlY3Rpb24iLGEuY29sbGFwc2VkPyJyaWdodCI6ImxlZnQiKX19ZnVuY3Rpb24gRk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY29sbGFwc2VkPSExKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7aHIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1sYWJlbCIsYS50b2dnbGVMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMudmVydGljYWxOYXZUb2dnbGUp'@;
put 'fX1jb25zdCBWTmU9WyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXSxCTmU9W1tbIiIsImNsclZlcnRpY2FsTmF2SWNvbiIsIiJdXSwiKiJdLGpOZT1bIltjbHJWZXJ0aWNhbE5hdkljb25dIiwiKiJdO2Z1bmN0aW9uIHpOZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSgxLCJzcGFuIiksT2Uo'@;
put 'MiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxocigiYXJpYS1sYWJlbCIsYS5kYXkpLGZlKCksU3IoYS5uYXJyb3cpfX1mdW5jdGlvbiBVTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJ0ZCIsNykoMSwiY2xyLWRheSIsOCksRnQoInNlbGVjdERheSIs'@;
put 'ZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnNldFNlbGVjdGVkRGF5KGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgiY2xyRGF5VmlldyIsYSl9fWZ1bmN0aW9uIFpOZShjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw1KSxndCgxLFVOZSwy'@;
put 'LDEsInRkIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIFdOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3Jl'@;
put 'dHVybiBDdChMZSgpLmNoYW5nZU1vbnRoKGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXg7cmV0dXJuIEN0KExlKCkub25Ib3ZlcihoKSl9KSxPZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgpO1RyKCJp'@;
put 'cy1zZWxlY3RlZCIsaC5pc1NlbGVjdGVkKGQpKSgiaXMtc3RhcnQtcmFuZ2UiLGguZ2V0SXNSYW5nZVN0YXJ0TW9udGgoZCkpKCJpcy1lbmQtcmFuZ2UiLGguZ2V0SXNSYW5nZUVuZE1vbnRoKGQpKSgiaW4tcmFuZ2UiLGguaXNJblJhbmdlKGQpKSgiaXMtdG9kYXkiLGguY2FsZW5kYXJZZWFy'@;
put 'PT09aC5jdXJyZW50Q2FsZW5kYXJZZWFyJiZkPT09aC5jdXJyZW50Q2FsZW5kYXJNb250aCksaHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxmZSgpLExyKCIgIixhLCIgIil9fWZ1bmN0aW9uIFlOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5jaGFuZ2VZZWFyKGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLm9uSG92ZXIoaCkpfSksT2UoMSksaGUoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgpO1RyKCJpcy1zZWxlY3RlZCIsYT09PWQuc2VsZWN0ZWRTdGFydFllYXJ8fGE9PT1kLnNlbGVjdGVkRW5kWWVhcikoImlzLXN0YXJ0LXJhbmdlIixkLmdldElzUmFuZ2VTdGFydFllYXIoYSkpKCJpcy1lbmQtcmFuZ2UiLGQuZ2V0SXNS'@;
put 'YW5nZUVuZFllYXIoYSkpKCJpbi1yYW5nZSIsZC5pc0luUmFuZ2UoYSkpKCJpcy10b2RheSIsZC5pc0N1cnJlbnRDYWxlbmRhclllYXIoYSkpLGhyKCJ0YWJpbmRleCIsZC5nZXRUYWJJbmRleChhKSksZmUoKSxMcigiICIsYSwiICIpfX1mdW5jdGlvbiBHTmUoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9T24oKTthaSgwKSxkZSgxLCJhIiw2KSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLm9uUmFuZ2VPcHRpb25TZWxlY3QoaCkpfSkoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3Jl'@;
put 'dHVybiBDdChMZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pLE9lKDIpLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxocigiYXJpYS1sYWJlbCIsbnVsbD09YT9udWxsOmEubGFiZWwpLGZlKCksTHIoIiAiLGEubGFiZWwsIiAiKX19ZnVuY3Rpb24gJE5l'@;
put 'KGMsbCl7MSZjJiZMbCgwKX1mdW5jdGlvbiBLTmUoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJjbHItdmVydGljYWwtbmF2IiwyKSxndCgyLEdOZSwzLDIsIm5nLWNvbnRhaW5lciIsMyksaGUoKSxkZSgzLCJkaXYiLDQpLGd0KDQsJE5lLDEsMCwibmctY29udGFpbmVyIiw1KSxoZSgpLHNp'@;
put 'KCkpLDImYyl7Y29uc3QgYT1MZSgpLGQ9ZGEoMik7ZmUoMiksTWUoIm5nRm9yT2YiLGEuZGF0ZVJhbmdlT3B0aW9ucyksZmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBYTmUoYyxsKXsxJmMmJld0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIHFOZShjLGwp'@;
put 'ezEmYyYmV3QoMCwiY2xyLXllYXJwaWNrZXIiKX1mdW5jdGlvbiBKTmUoYyxsKXsxJmMmJld0KDAsImNsci1kYXlwaWNrZXIiKX1mdW5jdGlvbiBRTmUoYyxsKXsxJmMmJld0KDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiKX1mdW5jdGlvbiBlVmUoYyxsKXtpZigxJmMmJmd0KDAsWE5lLDEs'@;
put 'MCwiY2xyLW1vbnRocGlja2VyIiw3KSgxLHFOZSwxLDAsImNsci15ZWFycGlja2VyIiw3KSgyLEpOZSwxLDAsImNsci1kYXlwaWNrZXIiLDcpKDMsUU5lLDEsMCwiY2xyLWRhdGVwaWNrZXItYWN0aW9ucyIsNyksMiZjKXtjb25zdCBhPUxlKCk7TWUoIm5nSWYiLGEuaXNNb250aFZpZXcpLGZl'@;
put 'KCksTWUoIm5nSWYiLGEuaXNZZWFyVmlldyksZmUoKSxNZSgibmdJZiIsYS5pc0RheVZpZXcpLGZlKCksTWUoIm5nSWYiLGEuaGFzQWN0aW9uQnV0dG9ucyl9fWNvbnN0IHRWZT1bImFjdGlvbkJ1dHRvbiJdLG5WZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyIiLCJjbHJT'@;
put 'dGFydERhdGUiLCIiXV0sW1siIiwiY2xyRW5kRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sclZlPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJbY2xyU3RhcnREYXRlXSIsIltjbHJFbmRE'@;
put 'YXRlXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIGlWZShjLGwpezEmYyYmV3QoMCwibGFiZWwiKX1mdW5jdGlvbiBhVmUoYyxsKXsxJmMmJihhaSgwKSxXcigxLDIpLGRlKDIsInNwYW4iLDkpLE9lKDMs'@;
put 'Ii0iKSxoZSgpLFdyKDQsMyksc2koKSl9ZnVuY3Rpb24gc1ZlKGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwxMCwwKSxXdCgyLCJjZHMtaWNvbiIsMTEpLGhlKCkpLDImYyYmTWUoImRpc2FibGVkIixMZSgpLmlzSW5wdXREYXRlRGlzYWJsZWQpfWZ1bmN0aW9uIG9WZShjLGwpezEmYyYmV3Qo'@;
put 'MCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiwxMil9ZnVuY3Rpb24gbFZlKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uIGNWZShjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDE0KX1mdW5jdGlvbiB1VmUoYyxsKXsxJmMmJldyKDAsNCxbIipuZ0lmIiwic2hv'@;
put 'd0hlbHBlciJdKX1mdW5jdGlvbiBkVmUoYyxsKXsxJmMmJldyKDAsNSxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gaFZlKGMsbCl7MSZjJiZXcigwLDYsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBtVmU9W1tbImxhYmVsIl1dLFtbIiIsImNsck51bWJlcklucHV0Iiwi'@;
put 'Il1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSx2VmU9WyJsYWJlbCIsIltjbHJOdW1iZXJJbnB1dF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9s'@;
put 'LXN1Y2Nlc3MiXTtmdW5jdGlvbiB5VmUoYyxsKXsxJmMmJld0KDAsImxhYmVsIil9ZnVuY3Rpb24gYlZlKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsMTEpfWZ1bmN0aW9uIF9WZShjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDEyKX1mdW5jdGlvbiB3VmUoYyxsKXsxJmMmJldyKDAsMixb'@;
put 'IipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBDVmUoYyxsKXsxJmMmJldyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gU1ZlKGMsbCl7MSZjJiZXcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBNVmU9W1tbIiIsImNsclJhZGlvIiwiIl1dLFtb'@;
put 'ImxhYmVsIl1dXSx4VmU9WyJbY2xyUmFkaW9dIiwibGFiZWwiXTtmdW5jdGlvbiBFVmUoYyxsKXsxJmMmJld0KDAsImxhYmVsIil9Y29uc3QgVFZlPVtbWyJsYWJlbCJdXSxbWyJjbHItcmFkaW8td3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJy'@;
put 'b3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sQVZlPVsibGFiZWwiLCJjbHItcmFkaW8td3JhcHBlciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIGtWZShjLGwpezEmYyYmV3QoMCwibGFiZWwi'@;
put 'KX1mdW5jdGlvbiBEVmUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMpLFdyKDEsMiksaGUoKSl9ZnVuY3Rpb24gSVZlKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gUlZlKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gTFZlKGMsbCl7MSZjJiZXcigw'@;
put 'LDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIE9WZShjLGwpezEmYyYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gUFZlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzKSxndCgxLElWZSwxLDAsImNkcy1pY29uIiw0KSgyLFJWZSwxLDAsImNkcy1p'@;
put 'Y29uIiw1KSgzLExWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDQsT1ZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsYS5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGEuc2hvd0lu'@;
put 'dmFsaWQpLGZlKCksTWUoIm5nSWYiLGEuc2hvd1ZhbGlkKX19Y29uc3QgRlZlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEhWZT1bImxh'@;
put 'YmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBOVmUoYyxsKXsxJmMmJld0KDAsImxhYmVsIil9ZnVuY3Rpb24gVlZlKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNSl9ZnVu'@;
put 'Y3Rpb24gQlZlKGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24galZlKGMsbCl7MSZjJiZXcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gelZlKGMsbCl7MSZjJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFVWZShjLGwp'@;
put 'ezEmYyYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgWlZlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sV1ZlPVsi'@;
put 'bGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gWVZlKGMsbCl7MSZjJiZXdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIEdWZShjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDUp'@;
put 'fWZ1bmN0aW9uICRWZShjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEtWZShjLGwpezEmYyYmV3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIFhWZShjLGwpezEmYyYmV3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBxVmUo'@;
put 'YyxsKXsxJmMmJldyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IEpWZT1bImFuY2hvciJdO2Z1bmN0aW9uIFFWZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJidXR0b24iLDYpLFd0KDMsImNkcy1pY29uIiw3KSxoZSgpKCksV3IoNCksaGUoKSks'@;
put 'MiZjKXtjb25zdCBhPUxlKCk7TWUoImlkIixhLnBvcG92ZXJJZCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVsKSxmZSgzKSxocigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19Y29uc3QgZUJlPVsi'@;
put 'aW5wdXRfbG93Il0sdEJlPVsiaW5wdXQiXSxuQmU9WyJjb2x1bW5Qb3J0YWwiXTtmdW5jdGlvbiByQmUoYyxsKXsxJmMmJldyKDApfWNvbnN0IGlCZT1bInJlc2l6ZVRyYWNrZXIiXSxhQmU9WyJjb2x1bW5IYW5kbGUiXSxzQmU9W1tbImNsci1kZy1maWx0ZXIiXSxbImNsci1kZy1zdHJpbmct'@;
put 'ZmlsdGVyIl0sWyJjbHItZGctbnVtZXJpYy1maWx0ZXIiXV0sIioiXSxvQmU9WyJjbHItZGctZmlsdGVyLCBjbHItZGctc3RyaW5nLWZpbHRlciwgY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwiKiJdO2Z1bmN0aW9uIGxCZShjLGwpezEmYyYmTGwoMCl9ZnVuY3Rpb24gY0JlKGMsbCl7MSZjJiZX'@;
put 'dCgwLCJjZHMtaWNvbiIsMTApLDImYyYmaHIoImRpcmVjdGlvbiIsTGUoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gdUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc29ydCgp'@;
put 'KX0pLGd0KDEsbEJlLDEsMCwibmctY29udGFpbmVyIiw4KSgyLGNCZSwxLDEsImNkcy1pY29uIiw5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9ZGEoNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCksZmUoKSxNZSgibmdJZiIsYS5zb3J0RGlyZWN0aW9uKX19ZnVuY3Rpb24g'@;
put 'ZEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDExKSxwaSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZ2koZi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCks'@;
put 'Q3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO01lKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpLGZpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9u'@;
put 'IGhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLHBpKCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBnaShmLmZpbHRlclZhbHVlLGgpfHwoZi5maWx0ZXJWYWx1ZT1o'@;
put 'KSxDdChoKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7TWUoImNsckZpbHRlck1heFBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyKSgiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIpKCJjbHJEZ051bWVyaWNG'@;
put 'aWx0ZXIiLGEucmVnaXN0ZXJlZCksZmkoImNsckZpbHRlclZhbHVlIixhLmZpbHRlclZhbHVlKX19ZnVuY3Rpb24gZkJlKGMsbCl7MSZjJiZXcigwLDEpfWZ1bmN0aW9uIHBCZShjLGwpezEmYyYmTGwoMCl9ZnVuY3Rpb24gZ0JlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTMpLGd0KDEs'@;
put 'cEJlLDEsMCwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe0xlKCk7Y29uc3QgYT1kYSg2KTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhKX19ZnVuY3Rpb24gbUJlKGMsbCl7MSZjJiZXdCgwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIpfWZ1bmN0aW9uIHZCZShjLGwpezEmYyYm'@;
put 'V3QoMCwiZGl2Iiw0KX1mdW5jdGlvbiB5QmUoYyxsKXsxJmMmJldyKDAsMCxbIipuZ0lmIiwiZW1wdHlEYXRhZ3JpZCJdKX1jb25zdCBiQmU9WyJjZWxsUG9ydGFsIl07ZnVuY3Rpb24gX0JlKGMsbCl7MSZjJiZXcigwKX1jb25zdCB3QmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBDQmUoYyxs'@;
put 'KXsxJmMmJldyKDApfWNvbnN0IFNCZT1bImRldGFpbEJ1dHRvbiJdLE1CZT1bInN0aWNreUNlbGxzIl0seEJlPVsic2Nyb2xsYWJsZUNlbGxzIl0sRUJlPVsiY2FsY3VsYXRlZENlbGxzIl0sVEJlPVtbWyJjbHItZGctcm93LWRldGFpbCJdXSxbWyJjbHItZGctY2VsbCJdXSxbWyJjbHItZGct'@;
put 'YWN0aW9uLW92ZXJmbG93Il1dXSxBQmU9WyJjbHItZGctcm93LWRldGFpbCIsImNsci1kZy1jZWxsIiwiY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdLGtCZT1jPT4oeyJpcy1yZXBsYWNlZCI6Y30pLEkxZT1jPT4oeyJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIjpjfSk7ZnVuY3Rpb24gREJl'@;
put 'KGMsbCl7fWZ1bmN0aW9uIElCZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLGd0KDEsREJlLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMiksZD1kYSg2KTtNZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRB'@;
put 'bmltYXRpb25UcmlnZ2VyKSxmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gUkJlKGMsbCl7fWZ1bmN0aW9uIExCZShjLGwpezEmYyYmZ3QoMCxSQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKExlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkYSg2KSkpfWZ1'@;
put 'bmN0aW9uIE9CZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsOSksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY2xlYXJSYW5nZXMoaCkpfSkoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIEN0'@;
put 'KGYuc2VsZWN0Um93KCFmLnNlbGVjdGVkLGgpKX0pLGd0KDEsSUJlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLExCZSwxLDEsbnVsbCw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpLGZlKCksTWUoIm5n'@;
put 'SWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gUEJlKGMsbCl7fWZ1bmN0aW9uIEZCZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLGd0KDEsUEJlLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKSxk'@;
put 'PWRhKDYpO01lKCJjbHJFeHBhbmRUcmlnZ2VyIixhLmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLGZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBIQmUoYyxsKXt9ZnVuY3Rpb24gTkJlKGMsbCl7MSZjJiZndCgwLEhCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYo'@;
put 'TGUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZGEoNikpKX1mdW5jdGlvbiBWQmUoYyxsKXsxJmMmJldyKDApfWZ1bmN0aW9uIEJCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsImlucHV0IiwyMyksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS50b2dnbGUoaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLGRlKDQsInNwYW4iLDI1KSxPZSg1KSxoZSgpKCkoKSgpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1MZSgyKTtNZSgibmdDbGFzcyIsbHAoNyxJMWUsIWEuY2xyRGdTZWxlY3RhYmxlKSksZmUoMiksTWUoIm5nTW9kZWwiLGEuc2VsZWN0ZWQpKCJpZCIsYS5jaGVja2JveElkKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaHIoImFyaWEtZGlzYWJs'@;
put 'ZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksZmUoKSxNZSgiZm9yIixhLmNoZWNrYm94SWQpLGZlKDIpLFNyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gakJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUo'@;
put 'MCwiZGl2IiwyMSkoMSwiY2xyLXJhZGlvLXdyYXBwZXIiKSgyLCJpbnB1dCIsMjYpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBnaShmLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlLGgpfHwoZi5zZWxlY3Rpb24uY3VycmVudFNpbmds'@;
put 'ZT1oKSxDdChoKX0pLGhlKCksZGUoMywibGFiZWwiLDI3KSg0LCJzcGFuIiwyNSksT2UoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7TWUoIm5nQ2xhc3MiLGxwKDEwLEkxZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSxmZSgyKSxNZSgiaWQiLGEucmFkaW9JZCkoIm5hbWUiLGEu'@;
put 'c2VsZWN0aW9uLmlkKyItcmFkaW8iKSgidmFsdWUiLGEuaXRlbSksZmkoIm5nTW9kZWwiLGEuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUpLE1lKCJjaGVja2VkIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPT09YS5pdGVtKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCks'@;
put 'aHIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksZmUoKSxNZSgiZm9yIixhLnJhZGlvSWQpLGZlKDIpLFNyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gekJlKGMsbCl7MSZjJiYoZGUoMCwi'@;
put 'ZGl2IiwyOCksV3IoMSwyKSxoZSgpKX1mdW5jdGlvbiBVQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLnRvZ2dsZUV4cGFuZCgpKX0pLFd0KDEsImNkcy1pY29uIiwzMyksaGUo'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9TGUoNCk7aHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5k'@;
put 'Lmhhc0V4cGFuZFRlbXBsYXRlJiYhYS5leHBhbmQuZXhwYW5kZWQ/bnVsbDphLmV4cGFuZGFibGVJZCksZmUoKSxocigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xs'@;
put 'YXBzZTphLmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiBaQmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3Bpbm5lciIsMzQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgpLFNyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmxvYWRpbmcpfX1mdW5jdGlvbiBX'@;
put 'QmUoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLFVCZSwyLDUsImJ1dHRvbiIsMzApKDIsWkJlLDIsMSwiY2xyLXNwaW5uZXIiLDMxKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxNZSgibmdJZiIsIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGEuZXhwYW5kLmxvYWRp'@;
put 'bmcpfX1mdW5jdGlvbiBZQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI5KSxndCgxLFdCZSwzLDIsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpfX1mdW5jdGlvbiBHQmUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDM3LDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWRhKDEpLGY9TGUoMyk7cmV0dXJuIEN0KGYuZGV0YWlsU2VydmljZS50b2dnbGUoZi5pdGVtLGgpKX0pLFd0KDIsImNkcy1pY29uIiwzOCksaGUoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9TGUoMyk7VHIoImlzLW9wZW4iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSksTWUoImRpc2FibGVkIixhLmRldGFpbERpc2FibGVkKSxocigiYXJpYS1sYWJlbCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVs'@;
put 'OmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWV4cGFuZGVkIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLGZlKDIpLGhyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVt'@;
put 'KT8ibGVmdCI6InJpZ2h0IikoInRpdGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uICRCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzUpLGd0KDEsR0Jl'@;
put 'LDMsOCwiYnV0dG9uIiwzNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmRldGFpbEhpZGRlbil9fWZ1bmN0aW9uIEtCZShjLGwpe31mdW5jdGlvbiBYQmUoYyxsKXsxJmMmJmd0KDAsS0JlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihMZSgyKSxNZSgi'@;
put 'bmdUZW1wbGF0ZU91dGxldCIsZGEoNCkpKX1mdW5jdGlvbiBxQmUoYyxsKXt9ZnVuY3Rpb24gSkJlKGMsbCl7MSZjJiZndCgwLHFCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoTGUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGRhKDQpKSl9ZnVuY3Rpb24gUUJlKGMsbCl7MSZjJiZX'@;
put 'dCgwLCJjbHItZGctY2VsbCIsMzkpfWZ1bmN0aW9uIGVqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLGFpKDIsbnVsbCwzKSxndCg0LEJCZSw2LDksImRpdiIsMTQpKDUsakJlLDYsMTIsImRpdiIsMTQpKDYsekJlLDIsMCwiZGl2IiwxNSkoNyxZQmUsMiwxLCJk'@;
put 'aXYiLDE2KSg4LCRCZSwyLDEsImRpdiIsMTcpLHNpKCksaGUoKSxkZSg5LCJkaXYiLDE4KSgxMCwiZGl2IiwxOSksV3IoMTEsMSksTGwoMTIsbnVsbCw0KSxoZSgpLGd0KDE0LFhCZSwxLDEsbnVsbCw4KSgxNSxKQmUsMSwxLG51bGwsOCksaGUoKSxndCgxNixRQmUsMSwwLCJjbHItZGctY2Vs'@;
put 'bCIsMjApLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO1RyKCJkYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW4iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSksTWUoImlkIixhLmlkKSxmZSg0KSxNZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9O'@;
put 'X1RZUEUuTXVsdGkpLGZlKCksTWUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLlNpbmdsZSksZmUoKSxNZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLGZlKCksTWUoIm5nSWYiLGEuZ2xvYmFsRXhwYW5kYWJs'@;
put 'ZS5oYXNFeHBhbmRhYmxlUm93KSxmZSgpLE1lKCJuZ0lmIixhLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoKSxNZSgibmdDbGFzcyIsbHAoMTIsa0JlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxmZSg1KSxNZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCks'@;
put 'TWUoIm5nSWYiLCFhLnJlcGxhY2VkJiYhYS5leHBhbmQubG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5za2VsZXRvbkxvYWRpbmcpfX1jb25zdCB0amU9WyJkYXRhZ3JpZCJdLG5qZT1bImRhdGFncmlkVGFibGUiXSxyamU9WyJzY3JvbGxhYmxlQ29sdW1ucyJdLGlqZT1bInByb2plY3RlZERp'@;
put 'c3BsYXlDb2x1bW5zIl0sYWplPVsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIl0sc2plPVsiZGlzcGxheWVkUm93cyJdLG9qZT1bImNhbGN1bGF0aW9uUm93cyJdLGxqZT1bInNlbGVjdEFsbENoZWNrYm94Il0sY2plPVtbWyJjbHItZGctYWN0aW9uLWJhciJdXSxbWyJjbHItZGctcGxh'@;
put 'Y2Vob2xkZXIiXV0sW1siY2xyLWRnLWZvb3RlciJdXSxbWyIiLCJjbHJJZkRldGFpbCIsIiJdLFsiY2xyLWRnLWRldGFpbCJdXV0sdWplPVsiY2xyLWRnLWFjdGlvbi1iYXIiLCJjbHItZGctcGxhY2Vob2xkZXIiLCJjbHItZGctZm9vdGVyIiwiW2NscklmRGV0YWlsXSxjbHItZGctZGV0YWls'@;
put 'Il07ZnVuY3Rpb24gZGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwzMCkoMSwiaW5wdXQiLDMxLDYpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBnaShmLmFsbFNlbGVjdGVkLGgpfHwoZi5hbGxTZWxlY3Rl'@;
put 'ZD1oKSxDdChoKX0pLGhlKCksZGUoMywibGFiZWwiLDMyKSg0LCJzcGFuIiwzMyksT2UoNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoImlkIixhLnNlbGVjdEFsbElkKSxmaSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9u'@;
put 'U3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksZmUoMiksTWUoImZvciIsYS5zZWxlY3RBbGxJZCksZmUoMiksU3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gaGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyNyksRnQoImtleWRvd24uc3Bh'@;
put 'Y2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLnRvZ2dsZUFsbFNlbGVjdGVkKGgpKX0pLGd0KDEsZGplLDYsNSwiZGl2IiwyOCksV3QoMiwiZGl2IiwyOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0lmIiwhYS52aXJ0dWFsU2Nyb2xsfHxhLmN1c3Rv'@;
put 'bVNlbGVjdEFsbEVuYWJsZWQpfX1mdW5jdGlvbiBmamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSgxLCJkaXYiLDMzKSxPZSgyKSxoZSgpLFd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLFNyKGEuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwp'@;
put 'fX1mdW5jdGlvbiBwamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSgxLCJkaXYiLDMzKSxPZSgyKSxoZSgpLFd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLFNyKGEuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsKX19ZnVuY3Rpb24gZ2plKGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNikoMSwiZGl2IiwzMyksT2UoMiksaGUoKSxXdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSxTcihhLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihkZSgwLCJj'@;
put 'bHItZGctcm93IiwzNykoMSwiY2xyLWRnLWNlbGwiKSxXdCgyLCJjbHItc3Bpbm5lciIsMzgpLGRlKDMsInNwYW4iKSxPZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoNCksU3IoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIHZqZShjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsImNsci1kZy1yb3ciLDM3KSgxLCJjbHItZGctY2VsbCIpLFd0KDIsImNsci1zcGlubmVyIiwzOCksZGUoMywic3BhbiIpLE9lKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSxTcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24geWpl'@;
put 'KGMsbCl7MSZjJiZXdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiBiamUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDM5KSgxLCJjbHItc3Bpbm5lciIsMzgpLE9lKDIsIkxvYWRpbmciKSxoZSgpKCkpfWNvbnN0IHdqZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gQ2plKGMsbCl7'@;
put 'fWZ1bmN0aW9uIFNqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImxpIikoMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyLCJpbnB1dCIsMTMpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikudG9n'@;
put 'Z2xlQ29sdW1uU3RhdGUoZiwhaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIpLGd0KDQsQ2plLDAsMCwibmctdGVtcGxhdGUiLDE0KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKTtmZSgyKSxNZSgiZGlzYWJsZWQiLGQuaGFzT25seU9uZVZpc2libGVDb2x1bW4m'@;
put 'JiFhLmhpZGRlbikoIm5nTW9kZWwiLCFhLmhpZGRlbiksZmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGl0bGVUZW1wbGF0ZVJlZil9fWZ1bmN0aW9uIE1qZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMykoMSwiZGl2Iiw0KSgyLCJkaXYiLDUsMCksT2UoNCks'@;
put 'aGUoKSxkZSg1LCJoMiIpLE9lKDYpLGhlKCksZGUoNywiYnV0dG9uIiw2KSxXdCg4LCJjZHMtaWNvbiIsNyksZGUoOSwic3BhbiIsOCksT2UoMTApLGhlKCkoKSgpLGRlKDExLCJ1bCIsOSksZ3QoMTIsU2plLDUsMywibGkiLDEwKSxoZSgpLGRlKDEzLCJkaXYiLDExKSgxNCwiY2xyLWRnLWNv'@;
put 'bHVtbi10b2dnbGUtYnV0dG9uIiwxMiksRnQoImNsckFsbFNlbGVjdGVkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmFsbENvbHVtbnNTZWxlY3RlZCgpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO01lKCJpZCIsYS5wb3BvdmVySWQpLGhyKCJhcmlhLWxhYmVs'@;
put 'IixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiksZmUoNCksU3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxmZSgyKSxTcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyksZmUoKSxocigiYXJpYS1sYWJlbCIs'@;
put 'YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKCksaHIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoMiksU3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5'@;
put 'IixhLnRyYWNrQnlGbil9fWNvbnN0IFIxZT1bInRpdGxlIl0sRWplPVtbWyJjbHItZGctcGFnaW5hdGlvbiJdXSwiKiJdLFRqZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiKiJdO2Z1bmN0aW9uIEFqZShjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdy'@;
put 'YXBwZXIiLDIpLFd0KDMsImlucHV0IiwzKSxkZSg0LCJsYWJlbCIpLE9lKDUpLGhlKCksZGUoNiwic3BhbiIsNCksT2UoNyksaGUoKSgpKCksc2koKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoNSksU3IoYS5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGgpLGZlKDIpLFNyKGEuY29tbW9uU3RyaW5n'@;
put 'cy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIGtqZShjLGwpezEmYyYmV3QoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiBEamUoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGtqZSwxLDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIiwwKSxkZSgyLCJkaXYiLDUpLFdyKDMs'@;
put 'MSksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyl9fWZ1bmN0aW9uIElqZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJuZ1ZhbHVlIixh'@;
put 'KSxmZSgpLFNyKGEpfX1jb25zdCBSamU9WyJjdXJyZW50UGFnZUlucHV0Il0sTGplPVsiKiIsW1siY2xyLWRnLXBhZ2Utc2l6ZSJdXV0sT2plPVsiKiIsImNsci1kZy1wYWdlLXNpemUiXTtmdW5jdGlvbiBQamUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDYpLFdyKDEsMSksaGUoKSl9ZnVuY3Rp'@;
put 'b24gRmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiaW5wdXQiLDE4LDEpLEZ0KCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykudXBkYXRlQ3VycmVudFBhZ2UoaCkpfSkoImJsdXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChM'@;
put 'ZSgzKS52ZXJpZnlDdXJyZW50UGFnZShoKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtNZSgic2l6ZSIsYS5wYWdlLmxhc3QudG9TdHJpbmcoKS5sZW5ndGgpKCJ2YWx1ZSIsYS5wYWdlLmN1cnJlbnQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jdXJyZW50'@;
put 'UGFnZSl9fWZ1bmN0aW9uIEhqZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxTcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIE5qZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNykoMSwiYnV0dG9u'@;
put 'Iiw4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnBhZ2UuY3VycmVudD0xKX0pLGRlKDIsInNwYW4iLDkpLE9lKDMpLGhlKCksV3QoNCwiY2RzLWljb24iLDEwKSxoZSgpLGRlKDUsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtj'@;
put 'b25zdCBoPUxlKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRlKDYsInNwYW4iLDkpLE9lKDcpLGhlKCksV3QoOCwiY2RzLWljb24iLDEyKSxoZSgpLGd0KDksRmplLDIsMywiaW5wdXQiLDEzKSgxMCxIamUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCww'@;
put 'LGdjKSxPZSgxMiwiIFx4YTAvXHhhMCIpLGRlKDEzLCJzcGFuIiksT2UoMTQpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudCsxKX0pLGRlKDE2LCJz'@;
put 'cGFuIiw5KSxPZSgxNyksaGUoKSxXdCgxOCwiY2RzLWljb24iLDE1KSxoZSgpLGRlKDE5LCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmxhc3QpfSksZGUoMjAsInNwYW4iLDkpLE9l'@;
put 'KDIxKSxoZSgpLFd0KDIyLCJjZHMtaWNvbiIsMTcpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZGEoMTEpLGQ9TGUoMik7ZmUoKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxmZSgyKSxTcihk'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLGZlKDIpLE1lKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLFNyKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSks'@;
put 'ZmUoMiksTWUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFnZUlucHV0KSgibmdJZkVsc2UiLGEpLGZlKDQpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxmZSgpLFNyKGQucGFnZS5sYXN0KSxmZSgpLE1lKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJl'@;
put 'bnQ+PWQucGFnZS5sYXN0KSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLFNyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50Pj1kLnBhZ2UubGFzdCksaHIoImFyaWEtbGFi'@;
put 'ZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKSxmZSgyKSxTcihkLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSl9fWZ1bmN0aW9uIFZqZShjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsUGplLDIsMCwiZGl2IiwzKSxkZSgyLCJkaXYiLDQpLFdyKDMpLGhlKCksZ3QoNCxOamUs'@;
put 'MjMsMTYsImRpdiIsNSksc2koKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLGZlKDMpLE1lKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24gQmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwiZGl2Iiwx'@;
put 'OSksT2UoMiksaGUoKSxkZSgzLCJkaXYiLDcpKDQsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUoNSwic3BhbiIsOSksT2UoNiksaGUoKSxXdCg3LCJjZHMt'@;
put 'aWNvbiIsMTIpLGhlKCksZGUoOCwic3BhbiIpLE9lKDkpLGhlKCksZGUoMTAsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksZGUoMTEsInNwYW4iLDkpLE9lKDEy'@;
put 'KSxoZSgpLFd0KDEzLCJjZHMtaWNvbiIsMTUpLGhlKCkoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLFpmKCIgIixhLnBhZ2UuZmlyc3RJdGVtKzEsIi0iLGEucGFnZS5sYXN0SXRlbSsxLCIgLyAiLGEucGFnZS50b3RhbEl0ZW1zLCIgIiksZmUoMiksTWUoImRpc2FibGVkIixh'@;
put 'LnBhZ2UuY3VycmVudDw9MSksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksU3IoYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgzKSxTcihhLnBhZ2UuY3VycmVudCksZmUoKSxNZSgiZGlzYWJsZWQiLGEucGFnZS5j'@;
put 'dXJyZW50Pj1hLnBhZ2UubGFzdCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSxTcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IFpqZT1bW1siY2xyLXN0YWNrLWxhYmVsIl1dLCIqIixbWyJjbHItc3RhY2stYmxvY2si'@;
put 'XV1dLFdqZT1bImNsci1zdGFjay1sYWJlbCIsIioiLCJjbHItc3RhY2stYmxvY2siXTtmdW5jdGlvbiBZamUoYyxsKXsxJmMmJld0KDAsImNkcy1pY29uIiw3KSwyJmMmJmhyKCJkaXJlY3Rpb24iLExlKCkuY2FyZXREaXJlY3Rpb24pfWZ1bmN0aW9uIEdqZShjLGwpe2lmKDEmYyYmKGRlKDAs'@;
put 'InNwYW4iLDgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksU3IoYS5jb21tb25TdHJpbmdzLmtleXMuc3RhY2tWaWV3Q2hhbmdlZCl9fWZ1bmN0aW9uICRqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSksV3IoMSwyKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtOMSgi'@;
put 'aGVpZ2h0IixhLmV4cGFuZGVkPyJhdXRvIjowKSxocigiaWQiLGEuZ2V0U3RhY2tDaGlsZHJlbklkKCkpKCJhcmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeUlkKX19Y29uc3QgS2plPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0sWGplPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtm'@;
put 'dW5jdGlvbiBRamUoYyxsKXsxJmMmJkxsKDApfWZ1bmN0aW9uIGV6ZShjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsUWplLDEsMCwibmctY29udGFpbmVyIiwyKSxzaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkLmZlYXR1'@;
put 'cmVzU2VydmljZS5yZWN1cnNpb24udGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZC5nZXRDb250ZXh0KGEpKX19ZnVuY3Rpb24gdHplKGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxlemUsMiwyLCJuZy1jb250YWluZXIiLDEpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2Zl'@;
put 'KCksTWUoIm5nRm9yT2YiLChudWxsPT1hLnBhcmVudD9udWxsOmEucGFyZW50LmNoaWxkcmVuKXx8YS5jaGlsZHJlbil9fWNvbnN0IG56ZT1bImNvbnRlbnRDb250YWluZXIiXSxyemU9W1tbImNsci10cmVlLW5vZGUiXV0sW1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSwiKiJdLGl6ZT1bImNs'@;
put 'ci10cmVlLW5vZGUiLCJbY2xySWZFeHBhbmRlZF0iLCIqIl07ZnVuY3Rpb24gYXplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZXhwYW5kU2VydmljZS50b2dnbGUoKSl9KSgiZm9j'@;
put 'dXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZm9jdXNUcmVlTm9kZSgpKX0pLFd0KDEsImNkcy1pY29uIiwxMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtNZSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGZlKCksaHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4'@;
put 'cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gc3plKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMSksV3QoMSwic3BhbiIsMTIpLGhlKCkpfWZ1bmN0aW9uIG96ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCksRnQoImNoYW5nZSIs'@;
put 'ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxoZSgpLGRlKDIsImxh'@;
put 'YmVsIiwxNSksTGwoMywxNiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9ZGEoNyk7ZmUoKSxNZSgiaWQiLGEubm9kZUlkKyItY2hlY2siKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpKCJjaGVja2VkIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWEuU1RBVEVTLlNFTEVDVEVEKSgi'@;
put 'aW5kZXRlcm1pbmF0ZSIsYS5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5JTkRFVEVSTUlOQVRFKSxmZSgpLE1lKCJmb3IiLGEubm9kZUlkKyItY2hlY2siKSxmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gbHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9u'@;
put 'KCk7ZGUoMCwiZGl2IiwxNyksRnQoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZm9jdXNUcmVlTm9kZSgpKX0pLExsKDEsMTYpLGhlKCl9aWYoMiZjKXtMZSgpO2NvbnN0IGE9ZGEoNyk7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uIGN6'@;
put 'ZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpKDEsInNwYW4iKSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxMcigiICIsYS5hcmlhU2VsZWN0ZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRUcmVlTm9kZTphLmNvbW1vblN0cmluZ3Mua2V5cy51bnNl'@;
put 'bGVjdGVkVHJlZU5vZGUsIiIpfX1mdW5jdGlvbiB1emUoYyxsKXtpZigxJmMmJihXcigwLDIpLGd0KDEsY3plLDMsMSwiZGl2IiwxOCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLGEuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV8fGEuYXJpYVNlbGVjdGVkKX19ZnVuY3Rp'@;
put 'b24gZHplKGMsbCl7MSZjJiZXdCgwLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwxKSwyJmMmJk1lKCJjaGlsZHJlbiIsTGUoKS5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnJvb3QpfWZ1bmN0aW9uIGh6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNCksRnQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5jbG9zZSgpKX0pLFd0KDEsImNkcy1pY29uIiw1KSxoZSgpfTImYyYmaHIoImFyaWEtbGFiZWwiLExlKDIpLmNsckNsb3NlQnV0dG9uQXJpYUxhYmVsKX1mdW5jdGlvbiBmemUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYi'@;
put 'LDEpKDEsImRpdiIsMiksV3IoMiksaGUoKSxndCgzLGh6ZSwyLDEsImJ1dHRvbiIsMyksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7VHIoImFsZXJ0LXNtIixhLmlzU21hbGwpKCJhbGVydC1saWdodHdlaWdodCIsYS5pc0xpZ2h0d2VpZ2h0KSgiYWxlcnQtYXBwLWxldmVsIixhLmlzQXBwTGV2'@;
put 'ZWwpLE1lKCJuZ0NsYXNzIixhLmFsZXJ0Q2xhc3MpLGZlKDMpLE1lKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24gcHplKGMsbCl7MSZjJiZXdCgwLCJjbHItc3Bpbm5lciIsMyl9ZnVuY3Rpb24gZ3plKGMsbCl7aWYoMSZjJiZXdCgwLCJjZHMtaWNvbiIsNCksMiZjKXtjb25zdCBhPUxl'@;
put 'KCk7aHIoInNoYXBlIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsYS5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSl9fWNvbnN0IG16ZT1bW1siY2xyLWFsZXJ0Il1dXSx2emU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiB5emUoYyxsKXsxJmMmJld0KDAsImNs'@;
put 'ci1hbGVydHMtcGFnZXIiLDIpLDImYyYmTWUoImNsckN1cnJlbnRBbGVydEluZGV4IixMZSgpLmN1cnJlbnRBbGVydEluZGV4KX1jb25zdCBiemU9WyJjbHJJbnRlcm5hbE1vZGFsQ29udGVudFRlbXBsYXRlIl0sTDFlPVsiYm9keSJdLF96ZT1bW1siIiw4LCJsZWFkaW5nLWJ1dHRvbiJdXSxb'@;
put 'WyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sd3plPVsiLmxlYWRpbmctYnV0dG9uIiwiLm1vZGFsLXRpdGxlIiwiLm1vZGFsLWJvZHkiLCIubW9kYWwtZm9vdGVyIl07ZnVuY3Rpb24gQ3plKGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5jbG9zZSgpKX0pLFd0KDEsImNkcy1pY29uIiwxNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7aHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25Bcmlh'@;
put 'TGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gU3plKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4KSgxLCJkaXYiLDkpKDIsImRpdiIsMTApLFdyKDMpLGRlKDQsImRpdiIsMTEsMCksV3IoNiwxKSxoZSgpLGd0KDcsQ3plLDIsMSwiYnV0dG9uIiwxMiksaGUo'@;
put 'KSxkZSg4LCJkaXYiLDEzLDEpLFdyKDEwLDIpLGhlKCksV3IoMTEsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNCksTWUoImlkIixhLm1vZGFsSWQpLGZlKDMpLE1lKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24gTXplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUo'@;
put 'MCwiZGl2Iiw0KSgxLCJkaXYiLDUpLEZ0KCJAZmFkZU1vdmUuZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZmFkZURvbmUoaCkpfSksZGUoMiwiZGl2Iiw2KSxPZSgzKSxoZSgpLGd0KDQsU3plLDEyLDIsImRpdiIsNyksZGUoNSwiZGl2Iiw2KSxPZSg2KSxoZSgpKCko'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9TGUoKTtUcigibW9kYWwtZnVsbC1zY3JlZW4iLCJmdWxsLXNjcmVlbiI9PWEuc2l6ZSksZmUoKSxUcigibW9kYWwtc20iLCJzbSI9PWEuc2l6ZSkoIm1vZGFsLWxnIiwibGciPT1hLnNpemUpKCJtb2RhbC14bCIsInhsIj09YS5zaXplKSxNZSgiY2RrVHJhcEZv'@;
put 'Y3VzQXV0b0NhcHR1cmUiLCEwKSgiQGZhZGVNb3ZlIixhLmZhZGVNb3ZlKSxocigiYXJpYS1oaWRkZW4iLCFhLl9vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixhLmxhYmVsbGVkQnl8fGEubW9kYWxJZCksZmUoMiksU3IoYS5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50U3RhcnQpLGZl'@;
put 'KCksTWUoIm5nSWYiLCFhLm1vZGFsQ29udGVudFRlbXBsYXRlKSgibmdJZkVsc2UiLGEubW9kYWxDb250ZW50VGVtcGxhdGUpLGZlKDIpLFNyKGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCl9fWZ1bmN0aW9uIHh6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAs'@;
put 'ImRpdiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5iYWNrZHJvcENsaWNrKCkpfSksaGUoKX0yJmMmJk1lKCJAZmFkZSIsdm9pZCAwKX1sZXQgT2w9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pY29uIl1dfSksY30pKCksZW89KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImNkcy1pY29uIl1dfSksY30pKCksVG89KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGFdfSksY30pKCk7Y2xhc3MgUHh7fXZhciBa'@;
put 'MT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRFRkFVTFQ9MF09IkRFRkFVTFQiLGNbYy5MT0FESU5HPTFdPSJMT0FESU5HIixjW2MuU1VDQ0VTUz0yXT0iU1VDQ0VTUyIsY1tjLkVSUk9SPTNdPSJFUlJPUiIsY30oWjF8fHt9KTtsZXQgVjA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0'@;
put 'aGlzLmxpc3RlbmVyPWEsdGhpcy5fbG9hZGluZ1N0YXRlPVoxLkRFRkFVTFR9Z2V0IGxvYWRpbmdTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2FkaW5nU3RhdGV9c2V0IGxvYWRpbmdTdGF0ZShhKXshMD09PWE/YT1aMS5MT0FESU5HOmF8fChhPVoxLkRFRkFVTFQpLGEhPT10aGlzLl9sb2FkaW5n'@;
put 'U3RhdGUmJih0aGlzLl9sb2FkaW5nU3RhdGU9YSx0aGlzLmxpc3RlbmVyJiZ0aGlzLmxpc3RlbmVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmxvYWRpbmdTdGF0ZT1aMS5ERUZBVUxUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKSgkZShQeCw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckxvYWRpbmciLCIiXV0saW5wdXRzOntsb2FkaW5nU3RhdGU6W1ZuLk5vbmUsImNsckxvYWRpbmciLCJsb2FkaW5nU3RhdGUiXX19KSxjfSkoKSxXMT0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5leHBhbmRhYmxlPTAsdGhpcy5oYXNFeHBhbmRUZW1wbGF0ZT0hMSx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgR259Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXso'@;
put 'YT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEp'@;
put 'KX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7dGhpcy5sb2FkaW5nPWE9PT1aMS5MT0FESU5HfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0VWU9MDtmdW5jdGlvbiBfdSgpe3JldHVybiJjbHItaWQtIit0VWUrK31sZXQgTzFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQp'@;
put 'ezImYSYmVHIoImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpO2Nv'@;
put 'bnN0IEpmPSIwLjJzIGVhc2UtaW4tb3V0IixuVWU9W3doKCJza2lwSW5pdGlhbFJlbmRlciIsW3R1KCI6ZW50ZXIiLFtdKV0pLHdoKCJ0b2dnbGUiLFt0dSgidm9pZCA9PiAqIixbbG8oe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHcwKEpmLGxvKHtoZWlnaHQ6IioifSkpXSldKV0sTFk9'@;
put 'KHdoKCJza2lwSW5pdGlhbFJlbmRlciIsW3R1KCI6ZW50ZXIiLFtdKV0pLHdoKCJ0b2dnbGUiLFt0dSgidm9pZCA9PiAqIixbbG8oe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHcwKEpmLGxvKHtoZWlnaHQ6IioifSkpXSksdHUoIiogPT4gdm9pZCIsW2xvKHtkaXNwbGF5OiJibG9jayJ9'@;
put 'KSx3MChKZixsbyh7aGVpZ2h0OjAsZGlzcGxheToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGFwcGx5OiJBcHBseSIsY2FuY2VsOiJDYW5jZWwiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6'@;
put 'Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQcmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9y'@;
put 'IixuZXV0cmFsOiJOZXV0cmFsIix1bmtub3duOiJVbmtub3duIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJz'@;
put 'dCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJDdXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1'@;
put 'ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVudEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNpZGVQYW5lbFBpbjoiUGluIFNpZGUgUGFuZWwiLHNob3dDb2x1bW5zTWVu'@;
put 'dURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9zdENsb3NlOiJDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFu'@;
put 'ZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVyIixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFk'@;
put 'ZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoie0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckxhYmVsOiJ7Q09MVU1OfSBmaWx0ZXIiLGRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVs'@;
put 'OiJGaWx0ZXIgZGlhbG9nIixjb2x1bW5TZXBhcmF0b3JBcmlhTGFiZWw6IkNvbHVtbiByZXNpemUgaGFuZGxlIixjb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbjoiVXNlIGxlZnQgb3IgcmlnaHQga2V5IHRvIHJlc2l6ZSB0aGUgY29sdW1uIixmcm9tTGFiZWw6IkZyb20iLHRvTGFiZWw6IlRv'@;
put 'IixhbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBhbGVydCIsYWxlcnROZXh0QWxlcnRBcmlhTGFiZWw6Ik5leHQgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbDoiUHJldmlvdXMgYWxlcnQgbWVzc2FnZSwge0NV'@;
put 'UlJFTlR9IG9mIHtDT1VOVH0iLGRhdGVwaWNrZXJEaWFsb2dMYWJlbDoiQ2hvb3NlIGRhdGUiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFuZ2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9Iixk'@;
put 'YXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToiUHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2Vy'@;
put 'TmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJfTU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVh'@;
put 'clRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQuIixyZXNwb25zaXZlTmF2VG9nZ2xlT3Blbjoi'@;
put 'T3BlbiBuYXZpZ2F0aW9uIG1lbnUiLHJlc3BvbnNpdmVOYXZUb2dnbGVDbG9zZToiQ2xvc2UgbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dPcGVuOiJPcGVuIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2U6IkNsb3NlIG5h'@;
put 'dmlnYXRpb24gb3ZlcmZsb3cgbWVudSIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3RhcnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxl'@;
put 'dGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9wdGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxj'@;
put 'b21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3BlbjoiU2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRh'@;
put 'Z3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVSb3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZp'@;
put 'ZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhpcyBidXR0b24iLHdpemFyZFN0ZXA6IlN0ZXAiLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFy'@;
put 'ZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IldpemFyZCBzdGVwcyIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIGZvciB7TEFCRUx9IixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQgZm9yIHtMQUJFTH0iLHNlbGVjdGVkUm93czoiU2VsZWN0ZWQgcm93'@;
put 'cyIsc3RlcENvbXBsZXRlOiJTdGVwIHtTVEVQfSBjb21wbGV0ZSIsc3RlcEVycm9yOiJFcnJvciBpbiBzdGVwIHtTVEVQfSIsYnJvd3NlOiJCcm93c2UiLGZpbGVDb3VudDoie0NPVU5UfSBmaWxlcyIsY2xlYXJGaWxlOiJDbGVhciB7RklMRX0iLGNsZWFyRmlsZXM6IkNsZWFyIHtDT1VOVH0g'@;
put 'ZmlsZXMiLHNlbGVjdGVkVHJlZU5vZGU6InNlbGVjdGVkIix1bnNlbGVjdGVkVHJlZU5vZGU6InVuc2VsZWN0ZWQiLGJyZWFkY3J1bWJzTGFiZWw6ImJyZWFkY3J1bWJzIixleHBhbmRCcmVhZGNydW1ic0xhYmVsOiJFeHBhbmQgYnJlYWRjcnVtYnMifSk7bGV0IHRvPSgoKT0+e2NsYXNzIGN7'@;
put 'Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJpbmdzPUxZfWdldCBrZXlzKCl7cmV0dXJuIHRoaXMuX3N0cmluZ3N9bG9jYWxpemUoYSl7dGhpcy5fc3RyaW5ncz17Li4udGhpcy5fc3RyaW5ncywuLi5hfX1wYXJzZShhLGQ9e30pe2NvbnN0IGg9T2JqZWN0LmtleXMoZCk7bGV0IGY9YTtyZXR1cm4g'@;
put 'aC5sZW5ndGgmJmguZm9yRWFjaCh2PT57Zj1mLnJlcGxhY2UoYHske3Z9fWAsZFt2XSl9KSxmfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9v'@;
put 'dCJ9KSxjfSkoKTt2YXIgUWY9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSW5hY3RpdmU9ImluYWN0aXZlIixjLkVycm9yPSJlcnJvciIsYy5Db21wbGV0ZT0iY29tcGxldGUiLGN9KFFmfHx7fSksRng9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRGVmYXVsdD0iZGVmYXVsdCIsYy5NdWx0aT0ibXVsdGki'@;
put 'LGN9KEZ4fHx7fSk7bGV0IGlVZT0wO2NsYXNzIGFVZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLmFjY29yZGlvbklkPWEsdGhpcy5zdGF0dXM9UWYuSW5hY3RpdmUsdGhpcy5pbmRleD1udWxsLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5vcGVuPSExLHRoaXMudGVtcGxhdGVJZD1g'@;
put 'JHt0aGlzLmlkfS0ke3RoaXMuYWNjb3JkaW9uSWR9YH19Y2xhc3MgUDFle2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJhdGVneT1GeC5EZWZhdWx0LHRoaXMuYWNjb3JkaW9uQ291bnQ9aVVlKyssdGhpcy5fcGFuZWxzPXt9fWdldCBwYW5lbHMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcGFu'@;
put 'ZWxzKS5tYXAobD0+dGhpcy5fcGFuZWxzW2xdKX1zZXRTdHJhdGVneShsKXt0aGlzLnN0cmF0ZWd5PWx9dXBkYXRlUGFuZWxPcmRlcihsKXtsLmZvckVhY2goKGEsZCk9PnRoaXMuX3BhbmVsc1thXS5pbmRleD1kKSx0aGlzLnJlbW92ZU9sZFBhbmVscyhsKX1hZGRQYW5lbChsLGE9ITEpe3Ro'@;
put 'aXMuX3BhbmVsc1tsXT1uZXcgYVVlKGwsdGhpcy5hY2NvcmRpb25Db3VudCksdGhpcy5fcGFuZWxzW2xdLm9wZW49YX10b2dnbGVQYW5lbChsLGEpe2NvbnN0IGg9dm9pZCAwIT09YT9hOiF0aGlzLl9wYW5lbHNbbF0ub3BlbjtoJiZ0aGlzLnN0cmF0ZWd5PT09RnguRGVmYXVsdCYmdGhpcy5j'@;
put 'bG9zZUFsbFBhbmVscygpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWh9ZGlzYWJsZVBhbmVsKGwsYSl7dGhpcy5fcGFuZWxzW2xdLmRpc2FibGVkPWF9Y2xvc2VBbGxQYW5lbHMoKXt0aGlzLnBhbmVscy5mb3JFYWNoKGw9PnRoaXMuX3BhbmVsc1tsLmlkXS5vcGVuPSExKX1yZW1vdmVPbGRQYW5l'@;
put 'bHMobCl7dGhpcy5wYW5lbHMuZmlsdGVyKGE9PnZvaWQgMD09PWwuZmluZChkPT5kPT09YS5pZCkpLmZvckVhY2goYT0+ZGVsZXRlIHRoaXMuX3BhbmVsc1thLmlkXSl9fWxldCBIeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY2NvcmRpb249bmV3IFAxZSx0aGlzLl9wYW5l'@;
put 'bHNDaGFuZ2VzPW5ldyBKcih0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBhbmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKFByKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1h'@;
put 'ZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhp'@;
put 'cy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5l'@;
put 'bHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQkw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1'@;
put 'Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5hY2NvcmRpb25TZXJ2aWNlPWgsdGhpcy5pZkV4cGFuZFNlcnZpY2U9Zix0aGlzLmNkcj12LHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW49ITEsdGhpcy5oZWFkaW5nRW5hYmxlZD0h'@;
put 'MSx0aGlzLnBhbmVsT3BlbkNoYW5nZT1uZXcgS3IsdGhpcy5faWQ9X3UoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWF9Z2V0IHBhbmVsTnVtYmVyKCl7cmV0dXJuIHRoaXMuX3BhbmVsSW5kZXgrMX1nZXQgaGVhZGluZ0xldmVsKCl7cmV0dXJuIHRoaXMu'@;
put 'ZXhwbGljaXRIZWFkaW5nTGV2ZWw/dGhpcy5leHBsaWNpdEhlYWRpbmdMZXZlbDp0aGlzLnBhcmVudD80OjN9bmdPbkluaXQoKXt0aGlzLnBhbmVsPXRoaXMuYWNjb3JkaW9uU2VydmljZS5nZXRQYW5lbENoYW5nZXModGhpcy5pZCkucGlwZShadShhPT50aGlzLmVtaXRQYW5lbENoYW5nZShh'@;
put 'KSkpLHRoaXMuYWNjb3JkaW9uU2VydmljZS5hZGRQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLHRoaXMu'@;
put 'ZGlzYWJsZWQpfW5nT25DaGFuZ2VzKGEpe3RoaXMucGFuZWwmJmEucGFuZWxPcGVuJiZhLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUhPT1hLnBhbmVsT3Blbi5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCxhLnBhbmVsT3Blbi5jdXJyZW50'@;
put 'VmFsdWUpLHRoaXMucGFuZWwmJmEuZGlzYWJsZWQmJmEuZGlzYWJsZWQuY3VycmVudFZhbHVlIT09YS5kaXNhYmxlZC5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsYS5kaXNhYmxlZC5jdXJyZW50VmFsdWUpfXRvZ2dsZVBhbmVsKCl7'@;
put 'dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQpfWNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUoYSl7YS5vcGVufHwodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITEpfWdldFBhbmVsU3RhdGVDbGFzc2VzKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLXBh'@;
put 'bmVsLSR7YS5zdGF0dXN9ICR7YS5vcGVuPyJjbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4iOiIifWB9Z2V0QWNjb3JkaW9uQ29udGVudElkKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLWNvbnRlbnQtJHthfSdgfWdldEFjY29yZGlvbkhlYWRlcklkKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLWhl'@;
put 'YWRlci0ke2F9YH1zdGVwQ29tcGxldGVUZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcENvbXBsZXRlLHtTVEVQOmEudG9TdHJpbmcoKX0pfXN0ZXBFcnJvclRleHQoYSl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5w'@;
put 'YXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdGVwRXJyb3Ise1NURVA6YS50b1N0cmluZygpfSl9ZW1pdFBhbmVsQ2hhbmdlKGEpe2EuaW5kZXghPT10aGlzLl9wYW5lbEluZGV4JiYodGhpcy5fcGFuZWxJbmRleD1hLmluZGV4LHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSksYS5vcGVu'@;
put 'IT09dGhpcy5wYW5lbE9wZW4mJih0aGlzLnBhbmVsT3BlbkNoYW5nZS5lbWl0KGEub3BlbiksdGhpcy5wYW5lbE9wZW49YS5vcGVuKSxhLm9wZW4mJih0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpKCRlKGMsMTIpLCRlKHRvKSwkZShIeCksJGUoVzEpLCRlKHhvKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYXMoaCxPMWUsNCksMiZhKXtsZXQgZjt5'@;
put 'aShmPWJpKCkpJiYoZC5hY2NvcmRpb25EZXNjcmlwdGlvbj1mKX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFjY29yZGlvbi1wYW5lbCIsITApKCJjbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkIixkLmRpc2FibGVkKX0saW5wdXRzOntk'@;
put 'aXNhYmxlZDpbVm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxEaXNhYmxlZCIsImRpc2FibGVkIl0scGFuZWxPcGVuOltWbi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXSxoZWFkaW5nRW5hYmxlZDpbVm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxIZWFkaW5nRW5h'@;
put 'YmxlZCIsImhlYWRpbmdFbmFibGVkIl0sZXhwbGljaXRIZWFkaW5nTGV2ZWw6W1ZuLk5vbmUsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0xldmVsIiwiZXhwbGljaXRIZWFkaW5nTGV2ZWwiXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2Ui'@;
put 'fSxmZWF0dXJlczpbdWEoW1cxXSksYmxdLG5nQ29udGVudFNlbGVjdG9yczpmSGUsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhlYWRlckJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNs'@;
put 'ci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIsMywiY2xpY2siLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1hY2NvcmRpb24tc3RhdHVzIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiLDEsImNsci1hY2NvcmRpb24tYW5nbGUiXSxbInJvbGUiLCJyZWdpb24iLDEsImNs'@;
put 'ci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYoc2EoaEhlKSxndCgwLGdIZSwxMiwxNiwibmctY29udGFpbmVyIiwxKSxRbygxLCJhc3luYyIpKSwyJmEmJk1lKCJuZ0lmIixBYygxLDEsZC5wYW5lbCkpfSxkZXBlbmRlbmNpZXM6W3Z1LGJhLGVvLElNXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOm5VZX0sY2hhbmdl'@;
put 'RGV0ZWN0aW9uOjB9KSxjfSkoKSxGMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFjY29yZGlvblNlcnZpY2U9YSx0aGlzLm11bHRpUGFuZWw9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nT25Jbml0KCl7dGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nT25DaGFu'@;
put 'Z2VzKGEpe2EubXVsdGlQYW5lbC5jdXJyZW50VmFsdWUhPT1hLm11bHRpUGFuZWwucHJldmlvdXNWYWx1ZSYmdGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRE9NQ2hhbmdlcygpKX1uZ09u'@;
put 'RGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0QWNjb3JkaW9uU3RyYXRlZ3koKXt0aGlzLmFjY29yZGlvblNlcnZpY2Uuc2V0U3RyYXRlZ3kodGhpcy5tdWx0aVBhbmVsP0Z4Lk11bHRpOkZ4LkRlZmF1bHQpfWxpc3RlbkZvckRPTUNo'@;
put 'YW5nZXMoKXtyZXR1cm4gdGhpcy5wYW5lbHMuY2hhbmdlcy5waXBlKFQyKHRoaXMucGFuZWxzKSkuc3Vic2NyaWJlKGE9PnRoaXMuYWNjb3JkaW9uU2VydmljZS51cGRhdGVQYW5lbE9yZGVyKGEudG9BcnJheSgpLm1hcChkPT5kLmlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKSgkZShIeCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFzKGgsQkwsNCksMiZhKXtsZXQgZjt5aShmPWJpKCkpJiYoZC5wYW5lbHM9'@;
put 'Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24iLCEwKX0saW5wdXRzOnttdWx0aVBhbmVsOltWbi5Ob25lLCJjbHJBY2NvcmRpb25NdWx0aVBhbmVsIiwibXVsdGlQYW5lbCJdfSxmZWF0dXJlczpbdWEoW0h4XSksYmxdLG5n'@;
put 'Q29udGVudFNlbGVjdG9yczp5cyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxIMWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tY29udGVudCJdLFsiY2xyLXN0ZXAtY29udGVudCJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsx'@;
put 'JmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksTjFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJj'@;
put 'bHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tdGl0bGUiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0'@;
put 'aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEFiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IEdufWdldCBjaG9jb2xh'@;
put 'dGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLGtiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hl'@;
put 'Y2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh4byksJGUoQWIpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLE9ZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBYnt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXty'@;
put 'ZXR1cm4obHx8KGw9VW8oYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24iXV0sZmVhdHVyZXM6W0NhXX0pLGN9KSgpLFYxZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMga2J7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93'@;
put 'IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHhvKSwkZShPWSw4KSwkZShXMSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGZlYXR1cmVzOltDYV19KSxjfSkoKSxCMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp'@;
put 'e0VvLmFkZEljb25zKENiLGJoLF9oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsVG9dfSksY30pKCksdVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLFRvLEIxZSxCMWVdfSksY30pKCk7dmFyIHBhPWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93TGVmdD0iQXJyb3dMZWZ0Iixj'@;
put 'LkFycm93VXA9IkFycm93VXAiLGMuQXJyb3dSaWdodD0iQXJyb3dSaWdodCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5CYWNrc3BhY2U9IkJhY2tzcGFjZSIsYy5UYWI9IlRhYiIsYy5FbnRlcj0iRW50ZXIiLGMuRXNjYXBlPSJFc2NhcGUiLGMuU3BhY2U9IlNwYWNlIixjLlNwYWNlYmFy'@;
put 'PSIgIixjLkhvbWU9IkhvbWUiLGMuRW5kPSJFbmQiLGMuUGFnZURvd249IlBhZ2VEb3duIixjLlBhZ2VVcD0iUGFnZVVwIixjfShwYXx8e30pLGg3PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJvd1JpZ2h0PSJSaWdodCIsYy5BcnJv'@;
put 'd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShoN3x8e30pO2Z1bmN0aW9uIEwyKGMpe3JldHVybiBjPT09cGEuQXJyb3dVcHx8Yz09PWg3LkFycm93VXA/cGEuQXJyb3dVcDpjPT09cGEuQXJyb3dEb3dufHxjPT09aDcuQXJyb3dEb3duP3BhLkFycm93'@;
put 'RG93bjpjPT09cGEuQXJyb3dSaWdodHx8Yz09PWg3LkFycm93UmlnaHQ/cGEuQXJyb3dSaWdodDpjPT09cGEuQXJyb3dMZWZ0fHxjPT09aDcuQXJyb3dMZWZ0P3BhLkFycm93TGVmdDpjPT09cGEuU3BhY2V8fGM9PT1oNy5TcGFjZT9wYS5TcGFjZTpjPT09cGEuRXNjYXBlfHxjPT09aDcuRXNj'@;
put 'YXBlP3BhLkVzY2FwZTpjfWZ1bmN0aW9uIEZZKGMpe2NvbnN0IGw9TDIoYy5rZXkpOyhsPT09cGEuQXJyb3dVcHx8bD09PXBhLkFycm93RG93bnx8bD09PXBhLkFycm93TGVmdHx8bD09PXBhLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0IHNjPSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IEduLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgR24sdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IEduLHRoaXMuX3BvcG92ZXJWaXNpYmxlPW5ldyBHbn1nZXQgb3BlbkNoYW5nZSgpe3JldHVybiB0aGlzLl9v'@;
put 'cGVuQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBwb3BvdmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLl9wb3BvdmVyVmlzaWJsZS5hc09ic2VydmFibGUoKX1nZXQgb3BlbkV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudH1zZXQgb3BlbkV2ZW50KGEpe3RoaXMuX29wZW5FdmVudD1hLHRo'@;
put 'aXMuX29wZW5FdmVudENoYW5nZS5uZXh0KGEpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5fb3BlbiE9PShhPSEhYSkmJih0aGlzLl9vcGVuPWEsdGhpcy5fb3BlbkNoYW5nZS5uZXh0KGEpKX1nZXQgb3JpZ2luYWxFdmVudCgpe3JldHVybiB0aGlzLl9v'@;
put 'cGVuRXZlbnR9Z2V0IHBvcG92ZXJBbGlnbmVkKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJBbGlnbmVkLmFzT2JzZXJ2YWJsZSgpfWdldEV2ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGVXaXRoRXZlbnQoYSl7RlkoYSksdGhpcy5v'@;
put 'cGVuRXZlbnQ9YSx0aGlzLm9wZW49IXRoaXMub3Blbn1wb3BvdmVyVmlzaWJsZUVtaXQoYSl7dGhpcy5fcG9wb3ZlclZpc2libGUubmV4dChhKX1wb3BvdmVyQWxpZ25lZEVtaXQoYSl7dGhpcy5fcG9wb3ZlckFsaWduZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuc21hcnRPcGVuU2VydmljZT1kLHRoaXMuZG9jdW1lbnQ9aCx0'@;
put 'aGlzLm91dHNpZGVDbGlja0Nsb3NlPSEwLHRoaXMuc2Nyb2xsVG9DbG9zZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57Zj8odGhpcy5hZGRFc2NhcGVMaXN0ZW5lcigpLHRoaXMuYWRkQ2xpY2tMaXN0'@;
put 'ZW5lcigpLHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXIoKSk6dGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfSksZC5nZXRFdmVudENoYW5nZSgpLnN1YnNjcmliZShmPT57dGhpcy5pZ25vcmVkRXZlbnQ9Zn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9'@;
put 'PmEudW5zdWJzY3JpYmUoKSksdGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfWFkZFNjcm9sbExpc3RlbmVyKCl7dGhpcy5zY3JvbGxUb0Nsb3NlJiYodGhpcy5kb2N1bWVudFNjcm9sbGVyPXhkKHRoaXMuZG9jdW1lbnQsInNjcm9sbCIse2NhcHR1cmU6ITB9KSx0aGlzLnNjcm9sbFN1'@;
put 'YnNjcmlwdGlvbj10aGlzLmRvY3VtZW50U2Nyb2xsZXIucGlwZShXbCh0aGlzLnRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSkpfXJlbW92ZVNjcm9s'@;
put 'bExpc3RlbmVyKCl7dGhpcy5kb2N1bWVudFNjcm9sbGVyJiYodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxkZWxldGUgdGhpcy5kb2N1bWVudFNjcm9sbGVyKX1hZGRDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKHRoaXMuZG9jdW1lbnRDbGlj'@;
put 'a0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImNsaWNrIixhPT57YT09PXRoaXMuaWdub3JlZEV2ZW50P2RlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudDoodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsYS50YXJnZXQuZm9jdXMoKSl9KSl9cmVtb3ZlQ2xp'@;
put 'Y2tMaXN0ZW5lcigpe3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJihkZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQsdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXImJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikpfWFkZEVzY2Fw'@;
put 'ZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJrZXlkb3duLmVzY2FwZSIsKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KX1yZW1vdmVFc2NhcGVMaXN0ZW5lcigp'@;
put 'e3RoaXMuZXNjYXBlTGlzdGVuZXImJih0aGlzLmVzY2FwZUxpc3RlbmVyKCksZGVsZXRlIHRoaXMuZXNjYXBlTGlzdGVuZXIpfXNldENsb3NlRm9jdXMoKXt0aGlzLmNsb3NlQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1zZXRBbmNob3JGb2N1cygpe3RoaXMuYW5jaG9yQnV0dG9u'@;
put 'UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX10ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcihhKXtsZXQgZD1hLnRhcmdldDtmb3IoO2QuY2xhc3NMaXN0JiYiYm9keSIhPT1kLnBhcmVudEVsZW1lbnQubG9jYWxOYW1lOylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4hIWQuY2xh'@;
put 'c3NMaXN0JiYhZC5jbGFzc0xpc3QuY29udGFpbnMoImNsci1wb3BvdmVyLWNvbnRlbnQiKX1yZW1vdmVBbGxFdmVudExpc3RlbmVycygpe3RoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUVzY2FwZUxpc3RlbmVyKCl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKENyKEVzKSxDcihzYyksQ3IobW8pKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7YS5hbmNob3JC'@;
put 'dXR0b25SZWY9ZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoVngpLCRlKFFpKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJBbmNob3IiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYW5jaG9yIiwhMCl9fSksY30pKCksVTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5n'@;
put 'ZT1uZXcgS3IsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKFdsKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRv'@;
put 'Z2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxlbWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZv'@;
put 'Y3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShRaSksJGUoVngpLCRlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2Vs'@;
put 'ZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmVHIoImNsci1zbWFydC1jbG9zZS1idXR0b24i'@;
put 'LCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgZDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJWk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfShkMXx8e30pLE9vPWZ1bmN0'@;
put 'aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KE9vfHx7fSksang9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0i'@;
put 'UklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oanh8fHt9KTtjb25zdCBmbT1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxpZz0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gRGIoYyxsLGEp'@;
put 'e3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gQ2goYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9WjFlKGMsbCxhKSxoLT1hLmhlaWdodDticmVhaztjYXNlIDE6ZCs9WjFlKGMsbCxhKSxoKz1sLmhlaWdodDticmVhaztjYXNl'@;
put 'IDA6ZC09YS53aWR0aCxoKz1XMWUoYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPVcxZShjLGwsYSl9cmV0dXJue3hPZmZzZXQ6ZCx5T2Zmc2V0Omh9fWZ1bmN0aW9uIFoxZShjLGwsYSl7bGV0IGQ9MDtzd2l0Y2goYy5hbmNob3Ipe2Nhc2UgT28uU1RBUlQ6YnJlYWs7Y2FzZSBP'@;
put 'by5DRU5URVI6ZCs9bC53aWR0aC8yO2JyZWFrO2Nhc2UgT28uRU5EOmQrPWwud2lkdGh9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBPby5TVEFSVDpicmVhaztjYXNlIE9vLkNFTlRFUjpkLT1hLndpZHRoLzI7YnJlYWs7Y2FzZSBPby5FTkQ6ZC09YS53aWR0aH1yZXR1cm4gZH1mdW5jdGlvbiBX'@;
put 'MWUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIE9vLlNUQVJUOmJyZWFrO2Nhc2UgT28uQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBPby5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBPby5TVEFSVDpicmVhaztjYXNlIE9vLkNFTlRF'@;
put 'UjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgT28uRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBZMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5wbGF0Zm9ybUlkPWQsdGhpcy5fc2hvdWxkUmVhbGlnbj1uZXcgR24sdGhpcy5z'@;
put 'aG91bGRSZWFsaWduPXRoaXMuX3Nob3VsZFJlYWxpZ24uYXNPYnNlcnZhYmxlKCl9cmVhbGlnbigpe3RoaXMuX3Nob3VsZFJlYWxpZ24ubmV4dCgpfWFsaWduQ29udGVudChhKXtpZighZWwodGhpcy5wbGF0Zm9ybUlkKSlyZXR1cm57eE9mZnNldDowLHlPZmZzZXQ6MH07dGhpcy5jdXJyZW50'@;
put 'QW5jaG9yQ29vcmRzPXRoaXMuZXZlbnRTZXJ2aWNlLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmNvbnRlbnRPZmZzZXRzPUNoKHRoaXMu'@;
put 'cG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2NvbnN0IGQ9ZnVuY3Rpb24gaFVlKGMsbCl7Y29uc3QgYT1bXSxkX2JvdHRvbT1jLnlPZmZzZXQrbC5oZWlnaHQsZF9sZWZ0PWMueE9mZnNldCxkX3JpZ2h0PWMueE9mZnNldCtsLndp'@;
put 'ZHRoO3JldHVybiBjLnlPZmZzZXQ+PTB8fGEucHVzaChqeC5UT1ApLGRfbGVmdD49MHx8YS5wdXNoKGp4LkxFRlQpLGRfYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KXx8YS5wdXNoKGp4LkJPVFRPTSksZF9yaWdodDw9'@;
put 'KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHxhLnB1c2goanguUklHSFQpLGF9KHRoaXMuY29udGVudE9mZnNldHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksaD1kLnJlZHVjZSgoZix2KT0+Zit2LDApO3JldHVybiAxPT09ZC5s'@;
put 'ZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWQxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGgpOjE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09ZDEuSE9SSVpPTlRBTD90aGlzLmhhbmRsZUhvcml6b250YWxBeGlzT25lVmlvbGF0aW9u'@;
put 'KGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09ZDEuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09ZDEuSE9SSVpPTlRBTCYmdGhpcy5oYW5kbGVIb3Jpem9udGFsQXhp'@;
put 'c1R3b1Zpb2xhdGlvbnMoaCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3A8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCs9TWF0aC5hYnModGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrdGhpcy5jdXJyZW50QW5j'@;
put 'aG9yQ29vcmRzLnk8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldD0wLXRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRl'@;
put 'bnRPZmZzZXRzPUNoKGZtKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz1DaCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1'@;
put 'cnJlbnRDb250ZW50Q29vcmRzKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9Q2goaWcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRz'@;
put 'LHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9RGIoZm0saWcsITApO3RoaXMuY29udGVudE9mZnNldHM9Q2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29y'@;
put 'ZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPURiKGZtLGlnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPUNoKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNh'@;
put 'c2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjp7Y29uc3QgZD1EYihmbSxpZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1DaChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9RGIo'@;
put 'Zm0saWcsITEpO3RoaXMuY29udGVudE9mZnNldHM9Q2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNh'@;
put 'c2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPUNoKGZtKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz1DaChpZyh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJl'@;
put 'bnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9Q2goaWcodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFs'@;
put 'QXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9RGIoZm0saWcsITEpO3RoaXMuY29udGVudE9mZnNldHM9Q2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9'@;
put 'Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOmNhc2UgMTp7Y29uc3QgZD1EYihmbSxpZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1DaChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihWeCksQ3IoaXMpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx6eD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEkpe3RoaXMuZG9jdW1l'@;
put 'bnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT12LHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPU0sdGhpcy5zbWFydE9wZW5TZXJ2aWNlPUksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3Zl'@;
put 'Q2xpY2tMaXN0ZW5lckZuPW51bGwsdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0PW51bGwsdGhpcy5jaGVja0NvbGxlY3Rvcj1uZXcgS3J9c2V0IG9wZW4oYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ISFhfXNldCBjb250ZW50QXQoYSl7dGhp'@;
put 'cy5zbWFydFBvc2l0aW9uU2VydmljZS5wb3NpdGlvbj1hfXNldCBvdXRzaWRlQ2xpY2tDbG9zZShhKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5vdXRzaWRlQ2xpY2tDbG9zZT0hIWF9c2V0IHNjcm9sbFRvQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2Nyb2xsVG9DbG9zZT0h'@;
put 'IWF9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7aWYodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW4mJnRoaXMudmlldyl7Y29uc3QgYT10aGlzLnZpZXcucm9vdE5vZGVzWzBdLm9mZnNldEhlaWdodDsodGhpcy5zaG91bGRSZWFsaWdufHxudWxsIT09dGhpcy5wcmV2aW91c0NvbnRlbnRIZWln'@;
put 'aHQmJnRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0IT09YSkmJih0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1hLHRoaXMuY2hlY2tDb2xsZWN0b3IuZW1pdCgpKX19bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5D'@;
put 'aGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlw'@;
put 'ZSh1bSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiYodGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJvcGFjaXR5IiwiMSIpLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3Bv'@;
put 'dmVyVmlzaWJsZUVtaXQoITApKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucmVtb3ZlQ29udGVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9YWRkQ29udGVudCgpe3RoaXMudmlldz10aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhp'@;
put 'cy50ZW1wbGF0ZSk7Y29uc3RbYV09dGhpcy52aWV3LnJvb3ROb2Rlczt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jb250ZW50UmVmPWEsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhhLCJjbHItcG9wb3Zlci1jb250ZW50IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLCIwcHgiKSx0'@;
put 'aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsImxlZnQiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsIm9wYWNpdHkiLCIwIiksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLGQ9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Bl'@;
put 'bkV2ZW50PWR9KSx0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2goZD0+e3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGQpfSksdGhpcy5zaG91bGRSZWFsaWduPSEwfXJlbW92ZUNvbnRlbnQoKXt0aGlzLnZpZXcmJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVu'@;
put 'ZXJGbiYmKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGE9PnRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGEpKSx0aGlzLmNvbnRhaW5lci5j'@;
put 'bGVhcigpLGRlbGV0ZSB0aGlzLnZpZXcsdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMSkpfWFsaWduQ29udGVudCgpe2lmKCF0aGlzLnZpZXcpcmV0dXJuO2NvbnN0IGE9dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5hbGlnbkNvbnRlbnQodGhpcy52aWV3LnJv'@;
put 'b3ROb2Rlc1swXSk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJ0b3AiLGAke2EueU9mZnNldH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwibGVmdCIsYCR7YS54T2Zmc2V0fXB4YCksdGhpcy5zbWFydE9w'@;
put 'ZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVkRW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUobW8pLCRlKFRzKSwkZSh3bCksJGUoRXMpLCRlKFkxZSksJGUoVngpLCRlKHNjKSl9LGMuXHUwMjc1ZGly'@;
put 'PUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbVm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnQiLCJvcGVuIl0sY29udGVudEF0OltWbi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY29udGVudEF0Il0sb3V0c2lkZUNs'@;
put 'aWNrQ2xvc2U6W1ZuLk5vbmUsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbVm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwic2Nyb2xsVG9DbG9zZSJdfX0pLGN9KSgpLFV4PSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlPWEsdGhpcy5vcGVuQ2xvc2VDaGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9Pnt0aGlzLm9wZW5DbG9z'@;
put 'ZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKSgkZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYp'@;
put 'e3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZUcigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSxaeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKTt2YXIgU2g9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVGVD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KFNofHx7'@;
put 'fSk7bGV0IFNwPWNsYXNze2NvbnN0cnVjdG9yKGwpe3RoaXMucmVuZGVyZXI9bCx0aGlzLl91bmxpc3RlbkZ1bmNzPVtdfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9cmVzZXQobCl7dGhpcy5fY3VycmVudD1sfWxpc3RlblRvQXJyb3dLZXlzKGwpe3RoaXMuX3VubGlzdGVu'@;
put 'RnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93dXAiLCgpPT4hdGhpcy5tb3ZlKFNoLlVQKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93ZG93biIsKCk9PiF0aGlzLm1vdmUoU2guRE9X'@;
put 'TikpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd2xlZnQiLCgpPT4hdGhpcy5tb3ZlKFNoLkxFRlQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dyaWdo'@;
put 'dCIsKCk9PiF0aGlzLm1vdmUoU2guUklHSFQpKSl9cmVnaXN0ZXJDb250YWluZXIobCxhPSIwIil7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobCwidGFiaW5kZXgiLGEpLHRoaXMubGlzdGVuVG9BcnJvd0tleXMobCksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIu'@;
put 'bGlzdGVuKGwsImtleWRvd24uc3BhY2UiLCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmVudGVyIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKX1tb3ZlVG8obCl7dm9pZCAw'@;
put 'IT09bCYmKHRoaXMuY3VycmVudCYmdGhpcy5jdXJyZW50LmJsdXIoKSxsLmZvY3VzKCksdGhpcy5fY3VycmVudD1sKX1tb3ZlKGwpe2xldCBhPSExO2lmKHRoaXMuY3VycmVudCl7Y29uc3QgZD10aGlzLmN1cnJlbnRbbF07ZCYmKFdNKGQpP2Q6ZHMoZCkpLnN1YnNjcmliZShmPT57ZiYmKHRo'@;
put 'aXMubW92ZVRvKGYpLGE9ITApfSl9cmV0dXJuIGF9YWN0aXZhdGVDdXJyZW50KCl7cmV0dXJuISghdGhpcy5jdXJyZW50fHwhdGhpcy5jdXJyZW50LmFjdGl2YXRlfHwodGhpcy5jdXJyZW50LmFjdGl2YXRlKCksMCkpfWRldGFjaExpc3RlbmVycygpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9y'@;
put 'RWFjaChsPT5sKCkpfX07U3AuXHUwMjc1ZmFjPWZ1bmN0aW9uKGwpe3JldHVybiBuZXcobHx8U3ApKENyKEVzKSl9LFNwLlx1MDI3NXByb3Y9cm4oe3Rva2VuOlNwLGZhY3Rvcnk6U3AuXHUwMjc1ZmFjfSk7Y29uc3QgSzFlPXtwcm92aWRlOlNwLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZlVlKGMs'@;
put 'bCl7cmV0dXJuIGN8fG5ldyBTcChsKX0sZGVwczpbW25ldyBSMSxuZXcgdWQsU3BdLEVzXX07dmFyIE8yPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQkVGT1JFPS0xXT0iQkVGT1JFIixjW2MuQUZURVI9MV09IkFGVEVSIixjfShPMnx8e30pO2NsYXNzIFRke31UZFsidG9wLXJpZ2h0Il09e2F4'@;
put 'aXM6ZDEuVkVSVElDQUwsc2lkZTpPMi5CRUZPUkUsYW5jaG9yOk9vLkVORCxjb250ZW50Ok9vLkVORH0sVGRbInRvcC1sZWZ0Il09e2F4aXM6ZDEuVkVSVElDQUwsc2lkZTpPMi5CRUZPUkUsYW5jaG9yOk9vLlNUQVJULGNvbnRlbnQ6T28uU1RBUlR9LFRkWyJib3R0b20tcmlnaHQiXT17YXhp'@;
put 'czpkMS5WRVJUSUNBTCxzaWRlOk8yLkFGVEVSLGFuY2hvcjpPby5FTkQsY29udGVudDpPby5FTkR9LFRkWyJib3R0b20tbGVmdCJdPXtheGlzOmQxLlZFUlRJQ0FMLHNpZGU6TzIuQUZURVIsYW5jaG9yOk9vLlNUQVJULGNvbnRlbnQ6T28uU1RBUlR9LFRkWyJyaWdodC10b3AiXT17YXhpczpk'@;
put 'MS5IT1JJWk9OVEFMLHNpZGU6TzIuQUZURVIsYW5jaG9yOk9vLkNFTlRFUixjb250ZW50Ok9vLkVORH0sVGRbInJpZ2h0LWJvdHRvbSJdPXtheGlzOmQxLkhPUklaT05UQUwsc2lkZTpPMi5BRlRFUixhbmNob3I6T28uU1RBUlQsY29udGVudDpPby5TVEFSVH0sVGRbImxlZnQtdG9wIl09e2F4'@;
put 'aXM6ZDEuSE9SSVpPTlRBTCxzaWRlOk8yLkJFRk9SRSxhbmNob3I6T28uQ0VOVEVSLGNvbnRlbnQ6T28uRU5EfSxUZFsibGVmdC1ib3R0b20iXT17YXhpczpkMS5IT1JJWk9OVEFMLHNpZGU6TzIuQkVGT1JFLGFuY2hvcjpPby5TVEFSVCxjb250ZW50Ok9vLlNUQVJUfTtjb25zdCB6TD1uZXcg'@;
put 'U3QoIlBPUE9WRVJfSE9TVF9BTkNIT1IiKTtsZXQgcFVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFu'@;
put 'Z2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RPcGVuQ2hhbmdlPWF9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfW9uRXNjYXBlS2V5KGEpe251bGwhPT10aGlzLmxhc3RPcGVuQ2hhbmdlJiYoITE9PT10aGlzLmxhc3RPcGVuQ2hhbmdlJiZhLnN0b3BQ'@;
put 'cm9wYWdhdGlvbigpLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5dXAuZXNj'@;
put 'YXBlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVzY2FwZUtleShmKX0pfSxzdGFuZGFsb25lOiEwfSksY30pKCksYWc9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc3RhbmRhbG9u'@;
put 'ZTohMCxmZWF0dXJlczpbdWEoW3NjLFZ4LFkxZSx7cHJvdmlkZTp6TCx1c2VFeGlzdGluZzpRaX1dKSx5ZChbcFVlXSldfSksY30pKCk7Y2xhc3MgTll7c3RhdGljIGxpbmtQYXJlbnQobCxhLGQpe2wuZm9yRWFjaChoPT5oW2RdPWEpfXN0YXRpYyBsaW5rVmVydGljYWwobCxhPSEwKXtsLmZv'@;
put 'ckVhY2goKGQsaCk9PntoPjAmJihkLnVwPWxbaC0xXSksaDxsLmxlbmd0aC0xJiYoZC5kb3duPWxbaCsxXSl9KSxhJiZsLmxlbmd0aD4xJiYobFswXS51cD1sW2wubGVuZ3RoLTFdLGxbbC5sZW5ndGgtMV0uZG93bj1sWzBdKX19bGV0IHBtPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0'@;
put 'aChhKXtjb25zdCBkPWEuY2xvbmVOb2RlKCEwKTtkLmlkJiYoZC5pZD1kLmlkKyItY2xvbmUiKSxkLmNsYXNzTGlzdC5hZGQoImRhdGFncmlkLWNlbGwtd2lkdGgtemVybyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgaD10aGlzLmNsaWVudFJlY3QoZCkud2lkdGg7cmV0'@;
put 'dXJuIGQucmVtb3ZlKCksaH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRofXNjcm9sbFdpZHRoKGEpe3JldHVybiBhLnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdl'@;
put 'dFByb3BlcnR5VmFsdWUoImhlaWdodCIpLDEwKX1jbGllbnRSZWN0KGEpe2NvbnN0IGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KGQudG9wLDEwKSxib3R0b206cGFyc2VJbnQoZC5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQoZC5sZWZ0LDEwKSxyaWdo'@;
put 'dDpwYXJzZUludChkLnJpZ2h0LDEwKSx3aWR0aDpwYXJzZUludChkLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZC5oZWlnaHQsMTApfX1taW5XaWR0aChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4td2lkdGgiKSwxMCl9Zm9j'@;
put 'dXMoYSl7YS5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxVTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1l'@;
put 'bnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jbHJFeHBhbmRUcmlnZ2VyPSExLHRoaXMuc3RhcnRIZWlnaHQ9MH1nZXQgZXhwYW5kQW5pbWF0aW9uKCl7cmV0dXJue3ZhbHVlOnRoaXMuY2xyRXhwYW5kVHJpZ2dlcixwYXJhbXM6e3N0YXJ0SGVpZ2h0OnRoaXMu'@;
put 'c3RhcnRIZWlnaHR9fX1hbmltYXRpb25TdGFydChhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKX1hbmltYXRpb25Eb25lKGEpeyJ2b2lkIiE9PWEuZnJvbVN0YXRlJiYo'@;
put 'dGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciKSx0aGlzLnVwZGF0ZVN0YXJ0SGVpZ2h0KCkpfXVwZGF0ZVN0YXJ0SGVpZ2h0KCl7dGhpcy5zdGFydEhlaWdodD10aGlzLmRvbUFkYXB0ZXIuY29tcHV0ZWRIZWlnaHQodGhpcy5l'@;
put 'bGVtZW50Lm5hdGl2ZUVsZW1lbnQpfHwwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShRaSksJGUocG0pLCRlKEVzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0'@;
put 'VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmZ1UoIkBleHBhbmRBbmltYXRpb24uc3RhcnQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvblN0YXJ0KGYpfSkoIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYW5pbWF0aW9uRG9u'@;
put 'ZShmKX0pLDImYSYmaFUoIkBleHBhbmRBbmltYXRpb24iLGQuZXhwYW5kQW5pbWF0aW9uKX0saW5wdXRzOntjbHJFeHBhbmRUcmlnZ2VyOiJjbHJFeHBhbmRUcmlnZ2VyIn0sZmVhdHVyZXM6W3VhKFtwbV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbd2goImV4cGFuZEFuaW1hdGlvbiIsW3R1KCJ0cnVlIDw9PiBmYWxzZSIsW2xvKHtoZWlnaHQ6Int7c3RhcnRIZWlnaHR9fXB4In0pLHcwKCIwLjJzIGVhc2UtaW4tb3V0Iixs'@;
put 'byh7aGVpZ2h0OiIqIn0pKV0pXSldfX0pLGN9KSgpLFZZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhXX0pLGN9KSgpLGdVZT0w'@;
put 'O2NvbnN0IFJiPW5ldyBTdCgiSUZfQUNUSVZFX0lEIiksdlVlPXtwcm92aWRlOlJiLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gbVVlKCl7cmV0dXJuKytnVWV9fTtsZXQgZjc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnJlbnRDaGFuZ2U9bmV3IEdufWdldCBjdXJyZW50Q2hh'@;
put 'bmdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jdXJyZW50Q2hhbmdlLm5leHQoYSkpfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxMYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhp'@;
put 'cy5pZD1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLmNvbnRhaW5lcj1mLHRoaXMuYWN0aXZlQ2hhbmdlPW5ldyBLcighMSksdGhpcy53YXNBY3RpdmU9ITEsdGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcoYS5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj1hLmN1cnJlbnRDaGFuZ2Uuc3Vic2NyaWJl'@;
put 'KHY9Pnt0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyh2KX0pfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9c2V0IGFjdGl2ZShhKXthJiYodGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkKX1uZ09uRGVzdHJveSgpe3Ro'@;
put 'aXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfWNoZWNrQW5kVXBkYXRlVmlldyhhKXtjb25zdCBkPWE9PT10aGlzLmlkO2QhPT10'@;
put 'aGlzLndhc0FjdGl2ZSYmKHRoaXMudXBkYXRlVmlldyhkKSx0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGQpLHRoaXMud2FzQWN0aXZlPWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShmNyksJGUoUmIpLCRlKHdsKSwkZShUcykpfSxjLlx1MDI3'@;
put 'NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkFjdGl2ZSIsIiJdXSxpbnB1dHM6e2FjdGl2ZTpbVm4uTm9uZSwiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksUDI9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5zdWJzY3JpcHRpb249YS5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57dGhpcy51cGRhdGVWaWV3KGYp'@;
put 'LHRoaXMub3BlbkNoYW5nZS5lbWl0KGYpfSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59c2V0IG9wZW4oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhh'@;
put 'KXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShzYyksJGUod2wpLCRlKFRzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmT3BlbiIsIiJdXSxpbnB1dHM6e29wZW46W1ZuLk5vbmUsImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSxYMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LHYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5leHBhbmQ9dix0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdWJzY3JpcHRp'@;
put 'b25zLnB1c2godi5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVWaWV3KCksdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHYuZXhwYW5kZWQpfSkpLHYuaGFzRXhwYW5kVGVtcGxhdGU9ISFhfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhw'@;
put 'YW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2YgYSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0s'@;
put 'dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVy'@;
put 'LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUod2wsOCksJGUoVHMpLCRlKFFpKSwkZShFcyksJGUoVzEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOltW'@;
put 'bi5Ob25lLCJjbHJJZkV4cGFuZGVkIiwiZXhwYW5kZWQiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNscklmRXhwYW5kZWRDaGFuZ2UifX0pLGN9KSgpLEYyPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3'@;
put 'NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhXX0pLGN9KSgpO2NvbnN0IHlVZT17cHJvdmlkZTpuZXcgU3QoIkZPQ1VTX09OX1ZJRVdfSU5JVCIpLHVzZVZhbHVlOiEwfTtsZXQgWkw9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlt5VWVdLGltcG9ydHM6W0xhXX0pLGN9KSgpLF9VZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxUbyxaeF19KSxjfSkoKSxIMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEtyKCExKSx0'@;
put 'aGlzLmJ1dHRvblN0YXRlPVoxLHRoaXMuc3RhdGU9WjEuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMuc3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBaMS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVt'@;
put 'ZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBa'@;
put 'MS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJk'@;
put 'aXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgWjEuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNlIFoxLkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFoxLkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1'@;
put 'dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMu'@;
put 'cmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoUWkpLCRlKEVzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRv'@;
put 'biIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5n'@;
put 'Q2hhbmdlIn0sZmVhdHVyZXM6W3VhKFt7cHJvdmlkZTpQeCx1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpISGUsbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjbHItbG9hZGluZy1i'@;
put 'dG4tY29udGVudCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJzcGlubmVyLWNoZWNrIl0sWzEsImNsci1sb2FkaW5nLWJ0bi1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoc2EoKSxkZSgwLCJzcGFuIiwwKSxndCgxLE5IZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkoMixWSGUsMiwxLCJuZy1jb250YWluZXIiLDEpKDMsQkhlLDIsMSwic3BhbiIsMiksaGUoKSksMiZhJiYoTWUoIkBwYXJlbnQiLHZvaWQgMCkoIm5nU3dpdGNoIixkLnN0YXRlKSxmZSgpLE1lKCJu'@;
put 'Z1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuTE9BRElORyksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLlNVQ0NFU1MpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5ERUZBVUxUKSl9LGRlcGVuZGVuY2llczpbeDIsZHBdLGVuY2Fwc3VsYXRpb246'@;
put 'MixkYXRhOnthbmltYXRpb246W3doKCJwYXJlbnQiLFt0dSgiOmVudGVyIixbXSldKSx3aCgiZGVmYXVsdEJ1dHRvbiIsW3R1KCI6ZW50ZXIiLFtsbyh7b3BhY2l0eTowfSksdzAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLGxvKHtvcGFjaXR5OjF9KSldKSx0dSgiOmxlYXZlIixbbG8oe29wYWNp'@;
put 'dHk6MH0pXSldKSx3aCgic3Bpbm5lciIsW3R1KCI6ZW50ZXIiLFtsbyh7b3BhY2l0eTowfSksdzAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLGxvKHtvcGFjaXR5OjF9KSldKSx0dSgiOmxlYXZlIixbbG8oe29wYWNpdHk6MX0pLHcwKCIxMDBtcyBlYXNlLW91dCIsbG8oe29wYWNpdHk6MH0pKV0p'@;
put 'XSksd2goInZhbGlkYXRlZCIsW3R1KCI6ZW50ZXIiLFt3MCgiNjAwbXMiLHhQZShbbG8oe3RyYW5zZm9ybToic2NhbGUoMCwwKSIsb2Zmc2V0OjB9KSxsbyh7b3BhY2l0eToxLG9mZnNldDouMn0pLGxvKHt0cmFuc2Zvcm06InNjYWxlKDEuMiwxLjIpIixvZmZzZXQ6LjR9KSxsbyh7dHJhbnNm'@;
put 'b3JtOiJzY2FsZSguOSwuOSkiLG9mZnNldDouNn0pLGxvKHt0cmFuc2Zvcm06InNjYWxlKDEsMSkiLG9mZnNldDoxfSldKSldKSx0dSgiOmxlYXZlIixbbG8oe29wYWNpdHk6MX0pLHcwKCIxMDBtcyBlYXNlLW91dCIsbG8oe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLENVZT0oKCk9Pntj'@;
put 'bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYV19KSxjfSkoKSxTVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKEgw'@;
put 'ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0NVZSxfVWVdfSksY30pKCksTVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXt9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFd4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpLHhVZT0wLE1oPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udHJvbC0iKyArK3hVZSx0'@;
put 'aGlzLl9pZENoYW5nZT1uZXcgSnIodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRVVlPTAscDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250YWluZXItIisgKytFVWUs'@;
put 'dGhpcy5faWRDaGFuZ2U9bmV3IEpyKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2xldCBCWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWlu'@;
put 'ZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iYWJzdHJhY3QifWdldCBpZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lcklkU2VydmljZT9gJHt0aGlzLmNvbnRhaW5lcklkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOnRoaXMuY29udHJvbElkU2VydmljZT9g'@;
put 'JHt0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShNaCw4KSwkZShwNyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxUVWU9KCgp'@;
put 'PT57Y2xhc3MgYyBleHRlbmRzIEJZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJlcnJvciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKCRlKE1oLDgpLCRlKHA3LDgpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLFRyKCJjbHItc3VidGV4dCIs'@;
put 'ITApKCJlcnJvciIsITApKX0sZmVhdHVyZXM6W0NhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksV0w9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEJZe2Nv'@;
put 'bnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJoZWxwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShNaCw4KSwk'@;
put 'ZShwNyw4KSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWhlbHBlciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksVHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbQ2FdLG5n'@;
put 'Q29udGVudFNlbGVjdG9yczp5cyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxoMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzPVtdLHRoaXMu'@;
put 'X2NvbnRyb2xDaGFuZ2VzPW5ldyBHbix0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzPW5ldyBHbix0aGlzLl9oZWxwZXJzPW5ldyBHbn1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLl9jb250cm9sfWdldCBjb250cm9sQ2hhbmdlcygpe3JldHVybiB0aGlzLl9jb250cm9sQ2hhbmdl'@;
put 'cy5hc09ic2VydmFibGUoKX1nZXQgYWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc31nZXQgYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBo'@;
put 'YXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4hIXRoaXMuX2FkZGl0aW9uYWxDb250cm9scz8ubGVuZ3RofWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sPWEsdGhpcy5fY29udHJvbENo'@;
put 'YW5nZXMubmV4dChhKX1hZGRBZGRpdGlvbmFsQ29udHJvbChhKXt0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHMucHVzaChhKSx0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLm5leHQodGhpcy5fYWRkaXRpb25hbENvbnRyb2xzKX1zZXRIZWxwZXJzKGEpe3RoaXMuX2hlbHBlcnMubmV4'@;
put 'dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIEFkPWZ1bmN0aW9uKGMpe3JldHVybiBjLk5PTkU9Ik5PTkUiLGMuVkFMSUQ9IlZBTElEIixj'@;
put 'LklOVkFMSUQ9IklOVkFMSUQiLGN9KEFkfHx7fSk7bGV0IGtkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdD1uZXcgR24sdGhpcy5zdGF0dXNDaGFuZ2VzPXRoaXMuZ2V0U3RhdHVzQ2hhbmdlcyhhKS5waXBlKGowZSgxKSl9dHJp'@;
put 'Z2dlclN0YXR1c0NoYW5nZSgpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3QubmV4dCgpfWdldFN0YXR1c0NoYW5nZXMoYSl7cmV0dXJuIFg4KFthLmNvbnRyb2xDaGFuZ2VzLGEuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5waXBlKFQyKFtdKSldKS5waXBlKGoxKChbZCxoXSk9'@;
put 'PntpZihkKXtjb25zdCBmPVtkLC4uLmhdO3JldHVybiB4eChYOChmLm1hcCh2PT52LnN0YXR1c0NoYW5nZXMpKSx0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0LnBpcGUoUHIoKCk9PmYubWFwKHY9PnYuc3RhdHVzKSkpKX1yZXR1cm4gRTJ9KSxQcihkPT5kLmluY2x1ZGVzKEFkLklO'@;
put 'VkFMSUQpP0FkLklOVkFMSUQ6ZC5pbmNsdWRlcyhBZC5WQUxJRCk/QWQuVkFMSUQ6QWQuTk9ORSksVDIoQWQuTk9ORSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihoMSkpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1'@;
put 'MDI3NWZhY30pLGN9KSgpO2NsYXNzIFlMe31mdW5jdGlvbiBlZGUoYyl7cmV0dXJuW2Mse3Byb3ZpZGU6WUwsdXNlRXhpc3Rpbmc6Y31dfWZ1bmN0aW9uIHRkZShjLGwsYSl7cmV0dXJuIFF0LmNyZWF0ZShkPT57bChkKTtjb25zdCBoPWMuc3Vic2NyaWJlKGQpO3JldHVybigpPT57aC51bnN1'@;
put 'YnNjcmliZSgpLGEmJmEoZCl9fSl9bGV0IEdMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5wYXJlbnQ9ZCx0aGlzLnRvZ2dsZVNlcnZpY2U9aCx0aGlzLmZvY3VzU2VydmljZT1mLHRoaXMucGxhdGZvcm1JZD12LHRoaXMuaWQ9X3Uo'@;
put 'KSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksZHx8dGhpcy5oYW5kbGVSb290Rm9jdXMoKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlz'@;
put 'Ll90cmlnZ2VyfXNldCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSk6'@;
put 'KHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93dXAiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93'@;
put 'bi5hcnJvd2Rvd24iLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLmZvY3VzU2VydmljZS5saXN0ZW5Ub0Fycm93S2V5cyhhKSl9Z2V0IGNvbnRhaW5lcigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9c2V0IGNvbnRhaW5lcihhKXt0aGlzLl9jb250YWlu'@;
put 'ZXI9YSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi50YWIiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0'@;
put 'ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlKFNoLkxFRlQpLGQuc3RvcFByb3BhZ2F0aW9uKCl9KSk6KHRoaXMuZm9jdXNTZXJ2aWNlLnJlZ2lzdGVyQ29udGFpbmVyKGEpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rl'@;
put 'bihhLCJrZXlkb3duLmVzY2FwZSIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5jaGlsZHJlbi5waXBlKGdoKDEpKS5zdWJzY3JpYmUoZj0+Zi5m'@;
put 'b3JFYWNoKHY9PnYuYmx1cigpKSk7Y29uc3QgaD1kLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aCYmZWwodGhpcy5wbGF0Zm9ybUlkKSYmKGEuY29udGFpbnMoaCl8fGg9PT10aGlzLnRyaWdnZXIpfHwodGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSEx'@;
put 'LHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVT'@;
put 'ZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P1NoLlJJR0hUOlNoLkRP'@;
put 'V04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZv'@;
put 'Y3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQmJnRoaXMuZm9jdXMoKSksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPWR9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9Zm9jdXMoKXt0aGlzLnRyaWdnZXImJmVsKHRoaXMucGxhdGZvcm1J'@;
put 'ZCkmJnRoaXMudHJpZ2dlci5mb2N1cygpfWJsdXIoKXt0aGlzLnRyaWdnZXImJmVsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5ibHVyKCl9YWN0aXZhdGUoKXtlbCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuY2xpY2soKX1yZXNldENoaWxkcmVuKCl7dGhpcy5jaGls'@;
put 'ZHJlbj1uZXcgTXgoMSksdGhpcy5wYXJlbnQ/dGhpcy5yaWdodD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoUHIoYT0+YVswXSkpOih0aGlzLmRvd249dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKFByKGE9PmFbMF0pKSx0aGlzLnVwPXRoaXMub3BlbkFuZEdldENoaWxk'@;
put 'cmVuKCkucGlwZShQcihhPT5hW2EubGVuZ3RoLTFdKSkpfWFkZENoaWxkcmVuKGEpe05ZLmxpbmtWZXJ0aWNhbChhKSx0aGlzLnBhcmVudCYmTlkubGlua1BhcmVudChhLHRoaXMuY2xvc2VBbmRHZXRUaGlzKCksU2guTEVGVCksdGhpcy5jaGlsZHJlbi5uZXh0KGEpfW9wZW5BbmRHZXRDaGls'@;
put 'ZHJlbigpe3JldHVybiB0ZGUodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiB0ZGUoZHModGhpcyksKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8YykoQ3IoRXMpLENyKGMsMTIpLENyKHNjKSxDcihTcCksQ3IoaXMpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBBVWU9ZWRlKEdMKTtsZXQgWXg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3Ro'@;
put 'aXMuX2NoYW5nZXM9bmV3IEdufWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Y2xvc2VNZW51cygpe3RoaXMuX2NoYW5nZXMubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBy'@;
put 'b3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IERVZT17cHJvdmlkZTpZeCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGtVZShjKXtyZXR1cm4gY3x8bmV3IFl4fSxkZXBzOltbbmV3IFIxLG5ldyB1ZCxZeF1dfTtsZXQgc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1'@;
put 'Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFyZW50PWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5mb2N1c0hhbmRsZXI9aCx0aGlzLmlzTWVudUNsb3NhYmxlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh2LmNoYW5nZXMuc3Vic2NyaWJlKE09PmQu'@;
put 'b3Blbj1NKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+Zi5tYXJrRm9yQ2hlY2soKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoYywxMiksJGUoc2MpLCRlKEdMKSwkZSh4byksJGUoWXgpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZHJv'@;
put 'cGRvd24iLCEwKSgib3BlbiIsZC50b2dnbGVTZXJ2aWNlLm9wZW4pfSxpbnB1dHM6e2lzTWVudUNsb3NhYmxlOltWbi5Ob25lLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsImlzTWVudUNsb3NhYmxlIl19LGZlYXR1cmVzOlt1YShbRFVlLEsxZSxBVWVdKSx5ZChbYWddKV0sbmdDb250ZW50'@;
put 'U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3ZhciBUaT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJJR0hUX0NFTlRFUj0wXT0iUklHSFRfQ0VOVEVSIixjW2MuUklHSFRf'@;
put 'VE9QPTFdPSJSSUdIVF9UT1AiLGNbYy5SSUdIVF9CT1RUT009Ml09IlJJR0hUX0JPVFRPTSIsY1tjLlRPUF9DRU5URVI9M109IlRPUF9DRU5URVIiLGNbYy5UT1BfUklHSFQ9NF09IlRPUF9SSUdIVCIsY1tjLlRPUF9MRUZUPTVdPSJUT1BfTEVGVCIsY1tjLkJPVFRPTV9DRU5URVI9Nl09IkJP'@;
put 'VFRPTV9DRU5URVIiLGNbYy5CT1RUT01fUklHSFQ9N109IkJPVFRPTV9SSUdIVCIsY1tjLkJPVFRPTV9MRUZUPThdPSJCT1RUT01fTEVGVCIsY1tjLkxFRlRfQ0VOVEVSPTldPSJMRUZUX0NFTlRFUiIsY1tjLkxFRlRfVE9QPTEwXT0iTEVGVF9UT1AiLGNbYy5MRUZUX0JPVFRPTT0xMV09IkxF'@;
put 'RlRfQk9UVE9NIixjfShUaXx8e30pO2NsYXNzIExVZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249'@;
put 'ImFic29sdXRlIixsLnN0eWxlLnRvcD0wLGwuc3R5bGUuYm90dG9tPSJhdXRvIixsLnN0eWxlLmxlZnQ9MCxsLnN0eWxlLnJpZ2h0PSJhdXRvIn1hbmNob3IobCxhLGQse29mZnNldFg6aD0wLG9mZnNldFk6Zj0wLHVzZUFuY2hvclBhcmVudDp2PSExfT17fSl7dGhpcy5hZGRTY3JvbGxFdmVu'@;
put 'dExpc3RlbmVycyhsKSx2JiYobD1sLnBhcmVudE5vZGUpLGwuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Y29uc3QgTT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEk9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBHPU0ubGVmdC1JLmxlZnQraCxyZT1NLnRvcC1J'@;
put 'LnRvcCtmO3N3aXRjaChhKXtjYXNlIFRpLkxFRlRfVE9QOmNhc2UgVGkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBUaS5UT1BfQ0VOVEVSOkcrPU0ud2lkdGgvMjticmVhaztjYXNlIFRpLlRPUF9SSUdIVDpjYXNlIFRpLlJJR0hUX1RPUDpHKz1NLndpZHRoO2JyZWFrO2Nhc2UgVGkuTEVGVF9CT1RU'@;
put 'T006Y2FzZSBUaS5CT1RUT01fTEVGVDpyZSs9TS5oZWlnaHQ7YnJlYWs7Y2FzZSBUaS5CT1RUT01fQ0VOVEVSOnJlKz1NLmhlaWdodCxHKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBUaS5CT1RUT01fUklHSFQ6Y2FzZSBUaS5SSUdIVF9CT1RUT006cmUrPU0uaGVpZ2h0LEcrPU0ud2lkdGg7YnJl'@;
put 'YWs7Y2FzZSBUaS5MRUZUX0NFTlRFUjpyZSs9TS5oZWlnaHQvMjticmVhaztjYXNlIFRpLlJJR0hUX0NFTlRFUjpyZSs9TS5oZWlnaHQvMixHKz1NLndpZHRofXN3aXRjaChkKXtjYXNlIFRpLkxFRlRfVE9QOmNhc2UgVGkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBUaS5UT1BfQ0VOVEVSOkctPUku'@;
put 'd2lkdGgvMjticmVhaztjYXNlIFRpLlRPUF9SSUdIVDpjYXNlIFRpLlJJR0hUX1RPUDpHLT1JLndpZHRoO2JyZWFrO2Nhc2UgVGkuTEVGVF9CT1RUT006Y2FzZSBUaS5CT1RUT01fTEVGVDpyZS09SS5oZWlnaHQ7YnJlYWs7Y2FzZSBUaS5CT1RUT01fQ0VOVEVSOnJlLT1JLmhlaWdodCxHLT1J'@;
put 'LndpZHRoLzI7YnJlYWs7Y2FzZSBUaS5CT1RUT01fUklHSFQ6Y2FzZSBUaS5SSUdIVF9CT1RUT006cmUtPUkuaGVpZ2h0LEctPUkud2lkdGg7YnJlYWs7Y2FzZSBUaS5MRUZUX0NFTlRFUjpyZS09SS5oZWlnaHQvMjticmVhaztjYXNlIFRpLlJJR0hUX0NFTlRFUjpyZS09SS5oZWlnaHQvMixH'@;
put 'LT1JLndpZHRofWNvbnN0IHVlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSx5ZT1wYXJzZUludCh1ZS5tYXJnaW5MZWZ0LDEwKSxFZT1wYXJzZUludCh1ZS5tYXJnaW5SaWdodCwxMCksQmU9cGFyc2VJbnQodWUubWFyZ2luVG9wLDEwKSxHZT1wYXJzZUludCh1ZS5tYXJnaW5Cb3R0'@;
put 'b20sMTApO3N3aXRjaChhKXtjYXNlIFRpLkxFRlRfVE9QOmNhc2UgVGkuVE9QX0xFRlQ6Y2FzZSBUaS5UT1BfUklHSFQ6Y2FzZSBUaS5SSUdIVF9UT1A6KGQ9PT1UaS5CT1RUT01fUklHSFR8fGQ9PT1UaS5SSUdIVF9CT1RUT00pJiYocmUtPUdlLEctPUVlKSwoZD09PVRpLkJPVFRPTV9MRUZU'@;
put 'fHxkPT09VGkuTEVGVF9CT1RUT00pJiYocmUtPUJlLEcrPXllKSwoZD09PVRpLlRPUF9MRUZUfHxkPT09VGkuTEVGVF9UT1ApJiYocmUrPUJlLEcrPXllKSwoZD09PVRpLlRPUF9SSUdIVHx8ZD09PVRpLlJJR0hUX1RPUCkmJihyZSs9QmUsRy09RWUpO2JyZWFrO2Nhc2UgVGkuTEVGVF9CT1RU'@;
put 'T006Y2FzZSBUaS5CT1RUT01fTEVGVDpjYXNlIFRpLkJPVFRPTV9SSUdIVDpjYXNlIFRpLlJJR0hUX0JPVFRPTTooZD09PVRpLkJPVFRPTV9MRUZUfHxkPT09VGkuTEVGVF9CT1RUT00pJiYocmUtPUdlLEcrPXllKSwoZD09PVRpLkJPVFRPTV9SSUdIVHx8ZD09PVRpLlJJR0hUX0JPVFRPTSkm'@;
put 'JihyZS09R2UsRy09RWUpLChkPT09VGkuVE9QX0xFRlR8fGQ9PT1UaS5MRUZUX1RPUCkmJihyZSs9QmUsRys9eWUpLChkPT09VGkuVE9QX1JJR0hUfHxkPT09VGkuUklHSFRfVE9QKSYmKHJlKz1CZSxHLT1FZSk7YnJlYWs7Y2FzZSBUaS5UT1BfQ0VOVEVSOnJlLT1HZSxHKz15ZSxHLT1FZTti'@;
put 'cmVhaztjYXNlIFRpLkJPVFRPTV9DRU5URVI6cmUrPUJlLEcrPXllLEctPUVlO2JyZWFrO2Nhc2UgVGkuTEVGVF9DRU5URVI6cmUrPUJlLHJlLT1HZSxHLT1FZTticmVhaztjYXNlIFRpLlJJR0hUX0NFTlRFUjpyZSs9QmUscmUtPUdlLEcrPXllfXJldHVybiB0aGlzLmVsZW1lbnQuc3R5bGUu'@;
put 'dHJhbnNmb3JtPWB0cmFuc2xhdGVYKCR7TWF0aC5yb3VuZChHKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91bmQocmUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZl'@;
put 'bnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHwiYWJzb2x1dGUiPT09YXx8ImZpeGVkIj09PWF9ZW1pdFNjcm9sbEV2ZW50KCl7dGhpcy5fc2Nyb2xsLm5leHQoKX1hZGRTY3JvbGxF'@;
put 'dmVudExpc3RlbmVycyhsKXt0aGlzLl9zY3JvbGw9bmV3IEduO2NvbnN0IGE9bDtsZXQgZD1sO2Zvcig7ZCYmZCE9PWRvY3VtZW50JiYodGhpcy5zY3JvbGxzKGQpJiYoZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKSx0aGlzLnNjcm9sbGFi'@;
put 'bGVFbGVtZW50cy5wdXNoKGQpKSxkPT09YXx8IXRoaXMuaXNQb3NpdGlvbmVkKGQpKTspZD1kLnBhcmVudE5vZGV9cmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKXtmb3IoY29uc3QgbCBvZiB0aGlzLnNjcm9sbGFibGVFbGVtZW50cylsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIs'@;
put 'dGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX3Njcm9sbCYmKHRoaXMuX3Njcm9sbC5jb21wbGV0ZSgpLGRlbGV0ZSB0aGlzLl9zY3JvbGwpfXNjcm9sbHMobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpO3JldHVy'@;
put 'biJzY3JvbGwiPT09YS5vdmVyZmxvd1h8fCJhdXRvIj09PWEub3ZlcmZsb3dYfHwic2Nyb2xsIj09PWEub3ZlcmZsb3dZfHwiYXV0byI9PT1hLm92ZXJmbG93WX19Y29uc3QgYWRlPSJpcy1vZmYtc2NyZWVuIjtsZXQgalk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFy'@;
put 'ZW50SG9zdD1kLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMSx0aGlzLnBvcG92ZXJPcHRpb25zPXt9LHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrPWg9Pnt0aGlzLmFuY2hvckVsZW0u'@;
put 'Y29udGFpbnMoaC50YXJnZXQpfHwodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSx0aGlzLmVsPWEuZ2V0KFFpKSx0aGlzLnRvZ2dsZVNlcnZpY2U9YS5nZXQoc2MpLHRoaXMucmVuZGVyZXI9YS5nZXQoRXMpLHRoaXMubmdab25lPWEuZ2V0KEdhKSx0aGlzLnJlZj1hLmdldCh4byksdGhp'@;
put 'cy5hbmNob3JFbGVtPWQubmF0aXZlRWxlbWVudCx0aGlzLnBvcG92ZXJJbnN0YW5jZT1uZXcgTFVlKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShUMih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbikpLnN1'@;
put 'YnNjcmliZShoPT57aD8odGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYWRlKSk6KHRoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnJlbmRlcmVyLmFk'@;
put 'ZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxhZGUpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMudXBkYXRlQW5jaG9yJiYodGhpcy51cGRhdGVBbmNob3I9ITEs'@;
put 'dGhpcy5wb3BvdmVySW5zdGFuY2UuYW5jaG9yKHRoaXMuYW5jaG9yRWxlbSx0aGlzLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMpLnN1YnNjcmliZSgoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfSksdGhpcy5hdHRhY2hPdXRzaWRlQ2xp'@;
put 'Y2tMaXN0ZW5lcigpKX1uZ09uRGVzdHJveSgpe3RoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWFuY2hvcigpe3RoaXMudXBkYXRlQW5jaG9yPSEwfXJlbGVhc2UoKXt0aGlzLmRldGFjaE91dHNpZGVDbGlja0xp'@;
put 'c3RlbmVyKCksdGhpcy5wb3BvdmVySW5zdGFuY2UucmVsZWFzZSgpfWF0dGFjaEVTQ0xpc3RlbmVyKCl7dGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcnx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9'@;
put 'dGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwia2V5ZG93biIsYT0+e2EmJmEua2V5JiZMMihhLmtleSk9PT1wYS5Fc2NhcGUmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMucmVmLm1hcmtGb3JDaGVjaygpfSl9KX0pfWRldGFjaEVT'@;
put 'Q0xpc3RlbmVyKCl7dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyKCksdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwpfWF0dGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZ0aGlzLnRvZ2dsZVNl'@;
put 'cnZpY2Uub3BlbiYmZG9jdW1lbnQmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXImJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9ZGV0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRz'@;
put 'aWRlQ2xpY2smJmRvY3VtZW50JiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyJiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKSgkZShEbyksJGUoUWksNCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksZzc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGpZe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRyb3Bkb3duLW1lbnUgc2hvdWxkIG9ubHkgYmUgdXNl'@;
put 'ZCBpbnNpZGUgb2YgYSBjbHItZHJvcGRvd24iKTtzdXBlcihhLGQpLGg/KHRoaXMuYW5jaG9yUG9pbnQ9VGkuUklHSFRfVE9QLHRoaXMucG9wb3ZlclBvaW50PVRpLkxFRlRfVE9QKToodGhpcy5hbmNob3JQb2ludD1UaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1UaS5MRUZUX1RP'@;
put 'UCksdGhpcy5wb3BvdmVyT3B0aW9ucy5hbGxvd011bHRpcGxlT3Blbj0hMCx0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyPSEwLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLmZvY3VzSGFuZGxlcj1mfXNldCBwb3NpdGlvbihhKXtzd2l0Y2goYSl7'@;
put 'Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9VGkuVE9QX1JJR0hULHRoaXMucG9wb3ZlclBvaW50PVRpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PVRpLlRPUF9MRUZULHRoaXMucG9wb3ZlclBvaW50PVRpLkxFRlRfQk9UVE9NO2Jy'@;
put 'ZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PVRpLkJPVFRPTV9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1UaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6ZGVmYXVsdDp0aGlzLmFuY2hvclBvaW50PVRpLkJPVFRPTV9MRUZULHRoaXMucG9wb3ZlclBv'@;
put 'aW50PVRpLkxFRlRfVE9QO2JyZWFrO2Nhc2UicmlnaHQtdG9wIjp0aGlzLmFuY2hvclBvaW50PVRpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1UaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1UaS5SSUdIVF9CT1RUT00sdGhpcy5wb3Bv'@;
put 'dmVyUG9pbnQ9VGkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJsZWZ0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1UaS5MRUZUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1UaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1UaS5MRUZUX0JPVFRPTSx0aGlz'@;
put 'LnBvcG92ZXJQb2ludD1UaS5SSUdIVF9CT1RUT019fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNIYW5kbGVyLmNvbnRhaW5lcj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5mb2N1c0hhbmRsZXIuYWRkQ2hpbGRyZW4o'@;
put 'dGhpcy5pdGVtcy50b0FycmF5KCkpKSx0aGlzLml0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLmZvY3VzSGFuZGxlci5yZXNldENoaWxkcmVuKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpKCRlKERvKSwkZSh6TCw4KSwkZShjLDEyKSwkZShHTCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZHJvcGRvd24tbWVudSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLFlMLDQpLDImYSl7bGV0IGY7eWkoZj1iaSgp'@;
put 'KSYmKGQuaXRlbXM9Zil9fSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIiwibWVudSIpLFRyKCJkcm9wZG93bi1tZW51IiwhMCkpfSxpbnB1dHM6e3Bvc2l0aW9uOltWbi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVz'@;
put 'OltDYV0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG03PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNl'@;
put 'PWQsdGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMCxhLnBhcmVudCYmKHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITEpLGYudHJpZ2dlcj1oLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKGEpe3Ro'@;
put 'aXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHNnKSwkZShzYyksJGUoUWkpLCRlKEdMKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3du'@;
put 'VHJpZ2dlciIsIiJdLFsiIiwiY2xyRHJvcGRvd25Ub2dnbGUiLCIiXV0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihocigiYXJpYS1oYXNw'@;
put 'b3B1cCIsIm1lbnUiKSgiYXJpYS1leHBhbmRlZCIsZC5hY3RpdmUpLFRyKCJkcm9wZG93bi10b2dnbGUiLGQuaXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFibGUiLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgiYWN0aXZlIixk'@;
put 'LmFjdGl2ZSkpfX0pLGN9KSgpO2NvbnN0IE9VZT1be3Byb3ZpZGU6WUwsdXNlQ2xhc3M6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnBsYXRmb3JtSWQ9aCx0aGlzLmlkPV91KCksdGhpcy5kaXNhYmxlZD0hMSxkLnNldEF0'@;
put 'dHJpYnV0ZShhLm5hdGl2ZUVsZW1lbnQsImlkIix0aGlzLmlkKSxkLnNldEF0dHJpYnV0ZShhLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKX1mb2N1cygpe2VsKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQs'@;
put 'InRhYmluZGV4IiwiMCIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNtb290aCIsYmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KSl9Ymx1cigpe2VsKHRoaXMucGxhdGZvcm1JZCkm'@;
put 'Jih0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYmx1cigpKX1hY3RpdmF0ZSgpe2VsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihRaSksQ3IoRXMpLENyKGlzKSl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCl9XTtsZXQgUGI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhp'@;
put 'cy5kcm9wZG93bj1hLHRoaXMuX2Ryb3Bkb3duU2VydmljZT1kLHRoaXMuZm9jdXNhYmxlSXRlbT1ofWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YX1n'@;
put 'ZXQgZHJvcGRvd25JdGVtSWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmlkfXNldCBkcm9wZG93bkl0ZW1JZChhKXt0aGlzLmZvY3VzYWJsZUl0ZW0uaWQ9YX1vbkRyb3Bkb3duSXRlbUNsaWNrKCl7aWYodGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQm'@;
put 'JnRoaXMuZHJvcGRvd24udG9nZ2xlU2VydmljZS5vcGVuKXtjb25zdCBhPXRoaXMuZmluZFJvb3REcm9wZG93bigpO2EuZm9jdXNIYW5kbGVyLmZvY3VzKCksYS5mb2N1c0hhbmRsZXIuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMX1zZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93'@;
put 'bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRp'@;
put 'YXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX1maW5kUm9vdERyb3Bkb3duKCl7bGV0IGE9dGhpcy5kcm9w'@;
put 'ZG93bjtmb3IoO2EucGFyZW50OylhPWEucGFyZW50O3JldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShzZyksJGUoWXgpLCRlKFlMKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duSXRl'@;
put 'bSIsIiJdXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm9uRHJvcGRvd25JdGVtQ2xpY2soKX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNwYWNlS2V5ZG93bihmKX0pKCJr'@;
put 'ZXlkb3duLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVudGVyS2V5ZG93bihmKX0pLDImYSYmKGhyKCJyb2xlIiwibWVudWl0ZW0iKSgiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImlkIixkLmRyb3Bkb3duSXRlbUlkKSxUcigiZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkcm9w'@;
put 'ZG93bi1pdGVtIiwhMCkpfSxpbnB1dHM6e2Rpc2FibGVkOltWbi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZHJvcGRvd25JdGVtSWQ6W1ZuLk5vbmUsImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W3VhKFtPVWVdKV19KSxjfSkoKSx6WT0oKCk9PntjbGFzcyBje31y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxGMixUb119KSxjfSkoKSxVWT0oKCk9PntjbGFzcyBje3NldCB0cmlnZ2VyRWwoYSl7dGhpcy5fdHJpZ2dlckVs'@;
put 'PWF9Zm9jdXNUcmlnZ2VyKCl7dGhpcy5fdHJpZ2dlckVsJiZ0aGlzLl90cmlnZ2VyRWwuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWlk9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyBHbn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZhYmxlKCl9c2V0SWQoYSl7dGhpcy5faWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw'@;
put 'Mjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksJEw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5lbD1kLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9aCx0aGlzLnNpZ25wb3N0Rm9jdXNN'@;
put 'YW5hZ2VyPWYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZG9jdW1lbnQ9dn1uZ09uSW5pdCgpe3RoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIudHJpZ2dlckVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnN1YnNj'@;
put 'cmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuYXJpYUV4cGFuZGVkPWE7Y29uc3QgZD10aGlzLmlzT3Blbjt0aGlzLmlzT3Blbj1hLCF0aGlzLmlzT3BlbiYmZCYmdGhpcy5mb2N1c09uQ2xvc2UoKX0pLHRoaXMuc2lnbnBvc3RJ'@;
put 'ZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGE9PnRoaXMuYXJpYUNvbnRyb2w9YSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZl'@;
put 'bnQoYSl9Zm9jdXNPbkNsb3NlKCl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmIXRoaXMuaXNPcGVuJiZ0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmRvY3VtZW50LmJvZHkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHNjKSwkZShRaSksJGUoWlkpLCRlKFVZKSwkZShtbyksJGUoaXMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbMSwic2lnbnBvc3QtdHJp'@;
put 'Z2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihocigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xz'@;
put 'IixkLmFyaWFDb250cm9sKSxUcigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLEtMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEpe3RoaXMudXNlQ3VzdG9tVHJp'@;
put 'Z2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHRvKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLCRM'@;
put 'LDUpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigic2lnbnBvc3QiLCEwKX0saW5wdXRzOntzaWducG9zdFRyaWdnZXJBcmlhTGFiZWw6W1ZuLk5vbmUsImNsclNp'@;
put 'Z25wb3N0VHJpZ2dlckFyaWFMYWJlbCIsInNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCJdfSxmZWF0dXJlczpbdWEoW1VZLFpZXSkseWQoW2FnXSldLG5nQ29udGVudFNlbGVjdG9yczp5cyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyU2ln'@;
put 'bnBvc3RUcmlnZ2VyIiwiIiwxLCJzaWducG9zdC1hY3Rpb24iLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1saW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLGpIZSwzLDIsIm5nLWNvbnRhaW5lciIsMCks'@;
put 'V3IoMSkpLDImYSYmTWUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W2JhLGVvLCRMXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBQVWU9eyJ0b3AtbGVmdCI6e2FuY2hvclBvaW50OlRpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OlRpLkJPVFRPTV9S'@;
put 'SUdIVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6VGkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6VGkuQk9UVE9NX0NFTlRFUixvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtcmlnaHQiOnthbmNob3JQb2ludDpUaS5UT1BfQ0VOVEVSLHBvcG92'@;
put 'ZXJQb2ludDpUaS5CT1RUT01fTEVGVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJyaWdodC10b3AiOnthbmNob3JQb2ludDpUaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OlRpLkxFRlRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6'@;
put 'VGkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sInJpZ2h0LWJvdHRvbSI6e2FuY2hvclBvaW50OlRpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6VGkuTEVGVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJib3R0b20t'@;
put 'cmlnaHQiOnthbmNob3JQb2ludDpUaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5UT1BfTEVGVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1taWRkbGUiOnthbmNob3JQb2ludDpUaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5UT1BfQ0VOVEVSLG9mZnNldFk6'@;
put 'MTYsb2Zmc2V0WDowfSwiYm90dG9tLWxlZnQiOnthbmNob3JQb2ludDpUaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5UT1BfUklHSFQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJsZWZ0LWJvdHRvbSI6e2FuY2hvclBvaW50OlRpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5S'@;
put 'SUdIVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC1taWRkbGUiOnthbmNob3JQb2ludDpUaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6VGkuUklHSFRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtdG9wIjp7YW5jaG9yUG9pbnQ6VGkuTEVGVF9DRU5URVIs'@;
put 'cG9wb3ZlclBvaW50OlRpLlJJR0hUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LGRlZmF1bHQ6e2FuY2hvclBvaW50OlRpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6VGkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9fSxGVWU9WyJ0b3AtbGVmdCIsInRvcC1taWRk'@;
put 'bGUiLCJ0b3AtcmlnaHQiLCJyaWdodC10b3AiLCJyaWdodC1taWRkbGUiLCJyaWdodC1ib3R0b20iLCJib3R0b20tcmlnaHQiLCJib3R0b20tbWlkZGxlIiwiYm90dG9tLWxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtbWlkZGxlIiwibGVmdC10b3AiXTtsZXQgc2RlPSgoKT0+e2NsYXNzIGMg'@;
put 'ZXh0ZW5kcyBqWXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXI9dix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLnNpZ25wb3N0Q29udGVudElkPV91KCksIWQpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJjbHItc2lnbnBvc3QtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1zaWducG9zdCIpO3RoaXMucG9zaXRpb249InJpZ2h0LW1pZGRsZSIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSEwLGYuc2V0SWQodGhpcy5zaWducG9zdENvbnRlbnRJZCksdGhpcy5k'@;
put 'b2N1bWVudD1JfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbiksdGhpcy5fcG9zaXRpb249YSYmRlVlLmluZGV4T2YoYSk+LTE/YToi'@;
put 'cmlnaHQtbWlkZGxlIix0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnBvc2l0aW9uKTtjb25zdCBkPVBVZVt0aGlzLnBvc2l0aW9uXTt0aGlzLmFuY2hvclBvaW50PWQuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQ9ZC5wb3BvdmVyUG9pbnQs'@;
put 'dGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRZPWQub2Zmc2V0WSx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFg9ZC5vZmZzZXRYfWNsb3NlKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLGVsKHRoaXMucGxhdGZvcm1JZCkm'@;
put 'JnRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShEbyksJGUoekws'@;
put 'OCksJGUodG8pLCRlKFpZKSwkZShVWSksJGUoaXMpLCRlKG1vKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdC1jb250ZW50Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYob3AoImlkIixkLnNpZ25wb3N0Q29u'@;
put 'dGVudElkKSxUcigic2lnbnBvc3QtY29udGVudCIsITApKX0saW5wdXRzOntzaWducG9zdENsb3NlQXJpYUxhYmVsOltWbi5Ob25lLCJjbHJTaWducG9zdENsb3NlQXJpYUxhYmVsIiwic2lnbnBvc3RDbG9zZUFyaWFMYWJlbCJdLHBvc2l0aW9uOltWbi5Ob25lLCJjbHJQb3NpdGlvbiIsInBv'@;
put 'c2l0aW9uIl19LGZlYXR1cmVzOltDYV0sbmdDb250ZW50U2VsZWN0b3JzOlVIZSxkZWNsczo4LHZhcnM6Myxjb25zdHM6W1sxLCJzaWducG9zdC13cmFwIl0sWzEsInBvcG92ZXItcG9pbnRlciJdLFsxLCJzaWducG9zdC1jb250ZW50LWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwic2ln'@;
put 'bnBvc3QtYWN0aW9uIiwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdLFsidGFiaW5kZXgiLCIwIiwxLCJzaWducG9zdC1jb250ZW50LWJvZHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh6SGUpLGRlKDAsImRpdiIsMCksV3QoMSwiZGl2Iiwx'@;
put 'KSxkZSgyLCJkaXYiLDIpLFdyKDMpLGRlKDQsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNsb3NlKCl9KSxXdCg1LCJjZHMtaWNvbiIsNCksaGUoKSgpLGRlKDYsImRpdiIsNSksV3IoNywxKSxoZSgpKCkpLDImYSYmKGZlKDQpLGhyKCJhcmlhLWxhYmVsIixk'@;
put 'LnNpZ25wb3N0Q2xvc2VBcmlhTGFiZWx8fGQuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0Q2xvc2UpKCJhcmlhLWNvbnRyb2xzIixkLnNpZ25wb3N0Q29udGVudElkKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpKX0sZGVwZW5kZW5jaWVzOltlb10sZW5j'@;
put 'YXBzdWxhdGlvbjoyfSksY30pKCksSFVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyhDeCxHT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp'@;
put 'bXBvcnRzOltMYSxUbyxaTCxGMl19KSxjfSkoKSxXWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IEdufWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxZWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1v'@;
put 'dXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dlcigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1v'@;
put 'dXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNl'@;
put 'Lm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3Ioc2MpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx2Nz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOlt1YShbV1ksWVldKSx5ZChb'@;
put 'YWddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IFZVZT1bImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJ0b3At'@;
put 'cmlnaHQiLCJyaWdodCIsImxlZnQiXSxCVWU9WyJ4cyIsInNtIiwibWQiLCJsZyJdO2xldCB5Nz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgall7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoc3VwZXIoYSxkKSx0aGlzLnRvb2x0aXBJZFNlcnZpY2U9aCx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9'@;
put 'ZiwhZCl0aHJvdyBuZXcgRXJyb3IoImNsci10b29sdGlwLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItdG9vbHRpcCIpO3RoaXMuaWQ9X3UoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe2NvbnN0IGQ9YXx8IiI7dGhpcy5faWQ9ZCx0aGlz'@;
put 'LnRvb2x0aXBJZFNlcnZpY2UudXBkYXRlSWQoZCl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihhKXtjb25zdCBkPXRoaXMuX3Bvc2l0aW9uLGg9VlVlLmluY2x1ZGVzKGEpP2E6InJpZ2h0Ijtzd2l0Y2godGhpcy5fcG9zaXRpb249aCx0aGlzLnVw'@;
put 'ZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9YH0pLGgpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PVRpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9VGkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVm'@;
put 'dCI6dGhpcy5hbmNob3JQb2ludD1UaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PVRpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1UaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PVRpLkxFRlRfVE9QO2JyZWFrO2Nh'@;
put 'c2UiYm90dG9tLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9VGkuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1UaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5hbmNob3JQb2ludD1UaS5SSUdIVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9VGkuTEVGVF9UT1A7YnJl'@;
put 'YWs7Y2FzZSJsZWZ0Ijp0aGlzLmFuY2hvclBvaW50PVRpLkxFRlRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PVRpLlJJR0hUX1RPUDticmVhaztkZWZhdWx0OiFmdW5jdGlvbiBOVWUoYyl7dGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgdmFsdWU6ICR7Y31gKX0oaCl9fWdldCBzaXplKCl7'@;
put 'cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplLGg9QlVlLmluY2x1ZGVzKGEpP2E6InNtIjt0aGlzLl9zaXplPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KX1uZ09uSW5p'@;
put 'dCgpe3RoaXMuc2l6ZT10aGlzLnNpemV8fCJzbSIsdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufHwicmlnaHQifW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJDb250ZW50KCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2'@;
put 'aWNlLm9uTW91c2VMZWF2ZUNvbnRlbnQoKX11cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YSxuZXdDbGFzczpkfSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZCl9'@;
put 'fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKERvKSwkZSh6TCw4KSwkZShXWSksJGUoWVkpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAtY29udGVudCJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpm'@;
put 'dW5jdGlvbihhLGQpezEmYSYmRnQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKG9wKCJpZCIsZC5pZCksaHIoInJvbGUiLCJ0b29sdGlwIiksTjEo'@;
put 'Im9wYWNpdHkiLDEpLFRyKCJ0b29sdGlwLWNvbnRlbnQiLCEwKSl9LGlucHV0czp7aWQ6ImlkIixwb3NpdGlvbjpbVm4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdLHNpemU6W1ZuLk5vbmUsImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltDYV0sbmdDb250ZW50U2VsZWN0b3Jz'@;
put 'OnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGI3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcE1vdXNlU2Vydmlj'@;
put 'ZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChkLmlkLnN1YnNjcmliZShmPT50aGlzLmFyaWFEZXNjcmliZWRCeT1mKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNob3dUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49'@;
put 'ITB9aGlkZVRvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyVHJpZ2dlcigpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVUcmlnZ2Vy'@;
put 'KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHNjKSwkZShXWSksJGUoWVkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0s'@;
put 'aG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zaG93VG9vbHRpcCgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaGlkZVRvb2x0aXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'Lm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJihocigiYXJpYS1kZXNjcmliZWRieSIsZC5hcmlhRGVzY3JpYmVkQnkpKCJyb2xlIiwiYnV0dG9uIiksVHIoInRvb2x0aXAtdHJpZ2dlciIsITApKX19KSxjfSko'@;
put 'KSxqVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsRjIsVG9dfSksY30pKCkselVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pZLEhVZSxqVWVdfSksY30pKCk7dmFyIF83PWZ1bmN0aW9uKGMpe3JldHVybiBjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsYy5IT1JJ'@;
put 'Wk9OVEFMPSJob3Jpem9udGFsIixjLkNPTVBBQ1Q9ImNvbXBhY3QiLGN9KF83fHx7fSk7bGV0IE1wPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm1pbkxhYmVsU2l6ZT0xLHRoaXMubWF4TGFiZWxTaXplPTEyLHRoaXMubGF5b3V0PV83LkhPUklaT05UQUwsdGhpcy5sYXlvdXRW'@;
put 'YWx1ZXM9T2JqZWN0LmtleXMoXzcpLm1hcChhPT5fN1thXSksdGhpcy5fbGFiZWxTaXplPTJ9Z2V0IGxhYmVsU2l6ZSgpe3JldHVybiB0aGlzLl9sYWJlbFNpemV9c2V0IGxhYmVsU2l6ZShhKXt0aGlzLmxhYmVsU2l6ZUlzVmFsaWQoYSkmJih0aGlzLl9sYWJlbFNpemU9YSl9Z2V0IGxheW91'@;
put 'dENsYXNzKCl7cmV0dXJuYGNsci1mb3JtLSR7dGhpcy5sYXlvdXR9YH1pc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09XzcuVkVSVElDQUx9aXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09XzcuSE9SSVpPTlRBTH1pc0NvbXBhY3QoKXtyZXR1cm4gdGhpcy5sYXlv'@;
put 'dXQ9PT1fNy5DT01QQUNUfWlzVmFsaWQoYSl7cmV0dXJuIHRoaXMubGF5b3V0VmFsdWVzLmluZGV4T2YoYSk+LTF9bGFiZWxTaXplSXNWYWxpZChhKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihhKSYmYT49dGhpcy5taW5MYWJlbFNpemUmJmE8PXRoaXMubWF4TGFiZWxTaXplfX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjbz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5s'@;
put 'YXlvdXRTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9dix0aGlzLmVuYWJsZUdyaWQ9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBsYWJlbFRleHQoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2'@;
put 'ZUVsZW1lbnQudGV4dENvbnRlbnR9bmdPbkluaXQoKXt0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXQsKHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlKSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxh'@;
put 'YmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRl'@;
put 'cmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYh'@;
put 'dGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmZvckF0dHI9YSx0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXR8fGAke2F9LWxhYmVsYH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny'@;
put 'aXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9ZGlzYWJsZUdyaWQoKXt0aGlzLmVuYWJsZUdyaWQ9ITF9b25DbGljayhhKXt0aGlzLnByZXZlbnREZWZhdWx0T25TaWducG9zdFRhcmdldChhKX1wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl7dGhpcy5zaWducG9z'@;
put 'dCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQpJiZhLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKE1oLDgpLCRlKE1wLDgp'@;
put 'LCRlKGgxLDgpLCRlKEVzKSwkZShRaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJsYWJlbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLEtMLDUsUWkpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQuc2lnbnBvc3Q9Zi5maXJz'@;
put 'dCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYpfSksMiZhJiZocigiaWQiLGQuaWRBdHRyKSgiZm9yIixkLmZvckF0dHIpfSxpbnB1dHM6e2lkSW5wdXQ6W1ZuLk5vbmUsImlkIiwi'@;
put 'aWRJbnB1dCJdLGZvckF0dHI6W1ZuLk5vbmUsImZvciIsImZvckF0dHIiXX19KSxjfSkoKSxVVWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEJZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMu'@;
put 'Y29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoTWgsOCksJGUocDcsOCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjUs'@;
put 'aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSgic3VjY2VzcyIsITApKX0sZmVhdHVyZXM6W0NhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihz'@;
put 'YSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksRGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNsYXNzTmFtZT0iIn1jb250cm9sQ2xhc3MoYT1BZC5OT05FLGQ9ITEsaD0iIil7Y29uc3QgZj1bdGhpcy5jbGFzc05hbWUs'@;
put 'aF07c3dpdGNoKGEpe2Nhc2UgQWQuVkFMSUQ6Zi5wdXNoKCJjbHItc3VjY2VzcyIpO2JyZWFrO2Nhc2UgQWQuSU5WQUxJRDpmLnB1c2goImNsci1lcnJvciIpfXJldHVybiBkJiZ0aGlzLmxheW91dFNlcnZpY2UmJi0xPT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpJiZmLnB1'@;
put 'c2goYGNsci1jb2wtbWQtJHt0aGlzLmxheW91dFNlcnZpY2UubWF4TGFiZWxTaXplLXRoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemV9IGNsci1jb2wtMTJgKSxmLmpvaW4oIiAiKS50cmltKCl9aW5pdENvbnRyb2xDbGFzcyhhLGQpe2QmJmQuY2xhc3NOYW1lJiYodGhpcy5jbGFzc05hbWU9'@;
put 'ZC5jbGFzc05hbWUsZC5jbGFzc05hbWUuc3BsaXQoIiAiKS5mb3JFYWNoKGY9PntmLnN0YXJ0c1dpdGgoImNsci1jb2wiKSYmYS5yZW1vdmVDbGFzcyhkLGYpfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihNcCw4KSl9LGMuXHUwMjc1cHJv'@;
put 'dj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdzc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLHRoaXMubmdD'@;
put 'b250cm9sU2VydmljZT1mLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLnN0YXRlPXYsc2V0VGltZW91dCgoKT0+e3RoaXMudXBkYXRlSGVscGVycygpfSl9KSksdGhpcy5zdWJzY3JpcHRpb25z'@;
put 'LnB1c2goZi5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuY29udHJvbD12fSksZi5hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5hZGRpdGlvbmFsQ29udHJvbHM9dn0pKX1nZXQgc2hvd0hlbHBlcigpe3JldHVybiEhdGhpcy5jb250cm9sSGVs'@;
put 'cGVyQ29tcG9uZW50fWdldCBzaG93VmFsaWQoKXtyZXR1cm4gdGhpcy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09QWQuVkFMSUQmJnRoaXMuc3VjY2Vzc01lc3NhZ2VQcmVzZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BZC5JTlZBTElEJiZ0'@;
put 'aGlzLmVycm9yTWVzc2FnZVByZXNlbnR9Z2V0IHN1Y2Nlc3NNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhpcy5jb250cm9sU3VjY2Vzc0NvbXBvbmVudH1nZXQgZXJyb3JNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhpcy5jb250cm9sRXJyb3JDb21wb25lbnR9Z2V0IHRvdWNoZWQoKXty'@;
put 'ZXR1cm4hKCF0aGlzLmNvbnRyb2w/LnRvdWNoZWQmJiF0aGlzLmFkZGl0aW9uYWxDb250cm9scz8uc29tZShhPT5hLnRvdWNoZWQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEu'@;
put 'dW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3MoIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BZC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BZC5OT05FOnRoaXMuc3RhdGUsdGhp'@;
put 'cy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlz'@;
put 'LnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQsc2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKCRlKGtkKSwkZShNcCw4KSwkZShEZCksJGUoaDEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYXMoaCxjbyw1KSxhcyhoLFVVZSw1KSxhcyhoLFRVZSw1KSxhcyhoLFdMLDUpKSwyJmEpe2xldCBm'@;
put 'O3lpKGY9YmkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLHlpKGY9YmkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmlyc3QpLHlpKGY9YmkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSx5aShmPWJpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYu'@;
put 'Zmlyc3QpfX19KSxjfSkoKTtjbGFzcyBYTHtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3IsIXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoejUpLGY9dGhpcy5pbmplY3Rvci5nZXQoUWkpO2EuY3JlYXRl'@;
put 'Q29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTVVlKSk7Y29uc3Qgdj1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpLE09W107TVtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBJPWEuY3JlYXRlQ29tcG9uZW50KHYsdm9pZCAwLHZvaWQgMCxNKTthLnJlbW92ZSgwKSx0'@;
put 'aGlzLmluamVjdG9yPUkuaW5qZWN0b3J9fWdldChsLGEpe3JldHVybiB0aGlzLmluamVjdG9yLmdldChsLGEpfX1sZXQgR1k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvdWNoZWQ9bmV3IEdufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWQuYXNP'@;
put 'YnNlcnZhYmxlKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMuX3RvdWNoZWQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgJFk9ZnVuY3Rp'@;
put 'b24oYyl7cmV0dXJuIGMuRk9STT0iZm9ybSIsYy5NT0RFTD0ibW9kZWwiLGN9KCRZfHx7fSk7bGV0IEM3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudmNyPWEsdGhpcy53cmFwcGVyVHlwZT1kLHRoaXMuX25nQ29udHJvbD1mLHRoaXMucmVuZGVyZXI9dix0'@;
put 'aGlzLmVsPU0sdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmFkZGl0aW9uYWxEaWZmZXI9bmV3IE1hcCxoJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWguZ2V0KGgxLG51bGwpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGtkLG51bGwpLHRoaXMuY29u'@;
put 'dHJvbENsYXNzU2VydmljZT1oLmdldChEZCxudWxsKSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1oLmdldChHWSxudWxsKSx0aGlzLmRpZmZlcnM9aC5nZXQoRU0sbnVsbCkpLHRoaXMuY29udHJvbENsYXNzU2VydmljZSYmdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmluaXRDb250cm9sQ2xh'@;
put 'c3ModixNLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm1hcmtDb250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMubWFya0FzVG91Y2hlZCgpfSkpLHRoaXMubmdDb250cm9sU2Vy'@;
put 'dmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhlbHBlcnNDaGFuZ2Uuc3Vic2NyaWJlKEk9Pnt0aGlzLnNldEFyaWFEZXNjcmliZWRCeShJKX0pKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5jb250'@;
put 'cm9sSWRTZXJ2aWNlJiYodGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPWEpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5hZGRpdGlvbmFsRGlmZmVyLnNpemU+MH1uZ09uSW5pdCgpe3RoaXMuX2NvbnRhaW5lckluamVjdG9yPW5ldyBYTCh0aGlzLndyYXBwZXJUeXBl'@;
put 'LHRoaXMudmNyLHRoaXMuaW5kZXgpLHRoaXMuY29udHJvbElkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoTWgpLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChwNyxudWxsKSx0aGlzLl9pZD90aGlzLmNvbnRyb2xJZFNlcnZp'@;
put 'Y2UuaWQ9dGhpcy5faWQ6dGhpcy5faWQ9dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5fbmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2w/KHRoaXMubmdDb250cm9sPXRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9s'@;
put 'LHRoaXMubmdDb250cm9sU2VydmljZS5hZGRBZGRpdGlvbmFsQ29udHJvbCh0aGlzLl9uZ0NvbnRyb2wpLHRoaXMuYWRkaXRpb25hbERpZmZlci5zZXQodGhpcy5fbmdDb250cm9sLHRoaXMuZGlmZmVycy5maW5kKHRoaXMuX25nQ29udHJvbCkuY3JlYXRlKCkpKToodGhpcy5uZ0NvbnRyb2w9'@;
put 'dGhpcy5fbmdDb250cm9sLHRoaXMubmdDb250cm9sU2VydmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKSx0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSl9bmdEb0NoZWNrKCl7aWYodGhpcy50cmlnZ2VyRG9DaGVjayh0aGlzLmRp'@;
put 'ZmZlcix0aGlzLm5nQ29udHJvbCksdGhpcy5oYXNBZGRpdGlvbmFsQ29udHJvbHMpZm9yKGNvbnN0W2EsZF1vZiB0aGlzLmFkZGl0aW9uYWxEaWZmZXIpdGhpcy50cmlnZ2VyRG9DaGVjayhkLGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YT8udW5zdWJz'@;
put 'Y3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5q'@;
put 'ZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fXRyaWdnZXJEb0NoZWNrKGEsZCl7aWYoYSl7Y29uc3QgaD1hLmRpZmYoZCk7aCYmaC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZj0+eyhmLmtleT09PSRZLkZPUk18fGYua2V5PT09JFkuTU9ERUwpJiZmLmN1cnJlbnRWYWx1ZSE9PWYucHJldmlv'@;
put 'dXNWYWx1ZSYmdGhpcy50cmlnZ2VyVmFsaWRhdGlvbigpfSl9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKSx0aGlzLm5n'@;
put 'Q29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2VydmljZS5oYXNBZGRpdGlvbmFsQ29udHJvbHMmJnRoaXMubmdDb250cm9sU2VydmljZS5hZGRpdGlvbmFsQ29udHJvbHM/LmZvckVhY2goYT0+e2EuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5k'@;
put 'VmFsaWRpdHkoKX0pfXNldEFyaWFEZXNjcmliZWRCeShhKXtpZihhLnNob3cpe2NvbnN0IGQ9dGhpcy5nZXRBcmlhRGVzY3JpYmVkQnlJZChhKTtpZihudWxsIT09ZClyZXR1cm4gdm9pZCB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVz'@;
put 'Y3JpYmVkYnkiLGQpfXRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1kZXNjcmliZWRieSIpfWdldEFyaWFEZXNjcmliZWRCeUlkKGEpe2NvbnN0IGQ9dGhpcy5jb250YWluZXJJZFNlcnZpY2U/LmlkfHx0aGlzLmNvbnRyb2xJZFNlcnZp'@;
put 'Y2U/LmlkO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9W2Ake2R9LWhlbHBlcmBdO3JldHVybiBhLnNob3dJbnZhbGlkP2gucHVzaChgJHtkfS1lcnJvcmApOmEuc2hvd1ZhbGlkJiZoLnB1c2goYCR7ZH0tc3VjY2Vzc2ApLGguam9pbigiICIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShUcyksJGUoajYpLCRlKERvKSwkZSh1MSksJGUoRXMpLCRlKFFpKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRy'@;
put 'aWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEmJm9wKCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn19KSxjfSkoKSxjZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtj'@;
put 'b25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJrQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShNcCksJGUoR1kpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLGNvLDUpLDImYSl7bGV0IGY7eWko'@;
put 'Zj1iaSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwyJmEmJlRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxh'@;
put 'eW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbVm4uTm9uZSwiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LGZlYXR1cmVzOlt1YShbTXAsR1ldKV19KSxjfSkoKSxu'@;
put 'dT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RW8uYWRkSWNvbnMoYmgsX2gpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxUb119KSxjfSkoKTtj'@;
put 'b25zdCBLWT1uZXcgU3QoIklTX1RPR0dMRSIpLEdVZT17cHJvdmlkZTpLWSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFlVZSgpe3JldHVybiBuZXcgSnIoITEpfX07bGV0IHhoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLnRvZ2dsZT1kfSkpfW5nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoS1kpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihh'@;
put 'LGQsaCl7aWYoMSZhJiYoYXMoaCxjbyw3KSxhcyhoLElkLDcpKSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLHlpKGY9YmkoKSkmJihkLmNoZWNrYm94PWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHIt'@;
put 'Y2hlY2tib3gtd3JhcHBlciIsIWQudG9nZ2xlKSgiY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQiLG51bGw9PWQuY2hlY2tib3g/bnVsbDpkLmNoZWNrYm94LmNvbnRyb2xEaXNhYmxlZCkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbdWEoW01oLEdVZV0p'@;
put 'XSxuZ0NvbnRlbnRTZWxlY3RvcnM6V0hlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShaSGUpLFdyKDApLFdyKDEsMSksZ3QoMixZSGUsMSwwLCJsYWJlbCIsMCkpLDImYSYmKGZlKDIpLE1lKCJuZ0lmIiwhZC5sYWJl'@;
put 'bCkpfSxkZXBlbmRlbmNpZXM6W2JhLGNvXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxJZD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEseGgsZCxoLGYsdiksdGhpcy5jb250cm9sPWgsdGhpcy50b2dnbGU9TX1nZXQgY29udHJvbERp'@;
put 'c2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWR9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpO2NvbnN0IGE9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoS1ksbnVsbCk7YSYmbnVsbCE9PXRoaXMudG9nZ2xlJiZhLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShUcyksJGUoRG8pLCRlKHUxLDEwKSwkZShFcyksJGUoUWkpLEZmKCJjbHJUb2dnbGUiKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0s'@;
put 'aG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIixudWxsIT09ZC50b2dnbGU/InN3aXRjaCI6bnVsbCl9LGZlYXR1cmVzOltDYV19KSxjfSkoKSxGYj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixh'@;
put 'LGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLmlubGluZT0hMX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJ'@;
put 'bmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1nZXQgYWxsQ2hlY2tib3hlc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWQmJighdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aHx8dGhpcy5hZGRpdGlvbmFs'@;
put 'Q29udHJvbHMuZXZlcnkoYT0+YS5kaXNhYmxlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMuY2hlY2tib3hlcy5sZW5ndGg/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKSgkZShNcCw4KSwkZShEZCksJGUoaDEpLCRlKGtkKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC1jb250YWluZXIiXSxbImNsci10b2dnbGUtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxo'@;
put 'KXtpZigxJmEmJmFzKGgsSWQsNSksMiZhKXtsZXQgZjt5aShmPWJpKCkpJiYoZC5jaGVja2JveGVzPWYpfX0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsZC5yb2xlKSxUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250'@;
put 'cm9sLWRpc2FibGVkIixkLmFsbENoZWNrYm94ZXNEaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbdWEoW2tkLGgxLERkLHA3XSksQ2FdLG5nQ29udGVudFNlbGVjdG9yczokSGUsZGVjbHM6Nix2YXJzOjYs'@;
put 'Y29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJl'@;
put 'eGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5n'@;
put 'SWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJj'@;
put 'bHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKEdIZSksV3IoMCksZ3QoMSxLSGUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSxXcigzLDEpLGd0KDQsWEhlLDIsMCwiZGl2IiwyKSg1LHROZSw1LDQsImRpdiIsMiksaGUoKSksMiZhJiYoZmUo'@;
put 'KSxNZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLFRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxp'@;
put 'ZHx8ZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt2dSxiYSxlbyxjb10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJFVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyhiaCxfaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLFRvLG51LFd4LG51XX0pLGN9KSgpO2Z1bmN0aW9uIGUzKGMpe3JldHVybiBudWxsIT09YyYmKCJzdHJpbmciPT10eXBlb2YgYz9jLmxlbmd0aD49MDoiYm9vbGVhbiI9PXR5cGVvZiBjJiZj'@;
put 'KX1sZXQgUmQ9KCgpPT57Y2xhc3MgY3tnZXQgc3Bpbm5lckNsYXNzKCl7cmV0dXJuITB9Z2V0IGlubGluZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuX2lubGluZT1lMyhhKX1nZXQgaW52ZXJzZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ludmVyc2V9'@;
put 'c2V0IGNsckludmVyc2UoYSl7dGhpcy5faW52ZXJzZT1lMyhhKX1nZXQgc21hbGxDbGFzcygpe3JldHVybiB0aGlzLl9zbWFsbH1zZXQgY2xyU21hbGwoYSl7dGhpcy5fc21hbGw9ZTMoYSl9Z2V0IG1lZGl1bUNsYXNzKCl7cmV0dXJuIXRoaXMuX3NtYWxsJiZ0aGlzLl9tZWRpdW19c2V0IGNs'@;
put 'ck1lZGl1bShhKXt0aGlzLl9tZWRpdW09ZTMoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3Bpbm5lciJdXSxob3N0VmFyczoxMSxob3N0QmluZGluZ3M6ZnVuY3Rpb24o'@;
put 'YSxkKXsyJmEmJihocigiYXJpYS1idXN5IiwhMCksVHIoInNwaW5uZXIiLGQuc3Bpbm5lckNsYXNzKSgic3Bpbm5lci1pbmxpbmUiLGQuaW5saW5lQ2xhc3MpKCJzcGlubmVyLWludmVyc2UiLGQuaW52ZXJzZUNsYXNzKSgic3Bpbm5lci1zbSIsZC5zbWFsbENsYXNzKSgic3Bpbm5lci1tZCIs'@;
put 'ZC5tZWRpdW1DbGFzcykpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIixjbHJJbnZlcnNlOiJjbHJJbnZlcnNlIixjbHJTbWFsbDoiY2xyU21hbGwiLGNsck1lZGl1bToiY2xyTWVkaXVtIn0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0'@;
put 'aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEhiPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9y'@;
put 'dHM6W0xhXX0pLGN9KSgpO3ZhciBnbT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfShnbXx8e30pO2xldCB1ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVu'@;
put 'dFJlZj1hLHRoaXMucGxhdGZvcm1JZD1kfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWZvY3VzKCl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoUWkpLCRlKGlzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzSXRlbSIsIiJdXX0pLGN9KSgpLE5iPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbGVtZW50UmVm'@;
put 'PWEsdGhpcy5kaXJlY3Rpb249Z20uVkVSVElDQUwsdGhpcy5mb2N1c09uTG9hZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5mb2N1c0NoYW5nZT1uZXcgS3IsdGhpcy5fY3VycmVudD0wfWdldCBmb2N1c2FibGVJdGVtcygpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlz'@;
put 'Ll9mb2N1c2FibGVJdGVtczp0aGlzLmNscktleUZvY3VzSXRlbXM/dGhpcy5jbHJLZXlGb2N1c0l0ZW1zLnRvQXJyYXkoKTpbXX1zZXQgZm9jdXNhYmxlSXRlbXMoYSl7QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGgmJih0aGlzLl9mb2N1c2FibGVJdGVtcz1hLHRoaXMuaW5pdGlhbGl6ZUZv'@;
put 'Y3VzKCkpfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEpfWdldCBjdXJyZW50SXRl'@;
put 'bSgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW1zW3RoaXMuX2N1cnJlbnRdfWdldCBjdXJyZW50SXRlbUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50P3RoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudDp0aGlzLmN1cnJlbnRJdGVtfW5nQWZ0ZXJD'@;
put 'b250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9ySXRlbVVwZGF0ZXMoKSksdGhpcy5pbml0aWFsaXplRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlS2V5Ym9hcmRF'@;
put 'dmVudChhKXtpZih0aGlzLmN1cnJlbnRJdGVtRWxlbWVudCE9PWEudGFyZ2V0KXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTt0aGlzLnBvc2l0aW9uSW5SYW5nZShkKSYmKHRoaXMuY3VycmVudD1kKX10aGlzLnByZXZLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRG'@;
put 'b2N1c0lzTm90Rmlyc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50LTEpOnRoaXMubmV4dEtleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudCsxKTphLmNvZGU9PT1wYS5Ib21lP3RoaXMubW92ZVRvKDAp'@;
put 'OmEuY29kZT09PXBhLkVuZCYmdGhpcy5tb3ZlVG8odGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksRlkoYSl9c2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGEpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO2Q+LTEmJnRoaXMubW92ZVRvKGQpfWZvY3VzQ3VycmVudCgp'@;
put 'e3RoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9bW92ZVRvKGEpe3RoaXMucG9zaXRpb25JblJhbmdlKGEpJiYodGhpcy5jdXJyZW50PWEsdGhpcy5mb2N1c0N1cnJlbnQoKSl9cG9zaXRpb25JblJhbmdlKGEpe3JldHVybiBhPj0w'@;
put 'JiZhPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQtMT49MH1jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQrMTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1p'@;
put 'bml0aWFsaXplRm9jdXMoKXt0aGlzLmZvY3VzYWJsZUl0ZW1zJiZ0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ+PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSx0aGlzLmZvY3Vz'@;
put 'T25Mb2FkJiYodGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCgpKSl9bmV4dEtleVByZXNzZWQoYSl7Y29uc3QgZD1MMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIGdtLlZFUlRJQ0FMOnJldHVybiBkPT09cGEuQXJyb3dEb3duO2Nhc2Ug'@;
put 'Z20uSE9SSVpPTlRBTDpyZXR1cm4gZD09PXBhLkFycm93UmlnaHQ7Y2FzZSBnbS5CT1RIOnJldHVybiBkPT09cGEuQXJyb3dEb3dufHxkPT09cGEuQXJyb3dSaWdodDtkZWZhdWx0OnJldHVybiExfX1wcmV2S2V5UHJlc3NlZChhKXtjb25zdCBkPUwyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJl'@;
put 'Y3Rpb24pe2Nhc2UgZ20uVkVSVElDQUw6cmV0dXJuIGQ9PT1wYS5BcnJvd1VwO2Nhc2UgZ20uSE9SSVpPTlRBTDpyZXR1cm4gZD09PXBhLkFycm93TGVmdDtjYXNlIGdtLkJPVEg6cmV0dXJuIGQ9PT1wYS5BcnJvd1VwfHxkPT09cGEuQXJyb3dMZWZ0O2RlZmF1bHQ6cmV0dXJuITF9fWdldEl0'@;
put 'ZW1Qb3NpdGlvbihhKXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5mb2N1c2FibGVJdGVtcy5pbmRleE9mKGEpOnRoaXMuZm9jdXNhYmxlSXRlbXMubWFwKGQ9PmQubmF0aXZlRWxlbWVudCkuaW5kZXhPZihhKX1saXN0ZW5Gb3JJdGVtVXBkYXRlcygpe3JldHVybiB0aGlzLmNs'@;
put 'cktleUZvY3VzSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmluaXRpYWxpemVGb2N1cygpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKFFpKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktl'@;
put 'eUZvY3VzIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFzKGgsdWRlLDUpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQuY2xyS2V5Rm9jdXNJdGVtcz1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9u'@;
put 'KGYpe3JldHVybiBkLmhhbmRsZUtleWJvYXJkRXZlbnQoZil9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNldENsaWNrZWRJdGVtQ3VycmVudChmKX0pfSxpbnB1dHM6e2RpcmVjdGlvbjpbVm4uTm9uZSwiY2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxvYWQ6W1Zu'@;
put 'Lk5vbmUsImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxmb2N1c2FibGVJdGVtczpbVm4uTm9uZSwiY2xyS2V5Rm9jdXMiLCJmb2N1c2FibGVJdGVtcyJdfSxvdXRwdXRzOntmb2N1c0NoYW5nZToiY2xyRm9jdXNDaGFuZ2UifSxhdHRyczpuTmUsbmdDb250ZW50U2VsZWN0b3JzOnlz'@;
put 'LGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFhZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7'@;
put 'dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhXX0pLGN9KSgpO2NsYXNzIEtVZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJ'@;
put 'dGVtKGwpfWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSks'@;
put 'bH10b1N0cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZo'@;
put 'W2xdP2hbbF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29u'@;
put 'c3QgYT10aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBYVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2Rl'@;
put 'bD1sfXVuc2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9s'@;
put 'JiZ0aGlzLm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBxVWUgZXh0ZW5kcyBYVWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2ZvY3VzQ2hhbmdlZD1uZXcgSnIobnVsbCl9Z2V0IGZvY3VzQ2hhbmdlZCgpe3Jl'@;
put 'dHVybiB0aGlzLl9mb2N1c0NoYW5nZWQuYXNPYnNlcnZhYmxlKCl9c2VsZWN0KGwpe3RoaXMubW9kZWwhPT1sJiYodGhpcy5tb2RlbD1sLHRoaXMuX2ZvY3VzQ2hhbmdlZC5uZXh0KGwpKX19bGV0IEpVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMu'@;
put 'c2hvd0FsbE9wdGlvbnM9ITAsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgSnIoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IE14KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVu'@;
put 'dElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdl'@;
put 'dCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgS1VlfXNlbGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1v'@;
put 'ZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNl'@;
put 'bGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwo'@;
put 'dGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2Vs'@;
put 'ZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9'@;
put 'cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2VkZSgoKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuc2VsZWN0aW9uU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMucHNldWRvRm9jdXM9bmV3IHFV'@;
put 'ZSx0aGlzLm9wdGlvbkRhdGE9W10sdGhpcy5oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpLHRoaXMucmVuZGVyZXI9YS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMu'@;
put 'YWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgbGlzdGJveCgpe3JldHVybiB0aGlzLl9saXN0Ym94fXNldCBsaXN0Ym94KGEpe3RoaXMuX2xpc3Rib3g9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IHRleHRJbnB1dCgpe3JldHVybiB0aGlzLl90ZXh0SW5wdXR9c2V0'@;
put 'IHRleHRJbnB1dChhKXt0aGlzLl90ZXh0SW5wdXQ9YSx0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duIixkPT4hdGhpcy5oYW5kbGVUZXh0SW5wdXQoZCkpLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1mb2N1c0lucHV0KCl7dGhpcy50ZXh0SW5wdXQmJmVsKHRoaXMucGxh'@;
put 'dGZvcm1JZCkmJnRoaXMudGV4dElucHV0LmZvY3VzKCl9Zm9jdXNGaXJzdEFjdGl2ZSgpe2lmKHRoaXMub3B0aW9uRGF0YS5sZW5ndGg+MClpZih0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpKXRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9u'@;
put 'RGF0YVswXSk7ZWxzZXtsZXQgYTthPXRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsWzBdOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbDtjb25zdCBkPXRoaXMub3B0'@;
put 'aW9uRGF0YS5maW5kKGg9PmgudmFsdWU9PT1hKTt0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdChkfHx0aGlzLm9wdGlvbkRhdGFbMF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoImF1dG8iKX19YWRkT3B0aW9uVmFsdWVzKGEpe3RoaXMub3B0aW9uRGF0YT1hfWhhbmRsZUZvY3VzU3Vi'@;
put 'c2NyaXB0aW9uKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthfHwodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbD1udWxsKX0pfW1vdmVGb2N1c1RvKGEpe2xldCBkPXRoaXMub3B0aW9uRGF0YS5maW5kSW5kZXgoaD0+aC5lcXVhbHModGhpcy5wc2V1ZG9Gb2N1'@;
put 'cy5tb2RlbCkpO2E9PT1TaC5VUD8tMT09PWR8fDA9PT1kP2Q9dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xOmQtLTphPT09U2guRE9XTiYmKC0xPT09ZHx8ZD09PXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMT9kPTA6ZCsrKSx0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFb'@;
put 'ZF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoKX1vcGVuQW5kTW92ZVRvKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMubW92ZUZvY3VzVG8oYSk6KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUoZ2goMSkpLnN1YnNjcmliZShkPT57ZCYmdGhpcy5tb3Zl'@;
put 'Rm9jdXNUbyhhKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1oYW5kbGVUZXh0SW5wdXQoYSl7bGV0IGQ9ITE7Y29uc3QgaD1MMihhLmtleSk7aWYoYSlzd2l0Y2goaCl7Y2FzZSBwYS5FbnRlcjp0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYm'@;
put 'KHRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnRvZ2dsZSh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpLGQ9ITApO2Jy'@;
put 'ZWFrO2Nhc2UgcGEuU3BhY2U6dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW58fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCxkPSEwKTticmVhaztjYXNlIHBhLkFycm93VXA6dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKFNoLlVQKSxkPSEwO2Jy'@;
put 'ZWFrO2Nhc2UgcGEuQXJyb3dEb3duOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpLHRoaXMub3BlbkFuZE1vdmVUbyhTaC5ET1dOKSxkPSEwO2JyZWFrO2RlZmF1bHQ6YS5rZXkhPT1wYS5UYWImJighdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZXx8YS5rZXkh'@;
put 'PT1wYS5CYWNrc3BhY2UpJiZhLmtleSE9PXBhLkVzY2FwZSYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfXJldHVybiBkfXNjcm9sbEludG9TZWxlY3RlZE1vZGVsKGE9InNtb290aCIpe3RoaXMucHNldWRvRm9jdXMubW9kZWwmJnRoaXMu'@;
put 'cHNldWRvRm9jdXMubW9kZWwuZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOmEsYmxvY2s6ImNlbnRlciIsaW5saW5lOiJuZWFyZXN0In0pfXByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1t'@;
put 'ZWRpYXRlUHJvcGFnYXRpb24oKX1hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpe2VsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMucmVuZGVyZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlzLmZvY3VzT3V0T2ZDb21wb25lbnQoZCkmJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLmNv'@;
put 'bXBvbmVudENkUmVmJiZ0aGlzLmNvbXBvbmVudENkUmVmLmRldGVjdENoYW5nZXMoKSl9KX1mb2N1c091dE9mQ29tcG9uZW50KGEpe2NvbnN0IGQ9YS5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiEodGhpcy50ZXh0SW5wdXQuY29udGFpbnMoZCl8fHRoaXMu'@;
put 'dHJpZ2dlci5jb250YWlucyhkKXx8dGhpcy5saXN0Ym94LmNvbnRhaW5zKGQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IoeDgpLENyKHNjKSxDcihKVWUpLENyKGlzKSl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUw'@;
put 'Mjc1ZmFjfSksY30pKCkpO2xldCBRVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKGJoLF9oLENiLEN4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1B'@;
put 'cih7aW1wb3J0czpbTGEsa2MsVG8sWFksbnUsRjIsWngsSGIsbnUsRjJdfSksY30pKCkscUw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc3e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1VbyhjKSkpKGR8fGMpfX0pKCksYy5c'@;
put 'dTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWlucHV0LWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250'@;
put 'cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdWEoW2tkLGgxLE1oLERkXSksQ2FdLG5nQ29udGVudFNlbGVjdG9yczpsTmUsZGVjbHM6MTMsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFp'@;
put 'bmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJu'@;
put 'Z0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlk'@;
put 'ZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShvTmUpLFdyKDAp'@;
put 'LGd0KDEsY05lLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFdyKDUsMSksV3IoNiwyKSxXcig3LDMpLGhlKCksZ3QoOCx1TmUsMSwwLCJjZHMtaWNvbiIsNCkoOSxkTmUsMSwwLCJjZHMtaWNvbiIsNSksaGUoKSxndCgxMCxoTmUsMSwwLCJuZy1j'@;
put 'b250ZW50IiwwKSgxMSxmTmUsMSwwLCJuZy1jb250ZW50IiwwKSgxMixwTmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDYpLE1lKCJuZ0lm'@;
put 'IixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3Z1LGJhLGVvLGNvXSxlbmNh'@;
put 'cHN1bGF0aW9uOjJ9KSxjfSkoKSxZMT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLHFMLGQsaCxmLHYpLHRoaXMuaW5kZXg9MSwibnVtYmVyIj09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmY29uc29s'@;
put 'ZS53YXJuKCdXYXJuaW5nOiBJbnB1dHMgb2YgdHlwZSAibnVtYmVyIiBzaG91bGQgdXRpbGl6ZSB0aGUgbnVtYmVyLWlucHV0IGNvbXBvbmVudCBmb3IgcHJvcGVyIGhhbmRsaW5nLlxuXG4gIEV4YW1wbGUgdXNhZ2U6XG4gIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj5cbiAgICA8bGFi'@;
put 'ZWw+TnVtYmVyIElucHV0PC9sYWJlbD5cbiAgICA8aW5wdXQgY2xyTnVtYmVySW5wdXQgdHlwZT0ibnVtYmVyIi8+XG4gIDwvY2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgICAnKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoVHMp'@;
put 'LCRlKERvKSwkZSh1MSwxMCksJGUoRXMpLCRlKFFpKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklucHV0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGZlYXR1cmVzOltDYV19'@;
put 'KSxjfSkoKSxkZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKGJoLF9oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsa2Ms'@;
put 'VG8sbnUsbnVdfSksY30pKCksVmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IEpyKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9'@;
put 'fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGVaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RW8uYWRkSWNvbnMoYmgsX2gpfX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxkZGUsVG9dfSksY30pKCksdFplPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLFRvLFd4LEJjXX0pLGN9KSgpLG5aZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWko'@;
put 'e3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxUb119KSxjfSkoKSxsWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0'@;
put 'czpbTGEsVG8selldfSksY30pKCkscGRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7'@;
put 'aWYoMSZhJiZGYSh3bCw1KSwyJmEpe2xldCBoO3lpKGg9YmkoKSkmJihkLnRlbXBsYXRlPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLFNOZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxjWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGFdfSksY30pKCksbW09KCgpPT57Y2xh'@;
put 'c3MgYyBleHRlbmRzIEFie31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1VbyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sZmVhdHVyZXM6W0NhXX0pLGN9'@;
put 'KSgpLFM3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrYntjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsclRhYkxpbmsgYW5kIGNsci10YWItY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10YWJzIik7c3VwZXIoYSxkKSx0aGlz'@;
put 'LmlmQWN0aXZlPWYsdGhpcy5pZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZS5jdXJyZW50PT09dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoeG8pLCRlKG1tLDgpLCRlKFJiKSwkZShmNykpfSxjLlx1MDI3NWRp'@;
put 'cj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJMaW5rIiwiIl0sWyJjbHItdGFiLWNvbnRlbnQiXV0sZmVhdHVyZXM6W0NhXX0pLGN9KSgpO3ZhciBNNz1mdW5jdGlvbihjKXtyZXR1cm4gYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsY30o'@;
put 'TTd8fHt9KTtsZXQgR3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubGF5b3V0PU03LkhPUklaT05UQUwsdGhpcy5fY2hpbGRyZW49W119Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX2NoaWxkcmVufWdldCBhY3RpdmVUYWIoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5k'@;
put 'KGE9PmEuYWN0aXZlKX1nZXQgb3ZlcmZsb3dUYWJzKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09TTcuVkVSVElDQUw/W106dGhpcy5jaGlsZHJlbi5maWx0ZXIoYT0+ITA9PT1hLnRhYkxpbmsuaW5PdmVyZmxvdyl9cmVnaXN0ZXIoYSl7dGhpcy5fY2hpbGRyZW4ucHVzaChhKX11bnJlZ2lzdGVy'@;
put 'KGEpe2NvbnN0IGQ9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGEpO2Q+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGQsMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p'@;
put 'LGN9KSgpLHVaZT0wLHZtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCx0aGlzLnRhYkNvbnRlbnRJZHx8KHRoaXMudGFiQ29udGVudElkPSJjbHItdGFiLWNvbnRlbnQtIit1WmUrKyl9'@;
put 'Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgYXJpYUxhYmVsbGVkQnkoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluay5pZD09PXRoaXMuaWQpPy50YWJMaW5rPy50YWJMaW5rSWR9'@;
put 'c2V0IHRlbXBsYXRlUmVmKGEpe3RoaXMudmlld1JlZj10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5pbmRleE9m'@;
put 'KHRoaXMudmlld1JlZik7YT4tMSYmdGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5yZW1vdmUoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKGY3KSwkZShSYiksJGUoR3gpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1jb250ZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmRmEoTU5lLDcpLDImYSl7bGV0IGg7eWkoaD1iaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxpbnB1dHM6e3RhYkNvbnRlbnRJZDpbVm4uTm9uZSwiaWQiLCJ0YWJD'@;
put 'b250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEm'@;
put 'YSYmKHNhKCksZ3QoMCx4TmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGdjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGRaZT0wO2NvbnN0IEpZPW5ldyBTdCgiVEFCU19JRCIpLGZaZT17cHJvdmlkZTpKWSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGhaZSgpe3JldHVybiJjbHItdGFicy0i'@;
put 'K2RaZSsrfX07bGV0IHBaZT0wLHltPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMudGFic1NlcnZpY2U9TSx0aGlzLnRhYnNJZD1JLHRoaXMudGFiTGlua0lkfHwodGhpcy50YWJM'@;
put 'aW5rSWQ9ImNsci10YWItbGluay0iK3BaZSsrKTtjb25zdCBHPWYucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkocGRlKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXYuY3JlYXRlQ29tcG9uZW50KEcsdm9pZCAwLHZvaWQgMCxbW2gubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5P'@;
put 'dmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PU03LlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29u'@;
put 'dHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgo'@;
put 'KXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoZjcpLCRlKFJiKSwkZShRaSksJGUoejUpLCRlKFRzKSwkZShHeCks'@;
put 'JGUoSlkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFiIiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJihvcCgiaWQiLGQudGFiTGlua0lkKSxocigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJvbHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxUcigiYnRuIiwhMCkoImJ0bi1saW5rIixk'@;
put 'LmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOltWbi5Ob25lLCJpZCIsInRhYkxpbmtJZCJdLGluT3ZlcmZsb3c6W1ZuLk5vbmUsImNsclRhYkxpbmtJbk92ZXJmbG93IiwiaW5PdmVyZmxv'@;
put 'dyJdfX0pLGN9KSgpLGJtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCxoLnJlZ2lzdGVyKHRoaXMpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVu'@;
put 'dD09PXRoaXMuaWR9bmdPbkRlc3Ryb3koKXt0aGlzLnRhYnNTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKGY3KSwkZShSYiksJGUoR3gpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siY2xyLXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYXMoaCx5bSw3KSxhcyhoLHZtLDcpKSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLnRhYkxpbms9Zi5maXJzdCkseWkoZj1iaSgpKSYmKGQudGFiQ29udGVudD1mLmZpcnN0KX19LGZlYXR1cmVz'@;
put 'Olt1YShbdlVlXSldLG5nQ29udGVudFNlbGVjdG9yczp5cyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxnZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkFjdGlvbiIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXX0pLGN9KSgpLFFZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5'@;
put 'cyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx4Nz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9'@;
put 'ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1'@;
put 'cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyhNNykubWFwKGQ9Pk03W2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2VydmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3Rp'@;
put 'dmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVUYWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5k'@;
put 'SW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdldCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09TTcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwo'@;
put 'YSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFh'@;
put 'LmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5n'@;
put 'ZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdLmFjdGl2'@;
put 'YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVu'@;
put 'PWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlvbiYmKHRo'@;
put 'aXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlvbi0xOnRo'@;
put 'aXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25Gb2N1c091'@;
put 'dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFiUG9zaXRp'@;
put 'b25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxkKXtjb25z'@;
put 'dCBoPXRoaXMudGFic0FjdGlvbnMuc29tZShmPT5mLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQpKTthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHxofHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVy'@;
put 'ZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfXNldFRhYkxpbmtFbGVtZW50cygpe3RoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPXRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSx0aGlzLnRhYkxpbmtFbGVtZW50cz10aGlzLl90YWJMaW5rRGlyZWN0'@;
put 'aXZlcy5tYXAoYT0+YS5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYkxpbmtFbGVtZW50cy5wdXNoKC4uLnRoaXMudGFic0FjdGlvbnMubWFwKGE9PmEubmF0aXZlRWxlbWVudCkpfWxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCl7'@;
put 'cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoVDIodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT50aGlzLnNldFRhYkxpbmtFbGVtZW50cygpKX1saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy50YWJzQWN0aW9ucy5jaGFuZ2Vz'@;
put 'LnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKGY3KSwkZShzYyksJGUoR3gpLCRlKEpZKSwkZSh0bykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJj'@;
put 'bHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYXMoaCxnZGUsNSxRaSksYXMoaCxibSw0KSksMiZhKXtsZXQgZjt5aShmPWJpKCkpJiYoZC50YWJzQWN0aW9ucz1mKSx5aShmPWJpKCkpJiYoZC50YWJzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEs'@;
put 'ZCl7aWYoMSZhJiYoRmEoTmIsNyksRmEoUVksNSxRaSksRmEoRU5lLDcsVHMpKSwyJmEpe2xldCBoO3lpKGg9YmkoKSkmJihkLmtleUZvY3VzPWguZmlyc3QpLHlpKGg9YmkoKSkmJihkLnRhYk92ZXJmbG93RWw9aC5maXJzdCkseWkoaD1iaSgpKSYmKGQudGFiQ29udGVudFZpZXdDb250YWlu'@;
put 'ZXI9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInRhYnMtdmVydGljYWwiLGQuaXNWZXJ0aWNhbCl9LGlucHV0czp7bGF5b3V0OltWbi5Ob25lLCJjbHJMYXlvdXQiLCJsYXlvdXQiXX0sZmVhdHVyZXM6W3VhKFtmNyxHeCxmWmVdKSx5'@;
put 'ZChbYWddKV0sbmdDb250ZW50U2VsZWN0b3JzOkFOZSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLCJjbHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNs'@;
put 'ckZvY3VzQ2hhbmdlIiwiZm9jdXNvdXQiLCJjbHJLZXlGb2N1cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwidGFicy1v'@;
put 'dmVyZmxvdyIsImJvdHRvbS1yaWdodCJdLFsicm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGluayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vkb3duIiwiZm9j'@;
put 'dXMiLCJjbGljayJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIl0sWzMsImtleWRvd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsNCwibmdJZiJd'@;
put 'XSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1PbigpO3NhKFROZSksZGUoMCwidWwiLDIpLEZ0KCJjbHJGb2N1c0NoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQudG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKHYpKX0pKCJmb2N1c291dCIsZnVuY3Rp'@;
put 'b24odil7cmV0dXJuIHd0KGgpLEN0KGQucmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZSh2KSl9KSxndCgxLEROZSwyLDEsIm5nLWNvbnRhaW5lciIsMykoMixPTmUsNywxMSwibmctY29udGFpbmVyIiw0KSxXcigzKSxoZSgpLExsKDQsbnVsbCwwKX0yJmEmJihNZSgiY2xyS2V5Rm9jdXMi'@;
put 'LGQudGFiTGlua0VsZW1lbnRzKSxmZSgpLE1lKCJuZ0Zvck9mIixkLnRhYkxpbmtEaXJlY3RpdmVzKSxmZSgpLE1lKCJuZ0lmIixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W1FzLGJhLEIxLGVvLE5iLFFZXSxlbmNhcHN1bGF0aW9uOjJ9KSxj'@;
put 'fSkoKSxnWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKEgwZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLEYyLFRvLGNa'@;
put 'ZSxYWSxGMl19KSxjfSkoKSxlRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5uYXZHcm91cENvdW50PTB9cmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudCsrfXVucmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudC0tfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWNvbnM9MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5faWNv'@;
put 'bnM+MH1yZWdpc3Rlckljb24oKXt0aGlzLl9pY29ucysrfXVucmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30p'@;
put 'KCksbkc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZD1uZXcgR24sdGhpcy5fY29sbGFwc2VkQ2hhbmdlZD1uZXcgR24sdGhpcy5fY29sbGFwc2VkPSExLHRoaXMuX2NvbGxhcHNpYmxlPSExfWdldCBhbmltYXRlT25Db2xsYXBzZWQoKXtyZXR1'@;
put 'cm4gdGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWRDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNlZENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChh'@;
put 'KXthPSEhYSx0aGlzLmNvbGxhcHNpYmxlJiZ0aGlzLl9jb2xsYXBzZWQhPT1hJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl9Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9jb2xsYXBzaWJsZSE9PShhPSEh'@;
put 'YSkmJighYSYmdGhpcy5jb2xsYXBzZWQmJnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcighMSksdGhpcy5fY29sbGFwc2libGU9YSl9dXBkYXRlQ29sbGFwc2VCZWhhdmlvcihhKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQubmV4dChhKSx0aGlzLl9jb2xsYXBzZWQ9YSx0aGlzLl9jb2xs'@;
put 'YXBzZWRDaGFuZ2VkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhp'@;
put 'cy5fbmF2U2VydmljZT1hLHRoaXMuX25hdkljb25TZXJ2aWNlPWQsdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5jb250ZW50SWQ9X3UoKSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBLcighMCksdGhpcy5fc3ViPWEuY29s'@;
put 'bGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUodj0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdCh2KX0pfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPWF9'@;
put 'Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkPWF9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBD'@;
put 'b3VudD4wfWdldCBoYXNJY29ucygpe3JldHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1'@;
put 'YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9uKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShuRyksJGUodEcpLCRlKGVHKSwkZSh0bykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJjbHItdmVydGljYWwtbmF2Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiaXMtY29sbGFwc2VkIixkLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixkLmhhc05hdkdyb3Vw'@;
put 'cykoImhhcy1pY29ucyIsZC5oYXNJY29ucyl9LGlucHV0czp7dG9nZ2xlTGFiZWw6W1ZuLk5vbmUsImNsclZlcnRpY2FsTmF2VG9nZ2xlTGFiZWwiLCJ0b2dnbGVMYWJlbCJdLGNvbGxhcHNpYmxlOltWbi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxj'@;
put 'b2xsYXBzZWQ6W1ZuLk5vbmUsImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOlt1YShbbkcsdEcsZUddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlz'@;
put 'LGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCIsMywiaWQiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi1idG4iLCJhcmlhLWhp'@;
put 'ZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwibmF2LXRyaWdnZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwibmF2LXRyaWdnZXItaWNvbiJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlk'@;
put 'ZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEsIm5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLFBOZSwyLDYsImJ1dHRvbiIsMCksZGUoMSwiZGl2IiwxKSxXcigyKSxndCgzLEZOZSwxLDIsImJ1dHRvbiIsMiksaGUoKSksMiZh'@;
put 'JiYoTWUoIm5nSWYiLGQuY29sbGFwc2libGUpLGZlKCksTWUoImlkIixkLmNvbnRlbnRJZCksZmUoMiksTWUoIm5nSWYiLGQuY29sbGFwc2libGUmJmQuY29sbGFwc2VkKSl9LGRlcGVuZGVuY2llczpbYmEsZW9dLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGlHPSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoKXt0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IEdufWdldCBleHBhbmRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5kQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWV4cGFuZCgpe3RoaXMuX2V4cGFuZENoYW5nZS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksYUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZXN0cm95JD1uZXcgR24saCYmeGQoYS5uYXRpdmVFbGVtZW50LCJjbGljayIpLnBpcGUo'@;
put 'SDAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e2guZXhwYW5kKCksZC5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKFFpKSwkZSh4byksJGUo'@;
put 'aUcsOCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXV0saG9zdEF0dHJzOlsxLCJuYXYtbGluayJdLGF0dHJzOlZOZSxuZ0NvbnRlbnRTZWxlY3RvcnM6ak5lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5hdi10ZXh0'@;
put 'Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoQk5lKSxXcigwKSxkZSgxLCJzcGFuIiwwKSxXcigyLDEpLGhlKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKENiLFYwZSl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLFRvLEYyLFpMLEYyLFRvLFpMXX0pLGN9KSgpLGJaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltuWmUsbFplLGdaZSxtZGUsdFplXX0pLGN9KSgpLEJiPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBYMGV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoKX19cmV0'@;
put 'dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoUWkpLCRlKHdZKSwkZShtbyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxmZWF0dXJlczpbQ2FdfSksY30pKCksUUw9KCgpPT57Y2xhc3Mg'@;
put 'Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCk7Y29uc3Qgd1plPS9kKy4rbSsuK3krL2ksQ1plPS9tKy4rZCsuK3krL2ksU1plPS9kK3xtK3x5Ky9pLE1aZT0v'@;
put 'XGQrL2cseFplPS9Nb2JpL2ksRVplPS9cdTIwMGYvZyxzRz0iWVlZWSIsZU89e25hbWU6IkxJVFRMRV9FTkRJQU4iLGZvcm1hdDpbIkREIiwiTU0iLHNHXX0sY0c9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLHNHXX0sVFplPXtuYW1lOiJCSUdfRU5ESUFOIixmb3Jt'@;
put 'YXQ6W3NHLCJNTSIsIkREIl19O2Z1bmN0aW9uIHlkZShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgUlple2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSx2PSExLE09ITEsST0hMSl7dGhpcy5kYXlNb2RlbD1sLHRoaXMuaXNUb2RheXNEYXRl'@;
put 'PWEsdGhpcy5pc0V4Y2x1ZGVkPWQsdGhpcy5pc0Rpc2FibGVkPWgsdGhpcy5pc1NlbGVjdGVkPWYsdGhpcy5pc0ZvY3VzYWJsZT12LHRoaXMuaXNSYW5nZVN0YXJ0RGF5PU0sdGhpcy5pc1JhbmdlRW5kRGF5PUl9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19'@;
put 'Y2xhc3MgTGR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBu'@;
put 'ZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2NvbnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xv'@;
put 'bmUoKXtyZXR1cm4gbmV3IExkKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMu'@;
put 'dG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KX1pc0JlZm9yZShsLGE9ITEpe3JldHVybiBhP3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPD1sPy50b0RhdGUoKS5nZXRUaW1l'@;
put 'KCk6dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk8bD8udG9EYXRlKCkuZ2V0VGltZSgpfWlzQWZ0ZXIobCxhPSExKXtyZXR1cm4gYT90aGlzLnRvRGF0ZSgpLmdldFRpbWUoKT49bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPmw/LnRvRGF0ZSgpLmdldFRpbWUo'@;
put 'KX1wYWQobCl7cmV0dXJuIGw8MTA/YDAke2x9YDpgJHtsfWB9fWNsYXNzIExaZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNKXt0aGlzLmNhbGVuZGFyPWwsdGhpcy5zZWxlY3RlZERheT1hLHRoaXMuc2VsZWN0ZWRFbmREYXk9ZCx0aGlzLmZvY3VzYWJsZURheT1oLHRoaXMudG9kYXk9Zix0'@;
put 'aGlzLmZpcnN0RGF5T2ZXZWVrPXYsdGhpcy5leGNsdWRlZERhdGVzPU0sdGhpcy5jdXJyTW9udGhEYXlWaWV3cz1bXSx0aGlzLmluaXRpYWxpemVDYWxlbmRhclZpZXcoKX1nZXQgY2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyVmlld311cGRhdGVGb2N1c2FibGVEYXkobCl7'@;
put 'dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCExKSx0aGlzLnNldEZvY3VzYWJsZUZsYWcobCwhMCksdGhpcy5mb2N1c2FibGVEYXk9bH11cGRhdGVTZWxlY3RlZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWREYXksITEpLHRoaXMuc2VsZWN0'@;
put 'ZWREYXk9bCx0aGlzLnNldFNlbGVjdGVkRGF5KGwsITApfXVwZGF0ZVNlbGVjdGVkRW5kRGF5KGwpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMSksdGhpcy5zZWxlY3RlZEVuZERheT1sLHRoaXMuc2V0U2VsZWN0ZWREYXkobCwhMCl9aW5pdGlhbGl6ZUNhbGVu'@;
put 'ZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5j'@;
put 'YWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSx2PVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9udGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRh'@;
put 'eXMsITEsITApLGg+MCYmKHY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsdiksdGhpcy5pbml0aWFsaXplU2VsZWN0'@;
put 'ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29tcGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSx2PWwudG9Db21wYXJp'@;
put 'c29uU3RyaW5nKCk7cmV0dXJuISh2Pj1oJiZ2PD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3IFJaZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRlZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0'@;
put 'aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24ga1plKGMsbCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+'@;
put 'PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3Qg'@;
put 'aD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCB2PTA7djw2O3YrKylmW3ZdPWguc2xpY2UoNyp2LDcqKHYrMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5zZXRTZWxlY3RlZERheSh0'@;
put 'aGlzLnNlbGVjdGVkRW5kRGF5LCEwKX1pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl7dGhpcy5mb2N1c2FibGVEYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLmZvY3VzYWJsZURheSk/dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKTp0aGlzLnNlbGVj'@;
put 'dGVkRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRGF5LmNsb25lKCkpOnRoaXMuc2VsZWN0ZWRFbmREYXkmJnRoaXMu'@;
put 'aXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRW5kRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWRFbmREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWRFbmREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMu'@;
put 'dG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IExkKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3Vz'@;
put 'YWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfXNldFNlbGVjdGVkRGF5KGwsYSl7bCYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KGwpJiYodGhpcy5j'@;
put 'dXJyTW9udGhEYXlWaWV3c1tsPy5kYXRlLTFdLmlzU2VsZWN0ZWQ9YSl9fWxldCBLeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubG9jYWxlPWEsdGhpcy5fZmlyc3REYXlPZldlZWs9MCx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRhKCl9Z2V0IGZpcnN0RGF5T2ZXZWVrKCl7'@;
put 'cmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXN9Z2V0IGxvY2FsZURheXNOYXJyb3coKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5cy5tYXAoYT0+YS5uYXJyb3cpfWdldCBsb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3Jl'@;
put 'dHVybiB0aGlzLl9sb2NhbGVNb250aHNBYmJyZXZpYXRlZH1nZXQgbG9jYWxlTW9udGhzV2lkZSgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNXaWRlfWdldCBsb2NhbGVEYXRlRm9ybWF0KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURhdGVGb3JtYXR9aW5pdGlhbGl6ZUxvY2FsZURhdGEoKXt0'@;
put 'aGlzLmluaXRpYWxpemVGaXJzdERheU9mV2VlaygpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXlz'@;
put 'KCl9aW5pdGlhbGl6ZUxvY2FsZURheXMoKXtjb25zdCBhPVtdLGQ9V1UodGhpcy5sb2NhbGUsYzAuU3RhbmRhbG9uZSxsbC5XaWRlKS5zbGljZSgpLGg9V1UodGhpcy5sb2NhbGUsYzAuU3RhbmRhbG9uZSxsbC5OYXJyb3cpLnNsaWNlKCksZj10aGlzLmZpcnN0RGF5T2ZXZWVrO2ZvcihsZXQg'@;
put 'dj0wO3Y8Nzt2KyspYS5wdXNoKHtkYXk6ZFt2XSxuYXJyb3c6aFt2XX0pO2lmKGY+MCl7Y29uc3Qgdj1hLnNwbGljZSgwLGYpO2EucHVzaCguLi52KX10aGlzLl9sb2NhbGVEYXlzPWF9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCl7dGhpcy5fbG9jYWxlTW9udGhzQWJicmV2'@;
put 'aWF0ZWQ9WVUodGhpcy5sb2NhbGUsYzAuU3RhbmRhbG9uZSxsbC5BYmJyZXZpYXRlZCkuc2xpY2UoKX1pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpe3RoaXMuX2xvY2FsZU1vbnRoc1dpZGU9WVUodGhpcy5sb2NhbGUsYzAuU3RhbmRhbG9uZSxsbC5XaWRlKS5zbGljZSgpfWluaXRpYWxp'@;
put 'emVGaXJzdERheU9mV2Vlaygpe3RoaXMuX2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIEJfZShjKXtyZXR1cm4gYTEoYylbUWwuRmlyc3REYXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKXt0aGlzLl9sb2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIGtN'@;
put 'KGMsbCl7cmV0dXJuIE0yKGExKGMpW1FsLkRhdGVGb3JtYXRdLGwpfSh0aGlzLmxvY2FsZSxDZC5TaG9ydCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKENyKFdmKSl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'fSksY30pKCk7Y2xhc3MgT2R7Y29uc3RydWN0b3IobCxhKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKX1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1pc0RheUluQ2Fs'@;
put 'ZW5kYXIobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRofXByZXZpb3VzTW9udGgoKXtyZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IE9kKHRoaXMueWVhci0xLDExKTpuZXcgT2QodGhpcy55ZWFyLHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7'@;
put 'cmV0dXJuIDExPT09dGhpcy5tb250aD9uZXcgT2QodGhpcy55ZWFyKzEsMCk6bmV3IE9kKHRoaXMueWVhcix0aGlzLm1vbnRoKzEpfXByZXZpb3VzWWVhcigpe3JldHVybiBuZXcgT2QodGhpcy55ZWFyLTEsdGhpcy5tb250aCl9bmV4dFllYXIoKXtyZXR1cm4gbmV3IE9kKHRoaXMueWVhcisx'@;
put 'LHRoaXMubW9udGgpfWluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpe2NvbnN0IGw9eWRlKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5tYXAoKGEsZCk9Pm5ldyBMZCh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IEVoPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlzUmFuZ2VQaWNrZXI9ITEsdGhpcy5oYXNBY3Rpb25CdXR0b25zPSExLHRoaXMuX3RvZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlPW5ldyBHbix0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZT1uZXcgR24sdGhp'@;
put 'cy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2U9bmV3IEduLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgR24sdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldz1uZXcgR24sdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgR259Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdl'@;
put 'dCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNlbGVjdGVkRW5kRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3Nl'@;
put 'bGVjdGVkRW5kRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25D'@;
put 'YWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoWnUoYT0+dGhpcy5mb2N1c2VkRGF5PWEpKX1nZXQgcmVmcmVzaENhbGVuZGFyVmlldygpe3JldHVybiB0aGlz'@;
put 'Ll9yZWZyZXNoQ2FsZW5kYXJWaWV3LmFzT2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChhLHtlbWl0RXZlbnQ6ZH09e2VtaXRFdmVudDohMH0pe2lmKHRoaXMuaXNSYW5nZVBpY2tlcil7Y29uc3R7c3RhcnREYXRlOmgsZW5kRGF0ZTpmfT1hO2gmJmY/KHRoaXMuc2V0U2Vs'@;
put 'ZWN0ZWREYXkoaCxkKSx0aGlzLnNldFNlbGVjdGVkRW5kRGF5KGYsZCkpOihudWxsIT09ZiYmdGhpcy5zZXRTZWxlY3RlZEVuZERheShmLGQpLG51bGwhPT1oJiZ0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCkpfWVsc2UgdGhpcy5zZXRTZWxlY3RlZERheShhLGQpO3RoaXMuX3JlZnJlc2hDYWxl'@;
put 'bmRhclZpZXcubmV4dCgpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBPZCh0aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxl'@;
put 'Y3RlZERheS5tb250aCk6bmV3IE9kKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEpKX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxh'@;
put 'eWVkQ2FsZW5kYXIobmV3IE9kKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1tb3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXRE'@;
put 'aXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb05leHRZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0WWVhcigpKX1tb3ZlVG9QcmV2aW91c1llYXIoKXt0aGlzLnNl'@;
put 'dERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzWWVhcigpKX1tb3ZlVG9DdXJyZW50TW9udGgoKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2Qo'@;
put 'dGhpcy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfW1vdmVUb1NwZWNpZmljTW9udGgoYSl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIoYSl8fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3'@;
put 'IE9kKGEueWVhcixhLm1vbnRoKSl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5ob3ZlcmVkRGF5PXRoaXMuZm9jdXNlZERheT10aGlzLmZvY3VzZWREYXkuaW5jcmVtZW50QnkoYSksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMuZm9jdXNlZERheSk/dGhp'@;
put 'cy5fZm9jdXNlZERheUNoYW5nZS5uZXh0KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1yZXNldFNlbGVj'@;
put 'dGVkRGF5KCl7dGhpcy5zZWxlY3RlZERheT10aGlzLnBlcnNpc3RlZERhdGUsdGhpcy5zZWxlY3RlZEVuZERheT10aGlzLnBlcnNpc3RlZEVuZERhdGV9Y29udmVydERhdGVUb0RheU1vZGVsKGEpe3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUo'@;
put 'KSl9c2V0U2VsZWN0ZWREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRGF5PWEsZCYmdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UubmV4dChhKX1zZXRTZWxlY3RlZEVuZERheShhLGQpe3RoaXMuc2VsZWN0ZWRFbmREYXk9YSxkJiZ0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5uZXh0KGEpfXNldERp'@;
put 'c3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1u'@;
put 'ZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgTGQodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLF9tPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNp'@;
put 'ZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5P'@;
put 'dXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJ'@;
put 'bkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUobm0oKSxXbCgoKT0+ZWwodGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihHYSksQ3IoaXMpKX0sYy5cdTAy'@;
put 'NzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxsZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlzYWJsZWREYXRlcz17bWluRGF0ZTpuZXcgTGQoMCwwLDEpLG1heERhdGU6bmV3IExkKDk5OTksMTEsMzEpfSx0aGlzLmNsZHJMb2NhbGVE'@;
put 'YXRlRm9ybWF0PSJkZC9NTS95Iix0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9ZU8sdGhpcy5kZWxpbWl0ZXJzPVsiLyIsIi8iXSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PWEubG9jYWxlRGF0ZUZvcm1hdCx0aGlzLmluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl9Z2V0IHBsYWNl'@;
put 'aG9sZGVyVGV4dCgpe2NvbnN0IGE9dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtyZXR1cm4gYVswXSt0aGlzLmRlbGltaXRlcnNbMF0rYVsxXSt0aGlzLmRlbGltaXRlcnNbMV0rYVsyXX1zZXRNaW5EYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9'@;
put 'PnBhcnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTGQoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTGQoMCwwLDEpfXNldE1heERhdGUoYSl7aWYoYSl7Y29uc3RbZCxoLGZdPWEuc3BsaXQoIi0iKS5tYXAodj0+cGFyc2VJ'@;
put 'bnQodiwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBMZChkLGgtMSxmKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBMZCg5OTk5LDExLDMxKX1zZXRSYW5nZU9wdGlvbnMoYSl7Y29uc3QgZD10aGlzLnZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKTt0'@;
put 'aGlzLmRhdGVSYW5nZU9wdGlvbnM9ZHx8W119Z2V0UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZVJhbmdlT3B0aW9uc310b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSl7aWYoYSl7aWYoaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiIiO2NvbnN0IGQ9YS5nZXREYXRlKCksaD1h'@;
put 'LmdldE1vbnRoKCkrMSxmPWQ+OT9kLnRvU3RyaW5nKCk6IjAiK2Qsdj1oPjk/aC50b1N0cmluZygpOiIwIitoO3JldHVybiB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1lTz9mK3RoaXMuZGVsaW1pdGVyc1swXSt2K3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZZWFyKCk6dGhpcy5s'@;
put 'b2NhbGVEaXNwbGF5Rm9ybWF0PT09Y0c/dit0aGlzLmRlbGltaXRlcnNbMF0rZit0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOmEuZ2V0RnVsbFllYXIoKSt0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRlbGltaXRlcnNbMV0rZn1yZXR1cm4iIn1nZXREYXRlVmFsdWVGcm9t'@;
put 'RGF0ZVN0cmluZyhhKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsO2NvbnN0IGQ9YS5tYXRjaChNWmUpO2lmKCFkfHwzIT09ZC5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3RbaCxmLHZdPWQ7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PWVPP3RoaXMudmFs'@;
put 'aWRhdGVBbmRHZXREYXRlKHYsZixoKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1jRz90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGgsZik6dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoaCxmLHYpfXZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKXtjb25zdCBkPVtdO3JldHVybiBhPy5m'@;
put 'b3JFYWNoKGg9PnsyIT09aD8udmFsdWU/Lmxlbmd0aHx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzBdKXx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzFdKXx8ZC5wdXNo'@;
put 'KGgpfSksZH1pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpe2NvbnN0IGE9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMubG9jYWxlRGlzcGxheUZvcm1hdD13WmUudGVzdChhKT9lTzpDWmUudGVzdChhKT9jRzpUWmUsdGhpcy5leHRyYWN0'@;
put 'RGVsaW1pdGVycygpfWV4dHJhY3REZWxpbWl0ZXJzKCl7aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7Y29uc3QgZD10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoRVplLCIiKS5zcGxpdChTWmUpO2QmJjQ9PT1kLmxlbmd0aD90aGlzLmRlbGltaXRlcnM9W2RbMV0sZFsy'@;
put 'XV06Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICIsZCl9fWlzVmFsaWRNb250aChhKXtyZXR1cm4gYT4tMSYmYTwxMn1pc1ZhbGlkRGF0ZShhLGQsaCl7cmV0dXJuIGg+MCYmaDw9eWRlKGEsZCl9dmFsaWRhdGVB'@;
put 'bmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLHY9K2QtMSxNPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aCh2KXx8IXRoaXMuaXNWYWxpZERhdGUoZix2LE0pKXJldHVybiBudWxsO2NvbnN0IEk9ZnVuY3Rpb24gRFplKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0x'@;
put 'O2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDApLGR9KGYpO3JldHVybi0xIT09ST9uZXcgRGF0ZShJLHYsTSk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IoS3gpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx6Yj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgR24sdGhpcy5fZGlydHlDaGFu'@;
put 'Z2U9bmV3IEdufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdl'@;
put 'Lm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1'@;
put 'MDI3NWZhY30pLGN9KSgpLGJkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5vblNlbGVjdERheT1uZXcgS3J9Z2V0IGRheVZpZXcoKXtyZXR1cm4gdGhpcy5fZGF5Vmlld31zZXQg'@;
put 'ZGF5VmlldyhhKXt0aGlzLl9kYXlWaWV3PWF9Z2V0IGRheVN0cmluZygpe3JldHVybiB0aGlzLmRheVZpZXcuaXNTZWxlY3RlZD90aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWwse0ZVTExfREFURTp0aGlzLl9k'@;
put 'YXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfSk6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX1nZXQgaXNSYW5nZVN0YXJ0RGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVs'@;
put 'Py50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9Z2V0IGlzUmFuZ2VFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5'@;
put 'Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1ob3Zlckxpc3RlbmVyKCl7dGhpcy5kYXlWaWV3LmlzRGlzYWJsZWR8fCh0aGlzLl9kYXRlTmF2aWdhdGlv'@;
put 'blNlcnZpY2UuaG92ZXJlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWwpfW9uRGF5Vmlld0ZvY3VzKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgpe3RoaXMuZGF5Vmlldy5pc0Rpc2FibGVkfHx0aGlzLm9u'@;
put 'U2VsZWN0RGF5LmVtaXQodGhpcy5kYXlWaWV3LmRheU1vZGVsKX1pc0luUmFuZ2UoKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNl'@;
put 'cnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRF'@;
put 'bmREYXkpOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRE'@;
put 'YXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheSwhMCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShFaCksJGUodG8pKX0sYy5cdTAyNzVjbXA9TnIoe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaG92ZXJMaXN0ZW5lcigpfSksMiZhJiZUcigiZGF5IiwhMCl9LGlucHV0czp7ZGF5VmlldzpbVm4u'@;
put 'Tm9uZSwiY2xyRGF5VmlldyIsImRheVZpZXciXX0sb3V0cHV0czp7b25TZWxlY3REYXk6InNlbGVjdERheSJ9LGRlY2xzOjIsdmFyczoxOSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiZGF5LWJ0biIsMywiY2xpY2siLCJmb2N1cyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm'@;
put 'KGRlKDAsImJ1dHRvbiIsMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbGVjdERheSgpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLm9uRGF5Vmlld0ZvY3VzKCl9KSxPZSgxKSxoZSgpKSwyJmEmJihUcigiaXMtdG9kYXkiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGUp'@;
put 'KCJpcy1leGNsdWRlZCIsZC5kYXlWaWV3LmlzRXhjbHVkZWQpKCJpcy1kaXNhYmxlZCIsZC5kYXlWaWV3LmlzRGlzYWJsZWQpKCJpcy1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpKCJpbi1yYW5nZSIsZC5pc0luUmFuZ2UoKSkoImlzLXN0YXJ0LXJhbmdlIixkLmlzUmFuZ2VTdGFy'@;
put 'dERheSkoImlzLWVuZC1yYW5nZSIsZC5pc1JhbmdlRW5kRGF5KSxocigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3Rl'@;
put 'ZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLGZlKCksTHIoIiAiLGQuZGF5Vmlldy5kYXlNb2RlbC5kYXRlLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEs'@;
put 'dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2RhdGVJT1NlcnZpY2U9Zix0aGlzLl9lbFJlZj12LHRoaXMuX2RhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLl90b2dnbGVTZXJ2aWNlPUksdGhpcy5fc3Vicz1bXSx0'@;
put 'aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2'@;
put 'aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9Z2V0IHNlbGVjdGVkRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheX1nZXQgZm9j'@;
put 'dXNlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheX1nZXQgdG9kYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxs'@;
put 'KHRoaXMuX2VsUmVmKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfW9uS2V5RG93bihhKXtpZihhJiZ0aGlzLmZvY3VzZWREYXkpc3dpdGNoKEwyKGEua2V5KSl7Y2FzZSBwYS5BcnJvd1VwOmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRl'@;
put 'TmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTcpO2JyZWFrO2Nhc2UgcGEuQXJyb3dEb3duOmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoNyk7YnJlYWs7Y2FzZSBwYS5BcnJvd0xlZnQ6YS5wcmV2ZW50'@;
put 'RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtMSk7YnJlYWs7Y2FzZSBwYS5BcnJvd1JpZ2h0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoMSl9fXNldFNlbGVjdGVk'@;
put 'RGF5KGEpe2NvbnN0IGQ9dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnMsaD10aGlzLnVwZGF0ZUNhbGVuZGFyVmlld01vZGFsKGEpO3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoaCx7ZW1pdEV2ZW50OiFkfSks'@;
put 'ZHx8KHRoaXMuX2RhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSx0aGlzLnZhbGlkYXRlQW5kQ2xvc2VEYXRlUGlja2VyKCkpfWluaXRpYWxpemVTdWJzY3JpcHRpb25zKCl7dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxl'@;
put 'bmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl9KSksdGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVGb2N1'@;
put 'c2FibGVEYXkoYSl9KSksdGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c09uQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfSkpLHRoaXMuX3N1YnMucHVz'@;
put 'aCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVmcmVzaENhbGVuZGFyVmlldy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpfSkpfXZhbGlkYXRlQW5kQ2xvc2VEYXRlUGlja2VyKCl7KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1Jhbmdl'@;
put 'UGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheXx8IXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu'@;
put 'c2VsZWN0ZWREYXkpJiYodGhpcy5fdG9nZ2xlU2VydmljZS5vcGVuPSExKX11cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKXtjb25zdCBkPXRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXl8fG51bGwsaD10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcjts'@;
put 'ZXQgZj10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fHxudWxsO3JldHVybiBoPyFkfHxkJiZmfHxkJiZhPy5pc0JlZm9yZShkKT8odGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxmJiYoZj12b2lkIDAsdGhpcy5jYWxlbmRhclZpZXdNb2Rl'@;
put 'bC51cGRhdGVTZWxlY3RlZEVuZERheShmKSkpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoYSk6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxoP3tzdGFydERhdGU6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERh'@;
put 'eSxlbmREYXRlOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWRFbmREYXl9OnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXl9cmVmcmVzaENhbGVuZGFyVmlld01vZGFsKCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheSh0aGlzLl9kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSl9Z2VuZXJh'@;
put 'dGVDYWxlbmRhclZpZXcoKXt0aGlzLmNhbGVuZGFyVmlld01vZGVsPW5ldyBMWmUodGhpcy5jYWxlbmRhcix0aGlzLnNlbGVjdGVkRGF5LHRoaXMuc2VsZWN0ZWRFbmREYXksdGhpcy5mb2N1c2VkRGF5LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vl'@;
put 'ayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShLeCksJGUoRWgpLCRlKF9tKSwkZShsZyksJGUoUWkpLCRlKHpiKSwkZShzYykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJjbHItY2FsZW5kYXIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJjYWxlbmRhci10'@;
put 'YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJjYWxlbmRhci1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIiwid2Vla2RheSJd'@;
put 'LFsxLCJjYWxlbmRhci1yb3ciXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhbGVuZGFyLWNlbGwiXSxbMywic2VsZWN0RGF5IiwiY2xyRGF5VmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsInRhYmxlIiwwKSgxLCJ0'@;
put 'ciIsMSksZ3QoMix6TmUsMywyLCJ0aCIsMiksaGUoKSxndCgzLFpOZSwyLDEsInRyIiwzKSxoZSgpKSwyJmEmJihmZSgyKSxNZSgibmdGb3JPZiIsZC5sb2NhbGVEYXlzKSxmZSgpLE1lKCJuZ0Zvck9mIixkLmNhbGVuZGFyVmlld01vZGVsLmNhbGVuZGFyVmlldykpfSxkZXBlbmRlbmNpZXM6'@;
put 'W1FzLGJkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdE89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2lzVXNlckFnZW50TW9iaWxlPSExLGEmJih0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT14WmUudGVzdChhLmRlZmF1bHRWaWV3Lm5hdmln'@;
put 'YXRvci51c2VyQWdlbnQpLHRoaXMuX2lubmVyV2lkdGg9YS5kZWZhdWx0Vmlldy5pbm5lcldpZHRoKX1nZXQgaXNFbmFibGVkKCl7cmV0dXJuISh0aGlzLl9kb2N1bWVudCYmdGhpcy5faW5uZXJXaWR0aDw3NjgmJnRoaXMuX2lzVXNlckFnZW50TW9iaWxlKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IobW8pKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx1Rz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLHJlLHVlLHllLEVlLEJlKXtz'@;
put 'dXBlcihhLHF4LGQsdixmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPXYsdGhpcy5jb250YWluZXI9TSx0aGlzLmRhdGVJT1NlcnZpY2U9SSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1HLHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPXJlLHRoaXMu'@;
put 'ZGF0ZUZvcm1Db250cm9sU2VydmljZT11ZSx0aGlzLnBsYXRmb3JtSWQ9eWUsdGhpcy5mb2N1c1NlcnZpY2U9RWUsdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPUJlLHRoaXMuaW5kZXg9MX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMu'@;
put 'ZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZHx8ISF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LmRpc2FibGVkOm51bGx9c2V0IGRpc2FibGVkKGEpe3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnNldERpc2FibGVkKGUzKGEpKX1n'@;
put 'ZXQgcGxhY2Vob2xkZXJUZXh0KCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjp0aGlzLmRhdGVJT1NlcnZpY2UucGxhY2Vob2xkZXJUZXh0fWdldCBpbnB1dFR5cGUoKXtyZXR1cm4gZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy51c2luZ05hdGl2ZURhdGVwaWNr'@;
put 'ZXIoKT8iZGF0ZSI6InRleHQifW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksdGhpcy5saXN0'@;
put 'ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckRpcnR5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucHJvY2Vzc0luaXRpYWxJbnB1dHMoKX1zZXRG'@;
put 'b2N1c1N0YXRlcygpe3RoaXMuc2V0Rm9jdXMoITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7c3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLnNldEZvY3VzKCExKX1vblZhbHVlQ2hhbmdlKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5n'@;
put 'KGEudmFsdWUpO2lmKHRoaXMudXNpbmdDbGFyaXR5RGF0ZXBpY2tlcigpJiZkKXRoaXMudXBkYXRlRGF0ZShkLCEwKTtlbHNlIGlmKHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpe2NvbnN0W2gsZix2XT1hLnZhbHVlLnNwbGl0KCItIik7dGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCto'@;
put 'LCtmLTEsK3YpLCEwKX1lbHNlIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9c2V0RGF0ZShhKXsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyBEYXRlKGEpKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSE9'@;
put 'PWEmJnRoaXMudXBkYXRlRGF0ZShhKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5n'@;
put 'TmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50'@;
put 'KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIobGcpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKEVoKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10'@;
put 'aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih0TyksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKHpiKSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMoKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0'@;
put 'ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVl'@;
put 'RnJvbURhdGUoYSk7aWYoZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Upe2NvbnN0IGY9aD9uZXcgTGQoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSk6bnVsbDt0aGlzLnVw'@;
put 'ZGF0ZURheU1vZGVsKGYpfXRoaXMudXBkYXRlSW5wdXQoaCl9dXBkYXRlSW5wdXQoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3RoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KGEuc2V0TWludXRlcyhhLmdldE1p'@;
put 'bnV0ZXMoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZUFzRGF0ZSIsYSkpOnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJmQhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9s'@;
put 'LmNvbnRyb2wuc2V0VmFsdWUoZCk6dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixkKSx0aGlzLnZhbGlkYXRlRGF0ZVJhbmdlKCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUi'@;
put 'LCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJp'@;
put 'bmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIElaZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYmYy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZj'@;
put 'LmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYodGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhp'@;
put 'cy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShXbCgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5l'@;
put 'bGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpOm51bGx9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVy'@;
put 'biB0aGlzLnVzZXJTZWxlY3RlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKGE/LnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoV2woKCk9PnRoaXMu'@;
put 'ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKFdsKCgpPT50'@;
put 'aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShX'@;
put 'bChhPT4hIWEmJiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKSkuc3Vic2NyaWJlKCgpPT50aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX12YWxpZGF0ZURhdGVSYW5nZSgpe2lmKHRoaXMuZGF0ZU5h'@;
put 'dmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIpe2NvbnN0IGE9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5jb250cm9sLGQ9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5hZGRpdGlvbmFsQ29udHJvbHM7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LmlzQmVmb3JlKHRo'@;
put 'aXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LCEwKSYmKGE/Lmhhc0Vycm9yKCJyYW5nZSIpfHxkPy5zb21lKGY9PmYuaGFzRXJyb3IoInJhbmdlIikpKSYmKGEuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZC5mb3JFYWNoKGY9'@;
put 'PntmPy5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKFRzKSwkZShEbyksJGUoUWkpLCRlKEVzKSwkZSh1MSwxMCksJGUod28oKCk9PnF4KSw4KSwkZShs'@;
put 'Zyw4KSwkZShFaCw4KSwkZSh0Tyw4KSwkZSh6Yiw4KSwkZShpcyksJGUoVmIsOCksJGUoX20pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNldEZvY3VzU3Rh'@;
put 'dGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSkoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25WYWx1ZUNoYW5nZShmLnRhcmdldCl9KSwyJmEmJihvcCgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJwbGFjZWhvbGRlciIsZC5w'@;
put 'bGFjZWhvbGRlclRleHQpKCJ0eXBlIixkLmlucHV0VHlwZSkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sZmVhdHVyZXM6W0NhXX0pLGN9KSgpLHdkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdUd7Y29uc3RydWN0b3IoKXtzdXBlcigu'@;
put 'Li5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlz'@;
put 'LmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50'@;
put 'OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWRFbmREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVk'@;
put 'RW5kRGF5PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVVvKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJFbmREYXRlIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJp'@;
put 'bmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInNpemUiLGQuaW5wdXRTaXplKSxUcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6W1ZuLk5vbmUsImNsckVuZERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsckVu'@;
put 'ZERhdGVDaGFuZ2UifSxmZWF0dXJlczpbdWEoW19tXSksQ2FdfSksY30pKCksbk89KCgpPT57Y2xhc3MgYyBleHRlbmRzIHVHe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKX1zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9c2V0'@;
put 'IG1pbihhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWluRGF0ZShhKSx0aGlzLnRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpfXNldCBtYXgoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1nZXQgdXNlclNlbGVjdGVk'@;
put 'RGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlfXVwZGF0ZURheU1vZGVsKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk9YX10'@;
put 'cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9s'@;
put 'LmNvbnRyb2wuZXJyb3JzKSl9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVVvKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjIs'@;
put 'aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGlucHV0czp7ZGF0ZTpbVm4uTm9uZSwiY2xyRGF0ZSIsImRhdGUiXSxtaW46Im1pbiIsbWF4OiJtYXgifSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3VhKFtf'@;
put 'bV0pLENhXX0pLGN9KSgpLENkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdUd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6'@;
put 'ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250'@;
put 'cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0'@;
put 'aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVVvKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigic2l6ZSIsZC5pbnB1dFNpemUpLE4xKCJ0ZXh0LWFsaWduIiwicmlnaHQiKSxUcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lu'@;
put 'cHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6W1ZuLk5vbmUsImNsclN0YXJ0RGF0ZSIsImRhdGUiXX0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyU3RhcnREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3VhKFtfbV0pLENhXX0pLGN9KSgpLFViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0'@;
put 'aGlzLnBvc2l0aW9uPVRkWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9'@;
put 'Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNoYW5nZVRvRGF5'@;
put 'Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksU2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSxkLGgsZix2LE0pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9dix0aGlzLmNvbW1vblN0cmluZ3M9'@;
put 'TSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdh'@;
put 'dGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGh9Z2V0IGNhbGVuZGFyRW5kTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWdldCB5ZWFyQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmlu'@;
put 'Z3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxFTkRBUl9ZRUFSOnRoaXMuY2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5'@;
put 'ZWRDYWxlbmRhci55ZWFyfWdldCBjdXJyZW50Q2FsZW5kYXJZZWFyKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldCBjdXJyZW50Q2FsZW5kYXJNb250aCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKX1nZXRJc1JhbmdlU3RhcnRNb250aChhKXtyZXR1cm4gdGhpcy5f'@;
put 'ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aH1nZXRJc1Jhbmdl'@;
put 'RW5kTW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z'@;
put 'ZWxlY3RlZEVuZERheT8ubW9udGh9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihh'@;
put 'KXtpZihhKXtjb25zdCBkPUwyKGEua2V5KTtkPT09cGEuQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LT0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVm'@;
put 'KSk6ZD09PXBhLkFycm93RG93biYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCs9Mix0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1wYS5BcnJvd1JpZ2h0'@;
put 'JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09cGEuQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJ'@;
put 'bmRleD4wJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVk'@;
put 'RGF5Py55ZWFyPT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmYT09PXRoaXMuY2Fs'@;
put 'ZW5kYXJFbmRNb250aEluZGV4fW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aD1hfWNoYW5nZU1vbnRoKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VNb250aChhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9E'@;
put 'YXlWaWV3KCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIGE9PT10aGlzLl9mb2N1c2VkTW9udGhJbmRleD8wOi0xfW5leHRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRZZWFyKCl9cHJldmlvdXNZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1v'@;
put 'dmVUb1ByZXZpb3VzWWVhcigpfWN1cnJlbnRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRp'@;
put 'b25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2Vs'@;
put 'ZWN0ZWREYXkubW9udGgmJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu'@;
put 'c2VsZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z'@;
put 'ZWxlY3RlZERheS5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2Vs'@;
put 'ZWN0ZWRFbmREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuY2FsZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcjx0aGlzLl9kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJih0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9u'@;
put 'U2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu'@;
put 'c2VsZWN0ZWREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKEt4KSwkZShFaCksJGUoX20pLCRlKFFpKSwkZShVYiksJGUodG8pKX0sYy5cdTAyNzVj'@;
put 'bXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW1vbnRocGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3du'@;
put 'KGYpfSksMiZhJiZUcigibW9udGhwaWNrZXIiLCEwKX0sZGVjbHM6MTMsdmFyczoxMCxjb25zdHM6W1sxLCJjYWxlbmRhci1oZWFkZXIiLCJpbi1tb250aHBpY2tlciJdLFsxLCJ5ZWFyLXZpZXctc3dpdGNoZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNr'@;
put 'ZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFw'@;
put 'ZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwibW9udGhzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1idG4gbW9udGgiLDMsImlzLXNlbGVjdGVkIiwiaXMtc3RhcnQtcmFuZ2UiLCJpcy1lbmQtcmFuZ2UiLCJpbi1yYW5nZSIsImlzLXRvZGF5IiwiY2xp'@;
put 'Y2siLCJtb3VzZWVudGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRoIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0'@;
put 'dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksT2UoMyksaGUoKSgpLGRlKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNZZWFyKCl9KSxXdCg2LCJjZHMtaWNvbiIs'@;
put 'NSksaGUoKSxkZSg3LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50WWVhcigpfSksV3QoOCwiY2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dFllYXIoKX0pLFd0KDEwLCJj'@;
put 'ZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksZ3QoMTIsV05lLDIsMTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUoMiksaHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksZmUoKSxMcigiICIsZC5jYWxlbmRhclll'@;
put 'YXIsIiAiKSxmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21t'@;
put 'b25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZl'@;
put 'KCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgyKSxNZSgibmdGb3JPZiIsZC5tb250aE5hbWVzKSl9LGRlcGVuZGVuY2llczpbUXMsZW9dLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIFh4e2NvbnN0cnVjdG9yKGwpe3RoaXMu'@;
put 'eWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgWHgodGhpcy55ZWFyKzEw'@;
put 'KX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgWHgodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBYeCgobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZZWFyUmFu'@;
put 'Z2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IHhkZT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy55ZWFyUmFuZ2VNb2RlbD1u'@;
put 'ZXcgWHgodGhpcy5jYWxlbmRhclllYXIpLHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuY2FsZW5kYXJZZWFyfWdldCBzZWxlY3RlZFN0YXJ0WWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0IHNlbGVjdGVkRW5kWWVhcigpe3JldHVy'@;
put 'biB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1pc0N1cnJlbnRDYWxlbmRhclllYXIoYSl7cmV0dXJuIGE9PT0o'@;
put 'bmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9Z2V0SXNSYW5nZVN0YXJ0WWVhcihhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0SXNSYW5nZUVuZFllYXIo'@;
put 'YSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRo'@;
put 'aXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1MMihhLmtleSk7ZD09PXBhLkFycm93VXA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0yKSk6ZD09PXBhLkFycm93RG93bj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50'@;
put 'Rm9jdXNZZWFyQnkoMikpOmQ9PT1wYS5BcnJvd1JpZ2h0PyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgxKSk6ZD09PXBhLkFycm93TGVmdCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0xKSl9fWNoYW5nZVllYXIo'@;
put 'YSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZVllYXIoYSksdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyPWF9cHJldmlvdXNEZWNhZGUoKXt0aGlzLnll'@;
put 'YXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKX1jdXJyZW50RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheS55ZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFy'@;
put 'UmFuZ2VNb2RlbC5jdXJyZW50RGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1uZXh0RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKX1nZXRUYWJJbmRleChhKXtyZXR1'@;
put 'cm4gdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLmNhbGVuZGFyWWVhcik/dGhpcy5jYWxlbmRhclllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRo'@;
put 'aXMuc2VsZWN0ZWRFbmRZZWFyKT90aGlzLnNlbGVjdGVkRW5kWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZZWFyPT09YT8wOi0xfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYo'@;
put 'dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZ0aGlzLnNlbGVjdGVkRW5kWWVhcj9hPnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJmE8dGhpcy5zZWxlY3RlZEVuZFllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFy'@;
put 'fHx0aGlzLnNlbGVjdGVkRW5kWWVhcikmJmE+dGhpcy5zZWxlY3RlZFN0YXJ0WWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZFllYXIpfWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1pbmNyZW1lbnRG'@;
put 'b2N1c1llYXJCeShhKXt0aGlzLl9mb2N1c2VkWWVhcj10aGlzLl9mb2N1c2VkWWVhcithLHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPWE+MD90aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKTp0aGlzLnll'@;
put 'YXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoRWgpLCRlKFViKSwkZShfbSksJGUoUWkpLCRlKHRv'@;
put 'KSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci15ZWFycGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJu'@;
put 'IGQub25LZXlEb3duKGYpfSksMiZhJiZUcigieWVhcnBpY2tlciIsITApfSxkZWNsczoxMyx2YXJzOjksY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dl'@;
put 'ciIsInllYXItcmFuZ2UiLDMsImNsaWNrIl0sWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFw'@;
put 'ZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNr'@;
put 'IiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFyIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9u'@;
put 'IiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9EYXlWaWV3KCl9KSxPZSgzKSxoZSgpKCksZGUoNCwiZGl2IiwzKSg1LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSksV3QoNiwiY2RzLWljb24iLDUp'@;
put 'LGhlKCksZGUoNywiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSksV3QoOCwiY2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2FkZSgpfSksV3QoMTAs'@;
put 'ImNkcy1pY29uIiw3KSxoZSgpKCkoKSxkZSgxMSwiZGl2Iiw4KSxndCgxMixZTmUsMiwxMiwiYnV0dG9uIiw5KSxoZSgpKSwyJmEmJihmZSgzKSxCdSgiICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbMF0sIiAtICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbZC55ZWFyUmFuZ2VN'@;
put 'b2RlbC55ZWFyUmFuZ2UubGVuZ3RoLTFdLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUo'@;
put 'KSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtl'@;
put 'eXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dERlY2FkZSksZmUoMiksTWUoIm5nRm9yT2YiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbUXMsZW9dLGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLEVkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9u'@;
put 'dGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhp'@;
put 'cy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2Vy'@;
put 'dmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdl'@;
put 'VG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92'@;
put 'ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShVYiksJGUoRWgpLCRlKEt4KSwkZSh0bykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRp'@;
put 'bmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIs'@;
put 'Im1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNo'@;
put 'ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSxPZSgxKSxoZSgpLGRl'@;
put 'KDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksT2UoNSksaGUoKSxkZSg2LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3'@;
put 'KCl9KSxPZSg3KSxoZSgpKCksZGUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxXdCgxMCwiY2RzLWljb24iLDcpLGhlKCksZGUoMTEsImJ1dHRvbiIsNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBkLmN1cnJlbnRNb250aCgpfSksV3QoMTIsImNkcy1pY29uIiw4KSxoZSgpLGRlKDEzLCJidXR0b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLFd0KDE0LCJjZHMtaWNvbiIsOSksaGUoKSgpKCksV3QoMTUsImNsci1jYWxlbmRhciIpLGRlKDE2'@;
put 'LCJkaXYiLDApLE9lKDE3KSxoZSgpKSwyJmEmJihmZSgpLFNyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxmZSgzKSxocigiYXJpYS1sYWJlbCIsZC5tb250aEF0dHJTdHJpbmcpKCJ0aXRsZSIsZC5tb250aEF0dHJTdHJpbmcpLGZlKCksTHIoIiAiLGQuY2FsZW5k'@;
put 'YXJNb250aCwiICIpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksZmUoKSxMcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclBy'@;
put 'ZXZpb3VzTW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9u'@;
put 'U3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgzKSxT'@;
put 'cihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltlbyxfZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPWZ9YXBwbHkoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/KHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh7c3RhcnREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LGVuZERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZp'@;
put 'Y2Uuc2VsZWN0ZWRFbmREYXl9KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSk6IXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiYodGhpcy5kYXRlTmF2aWdhdGlv'@;
put 'blNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9Y2FuY2VsKCl7dGhpcy5kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh0byksJGUoc2MpLCRlKEVoKSwkZSh6YikpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0ZXBpY2tlci1hY3Rpb25zIiwhMCl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJd'@;
put 'LFsxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jYW5jZWwoKX0pLE9lKDEpLGhlKCksZGUoMiwiYnV0dG9uIiwxKSxGdCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGQuYXBwbHkoKX0pLE9lKDMpLGhlKCkpLDImYSYmKGZlKCksU3IoZC5jb21tb25TdHJpbmdzLmtleXMuY2FuY2VsKSxmZSgyKSxTcihkLmNvbW1vblN0cmluZ3Mua2V5cy5hcHBseSkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxBZGU9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlSU9TZXJ2aWNlPWZ9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNl'@;
put 'LmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlzRGF5Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9Z2V0IGhhc1JhbmdlT3B0aW9ucygpe3JldHVybiEhdGhpcy5k'@;
put 'YXRlTmF2aWdhdGlvblNlcnZpY2U/LmlzUmFuZ2VQaWNrZXImJiEhdGhpcy5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGh9Z2V0IGhhc0FjdGlvbkJ1dHRvbnMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9uc31nZXQgZGF0ZVJhbmdlT3B0aW9ucygp'@;
put 'e3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0UmFuZ2VPcHRpb25zKCl9b25SYW5nZU9wdGlvblNlbGVjdChhKXtjb25zdCBkPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNvbnZlcnREYXRlVG9EYXlNb2RlbChhPy52YWx1ZVswXSksaD10aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj'@;
put 'ZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFsdWVbMV0pO3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh7c3RhcnREYXRlOmQsZW5kRGF0ZTpofSx7ZW1pdEV2ZW50OiF0aGlzLmhhc0FjdGlvbkJ1dHRvbnN9KSx0aGlzLmRhdGVOYXZpZ2F0'@;
put 'aW9uU2VydmljZS5tb3ZlVG9TcGVjaWZpY01vbnRoKGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh0byksJGUoVWIpLCRlKEVoKSwkZShsZykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12'@;
put 'aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxU'@;
put 'cigiZGF0ZXBpY2tlciIsITApKCJoYXMtcmFuZ2Utb3B0aW9uIixkLmhhc1JhbmdlT3B0aW9ucykoImhhcy1hY3Rpb24tYnV0dG9ucyIsZC5oYXNBY3Rpb25CdXR0b25zKSl9LGZlYXR1cmVzOlt1YShbX21dKV0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNhbGVuZGFyVmlldyIsIiJdLFs0'@;
put 'LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwiY2xyLWRhdGUtcmFuZ2UtcGlja2VyLW5hdiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwiaHJlZiIsImphdmFz'@;
put 'Y3JpcHQ6dm9pZCgwKSIsInRhYmluZGV4IiwiMCIsMywia2V5dXAuZW50ZXIiLCJjbGljayJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZndCgwLEtOZSw1LDIsIm5nLWNvbnRhaW5lciIsMSkoMSxlVmUsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGdjKSwy'@;
put 'JmEpe2NvbnN0IGg9ZGEoMik7TWUoIm5nSWYiLGQuaGFzUmFuZ2VPcHRpb25zKSgibmdJZkVsc2UiLGgpfX0sZGVwZW5kZW5jaWVzOltRcyxiYSxCMSxyRyxhRyxTZGUseGRlLEVkZSxUZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHF4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcscmUsdWUseWUsRWUsQmUsR2Upe2lmKHN1cGVyKEdlLEVlLHllLEJlKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy5lbGVtPWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Zix0aGlzLmRhdGVwaWNrZXJFbmFibGVk'@;
put 'U2VydmljZT12LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1NLHRoaXMuZGF0ZUlPU2VydmljZT1JLHRoaXMuY29tbW9uU3RyaW5ncz1HLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPXVlLHRoaXMuY29udHJvbENsYXNzU2VydmljZT15ZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5u'@;
put 'Z0NvbnRyb2xTZXJ2aWNlPUJlLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPUdlLHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gocmUuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKHN0PT57dGhpcy5mb2N1cz1zdH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5D'@;
put 'aGFuZ2Uuc3Vic2NyaWJlKCgpPT57TS5tYXJrQXNUb3VjaGVkKCl9KSksZil7Y29uc3Qgc3Q9ZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtmLmhhc0FjdGlvbkJ1dHRvbnM9Zi5pc1JhbmdlUGlja2VyPSJjbHItZGF0ZS1yYW5nZS1jb250YWluZXIiPT09c3R9fXNldCBz'@;
put 'aG93QWN0aW9uQnV0dG9ucyhhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYhYT9jb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgcmFuZ2UgcGlja2VyIHJlcXVpcmVzIGFjdGlvbiBidXR0b25zLCBbc2hvd0FjdGlvbkJ1dHRvbnNdIGNhbm5vdCBiZSB0'@;
put 'dXJuZWQgb2ZmLiIpOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnM9YX1zZXQgY2xyUG9zaXRpb24oYSl7YSYmVGRbYV0mJih0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbj1UZFthXSl9c2V0IHJhbmdlT3B0aW9ucyhhKXt0aGlzLmRhdGVJT1NlcnZp'@;
put 'Y2Uuc2V0UmFuZ2VPcHRpb25zKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0'@;
put 'aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWluXSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtaW5gIGF0'@;
put 'dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBtYXgoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRy'@;
put 'b2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWF4XSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVz'@;
put 'ZSB0aGUgbmF0aXZlIGBtYXhgIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBhY3Rpb25CdXR0b24oYSl7dGhpcy50b2dnbGVCdXR0b249YX1nZXQgcG9wb3ZlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9u'@;
put 'fWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufWdldCBpc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfWdldCBpc0lucHV0RGF0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbCYmdGhpcy5jb250cm9s'@;
put 'LmRpc2FibGVkfHx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZH1nZXQgaXNSYW5nZVBpY2tlcigpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyfW5nQWZ0ZXJWaWV3SW5pdCgpe3Ro'@;
put 'aXMuZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmluaXRpYWxpemVDYWxlbmRhcigpOih0aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3Vz'@;
put 'KCksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRhdGVDaGFuZ2VzKCkpfWdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRv'@;
put 'TG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhLnRvRGF0ZSgpKTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWwse1NFTEVDVEVEX0RBVEU6ZH0pfXJldHVybiB0aGlzLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsfWxpc3RlbkZvckRhdGVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoVDIodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkp'@;
put 'KS5zdWJzY3JpYmUoYT0+e2lmKHRoaXMuaXNFbmFibGVkKXtjb25zdCBkPXRoaXMuZ2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSksaD10aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsImFyaWEtbGFiZWwiLGQpLHRoaXMucmVuZGVyZXIu'@;
put 'c2V0QXR0cmlidXRlKGgsInRpdGxlIixkKX19KX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pbml0aWFsaXplQ2FsZW5kYXIoKX1kYXRlUmFuZ2VTdHJ1Y3R1cmFsQ2hlY2tzKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tl'@;
put 'ciYmKHRoaXMuY2xyRGF0ZUlucHV0JiZjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJTdGFydERhdGUgYW5kIGNsckVuZERhdGUgaW5wdXRzIiksdGhpcy5jbHJTdGFydERhdGVJbnB1dHx8Y29uc29sZS5lcnJvcigiRXJyb3Ih'@;
put 'IGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGlucHV0IiksdGhpcy5jbHJFbmREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsckVuZERhdGUgaW5wdXQiKSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKEVzKSwkZShRaSksJGUoc2MpLCRlKEVoKSwkZSh0TyksJGUoemIpLCRlKGxnKSwkZSh0byksJGUoVmIpLCRlKFViKSwkZShEZCksJGUoTXAsOCksJGUoaDEpLCRlKGtkKSl9LGMuXHUwMjc1Y21wPU5yKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdLFsiY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhcyhoLG5PLDUpLGFzKGgsQ2RlLDUpLGFzKGgsd2RlLDUpKSwyJmEpe2xldCBmO3lpKGY9Ymko'@;
put 'KSkmJihkLmNsckRhdGVJbnB1dD1mLmZpcnN0KSx5aShmPWJpKCkpJiYoZC5jbHJTdGFydERhdGVJbnB1dD1mLmZpcnN0KSx5aShmPWJpKCkpJiYoZC5jbHJFbmREYXRlSW5wdXQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJkZhKHRWZSw1KSwyJmEpe2xldCBo'@;
put 'O3lpKGg9YmkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNs'@;
put 'ci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1dHM6e3Nob3dBY3Rpb25CdXR0b25zOiJzaG93QWN0aW9uQnV0dG9ucyIsY2xyUG9zaXRpb246ImNsclBvc2l0aW9uIixyYW5nZU9wdGlvbnM6InJhbmdlT3B0aW9ucyIsbWluOiJtaW4iLG1heDoibWF4In0s'@;
put 'ZmVhdHVyZXM6W3VhKFtNaCxLeCxEZCxWYixoMSxsZyxFaCx0Tyx6YixVYixrZF0pLHlkKFthZ10pLENhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6clZlLGRlY2xzOjE0LHZhcnM6MTUsY29uc3RzOltbImFjdGlvbkJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5l'@;
put 'ciIsMywibmdDbGFzcyJdLFsiY2xyUG9wb3ZlckFuY2hvciIsIiIsMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsImNsYXNzIiwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0'@;
put 'aW9uIiwzLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsiY2RrVHJhcEZvY3VzIiwiIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxb'@;
put 'ImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVz'@;
put 'Iiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsxLCJkYXRlLXJhbmdlLXNlcGFyYXRvciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiXSxb'@;
put 'InN0YXR1cyIsImluZm8iLCJzaGFwZSIsImNhbGVuZGFyIl0sWyJjZGtUcmFwRm9jdXMiLCIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1j'@;
put 'aXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKG5WZSksV3IoMCksZ3QoMSxpVmUsMSwwLCJsYWJlbCIsMSksZGUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQs'@;
put 'ImRpdiIsNCksZ3QoNSxhVmUsNSwwLCJuZy1jb250YWluZXIiLDEpLFdyKDYsMSksZ3QoNyxzVmUsMywxLCJidXR0b24iLDUpKDgsb1ZlLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw2KSxoZSgpLGd0KDksbFZlLDEsMCwiY2RzLWljb24iLDcpKDEwLGNWZSwxLDAsImNkcy1p'@;
put 'Y29uIiw4KSxoZSgpLGd0KDExLHVWZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEyLGRWZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEzLGhWZSwxLDAsIm5nLWNvbnRlbnQiLDEpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxNZSgibmdDbGFzcyIs'@;
put 'ZC5jb250cm9sQ2xhc3MoKSksZmUoMiksVHIoImNsci1mb2N1cyIsZC5mb2N1cyksZmUoKSxNZSgibmdJZiIsZC5pc1JhbmdlUGlja2VyKSxmZSgyKSxNZSgibmdJZiIsZC5pc0VuYWJsZWQpLGZlKCksTWUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0'@;
put 'IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxN'@;
put 'ZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3Z1LGJhLEJiLEJ4LFV4LHp4LGVvLGNvLEFkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZEc9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRhdGVJT1NlcnZpY2U9YX12YWxpZGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpLGg9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVk'@;
put 'RGF0ZXMubWluRGF0ZS50b0RhdGUoKSxmPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERhdGUudG9EYXRlKCk7aWYoZCYmZDxoKXJldHVybnttaW46e21pbjpoLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX07aWYoZCYmZD5m'@;
put 'KXJldHVybnttYXg6e21heDpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX19cmV0dXJuIG51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKGxnLDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdLFsiIiwiY2xyU3RhcnREYXRlIiwiIl0sWyIiLCJjbHJFbmREYXRlIiwiIl1dLGZlYXR1cmVzOlt1YShbe3Byb3ZpZGU6dTAsdXNlRXhpc3Rpbmc6YyxtdWx0aTohMH1dKV19KSxjfSkoKSxPWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv'@;
put 'cigpe0VvLmFkZEljb25zKGJoLF9oLENiLCRPZSxLT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxRTCxXeCxGMixaeCxUbyxudSxtZGVdfSksY30p'@;
put 'KCk7bmV3IFN0KCJDbHJGaWxlTWVzc2FnZXNUZW1wbGF0ZUNvbnRleHQiKTtsZXQgRlplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyhYT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5'@;
put 'cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxUbyxudSxudV19KSxjfSkoKSxrZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIodixkLGEsaCksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9dix0aGlzLmZvY3VzPSExLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKE09PnRoaXMuZm9jdXM9TSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShEZCksJGUoTXAsOCksJGUoaDEpLCRlKFZiKSwkZShrZCkpfSxjLlx1MDI3NWNtcD1O'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLERkZSw1KSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLmlucHV0PWYuZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkiLGQuaW5wdXQucmVhZG9ubHkp'@;
put 'KCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt1YShbVmIsa2QsaDEsTWgsRGRdKSxDYV0sbmdDb250ZW50U2VsZWN0b3JzOnZWZSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNs'@;
put 'ci1udW1iZXItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbMSwiY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyIs'@;
put 'InNpemUiLCJzbSJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXNlcGFyYXRvciJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsInNtIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIs'@;
put 'InRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2Vy'@;
put 'IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh'@;
put 'KG1WZSksV3IoMCksZ3QoMSx5VmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImRpdiIsMyksV3IoNSwxKSxkZSg2LCJkaXYiLDQpKDcsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmlucHV0LnN0ZXBEb3duKCl9KSxXdCg4LCJj'@;
put 'ZHMtaWNvbiIsNiksaGUoKSxXdCg5LCJkaXYiLDcpLGRlKDEwLCJidXR0b24iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5pbnB1dC5zdGVwVXAoKX0pLFd0KDExLCJjZHMtaWNvbiIsOCksaGUoKSgpKCksZ3QoMTIsYlZlLDEsMCwiY2RzLWljb24iLDkpKDEzLF9WZSwxLDAs'@;
put 'ImNkcy1pY29uIiwxMCksaGUoKSxndCgxNCx3VmUsMSwwLCJuZy1jb250ZW50IiwwKSgxNSxDVmUsMSwwLCJuZy1jb250ZW50IiwwKSgxNixTVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5n'@;
put 'Q2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLFRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKDMpLE1lKCJkaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSxmZSgzKSxNZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJv'@;
put 'bC5kaXNhYmxlZCksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVu'@;
put 'ZGVuY2llczpbdnUsYmEsZW8sY29dLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLERkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe2lmKHN1cGVyKGQsa2RlLGgsZix2LE0pLHRoaXMuZm9jdXNTZXJ2aWNlPWEsdGhpcy5jb250cm9sPWYsdGhpcy5l'@;
put 'bD1NLHRoaXMuaW5kZXg9MSwhYSl0aHJvdyBuZXcgRXJyb3IoImNsck51bWJlcklucHV0IHJlcXVpcmVzIGJlaW5nIHdyYXBwZWQgaW4gPGNsci1udW1iZXItaW5wdXQtY29udGFpbmVyPiIpfWdldCByZWFkb25seSgpe3JldHVybiBudWxsIT09dGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEF0'@;
put 'dHJpYnV0ZSgicmVhZG9ubHkiKX10cmlnZ2VyRm9jdXMoKXshdGhpcy5yZWFkb25seSYmdGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPSEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3RoaXMucmVhZG9ubHl8fChzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRo'@;
put 'aXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMSkpfXN0ZXBVcCgpe3RoaXMuZWwubmF0aXZlRWxlbWVudC5zdGVwVXAoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxl'@;
put 'OiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX1zdGVwRG93bigpe3RoaXMuZWwubmF0aXZlRWxlbWVudC5zdGVwRG93bigpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiaW5wdXQiLHtidWJibGVzOiEwLGNhbmNlbGFi'@;
put 'bGU6ITB9KSksdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShWYiw4KSwkZShUcyksJGUoRG8pLCRlKHUxLDEwKSwkZShFcyksJGUoUWkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiY2xyTnVtYmVySW5wdXQiLCIiXV0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyRm9jdXMoKX0pKCJibHVyIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEmJlRyKCJjbHItaW5wdXQiLCEwKSgiY2xyLW51bWJlci1pbnB1dCIsITApfSxmZWF0dXJlczpbQ2FdfSksY30pKCksSFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyhiaCxfaCxxT2UsSk9l'@;
put 'KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsa2MsVG8sbnUsbnVdfSksY30pKCk7bmV3IFN0KHZvaWQgMCk7bGV0IEJaZT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKCl7RW8uYWRkSWNvbnMoUU9lLGVQZSxiaCxfaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLGtjLFRvLG51LG51XX0pLGN9KSgpLGhH'@;
put 'PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBl'@;
put 'ciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLGNvLDcpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1yYWRpby13cmFwcGVyIiwh'@;
put 'MCl9LGZlYXR1cmVzOlt1YShbTWhdKV0sbmdDb250ZW50U2VsZWN0b3JzOnhWZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoTVZlKSxXcigwKSxXcigxLDEpLGd0KDIsRVZlLDEsMCwibGFiZWwiLDApKSwyJmEmJihm'@;
put 'ZSgyKSxNZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltiYSxjb10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZkc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxoRyxkLGgsZix2KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoVHMpLCRlKERvKSwkZSh1MSwxMCksJGUoRXMpLCRlKFFpKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltDYV19KSxjfSkoKSxqWmU9KCgpPT57Y2xhc3MgYyBleHRl'@;
put 'bmRzIHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITEsdGhpcy5f'@;
put 'Z2VuZXJhdGVkSWQ9X3UoKX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpLHRoaXMuc2V0'@;
put 'QXJpYUxhYmVsbGVkQnkoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJyYWRpb2dyb3VwIjpudWxsfXNldEFyaWFMYWJlbGxlZEJ5KCl7Y29uc3QgYT10aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpO2E/dGhpcy5h'@;
put 'cmlhTGFiZWxsZWRCeT10aGlzLnJhZGlvcy5sZW5ndGg/YTpudWxsOih0aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsdGhpcy5fZ2VuZXJhdGVkSWQpLHRoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP3RoaXMuX2dlbmVyYXRlZElk'@;
put 'Om51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShNcCw4KSwkZShEZCksJGUoaDEpLCRlKGtkKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yYWRpby1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVu'@;
put 'Y3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFzKGgsY28sNyxRaSksYXMoaCxmRyw1KSksMiZhKXtsZXQgZjt5aShmPWJpKCkpJiYoZC5ncm91cExhYmVsPWYuZmlyc3QpLHlpKGY9YmkoKSkmJihkLnJhZGlvcz1mKX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYo'@;
put 'aHIoInJvbGUiLGQucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsZC5hcmlhTGFiZWxsZWRCeSksVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRH'@;
put 'cmlkKCkpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSJ9LGZlYXR1cmVzOlt1YShbaDEsa2QsRGQscDddKSxDYV0sbmdDb250ZW50U2VsZWN0b3JzOkFWZSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFz'@;
put 'cyJdLFsiY2xhc3MiLCJjbHItc3VidGV4dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1'@;
put 'ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJh'@;
put 'cmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoVFZl'@;
put 'KSxXcigwKSxndCgxLGtWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpLFdyKDMsMSksZ3QoNCxEVmUsMiwwLCJkaXYiLDIpKDUsUFZlLDUsNCwiZGl2IiwyKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksVHIoImNsci1jb250cm9s'@;
put 'LWlubGluZSIsZC5jbHJJbmxpbmUpLE1lKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZHx8ZC5zaG93SW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W3Z1LGJhLGNvLGVvXSxlbmNhcHN1bGF0'@;
put 'aW9uOjJ9KSxjfSkoKSx6WmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKGJoLF9oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpb'@;
put 'TGEsbnUsV3gsVG8sbnVdfSksY30pKCksVVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyhiaCxfaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo'@;
put 'e2ltcG9ydHM6W0xhLG51LFd4LFRvLG51XX0pLGN9KSgpLFpiPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZp'@;
put 'Y2U9aCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMubXVsdGk9ITF9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKGE9PnthJiYodGhpcy5tdWx0aT1hLnZhbHVlQWNjZXNzb3Ig'@;
put 'aW5zdGFuY2VvZiB3eCx0aGlzLmNvbnRyb2w9YSl9KSl9d3JhcHBlckNsYXNzKCl7cmV0dXJuIHRoaXMubXVsdGk/ImNsci1tdWx0aXNlbGVjdC13cmFwcGVyIjoiY2xyLXNlbGVjdC13cmFwcGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUo'@;
put 'TXAsOCksJGUoRGQpLCRlKGgxKSwkZShrZCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2VsZWN0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLHd4LDUpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQu'@;
put 'bXVsdGlwbGU9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJv'@;
put 'dyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdWEoW2tkLGgxLE1oLERkXSksQ2FdLG5nQ29udGVudFNlbGVjdG9yczpIVmUsZGVjbHM6MTAsdmFyczo4LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiXSxbImNs'@;
put 'YXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi'@;
put 'c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs'@;
put 'InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoRlZlKSxXcigwKSxndCgxLE5WZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksV3IoNCwxKSxndCg1LFZWZSwx'@;
put 'LDAsImNkcy1pY29uIiwzKSg2LEJWZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLGd0KDcsalZlLDEsMCwibmctY29udGVudCIsMCkoOCx6VmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LFVWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZk'@;
put 'LmFkZEdyaWQoKSksZmUoKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoKSxNZSgibmdDbGFzcyIsZC53cmFwcGVyQ2xhc3MoKSksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dI'@;
put 'ZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbdnUsYmEsZW8sY29dLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEU3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LHYpe3N1cGVyKGEsWmIsZCxoLGYsdiksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShUcyksJGUoRG8pLCRlKHUxLDEwKSwkZShFcyksJGUoUWkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi'@;
put 'Y2xyU2VsZWN0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXNlbGVjdCIsITApfSxmZWF0dXJlczpbQ2FdfSksY30pKCksWlplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyhiaCxfaCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLGtjLFRvLG51LG51XX0pLGN9KSgpLElkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9'@;
put 'PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVVvKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZU'@;
put 'cigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt1YShba2QsaDEsTWgsRGRdKSxDYV0sbmdDb250ZW50U2VsZWN0'@;
put 'b3JzOldWZSxkZWNsczoxMCx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXRleHRhcmVhLXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNs'@;
put 'ZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJl'@;
put 'eGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29u'@;
put 'Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoWlZlKSxXcigwKSxndCgxLFlWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksV3IoNCwxKSxndCg1LEdWZSwxLDAsImNkcy1pY29uIiwzKSg2LCRWZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLGd0KDcs'@;
put 'S1ZlLDEsMCwibmctY29udGVudCIsMCkoOCxYVmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LHFWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUo'@;
put 'MyksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbdnUsYmEs'@;
put 'ZW8sY29dLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHJPPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsSWRlLGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko'@;
put 'JGUoVHMpLCRlKERvKSwkZSh1MSwxMCksJGUoRXMpLCRlKFFpKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRleHRhcmVhIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXRleHRhcmVhIiwhMCl9LGZl'@;
put 'YXR1cmVzOltDYV19KSxjfSkoKSxXWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKGJoLF9oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1w'@;
put 'b3J0czpbTGEsa2MsVG8sbnUsbnVdfSksY30pKCksUmRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLG51LCRVZSxRVWUsT1pl'@;
put 'LEZaZSxkZGUsQlplLHpaZSxaWmUsV1plLFVaZSxlWmUsSFplXX0pLGN9KSgpLExkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltM'@;
put 'YV19KSxjfSkoKSxZWmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIElZe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyxyZSl7c3VwZXIoYSxkLGgsZix2LE0sSSxHLHJlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoUWkpLCRlKERZLDgpLCRl'@;
put 'KG1vLDgpLCRlKEdhKSwkZShUcyksJGUoa1ksOCksJGUoZG0pLCRlKFZMKSwkZSh4bykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGZlYXR1cmVzOltDYV19KSxjfSkoKSxHWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCksJFplPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7'@;
put 'dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhXX0pLGN9KSgpO2NsYXNzIGlPe31sZXQgSng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBHbn1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09i'@;
put 'c2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRoaXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHdtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBHbix0aGlzLnByZXZl'@;
put 'bnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IEdufWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9'@;
put 'YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2Vy'@;
put 'LmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3Qp'@;
put 'fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5n'@;
put 'ZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNo'@;
put 'YW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRo'@;
put 'aXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVybiB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4o'@;
put 'YSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMuY3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihKeCkpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGNnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0'@;
put 'ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgR24sdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSly'@;
put 'ZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQ'@;
put 'YWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBhTyhhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1YnNjcmliZSgpO2NvbnN0IHY9dGhpcy5fYWxsLmZpbmRJbmRleChNPT5NLmZpbHRlcj09PWEpO3Y+PTAmJnRoaXMuX2FsbC5zcGxpY2UodiwxKSxhLmlz'@;
put 'QWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChmKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9'@;
put 'b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2Uu'@;
put 'bmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3Iod20pLENyKEp4KSl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3Mg'@;
put 'YU97Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgc089KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9mIGFPP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdp'@;
put 'c3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoY2cpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpO2NsYXNzIE9kZXtjb25z'@;
put 'dHJ1Y3RvcihsKXt0aGlzLnV0aWxzPWx9a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKDA9PT1sLnkpcmV0dXJuIGE7YS55PWwueS0xO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNTaW5n'@;
put 'bGVDZWxsRXhwYW5kZWRSb3coYS55KSYmIWQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PTA6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGQ/YS55PWEueS0xOmEueD1hLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0'@;
put 'IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZihsLnk+PSh0aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjApKXJldHVybiBhO2NvbnN0IGg9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGEueT1sLnkrMSwhaCYmdGhpcy51dGls'@;
put 'cy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleUxlZnQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29v'@;
put 'cmRzKGwpO3JldHVybiAwPT09bC54fHwoYS54PWwueC0xKSxhfWtleVJpZ2h0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVy'@;
put 'biBhLng9bC54PGQ/YS54KzE6YS54LGF9a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGg9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3JldHVybiBkLng9aD90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDAp'@;
put 'Lmxlbmd0aC0xOjAsYSYmKGQueT1oLHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGQueSkmJihkLng9dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhkLnkpLmxlbmd0aC0xKSksZH1rZXlIb21lKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiBk'@;
put 'Lng9MCxhJiYoZC55PTApLGR9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGls'@;
put 'cy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6dGhpcy51dGlscy5pc1Jvd1JlcGxh'@;
put 'Y2VkKGEueSkmJihhLnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxk'@;
put 'PXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk9YS55LTE6'@;
put 'dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP2EueD0wOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBs'@;
put 'YWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX19Y2xhc3MgUGRlIGV4dGVuZHMgT2Rle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2Nv'@;
put 'bnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lmKGEueT1sLnktMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSl0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiZhLnk+MCYmKGEueT1hLnktMSk7ZWxzZSBzd2l0Y2godGhp'@;
put 'cy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSkmJihhLnk9YS55LTEpLCEwKXtjYXNlIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk6YS54PTA7YnJlYWs7Y2FzZSExPT09dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KTphLng9bC54O2JyZWFrO2RlZmF1bHQ6YS54PXRoaXMudXRpbHMu'@;
put 'YWN0aW9uQ2VsbENvdW50KGEueSl9cmV0dXJuIGF9a2V5RG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0dXJuIGwueT49ZHx8KGEueT1sLnkrMSx0aGlzLnV0aWxz'@;
put 'LmlzQWN0aW9uQ2VsbChsKT9hLnk9YS55PGQ/YS55KzE6YS55Oih0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSksYS54PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/MDp0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSksYX1rZXlMZWZ0KGwpe2Nv'@;
put 'bnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KDAhPT1sLng/YS54PWwueC0xOnRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpfHwoYS55PWwueS0x'@;
put 'LGEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpLTEpLGEpOnN1cGVyLmtleUxlZnQobCl9a2V5UmlnaHQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc1Jv'@;
put 'd1JlcGxhY2VkKGwueSkpcmV0dXJuIHN1cGVyLmtleVJpZ2h0KGwpO2NvbnN0IGQ9dGhpcy51dGlscy5yb3dzPy5sZW5ndGgtMT90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGwueD49ZHx8KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpJiZsLng9PT10'@;
put 'aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLngpLTEmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KT8oYS55PWwueSsxLGEueD0wKTphLng9bC54KzEpLGF9a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5l'@;
put 'eHRDZWxsQ29vcmRzKGwpO3JldHVybiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSl8fGE/c3VwZXIua2V5RW5kKGwsYSk6KGQueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoLTEsZCl9a2V5SG9tZShsLGEp'@;
put 'e2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KGQueD0wLGQueT1sLnktMSxhJiYoZC55PTApLGQpOnN1cGVyLmtleUhvbWUobCxhKX1rZXlQ'@;
put 'YWdlVXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYo'@;
put 'YS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS55PWEueSsxLGEueD0wKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJih0aGlzLnV0aWxzLmlzRGV0'@;
put 'YWlsc1JvdyhhLnkpfHwoYS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PTApLGF9a2V5UGFnZURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5y'@;
put 'b3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMu'@;
put 'aXNSb3dSZXBsYWNlZChhLnkpP2EueTxkJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnkrMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChh'@;
put 'LnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9MCksYX19Y2xhc3MgS1plIGV4dGVuZHMgUGRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lm'@;
put 'KGEueT1sLnktMSx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSkpcmV0dXJuIHN1cGVyLmtleVVwKGwpO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PWEueS0xOnRoaXMudXRp'@;
put 'bHMuaXNSb3dSZXBsYWNlZChhLnkpPyhhLnk9YS55LTEsdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkp'@;
put 'P2EueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTohZCYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENv'@;
put 'b3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPWQ/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBsLnk+PWQ/YTooYS55PWwueSsxLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9z'@;
put 'dXBlci5rZXlEb3duKGwpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/YS55PWEueTxkP2EueSsxOmEueS0xOmEueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoPmg/bC54LXRoaXMudXRpbHMuYWN0aW9uQ2Vs'@;
put 'bENvdW50KGwueSk6bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSksYSkpfWtleUxlZnQobCl7cmV0dXJuIHN1cGVyLmtleUxlZnQobCl9a2V5UmlnaHQobCl7cmV0dXJuIHN1cGVyLmtleVJpZ2h0KGwpfWtleUVuZChsLGEpe3JldHVybiBzdXBlci5rZXlFbmQobCxhKX1rZXlI'@;
put 'b21lKGwsYSl7cmV0dXJuIHN1cGVyLmtleUhvbWUobCxhKX1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzU2luZ2xl'@;
put 'Q2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5UGFnZVVwKGwpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyhh'@;
put 'LnkpfHwoYS55PWEueSsxLGEueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRp'@;
put 'bHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGEpfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3Ro'@;
put 'LTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5UGFnZURvd24obCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRh'@;
put 'aWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk8ZCYmKGEueT1hLnkrMSxhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxz'@;
put 'Um93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhKX19Y2xhc3MgWFpl'@;
put 'e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3N0PWwsdGhpcy5jb25maWc9YX1nZXQgZ3JpZCgpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3JpZCl9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmln'@;
put 'LmtleUdyaWRSb3dzKX1nZXQgY2VsbHMoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9Z2V0IGN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKXtjb25zdCBsPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGg9'@;
put 'PiIwIj09PWguZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsLGE9bD9sLmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZFJvd3MpOm51bGw7cmV0dXJue3g6YSYmbD9BcnJheS5mcm9tKGEucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGwp'@;
put 'OjAseTphJiZsJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoYSk6MH19Z2V0IGl0ZW1zUGVyUGFnZSgpe3JldHVybiBNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIikuY2xpZW50SGVpZ2h0L3RoaXMucm93c1swXS5jbGllbnRI'@;
put 'ZWlnaHQpLTF8fDB9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGwpe2NvbnN0IGE9dGhpcy5jdXJyZW50Q2VsbENvb3JkaW5hdGVzLGQ9dGhpcy5nZXROYXZTdHJhdGVneShhKTtzd2l0Y2gobC5rZXkpe2Nhc2UgcGEuQXJyb3dVcDpyZXR1cm4gZC5rZXlVcChhKTtjYXNlIHBhLkFycm93RG93bjpy'@;
put 'ZXR1cm4gZC5rZXlEb3duKGEpO2Nhc2UicnRsIj09PXRoaXMuaG9zdC5kaXI/cGEuQXJyb3dSaWdodDpwYS5BcnJvd0xlZnQ6cmV0dXJuIGQua2V5TGVmdChhKTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP3BhLkFycm93TGVmdDpwYS5BcnJvd1JpZ2h0OnJldHVybiBkLmtleVJpZ2h0KGEp'@;
put 'O2Nhc2UgcGEuSG9tZTpyZXR1cm4gZC5rZXlIb21lKGEsbC5jdHJsS2V5KTtjYXNlIHBhLkVuZDpyZXR1cm4gZC5rZXlFbmQoYSxsLmN0cmxLZXkpO2Nhc2UgcGEuUGFnZVVwOnJldHVybiBkLmtleVBhZ2VVcChhKTtjYXNlIHBhLlBhZ2VEb3duOnJldHVybiBkLmtleVBhZ2VEb3duKGEpO2Rl'@;
put 'ZmF1bHQ6cmV0dXJuIGF9fWdldENlbGxzRm9yUm93KGwpe3JldHVybiB0aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfWlzRXhwYW5kZWRSb3cobCl7Y29uc3QgYT10aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvdy1k'@;
put 'ZXRhaWwiKTtyZXR1cm4hIWEmJiJub25lIiE9PWEuc3R5bGUuZGlzcGxheX1pc0RldGFpbHNSb3cobCl7cmV0dXJuIHRoaXMucm93c1tsXS5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLXJvdy1kZXRhaWwiKX1pc1Jvd1JlcGxhY2VkKGwpe3JldHVybiEhdGhpcy5yb3dzW2xdLmNsb3Nl'@;
put 'c3QoImNsci1kZy1yb3cuZGF0YWdyaWQtcm93LXJlcGxhY2VkIil9aXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobCl7cmV0dXJuIDE9PT10aGlzLnJvd3NbbF0/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKS5sZW5ndGh9YWN0aW9uQ2VsbENvdW50KGwpe3JldHVy'@;
put 'biB0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShsKS5sZW5ndGh9YWN0aW9uQ2VsbHNBc0FycmF5KGwpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucm93c1tsXS5xdWVyeVNlbGVjdG9yQWxsKCIuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbCwgLmRhdGFncmlkLXJvdy1zdGlja3kg'@;
put 'LmRhdGFncmlkLWNvbHVtbiIpKX1pc0FjdGlvbkNlbGwobCl7cmV0dXJuISF0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShsLnkpW2wueF19Y3JlYXRlTmV4dENlbGxDb29yZHMobCl7cmV0dXJue3g6bC54LHk6bC55fX1nZXROYXZTdHJhdGVneShsKXtzd2l0Y2goITApe2Nhc2UgdGhpcy5pc1Np'@;
put 'bmdsZUNlbGxFeHBhbmRlZFJvdyhsLnkpOnJldHVybiBuZXcgUGRlKHRoaXMpO2Nhc2UgdGhpcy5pc0RldGFpbHNSb3cobC55KTpjYXNlIHRoaXMuaXNFeHBhbmRlZFJvdyhsLnkpOnJldHVybiBuZXcgS1plKHRoaXMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBPZGUodGhpcyl9fX1jb25zdCBGZGU9'@;
put 'WyJhW2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCJbY29udGVudGVkaXRh'@;
put 'YmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXTtmdW5jdGlvbiBKWmUoYyl7Y29uc3QgbD1GZGUuam9pbigiLCIpO3JldHVybiBjLm1hdGNoZXMobCl9bGV0IG9PPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5za2lwSXRlbUZv'@;
put 'Y3VzPSExLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITEsdGhpcy5kZXN0cm95JD1uZXcgR24sdGhpcy5fYWN0aXZlQ2VsbD1udWxsLHRoaXMuY29uZmlnPXtrZXlHcmlkUm93czonW3JvbGU9cm93XTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyKTpub3QoW3N0eWxlKj0iZGlzcGxheTogbm9uZSJd'@;
put 'KScsa2V5R3JpZENlbGxzOiJbcm9sZT1ncmlkY2VsbF06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCBbcm9sZT1jb2x1bW5oZWFkZXJdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFj'@;
put 'ZWhvbGRlci1jb250ZW50KSwgLmRhdGFncmlkLWRldGFpbC1jYXJldCIsa2V5R3JpZDoiW3JvbGU9Z3JpZF0ifX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1hZGRMaXN0ZW5lcnMoKXt0aGlzLmxpc3RlbmVyc0FkZGVkfHwodGhp'@;
put 'cy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57eGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJtb3VzZWRvd24iKS5waXBlKEgwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKDE9PT1hLmJ1dHRvbnMmJiFhLmN0cmxLZXkpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5jZWxs'@;
put 'cz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQoaD0+aD09PWEudGFyZ2V0fHxoPT09YS50YXJnZXQuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKTpudWxsO2QmJnRoaXMuc2V0QWN0aXZlQ2VsbChkLHtrZWVwRm9jdXM6SlplKGEudGFyZ2V0KX0pfX0p'@;
put 'LHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwid2hlZWwiKS5waXBlKEgwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwiZm9jdXNvdXQiKS5waXBlKHVtKDApLEgwKHRoaXMuZGVzdHJveSQp'@;
put 'KS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdlV0aWxzLmdyaWQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHRoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSkseGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJrZXlkb3duIikucGlwZShIMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2Ny'@;
put 'aWJlKGE9PntpZigoIWEudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8YS5rZXkhPT1wYS5BcnJvd0xlZnQmJmEua2V5IT09cGEuQXJyb3dSaWdodCkmJihhLmtleT09PXBhLkFycm93VXB8fGEua2V5PT09cGEuQXJyb3dEb3dufHxhLmtleT09PXBhLkFycm93TGVm'@;
put 'dHx8YS5rZXk9PT1wYS5BcnJvd1JpZ2h0fHxhLmtleT09PXBhLkVuZHx8YS5rZXk9PT1wYS5Ib21lfHxhLmtleT09PXBhLlBhZ2VVcHx8YS5rZXk9PT1wYS5QYWdlRG93bikpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5nZXROZXh0SXRlbUNvb3JkaW5hdGUoYSksaD10aGlzLmtleU5hdlV0'@;
put 'aWxzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmdldENlbGxzRm9yUm93KGQueSkpW2QueF06bnVsbDtoJiZ0aGlzLnNldEFjdGl2ZUNlbGwoaCksYS5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRlZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQoYSl7dGhp'@;
put 'cy5rZXlOYXZVdGlscz1uZXcgWFplKGEsdGhpcy5jb25maWcpLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdyaWQoKXt0aGlzLmtleU5hdlV0aWxzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlz'@;
put 'LmtleU5hdlV0aWxzLmNlbGxzP3RoaXMua2V5TmF2VXRpbHMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9cmVtb3ZlQWN0aXZlQ2VsbCgpe3RoaXMuX2FjdGl2ZUNlbGw9bnVsbH1nZXRBY3RpdmVDZWxsKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUNlbGx9c2V0'@;
put 'QWN0aXZlQ2VsbChhLHtrZWVwRm9jdXM6ZH09e2tlZXBGb2N1czohMX0pe2NvbnN0IGg9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQoZj0+IjAiPT09Zi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7aWYoaCYmaC5z'@;
put 'ZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fYWN0aXZlQ2VsbD1hLCF0aGlzLnNraXBJdGVtRm9jdXMmJiFkKXtsZXQgZjtpZigiY29sdW1uaGVhZGVyIj09PWEuZ2V0QXR0cmlidXRlKCJyb2xlIikpZj1hO2Vsc2V7Y29u'@;
put 'c3Qgdj1mdW5jdGlvbiBxWmUoYyl7Y29uc3QgYT1bLi4uRmRlLCdbdGFiaW5kZXg9IjAiXTpub3QoW2Rpc2FibGVkXSknXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGEpKX0oYSk7Zj12Lmxlbmd0aD92WzBdOmF9Zi5mb2N1cygpfX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IoR2EpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxReD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgc097Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEpLHRo'@;
put 'aXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5rZXlOYXZpZ2F0aW9uPU0sdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9'@;
put 'X3UoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6ZDEuVkVSVElDQUwsc2lkZTpPMi5BRlRFUixhbmNob3I6T28uRU5ELGNvbnRlbnQ6T28uRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKEk9Pnt0aGlzLm9wZW49'@;
put 'SSx0aGlzLmFyaWFFeHBhbmRlZD1JfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmZWwodGhpcy5wbGF0Zm9ybUlk'@;
put 'KSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMua2V5TmF2aWdhdGlvbiYmKHRoaXMua2V5TmF2aWdhdGlvbi5za2lwSXRlbUZvY3VzPWEpLHRoaXMuX29wZW49YSl9c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJu'@;
put 'ISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJz'@;
put 'Y3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xv'@;
put 'Y2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpKCRlKGNnKSwkZSh0byksJGUoc2MpLCRlKGlzKSwkZShRaSksJGUob08sOCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmRmEoSlZlLDUsUWkpLDImYSl7'@;
put 'bGV0IGg7eWkoaD1iaSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOltWbi5Ob25lLCJjbHJEZ0ZpbHRlck9wZW4iLCJvcGVuIl0sY3VzdG9tRmlsdGVyOltWbi5Ob25lLCJjbHJEZ0ZpbHRlciIsImN1c3RvbUZpbHRlciJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJE'@;
put 'Z0ZpbHRlck9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdWEoW3twcm92aWRlOmlPLHVzZUV4aXN0aW5nOmN9XSksQ2EsYmxdLG5nQ29udGVudFNlbGVjdG9yczp5cyxkZWNsczo0LHZhcnM6MTMsY29uc3RzOltbImFuY2hvciIsIiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii'@;
put 'LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJzb2xpZCIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1maWx0ZXIiLCJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwzLCJpZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQi'@;
put 'LCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1maWx0ZXIiLDMsImlkIl0sWzEsImRh'@;
put 'dGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwxLCJjbG9zZSJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGRlKDAsImJ1dHRvbiIsMSwwKSxX'@;
put 'dCgyLCJjZHMtaWNvbiIsMiksaGUoKSxndCgzLFFWZSw1LDMsImRpdiIsMykpLDImYSYmKFRyKCJkYXRhZ3JpZC1maWx0ZXItb3BlbiIsZC5vcGVuKSgiZGF0YWdyaWQtZmlsdGVyZWQiLGQuYWN0aXZlKSxocigiYXJpYS1sYWJlbCIsZC50b2dnbGVCdXR0b25BcmlhTGFiZWwpKCJhcmlhLWV4'@;
put 'cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSxmZSgyKSxocigic3RhdHVzIixkLmFjdGl2ZT8iaW5mbyI6bnVsbCkoInNoYXBlIixkLmFjdGl2ZT8iZmlsdGVyLWdyaWQtY2lyY2xlIjoiZmlsdGVyLWdyaWQiKSxmZSgpLE1lKCJjbHJQb3BvdmVy'@;
put 'Q29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltCYixlbyxCeCxVMWUs'@;
put 'VXgsenhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIHBHe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJvcD1sLGwuaW5kZXhPZigiLiIpPj0wJiYodGhpcy5zcGxpdFByb3A9bC5zcGxpdCgiLiIpKX1nZXRQcm9wVmFsdWUobCl7aWYodGhpcy5zcGxpdFByb3Ape2xldCBhPWw7Zm9yKGNv'@;
put 'bnN0IGQgb2YgdGhpcy5zcGxpdFByb3Ape2lmKG51bGw9PT1hfHx0eXBlb2YgYT4idSJ8fHR5cGVvZiBhW2RdPiJ1IilyZXR1cm47YT1hW2RdfXJldHVybiBhfXJldHVybiBsW3RoaXMucHJvcF19fWNsYXNzIGxPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5leGFjdD1h'@;
put 'LHRoaXMubmVzdGVkUHJvcD1uZXcgcEcobCl9YWNjZXB0cyhsLGEsZCl7Y29uc3QgaD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodm9pZCAwPT09aHx8bnVsbCE9PWEmJigibnVtYmVyIiE9dHlwZW9mIGh8fGg8YSl8fG51bGwhPT1kJiYoIm51bWJlciIhPXR5cGVv'@;
put 'ZiBofHxoPmQpKX19Y2xhc3MgVDd7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IEduLHRoaXMuX2xvdz1udWxsLHRoaXMuX2hpZ2g9bnVsbH1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB2YWx1ZSgp'@;
put 'e3JldHVyblt0aGlzLl9sb3csdGhpcy5faGlnaF19c2V0IHZhbHVlKGwpe2NvbnN0IGE9bFswXSxkPWxbMV07KGEhPT10aGlzLl9sb3d8fGQhPT10aGlzLl9oaWdoKSYmKHRoaXMuX2xvdz1hLHRoaXMuX2hpZ2g9ZCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkp'@;
put 'fWdldCBsb3coKXtyZXR1cm4gdGhpcy5fbG93fXNldCBsb3cobCl7bCE9PXRoaXMuX2xvdyYmKHRoaXMuX2xvdz1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4gdGhpcy5faGlnaH1zZXQgaGlnaChsKXtsIT09dGhpcy5faGln'@;
put 'aCYmKHRoaXMuX2hpZ2g9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgbE8/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCxsb3c6dGhpcy5fbG93LGhpZ2g6dGhpcy5faGln'@;
put 'aH06dGhpc31pc0FjdGl2ZSgpe3JldHVybiBudWxsIT09dGhpcy5fbG93fHxudWxsIT09dGhpcy5oaWdofWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMuX2xvdyx0aGlzLl9oaWdoKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBUNyYmKGwuZmls'@;
put 'dGVyRm4gaW5zdGFuY2VvZiBsTz90aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgbE8mJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC5sb3c9PT10aGlzLl9sb3cmJmwuaGlnaD09PXRoaXMuX2hpZ2g6bD09PXRoaXMpfX1sZXQgSGRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5k'@;
put 'cyBzT3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT12LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub3Blbj0hMSx0aGlz'@;
put 'LnN1YnNjcmlwdGlvbnM9W119Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJkFycmF5LmlzQXJyYXkoYSk/YSYmKGFbMF0hPT10aGlzLmZpbHRlci5sb3d8fGFbMV0hPT10aGlzLmZpbHRlci5oaWdo'@;
put 'KSYmKHRoaXMuZmlsdGVyLmxvdz0ibnVtYmVyIj09dHlwZW9mIGFbMF0/YVswXTpudWxsLHRoaXMuZmlsdGVyLmhpZ2g9Im51bWJlciI9PXR5cGVvZiBhWzFdP2FbMV06bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlcz1hfXNldCBjdXN0'@;
put 'b21OdW1lcmljRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiBhTz9hOm5ldyBUNyhhKSksdGhpcy5pbml0RmlsdGVyVmFsdWVzJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZXMsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlcyl9Z2V0IG1heFBsYWNlaG9s'@;
put 'ZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXhQbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWF4VmFsdWV9Z2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5taW5QbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWV9Z2V0IGZy'@;
put 'b21MYWJlbFZhbHVlKCl7cmV0dXJuIHRoaXMuZnJvbUxhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5mcm9tTGFiZWx9Z2V0IHRvTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLnRvTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnRvTGFiZWx9Z2V0IGxvdygpe3JldHVybiJudW1i'@;
put 'ZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIubG93JiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5sb3cpP3RoaXMuZmlsdGVyLmxvdzpudWxsfXNldCBsb3coYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIubG93Pyh0aGlzLmZpbHRlci5sb3c9YSx0aGlzLmZpbHRlclZhbHVlQ2hh'@;
put 'bmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmxvdz1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9Z2V0IGhpZ2goKXty'@;
put 'ZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmhpZ2gmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmhpZ2gpP3RoaXMuZmlsdGVyLmhpZ2g6bnVsbH1zZXQgaGlnaChhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5oaWdoPyh0aGlzLmZpbHRlci5oaWdoPWEsdGhp'@;
put 'cy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5oaWdoPW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGln'@;
put 'aF0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFt'@;
put 'ZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShjZyksJGUocG0pLCRlKHRvKSwkZShzYyksJGUoR2EpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKEZhKGVC'@;
put 'ZSw1KSxGYShReCw1KSksMiZhKXtsZXQgaDt5aShoPWJpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSx5aShoPWJpKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e21pblBsYWNlaG9sZGVyOltWbi5Ob25lLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsIm1pblBsYWNl'@;
put 'aG9sZGVyIl0sbWF4UGxhY2Vob2xkZXI6W1ZuLk5vbmUsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSxmcm9tTGFiZWw6W1ZuLk5vbmUsImNsckZpbHRlckZyb21MYWJlbCIsImZyb21MYWJlbCJdLHRvTGFiZWw6W1ZuLk5vbmUsImNsckZpbHRlclRvTGFiZWwi'@;
put 'LCJ0b0xhYmVsIl0sdmFsdWU6W1ZuLk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOltWbi5Ob25lLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjdXN0b21OdW1lcmljRmlsdGVyIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJW'@;
put 'YWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOlt1YShbe3Byb3ZpZGU6aU8sdXNlRXhpc3Rpbmc6Y31dKSxDYV0sZGVjbHM6MTIsdmFyczoxMCxjb25zdHM6W1siaW5wdXRfbG93IiwiIl0sWyJpbnB1dF9oaWdoIiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xy'@;
put 'RGdGaWx0ZXJPcGVuIl0sWzEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJsb3ciLDEsImRhdGFncmlkLW51bWVyaWMt'@;
put 'ZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwiaGlnaCIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMs'@;
put 'Im5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9T24oKTtkZSgwLCJjbHItZGctZmlsdGVyIiwyKSxwaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksZ2ko'@;
put 'ZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0KHYpfSksZGUoMSwiZGl2IiwzKSgyLCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDMsImxhYmVsIiw0KSxPZSg0KSxoZSgpLGRlKDUsImlucHV0Iiw1LDApLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksZ2ko'@;
put 'ZC5sb3csdil8fChkLmxvdz12KSxDdCh2KX0pLGhlKCkoKSxkZSg3LCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDgsImxhYmVsIiw0KSxPZSg5KSxoZSgpLGRlKDEwLCJpbnB1dCIsNiwxKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGdpKGQuaGln'@;
put 'aCx2KXx8KGQuaGlnaD12KSxDdCh2KX0pLGhlKCkoKSgpKCl9MiZhJiYoTWUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLGZpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoNCksU3IoZC5mcm9tTGFiZWxWYWx1ZSksZmUoKSxmaSgibmdNb2RlbCIsZC5sb3cpLE1lKCJwbGFjZWhv'@;
put 'bGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxocigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxmZSg0KSxTcihkLnRvTGFiZWxWYWx1ZSksZmUoKSxmaSgibmdNb2RlbCIsZC5oaWdoKSxNZSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksaHIoImFy'@;
put 'aWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W2NvLERkZSxrZGUsR2wsd0wsdGwsV28sUXhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIGNPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5leGFjdD1hLHRoaXMubmVzdGVk'@;
put 'UHJvcD1uZXcgcEcobCl9YWNjZXB0cyhsLGEpe2NvbnN0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHR5cGVvZiBkPiJ1IikmJih0aGlzLmV4YWN0PygiIitkKS50b0xvd2VyQ2FzZSgpPT09YTooIiIrZCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0wKX19'@;
put 'Y2xhc3MgQTd7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IEduLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPSIiLHRoaXMuX3Jhd1ZhbHVlPSIifWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGxvd2VyQ2Fz'@;
put 'ZVZhbHVlKCl7cmV0dXJuIHRoaXMuX2xvd2VyQ2FzZVZhbHVlfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgY08/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCx2YWx1ZTp0aGlzLnZhbHVlfTp0aGlzfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9yYXdW'@;
put 'YWx1ZX1zZXQgdmFsdWUobCl7bHx8KGw9IiIpLGwhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMuX3Jhd1ZhbHVlPWwsdGhpcy5fbG93ZXJDYXNlVmFsdWU9bC50b0xvd2VyQ2FzZSgpLnRyaW0oKSx0aGlzLl9jaGFuZ2VzLm5leHQobCkpfWlzQWN0aXZlKCl7cmV0dXJuISF0aGlzLnZhbHVlfWFj'@;
put 'Y2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMubG93ZXJDYXNlVmFsdWUpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIEE3JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIGNPP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBjTyYmbC5maWx0ZXJGbi5wcm9w'@;
put 'PT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLnZhbHVlPT09dGhpcy52YWx1ZTpsPT09dGhpcyl9fWxldCBXYj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgc097Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSl7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhp'@;
put 'cy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLmVsZW1lbnRSZWY9dix0aGlzLmNkcj1NLHRoaXMubmdab25lPUksdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vcGVuPSExLHRoaXMubGFiZWxWYWx1ZT0iIix0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihh'@;
put 'KXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgYU8/YTpuZXcgQTcoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1'@;
put 'ZX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxh'@;
put 'Y2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5v'@;
put 'cGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRGaWx0'@;
put 'ZXJMYWJlbCgpLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0RmlsdGVyTGFiZWwoKXtpZih0aGlzLmxhYmVsKXJldHVybiB2b2lkKHRoaXMubGFiZWxWYWx1'@;
put 'ZT10aGlzLmxhYmVsKTtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKTt0aGlzLmxhYmVsVmFsdWU9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMu'@;
put 'Y29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyTGFiZWwse0NPTFVNTjpkPy50ZXh0Q29udGVudC50cmltKCl8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKGNnKSwkZShwbSksJGUodG8pLCRlKHNjKSwkZShRaSksJGUoeG8p'@;
put 'LCRlKEdhKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1zdHJpbmctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKEZhKHRCZSw1KSxGYShReCw1KSksMiZhKXtsZXQgaDt5aShoPWJpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSx5'@;
put 'aShoPWJpKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e3BsYWNlaG9sZGVyOltWbi5Ob25lLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIl0sbGFiZWw6W1ZuLk5vbmUsImNsckZpbHRlckxhYmVsIiwibGFiZWwiXSxjdXN0b21TdHJpbmdGaWx0'@;
put 'ZXI6W1ZuLk5vbmUsImNsckRnU3RyaW5nRmlsdGVyIiwiY3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6W1ZuLk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3VhKFt7cHJv'@;
put 'dmlkZTppTyx1c2VFeGlzdGluZzpjfV0pLENhLGJsXSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1siaW5wdXQiLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwi'@;
put 'bmFtZSIsInNlYXJjaCIsImNscklucHV0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPU9uKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMSkscGkoImNsckRnRmlsdGVyT3BlbkNoYW5n'@;
put 'ZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGdpKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRlKDEsImNsci1pbnB1dC1jb250YWluZXIiKSgyLCJsYWJlbCIpLE9lKDMpLGhlKCksZGUoNCwiaW5wdXQiLDIsMCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVy'@;
put 'biB3dChoKSxnaShkLnZhbHVlLHYpfHwoZC52YWx1ZT12KSxDdCh2KX0pLGhlKCkoKSgpfTImYSYmKE1lKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxmaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDMpLFNyKGQubGFiZWxWYWx1ZSksZmUoKSxmaSgibmdNb2RlbCIsZC52YWx1'@;
put 'ZSksTWUoInBsYWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLnBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltjbyxZMSxxTCxHbCx0bCxXbyxReF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQ209KCgpPT57Y2xhc3MgYyBleHRlbmRzIEFi'@;
put 'e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1VbyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGZlYXR1cmVzOltDYV19KSxjfSkoKSxZYj0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQ9MH1nZXQgaGFzQWN0aW9uYWJsZVJvdygpe3JldHVybiB0aGlzLmFjdGlvbmFibGVDb3VudD4wfXJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQrK311bnJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291'@;
put 'bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksazc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGtie2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJv'@;
put 'dyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMucm93QWN0aW9ucz1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5yb3dBY3Rpb25zLmhhc0FjdGlvbmFibGVSb3d9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHhvKSwkZShDbSw4KSwkZShZYikpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXSxbImNsci1kZy1yb3ciXV0sZmVhdHVyZXM6W0NhXX0pLGN9KSgpLE5kZT0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hLHRoaXMubW9kYWxTdGFjaz1bXSx0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcj10aGlzLm9uS2V5VXAuYmluZCh0aGlzKX10cmFja01vZGFsT3BlbihhKXshMT09PXRoaXMubW9kYWxTdGFjay5pbmNsdWRlcyhhKSYmdGhpcy5tb2Rh'@;
put 'bFN0YWNrLnVuc2hpZnQoYSksZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfXRyYWNrTW9kYWxDbG9zZShhKXtjb25zdCBkPXRoaXMubW9kYWxTdGFjay5pbmRleE9mKGEpO2Q+LTEmJnRo'@;
put 'aXMubW9kYWxTdGFjay5zcGxpY2UoZCwxKSwwPT09dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfW9uS2V5VXAoYSl7dGhpcy5tb2RhbFN0'@;
put 'YWNrLmxlbmd0aCYmTDIoYS5rZXkpPT09cGEuRXNjYXBlJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksdGhpcy5tb2RhbFN0YWNrWzBdLmNsb3NlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihpcykpfSxjLlx1MDI3NXByb3Y9'@;
put 'cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHQzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tb2RhbFN0YWNrU2VydmljZT1hLHRoaXMucHJldmVudFNjcm9sbD0hMSx0aGlzLnRvZ2dsZVN0YXRlPSExLHRoaXMuX2Vu'@;
put 'YWJsZWQ9ITEsdGhpcy5fc3RhdGU9bmV3IEpyKHRoaXMudG9nZ2xlU3RhdGUpfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQoYSl7dGhpcy5fZW5hYmxlZD1hfWdldCBwcmV2ZW50Rm9jdXNTY3JvbGwoKXtyZXR1cm4gdGhpcy5wcmV2ZW50U2Nyb2xsfXNl'@;
put 'dCBwcmV2ZW50Rm9jdXNTY3JvbGwoYSl7dGhpcy5wcmV2ZW50U2Nyb2xsPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3Rh'@;
put 'dGV9b3BlbihhLGQpe3RoaXMuY2FjaGU9YSx0aGlzLmJ1dHRvbj1kLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpfWNsb3NlKCl7dGhpcy50b2dnbGVTdGF0ZT0h'@;
put 'MSx0aGlzLnJldHVybkZvY3VzKCksdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKX1yZXR1cm5Gb2N1cygpe3RoaXMuYnV0dG9uJiYodGhpcy5idXR0b24uZm9jdXMoe3ByZXZlbnRTY3JvbGw6dGhp'@;
put 'cy5wcmV2ZW50Rm9jdXNTY3JvbGx9KSx0aGlzLmJ1dHRvbj1udWxsKX10b2dnbGUoYSxkKXt0aGlzLmlzUm93T3BlbihhKXx8IWE/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihhLGQpfWlzUm93T3BlbihhKXtyZXR1cm4hKCF0aGlzLnRvZ2dsZVN0YXRlfHx0aGlzLmNhY2hlIT09YSl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKENyKE5kZSkpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEdiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kZXRhaWxTZXJ2aWNlPWEsdGhpcy5l'@;
put 'eHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFzRXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNlcnZpY2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50'@;
put 'LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKENyKHQzKSl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRDc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGtie2NvbnN0cnVjdG9yKGEsZCxoKXtpZigh'@;
put 'ZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMuZXhwYW5kYWJsZUNvdW50PWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZGFibGVDb3VudC5oYXNFeHBhbmRhYmxl'@;
put 'Um93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh4byksJGUoQ20sOCksJGUoR2IpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZlYXR1cmVzOltDYV19KSxjfSko'@;
put 'KTtjbGFzcyB1T3tjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCx0aGlzLm5lc3RlZFByb3A9bmV3IHBHKGwpfWNvbXBhcmUobCxhKXtsZXQgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpLGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShhKTtyZXR1cm4ic3RyaW5nIj09'@;
put 'dHlwZW9mIGQmJihkPWQudG9Mb3dlckNhc2UoKSksInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG93ZXJDYXNlKCkpLHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQ/dHlwZW9mIGg+InUifHxudWxsPT09aD8wOjE6dHlwZW9mIGg+InUifHxudWxsPT09aHx8ZDxoPy0xOmQ+aD8xOjB9fXZhciBU'@;
put 'aD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlVOU09SVEVEPTBdPSJVTlNPUlRFRCIsY1tjLkFTQz0xXT0iQVNDIixjW2MuREVTQz0tMV09IkRFU0MiLGN9KFRofHx7fSk7Y29uc3QgJGI9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixlRT0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IGdHPSgo'@;
put 'KT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jb2x1bW5WaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5WaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtY29sdW1uIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmRmEobkJlLDUpLDImYSl7bGV0IGg7eWkoaD1iaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0Nv'@;
put 'bnRlbnRTZWxlY3RvcnM6eXMsZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNvbHVtblBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxyQmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGdjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGRPPSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuX3JldmVyc2U9ITEsdGhpcy5fY2hhbmdlPW5ldyBHbn1nZXQgY29tcGFyYXRvcigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfXNldCBjb21wYXJhdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIu'@;
put 'Y2hhbmdlU3RhcnQoKSx0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Z2V0IHJldmVyc2UoKXtyZXR1cm4gdGhpcy5fcmV2ZXJzZX1zZXQgcmV2ZXJzZShhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0'@;
put 'KCksdGhpcy5fcmV2ZXJzZT1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZShhLGQpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0'@;
put 'aGlzLmNvbXBhcmF0b3I9PT1hP3RoaXMuX3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkfHwhdGhpcy5fcmV2ZXJzZToodGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuX3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkKSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUo'@;
put 'KX1jbGVhcigpe3RoaXMuY29tcGFyYXRvcj1udWxsfWNvbXBhcmUoYSxkKXtyZXR1cm4odGhpcy5yZXZlcnNlPy0xOjEpKnRoaXMuY29tcGFyYXRvci5jb21wYXJlKGEsZCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKShDcihKeCkpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBuMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkFMSUdOX0NPTFVNTlM9MF09IkFMSUdOX0NPTFVNTlMiLGNbYy5DQUxDVUxBVEVfTU9ERV9P'@;
put 'Tj0xXT0iQ0FMQ1VMQVRFX01PREVfT04iLGNbYy5DQUxDVUxBVEVfTU9ERV9PRkY9Ml09IkNBTENVTEFURV9NT0RFX09GRiIsY1tjLkNMRUFSX1dJRFRIUz0zXT0iQ0xFQVJfV0lEVEhTIixjW2MuQ09NUFVURV9DT0xVTU5fV0lEVEhTPTRdPSJDT01QVVRFX0NPTFVNTl9XSURUSFMiLGN9KG4z'@;
put 'fHx7fSk7bGV0IEk3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9yZW5kZXJTdGVwPW5ldyBHbix0aGlzLmFscmVhZHlTaXplZD0hMX1nZXQgcmVuZGVyU3RlcCgpe3JldHVybiB0aGlzLl9yZW5kZXJTdGVwLmFzT2JzZXJ2YWJsZSgpfWZpbHRlclJlbmRlclN0ZXBzKGEpe3Jl'@;
put 'dHVybiB0aGlzLnJlbmRlclN0ZXAucGlwZShXbChkPT5hPT09ZCkpfXJlc2l6ZSgpe3RoaXMuX3JlbmRlclN0ZXAubmV4dChuMy5DQUxDVUxBVEVfTU9ERV9PTiksdGhpcy5hbHJlYWR5U2l6ZWQmJnRoaXMuX3JlbmRlclN0ZXAubmV4dChuMy5DTEVBUl9XSURUSFMpLHRoaXMuX3JlbmRlclN0'@;
put 'ZXAubmV4dChuMy5DT01QVVRFX0NPTFVNTl9XSURUSFMpLHRoaXMuX3JlbmRlclN0ZXAubmV4dChuMy5BTElHTl9DT0xVTU5TKSx0aGlzLmFscmVhZHlTaXplZD0hMCx0aGlzLl9yZW5kZXJTdGVwLm5leHQobjMuQ0FMQ1VMQVRFX01PREVfT0ZGKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5f'@;
put 'cmVzaXplZEJ5PTB9Z2V0IHJlc2l6ZWRCeSgpe3JldHVybiB0aGlzLl9yZXNpemVkQnl9Z2V0IG1pbkNvbHVtbldpZHRoKCl7cmV0dXJuIHRoaXMuZG9tQWRhcHRlci5taW5XaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfHw5Nn1nZXQgbWF4UmVzaXplUmFuZ2UoKXtyZXR1cm4gdGhpcy53'@;
put 'aWR0aEJlZm9yZVJlc2l6ZS10aGlzLm1pbkNvbHVtbldpZHRofWdldCB3aWR0aEFmdGVyUmVzaXplKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUrdGhpcy5fcmVzaXplZEJ5fXN0YXJ0UmVzaXplKCl7dGhpcy5fcmVzaXplZEJ5PTAsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdl'@;
put 'PSEwLHRoaXMud2lkdGhCZWZvcmVSZXNpemU9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS53aWR0aH1lbmRSZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1jYWxjdWxhdGVSZXNpemUoYSl7YTwtdGhpcy5tYXhSZXNpemVSYW5nZT8odGhp'@;
put 'cy5fcmVzaXplZEJ5PS10aGlzLm1heFJlc2l6ZVJhbmdlLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMSk6KHRoaXMuX3Jlc2l6ZWRCeT1hLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'KENyKFFpKSxDcihwbSksQ3IoSTcpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx2Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hfWdldCB0YWJsZVJlZigpe3JldHVybiB0aGlzLl90YWJsZVJlZn1z'@;
put 'ZXQgdGFibGVSZWYoYSl7dGhpcy5fdGFibGVSZWY9YX1zZXQgdGFibGUoYSl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmYS5uYXRpdmVFbGVtZW50JiYodGhpcy50YWJsZVJlZj1hLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIikpfWdldENvbHVtbkRyYWdIZWln'@;
put 'aHQoKXtyZXR1cm4gdGhpcy50YWJsZVJlZj9gJHt0aGlzLnRhYmxlUmVmLmNsaWVudEhlaWdodH1weGA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IoaXMpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm'@;
put 'YWN9KSxjfSkoKSxCZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLm5nWm9uZT1oLHRoaXMudGFibGVTaXplU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5nPXYsdGhpcy5kb2N1'@;
put 'bWVudD1NLHRoaXMuY29sdW1uU2VwYXJhdG9ySWQ9X3UoKSx0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy51bmxpc3RlbmVycz1bXX1nZXQgZGVzY3JpcHRpb25JZCgpe3JldHVybmAke3RoaXMuY29sdW1uU2VwYXJhdG9ySWR9LWFyaWEtZGVzY3JpYmVkYnlgfWdldCByZXNp'@;
put 'emVUcmFja2VyRWwoKXtyZXR1cm4gdGhpcy5yZXNpemVUcmFja2VyUmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGNvbHVtbkhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlUmVmLm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs'@;
put 'YXIoKCk9Pnt0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5ZG93biIsYT0+e3RoaXMuc2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bihhKSx0aGlzLm1vdmVUcmFja2VyT25LZXlEb3duKGEpfSkpLHRoaXMudW5saXN0ZW5l'@;
put 'cnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXl1cCIsYT0+e3RoaXMuaGlkZVRyYWNrZXJPbktleVVwKGEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnVubGlzdGVuZXJzLmZvckVhY2goYT0+YSgpKX1zaG93VHJhY2tlcigpe3RoaXMuY29sdW1u'@;
put 'UmVzaXplclNlcnZpY2Uuc3RhcnRSZXNpemUoKTtjb25zdCBhPXRoaXMudGFibGVTaXplU2VydmljZS5nZXRDb2x1bW5EcmFnSGVpZ2h0KCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiaGVpZ2h0IixhKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMu'@;
put 'cmVzaXplVHJhY2tlckVsLCJkaXNwbGF5IiwiYmxvY2siKX1tb3ZlVHJhY2tlcihhKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmNhbGN1bGF0ZVJlc2l6ZShhKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGVYKCR7'@;
put 'dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnl9cHgpYCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImNvbC1yZXNpemUiKSx0aGlzLnJlZEZsYWdUcmFja2VyKCl9aGlkZVRyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2'@;
put 'aWNlLmVuZFJlc2l6ZSgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImRpc3BsYXkiLCJub25lIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJl'@;
put 'ci5zZXRTdHlsZSh0aGlzLmNvbHVtbkhhbmRsZUVsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVYKDBweCkiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiYXV0byIpfXNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSl7IXRoaXMucmVzaXplU3Rh'@;
put 'cnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITAsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5'@;
put 'LXJlc2l6ZSIpLHRoaXMuc2hvd1RyYWNrZXIoKSl9bW92ZVRyYWNrZXJPbktleURvd24oYSl7dGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpPyhhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnktMTIpKTp0aGlz'@;
put 'LmlzQXJyb3dSaWdodEtleUV2ZW50KGEpJiYoYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5KzEyKSl9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNB'@;
put 'cnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRy'@;
put 'YWNrZXIoKSx0aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRo'@;
put 'aXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlz'@;
put 'LnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIEwyKGEua2V5KT09PXBhLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gTDIoYS5rZXkpPT09cGEuQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUobUcpLCRlKEVzKSwkZShHYSksJGUodkcpLCRlKHRvKSwkZShtbykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigx'@;
put 'JmEmJihGYShpQmUsNSksRmEoYUJlLDUpKSwyJmEpe2xldCBoO3lpKGg9YmkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCkseWkoaD1iaSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRy'@;
put 'KCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWyJjb2x1bW5IYW5kbGUiLCIiXSxbInJlc2l6ZVRyYWNrZXIiLCIiXSxbInR5cGUiLCJidXR0b24iLCJjZGtEcmFnIiwiIiwiY2RrRHJhZ0xvY2tBeGlzIiwieCIsMSwiZGF0YWdyaWQtY29s'@;
put 'dW1uLWhhbmRsZSIsMywiY2RrRHJhZ1N0YXJ0ZWQiLCJjZGtEcmFnTW92ZWQiLCJjZGtEcmFnRW5kZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPU9uKCk7ZGUo'@;
put 'MCwiYnV0dG9uIiwyLDApLEZ0KCJjZGtEcmFnU3RhcnRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5zaG93VHJhY2tlcigpKX0pKCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLm1vdmVUcmFja2VyKHYuZGlzdGFuY2UueCkpfSkoImNka0RyYWdF'@;
put 'bmRlZCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGQuaGlkZVRyYWNrZXIoKSxDdCh2LnNvdXJjZS5fZHJhZ1JlZi5yZXNldCgpKX0pLGhlKCksZGUoMiwic3BhbiIsMyksT2UoMyksaGUoKSxXdCg0LCJkaXYiLDQsMSl9MiZhJiYoaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5nLmtl'@;
put 'eXMuY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsZC5kZXNjcmlwdGlvbklkKSxmZSgyKSxocigiaWQiLGQuZGVzY3JpcHRpb25JZCksZmUoKSxMcigiICIsZC5jb21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbiwiICIpKX0sZGVw'@;
put 'ZW5kZW5jaWVzOltZWmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFI3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBzT3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoaCksdGhpcy5lbD1hLHRoaXMuX3NvcnQ9ZCx0aGlzLnZjcj1mLHRoaXMuZGV0YWlsU2VydmljZT12LHRoaXMuY2hh'@;
put 'bmdlRGV0ZWN0b3JSZWY9TSx0aGlzLnNvcnRPcmRlckNoYW5nZT1uZXcgS3IsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9VGguVU5TT1JURUQsdGhpcy5zdWJzY3JpcHRpb25z'@;
put 'PVtdLHRoaXMuX3Nob3dTZXBhcmF0b3I9ITAsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBpc0hpZGRlbigpe3JldHVybiB0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGVFKX1nZXQgc2hvd1NlcGFyYXRvcigpe3JldHVybiB0aGlzLl9zaG93U2VwYXJhdG9yfXNldCBzaG93U2VwYXJhdG9yKGEpe3RoaXMuX3Nob3dTZXBhcmF0b3I9YSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JD'@;
put 'aGVjaygpfWdldCBjb2xUeXBlKCl7cmV0dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoYSl7dGhpcy5fY29sVHlwZT1hfWdldCBmaWVsZCgpe3JldHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYodGhpcy5fZmllbGQ9YSx0aGlzLl9zb3J0Qnl8'@;
put 'fCh0aGlzLl9zb3J0Qnk9bmV3IHVPKGEpKSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0IHNvcnRCeShhKXsic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5fc29ydEJ5PW5ldyB1TyhhKTphP3RoaXMuX3NvcnRCeT1hOnRoaXMuZmllbGQ/dGhpcy5fc29ydEJ5PW5ldyB1Tyh0'@;
put 'aGlzLmZpZWxkKTpkZWxldGUgdGhpcy5fc29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29ydE9yZGVyfXNldCBzb3J0T3JkZXIoYSl7aWYoISh0eXBlb2YgYT4idSIpJiZ0aGlzLl9zb3J0T3JkZXIhPT1hKXN3aXRjaChhKXtjYXNlIFRoLkFTQzp0aGlzLnNvcnQoITEpO2Jy'@;
put 'ZWFrO2Nhc2UgVGguREVTQzp0aGlzLnNvcnQoITApO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc29ydC5jbGVhcigpfX1zZXQgdXBkYXRlRmlsdGVyVmFsdWUoYSl7dGhpcy5maWx0ZXI/dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBNz8oKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpJiYoYT0iIiksYSE9'@;
put 'PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuZmlsdGVyIGluc3RhbmNlb2YgVDcmJigoIWF8fCEoYSBpbnN0YW5jZW9mIEFycmF5KSkmJihhPVtudWxsLG51bGxdKSwyPT09YS5sZW5ndGgmJihhWzBdIT09dGhpcy5maWx0ZXIudmFsdWVbMF18fGFbMV0h'@;
put 'PT10aGlzLmZpbHRlci52YWx1ZVsxXSkmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1zZXQgcHJvamVjdGVkRmlsdGVyKGEpe2EmJih0aGlzLmRlbGV0ZUZpbHRlcigpLHRoaXMuY3VzdG9tRmlsdGVyPSEwKX1nZXQgc29ydGFibGUoKXtyZXR1cm4hIXRo'@;
put 'aXMuX3NvcnRCeX1nZXQgYXJpYVNvcnQoKXtzd2l0Y2godGhpcy5fc29ydE9yZGVyKXtjYXNlIFRoLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIFRoLkRFU0M6cmV0dXJuImRlc2NlbmRpbmciO2RlZmF1bHQ6cmV0dXJuIm5vbmUifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlz'@;
put 'Ll9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEE3fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEE3fHx0'@;
put 'aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGdHLHRoaXMudmNyKS5jb2x1bW5W'@;
put 'aWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFhMKGdHLHRoaXMudmNyKX1uZ09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3Vz'@;
put 'dG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5zZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJl'@;
put 'dmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1'@;
put 'YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlzLl9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9UaC5ERVNDOlRoLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PVRoLkRFU0M/'@;
put 'ImRvd24iOiJ1cCIsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpKX1saXN0ZW5Gb3JEZXRhaWxQYW5lQ2hhbmdlcygpe3JldHVybiB0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNob3dTZXBhcmF0b3IhPT0hYSYmKHRo'@;
put 'aXMuc2hvd1NlcGFyYXRvcj0hYSl9KX1saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpe3JldHVybiB0aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zb3J0T3JkZXIhPT1UaC5VTlNPUlRFRCYmYS5jb21wYXJh'@;
put 'dG9yIT09dGhpcy5fc29ydEJ5JiYodGhpcy5fc29ydE9yZGVyPVRoLlVOU09SVEVELHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0RGlyZWN0aW9uPW51bGwpfSl9c2V0dXBEZWZhdWx0RmlsdGVyKGEsZCl7Im51bWJlciI9PT1kP3RoaXMuc2V0'@;
put 'RmlsdGVyKG5ldyBUNyhuZXcgbE8oYSkpKToic3RyaW5nIj09PWQmJnRoaXMuc2V0RmlsdGVyKG5ldyBBNyhuZXcgY08oYSkpKSx0aGlzLmZpbHRlciYmdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlz'@;
put 'LmluaXRGaWx0ZXJWYWx1ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKFFpKSwkZShkTyksJGUoY2cpLCRlKFRzKSwkZSh0MyksJGUoeG8pKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxj'@;
put 'b250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLGlPLDUpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQucHJvamVjdGVkRmlsdGVyPWYuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsImNvbHVtbmhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0'@;
put 'aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtc29ydCIsZC5hcmlhU29ydCksVHIoImRhdGFncmlkLWNvbHVtbiIsITApKX0saW5wdXRzOntmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjpbVm4uTm9uZSwiY2xyRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiLCJmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciJd'@;
put 'LGZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyOltWbi5Ob25lLCJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6W1ZuLk5vbmUsImNsckZpbHRlck51bWJlck1pblBsYWNlaG9sZGVy'@;
put 'IiwiZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiXSxjb2xUeXBlOltWbi5Ob25lLCJjbHJEZ0NvbFR5cGUiLCJjb2xUeXBlIl0sZmllbGQ6W1ZuLk5vbmUsImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbVm4uTm9uZSwiY2xyRGdTb3J0QnkiLCJzb3J0QnkiXSxzb3J0T3JkZXI6W1Zu'@;
put 'Lk5vbmUsImNsckRnU29ydE9yZGVyIiwic29ydE9yZGVyIl0sdXBkYXRlRmlsdGVyVmFsdWU6W1ZuLk5vbmUsImNsckZpbHRlclZhbHVlIiwidXBkYXRlRmlsdGVyVmFsdWUiXX0sb3V0cHV0czp7c29ydE9yZGVyQ2hhbmdlOiJjbHJEZ1NvcnRPcmRlckNoYW5nZSIsZmlsdGVyVmFsdWVDaGFu'@;
put 'Z2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3lkKFthZ10pLENhLGJsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6b0JlLGRlY2xzOjksdmFyczo1LGNvbnN0czpbWyJjb2x1bW5UaXRsZSIsIiJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tZmxleCJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1j'@;
put 'b2x1bW4tdGl0bGUiLCJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJNYXhQbGFj'@;
put 'ZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJzb3J0LWljb24iLDQsIm5nSWYiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhp'@;
put 'ZGRlbiIsInRydWUiLDEsInNvcnQtaWNvbiJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlck1heFBsYWNlaG9sZGVy'@;
put 'IiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShzQmUpLGRlKDAsImRpdiIsMSksZ3QoMSx1QmUsMywyLCJidXR0'@;
put 'b24iLDIpLFdyKDIpLGd0KDMsZEJlLDEsMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDMpKDQsaEJlLDEsNCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiw0KSg1LGZCZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsZ2MpKDcsZ0JlLDIsMSwic3BhbiIsNSkoOCxtQmUsMSwwLCJjbHItZGctY29s'@;
put 'dW1uLXNlcGFyYXRvciIsNiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsZC5zb3J0YWJsZSksZmUoMiksTWUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksZmUoKSxNZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYibnVt'@;
put 'YmVyIj09ZC5jb2xUeXBlKSxmZSgzKSxNZSgibmdJZiIsIWQuc29ydGFibGUpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1NlcGFyYXRvcikpfSxkZXBlbmRlbmNpZXM6W2JhLEIxLGVvLEJkZSxIZGUsV2JdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHVnPSgoKT0+'@;
put 'e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5fY2hhbmdlPW5ldyBHbix0aGlzLl9hbGxDaGFuZ2VzPW5ldyBHbix0'@;
put 'aGlzLnRyYWNrQnk9Zj0+Zn1nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFuZ2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxh'@;
put 'eWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxl'@;
put 'KCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYmdGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3Bh'@;
put 'Z2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuRG93bigpe3RoaXMuX3NtYXJ0PSExLHRoaXMuZGVzdHJveSgpfXNtYXJ0ZW5VcCgpe3RoaXMuX3NtYXJ0PSEwLHRoaXMuX2ZpbHRlcnNTdWI9dGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9maWx0ZXJJdGVtcygpKSx0'@;
put 'aGlzLl9zb3J0U3ViPXRoaXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3NvcnQuY29tcGFyYXRvcj90aGlzLl9zb3J0SXRlbXMoKTp0aGlzLl9maWx0ZXJJdGVtcygpfSksdGhpcy5fcGFnZVN1Yj10aGlzLl9wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5n'@;
put 'ZVBhZ2UoKSl9cmVmcmVzaCgpe3RoaXMuc21hcnQmJnRoaXMuX2ZpbHRlckl0ZW1zKCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuZGlzcGxheWVkKX1lbWl0QWxsQ2hhbmdlcyhhKXt0aGlzLl9hbGxDaGFuZ2VzLm5leHQoYSl9X2ZpbHRlckl0ZW1zKCl7dGhpcy51bmlu'@;
put 'aXRpYWxpemVkfHwodGhpcy5fZmlsdGVyZWQ9dGhpcy5fZmlsdGVycy5oYXNBY3RpdmVGaWx0ZXJzKCk/dGhpcy5fYWxsLmZpbHRlcihhPT50aGlzLl9maWx0ZXJzLmFjY2VwdHMoYSkpOnRoaXMuX2FsbC5zbGljZSgpLHRoaXMuX3BhZ2UudG90YWxJdGVtcz10aGlzLl9maWx0ZXJlZC5sZW5n'@;
put 'dGgsdGhpcy5fc29ydEl0ZW1zKCkpfV9zb3J0SXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9zb3J0LmNvbXBhcmF0b3ImJnRoaXMuX2ZpbHRlcmVkLnNvcnQoKGEsZCk9PnRoaXMuX3NvcnQuY29tcGFyZShhLGQpKSx0aGlzLl9jaGFuZ2VQYWdlKCkpfV9jaGFuZ2VQYWdlKCl7'@;
put 'dGhpcy51bmluaXRpYWxpemVkfHx0aGlzLl9wYWdlLmFjdGl2YXRlZCYmMD09PXRoaXMuX3BhZ2Uuc2l6ZXx8KHRoaXMuX2Rpc3BsYXllZD10aGlzLl9wYWdlLnNpemU+MD90aGlzLl9maWx0ZXJlZC5zbGljZSh0aGlzLl9wYWdlLmZpcnN0SXRlbSx0aGlzLl9wYWdlLmxhc3RJdGVtKzEpOnRo'@;
put 'aXMuX2ZpbHRlcmVkLHRoaXMuZW1pdENoYW5nZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IoY2cpLENyKGRPKSxDcih3bSkpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEtiPSgoKT0+'@;
put 'e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgUXMoZixhLGQpLHRoaXMu'@;
put 'c3Vic2NyaXB0aW9ucy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9dix0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRl'@;
put 'cmFibGVQcm94eS5uZ0ZvclRyYWNrQnk9YX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfW5nRG9DaGVjaygpe3RoaXMuZGlmZmVyfHwodGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fcmF3SXRlbXMpLmNyZWF0ZSh0aGlzLml0ZXJhYmxlUHJv'@;
put 'eHkubmdGb3JUcmFja0J5KSksdGhpcy5kaWZmZXImJnRoaXMuZGlmZmVyLmRpZmYodGhpcy5fcmF3SXRlbXMpJiYodGhpcy5pdGVtcy5hbGw9dGhpcy5fcmF3SXRlbXMpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUod2wpLCRlKHE1KSwkZSh1ZyksJGUoVHMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGdJdGVtcyIsIiIsImNsckRnSXRlbXNPZiIsIiJdXSxpbnB1dHM6e3Jhd0l0ZW1zOltW'@;
put 'bi5Ob25lLCJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6W1ZuLk5vbmUsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfX0pLGN9KSgpLHlHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pdGVtcz1hfWdldCBlbXB0eURhdGFncmlkKCl7cmV0dXJuISh0'@;
put 'aGlzLml0ZW1zLmxvYWRpbmd8fHRoaXMuaXRlbXMuZGlzcGxheWVkJiYwIT09dGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUodWcpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5cyxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJkYXRhZ3Jp'@;
put 'ZC1wbGFjZWhvbGRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50Il0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxk'@;
put 'KXsxJmEmJihzYSgpLGRlKDAsImRpdiIsMCksZ3QoMSx2QmUsMSwwLCJkaXYiLDEpLGRlKDIsInNwYW4iLDIpLGd0KDMseUJlLDEsMCwibmctY29udGVudCIsMyksaGUoKSgpKSwyJmEmJihUcigiZGF0YWdyaWQtZW1wdHkiLGQuZW1wdHlEYXRhZ3JpZCksZmUoKSxNZSgibmdJZiIsZC5lbXB0'@;
put 'eURhdGFncmlkKSxmZSgyKSxNZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbYmFdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGJHPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jZWxsVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVk'@;
put 'ZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY2VsbFZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jZWxsIl1dLHZpZXdRdWVy'@;
put 'eTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmRmEoYkJlLDUpLDImYSl7bGV0IGg7eWkoaD1iaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eXMsZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNlbGxQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihzYSgpLGd0KDAsX0JlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxnYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxyMz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmNyPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdl'@;
put 'dChiRyx0aGlzLnZjcikuY2VsbFZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgWEwoYkcsdGhpcy52Y3IpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShUcykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9y'@;
put 'czpbWyJjbHItZGctY2VsbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLEtMLDQpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQuc2lnbnBvc3Q9Zil9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpm'@;
put 'dW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLWNlbGwiLCEwKSgiZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciIsZC5zaWducG9zdC5sZW5ndGg+MCl9LG5nQ29udGVudFNlbGVjdG9yczp5cyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3Io'@;
put 'MCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxqZGU9MCx0RT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVzF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuZXhwYW5kYWJsZUlkPSIiLHRoaXMuX3JlcGxhY2U9bmV3IEpyKCExKSx0aGlzLl9hbmltYXRlPW5ldyBHbixqZGUrKyx0aGlzLmV4'@;
put 'cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIramRlfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9YSx0aGlzLl9hbmltYXRlLm5leHQoKSx0aGlzLl9l'@;
put 'eHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IHJlcGxhY2UoKXtyZXR1cm4gdGhpcy5fcmVwbGFjZS5hc09ic2VydmFibGUoKX1nZXQgYW5pbWF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRlLmFzT2JzZXJ2YWJsZSgpfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXtzdXBlci5sb2FkaW5nU3RhdGVDaGFu'@;
put 'Z2UoYSksYSE9PVoxLkxPQURJTkcmJnRoaXMuX2FuaW1hdGUubmV4dCgpfXNldFJlcGxhY2UoYSl7dGhpcy5fcmVwbGFjZS5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWN9KSxjfSkoKTt2YXIgWGI9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ESVNQTEFZPTBdPSJESVNQTEFZIixjW2MuQ0FMQ1VMQVRFPTFdPSJDQUxDVUxBVEUiLGN9KFhifHx7fSksZGw9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuU2luZ2xlPTFdPSJT'@;
put 'aW5nbGUiLGNbYy5NdWx0aT0yXT0iTXVsdGkiLGN9KGRsfHx7fSk7bGV0IF9HPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ry'@;
put 'b3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmRmEod0JlLDUpLDImYSl7bGV0IGg7eWko'@;
put 'aD1iaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eXMsZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxDQmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCww'@;
put 'LGdjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGVXZT0wLHFiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMucHJlc2VydmVTZWxlY3Rpb249ITEsdGhpcy5zaGlmdFByZXNzZWQ9ITEsdGhpcy5yb3dTZWxlY3Rpb25Nb2RlPSExLHRoaXMucHJl'@;
put 'dlNlbGVjdGlvblJlZnM9W10sdGhpcy5sb2NrZWRSZWZzPVtdLHRoaXMudmFsdWVDb2xsZWN0b3I9bmV3IEduLHRoaXMuX3NlbGVjdGlvblR5cGU9ZGwuTm9uZSx0aGlzLl9jaGFuZ2U9bmV3IEduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmlkPSJjbHItZGctc2VsZWN0aW9uIitlV2Ur'@;
put 'Kyx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnshdGhpcy5fc2VsZWN0YWJsZXx8dGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbnx8dGhpcy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuYWxsQ2hhbmdlcy5zdWJzY3JpYmUo'@;
put 'aD0+e2NvbnN0IGY9W107c3dpdGNoKHRoaXMuc2VsZWN0aW9uVHlwZSl7Y2FzZSBkbC5Ob25lOmJyZWFrO2Nhc2UgZGwuU2luZ2xlOntsZXQgdixNPSExO3RoaXMuY3VycmVudFNpbmdsZSYmIXRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZiYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJl'@;
put 'Zj1hLnRyYWNrQnkodGhpcy5jdXJyZW50U2luZ2xlKSksaC5mb3JFYWNoKEk9Pntjb25zdCBHPWEudHJhY2tCeShJKTt0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9PT1HJiYodj1JLE09ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKEcpPi0xJiZmLnB1c2goRyl9KSxhLnNtYXJ0JiYh'@;
put 'diYmKE09ITApLHNldFRpbWVvdXQoKCk9PntNJiYodGhpcy5jdXJyZW50U2luZ2xlPXYpfSwwKTticmVha31jYXNlIGRsLk11bHRpOntsZXQgdj10aGlzLmN1cnJlbnQuc2xpY2UoKSxNPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10'@;
put 'aGlzLmN1cnJlbnQubGVuZ3RoJiYodGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChJPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKGEudHJhY2tCeShJKSl9KSksaC5mb3JFYWNoKEk9Pntjb25zdCBHPWEudHJhY2tCeShJKTt0aGlzLmxvY2tlZFJl'@;
put 'ZnMuaW5kZXhPZihHKT4tMSYmZi5wdXNoKEcpfSksdi5sZW5ndGg+MCYmKGguZm9yRWFjaChJPT57Y29uc3QgRz1hLnRyYWNrQnkoSSkscmU9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5pbmRleE9mKEcpO3JlPi0xJiYodltyZV09SSxNPSEwKX0pLGEuc21hcnQmJih2PXYuZmlsdGVyKEk9Pmgu'@;
put 'aW5kZXhPZihJKT4tMSksdGhpcy5jdXJyZW50Lmxlbmd0aCE9PXYubGVuZ3RoJiYoTT0hMCkpLHNldFRpbWVvdXQoKCk9PntNJiYodGhpcy5jdXJyZW50PXYpfSwwKSk7YnJlYWt9fXRoaXMubG9ja2VkUmVmcz1mfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0'@;
put 'b3IucGlwZSh1bSgwKSkuc3Vic2NyaWJlKCgpPT50aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25UeXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0IHNlbGVjdGlvblR5cGUoYSl7YSE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9YSxh'@;
put 'PT09ZGwuTm9uZT9kZWxldGUgdGhpcy5jdXJyZW50OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy51cGRhdGVDdXJyZW50KGEsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMu'@;
put 'X2N1cnJlbnRTaW5nbGV9c2V0IGN1cnJlbnRTaW5nbGUoYSl7YSE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0aGlzLl9jdXJyZW50U2luZ2xlPWEsYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNo'@;
put 'YW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1kbC5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PWRsLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10s'@;
put 'dGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRl'@;
put 'Q3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PWRsLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1kbC5NdWx0'@;
put 'aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSBkbC5Ob25lOmNhc2UgZGwuU2luZ2xlOmJyZWFrO2Nhc2UgZGwu'@;
put 'TXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09ZGwuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVt'@;
put 'cy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEubGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2Nv'@;
put 'bnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tlZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVt'@;
put 'cy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09ZGwuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PWRsLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0'@;
put 'ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2Yo'@;
put 'YSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeShhKSl9ZGVzZWxlY3RJdGVt'@;
put 'KGEpe2lmKHRoaXMuY3VycmVudD10aGlzLmN1cnJlbnQuc2xpY2UoMCxhKS5jb25jYXQodGhpcy5jdXJyZW50LnNsaWNlKGErMSkpLGE8dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UoYSwxKTt0aGlzLmxvY2tlZFJl'@;
put 'ZnM9dGhpcy5sb2NrZWRSZWZzLmZpbHRlcihoPT5oIT09ZFswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZSE9PWRsLk5vbmV9ZW1pdENoYW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT1kbC5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJy'@;
put 'ZW50U2luZ2xlKTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09ZGwuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKENyKHVnKSxDcihjZykpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMs'@;
put 'ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHdHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fdmlldz1uZXcgSnIoWGIuRElTUExBWSksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZmlsdGVyUmVuZGVyU3RlcHMobjMuQ0FMQ1VM'@;
put 'QVRFX01PREVfT04pLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFhiLkNBTENVTEFURSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKG4zLkNBTENVTEFURV9NT0RFX09GRikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQoWGIuRElTUExB'@;
put 'WSkpKX1nZXQgdmlldygpe3JldHVybiB0aGlzLl92aWV3LmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IoSTcp'@;
put 'KX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxDRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2VsZWN0aW9uPWF9b25TZWxlY3Rpb25DZWxsQ2xpY2soYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZXx8IkxB'@;
put 'QkVMIiE9PWEudGFyZ2V0LnRhZ05hbWUmJiJJTlBVVCIhPT1hLnRhcmdldC50YWdOYW1lJiZhLnRhcmdldC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpPy5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShxYikpfSxjLlx1MDI3NWRpcj1F'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSx4cD0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBzKG4zLkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25E'@;
put 'ZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLnN0YXRlU3Vic2NyaXB0aW9uJiZ0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cmVzZXRTdGF0ZShhKXt0aGlzLnNldFdpZHRoKGEpLHRoaXMuc2V0SGlkZGVuKGEp'@;
put 'fXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsJGIpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCRiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZl'@;
put 'RWxlbWVudCwid2lkdGgiLGEud2lkdGgrInB4Iil9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGVFKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxlRSl9Y2xlYXJXaWR0aCgp'@;
put 'e3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCRiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShR'@;
put 'aSksJGUoRXMpLCRlKEk3KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCksaE89MCxTbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyxyZSx1ZSx5ZSxFZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlzLnJv'@;
put 'd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmdsb2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0YWlsU2VydmljZT12LHRoaXMuZGlzcGxheU1vZGU9TSx0aGlzLnZjcj1JLHRoaXMuY29tbW9uU3RyaW5ncz11ZSx0aGlzLml0ZW1zPXllLHRoaXMuZG9jdW1lbnQ9RWUsdGhpcy5z'@;
put 'ZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5kZXRhaWxEaXNhYmxlZD0hMSx0aGlzLmRldGFpbEhpZGRlbj0hMSx0aGlzLnNrZWxldG9uTG9hZGluZz0hMSx0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmV4cGFuZEFuaW1hdGlv'@;
put 'blRyaWdnZXI9ITEsdGhpcy5TRUxFQ1RJT05fVFlQRT1kbCx0aGlzLml0ZW1DaGFuZ2VzPW5ldyBNeCgxKSx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9kZXRhaWxPcGVuTGFiZWw9IiIsdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD0iIix0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD0iIix0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnM9W10sdGhpcy5fc2VsZWN0YWJsZT0hMCxoTysrLHRoaXMuaWQ9ImNsci1kZy1yb3ciK2hPLHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIraE8sdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitoTyx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMucHVzaChYOChmLnJlcGxhY2UsZi5leHBhbmRDaGFuZ2UpLnN1YnNjcmliZSgoW0JlLEdlXSk9PntCZSYmR2U/KHRoaXMucmVwbGFjZWQ9ITAsRy5hZGRDbGFzcyhyZS5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSk6KHRoaXMucmVwbGFj'@;
put 'ZWQ9ITEsRy5yZW1vdmVDbGFzcyhyZS5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xyRGdTZWxlY3RhYmxl'@;
put 'PXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNsckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5pc0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZhbHNlIj09PWF8fCEx'@;
put 'PT09YSksdGhpcy5fc2VsZWN0YWJsZT1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZGwuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0'@;
put 'aW9uLnNlbGVjdGlvblR5cGU9PT1kbC5Ob25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kbC5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGVk'@;
put 'KHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/dGhpcy5fZGV0YWls'@;
put 'T3BlbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlzLl9kZXRhaWxDbG9z'@;
put 'ZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoYSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsP3RoaXMuX3Jvd1NlbGVj'@;
put 'dGlvbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dTZWxlY3Rpb25MYWJlbChhKXt0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD1hfWdldCBfdmlldygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQoX0csdGhpcy52Y3IpLnJvd1ZpZXd9bmdP'@;
put 'bkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgWEwoX0csdGhpcy52Y3IpLHRoaXMuc2VsZWN0aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwhMT09PXRoaXMuY2xyRGdTZWxlY3RhYmxlKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRnQ2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9'@;
put 'Pnt0aGlzLmRnQ2VsbHMuZm9yRWFjaChhPT57YS5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoYS5fdmlldyl9KX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+'@;
put 'e2ZvcihsZXQgZD10aGlzLl9zY3JvbGxhYmxlQ2VsbHMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9jYWxjdWxhdGVkQ2VsbHMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fY2FsY3VsYXRlZENlbGxzLmRldGFjaCgpO2E9PT1YYi5D'@;
put 'QUxDVUxBVEU/KHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fY2FsY3VsYXRlZENlbGxzLmluc2VydChkLl92aWV3KX0pKToodGhpcy5kaXNwbGF5Q2VsbHM9ITAsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2Qu'@;
put 'X3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpfSksdGhpcy5leHBhbmQuYW5pbWF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXI9IXRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcn0pKX1uZ09uRGVzdHJv'@;
put 'eSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dG9nZ2xlKGE9IXRoaXMuc2VsZWN0ZWQpe2EhPT10aGlzLnNlbGVjdGVkJiYodGhpcy5zZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSkpfXRvZ2dsZUV4cGFuZCgpe3RoaXMuZXhw'@;
put 'YW5kLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZEFuaW1hdGlvbi51cGRhdGVTdGFydEhlaWdodCgpLHRoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpKX1jbGVhclJhbmdlcyhhKXthLnNoaWZ0S2V5JiYodGhpcy5kb2N1'@;
put 'bWVudC5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSwtMSE9PXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3giKSYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZSghMCkpKX1zZWxlY3RSb3coYT0hdGhpcy5zZWxlY3RlZCxkKXsiTEFCRUwi'@;
put 'IT09ZC50YXJnZXQudGFnTmFtZSYmKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT10aGlzLlNFTEVDVElPTl9UWVBFLlNpbmdsZT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPXRoaXMuaXRlbTp0aGlzLnRvZ2dsZShhKSl9cmFuZ2VTZWxlY3QoKXtjb25zdCBhPXRoaXMuaXRl'@;
put 'bXMuZGlzcGxheWVkO2lmKCFhKXJldHVybjtjb25zdCBkPWEuaW5kZXhPZih0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KTtpZih0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0JiZ0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmluY2x1ZGVzKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpJiZ0aGlz'@;
put 'LnNlbGVjdGlvbi5zaGlmdFByZXNzZWQmJi0xIT09ZCl7Y29uc3QgaD1hLmluZGV4T2YodGhpcy5pdGVtKSxmPW5ldyBTZXQodGhpcy5zZWxlY3Rpb24uY3VycmVudC5jb25jYXQoYS5zbGljZShNYXRoLm1pbihkLGgpLE1hdGgubWF4KGQsaCkrMSkpKTt0aGlzLnNlbGVjdGlvbi5jbGVhclNl'@;
put 'bGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQucHVzaCguLi5mKX1lbHNlIHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQ9dGhpcy5pdGVtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShxYiksJGUoWWIpLCRlKEdiKSwkZSh0RSksJGUo'@;
put 'dDMpLCRlKHdHKSwkZShUcyksJGUoRXMpLCRlKFFpKSwkZSh0byksJGUodWcpLCRlKG1vKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYXMoaCxyMyw0KSwyJmEpe2xldCBm'@;
put 'O3lpKGY9YmkoKSkmJihkLmRnQ2VsbHM9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihGYShVTCw1KSxGYShTQmUsNSksRmEoTUJlLDUsVHMpLEZhKHhCZSw1LFRzKSxGYShFQmUsNSxUcykpLDImYSl7bGV0IGg7eWkoaD1iaSgpKSYmKGQuZXhwYW5kQW5pbWF0aW9uPWgu'@;
put 'Zmlyc3QpLHlpKGg9YmkoKSkmJihkLmRldGFpbEJ1dHRvbj1oLmZpcnN0KSx5aShoPWJpKCkpJiYoZC5fc3RpY2t5Q2VsbHM9aC5maXJzdCkseWkoaD1iaSgpKSYmKGQuX3Njcm9sbGFibGVDZWxscz1oLmZpcnN0KSx5aShoPWJpKCkpJiYoZC5fY2FsY3VsYXRlZENlbGxzPWguZmlyc3QpfX0s'@;
put 'aG9zdEF0dHJzOlsicm9sZSIsInJvd2dyb3VwIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiYXJpYS1vd25zIixkLmlkKSxUcigiZGF0YWdyaWQtcm93IiwhMCkoImRhdGFncmlkLXJvdy1za2VsZXRvbiIsZC5za2VsZXRvbkxvYWRpbmcpKCJkYXRh'@;
put 'Z3JpZC1zZWxlY3RlZCIsZC5zZWxlY3RlZCkpfSxpbnB1dHM6e2RldGFpbERpc2FibGVkOltWbi5Ob25lLCJjbHJEZ0RldGFpbERpc2FibGVkIiwiZGV0YWlsRGlzYWJsZWQiXSxkZXRhaWxIaWRkZW46W1ZuLk5vbmUsImNsckRnRGV0YWlsSGlkZGVuIiwiZGV0YWlsSGlkZGVuIl0sc2tlbGV0'@;
put 'b25Mb2FkaW5nOltWbi5Ob25lLCJjbHJEZ1NrZWxldG9uTG9hZGluZyIsInNrZWxldG9uTG9hZGluZyJdLGl0ZW06W1ZuLk5vbmUsImNsckRnSXRlbSIsIml0ZW0iXSxjbHJEZ1NlbGVjdGFibGU6ImNsckRnU2VsZWN0YWJsZSIsc2VsZWN0ZWQ6W1ZuLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJz'@;
put 'ZWxlY3RlZCJdLGV4cGFuZGVkOltWbi5Ob25lLCJjbHJEZ0V4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJEZ0RldGFpbE9wZW5MYWJlbDoiY2xyRGdEZXRhaWxPcGVuTGFiZWwiLGNsckRnRGV0YWlsQ2xvc2VMYWJlbDoiY2xyRGdEZXRhaWxDbG9zZUxhYmVsIixjbHJEZ1Jvd1NlbGVjdGlvbkxh'@;
put 'YmVsOiJjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOlt1YShbdEUse3Byb3ZpZGU6VzEsdXNlRXhpc3Rpbmc6dEV9LHtwcm92'@;
put 'aWRlOlB4LHVzZUV4aXN0aW5nOnRFfV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6QUJlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJkZXRhaWwiLCIiXSxbInJvd0NvbnRlbnQiLCIiXSxbImNhbGN1bGF0ZWRDZWxscyIsIiJdLFsic3RpY2t5Q2VsbHMiLCIiXSxbInNjcm9sbGFibGVDZWxscyIs'@;
put 'IiJdLFsiZGV0YWlsQnV0dG9uIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNlZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJt'@;
put 'b3VzZWRvd24iLCJjbGljayJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCIsMywiaWQiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsiY2xhc3Mi'@;
put 'LCJkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJy'@;
put 'b2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQgZGF0YWdy'@;
put 'aWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiLDMsIm5nQ2xhc3MiXSxbMSwiZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzIl0sWyJjbGFzcyIsInNrZWxldG9uLWxvYWRpbmciLDQsIm5n'@;
put 'SWYiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCIsMywibmdDbGFzcyJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJjaGVja2JveCIsMywibmdN'@;
put 'b2RlbENoYW5nZSIsIm5nTW9kZWwiLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJjbGljayIsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwzLCJuZ01v'@;
put 'ZGVsQ2hhbmdlIiwiaWQiLCJuYW1lIiwidmFsdWUiLCJuZ01vZGVsIiwiY2hlY2tlZCIsImRpc2FibGVkIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1m'@;
put 'aXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0'@;
put 'YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUi'@;
put 'LCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwi'@;
put 'dHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiLCJkaWFsb2ciLDMsImRpc2FibGVkIiwiaXMtb3BlbiIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImFyaWEtaGFzcG9w'@;
put 'dXAiLCJkaWFsb2ciLDEsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbiJdLFsxLCJza2VsZXRvbi1sb2FkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9u'@;
put 'KGEsZCl7MSZhJiYoc2EoVEJlKSxndCgwLE9CZSwzLDIsImRpdiIsNikoMSxGQmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDcpKDIsTkJlLDEsMSxudWxsLDgpKDMsVkJlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxnYykoNSxlamUsMTcsMTQsIm5nLXRlbXBsYXRlIixudWxs'@;
put 'LDEsZ2MpLExsKDcsbnVsbCwyKSksMiZhJiYoTWUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLGZlKCksTWUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiZkLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93'@;
put 'U2VsZWN0aW9uTW9kZSYmIWQuZXhwYW5kLmV4cGFuZGFibGUpKX0sZGVwZW5kZW5jaWVzOlt2dSxiYSxCMSxlbyxjbyxmRyxoRyxHbCxNZCxDTCx0bCxXbyxVTCxSZCxyMyxDRyx4cF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIEcxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuV0lEVEg9'@;
put 'MF09IldJRFRIIixjW2MuSElEREVOPTFdPSJISURERU4iLGNbYy5JTklUSUFMSVpFPTJdPSJJTklUSUFMSVpFIixjfShHMXx8e30pO2NvbnN0IHRXZT1PYmplY3Qua2V5cyhHMSkubWFwKGM9PkcxW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50KGMsMTApJiZjIT09RzEuSU5JVElBTElaRSk7'@;
put 'bGV0IGRnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbHVtbnM9W10sdGhpcy5jb2x1bW5zU3RhdGVDaGFuZ2U9bmV3IEpyKG51bGwpLHRoaXMuX2NhY2hlPVtdfWdldCBjb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChhPT5hLnZhbHVlKX1nZXQgaGFz'@;
put 'SGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT5hLmhpZGVhYmxlKS5sZW5ndGg+MH1nZXQgdmlzaWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5TdGF0ZXMuZmlsdGVyKGE9PiFhLmhpZGRlbil9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlz'@;
put 'LmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hlLmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9ey4uLmEs'@;
put 'Y2hhbmdlczp0V2V9O3RoaXMuY29sdW1uc1tkXS5uZXh0KGgpLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlLm5leHQoaCl9KSx0aGlzLl9jYWNoZT1bXX1lbWl0U3RhdGVDaGFuZ2VBdChhLGQpe3RoaXMuY29sdW1uc1thXSYmdGhpcy5lbWl0U3RhdGVDaGFuZ2UodGhpcy5jb2x1bW5zW2FdLGQp'@;
put 'fWVtaXRTdGF0ZUNoYW5nZShhLGQpe2NvbnN0IGg9ey4uLmEudmFsdWUsLi4uZH07YS5uZXh0KGgpLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlLm5leHQoaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMs'@;
put 'ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IG5XZT17aXRlbVNpemU6MzIsbWluQnVmZmVyUHg6MjAwLG1heEJ1ZmZlclB4OjQwMH07bGV0IHpkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyxyZSx1ZSx5ZSxFZSxCZSl7dGhpcy5jaGFuZ2VEZXRl'@;
put 'Y3RvclJlZj1hLHRoaXMuaXRlcmFibGVEaWZmZXJzPWQsdGhpcy5pdGVtcz1oLHRoaXMubmdab25lPWYsdGhpcy5yZW5kZXJlcjI9dix0aGlzLnRlbXBsYXRlUmVmPU0sdGhpcy52aWV3Q29udGFpbmVyUmVmPUksdGhpcy5kaXJlY3Rpb25hbGl0eT1HLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1y'@;
put 'ZSx0aGlzLnZpZXdwb3J0UnVsZXI9dWUsdGhpcy5kYXRhZ3JpZD15ZSx0aGlzLmNvbHVtbnNTZXJ2aWNlPUVlLHRoaXMuaW5qZWN0b3I9QmUsdGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlPW5ldyBLcix0aGlzLnBlcnNpc3RJdGVtcz0hMCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xs'@;
put 'SW5wdXRzPXsuLi5uV2V9LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnRvcEluZGV4PTAsdGhpcy5tdXRhdGlvbkNoYW5nZXM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoR2U9PntHZS5mb3JFYWNoKHN0PT57c3QudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtY29tcGFjdCIp'@;
put 'JiZ0aGlzLml0ZW1TaXplPjI0JiYodGhpcy5pdGVtU2l6ZT0yNCl9KX0pLHRoaXMudmlld1JlcGVhdGVyPW5ldyBlMWUsdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzPXtjZGtWaXJ0dWFsRm9yVHJhY2tCeTpHZT0+R2V9LGguc21hcnRlblVwKCkseWUuZGV0YWlsU2VydmljZS5wcmV2ZW50Rm9j'@;
put 'dXNTY3JvbGw9ITAsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWY9eWUuZWwsdGhpcy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9MjAsdGhpcy5tdXRhdGlvbkNoYW5nZXMub2JzZXJ2ZSh0aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHthdHRyaWJ1dGVGaWx0ZXI6'@;
put 'WyJjbGFzcyJdLGF0dHJpYnV0ZU9sZFZhbHVlOiEwfSksdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3k9bmV3IGpGZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgs'@;
put 'dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5w'@;
put 'dXRzLmNka1ZpcnR1YWxGb3JPZj1hLHRoaXMuaXRlbXMuYWxsPWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVh'@;
put 'bEZvclRyYWNrQnkoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5PWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZSgpe3JldHVybiB0aGlzPy5jZGtWaXJ0dWFsRm9ySW5wdXRzPy5jZGtWaXJ0'@;
put 'dWFsRm9yVGVtcGxhdGV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShhKXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlPWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3Jl'@;
put 'dHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT1kNyhhKSx0aGlz'@;
put 'LnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZX1zZXQgaXRlbVNpemUoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZT1kNyhh'@;
put 'KSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWluQnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNj'@;
put 'cm9sbElucHV0cy5taW5CdWZmZXJQeD1kNyhhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgoYSl7'@;
put 'dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeD1kNyhhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1zZXQgZGF0YVJhbmdlKGEpe2EmJih0aGlzLml0ZW1zLnNtYXJ0JiZ0aGlzLml0ZW1zLnNtYXJ0ZW5Eb3duKCksdGhp'@;
put 'cy50b3RhbEl0ZW1zPWEudG90YWwsdGhpcy51cGRhdGVEYXRhUmFuZ2UoYS5za2lwLGEuZGF0YSkpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5qZWN0'@;
put 'b3IucnVuSW5Db250ZXh0KCgpPT57dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ9dGhpcy5jcmVhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZCh0aGlzLmNoYW5nZURldGVjdG9yUmVmLHRoaXMubmdab25lLHRoaXMucmVuZGVyZXIyLHRoaXMuZGlyZWN0aW9uYWxpdHksdGhp'@;
put 'cy5zY3JvbGxEaXNwYXRjaGVyLHRoaXMudmlld3BvcnRSdWxlcix0aGlzLmRhdGFncmlkRWxlbWVudFJlZix0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSksdGhpcy5jZGtWaXJ0dWFsRm9yPWZ1bmN0aW9uIGlXZShjLGwsYSxkLGgsZil7aWYoKyRpZS5tYWpvcjwxOSlyZXR1cm4gbmV3IExM'@;
put 'KGMsbCxhLGQsaCxmKTt7Y29uc3Qgdj1Eby5jcmVhdGUoe3BhcmVudDpoaShxbCkscHJvdmlkZXJzOlt7cHJvdmlkZTpFYix1c2VWYWx1ZTpofV19KTtyZXR1cm4gRG8uY3JlYXRlKHtwYXJlbnQ6dixwcm92aWRlcnM6W3twcm92aWRlOlRzLHVzZVZhbHVlOmN9LHtwcm92aWRlOndsLHVzZVZh'@;
put 'bHVlOmx9LHtwcm92aWRlOnE1LHVzZVZhbHVlOmF9LHtwcm92aWRlOk1ZLHVzZVZhbHVlOmR9LHtwcm92aWRlOkdhLHVzZVZhbHVlOmZ9LHtwcm92aWRlOkxMLHVzZUNsYXNzOkxMfV19KS5nZXQoTEwpfX0odGhpcy52aWV3Q29udGFpbmVyUmVmLHRoaXMudGVtcGxhdGVSZWYsdGhpcy5pdGVy'@;
put 'YWJsZURpZmZlcnMsdGhpcy52aWV3UmVwZWF0ZXIsdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQsdGhpcy5uZ1pvbmUpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Lm5nT25Jbml0KCl9KSx0aGlzLmdyaWRSb2xlRWxlbWVudD10aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVt'@;
put 'ZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJncmlkIl0nKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLml0ZW1zLmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuaXRlbXMuc21hcnQmJih0aGlzLmNka1ZpcnR1YWxGb3IuY2Rr'@;
put 'VmlydHVhbEZvck9mPWEpfSksdGhpcy5jZGtWaXJ0dWFsRm9yLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnVwZGF0ZUFyaWFSb3dDb3VudChhLmxlbmd0aCl9KSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy50'@;
put 'b3BJbmRleD1hfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5zdWJzY3JpYmUoYT0+e3RoaXMucmVuZGVyZWRSYW5nZUNoYW5nZS5lbWl0KGEpfSksdGhpcy5kYXRhZ3JpZC5yZWZyZXNoLnN1YnNjcmliZShhPT57YS5maWx0ZXJzJiZ0aGlzLnNjcm9s'@;
put 'bFRvSW5kZXgoMCl9KSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnZpZXdSZXBlYXRlci5kZXRhY2goKX0pKX1uZ0RvQ2hlY2soKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nRG9DaGVjaygpLHRoaXMudXBkYXRlQXJpYVJvd0luZGV4'@;
put 'ZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuY2RrVmlydHVhbEZvcj8ubmdPbkRlc3Ryb3koKSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8ubmdPbkRlc3Ryb3koKSx0aGlzLm11dGF0aW9uQ2hhbmdlcz8uZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVu'@;
put 'c3Vic2NyaWJlKCl9KX1zY3JvbGxVcChhLGQ9ImF1dG8iKXt0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy50b3BJbmRleC1hLGQpfXNjcm9sbERvd24oYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRoaXMudG9wSW5kZXgrYSxkKX1zY3JvbGxUb0luZGV4KGEsZD0iYXV0byIpe3RoaXMu'@;
put 'dmlydHVhbFNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KGEsZCl9dXBkYXRlRGF0YVJhbmdlKGEsZCl7bGV0IGg9dGhpcy5jZGtWaXJ0dWFsRm9yT2Y7KCF0aGlzLnBlcnNpc3RJdGVtc3x8IWh8fGg/Lmxlbmd0aCE9PXRoaXMudG90YWxJdGVtcykmJihoPUFycmF5KHRoaXMudG90YWxJ'@;
put 'dGVtcykpLGguc3BsaWNlKGEsZC5sZW5ndGgsLi4uZCksdGhpcy5jZGtWaXJ0dWFsRm9yT2Y9QXJyYXkuZnJvbShoKX11cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl7aWYodGhpcy5jZGtWaXJ0dWFsRm9yKWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKHRoaXMuY2RrVmlydHVhbEZvcklu'@;
put 'cHV0cykpdGhpcy5jZGtWaXJ0dWFsRm9yW2FdIT09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2FdJiYodGhpcy5jZGtWaXJ0dWFsRm9yW2FdPXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSl9dXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpe3RoaXMudmlydHVhbFNjcm9s'@;
put 'bFN0cmF0ZWd5JiZ0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5f'@;
put 'Y2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9dXBkYXRlQXJpYVJvd0NvdW50KGEpe3RoaXMuZ3JpZFJvbGVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiLGEudG9TdHJpbmcoKSl9dXBkYXRlQXJpYVJvd0luZGV4ZXMoKXtmb3IobGV0IGE9'@;
put 'MDthPHRoaXMudmlld0NvbnRhaW5lclJlZi5sZW5ndGg7YSsrKXtjb25zdCBkPXRoaXMudmlld0NvbnRhaW5lclJlZi5nZXQoYSk7ZC5yb290Tm9kZXMuZmluZChNPT4iQ0xSLURHLVJPVyI9PT1NLnRhZ05hbWUpPy5xdWVyeVNlbGVjdG9yKCdbcm9sZT0icm93Il0nKT8uc2V0QXR0cmlidXRl'@;
put 'KCJhcmlhLXJvd2luZGV4IiwoZC5jb250ZXh0LmluZGV4KzEpLnRvU3RyaW5nKCkpfX1jcmVhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZChhLGQsaCxmLHYsTSxJLEcpe2NvbnN0IHJlPUkubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKSx1ZT1JLm5h'@;
put 'dGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIikseWU9SS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3dzIik7bGV0IEJlPTAsR2U9MDtmdW5jdGlvbiBzdCgpe3llLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke0JlfXB4KWAs'@;
put 'eWUuc3R5bGUuaGVpZ2h0PUdlLUJlKyJweCJ9Y29uc3QgcHQ9ZnVuY3Rpb24gcldlKGMsbCxhLGQsaCxmLHYsTSxJKXtyZXR1cm4rJGllLm1ham9yPDE5P25ldyBFYihjLGwsYSxoLGYsdixNLEkpOkRvLmNyZWF0ZSh7cGFyZW50OmhpKHFsKSxwcm92aWRlcnM6W3twcm92aWRlOlFpLHVzZVZh'@;
put 'bHVlOmN9LHtwcm92aWRlOnhvLHVzZVZhbHVlOmx9LHtwcm92aWRlOkdhLHVzZVZhbHVlOmF9LHtwcm92aWRlOkVzLHVzZVZhbHVlOmR9LHtwcm92aWRlOnQxZSx1c2VWYWx1ZTpofSx7cHJvdmlkZTpkbSx1c2VWYWx1ZTpmfSx7cHJvdmlkZTp4Yix1c2VWYWx1ZTp2fSx7cHJvdmlkZTpSTCx1'@;
put 'c2VWYWx1ZTpNfSx7cHJvdmlkZTppMWUsdXNlVmFsdWU6SX0se3Byb3ZpZGU6RWIsdXNlQ2xhc3M6RWJ9XX0pLmdldChFYil9KHtuYXRpdmVFbGVtZW50OnJlfSxhLGQsaCxHLGYsdixNLG51bGwpO3JldHVybiBwdC5fY29udGVudFdyYXBwZXI9e25hdGl2ZUVsZW1lbnQ6e3N0eWxlOntzZXQg'@;
put 'dHJhbnNmb3JtKGR0KXtCZT12b2lkIDA9PT1kdD8wOisvdHJhbnNsYXRlWVwoKFswLTldKylweFwpLy5leGVjKGR0KT8uWzFdLHN0KCl9fX19LHB0LnNldFRvdGFsQ29udGVudFNpemU9ZHQ9PntHZT1kdCx1ZS5zdHlsZS5oZWlnaHQ9YCR7R2V9cHhgLHN0KCl9LHB0fX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh4byksJGUocTUpLCRlKHVnKSwkZShHYSksJGUoRXMpLCRlKHdsKSwkZShUcyksJGUoZG0pLCRlKHhiKSwkZShSTCksJGUod28oKCk9PnhtKSksJGUoZGcpLCRlKHFsKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbIiIsImNsclZpcnR1YWxTY3JvbGwiLCIiXSxbIiIsIkNsclZpcnR1YWxTY3JvbGwiLCIiXV0saW5wdXRzOntwZXJzaXN0SXRlbXM6W1ZuLk5vbmUsImNsclZpcnR1YWxQZXJzaXN0SXRlbXMiLCJwZXJzaXN0SXRlbXMiXSxjZGtWaXJ0dWFsRm9yT2Y6W1ZuLk5vbmUsImNsclZpcnR1'@;
put 'YWxSb3dzT2YiLCJjZGtWaXJ0dWFsRm9yT2YiXSxjZGtWaXJ0dWFsRm9yVHJhY2tCeTpbVm4uTm9uZSwiY2xyVmlydHVhbFJvd3NUcmFja0J5IiwiY2RrVmlydHVhbEZvclRyYWNrQnkiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6W1ZuLk5vbmUsImNsclZpcnR1YWxSb3dzVGVtcGxhdGUiLCJj'@;
put 'ZGtWaXJ0dWFsRm9yVGVtcGxhdGUiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6W1ZuLk5vbmUsImNsclZpcnR1YWxSb3dzVGVtcGxhdGVDYWNoZVNpemUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUiXSxpdGVtU2l6ZTpbVm4uTm9uZSwiY2xyVmlydHVhbFJvd3NJ'@;
put 'dGVtU2l6ZSIsIml0ZW1TaXplIl0sbWluQnVmZmVyUHg6W1ZuLk5vbmUsImNsclZpcnR1YWxSb3dzTWluQnVmZmVyUHgiLCJtaW5CdWZmZXJQeCJdLG1heEJ1ZmZlclB4OltWbi5Ob25lLCJjbHJWaXJ0dWFsUm93c01heEJ1ZmZlclB4IiwibWF4QnVmZmVyUHgiXSxkYXRhUmFuZ2U6W1ZuLk5v'@;
put 'bmUsImNsclZpcnR1YWxEYXRhUmFuZ2UiLCJkYXRhUmFuZ2UiXX0sb3V0cHV0czp7cmVuZGVyZWRSYW5nZUNoYW5nZToicmVuZGVyZWRSYW5nZUNoYW5nZSJ9LGZlYXR1cmVzOlt1YShbdWddKV19KSxjfSkoKSxVZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZp'@;
put 'bHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKFByKCgpPT50aGlzLnN0YXRlKSl9Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRo'@;
put 'aXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9yJiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2YgdU8/e2J5OnRoaXMuc29y'@;
put 'dC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRoaXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtd'@;
put 'O2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShDcihjZyksQ3IoZE8pLENyKHdtKSxDcihKeCkpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMs'@;
put 'ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE1tPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENlbGxzU3RhdGUoKSx0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'cHVzaCh0aGlzLmNlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRDZWxsc1N0YXRlKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldENlbGxzU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMu'@;
put 'Y29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmYS5yZXNldFN0YXRlKHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXS52YWx1ZSl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoZGcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdLFsiY2xyLWRnLXJvdy1kZXRhaWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFzKGgsYyw1KSxhcyhoLHhw'@;
put 'LDQpKSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLmV4cGFuZGFibGVSb3c9Zi5maXJzdCkseWkoZj1iaSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpLHhtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLHJlLHVlLHllLEVlLEJlLEdlLHN0KXt0aGlzLm9yZ2Fu'@;
put 'aXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFibGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9dix0aGlzLnN0YXRlUHJvdmlkZXI9TSx0aGlzLmRpc3BsYXlNb2RlPUksdGhpcy5yZW5kZXJlcj1HLHRoaXMuZGV0YWlsU2VydmljZT1yZSx0aGlz'@;
put 'LmRvY3VtZW50PXVlLHRoaXMuZWw9eWUsdGhpcy5wYWdlPUVlLHRoaXMuY29tbW9uU3RyaW5ncz1CZSx0aGlzLmtleU5hdmlnYXRpb249R2UsdGhpcy56b25lPXN0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0'@;
put 'aW9uQXJpYUxhYmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4'@;
put 'cGFuZGFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMucmVmcmVzaD1uZXcgS3IoITEpLHRoaXMuY3VzdG9tU2VsZWN0QWxsRW5h'@;
put 'YmxlZD0hMSx0aGlzLmN1c3RvbVNlbGVjdEFsbD1uZXcgS3IsdGhpcy5TRUxFQ1RJT05fVFlQRT1kbCx0aGlzLl9zdWJzY3JpcHRpb25zPVtdO2NvbnN0IHB0PV91KCk7dGhpcy5zZWxlY3RBbGxJZD0iY2xyLWRnLXNlbGVjdC1hbGwtIitwdCxyZS5pZD1wdH1nZXQgbG9hZGluZygpe3JldHVy'@;
put 'biB0aGlzLml0ZW1zLmxvYWRpbmd9c2V0IGxvYWRpbmcoYSl7dGhpcy5pdGVtcy5sb2FkaW5nPWF9c2V0IHNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9YT9kbC5NdWx0aTpkbC5Ob25lLHRoaXMuc2VsZWN0aW9uLnVwZGF0ZUN1cnJlbnQoYSwhMSl9c2V0IHNpbmds'@;
put 'ZVNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9ZGwuU2luZ2xlLGE/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1hOnRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUmJih0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPW51bGwpfXNldCBjbHJEZ1ByZXNl'@;
put 'cnZlU2VsZWN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLnByZXNlcnZlU2VsZWN0aW9uPWF9c2V0IHJvd1NlbGVjdGlvbk1vZGUoYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZT1hfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMudHJhY2tCeT1hfWdldCBhbGxTZWxlY3RlZCgpe3Jl'@;
put 'dHVybiB0aGlzLnNlbGVjdGlvbi5pc0FsbFNlbGVjdGVkKCl9c2V0IGFsbFNlbGVjdGVkKGEpe3RoaXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD90aGlzLmN1c3RvbVNlbGVjdEFsbC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnRvZ2dsZUFsbCgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMu'@;
put 'aXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD10aGlzLnJvd3MubWFwKGQ9PmQuaXRlbSkpO2NvbnN0IGE9dGhpcy5yb3dzLmNoYW5nZXMucGlwZShqMShkPT54eChkcyhkLm1hcChoPT5oLml0ZW0pKSxYOChkLm1hcChoPT5oLml0ZW1DaGFuZ2VzKSkucGlwZSh1bSgwKSkpKSk7dGhpcy5f'@;
put 'c3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9ZCl9KSx0aGlzLnJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pntmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGgtMTtkPj0wO2QtLSl0aGlzLl9kaXNw'@;
put 'bGF5ZWRSb3dzLmdldChkKS5kZXN0cm95ZWQmJnRoaXMuX2Rpc3BsYXllZFJvd3MucmVtb3ZlKGQpO2lmKHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0pLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnZpcnR1YWxTY3JvbGwp'@;
put 'e2NvbnN0IGQ9dGhpcy5rZXlOYXZpZ2F0aW9uLmdldEFjdGl2ZUNlbGwoKTtkJiZ0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT50aGlzLmtleU5hdmlnYXRpb24uc2V0QWN0aXZlQ2VsbChkKSl9KX19KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5rZXlO'@;
put 'YXZpZ2F0aW9uLmluaXRpYWxpemVLZXlHcmlkKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy51cGRhdGVEZXRhaWxTdGF0ZSgpLHRoaXMucmVmcmVzaC5lbWl0KHRoaXMuc3RhdGVQcm92aWRlci5zdGF0ZSksdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RhdGVQcm92aWRlci5j'@;
put 'aGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMucmVmcmVzaC5lbWl0KGEpKSx0aGlzLnNlbGVjdGlvbi5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZGwuU2luZ2xlP3RoaXMuc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSk6dGhpcy5zZWxlY3Rp'@;
put 'b24uc2VsZWN0aW9uVHlwZT09PWRsLk11bHRpJiZ0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpfSksdGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCksdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXN8fHRoaXMuZGF0YWdy'@;
put 'aWRUYWJsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KSx0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuZGV0YWNoKCk7Zm9y'@;
put 'KGxldCBkPXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0aW9uUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGlvblJv'@;
put 'd3MuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5kZXRhY2goKTthPT09WGIuRElTUExBWT8odGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1'@;
put 'bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0pKToodGhpcy5yZW5kZXJlci5hZGRD'@;
put 'bGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fY2FsY3Vs'@;
put 'YXRpb25Sb3dzLmluc2VydChkLl92aWV3KX0pKX0pKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goeGQodGhpcy5kb2N1bWVudC5ib2R5LCJrZXlkb3duIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVj'@;
put 'dGlvbi5zaGlmdFByZXNzZWQ9ITApfSkseGQodGhpcy5kb2N1bWVudC5ib2R5LCJrZXl1cCIpLnN1YnNjcmliZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSExKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNo'@;
put 'KGE9PmEudW5zdWJzY3JpYmUoKSl9dG9nZ2xlQWxsU2VsZWN0ZWQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0QWxsQ2hlY2tib3g/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX11cGRhdGVEZXRhaWxTdGF0ZSgpe2lmKHRo'@;
put 'aXMuZGV0YWlsU2VydmljZS5zdGF0ZSYmdGhpcy5kZXRhaWxTZXJ2aWNlLmlzT3Blbil7Y29uc3QgYT10aGlzLnJvd3MuZmluZChkPT50aGlzLml0ZW1zLnRyYWNrQnkoZC5pdGVtKT09PXRoaXMuaXRlbXMudHJhY2tCeSh0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUpKTthP3RoaXMuZGV0YWls'@;
put 'U2VydmljZS5vcGVuKGEuaXRlbSxhLmRldGFpbEJ1dHRvbi5uYXRpdmVFbGVtZW50KTp0aGlzLnZpcnR1YWxTY3JvbGx8fHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRldGFpbFNlcnZpY2UuY2xvc2UoKX0pfX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShJNyksJGUodWcpLCRlKEdiKSwkZShxYiksJGUoWWIpLCRlKFVkZSksJGUod0cpLCRlKEVzKSwkZSh0MyksJGUobW8pLCRlKFFpKSwkZSh3bSksJGUodG8pLCRlKG9PKSwkZShHYSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFzKGgsemRlLDUpLGFzKGgsS2IsNSksYXMoaCx5Ryw1KSxhcyhoLFI3LDQpLGFzKGgsU20sNCkpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQudmlydHVhbFNjcm9s'@;
put 'bD1mLmZpcnN0KSx5aShmPWJpKCkpJiYoZC5pdGVyYXRvcj1mLmZpcnN0KSx5aShmPWJpKCkpJiYoZC5wbGFjZWhvbGRlcj1mLmZpcnN0KSx5aShmPWJpKCkpJiYoZC5jb2x1bW5zPWYpLHlpKGY9YmkoKSkmJihkLnJvd3M9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihG'@;
put 'YSh0amUsNSxRaSksRmEobmplLDUsUWkpLEZhKHJqZSw1LFRzKSxGYShpamUsNSxUcyksRmEoYWplLDUsVHMpLEZhKHNqZSw1LFRzKSxGYShvamUsNSxUcyksRmEobGplLDUpKSwyJmEpe2xldCBoO3lpKGg9YmkoKSkmJihkLmRhdGFncmlkPWguZmlyc3QpLHlpKGg9YmkoKSkmJihkLmRhdGFn'@;
put 'cmlkVGFibGU9aC5maXJzdCkseWkoaD1iaSgpKSYmKGQuc2Nyb2xsYWJsZUNvbHVtbnM9aC5maXJzdCkseWkoaD1iaSgpKSYmKGQuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zPWguZmlyc3QpLHlpKGg9YmkoKSkmJihkLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnM9aC5maXJzdCkseWko'@;
put 'aD1iaSgpKSYmKGQuX2Rpc3BsYXllZFJvd3M9aC5maXJzdCkseWkoaD1iaSgpKSYmKGQuX2NhbGN1bGF0aW9uUm93cz1oLmZpcnN0KSx5aShoPWJpKCkpJiYoZC5zZWxlY3RBbGxDaGVja2JveD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZU'@;
put 'cigiZGF0YWdyaWQtaG9zdCIsITApKCJkYXRhZ3JpZC1kZXRhaWwtb3BlbiIsZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbil9LGlucHV0czp7bG9hZGluZ01vcmVJdGVtczpbVm4uTm9uZSwiY2xyTG9hZGluZ01vcmVJdGVtcyIsImxvYWRpbmdNb3JlSXRlbXMiXSxjbHJEZ1NpbmdsZVNlbGVjdGlv'@;
put 'bkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVs'@;
put 'IixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsY3VzdG9tU2VsZWN0QWxsRW5hYmxlZDpbVm4uTm9uZSwiY2xyRGdDdXN0b21TZWxlY3RBbGxFbmFibGVkIiwiY3VzdG9tU2VsZWN0QWxsRW5hYmxlZCJdLGxvYWRpbmc6W1ZuLk5vbmUsImNsckRnTG9hZGlu'@;
put 'ZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbVm4uTm9uZSwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sc2luZ2xlU2VsZWN0ZWQ6W1ZuLk5vbmUsImNsckRnU2luZ2xlU2VsZWN0ZWQiLCJzaW5nbGVTZWxlY3RlZCJdLGNsckRnUHJlc2VydmVTZWxlY3Rpb246ImNsckRnUHJlc2VydmVTZWxl'@;
put 'Y3Rpb24iLHJvd1NlbGVjdGlvbk1vZGU6W1ZuLk5vbmUsImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6W1ZuLk5vbmUsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFu'@;
put 'Z2UiLHNpbmdsZVNlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTaW5nbGVTZWxlY3RlZENoYW5nZSIscmVmcmVzaDoiY2xyRGdSZWZyZXNoIixjdXN0b21TZWxlY3RBbGw6ImNsckRnQ3VzdG9tU2VsZWN0QWxsIn0sZmVhdHVyZXM6W3VhKFtxYixkTyxjZyx3bSx1ZyxJNyxZYixHYixKeCx0MyxVZGUs'@;
put 'dkcsZGcsd0csb09dKV0sbmdDb250ZW50U2VsZWN0b3JzOnVqZSxkZWNsczozNSx2YXJzOjksY29uc3RzOltbImRhdGFncmlkIiwiIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyIsIiJdLFsiZGlzcGxheWVkUm93cyIsIiJdLFsicHJvamVjdGVkQ2Fs'@;
put 'Y3VsYXRpb25Db2x1bW5zIiwiIl0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInNlbGVjdEFsbENoZWNrYm94IiwiIl0sWzEsImRhdGFncmlkLW91dGVyLXdyYXBwZXIiXSxbMSwiZGF0YWdyaWQtaW5uZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZCJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFw'@;
put 'cGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlkLXRhYmxlIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1y'@;
put 'b3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ctc3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVt'@;
put 'bmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhl'@;
put 'ZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicm9sZSIs'@;
put 'InByZXNlbnRhdGlvbiIsMSwiZGF0YWdyaWQtcm93cyJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXNwaW5uZXIiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUiXSxbMSwiZGF0'@;
put 'YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDQs'@;
put 'Im5nSWYiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1j'@;
put 'b2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIs'@;
put 'ImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWzEsImRhdGFncmlkLXJvdy1sb2Fk'@;
put 'aW5nIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGNqZSksV3IoMCksZGUoMSwiZGl2Iiw3KSgyLCJkaXYiLDgpKDMsImRpdiIsOSwwKSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExLDEpKDgsImRpdiIsMTIp'@;
put 'KDksImRpdiIsMTMpKDEwLCJkaXYiLDE0KSgxMSwiZGl2IiwxNSksZ3QoMTIsaGplLDMsMSwiZGl2IiwxNikoMTMsZmplLDQsMSwiZGl2IiwxNykoMTQscGplLDQsMSwiZGl2IiwxOCkoMTUsZ2plLDQsMSwiZGl2IiwxOSksaGUoKSxkZSgxNiwiZGl2IiwyMCksTGwoMTcsbnVsbCwyKSxoZSgp'@;
put 'KCkoKSgpLGRlKDE5LCJkaXYiLDIxKSxndCgyMCxtamUsNSwxLCJjbHItZGctcm93IiwyMiksTGwoMjEsbnVsbCwzKSxndCgyMyx2amUsNSwxLCJjbHItZGctcm93IiwyMiksV3IoMjQsMSksZ3QoMjUseWplLDEsMCwiY2xyLWRnLXBsYWNlaG9sZGVyIiwyMyksaGUoKSgpKCkoKSxXcigyNiwy'@;
put 'KSxndCgyNyxiamUsMywwLCJkaXYiLDI0KSxoZSgpLFdyKDI4LDMpLGhlKCksZGUoMjksImRpdiIsMjUpKDMwLCJkaXYiLDI2KSxMbCgzMSxudWxsLDQpLGhlKCksTGwoMzMsbnVsbCw1KSxoZSgpKSwyJmEmJihmZSgzKSxocigiYXJpYS1oaWRkZW4iLCEhZC5kZXRhaWxTZXJ2aWNlLmlzT3Bl'@;
put 'bnx8bnVsbCksZmUoOSksTWUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCksTWUoIm5nSWYiLGQucm93'@;
put 'QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93KSxmZSgpLE1lKCJuZ0lmIixkLmV4cGFuZGFibGVSb3dzLmhhc0V4cGFuZGFibGVSb3d8fGQuZGV0YWlsU2VydmljZS5lbmFibGVkKSxmZSg1KSxNZSgibmdJZiIsZC5sb2FkaW5nTW9yZUl0ZW1zKSxmZSgzKSxNZSgibmdJZiIsZC5sb2Fk'@;
put 'aW5nTW9yZUl0ZW1zKSxmZSgyKSxNZSgibmdJZiIsIWQucGxhY2Vob2xkZXIpLGZlKDIpLE1lKCJuZ0lmIixkLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltiYSxjbyxNZCx0bCxXbyxSZCxyMyx5RyxTbSxDRyx4cCxNbSxrNyxEN10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgbFdl'@;
put 'PWM9PmM7bGV0IFpkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMuYWxsU2VsZWN0ZWQ9bmV3IEtyfWdldCBjbHJBbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLmFsbFNlbGVjdGVkLmFzT2JzZXJ2'@;
put 'YWJsZSgpfWdldCBhbGxIaWRlYWJsZXNWaXNpYmxlKCl7cmV0dXJuIDA9PT10aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZpbHRlcihhPT5hLnZhbHVlLmhpZGRlbikubGVuZ3RofXNlbGVjdEFsbCgpe3RoaXMuaGlkZWFibGVDb2x1bW5zKCkuZm9yRWFjaChhPT50aGlzLmNvbHVtbnNTZXJ2aWNl'@;
put 'LmVtaXRTdGF0ZUNoYW5nZShhLHtoaWRkZW46ITEsY2hhbmdlczpbRzEuSElEREVOXX0pKSx0aGlzLmFsbFNlbGVjdGVkLm5leHQoITApfWhpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGE9PmEudmFsdWUuaGlkZWFibGUpfX1yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh0byksJGUoZGcpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3Rl'@;
put 'ZCJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInN3aXRjaC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLE9lKDEpLGhlKCkpLDImYSYmKE1lKCJkaXNhYmxlZCIsZC5hbGxIaWRlYWJsZXNWaXNpYmxlKSxmZSgpLExyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp'@;
put 'LFdkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWQsdGhpcy5wb3BvdmVySWQ9X3UoKSx0aGlzLm9wZW5TdGF0ZT0hMSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6ZDEuVkVSVElDQUwsc2lkZTpPMi5C'@;
put 'RUZPUkUsYW5jaG9yOk9vLlNUQVJULGNvbnRlbnQ6T28uU1RBUlR9LHRoaXMudHJhY2tCeUZuPWxXZSx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1'@;
put 'bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1'@;
put 'ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxl'@;
put 'bmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRl'@;
put 'Q2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0cxLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHRvKSwkZShkZyksJGUoc2MpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZGYSh3amUs'@;
put 'NSxRaSksMiZhKXtsZXQgaDt5aShoPWJpKCkpJiYoZC5hbGxTZWxlY3RlZEVsZW1lbnQ9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNvbHVtbi1zd2l0Y2gtd3JhcHBlciIsITApKCJhY3RpdmUiLGQub3BlblN0YXRlKX0sZmVhdHVy'@;
put 'ZXM6W3lkKFthZ10pXSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1siYWxsU2VsZWN0ZWQiLCIiXSxbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVt'@;
put 'bi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9z'@;
put 'ZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNoLWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImNsclBvcG92ZXJD'@;
put 'bG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9zZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1j'@;
put 'b250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3RlciJdLFszLCJjbHJBbGxTZWxlY3RlZCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxl'@;
put 'ZCIsIm5nTW9kZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMSksT2UoMSksaGUoKSxndCgyLE1qZSwxNSw5LCJkaXYiLDIpKSwyJmEmJihocigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLWV4'@;
put 'cGFuZGVkIixkLm9wZW5TdGF0ZSkoImFyaWEtaGFzcG9wdXAiLCJtZW51IiksZmUoKSxMcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMucGlja0NvbHVtbnMsIiAiKSxmZSgpLE1lKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0'@;
put 'UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1FzLEIxLEJiLGVvLGNvLElkLHhoLE1kLHRsLFdvLEJ4LFUxZSxVeCx6eCxaZGVdLGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLEdkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLGEmJmEucmVnaXN0ZXIoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnVucmVnaXN0ZXIo'@;
put 'KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoR2IsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dfSksY30pKCksZk89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'KXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMuZGV0YWlsU2VydmljZT1kLHRoaXMuY29sdW1uc1NlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLlNFTEVDVElPTl9UWVBFPWRsfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5oYXNIaWRl'@;
put 'YWJsZUNvbHVtbnN9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHFiKSwkZSh0MyksJGUoZGcpLCRlKHRvKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1mb290ZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1mb290ZXIiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOlRqZSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLXNlbGVjdCJd'@;
put 'LFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKEVqZSksZ3Qo'@;
put 'MCxBamUsOCwyLCJuZy1jb250YWluZXIiLDApKDEsRGplLDQsMSwibmctY29udGFpbmVyIiwwKSxXcigyKSksMiZhJiYoTWUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpJiZkLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aD4wKSxmZSgp'@;
put 'LE1lKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W2JhLGNvLElkLHhoLFdkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgU0c9bmV3IFN0KCJDT0xVTU5fU1RBVEUiKSxoV2U9e3Byb3ZpZGU6U0csdXNlRmFjdG9yeTpmdW5jdGlvbiBkV2Uo'@;
put 'KXtyZXR1cm4gbmV3IEpyKHtjaGFuZ2VzOltdfSl9fTtsZXQgbkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBhZ2U9YSx0aGlzLnBhZ2VTaXplT3B0aW9uc0lkPV91KCl9bmdPbkluaXQoKXsoIXRoaXMucGFnZVNpemVPcHRpb25zfHwwPT09dGhpcy5wYWdlU2l6ZU9wdGlv'@;
put 'bnMubGVuZ3RoKSYmKHRoaXMucGFnZVNpemVPcHRpb25zPVt0aGlzLnBhZ2Uuc2l6ZV0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh3bSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnZS1zaXplIl1d'@;
put 'LGlucHV0czp7cGFnZVNpemVPcHRpb25zOltWbi5Ob25lLCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbVm4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zSWQiLCJwYWdlU2l6ZU9wdGlvbnNJZCJdfSxuZ0NvbnRlbnRTZWxlY3RvcnM6'@;
put 'eXMsZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbMywiZm9yIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs'@;
put 'ZCl7MSZhJiYoc2EoKSxkZSgwLCJsYWJlbCIsMCksV3IoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNlbGVjdCIsMikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBnaShkLnBhZ2Uuc2l6ZSxmKXx8KGQucGFnZS5zaXplPWYpLGZ9KSxndCg0LElqZSwyLDIsIm9wdGlv'@;
put 'biIsMyksaGUoKSgpKSwyJmEmJihNZSgiZm9yIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxmZSgzKSxUcigiY2xyLXBhZ2Utc2l6ZS1zZWxlY3QiLCEwKSxNZSgiaWQiLGQucGFnZVNpemVPcHRpb25zSWQpLGZpKCJuZ01vZGVsIixkLnBhZ2Uuc2l6ZSksZmUoKSxNZSgibmdGb3JPZiIsZC5wYWdl'@;
put 'U2l6ZU9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOltRcyxjbyxEMixJMixrMix0bCxXb10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkscE89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5wYWdlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5kZXRhaWxTZXJ2aWNlPWgs'@;
put 'dGhpcy5jdXJyZW50Q2hhbmdlZD1uZXcgS3IoITEpLGEuYWN0aXZhdGVkPSEwfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLnBhZ2Uuc2l6ZX1zZXQgcGFnZVNpemUoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnNpemU9YSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhp'@;
put 'cy5wYWdlLnRvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnRvdGFsSXRlbXM9YSl9Z2V0IGxhc3RQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0fXNldCBsYXN0UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2Uu'@;
put 'bGFzdD1hKX1nZXQgY3VycmVudFBhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnR9c2V0IGN1cnJlbnRQYWdlKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5jdXJyZW50PWEpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmZpcnN0SXRlbX1nZXQgbGFzdEl0'@;
put 'ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmxhc3RJdGVtfWdldCBtaWRkbGVQYWdlcygpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50PjEmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudC0xKSxhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQpLHRoaXMucGFnZS5jdXJyZW50PHRoaXMu'@;
put 'cGFnZS5sYXN0JiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQrMSksYX1uZ09uSW5pdCgpe3RoaXMucGFnZS5zaXplfHwodGhpcy5wYWdlLnNpemU9MTApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb249dGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jdXJyZW50Q2hhbmdlZC5lbWl0'@;
put 'KGEpKX1uZ09uRGVzdHJveSgpe3RoaXMucGFnZS5yZXNldFBhZ2VTaXplKCEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9wYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJldmlvdXMoKXt0aGlzLnBhZ2UucHJldmlvdXMoKX1uZXh0KCl7dGhpcy5wYWdlLm5leHQoKX12'@;
put 'ZXJpZnlDdXJyZW50UGFnZShhKXtwYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCkhPT10aGlzLnBhZ2UuY3VycmVudCYmKGEudGFyZ2V0LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50KX11cGRhdGVDdXJyZW50UGFnZShhKXtjb25zdCBkPXBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTtpc05h'@;
put 'TihkKXx8KHRoaXMucGFnZS5jdXJyZW50PWQ8MT8xOmQ+dGhpcy5wYWdlLmxhc3Q/dGhpcy5wYWdlLmxhc3Q6ZCksdGhpcy5jdXJyZW50UGFnZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnQudG9TdHJpbmcoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUod20pLCRlKHRvKSwkZSh0MykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnaW5hdGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLG5FLDUpLDImYSl7bGV0IGY7'@;
put 'eWkoZj1iaSgpKSYmKGQuX3BhZ2VTaXplQ29tcG9uZW50PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZGYShSamUsNSksMiZhKXtsZXQgaDt5aShoPWJpKCkpJiYoZC5jdXJyZW50UGFnZUlucHV0UmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJwYWdpbmF0aW9uIiwhMCl9LGlucHV0czp7ZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQ6W1ZuLk5vbmUsImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOltWbi5Ob25lLCJjbHJEZ1BhZ2VT'@;
put 'aXplIiwicGFnZVNpemUiXSx0b3RhbEl0ZW1zOltWbi5Ob25lLCJjbHJEZ1RvdGFsSXRlbXMiLCJ0b3RhbEl0ZW1zIl0sbGFzdFBhZ2U6W1ZuLk5vbmUsImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOltWbi5Ob25lLCJjbHJEZ1BhZ2UiLCJjdXJyZW50UGFnZSJdfSxv'@;
put 'dXRwdXRzOntjdXJyZW50Q2hhbmdlZDoiY2xyRGdQYWdlQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOk9qZSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sicmVhZE9ubHkiLCIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUi'@;
put 'LDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiY2xp'@;
put 'Y2siLCJkaXNhYmxlZCJdLFsxLCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJl'@;
put 'Y3Rpb24iLCJsZWZ0Il0sWyJ0eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1uZXh0'@;
put 'IiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbGFzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsInVwIl0s'@;
put 'WyJ0eXBlIiwidGV4dCIsMSwicGFnaW5hdGlvbi1jdXJyZW50IiwiY2xyLWlucHV0IiwzLCJrZXlkb3duLmVudGVyIiwiYmx1ciIsInNpemUiLCJ2YWx1ZSJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3QiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShMamUp'@;
put 'LGd0KDAsVmplLDUsMiwibmctY29udGFpbmVyIiwyKSgxLEJqZSwxNCwxMCwibmctY29udGFpbmVyIiwyKSksMiZhJiYoTWUoIm5nSWYiLCFkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSxmZSgpLE1lKCJuZ0lmIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSl9LGRlcGVuZGVuY2llczpbYmEsZW9d'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEw3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPXYsdGhpcy5jb2x1bW5zU2VydmljZT1NLHRo'@;
put 'aXMuY29sdW1uU3RhdGU9SSx0aGlzLnJlc2l6ZUVtaXR0ZXI9bmV3IEtyLHRoaXMud2lkdGhTZXQ9ITEsdGhpcy5hdXRvU2V0PSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBzKG4zLkNMRUFSX1dJRFRIUykuc3Vic2Ny'@;
put 'aWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29t'@;
put 'cHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5y'@;
put 'ZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCRiKSx0aGlz'@;
put 'LmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwkYiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEw'@;
put 'KX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZUUpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGVFKX1jbGVhcldpZHRoKCl7dGhpcy53aWR0aFNldCYmIXRoaXMuY29sdW1u'@;
put 'UmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwpLHRoaXMuYXV0b1NldCYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsJGIpfWRldGVjdFN0cmljdFdp'@;
put 'ZHRoKCl7cmV0dXJuIHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5P3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uud2lkdGhBZnRlclJlc2l6ZTp0aGlzLmF1dG9TZXQ/MDp0aGlzLmRvbUFkYXB0ZXIudXNlckRlZmluZWRXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfWNv'@;
put 'bXB1dGVXaWR0aChhKXtsZXQgZD1hO3JldHVybiBkfHwoZD10aGlzLmRvbUFkYXB0ZXIuc2Nyb2xsV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KSksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoUWkpLCRlKEVzKSwkZShJNyksJGUocG0p'@;
put 'LCRlKG1HKSwkZShkZyksJGUoU0cpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOlt1YShbbUcsaFdlXSldfSksY30pKCksbVdlPSgoKT0+e2Ns'@;
put 'YXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3'@;
put 'aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IHZXZT1jPT5l'@;
put 'bChjKT9uZXcgcG06bmV3IG1XZTtsZXQgSmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcscmUsdWUseWUsRWUpe3RoaXMuZGF0YWdyaWQ9YSx0aGlzLm9yZ2FuaXplcj1kLHRoaXMuaXRlbXM9aCx0aGlzLnBhZ2U9Zix0aGlzLmVsPXYsdGhpcy5yZW5kZXJlcj1N'@;
put 'LHRoaXMudGFibGVTaXplU2VydmljZT1HLHRoaXMuY29sdW1uc1NlcnZpY2U9cmUsdGhpcy5uZ1pvbmU9dWUsdGhpcy5rZXlOYXZpZ2F0aW9uPXllLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9RWUsdGhpcy5faGVpZ2h0U2V0PSExLHRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCx0aGlz'@;
put 'LnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1udWxsLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQuZmlsdGVyUmVuZGVyU3RlcHMobjMuQ09NUFVURV9DT0xVTU5fV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMu'@;
put 'Y29tcHV0ZUhlYWRlcnNXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hlaWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goSS5zdGF0ZUNoYW5nZS5zdWJz'@;
put 'Y3JpYmUoQmU9PnRoaXMudG9nZ2xlRGV0YWlsUGFuZShCZSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCkpfW5nT25Jbml0KCl7dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFu'@;
put 'Z2Uuc3Vic2NyaWJlKGE9PnRoaXMuY29sdW1uU3RhdGVDaGFuZ2VkKGEpKSxudWxsPT09dGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudCYmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbYV0pPT57KHRoaXMuZWwubmF0aXZlRWxl'@;
put 'bWVudC5vZmZzZXRQYXJlbnR8fGEuaXNJbnRlcnNlY3RpbmcpJiZ0aGlzLmNvbHVtbnNTaXplc1N0YWJsZSYmKHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0'@;
put 'KCkpfSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5oZWFkZXJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57'@;
put 'dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnRhYmxlU2l6ZVNlcnZpY2UudGFibGU9dGhpcy5lbH1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnNob3VsZFN0YWJp'@;
put 'bGl6ZUNvbHVtbnMmJnRoaXMuc3RhYmlsaXplQ29sdW1ucygpLHRoaXMuc2hvdWxkQ29tcHV0ZUhlaWdodCgpJiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpfSl9KX1uZ09uRGVzdHJveSgpe3Ro'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpfXRvZ2dsZURldGFpbFBhbmUoYSl7dGhpcy5oZWFkZXJzJiYoYSYmIXRoaXMuY29sdW1uc1NlcnZpY2UuaGFzQ2FjaGUoKT8odGhpcy5jb2x1'@;
put 'bW5zU2VydmljZS5jYWNoZSgpLHRoaXMuY29sdW1uc1NlcnZpY2UudmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgoZCxoKT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChkLmNvbHVtbkluZGV4LHtjaGFuZ2VzOltHMS5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8'@;
put 'dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChhLGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMu'@;
put 'Y29sdW1uc1NlcnZpY2UuY29sdW1ucy5mb3JFYWNoKChhLGQpPT57dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7Y2hhbmdlczpbRzEuSU5JVElBTElaRV0sY29sdW1uSW5kZXg6ZH0pfSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRTZXQm'@;
put 'JnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5kZXJlci5z'@;
put 'ZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSksdGhpcy5faGVpZ2h0U2V0PSEwfXJlc2V0RGF0YWdyaWRIZWlnaHQoKXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiaGVpZ2h0IiwiIiksdGhpcy5faGVpZ2h0U2V0PSExfWNvbXB1'@;
put 'dGVIZWFkZXJzV2lkdGgoKXtjb25zdCBhPXRoaXMuaGVhZGVycy5sZW5ndGgsZD10aGlzLmhlYWRlcnMubWFwKGY9PmYuZ2V0Q29sdW1uV2lkdGhTdGF0ZSgpKTtsZXQgaD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZix2KT0+e2NvbnN0IE09e2NoYW5nZXM6W0cxLldJRFRIXSwuLi5kW3Zd'@;
put 'fTtNLnN0cmljdFdpZHRofHwoaD0hMSksYT09PXYrMSYmaCYmKE0uc3RyaWN0V2lkdGg9MCksdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdCh2LE0pfSl9Y29sdW1uU3RhdGVDaGFuZ2VkKGEpe2lmKCF0aGlzLmhlYWRlcnN8fG51bGw9PWEuY29sdW1uSW5kZXgpcmV0dXJu'@;
put 'O2NvbnN0IGQ9YS5jb2x1bW5JbmRleDthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGg9Pntzd2l0Y2goaCl7Y2FzZSBHMS5XSURUSDp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldFdpZHRoKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmPy5jZWxscy5sZW5n'@;
put 'dGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiYoZi5jZWxscy5nZXQoZCkuc2V0V2lkdGgoYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldFdpZHRoKGEpKX0pO2JyZWFrO2Nhc2UgRzEuSElEREVOOnRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVu'@;
put 'KGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmLmNlbGxzJiZmLmNlbGxzLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldEhpZGRlbihhKSxmLmV4cGFuZGFibGVSb3c/LmNlbGxzLmdldChkKT8uc2V0SGlkZGVuKGEpKX0pLHRoaXMudXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHko'@;
put 'KSx0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCk7YnJlYWs7Y2FzZSBHMS5JTklUSUFMSVpFOmEuaGlkZWFibGUmJmEuaGlkZGVuJiYodGhpcy5oZWFkZXJzLmdldChkKS5zZXRIaWRkZW4oYSksdGhpcy5yb3dzLmZvckVhY2goZj0+e2Yuc2V0Q2VsbHNTdGF0ZSgpLGYuZXhwYW5k'@;
put 'YWJsZVJvdz8uc2V0Q2VsbHNTdGF0ZSgpfSkpfX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLmNvbHVtbnNTaXplc1N0YWJsZXx8dGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoPjAmJih0aGlzLm9yZ2FuaXplci5yZXNpemUoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMCl9dXBkYXRl'@;
put 'Q29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKXtjb25zdCBhPXRoaXMuZGF0YWdyaWQuY29sdW1ucy5maWx0ZXIoZD0+IWQuaXNIaWRkZW4pO2EuZm9yRWFjaCgoZCxoKT0+e2g9PT1hLmxlbmd0aC0xP2Quc2hvd1NlcGFyYXRvcj0hMTpkLnNob3dTZXBhcmF0b3J8fChkLnNob3dTZXBhcmF0'@;
put 'b3I9ITApfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHhtKSwkZShJNyksJGUodWcpLCRlKHdtKSwkZShRaSksJGUoRXMpLCRlKHQzKSwkZSh2RyksJGUoZGcpLCRlKEdhKSwkZShvTyksJGUoeG8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhcyhoLEw3LDQpLGFzKGgsTW0sNCkpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQuaGVhZGVycz1mKSx5aShmPWJpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6'@;
put 'W3VhKFt7cHJvdmlkZTpwbSx1c2VGYWN0b3J5OnZXZSxkZXBzOltpc119XSldfSksY30pKCkseVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyh0UGUsblBlLEN4LHJQZSxOMGUsaVBlLFYwZSxhUGUsc1BlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsR1plLFFMLFRvLFJkZSxrYyxWWSxGMiwkWmUsTGRlLEhiLFp4LFhZXX0pLGN9KSgpLCRkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWNvbnRlbnQiXV19KSxjfSkoKSxNRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZ2VuZXJhdGVkSWQ9bnVsbCx0aGlzLl9pZD1udWxsfWdldCBpZCgp'@;
put 'e3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9InN0cmluZyI9PXR5cGVvZiBhJiYiIiE9PWE/YTp0aGlzLl9nZW5lcmF0ZWRJZCsiIn1uZ09uSW5pdCgpe3RoaXMuX2dlbmVyYXRlZElkPSJjbHItc3RhY2stbGFiZWwtIitfdSgpLHRoaXMuaWR8fCh0aGlzLl9pZD10aGlzLl9n'@;
put 'ZW5lcmF0ZWRJZCsiIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stbGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhy'@;
put 'KCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEtkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs'@;
put 'ZCl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmV4cGFuZGVkPSExLHRoaXMuZXhwYW5kYWJsZT0hMSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5mb2N1c2VkPSExLHRoaXMudW5pcXVlSWQ9X3UoKSx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW49MCx0'@;
put 'aGlzLl9mdWxseUluaXRpYWxpemVkPSExLHRoaXMuX2NoYW5nZWQ9ITEsYSYmYS5hZGRDaGlsZCgpfXNldCBzZXRDaGFuZ2VkVmFsdWUoYSl7dGhpcy5fY2hhbmdlZD1hLHRoaXMucGFyZW50JiZ0aGlzLl9mdWxseUluaXRpYWxpemVkJiYoYT90aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVu'@;
put 'Kys6dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbi0tKX1nZXQgZ2V0Q2hhbmdlZFZhbHVlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZWR8fHRoaXMuX2NoYW5nZWRDaGlsZHJlbj4wJiYhdGhpcy5leHBhbmRlZH1nZXQgb25TdGFja0xhYmVsRm9jdXMoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxl'@;
put 'JiYhdGhpcy5leHBhbmRlZCYmdGhpcy5mb2N1c2VkfWdldCBsYWJlbGxlZEJ5SWQoKXtyZXR1cm4gdGhpcy5zdGFja0Jsb2NrVGl0bGUuaWR9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmFyaWFMZXZlbD90aGlzLmFyaWFMZXZlbCsiIjp0aGlzLnBhcmVudD8iNCI6IjMifWdldCBj'@;
put 'YXJldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZGVkPyJkb3duIjoicmlnaHQifWdldCByb2xlKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iYnV0dG9uIjpudWxsfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/IjAiOm51bGx9Z2V0IGFyaWFFeHBhbmRlZCgp'@;
put 'e3JldHVybiB0aGlzLmV4cGFuZGFibGU/dGhpcy5leHBhbmRlZD8idHJ1ZSI6ImZhbHNlIjpudWxsfW5nT25Jbml0KCl7dGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMH1hZGRDaGlsZCgpe3RoaXMuZXhwYW5kYWJsZT0hMH10b2dnbGVFeHBhbmQoYSl7WGRlKGEpfHx0aGlzLmV4cGFuZGFibGUm'@;
put 'Jih0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Z2V0U3RhY2tDaGlsZHJlbklkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/YGNsci1zdGFjay1jaGlsZHJlbi0ke3RoaXMudW5pcXVlSWR9YDpudWxsfXByZXZlbnRE'@;
put 'ZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGEpe1hkZShhKXx8YS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZShjLDEyKSwkZSh0bykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2st'@;
put 'YmxvY2siXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYXMoaCxNRyw1KSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLnN0YWNrQmxvY2tUaXRsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xl'@;
put 'IiwiaGVhZGluZyIpKCJhcmlhLWxldmVsIixkLmhlYWRpbmdMZXZlbCksVHIoInN0YWNrLWJsb2NrIiwhMCkoInN0YWNrLWJsb2NrLWV4cGFuZGVkIixkLmV4cGFuZGVkKSgic3RhY2stYmxvY2stZXhwYW5kYWJsZSIsZC5leHBhbmRhYmxlKSgic3RhY2stYmxvY2stY2hhbmdlZCIsZC5nZXRD'@;
put 'aGFuZ2VkVmFsdWUpKCJvbi1mb2N1cyIsZC5vblN0YWNrTGFiZWxGb2N1cykpfSxpbnB1dHM6e2V4cGFuZGVkOltWbi5Ob25lLCJjbHJTYkV4cGFuZGVkIiwiZXhwYW5kZWQiXSxleHBhbmRhYmxlOltWbi5Ob25lLCJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOltW'@;
put 'bi5Ob25lLCJjbHJTdGFja1ZpZXdMZXZlbCIsImFyaWFMZXZlbCJdLHNldENoYW5nZWRWYWx1ZTpbVm4uTm9uZSwiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxl'@;
put 'Y3RvcnM6V2plLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJjbGljayIsImtleXVwLmVudGVyIiwia2V5dXAuc3BhY2UiLCJrZXlkb3duLnNwYWNlIiwiZm9jdXMiLCJibHVyIiwiaWQiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJs'@;
put 'b2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhl'@;
put 'aWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShaamUpLGRlKDAsImRpdiIsMCksRnQoImNsaWNrIixmdW5jdGlvbihm'@;
put 'KXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChmKX0pKCJrZXl1cC5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLnByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGYpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITB9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSExfSksZ3QoMSxZamUsMSwxLCJjZHMtaWNvbiIsMSkoMixHamUsMiwxLCJzcGFu'@;
put 'IiwyKSxkZSgzLCJkaXYiLDMpLFdyKDQpLGhlKCksZGUoNSwiZGl2Iiw0KSxXcig2LDEpLGhlKCkoKSxkZSg3LCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDUpLGd0KDgsJGplLDIsNCwiZGl2Iiw2KSxoZSgpKSwyJmEmJihNZSgiaWQiLGQudW5pcXVlSWQpLGhyKCJyb2xlIixkLnJvbGUp'@;
put 'KCJ0YWJpbmRleCIsZC50YWJJbmRleCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5nZXRTdGFja0NoaWxkcmVuSWQoKSksZmUoKSxNZSgibmdJZiIsZC5leHBhbmRhYmxlKSxmZSgpLE1lKCJuZ0lmIixkLmdldENoYW5nZWRWYWx1ZSksZmUoNSks'@;
put 'TWUoImNsckV4cGFuZFRyaWdnZXIiLGQuZXhwYW5kZWQpLGZlKCksTWUoIm5nSWYiLGQuZXhwYW5kZWQpKX0sZGVwZW5kZW5jaWVzOltiYSxlbyxVTF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7ZnVuY3Rpb24gWGRlKGMpe2NvbnN0IGw9Yz8udGFyZ2V0O3JldHVybiEhbD8udGFnTmFtZSYm'@;
put 'WyJJTlBVVCIsIlRFWFRBUkVBIiwiQlVUVE9OIiwiQSIsIlNFTEVDVCIsIk9QVElPTiJdLmluY2x1ZGVzKGwudGFnTmFtZSl9bGV0IHhHPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WGplLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShLamUpLFdyKDApLGRlKDEsImRpdiIsMCksV3IoMiwxKSxoZSgp'@;
put 'KX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksX1dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFby5hZGRJY29ucyhDYil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo'@;
put 'e2ltcG9ydHM6W0xhLGtjLFRvLExkZV19KSxjfSkoKSxPNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RhYmxlPSExLHRoaXMuZWFnZXI9ITAsdGhpcy5jaGlsZHJlbkZldGNoZWQ9bmV3IEdufX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBxZGU9e3Byb3ZpZGU6TzcsdXNlRmFjdG9yeTpmdW5jdGlvbiB3V2UoYyl7cmV0dXJuIGN8fG5ldyBPN30sZGVwczpbW25ldyBSMSxuZXcgdWQsTzddXX07bGV0IEpkZT0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmV4cGFuZFNlcnZpY2U9ZCxkJiYodGhpcy5zdWJzY3JpcHRpb249ZC5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKGg9PnshaCYmdGhpcy5wYXJlbnQmJiFhLmVhZ2VyJiZhLnJlY3Vyc2lvbiYm'@;
put 'dGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2hvdWxkUmVuZGVyKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmKHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyfHwhdGhpcy5leHBh'@;
put 'bmRTZXJ2aWNlfHx0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQpfWdldENvbnRleHQoYSl7cmV0dXJueyRpbXBsaWNpdDphLm1vZGVsLGNsck1vZGVsOmF9fW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c2V0QXJpYVJv'@;
put 'bGVzKCl7dGhpcy5yb2xlPXRoaXMucGFyZW50PyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoTzcpLCRlKFcxLDgpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJlY3Vyc2l2ZS1jaGlsZHJl'@;
put 'biJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInJvbGUiLGQucm9sZSl9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9m'@;
put 'Il0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmZ3QoMCx0emUsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmTWUoIm5nSWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1FzLGJh'@;
put 'LEIxXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgV3U9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRFUk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oV3V8fHt9KTtjbGFz'@;
put 'cyBRZGV7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmckPW5ldyBKcighMSksdGhpcy5zZWxlY3RlZD1uZXcgSnIoV3UuVU5TRUxFQ1RFRCksdGhpcy5fbG9hZGluZz0hMX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2FkaW5nKGwpe3RoaXMuX2xvYWRpbmc9bCx0'@;
put 'aGlzLmxvYWRpbmckLm5leHQobCl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuISghdGhpcy5fZGlzYWJsZWQmJiF0aGlzLnBhcmVudD8uZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXt0aGlzLl9kaXNhYmxlZD1sfWRlc3Ryb3koKXt0aGlzLnNlbGVjdGVkLmNvbXBsZXRlKCl9c2V0U2VsZWN0ZWQo'@;
put 'bCxhLGQpe2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLGQmJmwhPT1XdS5JTkRFVEVSTUlOQVRFJiZ0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuLmZvckVhY2goaD0+e2guZGlzYWJsZWR8fGguc2V0U2VsZWN0ZWQobCwhMSwhMCl9KSxhJiZ0aGlz'@;
put 'LnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX10b2dnbGVTZWxlY3Rpb24obCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5zZXRTZWxlY3RlZCh0aGlzLnNlbGVjdGVkLnZhbHVlPT09V3UuU0VMRUNURUQ/V3UuVU5TRUxFQ1RFRDpXdS5TRUxFQ1RFRCwh'@;
put 'MCxsKX1fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCl7Y29uc3QgbD10aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpO2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRl'@;
put 'U2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfWNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpe2xldCBsPSExLGE9ITE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jaGlsZHJlbilzd2l0Y2goZC5zZWxlY3RlZC52YWx1ZSl7Y2FzZSBXdS5JTkRFVEVSTUlOQVRFOmlmKGQuZGlzYWJsZWQp'@;
put 'Y29udGludWU7cmV0dXJuIFd1LklOREVURVJNSU5BVEU7Y2FzZSBXdS5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIFd1LklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwpcmV0dXJuIFd1LklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9XdS5VTlNFTEVDVEVEOld1LlNFTEVD'@;
put 'VEVEOld1LlVOU0VMRUNURUR9fWNsYXNzIGdPIGV4dGVuZHMgUWRle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKCksdGhpcy5nZXRDaGlsZHJlbj1kLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWgsdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITEsdGhpcy5fY2hpbGRyZW49W10sdGhpcy5tb2RlbD1s'@;
put 'LHRoaXMucGFyZW50PWF9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZmV0Y2hDaGlsZHJlbigpLHRoaXMuX2NoaWxkcmVufXNldCBjaGlsZHJlbihsKXt0aGlzLl9jaGlsZHJlbj1sfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo'@;
put 'KSxzdXBlci5kZXN0cm95KCl9Y2xlYXJDaGlsZHJlbigpe3RoaXMuX2NoaWxkcmVuLmZvckVhY2gobD0+bC5kZXN0cm95KCkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbix0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMX1mZXRjaENoaWxkcmVuKCl7aWYodGhpcy5jaGlsZHJlbkZldGNoZWQpcmV0dXJu'@;
put 'O2NvbnN0IGw9dGhpcy5nZXRDaGlsZHJlbih0aGlzLm1vZGVsKTshZnVuY3Rpb24gQ1dlKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufShsKT9XTShsKT8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc3Vic2NyaXB0aW9uPWwuc3Vic2NyaWJlKGE9Pnt0aGlzLl9jaGlsZHJl'@;
put 'bj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSk6dGhpcy5fY2hpbGRyZW49bD90aGlzLndyYXBDaGlsZHJlbihsKTpbXToodGhpcy5sb2FkaW5nPSEwLGwudGhlbihhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkp'@;
put 'LHRoaXMuY2hpbGRyZW5GZXRjaGVkPSEwLHRoaXMuZmVhdHVyZXNTZXJ2aWNlJiZ0aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQubmV4dCgpfXdyYXBDaGlsZHJlbihsKXtyZXR1cm4gbC5tYXAoYT0+bmV3IGdPKGEsdGhpcyx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVy'@;
put 'ZXNTZXJ2aWNlKSl9fWxldCBlaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWQsdGhpcy5jZHI9aH1uZ09uQ2hhbmdlcygpe2xldCBhO2E9QXJyYXkuaXNBcnJheSh0aGlzLm5vZGVzKT90aGlzLm5vZGVzLm1h'@;
put 'cChkPT5uZXcgZ08oZCxudWxsLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKTpbbmV3IGdPKHRoaXMubm9kZXMsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKV0sdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9ufHwodGhpcy5jaGls'@;
put 'ZHJlbkZldGNoU3Vic2NyaXB0aW9uPXRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5waXBlKHVtKDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPXt0ZW1wbGF0ZTp0aGlzLnRlbXBs'@;
put 'YXRlLHJvb3Q6YX19bmdPbkRlc3Ryb3koKXt0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24mJnRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSgkZSh3bCksJGUoTzcp'@;
put 'LCRlKHhvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJlY3Vyc2l2ZUZvciIsIiIsImNsclJlY3Vyc2l2ZUZvck9mIiwiIl1dLGlucHV0czp7bm9kZXM6W1ZuLk5vbmUsImNsclJlY3Vyc2l2ZUZvck9mIiwibm9kZXMiXSxnZXRDaGlsZHJlbjpbVm4uTm9u'@;
put 'ZSwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbYmxdfSksY30pKCksRUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgR24sdGhpcy5fZm9jdXNDaGFuZ2U9bmV3IEdufWdldCBmb2N1c1JlcXVl'@;
put 'c3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5fZm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZv'@;
put 'Y3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVudCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05v'@;
put 'ZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVBYm92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJv'@;
put 'dmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEu'@;
put 'cGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZp'@;
put 'c2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gaDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlz'@;
put 'LmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlz'@;
put 'LnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVudDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFd'@;
put 'KTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGls'@;
put 'ZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtm'@;
put 'b3IobGV0IHY9aC5pbmRleE9mKGQpKzE7djxoLmxlbmd0aDt2Kyspe2NvbnN0IEk9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW3ZdKTtpZihJKXJldHVybiBJfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9k'@;
put 'ZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQpe3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9k'@;
put 'OnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRo'@;
put 'aXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
put 'LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgU1dlIGV4dGVuZHMgUWRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5wYXJlbnQ9bCxsJiZsLl9hZGRDaGlsZCh0aGlzKSx0aGlzLmNoaWxkcmVuPVtdfWRlc3Ryb3koKXt0aGlz'@;
put 'LnBhcmVudCYmdGhpcy5wYXJlbnQuX3JlbW92ZUNoaWxkKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fYWRkQ2hpbGQobCl7dGhpcy5jaGlsZHJlbi5wdXNoKGwpfV9yZW1vdmVDaGlsZChsKXtjb25zdCBhPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihsKTthPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGlj'@;
put 'ZShhLDEpfX1sZXQgaGc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsPWF9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKX1hY3RpdmF0ZSgpe3RoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5l'@;
put 'bC5uYXRpdmVFbGVtZW50LmNsaWNrJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoUWkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJjbHItdHJlZW5vZGUt'@;
put 'bGluayJdXX0pLGN9KSgpLFBkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuZXhwYW5kU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMuZm9jdXNNYW5hZ2VyPU0s'@;
put 'dGhpcy5lbGVtZW50UmVmPUksdGhpcy5zZWxlY3RlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEtyLHRoaXMuU1RBVEVTPVd1LHRoaXMuaXNNb2RlbExvYWRpbmc9ITEsdGhpcy5ub2RlSWQ9X3UoKSx0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD0tMSx0'@;
put 'aGlzLnNraXBFbWl0Q2hhbmdlPSExLHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIiLHRoaXMudHlwZUFoZWFkS2V5RXZlbnQ9bmV3IEduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9tb2RlbD1oLnJlY3Vyc2lvbj9HLnZpZXc/Ry52aWV3LmNvbnRleHQuY2xyTW9kZWw6Ry5fbFZpZXdb'@;
put 'OF0uY2xyTW9kZWw6bmV3IFNXZShkP2QuX21vZGVsOm51bGwpLHRoaXMuX21vZGVsLm5vZGVJZD10aGlzLm5vZGVJZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX21vZGVsLmRpc2FibGVkPWF9Z2V0IHNlbGVjdGVkKCl7'@;
put 'cmV0dXJuIHRoaXMuX21vZGVsLnNlbGVjdGVkLnZhbHVlfXNldCBzZWxlY3RlZChhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlPSEwLChudWxsPT09YXx8dHlwZW9mIGE+InUiKSYmKGE9V3UuVU5TRUxFQ1RFRCksImJvb2xlYW4iPT10eXBlb2YgYSYmKGE9YT9XdS5TRUxFQ1RF'@;
put 'RDpXdS5VTlNFTEVDVEVEKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSEwLHRoaXMuX21vZGVsLnNldFNlbGVjdGVkKGEsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPWF9c2V0IGNsckZvclR5cGVBaGVhZChhKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudD10aGUoYXx8dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENv'@;
put 'bnRlbnQpfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PVd1LlNFTEVDVEVEOiEhdGhpcy50cmVlTm9kZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5v'@;
put 'ZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVuZ3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMu'@;
put 'X21vZGVsLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fbW9kZWwuc2VsZWN0ZWQucGlwZShXbCgoKT0+IXRoaXMuc2tpcEVtaXRDaGFuZ2UpKS5zdWJzY3JpYmUoYT0+e3RoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChhKX0pKSx0aGlzLnN1YnNj'@;
put 'cmlwdGlvbnMucHVzaCh0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KGEpLHRoaXMuX21vZGVsLmV4cGFuZGVkPWF9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c01hbmFnZXIuZm9jdXNSZXF1'@;
put 'ZXN0LnN1YnNjcmliZShhPT57dGhpcy5ub2RlSWQ9PT1hJiZ0aGlzLmZvY3VzVHJlZU5vZGUoKX0pLHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jaGVja1RhYkluZGV4KGEpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLmxv'@;
put 'YWRpbmckLnBpcGUodW0oMCkpLnN1YnNjcmliZShhPT50aGlzLmlzTW9kZWxMb2FkaW5nPWEpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnR5cGVBaGVhZEtleUV2ZW50LnBpcGUodW0oMjAwKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLmZvY3VzTWFu'@;
put 'YWdlci5mb2N1c05vZGVTdGFydHNXaXRoKGEsdGhpcy5fbW9kZWwpLHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX21vZGVsLnRleHRDb250ZW50fHwodGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9dGhlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVF'@;
put 'bGVtZW50LnRleHRDb250ZW50KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRh'@;
put 'YmxlOiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7'@;
put 'ZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhp'@;
put 'cy5mb2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goRlkoYSksTDIoYS5rZXkpKXtjYXNlIHBhLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgcGEuQXJy'@;
put 'b3dEb3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIHBhLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2UgcGEuQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJl'@;
put 'YWs7Y2FzZSBwYS5Ib21lOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHBhLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNl'@;
put 'IHBhLkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2UgcGEuU3BhY2U6Y2FzZSBwYS5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2Rl'@;
put 'bC50ZXh0Q29udGVudCYmZnVuY3Rpb24gZFVlKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNhc2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtl'@;
put 'eUV2ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJp'@;
put 'bmRleCIsYS50b1N0cmluZygpKX1jaGVja1RhYkluZGV4KGEpe2VsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMubm9kZUlkIT09YSYmLTEhPT10aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleCYmdGhpcy5zZXRUYWJJbmRleCgtMSl9dG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpe3Ro'@;
put 'aXMuZGlzYWJsZWR8fCh0aGlzLmlzRXhwYW5kYWJsZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpKX1leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpe3RoaXMuZGlzYWJs'@;
put 'ZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuaXNQYXJlbnQmJnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTp0aGlzLmlzRXhwYW5kYWJsZSgpJiYodGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSEwKSl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5k'@;
put 'aXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUGFyZW50KHRoaXMuX21vZGVsKSl9dHJpZ2dlckRlZmF1bHRBY3Rpb24oKXt0aGlzLnRyZWVOb2RlTGluaz90aGlzLnRyZWVOb2RlTGluay5hY3RpdmF0'@;
put 'ZSgpOnRoaXMuaXNTZWxlY3RhYmxlKCkmJnRoaXMuX21vZGVsLnRvZ2dsZVNlbGVjdGlvbih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKGlzKSwkZShjLDEyKSwkZShPNyksJGUoVzEpLCRlKHRv'@;
put 'KSwkZShFRyksJGUoUWkpLCRlKERvKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10cmVlLW5vZGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYXMoaCxoZyw0KSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLnRyZWVOb2RlTGlu'@;
put 'a0xpc3Q9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJkZhKG56ZSw3LFFpKSwyJmEpe2xldCBoO3lpKGg9YmkoKSkmJihkLmNvbnRlbnRDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci10cmVl'@;
put 'LW5vZGUiLCEwKSgiZGlzYWJsZWQiLGQuX21vZGVsLmRpc2FibGVkKX0saW5wdXRzOntleHBhbmRhYmxlOltWbi5Ob25lLCJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLGRpc2FibGVkOltWbi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sc2VsZWN0ZWQ6W1ZuLk5vbmUsImNs'@;
put 'clNlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbVm4uTm9uZSwiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdLGNsckZvclR5cGVBaGVhZDoiY2xyRm9yVHlwZUFoZWFkIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2U6ImNsclNlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xy'@;
put 'RXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJlczpbdWEoW3FkZSxXMSx7cHJvdmlkZTpQeCx1c2VFeGlzdGluZzpXMX1dKV0sbmdDb250ZW50U2VsZWN0b3JzOml6ZSxkZWNsczoxMix2YXJzOjEyLGNvbnN0czpbWyJjb250ZW50Q29udGFpbmVyIiwiIl0sWyJ0cmVlbm9kZUNvbnRlbnQiLCIiXSxb'@;
put 'InJvbGUiLCJ0cmVlaXRlbSIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIiLDMsImtleWRvd24iLCJmb2N1cyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLCJjbGFzcyIsImNsci10cmVlbm9k'@;
put 'ZS1jYXJldCIsMywiZGlzYWJsZWQiLCJjbGljayIsImZvY3VzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3JhcHBlciBjbHItdHJlZW5vZGUtY2hlY2tib3giLDQsIm5nSWYiXSxb'@;
put 'ImNsYXNzIiwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiLDQsIm5nSWYiXSxbMSwiY2xyLXRyZWVub2RlLWNoaWxkcmVuIl0sWzMsInBhcmVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlbm9kZS1j'@;
put 'YXJldCIsMywiY2xpY2siLCJmb2N1cyIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQtaWNvbiJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXIiLCJzcGlubmVyIl0sWzEsImNsci1j'@;
put 'aGVja2JveC13cmFwcGVyIiwiY2xyLXRyZWVub2RlLWNoZWNrYm94Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItY2hlY2tib3giLDMsImNoYW5nZSIsImZvY3VzIiwiaWQiLCJkaXNhYmxlZCIsImNoZWNrZWQiLCJpbmRl'@;
put 'dGVybWluYXRlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2V1cCJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJjbHItc3Itb25seSJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1PbigpO3NhKHJ6ZSksZGUoMCwiZGl2IiwyLDApLEZ0KCJrZXlkb3duIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5vbktleURvd24odikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChoKSxDdChkLmJyb2FkY2Fz'@;
put 'dEZvY3VzT25Db250YWluZXIoKSl9KSxndCgyLGF6ZSwyLDIsImJ1dHRvbiIsMykoMyxzemUsMiwwLCJkaXYiLDQpKDQsb3plLDQsNiwiZGl2Iiw1KSg1LGx6ZSwyLDEsImRpdiIsNikoNix1emUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGdjKSxoZSgpLGRlKDgsImRpdiIsNyksV3IoOSks'@;
put 'V3IoMTAsMSksV3QoMTEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDgpLGhlKCl9MiZhJiYoVHIoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJhcmlhLWRpc2FibGVkIixkLmRpc2FibGVkKSgiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4'@;
put 'cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxlY3RlZCksZmUoMiksTWUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGQuZXhwYW5kU2VydmljZS5sb2FkaW5nfHxk'@;
put 'LmlzTW9kZWxMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoMyksTWUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8i'@;
put 'ZXhwYW5kZWQiOiJjb2xsYXBzZWQiKSxocigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLGZlKDMpLE1lKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbYmEsQjEsZW8sSmRlXSxlbmNhcHN1bGF0aW9u'@;
put 'OjIsZGF0YTp7YW5pbWF0aW9uOlt3aCgidG9nZ2xlQ2hpbGRyZW5BbmltIixbdHUoImNvbGxhcHNlZCA9PiBleHBhbmRlZCIsW2xvKHtoZWlnaHQ6MH0pLHcwKDIwMCxsbyh7aGVpZ2h0OiIqIn0pKV0pLHR1KCJleHBhbmRlZCA9PiBjb2xsYXBzZWQiLFtsbyh7aGVpZ2h0OiIqIn0pLHcwKDIw'@;
put 'MCxsbyh7aGVpZ2h0OjB9KSldKSxUTCgiZXhwYW5kZWQiLGxvKHtoZWlnaHQ6IioiLCJvdmVyZmxvdy15IjoidmlzaWJsZSJ9KSksVEwoImNvbGxhcHNlZCIsbG8oe2hlaWdodDowfSkpXSldfX0pLGN9KSgpO2Z1bmN0aW9uIHRoZShjKXtyZXR1cm4gYy50b0xvY2FsZUxvd2VyQ2FzZSgpLnRy'@;
put 'aW0oKX1sZXQgQWg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuZWw9Zix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5faXNNdWx0aVNlbGVj'@;
put 'dGFibGU9ITE7Y29uc3QgTT12LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT54ZChmLm5hdGl2ZUVsZW1lbnQsImZvY3VzaW4iKS5zdWJzY3JpYmUoST0+e0kudGFyZ2V0PT09Zi5uYXRpdmVFbGVtZW50JiYoZC5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKSxoLnJlbW92ZUF0dHJpYnV0ZShmLm5hdGl2'@;
put 'ZUVsZW1lbnQsInRhYmluZGV4IikpfSkpO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKE0pfXNldCBsYXp5KGEpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyPSFhfWdldCBpc011bHRpU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9pc011bHRpU2VsZWN0YWJsZX1uZ0FmdGVyQ29udGVudElu'@;
put 'aXQoKXt0aGlzLnNldFJvb3ROb2RlcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucm9vdE5vZGVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRNdWx0aVNlbGVjdGFibGUoKSx0aGlzLnNldFJvb3ROb2RlcygpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp'@;
put 'b25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRNdWx0aVNlbGVjdGFibGUoKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlJiZ0aGlzLnJvb3ROb2Rlcy5sZW5ndGg+MD8odGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITAsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUo'@;
put 'dGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsInRydWUiKSk6KHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiKSl9c2V0Um9v'@;
put 'dE5vZGVzKCl7dGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlLnJvb3ROb2RlTW9kZWxzPXRoaXMucm9vdE5vZGVzLm1hcChhPT5hLl9tb2RlbCkuZmlsdGVyKGE9PiFhLnBhcmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKE83KSwkZShFRyks'@;
put 'JGUoRXMpLCRlKFFpKSwkZShHYSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLFBkLDQpLDImYSl7bGV0IGY7eWkoZj1iaSgpKSYmKGQucm9vdE5vZGVzPWYpfX0saG9z'@;
put 'dEF0dHJzOlsidGFiaW5kZXgiLCIwIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIiwidHJlZSIpfSxpbnB1dHM6e2xhenk6W1ZuLk5vbmUsImNsckxhenkiLCJsYXp5Il19LGZlYXR1cmVzOlt1YShbcWRlLEVHXSldLG5nQ29udGVudFNlbGVj'@;
put 'dG9yczp5cyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFszLCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCksZ3QoMSxkemUsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoZmUoKSxN'@;
put 'ZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uKSl9LGRlcGVuZGVuY2llczpbYmEsSmRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxFV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VvLmFkZEljb25zKENiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsVG8sVlldfSksY30pKCksVFdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v'@;
put 'ZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3lXZSxfV2UsRVdlXX0pLGN9KSgpO2NvbnN0IEFXZT1bImluZm8iLCJ3YXJuaW5nIiwiZGFuZ2VyIiwic3VjY2VzcyIsIm5ldXRyYWwiLCJ1bmtub3duIiwibG9hZGluZyJdO2xldCBURz0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKGEpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuZGVmYXVsdEljb25TaGFwZT0iaW5mby1zdGFuZGFyZCIsdGhpcy5fYWxlcnRJY29uU2hhcGU9IiIsdGhpcy5fYWxlcnRUeXBlPSJpbmZvIn1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuX2FsZXJ0VHlwZX1zZXQgYWxlcnRU'@;
put 'eXBlKGEpe0FXZS5pbmRleE9mKGEpPi0xJiYodGhpcy5fYWxlcnRUeXBlPWEpfWdldCBhbGVydEljb25TaGFwZSgpe3JldHVybiIiPT09dGhpcy5fYWxlcnRJY29uU2hhcGU/dGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkuc2hhcGU6dGhpcy5fYWxlcnRJY29uU2hhcGV9'@;
put 'c2V0IGFsZXJ0SWNvblNoYXBlKGEpe2E/YSE9PXRoaXMuX2FsZXJ0SWNvblNoYXBlJiYodGhpcy5fYWxlcnRJY29uU2hhcGU9YSk6dGhpcy5fYWxlcnRJY29uU2hhcGU9IiJ9Z2V0IGFsZXJ0SWNvblRpdGxlKCl7cmV0dXJuIHRoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVydFR5cGUp'@;
put 'LnRpdGxlfWljb25JbmZvRnJvbVR5cGUoYSl7Y29uc3QgZD17c2hhcGU6IiIsY3NzQ2xhc3M6IiIsdGl0bGU6IiJ9O3N3aXRjaChhKXtjYXNlIndhcm5pbmciOmQuc2hhcGU9Indhcm5pbmctc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25T'@;
put 'dHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0iZXJyb3Itc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LWRhbmdlciIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYW5nZXI7YnJlYWs7Y2FzZSJzdWNjZXNzIjpkLnNoYXBlPSJzdWNjZXNz'@;
put 'LXN0YW5kYXJkIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7Y2FzZSJuZXV0cmFsIjpkLnNoYXBlPSJub3RlIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5n'@;
put 'cy5rZXlzLm5ldXRyYWw7YnJlYWs7Y2FzZSJ1bmtub3duIjpkLnNoYXBlPSJoZWxwIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7Y2FzZSJsb2FkaW5nIjpkLnNoYXBlPSJsb2FkaW5nIixkLmNzc0NsYXNz'@;
put 'PSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0'@;
put 'dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKENyKHRvKSl9LGMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbU89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcg'@;
put 'R259Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBh'@;
put 'Y3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxl'@;
put 'cnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1'@;
put 'YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEsdGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNj'@;
put 'cmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhpcy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6'@;
put 'dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRo'@;
put 'aXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZl'@;
put 'QWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxyRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmljb25TZXJ2aWNlPWEsdGhpcy5jZHI9'@;
put 'ZCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5yZW5kZXJlcj12LHRoaXMuaG9zdEVsZW1lbnQ9TSx0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10'@;
put 'aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTGlnaHR3ZWlnaHQ9ITF9Z2V0IGlzTGlnaHR3ZWlnaHQoKXtyZXR1'@;
put 'cm4gdGhpcy5faXNMaWdodHdlaWdodH1zZXQgaXNMaWdodHdlaWdodChhKXt0aGlzLl9pc0xpZ2h0d2VpZ2h0PWEsdGhpcy5jb25maWdBbGVydFR5cGUodGhpcy5fb3JpZ0FsZXJ0VHlwZSl9Z2V0IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZX1zZXQgYWxl'@;
put 'cnRUeXBlKGEpe3RoaXMuX29yaWdBbGVydFR5cGU9YSx0aGlzLmNvbmZpZ0FsZXJ0VHlwZShhKX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVydEljb25TaGFwZT1hfXNldCBjbG9zZWQoYSl7YSYmIXRoaXMuX2Nsb3NlZD90aGlzLmNsb3NlKCk6IWEmJnRoaXMu'@;
put 'X2Nsb3NlZCYmdGhpcy5vcGVuKCl9Z2V0IGFsZXJ0Q2xhc3MoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5pY29uSW5mb0Zyb21UeXBlKHRoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlKS5jc3NDbGFzc31nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGEpe2Eh'@;
put 'PT10aGlzLl9oaWRkZW4mJih0aGlzLl9oaWRkZW49YSx0aGlzLl9oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVF'@;
put 'bGVtZW50LCJhbGVydC1oaWRkZW4iKSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaGlkZGVu'@;
put 'PXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0IT09dGhpc30pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29uZmlnQWxlcnRUeXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlPWF9b3Blbigpe3Ro'@;
put 'aXMuX2Nsb3NlZD0hMSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm9wZW4oKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITEpfWNsb3NlKCl7aWYoIXRoaXMuY2xvc2FibGUpcmV0dXJuO2NvbnN0IGE9dGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uY3Vy'@;
put 'cmVudEFsZXJ0PT09dGhpczt0aGlzLl9jbG9zZWQ9ITAsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uYWN0aXZlQWxlcnRzJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpKCRlKFRHKSwkZSh4byksJGUobU8sOCksJGUodG8pLCRlKEVzKSwkZShRaSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQiXV0saW5wdXRzOntpc1NtYWxsOltWbi5Ob25lLCJjbHJBbGVydFNpemVTbWFsbCIsImlzU21hbGwi'@;
put 'XSxjbG9zYWJsZTpbVm4uTm9uZSwiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbVm4uTm9uZSwiY2xyQWxlcnRBcHBMZXZlbCIsImlzQXBwTGV2ZWwiXSxjbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwiLGlzTGlnaHR3ZWln'@;
put 'aHQ6W1ZuLk5vbmUsImNsckFsZXJ0TGlnaHR3ZWlnaHQiLCJpc0xpZ2h0d2VpZ2h0Il0sYWxlcnRUeXBlOltWbi5Ob25lLCJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbVm4uTm9uZSwiY2xyQWxlcnRJY29uIiwiYWxlcnRJY29uU2hhcGUiXSxjbG9zZWQ6W1Zu'@;
put 'Lk5vbmUsImNsckFsZXJ0Q2xvc2VkIiwiY2xvc2VkIl19LG91dHB1dHM6e19jbG9zZWRDaGFuZ2VkOiJjbHJBbGVydENsb3NlZENoYW5nZSJ9LGZlYXR1cmVzOlt1YShbVEddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlzLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsImFsZXJ0Iiwz'@;
put 'LCJuZ0NsYXNzIiwiYWxlcnQtc20iLCJhbGVydC1saWdodHdlaWdodCIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFzcyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0s'@;
put 'WyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLGZ6ZSw0LDgsImRpdiIsMCkpLDImYSYmTWUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W3Z1'@;
put 'LGJhLGVvXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxuaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmljb25TZXJ2aWNlPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKFRHKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMs'@;
put 'c2VsZWN0b3JzOltbImNsci1hbGVydC1pdGVtIl1dLGhvc3RBdHRyczpbMSwiYWxlcnQtaXRlbSJdLG5nQ29udGVudFNlbGVjdG9yczp5cyxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbImNsYXNzIiwiYWxlcnQtc3Bpbm5lciIsImNscklubGluZSIs'@;
put 'IiIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydC1pY29uIiwicm9sZSIsImltZyIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwiIiwxLCJhbGVydC1zcGlubmVyIl0sWyJyb2xlIiwiaW1nIiwxLCJhbGVydC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJk'@;
put 'aXYiLDApLGd0KDEscHplLDEsMCwiY2xyLXNwaW5uZXIiLDEpKDIsZ3plLDEsMiwiY2RzLWljb24iLDIpLGhlKCksV3IoMykpLDImYSYmKGZlKCksTWUoIm5nSWYiLCJsb2FkaW5nIj09PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpLGZlKCksTWUoIm5nSWYiLCJsb2FkaW5nIiE9PWQu'@;
put 'aWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpKX0sZGVwZW5kZW5jaWVzOltiYSxlbyxSZF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksaUU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbIiIsOCwiYWxlcnQtdGV4dCJdXX0pLGN9KSgpLHJoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlPW5ldyBLcighMSksdGhpcy5j'@;
put 'dXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgS3J9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgY3VycmVu'@;
put 'dEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YX1nZXQgcHJldmlvdXNBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJ'@;
put 'bmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOigxPT09YT90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50OmEtMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11'@;
put 'bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1nZXQgbmV4dEFsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFy'@;
put 'aWFMYWJlbCx7Q1VSUkVOVDooYT09PXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ/MTphKzEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcz10aGlzLm11'@;
put 'bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLmVtaXQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UuZW1pdCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmFjdGl2ZUFsZXJ0c1thXSl9KX1uZ09uRGVzdHJveSgpe3RoaXMu'@;
put 'bXVsdGlBbGVydFNlcnZpY2VDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9cGFnZVVwKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5uZXh0KCl9cGFnZURvd24oKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLnByZXZpb3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKCRlKG1PKSwkZSh0bykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzLXBhZ2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiYWxlcnRzLXBhZ2VyIiwhMCl9LGlucHV0czp7Y3VycmVudEFsZXJ0'@;
put 'OltWbi5Ob25lLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXSxjdXJyZW50QWxlcnRJbmRleDpbVm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRleCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5n'@;
put 'ZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjYsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwiYWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1'@;
put 'dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm'@;
put 'JihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLFd0KDMsImNkcy1pY29uIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxPZSg1KSxoZSgpLGRlKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSxG'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxXdCg4LCJjZHMtaWNvbiIsNiksaGUoKSgpKCkpLDImYSYmKGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxlcnRBcmlhTGFiZWwpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2'@;
put 'aW91cyksZmUoMiksQnUoIiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50KzEsIiAvICIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudCwiIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQubmV4dEFsZXJ0QXJpYUxhYmVsKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMu'@;
put 'bmV4dCkpfSxkZXBlbmRlbmNpZXM6W2VvXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxpaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWEsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4'@;
put 'Q2hhbmdlPW5ldyBLcighMSksdGhpcy5zdWJzY3JpcHRpb25zPVtdfXNldCBhbGxBbGVydHMoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5tYW5hZ2UoYSl9c2V0IF9pbnB1dEN1cnJlbnRJbmRleChhKXtOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wJiYodGhpcy5tdWx0aUFsZXJ0U2Vydmlj'@;
put 'ZS5jdXJyZW50PWEpfWdldCBjdXJyZW50QWxlcnRJbmRleCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5t'@;
put 'dWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGFsZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+ITE9PT1hLmhpZGRlbil9Z2V0IGN1cnJlbnRB'@;
put 'bGVydFR5cGUoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQuYWxlcnRUeXBlOiIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNl'@;
put 'cnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoYT0+e3RoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UubmV4dChhKSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5uZXh0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKG1PKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVy'@;
put 'dHMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYXMoaCxyRSw0KSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLmFsbEFsZXJ0cz1mKX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImFsZXJ0cyIsITApKCJhbGVydC1k'@;
put 'YW5nZXIiLCJkYW5nZXIiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1pbmZvIiwiaW5mbyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LXN1Y2Nlc3MiLCJzdWNjZXNzIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtd2FybmluZyIsIndhcm5pbmciPT1kLmN1cnJlbnRBbGVy'@;
put 'dFR5cGUpKCJhbGVydC1uZXV0cmFsIiwibmV1dHJhbCI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4OltWbi5Ob25lLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsIl9pbnB1dEN1cnJlbnRJbmRleCJdLGN1cnJlbnRBbGVydDpbVm4uTm9uZSwiY2xyQ3Vy'@;
put 'cmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xyQ3VycmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxmZWF0dXJlczpbdWEoW21PXSldLG5nQ29udGVudFNl'@;
put 'bGVjdG9yczp2emUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbMSwiYWxlcnRzLXdyYXBwZXIiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLDQsIm5nSWYiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShtemUpLGRlKDAsImRp'@;
put 'diIsMCksZ3QoMSx5emUsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwxKSxXcigyKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PjEpKX0sZGVwZW5kZW5jaWVzOltiYSxyaGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9j'@;
put 'a30iXX0pLGN9KSgpLGFoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RW8uYWRkSWNvbnMoZFksb1BlLGxQZSxjUGUsaFksdVBlLEN4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3'@;
put 'NWluaj1Bcih7aW1wb3J0czpbTGEsVG8selksSGJdfSksY30pKCksa1dlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2FoZV19KSxj'@;
put 'fSkoKSxzaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hfXN0b3BTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoIm5vLXNjcm9sbGluZyIpfXJlc3VtZVNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NM'@;
put 'aXN0LmNvbnRhaW5zKCJuby1zY3JvbGxpbmciKSYmdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJuby1zY3JvbGxpbmciKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoQ3IobW8pKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpj'@;
put 'LGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxvaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZmFkZU1vdmU9ImZhZGVEb3duIix0aGlzLmJhY2tkcm9wPSEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92'@;
put 'PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxydT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNl'@;
put 'PWgsdGhpcy5jb25maWd1cmF0aW9uPWYsdGhpcy5tb2RhbElkPV91KCksdGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnNp'@;
put 'emU9Im1kIix0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBLcighMSksdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlPSExfWdldCBmYWRlTW92ZSgpe3JldHVybiB0aGlzLnNraXBBbmltYXRpb24/'@;
put 'IiI6dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlfXNldCBmYWRlTW92ZShhKXt0aGlzLmNvbmZpZ3VyYXRpb24uZmFkZU1vdmU9YX1nZXQgYmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmJhY2tkcm9wfW5nT25DaGFuZ2VzKGEpeyF0aGlzLmJ5cGFzc1Njcm9sbFNlcnZp'@;
put 'Y2UmJmEmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCJfb3BlbiIpJiYoYS5fb3Blbi5jdXJyZW50VmFsdWU/KHRoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpOnRo'@;
put 'aXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCksdGhpcy5tb2Rh'@;
put 'bFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKSl9YmFja2Ryb3BDbGljaygpe3RoaXMuc3RhdGljQmFja2Ryb3A/dGhpcy50aXRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dGhpcy5jbG9zZSgpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKToh'@;
put 'dGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9vcGVuPSExKX1mYWRlRG9uZShhKXsidm9pZCI9PT1hLnRvU3RhdGUmJih0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKSl9c2Nyb2xsVG9wKCl7dGhp'@;
put 'cy5ib2R5RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKDAsMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKCRlKHNoZSksJGUodG8pLCRlKE5kZSksJGUob2hlKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs'@;
put 'ci1tb2RhbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhcyhoLGJ6ZSw1KSwyJmEpe2xldCBmO3lpKGY9YmkoKSkmJihkLm1vZGFsQ29udGVudFRlbXBsYXRlPWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoRmEoUjFlLDUpLEZh'@;
put 'KEwxZSw1KSksMiZhKXtsZXQgaDt5aShoPWJpKCkpJiYoZC50aXRsZT1oLmZpcnN0KSx5aShoPWJpKCkpJiYoZC5ib2R5RWxlbWVudFJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29w'@;
put 'ZW46W1ZuLk5vbmUsImNsck1vZGFsT3BlbiIsIl9vcGVuIl0sY2xvc2FibGU6W1ZuLk5vbmUsImNsck1vZGFsQ2xvc2FibGUiLCJjbG9zYWJsZSJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOltWbi5Ob25lLCJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFi'@;
put 'ZWwiXSxzaXplOltWbi5Ob25lLCJjbHJNb2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6W1ZuLk5vbmUsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJzdGF0aWNCYWNrZHJvcCJdLHNraXBBbmltYXRpb246W1ZuLk5vbmUsImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmlt'@;
put 'YXRpb24iXSxzdG9wQ2xvc2U6W1ZuLk5vbmUsImNsck1vZGFsUHJldmVudENsb3NlIiwic3RvcENsb3NlIl0sbGFiZWxsZWRCeTpbVm4uTm9uZSwiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il0sYnlwYXNzU2Nyb2xsU2VydmljZTpbVm4uTm9uZSwiY2xyTW9kYWxPdmVycmlk'@;
put 'ZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOlt1YShbXSxbc2hlXSksYmxdLG5nQ29udGVudFNlbGVjdG9yczp3'@;
put 'emUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInRpdGxlIiwiIl0sWyJib2R5IiwiIl0sWyJjbGFzcyIsIm1vZGFsIiwzLCJtb2RhbC1mdWxsLXNjcmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xpY2siLDQsIm5nSWYi'@;
put 'XSxbMSwibW9kYWwiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLCJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwzLCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJdLFsxLCJjbHItc3Itb25seSJdLFsiY2xhc3MiLCJtb2RhbC1jb250ZW50LXdyYXBwZXIi'@;
put 'LDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsxLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXItLWFjY2Vzc2libGUiXSxbImNka0ZvY3VzSW5pdGlhbCIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1vZGFsLXRpdGxlLXdyYXBwZXIiLDMs'@;
put 'ImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRy'@;
put 'dWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKF96ZSksZ3QoMCxNemUsNywxNiwiZGl2IiwyKSgxLHh6ZSwxLDEsImRpdiIsMykpLDImYSYmKE1lKCJuZ0lmIixkLl9vcGVuKSxmZSgpLE1lKCJuZ0lmIixkLmJhY2tkcm9w'@;
put 'KSl9LGRlcGVuZGVuY2llczpbYmEsQmIsZW9dLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3doKCJmYWRlTW92ZSIsW3R1KCIqID0+IGZhZGVEb3duIixbbG8oe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgwLCAtMjUlKSJ9KSx3MCgiMC4ycyBlYXNlLWluLW91dCIp'@;
put 'XSksdHUoImZhZGVEb3duID0+ICoiLFt3MCgiMC4ycyBlYXNlLWluLW91dCIsbG8oe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgwLCAtMjUlKSJ9KSldKSx0dSgiKiA9PiBmYWRlTGVmdCIsW2xvKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSx3MCgi'@;
put 'MC4ycyBlYXNlLWluLW91dCIpXSksdHUoImZhZGVMZWZ0ID0+ICoiLFt3MCgiMC4ycyBlYXNlLWluLW91dCIsbG8oe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgyNSUsIDApIn0pKV0pXSksd2goImZhZGUiLFt0dSgidm9pZCA9PiAqIixbbG8oe29wYWNpdHk6MH0pLHcwKCIwLjJz'@;
put 'IGVhc2UtaW4tb3V0Iixsbyh7b3BhY2l0eTouODV9KSldKSx0dSgiKiA9PiB2b2lkIixbdzAoIjAuMnMgZWFzZS1pbi1vdXQiLGxvKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxZdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5ob3N0'@;
put 'PWQsdGhpcy50YWJpbmRleD0iMCIsdGhpcy51bmxpc3RlbmVycz1bXSxoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5vYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9PnRoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpKSx0aGlzLm9ic2VydmVyLm9ic2VydmUoZC5uYXRpdmVFbGVt'@;
put 'ZW50KSx0aGlzLnVubGlzdGVuZXJzLnB1c2goYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZWRvd24iLCgpPT57dGhpcy5yZW1vdmVUYWJJbmRleCgpfSkpfSl9'@;
put 'bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMudW5saXN0ZW5lcnMubGVuZ3RoOyl0aGlzLnVubGlzdGVuZXJzLnBvcCgpKCk7dGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5vYnNlcnZlcj1udWxsfWFkZFRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0'@;
put 'Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iix0aGlzLnRhYmluZGV4KX1yZW1vdmVUYWJJbmRleCgpe3RoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpfWFkZE9yUmVtb3ZlVGFiSW5kZXgoKXtjb25zdCBhPXRoaXMuaG9zdC5u'@;
put 'YXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7YSYmYS5jbGllbnRIZWlnaHQ8YS5zY3JvbGxIZWlnaHQ/dGhpcy5hZGRUYWJJbmRleCgpOnRoaXMucmVtb3ZlVGFiSW5kZXgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoJGUoRXMpLCRlKFFpKSwk'@;
put 'ZShHYSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsIm1vZGFsLWJvZHkiXV19KSxjfSkoKSx2Tz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RW8uYWRkSWNvbnMoQ3gpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxRTCxUbyxUb119KSxjfSkoKSxEV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9'@;
put 'KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsUUwsVG8sdk8sdk8sVG9dfSksY30pKCksSVdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2lt'@;
put 'cG9ydHM6W0xhXX0pLGN9KSgpLExXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RW8uYWRkSWNvbnMoZFBlLGhQZSxkWSxoWSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9'@;
put 'QXIoe2ltcG9ydHM6W0xhLFRvLEhiLFRvLEhiXX0pLGN9KSgpLE5XZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RW8uYWRkSWNvbnMoZFksaFkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pLGMu'@;
put 'XHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSx2TyxhaGVdfSksY30pKCksQjA9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpba1dlLFRX'@;
put 'ZSxUbyx2TyxWWSxGMixaTCxTVWUsUmRlLGJaZSx6VWUsTldlLERXZSx1VWUsSGIsSVdlLFp4LExXZV19KSxjfSkoKSxWV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcg'@;
put 'SnQsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5pdCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9u'@;
put 'PXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dp'@;
put 'biIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0'@;
put 'aGlzLmRhdGEucGFzcykudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29yZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJy'@;
put 'b3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKFZvKSwkZShTZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIw'@;
put 'LHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kY3BsYWNlaG9sZGVyL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNvbnRy'@;
put 'b2xsZXIuc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwibG9naW4tbG9nbyJdLFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEsImxvZ2luLWdyb3VwIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwi'@;
put 'dHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIsIlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFzc3dvcmQiLCJwbGFjZWhvbGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIs'@;
put 'MywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydENsb3NlZCJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRu'@;
put 'IiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFd0KDIsImltZyIsMiksZGUoMywiZm9ybSIsMyksRnQoIm5nU3VibWl0Iixm'@;
put 'dW5jdGlvbigpe3JldHVybiBoLnN1Ym1pdCgpfSksZGUoNCwibGFiZWwiLDQpKDUsImgzIiw1KSxPZSg2LCJXZWxjb21lIHRvIiksaGUoKSxPZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLGRlKDgsImg0Iiw2KSxPZSg5LCJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIiksaGUoKSgpLGRl'@;
put 'KDEwLCJkaXYiLDcpKDExLCJpbnB1dCIsOCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBnaShoLmRhdGEudXNlcix2KXx8KGguZGF0YS51c2VyPXYpLHZ9KSxoZSgpLGRlKDEyLCJpbnB1dCIsOSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBn'@;
put 'aShoLmRhdGEucGFzcyx2KXx8KGguZGF0YS5wYXNzPXYpLHZ9KSxoZSgpLGRlKDEzLCJjbHItYWxlcnQiLDEwKSxwaSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBnaShoLmFsZXJ0Q2xvc2VkLHYpfHwoaC5hbGVydENsb3NlZD12KSx2fSksZGUoMTQsImRpdiIs'@;
put 'MTEpKDE1LCJzcGFuIiwxMiksT2UoMTYpLGhlKCkoKSgpLGRlKDE3LCJidXR0b24iLDEzKSxPZSgxOCwiIExvZyBpbiAiKSxoZSgpKCkoKSgpLFd0KDE5LCJkaXYiLDE0KSxoZSgpKSwyJmQmJihUcigiYWN0aXZlIixoLmlzQWN0aXZlKSxmZSgxMSksZmkoIm5nTW9kZWwiLGguZGF0YS51c2Vy'@;
put 'KSxmZSgpLGZpKCJuZ01vZGVsIixoLmRhdGEucGFzcyksZmUoKSxNZSgiY2xyQWxlcnRUeXBlIiwiYWxlcnQtZGFuZ2VyIiksZmkoImNsckFsZXJ0Q2xvc2VkIixoLmFsZXJ0Q2xvc2VkKSxmZSgzKSxTcihoLmVycm9yTXNnKSxmZSgpLE1lKCJjbHJMb2FkaW5nIixoLmxvYWRpbmcpKCJkaXNh'@;
put 'YmxlZCIsaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbDcsR2wsdGwsczcsV28sd3AsckUsaUUsVjAsSDIsY28sWTFdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQldlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTApLE9lKDEsImxvYWRpbmciKSxoZSgpKX1m'@;
put 'dW5jdGlvbiBqV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMSksT2UoMSwibG9hZGVkIiksaGUoKSl9ZnVuY3Rpb24geldlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTIpLE9lKDEsImZhaWxlZCIpLGhlKCkpfWZ1bmN0aW9uIFVXZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJjb2Rl'@;
put 'IiksT2UoMiksaGUoKSxPZSgzLCIgXHhhMCAiKSxndCg0LEJXZSwyLDAsInNwYW4iLDcpKDUsaldlLDIsMCwic3BhbiIsOCkoNix6V2UsMiwwLCJzcGFuIiw5KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksU3IoYS5wcm9ncmFtKSxmZSgyKSxNZSgibmdJZiIsYS5ydW5u'@;
put 'aW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLGZlKCksTWUoIm5nSWYiLCFhLnJ1bm5pbmcmJiFhLnN1Y2Nlc3NmdWwpfX1mdW5jdGlvbiBaV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc2lnbnBvc3QtY29udGVudCIsNSksZ3QoMSxVV2UsNyw0LCJwIiw2'@;
put 'KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtNZSgiY2xyUG9zaXRpb24iLCJib3R0b20tbWlkZGxlIiksZmUoKSxNZSgibmdGb3JPZiIsYS5yZXF1ZXN0cyl9fWxldCBXV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMu'@;
put 'X2xvYWRpbmdTdWI9bmV3IEp0fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7dGhpcy5fbG9hZGluZ1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxl'@;
put 'Y3RvcnM6W1siYXBwLWxvYWRpbmctaW5kaWNhdG9yIl1dLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzEsImxvYWRpbmctaW5kaWNhdG9yIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwic3Bpbm5lci1pbnZlcnNlIl0sWyJjbHJTaWducG9zdFRy'@;
put 'aWdnZXIiLCIiLCJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIiwxLCJpcy1pbmZvIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImVycm9yIiwic2l6ZSIsIjI0IiwxLCJpcy1lcnJvciJdLFszLCJjbHJQb3NpdGlvbiIsNCwiY2xySWZPcGVuIl0sWzMsImNsclBvc2l0aW9u'@;
put 'Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJydW5uaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInN1Y2Nlc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmFpbCIsNCwibmdJZiJdLFsxLCJydW5uaW5nIl0sWzEsInN1Y2Nlc3MiXSxbMSwiZmFpbCJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiY2xyLXNpZ25wb3N0IiksV3QoMiwic3BhbiIsMSkoMywiY2xyLWljb24iLDIpKDQsImNsci1pY29uIiwzKSxndCg1LFpXZSwyLDIsImNsci1zaWducG9zdC1jb250ZW50Iiw0KSxoZSgpKCkpLDImZCYmKGZlKDIpLE4xKCJkaXNwbGF5Iixo'@;
put 'LmxvYWRpbmc/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgpLE4xKCJkaXNwbGF5IiwhaC5sb2FkaW5nJiZoLnJlcXVlc3RzLmxlbmd0aD4wJiZoLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgpLE4xKCJkaXNwbGF5IiwhaC5sb2FkaW5nJiZoLnJl'@;
put 'cXVlc3RzLmxlbmd0aD4wJiYhaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIikpfSxkZXBlbmRlbmNpZXM6W1FzLGJhLE9sLFAyLEtMLHNkZSwkTF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBZV2UoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9T24oKTtkZSgwLCJjZHMtaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50b2dnbGVEYXJrTW9kZSghMCkpfSksaGUoKX19ZnVuY3Rpb24gR1dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2RzLWljb24iLDEzKSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudG9nZ2xlRGFya01vZGUoITEpKX0pLGhlKCl9fWZ1bmN0aW9uICRXZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxXdCgxLCJpbWciLDE0KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHlNKCJzcmMiLGEuZ2V0'@;
put 'UGljdHVyZVVybCgpLEtDKX19ZnVuY3Rpb24gS1dlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTUpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO1RyKCJoaWRkZW4iLDA9PT1hLmZhaWxlZFJlcXMubGVuZ3RoKSxmZSgpLFNyKGEuZmFpbGVkUmVxcy5sZW5ndGgpfX1mdW5jdGlv'@;
put 'biBYV2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7VHIoImhpZGRlbiIsMD09PWEuZGVidWdMb2dzLmxlbmd0aCksZmUoKSxTcihhLmRlYnVnTG9ncy5sZW5ndGgpfX1mdW5jdGlvbiBxV2UoYyxsKXsxJmMmJld0KDAsImNsci1p'@;
put 'Y29uIiwxNyl9ZnVuY3Rpb24gSldlKGMsbCl7MSZjJiYoYWkoMCksZGUoMSwiYSIsMjgpKDIsInNwYW4iLDI5KSxPZSgzLCJEb2N1bWVudGF0aW9uIiksaGUoKSgpLHNpKCkpfWZ1bmN0aW9uIFFXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51Iiwx'@;
put 'OCkoMSwiZGl2IiwxOSwwKSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1kYSgyKTtyZXR1cm4gQ3QoTGUoKS5vbkRlYnVnUm93Q2xpY2soaCxmKSl9KSxkZSg0LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIs'@;
put 'MjEpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYuc2FzanNDb25maWcuZGVidWcsaCl8fChmLnNhc2pzQ29uZmlnLmRlYnVnPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0'@;
put 'KExlKCkub25EZWJ1Z01vZGVDaGFuZ2UoKSl9KSxoZSgpLGRlKDYsImxhYmVsIiksT2UoNywiRGVidWcgTW9kZSIpLGhlKCkoKSgpKCksZGUoOCwiYSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLGRlKDksInNw'@;
put 'YW4iKSxPZSgxMCwiU0FTIFJlcXVlc3RzIiksaGUoKSgpLGd0KDExLEpXZSw0LDAsIm5nLWNvbnRhaW5lciIsNyksV3QoMTIsImRpdiIsMjMpLGRlKDEzLCJhIiwyNCkoMTQsInNwYW4iKSxPZSgxNSwiU3lzdGVtIiksaGUoKSgpLGRlKDE2LCJhIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbiho'@;
put 'KXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5sb2dvdXQoaCkpfSksZGUoMTcsInNwYW4iKSxPZSgxOCwiTG9nIE91dCIpLGhlKCksV3QoMTksImNsci1pY29uIiwyNiksaGUoKSxkZSgyMCwiZGl2IiwyNykoMjEsInNwYW4iKSxPZSgyMiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUo'@;
put 'NSksZmkoIm5nTW9kZWwiLGEuc2FzanNDb25maWcuZGVidWcpLGZlKDYpLE1lKCJuZ0lmIiwhYS5pc0RlcGxveVBhZ2UpLGZlKDExKSxMcigidiIsYS5jb21taXRWZXIsIiIpfX1sZXQgZVllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy51c2VyU2VydmljZT1hLHRo'@;
put 'aXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgSnQsdGhpcy51c2VyU3ViPW5ldyBKdCx0aGlzLmFwcExvZ3M9W10sdGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRS'@;
put 'ZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHloLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIiLHRoaXMuZGFya01vZGU9dGhpcy5ldmVudFNlcnZpY2UuZGFya01vZGV9bmdPbkluaXQo'@;
put 'KXt0aGlzLnVzZXJTdWI9dGhpcy51c2VyU2VydmljZS51c2VyQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy51c2VyTmFtZT1hLnVzZXJuYW1lfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNl'@;
put 'cnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCksdGhpcy5jb21taXRWZXI9InY3LjIuMSIucmVwbGFjZSgidiIsIiIpKyIuZ2VmMTAxNWYifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5zdWJzY3JpYmUoKX10b2dnbGVEYXJrTW9kZShhKXt0'@;
put 'aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShhKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoYSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhpcy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhp'@;
put 'cy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGEsZCl7YS5zdG9wUHJvcGFnYXRpb24oKSxKbi51c2VyRHJvcGRvd25Db25maWcuY2xvc2VPbkRlYnVnQ2xpY2smJnNldFRpbWVvdXQoKCk9PntkLmNsaWNrKCl9LDMwMCl9bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0'@;
put 'cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNlck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNE'@;
put 'ZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoTVcpLCRlKFZvKSwkZShtYyksJGUoTG8pKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbImFwcC1oZWFkZXItYWN0aW9ucyJdXSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNpemUiLCJtZCIsImNsYXNz'@;
put 'IiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2l6ZSIsIm1kIiwiY2xhc3MiLCJ0aGVtZS10b2dnbGUtaWNvbiBjdXJzb3ItcG9pbnRlciIsInNo'@;
put 'YXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIiLDEsIm5hdi10ZXh0IiwiY29sb3Itd2hpdGUiLCJ1c2VyLW5hdi10b2dnbGUiXSxbNCwibmdJ'@;
put 'ZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQi'@;
put 'LDQsImNscklmT3BlbiJdLFsic2l6ZSIsIm1kIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNpemUiLCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIs'@;
put 'ImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImFsdCIsInByb2ZpbGUgcGljdHVyZSIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFk'@;
put 'Z2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsxLCJ0b2dnbGUtc3dpdGNoIiwzLCJjbGljayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlw'@;
put 'ZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsxLCJzZXBhcmF0b3IiXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwiL3N5c3RlbSIsImNsckRyb3Bkb3duSXRlbSIsIiJd'@;
put 'LFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pbyIsImNsckRyb3Bk'@;
put 'b3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsWVdlLDEsMCwiY2RzLWljb24iLDMpKDMsR1dlLDEsMCwiY2RzLWljb24iLDQpLGhlKCksV3QoNCwiYXBwLWxvYWRpbmctaW5k'@;
put 'aWNhdG9yIiksZGUoNSwiY2xyLWRyb3Bkb3duIiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4iKSxPZSg4KSxoZSgpLGd0KDksJFdlLDIsMSwic3BhbiIsNykoMTAsS1dlLDIsMywic3BhbiIsOCkoMTEsWFdlLDIsMywic3BhbiIsOSkoMTIscVdlLDEsMCwiY2xyLWljb24iLDEwKSxoZSgpLGd0'@;
put 'KDEzLFFXZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsMTEpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLCFoLmRhcmtNb2RlLnZhbHVlKSxmZSgpLE1lKCJuZ0lmIiwhIWguZGFya01vZGUudmFsdWUpLGZlKDUpLFNyKGgudXNlck5hbWUpLGZlKCksTWUoIm5nSWYiLCJOb3QgbG9n'@;
put 'Z2VkIGluIiE9PWgudXNlck5hbWUmJmguaXNWaXlhKSxmZSgpLE1lKCJuZ0lmIiwhaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsIWguaXNWaXlhKSl9LGRlcGVuZGVuY2llczpbYmEsTWQsdGwsV28sbDEsT2ws'@;
put 'ZW8sUDIsY28sSWQsRmIseGgsc2csZzcsbTcsUGIsV1dlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHdoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hbGVydHM9bmV3IEdufXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8'@;
put 'fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHRZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1hbGVydCIsMikscGkoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5j'@;
put 'dGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5jbG9zZWQsaCl8fChmLmNsb3NlZD1oKSxDdChoKX0pLEZ0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25BbGVydENsb3NlKCkpfSksZGUoMSwiZGl2Iiwz'@;
put 'KSgyLCJzcGFuIiw0KSxPZSgzKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApLGZpKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLGZlKDMpLExyKCIgIixhLm1lc3NhZ2UsIiAiKX19'@;
put 'ZnVuY3Rpb24gblllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFsZXJ0cyIpLGd0KDEsdFllLDQsNCwiY2xyLWFsZXJ0IiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0Zvck9mIixhLmFsZXJ0cyl9fWxldCByWWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0'@;
put 'aGlzLl9hbGVydHNTZXJ2aWNlPWEsdGhpcy5hbGVydHM9W10sdGhpcy5oYXNPcGVuQWxlcnQ9ITEsdGhpcy5hbGVydHNTdWI9bmV3IEp0fW5nT25Jbml0KCl7dGhpcy5hbGVydHNTdWI9dGhpcy5fYWxlcnRzU2VydmljZS5hbGVydHMuc3Vic2NyaWJlKGE9Pnt0aGlzLmFsZXJ0cy5wdXNoKGEp'@;
put 'LHRoaXMuaGFzT3BlbkFsZXJ0PSEwLGEuZXJyJiZjb25zb2xlLmVycm9yKGEuZXJyKX0pfW9uQWxlcnRDbG9zZSgpe3RoaXMuaGFzT3BlbkFsZXJ0PXRoaXMuYWxlcnRzLnNvbWUoYT0+IWEuY2xvc2VkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KSgkZSh3aGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJB'@;
put 'bGVydENsb3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5j'@;
put 'dGlvbihkLGgpezEmZCYmZ3QoMCxuWWUsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmQmJk1lKCJuZ0lmIixoLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbUXMsYmEsckUsaWhlLGlFXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHlPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoKXt0aGlzLmNsYXNzZXM9IiJ9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjb250YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJj'@;
put 'bGFzc2VzIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhIiwwKSxPZSgxLCJzdXBwb3J0QGRhdGFj'@;
put 'b250cm9sbGVyLmlvIiksaGUoKSksMiZkJiYoVHIoInVuc2V0IiwiIiE9PWguY2xhc3NlcyksTWUoIm5nQ2xhc3MiLGguY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6W3Z1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLENoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5vcHRpb25zU3ViamVjdCQ9bmV3IEduLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgR259b3BlbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5hfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyBHbix0aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZhYmxl'@;
put 'KCl9Y2xvc2UoYSl7dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0Q2hhbmdlJC5uZXh0KHtwYXNzd29yZDphfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8'@;
put 'Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gaVllKGMsbCl7MSZjJiYoZGUoMCwicCIsMTMpLE9lKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkg'@;
put 'YWdhaW4uICIpLGhlKCkpfWZ1bmN0aW9uIGFZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMikoMSwiY2xyLW1vZGFsIiwzKSgyLCJoMyIsNCksT2UoMywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhlKCksZGUoNCwiZGl2Iiw1KSg1LCJwIiw2KSxPZSg2LCJQ'@;
put 'bGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxkZSg3LCJpbnB1dCIsNywwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBnaShmLnBhc3N3b3JkSW5wdXQsaCl8fChmLnBhc3N3b3JkSW5wdXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUo'@;
put 'OSwiZGl2Iiw4KSgxMCwiZGl2IiksZ3QoMTEsaVllLDIsMCwicCIsOSksaGUoKSxkZSgxMiwiZGl2IiwxMCkoMTMsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbG9zZSgpKX0pLE9lKDE0LCIgQ2FuY2VsICIpLGhlKCksZGUoMTUsImJ1'@;
put 'dHRvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWRhKDgpO3JldHVybiBDdChMZSgpLmNsb3NlKGgudmFsdWUpKX0pLE9lKDE2LCIgVW5sb2NrICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ0lmLGQ9ZGEoOCksaD1MZSgpO2ZlKCksTWUoImNs'@;
put 'ck1vZGFsT3BlbiIsYS5vcGVuKSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLGZpKCJuZ01vZGVsIixoLnBhc3N3b3JkSW5wdXQpLGZlKDQpLE1lKCJuZ0lmIixhLmVycm9yKSxmZSg0KSxNZSgiZGlzYWJsZWQiLGQudmFsdWUubGVuZ3RoPDEpfX1s'@;
put 'ZXQgc1llPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5vcHRpb25zJD10aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3B0aW9uc1N1YmplY3QkLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMucGFzc3dv'@;
put 'cmRJbnB1dD0iIn1jbG9zZShhKXt0aGlzLnBhc3N3b3JkSW5wdXQ9IiIsdGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLmNsb3NlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKENoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9'@;
put 'TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJleGNlbC1wYXNzd29yZC1yb290Iiw0LCJuZ0lmIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3Qi'@;
put 'XSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2Vu'@;
put 'dGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9k'@;
put 'ZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20i'@;
put 'LCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsYVllLDE3LDYsImRpdiIsMSksUW8oMSwiYXN5bmMiKSksMiZkJiZNZSgibmdJZiIsQWMoMSwxLGgub3B0aW9u'@;
put 'cyQpKX0sZGVwZW5kZW5jaWVzOltiYSxHbCx0bCxXbyxydSxZdSxJTV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxzRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyBLcix0aGlzLmZpbGVEcmFnZ2VkT3Zl'@;
put 'cj1uZXcgS3J9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2Eu'@;
put 'cHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlz'@;
put 'LmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJl'@;
put 'dHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7'@;
put 'MSZkJiZGdCgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbmRyb3Aodil9KSwyJmQmJlRyKCJmaWxlb3ZlciIs'@;
put 'aC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgU2hlPSgpPT5bXTtmdW5jdGlvbiBvWWUoYyxsKXsxJmMmJihkZSgwLCJwIiw2KSxPZSgxLCJObyByZXF1'@;
put 'ZXN0cyBtYWRlIiksaGUoKSl9ZnVuY3Rpb24gbFllKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLFd0KDEsImNsci1pY29uIiwxMyksaGUoKSl9ZnVuY3Rpb24gY1llKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLFd0KDEsImNsci1pY29uIiwxNCksaGUoKSl9ZnVuY3Rpb24gdVllKGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPUxlKDMpLmluZGV4O3JldHVybiBDdChMZSgyKS5nb1RvTG9nTGluZShoLCJyZXF1ZXN0XyIrZiwiZXJyb3IiKSl9KSxkZSgxLCJi'@;
put 'dXR0b24iLDIzKSxPZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLExyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGRZZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE5KSxXdCgxLCJjbHItaWNvbiIsMjApLE9lKDIpLGd0KDMsdVllLDMsMSwi'@;
put 'Y2xyLXRyZWUtbm9kZSIsMjEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoMiksTHIoIiBFcnJvcnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLGZlKCksTWUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHxabygyLFNoZSkpfX1mdW5jdGlvbiBoWWUoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9TGUoMykuaW5kZXg7cmV0dXJuIEN0KExlKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIitmLCJ3YXJuaW5nIikpfSksZGUoMSwi'@;
put 'YnV0dG9uIiwyMyksT2UoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxMcigiICIsYSwiICIpfX1mdW5jdGlvbiBmWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksV3QoMSwiY2xyLWljb24iLDI0KSxPZSgyKSxndCgzLGhZZSwzLDEs'@;
put 'ImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKDIpLExyKCIgV2FybmluZ3MgKCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksZmUoKSxNZSgibmdGb3JPZiIsYS5sb2dXYXJuaW5nc3x8Wm8oMixTaGUpKX19ZnVuY3Rpb24gcFllKGMs'@;
put 'bCl7MSZjJiZXdCgwLCJkaXYiLDI1KSwyJmMmJk1lKCJpbm5lckhUTUwiLExlKDIpLiRpbXBsaWNpdC5sb2dGaWxlLFY0KX1mdW5jdGlvbiBnWWUoYyxsKXsxJmMmJld0KDAsImRpdiIsMjYpLDImYyYmTWUoInRleHRDb250ZW50IixMZSgyKS4kaW1wbGljaXQubG9nRmlsZSl9ZnVuY3Rpb24g'@;
put 'bVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5kb3dubG9hZExvZyhoLmxvZ0ZpbGUpKX0pLE9lKDEsIiBEb3dubG9hZCAiKSxoZSgp'@;
put 'fX1mdW5jdGlvbiB2WWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJjbHItdHJlZSIpLGd0KDIsZFllLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpKDMsZlllLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpLGhlKCksZ3QoNCxwWWUsMSwxLCJkaXYiLDE2KSg1LGdZZSwx'@;
put 'LDEsImRpdiIsMTcpKDYsbVllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0LGQ9TGUoMik7ZmUoMiksTWUoIm5nSWYiLGEubG9nRXJyb3JzKSxmZSgpLE1lKCJuZ0lmIixhLmxvZ1dhcm5pbmdzKSxmZSgpLE1lKCJuZ0lmIiwiU0FTVklZQSIhPT1k'@;
put 'LnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLCJTQVNWSVlBIj09PWQuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRmlsZT9udWxsOmEubG9nRmlsZS5sZW5ndGgpPjApfX1mdW5jdGlvbiB5WWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24i'@;
put 'LDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLmRvd25sb2FkU291cmNlQ29kZShoLnNvdXJjZUNvZGUpKX0pLE9lKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBiWWUoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxPZSgyKSxoZSgpLGd0KDMseVllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLFNyKGEuc291cmNlQ29kZSksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEuc291cmNlQ29kZT9udWxs'@;
put 'OmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBfWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLmRvd25sb2FkR2VuZXJh'@;
put 'dGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLE9lKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiB3WWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxPZSgyKSxoZSgpLGd0KDMsX1llLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtj'@;
put 'b25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLExyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIENZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Pbigp'@;
put 'O2RlKDAsImRpdiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9aC5rZXkpfSksT2UoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoInNlbGVjdGVkIixM'@;
put 'ZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxmZSgpLExyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBTWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGd0KDEsQ1llLDIsMywiZGl2IiwzMyksUW8oMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLEFjKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gTVllKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzgpKDEsInN0cm9uZyIpLE9lKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpLiRpbXBsaWNpdDtmZSgyKSxM'@;
put 'cigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIHhZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTHIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIEVZZShjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsInRkIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKS4kaW1wbGljaXQ7ZmUoKSxMcigiICIsZFthLmtleV0sIiAiKX19ZnVuY3Rpb24gVFllKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxndCgxLEVZZSwyLDEsInRkIiw0MCksUW8oMiwia2V5'@;
put 'dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLEFjKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBBWWUoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMzkpKDEsInRoZWFk'@;
put 'IikoMiwidHIiKSxndCgzLHhZZSwyLDEsInRoIiw0MCksUW8oNCwia2V5dmFsdWUiKSxoZSgpKCksZGUoNSwidGJvZHkiKSxndCg2LFRZZSwzLDMsInRyIiw0MCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMykuJGltcGxpY2l0O2ZlKDMpLE1lKCJuZ0Zvck9mIixBYyg0LDIsYS5TQVNXT1JL'@;
put 'W2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxmZSgzKSxNZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBrWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSxndCgxLE1ZZSwzLDEsInAiLDM1'@;
put 'KSxkZSgyLCJkaXYiLDM2KSxndCgzLEFZZSw3LDQsInRhYmxlIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksZmUoMiksTWUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1bmN0aW9uIERZZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI5KSgyLCJidXR0b24iLDMwKSxPZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLFd0KDQsImNsci1pY29uIiwzMSksaGUoKSxndCg1LFNZZSwzLDMsImNsci1kcm9wZG93bi1tZW51IiwzMiksaGUoKSxn'@;
put 'dCg2LGtZZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikscGkoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpO3JldHVybiBnaShmLnRhYmxlc0FjdGl2ZSxoKXx8KGYudGFibGVzQWN0aXZlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUo'@;
put 'Myk7ZmUoKSxNZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKSxmZSg1KSxmaSgiY2xySWZBY3RpdmUiLGEudGFibGVzQWN0aXZlKX19ZnVuY3Rpb24gSVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXN0YWNrLWJsb2NrIiw4KSgxLCJjbHItc3RhY2stbGFiZWwi'@;
put 'KSxPZSgyKSxkZSgzLCJzcGFuIiw5KSxndCg0LGxZZSwyLDAsInNwYW4iLDUpKDUsY1llLDIsMCwic3BhbiIsNSksaGUoKSgpLGRlKDYsImNsci1zdGFjay1jb250ZW50IiksT2UoNyksaGUoKSxkZSg4LCJjbHItc3RhY2stYmxvY2siLDEwKSg5LCJjbHItc3RhY2stY29udGVudCIpKDEwLCJj'@;
put 'bHItdGFicyIpKDExLCJjbHItdGFiIikoMTIsImJ1dHRvbiIsMTEpLE9lKDEzLCJTQVMgTG9nIiksaGUoKSxndCgxNCx2WWUsNyw1LCJuZy10ZW1wbGF0ZSIsMTIpLHBpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKTtyZXR1cm4gZ2koZi5zYXNM'@;
put 'b2dBY3RpdmUsaCl8fChmLnNhc0xvZ0FjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTUsImNsci10YWIiKSgxNiwiYnV0dG9uIiwxMSksT2UoMTcsIlNBUyBTb3VyY2UgQ29kZSIpLGhlKCksZ3QoMTgsYlllLDQsMiwibmctdGVtcGxhdGUiLDEyKSxwaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIGdpKGYuc2FzU291cmNlQ29kZUFjdGl2ZSxoKXx8KGYuc2FzU291cmNlQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksT2UoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIp'@;
put 'LGhlKCksZ3QoMjIsd1llLDQsMiwibmctdGVtcGxhdGUiLDEyKSxwaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIGdpKGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxoKXx8KGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKSxDdCho'@;
put 'KX0pLGhlKCksZ3QoMjMsRFllLDcsMiwiY2xyLXRhYiIsNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9TGUoMik7TWUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZlbCIsMSksZmUoMiksTHIoIiAiLGEuc2VydmljZUxpbmss'@;
put 'IiAiKSxmZSgyKSxNZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxmZSgyKSxTcihhLnBhcnNlZFRpbWVzdGFtcCksZmUo'@;
put 'NyksZmkoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksZmUoNCksZmkoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLGZlKDQpLGZpKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxmZSgpLE1lKCJuZ0lmIixhLlNBU1dPUkspfX1mdW5jdGlv'@;
put 'biBSWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3RhY2stdmlldyIpLGd0KDEsSVllLDI0LDEwLCJjbHItc3RhY2stYmxvY2siLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0cyl9fWxldCBMWWU9KCgpPT57Y2xhc3MgY3tnZXQg'@;
put 'b3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMu'@;
put 'bG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgS3IsdGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRh'@;
put 'Ymxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1ZXN0cz1bXSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZp'@;
put 'Y2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBw'@;
put 'TG9jKyIvIiwiIil9Zm9ybWF0VGltZXN0YW1wKGEpe3JldHVybiBQcyhhKS5mb3JtYXQoKT9QcyhhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBQcyhhKS5mb3JtYXQoKT9gICgke1BzKGEpLmZyb21Ob3coKX0p'@;
put 'YDoiIn1tb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1Jl'@;
put 'cXVlc3RzKXRoaXMucGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtjb25zdCBmPWRv'@;
put 'Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtpZihmKWlmKCJTQVNWSVlBIj09PXRoaXMuc2VydmVyVHlwZSl7Y29uc3QgTT0oZi50ZXh0Q29udGVudHx8IiIpLnNwbGl0KCJcbiIpO2xldCBJPS0xO2ZvcihsZXQgeWU9MDt5ZTxNLmxlbmd0aDt5ZSsr'@;
put 'KWlmKE1beWVdLmluY2x1ZGVzKGEpKXtJPXllO2JyZWFrfWlmKC0xPT09SSlyZXR1cm47Y29uc3QgRz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtHLmNsYXNzTmFtZT0idGVtcC1saW5lLWhlaWdodC1jYWxjIixHLnRleHRDb250ZW50PSJYIixmLmFwcGVuZENoaWxkKEcpO2NvbnN0'@;
put 'IHJlPUcuY2xpZW50SGVpZ2h0O2YucmVtb3ZlQ2hpbGQoRyksZi5zY3JvbGxUb3A9cmUqSTtjb25zdCB1ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1ZS5jbGFzc05hbWU9ImxpbmUtaGlnaGxpZ2h0LW92ZXJsYXkgIisoImVycm9yIj09PWg/ImVycm9yLWhpZ2hsaWdodCI6Indh'@;
put 'cm5pbmctaGlnaGxpZ2h0IiksdWUuY2xhc3NMaXN0LmFkZCgidGVtcC1oZWlnaHQtc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtaGVpZ2h0IixgJHtyZX1weGApLHVlLmNsYXNzTGlzdC5hZGQoImxpbmUtcG9zaXRpb24tc2V0dGVy'@;
put 'IiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtdG9wIixyZSpJKyJweCIpLGYuYXBwZW5kQ2hpbGQodWUpLHNldFRpbWVvdXQoKCk9PntmLmNvbnRhaW5zKHVlKSYmZi5yZW1vdmVDaGlsZCh1ZSl9LDNlMyl9ZWxzZXtjb25zdCB2PWRvY3VtZW50'@;
put 'LnF1ZXJ5U2VsZWN0b3JBbGwoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2cgZm9udGApO2ZvcihsZXQgTSBvZiBBcnJheS5mcm9tKHYpKWlmKE0udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGEpKXtmLnNjcm9sbFRvcD1NLm9mZnNldFRvcC1mLm9mZnNldFRvcCxNLmNsYXNzTGlzdC5hZGQoImhp'@;
put 'Z2hsaWdodGVkLWxpbmUiKSxzZXRUaW1lb3V0KCgpPT57TS5jbGFzc0xpc3QucmVtb3ZlKCJoaWdobGlnaHRlZC1saW5lIil9LDNlMyk7YnJlYWt9fX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aWYoIWF8fCFhLmxvZ0ZpbGV8fCJz'@;
put 'dHJpbmciIT10eXBlb2YgYS5sb2dGaWxlfHx2b2lkIDAhPT1hLmxvZ0Vycm9yc3x8dm9pZCAwIT09YS5sb2dXYXJuaW5ncylyZXR1cm47bGV0IGg9W10sZj1bXSx2PWEubG9nRmlsZS5zcGxpdCgiXG4iKSxNPVsuLi52XTtmb3IobGV0IEk9MDtJPHYubGVuZ3RoO0krKyl7aWYoLzwuKj5FUlJP'@;
put 'Ui9nbS50ZXN0KHZbSV0pKXtsZXQgRz12W0ldLnN1YnN0cmluZyh2W0ldLmluZGV4T2YoIkUiKSx2W0ldLmxlbmd0aC0xKTtoLnB1c2goRyl9ZWxzZS9eRVJST1IvZ20udGVzdCh2W0ldKSYmKGgucHVzaCh2W0ldKSwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUmJih2W0ldPSc8Zm9udCBjbGFz'@;
put 'cz0iZXJyb3ItbGluZSI+Jyt2W0ldKyI8L2ZvbnQ+IikpO2lmKC88Lio+V0FSTklORy9nbS50ZXN0KHZbSV0pKXtsZXQgRz12W0ldLnN1YnN0cmluZyh2W0ldLmluZGV4T2YoIlciKSx2W0ldLmxlbmd0aC0xKTtmLnB1c2goRyl9ZWxzZS9eV0FSTklORy9nbS50ZXN0KHZbSV0pJiYoZi5wdXNo'@;
put 'KHZbSV0pLCJTQVNWSVlBIiE9PWQuc2VydmVyVHlwZSYmKHZbSV09Jzxmb250IGNsYXNzPSJ3YXJuaW5nLWxpbmUiPicrdltJXSsiPC9mb250PiIpKX1kLmxvZ2dlclNlcnZpY2UubG9nKGYpLCJTQVNWSVlBIj09PWQuc2VydmVyVHlwZSYmKGEub3JpZ2luYWxMb2dGaWxlPU0uam9pbigiXG4i'@;
put 'KSxhLmxvZ0ZpbGVMaW5lTWFwPXt9LGguZm9yRWFjaChJPT57Zm9yKGxldCBHPTA7RzxNLmxlbmd0aDtHKyspaWYoTVtHXS5pbmNsdWRlcyhJKSl7YS5sb2dGaWxlTGluZU1hcC5lcnJvcnN8fChhLmxvZ0ZpbGVMaW5lTWFwLmVycm9ycz17fSksYS5sb2dGaWxlTGluZU1hcC5lcnJvcnNbSV09'@;
put 'RzticmVha319KSxmLmZvckVhY2goST0+e2ZvcihsZXQgRz0wO0c8TS5sZW5ndGg7RysrKWlmKE1bR10uaW5jbHVkZXMoSSkpe2EubG9nRmlsZUxpbmVNYXAud2FybmluZ3N8fChhLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzPXt9KSxhLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzW0ldPUc7YnJl'@;
put 'YWt9fSkpLGEubG9nRmlsZT12LmpvaW4oIlxuIiksYS5sb2dFcnJvcnM9aCxhLmxvZ1dhcm5pbmdzPWZ9KSgpfWRvd25sb2FkTG9nKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGxvZ0ZpbGUtJHtkfWAsYSl9ZG93'@;
put 'bmxvYWRTb3VyY2VDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYHNvdXJjZUNvZGUtJHtkfWAsYSl9ZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5o'@;
put 'ZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGdlbmVyYXRlZENvZGUtJHtkfWAsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoVm8pLCRlKFNkKSwkZShidSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxl'@;
put 'Y3RvcnM6W1siYXBwLXJlcXVlc3RzLW1vZGFsIl1dLGlucHV0czp7b3BlbmVkOiJvcGVuZWQifSxvdXRwdXRzOntvcGVuZWRDaGFuZ2U6Im9wZW5lZENoYW5nZSJ9LGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJNb2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1v'@;
put 'ZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUtYmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsiY2xhc3MiLCJuby1yZXFzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibm8tcmVxcyJdLFszLCJpZCIs'@;
put 'ImNsclN0YWNrVmlld0xldmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCJdLFsxLCJtbC0xMCJdLFsxLCJjb250ZW50Il0sWyJjbHJUYWJMaW5rIiwiIl0sWzMsImNscklmQWN0aXZlQ2hhbmdlIiwiY2xySWZBY3RpdmUiXSxbInNoYXBlIiwiZXhj'@;
put 'bGFtYXRpb24tY2lyY2xlIiwxLCJtYi01IiwiY29sb3ItZ3JlZW4iXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1yZWQiXSxbImNsYXNzIiwiZXJyLWxpbmtzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIHNhc2xvZyIsMywiaW5uZXJI'@;
put 'VE1MIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIHNhc2xvZyB2aXlhIiwzLCJ0ZXh0Q29udGVudCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1saW5rIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJlcnItbGlua3MiXSxbInNoYXBlIiwiZXhj'@;
put 'bGFtYXRpb24tdHJpYW5nbGUiLDEsImNvbG9yLXJlZCJdLFszLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwiY29sb3ItZ3JlZW4iXSxbMSwibG9nLXdyYXBwZXIi'@;
put 'LCJzYXNsb2ciLDMsImlubmVySFRNTCJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsInZpeWEiLDMsInRleHRDb250ZW50Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsclRhYkxpbmsiLCIiLDEsIndvcmst'@;
put 'dGFibGVzLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbGFzcyIsImRyb3Bkb3duLWl0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInNlbGVj'@;
put 'dGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJjbGljayJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsxLCJtaW4taC01MHZoIl0sWyJjbGFzcyIsInRhYmxlIG10LTEwIiw0LCJuZ0lmIl0sWzEs'@;
put 'Im10LTEwIl0sWzEsInRhYmxlIiwibXQtMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5tb2RhbE9wZW5DaGFuZ2Uodil9'@;
put 'KSxkZSgxLCJoMyIsMSksT2UoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxkZSgzLCJwIiwyKSxPZSg0KSxoZSgpKCksZGUoNSwiZGl2IiwzKSxndCg2LG9ZZSwyLDAsInAiLDQpKDcsUlllLDIsMSwiY2xyLXN0YWNrLXZpZXciLDUpLGhlKCkoKSksMiZkJiYoTWUoImNsck1vZGFsT3BlbiIsaC5v'@;
put 'cGVuZWQpLGZlKDQpLExyKCJBcHAgTG9jYXRpb246ICIsaC5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLGZlKDIpLE1lKCJuZ0lmIiwobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk8MSksZmUoKSxNZSgibmdJZiIsaC5vcGVuZWQmJihudWxsPT1oLnNh'@;
put 'c2pzUmVxdWVzdHM/bnVsbDpoLnNhc2pzUmVxdWVzdHMubGVuZ3RoKT4wKSl9LGRlcGVuZGVuY2llczpbUXMsYmEseEcsS2RlLE1HLCRkZSxBaCxQZCxoZyxPbCxydSxZdSxMYixQMix2bSxibSx4Nyx5bSxtbSxTNyxzZyxnNyxtNyxQYix4Ul0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBj'@;
put 'fSkoKTtjbGFzcyBPWWV7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBNaGV9fWNsYXNzIE1oZXt9ZnVuY3Rpb24gUFllKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsOCksT2UoMSwiIFNBUyBTZXJ2aWNlOiAiKSxkZSgy'@;
put 'LCJzdHJvbmciKSxPZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLFNyKGEuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24gRlllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5KSgxLCJwIikoMiwic3Ryb25nIiksT2UoMywiU1lTV0FSTklOR1RFWFQ6IiksaGUoKSxPZSg0'@;
put 'KSxoZSgpLGRlKDUsInAiKSg2LCJzdHJvbmciKSxPZSg3LCJTWVNFUlJPUlRFWFQ6IiksaGUoKSxPZSg4KSxoZSgpLGRlKDksInAiKSgxMCwic3Ryb25nIiksT2UoMTEsIk1BQzoiKSxoZSgpLE9lKDEyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDQpLExyKCIgIixhLmRhdGEuZGV0'@;
put 'YWlscy5TWVNXQVJOSU5HVEVYVCwiIiksZmUoNCksTHIoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksZmUoNCksTHIoIiAiLGEuZGF0YS5kZXRhaWxzLk1BQywiIil9fWZ1bmN0aW9uIEhZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vcGVuQ29uZmlndXJhdG9yKCkpfSksT2UoMSwiIE9wZW4gY29uZmlndXJhdG9yICIpLGhlKCl9fWZ1bmN0aW9uIE5ZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLE9lKDEsIiBPcGVuIHJlcXVlc3RzIG1vZGFsICIpLGhlKCl9fWZ1bmN0aW9uIFZZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5kb3dubG9hZExvZygpKX0pLE9lKDEsIiBEb3dubG9hZCBsb2cgIiksaGUoKX19ZnVuY3Rpb24gQlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD'@;
put 'dChMZSgpLmNsb3NlQWJvcnRNb2RhbCgpKX0pLE9lKDEsIiBDbG9zZSAiKSxoZSgpfX1mdW5jdGlvbiBqWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkucmVsb2FkKCkpfSksT2Uo'@;
put 'MSwiIFJlbG9hZCAiKSxoZSgpfX1sZXQgelllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMub25Db25maXJtTW9kYWxDbGljaz1uZXcg'@;
put 'S3IsdGhpcy5kYXRhPW5ldyBPWWUsdGhpcy5mb3JjZVJlbG9hZD0hMSx0aGlzLm1vZGFsRW5hYmxlZD0hMCx0aGlzLmRlZmF1bHREYXRhPXttb2RhbFRpdGxlOiJBYm9ydCBNZXNzYWdlIixzYXNTZXJ2aWNlOm51bGwsbWVzc2FnZToiIixkZXRhaWxzOm5ldyBNaGV9fW5nT25Jbml0KCl7bGV0'@;
put 'IGE9ey4uLnRoaXMuZGVmYXVsdERhdGEsLi4udGhpcy5kYXRhfTt0aGlzLmRhdGE9YX1zaG93Q29uZmlndXJhdG9yQnV0dG9uKGEpe2NvbnN0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGE/LmluY2x1ZGVzKCJzdGFydHVwc2VydmljZSIpJiZkLnNlcnZlclR5'@;
put 'cGU9PT1OMC5ZLlNhczl9Y2xvc2VBYm9ydE1vZGFsKCl7dGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrLmVtaXQoKX1vcGVuQ29uZmlndXJhdG9yKCl7dGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksdGhpcy5j'@;
put 'bG9zZUFib3J0TW9kYWwoKX1kb3dubG9hZExvZygpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGAke3RoaXMuZGF0YS5zYXNTZXJ2aWNlfS1MT0dgLHRoaXMuZGF0YS5kZXRhaWxzPy5MT0d8fCJFcnJvciBwYXJzaW5nIHRoZSBsb2ciKX1vcGVuUmVxdWVzdHNNb2RhbCgp'@;
put 'e3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9cmVsb2FkKCl7bG9jYXRpb24ucmVsb2FkKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoYnUpLCRlKG1jKSwkZShWbyksJGUoTG8pKX19c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7b25Db25maXJtTW9kYWxDbGljazoib25Db25maXJtTW9kYWxDbGljayJ9LGRlY2xzOjEzLHZhcnM6MTIsY29u'@;
put 'c3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UgbXQtMCIsNCwi'@;
put 'bmdJZiJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImFib3J0TXNnIiwzLCJpbm5lckhUTUwiXSxbImNsYXNzIiwic3lzdGV4dCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSIsMywiY2xpY2siLDQsIm5nSWYiXSxb'@;
put 'MSwic2FzU2VydmljZSIsIm10LTAiXSxbMSwic3lzdGV4dCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5j'@;
put 'dGlvbih2KXtyZXR1cm4gZ2koaC5tb2RhbEVuYWJsZWQsdil8fChoLm1vZGFsRW5hYmxlZD12KSx2fSksZGUoMSwiaDMiLDEpLE9lKDIpLGd0KDMsUFllLDQsMSwicCIsMiksaGUoKSxkZSg0LCJkaXYiLDMpLFd0KDUsImRpdiIsNCksZ3QoNixGWWUsMTMsMywiZGl2Iiw1KSxoZSgpLGRlKDcs'@;
put 'ImRpdiIsNiksZ3QoOCxIWWUsMiwwLCJidXR0b24iLDcpKDksTlllLDIsMCwiYnV0dG9uIiw3KSgxMCxWWWUsMiwwLCJidXR0b24iLDcpKDExLEJZZSwyLDAsImJ1dHRvbiIsNykoMTIsalllLDIsMCwiYnV0dG9uIiw3KSxoZSgpKCkpLDImZCYmKGZpKCJjbHJNb2RhbE9wZW4iLGgubW9kYWxF'@;
put 'bmFibGVkKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsIWguZm9yY2VSZWxvYWQpLGZlKDIpLExyKCIgIixoLmRhdGEubW9kYWxUaXRsZSwiICIpLGZlKCksTWUoIm5nSWYiLGguZGF0YS5zYXNTZXJ2aWNlJiZoLmRhdGEuc2FzU2VydmljZS5sZW5ndGg+MCks'@;
put 'ZmUoMiksTWUoImlubmVySFRNTCIsaC5kYXRhLm1lc3NhZ2UsVjQpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1oLmRhdGEuZGV0YWlscyksZmUoMiksTWUoIm5nSWYiLGguc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihoLmRhdGEuc2FzU2VydmljZSkpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1oLmRh'@;
put 'dGEuZGV0YWlscyksZmUoKSxNZSgibmdJZiIsKG51bGw9PWguZGF0YS5kZXRhaWxzP251bGw6aC5kYXRhLmRldGFpbHMuTE9HKSYmKG51bGw9PWguZGF0YS5kZXRhaWxzfHxudWxsPT1oLmRhdGEuZGV0YWlscy5MT0c/bnVsbDpoLmRhdGEuZGV0YWlscy5MT0cudHJpbSgpLmxlbmd0aCk+MCks'@;
put 'ZmUoKSxNZSgibmdJZiIsIWguZm9yY2VSZWxvYWQpLGZlKCksTWUoIm5nSWYiLGguZm9yY2VSZWxvYWQpKX0sZGVwZW5kZW5jaWVzOltiYSxydSxZdSxzRV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBVWWU9KCk9PlsiLyJdLHhoZT0oKT0+WyIvdmlldyJdLEVoZT0o'@;
put 'KT0+WyIvaG9tZSJdLGtHPSgpPT5bIi9yZXZpZXcvc3VibWl0dGVkIl0sWlllPSgpPT5bIi9yZXZpZXcvYXBwcm92ZSJdLFdZZT0oKT0+WyIvcmV2aWV3L2hpc3RvcnkiXTtmdW5jdGlvbiBZWWUoYyxsKXsxJmMmJihhaSgwKSxkZSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5'@;
put 'KSxXdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksT2UoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVwZ3JhZGUgY29udGFjdCAiKSxXdCg3LCJjb250YWN0LWxpbmsiLDIyKSxoZSgpKCkoKSxkZSg4LCJhIiwyMyksT2UoOSwiVXBkYXRlIExpY2Vu'@;
put 'Y2UgS2V5IiksaGUoKSxzaSgpKX1mdW5jdGlvbiBHWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxXdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksT2UoNiwiIERhdGEgQ29udHJvbGxl'@;
put 'ciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIpLGhlKCkoKSgpLGRlKDcsImEiLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgzKTtyZXR1cm4gQ3QoaC5saWNlbmNlUHJvYmxlbURldGFpbHMoaC5saWNlbmNlUHJvYmxlbS52YWx1ZSkpfSks'@;
put 'T2UoOCwiTW9yZSBkZXRhaWxzIiksaGUoKSxzaSgpfX1mdW5jdGlvbiAkWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE2KSxndCgxLFlZZSwxMCwwLCJuZy1jb250YWluZXIiLDEpKDIsR1llLDksMCwibmctY29udGFpbmVyIiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxN'@;
put 'ZSgibmdJZiIsbnVsbD09PWEubGljZW5jZVByb2JsZW0udmFsdWUpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKX19ZnVuY3Rpb24gS1llKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjMpLE9lKDEsIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCkpfWZ1bmN0aW9u'@;
put 'IFhZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjUpKDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLFd0KDQsImNkcy1pY29uIiwyMCksaGUoKSxkZSg1LCJkaXYiLDIxKSxPZSg2KSxXdCg3LCJjb250YWN0LWxpbmsiLDIyKSxPZSg4KSxoZSgpKCkoKSxndCg5LEtZZSwy'@;
put 'LDAsImEiLDI2KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNiksQnUoIiBUaGlzIGxpY2Vuc2Uga2V5IHdpbGwgZXhwaXJlIGluICIsYS5saWNlbnNlRXhwaXJpbmdEYXlzLCIgIiwxPT09YS5saWNlbnNlRXhwaXJpbmdEYXlzPyJkYXkiOiJkYXlzIiwiLiBQbGVhc2UgY29udGFjdCAi'@;
put 'KSxmZSgyKSxMcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLE1lKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIHFZZShjLGwpezEmYyYmKGRlKDAs'@;
put 'ImEiLDIzKSxPZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgpKX1mdW5jdGlvbiBKWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxXdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksT2UoNiwi'@;
put 'IFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4gUGxlYXNlIGNvbnRhY3QgIiksV3QoNywiY29udGFjdC1saW5rIiwyMiksT2UoOCksaGUoKSgpKCksZ3QoOSxxWWUsMiwwLCJhIiwyNiksaGUoKSksMiZj'@;
put 'KXtjb25zdCBhPUxlKDIpO2ZlKDgpLExyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLGZlKCksTWUoIm5nSWYiLCFhLmxpY2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVy'@;
put 'QmFubmVyKX19ZnVuY3Rpb24gUVllKGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSwkWWUsMywyLCJkaXYiLDE0KSgyLFhZZSwxMCw0LCJkaXYiLDE1KSgzLEpZZSwxMCwyLCJkaXYiLDE1KSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0lmIixhLmZyZWVUaWVyQmFubmVyJiYo'@;
put 'IWEubGljZW5zZUV4cGlyaW5nRGF5c3x8YS5saWNlbnNlRXhwaXJpbmdEYXlzPDApKSxmZSgpLE1lKCJuZ0lmIixhLmxpY2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSxmZSgpLE1lKCJuZ0lmIixhLmFwcE92ZXJDYXBhY2l0eSl9fWZ1bmN0aW9uIGVHZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50b2dnbGVTaWRlYmFyKCkpfSksV3QoMSwiY2xyLWljb24iLDI4KSxoZSgpfX1mdW5jdGlvbiB0R2UoYyxsKXsxJmMmJihkZSgwLCJhIiwyOSksV3QoMSwiaW1n'@;
put 'IiwzMCkoMiwiaW1nIiwzMSksaGUoKSksMiZjJiZNZSgicm91dGVyTGluayIsWm8oMSxVWWUpKX1mdW5jdGlvbiBuR2UoYyxsKXsxJmMmJihkZSgwLCJhIiksV3QoMSwic3BhbiIsMzIpLGhlKCkpfWZ1bmN0aW9uIHJHZShjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51Iiw0MCko'@;
put 'MSwiYSIsNDEpLE9lKDIsIlZJRVciKSxoZSgpLGRlKDMsImEiLDQxKSxPZSg0LCJMT0FEIiksaGUoKSxkZSg1LCJhIiw0MSksT2UoNiwiUkVWSUVXIiksaGUoKSgpKSwyJmMmJihmZSgpLE1lKCJyb3V0ZXJMaW5rIixabygzLHhoZSkpLGZlKDIpLE1lKCJyb3V0ZXJMaW5rIixabyg0LEVoZSkp'@;
put 'LGZlKDIpLE1lKCJyb3V0ZXJMaW5rIixabyg1LGtHKSkpfWZ1bmN0aW9uIGlHZShjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsImRpdiIsMzMpKDIsImNsci1kcm9wZG93biIpKDMsImJ1dHRvbiIsMzQpLE9lKDQsIiBNZW51ICIpLGhlKCksZ3QoNSxyR2UsNyw2LCJjbHItZHJvcGRvd24tbWVu'@;
put 'dSIsMzUpLGhlKCkoKSxkZSg2LCJkaXYiLDM2KSg3LCJhIiwzNyksT2UoOCwiVklFVyIpLGhlKCksZGUoOSwiYSIsMzgpLE9lKDEwLCJMT0FEIiksaGUoKSxkZSgxMSwiYSIsMzkpLE9lKDEyLCJSRVZJRVciKSxoZSgpKCksc2koKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoNyksTWUoInJvdXRl'@;
put 'ckxpbmsiLFpvKDcseGhlKSksZmUoMiksVHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0b3IiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0LXJlY29yZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhvbWUiKSksTWUoInJvdXRlckxpbmsiLFpvKDgsRWhlKSks'@;
put 'ZmUoMiksVHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxNZSgicm91dGVyTGluayIsWm8oOSxrRykpfX1mdW5jdGlvbiBhR2UoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJuYXYiLDQyKSgxLCJ1bCIsNDMpKDIsImxpIiw0NCkoMywiYSIsMzcpLE9lKDQsIlNVQk1JVCIpLGhlKCkoKSxkZSg1LCJsaSIsNDQpKDYsImEiLDM3KSxPZSg3LCJBUFBST1ZFIiksaGUoKSgpLGRlKDgsImxpIiw0NCkoOSwiYSIsMzcpLE9lKDEwLCJISVNUT1JZ'@;
put 'IiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksTWUoInJvdXRlckxpbmsiLFpvKDUsa0cpKSxmZSgzKSxUcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKSksTWUoInJvdXRlckxpbmsiLFpvKDYsWlllKSksZmUoMyksTWUoInJvdXRlckxpbmsi'@;
put 'LFpvKDcsV1llKSl9fWZ1bmN0aW9uIHNHZShjLGwpezEmYyYmV3QoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIG9HZShjLGwpezEmYyYmV3QoMCwicm91dGVyLW91dGxldCIpfWZ1bmN0aW9uIGxHZShjLGwpezEmYyYmV3QoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIGNHZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1PbigpO2RlKDAsImFwcC1pbmZvLW1vZGFsIiw0NSksRnQoIm9uQ29uZmlybU1vZGFsQ2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuY2xvc2VBYm9ydE1vZGFsKGguaWQpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwu'@;
put 'JGltcGxpY2l0LGQ9TGUoKTtNZSgiZGF0YSIsYSkoImZvcmNlUmVsb2FkIiwhZC5zdGFydHVwRGF0YUxvYWRlZCYmMT09PWQuc2FzanNBYm9ydHMubGVuZ3RoKX19ZnVuY3Rpb24gdUdlKGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0OSksV3QoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSkoMywiZGl2'@;
put 'Iiw1MiksaGUoKSl9ZnVuY3Rpb24gZEdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NiksV3QoMSwiaW1nIiw0NyksZ3QoMix1R2UsNCwwLCJkaXYiLDQ4KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSxNZSgibmdJZiIsbnVsbD09PWEuYXBwQWN0aXZlKX19RW8uYWRkSWNvbnMo'@;
put 'WyJtb29uIix7b3V0bGluZTonPHBhdGggZD0iTTE4LjExIDMyLjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMgNC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAx'@;
put 'OC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMwM0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4x'@;
put 'OSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAwMDNaTTE1LjQzIDYuMjkwM0M5Ljk5IDcuNDgwMyA2IDEyLjI0MDMgNiAxNy45OTAzQzYgMjQuNjEwMyAx'@;
put 'MS40MyAzMC4wMDAzIDE4LjExIDMwLjAwMDNDMjMuMTYgMzAuMDAwMyAyNy41OCAyNi45MjAzIDI5LjM3IDIyLjQwMDNDMjcuOTcgMjMuMDEwMyAyNi40NiAyMy4zMjAzIDI0LjkxIDIzLjMyMDNDMTguNzQgMjMuMzIwMyAxMy43MSAxOC4zMzAzIDEzLjcxIDEyLjIwMDNDMTMuNzEgMTAuMDcw'@;
put 'MyAxNC4zMSA4LjAzMDMgMTUuNDMgNi4yODAzVjYuMjkwM1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTguMTEgMzIuMDAwM0MxMC4zMyAzMi4wMDAzIDQgMjUuNzIwMyA0IDE3Ljk5MDNDNCAxMC4yNjAzIDEwLjAzIDQuMjAwMyAxNy43MyA0LjAwMDNDMTguMTUgMy45OTAzIDE4LjUyIDQuMjMw'@;
put 'MyAxOC42OCA0LjYxMDNDMTguODQgNC45OTAzIDE4Ljc1IDUuNDMwMyAxOC40NiA1LjcyMDNDMTYuNjkgNy40NTAzIDE1LjcxIDkuNzYwMyAxNS43MSAxMi4yMTAzQzE1LjcxIDE3LjI0MDMgMTkuODMgMjEuMzMwMyAyNC45MSAyMS4zMzAzQzI2LjkgMjEuMzMwMyAyOC44IDIwLjcwMDMgMzAu'@;
put 'NDEgMTkuNTEwM0MzMC43NCAxOS4yNzAzIDMxLjE5IDE5LjI1MDMgMzEuNTMgMTkuNDYwM0MzMS44OCAxOS42ODAzIDMyLjA2IDIwLjA4MDMgMzEuOTkgMjAuNDkwM0MzMC43OCAyNy4xNjAzIDI0Ljk0IDMyLjAwMDMgMTguMTEgMzIuMDAwM1oiLz4nfV0sWyJzdW4iLHtvdXRsaW5lOic8cGF0'@;
put 'aCBkPSJNOC44MSAxMC4yMkM5LjAxIDEwLjQyIDkuMjYgMTAuNTEgOS41MiAxMC41MUM5Ljc4IDEwLjUxIDEwLjAzIDEwLjQxIDEwLjIzIDEwLjIyQzEwLjYyIDkuODMgMTAuNjIgOS4yIDEwLjIzIDguODFMOC4xMSA2LjY5QzcuNzIgNi4zIDcuMDkgNi4zIDYuNyA2LjY5QzYuMzEgNy4wOCA2'@;
put 'LjMxIDcuNzEgNi43IDguMUw4LjgyIDEwLjIySDguODFaTTcgMThDNyAxNy40NSA2LjU1IDE3IDYgMTdIM0MyLjQ1IDE3IDIgMTcuNDUgMiAxOEMyIDE4LjU1IDIuNDUgMTkgMyAxOUg2QzYuNTUgMTkgNyAxOC41NSA3IDE4Wk0xOCA3QzE4LjU1IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAx'@;
put 'OC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1IDcgMTggN1pNMjYuNDkgMTAuNTFDMjYuNzUgMTAuNTEgMjcgMTAuNDEgMjcuMiAxMC4yMkwyOS4zMiA4LjFDMjkuNzEgNy43MSAyOS43MSA3LjA4IDI5LjMyIDYuNjlDMjguOTMgNi4zIDI4LjMgNi4zIDI3'@;
put 'LjkxIDYuNjlMMjUuNzkgOC44MUMyNS40IDkuMiAyNS40IDkuODMgMjUuNzkgMTAuMjJDMjUuOTkgMTAuNDIgMjYuMjQgMTAuNTEgMjYuNSAxMC41MUgyNi40OVpNOC44MSAyNS43OEw2LjY5IDI3LjlDNi4zIDI4LjI5IDYuMyAyOC45MiA2LjY5IDI5LjMxQzYuODkgMjkuNTEgNy4xNCAyOS42'@;
put 'IDcuNCAyOS42QzcuNjYgMjkuNiA3LjkxIDI5LjUgOC4xMSAyOS4zMUwxMC4yMyAyNy4xOUMxMC42MiAyNi44IDEwLjYyIDI2LjE3IDEwLjIzIDI1Ljc4QzkuODQgMjUuMzkgOS4yMSAyNS4zOSA4LjgyIDI1Ljc4SDguODFaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4'@;
put 'LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5'@;
put 'Wk0xOCAyNUMxNC4xNCAyNSAxMSAyMS44NiAxMSAxOEMxMSAxNC4xNCAxNC4xNCAxMSAxOCAxMUMyMS44NiAxMSAyNSAxNC4xNCAyNSAxOEMyNSAyMS44NiAyMS44NiAyNSAxOCAyNVpNMjcuMTkgMjUuNzhDMjYuOCAyNS4zOSAyNi4xNyAyNS4zOSAyNS43OCAyNS43OEMyNS4zOSAyNi4xNyAy'@;
put 'NS4zOSAyNi44IDI1Ljc4IDI3LjE5TDI3LjkgMjkuMzFDMjguMSAyOS41MSAyOC4zNSAyOS42IDI4LjYxIDI5LjZDMjguODcgMjkuNiAyOS4xMiAyOS41IDI5LjMyIDI5LjMxQzI5LjcxIDI4LjkyIDI5LjcxIDI4LjI5IDI5LjMyIDI3LjlMMjcuMiAyNS43OEgyNy4xOVpNMTggMjlDMTcuNDUg'@;
put 'MjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTguNTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIgNi42OSAy'@;
put 'OS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk03IDE4QzcgMTcuNDUg'@;
put 'Ni41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNOC44MSAxMC4yMkM5LjAxIDEwLjQyIDkuMjYgMTAuNTEgOS41MiAxMC41MUM5Ljc4IDEwLjUxIDEwLjAzIDEwLjQxIDEwLjIzIDEwLjIyQzEwLjYy'@;
put 'IDkuODMgMTAuNjIgOS4yIDEwLjIzIDguODFMOC4xMSA2LjY5QzcuNzIgNi4zIDcuMDkgNi4zIDYuNyA2LjY5QzYuMzEgNy4wOCA2LjMxIDcuNzEgNi43IDguMUw4LjgyIDEwLjIySDguODFaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5'@;
put 'LjcxIDcuNzEgMjkuNzEgNy4wOCAyOS4zMiA2LjY5QzI4LjkzIDYuMyAyOC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTE4IDdDMTguNTUgNyAxOSA2LjU1'@;
put 'IDE5IDZWM0MxOSAyLjQ1IDE4LjU1IDIgMTggMkMxNy40NSAyIDE3IDIuNDUgMTcgM1Y2QzE3IDYuNTUgMTcuNDUgNyAxOCA3Wk0xOCAyOUMxNy40NSAyOSAxNyAyOS40NSAxNyAzMFYzM0MxNyAzMy41NSAxNy40NSAzNCAxOCAzNEMxOC41NSAzNCAxOSAzMy41NSAxOSAzM1YzMEMxOSAyOS40'@;
put 'NSAxOC41NSAyOSAxOCAyOVpNMzMgMTdIMzBDMjkuNDUgMTcgMjkgMTcuNDUgMjkgMThDMjkgMTguNTUgMjkuNDUgMTkgMzAgMTlIMzNDMzMuNTUgMTkgMzQgMTguNTUgMzQgMThDMzQgMTcuNDUgMzMuNTUgMTcgMzMgMTdaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcgMjUuMzkgMjUu'@;
put 'NzggMjUuNzhDMjUuMzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45TDI3LjIgMjUu'@;
put 'NzhIMjcuMTlaTTE4IDlDMTMuMDQgOSA5IDEzLjA0IDkgMThDOSAyMi45NiAxMy4wNCAyNyAxOCAyN0MyMi45NiAyNyAyNyAyMi45NiAyNyAxOEMyNyAxMy4wNCAyMi45NiA5IDE4IDlaIi8+J31dLFsiZXhjbGFtYXRpb24tdHJpYW5nbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTcuOTk0MyAy'@;
put 'MC44QzE4LjU0NCAyMC44IDE4Ljk5MzggMjAuMzUgMTguOTkzOCAxOS44VjE0QzE4Ljk5MzggMTMuNDUgMTguNTQ0IDEzIDE3Ljk5NDMgMTNDMTcuNDQ0NSAxMyAxNi45OTQ3IDEzLjQ1IDE2Ljk5NDcgMTRWMTkuOEMxNi45OTQ3IDIwLjM1IDE3LjQ0NDUgMjAuOCAxNy45OTQzIDIwLjhaTTE4'@;
put 'Ljg0MzkgMjIuOTVDMTguNzIzOSAyMi44NCAxOC41OTQgMjIuNzUgMTguNDU0MSAyMi42OUMxOC4xNjQyIDIyLjU3IDE3LjgyNDMgMjIuNTcgMTcuNTM0NSAyMi42OUMxNy4zOTQ1IDIyLjc1IDE3LjI2NDYgMjIuODQgMTcuMTQ0NiAyMi45NUMxNi45MjQ3IDIzLjE4IDE2Ljc5NDggMjMuNDgg'@;
put 'MTYuNzk0OCAyMy44QzE2Ljc5NDggMjQuMTIgMTYuOTI0NyAyNC40MiAxNy4xNDQ2IDI0LjY1QzE3LjI2NDYgMjQuNzYgMTcuMzk0NSAyNC44NSAxNy41MzQ1IDI0LjkxQzE3LjY4NDQgMjQuOTcgMTcuODM0MyAyNSAxNy45OTQzIDI1QzE4LjE1NDIgMjUgMTguMzA0MSAyNC45NyAxOC40NTQx'@;
put 'IDI0LjkxQzE4LjU5NCAyNC44NSAxOC43MjM5IDI0Ljc2IDE4Ljg0MzkgMjQuNjVDMTkuMDYzOCAyNC40MiAxOS4xOTM3IDI0LjEyIDE5LjE5MzcgMjMuOEMxOS4xOTM3IDIzLjY0IDE5LjE2MzcgMjMuNDkgMTkuMTAzOCAyMy4zNEMxOS4wNDM4IDIzLjIgMTguOTUzOCAyMy4wNiAxOC44NDM5'@;
put 'IDIyLjk1Wk0zMC41OTg2IDI1LjQzTDIwLjY2MzEgNy41N0MyMC4xMTMzIDYuNTkgMTkuMTIzOCA2IDE3Ljk5NDMgNkMxNi44NjQ4IDYgMTUuODc1MiA2LjU5IDE1LjMyNTQgNy41N0w1LjM4OTg4IDI1LjQzQzQuODUwMTIgMjYuMzkgNC44NzAxMSAyNy41MyA1LjQxOTg3IDI4LjQ4QzUuOTY5'@;
put 'NjIgMjkuNDMgNi45NTkxOCAzMCA4LjA1ODY5IDMwSDI3LjkyOThDMjkuMDI5MyAzMCAzMC4wMDg5IDI5LjQzIDMwLjU2ODYgMjguNDhDMzEuMTI4NCAyNy41MyAzMS4xMzg0IDI2LjM5IDMwLjU5ODYgMjUuNDNaTTI4Ljg0OTQgMjcuNDdDMjguNzU5NSAyNy42MyAyOC40Nzk2IDI4IDI3Ljkz'@;
put 'OTggMjhIOC4wNTg2OUM3LjUwODk0IDI4IDcuMjM5MDYgMjcuNjMgNy4xNDkxIDI3LjQ3QzcuMDU5MTQgMjcuMzEgNi44NjkyMiAyNi44OSA3LjE0OTEgMjYuNDFMMTcuMDY0NyA4LjU1QzE3LjMzNDYgOC4wNiAxNy44MDQzIDggMTcuOTg0MyA4QzE4LjE2NDIgOCAxOC42MzQgOC4wNSAxOC45'@;
put 'MDM5IDguNTVMMjguODM5NCAyNi40MUMyOS4xMDkzIDI2Ljg5IDI4LjkxOTQgMjcuMzEgMjguODI5NCAyNy40N0gyOC44NDk0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMC41OTg2IDI1LjQzTDIwLjY2MzEgNy41N0MyMC4xMTMzIDYuNTkgMTkuMTIzOCA2IDE3Ljk5NDMgNkMxNi44NjQ4IDYg'@;
put 'MTUuODc1MiA2LjU5IDE1LjMyNTQgNy41N0w1LjM4OTg4IDI1LjQzQzQuODUwMTIgMjYuMzkgNC44NzAxMSAyNy41MyA1LjQxOTg3IDI4LjQ4QzUuOTY5NjIgMjkuNDMgNi45NTkxOCAzMCA4LjA1ODY5IDMwSDI3LjkyOThDMjkuMDI5MyAzMCAzMC4wMDg5IDI5LjQzIDMwLjU2ODYgMjguNDhD'@;
put 'MzEuMTI4NCAyNy41MyAzMS4xMzg0IDI2LjM5IDMwLjU5ODYgMjUuNDNaTTE2Ljc5NDggMTMuNUMxNi43OTQ4IDEyLjg0IDE3LjMzNDYgMTIuMyAxNy45OTQzIDEyLjNDMTguNjU0IDEyLjMgMTkuMTkzNyAxMi44NCAxOS4xOTM3IDEzLjVWMTkuM0MxOS4xOTM3IDE5Ljk2IDE4LjY1NCAyMC41'@;
put 'IDE3Ljk5NDMgMjAuNUMxNy4zMzQ2IDIwLjUgMTYuNzk0OCAxOS45NiAxNi43OTQ4IDE5LjNWMTMuNVpNMTguOTczOCAyNUMxOC44MzM5IDI1LjEzIDE4LjY4NCAyNS4yMyAxOC41MjQgMjUuM0MxOC4zNDQxIDI1LjM3IDE4LjE3NDIgMjUuNDEgMTcuOTk0MyAyNS40MUMxNy44MTQzIDI1LjQx'@;
put 'IDE3LjYzNDQgMjUuMzggMTcuNDU0NSAyNS4zQzE3LjMwNDYgMjUuMjMgMTcuMTU0NiAyNS4xMyAxNi45OTQ3IDI0Ljk5QzE2LjczNDggMjQuNzIgMTYuNTg0OSAyNC4zNyAxNi41ODQ5IDI0QzE2LjU4NDkgMjMuNjMgMTYuNzI0OCAyMy4yOSAxNi45OTQ3IDIzQzE3LjEzNDYgMjIuODcgMTcu'@;
put 'Mjg0NiAyMi43NyAxNy40NDQ1IDIyLjdDMTcuNjE0NCAyMi42MyAxNy43OTQzIDIyLjU5IDE3Ljk4NDMgMjIuNTlDMTguMTc0MiAyMi41OSAxOC4zNTQxIDIyLjYzIDE4LjUyNCAyMi43QzE4LjY3NCAyMi43NyAxOC44MjM5IDIyLjg3IDE4Ljk3MzggMjNDMTkuMDkzOCAyMy4xMiAxOS4yMDM3'@;
put 'IDIzLjI4IDE5LjI3MzcgMjMuNDZDMTkuMzQzNyAyMy42NCAxOS4zODM2IDIzLjgxIDE5LjM4MzYgMjMuOTlDMTkuMzgzNiAyNC4zNSAxOS4yNDM3IDI0LjcgMTguOTYzOCAyNC45OUwxOC45NzM4IDI1WiIvPid9XSxbInRhYmxlIix7b3V0bGluZTonPHBhdGggZD0iTTMzIDE4QzMzLjU1IDE4'@;
put 'IDM0IDE3LjU1IDM0IDE3QzM0IDE2LjQ1IDMzLjU1IDE2IDMzIDE2SDI4VjhIMzNDMzMuNTUgOCAzNCA3LjU1IDM0IDdDMzQgNi40NSAzMy41NSA2IDMzIDZIOFYzQzggMi40NSA3LjU1IDIgNyAyQzYuNDUgMiA2IDIuNDUgNiAzVjZIM0MyLjQ1IDYgMiA2LjQ1IDIgN0MyIDcuNTUgMi40NSA4'@;
put 'IDMgOEg2VjMzQzYgMzMuNTUgNi40NSAzNCA3IDM0QzcuNTUgMzQgOCAzMy41NSA4IDMzVjI4SDE2VjMzQzE2IDMzLjU1IDE2LjQ1IDM0IDE3IDM0QzE3LjU1IDM0IDE4IDMzLjU1IDE4IDMzVjI4SDI2VjMzQzI2IDMzLjU1IDI2LjQ1IDM0IDI3IDM0QzI3LjU1IDM0IDI4IDMzLjU1IDI4IDMz'@;
put 'VjI4SDMzQzMzLjU1IDI4IDM0IDI3LjU1IDM0IDI3QzM0IDI2LjQ1IDMzLjU1IDI2IDMzIDI2SDI4VjE4SDMzWk0xNiAyNkg4VjE4SDE2VjI2Wk0xNiAxNkg4VjhIMTZWMTZaTTI2IDI2SDE4VjE4SDI2VjI2Wk0yNiAxNkgxOFY4SDI2VjE2WiIvPid9XSxbInRyYXNoIix7b3V0bGluZTonPHBh'@;
put 'dGggZD0iTTI3Ljk4IDMxQzI4IDMxLjI1IDI3LjkyIDMxLjQ5IDI3Ljc2IDMxLjY4QzI3LjYgMzEuODcgMjcuMzcgMzEuOTggMjcuMTIgMzJIOC44NUM4LjYgMzEuOTggOC4zNyAzMS44NyA4LjIxIDMxLjY4QzguMDUgMzEuNDkgNy45NyAzMS4yNSA3Ljk5IDMxVjExLjAzSDUuOTdWMzFDNS45'@;
put 'NSAzMS43OCA2LjI0IDMyLjUzIDYuNzggMzMuMDlDNy4zMiAzMy42NSA4LjA2IDMzLjk4IDguODUgMzRIMjcuMTJDMjcuOSAzMy45OCAyOC42NSAzMy42NiAyOS4xOSAzMy4wOUMyOS43MyAzMi41MiAzMC4wMiAzMS43NyAzMCAzMVYxMS4wM0gyNy45OFYzMVpNMTMgMTIuOThWMjcuOThIMTUu'@;
put 'MDJWMTIuOThIMTNaTTE1IDRIMjFWNkgyM1Y0QzIzIDIuOSAyMi4xIDIgMjEgMkgxNUMxMy45IDIgMTMgMi45IDEzIDRWNkgxNVY0Wk0zMC45OSA2Ljk4SDUuMDFDNC40NSA2Ljk4IDQgNy40MyA0IDcuOThDNCA4LjUzIDQuNDUgOC45OCA1LjAxIDguOThIMzAuOTlDMzEuNTUgOC45OCAzMiA4'@;
put 'LjUzIDMyIDcuOThDMzIgNy40MyAzMS41NSA2Ljk4IDMwLjk5IDYuOThaTTIwLjk4IDEyLjk4VjI3Ljk4SDIzVjEyLjk4SDIwLjk4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAu'@;
put 'OTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTggNS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk01Ljk3IDExLjAzVjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2'@;
put 'Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEuMDNINS45N1pNMjAuNzkgMjguODJWMTVIMjMuMjFWMjlIMjAuNzlWMjguODJaTTEyLjgx'@;
put 'IDI4LjgyVjE1SDE1LjIzVjI5SDEyLjgxVjI4LjgyWiIvPid9XSxbInByb2Nlc3Mtb24tdm0iLHtvdXRsaW5lOic8cGF0aCBkPSJNMTIgMTQuNTAwMVYyNC41MDAxQzEyIDI1LjA1MDEgMTIuNDUgMjUuNTAwMSAxMyAyNS41MDAxSDIzQzIzLjU1IDI1LjUwMDEgMjQgMjUuMDUwMSAyNCAyNC41'@;
put 'MDAxVjE0LjUwMDFDMjQgMTMuOTUwMSAyMy41NSAxMy41MDAxIDIzIDEzLjUwMDFIMTNDMTIuNDUgMTMuNTAwMSAxMiAxMy45NTAxIDEyIDE0LjUwMDFaTTE0IDE1LjUwMDFIMjJWMjMuNTAwMUgxNFYxNS41MDAxWk01LjI2IDIyLjI4MDFDNS44MSAyMi4yMDAxIDYuMTkgMjEuNzAwMSA2LjEx'@;
put 'IDIxLjE1MDFDNi4wMyAyMC42MTAxIDYgMjAuMDUwMSA2IDE5LjQ5MDFDNiAxMy40MTAxIDEwLjU1IDguMzkwMDYgMTYuNDcgNy42MTAwNkwxNi4yOSA3Ljc5MDA2QzE1LjkgOC4xODAwNiAxNS45IDguODEwMDYgMTYuMjkgOS4yMDAwNkMxNi40OSA5LjQwMDA2IDE2Ljc0IDkuNDkwMDYgMTcg'@;
put 'OS40OTAwNkMxNy4yNiA5LjQ5MDA2IDE3LjUxIDkuMzkwMDYgMTcuNzEgOS4yMDAwNkwyMC40MiA2LjQ5MDA2TDE3LjcxIDMuNzkwMDZDMTcuMzIgMy40MDAwNiAxNi42OSAzLjQwMDA2IDE2LjMgMy43OTAwNkMxNS45MSA0LjE4MDA2IDE1LjkxIDQuODEwMDYgMTYuMyA1LjIwMDA2TDE2LjY2'@;
put 'IDUuNTYwMDZDOS41NiA2LjI1MDA2IDQgMTIuMjMwMSA0IDE5LjUwMDFDNCAyMC4xNTAxIDQuMDQgMjAuODAwMSA0LjEzIDIxLjQzMDFDNC4yIDIxLjkzMDEgNC42MyAyMi4yOTAxIDUuMTIgMjIuMjkwMUM1LjE2IDIyLjI5MDEgNS4yMSAyMi4yOTAxIDUuMjYgMjIuMjkwMVYyMi4yODAxWk0y'@;
put 'My42NyAzMC4wNzAxQzIxLjk0IDMxLjAwMDEgMTkuOTggMzEuNDkwMSAxOCAzMS40OTAxQzE0LjMgMzEuNDkwMSAxMC44MyAyOS43NjAxIDguNTcgMjYuOTAwMUw4LjgzIDI2Ljk0MDFDOS4zOCAyNy4wNDAxIDkuODkgMjYuNjYwMSA5Ljk4IDI2LjEyMDFDMTAuMDcgMjUuNTgwMSA5LjcgMjUu'@;
put 'MDYwMSA5LjE2IDI0Ljk3MDFMNS4zOCAyNC4zNDAxTDQuNzUgMjguMTIwMUM0LjY2IDI4LjY2MDEgNS4wMyAyOS4xODAxIDUuNTcgMjkuMjcwMUM1LjYzIDI5LjI3MDEgNS42OCAyOS4yODAxIDUuNzQgMjkuMjgwMUM2LjIyIDI5LjI4MDEgNi42NCAyOC45MzAxIDYuNzMgMjguNDUwMUw2Ljgy'@;
put 'IDI3LjkyMDFDOS40NSAzMS40MDAxIDEzLjU5IDMzLjUwMDEgMTggMzMuNTAwMUMyMC4zMSAzMy41MDAxIDIyLjYgMzIuOTMwMSAyNC42MiAzMS44NDAxQzI1LjExIDMxLjU4MDEgMjUuMjkgMzAuOTcwMSAyNS4wMyAzMC40OTAxQzI0Ljc3IDMwLjAwMDEgMjQuMTYgMjkuODIwMSAyMy42OCAz'@;
put 'MC4wODAxTDIzLjY3IDMwLjA3MDFaTTMwLjA5IDI2LjgzMDFMMjkuOSAyNi44NjAxQzMxLjI2IDI0LjY2MDEgMzIgMjIuMTIwMSAzMiAxOS40OTAxQzMyIDEzLjkwMDEgMjguNjggOC44NTAwNiAyMy41NSA2LjYzMDA2QzIzLjA0IDYuNDEwMDYgMjIuNDYgNi42NDAwNiAyMi4yNCA3LjE1MDA2'@;
put 'QzIyLjAyIDcuNjYwMDYgMjIuMjUgOC4yNTAwNiAyMi43NiA4LjQ2MDA2QzI3LjE2IDEwLjM2MDEgMzAuMDEgMTQuNjkwMSAzMC4wMSAxOS40ODAxQzMwLjAxIDIxLjgwMDEgMjkuMzQgMjQuMDQwMSAyOC4xIDI1Ljk2MDFMMjcuOTkgMjUuMzIwMUMyNy45IDI0Ljc4MDEgMjcuMzkgMjQuNDAw'@;
put 'MSAyNi44NCAyNC41MDAxQzI2LjMgMjQuNTkwMSAyNS45MyAyNS4xMDAxIDI2LjAyIDI1LjY1MDFMMjYuNjQgMjkuNDMwMUwzMC40MiAyOC44MTAxQzMwLjk2IDI4LjcyMDEgMzEuMzMgMjguMjEwMSAzMS4yNCAyNy42NjAxQzMxLjE1IDI3LjEyMDEgMzAuNjQgMjYuNzQwMSAzMC4wOSAyNi44'@;
put 'NDAxVjI2LjgzMDFaIi8+J31dKTtsZXQgaEdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLHJlKXt0aGlzLmFwcFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5sb2NhdGlvbj12LHRoaXMuZXZl'@;
put 'bnRTZXJ2aWNlPU0sdGhpcy5hcHBTdG9yZVNlcnZpY2U9SSx0aGlzLmNkcj1HLHRoaXMuZWxlbWVudFJlZj1yZSx0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9bnVsbCx0aGlzLnNhc2pzQWJvcnRzPVtdLHRoaXMuZWRpdG9yQWN0aXZlPSExLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSx0aGlzLmZy'@;
put 'ZWVUaWVyQmFubmVyPXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllci52YWx1ZSx0aGlzLmxpY2VuY2VQcm9ibGVtPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVByb2JsZW0sdGhpcy5hcHBPdmVyQ2FwYWNpdHk9ITEsdGhpcy5hcHBBY3RpdmU9bnVsbCx0aGlzLnJlcXVlc3Rz'@;
put 'TW9kYWw9ITEsdGhpcy5zaG93UmVnaXN0cmF0aW9uPSEwLHRoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITEsdGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITEsZmVhdHVyZU5hbWU6IiJ9LHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlz'@;
put 'LmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKSx3aW5kb3cuYXBwaW5mbz0oKT0+e2NvbnNvbGUudGFibGUoeyJBZGFwdGVyIHZlcnNpb24iOiI0LjEyLjIiLCJBcHAgdmVyc2lvbiI6InY3LjIuMSIucmVwbGFjZSgidiIsIiIpLCJCdWls'@;
put 'ZCB0aW1lc3RhbXAiOlBzKHBhcnNlSW50KCIxNzU0Njc0NTEwMzI1IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKSwiLi4uIjoiLi4uIn0pfSx0aGlzLnN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpLHRoaXMuY29tbWl0VmVyPSJ2Ny4yLjEiLnJlcGxhY2UoInYiLCIiKSsiLmdlZjEw'@;
put 'MTVmIixoLmV2ZW50cy5zdWJzY3JpYmUodWU9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCB5ZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT15ZT8odGhp'@;
put 'cy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT15ZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEp'@;
put 'LEpuLnJvb3RQYXJhbT15ZX10eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikp'@;
put 'fSksdGhpcy5zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93'@;
put 'LmZyYW1lRWxlbWVudCYmKHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZy'@;
put 'YW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1l'@;
put 'bnQuc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgp'@;
put 'LHZvaWQgc2V0VGltZW91dCgoKT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5k'@;
put 'Iil9KTtjb25zdCBkPWY9PmEuZ2V0QXR0cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFk'@;
put 'bWluR3JvdXA6ZCgiYWRtaW5Hcm91cCIpfHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFtZSIp'@;
put 'fHwiIixob3RMaWNlbmNlS2V5OmQoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFp'@;
put 'bHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZS5vbkRlbW9MaW1pdE1vZGFsU2hvdy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5m'@;
put 'cmVlVGllckJhbm5lcj1hfSksdGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+'@;
put 'e3RoaXMuYXBwT3ZlckNhcGFjaXR5PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9u'@;
put 'U2hvd0Fib3J0TW9kYWwuc3Vic2NyaWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBE'@;
put 'YXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9y'@;
put 'dE1vZGFsKGEpe2xldCBkPXRoaXMuc2FzanNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91'@;
put 'dGVyLnVybC5pbmNsdWRlcyhhKX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUodUwpLCRlKGMxKSwkZShMbyksJGUoeXUp'@;
put 'LCRlKHBoKSwkZShtYyksJGUoUTgpLCRlKHhvKSwkZShRaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibXktYXBwIl1dLGRlY2xzOjI2LHZhcnM6MTcsY29uc3RzOltbMSwibWFpbi1jb250YWluZXIiXSxbNCwibmdJZiJdLFsxLCJhcHAtaGVhZGVy'@;
put 'Il0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBtbC0xMCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibG9nbyIsImQtZmxleCIsImNsci1h'@;
put 'bGlnbi1pdGVtcy1jZW50ZXIiXSxbImhyZWYiLCIjIiwiY2xhc3MiLCJuYXYtbGluayIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkQ2hhbmdlIiwib3BlbmVkIl0sWzMsImRhdGEiLCJmb3JjZVJlbG9hZCIsIm9uQ29uZmly'@;
put 'bU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJd'@;
put 'LFsic2l6ZSIsIjIwIiwic2hhcGUiLCJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJu'@;
put 'Z0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0'@;
put 'LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRlbXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwiYWxlcnQtaWNvbiJdLFsxLCJhbGVydC10ZXh0Il0sWyJjbGFzc2VzIiwiY29sb3Itd2hpdGUi'@;
put 'XSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUta2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0'@;
put 'LWRhbmdlciJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNl'@;
put 'bnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIsInRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjcGxh'@;
put 'Y2Vob2xkZXIvc2VydmljZXMvd2ViL2ltYWdlcy9kYy1sb2dvLnN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28gd2l0aG91dCB0ZXh0IiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBw'@;
put 'L2RjcGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL2ltYWdlcy9kYXRhY29udHJvbGxlci5zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJ3aXRoLXRleHQiLCJkLW5vbmUiLCJkLW1kLWJsb2NrIl0sWzEsImNsci1pY29uIiwiaGVhZGVyLWxvZ28iLCJtbC0xMCJdLFsxLCJoZWFk'@;
put 'ZXItbmF2IiwiZC1mbGV4IiwiZC1zbS1ub25lIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwidG9nZ2xlIHNldHRpbmdzIG1lbnUiLDEsIm5hdi1pY29uIiwiY29sb3Itd2hpdGUtaSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0s'@;
put 'WzEsImhlYWRlci1uYXYiLCJkLW5vbmUiLCJkLXNtLWZsZXgiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5h'@;
put 'di10ZXh0IiwiY3Vyc29yLXBvaW50ZXIiLDMsInJvdXRlckxpbmsiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywicm91dGVyTGluayJdLFsxLCJzdWJuYXYiXSxbMSwibmF2Il0sWzEsIm5hdi1pdGVtIl0sWzMsIm9uQ29uZmlybU1vZGFs'@;
put 'Q2xpY2siLCJkYXRhIiwiZm9yY2VSZWxvYWQiXSxbMSwiYXBwLWxvYWRpbmciXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVy'@;
put 'IGxvZ28iLDEsImxvYWRpbmctbG9nbyJdLFsiY2xhc3MiLCJzbGlkZXIiLDQsIm5nSWYiXSxbMSwic2xpZGVyIl0sWzEsImxpbmUiXSxbMSwic3VibGluZSIsImluYyJdLFsxLCJzdWJsaW5lIiwiZGVjIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxndCgx'@;
put 'LFFZZSw0LDMsIm5nLWNvbnRhaW5lciIsMSksZGUoMiwiaGVhZGVyIiwyKSxndCgzLGVHZSwyLDAsImRpdiIsMyksZGUoNCwiZGl2Iiw0KSxndCg1LHRHZSwzLDIsImEiLDUpKDYsbkdlLDIsMCwiYSIsMSksaGUoKSxndCg3LGlHZSwxMywxMCwibmctY29udGFpbmVyIiwxKSxXdCg4LCJhcHAt'@;
put 'aGVhZGVyLWFjdGlvbnMiKSxoZSgpLGd0KDksYUdlLDExLDgsIm5hdiIsNikoMTAsc0dlLDEsMCwiYXBwLWFsZXJ0cyIsMSksZGUoMTEsImFwcC1yZXF1ZXN0cy1tb2RhbCIsNykscGkoIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGdpKGgucmVxdWVzdHNNb2RhbCx2KXx8KGgu'@;
put 'cmVxdWVzdHNNb2RhbD12KSx2fSksaGUoKSxXdCgxMiwiYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIiksZ3QoMTMsb0dlLDEsMCwicm91dGVyLW91dGxldCIsMSksV3QoMTQsImFwcC1sb2dpbiIpLGd0KDE1LGxHZSwxLDAsImFwcC1hbGVydHMiLDEpKDE2LGNHZSwxLDIsImFwcC1pbmZvLW1v'@;
put 'ZGFsIiw4KSxkZSgxNywiY2xyLW1vZGFsIiw5KSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZ2koaC5kZW1vTGltaXROb3RpY2Uub3Blbix2KXx8KGguZGVtb0xpbWl0Tm90aWNlLm9wZW49diksdn0pLGRlKDE4LCJoMyIsMTApLE9lKDE5KSxXdCgyMCwiY2xy'@;
put 'LWljb24iLDExKSxoZSgpLGRlKDIxLCJkaXYiLDEyKSxPZSgyMiwiIENvbnRhY3QgIiksV3QoMjMsImNvbnRhY3QtbGluayIpLE9lKDI0KSxoZSgpKCkoKSxndCgyNSxkR2UsMywxLCJkaXYiLDEzKSksMiZkJiYoZmUoKSxNZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5z'@;
put 'aW5nIikpLGZlKDIpLE1lKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3Iil8fGguaXNNYWluUm91dGUoImhvbWUiKSYmIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIpLE1lKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksZmUoKSxNZSgi'@;
put 'bmdJZiIsaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksZmUoKSxNZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxNZSgibmdJZiIsaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJz'@;
put 'dWJtaXR0ZWQiKXx8aC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxmZSgpLE1lKCJuZ0lmIiwhaC5lcnJUb3ApLGZlKCksZmkoIm9wZW5lZCIsaC5yZXF1ZXN0c01vZGFsKSxmZSgyKSxNZSgibmdJZiIsaC5zdGFydHVw'@;
put 'RGF0YUxvYWRlZCksZmUoMiksTWUoIm5nSWYiLGguZXJyVG9wKSxmZSgpLE1lKCJuZ0Zvck9mIixoLnNhc2pzQWJvcnRzKSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGguZGVtb0xpbWl0Tm90aWNlLm9wZW4pLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiks'@;
put 'ZmUoMiksTHIoIiBMb2NrZWQgRmVhdHVyZSAoIixoLmRlbW9MaW1pdE5vdGljZS5mZWF0dXJlTmFtZSwiKSAiKSxmZSg1KSxMcigiIHdpdGggeW91ciBzaXRlIGlkICgiLGguc3lzc2l0ZS52YWx1ZSwiKSB0byBhY3RpdmF0ZSEgIiksZmUoKSxNZSgibmdJZiIsIWguc3RhcnR1cERhdGFMb2Fk'@;
put 'ZWQpKX0sZGVwZW5kZW5jaWVzOltRcyxiYSxuZyxsMSx1YixWV2UsZVllLHJZZSx5TyxzWWUsaUUsT2wsZW8scnUsWXUsUDIsc2csZzcsbTcsUGIsc0UsTFllLHpZZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBUaGUoYyl7cmV0dXJuIG5ldyBucigzZTMsITEp'@;
put 'fWZ1bmN0aW9uIFRtKGMpe3N3aXRjaChjLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgRXg7Y2FzZSAxOnJldHVybiBjWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyB6MGUoYyl9fWZ1bmN0aW9uIEFoZShjLGwsYT1uZXcgTWFwLGQ9bmV3IE1hcCl7Y29uc3QgaD1bXSxmPVtdO2xldCB2PS0xLE09'@;
put 'bnVsbDtpZihsLmZvckVhY2goST0+e2NvbnN0IEc9SS5nZXQoIm9mZnNldCIpLHJlPUc9PXYsdWU9cmUmJk18fG5ldyBNYXA7SS5mb3JFYWNoKCh5ZSxFZSk9PntsZXQgQmU9RWUsR2U9eWU7aWYoIm9mZnNldCIhPT1FZSlzd2l0Y2goQmU9Yy5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoQmUsaCks'@;
put 'R2Upe2Nhc2UiISI6R2U9YS5nZXQoRWUpO2JyZWFrO2Nhc2Ugcmc6R2U9ZC5nZXQoRWUpO2JyZWFrO2RlZmF1bHQ6R2U9Yy5ub3JtYWxpemVTdHlsZVZhbHVlKEVlLEJlLEdlLGgpfXVlLnNldChCZSxHZSl9KSxyZXx8Zi5wdXNoKHVlKSxNPXVlLHY9R30pLGgubGVuZ3RoKXRocm93IGZ1bmN0'@;
put 'aW9uIFBHZShjKXtyZXR1cm4gbmV3IG5yKDM1MDIsITEpfSgpO3JldHVybiBmfWZ1bmN0aW9uIERHKGMsbCxhLGQpe3N3aXRjaChsKXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmSUcoYSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZJRyhh'@;
put 'LCJkb25lIixjKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6Yy5vbkRlc3Ryb3koKCk9PmQoYSYmSUcoYSwiZGVzdHJveSIsYykpKX19ZnVuY3Rpb24gSUcoYyxsLGEpe2NvbnN0IGY9UkcoYy5lbGVtZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1l'@;
put 'LGEudG90YWxUaW1lPz9jLnRvdGFsVGltZSwhIWEuZGlzYWJsZWQpLHY9Yy5fZGF0YTtyZXR1cm4gbnVsbCE9diYmKGYuX2RhdGE9diksZn1mdW5jdGlvbiBSRyhjLGwsYSxkLGg9IiIsZj0wLHYpe3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQs'@;
put 'cGhhc2VOYW1lOmgsdG90YWxUaW1lOmYsZGlzYWJsZWQ6ISF2fX1mdW5jdGlvbiBraChjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIGtoZShjKXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xp'@;
put 'Y2UobCsxKV19Y29uc3QgR0dlPXR5cGVvZiBkb2N1bWVudD4idSI/bnVsbDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gTEcoYyl7Y29uc3QgbD1jLnBhcmVudE5vZGV8fGMuaG9zdHx8bnVsbDtyZXR1cm4gbD09PUdHZT9udWxsOmx9bGV0IFA3PW51bGwsRGhlPSExO2Z1bmN0'@;
put 'aW9uIEloZShjLGwpe2Zvcig7bDspe2lmKGw9PT1jKXJldHVybiEwO2w9TEcobCl9cmV0dXJuITF9ZnVuY3Rpb24gUmhlKGMsbCxhKXtpZihhKXJldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChsKSk7Y29uc3QgZD1jLnF1ZXJ5U2VsZWN0b3IobCk7cmV0dXJuIGQ/W2RdOltd'@;
put 'fWxldCBPRz0oKCk9PntjbGFzcyBje3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gS0dlKGMpe1A3fHwoUDc9ZnVuY3Rpb24gWEdlKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSxEaGU9ISFQNy5zdHlsZSYmIldl'@;
put 'YmtpdEFwcGVhcmFuY2UiaW4gUDcuc3R5bGUpO2xldCBsPSEwO3JldHVybiBQNy5zdHlsZSYmIWZ1bmN0aW9uICRHZShjKXtyZXR1cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYpfShjKSYmKGw9YyBpbiBQNy5zdHlsZSwhbCYmRGhlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVy'@;
put 'Q2FzZSgpK2Muc2xpY2UoMSlpbiBQNy5zdHlsZSkpLGx9KGEpfW1hdGNoZXNFbGVtZW50KGEsZCl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGEsZCl7cmV0dXJuIEloZShhLGQpfWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIExHKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gUmhlKGEsZCxo'@;
put 'KX1jb21wdXRlU3R5bGUoYSxkLGgpe3JldHVybiBofHwiIn1hbmltYXRlKGEsZCxoLGYsdixNPVtdLEkpe3JldHVybiBuZXcgRXgoaCxmKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46'@;
put 'YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjbGFzcyBQR3tzdGF0aWN7dGhpcy5OT09QPW5ldyBPR319Y2xhc3MgRkd7fWNvbnN0IEpHZT0xZTMsSEc9Im5nLWVudGVyIixiTz0ibmctbGVhdmUiLF9PPSJuZy10cmlnZ2VyIix3Tz0iLm5nLXRyaWdnZXIiLE9oZT0ibmct'@;
put 'YW5pbWF0aW5nIixORz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gZmcoYyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBjO2NvbnN0IGw9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hbHx8bC5sZW5ndGg8Mj8wOlZHKHBhcnNlRmxvYXQobFsxXSksbFsyXSl9ZnVu'@;
put 'Y3Rpb24gVkcoYyxsKXtyZXR1cm4icyI9PT1sP2MqSkdlOmN9ZnVuY3Rpb24gQ08oYyxsLGEpe3JldHVybiBjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP2M6ZnVuY3Rpb24gZSRlKGMsbCxhKXtsZXQgaCxmPTAsdj0iIjtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IE09Yy5tYXRj'@;
put 'aCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PU0pcmV0dXJuIGwucHVzaChUaGUoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2g9VkcocGFyc2VGbG9hdChNWzFdKSxN'@;
put 'WzJdKTtjb25zdCBJPU1bM107bnVsbCE9SSYmKGY9VkcocGFyc2VGbG9hdChJKSxNWzRdKSk7Y29uc3QgRz1NWzVdO0cmJih2PUcpfWVsc2UgaD1jO2lmKCFhKXtsZXQgTT0hMSxJPWwubGVuZ3RoO2g8MCYmKGwucHVzaChmdW5jdGlvbiBmR2UoKXtyZXR1cm4gbmV3IG5yKDMxMDAsITEpfSgp'@;
put 'KSxNPSEwKSxmPDAmJihsLnB1c2goZnVuY3Rpb24gcEdlKCl7cmV0dXJuIG5ldyBucigzMTAxLCExKX0oKSksTT0hMCksTSYmbC5zcGxpY2UoSSwwLFRoZSgpKX1yZXR1cm57ZHVyYXRpb246aCxkZWxheTpmLGVhc2luZzp2fX0oYyxsLGEpfWZ1bmN0aW9uIEVwKGMsbCxhKXtsLmZvckVhY2go'@;
put 'KGQsaCk9Pntjb25zdCBmPWpHKGgpO2EmJiFhLmhhcyhoKSYmYS5zZXQoaCxjLnN0eWxlW2ZdKSxjLnN0eWxlW2ZdPWR9KX1mdW5jdGlvbiBGNyhjLGwpe2wuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9akcoZCk7Yy5zdHlsZVtoXT0iIn0pfWZ1bmN0aW9uIG9FKGMpe3JldHVybiBBcnJheS5p'@;
put 'c0FycmF5KGMpPzE9PWMubGVuZ3RoP2NbMF06ZnVuY3Rpb24gTVBlKGMsbD1udWxsKXtyZXR1cm57dHlwZTprcy5TZXF1ZW5jZSxzdGVwczpjLG9wdGlvbnM6bH19KGMpOmN9Y29uc3QgQkc9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gRmhlKGMpe2xldCBs'@;
put 'PVtdO2lmKCJzdHJpbmciPT10eXBlb2YgYyl7bGV0IGE7Zm9yKDthPUJHLmV4ZWMoYyk7KWwucHVzaChhWzFdKTtCRy5sYXN0SW5kZXg9MH1yZXR1cm4gbH1mdW5jdGlvbiBsRShjLGwsYSl7Y29uc3QgZD1gJHtjfWAsaD1kLnJlcGxhY2UoQkcsKGYsdik9PntsZXQgTT1sW3ZdO3JldHVybiBu'@;
put 'dWxsPT1NJiYoYS5wdXNoKGZ1bmN0aW9uIG1HZShjKXtyZXR1cm4gbmV3IG5yKDMwMDMsITEpfSgpKSxNPSIiKSxNLnRvU3RyaW5nKCl9KTtyZXR1cm4gaD09ZD9jOmh9Y29uc3QgciRlPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBqRyhjKXtyZXR1cm4gYy5yZXBsYWNlKHIkZSwoLi4ubCk9'@;
put 'PmxbMV0udG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gRGgoYyxsLGEpe3N3aXRjaChsLnR5cGUpe2Nhc2Uga3MuVHJpZ2dlcjpyZXR1cm4gYy52aXNpdFRyaWdnZXIobCxhKTtjYXNlIGtzLlN0YXRlOnJldHVybiBjLnZpc2l0U3RhdGUobCxhKTtjYXNlIGtzLlRyYW5zaXRpb246cmV0dXJuIGMu'@;
put 'dmlzaXRUcmFuc2l0aW9uKGwsYSk7Y2FzZSBrcy5TZXF1ZW5jZTpyZXR1cm4gYy52aXNpdFNlcXVlbmNlKGwsYSk7Y2FzZSBrcy5Hcm91cDpyZXR1cm4gYy52aXNpdEdyb3VwKGwsYSk7Y2FzZSBrcy5BbmltYXRlOnJldHVybiBjLnZpc2l0QW5pbWF0ZShsLGEpO2Nhc2Uga3MuS2V5ZnJhbWVz'@;
put 'OnJldHVybiBjLnZpc2l0S2V5ZnJhbWVzKGwsYSk7Y2FzZSBrcy5TdHlsZTpyZXR1cm4gYy52aXNpdFN0eWxlKGwsYSk7Y2FzZSBrcy5SZWZlcmVuY2U6cmV0dXJuIGMudmlzaXRSZWZlcmVuY2UobCxhKTtjYXNlIGtzLkFuaW1hdGVDaGlsZDpyZXR1cm4gYy52aXNpdEFuaW1hdGVDaGlsZChs'@;
put 'LGEpO2Nhc2Uga3MuQW5pbWF0ZVJlZjpyZXR1cm4gYy52aXNpdEFuaW1hdGVSZWYobCxhKTtjYXNlIGtzLlF1ZXJ5OnJldHVybiBjLnZpc2l0UXVlcnkobCxhKTtjYXNlIGtzLlN0YWdnZXI6cmV0dXJuIGMudmlzaXRTdGFnZ2VyKGwsYSk7ZGVmYXVsdDp0aHJvdyBmdW5jdGlvbiB2R2UoYyl7'@;
put 'cmV0dXJuIG5ldyBucigzMDA0LCExKX0oKX19ZnVuY3Rpb24gekcoYyxsKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYylbbF19Y29uc3QgcyRlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJs'@;
put 'ZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRv'@;
put 'bSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKTtjbGFzcyBIaGUgZXh0ZW5k'@;
put 'cyBGR3tub3JtYWxpemVQcm9wZXJ0eU5hbWUobCxhKXtyZXR1cm4gakcobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXtsZXQgZj0iIjtjb25zdCB2PWQudG9TdHJpbmcoKS50cmltKCk7aWYocyRlLmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYoIm51bWJlciI9PXR5cGVvZiBkKWY9'@;
put 'InB4IjtlbHNle2NvbnN0IE09ZC5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO00mJjA9PU1bMV0ubGVuZ3RoJiZoLnB1c2goZnVuY3Rpb24geUdlKGMsbCl7cmV0dXJuIG5ldyBucigzMDA1LCExKX0oKSl9cmV0dXJuIHYrZn19Y29uc3QgU089IioiO2NvbnN0IE1PPW5ldyBTZXQo'@;
put 'WyJ0cnVlIiwiMSJdKSx4Tz1uZXcgU2V0KFsiZmFsc2UiLCIwIl0pO2Z1bmN0aW9uIE5oZShjLGwpe2NvbnN0IGE9TU8uaGFzKGMpfHx4Ty5oYXMoYyksZD1NTy5oYXMobCl8fHhPLmhhcyhsKTtyZXR1cm4oaCxmKT0+e2xldCB2PWM9PVNPfHxjPT1oLE09bD09U098fGw9PWY7cmV0dXJuIXYm'@;
put 'JmEmJiJib29sZWFuIj09dHlwZW9mIGgmJih2PWg/TU8uaGFzKGMpOnhPLmhhcyhjKSksIU0mJmQmJiJib29sZWFuIj09dHlwZW9mIGYmJihNPWY/TU8uaGFzKGwpOnhPLmhhcyhsKSksdiYmTX19Y29uc3QgdSRlPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIFVHKGMs'@;
put 'bCxhLGQpe3JldHVybiBuZXcgZCRlKGMpLmJ1aWxkKGwsYSxkKX1jbGFzcyBkJGV7Y29uc3RydWN0b3IobCl7dGhpcy5fZHJpdmVyPWx9YnVpbGQobCxhLGQpe2NvbnN0IGg9bmV3IHAkZShhKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShoKSxEaCh0aGlzLG9F'@;
put 'KGwpLGgpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGwpe2wuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsbC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCxsLmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksbC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcihsLGEpe2xldCBk'@;
put 'PWEucXVlcnlDb3VudD0wLGg9YS5kZXBDb3VudD0wO2NvbnN0IGY9W10sdj1bXTtyZXR1cm4iQCI9PWwubmFtZS5jaGFyQXQoMCkmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gYkdlKCl7cmV0dXJuIG5ldyBucigzMDA2LCExKX0oKSksbC5kZWZpbml0aW9ucy5mb3JFYWNoKE09PntpZih0aGlz'@;
put 'Ll9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGEpLE0udHlwZT09a3MuU3RhdGUpe2NvbnN0IEk9TSxHPUkubmFtZTtHLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKHJlPT57SS5uYW1lPXJlLGYucHVzaCh0aGlzLnZpc2l0U3RhdGUoSSxhKSl9KSxJLm5hbWU9R31l'@;
put 'bHNlIGlmKE0udHlwZT09a3MuVHJhbnNpdGlvbil7Y29uc3QgST10aGlzLnZpc2l0VHJhbnNpdGlvbihNLGEpO2QrPUkucXVlcnlDb3VudCxoKz1JLmRlcENvdW50LHYucHVzaChJKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gX0dlKCl7cmV0dXJuIG5ldyBucigzMDA3LCExKX0oKSl9'@;
put 'KSx7dHlwZTprcy5UcmlnZ2VyLG5hbWU6bC5uYW1lLHN0YXRlczpmLHRyYW5zaXRpb25zOnYscXVlcnlDb3VudDpkLGRlcENvdW50Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9u'@;
put 'cy5wYXJhbXN8fG51bGw7aWYoZC5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGY9bmV3IFNldCx2PWh8fHt9O2Quc3R5bGVzLmZvckVhY2goTT0+e00gaW5zdGFuY2VvZiBNYXAmJk0uZm9yRWFjaChJPT57RmhlKEkpLmZvckVhY2goRz0+e3YuaGFzT3duUHJvcGVydHkoRyl8fGYuYWRk'@;
put 'KEcpfSl9KX0pLGYuc2l6ZSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiB3R2UoYyxsKXtyZXR1cm4gbmV3IG5yKDMwMDgsITEpfSgwLGYudmFsdWVzKCkpKX1yZXR1cm57dHlwZTprcy5TdGF0ZSxuYW1lOmwubmFtZSxzdHlsZTpkLG9wdGlvbnM6aD97cGFyYW1zOmh9Om51bGx9fXZpc2l0VHJh'@;
put 'bnNpdGlvbihsLGEpe2EucXVlcnlDb3VudD0wLGEuZGVwQ291bnQ9MDtjb25zdCBkPURoKHRoaXMsb0UobC5hbmltYXRpb24pLGEpLGg9ZnVuY3Rpb24gbyRlKGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZD0+ZnVu'@;
put 'Y3Rpb24gbCRlKGMsbCxhKXtpZigiOiI9PWNbMF0pe2NvbnN0IEk9ZnVuY3Rpb24gYyRlKGMsbCl7c3dpdGNoKGMpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VG'@;
put 'bG9hdChkKT5wYXJzZUZsb2F0KGEpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk8cGFyc2VGbG9hdChhKTtkZWZhdWx0OnJldHVybiBsLnB1c2goZnVuY3Rpb24gSUdlKGMpe3JldHVybiBuZXcgbnIoMzAxNiwhMSl9KCkpLCIqID0+ICoifX0oYyxhKTtpZigi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgSSlyZXR1cm4gdm9pZCBsLnB1c2goSSk7Yz1JfWNvbnN0IGQ9Yy5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09ZHx8ZC5sZW5ndGg8NClyZXR1cm4gYS5wdXNoKGZ1bmN0aW9uIERHZShjKXtyZXR1cm4g'@;
put 'bmV3IG5yKDMwMTUsITEpfSgpKSxsO2NvbnN0IGg9ZFsxXSxmPWRbMl0sdj1kWzNdO2wucHVzaChOaGUoaCx2KSksIjwiPT1mWzBdJiYoaCE9U098fHYhPVNPKSYmbC5wdXNoKE5oZSh2LGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX0obC5leHByLGEuZXJyb3JzKTtyZXR1cm57dHlwZTprcy5U'@;
put 'cmFuc2l0aW9uLG1hdGNoZXJzOmgsYW5pbWF0aW9uOmQscXVlcnlDb3VudDphLnF1ZXJ5Q291bnQsZGVwQ291bnQ6YS5kZXBDb3VudCxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UobCxhKXtyZXR1cm57dHlwZTprcy5TZXF1ZW5jZSxzdGVwczpsLnN0ZXBzLm1hcChkPT5E'@;
put 'aCh0aGlzLGQsYSkpLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTtsZXQgaD0wO2NvbnN0IGY9bC5zdGVwcy5tYXAodj0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBNPURoKHRoaXMsdixhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEu'@;
put 'Y3VycmVudFRpbWUpLE19KTtyZXR1cm4gYS5jdXJyZW50VGltZT1oLHt0eXBlOmtzLkdyb3VwLHN0ZXBzOmYsb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWZ1bmN0aW9uIG0kZShjLGwpe2lmKGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0'@;
put 'dXJuIGM7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBaRyhDTyhjLGwpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IGE9YztpZihhLnNwbGl0KC9ccysvKS5zb21lKGY9PiJ7Ij09Zi5jaGFyQXQoMCkmJiJ7Ij09Zi5jaGFyQXQoMSkpKXtjb25zdCBmPVpHKDAsMCwiIik7cmV0dXJuIGYuZHlu'@;
put 'YW1pYz0hMCxmLnN0clZhbHVlPWEsZn1jb25zdCBoPUNPKGEsbCk7cmV0dXJuIFpHKGguZHVyYXRpb24saC5kZWxheSxoLmVhc2luZyl9KGwudGltaW5ncyxhLmVycm9ycyk7YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9ZDtsZXQgaCxmPWwuc3R5bGVzP2wuc3R5bGVzOmxvKHt9KTtpZihmLnR5'@;
put 'cGU9PWtzLktleWZyYW1lcyloPXRoaXMudmlzaXRLZXlmcmFtZXMoZixhKTtlbHNle2xldCB2PWwuc3R5bGVzLE09ITE7aWYoIXYpe009ITA7Y29uc3QgRz17fTtkLmVhc2luZyYmKEcuZWFzaW5nPWQuZWFzaW5nKSx2PWxvKEcpfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtj'@;
put 'b25zdCBJPXRoaXMudmlzaXRTdHlsZSh2LGEpO0kuaXNFbXB0eVN0ZXA9TSxoPUl9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6a3MuQW5pbWF0ZSx0aW1pbmdzOmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21h'@;
put 'a2VTdHlsZUFzdChsLGEpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMpP2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBNIG9mIGgpInN0cmluZyI9PXR5cGVvZiBNP009'@;
put 'PT1yZz9kLnB1c2goTSk6YS5lcnJvcnMucHVzaChuZXcgbnIoMzAwMiwhMSkpOmQucHVzaChuZXcgTWFwKE9iamVjdC5lbnRyaWVzKE0pKSk7bGV0IGY9ITEsdj1udWxsO3JldHVybiBkLmZvckVhY2goTT0+e2lmKE0gaW5zdGFuY2VvZiBNYXAmJihNLmhhcygiZWFzaW5nIikmJih2PU0uZ2V0'@;
put 'KCJlYXNpbmciKSxNLmRlbGV0ZSgiZWFzaW5nIikpLCFmKSlmb3IobGV0IEkgb2YgTS52YWx1ZXMoKSlpZihJLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7Zj0hMDticmVha319KSx7dHlwZTprcy5TdHlsZSxzdHlsZXM6ZCxlYXNpbmc6dixvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNE'@;
put 'eW5hbWljU3R5bGVzOmYsb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5kdXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JF'@;
put 'YWNoKHY9Pnsic3RyaW5nIiE9dHlwZW9mIHYmJnYuZm9yRWFjaCgoTSxJKT0+e2NvbnN0IEc9YS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHJlPUcuZ2V0KEkpO2xldCB1ZT0hMDtyZSYmKGYhPWgmJmY+PXJlLnN0YXJ0VGltZSYmaDw9cmUuZW5kVGltZSYm'@;
put 'KGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gU0dlKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBucigzMDEwLCExKX0oKSksdWU9ITEpLGY9cmUuc3RhcnRUaW1lKSx1ZSYmRy5zZXQoSSx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRpb25zJiZmdW5jdGlvbiBuJGUoYyxsLGEpe2NvbnN0IGQ9'@;
put 'bC5wYXJhbXN8fHt9LGg9RmhlKGMpO2gubGVuZ3RoJiZoLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChmdW5jdGlvbiBnR2UoYyl7cmV0dXJuIG5ldyBucigzMDAxLCExKX0oKSl9KX0oTSxhLm9wdGlvbnMsYS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyhsLGEp'@;
put 'e2NvbnN0IGQ9e3R5cGU6a3MuS2V5ZnJhbWVzLHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFhLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gYS5lcnJvcnMucHVzaChmdW5jdGlvbiBNR2UoKXtyZXR1cm4gbmV3IG5yKDMwMTEsITEpfSgpKSxkO2xldCBmPTA7Y29uc3Qgdj1bXTts'@;
put 'ZXQgTT0hMSxJPSExLEc9MDtjb25zdCByZT1sLnN0ZXBzLm1hcChwdD0+e2NvbnN0IGR0PXRoaXMuX21ha2VTdHlsZUFzdChwdCxhKTtsZXQgcXQ9bnVsbCE9ZHQub2Zmc2V0P2R0Lm9mZnNldDpmdW5jdGlvbiBnJGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBudWxsO2xldCBs'@;
put 'PW51bGw7aWYoQXJyYXkuaXNBcnJheShjKSljLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJmEuaGFzKCJvZmZzZXQiKSl7Y29uc3QgZD1hO2w9cGFyc2VGbG9hdChkLmdldCgib2Zmc2V0IikpLGQuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBNYXAm'@;
put 'JmMuaGFzKCJvZmZzZXQiKSl7Y29uc3QgYT1jO2w9cGFyc2VGbG9hdChhLmdldCgib2Zmc2V0IikpLGEuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gbH0oZHQuc3R5bGVzKSxtbj0wO3JldHVybiBudWxsIT1xdCYmKGYrKyxtbj1kdC5vZmZzZXQ9cXQpLEk9SXx8bW48MHx8bW4+MSxNPU18fG1u'@;
put 'PEcsRz1tbix2LnB1c2gobW4pLGR0fSk7SSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiB4R2UoKXtyZXR1cm4gbmV3IG5yKDMwMTIsITEpfSgpKSxNJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIEVHZSgpe3JldHVybiBuZXcgbnIoMzIwMCwhMSl9KCkpO2NvbnN0IHVlPWwuc3RlcHMubGVuZ3Ro'@;
put 'O2xldCB5ZT0wO2Y+MCYmZjx1ZT9hLmVycm9ycy5wdXNoKGZ1bmN0aW9uIFRHZSgpe3JldHVybiBuZXcgbnIoMzIwMiwhMSl9KCkpOjA9PWYmJih5ZT0xLyh1ZS0xKSk7Y29uc3QgRWU9dWUtMSxCZT1hLmN1cnJlbnRUaW1lLEdlPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLHN0PUdlLmR1cmF0'@;
put 'aW9uO3JldHVybiByZS5mb3JFYWNoKChwdCxkdCk9Pntjb25zdCBxdD15ZT4wP2R0PT1FZT8xOnllKmR0OnZbZHRdLG1uPXF0KnN0O2EuY3VycmVudFRpbWU9QmUrR2UuZGVsYXkrbW4sR2UuZHVyYXRpb249bW4sdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChwdCxhKSxwdC5vZmZzZXQ9cXQsZC5z'@;
put 'dHlsZXMucHVzaChwdCl9KSxkfXZpc2l0UmVmZXJlbmNlKGwsYSl7cmV0dXJue3R5cGU6a3MuUmVmZXJlbmNlLGFuaW1hdGlvbjpEaCh0aGlzLG9FKGwuYW5pbWF0aW9uKSxhKSxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7cmV0dXJuIGEuZGVwQ291bnQr'@;
put 'Kyx7dHlwZTprcy5BbmltYXRlQ2hpbGQsb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYobCxhKXtyZXR1cm57dHlwZTprcy5BbmltYXRlUmVmLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGEpLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlz'@;
put 'aXRRdWVyeShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50UXVlcnlTZWxlY3RvcixoPWwub3B0aW9uc3x8e307YS5xdWVyeUNvdW50KyssYS5jdXJyZW50UXVlcnk9bDtjb25zdFtmLHZdPWZ1bmN0aW9uIGgkZShjKXtjb25zdCBsPSEhYy5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoYT0+IjpzZWxmIj09'@;
put 'YSk7cmV0dXJuIGwmJihjPWMucmVwbGFjZSh1JGUsIiIpKSxjPWMucmVwbGFjZSgvQFwqL2csd08pLnJlcGxhY2UoL0BcdysvZyxhPT53TysiLSIrYS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLE5HKSxbYyxsXX0obC5zZWxlY3Rvcik7YS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1k'@;
put 'Lmxlbmd0aD9kKyIgIitmOmYsa2goYS5jb2xsZWN0ZWRTdHlsZXMsYS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtjb25zdCBNPURoKHRoaXMsb0UobC5hbmltYXRpb24pLGEpO3JldHVybiBhLmN1cnJlbnRRdWVyeT1udWxsLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZCx7dHlwZTpr'@;
put 'cy5RdWVyeSxzZWxlY3RvcjpmLGxpbWl0OmgubGltaXR8fDAsb3B0aW9uYWw6ISFoLm9wdGlvbmFsLGluY2x1ZGVTZWxmOnYsYW5pbWF0aW9uOk0sb3JpZ2luYWxTZWxlY3RvcjpsLnNlbGVjdG9yLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKGwsYSl7YS5jdXJyZW50UXVl'@;
put 'cnl8fGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gQUdlKCl7cmV0dXJuIG5ldyBucigzMDEzLCExKX0oKSk7Y29uc3QgZD0iZnVsbCI9PT1sLnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpDTyhsLnRpbWluZ3MsYS5lcnJvcnMsITApO3JldHVybnt0eXBlOmtzLlN0'@;
put 'YWdnZXIsYW5pbWF0aW9uOkRoKHRoaXMsb0UobC5hbmltYXRpb24pLGEpLHRpbWluZ3M6ZCxvcHRpb25zOm51bGx9fX1jbGFzcyBwJGV7Y29uc3RydWN0b3IobCl7dGhpcy5lcnJvcnM9bCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1u'@;
put 'dWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51bnN1'@;
put 'cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX1mdW5jdGlvbiBINyhjKXtyZXR1cm4gYz8oYz17Li4uY30pLnBhcmFtcyYmKGMucGFyYW1zPWZ1bmN0aW9uIGYkZShjKXtyZXR1cm4gYz97Li4uY306bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gWkcoYyxsLGEpe3Jl'@;
put 'dHVybntkdXJhdGlvbjpjLGRlbGF5OmwsZWFzaW5nOmF9fWZ1bmN0aW9uIFdHKGMsbCxhLGQsaCxmLHY9bnVsbCxNPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxU'@;
put 'aW1lOmgrZixlYXNpbmc6dixzdWJUaW1lbGluZTpNfX1jbGFzcyBFT3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldChsKXtyZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1b'@;
put 'XSksZC5wdXNoKC4uLmEpfWhhcyhsKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1jb25zdCBiJGU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLHckZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gWUcoYyxsLGEsZCxoLGY9bmV3'@;
put 'IE1hcCx2PW5ldyBNYXAsTSxJLEc9W10pe3JldHVybihuZXcgQyRlKS5idWlsZEtleWZyYW1lcyhjLGwsYSxkLGgsZix2LE0sSSxHKX1jbGFzcyBDJGV7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLHYsTSxJLEcscmU9W10pe0c9R3x8bmV3IEVPO2NvbnN0IHVlPW5ldyBHRyhsLGEsRyxoLGYs'@;
put 'cmUsW10pO3VlLm9wdGlvbnM9STtjb25zdCB5ZT1JLmRlbGF5P2ZnKEkuZGVsYXkpOjA7dWUuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAoeWUpLHVlLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW3ZdLG51bGwsdWUuZXJyb3JzLEkpLERoKHRoaXMsZCx1ZSk7Y29uc3QgRWU9dWUu'@;
put 'dGltZWxpbmVzLmZpbHRlcihCZT0+QmUuY29udGFpbnNBbmltYXRpb24oKSk7aWYoRWUubGVuZ3RoJiZNLnNpemUpe2xldCBCZTtmb3IobGV0IEdlPUVlLmxlbmd0aC0xO0dlPj0wO0dlLS0pe2NvbnN0IHN0PUVlW0dlXTtpZihzdC5lbGVtZW50PT09YSl7QmU9c3Q7YnJlYWt9fUJlJiYhQmUu'@;
put 'YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKSYmQmUuc2V0U3R5bGVzKFtNXSxudWxsLHVlLmVycm9ycyxJKX1yZXR1cm4gRWUubGVuZ3RoP0VlLm1hcChCZT0+QmUuYnVpbGRLZXlmcmFtZXMoKSk6W1dHKGEsW10sW10sW10sMCx5ZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0'@;
put 'YXRlKGwsYSl7fXZpc2l0VHJhbnNpdGlvbihsLGEpe312aXNpdEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJl'@;
put 'bnRUaW1lLHY9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMoZCxoLGgub3B0aW9ucyk7ZiE9diYmYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodil9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2Qu'@;
put 'dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1hdGlvbi5vcHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50'@;
put 'VGltZWxpbmUuY3VycmVudFRpbWUpLGEucHJldmlvdXNOb2RlPWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3IoY29uc3QgaCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IHY9Im51bWJlciI9PXR5cGVvZiBmP2Y6ZmcobEUoZixoPy5wYXJhbXM/P3t9LGEu'@;
put 'ZXJyb3JzKSk7ZC5kZWxheU5leHRTdGVwKHYpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCB2PW51bGwhPWQuZHVyYXRpb24/ZmcoZC5kdXJhdGlvbik6bnVsbCxNPW51bGwhPWQuZGVsYXk/ZmcoZC5kZWxh'@;
put 'eSk6bnVsbDtyZXR1cm4gMCE9PXYmJmwuZm9yRWFjaChJPT57Y29uc3QgRz1hLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShJLHYsTSk7Zj1NYXRoLm1heChmLEcuZHVyYXRpb24rRy5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywh'@;
put 'MCksRGgodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3ViQ29udGV4dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYp'@;
put 'LGgudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9Zi5kZWxheSkpe2gucHJldmlvdXNOb2RlLnR5cGU9PWtzLlN0eWxlJiYoaC5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaC5wcmV2aW91c05vZGU9VE8pO2NvbnN0IHY9ZmcoZi5kZWxheSk7aC5kZWxh'@;
put 'eU5leHRTdGVwKHYpfWwuc3RlcHMubGVuZ3RoJiYobC5zdGVwcy5mb3JFYWNoKHY9PkRoKHRoaXMsdixoKSksaC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaC5zdWJDb250ZXh0Q291bnQ+ZCYmaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksYS5wcmV2aW91'@;
put 'c05vZGU9bH12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBmPWwub3B0aW9ucyYmbC5vcHRpb25zLmRlbGF5P2ZnKGwub3B0aW9ucy5kZWxheSk6MDtsLnN0ZXBzLmZvckVhY2godj0+e2NvbnN0IE09YS5jcmVhdGVT'@;
put 'dWJDb250ZXh0KGwub3B0aW9ucyk7ZiYmTS5kZWxheU5leHRTdGVwKGYpLERoKHRoaXMsdixNKSxoPU1hdGgubWF4KGgsTS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGQucHVzaChNLmN1cnJlbnRUaW1lbGluZSl9KSxkLmZvckVhY2godj0+YS5jdXJyZW50VGltZWxpbmUubWVyZ2VU'@;
put 'aW1lbGluZUNvbGxlY3RlZFN0eWxlcyh2KSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCksYS5wcmV2aW91c05vZGU9bH1fdmlzaXRUaW1pbmcobCxhKXtpZihsLmR5bmFtaWMpe2NvbnN0IGQ9bC5zdHJWYWx1ZTtyZXR1cm4gQ08oYS5wYXJhbXM/bEUoZCxhLnBhcmFtcyxhLmVycm9y'@;
put 'cyk6ZCxhLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOmwuZHVyYXRpb24sZGVsYXk6bC5kZWxheSxlYXNpbmc6bC5lYXNpbmd9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcobC50aW1pbmdzLGEpLGg9YS5jdXJyZW50'@;
put 'VGltZWxpbmU7ZC5kZWxheSYmKGEuaW5jcmVtZW50VGltZShkLmRlbGF5KSxoLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBmPWwuc3R5bGU7Zi50eXBlPT1rcy5LZXlmcmFtZXM/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhp'@;
put 'cy52aXNpdFN0eWxlKGYsYSksaC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQu'@;
put 'aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZkLmZvcndhcmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5nO2wuaXNFbXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05v'@;
put 'ZGU9bH12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixmPWQuZHVyYXRpb24sTT1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7TS5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMu'@;
put 'Zm9yRWFjaChJPT57TS5mb3J3YXJkVGltZSgoSS5vZmZzZXR8fDApKmYpLE0uc2V0U3R5bGVzKEkuc3R5bGVzLEkuZWFzaW5nLGEuZXJyb3JzLGEub3B0aW9ucyksTS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHls'@;
put 'ZXMoTSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCtmKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/ZmcoaC5kZWxheSk6MDtmJiYoYS5wcmV2aW91c05v'@;
put 'ZGUudHlwZT09PWtzLlN0eWxlfHwwPT1kJiZhLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksYS5wcmV2aW91c05vZGU9VE8pO2xldCB2PWQ7Y29uc3QgTT1hLmludm9rZVF1ZXJ5'@;
put 'KGwuc2VsZWN0b3IsbC5vcmlnaW5hbFNlbGVjdG9yLGwubGltaXQsbC5pbmNsdWRlU2VsZiwhIWgub3B0aW9uYWwsYS5lcnJvcnMpO2EuY3VycmVudFF1ZXJ5VG90YWw9TS5sZW5ndGg7bGV0IEk9bnVsbDtNLmZvckVhY2goKEcscmUpPT57YS5jdXJyZW50UXVlcnlJbmRleD1yZTtjb25zdCB1'@;
put 'ZT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zLEcpO2YmJnVlLmRlbGF5TmV4dFN0ZXAoZiksRz09PWEuZWxlbWVudCYmKEk9dWUuY3VycmVudFRpbWVsaW5lKSxEaCh0aGlzLGwuYW5pbWF0aW9uLHVlKSx1ZS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdj1N'@;
put 'YXRoLm1heCh2LHVlLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxhLmN1cnJlbnRRdWVyeUluZGV4PTAsYS5jdXJyZW50UXVlcnlUb3RhbD0wLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpLEkmJihhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5'@;
put 'bGVzKEkpLGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3RhZ2dlcihsLGEpe2NvbnN0IGQ9YS5wYXJlbnRDb250ZXh0LGg9YS5jdXJyZW50VGltZWxpbmUsZj1sLnRpbWluZ3Msdj1NYXRoLmFicyhmLmR1cmF0aW9uKSxN'@;
put 'PXYqKGEuY3VycmVudFF1ZXJ5VG90YWwtMSk7bGV0IEk9diphLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChmLmR1cmF0aW9uPDA/InJldmVyc2UiOmYuZWFzaW5nKXtjYXNlInJldmVyc2UiOkk9TS1JO2JyZWFrO2Nhc2UiZnVsbCI6ST1kLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCByZT1h'@;
put 'LmN1cnJlbnRUaW1lbGluZTtJJiZyZS5kZWxheU5leHRTdGVwKEkpO2NvbnN0IHVlPXJlLmN1cnJlbnRUaW1lO0RoKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bCxkLmN1cnJlbnRTdGFnZ2VyVGltZT1oLmN1cnJlbnRUaW1lLXVlKyhoLnN0YXJ0VGltZS1kLmN1cnJlbnRU'@;
put 'aW1lbGluZS5zdGFydFRpbWUpfX1jb25zdCBUTz17fTtjbGFzcyBHR3tjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEkpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWQsdGhpcy5fZW50ZXJDbGFzc05hbWU9aCx0aGlzLl9sZWF2ZUNsYXNzTmFt'@;
put 'ZT1mLHRoaXMuZXJyb3JzPXYsdGhpcy50aW1lbGluZXM9TSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVRPLHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1'@;
put 'ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1JfHxuZXcgQU8odGhpcy5fZHJpdmVyLGEsMCksTS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMu'@;
put 'b3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyhsLGEpe2lmKCFsKXJldHVybjtjb25zdCBkPWw7bGV0IGg9dGhpcy5vcHRpb25zO251bGwhPWQuZHVyYXRpb24mJihoLmR1cmF0aW9uPWZnKGQuZHVyYXRpb24pKSxudWxsIT1kLmRlbGF5JiYoaC5kZWxheT1mZyhkLmRlbGF5KSk7Y29uc3Qg'@;
put 'Zj1kLnBhcmFtcztpZihmKXtsZXQgdj1oLnBhcmFtczt2fHwodj10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09PnsoIWF8fCF2Lmhhc093blByb3BlcnR5KE0pKSYmKHZbTV09bEUoZltNXSx2LHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7'@;
put 'Y29uc3QgbD17fTtpZih0aGlzLm9wdGlvbnMpe2NvbnN0IGE9dGhpcy5vcHRpb25zLnBhcmFtcztpZihhKXtjb25zdCBkPWwucGFyYW1zPXt9O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2RbaF09YVtoXX0pfX1yZXR1cm4gbH1jcmVhdGVTdWJDb250ZXh0KGw9bnVsbCxhLGQpe2NvbnN0'@;
put 'IGg9YXx8dGhpcy5lbGVtZW50LGY9bmV3IEdHKHRoaXMuX2RyaXZlcixoLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaCxkfHww'@;
put 'KSk7cmV0dXJuIGYucHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLGYuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLGYub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLGYudXBkYXRlT3B0aW9ucyhsKSxmLmN1cnJlbnRRdWVyeUluZGV4PXRo'@;
put 'aXMuY3VycmVudFF1ZXJ5SW5kZXgsZi5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLGYucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50KyssZn10cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPVRP'@;
put 'LHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LGwpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEsZCl7Y29u'@;
put 'c3QgaD17ZHVyYXRpb246YT8/bC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoZD8/MCkrbC5kZWxheSxlYXNpbmc6IiJ9LGY9bmV3IFMkZSh0aGlzLl9kcml2ZXIsbC5lbGVtZW50LGwua2V5ZnJhbWVzLGwucHJlU3R5bGVQcm9wcyxsLnBvc3RTdHls'@;
put 'ZVByb3BzLGgsbC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goZiksaH1pbmNyZW1lbnRUaW1lKGwpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK2wpfWRlbGF5TmV4dFN0ZXAo'@;
put 'bCl7bD4wJiZ0aGlzLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGwpfWludm9rZVF1ZXJ5KGwsYSxkLGgsZix2KXtsZXQgTT1bXTtpZihoJiZNLnB1c2godGhpcy5lbGVtZW50KSxsLmxlbmd0aD4wKXtsPShsPWwucmVwbGFjZShiJGUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSku'@;
put 'cmVwbGFjZSh3JGUsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgRz10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LGwsMSE9ZCk7MCE9PWQmJihHPWQ8MD9HLnNsaWNlKEcubGVuZ3RoK2QsRy5sZW5ndGgpOkcuc2xpY2UoMCxkKSksTS5wdXNoKC4uLkcpfXJldHVybiFmJiYw'@;
put 'PT1NLmxlbmd0aCYmdi5wdXNoKGZ1bmN0aW9uIGtHZShjKXtyZXR1cm4gbmV3IG5yKDMwMTQsITEpfSgpKSxNfX1jbGFzcyBBT3tjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0'@;
put 'eWxlc0xvb2t1cD1oLHRoaXMuZHVyYXRpb249MCx0aGlzLmVhc2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9s'@;
put 'b2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBNYXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRp'@;
put 'bWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRp'@;
put 'bWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoYSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4h'@;
put 'MTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFy'@;
put 'dFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVwKGwpe2NvbnN0IGE9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8YT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2wpLGEmJnRoaXMuc25hcHNo'@;
put 'b3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz1sfWZvcmsobCxhKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgQU8odGhpcy5fZHJpdmVyLGwsYXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2Fk'@;
put 'S2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhp'@;
put 'cy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUobCl7dGhpcy5hcHBseVN0'@;
put 'eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPWwsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKGwsYSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0'@;
put 'KGwse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTphfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGwpe2wmJnRoaXMuX3ByZXZpb3VzS2V5ZnJh'@;
put 'bWUuc2V0KCJlYXNpbmciLGwpO2ZvcihsZXRbYSxkXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChhLGR8fHJnKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEscmcpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50'@;
put 'S2V5ZnJhbWV9c2V0U3R5bGVzKGwsYSxkLGgpe2EmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGEpO2NvbnN0IGY9aCYmaC5wYXJhbXN8fHt9LHY9ZnVuY3Rpb24gTSRlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2xldCBkO3JldHVybiBjLmZvckVhY2goaD0+e2lmKCIqIj09'@;
put 'PWgpe2Q/Pz1sLmtleXMoKTtmb3IobGV0IGYgb2YgZClhLnNldChmLHJnKX1lbHNlIGZvcihsZXRbZix2XW9mIGgpYS5zZXQoZix2KX0pLGF9KGwsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbTSxJXW9mIHYpe2NvbnN0IEc9bEUoSSxmLGQpO3RoaXMuX3BlbmRpbmdTdHls'@;
put 'ZXMuc2V0KE0sRyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoTSl8fHRoaXMuX2JhY2tGaWxsLnNldChNLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChNKT8/cmcpLHRoaXMuX3VwZGF0ZVN0eWxlKE0sRyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3Bl'@;
put 'bmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9j'@;
put 'dXJyZW50S2V5ZnJhbWUuaGFzKGEpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFtsLGFdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChsLGEpLHRoaXMuX3VwZGF0ZVN0'@;
put 'eWxlKGwsYSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGEgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWwucHVzaChhKTtyZXR1cm4gbH1tZXJnZVRpbWVsaW5l'@;
put 'Q29sbGVjdGVkU3R5bGVzKGwpe2wuX3N0eWxlU3VtbWFyeS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KGQpOyghaHx8YS50aW1lPmgudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGQsYS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlT'@;
put 'dHlsZXNUb0tleWZyYW1lKCk7Y29uc3QgbD1uZXcgU2V0LGE9bmV3IFNldCxkPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb247bGV0IGg9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKE0sSSk9Pntjb25zdCBHPW5ldyBNYXAoWy4uLnRoaXMuX2JhY2tGaWxs'@;
put 'LC4uLk1dKTtHLmZvckVhY2goKHJlLHVlKT0+eyIhIj09PXJlP2wuYWRkKHVlKTpyZT09PXJnJiZhLmFkZCh1ZSl9KSxkfHxHLnNldCgib2Zmc2V0IixJL3RoaXMuZHVyYXRpb24pLGgucHVzaChHKX0pO2NvbnN0IGY9Wy4uLmwudmFsdWVzKCldLHY9Wy4uLmEudmFsdWVzKCldO2lmKGQpe2Nv'@;
put 'bnN0IE09aFswXSxJPW5ldyBNYXAoTSk7TS5zZXQoIm9mZnNldCIsMCksSS5zZXQoIm9mZnNldCIsMSksaD1bTSxJXX1yZXR1cm4gV0codGhpcy5lbGVtZW50LGgsZix2LHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX1jbGFzcyBTJGUgZXh0ZW5kcyBBT3tj'@;
put 'b25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNPSExKXtzdXBlcihsLGEsdi5kZWxheSksdGhpcy5rZXlmcmFtZXM9ZCx0aGlzLnByZVN0eWxlUHJvcHM9aCx0aGlzLnBvc3RTdHlsZVByb3BzPWYsdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9TSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnYu'@;
put 'ZHVyYXRpb24sZGVsYXk6di5kZWxheSxlYXNpbmc6di5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IGw9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmEsZHVyYXRpb246ZCxlYXNpbmc6aH09dGhpcy50'@;
put 'aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZhKXtjb25zdCBmPVtdLHY9ZCthLE09YS92LEk9bmV3IE1hcChsWzBdKTtJLnNldCgib2Zmc2V0IiwwKSxmLnB1c2goSSk7Y29uc3QgRz1uZXcgTWFwKGxbMF0pO0cuc2V0KCJvZmZzZXQiLGpoZShNKSksZi5wdXNoKEcp'@;
put 'O2NvbnN0IHJlPWwubGVuZ3RoLTE7Zm9yKGxldCB1ZT0xO3VlPD1yZTt1ZSsrKXtsZXQgeWU9bmV3IE1hcChsW3VlXSk7Y29uc3QgRWU9eWUuZ2V0KCJvZmZzZXQiKTt5ZS5zZXQoIm9mZnNldCIsamhlKChhK0VlKmQpL3YpKSxmLnB1c2goeWUpfWQ9dixhPTAsaD0iIixsPWZ9cmV0dXJuIFdH'@;
put 'KHRoaXMuZWxlbWVudCxsLHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGQsYSxoLCEwKX19ZnVuY3Rpb24gamhlKGMsbD0zKXtjb25zdCBhPU1hdGgucG93KDEwLGwtMSk7cmV0dXJuIE1hdGgucm91bmQoYyphKS9hfWZ1bmN0aW9uIHpoZShjLGwsYSxkLGgsZix2LE0s'@;
put 'SSxHLHJlLHVlLHllKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6Yyx0cmlnZ2VyTmFtZTpsLGlzUmVtb3ZhbFRyYW5zaXRpb246aCxmcm9tU3RhdGU6YSxmcm9tU3R5bGVzOmYsdG9TdGF0ZTpkLHRvU3R5bGVzOnYsdGltZWxpbmVzOk0scXVlcmllZEVsZW1lbnRzOkkscHJlU3R5bGVQcm9wczpH'@;
put 'LHBvc3RTdHlsZVByb3BzOnJlLHRvdGFsVGltZTp1ZSxlcnJvcnM6eWV9fWNvbnN0ICRHPXt9O2NsYXNzIFVoZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fdHJpZ2dlck5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX3N0YXRlU3R5bGVzPWR9bWF0Y2gobCxhLGQsaCl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IHgkZShjLGwsYSxkLGgpe3JldHVybiBjLnNvbWUoZj0+ZihsLGEsZCxoKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLGwsYSxkLGgpfWJ1aWxkU3R5bGVzKGwsYSxkKXtsZXQgaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09bCYmKGg9dGhpcy5fc3RhdGVTdHlsZXMu'@;
put 'Z2V0KGw/LnRvU3RyaW5nKCkpfHxoKSxoP2guYnVpbGRTdHlsZXMoYSxkKTpuZXcgTWFwfWJ1aWxkKGwsYSxkLGgsZix2LE0sSSxHLHJlKXtjb25zdCB1ZT1bXSx5ZT10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8JEcsQmU9dGhpcy5idWlsZFN0eWxlcyhkLE0m'@;
put 'Jk0ucGFyYW1zfHwkRyx1ZSksR2U9SSYmSS5wYXJhbXN8fCRHLHN0PXRoaXMuYnVpbGRTdHlsZXMoaCxHZSx1ZSkscHQ9bmV3IFNldCxkdD1uZXcgTWFwLHF0PW5ldyBNYXAsbW49InZvaWQiPT09aCx3bj17cGFyYW1zOlpoZShHZSx5ZSksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9'@;
put 'LGhuPXJlP1tdOllHKGwsYSx0aGlzLmFzdC5hbmltYXRpb24sZix2LEJlLHN0LHduLEcsdWUpO2xldCBNbj0wO3JldHVybiBobi5mb3JFYWNoKE1yPT57TW49TWF0aC5tYXgoTXIuZHVyYXRpb24rTXIuZGVsYXksTW4pfSksdWUubGVuZ3RoP3poZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxt'@;
put 'bixCZSxzdCxbXSxbXSxkdCxxdCxNbix1ZSk6KGhuLmZvckVhY2goTXI9Pntjb25zdCBrcj1Nci5lbGVtZW50LHFuPWtoKGR0LGtyLG5ldyBTZXQpO01yLnByZVN0eWxlUHJvcHMuZm9yRWFjaChxcj0+cW4uYWRkKHFyKSk7Y29uc3QgZ3I9a2gocXQsa3IsbmV3IFNldCk7TXIucG9zdFN0eWxl'@;
put 'UHJvcHMuZm9yRWFjaChxcj0+Z3IuYWRkKHFyKSksa3IhPT1hJiZwdC5hZGQoa3IpfSksemhlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZCxoLG1uLEJlLHN0LGhuLFsuLi5wdC52YWx1ZXMoKV0sZHQscXQsTW4pKX19ZnVuY3Rpb24gWmhlKGMsbCl7Y29uc3QgYT17Li4ubH07cmV0dXJuIE9iamVj'@;
put 'dC5lbnRyaWVzKGMpLmZvckVhY2goKFtkLGhdKT0+e251bGwhPWgmJihhW2RdPWgpfSksYX1jbGFzcyBFJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEsdGhpcy5ub3JtYWxpemVyPWR9YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBN'@;
put 'YXAsaD1aaGUobCx0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiB0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmPT57InN0cmluZyIhPXR5cGVvZiBmJiZmLmZvckVhY2goKHYsTSk9Pnt2JiYodj1sRSh2LGgsYSkpO2NvbnN0IEk9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5'@;
put 'TmFtZShNLGEpO3Y9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUoTSxJLHYsYSksZC5zZXQoTSx2KX0pfSksZH19Y2xhc3MgQSRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLnRyYW5zaXRpb25GYWN0'@;
put 'b3JpZXM9W10sdGhpcy5zdGF0ZXM9bmV3IE1hcCxhLnN0YXRlcy5mb3JFYWNoKGg9Pnt0aGlzLnN0YXRlcy5zZXQoaC5uYW1lLG5ldyBFJGUoaC5zdHlsZSxoLm9wdGlvbnMmJmgub3B0aW9ucy5wYXJhbXN8fHt9LGQpKX0pLFdoZSh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxXaGUodGhpcy5z'@;
put 'dGF0ZXMsImZhbHNlIiwiMCIpLGEudHJhbnNpdGlvbnMuZm9yRWFjaChoPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IFVoZShsLGgsdGhpcy5zdGF0ZXMpKX0pLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uIGskZShjLGwsYSl7cmV0dXJuIG5ldyBVaGUoYyx7'@;
put 'dHlwZTprcy5UcmFuc2l0aW9uLGFuaW1hdGlvbjp7dHlwZTprcy5TZXF1ZW5jZSxzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlsodixNKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sbCl9KGwsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJp'@;
put 'ZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbihsLGEsZCxoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQodj0+di5tYXRjaChsLGEsZCxoKSl8fG51bGx9bWF0Y2hTdHlsZXMobCxhLGQpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJh'@;
put 'bnNpdGlvbi5idWlsZFN0eWxlcyhsLGEsZCl9fWZ1bmN0aW9uIFdoZShjLGwsYSl7Yy5oYXMobCk/Yy5oYXMoYSl8fGMuc2V0KGEsYy5nZXQobCkpOmMuaGFzKGEpJiZjLnNldChsLGMuZ2V0KGEpKX1jb25zdCBEJGU9bmV3IEVPO2NsYXNzIEkkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5i'@;
put 'b2R5Tm9kZT1sLHRoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVyc0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9VUcodGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYo'@;
put 'ZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gRkdlKGMpe3JldHVybiBuZXcgbnIoMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5zZXQobCxmKX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9QWhlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFtZXMsYSxkKTtyZXR1'@;
put 'cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUoaCxmLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxkPXt9KXtjb25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IHY7Y29uc3QgTT1uZXcgTWFwO2lmKGY/KHY9WUcodGhpcy5fZHJpdmVyLGEs'@;
put 'ZixIRyxiTyxuZXcgTWFwLG5ldyBNYXAsZCxEJGUsaCksdi5mb3JFYWNoKHJlPT57Y29uc3QgdWU9a2goTSxyZS5lbGVtZW50LG5ldyBNYXApO3JlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goeWU9PnVlLnNldCh5ZSxudWxsKSl9KSk6KGgucHVzaChmdW5jdGlvbiBIR2UoKXtyZXR1cm4gbmV3'@;
put 'IG5yKDMzMDAsITEpfSgpKSx2PVtdKSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBOR2UoYyl7cmV0dXJuIG5ldyBucigzNTA0LCExKX0oKTtNLmZvckVhY2goKHJlLHVlKT0+e3JlLmZvckVhY2goKHllLEVlKT0+e3JlLnNldChFZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKHVlLEVlLHJn'@;
put 'KSl9KX0pO2NvbnN0IEc9VG0odi5tYXAocmU9Pntjb25zdCB1ZT1NLmdldChyZS5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQbGF5ZXIocmUsbmV3IE1hcCx1ZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldChsLEcpLEcub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkp'@;
put 'LHRoaXMucGxheWVycy5wdXNoKEcpLEd9ZGVzdHJveShsKXtjb25zdCBhPXRoaXMuX2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGQsMSl9'@;
put 'X2dldFBsYXllcihsKXtjb25zdCBhPXRoaXMuX3BsYXllcnNCeUlkLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBWR2UoYyl7cmV0dXJuIG5ldyBucigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1SRyhhLCIiLCIiLCIiKTtyZXR1cm4gREcodGhpcy5f'@;
put 'Z2V0UGxheWVyKGwpLGQsZixoKSwoKT0+e319Y29tbWFuZChsLGEsZCxoKXtpZigicmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30pO2NvbnN0IGY9dGhpcy5fZ2V0'@;
put 'UGxheWVyKGwpO3N3aXRjaChkKXtjYXNlInBsYXkiOmYucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmYucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6Zi5maW5pc2goKTticmVhaztj'@;
put 'YXNlImluaXQiOmYuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmYuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBZaGU9Im5nLWFuaW1hdGUtcXVldWVkIixLRz0ibmctYW5pbWF0ZS1kaXNhYmxl'@;
put 'ZCIsRiRlPVtdLEdoZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sSCRlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9u'@;
put 'OiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxpMz0iX19uZ19yZW1vdmVkIjtjbGFzcyBYR3tnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IobCxhPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWE7Y29uc3QgZD1sJiZsLmhhc093blByb3BlcnR5KCJ2'@;
put 'YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24gaiRlKGMpe3JldHVybiBjPz9udWxsfShkP2wudmFsdWU6bCksZCl7Y29uc3R7dmFsdWU6ZiwuLi52fT1sO3RoaXMub3B0aW9ucz12fWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFy'@;
put 'YW1zPXt9KX1hYnNvcmJPcHRpb25zKGwpe2NvbnN0IGE9bC5wYXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCBjRT0idm9pZCIscUc9bmV3IFhHKGNFKTtjbGFz'@;
put 'cyBOJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQsdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RD'@;
put 'bGFzc05hbWU9Im5nLXRucy0iK2wsTjIoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiBCR2UoYyxsKXtyZXR1cm4gbmV3IG5yKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQubGVuZ3RoKXRo'@;
put 'cm93IGZ1bmN0aW9uIGpHZShjKXtyZXR1cm4gbmV3IG5yKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiB6JGUoYyl7cmV0dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiB6R2UoYyxsKXtyZXR1cm4gbmV3IG5yKDM0MDAsITEpfSgpO2NvbnN0IGY9a2godGhpcy5f'@;
put 'ZWxlbWVudExpc3RlbmVycyxsLFtdKSx2PXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpofTtmLnB1c2godik7Y29uc3QgTT1raCh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIE0uaGFzKGEpfHwoTjIobCxfTyksTjIobCxfTysiLSIrYSksTS5zZXQoYSxx'@;
put 'RykpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBJPWYuaW5kZXhPZih2KTtJPj0wJiZmLnNwbGljZShJLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8TS5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhp'@;
put 'cy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIFVHZShjKXtyZXR1cm4gbmV3IG5yKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlz'@;
put 'Ll9nZXRUcmlnZ2VyKGEpLHY9bmV3IEpHKHRoaXMuaWQsYSxsKTtsZXQgTT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtNfHwoTjIobCxfTyksTjIobCxfTysiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxNPW5ldyBNYXApKTtsZXQgST1NLmdl'@;
put 'dChhKTtjb25zdCBHPW5ldyBYRyhkLHRoaXMuaWQpO2lmKCEoZCYmZC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJkkmJkcuYWJzb3JiT3B0aW9ucyhJLm9wdGlvbnMpLE0uc2V0KGEsRyksSXx8KEk9cUcpLEcudmFsdWUhPT1jRSYmSS52YWx1ZT09PUcudmFsdWUpe2lmKCFmdW5jdGlvbiBX'@;
put 'JGUoYyxsKXtjb25zdCBhPU9iamVjdC5rZXlzKGMpLGQ9T2JqZWN0LmtleXMobCk7aWYoYS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07aWYoIWwuaGFzT3duUHJvcGVydHkoZil8fGNbZl0hPT1sW2ZdKXJldHVybiEx'@;
put 'fXJldHVybiEwfShJLnBhcmFtcyxHLnBhcmFtcykpe2NvbnN0IEdlPVtdLHN0PWYubWF0Y2hTdHlsZXMoSS52YWx1ZSxJLnBhcmFtcyxHZSkscHQ9Zi5tYXRjaFN0eWxlcyhHLnZhbHVlLEcucGFyYW1zLEdlKTtHZS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKEdlKTp0aGlzLl9l'@;
put 'bmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e0Y3KGwsc3QpLEVwKGwscHQpfSl9cmV0dXJufWNvbnN0IHllPWtoKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGwsW10pO3llLmZvckVhY2goR2U9PntHZS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmR2UudHJpZ2dlck5hbWU9PWEmJkdlLnF1ZXVl'@;
put 'ZCYmR2UuZGVzdHJveSgpfSk7bGV0IEVlPWYubWF0Y2hUcmFuc2l0aW9uKEkudmFsdWUsRy52YWx1ZSxsLEcucGFyYW1zKSxCZT0hMTtpZighRWUpe2lmKCFoKXJldHVybjtFZT1mLmZhbGxiYWNrVHJhbnNpdGlvbixCZT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVy'@;
put 'cysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTphLHRyYW5zaXRpb246RWUsZnJvbVN0YXRlOkksdG9TdGF0ZTpHLHBsYXllcjp2LGlzRmFsbGJhY2tUcmFuc2l0aW9uOkJlfSksQmV8fChOMihsLFloZSksdi5vblN0YXJ0KCgpPT57dF8obCxZaGUpfSkpLHYub25E'@;
put 'b25lKCgpPT57bGV0IEdlPXRoaXMucGxheWVycy5pbmRleE9mKHYpO0dlPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKEdlLDEpO2NvbnN0IHN0PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihzdCl7bGV0IHB0PXN0LmluZGV4T2Yodik7cHQ+PTAmJnN0LnNwbGljZShw'@;
put 'dCwxKX19KSx0aGlzLnBsYXllcnMucHVzaCh2KSx5ZS5wdXNoKHYpLHZ9ZGVyZWdpc3RlcihsKXt0aGlzLl90cmlnZ2Vycy5kZWxldGUobCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGE9PmEuZGVsZXRlKGwpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2go'@;
put 'KGEsZCk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChkLGEuZmlsdGVyKGg9PmgubmFtZSE9bCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUobCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUobCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUobCk7Y29uc3QgYT10'@;
put 'aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQobCk7YSYmKGEuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGwpKX1fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZS5k'@;
put 'cml2ZXIucXVlcnkobCx3TywhMCk7ZC5mb3JFYWNoKGg9PntpZihoW2kzXSlyZXR1cm47Y29uc3QgZj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGgpO2Yuc2l6ZT9mLmZvckVhY2godj0+di50cmlnZ2VyTGVhdmVBbmltYXRpb24oaCxhLCExLCEwKSk6dGhpcy5jbGVh'@;
put 'ckVsZW1lbnRDYWNoZShoKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmQuZm9yRWFjaChoPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxl'@;
put 'bWVudC5nZXQobCksdj1uZXcgTWFwO2lmKGYpe2NvbnN0IE09W107aWYoZi5mb3JFYWNoKChJLEcpPT57aWYodi5zZXQoRyxJLnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoRykpe2NvbnN0IHJlPXRoaXMudHJpZ2dlcihsLEcsY0UsaCk7cmUmJk0ucHVzaChyZSl9fSksTS5sZW5ndGgpcmV0'@;
put 'dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSx2KSxkJiZUbShNKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10'@;
put 'aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5uYW1lO2lmKGguaGFzKHYpKXJldHVybjtoLmFkZCh2KTtjb25zdCBJPXRoaXMuX3Ry'@;
put 'aWdnZXJzLmdldCh2KS5mYWxsYmFja1RyYW5zaXRpb24sRz1kLmdldCh2KXx8cUcscmU9bmV3IFhHKGNFKSx1ZT1uZXcgSkcodGhpcy5pZCx2LGwpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6dix0cmFu'@;
put 'c2l0aW9uOkksZnJvbVN0YXRlOkcsdG9TdGF0ZTpyZSxwbGF5ZXI6dWUsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmU7aWYobC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dl'@;
put 'cnMobCxhKSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihsLGEsITApKXJldHVybjtsZXQgaD0hMTtpZihkLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgZj1kLnBsYXllcnMubGVuZ3RoP2QucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpOltdO2lmKGYmJmYubGVuZ3RoKWg9ITA7ZWxz'@;
put 'ZXtsZXQgdj1sO2Zvcig7dj12LnBhcmVudE5vZGU7KWlmKGQuc3RhdGVzQnlFbGVtZW50LmdldCh2KSl7aD0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpLGgpZC5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITEsYSk7ZWxzZXtjb25z'@;
put 'dCBmPWxbaTNdOyghZnx8Zj09PUdoZSkmJihkLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUobCkpLGQuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKSxkLl9vblJlbW92YWxDb21wbGV0ZShsLGEpKX19aW5zZXJ0Tm9kZShsLGEpe04yKGwsdGhpcy5faG9zdENsYXNzTmFt'@;
put 'ZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhsKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGQ9Pntjb25zdCBoPWQucGxheWVyO2lmKGguZGVzdHJveWVkKXJldHVybjtjb25zdCBmPWQuZWxlbWVudCx2PXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGYpO3YmJnYu'@;
put 'Zm9yRWFjaChNPT57aWYoTS5uYW1lPT1kLnRyaWdnZXJOYW1lKXtjb25zdCBJPVJHKGYsZC50cmlnZ2VyTmFtZSxkLmZyb21TdGF0ZS52YWx1ZSxkLnRvU3RhdGUudmFsdWUpO0kuX2RhdGE9bCxERyhkLnBsYXllcixNLnBoYXNlLEksTS5jYWxsYmFjayl9fSksaC5tYXJrZWRGb3JEZXN0cm95'@;
put 'P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57aC5kZXN0cm95KCl9KTphLnB1c2goZCl9KSx0aGlzLl9xdWV1ZT1bXSxhLnNvcnQoKGQsaCk9Pntjb25zdCBmPWQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsdj1oLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1mfHwwPT12'@;
put 'P2Ytdjp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChkLmVsZW1lbnQsaC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveShsKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxl'@;
put 'bWVudCxsKX19Y2xhc3MgViRle19vblJlbW92YWxDb21wbGV0ZShsLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUobCxhKX1jb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5zY2hlZHVsZXI9aCx0aGlzLnBs'@;
put 'YXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlz'@;
put 'LnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3'@;
put 'IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9fWdldCBxdWV1ZWRQbGF5ZXJzKCl7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNo'@;
put 'KGE9PnthLnBsYXllcnMuZm9yRWFjaChkPT57ZC5xdWV1ZWQmJmwucHVzaChkKX0pfSksbH1jcmVhdGVOYW1lc3BhY2UobCxhKXtjb25zdCBkPW5ldyBOJGUobCxhLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxh'@;
put 'KT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGEpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoYSxkKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXT1kfV9iYWxhbmNlTmFtZXNwYWNlTGlzdChsLGEpe2NvbnN0IGQ9dGhpcy5fbmFt'@;
put 'ZXNwYWNlTGlzdCxoPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ7aWYoZC5sZW5ndGgtMT49MCl7bGV0IHY9ITEsTT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpO2Zvcig7TTspe2NvbnN0IEk9aC5nZXQoTSk7aWYoSSl7Y29uc3QgRz1kLmluZGV4T2YoSSk7ZC5zcGxpY2Uo'@;
put 'RysxLDAsbCksdj0hMDticmVha31NPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoTSl9dnx8ZC51bnNoaWZ0KGwpfWVsc2UgZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQgZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRo'@;
put 'aXMuY3JlYXRlTmFtZXNwYWNlKGwsYSkpLGR9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSks'@;
put 'dGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRo'@;
put 'aXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGgsMSksZC5kZXN0cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9'@;
put 'bmV3IFNldCxkPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlmKGgubmFtZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3BhY2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxo'@;
put 'KXtpZihrTyhhKSl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxkLGgpLCEwfXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIWtPKGEpKXJldHVybjtjb25zdCBmPWFbaTNdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRG'@;
put 'b3JSZW1vdmFsPSExLGYuc2V0Rm9yTW92ZT0hMDtjb25zdCB2PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGEpO3Y+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UodiwxKX1pZihsKXtjb25zdCB2PXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3YmJnYu'@;
put 'aW5zZXJ0Tm9kZShhLGQpfWgmJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRo'@;
put 'aXMuZGlzYWJsZWROb2Rlcy5hZGQobCksTjIobCxLRykpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKGwpLHRfKGwsS0cpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZihrTyhhKSl7dGhpcy5zY2hlZHVsZXI/Lm5vdGlmeSgpO2NvbnN0IGg9bD90'@;
put 'aGlzLl9mZXRjaE5hbWVzcGFjZShsKTpudWxsO2g/aC5yZW1vdmVOb2RlKGEsZCk6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsITEsZCk7Y29uc3QgZj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChhKTtmJiZmLmlkIT09bCYmZi5yZW1vdmVOb2RlKGEsZCl9ZWxzZSB0'@;
put 'aGlzLl9vblJlbW92YWxDb21wbGV0ZShhLGQpfW1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSxkLGgsZil7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goYSksYVtpM109e25hbWVzcGFjZUlkOmwsc2V0Rm9yUmVtb3ZhbDpoLGhhc0FuaW1hdGlvbjpkLHJlbW92ZWRCZWZvcmVRdWVy'@;
put 'aWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6Zn19bGlzdGVuKGwsYSxkLGgsZil7cmV0dXJuIGtPKGEpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpLmxpc3RlbihhLGQsaCxmKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24obCxhLGQsaCxmKXtyZXR1cm4gbC50cmFuc2l0aW9uLmJ1aWxk'@;
put 'KHRoaXMuZHJpdmVyLGwuZWxlbWVudCxsLmZyb21TdGF0ZS52YWx1ZSxsLnRvU3RhdGUudmFsdWUsZCxoLGwuZnJvbVN0YXRlLm9wdGlvbnMsbC50b1N0YXRlLm9wdGlvbnMsYSxmKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpe2xldCBhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsd08sITApO2Eu'@;
put 'Zm9yRWFjaChkPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChkKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoYT10aGlzLmRyaXZlci5xdWVyeShsLE5HLCEwKSxhLmZvckVhY2goZD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0'@;
put 'aW9uT25FbGVtZW50KGQpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+e2QucXVldWVkP2QubWFya2VkRm9yRGVzdHJveT0hMDpkLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2'@;
put 'ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+ZC5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2lmKHRoaXMucGxheWVycy5sZW5n'@;
put 'dGgpcmV0dXJuIFRtKHRoaXMucGxheWVycykub25Eb25lKCgpPT5sKCkpO2woKX0pfXByb2Nlc3NMZWF2ZU5vZGUobCl7Y29uc3QgYT1sW2kzXTtpZihhJiZhLnNldEZvclJlbW92YWwpe2lmKGxbaTNdPUdoZSxhLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCk7'@;
put 'Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShhLm5hbWVzcGFjZUlkKTtkJiZkLmNsZWFyRWxlbWVudENhY2hlKGwpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGwsYS5zZXRGb3JSZW1vdmFsKX1sLmNsYXNzTGlzdD8uY29udGFpbnMoS0cpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxl'@;
put 'ZChsLCExKSx0aGlzLmRyaXZlci5xdWVyeShsLCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goZD0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGQsITEpfSl9Zmx1c2gobD0tMSl7bGV0IGE9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9z'@;
put 'dEVsZW1lbnRzLmZvckVhY2goKGQsaCk9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsaCkpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgZD0wO2Q8dGhpcy5j'@;
put 'b2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtkKyspTjIodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2RdLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVs'@;
put 'ZW1lbnRzLmxlbmd0aCkpe2NvbnN0IGQ9W107dHJ5e2E9dGhpcy5fZmx1c2hBbmltYXRpb25zKGQsbCl9ZmluYWxseXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylkW2hdKCl9fWVsc2UgZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2QrKyl0aGlz'@;
put 'LnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2RdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hG'@;
put 'bnMuZm9yRWFjaChkPT5kKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxhLmxlbmd0aD9UbShhKS5vbkRvbmUoKCk9PntkLmZvckVhY2goaD0+aCgpKX0pOmQuZm9y'@;
put 'RWFjaChoPT5oKCkpfX1yZXBvcnRFcnJvcihsKXt0aHJvdyBmdW5jdGlvbiBaR2UoYyl7cmV0dXJuIG5ldyBucigzNDAyLCExKX0oKX1fZmx1c2hBbmltYXRpb25zKGwsYSl7Y29uc3QgZD1uZXcgRU8saD1bXSxmPW5ldyBNYXAsdj1bXSxNPW5ldyBNYXAsST1uZXcgTWFwLEc9bmV3IE1hcCxy'@;
put 'ZT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKHRyPT57cmUuYWRkKHRyKTtjb25zdCBCcj10aGlzLmRyaXZlci5xdWVyeSh0ciwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCBZcj0wO1lyPEJyLmxlbmd0aDtZcisrKXJlLmFkZChCcltZcl0pfSk7Y29uc3QgdWU9'@;
put 'dGhpcy5ib2R5Tm9kZSx5ZT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksRWU9WGhlKHllLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksQmU9bmV3IE1hcDtsZXQgR2U9MDtFZS5mb3JFYWNoKCh0cixCcik9Pntjb25zdCBZcj1IRytHZSsrO0JlLnNldChCcixZ'@;
put 'ciksdHIuZm9yRWFjaCh3aT0+TjIod2ksWXIpKX0pO2NvbnN0IHN0PVtdLHB0PW5ldyBTZXQsZHQ9bmV3IFNldDtmb3IobGV0IHRyPTA7dHI8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDt0cisrKXtjb25zdCBCcj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbdHJdLFly'@;
put 'PUJyW2kzXTtZciYmWXIuc2V0Rm9yUmVtb3ZhbCYmKHN0LnB1c2goQnIpLHB0LmFkZChCciksWXIuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KEJyLCIubmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2god2k9PnB0LmFkZCh3aSkpOmR0LmFkZChCcikpfWNvbnN0IHF0PW5ldyBN'@;
put 'YXAsbW49WGhlKHllLEFycmF5LmZyb20ocHQpKTttbi5mb3JFYWNoKCh0cixCcik9Pntjb25zdCBZcj1iTytHZSsrO3F0LnNldChCcixZciksdHIuZm9yRWFjaCh3aT0+TjIod2ksWXIpKX0pLGwucHVzaCgoKT0+e0VlLmZvckVhY2goKHRyLEJyKT0+e2NvbnN0IFlyPUJlLmdldChCcik7dHIu'@;
put 'Zm9yRWFjaCh3aT0+dF8od2ksWXIpKX0pLG1uLmZvckVhY2goKHRyLEJyKT0+e2NvbnN0IFlyPXF0LmdldChCcik7dHIuZm9yRWFjaCh3aT0+dF8od2ksWXIpKX0pLHN0LmZvckVhY2godHI9Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodHIpfSl9KTtjb25zdCB3bj1bXSxobj1bXTtmb3IobGV0'@;
put 'IHRyPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7dHI+PTA7dHItLSl0aGlzLl9uYW1lc3BhY2VMaXN0W3RyXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGEpLmZvckVhY2goWXI9Pntjb25zdCB3aT1Zci5wbGF5ZXIsQmk9WXIuZWxlbWVudDtpZih3bi5wdXNoKHdpKSx0aGlzLmNvbGxl'@;
put 'Y3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtjb25zdCAkbj1CaVtpM107aWYoJG4mJiRuLnNldEZvck1vdmUpe2lmKCRuLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJiRuLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKFlyLnRyaWdnZXJOYW1lKSl7Y29uc3QgYXI9JG4ucHJldmlvdXNUcmln'@;
put 'Z2Vyc1ZhbHVlcy5nZXQoWXIudHJpZ2dlck5hbWUpLEdyPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChZci5lbGVtZW50KTtpZihHciYmR3IuaGFzKFlyLnRyaWdnZXJOYW1lKSl7Y29uc3QgR3Q9R3IuZ2V0KFlyLnRyaWdnZXJOYW1lKTtHdC52YWx1ZT1hcixHci5zZXQoWXIudHJpZ2dlck5h'@;
put 'bWUsR3QpfX1yZXR1cm4gdm9pZCB3aS5kZXN0cm95KCl9fWNvbnN0IGhhPSF1ZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh1ZSxCaSksbWE9cXQuZ2V0KEJpKSx2dD1CZS5nZXQoQmkpLHh0PXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oWXIsZCx2dCxtYSxoYSk7aWYoeHQuZXJyb3Jz'@;
put 'JiZ4dC5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIGhuLnB1c2goeHQpO2lmKGhhKXJldHVybiB3aS5vblN0YXJ0KCgpPT5GNyhCaSx4dC5mcm9tU3R5bGVzKSksd2kub25EZXN0cm95KCgpPT5FcChCaSx4dC50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHdpKTtpZihZci5pc0ZhbGxiYWNrVHJh'@;
put 'bnNpdGlvbilyZXR1cm4gd2kub25TdGFydCgoKT0+RjcoQmkseHQuZnJvbVN0eWxlcykpLHdpLm9uRGVzdHJveSgoKT0+RXAoQmkseHQudG9TdHlsZXMpKSx2b2lkIGgucHVzaCh3aSk7Y29uc3QgJHQ9W107eHQudGltZWxpbmVzLmZvckVhY2goJG49Pnskbi5zdHJldGNoU3RhcnRpbmdLZXlm'@;
put 'cmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKCRuLmVsZW1lbnQpfHwkdC5wdXNoKCRuKX0pLHh0LnRpbWVsaW5lcz0kdCxkLmFwcGVuZChCaSx4dC50aW1lbGluZXMpLHYucHVzaCh7aW5zdHJ1Y3Rpb246eHQscGxheWVyOndpLGVsZW1lbnQ6Qml9KSx4dC5xdWVyaWVkRWxlbWVudHMu'@;
put 'Zm9yRWFjaCgkbj0+a2goTSwkbixbXSkucHVzaCh3aSkpLHh0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoJG4sYXIpPT57aWYoJG4uc2l6ZSl7bGV0IEdyPUkuZ2V0KGFyKTtHcnx8SS5zZXQoYXIsR3I9bmV3IFNldCksJG4uZm9yRWFjaCgoR3QsYm4pPT5Hci5hZGQoYm4pKX19KSx4dC5wb3N0'@;
put 'U3R5bGVQcm9wcy5mb3JFYWNoKCgkbixhcik9PntsZXQgR3I9Ry5nZXQoYXIpO0dyfHxHLnNldChhcixHcj1uZXcgU2V0KSwkbi5mb3JFYWNoKChHdCxibik9PkdyLmFkZChibikpfSl9KTtpZihobi5sZW5ndGgpe2NvbnN0IHRyPVtdO2huLmZvckVhY2goQnI9Pnt0ci5wdXNoKGZ1bmN0aW9u'@;
put 'IFdHZShjLGwpe3JldHVybiBuZXcgbnIoMzUwNSwhMSl9KCkpfSksd24uZm9yRWFjaChCcj0+QnIuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKHRyKX1jb25zdCBNbj1uZXcgTWFwLE1yPW5ldyBNYXA7di5mb3JFYWNoKHRyPT57Y29uc3QgQnI9dHIuZWxlbWVudDtkLmhhcyhCcikmJihN'@;
put 'ci5zZXQoQnIsQnIpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHRyLnBsYXllci5uYW1lc3BhY2VJZCx0ci5pbnN0cnVjdGlvbixNbikpfSksaC5mb3JFYWNoKHRyPT57Y29uc3QgQnI9dHIuZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoQnIsITEsdHIubmFtZXNwYWNlSWQs'@;
put 'dHIudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaCh3aT0+e2toKE1uLEJyLFtdKS5wdXNoKHdpKSx3aS5kZXN0cm95KCl9KX0pO2NvbnN0IGtyPXN0LmZpbHRlcih0cj0+SmhlKHRyLEksRykpLHFuPW5ldyBNYXA7S2hlKHFuLHRoaXMuZHJpdmVyLGR0LEcscmcpLmZvckVhY2godHI9PntKaGUo'@;
put 'dHIsSSxHKSYma3IucHVzaCh0cil9KTtjb25zdCBxcj1uZXcgTWFwO0VlLmZvckVhY2goKHRyLEJyKT0+e0toZShxcix0aGlzLmRyaXZlcixuZXcgU2V0KHRyKSxJLCIhIil9KSxrci5mb3JFYWNoKHRyPT57Y29uc3QgQnI9cW4uZ2V0KHRyKSxZcj1xci5nZXQodHIpO3FuLnNldCh0cixuZXcg'@;
put 'TWFwKFsuLi5Ccj8uZW50cmllcygpPz9bXSwuLi5Zcj8uZW50cmllcygpPz9bXV0pKX0pO2NvbnN0IF9pPVtdLFBuPVtdLFVyPXt9O3YuZm9yRWFjaCh0cj0+e2NvbnN0e2VsZW1lbnQ6QnIscGxheWVyOllyLGluc3RydWN0aW9uOndpfT10cjtpZihkLmhhcyhCcikpe2lmKHJlLmhhcyhCcikp'@;
put 'cmV0dXJuIFlyLm9uRGVzdHJveSgoKT0+RXAoQnIsd2kudG9TdHlsZXMpKSxZci5kaXNhYmxlZD0hMCxZci5vdmVycmlkZVRvdGFsVGltZSh3aS50b3RhbFRpbWUpLHZvaWQgaC5wdXNoKFlyKTtsZXQgQmk9VXI7aWYoTXIuc2l6ZT4xKXtsZXQgbWE9QnI7Y29uc3QgdnQ9W107Zm9yKDttYT1t'@;
put 'YS5wYXJlbnROb2RlOyl7Y29uc3QgeHQ9TXIuZ2V0KG1hKTtpZih4dCl7Qmk9eHQ7YnJlYWt9dnQucHVzaChtYSl9dnQuZm9yRWFjaCh4dD0+TXIuc2V0KHh0LEJpKSl9Y29uc3QgaGE9dGhpcy5fYnVpbGRBbmltYXRpb24oWXIubmFtZXNwYWNlSWQsd2ksTW4sZixxcixxbik7aWYoWXIuc2V0'@;
put 'UmVhbFBsYXllcihoYSksQmk9PT1VcilfaS5wdXNoKFlyKTtlbHNle2NvbnN0IG1hPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQoQmkpO21hJiZtYS5sZW5ndGgmJihZci5wYXJlbnRQbGF5ZXI9VG0obWEpKSxoLnB1c2goWXIpfX1lbHNlIEY3KEJyLHdpLmZyb21TdHlsZXMpLFlyLm9uRGVz'@;
put 'dHJveSgoKT0+RXAoQnIsd2kudG9TdHlsZXMpKSxQbi5wdXNoKFlyKSxyZS5oYXMoQnIpJiZoLnB1c2goWXIpfSksUG4uZm9yRWFjaCh0cj0+e2NvbnN0IEJyPWYuZ2V0KHRyLmVsZW1lbnQpO2lmKEJyJiZCci5sZW5ndGgpe2NvbnN0IFlyPVRtKEJyKTt0ci5zZXRSZWFsUGxheWVyKFlyKX19'@;
put 'KSxoLmZvckVhY2godHI9Pnt0ci5wYXJlbnRQbGF5ZXI/dHIuc3luY1BsYXllckV2ZW50cyh0ci5wYXJlbnRQbGF5ZXIpOnRyLmRlc3Ryb3koKX0pO2ZvcihsZXQgdHI9MDt0cjxzdC5sZW5ndGg7dHIrKyl7Y29uc3QgQnI9c3RbdHJdLFlyPUJyW2kzXTtpZih0XyhCcixiTyksWXImJllyLmhh'@;
put 'c0FuaW1hdGlvbiljb250aW51ZTtsZXQgd2k9W107aWYoTS5zaXplKXtsZXQgaGE9TS5nZXQoQnIpO2hhJiZoYS5sZW5ndGgmJndpLnB1c2goLi4uaGEpO2xldCBtYT10aGlzLmRyaXZlci5xdWVyeShCcixORywhMCk7Zm9yKGxldCB2dD0wO3Z0PG1hLmxlbmd0aDt2dCsrKXtsZXQgeHQ9TS5n'@;
put 'ZXQobWFbdnRdKTt4dCYmeHQubGVuZ3RoJiZ3aS5wdXNoKC4uLnh0KX19Y29uc3QgQmk9d2kuZmlsdGVyKGhhPT4haGEuZGVzdHJveWVkKTtCaS5sZW5ndGg/VSRlKHRoaXMsQnIsQmkpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShCcil9cmV0dXJuIHN0Lmxlbmd0aD0wLF9pLmZvckVhY2godHI9'@;
put 'Pnt0aGlzLnBsYXllcnMucHVzaCh0ciksdHIub25Eb25lKCgpPT57dHIuZGVzdHJveSgpO2NvbnN0IEJyPXRoaXMucGxheWVycy5pbmRleE9mKHRyKTt0aGlzLnBsYXllcnMuc3BsaWNlKEJyLDEpfSksdHIucGxheSgpfSksX2l9YWZ0ZXJGbHVzaChsKXt0aGlzLl9mbHVzaEZucy5wdXNoKGwp'@;
put 'fWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaChsKX1fZ2V0UHJldmlvdXNQbGF5ZXJzKGwsYSxkLGgsZil7bGV0IHY9W107aWYoYSl7Y29uc3QgTT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTtNJiYodj1NKX1lbHNle2NvbnN0'@;
put 'IE09dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihNKXtjb25zdCBJPSFmfHxmPT1jRTtNLmZvckVhY2goRz0+e0cucXVldWVkfHwhSSYmRy50cmlnZ2VyTmFtZSE9aHx8di5wdXNoKEcpfSl9fXJldHVybihkfHxoKSYmKHY9di5maWx0ZXIoTT0+IShkJiZkIT1NLm5hbWVzcGFjZUlk'@;
put 'fHxoJiZoIT1NLnRyaWdnZXJOYW1lKSkpLHZ9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCx2PWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6bCxNPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgSSBv'@;
put 'ZiBhLnRpbWVsaW5lcyl7Y29uc3QgRz1JLmVsZW1lbnQscmU9RyE9PWYsdWU9a2goZCxHLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoRyxyZSx2LE0sYS50b1N0YXRlKS5mb3JFYWNoKEVlPT57Y29uc3QgQmU9RWUuZ2V0UmVhbFBsYXllcigpO0JlLmJlZm9yZURlc3Ryb3kmJkJlLmJl'@;
put 'Zm9yZURlc3Ryb3koKSxFZS5kZXN0cm95KCksdWUucHVzaChFZSl9KX1GNyhmLGEuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBNPWEudHJpZ2dlck5hbWUsST1hLmVsZW1lbnQsRz1bXSxyZT1uZXcgU2V0LHVlPW5ldyBTZXQseWU9YS50aW1lbGluZXMu'@;
put 'bWFwKEJlPT57Y29uc3QgR2U9QmUuZWxlbWVudDtyZS5hZGQoR2UpO2NvbnN0IHN0PUdlW2kzXTtpZihzdCYmc3QucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBFeChCZS5kdXJhdGlvbixCZS5kZWxheSk7Y29uc3QgcHQ9R2UhPT1JLGR0PWZ1bmN0aW9uIFokZShjKXtjb25zdCBs'@;
put 'PVtdO3JldHVybiBxaGUoYyxsKSxsfSgoZC5nZXQoR2UpfHxGJGUpLm1hcChNbj0+TW4uZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKE1uPT4hIU1uLmVsZW1lbnQmJk1uLmVsZW1lbnQ9PT1HZSkscXQ9Zi5nZXQoR2UpLG1uPXYuZ2V0KEdlKSx3bj1BaGUodGhpcy5fbm9ybWFsaXplcixCZS5r'@;
put 'ZXlmcmFtZXMscXQsbW4pLGhuPXRoaXMuX2J1aWxkUGxheWVyKEJlLHduLGR0KTtpZihCZS5zdWJUaW1lbGluZSYmaCYmdWUuYWRkKEdlKSxwdCl7Y29uc3QgTW49bmV3IEpHKGwsTSxHZSk7TW4uc2V0UmVhbFBsYXllcihobiksRy5wdXNoKE1uKX1yZXR1cm4gaG59KTtHLmZvckVhY2goQmU9'@;
put 'PntraCh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEJlLmVsZW1lbnQsW10pLnB1c2goQmUpLEJlLm9uRG9uZSgoKT0+ZnVuY3Rpb24gQiRlKGMsbCxhKXtsZXQgZD1jLmdldChsKTtpZihkKXtpZihkLmxlbmd0aCl7Y29uc3QgaD1kLmluZGV4T2YoYSk7ZC5zcGxpY2UoaCwxKX0wPT1k'@;
put 'Lmxlbmd0aCYmYy5kZWxldGUobCl9cmV0dXJuIGR9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsQmUuZWxlbWVudCxCZSkpfSkscmUuZm9yRWFjaChCZT0+TjIoQmUsT2hlKSk7Y29uc3QgRWU9VG0oeWUpO3JldHVybiBFZS5vbkRlc3Ryb3koKCk9PntyZS5mb3JFYWNoKEJlPT50XyhC'@;
put 'ZSxPaGUpKSxFcChJLGEudG9TdHlsZXMpfSksdWUuZm9yRWFjaChCZT0+e2toKGgsQmUsW10pLnB1c2goRWUpfSksRWV9X2J1aWxkUGxheWVyKGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKGwuZWxlbWVudCxhLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2lu'@;
put 'ZyxkKTpuZXcgRXgobC5kdXJhdGlvbixsLmRlbGF5KX19Y2xhc3MgSkd7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLnRyaWdnZXJOYW1lPWEsdGhpcy5lbGVtZW50PWQsdGhpcy5fcGxheWVyPW5ldyBFeCx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhp'@;
put 'cy5fcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIobCl7dGhpcy5f'@;
put 'Y29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPWwsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGEsZCk9PnthLmZvckVhY2goaD0+REcobCxkLHZvaWQgMCxoKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAs'@;
put 'dGhpcy5vdmVycmlkZVRvdGFsVGltZShsLnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKGwpe3RoaXMudG90YWxUaW1lPWx9c3luY1BsYXllckV2ZW50cyhsKXtjb25zdCBhPXRoaXMuX3BsYXll'@;
put 'cjthLnRyaWdnZXJDYWxsYmFjayYmbC5vblN0YXJ0KCgpPT5hLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksbC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLGwub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQobCxhKXtraCh0aGlzLl9xdWV1ZWRDYWxsYmFja3Ms'@;
put 'bCxbXSkucHVzaChhKX1vbkRvbmUobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLGwpLHRoaXMuX3BsYXllci5vbkRvbmUobCl9b25TdGFydChsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLGwpLHRoaXMuX3BsYXllci5vblN0YXJ0KGwpfW9u'@;
put 'RGVzdHJveShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsbCksdGhpcy5fcGxheWVyLm9uRGVzdHJveShsKX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgp'@;
put 'fXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRl'@;
put 'c3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbihsKXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKGwpfWdldFBvc2l0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZhLnRyaWdnZXJDYWxsYmFjayhsKX19ZnVuY3Rpb24ga08oYyl7cmV0dXJuIGMmJjE9PT1jLm5vZGVUeXBl'@;
put 'fWZ1bmN0aW9uICRoZShjLGwpe2NvbnN0IGE9Yy5zdHlsZS5kaXNwbGF5O3JldHVybiBjLnN0eWxlLmRpc3BsYXk9bD8/Im5vbmUiLGF9ZnVuY3Rpb24gS2hlKGMsbCxhLGQsaCl7Y29uc3QgZj1bXTthLmZvckVhY2goST0+Zi5wdXNoKCRoZShJKSkpO2NvbnN0IHY9W107ZC5mb3JFYWNoKChJ'@;
put 'LEcpPT57Y29uc3QgcmU9bmV3IE1hcDtJLmZvckVhY2godWU9Pntjb25zdCB5ZT1sLmNvbXB1dGVTdHlsZShHLHVlLGgpO3JlLnNldCh1ZSx5ZSksKCF5ZXx8MD09eWUubGVuZ3RoKSYmKEdbaTNdPUgkZSx2LnB1c2goRykpfSksYy5zZXQoRyxyZSl9KTtsZXQgTT0wO3JldHVybiBhLmZvckVh'@;
put 'Y2goST0+JGhlKEksZltNKytdKSksdn1mdW5jdGlvbiBYaGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7aWYoYy5mb3JFYWNoKE09PmEuc2V0KE0sW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIHYoTSl7aWYoIU0pcmV0dXJuIDE7'@;
put 'bGV0IEk9Zi5nZXQoTSk7aWYoSSlyZXR1cm4gSTtjb25zdCBHPU0ucGFyZW50Tm9kZTtyZXR1cm4gST1hLmhhcyhHKT9HOmguaGFzKEcpPzE6dihHKSxmLnNldChNLEkpLEl9cmV0dXJuIGwuZm9yRWFjaChNPT57Y29uc3QgST12KE0pOzEhPT1JJiZhLmdldChJKS5wdXNoKE0pfSksYX1mdW5j'@;
put 'dGlvbiBOMihjLGwpe2MuY2xhc3NMaXN0Py5hZGQobCl9ZnVuY3Rpb24gdF8oYyxsKXtjLmNsYXNzTGlzdD8ucmVtb3ZlKGwpfWZ1bmN0aW9uIFUkZShjLGwsYSl7VG0oYSkub25Eb25lKCgpPT5jLnByb2Nlc3NMZWF2ZU5vZGUobCkpfWZ1bmN0aW9uIHFoZShjLGwpe2ZvcihsZXQgYT0wO2E8'@;
put 'Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV07ZCBpbnN0YW5jZW9mIHowZT9xaGUoZC5wbGF5ZXJzLGwpOmwucHVzaChkKX19ZnVuY3Rpb24gSmhlKGMsbCxhKXtjb25zdCBkPWEuZ2V0KGMpO2lmKCFkKXJldHVybiExO2xldCBoPWwuZ2V0KGMpO3JldHVybiBoP2QuZm9yRWFjaChmPT5oLmFk'@;
put 'ZChmKSk6bC5zZXQoYyxkKSxhLmRlbGV0ZShjKSwhMH1jbGFzcyB1RXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9LHRoaXMuX3RyYW5zaXRp'@;
put 'b25FbmdpbmU9bmV3IFYkZShsLmJvZHksYSxkLGgpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBJJGUobC5ib2R5LGEsZCksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oZix2KT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShmLHYpfXJlZ2lzdGVyVHJpZ2dlcihs'@;
put 'LGEsZCxoLGYpe2NvbnN0IHY9bCsiLSIraDtsZXQgTT10aGlzLl90cmlnZ2VyQ2FjaGVbdl07aWYoIU0pe2NvbnN0IEk9W10scmU9VUcodGhpcy5fZHJpdmVyLGYsSSxbXSk7aWYoSS5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gT0dlKGMsbCl7cmV0dXJuIG5ldyBucigzNDA0LCExKX0oKTtNPWZ1'@;
put 'bmN0aW9uIFQkZShjLGwsYSl7cmV0dXJuIG5ldyBBJGUoYyxsLGEpfShoLHJlLHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVt2XT1NfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsaCxNKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25F'@;
put 'bmdpbmUucmVnaXN0ZXIobCxhKX1kZXN0cm95KGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGwsYSl9b25JbnNlcnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5n'@;
put 'aW5lLnJlbW92ZU5vZGUobCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W2Ysdl09a2hlKGQpO3RoaXMuX3RpbWVsaW5l'@;
put 'RW5naW5lLmNvbW1hbmQoZixhLHYsaCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQsaCl9bGlzdGVuKGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbdixNXT1raGUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3Rlbih2LGEs'@;
put 'TSxmKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1l'@;
put 'bGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25l'@;
put 'KGwpfX1jbGFzcyBkRXtzdGF0aWN7dGhpcy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fc3RhcnRTdHlsZXM9YSx0aGlzLl9lbmRTdHlsZXM9ZCx0aGlzLl9zdGF0ZT0wO2xldCBoPWRFLmluaXRpYWxT'@;
put 'dHlsZXNCeUVsZW1lbnQuZ2V0KGwpO2h8fGRFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGwsaD1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWh9c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJkVwKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHls'@;
put 'ZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihFcCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKEVwKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVz'@;
put 'KSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKGRFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoRjcodGhpcy5fZWxlbWVudCx0'@;
put 'aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKEY3KHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksRXAodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0z'@;
put 'KX19ZnVuY3Rpb24gUUcoYyl7bGV0IGw9bnVsbDtyZXR1cm4gYy5mb3JFYWNoKChhLGQpPT57KGZ1bmN0aW9uIEckZShjKXtyZXR1cm4iZGlzcGxheSI9PT1jfHwicG9zaXRpb24iPT09Y30pKGQpJiYobD1sfHxuZXcgTWFwLGwuc2V0KGQsYSkpfSksbH1jbGFzcyBRaGV7Y29uc3RydWN0b3Io'@;
put 'bCxhLGQsaCl7dGhpcy5lbGVtZW50PWwsdGhpcy5rZXlmcmFtZXM9YSx0aGlzLm9wdGlvbnM9ZCx0aGlzLl9zcGVjaWFsU3R5bGVzPWgsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMu'@;
put 'X2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PW5ldyBN'@;
put 'YXAsdGhpcy5fZHVyYXRpb249ZC5kdXJhdGlvbix0aGlzLl9kZWxheT1kLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9Pmwo'@;
put 'KSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7Y29uc3QgbD10aGlzLmtleWZy'@;
put 'YW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxsLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1sLmxlbmd0aD9sW2wubGVuZ3RoLTFdOm5ldyBNYXA7Y29uc3QgYT0oKT0+dGhpcy5fb25GaW5pc2goKTt0aGlzLmRvbVBs'@;
put 'YXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGEpLHRoaXMub25EZXN0cm95KCgpPT57dGhpcy5kb21QbGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKX0pfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0'@;
put 'YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2VyV2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmlt'@;
put 'YXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChhKSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVG'@;
put 'bnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9'@;
put 'ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMu'@;
put 'X3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0'@;
put 'YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBs'@;
put 'YXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFs'@;
put 'U3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1l'@;
put 'fWdldFBvc2l0aW9uKCl7cmV0dXJuKyh0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT8/MCkvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2NvbnN0IGw9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYm'@;
put 'dGhpcy5fZmluYWxLZXlmcmFtZS5mb3JFYWNoKChkLGgpPT57Im9mZnNldCIhPT1oJiZsLnNldChoLHRoaXMuX2ZpbmlzaGVkP2Q6ekcodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5f'@;
put 'b25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgZTJle3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KGwsYSl7'@;
put 'cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGwsYSl7cmV0dXJuIEloZShsLGEpfWdldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIExHKGwpfXF1ZXJ5KGwsYSxkKXtyZXR1cm4gUmhlKGwsYSxkKX1jb21wdXRlU3R5bGUobCxhLGQpe3JldHVybiB6RyhsLGEpfWFuaW1hdGUobCxhLGQsaCxmLHY9'@;
put 'W10pe2NvbnN0IEk9e2R1cmF0aW9uOmQsZGVsYXk6aCxmaWxsOjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihJLmVhc2luZz1mKTtjb25zdCBHPW5ldyBNYXAscmU9di5maWx0ZXIoRWU9PkVlIGluc3RhbmNlb2YgUWhlKTsoZnVuY3Rpb24gaSRlKGMsbCl7cmV0dXJuIDA9PT1jfHwwPT09'@;
put 'bH0pKGQsaCkmJnJlLmZvckVhY2goRWU9PntFZS5jdXJyZW50U25hcHNob3QuZm9yRWFjaCgoQmUsR2UpPT5HLnNldChHZSxCZSkpfSk7bGV0IHVlPWZ1bmN0aW9uIHQkZShjKXtyZXR1cm4gYy5sZW5ndGg/Y1swXWluc3RhbmNlb2YgTWFwP2M6Yy5tYXAobD0+bmV3IE1hcChPYmplY3QuZW50'@;
put 'cmllcyhsKSkpOltdfShhKS5tYXAoRWU9Pm5ldyBNYXAoRWUpKTt1ZT1mdW5jdGlvbiBhJGUoYyxsLGEpe2lmKGEuc2l6ZSYmbC5sZW5ndGgpe2xldCBkPWxbMF0saD1bXTtpZihhLmZvckVhY2goKGYsdik9PntkLmhhcyh2KXx8aC5wdXNoKHYpLGQuc2V0KHYsZil9KSxoLmxlbmd0aClmb3Io'@;
put 'bGV0IGY9MTtmPGwubGVuZ3RoO2YrKyl7bGV0IHY9bFtmXTtoLmZvckVhY2goTT0+di5zZXQoTSx6RyhjLE0pKSl9fXJldHVybiBsfShsLHVlLEcpO2NvbnN0IHllPWZ1bmN0aW9uIFkkZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8o'@;
put 'YT1RRyhsWzBdKSxsLmxlbmd0aD4xJiYoZD1RRyhsW2wubGVuZ3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPVFHKGwpKSxhfHxkP25ldyBkRShjLGEsZCk6bnVsbH0obCx1ZSk7cmV0dXJuIG5ldyBRaGUobCx1ZSxJLHllKX19Y29uc3QgdDJlPSJALmRpc2FibGVkIjtjbGFzcyBuMmV7'@;
put 'Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMuX29uRGVzdHJveT1oLHRoaXMuXHUwMjc1dHlwZT0wfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShsKXt0aGlzLmRl'@;
put 'bGVnYXRlLmRlc3Ryb3lOb2RlPy4obCl9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVz'@;
put 'dHJveSgpfSl9KSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KGwsYSl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJu'@;
put 'IHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChsKX1hcHBlbmRDaGlsZChsLGEpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQobCxhKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCwhMSl9aW5zZXJ0QmVmb3JlKGwsYSxkLGg9ITApe3RoaXMuZGVsZWdhdGUuaW5z'@;
put 'ZXJ0QmVmb3JlKGwsYSxkKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCxoKX1yZW1vdmVDaGlsZChsLGEsZCl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxhLHRoaXMuZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7cmV0dXJu'@;
put 'IHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQobCxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobCl9bmV4dFNpYmxpbmcobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcobCl9c2V0QXR0cmlidXRlKGwsYSxkLGgpe3RoaXMu'@;
put 'ZGVsZWdhdGUuc2V0QXR0cmlidXRlKGwsYSxkLGgpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUobCxhLGQpfWFkZENsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyhsLGEpfXJlbW92ZUNsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5y'@;
put 'ZW1vdmVDbGFzcyhsLGEpfXNldFN0eWxlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUobCxhLGQsaCl9cmVtb3ZlU3R5bGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUobCxhLGQpfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApJiZhPT10MmU/dGhp'@;
put 'cy5kaXNhYmxlQW5pbWF0aW9ucyhsLCEhZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9c2V0VmFsdWUobCxhKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKGwsYSl9bGlzdGVuKGwsYSxkKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfWRpc2FibGVBbmltYXRp'@;
put 'b25zKGwsYSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnMobCxhKX19Y2xhc3MgJCRlIGV4dGVuZHMgbjJle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoYSxkLGgsZiksdGhpcy5mYWN0b3J5PWwsdGhpcy5uYW1lc3BhY2VJZD1hfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEu'@;
put 'Y2hhckF0KDApPyIuIj09YS5jaGFyQXQoMSkmJmE9PXQyZT90aGlzLmRpc2FibGVBbmltYXRpb25zKGwsZD12b2lkIDA9PT1kfHwhIWQpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCxsLGEuc2xpY2UoMSksZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9'@;
put 'bGlzdGVuKGwsYSxkKXtpZigiQCI9PWEuY2hhckF0KDApKXtjb25zdCBoPWZ1bmN0aW9uIEskZShjKXtzd2l0Y2goYyl7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVs'@;
put 'dDpyZXR1cm4gY319KGwpO2xldCBmPWEuc2xpY2UoMSksdj0iIjtyZXR1cm4iQCIhPWYuY2hhckF0KDApJiYoW2Ysdl09ZnVuY3Rpb24gWCRlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCIuIik7cmV0dXJuW2Muc3Vic3RyaW5nKDAsbCksYy5zbGljZShsKzEpXX0oZikpLHRoaXMuZW5naW5lLmxp'@;
put 'c3Rlbih0aGlzLm5hbWVzcGFjZUlkLGgsZix2LE09Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKE0uX2RhdGF8fC0xLGQsTSl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfX1jbGFzcyBxJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZGVsZWdh'@;
put 'dGU9bCx0aGlzLmVuZ2luZT1hLHRoaXMuX3pvbmU9ZCx0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsYS5vblJlbW92YWxD'@;
put 'b21wbGV0ZT0oaCxmKT0+e2NvbnN0IHY9Zj8ucGFyZW50Tm9kZShoKTt2JiZmLnJlbW92ZUNoaWxkKHYsaCl9fWNyZWF0ZVJlbmRlcmVyKGwsYSl7Y29uc3QgaD10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGwsYSk7aWYoIWx8fCFhPy5kYXRhPy5hbmltYXRpb24pe2NvbnN0IEc9dGhp'@;
put 'cy5fcmVuZGVyZXJDYWNoZTtsZXQgcmU9Ry5nZXQoaCk7cmV0dXJuIHJlfHwocmU9bmV3IG4yZSgiIixoLHRoaXMuZW5naW5lLCgpPT5HLmRlbGV0ZShoKSksRy5zZXQoaCxyZSkpLHJlfWNvbnN0IGY9YS5pZCx2PWEuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0'@;
put 'aGlzLmVuZ2luZS5yZWdpc3Rlcih2LGwpO2NvbnN0IE09Rz0+e0FycmF5LmlzQXJyYXkoRyk/Ry5mb3JFYWNoKE0pOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihmLHYsbCxHLm5hbWUsRyl9O3JldHVybiBhLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goTSksbmV3ICQkZSh0aGlzLHYsaCx0'@;
put 'aGlzLmVuZ2luZSl9YmVnaW4oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNh'@;
put 'bGxiYWNrKGwsYSxkKXtpZihsPj0wJiZsPHRoaXMuX21pY3JvdGFza0lkKXJldHVybiB2b2lkIHRoaXMuX3pvbmUucnVuKCgpPT5hKGQpKTtjb25zdCBoPXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcjswPT1oLmxlbmd0aCYmcXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl96b25lLnJ1'@;
put 'bigoKT0+e2guZm9yRWFjaChmPT57Y29uc3RbdixNXT1mO3YoTSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLGgucHVzaChbYSxkXSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVB'@;
put 'bmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVy'@;
put 'aW5nRG9uZSgpfX1sZXQgSiRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB1RXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkLGgsaGkocHkse29wdGlvbmFsOiEwfSkpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g'@;
put 'bmV3KGR8fGMpKENyKG1vKSxDcihQRyksQ3IoRkcpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCByMmU9W3twcm92aWRlOkZHLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gUSRlKCl7cmV0dXJuIG5ldyBI'@;
put 'aGV9fSx7cHJvdmlkZTp1RSx1c2VDbGFzczpKJGV9LHtwcm92aWRlOng4LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZUtlKGMsbCxhKXtyZXR1cm4gbmV3IHEkZShjLGwsYSl9LGRlcHM6W2ZaLHVFLEdhXX1dLGUkPVt7cHJvdmlkZTpQRyx1c2VGYWN0b3J5OigpPT5uZXcgZTJlfSx7cHJvdmlkZTpW'@;
put 'ayx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5yMmVdLGkyZT1be3Byb3ZpZGU6UEcsdXNlQ2xhc3M6T0d9LHtwcm92aWRlOlZrLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLnIyZV07bGV0IHRLZT0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVy'@;
put 'bntuZ01vZHVsZTpjLHByb3ZpZGVyczphLmRpc2FibGVBbmltYXRpb25zP2kyZTplJH19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtw'@;
put 'cm92aWRlcnM6ZSQsaW1wb3J0czpbSHNlXX0pfX1yZXR1cm4gY30pKCksbktlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbm90LWZvdW5kIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsInAiKSxP'@;
put 'ZSgyLCI0MDQgLSBOb3QgRm91bmQiKSxoZSgpKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGEyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO2lm'@;
put 'KG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3YuaHJlZj0iZGF0YTp0ZXh0L3BsYWluLCIrZW5jb2Rl'@;
put 'VVJJQ29tcG9uZW50KGEpLHYuZG93bmxvYWQ9YCR7ZH0uJHtofWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2KSx2LmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh2KX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57bGV0IGY9bmV3IEZpbGVSZWFk'@;
put 'ZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChKU09OLnBhcnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk'@;
put 'fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgcGc9Yig1OTQ4KTtjb25zdCB0JD1mdW5jdGlvbiBpS2UoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHx5Yihj'@;
put 'KSYmIltvYmplY3QgU3ltYm9sXSI9PXBiKGMpfTt2YXIgYUtlPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHNLZT0vXlx3KiQvO2Z1bmN0aW9uIG4kKGMsbCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGN8fG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5'@;
put 'cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgYT1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cyxoPWw/bC5hcHBseSh0aGlzLGQpOmRbMF0sZj1hLmNhY2hlO2lmKGYuaGFzKGgpKXJldHVybiBmLmdldChoKTt2YXIgdj1jLmFwcGx5KHRoaXMs'@;
put 'ZCk7cmV0dXJuIGEuY2FjaGU9Zi5zZXQoaCx2KXx8Zix2fTtyZXR1cm4gYS5jYWNoZT1uZXcobiQuQ2FjaGV8fExXKSxhfW4kLkNhY2hlPUxXO2NvbnN0IHVLZT1uJDt2YXIgcEtlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8p'@;
put 'XDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGdLZT0vXFwoXFwpPy9nLG1LZT1mdW5jdGlvbiBoS2UoYyl7dmFyIGw9dUtlKGMsZnVuY3Rpb24oZCl7cmV0dXJuIDUwMD09PWEuc2l6ZSYmYS5jbGVhcigpLGR9KSxhPWwuY2FjaGU7cmV0dXJuIGx9KGZ1bmN0aW9uKGMpe3Zh'@;
put 'ciBsPVtdO3JldHVybiA0Nj09PWMuY2hhckNvZGVBdCgwKSYmbC5wdXNoKCIiKSxjLnJlcGxhY2UocEtlLGZ1bmN0aW9uKGEsZCxoLGYpe2wucHVzaChoP2YucmVwbGFjZShnS2UsIiQxIik6ZHx8YSl9KSxsfSk7Y29uc3QgdktlPW1LZTt2YXIgczJlPW9tP29tLnByb3RvdHlwZTp2b2lkIDAs'@;
put 'bzJlPXMyZT9zMmUudG9TdHJpbmc6dm9pZCAwO2NvbnN0IHdLZT1mdW5jdGlvbiBsMmUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBjO2lmKGJiKGMpKXJldHVybiBmdW5jdGlvbiB5S2UoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGgsaD1BcnJheShkKTsr'@;
put 'K2E8ZDspaFthXT1sKGNbYV0sYSxjKTtyZXR1cm4gaH0oYyxsMmUpKyIiO2lmKHQkKGMpKXJldHVybiBvMmU/bzJlLmNhbGwoYyk6IiI7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LHhLZT1mdW5jdGlvbiBNS2UoYyxsKXtyZXR1cm4gYmIoYyk/YzpmdW5jdGlv'@;
put 'biBvS2UoYyxsKXtpZihiYihjKSlyZXR1cm4hMTt2YXIgYT10eXBlb2YgYztyZXR1cm4hKCJudW1iZXIiIT1hJiYic3ltYm9sIiE9YSYmImJvb2xlYW4iIT1hJiZudWxsIT1jJiYhdCQoYykpfHxzS2UudGVzdChjKXx8IWFLZS50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0oYyxs'@;
put 'KT9bY106dktlKGZ1bmN0aW9uIENLZShjKXtyZXR1cm4gbnVsbD09Yz8iIjp3S2UoYyl9KGMpKX0sQUtlPWZ1bmN0aW9uIFRLZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fHQkKGMpKXJldHVybiBjO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSx5Yz1mdW5j'@;
put 'dGlvbiBJS2UoYyxsLGEpe3ZhciBkPW51bGw9PWM/dm9pZCAwOmZ1bmN0aW9uIGtLZShjLGwpe2Zvcih2YXIgYT0wLGQ9KGw9eEtlKGwsYykpLmxlbmd0aDtudWxsIT1jJiZhPGQ7KWM9Y1tBS2UobFthKytdKV07cmV0dXJuIGEmJmE9PWQ/Yzp2b2lkIDB9KGMsbCk7cmV0dXJuIHZvaWQgMD09'@;
put 'PWQ/YTpkfTtsZXQgSWg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yZXNwb25zZT1uZXcgR24sdGhpcy5jaGFuZ2VkVGFibGU9bmV3IEduLHRoaXMuZGV0YWls'@;
put 'cz1uZXcgR24sdGhpcy5kaWZmcz1uZXcgR24sdGhpcy5jb2x1bW5zPW5ldyBHbix0aGlzLnZhbHVlcz1uZXcgR24sdGhpcy5maWx0ZXI9bmV3IEduLHRoaXMucXVlcnk9bmV3IEduLHRoaXMuc3VibWl0dERldGFpbD1uZXcgR24sdGhpcy5yZW1vdmVRdWVyeT1uZXcgR24sdGhpcy5zZXRTdWJt'@;
put 'aXQ9bmV3IEduLHRoaXMuc2V0U3VibWl0TGlzdD1uZXcgR259Y2FsbFNlcnZpY2UoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtjb25zdCBNPXt9O3JldHVybiBNW2RdPVthXSx7ZGF0YTooeWllbGQgdi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxNKSkuYWRhcHRlclJl'@;
put 'c3BvbnNlLGxpYmRzOmZ9fSkoKX11cGRhdGVUYWJsZShhLGQsaCxmLHYsTSxJKXt2YXIgRz10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCByZT17anNkYXRhOmR9O2lmKHYpe2xldCB5ZT1HLnBhcnNlRm9ybWF0cyh2KTtyZS4kanNkYXRhPXtmb3JtYXRzOnllfX1yZXR1cm4gcmVbaF09'@;
put 'W2FdLHlpZWxkIEcuc2FzU2VydmljZS5yZXF1ZXN0KGYscmUsSSx7c3VwcHJlc3NFcnJvckFib3J0TW9kYWw6TSxzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOk19KX0pKCl9Z2V0QXBwcm92YWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVy'@;
put 'biB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zZW5kRGV0YWlscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgdj1PYmplY3QuYXNzaWduKHtzdWI6ITB9LGEpO2Yuc3VibWl0dERldGFpbC5u'@;
put 'ZXh0KHtkYXRhOmhbZF0sdmlld0RhdGE6dn0pfSkoKX1nZXRTdWJtaXR0cygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdM'@;
put 'aWJzKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9cmVmcmVzaExpYkluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbioo'@;
put 'KXtjb25zdCBoPXtsaWIycmVmcmVzaDpbe2xpYnJlZjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hsaWJpbmZvIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7'@;
put 'bGV0IGg9e1NBU0NvbnRyb2xUYWJsZTpbe01QTElCOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCBm'@;
put 'PXtTQVNDb250cm9sVGFibGU6W3tMSUJEUzphLEZJTFRFUl9SSzpkfV19O3JldHVybih5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixmKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3RGF0YVNlYXJjaChhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9u'@;
put 'KihoLGY9ITEsdixNKXtsZXQgRz17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNIVFlQRTpoLmxlbmd0aD4wP2Y/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6aCxMSUJEUzp2LEZJTFRFUl9SSzpNfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdk'@;
put 'YXRhIixHKSkuYWRhcHRlclJlc3BvbnNlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWdldFhMTWFwUnVsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtjb25zdCBoPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVx'@;
put 'dWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNob3dEaWZmcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdix7dXNlQ29tcHV0'@;
put 'ZUFwaTpudWxsfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9cmVqZWN0aW5nKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRh'@;
put 'cHRlclJlc3BvbnNlfSkoKX1hcHByb3ZlVGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfWdldEhpc3RvcnkoYSxkLGgp'@;
put 'e3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNldFF1ZXJ5VmFyaWFibGVzKGEsZCl7dGhpcy5jb2x1bW5zLm5leHQoe2RhdGE6e2NvbHM6'@;
put 'ZH0sbGliZHM6YX0pfWdldENoYW5nZUluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7VEFCTEU6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixmKSkuYWRhcHRl'@;
put 'clJlc3BvbnNlfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGQsaCxmLHYpe3ZhciBNPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IEk9e2l3YW50Olt7bGliZHM6ZCxjb2w6YSwuLi5mJiZ7U1RBUlRST1c6Zn0sLi4udiYme1JPV1M6dn19XX07cmV0dXJuIGgubGVuZ3RoPjAmJihJLkZJTFRF'@;
put 'UlFVRVJZPWgpLCh5aWVsZCBNLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNvbHZhbHMiLEkpLmNhdGNoKEc9Pnt0aHJvdyBHfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2F2ZVF1ZXJ5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgZj17aXdhbnQ6W3tm'@;
put 'aWx0ZXJfdGFibGU6YX1dLGZpbHRlcnF1ZXJ5OmR9O2NvbnN0IHY9eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92YWxpZGF0ZWZpbHRlciIsZik7cmV0dXJuIGguZmlsdGVyLm5leHQodiksdi5hZGFwdGVyUmVzcG9uc2V9KSgpfW9wZW5UYWJsZShhKXt2YXIgZD10aGlzO3Jl'@;
put 'dHVybiBRKGZ1bmN0aW9uKigpe2xldCBoPXtpd2FudDpbe3RhYmxlX2lkOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1jaGVja09wZXJhdG9yKGEsZCxoKXtsZXQgZjtzd2l0Y2go'@;
put 'YSl7Y2FzZSJCRVRXRUVOIjpkIGluc3RhbmNlb2YgQXJyYXkmJigiIiE9PWRbMF0mJiIiIT09ZFsxXT9mPWRbMF0rIiBBTkQgIitkWzFdOiIiIT09ZFswXSYmIiI9PT1kWzFdPyhkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKToiIj09PWRbMF0mJiIiIT09ZFsxXT8oZFswXT0iLiIsZj1k'@;
put 'WzBdKyIgQU5EICIrZFsxXSk6KGRbMF09Ii4iLGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pKTticmVhaztjYXNlIklOIjpjYXNlIk5PVCBJTiI6bGV0IE09W107aWYodHlwZW9mIGQ8InUiKWZvcihsZXQgST0wO0k8ZC5sZW5ndGg7SSsrKSEwPT09ZFtJXS5jaGVja2VkJiYoImNoYXIi'@;
put 'PT09aD8oInN0cmluZyI9PXR5cGVvZiBkW0ldLnZhbCYmKGRbSV0udmFsPWRbSV0udmFsLnJlcGxhY2UoIiciLCInJyIpKSxNLnB1c2goIiciK2RbSV0udmFsKyInIikpOihudWxsPT09ZFtJXS52YWwmJihkW0ldLnZhbD0iLiIpLE0ucHVzaChkW0ldLnZhbCkpKTtkPSIoIitNKyIpIjticmVh'@;
put 'aztjYXNlIkNPTlRBSU5TIjphPSI/IjticmVhaztjYXNlIk5PVCBFUVVBTCI6YT0ibmUifXJldHVybiJudW0iPT09aCYmbnVsbD09PWQmJihkPSIuIiksIlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09ZCYmKGQ9IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKGEp'@;
put 'JiYibnVtIj09PWgmJiIiPT09ZCYmKGQ9Ii4iKSwiQkVUV0VFTiI9PT1hP3t2YWx1ZTpmLG9wZXJhdG9yOmF9Ont2YWx1ZTpkLG9wZXJhdG9yOmF9fXdoZXJlQ2xhdXNlQ3JlYXRvcihhLGQsaCl7bGV0IEksdWUsZj0iIixHPSIiLHJlPVtdO2ZvcihsZXQgRWU9MDtFZTxhLnF1ZXJ5T2JqLmxl'@;
put 'bmd0aDtFZSsrKXtsZXQgQmU9IiIsR2U9YS5xdWVyeU9ialtFZV07Zm9yKGxldCBzdD0wO3N0PEdlLmVsZW1lbnRzLmxlbmd0aDtzdCsrKXtsZXQgZHQscHQ9R2UuZWxlbWVudHNbc3RdO0k9c3Q8R2UuZWxlbWVudHMubGVuZ3RoLTE/R2UuY2xhdXNlTG9naWM6IiI7Zm9yKGxldCBNcj0wO01y'@;
put 'PHB0LnZhbHVlcy5sZW5ndGg7TXIrKyl7aWYoInN0cmluZyI9PXR5cGVvZiBwdC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiBwdC52YWx1ZXNbTXJdLmZvcm1hdHRlZClwdC52YWx1ZT09PUpTT04uc3RyaW5naWZ5KHB0LnZhbHVlc1tNcl0uZm9ybWF0dGVkKSYmKGR0PXB0LnZhbHVlc1tNcl0u'@;
put 'dW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IHFuPSJudW1iZXIiIT10eXBlb2YgcHQudmFsdWVzW01yXS5mb3JtYXR0ZWQmJm51bGwhPT1wdC52YWx1ZXNbTXJdLmZvcm1hdHRlZD9wdC52YWx1ZXNbTXJdLmZvcm1hdHRlZC50cmltKCk6cHQudmFsdWVzW01yXS5mb3JtYXR0ZWQ7cHQudmFsdWU9PT1x'@;
put 'biYmKGR0PXB0LnZhbHVlc1tNcl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PXB0LnZhbHVlJiYtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihwdC5vcGVyYXRvcikmJihkdD0iIiksKCJDT05UQUlOUyI9PT1wdC5vcGVyYXRvcnx8IkxJS0Ui'@;
put 'PT09cHQub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1wdC5vcGVyYXRvcikmJihkdD1wdC52YWx1ZSl9aWYoZHR8fChkdD1wdC52YWx1ZSkscHQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJFVFdFRU4iPT09cHQub3BlcmF0b3Ipe2R0PVtdLGR0LnB1c2gocHQudmFsdWVbMF0pLGR0LnB1'@;
put 'c2gocHQudmFsdWVbMV0pO2ZvcihsZXQgTXI9MDtNcjxwdC52YWx1ZXMubGVuZ3RoO01yKyspZHRbMF09PT1wdC52YWx1ZXNbTXJdLmZvcm1hdHRlZCYmKGR0WzBdPXB0LnZhbHVlc1tNcl0udW5mb3JtYXR0ZWQpLGR0WzFdPT09cHQudmFsdWVzW01yXS5mb3JtYXR0ZWQmJihkdFsxXT1wdC52'@;
put 'YWx1ZXNbTXJdLnVuZm9ybWF0dGVkKX1pZihwdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PXB0Lm9wZXJhdG9yfHwiTk9UIElOIj09PXB0Lm9wZXJhdG9yKSl7ZHQ9W10sZHQ9cHQudmFsdWU7Zm9yKGxldCBNcj0wO01yPHB0LnZhbHVlcy5sZW5ndGg7TXIrKylkdFtNcl0mJmR0'@;
put 'W01yXS52YWw9PT1wdC52YWx1ZXNbTXJdLmZvcm1hdHRlZCYmKGR0W01yXS52YWw9cHQudmFsdWVzW01yXS51bmZvcm1hdHRlZCl9bGV0IHF0PXB0LnR5cGU7Y29uc3QgbW49cHQudmFsdWVWYXJpYWJsZTtsZXQgTW4sd249bnVsbD09PXB0LnZhcmlhYmxlPyIiOnB0LnZhcmlhYmxlLGhuPW51'@;
put 'bGw9PT1wdC5vcGVyYXRvcj8iIjpwdC5vcGVyYXRvcjtNbj10aGlzLmNoZWNrT3BlcmF0b3IoaG4sZHQscXQpLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgTW4mJiIoIiE9PU1uWzBdJiYoTW49TW4ucmVwbGFjZSgiJyIsIicnIikpLGhuPXRoaXMuY2hlY2tPcGVyYXRvcihobixNbixxdCkub3Bl'@;
put 'cmF0b3IsImNoYXIiPT09cXQmJiJJTiIhPT1obiYmIk5PVCBJTiIhPT1obj8odHlwZW9mIE1uPiJ1IiYmKE1uPSIiKSxNbj1tbj8iICIrTW4rIiAiOiIgJyIrTW4rIicgIixCZT1CZSsiICIrd24rIiAiK2huK01uK0kpOigibnVtIj09PXF0JiZ0eXBlb2YgTW4+InUiJiYoTW49Ii4iKSxNbj10'@;
put 'eXBlb2YgTW4+InUiPyIiOiIgIitNbisiICIsQmU9QmUrIiAiK3duKyIgIitobitNbitJKX1yZS5wdXNoKEJlKX1HPSIiO2ZvcihsZXQgRWU9MDtFZTxyZS5sZW5ndGg7RWUrKyl1ZT1FZTxyZS5sZW5ndGgtMT9kOiIiLEc9MT09PXJlLmxlbmd0aD9yZVswXTpHKyIgKCIrcmVbRWVdKyIpICIr'@;
put 'dWU7cmV0dXJuIGY9Ry5zdWJzdHIoMSkuc2xpY2UoMCwtMSksRz0iV0hFUkUiK0crIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVDbGF1c2U6RyxzdHJpbmc6ZixvYmo6YSxsaWJkczpofSkse3doZXJlQ2xhdXNlOkcsc3RyaW5nOmZ9fWNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSl7Y29uc3Qg'@;
put 'ZD1bXTtyZXR1cm4gYS5maWx0ZXJHcm91cHMuZm9yRWFjaCgoaCxmKT0+e2guZmlsdGVyQ2xhdXNlcy5mb3JFYWNoKHY9PntsZXQgTT0iIjsiQkVUV0VFTiI9PT12Lm9wZXJhdG9yP009YCR7di52YWx1ZVswXX0gQU5EICR7di52YWx1ZVsxXX1gOiJJTiI9PT12Lm9wZXJhdG9yfHwiTk9UIElO'@;
put 'Ij09PXYub3BlcmF0b3I/KHYudmFsdWUuZm9yRWFjaChJPT57aWYoSS5jaGVja2VkKXtjb25zdCBHPUkudmFsOyJzdHJpbmciIT10eXBlb2YgR3x8KDAscGcuaXNTcGVjaWFsTWlzc2luZykoRykmJiJjaGFyIiE9PXYudHlwZT9NLmxlbmd0aD4wP00rPWAsJHtHfWA6TT1gKCR7R31gOk0ubGVu'@;
put 'Z3RoPjA/TSs9YCwnJHtHLnJlcGxhY2UoLycvZywiJyciKX0nYDpNPWAoJyR7Ry5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksTS5sZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09di52YWx1ZT9NPSJjaGFyIj09PXYudHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09di50eXBlJiYhdi52YWx1ZVZhcmlh'@;
put 'YmxlJiYoTT1gJyR7di52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOmguY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdST1VQX0lEOmYsVkFSSUFCTEVfTk06di52YXJpYWJsZSxPUEVSQVRPUl9OTTp2Lm9w'@;
put 'ZXJhdG9yLFJBV19WQUxVRTpNfHx2LnZhbHVlfSl9KX0pLGR9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGQpe2NvbnN0IGg9e3F1ZXJ5T2JqOltdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6eWMoSm4sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDfTt5YyhKbixhKS5m'@;
put 'aWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGgpLHljKEpuLGEpLmZpbHRlci5ncm91cExvZ2ljPXljKEpuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQztsZXQgZj0iIix2PXtlbGVtZW50czpbXX0sTT0wO3ljKEpuLGEpLmZpbHRlci5xdWVyeS5mb3JF'@;
put 'YWNoKEk9Pntjb25zdCBHPXt9O2ZvcihsZXQgcmU9MDtyZTxkLmxlbmd0aDtyZSsrKWlmKGRbcmVdLk5BTUU9PT1JLlZBUklBQkxFX05NKXtpZihmPUkuU1VCR1JPVVBfTE9HSUMsRy5kZHR5cGU9ZFtyZV0uRERUWVBFLEcudHlwZT1kW3JlXS5UWVBFLEcub3BlcmF0b3JzPSJudW0iPT09ZFty'@;
put 'ZV0uVFlQRT9Kbi5vcGVyYXRvcnMubnVtT3BlcmF0b3JzOkpuLm9wZXJhdG9ycy5jaGFyT3BlcmF0b3JzLEcubG9naWM9bnVsbCxHLm9wZXJhdG9yPUkuT1BFUkFUT1JfTk0sRy52YXJpYWJsZT1JLlZBUklBQkxFX05NLCJjaGFyIj09PWRbcmVdLlRZUEUpaWYoIklOIj09PUkuT1BFUkFUT1Jf'@;
put 'Tk18fCJOT1QgSU4iPT09SS5PUEVSQVRPUl9OTSl7Y29uc3QgdWU9W10sRWU9SS5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIicsJyIpOzE9PT1FZS5sZW5ndGg/dWUucHVzaCh7Y2hlY2tlZDohMCx2YWw6RWVbMF0uc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpfSk6RWUuZm9y'@;
put 'RWFjaCgoQmUsR2UpPT57dWUucHVzaCgwPT09R2U/e2NoZWNrZWQ6ITAsdmFsOkJlLnNsaWNlKDEpLnJlcGxhY2UoLycnL2csIiciKX06R2U9PT1FZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6QmUuc2xpY2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6QmUu'@;
put 'cmVwbGFjZSgvJycvZywiJyIpfSl9KSxHLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodWUpfWVsc2UgRy52YWx1ZT1JLlJBV19WQUxVRS5zbGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIik7ZWxzZSBpZigiSU4iPT09SS5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1JLk9Q'@;
put 'RVJBVE9SX05NKXtjb25zdCB1ZT1bXTtJLlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKEJlLEdlKT0+e3VlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkJlfSl9KSxHLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodWUpfWVsc2UgaWYoIkJFVFdFRU4i'@;
put 'PT09SS5PUEVSQVRPUl9OTSl7Y29uc3QgdWU9SS5SQVdfVkFMVUUuc3BsaXQoIiBBTkQgIik7Ry52YWx1ZT11ZX1lbHNlIEcudmFsdWU9SS5SQVdfVkFMVUU7Ry52YWx1ZXM9W10sTT09PUkuU1VCR1JPVVBfSUR8fCh5YyhKbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMu'@;
put 'aGVscGVyU2VydmljZS5kZWVwQ2xvbmUodikpLHljKEpuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmNsYXVzZUxvZ2ljPWYseWMoSm4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uaW52YWxpZENsYXVzZT0hMSxNKyssdi5lbGVtZW50cz1bXSksdi5lbGVtZW50cy5wdXNo'@;
put 'KHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRykpO2JyZWFrfX0pLHYuZWxlbWVudHMubGVuZ3RoPjAmJih5YyhKbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodikpLHljKEpuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5'@;
put 'T2JqW01dLmNsYXVzZUxvZ2ljPWYseWMoSm4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uaW52YWxpZENsYXVzZT0hMSkseWMoSm4sYSkuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIGEucmVtb3ZlUXVl'@;
put 'cnkubmV4dCghMCksITB9KSgpfXNwZWNDb252ZXJzaW9uKGEpe2xldCBkPXt9LGg9W107aWYoaD1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5OQU1FLnRvVXBwZXJDYXNlKCl9KSxhIGluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspZFtoW2ZdXT0xPT09YVtm'@;
put 'XS5UWVBFP3tjb2xUeXBlOiJudW0iLGNvbExlbmd0aDphW2ZdLkxFTkdUSH06e2NvbFR5cGU6InN0cmluZyIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTtyZXR1cm4gZH1zZXRTdWJtaXRSZWFkeSgpe3RoaXMuc2V0U3VibWl0Lm5leHQoITApfXBhcnNlRm9ybWF0cyhhKXtjb25zdCBkPXt9LGg9'@;
put 'YS52YXJzO2ZvcihsZXQgZiBvZiBPYmplY3Qua2V5cyhoKSl7Y29uc3Qgdj1oW2ZdLnR5cGUsTT1oW2ZdLmxlbmd0aDsibnVtIj09PXY/ZFtmXT0iYmVzdC4iOiJjaGFyIj09PXYmJihkW2ZdPWAkY2hhciR7TX0uYCl9cmV0dXJuIGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8YykoQ3IoVm8pLENyKGJ1KSxDcihTZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFJLZShjLGwpezEmYyYmKGFpKDApLGRlKDEsInNwYW4iLDIxKSxPZSgyLCIg'@;
put 'TG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsInAiKSxPZSg0LCJEZXBsb3lpbmcuLi4iKSxoZSgpLHNpKCkpfWZ1bmN0aW9uIExLZShjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBPS2UoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gUEtlKGMsbCl7'@;
put 'aWYoMSZjJiYoZGUoMCwiZGl2IiwzMCksZ3QoMSxMS2UsMSwwLCJjbHItaWNvbiIsMzEpKDIsT0tlLDEsMCwiY2xyLWljb24iLDI3KSxkZSgzLCJwIiksT2UoNCwiRGVwbG95IFNBUyBKb2JzIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxNZSgibmdJZiIsITA9PT1hLmF1dG9E'@;
put 'ZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksTWUoIm5nSWYiLCEhYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKX19ZnVuY3Rpb24gRktlKGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIEhLZShjLGwpezEmYyYmV3QoMCwiY2xyLWlj'@;
put 'b24iLDMzKX1mdW5jdGlvbiBOS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMwKSxndCgxLEZLZSwxLDAsImNsci1pY29uIiwzMSkoMixIS2UsMSwwLCJjbHItaWNvbiIsMjcpLGRlKDMsInAiKSxPZSg0LCJDcmVhdGUgZGF0YWJhc2UiKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtm'@;
put 'ZSgpLE1lKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKCksTWUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gVktlKGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIEJLZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1PbigpO2FpKDApLGRlKDEsInAiLDIyKSxPZSgyLCJEb25lIiksaGUoKSxXdCgzLCJociIsMjMpLGd0KDQsUEtlLDUsMiwiZGl2IiwyNCkoNSxOS2UsNSwyLCJkaXYiLDI0KSxXdCg2LCJociIsMjMpLGRlKDcsImRpdiIsMjUpKDgsImJ1dHRvbiIsMjYpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxndCg5LFZLZSwxLDAsImNsci1pY29uIiwyNyksT2UoMTAsIiBMQVVOQ0ggIiksaGUoKSxkZSgxMSwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7'@;
put 'cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLE9lKDEyLCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxXdCgxMywiaHIiLDIzKSxkZSgxNCwiZGl2IiwyNSkoMTUsImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmF1dG9kZXBsb3lpbmc9ITEsQ3QoaC5hdXRvZGVwbG95RG9uZT0hMSl9KSxPZSgxNiwiIENsb3NlICIpLGhlKCksZGUoMTcsImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUo'@;
put 'Mikub3BlblNhc1JlcXVlc3RzTW9kYWwoKSl9KSxPZSgxOCwiIFNBUyBSZXF1ZXN0cyAiKSxoZSgpKCksc2koKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNCksTWUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksTWUoIm5nSWYiLG51'@;
put 'bGwhPT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKDQpLE1lKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFja3x8ITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5jdGlvbiBqS2UoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJkaXYiLDE5KSgxLCJkaXYiLDIwKSxndCgyLFJLZSw1LDAsIm5nLWNvbnRhaW5lciIsMTIpKDMsQktlLDE5LDMsIm5nLWNvbnRhaW5lciIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMiksTWUoIm5nSWYiLCFhLmF1dG9kZXBsb3lEb25lKSxmZSgpLE1lKCJuZ0lmIixhLmF1'@;
put 'dG9kZXBsb3lEb25lKX19ZnVuY3Rpb24gektlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5pZCksZmUoKSxMcigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIFVLZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1PbigpO2RlKDAsInNlbGVjdCIsMzQpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3RlZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxndCgxLHpLZSwyLDIsIm9w'@;
put 'dGlvbiIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKX19ZnVuY3Rpb24gWktlKGMsbCl7MSZjJiZXdCgwLCJjbHItc3Bpbm5lciIsMzcpfWZ1bmN0aW9uIFdLZShj'@;
put 'LGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuaWQpLGZlKCksTHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBZS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJzZWxlY3QiLDM0'@;
put 'KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25Db21wdXRlQ29udGV4dENoYW5nZShoKSl9KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBnaShmLnNlbGVjdGVkQ29tcHV0ZUNvbnRl'@;
put 'eHQsaCl8fChmLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9aCksQ3QoaCl9KSxndCgxLFdLZSwyLDIsIm9wdGlvbiIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCksZmUoKSxNZSgibmdGb3JPZiIsYS5jb21wdXRlQ29u'@;
put 'dGV4dHMpfX1mdW5jdGlvbiBHS2UoYyxsKXsxJmMmJld0KDAsImNsci1zcGlubmVyIiwzNyl9ZnVuY3Rpb24gJEtlKGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwibGFiZWwiLDIpLE9lKDIsIlJ1bm5pbmcgYXMgdXNlcjoiKSxoZSgpLGRlKDMsImRpdiIsMykoNCwiZGl2Iiw0KSg1LCJwIiw1'@;
put 'KSxPZSg2KSxoZSgpKCkoKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg2KSxTcihhLnJ1bm5pbmdBc1VzZXIpfX1sZXQgS0tlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNT'@;
put 'ZXJ2aWNlPWgsdGhpcy5zYXNWaXlhU2VydmljZT1mLHRoaXMubG9nZ2VyU2VydmljZT12LHRoaXMuaGVscGVyU2VydmljZT1NLHRoaXMuc2FzSnNDb25maWc9bmV3IHloLlNBU2pzQ29uZmlnLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIi'@;
put 'LHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgS3IsdGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0PSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5hdXRvZGVwbG95aW5nPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITEsdGhpcy5yZWNyZWF0ZURh'@;
put 'dGFiYXNlTW9kYWw9ITEsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZT0hMCx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmFkbWluR3JvdXBzTG9hZGluZz0hMSx0aGlzLmN1cnJlbnRVc2VySW5m'@;
put 'b0xvYWRpbmc9ITEsdGhpcy5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jdXJyZW50VXNlckluZm89bnVsbCx0aGlzLmNvbXB1dGVDb250ZXh0cz1bXSx0aGlzLmF1dG9EZXBsb3lTdGF0dXM9e2RlcGxveVNlcnZpY2VQYWNrOm51bGwscnVuTWFr'@;
put 'ZURhdGE6bnVsbH0sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmRlcGxveUluTmV3V2luZG93PSEwfW5nT25Jbml0KCl7dGhpcy5sb2FkRGF0YSgpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXt5aWVsZCBh'@;
put 'LmdldEFkbWluR3JvdXBzKCkseWllbGQgYS5nZXRDb21wdXRlQ29udGV4dHMoKSx5aWVsZCBhLmdldEN1cnJlbnRVc2VyKCksc2V0VGltZW91dCgoKT0+e2Euc2VsZWN0ZWRDb21wdXRlQ29udGV4dCYmYS5vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCl9'@;
put 'LDUwMCl9KSgpfWdldENvbXB1dGVDb250ZXh0cygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57YS5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSEwLGEuc2FzVml5YVNlcnZpY2UuZ2V0Q29tcHV0ZUNvbnRleHRzKCkuc3Vic2NyaWJl'@;
put 'KGY9PnthLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITE7Y29uc3Qgdj1mLml0ZW1zLmZpbmQoTT0+IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCI9PT1NLm5hbWUpO3YmJihhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9di5pZCksYS5jb21wdXRlQ29udGV4dHM9Zi5pdGVtcyxk'@;
put 'KCl9LGY9PntoKGYpfSl9KX0pKCl9Z2V0Q3VycmVudFVzZXIoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuY3VycmVudFVzZXJJbmZvTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkuc3Vic2Ny'@;
put 'aWJlKGY9PnthLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITEsYS5jdXJyZW50VXNlckluZm89ZixhLmRjUGF0aD1gL2V4cG9ydC92aXlhL2hvbWVzLyR7Zi5pZH1gLGQoKX0sZj0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIHdoaWxlIGdldHRpbmcgY3VycmVudCB1c2VyIixmKSxoKGYpfSl9KX0p'@;
put 'KCl9Z2V0QWRtaW5Hcm91cHMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuYWRtaW5Hcm91cHNMb2FkaW5nPSEwLGEuc2FzVml5YVNlcnZpY2UuZ2V0QWRtaW5Hcm91cHMoKS5zdWJzY3JpYmUoZj0+e2EuYWRtaW5Hcm91cHNM'@;
put 'b2FkaW5nPSExLGEuYWRtaW5Hcm91cHM9Zi5pdGVtcy5tYXAodj0+KHtpZDp2LmlkLG5hbWU6di5uYW1lfSkpLGQoKX0pfSl9KSgpfW9uQ29tcHV0ZUNvbnRleHRDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtkLnNhc1ZpeWFTZXJ2aWNlLmdldENvbXB1dGVDb250'@;
put 'ZXh0QnlJZChhKS5zdWJzY3JpYmUoaD0+e2QucnVubmluZ0FzVXNlcj1oLmF0dHJpYnV0ZXMmJmguYXR0cmlidXRlcy5ydW5TZXJ2ZXJBcz9oLmF0dHJpYnV0ZXMucnVuU2VydmVyQXM6ZC5jdXJyZW50VXNlckluZm8/LmlkfHwidW5rbm93biJ9KX0pKCl9Z2V0Q29tcHV0ZUNvbnRleHROYW1l'@;
put 'KGEpe3JldHVybiB0aGlzLmNvbXB1dGVDb250ZXh0cy5maW5kKGQ9PmQuaWQ9PT1hKT8ubmFtZXx8dm9pZCAwfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBh'@;
put 'Y2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2Msdm9pZCAwLHZvaWQgMCwhMCksYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSEwLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2Yg'@;
put 'ZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2UsYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSExLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/'@;
put 'aDpkfWApLGEuYXV0b2RlcGxveWluZz0hMSx2b2lkKGEuYXV0b2RlcGxveURvbmU9ITEpfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9cnVuQXV0b0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKGQ9ITEpe2EuZGVwbG95SW5OZXdXaW5kb3d8fChhLmF1dG9kZXBsb3lp'@;
put 'bmc9ITApLGQmJmEuZXhlY3V0ZUpzb24oKSxhLnJlY3JlYXRlRGF0YWJhc2U/YS5jcmVhdGVEYXRhYmFzZSgpOmEuZGVwbG95SW5OZXdXaW5kb3d8fChhLmF1dG9kZXBsb3lEb25lPSEwKX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jcmVhdGVEYXRhYmFzZSgpe2xldCBhPXtmcm9tanM6W3tB'@;
put 'RE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0sZD10aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lO2lmKHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29udGV4dC5sZW5ndGgmJnRoaXMuY29tcHV0ZUNvbnRleHRzLmxlbmd0aCl7Y29uc3QgZj10aGlzLmdl'@;
put 'dENvbXB1dGVDb250ZXh0TmFtZSh0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpO2YmJihkPWYpfWxldCBoPXt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4dE5hbWU6ZCxkZWJ1ZzohMH07dGhpcy5kZXBsb3lJbk5ld1dpbmRvdz90aGlzLnJ1bk1ha2VkYXRhSW5OZXdXaW5kb3coe2NvbnRl'@;
put 'eHROYW1lOmQsYWRtaW46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsZGNQYXRoOnRoaXMuZGNQYXRofSk6dGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIsYSxoLCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihmPT57dGhp'@;
put 'cy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShmLnJlc3VsdCYmZi5yZXN1bHQubGVuZ3RoPjApLHR5cGVv'@;
put 'ZiBmLnNhc2pzQWJvcnQ8InUiJiZ0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgibWFrZWRhdGEiLGYuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOmYuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmYuU1lTRVJST1JURVhULE1BQzpmLnNhc2pzQWJvcnRbMF0u'@;
put 'TUFDfSksdGhpcy5oZWxwZXJTZXJ2aWNlLmlzU3RyZWFtaW5nVml5YSgpJiZ0aGlzLnVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl9KS5jYXRjaChmPT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1ha2VkYXRhIixKU09OLnN0cmluZ2lmeShmKSksdGhpcy5hdXRv'@;
put 'RGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1ydW5NYWtlZGF0YUluTmV3V2luZG93KGEpe2xldCBkPXRoaXMu'@;
put 'c2FzanNDb25maWcuc2VydmVyVXJsLGg9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgZj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGQrZisiLz9fcHJvZ3JhbT0iK2grIi9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIrYCZfY29udGV4dG5hbWU9'@;
put 'JHthLmNvbnRleHROYW1lfWArYCZhZG1pbj0ke2EuYWRtaW59YCtgJmRjcGF0aD0ke2EuZGNQYXRofSZfZGVidWc9MTMxYCl9dXBkYXRlSW5kZXhIdG1sQ29tcHV0ZUNvbnRleHQoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2NvbnN0IGQ9bG9jYXRpb24uc2VhcmNoLnNwbGl0'@;
put 'KCIvIikucG9wKCksaD1kPy5pbmNsdWRlcygiLiIpP2Q6dm9pZCAwO2lmKCFoKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIldlIGNvdWxkIG5vdCBmaWd1cmUgb3V0IHRoZSBmaWxlIG5hbWUgb2YgYGluZGV4Lmh0bWxgIGJhc2VkIG9uIHRoZSB1cmwu'@;
put 'Iik7Y29uc3QgZj15aWVsZCBhLnNhc1NlcnZpY2UuZ2V0RmlsZUNvbnRlbnQoYCR7YS5hcHBMb2N9L3NlcnZpY2VzYCxoKTtpZighZilyZXR1cm4gdm9pZCBhLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byBnZXQgJHtofSBhdCAke2EuYXBwTG9jfS9zZXJ2aWNlc2ApO2NvbnN0IHY9'@;
put 'YS5nZXRDb21wdXRlQ29udGV4dE5hbWUoYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTtpZighdilyZXR1cm4gdm9pZCBhLmxvZ2dlclNlcnZpY2UuZXJyb3IoYENvbXB1dGUgY29udGV4dCBuYW1lIG5vdCBmb3VuZCBmb3IgSUQ6ICR7YS5zZWxlY3RlZENvbXB1dGVDb250ZXh0fSB8IExpc3Q6'@;
put 'ICR7SlNPTi5zdHJpbmdpZnkoYS5jb21wdXRlQ29udGV4dHMpfWApO2NvbnN0IE09Zi5yZXBsYWNlKC9jb250ZXh0bmFtZT0iW14iXSoiL2csYGNvbnRleHRuYW1lPSIke3Z9ImApO3lpZWxkIGEuc2FzU2VydmljZS51cGRhdGVGaWxlQ29udGVudChgJHthLmFwcExvY30vc2VydmljZXNgLGgs'@;
put 'TSkuY2F0Y2goST0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBEYXRhQ29udHJvbGxlci5odG1sOiAke0l9YCl9KX0pKCl9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1vbkpzb25GaWxlQ2hh'@;
put 'bmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfXJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKGEpeyEwPT09YS50YXJnZXQuY2hlY2tlZCYmKHRo'@;
put 'aXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSEwKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9wZW5TYXNSZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1uYXZpZ2F0ZVRvSG9tZSgp'@;
put 'e3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUobWMpLCRlKGEyZSksJGUoVm8pLCRlKElXKSwkZShTZCksJGUoYnUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbImFwcC1hdXRvbWF0aWMtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyIsYXBwTG9jOiJhcHBMb2MiLGRjUGF0aDoiZGNQYXRoIixzZWxlY3RlZEFkbWluR3Jv'@;
put 'dXA6InNlbGVjdGVkQWRtaW5Hcm91cCJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0NCx2YXJzOjExLGNvbnN0czpbWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbImZvciIsImRj'@;
put 'bG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiLCJkYy1sb2MtaW5wdXQtd3JhcHBlciJd'@;
put 'LFsxLCJjbHItaW5wdXQtd3JhcHBlciIsInNtYWxsLW10Il0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJkY2xvYyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJvcHRpb25zIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsNCwibmdJZiJd'@;
put 'LFsiY2xySW5saW5lIiwiIiwiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJmb3IiLCJjb21wdXRlQ29udGV4dCIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFs0LCJuZ0lmIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1i'@;
put 'bG9jayIsIm1yLTEwIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi'@;
put 'dG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1kZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbMSwic3Bpbm5lciIsInNwaW5uZXItbWQiXSxbMSwibS0wIiwiYWxpZ24tc2VsZi1zdGFydCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJkZXBsb3ktc3RhdHVzLXJvdyIs'@;
put 'NCwibmdJZiJdLFsxLCJidXR0b25zIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsiY2xhc3MiLCJkZXBsb3ktZXJyb3IiLCJzaGFwZSIsInRpbWVzLWNpcmNsZSIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQt'@;
put 'MTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwiYWxpZ24tc2VsZi1lbmQiLDMsImNsaWNrIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0'@;
put 'YW5kYXJkIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDEsImRlcGxveS1zdWNjZXNzIl0sWyJzaGFwZSIsInRpbWVzLWNpcmNsZSIsMSwiZGVwbG95LWVycm9yIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9k'@;
put 'ZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsiY2xySW5saW5lIiwiIiwxLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ3QoMCxqS2UsNCwyLCJkaXYiLDApLGRlKDEsImg0IiwxKSxPZSgyLCJWaXlhIERlcGxveSIp'@;
put 'LGhlKCksV3QoMywiaHIiKSxkZSg0LCJsYWJlbCIsMiksT2UoNSwiQXBwIExvYyIpLGhlKCksZGUoNiwiZGl2IiwzKSg3LCJkaXYiLDQpKDgsInAiLDUpLE9lKDkpLGhlKCkoKSgpLGRlKDEwLCJsYWJlbCIsMiksT2UoMTEsIkRDIExvYyIpLGhlKCksZGUoMTIsImRpdiIsNikoMTMsImRpdiIs'@;
put 'NykoMTQsImlucHV0Iiw4KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGdpKGguZGNQYXRoLHYpfHwoaC5kY1BhdGg9diksdn0pLGhlKCkoKSgpLGRlKDE1LCJsYWJlbCIsMiksT2UoMTYsIlNBUyBBZG1pbiBncm91cCIpLGhlKCksZGUoMTcsImRpdiIsMykoMTgsImRp'@;
put 'diIsNyksZ3QoMTksVUtlLDIsMiwic2VsZWN0Iiw5KSgyMCxaS2UsMSwwLCJjbHItc3Bpbm5lciIsMTApLGhlKCkoKSxkZSgyMSwibGFiZWwiLDExKSxPZSgyMiwiQ29tcHV0ZSBDb250ZXh0IiksaGUoKSxkZSgyMywiZGl2IiwzKSgyNCwiZGl2Iiw3KSxndCgyNSxZS2UsMiwyLCJzZWxlY3Qi'@;
put 'LDkpKDI2LEdLZSwxLDAsImNsci1zcGlubmVyIiwxMCksaGUoKSgpLGd0KDI3LCRLZSw3LDEsIm5nLWNvbnRhaW5lciIsMTIpLFd0KDI4LCJociIpLGRlKDI5LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucnVuQXV0b0RlcGxveSgpfSksT2UoMzAsIiBEZXBs'@;
put 'b3lcbiIpLGhlKCksZGUoMzEsImNsci1tb2RhbCIsMTQpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBnaShoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCx2KXx8KGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPXYpLHZ9KSxkZSgzMiwiaDMiLDE1KSxPZSgzMywiV2Fy'@;
put 'bmluZyIpLGhlKCksZGUoMzQsImRpdiIsMTYpLE9lKDM1LCIgVGhpcyBhY3Rpb24gd2lsbCByZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5'@;
put 'b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIiksZGUoMzYsInN0cm9uZyIpLE9lKDM3KSxoZSgpLE9lKDM4LCIuICIpLGhlKCksZGUoMzksImRpdiIsMTcpKDQwLCJidXR0b24iLDE4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVjcmVhdGVEYXRhYmFzZU1v'@;
put 'ZGFsPSExLGgucmVjcmVhdGVEYXRhYmFzZT0hMX0pLE9lKDQxLCIgQ2FuY2VsICIpLGhlKCksZGUoNDIsImJ1dHRvbiIsMTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsaC5yZWNyZWF0ZURhdGFiYXNlPSEwfSksT2UoNDMsIiBPayAi'@;
put 'KSxoZSgpKCkoKSksMiZkJiYoTWUoIm5nSWYiLGguYXV0b2RlcGxveWluZyksZmUoOSksU3IoaC5hcHBMb2MpLGZlKDUpLGZpKCJuZ01vZGVsIixoLmRjUGF0aCksZmUoNSksTWUoIm5nSWYiLCFoLmFkbWluR3JvdXBzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5hZG1pbkdyb3Vwc0xvYWRp'@;
put 'bmcpLGZlKDUpLE1lKCJuZ0lmIiwhaC5jb21wdXRlQ29udGV4dHNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLmNvbXB1dGVDb250ZXh0c0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgucnVubmluZ0FzVXNlciksZmUoNCksZmkoImNsck1vZGFsT3BlbiIsaC5yZWNyZWF0ZURhdGFiYXNlTW9k'@;
put 'YWwpLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksU3IoaC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOltRcyxiYSxEMixJMixHbCxrMix0bCxXbyxPbCxydSxZdSxjbyxZMSxFNyxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCByJD0oKT0+KHtzdGFuZGFs'@;
put 'b25lOiEwfSk7ZnVuY3Rpb24gWEtlKGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw2KSgxLCJwIiw3KSxPZSgyLCJQbGVhc2UgbG9nIGluIGZpcnN0IiksaGUoKSxkZSgzLCJsYWJlbCIsOCksT2UoNCwiVXNlcm5hbWUiKSxoZSgpLGRlKDUsImRpdiIsOSkoNiwiZGl2IiwxMCksV3QoNywiaW5wdXQi'@;
put 'LDExKSxoZSgpKCksZGUoOCwibGFiZWwiLDEyKSxPZSg5LCJQYXNzd29yZCIpLGhlKCksZGUoMTAsImRpdiIsOSkoMTEsImRpdiIsMTApLFd0KDEyLCJpbnB1dCIsMTMpLGhlKCkoKSxkZSgxMywiYnV0dG9uIiwxNCksT2UoMTQsIkxvZyBpbiIpLGhlKCkoKSl9ZnVuY3Rpb24gcUtlKGMsbCl7'@;
put 'aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5pZCksZmUoKSxMcigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIEpLZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2Nv'@;
put 'bnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoKSxMcigiKCAiLGEuYXR0cmlidXRlcy5zeXNVc2VySWQsIiApIil9fWZ1bmN0aW9uIFFLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLE9lKDEpLGd0KDIsSktlLDIsMSwic3BhbiIsNSksUW8oMywianNvbiIpLGhlKCkpLDImYyl7Y29u'@;
put 'c3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEubmFtZSksZmUoKSxMcigiICIsYS5uYW1lLCIgIiksZmUoKSxNZSgibmdJZiIsInt9IiE9QWMoMywzLGEuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBlWGUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksT2UoMSwiSlNPTiBTdWJtaXR0ZWQgU3Vj'@;
put 'Y2Vzc2Z1bGx5IiksaGUoKSl9ZnVuY3Rpb24gdFhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwzNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSksV3QoMSwiY2xyLWljb24iLDM4'@;
put 'KSxoZSgpfX1mdW5jdGlvbiBuWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJwIiwzOSksT2UoMiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLGhlKCksV3QoMywiaHIiKSxkZSg0LCJkaXYiKSg1LCJidXR0b24iLDQwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3Qo'@;
put 'YSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4dCIpKX0pLE9lKDYsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpLHNpKCl9fWZ1bmN0aW9uIHJYZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDQpLE9lKDEp'@;
put 'LGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLExyKCIgIixhLm1ha2VEYXRhUmVzcG9uc2UsIiAiKX19ZnVuY3Rpb24gaVhlKGMsbCl7MSZjJiYoYWkoMCksZGUoMSwic3BhbiIsMjUpLE9lKDIsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxoZSgpLGRlKDMsInNwYW4iKSxPZSg0LCIg'@;
put 'VmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUoKSxzaSgpKX1mdW5jdGlvbiBhWGUoYyxsKXsxJmMmJihhaSgwKSxXdCgxLCJjbHItaWNvbiIsNDYpLGRlKDIsInNwYW4iKSxPZSgzLCIgVmFsaWRhdGlvbiBmYWlsZWQgIiksaGUoKSxzaSgpKX1mdW5jdGlvbiBzWGUoYyxsKXsxJmMmJihhaSgw'@;
put 'KSxXdCgxLCJjbHItaWNvbiIsNDcpLGRlKDIsInNwYW4iKSxPZSgzLCIgVmFsaWRhdGlvbiBzdWNjZWVkZWQgIiksaGUoKSxzaSgpKX1mdW5jdGlvbiBvWGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ1KSxndCgxLGlYZSw1LDAsIm5nLWNvbnRhaW5lciIsNSkoMixhWGUsNCwwLCJuZy1j'@;
put 'b250YWluZXIiLDUpKDMsc1hlLDQsMCwibmctY29udGFpbmVyIiw1KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxNZSgibmdJZiIsYS5pc1ZhbGlkYXRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWEudmFsaWRhdGlvblN0YXRlKSxmZSgpLE1l'@;
put 'KCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJzdWNjZXNzIj09PWEudmFsaWRhdGlvblN0YXRlKX19ZnVuY3Rpb24gbFhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwicCIsMzkpLE9lKDIsIkNyZWF0ZSBEYXRhYmFzZSBDb21wbGV0ZWQiKSxoZSgpLFd0KDMsImhyIiks'@;
put 'Z3QoNCxyWGUsMiwxLCJkaXYiLDQxKSxkZSg1LCJidXR0b24iLDQyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksT2UoNiwiIExldCdzIGdldCBzdGFydGVkICIpLGhlKCksZGUoNywiYnV0dG9uIiw0MiksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLE9lKDgsIiBEb3dubG9hZCBsb2cgIiksaGUoKSxkZSg5LCJidXR0b24iLDQyKSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnZhbGlkYXRlRGVwbG95KCkpfSksT2UoMTAsIiBWYWxpZGF0ZSAiKSxoZSgpLGd0KDExLG9YZSw0LDMsImRpdiIsNDMpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDQpLE1lKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2Uu'@;
put 'bGVuZ3RoPjApLGZlKDcpLE1lKCJuZ0lmIiwibm9uZSIhPT1hLnZhbGlkYXRpb25TdGF0ZXx8YS5pc1ZhbGlkYXRpbmcpfX1mdW5jdGlvbiBjWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJmb3JtIikoMiwiZGl2IiwxNSkoMywibGFiZWwiLDE2KSxPZSg0LCJBZG1p'@;
put 'biBncm91cCIpLGhlKCksZGUoNSwiZGl2IiwxNykoNiwiZGl2IiwxOCkoNywic2VsZWN0IiwxOSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZ2koZi5zZWxlY3RlZEFkbWluR3JvdXAsaCl8fChmLnNlbGVjdGVkQWRtaW5Hcm91cD1o'@;
put 'KSxDdChoKX0pLGd0KDgscUtlLDIsMiwib3B0aW9uIiwyMCksaGUoKSgpKCkoKSxkZSg5LCJkaXYiLDE1KSgxMCwiZGl2IikoMTEsImxhYmVsIiwxNiksT2UoMTIsIkNvbnRleHQiKSxoZSgpLGRlKDEzLCJkaXYiLDE3KSgxNCwiZGl2IiwxOCkoMTUsInNlbGVjdCIsMjEpLHBpKCJuZ01vZGVs'@;
put 'Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYuc2VsZWN0ZWRDb250ZXh0LGgpfHwoZi5zZWxlY3RlZENvbnRleHQ9aCksQ3QoaCl9KSxndCgxNixRS2UsNCw1LCJvcHRpb24iLDIwKSxoZSgpKCkoKSxkZSgxNywiYnV0dG9uIiwyMiksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmV4ZWN1dGFibGVDb250ZXh0KCkpfSksV3QoMTgsImNsci1pY29uIiwyMyksaGUoKSgpLGRlKDE5LCJkaXYiLDI0KSgyMCwic3BhbiIsMjUpLE9lKDIxLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpLGRlKDIyLCJzcGFuIiks'@;
put 'T2UoMjMsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLGhlKCkoKSxkZSgyNCwibGFiZWwiLDI2KSxPZSgyNSwiREMgTG9jIiksaGUoKSxkZSgyNiwiZGl2Iiw5KSgyNywiZGl2IiwxMCkoMjgsImlucHV0IiwyNykscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9'@;
put 'TGUoKTtyZXR1cm4gZ2koZi5kY1BhdGgsaCl8fChmLmRjUGF0aD1oKSxDdChoKX0pLEZ0KCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5zYXZlRGNQYXRoKCkpfSksaGUoKSgpKCksZGUoMjksInAiLDI4KSxPZSgzMCwiIFNlbGVjdCBKU09OIGZpbGUgdG8gdXBs'@;
put 'b2FkIChqc29uIGJ1aWxkIGZpbGUgcHJlbG9hZGVkKTogIiksaGUoKSxkZSgzMSwiZGl2IiwyOSkoMzIsImlucHV0IiwzMCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVy'@;
put 'biB3dChhKSxDdChMZSgpLm9uSnNvbkZpbGVDaGFuZ2UoaCkpfSksaGUoKSgpLGRlKDMzLCJkaXYiLDMxKSgzNCwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmV4ZWN1dGVKc29uKCkpfSksT2UoMzUsIiBTVUJNSVQgSlNPTiAiKSxoZSgp'@;
put 'LGd0KDM2LGVYZSwyLDAsInNwYW4iLDUpLGhlKCksZGUoMzcsInAiLDI4KSxPZSgzOCwiU2VsZWN0IFNBUyBmaWxlIHRvIHVwbG9hZDoiKSxoZSgpLGRlKDM5LCJkaXYiLDI5KSg0MCwiaW5wdXQiLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLmNsZWFy'@;
put 'VXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBmLm9uU2FzRmlsZUNoYW5nZShoKSxDdChmLmRvd25sb2FkRmlsZUJ0bj0hMCl9KSxoZSgpLGd0KDQxLHRYZSwyLDAsImJ1dHRvbiIsMzMpLGhlKCksZGUoNDIsImRpdiIsMzEp'@;
put 'KDQzLCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZXhlY3V0ZVNBUygpKX0pLE9lKDQ0LCIgU1VCTUlUICIpLGhlKCkoKSgpLGd0KDQ1LG5YZSw3LDAsIm5nLWNvbnRhaW5lciIsNSksZGUoNDYsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jcmVhdGVEYXRhYmFzZSgpKX0pLE9lKDQ3LCIgQ3JlYXRlIERhdGFiYXNlICIpLGhlKCksZ3QoNDgsbFhlLDEyLDIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKDcpLGZpKCJuZ01vZGVs'@;
put 'IixhLnNlbGVjdGVkQWRtaW5Hcm91cCksTWUoIm5nTW9kZWxPcHRpb25zIixabygxOSxyJCkpLGZlKCksTWUoIm5nRm9yT2YiLGEuYWRtaW5Hcm91cHMpLGZlKDIpLFRyKCJoaWRkZW4iLGEuY29udGV4dHNMb2FkaW5nKSxmZSg1KSxmaSgibmdNb2RlbCIsYS5zZWxlY3RlZENvbnRleHQpLE1l'@;
put 'KCJuZ01vZGVsT3B0aW9ucyIsWm8oMjAsciQpKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmFsbENvbnRleHRzKSxmZSgzKSxUcigiaGlkZGVuIiwhYS5jb250ZXh0c0xvYWRpbmcpLGZlKDkpLGZpKCJuZ01vZGVsIixhLmRjUGF0aCksTWUoIm5nTW9kZWxPcHRpb25zIixabygyMSxyJCkpLGZlKDYp'@;
put 'LE1lKCJjbHJMb2FkaW5nIixhLmlzU3VibWl0dGluZ0pzb24pLGZlKDIpLE1lKCJuZ0lmIixhLmlzSnNvblN1Ym1pdHRlZCksZmUoNSksTWUoIm5nSWYiLGEuZG93bmxvYWRGaWxlQnRuKSxmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5leGVjdXRpbmdTY3JpcHQpLGZlKDIpLE1lKCJuZ0lmIixh'@;
put 'LmpvYkxvZy5sZW5ndGg+MCksZmUoKSxNZSgiY2xyTG9hZGluZyIsYS5jcmVhdGVEYXRhYmFzZUxvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApfX1sZXQgdVhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTZXJ2'@;
put 'aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLmRlcGxveVNlcnZpY2U9Zix0aGlzLnNhc0pzQ29uZmlnPW5ldyB5aC5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMubmVlZHNMb2dpbj0hMSx0aGlzLmFkbWluR3Jv'@;
put 'dXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENvbnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMubGluZXNPZkNvZGU9'@;
put 'W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRlZEZpbGU9ITAsdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRvd25sb2FkRmlsZUJ0'@;
put 'bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgpe3JldHVybiBRKGZ1'@;
put 'bmN0aW9uKigpe30pKCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vblNhc0ZpbGVDaGFuZ2UoYSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCBkPWEudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZmlsZU5hbWU9ZC5uYW1lO2xldCBo'@;
put 'PW5ldyBGaWxlUmVhZGVyO2gub25sb2FkPSgpPT57aC5yZXN1bHQmJih0aGlzLmxpbmVzT2ZDb2RlPWgucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoZj0+IiIhPT1mJiZudWxsIT09ZiksdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0h'@;
put 'MCx0aGlzLmFkZFByZWNvZGVMaW5lcygpKX0saC5yZWFkQXNUZXh0KGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0p'@;
put 'KCl9YWRkUHJlY29kZUxpbmVzKCl7dGhpcy5saW5lc09mQ29kZS51bnNoaWZ0KGAlbGV0IGNvbnRleHQ9JHt0aGlzLnNlbGVjdGVkQ29udGV4dH07YCxgJWxldCBhcHBMb2M9JHt0aGlzLmFwcExvY307YCxgJWxldCBhZG1pbj0ke3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfTtgLGAlbGV0IGRj'@;
put 'cGF0aD0ke3RoaXMuZGNQYXRofTtgKX1kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCl7bGV0IGE9dGhpcy5saW5lc09mQ29kZS5qb2luKCJcbiIpLGQ9dGhpcy5maWxlTmFtZS5zcGxpdCgiLiIpWzBdO3RoaXMuZG93bmxvYWRGaWxlKGEsZCwic2FzIil9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQi'@;
put 'KXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1zYXZlRGNQYXRoKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImRlcGxveV9kY19sb2MiLHRoaXMuZGNQYXRoKX1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS5pc1N1Ym1pdHRpbmdK'@;
put 'c29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9pZCAwLCEwKSxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3RyaW5nIiE9dHlw'@;
put 'ZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCl9YS5pc1N1Ym1pdHRpbmdKc29uPSExfSko'@;
put 'KX1leGVjdXRlU0FTKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLmV4ZWN1dGluZ1NjcmlwdD0hMCxhLmpvYkxvZz0iIixhLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCBkPXlpZWxkIGEuc2FzSnMuZXhlY3V0ZVNjcmlwdCh7ZmlsZU5hbWU6YS5maWxlTmFtZSxsaW5l'@;
put 'c09mQ29kZTphLmxpbmVzT2ZDb2RlLGNvbnRleHROYW1lOmEuc2VsZWN0ZWRDb250ZXh0fSk7YS5sb2dnZXJTZXJ2aWNlLmxvZyhkKSwic3RyaW5nIj09dHlwZW9mIGQubG9nJiYoZC5sb2c9SlNPTi5wYXJzZShkLmxvZykpLCJlcnJvciI9PT1kLmpvYlN0YXR1cz9hbGVydCgiRXJyb3IhIik6'@;
put 'YS5qb2JMb2c9ZC5sb2cuaXRlbXM/ZC5sb2cuaXRlbXMubWFwKGg9PmgubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShkLmxvZyksYS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7YS5leGVjdXRpbmdTY3JpcHQ9ITF9fSkoKX1jcmVhdGVEYXRhYmFzZShhPSEwKXtpZihhKXtsZXQg'@;
put 'Zj10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5zZXJ2ZXJVcmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRhJkFETUlOPSIrdGhpcy5zZWxlY3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9'@;
put 'Iit0aGlzLmRjUGF0aCsiJl9kZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGYsIl9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwLERDUEFUSDp0aGlzLmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihmPT57dHJ5e3RoaXMubWFr'@;
put 'ZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMX0pLmNhdGNoKGY9Pnt0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMTt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04u'@;
put 'c3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfX0pfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX12YWxpZGF0ZURlcGxveSgpe3RoaXMuaXNWYWxpZGF0aW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvc3Rh'@;
put 'cnR1cHNlcnZpY2UiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMudmFsaWRhdGlvblN0YXRlPWEuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChh'@;
put 'PT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKFZv'@;
put 'KSwkZShtYyksJGUoU2QpLCRlKGEyZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRh'@;
put 'cHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjksdmFyczozLGNvbnN0czpbWzEsImNhcmQtaGVhZGVyIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZC1pbmxpbmUtYmxvY2siLCJtbC0xMCIsIm1iLTEwIiwibXQtMCJd'@;
put 'LFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImNsZWFyLW1lbW9yeS1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayJdLFsiaWQiLCJsb2dpbkZvcm0iLCJjbGFzcyIsImQtbm9uZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJpZCIsImxvZ2luRm9y'@;
put 'bSIsMSwiZC1ub25lIl0sWzEsIm1iLTEwIl0sWyJmb3IiLCJ1c2VybmFtZSIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJ1c2VybmFtZSIsMSwiY2xy'@;
put 'LWlucHV0Il0sWyJmb3IiLCJwYXNzd29yZCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbInR5cGUiLCJwYXNzd29yZCIsImlkIiwicGFzc3dvcmQiLDEsImNsci1pbnB1dCJdLFsiaWQiLCJsb2dpbkJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLW5vbmUiXSxbMSwiY2xyLWZvcm0tY29u'@;
put 'dHJvbCJdLFsiZm9yIiwic2VsZWN0LWZ1bGwiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbIm5hbWUiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJpZCIsImFkbWluR3JvdXBzU2VsZWN0IiwxLCJjbHIt'@;
put 'c2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm5hbWUiLCJzZWxlY3RlZENvbnRleHQiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9w'@;
put 'dGlvbnMiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsImNvbnRleHRzLWJ0biIsMSwiYnRuIiwiYnRuLWljb24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwiZC1mbGV4Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsIm1yLTEwIl0sWyJmb3IiLCJkY2xvYyIsMSwibXQt'@;
put 'MjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsibmFtZSIsImRjUGF0aCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJkY2xvYyIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwiZm9jdXNvdXQiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbMSwibXQtMTAiXSxbMSwiZC1mbGV4Iiwi'@;
put 'ZmxleC1jb2x1bW4iXSxbInR5cGUiLCJmaWxlIiwzLCJjbGljayIsImNoYW5nZSJdLFsxLCJtdC0yMCIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCIiLDEsIm10LTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1pY29uIG1p'@;
put 'bi13LTAgdy00MCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImlkIiwiZGVwbG95IiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsInZhbHVlIl0sWzEsImJ0biIsImJ0bi1zbSIs'@;
put 'ImJ0bi1pY29uIiwibWluLXctMCIsInctNDAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsIm1iLTAiLCJtdC0xMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTAiLCJtci0yMCIsMywiY2xpY2siXSxbImNsYXNzIiwibG9nLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwi'@;
put 'YnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsMywiY2xpY2siXSxbImNsYXNzIiwidmFsaWRhdGlvbi1iYXIiLDQsIm5nSWYiXSxbMSwibG9nLXdyYXBwZXIiXSxbMSwidmFsaWRhdGlvbi1iYXIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJpcy1lcnJvciJdLFsic2hhcGUi'@;
put 'LCJjaGVjay1jaXJjbGUiLDEsImlzLXN1Y2Nlc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApLE9lKDEsIiBDb25maWd1cmF0b3IgIiksZGUoMiwicCIsMSksT2UoMyksaGUoKSxkZSg0LCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gaC5kZWxldGVLZXlzKCl9KSxPZSg1LCIgQ2xlYXIgbWVtb3J5ICIpLGhlKCkoKSxkZSg2LCJkaXYiLDMpLGd0KDcsWEtlLDE1LDAsImRpdiIsNCkoOCxjWGUsNDksMjIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSksMiZkJiYoZmUoMyksTHIoIkFwcCBMb2NhdGlvbjogIixoLmFwcExvYywi'@;
put 'IiksZmUoNCksTWUoIm5nSWYiLGgubmVlZHNMb2dpbiksZmUoKSxNZSgibmdJZiIsIWgubmVlZHNMb2dpbikpfSxkZXBlbmRlbmNpZXM6W1FzLGJhLGw3LEQyLEkyLEdsLGsyLHRsLHM3LFdvLHdwLE9sLFYwLEgyLGNvLGlaXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0'@;
put 'aW9uIGRYZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMTUpLFd0KDEsInByb2dyZXNzIiksaGUoKSl9ZnVuY3Rpb24gaFhlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwxNiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5HUk9VUE5BTUUpLGZl'@;
put 'KCksQnUoIiAiLGEuR1JPVVBOQU1FLCIgLSAiLGEuR1JPVVBERVNDLCIgIil9fWxldCBmWGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zYXNqc1NlcnZpY2U9ZCx0aGlzLmxvY2F0aW9uPWgsdGhpcy5zYXNKc0NvbmZpZz1uZXcgeWgu'@;
put 'U0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLmRjRGlyZWN0b3J5PSIiLHRoaXMuZGNBZG1pbkdyb3VwPSJEQ0RFRkFVTFQiLHRoaXMuTUVUQVBFUlNPTj0ibi9hIix0aGlzLk1FVEFVU0VSPSJuL2EiLHRoaXMuU1lTVVNFUklEPSJuL2EiLHRoaXMuU1lTSE9T'@;
put 'VE5BTUU9Im4vYSIsdGhpcy5TWVNWTE9ORz0ibi9hIix0aGlzLmRjQWRtaW5Hcm91cExpc3Q9W10sdGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0xvZ291dD0hMSx0aGlzLnRtcERpcmVjdG9yaWVzPXtsaW51eDoiL3RtcC9EYXRhQ29udHJvbGxlciIsd2luZG93czoiQzpcXERhdGFDb250cm9s'@;
put 'bGVyIn19bmdPbkluaXQoKXt0aGlzLmdldFVzZXJHcm91cHMoKSx0aGlzLmdldFNlcnZlckluZm8oKX1nZXRTZXJ2ZXJJbmZvKCl7dGhpcy5zYXNqc1NlcnZpY2UuZ2V0U2VydmVySW5mbygpLnN1YnNjcmliZShhPT57ImRlc2t0b3AiIT09YS5tb2RlJiYodGhpcy5zaG93TG9nb3V0PSEwKX0p'@;
put 'fWdldFVzZXJHcm91cHMoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIixudWxsKS50aGVuKGE9Pnt0aGlzLk1FVEFQRVJTT049YS5hZGFwdGVyUmVzcG9uc2UuTUZfR0VUVVNFUix0aGlzLlNZU1VTRVJJRD1hLmFk'@;
put 'YXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsdGhpcy5TWVNIT1NUTkFNRT1hLmFkYXB0ZXJSZXNwb25zZS5TWVNIT1NUTkFNRSx0aGlzLlNZU1ZMT05HPWEuYWRhcHRlclJlc3BvbnNlLlNZU1ZMT05HLHRoaXMuZGNEaXJlY3Rvcnk9dGhpcy50bXBEaXJlY3Rvcmllc1tbIkwiLCJIIiwiQSIsIlMi'@;
put 'XS5pbmNsdWRlcyhhLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLnN1YnN0cmluZygwLDEpKT8ibGludXgiOiJ3aW5kb3dzIl0sdGhpcy5kY0FkbWluR3JvdXBMaXN0PWEuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLmRjQWRtaW5Hcm91cD10aGlzLmRjQWRtaW5Hcm91cExpc3RbMF0uR1JP'@;
put 'VVBOQU1FLHRoaXMubG9hZGluZz0hMX0sYT0+e3RoaXMubG9hZGluZz0hMX0pfW1ha2VEYXRhKCl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtjb25zdCBoPXRoaXMuc2FzSnNDb25maWcuYXBwTG9jO2xldCBmPXRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsLHY9'@;
put 'dGhpcy5kY0RpcmVjdG9yeTt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1OMC5ZLlNhc2pzP3RoaXMuc2FzU2VydmljZS5zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKS50aGVuKEk9PntJJiYodGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi8iKSxsb2NhdGlvbi5yZWxvYWQoKSl9KTp0'@;
put 'aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1OMC5ZLlNhczkmJihmPSIiLGQ9d2luZG93LmxvY2F0aW9uLm9yaWdpbitkKyIvIix2PWVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRjRGlyZWN0b3J5KSksd2luZG93Lm9wZW4oYCR7Znx8IiJ9JHtkfT9fcHJvZ3JhbT0ke2h9L3NlcnZpY2Vz'@;
put 'L2FkbWluL21ha2VkYXRhJmFkbWluPSR7dGhpcy5kY0FkbWluR3JvdXB9JnBhdGg9JHt2fSBgLCJfYmxhbmsiKX1sb2dvdXQoKXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoVm8pLCRlKEtjZSks'@;
put 'JGUocGgpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zYXNqcy1jb25maWd1cmF0b3IiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdz'@;
put 'In0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ0LHZhcnM6MTAsY29uc3RzOltbImNsYXNzIiwidGhpblByb2dyZXNzIHByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWzEs'@;
put 'ImxpZ2h0Il0sWzEsIm0tMCJdLFsxLCJtLTAiLCJtdC0xMCJdLFsxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJwbGFjZWhvbGRlciIsIlR5cGUgaW4gZGlyZWN0b3J5Iiwx'@;
put 'LCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsIm1iLTEwIiwibXQtMCIsInctNTB2dyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1mbGV4Il0sWzEs'@;
put 'ImJ0biIsImJ0bi1zdWNjZXNzIiwibXQtMTUiLCJ0ZXh0LWNlbnRlciIsMywiY2xpY2siXSxbMSwiY2FyZC10ZXh0IiwicGItMTAiXSxbMSwidGhpblByb2dyZXNzIiwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgp'@;
put 'ezEmZCYmKGd0KDAsZFhlLDIsMCwiZGl2IiwwKSxkZSgxLCJoNCIsMSksT2UoMiwiU2FzanMgRGVwbG95IiksaGUoKSxXdCgzLCJociIsMiksZGUoNCwicCIsMyksT2UoNSwiIFRvIGNvbmZpZ3VyZSBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTksIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xs'@;
put 'b3dpbmcgZGV0YWlsczpcbiIpLGhlKCksZGUoNiwicCIsNCksT2UoNywiIFBsZWFzZSBzcGVjaWZ5IGEgcGh5c2ljYWwgZGlyZWN0b3J5IChvbiB0aGUgIiksZGUoOCwic3Ryb25nIiksT2UoOSksaGUoKSxPZSgxMCwiIGNvbXB1dGUgc2VydmVyKSBiZWxvdywgdG8gd2hpY2ggdXNlciAiKSxk'@;
put 'ZSgxMSwic3Ryb25nIiksT2UoMTIpLGhlKCksT2UoMTMsIiBjYW4gd3JpdGUsIG9uIGJlaGFsZiBvZiBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDE0LCJsYWJlbCIsNSksT2UoMTUsIkRDIFN0YWdpbmcgRGlyZWN0b3J5IiksaGUoKSxkZSgxNiwiZGl2Iiw2KSgxNywiZGl2Iiw3KSgx'@;
put 'OCwiaW5wdXQiLDgpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZ2koaC5kY0RpcmVjdG9yeSx2KXx8KGguZGNEaXJlY3Rvcnk9diksdn0pLGhlKCkoKSgpLGRlKDE5LCJwIiw0KSxPZSgyMCwiIEJlbG93IGFyZSB0aGUgbGlzdCBvZiBncm91cHMgdG8gd2hpY2ggeW91'@;
put 'IGJlbG9uZy4gVGhlIGdyb3VwIHlvdSBzZWxlY3Qgd2lsbCBiZWNvbWUgdGhlIERhdGEgQ29udHJvbGxlciBBZG1pbiBHcm91cCwgYW5kIGV2ZXJ5b25lIGluIGl0IHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIERhdGEgQ29udHJvbGxlci5cbiIpLGhlKCksZGUoMjEsImxhYmVs'@;
put 'Iiw1KSxPZSgyMiwiRGF0YSBDb250cm9sbGVyIEFkbWluIGdyb3VwIiksaGUoKSxkZSgyMywiY2xyLXNlbGVjdC1jb250YWluZXIiLDkpKDI0LCJzZWxlY3QiLDEwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGdpKGguZGNBZG1pbkdyb3VwLHYpfHwoaC5kY0FkbWlu'@;
put 'R3JvdXA9diksdn0pLGd0KDI1LGhYZSwyLDMsIm9wdGlvbiIsMTEpLGhlKCkoKSxkZSgyNiwicCIsNCksT2UoMjcsIiBOb3csIGNyZWF0ZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZGVwbG95IHRoZSBjb250cm9sIGxpYnJhcnkgdXNpbmcgdGhlIGFkbWluIGdyb3VwIHNlbGVjdGVkIGFi'@;
put 'b3ZlOlxuIiksaGUoKSxkZSgyOCwiZGl2IiwxMikoMjksImJ1dHRvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5tYWtlRGF0YSgpfSksT2UoMzAsIiBTVUJNSVQgIiksaGUoKSgpLFd0KDMxLCJociIsMiksZGUoMzIsImRpdiIsMTQpKDMzLCJwIiksT2UoMzQsIllvdSBh'@;
put 'cmUgY29ubmVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoiKSxoZSgpLGRlKDM1LCJ1bCIpKDM2LCJsaSIpLE9lKDM3KSxoZSgpLGRlKDM4LCJsaSIpLE9lKDM5KSxoZSgpLGRlKDQwLCJsaSIpLE9lKDQxKSxoZSgpLGRlKDQyLCJsaSIpLE9lKDQzKSxoZSgpKCkoKSksMiZk'@;
put 'JiYoTWUoIm5nSWYiLGgubG9hZGluZyksZmUoOSksTHIoIiAiLGguU1lTSE9TVE5BTUUsIiIpLGZlKDMpLFNyKGguU1lTVVNFUklEKSxmZSg2KSxmaSgibmdNb2RlbCIsaC5kY0RpcmVjdG9yeSksZmUoNiksZmkoIm5nTW9kZWwiLGguZGNBZG1pbkdyb3VwKSxmZSgpLE1lKCJuZ0Zvck9mIixo'@;
put 'LmRjQWRtaW5Hcm91cExpc3QpLGZlKDEyKSxMcigiTUVUQVBFUlNPTjogIixoLk1FVEFQRVJTT04sIiIpLGZlKDIpLExyKCJTWVNVU0VSSUQ6ICIsaC5TWVNVU0VSSUQsIiIpLGZlKDIpLExyKCJTWVNIT1NUTkFNRTogIixoLlNZU0hPU1ROQU1FLCIiKSxmZSgyKSxMcigiU1lTVkxPTkc6ICIs'@;
put 'aC5TWVNWTE9ORywiIikpfSxkZXBlbmRlbmNpZXM6W1FzLGJhLEQyLEkyLEdsLGsyLHRsLFdvLGNvLEU3LFpiXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHBYZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxPZSgy'@;
put 'LCJUZXJtcyBhbmQgQ29uZGl0aW9ucyIpLGhlKCksZGUoMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsInAiLDgpLE9lKDYsIiBUaGUgRGVtbyB2ZXJzaW9uIG9mIERhdGEgQ29udHJvbGxlciBpcyBmcmVlIGZvciBFVkFMVUFUSU9OIHB1cnBvc2VzIG9ubHkuIEJlZm9yZSBwcm9jZWVkaW5nIHdp'@;
put 'dGggY29uZmlndXJhdGlvbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgYWdyZWVkIHRvIHRoZSAiKSxkZSg3LCJhIiw5KSxPZSg4LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxoZSgpLE9lKDks'@;
put 'Ii4gIiksaGUoKSgpLFd0KDEwLCJociIsMTApLGRlKDExLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEyLCJpbnB1dCIsMTEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTMsImxhYmVsIiksT2UoMTQs'@;
put 'IkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlICIpLGRlKDE1LCJhIiw5KSxPZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBnWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9'@;
put 'T24oKTtkZSgwLCJkaXYiLDE2KSgxLCJhcHAtYXV0b21hdGljLWRlcGxveSIsMTcpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLE1lKCJz'@;
put 'YXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpKCJhcHBMb2MiLGEuYXBwTG9jKSgiZGNQYXRoIixhLmRjUGF0aCkoInNlbGVjdGVkQWRtaW5Hcm91cCIsYS5zZWxlY3RlZEFkbWluR3JvdXAp'@;
put 'fX1mdW5jdGlvbiBtWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDE4KSgxLCJhcHAtbWFudWFsLWRlcGxveSIsMTkpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgp'@;
put 'fWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLE1lKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiB2WGUoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGdYZSwyLDYs'@;
put 'ImRpdiIsMTQpKDIsbVhlLDIsMywiZGl2IiwxNSksc2koKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoIm5nSWYiLGEuYXV0b2RlcGxveSksZmUoKSxNZSgibmdJZiIsIWEuYXV0b2RlcGxveSl9fWZ1bmN0aW9uIHlYZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2FpKDApLGRlKDEs'@;
put 'ImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxNZSgic2Fz'@;
put 'SnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gYlhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwiZGl2IiwxNikoMiwiYXBwLXNhc2pzLWNvbmZpZ3Vy'@;
put 'YXRvciIsMTkpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLE1lKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNh'@;
put 'c0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiBfWGUoYyxsKXtpZigxJmMmJihhaSgwLDEyKSxndCgxLHZYZSwzLDIsIm5nLWNvbnRhaW5lciIsMTMpKDIseVhlLDMsMywibmctY29udGFpbmVyIiwxMykoMyxiWGUsMywzLCJuZy1j'@;
put 'b250YWluZXIiLDEzKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtNZSgibmdTd2l0Y2giLCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcu'@;
put 'c2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCBjMmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmFwcFN0b3JlU2Vydmlj'@;
put 'ZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5zdGVwPTAsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmNsaWVudF9pZD0iIix0aGlzLmNsaWVudF9zZWNyZXQ9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5z'@;
put 'ZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5hdXRvZGVwbG95PSEwLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLnNhc0pzQ29uZmlnPW5ldyB5aC5TQVNqc0NvbmZpZyx0aGlzLlNlcnZlclR5cGU9TjAuWSx0aGlzLmRjQWRhcHRlclNldHRpbmdzPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERj'@;
put 'QWRhcHRlclNldHRpbmdzKCksdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJtYW51YWxkZXBsb3kiKSYmKHRoaXMuYXV0b2RlcGxveT0hMSksdGhpcy5zYXNKcz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNJbnN0YW5jZSgpLHRoaXMuc2FzSnNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNh'@;
put 'c2pzQ29uZmlnKCksdGhpcy5hcHBMb2M9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix0aGlzLmNsaWVudF9pZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2NsaWVudF9pZCIpfHwiIix0aGlzLmNsaWVudF9zZWNyZXQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxv'@;
put 'eV9zZWNyZXRfa2V5Iil8fCIiLHRoaXMuZGNQYXRoPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfZGNfbG9jIil8fCIifW5nT25Jbml0KCl7dGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1bHRzKCl7dGhpcy5kY1BhdGg9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8u'@;
put 'ZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hZG1pbkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSJTQVNBZG1pbmlzdHJhdG9ycyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0'@;
put 'aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRtaW5Hcm91cHMoKSx0aGlzLnN0ZXArK31nZXRBZG1pbkdyb3Vwcygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9NTAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBw'@;
put 'bGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ7dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmFkbWluR3JvdXBzPWQuaXRlbXMsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vw'@;
put 'c1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21lKCl7d2luZG93Lm9wZW4obG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdLCJfYmxhbmsiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShROCksJGUoVm8pLCRlKFNkKSwkZShMbykpfX1zdGF0'@;
put 'aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRlcGxveSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiY2xyLXJvdyJd'@;
put 'LFsiaWQiLCJUQ1MiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiY2FyZC10ZXh0Il0sWzEsIm10LTAiXSxbImhyZWYiLCJodHRwczovL2Rv'@;
put 'Y3MuZGF0YWNvbnRyb2xsZXIuaW8vZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxb'@;
put 'ImNsYXNzIiwiYXV0b2RlcGxveS1zZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxveS1zZWN0aW9uIiwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRj'@;
put 'QWRhcHRlclNldHRpbmdzIiwiYXBwTG9jIiwiZGNQYXRoIiwic2VsZWN0ZWRBZG1pbkdyb3VwIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiXV0sdGVtcGxhdGU6ZnVuY3Rp'@;
put 'b24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksZ3QoMixwWGUsMTcsMCwiZGl2IiwyKSxoZSgpLGd0KDMsX1hlLDQsNCwibmctY29udGFpbmVyIiwzKSxoZSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsMD09PWguc3RlcCksZmUoKSxNZSgibmdJZiIsaC5zdGVwPjApKX0s'@;
put 'ZGVwZW5kZW5jaWVzOltiYSx4MixkcCxjbyxJZCx4aCxLS2UsdVhlLGZYZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCB3WGU9W3twYXRoOiIiLGNvbXBvbmVudDpjMmV9LHtwYXRoOiJtYW51YWxkZXBsb3kiLGNvbXBvbmVudDpjMmV9XTtsZXQgQ1hlPSgoKT0+e2Ns'@;
put 'YXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltCYy5mb3JDaGlsZCh3WGUpLEJjXX0pfX1yZXR1cm4gY30pKCks'@;
put 'U1hlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxrYyxCMCxDWGVdfSl9fXJldHVybiBj'@;
put 'fSkoKTtiKDQ5NTM3KSxiKDc3NTI1KSxiKDU3NzIpLGIoNjk4NzUpLGIoMTYwOTMpLGIoOTU2MDgpLGIoMTY0OTMpLGIoNjE5MzQpLGIoMTAxMDEpLGIoMjY4ODkpLGIoNDMyODcpLGIoNjU3NDUpLGIoMjk3MDgpLGIoNjUxMTcpLGIoMTAzNjMpO2NvbnN0e2VudHJpZXM6dTJlLHNldFByb3Rv'@;
put 'dHlwZU9mOmQyZSxpc0Zyb3plbjpNWGUsZ2V0UHJvdG90eXBlT2Y6eFhlLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpFWGV9PU9iamVjdDtsZXR7ZnJlZXplOiQxLHNlYWw6VjIsY3JlYXRlOmgyZX09T2JqZWN0LHthcHBseTppJCxjb25zdHJ1Y3Q6YSR9PXR5cGVvZiBSZWZsZWN0PCJ1IiYm'@;
put 'UmVmbGVjdDskMXx8KCQxPWZ1bmN0aW9uKGwpe3JldHVybiBsfSksVjJ8fChWMj1mdW5jdGlvbihsKXtyZXR1cm4gbH0pLGkkfHwoaSQ9ZnVuY3Rpb24obCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9KSxhJHx8KGEkPWZ1bmN0aW9uKGwsYSl7cmV0dXJuIG5ldyBsKC4uLmEpfSk7Y29uc3Qg'@;
put 'SU89WDEoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLFRYZT1YMShBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpLGYyZT1YMShBcnJheS5wcm90b3R5cGUucG9wKSxoRT1YMShBcnJheS5wcm90b3R5cGUucHVzaCksQVhlPVgxKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLFJPPVgxKFN0cmlu'@;
put 'Zy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLHMkPVgxKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLHAyZT1YMShTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxmRT1YMShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLGtYZT1YMShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLERYZT1YMShTdHJp'@;
put 'bmcucHJvdG90eXBlLnRyaW0pLGEzPVgxKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLEsxPVgxKFJlZ0V4cC5wcm90b3R5cGUudGVzdCkscEU9ZnVuY3Rpb24gSVhlKGMpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwp'@;
put 'LGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBhJChjLGEpfX0oVHlwZUVycm9yKTtmdW5jdGlvbiBYMShjKXtyZXR1cm4gZnVuY3Rpb24obCl7bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGwubGFzdEluZGV4PTApO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFy'@;
put 'cmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtyZXR1cm4gaSQoYyxsLGQpfX1mdW5jdGlvbiB2byhjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpSTztkMmUmJmQyZShjLG51bGwpO2xl'@;
put 'dCBkPWwubGVuZ3RoO2Zvcig7ZC0tOyl7bGV0IGg9bFtkXTtpZigic3RyaW5nIj09dHlwZW9mIGgpe2NvbnN0IGY9YShoKTtmIT09aCYmKE1YZShsKXx8KGxbZF09ZiksaD1mKX1jW2hdPSEwfXJldHVybiBjfWZ1bmN0aW9uIFJYZShjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylhMyhj'@;
put 'LGwpfHwoY1tsXT1udWxsKTtyZXR1cm4gY31mdW5jdGlvbiBnZyhjKXtjb25zdCBsPWgyZShudWxsKTtmb3IoY29uc3RbYSxkXW9mIHUyZShjKSlhMyhjLGEpJiYobFthXT1BcnJheS5pc0FycmF5KGQpP1JYZShkKTpkJiYib2JqZWN0Ij09dHlwZW9mIGQmJmQuY29uc3RydWN0b3I9PT1PYmpl'@;
put 'Y3Q/Z2coZCk6ZCk7cmV0dXJuIGx9ZnVuY3Rpb24gZ0UoYyxsKXtmb3IoO251bGwhPT1jOyl7Y29uc3QgZD1FWGUoYyxsKTtpZihkKXtpZihkLmdldClyZXR1cm4gWDEoZC5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnZhbHVlKXJldHVybiBYMShkLnZhbHVlKX1jPXhYZShjKX1yZXR1'@;
put 'cm4gZnVuY3Rpb24gYSgpe3JldHVybiBudWxsfX1jb25zdCBnMmU9JDEoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1'@;
put 'dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJl'@;
put 'bGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQi'@;
put 'LCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAi'@;
put 'LCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIs'@;
put 'InRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLG8kPSQxKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmlt'@;
put 'YXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1h'@;
put 'c2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXci'@;
put 'LCJ2a2VybiJdKSxsJD0kMShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNo'@;
put 'YWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRp'@;
put 'bmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxMWGU9JDEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9u'@;
put 'dC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLGMkPSQxKFsibWF0'@;
put 'aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5'@;
put 'bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiLCJtcHJlc2NyaXB0cyJdKSxPWGU9JDEoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJt'@;
put 'c2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLG0yZT0kMShbIiN0ZXh0Il0pLHYyZT0kMShbImFjY2VwdCIsImFjdGlvbiIsImFsaWduIiwiYWx0'@;
put 'IiwiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29tcGxldGUiLCJhdXRvcGljdHVyZWlucGljdHVyZSIsImF1dG9wbGF5IiwiYmFja2dyb3VuZCIsImJnY29sb3IiLCJib3JkZXIiLCJjYXB0dXJlIiwiY2VsbHBhZGRpbmciLCJjZWxsc3BhY2luZyIsImNoZWNrZWQiLCJjaXRlIiwiY2xhc3MiLCJj'@;
put 'bGVhciIsImNvbG9yIiwiY29scyIsImNvbHNwYW4iLCJjb250cm9scyIsImNvbnRyb2xzbGlzdCIsImNvb3JkcyIsImNyb3Nzb3JpZ2luIiwiZGF0ZXRpbWUiLCJkZWNvZGluZyIsImRlZmF1bHQiLCJkaXIiLCJkaXNhYmxlZCIsImRpc2FibGVwaWN0dXJlaW5waWN0dXJlIiwiZGlzYWJsZXJl'@;
put 'bW90ZXBsYXliYWNrIiwiZG93bmxvYWQiLCJkcmFnZ2FibGUiLCJlbmN0eXBlIiwiZW50ZXJrZXloaW50IiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZsYW5nIiwiaWQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIs'@;
put 'ImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxlbmd0aCIsIm11bHRpcGxlIiwibXV0ZWQiLCJuYW1lIiwibm9uY2UiLCJub3NoYWRlIiwibm92YWxpZGF0ZSIsIm5v'@;
put 'd3JhcCIsIm9wZW4iLCJvcHRpbXVtIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicGxheXNpbmxpbmUiLCJwb3BvdmVyIiwicG9wb3ZlcnRhcmdldCIsInBvcG92ZXJ0YXJnZXRhY3Rpb24iLCJwb3N0ZXIiLCJwcmVsb2FkIiwicHViZGF0ZSIsInJhZGlvZ3JvdXAiLCJyZWFkb25seSIsInJl'@;
put 'bCIsInJlcXVpcmVkIiwicmV2IiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd3NwYW4iLCJzcGVsbGNoZWNrIiwic2NvcGUiLCJzZWxlY3RlZCIsInNoYXBlIiwic2l6ZSIsInNpemVzIiwic3BhbiIsInNyY2xhbmciLCJzdGFydCIsInNyYyIsInNyY3NldCIsInN0ZXAiLCJzdHlsZSIs'@;
put 'InN1bW1hcnkiLCJ0YWJpbmRleCIsInRpdGxlIiwidHJhbnNsYXRlIiwidHlwZSIsInVzZW1hcCIsInZhbGlnbiIsInZhbHVlIiwid2lkdGgiLCJ3cmFwIiwieG1sbnMiLCJzbG90Il0pLHUkPSQxKFsiYWNjZW50LWhlaWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdubWVudC1i'@;
put 'YXNlbGluZSIsImFtcGxpdHVkZSIsImFzY2VudCIsImF0dHJpYnV0ZW5hbWUiLCJhdHRyaWJ1dGV0eXBlIiwiYXppbXV0aCIsImJhc2VmcmVxdWVuY3kiLCJiYXNlbGluZS1zaGlmdCIsImJlZ2luIiwiYmlhcyIsImJ5IiwiY2xhc3MiLCJjbGlwIiwiY2xpcHBhdGh1bml0cyIsImNsaXAtcGF0'@;
put 'aCIsImNsaXAtcnVsZSIsImNvbG9yIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXByb2ZpbGUiLCJjb2xvci1yZW5kZXJpbmciLCJjeCIsImN5IiwiZCIsImR4IiwiZHkiLCJkaWZmdXNlY29uc3RhbnQiLCJkaXJlY3Rpb24iLCJk'@;
put 'aXNwbGF5IiwiZGl2aXNvciIsImR1ciIsImVkZ2Vtb2RlIiwiZWxldmF0aW9uIiwiZW5kIiwiZXhwb25lbnQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIs'@;
put 'ImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9y'@;
put 'bSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiaW50ZXJjZXB0IiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXIt'@;
put 'c3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1'@;
put 'bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBh'@;
put 'aW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIs'@;
put 'InJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic2xvcGUiLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1l'@;
put 'dGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJs'@;
put 'aW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFibGV2YWx1ZXMiLCJ0YXJnZXR4IiwidGFyZ2V0eSIsInRyYW5zZm9ybSIsInRyYW5zZm9ybS1vcmlnaW4iLCJ0'@;
put 'ZXh0LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVyc2lvbiIsInZlcnQtYWR2LXkiLCJ2ZXJ0LW9yaWdpbi14IiwidmVydC1v'@;
put 'cmlnaW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9kZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIsInkyIiwieiIsInpvb21hbmRwYW4iXSkseTJlPSQxKFsiYWNjZW50Iiwi'@;
put 'YWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVp'@;
put 'Z2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3Rh'@;
put 'dGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwi'@;
put 'c2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLExPPSQxKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsi'@;
put 'XSksUFhlPVYyKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksRlhlPVYyKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxIWGU9VjIoL1wkXHtbXHdcV10qL2dtKSxOWGU9VjIoL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdKyQvKSxWWGU9VjIoL15hcmlhLVtcLVx3XSskLyksYjJlPVYy'@;
put 'KC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcHxtYXRyaXgpOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSxCWGU9VjIoL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLGpYZT1WMigvW1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2'@;
put 'ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxfMmU9VjIoL15odG1sJC9pKSx6WGU9VjIoL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpO3ZhciB3MmU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQVJJQV9BVFRSOlZYZSxBVFRSX1dISVRFU1BBQ0U6alhlLENV'@;
put 'U1RPTV9FTEVNRU5UOnpYZSxEQVRBX0FUVFI6TlhlLERPQ1RZUEVfTkFNRTpfMmUsRVJCX0VYUFI6RlhlLElTX0FMTE9XRURfVVJJOmIyZSxJU19TQ1JJUFRfT1JfREFUQTpCWGUsTVVTVEFDSEVfRVhQUjpQWGUsVE1QTElUX0VYUFI6SFhlfSk7dmFyIFdYZT1mdW5jdGlvbiBTMmUoKXtsZXQg'@;
put 'Yz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3c7Y29uc3QgbD1scz0+UzJlKGxzKTtpZihsLnZlcnNpb249IjMuMi42IixsLnJlbW92ZWQ9W10sIWN8fCFjLmRvY3VtZW50fHw5IT09Yy5k'@;
put 'b2N1bWVudC5ub2RlVHlwZXx8IWMuRWxlbWVudClyZXR1cm4gbC5pc1N1cHBvcnRlZD0hMSxsO2xldHtkb2N1bWVudDphfT1jO2NvbnN0IGQ9YSxoPWQuY3VycmVudFNjcmlwdCx7RG9jdW1lbnRGcmFnbWVudDpmLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6dixOb2RlOk0sRWxlbWVudDpJLE5vZGVG'@;
put 'aWx0ZXI6RyxOYW1lZE5vZGVNYXA6cmU9Yy5OYW1lZE5vZGVNYXB8fGMuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDp1ZSxET01QYXJzZXI6eWUsdHJ1c3RlZFR5cGVzOkVlfT1jLEJlPUkucHJvdG90eXBlLEdlPWdFKEJlLCJjbG9uZU5vZGUiKSxzdD1nRShCZSwicmVtb3ZlIiks'@;
put 'cHQ9Z0UoQmUsIm5leHRTaWJsaW5nIiksZHQ9Z0UoQmUsImNoaWxkTm9kZXMiKSxxdD1nRShCZSwicGFyZW50Tm9kZSIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB2KXtjb25zdCBscz1hLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7bHMuY29udGVudCYmbHMuY29udGVudC5vd25lckRvY3Vt'@;
put 'ZW50JiYoYT1scy5jb250ZW50Lm93bmVyRG9jdW1lbnQpfWxldCBtbix3bj0iIjtjb25zdHtpbXBsZW1lbnRhdGlvbjpobixjcmVhdGVOb2RlSXRlcmF0b3I6TW4sY3JlYXRlRG9jdW1lbnRGcmFnbWVudDpNcixnZXRFbGVtZW50c0J5VGFnTmFtZTprcn09YSx7aW1wb3J0Tm9kZTpxbn09ZDts'@;
put 'ZXQgZ3I9e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltd'@;
put 'LHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119O2wuaXNTdXBwb3J0ZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIHUyZSYmImZ1bmN0aW9uIj09dHlwZW9mIHF0JiZobiYmdm9pZCAwIT09aG4uY3JlYXRlSFRNTERv'@;
put 'Y3VtZW50O2NvbnN0e01VU1RBQ0hFX0VYUFI6cXIsRVJCX0VYUFI6X2ksVE1QTElUX0VYUFI6UG4sREFUQV9BVFRSOlVyLEFSSUFfQVRUUjp0cixJU19TQ1JJUFRfT1JfREFUQTpCcixBVFRSX1dISVRFU1BBQ0U6WXIsQ1VTVE9NX0VMRU1FTlQ6d2l9PXcyZTtsZXR7SVNfQUxMT1dFRF9VUkk6'@;
put 'Qml9PXcyZSxoYT1udWxsO2NvbnN0IG1hPXZvKHt9LFsuLi5nMmUsLi4ubyQsLi4ubCQsLi4uYyQsLi4ubTJlXSk7bGV0IHZ0PW51bGw7Y29uc3QgeHQ9dm8oe30sWy4uLnYyZSwuLi51JCwuLi55MmUsLi4uTE9dKTtsZXQgJHQ9T2JqZWN0LnNlYWwoaDJlKG51bGwse3RhZ05hbWVDaGVjazp7'@;
put 'd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxZbj1udWxsLCRuPW51bGwsYXI9ITAsR3I9ITAsR3Q9ITEsYm49ITAseG49ITEsSW49ITAsWG49ITEsTm49ITEsdnI9ITEsV249ITEsZnI9ITEsRHI9ITEsT3I9ITAsdWk9ITEsWmk9ITAsRHM9ITEsdW89'@;
put 'e30sV3M9bnVsbDtjb25zdCBTcz12byh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3Jp'@;
put 'cHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pO2xldCBNcz1udWxsO2NvbnN0IGZvPXZvKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSk7bGV0IHgw'@;
put 'PW51bGw7Y29uc3QgWWg9dm8oe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSxRZD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9N'@;
put 'YXRoL01hdGhNTCIsRGM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0Yz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7bGV0ICRvPXRjLCRsPSExLGtvPW51bGw7Y29uc3Qgb2Q9dm8oe30sW1FkLERjLHRjXSxzJCk7bGV0IHRzPXZvKHt9LFsibWkiLCJtbyIsIm1uIiwibXMi'@;
put 'LCJtdGV4dCJdKSxxZz12byh7fSxbImFubm90YXRpb24teG1sIl0pO2NvbnN0IFJ3PXZvKHt9LFsidGl0bGUiLCJzdHlsZSIsImZvbnQiLCJhIiwic2NyaXB0Il0pO2xldCBydj1udWxsO2NvbnN0IEp0ZT1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdO2xldCBKdT1udWxs'@;
put 'LE02PW51bGw7Y29uc3QgekE9YS5jcmVhdGVFbGVtZW50KCJmb3JtIiksWXQ9ZnVuY3Rpb24obXIpe3JldHVybiBtciBpbnN0YW5jZW9mIFJlZ0V4cHx8bXIgaW5zdGFuY2VvZiBGdW5jdGlvbn0sRTE9ZnVuY3Rpb24oKXtsZXQgbXI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKCFNNnx8TTYhPT1tcil7aWYoKCFtcnx8Im9iamVjdCIhPXR5cGVvZiBtcikmJihtcj17fSksbXI9Z2cobXIpLHJ2PS0xPT09SnRlLmluZGV4T2YobXIuUEFSU0VSX01FRElBX1RZUEUpPyJ0ZXh0L2h0bWwiOm1yLlBBUlNFUl9NRURJQV9UWVBF'@;
put 'LEp1PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09cnY/cyQ6Uk8saGE9YTMobXIsIkFMTE9XRURfVEFHUyIpP3ZvKHt9LG1yLkFMTE9XRURfVEFHUyxKdSk6bWEsdnQ9YTMobXIsIkFMTE9XRURfQVRUUiIpP3ZvKHt9LG1yLkFMTE9XRURfQVRUUixKdSk6eHQsa289YTMobXIsIkFMTE9XRURf'@;
put 'TkFNRVNQQUNFUyIpP3ZvKHt9LG1yLkFMTE9XRURfTkFNRVNQQUNFUyxzJCk6b2QseDA9YTMobXIsIkFERF9VUklfU0FGRV9BVFRSIik/dm8oZ2coWWgpLG1yLkFERF9VUklfU0FGRV9BVFRSLEp1KTpZaCxNcz1hMyhtciwiQUREX0RBVEFfVVJJX1RBR1MiKT92byhnZyhmbyksbXIuQUREX0RB'@;
put 'VEFfVVJJX1RBR1MsSnUpOmZvLFdzPWEzKG1yLCJGT1JCSURfQ09OVEVOVFMiKT92byh7fSxtci5GT1JCSURfQ09OVEVOVFMsSnUpOlNzLFluPWEzKG1yLCJGT1JCSURfVEFHUyIpP3ZvKHt9LG1yLkZPUkJJRF9UQUdTLEp1KTpnZyh7fSksJG49YTMobXIsIkZPUkJJRF9BVFRSIik/dm8oe30s'@;
put 'bXIuRk9SQklEX0FUVFIsSnUpOmdnKHt9KSx1bz0hIWEzKG1yLCJVU0VfUFJPRklMRVMiKSYmbXIuVVNFX1BST0ZJTEVTLGFyPSExIT09bXIuQUxMT1dfQVJJQV9BVFRSLEdyPSExIT09bXIuQUxMT1dfREFUQV9BVFRSLEd0PW1yLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSxibj0hMSE9'@;
put 'PW1yLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUix4bj1tci5TQUZFX0ZPUl9URU1QTEFURVN8fCExLEluPSExIT09bXIuU0FGRV9GT1JfWE1MLFhuPW1yLldIT0xFX0RPQ1VNRU5UfHwhMSxXbj1tci5SRVRVUk5fRE9NfHwhMSxmcj1tci5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxEcj1tci5S'@;
put 'RVRVUk5fVFJVU1RFRF9UWVBFfHwhMSx2cj1tci5GT1JDRV9CT0RZfHwhMSxPcj0hMSE9PW1yLlNBTklUSVpFX0RPTSx1aT1tci5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsWmk9ITEhPT1tci5LRUVQX0NPTlRFTlQsRHM9bXIuSU5fUExBQ0V8fCExLEJpPW1yLkFMTE9XRURfVVJJX1JFR0VY'@;
put 'UHx8YjJlLCRvPW1yLk5BTUVTUEFDRXx8dGMsdHM9bXIuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTfHx0cyxxZz1tci5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UU3x8cWcsJHQ9bXIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LG1yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZZ'@;
put 'dChtci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoJHQudGFnTmFtZUNoZWNrPW1yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksbXIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJll0KG1yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJp'@;
put 'YnV0ZU5hbWVDaGVjaykmJigkdC5hdHRyaWJ1dGVOYW1lQ2hlY2s9bXIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxtci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmImJvb2xlYW4iPT10eXBlb2YgbXIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dD'@;
put 'dXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoJHQuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPW1yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cykseG4mJihHcj0hMSksZnImJihXbj0hMCksdW8mJihoYT12byh7fSxtMmUpLHZ0'@;
put 'PVtdLCEwPT09dW8uaHRtbCYmKHZvKGhhLGcyZSksdm8odnQsdjJlKSksITA9PT11by5zdmcmJih2byhoYSxvJCksdm8odnQsdSQpLHZvKHZ0LExPKSksITA9PT11by5zdmdGaWx0ZXJzJiYodm8oaGEsbCQpLHZvKHZ0LHUkKSx2byh2dCxMTykpLCEwPT09dW8ubWF0aE1sJiYodm8oaGEsYyQp'@;
put 'LHZvKHZ0LHkyZSksdm8odnQsTE8pKSksbXIuQUREX1RBR1MmJihoYT09PW1hJiYoaGE9Z2coaGEpKSx2byhoYSxtci5BRERfVEFHUyxKdSkpLG1yLkFERF9BVFRSJiYodnQ9PT14dCYmKHZ0PWdnKHZ0KSksdm8odnQsbXIuQUREX0FUVFIsSnUpKSxtci5BRERfVVJJX1NBRkVfQVRUUiYmdm8o'@;
put 'eDAsbXIuQUREX1VSSV9TQUZFX0FUVFIsSnUpLG1yLkZPUkJJRF9DT05URU5UUyYmKFdzPT09U3MmJihXcz1nZyhXcykpLHZvKFdzLG1yLkZPUkJJRF9DT05URU5UUyxKdSkpLFppJiYoaGFbIiN0ZXh0Il09ITApLFhuJiZ2byhoYSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxoYS50YWJsZSYm'@;
put 'KHZvKGhhLFsidGJvZHkiXSksZGVsZXRlIFluLnRib2R5KSxtci5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG1yLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwpdGhyb3cgcEUoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0'@;
put 'aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwpdGhyb3cgcEUoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlk'@;
put 'ZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7bW49bXIuVFJVU1RFRF9UWVBFU19QT0xJQ1ksd249bW4uY3JlYXRlSFRNTCgiIil9ZWxzZSB2b2lkIDA9PT1tbiYmKG1uPWZ1bmN0aW9uKGwsYSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5jcmVhdGVQ'@;
put 'b2xpY3kpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtjb25zdCBoPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO2EmJmEuaGFzQXR0cmlidXRlKGgpJiYoZD1hLmdldEF0dHJpYnV0ZShoKSk7Y29uc3QgZj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBsLmNyZWF0ZVBvbGljeShm'@;
put 'LHtjcmVhdGVIVE1MOnY9PnYsY3JlYXRlU2NyaXB0VVJMOnY9PnZ9KX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJuKCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrZisiIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiIpLG51bGx9fShFZSxoKSksbnVsbCE9PW1uJiYic3RyaW5nIj09dHlwZW9mIHduJiYo'@;
put 'd249bW4uY3JlYXRlSFRNTCgiIikpOyQxJiYkMShtciksTTY9bXJ9fSxnbD12byh7fSxbLi4ubyQsLi4ubCQsLi4uTFhlXSksS049dm8oe30sWy4uLmMkLC4uLk9YZV0pLFowPWZ1bmN0aW9uKG1yKXtoRShsLnJlbW92ZWQse2VsZW1lbnQ6bXJ9KTt0cnl7cXQobXIpLnJlbW92ZUNoaWxkKG1y'@;
put 'KX1jYXRjaHtzdChtcil9fSx4Nj1mdW5jdGlvbihtcixlYSl7dHJ5e2hFKGwucmVtb3ZlZCx7YXR0cmlidXRlOmVhLmdldEF0dHJpYnV0ZU5vZGUobXIpLGZyb206ZWF9KX1jYXRjaHtoRShsLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206ZWF9KX1pZihlYS5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'bXIpLCJpcyI9PT1tcilpZihXbnx8ZnIpdHJ5e1owKGVhKX1jYXRjaHt9ZWxzZSB0cnl7ZWEuc2V0QXR0cmlidXRlKG1yLCIiKX1jYXRjaHt9fSxYTj1mdW5jdGlvbihtcil7bGV0IGVhPW51bGwsemE9bnVsbDtpZih2ciltcj0iPHJlbW92ZT48L3JlbW92ZT4iK21yO2Vsc2V7Y29uc3Qga3U9'@;
put 'cDJlKG1yLC9eW1xyXG5cdCBdKy8pO3phPWt1JiZrdVswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PXJ2JiYkbz09PXRjJiYobXI9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JyttcisiPC9ib2R5PjwvaHRtbD4iKTtj'@;
put 'b25zdCB1Yz1tbj9tbi5jcmVhdGVIVE1MKG1yKTptcjtpZigkbz09PXRjKXRyeXtlYT0obmV3IHllKS5wYXJzZUZyb21TdHJpbmcodWMscnYpfWNhdGNoe31pZighZWF8fCFlYS5kb2N1bWVudEVsZW1lbnQpe2VhPWhuLmNyZWF0ZURvY3VtZW50KCRvLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e2Vh'@;
put 'LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9JGw/d246dWN9Y2F0Y2h7fX1jb25zdCBFMD1lYS5ib2R5fHxlYS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIG1yJiZ6YSYmRTAuaW5zZXJ0QmVmb3JlKGEuY3JlYXRlVGV4dE5vZGUoemEpLEUwLmNoaWxkTm9kZXNbMF18fG51bGwpLCRvPT09dGM/'@;
put 'a3IuY2FsbChlYSxYbj8iaHRtbCI6ImJvZHkiKVswXTpYbj9lYS5kb2N1bWVudEVsZW1lbnQ6RTB9LHFOPWZ1bmN0aW9uKG1yKXtyZXR1cm4gTW4uY2FsbChtci5vd25lckRvY3VtZW50fHxtcixtcixHLlNIT1dfRUxFTUVOVHxHLlNIT1dfQ09NTUVOVHxHLlNIT1dfVEVYVHxHLlNIT1dfUFJP'@;
put 'Q0VTU0lOR19JTlNUUlVDVElPTnxHLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sVUE9ZnVuY3Rpb24obXIpe3JldHVybiBtciBpbnN0YW5jZW9mIHVlJiYoInN0cmluZyIhPXR5cGVvZiBtci5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiBtci50ZXh0Q29udGVudHx8ImZ1bmN0aW9uIiE9'@;
put 'dHlwZW9mIG1yLnJlbW92ZUNoaWxkfHwhKG1yLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiByZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBtci5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBtci5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgbXIubmFtZXNwYWNlVVJJfHwi'@;
put 'ZnVuY3Rpb24iIT10eXBlb2YgbXIuaW5zZXJ0QmVmb3JlfHwiZnVuY3Rpb24iIT10eXBlb2YgbXIuaGFzQ2hpbGROb2Rlcyl9LEpOPWZ1bmN0aW9uKG1yKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTSYmbXIgaW5zdGFuY2VvZiBNfTtmdW5jdGlvbiBUMShscyxtcixlYSl7SU8obHMsemE9'@;
put 'Pnt6YS5jYWxsKGwsbXIsZWEsTTYpfSl9Y29uc3QgUU49ZnVuY3Rpb24obXIpe2xldCBlYT1udWxsO2lmKFQxKGdyLmJlZm9yZVNhbml0aXplRWxlbWVudHMsbXIsbnVsbCksVUEobXIpKXJldHVybiBaMChtciksITA7Y29uc3QgemE9SnUobXIubm9kZU5hbWUpO2lmKFQxKGdyLnVwb25TYW5p'@;
put 'dGl6ZUVsZW1lbnQsbXIse3RhZ05hbWU6emEsYWxsb3dlZFRhZ3M6aGF9KSxJbiYmbXIuaGFzQ2hpbGROb2RlcygpJiYhSk4obXIuZmlyc3RFbGVtZW50Q2hpbGQpJiZLMSgvPFsvXHchXS9nLG1yLmlubmVySFRNTCkmJksxKC88Wy9cdyFdL2csbXIudGV4dENvbnRlbnQpfHw3PT09bXIubm9k'@;
put 'ZVR5cGV8fEluJiY4PT09bXIubm9kZVR5cGUmJksxKC88Wy9cd10vZyxtci5kYXRhKSlyZXR1cm4gWjAobXIpLCEwO2lmKCFoYVt6YV18fFluW3phXSl7aWYoIVluW3phXSYmdFYoemEpJiYoJHQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZLMSgkdC50YWdOYW1lQ2hlY2ssemEp'@;
put 'fHwkdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmJHQudGFnTmFtZUNoZWNrKHphKSkpcmV0dXJuITE7aWYoWmkmJiFXc1t6YV0pe2NvbnN0IHVjPXF0KG1yKXx8bXIucGFyZW50Tm9kZSxFMD1kdChtcil8fG1yLmNoaWxkTm9kZXM7aWYoRTAmJnVjKWZvcihsZXQgQTE9RTAu'@;
put 'bGVuZ3RoLTE7QTE+PTA7LS1BMSl7Y29uc3QgVDM9R2UoRTBbQTFdLCEwKTtUMy5fX3JlbW92YWxDb3VudD0obXIuX19yZW1vdmFsQ291bnR8fDApKzEsdWMuaW5zZXJ0QmVmb3JlKFQzLHB0KG1yKSl9fXJldHVybiBaMChtciksITB9cmV0dXJuIG1yIGluc3RhbmNlb2YgSSYmIWZ1bmN0aW9u'@;
put 'KG1yKXtsZXQgZWE9cXQobXIpOyghZWF8fCFlYS50YWdOYW1lKSYmKGVhPXtuYW1lc3BhY2VVUkk6JG8sdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgemE9Uk8obXIudGFnTmFtZSksdWM9Uk8oZWEudGFnTmFtZSk7cmV0dXJuISFrb1ttci5uYW1lc3BhY2VVUkldJiYobXIubmFtZXNwYWNl'@;
put 'VVJJPT09RGM/ZWEubmFtZXNwYWNlVVJJPT09dGM/InN2ZyI9PT16YTplYS5uYW1lc3BhY2VVUkk9PT1RZD8ic3ZnIj09PXphJiYoImFubm90YXRpb24teG1sIj09PXVjfHx0c1t1Y10pOiEhZ2xbemFdOm1yLm5hbWVzcGFjZVVSST09PVFkP2VhLm5hbWVzcGFjZVVSST09PXRjPyJtYXRoIj09'@;
put 'PXphOmVhLm5hbWVzcGFjZVVSST09PURjPyJtYXRoIj09PXphJiZxZ1t1Y106ISFLTlt6YV06bXIubmFtZXNwYWNlVVJJPT09dGM/IShlYS5uYW1lc3BhY2VVUkk9PT1EYyYmIXFnW3VjXXx8ZWEubmFtZXNwYWNlVVJJPT09UWQmJiF0c1t1Y10pJiYhS05bemFdJiYoUndbemFdfHwhZ2xbemFd'@;
put 'KTohKCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIT09cnZ8fCFrb1ttci5uYW1lc3BhY2VVUkldKSl9KG1yKXx8KCJub3NjcmlwdCI9PT16YXx8Im5vZW1iZWQiPT09emF8fCJub2ZyYW1lcyI9PT16YSkmJksxKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLG1yLmlubmVySFRNTCk/KFow'@;
put 'KG1yKSwhMCk6KHhuJiYzPT09bXIubm9kZVR5cGUmJihlYT1tci50ZXh0Q29udGVudCxJTyhbcXIsX2ksUG5dLHVjPT57ZWE9ZkUoZWEsdWMsIiAiKX0pLG1yLnRleHRDb250ZW50IT09ZWEmJihoRShsLnJlbW92ZWQse2VsZW1lbnQ6bXIuY2xvbmVOb2RlKCl9KSxtci50ZXh0Q29udGVudD1l'@;
put 'YSkpLFQxKGdyLmFmdGVyU2FuaXRpemVFbGVtZW50cyxtcixudWxsKSwhMSl9LGVWPWZ1bmN0aW9uKG1yLGVhLHphKXtpZihPciYmKCJpZCI9PT1lYXx8Im5hbWUiPT09ZWEpJiYoemEgaW4gYXx8emEgaW4gekEpKXJldHVybiExO2lmKCghR3J8fCRuW2VhXXx8IUsxKFVyLGVhKSkmJighYXJ8'@;
put 'fCFLMSh0cixlYSkpKWlmKCF2dFtlYV18fCRuW2VhXSl7aWYoISh0VihtcikmJigkdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJksxKCR0LnRhZ05hbWVDaGVjayxtcil8fCR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiYkdC50YWdOYW1lQ2hlY2sobXIpKSYm'@;
put 'KCR0LmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmSzEoJHQuYXR0cmlidXRlTmFtZUNoZWNrLGVhKXx8JHQuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJiR0LmF0dHJpYnV0ZU5hbWVDaGVjayhlYSkpfHwiaXMiPT09ZWEmJiR0LmFsbG93Q3Vz'@;
put 'dG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKCR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmSzEoJHQudGFnTmFtZUNoZWNrLHphKXx8JHQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJiR0LnRhZ05hbWVDaGVjayh6YSkpKSlyZXR1cm4hMX1lbHNlIGlmKCF4MFtl'@;
put 'YV0mJiFLMShCaSxmRSh6YSxZciwiIikpJiYoInNyYyIhPT1lYSYmInhsaW5rOmhyZWYiIT09ZWEmJiJocmVmIiE9PWVhfHwic2NyaXB0Ij09PW1yfHwwIT09a1hlKHphLCJkYXRhOiIpfHwhTXNbbXJdKSYmKCFHdHx8SzEoQnIsZkUoemEsWXIsIiIpKSkmJnphKXJldHVybiExO3JldHVybiEw'@;
put 'fSx0Vj1mdW5jdGlvbihtcil7cmV0dXJuImFubm90YXRpb24teG1sIiE9PW1yJiZwMmUobXIsd2kpfSxuVj1mdW5jdGlvbihtcil7VDEoZ3IuYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzLG1yLG51bGwpO2NvbnN0e2F0dHJpYnV0ZXM6ZWF9PW1yO2lmKCFlYXx8VUEobXIpKXJldHVybjtjb25z'@;
put 'dCB6YT17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOnZ0LGZvcmNlS2VlcEF0dHI6dm9pZCAwfTtsZXQgdWM9ZWEubGVuZ3RoO2Zvcig7dWMtLTspe2NvbnN0IEUwPWVhW3VjXSx7bmFtZTprdSxuYW1lc3BhY2VVUkk6QTEsdmFsdWU6VDN9'@;
put 'PUUwLEU2PUp1KGt1KSxaQT1UMztsZXQgVDA9InZhbHVlIj09PWt1P1pBOkRYZShaQSk7aWYoemEuYXR0ck5hbWU9RTYsemEuYXR0clZhbHVlPVQwLHphLmtlZXBBdHRyPSEwLHphLmZvcmNlS2VlcEF0dHI9dm9pZCAwLFQxKGdyLnVwb25TYW5pdGl6ZUF0dHJpYnV0ZSxtcix6YSksVDA9emEu'@;
put 'YXR0clZhbHVlLHVpJiYoImlkIj09PUU2fHwibmFtZSI9PT1FNikmJih4NihrdSxtciksVDA9InVzZXItY29udGVudC0iK1QwKSxJbiYmSzEoLygoLS0hP3xdKT4pfDxcLyhzdHlsZXx0aXRsZSkvaSxUMCkpe3g2KGt1LG1yKTtjb250aW51ZX1pZih6YS5mb3JjZUtlZXBBdHRyKWNvbnRpbnVl'@;
put 'O2lmKCF6YS5rZWVwQXR0cil7eDYoa3UsbXIpO2NvbnRpbnVlfWlmKCFibiYmSzEoL1wvPi9pLFQwKSl7eDYoa3UsbXIpO2NvbnRpbnVlfXhuJiZJTyhbcXIsX2ksUG5dLE93PT57VDA9ZkUoVDAsT3csIiAiKX0pO2NvbnN0IHJWPUp1KG1yLm5vZGVOYW1lKTtpZihlVihyVixFNixUMCkpe2lm'@;
put 'KG1uJiYib2JqZWN0Ij09dHlwZW9mIEVlJiYiZnVuY3Rpb24iPT10eXBlb2YgRWUuZ2V0QXR0cmlidXRlVHlwZSYmIUExKXN3aXRjaChFZS5nZXRBdHRyaWJ1dGVUeXBlKHJWLEU2KSl7Y2FzZSJUcnVzdGVkSFRNTCI6VDA9bW4uY3JlYXRlSFRNTChUMCk7YnJlYWs7Y2FzZSJUcnVzdGVkU2Ny'@;
put 'aXB0VVJMIjpUMD1tbi5jcmVhdGVTY3JpcHRVUkwoVDApfWlmKFQwIT09WkEpdHJ5e0ExP21yLnNldEF0dHJpYnV0ZU5TKEExLGt1LFQwKTptci5zZXRBdHRyaWJ1dGUoa3UsVDApLFVBKG1yKT9aMChtcik6ZjJlKGwucmVtb3ZlZCl9Y2F0Y2h7eDYoa3UsbXIpfX1lbHNlIHg2KGt1LG1yKX1U'@;
put 'MShnci5hZnRlclNhbml0aXplQXR0cmlidXRlcyxtcixudWxsKX0sZW5lPWZ1bmN0aW9uIGxzKG1yKXtsZXQgZWE9bnVsbDtjb25zdCB6YT1xTihtcik7Zm9yKFQxKGdyLmJlZm9yZVNhbml0aXplU2hhZG93RE9NLG1yLG51bGwpO2VhPXphLm5leHROb2RlKCk7KVQxKGdyLnVwb25TYW5pdGl6'@;
put 'ZVNoYWRvd05vZGUsZWEsbnVsbCksUU4oZWEpLG5WKGVhKSxlYS5jb250ZW50IGluc3RhbmNlb2YgZiYmbHMoZWEuY29udGVudCk7VDEoZ3IuYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSxtcixudWxsKX07cmV0dXJuIGwuc2FuaXRpemU9ZnVuY3Rpb24obHMpe2xldCBtcj1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZWE9bnVsbCx6YT1udWxsLHVjPW51bGwsRTA9bnVsbDtpZigkbD0hbHMsJGwmJihscz0iXHgzYyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIGxzJiYhSk4obHMpKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbHMu'@;
put 'dG9TdHJpbmcpdGhyb3cgcEUoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZihscz1scy50b1N0cmluZygpKSl0aHJvdyBwRSgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFsLmlzU3VwcG9ydGVkKXJldHVybiBscztpZihObnx8'@;
put 'RTEobXIpLGwucmVtb3ZlZD1bXSwic3RyaW5nIj09dHlwZW9mIGxzJiYoRHM9ITEpLERzKXtpZihscy5ub2RlTmFtZSl7Y29uc3QgVDM9SnUobHMubm9kZU5hbWUpO2lmKCFoYVtUM118fFluW1QzXSl0aHJvdyBwRSgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0'@;
put 'aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKGxzIGluc3RhbmNlb2YgTSllYT1YTigiXHgzYyEtLS0tXHgzZSIpLHphPWVhLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShscywhMCksMT09PXphLm5vZGVUeXBlJiYiQk9EWSI9PT16YS5ub2RlTmFtZXx8IkhUTUwiPT09emEubm9kZU5hbWU/ZWE9'@;
put 'emE6ZWEuYXBwZW5kQ2hpbGQoemEpO2Vsc2V7aWYoIVduJiYheG4mJiFYbiYmLTE9PT1scy5pbmRleE9mKCI8IikpcmV0dXJuIG1uJiZEcj9tbi5jcmVhdGVIVE1MKGxzKTpscztpZihlYT1YTihscyksIWVhKXJldHVybiBXbj9udWxsOkRyP3duOiIifWVhJiZ2ciYmWjAoZWEuZmlyc3RDaGls'@;
put 'ZCk7Y29uc3Qga3U9cU4oRHM/bHM6ZWEpO2Zvcig7dWM9a3UubmV4dE5vZGUoKTspUU4odWMpLG5WKHVjKSx1Yy5jb250ZW50IGluc3RhbmNlb2YgZiYmZW5lKHVjLmNvbnRlbnQpO2lmKERzKXJldHVybiBscztpZihXbil7aWYoZnIpZm9yKEUwPU1yLmNhbGwoZWEub3duZXJEb2N1bWVudCk7'@;
put 'ZWEuZmlyc3RDaGlsZDspRTAuYXBwZW5kQ2hpbGQoZWEuZmlyc3RDaGlsZCk7ZWxzZSBFMD1lYTtyZXR1cm4odnQuc2hhZG93cm9vdHx8dnQuc2hhZG93cm9vdG1vZGUpJiYoRTA9cW4uY2FsbChkLEUwLCEwKSksRTB9bGV0IEExPVhuP2VhLm91dGVySFRNTDplYS5pbm5lckhUTUw7cmV0dXJu'@;
put 'IFhuJiZoYVsiIWRvY3R5cGUiXSYmZWEub3duZXJEb2N1bWVudCYmZWEub3duZXJEb2N1bWVudC5kb2N0eXBlJiZlYS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmSzEoXzJlLGVhLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKEExPSI8IURPQ1RZUEUgIitlYS5vd25lckRvY3Vt'@;
put 'ZW50LmRvY3R5cGUubmFtZSsiPlxuIitBMSkseG4mJklPKFtxcixfaSxQbl0sVDM9PntBMT1mRShBMSxUMywiICIpfSksbW4mJkRyP21uLmNyZWF0ZUhUTUwoQTEpOkExfSxsLnNldENvbmZpZz1mdW5jdGlvbigpe0UxKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'P2FyZ3VtZW50c1swXTp7fSksTm49ITB9LGwuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtNNj1udWxsLE5uPSExfSxsLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24obHMsbXIsZWEpe002fHxFMSh7fSk7Y29uc3QgemE9SnUobHMpLHVjPUp1KG1yKTtyZXR1cm4gZVYoemEsdWMsZWEpfSxsLmFk'@;
put 'ZEhvb2s9ZnVuY3Rpb24obHMsbXIpeyJmdW5jdGlvbiI9PXR5cGVvZiBtciYmaEUoZ3JbbHNdLG1yKX0sbC5yZW1vdmVIb29rPWZ1bmN0aW9uKGxzLG1yKXtpZih2b2lkIDAhPT1tcil7Y29uc3QgZWE9VFhlKGdyW2xzXSxtcik7cmV0dXJuLTE9PT1lYT92b2lkIDA6QVhlKGdyW2xzXSxlYSwx'@;
put 'KVswXX1yZXR1cm4gZjJlKGdyW2xzXSl9LGwucmVtb3ZlSG9va3M9ZnVuY3Rpb24obHMpe2dyW2xzXT1bXX0sbC5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe2dyPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRv'@;
put 'd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfX0s'@;
put 'bH0oKTtmdW5jdGlvbiBNMmUoYyl7Y29uc3QgbD1jLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxsOyljW2FdPVtjW2FdXSxhKz0xfWZ1bmN0aW9uIGQkKGMsbCl7Y29uc3QgYT1sLmxlbmd0aDtsZXQgZD0wO2Zvcig7ZDxhOyljLnB1c2gobFtkXSksZCs9MX1mdW5jdGlvbiB2RShjKXtjb25zdCBs'@;
put 'PVtdO2lmKCFjfHwwPT09Yy5sZW5ndGh8fCFjWzBdfHwwPT09Y1swXS5sZW5ndGgpcmV0dXJuIGw7Y29uc3QgYT1jLmxlbmd0aCxkPWNbMF0ubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YTtoKyspZm9yKGxldCBmPTA7ZjxkO2YrKylsW2ZdfHwobFtmXT1bXSksbFtmXVtoXT1jW2hdW2ZdO3JldHVy'@;
put 'biBsfWZ1bmN0aW9uIEd1KGMsbCxhLGQpe2xldCBoPS0xLGY9Yyx2PWE7QXJyYXkuaXNBcnJheShjKXx8KGY9QXJyYXkuZnJvbShjKSk7Y29uc3QgTT1mLmxlbmd0aDtmb3IoZCYmTSYmKGgrPTEsdj1mW2hdKSxoKz0xO2g8TTspdj1sKHYsZltoXSxoLGYpLGgrPTE7cmV0dXJuIHZ9ZnVuY3Rp'@;
put 'b24gQW0oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7KXtjb25zdCBNPWRbYV07bChNLGEsZCkmJih2Kz0xLGZbdl09TSksYSs9MX1yZXR1cm4gZn1mdW5jdGlvbiB5byhj'@;
put 'LGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspdis9MSxmW3ZdPWwoZFthXSxhLGQpLGErPTE7cmV0dXJuIGZ9ZnVuY3Rpb24gS24oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5p'@;
put 'c0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoO2Zvcig7YTxoJiYhMSE9PWwoZFthXSxhLGQpOylhKz0xO3JldHVybiBjfWZ1bmN0aW9uIHgyZShjKXtyZXR1cm4gR3UoYywobCxhKT0+bCthLDApfWZ1bmN0aW9uIFlYZShjKXtyZXR1cm4gR3UoYywobCxhKT0+'@;
put 'bD5hP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBHWGUoYyl7cmV0dXJuIEd1KGMsKGwsYSk9Pmw8YT9sOmEsQXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gJFhlKGMpe3JldHVybiBjLmxlbmd0aD94MmUoYykvYy5sZW5ndGg6MH1mdW5j'@;
put 'dGlvbiBFMmUoYyl7cmV0dXJuIEd1KGMsKGwsYSk9PmwuY29uY2F0KEFycmF5LmlzQXJyYXkoYSk/RTJlKGEpOmEpLFtdKX1mdW5jdGlvbiBUMmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gS24oYyxhPT57LTE9PT1sLmluZGV4T2YoYSkmJmwucHVzaChhKX0pLGx9ZnVuY3Rpb24gaCQoKXtmb3Io'@;
put 'dmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBLbihoLHY9PntmPWYuZmlsdGVyKE09PiF2LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gS1hlKCl7Zm9y'@;
put 'KHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gS24oaCx2PT57Zj1mLmZpbHRlcihNPT52LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gWFhlKCl7Zm9y'@;
put 'KHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF0sZj1uZXcgU2V0KGQpO3JldHVybiBLbihoLHY9PntLbih2LE09PntmLmhhcyhNKXx8Zi5hZGQoTSl9KX0pLEFycmF5LmZyb20oZil9'@;
put 'ZnVuY3Rpb24gZiQoYyl7cmV0dXJuIGMuc3BsaXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIgIil9ZnVuY3Rpb24gaGwoYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2Qr'@;
put 'KylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBHdShjLChmLHYsTSk9PmYrdi5yZXBsYWNlKC9ccj9cblxzKi9nLCIiKSsoYVtNXT9hW01dOiIiKSwiIikudHJpbSgpfWZ1bmN0aW9uIG9jKGMpe2xldCBsO3N3aXRjaCh0eXBlb2YgYyl7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpsPWAk'@;
put 'e2N9YDticmVhaztjYXNlIm9iamVjdCI6bD1udWxsPT09Yz8iIjpjLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmw9IiI7YnJlYWs7ZGVmYXVsdDpsPWMudG9TdHJpbmcoKX1yZXR1cm4gbH1mdW5jdGlvbiBIYShjKXtyZXR1cm4gdHlwZW9mIGM8InUifWZ1bmN0aW9uIGJjKGMp'@;
put 'e3JldHVybiB0eXBlb2YgYz4idSJ9ZnVuY3Rpb24gamMoYyl7cmV0dXJuIG51bGw9PT1jfHwiIj09PWN8fGJjKGMpfWZ1bmN0aW9uIEEyZShjKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1jb25zdCB5RT0ibGVuZ3RoIixiRT1j'@;
put 'PT5wYXJzZUludChjLDE2KSxrMmU9Yz0+cGFyc2VJbnQoYywxMCksT089KGMsbCxhKT0+Yy5zdWJzdHIobCxhKSxfRT1jPT5jLmNvZGVQb2ludEF0KDApLTY1LHAkPWM9PmAke2N9YC5yZXBsYWNlKC9cLS9nLCIiKSxxWGU9Yz0+YkUoT08ocCQoYyksYkUoIjEyIiksX0UoIkYiKSkpLyhiRShP'@;
put 'TyhwJChjKSxfRSgiQiIpLH5+IVtdW3lFXSkpfHw5KSxKWGU9KCk9PnR5cGVvZiBsb2NhdGlvbjwidSImJi9eKFthLXowLTlcLV0rXC4pP1x4NjhceDYxXHg2RVx4NjRceDczXHg2Rlx4NkVceDc0XHg2MVx4NjJceDZDXHg2NVx4MkVceDYzXHg2Rlx4NkQkL2kudGVzdChsb2NhdGlvbi5ob3N0'@;
put 'KTtsZXQgRDJlPSExO2NvbnN0IEkyZT17aW52YWxpZDooKT0+aGxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLGV4cGly'@;
put 'ZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGhsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9'@;
put 'LiBSZW5ldyB5b3VyIGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvclx4MjAKICAgIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uYH0s'@;
put 'bWlzc2luZzooKT0+aGxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxl'@;
put 'IHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0XHgyMAogICAgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29t'@;
put 'LmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifSxSMmU9e2ludmFsaWQ6KCk9PmhsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5o'@;
put 'dG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBvbiBob3cgdG9ceDIwCiAgICBpbnN0YWxsIGl0IHByb3Blcmx5IG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLGV4'@;
put 'cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGhsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAk'@;
put 'e2F9LiA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vcHJpY2luZyIgdGFyZ2V0PSJfYmxhbmsiPlJlbmV3PC9hPiB5b3VyXHgyMAogICAgbGljZW5zZSBrZXkgb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvciB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnlc'@;
put 'eDIwCiAgICBoZWxwLCBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzYWxlc0BoYW5kc29udGFibGUuY29tIj5zYWxlc0BoYW5kc29udGFibGUuY29tPC9hPi5gfSxtaXNzaW5nOigpPT5obGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVz'@;
put 'ZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25v'@;
put 'bi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBhYm91dCBpdCBpblx4MjAKICAgIHRoZSBkb2N1bWVu'@;
put 'dGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLG5vbl9jb21tZXJjaWFsOigpPT4iIn07ZnVuY3Rpb24gTDJlKGMsbCl7Y29uc3QgYT0hamMoYyksZD0ic3RyaW5nIj09'@;
put 'dHlwZW9mIGMmJiJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI9PT1jLnRvTG93ZXJDYXNlKCksaD0iMTYuMC4xIjtsZXQgZix2PSJpbnZhbGlkIixNPSJpbnZhbGlkIjtjb25zdCBJPWZ1bmN0aW9uIFFYZShjKXtsZXQgbD1bXVt5RV0sYT1sO2lmKGNbeUVdIT09X0UoIloiKSlyZXR1'@;
put 'cm4hMTtmb3IobGV0IGQ9IiIsaD0iQjxINFArIi5zcGxpdCgiIiksZj1fRShoLnNoaWZ0KCkpO2Y7Zj1fRShoLnNoaWZ0KCl8fCJBIikpLS1mPCIiW3lFXT9hfD0oazJlKGAke2syZShiRShkKSsoYkUoT08oYyxNYXRoLmFicyhmKSwyKSkrW10pLnBhZFN0YXJ0KDIsIjAiKSl9YCklOTd8fDIp'@;
put 'Pj4xOmQ9T08oYyxmLGY/MT09PWhbeUVdPzk6ODo2KTtyZXR1cm4gYT09PWx9KGM9cCQoY3x8IiIpKTtpZihhfHxkfHxJKWlmKEkpe2NvbnN0IEc9UHMoIjEwLzA3LzIwMjUiLCJERC9NTS9ZWVlZIikscmU9TWF0aC5mbG9vcihHLnRvRGF0ZSgpLmdldFRpbWUoKS84NjRlNSksdWU9cVhlKGMp'@;
put 'O2Y9UHMoODY0ZTUqKHVlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIikscmU+dWU/KHY9ImV4cGlyZWQiLE09ImV4cGlyZWQiKToodj0idmFsaWQiLE09InZhbGlkIil9ZWxzZSBkPyh2PSJub25fY29tbWVyY2lhbCIsTT0idmFsaWQiKToodj0iaW52YWxpZCIsTT0iaW52YWxpZCIp'@;
put 'O2Vsc2Ugdj0ibWlzc2luZyIsTT0ibWlzc2luZyI7aWYoSlhlKCkmJih2PSJ2YWxpZCIsTT0idmFsaWQiKSwhRDJlJiYidmFsaWQiIT09diYmKEkyZVt2XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21tZXJjaWFsIj09PXY/ImluZm8iOiJ3YXJu'@;
put 'Il0oSTJlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSksRDJlPSEwKSwidmFsaWQiIT09TSYmbCYmUjJlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSl7Y29uc3QgcmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmUuY2xhc3NOYW1lPSJo'@;
put 'YW5kc29udGFibGUgaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIixyZS5pbm5lckhUTUw9UjJlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSxsLmFwcGVuZENoaWxkKHJlKX19ZnVuY3Rpb24gZjEoYyl7cmV0dXJuIGNbMF0udG9VcHBlckNhc2UoKStjLnN1YnN0cigxKX1m'@;
put 'dW5jdGlvbiBlcWUoKXtjb25zdCBjPVtdO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3RoO2Zvcig7aDspe2gtPTE7Y29uc3QgZj1vYyhhW2hdKS50b0xvd2VyQ2FzZSgpOy0xPT09Yy5p'@;
put 'bmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9PT1jLmxlbmd0aH1mdW5jdGlvbiBnJCgpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4gYygpK2MoKStjKCkrYygpfWZ1bmN0'@;
put 'aW9uIG0kKGMpe3JldHVybi9eKFswLTldWzAtOV0/JSQpfCheMTAwJSQpLy50ZXN0KGMpfWZ1bmN0aW9uIHYkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm5gJHtjfWAucmVwbGFjZSgvKD86XFwpP1xbKFte'@;
put 'W1xdXSspXS9nLChhLGQpPT4iXFwiPT09YS5jaGFyQXQoMCk/YS5zdWJzdHIoMSxhLmxlbmd0aC0xKTp2b2lkIDA9PT1sW2RdPyIiOmxbZF0pfWZ1bmN0aW9uIHkkKGMpe3JldHVybiBQTyhgJHtjfWAse0FMTE9XRURfVEFHUzpbXX0pfWZ1bmN0aW9uIFBPKGMsbCl7cmV0dXJuIFdYZS5zYW5p'@;
put 'dGl6ZShjLGwpfWNvbnN0IGttPWM9PlsidGFiaW5kZXgiLGNdLGRxZT0oKT0+WyJyb2xlIiwiY2hlY2tib3giXSxuXz1jPT5bImFyaWEtbGFiZWwiLGNdLE43PSgpPT5bImFyaWEtaGlkZGVuIiwidHJ1ZSJdLEgyZT1jPT5bImFyaWEtaGFzcG9wdXAiLGNdLE4yZT1jPT5bImFyaWEtcm93Y291'@;
put 'bnQiLGNdLEZPPWM9PlsiYXJpYS1jb2xjb3VudCIsY10sVjJlPWM9PlsiYXJpYS1yb3dpbmRleCIsY10sYiQ9Yz0+WyJhcmlhLWNvbGluZGV4IixjXSxCMj1jPT5bImFyaWEtZXhwYW5kZWQiLGNdLEIyZT0oKT0+WyJhcmlhLXJlYWRvbmx5IiwidHJ1ZSJdLGoyZT0oKT0+WyJhcmlhLWludmFs'@;
put 'aWQiLCJ0cnVlIl0sejJlPWM9PlsiYXJpYS1jaGVja2VkIixjXSxicWU9Yz0+WyJhcmlhLWNvbnRyb2xzIixjXSx3cWU9Yz0+WyJhcmlhLWxpdmUiLGNdLENxZT1jPT5bImFyaWEtcmVsZXZhbnQiLGNdLFNxZT1jPT5bImFyaWEtc2V0c2l6ZSIsY10sTXFlPWM9PlsiYXJpYS1wb3NpbnNldCIs'@;
put 'Y107ZnVuY3Rpb24gcl8oYyl7bGV0IGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bD1jLmxlbmd0aD9uZXcgQXJyYXkoYy5sZW5ndGgpLmZpbGwobnVsbCk6W106KGw9e30scXMoYywoYSxkKT0+eyJfX2NoaWxkcmVuIiE9PWQmJihsW2RdPWEmJiJvYmplY3QiPT10eXBlb2YgYSYmIUFycmF5'@;
put 'LmlzQXJyYXkoYSk/cl8oYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiBhWzBdJiYhQXJyYXkuaXNBcnJheShhWzBdKT9bcl8oYVswXSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gVTJlKGMsbCl7cmV0dXJuIGwucHJvdG90eXBlLmNvbnN0cnVjdG9yPWws'@;
put 'Yy5wcm90b3R5cGU9bmV3IGwsYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjfWZ1bmN0aW9uIHd1KGMsbCxhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk7cmV0dXJuIHFzKGwsKGgsZik9PnsoITE9PT1kfHxhLmluY2x1ZGVzKGYpKSYmKGNbZl09aCl9KSxjfWZ1bmN0aW9uIHdFKGMsbCl7'@;
put 'cXMobCwoYSxkKT0+e2xbZF0mJiJvYmplY3QiPT10eXBlb2YgbFtkXT8oY1tkXXx8KGNbZF09QXJyYXkuaXNBcnJheShsW2RdKT9bXToiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobFtkXSk/bFtkXTp7fSksd0UoY1tkXSxsW2RdKSk6Y1tkXT1sW2Rd'@;
put 'fSl9ZnVuY3Rpb24gcDEoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpOmN9ZnVuY3Rpb24gczMoYyl7Y29uc3QgbD17fTtyZXR1cm4gcXMoYywoYSxkKT0+e2xbZF09YX0pLGx9ZnVuY3Rpb24geGwoYyl7Yy5NSVhJTlN8fChjLk1JWElO'@;
put 'Uz1bXSk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBLbihhLGg9PntjLk1JWElOUy5wdXNoKGguTUlYSU5fTkFNRSkscXMoaCwoZix2KT0+e2lmKHZvaWQgMCE9PWMucHJvdG90'@;
put 'eXBlW3ZdKXRocm93IG5ldyBFcnJvcihgTWl4aW4gY29uZmxpY3QuIFByb3BlcnR5ICcke3Z9JyBhbHJlYWR5IGV4aXN0IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uYCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpYy5wcm90b3R5cGVbdl09ZjtlbHNle2NvbnN0IEk9ZnVuY3Rpb24ocmUp'@;
put 'e2NvbnN0IHVlPWBfJHtyZX1gO3JldHVybiBmdW5jdGlvbih5ZSl7dGhpc1t1ZV09eWV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsdix7Z2V0OmZ1bmN0aW9uKHJlLHVlKXtjb25zdCB5ZT1gXyR7cmV9YDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhp'@;
put 'c1t5ZV0mJih0aGlzW3llXT0oQmU9PntsZXQgR2U9QmU7cmV0dXJuKEFycmF5LmlzQXJyYXkoR2UpfHxYcyhHZSkpJiYoR2U9cDEoR2UpKSxHZX0pKHVlKSksdGhpc1t5ZV19fSh2LGYpLHNldDpJKHYpLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSksY31mdW5jdGlvbiBITyhjLGwpe3JldHVybiBK'@;
put 'U09OLnN0cmluZ2lmeShjKT09PUpTT04uc3RyaW5naWZ5KGwpfWZ1bmN0aW9uIFhzKGMpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWZ1bmN0aW9uIFRwKGMsbCxhLGQpe2QudmFsdWU9YSxkLndyaXRhYmxlPSExIT09ZC53cml0'@;
put 'YWJsZSxkLmVudW1lcmFibGU9ITEhPT1kLmVudW1lcmFibGUsZC5jb25maWd1cmFibGU9ITEhPT1kLmNvbmZpZ3VyYWJsZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLGQpfWZ1bmN0aW9uIHFzKGMsbCl7Zm9yKGNvbnN0IGEgaW4gYylpZigoIWMuaGFzT3duUHJvcGVydHl8fGMuaGFzT3du'@;
put 'UHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpKSYmITE9PT1sKGNbYV0sYSxjKSlicmVhaztyZXR1cm4gY31mdW5jdGlvbiBaMmUoYyxsKXtjb25zdCBhPWwuc3BsaXQoIi4iKTtsZXQgZD1jO3JldHVybiBxcyhhLGg9PntpZihkPWRbaF0sdm9pZCAw'@;
put 'PT09ZClyZXR1cm4gZD12b2lkIDAsITF9KSxkfWZ1bmN0aW9uIE5PKGMsbCxhKXtpZigic3RyaW5nIiE9dHlwZW9mIGwpcmV0dXJuO2NvbnN0IGQ9bC5zcGxpdCgiLiIpO2xldCBoPWM7ZC5mb3JFYWNoKChmLHYpPT57Il9fcHJvdG9fXyI9PT1mfHwiY29uc3RydWN0b3IiPT09Znx8InByb3Rv'@;
put 'dHlwZSI9PT1mfHwodiE9PWQubGVuZ3RoLTE/KEN1KGgsZil8fChoW2ZdPXt9KSxoPWhbZl0pOmhbZl09YSl9KX1mdW5jdGlvbiBWTyhjKXtpZighWHMoYykpcmV0dXJuIDA7Y29uc3QgbD1mdW5jdGlvbihhKXtsZXQgZD0wO3JldHVybiBYcyhhKT9xcyhhLChoLGYpPT57Il9fY2hpbGRyZW4i'@;
put 'IT09ZiYmKGQrPWwoaCkpfSk6ZCs9MSxkfTtyZXR1cm4gbChjKX1mdW5jdGlvbiBGZChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InZhbHVlIjtjb25zdCBhPWBfJHtsfWAsZD17X3RvdWNoZWQ6ITEsW2FdOmMsaXNUb3Vj'@;
put 'aGVkKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWR9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsbCx7Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXt0aGlzLl90b3VjaGVkPSEwLHRoaXNbYV09aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkfWZ1bmN0aW9uIEN1'@;
put 'KGMsbCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGwpfWZ1bmN0aW9uIENFKGMpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uIFNFKGMpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiB3'@;
put 'JCgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gd2luZG93fWZ1bmN0aW9uIFcyZSgpe3JldHVybiB0eXBlb2Ygd2luZG93PCJ1In1sZXQgaV87ZnVuY3Rpb24gWTJlKGMpe3JldHVybiBpX3x8KGlfPSJvYmplY3QiPT10eXBlb2YgSW50bD9uZXcgSW50bC5Db2xsYXRvcihjLGFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuY29tcGFyZToiZnVuY3Rpb24iPT10eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlPyhhLGQpPT5gJHthfWAubG9jYWxlQ29tcGFyZShkKTooYSxkKT0+YT09PWQ/MDphPmQ/LTE6MSxpXyl9'@;
put 'Yig5NTQ5Myk7Y29uc3QgajI9Yz0+e2NvbnN0IGw9e3ZhbHVlOiExLHRlc3Q6KGEsZCk9PntsLnZhbHVlPWMoYSxkKX19O3JldHVybiBsfSx2Zz17Y2hyb21lOmoyKChjLGwpPT4vQ2hyb21lLy50ZXN0KGMpJiYvR29vZ2xlLy50ZXN0KGwpKSxjaHJvbWVXZWJLaXQ6ajIoYz0+L0NyaU9TLy50'@;
put 'ZXN0KGMpKSxlZGdlOmoyKGM9Pi9FZGdlLy50ZXN0KGMpKSxlZGdlV2ViS2l0OmoyKGM9Pi9FZGdpT1MvLnRlc3QoYykpLGZpcmVmb3g6ajIoYz0+L0ZpcmVmb3gvLnRlc3QoYykpLGZpcmVmb3hXZWJLaXQ6ajIoYz0+L0Z4aU9TLy50ZXN0KGMpKSxtb2JpbGU6ajIoYz0+L0FuZHJvaWR8d2Vi'@;
put 'T1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGMpKSxzYWZhcmk6ajIoKGMsbCk9Pi9TYWZhcmkvLnRlc3QoYykmJi9BcHBsZSBDb21wdXRlci8udGVzdChsKSl9LGFfPXttYWM6ajIoYz0+L15NYWMvLnRlc3QoYykpLHdpbjpqMihjPT4v'@;
put 'Xldpbi8udGVzdChjKSksbGludXg6ajIoYz0+L15MaW51eC8udGVzdChjKSksaW9zOmoyKGM9Pi9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChjKSl9O2Z1bmN0aW9uIEcyZSgpe2xldHt1c2VyQWdlbnQ6Yz1uYXZpZ2F0b3IudXNlckFnZW50LHZlbmRvcjpsPW5hdmlnYXRvci52ZW5kb3J9PWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtxcyh2ZyxhPT57bGV0e3Rlc3Q6ZH09YTtkKGMsbCl9KX1mdW5jdGlvbiAkMmUoKXtsZXR7cGxhdGZvcm06Yz1uYXZpZ2F0b3IucGxhdGZvcm19PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtxcyhhXyxsPT57bGV0e3Rlc3Q6YX09bDthKGMpfSl9ZnVuY3Rpb24gQyQoKXtyZXR1cm4gdmcuY2hyb21lLnZhbHVlfWZ1bmN0aW9uIEsyZSgpe3JldHVybiB2Zy5jaHJvbWVXZWJLaXQudmFsdWV9ZnVuY3Rpb24gQk8oKXtyZXR1cm4g'@;
put 'dmcuZmlyZWZveC52YWx1ZX1mdW5jdGlvbiBYMmUoKXtyZXR1cm4gdmcuZmlyZWZveFdlYktpdC52YWx1ZX1mdW5jdGlvbiBzXygpe3JldHVybiB2Zy5zYWZhcmkudmFsdWV9ZnVuY3Rpb24gcTJlKCl7cmV0dXJuIHZnLmVkZ2UudmFsdWV9ZnVuY3Rpb24geHFlKCl7cmV0dXJuIHZnLmVkZ2VX'@;
put 'ZWJLaXQudmFsdWV9ZnVuY3Rpb24gbzMoKXtyZXR1cm4gdmcubW9iaWxlLnZhbHVlfWZ1bmN0aW9uIFMkKCl7cmV0dXJuIGFfLmlvcy52YWx1ZX1mdW5jdGlvbiBNJCgpe2xldHttYXhUb3VjaFBvaW50czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1'@;
put 'bWVudHNbMF06bmF2aWdhdG9yO3JldHVybiBjPjImJmFfLm1hYy52YWx1ZX1mdW5jdGlvbiBqTygpe3JldHVybiBhXy53aW4udmFsdWV9ZnVuY3Rpb24gek8oKXtyZXR1cm4gYV8ubWFjLnZhbHVlfWZ1bmN0aW9uIEVxZSgpe3JldHVybiBhXy5saW51eC52YWx1ZX1mdW5jdGlvbiBKMmUoYyl7'@;
put 'bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT0tMSxkPW51bGwsaD1jO2Zvcig7bnVsbCE9PWg7KXtpZihhPT09bCl7ZD1oO2JyZWFrfWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9o'@;
put 'PWguaG9zdDooYSs9MSxoPWgucGFyZW50Tm9kZSl9cmV0dXJuIGR9ZnVuY3Rpb24gTUUoYyxsKXtjb25zdCBhPWMuY2xvc2VzdCgiLmhhbmRzb250YWJsZSIpO3JldHVybiEhYSYmKGEucGFyZW50Tm9kZT09PWx8fGE9PT1sKX1mdW5jdGlvbiBRMmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90'@;
put 'b3R5cGVPZihjLnBhcmVudCkmJmMuZnJhbWVFbGVtZW50fWZ1bmN0aW9uIFY3KGMpe3JldHVybiBRMmUoYykmJmMucGFyZW50fWZ1bmN0aW9uIFRxZShjKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCl9ZnVuY3Rpb24gRG0oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7Y29uc3R7RUxFTUVOVF9OT0RFOmQsRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpofT1Ob2RlO2xldCBmPWM7Zm9yKDtudWxsIT1mJiZmIT09YTsp'@;
put 'e2NvbnN0e25vZGVUeXBlOnYsbm9kZU5hbWU6TX09ZjtpZih2PT09ZCYmKGwuaW5jbHVkZXMoTSl8fGwuaW5jbHVkZXMoZikpKXJldHVybiBmO2NvbnN0e2hvc3Q6SX09ZjtmPUkmJnY9PT1oP0k6Zi5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIHhFKGMsbCxhKXtjb25zdCBkPVtd'@;
put 'O2xldCBoPWM7Zm9yKDtoJiYoaD1EbShoLGwsYSksaCYmKCFhfHxhLmNvbnRhaW5zKGgpKSk7KWQucHVzaChoKSxoPWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oLmhvc3Q6aC5wYXJlbnROb2RlO2NvbnN0IGY9ZC5sZW5ndGg7cmV0dXJuIGY/ZFtm'@;
put 'LTFdOm51bGx9ZnVuY3Rpb24gZWZlKGMsbCl7Y29uc3QgYT17ZWxlbWVudDp2b2lkIDAsY2xhc3NOYW1lczpbXX07bGV0IGQ9Yztmb3IoO251bGwhPT1kJiZkIT09Yy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWEuZWxlbWVudDspe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmZC5j'@;
put 'bGFzc0xpc3QuY29udGFpbnMobCkpYS5lbGVtZW50PWQsYS5jbGFzc05hbWVzLnB1c2gobCk7ZWxzZSBpZihsIGluc3RhbmNlb2YgUmVnRXhwKXtjb25zdCBoPUFycmF5LmZyb20oZC5jbGFzc0xpc3QpLmZpbHRlcihmPT5sLnRlc3QoZikpO2gubGVuZ3RoJiYoYS5lbGVtZW50PWQsYS5jbGFz'@;
put 'c05hbWVzLnB1c2goLi4uaCkpfWQ9ZC5wYXJlbnRFbGVtZW50fXJldHVybiBhfWZ1bmN0aW9uIEltKGMsbCl7bGV0IGE9Yy5wYXJlbnROb2RlLGQ9W107Zm9yKCJzdHJpbmciPT10eXBlb2YgbD9kPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZGVmYXVsdFZpZXc/Yy5xdWVyeVNlbGVj'@;
put 'dG9yQWxsKGwpOmMub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpLDApOmQucHVzaChsKTtudWxsIT09YTspe2lmKGQuaW5kZXhPZihhKT4tMSlyZXR1cm4hMDthPWEucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiB0ZmUoYyl7bGV0IGw9MCxhPWM7aWYoYS5wcmV2aW91c1Np'@;
put 'YmxpbmcpZm9yKDthPWEucHJldmlvdXNTaWJsaW5nOylsKz0xO3JldHVybiBsfWZ1bmN0aW9uIFJtKGMsbCxhKXtjb25zdCBkPWEucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuaHRfY2xvbmVfJHtjfWApO3JldHVybiBkP2QuY29udGFpbnMobCk6bnVsbH1mdW5jdGlvbiBuZmUoYyl7'@;
put 'cmV0dXJuIGMmJmMubGVuZ3RoP2MuZmlsdGVyKGw9PiEhbCk6W119ZnVuY3Rpb24gcmZlKGMsbCl7aWYoIWN8fCFjLmxlbmd0aClyZXR1cm4gbD97cmVnZXhGcmVlOltdLHJlZ2V4ZXM6W119OltdO2NvbnN0IGE9W10sZD1bXTtyZXR1cm4gZC5wdXNoKC4uLmMuZmlsdGVyKGg9Pntjb25zdCBm'@;
put 'PWggaW5zdGFuY2VvZiBSZWdFeHA7cmV0dXJuIGYmJmwmJmEucHVzaChoKSwhZn0pKSxsP3tyZWdleEZyZWU6ZCxyZWdleGVzOmF9OmR9ZnVuY3Rpb24gZ3MoYyxsKXtyZXR1cm4gdm9pZCAwIT09Yy5jbGFzc0xpc3QmJiJzdHJpbmciPT10eXBlb2YgbCYmIiIhPT1sJiZjLmNsYXNzTGlzdC5j'@;
put 'b250YWlucyhsKX1mdW5jdGlvbiBFaShjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1uZmUobCkpLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5hZGQoLi4ubCl9ZnVuY3Rpb24gaHMoYyxsKXsic3RyaW5nIj09dHlwZW9mIGw/bD1sLnNwbGl0KCIgIik6bCBpbnN0'@;
put 'YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtsZXR7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1yZmUobCwhMCk7YT1uZmUoYSksYS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QucmVtb3ZlKC4uLmEpLGQuZm9yRWFjaChoPT57Yy5jbGFzc0xpc3QuZm9yRWFjaChmPT57aC50ZXN0KGYpJiZjLmNsYXNzTGlz'@;
put 'dC5yZW1vdmUoZil9KX0pfWZ1bmN0aW9uIG1zKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO0FycmF5LmlzQXJyYXkobCl8fChsPVtbbCxhXV0p'@;
put 'LGwuZm9yRWFjaChkPT57QXJyYXkuaXNBcnJheShkKSYmIiIhPT1kWzBdJiZjLnNldEF0dHJpYnV0ZSguLi5kKX0pfWZ1bmN0aW9uIEI3KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTsic3RyaW5nIj09dHlwZW9mIGw/'@;
put 'bD1sLnNwbGl0KCIgIik6bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtjb25zdHtyZWdleEZyZWU6YSxyZWdleGVzOmR9PXJmZShsLCEwKTthLmZvckVhY2goaD0+eyIiIT09aCYmYy5yZW1vdmVBdHRyaWJ1dGUoaCl9KSxkLmZvckVhY2goaD0+e2MuZ2V0QXR0cmlidXRlTmFtZXMoKS5m'@;
put 'b3JFYWNoKGY9PntoLnRlc3QoZikmJmMucmVtb3ZlQXR0cmlidXRlKGYpfSl9KX1mdW5jdGlvbiB4JChjKXtpZigzPT09Yy5ub2RlVHlwZSljLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk7ZWxzZSBpZihbIlRBQkxFIiwiVEhFQUQiLCJUQk9EWSIsIlRGT09UIiwiVFIiXS5pbmRleE9mKGMu'@;
put 'bm9kZU5hbWUpPi0xKXtjb25zdCBsPWMuY2hpbGROb2Rlcztmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSl4JChsW2FdKX19ZnVuY3Rpb24gQXAoYyl7bGV0IGw7Zm9yKDtsPWMubGFzdENoaWxkOyljLnJlbW92ZUNoaWxkKGwpfVcyZSgpJiYoRzJlKCksJDJlKCkpO2NvbnN0IGlmZT0v'@;
put 'KDwoLiopPnwmKC4qKTspLztmdW5jdGlvbiBqNyhjLGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07aWZlLnRlc3QobCk/Yy5pbm5lckhUTUw9YT9QTyhsKTpsOkxtKGMsbCl9ZnVuY3Rpb24gTG0oYyxsKXtjb25zdCBh'@;
put 'PWMuZmlyc3RDaGlsZDthJiYzPT09YS5ub2RlVHlwZSYmbnVsbD09PWEubmV4dFNpYmxpbmc/YS50ZXh0Q29udGVudD1sOihBcChjKSxjLmFwcGVuZENoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsKSkpfWZ1bmN0aW9uIHo3KGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50'@;
put 'LmRvY3VtZW50RWxlbWVudCxhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgZD1jO2Zvcig7ZCE9PWw7KXtpZihudWxsPT09ZClyZXR1cm4hMTtpZihkLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtpZihkLmhvc3Qpe2lmKGQuaG9zdC5pbXBsKXJldHVy'@;
put 'biB6NyhkLmhvc3QuaW1wbCk7aWYoZC5ob3N0KXJldHVybiB6NyhkLmhvc3QpO3Rocm93IG5ldyBFcnJvcigiTG9zdCBpbiBXZWIgQ29tcG9uZW50cyB3b3JsZCIpfXJldHVybiExfWlmKCJub25lIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShkKS5kaXNwbGF5KXJldHVybiExO2Q9ZC5wYXJlbnRO'@;
put 'b2RlfXJldHVybiEwfWZ1bmN0aW9uIGFmZShjKXtjb25zdCBhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgZD1jO2Zvcig7ZC5wYXJlbnROb2RlOyl7aWYoIjBweCI9PT1kLnN0eWxlLmhlaWdodHx8IjAiPT09ZC5zdHlsZS5oZWlnaHQpcmV0dXJuImhpZGRlbiI9PT1hLmdldENv'@;
put 'bXB1dGVkU3R5bGUoZCkub3ZlcmZsb3c7ZD1kLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gajAoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3LGQ9bC5kb2N1bWVudEVsZW1lbnQ7bGV0IGYsdixNLGg9Yztmb3IoZj1oLm9mZnNldExlZnQsdj1oLm9mZnNl'@;
put 'dFRvcCxNPWg7KGg9aC5vZmZzZXRQYXJlbnQpJiZoIT09bC5ib2R5JiYib2Zmc2V0TGVmdCJpbiBoOylmKz1oLm9mZnNldExlZnQsdis9aC5vZmZzZXRUb3AsTT1oO3JldHVybiBNJiYiZml4ZWQiPT09TS5zdHlsZS5wb3NpdGlvbiYmKGYrPWEucGFnZVhPZmZzZXR8fGQuc2Nyb2xsTGVmdCx2'@;
put 'Kz1hLnBhZ2VZT2Zmc2V0fHxkLnNjcm9sbFRvcCkse2xlZnQ6Zix0b3A6dn19ZnVuY3Rpb24gRSQoKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWX1mdW5jdGlvbiBVTygpe3JldHVybihhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxYfWZ1bmN0aW9uIFpPKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP0UkKGwp'@;
put 'OmMuc2Nyb2xsVG9wfWZ1bmN0aW9uIFQkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP1VPKGwpOmMuc2Nyb2xsTGVmdH1mdW5jdGlvbiBFRShjKXtsZXQgbD1jLm93bmVyRG9jdW1lbnQs'@;
put 'YT1sP2wuZGVmYXVsdFZpZXc6dm9pZCAwO2x8fChsPWMuZG9jdW1lbnQ/Yy5kb2N1bWVudDpjLGE9bC5kZWZhdWx0Vmlldyk7Y29uc3QgZD1bImF1dG8iLCJzY3JvbGwiXTtsZXQgaD1jLnBhcmVudE5vZGU7Zm9yKDtoJiZoLnN0eWxlJiZsLmJvZHkhPT1oOyl7bGV0e292ZXJmbG93OmYsb3Zl'@;
put 'cmZsb3dYOnYsb3ZlcmZsb3dZOk19PWguc3R5bGU7aWYoW2YsdixNXS5pbmNsdWRlcygic2Nyb2xsIikpcmV0dXJuIGg7aWYoKHtvdmVyZmxvdzpmLG92ZXJmbG93WDp2LG92ZXJmbG93WTpNfT1hLmdldENvbXB1dGVkU3R5bGUoaCkpLGQuaW5jbHVkZXMoZil8fGQuaW5jbHVkZXModil8fGQu'@;
put 'aW5jbHVkZXMoTSl8fGguY2xpZW50SGVpZ2h0PD1oLnNjcm9sbEhlaWdodCsxJiYoZC5pbmNsdWRlcyhNKXx8ZC5pbmNsdWRlcyhmKSl8fGguY2xpZW50V2lkdGg8PWguc2Nyb2xsV2lkdGgrMSYmKGQuaW5jbHVkZXModil8fGQuaW5jbHVkZXMoZikpKXJldHVybiBoO2g9aC5wYXJlbnROb2Rl'@;
put 'fXJldHVybiBhfWZ1bmN0aW9uIHNmZShjKXtyZXR1cm4gYy5zY3JvbGxIZWlnaHQtYy5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gb2ZlKGMpe3JldHVybiBjLnNjcm9sbFdpZHRoLWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gb18oYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRW'@;
put 'aWV3O2xldCBkPWMucGFyZW50Tm9kZTtmb3IoO2QmJmQuc3R5bGUmJmwuYm9keSE9PWQ7KXtpZigidmlzaWJsZSIhPT1kLnN0eWxlLm92ZXJmbG93JiYiIiE9PWQuc3R5bGUub3ZlcmZsb3cpcmV0dXJuIGQ7Y29uc3QgaD1hLmdldENvbXB1dGVkU3R5bGUoZCksZj1bInNjcm9sbCIsImhpZGRl'@;
put 'biIsImF1dG8iXSx2PWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKSxNPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteSIpLEk9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy14Iik7aWYoZi5pbmNsdWRlcyh2KXx8Zi5pbmNsdWRlcyhNKXx8Zi5pbmNsdWRlcyhJKSlyZXR1'@;
put 'cm4gZDtkPWQucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBURShjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp3aW5kb3c7aWYoIWMpcmV0dXJuO2lmKGM9PT1hKXJldHVybiJ3aWR0aCI9PT1sP2Ake2EuaW5uZXJX'@;
put 'aWR0aH1weGA6ImhlaWdodCI9PT1sP2Ake2EuaW5uZXJIZWlnaHR9cHhgOnZvaWQgMDtjb25zdCBkPWMuc3R5bGVbbF07aWYoIiIhPT1kJiZ2b2lkIDAhPT1kKXJldHVybiBkO2NvbnN0IGg9YS5nZXRDb21wdXRlZFN0eWxlKGMpO3JldHVybiIiIT09aFtsXSYmdm9pZCAwIT09aFtsXT9oW2xd'@;
put 'OnZvaWQgMH1mdW5jdGlvbiBBcWUoYyxsKXtjb25zdHtzZWxlY3RvclRleHQ6YX09bDtsZXQgZD0hMTtyZXR1cm4gbC50eXBlPT09Q1NTUnVsZS5TVFlMRV9SVUxFJiZhJiYoYy5tc01hdGNoZXNTZWxlY3Rvcj9kPWMubXNNYXRjaGVzU2VsZWN0b3IoYSk6Yy5tYXRjaGVzJiYoZD1jLm1hdGNo'@;
put 'ZXMoYSkpKSxkfWZ1bmN0aW9uIGl1KGMpe3JldHVybiBjLm9mZnNldFdpZHRofWZ1bmN0aW9uIFN1KGMpe3JldHVybiBjLm9mZnNldEhlaWdodH1mdW5jdGlvbiBsXyhjKXtyZXR1cm4gYy5jbGllbnRIZWlnaHR8fGMuaW5uZXJIZWlnaHR9ZnVuY3Rpb24gQSQoYyl7cmV0dXJuIGMuY2xpZW50'@;
put 'V2lkdGh8fGMuaW5uZXJXaWR0aH1mdW5jdGlvbiBrcWUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIERxZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gayQoYyl7cmV0dXJuIGMuc2VsZWN0aW9uU3RhcnQ/Yy5zZWxlY3Rp'@;
put 'b25TdGFydDowfWZ1bmN0aW9uIGxmZShjKXtyZXR1cm4gYy5zZWxlY3Rpb25FbmQ/Yy5zZWxlY3Rpb25FbmQ6MH1mdW5jdGlvbiBJcWUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2NvbnN0IGw9Yy5kb2N1bWVu'@;
put 'dDtsZXQgYT0iIjtyZXR1cm4gYy5nZXRTZWxlY3Rpb24/YT1jLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk6bC5zZWxlY3Rpb24mJiJDb250cm9sIiE9PWwuc2VsZWN0aW9uLnR5cGUmJihhPWwuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dCksYX1mdW5jdGlvbiBEJCgpe2xldCBjPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Yy5nZXRTZWxlY3Rpb24mJihjLmdldFNlbGVjdGlvbigpLmVtcHR5P2MuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTpjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcyYmYy5nZXRT'@;
put 'ZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSl9ZnVuY3Rpb24gQUUoYyxsLGEpe2lmKHZvaWQgMD09PWEmJihhPWwpLGMuc2V0U2VsZWN0aW9uUmFuZ2Upe2MuZm9jdXMoKTt0cnl7Yy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpfWNhdGNoe2NvbnN0IGg9Yy5wYXJlbnROb2RlLGY9aC5zdHls'@;
put 'ZS5kaXNwbGF5O2guc3R5bGUuZGlzcGxheT0iYmxvY2siLGMuc2V0U2VsZWN0aW9uUmFuZ2UobCxhKSxoLnN0eWxlLmRpc3BsYXk9Zn19fWxldCBJJDtmdW5jdGlvbiBSJCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1'@;
put 'bWVudDtyZXR1cm4gak8oKT9OdW1iZXIuaXNJbnRlZ2VyKGMuZGVmYXVsdFZpZXcuZGV2aWNlUGl4ZWxSYXRpb3x8MSk/MDoyOjB9ZnVuY3Rpb24gZDAoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7cmV0dXJu'@;
put 'IHZvaWQgMD09PUkkJiYoSSQ9ZnVuY3Rpb24gUnFlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlLmhlaWdodD0iMjAwcHgiLGwuc3R5bGUu'@;
put 'd2lkdGg9IjEwMCUiO2NvbnN0IGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtzXygpJiYhbzMoKSYmYS5jbGFzc0xpc3QuYWRkKCJodFNjcm9sbGJhclNhZmFyaVRlc3QiKSxhLnN0eWxlLmJveFNpemluZz0iY29udGVudC1ib3giLGEuc3R5bGUuaGVpZ2h0PSIxNTBweCIsYS5zdHlsZS5sZWZ0'@;
put 'PSIwcHgiLGEuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPSIwcHgiLGEuc3R5bGUud2lkdGg9IjIwMHB4IixhLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsYS5hcHBlbmRDaGlsZChsKSwoYy5ib2R5fHxjLmRvY3VtZW50'@;
put 'RWxlbWVudCkuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1sLm9mZnNldFdpZHRoO2Euc3R5bGUub3ZlcmZsb3c9InNjcm9sbCI7bGV0IGg9bC5vZmZzZXRXaWR0aDtyZXR1cm4gZD09PWgmJihoPWEuY2xpZW50V2lkdGgpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChh'@;
put 'KSxkLWgrUiQoYyl9KGMpKSxJJH1mdW5jdGlvbiBMJChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0PmMuaW5uZXJIZWlnaHQ6Yy5vZmZzZXRXaWR0aCE9PWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gTyQoYyl7cmV0dXJuIGMgaW5zdGFu'@;
put 'Y2VvZiBXaW5kb3c/Yy5kb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoPmMuaW5uZXJXaWR0aDpjLm9mZnNldEhlaWdodCE9PWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIFdPKGMsbCxhKXtjLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtsfSwke2F9LDApYH1mdW5jdGlvbiBMcWUoYyl7'@;
put 'bGV0IGw7cmV0dXJuIGMuc3R5bGUudHJhbnNmb3JtJiYiIiE9PShsPWMuc3R5bGUudHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsbF06LTF9ZnVuY3Rpb24ga0UoYyl7Yy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09Yy5zdHlsZS50cmFuc2Zvcm0mJihjLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rp'@;
put 'b24gREUoYyl7cmV0dXJuIGMmJihbIklOUFVUIiwiU0VMRUNUIiwiVEVYVEFSRUEiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xfHwidHJ1ZSI9PT1jLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gWU8oYyl7cmV0dXJuIERFKGMpJiYhMT09PWMuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1'@;
put 'dCIpfWZ1bmN0aW9uIE9xZShjKXtZTyhjLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fGMuc2VsZWN0KCl9ZnVuY3Rpb24gUCQoYyl7cmV0dXJuIWMucGFyZW50Tm9kZX1mdW5jdGlvbiBjZmUoYyxsKXtuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGQsaCk9PntkLmZvckVhY2goZj0+'@;
put 'e2YuaXNJbnRlcnNlY3RpbmcmJm51bGwhPT1jLm9mZnNldFBhcmVudCYmKGwoKSxoLnVub2JzZXJ2ZShjKSl9KX0se3Jvb3Q6Yy5vd25lckRvY3VtZW50LmJvZHl9KS5vYnNlcnZlKGMpfWZ1bmN0aW9uIEYkKGMpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMV0pfHxhcmd1bWVudHNbMV0sYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGQ9Yy5vd25lckRvY3VtZW50LGg9ZC5jcmVhdGVSYW5nZSgpLGY9ZC5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKTttcyhjLCJjb250'@;
put 'ZW50ZWRpdGFibGUiLCEwKSxhJiZtcyhjLC4uLk43KCkpLGwmJkVpKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGguc2VsZWN0Tm9kZUNvbnRlbnRzKGMpLGYucmVtb3ZlQWxsUmFuZ2VzKCksZi5hZGRSYW5nZShoKX1mdW5jdGlvbiBIJChjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO2MuaGFzQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpJiZjLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxhLnJlbW92ZUFsbFJh'@;
put 'bmdlcygpLGwmJmhzKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKX1mdW5jdGlvbiB1ZmUoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO0YkKGMsYSks'@;
put 'bCgpLEgkKGMsYSl9ZnVuY3Rpb24ga3AoYyl7dmFyIGw7Y29uc3QgYT1udWxsPT1jfHxudWxsPT09KGw9Yy5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09bD92b2lkIDA6bC5kZWZhdWx0Vmlldy5FbGVtZW50O3JldHVybiEhKGEmJm51bGwhPT1hJiZjIGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24g'@;
put 'ZmwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gZGZlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVy'@;
put 'biBmdW5jdGlvbiBmKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksST0wO0k8djtJKyspTVtJXT1hcmd1bWVudHNbSV07Y29uc3QgRz1EYXRlLm5vdygpO2xldCByZT0hMTtkLmxhc3RDYWxsVGhyb3R0bGVkPSEwLGF8fChhPUcscmU9ITApO2NvbnN0IHVlPWwt'@;
put 'KEctYSk7cmV0dXJuIHJlPyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSk6KGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSxhPTAsaD12b2lkIDB9LHVlKSksZH19ZnVuY3Rpb24g'@;
put 'UHFlKGMpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBkPWRmZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gdigp'@;
put 'e2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEk9bmV3IEFycmF5KE0pLEc9MDtHPE07RysrKUlbR109YXJndW1lbnRzW0ddO3JldHVybiBoPyhoLT0xLGMuYXBwbHkodGhpcyxJKSk6ZC5hcHBseSh0aGlzLEkpfXJldHVybiB2LmNsZWFySGl0cz1mdW5jdGlvbiBmKCl7aD1hfSx2fWZ1bmN0'@;
put 'aW9uIElFKGMpe2xldCBkLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPW51bGw7cmV0dXJuIGZ1bmN0aW9uIGgoKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFy'@;
put 'Z3VtZW50c1tNXTtyZXR1cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dCgoKT0+e2Q9Yy5hcHBseSh0aGlzLHYpfSxsKSxkfX1mdW5jdGlvbiBGcWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1th'@;
put 'XTtjb25zdFtkLC4uLmhdPWw7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksST0wO0k8djtJKyspTVtJXT1hcmd1bWVudHNbSV07cmV0dXJuIEd1KGgsKEcscmUpPT5yZShHKSxkLmFwcGx5KHRoaXMsTSkpfX1mdW5jdGlvbiBOJChj'@;
put 'KXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1'@;
put 'bWVudHNbTV07cmV0dXJuIGMuYXBwbHkodGhpcyxhLmNvbmNhdCh2KSl9fWZ1bmN0aW9uIGhmZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7'@;
put 'TSsrKXZbTV09YXJndW1lbnRzW01dO2NvbnN0IEk9ZC5jb25jYXQodik7bGV0IEc7cmV0dXJuIEc9SS5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLEkpOmEoSSksR319KFtdKX1mdW5jdGlvbiBIcWUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtjb25zdCBJPWQuY29uY2F0KHYucmV2ZXJzZSgpKTtsZXQgRztyZXR1cm4gRz1JLmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsSSk6YShJKSxHfX0oW10pfWZ1'@;
put 'bmN0aW9uIEdPKGMsbCxhLGQsaCxmLHYsTSl7cmV0dXJuIEhhKE0pP2MuY2FsbChsLGEsZCxoLGYsdixNKTpIYSh2KT9jLmNhbGwobCxhLGQsaCxmLHYpOkhhKGYpP2MuY2FsbChsLGEsZCxoLGYpOkhhKGgpP2MuY2FsbChsLGEsZCxoKTpIYShkKT9jLmNhbGwobCxhLGQpOkhhKGEpP2MuY2Fs'@;
put 'bChsLGEpOmMuY2FsbChsKX1jb25zdCAkYT17QUxUOjE4LEFSUk9XX0RPV046NDAsQVJST1dfTEVGVDozNyxBUlJPV19SSUdIVDozOSxBUlJPV19VUDozOCxBVURJT19ET1dOOkJPKCk/MTgyOjE3NCxBVURJT19NVVRFOkJPKCk/MTgxOjE3MyxBVURJT19VUDpCTygpPzE4MzoxNzUsQkFDS1NQ'@;
put 'QUNFOjgsQ0FQU19MT0NLOjIwLENPTU1BOjE4OCxDT01NQU5EX0xFRlQ6OTEsQ09NTUFORF9SSUdIVDo5MyxDT01NQU5EX0ZJUkVGT1g6MjI0LENPTlRST0w6MTcsREVMRVRFOjQ2LEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsRjE6MTEyLEYyOjExMyxGMzoxMTQsRjQ6MTE1LEY1OjExNixG'@;
put 'NjoxMTcsRjc6MTE4LEY4OjExOSxGOToxMjAsRjEwOjEyMSxGMTE6MTIyLEYxMjoxMjMsRjEzOjEyNCxGMTQ6MTI1LEYxNToxMjYsRjE2OjEyNyxGMTc6MTI4LEYxODoxMjksRjE5OjEzMCxIT01FOjM2LElOU0VSVDo0NSxNRURJQV9ORVhUOjE3NixNRURJQV9QTEFZX1BBVVNFOjE3OSxNRURJ'@;
put 'QV9QUkVWOjE3NyxNRURJQV9TVE9QOjE3OCxOVUxMOjAsTlVNX0xPQ0s6MTQ0LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBBVVNFOjE5LFBFUklPRDoxOTAsU0NST0xMX0xPQ0s6MTQ1LFNISUZUOjE2LFNQQUNFOjMyLFRBQjo5LEE6NjUsQzo2NyxEOjY4LEY6NzAsTDo3NixPOjc5LFA6ODAs'@;
put 'Uzo4MyxWOjg2LFg6ODgsWTo4OSxaOjkwfSxOcWU9WyRhLkFMVCwkYS5BUlJPV19ET1dOLCRhLkFSUk9XX0xFRlQsJGEuQVJST1dfUklHSFQsJGEuQVJST1dfVVAsJGEuQVVESU9fRE9XTiwkYS5BVURJT19NVVRFLCRhLkFVRElPX1VQLCRhLkJBQ0tTUEFDRSwkYS5DQVBTX0xPQ0ssJGEuREVM'@;
put 'RVRFLCRhLkVORCwkYS5FTlRFUiwkYS5FU0NBUEUsJGEuRjEsJGEuRjIsJGEuRjMsJGEuRjQsJGEuRjUsJGEuRjYsJGEuRjcsJGEuRjgsJGEuRjksJGEuRjEwLCRhLkYxMSwkYS5GMTIsJGEuRjEzLCRhLkYxNCwkYS5GMTUsJGEuRjE2LCRhLkYxNywkYS5GMTgsJGEuRjE5LCRhLkhPTUUsJGEu'@;
put 'SU5TRVJULCRhLk1FRElBX05FWFQsJGEuTUVESUFfUExBWV9QQVVTRSwkYS5NRURJQV9QUkVWLCRhLk1FRElBX1NUT1AsJGEuTlVMTCwkYS5OVU1fTE9DSywkYS5QQUdFX0RPV04sJGEuUEFHRV9VUCwkYS5QQVVTRSwkYS5TQ1JPTExfTE9DSywkYS5TSElGVCwkYS5UQUJdO2Z1bmN0aW9uIGZm'@;
put 'ZShjKXtyZXR1cm4gMzI9PT1jfHxjPj00OCYmYzw9NTd8fGM+PTk2JiZjPD0xMTF8fGM+PTE4NiYmYzw9MTkyfHxjPj0yMTkmJmM8PTIyMnx8Yz49MjI2fHxjPj02NSYmYzw9OTB9ZnVuY3Rpb24gViQoYyl7cmV0dXJuIE5xZS5pbmNsdWRlcyhjKX1mdW5jdGlvbiBWcWUoYyl7Y29uc3QgbD1b'@;
put 'XTtyZXR1cm4gek8oKT9sLnB1c2goJGEuQ09NTUFORF9MRUZULCRhLkNPTU1BTkRfUklHSFQsJGEuQ09NTUFORF9GSVJFRk9YKTpsLnB1c2goJGEuQ09OVFJPTCksbC5pbmNsdWRlcyhjKX1mdW5jdGlvbiBwZmUoYyl7cmV0dXJuWyRhLkNPTlRST0wsJGEuQ09NTUFORF9MRUZULCRhLkNPTU1B'@;
put 'TkRfUklHSFQsJGEuQ09NTUFORF9GSVJFRk9YXS5pbmNsdWRlcyhjKX1mdW5jdGlvbiBjXyhjLGwpe2NvbnN0IGE9bC5zcGxpdCgifCIpO2xldCBkPSExO3JldHVybiBLbihhLGg9PntpZihjPT09JGFbaF0pcmV0dXJuIGQ9ITAsITF9KSxkfWZ1bmN0aW9uIHoyKGMpe2MuaXNJbW1lZGlhdGVQ'@;
put 'cm9wYWdhdGlvbkVuYWJsZWQ9ITEsYy5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gT20oYyl7cmV0dXJuITE9PT1jLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkfWZ1bmN0aW9uIFBtKGMpe3JldHVybiAyPT09Yy5idXR0b259ZnVuY3Rpb24gJE8oYyl7cmV0dXJuIDA9PT1jLmJ1dHRv'@;
put 'bn1mdW5jdGlvbiBnZmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBUb3VjaEV2ZW50fWZ1bmN0aW9uIG1mZShjLGwpe2NvbnN0IGE9e3g6Yy5vZmZzZXRYLHk6Yy5vZmZzZXRZfTtsZXQgZD1jLnRhcmdldDtpZigha3AobCl8fGQhPT1sJiZkLmNvbnRhaW5zKGwpKXJldHVybiBhO2Zvcig7ZCE9'@;
put 'PWw7KWEueCs9ZC5vZmZzZXRMZWZ0LGEueSs9ZC5vZmZzZXRUb3AsZD1kLm9mZnNldFBhcmVudDtyZXR1cm4gYX1mdW5jdGlvbiBZbygpe0hhKGNvbnNvbGUpJiZjb25zb2xlLndhcm4oLi4uYXJndW1lbnRzKX1mdW5jdGlvbiBCJCgpe0hhKGNvbnNvbGUpJiZjb25zb2xlLmVycm9yKC4uLmFy'@;
put 'Z3VtZW50cyl9Y29uc3QgVTc9WyJhZnRlckNlbGxNZXRhUmVzZXQiLCJhZnRlckNoYW5nZSIsImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlRHJvcGRvd25N'@;
put 'ZW51U2V0SXRlbXMiLCJhZnRlckNvbnRleHRNZW51SGlkZSIsImJlZm9yZUNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb3B5TGltaXQiLCJiZWZvcmVDcmVhdGVDb2wiLCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIiwiYWZ0ZXJDcmVhdGVDb2wiLCJi'@;
put 'ZWZvcmVDcmVhdGVSb3ciLCJhZnRlckNyZWF0ZVJvdyIsImFmdGVyRGVzZWxlY3QiLCJhZnRlckRlc3Ryb3kiLCJhZnRlckRvY3VtZW50S2V5RG93biIsImFmdGVyRHJhd1NlbGVjdGlvbiIsImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsImFm'@;
put 'dGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0IiwiYWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsImFmdGVyT25DZWxs'@;
put 'Q29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJlbW92ZUNvbCIsImFmdGVyUmVtb3ZlUm93Iiwi'@;
put 'YmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IiwiYmVmb3JlVmlld3BvcnRTY3JvbGwiLCJhZnRlclNjcm9sbEhvcml6'@;
put 'b250YWxseSIsImFmdGVyU2Nyb2xsVmVydGljYWxseSIsImFmdGVyU2Nyb2xsIiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IiwiYmVmb3Jl'@;
put 'U2VsZWN0Q29sdW1ucyIsImFmdGVyU2VsZWN0Q29sdW1ucyIsImJlZm9yZVNlbGVjdFJvd3MiLCJhZnRlclNlbGVjdFJvd3MiLCJhZnRlclNldENlbGxNZXRhIiwiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsImFmdGVy'@;
put 'U2V0U291cmNlRGF0YUF0Q2VsbCIsImFmdGVyU2V0VGhlbWUiLCJhZnRlclVwZGF0ZVNldHRpbmdzIiwiYWZ0ZXJWYWxpZGF0ZSIsImJlZm9yZUxhbmd1YWdlQ2hhbmdlIiwiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsImJlZm9yZUF1dG9maWxsIiwiYWZ0ZXJBdXRvZmlsbCIsImJlZm9yZUNlbGxB'@;
put 'bGlnbm1lbnQiLCJiZWZvcmVDaGFuZ2UiLCJiZWZvcmVDaGFuZ2VSZW5kZXIiLCJiZWZvcmVEcmF3Qm9yZGVycyIsImJlZm9yZUdldENlbGxNZXRhIiwiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLCJiZWZvcmVJbml0IiwiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIiwiYmVmb3JlTG9hZERhdGEiLCJi'@;
put 'ZWZvcmVVcGRhdGVEYXRhIiwiYmVmb3JlS2V5RG93biIsImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsImJlZm9yZU9uQ2VsbE1vdXNlVXAiLCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsImJlZm9yZU9uQ2VsbE1vdXNlT3V0IiwiYmVmb3JlUmVtb3Zl'@;
put 'Q29sIiwiYmVmb3JlUmVtb3ZlUm93IiwiYmVmb3JlVmlld1JlbmRlciIsImFmdGVyVmlld1JlbmRlciIsImJlZm9yZVJlbmRlciIsImFmdGVyUmVuZGVyIiwiYmVmb3JlUm93V3JhcCIsImJlZm9yZUNvbHVtbldyYXAiLCJiZWZvcmVTZXRDZWxsTWV0YSIsImJlZm9yZVNlbGVjdGlvbkZvY3Vz'@;
put 'U2V0IiwiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0IiwiYmVmb3JlU2V0UmFuZ2VFbmQiLCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLCJiZWZvcmVUb3VjaFNjcm9sbCIsImJlZm9yZVZhbGlkYXRlIiwiYmVmb3JlVmFsdWVSZW5kZXIiLCJjb25z'@;
put 'dHJ1Y3QiLCJpbml0IiwibW9kaWZ5Q29sSGVhZGVyIiwibW9kaWZ5Q29sV2lkdGgiLCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsIm1vZGlmeUZvY3VzZWRFbGVtZW50IiwibW9kaWZ5Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0IiwibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5'@;
put 'TmFtZSIsIm1vZGlmeURhdGEiLCJtb2RpZnlTb3VyY2VEYXRhIiwibW9kaWZ5Um93RGF0YSIsIm1vZGlmeUdldENlbGxDb29yZHMiLCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IiwibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLCJiZWZv'@;
put 'cmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwicGVyc2lzdGVudFN0YXRlUmVzZXQiLCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiYmVmb3JlQ29sdW1uU29ydCIsImFmdGVyQ29sdW1uU29ydCIsIm1vZGlmeUF1dG9maWxsUmFuZ2UiLCJtb2RpZnlDb3B5'@;
put 'YWJsZVJhbmdlIiwiYmVmb3JlQ3V0IiwiYWZ0ZXJDdXQiLCJiZWZvcmVDb3B5IiwiYWZ0ZXJDb3B5IiwiYmVmb3JlUGFzdGUiLCJhZnRlclBhc3RlIiwiYmVmb3JlQ29sdW1uRnJlZXplIiwiYWZ0ZXJDb2x1bW5GcmVlemUiLCJiZWZvcmVDb2x1bW5Nb3ZlIiwiYWZ0ZXJDb2x1bW5Nb3ZlIiwi'@;
put 'YmVmb3JlQ29sdW1uVW5mcmVlemUiLCJhZnRlckNvbHVtblVuZnJlZXplIiwiYmVmb3JlUm93TW92ZSIsImFmdGVyUm93TW92ZSIsImJlZm9yZUNvbHVtblJlc2l6ZSIsImFmdGVyQ29sdW1uUmVzaXplIiwiYmVmb3JlUm93UmVzaXplIiwiYWZ0ZXJSb3dSZXNpemUiLCJhZnRlckdldENvbHVt'@;
put 'bkhlYWRlclJlbmRlcmVycyIsImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIiwiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwiYmVmb3JlRmlsdGVyIiwiYWZ0ZXJGaWx0ZXIiLCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsImFm'@;
put 'dGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsImFmdGVyU2hlZXRBZGRlZCIsImFmdGVyU2hlZXRSZW5hbWVkIiwiYWZ0ZXJTaGVldFJlbW92ZWQiLCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsImJlZm9yZVVuZG8iLCJiZWZvcmVVbmRvU3Rh'@;
put 'Y2tDaGFuZ2UiLCJhZnRlclVuZG8iLCJhZnRlclVuZG9TdGFja0NoYW5nZSIsImJlZm9yZVJlZG8iLCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLCJhZnRlclJlZG8iLCJhZnRlclJlZG9TdGFja0NoYW5nZSIsIm1vZGlmeVJvd0hlYWRlcldpZHRoIiwibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLCJt'@;
put 'b2RpZnlUcmFuc2Zvcm1TdGFydCIsIm1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0'@;
put 'ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwiYmVmb3JlSGlkZVJvd3MiLCJhZnRlckhpZGVSb3dzIiwiYmVmb3JlVW5oaWRlUm93cyIsImFmdGVyVW5oaWRlUm93cyIsImJlZm9yZUhpZGVDb2x1bW5zIiwiYWZ0ZXJIaWRlQ29s'@;
put 'dW1ucyIsImJlZm9yZVVuaGlkZUNvbHVtbnMiLCJhZnRlclVuaGlkZUNvbHVtbnMiLCJiZWZvcmVUcmltUm93IiwiYWZ0ZXJUcmltUm93IiwiYmVmb3JlVW50cmltUm93IiwiYWZ0ZXJVbnRyaW1Sb3ciLCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iiwi'@;
put 'YWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwiYmVmb3JlQWRkQ2hpbGQiLCJhZnRlckFkZENoaWxkIiwiYmVmb3JlRGV0YWNoQ2hpbGQiLCJhZnRlckRldGFjaENoaWxkIiwiYmVmb3JlQmVnaW5FZGl0aW5nIiwiYWZ0ZXJCZWdpbkVkaXRpbmciLCJiZWZvcmVNZXJnZUNlbGxzIiwiYWZ0ZXJNZXJn'@;
put 'ZUNlbGxzIiwiYmVmb3JlVW5tZXJnZUNlbGxzIiwiYWZ0ZXJVbm1lcmdlQ2VsbHMiLCJhZnRlckxpc3RlbiIsImFmdGVyVW5saXN0ZW4iLCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsImFmdGVyQ29sdW1u'@;
put 'Q29sbGFwc2UiLCJiZWZvcmVDb2x1bW5FeHBhbmQiLCJhZnRlckNvbHVtbkV4cGFuZCIsIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCJdLGokPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1v'@;
put 'ZGlmeUNvbCIsIjguMC4wIl0sWyJza2lwTGVuZ3RoQ2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSx6JD1uZXcgTWFwKFtbXV0pO2Z1bmN0aW9uIFUkKGMsbCxhKXt2ZmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHZmZShj'@;
put 'LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24geWZlKGMsbCxhKXtyZXR1cm4gYy5zZXQoS08oYyxsKSxhKSxhfWZ1bmN0aW9uIHowKGMsbCl7'@;
put 'cmV0dXJuIGMuZ2V0KEtPKGMsbCkpfWZ1bmN0aW9uIEtPKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24g'@;
put 'dGhpcyBvYmplY3QiKX1iKDIzMDEyKSxiKDgxMjYwKTt2YXIgUmg9bmV3IFdlYWtNYXAsdV89bmV3IFdlYWtNYXAsWiQ9bmV3IFdlYWtNYXAsVyQ9bmV3IFdlYWtTZXQ7Y2xhc3MgYmZle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIEJxZShjLGwpe3ZmZShjLGwpLGwuYWRkKGMpfSkodGhpcyxX'@;
put 'JCksVSQodGhpcyxSaCxuZXcgTWFwKSxVJCh0aGlzLHVfLG5ldyBNYXApLFUkKHRoaXMsWiQsbmV3IFNldCksVTcuZm9yRWFjaChsPT5LTyhXJCx0aGlzLF9mZSkuY2FsbCh0aGlzLGwpKX1nZXRIb29rcyhsKXt2YXIgYTtyZXR1cm4gbnVsbCE9PShhPXowKFJoLHRoaXMpLmdldChsKSkmJnZv'@;
put 'aWQgMCE9PWE/YTpbXX1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307ejAoUmgsdGhpcykuaGFzKGwpfHwoS08oVyQsdGhpcyxfZmUpLmNhbGwodGhpcyxsKSxVNy5wdXNoKGwpKTtjb25zdCBoPXowKFJoLHRo'@;
put 'aXMpLmdldChsKTtpZihoLmZpbmQoRz0+Ry5jYWxsYmFjaz09PWEpKXJldHVybjtjb25zdCBmPU51bWJlci5pc0ludGVnZXIoZC5vcmRlckluZGV4KT9kLm9yZGVySW5kZXg6MCx2PSEhZC5ydW5PbmNlLE09ISFkLmluaXRpYWxIb29rO2xldCBJPSExO2lmKE0pe2NvbnN0IEc9aC5maW5kKHJl'@;
put 'PT5yZS5pbml0aWFsSG9vayk7RyYmKEcuY2FsbGJhY2s9YSxJPSEwKX1pZighSSl7aC5wdXNoKHtjYWxsYmFjazphLG9yZGVySW5kZXg6ZixydW5PbmNlOnYsaW5pdGlhbEhvb2s6TSxza2lwOiExfSk7bGV0IEc9ejAoWiQsdGhpcykuaGFzKGwpOyFHJiYwIT09ZiYmKEc9ITAsejAoWiQsdGhp'@;
put 'cykuYWRkKGwpKSxHJiZoLmxlbmd0aD4xJiZ6MChSaCx0aGlzKS5zZXQobCxoLnRvU29ydGVkKChyZSx1ZSk9PnJlLm9yZGVySW5kZXgtdWUub3JkZXJJbmRleCkpfX1oYXMobCl7cmV0dXJuIHowKFJoLHRoaXMpLmhhcyhsKSYmejAoUmgsdGhpcykuZ2V0KGwpLmxlbmd0aD4wfXJlbW92ZShs'@;
put 'LGEpe2lmKCF6MChSaCx0aGlzKS5oYXMobCkpcmV0dXJuITE7Y29uc3QgZD16MChSaCx0aGlzKS5nZXQobCksaD1kLmZpbmQoZj0+Zi5jYWxsYmFjaz09PWEpO2lmKGgpe2xldCBmPXowKHVfLHRoaXMpLmdldChsKTtyZXR1cm4gaC5za2lwPSEwLGYrPTEsZj4xMDAmJih6MChSaCx0aGlzKS5z'@;
put 'ZXQobCxkLmZpbHRlcih2PT4hdi5za2lwKSksZj0wKSx6MCh1Xyx0aGlzKS5zZXQobCxmKSwhMH1yZXR1cm4hMX1kZXN0cm95KCl7ejAoUmgsdGhpcykuY2xlYXIoKSx6MCh1Xyx0aGlzKS5jbGVhcigpLHlmZShSaCx0aGlzLG51bGwpLHlmZSh1Xyx0aGlzLG51bGwpfX1mdW5jdGlvbiBfZmUo'@;
put 'Yyl7ejAoUmgsdGhpcykuc2V0KGMsW10pLHowKHVfLHRoaXMpLnNldChjLDApfWNvbnN0IFdxZT1obGBUaGUgcGx1Z2luIGhvb2sgIltob29rTmFtZV0iIHdhcyByZW1vdmVkIGluIEhhbmRzb250YWJsZSBbcmVtb3ZlZEluVmVyc2lvbl0uXHgyMAogIFBsZWFzZSBjb25zdWx0IHJlbGVhc2Ug'@;
put 'bm90ZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvcmVsZWFzZXMvdGFnL1tyZW1vdmVkSW5WZXJzaW9uXSB0b1x4MjAKICBsZWFybiBhYm91dCB0aGUgbWlncmF0aW9uIHBhdGguYDtjbGFzcyBNYXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiB6cWUoYyxs'@;
put 'LGEpe3JldHVybihsPWZ1bmN0aW9uIFVxZShjKXt2YXIgbD1mdW5jdGlvbiBacWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl'@;
put 'b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJnbG9iYWxCdWNrZXQiLG5ldyBiZmUpfXN0YXRpYyBnZXRTaW5nbGV0b24oKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24gR3FlKCl7cmV0dXJuIFlxZX0oKX1nZXRCdWNrZXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gbD8obC5wbHVnaW5Ib29rQnVja2V0fHwobC5wbHVnaW5Ib29rQnVja2V0PW5ldyBi'@;
put 'ZmUpLGwucGx1Z2luSG9va0J1Y2tldCk6dGhpcy5nbG9iYWxCdWNrZXR9YWRkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4g'@;
put 'QXJyYXkuaXNBcnJheShhKT9LbihhLGY9PnRoaXMuYWRkKGwsZixkKSk6KGokLmhhcyhsKSYmWW8odiQoV3FlLHtob29rTmFtZTpsLHJlbW92ZWRJblZlcnNpb246aiQuZ2V0KGwpfSkpLHokLmhhcyhsKSYmWW8oeiQuZ2V0KGwpKSx0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtvcmRlcklu'@;
put 'ZGV4OmgscnVuT25jZTohMX0pKSx0aGlzfW9uY2UobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiBBcnJheS5pc0FycmF5KGEp'@;
put 'P0tuKGEsZj0+dGhpcy5vbmNlKGwsZixkKSk6dGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITB9KSx0aGlzfWFkZEFzRml4ZWQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVs'@;
put 'bDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9LbihhLGg9PnRoaXMuYWRkQXNGaXhlZChsLGgsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse2luaXRpYWxIb29rOiEwfSksdGhpc31yZW1vdmUobCxhKXtyZXR1cm4gdGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwpLnJlbW92ZShsLGEpfWhhcyhsKXtyZXR1cm4gdGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwpLmhhcyhsKX1ydW4obCxhLGQsaCxmLHYsTSxJ'@;
put 'KXt7Y29uc3QgRz10aGlzLmdldEJ1Y2tldCgpLmdldEhvb2tzKGEpLHJlPUc/Ry5sZW5ndGg6MDtsZXQgdWU9MDtpZihyZSlmb3IoO3VlPHJlOyl7aWYoIUdbdWVdfHxHW3VlXS5za2lwKXt1ZSs9MTtjb250aW51ZX1jb25zdCB5ZT1HTyhHW3VlXS5jYWxsYmFjayxsLGQsaCxmLHYsTSxJKTt2'@;
put 'b2lkIDAhPT15ZSYmKGQ9eWUpLEdbdWVdJiZHW3VlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLEdbdWVdLmNhbGxiYWNrKSx1ZSs9MX19e2NvbnN0IEc9dGhpcy5nZXRCdWNrZXQobCkuZ2V0SG9va3MoYSkscmU9Rz9HLmxlbmd0aDowO2xldCB1ZT0wO2lmKHJlKWZvcig7dWU8cmU7KXtpZigh'@;
put 'R1t1ZV18fEdbdWVdLnNraXApe3VlKz0xO2NvbnRpbnVlfWNvbnN0IHllPUdPKEdbdWVdLmNhbGxiYWNrLGwsZCxoLGYsdixNLEkpO3ZvaWQgMCE9PXllJiYoZD15ZSksR1t1ZV0mJkdbdWVdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsR1t1ZV0uY2FsbGJhY2ssbCksdWUrPTF9fXJldHVybiBk'@;
put 'fWRlc3Ryb3koKXt0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCkuZGVzdHJveSgpfXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpfHxVNy5wdXNoKGwpfWRlcmVnaXN0ZXIobCl7dGhpcy5pc1Jl'@;
put 'Z2lzdGVyZWQobCkmJlU3LnNwbGljZShVNy5pbmRleE9mKGwpLDEpfWlzRGVwcmVjYXRlZChsKXtyZXR1cm4geiQuaGFzKGwpfHxqJC5oYXMobCl9aXNSZWdpc3RlcmVkKGwpe3JldHVybiBVNy5pbmRleE9mKGwpPj0wfWdldFJlZ2lzdGVyZWQoKXtyZXR1cm4gVTd9fWNvbnN0IFlxZT1uZXcg'@;
put 'TWEsWjc9bmV3IE1hcDtmdW5jdGlvbiBVMigpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiY29tbW9uIjtaNy5oYXMoYyl8fFo3LnNldChjLG5ldyBNYXApO2NvbnN0IGw9WjcuZ2V0KGMpO3JldHVybntyZWdpc3RlcjpmdW5j'@;
put 'dGlvbiBhKEksRyl7bC5zZXQoSSxHKX0sZ2V0SXRlbTpmdW5jdGlvbiBkKEkpe3JldHVybiBsLmdldChJKX0saGFzSXRlbTpmdW5jdGlvbiBoKEkpe3JldHVybiBsLmhhcyhJKX0sZ2V0TmFtZXM6ZnVuY3Rpb24gZigpe3JldHVyblsuLi5sLmtleXMoKV19LGdldFZhbHVlczpmdW5jdGlvbiB2'@;
put 'KCl7cmV0dXJuWy4uLmwudmFsdWVzKCldfSxjbGVhcjpmdW5jdGlvbiBNKCl7WjcuZGVsZXRlKGMpLGwuY2xlYXIoKX19fWZ1bmN0aW9uICRxZShjLGwpe3ZhciBhO3JldHVybiBudWxsPT1aN3x8bnVsbD09PShhPVo3LmdldChjLmd1aWQpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5nZXQobCl9'@;
put 'Y29uc3QgWSQ9bmV3IFdlYWtNYXAse3JlZ2lzdGVyOktxZSxnZXRJdGVtOndmZSxoYXNJdGVtOkNmZSxnZXROYW1lczpYcWV9PVUyKCJlZGl0b3JzIik7ZnVuY3Rpb24gcXFlKGMpe2NvbnN0IGw9e30sYT1jO3RoaXMuZ2V0Q29uc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gY30sdGhpcy5n'@;
put 'ZXRJbnN0YW5jZT1mdW5jdGlvbihkKXtyZXR1cm4gZC5ndWlkIGluIGx8fChsW2QuZ3VpZF09bmV3IGEoZCkpLGxbZC5ndWlkXX0sTWEuZ2V0U2luZ2xldG9uKCkuYWRkKCJhZnRlckRlc3Ryb3kiLGZ1bmN0aW9uKCl7bFt0aGlzLmd1aWRdPW51bGx9KX1mdW5jdGlvbiBTZmUoYyxsKXtsZXQg'@;
put 'YTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylZJC5nZXQoYyl8fEhkKG51bGwsYyksYT1ZJC5nZXQoYyk7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGMpdGhyb3cgRXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgYXMgImVkaXRvciIgcGFyYW1ldGVyJyk7'@;
put 'YT13ZmUoYyl9aWYoIWEpdGhyb3cgRXJyb3IoYE5vIGVkaXRvciByZWdpc3RlcmVkIHVuZGVyIG5hbWUgIiR7Y30iYCk7cmV0dXJuIGEuZ2V0SW5zdGFuY2UobCl9ZnVuY3Rpb24gWE8oYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIUNmZShjKSl0aHJvdyBFcnJvcihg'@;
put 'Tm8gcmVnaXN0ZXJlZCBlZGl0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gd2ZlKGMpLmdldENvbnN0cnVjdG9yKCl9ZnVuY3Rpb24gSGQoYyxsKXtjJiYic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkVESVRPUl9UWVBFKTtjb25zdCBhPW5ldyBxcWUobCk7InN0cmlu'@;
put 'ZyI9PXR5cGVvZiBjJiZLcWUoYyxhKSxZJC5zZXQobCxhKX1sZXQgcU89MDtjb25zdCBaMj1jbGFzcyB0SmV7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDsoZnVuY3Rpb24gSnFlKGMsbCxhKXty'@;
put 'ZXR1cm4obD1mdW5jdGlvbiBRcWUoYyl7dmFyIGw9ZnVuY3Rpb24gZUplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/'@;
put 'bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImNvbnRleHQiLHZvaWQgMCksdGhpcy5jb250ZXh0PWx8fHRoaXMsdGhpcy5jb250ZXh0LmV2'@;
put 'ZW50TGlzdGVuZXJzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzPVtdKX1hZGRFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2Z1bmN0aW9uIGYodil7ZC5jYWxsKHRoaXMsZnVuY3Rp'@;
put 'b24gbkplKGMpe2NvbnN0IGw9Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7bC5hcHBseSh0aGlzKSx6Mih0aGlzKX0sY30odikpfXJldHVybiB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7ZWxl'@;
put 'bWVudDpsLGV2ZW50OmEsY2FsbGJhY2s6ZCxjYWxsYmFja1Byb3h5OmYsb3B0aW9uczpoLGV2ZW50TWFuYWdlcjp0aGlzfSksbC5hZGRFdmVudExpc3RlbmVyKGEsZixoKSxxTys9MSwoKT0+e3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl9fXJlbW92ZUV2ZW50TGlzdGVuZXIobCxh'@;
put 'LGQpe2xldCB2LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxmPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDtmOylpZihmLT0xLHY9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2ZdLHYuZXZlbnQ9PT1h'@;
put 'JiZ2LmVsZW1lbnQ9PT1sKXtpZihkJiZkIT09di5jYWxsYmFja3x8aCYmdi5ldmVudE1hbmFnZXIhPT10aGlzKWNvbnRpbnVlO3RoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxpY2UoZiwxKSx2LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2LmV2ZW50LHYuY2FsbGJhY2tQcm94'@;
put 'eSx2Lm9wdGlvbnMpLHFPLT0xfX1jbGVhckV2ZW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuY29udGV4dClyZXR1cm47bGV0IGE9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3Io'@;
put 'O2E7KXthLT0xO2NvbnN0IGQ9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2FdO2wmJmQuZXZlbnRNYW5hZ2VyIT09dGhpc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxpY2UoYSwxKSxkLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLmV2ZW50LGQuY2FsbGJhY2tQ'@;
put 'cm94eSxkLm9wdGlvbnMpLHFPLT0xKX19Y2xlYXIoKXt0aGlzLmNsZWFyRXZlbnRzKCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNvbnRleHQ9bnVsbH1kZXN0cm95V2l0aE93bkV2ZW50c09ubHkoKXt0aGlzLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmNvbnRleHQ9bnVsbH1m'@;
put 'aXJlRXZlbnQobCxhKXtsZXQgZD1sLmRvY3VtZW50LGg9bDtkfHwoZD1sLm93bmVyRG9jdW1lbnQ/bC5vd25lckRvY3VtZW50OmwsaD1kLmRlZmF1bHRWaWV3KTtjb25zdCBmPXtidWJibGVzOiEwLGNhbmNlbGFibGU6Im1vdXNlbW92ZSIhPT1hLHZpZXc6aCxkZXRhaWw6MCxzY3JlZW5YOjAs'@;
put 'c2NyZWVuWTowLGNsaWVudFg6MSxjbGllbnRZOjEsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0OnZvaWQgMH07bGV0IHY7ZC5jcmVhdGVFdmVudD8odj1kLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLHYuaW5pdE1v'@;
put 'dXNlRXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlLGYudmlldyxmLmRldGFpbCxmLnNjcmVlblgsZi5zY3JlZW5ZLGYuY2xpZW50WCxmLmNsaWVudFksZi5jdHJsS2V5LGYuYWx0S2V5LGYuc2hpZnRLZXksZi5tZXRhS2V5LGYuYnV0dG9uLGYucmVsYXRlZFRhcmdldHx8ZC5ib2R5LnBh'@;
put 'cmVudE5vZGUpKTp2PWQuY3JlYXRlRXZlbnRPYmplY3QoKSxsLmRpc3BhdGNoRXZlbnQ/bC5kaXNwYXRjaEV2ZW50KHYpOmwuZmlyZUV2ZW50KGBvbiR7YX1gLHYpfX07ZnVuY3Rpb24gVzcoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNKZShjKXt2YXIgbD1mdW5jdGlvbiBvSmUoYyxsKXtp'@;
put 'Zigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJp'@;
put 'bWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6'@;
put 'YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEckKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQ'@;
put 'cml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgSk89bmV3IFdlYWtTZXQ7Y2xhc3MgJCR7Y29uc3RydWN0b3IobCxhLGQpeyhmdW5jdGlvbiBpSmUoYyxsKXsoZnVuY3Rpb24gYUplKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'Q2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLEpPKSxXNyh0aGlzLCJob3QiLHZvaWQgMCksVzcodGhpcywidGFibGVNZXRhIix2b2lkIDApLFc3KHRoaXMsInNlbGVjdGlvbiIsdm9p'@;
put 'ZCAwKSxXNyh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCksVzcodGhpcywiZGVzdHJveWVkIiwhMSksVzcodGhpcywiYWN0aXZlRWRpdG9yIix2b2lkIDApLFc3KHRoaXMsImNlbGxQcm9wZXJ0aWVzIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy50YWJsZU1ldGE9YSx0aGlzLnNlbGVjdGlv'@;
put 'bj1kLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBaMihsKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsaD0+RyQoSk8sdGhpcyxNZmUpLmNhbGwodGhpcyxoKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsaD0+RyQoSk8sdGhpcyxNZmUp'@;
put 'LmNhbGwodGhpcyxoKSksdGhpcy5ob3Qudmlldy5fd3QudXBkYXRlKCJvbkNlbGxEYmxDbGljayIsKGgsZix2KT0+RyQoSk8sdGhpcyxsSmUpLmNhbGwodGhpcyxoLGYsdikpfWdldEFjdGl2ZUVkaXRvcigpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvcn1wcmVwYXJlRWRpdG9yKCl7dmFyIGw7'@;
put 'aWYodGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXJldHVybiB2b2lkIHRoaXMuY2xvc2VFZGl0b3IoITEsITEsRz0+e0cmJnRoaXMucHJlcGFyZUVkaXRvcigpfSk7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo'@;
put 'KSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2lmKCFhfHxhLmlzSGVhZGVyKCkpcmV0dXJuO2NvbnN0e3JvdzpkLGNvbDpofT1hLGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO2xldCB2PWQsTT1oO2lmKEFycmF5LmlzQXJy'@;
put 'YXkoZikmJihbdixNXT1mKSx0aGlzLmNlbGxQcm9wZXJ0aWVzPXRoaXMuaG90LmdldENlbGxNZXRhKHYsTSksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgST10aGlzLmhvdC5nZXRDZWxsKGQsaCwhMCk7aWYoSSl7Y29u'@;
put 'c3QgRz10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHJlPXRoaXMuaG90LmNvbFRvUHJvcChNKSx1ZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksTSk7dGhpcy5hY3RpdmVFZGl0b3I9U2ZlKEcsdGhpcy5o'@;
put 'b3QpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUoZCxoLHJlLEksdWUsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsZXQgZj10aGlzLmhv'@;
put 'dC5ydW5Ib29rcygiYmVmb3JlQmVnaW5FZGl0aW5nIixoLmhpZ2hsaWdodC5yb3csaC5oaWdobGlnaHQuY29sLGwsYSxkKTthIGluc3RhbmNlb2YgTW91c2VFdmVudCYmImJvb2xlYW4iIT10eXBlb2YgZiYmKGY9MD09PXRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmguaXNT'@;
put 'aW5nbGUoKSksITEhPT1mPyh0aGlzLmFjdGl2ZUVkaXRvcnx8KHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKSx0aGlzLnByZXBhcmVFZGl0b3IoKSksdGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0aGlzLmFjdGl2ZUVkaXRvci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2ZUVk'@;
put 'aXRvci5iZWdpbkVkaXRpbmcobCxhKSkpOnRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKX1jbG9zZUVkaXRvcihsLGEsZCl7dGhpcy5hY3RpdmVFZGl0b3I/dGhpcy5hY3RpdmVFZGl0b3IuZmluaXNoRWRpdGluZyhsLGEsZCk6ZCYmZCghMSl9Y2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsKXt0'@;
put 'aGlzLmNsb3NlRWRpdG9yKCExLGwpfWNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobCl7dGhpcy5jbG9zZUVkaXRvcighMCxsKX1jbGVhckFjdGl2ZUVkaXRvcigpe3RoaXMuYWN0aXZlRWRpdG9yPXZvaWQgMH1pc0NlbGxFZGl0YWJsZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90LmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykse3JvdzpkLGNvbDpofT1sLmhpZ2hsaWdodCx7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdCxNPWYu'@;
put 'aXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhkKSl8fHYuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihoKSk7cmV0dXJuISh0aGlzLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5fHwhYXx8TSl9bW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCl7Y29uc3QgYT17Li4uImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhsKTp0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzfTtsLnNoaWZ0S2V5JiYoYS5yb3c9LWEucm93LGEuY29sPS1hLmNvbCksdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlw'@;
put 'bGUoKT90aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cyhhLnJvdyxhLmNvbCk6dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5yb3csYS5jb2wsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWZ1bmN0aW9uIE1mZShj'@;
put 'KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHxPbShjKSlyZXR1cm47Y29uc3R7a2V5Q29kZTphfT1jLGQ9KGMuY3RybEtleXx8Yy5tZXRhS2V5KSYmIWMuYWx0S2V5'@;
put 'OyghdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yJiYhdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpJiYhViQoYSkmJiFwZmUoYSkmJiFkJiYhdGhpcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsYyl9ZnVuY3Rpb24gbEplKGMsbCl7bC5pc0Nl'@;
put 'bGwoKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT90aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk6dGhpcy5vcGVuRWRpdG9yKG51bGwsYywhMCkpfWNvbnN0IHhmZT1uZXcgV2Vha01hcDskJC5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9'@;
put 'eGZlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3ICQkKGMsbCxhKSx4ZmUuc2V0KGMsZCkpLGR9O2NvbnN0IGNKZT0kJDtmdW5jdGlvbiBSRShjLGwsYSl7RWZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBFZmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg'@;
put 'aW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGxjKGMsbCl7cmV0dXJuIGMuZ2V0KHlnKGMsbCkpfWZ1bmN0aW9uIExFKGMsbCxhKXtyZXR1cm4gYy5zZXQoeWcoYyxsKSxhKSxhfWZ1bmN0aW9uIHlnKGMsbCxhKXtpZigi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBkXz1PYmplY3QuZnJlZXplKHtDRUxMOiJj'@;
put 'ZWxsIixNSVhFRDoibWl4ZWQifSk7dmFyICR1PW5ldyBXZWFrTWFwLFFPPW5ldyBXZWFrTWFwLGVQPW5ldyBXZWFrTWFwLHRQPW5ldyBXZWFrTWFwLG5QPW5ldyBXZWFrTWFwLEZtPW5ldyBXZWFrU2V0O2NsYXNzIGRKZXtjb25zdHJ1Y3RvcihsKXt2YXIgYT10aGlzOyhmdW5jdGlvbiB1SmUo'@;
put 'YyxsKXtFZmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsRm0pLFJFKHRoaXMsJHUsdm9pZCAwKSxSRSh0aGlzLFFPLHZvaWQgMCksUkUodGhpcyxlUCwxKSxSRSh0aGlzLHRQLG51bGwpLFJFKHRoaXMsblAsbmV3IE1hcCk7Y29uc3QgZD1sLmdldFNldHRpbmdzKCk7TEUoJHUsdGhpcyxsKSxMRShR'@;
put 'Tyx0aGlzLGQuaW1lRmFzdEVkaXQ/ZF8uTUlYRUQ6ZF8uQ0VMTCksbGMoJHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTty'@;
put 'ZXR1cm4geWcoRm0sYSxmSmUpLmNhbGwoYSwuLi5mKX0pLGxjKCR1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhG'@;
put 'bSxhLFRmZSkuY2FsbChhLC4uLmYpfSksbGMoJHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geWcoRm0s'@;
put 'YSxUZmUpLmNhbGwoYSwuLi5mKX0pLGxjKCR1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhGbSxhLGhKZSku'@;
put 'Y2FsbChhLC4uLmYpfSl9Z2V0Rm9jdXNNb2RlKCl7cmV0dXJuIGxjKFFPLHRoaXMpfXNldEZvY3VzTW9kZShsKXtPYmplY3QudmFsdWVzKGRfKS5pbmNsdWRlcyhsKT9MRShRTyx0aGlzLGwpOllvKGAiJHtsfSIgaXMgbm90IGEgdmFsaWQgZm9jdXMgbW9kZS5gKX1nZXRSZWZvY3VzRGVsYXko'@;
put 'KXtyZXR1cm4gbGMoZVAsdGhpcyl9c2V0UmVmb2N1c0RlbGF5KGwpe0xFKGVQLHRoaXMsbCl9c2V0UmVmb2N1c0VsZW1lbnRHZXR0ZXIobCl7TEUodFAsdGhpcyxsKX1nZXRSZWZvY3VzRWxlbWVudCgpe3ZhciBsO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsYyh0UCx0aGlzKT9sYyh0UCx0'@;
put 'aGlzKS5jYWxsKHRoaXMpOm51bGw9PT0obD1sYygkdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuVEVYVEFSRUF9Zm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChsKXtjb25zdCBhPWQ9Pnt2YXIgaCxmO2NvbnN0IHY9bnVsbD09PShoPWxjKCR1LHRoaXMpLmdl'@;
put 'dFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodDtpZighdilyZXR1cm47bGV0IE09bGMoJHUsdGhpcykucnVuSG9va3MoIm1vZGlmeUZvY3VzZWRFbGVtZW50Iix2LnJvdyx2LmNvbCxkKTtrcChNKXx8KE09ZCksTSYmKG51bGw9PT0oZj1sYygkdSx0'@;
put 'aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWZ8fCFmLmlzT3BlbmVkKCkpJiZNLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9O2w/YShsKTp5ZyhGbSx0aGlzLEskKS5jYWxsKHRoaXMsZD0+YShkKSl9cmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKXt2YXIgbDtsZXQgYT1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bGMoZVAsdGhpcyk7dmFyIGQsaDshbGMoJHUsdGhpcykuZ2V0U2V0dGluZ3MoKS5pbWVGYXN0RWRpdHx8bnVsbCE9PShsPWxjKCR1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKSYmdm9pZCAwIT09bCYm'@;
put 'bC5pc09wZW5lZCgpfHwobnVsbD09PShkPWxjKCR1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09ZHx8bnVsbD09PShoPWQucmVmcmVzaFZhbHVlKXx8dm9pZCAwPT09aHx8aC5jYWxsKGQpLGxjKG5QLHRoaXMpLmhhcyhhKXx8bGMoblAsdGhpcykuc2V0KGEsSUUoKCk9Pnt2'@;
put 'YXIgZjtsYygkdSx0aGlzKS5pc0Rlc3Ryb3llZHx8bnVsbD09PShmPXRoaXMuZ2V0UmVmb2N1c0VsZW1lbnQoKSl8fHZvaWQgMD09PWZ8fGYuc2VsZWN0KCl9LGEpKSxsYyhuUCx0aGlzKS5nZXQoYSkoKSl9fWZ1bmN0aW9uIEskKGMpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPWxjKCR1LHRo'@;
put 'aXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8IWxjKCR1LHRoaXMpLnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpKXJldHVybiB2b2lkIGMobnVsbCk7Y29uc3QgZD1sYygkdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29s'@;
put 'LCEwKTtudWxsPT09ZD9sYygkdSx0aGlzKS5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLCgpPT57YyhsYygkdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEwKSl9KTpjKGQpfWZ1bmN0aW9uIFRmZSgpe3lnKEZtLHRoaXMsSyQpLmNhbGwodGhpcyxjPT57Y29uc3R7YWN0aXZlRWxlbWVu'@;
put 'dDpsfT1sYygkdSx0aGlzKS5yb290RG9jdW1lbnQ7bCYmWU8obCkmJmwuYmx1cigpLHRoaXMuZm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChjKX0pfWZ1bmN0aW9uIGhKZSgpe3lnKEZtLHRoaXMsSyQpLmNhbGwodGhpcyxjPT57dGhpcy5nZXRGb2N1c01vZGUoKT09PWRfLk1JWEVEJiYiVEQiPT09'@;
put 'Yz8ubm9kZU5hbWUmJnRoaXMucmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKX0pfWZ1bmN0aW9uIGZKZShjKXsiYm9vbGVhbiI9PXR5cGVvZiBjLmltZUZhc3RFZGl0JiZ0aGlzLnNldEZvY3VzTW9kZShjLmltZUZhc3RFZGl0P2RfLk1JWEVEOmRfLkNFTEwpfWIoMTYyMjkpLGIoNDQyMTMpO2Nv'@;
put 'bnN0IEFmZT17IiZuYnNwOyI6IiAiLCImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+In0scEplPW5ldyBSZWdFeHAoT2JqZWN0LmtleXMoQWZlKS5tYXAoYz0+YCgke2N9KWApLmpvaW4oInwiKSwiZ2kiKTtmdW5jdGlvbiBYJChjKXtjb25zdCBsPWMuaGFzQ29sSGVhZGVycygpLGE9'@;
put 'Yy5oYXNSb3dIZWFkZXJzKCksZD1bbD8tMTowLGE/LTE6MCxjLmNvdW50Um93cygpLTEsYy5jb3VudENvbHMoKS0xXSxoPWMuZ2V0RGF0YSguLi5kKSxmPWgubGVuZ3RoLHY9Zj4wP2hbMF0ubGVuZ3RoOjAsTT1bIjx0YWJsZT4iLCI8L3RhYmxlPiJdLEk9bD9bIjx0aGVhZD4iLCI8L3RoZWFk'@;
put 'PiJdOltdLEc9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxyZT1hPzE6MCx1ZT1sPzE6MDtmb3IobGV0IHllPTA7eWU8Zjt5ZSs9MSl7Y29uc3QgRWU9bCYmMD09PXllLEJlPVtdO2ZvcihsZXQgc3Q9MDtzdDx2O3N0Kz0xKXtjb25zdCBwdD0hRWUmJmEmJjA9PT1zdDtsZXQgZHQ9IiI7aWYoRWUp'@;
put 'ZHQ9YDx0aD4ke2MuZ2V0Q29sSGVhZGVyKHN0LXJlKX08L3RoPmA7ZWxzZSBpZihwdClkdD1gPHRoPiR7Yy5nZXRSb3dIZWFkZXIoeWUtdWUpfTwvdGg+YDtlbHNle2NvbnN0IHF0PWhbeWVdW3N0XSx7aGlkZGVuOm1uLHJvd3NwYW46d24sY29sc3Bhbjpobn09Yy5nZXRDZWxsTWV0YSh5ZS11'@;
put 'ZSxzdC1yZSk7aWYoIW1uKXtjb25zdCBNbj1bXTtpZih3biYmTW4ucHVzaChgcm93c3Bhbj0iJHt3bn0iYCksaG4mJk1uLnB1c2goYGNvbHNwYW49IiR7aG59ImApLGpjKHF0KSlkdD1gPHRkICR7TW4uam9pbigiICIpfT48L3RkPmA7ZWxzZXtjb25zdCBNcj1xdC50b1N0cmluZygpLnJlcGxh'@;
put 'Y2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtkdD1gPHRkICR7TW4uam9pbigiICIp'@;
put 'fT4ke01yfTwvdGQ+YH19fUJlLnB1c2goZHQpfWNvbnN0IEdlPVsiPHRyPiIsLi4uQmUsIjwvdHI+Il0uam9pbigiIik7RWU/SS5zcGxpY2UoMSwwLEdlKTpHLnNwbGljZSgtMSwwLEdlKX1yZXR1cm4gTS5zcGxpY2UoMSwwLEkuam9pbigiIiksRy5qb2luKCIiKSksTS5qb2luKCIiKX1mdW5j'@;
put 'dGlvbiBxJChjKXtjb25zdCBsPWMubGVuZ3RoLGE9WyI8dGFibGU+Il07Zm9yKGxldCBkPTA7ZDxsO2QrPTEpe2NvbnN0IGg9Y1tkXSxmPWgubGVuZ3RoLHY9W107MD09PWQmJmEucHVzaCgiPHRib2R5PiIpO2ZvcihsZXQgTT0wO008ZjtNKz0xKXtjb25zdCBJPWhbTV0sRz1qYyhJKT8iIjpJ'@;
put 'LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMHsyLH0vZ2kscmU9PmA8c3BhbiBz'@;
put 'dHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KHJlLmxlbmd0aC0xKX0gPC9zcGFuPmApLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7di5wdXNoKGA8dGQ+JHtHfTwvdGQ+YCl9YS5wdXNoKCI8dHI+IiwuLi52LCI8L3RyPiIpLGQrMT09PWwmJmEucHVzaCgiPC90Ym9k'@;
put 'eT4iKX1yZXR1cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEuam9pbigiIil9ZnVuY3Rpb24ga2ZlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtjb25zdCBhPXt9LGQ9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50'@;
put 'KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09dHlwZW9mIGYpe2NvbnN0IHF0PWYucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLG1uPT57Y29uc3Qgd249bW4ubWF0Y2goLzx0ZFxiW14+XSo/'@;
put 'Pi9nKVswXTtyZXR1cm5gJHt3bn0ke21uLnN1YnN0cmluZyh3bi5sZW5ndGgsbW4ubGFzdEluZGV4T2YoIjwiKSkudHJpbSgpLnJlcGxhY2VBbGwoL1xuXHMrL2csIiAiKS5yZXBsYWNlQWxsKC88cC4qPz4vZywiXG4iKS5yZXBsYWNlKCJcbiIsIiIpLnJlcGxhY2VBbGwoLzxcLyguKik+XHMr'@;
put 'JC9nbSwiPC8kMT4iKS5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwiIikucmVwbGFjZUFsbCgvXiZuYnNwOyQvZ20sIiIpfTwvdGQ+YH0pO2guaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHtxdH1gKSxmPWgucXVlcnlTZWxlY3RvcigidGFibGUiKX1pZighZnx8IWZ1'@;
put 'bmN0aW9uIGdKZShjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0IHY9aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksTT1udWxsIT09Zi5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLEk9Zi5xdWVyeVNlbGVjdG9y'@;
put 'KCJ0ciIpLEc9ST9BcnJheS5mcm9tKEkuY2VsbHMpLnJlZHVjZSgocXQsbW4pPT5xdCttbi5jb2xTcGFuLDApLShNPzE6MCk6MCxyZT1mLnRGb290JiZBcnJheS5mcm9tKGYudEZvb3Qucm93cyl8fFtdLHVlPVtdO2xldCB5ZT0hMSxFZT0wLEJlPTA7aWYoZi50SGVhZCl7Y29uc3QgcXQ9QXJy'@;
put 'YXkuZnJvbShmLnRIZWFkLnJvd3MpLmZpbHRlcihtbj0+e2NvbnN0IHduPW51bGwhPT1tbi5xdWVyeVNlbGVjdG9yKCJ0ZCIpO3JldHVybiB3biYmdWUucHVzaChtbiksIXdufSk7RWU9cXQubGVuZ3RoLHllPUVlPjAsRWU+MT9hLm5lc3RlZEhlYWRlcnM9QXJyYXkuZnJvbShxdCkucmVkdWNl'@;
put 'KChtbix3bik9Pntjb25zdCBobj1BcnJheS5mcm9tKHduLmNlbGxzKS5yZWR1Y2UoKE1uLE1yLGtyKT0+e2lmKE0mJjA9PT1rcilyZXR1cm4gTW47Y29uc3R7Y29sU3Bhbjpxbixpbm5lckhUTUw6Z3J9PU1yO3JldHVybiBNbi5wdXNoKHFuPjE/e2xhYmVsOmdyLGNvbHNwYW46cW59OmdyKSxN'@;
put 'bn0sW10pO3JldHVybiBtbi5wdXNoKGhuKSxtbn0sW10pOnllJiYoYS5jb2xIZWFkZXJzPUFycmF5LmZyb20ocXRbMF0uY2hpbGRyZW4pLnJlZHVjZSgobW4sd24saG4pPT4oTSYmMD09PWhufHxtbi5wdXNoKHduLmlubmVySFRNTCksbW4pLFtdKSl9dWUubGVuZ3RoJiYoYS5maXhlZFJvd3NU'@;
put 'b3A9dWUubGVuZ3RoKSxyZS5sZW5ndGgmJihhLmZpeGVkUm93c0JvdHRvbT1yZS5sZW5ndGgpO2NvbnN0IEdlPVsuLi51ZSwuLi5BcnJheS5mcm9tKGYudEJvZGllcykucmVkdWNlKChxdCxtbik9PihxdC5wdXNoKC4uLkFycmF5LmZyb20obW4ucm93cykpLHF0KSxbXSksLi4ucmVdO0JlPUdl'@;
put 'Lmxlbmd0aDtjb25zdCBzdD1uZXcgQXJyYXkoQmUpO2ZvcihsZXQgcXQ9MDtxdDxCZTtxdCsrKXN0W3F0XT1uZXcgQXJyYXkoRyk7Y29uc3QgcHQ9W10sZHQ9W107Zm9yKGxldCBxdD0wO3F0PEJlO3F0Kyspe2NvbnN0IHduPUFycmF5LmZyb20oR2VbcXRdLmNlbGxzKSxobj13bi5sZW5ndGg7'@;
put 'Zm9yKGxldCBNbj0wO01uPGhuO01uKyspe2NvbnN0IE1yPXduW01uXSx7bm9kZU5hbWU6a3IsaW5uZXJIVE1MOnFuLHJvd1NwYW46Z3IsY29sU3Bhbjpxcn09TXIsX2k9c3RbcXRdLmZpbmRJbmRleChQbj0+dm9pZCAwPT09UG4pO2lmKCJURCI9PT1rcil7aWYoZ3I+MXx8cXI+MSl7Zm9yKGxl'@;
put 'dCBCcj1xdDtCcjxxdCtncjtCcisrKWlmKEJyPEJlKWZvcihsZXQgWXI9X2k7WXI8X2krcXI7WXIrKylzdFtCcl1bWXJdPW51bGw7Y29uc3QgVXI9TXIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO1VyJiZVci5pbmNsdWRlcygibXNvLWlnbm9yZTpjb2xzcGFuIil8fHB0LnB1c2goe2NvbDpfaSxy'@;
put 'b3c6cXQscm93c3Bhbjpncixjb2xzcGFuOnFyfSl9bGV0IFBuPSIiO1BuPXYmJi9leGNlbC9naS50ZXN0KHYuY29udGVudCk/cW4ucmVwbGFjZSgvW1xyXG5dW1x4MjBdezAsMn0vZywiICIpLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT9bXHgyMF17MCwzfS9naW0sIlxyXG4iKTpxbi5y'@;
put 'ZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/L2dpbSwiXHJcbiIpLHN0W3F0XVtfaV09UG4ucmVwbGFjZShwSmUsVXI9PkFmZVtVcl0pfWVsc2UgZHQucHVzaChxbil9fXJldHVybiBwdC5sZW5ndGgmJihhLm1lcmdlQ2VsbHM9cHQpLGR0Lmxlbmd0aCYmKGEucm93SGVhZGVycz1kdCksc3Qu'@;
put 'bGVuZ3RoJiYoYS5kYXRhPXN0KSxhfWZ1bmN0aW9uIGcxKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPXR5cGVvZiBjO2lmKCJudW1iZXIiPT09YSlyZXR1cm4haXNOYU4oYykmJmlzRmluaXRlKGMpO2lm'@;
put 'KCJzdHJpbmciPT09YSl7aWYoMD09PWMubGVuZ3RoKXJldHVybiExO2lmKDE9PT1jLmxlbmd0aClyZXR1cm4vXGQvLnRlc3QoYyk7Y29uc3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWyIuIiwuLi5sXSkpLm1hcChoPT5gXFwke2h9YCkuam9pbigifCIpO3JldHVybiBuZXcgUmVnRXhwKGBeWyst'@;
put 'XT8oKCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1ZU9mKCl8fGMgaW5zdGFuY2VvZiBEYXRlKX1mdW5jdGlvbiBE'@;
put 'ZmUoYyl7cmV0dXJuIGcxKGMsWyIsIl0pfWZ1bmN0aW9uIEthKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0xOysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIEokKGMsbCxhKXtsZXQgZD1jKzE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBsJiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gUSQoYyxsKXtyZXR1cm4gbD1wYXJzZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChjKmwvMTAwLDEwKX1mdW5jdGlvbiBBbyhjLGwsYSl7cmV0dXJu'@;
put 'IE1hdGgubWluKGMsbCk9PT1jP2w6TWF0aC5tYXgoYyxhKT09PWM/YTpjfWNvbnN0IElmZT1uZXcgTWFwKFtbImFzYyIsWy0xLDFdXSxbImRlc2MiLFsxLC0xXV1dKSx2SmU9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gLHlKZT1jPT5gVGhl'@;
put 'IHByaW9yaXR5ICcke2N9JyBpcyBub3QgYSBudW1iZXIuYCxfSmU9Yz0+YFRoZSBpZCAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gO2Z1bmN0aW9uIHJQKCl7bGV0e2Vycm9ySWRFeGlzdHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/'@;
put 'YXJndW1lbnRzWzBdOnt9O2NvbnN0IGw9bmV3IE1hcDtmdW5jdGlvbiBNKCl7cmV0dXJuWy4uLmxdfWZ1bmN0aW9uIEkoRyl7cmV0dXJuIGwuaGFzKEcpfXJldHVybiBjPWZsKGMpP2M6X0plLHthZGRJdGVtOmZ1bmN0aW9uIGEoRyxyZSl7aWYoSShHKSl0aHJvdyBuZXcgRXJyb3IoYyhHKSk7'@;
put 'bC5zZXQoRyxyZSl9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIGYoRyl7Y29uc3RbcmVdPU0oKS5maW5kKHVlPT57bGV0W3llLEVlXT11ZTtyZXR1cm4gRz09PUVlJiZ5ZX0pfHxbbnVsbF07cmV0dXJuIHJlfSxnZXRJdGVtOmZ1bmN0aW9uIHYoRyl7cmV0'@;
put 'dXJuIGwuZ2V0KEcpfSxnZXRJdGVtczpNLGhhc0l0ZW06SSxyZW1vdmVJdGVtOmZ1bmN0aW9uIGQoRyl7cmV0dXJuIGwuZGVsZXRlKEcpfX19Y29uc3Qgd0plPWM9PmAnJHtjfScgdmFsdWUgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIHVuaXF1ZSBzZXQuYCx0Sz1jPT5gVGhlcmUgaXMgYWxy'@;
put 'ZWFkeSByZWdpc3RlcmVkICIke2N9IiBwbHVnaW4uYCxSZmU9ZnVuY3Rpb24gYkplKCl7bGV0e2Vycm9yUHJpb3JpdHlFeGlzdHM6YyxlcnJvclByaW9yaXR5TmFOOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBhPW5l'@;
put 'dyBNYXA7cmV0dXJuIGM9ZmwoYyk/Yzp2SmUsbD1mbChsKT9sOnlKZSx7YWRkSXRlbTpmdW5jdGlvbiBkKGYsdil7aWYoIWcxKGYpKXRocm93IG5ldyBFcnJvcihsKGYpKTtpZihhLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7YS5zZXQoZix2KX0sZ2V0SXRlbXM6ZnVuY3Rpb24gaCgp'@;
put 'e2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiYXNjIjtjb25zdFt2LE1dPUlmZS5nZXQoZil8fElmZS5nZXQoImFzYyIpO3JldHVyblsuLi5hXS5zb3J0KChJLEcpPT5JWzBdPEdbMF0/djpNKS5tYXAoST0+SVsxXSl9fX0oe2Vy'@;
put 'cm9yUHJpb3JpdHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4gb24gcHJpb3JpdHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5hTjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBudW1iZXIuYH0pLExmZT1mdW5jdGlvbiBDSmUoKXtsZXR7ZXJy'@;
put 'b3JJdGVtRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0dXJuIGM9ZmwoYyk/Yzp3SmUse2FkZEl0ZW06ZnVuY3Rpb24gYShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhm'@;
put 'KSk7bC5hZGQoZil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0aW9uIGQoKXtyZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4aXN0czp0S30pLG5LPXJQKHtlcnJvcklkRXhpc3RzOnRLfSk7ZnVuY3Rpb24gcksoKXtyZXR1cm5bLi4uUmZlLmdldEl0ZW1z'@;
put 'KCksLi4uTGZlLmdldEl0ZW1zKCldfWZ1bmN0aW9uIE9FKGMpe2NvbnN0IGw9ZjEoYyk7cmV0dXJuIG5LLmdldEl0ZW0obCl9ZnVuY3Rpb24gUG8oYyxsLGEpe1tjLGwsYV09ZnVuY3Rpb24geEplKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tF'@;
put 'WSxhPWwuUExVR0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09T0UoYykmJmZ1bmN0aW9uIE1KZShjLGwsYSl7Y29uc3QgZD1mMShjKTtpZihuSy5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcih0SyhkKSk7dm9pZCAwPT09YT9MZmUuYWRkSXRlbShkKTpSZmUuYWRkSXRl'@;
put 'bShhLGQpLG5LLmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOkVKZSxnZXRJdGVtOlRKZSxoYXNJdGVtOk9mZSxnZXROYW1lczpBSmV9PVUyKCJyZW5kZXJlcnMiKTtmdW5jdGlvbiBpUChjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighT2ZlKGMpKXRo'@;
put 'cm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIFRKZShjKX1mdW5jdGlvbiBMaChjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJfVFlQRSksRUplKGMsbCl9Y29uc3R7cmVnaXN0ZXI6a0plLGdl'@;
put 'dEl0ZW06REplLGhhc0l0ZW06UGZlLGdldE5hbWVzOklKZX09VTIoInZhbGlkYXRvcnMiKTtmdW5jdGlvbiBpSyhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighUGZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtj'@;
put 'fSIgbmFtZWApO3JldHVybiBESmUoYyl9ZnVuY3Rpb24gWTcoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlZBTElEQVRPUl9UWVBFKSxrSmUoYyxsKX1mdW5jdGlvbiBEcChjLGwsYSl7KGZ1bmN0aW9uIFJKZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSmEoYyxsKXtyZXR1cm4gYy5nZXQoRmZlKGMsbCkpfWZ1bmN0aW9uIEhtKGMsbCxhKXtyZXR1cm4gYy5zZXQoRmZlKGMsbCks'@;
put 'YSksYX1mdW5jdGlvbiBGZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZh'@;
put 'ciBXMj1uZXcgV2Vha01hcCxhSz1uZXcgV2Vha01hcCxDMD1uZXcgV2Vha01hcCxoXz1uZXcgV2Vha01hcCxhUD1uZXcgV2Vha01hcCxsMz1uZXcgV2Vha01hcCxzSz1uZXcgV2Vha01hcCxQRT1uZXcgV2Vha01hcCxHNz1uZXcgV2Vha01hcCxJcD1uZXcgV2Vha01hcDtjb25zdCBIZmU9Y2xh'@;
put 'c3MgTEple2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtsZXQgTT1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbDtEcCh0aGlzLFcyLHZvaWQgMCksRHAodGhpcyxhSyx2b2lkIDApLERwKHRoaXMsQzAsdm9pZCAwKSxEcCh0aGlzLGhf'@;
put 'LHZvaWQgMCksRHAodGhpcyxhUCx2b2lkIDApLERwKHRoaXMsbDMsdm9pZCAwKSxEcCh0aGlzLHNLLHZvaWQgMCksRHAodGhpcyxQRSx2b2lkIDApLERwKHRoaXMsRzcsW251bGwsbnVsbF0pLERwKHRoaXMsSXAsW251bGwsbnVsbF0pLEhtKFcyLHRoaXMsZCksSG0oYUssdGhpcyxhKSxIbShD'@;
put 'MCx0aGlzLGYpLEhtKGhfLHRoaXMsdiksSG0oYVAsdGhpcyxNKSxIbShsMyx0aGlzLGgpLEhtKHNLLHRoaXMsbCksdGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lzdGVyRXZlbnRzKCl7SmEobDMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihKYShDMCx0aGlzKS5ob2xkZXIsImNvbnRleHRtZW51'@;
put 'IixkPT50aGlzLm9uQ29udGV4dE1lbnUoZCkpLEphKGwzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoSmEoQzAsdGhpcykuVEFCTEUsIm1vdXNlb3ZlciIsZD0+dGhpcy5vbk1vdXNlT3ZlcihkKSksSmEobDMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihKYShDMCx0aGlzKS5UQUJMRSwibW91c2Vv'@;
put 'dXQiLGQ9PnRoaXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e0phKGwzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoSmEoQzAsdGhpcykuaG9sZGVyLCJ0b3VjaHN0YXJ0IixkPT50aGlzLm9uVG91Y2hTdGFydChkKSksSmEobDMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihKYShDMCx0aGlz'@;
put 'KS5ob2xkZXIsInRvdWNoZW5kIixkPT50aGlzLm9uVG91Y2hFbmQoZCkpLHRoaXMubW9tZW50dW1TY3JvbGxpbmd8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nPXt9KSxKYShsMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKEphKEMwLHRoaXMpLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGlt'@;
put 'ZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmd8fEphKFcyLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlVG91Y2hTY3JvbGwiKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITAsdGhpcy5tb21lbnR1bVNj'@;
put 'cm9sbGluZy5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy50b3VjaEFwcGxpZWR8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITEsSmEoVzIsdGhpcykuZ2V0U2V0dGluZygib25BZnRlck1vbWVudHVtU2Nyb2xsIikpfSwyMDApfSl9O28zKCk/bCgpOih3JCgpJiZsKCks'@;
put 'KCgpPT57SmEobDMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihKYShDMCx0aGlzKS5ob2xkZXIsIm1vdXNldXAiLGQ9PnRoaXMub25Nb3VzZVVwKGQpKSxKYShsMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKEphKEMwLHRoaXMpLmhvbGRlciwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3du'@;
put 'KGQpKX0pKCkpfXNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQobCl7Y29uc3QgZD10aGlzLnBhcmVudENlbGwobCkuY29vcmRzO2lmKEphKFBFLHRoaXMpJiZkKXtjb25zdFtoLGZdPVtkLnJvdyxKYShQRSx0aGlzKS5mcm9tLnJvd10sW3YsTV09W2QuY29sLEphKFBFLHRoaXMpLmZyb20uY29sXTty'@;
put 'ZXR1cm4gaD09PWYmJnY9PT1NfXJldHVybiExfXBhcmVudENlbGwobCl7Y29uc3QgYT17fSxoPXhFKGwsWyJURCIsIlRIIl0sSmEoQzAsdGhpcykuVEFCTEUpO3JldHVybiBoPyhhLmNvb3Jkcz1KYShDMCx0aGlzKS5nZXRDb29yZHMoaCksYS5URD1oKTpncyhsLCJ3dEJvcmRlciIpJiZncyhs'@;
put 'LCJjdXJyZW50Iik/KGEuY29vcmRzPUphKGhfLHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlLmhpZ2hsaWdodCxhLlREPUphKEMwLHRoaXMpLmdldENlbGwoYS5jb29yZHMpKTpncyhsLCJ3dEJvcmRlciIpJiZncyhsLCJhcmVhIikmJkphKGhfLHRoaXMpLmdldEFyZWFTZWxl'@;
put 'Y3Rpb24oKS5jZWxsUmFuZ2UmJihhLmNvb3Jkcz1KYShoXyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJhbmdlLnRvLGEuVEQ9SmEoQzAsdGhpcykuZ2V0Q2VsbChhLmNvb3JkcykpLGF9b25Nb3VzZURvd24obCl7Y29uc3QgYT1KYShhSyx0aGlzKS5yb290RG9jdW1lbnQuYWN0aXZl'@;
put 'RWxlbWVudCxkPU4kKEoyZSxsLnRhcmdldCksaD1sLnRhcmdldDtpZighWyJURCIsIlRIIl0uaW5jbHVkZXMoYS5ub2RlTmFtZSkmJihoPT09YXx8ZCgwKT09PWF8fGQoMSk9PT1hKSlyZXR1cm47Y29uc3QgZj10aGlzLnBhcmVudENlbGwoaCk7Z3MoaCwiY29ybmVyIik/SmEoVzIsdGhpcyku'@;
put 'Z2V0U2V0dGluZygib25DZWxsQ29ybmVyTW91c2VEb3duIixsLGgpOmYuVEQmJkphKFcyLHRoaXMpLmhhcygib25DZWxsTW91c2VEb3duIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZURvd24iLGwsZi5jb29yZHMsZi5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxp'@;
put 'ZWQpJiZmLlREJiYoSmEoSXAsdGhpcylbMF09Zi5URCxjbGVhclRpbWVvdXQoSmEoRzcsdGhpcylbMF0pLEphKEc3LHRoaXMpWzBdPXNldFRpbWVvdXQoKCk9PntKYShJcCx0aGlzKVswXT1udWxsfSwxZTMpKX1vbkNvbnRleHRNZW51KGwpe2lmKEphKFcyLHRoaXMpLmhhcygib25DZWxsQ29u'@;
put 'dGV4dE1lbnUiKSl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb250ZXh0TWVudSIsbCxhLmNvb3JkcyxhLlREKX19b25Nb3VzZU92ZXIobCl7aWYoIUphKFcyLHRoaXMpLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0'@;
put 'dXJuO2NvbnN0IGE9SmEoQzAsdGhpcykuVEFCTEUsZD14RShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPUphKGFQLHRoaXMpfHx0aGlzO2QmJmQhPT1oLmxhc3RNb3VzZU92ZXImJkltKGQsYSkmJihoLmxhc3RNb3VzZU92ZXI9ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVy'@;
put 'IixsLEphKEMwLHRoaXMpLmdldENvb3JkcyhkKSxkKSl9b25Nb3VzZU91dChsKXtpZighSmEoVzIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU91dCIpKXJldHVybjtjb25zdCBhPUphKEMwLHRoaXMpLlRBQkxFLGQ9eEUobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD14RShsLnJlbGF0ZWRUYXJn'@;
put 'ZXQsWyJURCIsIlRIIl0sYSksZj1KYShhUCx0aGlzKXx8dGhpcztkJiZkIT09aCYmSW0oZCxhKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsbCxKYShDMCx0aGlzKS5nZXRDb29yZHMoZCksZCksbnVsbD09PWgmJihmLmxhc3RNb3VzZU92ZXI9bnVsbCkpfW9uTW91c2VV'@;
put 'cChsKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmSmEoVzIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZVVwIixsLGEuY29vcmRzLGEuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYm'@;
put 'KGEuVEQ9PT1KYShJcCx0aGlzKVswXSYmYS5URD09PUphKElwLHRoaXMpWzFdPyhncyhsLnRhcmdldCwiY29ybmVyIik/dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5lckRibENsaWNrIixsLGEuY29vcmRzLGEuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxh'@;
put 'LmNvb3JkcyxhLlREKSxKYShJcCx0aGlzKVswXT1udWxsLEphKElwLHRoaXMpWzFdPW51bGwpOmEuVEQ9PT1KYShJcCx0aGlzKVswXSYmKEphKElwLHRoaXMpWzFdPWEuVEQsY2xlYXJUaW1lb3V0KEphKEc3LHRoaXMpWzFdKSxKYShHNyx0aGlzKVsxXT1zZXRUaW1lb3V0KCgpPT57SmEoSXAs'@;
put 'dGhpcylbMV09bnVsbH0sNTAwKSkpfW9uVG91Y2hTdGFydChsKXtIbShQRSx0aGlzLEphKGhfLHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlKSx0aGlzLnRvdWNoQXBwbGllZD0hMCx0aGlzLm9uTW91c2VEb3duKGwpfW9uVG91Y2hFbmQobCl7dmFyIGE7Y29uc3QgZD1sLnRh'@;
put 'cmdldCxoPW51bGw9PT0oYT10aGlzLnBhcmVudENlbGwoZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvb3JkcyxmPUhhKGgpJiZoLnJvdz49MCYmaC5jb2w+PTA7aWYobC5jYW5jZWxhYmxlJiZmJiZKYShXMix0aGlzKS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3Qg'@;
put 'TT1bIkEiLCJCVVRUT04iLCJJTlBVVCJdO1MkKCkmJihLMmUoKXx8WDJlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCkmJiFNLmluY2x1ZGVzKGQudGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVm'@;
put 'YXVsdCgpfXRoaXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxoKXtjb25zdCBmPUphKFcyLHRoaXMpLmdldFNldHRpbmdQdXJlKGwpO2YmJmYoYSxkLGgsSmEoc0ssdGhpcykuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe2NsZWFyVGltZW91dChK'@;
put 'YShHNyx0aGlzKVswXSksY2xlYXJUaW1lb3V0KEphKEc3LHRoaXMpWzFdKSxKYShsMyx0aGlzKS5kZXN0cm95KCl9fTtmdW5jdGlvbiBvSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT0plKGMpe3ZhciBsPWZ1bmN0aW9uIFBKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0'@;
put 'dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp'@;
put 'dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgSEplPWNsYXNzIEZKZXtjb25zdHJ1Y3RvcihsLGEsZCl7b0sodGhpcywib2Zmc2V0Iix2b2lkIDApLG9LKHRoaXMsInRvdGFsIix2b2lkIDApLG9LKHRoaXMsImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFs'@;
put 'PWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMu'@;
put 'dW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMu'@;
put 'b2Zmc2V0dGVkVEgobCkpfXNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiBsSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTkplKGMpe3ZhciBsPWZ1bmN0'@;
put 'aW9uIFZKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgakplPWNsYXNzIEJKZXtjb25zdHJ1Y3RvcihsLGEsZCl7bEsodGhpcywib2Zmc2V0Iix2b2lkIDApLGxLKHRoaXMsInRvdGFsIix2b2lkIDApLGxLKHRoaXMs'@;
put 'ImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zm'@;
put 'c2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhs'@;
put 'KXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiBzUChjLGwsYSl7cmV0dXJu'@;
put 'KGw9ZnVuY3Rpb24gekplKGMpe3ZhciBsPWZ1bmN0aW9uIFVKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi'@;
put 'In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgWkple2NvbnN0cnVjdG9yKCl7c1AodGhpcywiY3VycmVudFNpemUiLDApLHNQKHRoaXMsIm5leHRTaXpl'@;
put 'IiwwKSxzUCh0aGlzLCJjdXJyZW50T2Zmc2V0IiwwKSxzUCh0aGlzLCJuZXh0T2Zmc2V0IiwwKX1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhp'@;
put 'cy5uZXh0T2Zmc2V0PWx9fWZ1bmN0aW9uIHVLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZSmUoYyl7dmFyIGw9ZnVuY3Rpb24gR0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy'@;
put 'IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj'@;
put 'LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyAkSmV7Y29uc3RydWN0b3IoKXt1'@;
put 'Syh0aGlzLCJzaXplIixuZXcgWkplKSx1Syh0aGlzLCJ3b3JraW5nU3BhY2UiLDApLHVLKHRoaXMsInNoYXJlZFNpemUiLG51bGwpfXNldFNpemUobCl7dGhpcy5zaXplLnNldFNpemUobCl9c2V0T2Zmc2V0KGwpe3RoaXMuc2l6ZS5zZXRPZmZzZXQobCl9Z2V0Vmlld1NpemUoKXtyZXR1cm4g'@;
put 'dGhpcy5zaXplfWlzU2hhcmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLnNoYXJlZFNpemV9aXNQbGFjZU9uKGwpe3JldHVybiB0aGlzLndvcmtpbmdTcGFjZT09PWx9YXBwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTEsbC53b3JraW5nU3BhY2U9Mix0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3'@;
put 'U2l6ZSgpfXByZXBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MixsLndvcmtpbmdTcGFjZT0xLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9fWIoMjk3NjApO2NsYXNzIFZmZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiBLSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFhK'@;
put 'ZShjKXt2YXIgbD1mdW5jdGlvbiBxSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g'@;
put 'ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywib3JkZXIiLFtdKSx0aGlzLm9yZGVyPVsuLi5BcnJheShhKS5rZXlzKCldLm1hcChkPT5sK2QpfWdldCBsZW5ndGgoKXtyZXR1'@;
put 'cm4gdGhpcy5vcmRlci5sZW5ndGh9aGFzKGwpe3JldHVybiB0aGlzLm9yZGVyLmluZGV4T2YobCk+LTF9Z2V0KGwpe3JldHVybiBsPHRoaXMub3JkZXIubGVuZ3RoP3RoaXMub3JkZXJbbF06LTF9cmVtb3ZlKGwpe3RoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihsKSwxKX1w'@;
put 'cmVwZW5kKGwpe3JldHVybiB0aGlzLm9yZGVyLnVuc2hpZnQobCksdGhpcy5vcmRlci5wb3AoKX19Y2xhc3MgdFFle2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBKSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFFKZShjKXt2YXIgbD1mdW5jdGlvbiBlUWUoYyxsKXtpZigib2JqZWN0IiE9'@;
put 'dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg'@;
put 'cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl'@;
put 'OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywic2l6ZVNldCIsdm9pZCAwKSx0aGlzLnNpemVTZXQ9bH1kaWZmKCl7Y29uc3R7c2l6ZVNldDpsfT10aGlzLHtjdXJyZW50U2l6ZTphLG5leHRTaXplOmR9PWwuZ2V0Vmlld1NpemUoKTtsZXQgaD1NYXRo'@;
put 'Lm1heChkLGEpO2lmKDA9PT1oKXJldHVybltdO2NvbnN0e2N1cnJlbnRPZmZzZXQ6ZixuZXh0T2Zmc2V0OnZ9PWwuZ2V0Vmlld1NpemUoKSxNPW5ldyBWZmUoZixhKSxJPW5ldyBWZmUodixkKSxHPVtdO2ZvcihsZXQgcmU9MDtyZTxoO3JlKyspe2NvbnN0IHVlPU0uZ2V0KHJlKSx5ZT1JLmdl'@;
put 'dChyZSk7aWYoLTE9PT15ZSlHLnB1c2goWyJyZW1vdmUiLHVlXSk7ZWxzZSBpZigtMT09PXVlKSFsLmlzU2hhcmVkKCl8fGwuaXNTaGFyZWQoKSYmbC5pc1BsYWNlT24oMik/Ry5wdXNoKFsiYXBwZW5kIix5ZV0pOkcucHVzaChbInByZXBlbmQiLHllXSk7ZWxzZSBpZih5ZT51ZSlNLmhhcyh5'@;
put 'ZSkmJihNLnJlbW92ZSh5ZSksZDw9TS5sZW5ndGgmJihoLT0xKSksRy5wdXNoKFsicmVwbGFjZSIseWUsdWVdKTtlbHNlIGlmKHllPHVlKXtjb25zdCBFZT1NLnByZXBlbmQoeWUpO0cucHVzaChbImluc2VydF9iZWZvcmUiLHllLHVlLEVlXSl9ZWxzZSBHLnB1c2goWyJub25lIix5ZV0pfXJl'@;
put 'dHVybiBHfX1mdW5jdGlvbiBmXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gblFlKGMpe3ZhciBsPWZ1bmN0aW9uIHJRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs'@;
put 'bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n'@;
put 'Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQmZle2NvbnN0cnVjdG9yKGwsYSl7Zl8odGhp'@;
put 'cywicm9vdE5vZGUiLHZvaWQgMCksZl8odGhpcywibm9kZXNQb29sIix2b2lkIDApLGZfKHRoaXMsInNpemVTZXQiLG5ldyAkSmUpLGZfKHRoaXMsImNvbGxlY3RlZE5vZGVzIixbXSksZl8odGhpcywidmlld0RpZmZlciIsbmV3IHRRZSh0aGlzLnNpemVTZXQpKSxmXyh0aGlzLCJsZWFkcyIs'@;
put 'W10pLHRoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hfXNldFNpemUobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRTaXplKGwpLHRoaXN9c2V0T2Zmc2V0KGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGwpLHRoaXN9aXNTaGFyZWRWaWV3U2V0KCl7cmV0dXJuIHRoaXMu'@;
put 'c2l6ZVNldC5pc1NoYXJlZCgpfWdldE5vZGUobCl7cmV0dXJuIGw8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsXTpudWxsfWdldEN1cnJlbnROb2RlKCl7Y29uc3QgbD10aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aDtyZXR1cm4gbD4wP3RoaXMuY29s'@;
put 'bGVjdGVkTm9kZXNbbC0xXTpudWxsfWFwcGx5Q29tbWFuZChsKXtjb25zdHtyb290Tm9kZTphfT10aGlzLFtkLGgsZix2XT1sLE09dGhpcy5ub2Rlc1Bvb2woaCk7c3dpdGNoKHRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChNKSxkKXtjYXNlInByZXBlbmQiOmEuaW5zZXJ0QmVmb3JlKE0sYS5m'@;
put 'aXJzdENoaWxkKTticmVhaztjYXNlImFwcGVuZCI6YS5hcHBlbmRDaGlsZChNKTticmVhaztjYXNlImluc2VydF9iZWZvcmUiOmEuaW5zZXJ0QmVmb3JlKE0sdGhpcy5ub2Rlc1Bvb2woZikpLGEucmVtb3ZlQ2hpbGQodGhpcy5ub2Rlc1Bvb2wodikpO2JyZWFrO2Nhc2UicmVwbGFjZSI6YS5y'@;
put 'ZXBsYWNlQ2hpbGQoTSx0aGlzLm5vZGVzUG9vbChmKSk7YnJlYWs7Y2FzZSJyZW1vdmUiOmEucmVtb3ZlQ2hpbGQoTSl9fXN0YXJ0KCl7dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg9MCx0aGlzLmxlYWRzPXRoaXMudmlld0RpZmZlci5kaWZmKCl9cmVuZGVyKCl7dGhpcy5sZWFkcy5sZW5n'@;
put 'dGg+MCYmdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX1lbmQoKXtmb3IoO3RoaXMubGVhZHMubGVuZ3RoPjA7KXRoaXMuYXBwbHlDb21tYW5kKHRoaXMubGVhZHMuc2hpZnQoKSl9fWNsYXNzIGpmZSBleHRlbmRzIEJmZXtwcmVwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5z'@;
put 'aXplU2V0LnByZXBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCksdGhpc31hcHBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQuYXBwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LnByZXBlbmQodGhpcy5zaXplU2V0KSx0aGlzfX1mdW5jdGlvbiB6ZmUo'@;
put 'YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGlRZShjKXt2YXIgbD1mdW5jdGlvbiBhUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHNRZXtjb25zdHJ1Y3RvcihsKXt6ZmUodGhpcywibm9kZVR5cGUiLHZvaWQgMCks'@;
put 'emZlKHRoaXMsInBvb2wiLG5ldyBNYXApLHRoaXMubm9kZVR5cGU9bC50b1VwcGVyQ2FzZSgpfXNldFJvb3REb2N1bWVudChsKXt0aGlzLnJvb3REb2N1bWVudD1sfW9idGFpbihsLGEpe2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBhP2Ake2x9eCR7YX1gOmwudG9TdHJpbmcoKTtpZih0aGlz'@;
put 'LnBvb2wuaGFzKGgpKXJldHVybiB0aGlzLnBvb2wuZ2V0KGgpO2NvbnN0IGY9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKTtyZXR1cm4gdGhpcy5wb29sLnNldChoLGYpLGZ9fWZ1bmN0aW9uIEZFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvUWUoYyl7'@;
put 'dmFyIGw9ZnVuY3Rpb24gbFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBIRXtjb25zdHJ1Y3RvcihsLGEpe0ZFKHRoaXMsIm5vZGVzUG9vbCIsbnVsbCksRkUodGhpcywibm9kZVR5cGUiLHZvaWQgMCksRkUodGhp'@;
put 'cywicm9vdE5vZGUiLHZvaWQgMCksRkUodGhpcywidGFibGUiLG51bGwpLEZFKHRoaXMsInJlbmRlcmVkTm9kZXMiLDApLHRoaXMubm9kZXNQb29sPSJzdHJpbmciPT10eXBlb2YgbD9uZXcgc1FlKGwpOm51bGwsdGhpcy5ub2RlVHlwZT1sLHRoaXMucm9vdE5vZGU9YX1zZXRUYWJsZShsKXt0'@;
put 'aGlzLm5vZGVzUG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGwucm9vdERvY3VtZW50KSx0aGlzLnRhYmxlPWx9YWRqdXN0KCl7fXJlbmRlcigpe319ZnVuY3Rpb24gVWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBjUWUoYyl7dmFyIGw9ZnVuY3Rpb24gdVFlKGMsbCl7'@;
put 'aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By'@;
put 'aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVl'@;
put 'OmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBkUWUgZXh0ZW5kcyBIRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUSCIpLFVmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksVWZlKHRoaXMsInNvdXJjZVJvd0luZGV4Iiww'@;
put 'KX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBqZmUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSksdGhpcy5vcmRlclZpZXdzLnNldChs'@;
put 'LGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlzLnRhYmxlO2ZvcihsZXQgdj0wO3Y8bDt2Kyspe2NvbnN0IE09dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHYp'@;
put 'LEk9aC5nZXRSZW5kZXJlZE5vZGUodik7dGhpcy5zb3VyY2VSb3dJbmRleD1NO2NvbnN0IEc9dGhpcy5vYnRhaW5PcmRlclZpZXcoSSkscmU9Zi5vYnRhaW5PcmRlclZpZXcoSSk7Ry5hcHBlbmRWaWV3KHJlKS5zZXRTaXplKGQpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgdWU9ZC0x'@;
put 'O3VlPj0wO3VlLS0pe0cucmVuZGVyKCk7Y29uc3QgeWU9Ry5nZXRDdXJyZW50Tm9kZSgpO3llLmNsYXNzTmFtZT0iIix5ZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksQjcoeWUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlh'@;
put 'RW5hYmxlZCgpJiZtcyh5ZSxbWyJyb2xlIiwicm93aGVhZGVyIl0sWyJzY29wZSIsInJvdyJdLGIkKHVlKzEpLGttKC0xKV0pLGFbdWVdKE0seWUsdWUpfUcuZW5kKCl9fX1jbGFzcyBoUWUgZXh0ZW5kcyBIRXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2Nv'@;
put 'bHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IE09MCxJPWw7TTxJO00rKyl7Zm9yKGQ9dGhpcy5y'@;
put 'b290Tm9kZS5jaGlsZE5vZGVzW01dLGR8fChkPXRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQu'@;
put 'YXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCB2PXRo'@;
put 'aXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYodj5sKWZvcihsZXQgTT1sO008djtNKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZBcChkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50'@;
put 'YWJsZTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmbXModGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdHtjb2x1bW5IZWFkZXJGdW5jdGlvbnM6ZCxjb2x1bW5zVG9SZW5kZXI6aCxyb3dIZWFkZXJzQ291bnQ6Zn09dGhp'@;
put 'cy50YWJsZSx2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1thXTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmbXModixbWyJyb2xlIiwicm93Il0sVjJlKGErMSldKTtmb3IobGV0IE09LTEqZjtNPGg7TSs9MSl7Y29uc3QgST10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2Uo'@;
put 'TSksRz12LmNoaWxkTm9kZXNbTStmXTtHLmNsYXNzTmFtZT0iIixHLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxCNyhHLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmbXMoRyxbYiQoTSsxK3RoaXMudGFi'@;
put 'bGUucm93SGVhZGVyc0NvdW50KSxrbSgtMSksWyJyb2xlIiwiY29sdW1uaGVhZGVyIl0sLi4uTT49MD9bWyJzY29wZSIsImNvbCJdXTpbWyJyb2xlIiwiZ3JpZGNlbGwgYnV0dG9uIl0sbl8oIlNlbGVjdCB3aG9sZSBncmlkIildXSksZFthXShJLEcsYSl9fX19bGV0IFpmZT0hMTtjbGFzcyBm'@;
put 'UWUgZXh0ZW5kcyBIRXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlLGQ9bCthO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPGQ7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQo'@;
put 'dGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5kOyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMt'@;
put 'PTF9cmVuZGVyKCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5kZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTshWmZlJiZsPjFlMyYmKFpmZT0hMCxZbyhobGBQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNp'@;
put 'YmxlIGNvbHVtbnMuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSB3aWR0aCBhbmQvb3JceDIwCiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxDb2x1bW5zIiBvcHRpb24u'@;
put 'YCkpO2ZvcihsZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7dn1weGB9Zm9y'@;
put 'KGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFdpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWNvbnN0IGQ9dGhpcy5y'@;
put 'b290Tm9kZS5maXJzdENoaWxkO2QmJkVpKGQsInJvd0hlYWRlciIpfX1sZXQgV2ZlPSExO2NsYXNzIHZRZSBleHRlbmRzIEhFe2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksZnVuY3Rpb24gcFFlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBnUWUoYyl7dmFyIGw9ZnVuY3Rpb24gbVFl'@;
put 'KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws'@;
put 'e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJWaWV3Iix2b2lkIDApLHRoaXMub3JkZXJWaWV3PW5ldyBCZmUobCxhPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oYSkpfWdldFJlbmRlcmVkTm9kZShsKXtyZXR1'@;
put 'cm4gdGhpcy5vcmRlclZpZXcuZ2V0Tm9kZShsKX1oYXNTdGFsZUNvbnRlbnQobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3Lmhhc1N0YWxlQ29udGVudChsKX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bH09dGhpcy50YWJsZTshV2ZlJiZsPjFlMyYmKFdmZT0hMCxZbyhobGBQZXJmb3Jt'@;
put 'YW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIHJvd3MuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSBoZWlnaHQgYW5kL29yXHgyMAogICAg'@;
put 'ICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsUm93cyIgb3B0aW9uLmApKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmbXModGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pLHRoaXMub3JkZXJWaWV3LnNldFNpemUobCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVu'@;
put 'ZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGg9MDtoPGw7aCsrKXt0aGlzLm9yZGVyVmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMub3JkZXJWaWV3LmdldEN1cnJlbnROb2RlKCksdj10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoaCk7dmFyIGEsZDt0aGlzLnRh'@;
put 'YmxlLmlzQXJpYUVuYWJsZWQoKSYmbXMoZixbWyJyb2xlIiwicm93Il0sVjJlKHYrKG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PWR8fG51bGw9PT0oZD1kLmRhdGFBY2Nlc3NPYmplY3QpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbHVtbkhlYWRl'@;
put 'cnMubGVuZ3RoKSYmdm9pZCAwIT09YT9hOjApKzEpXSksKHYrMSklMj09MD9ncyhmLCJodF9fcm93X2V2ZW4iKXx8KGhzKGYsImh0X19yb3dfb2RkIiksRWkoZiwiaHRfX3Jvd19ldmVuIikpOmdzKGYsImh0X19yb3dfb2RkIil8fChocyhmLCJodF9fcm93X2V2ZW4iKSxFaShmLCJodF9fcm93'@;
put 'X29kZCIpKX10aGlzLm9yZGVyVmlldy5lbmQoKX19ZnVuY3Rpb24gWWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5UWUoYyl7dmFyIGw9ZnVuY3Rpb24gYlFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo'@;
put 'dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu'@;
put 'ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBfUWUg'@;
put 'ZXh0ZW5kcyBIRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLFlmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksWWZlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9y'@;
put 'ZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBqZmUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVy'@;
put 'OmEscm93czpkLHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IE09MDtNPGw7TSsrKXtjb25zdCBJPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShNKSxHPWQuZ2V0UmVuZGVyZWROb2RlKE0pO3RoaXMuc291cmNlUm93SW5kZXg9STtjb25zdCByZT10aGlzLm9idGFpbk9y'@;
put 'ZGVyVmlldyhHKSx1ZT1oLm9idGFpbk9yZGVyVmlldyhHKTtyZS5wcmVwZW5kVmlldyh1ZSkuc2V0U2l6ZShhKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IHllPTA7eWU8YTt5ZSsrKXtyZS5yZW5kZXIoKTtjb25zdCBFZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2Uo'@;
put 'eWUpLEJlPXJlLmdldEN1cnJlbnROb2RlKCk7dmFyIGYsdjtncyhCZSwiaGlkZSIpfHwoQmUuY2xhc3NOYW1lPSIiKSxCZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksQmUucmVtb3ZlQXR0cmlidXRlKCJkaXIiKSxCNyhCZSxbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgi'@;
put 'cm9sZSIpXSksdGhpcy50YWJsZS5jZWxsUmVuZGVyZXIoSSxFZSxCZSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJm1zKEJlLFsuLi5CZS5oYXNBdHRyaWJ1dGUoInJvbGUiKT9bXTpbWyJyb2xlIiwiZ3JpZGNlbGwiXV0sa20oLTEpLGIkKEVlKyhudWxsIT09KGY9bnVsbD09PSh2PXRo'@;
put 'aXMudGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT12fHxudWxsPT09KHY9di5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09dj92b2lkIDA6di5yb3dIZWFkZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWY/ZjowKSsxKV0pfXJlLmVuZCgpfX19ZnVuY3Rpb24gS3UoYyxsLGEpe3JldHVybihsPWZ1'@;
put 'bmN0aW9uIHdRZShjKXt2YXIgbD1mdW5jdGlvbiBDUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp'@;
put 'KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFNRZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJlbmRlcmVyOmEsc3R5bGVzSGFuZGxlcjpkfT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307S3UodGhpcywicm9vdE5vZGUiLHZvaWQgMCksS3UodGhpcywicm9vdERvY3VtZW50Iix2b2lkIDApLEt1KHRoaXMsInJvd0hlYWRlcnMiLG51bGwpLEt1KHRoaXMsImNvbHVtbkhlYWRlcnMiLG51bGwpLEt1'@;
put 'KHRoaXMsImNvbEdyb3VwIixudWxsKSxLdSh0aGlzLCJyb3dzIixudWxsKSxLdSh0aGlzLCJjZWxscyIsbnVsbCksS3UodGhpcywicm93RmlsdGVyIixudWxsKSxLdSh0aGlzLCJjb2x1bW5GaWx0ZXIiLG51bGwpLEt1KHRoaXMsInJvd1V0aWxzIixudWxsKSxLdSh0aGlzLCJjb2x1bW5VdGls'@;
put 'cyIsbnVsbCksS3UodGhpcywicm93c1RvUmVuZGVyIiwwKSxLdSh0aGlzLCJjb2x1bW5zVG9SZW5kZXIiLDApLEt1KHRoaXMsInJvd0hlYWRlckZ1bmN0aW9ucyIsW10pLEt1KHRoaXMsInJvd0hlYWRlcnNDb3VudCIsMCksS3UodGhpcywiY29sdW1uSGVhZGVyRnVuY3Rpb25zIixbXSksS3Uo'@;
put 'dGhpcywiY29sdW1uSGVhZGVyc0NvdW50IiwwKSxLdSh0aGlzLCJjZWxsUmVuZGVyZXIiLHZvaWQgMCksS3UodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLHZvaWQgMCksS3UodGhpcywic3R5bGVzSGFuZGxlciIsdm9pZCAwKSx0aGlzLnJvb3ROb2RlPWwsdGhpcy5yb290RG9jdW1lbnQ9dGhp'@;
put 'cy5yb290Tm9kZS5vd25lckRvY3VtZW50LHRoaXMuY2VsbFJlbmRlcmVyPWEsdGhpcy5zdHlsZXNIYW5kbGVyPWR9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7dGhpcy5hY3RpdmVPdmVybGF5TmFtZT1sfXNldEF4aXNVdGlscyhsLGEpe3RoaXMucm93VXRpbHM9bCx0aGlzLmNvbHVtblV0aWxz'@;
put 'PWF9c2V0Vmlld3BvcnRTaXplKGwsYSl7dGhpcy5yb3dzVG9SZW5kZXI9bCx0aGlzLmNvbHVtbnNUb1JlbmRlcj1hfXNldEZpbHRlcnMobCxhKXt0aGlzLnJvd0ZpbHRlcj1sLHRoaXMuY29sdW1uRmlsdGVyPWF9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3RoaXMucm93SGVhZGVy'@;
put 'RnVuY3Rpb25zPWwsdGhpcy5yb3dIZWFkZXJzQ291bnQ9bC5sZW5ndGgsdGhpcy5jb2x1bW5IZWFkZXJGdW5jdGlvbnM9YSx0aGlzLmNvbHVtbkhlYWRlcnNDb3VudD1hLmxlbmd0aH1zZXRSZW5kZXJlcnMoKXtsZXR7cm93SGVhZGVyczpsLGNvbHVtbkhlYWRlcnM6YSxjb2xHcm91cDpkLHJv'@;
put 'd3M6aCxjZWxsczpmfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307bC5zZXRUYWJsZSh0aGlzKSxhLnNldFRhYmxlKHRoaXMpLGQuc2V0VGFibGUodGhpcyksaC5zZXRUYWJsZSh0aGlzKSxmLnNldFRhYmxlKHRoaXMpLHRoaXMucm93'@;
put 'SGVhZGVycz1sLHRoaXMuY29sdW1uSGVhZGVycz1hLHRoaXMuY29sR3JvdXA9ZCx0aGlzLnJvd3M9aCx0aGlzLmNlbGxzPWZ9cmVuZGVyZWRSb3dUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXJlZENvbHVtblRvU291cmNlKGwpe3Jl'@;
put 'dHVybiB0aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfWlzQXJpYUVuYWJsZWQoKXtyZXR1cm4gdGhpcy5yb3dVdGlscy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIil9cmVuZGVyKCl7dGhpcy5jb2xHcm91cC5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMu'@;
put 'YWRqdXN0KCksdGhpcy5yb3dzLmFkanVzdCgpLHRoaXMucm93SGVhZGVycy5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMucmVuZGVyKCksdGhpcy5yb3dzLnJlbmRlcigpLHRoaXMucm93SGVhZGVycy5yZW5kZXIoKSx0aGlzLmNlbGxzLnJlbmRlcigpLHRoaXMuY29sdW1uVXRpbHMuY2Fs'@;
put 'Y3VsYXRlV2lkdGhzKCksdGhpcy5jb2xHcm91cC5yZW5kZXIoKTtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dzOmF9PXRoaXM7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7Y29uc3QgaD1hLmdldFJlbmRlcmVkTm9kZShkKSxmPXRoaXMucm93VXRpbHM7aWYoaC5maXJzdENoaWxkKXtjb25zdCB2PXRo'@;
put 'aXMucmVuZGVyZWRSb3dUb1NvdXJjZShkKSxNPWYuZ2V0SGVpZ2h0QnlPdmVybGF5TmFtZSh2LHRoaXMuYWN0aXZlT3ZlcmxheU5hbWUpLEc9dGhpcy5zdHlsZXNIYW5kbGVyLmFyZUNlbGxzQm9yZGVyQm94KCk/MDoxO2guZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9TT9NLUcrInB4IjoiIn19'@;
put 'fX1jbGFzcyBNUWV7Y29uc3RydWN0b3IoKXtsZXR7VEFCTEU6bCxUSEVBRDphLENPTEdST1VQOmQsVEJPRFk6aCxyb3dVdGlsczpmLGNvbHVtblV0aWxzOnYsY2VsbFJlbmRlcmVyOk0sc3R5bGVzSGFuZGxlcjpJfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h'@;
put 'cmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgU1FlKGwse2NlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6SX0pLHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOm5ldyBkUWUsY29sdW1uSGVhZGVyczpuZXcgaFFlKGEpLGNvbEdyb3VwOm5ldyBmUWUoZCks'@;
put 'cm93czpuZXcgdlFlKGgpLGNlbGxzOm5ldyBfUWV9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhmLHYpfXNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpLHRoaXN9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlz'@;
put 'LnJlbmRlcmVyLnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRl'@;
put 'bnRSZW5kZXJlcnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19ZnVuY3Rpb24gZEsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhRZShjKXt2YXIgbD1mdW5jdGlvbiBFUWUoYyxsKXtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11'@;
put 'c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRRZXtjb25zdHJ1Y3RvcihsLGEpe2RLKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksZEsodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSxkSyh0aGlzLCJoZWFkZXJXaWR0aHMiLG5ldyBN'@;
put 'YXApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uV2lkdGgiLGwpfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIil9Z2V0SGVh'@;
put 'ZGVySGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsXTtyZXR1cm4gdm9pZCAw'@;
put 'IT09ZCYmKGE9YT9NYXRoLm1heChhLGQpOmQpLGF9Z2V0SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVyV2lkdGhzLmdldCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKSl9Y2FsY3VsYXRlV2lkdGhzKCl7Y29uc3R7'@;
put 'd3RTZXR0aW5nczpsfT10aGlzO2xldCBhPWwuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKTtpZihhPWwuZ2V0U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsYSksbnVsbCE9YSl7Y29uc3QgZD1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsaD1sLmdldFNldHRp'@;
put 'bmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2ZvcihsZXQgZj0wO2Y8ZDtmKyspe2xldCB2PUFycmF5LmlzQXJyYXkoYSk/YVtmXTphO3Y9dj8/aCx0aGlzLmhlYWRlcldpZHRocy5zZXQoZix2KX19fX1mdW5jdGlvbiBHZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFRZShjKXt2YXIgbD1m'@;
put 'dW5jdGlvbiBrUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIERRZXtjb25zdHJ1Y3RvcihsLGEpe0dmZSh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLEdmZSh0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDAp'@;
put 'LHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldEhlaWdodChsKXtsZXQgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVpZ2h0IixsKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0'@;
put 'dXJuIHZvaWQgMCE9PWQmJihhPXZvaWQgMD09PWE/ZDpNYXRoLm1heChhLGQpKSxhfWdldEhlaWdodEJ5T3ZlcmxheU5hbWUobCxhKXtsZXQgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVpZ2h0QnlPdmVybGF5TmFtZSIsbCxhKTtjb25zdCBoPXRoaXMuZGF0YUFjY2Vzc09i'@;
put 'amVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0dXJuIHZvaWQgMCE9PWgmJihkPXZvaWQgMD09PWQ/aDpNYXRoLm1heChkLGgpKSxkfX1jb25zdCAkNz0idG9wIixScD0iYm90dG9tIixLNz0iaW5saW5lX3N0YXJ0IixYNz0idG9wX2lubGluZV9zdGFydF9jb3JuZXIiLE5tPSJi'@;
put 'b3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciIsJGZlPVskNyxScCxLNyxYNyxObV0sSVFlPW5ldyBNYXAoW1skNyxgaHRfY2xvbmVfJHskN31gXSxbUnAsYGh0X2Nsb25lXyR7UnB9YF0sW0s3LGBodF9jbG9uZV8ke0s3fSBodF9jbG9uZV9sZWZ0YF0sW1g3LGBodF9jbG9uZV8ke1g3fSBodF9j'@;
put 'bG9uZV90b3BfbGVmdF9jb3JuZXJgXSxbTm0sYGh0X2Nsb25lXyR7Tm19IGh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5lcmBdXSk7ZnVuY3Rpb24gTHAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJRZShjKXt2YXIgbD1mdW5jdGlvbiBMUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8'@;
put 'fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg'@;
put 'cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp'@;
put 'Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGdfPWNsYXNzIE9RZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe0xwKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLExwKHRoaXMsImRvbUJpbmRpbmdzIix2b2lkIDApLExwKHRoaXMsIlRCT0RZIixudWxsKSxMcCh0aGlzLCJU'@;
put 'SEVBRCIsbnVsbCksTHAodGhpcywiQ09MR1JPVVAiLG51bGwpLExwKHRoaXMsImhhc1RhYmxlSGVpZ2h0IiwhMCksTHAodGhpcywiaGFzVGFibGVXaWR0aCIsITApLExwKHRoaXMsImlzVGFibGVWaXNpYmxlIiwhMSksTHAodGhpcywidGFibGVPZmZzZXQiLDApLExwKHRoaXMsImhvbGRlck9m'@;
put 'ZnNldCIsMCksdGhpcy5kb21CaW5kaW5ncz1kLHRoaXMuaXNNYXN0ZXI9Im1hc3RlciI9PT1mLHRoaXMubmFtZT1mLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5pbnN0YW5jZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qu'@;
put 'd290LHRoaXMud290PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy5UQUJMRT1kLnJvb3RUYWJsZSx4JCh0aGlzLlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhpcy5UQUJMRSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIp'@;
put 'LHRoaXMuaG9sZGVyPXRoaXMuY3JlYXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlzLmhvbGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCks'@;
put 'dGhpcy5yb3dGaWx0ZXI9bnVsbCx0aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoPSExO2NvbnN0IHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJyb3dIZWFkZXJXaWR0aCIpO3RoaXMud3RTZXR0aW5ncy51cGRhdGUoInJvd0hlYWRlcldpZHRo'@;
put 'IiwoKT0+dGhpcy5fbW9kaWZ5Um93SGVhZGVyV2lkdGgodikpLHRoaXMucm93VXRpbHM9bmV3IERRZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLmNvbHVtblV0aWxzPW5ldyBUUWUodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhp'@;
put 'cy50YWJsZVJlbmRlcmVyPW5ldyBNUWUoe1RBQkxFOnRoaXMuVEFCTEUsVEhFQUQ6dGhpcy5USEVBRCxDT0xHUk9VUDp0aGlzLkNPTEdST1VQLFRCT0RZOnRoaXMuVEJPRFkscm93VXRpbHM6dGhpcy5yb3dVdGlscyxjb2x1bW5VdGlsczp0aGlzLmNvbHVtblV0aWxzLGNlbGxSZW5kZXJlcjp0'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoImNlbGxSZW5kZXJlciIpLHN0eWxlc0hhbmRsZXI6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKX0pfWlzKGwpe3JldHVybiB0aGlzLm5hbWU9PT1sfWZpeFRhYmxlRG9tVHJlZSgpe2NvbnN0IGw9dGhpcy5k'@;
put 'b21CaW5kaW5ncy5yb290RG9jdW1lbnQ7dGhpcy5UQk9EWT10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRib2R5IiksdGhpcy5UQk9EWXx8KHRoaXMuVEJPRFk9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRoaXMuVEFCTEUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSkpLHRoaXMuVEhFQUQ9'@;
put 'dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0aGVhZCIpLHRoaXMuVEhFQUR8fCh0aGlzLlRIRUFEPWwuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLlRIRUFELHRoaXMuVEJPRFkpKSx0aGlzLkNPTEdST1VQPXRoaXMuVEFCTEUucXVlcnlTZWxl'@;
put 'Y3RvcigiY29sZ3JvdXAiKSx0aGlzLkNPTEdST1VQfHwodGhpcy5DT0xHUk9VUD1sLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5DT0xHUk9VUCx0aGlzLlRIRUFEKSl9Y3JlYXRlU3ByZWFkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7'@;
put 'bGV0IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFncyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0U3ByZWFkZXIiLGEmJmEuaW5zZXJ0QmVmb3Jl'@;
put 'KGQsbCksZC5hcHBlbmRDaGlsZChsKSksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZtcyhkLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGR9Y3JlYXRlSGlkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0'@;
put 'IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFncyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0SGlkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCks'@;
put 'ZC5hcHBlbmRDaGlsZChsKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJm1zKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1jcmVhdGVIb2xkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5F'@;
put 'TEVNRU5UX05PREV8fCFncyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGQuY2xhc3NOYW1lPSJ3dEhvbGRlciIsdGhpcy5pc01hc3RlciYmbXMoZCxba20oLTEp'@;
put 'XSksYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSx0aGlzLmlzTWFzdGVyJiYoZC5wYXJlbnROb2RlLmNsYXNzTmFtZSs9Imh0X21hc3RlciBoYW5kc29udGFibGUiLGQucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJydGxNb2RlIik/'@;
put 'InJ0bCI6Imx0ciIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZtcyhkLnBhcmVudE5vZGUsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSkpLGQuYXBwZW5kQ2hpbGQobCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZtcyhkLFtbInJv'@;
put 'bGUiLCJwcmVzZW50YXRpb24iXV0pLGR9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmRhdGFBY2Nlc3NPYmpl'@;
put 'Y3QsZj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHY9YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxNPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLEk9TS5sZW5ndGgsRz1hLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxyZT1HLmxlbmd0aDtsZXQgdWU9bDtpZih0aGlzLmlz'@;
put 'TWFzdGVyJiYoZC5iZWZvcmVEcmF3KCksdGhpcy5ob2xkZXJPZmZzZXQ9ajAodGhpcy5ob2xkZXIpLHVlPWguY3JlYXRlQ2FsY3VsYXRvcnModWUpLEkmJiFhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikpKXtjb25zdCBFZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQ'@;
put 'b3NpdGlvbigpLEJlPXRoaXMuY29ycmVjdEhlYWRlcldpZHRoO3RoaXMuY29ycmVjdEhlYWRlcldpZHRoPTAhPT1FZSxCZSE9PXRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYodWU9ITEpfWlmKHVlKXRoaXMuaXNNYXN0ZXImJmQucmVmcmVzaCghMCk7ZWxzZXt0aGlzLnRhYmxlT2Zmc2V0PXRo'@;
put 'aXMuaXNNYXN0ZXI/ajAodGhpcy5UQUJMRSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnBhcmVudFRhYmxlT2Zmc2V0O2NvbnN0IEVlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpLDApLEJlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLDApO3RoaXMu'@;
put 'cm93RmlsdGVyPW5ldyBqSmUoRWUsZixyZSksdGhpcy5jb2x1bW5GaWx0ZXI9bmV3IEhKZShCZSx2LEkpO2xldCBHZT0hMDtpZih0aGlzLmlzTWFzdGVyKXt0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKTtjb25zdCBzdD17fTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiYmVmb3JlRHJhdyIsITAsc3QpLEdlPSEwIT09c3Quc2tpcFJlbmRlcn1HZSYmKHRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKE0sRyksKHRoaXMuaXMoUnApfHx0aGlzLmlzKE5tKSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50'@;
put 'UmVuZGVyZXJzKE0sW10pLHRoaXMucmVzZXRPdmVyc2l6ZWRSb3dzKCksdGhpcy50YWJsZVJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKHRoaXMubmFtZSkuc2V0Vmlld3BvcnRTaXplKHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSx0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50'@;
put 'KCkpLnNldEZpbHRlcnModGhpcy5yb3dGaWx0ZXIsdGhpcy5jb2x1bW5GaWx0ZXIpLnJlbmRlcigpLHRoaXMuaXNNYXN0ZXImJnRoaXMubWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhS'@;
put 'cCkpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcj8odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpfHxoLmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpLGQucmVmcmVzaCghMSksZC5hcHBseVRvRE9NKCksdGhpcy53dFNl'@;
put 'dHRpbmdzLmdldFNldHRpbmcoIm9uRHJhdyIsITApKTp0aGlzLmlzKFJwKSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpfWxldCB5ZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKHllPWQudG9wT3ZlcmxheS5yZXNl'@;
put 'dEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbU92ZXJsYXkuY2xvbmUmJih5ZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fHllKSx5ZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8eWUsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkm'@;
put 'JmQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRG'@;
put 'aXhlZFBvc2l0aW9uKCkpLHllPyhkLnJlZnJlc2hBbGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc2VsZWN0aW9uTWFuYWdlci5zZXRBY3RpdmVPdmVybGF5KHRoaXMuZmFjYWRlR2V0dGVyKCkpLnJlbmRlcih1ZSksdGhpcy5pc01hc3RlciYmZC5h'@;
put 'ZnRlckRyYXcoKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT10aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpO2xldCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5I'@;
put 'ZWFkZXJzIikubGVuZ3RoO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGYsdixNO2NvbnN0IEk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlckhlaWdodCIpfHxbXTtmb3Io'@;
put 'O2Q7KWQtPTEsZj10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChkKSx2PXRoaXMuZ2V0Q29sdW1uSGVhZGVyKGEsZCksdiYmKE09bF8odiksKCFmJiZoPE18fGY8TSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPU0pLEFycmF5'@;
put 'LmlzQXJyYXkoSSk/bnVsbCE9SVtkXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09SVtkXSk6aXNOYU4oSSl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPUkpLHRo'@;
put 'aXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF08KElbZF18fEkpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1JW2RdfHxJKSl9YWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygp'@;
put 'e2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyxhPXRoaXMuVEhFQUQuY2hpbGROb2RlcyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBmPTAsdj1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Zjx2O2Yr'@;
put 'KylpZihkW2ZdKXtpZighYVtmXXx8MD09PWFbZl0uY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuO2FbZl0uY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9YCR7ZFtmXX1weGB9fXJlc2V0T3ZlcnNpemVkUm93cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlz'@;
put 'LmRhdGFBY2Nlc3NPYmplY3Q7aWYoKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoUnApKSYmIWwuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpe2NvbnN0IGQ9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5yb3dG'@;
put 'aWx0ZXIucmVuZGVyZWRUb1NvdXJjZShoKTthLm92ZXJzaXplZFJvd3MmJmEub3ZlcnNpemVkUm93c1tmXSYmKGEub3ZlcnNpemVkUm93c1tmXT12b2lkIDApfX19Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9k'@;
put 'aWZ5R2V0Q2VsbENvb3JkcyIsYSxkLCF0aGlzLmlzTWFzdGVyLCJyZW5kZXIiKTtpZihoJiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7'@;
put 'aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3Rl'@;
put 'ZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3Qgdj1mLmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighdiYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBi'@;
put 'ZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIHZ9Z2V0Um93KGwpe2xldCBhPW51bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxk'@;
put 'PXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19'@;
put 'Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2li'@;
put 'bGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5j'@;
put 'aGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoKXJl'@;
put 'dHVybjtjb25zdCBoPXRoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCksZj1oPDA/dGhpcy5yb3dGaWx0ZXIuc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpOmgsTT0oaDwwP3RoaXMuVEhFQUQ6dGhpcy5UQk9EWSkuY2hpbGROb2Rlc1tmXTtyZXR1cm4gTT8uY2hpbGRO'@;
put 'b2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRl'@;
put 'cmVkKGwpXSx2PWY/LmNoaWxkTm9kZXNbaF07diYmYS5wdXNoKHYpfXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9RG0oYSxbIlREIiwiVEgiXSkpLG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGQ9YS5w'@;
put 'YXJlbnROb2RlO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5wYXJlbnROb2RlO2xldCBmPXRmZShkKSx2PWEuY2VsbEluZGV4O1JtKFg3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8Um0oJDcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYoZi09aC5jaGls'@;
put 'ZE5vZGVzLmxlbmd0aCk6Um0oTm0sYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxSbShScCxhLHRoaXMud3RSb290RWxlbWVudCk/Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP2Y9dGhpcy5yb3dGaWx0'@;
put 'ZXIudmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGYpOnRoaXMucm93RmlsdGVyJiYoZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpKSxSbShYNyxhLHRoaXMud3RSb290RWxlbWVudCl8fFJtKEs3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8Um0oTm0sYSx0aGlzLnd0'@;
put 'Um9vdEVsZW1lbnQpP3Y9dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgodik6dGhpcy5jb2x1bW5GaWx0ZXImJih2PXRoaXMuY29sdW1uRmlsdGVyLnZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbih2KSk7Y29uc3QgTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi'@;
put 'b25Nb2RpZnlHZXRDb29yZHNFbGVtZW50IixmLHYpO3JldHVybiBNJiZBcnJheS5pc0FycmF5KE0pJiYoW2Ysdl09TSksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLHYpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2Fs'@;
put 'Y3VsYXRvciIpKXJldHVybjtsZXQgbD10aGlzLlRCT0RZLmNoaWxkTm9kZXMubGVuZ3RoO2NvbnN0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKSxkPWwqYS5nZXREZWZhdWx0Um93SGVpZ2h0KCksaD1sXyh0aGlzLlRCT0RZKS0xLGY9YS5hcmVDZWxsc0Jv'@;
put 'cmRlckJveCgpLHY9Zj9TdTpsXyxNPWY/MDoxLEk9Zj8xOjA7bGV0IEcscmUsdWUseWUsRWU7aWYoZCE9PWh8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlmb3IoO2w7KXtsLT0xLHVlPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCksRz10'@;
put 'aGlzLmdldFJvd0hlaWdodCh1ZSkseWU9dGhpcy5nZXRUckZvclJvdyh1ZSksRWU9eWUucXVlcnlTZWxlY3RvcigidGgiKTtjb25zdCBCZT0wPT09dWU/STowO3JlPUVlP3YoRWUpOnYoeWUpLU0sKCFHJiZhLmdldERlZmF1bHRSb3dIZWlnaHQoKTxyZS1CZXx8RzxyZSkmJihmfHwocmUrPTEp'@;
put 'LHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbdWVdPXJlKX19Z2V0VHJGb3JSb3cobCl7cmV0dXJuIHRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXX1pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpe2lm'@;
put 'KGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dIZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRp'@;
put 'bmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc1Jvd0hlYWRlclJlbmRlcmVkKGwpOmw8YX1pc1Jv'@;
put 'd0FmdGVyUmVuZGVyZWRSb3dzKGwpe3JldHVybiBsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzQ29sdW1uSGVhZGVy'@;
put 'UmVuZGVyZWQobCk6bDxhfWlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9aXNDb2x1bW5BZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdl'@;
put 'dExhc3RWaXNpYmxlQ29sdW1uKCl9aXNSb3dBZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLnJvd0ZpbHRlciYmbD50aGlzLmdldExhc3RWaXNpYmxlUm93KCl9aXNDb2x1bW5CZWZvcmVWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJnRoaXMuY29sdW1uRmlsdGVyLnNv'@;
put 'dXJjZVRvUmVuZGVyZWQobCk8MCYmbD49MH1pc0xhc3RSb3dGdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0xhc3RDb2x1bW5GdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZUNv'@;
put 'bHVtbigpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1hbGxSb3dzSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik9PT10aGlzLmdldFZpc2libGVSb3dzQ291bnQoKX1hbGxDb2x1bW5zSW5WaWV3cG9ydCgpe3JldHVybiB0'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik9PT10aGlzLmdldFZpc2libGVDb2x1bW5zQ291bnQoKX1nZXRSb3dIZWlnaHQobCl7cmV0dXJuIHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KGwpfWdldENvbHVtbkhlYWRlckhlaWdodChsKXtyZXR1cm4gdGhpcy5jb2x1'@;
put 'bW5VdGlscy5nZXRIZWFkZXJIZWlnaHQobCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0V2lkdGgobCl9aGFzRGVmaW5lZFNpemUoKXtyZXR1cm4gdGhpcy5oYXNUYWJsZUhlaWdodCYmdGhpcy5oYXNUYWJsZVdpZHRofWdldFdpZHRoKCl7cmV0dXJuIGl1'@;
put 'KHRoaXMuVEFCTEUpfWdldEhlaWdodCgpe3JldHVybiBTdSh0aGlzLlRBQkxFKX1nZXRUb3RhbFdpZHRoKCl7Y29uc3QgbD1pdSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldFdpZHRoKCl9Z2V0VG90YWxIZWlnaHQoKXtjb25zdCBsPVN1KHRoaXMuaGlkZXIpO3JldHVybiAw'@;
put 'IT09bD9sOnRoaXMuZ2V0SGVpZ2h0KCl9aXNWaXNpYmxlKCl7cmV0dXJuIHo3KHRoaXMuVEFCTEUpfV9tb2RpZnlSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1mbChsKT9sKCk6bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT8oYT1bLi4uYV0sYVthLmxlbmd0aC0xXT10aGlzLl9jb3JyZWN0'@;
put 'Um93SGVhZGVyV2lkdGgoYVthLmxlbmd0aC0xXSkpOmE9dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGEpLGF9X2NvcnJlY3RSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO3JldHVybiJudW1iZXIiIT10eXBlb2YgbCYmKGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRD'@;
put 'b2x1bW5XaWR0aCIpKSx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKGErPTEpLGF9fSxLZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJl'@;
put 'bmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0'@;
put 'aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dz'@;
put 'IiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY29sdW1u'@;
put 'SGVhZGVycy5sZW5ndGh9fTtUcChLZmUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFhmZT1LZmUscWZlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1'@;
put 'bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtjb25z'@;
put 'dCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8t'@;
put 'MTpjfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29s'@;
put 'dW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vz'@;
put 'c09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlfSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07VHAocWZlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEx'@;
put 'fSk7Y29uc3QgaEs9cWZlO2NsYXNzIGZLIGV4dGVuZHMgZ197Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwkNyl9fXhsKGZLLFhmZSkseGwoZkssaEspO2NvbnN0IEhRZT1mSztmdW5jdGlvbiBvUChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo'@;
put 'bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIE5FPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIEpmZShjKXtjb25zdHt3dFNldHRpbmdzOmwsaW5saW5lU3Rh'@;
put 'cnRPdmVybGF5OmEsd3RUYWJsZTpkLHd0Vmlld3BvcnQ6aCx0b3RhbENvbHVtbnM6Zixyb290V2luZG93OnZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihhLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dil7bGV0IEk9bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29u'@;
put 'c3QgcmU9ZC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtJPU1hdGguYWJzKHJlLnJpZ2h0LXRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb290V2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCl9ZWxzZSBJPWowKGQud3RSb290RWxlbWVudCkubGVmdDtjb25z'@;
put 'dCBHPU1hdGguYWJzKFQkKHYsdikpO2lmKEk+Ryl7Y29uc3QgcmU9QSQodik7bGV0IHVlPWguZ2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IHllPTE7eWU8PWY7eWUrKylpZih1ZSs9YS5zdW1DZWxsU2l6ZXMoeWUtMSx5ZSksSSt1ZS1HPj1yZSl7Yz15ZS0yO2JyZWFrfX19cmV0dXJuIGN9'@;
put 'ZnVuY3Rpb24gUWZlKGMpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKGwubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1mKXtjb25zdCB2PWowKGEud3RSb290RWxl'@;
put 'bWVudCksTT1aTyhmLGYpO2lmKHYudG9wPk0pe2NvbnN0IEk9bF8oZik7bGV0IEc9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IHJlPTE7cmU8PWg7cmUrKylpZihHKz1sLnN1bUNlbGxTaXplcyhyZS0xLHJlKSx2LnRvcCtHLU0+PUkpe2M9cmUtMjticmVha319fXJldHVybiBj'@;
put 'fWNvbnN0IFpRZT1jbGFzcyBVUWV7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIE5RZShjLGwpeyhmdW5jdGlvbiBWUWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9i'@;
put 'amVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsTkUpLGZ1bmN0aW9uIEJRZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24galFlKGMpe3ZhciBsPWZ1bmN0aW9uIHpRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVd'@;
put 'O2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9T'@;
put 'dHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMs'@;
put 'ImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWx9c2Nyb2xsVmlld3BvcnQobCxhLGQpe2lmKGwuY29sPDB8fGwucm93PDApcmV0dXJuITE7Y29uc3QgaD10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGEpLGY9dGhpcy5zY3JvbGxW'@;
put 'aWV3cG9ydFZlcnRpY2FsbHkobC5yb3csZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsQ29sdW1uczpo'@;
put 'fT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj1GZChhKTtpZihsPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGwsZiksIU51bWJlci5pc0ludGVnZXIobCl8'@;
put 'fGw8MHx8bD5oKXJldHVybiExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZENvbHVtbnNTdGFydDp2LGlubGluZVN0YXJ0T3ZlcmxheTpNfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsST0iYXV0byI9PT1hO2lmKEkmJmw8dilyZXR1cm4hMTtjb25zdCBHPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1u'@;
put 'KCkscmU9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2xldCB1ZT0hMTtyZXR1cm4oSSYmKGw8R3x8bD5yZSl8fCFJKSYmKHVlPU0uc2Nyb2xsVG8obCxJP2w+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKToiZW5kIj09PWEpKSx1ZX1zY3JvbGxWaWV3cG9ydFZlcnRp'@;
put 'Y2FsbHkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsUm93czpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj1GZChhKTtpZihsPXRoaXMu'@;
put 'ZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IixsLGYpLCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+aClyZXR1cm4hMTthPWYudmFsdWU7Y29uc3R7Zml4ZWRSb3dzQm90dG9tOnYsZml4ZWRSb3dzVG9w'@;
put 'Ok0sdG9wT3ZlcmxheTpJfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsRz0iYXV0byI9PT1hO2lmKEcmJihsPE18fGw+aC12LTEpKXJldHVybiExO2NvbnN0IHJlPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdWU9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2xldCB5ZT0hMTtyZXR1cm4oRyYm'@;
put 'KGw8cmV8fGw+dWUpfHwhRykmJih5ZT1JLnNjcm9sbFRvKGwsRz9sPj10aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCk6ImJvdHRvbSI9PT1hKSkseWV9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0VmlzaWJs'@;
put 'ZVJvdygpfWdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIG9QKE5FLHRoaXMsUWZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09i'@;
put 'amVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIG9QKE5FLHRoaXMsUWZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSl9'@;
put 'Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIG9QKE5FLHRoaXMsSmZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0'@;
put 'VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7'@;
put 'cmV0dXJuIG9QKE5FLHRoaXMsSmZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9fTtmdW5jdGlvbiBlM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEdRZShjKXt2YXIgbD1mdW5jdGlvbiAkUWUoYyxs'@;
put 'KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv'@;
put 'UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs'@;
put 'dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIG1fKGMsbCl7cmV0dXJuIGMuZ2V0KG4zZShjLGwpKX1mdW5jdGlvbiB0M2UoYyxsLGEpe3JldHVybiBjLnNldChuM2UoYyxsKSxhKSxhfWZ1bmN0aW9uIG4zZShjLGwsYSl7'@;
put 'aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGJnPW5ldyBXZWFrTWFwO2NsYXNzIGxQ'@;
put 'e2NvbnN0cnVjdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtlM2UodGhpcywicm93IixudWxsKSxlM2UodGhpcywiY29sIixudWxsKSxmdW5jdGlvbiBXUWUoYyxsLGEpeyhmdW5jdGlvbiBZUWUoYyxsKXtpZihs'@;
put 'LmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGJnLCExKSx0M2UoYmcsdGhpcyxkKSx0eXBlb2YgbDwidSImJnR5cGVvZiBhPCJ1'@;
put 'IiYmKHRoaXMucm93PWwsdGhpcy5jb2w9YSl9aXNWYWxpZChsKXtjb25zdHtjb3VudFJvd3M6YSxjb3VudENvbHM6ZCxjb3VudFJvd0hlYWRlcnM6aCxjb3VudENvbEhlYWRlcnM6Zn09e2NvdW50Um93czowLGNvdW50Q29sczowLGNvdW50Um93SGVhZGVyczowLGNvdW50Q29sSGVhZGVyczow'@;
put 'LC4uLmx9O3JldHVybiEoIU51bWJlci5pc0ludGVnZXIodGhpcy5yb3cpfHwhTnVtYmVyLmlzSW50ZWdlcih0aGlzLmNvbCl8fHRoaXMucm93PC1mfHx0aGlzLmNvbDwtaHx8dGhpcy5yb3c+PWF8fHRoaXMuY29sPj1kKX1pc0VxdWFsKGwpe3JldHVybiBsPT09dGhpc3x8dGhpcy5yb3c9PT1s'@;
put 'LnJvdyYmdGhpcy5jb2w9PT1sLmNvbH1pc0hlYWRlcigpe3JldHVybiF0aGlzLmlzQ2VsbCgpfWlzQ2VsbCgpe3JldHVybiB0aGlzLnJvdz49MCYmdGhpcy5jb2w+PTB9aXNSdGwoKXtyZXR1cm4gbV8oYmcsdGhpcyl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+PWwucm93JiYo'@;
put 'bV8oYmcsdGhpcyk/dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYobV8oYmcsdGhpcyk/dGhpcy5jb2w+PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNTb3V0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+'@;
put 'PWwucm93JiYobV8oYmcsdGhpcyk/dGhpcy5jb2w+PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNOb3J0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYobV8oYmcsdGhpcyk/dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMu'@;
put 'cm93PW51bGw9PT10aGlzLnJvdz90aGlzLnJvdzpNYXRoLm1heCh0aGlzLnJvdywwKSx0aGlzLmNvbD1udWxsPT09dGhpcy5jb2w/dGhpcy5jb2w6TWF0aC5tYXgodGhpcy5jb2wsMCksdGhpc31hc3NpZ24obCl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobD8ucm93KSYmKHRoaXMucm93PWwu'@;
put 'cm93KSxOdW1iZXIuaXNJbnRlZ2VyKGw/LmNvbCkmJih0aGlzLmNvbD1sLmNvbCksbCBpbnN0YW5jZW9mIGxQJiZ0M2UoYmcsdGhpcyxsLmlzUnRsKCkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IGxQKHRoaXMucm93LHRoaXMuY29sLG1fKGJnLHRoaXMpKX10b09iamVjdCgpe3JldHVybnty'@;
put 'b3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19Y29uc3QgY1A9bFA7ZnVuY3Rpb24gcEsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFRZShjKXt2YXIgbD1mdW5jdGlvbiBKUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0'@;
put 'aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09'@;
put 'PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1'@;
put 'bmN0aW9uIFkyKGMsbCl7cmV0dXJuIGMuZ2V0KHIzZShjLGwpKX1mdW5jdGlvbiByM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp'@;
put 'cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBOZD1uZXcgV2Vha01hcDtjbGFzcyBnS3tjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtwSyh0aGlzLCJoaWdobGlnaHQiLG51bGwpLHBLKHRoaXMsImZyb20iLG51bGwpLHBLKHRoaXMsInRvIixudWxsKSxmdW5jdGlvbiBL'@;
put 'UWUoYyxsLGEpeyhmdW5jdGlvbiBYUWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLE5kLCExKSx0aGlzLmhp'@;
put 'Z2hsaWdodD1sLmNsb25lKCksdGhpcy5mcm9tPWEuY2xvbmUoKSx0aGlzLnRvPWQuY2xvbmUoKSxmdW5jdGlvbiBRUWUoYyxsLGEpe2Muc2V0KHIzZShjLGwpLGEpfShOZCx0aGlzLGgpfXNldEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLHRoaXN9c2V0RnJv'@;
put 'bShsKXtyZXR1cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRvPWwuY2xvbmUoKSx0aGlzfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmhpZ2hsaWdodC5ub3JtYWxpemUoKSx0aGlzLmZyb20ubm9ybWFsaXplKCksdGhpcy50by5ub3JtYWxpemUoKSx0'@;
put 'aGlzfWlzVmFsaWQobCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQobCl9aXNTaW5nbGUoKXtyZXR1cm4gdGhpcy5pc1NpbmdsZUNlbGwoKXx8dGhpcy5pc1NpbmdsZUhlYWRlcigpfWlzU2luZ2xlQ2VsbCgpe3JldHVybiB0aGlzLmZyb20ucm93Pj0wJiZ0'@;
put 'aGlzLmZyb20ucm93PT09dGhpcy50by5yb3cmJnRoaXMuZnJvbS5jb2w+PTAmJnRoaXMuZnJvbS5jb2w9PT10aGlzLnRvLmNvbH1pc1NpbmdsZUhlYWRlcigpe3JldHVybih0aGlzLmZyb20ucm93PDB8fHRoaXMuZnJvbS5jb2w8MCkmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhp'@;
put 'cy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlzSGVhZGVyKCl7cmV0dXJuISghdGhpcy5mcm9tLmlzSGVhZGVyKCl8fCF0aGlzLnRvLmlzSGVhZGVyKCkpfHx0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDB8fHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MH1jb250YWluc0hlYWRl'@;
put 'cnMoKXtyZXR1cm4gdGhpcy5mcm9tLmlzSGVhZGVyKCl8fHRoaXMudG8uaXNIZWFkZXIoKX1nZXRPdXRlckhlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KS1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSsxfWdldE91dGVyV2lkdGgo'@;
put 'KXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCktTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkrMX1nZXRIZWlnaHQoKXtpZih0aGlzLmZyb20ucm93PDAmJnRoaXMudG8ucm93PDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20u'@;
put 'cm93LDApLGE9TWF0aC5tYXgodGhpcy50by5yb3csMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldFdpZHRoKCl7aWYodGhpcy5mcm9tLmNvbDwwJiZ0aGlzLnRvLmNvbDwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLmNvbCwwKSxhPU1hdGgu'@;
put 'bWF4KHRoaXMudG8uY29sLDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRDZWxsc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSp0aGlzLmdldEhlaWdodCgpfWluY2x1ZGVzKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLGg9dGhpcy5nZXRPdXRlclRvcFN0'@;
put 'YXJ0Q29ybmVyKCksZj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuIGgucm93PD1hJiZmLnJvdz49YSYmaC5jb2w8PWQmJmYuY29sPj1kfWluY2x1ZGVzUmFuZ2UobCl7cmV0dXJuIHRoaXMuaW5jbHVkZXMobC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpJiZ0aGlzLmlu'@;
put 'Y2x1ZGVzKGwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSl9aXNFcXVhbChsKXtyZXR1cm4gTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSYmTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRo'@;
put 'Lm1heChsLmZyb20ucm93LGwudG8ucm93KSYmTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29sKSYmTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKX1v'@;
put 'dmVybGFwcyhsKXtyZXR1cm4gbC5pc1NvdXRoRWFzdE9mKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkpJiZsLmlzTm9ydGhXZXN0T2YodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVy'@;
put 'KCkuaXNTb3V0aEVhc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNTb3V0aEVhc3RPZihsKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzTm9ydGhXZXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdo'@;
put 'dENvcm5lcigpLmlzTm9ydGhXZXN0T2YobCl9aXNPdmVybGFwcGluZ0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPD1sLmdl'@;
put 'dE91dGVyVG9wRW5kQ29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sfWlzT3Zlcmxh'@;
put 'cHBpbmdWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5y'@;
put 'b3d8fHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0'@;
put 'ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihsLnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNvbCkmJih0aGlzLmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJv'@;
put 'dyksTWF0aC5taW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4cGFuZEJ5UmFuZ2UobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtpZih0aGlzLmluY2x1ZGVzUmFuZ2UobCl8fCF0aGlzLm92ZXJsYXBzKGwpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksaD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZj10aGlzLmdldERpcmVjdGlv'@;
put 'bigpLHY9bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksTT1sLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksST1NYXRoLm1pbihkLnJvdyx2LnJvdyksRz1NYXRoLm1pbihkLmNvbCx2LmNvbCkscmU9TWF0aC5tYXgoaC5yb3csTS5yb3cpLHVlPU1hdGgubWF4KGguY29sLE0uY29sKSx5ZT10'@;
put 'aGlzLl9jcmVhdGVDZWxsQ29vcmRzKEksRyksRWU9dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhyZSx1ZSk7cmV0dXJuIHRoaXMuZnJvbT15ZSx0aGlzLnRvPUVlLHRoaXMuc2V0RGlyZWN0aW9uKGYpLGEmJih0aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3Ju'@;
put 'ZXIoKS5yb3cmJiJOLVMiPT09dGhpcy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVj'@;
put 'dGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKSksITB9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbS5pc05vcnRoV2VzdE9mKHRoaXMudG8pPyJOVy1TRSI6dGhpcy5mcm9tLmlzTm9ydGhFYXN0T2YodGhpcy50byk/Ik5FLVNXIjp0aGlzLmZyb20uaXNTb3V0'@;
put 'aEVhc3RPZih0aGlzLnRvKT8iU0UtTlciOnRoaXMuZnJvbS5pc1NvdXRoV2VzdE9mKHRoaXMudG8pPyJTVy1ORSI6dm9pZCAwfXNldERpcmVjdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSJOVy1TRSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSx0aGlz'@;
put 'LmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKV07YnJlYWs7Y2FzZSJORS1TVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTRS1OVyI6W3RoaXMuZnJvbSx0aGlz'@;
put 'LnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTVy1ORSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3Ju'@;
put 'ZXIoKV19fWdldFZlcnRpY2FsRGlyZWN0aW9uKCl7cmV0dXJuWyJORS1TVyIsIk5XLVNFIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iTi1TIjoiUy1OIn1nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl7cmV0dXJuWyJOVy1TRSIsIlNXLU5FIl0uaW5kZXhPZih0aGlzLmdldERp'@;
put 'cmVjdGlvbigpKT4tMT8iVy1FIjoiRS1XIn1mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKTti'@;
put 'cmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKX19ZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNl'@;
put 'dERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKX19Z2V0VG9wU3Rh'@;
put 'cnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wTGVmdENvcm5lcigpe3JldHVybiBZMihOZCx0aGlzKT90'@;
put 'aGlzLmdldFRvcEVuZENvcm5lcigpOnRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKX1nZXRCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8u'@;
put 'Y29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gWTIoTmQsdGhpcyk/dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9Z2V0VG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0'@;
put 'aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIFkyKE5kLHRoaXMpP3RoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldFRvcEVuZENvcm5l'@;
put 'cigpfWdldEJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbUxlZnRDb3JuZXIoKXty'@;
put 'ZXR1cm4gWTIoTmQsdGhpcyk/dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1h'@;
put 'dGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcExlZnRDb3JuZXIoKXtyZXR1cm4gWTIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfWdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl7cmV0'@;
put 'dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gWTIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlckJvdHRv'@;
put 'bVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpfWdldE91dGVyVG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRv'@;
put 'LmNvbCkpfWdldE91dGVyVG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gWTIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpfWdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3Jk'@;
put 'cyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJuIFkyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldE91dGVy'@;
put 'Qm90dG9tU3RhcnRDb3JuZXIoKX1pc0Nvcm5lcihsKXtyZXR1cm4gbC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSl8'@;
put 'fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9Z2V0T3Bwb3NpdGVDb3JuZXIobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBjUCYmKGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOmwu'@;
put 'aXNFcXVhbCh0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVy'@;
put 'Qm90dG9tU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnZvaWQgMCl9Z2V0Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSlyZXR1cm5bXTtjb25zdCBhX3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxh'@;
put 'X2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93'@;
put 'KSxkX2JvdHRvbT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKSxoPVtdO3JldHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9'@;
put 'PT1kX3JpZ2h0JiZoLnB1c2goWTIoTmQsdGhpcyk/ImxlZnQiOiJyaWdodCIpLGFfYm90dG9tPT09ZF9ib3R0b20mJmgucHVzaCgiYm90dG9tIiksYV9sZWZ0PT09ZF9sZWZ0JiZoLnB1c2goWTIoTmQsdGhpcyk/InJpZ2h0IjoibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMuZ2V0'@;
put 'T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhpcy50'@;
put 'by5yb3chPT1ofHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxl'@;
put 'dCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChsLnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYmYS5jb2w9PT1mP2E6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10aGlz'@;
put 'LmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihsZXQgZj1hLmNvbDtmPD1kLmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyBnSyh0aGlz'@;
put 'LmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byxZMihOZCx0aGlzKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBjUChsLGEsWTIoTmQsdGhpcykpfX1j'@;
put 'b25zdCBtSz1nSztmdW5jdGlvbiBHMihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZWV0KGMpe3ZhciBsPWZ1bmN0aW9uIHRldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu'@;
put 'Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgdkt7Z2V0IGV2ZW50TWFuYWdlcigpe3Jl'@;
put 'dHVybiBuZXcgWjIodGhpcyl9Y29uc3RydWN0b3IobCxhKXtHMih0aGlzLCJ3dFRhYmxlIix2b2lkIDApLEcyKHRoaXMsInd0U2Nyb2xsIix2b2lkIDApLEcyKHRoaXMsInd0Vmlld3BvcnQiLHZvaWQgMCksRzIodGhpcywid3RPdmVybGF5cyIsdm9pZCAwKSxHMih0aGlzLCJzZWxlY3Rpb25N'@;
put 'YW5hZ2VyIix2b2lkIDApLEcyKHRoaXMsInd0RXZlbnQiLHZvaWQgMCksRzIodGhpcywiZ3VpZCIsYHd0XyR7ZyQoKX1gKSxHMih0aGlzLCJkcmF3SW50ZXJydXB0ZWQiLCExKSxHMih0aGlzLCJkcmF3biIsITEpLEcyKHRoaXMsImFjdGl2ZU92ZXJsYXlOYW1lIiwibWFzdGVyIiksRzIodGhp'@;
put 'cywiZG9tQmluZGluZ3MiLHZvaWQgMCksRzIodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRvbUJpbmRpbmdzPXtyb290VGFibGU6bCxyb290RG9jdW1lbnQ6bC5vd25lckRvY3VtZW50LHJvb3RXaW5kb3c6bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSx0aGlzLnd0U2V0dGlu'@;
put 'Z3M9YSx0aGlzLnd0U2Nyb2xsPW5ldyBaUWUodGhpcy5jcmVhdGVTY3JvbGxEYW8oKSl9ZmluZE9yaWdpbmFsSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5v'@;
put 'ZGVzLmxlbmd0aCl7Zm9yKGxldCBhPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKWwucHVzaCh0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2FdLmlubmVySFRNTCk7dGhpcy53dFNldHRpbmdz'@;
put 'LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUoImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlvbihhLGQpe0xtKGQsbFthXSl9XSl9fWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IGNQKGwsYSx0aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygicnRsTW9kZSIpKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiBuZXcgbUsobCxhLGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVu'@;
put 'dHNbMF07cmV0dXJuIHRoaXMuZHJhd0ludGVycnVwdGVkPSExLCF0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCl8fGFmZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlKT90aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMDp0aGlzLnd0VGFibGUuZHJhdyhsKSx0aGlzfWdldENlbGwo'@;
put 'bCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygiZml4ZWRSb3dzVG9wIiksZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihsLnJvdzxoJiZsLmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMu'@;
put 'dG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxoKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5jb2w8diYmbC5yb3c+PWQtZil7aWYodGhpcy53dE92ZXJsYXlz'@;
put 'LmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9'@;
put 'ZWxzZXtpZihsLmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxkJiZsLnJvdz49ZC1mJiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJs'@;
put 'YXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1yZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCl9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGwsYSxk'@;
put 'KX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGws'@;
put 'YSl9Z2V0Vmlld3BvcnQoKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19'@;
put 'ZGVzdHJveSgpe3RoaXMud3RPdmVybGF5cy5kZXN0cm95KCksdGhpcy53dEV2ZW50LmRlc3Ryb3koKX1jcmVhdGVTY3JvbGxEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9w'@;
put 'T3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0U2V0dGluZ3MoKXtyZXR1'@;
put 'cm4gbC53dFNldHRpbmdzfSxnZXQgcm9vdFdpbmRvdygpe3JldHVybiBsLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9LGdldCB0b3RhbFJvd3MoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpfSxnZXQgdG90YWxDb2x1bW5zKCl7cmV0dXJuIGwud3RTZXR0aW5n'@;
put 'cy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKX0sZ2V0IGZpeGVkUm93c1RvcCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9LGdldCBmaXhlZFJvd3NCb3R0b20oKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRv'@;
put 'bSIpfSxnZXQgZml4ZWRDb2x1bW5zU3RhcnQoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iil9fX1nZXRUYWJsZURhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgcGFyZW50VGFibGVPZmZzZXQoKXtyZXR1'@;
put 'cm4gbC5jbG9uZVNvdXJjZS53dFRhYmxlLnRhYmxlT2Zmc2V0fSxnZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZX0sZ2V0IHdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBs'@;
put 'Lnd0Vmlld3BvcnR9LGdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIGwud3RPdmVybGF5c30sZ2V0IHNlbGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gbC5zZWxlY3Rpb25NYW5hZ2VyfSxnZXQgZHJhd24oKXtyZXR1cm4gbC5kcmF3bn0sc2V0IGRyYXduKGEpe2wuZHJhd249YX0sZ2V0IHd0VGFibGUo'@;
put 'KXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2Fs'@;
put 'Y3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0'@;
put 'LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9y'@;
put 'dC5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgY291bnRDb2x1bW5zUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVybiBsLnd0Vmll'@;
put 'd3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgc3RhcnRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxl'@;
put 'Q2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgZW5kUm93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJD'@;
put 'YWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0'@;
put 'b3IuZW5kUm93fSxnZXQgY291bnRSb3dzUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRSb3dzVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgY29sdW1u'@;
put 'SGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpfSxnZXQgcm93SGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpfX19fWZ1bmN0aW9uIGkzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbmV0'@;
put 'KGMpe3ZhciBsPWZ1bmN0aW9uIHJldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgaWV0IGV4dGVuZHMgdkt7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksaTNlKHRoaXMsImNsb25lU291cmNlIix2b2lkIDAp'@;
put 'LGkzZSh0aGlzLCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVybGF5PWQub3ZlcmxheSx0aGlzLnd0VGFibGU9dGhpcy5jbG9uZU92ZXJs'@;
put 'YXkuY3JlYXRlVGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1kLnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1kLnNlbGVjdGlvbk1hbmFnZXIsdGhpcy53dEV2ZW50PW5ldyBIZmUoaCx0aGlz'@;
put 'LmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLGQuZXZlbnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyBWRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpeyhmdW5jdGlvbiBhZXQo'@;
put 'YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNldChjKXt2YXIgbD1mdW5jdGlvbiBvZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywid3RTZXR0aW5ncyIsbnVsbCksVHAodGhpcywid290IixsLHt3cml0YWJsZToh'@;
put 'MX0pLHRoaXMuZG9tQmluZGluZ3M9Zix0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oO2NvbnN0e1RBQkxFOnYsaGlkZXI6TSxzcHJlYWRlcjpJLGhvbGRlcjpHLHd0Um9vdEVsZW1lbnQ6cmV9PXRoaXMud290Lnd0VGFibGU7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlz'@;
put 'LnR5cGU9ZCx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT12LHRoaXMuaGlkZXI9TSx0aGlzLnNwcmVhZGVyPUksdGhpcy5ob2xkZXI9Ryx0aGlzLnd0Um9vdEVsZW1lbnQ9cmUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj1vXyh0aGlzLmhpZGVyLnBhcmVu'@;
put 'dE5vZGUucGFyZW50Tm9kZSksdGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNob3VsZEJlUmVuZGVyZWQoKSx0aGlzLmNsb25lPXRoaXMubWFrZUNsb25lKCl9aGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl7cmV0dXJuIHRoaXMubmVlZEZ1bGxSZW5kZXIhPT10aGlzLnNob3VsZEJlUmVuZGVy'@;
put 'ZWQoKX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKGwpeyJiZWZvcmUiPT09bCYmdGhpcy5zaG91bGRCZVJlbmRlcmVkKCk/dGhpcy5uZWVkRnVsbFJlbmRlcj0hMDoiYWZ0ZXIiPT09bCYmIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpJiYodGhpcy5uZWVkRnVsbFJlbmRlcj0hMSl9c2hvdWxkQmVS'@;
put 'ZW5kZXJlZCgpe3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0NvbnRhaW5lcj1vXyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9v'@;
put 'dFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhpcy53b3Qud3RUYWJsZS5o'@;
put 'b2xkZXI6RUUobC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhsKSlyZXR1cm4gdm9pZCBZbyhgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50eXBl'@;
put 'fSBvdmVybGF5YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSx2PWE8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'ImZpeGVkUm93c1RvcCIpLE09YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxJPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixHPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3Rh'@;
put 'cnRQb3NpdGlvbihJKSx0b3A6SS5vZmZzZXRUb3B9LHJlPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKSx0b3A6bC5vZmZzZXRUb3B9O2xldCB1ZT1udWxsO3JldHVybiB1ZT1oP3RoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3codixmLHJlLEcp'@;
put 'OnRoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIodixNLGYscmUsRyksdWV9Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3JldHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zmc2V0V2lkdGg6bC5vZmZz'@;
put 'ZXRMZWZ0fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PTAsTT0wO2lmKGEpe2xldCBJPWYubGVmdDt0aGlzLmlzUnRsKCkmJihJPXRo'@;
put 'aXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCtkMCgpKSksdj1JPD0wPy0xKkk6MH1lbHNlIHY9aC5zdGFydDtyZXR1cm4gTT1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtZi50b3A6aC50b3As'@;
put 'e3N0YXJ0OmQuc3RhcnQrdix0b3A6ZC50b3ArTX19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCB2X2hvcml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSx2X3ZlcnRpY2Fs'@;
put 'PXRoaXMud290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBNPTAsST0wO2lmKGR8fChNPXZfaG9yaXpvbnRhbC1mLnN0YXJ0KSxhKXtjb25zdCBHPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtJPS0x'@;
put 'KnRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ArRy50b3B9ZWxzZSBsfHwoST12X3ZlcnRpY2FsLWYudG9wKTtyZXR1cm57c3RhcnQ6aC5zdGFydC1NLHRvcDpoLnRvcC1JfX1tYWtlQ2xvbmUoKXtpZigtMT09PSRmZS5pbmRleE9mKHRoaXMudHlw'@;
put 'ZSkpdGhyb3cgbmV3IEVycm9yKGBDbG9uZSB0eXBlICIke3RoaXMudHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7Y29uc3R7d3RUYWJsZTpsLHd0U2V0dGluZ3M6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyxmPWQuY3JlYXRlRWxl'@;
put 'bWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksTT1sLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtmLmNsYXNzTmFtZT1gJHtJUWUuZ2V0KHRoaXMudHlwZSl9IGhhbmRzb250YWJsZWAsZi5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5pc1J0bCgpPyJydGwiOiJsdHIiKSxm'@;
put 'LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS50b3A9MCxmLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLmlzUnRsKCk/Zi5zdHlsZS5yaWdodD0wOmYuc3R5bGUubGVmdD0wLGEuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmbXMoZixbWyJyb2xlIiwicHJlc2VudGF0aW9u'@;
put 'Il1dKSx2LmNsYXNzTmFtZT1sLlRBQkxFLmNsYXNzTmFtZSxsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZ2LnNldEF0dHJpYnV0ZSgicm9sZSIsbC5UQUJMRS5nZXRBdHRyaWJ1dGUoInJvbGUiKSksZi5hcHBlbmRDaGlsZCh2KSxNLmFwcGVuZENoaWxkKGYpO2NvbnN0IEc9dGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSEwPT09R3x8Imhvcml6b250YWwiPT09RyYmdGhpcy50eXBlPT09JDd8fCJ2ZXJ0aWNhbCI9PT1HJiZ0aGlzLnR5cGU9PT1LNz9oOiJoaWRkZW4iPT09'@;
put 'aC5nZXRDb21wdXRlZFN0eWxlKE0pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6RUUobC5UQUJMRSksbmV3IGlldCh2LHRoaXMud3RTZXR0aW5ncyx7c291cmNlOnRoaXMud290LG92ZXJsYXk6dGhpcyx2aWV3cG9ydDp0aGlzLndvdC53dFZpZXdwb3J0LGV2ZW50OnRo'@;
put 'aXMud290Lnd0RXZlbnQsc2VsZWN0aW9uTWFuYWdlcjp0aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5uZWVkRnVsbFJlbmRlcil7Y29uc3QgYT10'@;
put 'aGlzLmNsb25lLmNsb25lU291cmNlO2EuYWN0aXZlT3ZlcmxheU5hbWU9dGhpcy5jbG9uZS53dFRhYmxlLm5hbWUsdGhpcy5jbG9uZS5kcmF3KGwpLGEuYWN0aXZlT3ZlcmxheU5hbWU9Im1hc3RlciJ9fXJlc2V0KCl7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO1tsLnN0eWxl'@;
put 'LHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZSxsLnBhcmVudE5vZGUuc3R5bGVdLmZvckVhY2godj0+e3Yud2lkdGg9IiIsdi5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2'@;
put 'ZW50TWFuYWdlci5kZXN0cm95KCl9fWNvbnN0IHlLPWM9Pntjb25zdCBsPWMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIik7aWYobC5pc0NsYXNzaWNUaGVtZSgpKXJldHVybiBPYmplY3QuZnJlZXplKHt3aWR0aDo2LGhlaWdodDo2LGJvcmRlcldpZHRoOjEsYm9yZGVy'@;
put 'U3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjoiI0ZGRiJ9KTtjb25zdCBhPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1zaXplIiksZD1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtYm9yZGVyLXdpZHRoIiksaD1sLmdldENTU1ZhcmlhYmxlVmFsdWUo'@;
put 'ImNlbGwtYXV0b2ZpbGwtYm9yZGVyLWNvbG9yIik7cmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOmEsaGVpZ2h0OmEsYm9yZGVyV2lkdGg6ZCxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOmh9KX07Y2xhc3MgaGV0IGV4dGVuZHMgVkV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3Vw'@;
put 'ZXIobCxhLCQ3LGQsaCksZnVuY3Rpb24gY2V0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB1ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gZGV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy'@;
put 'IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj'@;
put 'LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzVG9w'@;
put 'IiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJu'@;
put 'IG5ldyBIUWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8'@;
put 'fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJm'@;
put 'bG93Iik7bGV0IGg9MCxmPSExO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxkJiYidmVydGljYWwiPT09ZCloPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxrRShsKTtlbHNle2NvbnN0e3d0VGFibGU6TX09dGhpcy53b3QsST1NLmhpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp'@;
put 'O2Y9TWF0aC5jZWlsKEkuYm90dG9tKT09PWwub2Zmc2V0SGVpZ2h0LGg9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksV08obCwiMHB4IixgJHtofXB4YCl9Y29uc3Qgdj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihoLGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgp'@;
put 'LHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5zY3JvbGxUbyhVTyhhKSxs'@;
put 'KSxoPWYhPT1hLnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5zY3JvbGxUb3A7ZC5zY3JvbGxUb3A9bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIp'@;
put 'fXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGgpO2YrPXZvaWQg'@;
put 'MD09PXY/ZDp2LGgrPTF9cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RS'@;
put 'b290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdz'@;
put 'LmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXtsZXQgRz1hLmdldFdvcmtzcGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoRy09ZDAoZCkpLEc9TWF0aC5taW4oRyxsLnd0Um9vdEVs'@;
put 'ZW1lbnQuc2Nyb2xsV2lkdGgpLHYud2lkdGg9YCR7R31weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9di53aWR0aDtsZXQgST1TdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEk9MCksdi5oZWln'@;
put 'aHQ9YCR7SX1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT15Syh0aGlzLndvdCksZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFyc2VJbnQoYS5oZWlnaHQsMTApLzI6MDt0aGlz'@;
put 'LmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxsLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChsLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LDEwKStkfXB4YH1hcHBseVRv'@;
put 'RE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qu'@;
put 'd3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVh'@;
put 'ZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09'@;
put 'Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2NvbnN0e3dv'@;
put 'dDpkLHd0U2V0dGluZ3M6aH09dGhpcyx2PShkLmNsb25lU291cmNlP2QuY2xvbmVTb3VyY2U6ZCkud3RUYWJsZS5ob2xkZXIsTT1oLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxHPTA9PT1oLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpJiZNLmxlbmd0aD4wJiYhZ3Modi5wYXJlbnRO'@;
put 'b2RlLCJpbm5lckJvcmRlclRvcCIpPzE6MDtsZXQgcmU9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLHVlPTA7aWYoYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoYT0hMSksYSYmdi5vZmZzZXRI'@;
put 'ZWlnaHQhPT12LmNsaWVudEhlaWdodCYmKHVlPWQwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYSl7Y29uc3QgeWU9aC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxFZT1oLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JlKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSks'@;
put 'cmUtPWQud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKEVlLXllLEVlKSxyZSs9MSxyZSs9R31lbHNlIHJlKz10aGlzLnN1bUNlbGxTaXplcyhoLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGwpO3JldHVybiByZSs9dWUsc2ZlKHRoaXMubWFpblRh'@;
put 'YmxlU2Nyb2xsYWJsZUVsZW1lbnQpPT09cmUtRyYmRz4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVyVmVydGljYWxseUJ5KEcpLHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24ocmUpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVs'@;
put 'ZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gWk8odGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdl'@;
put 'dE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2Nv'@;
put 'bnN0IHY9dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO2Q9TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnYmJihkPTApfXJldHVybiBkfWFk'@;
put 'anVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0e3d0U2V0dGluZ3M6ZH09dGhpcyxoPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsZj1kLmdldFNldHRp'@;
put 'bmcoInRvdGFsQ29sdW1ucyIpLHY9Imhvcml6b250YWwiPT09ZC5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtmP2hzKGgsImVtcHR5Q29sdW1ucyIpOkVpKGgsImVtcHR5Q29sdW1ucyIpO2xldCBNPSExO2lmKCFhJiYhdil7Y29uc3QgST1kLmdldFNldHRpbmcoImZpeGVkUm93c1Rv'@;
put 'cCIpLEc9dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3AhPT1JLHJlPWQuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2lmKChHfHwwPT09SSkmJnJlLmxlbmd0aD4wKXtjb25zdCB1ZT1ncyhoLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPWQuZ2V0U2V0dGluZygi'@;
put 'Zml4ZWRSb3dzVG9wIiksbHx8MD09PWQuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KEVpKGgsImlubmVyQm9yZGVyVG9wIiksTT0hdWUpOihocyhoLCJpbm5lckJvcmRlclRvcCIpLE09dWUpfX1yZXR1cm4gTX19Y29uc3QgYTNlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlz'@;
put 'LmdldFJlbmRlcmVkUm93c0NvdW50KCk7cmV0dXJuIDA9PT1jPy0xOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1jfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJv'@;
put 'dygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7'@;
put 'cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0'@;
put 'b3RhbFJvd3MiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50OigpPT4wfTtUcChhM2UsIk1JWElOX05BTUUi'@;
put 'LCJzdGlja3lSb3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IHMzZT1hM2U7Y2xhc3MgYksgZXh0ZW5kcyBnX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLFJwKX19eGwoYkssczNlKSx4bChiSyxoSyk7Y29uc3QgcGV0PWJLO2NsYXNzIHll'@;
put 'dCBleHRlbmRzIFZFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxScCxkLGgpLGZ1bmN0aW9uIGdldChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbWV0KGMpe3ZhciBsPWZ1bmN0aW9uIHZldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tT'@;
put 'eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0'@;
put 'dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw'@;
put 'fSk6Y1tsXT1hLGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c0JvdHRvbSIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3'@;
put 'IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgcGV0KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtp'@;
put 'ZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVu'@;
put 'dE5vZGU7YS5zdHlsZS50b3A9IiI7bGV0IGQ9MDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8aCYmInZlcnRpY2FsIj09PWg/KGQ9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMucmVw'@;
put 'b3NpdGlvbk92ZXJsYXkoKSk6KGQ9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksYS5zdHlsZS5ib3R0b209YCR7ZH1weGApO2NvbnN0IGY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZCk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksZn1yZXBvc2l0aW9uT3Zlcmxh'@;
put 'eSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNl'@;
put 'SGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9ZDAoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5k'@;
put 'aW5ncyxkPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7bGV0IGg9ITE7aWYoZD09PWEmJmwhPT1hLnNjcm9sbFkpe2NvbnN0IGY9YS5zY3JvbGxZO2Euc2Nyb2xsVG8oVU8oYSksdG9wKSxoPWYhPT1hLnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5z'@;
put 'Y3JvbGxUb3A7ZC5zY3JvbGxUb3A9bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0e3d0VGFibGU6ZCx3dFNldHRpbmdzOmh9PXRoaXMu'@;
put 'd290LGY9aC5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCB2PWwsTT0wO2Zvcig7djxhOyl7Y29uc3QgST1kLmdldFJvd0hlaWdodCh2KTtNKz12b2lkIDA9PT1JP2Y6SSx2Kz0xfXJldHVybiBNfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMu'@;
put 'dXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhp'@;
put 'cy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29u'@;
put 'dGFpbmVyIT09aHx8Imhvcml6b250YWwiPT09TSl7bGV0IEc9YS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2EuaGFzVmVydGljYWxTY3JvbGwoKSYmKEctPWQwKGQpKSxHPU1hdGgubWluKEcsbC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSx2LndpZHRoPWAke0d9cHhgfWVsc2Ugdi53aWR0aD0i'@;
put 'Ijt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPXYud2lkdGg7bGV0IEk9U3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtsLmhhc0RlZmluZWRTaXplKCl8fChJPTApLHYuaGVpZ2h0PWAke0l9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6'@;
put 'bH09dGhpcy5jbG9uZS53dFRhYmxlO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9YXBw'@;
put 'bHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMu'@;
put 'd290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5z'@;
put 'cHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxl'@;
put 'W2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQg'@;
put 'ZD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29uc3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCB2PTA7YSYmZi5vZmZzZXRIZWlnaHQhPT1mLmNsaWVudEhlaWdodCYmKHY9ZDAodGhpcy5kb21C'@;
put 'aW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhkKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLGQrPTEpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0'@;
put 'b20iKSxsKSxkKz12LHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6'@;
put 'MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBaTyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5n'@;
put 'cy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3QgaD10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksdj1oLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3Rh'@;
put 'bEhlaWdodCgpLE09dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtkPU1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktTStoLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRq'@;
put 'dXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGQ9dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20hPT1hLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtsZXQg'@;
put 'Zj0hMTtpZigoZHx8MD09PWEpJiZoLmxlbmd0aD4wKXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsTT1ncyh2LCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJv'@;
put 'd3NCb3R0b20iKSxsfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhFaSh2LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9IU0pOihocyh2LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9TSl9cmV0dXJuIGZ9fWNvbnN0IG8zZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygp'@;
put 'e2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmly'@;
put 'c3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJl'@;
put 'ZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2Jq'@;
put 'ZWN0LmVuZFJvd1BhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NSZW5kZXJlZH0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NP'@;
put 'YmplY3QuY291bnRSb3dzVmlzaWJsZX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O1RwKG8zZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRSb3dzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0p'@;
put 'O2NvbnN0IGwzZT1vM2UsYzNlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpfSxnZXRGaXJzdFBh'@;
put 'cnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRM'@;
put 'YXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFs'@;
put 'Q29sdW1ucyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nl'@;
put 'c3NPYmplY3Qucm93SGVhZGVycy5sZW5ndGh9fTtUcChjM2UsIk1JWElOX05BTUUiLCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgX0s9YzNlO2NsYXNzIHdLIGV4dGVuZHMgZ197Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQs'@;
put 'aCxLNyl9fXhsKHdLLGwzZSkseGwod0ssX0spO2NvbnN0IHdldD13SztjbGFzcyBDZXQgZXh0ZW5kcyBWRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsSzcsZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7'@;
put 'ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgd2V0KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6'@;
put 'bH09dGhpcy53b3Q7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IWwuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnRO'@;
put 'b2RlLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBmPTA7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGgmJiJob3Jpem9udGFsIj09PWg/KGY9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLGtFKGQpKTooZj10aGlzLmdldE92ZXJsYXlPZmZz'@;
put 'ZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpLFdPKGQsYCR7Zn1weGAsIjBweCIpKTtjb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzph'@;
put 'fT10aGlzLmRvbUJpbmRpbmdzO2xldCBkPSExO3RoaXMuaXNSdGwoKSYmKGw9LWwpO2NvbnN0IGg9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtpZihoPT09YSYmbCE9PWEuc2Nyb2xsWCl7Y29uc3QgZj1hLnNjcm9sbFg7YS5zY3JvbGxUbyhsLEUkKGEpKSxkPWYhPT1hLnNjcm9s'@;
put 'bFh9ZWxzZSBpZihsIT09aC5zY3JvbGxMZWZ0KXtjb25zdCBmPWguc2Nyb2xsTGVmdDtoLnNjcm9sbExlZnQ9bCxkPWYhPT1oLnNjcm9sbExlZnR9cmV0dXJuIGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVz'@;
put 'KGwsYSl7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KWYrPXRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCl8fGQsaCs9MTtyZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlz'@;
put 'LnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRo'@;
put 'aXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0Nv'@;
put 'bnRhaW5lciE9PWh8fCJ2ZXJ0aWNhbCI9PT1NKXtsZXQgRz1hLmdldFdvcmtzcGFjZUhlaWdodCgpO2EuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoRy09ZDAoZCkpLEc9TWF0aC5taW4oRyxsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KSx2LmhlaWdodD1gJHtHfXB4YH1lbHNlIHYuaGVp'@;
put 'Z2h0PSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUuaGVpZ2h0PXYuaGVpZ2h0O2NvbnN0IEk9aXUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt2LndpZHRoPWAke0l9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRh'@;
put 'YmxlLGE9eUsodGhpcy53b3QpLGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpP3BhcnNlSW50KGEud2lkdGgsMTApLzI6MDt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LGwuc3R5bGUuaGVp'@;
put 'Z2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsbC5zdHlsZS53aWR0aD1gJHtwYXJzZUludChsLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxhPXRoaXMuaXNS'@;
put 'dGwoKT8icmlnaHQiOiJsZWZ0IjtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0'@;
put 'b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPSIwIn10aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0'@;
put 'PSIiOnRoaXMuc3ByZWFkZXIuc3R5bGUucmlnaHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcD0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0'@;
put 'Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d3RTZXR0aW5nczpkfT10aGlzLGg9ZC5nZXRTZXR0aW5nKCJy'@;
put 'b3dIZWFkZXJzIiksZj1kLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksTT0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyLEk9MD09PWYmJmgubGVuZ3RoPjAmJiFncyhNLnBhcmVudE5vZGUsImlubmVyQm9y'@;
put 'ZGVySW5saW5lU3RhcnQiKT8xOjA7bGV0IEc9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLHJlPTA7cmV0dXJuIGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkmJihhPSExKSxhJiZNLm9mZnNldFdp'@;
put 'ZHRoIT09TS5jbGllbnRXaWR0aCYmKHJlPWQwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8oRys9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLEctPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpLEcrPUkpOkcrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMu'@;
put 'd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGwpLEcrPXJlLG9mZSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PUctSSYmST4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkoSSksdGhpcy5zZXRTY3JvbGxQ'@;
put 'b3NpdGlvbihHKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe2xldCBhPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGE9dGhpcy53b3Qud3RU'@;
put 'YWJsZS5ob2xkZXJPZmZzZXQubGVmdCksYX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyhUJCh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9'@;
put 'PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGEmJiJob3Jpem9udGFsIj09PWF8fChkPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0'@;
put 'aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9u'@;
put 'ZS53dFRhYmxlLmdldFRvdGFsV2lkdGgoKSYmKGQ9MCkpLGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyxkPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD1hLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWEuZ2V0'@;
put 'U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSx2PWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksTT0idmVydGljYWwiPT09YS5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt2P2hzKGQsImVtcHR5Um93cyIpOkVpKGQsImVtcHR5Um93cyIpO2xldCBJPSExO2lmKCFNKWlmKGYmJiFo'@;
put 'Lmxlbmd0aClFaShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2Vsc2UgaWYoIWYmJmgubGVuZ3RoKXtjb25zdCBHPWdzKGQsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtsPyhFaShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIp'@;
put 'LEk9IUcpOihocyhkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEk9Ryl9cmV0dXJuIEl9fWNsYXNzIENLIGV4dGVuZHMgZ197Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxYNyl9fXhsKENLLFhmZSkseGwoQ0ssX0spO2NvbnN0IE1ldD1DSztm'@;
put 'dW5jdGlvbiB1M2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhldChjKXt2YXIgbD1mdW5jdGlvbiBFZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi'@;
put 'ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy'@;
put 'biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRldCBleHRlbmRzIFZFe2NvbnN0cnVjdG9yKGwsYSxkLGgs'@;
put 'Zix2KXtzdXBlcihsLGEsWDcsZCxoKSx1M2UodGhpcywidG9wT3ZlcmxheSIsdm9pZCAwKSx1M2UodGhpcywiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PXZ9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1l'@;
put 'bnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IE1ldCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlz'@;
put 'LmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9XTyhsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhp'@;
put 'cy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKX1weGApOmtFKGwpO2xldCBhPVN1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgZD1pdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChhPTApLGwu'@;
put 'c3R5bGUuaGVpZ2h0PWAke2F9cHhgLGwuc3R5bGUud2lkdGg9YCR7ZH1weGAsITF9fWNsYXNzIFNLIGV4dGVuZHMgZ197Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxObSl9fXhsKFNLLHMzZSkseGwoU0ssX0spO2NvbnN0IEFldD1TSztjbGFzcyBrZXQgZXh0ZW5kcyBWRXtj'@;
put 'b25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCxhLE5tLGQsaCksdGhpcy5ib3R0b21PdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJn'@;
put 'dW1lbnRzW2RdO3JldHVybiBuZXcgQWV0KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0'@;
put 'T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3dvdDpsfT10aGlzO2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhbC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2Rl'@;
put 'O2lmKGEuc3R5bGUudG9wPSIiLHRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpe2NvbnN0IGY9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLHY9dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTth'@;
put 'LnN0eWxlW3RoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7Zn1weGAsYS5zdHlsZS5ib3R0b209YCR7dn1weGB9ZWxzZSBrRShhKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IGQ9U3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBoPWl1KHRoaXMuY2xvbmUud3RU'@;
put 'YWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGQ9MCksYS5zdHlsZS5oZWlnaHQ9YCR7ZH1weGAsYS5zdHlsZS53aWR0aD1gJHtofXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMu'@;
put 'd290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRp'@;
put 'Y2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9ZDAoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfX1mdW5jdGlvbiB1UChjLGwsYSl7KGZ1bmN0aW9uIERldChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo'@;
put 'ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gX2coYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElldChjKXt2YXIgbD1mdW5jdGlvbiBSZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj'@;
put 'O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh'@;
put 'bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3'@;
put 'cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHE3KGMsbCxhKXtyZXR1cm4gYy5zZXQoZDNlKGMsbCksYSksYX1mdW5jdGlvbiB3ZyhjLGwpe3JldHVybiBjLmdldChkM2UoYyxsKSl9ZnVuY3Rpb24gZDNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs'@;
put 'KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgdl89bmV3IFdlYWtNYXAsZFA9bmV3IFdlYWtNYXAseV89bmV3IFdlYWtNYXAsaFA9bmV3IFdlYWtNYXA7'@;
put 'Y29uc3QgT2V0PWNsYXNzIExldHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7X2codGhpcywid290IixudWxsKSx1UCh0aGlzLHZfLFtdKSxfZyh0aGlzLCJ0b3BPdmVybGF5IixudWxsKSxfZyh0aGlzLCJib3R0b21PdmVybGF5IixudWxsKSxfZyh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXki'@;
put 'LG51bGwpLF9nKHRoaXMsInRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksX2codGhpcywiYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSxfZyh0aGlzLCJicm93c2VyTGluZUhlaWdodCIsdm9pZCAwKSxfZyh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSx1UCh0'@;
put 'aGlzLGRQLCExKSx1UCh0aGlzLHlfLDApLHVQKHRoaXMsaFAsbnVsbCksX2codGhpcywicmVzaXplT2JzZXJ2ZXIiLG5ldyBSZXNpemVPYnNlcnZlcihyZT0+e0NFKCgpPT57IUFycmF5LmlzQXJyYXkocmUpfHwhcmUubGVuZ3RofHwocTcoeV8sdGhpcyx3Zyh5Xyx0aGlzKSsxKSwxMDA9PT13'@;
put 'Zyh5Xyx0aGlzKSYmKFlvKCJUaGUgUmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2FzIGZpcmVkIHRvbyBtYW55IHRpbWVzIGluIGRpcmVjdCBzdWNjZXNzaW9uLlxuVGhpcyBtYXkgYmUgZHVlIHRvIGFuIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5IHNldHRpbmcgYSBkeW5hbWljIGhlaWdodC93'@;
put 'aWR0aCAoZm9yIGV4YW1wbGUsIHdpdGggdGhlIGBkdmhgIHVuaXRzKSB0byBhIEhhbmRzb250YWJsZSBjb250YWluZXIncyBwYXJlbnQuIFxuVGhlIG9ic2VydmVyIHdpbGwgYmUgZGlzY29ubmVjdGVkLiIpLHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKSxudWxsIT09d2coaFAs'@;
put 'dGhpcykmJmNsZWFyVGltZW91dCh3ZyhoUCx0aGlzKSkscTcoaFAsdGhpcyxzZXRUaW1lb3V0KCgpPT57cTcoeV8sdGhpcywwKX0sMTAwKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZSIpKX0pfSkpLHRoaXMud290PWwsdGhpcy53dFNldHRp'@;
put 'bmdzPWgsdGhpcy5kb21CaW5kaW5ncz1kLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFRhYmxlPXY7Y29uc3R7cm9vdERvY3VtZW50Ok0scm9vdFdpbmRvdzpJfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5ldmVudE1hbmFnZXI9Zix0aGlzLnNjcm9s'@;
put 'bGJhclNpemU9ZDAoTSk7Y29uc3QgRz0iaGlkZGVuIj09PUkuZ2V0Q29tcHV0ZWRTdHlsZSh2Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50PUc/di5ob2xkZXI6RUUodi5UQUJMRSksdGhpcy5pbml0'@;
put 'T3ZlcmxheXMoKSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxhc3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2Vy'@;
put 'TGluZUhlaWdodCgpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmxhc3RTY3JvbGxYPUkuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPUkuc2Nyb2xsWX1nZXRPdmVybGF5cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNb'@;
put 'MF07Y29uc3QgYT1bLi4ud2codl8sdGhpcyldO3JldHVybiBsJiZhLnB1c2godGhpcy53dFRhYmxlKSxhfWluaXRCcm93c2VyTGluZUhlaWdodCgpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RG9jdW1lbnQ6YX09dGhpcy5kb21CaW5kaW5ncyxkPWwuZ2V0Q29tcHV0ZWRTdHlsZShhLmJvZHkp'@;
put 'LGg9cGFyc2VJbnQoZC5saW5lSGVpZ2h0LDEwKSxmPTEuMipwYXJzZUludChkLmZvbnRTaXplLDEwKTt0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0PWh8fGZ9aW5pdE92ZXJsYXlzKCl7Y29uc3QgbD1bdGhpcy53b3QsdGhpcy5mYWNhZGVHZXR0ZXIsdGhpcy53dFNldHRpbmdzLHRoaXMuZG9tQmlu'@;
put 'ZGluZ3NdO3RoaXMudG9wT3ZlcmxheT1uZXcgaGV0KC4uLmwpLHRoaXMuYm90dG9tT3ZlcmxheT1uZXcgeWV0KC4uLmwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PW5ldyBDZXQoLi4ubCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IFRldCguLi5sLHRoaXMudG9wT3Zl'@;
put 'cmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IGtldCguLi5sLHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSkscTcodl8sdGhpcyxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3Zl'@;
put 'cmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0pfWJlZm9yZURyYXcoKXtxNyhkUCx0aGlzLHdnKHZfLHRoaXMpLnJlZHVjZSgobCxhKT0+YS5oYXNSZW5kZXJpbmdT'@;
put 'dGF0ZUNoYW5nZWQoKXx8bCwhMSkpLHdnKHZfLHRoaXMpLmZvckVhY2gobD0+bC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJiZWZvcmUiKSl9YWZ0ZXJEcmF3KCl7dGhpcy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpLHdnKHZfLHRoaXMpLmZvckVhY2gobD0+e2NvbnN0IGE9bC5oYXNSZW5kZXJp'@;
put 'bmdTdGF0ZUNoYW5nZWQoKTtsLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoImFmdGVyIiksYSYmIWwubmVlZEZ1bGxSZW5kZXImJmwucmVzZXQoKX0pfXJlZnJlc2hBbGwoKXtpZih0aGlzLndvdC5kcmF3bil7aWYoIXRoaXMud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4gdm9pZCB0'@;
put 'aGlzLmRlc3Ryb3koKTt0aGlzLndvdC5kcmF3KCEwKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmdGhpcy50b3BPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy52ZXJ0aWNhbFNjcm9sbGlu'@;
put 'Zz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITF9fXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpkfT10aGlzLnRvcE92ZXJsYXkse21haW5UYWJsZVNj'@;
put 'cm9sbGFibGVFbGVtZW50Omh9PXRoaXMuaW5saW5lU3RhcnRPdmVybGF5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1lbnQsImtleWRvd24iLHVlPT50aGlzLm9uS2V5RG93bih1ZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIo'@;
put 'bC5kb2N1bWVudEVsZW1lbnQsImtleXVwIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwidmlzaWJpbGl0eWNoYW5nZSIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsInNjcm9s'@;
put 'bCIsdWU9PnRoaXMub25UYWJsZVNjcm9sbCh1ZSkse3Bhc3NpdmU6ITB9KSxkIT09aCYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJzY3JvbGwiLHVlPT50aGlzLm9uVGFibGVTY3JvbGwodWUpLHtwYXNzaXZlOiEwfSk7Y29uc3QgZj1hLmRldmljZVBpeGVsUmF0aW8m'@;
put 'JmEuZGV2aWNlUGl4ZWxSYXRpbz4xLHY9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWEsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudFdoZWVsIiksST17cGFzc2l2ZTp2fTtsZXQgcmU7KE18fGZ8fCFDJCgpKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cih0aGlzLnd0VGFibGUud3RSb290RWxlbWVudCwid2hlZWwiLHVlPT50aGlzLm9uQ2xvbmVXaGVlbCh1ZSxNKSxJKSxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlz'@;
put 'LmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0uZm9yRWFjaCh1ZT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodWUuY2xvbmUud3RUYWJsZS5ob2xkZXIsIndoZWVsIix5ZT0+dGhpcy5vbkNsb25lV2hlZWwoeWUsTSksSSl9KSx0aGlzLmV2ZW50TWFuYWdlci5h'@;
put 'ZGRFdmVudExpc3RlbmVyKGEsInJlc2l6ZSIsKCk9PntDRSgoKT0+e2NsZWFyVGltZW91dChyZSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uV2luZG93UmVzaXplIikscmU9c2V0VGltZW91dCgoKT0+e3E3KHlfLHRoaXMsMCl9LDIwMCl9KX0pLHZ8fHRoaXMucmVzaXplT2JzZXJ2'@;
put 'ZXIub2JzZXJ2ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX1vblRhYmxlU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGQ9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsaD10aGlz'@;
put 'LnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj1sLnRhcmdldDt0aGlzLmtleVByZXNzZWQmJihoIT09YSYmZiE9PWEmJiFsLnRhcmdldC5jb250YWlucyhoKXx8ZCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoZCkpfHx0aGlzLnN5bmNTY3JvbGxQb3NpdGlv'@;
put 'bnMobCl9b25DbG9uZVdoZWVsKGwsYSl7Y29uc3R7cm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdj1sLnRh'@;
put 'cmdldCxNPWYhPT1kJiZ2IT09ZCYmIXYuY29udGFpbnMoZiksST1oIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5zKGgpO2lmKHRoaXMua2V5UHJlc3NlZCYmKE18fEkpfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50PT09ZClyZXR1cm47Y29uc3QgRz10aGlzLnRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Nj'@;
put 'cm9sbChsKTsoYXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudCE9PWQmJkcpJiZsLnByZXZlbnREZWZhdWx0KCl9b25LZXlEb3duKGwpe3RoaXMua2V5UHJlc3NlZD1jXyhsLmtleUNvZGUsIkFSUk9XX1VQfEFSUk9XX1JJR0hUfEFSUk9XX0RPV058QVJST1dfTEVGVCIpfW9uS2V5VXAoKXt0aGlz'@;
put 'LmtleVByZXNzZWQ9ITF9dHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpe2xldCBhPWlzTmFOKGwuZGVsdGFZKT8tMSpsLndoZWVsRGVsdGFZOmwuZGVsdGFZLGQ9aXNOYU4obC5kZWx0YVgpPy0xKmwud2hlZWxEZWx0YVg6bC5kZWx0YVg7MT09PWwuZGVsdGFNb2RlJiYoZCs9ZCp0aGlz'@;
put 'LmJyb3dzZXJMaW5lSGVpZ2h0LGErPWEqdGhpcy5icm93c2VyTGluZUhlaWdodCk7Y29uc3QgaD10aGlzLnNjcm9sbFZlcnRpY2FsbHkoYSksZj10aGlzLnNjcm9sbEhvcml6b250YWxseShkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWZXJ0aWNhbGx5KGwpe2NvbnN0IGE9dGhpcy5zY3JvbGxhYmxl'@;
put 'RWxlbWVudC5zY3JvbGxUb3A7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wKz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcH1zY3JvbGxIb3Jpem9udGFsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQ7cmV0'@;
put 'dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0fXN5bmNTY3JvbGxQb3NpdGlvbnMoKXtpZih0aGlzLmRlc3Ryb3llZClyZXR1cm47Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5o'@;
put 'b2xkZXIsYT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjtsZXQgZD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQsaD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtpZih0aGlzLndvdC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5'@;
put 'U2Nyb2xsYWJsZUJ5V2luZG93KCkmJihkPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWCksdGhpcy53b3Qud3RWaWV3cG9ydC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmKGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxZKSx0aGlzLmhvcml6b250YWxTY3Jv'@;
put 'bGxpbmc9dGhpcy5sYXN0U2Nyb2xsWCE9PWQsdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz10aGlzLmxhc3RTY3JvbGxZIT09aCx0aGlzLmxhc3RTY3JvbGxYPWQsdGhpcy5sYXN0U2Nyb2xsWT1oLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyl7bC5zY3JvbGxMZWZ0PWQ7Y29uc3QgZj10aGlzLmJv'@;
put 'dHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXI/dGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyOm51bGw7ZiYmKGYuc2Nyb2xsTGVmdD1kKX10aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiYoYS5zY3JvbGxUb3A9aCksdGhpcy5yZWZyZXNoQWxsKCl9c3luY1Njcm9sbFdpdGhN'@;
put 'YXN0ZXIoKXtpZighd2coZFAsdGhpcykpcmV0dXJuO2NvbnN0IGw9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHtzY3JvbGxMZWZ0OmEsc2Nyb2xsVG9wOmR9PWw7dGhpcy50b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50b3BPdmVybGF5LmNsb25l'@;
put 'Lnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlz'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3A9ZCkscTcoZFAsdGhpcywhMSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS51cGRhdGVN'@;
put 'YWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLnRvcE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCk7Y29uc3R7d3RUYWJs'@;
put 'ZTpsfT10aGlzLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5zY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjpFRShs'@;
put 'LlRBQkxFKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCl9ZGVzdHJveSgpe3RoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLnRvcE92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0'@;
put 'b21PdmVybGF5LmRlc3Ryb3koKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5kZXN0cm95KCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3Zlcmxh'@;
put 'eSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmRlc3Ryb3llZD0hMH1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MF0mJmFyZ3VtZW50c1swXTt0aGlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSYmdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnJlZnJlc2gobCks'@;
put 'dGhpcy50b3BPdmVybGF5LnJlZnJlc2gobCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRD'@;
put 'b3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpfXVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5zcHJlYWRlcixhPWwuY2xpZW50V2lkdGgsZD1sLmNsaWVudEhlaWdodCxoPWEhPT10aGlz'@;
put 'LnNwcmVhZGVyTGFzdFNpemUud2lkdGh8fGQhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0O3JldHVybiBoJiYodGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRoPWEsdGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodD1kKSxofWFkanVzdEVsZW1lbnRzU2l6ZSgpe2NvbnN0e3d0Vmll'@;
put 'd3BvcnQ6bH09dGhpcy53b3Qse3d0VGFibGU6YX09dGhpcyx7cm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWQsZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygidG90YWxSb3dzIiksTT1sLmdldFJvd0hlYWRlcldpZHRoKCksRz1sLmdldENvbHVtbkhlYWRlckhlaWdodCgpK3RoaXMudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCx2KSsxLHJlPU0rdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsZikseWU9YS5oaWRlci5z'@;
put 'dHlsZSxHZT0oKCk9PiFoJiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD5NYXRoLm1heCgwLEctYS5ob2xkZXIuY2xpZW50SGVpZ2h0KSkoKT8xOjAsc3Q9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Pk1hdGgubWF4KDAscmUtYS5ob2xkZXIuY2xp'@;
put 'ZW50V2lkdGgpKSgpPzE6MDt5ZS53aWR0aD1gJHtyZStzdH1weGAseWUuaGVpZ2h0PWAke0crR2V9cHhgLHRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuYWRq'@;
put 'dXN0RWxlbWVudHNTaXplKCl9ZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkobCl7Y29uc3R7d3RUYWJsZTphfT10aGlzO2EuaGlkZXIuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUuaGVpZ2h0LDEwKStsfXB4YH1leHBhbmRIaWRlckhvcml6b250YWxseUJ5KGwpe2NvbnN0'@;
put 'e3d0VGFibGU6YX09dGhpczthLmhpZGVyLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUud2lkdGgsMTApK2x9cHhgfWFwcGx5VG9ET00oKXt0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLnRvcE92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuYm90dG9tT3Zlcmxh'@;
put 'eS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hcHBseVRvRE9NKCkpfWdldFBhcmVudE92ZXJsYXkobCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtyZXR1cm4gS24oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGg9PntoJiZoLmNsb25lJiZoLmNsb25lLnd0VGFibGUuVEFCTEUuY29udGFpbnMobCkmJihkPWguY2xvbmUp'@;
put 'fSksZH1zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpe2NvbnN0IGw9dGhpcy53dFRhYmxlLlRBQkxFO0tuKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90'@;
put 'dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxkPT57ZCYmKGQuY2xvbmUud3RUYWJsZS5UQUJMRS5jbGFzc05hbWU9bC5jbGFzc05hbWUpfSl9fTtmdW5jdGlvbiBoM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFBldChjKXt2YXIgbD1mdW5jdGlvbiBGZXQoYyxsKXtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11'@;
put 'c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEhldHtjb25zdHJ1Y3RvcihsKXtoM2UodGhpcywic2V0dGluZ3MiLHt9KSxoM2UodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhpcy5nZXREZWZhdWx0cygpKSkscXModGhpcy5kZWZhdWx0'@;
put 'cywoYSxkKT0+e2lmKHZvaWQgMCE9PWxbZF0pdGhpcy5zZXR0aW5nc1tkXT1sW2RdO2Vsc2V7aWYodm9pZCAwPT09YSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtkfSIgd2FzIG5vdCBwcm92aWRlZGApO3RoaXMuc2V0dGluZ3NbZF09YX19KX1nZXREZWZhdWx0cygp'@;
put 'e3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOiExLGN1cnJlbnRSb3dDbGFzc05hbWU6bnVsbCxjdXJyZW50Q29sdW1uQ2xhc3NOYW1lOm51bGwscHJldmVudE92ZXJmbG93OigpPT4hMSxwcmV2ZW50'@;
put 'V2hlZWw6ITEsZGF0YTp2b2lkIDAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NUb3A6MCxmaXhlZFJvd3NCb3R0b206MCxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT4wfHx0aGlzLmdldFNldHRpbmco'@;
put 'InJvd0hlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpPjB8fHRoaXMuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuZ2V0'@;
put 'U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik+MCxtaW5TcGFyZVJvd3M6MCxyb3dIZWFkZXJzOigpPT5bXSxjb2x1bW5IZWFkZXJzOigpPT5bXSx0b3RhbFJvd3M6dm9pZCAwLHRvdGFsQ29sdW1uczp2b2lkIDAsY2VsbFJlbmRlcmVyOihsLGEsZCk9PntMbShkLHRoaXMuZ2V0U2V0dGluZygi'@;
put 'ZGF0YSIsbCxhKT8/IiIpfSxjb2x1bW5XaWR0aCgpe30scm93SGVpZ2h0KCl7fSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lKCl7fSxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3Zl'@;
put 'cnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOm51bGwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxs'@;
put 'LG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1vdXNlT3V0Om51bGwsb25DZWxsTW91c2VVcDpudWxsLG9uQ2VsbERibENsaWNrOm51bGwsb25DZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVsbCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25C'@;
put 'ZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczpudWxsLG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOm51bGwsb25CZWZvcmVEcmF3Qm9yZGVyczpudWxsLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6bD0+bCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTpsPT5sLG9uU2Ny'@;
put 'b2xsSG9yaXpvbnRhbGx5Om51bGwsb25TY3JvbGxWZXJ0aWNhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9sbDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6bnVsbCxvbk1vZGlmeUdldENlbGxDb29yZHM6bnVsbCxvbk1vZGlmeUdldENv'@;
put 'b3Jkc0VsZW1lbnQ6bnVsbCxvbk1vZGlmeUdldENvb3JkczpudWxsLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOmw9Pmwsb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6bD0+bCxvbldpbmRvd1Jlc2l6ZTpudWxsLG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJl'@;
put 'bmRlckFsbENvbHVtbnM6ITEscmVuZGVyQWxsUm93czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVsbCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExLGFyaWFUYWdzOiEwLHN0eWxlc0hhbmRsZXI6bnVsbH19dXBkYXRlKGwsYSl7'@;
put 'cmV0dXJuIHZvaWQgMD09PWE/cXMobCwoZCxoKT0+e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3NbbF09YSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYp'@;
put 'OnZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0aGlzLnNldHRpbmdzW2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVybiB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRoaXMuc2V0dGluZ3NbbF19fWNsYXNzIE1L'@;
put 'IGV4dGVuZHMgZ197Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9b18odGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1h'@;
put 'KXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0IGQ9bC5wYXJlbnRFbGVtZW50LGg9VEUo'@;
put 'bCwiaGVpZ2h0IixhKSxmPVRFKGwsIm92ZXJmbG93IixhKSx2PXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0aDpNLHNjcm9sbEhlaWdodDpJfT1sO2xldCBHPWwub2Zmc2V0V2lkdGgscmU9bC5vZmZzZXRIZWlnaHQ7aWYoZCYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVk'@;
put 'ZXMoZikpe2NvbnN0IHllPWwuY2xvbmVOb2RlKCExKTt5ZS5zdHlsZS5vdmVyZmxvdz0iYXV0byIseWUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLm5leHRFbGVtZW50U2libGluZz9kLmluc2VydEJlZm9yZSh5ZSxsLm5leHRFbGVtZW50U2libGluZyk6ZC5hcHBlbmRDaGlsZCh5ZSk7'@;
put 'Y29uc3QgRWU9cGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKHllKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoeWUpLDA9PT1FZSYmKHJlPTApfXJlPU1hdGgubWluKHJlLEkpLHYuaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke3JlfXB4YCxHPU1hdGgubWluKEcsTSksdi53aWR0aD1g'@;
put 'JHtHfXB4YCx2Lm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09di5oZWlnaHR8fHJlPjAsdGhpcy5oYXNUYWJsZVdpZHRoPUc+MH10aGlzLmlzVGFibGVWaXNpYmxlPXo3KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0'@;
put 'aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxkPSJtYXN0ZXIiLGY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGYmJiFhLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF0pe2NvbnN0IE09bC5nZXRTZXR0aW5n'@;
put 'KCJyb3dIZWFkZXJzIikubGVuZ3RoLEk9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgRz0wO0c8ZjtHKyspZm9yKGxldCByZT0tMSpNO3JlPEk7cmUrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihyZSk7YS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJz'@;
put 'TWFya2VkW2RdPSEwfX19eGwoTUssbDNlKSx4bChNSyxoSyk7Y29uc3QgTmV0PU1LO2Z1bmN0aW9uIEJFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJv'@;
put 'bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o'@;
put 'InN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj'@;
put 'W2xdPWEsY31jbGFzcyBqZXR7Y29uc3RydWN0b3IoKXtCRSh0aGlzLCJjb3VudCIsMCksQkUodGhpcywic3RhcnRSb3ciLDApLEJFKHRoaXMsImVuZFJvdyIsMCksQkUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksQkUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWlu'@;
put 'aXRpYWxpemUobCl7bGV0e3RvdGFsUm93czphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZFJvdz10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gakUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHpldChjKXt2YXIgbD1mdW5jdGlvbiBVZXQoYyxsKXtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0'@;
put 'aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl'@;
put 'bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWIoMzkwOTIpLGIoMTQzNjApO2NsYXNzIGYzZXtjb25zdHJ1Y3Rvcigpe2pFKHRoaXMsImNvdW50IiwwKSxqRSh0aGlzLCJzdGFydFJvdyIsbnVsbCksakUodGhpcywiZW5kUm93IixudWxsKSxqRSh0'@;
put 'aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxqRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhl'@;
put 'aWdodDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Um93PWwpLGQ+PWgmJmQ8PWYmJm51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRh'@;
put 'bFNjcm9sbGJhckhlaWdodDpmLHRvdGFsUm93czp2LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6SSxyb3dIZWlnaHQ6R309bDtpZih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0Um93PjA7KXtjb25zdCB1ZT1JW3RoaXMu'@;
put 'ZW5kUm93XStHLUlbdGhpcy5zdGFydFJvdy0xXTtpZih0aGlzLnN0YXJ0Um93LT0xLHVlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1JW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEo'@;
put 'ZCtoLWY8MHx8ZD5JLmF0KC0xKStHKSx2PHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gcDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaZXQoYyl7'@;
put 'dmFyIGw9ZnVuY3Rpb24gV2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBZZXQgZXh0ZW5kcyBmM2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHAzZSh0aGlzLCJyb3dTdGFydE9mZnNldCIsMCks'@;
put 'cDNlKHRoaXMsInJvd0VuZE9mZnNldCIsMCl9ZmluYWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsUm93czpoLHN0YXJ0UG9zaXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25z'@;
put 'dCB2PXRoaXMuc3RhcnRSb3csTT10aGlzLmVuZFJvdztkKHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Um93LHRoaXMucm93RW5kT2Zmc2V0PXRoaXMuZW5kUm93LU19dGhpcy5zdGFydFJvdzwwJiYodGhpcy5zdGFydFJvdz0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVs'@;
put 'bCE9PShhPWZbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9aC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gekUoYyxsLGEpe3JldHVy'@;
put 'bihsPWZ1bmN0aW9uIEdldChjKXt2YXIgbD1mdW5jdGlvbiAkZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwr'@;
put 'IiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEtldHtjb25zdHJ1Y3Rvcigpe3pFKHRoaXMsImNvdW50IiwwKSx6RSh0aGlzLCJzdGFydFJvdyIsbnVs'@;
put 'bCksekUodGhpcywiZW5kUm93IixudWxsKSx6RSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSx6RSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2Vk'@;
put 'U2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmLHJvd0hlaWdodDp2fT1hO2Q+PWgmJmQrdjw9ZiYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sKX1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3'@;
put 'cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRpb25zOkkscm93SGVpZ2h0Okd9PWw7aWYodGhpcy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJv'@;
put 'dz4wOyl7Y29uc3QgeWU9SVt0aGlzLmVuZFJvd10rRy1JW3RoaXMuc3RhcnRSb3ctMV07aWYoeWU8PWgtZiYmKHRoaXMuc3RhcnRSb3ctPTEpLHllPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1JW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGw7Y29u'@;
put 'c3QgcmU9ZCtoLWYsdWU9bnVsbD09PXRoaXMuc3RhcnRSb3c/MDpsLmdldFJvd0hlaWdodCh0aGlzLnN0YXJ0Um93KTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShyZTx1ZXx8ZD5JLmF0KC0xKSksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXYtMSksbnVsbCE9PXRo'@;
put 'aXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIFVFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBYZXQoYyl7dmFyIGw9ZnVuY3Rpb24gcWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1j'@;
put 'W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y'@;
put 'ZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6'@;
put 'ITB9KTpjW2xdPWEsY31jbGFzcyBKZXR7Y29uc3RydWN0b3IoKXtVRSh0aGlzLCJjb3VudCIsMCksVUUodGhpcywic3RhcnRDb2x1bW4iLDApLFVFKHRoaXMsImVuZENvbHVtbiIsMCksVUUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksVUUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRh'@;
put 'aW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsQ29sdW1uczphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZENvbHVtbj10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gWkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFFldChjKXt2YXIgbD1mdW5j'@;
put 'dGlvbiBldHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGczZXtjb25zdHJ1Y3Rvcigpe1pFKHRoaXMsImNvdW50IiwwKSxaRSh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCksWkUodGhpcywiZW5kQ29sdW1uIixudWxs'@;
put 'KSxaRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxaRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdp'@;
put 'ZHRoOmZ9PWE7ZDw9aCYmKHRoaXMuc3RhcnRDb2x1bW49bCksZD49aCYmZDw9aCsoaD4wP2YrMTpmKSYmbnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCksdGhpcy5lbmRDb2x1bW49bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3'@;
put 'cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2ZXJzZTpJLHN0YXJ0UG9zaXRpb25zOkcsY29sdW1uV2lkdGg6cmV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1NLTEmJkkpZm9yKHRoaXMuc3RhcnRDb2x1'@;
put 'bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgRWU9R1t0aGlzLmVuZENvbHVtbl0rcmUtR1t0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKHRoaXMuc3RhcnRDb2x1bW4tPTEsRWU+aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPUdbdGhpcy5zdGFy'@;
put 'dENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtKHY+MD9oKzE6aCk8LTEqZnx8ZD5HLmF0KC0xKStyZXx8LTEqZC1oPjApLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51bGwhPT10aGlzLnN0'@;
put 'YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBtM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHR0dChjKXt2YXIgbD1mdW5jdGlvbiBudHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh'@;
put 'ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl'@;
put 'LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0'@;
put 'YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHJ0dCBleHRlbmRzIGczZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksbTNlKHRoaXMsImNvbHVtblN0YXJ0T2Zmc2V0IiwwKSxtM2UodGhpcywiY29sdW1uRW5kT2Zmc2V0IiwwKX1maW5hbGl6ZShsKXt2YXIgYTtzdXBlci5maW5h'@;
put 'bGl6ZShsKTtjb25zdHtvdmVycmlkZUZuOmQsdG90YWxDb2x1bW5zOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5zdGFydENvbHVtbiYmImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydENvbHVtbixNPXRoaXMuZW5kQ29sdW1uO2QodGhpcyksdGhp'@;
put 'cy5jb2x1bW5TdGFydE9mZnNldD12LXRoaXMuc3RhcnRDb2x1bW4sdGhpcy5jb2x1bW5FbmRPZmZzZXQ9dGhpcy5lbmRDb2x1bW4tTX10aGlzLnN0YXJ0Q29sdW1uPDAmJih0aGlzLnN0YXJ0Q29sdW1uPTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Zlt0aGlzLnN0YXJ0Q29sdW1u'@;
put 'XSkmJnZvaWQgMCE9PWE/YTpudWxsLGg8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1oLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBXRShjLGwsYSl7cmV0dXJuKGw9ZnVu'@;
put 'Y3Rpb24gaXR0KGMpe3ZhciBsPWZ1bmN0aW9uIGF0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBk'@;
put 'KXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkp'@;
put 'aW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgc3R0e2NvbnN0cnVjdG9yKCl7V0UodGhpcywiY291bnQiLDApLFdFKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSxX'@;
put 'RSh0aGlzLCJlbmRDb2x1bW4iLG51bGwpLFdFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLFdFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNj'@;
put 'cm9sbE9mZnNldDpoLHZpZXdwb3J0V2lkdGg6Zixjb2x1bW5XaWR0aDp2fT1hO2Q+PWgmJmQrdjw9aCsoaD4wP2YrMTpmKSYmKG51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWwpfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9s'@;
put 'bE9mZnNldDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxpbmVTdGFydE9mZnNldDpmLHplcm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29sdW1uczpNLG5lZWRSZXZlcnNlOkksc3RhcnRQb3NpdGlvbnM6Ryxjb2x1bW5XaWR0aDpyZX09bDtpZih0aGlzLmVuZENvbHVtbj09PU0tMSYmSSlmb3Io'@;
put 'dGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBCZT1HW3RoaXMuZW5kQ29sdW1uXStyZS1HW3RoaXMuc3RhcnRDb2x1bW4tMV07aWYoQmU8PWgmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxCZT49aClicmVha310aGlzLnN0YXJ0UG9zaXRp'@;
put 'b249bnVsbCE9PShhPUdbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCB5ZT1kK2gtKHY+MD9oKzE6aCksRWU9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/MDpsLmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4pO3RoaXMuaXNWaXNpYmxlSW5UcmltbWlu'@;
put 'Z0NvbnRhaW5lcj0hKHllPC0xKmZ8fGQ+Ry5hdCgtMSl8fC0xKmQtaD4tMSpFZSksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0'@;
put 'aW9uIHYzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb3R0KGMpe3ZhciBsPWZ1bmN0aW9uIGx0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZh'@;
put 'dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5'@;
put 'bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeTNle2NvbnN0cnVjdG9yKGwpe3YzZSh0aGlzLCJjYWxjdWxhdGlv'@;
put 'blR5cGVzIixbXSksdjNlKHRoaXMsImNhbGN1bGF0aW9uUmVzdWx0cyIsbmV3IE1hcCksdGhpcy5jYWxjdWxhdGlvblR5cGVzPWx9X2luaXRpYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goYT0+e2xldFtkLGhdPWE7dGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuc2V0KGQs'@;
put 'aCksaC5pbml0aWFsaXplKGwpfSl9X3Byb2Nlc3MobCxhKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChkPT57bGV0WyxoXT1kO3JldHVybiBoLnByb2Nlc3MobCxhKX0pfV9maW5hbGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChhPT57bGV0WyxkXT1hO3JldHVy'@;
put 'biBkLmZpbmFsaXplKGwpfSl9Z2V0UmVzdWx0c0ZvcihsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGwpfX1mdW5jdGlvbiAkMihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gY3R0KGMpe3ZhciBsPWZ1bmN0aW9uIHV0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8'@;
put 'IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw'@;
put 'cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln'@;
put 'dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZHR0IGV4dGVuZHMgeTNle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRIZWlnaHQ6ZCxzY3JvbGxPZmZzZXQ6aCx0b3RhbFJvd3M6ZixkZWZhdWx0Um93SGVpZ2h0OnYscm93SGVpZ2h0'@;
put 'Rm46TSxvdmVycmlkZUZuOkksaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpHfT1sO3N1cGVyKGEpLCQyKHRoaXMsInZpZXdwb3J0SGVpZ2h0IiwwKSwkMih0aGlzLCJzY3JvbGxPZmZzZXQiLDApLCQyKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksJDIodGhpcywidG90YWxSb3dz'@;
put 'IiwwKSwkMih0aGlzLCJyb3dIZWlnaHRGbiIsbnVsbCksJDIodGhpcywicm93SGVpZ2h0IiwwKSwkMih0aGlzLCJvdmVycmlkZUZuIixudWxsKSwkMih0aGlzLCJob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IiwwKSwkMih0aGlzLCJpbm5lclZpZXdwb3J0SGVpZ2h0IiwwKSwkMih0aGlzLCJ0'@;
put 'b3RhbENhbGN1bGF0ZWRIZWlnaHQiLDApLCQyKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksJDIodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLmRlZmF1bHRIZWlnaHQ9dix0aGlzLnZpZXdwb3J0SGVpZ2h0PWQsdGhpcy5zY3JvbGxPZmZzZXQ9aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9m'@;
put 'ZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxSb3dzPWYsdGhpcy5yb3dIZWlnaHRGbj1NLHRoaXMub3ZlcnJpZGVGbj1JLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodD1HPz8wLHRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodD10aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlz'@;
put 'LnZpZXdwb3J0SGVpZ2h0LXRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCBsPTA7bDx0aGlzLnRvdGFsUm93cztsKyspaWYodGhpcy5yb3dIZWlnaHQ9dGhpcy5nZXRSb3dIZWln'@;
put 'aHQobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCksdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQrPXRoaXMucm93SGVpZ2h0LHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Pj10aGlzLmlubmVyVmll'@;
put 'd3BvcnRIZWlnaHQpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Um93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5yb3dIZWlnaHRGbihsKTtyZXR1cm4gaXNOYU4oYSk/dGhpcy5kZWZhdWx0SGVpZ2h0OmF9fWZ1bmN0aW9uIGMzKGMsbCxhKXtyZXR1'@;
put 'cm4obD1mdW5jdGlvbiBodHQoYyl7dmFyIGw9ZnVuY3Rpb24gZnR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9'@;
put 'dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps'@;
put 'KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBiXz01MDtjbGFzcyBwdHQgZXh0ZW5kcyB5M2V7Y29uc3RydWN0b3IobCl7bGV0e2NhbGN1bGF0aW9u'@;
put 'VHlwZXM6YSx2aWV3cG9ydFdpZHRoOmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxDb2x1bW5zOmYsY29sdW1uV2lkdGhGbjp2LG92ZXJyaWRlRm46TSxpbmxpbmVTdGFydE9mZnNldDpJfT1sO3N1cGVyKGEpLGMzKHRoaXMsInZpZXdwb3J0V2lkdGgiLDApLGMzKHRoaXMsInNjcm9sbE9mZnNldCIs'@;
put 'MCksYzModGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSxjMyh0aGlzLCJ0b3RhbENvbHVtbnMiLDApLGMzKHRoaXMsImNvbHVtbldpZHRoRm4iLG51bGwpLGMzKHRoaXMsImNvbHVtbldpZHRoIiwwKSxjMyh0aGlzLCJvdmVycmlkZUZuIixudWxsKSxjMyh0aGlzLCJpbmxpbmVTdGFy'@;
put 'dE9mZnNldCIsMCksYzModGhpcywidG90YWxDYWxjdWxhdGVkV2lkdGgiLDApLGMzKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksYzModGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLnZpZXdwb3J0V2lkdGg9ZCx0aGlzLnNjcm9sbE9mZnNldD1oLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zm'@;
put 'c2V0PU1hdGgubWF4KGgsMCksdGhpcy50b3RhbENvbHVtbnM9Zix0aGlzLmNvbHVtbldpZHRoRm49dix0aGlzLm92ZXJyaWRlRm49TSx0aGlzLmlubGluZVN0YXJ0T2Zmc2V0PUksdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0w'@;
put 'O2w8dGhpcy50b3RhbENvbHVtbnM7bCsrKWlmKHRoaXMuY29sdW1uV2lkdGg9dGhpcy5nZXRDb2x1bW5XaWR0aChsKSx0aGlzLl9wcm9jZXNzKGwsdGhpcyksdGhpcy5zdGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgpLHRoaXMudG90YWxDYWxjdWxhdGVkV2lk'@;
put 'dGgrPXRoaXMuY29sdW1uV2lkdGgsdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aD49dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydFdpZHRoKXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldENvbHVtbldpZHRoKGwpe2NvbnN0'@;
put 'IGE9dGhpcy5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKT9iXzphfX1jb25zdCBtdHQ9Y2xhc3MgZ3R0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRp'@;
put 'bmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLnJvd0hlYWRl'@;
put 'cldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxs'@;
put 'Um93cyIpP25ldyBqZXQ6bmV3IFlldF0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgS2V0XSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5uZXcgZjNlXV0pLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRp'@;
put 'bmcoInJlbmRlckFsbENvbHVtbnMiKT9uZXcgSmV0Om5ldyBydHRdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IHN0dF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IGczZV1dKSx0aGlzLmV2ZW50TWFuYWdlcj1oLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5k'@;
put 'b21CaW5kaW5ncy5yb290V2luZG93LCJyZXNpemUiLCgpPT57dGhpcy5jbGllbnRIZWlnaHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX0pfWdldFdvcmtzcGFjZUhlaWdodCgpe2NvbnN0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQg'@;
put 'ZD0wO3JldHVybiBkPWE9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDpTdShhKT4wJiZhLmNsaWVudEhlaWdodD4wP2EuY2xpZW50SGVpZ2h0OjEvMCxkfWdldFZpZXdwb3J0SGVp'@;
put 'Z2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5k'@;
put 'b3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgaDtpZihkPT09YSl7Y29uc3QgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7aD10aGlzLnd0VGFibGUu'@;
put 'aG9sZGVyLm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKSt0aGlzLnN1bUNvbHVtbldpZHRocygwLGYpPmgmJihoPWwuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKX1lbHNlIGg9ZC5jbGllbnRXaWR0aDtyZXR1cm4gaH1nZXRWaWV3cG9ydFdpZHRoKCl7Y29uc3QgbD10'@;
put 'aGlzLmdldFdvcmtzcGFjZVdpZHRoKCk7aWYobD09PTEvMClyZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTtyZXR1cm4gYT4wP2wtYTpsfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgZj10'@;
put 'aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGYuc2Nyb2xsSGVpZ2h0PmYuY2xpZW50SGVpZ2h0fWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9PXRoaXMud3RUYWJsZSxoPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBsLmNsaWVudEhlaWdodDxofHxoPnRo'@;
put 'aXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBmLnNjcm9sbFdpZHRoPmYu'@;
put 'Y2xpZW50V2lkdGh9Y29uc3R7aG9sZGVyOmwsaGlkZXI6YX09dGhpcy53dFRhYmxlLGg9YS5vZmZzZXRXaWR0aDtyZXR1cm4gbC5jbGllbnRXaWR0aDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRh'@;
put 'QWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250'@;
put 'YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKSxoKz0xO3JldHVybiBkfWdldFdvcmtzcGFjZU9mZnNldCgpe3JldHVybiBqMCh0aGlzLnd0'@;
put 'VGFibGUuaG9sZGVyKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg/aXNOYU4odGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQpJiYodGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9U3UodGhpcy53dFRh'@;
put 'YmxlLlRIRUFEKSk6dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9MCx0aGlzLmNvbHVtbkhlYWRlckhlaWdodH1nZXRSb3dIZWFkZXJXaWR0aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi'@;
put 'cm93SGVhZGVycyIpO2lmKGwpe3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5yb3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0aCl7bGV0IGQ9dGhpcy53dFRhYmxlLlRB'@;
put 'QkxFLnF1ZXJ5U2VsZWN0b3IoIlRIIik7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylkPyh0aGlzLnJvd0hlYWRlcldpZHRoKz1pdShkKSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lkdGgrPTUwfWVsc2UgdGhpcy5yb3dIZWFk'@;
put 'ZXJXaWR0aD0wO3JldHVybiB0aGlzLnJvd0hlYWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldpZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hlYWRlcldpZHRofWNyZWF0ZVJvd3NDYWxj'@;
put 'dWxhdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFibGU6ZH09dGhpcztsZXQgZix2LGg9dGhp'@;
put 'cy5nZXRWaWV3cG9ydEhlaWdodCgpO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOO2xldCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BTY3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IEk9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3Ai'@;
put 'KSxHPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikscmU9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gSSYmTT49MCYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsSSksTSs9dixoLT12KSxHJiZ0aGlzLmRhdGFBY2Nlc3NP'@;
put 'YmplY3QuYm90dG9tT3ZlcmxheS5jbG9uZSYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuc3VtQ2VsbFNpemVzKHJlLUcscmUpLGgtPXYpLGY9ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6ZDAodGhpcy5kb21CaW5kaW5ncy5y'@;
put 'b290RG9jdW1lbnQpLG5ldyBkdHQoe2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAodWU9Plt1ZSx0aGlzLnJvd3NDYWxjdWxhdG9yVHlwZXMuZ2V0KHVlKSgpXSksdmlld3BvcnRIZWlnaHQ6aCxzY3JvbGxPZmZzZXQ6TSx0b3RhbFJvd3M6YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxkZWZhdWx0'@;
put 'Um93SGVpZ2h0OmEuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmdldERlZmF1bHRSb3dIZWlnaHQoKSxyb3dIZWlnaHRGbjp1ZT0+ZC5nZXRSb3dIZWlnaHQodWUpLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiKSxob3Jpem9u'@;
put 'dGFsU2Nyb2xsYmFySGVpZ2h0OmZ9KX1jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdO2NvbnN0e3d0'@;
put 'U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGg9dGhpcy5nZXRWaWV3cG9ydFdpZHRoKCksZj1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3Ro'@;
put 'aXMuY29sdW1uSGVhZGVySGVpZ2h0PU5hTjtjb25zdCB2PWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZih2JiZmPj0wKXtjb25zdCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsdik7Zis9TSxoLT1NfXJldHVybiBk'@;
put 'LmhvbGRlci5jbGllbnRXaWR0aCE9PWQuaG9sZGVyLm9mZnNldFdpZHRoJiYoaC09ZDAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxuZXcgcHR0KHtjYWxjdWxhdGlvblR5cGVzOmwubWFwKE09PltNLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcy5nZXQoTSkoKV0pLHZpZXdw'@;
put 'b3J0V2lkdGg6aCxzY3JvbGxPZmZzZXQ6Zix0b3RhbENvbHVtbnM6YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxjb2x1bW5XaWR0aEZuOk09PmQuZ2V0Q29sdW1uV2lkdGgoTSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlk'@;
put 'ZSIpLGlubGluZVN0YXJ0T2Zmc2V0OnRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldH0pfWNyZWF0ZUNhbGN1bGF0b3JzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRp'@;
put 'bmdzOmF9PXRoaXMsZD10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKCksaD10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKCk7aWYobCYmIWEuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpKXtjb25zdCBmPWQuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIik7bD10aGlzLmFyZUFs'@;
put 'bFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQoZil9aWYobCYmIWEuZ2V0U2V0dGluZygicmVuZGVyQWxsQ29sdW1ucyIpKXtjb25zdCBmPWguZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIik7bD10aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVu'@;
put 'ZGVyZWQoZil9cmV0dXJuIGx8fCh0aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKSx0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKSksdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9ZC5nZXRS'@;
put 'ZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLHRoaXMu'@;
put 'Y29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLGx9Y3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCl7Y29uc3QgbD10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJs'@;
put 'ZSJdKSxhPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoWyJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl0pO3RoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWwuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9YS5n'@;
put 'ZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1hLmdldFJlc3VsdHNGb3IoInBhcnRpYWxs'@;
put 'eVZpc2libGUiKX1hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGwpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtsZXR7c3RhcnRSb3c6YSxlbmRSb3c6ZH09bDtpZihudWxsPT09YSYmbnVsbD09PWQpe2lmKCFsLmlzVmlzaWJsZUluVHJp'@;
put 'bW1pbmdDb250YWluZXIpcmV0dXJuITA7YT10aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvdyxkPXRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZFJvd31jb25zdHtzdGFydFJvdzpoLGVuZFJvdzpmLHJvd1N0YXJ0T2Zmc2V0OnYscm93RW5k'@;
put 'T2Zmc2V0Ok19PXRoaXMucm93c1JlbmRlckNhbGN1bGF0b3IsST10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSxHPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2Vy'@;
put 'KEcpJiZHPjA/KGE9TWF0aC5tYXgoMCxhLU1hdGgubWluKHYsRykpLGQ9TWF0aC5taW4oSSxkK01hdGgubWluKE0sRykpKToiYXV0byI9PT1HJiYoYT1NYXRoLm1heCgwLGEtTWF0aC5jZWlsKHYvMikpLGQ9TWF0aC5taW4oSSxkK01hdGguY2VpbChNLzIpKSksIShhPGh8fGE9PT1oJiZhPjB8'@;
put 'fGQ+Znx8ZD09PWYmJmQ8SSl9YXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Q29sdW1uOmEsZW5kQ29sdW1uOmR9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXtp'@;
put 'ZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyKXJldHVybiEwO2E9dGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW4sZD10aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59Y29uc3R7c3RhcnRDb2x1bW46'@;
put 'aCxlbmRDb2x1bW46Zixjb2x1bW5TdGFydE9mZnNldDp2LGNvbHVtbkVuZE9mZnNldDpNfT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLEk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEsRz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidmlld3Bv'@;
put 'cnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQiKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihHKSYmRz4wPyhhPU1hdGgubWF4KDAsYS1NYXRoLm1pbih2LEcpKSxkPU1hdGgubWluKEksZCtNYXRoLm1pbihNLEcpKSk6ImF1dG8iPT09RyYmKGE9TWF0aC5tYXgoMCxhLU1hdGguY2VpbCh2LzIp'@;
put 'KSxkPU1hdGgubWluKEksZCtNYXRoLmNlaWwoTS8yKSkpLCEoYTxofHxhPT09aCYmYT4wfHxkPmZ8fGQ9PT1mJiZkPEkpfXJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpe3FzKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwobCxhLGQpPT57ZFthXT12'@;
put 'b2lkIDB9KX19O2Z1bmN0aW9uIGIzZShjLGwsYSl7XzNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBfM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIp'@;
put 'fWZ1bmN0aW9uIHpjKGMsbCl7cmV0dXJuIGMuZ2V0KFlFKGMsbCkpfWZ1bmN0aW9uIHczZShjLGwsYSl7cmV0dXJuIGMuc2V0KFlFKGMsbCksYSksYX1mdW5jdGlvbiBZRShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5n'@;
put 'dGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Yig5MzkwOSk7dmFyIHUzPW5ldyBXZWFrTWFwLG0xPW5ldyBXZWFrTWFwLGZQPW5ldyBXZWFrU2V0O2NsYXNzIHl0dHtjb25zdHJ1Y3RvcigpeyhmdW5j'@;
put 'dGlvbiB2dHQoYyxsKXtfM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsZlApLGIzZSh0aGlzLHUzLHZvaWQgMCksYjNlKHRoaXMsbTEsdm9pZCAwKX1zZXRBY3RpdmVPdmVybGF5KGwpe3JldHVybiB3M2UobTEsdGhpcyxsKSx0aGlzfXNldEFjdGl2ZVNlbGVjdGlvbihsKXtyZXR1cm4gdzNlKHUz'@;
put 'LHRoaXMsbCksdGhpc31zY2FuKCl7Y29uc3QgbD16Yyh1Myx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGE9bmV3IFNldDtyZXR1cm4iYWN0aXZlLWhlYWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRl'@;
put 'cnNSYW5nZShkPT5hLmFkZChkKSkpOiJhcmVhIj09PWw/dGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6ImZvY3VzIj09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0'@;
put 'aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImZpbGwiPT09bD90aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKToiaGVhZGVyIj09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9'@;
put 'PmEuYWRkKGQpKSk6InJvdyI9PT1sPyh0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpKToiY29sdW1uIj09PWwmJih0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRo'@;
put 'aXMuc2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpKSxhfXNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UobCl7Y29uc3RbYSxkLGgsZl09emModTMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOnZ9PXpjKG0xLHRoaXMpLE09di5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgp'@;
put 'LEk9di5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTtsZXQgRz0wO2ZvcihsZXQgcmU9LXYuZ2V0Um93SGVhZGVyc0NvdW50KCk7cmU8TTtyZSsrKXtjb25zdCB1ZT12LmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHJlKTtpZighKHVlPGR8fHVlPmYpKXtmb3IobGV0IHllPS1JO3llPDA7'@;
put 'eWUrKyl7aWYoeWU8YXx8eWU+aCljb250aW51ZTtjb25zdCBFZT15ZStJO2xldCBCZT12LmdldENvbHVtbkhlYWRlcih1ZSxFZSk7Y29uc3QgR2U9emMobTEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLHVlLEVlLHtzZWxlY3Rpb25UeXBlOnpj'@;
put 'KHUzLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUsY29sdW1uQ3Vyc29yOkcsc2VsZWN0aW9uV2lkdGg6Zi1kKzF9KTtudWxsIT09R2UmJihHZSE9PXVlJiYoQmU9di5nZXRDb2x1bW5IZWFkZXIoR2UsRWUpKSxsKEJlKSl9Rys9MX19fXNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UobCl7Y29u'@;
put 'c3RbYSxkLGgsZl09emModTMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOnZ9PXpjKG0xLHRoaXMpLE09di5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLEk9di5nZXRSb3dIZWFkZXJzQ291bnQoKTtsZXQgRz0wO2ZvcihsZXQgcmU9LXYuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7cmU8TTty'@;
put 'ZSsrKXtjb25zdCB1ZT12LnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHJlKTtpZighKHVlPGF8fHVlPmgpKXtmb3IobGV0IHllPS1JO3llPDA7eWUrKyl7aWYoeWU8ZHx8eWU+Ziljb250aW51ZTtjb25zdCBFZT15ZStJO2xldCBCZT12LmdldFJvd0hlYWRlcih1ZSxFZSk7Y29uc3QgR2U9'@;
put 'emMobTEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLHVlLEVlLHtzZWxlY3Rpb25UeXBlOnpjKHUzLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUscm93Q3Vyc29yOkcsc2VsZWN0aW9uSGVpZ2h0OmgtYSsxfSk7bnVsbCE9PUdlJiYoR2UhPT11'@;
put 'ZSYmKEJlPXYuZ2V0Um93SGVhZGVyKEdlLEVlKSksbChCZSkpfUcrPTF9fX1zY2FuQ2VsbHNSYW5nZShsKXtjb25zdHt3dFRhYmxlOmF9PXpjKG0xLHRoaXMpO1lFKGZQLHRoaXMsYnR0KS5jYWxsKHRoaXMsKGQsaCk9Pntjb25zdCBmPWEuZ2V0Q2VsbCh6YyhtMSx0aGlzKS5jcmVhdGVDZWxs'@;
put 'Q29vcmRzKGQsaCkpLHY9emMobTEsdGhpcykuZ2V0U2V0dGluZygib25BZnRlckRyYXdTZWxlY3Rpb24iLGQsaCx6Yyh1Myx0aGlzKS5zZXR0aW5ncy5sYXllckxldmVsKTsic3RyaW5nIj09dHlwZW9mIHYmJkVpKGYsdiksbChmKX0pfXNjYW5Sb3dzSW5DZWxsc1JhbmdlKGwpe2NvbnN0W2Es'@;
put 'LGRdPXpjKHUzLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTpofT16YyhtMSx0aGlzKTtZRShmUCx0aGlzLEMzZSkuY2FsbCh0aGlzLChmLHYpPT57aWYoZj49YSYmZjw9ZCl7Y29uc3QgTT1oLmdldENlbGwoemMobTEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhmLHYpKTtsKE0pfX0pfXNj'@;
put 'YW5Db2x1bW5zSW5DZWxsc1JhbmdlKGwpe2NvbnN0WyxhLCxkXT16Yyh1Myx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09emMobTEsdGhpcyk7WUUoZlAsdGhpcyxDM2UpLmNhbGwodGhpcywoZix2KT0+e2lmKHY+PWEmJnY8PWQpe2NvbnN0IE09aC5nZXRDZWxsKHpjKG0xLHRoaXMp'@;
put 'LmNyZWF0ZUNlbGxDb29yZHMoZix2KSk7bChNKX19KX19ZnVuY3Rpb24gYnR0KGMpe2xldFtsLGEsZCxoXT16Yyh1Myx0aGlzKS5nZXRDb3JuZXJzKCk7aWYobDwwJiZkPDB8fGE8MCYmaDwwKXJldHVybjtjb25zdHt3dFRhYmxlOmZ9PXpjKG0xLHRoaXMpLHY9bCE9PWR8fGEhPT1oO2lmKGE9'@;
put 'TWF0aC5tYXgoYSwwKSxoPU1hdGgubWF4KGgsMCksbD1NYXRoLm1heChsLDApLGQ9TWF0aC5tYXgoZCwwKSx2KXtpZihhPU1hdGgubWF4KGEsZi5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9TWF0aC5taW4oaCxmLmdldExhc3RSZW5kZXJlZENvbHVtbigpKSxsPU1hdGgubWF4KGwsZi5n'@;
put 'ZXRGaXJzdFJlbmRlcmVkUm93KCkpLGQ9TWF0aC5taW4oZCxmLmdldExhc3RSZW5kZXJlZFJvdygpKSxoPGF8fGQ8bClyZXR1cm59ZWxzZSBpZigha3AoZi5nZXRDZWxsKHpjKG0xLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKSkpKXJldHVybjtmb3IobGV0IE09bDtNPD1kO00rPTEpZm9y'@;
put 'KGxldCBJPWE7STw9aDtJKz0xKWMoTSxJKX1mdW5jdGlvbiBDM2UoYyl7Y29uc3R7d3RUYWJsZTpsfT16YyhtMSx0aGlzKSxhPWwuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxkPWwuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IGg9MDtoPGE7aCs9MSl7Y29uc3QgZj1sLnJvd0Zp'@;
put 'bHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2ZvcihsZXQgdj0wO3Y8ZDt2Kz0xKWMoZixsLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHYpKX19Y29uc3QgUzNlPWNsYXNzIF90dHtjb25zdHJ1Y3RvcihsLGEpe2EmJih0aGlzLmV2ZW50TWFuYWdlcj1sLmV2ZW50TWFuYWdlcix0aGlz'@;
put 'Lmluc3RhbmNlPWwsdGhpcy53b3Q9bCx0aGlzLnNldHRpbmdzPWEsdGhpcy5tb3VzZURvd249ITEsdGhpcy5tYWluPW51bGwsdGhpcy50b3A9bnVsbCx0aGlzLmJvdHRvbT1udWxsLHRoaXMuc3RhcnQ9bnVsbCx0aGlzLmVuZD1udWxsLHRoaXMudG9wU3R5bGU9bnVsbCx0aGlzLmJvdHRvbVN0'@;
put 'eWxlPW51bGwsdGhpcy5zdGFydFN0eWxlPW51bGwsdGhpcy5lbmRTdHlsZT1udWxsLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlPXlLKHRoaXMuaW5zdGFuY2UpLHRoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQ9LU1hdGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53'@;
put 'aWR0aCwxMCkvMiksdGhpcy5jb3JuZXI9bnVsbCx0aGlzLmNvcm5lclN0eWxlPW51bGwsdGhpcy5jcmVhdGVCb3JkZXJzKGEpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5O3RoaXMuZXZlbnRN'@;
put 'YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIiwoKT0+dGhpcy5vbk1vdXNlRG93bigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKTtmb3IobGV0IGE9MCxkPXRoaXMubWFpbi5jaGlsZE5vZGVz'@;
put 'Lmxlbmd0aDthPGQ7YSsrKXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5tYWluLmNoaWxkTm9kZXNbYV0sIm1vdXNlZW50ZXIiLGY9PnRoaXMub25Nb3VzZUVudGVyKGYsdGhpcy5tYWluLmNoaWxkTm9kZXNbYV0pKX1vbk1vdXNlRG93bigpe3RoaXMubW91c2VEb3du'@;
put 'PSEwfW9uTW91c2VVcCgpe3RoaXMubW91c2VEb3duPSExfW9uTW91c2VFbnRlcihsLGEpe2lmKCF0aGlzLm1vdXNlRG93bnx8IXRoaXMud290LmdldFNldHRpbmcoImhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXIiKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHoyKGwpO2NvbnN0IGQ9dGhp'@;
put 'cyxoPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5LGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixmdW5jdGlvbiBNKEkpeyhmdW5jdGlvbiB2KEkpe2lmKEku'@;
put 'Y2xpZW50WTxNYXRoLmZsb29yKGYudG9wKXx8SS5jbGllbnRZPk1hdGguY2VpbChmLnRvcCtmLmhlaWdodCl8fEkuY2xpZW50WDxNYXRoLmZsb29yKGYubGVmdCl8fEkuY2xpZW50WD5NYXRoLmNlaWwoZi5sZWZ0K2Yud2lkdGgpKXJldHVybiEwfSkoSSkmJihkLmV2ZW50TWFuYWdlci5yZW1v'@;
put 'dmVFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsTSksYS5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSl9Y3JlYXRlQm9yZGVycyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy53b3Q7dGhpcy5tYWluPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y29uc3QgZD1bInRvcCIsInN0YXJ0Iiwi'@;
put 'Ym90dG9tIiwiZW5kIiwiY29ybmVyIl07bGV0IGg9dGhpcy5tYWluLnN0eWxlO2gucG9zaXRpb249ImFic29sdXRlIixoLnRvcD0wLGgubGVmdD0wO2ZvcihsZXQgTT0wO008NTtNKyspe2NvbnN0IEk9ZFtNXSxHPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5jbGFzc05hbWU9YHd0Qm9yZGVy'@;
put 'ICR7dGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIifWAsdGhpcy5zZXR0aW5nc1tJXSYmdGhpcy5zZXR0aW5nc1tJXS5oaWRlJiYoRy5jbGFzc05hbWUrPSIgaGlkZGVuIiksaD1HLnN0eWxlLGguYmFja2dyb3VuZENvbG9yPXRoaXMuc2V0dGluZ3NbSV0mJnRoaXMuc2V0dGluZ3NbSV0uY29s'@;
put 'b3I/dGhpcy5zZXR0aW5nc1tJXS5jb2xvcjpsLmJvcmRlci5jb2xvcixoLmhlaWdodD10aGlzLnNldHRpbmdzW0ldJiZ0aGlzLnNldHRpbmdzW0ldLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbSV0ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCxoLndpZHRoPXRoaXMuc2V0dGluZ3Nb'@;
put 'SV0mJnRoaXMuc2V0dGluZ3NbSV0ud2lkdGg/YCR7dGhpcy5zZXR0aW5nc1tJXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhgLHRoaXMubWFpbi5hcHBlbmRDaGlsZChHKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5v'@;
put 'ZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5vZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Auc3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRv'@;
put 'bS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVzWzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBjb3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD1g'@;
put 'JHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0fXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlcj1bYCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhg'@;
put 'LHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiksbzMoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9y'@;
put 'SGFuZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTpmfT10aGlzLndvdDtsZXQgdj1mLmJvcmRlcnNIb2xkZXI7dnx8KHY9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSx2LmNsYXNzTmFtZT0iaHRCb3JkZXJzIixmLmJvcmRlcnNIb2xkZXI9dixmLnNwcmVhZGVyLmFwcGVuZENo'@;
put 'aWxkKHYpKSx2LmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCx3dFNldHRpbmdzOmF9PXRoaXMud290LGQ9YS5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIiksaD1kLmdldENTU1ZhcmlhYmxlVmFsdWUo'@;
put 'ImNlbGwtbW9iaWxlLWhhbmRsZS1zaXplIiksZj1kLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItcmFkaXVzIiksdj1kLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLWNvbG9yIiksTT1kLmdldENTU1Zhcmlh'@;
put 'YmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItd2lkdGgiKSxJPWQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1jb2xvciIpO3RoaXMuc2VsZWN0aW9uSGFuZGxlcz17dG9wOmwuY3JlYXRlRWxlbWVudCgiRElWIiksdG9wSGl0QXJlYTps'@;
put 'LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbUhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0b3BMZWZ0U2VsZWN0aW9uSGFu'@;
put 'ZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhh'@;
put 'bmRsZSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRs'@;
put 'ZXMuc3R5bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhpdEFyZWE6dGhpcy5zZWxlY3Rp'@;
put 'b25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9LHFzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiNDBweCIsd2lkdGg6IjQwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCg0MC8xLjUsMTApfXB4YH0sKEVlLEJlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMu'@;
put 'Ym90dG9tSGl0QXJlYVtCZV09RWUsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhW0JlXT1FZX0pLHFzKGQuaXNDbGFzc2ljVGhlbWUoKT97cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjEwcHgiLHdpZHRoOiIxMHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJ'@;
put 'bnQoMTAvMS41LDEwKX1weGAsYmFja2dyb3VuZDoiI0Y1RjVGRiIsYm9yZGVyOiIxcHggc29saWQgIzQyODVjOCJ9Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDpgJHtofXB4YCx3aWR0aDpgJHtofXB4YCwiYm9yZGVyLXJhZGl1cyI6YCR7Zn1weGAsYmFja2dyb3VuZDpgJHt2fWAsYm9y'@;
put 'ZGVyOmAke019cHggc29saWQgJHtJfWB9LChFZSxCZSk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbVtCZV09RWUsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbQmVdPUVlfSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50'@;
put 'b3ApLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEpLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0'@;
put 'QXJlYSl9aXNQYXJ0UmFuZ2UobCxhKXtjb25zdCBkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0QXJlYVNlbGVjdGlvbigpO3JldHVybiEoIWQuY2VsbFJhbmdlfHxsPT09ZC5jZWxsUmFuZ2UudG8ucm93JiZhPT09ZC5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVj'@;
put 'dGlvbkhhbmRsZXNQb3NpdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgST10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOkcsdG9wSGl0QXJlYTpyZSxib3R0b206dWUsYm90dG9tSGl0QXJlYTp5ZX09dGhpcy5zZWxlY3Rpb25IYW5k'@;
put 'bGVzLnN0eWxlcyxFZT1wYXJzZUludChHLmJvcmRlcldpZHRoLDEwKSxCZT1wYXJzZUludChHLndpZHRoLDEwKSxHZT1wYXJzZUludChyZS53aWR0aCwxMCksc3Q9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLHB0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7Ry50b3A9YCR7cGFy'@;
put 'c2VJbnQoZC1CZS0xLDEwKX1weGAsR1tJXT1gJHtwYXJzZUludChoLUJlLTEsMTApfXB4YCxyZS50b3A9YCR7cGFyc2VJbnQoZC1HZS80KjMsMTApfXB4YCxyZVtJXT1gJHtwYXJzZUludChoLUdlLzQqMywxMCl9cHhgO2NvbnN0IGR0PU1hdGgubWluKHBhcnNlSW50KGgrZiwxMCksc3QtQmUt'@;
put 'MipFZSkscXQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLUdlLzQsMTApLHN0LUdlLTIqRWUpO3VlW0ldPWAke2R0fXB4YCx5ZVtJXT1gJHtxdH1weGA7Y29uc3QgbW49TWF0aC5taW4ocGFyc2VJbnQoZCt2LDEwKSxwdC1CZS0yKkVlKSx3bj1NYXRoLm1pbihwYXJzZUludChkK3YtR2UvNCwxMCks'@;
put 'cHQtR2UtMipFZSk7dWUudG9wPWAke21ufXB4YCx5ZS50b3A9YCR7d259cHhgLHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUmJnRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUoKT8oRy5kaXNwbGF5PSJibG9jayIscmUuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNQ'@;
put 'YXJ0UmFuZ2UobCxhKT8odWUuZGlzcGxheT0ibm9uZSIseWUuZGlzcGxheT0ibm9uZSIpOih1ZS5kaXNwbGF5PSJibG9jayIseWUuZGlzcGxheT0iYmxvY2siKSk6KEcuZGlzcGxheT0ibm9uZSIsdWUuZGlzcGxheT0ibm9uZSIscmUuZGlzcGxheT0ibm9uZSIseWUuZGlzcGxheT0ibm9uZSIp'@;
put 'LGw9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfHxhPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPyhHLnpJbmRleD0iOTk5OSIscmUuekluZGV4PSI5OTk5Iik6KEcuekluZGV4PSIiLHJlLnpJbmRl'@;
put 'eD0iIil9YXBwZWFyKGwpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2xldFthLGQsaCxmXT1sO2lmKGE8MCYmaDwwfHxkPDAmJmY8MClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6dixyb290RG9jdW1lbnQ6TSxyb290V2luZG93Okl9PXRoaXMud290LEc9YSE9'@;
put 'PWh8fGQhPT1mLHJlPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmlzQ2xhc3NpY1RoZW1lKCksdWU9di5nZXRGaXJzdFJlbmRlcmVkUm93KCkseWU9di5nZXRMYXN0UmVuZGVyZWRSb3coKSxFZT12LmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSxCZT12'@;
put 'LmdldExhc3RSZW5kZXJlZENvbHVtbigpO2lmKEVlPDAmJkJlPDB8fHVlPDAmJnllPDApcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtsZXQgR2U7aWYoRyl7aWYoZD1NYXRoLm1heChkLEVlKSxmPU1hdGgubWluKGYsQmUpLGE9TWF0aC5tYXgoYSx1ZSksaD1NYXRoLm1pbihoLHllKSxm'@;
put 'PGR8fGg8YSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO0dlPXYuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpfWVsc2UgaWYoR2U9di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSksIWtwKEdlKSlyZXR1cm4gdm9pZCB0aGlzLmRpc2Fw'@;
put 'cGVhcigpO2NvbnN0IHN0PUc/di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoaCxmKSk6R2UscHQ9ajAoR2UpLGR0PUc/ajAoc3QpOnB0LHF0PWowKHYuVEFCTEUpLG1uPXB0LnRvcCx3bj1wdC5sZWZ0LGhuPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9k'@;
put 'ZSIpO2xldCBNbj0wLE1yPTA7aWYoaG4pe2NvbnN0IFlyPWl1KHYuVEFCTEUpLHdpPWl1KEdlKTtNcj13bit3aS1kdC5sZWZ0LE1uPUkuaW5uZXJXaWR0aC13bi13aS0oSS5pbm5lcldpZHRoLXF0LmxlZnQtWXIpLTF9ZWxzZSBNcj1kdC5sZWZ0K2l1KHN0KS13bixNbj13bi1xdC5sZWZ0LTE7'@;
put 'aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGEsaCkpe2NvbnN0IHdpPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMiLGQsZixhLHF0KTtsZXQgQmk9bnVsbDt3aSYmKFtCaSxNbixNcl09d2kpLEJpJiYoR2U9QmkpfWxldCBrcj1tbi1xdC50b3AtMSxxbj1kdC50'@;
put 'b3ArU3Uoc3QpLW1uO2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChkLGYpKXtjb25zdCB3aT10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJyb3dzIixhLGgsZCxxdCk7bGV0IEJpPW51bGw7d2kmJihbQmksa3IscW5dPXdpKSxCaSYmKEdlPUJpKX1jb25zdCBncj1JLmdldENvbXB1'@;
put 'dGVkU3R5bGUoR2UpO3BhcnNlSW50KGdyLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoa3IrPTEscW49cW4+MD9xbi0xOjApLHBhcnNlSW50KGdyW2huPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJihNbis9MSxNcj1Ncj4wP01yLTE6MCk7Y29uc3QgcXI9aG4/'@;
put 'InJpZ2h0IjoibGVmdCIsX2k9TWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMudG9wU3R5bGUudG9wPWAke2tyfXB4YCx0aGlzLnRvcFN0eWxlW3FyXT1gJHtNbn1weGAsdGhpcy50b3BTdHlsZS53aWR0aD1gJHtNcitfaX1weGAsdGhpcy50b3BTdHlsZS5kaXNw'@;
put 'bGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRvcD1gJHtrcn1weGAsdGhpcy5zdGFydFN0eWxlW3FyXT1gJHtNbn1weGAsdGhpcy5zdGFydFN0eWxlLmhlaWdodD1gJHtxbitfaX1weGAsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmJvdHRvbVN0eWxlLnRvcD1gJHtr'@;
put 'citxbi1wYXJzZUludCh0aGlzLmJvdHRvbVN0eWxlLmhlaWdodCwxMCkrX2l9cHhgLHRoaXMuYm90dG9tU3R5bGVbcXJdPWAke01ufXB4YCx0aGlzLmJvdHRvbVN0eWxlLndpZHRoPWAke01yK19pfXB4YCx0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRv'@;
put 'cD1gJHtrcn1weGAsdGhpcy5lbmRTdHlsZVtxcl09YCR7TW4rTXItcGFyc2VJbnQodGhpcy5lbmRTdHlsZS53aWR0aCwxMCkrX2l9cHhgLHRoaXMuZW5kU3R5bGUuaGVpZ2h0PWAke3FuK19pfXB4YCx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgUG49dGhpcy5zZXR0aW5ncy5i'@;
put 'b3JkZXIuY29ybmVyVmlzaWJsZTtQbj0iZnVuY3Rpb24iPT10eXBlb2YgUG4/UG4odGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTpQbjtjb25zdCBVcj10aGlzLndvdC5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLGgsZiwhMSwicmVuZGVyIik7bGV0W3RyLEJyXT1baCxmXTtp'@;
put 'ZihVciYmQXJyYXkuaXNBcnJheShVcikmJihbLCx0cixCcl09VXIpLG8zKCl8fCFQbnx8dGhpcy5pc1BhcnRSYW5nZSh0cixCcikpdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtlbHNle3RoaXMuY29ybmVyU3R5bGUudG9wPWtyK3FuK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZz'@;
put 'ZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5lclN0eWxlW3FyXT1NbitNcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJS'@;
put 'aWdodFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckxlZnRXaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1g'@;
put 'JHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBZcj1vXyh2LlRBQkxFKTtjb25zdCB3aT1Zcj09PUk7d2km'@;
put 'JihZcj1NLmRvY3VtZW50RWxlbWVudCk7Y29uc3QgQmk9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsMTApLTEsaGE9TWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSxtYT1NYXRoLmNlaWwocGFyc2VJbnQo'@;
put 'dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yKTtpZihmPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl7Y29uc3QgdnQ9d2k/c3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDpzdC5vZmZzZXRMZWZ0O2xldCB4dD0hMSwkdD0wO2lmKGhuPygk'@;
put 'dD12dC1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMix4dD0kdDwwKTooJHQ9dnQraXUoc3QpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLHh0PSR0Pj1BJChZcikpLHh0KXtjb25zdCBZbj1NYXRoLmZsb29yKE1uK01yK3Ro'@;
put 'aXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtaGEtQmkpO3JlPyh0aGlzLmNvcm5lclN0eWxlW3FyXT1gJHtZbn1weGAsdGhpcy5jb3JuZXJTdHlsZVtobj8iYm9yZGVyTGVmdFdpZHRoIjoiYm9yZGVyUmlnaHRXaWR0aCJdPTApOnRoaXMuY29ybmVyU3R5bGVbcXJdPVluLTErInB4In19aWYo'@;
put 'aD09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEmJih3aT9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6c3Qub2Zmc2V0VG9wKStTdShzdCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1sXyhZcikpe2NvbnN0IFluPU1hdGgu'@;
put 'Zmxvb3Ioa3IrcW4rdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1tYS1CaSk7cmU/KHRoaXMuY29ybmVyU3R5bGUudG9wPWAke1lufXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPTApOnRoaXMuY29ybmVyU3R5bGUudG9wPVluLTErInB4In10aGlzLmNvcm5lclN0'@;
put 'eWxlLmRpc3BsYXk9ImJsb2NrIn1vMygpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiZ0aGlzLnVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGgsZixrcixNbixNcixxbil9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZChsLGEpe3Jl'@;
put 'dHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpfWlzRW50aXJlUm93U2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVt'@;
put 'bigpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1nZXREaW1lbnNpb25zRnJvbUhlYWRlcihsLGEsZCxoLGYpe2NvbnN0e3d0VGFibGU6dn09dGhpcy53b3QsTT12Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtsZXQgST1udWxsLEc9bnVsbCxyZT1udWxs'@;
put 'LHVlPW51bGwseWU9bnVsbCxFZT1udWxsLEJlPW51bGwsR2U9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpJPWZ1bmN0aW9uKCl7cmV0dXJuIHYuZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LEc9ZnVuY3Rpb24oKXtyZXR1cm4gU3UoLi4uYXJndW1lbnRzKX0scmU9Imh0X19zZWxlY3Rp'@;
put 'b24tLXJvd3MiLEVlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1ucyI6ST1mdW5jdGlvbigpe3JldHVybiB2LmdldENvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSxHPWZ1bmN0aW9uKCl7cmV0dXJuIGl1KC4uLmFyZ3VtZW50cyl9LHJlPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIixFZT0ibGVm'@;
put 'dCJ9aWYoTS5jbGFzc0xpc3QuY29udGFpbnMocmUpKXtjb25zdCBzdD10aGlzLndvdC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKEJlPUkoYSxzdC1oKSxHZT1JKGQsc3QtaCksIUJlfHwhR2UpcmV0dXJuITE7Y29uc3QgcHQ9ajAoQmUpLGR0PWowKEdlKTtyZXR1cm4g'@;
put 'QmUmJkdlJiYodWU9cHRbRWVdLWZbRWVdLTEseWU9ZHRbRWVdK0coR2UpLXB0W0VlXSksW0JlLHVlLHllXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9FaSh0aGlzW2xdLCJoaWRkZW4iKTooZ3ModGhpc1ts'@;
put 'XSwiaGlkZGVuIikmJmhzKHRoaXNbbF0sImhpZGRlbiIpLGQuYmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0b3AiPT09bHx8ImJvdHRvbSI9PT1sKSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndpZHRoPWAke2gud2lkdGh9cHhgKSl9'@;
put 'Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3QgZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndpZHRoPSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKSxh'@;
put 'P0VpKHRoaXNbbF0sImhpZGRlbiIpOmhzKHRoaXNbbF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lbmRTdHlsZS5kaXNw'@;
put 'bGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLG8zKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRs'@;
put 'ZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVu'@;
put 'dE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19O2Z1bmN0aW9uIF9fKGMsbCxhKXtNM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIE0zZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gbm8oYyxsKXtyZXR1cm4gYy5nZXQoeEsoYyxsKSl9ZnVuY3Rpb24geDNlKGMsbCxhKXtyZXR1cm4gYy5zZXQoeEsoYyxsKSxhKSxhfWZ1bmN0aW9u'@;
put 'IHhLKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgdjE9bmV3IFdlYWtN'@;
put 'YXAsVmQ9bmV3IFdlYWtNYXAsRUs9bmV3IFdlYWtNYXAsR0U9bmV3IFdlYWtNYXAsVEs9bmV3IFdlYWtNYXAsSjc9bmV3IFdlYWtNYXAsRTNlPW5ldyBXZWFrU2V0O2NsYXNzIEN0dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gd3R0KGMsbCl7TTNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLEUz'@;
put 'ZSksX18odGhpcyx2MSx2b2lkIDApLF9fKHRoaXMsVmQsdm9pZCAwKSxfXyh0aGlzLEVLLG5ldyB5dHQpLF9fKHRoaXMsR0UsbmV3IFdlYWtNYXApLF9fKHRoaXMsVEssbmV3IFdlYWtTZXQpLF9fKHRoaXMsSjcsbmV3IE1hcCkseDNlKFZkLHRoaXMsbCl9c2V0QWN0aXZlT3ZlcmxheShsKXty'@;
put 'ZXR1cm4geDNlKHYxLHRoaXMsbCksbm8oRUssdGhpcykuc2V0QWN0aXZlT3ZlcmxheShubyh2MSx0aGlzKSksbm8oR0UsdGhpcykuaGFzKG5vKHYxLHRoaXMpKXx8bm8oR0UsdGhpcykuc2V0KG5vKHYxLHRoaXMpLG5ldyBTZXQpLHRoaXN9Z2V0Rm9jdXNTZWxlY3Rpb24oKXtyZXR1cm4gbnVs'@;
put 'bCE9PW5vKFZkLHRoaXMpP25vKFZkLHRoaXMpLmdldEZvY3VzKCk6bnVsbH1nZXRBcmVhU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1ubyhWZCx0aGlzKT9ubyhWZCx0aGlzKS5jcmVhdGVMYXllcmVkQXJlYSgpOm51bGx9Z2V0Qm9yZGVySW5zdGFuY2UobCl7aWYoIWwuc2V0dGluZ3MuYm9y'@;
put 'ZGVyKXJldHVybiBudWxsO2lmKG5vKEo3LHRoaXMpLmhhcyhsKSl7Y29uc3QgZD1ubyhKNyx0aGlzKS5nZXQobCk7aWYoZC5oYXMobm8odjEsdGhpcykpKXJldHVybiBkLmdldChubyh2MSx0aGlzKSk7Y29uc3QgaD1uZXcgUzNlKG5vKHYxLHRoaXMpLGwuc2V0dGluZ3MpO3JldHVybiBkLnNl'@;
put 'dChubyh2MSx0aGlzKSxoKSxofWNvbnN0IGE9bmV3IFMzZShubyh2MSx0aGlzKSxsLnNldHRpbmdzKTtyZXR1cm4gbm8oSjcsdGhpcykuc2V0KGwsbmV3IE1hcChbW25vKHYxLHRoaXMpLGFdXSkpLGF9Z2V0Qm9yZGVySW5zdGFuY2VzKGwpe3ZhciBhLGQ7cmV0dXJuIEFycmF5LmZyb20obnVs'@;
put 'bCE9PShhPW51bGw9PT0oZD1ubyhKNyx0aGlzKS5nZXQobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnZhbHVlcygpKSYmdm9pZCAwIT09YT9hOltdKX1kZXN0cm95Qm9yZGVycyhsKXtubyhKNyx0aGlzKS5nZXQobCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksbm8oSjcsdGhpcykuZGVsZXRl'@;
put 'KGwpfXJlbmRlcihsKXtpZihudWxsPT09bm8oVmQsdGhpcykpcmV0dXJuO2wmJnhLKEUzZSx0aGlzLFN0dCkuY2FsbCh0aGlzKTtjb25zdCBhPUFycmF5LmZyb20obm8oVmQsdGhpcykpLGQ9bmV3IE1hcCxoPW5ldyBNYXA7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtm'@;
put 'XSx7Y2xhc3NOYW1lOk0saGVhZGVyQXR0cmlidXRlczpJLGNyZWF0ZUxheWVyczpHLHNlbGVjdGlvblR5cGU6cmV9PXYuc2V0dGluZ3M7bm8oVEssdGhpcykuaGFzKHYpfHwobm8oVEssdGhpcykuYWRkKHYpLHYuYWRkTG9jYWxIb29rKCJkZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95Qm9yZGVy'@;
put 'cyh2KSkpO2NvbnN0IHVlPXRoaXMuZ2V0Qm9yZGVySW5zdGFuY2Uodik7aWYodi5pc0VtcHR5KCkpe3VlPy5kaXNhcHBlYXIoKTtjb250aW51ZX1NJiZubyhFSyx0aGlzKS5zZXRBY3RpdmVTZWxlY3Rpb24odikuc2NhbigpLmZvckVhY2goQmU9PntpZihkLmhhcyhCZSkpe2NvbnN0IEdlPWQu'@;
put 'Z2V0KEJlKTtHZS5oYXMoTSkmJiEwPT09Rz9HZS5zZXQoTSxHZS5nZXQoTSkrMSk6R2Uuc2V0KE0sMSl9ZWxzZSBkLnNldChCZSxuZXcgTWFwKFtbTSwxXV0pKTtJJiYoaC5oYXMoQmUpfHxoLnNldChCZSxbXSksIlRIIj09PUJlLm5vZGVOYW1lJiZoLmdldChCZSkucHVzaCguLi5JKSl9KTtj'@;
put 'b25zdCB5ZT12LmdldENvcm5lcnMoKTtubyh2MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIix5ZSxyZSksdWU/LmFwcGVhcih5ZSl9ZC5mb3JFYWNoKChmLHYpPT57dmFyIE07Y29uc3QgST1BcnJheS5mcm9tKGYpLm1hcChHPT57bGV0W3JlLHVlXT1HO3JldHVybiAx'@;
put 'PT09dWU/cmU6W3JlLC4uLkFycmF5LmZyb20oe2xlbmd0aDp1ZS0xfSwoeWUsRWUpPT5gJHtyZX0tJHtFZSsxfWApXX0pLmZsYXQoKTtJLmZvckVhY2goRz0+bm8oR0UsdGhpcykuZ2V0KG5vKHYxLHRoaXMpKS5hZGQoRykpLEVpKHYsSSksIlREIj09PXYubm9kZU5hbWUmJkFycmF5LmlzQXJy'@;
put 'YXkobnVsbD09PShNPW5vKFZkLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1NP3ZvaWQgMDpNLmNlbGxBdHRyaWJ1dGVzKSYmbXModixubyhWZCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzKX0pLEFycmF5LmZyb20oaC5rZXlzKCkpLmZvckVhY2goZj0+e21zKGYsWy4uLmguZ2V0KGYp'@;
put 'XSl9KX19ZnVuY3Rpb24gU3R0KCl7Y29uc3QgYz1ubyhHRSx0aGlzKS5nZXQobm8odjEsdGhpcykpLGw9bm8odjEsdGhpcykud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIik7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGE9MDthPGwubGVu'@;
put 'Z3RoO2ErKyljLmFkZChsW2FdKTtjLmZvckVhY2goYT0+e3ZhciBkLGg7Y29uc3QgZj1ubyh2MSx0aGlzKS53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2F9YCk7bGV0IHY9W107QXJyYXkuaXNBcnJheShudWxsPT09KGQ9bm8oVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09'@;
put 'PWQ/dm9pZCAwOmQuY2VsbEF0dHJpYnV0ZXMpJiYodj1ubyhWZCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzLm1hcChNPT5NWzBdKSksQXJyYXkuaXNBcnJheShudWxsPT09KGg9bm8oVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGVhZGVyQXR0cmlidXRlcykm'@;
put 'Jih2PVsuLi52LC4uLm5vKFZkLHRoaXMpLm9wdGlvbnMuaGVhZGVyQXR0cmlidXRlcy5tYXAoTT0+TVswXSldKTtmb3IobGV0IE09MCxJPWYubGVuZ3RoO008STtNKyspaHMoZltNXSxhKSxCNyhmW01dLHYpfSksYy5jbGVhcigpfWNsYXNzIE10dCBleHRlbmRzIHZLe2NvbnN0cnVjdG9yKGws'@;
put 'YSl7c3VwZXIobCxuZXcgSGV0KGEpKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1uZXcgTmV0KHRoaXMuZ2V0VGFibGVEYW8oKSxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9'@;
put 'bmV3IG10dCh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9bmV3IEN0dCh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIp'@;
put 'KSx0aGlzLnd0RXZlbnQ9bmV3IEhmZShkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIpLHRoaXMud3RPdmVybGF5cz1uZXcgT2V0KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMu'@;
put 'd3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTtxcyh7cm93SGVhZGVyczoi'@;
put 'aHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxlbmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLGhzKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSksRWkodGhp'@;
put 'cy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRPdmVybGF5QnlOYW1lKGwpe3ZhciBhO2lmKCEkZmUuaW5jbHVkZXMobCkpcmV0dXJuIG51bGw7Y29uc3QgZD1sLnJlcGxhY2UoL18oW2Etel0pL2csaD0+aFsxXS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gbnVsbCE9PShh'@;
put 'PXRoaXMud3RPdmVybGF5c1tgJHtkfU92ZXJsYXlgXSkmJnZvaWQgMCE9PWE/YTpudWxsfWdldFZpZXdwb3J0RGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdldCB0b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRv'@;
put 'cE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92'@;
put 'ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IHRvcFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3Zlcmxh'@;
put 'eXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCBpbmxpbmVTdGFydFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RP'@;
put 'dmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCBib3R0b21PdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5ib3R0b21PdmVybGF5fX19fWNsYXNzIEFLe2NvbnN0cnVjdG9yKGwp'@;
put 'e2wgaW5zdGFuY2VvZiB2Sz90aGlzLl93b3Q9bDp0aGlzLl9pbml0RnJvbVNldHRpbmdzKGwpfV9pbml0RnJvbVNldHRpbmdzKGwpe2wuZmFjYWRlPWE9Pntjb25zdCBkPW5ldyBBSyhhKTtyZXR1cm4oKT0+ZH0sdGhpcy5fd290PW5ldyBNdHQobC50YWJsZSxsKX1nZXQgZ3VpZCgpe3JldHVy'@;
put 'biB0aGlzLl93b3QuZ3VpZH1nZXQgcm9vdERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290RG9jdW1lbnR9Z2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9Z2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5f'@;
put 'd290Lnd0U2V0dGluZ3N9Z2V0IGNsb25lU291cmNlKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZVNvdXJjZX1nZXQgY2xvbmVPdmVybGF5KCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXl9Z2V0IHNlbGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LnNlbGVjdGlvbk1hbmFn'@;
put 'ZXJ9Z2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0Vmlld3BvcnR9Z2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gdGhpcy5fd290Lnd0T3ZlcmxheXN9Z2V0IHd0VGFibGUoKXtyZXR1cm4gdGhpcy5fd290Lnd0VGFibGV9Z2V0IHd0RXZlbnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0'@;
put 'RXZlbnR9Z2V0IHd0U2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNjcm9sbH1nZXQgZHJhd24oKXtyZXR1cm4gdGhpcy5fd290LmRyYXdufXNldCBkcmF3bihsKXt0aGlzLl93b3QuZHJhd249bH1nZXQgYWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmFjdGl2ZU92ZXJs'@;
put 'YXlOYW1lfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9bH1nZXQgbGFzdE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1z'@;
put 'ZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmd9c2V0IG1vbWVudHVtU2Nyb2xsaW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0'@;
put 'b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9bH1nZXQgZG9tQmluZGluZ3MoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0'@;
put 'aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz1sfWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TWFuYWdlcn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVh'@;
put 'dGVDZWxsQ29vcmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJhdyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBd'@;
put 'KSx0aGlzfWdldENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNj'@;
put 'cm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmlld3Bv'@;
put 'cnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3RlciJ9Z2V0T3ZlcmxheUJ5TmFtZShsKXtyZXR1cm4gdGhpcy5fd290LmdldE92ZXJs'@;
put 'YXlCeU5hbWUobCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYp'@;
put 'e3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gVDNlKGMpe2xldHtpc1NoaWZ0'@;
put 'S2V5OmwsaXNMZWZ0Q2xpY2s6YSxpc1JpZ2h0Q2xpY2s6ZCxjb29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOnYsY2VsbENvb3Jkc0ZhY3Rvcnk6TX09Yztjb25zdCBJPWYuaXNTZWxlY3RlZCgpP2YuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLEc9Zi5pc1NlbGVjdGVk'@;
put 'QnlDb3JuZXIoKSxyZT1mLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGYubWFya1NvdXJjZSgibW91c2UiKSxsJiZJKWgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKGgpOihHfHxyZSkmJmgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5k'@;
put 'KE0oaC5yb3csaC5jb2wpKTpHJiZoLnJvdzwwJiYhdi5jb2x1bW4/Zi5zZXRSYW5nZUVuZChNKEkudG8ucm93LGguY29sKSk6cmUmJmguY29sPDAmJiF2LnJvdz9mLnNldFJhbmdlRW5kKE0oaC5yb3csSS50by5jb2wpKTooIUcmJiFyZSYmaC5jb2w8MHx8RyYmaC5jb2w8MCkmJiF2LnJvdz9m'@;
put 'LnNlbGVjdFJvd3MoTWF0aC5tYXgoSS5mcm9tLnJvdywwKSxoLnJvdyxoLmNvbCk6KCFHJiYhcmUmJmgucm93PDB8fHJlJiZoLnJvdzwwKSYmIXYuY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgoSS5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCB1ZT0hZi5pbklu'@;
put 'U2VsZWN0aW9uKGgpLHllPWF8fGQmJnVlO2gucm93PDAmJmguY29sPj0wJiYhdi5jb2x1bW4/eWUmJmYuc2VsZWN0Q29sdW1ucyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiF2LnJvdz95ZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNvbD49MCYm'@;
put 'aC5yb3c+PTAmJiF2LmNlbGw/eWUmJmYuc2V0UmFuZ2VTdGFydChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITAsZm9jdXNQb3NpdGlvbjp7cm93OjAsY29sOjB9fSl9Zi5tYXJrRW5kU291cmNlKCl9ZnVuY3Rpb24gQTNl'@;
put 'KGMpe2xldHtpc0xlZnRDbGljazpsLHNlbGVjdGlvbjphLGNlbGxSYW5nZU1hcHBlcjpkfT1jO2lmKCFsfHwibXVsdGlwbGUiIT09YS5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlKXJldHVybjtjb25zdCBoPWEuZ2V0U2VsZWN0ZWRSYW5nZSgpLGY9aC5jbG9uZSgpLm1hcChNPT5kLnRvUmVuZGVy'@;
put 'YWJsZShNKSksdj1mLmN1cnJlbnQoKTtpZihmLnNpemUoKT4xJiYhdi5pc0hlYWRlcigpJiYhYS5pc011bHRpcGxlKHYpKXtjb25zdCBNPWYuZmluZEFsbCh2KTtNLmxlbmd0aD09PWYuc2l6ZSgpPyhoLnBvcCgpLGEucmVmcmVzaCgpKTpNLmxlbmd0aD4xJiYoaC5yZW1vdmVMYXllcnMoTS5t'@;
put 'YXAoST0+e2xldHtsYXllcjpHfT1JO3JldHVybiBHfSkpLGEucmVmcmVzaCgpKX19Y29uc3QgRXR0PW5ldyBNYXAoW1sidG91Y2hzdGFydCIsVDNlXSxbInRvdWNoZW5kIixBM2VdLFsibW91c2Vkb3duIixUM2VdLFsibW91c2VvdmVyIixmdW5jdGlvbiB4dHQoYyl7bGV0e2lzTGVmdENsaWNr'@;
put 'OmwsY29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IHY9ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxNPWQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksST1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCks'@;
put 'Rz1kLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7ZC5tYXJrU291cmNlKCJtb3VzZSIpLE0mJiFoLmNvbHVtbj9kLnNldFJhbmdlRW5kKGYoRy0xLGEuY29sKSk6diYmIWgucm93P2Quc2V0UmFuZ2VFbmQoZihhLnJvdyxJLTEpKTpoLmNlbGx8fGQuc2V0UmFuZ2VFbmQoYSksZC5tYXJrRW5kU291'@;
put 'cmNlKCl9XSxbIm1vdXNldXAiLEEzZV1dKTtmdW5jdGlvbiBrSyhjLGwpe0V0dC5nZXQoYy50eXBlKSh7aXNTaGlmdEtleTpjLnNoaWZ0S2V5LGlzTGVmdENsaWNrOiRPKGMpfHwidG91Y2hzdGFydCI9PT1jLnR5cGUsaXNSaWdodENsaWNrOlBtKGMpLC4uLmx9KX1jb25zdCBrM2U9bmV3IFdl'@;
put 'YWtNYXAsREs9U3ltYm9sKCJyb290SW5zdGFuY2UiKTtmdW5jdGlvbiB3XyhjKXtyZXR1cm4gazNlLmhhcyhjKX1mdW5jdGlvbiBWbShjLGwsYSl7RDNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBEM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p'@;
put 'dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEJtKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEdHQoYyl7dmFyIGw9ZnVuY3Rpb24gSXR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1j'@;
put 'W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y'@;
put 'ZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6'@;
put 'ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBNdShjLGwpe3JldHVybiBjLmdldChDXyhjLGwpKX1mdW5jdGlvbiBCZChjLGwsYSl7cmV0dXJuIGMuc2V0KENfKGMsbCksYSksYX1mdW5jdGlvbiBDXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFy'@;
put 'Z3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIElLPW5ldyBXZWFrTWFwLHBQPW5ldyBXZWFrTWFwLGdQPW5ldyBXZWFrTWFwLENnPW5ldyBXZWFrTWFwLGQzPW5ldyBXZWFr'@;
put 'TWFwLFJLPW5ldyBXZWFrTWFwLExLPW5ldyBXZWFrTWFwLFNfPW5ldyBXZWFrTWFwLCRFPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIEkzZSgpe3JldHVybiBwYXJzZUludCh0aGlzLmhvdC5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoRk8oKVswXSksMTApfWZ1bmN0aW9uIEx0dChjKXtjb25zdCBs'@;
put 'PUNfKCRFLHRoaXMsSTNlKS5jYWxsKHRoaXMpK2M7bXModGhpcy5ob3Qucm9vdEVsZW1lbnQsLi4uRk8obCkpfWZ1bmN0aW9uIE90dCgpe2NvbnN0IGM9dGhpcy5ob3Qucm9vdEVsZW1lbnQ7dGhpcy5oYXNWZXJ0aWNhbFNjcm9sbCgpP0VpKGMsImh0SGFzU2Nyb2xsWSIpOmhzKGMsImh0SGFz'@;
put 'U2Nyb2xsWSIpLHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbCgpP0VpKGMsImh0SGFzU2Nyb2xsWCIpOmhzKGMsImh0SGFzU2Nyb2xsWCIpfWNvbnN0IFB0dD1jbGFzcyBSdHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIGt0dChjLGwpe0QzZShjLGwpLGwuYWRkKGMpfSkodGhpcywkRSksQm0o'@;
put 'dGhpcywiaG90Iix2b2lkIDApLEJtKHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxCbSh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxCbSh0aGlzLCJUSEVBRCIsdm9pZCAwKSxCbSh0aGlzLCJUQk9EWSIsdm9pZCAwKSxCbSh0aGlzLCJfd3QiLHZvaWQgMCksQm0odGhpcywiYWN0aXZlV3Qi'@;
put 'LHZvaWQgMCksVm0odGhpcyxJSywwKSxWbSh0aGlzLHBQLDApLEJtKHRoaXMsInBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLFZtKHRoaXMsZ1AsITEpLFZtKHRoaXMsQ2csdm9pZCAwKSxWbSh0aGlzLGQzLHZvaWQgMCksVm0odGhpcyxSSywwKSxWbSh0aGlzLExLLDApLFZtKHRo'@;
put 'aXMsU18sbnVsbCksdGhpcy5ob3Q9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgWjIodGhpcy5ob3QpLHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxl'@;
put 'KCl9cmVuZGVyKCl7aWYoIXRoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCkpe2NvbnN0IGw9dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW5kZXIiLGwpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5wb3N0cG9uZWRB'@;
put 'ZGp1c3RFbGVtZW50c1NpemU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSksdGhpcy5fd3QuZHJhdyghbCksQ18oJEUsdGhpcyxPdHQpLmNhbGwodGhpcyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyIixsKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITF9fWFkanVzdEVs'@;
put 'ZW1lbnRzU2l6ZSgpe3RoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCk/dGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITA6dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKX1nZXRDZWxsQXRDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuX3d0LmdldENlbGwo'@;
put 'bCxhKTtyZXR1cm4gZDwwP251bGw6ZH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNj'@;
put 'cm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9bC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7ZCYm'@;
put 'bC5zZXRBdHRyaWJ1dGUoImRhdGEtb3JpZ2luYWxzdHlsZSIsZCksRWkobCwiaGFuZHNvbnRhYmxlIiksQmQoZDMsdGhpcyxhLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIikpLEVpKE11KGQzLHRoaXMpLCJodENvcmUiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lJiZFaShN'@;
put 'dShkMyx0aGlzKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lKSx0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYobXMoTXUoZDMsdGhpcyksW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksbXMobCxbWyJyb2xlIiwidHJlZWdyaWQiXSxOMmUoLTEpLEZPKHRoaXMuaG90LmNv'@;
put 'dW50Q29scygpKSxbImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSJdXSkpLHRoaXMuVEhFQUQ9YS5jcmVhdGVFbGVtZW50KCJUSEVBRCIpLE11KGQzLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9YS5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLE11KGQzLHRoaXMp'@;
put 'LmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpLHRoaXMuaG90LnRhYmxlPU11KGQzLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoTXUoZDMsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxy'@;
put 'b290RG9jdW1lbnQ6YSxzZWxlY3Rpb246ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9YS5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLE09PntCZChnUCx0aGlzLCEwKSx0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQo'@;
put 'TS50YXJnZXQpfHwoRCQoaCksTS5wcmV2ZW50RGVmYXVsdCgpLGguZm9jdXMoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT57QmQoZ1AsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92'@;
put 'ZSIsTT0+e011KGdQLHRoaXMpJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKE0udGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJkQkKGgpLE0ucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImtleXVw'@;
put 'IixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmIU0uc2hpZnRLZXkmJmQuZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNldXAiLE09PntkLmlzSW5Qcm9ncmVzcygpJiYkTyhNKSYmZC5maW5pc2goKSxCZChDZyx0aGlzLCExKTtjb25zdCBJPVlPKGEu'@;
put 'YWN0aXZlRWxlbWVudCk7REUoYS5hY3RpdmVFbGVtZW50KSYmIUl8fChJfHwhZC5pc1NlbGVjdGVkKCkmJiFkLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhbC5jb250YWlucyhNLnRhcmdldCkmJiFQbShNKSkmJnRoaXMuaG90LnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKGYsImNvbnRleHRtZW51IixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmUG0oTSkmJihkLmZpbmlzaCgpLEJkKENnLHRoaXMsITEpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57ZC5pc0luUHJvZ3Jlc3MoKSYmZC5maW5p'@;
put 'c2goKSxCZChDZyx0aGlzLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2Vkb3duIixNPT57Y29uc3QgST1NLnRhcmdldCxHPU0ueHx8TS5jbGllbnRYLHJlPU0ueXx8TS5jbGllbnRZO2xldCB1ZT1NLnRhcmdldDtpZihNdShDZyx0aGlzKXx8IWx8fCF0'@;
put 'aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtob2xkZXI6eWV9PXRoaXMuX3d0Lnd0VGFibGU7aWYodWU9PT15ZSl7Y29uc3QgQmU9ZDAoYSk7aWYoYS5lbGVtZW50RnJvbVBvaW50KEcrQmUscmUpIT09eWV8fGEuZWxlbWVudEZyb21Qb2ludChHLHJlK0JlKSE9PXllKXJldHVybn1lbHNlIGZv'@;
put 'cig7dWUhPT1mOyl7aWYobnVsbD09PXVlKXtpZihNLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZih1ZT09PWwpcmV0dXJuO3VlPXVlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRp'@;
put 'bmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhJKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk6dGhpcy5ob3QuZGVzdHJveUVkaXRvcighMSwhMSl9KTtsZXQgdj1WNyhoKTtmb3IoO251bGwhPT12Oyl0aGlzLmV2ZW50TWFuYWdl'@;
put 'ci5hZGRFdmVudExpc3RlbmVyKHYuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLmhvdC51bmxpc3RlbigpfSksdj1WNyh2KTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE11KGQzLHRoaXMpLCJzZWxlY3RzdGFydCIsTT0+e3RoaXMuc2V0dGlu'@;
put 'Z3MuZnJhZ21lbnRTZWxlY3Rpb258fERFKE0udGFyZ2V0KXx8TS5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKC4uLnRoaXMudHJhbnNs'@;
put 'YXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGEsZCkpfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKTpsLGg9YT49MD90aGlzLmhvdC5j'@;
put 'b2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0dXJuIG51bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVkSW5kZXhlc0xl'@;
put 'bmd0aCgpLGEpLGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlz'@;
put 'LmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Um93cyl9Y291bnROb3RIaWRkZW5S'@;
put 'b3dJbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5J'@;
put 'bmRleGVzKGwsYSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lmKGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEp'@;
put 'LHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHYpKXJldHVybiAwO2xldCBNPTA7cmV0dXJuIGE8MD9NPXYrMTphPjAmJihNPWgtdiksTX1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlzLmhvdC5jb3Vu'@;
put 'dENvbHMoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGEsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCl7Y29uc3QgbD10aGlzLmhvdC5jb3Vu'@;
put 'dFJvd3MoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dz'@;
put 'KCksYT1NYXRoLm1heChsLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwxKX1jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTto'@;
put 'KyspbnVsbCE9PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90LnJv'@;
put 'd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hP3Zv'@;
put 'aWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtkJiZFaShkLGwpfXJlbW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudChsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8dm9pZCAwPT09'@;
put 'YT92b2lkIDA6YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ZCYmaHMoZCxsKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtjb25zdCBsPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50Tm90SGlkZGVu'@;
put 'Rml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5ob3QuY291bnRSZW5kZXJlZFJvd3MoKT5sJiZ0aGlzLmhvdC5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl7Y29uc3QgbD17YXJp'@;
put 'YVRhZ3M6dGhpcy5zZXR0aW5ncy5hcmlhVGFncyxydGxNb2RlOnRoaXMuaG90LmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpLmlzRW5hYmxlZCgpLHRhYmxlOk11'@;
put 'KGQzLHRoaXMpLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+d18odGhpcy5ob3QpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cscHJldmVudFdoZWVsOigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ1Ro'@;
put 'cmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCxkYXRhOihmLHYpPT50aGlzLmhvdC5nZXREYXRh'@;
put 'QXRDZWxsKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdikpLHRvdGFsUm93czooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksdG90YWxDb2x1bW5zOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxmaXhlZENvbHVtbnNTdGFydDoo'@;
put 'KT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCksZml4ZWRSb3dzVG9wOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCksZml4ZWRSb3dzQm90dG9tOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksc2hvdWxkUmVuZGVySW5s'@;
put 'aW5lU3RhcnRPdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0PjB8fGwucm93SGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wPjB8fGwuY29sdW1uSGVhZGVycygpLmxlbmd0aD4wLHNo'@;
put 'b3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tPjAsbWluU3BhcmVSb3dzOigpPT50aGlzLnNldHRpbmdzLm1pblNwYXJlUm93cyxyZW5kZXJBbGxSb3dzOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsUm93cyxyZW5kZXJBbGxDb2x1bW5zOnRo'@;
put 'aXMuc2V0dGluZ3MucmVuZGVyQWxsQ29sdW1ucyxyb3dIZWFkZXJzOigpPT57Y29uc3QgZj1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZmLnB1c2goKHYsTSk9Pntjb25zdCBJPXY+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJ'@;
put 'bmRleCh2KTp2O3RoaXMuYXBwZW5kUm93SGVhZGVyKEksTSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGYpLEJkKHBQLHRoaXMsZi5sZW5ndGgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJkNfKCRFLHRoaXMsSTNlKS5jYWxsKHRo'@;
put 'aXMpPT09dGhpcy5ob3QuY291bnRDb2xzKCkmJkNfKCRFLHRoaXMsTHR0KS5jYWxsKHRoaXMsTXUocFAsdGhpcykpLGZ9LGNvbHVtbkhlYWRlcnM6KCk9Pntjb25zdCBmPVtdO3JldHVybiB0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCkmJmYucHVzaCgodixNKT0+e2NvbnN0IEk9dj49MD90aGlz'@;
put 'LmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnY7dGhpcy5hcHBlbmRDb2xIZWFkZXIoSSxNKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZiksQmQoSUssdGhpcyxmLmxlbmd0aCksZn0sY29s'@;
put 'dW1uV2lkdGg6Zj0+e2NvbnN0IHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sV2lkdGgobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0OmY9Pntjb25zdCB2PXRoaXMuaG90LnJvd0luZGV4TWFw'@;
put 'cGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik7cmV0dXJuIHRoaXMuaG90LmdldFJvd0hlaWdodChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lOihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJs'@;
put 'ZUluZGV4KGYpLEk9bnVsbD09PU0/ZjpNO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KEkpLEksdil9LGNlbGxSZW5kZXJlcjooZix2LE0pPT57Y29uc3RbSSxHXT10aGlzLnRyYW5zbGF0ZUZyb21S'@;
put 'ZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpLHJlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixJLEcsITEsIm1ldGEiKTtsZXQgdWU9SSx5ZT1HO0FycmF5LmlzQXJyYXkocmUpJiYoW3VlLHllXT1yZSk7Y29uc3QgRWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodWUs'@;
put 'eWUpLEJlPXRoaXMuaG90LmNvbFRvUHJvcCh5ZSk7bGV0IEdlPXRoaXMuaG90LmdldERhdGFBdFJvd1Byb3AodWUsQmUpO3RoaXMuaG90Lmhhc0hvb2soImJlZm9yZVZhbHVlUmVuZGVyIikmJihHZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLEdlLEVlKSksdGhpcy5o'@;
put 'b3QucnVuSG9va3MoImJlZm9yZVJlbmRlcmVyIixNLEksRyxCZSxHZSxFZSksdGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKEVlKSh0aGlzLmhvdCxNLEksRyxCZSxHZSxFZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLE0sSSxHLEJlLEdlLEVlKX0sc2VsZWN0aW9uczp0aGlz'@;
put 'LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6KCk9PnRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24sb25XaW5kb3dSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZ0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9u'@;
put 'cygpfSxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZ6Nyh0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjooZix2LE0sSSk9Pntjb25zdCBHPXRoaXMu'@;
put 'dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KSxyZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmFjdGl2ZVd0PUksQmQoQ2csdGhpcywhMCksQmQoU18sdGhpcyx7eDpmLmNsaWVudFgseTpmLmNsaWVudFl9KSx0aGlzLmhv'@;
put 'dC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmLEcsTSxyZSksIU9tKGYpJiYoa0soZix7Y29vcmRzOkcsc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjb250cm9sbGVyOnJlLGNlbGxDb29yZHNGYWN0b3J5Oih1ZSx5ZSk9PnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KHVlLHllKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsZixHLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudTooZix2LE0sSSk9Pntjb25zdCBHPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2'@;
put 'KTt0aGlzLmFjdGl2ZVd0PUksQmQoQ2csdGhpcywhMSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzSW5Qcm9ncmVzcygpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixmLEcsTSksIU9tKGYpJiYodGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGYsRyxNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdXQ6KGYsdixNLEkpPT57Y29uc3QgRz10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1JLHRo'@;
put 'aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsZixHLE0pLCFPbShmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3V0IixmLEcsTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjooZix2LE0sSSk9Pntjb25zdCBHPXRo'@;
put 'aXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KSxyZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmFjdGl2ZVd0PUksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZixHLE0scmUpLCFPbShmKSYmKE11KENnLHRoaXMpJiYo'@;
put 'IU11KFNfLHRoaXMpfHxNdShTXyx0aGlzKS54IT09Zi5jbGllbnRYfHxNdShTXyx0aGlzKS55IT09Zi5jbGllbnRZKSYma0soZix7Y29vcmRzOkcsc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjb250cm9sbGVyOnJlLGNlbGxDb29yZHNGYWN0b3J5Oih1ZSx5ZSk9PnRoaXMuaG90Ll9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKHVlLHllKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsZixHLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QsQmQoU18sdGhpcyxudWxsKSl9LG9uQ2VsbE1vdXNlVXA6KGYsdixNLEkpPT57Y29uc3QgRz10aGlzLnRyYW5zbGF0ZUZy'@;
put 'b21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1JLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixmLEcsTSksIU9tKGYpJiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJihrSyhmLHtjb29yZHM6RyxzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0'@;
put 'aW9uLGNlbGxSYW5nZU1hcHBlcjokcWUodGhpcy5ob3QsImNlbGxSYW5nZU1hcHBlciIpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VVcCIsZixHLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb3JuZXJNb3VzZURvd246Zj0+e2YucHJldmVudERlZmF1'@;
put 'bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGYpfSxvbkNlbGxDb3JuZXJEYmxDbGljazpmPT57Zi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixmKX0sYmVmb3JlRHJhdzooZix2'@;
put 'KT0+dGhpcy5iZWZvcmVSZW5kZXIoZix2KSxvbkRyYXc6Zj0+dGhpcy5hZnRlclJlbmRlcihmKSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsST1mPDA7bGV0IEc9ZjtyZXR1cm4gSXx8KEc9TS5nZXRWaXN1'@;
put 'YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLG51bGwhPT1HKT8oRz10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IixHLHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbCIpLEk/RzpNLmdldFJlbmRlcmFibGVGcm9tVmlzdWFs'@;
put 'SW5kZXgoRykpOmZ9LG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLEk9ZjwwO2xldCBHPWY7cmV0dXJuIEl8fChHPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxudWxsIT09Ryk/KEc9'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixHLHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbCIpLEk/RzpNLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRykpOmZ9LG9uU2Nyb2xsVmVydGljYWxseTooKT0+'@;
put 'e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGwiKX0sb25TY3JvbGxIb3Jpem9udGFsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiKSx0aGlzLmhvdC5ydW5Ib29r'@;
put 'cygiYWZ0ZXJTY3JvbGwiKX0sb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiksb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6KGYsdixNKT0+e2NvbnN0IEk9dGhpcy5ob3Qucm93SW5kZXhN'@;
put 'YXBwZXIsRz1mPDA7bGV0IHJlPWY7R3x8KHJlPUkuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3QgdWU9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIscmUsdixNKTtyZXR1cm4gRz91ZTpJLmdldFJlbmRlcmFibGVGcm9tVmlzdWFs'@;
put 'SW5kZXgoSS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodWUsMSkpfSxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjooZix2LE0pPT57Y29uc3QgST10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixHPWY8MDtsZXQgcmU9ZjtHfHwocmU9SS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJs'@;
put 'ZUluZGV4KGYpKTtjb25zdCB1ZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixyZSx2LE0pO3JldHVybiBHP3VlOkkuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChJLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh1ZSwxKSl9LG9uQWZ0ZXJE'@;
put 'cmF3U2VsZWN0aW9uOihmLHYsTSk9PntsZXQgSTtjb25zdFtHLHJlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpLHVlPXRoaXMuaG90LnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCk7aWYodWUuc2l6ZSgpPjApe2NvbnN0IEVlPXVlLnBlZWtCeUlu'@;
put 'ZGV4KE0/PzApO0k9W0VlLmZyb20ucm93LEVlLmZyb20uY29sLEVlLnRvLnJvdyxFZS50by5jb2xdfXJldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixHLHJlLEksTSl9LG9uQmVmb3JlRHJhd0JvcmRlcnM6KGYsdik9Pntjb25zdFtNLEksRyxyZV09Zix1ZT1b'@;
put 'dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChNKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5k'@;
put 'ZXgoRyksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZSldO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJhd0JvcmRlcnMiLHVlLHYpfSxvbkJlZm9yZVRvdWNoU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYmVm'@;
put 'b3JlVG91Y2hTY3JvbGwiKSxvbkFmdGVyTW9tZW50dW1TY3JvbGw6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1vbWVudHVtU2Nyb2xsIiksb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpmPT50aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyV2lkdGgiLGYpLG9uTW9kaWZ5R2V0'@;
put 'Q2VsbENvb3JkczooZix2LE0sSSk9Pntjb25zdCBHPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHJlPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHVlPXY+PTA/cmUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2LHllPWY+PTA/Ry5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUlu'@;
put 'ZGV4KGYpOmYsRWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLHllLHVlLE0sSSk7aWYoQXJyYXkuaXNBcnJheShFZSkpe2NvbnN0W0JlLEdlLHN0LHB0XT1FZTtyZXR1cm5bQmU+PTA/Ry5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEcuZ2V0TmVhcmVzdE5v'@;
put 'dEhpZGRlbkluZGV4KEJlLDEpKTpCZSxHZT49MD9yZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChHZSwxKSk6R2Usc3Q+PTA/Ry5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEcuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHN0'@;
put 'LC0xKSk6c3QscHQ+PTA/cmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocHQsLTEpKTpwdF19fSxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEk9dGhpcy5ob3Qu'@;
put 'Y29sdW1uSW5kZXhNYXBwZXIsRz12Pj0wP0kuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2LHJlPWY+PTA/TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpOmYsdWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLHJlLEcpO2lmKEFycmF5'@;
put 'LmlzQXJyYXkodWUpKXtjb25zdFt5ZSxFZV09dWU7cmV0dXJuW3llPj0wP00uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChNLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh5ZSwxKSk6eWUsRWU+PTA/SS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEkuZ2V0TmVhcmVzdE5vdEhp'@;
put 'ZGRlbkluZGV4KEVlLDEpKTpFZV19fSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpmPT57bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT12JiZ0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCYmKHY9MTApLHY+MHx8ImF1dG8i'@;
put 'PT09dil7Y29uc3QgTT10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxJPWYuc3RhcnRSb3csRz1mLmVuZFJvdztpZigibnVtYmVyIj09dHlwZW9mIHYpZi5zdGFydFJvdz1NYXRoLm1heChJLXYsMCksZi5lbmRSb3c9TWF0aC5taW4oRyt2LE0tMSk7ZWxzZSBpZigiYXV0byI9PT12KXtjb25z'@;
put 'dCByZT1NYXRoLm1heCgxLE1hdGguY2VpbChHL00qMTIpKTtmLnN0YXJ0Um93PU1hdGgubWF4KEktcmUsMCksZi5lbmRSb3c9TWF0aC5taW4oRytyZSxNLTEpfX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsZil9LHZpZXdwb3J0Q29sdW1u'@;
put 'Q2FsY3VsYXRvck92ZXJyaWRlOmY9PntsZXQgdj10aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PXYmJnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQmJih2PTEwKSx2PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3VudFJl'@;
put 'bmRlcmFibGVDb2x1bW5zKCksST1mLnN0YXJ0Q29sdW1uLEc9Zi5lbmRDb2x1bW47aWYoIm51bWJlciI9PXR5cGVvZiB2JiYoZi5zdGFydENvbHVtbj1NYXRoLm1heChJLXYsMCksZi5lbmRDb2x1bW49TWF0aC5taW4oRyt2LE0tMSkpLCJhdXRvIj09PXYpe2NvbnN0IHJlPU1hdGgubWF4KDEs'@;
put 'TWF0aC5jZWlsKEcvTSo2KSk7Zi5zdGFydENvbHVtbj1NYXRoLm1heChJLXJlLDApLGYuZW5kQ29sdW1uPU1hdGgubWluKEcrcmUsTS0xKX19dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGYpfSxyb3dIZWFkZXJXaWR0aDooKT0+dGhp'@;
put 'cy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxjb2x1bW5IZWFkZXJIZWlnaHQ6KCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiKTtyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb2x1bW5IZWFkZXJIZWlnaHR8fGZ9LHN0eWxlc0hhbmRsZXI6KCk9'@;
put 'PnRoaXMuaG90LnN0eWxlc0hhbmRsZXJ9O3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVJbml0V2Fsa29udGFibGUiLGwpLHRoaXMuX3d0PW5ldyBBSyhsKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0O2NvbnN0IGE9dGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcix7d2lkdGg6ZCxoZWlnaHQ6aH09'@;
put 'dGhpcy5ob3Qucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zZXRMYXN0U2l6ZShkLGgpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixmPT57Zi50YXJnZXQ9PT1hJiYzPT09Zi53aGljaCYmZi5zdG9wUHJvcGFnYXRpb24o'@;
put 'KX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiY29udGV4dG1lbnUiLGY9PntmLnRhcmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQu'@;
put 'ZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLnNldHRpbmdzLm9ic2VydmVET01WaXNpYmlsaXR5JiZ0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQmJnRoaXMuaG90LnJlbmRlcigpfSl9aXNUZXh0U2VsZWN0aW9uQWxsb3dlZChsKXtpZihERShsKSlyZXR1cm4hMDtjb25zdCBhPUlt'@;
put 'KGwsdGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7cmV0dXJuISEoITA9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZhfHwiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpJiZhfHwhdGhpcy5zZXR0aW5n'@;
put 'cy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmdGhpcy5pc1NlbGVjdGVkT25seUNlbGwoKSl9aXNNb3VzZURvd24oKXtyZXR1cm4gTXUoQ2csdGhpcyl9aXNTZWxlY3RlZE9ubHlDZWxsKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShsPW51bGw9PT0oYT10aGlzLmhv'@;
put 'dC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZUNlbGwoKSkmJnZvaWQgMCE9PWwmJmx9aXNDZWxsRWRpdGVkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKTtyZXR1cm4gbCYmbC5pc09wZW5lZCgpfWJlZm9yZVJlbmRlcihs'@;
put 'LGEpe2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIsYSl9YWZ0ZXJSZW5kZXIobCl7bCYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld1JlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1hcHBlbmRSb3dIZWFk'@;
put 'ZXIobCxhKXtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGQ9YS5maXJzdENoaWxkO2lmKCFncyhkLCJyZWxhdGl2ZSIpKXJldHVybiBBcChhKSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGwsYSk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVlcnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGws'@;
put 'dGhpcy5ob3QuZ2V0Um93SGVhZGVyKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpkLGdldFJvd0hlYWRlcjpofT10aGlzLmhvdCxmPWQuY3JlYXRlRWxlbWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmLmNsYXNzTmFtZT0icmVsYXRpdmUiLHYuY2xhc3NOYW1lPSJyb3dI'@;
put 'ZWFkZXIiLHRoaXMudXBkYXRlQ2VsbEhlYWRlcih2LGwsaCksZi5hcHBlbmRDaGlsZCh2KSxhLmFwcGVuZENoaWxkKGYpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsbCxhKX1hcHBlbmRDb2xIZWFkZXIobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5ob3QuZ2V0Q29sSGVhZGVyLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjA7Y29uc3QgZj0oKT0+e2NvbnN0IHY9bD49MD90aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGwpLmhl'@;
put 'YWRlckNsYXNzTmFtZTpudWxsO3JldHVybiB2P3Yuc3BsaXQoIiAiKTpbXX07aWYoYS5maXJzdENoaWxkKXtjb25zdCB2PWEuZmlyc3RDaGlsZDtncyh2LCJyZWxhdGl2ZSIpPyh0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodi5xdWVyeVNlbGVjdG9yKCIuY29sSGVhZGVyIiksbCxkLGgpLHYuY2xh'@;
put 'c3NOYW1lPSIiLEVpKHYsWyJyZWxhdGl2ZSIsLi4uZigpXSkpOihBcChhKSx0aGlzLmFwcGVuZENvbEhlYWRlcihsLGEsZCxoKSl9ZWxzZXtjb25zdHtyb290RG9jdW1lbnQ6dn09dGhpcy5ob3QsTT12LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEk9di5jcmVhdGVFbGVtZW50KCJzcGFuIiksRz1m'@;
put 'KCk7TS5jbGFzc0xpc3QuYWRkKCJyZWxhdGl2ZSIsLi4uRyksSS5jbGFzc05hbWU9ImNvbEhlYWRlciIsdGhpcy5zZXR0aW5ncy5hcmlhVGFncyYmKG1zKE0sInJvbGUiLCJwcmVzZW50YXRpb24iKSxtcyhJLCJyb2xlIiwicHJlc2VudGF0aW9uIikpLHRoaXMudXBkYXRlQ2VsbEhlYWRlcihJ'@;
put 'LGwsZCxoKSxNLmFwcGVuZENoaWxkKEkpLGEuYXBwZW5kQ2hpbGQoTSl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRlcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1l'@;
put 'bnRzWzNdOjAsZj1hO2NvbnN0IHY9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0aGlzLl93dDtsLnBhcmVudE5vZGUmJihncyhsLCJjb2xIZWFkZXIiKT9mPXYud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKTpncyhsLCJyb3dIZWFkZXIi'@;
put 'KSYmKGY9di53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT9qNyhsLGQoYSxoKSk6KExtKGwsIlx4YTAiKSxFaShsLCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdv'@;
put 'cmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNpemUobCxhKXtCZChSSyx0aGlzLGwpLEJkKExL'@;
put 'LHRoaXMsYSl9Z2V0TGFzdFNpemUoKXtyZXR1cm57d2lkdGg6TXUoUkssdGhpcyksaGVpZ2h0Ok11KExLLHRoaXMpfX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhp'@;
put 'cy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKXtp'@;
put 'ZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCkpO3JldHVy'@;
put 'biBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudFJvd3MoKS0xLC0xKX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5o'@;
put 'b3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1'@;
put 'bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVk'@;
put 'Q29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudENvbHMoKS0xLC0xKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMu'@;
put 'X3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZVJvdygpKX1nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmly'@;
put 'c3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0'@;
put 'aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1'@;
put 'YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMu'@;
put 'X3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0'@;
put 'UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29s'@;
put 'dW1uKCkpfWdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiBNdShJSyx0aGlzKX1nZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gTXUocFAsdGhpcyl9Z2V0Vmlld3BvcnRXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKX1nZXRXb3Jrc3Bh'@;
put 'Y2VXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9Z2V0Vmlld3BvcnRIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpfWdldFdvcmtzcGFjZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZp'@;
put 'ZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpfWdldEVsZW1lbnRPdmVybGF5TmFtZShsKXt2YXIgYTtyZXR1cm4obnVsbCE9PShhPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKSkmJnZvaWQgMCE9PWE/YTp0aGlzLl93dCkud3RUYWJsZS5uYW1lfWdldE92ZXJsYXlC'@;
put 'eU5hbWUobCl7cmV0dXJuIHRoaXMuX3d0LmdldE92ZXJsYXlCeU5hbWUobCl9Z2V0QWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd3QuYWN0aXZlT3ZlcmxheU5hbWV9aXNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCl9aGFzVmVydGljYWxTY3Jv'@;
put 'bGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNWZXJ0aWNhbFNjcm9sbCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNIb3Jpem9udGFsU2Nyb2xsKCl9Z2V0VGFibGVXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdl'@;
put 'dFdpZHRoKCl9Z2V0VGFibGVIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRIZWlnaHQoKX1nZXRUYWJsZU9mZnNldCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZU9mZnNldCgpfWdldFJvd0hlYWRlcldpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0'@;
put 'Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5p'@;
put 'c1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9ZGVzdHJveSgpe3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5kZXN0cm95KCl9fTtiKDEzOTA4KTtjb25zdCBSM2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixPSz1SM2UubGVuZ3RoO2Z1bmN0aW9uIG1QKGMpe2xldCBkLGw9YysxLGE9IiI7Zm9yKDtsPjA7KWQ9KGwtMSklT0ssYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2Qp'@;
put 'K2EsbD1wYXJzZUludCgobC1kKS9PSywxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gRnR0KGMpe2xldCBsPTA7aWYoYylmb3IobGV0IGE9MCxkPWMubGVuZ3RoLTE7YTxjLmxlbmd0aDthKz0xLGQtPTEpbCs9T0sqKmQqKFIzZS5pbmRleE9mKGNbYV0pKzEpO3JldHVybiBsLT0xLGx9ZnVuY3Rpb24g'@;
put 'SHR0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKysp'@;
put 'e2NvbnN0IGY9W107Zm9yKGg9MDtoPGw7aCsrKWYucHVzaChtUChoKSsoZCsxKSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIE50dCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPXt9O2ZvcihoPTA7aDxsO2grKylmW2Bwcm9wJHtofWBdPW1QKGgpKyhkKzEpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiBWdHQoYyxs'@;
put 'KXtjb25zdCBhPVtdO2xldCBkO2ZvcihsZXQgaD0wO2g8YztoKyspe2Q9W107Zm9yKGxldCBmPTA7ZjxsO2YrKylkLnB1c2goIiIpO2EucHVzaChkKX1yZXR1cm4gYX1mdW5jdGlvbiBQSyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu'@;
put 'dHNbMV06MCxhPWM7Y29uc3QgZD1bXTtyZXR1cm4oIUFycmF5LmlzQXJyYXkoYyl8fCFBcnJheS5pc0FycmF5KGNbMF0pKSYmKGE9W2NdKSxhLmZvckVhY2goKGgsZik9PntBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaCgodixNKT0+e2QucHVzaChbZitsLE0sdl0pfSk6T2JqZWN0LmtleXMo'@;
put 'aCkuZm9yRWFjaCh2PT57ZC5wdXNoKFtmK2wsdixoW3ZdXSl9KX0pLGR9ZnVuY3Rpb24gRksoYyl7bGV0IGw9MDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGNbMF0mJkFycmF5LmlzQXJyYXkoY1swXSk/bD1jWzBdLmxlbmd0aDpjWzBdJiZYcyhjWzBdKSYmKGw9Vk8oY1swXSkpKSxsfWZ1'@;
put 'bmN0aW9uIEwzZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT5BcnJheS5pc0FycmF5KGwpKSl9ZnVuY3Rpb24gTzNlKGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PiJvYmplY3QiPT10eXBlb2YgbCYm'@;
put 'IUFycmF5LmlzQXJyYXkobCkmJm51bGwhPT1sKSl9ZnVuY3Rpb24gS0UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEJ0dChjKXt2YXIgbD1mdW5jdGlvbiBqdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2'@;
put 'b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n'@;
put 'Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFV0dD1j'@;
put 'bGFzcyB6dHR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO0tFKHRoaXMsImhvdCIsdm9pZCAwKSxLRSh0aGlzLCJkYXRhIix2b2lkIDApLEtFKHRoaXMsImRhdGFUeXBlIiwiYXJyYXkiKSxLRSh0'@;
put 'aGlzLCJjb2xUb1Byb3AiLCgpPT57fSksS0UodGhpcywicHJvcFRvQ29sIiwoKT0+e30pLHRoaXMuaG90PWwsdGhpcy5kYXRhPWF9bW9kaWZ5Um93RGF0YShsKXtsZXQgYTtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5Um93RGF0YSIpJiYoYT10aGlzLmhvdC5ydW5Ib29rcygibW9k'@;
put 'aWZ5Um93RGF0YSIsbCkpLHZvaWQgMD09PWF8fE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdOmF9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGEmJjAhPT10aGlzLmRhdGEubGVuZ3RoP3RoaXMuZ2V0QnlSYW5nZShudWxsLG51bGwsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSk6dGhpcy5kYXRhfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0QXRDb2x1bW4obCl7Y29uc3QgYT1bXTtyZXR1cm4gS24odGhpcy5kYXRhLChkLGgpPT57Y29uc3QgZj10aGlzLmdldEF0Q2VsbChoLGwpO2EucHVzaChmKX0pLGF9Z2V0QXRS'@;
put 'b3cobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgZj12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtkYXRhRG90Tm90YXRpb246dn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtsZXQgTT1udWxsLEk9bnVsbDtp'@;
put 'ZihNPXRoaXMubW9kaWZ5Um93RGF0YShsKSxBcnJheS5pc0FycmF5KE0pKUk9W10sZj9NLmZvckVhY2goKEcscmUpPT57SVtyZV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHJlLE0pfSk6S2EoYSxkLEc9PntJW0ctYV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLEcsTSl9KTtlbHNlIGlm'@;
put 'KFhzKE0pfHxmbChNKSlpZihJPWg/W106e30sIWZ8fGgpe2NvbnN0IHJlPXRoaXMuY291bnRGaXJzdFJvd0tleXMoKS0xO0thKDAscmUsdWU9Pntjb25zdCB5ZT10aGlzLmNvbFRvUHJvcCh1ZSk7aWYodWU+PShhfHwwKSYmdWU8PShkfHxyZSkmJiFOdW1iZXIuaXNJbnRlZ2VyKHllKSl7Y29u'@;
put 'c3QgRWU9dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHllLE0pO2g/SS5wdXNoKEVlKTp2P05PKEkseWUsRWUpOklbeWVdPUVlfX0pfWVsc2UgcXMoTSwoRyxyZSk9Pntjb25zdCB1ZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwscmUsTSk7dj9OTyhJLHJlLHVlKTpJW3JlXT11ZX0pO3JldHVy'@;
put 'biBJfXNldEF0Q2VsbChsLGEsZCl7aWYoIShsPj10aGlzLmNvdW50Um93cygpfHxhPj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGg9RmQoZCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURh'@;
put 'dGEiLGwsYSxoLCJzZXQiKSxoLmlzVG91Y2hlZCgpJiYoZD1oLnZhbHVlKX1bIl9fcHJvdG9fXyIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIl0uaW5jbHVkZXMobCl8fChOdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXVthXT1kOk5PKHRoaXMuZGF0YVtsXSxhLGQpKX19Z2V0QXRQ'@;
put 'aHlzaWNhbENlbGwobCxhLGQpe2xldCBoPW51bGw7aWYoZClpZigic3RyaW5nIj09dHlwZW9mIGEpe2NvbnN0e2RhdGFEb3ROb3RhdGlvbjpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2g9Zj9aMmUoZCxhKTpkW2FdfWVsc2UgaD0iZnVuY3Rpb24iPT10eXBlb2YgYT9hKGQpOmRbYV07aWYo'@;
put 'dGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPUZkKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQoKSYmKGg9Zi52YWx1ZSl9cmV0dXJuIGh9Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlz'@;
put 'Lm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJvcChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51bGwsdj1udWxsLE09bnVsbCxJPW51bGw7bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9'@;
put 'MCxNPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLHY9TWF0aC5taW4obC5jb2wsYS5jb2wpLE09TWF0aC5tYXgobC5yb3csYS5yb3cpLEk9TWF0aC5tYXgobC5jb2wsYS5jb2wpKTtjb25zdCBHPVtdO3JldHVybiBLYShmLE0scmU9PntHLnB1c2goaD90aGlz'@;
put 'LmdldEF0Um93KHJlLHZvaWQgMCx2b2lkIDAsZCk6dGhpcy5nZXRBdFJvdyhyZSx2LEksZCkpfSksR31jb3VudFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7Y29uc3QgbD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYo'@;
put 'TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBGSyh0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmhvdD1udWxsfX07YigyMDI5MSk7Y29uc3QgUDNlPXtfbG9jYWxIb29r'@;
put 'czpPYmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzW2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5wdXNoKGwpLHRoaXN9LHJ1bkxvY2FsSG9va3MoYyxsLGEsZCxoLGYsdil7aWYodGhpcy5f'@;
put 'bG9jYWxIb29rc1tjXSl7Y29uc3QgTT10aGlzLl9sb2NhbEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IEk9MDtJPE07SSsrKUdPKHRoaXMuX2xvY2FsSG9va3NbY11bSV0sdGhpcyxsLGEsZCxoLGYsdil9fSxjbGVhckxvY2FsSG9va3MoKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlz'@;
put 'fX07VHAoUDNlLCJNSVhJTl9OQU1FIiwibG9jYWxIb29rcyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCB5MT1QM2U7ZnVuY3Rpb24gRjNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXdHQoYyl7dmFyIGw9ZnVuY3Rpb24gWXR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv'@;
put 'ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy'@;
put 'biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj'@;
put 'b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRN3tjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO0YzZSh0aGlzLCJpbmRleGVkVmFsdWVzIixbXSksRjNlKHRoaXMs'@;
put 'ImluaXRWYWx1ZU9yRm4iLHZvaWQgMCksdGhpcy5pbml0VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlzLmluZGV4ZWRWYWx1ZXM7aWYobDxhLmxlbmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMo'@;
put 'bCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNo'@;
put 'YW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBd'@;
put 'OnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLGZsKHRoaXMuaW5pdFZhbHVlT3JGbik/S2EobC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbihhKSkpOkthKGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVz'@;
put 'LnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwpe3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0IiksdGhpc31pbnNlcnQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIp'@;
put 'fXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZuPW51bGx9fWZ1bmN0aW9uIEhLKGMsbCxhKXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4u'@;
put 'LmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gWEUoYyxsKXtyZXR1cm4gQW0oYyxhPT4hMT09PWwuaW5jbHVkZXMoYSkpfWZ1bmN0aW9uIE5LKGMsbCl7cmV0dXJuIHlvKGMsYT0+YS1sLmZpbHRlcihkPT5kPGEpLmxlbmd0aCl9ZnVuY3Rpb24gVksoYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxl'@;
put 'bmd0aDtyZXR1cm4geW8oYyxoPT5oPj1hP2grZDpoKX14bChRNyx5MSk7Y2xhc3MgSDNlIGV4dGVuZHMgUTd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPVZLKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9SEsoZCxsLGEpLHN1'@;
put 'cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPVhFKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9TksoYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIEJLKGMsbCxhLGQpe2NvbnN0IGg9YS5sZW5ndGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMu'@;
put 'c2xpY2UoMCxoKSwuLi5hLm1hcCgoZix2KT0+ZmwoZCk/ZChmLHYpOmQpLC4uLnZvaWQgMD09PWg/W106Yy5zbGljZShoKV19ZnVuY3Rpb24gaksoYyxsKXtyZXR1cm4gQW0oYywoYSxkKT0+ITE9PT1sLmluY2x1ZGVzKGQpKX1jbGFzcyBqbSBleHRlbmRzIFE3e2luc2VydChsLGEpe3RoaXMu'@;
put 'aW5kZXhlZFZhbHVlcz1CSyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1qSyh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksc3VwZXIucmVtb3ZlKGwpfX1jbGFzcyB2UCBleHRlbmRz'@;
put 'IGpte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBHdSh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jbGFzcyB5'@;
put 'UCBleHRlbmRzIFE3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBHdHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uICR0dChjKXt2YXIgbD1mdW5jdGlvbiBLdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s'@;
put 'LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi'@;
put 'c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10pfWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShsLmxlbmd0aCkua2V5cygpXSxz'@;
put 'dXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0'@;
put 'aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhclZhbHVlKGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9WEUo'@;
put 'dGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLGZsKHRoaXMuaW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4pfWdldExlbmd0aCgpe3JldHVybiB0aGlzLm9y'@;
put 'ZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg9MCxzdXBlci5zZXRE'@;
put 'ZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1CSyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1WSyh0aGlzLm9yZGVyT2ZJbmRleGVzLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShs'@;
put 'KXt0aGlzLmluZGV4ZWRWYWx1ZXM9aksodGhpcy5pbmRleGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9WEUodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPU5LKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksc3VwZXIucmVtb3ZlKGwpfWdldEVudHJpZXMo'@;
put 'KXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCldKX19Y2xhc3MgcUUgZXh0ZW5kcyBqbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdl'@;
put 'dFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIEd1KHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNvbnN0IE4zZT1uZXcgTWFwKFtbImhpZGluZyIsdlBdLFsiaW5kZXgiLFE3XSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlIix5UF0sWyJwaHlzaWNh'@;
put 'bEluZGV4VG9WYWx1ZSIsam1dLFsidHJpbW1pbmciLHFFXV0pO2xldCB6Sz0wO2NsYXNzIFVLe2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIHF0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSnR0KGMpe3ZhciBsPWZ1bmN0aW9uIFF0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMp'@;
put 'cmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt'@;
put 'aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh'@;
put 'YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNvbGxlY3Rpb24iLG5ldyBNYXApfXJlZ2lzdGVyKGwsYSl7ITE9PT10aGlzLmNvbGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0aW9uLnNldChsLGEpLGEuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxv'@;
put 'Y2FsSG9va3MoImNoYW5nZSIsYSkpLHpLKz0xKX11bnJlZ2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0aW9uLmdldChsKTtIYShhKSYmKGEuZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxldGUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpLHpLLT0xKX11bnJlZ2lz'@;
put 'dGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9Z2V0KGwpe3JldHVybiBiYyhsKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1n'@;
put 'ZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnkobCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWlu'@;
put 'aXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5pbml0KGwpfSl9fWZ1bmN0aW9uIFpLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0bnQoYyl7dmFyIGw9ZnVuY3Rpb24gbm50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1'@;
put 'cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9'@;
put 'KTpjW2xdPWEsY314bChVSyx5MSk7Y2xhc3MgVjNlIGV4dGVuZHMgVUt7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLFpLKHRoaXMsIm1lcmdlZFZhbHVlc0NhY2hlIixbXSksWksodGhpcywiYWdncmVnYXRpb25GdW5jdGlvbiIsdm9pZCAwKSxaSyh0aGlzLCJmYWxsYmFja1ZhbHVlIix2b2lk'@;
put 'IDApLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRoaXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZhbHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLm1lcmdlZFZhbHVlc0Nh'@;
put 'Y2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IGE9eW8odGhpcy5nZXQoKSxmPT5mLmdldFZhbHVlcygpKSxkPVtdLGg9SGEoYVswXSkmJmFbMF0ubGVuZ3RofHwwO2ZvcihsZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCB2PVtdO2ZvcihsZXQgTT0wO008dGhpcy5nZXRM'@;
put 'ZW5ndGgoKTtNKz0xKXYucHVzaChhW01dW2ZdKTtkLnB1c2godil9cmV0dXJuIHlvKGQsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xdO3JldHVybiBIYShkKT9kOnRoaXMuZmFsbGJh'@;
put 'Y2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfX1mdW5jdGlvbiBCM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBXSz1uZXcgV2Vha01hcDtjbGFzcyBqM2V7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gcm50KGMsbCxhKXsoZnVuY3Rpb24gaW50KGMsbCl7aWYobC5oYXMoYykpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxXSyxbXSl9c3Vic2NyaWJlKGwpe3JldHVybiB0aGlzLmFkZExvY2FsSG9vaygiY2hhbmdlIixsKSx0aGlz'@;
put 'Ll93cml0ZShmdW5jdGlvbiBzbnQoYyxsKXtyZXR1cm4gYy5nZXQoQjNlKGMsbCkpfShXSyx0aGlzKSksdGhpc311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVuc3Vic2NyaWJlIiksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4g'@;
put 'bC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENoYW5nZXMobCl7IWZ1bmN0aW9uIGFudChjLGwsYSl7Yy5zZXQoQjNlKGMsbCksYSl9KFdLLHRoaXMsbCl9fWZ1bmN0aW9uIHozZShjLGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7'@;
put 'Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxoKyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJlcGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxuZXdWYWx1ZTpsW2hdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6'@;
put 'dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5sZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVlOnZvaWQgMH0pO3JldHVybiBhfWZ1bmN0aW9uIEpFKGMsbCxhKXsoZnVuY3Rpb24gb250KGMsbCl7aWYobC5oYXMoYykpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBLMihjLGwpe3JldHVybiBjLmdldChVM2UoYyxsKSl9ZnVuY3Rpb24gYlAoYyxsLGEpe3JldHVy'@;
put 'biBjLnNldChVM2UoYyxsKSxhKSxhfWZ1bmN0aW9uIFUzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9u'@;
put 'IHRoaXMgb2JqZWN0Iil9eGwoajNlLHkxKTt2YXIgX1A9bmV3IFdlYWtNYXAsUUU9bmV3IFdlYWtNYXAsd1A9bmV3IFdlYWtNYXAsQ1A9bmV3IFdlYWtNYXAsU1A9bmV3IFdlYWtNYXA7Y2xhc3MgbG50e2NvbnN0cnVjdG9yKCl7bGV0e2luaXRpYWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtKRSh0aGlzLF9QLG5ldyBTZXQpLEpFKHRoaXMsUUUsW10pLEpFKHRoaXMsd1AsW10pLEpFKHRoaXMsQ1AsITEpLEpFKHRoaXMsU1AsITEpLGJQKFNQLHRoaXMsbD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29u'@;
put 'c3QgbD1uZXcgajNlO3JldHVybiBLMihfUCx0aGlzKS5hZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2NyaWJlIiwoKT0+e0syKF9QLHRoaXMpLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENoYW5nZXMoejNlKEsyKFFFLHRoaXMpLEsyKHdQLHRoaXMpKSksbH1lbWl0KGwpe2xldCBh'@;
put 'PUsyKHdQLHRoaXMpOyghSzIoQ1AsdGhpcyl8fEsyKFFFLHRoaXMpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChLMihTUCx0aGlzKSk6YlAoUUUsdGhpcyxuZXcgQXJyYXkobC5sZW5ndGgpLmZpbGwoSzIoU1AsdGhpcykpKSxL'@;
put 'MihDUCx0aGlzKXx8KGJQKENQLHRoaXMsITApLGE9SzIoUUUsdGhpcykpKTtjb25zdCBkPXozZShhLGwpO0syKF9QLHRoaXMpLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLGJQKHdQLHRoaXMsbCl9fWZ1bmN0aW9uIHExKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBjbnQoYyl7dmFyIGw9ZnVu'@;
put 'Y3Rpb24gdW50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBZS3tjb25zdHJ1Y3Rvcigpe3ExKHRoaXMsImluZGV4ZXNTZXF1ZW5jZSIsbmV3IEgzZSkscTEodGhpcywidHJpbW1pbmdNYXBzQ29sbGVjdGlvbiIsbmV3'@;
put 'IFYzZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSkpLHExKHRoaXMsImhpZGluZ01hcHNDb2xsZWN0aW9uIixuZXcgVjNlKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSkscTEodGhpcywidmFyaW91c01hcHNDb2xsZWN0aW9uIixuZXcgVUspLHExKHRoaXMsImhpZGluZ0NoYW5nZXNPYnNlcnZh'@;
put 'YmxlIixuZXcgbG50KHtpbml0aWFsSW5kZXhWYWx1ZTohMX0pKSxxMSh0aGlzLCJub3RUcmltbWVkSW5kZXhlc0NhY2hlIixbXSkscTEodGhpcywibm90SGlkZGVuSW5kZXhlc0NhY2hlIixbXSkscTEodGhpcywiaXNCYXRjaGVkIiwhMSkscTEodGhpcywiaW5kZXhlc1NlcXVlbmNlQ2hhbmdl'@;
put 'ZCIsITEpLHExKHRoaXMsImluZGV4ZXNDaGFuZ2VTb3VyY2UiLHZvaWQgMCkscTEodGhpcywidHJpbW1lZEluZGV4ZXNDaGFuZ2VkIiwhMSkscTEodGhpcywiaGlkZGVuSW5kZXhlc0NoYW5nZWQiLCExKSxxMSh0aGlzLCJyZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGUiLFtdKSxxMSh0'@;
put 'aGlzLCJmcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZSIsbmV3IE1hcCkscTEodGhpcywiZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZSIsbmV3IE1hcCksdGhpcy5pbmRleGVzU2VxdWVuY2UuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2Vx'@;
put 'dWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlz'@;
put 'LnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMu'@;
put 'aGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91'@;
put 'c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5p'@;
put 'c0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNyZWF0ZUNoYW5nZXNPYnNlcnZlcihsKXtpZigiaGlkaW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlwZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3Jl'@;
put 'YXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGwsYSxkKXtyZXR1cm4gdGhpcy5yZWdpc3Rlck1hcChsLGZ1bmN0aW9uIFh0dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZighTjNlLmhh'@;
put 'cyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBtYXAgdHlwZSAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gbmV3KE4zZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1hcChsLGEpe2lmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMu'@;
put 'aGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5nZXQobCkpdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTthIGluc3RhbmNlb2YgcUU/dGhpcy50cmltbWluZ01hcHNDb2xs'@;
put 'ZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9mIHZQP3RoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZh'@;
put 'LmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwo'@;
put 'KXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25z'@;
put 'dCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gSGEoYSk/YTpudWxsfWdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlW2xdO3JldHVybiBIYShhKT9hOm51bGx9Z2V0VmlzdWFs'@;
put 'RnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gSGEoYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgo'@;
put 'dGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCkpfWdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBIYShhKT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRl'@;
put 'bkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRl'@;
put 'eGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9QXJyYXkuZnJvbSh0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgdj0tMTtyZXR1cm4gdj1hPjA/Zi5maW5kSW5kZXgoTT0+TT5sKTpmLnJldmVyc2UoKS5maW5kSW5kZXgoTT0+TTxsKSwt'@;
put 'MT09PXY/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLC1hLCExKTpudWxsOmZbdl19aW5pdFRvTGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5u'@;
put 'b3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRl'@;
put 'eGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rp'@;
put 'b24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtj'@;
put 'b25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWwpLmtleXMoKV0ubWFwKGg9PmgrbCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEsbC1hKX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVu'@;
put 'Y2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGwpe3ZvaWQgMD09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVz'@;
put 'Q2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVz'@;
put 'Q2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzVHJpbW1lZChkKSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmxlbmd0aH1nZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJu'@;
put 'ITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5J'@;
put 'bmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcygpLmxlbmd0aH1nZXRSZW5kZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJs'@;
put 'ZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9m'@;
put 'SW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxlbmd0aH1tb3ZlSW5kZXhlcyhsLGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPXlvKGwsRz0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChHKSksaD10aGlzLmdldE5vdFRyaW1t'@;
put 'ZWRJbmRleGVzTGVuZ3RoKCksZj1sLmxlbmd0aCx2PVhFKHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZCksTT12LmZpbHRlcihHPT4hMT09PXRoaXMuaXNUcmltbWVkKEcpKTtsZXQgST12LmluZGV4T2YoTVtNLmxlbmd0aC0xXSkrMTthK2Y8aCYmKEk9di5pbmRleE9mKE1bYV0pKSx0aGlz'@;
put 'LmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKEhLKHYsSSxkKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgo'@;
put 'bCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWluc2VydEluZGV4ZXMobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InN0YXJ0Ijtjb25z'@;
put 'dCBoPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKVtsXSxmPUhhKGgpP2g6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSx2PXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoaCk/dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5pbmRleE9mKGgpOnRoaXMuZ2V0TnVtYmVyT2ZJ'@;
put 'bmRleGVzKCksTT15byhuZXcgQXJyYXkoYSkuZmlsbChmKSwoRyxyZSk9PkcrcmUpO3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Imluc2VydCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5zZXJ0KHYsTSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNl'@;
put 'PXZvaWQgMDtjb25zdCBJPSJlbmQiPT09ZD9NLm1hcChHPT5HKzEpOk07dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkodixJKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkodixJKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNl'@;
put 'cnRUb0V2ZXJ5KHYsSSksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9cmVtb3ZlSW5kZXhlcyhsKXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VT'@;
put 'b3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3Bl'@;
put 'cmF0aW9ucygpfXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXND'@;
put 'aGFuZ2VkfHx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1l'@;
put 'ZEluZGV4ZXMoITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFs'@;
put 'SW5kZXhlcygpLHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1'@;
put 'bkxvY2FsSG9va3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4'@;
put 'ZXNDaGFuZ2VkfSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJ'@;
put 'bmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5z'@;
put 'ZXQoZCxhKX19Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBk'@;
put 'PXRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpLGg9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiBaM2UoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsy'@;
put 'fSktKFthLXpBLVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJuIGE/YCR7YVsxXS50b0xvd2VyQ2FzZSgpfS0ke2FbMl0udG9VcHBlckNhc2UoKX1gOmN9ZnVuY3Rpb24gVzNlKGMpe0hhKGMpJiZCJChobGBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQg'@;
put 'cmVnaXN0ZXIgcGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJlZm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfXhsKFlLLHkxKTtjb25zdHtyZWdp'@;
put 'c3RlcjpmbnQsZ2V0VmFsdWVzOnBudH09VTIoInBocmFzZUZvcm1hdHRlcnMiKTshZnVuY3Rpb24gZ250KGMsbCl7Zm50KGMsbCl9KCJwbHVyYWxpemUiLGZ1bmN0aW9uIGhudChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pO2NvbnN0'@;
put 'IFkzZT0iQ29udGV4dE1lbnU6aXRlbXMiLEdLPWAke1kzZX0ubm9JdGVtc2AsJEs9YCR7WTNlfS5pbnNlcnRSb3dBYm92ZWAsS0s9YCR7WTNlfS5pbnNlcnRSb3dCZWxvd2AsWEs9YCR7WTNlfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLHFLPWAke1kzZX0uaW5zZXJ0Q29sdW1uT25UaGVSaWdo'@;
put 'dGAsSks9YCR7WTNlfS5yZW1vdmVSb3dgLFFLPWAke1kzZX0ucmVtb3ZlQ29sdW1uYCxlWD1gJHtZM2V9LnVuZG9gLHRYPWAke1kzZX0ucmVkb2AsTVA9YCR7WTNlfS5yZWFkT25seWAsblg9YCR7WTNlfS5jbGVhckNvbHVtbmAsclg9YCR7WTNlfS5jb3B5YCxpWD1gJHtZM2V9LmNvcHlXaXRo'@;
put 'SGVhZGVyc2AsYVg9YCR7WTNlfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2Asc1g9YCR7WTNlfS5jb3B5SGVhZGVyc09ubHlgLG9YPWAke1kzZX0uY3V0YCxsWD1gJHtZM2V9LmZyZWV6ZUNvbHVtbmAsY1g9YCR7WTNlfS51bmZyZWV6ZUNvbHVtbmAsdVg9YCR7WTNlfS5tZXJnZUNlbGxzYCxkWD1g'@;
put 'JHtZM2V9LnVubWVyZ2VDZWxsc2AsaFg9YCR7WTNlfS5hZGRDb21tZW50YCxmWD1gJHtZM2V9LmVkaXRDb21tZW50YCxwWD1gJHtZM2V9LnJlbW92ZUNvbW1lbnRgLGdYPWAke1kzZX0ucmVhZE9ubHlDb21tZW50YCxtWD1gJHtZM2V9LmFsaWduYCx2WD1gJHtZM2V9LmFsaWduLmxlZnRgLHlY'@;
put 'PWAke1kzZX0uYWxpZ24uY2VudGVyYCxiWD1gJHtZM2V9LmFsaWduLnJpZ2h0YCxfWD1gJHtZM2V9LmFsaWduLmp1c3RpZnlgLHdYPWAke1kzZX0uYWxpZ24udG9wYCxDWD1gJHtZM2V9LmFsaWduLm1pZGRsZWAsU1g9YCR7WTNlfS5hbGlnbi5ib3R0b21gLE1YPWAke1kzZX0uYm9yZGVyc2As'@;
put 'eFg9YCR7WTNlfS5ib3JkZXJzLnRvcGAsRVg9YCR7WTNlfS5ib3JkZXJzLnJpZ2h0YCxUWD1gJHtZM2V9LmJvcmRlcnMuYm90dG9tYCxBWD1gJHtZM2V9LmJvcmRlcnMubGVmdGAsa1g9YCR7WTNlfS5ib3JkZXJzLnJlbW92ZWAsRFg9YCR7WTNlfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxk'@;
put 'Um93YCxJWD1gJHtZM2V9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsUlg9YCR7WTNlfS5oaWRlQ29sdW1uYCxMWD1gJHtZM2V9LnNob3dDb2x1bW5gLE9YPWAke1kzZX0uaGlkZVJvd2AsUFg9YCR7WTNlfS5zaG93Um93YCxKMT0iRmlsdGVyczoiLFVjPWAke0oxfWNvbmRpdGlv'@;
put 'bnNgLHhQPWAke1VjfS5ub25lYCxGWD1gJHtVY30uaXNFbXB0eWAsSFg9YCR7VWN9LmlzTm90RW1wdHlgLE5YPWAke1VjfS5pc0VxdWFsVG9gLFZYPWAke1VjfS5pc05vdEVxdWFsVG9gLEJYPWAke1VjfS5iZWdpbnNXaXRoYCxqWD1gJHtVY30uZW5kc1dpdGhgLHpYPWAke1VjfS5jb250YWlu'@;
put 'c2AsVVg9YCR7VWN9LmRvZXNOb3RDb250YWluYCx2bnQ9YCR7VWN9LmJ5VmFsdWVgLFpYPWAke1VjfS5ncmVhdGVyVGhhbmAsV1g9YCR7VWN9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxZWD1gJHtVY30ubGVzc1RoYW5gLEdYPWAke1VjfS5sZXNzVGhhbk9yRXF1YWxUb2AsJFg9YCR7VWN9Lmlz'@;
put 'QmV0d2VlbmAsS1g9YCR7VWN9LmlzTm90QmV0d2VlbmAsWFg9YCR7VWN9LmFmdGVyYCxxWD1gJHtVY30uYmVmb3JlYCxKWD1gJHtVY30udG9kYXlgLFFYPWAke1VjfS50b21vcnJvd2AsZXE9YCR7VWN9Lnllc3RlcmRheWAsdHE9YCR7SjF9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxucT1g'@;
put 'JHtKMX1sYWJlbHMuZmlsdGVyQnlWYWx1ZWAscnE9YCR7SjF9bGFiZWxzLmNvbmp1bmN0aW9uYCxFUD1gJHtKMX1sYWJlbHMuZGlzanVuY3Rpb25gLFRQPWAke0oxfXZhbHVlcy5ibGFua0NlbGxzYCxpcT1gJHtKMX1idXR0b25zLnNlbGVjdEFsbGAsYXE9YCR7SjF9YnV0dG9ucy5jbGVhcmAs'@;
put 'c3E9YCR7SjF9YnV0dG9ucy5va2Asb3E9YCR7SjF9YnV0dG9ucy5jYW5jZWxgLGxxPWAke0oxfWJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoYCxjcT1gJHtKMX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCx1cT1gJHtKMX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxkcT0i'@;
put 'Q2hlY2tib3hSZW5kZXJlcjoiLGhxPWAke2RxfWNoZWNrZWRgLGZxPWAke2RxfXVuY2hlY2tlZGAsRzNlPXtsYW5ndWFnZUNvZGU6ImVuLVVTIixbR0tdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsWyRLXToiSW5zZXJ0IHJvdyBhYm92ZSIsW0tLXToiSW5zZXJ0IHJvdyBiZWxvdyIsW1hLXToi'@;
put 'SW5zZXJ0IGNvbHVtbiBsZWZ0IixbcUtdOiJJbnNlcnQgY29sdW1uIHJpZ2h0IixbSktdOlsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0sW1FLXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFtlWF06IlVuZG8iLFt0WF06IlJlZG8iLFtNUF06IlJlYWQgb25seSIsW25Y'@;
put 'XToiQ2xlYXIgY29sdW1uIixbbVhdOiJBbGlnbm1lbnQiLFt2WF06IkxlZnQiLFt5WF06IkNlbnRlciIsW2JYXToiUmlnaHQiLFtfWF06Ikp1c3RpZnkiLFt3WF06IlRvcCIsW0NYXToiTWlkZGxlIixbU1hdOiJCb3R0b20iLFtsWF06IkZyZWV6ZSBjb2x1bW4iLFtjWF06IlVuZnJlZXplIGNv'@;
put 'bHVtbiIsW01YXToiQm9yZGVycyIsW3hYXToiVG9wIixbRVhdOiJSaWdodCIsW1RYXToiQm90dG9tIixbQVhdOiJMZWZ0Iixba1hdOiJSZW1vdmUgYm9yZGVyKHMpIixbaFhdOiJBZGQgY29tbWVudCIsW2ZYXToiRWRpdCBjb21tZW50IixbcFhdOiJEZWxldGUgY29tbWVudCIsW2dYXToiUmVh'@;
put 'ZC1vbmx5IGNvbW1lbnQiLFt1WF06Ik1lcmdlIGNlbGxzIixbZFhdOiJVbm1lcmdlIGNlbGxzIixbclhdOiJDb3B5IixbaVhdOlsiQ29weSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW2FYXTpbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVh'@;
put 'ZGVycyJdLFtzWF06WyJDb3B5IGhlYWRlciBvbmx5IiwiQ29weSBoZWFkZXJzIG9ubHkiXSxbb1hdOiJDdXQiLFtEWF06Ikluc2VydCBjaGlsZCByb3ciLFtJWF06IkRldGFjaCBmcm9tIHBhcmVudCIsW1JYXTpbIkhpZGUgY29sdW1uIiwiSGlkZSBjb2x1bW5zIl0sW0xYXTpbIlNob3cgY29s'@;
put 'dW1uIiwiU2hvdyBjb2x1bW5zIl0sW09YXTpbIkhpZGUgcm93IiwiSGlkZSByb3dzIl0sW1BYXTpbIlNob3cgcm93IiwiU2hvdyByb3dzIl0sW3hQXToiTm9uZSIsW0ZYXToiSXMgZW1wdHkiLFtIWF06IklzIG5vdCBlbXB0eSIsW05YXToiSXMgZXF1YWwgdG8iLFtWWF06IklzIG5vdCBlcXVh'@;
put 'bCB0byIsW0JYXToiQmVnaW5zIHdpdGgiLFtqWF06IkVuZHMgd2l0aCIsW3pYXToiQ29udGFpbnMiLFtVWF06IkRvZXMgbm90IGNvbnRhaW4iLFtaWF06IkdyZWF0ZXIgdGhhbiIsW1dYXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbWVhdOiJMZXNzIHRoYW4iLFtHWF06Ikxlc3MgdGhh'@;
put 'biBvciBlcXVhbCB0byIsWyRYXToiSXMgYmV0d2VlbiIsW0tYXToiSXMgbm90IGJldHdlZW4iLFtYWF06IkFmdGVyIixbcVhdOiJCZWZvcmUiLFtKWF06IlRvZGF5IixbUVhdOiJUb21vcnJvdyIsW2VxXToiWWVzdGVyZGF5IixbVFBdOiJCbGFuayBjZWxscyIsW3RxXToiRmlsdGVyIGJ5IGNv'@;
put 'bmRpdGlvbiIsW25xXToiRmlsdGVyIGJ5IHZhbHVlIixbcnFdOiJBbmQiLFtFUF06Ik9yIixbaXFdOiJTZWxlY3QgYWxsIixbYXFdOiJDbGVhciIsW3NxXToiT0siLFtvcV06IkNhbmNlbCIsW2xxXToiU2VhcmNoIixbY3FdOiJWYWx1ZSIsW3VxXToiU2Vjb25kIHZhbHVlIixbaHFdOiJDaGVj'@;
put 'a2VkIixbZnFdOiJVbmNoZWNrZWQifSx5bnQ9VyxwcT1HM2UubGFuZ3VhZ2VDb2RlLHtyZWdpc3RlcjpibnQsZ2V0SXRlbTokM2UsaGFzSXRlbTpfbnQsZ2V0VmFsdWVzOndudH09VTIoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIEszZShjLGwpe2xldCBhPWMsZD1sO3JldHVy'@;
put 'biBYcyhjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBDbnQoYyxsKXtjIT09cHEmJmZ1bmN0aW9uIGRudChjLGwpe3FzKGwsKGEsZCk9PntiYyhjW2RdKSYmKGNbZF09YSl9KX0obCwkM2UocHEpKX0oYSxkKSxibnQoYSxwMShkKSkscDEoZCl9ZnVuY3Rpb24gWDNlKGMpe3Jl'@;
put 'dHVybiBncShjKT9wMSgkM2UoYykpOm51bGx9ZnVuY3Rpb24gZ3EoYyl7cmV0dXJuIF9udChjKX1mdW5jdGlvbiBxM2UoYyxsLGEpe2NvbnN0IGQ9WDNlKGMpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2NvbnN0IGg9ZFtsXTtpZihiYyhoKSlyZXR1cm4gbnVsbDtjb25zdCBmPWZ1bmN0aW9u'@;
put 'IE1udChjLGwpe2xldCBhPWM7cmV0dXJuIEtuKGZ1bmN0aW9uIG1udCgpe3JldHVybiBwbnQoKX0oKSxkPT57YT1kKGMsbCl9KSxhfShoLGEpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2ZbMF06Zn1LM2UoRzNlKTtjb25zdCBKM2U9ImFjdGl2ZS1oZWFkZXIiLG1xPSJoZWFkZXIiLHZxPSJh'@;
put 'cmVhIixBUD0iZm9jdXMiO2NsYXNzIFEzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2V0dGluZ3M9bCx0aGlzLmNlbGxSYW5nZT1hfHxudWxsfWlzRW1wdHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuY2VsbFJhbmdlfWFkZChsKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dGhpcy5jZWxsUmFuZ2U9'@;
put 'dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9cmVwbGFjZShsLGEpe2lmKCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5jZWxsUmFuZ2UuZnJvbS5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWEsITA7aWYo'@;
put 'dGhpcy5jZWxsUmFuZ2UudG8uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89YSwhMH1yZXR1cm4hMX1jbGVhcigpe3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0IGw9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5l'@;
put 'cigpLGE9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWRlc3Ryb3koKXt0aGlzLnJ1bkxvY2FsSG9va3MoImRlc3Ryb3kiKX19eGwoUTNlLHkxKTtjb25zdCBEbnQ9UTNlO2NvbnN0IFNnPWNsYXNzIE9udCBl'@;
put 'eHRlbmRzIERudHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbnVsbCksZnVuY3Rpb24gSW50KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBSbnQoYyl7dmFyIGw9ZnVuY3Rpb24gTG50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By'@;
put 'aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu'@;
put 'ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs'@;
put 'Y30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29tbWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFu'@;
put 'Z2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxDZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3RO'@;
put 'b3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtyZXR1cm4gbnVsbD09PWh8fG51bGw9PT1mP251bGw6KChoLnJvdz5mLnJvd3x8aC5jb2w+Zi5jb2wpJiYoaD1hLGY9ZCksdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoaCxoLGYp'@;
put 'KX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyLGwu'@;
put 'cm93LGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlcixsLmNvbCxkKTtyZXR1cm4gbnVsbD09PWY/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoaCxm'@;
put 'KX1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhLGQpe3JldHVybiBhPDA/YTpsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQpfWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBsPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFu'@;
put 'Z2VPbmx5KHRoaXMudmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbD09PWw/bnVsbDp0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobC5mcm9tLGwudG8pLHRoaXN9c3luY1dpdGgobCl7Y29uc3QgYT1sLmZyb20uY2xvbmUoKS5ub3JtYWxpemUoKSxkPSJO'@;
put 'LVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsaD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsZj10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkcyh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpO2xldCB2PW51bGw7aWYo'@;
put 'KG51bGw9PT1mfHxudWxsPT09Zi5jb2x8fG51bGw9PT1mLnJvdykmJih2PXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhhLGQsaCkpLG51bGwhPT12JiZsLm92ZXJsYXBzKHYpKXtjb25zdCBNPWwuaGlnaGxpZ2h0LmNsb25lKCk7aWYoTS5yb3c+PTAmJihNLnJvdz12LnJvdyksTS5j'@;
put 'b2w+PTAmJihNLmNvbD12LmNvbCksbnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBJPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKE0pO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKEkpfWwuc2V0SGlnaGxpZ2h0KE0pfXJldHVy'@;
put 'biJmb2N1cyI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvblR5cGUmJm51bGwhPT1mJiZudWxsPT09diYmbC5zZXRIaWdobGlnaHQodGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KSx0aGlzfWdldENvcm5lcnMoKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5jZWxsUmFuZ2U7cmV0dXJu'@;
put 'W01hdGgubWluKGwucm93LGEucm93KSxNYXRoLm1pbihsLmNvbCxhLmNvbCksTWF0aC5tYXgobC5yb3csYS5yb3cpLE1hdGgubWF4KGwuY29sLGEuY29sKV19Z2V0VmlzdWFsQ29ybmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxs'@;
put 'UmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGws'@;
put 'YSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiBudWxsPT09ZC5yb3d8fG51bGw9PT1kLmNvbHx8bnVsbD09PWgucm93fHxudWxsPT09aC5jb2w/bnVsbDp0'@;
put 'aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQsaCl9fTtmdW5jdGlvbiB5cShjKXtsZXR7YWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IFNnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6SjNlfSl9ZnVuY3Rpb24gUG50KGMpe2xldHthcmVh'@;
put 'Q29ybmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyBTZyh7Y2xhc3NOYW1lOiJhcmVhIixjcmVhdGVMYXllcnM6ITAsYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTp2cX0pfWZ1bmN0aW9uIEZudChjKXtsZXR7'@;
put 'Li4ubH09YztyZXR1cm4gbmV3IFNnKHtjbGFzc05hbWU6ImhpZ2hsaWdodCIsLi4ubCxzZWxlY3Rpb25UeXBlOnZxfSl9ZnVuY3Rpb24gSG50KGMpe2xldHtjb2x1bW5DbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgU2coe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToiY29s'@;
put 'dW1uIn0pfWZ1bmN0aW9uIGVwZShjKXtsZXR7aGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IFNnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6bXF9KX1mdW5jdGlvbiBqbnQoYyl7bGV0e3Jvd0NsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyBTZyh7Y2xh'@;
put 'c3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOiJyb3cifSl9ZnVuY3Rpb24gamQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFpudChjKXt2YXIgbD1mdW5jdGlvbiBXbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl'@;
put 'XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/'@;
put 'U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0'@;
put 'aW9uIE1nKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgT3A9bmV3IFdl'@;
put 'YWtTZXQ7Y2xhc3MgWW50e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB6bnQoYyxsKXsoZnVuY3Rpb24gVW50KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi'@;
put 'KX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLE9wKSxqZCh0aGlzLCJvcHRpb25zIix2b2lkIDApLGpkKHRoaXMsImxheWVyTGV2ZWwiLDApLGpkKHRoaXMsImZvY3VzIix2b2lkIDApLGpkKHRoaXMsImZpbGwiLHZvaWQgMCksamQodGhpcywibGF5ZXJlZEFyZWFzIixuZXcgTWFwKSxqZCh0aGlz'@;
put 'LCJhcmVhcyIsbmV3IE1hcCksamQodGhpcywicm93SGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiY29sdW1uSGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiYWN0aXZlUm93SGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiYWN0aXZlQ29sdW1uSGVhZGVycyIsbmV3IE1hcCksamQodGhpcywi'@;
put 'YWN0aXZlQ29ybmVySGVhZGVycyIsbmV3IE1hcCksamQodGhpcywicm93SGlnaGxpZ2h0cyIsbmV3IE1hcCksamQodGhpcywiY29sdW1uSGlnaGxpZ2h0cyIsbmV3IE1hcCksamQodGhpcywiY3VzdG9tU2VsZWN0aW9ucyIsW10pLHRoaXMub3B0aW9ucz1sLHRoaXMuZm9jdXM9ZnVuY3Rpb24g'@;
put 'Tm50KGMpe2xldHtjZWxsQ29ybmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyBTZyh7Y2xhc3NOYW1lOiJjdXJyZW50IixoZWFkZXJBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLGJvcmRlcjp7d2lkdGg6Mixjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTps'@;
put 'fSwuLi5hLHNlbGVjdGlvblR5cGU6QVB9KX0obCksdGhpcy5maWxsPWZ1bmN0aW9uIEJudChjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IFNnKHtjbGFzc05hbWU6ImZpbGwiLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2VsZWN0aW9uVHlwZToiZmlsbCJ9KX0obCl9'@;
put 'aXNFbmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09QVAmJihkPSJjdXJyZW50Iik7bGV0IGg9dGhpcy5vcHRpb25zLmRpc2FibGVkQ2VsbFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYmIWgu'@;
put 'aW5jbHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLmxheWVyTGV2ZWw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRGb2N1cygpe3JldHVybiB0aGlzLmZvY3VzfWdldEZpbGwoKXtyZXR1cm4gdGhpcy5m'@;
put 'aWxsfWNyZWF0ZUxheWVyZWRBcmVhKCl7cmV0dXJuIE1nKE9wLHRoaXMseGcpLmNhbGwodGhpcyx0aGlzLmxheWVyZWRBcmVhcyxQbnQpfWdldExheWVyZWRBcmVhcygpe3JldHVyblsuLi50aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKV19Y3JlYXRlQXJlYSgpe3JldHVybiBNZyhPcCx0aGlz'@;
put 'LHhnKS5jYWxsKHRoaXMsdGhpcy5hcmVhcyxGbnQpfWdldEFyZWFzKCl7cmV0dXJuWy4uLnRoaXMuYXJlYXMudmFsdWVzKCldfWNyZWF0ZVJvd0hlYWRlcigpe3JldHVybiBNZyhPcCx0aGlzLHhnKS5jYWxsKHRoaXMsdGhpcy5yb3dIZWFkZXJzLGVwZSl9Z2V0Um93SGVhZGVycygpe3JldHVy'@;
put 'blsuLi50aGlzLnJvd0hlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhlYWRlcigpe3JldHVybiBNZyhPcCx0aGlzLHhnKS5jYWxsKHRoaXMsdGhpcy5jb2x1bW5IZWFkZXJzLGVwZSl9Z2V0Q29sdW1uSGVhZGVycygpe3JldHVyblsuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCld'@;
put 'fWNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpe3JldHVybiBNZyhPcCx0aGlzLHhnKS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVSb3dIZWFkZXJzLHlxKX1nZXRBY3RpdmVSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29sdW1u'@;
put 'SGVhZGVyKCl7cmV0dXJuIE1nKE9wLHRoaXMseGcpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMseXEpfWdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIo'@;
put 'KXtyZXR1cm4gTWcoT3AsdGhpcyx4ZykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycyx5cSl9Z2V0QWN0aXZlQ29ybmVySGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZVJvd0hpZ2hsaWdodCgpe3JldHVybiBNZyhP'@;
put 'cCx0aGlzLHhnKS5jYWxsKHRoaXMsdGhpcy5yb3dIaWdobGlnaHRzLGpudCl9Z2V0Um93SGlnaGxpZ2h0cygpe3JldHVyblsuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpe3JldHVybiBNZyhPcCx0aGlzLHhnKS5jYWxsKHRoaXMsdGhpcy5j'@;
put 'b2x1bW5IaWdobGlnaHRzLEhudCl9Z2V0Q29sdW1uSGlnaGxpZ2h0cygpe3JldHVyblsuLi50aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCldfWdldEN1c3RvbVNlbGVjdGlvbnMoKXtyZXR1cm5bLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zLnZhbHVlcygpXX1hZGRDdXN0b21TZWxlY3Rp'@;
put 'b24obCl7dGhpcy5jdXN0b21TZWxlY3Rpb25zLnB1c2goZnVuY3Rpb24gVm50KGMpe2xldHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6YSwuLi5kfT1jO3JldHVybiBuZXcgU2coey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOiJjdXN0b20tc2VsZWN0aW9uIn0sYSl9KHsuLi50aGlzLm9wdGlv'@;
put 'bnMsLi4ubH0pKX1jbGVhcigpe3RoaXMuZm9jdXMuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSxLbih0aGlzLmFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxLbih0aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksS24odGhpcy5yb3dIZWFkZXJzLnZhbHVl'@;
put 'cygpLGw9PntsLmNsZWFyKCl9KSxLbih0aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLEtuKHRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksS24odGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFy'@;
put 'KCl9KSxLbih0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLEtuKHRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksS24odGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KX1bU3ltYm9sLml0'@;
put 'ZXJhdG9yXSgpe3JldHVyblt0aGlzLmZvY3VzLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLC4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVS'@;
put 'b3dIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSwuLi50aGlz'@;
put 'LmN1c3RvbVNlbGVjdGlvbnNdW1N5bWJvbC5pdGVyYXRvcl0oKX19ZnVuY3Rpb24geGcoYyxsKXtjb25zdCBhPXRoaXMubGF5ZXJMZXZlbDtpZihjLmhhcyhhKSlyZXR1cm4gYy5nZXQoYSk7Y29uc3QgZD1sKHtsYXllckxldmVsOmEsLi4udGhpcy5vcHRpb25zfSk7cmV0dXJuIGMuc2V0KGEs'@;
put 'ZCksZH1jb25zdCBHbnQ9WW50O2Z1bmN0aW9uIHRwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJG50KGMpe3ZhciBsPWZ1bmN0aW9uIEtudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj'@;
put 'KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgYnF7Y29uc3RydWN0b3Io'@;
put 'bCl7dHBlKHRoaXMsInJhbmdlcyIsW10pLHRwZSh0aGlzLCJjcmVhdGVDZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jcmVhdGVDZWxsUmFuZ2U9bH1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLnNpemUoKX1zZXQobCl7cmV0dXJuIHRoaXMuY2xlYXIoKSx0aGlzLnJhbmdlcy5wdXNoKHRoaXMu'@;
put 'Y3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfWFkZChsKXtyZXR1cm4gdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31wb3AoKXtyZXR1cm4gdGhpcy5yYW5nZXMucG9wKCl9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTEp'@;
put 'fXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCktMil9aW5jbHVkZXMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOigpPT4hMDtyZXR1cm4gdGhpcy5yYW5nZXMuc29tZSgoZCxoKT0+ZC5p'@;
put 'bmNsdWRlcyhsKSYmYShkLGgpKX1maW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMucmFuZ2VzLmZvckVhY2goKGQsaCk9PntkLmlzRXF1YWwobCkmJmEucHVzaCh7cmFuZ2U6ZCxsYXllcjpofSl9KSxhfXJlbW92ZShsKXtyZXR1cm4gdGhpcy5yYW5nZXM9dGhpcy5yYW5nZXMuZmls'@;
put 'dGVyKGE9PiFsLnNvbWUoZD0+ZC5pc0VxdWFsKGEpKSksdGhpc31yZW1vdmVMYXllcnMobCl7cmV0dXJuIHRoaXMucmFuZ2VzPXRoaXMucmFuZ2VzLmZpbHRlcigoYSxkKT0+IWwuaW5jbHVkZXMoZCkpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoPTAsdGhpc31zaXpl'@;
put 'KCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aH1jbG9uZSgpe2NvbnN0IGw9bmV3IGJxKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKTtyZXR1cm4gbC5yYW5nZXM9dGhpcy5yYW5nZXMubWFwKGE9PmEuY2xvbmUoKSksbH1tYXAobCl7cmV0dXJuIHRoaXMucmFuZ2VzPXRoaXMucmFuZ2VzLm1hcCgo'@;
put 'YSxkKT0+bChhLGQpKSx0aGlzfXBlZWtCeUluZGV4KCl7bGV0IGEsbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gbD49MCYmbDx0aGlzLnNpemUoKSYmKGE9dGhpcy5yYW5nZXNbbF0pLGF9W1N5bWJvbC5pdGVyYXRvcl0o'@;
put 'KXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCBYbnQ9YnE7ZnVuY3Rpb24gX3EoYyxsLGEpe25wZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gbnBlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl'@;
put 'IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBCbyhjLGwpe3JldHVybiBjLmdldChYdShjLGwpKX1mdW5jdGlvbiBrUChjLGwsYSl7cmV0dXJuIGMuc2V0KFh1KGMsbCksYSksYX1mdW5jdGlvbiBYdShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIERQPW5ldyBXZWFrTWFwLGNjPW5ldyBXZWFrTWFwLGgzPW5ldyBXZWFr'@;
put 'TWFwLGgwPW5ldyBXZWFrU2V0O2NsYXNzIHJwZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiBxbnQoYyxsKXtucGUoYyxsKSxsLmFkZChjKX0pKHRoaXMsaDApLF9xKHRoaXMsRFAsdm9pZCAwKSxfcSh0aGlzLGNjLHZvaWQgMCksX3EodGhpcyxoMyx7eDowLHk6MH0pLGtQKERQLHRoaXMs'@;
put 'bCksa1AoY2MsdGhpcyxhKX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1CbyhjYyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSk7bGV0IGY9Qm8oRFAsdGhpcykuY3VycmVu'@;
put 'dCgpLmhpZ2hsaWdodDtjb25zdCB2PUJvKGNjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhmKTtsZXQgTT0wLEk9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixoKSxudWxsIT09di5yb3cmJm51bGwhPT12LmNvbCl7Y29uc3R7d2lkdGg6Ryxo'@;
put 'ZWlnaHQ6cmV9PVh1KGgwLHRoaXMsYXBlKS5jYWxsKHRoaXMpLHtyb3c6dWUsY29sOnllfT1YdShoMCx0aGlzLHNwZSkuY2FsbCh0aGlzLGYpLEVlPUJvKGNjLHRoaXMpLmZpeGVkUm93c0JvdHRvbSgpLEJlPUJvKGNjLHRoaXMpLm1pblNwYXJlUm93cygpLEdlPUJvKGNjLHRoaXMpLm1pblNw'@;
put 'YXJlQ29scygpLHN0PUJvKGNjLHRoaXMpLmF1dG9XcmFwUm93KCkscHQ9Qm8oY2MsdGhpcykuYXV0b1dyYXBDb2woKSxkdD1CbyhjYyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHVlK2gucm93LHllK2guY29sKTtpZihkdC5yb3c+PXJlKXtjb25zdCB3bj1GZChkJiZCZT4wJiYwPT09RWUpLGhu'@;
put 'PWR0LmNvbCsxLE1uPUJvKGNjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZHQucm93LXJlLGhuPj1HP2huLUc6aG4pO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsd24sWHUoaDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSxobj49Ryksd24udmFsdWU/dGhpcy5ydW5Mb2Nh'@;
put 'bEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIixCbyhjYyx0aGlzKS5jb3VudFJlbmRlcmFibGVSb3dzKCkpOnB0JiZkdC5hc3NpZ24oTW4pfWVsc2UgaWYoZHQucm93PDApe2NvbnN0IHduPUZkKHB0KSxobj1kdC5jb2wtMSxNbj1CbyhjYyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHJlK2R0LnJv'@;
put 'dyxobjwwP0craG46aG4pO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsd24sWHUoaDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSxobjwwKSxwdCYmZHQuYXNzaWduKE1uKX1pZihkdC5jb2w+PUcpe2NvbnN0IHduPUZkKGQmJkdlPjApLGhuPWR0LnJvdysxLE1uPUJvKGNj'@;
put 'LHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoaG4+PXJlP2huLXJlOmhuLGR0LmNvbC1HKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLHduLFh1KGgwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksaG4+PXJlKSx3bi52YWx1ZT90aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJl'@;
put 'cXVpcmUiLEJvKGNjLHRoaXMpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSk6c3QmJmR0LmFzc2lnbihNbil9ZWxzZSBpZihkdC5jb2w8MCl7Y29uc3Qgd249RmQoc3QpLGhuPWR0LnJvdy0xLE1uPUJvKGNjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoaG48MD9yZStobjpobixHK2R0LmNvbCk7'@;
put 'dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIix3bixYdShoMCx0aGlzLE1fKS5jYWxsKHRoaXMsTW4pLGhuPDApLHN0JiZkdC5hc3NpZ24oTW4pfWNvbnN0e3Jvd0RpcjpxdCxjb2xEaXI6bW59PVh1KGgwLHRoaXMsaXBlKS5jYWxsKHRoaXMsZHQpO009cXQsST1tbixmPVh1KGgw'@;
put 'LHRoaXMsTV8pLmNhbGwodGhpcyxkdCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZixNLEkpLGZ9dHJhbnNmb3JtRW5kKGwsYSl7Y29uc3QgZD1CbyhjYyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSksaD1CbyhEUCx0aGlzKS5jdXJyZW50KCks'@;
put 'Zj1CbyhjYyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaC5oaWdobGlnaHQpLHY9WHUoaDAsdGhpcyx3cSkuY2FsbCh0aGlzLGgudG8ucm93LGguZnJvbS5yb3cpLE09WHUoaDAsdGhpcyxDcSkuY2FsbCh0aGlzLGgudG8uY29sLGguZnJvbS5jb2wpLEk9aC50by5jbG9uZSgpO2xl'@;
put 'dCBHPTAscmU9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCksbnVsbCE9PWYucm93JiZudWxsIT09Zi5jb2wmJm51bGwhPT12JiZudWxsIT09TSl7Y29uc3R7cm93OnVlLGNvbDp5ZX09WHUoaDAsdGhpcyxzcGUpLmNhbGwodGhpcyxoLmhpZ2hsaWdodCks'@;
put 'RWU9Qm8oY2MsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh2K2Qucm93LE0rZC5jb2wpLEJlPWguZ2V0VG9wU3RhcnRDb3JuZXIoKSxHZT1oLmdldFRvcEVuZENvcm5lcigpLHN0PWguZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYoZC5jb2w8MCYmTT49eWUmJkVlLmNvbDx5ZSl7Y29uc3QgbW49RWUu'@;
put 'Y29sLXllO0VlLmNvbD1YdShoMCx0aGlzLENxKS5jYWxsKHRoaXMsQmUuY29sLEdlLmNvbCkrbW59ZWxzZSBpZihkLmNvbD4wJiZNPD15ZSYmRWUuY29sPnllKXtjb25zdCBtbj1YdShoMCx0aGlzLENxKS5jYWxsKHRoaXMsR2UuY29sLEJlLmNvbCksd249TWF0aC5tYXgoRWUuY29sLW1uLDEp'@;
put 'O0VlLmNvbD1tbit3bn1pZihkLnJvdzwwJiZ2Pj11ZSYmRWUucm93PHVlKXtjb25zdCBtbj1FZS5yb3ctdWU7RWUucm93PVh1KGgwLHRoaXMsd3EpLmNhbGwodGhpcyxCZS5yb3csc3Qucm93KSttbn1lbHNlIGlmKGQucm93PjAmJnY8PXVlJiZFZS5yb3c+dWUpe2NvbnN0IG1uPVh1KGgwLHRo'@;
put 'aXMsd3EpLmNhbGwodGhpcyxzdC5yb3csQmUucm93KSx3bj1NYXRoLm1heChFZS5yb3ctbW4sMSk7RWUucm93PW1uK3dufWNvbnN0e3Jvd0RpcjpwdCxjb2xEaXI6ZHR9PVh1KGgwLHRoaXMsaXBlKS5jYWxsKHRoaXMsRWUpO0c9cHQscmU9ZHQ7Y29uc3QgcXQ9WHUoaDAsdGhpcyxNXykuY2Fs'@;
put 'bCh0aGlzLEVlKTswPT09ZC5yb3cmJjAhPT1kLmNvbD9JLmNvbD1xdC5jb2w6MCE9PWQucm93JiYwPT09ZC5jb2w/SS5yb3c9cXQucm93OihJLnJvdz1xdC5yb3csSS5jb2w9cXQuY29sKX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsSSxHLHJlKSxJfXNl'@;
put 'dE9mZnNldFNpemUobCl7bGV0e3g6YSx5OmR9PWw7a1AoaDMsdGhpcyx7eDphLHk6ZH0pfXJlc2V0T2Zmc2V0U2l6ZSgpe2tQKGgzLHRoaXMse3g6MCx5OjB9KX19ZnVuY3Rpb24gaXBlKGMpe2NvbnN0e3dpZHRoOmwsaGVpZ2h0OmF9PVh1KGgwLHRoaXMsYXBlKS5jYWxsKHRoaXMpO2xldCBk'@;
put 'PTAsaD0wO3JldHVybiBjLnJvdzwwPyhkPS0xLGMucm93PTApOmMucm93PjAmJmMucm93Pj1hJiYoZD0xLGMucm93PWEtMSksYy5jb2w8MD8oaD0tMSxjLmNvbD0wKTpjLmNvbD4wJiZjLmNvbD49bCYmKGg9MSxjLmNvbD1sLTEpLHtyb3dEaXI6ZCxjb2xEaXI6aH19ZnVuY3Rpb24gYXBlKCl7'@;
put 'cmV0dXJue3dpZHRoOkJvKGgzLHRoaXMpLngrQm8oY2MsdGhpcykuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGhlaWdodDpCbyhoMyx0aGlzKS55K0JvKGNjLHRoaXMpLmNvdW50UmVuZGVyYWJsZVJvd3MoKX19ZnVuY3Rpb24gd3EoYyxsKXtjb25zdCBhPUJvKGNjLHRoaXMpLmZpbmRGaXJz'@;
put 'dE5vbkhpZGRlblJlbmRlcmFibGVSb3coYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpCbyhoMyx0aGlzKS55K2F9ZnVuY3Rpb24gQ3EoYyxsKXtjb25zdCBhPUJvKGNjLHRoaXMpLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpC'@;
put 'byhoMyx0aGlzKS54K2F9ZnVuY3Rpb24gc3BlKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1CbyhjYyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoYyk7aWYobnVsbD09PWx8fG51bGw9PT1hKXRocm93IG5ldyBFcnJvcigiUmVuZGVyYWJsZSBjb29yZHMgYXJlIG5vdCB2aXNpYmxlLiIp'@;
put 'O3JldHVybiBCbyhjYyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKEJvKGgzLHRoaXMpLnkrbCxCbyhoMyx0aGlzKS54K2EpfWZ1bmN0aW9uIE1fKGMpe2NvbnN0IGw9Yy5jbG9uZSgpO3JldHVybiBsLmNvbD1jLmNvbC1CbyhoMyx0aGlzKS54LGwucm93PWMucm93LUJvKGgzLHRoaXMpLnksQm8o'@;
put 'Y2MsdGhpcykucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGwpfXhsKHJwZSx5MSk7Y29uc3Qgb3BlPXJwZSxKbnQ9WzMsMl0sUW50PVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5nIl0sWyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSxN'@;
put 'cT1TeW1ib2woInJvb3QiKSxjcGU9U3ltYm9sKCJjaGlsZCIpO2Z1bmN0aW9uIHhfKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpNcTtpZihsIT09TXEmJmwhPT1jcGUpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2Vjb25kIGFy'@;
put 'Z3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uIik7Y29uc3QgYT1BcnJheS5pc0FycmF5KGMpLGQ9bD09PU1xO2xldCBoPTA7aWYoYSl7Y29uc3QgZj1jWzBdOzA9PT1jLmxlbmd0aD9oPTE6ZCYmZiBpbnN0YW5jZW9mIG1LP2g9MzpkJiZB'@;
put 'cnJheS5pc0FycmF5KGYpP2g9eF8oZixjcGUpOmMubGVuZ3RoPj0yJiZjLmxlbmd0aDw9NCYmIWMuc29tZSgoTSxJKT0+IVFudFtJXS5pbmNsdWRlcyh0eXBlb2YgTSkpJiYoaD0yKX1yZXR1cm4gaH1mdW5jdGlvbiBlVChjKXtsZXR7Y3JlYXRlQ2VsbENvb3JkczpsLGNyZWF0ZUNlbGxSYW5n'@;
put 'ZTphLGtlZXBEaXJlY3Rpb246ZD0hMSxwcm9wVG9Db2w6aH09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFKbnQuaW5jbHVkZXMoYykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzZWxlY3Rpb24gcmFuZ2VzIHNjaGVt'@;
put 'YSB0eXBlIHdhcyBwcm92aWRlZC4iKTtyZXR1cm4gZnVuY3Rpb24oZil7Y29uc3Qgdj0zPT09YztsZXQgTT12P2YuZnJvbS5yb3c6ZlswXSxJPXY/Zi5mcm9tLmNvbDpmWzFdLEc9dj9mLnRvLnJvdzpmWzJdLHJlPXY/Zi50by5jb2w6ZlszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaCYmKCJz'@;
put 'dHJpbmciPT10eXBlb2YgSSYmKEk9aChJKSksInN0cmluZyI9PXR5cGVvZiByZSYmKHJlPWgocmUpKSksYmMoRykmJihHPU0pLGJjKHJlKSYmKHJlPUkpLCFkKXtjb25zdCBFZT1NLEJlPUksR2U9RyxzdD1yZTtNPU1hdGgubWluKEVlLEdlKSxJPU1hdGgubWluKEJlLHN0KSxHPU1hdGgubWF4'@;
put 'KEVlLEdlKSxyZT1NYXRoLm1heChCZSxzdCl9Y29uc3QgdWU9bChNLEkpLHllPWwoRyxyZSk7cmV0dXJuIGEodWUsdWUseWUpfX1mdW5jdGlvbiBFXyhjLGwsYSl7KGZ1bmN0aW9uIG5ydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo'@;
put 'ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZTkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHJydChjKXt2YXIgbD1mdW5jdGlvbiBpcnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj'@;
put 'O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh'@;
put 'bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3'@;
put 'cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIF9jKGMsbCl7cmV0dXJuIGMuZ2V0KHVwZShjLGwpKX1mdW5jdGlvbiBQcChjLGwsYSl7cmV0dXJuIGMuc2V0KHVwZShjLGwpLGEpLGF9ZnVuY3Rpb24gdXBlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs'@;
put 'KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgYjE9bmV3IFdlYWtNYXAsdDk9bmV3IFdlYWtNYXAsTFA9bmV3IFdlYWtNYXAsdFQ9bmV3IFdlYWtNYXAs'@;
put 'T1A9bmV3IFdlYWtNYXAsblQ9bmV3IFdlYWtNYXA7Y2xhc3MgZHBle2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpcztlOSh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxlOSh0aGlzLCJ0YWJsZVByb3BzIix2b2lkIDApLGU5KHRoaXMsImluUHJvZ3Jlc3MiLCExKSxlOSh0aGlzLCJzZWxlY3Rl'@;
put 'ZFJhbmdlIixuZXcgWG50KChoLGYsdik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaCxmLHYpKSksZTkodGhpcywiaGlnaGxpZ2h0Iix2b2lkIDApLEVfKHRoaXMsYjEsdm9pZCAwKSxFXyh0aGlzLHQ5LHZvaWQgMCksZTkodGhpcywic2VsZWN0ZWRCeVJvd0hlYWRlciIsbmV3'@;
put 'IFNldCksZTkodGhpcywic2VsZWN0ZWRCeUNvbHVtbkhlYWRlciIsbmV3IFNldCksRV8odGhpcyxMUCwhMSksRV8odGhpcyx0VCwhMSksRV8odGhpcyxPUCwidW5rbm93biIpLEVfKHRoaXMsblQsLTEpLHRoaXMuc2V0dGluZ3M9bCx0aGlzLnRhYmxlUHJvcHM9YSx0aGlzLmhpZ2hsaWdodD1u'@;
put 'ZXcgR250KHtoZWFkZXJDbGFzc05hbWU6bC5jdXJyZW50SGVhZGVyQ2xhc3NOYW1lLGFjdGl2ZUhlYWRlckNsYXNzTmFtZTpsLmFjdGl2ZUhlYWRlckNsYXNzTmFtZSxyb3dDbGFzc05hbWU6bC5jdXJyZW50Um93Q2xhc3NOYW1lLGNvbHVtbkNsYXNzTmFtZTpsLmN1cnJlbnRDb2xDbGFzc05h'@;
put 'bWUsY2VsbEF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0scm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixkaXNhYmxlZENlbGxTZWxlY3Rpb246'@;
put 'KGgsZik9PnRoaXMudGFibGVQcm9wcy5pc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbihoLGYpLGNlbGxDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNDZWxsQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSxhcmVhQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBkLmlz'@;
put 'QXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1'@;
put 'YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxjcmVhdGVDZWxsUmFuZ2U6KGgsZix2KT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsdil9KSxQcChiMSx0aGlzLG5ldyBvcGUodGhpcy5z'@;
put 'ZWxlY3RlZFJhbmdlLHtyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFi'@;
put 'bGVSb3dzKCksY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1'@;
put 'YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KC4uLmFyZ3VtZW50cyl9'@;
put 'LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNl'@;
put 'bGxDb29yZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206KCk9PmwuZml4ZWRSb3dzQm90dG9tLG1pblNwYXJlUm93czooKT0+bC5taW5TcGFyZVJvd3MsbWluU3BhcmVDb2xzOigpPT5sLm1pblNwYXJlQ29scyxhdXRvV3JhcFJvdzooKT0+bC5hdXRvV3JhcFJvdyxhdXRvV3JhcENvbDooKT0+bC5h'@;
put 'dXRvV3JhcENvbH0pKSxQcCh0OSx0aGlzLG5ldyBvcGUodGhpcy5zZWxlY3RlZFJhbmdlLHtyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50UmVuZGVyYWJs'@;
put 'ZVJvd3M6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7cmV0dXJuIHRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGguZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5yb3cpfSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT57Y29u'@;
put 'c3QgaD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3JldHVybiB0aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxoLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkuY29sKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9w'@;
put 'cy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMu'@;
put 'ZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyguLi5hcmd1bWVudHMpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKC4uLmFyZ3VtZW50cyl9LGNy'@;
put 'ZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiksZml4ZWRSb3dzQm90dG9tOigpPT4wLG1pblNwYXJlUm93czooKT0+MCxtaW5TcGFyZUNvbHM6KCk9PjAsYXV0b1dyYXBSb3c6KCk9PiEwLGF1dG9XcmFwQ29sOigpPT4hMH0pKSxfYyhi'@;
put 'MSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRy'@;
put 'YW5zZm9ybVN0YXJ0IiwuLi5mKX0pLF9jKGIxLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5M'@;
put 'b2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLF9jKGIxLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJn'@;
put 'dW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSxfYyhiMSx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgp'@;
put 'LHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLF9jKGIxLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxl'@;
put 'bmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIiwuLi5mKX0pLF9jKGIxLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIiwuLi5mKX0pLF9jKGIxLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlUm93V3JhcCIsZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5mKX0pLF9jKGIxLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5mKX0pLF9jKHQ5LHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJh'@;
put 'bnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmYpfSksX2ModDksdGhp'@;
put 'cykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3Jt'@;
put 'Rm9jdXMiLC4uLmYpfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2V9bWFya1NvdXJjZShsKXtQcChPUCx0aGlzLGwpfW1hcmtFbmRTb3VyY2UoKXtQcChPUCx0aGlzLCJ1bmtub3duIil9Z2V0U2VsZWN0aW9uU291cmNlKCl7cmV0dXJuIF9jKE9QLHRoaXMp'@;
put 'fXNldEV4cGVjdGVkTGF5ZXJzKGwpe1BwKG5ULHRoaXMsbCl9YmVnaW4oKXt0aGlzLmluUHJvZ3Jlc3M9ITB9ZmluaXNoKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIixBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkpLHRoaXMuaW5Qcm9ncmVzcz0h'@;
put 'MSxQcChuVCx0aGlzLC0xKX1pc0luUHJvZ3Jlc3MoKXtyZXR1cm4gdGhpcy5pblByb2dyZXNzfXNldFJhbmdlU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmw7Y29uc3QgZj0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLHY9YmMoYSk/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKTphLE09bC5jbG9uZSgpO1BwKExQLHRoaXMs'@;
put 'ITEpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIrKGQ/Ik9ubHkiOiIiKSxNKSwoIWZ8fGYmJiF2JiZiYyhhKSkmJnRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuc2VsZWN0ZWRSYW5nZS5hZGQoTSkuY3VycmVudCgpLnNldEhpZ2hsaWdodChoLmNsb25l'@;
put 'KCkpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVhcigpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5jbGVhcigpKSxkfHx0aGlzLnNldFJhbmdlRW5kKGwpfXNldFJhbmdlU3RhcnRPbmx5KGwsYSl7dGhpcy5zZXRSYW5nZVN0YXJ0'@;
put 'KGwsYSwhMCxhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bCl9c2V0UmFuZ2VFbmQobCl7aWYodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSlyZXR1cm47Y29uc3QgYT1sLmNsb25lKCksZD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dz'@;
put 'KCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksZj10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmNsb25lKCkuc2V0VG8obCkuaXNTaW5nbGVIZWFkZXIoKTtpZigoZD4wfHxoPjApJiYoMD09PWQmJmEuY29sPDAmJiFmfHwwPT09aCYmYS5yb3c8MCYmIWYpKXJldHVybjt0aGlz'@;
put 'LnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixhKSx0aGlzLmJlZ2luKCk7Y29uc3Qgdj10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVyc3x8di5oaWdobGlnaHQubm9ybWFsaXplKCksInNpbmdsZSI9PT10aGlzLnNl'@;
put 'dHRpbmdzLnNlbGVjdGlvbk1vZGUpdi5zZXRGcm9tKHYuaGlnaGxpZ2h0KSx2LnNldFRvKHYuaGlnaGxpZ2h0KTtlbHNle2NvbnN0IEk9di5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksRz12LmdldFZlcnRpY2FsRGlyZWN0aW9uKCkscmU9dGhpcy5pc011bHRpcGxlKCk7di5zZXRUbyhhKSxy'@;
put 'ZSYmKEkhPT12LmdldEhvcml6b250YWxEaXJlY3Rpb24oKXx8MT09PXYuZ2V0V2lkdGgoKSYmIXYuaW5jbHVkZXModi5oaWdobGlnaHQpKSYmdi5mcm9tLmFzc2lnbih7Y29sOnYuaGlnaGxpZ2h0LmNvbH0pLHJlJiYoRyE9PXYuZ2V0VmVydGljYWxEaXJlY3Rpb24oKXx8MT09PXYuZ2V0SGVp'@;
put 'Z2h0KCkmJiF2LmluY2x1ZGVzKHYuaGlnaGxpZ2h0KSkmJnYuZnJvbS5hc3NpZ24oe3Jvdzp2LmhpZ2hsaWdodC5yb3d9KX1kPjAmJmg+MCYmKCF0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnN8fHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyYmIXYuaXNTaW5nbGVIZWFkZXIo'@;
put 'KSkmJnYudG8ubm9ybWFsaXplKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLnNldFJhbmdlRm9jdXModGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5oaWdobGlnaHQpLHRoaXMuYXBwbHlBbmRDb21taXQoKTtjb25zdCBNPS0xPT09X2MoblQsdGhp'@;
put 'cyl8fHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk9PT1fYyhuVCx0aGlzKTt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0UmFuZ2VFbmQiLGwsTSl9YXBwbHlBbmRDb21taXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06'@;
put 'dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxoPXRoaXMudGFibGVQcm9wcy5jb3Vu'@;
put 'dENvbHMoKTthPHRoaXMuaGlnaGxpZ2h0LmxheWVyTGV2ZWwmJihLbih0aGlzLmhpZ2hsaWdodC5nZXRBcmVhcygpLEJlPT57QmUuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0LmdldExheWVyZWRBcmVhcygpLEJlPT57QmUuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0LmdldFJvd0hl'@;
put 'YWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxLbih0aGlzLmhpZ2hsaWdodC5nZXRDb2x1bW5IZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlUm93SGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2'@;
put 'ZUNvbHVtbkhlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxLbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0Um93SGlnaGxpZ2h0cygpLEJlPT57QmUuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxp'@;
put 'Z2h0LmdldENvbHVtbkhpZ2hsaWdodHMoKSxCZT0+e0JlLmNsZWFyKCl9KSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSx2PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlzLmhpZ2hsaWdo'@;
put 'dC5jcmVhdGVSb3dIZWFkZXIoKSxJPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLEc9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCkscmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksdWU9dGhpcy5oaWdobGlnaHQuY3Jl'@;
put 'YXRlQWN0aXZlQ29ybmVySGVhZGVyKCkseWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksRWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7aWYoZi5jbGVhcigpLHYuY2xlYXIoKSxNLmNsZWFyKCksSS5jbGVhcigpLEcuY2xlYXIoKSxyZS5jbGVh'@;
put 'cigpLHVlLmNsZWFyKCkseWUuY2xlYXIoKSxFZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcih2cSxsLmhpZ2hsaWdodCkmJih0aGlzLmlzTXVsdGlwbGUoKXx8YT49MSkmJihmLmFkZChsLmZyb20pLmFkZChsLnRvKS5jb21taXQoKSx2LmFkZChsLmZyb20pLmFkZChsLnRv'@;
put 'KS5jb21taXQoKSwxPT09YSkpe2NvbnN0IEJlPXRoaXMuc2VsZWN0ZWRSYW5nZS5wcmV2aW91cygpO3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYS0xKSx0aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCkuYWRkKEJlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKEJlKSx0aGlzLmhpZ2hs'@;
put 'aWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLmFkZChCZS5mcm9tKS5jb21taXQoKS5zeW5jV2l0aChCZSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKX1pZih0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IobXEsbC5oaWdobGlnaHQpKXtpZighbC5pc1NpbmdsZUhlYWRlcigpKXtj'@;
put 'b25zdCBzdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93LDApLC0xKSxwdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLnRvLnJvdywtMSksZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgo'@;
put 'bC5mcm9tLmNvbCwwKSkscXQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsbC50by5jb2wpOyJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlPyhNLmFkZChzdCkuY29tbWl0KCksSS5hZGQoZHQpLmNvbW1pdCgpLHllLmFkZChzdCkuY29tbWl0KCksRWUu'@;
put 'YWRkKGR0KS5jb21taXQoKSk6KE0uYWRkKHN0KS5hZGQocHQpLmNvbW1pdCgpLEkuYWRkKGR0KS5hZGQocXQpLmNvbW1pdCgpLHllLmFkZChzdCkuYWRkKHB0KS5jb21taXQoKSxFZS5hZGQoZHQpLmFkZChxdCkuY29tbWl0KCkpfWNvbnN0IEJlPSFfYyh0VCx0aGlzKSYmdGhpcy5pc0VudGly'@;
put 'ZVJvd1NlbGVjdGVkKCkmJihoPjAmJmg9PT1sLmdldFdpZHRoKCl8fDA9PT1oJiZ0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSxHZT0hX2ModFQsdGhpcykmJnRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiYoZD4wJiZkPT09bC5nZXRIZWlnaHQoKXx8MD09PWQmJnRoaXMuaXNT'@;
put 'ZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpO0JlJiZHLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93LDApLE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksLTEpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVh'@;
put 'dGVDZWxsQ29vcmRzKE1hdGgubWF4KGwudG8ucm93LDApLC0xKSkuY29tbWl0KCksR2UmJnJlLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbigtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC0xKSxNYXRoLm1heChsLmZyb20uY29sLDApKSku'@;
put 'YWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KGwudG8uY29sLDApKSkuY29tbWl0KCksQmUmJkdlJiZ1ZS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSwtdGhpcy50YWJs'@;
put 'ZVByb3BzLmNvdW50Um93SGVhZGVycygpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLC0xKSkuY29tbWl0KCl9fXNldFJhbmdlRm9jdXMobCl7aWYodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSlyZXR1cm47Y29uc3QgYT10aGlzLnNlbGVjdGVkUmFuZ2Uu'@;
put 'Y3VycmVudCgpO3RoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRGb2N1cyIsbCk7Y29uc3QgZD10aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpO2QuY2xlYXIoKSxhLnNldEhpZ2hsaWdodChsKSx0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygi'@;
put 'YmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEFQLGEuaGlnaGxpZ2h0KSYmZC5hZGQoYS5oaWdobGlnaHQpLmNvbW1pdCgpLnN5bmNXaXRoKGEpLHRoaXMuaW5Qcm9ncmVzc3x8KFBwKExQLHRoaXMsITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJT'@;
put 'ZXRGb2N1cyIsYS5oaWdobGlnaHQpKX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzP19jKGIxLHRoaXMpLnNldE9mZnNldFNpemUoe3g6'@;
put 'dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLHk6dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpfSk6X2MoYjEsdGhpcykucmVzZXRPZmZzZXRTaXplKCksdGhpcy5zZXRSYW5nZVN0YXJ0KF9jKGIxLHRoaXMpLnRyYW5zZm9ybVN0YXJ0KGwsYSxkKSl9dHJhbnNmb3Jt'@;
put 'RW5kKGwsYSl7dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzP19jKGIxLHRoaXMpLnNldE9mZnNldFNpemUoe3g6dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLHk6dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpfSk6X2MoYjEsdGhpcykucmVzZXRPZmZzZXRT'@;
put 'aXplKCksdGhpcy5zZXRSYW5nZUVuZChfYyhiMSx0aGlzKS50cmFuc2Zvcm1FbmQobCxhKSl9dHJhbnNmb3JtRm9jdXMobCxhKXtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkse3JvdzpoLGNvbDpmfT1kLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQ'@;
put 'cm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGYtMSksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxoLTEpO2QuaGlnaGxpZ2h0LmlzSGVhZGVyKCk/X2ModDksdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDpmPDA/TWF0aC5hYnMoZik6LXYs'@;
put 'eTpoPDA/TWF0aC5hYnMoaCk6LU19KTpfYyh0OSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OmY8MD8wOi12LHk6aDwwPzA6LU19KTtjb25zdCBJPV9jKHQ5LHRoaXMpLnRyYW5zZm9ybVN0YXJ0KGwsYSk7dGhpcy5zZXRSYW5nZUZvY3VzKEkubm9ybWFsaXplKCkpfXNoaWZ0Um93cyhsLGEpe2lm'@;
put 'KCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0'@;
put 'ZWRCeUNvbHVtbkhlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5yb3c+PWwpe2NvbnN0e2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLEk9dGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxHPXRoaXMuaXNTZWxlY3Rl'@;
put 'ZEJ5Q29sdW1uSGVhZGVyKCkscmU9Rz8tMTowLHVlPUc/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IHllPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKEFvKGgucm93K3VlLHJlLE0tMSksaC5jb2wpLEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxs'@;
put 'Q29vcmRzKEFvKGYucm93K2EscmUsTS0xKSxmLmNvbCk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYucm93Pj1sP3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoeWUsITAsdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoQW8odi5yb3crYSwwLE0tMSksdi5jb2wpKTp0aGlzLnNldFJh'@;
put 'bmdlU3RhcnRPbmx5KHllLCEwKSxJJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxHJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKEVlKSx0aGlzLm1hcmtFbmRT'@;
put 'b3VyY2UoKX19c2hpZnRDb2x1bW5zKGwsYSl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7aWYodGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGln'@;
put 'aHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbD49bCl7Y29uc3R7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksST10aGlzLmlzU2VsZWN0ZWRCeVJv'@;
put 'd0hlYWRlcigpLEc9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxyZT1JPy0xOjAsdWU9ST8wOmE7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgeWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaC5yb3csQW8oaC5jb2wrdWUscmUsTS0xKSksRWU9'@;
put 'dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi5yb3csQW8oZi5jb2wrYSxyZSxNLTEpKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0Iiksdi5jb2w+PWw/dGhpcy5zZXRSYW5nZVN0YXJ0T25seSh5ZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxBbyh2'@;
put 'LmNvbCthLDAsTS0xKSkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoeWUsITApLEkmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLEcmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0'@;
put 'UmFuZ2VFbmQoRWUpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1nZXRMYXllckxldmVsKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCktMX1pc1NlbGVjdGVkKCl7cmV0dXJuIXRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCl9aXNNdWx0aXBsZSgpe2xldCBsPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTtjb25zdCBhPUZkKCFsLmlzU2luZ2xlKCkpO3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVySXNN'@;
put 'dWx0aXBsZVNlbGVjdGlvbiIsYSksYS52YWx1ZX1pc0ZvY3VzU2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWQoKSYmX2MoTFAsdGhpcyl9aXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/'@;
put 'YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcihsKSYmKC0xPT09bD90aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMobCkpfWlzRW50aXJlUm93U2VsZWN0ZWQoKXts'@;
put 'ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgYT1oPT57Y29uc3R7Y29sOmZ9PWguZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVy'@;
put 'cygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO3JldHVybih2PjAmJmY8MHx8MD09PXYpJiZoLmdldFdpZHRoKCk9PT1NfTtpZigtMT09PWwpcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKS5zb21lKGg9PmEoaCkpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdl'@;
put 'LnBlZWtCeUluZGV4KGwpO3JldHVybiEhZCYmYShkKX1pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5'@;
put 'Q29ybmVyKCkmJigtMT09PWw/dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKGwpKX1pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn'@;
put 'dW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGE9aD0+e2NvbnN0e3JvdzpmfT1oLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKTtyZXR1cm4odj4wJiZmPDB8'@;
put 'fDA9PT12KSYmaC5nZXRIZWlnaHQoKT09PU19O2lmKC0xPT09bClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUoaD0+YShoKSk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgobCk7cmV0dXJuISFkJiZhKGQpfWlzU2VsZWN0ZWRCeUFueUhl'@;
put 'YWRlcigpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKX1pc1NlbGVjdGVkQnlDb3JuZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhh'@;
put 'cyh0aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXModGhpcy5nZXRMYXllckxldmVsKCkpfWluSW5TZWxlY3Rpb24obCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5pbmNsdWRlcyhsKX1pc0NlbGxDb3JuZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMu'@;
put 'c2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiYhdGhpcy5pc011bHRpcGxlKCl9aXNDZWxsVmlzaWJsZShsKXtjb25zdCBhPXRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCk7cmV0dXJuIG51bGwhPT1hLnJvdyYm'@;
put 'bnVsbCE9PWEuY29sfWlzQXJlYUNvcm5lclZpc2libGUobCl7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPT09dGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5pc011bHRp'@;
put 'cGxlKCl9Y2xlYXIoKXt0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5jbGVhcigpfWRlc2VsZWN0KCl7dGhpcy5pc1NlbGVjdGVkKCkmJih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJEZXNlbGVjdCIpKX1z'@;
put 'ZWxlY3RBbGwoKXt2YXIgbDtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxoPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7Zm9jdXNQb3NpdGlvbjohMSxkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMX07Y29uc3QgZj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRS'@;
put 'b3dIZWFkZXJzKCksST10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksRz1kPy1JOjAscmU9YT8tTTowO2lmKDA9PT1HJiYwPT09cmUmJigwPT09Znx8MD09PXYpKXJldHVybjtsZXQgdWU9bnVsbD09PShsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKSl8fHZvaWQg'@;
put 'MD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2NvbnN0e2ZvY3VzUG9zaXRpb246eWUsZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6RWV9PWg7UHAodFQsdGhpcyxFZSkseWUmJk51bWJlci5pc0ludGVnZXIoeWU/LnJvdykmJk51bWJlci5pc0ludGVnZXIoeWU/LmNvbCkmJih1ZT10aGlzLnRhYmxl'@;
put 'UHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhBbyh5ZS5yb3csRyxmLTEpLEFvKHllLmNvbCxyZSx2LTEpKSk7Y29uc3QgQmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoRyxyZSksR2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi0xLHYtMSk7dGhpcy5jbGVhcigp'@;
put 'LHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoQmUsdm9pZCAwLHVlKSxyZTwwJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxHPDAmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFu'@;
put 'Z2VFbmQoR2UpLHRoaXMuZmluaXNoKCksUHAodFQsdGhpcywhMSl9c2VsZWN0Q2VsbHMobCl7dmFyIGE9dGhpcztjb25zdCBkPXhfKGwpO2lmKDE9PT1kKXJldHVybiExO2lmKDA9PT1kKXRocm93IG5ldyBFcnJvcihobGBVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5n'@;
put 'ZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAgIGNvbHVtbkVuZC9jb2x1bW5Q'@;
put 'cm9wRW5kXV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGg9ZVQoZCx7Y3JlYXRlQ2VsbENvb3JkczpmdW5jdGlvbigpe3JldHVybiBhLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsUmFuZ2U6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZSguLi5hcmd1bWVudHMpfSxwcm9wVG9Db2w6ST0+dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChJKSxrZWVwRGlyZWN0aW9uOiEwfSksZj10aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMsdj17Y291bnRSb3dzOnRo'@;
put 'aXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxjb3VudENvbHM6dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGNvdW50Um93SGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKTowLGNvdW50Q29sSGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRl'@;
put 'cnMoKTowfSxNPSFsLnNvbWUoST0+e2NvbnN0IEc9aChJKSxyZT1HLmlzVmFsaWQodik7cmV0dXJuIShyZSYmIUcuY29udGFpbnNIZWFkZXJzKCl8fHJlJiZHLmNvbnRhaW5zSGVhZGVycygpJiZHLmlzU2luZ2xlSGVhZGVyKCkpfSk7cmV0dXJuIE0mJih0aGlzLmNsZWFyKCksdGhpcy5zZXRF'@;
put 'eHBlY3RlZExheWVycyhsLmxlbmd0aCksS24obCxJPT57Y29uc3R7ZnJvbTpHLHRvOnJlfT1oKEkpO3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoRy5jbG9uZSgpLCExKSx0aGlzLnNldFJhbmdlRW5kKHJlLmNsb25lKCkpfSksdGhpcy5maW5pc2goKSksTX1zZWxlY3RDb2x1bW5zKGwpe2xldCBh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7Y29uc3QgaD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50YWJsZVByb3BzLnByb3BU'@;
put 'b0NvbChsKTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxJPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxHPTA9PT1J'@;
put 'PzA6LUkscmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoRyxoKSx1ZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LTEsZikseWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShyZSxyZSx1ZSkuaXNWYWxpZCh7Y291bnRSb3dzOnYsY291bnRDb2xz'@;
put 'Ok0sY291bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOkl9KTtpZih5ZSl7bGV0IEVlPTAsQmU9MDtOdW1iZXIuaXNJbnRlZ2VyKGQ/LnJvdykmJk51bWJlci5pc0ludGVnZXIoZD8uY29sKT8oRWU9QW8oZC5yb3csRyx2LTEpLEJlPUFvKGQuY29sLE1hdGgubWluKGgsZiksTWF0aC5t'@;
put 'YXgoaCxmKSkpOihFZT1BbyhkLEcsdi0xKSxCZT1oKTtjb25zdCBHZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhFZSxCZSksc3Q9MD09PUk/MDpBbyhHZS5yb3csRywtMSkscHQ9di0xLGR0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHN0LGgpLHF0PXRoaXMu'@;
put 'dGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHB0LGYpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZHQscXQsR2UpLGR0LnJvdz1zdCxxdC5yb3c9cHQsdGhpcy5zZXRSYW5nZVN0YXJ0T25seShkdCx2b2lkIDAsR2UpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhl'@;
put 'YWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQocXQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RDb2x1bW5zIixkdCxxdCxHZSksdGhpcy5maW5pc2goKX1yZXR1cm4geWV9c2VsZWN0Um93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGg9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLHY9'@;
put 'dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLE09MD09PXY/MDotdixJPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwsTSksRz10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhLGYtMSkscmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShJ'@;
put 'LEksRykuaXNWYWxpZCh7Y291bnRSb3dzOmgsY291bnRDb2xzOmYsY291bnRSb3dIZWFkZXJzOnYsY291bnRDb2xIZWFkZXJzOjB9KTtpZihyZSl7bGV0IHVlPTAseWU9MDtOdW1iZXIuaXNJbnRlZ2VyKGQ/LnJvdykmJk51bWJlci5pc0ludGVnZXIoZD8uY29sKT8odWU9QW8oZC5yb3csTWF0'@;
put 'aC5taW4obCxhKSxNYXRoLm1heChsLGEpKSx5ZT1BbyhkLmNvbCxNLGYtMSkpOih1ZT1sLHllPUFvKGQsTSxmLTEpKTtjb25zdCBFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh1ZSx5ZSksQmU9MD09PXY/MDpBbyhFZS5jb2wsTSwtMSksR2U9Zi0xLHN0PXRoaXMudGFibGVQ'@;
put 'cm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwsQmUpLHB0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsR2UpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0Um93cyIsc3QscHQsRWUpLHN0LmNvbD1CZSxwdC5jb2w9R2UsdGhpcy5zZXRSYW5nZVN0YXJ0T25seShzdCx2'@;
put 'b2lkIDAsRWUpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQocHQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RSb3dzIixzdCxwdCxFZSksdGhpcy5maW5pc2goKX1yZXR1cm4gcmV9cmVmcmVzaCgpe2lm'@;
put 'KCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgbD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksYT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7aWYoMD09PWx8fDA9PT1hKXJldHVybiB2b2lkIHRoaXMuZGVzZWxlY3QoKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5y'@;
put 'YW5nZXMubWFwKHY9PnYuY2xvbmUoKSk7dGhpcy5tYXJrU291cmNlKCJyZWZyZXNoIik7Y29uc3QgaD1uZXcgU2V0KHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlciksZj1uZXcgU2V0KHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcik7dGhpcy5jbGVhcigpLHRoaXMuc2V0RXhwZWN0ZWRMYXll'@;
put 'cnMoZC5sZW5ndGgpLGQuZm9yRWFjaCh2PT57Y29uc3R7ZnJvbTpNLHRvOkksaGlnaGxpZ2h0Okd9PXYscmU9bC0xLHVlPWEtMTtHLmFzc2lnbih7cm93OkFvKEcucm93LHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz8tMS8wOjAscmUpLGNvbDpBbyhHLmNvbCx0aGlzLnNldHRpbmdz'@;
put 'Lm5hdmlnYWJsZUhlYWRlcnM/LTEvMDowLHVlKX0pLE0uYXNzaWduKHtyb3c6QW8oTS5yb3csLTEvMCxyZSksY29sOkFvKE0uY29sLC0xLzAsdWUpfSksSS5hc3NpZ24oe3JvdzpBbyhJLnJvdywtMS8wLHJlKSxjb2w6QW8oSS5jb2wsLTEvMCx1ZSl9KSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5'@;
put 'KE0sITAsRyksdGhpcy5zZXRSYW5nZUVuZChJKX0pLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlcj1oLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcj1mLHRoaXMuZmluaXNoKCksdGhpcy5tYXJrRW5kU291cmNlKCl9Y29tbWl0KCl7aWYodGhpcy5oaWdobGlnaHQuZ2V0Q3VzdG9tU2VsZWN0'@;
put 'aW9ucygpLmZvckVhY2goaD0+e2guY29tbWl0KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRMYXllckxldmVsKCksZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3RoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihBUCxkLmhpZ2hsaWdodCkmJnRo'@;
put 'aXMuaGlnaGxpZ2h0LmdldEZvY3VzKCkuY29tbWl0KCkuc3luY1dpdGgoZCk7Zm9yKGxldCBoPTA7aDx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpO2grPTEpe3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCksdj10aGlz'@;
put 'LmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLE09dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCksST10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IZWFkZXIoKSxHPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpLHJlPXRoaXMuaGlnaGxpZ2h0LmNy'@;
put 'ZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLHVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLHllPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hpZ2hsaWdodCgpLEVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpO2YuY29tbWl0KCksdi5j'@;
put 'b21taXQoKSxNLmNvbW1pdCgpLEkuY29tbWl0KCksRy5jb21taXQoKSxyZS5jb21taXQoKSx1ZS5jb21taXQoKSx5ZS5jb21taXQoKSxFZS5jb21taXQoKX10aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEpfX14bChkcGUseTEpO2NvbnN0IGFydD1kcGUse3JlZ2lzdGVyOnNydCxnZXRJ'@;
put 'dGVtOm9ydCxoYXNJdGVtOmhwZSxnZXROYW1lczpscnR9PVUyKCJjZWxsVHlwZXMiKTtmdW5jdGlvbiB4cShjKXtpZighaHBlKGMpKXRocm93IEVycm9yKGBZb3UgZGVjbGFyZWQgY2VsbCB0eXBlICIke2N9IiBhcyBhIHN0cmluZyB0aGF0IGlzIG5vdCBtYXBwZWQgdG8gYSBrbm93biBvYmpl'@;
put 'Y3QuXG4gICAgICAgICAgICAgICAgIENlbGwgdHlwZSBtdXN0IGJlIGFuIG9iamVjdCBvciBhIHN0cmluZyBtYXBwZWQgdG8gYW4gb2JqZWN0IHJlZ2lzdGVyZWQgYnlcbiAgICAgICAgICAgICAgICAgIkhhbmRzb250YWJsZS5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZSIgbWV0aG9kYCk7'@;
put 'cmV0dXJuIG9ydChjKX1mdW5jdGlvbiBYMihjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuQ0VMTF9UWVBFKTtjb25zdHtlZGl0b3I6YSxyZW5kZXJlcjpkLHZhbGlkYXRvcjpofT1sO2EmJkhkKGMsYSksZCYmTGgoYyxkKSxoJiZZNyhjLGgpLHNydChjLGwpfWZ1bmN0aW9uIFBQ'@;
put 'KGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmM7Y29uc3QgZD0ic3RyaW5nIj09dHlwZW9mIGwudHlwZT94cShsLnR5cGUpOmwudHlwZTtpZihjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJnFzKGwsKGYs'@;
put 'dik9PntjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMuZGVsZXRlKHYpfSksIVhzKGQpKXJldHVybjthPT09YyYmIWMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcz1uZXcgU2V0KTtjb25zdCBoPXt9O3Fz'@;
put 'KGQsKGYsdik9Pnt2YXIgTTsoZnVuY3Rpb24gY3J0KGMsbCl7dmFyIGE7cmV0dXJuIkNFTExfVFlQRSIhPT1jJiYoKG51bGw9PT0oYT1sLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhhcyhjKSl8fCFDdShsLGMpKX0pKHYsYSkmJihoW3Zd'@;
put 'PWYsbnVsbD09PShNPWMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PU18fE0uYWRkKHYpKX0pLHd1KGMsaCl9ZnVuY3Rpb24gRlAoYyl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYykmJmM+PTB9ZnVuY3Rpb24gSFAoYyxsKXtpZighYygpKXRocm93IG5ldyBF'@;
put 'cnJvcihgQXNzZXJ0aW9uIGZhaWxlZDogJHtsfWApfWZ1bmN0aW9uIE5QKGMpe3JldHVybiBudWxsPT1jfWNvbnN0IGZwZT0oKT0+KHtfYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzOnZvaWQgMCxhY3RpdmVIZWFkZXJDbGFzc05hbWU6Imh0X19hY3RpdmVfaGlnaGxpZ2h0IixhbGxv'@;
put 'd0VtcHR5OiEwLGFsbG93SHRtbDohMSxhbGxvd0luc2VydENvbHVtbjohMCxhbGxvd0luc2VydFJvdzohMCxhbGxvd0ludmFsaWQ6ITAsYWxsb3dSZW1vdmVDb2x1bW46ITAsYWxsb3dSZW1vdmVSb3c6ITAsYXJpYVRhZ3M6ITAsYXV0b0NvbHVtblNpemU6dm9pZCAwLGF1dG9Sb3dTaXplOnZv'@;
put 'aWQgMCxhdXRvV3JhcENvbDohMSxhdXRvV3JhcFJvdzohMSxiaW5kUm93c1dpdGhIZWFkZXJzOnZvaWQgMCxjZWxsOltdLGNlbGxzOnZvaWQgMCxjaGVja2VkVGVtcGxhdGU6dm9pZCAwLGNsYXNzTmFtZTp2b2lkIDAsY29sSGVhZGVyczpudWxsLGNvbGxhcHNpYmxlQ29sdW1uczp2b2lkIDAs'@;
put 'Y29sdW1uSGVhZGVySGVpZ2h0OnZvaWQgMCxjb2x1bW5zOnZvaWQgMCxjb2x1bW5Tb3J0aW5nOnZvaWQgMCxjb2x1bW5TdW1tYXJ5OnZvaWQgMCxjb2xXaWR0aHM6dm9pZCAwLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6Imh0Q29tbWVudENlbGwiLGNvbW1lbnRzOiExLGNvbnRleHRNZW51OnZv'@;
put 'aWQgMCxjb3B5YWJsZTohMCxjb3B5UGFzdGU6ITAsY29ycmVjdEZvcm1hdDohMSxjdXJyZW50Q29sQ2xhc3NOYW1lOnZvaWQgMCxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJodF9faGlnaGxpZ2h0IixjdXJyZW50Um93Q2xhc3NOYW1lOnZvaWQgMCxjdXN0b21Cb3JkZXJzOiExLGRhdGE6dm9p'@;
put 'ZCAwLGRhdGFEb3ROb3RhdGlvbjohMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIix0aW1lRm9ybWF0OiJoOm1tOnNzIGEiLGRhdGVQaWNrZXJDb25maWc6dm9pZCAwLGRlZmF1bHREYXRlOnZvaWQgMCxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiExLGRyYWdUb1Nj'@;
put 'cm9sbDohMCxkcm9wZG93bk1lbnU6dm9pZCAwLGVkaXRvcjp2b2lkIDAsZW50ZXJCZWdpbnNFZGl0aW5nOiEwLGVudGVyTW92ZXM6e2NvbDowLHJvdzoxfSxmaWxsSGFuZGxlOnthdXRvSW5zZXJ0Um93OiExfSxmaWx0ZXI6ITAsZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTohMSxmaWx0ZXJzOnZv'@;
put 'aWQgMCxmaXhlZENvbHVtbnNMZWZ0OjAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NCb3R0b206MCxmaXhlZFJvd3NUb3A6MCxmb3JtdWxhczp2b2lkIDAsZnJhZ21lbnRTZWxlY3Rpb246ITEsaGVhZGVyQ2xhc3NOYW1lOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGhpZGRlbkNvbHVtbnM6'@;
put 'dm9pZCAwLGhpZGRlblJvd3M6dm9pZCAwLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGltZUZhc3RFZGl0OiExLGlzRW1wdHlDb2woYyl7bGV0IGwsYSxkO2ZvcihsPTAsYT10aGlzLmNvdW50Um93cygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwobCxjKSwhMT09'@;
put 'PWpjKGQpKXJldHVybiExO3JldHVybiEwfSxpc0VtcHR5Um93KGMpe2xldCBsLGEsZCxoO2ZvcihsPTAsYT10aGlzLmNvdW50Q29scygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwoYyxsKSwhMT09PWpjKGQpKXJldHVybiJvYmplY3QiPT10eXBlb2YgZCYmKGg9dGhpcy5nZXRD'@;
put 'ZWxsTWV0YShjLGwpLEhPKHRoaXMuZ2V0U2NoZW1hKClbaC5wcm9wXSxkKSk7cmV0dXJuITB9LGxhYmVsOnZvaWQgMCxsYW5ndWFnZToiZW4tVVMiLGxheW91dERpcmVjdGlvbjoiaW5oZXJpdCIsbGljZW5zZUtleTp2b2lkIDAsbG9jYWxlOiJlbi1VUyIsbWFudWFsQ29sdW1uRnJlZXplOnZv'@;
put 'aWQgMCxtYW51YWxDb2x1bW5Nb3ZlOnZvaWQgMCxtYW51YWxDb2x1bW5SZXNpemU6dm9pZCAwLG1hbnVhbFJvd01vdmU6dm9pZCAwLG1hbnVhbFJvd1Jlc2l6ZTp2b2lkIDAsbWF4Q29sczoxLzAsbWF4Um93czoxLzAsbWVyZ2VDZWxsczohMSxtaW5Db2xzOjAsbWluUm93czowLG1pblNwYXJl'@;
put 'Q29sczowLG1pblNwYXJlUm93czowLG11bHRpQ29sdW1uU29ydGluZzp2b2lkIDAsbmF2aWdhYmxlSGVhZGVyczohMSx0YWJOYXZpZ2F0aW9uOiEwLG5lc3RlZEhlYWRlcnM6dm9pZCAwLG5lc3RlZFJvd3M6dm9pZCAwLG5vV29yZFdyYXBDbGFzc05hbWU6Imh0Tm9XcmFwIixudW1lcmljRm9y'@;
put 'bWF0OnZvaWQgMCxvYnNlcnZlRE9NVmlzaWJpbGl0eTohMCxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITAscGVyc2lzdGVudFN0YXRlOnZvaWQgMCxwbGFjZWhvbGRlcjp2b2lkIDAscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJodFBsYWNlaG9sZGVyIixwcmV2ZW50T3ZlcmZsb3c6ITEscHJl'@;
put 'dmVudFdoZWVsOiExLHJlYWRPbmx5OiExLHJlYWRPbmx5Q2VsbENsYXNzTmFtZToiaHREaW1tZWQiLHJlbmRlckFsbFJvd3M6ITEscmVuZGVyQWxsQ29sdW1uczohMSxyZW5kZXJlcjp2b2lkIDAscm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAwLHJvd0hlaWdodHM6dm9p'@;
put 'ZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZhbmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6'@;
put 'Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRleHRFbGxpcHNpczohMSx0aGVtZU5hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAsdHJpbVdoaXRlc3BhY2U6ITAsdHlw'@;
put 'ZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86ITAsdmFsaWRhdG9yOnZvaWQgMCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOjAs'@;
put 'dmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6MCx2aXNpYmxlUm93czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtmdW5jdGlvbiBwcGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGRydChjKXt2YXIgbD1mdW5jdGlvbiBocnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8'@;
put 'fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg'@;
put 'cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp'@;
put 'Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHBydHtjb25zdHJ1Y3RvcihsKXtwcGUodGhpcywibWV0YUN0b3IiLGNsYXNze30pLHBwZSh0aGlzLCJtZXRhIix2b2lkIDApLHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSx3dSh0aGlzLm1ldGEsZnBlKCkp'@;
put 'LHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25zdHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7d3UodGhpcy5tZXRhLGwpLFBQKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5'@;
put 'cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9LGwpfX1jbGFzcyB5cnR7Y29uc3RydWN0b3IobCl7IWZ1bmN0aW9uIGdydChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIHZydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu'@;
put 'IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg'@;
put 'dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw'@;
put 'LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm1ldGEiLHZvaWQgMCk7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe3d1KHRoaXMubWV0YSxsKSxQUCh0aGlzLm1ldGEsbCxs'@;
put 'KX19ZnVuY3Rpb24gVlAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGJydChjKXt2YXIgbD1mdW5jdGlvbiBfcnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs'@;
put 'fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl'@;
put 'dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEJQe2NvbnN0cnVjdG9yKGwpe1ZQKHRoaXMsInZhbHVl'@;
put 'RmFjdG9yeSIsdm9pZCAwKSxWUCh0aGlzLCJkYXRhIixbXSksVlAodGhpcywiaW5kZXgiLFtdKSxWUCh0aGlzLCJob2xlcyIsbmV3IFNldCksdGhpcy52YWx1ZUZhY3Rvcnk9bH1vYnRhaW4obCl7SFAoKCk9PkZQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9'@;
put 'dGhpcy5fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCk7bGV0IGQ7aWYoYT49MClkPXRoaXMuZGF0YVthXSx2b2lkIDA9PT1kJiYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmRhdGFbYV09ZCk7ZWxzZSBpZihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuaG9sZXMuc2l6ZT4wKXtjb25z'@;
put 'dCBoPXRoaXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO3RoaXMuaG9sZXMuZGVsZXRlKGgpLHRoaXMuZGF0YVtoXT1kLHRoaXMuaW5kZXhbbF09aH1lbHNlIHRoaXMuZGF0YS5wdXNoKGQpLHRoaXMuaW5kZXhbbF09dGhpcy5kYXRhLmxlbmd0aC0xO3JldHVybiBkfWluc2VydChsKXts'@;
put 'ZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtIUCgoKT0+RlAobCl8fE5QKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9W10saD10aGlzLmRhdGEu'@;
put 'bGVuZ3RoO2ZvcihsZXQgdj0wO3Y8YTt2KyspZC5wdXNoKGgrdiksdGhpcy5kYXRhLnB1c2godm9pZCAwKTtjb25zdCBmPU5QKGwpP3RoaXMuaW5kZXgubGVuZ3RoOmw7dGhpcy5pbmRleD1bLi4udGhpcy5pbmRleC5zbGljZSgwLGYpLC4uLmQsLi4udGhpcy5pbmRleC5zbGljZShmKV19cmVt'@;
put 'b3ZlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO0hQKCgpPT5GUChsKXx8TlAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD10aGlzLmlu'@;
put 'ZGV4LnNwbGljZShOUChsKT90aGlzLmluZGV4Lmxlbmd0aC1hOmwsYSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTsibnVtYmVyIj09dHlwZW9mIGYmJnRoaXMuaG9sZXMuYWRkKGYpfX1zaXplKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5z'@;
put 'aXplfXZhbHVlcygpe3JldHVybiB0aGlzLmRhdGEuZmlsdGVyKChsLGEpPT52b2lkIDAhPT1sJiYhdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMu'@;
put 'X2dldEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmdm9pZCAwIT09dGhpcy5kYXRhW2RdJiZsLnB1c2goW2gsdGhpcy5kYXRhW2RdXSl9bGV0IGE9MDtyZXR1cm57bmV4dDooKT0+e2lmKGE8bC5sZW5ndGgpe2NvbnN0IGQ9bFthXTtyZXR1cm4gYSs9MSx7dmFsdWU6ZCxkb25lOiExfX1y'@;
put 'ZXR1cm57ZG9uZTohMH19fX1jbGVhcigpe3RoaXMuZGF0YT1bXSx0aGlzLmluZGV4PVtdLHRoaXMuaG9sZXMuY2xlYXIoKX1fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCl7cmV0dXJuIHRoaXMuaW5kZXgubGVuZ3RoPmw/dGhpcy5pbmRleFtsXTotMX1fZ2V0S2V5QnlTdG9yYWdlSW5kZXgobCl7'@;
put 'cmV0dXJuIHRoaXMuaW5kZXguaW5kZXhPZihsKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX19ZnVuY3Rpb24gZ3BlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3cnQoYyl7dmFyIGw9ZnVuY3Rpb24gQ3J0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwh'@;
put 'YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy'@;
put 'aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1'@;
put 'cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBTcnQ9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBNcnR7Y29uc3RydWN0b3IobCl7Z3BlKHRoaXMsImdsb2JhbE1ldGEiLHZvaWQgMCksZ3BlKHRoaXMsIm1ldGFzIixuZXcgQlAoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSkpLHRo'@;
put 'aXMuZ2xvYmFsTWV0YT1sLHRoaXMubWV0YXM9bmV3IEJQKCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpfXVwZGF0ZU1ldGEobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWV0YShsKTt3dShkLGEpLFBQKGQsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1yZW1vdmVDb2x1'@;
put 'bW4obCxhKXt0aGlzLm1ldGFzLnJlbW92ZShsLGEpfWdldE1ldGEobCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKGwpfWdldE1ldGFDb25zdHJ1Y3RvcihsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCkuY29uc3RydWN0b3J9Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1f'@;
put 'Y3JlYXRlTWV0YSgpe3JldHVybiBmdW5jdGlvbiB1cnQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2Z1bmN0aW9uIGEoKXt9VTJlKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtk'@;
put 'XV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksU3J0KS5wcm90b3R5cGV9fWZ1bmN0aW9uIG1wZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geHJ0KGMpe3ZhciBsPWZ1bmN0aW9uIEVydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8'@;
put 'IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw'@;
put 'cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln'@;
put 'dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVHJ0e2NvbnN0cnVjdG9yKGwpe21wZSh0aGlzLCJjb2x1bW5NZXRhIix2b2lkIDApLG1wZSh0aGlzLCJtZXRhcyIsbmV3IEJQKCgpPT50aGlzLl9jcmVhdGVSb3coKSkpLHRoaXMuY29sdW1uTWV0YT1sfXVwZGF0ZU1ldGEo'@;
put 'bCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7d3UoaCxkKSxQUChoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5z'@;
put 'ZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0'@;
put 'YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2YXIgZjtjb25zdCB2PXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtudWxsPT09KGY9di5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09'@;
put 'Znx8Zi5kZWxldGUoZCksdltkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBsPVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylI'@;
put 'YShhW2RdKSYmbC5wdXNoKC4uLmFbZF0udmFsdWVzKCkpO3JldHVybiBsfWdldE1ldGFzQXRSb3cobCl7SFAoKCk9PkZQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gYS5oYXMobCk/QXJyYXkuZnJvbShhLmdl'@;
put 'dChsKS52YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0dXJuIG5ldyBCUChsPT50aGlzLl9jcmVhdGVNZXRhKGwpKX1fY3JlYXRlTWV0YShsKXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IobCkp'@;
put 'fX1jbGFzcyB2cGV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PWwsdGhp'@;
put 'cy5nbG9iYWxNZXRhPW5ldyBwcnQobCksdGhpcy50YWJsZU1ldGE9bmV3IHlydCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1uZXcgTXJ0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgVHJ0KHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGg9Pm5ldyBoKHRo'@;
put 'aXMpKSx0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShhKX1nZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhKCl9dXBkYXRlR2xvYmFsTWV0YShsKXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShsKX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJs'@;
put 'ZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShsKXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKGwpfWdldENvbHVtbk1ldGEobCl7cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKGwpfXVwZGF0ZUNvbHVtbk1ldGEobCxhKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YShs'@;
put 'LGEpfWdldENlbGxNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBoLnZpc3VhbFJvdz1kLnZpc3VhbFJvdyxoLnZpc3VhbENvbD1kLnZpc3VhbENvbHVtbixoLnJvdz1sLGguY29sPWEsZC5za2lwTWV0YUV4dGVuc2lvbnx8dGhpcy5ydW5Mb2Nh'@;
put 'bEhvb2tzKCJhZnRlckdldENlbGxNZXRhIixoKSxofWdldENlbGxNZXRhS2V5VmFsdWUobCxhLGQpe2lmKCJzdHJpbmciIT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIHRoaXMuY2VsbE1l'@;
put 'dGEuZ2V0TWV0YShsLGEsZCl9c2V0Q2VsbE1ldGEobCxhLGQsaCl7dGhpcy5jZWxsTWV0YS5zZXRNZXRhKGwsYSxkLGgpfXVwZGF0ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnVwZGF0ZU1ldGEobCxhLGQpfXJlbW92ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnJlbW92'@;
put 'ZU1ldGEobCxhLGQpfWdldENlbGxzTWV0YSgpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzKCl9Z2V0Q2VsbHNNZXRhQXRSb3cobCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXNBdFJvdyhsKX1jcmVhdGVSb3cobCl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3cobCxhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9cmVtb3ZlUm93KGwpe3RoaXMuY2VsbE1ldGEucmVtb3ZlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfWNyZWF0ZUNvbHVtbihsKXts'@;
put 'ZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLmNyZWF0ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4obCxhKX1yZW1vdmVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5yZW1vdmVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEucmVtb3ZlQ29sdW1uKGwsYSl9Y2xlYXJDZWxsc0NhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCl9Y2xlYXJDYWNoZSgp'@;
put 'e3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpLHRoaXMuY29sdW1uTWV0YS5jbGVhckNhY2hlKCl9fWZ1bmN0aW9uIHlwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIGtydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh'@;
put 'YmxlOiEwfSk6Y1tsXT1hLGN9eGwodnBlLHkxKTtjbGFzcyBEcnR7Y29uc3RydWN0b3IobCl7dmFyIGE9dGhpczt5cGUodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCkseXBlKHRoaXMsIm1ldGFTeW5jTWVtbyIsbmV3IE1hcCksdGhpcy5tZXRhTWFuYWdlcj1sLGwuYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe3JldHVybiBhLmV4dGVuZENlbGxNZXRhKC4uLmFyZ3VtZW50cyl9KSxNYS5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVJlbmRlciIsZD0+e2QmJnRoaXMubWV0YVN5bmNNZW1vLmNsZWFyKCl9LHRoaXMubWV0YU1hbmFnZXIuaG90KX1leHRl'@;
put 'bmRDZWxsTWV0YShsKXt2YXIgYTtjb25zdHtyb3c6ZCxjb2w6aH09bDtpZihudWxsIT09KGE9dGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpKSYmdm9pZCAwIT09YSYmYS5oYXMoaCkpcmV0dXJuO2NvbnN0e3Zpc3VhbFJvdzpmLHZpc3VhbENvbDp2fT1sLE09dGhpcy5tZXRhTWFuYWdlci5ob3Qs'@;
put 'ST1NLmNvbFRvUHJvcCh2KTtsLnByb3A9SSxNLnJ1bkhvb2tzKCJiZWZvcmVHZXRDZWxsTWV0YSIsZix2LGwpO2NvbnN0IEc9Q3UobCwidHlwZSIpP2wudHlwZTpudWxsO2xldCByZT1mbChsLmNlbGxzKT9sLmNlbGxzKGQsaCxJKTpudWxsO2lmKEcpaWYocmUpe3ZhciB1ZTtyZS50eXBlPW51'@;
put 'bGwhPT0odWU9cmUudHlwZSkmJnZvaWQgMCE9PXVlP3VlOkd9ZWxzZSByZT17dHlwZTpHfTtyZSYmdGhpcy5tZXRhTWFuYWdlci51cGRhdGVDZWxsTWV0YShkLGgscmUpLE0ucnVuSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGYsdixsKSx0aGlzLm1ldGFTeW5jTWVtby5oYXMoZCl8fHRoaXMu'@;
put 'bWV0YVN5bmNNZW1vLnNldChkLG5ldyBTZXQpLHRoaXMubWV0YVN5bmNNZW1vLmdldChkKS5hZGQoaCl9fWZ1bmN0aW9uIEVxKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBMcnQoYyl7dmFyIGw9ZnVuY3Rpb24gT3J0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2'@;
put 'YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1'@;
put 'ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp'@;
put 'dGFibGU6ITB9KTpjW2xdPWEsY312YXIgYnBlPW5ldyBXZWFrTWFwO2NsYXNzIEhydHtjb25zdHJ1Y3RvcihsKXtFcSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSxFcSh0aGlzLCJ1c2FnZVRyYWNrZXIiLG5ldyBTZXQpLEVxKHRoaXMsInByb3BEZXNjcmlwdG9ycyIsbmV3IE1hcChbWyJh'@;
put 'cmlhVGFncyIse2luaXRPbmx5OiEwfV0sWyJmaXhlZENvbHVtbnNMZWZ0Iix7dGFyZ2V0OiJmaXhlZENvbHVtbnNTdGFydCIsb25DaGFuZ2UoYSl7aWYodGhpcy5tZXRhTWFuYWdlci5ob3QuaXNSdGwoKSYmImZpeGVkQ29sdW1uc0xlZnQiPT09YSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4'@;
put 'ZWRDb2x1bW5zTGVmdGAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpO2lmKHRoaXMudXNhZ2VUcmFja2VyLmhhcygiZml4ZWRDb2x1bW5zTGVmdCIpJiZ0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc1N0'@;
put 'YXJ0IikpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGFuZCBgZml4ZWRDb2x1bW5zU3RhcnRgIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKX19XSxbImxheW91dERpcmVj'@;
put 'dGlvbiIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxDb2x1bW5zIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbFJvd3MiLHtpbml0T25seTohMH1dXSkpLGZ1bmN0aW9uIElydChjLGwsYSl7KGZ1bmN0aW9uIFJydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh'@;
put 'bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsYnBlLChhLGQsaCk9PntpZighaCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBcYCR7YX1cYCBvcHRpb24gY2FuIG5vdCBiZSB1cGRhdGVkIGFm'@;
put 'dGVyIHRoZSBIYW5kc29udGFibGUgaXMgaW5pdGlhbGl6ZWQuYCl9KSx0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5leHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlzLnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7aW5pdE9ubHk6ZCx0YXJnZXQ6aCxv'@;
put 'bkNoYW5nZTpmfT1sLHY9InN0cmluZyI9PXR5cGVvZiBoLE09dj9oOmEsST1gXyR7TX1gO3RoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW0ldPXRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW01dLGY/KHRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGEsSSxmKSx2JiZ0aGlz'@;
put 'Lmluc3RhbGxQcm9wV2F0Y2hlcihoLEksZikpOmQmJih0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEksZnVuY3Rpb24gUHJ0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIEZydChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50'@;
put 'cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShicGUsdGhpcykpLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzfHwodGhpcy5tZXRh'@;
put 'TWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3M9W10pLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzLnB1c2goYSkpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3Qgdj0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsdiksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNv'@;
put 'bmZpZ3VyYWJsZTohMH0pfX1jb25zdCBfcGU9L14oXHJcbnxcblxyfFxyfFxuKS8sTnJ0PS9eW15cdFxyXG5dKy8sd3BlPS9eXHQvO2Z1bmN0aW9uIHJUKGMpe2xldCBsLGEsZCxoLHYsZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7'@;
put 'ZCs9MSlkPjAmJihmKz0iXHQiKSx2PWNbbF1bZF0sInN0cmluZyI9PXR5cGVvZiB2P3YuaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7di5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9djpmKz1udWxsPT12PyIiOnY7bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWZ1bmN0aW9uIG45KGMsbCxh'@;
put 'KXtyZXR1cm4obD1mdW5jdGlvbiBCcnQoYyl7dmFyIGw9ZnVuY3Rpb24ganJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m'@;
put 'IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBUX3tzdGF0aWMgZ2V0IERFU1RJTkFUSU9OX1JFTkRFUkVSKCl7cmV0dXJuIDF9c3RhdGlj'@;
put 'IGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCl7cmV0dXJuIDJ9Y29uc3RydWN0b3IobCxhLGQpe245KHRoaXMsImhvdCIsdm9pZCAwKSxuOSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSxuOSh0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCksbjkodGhpcywiZGF0YVNvdXJj'@;
put 'ZSIsdm9pZCAwKSxuOSh0aGlzLCJkdWNrU2NoZW1hIix2b2lkIDApLG45KHRoaXMsImNvbFRvUHJvcENhY2hlIix2b2lkIDApLG45KHRoaXMsInByb3BUb0NvbENhY2hlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5tZXRhTWFuYWdlcj1kLHRoaXMudGFibGVNZXRhPWQuZ2V0VGFibGVNZXRh'@;
put 'KCksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHRoaXMuY3JlYXRlTWFwKCl9Y3JlYXRlTWFwKCl7Y29uc3QgbD10aGlzLmdldFNjaGVtYSgpO2lmKHR5cGVvZiBsPiJ1Iil0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBjcmVhdGUgYGNvbHVtbnNgIGRlZmlu'@;
put 'aXRpb24gYnV0IHlvdSBkaWRuJ3QgcHJvdmlkZSBgc2NoZW1hYCBub3IgYGRhdGFgIik7Y29uc3QgYT10aGlzLnRhYmxlTWV0YS5jb2x1bW5zO2xldCBkO2lmKHRoaXMuY29sVG9Qcm9wQ2FjaGU9W10sdGhpcy5wcm9wVG9Db2xDYWNoZT1uZXcgTWFwLGEpe2xldCBoPTAsZj0wLHY9ITE7aWYo'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGEpe2NvbnN0IE09Vk8obCk7aD1NPjA/TTp0aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCksdj0hMH1lbHNlIGg9TWF0aC5taW4odGhpcy50YWJsZU1ldGEubWF4Q29scyxhLmxlbmd0aCk7Zm9yKGQ9MDtkPGg7ZCsrKXtjb25zdCBNPXY/YShkKTphW2RdO2lmKFhz'@;
put 'KE0pKXtpZih0eXBlb2YgTS5kYXRhPCJ1Iil7Y29uc3QgST12P2Y6ZDt0aGlzLmNvbFRvUHJvcENhY2hlW0ldPU0uZGF0YSx0aGlzLnByb3BUb0NvbENhY2hlLnNldChNLmRhdGEsSSl9Zis9MX19fWVsc2UgdGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhsKX1jb3VudEZpcnN0Um93S2V5cygp'@;
put 'e3JldHVybiBGSyh0aGlzLmRhdGFTb3VyY2UpfXJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwsYSxkKXtsZXQgdixoPWEsZj1kO3JldHVybiB0eXBlb2YgaD4idSImJihoPTAsZj0iIiksIm9iamVjdCI9PXR5cGVvZiBsJiYhQXJyYXkuaXNBcnJheShsKSYmcXMobCwoTSxJKT0+e251bGw9PT1NPyh2'@;
put 'PWYrSSx0aGlzLmNvbFRvUHJvcENhY2hlLnB1c2godiksdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQodixoKSxoKz0xKTpoPXRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMoTSxoLGAke0l9LmApfSksaH1jb2xUb1Byb3AobCl7aWYoITE9PT1OdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsO2Nv'@;
put 'bnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJvcENhY2hlJiZIYSh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90aGlzLmNvbFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNo'@;
put 'ZS5nZXQobCk7aWYoSGEoYSkpcmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1kP2w6ZH1nZXRTY2hlbWEoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE7cmV0dXJuIGw/ImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIGw/bCgpOmw6dGhpcy5kdWNrU2NoZW1hfWNyZWF0ZUR1Y2tTY2hlbWEoKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlJiZ0aGlzLmRhdGFTb3VyY2VbMF0/cl8odGhpcy5kYXRhU291cmNlWzBdKTp7fX1yZWZyZXNoRHVja1NjaGVtYSgpe3RoaXMuZHVja1NjaGVtYT10'@;
put 'aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKX1jcmVhdGVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0iYWJvdmUifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1sy'@;
put 'XT9hcmd1bWVudHNbMl06e307Y29uc3QgZj10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsZXQgdj1mLE09MCxJPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgSXx8ST49ZikmJihJPWYpLEk8dGhpcy5ob3QuY291bnRSb3dzKCkmJih2PXRoaXMuaG90LnRvUGh5c2ljYWxSb3coSSkpLCExPT09'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsSSxhLGQpfHxudWxsPT09dilyZXR1cm57ZGVsdGE6MH07Y29uc3QgcmU9dGhpcy50YWJsZU1ldGEubWF4Um93cyx1ZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCx5ZT1bXTtmb3IoO008YSYmZitNPHJlOyl7bGV0IEJlPW51bGw7'@;
put 'ImFycmF5Ij09PXRoaXMuaG90LmRhdGFUeXBlP3RoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE/QmU9cDEodGhpcy5nZXRTY2hlbWEoKSk6KEJlPVtdLEthKHVlLTEsKCk9PkJlLnB1c2gobnVsbCkpKToiZnVuY3Rpb24iPT09dGhpcy5ob3QuZGF0YVR5cGU/QmU9dGhpcy50YWJsZU1ldGEuZGF0'@;
put 'YVNjaGVtYShJK00pOihCZT17fSx3RShCZSx0aGlzLmdldFNjaGVtYSgpKSkseWUucHVzaChCZSksTSs9MX10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKEksTSksImJlbG93Ij09PWgmJih2PU1hdGgubWluKHYrMSxmKSksdGhpcy5zcGxpY2VEYXRhKHYsMCx5ZSk7Y29u'@;
put 'c3QgRWU9dGhpcy5ob3QudG9WaXN1YWxSb3codik7cmV0dXJuIHRoaXMuaG90LmNvdW50U291cmNlUm93cygpPT09eWUubGVuZ3RoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5ob3QuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLE0+MCYmKG51bGw9PWw/'@;
put 'dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3cobnVsbCxNKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyh2LGEpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLEVlLE0sZCkse2RlbHRhOk0sc3RhcnRQaHlzaWNhbEluZGV4OnZ9fWNyZWF0ZUNvbChs'@;
put 'KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJzdGFydCJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZighdGhpcy5ob3QuaXND'@;
put 'b2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNvbHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywg'@;
put 'ZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5nLklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJyYXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRoaXMuZGF0YVNvdXJjZSx2PXRoaXMudGFibGVNZXRhLm1heENv'@;
put 'bHMsTT10aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKSxJPXRoaXMuaG90LmNvdW50Q29scygpLEc9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCkscmU9Im51bWJlciI9PXR5cGVvZiBsJiZsPD1NP2w6STtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVDb2wiLHJlLGEs'@;
put 'ZCkpcmV0dXJue2RlbHRhOjB9O2NvbnN0IHVlPXJlPEk/dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihyZSk6TSx5ZT0iZW5kIj09PWg/TWF0aC5taW4odWUrMSxNKTp1ZTtsZXQgRWU9MDtmb3IobGV0IEJlPXllO0VlPGEmJkkrRWU8djtCZSsrKXtpZigibnVtYmVyIiE9dHlwZW9mIHJlfHxy'@;
put 'ZT49SStFZSlpZihHPjApZm9yKGxldCBHZT0wO0dlPEc7R2UrPTEpdHlwZW9mIGZbR2VdPiJ1IiYmKGZbR2VdPVtdKSxmW0dlXS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNoKFtudWxsXSk7ZWxzZSBmb3IobGV0IEdlPTA7R2U8RztHZSsrKWZbR2VdLnNwbGljZShCZSwwLG51bGwpO0VlKz0xfXJl'@;
put 'dHVybiBFZT4wJiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbihudWxsLEVlKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbih5ZSxhKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhyZSxFZSxoKSx0aGlzLmhv'@;
put 'dC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVDb2wiLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHllKSxFZSxkKSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCkse2RlbHRhOkVlLHN0YXJ0UGh5c2ljYWxJbmRleDp5ZX19cmVtb3ZlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsaD1OdW1iZXIuaXNJbnRlZ2VyKGwpP2w6LWE7Y29uc3QgZj10aGlzLnZpc3VhbFJvd3NUb1BoeXNpY2FsKGgsYSksdj10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3Mo'@;
put 'KTtpZihoPSh2K2gpJXYsITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixoLGYubGVuZ3RoLGYsZCkpcmV0dXJuITE7Y29uc3QgST1mLmxlbmd0aDtpZih0aGlzLmZpbHRlckRhdGEoaCxJLGYpLGg8dGhpcy5ob3QuY291bnRSb3dzKCkpe3RoaXMuaG90LnJvd0luZGV4'@;
put 'TWFwcGVyLnJlbW92ZUluZGV4ZXMoZik7Y29uc3QgcmU9SGEodGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fEhhKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpfHx0aGlzLnRhYmxlTWV0YS5jb2xIZWFkZXJzOzA9PT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhl'@;
put 'c0xlbmd0aCgpJiYhcmUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSl9cmV0dXJuIGYuc2xpY2UoMCkuc29ydCgocmUsdWUpPT51ZS1yZSkuZm9yRWFjaChyZT0+e3RoaXMubWV0YU1hbmFnZXIucmVtb3ZlUm93KHJlLDEpfSksdGhpcy5ob3QucnVu'@;
put 'SG9va3MoImFmdGVyUmVtb3ZlUm93IixoLEksZixkKSwhMH1yZW1vdmVDb2wobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigib2JqZWN0Ij09'@;
put 'PXRoaXMuaG90LmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ugb3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7bGV0IGg9Im51bWJlciIhPXR5cGVvZiBsPy1hOmw7'@;
put 'aD0odGhpcy5ob3QuY291bnRDb2xzKCkraCkldGhpcy5ob3QuY291bnRDb2xzKCk7Y29uc3QgZj10aGlzLnZpc3VhbENvbHVtbnNUb1BoeXNpY2FsKGgsYSksdj1mLnNsaWNlKDApLnNvcnQoKHVlLHllKT0+eWUtdWUpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZUNv'@;
put 'bCIsaCxhLGYsZCkpcmV0dXJuITE7bGV0IEk9ITA7Y29uc3QgRz12Lmxlbmd0aCxyZT10aGlzLmRhdGFTb3VyY2U7Zm9yKGxldCB1ZT0wO3VlPEc7dWUrKylJJiZmWzBdIT09Zlt1ZV0tdWUmJihJPSExKTtpZihJKWZvcihsZXQgdWU9MCx5ZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTt1'@;
put 'ZTx5ZTt1ZSsrKXJlW3VlXS5zcGxpY2UoZlswXSxhKSwwPT09dWUmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKGZbMF0sYSk7ZWxzZSBmb3IobGV0IHVlPTAseWU9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7dWU8eWU7dWUrKylmb3IobGV0IEVlPTA7RWU8RztFZSsrKXJlW3Vl'@;
put 'XS5zcGxpY2UodltFZV0sMSksMD09PXVlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbih2W0VlXSwxKTtyZXR1cm4gaDx0aGlzLmhvdC5jb3VudENvbHMoKSYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZiksIXRoaXMudGFibGVNZXRhLnJvd0hlYWRl'@;
put 'cnMmJjA9PT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDb2wiLGgsYSxmLGQpLHRoaXMucmVm'@;
put 'cmVzaER1Y2tTY2hlbWEoKSwhMH1zcGxpY2VDb2wobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGljZShhLGErZCksdj1oLnNsaWNlKGErZCk7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsST1uZXcgQXJyYXkoTT4zP00tMzowKSxHPTM7RzxNO0crKylJ'@;
put 'W0ctM109YXJndW1lbnRzW0ddO2QkKEksdik7bGV0IHJlPTA7Zm9yKDtyZTxkOylJLnB1c2gobnVsbCkscmUrPTE7cmV0dXJuIE0yZShJKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShhLGwsSSxudWxsLG51bGwsInNwbGljZUNvbCIpLGZ9c3BsaWNlUm93KGwsYSxkKXtjb25zdCBoPXRo'@;
put 'aXMuaG90LmdldFNvdXJjZURhdGFBdFJvdyhsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEk9bmV3IEFycmF5KE0+Mz9NLTM6MCksRz0zO0c8TTtHKyspSVtHLTNdPWFyZ3VtZW50c1tHXTtkJChJLHYpO2xldCByZT0wO2Zvcig7'@;
put 'cmU8ZDspSS5wdXNoKG51bGwpLHJlKz0xO3JldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShsLGEsW0ldLG51bGwsbnVsbCwic3BsaWNlUm93IiksZn1zcGxpY2VEYXRhKGwsYSxkKXtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEYXRhU3BsaWNlIixsLGEsZCkpe2Nv'@;
put 'bnN0IGY9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsZi5mb3JFYWNoKHY9PnRoaXMuZGF0YVNvdXJjZS5wdXNoKHYpKX19ZmlsdGVyRGF0YShsLGEsZCl7bGV0IGg9dGhpcy5o'@;
put 'b3QucnVuSG9va3MoImZpbHRlckRhdGEiLGwsYSxkKTshMT09PUFycmF5LmlzQXJyYXkoaCkmJihoPXRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGYsdik9Pi0xPT09ZC5pbmRleE9mKHYpKSksdGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMu'@;
put 'ZGF0YVNvdXJjZSxoKX1nZXQobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCk7bGV0IGg9dGhpcy5kYXRhU291cmNlW2RdO2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2NvbnN0e2RhdGFEb3ROb3RhdGlvbjp2'@;
put 'fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGw7aWYoaCYmaC5oYXNPd25Qcm9wZXJ0eSYmQ3UoaCxhKSlNPWhbYV07ZWxzZSBpZih2JiYic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtsZXQgST1oO2lmKCFJKXJldHVybiBudWxsO2NvbnN0IEc9YS5zcGxp'@;
put 'dCgiLiIpO2ZvcihsZXQgcmU9MCx1ZT1HLmxlbmd0aDtyZTx1ZTtyZSsrKWlmKEk9SVtHW3JlXV0sdHlwZW9mIEk+InUiKXJldHVybiBudWxsO009SX1lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGEmJihNPWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaG90Lmhh'@;
put 'c0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgST1GZChNKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsbCx0aGlzLnByb3BUb0NvbChhKSxJLCJnZXQiKSxJLmlzVG91Y2hlZCgpJiYoTT1JLnZhbHVlKX1yZXR1cm4gTX1nZXRDb3B5YWJsZShsLGEpe3JldHVybiB0aGlzLmhvdC5n'@;
put 'ZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpO2xldCBmPWQsdj10aGlzLmRhdGFTb3VyY2VbaF07Y29uc3QgTT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5'@;
put 'Um93RGF0YSIsaCk7aWYodj1pc05hTihNKT9NOnYsdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBHPUZkKGYpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixsLHRoaXMucHJvcFRvQ29sKGEpLEcsInNldCIpLEcuaXNUb3VjaGVkKCkmJihmPUcudmFsdWUpfWNv'@;
put 'bnN0e2RhdGFEb3ROb3RhdGlvbjpJfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2lmKHYmJnYuaGFzT3duUHJvcGVydHkmJkN1KHYsYSkpdlthXT1mO2Vsc2UgaWYoSSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IHVlLEc9dixyZT0wO2NvbnN0IHllPWEuc3Bs'@;
put 'aXQoIi4iKTtmb3IocmU9MCx1ZT15ZS5sZW5ndGgtMTtyZTx1ZTtyZSsrKXtpZigiX19wcm90b19fIj09PXllW3JlXXx8ImNvbnN0cnVjdG9yIj09PXllW3JlXXx8InByb3RvdHlwZSI9PT15ZVtyZV0pcmV0dXJuO3R5cGVvZiBHW3llW3JlXV0+InUiJiYoR1t5ZVtyZV1dPXt9KSxHPUdbeWVb'@;
put 'cmVdXX1HW3llW3JlXV09Zn1lbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGgsaCsxKVswXSxmKTtlbHNle2lmKCJfX3Byb3RvX18iPT09YXx8ImNvbnN0cnVjdG9yIj09PWF8fCJwcm90b3R5cGUiPT09YSlyZXR1cm47dlthXT1mfX12aXN1YWxS'@;
put 'b3dzVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCksaD1bXTtsZXQgTSxmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2OylNPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKE0pLHYtPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9Q'@;
put 'aHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCksaD1bXTtsZXQgZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspe2NvbnN0IE09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKTtoLnB1c2goTSksdi09MSxmKz0xfXJldHVybiBofWNsZWFyKCl7Zm9yKGxldCBsPTA7'@;
put 'bDx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmhvdC5jb3VudENvbHMoKTthKyspdGhpcy5zZXQobCx0aGlzLmNvbFRvUHJvcChhKSwiIil9Z2V0TGVuZ3RoKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzO2xldCBhO2E9bDwwfHwwPT09'@;
put 'bD8wOmx8fDEvMDtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKGQsYSl9Z2V0QWxsKCl7Y29uc3QgbD17cm93OjAsY29sOjB9LGE9e3JvdzpNYXRoLm1heCh0aGlzLmhvdC5jb3VudFJvd3MoKS0xLDAp'@;
put 'LGNvbDpNYXRoLm1heCh0aGlzLmhvdC5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gbC5yb3ctYS5yb3chPTB8fHRoaXMuaG90LmNvdW50U291cmNlUm93cygpP3RoaXMuZ2V0UmFuZ2UobCxhLFRfLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTpbXX1jb3VudENhY2hlZENvbHVtbnMoKXtyZXR1cm4g'@;
put 'dGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGh9Z2V0UmFuZ2UobCxhLGQpe2NvbnN0IGg9W107bGV0IGYsdixNO2NvbnN0IEk9dGhpcy50YWJsZU1ldGEubWF4Um93cyxHPXRoaXMudGFibGVNZXRhLm1heENvbHM7aWYoMD09PUl8fDA9PT1HKXJldHVybltdO2NvbnN0IHJlPWQ9PT1UXy5ERVNU'@;
put 'SU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMuZ2V0Q29weWFibGU6dGhpcy5nZXQsdWU9TWF0aC5taW4oTWF0aC5tYXgoSS0xLDApLE1hdGgubWF4KGwucm93LGEucm93KSkseWU9TWF0aC5taW4oTWF0aC5tYXgoRy0xLDApLE1hdGgubWF4KGwuY29sLGEuY29sKSk7Zm9yKGY9TWF0'@;
put 'aC5taW4obC5yb3csYS5yb3cpO2Y8PXVlO2YrKyl7TT1bXTtjb25zdCBFZT1mPj0wP3RoaXMuaG90LnRvUGh5c2ljYWxSb3coZik6Zjtmb3Iodj1NYXRoLm1pbihsLmNvbCxhLmNvbCk7djw9eWUmJm51bGwhPT1FZTt2KyspTS5wdXNoKHJlLmNhbGwodGhpcyxmLHRoaXMuY29sVG9Qcm9wKHYp'@;
put 'KSk7bnVsbCE9PUVlJiZoLnB1c2goTSl9cmV0dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiByVCh0aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiByVCh0aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9D'@;
put 'TElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJveSgpe3RoaXMuaG90PW51bGwsdGhpcy5tZXRhTWFuYWdlcj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVja1NjaGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9wVG9Db2xDYWNoZS5jbGVhcigp'@;
put 'LHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9pZCAwfX1jb25zdCB6cnQ9VF87ZnVuY3Rpb24gQ3BlKGMsbCxhLGQpe2NvbnN0e2hvdEluc3RhbmNlOmgsZGF0YU1hcDpmLGRhdGFTb3VyY2U6dixpbnRlcm5hbFNvdXJjZTpNLHNvdXJjZTpJLG1ldGFNYW5hZ2VyOkcsZmlyc3RSdW46cmV9PWQsdWU9'@;
put 'ZjEoTSkseWU9aC5nZXRTZXR0aW5ncygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheSh5ZS5kYXRhU2NoZW1hKT8iYXJyYXkiOmZsKHllLmRhdGFTY2hlbWEpPyJmdW5jdGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke3VlfWAsYyxyZSxJKTtjb25z'@;
put 'dCBFZT1uZXcgenJ0KGgsYyxHKTtpZihsKEVlKSwib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jKWMucHVzaCYmYy5zcGxpY2V8fChjPVtjXSk7ZWxzZXtpZihudWxsIT09Yyl0aHJvdyBuZXcgRXJyb3IoYCR7TX0gb25seSBhY2NlcHRzIGFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXkgb2Yg'@;
put 'YXJyYXlzICgke3R5cGVvZiBjfSBnaXZlbilgKTt7Y29uc3QgQmU9RWUuZ2V0U2NoZW1hKCk7Yz1bXTtsZXQgR2Usc3Q9MCxwdD0wO2ZvcihzdD0wLHB0PXllLnN0YXJ0Um93cztzdDxwdDtzdCsrKWlmKCJvYmplY3QiIT09aC5kYXRhVHlwZSYmImZ1bmN0aW9uIiE9PWguZGF0YVR5cGV8fCF5'@;
put 'ZS5kYXRhU2NoZW1hKWlmKCJhcnJheSI9PT1oLmRhdGFUeXBlKUdlPXAxKEJlWzBdKSxjLnB1c2goR2UpO2Vsc2V7R2U9W107Zm9yKGxldCBkdD0wLHF0PXllLnN0YXJ0Q29scztkdDxxdDtkdCsrKUdlLnB1c2gobnVsbCk7Yy5wdXNoKEdlKX1lbHNlIEdlPXAxKEJlKSxjLnB1c2goR2UpfX1B'@;
put 'cnJheS5pc0FycmF5KGNbMF0pJiYoaC5kYXRhVHlwZT0iYXJyYXkiKSx5ZS5kYXRhPWMsRWUuZGF0YVNvdXJjZT1jLHYuZGF0YT1jLHYuZGF0YVR5cGU9aC5kYXRhVHlwZSx2LmNvbFRvUHJvcD1FZS5jb2xUb1Byb3AuYmluZChFZSksdi5wcm9wVG9Db2w9RWUucHJvcFRvQ29sLmJpbmQoRWUp'@;
put 'LHYuY291bnRDYWNoZWRDb2x1bW5zPUVlLmNvdW50Q2FjaGVkQ29sdW1ucy5iaW5kKEVlKSxhKEVlKSxoLnJ1bkhvb2tzKGBhZnRlciR7dWV9YCxjLHJlLEkpLHJlfHwoaC5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLG51bGwsTSksaC5yZW5kZXIoKSksaC5nZXRTZXR0aW5ncygpLmFyaWFUYWdz'@;
put 'JiZtcyhoLnJvb3RFbGVtZW50LFtOMmUoLTEpLEZPKGguY291bnRDb2xzKCkrKGgudmlldz9oLmNvdW50Um93SGVhZGVycygpOjApKV0pfWZ1bmN0aW9uIEFfKGMpe2twKGMpJiZjLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pfWZ1bmN0aW9uIGpQ'@;
put 'KGMpe2NvbnN0e3NlbGVjdGlvbjpsLHZpZXc6YX09YyxkPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWwuZ2V0U2VsZWN0aW9uU291cmNlKCksZj1hLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCksdj1hLmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSxNPWQuZ2V0VG9wU3RhcnRD'@;
put 'b3JuZXIoKS5jb2wsST1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxHPU08PWYscmU9ST49dix1ZT1hLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCkseWU9YS5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksRWU9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxCZT1kLmdldEJvdHRvbUVuZENv'@;
put 'cm5lcigpLnJvdyxHZT1FZTw9dWUsc3Q9QmU+PXllO3JldHVybntnZXRDb21wdXRlZENvbHVtblRhcmdldDpwdD0+Im1vdXNlIj09PWh8fCJrZXlib2FyZCI9PT1oP3B0LmNvbDpHJiZyZT9kLmhpZ2hsaWdodC5jb2w6Rz9NOnJlP0k6cHQuY29sLGdldENvbXB1dGVkUm93VGFyZ2V0OnB0PT4i'@;
put 'bW91c2UiPT09aHx8ImtleWJvYXJkIj09PWg/cHQucm93OkdlJiZzdD9kLmhpZ2hsaWdodC5yb3c6R2U/RWU6c3Q/QmU6cHQucm93fX1jb25zdCBTcGU9ImdyaWREZWZhdWx0Iix6bT0iZWRpdG9yTWFuYWdlci5oYW5kbGluZ0VkaXRvciI7ZnVuY3Rpb24gTXBlKGMpe2NvbnN0IGE9Yy5yb290'@;
put 'RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gYS50eXBlPSJ0ZXh0IixhLm5hbWU9Il9faHRGb2N1c0NhdGNoZXIiLGEuY2xhc3NMaXN0LmFkZCgiaHRGb2N1c0NhdGNoZXIiKSxjLmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJm1zKGEsW25fKCJGb2N1cyBjYXRjaGVyIild'@;
put 'KSxhfWZ1bmN0aW9uIFRxKGMpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7bmF2aWdhYmxlSGVhZGVyczpkfT1jLmdldFNldHRpbmdzKCk7bGV0IGg9ZCYmYy5jb3VudENvbEhlYWRlcnMoKT4wPy1jLmNvdW50Q29sSGVhZGVycygpOjAsZj1kJiZjLmNv'@;
put 'dW50Um93SGVhZGVycygpPjA/LWMuY291bnRSb3dIZWFkZXJzKCk6MDtyZXR1cm4gMD09PWgmJihoPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSksMD09PWYmJihmPWEuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSksbnVsbD09PWh8fG51bGw9PT1mP251bGw6Yy5f'@;
put 'Y3JlYXRlQ2VsbENvb3JkcyhoLGYpfWZ1bmN0aW9uIEFxKGMpe3ZhciBsLGE7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1jLHtuYXZpZ2FibGVIZWFkZXJzOmZ9PWMuZ2V0U2V0dGluZ3MoKTtsZXQgdj1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCkt'@;
put 'MSxNPWguZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0xO2lmKHY8MCl7aWYoIWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO3Y9LTF9aWYoTTwwKXtpZighZnx8MD09PWMuY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7TT0tMX1yZXR1cm4gYy5fY3JlYXRl'@;
put 'Q2VsbENvb3JkcyhudWxsIT09KGw9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpKSYmdm9pZCAwIT09bD9sOnYsbnVsbCE9PShhPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChNKSkmJnZvaWQgMCE9PWE/YTpNKX1jb25zdCB4cGU9bmV3IE1hcChbWyIgIiwic3BhY2Ui'@;
put 'XSxbInNwYWNlYmFyIiwic3BhY2UiXSxbInNjcm9sbCIsInNjcm9sbGxvY2siXSxbImRlbCIsImRlbGV0ZSJdLFsiZXNjIiwiZXNjYXBlIl0sWyJtZWRpYW5leHR0cmFjayIsIm1lZGlhdHJhY2tuZXh0Il0sWyJtZWRpYXByZXZpb3VzdHJhY2siLCJtZWRpYXRyYWNrcHJldmlvdXMiXSxbInZv'@;
put 'bHVtZXVwIiwiYXVkaW92b2x1bWV1cCJdLFsidm9sdW1lZG93biIsImF1ZGlvdm9sdW1lZG93biJdLFsidm9sdW1lbXV0ZSIsImF1ZGlvdm9sdW1lbXV0ZSJdLFsibXVsdGlwbHkiLCIqIl0sWyJhZGQiLCIrIl0sWyJkaXZpZGUiLCIvIl0sWyJzdWJ0cmFjdCIsIi0iXSxbImxlZnQiLCJhcnJv'@;
put 'd2xlZnQiXSxbInJpZ2h0IiwiYXJyb3dyaWdodCJdLFsidXAiLCJhcnJvd3VwIl0sWyJkb3duIiwiYXJyb3dkb3duIl1dKSx6UD1jPT5jLm1hcChsPT57Y29uc3QgYT1sLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHhwZS5oYXMoYSk/eHBlLmdldChhKTphfSkuc29ydCgpLmpvaW4oIisiKSxFcGU9'@;
put 'bmV3IE1hcChbWzk2LCJudW1wYWQwIl0sWzk3LCJudW1wYWQxIl0sWzk4LCJudW1wYWQyIl0sWzk5LCJudW1wYWQzIl0sWzEwMCwibnVtcGFkNCJdLFsxMDEsIm51bXBhZDUiXSxbMTAyLCJudW1wYWQ2Il0sWzEwMywibnVtcGFkNyJdLFsxMDQsIm51bXBhZDgiXSxbMTA1LCJudW1wYWQ5Il0s'@;
put 'WzEwNiwibXVsdGlwbHkiXSxbMTA3LCJhZGQiXSxbMTA4LCJkZWNpbWFsIl0sWzEwOSwic3VidHJhY3QiXSxbMTEwLCJkZWNpbWFsIl0sWzExMSwiZGl2aWRlIl0sWzExMiwiZjEiXSxbMTEzLCJmMiJdLFsxMTQsImYzIl0sWzExNSwiZjQiXSxbMTE2LCJmNSJdLFsxMTcsImY2Il0sWzExOCwi'@;
put 'ZjciXSxbMTE5LCJmOCJdLFsxMjAsImY5Il0sWzEyMSwiZjEwIl0sWzEyMiwiZjExIl0sWzEyMywiZjEyIl0sWzE4Niwic2VtaWNvbG9uIl0sWzE4NywiZXF1YWwiXSxbMTg4LCJjb21tYSJdLFsxODksIm1pbnVzIl0sWzE5MCwicGVyaW9kIl0sWzE5MSwic2xhc2giXSxbMTkyLCJiYWNrcXVv'@;
put 'dGUiXSxbMjE5LCJicmFja2V0bGVmdCJdLFsyMjAsImJhY2tzbGFzaCJdLFsyMjEsImJyYWNrZXRyaWdodCJdLFsyMjIsInF1b3RlIl1dKSxrcT1jPT57bGV0e3doaWNoOmwsa2V5OmF9PWM7aWYoRXBlLmhhcyhsKSlyZXR1cm4gRXBlLmdldChsKTtjb25zdCBkPVN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUobCkudG9Mb3dlckNhc2UoKTtyZXR1cm4vXlthLXowLTldJC8udGVzdChkKT9kOmEudG9Mb3dlckNhc2UoKX0sVHBlPVN5bWJvbCgic2hvcnRjdXQtY29udGV4dCIpO2Z1bmN0aW9uIEFwZShjKXtyZXR1cm4gWHMoYykmJmMuX19raW5kT2Y9PT1UcGV9Y29uc3Qgcml0PVsibWV0YSIsImFs'@;
put 'dCIsInNoaWZ0IiwiY29udHJvbCJdLGlUPWZ1bmN0aW9uIG5pdCgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5kZWxldGUobCl9LHJlbGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5jLmhhcyhsKX19KCksYVQ9W107bGV0'@;
put 'IFVQPTA7Y29uc3QgYWl0PWM9PntsZXR7b3duZXJXaW5kb3c6bCxoYW5kbGVFdmVudDphLGJlZm9yZUtleURvd246ZCxhZnRlcktleURvd246aH09Yztjb25zdCBmPXJQKHtlcnJvcklkRXhpc3RzOkJlPT5gVGhlICIke0JlfSIgY29udGV4dCBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5g'@;
put 'fSk7bGV0IHY9ImdyaWQiO2NvbnN0IEk9KCk9PnYsRz1CZT0+Zi5nZXRJdGVtKEJlKTtsZXQgdWU9ITE7Y29uc3QgeWU9ZnVuY3Rpb24oQmUsR2Upe2xldCBzdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06SSgpO2NvbnN0IHB0PUFwZShz'@;
put 'dCk/c3Q6RyhzdCk7bGV0IGR0PSExO2lmKCFwdC5oYXNTaG9ydGN1dChHZSkpcmV0dXJuIGR0O2NvbnN0IHF0PXB0LmdldFNob3J0Y3V0cyhHZSk7Zm9yKGxldCBtbj0wO21uPHF0Lmxlbmd0aDttbisrKXtjb25zdHtjYWxsYmFjazp3bixydW5Pbmx5SWY6aG4scHJldmVudERlZmF1bHQ6TW4s'@;
put 'c3RvcFByb3BhZ2F0aW9uOk1yLGNhcHR1cmVDdHJsOmtyLGZvcndhcmRUb0NvbnRleHQ6cW59PXF0W21uXTtpZighMD09PWhuKEJlKSl7aWYodWU9a3IsZHQ9ITE9PT13bihCZSxHZSksdWU9ITEsTW4mJkJlLnByZXZlbnREZWZhdWx0KCksTXImJih6MihCZSksQmUuc3RvcFByb3BhZ2F0aW9u'@;
put 'KCkpLGR0KWJyZWFrO3FuJiZ5ZShCZSxHZSxxbil9fXJldHVybiBkdH0sRWU9ZnVuY3Rpb24gaWl0KGMsbCxhLGQsaCl7Y29uc3QgZj1FZT0+cml0LmluY2x1ZGVzKEVlKSx2PWZ1bmN0aW9uKEVlKXtsZXQgQmU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFy'@;
put 'Z3VtZW50c1sxXTtjb25zdCBHZT1bXTtyZXR1cm4gRWUuYWx0S2V5JiZHZS5wdXNoKCJhbHQiKSxCZSYmKEVlLmN0cmxLZXl8fEVlLm1ldGFLZXkpP0dlLnB1c2goImNvbnRyb2wvbWV0YSIpOihFZS5jdHJsS2V5JiZHZS5wdXNoKCJjb250cm9sIiksRWUubWV0YUtleSYmR2UucHVzaCgibWV0'@;
put 'YSIpKSxFZS5zaGlmdEtleSYmR2UucHVzaCgic2hpZnQiKSxHZX0sTT1FZT0+e2lmKCExPT09bChFZSl8fCExPT09YShFZSl8fDIyOT09PUVlLmtleUNvZGV8fCJzdHJpbmciIT10eXBlb2YgRWUua2V5fHxPbShFZSkpcmV0dXJuO2NvbnN0IEdlPWtxKEVlKTtsZXQgc3Q9W107ZihHZSl8fChz'@;
put 'dD12KEVlKSk7Y29uc3QgcHQ9W0dlXS5jb25jYXQoc3QpOyFoKEVlLHB0KSYmKHpPKCkmJnN0LmluY2x1ZGVzKCJtZXRhIil8fCF6TygpJiZzdC5pbmNsdWRlcygiY29udHJvbCIpKSYmaChFZSxbR2VdLmNvbmNhdCh2KEVlLCEwKSkpLGQoRWUpfSxJPUVlPT57aWYoInN0cmluZyI9PXR5cGVv'@;
put 'ZiBFZS5rZXkpe2NvbnN0IEJlPWtxKEVlKTtmKEJlKSYmaVQucHJlc3MoQmUpfX0sRz1FZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgRWUua2V5KXtjb25zdCBCZT1rcShFZSk7ZihCZSkmJmlULnJlbGVhc2UoQmUpfX0scmU9KCk9PntpVC5yZWxlYXNlQWxsKCl9O3JldHVybnttb3VudDooKT0+'@;
put 'e2xldCBFZT1jO2ZvcihVUCs9MTtFZTspMT09PVVQJiYoRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEkpLGFULnB1c2goe2V2ZW50OiJrZXlkb3duIixsaXN0ZW5lcjpJfSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50'@;
put 'TGlzdGVuZXIoImtleXVwIixHKSxhVC5wdXNoKHtldmVudDoia2V5dXAiLGxpc3RlbmVyOkd9KSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVy'@;
put 'IixyZSksRWU9VjcoRWUpfSx1bm1vdW50OigpPT57bGV0IEVlPWM7Zm9yKFVQLT0xO0VlOyl7aWYoMD09PVVQKXtmb3IobGV0IEJlPTA7QmU8YVQubGVuZ3RoO0JlKyspe2NvbnN0e2V2ZW50OkdlLGxpc3RlbmVyOnN0fT1hVFtCZV07RWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92'@;
put 'ZUV2ZW50TGlzdGVuZXIoR2Usc3QpfWFULmxlbmd0aD0wfUVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIscmUpLEVlPVY3KEVlKX19'@;
put 'LGlzUHJlc3NlZDpFZT0+aVQuaXNQcmVzc2VkKEVlKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PmlULnJlbGVhc2VBbGwoKX19KGwsYSxkLGgseWUpO3JldHVybiBFZS5tb3VudCgpLHthZGRDb250ZXh0OkJlPT57Y29uc3QgR2U9KGM9Pntjb25zdCBsPXJQKHtlcnJvcklkRXhpc3RzOkk9PmBU'@;
put 'aGUgIiR7SX0iIHNob3J0Y3V0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgIiR7Y30iIGNvbnRleHQuYH0pLGE9ZnVuY3Rpb24oKXtsZXR7a2V5czpJLGNhbGxiYWNrOkcsZ3JvdXA6cmUscnVuT25seUlmOnVlPSgoKT0+ITApLGNhcHR1cmVDdHJsOnllPSExLHByZXZlbnREZWZhdWx0'@;
put 'OkVlPSEwLHN0b3BQcm9wYWdhdGlvbjpCZT0hMSxyZWxhdGl2ZVRvR3JvdXA6R2UscG9zaXRpb246c3QsZm9yd2FyZFRvQ29udGV4dDpwdH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKGJjKHJlKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IllvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PWZsKEcpKXRocm93IG5ldyBFcnJvcigiVGhlIHNob3J0Y3V0J3MgY2FsbGJhY2sgbmVlZHMgdG8gYmUgYSBmdW5jdGlvbi4iKTtpZighMT09PUFycmF5LmlzQXJyYXkoSSkpdGhyb3cgbmV3IEVycm9y'@;
put 'KGhsYFBhc3MgdGhlIHNob3J0Y3V0XCdzIGtleXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzLFx4MjAKICAgICAgdXNpbmcgdGhlIEtleWJvYXJkRXZlbnQua2V5IHByb3BlcnRpZXM6XHgyMAogICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5'@;
put 'Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcy5gKTtjb25zdCBkdD17Y2FsbGJhY2s6Ryxncm91cDpyZSxydW5Pbmx5SWY6dWUsY2FwdHVyZUN0cmw6eWUscHJldmVudERlZmF1bHQ6RWUsc3RvcFByb3BhZ2F0aW9uOkJlfTtIYShHZSkmJihkdC5yZWxhdGl2ZVRvR3JvdXA9R2UsZHQucG9zaXRp'@;
put 'b249c3QpLEFwZShwdCkmJihkdC5mb3J3YXJkVG9Db250ZXh0PXB0KSxJLmZvckVhY2gocXQ9Pntjb25zdCBtbj16UChxdCk7aWYobC5oYXNJdGVtKG1uKSl7Y29uc3QgaG49bC5nZXRJdGVtKG1uKTtsZXQgTW49aG4uZmluZEluZGV4KE1yPT5Nci5ncm91cD09PUdlKTstMSE9PU1uPyJiZWZv'@;
put 'cmUiPT09c3Q/TW4tPTE6TW4rPTE6TW49aG4ubGVuZ3RoLGhuLnNwbGljZShNbiwwLGR0KX1lbHNlIGwuYWRkSXRlbShtbixbZHRdKX0pfSxoPUk9Pntjb25zdCBHPXpQKEkpO2wucmVtb3ZlSXRlbShHKX07cmV0dXJue19fa2luZE9mOlRwZSxhZGRTaG9ydGN1dDphLGFkZFNob3J0Y3V0czpm'@;
put 'dW5jdGlvbihJKXtsZXQgRz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307SS5mb3JFYWNoKHJlPT57cXMoRywodWUseWUpPT57ITE9PT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmUseWUpJiYocmVbeWVdPUdb'@;
put 'eWVdKX0pLGEocmUpfSl9LGdldFNob3J0Y3V0czpJPT57Y29uc3QgRz16UChJKSxyZT1sLmdldEl0ZW0oRyk7cmV0dXJuIEhhKHJlKT9yZS5zbGljZSgpOltdfSxoYXNTaG9ydGN1dDpJPT57Y29uc3QgRz16UChJKTtyZXR1cm4gbC5oYXNJdGVtKEcpfSxyZW1vdmVTaG9ydGN1dHNCeUtleXM6'@;
put 'aCxyZW1vdmVTaG9ydGN1dHNCeUdyb3VwOkk9PntsLmdldEl0ZW1zKCkuZm9yRWFjaChyZT0+e2xldFt1ZSx5ZV09cmU7Y29uc3QgRWU9eWUuZmlsdGVyKEJlPT5CZS5ncm91cCE9PUkpOzA9PT1FZS5sZW5ndGg/aCgoYz0+Yy5zcGxpdCgiKyIpKSh1ZSkpOih5ZS5sZW5ndGg9MCx5ZS5wdXNo'@;
put 'KC4uLkVlKSl9KX19fSkoQmUpO3JldHVybiBmLmFkZEl0ZW0oQmUsR2UpLEdlfSxnZXRBY3RpdmVDb250ZXh0TmFtZTpJLGdldENvbnRleHQ6RyxzZXRBY3RpdmVDb250ZXh0TmFtZTpCZT0+e2lmKCFmLmhhc0l0ZW0oQmUpKXRocm93IG5ldyBFcnJvcihobGBZb3UndmUgdHJpZWQgdG8gYWN0'@;
put 'aXZhdGUgdGhlICIke0JlfSIgc2hvcnRjdXQgY29udGV4dFx4MjAKICAgICAgICB0aGF0IGRvZXMgbm90IGV4aXN0LiBCZWZvcmUgYWN0aXZhdGlvbiwgcmVnaXN0ZXIgdGhlIGNvbnRleHQgdXNpbmcgdGhlICJhZGRDb250ZXh0IiBtZXRob2QuYCk7dj1CZX0saXNDdHJsUHJlc3NlZDooKT0+'@;
put 'IXVlJiYoRWUuaXNQcmVzc2VkKCJjb250cm9sIil8fEVlLmlzUHJlc3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PkVlLnJlbGVhc2VQcmVzc2VkS2V5cygpLGRlc3Ryb3k6KCk9PkVlLnVubW91bnQoKX19LHNpdD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlIixjYWxsYmFj'@;
put 'ayhjKXtjLl9nZXRFZGl0b3JNYW5hZ2VyKCkuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpfX0sa3BlPXtfaG9va3NTdG9yYWdlOk9iamVjdC5jcmVhdGUobnVsbCksYWRkSG9vayhjLGwpe3JldHVybiB0aGlzLl9ob29rc1N0b3JhZ2VbY118fCh0aGlzLl9ob29rc1N0b3JhZ2VbY109W10p'@;
put 'LHRoaXMuaG90LmFkZEhvb2soYyxsKSx0aGlzLl9ob29rc1N0b3JhZ2VbY10ucHVzaChsKSx0aGlzfSxyZW1vdmVIb29rc0J5S2V5KGMpe0tuKHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8W10sbD0+e3RoaXMuaG90LnJlbW92ZUhvb2soYyxsKX0pfSxjbGVhckhvb2tzKCl7cXModGhpcy5faG9v'@;
put 'a3NTdG9yYWdlLChjLGwpPT50aGlzLnJlbW92ZUhvb2tzQnlLZXkobCkpLHRoaXMuX2hvb2tzU3RvcmFnZT17fX19O1RwKGtwZSwiTUlYSU5fTkFNRSIsImhvb2tzUmVmUmVnaXN0ZXJlciIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBsaXQ9a3BlO2Z1bmN0aW9uIGYzKGMs'@;
put 'bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBjaXQoYyl7dmFyIGw9ZnVuY3Rpb24gdWl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw'@;
put 'ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBhdT1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRFX1ZJUkdJTiIsRURJVElORzoi'@;
put 'U1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNIRUQ6IlNUQVRFX0ZJTklTSEVEIn0pO2NsYXNzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iYmFzZSJ9Y29uc3RydWN0b3IobCl7ZjModGhpcywiaG90Iix2b2lkIDApLGYzKHRoaXMsInN0YXRl'@;
put 'IixhdS5WSVJHSU4pLGYzKHRoaXMsIl9vcGVuZWQiLCExKSxmMyh0aGlzLCJfZnVsbEVkaXRNb2RlIiwhMSksZjModGhpcywiX2Nsb3NlQ2FsbGJhY2siLG51bGwpLGYzKHRoaXMsIlREIixudWxsKSxmMyh0aGlzLCJyb3ciLG51bGwpLGYzKHRoaXMsImNvbCIsbnVsbCksZjModGhpcywicHJv'@;
put 'cCIsbnVsbCksZjModGhpcywib3JpZ2luYWxWYWx1ZSIsbnVsbCksZjModGhpcywiY2VsbFByb3BlcnRpZXMiLG51bGwpLHRoaXMuaG90PWwsdGhpcy5pbml0KCl9X2ZpcmVDYWxsYmFja3MobCl7dGhpcy5fY2xvc2VDYWxsYmFjayYmKHRoaXMuX2Nsb3NlQ2FsbGJhY2sobCksdGhpcy5fY2xv'@;
put 'c2VDYWxsYmFjaz1udWxsKX1pbml0KCl7fWdldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBnZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9c2V0VmFsdWUoKXt0aHJvdyBFcnJvcigiRWRpdG9yIHNldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1vcGVuKCl7dGhy'@;
put 'b3cgRXJyb3IoIkVkaXRvciBvcGVuKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1jbG9zZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgY2xvc2UoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXByZXBhcmUobCxhLGQsaCxmLHYpe3RoaXMuVEQ9aCx0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5w'@;
put 'cm9wPWQsdGhpcy5vcmlnaW5hbFZhbHVlPWYsdGhpcy5jZWxsUHJvcGVydGllcz12LHRoaXMuc3RhdGU9dGhpcy5pc09wZW5lZCgpP3RoaXMuc3RhdGU6YXUuVklSR0lOfWV4dGVuZCgpe3JldHVybiBjbGFzcyBleHRlbmRzIHRoaXMuY29uc3RydWN0b3J7fX1zYXZlVmFsdWUobCxhKXtsZXQg'@;
put 'ZCxoLGYsdjtpZihhKXtjb25zdCBJPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO2Q9TWF0aC5tYXgoTWF0aC5taW4oSVswXSxJWzJdKSwwKSxoPU1hdGgubWF4KE1hdGgubWluKElbMV0sSVszXSksMCksZj1NYXRoLm1heChJWzBdLElbMl0pLHY9TWF0aC5tYXgoSVsxXSxJWzNdKX1lbHNl'@;
put 'W2QsaCxmLHZdPVt0aGlzLnJvdyx0aGlzLmNvbCxudWxsLG51bGxdO2NvbnN0IE09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO0FycmF5LmlzQXJyYXkoTSkmJihbZCxoXT1NKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShkLGgsbCxm'@;
put 'LHYsImVkaXQiKX1iZWdpbkVkaXRpbmcobCxhKXtpZih0aGlzLnN0YXRlIT09YXUuVklSR0lOKXJldHVybjtjb25zdCBkPXRoaXMuaG90LGg9ZC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KSxmPWQuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVu'@;
put 'ZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCksdj0oKT0+e2lmKHRoaXMuc3RhdGU9YXUuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3QgST0ic3RyaW5nIj09dHlwZW9mIGw/bDpvYyh0aGlzLm9yaWdpbmFsVmFsdWUpO3RoaXMuc2V0VmFsdWUoSSl9dGhpcy5v'@;
put 'cGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRlcigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNvbCl9O3RoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsdiksZC52aWV3LnNjcm9sbFZpZXdwb3J0KGQu'@;
put 'X2NyZWF0ZUNlbGxDb29yZHMoaCxmKSl8fCh0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsdiksdigpKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtsZXQgaDtpZihkKXtjb25zdCBmPXRoaXMuX2Nsb3NlQ2FsbGJhY2s7dGhpcy5fY2xvc2VDYWxsYmFjaz12PT57ZiYmZih2KSxkKHYp'@;
put 'LHRoaXMuaG90LnZpZXcucmVuZGVyKCl9fWlmKCF0aGlzLmlzV2FpdGluZygpKXtpZih0aGlzLnN0YXRlPT09YXUuVklSR0lOKXJldHVybiB2b2lkIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKX0pO2lmKHRoaXMuc3RhdGU9PT1hdS5FRElU'@;
put 'SU5HKXtpZihsKXJldHVybiB0aGlzLmNhbmNlbENoYW5nZXMoKSx2b2lkIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7Y29uc3QgZj10aGlzLmdldFZhbHVlKCk7aD10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1XaGl0ZXNwYWNlP1tbInN0cmluZyI9PXR5cGVvZiBmP1N0cmluZy5wcm90b3R5cGUu'@;
put 'dHJpbS5jYWxsKGZ8fCIiKTpmXV06W1tmXV0sdGhpcy5zdGF0ZT1hdS5XQUlUSU5HLHRoaXMuc2F2ZVZhbHVlKGgsYSksdGhpcy5ob3QuZ2V0Q2VsbFZhbGlkYXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLHY9Pnt0aGlz'@;
put 'LnN0YXRlPWF1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcih2KX0pOih0aGlzLnN0YXRlPWF1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcighMCkpfX19Y2FuY2VsQ2hhbmdlcygpe3RoaXMuc3RhdGU9YXUuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCl9ZGlzY2FyZEVkaXRv'@;
put 'cihsKXt0aGlzLnN0YXRlPT09YXUuRklOSVNIRUQmJighMT09PWwmJiEwIT09dGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQ/KHRoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPWF1LkVESVRJTkcsdGhpcy5fZmlyZUNh'@;
put 'bGxiYWNrcyghMSkpOih0aGlzLmNsb3NlKCksdGhpcy5fb3BlbmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9kZT0hMSx0aGlzLnN0YXRlPWF1LlZJUkdJTix0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3Jp'@;
put 'ZCIpKSl9ZW5hYmxlRnVsbEVkaXRNb2RlKCl7dGhpcy5fZnVsbEVkaXRNb2RlPSEwfWlzSW5GdWxsRWRpdE1vZGUoKXtyZXR1cm4gdGhpcy5fZnVsbEVkaXRNb2RlfWlzT3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1pc1dhaXRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0ZT09PWF1LldBSVRJ'@;
put 'Tkd9Z2V0RWRpdGVkQ2VsbFJlY3QoKXt2YXIgbDtjb25zdCBhPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpO2lmKCFhKXJldHVybjtjb25zdHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmhvdC52aWV3Ll93dCxmPXRoaXMuaG90LnJvb3RXaW5kb3csdj1qMChhKSxNPWl1KGEpLEk9ajAo'@;
put 'dGhpcy5ob3Qucm9vdEVsZW1lbnQpLEc9aXUodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHJlPWQudG9wT3ZlcmxheS5ob2xkZXIsdWU9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyLHllPXJlIT09Zj9yZS5zY3JvbGxUb3A6MCxFZT11ZSE9PWY/dWUuc2Nyb2xsTGVmdDowLEJlPWYuaW5uZXJX'@;
put 'aWR0aC1JLmxlZnQtRyx7d3RUYWJsZTpHZX09bnVsbCE9PShsPWQuZ2V0UGFyZW50T3ZlcmxheShhKSkmJnZvaWQgMCE9PWw/bDp0aGlzLmhvdC52aWV3Ll93dCxzdD1HZS5uYW1lLHB0PVsibWFzdGVyIiwiaW5saW5lX3N0YXJ0Il0uaW5jbHVkZXMoc3QpP3llOjAsZHQ9WyJtYXN0ZXIiLCJ0'@;
put 'b3AiLCJib3R0b20iXS5pbmNsdWRlcyhzdCk/RWU6MDtsZXQgbW49di50b3AtSS50b3AtKHYudG9wPT09SS50b3A/MDoxKS1wdCx3bj0wO3duPXRoaXMuaG90LmlzUnRsKCk/Zi5pbm5lcldpZHRoLXYubGVmdC1NLUJlLTErZHQ6di5sZWZ0LUkubGVmdC0xLWR0LFsidG9wIiwidG9wX2lubGlu'@;
put 'ZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhzdCkmJihtbis9ZC50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHN0KSYmKHduKz1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRP'@;
put 'dmVybGF5T2Zmc2V0KCkpKTtjb25zdCBobj10aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCksTW49dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksTXI9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21W'@;
put 'aXN1YWxJbmRleCh0aGlzLmNvbCkscW49dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTsoaG4mJk1uPD0wfHxNbj09PXFuKSYmKG1uKz0xKSxNcjw9MCYmKHdu'@;
put 'Kz0xKTtjb25zdCBncj1oLnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24scXI9aC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLF9pPU1hdGguYWJzKGQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkpLFBuPWQudG9wT3ZlcmxheS5n'@;
put 'ZXRTY3JvbGxQb3NpdGlvbigpLFVyPWQwKHRoaXMuaG90LnJvb3REb2N1bWVudCk7bGV0IHRyPWEub2Zmc2V0VG9wO2lmKFsiaW5saW5lX3N0YXJ0IiwibWFzdGVyIl0uaW5jbHVkZXMoc3QpJiYodHIrPWdyLVBuKSxbImJvdHRvbSIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5j'@;
put 'bHVkZXMoc3QpKXtjb25zdHt3dFZpZXdwb3J0OmFyLHd0VGFibGU6R3J9PWQuYm90dG9tT3ZlcmxheS5jbG9uZTt0cis9YXIuZ2V0V29ya3NwYWNlSGVpZ2h0KCktR3IuZ2V0SGVpZ2h0KCktVXJ9bGV0IEJyPWEub2Zmc2V0TGVmdDt0aGlzLmhvdC5pc1J0bCgpPyhCcj1Ccj49MD9HZS5nZXRX'@;
put 'aWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhCciksQnIrPXFyLV9pLU0pOlsidG9wIiwibWFzdGVyIiwiYm90dG9tIl0uaW5jbHVkZXMoc3QpJiYoQnIrPXFyLV9pKTtjb25zdCBZcj1mLmdldENvbXB1dGVkU3R5bGUodGhpcy5URCksd2k9dGhpcy5ob3QuaXNSdGwoKT8iYm9yZGVyUmln'@;
put 'aHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCIsQmk9cGFyc2VJbnQoWXJbd2ldLDEwKT4wPzA6MSxoYT1wYXJzZUludChZci5ib3JkZXJUb3BXaWR0aCwxMCk+MD8wOjEsbWE9aXUoYSkrQmksdnQ9U3UoYSkraGEseHQ9TCQocmUpP1VyOjAsJHQ9TyQodWUpP1VyOjAsWW49dGhpcy5ob3Qudmll'@;
put 'dy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aChCcikteHQrQmk7cmV0dXJue3RvcDptbixzdGFydDp3bixoZWlnaHQ6dnQsbWF4SGVpZ2h0Ok1hdGgubWF4KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KHRyKS0kdCtoYSx0aGlzLmhvdC5zdHlsZXNIYW5kbGVy'@;
put 'LmdldERlZmF1bHRSb3dIZWlnaHQoKSksd2lkdGg6bWEsbWF4V2lkdGg6WW59fWdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpe3N3aXRjaCh0aGlzLmNoZWNrRWRpdG9yU2VjdGlvbigpKXtjYXNlImlubGluZS1zdGFydCI6cmV0dXJuImh0X2Nsb25lX2xlZnQgaHRfY2xvbmVfaW5saW5lX3N0'@;
put 'YXJ0IjtjYXNlImJvdHRvbSI6cmV0dXJuImh0X2Nsb25lX2JvdHRvbSI7Y2FzZSJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJuImh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5lciBodF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI7Y2FzZSJ0b3AiOnJldHVybiJo'@;
put 'dF9jbG9uZV90b3AiO2Nhc2UidG9wLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV90b3BfbGVmdF9jb3JuZXIgaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIiO2RlZmF1bHQ6cmV0dXJuImh0X2Nsb25lX21hc3RlciJ9fWdldEVkaXRlZENlbGwoKXtyZXR1cm4g'@;
put 'dGhpcy5ob3QuZ2V0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCwhMCl9Y2hlY2tFZGl0b3JTZWN0aW9uKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgYT0iIjtyZXR1cm4gdGhpcy5yb3c8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3A/YT10aGlzLmNvbDx0aGlz'@;
put 'LmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6InRvcCI6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20mJnRoaXMucm93Pj1sLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tP2E9dGhp'@;
put 'cy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8iYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOiJib3R0b20iOnRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQmJihhPSJpbmxpbmUtc3RhcnQiKSxhfX14bChrXyxs'@;
put 'aXQpO2NvbnN0IGhpdD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMiLGNhbGxiYWNrKGMsbCxhKXtjb25zdCBkPWMuX2dldEVkaXRvck1hbmFnZXIoKSxoPWQuZ2V0QWN0aXZlRWRpdG9yKCk7aC5pc0luRnVsbEVkaXRNb2RlKCkmJmguc3RhdGU9PT1hdS5FRElUSU5HfHwo'@;
put 'ZC5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKCksYy5nZXRTZWxlY3RlZCgpJiYoYS5pbmNsdWRlcygiYXJyb3dkb3duIik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMSwwKTphLmluY2x1ZGVzKCJhcnJvd3VwIik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLTEsMCk6YS5pbmNs'@;
put 'dWRlcygiYXJyb3dsZWZ0Iik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKTphLmluY2x1ZGVzKCJhcnJvd3JpZ2h0IikmJmMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSkpLGwucHJldmVudERl'@;
put 'ZmF1bHQoKSl9fSxmaXQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIiLGNhbGxiYWNrKGMsbCl7Y29uc3QgYT1jLl9nZXRFZGl0b3JNYW5hZ2VyKCk7YS5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwuY3RybEtleXx8bC5tZXRhS2V5KSxhLm1vdmVTZWxlY3Rpb25BZnRlckVu'@;
put 'dGVyKGwpfX0scGl0PXtuYW1lOiJlZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmciLGNhbGxiYWNrKGMpe2NvbnN0IGw9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpO2wuY2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShjLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSks'@;
put 'bC5hY3RpdmVFZGl0b3IuZm9jdXMoKX19LGdpdD17bmFtZToiZWRpdG9yRmFzdE9wZW4iLGNhbGxiYWNrKGMsbCl7Y29uc3R7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTthLmlzSGVhZGVyKCl8fGMuX2dldEVkaXRvck1hbmFnZXIoKS5vcGVuRWRpdG9yKG51bGwsbCwh'@;
put 'MCl9fSxtaXQ9e25hbWU6ImVkaXRvck9wZW4iLGNhbGxiYWNrKGMsbCxhKXtjb25zdCBkPWMuX2dldEVkaXRvck1hbmFnZXIoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0OmZ9PWg7aWYoYy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRlcigpJiZjLmNv'@;
put 'dW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjApe2NvbnN0IHY9Yy5nZXRTZXR0aW5ncygpLE09ImZ1bmN0aW9uIj09dHlwZW9mIHYuZW50ZXJNb3Zlcz92LmVudGVyTW92ZXMobCk6di5lbnRlck1vdmVzO2EuaW5jbHVkZXMoInNoaWZ0Iik/Yy5zZWxlY3Rpb24u'@;
put 'dHJhbnNmb3JtRm9jdXMoLU0ucm93LC1NLmNvbCk6Yy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoTS5yb3csTS5jb2wpfWVsc2UgZi5pc0hlYWRlcigpfHwoYy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZz9kLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5P2QubW92ZVNlbGVjdGlv'@;
put 'bkFmdGVyRW50ZXIobCk6ZC5vcGVuRWRpdG9yKG51bGwsbCwhMCk6ZC5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKSx6MihsKSl9fSx5aXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93biIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdl'@;
put 'dFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5z'@;
put 'Zm9ybUVuZCgxLDApLGwubWFya0VuZFNvdXJjZSgpKX19LGJpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7dG86ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLGg9TWF0aC5taW4oZC5yb3crYy5jb3VudFZpc2libGVSb3dzKCksYy5jb3VudFJvd3MoKS0xKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsLTEpO2lmKG51bGwhPT1mKXtjb25zdCB2PWMuX2NyZWF0ZUNlbGxDb29yZHMoZixkLmNvbCksTT1kLnJvdy1jLmdldEZpcnN0RnVs'@;
put 'bHlWaXNpYmxlUm93KCksST1NYXRoLm1pbih2LnJvdy1NLGMuY291bnRSb3dzKCktMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VFbmQodiksbC5tYXJrRW5kU291cmNlKCksYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6SSx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRh'@;
put 'bFNuYXA6InN0YXJ0In0pfX19LF9pdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxl'@;
put 'Y3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCkpfX0s'@;
put 'd2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihh'@;
put 'LmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCkpfX0sQ2l0PXtuYW1lOiJleHRlbmRDZWxs'@;
put 'c1NlbGVjdGlvblRvQ29sdW1ucyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphLGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/bC5zZWxlY3RB'@;
put 'bGwoITAsITApOmMuc2VsZWN0Q29sdW1ucyhkLmNvbCxoLmNvbCxhKSxsLm1hcmtFbmRTb3VyY2UoKX19LFNpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RCb3R0b20iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdo'@;
put 'dDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLTEsLTEpLEk9aC5jbG9u'@;
put 'ZSgpO0kucm93PWQucm93LGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoSSx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoTSxm'@;
put 'LmNvbCkpLGwubWFya0VuZFNvdXJjZSgpfX19LE1pdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCk7aWYoIWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSksTT1oLmNsb25lKCk7TS5jb2w9ZC5jb2wsbC5t'@;
put 'YXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChNLHZvaWQgMCwhMSxkLmNsb25lKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyx2KSksbC5tYXJrRW5kU291cmNlKCl9fX0seGl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElu'@;
put 'bGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3Ju'@;
put 'ZXIoKSYmZC5pc0NlbGwoKSl7Y29uc3Qgdj1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodiwxKSxJPWguY2xvbmUoKTtJLmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5n'@;
put 'ZVN0YXJ0KEksdm9pZCAwLCExLGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxFaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9u'@;
put 'OmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhp'@;
put 'ZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bYy5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSksST1oLmNsb25lKCk7SS5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChJLHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNvbHVtbkhlYWRl'@;
put 'ci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sVGl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxj'@;
put 'b2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVu'@;
put 'SW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFdKSxJPWguY2xvbmUoKTtJLmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEksdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFk'@;
put 'ZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxBaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRl'@;
put 'eE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKSxJ'@;
put 'PWguY2xvbmUoKTtJLnJvdz1kLnJvdyxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEksdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29v'@;
put 'cmRzKE0sZi5jb2wpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxraXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmEsZnJvbTpkLHRvOmh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsLm1hcmtT'@;
put 'b3VyY2UoImtleWJvYXJkIiksbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKT9sLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RSb3dzKGQucm93LGgucm93LGEpLGwubWFya0VuZFNvdXJjZSgpfX0sRGl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwIixjYWxsYmFjayhjKXtjb25z'@;
put 'dHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkp'@;
put 'JiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKC0xLDApLGwubWFya0VuZFNvdXJjZSgpKX19LElpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVy'@;
put 'OmF9PWMse3RvOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPU1hdGgubWF4KGQucm93LWMuY291bnRWaXNpYmxlUm93cygpLDApLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwxKTtpZihudWxsIT09Zil7Y29uc3Qgdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGYsZC5jb2wpLE09'@;
put 'ZC5yb3ctYy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEk9TWF0aC5tYXgodi5yb3ctTSwwKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZUVuZCh2KSxsLm1hcmtFbmRTb3VyY2UoKSxjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpJLHZlcnRpY2FsU25hcDoidG9wIixob3Jp'@;
put 'em9udGFsU25hcDoic3RhcnQifSl9fX0sTGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkRvd24iLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgxLDApLGwubWFya0VuZFNvdXJjZSgpfX0sT2l0PXtuYW1l'@;
put 'OiJtb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7bmF2aWdhYmxlSGVhZGVyczphfT1jLmdldFNldHRpbmdzKCksZD1hP2MuY291bnRDb2xIZWFkZXJzKCk6MCx7cm93Omh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxh'@;
put 'c3QoKS5oaWdobGlnaHQ7bGV0IGY9Yy5jb3VudFZpc2libGVSb3dzKCkrZDtmPTA9PT1mPzE6ZixoPT09Yy5jb3VudFJvd3MoKS0xP2Y9MTpoK2Y+Yy5jb3VudFJvd3MoKSYmKGY9Yy5jb3VudFJvd3MoKS1oLTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KGYs'@;
put 'MCksbC5tYXJrRW5kU291cmNlKCksYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3c8MCYmYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6MH0pfX0sUGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZCIsY2FsbGJhY2soYyxsKXtjb25zdHtzZWxlY3Rpb246YX09'@;
put 'YyxkPWMuZ2V0U2V0dGluZ3MoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBkLnRhYk1vdmVzP2QudGFiTW92ZXMobCk6ZC50YWJNb3ZlczthLm1hcmtTb3VyY2UoImtleWJvYXJkIiksYS5pc011bHRpcGxlKCkmJiFoLmlzSGVhZGVyKCkmJmMuY291'@;
put 'bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9hLnRyYW5zZm9ybUZvY3VzKC1mLnJvdywtZi5jb2wpOmEudHJhbnNmb3JtU3RhcnQoLWYucm93LC1mLmNvbCksYS5tYXJrRW5kU291cmNlKCl9fSxGaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uSW5saW5lU3Rh'@;
put 'cnQiLGNhbGxiYWNrKGMsbCl7Y29uc3R7c2VsZWN0aW9uOmF9PWMsZD1jLmdldFNldHRpbmdzKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj0iZnVuY3Rpb24iPT10eXBlb2YgZC50YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJrZXlib2FyZCIp'@;
put 'LGEuaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/YS50cmFuc2Zvcm1Gb2N1cyhmLnJvdyxmLmNvbCk6YS50cmFuc2Zvcm1TdGFydChmLnJvdyxmLmNvbCksYS5tYXJrRW5kU291cmNlKCl9fSxIaXQ9'@;
put 'e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LE5pdD17bmFtZToi'@;
put 'bW92ZUNlbGxTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LFZpdD17bmFtZToibW92ZUNlbGxT'@;
put 'ZWxlY3Rpb25Ub01vc3RCb3R0b20iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtjb2w6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZD1jLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLTEsLTEp'@;
put 'O251bGw9PT1kJiYoZD0tMSksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxhKSl9fSxCaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tSW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphLGNvbHVt'@;
put 'bkluZGV4TWFwcGVyOmR9PWMsaD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLDEwKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktaC0xLC0xKSx2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSk7'@;
put 'bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGYsdikpLGwubWFya0VuZFNvdXJjZSgpfX0saml0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29s'@;
put 'dW1uSW5kZXhNYXBwZXI6YX09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csYS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0x'@;
put 'KSkpLGwubWFya0VuZFNvdXJjZSgpfX0seml0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0'@;
put 'YXJ0LDEwKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSksbC5tYXJrRW5kU291cmNl'@;
put 'KCl9fSxVaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93O2xldCBoPWEuZ2V0TmVhcmVzdE5vdEhpZGRl'@;
put 'bkluZGV4KC4uLmMuaXNSdGwoKT9bYy5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSk7bnVsbD09PWgmJihoPWMuaXNSdGwoKT8tMTotYy5jb3VudFJvd0hlYWRlcnMoKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLGwu'@;
put 'bWFya0VuZFNvdXJjZSgpfX0sWml0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtyb3c6ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgaD1hLmdl'@;
put 'dE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/WzAsMV06W2MuY291bnRDb2xzKCktMSwtMV0pO251bGw9PT1oJiYoaD1jLmlzUnRsKCk/LWMuY291bnRSb3dIZWFkZXJzKCk6LTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhkLGgpKSxsLm1hcmtFbmRTb3VyY2UoKX19LFdpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtjb2w6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZD1jLnJvd0luZGV4'@;
put 'TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpO251bGw9PT1kJiYoZD0tYy5jb3VudENvbEhlYWRlcnMoKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsYSkpLGwubWFya0VuZFNvdXJjZSgpfX0sWWl0PXtu'@;
put 'YW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWMsaD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEwKSxmPXBhcnNl'@;
put 'SW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksdj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLDEpLE09ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwxKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxD'@;
put 'b29yZHModixNKSksbC5tYXJrRW5kU291cmNlKCl9fSxHaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVXAiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgtMSwwKSxsLm1hcmtFbmRTb3VyY2UoKX19LCRp'@;
put 'dD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0aW5ncygpLGQ9YT9jLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNlbGVjdGVkUmFu'@;
put 'Z2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBmPWMuY291bnRWaXNpYmxlUm93cygpK2Q7Zj0wPT09Zj8tMTotZixoPT09LWQ/Zj0tMTpoK2Y8ZCYmKGY9LShoK2QpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydChmLDApLGwubWFya0VuZFNvdXJjZSgpLGMuZ2V0U2Vs'@;
put 'ZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LFhpdD17bmFtZToiZW1wdHlTZWxlY3RlZENlbGxzIixjYWxsYmFjayhjKXtjLmVtcHR5U2VsZWN0ZWRDZWxscygpLGMuX2dldEVkaXRvck1hbmFnZXIoKS5wcmVwYXJlRWRpdG9y'@;
put 'KCl9fSxxaXQ9e25hbWU6InNjcm9sbFRvRm9jdXNlZENlbGwiLGNhbGxiYWNrKGMpe2NvbnN0e2hpZ2hsaWdodDpsfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1jLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCktMSxkPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKS0xLGg9Yy5n'@;
put 'ZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkrMSxmPWMuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpKzEsdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksTT1jLl9jcmVhdGVDZWxsQ29vcmRzKGgsZik7aWYoIWMuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkuaW5jbHVkZXMobCkmJihsLnJvdz49'@;
put 'MHx8bC5jb2w+PTApKXtjb25zdCBHPXt9O2lmKGwuY29sPj0wKXtjb25zdCByZT1NYXRoLmZsb29yKGMuY291bnRWaXNpYmxlQ29scygpLzIpO0cuY29sPU1hdGgubWF4KGwuY29sLXJlLDApfWlmKGwucm93Pj0wKXtjb25zdCByZT1NYXRoLmZsb29yKGMuY291bnRWaXNpYmxlUm93cygpLzIp'@;
put 'O0cucm93PU1hdGgubWF4KGwucm93LXJlLDApfWMuc2Nyb2xsVmlld3BvcnRUbyh7Li4uRyx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LEppdD17bmFtZToic2VsZWN0QWxsQ2VsbHMiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtT'@;
put 'b3VyY2UoImtleWJvYXJkIiksbC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSksbC5tYXJrRW5kU291cmNlKCl9fSxRaXQ9e25hbWU6InNlbGVjdEFsbENlbGxzQW5kSGVhZGVycyIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJj'@;
put 'ZSgia2V5Ym9hcmQiKSxsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITF9KSxsLm1hcmtFbmRTb3VyY2UoKX19LGVhdD17bmFtZToicG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSIsY2FsbGJhY2soYyl7Y29uc3QgbD1jLmdldFNlbGVjdGVkUmFuZ2UoKSx7cm93'@;
put 'OmEsY29sOmR9PWxbbC5sZW5ndGgtMV0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLGg9Yy5nZXREYXRhQXRDZWxsKGEsZCksZj1uZXcgTWFwO2ZvcihsZXQgdj0wO3Y8bC5sZW5ndGg7disrKWxbdl0uZm9yQWxsKChNLEkpPT57aWYoTT49MCYmST49MCYmKE0hPT1hfHxJIT09ZCkpe2NvbnN0e3Jl'@;
put 'YWRPbmx5Okd9PWMuZ2V0Q2VsbE1ldGEoTSxJKTtHfHxmLnNldChgJHtNfXgke0l9YCxbTSxJLGhdKX19KTtjLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShmLnZhbHVlcygpKSl9fSx0YXQ9Wy4uLmZ1bmN0aW9uIHZpdCgpe3JldHVybltzaXQsaGl0LGZpdCxwaXQsZ2l0LG1pdF19KCksLi4u'@;
put 'ZnVuY3Rpb24gUml0KCl7cmV0dXJuW3lpdCxiaXQsX2l0LHdpdCxDaXQsU2l0LE1pdCx4aXQsRWl0LFRpdCxBaXQsa2l0LERpdCxJaXRdfSgpLC4uLmZ1bmN0aW9uIEtpdCgpe3JldHVybltMaXQsT2l0LFBpdCxGaXQsSGl0LE5pdCxWaXQsQml0LGppdCx6aXQsVWl0LFppdCxXaXQsWWl0LEdp'@;
put 'dCwkaXRdfSgpLFhpdCxxaXQsSml0LFFpdCxlYXRdO2Z1bmN0aW9uIERwZShjKXtjb25zdCBsPXt9O3JldHVybiB0YXQuZm9yRWFjaChhPT57bGV0e25hbWU6ZCxjYWxsYmFjazpofT1hO2xbZF09ZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxN'@;
put 'PTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gaChjLC4uLnYpfX0pLGx9ZnVuY3Rpb24gbmF0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJlZGl0b3IiKSxhPURwZShjKSxkPXtncm91cDp6bX07bC5hZGRTaG9ydGN1dHMoW3trZXlzOltb'@;
put 'IkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6W1siRW50ZXIiLCJDb250cm9sL01ldGEiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJh'@;
put 'Y2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihoLGYpfSx7a2V5czpbWyJUYWIiXSxbIlRhYiIsIlNoaWZ0Il0sWyJQYWdlRG93biJdLFsiUGFnZVVwIl1dLGZvcndhcmRUb0NvbnRleHQ6Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJh'@;
put 'Y2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlKGgsZil9LHtrZXlzOltbIkFycm93RG93biJdLFsiQXJyb3dVcCJdLFsiQXJyb3dMZWZ0Il0sWyJBcnJvd1JpZ2h0Il1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlz'@;
put 'KGgsZil9LHtrZXlzOltbIkVzY2FwZSJdLFsiRXNjYXBlIiwiQ29udHJvbC9NZXRhIl1dLGNhbGxiYWNrOigpPT5hLmVkaXRvckNsb3NlV2l0aG91dFNhdmluZygpfV0sZCl9ZnVuY3Rpb24gcmF0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJncmlkIiks'@;
put 'YT1EcGUoYyksZD17cnVuT25seUlmOigpPT57Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpofT1jLmdldFNldHRpbmdzKCk7cmV0dXJuIEhhKGMuZ2V0U2VsZWN0ZWQoKSkmJihofHwhaCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjAmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wKX0sZ3JvdXA6U3Bl'@;
put 'fTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6aD0+YS5lZGl0b3JGYXN0T3BlbihoKX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yT3BlbihoLGYpfSx7a2V5czpbWyJCYWNrc3BhY2UiXSxbIkRlbGV0'@;
put 'ZSJdXSxjYWxsYmFjazooKT0+YS5lbXB0eVNlbGVjdGVkQ2VsbHMoKX1dLHtncm91cDp6bSxydW5Pbmx5SWY6KCk9PkhhKGMuZ2V0U2VsZWN0ZWQoKSl9KSxsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+YS5zZWxlY3RBbGxDZWxscygp'@;
put 'LHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiEobnVsbCE9PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkmJnZvaWQgMCE9PWgmJmguaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+e30scnVuT25seUlmOigpPT57'@;
put 'dmFyIGg7cmV0dXJuIG51bGw9PT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5pc0hlYWRlcigpfSxwcmV2ZW50RGVmYXVsdDohMH0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJTcGFjZSJdXSxjYWxsYmFjazooKT0+'@;
put 'YS5zZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMoKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PmEucG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSgpLHJ1bk9ubHlJZjooKT0+e3ZhciBoLGY7cmV0dXJuIShudWxsIT09KGg9Yy5nZXRTZWxlY3RlZFJhbmdl'@;
put 'TGFzdCgpKSYmdm9pZCAwIT09aCYmaC5oaWdobGlnaHQuaXNIZWFkZXIoKSkmJihudWxsPT09KGY9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5nZXRDZWxsc0NvdW50KCkpPjF9fSx7a2V5czpbWyJDb250cm9sIiwiU3BhY2UiXV0sY2FwdHVyZUN0cmw6'@;
put 'ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMoKX0se2tleXM6W1siU2hpZnQiLCJTcGFjZSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MoKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxs'@;
put 'YmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1dLGNhbGxiYWNr'@;
put 'OigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wKCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9u'@;
put 'LmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiQ29udHJvbC9NZXRhIl1dLGNh'@;
put 'cHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIsIkNv'@;
put 'bnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVy'@;
put 'KCkpfSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQoKX0s'@;
put 'e2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0'@;
put 'aW9uVG9Nb3N0TGVmdCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uUmlnaHQo'@;
put 'KX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVj'@;
put 'dGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNv'@;
put 'cm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90'@;
put 'RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpfSx7a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigp'@;
put 'PT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0'@;
put 'aW9uVG9Nb3N0SW5saW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCl9LHtrZXlz'@;
put 'OltbIkVuZCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpb'@;
put 'WyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCgpfSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93'@;
put 'biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJUYWIiXV0s'@;
put 'cHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6aD0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0KGgpfSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpoPT5hLm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kKGgpfSx7a2V5czpbWyJDb250'@;
put 'cm9sL01ldGEiLCJCYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpfV0sZCl9ZnVuY3Rpb24gSXBlKGMpe2NvbnN0e2NsYXNzTmFtZXM6bH09ZWZlKGMsL2h0LXRoZW1lLVthLXpBLVowLTlfLV0rLyk7cmV0dXJuIGwucG9wKCl9ZnVuY3Rpb24gcjkoYyxs'@;
put 'LGEpe1JwZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUnBlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBfMShjLGwpe3JldHVybiBj'@;
put 'LmdldChwMyhjLGwpKX1mdW5jdGlvbiBxMihjLGwsYSl7cmV0dXJuIGMuc2V0KHAzKGMsbCksYSksYX1mdW5jdGlvbiBwMyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGk5PW5ldyBXZWFrTWFwLFpQPW5ldyBXZWFrTWFwLERxPW5ldyBXZWFrTWFwLElxPW5ldyBXZWFrTWFwLFVtPW5ldyBXZWFrTWFwLHNUPW5ldyBXZWFrTWFwLG9UPW5ldyBXZWFrTWFwLEZwPW5l'@;
put 'dyBXZWFrU2V0O2NsYXNzIHNhdHtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiBhYXQoYyxsKXtScGUoYyxsKSxsLmFkZChjKX0pKHRoaXMsRnApLHI5KHRoaXMsaTksdm9pZCAwKSxyOSh0aGlzLFpQLHZvaWQgMCkscjkodGhpcyxEcSx2b2lkIDApLHI5KHRoaXMsSXEsdm9pZCAwKSxyOSh0'@;
put 'aGlzLFVtLCEwKSxyOSh0aGlzLHNULHt9KSxyOSh0aGlzLG9ULHt9KSxxMihaUCx0aGlzLGwpLHEyKElxLHRoaXMsYSl9aXNDbGFzc2ljVGhlbWUoKXtyZXR1cm4gXzEoVW0sdGhpcyl9Z2V0Q1NTVmFyaWFibGVWYWx1ZShsKXt2YXIgYTtpZihfMShVbSx0aGlzKSlyZXR1cm4gbnVsbDtpZihf'@;
put 'MShzVCx0aGlzKVtgLS1odC0ke2x9YF0pcmV0dXJuIF8xKHNULHRoaXMpW2AtLWh0LSR7bH1gXTtjb25zdCBkPW51bGwhPT0oYT1wMyhGcCx0aGlzLGNhdCkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKSkmJnZvaWQgMCE9PWE/YTpwMyhGcCx0aGlzLE9wZSkuY2FsbCh0aGlzLGAtLWh0LSR7bH1g'@;
put 'KTtyZXR1cm4gbnVsbCE9PWQ/KF8xKHNULHRoaXMpW2AtLWh0LSR7bH1gXT1kLGQpOnZvaWQgMH1nZXRTdHlsZUZvclREKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9XzEob1QsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRkW2xdfWdldERlZmF1bHRSb3dIZWlnaHQoKXtyZXR1cm4g'@;
put 'XzEoVW0sdGhpcyk/MjM6cDMoRnAsdGhpcyxvYXQpLmNhbGwodGhpcyl8fDIzfWFyZUNlbGxzQm9yZGVyQm94KCl7cmV0dXJuImJvcmRlci1ib3giPT09dGhpcy5nZXRTdHlsZUZvclREKCJib3gtc2l6aW5nIil9dXNlVGhlbWUobCl7aWYoIWwpcmV0dXJuIHEyKGk5LHRoaXMsdm9pZCAwKSxx'@;
put 'MihVbSx0aGlzLCEwKSx2b2lkIHAzKEZwLHRoaXMsUnEpLmNhbGwodGhpcyk7aWYobCYmbCE9PV8xKGk5LHRoaXMpKXtpZighL2h0LXRoZW1lLS4qLy50ZXN0KGwpKXJldHVybiBZbyhgSW52YWxpZCB0aGVtZSBuYW1lOiAke2x9LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHRoZW1lIG5hbWUu'@;
put 'YCkscTIoaTksdGhpcyx2b2lkIDApLHEyKFVtLHRoaXMsITEpLHZvaWQgcDMoRnAsdGhpcyxScSkuY2FsbCh0aGlzKTtfMShpOSx0aGlzKSYmcDMoRnAsdGhpcyx1YXQpLmNhbGwodGhpcykscTIoaTksdGhpcyxsKSxxMihVbSx0aGlzLCExKSxwMyhGcCx0aGlzLFJxKS5jYWxsKHRoaXMpfX1n'@;
put 'ZXRUaGVtZU5hbWUoKXtyZXR1cm4gXzEoaTksdGhpcyl9fWZ1bmN0aW9uIG9hdCgpe2NvbnN0IGM9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJsaW5lLWhlaWdodCIpLGw9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLXZlcnRpY2FsLXBhZGRpbmciKSxhPU1hdGguY2VpbChwYXJz'@;
put 'ZUZsb2F0KHRoaXMuZ2V0U3R5bGVGb3JURCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpKSk7cmV0dXJuIG51bGw9PT1jfHxudWxsPT09bHx8aXNOYU4oYSk/bnVsbDpjKzIqbCthfWZ1bmN0aW9uIFJxKCl7dGhpcy5pc0NsYXNzaWNUaGVtZSgpfHxxMihEcSx0aGlzLGdldENvbXB1dGVkU3R5bGUo'@;
put 'XzEoWlAsdGhpcykpKTtjb25zdCBjPXAzKEZwLHRoaXMsbGF0KS5jYWxsKHRoaXMsWyJib3gtc2l6aW5nIiwiYm9yZGVyLWJvdHRvbS13aWR0aCJdKTtfMShvVCx0aGlzKS50ZD17Li4uXzEob1QsdGhpcykudGQsImJveC1zaXppbmciOmNbImJveC1zaXppbmciXSwiYm9yZGVyLWJvdHRvbS13'@;
put 'aWR0aCI6Y1siYm9yZGVyLWJvdHRvbS13aWR0aCJdfX1mdW5jdGlvbiBsYXQoYyl7Y29uc3QgbD1fMShJcSx0aGlzKSxhPV8xKFpQLHRoaXMpLGQ9bC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGg9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLGY9bC5jcmVhdGVFbGVtZW50KCJ0ciIpLHY9bC5j'@;
put 'cmVhdGVFbGVtZW50KCJ0ciIpLE09bC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3YuYXBwZW5kQ2hpbGQoTSksaC5hcHBlbmRDaGlsZChmKSxoLmFwcGVuZENoaWxkKHYpLGQuYXBwZW5kQ2hpbGQoaCksYS5hcHBlbmRDaGlsZChkKTtjb25zdCBJPWdldENvbXB1dGVkU3R5bGUoTSksRz17fTtyZXR1'@;
put 'cm4gYy5mb3JFYWNoKHJlPT57R1tyZV09SS5nZXRQcm9wZXJ0eVZhbHVlKHJlKX0pLGEucmVtb3ZlQ2hpbGQoZCksR31mdW5jdGlvbiBjYXQoYyl7Y29uc3QgbD1NYXRoLmNlaWwocGFyc2VGbG9hdChwMyhGcCx0aGlzLE9wZSkuY2FsbCh0aGlzLGMpKSk7cmV0dXJuIE51bWJlci5pc05hTihs'@;
put 'KT9udWxsOmx9ZnVuY3Rpb24gT3BlKGMpe2NvbnN0IGw9XzEoRHEsdGhpcykuZ2V0UHJvcGVydHlWYWx1ZShjKTtyZXR1cm4iIj09PWw/bnVsbDpsfWZ1bmN0aW9uIHVhdCgpe3EyKG9ULHRoaXMse30pLHEyKHNULHRoaXMse30pLHEyKFVtLHRoaXMsITApfWZ1bmN0aW9uIFBwZShjLGwsYSl7'@;
put 'RnBlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBGcGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEhwZShjLGwpe3JldHVybiBjLmdl'@;
put 'dChEXyhjLGwpKX1mdW5jdGlvbiBOcGUoYyxsLGEpe3JldHVybiBjLnNldChEXyhjLGwpLGEpLGF9ZnVuY3Rpb24gRF8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBMcT1uZXcgV2Vha01hcCxPcT1uZXcgV2Vha01hcCxsVD1uZXcgV2Vha1NldDtjbGFzcyBoYXR7Y29uc3RydWN0b3IobCl7bGV0e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09'@;
put 'bDsoZnVuY3Rpb24gZGF0KGMsbCl7RnBlKGMsbCksbC5hZGQoYyl9KSh0aGlzLGxUKSxQcGUodGhpcyxMcSx2b2lkIDApLFBwZSh0aGlzLE9xLHZvaWQgMCksTnBlKExxLHRoaXMsYSksTnBlKE9xLHRoaXMsZCl9dG9SZW5kZXJhYmxlKGwpe2NvbnN0IGE9Ik4tUyI9PT1sLmdldFZlcnRpY2Fs'@;
put 'RGlyZWN0aW9uKCk/MTotMSxkPSJXLUUiPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCk/MTotMSxoPURfKGxULHRoaXMsVnBlKS5jYWxsKHRoaXMsbC5mcm9tLGEsZCk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj1EXyhsVCx0aGlzLFZwZSkuY2FsbCh0aGlzLGwudG8sLWEs'@;
put 'LWQpO2lmKG51bGw9PT1mKXJldHVybiBudWxsO2NvbnN0IHY9bC5jbG9uZSgpO3JldHVybiB2LmZyb209aCx2LnRvPWYsdi5pbmNsdWRlcyhsLmhpZ2hsaWdodCl8fCh2LmhpZ2hsaWdodD1oKSx2fX1mdW5jdGlvbiBWcGUoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bDtjb25zdCBkPURfKGxULHRoaXMsQnBlKS5jYWxsKHRoaXMsSHBlKExxLHRoaXMpLGMucm93LGwpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2NvbnN0IGg9RF8obFQsdGhpcyxCcGUpLmNhbGwodGhpcyxIcGUoT3EsdGhpcyksYy5jb2wsYSk7'@;
put 'cmV0dXJuIG51bGw9PT1oP251bGw6Yy5jbG9uZSgpLmFzc2lnbih7cm93OmQsY29sOmh9KX1mdW5jdGlvbiBCcGUoYyxsLGEpe3JldHVybiBsPDA/bDpjLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpfWxldCBQcT1udWxsO2NvbnN0IEZxPW5ldyBNYXA7ZnVuY3Rpb24ganBlKGMsbCl7'@;
put 'dmFyIGEsZD10aGlzO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sZj10aGlzO2NvbnN0IHY9bmV3IFoyKGYpO2xldCBNLEksRyxyZSx1ZSx5ZSxFZT0hMDsoZnVuY3Rpb24gQXR0KGMpe3JldHVybiBjPT09REt9KShoKSYmZnVu'@;
put 'Y3Rpb24gVHR0KGMpe2szZS5zZXQoYywhMCl9KHRoaXMpLHRoaXMucm9vdENvbnRhaW5lcj1jLHRoaXMucm9vdFdyYXBwZXJFbGVtZW50PXZvaWQgMCx0aGlzLnJvb3RQb3J0YWxFbGVtZW50PXZvaWQgMCx0aGlzLnJvb3RFbGVtZW50PXdfKHRoaXMpP2Mub3duZXJEb2N1bWVudC5jcmVhdGVF'@;
put 'bGVtZW50KCJkaXYiKTpjLHRoaXMucm9vdERvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcsd18odGhpcykmJih0aGlzLnJvb3RXcmFwcGVyRWxlbWVudD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk'@;
put 'aXYiKSx0aGlzLnJvb3RQb3J0YWxFbGVtZW50PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEVpKHRoaXMucm9vdEVsZW1lbnQsImh0LXdyYXBwZXIiKSxFaSh0aGlzLnJvb3RXcmFwcGVyRWxlbWVudCwiaHQtcm9vdC13cmFwcGVyIiksdGhpcy5yb290V3JhcHBlckVs'@;
put 'ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbWVudCksdGhpcy5yb290Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMucm9vdFdyYXBwZXJFbGVtZW50KSxFaSh0aGlzLnJvb3RQb3J0YWxFbGVtZW50LCJodC1wb3J0YWwiKSx0aGlzLnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk'@;
put 'KHRoaXMucm9vdFBvcnRhbEVsZW1lbnQpKSx0aGlzLmlzRGVzdHJveWVkPSExLHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj0wLHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj0wO2NvbnN0IEJlPW51bGwhPT0oYT1sPy5sYXlvdXREaXJlY3Rpb24pJiZ2b2lkIDAhPT1hP2E6Imlu'@;
put 'aGVyaXQiLEdlPVsicnRsIiwibHRyIl0uaW5jbHVkZXMoQmUpP0JlOnRoaXMucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucm9vdEVsZW1lbnQpLmRpcmVjdGlvbjt0aGlzLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGlyIixHZSksdGhpcy5pc1J0bD1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiJydGwiPT09R2V9LHRoaXMuaXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hZi5pc1J0bCgpfSx0aGlzLmdldERpcmVjdGlvbkZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBmLmlzTHRyKCk/MTotMX0sdGhpcy5zdHlsZXNIYW5kbGVyPW5ldyBzYXQoZi5yb290RWxlbWVudCxmLnJvb3REb2N1'@;
put 'bWVudCksbC5sYW5ndWFnZT1mdW5jdGlvbiB4bnQoYyl7bGV0IGw9WjNlKGMpO3JldHVybiBncShsKXx8KGw9cHEsVzNlKGMpKSxsfShsLmxhbmd1YWdlKTtjb25zdCBzdD1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobCkuZmlsdGVyKHZ0PT57bGV0W3h0XT12dDtyZXR1cm4h'@;
put 'KE1hLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZCh4dCl8fE1hLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZCh4dCkpfSkpLHB0PW5ldyB2cGUoZixzdCxbRHJ0LEhydF0pLGR0PXB0LmdldFRhYmxlTWV0YSgpLHF0PXB0LmdldEdsb2JhbE1ldGEoKSxtbj1yUCgpO3RoaXMuY29udGFp'@;
put 'bmVyPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMucm9vdEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuY29udGFpbmVyLHRoaXMucm9vdEVsZW1lbnQuZmlyc3RDaGlsZCksd18odGhpcykmJkwyZShsLmxpY2Vuc2VLZXksdGhpcy5yb290V3JhcHBlckVsZW1l'@;
put 'bnQpLHRoaXMuZ3VpZD1gaHRfJHtnJCgpfWAsRnEuc2V0KHRoaXMuZ3VpZCx0aGlzKSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyPW5ldyBZSyx0aGlzLnJvd0luZGV4TWFwcGVyPW5ldyBZSyx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdl'@;
put 'Iix2dD0+e2YucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57Zi5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdnQpfSksdi5hZGRFdmVu'@;
put 'dExpc3RlbmVyKHRoaXMucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY29tcG9zaXRpb25zdGFydCIsdnQ9PntmLnJ1bkhvb2tzKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0Iix2dCl9KSxJPW5ldyBVdHQoZik7Y29uc3Qgd249VTIodGhpcy5ndWlkKTt3bi5yZWdpc3RlcigiY2VsbFJh'@;
put 'bmdlTWFwcGVyIixuZXcgaGF0KHtyb3dJbmRleE1hcHBlcjp0aGlzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMuY29sdW1uSW5kZXhNYXBwZXJ9KSksKCF0aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykp'@;
put 'JiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO2xldCBxbj1uZXcgYXJ0KGR0LHtyb3dJbmRleE1hcHBlcjpmLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOmYuY29sdW1uSW5kZXhNYXBwZXIsY291bnRDb2xzOigpPT5mLmNvdW50Q29scygpLGNvdW50Um93czooKT0+'@;
put 'Zi5jb3VudFJvd3MoKSxwcm9wVG9Db2w6dnQ9Pk0ucHJvcFRvQ29sKHZ0KSxpc0VkaXRvck9wZW5lZDooKT0+ISFmLmdldEFjdGl2ZUVkaXRvcigpJiZmLmdldEFjdGl2ZUVkaXRvcigpLmlzT3BlbmVkKCksY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVy'@;
put 'YWJsZUNvbHVtbnMoKSxjb3VudFJlbmRlcmFibGVSb3dzOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpLGNvdW50Um93SGVhZGVyczooKT0+dGhpcy5jb3VudFJvd0hlYWRlcnMoKSxjb3VudENvbEhlYWRlcnM6KCk9PnRoaXMuY291bnRDb2xIZWFkZXJzKCksY291bnRSZW5k'@;
put 'ZXJhYmxlUm93c0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKC4uLmFyZ3VtZW50cyl9LGNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGQudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5S'@;
put 'YW5nZSguLi5hcmd1bWVudHMpfSxnZXRTaG9ydGN1dE1hbmFnZXI6KCk9PmYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3JkczoodnQseHQpPT5mLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LHh0KSxjcmVhdGVDZWxsUmFuZ2U6KHZ0LHh0LCR0KT0+Zi5fY3JlYXRlQ2VsbFJhbmdl'@;
put 'KHZ0LHh0LCR0KSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6dnQ9Pntjb25zdHtyb3c6eHQsY29sOiR0fT12dDtyZXR1cm4gZi5fY3JlYXRlQ2VsbENvb3Jkcyh4dD49MD9mLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoeHQpOnh0LCR0Pj0wP2YuY29sdW1u'@;
put 'SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCgkdCk6JHQpfSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6dnQ9Pntjb25zdHtyb3c6eHQsY29sOiR0fT12dDtyZXR1cm4gZi5fY3JlYXRlQ2VsbENvb3Jkcyh4dD49MD9mLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZy'@;
put 'b21SZW5kZXJhYmxlSW5kZXgoeHQpOnh0LCR0Pj0wP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCgkdCk6JHQpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93Oih2dCx4dCk9Pntjb25zdCAkdD14dD52dD8xOi0xLFluPU1hdGgubWluKHZ0'@;
put 'LHh0KSwkbj1NYXRoLm1heCh2dCx4dCksYXI9Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsJHQpO3JldHVybiBudWxsPT09YXJ8fDE9PT0kdCYmYXI+JG58fC0xPT09JHQmJmFyPFluP251bGw6YXI+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxl'@;
put 'RnJvbVZpc3VhbEluZGV4KGFyKTphcn0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjoodnQseHQpPT57Y29uc3QgJHQ9eHQ+dnQ/MTotMSxZbj1NYXRoLm1pbih2dCx4dCksJG49TWF0aC5tYXgodnQseHQpLGFyPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhp'@;
put 'ZGRlbkluZGV4KHZ0LCR0KTtyZXR1cm4gbnVsbD09PWFyfHwxPT09JHQmJmFyPiRufHwtMT09PSR0JiZhcjxZbj9udWxsOmFyPj0wP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhcik6YXJ9LGlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uOih2dCx4dCk9'@;
put 'PnZ0PDB8fHh0PDA/Zi5nZXRTZXR0aW5ncygpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb246Zi5nZXRDZWxsTWV0YSh2dCx4dCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbn0pO3RoaXMuc2VsZWN0aW9uPXFuO2NvbnN0IGdyPXZ0PT57bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOnh0fT12dDt0aGlz'@;
put 'LmZvcmNlRnVsbFJlbmRlcj0hMCx4dCYmdGhpcy5zZWxlY3Rpb24uY29tbWl0KCl9O2Z1bmN0aW9uIF9pKHZ0LHh0KXtjb25zdCAkdD0iY2xhc3NOYW1lIj09PXZ0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZihFZSlFaSgkdCx4dCk7ZWxzZXtsZXQgWW49W10sJG49W107cXRbdnRdJiYoWW49'@;
put 'QXJyYXkuaXNBcnJheShxdFt2dF0pP3F0W3Z0XTpmJChxdFt2dF0pKSx4dCYmKCRuPUFycmF5LmlzQXJyYXkoeHQpP3h0OmYkKHh0KSk7Y29uc3QgYXI9aCQoWW4sJG4pLEdyPWgkKCRuLFluKTthci5sZW5ndGgmJmhzKCR0LGFyKSxHci5sZW5ndGgmJkVpKCR0LEdyKX1xdFt2dF09eHR9ZnVu'@;
put 'Y3Rpb24gUG4oKXtsZXQgdnQ9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsdnQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhp'@;
put 'cy52YWxpZGF0b3JzSW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXZ0JiYodnQ9ITAsdGhp'@;
put 'cy5vblF1ZXVlRW1wdHkodGhpcy52YWxpZCkpfX19ZnVuY3Rpb24gVXIodnQpe2NvbnN0IHh0PXZ0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KHh0KSk/cGFyc2VGbG9hdCh4dCk6dnR9ZnVuY3Rpb24gdHIodnQseHQsJHQpe2lmKCF2dC5sZW5ndGgpcmV0'@;
put 'dXJuIHZvaWQgJHQoKTtjb25zdCBZbj1mLmdldEFjdGl2ZUVkaXRvcigpLCRuPW5ldyBQbjtsZXQgYXI9ITA7JG4ub25RdWV1ZUVtcHR5PSgpPT57WW4mJmFyJiZZbi5jYW5jZWxDaGFuZ2VzKCksJHQoKX07Zm9yKGxldCBHcj12dC5sZW5ndGgtMTtHcj49MDtHci0tKXtjb25zdFtHdCxibl09'@;
put 'dnRbR3JdLHhuPU0ucHJvcFRvQ29sKGJuKTtsZXQgSW47SW49TnVtYmVyLmlzSW50ZWdlcih4bik/Zi5nZXRDZWxsTWV0YShHdCx4bik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihkdCksLi4uZHR9LGYuZ2V0Q2VsbFZhbGlkYXRvcihJbikmJigkbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCks'@;
put 'Zi52YWxpZGF0ZUNlbGwodnRbR3JdWzNdLEluLGZ1bmN0aW9uKFhuLE5uKXtyZXR1cm4gZnVuY3Rpb24odnIpe2lmKCJib29sZWFuIiE9dHlwZW9mIHZyKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT12ciYmITE9PT1Obi5h'@;
put 'bGxvd0ludmFsaWQmJihhcj0hMSx2dC5zcGxpY2UoWG4sMSksTm4udmFsaWQ9ITApLCRuLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oR3IsSW4pLHh0KSl9JG4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIEJyKHZ0LHh0KXtmb3IobGV0IFluPXZ0Lmxlbmd0aC0xO1luPj0w'@;
put 'O1luLS0pe2xldCAkbj0hMTtpZihudWxsIT09dnRbWW5dKXtpZihudWxsIT12dFtZbl1bMl18fG51bGwhPXZ0W1luXVszXSl7aWYoZHQuYWxsb3dJbnNlcnRSb3cpZm9yKDt2dFtZbl1bMF0+Zi5jb3VudFJvd3MoKS0xOyl7Y29uc3R7ZGVsdGE6YXJ9PU0uY3JlYXRlUm93KHZvaWQgMCx2b2lk'@;
put 'IDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09YXIpeyRuPSEwO2JyZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCFkdC5jb2x1bW5zfHwwPT09ZHQuY29sdW1ucy5sZW5ndGgpJiZkdC5hbGxvd0luc2VydENvbHVtbilmb3IoO00ucHJvcFRvQ29sKHZ0W1luXVsxXSk+Zi5jb3VudENv'@;
put 'bHMoKS0xOyl7Y29uc3R7ZGVsdGE6YXJ9PU0uY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09YXIpeyRuPSEwO2JyZWFrfX0kbnx8TS5zZXQodnRbWW5dWzBdLHZ0W1luXVsxXSx2dFtZbl1bM10pfX1lbHNlIHZ0LnNwbGljZShZbiwxKX1pZih2dC5sZW5n'@;
put 'dGg+MCl7Ry5hZGp1c3RSb3dzQW5kQ29scygpLGYucnVuSG9va3MoImJlZm9yZUNoYW5nZVJlbmRlciIsdnQseHQpLHJlLmNsb3NlRWRpdG9yKCksZi5yZW5kZXIoKSxyZS5wcmVwYXJlRWRpdG9yKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYucnVuSG9va3MoImFmdGVyQ2hhbmdl'@;
put 'Iix2dCx4dHx8ImVkaXQiKTtjb25zdCBZbj1mLmdldEFjdGl2ZUVkaXRvcigpO1luJiZIYShZbi5yZWZyZXNoVmFsdWUpJiZZbi5yZWZyZXNoVmFsdWUoKX1lbHNlIGYucmVuZGVyKCl9ZnVuY3Rpb24gWXIodnQseHQsJHQpe3JldHVybiBBcnJheS5pc0FycmF5KHZ0KT92dDpbW3Z0LHh0LCR0'@;
put 'XV19ZnVuY3Rpb24gd2kodnQseHQpe2NvbnN0ICR0PWYucnVuSG9va3MoImJlZm9yZUNoYW5nZSIsdnQseHR8fCJlZGl0IiksWW49dnQuZmlsdGVyKGFyPT5udWxsIT09YXIpO3ZhciAkbjtpZighMT09PSR0fHwwPT09WW4ubGVuZ3RoKXJldHVybiBudWxsPT09KCRuPWYuZ2V0QWN0aXZlRWRp'@;
put 'dG9yKCkpfHx2b2lkIDA9PT0kbnx8JG4uY2FuY2VsQ2hhbmdlcygpLFtdO2ZvcihsZXQgYXI9WW4ubGVuZ3RoLTE7YXI+PTA7YXItLSl7Y29uc3RbR3IsR3QsLGJuXT1Zblthcl0seG49TS5wcm9wVG9Db2woR3QpO2xldCBJbjtJbj1OdW1iZXIuaXNJbnRlZ2VyKHhuKT9mLmdldENlbGxNZXRh'@;
put 'KEdyLHhuKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKGR0KSwuLi5kdH07Y29uc3R7dHlwZTpYbixjaGVja2VkVGVtcGxhdGU6Tm4sdW5jaGVja2VkVGVtcGxhdGU6dnJ9PUluO2lmKCJudW1lcmljIj09PVhuJiYic3RyaW5nIj09dHlwZW9mIGJuJiZEZmUoYm4pJiYoWW5bYXJdWzNdPVVy'@;
put 'KGJuKSksImNoZWNrYm94Ij09PVhuKXtjb25zdCBXbj1vYyhibiksZnI9V249PT1vYyhObiksRHI9V249PT1vYyh2cik7KGZyfHxEcikmJihZblthcl1bM109ZnI/Tm46dnIpfX1yZXR1cm4gWW59dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsZ3Ip'@;
put 'LHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLGdyKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0UmFuZ2VFbmQiLCh2dCx4dCk9Pntjb25zdCAkdD1GZCghMSksWW49dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtm'@;
put 'cm9tOiRuLHRvOmFyfT1Zbi5jdXJyZW50KCksR3I9WW4uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLCRuLnJvdywkbi5jb2wsYXIucm93LGFyLmNvbCwkdCxHciksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLCRuLnJvdyxmLmNvbFRvUHJvcCgk'@;
put 'bi5jb2wpLGFyLnJvdyxmLmNvbFRvUHJvcChhci5jb2wpLCR0LEdyKSx4dCYmKCEkdC5pc1RvdWNoZWQoKXx8JHQuaXNUb3VjaGVkKCkmJiEkdC52YWx1ZSkmJnllLnNjcm9sbFRvKHZ0KTtjb25zdCBHdD1xbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxibj1xbi5pc1NlbGVjdGVkQnlDb2x1'@;
put 'bW5IZWFkZXIoKTtHdCYmYm4/RWkodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pOkd0Pyhocyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIiksRWkodGhpcy5yb290RWxlbWVudCwiaHRfX3Nl'@;
put 'bGVjdGlvbi0tcm93cyIpKTpibj8oaHModGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpLEVpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSk6aHModGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0'@;
put 'aW9uLS1jb2x1bW5zIl0pLFsic2hpZnQiLCJyZWZyZXNoIl0uaW5jbHVkZXMocW4uZ2V0U2VsZWN0aW9uU291cmNlKCkpfHxyZS5jbG9zZUVkaXRvcihudWxsKSwicmVmcmVzaCIhPT1xbi5nZXRTZWxlY3Rpb25Tb3VyY2UoKSYmKGYudmlldy5yZW5kZXIoKSxyZS5wcmVwYXJlRWRpdG9yKCkp'@;
put 'fSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRGb2N1cyIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsdnQucm93LHZ0LmNvbCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0Rm9jdXMiLHZ0PT57Y29uc3Qg'@;
put 'eHQ9RmQoITEpO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLHZ0LnJvdyx2dC5jb2wseHQpLCgheHQuaXNUb3VjaGVkKCl8fHh0LmlzVG91Y2hlZCgpJiYheHQudmFsdWUpJiZ5ZS5zY3JvbGxUbyh2dCkscmUuY2xvc2VFZGl0b3IoKSxmLnZpZXcucmVuZGVyKCkscmUu'@;
put 'cHJlcGFyZUVkaXRvcigpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIix2dD0+e2NvbnN0IHh0PXZ0Lmxlbmd0aC0xLHtmcm9tOiR0LHRvOllufT12dFt4dF07dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmQiLCR0LnJvdywkdC5j'@;
put 'b2wsWW4ucm93LFluLmNvbCx4dCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCR0LnJvdyxmLmNvbFRvUHJvcCgkdC5jb2wpLFluLnJvdyxmLmNvbFRvUHJvcChZbi5jb2wpLHh0KSwicmVmcmVzaCI9PT1xbi5nZXRTZWxlY3Rpb25Tb3VyY2UoKSYmKGYudmlldy5y'@;
put 'ZW5kZXIoKSxyZS5wcmVwYXJlRWRpdG9yKCkpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgeHQ9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52'@;
put 'YWx1ZT14dCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyRGVzZWxlY3QiLCgpPT57cmUuY2xvc2VFZGl0b3IoKSxmLnZpZXcucmVuZGVyKCksaHModGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRo'@;
put 'aXMucnVuSG9va3MoImFmdGVyRGVzZWxlY3QiKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlSGlnaGxpZ2h0U2V0IiwoKT0+dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IikpLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIs'@;
put 'ZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgseHQ9bmV3IEFycmF5KHZ0KSwkdD0wOyR0PHZ0OyR0KyspeHRbJHRdPWFyZ3VtZW50c1skdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLC4uLnh0KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0'@;
put 'UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLHh0PW5ldyBBcnJheSh2dCksJHQ9MDskdDx2dDskdCsrKXh0WyR0XT1hcmd1bWVudHNbJHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsLi4ueHQpfSkuYWRk'@;
put 'TG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgseHQ9bmV3IEFycmF5KHZ0KSwkdD0wOyR0PHZ0OyR0KyspeHRbJHRdPWFyZ3VtZW50c1skdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIiwuLi54'@;
put 'dCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLHh0PW5ldyBBcnJheSh2dCksJHQ9MDskdDx2dDskdCsrKXh0WyR0XT1hcmd1bWVudHNbJHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RD'@;
put 'b2x1bW5zIiwuLi54dCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgseHQ9bmV3IEFycmF5KHZ0KSwkdD0wOyR0PHZ0OyR0KyspeHRbJHRdPWFyZ3VtZW50c1skdF07cmV0dXJuIGQucnVuSG9va3MoImFm'@;
put 'dGVyU2VsZWN0Q29sdW1ucyIsLi4ueHQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCx4dD1uZXcgQXJyYXkodnQpLCR0PTA7JHQ8dnQ7JHQrKyl4dFskdF09YXJndW1lbnRzWyR0XTtyZXR1cm4gZC5ydW5I'@;
put 'b29rcygiYmVmb3JlU2VsZWN0Um93cyIsLi4ueHQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLHh0PW5ldyBBcnJheSh2dCksJHQ9MDskdDx2dDskdCsrKXh0WyR0XT1hcmd1bWVudHNbJHRdO3JldHVybiBk'@;
put 'LnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLnh0KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLHh0PW5ldyBBcnJheSh2dCksJHQ9MDskdDx2dDskdCsrKXh0WyR0XT1hcmd1bWVu'@;
put 'dHNbJHRdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4ueHQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCx4dD1uZXcgQXJyYXkodnQpLCR0PTA7JHQ8dnQ7'@;
put 'JHQrKyl4dFskdF09YXJndW1lbnRzWyR0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4ueHQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgseHQ9'@;
put 'bmV3IEFycmF5KHZ0KSwkdD0wOyR0PHZ0OyR0KyspeHRbJHRdPWFyZ3VtZW50c1skdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi54dCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1h'@;
put 'cmd1bWVudHMubGVuZ3RoLHh0PW5ldyBBcnJheSh2dCksJHQ9MDskdDx2dDskdCsrKXh0WyR0XT1hcmd1bWVudHNbJHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi54dCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIs'@;
put 'ZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgseHQ9bmV3IEFycmF5KHZ0KSwkdD0wOyR0PHZ0OyR0KyspeHRbJHRdPWFyZ3VtZW50c1skdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUVuZCIsLi4ueHQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlm'@;
put 'eVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgseHQ9bmV3IEFycmF5KHZ0KSwkdD0wOyR0PHZ0OyR0KyspeHRbJHRdPWFyZ3VtZW50c1skdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi54dCl9KS5hZGRM'@;
put 'b2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLHh0PW5ldyBBcnJheSh2dCksJHQ9MDskdDx2dDskdCsrKXh0WyR0XT1hcmd1bWVudHNbJHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi54dCl9KS5hZGRM'@;
put 'b2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLHh0PW5ldyBBcnJheSh2dCksJHQ9MDskdDx2dDskdCsrKXh0WyR0XT1hcmd1bWVudHNbJHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi54dCl9'@;
put 'KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT50aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix2dCwxLCJhdXRvIikpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsdnQ9PnRoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKSksRz17'@;
put 'YWx0ZXIodnQseHQpe2xldCAkdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxZbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCwkbj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25z'@;
put 'dCBhcj1Hcj0+e2lmKDA9PT1Hci5sZW5ndGgpcmV0dXJuW107Y29uc3QgR3Q9Wy4uLkdyXTtyZXR1cm4gR3Quc29ydCgoeG4sSW4pPT57bGV0W1huXT14bixbTm5dPUluO3JldHVybiBYbj09PU5uPzA6WG4+Tm4/MTotMX0pLEd1KEd0LCh4bixJbik9PntsZXRbWG4sTm5dPUluO2NvbnN0IHZy'@;
put 'PXhuW3huLmxlbmd0aC0xXSxbV24sZnJdPXZyLERyPVduK2ZyO2lmKFhuPD1Ecil7Y29uc3QgT3I9TWF0aC5tYXgoTm4tKERyLVhuKSwwKTt2clsxXSs9T3J9ZWxzZSB4bi5wdXNoKFtYbixObl0pO3JldHVybiB4bn0sW0d0WzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93'@;
put 'IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOmNvbnN0IEdyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYoZHQubWF4Um93cz09PUdyKXJldHVybjtjb25zdCBHdD0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7eHQ9eHQ/PygiYmVsb3ciPT09R3Q/R3I6MCk7Y29uc3R7ZGVs'@;
put 'dGE6Ym4sc3RhcnRQaHlzaWNhbEluZGV4OnhufT1NLmNyZWF0ZVJvdyh4dCwkdCx7c291cmNlOlluLG1vZGU6R3R9KTtxbi5zaGlmdFJvd3MoZi50b1Zpc3VhbFJvdyh4biksYm4pO2JyZWFrO2Nhc2UiaW5zZXJ0X2NvbF9zdGFydCI6Y2FzZSJpbnNlcnRfY29sX2VuZCI6Y29uc3QgSW49Imlu'@;
put 'c2VydF9jb2xfZW5kIj09PXZ0PyJlbmQiOiJzdGFydCI7eHQ9eHQ/PygiZW5kIj09PUluP2YuY291bnRTb3VyY2VDb2xzKCk6MCk7Y29uc3R7ZGVsdGE6WG4sc3RhcnRQaHlzaWNhbEluZGV4Ok5ufT1NLmNyZWF0ZUNvbCh4dCwkdCx7c291cmNlOlluLG1vZGU6SW59KTtpZihYbil7aWYoQXJy'@;
put 'YXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSl7Y29uc3QgZnI9W2YudG9WaXN1YWxDb2x1bW4oTm4pLDBdO2ZyLmxlbmd0aCs9WG4sQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShkdC5jb2xIZWFkZXJzLGZyKX1xbi5zaGlmdENvbHVtbnMoZi50b1Zpc3VhbENvbHVtbihObiksWG4pfWJy'@;
put 'ZWFrO2Nhc2UicmVtb3ZlX3JvdyI6Y29uc3QgdnI9ZnI9PntsZXQgRHI9MDtLbihmcixPcj0+e2xldFt1aSxFYV09T3I7Y29uc3QgWmk9amModWkpP2YuY291bnRSb3dzKCktMTpNYXRoLm1heCh1aS1EciwwKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHVpKSYmKHVpPU1hdGgubWF4KHVpLURyLDAp'@;
put 'KSwhTS5yZW1vdmVSb3codWksRWEsWW4pKXJldHVybjtpZihxbi5pc1NlbGVjdGVkKCkpe2NvbnN0e3JvdzpNc309Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtNcz49dWkmJk1zPD11aStFYS0xJiZyZS5jbG9zZUVkaXRvcighMCl9Y29uc3QgdW89Zi5jb3VudFJvd3MoKSxX'@;
put 'cz1kdC5maXhlZFJvd3NUb3A7V3M+PVppKzEmJihkdC5maXhlZFJvd3NUb3AtPU1hdGgubWluKEVhLFdzLVppKSk7Y29uc3QgU3M9ZHQuZml4ZWRSb3dzQm90dG9tO2lmKFNzJiZaaT49dW8tU3MmJihkdC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKEVhLFNzKSksMD09PXVvKXFuLmRlc2Vs'@;
put 'ZWN0KCk7ZWxzZSBpZigiQ29udGV4dE1lbnUucmVtb3ZlUm93Ij09PVluKXtjb25zdCBNcz1xbi5nZXRTZWxlY3RlZFJhbmdlKCksZm89TXMucG9wKCk7TXMuY2xlYXIoKS5zZXQoZm8uZnJvbSkuY3VycmVudCgpLnNldFRvKGZvLnRvKSxxbi5yZWZyZXNoKCl9ZWxzZSBxbi5zaGlmdFJvd3Mo'@;
put 'dWksLUVhKTtEcis9RWF9KX07QXJyYXkuaXNBcnJheSh4dCk/dnIoYXIoeHQpKTp2cihbW3h0LCR0XV0pO2JyZWFrO2Nhc2UicmVtb3ZlX2NvbCI6Y29uc3QgV249ZnI9PntsZXQgRHI9MDtLbihmcixPcj0+e2xldFt1aSxFYV09T3I7Y29uc3QgWmk9amModWkpP2YuY291bnRDb2xzKCktMTpN'@;
put 'YXRoLm1heCh1aS1EciwwKTtsZXQgRHM9Zi50b1BoeXNpY2FsQ29sdW1uKFppKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHVpKSYmKHVpPU1hdGgubWF4KHVpLURyLDApKSwhTS5yZW1vdmVDb2wodWksRWEsWW4pKXJldHVybjtpZihxbi5pc1NlbGVjdGVkKCkpe2NvbnN0e2NvbDpNc309Zi5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtNcz49dWkmJk1zPD11aStFYS0xJiZyZS5jbG9zZUVkaXRvcighMCl9aWYoMD09PWYuY291bnRDb2xzKCkpcW4uZGVzZWxlY3QoKTtlbHNlIGlmKCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iPT09WW4pe2NvbnN0IE1zPXFuLmdldFNlbGVj'@;
put 'dGVkUmFuZ2UoKSxmbz1Ncy5wb3AoKTtNcy5jbGVhcigpLnNldChmby5mcm9tKS5jdXJyZW50KCkuc2V0VG8oZm8udG8pLHFuLnJlZnJlc2goKX1lbHNlIHFuLnNoaWZ0Q29sdW1ucyh1aSwtRWEpO2NvbnN0IFNzPWR0LmZpeGVkQ29sdW1uc1N0YXJ0O1NzPj1aaSsxJiYoZHQuZml4ZWRDb2x1'@;
put 'bW5zU3RhcnQtPU1hdGgubWluKEVhLFNzLVppKSksQXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSYmKHR5cGVvZiBEcz4idSImJihEcz0tMSksZHQuY29sSGVhZGVycy5zcGxpY2UoRHMsRWEpKSxEcis9RWF9KX07QXJyYXkuaXNBcnJheSh4dCk/V24oYXIoeHQpKTpXbihbW3h0LCR0XV0p'@;
put 'O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBzdWNoIGFjdGlvbiAiJHt2dH0iYCl9JG58fEcuYWRqdXN0Um93c0FuZENvbHMoKSxmLnZpZXcucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHZ0'@;
put 'PWR0Lm1pblJvd3MseHQ9ZHQubWluU3BhcmVSb3dzLCR0PWR0Lm1pbkNvbHMsWW49ZHQubWluU3BhcmVDb2xzO2lmKHZ0KXtjb25zdCAkbj1mLmNvdW50Um93cygpOyRuPHZ0JiZNLmNyZWF0ZVJvdygkbix2dC0kbix7c291cmNlOiJhdXRvIn0pfWlmKHh0KXtjb25zdCAkbj1mLmNvdW50RW1w'@;
put 'dHlSb3dzKCEwKTtpZigkbjx4dCl7Y29uc3QgR3I9TWF0aC5taW4oeHQtJG4sZHQubWF4Um93cy1mLmNvdW50U291cmNlUm93cygpKTtNLmNyZWF0ZVJvdyhmLmNvdW50Um93cygpLEdyLHtzb3VyY2U6ImF1dG8ifSl9fXtsZXQgJG47KCR0fHxZbikmJigkbj1mLmNvdW50RW1wdHlDb2xzKCEw'@;
put 'KSk7bGV0IGFyPWYuY291bnRDb2xzKCk7aWYoJHQmJiFkdC5jb2x1bW5zJiZhcjwkdCl7Y29uc3QgR3I9JHQtYXI7JG4rPUdyLE0uY3JlYXRlQ29sKGFyLEdyLHtzb3VyY2U6ImF1dG8ifSl9aWYoWW4mJiFkdC5jb2x1bW5zJiYiYXJyYXkiPT09Zi5kYXRhVHlwZSYmJG48WW4pe2FyPWYuY291'@;
put 'bnRDb2xzKCk7Y29uc3QgR3Q9TWF0aC5taW4oWW4tJG4sZHQubWF4Q29scy1hcik7TS5jcmVhdGVDb2woYXIsR3Qse3NvdXJjZToiYXV0byJ9KX19fSxwb3B1bGF0ZUZyb21BcnJheSh2dCx4dCwkdCxZbiwkbil7bGV0IGFyLEdyLEd0LGJuO2NvbnN0IHhuPVtdLEluPXt9LFhuPVtdLE5uPXZ0'@;
put 'LnJvdyx2cj12dC5jb2w7aWYoR3I9eHQubGVuZ3RoLDA9PT1HcilyZXR1cm4hMTtsZXQgV249MCxmcj0wO3N3aXRjaChYcygkdCkmJihXbj0kdC5jb2wtdnIrMSxmcj0kdC5yb3ctTm4rMSksJG4pe2Nhc2Uic2hpZnRfZG93biI6Y29uc3QgRHI9dkUoeHQpLE9yPURyLmxlbmd0aCx1aT1NYXRo'@;
put 'Lm1heChPcixXbiksRWE9Zi5nZXREYXRhKCkuc2xpY2UoTm4pLFppPXZFKEVhKS5zbGljZSh2cix2cit1aSk7Zm9yKEd0PTA7R3Q8dWk7R3QrPTEpaWYoR3Q8T3Ipe2Zvcihhcj0wLEdyPURyW0d0XS5sZW5ndGg7YXI8ZnItR3I7YXIrPTEpRHJbR3RdLnB1c2goRHJbR3RdW2FyJUdyXSk7WG4u'@;
put 'cHVzaChEcltHdF0uY29uY2F0KEd0PFppLmxlbmd0aD9aaVtHdF06bmV3IEFycmF5KEVhLmxlbmd0aCkuZmlsbChudWxsKSkpfWVsc2UgWG4ucHVzaChEcltHdCVPcl0uY29uY2F0KFppW0d0XSkpO2YucG9wdWxhdGVGcm9tQXJyYXkoTm4sdnIsdkUoWG4pKTticmVhaztjYXNlInNoaWZ0X3Jp'@;
put 'Z2h0Ijpjb25zdCBEcz14dC5sZW5ndGgsdW89TWF0aC5tYXgoRHMsZnIpLFdzPWYuZ2V0RGF0YSgpLnNsaWNlKE5uKS5tYXAodGM9PnRjLnNsaWNlKHZyKSk7Zm9yKGFyPTA7YXI8dW87YXIrPTEpaWYoYXI8RHMpe2ZvcihHdD0wLGJuPXh0W2FyXS5sZW5ndGg7R3Q8V24tYm47R3QrPTEpeHRb'@;
put 'YXJdLnB1c2goeHRbYXJdW0d0JWJuXSk7aWYoYXI8V3MubGVuZ3RoKWZvcihsZXQgdGM9MDt0YzxXc1thcl0ubGVuZ3RoO3RjKz0xKXh0W2FyXS5wdXNoKFdzW2FyXVt0Y10pO2Vsc2UgeHRbYXJdLnB1c2goLi4ubmV3IEFycmF5KFdzWzBdLmxlbmd0aCkuZmlsbChudWxsKSl9ZWxzZSB4dC5w'@;
put 'dXNoKHh0W2FyJUdyXS5zbGljZSgwLHVvKS5jb25jYXQoV3NbYXJdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheShObix2cix4dCk7YnJlYWs7ZGVmYXVsdDpJbi5yb3c9dnQucm93LEluLmNvbD12dC5jb2w7bGV0IHgwLFNzPTAsTXM9MCxmbz0hMDtjb25zdCBZaD1mdW5jdGlvbigkbyl7bGV0ICRs'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2NvbnN0IGtvPXh0WyRvJXh0Lmxlbmd0aF07cmV0dXJuIG51bGwhPT0kbD9rb1skbCVrby5sZW5ndGhdOmtvfSxRZD14dC5sZW5ndGgsRGM9JHQ/JHQucm93LXZ0LnJvdysxOjA7Zm9y'@;
put 'KEdyPSR0P0RjOk1hdGgubWF4KFFkLERjKSxhcj0wO2FyPEdyJiYhKCR0JiZJbi5yb3c+JHQucm93JiZEYz5RZHx8IWR0LmFsbG93SW5zZXJ0Um93JiZJbi5yb3c+Zi5jb3VudFJvd3MoKS0xfHxJbi5yb3c+PWR0Lm1heFJvd3MpO2FyKyspe2NvbnN0IHRjPWFyLVNzLCRvPVloKHRjKS5sZW5n'@;
put 'dGgsJGw9JHQ/JHQuY29sLXZ0LmNvbCsxOjA7aWYoYm49JHQ/JGw6TWF0aC5tYXgoJG8sJGwpLEluLmNvbD12dC5jb2wseDA9Zi5nZXRDZWxsTWV0YShJbi5yb3csSW4uY29sKSwiQ29weVBhc3RlLnBhc3RlIiE9PVluJiYiQXV0b2ZpbGwuZmlsbCIhPT1Zbnx8IXgwLnNraXBSb3dPblBhc3Rl'@;
put 'KXtmb3IoTXM9MCxHdD0wO0d0PGJuJiYhKCR0JiZJbi5jb2w+JHQuY29sJiYkbD4kb3x8IWR0LmFsbG93SW5zZXJ0Q29sdW1uJiZJbi5jb2w+Zi5jb3VudENvbHMoKS0xfHxJbi5jb2w+PWR0Lm1heENvbHMpO0d0Kyspe2lmKHgwPWYuZ2V0Q2VsbE1ldGEoSW4ucm93LEluLmNvbCksKCJDb3B5'@;
put 'UGFzdGUucGFzdGUiPT09WW58fCJBdXRvZmlsbC5maWxsIj09PVluKSYmeDAuc2tpcENvbHVtbk9uUGFzdGUpe01zKz0xLEluLmNvbCs9MSxibis9MTtjb250aW51ZX1pZih4MC5yZWFkT25seSYmIlVuZG9SZWRvLnVuZG8iIT09WW4pe0luLmNvbCs9MTtjb250aW51ZX1sZXQgb2Q9WWgodGMs'@;
put 'R3QtTXMpLHRzPWYuZ2V0RGF0YUF0Q2VsbChJbi5yb3csSW4uY29sKTtpZihudWxsIT09b2QmJiJvYmplY3QiPT10eXBlb2Ygb2QpaWYoQXJyYXkuaXNBcnJheShvZCkmJm51bGw9PT10cyYmKHRzPVtdKSxudWxsPT09dHN8fCJvYmplY3QiIT10eXBlb2YgdHMpZm89ITE7ZWxzZXtjb25zdCBx'@;
put 'Zz1yXyhBcnJheS5pc0FycmF5KHRzKT90czp0c1swXXx8dHMpLFJ3PXJfKEFycmF5LmlzQXJyYXkob2QpP29kOm9kWzBdfHxvZCk7SE8ocWcsUncpfHxBcnJheS5pc0FycmF5KHFnKSYmQXJyYXkuaXNBcnJheShSdyk/b2Q9cDEob2QpOmZvPSExfWVsc2UgbnVsbCE9PXRzJiYib2JqZWN0Ij09'@;
put 'dHlwZW9mIHRzJiYoZm89ITEpO2ZvJiZ4bi5wdXNoKFtJbi5yb3csSW4uY29sLG9kXSksZm89ITAsSW4uY29sKz0xfUluLnJvdys9MX1lbHNlIFNzKz0xLEluLnJvdys9MSxHcis9MX1mLnNldERhdGFBdENlbGwoeG4sbnVsbCxudWxsLFlufHwicG9wdWxhdGVGcm9tQXJyYXkiKX19fSx0aGlz'@;
put 'LmluaXQ9ZnVuY3Rpb24oKXtJLnNldERhdGEoZHQuZGF0YSksZi5ydW5Ib29rcygiYmVmb3JlSW5pdCIpLChvMygpfHxNJCgpKSYmRWkoZi5yb290RWxlbWVudCwibW9iaWxlIiksdGhpcy51cGRhdGVTZXR0aW5ncyhsLCEwKSx0aGlzLnZpZXc9bmV3IFB0dCh0aGlzKTtjb25zdCB2dD1kdC50'@;
put 'aGVtZU5hbWV8fElwZShmLnJvb3RDb250YWluZXIpO2YudXNlVGhlbWUodnQpLHJlPWNKZS5nZXRJbnN0YW5jZShmLGR0LHFuKSx5ZT1mdW5jdGlvbiBYcnQoYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bGV0IGE9ITEsZD0hMTtyZXR1cm57cmVzdW1lKCl7ZD0hMX0sc3VzcGVuZCgpe2Q9ITB9'@;
put 'LHNraXBOZXh0U2Nyb2xsQ3ljbGUoKXthPSEwfSxzY3JvbGxUbyhoKXt2YXIgZjtpZihhfHxkKXJldHVybiB2b2lkKGE9ITEpO2xldCB2O2wuaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKT92PWZ1bmN0aW9uIFdydChjKXtyZXR1cm4gbD0+e2Muc2Nyb2xsVmlld3BvcnRUbyhsLnRvT2JqZWN0'@;
put 'KCksKCk9Pntjb25zdHtyb3c6YSxjb2w6ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtBXyhjLmdldENlbGwoYSxkLCEwKSl9KX19KGMpOmwuaXNTZWxlY3RlZEJ5Q29ybmVyKCk/dj0oKT0+e306bC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT92PWZ1bmN0aW9uICRydChj'@;
put 'KXtyZXR1cm4gbD0+e2NvbnN0IGE9alAoYykuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCk7Yy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6YX0sKCk9Pntjb25zdCBkPSEhYy5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnM7QV8oYy5nZXRDZWxsKGEsZD8tMTowLCEwKSl9KX19KGMpOmwuaXNTZWxlY3Rl'@;
put 'ZEJ5Q29sdW1uSGVhZGVyKCk/dj1mdW5jdGlvbiBVcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPWpQKGMpLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpO2Muc2Nyb2xsVmlld3BvcnRUbyh7Y29sOmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzO0FfKGMuZ2V0'@;
put 'Q2VsbChkPy0xOjAsYSwhMCkpfSl9fShjKToxPT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpJiZsLmlzTXVsdGlwbGUoKT92PWZ1bmN0aW9uIFlydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9alAoYyksZD17cm93OmEuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEuZ2V0Q29tcHV0'@;
put 'ZWRDb2x1bW5UYXJnZXQobCl9O2Muc2Nyb2xsVmlld3BvcnRUbyhkLCgpPT57Y29uc3R7cm93OmgsY29sOmZ9PWQ7QV8oYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKToxIT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpfHxsLmlzTXVsdGlwbGUoKT9sLmdldFNlbGVjdGVkUmFuZ2UoKS5z'@;
put 'aXplKCk+MSYmKHY9ZnVuY3Rpb24gR3J0KGMpe3JldHVybiBsPT57Y29uc3QgYT1qUChjKSxkPXtyb3c6YS5nZXRDb21wdXRlZFJvd1RhcmdldChsKSxjb2w6YS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKX07Yy5zY3JvbGxWaWV3cG9ydFRvKGQsKCk9Pntjb25zdHtyb3c6aCxjb2w6Zn09'@;
put 'ZDtBXyhjLmdldENlbGwoaCxmLCEwKSl9KX19KGMpKTp2PWZ1bmN0aW9uIEtydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU291cmNlKCkse3JvdzpkLGNvbDpofT1sLGY9KCk9PntBXyhjLmdldENlbGwoZCxoLCEwKSl9O2lmKGQ8MCYmaD49MCljLnNj'@;
put 'cm9sbFZpZXdwb3J0VG8oe2NvbDpofSxmKTtlbHNlIGlmKGg8MCYmZD49MCljLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpkfSxmKTtlbHNle2lmKCJtb3VzZSI9PT1hJiYoaD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfHxkPT09Yy52aWV3LmdldExhc3RQYXJ0aWFs'@;
put 'bHlWaXNpYmxlUm93KCkpKXJldHVybjtjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpkLGNvbDpofSxmKX19fShjKSxudWxsPT09KGY9dil8fHZvaWQgMD09PWZ8fGYoaCl9fX0oZiksdWU9bmV3IGRKZShmKSx3Xyh0aGlzKSYmZnVuY3Rpb24gSnJ0KGMpe2NvbnN0IGw9ZnVuY3Rpb24gUXJ0KGMp'@;
put 'e3JldHVybiBsPT57aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1UcShjKSxkPUFxKGMpO3JldHVybiBsLmNvbDxhLmNvbCYmKGwuY29sPWEuY29sKSxsLmNvbD5kLmNvbCYmKGwuY29sPWQuY29sKSxsLnJvdzxhLnJvdyYmKGwucm93PWEucm93KSxsLnJvdz5kLnJvdyYmKGwucm93PWQucm93'@;
put 'KSxsfX0oYyk7bGV0IGE7Y29uc3R7YWN0aXZhdGU6ZCxkZWFjdGl2YXRlOmh9PWZ1bmN0aW9uIHFydChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3QgYT1jLnJvb3RFbGVtZW50LGQ9TXBlKGMpLGg9TXBlKGMp'@;
put 'O3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+bD8ub25Gb2N1c0Zyb21Ub3AoKSksaC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmw/Lm9uRm9jdXNGcm9tQm90dG9tKCkpLGEuYmVmb3JlKGQpLGEuYWZ0ZXIoaCkse2FjdGl2YXRlKCl7Yy5fcmVnaXN0ZXJUaW1l'@;
put 'b3V0KCgpPT57ZC50YWJJbmRleD0wLGgudGFiSW5kZXg9MH0sMTApfSxkZWFjdGl2YXRlKCl7Yy5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57ZC50YWJJbmRleD0tMSxoLnRhYkluZGV4PS0xfSwxMCl9fX0oYyx7b25Gb2N1c0Zyb21Ub3AoKXt2YXIgdWU7Y29uc3QgeWU9bnVsbCE9PSh1ZT1sKGEp'@;
put 'KSYmdm9pZCAwIT09dWU/dWU6VHEoYyk7eWUmJihjLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImZyb21fYWJvdmUiLHllKSxjLnNlbGVjdENlbGwoeWUucm93LHllLmNvbCkpLGMubGlzdGVuKCl9LG9uRm9jdXNGcm9tQm90dG9tKCl7dmFyIHVlO2NvbnN0IHllPW51'@;
put 'bGwhPT0odWU9bChhKSkmJnZvaWQgMCE9PXVlP3VlOkFxKGMpO3llJiYoYy5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2JlbG93Iix5ZSksYy5zZWxlY3RDZWxsKHllLnJvdyx5ZS5jb2wpKSxjLmxpc3RlbigpfX0pLGY9e3dyYXBwZWQ6ITEsZmxpcHBlZDoh'@;
put 'MX07bGV0IHY9ITAsTT0hMSxJPSExO2MuYWRkSG9vaygiYWZ0ZXJMaXN0ZW4iLCgpPT5oKCkpLGMuYWRkSG9vaygiYWZ0ZXJVbmxpc3RlbiIsKCk9PmQoKSksYy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKHVlLHllLEVlLEJlLEdlKT0+e3ZhciBzdDtNJiYoZi53cmFwcGVkJiZmLmZsaXBw'@;
put 'ZWR8fEkpJiYoST0hMSxHZS52YWx1ZT0hMCksdiYmKGE9bnVsbD09PShzdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1zdD92b2lkIDA6c3QuaGlnaGxpZ2h0KX0pLGMuYWRkSG9vaygiYmVmb3JlUm93V3JhcCIsKHVlLHllLEVlKT0+e2Yud3JhcHBlZD0hMCxmLmZsaXBw'@;
put 'ZWQ9RWV9KTtjb25zdCByZT17a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLHN0b3BQcm9wYWdhdGlvbjohMSxyZWxhdGl2ZVRvR3JvdXA6U3BlLGdyb3VwOiJmb2N1c0NhdGNoZXIifTtjLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdy'@;
put 'aWQiKS5hZGRTaG9ydGN1dHMoW3suLi5yZSxjYWxsYmFjazooKT0+e2NvbnN0e3RhYk5hdmlnYXRpb246dWV9PWMuZ2V0U2V0dGluZ3MoKTtNPSEwLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSYmIXVlJiYodj0hMSksdWV8fChJPSEwKX0scG9zaXRpb246ImJlZm9yZSJ9LHsuLi5yZSxjYWxs'@;
put 'YmFjazp1ZT0+e2NvbnN0e3RhYk5hdmlnYXRpb246eWUsYXV0b1dyYXBSb3c6RWV9PWMuZ2V0U2V0dGluZ3MoKTtpZihNPSExLHY9ITAsIXllfHwhYy5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpfHxFZSYmZi53cmFwcGVkJiZmLmZsaXBwZWR8fCFFZSYmZi53cmFwcGVkKXJldHVybiBFZSYmZi53'@;
put 'cmFwcGVkJiZmLmZsaXBwZWQmJihhPXVlLnNoaWZ0S2V5P1RxKGMpOkFxKGMpKSxmdW5jdGlvbiBHKCl7Zi53cmFwcGVkPSExLGYuZmxpcHBlZD0hMSxjLmRlc2VsZWN0Q2VsbCgpLGMudW5saXN0ZW4oKX0oKSwhMTt1ZS5wcmV2ZW50RGVmYXVsdCgpfSxwb3NpdGlvbjoiYWZ0ZXIifV0pfShm'@;
put 'KSxmLnJ1bkhvb2tzKCJpbml0IiksdGhpcy5yZW5kZXIoKSxFZSYmbnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZjZmUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRq'@;
put 'dXN0RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09dHlwZW9mIEVlJiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLEVlWzBdLEVlWzFdKSxFZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24odnQseHQpe3JldHVybiBmLnZpZXcu'@;
put 'X3d0LmNyZWF0ZUNlbGxDb29yZHModnQseHQpfSx0aGlzLl9jcmVhdGVDZWxsUmFuZ2U9ZnVuY3Rpb24odnQseHQsJHQpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh2dCx4dCwkdCl9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKHZ0LHh0LCR0LFluKXtsZXQgJG49Zi5n'@;
put 'ZXRDZWxsVmFsaWRhdG9yKHh0KTtmdW5jdGlvbiBhcihHcil7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09eHQuaGlkZGVuKXJldHVybiB2b2lkICR0KEdyKTtjb25zdCBibj14dC52aXN1YWxDb2wseG49eHQudmlzdWFs'@;
put 'Um93LEluPWYuZ2V0Q2VsbCh4bixibiwhMCk7aWYoSW4mJiJUSCIhPT1Jbi5ub2RlTmFtZSl7Y29uc3QgWG49Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHhuKSxObj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgo'@;
put 'Ym4pO2Yudmlldy5fd3QuZ2V0U2V0dGluZygiY2VsbFJlbmRlcmVyIixYbixObixJbil9JHQoR3IpfUEyZSgkbikmJigkbj1mdW5jdGlvbihHcil7cmV0dXJuIGZ1bmN0aW9uKEd0LGJuKXtibihHci50ZXN0KEd0KSl9fSgkbikpLGZsKCRuKT8odnQ9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRh'@;
put 'dGUiLHZ0LHh0LnZpc3VhbFJvdyx4dC5wcm9wLFluKSxmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+eyRuLmNhbGwoeHQsdnQsR3I9PntmJiYoR3I9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsR3IsdnQseHQudmlzdWFsUm93LHh0LnByb3AsWW4pLHh0LnZhbGlkPUdyLGFyKEdyKSxmLnJ1'@;
put 'bkhvb2tzKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsR3IsdnQseHQudmlzdWFsUm93LHh0LnByb3AsWW4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57eHQudmFsaWQ9ITAsYXIoeHQudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCx4dCwkdCxZbil7Y29u'@;
put 'c3QgJG49WXIodnQseHQsJHQpLGFyPVtdO2xldCBHdCxibix4bixHcj1Zbjtmb3IoR3Q9MCxibj0kbi5sZW5ndGg7R3Q8Ym47R3QrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiAkbltHdF0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBv'@;
put 'ciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7aWYoIm51bWJlciIhPXR5cGVvZiAkbltHdF1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFuZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0'@;
put 'ZXJzLiBJZiB5b3Ugd2FudCB0byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBtZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7eG49JG5bR3RdWzFdPj10aGlzLmNvdW50Q29scygpPyRuW0d0XVsxXTpNLmNvbFRvUHJvcCgkbltHdF1bMV0pLGFyLnB1c2goWyRuW0d0XVswXSx4bixJ'@;
put 'LmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coJG5bR3RdWzBdKSwkbltHdF1bMV0pLCRuW0d0XVsyXV0pfSFHciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKEdyPXh0KTtjb25zdCBJbj13aShhcixHcik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixJbixHciksdHIoSW4sR3Is'@;
put 'KCk9PntCcihJbixHcil9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LHh0LCR0LFluKXtjb25zdCAkbj1Zcih2dCx4dCwkdCksYXI9W107bGV0IEd0LGJuLEdyPVluO2ZvcihHdD0wLGJuPSRuLmxlbmd0aDtHdDxibjtHdCsrKWFyLnB1c2goWyRuW0d0XVswXSwkbltHdF1b'@;
put 'MV0sSS5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KCRuW0d0XVswXSksJG5bR3RdWzFdKSwkbltHdF1bMl1dKTshR3ImJiJvYmplY3QiPT10eXBlb2YgdnQmJihHcj14dCk7Y29uc3QgeG49d2koYXIsWW4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIseG4sR3IpLHRy'@;
put 'KHhuLEdyLCgpPT57QnIoeG4sR3IpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYmIWYuaXNMaXN0ZW5pbmcoKSYmKEZxLmZvckVhY2godnQ9PntmIT09dnQmJnZ0LnVubGlzdGVuKCl9KSxQcT1mLmd1aWQsZi5ydW5Ib29rcygiYWZ0ZXJMaXN0ZW4iKSl9LHRoaXMudW5saXN0ZW49ZnVu'@;
put 'Y3Rpb24oKXt0aGlzLmlzTGlzdGVuaW5nKCkmJihQcT1udWxsLGYucnVuSG9va3MoImFmdGVyVW5saXN0ZW4iKSl9LHRoaXMuaXNMaXN0ZW5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUHE9PT1mLmd1aWR9LHRoaXMuZGVzdHJveUVkaXRvcj1mdW5jdGlvbigpe2xldCB4dD0hKGFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3JlLmNsb3NlRWRpdG9yKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLGYudmlldy5yZW5kZXIoKSx4dCYmcW4uaXNTZWxlY3RlZCgpJiZyZS5wcmVwYXJl'@;
put 'RWRpdG9yKCl9LHRoaXMucG9wdWxhdGVGcm9tQXJyYXk9ZnVuY3Rpb24odnQseHQsJHQsWW4sJG4sYXIsR3Ipe2lmKCJvYmplY3QiIT10eXBlb2YgJHR8fCJvYmplY3QiIT10eXBlb2YgJHRbMF0pdGhyb3cgbmV3IEVycm9yKCJwb3B1bGF0ZUZyb21BcnJheSBwYXJhbWV0ZXIgYGlucHV0YCBt'@;
put 'dXN0IGJlIGFuIGFycmF5IG9mIGFycmF5cyIpO2NvbnN0IEd0PSJudW1iZXIiPT10eXBlb2YgWW4/Zi5fY3JlYXRlQ2VsbENvb3JkcyhZbiwkbik6bnVsbDtyZXR1cm4gRy5wb3B1bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LHh0KSwkdCxHdCxhcixHcil9LHRoaXMuc3Bs'@;
put 'aWNlQ29sPWZ1bmN0aW9uKHZ0LHh0LCR0KXtmb3IodmFyIFluPWFyZ3VtZW50cy5sZW5ndGgsJG49bmV3IEFycmF5KFluPjM/WW4tMzowKSxhcj0zO2FyPFluO2FyKyspJG5bYXItM109YXJndW1lbnRzW2FyXTtyZXR1cm4gTS5zcGxpY2VDb2wodnQseHQsJHQsLi4uJG4pfSx0aGlzLnNwbGlj'@;
put 'ZVJvdz1mdW5jdGlvbih2dCx4dCwkdCl7Zm9yKHZhciBZbj1hcmd1bWVudHMubGVuZ3RoLCRuPW5ldyBBcnJheShZbj4zP1luLTM6MCksYXI9MzthcjxZbjthcisrKSRuW2FyLTNdPWFyZ3VtZW50c1thcl07cmV0dXJuIE0uc3BsaWNlUm93KHZ0LHh0LCR0LC4uLiRuKX0sdGhpcy5nZXRTZWxl'@;
put 'Y3RlZD1mdW5jdGlvbigpe2lmKHFuLmlzU2VsZWN0ZWQoKSlyZXR1cm4geW8ocW4uZ2V0U2VsZWN0ZWRSYW5nZSgpLHZ0PT57bGV0e2Zyb206eHQsdG86JHR9PXZ0O3JldHVyblt4dC5yb3cseHQuY29sLCR0LnJvdywkdC5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRMYXN0PWZ1bmN0aW9uKCl7'@;
put 'Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCB4dDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoeHQ9dnRbdnQubGVuZ3RoLTFdKSx4dH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYocW4uaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5mcm9tKHFuLmdldFNlbGVj'@;
put 'dGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgeHQ7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKHh0PXZ0W3Z0Lmxlbmd0aC0xXSkseHR9LHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzPWZ1'@;
put 'bmN0aW9uKHZ0KXtpZighcW4uaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IHh0PVtdO0tuKHFuLmdldFNlbGVjdGVkUmFuZ2UoKSwkdD0+e2lmKCR0LmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuO2NvbnN0IFluPSR0'@;
put 'LmdldFRvcFN0YXJ0Q29ybmVyKCksJG49JHQuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7S2EoWW4ucm93LCRuLnJvdyxhcj0+e0thKFluLmNvbCwkbi5jb2wsR3I9Pnt0aGlzLmdldENlbGxNZXRhKGFyLEdyKS5yZWFkT25seXx8eHQucHVzaChbYXIsR3IsbnVsbF0pfSl9KX0pLHh0Lmxlbmd0aD4w'@;
put 'JiZ0aGlzLnNldERhdGFBdENlbGwoeHQsdnQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRo'@;
put 'aXMucmVzdW1lUmVuZGVyPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHZ0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkmJnZ0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3Vu'@;
put 'dGVyJiZmLnZpZXcucmVuZGVyKCl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy52aWV3JiYodGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpfHxmLnZpZXcucmVuZGVyKCkpfSx0aGlzLmJhdGNoUmVuZGVyPWZ1bmN0aW9uKHZ0KXt0aGlzLnN1c3Bl'@;
put 'bmRSZW5kZXIoKTtjb25zdCB4dD12dCgpO3JldHVybiB0aGlzLnJlc3VtZVJlbmRlcigpLHh0fSx0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRFeGVjdXRpb249ZnVuY3Rpb24o'@;
put 'KXt0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXIrPTEsdGhpcy5jb2x1bW5JbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMoKX0sdGhpcy5yZXN1bWVFeGVjdXRpb249ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCB4dD10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXItMTt0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9TWF0aC5tYXgoeHQsMCksKCF0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVk'@;
put 'KCkmJnh0PT09dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyfHx2dCkmJih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnJlc3VtZU9wZXJhdGlvbnMoKSl9LHRoaXMuYmF0Y2hFeGVjdXRpb249ZnVuY3Rpb24odnQpe2xl'@;
put 'dCB4dD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3RoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0ICR0PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9uKHh0KSwkdH0sdGhpcy5iYXRjaD1mdW5jdGlvbih2dCl7dGhpcy5z'@;
put 'dXNwZW5kUmVuZGVyKCksdGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgeHQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oKSx0aGlzLnJlc3VtZVJlbmRlcigpLHh0fSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zPWZ1bmN0aW9uKCl7aWYoIWYudmlldylyZXR1cm47Y29uc3Qg'@;
put 'dnQ9Zi52aWV3LHt3aWR0aDp4dCxoZWlnaHQ6JHR9PXZ0LmdldExhc3RTaXplKCkse3dpZHRoOlluLGhlaWdodDokbn09Zi5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhcj1ZbiE9PXh0fHwkbiE9PSR0OyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lv'@;
put 'bnMiLHt3aWR0aDp4dCxoZWlnaHQ6JHR9LHt3aWR0aDpZbixoZWlnaHQ6JG59LGFyKSYmKChhcnx8dnQuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1mLnJvb3RXaW5kb3cpJiYodnQuc2V0TGFzdFNpemUoWW4sJG4pLGYucmVuZGVyKCksdnQuYWRqdXN0RWxlbWVudHNTaXpl'@;
put 'KCkpLGYucnVuSG9va3MoImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDp4dCxoZWlnaHQ6JHR9LHt3aWR0aDpZbixoZWlnaHQ6JG59LGFyKSl9LHRoaXMudXBkYXRlRGF0YT1mdW5jdGlvbih2dCx4dCl7Q3BlKHZ0LCR0PT57TT0kdH0sJHQ9PntNPSR0LGYuY29sdW1uSW5kZXhNYXBw'@;
put 'ZXIuZml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksZi5yb3dJbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKSxHLmFkanVzdFJvd3NBbmRDb2xzKCkscW4ucmVmcmVzaCgpfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFwOk0sZGF0YVNv'@;
put 'dXJjZTpJLGludGVybmFsU291cmNlOiJ1cGRhdGVEYXRhIixzb3VyY2U6eHQsbWV0YU1hbmFnZXI6cHQsZmlyc3RSdW46RWV9KX0sdGhpcy5sb2FkRGF0YT1mdW5jdGlvbih2dCx4dCl7Q3BlKHZ0LCR0PT57TT0kdH0sKCk9PntwdC5jbGVhckNlbGxzQ2FjaGUoKSxmLmluaXRJbmRleE1hcHBl'@;
put 'cnMoKSxHLmFkanVzdFJvd3NBbmRDb2xzKCkscW4ucmVmcmVzaCgpLEVlJiYoRWU9W251bGwsImxvYWREYXRhIl0pfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFwOk0sZGF0YVNvdXJjZTpJLGludGVybmFsU291cmNlOiJsb2FkRGF0YSIsc291cmNlOnh0LG1ldGFNYW5hZ2VyOnB0LGZpcnN0UnVu'@;
put 'OkVlfSl9LHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZHQuY29sdW1ucztsZXQgeHQ9MDtpZihBcnJheS5pc0FycmF5KHZ0KSl4dD12dC5sZW5ndGg7ZWxzZSBpZihmbCh2dCkpaWYoImFycmF5Ij09PWYuZGF0YVR5cGUpe2NvbnN0ICR0PXRoaXMuY291'@;
put 'bnRTb3VyY2VDb2xzKCk7Zm9yKGxldCBZbj0wO1luPCR0O1luKz0xKXZ0KFluKSYmKHh0Kz0xKX1lbHNlKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ImZ1bmN0aW9uIj09PWYuZGF0YVR5cGUpJiYoeHQ9TS5jb2xUb1Byb3BDYWNoZS5sZW5ndGgpO2Vsc2UgaWYoSGEoZHQuZGF0YVNjaGVtYSkp'@;
put 'e2NvbnN0ICR0PU0uZ2V0U2NoZW1hKCk7eHQ9QXJyYXkuaXNBcnJheSgkdCk/JHQubGVuZ3RoOlZPKCR0KX1lbHNlIHh0PXRoaXMuY291bnRTb3VyY2VDb2xzKCk7cmV0dXJuIHh0fSx0aGlzLmluaXRJbmRleE1hcHBlcnM9ZnVuY3Rpb24oKXt0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmluaXRU'@;
put 'b0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSx0aGlzLnJvd0luZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKX0sdGhpcy5nZXREYXRhPWZ1bmN0aW9uKHZ0LHh0LCR0LFluKXtyZXR1cm4gYmModnQpP00uZ2V0QWxsKCk6TS5nZXRSYW5n'@;
put 'ZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LHh0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKCR0LFluKSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKX0sdGhpcy5nZXRDb3B5YWJsZVRleHQ9ZnVuY3Rpb24odnQseHQsJHQsWW4pe3JldHVybiBNLmdldENvcHlhYmxlVGV4dChmLl9jcmVhdGVDZWxsQ29v'@;
put 'cmRzKHZ0LHh0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKCR0LFluKSl9LHRoaXMuZ2V0Q29weWFibGVEYXRhPWZ1bmN0aW9uKHZ0LHh0KXtyZXR1cm4gTS5nZXRDb3B5YWJsZSh2dCxNLmNvbFRvUHJvcCh4dCkpfSx0aGlzLmdldFNjaGVtYT1mdW5jdGlvbigpe3JldHVybiBNLmdldFNjaGVtYSgp'@;
put 'fSx0aGlzLnVwZGF0ZVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgeHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCAkdD0oRWU/Zi5sb2FkRGF0YTpmLnVwZGF0ZURhdGEpLmJpbmQodGhpcyk7bGV0ICRuLGFyLFluPSExO2lm'@;
put 'KEhhKHZ0LnJvd3MpKXRocm93IG5ldyBFcnJvcignVGhlICJyb3dzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Um93cywgbWluUm93cyBvciBtYXhSb3dzPycpO2lmKEhhKHZ0LmNvbHMpKXRocm93IG5ldyBFcnJvcignVGhlICJjb2xzIiBzZXR0'@;
put 'aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Q29scywgbWluQ29scyBvciBtYXhDb2xzPycpO2lmKEhhKHZ0LmdhbnR0Q2hhcnQpKXRocm93IG5ldyBFcnJvcignU2luY2UgOC4wLjAgdGhlICJnYW50dENoYXJ0IiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBw'@;
put 'b3J0ZWQuJyk7Zm9yKCRuIGluIHZ0Lmxhbmd1YWdlJiZmdW5jdGlvbiBxcih2dCl7Y29uc3QgeHQ9WjNlKHZ0KTtncSh4dCk/KGYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIix4dCkscXQubGFuZ3VhZ2U9eHQsZi5ydW5Ib29rcygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIseHQpKTpX'@;
put 'M2UodnQpfSh2dC5sYW5ndWFnZSksdnQpaWYoImRhdGEiIT09JG4mJiJsYW5ndWFnZSIhPT0kbilpZigiY2xhc3NOYW1lIj09PSRuKV9pKCJjbGFzc05hbWUiLHZ0LmNsYXNzTmFtZSk7ZWxzZSBpZigidGFibGVDbGFzc05hbWUiPT09JG4mJmYudGFibGUpX2koInRhYmxlQ2xhc3NOYW1lIix2'@;
put 'dC50YWJsZUNsYXNzTmFtZSksZi52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCk7ZWxzZSBpZihNYS5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoJG4pfHxNYS5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQoJG4pKXtjb25zdCBJbj12dFskbl07'@;
put 'ZmwoSW4pPyhNYS5nZXRTaW5nbGV0b24oKS5hZGRBc0ZpeGVkKCRuLEluLGYpLGR0WyRuXT1Jbik6QXJyYXkuaXNBcnJheShJbikmJihNYS5nZXRTaW5nbGV0b24oKS5hZGQoJG4sSW4sZiksZHRbJG5dPUluKX1lbHNlIXh0JiZDdSh2dCwkbikmJihxdFskbl09dnRbJG5dKTt2b2lkIDA9PT12'@;
put 'dC5kYXRhJiZ2b2lkIDA9PT1kdC5kYXRhPyR0KG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuZGF0YT8kdCh2dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmNvbHVtbnMmJihNLmNyZWF0ZU1hcCgpLGYuaW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBHcj1m'@;
put 'LmNvdW50Q29scygpLEd0PWR0LmNvbHVtbnM7aWYoR3QmJmZsKEd0KSYmKFluPSEwKSwodm9pZCAwIT09dnQuY2VsbHx8dm9pZCAwIT09dnQuY2VsbHN8fHZvaWQgMCE9PXZ0LmNvbHVtbnMpJiZwdC5jbGVhckNhY2hlKCksR3I+MClmb3IoJG49MCxhcj0wOyRuPEdyOyRuKyspe2lmKEd0KXtj'@;
put 'b25zdCBJbj1Zbj9HdCgkbik6R3RbYXJdO0luJiZwdC51cGRhdGVDb2x1bW5NZXRhKGFyLEluKX1hcis9MX1IYSh2dC5jZWxsKSYmcXModnQuY2VsbCxJbj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QoSW4ucm93LEluLmNvbCxJbil9KSxmLnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTts'@;
put 'ZXQgYm49Zi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ7IiIhPT1ibiYmKGJuPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IHhuPXZ0LmhlaWdodDtpZihmbCh4bikmJih4bj14bigpKSx4dCYmZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikm'@;
put 'JmYucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT14bil7Y29uc3QgSW49Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIik7SW4mJihJbi5pbmRl'@;
put 'eE9mKCJoZWlnaHQiKT4tMXx8SW4uaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixJbik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09eG4m'@;
put 'JihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD1pc05hTih4bik/YCR7eG59YDpgJHt4bn1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHZ0LndpZHRoPCJ1Iil7bGV0IEluPXZ0LndpZHRoO2ZsKEluKSYmKEluPUluKCkpLGYucm9vdEVsZW1l'@;
put 'bnQuc3R5bGUud2lkdGg9aXNOYU4oSW4pP2Ake0lufWA6YCR7SW59cHhgfWlmKCF4dCl7aWYoZi52aWV3KXtmLnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCksZi52aWV3Ll93dC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpO2Nv'@;
put 'bnN0IEluPWYuZ2V0Q3VycmVudFRoZW1lTmFtZSgpO0N1KHZ0LCJ0aGVtZU5hbWUiKSYmSW4hPT12dC50aGVtZU5hbWUmJmYudXNlVGhlbWUodnQudGhlbWVOYW1lKX1mLnJ1bkhvb2tzKCJhZnRlclVwZGF0ZVNldHRpbmdzIix2dCl9Ry5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIUVl'@;
put 'JiYoZi5yZW5kZXIoKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLCF4dCYmZi52aWV3JiYoIiI9PT1ibnx8IiI9PT14bnx8dm9pZCAwPT09eG4pJiZibiE9PXhuJiZmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygp'@;
put 'fSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZExhc3QoKTtpZihkdC5nZXRWYWx1ZSl7aWYoZmwoZHQuZ2V0VmFsdWUpKXJldHVybiBkdC5nZXRWYWx1ZS5jYWxsKGYpO2lmKHZ0KXJldHVybiBmLmdldERhdGEoKVt2dFswXVswXV1bZHQuZ2V0VmFsdWVd'@;
put 'fWVsc2UgaWYodnQpcmV0dXJuIGYuZ2V0RGF0YUF0Q2VsbCh2dFswXSx2dFsxXSl9LHRoaXMuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZHR9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdEFsbCgpLHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzKCl9LHRoaXMuYWx0ZXI9'@;
put 'ZnVuY3Rpb24odnQseHQsJHQsWW4sJG4pe0cuYWx0ZXIodnQseHQsJHQsWW4sJG4pfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odnQseHQpe2xldCAkdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLFluPXh0LCRuPXZ0O2lmKHh0Pj0wKXtp'@;
put 'Zih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbENvbHVtbih4dCkpKXJldHVybiBudWxsO1luPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh4dCl9aWYodnQ+PTApe2lmKHRoaXMucm93SW5kZXhNYXBwZXIu'@;
put 'aXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KHZ0KSkpcmV0dXJuIG51bGw7JG49dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0KX1yZXR1cm4gbnVsbD09PSRufHxudWxsPT09WW58fHZvaWQgMD09PSRufHx2b2lkIDA9PT1Zbj9udWxsOmYudmll'@;
put 'dy5nZXRDZWxsQXRDb29yZHMoZi5fY3JlYXRlQ2VsbENvb3JkcygkbixZbiksJHQpfSx0aGlzLmdldENvb3Jkcz1mdW5jdGlvbih2dCl7Y29uc3QgeHQ9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldENvb3Jkcyh2dCk7aWYobnVsbD09PXh0KXJldHVybiBudWxsO2NvbnN0e3JvdzokdCxjb2w6'@;
put 'WW59PXh0O2xldCAkbj0kdCxhcj1ZbjtyZXR1cm4gJHQ+PTAmJigkbj10aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoJHQpKSxZbj49MCYmKGFyPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChZbikpLGYu'@;
put 'X2NyZWF0ZUNlbGxDb29yZHMoJG4sYXIpfSx0aGlzLmNvbFRvUHJvcD1mdW5jdGlvbih2dCl7cmV0dXJuIE0uY29sVG9Qcm9wKHZ0KX0sdGhpcy5wcm9wVG9Db2w9ZnVuY3Rpb24odnQpe3JldHVybiBNLnByb3BUb0NvbCh2dCl9LHRoaXMudG9WaXN1YWxSb3c9dnQ9PnRoaXMucm93SW5kZXhN'@;
put 'YXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodnQpLHRoaXMudG9WaXN1YWxDb2x1bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbFJvdz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRQaHlz'@;
put 'aWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsQ29sdW1uPXZ0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHZ0KSx0aGlzLmdldERhdGFBdENlbGw9ZnVuY3Rpb24odnQseHQpe3JldHVybiBNLmdldCh2dCxNLmNvbFRvUHJv'@;
put 'cCh4dCkpfSx0aGlzLmdldERhdGFBdFJvd1Byb3A9ZnVuY3Rpb24odnQseHQpe3JldHVybiBNLmdldCh2dCx4dCl9LHRoaXMuZ2V0RGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtjb25zdCB4dD1bXSwkdD1NLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCx2dCksZi5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhkdC5kYXRhLmxlbmd0aC0xLHZ0KSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IFluPTA7WW48JHQubGVuZ3RoO1luKz0xKWZvcihsZXQgJG49MDskbjwkdFtZbl0ubGVuZ3RoOyRuKz0xKXh0LnB1c2goJHRbWW5dWyRuXSk7cmV0dXJuIHh0fSx0aGlzLmdldERhdGFBdFBy'@;
put 'b3A9ZnVuY3Rpb24odnQpe2NvbnN0IHh0PVtdLCR0PU0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3JkcygwLE0ucHJvcFRvQ29sKHZ0KSksZi5fY3JlYXRlQ2VsbENvb3JkcyhkdC5kYXRhLmxlbmd0aC0xLE0ucHJvcFRvQ29sKHZ0KSksTS5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxl'@;
put 'dCBZbj0wO1luPCR0Lmxlbmd0aDtZbis9MSlmb3IobGV0ICRuPTA7JG48JHRbWW5dLmxlbmd0aDskbis9MSl4dC5wdXNoKCR0W1luXVskbl0pO3JldHVybiB4dH0sdGhpcy5nZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHZ0LHh0LCR0LFluKXtsZXQgJG47cmV0dXJuICRuPXZvaWQgMD09PXZ0P0ku'@;
put 'Z2V0RGF0YSgpOkkuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LHh0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKCR0LFluKSksJG59LHRoaXMuZ2V0U291cmNlRGF0YUFycmF5PWZ1bmN0aW9uKHZ0LHh0LCR0LFluKXtsZXQgJG47cmV0dXJuICRuPXZvaWQgMD09PXZ0P0kuZ2V0RGF0'@;
put 'YSghMCk6SS5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQseHQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoJHQsWW4pLCEwKSwkbn0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDb2w9ZnVuY3Rpb24odnQpe3JldHVybiBJLmdldEF0Q29sdW1uKHZ0KX0sdGhpcy5zZXRTb3VyY2VEYXRhQXRD'@;
put 'ZWxsPWZ1bmN0aW9uKHZ0LHh0LCR0LFluKXtjb25zdCAkbj1Zcih2dCx4dCwkdCksYXI9dGhpcy5oYXNIb29rKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiKSxHcj1bXTthciYmS24oJG4sYm49PntsZXRbeG4sSW4sWG5dPWJuO0dyLnB1c2goW3huLEluLEkuZ2V0QXRDZWxsKHhuLEluKSxY'@;
put 'bl0pfSksS24oJG4sYm49PntsZXRbeG4sSW4sWG5dPWJuO0kuc2V0QXRDZWxsKHhuLEluLFhuKX0pLGFyJiZ0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLEdyLFluKSx0aGlzLnJlbmRlcigpO2NvbnN0IEd0PWYuZ2V0QWN0aXZlRWRpdG9yKCk7R3QmJkhhKEd0LnJl'@;
put 'ZnJlc2hWYWx1ZSkmJkd0LnJlZnJlc2hWYWx1ZSgpfSx0aGlzLmdldFNvdXJjZURhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIEkuZ2V0QXRSb3codnQpfSx0aGlzLmdldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24odnQseHQpe3JldHVybiBJLmdldEF0Q2VsbCh2dCx4dCl9LHRoaXMu'@;
put 'Z2V0RGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LDApLGYuX2NyZWF0ZUNlbGxDb29yZHModnQsdGhpcy5jb3VudENvbHMoKS0xKSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKVswXXx8W119LHRoaXMuZ2V0RGF0YVR5cGU9ZnVu'@;
put 'Y3Rpb24odnQseHQsJHQsWW4pe2NvbnN0ICRuPXZvaWQgMD09PXZ0P1swLDAsdGhpcy5jb3VudFJvd3MoKSx0aGlzLmNvdW50Q29scygpXTpbdnQseHQsJHQsWW5dLFthcixHcl09JG47bGV0WywsR3QsYm5dPSRuLHhuPW51bGwsSW49bnVsbDt2b2lkIDA9PT1HdCYmKEd0PWFyKSx2b2lkIDA9'@;
put 'PT1ibiYmKGJuPUdyKTtsZXQgWG49Im1peGVkIjtyZXR1cm4gS2EoTWF0aC5tYXgoTWF0aC5taW4oYXIsR3QpLDApLE1hdGgubWF4KGFyLEd0KSxObj0+e2xldCB2cj0hMDtyZXR1cm4gS2EoTWF0aC5tYXgoTWF0aC5taW4oR3IsYm4pLDApLE1hdGgubWF4KEdyLGJuKSxXbj0+KEluPXRoaXMu'@;
put 'Z2V0Q2VsbE1ldGEoTm4sV24pLnR5cGUseG4/dnI9eG49PT1Jbjp4bj1Jbix2cikpLFhuPXZyP0luOiJtaXhlZCIsdnJ9KSxYbn0sdGhpcy5yZW1vdmVDZWxsTWV0YT1mdW5jdGlvbih2dCx4dCwkdCl7Y29uc3RbWW4sJG5dPVt0aGlzLnRvUGh5c2ljYWxSb3codnQpLHRoaXMudG9QaHlzaWNh'@;
put 'bENvbHVtbih4dCldO2xldCBhcj1wdC5nZXRDZWxsTWV0YUtleVZhbHVlKFluLCRuLCR0KTshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxNZXRhIix2dCx4dCwkdCxhcikmJihwdC5yZW1vdmVDZWxsTWV0YShZbiwkbiwkdCksZi5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDZWxsTWV0'@;
put 'YSIsdnQseHQsJHQsYXIpKSxhcj1udWxsfSx0aGlzLnNwbGljZUNlbGxzTWV0YT1mdW5jdGlvbih2dCl7bGV0IHh0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2Zvcih2YXIgJHQ9YXJndW1lbnRzLmxlbmd0aCxZbj1uZXcgQXJyYXko'@;
put 'JHQ+Mj8kdC0yOjApLCRuPTI7JG48JHQ7JG4rKylZblskbi0yXT1hcmd1bWVudHNbJG5dO2lmKFluLmxlbmd0aD4wJiYhQXJyYXkuaXNBcnJheShZblswXSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgM3JkIGFyZ3VtZW50IChjZWxsTWV0YVJvd3MpIGhhcyB0byBiZSBwYXNzZWQgYXMgYW4gYXJy'@;
put 'YXkgb2YgY2VsbCBtZXRhIG9iamVjdHMgYXJyYXkuIik7eHQ+MCYmcHQucmVtb3ZlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkseHQpLFluLmxlbmd0aD4wJiZLbihZbi5yZXZlcnNlKCksYXI9PntwdC5jcmVhdGVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSksS24oYXIsKEdyLEd0KT0+'@;
put 'dGhpcy5zZXRDZWxsTWV0YU9iamVjdCh2dCxHdCxHcikpfSksZi5yZW5kZXIoKX0sdGhpcy5zZXRDZWxsTWV0YU9iamVjdD1mdW5jdGlvbih2dCx4dCwkdCl7Im9iamVjdCI9PXR5cGVvZiAkdCYmcXMoJHQsKFluLCRuKT0+e3RoaXMuc2V0Q2VsbE1ldGEodnQseHQsJG4sWW4pfSl9LHRoaXMu'@;
put 'c2V0Q2VsbE1ldGE9ZnVuY3Rpb24odnQseHQsJHQsWW4pe2lmKCExPT09Zi5ydW5Ib29rcygiYmVmb3JlU2V0Q2VsbE1ldGEiLHZ0LHh0LCR0LFluKSlyZXR1cm47bGV0IGFyPXZ0LEdyPXh0O3Z0PHRoaXMuY291bnRSb3dzKCkmJihhcj10aGlzLnRvUGh5c2ljYWxSb3codnQpKSx4dDx0aGlz'@;
put 'LmNvdW50Q29scygpJiYoR3I9dGhpcy50b1BoeXNpY2FsQ29sdW1uKHh0KSkscHQuc2V0Q2VsbE1ldGEoYXIsR3IsJHQsWW4pLGYucnVuSG9va3MoImFmdGVyU2V0Q2VsbE1ldGEiLHZ0LHh0LCR0LFluKX0sdGhpcy5nZXRDZWxsc01ldGE9ZnVuY3Rpb24oKXtyZXR1cm4gcHQuZ2V0Q2VsbHNN'@;
put 'ZXRhKCl9LHRoaXMuZ2V0Q2VsbE1ldGE9ZnVuY3Rpb24odnQseHQpe2xldCAkdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e3NraXBNZXRhRXh0ZW5zaW9uOiExfSxZbj10aGlzLnRvUGh5c2ljYWxSb3codnQpLCRuPXRoaXMudG9QaHlz'@;
put 'aWNhbENvbHVtbih4dCk7cmV0dXJuIG51bGw9PT1ZbiYmKFluPXZ0KSxudWxsPT09JG4mJigkbj14dCkscHQuZ2V0Q2VsbE1ldGEoWW4sJG4se3Zpc3VhbFJvdzp2dCx2aXN1YWxDb2x1bW46eHQsLi4uJHR9KX0sdGhpcy5nZXRDb2x1bW5NZXRhPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcHQuZ2V0'@;
put 'Q29sdW1uTWV0YSh0aGlzLnRvUGh5c2ljYWxDb2x1bW4odnQpKX0sdGhpcy5nZXRDZWxsTWV0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcHQuZ2V0Q2VsbHNNZXRhQXRSb3codnQpfSx0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZD1mdW5jdGlvbigpe3JldHVybiEoIm9iamVj'@;
put 'dCI9PT1mLmRhdGFUeXBlfHxkdC5jb2x1bW5zKX0sdGhpcy5nZXRDZWxsUmVuZGVyZXI9ZnVuY3Rpb24odnQseHQpe2NvbnN0ICR0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCx4dCkucmVuZGVyZXI6dnQucmVuZGVyZXI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiAkdD9p'@;
put 'UCgkdCk6YmMoJHQpP2lQKCJ0ZXh0Iik6JHR9LHRoaXMuZ2V0Q2VsbEVkaXRvcj1mdW5jdGlvbih2dCx4dCl7Y29uc3QgJHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LHh0KS5lZGl0b3I6dnQuZWRpdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgJHQ/WE8oJHQpOmJj'@;
put 'KCR0KT9YTygidGV4dCIpOiR0fSx0aGlzLmdldENlbGxWYWxpZGF0b3I9ZnVuY3Rpb24odnQseHQpe2NvbnN0ICR0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCx4dCkudmFsaWRhdG9yOnZ0LnZhbGlkYXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mICR0P2lLKCR0KTok'@;
put 'dH0sdGhpcy52YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0KXt0aGlzLl92YWxpZGF0ZUNlbGxzKHZ0KX0sdGhpcy52YWxpZGF0ZVJvd3M9ZnVuY3Rpb24odnQseHQpe2lmKCFBcnJheS5pc0FycmF5KHZ0KSl0aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlUm93cyBwYXJhbWV0ZXIgYHJvd3NgIG11'@;
put 'c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKHh0LHZ0KX0sdGhpcy52YWxpZGF0ZUNvbHVtbnM9ZnVuY3Rpb24odnQseHQpe2lmKCFBcnJheS5pc0FycmF5KHZ0KSl0aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlQ29sdW1ucyBwYXJhbWV0ZXIgYGNvbHVtbnNgIG11c3QgYmUg'@;
put 'YW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKHh0LHZvaWQgMCx2dCl9LHRoaXMuX3ZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQseHQsJHQpe2NvbnN0IFluPW5ldyBQbjt2dCYmKFluLm9uUXVldWVFbXB0eT12dCk7bGV0ICRuPWYuY291bnRSb3dzKCktMTtmb3IoOyRuPj0wOyl7aWYo'@;
put 'dm9pZCAwIT09eHQmJi0xPT09eHQuaW5kZXhPZigkbikpeyRuLT0xO2NvbnRpbnVlfWxldCBhcj1mLmNvdW50Q29scygpLTE7Zm9yKDthcj49MDspdm9pZCAwPT09JHR8fC0xIT09JHQuaW5kZXhPZihhcik/KFluLmFkZFZhbGlkYXRvclRvUXVldWUoKSxmLnZhbGlkYXRlQ2VsbChmLmdldERh'@;
put 'dGFBdENlbGwoJG4sYXIpLGYuZ2V0Q2VsbE1ldGEoJG4sYXIpLEdyPT57aWYoImJvb2xlYW4iIT10eXBlb2YgR3IpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTshMT09PUdyJiYoWW4udmFsaWQ9ITEpLFluLnJlbW92ZVZhbGlkYXRv'@;
put 'ckZvcm1RdWV1ZSgpfSwidmFsaWRhdGVDZWxscyIpLGFyLT0xKTphci09MTskbi09MX1Zbi5jaGVja0lmUXVldWVJc0VtcHR5KCl9LHRoaXMuZ2V0Um93SGVhZGVyPWZ1bmN0aW9uKHZ0KXtsZXQgeHQ9ZHQucm93SGVhZGVycywkdD12dDtyZXR1cm4gdm9pZCAwIT09JHQmJigkdD1mLnJ1bkhv'@;
put 'b2tzKCJtb2RpZnlSb3dIZWFkZXIiLCR0KSksdm9pZCAwPT09JHQ/KHh0PVtdLEthKGYuY291bnRSb3dzKCktMSxZbj0+e3h0LnB1c2goZi5nZXRSb3dIZWFkZXIoWW4pKX0pKTpBcnJheS5pc0FycmF5KHh0KSYmdm9pZCAwIT09eHRbJHRdP3h0PXh0WyR0XTpmbCh4dCk/eHQ9eHQoJHQpOnh0'@;
put 'JiYic3RyaW5nIiE9dHlwZW9mIHh0JiYibnVtYmVyIiE9dHlwZW9mIHh0JiYoeHQ9JHQrMSkseHR9LHRoaXMuaGFzUm93SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiEhZHQucm93SGVhZGVyc30sdGhpcy5oYXNDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7aWYobnVsbCE9ZHQuY29sSGVhZGVycyly'@;
put 'ZXR1cm4hIWR0LmNvbEhlYWRlcnM7Zm9yKGxldCB2dD0wLHh0PWYuY291bnRDb2xzKCk7dnQ8eHQ7dnQrKylpZihmLmdldENvbEhlYWRlcih2dCkpcmV0dXJuITA7cmV0dXJuITF9LHRoaXMuZ2V0Q29sSGVhZGVyPWZ1bmN0aW9uKHZ0KXtsZXQgeHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOi0xO2NvbnN0ICR0PWYucnVuSG9va3MoIm1vZGlmeUNvbEhlYWRlciIsdnQpO2lmKHZvaWQgMD09PSR0KXtjb25zdCBHdD1bXSxibj1mLmNvdW50Q29scygpO2ZvcihsZXQgeG49MDt4bjxibjt4bisrKUd0LnB1c2goZi5nZXRDb2xIZWFk'@;
put 'ZXIoeG4pKTtyZXR1cm4gR3R9bGV0IFluPWR0LmNvbEhlYWRlcnM7Y29uc3QgYXI9Zi50b1BoeXNpY2FsQ29sdW1uKCR0KSxHcj1mdW5jdGlvbihHdCl7Y29uc3QgYm49W10seG49Zi5jb3VudENvbHMoKTtsZXQgSW49MDtmb3IoO0luPHhuO0luKyspZmwoZHQuY29sdW1ucykmJmR0LmNvbHVt'@;
put 'bnMoSW4pJiZibi5wdXNoKEluKTtyZXR1cm4gYm5bR3RdfShhcik7cmV0dXJuITE9PT1kdC5jb2xIZWFkZXJzP1luPW51bGw6ZHQuY29sdW1ucyYmZmwoZHQuY29sdW1ucykmJmR0LmNvbHVtbnMoR3IpJiZkdC5jb2x1bW5zKEdyKS50aXRsZT9Zbj1kdC5jb2x1bW5zKEdyKS50aXRsZTpkdC5j'@;
put 'b2x1bW5zJiZkdC5jb2x1bW5zW2FyXSYmZHQuY29sdW1uc1thcl0udGl0bGU/WW49ZHQuY29sdW1uc1thcl0udGl0bGU6QXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSYmdm9pZCAwIT09ZHQuY29sSGVhZGVyc1thcl0/WW49ZHQuY29sSGVhZGVyc1thcl06ZmwoZHQuY29sSGVhZGVycyk/'@;
put 'WW49ZHQuY29sSGVhZGVycyhhcik6ZHQuY29sSGVhZGVycyYmInN0cmluZyIhPXR5cGVvZiBkdC5jb2xIZWFkZXJzJiYibnVtYmVyIiE9dHlwZW9mIGR0LmNvbEhlYWRlcnMmJihZbj1tUCgkdCkpLFluPWYucnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixZbix2dCx4dCksWW59'@;
put 'LHRoaXMuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgeHQ7aWYodnQ+PTAmJih4dD1mLmdldENlbGxNZXRhKDAsdnQpLndpZHRoKSwodm9pZCAwPT09eHR8fHh0PT09ZHQud2lkdGgpJiYoeHQ9ZHQuY29sV2lkdGhzKSxudWxsIT14dCl7c3dpdGNoKHR5cGVvZiB4'@;
put 'dCl7Y2FzZSJvYmplY3QiOnh0PXh0W3Z0XTticmVhaztjYXNlImZ1bmN0aW9uIjp4dD14dCh2dCl9InN0cmluZyI9PXR5cGVvZiB4dCYmKHh0PXBhcnNlSW50KHh0LDEwKSl9cmV0dXJuIHh0fSx0aGlzLmdldENvbFdpZHRoPWZ1bmN0aW9uKHZ0LHh0KXtsZXQgJHQ9Zi5fZ2V0Q29sV2lkdGhG'@;
put 'cm9tU2V0dGluZ3ModnQpO3JldHVybiAkdD1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xXaWR0aCIsJHQsdnQseHQpLHZvaWQgMD09PSR0JiYoJHQ9Yl8pLCR0fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2NvbnN0IHh0PWYuc3R5bGVzSGFuZGxlci5nZXREZWZh'@;
put 'dWx0Um93SGVpZ2h0KCk7bGV0ICR0PWR0LnJvd0hlaWdodHM7aWYobnVsbCE9JHQpe3N3aXRjaCh0eXBlb2YgJHQpe2Nhc2Uib2JqZWN0IjokdD0kdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6JHQ9JHQodnQpfSJzdHJpbmciPT10eXBlb2YgJHQmJigkdD1wYXJzZUludCgkdCwxMCkpfXJl'@;
put 'dHVybiBudWxsIT0kdCYmJHQ8eHQ/eHQ6JHR9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1bmN0aW9uKHZ0LHh0KXtsZXQgJHQ9Zi5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gJHQ9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0IiwkdCx2dCx4dCksJHR9LHRoaXMuY291bnRT'@;
put 'b3VyY2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEkuY291bnRSb3dzKCl9LHRoaXMuY291bnRTb3VyY2VDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIEkuY291bnRGaXJzdFJvd0tleXMoKX0sdGhpcy5jb3VudFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gTS5nZXRMZW5ndGgoKX0sdGhpcy5jb3VudENv'@;
put 'bHM9ZnVuY3Rpb24oKXtjb25zdCB2dD1kdC5tYXhDb2xzLHh0PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4odnQseHQpfSx0aGlzLmNvdW50UmVuZGVyZWRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3Qu'@;
put 'ZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRS'@;
put 'ZW5kZXJlZENvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53'@;
put 'dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFJvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldFJvd0hlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50Q29sSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZ2V0Q29sdW1u'@;
put 'SGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRFbXB0eVJvd3M9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx4dD0wO3JldHVybiBKJChmLmNvdW50Um93cygpLTEsJHQ9PntpZihmLmlzRW1wdHlSb3coJHQp'@;
put 'KXh0Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLHh0fSx0aGlzLmNvdW50RW1wdHlDb2xzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0seHQ9MDtyZXR1cm4gSiQoZi5jb3VudENvbHMoKS0xLCR0'@;
put 'PT57aWYoZi5pc0VtcHR5Q29sKCR0KSl4dCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0dXJuITF9KSx4dH0sdGhpcy5pc0VtcHR5Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gZHQuaXNFbXB0eVJvdy5jYWxsKGYsdnQpfSx0aGlzLmlzRW1wdHlDb2w9ZnVuY3Rpb24odnQpe3JldHVybiBkdC5pc0Vt'@;
put 'cHR5Q29sLmNhbGwoZix2dCl9LHRoaXMuc2VsZWN0Q2VsbD1mdW5jdGlvbih2dCx4dCwkdCxZbil7bGV0ICRuPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0sYXI9IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1s1XSl8fGFyZ3VtZW50c1s1XTtyZXR1cm4hYmModnQpJiYhYmMoeHQpJiZ0aGlzLnNlbGVjdENlbGxzKFtbdnQseHQsJHQsWW5dXSwkbixhcil9LHRoaXMuc2VsZWN0Q2VsbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn'@;
put 'dW1lbnRzWzBdOltbXV0sJHQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTshMT09PSghKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKSYmeWUuc3VzcGVuZCgpO2NvbnN0IFlu'@;
put 'PXFuLnNlbGVjdENlbGxzKHZ0KTtyZXR1cm4gWW4mJiR0JiZmLmxpc3RlbigpLHllLnJlc3VtZSgpLFlufSx0aGlzLnNlbGVjdENvbHVtbnM9ZnVuY3Rpb24odnQpe3JldHVybiBxbi5zZWxlY3RDb2x1bW5zKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2Fy'@;
put 'Z3VtZW50c1sxXTp2dCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHRoaXMuc2VsZWN0Um93cz1mdW5jdGlvbih2dCl7cmV0dXJuIHFuLnNlbGVjdFJvd3ModnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0'@;
put 'LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sdGhpcy5kZXNlbGVjdENlbGw9ZnVuY3Rpb24oKXtxbi5kZXNlbGVjdCgpfSx0aGlzLnNlbGVjdEFsbD1mdW5jdGlvbigpe2xldCB2dD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8'@;
put 'YXJndW1lbnRzWzBdLHh0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCwkdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDt5ZS5za2lwTmV4dFNjcm9sbEN5Y2xlKCkscW4uc2VsZWN0QWxsKHZ0LHh0LCR0KX07'@;
put 'Y29uc3QgQmk9KHZ0LHh0KT0+dnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHh0LDEsITApO3RoaXMuc2Nyb2xsVmlld3BvcnRUbz1mdW5jdGlvbih2dCx4dCl7dmFyICR0OyJudW1iZXIiPT10eXBlb2YgdnQmJih2dD17cm93OmFyZ3VtZW50c1swXSxjb2w6YXJndW1lbnRzWzFdLHZlcnRp'@;
put 'Y2FsU25hcDphcmd1bWVudHNbMl0/ImJvdHRvbSI6InRvcCIsaG9yaXpvbnRhbFNuYXA6YXJndW1lbnRzWzNdPyJlbmQiOiJzdGFydCIsY29uc2lkZXJIaWRkZW5JbmRleGVzOm51bGw9PT0oJHQ9YXJndW1lbnRzWzRdKXx8dm9pZCAwPT09JHR8fCR0fSk7Y29uc3R7cm93OlluLGNvbDokbixj'@;
put 'b25zaWRlckhpZGRlbkluZGV4ZXM6YXJ9PXZ0Pz97fTtsZXQgR3I9WW4sR3Q9JG47aWYoZmwoeHQpJiZ0aGlzLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIseHQpLHZvaWQgMD09PWFyfHxhcil7Y29uc3QgWG49TnVtYmVyLmlzSW50ZWdlcihZbikmJlluPj0wLE5uPU51bWJlci5pc0ludGVn'@;
put 'ZXIoJG4pJiYkbj49MCx2cj1Ybj9CaSh0aGlzLnJvd0luZGV4TWFwcGVyLFluKTp2b2lkIDAsV249Tm4/QmkodGhpcy5jb2x1bW5JbmRleE1hcHBlciwkbik6dm9pZCAwO2lmKG51bGw9PT12cnx8bnVsbD09PVduKXJldHVybiExO0dyPVhuP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJs'@;
put 'ZUZyb21WaXN1YWxJbmRleCh2cik6WW4sR3Q9Tm4/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFduKTokbn1jb25zdCBibj1OdW1iZXIuaXNJbnRlZ2VyKEdyKSx4bj1OdW1iZXIuaXNJbnRlZ2VyKEd0KTtsZXQgSW49ITE7cmV0dXJuIGJuJiZHcj49'@;
put 'MCYmeG4mJkd0Pj0wP0luPWYudmlldy5zY3JvbGxWaWV3cG9ydChmLl9jcmVhdGVDZWxsQ29vcmRzKEdyLEd0KSx2dC5ob3Jpem9udGFsU25hcCx2dC52ZXJ0aWNhbFNuYXApOmJuJiZHcj49MCYmKHhuJiZHdDwwfHwheG4pP0luPWYudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoR3Is'@;
put 'dnQudmVydGljYWxTbmFwKTp4biYmR3Q+PTAmJihibiYmR3I8MHx8IWJuKSYmKEluPWYudmlldy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShHdCx2dC5ob3Jpem9udGFsU25hcCkpLGZsKHh0KSYmKEluP3RoaXMudmlldy5yZW5kZXIoKToodGhpcy5yZW1vdmVIb29rKCJhZnRlclNjcm9s'@;
put 'bCIseHQpLHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrKCgpPT54dCgpKSkpLElufSx0aGlzLnNjcm9sbFRvRm9jdXNlZENlbGw9ZnVuY3Rpb24odnQpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkpcmV0dXJuITE7ZmwodnQpJiZ0aGlzLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIs'@;
put 'dnQpO2NvbnN0e2hpZ2hsaWdodDp4dH09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLCR0PXRoaXMuc2Nyb2xsVmlld3BvcnRUbyh4dC50b09iamVjdCgpKTtyZXR1cm4gJHQ/dGhpcy52aWV3LnJlbmRlcigpOmZsKHZ0KSYmKHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHZ0KSx0'@;
put 'aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+dnQoKSkpLCR0fSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmLl9jbGVhclRpbWVvdXRzKCksZi5fY2xlYXJJbW1lZGlhdGVzKCksZi52aWV3JiZmLnZpZXcuZGVzdHJveSgpLEkmJkkuZGVzdHJveSgpLEk9bnVsbCx0aGlzLmdldFNob3J0Y3V0'@;
put 'TWFuYWdlcigpLmRlc3Ryb3koKSx3bi5jbGVhcigpLHB0LmNsZWFyQ2FjaGUoKSxGcS5kZWxldGUodGhpcy5ndWlkKSx2LmRlc3Ryb3koKSxyZSYmcmUuZGVzdHJveSgpLGYucm9vdENvbnRhaW5lciYmQXAoZi5yb290Q29udGFpbmVyKSxmLnJvb3RQb3J0YWxFbGVtZW50JiZmLnJvb3RQb3J0'@;
put 'YWxFbGVtZW50LnJlbW92ZSgpLGYuYmF0Y2hFeGVjdXRpb24oKCk9PntmLnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxmLmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxtbi5nZXRJdGVtcygpLmZvckVhY2godnQ9PntsZXRbLHh0XT12dDt4dC5kZXN0cm95KCl9KSxt'@;
put 'bi5jbGVhcigpLGYucnVuSG9va3MoImFmdGVyRGVzdHJveSIpfSwhMCksTWEuZ2V0U2luZ2xldG9uKCkuZGVzdHJveShmKSxxcyhmLCh2dCx4dCwkdCk9PntmbCh2dCk/JHRbeHRdPWZ1bmN0aW9uIGhhKHZ0KXtyZXR1cm4oKT0+e3Rocm93IG5ldyBFcnJvcihgVGhlICIke3Z0fSIgbWV0aG9k'@;
put 'IGNhbm5vdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKX19KHh0KToiZ3VpZCIhPT14dCYmKCR0W3h0XT1udWxsKX0pLGYuaXNEZXN0cm95ZWQ9ITAsTSYmTS5kZXN0cm95KCksTT1udWxsLEc9bnVsbCxxbj1udWxsLHJl'@;
put 'PW51bGwsZj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiByZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKX0sdGhp'@;
put 'cy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxl'@;
put 'Q29sdW1uKCl9LHRoaXMuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdEZ1'@;
put 'bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RGdWxs'@;
put 'eVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRG'@;
put 'aXJzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gZi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldFBsdWdpbj1mdW5jdGlvbih2dCl7'@;
put 'cmV0dXJuIG1uLmdldEl0ZW0oZjEodnQpKX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTptbi5nZXRJZCh2dCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKHZ0LHh0LCR0KXtNYS5nZXRTaW5nbGV0b24oKS5hZGQodnQseHQsZiwkdCl9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih2dCl7cmV0dXJuIE1hLmdldFNpbmdsZXRvbigpLmhhcyh2dCxmKXx8TWEuZ2V0U2luZ2xldG9uKCkuaGFzKHZ0KX0s'@;
put 'dGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbih2dCx4dCwkdCl7TWEuZ2V0U2luZ2xldG9uKCkub25jZSh2dCx4dCxmLCR0KX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHZ0LHh0KXtNYS5nZXRTaW5nbGV0b24oKS5yZW1vdmUodnQseHQsZil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24odnQs'@;
put 'eHQsJHQsWW4sJG4sYXIsR3Ipe3JldHVybiBNYS5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCx4dCwkdCxZbiwkbixhcixHcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCx4dCl7cmV0dXJuIHEzZShkdC5sYW5ndWFnZSx2dCx4dCl9LHRoaXMudG9IVE1MPSgpPT5YJCh0'@;
put 'aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHZ0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsWCQodGhpcykpLHZ0LmZpcnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRz'@;
put 'PVtdLHRoaXMudXNlVGhlbWU9dnQ9Pntjb25zdCB4dD0hIUVlO3RoaXMuc3R5bGVzSGFuZGxlci51c2VUaGVtZSh2dCk7Y29uc3QgJHQ9dGhpcy5zdHlsZXNIYW5kbGVyLmdldFRoZW1lTmFtZSgpO3dfKHRoaXMpJiYoaHModGhpcy5yb290V3JhcHBlckVsZW1lbnQsL2h0LXRoZW1lLS4qL2cp'@;
put 'LGhzKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQsL2h0LXRoZW1lLS4qL2cpLCR0JiYoRWkodGhpcy5yb290V3JhcHBlckVsZW1lbnQsJHQpLEVpKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQsJHQpLGdldENvbXB1dGVkU3R5bGUodGhpcy5yb290V3JhcHBlckVsZW1lbnQpLmdldFByb3BlcnR5VmFs'@;
put 'dWUoIi0taHQtbGluZS1oZWlnaHQiKXx8WW8oYFRoZSAiJHskdH0iIHRoZW1lIGlzIGVuYWJsZWQsIGJ1dCBpdHMgc3R5bGVzaGVldHMgYXJlIG1pc3Npbmcgb3Igbm90IGltcG9ydGVkIGNvcnJlY3RseS4gICAgICAgICAgICAgSW1wb3J0IHRoZSBjb3JyZWN0IENTUyBmaWxlcyBpbiBvcmRl'@;
put 'ciB0byB1c2UgdGhhdCB0aGVtZS5gKSkpLHh0fHwoZi5yZW5kZXIoKSxmLnNjcm9sbFZpZXdwb3J0VG8oMCwwKSxJcGUodGhpcy5yb290Q29udGFpbmVyKSYmKGhzKHRoaXMucm9vdENvbnRhaW5lciwvaHQtdGhlbWUtLiovZyksJHQmJkVpKHRoaXMucm9vdENvbnRhaW5lciwkdCkpKSx0aGlz'@;
put 'LnJ1bkhvb2tzKCJhZnRlclNldFRoZW1lIiwkdCx4dCl9LHRoaXMuZ2V0Q3VycmVudFRoZW1lTmFtZT0oKT0+dGhpcy5zdHlsZXNIYW5kbGVyLmdldFRoZW1lTmFtZSgpLHRoaXMuZ2V0VGFibGVIZWlnaHQ9KCk9PnRoaXMucm9vdEVsZW1lbnQub2Zmc2V0SGVpZ2h0LHRoaXMuZ2V0VGFibGVX'@;
put 'aWR0aD0oKT0+dGhpcy5yb290RWxlbWVudC5vZmZzZXRXaWR0aCx0aGlzLl9yZWdpc3RlclRpbWVvdXQ9ZnVuY3Rpb24odnQpe2xldCAkdD12dDsiZnVuY3Rpb24iPT10eXBlb2YgJHQmJigkdD1zZXRUaW1lb3V0KCR0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd'@;
put 'P2FyZ3VtZW50c1sxXTowKSksdGhpcy50aW1lb3V0cy5wdXNoKCR0KX0sdGhpcy5fY2xlYXJUaW1lb3V0cz1mdW5jdGlvbigpe0tuKHRoaXMudGltZW91dHMsdnQ9PntjbGVhclRpbWVvdXQodnQpfSl9LHRoaXMuaW1tZWRpYXRlcz1bXSx0aGlzLl9yZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlv'@;
put 'bih2dCl7dGhpcy5pbW1lZGlhdGVzLnB1c2goc2V0SW1tZWRpYXRlKHZ0KSl9LHRoaXMuX2NsZWFySW1tZWRpYXRlcz1mdW5jdGlvbigpe0tuKHRoaXMuaW1tZWRpYXRlcyx2dD0+e2NsZWFySW1tZWRpYXRlKHZ0KX0pfSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaz1mdW5jdGlvbih2dCl7dGhp'@;
put 'cy5yb290V2luZG93LnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5pc0Rlc3Ryb3llZHx8dnQoKX0pfSx0aGlzLl9nZXRFZGl0b3JNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHJlfTtjb25zdCBtYT1haXQoe2hhbmRsZUV2ZW50OigpPT5mLmlzTGlzdGVuaW5nKCksYmVmb3JlS2V5RG93bjp2'@;
put 'dD0+dGhpcy5ydW5Ib29rcygiYmVmb3JlS2V5RG93biIsdnQpLGFmdGVyS2V5RG93bjp2dD0+e3RoaXMuaXNEZXN0cm95ZWR8fGYucnVuSG9va3MoImFmdGVyRG9jdW1lbnRLZXlEb3duIix2dCl9LG93bmVyV2luZG93OnRoaXMucm9vdFdpbmRvd30pO3RoaXMuYWRkSG9vaygiYmVmb3JlT25D'@;
put 'ZWxsTW91c2VEb3duIix2dD0+eyExPT09dnQuY3RybEtleSYmITE9PT12dC5tZXRhS2V5JiZtYS5yZWxlYXNlUHJlc3NlZEtleXMoKX0pLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG1hfSx0aGlzLmdldEZvY3VzTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB1'@;
put 'ZX0scksoKS5mb3JFYWNoKHZ0PT57Y29uc3QgeHQ9T0UodnQpO21uLmFkZEl0ZW0odnQsbmV3IHh0KHRoaXMpKX0pLGZ1bmN0aW9uIGlhdChjKXtbcmF0LG5hdF0uZm9yRWFjaChsPT5sKGMpKX0oZiksbWEuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSxNYS5nZXRTaW5nbGV0b24oKS5y'@;
put 'dW4oZiwiY29uc3RydWN0Iil9ZnVuY3Rpb24genBlKGMsbCxhKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBVcGUoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFdQKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcu'@;
put 'Z2V0Q29tcHV0ZWRTdHlsZShjKX1mdW5jdGlvbiBacGUoYyl7Y29uc3QgYT17bWluSGVpZ2h0OjIwMCxtYXhIZWlnaHQ6MzAwLG1pbldpZHRoOjEwMCxtYXhXaWR0aDozMDAsdGV4dENvbnRlbnQ6dWU9PnVlLnZhbHVlLC4uLmFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXTp7fX0sZD1jLmJvZHksaD1jLmNyZWF0ZVRleHROb2RlKCIiKSxmPWMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCB2O2Z1bmN0aW9uIE0oKXt2YXIgdWUseWU7aC50ZXh0Q29udGVudD1hLnRleHRDb250ZW50KHYpLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRl'@;
put 'IixmLnN0eWxlLmZvbnRTaXplPVdQKHYpLmZvbnRTaXplLGYuc3R5bGUuZm9udEZhbWlseT1XUCh2KS5mb250RmFtaWx5LGYuc3R5bGUud2hpdGVTcGFjZT0icHJlIixkLmFwcGVuZENoaWxkKGYpO2NvbnN0IEVlPXBhcnNlSW50KChudWxsPT09KHVlPVdQKHYpKXx8dm9pZCAwPT09dWU/dm9p'@;
put 'ZCAwOnVlLnBhZGRpbmdJbmxpbmVTdGFydCl8fDAsMTApLEJlPXBhcnNlSW50KChudWxsPT09KHllPVdQKHYpKXx8dm9pZCAwPT09eWU/dm9pZCAwOnllLnBhZGRpbmdJbmxpbmVFbmQpfHwwLDEwKSxHZT1mLmNsaWVudFdpZHRoK0VlK0JlKzE7ZC5yZW1vdmVDaGlsZChmKTtjb25zdCBzdD12'@;
put 'LnN0eWxlO3N0LmhlaWdodD1gJHthLm1pbkhlaWdodH1weGAsc3Qud2lkdGg9YS5taW5XaWR0aD5HZT9gJHthLm1pbldpZHRofXB4YDpHZT5hLm1heFdpZHRoP2Ake2EubWF4V2lkdGh9cHhgOmAke0dlfXB4YDtjb25zdCBwdD12LnNjcm9sbEhlaWdodD92LnNjcm9sbEhlaWdodC0xOjA7YS5t'@;
put 'aW5IZWlnaHQ+cHQ/c3QuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YDphLm1heEhlaWdodDxwdD8oc3QuaGVpZ2h0PWAke2EubWF4SGVpZ2h0fXB4YCxzdC5vdmVyZmxvd1k9InZpc2libGUiKTpzdC5oZWlnaHQ9YCR7cHR9cHhgfWZ1bmN0aW9uIEkoKXtjLmRlZmF1bHRWaWV3LnNldFRpbWVv'@;
put 'dXQoTSwwKX1yZXR1cm57aW5pdDpmdW5jdGlvbiByZSh1ZSx5ZSl7bGV0IEVlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07dj11ZSxmdW5jdGlvbiBHKHVlKXtpZih1ZSYmdWUubWluSGVpZ2h0KWlmKCJpbmhlcml0Ij09PXVlLm1pbkhl'@;
put 'aWdodClhLm1pbkhlaWdodD12LmNsaWVudEhlaWdodDtlbHNle2NvbnN0IHllPXBhcnNlSW50KHVlLm1pbkhlaWdodCwxMCk7aXNOYU4oeWUpfHwoYS5taW5IZWlnaHQ9eWUpfWlmKHVlJiZ1ZS5tYXhIZWlnaHQpaWYoImluaGVyaXQiPT09dWUubWF4SGVpZ2h0KWEubWF4SGVpZ2h0PXYuY2xp'@;
put 'ZW50SGVpZ2h0O2Vsc2V7Y29uc3QgeWU9cGFyc2VJbnQodWUubWF4SGVpZ2h0LDEwKTtpc05hTih5ZSl8fChhLm1heEhlaWdodD15ZSl9aWYodWUmJnVlLm1pbldpZHRoKWlmKCJpbmhlcml0Ij09PXVlLm1pbldpZHRoKWEubWluV2lkdGg9di5jbGllbnRXaWR0aDtlbHNle2NvbnN0IHllPXBh'@;
put 'cnNlSW50KHVlLm1pbldpZHRoLDEwKTtpc05hTih5ZSl8fChhLm1pbldpZHRoPXllKX1pZih1ZSYmdWUubWF4V2lkdGgpaWYoImluaGVyaXQiPT09dWUubWF4V2lkdGgpYS5tYXhXaWR0aD12LmNsaWVudFdpZHRoO2Vsc2V7Y29uc3QgeWU9cGFyc2VJbnQodWUubWF4V2lkdGgsMTApO2lzTmFO'@;
put 'KHllKXx8KGEubWF4V2lkdGg9eWUpfWYuZmlyc3RDaGlsZHx8KGYuY2xhc3NOYW1lPSJhdXRvUmVzaXplIixmLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsZi5hcHBlbmRDaGlsZChoKSl9KHllKSwiVEVYVEFSRUEiPT09di5ub2RlTmFtZSYmKHYuc3R5bGUucmVzaXplPSJub25lIix2'@;
put 'LnN0eWxlLmhlaWdodD1gJHthLm1pbkhlaWdodH1weGAsdi5zdHlsZS5taW5XaWR0aD1gJHthLm1pbldpZHRofXB4YCx2LnN0eWxlLm1heFdpZHRoPWAke2EubWF4V2lkdGh9cHhgLHYuc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSxFZSYmKHpwZSh2LCJpbnB1dCIsTSksenBlKHYsImtleWRv'@;
put 'd24iLEkpKSxNKCl9LHJlc2l6ZTpNLHVuT2JzZXJ2ZSgpe1VwZSh2LCJpbnB1dCIsTSksVXBlKHYsImtleWRvd24iLEkpfX19ZnVuY3Rpb24gV3BlKGMsbCl7Y29uc3QgYT1rJChsKSxkPWwudmFsdWUuc3BsaXQoIlxuIik7bGV0IGg9YSxmPTA7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2Kysp'@;
put 'ezAhPT12JiYoZis9ZFt2LTFdLmxlbmd0aCsxKTtjb25zdCBJPWYrZFt2XS5sZW5ndGg7aWYoImhvbWUiPT09Yz9oPWY6ImVuZCI9PT1jJiYoaD1JKSxhPD1JKWJyZWFrfUFFKGwsaCl9ZnVuY3Rpb24gYTkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZhdChjKXt2YXIgbD1mdW5jdGlvbiBw'@;
put 'YXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs'@;
put 'bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFlQPSJodF9lZGl0b3JfaGlkZGVuIixZcGU9InRleHRFZGl0b3IiO2NsYXNzIHM5IGV4dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0ZXh0'@;
put 'In1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxhOSh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBaMih0aGlzKSksYTkodGhpcywiYXV0b1Jlc2l6ZSIsWnBlKHRoaXMuaG90LnJvb3REb2N1bWVudCkpLGE5KHRoaXMsIlRFWFRBUkVBIix2b2lkIDApLGE5KHRoaXMsInRleHRhcmVhU3R5bGUiLHZv'@;
put 'aWQgMCksYTkodGhpcywiVEVYVEFSRUFfUEFSRU5UIix2b2lkIDApLGE5KHRoaXMsInRleHRhcmVhUGFyZW50U3R5bGUiLHZvaWQgMCksYTkodGhpcywibGF5ZXJDbGFzcyIsdm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgWjIodGhpcyksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMu'@;
put 'YmluZEV2ZW50cygpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3koKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5URVhUQVJFQS52YWx1ZX1zZXRWYWx1ZShsKXt0aGlzLlRFWFRBUkVBLnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0'@;
put 'aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29wZW5lZD0hMSx0aGlz'@;
put 'LmF1dG9SZXNpemUudW5PYnNlcnZlKCksTUUodGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdGhpcy5ob3Qucm9vdEVsZW1lbnQpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKX1wcmVwYXJl'@;
put 'KGwsYSxkLGgsZix2KXtjb25zdCBNPXRoaXMuc3RhdGU7aWYoc3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksIXYucmVhZE9ubHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpJfT12O0kmJiF0aGlzLmlzT3BlbmVkKCkmJih0aGlzLlRFWFRBUkVBLnZh'@;
put 'bHVlPSIiKSxNIT09YXUuRklOSVNIRUQmJiF0aGlzLmlzT3BlbmVkKCkmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpfX1iZWdpbkVkaXRpbmcobCxhKXt0aGlzLnN0YXRlPT09YXUuVklSR0lOJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIixzdXBlci5iZWdpbkVkaXRpbmcobCxhKSl9Zm9j'@;
put 'dXMoKXt0aGlzLlRFWFRBUkVBLnNlbGVjdCgpLEFFKHRoaXMuVEVYVEFSRUEsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O3RoaXMuVEVYVEFSRUE9bC5jcmVhdGVFbGVtZW50KCJURVhUQVJFQSIpLG1z'@;
put 'KHRoaXMuVEVYVEFSRUEsW1siZGF0YS1ob3QtaW5wdXQiLCIiXSxrbSgtMSldKSxFaSh0aGlzLlRFWFRBUkVBLCJoYW5kc29udGFibGVJbnB1dCIpLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFT'@;
put 'dHlsZS5oZWlnaHQ9MCx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLlRFWFRBUkVBX1BBUkVOVD1sLmNyZWF0ZUVsZW1lbnQoIkRJViIpLEVpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCJoYW5kc29udGFibGVJbnB1dEhvbGRlciIpLGdzKHRoaXMuVEVYVEFSRUFf'@;
put 'UEFSRU5ULHRoaXMubGF5ZXJDbGFzcykmJmhzKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyksRWkodGhpcy5URVhUQVJFQV9QQVJFTlQsWVApLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT10aGlzLlRFWFRBUkVBX1BBUkVOVC5zdHlsZSx0aGlzLlRFWFRBUkVBX1BBUkVO'@;
put 'VC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCl9aGlkZUVkaXRhYmxlRWxlbWVudCgpe3EyZSgpJiYodGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9Ii05OTk5OXB4IiksdGhpcy50ZXh0'@;
put 'YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjAiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IjFweCIsaHModGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxFaSh0aGlzLlRFWFRBUkVBX1BB'@;
put 'UkVOVCxZUCl9c2hvd0VkaXRhYmxlRWxlbWVudCgpe3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm92ZXJmbG93PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbj0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVb'@;
put 'dGhpcy5ob3QuaXNSdGwoKT8ibGVmdCI6InJpZ2h0Il09ImF1dG8iLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIxIix0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iIjtjb25zdCBsPXRoaXMuVEVYVEFSRUFfUEFSRU5ULmNoaWxkTm9kZXM7bGV0IGE9ITE7S2EobC5s'@;
put 'ZW5ndGgtMSxkPT57aWYoZ3MobFtkXSwiaGFuZHNvbnRhYmxlRWRpdG9yIikpcmV0dXJuIGE9ITAsITF9KSxncyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxZUCkmJmhzKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFlQKSxhPyh0aGlzLmxheWVyQ2xhc3M9Imh0X2VkaXRvcl92aXNpYmxlIixFaSh0aGlz'@;
put 'LlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKToodGhpcy5sYXllckNsYXNzPXRoaXMuZ2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCksRWkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSl9cmVmcmVzaFZhbHVlKCl7Y29uc3QgbD10aGlzLmhvdC50b1BoeXNp'@;
put 'Y2FsUm93KHRoaXMucm93KSxhPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwobCx0aGlzLmNvbCk7dGhpcy5vcmlnaW5hbFZhbHVlPWEsdGhpcy5zZXRWYWx1ZShhKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuc3RhdGUhPT1hdS5FRElUSU5HJiYhbClyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZChsfHx0aGlzLmNsb3NlKCkpO2NvbnN0e3RvcDphLHN0YXJ0'@;
put 'OmQsd2lkdGg6aCxtYXhXaWR0aDpmLGhlaWdodDp2LG1heEhlaWdodDpNfT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09'@;
put 'YCR7ZH1weGAsdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCk7Y29uc3QgST10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5URCk7dGhpcy5URVhUQVJFQS5zdHlsZS5mb250U2l6ZT1JLmZvbnRTaXplLHRoaXMuVEVYVEFSRUEuc3R5bGUuZm9udEZhbWlseT1JLmZv'@;
put 'bnRGYW1pbHksdGhpcy5URVhUQVJFQS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5URC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsdGhpcy5hdXRvUmVzaXplLmluaXQodGhpcy5URVhUQVJFQSx7bWluV2lkdGg6TWF0aC5taW4oaCxmKSxtaW5IZWlnaHQ6TWF0aC5taW4odixNKSxtYXhXaWR0'@;
put 'aDpmLG1heEhlaWdodDpNfSwhMCl9YmluZEV2ZW50cygpe1MkKCkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwiZm9jdXNvdXQiLCgpPT50aGlzLmZpbmlzaEVkaXRpbmcoITEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5'@;
put 'IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhp'@;
put 'cy5zdGF0ZT09PWF1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT57dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc3RhdGU9PT1hdS5FRElUSU5HJiZ0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24oKXt9'@;
put 'ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5l'@;
put 'eGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5fSx7a2V5czpb'@;
put 'WyJNZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjooKT0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCl9LHtrZXlzOltbIkFsdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFjazooZix2'@;
put 'KT0+e2xldFtNXT12O1dwZShNLHRoaXMuVEVYVEFSRUEpfX0se2tleXM6W1siRW5kIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0W01dPXY7V3BlKE0sdGhpcy5URVhUQVJFQSl9fV0se3J1bk9ubHlJZjooKT0+SGEodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6WXBlfSl9dW5yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoWXBlKX19Y29uc3QgeWF0PSJodFRleHRFbGxpcHNpcyI7ZnVuY3Rpb24gY1QoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT12LmFyaWFUYWdz'@;
put 'LEk9W10sRz1bXSxyZT1bXSx1ZT1bXTt2LmNsYXNzTmFtZSYmRWkobCx2LmNsYXNzTmFtZSksdi5yZWFkT25seT8oSS5wdXNoKHYucmVhZE9ubHlDZWxsQ2xhc3NOYW1lKSxNJiZ1ZS5wdXNoKEIyZSgpKSk6TSYmcmUucHVzaChCMmUoKVswXSksITE9PT12LnZhbGlkJiZ2LmludmFsaWRDZWxs'@;
put 'Q2xhc3NOYW1lPyhJLnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmdWUucHVzaChqMmUoKSkpOihHLnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmcmUucHVzaChqMmUoKVswXSkpLCExPT09di53b3JkV3JhcCYmdi5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZJLnB1c2godi5u'@;
put 'b1dvcmRXcmFwQ2xhc3NOYW1lKSwhZiYmdi5wbGFjZWhvbGRlciYmSS5wdXNoKHYucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSx2LnRleHRFbGxpcHNpcyYmSS5wdXNoKHlhdCksaHMobCxHKSxFaShsLEkpLEI3KGwscmUpLG1zKGwsdWUpfWZ1bmN0aW9uIEVnKGMsbCxhLGQsaCxmLHYpe2NU'@;
put 'LmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKTtsZXQgTT1mOyFNJiZ2LnBsYWNlaG9sZGVyJiYoTT12LnBsYWNlaG9sZGVyKSxNPW9jKE0pLHYudHJpbVdoaXRlc3BhY2UmJihNPU0udHJpbSgpKSxMbShsLE0pfWNULlJFTkRFUkVSX1RZUEU9ImJhc2UiLEVnLlJFTkRFUkVSX1RZUEU9InRl'@;
put 'eHQiO2NvbnN0IEdwZT17Q0VMTF9UWVBFOiJ0ZXh0IixlZGl0b3I6czkscmVuZGVyZXI6RWd9O2Z1bmN0aW9uIGczKGMsbCl7Y29uc3QgYT1uZXcganBlKGMsbHx8e30sREspO3JldHVybiBhLmluaXQoKSxhfVgyKEdwZSksZzMuZWRpdG9ycz17QmFzZUVkaXRvcjprX30sZzMuQ29yZT1mdW5j'@;
put 'dGlvbihjKXtyZXR1cm4gbmV3IGpwZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxESyl9LGczLkRlZmF1bHRTZXR0aW5ncz1mcGUoKSxnMy5ob29rcz1NYS5nZXRTaW5nbGV0b24oKSxnMy5DZWxsQ29vcmRzPWNQLGczLkNlbGxS'@;
put 'YW5nZT1tSyxnMy5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIixnMy5idWlsZERhdGU9IjEwLzA3LzIwMjUgMTA6NTk6MDEiLGczLnZlcnNpb249IjE2LjAuMSIsZzMubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czp5bnQsZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OlgzZSxnZXRMYW5ndWFnZXNE'@;
put 'aWN0aW9uYXJpZXM6ZnVuY3Rpb24gU250KCl7cmV0dXJuIHdudCgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTpLM2UsZ2V0VHJhbnNsYXRlZFBocmFzZTpxM2V9O2NvbnN0IHJvPWczO2Z1bmN0aW9uICRwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gX2F0KGMpe3ZhciBsPWZ1bmN0'@;
put 'aW9uIHdhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgS3BlPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIEhxIGV4dGVuZHMgczl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLCRwZSh0aGlzLCJp'@;
put 'c0ZsaXBwZWRWZXJ0aWNhbGx5IiwhMSksJHBlKHRoaXMsImlzRmxpcHBlZEhvcml6b250YWxseSIsITEpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iaGFuZHNvbnRhYmxlIn1vcGVuKCl7c3VwZXIub3BlbigpO2NvbnN0IGw9dGhpcy5odENvbnRhaW5lci5zdHlsZTt0aGlzLmh0'@;
put 'RWRpdG9yJiYodGhpcy5odEVkaXRvci5kZXN0cm95KCksbC53aWR0aD0iIixsLmhlaWdodD0iIixsLm92ZXJmbG93PSIiKSwibm9uZSI9PT1sLmRpc3BsYXkmJihsLmRpc3BsYXk9IiIpLHRoaXMuaHRFZGl0b3I9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuaHRDb250YWluZXIsdGhp'@;
put 'cy5odE9wdGlvbnMpLHRoaXMuaHRFZGl0b3IuaW5pdCgpLHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIix0aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwoMCwwKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpLEFF'@;
put 'KHRoaXMuVEVYVEFSRUEsMCx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCksdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRUYXJnZXREcm9wZG93bldpZHRoKCksaGVpZ2h0OnRoaXMuZ2V0VGFyZ2V0RHJvcGRvd25IZWlnaHQoKX0pLHRoaXMucmVmcmVzaERp'@;
put 'bWVuc2lvbnMoKSx0aGlzLmZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpLHRoaXMuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5SWZOZWVkZWQoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlz'@;
put 'LnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhpcyxJPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFt'@;
put 'ZToibGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUo'@;
put 'KSxhZnRlck9uQ2VsbE1vdXNlRG93bihHLHJlKXtjb25zdCB1ZT10aGlzLmdldFNvdXJjZURhdGEocmUucm93LHJlLmNvbCk7dm9pZCAwIT09dWUmJk0uc2V0VmFsdWUodWUpLE0uaG90LmRlc3Ryb3lFZGl0b3IoKX0scHJldmVudFdoZWVsOiEwLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5p'@;
put 'c1J0bCgpPyJydGwiOiJsdHIifTt0aGlzLmNlbGxQcm9wZXJ0aWVzLmhhbmRzb250YWJsZSYmd3UoSSx2LmhhbmRzb250YWJsZSksdGhpcy5odE9wdGlvbnM9SX1iZWdpbkVkaXRpbmcobCxhKXtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKCkub25CZWdpbkVkaXRpbmc7ZCYmITE9PT1k'@;
put 'KCl8fHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtsLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlRWRpdG9yIix0aGlzLlRFWFRBUkVB'@;
put 'X1BBUkVOVC5hcHBlbmRDaGlsZChsKSx0aGlzLmh0Q29udGFpbmVyPWwsdGhpcy5hc3NpZ25Ib29rcygpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2lmKHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuaXNMaXN0ZW5pbmcoKSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5odEVkaXRvciYmdGhp'@;
put 'cy5odEVkaXRvci5nZXRTZWxlY3RlZExhc3QoKSl7Y29uc3QgaD10aGlzLmh0RWRpdG9yLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRWYWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1mbGlwRHJvcGRvd25WZXJ0aWNhbGx5SWZOZWVkZWQoKXtjb25zdHt2aWV3Omx9'@;
put 'PXRoaXMuaG90LGE9dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO2xldCBkPWEudG9wO2lmKGwuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IE09bC5nZXRUYWJsZU9mZnNldCgpLnRvcC10aGlzLmhvdC5yb290V2luZG93LnNjcm9sbFk7ZD1NYXRoLm1heChkK00sMCl9'@;
put 'Y29uc3QgaD10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCksZj1sLmdldFdvcmtzcGFjZUhlaWdodCgpLWQtYS5oZWlnaHQsdj1oPmYmJmQ+ZithLmhlaWdodDtyZXR1cm4gdj90aGlzLmZsaXBEcm9wZG93blZlcnRpY2FsbHkoKTp0aGlzLnVuZmxpcERyb3Bkb3duVmVydGljYWxseSgpLHtpc0Zs'@;
put 'aXBwZWQ6dixzcGFjZUFib3ZlOmQsc3BhY2VCZWxvdzpmfX1mbGlwRHJvcGRvd25WZXJ0aWNhbGx5KCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2wucG9zaXRpb249ImFic29sdXRlIixsLnRvcD0tdGhpcy5nZXREcm9wZG93bkhlaWdodCgpKyJweCIsdGhpcy5p'@;
put 'c0ZsaXBwZWRWZXJ0aWNhbGx5PSEwfXVuZmxpcERyb3Bkb3duVmVydGljYWxseSgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9IiIsdGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5PSExfWZsaXBEcm9wZG93bkhvcml6'@;
put 'b250YWxseUlmTmVlZGVkKCl7Y29uc3R7dmlldzpsfT10aGlzLmhvdCxhPXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTtsZXQgZD1hLnN0YXJ0K2Eud2lkdGg7aWYobC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBNPWwuZ2V0VGFibGVPZmZzZXQoKS5sZWZ0LXRo'@;
put 'aXMuaG90LnJvb3RXaW5kb3cuc2Nyb2xsWDtkPU1hdGgubWF4KGQrTSwwKX1jb25zdCBoPXRoaXMuZ2V0RHJvcGRvd25XaWR0aCgpLGY9bC5nZXRXb3Jrc3BhY2VXaWR0aCgpLWQrYS53aWR0aCx2PWg+ZiYmZD5mO3JldHVybiB2P3RoaXMuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCk6dGhp'@;
put 'cy51bmZsaXBEcm9wZG93bkhvcml6b250YWxseSgpLHtpc0ZsaXBwZWQ6dixzcGFjZUlubGluZVN0YXJ0OmQsc3BhY2VJbmxpbmVFbmQ6Zn19ZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLHt3aWR0aDphfT10aGlzLmdl'@;
put 'dEVkaXRlZENlbGxSZWN0KCk7bC5wb3NpdGlvbj0iYWJzb2x1dGUiLGxbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09LSh0aGlzLmdldERyb3Bkb3duV2lkdGgoKS1hKSsicHgiLHRoaXMuaXNGbGlwcGVkSG9yaXpvbnRhbGx5PSEwfXVuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5'@;
put 'KCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2wucG9zaXRpb249ImFic29sdXRlIixsW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPSIiLHRoaXMuaXNGbGlwcGVkSG9yaXpvbnRhbGx5PSExfWdldERyb3Bkb3duSGVpZ2h0KCl7cmV0dXJuIHRoaXMu'@;
put 'aHRFZGl0b3IuZ2V0VGFibGVIZWlnaHQoKX1nZXREcm9wZG93bldpZHRoKCl7cmV0dXJuIHRoaXMuaHRFZGl0b3IuZ2V0VGFibGVXaWR0aCgpfWdldFRhcmdldERyb3Bkb3duV2lkdGgoKXtyZXR1cm4gdGhpcy5odEVkaXRvci52aWV3LmdldFRhYmxlV2lkdGgoKX1nZXRUYXJnZXREcm9wZG93'@;
put 'bkhlaWdodCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVIZWlnaHQoKSsxfWFzc2lnbkhvb2tzKCl7dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3ZhciBsO251bGw9PT0obD10aGlzLmh0RWRpdG9yKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCl9KSx0'@;
put 'aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwobCxhKT0+e2F8fHRoaXMuY2xvc2UoKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2Nv'@;
put 'bnN0IGg9KGYsdik9Pntjb25zdCBNPXRoaXMuaHRFZGl0b3I7aWYodm9pZCAwIT09ZiYmKGY8MHx8dGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5JiZmPk0uY291bnRSb3dzKCktMT9NLmRlc2VsZWN0Q2VsbCgpOk0uc2VsZWN0Q2VsbChmLDApLE0uZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIHYu'@;
put 'cHJldmVudERlZmF1bHQoKSx6Mih2KSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLlRFWFRBUkVBLmZvY3VzKCksITF9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmY9Pntjb25zdCB2PXRoaXMuaHRFZGl0b3I7bGV0IE0sSTtyZXR1cm4hdi5nZXRTZWxlY3Rl'@;
put 'ZExhc3QoKSYmdGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5P009di5jb3VudFJvd3MoKS0xOnYuZ2V0U2VsZWN0ZWRMYXN0KCkmJih0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHk/KEk9di5nZXRTZWxlY3RlZExhc3QoKVswXSxNPU1hdGgubWF4KDAsSS0xKSk6KEk9di5nZXRTZWxlY3RlZExhc3Qo'@;
put 'KVswXSxNPUktMSkpLGgoTSxmKX0scHJldmVudERlZmF1bHQ6ITF9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEk7aWYodi5nZXRTZWxlY3RlZExhc3QoKXx8dGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5KXtpZih2LmdldFNl'@;
put 'bGVjdGVkTGFzdCgpKWlmKHRoaXMuaXNGbGlwcGVkVmVydGljYWxseSlNPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0rMTtlbHNlIGlmKCF0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkpe2NvbnN0IEc9di5jb3VudFJvd3MoKS0xO0k9di5nZXRTZWxlY3RlZExhc3QoKVswXSxNPU1hdGgubWluKEcs'@;
put 'SSsxKX19ZWxzZSBNPTA7cmV0dXJuIGgoTSxmKX0scHJldmVudERlZmF1bHQ6ITF9XSx7Z3JvdXA6S3BlLHJlbGF0aXZlVG9Hcm91cDp6bSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hv'@;
put 'cnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChLcGUpfX1mdW5jdGlvbiBYcGUoYyxsLGEpe3FwZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcXBlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGlu'@;
put 'aXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBHUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTWF0KGMpe3ZhciBsPWZ1bmN0aW9uIHhhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9'@;
put 'Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9'@;
put 'cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl'@;
put 'OiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gTnEoYyxsKXtyZXR1cm4gYy5nZXQoVnEoYyxsKSl9ZnVuY3Rpb24gVnEoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlBy'@;
put 'aXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBCcT1uZXcgV2Vha01hcCxKcGU9bmV3IFdlYWtNYXAsanE9bmV3IFdlYWtTZXQ7Y2xhc3MgenEgZXh0ZW5kcyBIcXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gU2F0KGMs'@;
put 'bCl7cXBlKGMsbCksbC5hZGQoYyl9KHRoaXMsanEpLEdQKHRoaXMsInF1ZXJ5IixudWxsKSxHUCh0aGlzLCJzdHJpcHBlZENob2ljZXMiLFtdKSxHUCh0aGlzLCJyYXdDaG9pY2VzIixbXSksWHBlKHRoaXMsQnEsdGhpcy5ob3QuZ3VpZC5zbGljZSgwLDkpKSxYcGUodGhpcyxKcGUsSUUoKCk9'@;
put 'Pnt0aGlzLmZvY3VzKCl9LDEwMCkpLEdQKHRoaXMsInNvcnRCeVJlbGV2YW5jZSIsZnVuY3Rpb24obCxhLGQpe2NvbnN0IGg9W10sZj1bXSx2PWwubGVuZ3RoO2xldCBJLEcscmUsdWUsTT1hLmxlbmd0aDtpZigwPT09dil7Zm9yKHJlPTA7cmU8TTtyZSsrKWYucHVzaChyZSk7cmV0dXJuIGZ9'@;
put 'Zm9yKHJlPTA7cmU8TTtyZSsrKXtpZihHPXkkKG9jKGFbcmVdKSksZCl1ZT1HLmluZGV4T2YobCk7ZWxzZXtjb25zdCB5ZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmxvY2FsZTt1ZT1HLnRvTG9jYWxlTG93ZXJDYXNlKHllKS5pbmRleE9mKGwudG9Mb2NhbGVMb3dlckNhc2UoeWUpKX0tMSE9PXVl'@;
put 'JiYoST1HLmxlbmd0aC11ZS12LGgucHVzaCh7YmFzZUluZGV4OnJlLGluZGV4OnVlLGNoYXJzTGVmdDpJLHZhbHVlOkd9KSl9Zm9yKGguc29ydCgoeWUsRWUpPT57aWYoLTE9PT1FZS5pbmRleClyZXR1cm4tMTtpZigtMT09PXllLmluZGV4KXJldHVybiAxO2lmKHllLmluZGV4PEVlLmluZGV4'@;
put 'KXJldHVybi0xO2lmKEVlLmluZGV4PHllLmluZGV4KXJldHVybiAxO2lmKHllLmluZGV4PT09RWUuaW5kZXgpe2lmKHllLmNoYXJzTGVmdDxFZS5jaGFyc0xlZnQpcmV0dXJuLTE7aWYoeWUuY2hhcnNMZWZ0PkVlLmNoYXJzTGVmdClyZXR1cm4gMX1yZXR1cm4gMH0pLHJlPTAsTT1oLmxlbmd0'@;
put 'aDtyZTxNO3JlKyspZi5wdXNoKGhbcmVdLmJhc2VJbmRleCk7cmV0dXJuIGZ9KX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImF1dG9jb21wbGV0ZSJ9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3Q2hvaWNlcy5maW5kKGE9PnRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEpPT09'@;
put 'dGhpcy5URVhUQVJFQS52YWx1ZSk7cmV0dXJuIEhhKGwpP2w6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksRWkodGhpcy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIiksRWkodGhpcy5odENvbnRhaW5lciwtMT09PXRo'@;
put 'aXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJm1zKHRoaXMuVEVYVEFSRUEsW1sidHlwZSIsInRleHQiXSxbInJvbGUiLCJjb21ib2JveCJdLEgyZSgibGlz'@;
put 'dGJveCIpLFsiYXJpYS1hdXRvY29tcGxldGUiLCJsaXN0Il1dKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZtcyh0aGlzLlRFWFRBUkVBLFtCMigiZmFsc2UiKSxicWUoYCR7TnEoQnEsdGhp'@;
put 'cyl9LWxpc3Rib3gtJHtsfS0ke2F9YCldKX1vcGVuKCl7c3VwZXIub3BlbigpO2NvbnN0IGw9dm9pZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3duLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyxk'@;
put 'PUFycmF5LmlzQXJyYXkodGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2UpP3RoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlOm51bGwsaD1kPy5sZW5ndGgse3JvdzpmLGNvbDp2fT10aGlzO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKSx0aGlzLmFkZEhvb2soImJlZm9y'@;
put 'ZUtleURvd24iLE09PnRoaXMub25CZWZvcmVLZXlEb3duKE0pKSx0aGlzLmh0RWRpdG9yLmFkZEhvb2soImFmdGVyU2Nyb2xsIixOcShKcGUsdGhpcykpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2NvbFdpZHRoczpsP1tpdSh0aGlzLlRFWFRBUkVBKS0yXTp2b2lkIDAsYXV0b0Nv'@;
put 'bHVtblNpemU6ITAscmVuZGVyZXI6KE0sSSxHLHJlLHVlLHllLEVlKT0+e0VnKE0sSSxHLHJlLHVlLHllLEVlKTtjb25zdHtmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOkJlLGFsbG93SHRtbDpHZSxsb2NhbGU6c3R9PXRoaXMuY2VsbFByb3BlcnRpZXMscHQ9dGhpcy5xdWVyeTtsZXQgcXQsbW4s'@;
put 'ZHQ9b2MoeWUpO2R0JiYhR2UmJihxdD0hMD09PUJlP2R0LmluZGV4T2YocHQpOmR0LnRvTG9jYWxlTG93ZXJDYXNlKHN0KS5pbmRleE9mKHB0LnRvTG9jYWxlTG93ZXJDYXNlKHN0KSksLTEhPT1xdCYmKG1uPWR0LnN1YnN0cihxdCxwdC5sZW5ndGgpLGR0PWR0LnJlcGxhY2UobW4sYDxzdHJv'@;
put 'bmc+JHttbn08L3N0cm9uZz5gKSkpLGEmJm1zKEksW1sicm9sZSIsIm9wdGlvbiJdLC4uLmQ/W1NxZShoKV06W10sLi4uZD9bTXFlKGQuaW5kZXhPZih5ZSkrMSldOltdLFsiaWQiLGAke3RoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuaWR9XyR7R30tJHtyZX1gXV0pLEkuaW5uZXJIVE1MPWR0'@;
put 'fSxhZnRlclNlbGVjdGlvbkVuZDooTSxJKT0+e2lmKGEpe2NvbnN0IEc9dWU9Pnttcyh1ZSxbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSksbXModGhpcy5URVhUQVJFQSwuLi4oYz0+WyJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLGNdKSh1ZS5pZCkpfSxyZT10aGlzLmh0RWRpdG9yLmdldENl'@;
put 'bGwoTSxJLCEwKTtudWxsIT09cmU/RyhyZSk6dGhpcy5odEVkaXRvci5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+e2NvbnN0IHVlPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChNLEksITApO0codWUpfSl9fX0pLGEmJihtcyh0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0'@;
put 'T3ZlcmxheXMud3RUYWJsZS5UQUJMRSwicm9sZSIsInByZXNlbnRhdGlvbiIpLG1zKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXSx3cWUoInBvbGl0ZSIpLENxZSgidGV4dCIpLFsiaWQiLGAke05xKEJxLHRoaXMpfS1saXN0Ym94LSR7Zn0tJHt2fWBdXSks'@;
put 'bXModGhpcy5URVhUQVJFQSwuLi5CMigidHJ1ZSIpKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSl9Y2xvc2UoKXt0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgp'@;
put 'LHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJm1zKHRoaXMuVEVYVEFSRUEsW0IyKCJmYWxzZSIpXSl9ZGlzY2FyZEVkaXRvcihsKXtzdXBlci5kaXNjYXJkRWRpdG9yKGwpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9cXVlcnlDaG9pY2VzKGwpe2NvbnN0IGE9dGhpcy5jZWxsUHJv'@;
put 'cGVydGllcy5zb3VyY2U7dGhpcy5xdWVyeT1sLCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuY2FsbCh0aGlzLmNlbGxQcm9wZXJ0aWVzLGwsZD0+e3RoaXMucmF3Q2hvaWNlcz1kLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGQpKX0pOkFycmF5LmlzQXJy'@;
put 'YXkoYSk/KHRoaXMucmF3Q2hvaWNlcz1hLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGEpKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9dXBkYXRlQ2hvaWNlc0xpc3QobCl7Y29uc3QgYT1rJCh0aGlzLlRFWFRBUkVBKSxkPWxmZSh0aGlzLlRF'@;
put 'WFRBUkVBKSxoPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNlLGY9dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXI7bGV0IHY9bnVsbCxNPW51bGwsST1sO2gmJih2PXRoaXMuc29ydEJ5UmVsZXZhbmNlKHRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKHRoaXMuZ2V0VmFsdWUoKSks'@;
put 'SSx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUpKTtjb25zdCBHPUFycmF5LmlzQXJyYXkodik/di5sZW5ndGg6MDtpZighMT09PWYpRyYmKE09dlswXSk7ZWxzZXtjb25zdCByZT1bXTtmb3IobGV0IHVlPTAseWU9SS5sZW5ndGg7dWU8eWUmJiEoaCYmRzw9dWUp'@;
put 'O3VlKyspcmUucHVzaChHP0lbdlt1ZV1dOklbdWVdKTtNPTAsST1yZX10aGlzLnN0cmlwcGVkQ2hvaWNlcz1JLHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0wPT09SS5sZW5ndGg/Im5vbmUiOiIiLHRoaXMuaHRFZGl0b3IubG9hZERhdGEodkUoW0ldKSksSS5sZW5n'@;
put 'dGg+MCYmKHRoaXMudXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCksdGhpcy5mbGlwRHJvcGRvd25WZXJ0aWNhbGx5SWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShNKSksdGhpcy5ob3QubGlzdGVuKCks'@;
put 'QUUodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpkKX1mbGlwRHJvcGRvd25WZXJ0aWNhbGx5SWZOZWVkZWQoKXtjb25zdCBsPXN1cGVyLmZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpLHtpc0ZsaXBwZWQ6YSxzcGFjZUFib3ZlOmQsc3BhY2VCZWxvdzpofT1sO3JldHVybiB0'@;
put 'aGlzLmxpbWl0RHJvcGRvd25JZk5lZWRlZChhP2Q6aCksbH1saW1pdERyb3Bkb3duSWZOZWVkZWQobCl7Y29uc3QgYT10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCk7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPW51bGw7ZG97aD10aGlzLmh0RWRpdG9yLnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJv'@;
put 'd0hlaWdodCgpLGQrPWh9d2hpbGUoZDxsKTtmPWQtaCx0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkmJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcD1wYXJzZUludCh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcCwxMCkrYS1mKyJweCIpLHRoaXMuc2V0RHJv'@;
put 'cGRvd25IZWlnaHQoZC1oKX19dXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCl7Y29uc3QgbD1SJCgpLGE9dGhpcy5nZXRUYXJnZXRFZGl0b3JXaWR0aCgpK2wsZD10aGlzLmdldFRhcmdldEVkaXRvckhlaWdodCgpK2w7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6YSxoZWln'@;
put 'aHQ6ZH0pLFZxKGpxLHRoaXMsUXBlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9c2V0RHJvcGRvd25IZWlnaHQobCl7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0Omx9KSxW'@;
put 'cShqcSx0aGlzLFFwZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9mIGw/dGhpcy5odEVkaXRvci5zZWxlY3RD'@;
put 'ZWxsKGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKX1nZXRUYXJnZXRFZGl0b3JIZWlnaHQoKXtsZXQgbD0wO2lmKCF0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpe2NvbnN0IGg9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21w'@;
put 'dXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKTtsPXBhcnNlSW50KGguYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KGguYm9yZGVyQm90dG9tV2lkdGgsMTApfWNvbnN0IGE9TWF0aC5taW4odGhpcy5jZWxsUHJvcGVydGllcy52aXNpYmxlUm93'@;
put 'cyx0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGgpO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YX0sKGgsZik9PmYpLnJlZHVjZSgoaCxmKT0+aCsodGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkrKDA9PT1mPzE6MCkpLDApK2x9Z2V0VGFyZ2V0RWRpdG9y'@;
put 'V2lkdGgoKXtsZXQgbD0wO2lmKCF0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKTtsPXBhcnNlSW50KGEuYm9yZGVySW5saW5l'@;
put 'U3RhcnRXaWR0aCwxMCkrcGFyc2VJbnQoYS5ib3JkZXJJbmxpbmVFbmRXaWR0aCwxMCl9cmV0dXJuIHRoaXMuaHRFZGl0b3IuZ2V0Q29sV2lkdGgoMCkrbH1zdHJpcFZhbHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZO'@;
put 'ZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMuY2VsbFByb3BlcnRpZXMsZD15byhsLGY9Pm9jKGYpKTtyZXR1cm4geW8oZCxmPT5hP2Y6eSQoZikpfWFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxk'@;
put 'X3Jvdz1hP2EuZnJvbS5yb3c6LTE7bGV0IGg9ITE7cmV0dXJuIGw9PT0kYS5BUlJPV19ET1dOJiZkX3Jvdz4wJiZkX3Jvdzx0aGlzLmh0RWRpdG9yLmNvdW50Um93cygpLTEmJihoPSEwKSxsPT09JGEuQVJST1dfVVAmJmRfcm93Pi0xJiYoaD0hMCksaH1vbkJlZm9yZUtleURvd24obCl7aWYo'@;
put 'ZmZlKGwua2V5Q29kZSl8fGwua2V5Q29kZT09PSRhLkJBQ0tTUEFDRXx8bC5rZXlDb2RlPT09JGEuREVMRVRFfHxsLmtleUNvZGU9PT0kYS5JTlNFUlQpe2xldCBhPTEwO2lmKGwua2V5Q29kZT09PSRhLkMmJihsLmN0cmxLZXl8fGwubWV0YUtleSkpcmV0dXJuO3RoaXMuaXNPcGVuZWQoKXx8'@;
put 'KGErPTEwKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9LGEpfX19ZnVuY3Rpb24gUXBlKCl7dGhpcy5odEVkaXRvci52aWV3Lmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJnRoaXMuaHRFZGl0'@;
put 'b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0VGFyZ2V0RWRpdG9yV2lkdGgoKStkMCh0aGlzLmhvdC5yb290RG9jdW1lbnQpfSl9Y2xhc3MgZTRlIGV4dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJjaGVja2JveCJ9YmVnaW5FZGl0aW5nKGwsYSl7aWYo'@;
put 'YSYmIm1vdXNldXAiPT09YS50eXBlJiYiVEQiPT09YS50YXJnZXQubm9kZU5hbWUpe2NvbnN0IGQ9dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyk7Z3MoZCwiaHRCYWRWYWx1ZSIpfHxkLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVu'@;
put 'KCl7fWNsb3NlKCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7fX1jb25zdCBabT0oKT0+d2luZG93LEoyPSgpPT53aW5kb3cuZG9jdW1lbnQsVXE9KGMsbCk9PndpbmRvdy5zZXRUaW1lb3V0KGMsbCksSHA9ZnVuY3Rpb24oYyxsLGEsZCl7Yy5hZGRFdmVudExpc3RlbmVyKGws'@;
put 'YSwhIWQpfSxUZz1mdW5jdGlvbihjLGwsYSxkKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCEhZCl9LE9oPWZ1bmN0aW9uKGMsbCl7cmV0dXJuLTEhPT0oIiAiK2MuY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrbCsiICIpfSxacT1mdW5jdGlvbihjLGwpe09oKGMsbCl8fChjLmNsYXNz'@;
put 'TmFtZT0iIj09PWMuY2xhc3NOYW1lP2w6Yy5jbGFzc05hbWUrIiAiK2wpfSxXcT1mdW5jdGlvbihjLGwpe2MuY2xhc3NOYW1lPWZ1bmN0aW9uKGMpe3JldHVybiBjLnRyaW0/Yy50cmltKCk6Yy5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KCgiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNl'@;
put 'KCIgIitsKyIgIiwiICIpKX0sWXE9ZnVuY3Rpb24oYyl7cmV0dXJuL0FycmF5Ly50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSl9LFBoPWZ1bmN0aW9uKGMpe3JldHVybi9EYXRlLy50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSkmJiFpc05hTihj'@;
put 'LmdldFRpbWUoKSl9LGthdD1mdW5jdGlvbihjKXtsZXQgbD1jLmdldERheSgpO3JldHVybiAwPT09bHx8Nj09PWx9LERhdD1mdW5jdGlvbihjKXtyZXR1cm4gYyU0PT0wJiZjJTEwMCE9MHx8YyU0MDA9PTB9LHQ0ZT1mdW5jdGlvbihjLGwpe3JldHVyblszMSxEYXQoYyk/Mjk6MjgsMzEsMzAs'@;
put 'MzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdW2xdfSwkUD1mdW5jdGlvbihjKXtQaChjKSYmYy5zZXRIb3VycygwLDAsMCwwKX0sS1A9ZnVuY3Rpb24oYyxsKXtyZXR1cm4gYy5nZXRUaW1lKCk9PT1sLmdldFRpbWUoKX0sWFA9ZnVuY3Rpb24oYyxsLGEpe2xldCBkLGg7Zm9yKGQgaW4gbCloPXZv'@;
put 'aWQgMCE9PWNbZF0saCYmIm9iamVjdCI9PXR5cGVvZiBsW2RdJiZudWxsIT09bFtkXSYmdm9pZCAwPT09bFtkXS5ub2RlTmFtZT9QaChsW2RdKT9hJiYoY1tkXT1uZXcgRGF0ZShsW2RdLmdldFRpbWUoKSkpOllxKGxbZF0pP2EmJihjW2RdPWxbZF0uc2xpY2UoMCkpOmNbZF09WFAoe30sbFtk'@;
put 'XSxhKTooYXx8IWgpJiYoY1tkXT1sW2RdKTtyZXR1cm4gY30sbjRlPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZD1KMigpLmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7ZC5pbml0RXZlbnQobCwhMCwhMSksZD1YUChkLGEpLGMuZGlzcGF0Y2hFdmVudChkKX0scjRlPWZ1bmN0aW9uKGMpe3JldHVy'@;
put 'biBjLm1vbnRoPDAmJihjLnllYXItPU1hdGguY2VpbChNYXRoLmFicyhjLm1vbnRoKS8xMiksYy5tb250aCs9MTIpLGMubW9udGg+MTEmJihjLnllYXIrPU1hdGguZmxvb3IoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgtPTEyKSxjfSxOcD17ZmllbGQ6bnVsbCxib3VuZDp2b2lkIDAs'@;
put 'YXJpYUxhYmVsOiJVc2UgdGhlIGFycm93IGtleXMgdG8gcGljayBhIGRhdGUiLHBvc2l0aW9uOiJib3R0b20gbGVmdCIscmVwb3NpdGlvbjohMCxmb3JtYXQ6IllZWVktTU0tREQiLHRvU3RyaW5nOm51bGwscGFyc2U6bnVsbCxkZWZhdWx0RGF0ZTpudWxsLHNldERlZmF1bHREYXRlOiExLGZp'@;
put 'cnN0RGF5OjAsZmlyc3RXZWVrT2ZZZWFyTWluRGF5czo0LGZvcm1hdFN0cmljdDohMSxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLHllYXJSYW5nZToxMCxzaG93V2Vla051bWJlcjohMSxwaWNrV2hvbGVXZWVrOiExLG1pblllYXI6MCxtYXhZZWFyOjk5OTksbWluTW9udGg6dm9pZCAwLG1h'@;
put 'eE1vbnRoOnZvaWQgMCxzdGFydFJhbmdlOm51bGwsZW5kUmFuZ2U6bnVsbCxpc1JUTDohMSx5ZWFyU3VmZml4OiIiLHNob3dNb250aEFmdGVyWWVhcjohMSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRo'@;
put 'czohMSxudW1iZXJPZk1vbnRoczoxLG1haW5DYWxlbmRhcjoibGVmdCIsY29udGFpbmVyOnZvaWQgMCxibHVyRmllbGRPblNlbGVjdDohMCxpMThuOntwcmV2aW91c01vbnRoOiJQcmV2aW91cyBNb250aCIsbmV4dE1vbnRoOiJOZXh0IE1vbnRoIixtb250aHM6WyJKYW51YXJ5IiwiRmVicnVh'@;
put 'cnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHdlZWtkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5Iiwi'@;
put 'U2F0dXJkYXkiXSx3ZWVrZGF5c1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il19LHRoZW1lOm51bGwsZXZlbnRzOltdLG9uU2VsZWN0Om51bGwsb25PcGVuOm51bGwsb25DbG9zZTpudWxsLG9uRHJhdzpudWxsLGtleWJvYXJkSW5wdXQ6ITB9LGk0ZT1m'@;
put 'dW5jdGlvbihjLGwsYSl7Zm9yKGwrPWMuZmlyc3REYXk7bD49NzspbC09NztyZXR1cm4gYT9jLmkxOG4ud2Vla2RheXNTaG9ydFtsXTpjLmkxOG4ud2Vla2RheXNbbF19LElhdD1mdW5jdGlvbihjKXtsZXQgbD1bXSxhPSJmYWxzZSI7aWYoYy5pc0VtcHR5KXtpZighYy5zaG93RGF5c0luTmV4'@;
put 'dEFuZFByZXZpb3VzTW9udGhzKXJldHVybic8dGQgY2xhc3M9ImlzLWVtcHR5Ij48L3RkPic7bC5wdXNoKCJpcy1vdXRzaWRlLWN1cnJlbnQtbW9udGgiKSxjLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc3x8bC5wdXNoKCJpcy1zZWxlY3Rpb24tZGlzYWJsZWQi'@;
put 'KX1yZXR1cm4gYy5pc0Rpc2FibGVkJiZsLnB1c2goImlzLWRpc2FibGVkIiksYy5pc1RvZGF5JiZsLnB1c2goImlzLXRvZGF5IiksYy5pc1NlbGVjdGVkJiYobC5wdXNoKCJpcy1zZWxlY3RlZCIpLGE9InRydWUiKSxjLmhhc0V2ZW50JiZsLnB1c2goImhhcy1ldmVudCIpLGMuaXNJblJhbmdl'@;
put 'JiZsLnB1c2goImlzLWlucmFuZ2UiKSxjLmlzU3RhcnRSYW5nZSYmbC5wdXNoKCJpcy1zdGFydHJhbmdlIiksYy5pc0VuZFJhbmdlJiZsLnB1c2goImlzLWVuZHJhbmdlIiksJzx0ZCBkYXRhLWRheT0iJytjLmRheSsnIiBjbGFzcz0iJytsLmpvaW4oIiAiKSsnIiBhcmlhLXNlbGVjdGVkPSIn'@;
put 'K2ErJyI+PGJ1dHRvbiBjbGFzcz0icGlrYS1idXR0b24gcGlrYS1kYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1waWthLXllYXI9IicrYy55ZWFyKyciIGRhdGEtcGlrYS1tb250aD0iJytjLm1vbnRoKyciIGRhdGEtcGlrYS1kYXk9IicrYy5kYXkrJyI+JytjLmRheSsiPC9idXR0b24+PC90ZD4i'@;
put 'fSxMYXQ9ZnVuY3Rpb24oYyxsLGEsZCxoKXtsZXQgZj1uZXcgRGF0ZShkLGEsbCk7cmV0dXJuJzx0ZCBjbGFzcz0icGlrYS13ZWVrIj4nKyhjLmhhc01vbWVudD9jLm1vbWVudChmKS5pc29XZWVrKCk6ZnVuY3Rpb24oYyxsKXtjLnNldEhvdXJzKDAsMCwwLDApO2xldCBhPWMuZ2V0RGF0ZSgp'@;
put 'LGQ9Yy5nZXREYXkoKSxoPWwsZj1oLTEsTT1mdW5jdGlvbih5ZSl7cmV0dXJuKHllKzctMSklN307Yy5zZXREYXRlKGErZi1NKGQpKTtsZXQgST1uZXcgRGF0ZShjLmdldEZ1bGxZZWFyKCksMCxoKSxyZT0oYy5nZXRUaW1lKCktSS5nZXRUaW1lKCkpLzg2NGU1O3JldHVybiAxK01hdGgucm91'@;
put 'bmQoKHJlLWYrTShJLmdldERheSgpKSkvNyl9KGYsaCkpKyI8L3RkPiJ9LE9hdD1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm4nPHRyIGNsYXNzPSJwaWthLXJvdycrKGE/IiBwaWNrLXdob2xlLXdlZWsiOiIiKSsoZD8iIGlzLXNlbGVjdGVkIjoiIikrJyI+JysobD9jLnJldmVyc2UoKTpjKS5q'@;
put 'b2luKCIiKSsiPC90cj4ifSxIYXQ9ZnVuY3Rpb24oYyxsLGEsZCxoLGYpe2xldCB2LE0sSSxFZSxCZSxHPWMuX28scmU9YT09PUcubWluWWVhcix1ZT1hPT09Ry5tYXhZZWFyLHllPSc8ZGl2IGlkPSInK2YrJyIgY2xhc3M9InBpa2EtdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0i'@;
put 'cG9saXRlIj4nLEdlPSEwLHN0PSEwO2ZvcihJPVtdLHY9MDt2PDEyO3YrKylJLnB1c2goJzxvcHRpb24gdmFsdWU9IicrKGE9PT1oP3YtbDoxMit2LWwpKyciJysodj09PWQ/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrKHJlJiZ2PEcubWluTW9udGh8fHVlJiZ2PkcubWF4TW9udGg/JyBk'@;
put 'aXNhYmxlZD0iZGlzYWJsZWQiJzoiIikrIj4iK0cuaTE4bi5tb250aHNbdl0rIjwvb3B0aW9uPiIpO2ZvcihFZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JytHLmkxOG4ubW9udGhzW2RdKyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC1tb250aCIgdGFiaW5kZXg9'@;
put 'Ii0xIj4nK0kuam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsWXEoRy55ZWFyUmFuZ2UpPyh2PUcueWVhclJhbmdlWzBdLE09Ry55ZWFyUmFuZ2VbMV0rMSk6KHY9YS1HLnllYXJSYW5nZSxNPTErYStHLnllYXJSYW5nZSksST1bXTt2PE0mJnY8PUcubWF4WWVhcjt2Kyspdj49Ry5taW5ZZWFy'@;
put 'JiZJLnB1c2goJzxvcHRpb24gdmFsdWU9IicrdisnIicrKHY9PT1hPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit2KyI8L29wdGlvbj4iKTtyZXR1cm4gQmU9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicrYStHLnllYXJTdWZmaXgrJzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0'@;
put 'IHBpa2Etc2VsZWN0LXllYXIiIHRhYmluZGV4PSItMSI+JytJLmpvaW4oIiIpKyI8L3NlbGVjdD48L2Rpdj4iLHllKz1HLnNob3dNb250aEFmdGVyWWVhcj9CZStFZTpFZStCZSxyZSYmKDA9PT1kfHxHLm1pbk1vbnRoPj1kKSYmKEdlPSExKSx1ZSYmKDExPT09ZHx8Ry5tYXhNb250aDw9ZCkm'@;
put 'JihzdD0hMSksMD09PWwmJih5ZSs9JzxidXR0b24gY2xhc3M9InBpa2EtcHJldicrKEdlPyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iPicrRy5pMThuLnByZXZpb3VzTW9udGgrIjwvYnV0dG9uPiIpLGw9PT1jLl9vLm51bWJlck9mTW9udGhzLTEmJih5ZSs9JzxidXR0b24g'@;
put 'Y2xhc3M9InBpa2EtbmV4dCcrKHN0PyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iPicrRy5pMThuLm5leHRNb250aCsiPC9idXR0b24+IikseWUrIjwvZGl2PiJ9O2Z1bmN0aW9uIEdxKGMpe2xldCBsPXRoaXMsYT1sLmNvbmZpZyhjKTtsLl9vbk1vdXNlRG93bj1mdW5jdGlv'@;
put 'bihoKXtpZighbC5fdilyZXR1cm47bGV0IGY9KGg9aHx8Wm0oKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQ7aWYoZilpZihPaChmLCJpcy1kaXNhYmxlZCIpfHwoIU9oKGYsInBpa2EtYnV0dG9uIil8fE9oKGYsImlzLWVtcHR5Iil8fE9oKGYucGFyZW50Tm9kZSwiaXMtZGlzYWJsZWQi'@;
put 'KT9PaChmLCJwaWthLXByZXYiKT9sLnByZXZNb250aCgpOk9oKGYsInBpa2EtbmV4dCIpJiZsLm5leHRNb250aCgpOihsLnNldERhdGUobmV3IERhdGUoZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS15ZWFyIiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1tb250aCIpLGYuZ2V0QXR0cmli'@;
put 'dXRlKCJkYXRhLXBpa2EtZGF5IikpKSxhLmJvdW5kJiZVcShmdW5jdGlvbigpe2wuaGlkZSgpLGEuYmx1ckZpZWxkT25TZWxlY3QmJmEuZmllbGQmJmEuZmllbGQuYmx1cigpfSwxMDApKSksT2goZiwicGlrYS1zZWxlY3QiKSlsLl9jPSEwO2Vsc2V7aWYoIWgucHJldmVudERlZmF1bHQpcmV0'@;
put 'dXJuIGgucmV0dXJuVmFsdWU9ITEsITE7aC5wcmV2ZW50RGVmYXVsdCgpfX0sbC5fb25DaGFuZ2U9ZnVuY3Rpb24oaCl7bGV0IGY9KGg9aHx8Wm0oKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQ7ZiYmKE9oKGYsInBpa2Etc2VsZWN0LW1vbnRoIik/bC5nb3RvTW9udGgoZi52YWx1ZSk6'@;
put 'T2goZiwicGlrYS1zZWxlY3QteWVhciIpJiZsLmdvdG9ZZWFyKGYudmFsdWUpKX0sbC5fb25LZXlDaGFuZ2U9ZnVuY3Rpb24oaCl7aWYoaD1ofHxabSgpLmV2ZW50LGwuaXNWaXNpYmxlKCkpc3dpdGNoKGgua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDI3OmEuZmllbGQmJmEuZmllbGQuYmx1cigp'@;
put 'O2JyZWFrO2Nhc2UgMzc6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSk7YnJlYWs7Y2FzZSAzODpsLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KTticmVhaztjYXNlIDM5OmwuYWRqdXN0RGF0ZSgiYWRkIiwxKTticmVhaztjYXNlIDQwOmwuYWRqdXN0RGF0ZSgiYWRkIiw3KTticmVhaztjYXNl'@;
put 'IDg6Y2FzZSA0NjpsLnNldERhdGUobnVsbCl9fSxsLl9wYXJzZUZpZWxkVmFsdWU9ZnVuY3Rpb24oKXtpZihhLnBhcnNlKXJldHVybiBhLnBhcnNlKGEuZmllbGQudmFsdWUsYS5mb3JtYXQpO2lmKHRoaXMuaGFzTW9tZW50KXtsZXQgaD10aGlzLm1vbWVudChhLmZpZWxkLnZhbHVlLGEuZm9y'@;
put 'bWF0LGEuZm9ybWF0U3RyaWN0KTtyZXR1cm4gaCYmaC5pc1ZhbGlkKCk/aC50b0RhdGUoKTpudWxsfXJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKGEuZmllbGQudmFsdWUpKX0sbC5fb25JbnB1dENoYW5nZT1mdW5jdGlvbihoKXtsZXQgZjtoLmZpcmVkQnkhPT1sJiYoZj1sLl9wYXJzZUZp'@;
put 'ZWxkVmFsdWUoKSxQaChmKSYmbC5zZXREYXRlKGYpLGwuX3Z8fGwuc2hvdygpKX0sbC5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7bC5zaG93KCl9LGwuX29uSW5wdXRDbGljaz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9vbklucHV0Qmx1cj1mdW5jdGlvbigpe2xldCBoPUoyKCkuYWN0aXZl'@;
put 'RWxlbWVudDtkb3tpZihPaChoLCJwaWthLXNpbmdsZSIpKXJldHVybn13aGlsZShoPWgucGFyZW50Tm9kZSk7bC5fY3x8KGwuX2I9VXEoZnVuY3Rpb24oKXtsLmhpZGUoKX0sNTApKSxsLl9jPSExfSxsLl9vbkNsaWNrPWZ1bmN0aW9uKGgpe2xldCBmPShoPWh8fFptKCkuZXZlbnQpLnRhcmdl'@;
put 'dHx8aC5zcmNFbGVtZW50LHY9ZjtpZihmKXshaGFzRXZlbnRMaXN0ZW5lcnMmJk9oKGYsInBpa2Etc2VsZWN0IikmJihmLm9uY2hhbmdlfHwoZi5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwicmV0dXJuOyIpLEhwKGYsImNoYW5nZSIsbC5fb25DaGFuZ2UpKSk7ZG97aWYoT2godiwicGlrYS1z'@;
put 'aW5nbGUiKXx8dj09PWEudHJpZ2dlcilyZXR1cm59d2hpbGUodj12LnBhcmVudE5vZGUpO2wuX3YmJmYhPT1hLnRyaWdnZXImJnYhPT1hLnRyaWdnZXImJmwuaGlkZSgpfX0sbC5lbD1KMigpLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGwuZWwuY2xhc3NOYW1lPSJwaWthLXNpbmdsZSIrKGEuaXNS'@;
put 'VEw/IiBpcy1ydGwiOiIiKSsoYS50aGVtZT8iICIrYS50aGVtZToiIiksSHAobC5lbCwibW91c2Vkb3duIixsLl9vbk1vdXNlRG93biwhMCksSHAobC5lbCwidG91Y2hlbmQiLGwuX29uTW91c2VEb3duLCEwKSxIcChsLmVsLCJjaGFuZ2UiLGwuX29uQ2hhbmdlKSxhLmtleWJvYXJkSW5wdXQm'@;
put 'JkhwKEoyKCksImtleWRvd24iLGwuX29uS2V5Q2hhbmdlKSxhLmZpZWxkJiYoYS5jb250YWluZXI/YS5jb250YWluZXIuYXBwZW5kQ2hpbGQobC5lbCk6YS5ib3VuZD9KMigpLmJvZHkuYXBwZW5kQ2hpbGQobC5lbCk6YS5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLmVsLGEuZmll'@;
put 'bGQubmV4dFNpYmxpbmcpLEhwKGEuZmllbGQsImNoYW5nZSIsbC5fb25JbnB1dENoYW5nZSksYS5kZWZhdWx0RGF0ZXx8KGEuZGVmYXVsdERhdGU9bC5fcGFyc2VGaWVsZFZhbHVlKCksYS5zZXREZWZhdWx0RGF0ZT0hMCkpO2xldCBkPWEuZGVmYXVsdERhdGU7UGgoZCk/YS5zZXREZWZhdWx0'@;
put 'RGF0ZT9sLnNldERhdGUoZCwhMCk6bC5nb3RvRGF0ZShkKTpsLmdvdG9EYXRlKG5ldyBEYXRlKSxhLmJvdW5kPyh0aGlzLmhpZGUoKSxsLmVsLmNsYXNzTmFtZSs9IiBpcy1ib3VuZCIsSHAoYS50cmlnZ2VyLCJjbGljayIsbC5fb25JbnB1dENsaWNrKSxIcChhLnRyaWdnZXIsImZvY3VzIixs'@;
put 'Ll9vbklucHV0Rm9jdXMpLEhwKGEudHJpZ2dlciwiYmx1ciIsbC5fb25JbnB1dEJsdXIpKTp0aGlzLnNob3coKX1mdW5jdGlvbiBhNGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGphdChjKXt2YXIgbD1mdW5jdGlvbiB6YXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy'@;
put 'biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl'@;
put 'IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uICRxKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQg'@;
put 'b24gdGhpcyBvYmplY3QiKX1HcS5wcm90b3R5cGU9e2NvbmZpZzpmdW5jdGlvbihjKXt0aGlzLl9vfHwodGhpcy5fbz1YUCh7fSxOcCwhMCkpO2xldCBsPVhQKHRoaXMuX28sYywhMCk7bC5pc1JUTD0hIWwuaXNSVEwsbC5maWVsZD1sLmZpZWxkJiZsLmZpZWxkLm5vZGVOYW1lP2wuZmllbGQ6'@;
put 'bnVsbCxsLnRoZW1lPSJzdHJpbmciPT10eXBlb2YgbC50aGVtZSYmbC50aGVtZT9sLnRoZW1lOm51bGwsbC5ib3VuZD0hISh2b2lkIDAhPT1sLmJvdW5kP2wuZmllbGQmJmwuYm91bmQ6bC5maWVsZCksbC50cmlnZ2VyPWwudHJpZ2dlciYmbC50cmlnZ2VyLm5vZGVOYW1lP2wudHJpZ2dlcjps'@;
put 'LmZpZWxkLGwuZGlzYWJsZVdlZWtlbmRzPSEhbC5kaXNhYmxlV2Vla2VuZHMsbC5kaXNhYmxlRGF5Rm49ImZ1bmN0aW9uIj09dHlwZW9mIGwuZGlzYWJsZURheUZuP2wuZGlzYWJsZURheUZuOm51bGw7bGV0IGE9cGFyc2VJbnQobC5udW1iZXJPZk1vbnRocywxMCl8fDE7aWYobC5udW1iZXJP'@;
put 'Zk1vbnRocz1hPjQ/NDphLFBoKGwubWluRGF0ZSl8fChsLm1pbkRhdGU9ITEpLFBoKGwubWF4RGF0ZSl8fChsLm1heERhdGU9ITEpLGwubWluRGF0ZSYmbC5tYXhEYXRlJiZsLm1heERhdGU8bC5taW5EYXRlJiYobC5tYXhEYXRlPWwubWluRGF0ZT0hMSksbC5taW5EYXRlJiZ0aGlzLnNldE1p'@;
put 'bkRhdGUobC5taW5EYXRlKSxsLm1heERhdGUmJnRoaXMuc2V0TWF4RGF0ZShsLm1heERhdGUpLFlxKGwueWVhclJhbmdlKSl7bGV0IGQ9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTEwO2wueWVhclJhbmdlWzBdPXBhcnNlSW50KGwueWVhclJhbmdlWzBdLDEwKXx8ZCxsLnllYXJSYW5nZVsx'@;
put 'XT1wYXJzZUludChsLnllYXJSYW5nZVsxXSwxMCl8fGR9ZWxzZSBsLnllYXJSYW5nZT1NYXRoLmFicyhwYXJzZUludChsLnllYXJSYW5nZSwxMCkpfHxOcC55ZWFyUmFuZ2UsbC55ZWFyUmFuZ2U+MTAwJiYobC55ZWFyUmFuZ2U9MTAwKTtyZXR1cm4gbH0sdG9TdHJpbmc6ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIGM9Y3x8dGhpcy5fby5mb3JtYXQsUGgodGhpcy5fZCk/dGhpcy5fby50b1N0cmluZz90aGlzLl9vLnRvU3RyaW5nKHRoaXMuX2QsYyk6dGhpcy5oYXNNb21lbnQ/dGhpcy5tb21lbnQodGhpcy5fZCkuZm9ybWF0KGMpOnRoaXMuX2QudG9EYXRlU3RyaW5nKCk6IiJ9LGdldE1vbWVu'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc01vbWVudD90aGlzLm1vbWVudCh0aGlzLl9kKTpudWxsfSxzZXRNb21lbnQ6ZnVuY3Rpb24oYyxsKXt0aGlzLmhhc01vbWVudCYmdGhpcy5tb21lbnQuaXNNb21lbnQoYykmJnRoaXMuc2V0RGF0ZShjLnRvRGF0ZSgpLGwpfSx1c2VNb21lbnQ6'@;
put 'ZnVuY3Rpb24oYyl7dGhpcy5oYXNNb21lbnQ9ITAsdGhpcy5tb21lbnQ9Y30sZ2V0RGF0ZTpmdW5jdGlvbigpe3JldHVybiBQaCh0aGlzLl9kKT9uZXcgRGF0ZSh0aGlzLl9kLmdldFRpbWUoKSk6bnVsbH0sc2V0RGF0ZTpmdW5jdGlvbihjLGwpe2lmKCFjKXJldHVybiB0aGlzLl9kPW51bGws'@;
put 'dGhpcy5fby5maWVsZCYmKHRoaXMuX28uZmllbGQudmFsdWU9IiIsbjRlKHRoaXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSx0aGlzLmRyYXcoKTtpZigic3RyaW5nIj09dHlwZW9mIGMmJihjPW5ldyBEYXRlKERhdGUucGFyc2UoYykpKSwhUGgoYykpcmV0dXJuO2xldCBh'@;
put 'PXRoaXMuX28ubWluRGF0ZSxkPXRoaXMuX28ubWF4RGF0ZTtQaChhKSYmYzxhP2M9YTpQaChkKSYmYz5kJiYoYz1kKSx0aGlzLl9kPW5ldyBEYXRlKGMuZ2V0VGltZSgpKSwkUCh0aGlzLl9kKSx0aGlzLmdvdG9EYXRlKHRoaXMuX2QpLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZh'@;
put 'bHVlPXRoaXMudG9TdHJpbmcoKSxuNGUodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLCFsJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vblNlbGVjdCYmdGhpcy5fby5vblNlbGVjdC5jYWxsKHRoaXMsdGhpcy5nZXREYXRlKCkpfSxjbGVhcjpmdW5jdGlvbigp'@;
put 'e3RoaXMuc2V0RGF0ZShudWxsKX0sZ290b0RhdGU6ZnVuY3Rpb24oYyl7bGV0IGw9ITA7aWYoUGgoYykpe2lmKHRoaXMuY2FsZW5kYXJzKXtsZXQgYT1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1swXS55ZWFyLHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLDEpLGQ9bmV3IERhdGUodGhpcy5jYWxl'@;
put 'bmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsdGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLm1vbnRoLDEpLGg9Yy5nZXRUaW1lKCk7ZC5zZXRNb250aChkLmdldE1vbnRoKCkrMSksZC5zZXREYXRlKGQuZ2V0RGF0ZSgpLTEpLGw9aDxhLmdldFRpbWUo'@;
put 'KXx8ZC5nZXRUaW1lKCk8aH1sJiYodGhpcy5jYWxlbmRhcnM9W3ttb250aDpjLmdldE1vbnRoKCkseWVhcjpjLmdldEZ1bGxZZWFyKCl9XSwicmlnaHQiPT09dGhpcy5fby5tYWluQ2FsZW5kYXImJih0aGlzLmNhbGVuZGFyc1swXS5tb250aCs9MS10aGlzLl9vLm51bWJlck9mTW9udGhzKSks'@;
put 'dGhpcy5hZGp1c3RDYWxlbmRhcnMoKX19LGFkanVzdERhdGU6ZnVuY3Rpb24oYyxsKXtsZXQgaCxhPXRoaXMuZ2V0RGF0ZSgpfHxuZXcgRGF0ZSxkPTI0KnBhcnNlSW50KGwpKjYwKjYwKjFlMzsiYWRkIj09PWM/aD1uZXcgRGF0ZShhLnZhbHVlT2YoKStkKToic3VidHJhY3QiPT09YyYmKGg9'@;
put 'bmV3IERhdGUoYS52YWx1ZU9mKCktZCkpLHRoaXMuc2V0RGF0ZShoKX0sYWRqdXN0Q2FsZW5kYXJzOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF09cjRlKHRoaXMuY2FsZW5kYXJzWzBdKTtmb3IobGV0IGM9MTtjPHRoaXMuX28ubnVtYmVyT2ZNb250aHM7YysrKXRoaXMuY2FsZW5kYXJz'@;
put 'W2NdPXI0ZSh7bW9udGg6dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrYyx5ZWFyOnRoaXMuY2FsZW5kYXJzWzBdLnllYXJ9KTt0aGlzLmRyYXcoKX0sZ290b1RvZGF5OmZ1bmN0aW9uKCl7dGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSl9LGdvdG9Nb250aDpmdW5jdGlvbihjKXtpc05hTihjKXx8KHRo'@;
put 'aXMuY2FsZW5kYXJzWzBdLm1vbnRoPXBhcnNlSW50KGMsMTApLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCkpfSxuZXh0TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aCsrLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LHByZXZNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5k'@;
put 'YXJzWzBdLm1vbnRoLS0sdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0sZ290b1llYXI6ZnVuY3Rpb24oYyl7aXNOYU4oYyl8fCh0aGlzLmNhbGVuZGFyc1swXS55ZWFyPXBhcnNlSW50KGMsMTApLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCkpfSxzZXRNaW5EYXRlOmZ1bmN0aW9uKGMpe2MgaW5zdGFu'@;
put 'Y2VvZiBEYXRlPygkUChjKSx0aGlzLl9vLm1pbkRhdGU9Yyx0aGlzLl9vLm1pblllYXI9Yy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWluTW9udGg9Yy5nZXRNb250aCgpKToodGhpcy5fby5taW5EYXRlPU5wLm1pbkRhdGUsdGhpcy5fby5taW5ZZWFyPU5wLm1pblllYXIsdGhpcy5fby5taW5N'@;
put 'b250aD1OcC5taW5Nb250aCx0aGlzLl9vLnN0YXJ0UmFuZ2U9TnAuc3RhcnRSYW5nZSksdGhpcy5kcmF3KCl9LHNldE1heERhdGU6ZnVuY3Rpb24oYyl7YyBpbnN0YW5jZW9mIERhdGU/KCRQKGMpLHRoaXMuX28ubWF4RGF0ZT1jLHRoaXMuX28ubWF4WWVhcj1jLmdldEZ1bGxZZWFyKCksdGhp'@;
put 'cy5fby5tYXhNb250aD1jLmdldE1vbnRoKCkpOih0aGlzLl9vLm1heERhdGU9TnAubWF4RGF0ZSx0aGlzLl9vLm1heFllYXI9TnAubWF4WWVhcix0aGlzLl9vLm1heE1vbnRoPU5wLm1heE1vbnRoLHRoaXMuX28uZW5kUmFuZ2U9TnAuZW5kUmFuZ2UpLHRoaXMuZHJhdygpfSxzZXRTdGFydFJh'@;
put 'bmdlOmZ1bmN0aW9uKGMpe3RoaXMuX28uc3RhcnRSYW5nZT1jfSxzZXRFbmRSYW5nZTpmdW5jdGlvbihjKXt0aGlzLl9vLmVuZFJhbmdlPWN9LGRyYXc6ZnVuY3Rpb24oYyl7aWYoIXRoaXMuX3YmJiFjKXJldHVybjtsZXQgTSxsPXRoaXMuX28sYT1sLm1pblllYXIsZD1sLm1heFllYXIsaD1s'@;
put 'Lm1pbk1vbnRoLGY9bC5tYXhNb250aCx2PSIiO3RoaXMuX3k8PWEmJih0aGlzLl95PWEsIWlzTmFOKGgpJiZ0aGlzLl9tPGgmJih0aGlzLl9tPWgpKSx0aGlzLl95Pj1kJiYodGhpcy5feT1kLCFpc05hTihmKSYmdGhpcy5fbT5mJiYodGhpcy5fbT1mKSk7Zm9yKGxldCBJPTA7STxsLm51bWJl'@;
put 'ck9mTW9udGhzO0krKylNPSJwaWthLXRpdGxlLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCIiKS5zdWJzdHIoMCwyKSx2Kz0nPGRpdiBjbGFzcz0icGlrYS1sZW5kYXIiPicrSGF0KHRoaXMsSSx0aGlzLmNhbGVuZGFyc1tJXS55ZWFyLHRoaXMuY2Fs'@;
put 'ZW5kYXJzW0ldLm1vbnRoLHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsTSkrdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbSV0ueWVhcix0aGlzLmNhbGVuZGFyc1tJXS5tb250aCxNKSsiPC9kaXY+Ijt0aGlzLmVsLmlubmVySFRNTD12LGwuYm91bmQmJiJoaWRkZW4iIT09bC5maWVsZC50eXBl'@;
put 'JiZVcShmdW5jdGlvbigpe2wudHJpZ2dlci5mb2N1cygpfSwxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkRyYXcmJnRoaXMuX28ub25EcmF3KHRoaXMpLGwuYm91bmQmJmwuZmllbGQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixsLmFyaWFMYWJlbCl9LGFkanVzdFBvc2l0aW9u'@;
put 'OmZ1bmN0aW9uKCl7bGV0IGMsbCxhLGQsaCxmLHYsTSxJLEcscmU7dGhpcy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYz10aGlzLl9vLnRyaWdnZXIsbD10aGlzLmVsLm9mZnNldFdpZHRoLGE9dGhpcy5lbC5vZmZzZXRIZWlnaHQsZD1abSgpLmlu'@;
put 'bmVyV2lkdGh8fEoyKCkuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGg9Wm0oKS5pbm5lckhlaWdodHx8SjIoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGY9SjIoKS5ib2R5LnNjcm9sbFRvcHx8SjIoKS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLEc9ITAscmU9ITAsST1j'@;
put 'LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9SS5sZWZ0K1ptKCkucGFnZVhPZmZzZXQsTT1JLmJvdHRvbStabSgpLnBhZ2VZT2Zmc2V0LCh0aGlzLl9vLnJlcG9zaXRpb24mJnYrbD5kfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInJpZ2h0Iik+LTEmJnYtbCtjLm9mZnNldFdpZHRoPjAp'@;
put 'JiYodj12LWwrYy5vZmZzZXRXaWR0aCxHPSExKSwodGhpcy5fby5yZXBvc2l0aW9uJiZNK2E+aCtmfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPi0xJiZNLWEtYy5vZmZzZXRIZWlnaHQ+MCkmJihNPU0tYS1jLm9mZnNldEhlaWdodCxyZT0hMSksdjwwJiYodj0wKSxNPDAmJihN'@;
put 'PTApLHRoaXMuZWwuc3R5bGUubGVmdD12KyJweCIsdGhpcy5lbC5zdHlsZS50b3A9TSsicHgiLFpxKHRoaXMuZWwsRz8ibGVmdC1hbGlnbmVkIjoicmlnaHQtYWxpZ25lZCIpLFpxKHRoaXMuZWwscmU/ImJvdHRvbS1hbGlnbmVkIjoidG9wLWFsaWduZWQiKSxXcSh0aGlzLmVsLEc/InJpZ2h0'@;
put 'LWFsaWduZWQiOiJsZWZ0LWFsaWduZWQiKSxXcSh0aGlzLmVsLHJlPyJ0b3AtYWxpZ25lZCI6ImJvdHRvbS1hbGlnbmVkIikpfSxyZW5kZXI6ZnVuY3Rpb24oYyxsLGEpe2xldCBkPXRoaXMuX28saD1uZXcgRGF0ZSxmPXQ0ZShjLGwpLHY9bmV3IERhdGUoYyxsLDEpLmdldERheSgpLE09W10s'@;
put 'ST1bXTskUChoKSxkLmZpcnN0RGF5PjAmJih2LT1kLmZpcnN0RGF5LHY8MCYmKHYrPTcpKTtsZXQgRz0wPT09bD8xMTpsLTEscmU9MTE9PT1sPzA6bCsxLHVlPTA9PT1sP2MtMTpjLHllPTExPT09bD9jKzE6YyxFZT10NGUodWUsRyksQmU9Zit2LEdlPUJlO2Zvcig7R2U+NzspR2UtPTc7QmUr'@;
put 'PTctR2U7bGV0IHN0PSExO2ZvcihsZXQgcHQ9MCxkdD0wO3B0PEJlO3B0Kyspe2xldCBxdD1uZXcgRGF0ZShjLGwscHQtdisxKSxtbj0hIVBoKHRoaXMuX2QpJiZLUChxdCx0aGlzLl9kKSx3bj1LUChxdCxoKSxobj0tMSE9PWQuZXZlbnRzLmluZGV4T2YocXQudG9EYXRlU3RyaW5nKCkpLE1u'@;
put 'PXB0PHZ8fHB0Pj1mK3YsTXI9cHQtdisxLGtyPWwscW49Yyxncj1kLnN0YXJ0UmFuZ2UmJktQKGQuc3RhcnRSYW5nZSxxdCkscXI9ZC5lbmRSYW5nZSYmS1AoZC5lbmRSYW5nZSxxdCksX2k9ZC5zdGFydFJhbmdlJiZkLmVuZFJhbmdlJiZkLnN0YXJ0UmFuZ2U8cXQmJnF0PGQuZW5kUmFuZ2Us'@;
put 'UG49ZC5taW5EYXRlJiZxdDxkLm1pbkRhdGV8fGQubWF4RGF0ZSYmcXQ+ZC5tYXhEYXRlfHxkLmRpc2FibGVXZWVrZW5kcyYma2F0KHF0KXx8ZC5kaXNhYmxlRGF5Rm4mJmQuZGlzYWJsZURheUZuKHF0KTtNbiYmKHB0PHY/KE1yPUVlK01yLGtyPUcscW49dWUpOihNci09Zixrcj1yZSxxbj15'@;
put 'ZSkpLGQucGlja1dob2xlV2VlayYmbW4mJihzdD0hMCksSS5wdXNoKElhdCh7ZGF5Ok1yLG1vbnRoOmtyLHllYXI6cW4saGFzRXZlbnQ6aG4saXNTZWxlY3RlZDptbixpc1RvZGF5OnduLGlzRGlzYWJsZWQ6UG4saXNFbXB0eTpNbixpc1N0YXJ0UmFuZ2U6Z3IsaXNFbmRSYW5nZTpxcixpc0lu'@;
put 'UmFuZ2U6X2ksc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczpkLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOmQuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfSkp'@;
put 'LDc9PSsrZHQmJihkLnNob3dXZWVrTnVtYmVyJiZJLnVuc2hpZnQoTGF0KHRoaXMscHQtdixsLGMsZC5maXJzdFdlZWtPZlllYXJNaW5EYXlzKSksTS5wdXNoKE9hdChJLGQuaXNSVEwsZC5waWNrV2hvbGVXZWVrLHN0KSksST1bXSxkdD0wLHN0PSExKX1yZXR1cm4gZnVuY3Rpb24oYyxsLGEp'@;
put 'e3JldHVybic8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGlrYS10YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSInK2ErJyI+JytmdW5jdGlvbihjKXtsZXQgbCxhPVtdO2ZvcihjLnNob3dXZWVrTnVtYmVyJiZhLnB1c2goIjx0aD48L3Ro'@;
put 'PiIpLGw9MDtsPDc7bCsrKWEucHVzaCgnPHRoIHNjb3BlPSJjb2wiPjxhYmJyIHRpdGxlPSInK2k0ZShjLGwpKyciPicraTRlKGMsbCwhMCkrIjwvYWJicj48L3RoPiIpO3JldHVybiI8dGhlYWQ+PHRyPiIrKGMuaXNSVEw/YS5yZXZlcnNlKCk6YSkuam9pbigiIikrIjwvdHI+PC90aGVhZD4i'@;
put 'fShjKStmdW5jdGlvbihjKXtyZXR1cm4iPHRib2R5PiIrYy5qb2luKCIiKSsiPC90Ym9keT4ifShsKSsiPC90YWJsZT4ifShkLE0sYSl9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5pc1Zpc2libGUoKXx8KHRoaXMuX3Y9ITAsdGhp'@;
put 'cy5kcmF3KCksV3EodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fby5ib3VuZCYmKEhwKEoyKCksImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLmFkanVzdFBvc2l0aW9uKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uT3BlbiYmdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKSl9'@;
put 'LGhpZGU6ZnVuY3Rpb24oKXtsZXQgYz10aGlzLl92OyExIT09YyYmKHRoaXMuX28uYm91bmQmJlRnKEoyKCksImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLl9vLmNvbnRhaW5lcnx8KHRoaXMuZWwuc3R5bGUucG9zaXRpb249InN0YXRpYyIsdGhpcy5lbC5zdHlsZS5sZWZ0PSJhdXRvIix0'@;
put 'aGlzLmVsLnN0eWxlLnRvcD0iYXV0byIpLFpxKHRoaXMuZWwsImlzLWhpZGRlbiIpLHRoaXMuX3Y9ITEsdm9pZCAwIT09YyYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25DbG9zZSYmdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcykpfSxkZXN0cm95OmZ1bmN0aW9uKCl7bGV0IGM9dGhp'@;
put 'cy5fbzt0aGlzLmhpZGUoKSxUZyh0aGlzLmVsLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLCEwKSxUZyh0aGlzLmVsLCJ0b3VjaGVuZCIsdGhpcy5fb25Nb3VzZURvd24sITApLFRnKHRoaXMuZWwsImNoYW5nZSIsdGhpcy5fb25DaGFuZ2UpLGMua2V5Ym9hcmRJbnB1dCYmVGcoSjIo'@;
put 'KSwia2V5ZG93biIsdGhpcy5fb25LZXlDaGFuZ2UpLGMuZmllbGQmJihUZyhjLmZpZWxkLCJjaGFuZ2UiLHRoaXMuX29uSW5wdXRDaGFuZ2UpLGMuYm91bmQmJihUZyhjLnRyaWdnZXIsImNsaWNrIix0aGlzLl9vbklucHV0Q2xpY2spLFRnKGMudHJpZ2dlciwiZm9jdXMiLHRoaXMuX29uSW5w'@;
put 'dXRGb2N1cyksVGcoYy50cmlnZ2VyLCJibHVyIix0aGlzLl9vbklucHV0Qmx1cikpKSx0aGlzLmVsLnBhcmVudE5vZGUmJnRoaXMuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsKX19O2NvbnN0IHM0ZT0iZGF0ZSIsbzRlPSJkYXRlRWRpdG9yIjt2YXIgcVA9bmV3IFdlYWtTZXQ7'@;
put 'Y2xhc3MgbDRlIGV4dGVuZHMgczl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFZhdChjLGwpeyhmdW5jdGlvbiBCYXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1l'@;
put 'bnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxxUCksYTRlKHRoaXMsInBhcmVudERlc3Ryb3llZCIsITEpLGE0ZSh0aGlzLCIkZGF0ZVBpY2tlciIsbnVsbCl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiBzNGV9aW5pdCgpe2lmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBQcyl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3RoaXMucGFyZW50RGVzdHJveWVkPSEwLHRoaXMuZGVzdHJv'@;
put 'eUVsZW1lbnRzKCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwobCxhKT0+e2F8fHRoaXMuY2xvc2UoKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQo'@;
put 'IkRJViIpLHRoaXMuZGF0ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHls'@;
put 'ZS56SW5kZXg9OTk5OSx0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLEVpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRlcGlja2VySG9sZGVyIiksdGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5k'@;
put 'YXRlUGlja2VyKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZGF0ZVBpY2tlciwibW91c2Vkb3duIixsPT57Z3MobC50YXJnZXQsInBpa2EtZGF5IikmJnRoaXMuaGlkZURhdGVwaWNrZXIoKSxsLnN0b3BQcm9wYWdhdGlvbigpfSl9ZGVzdHJveUVsZW1lbnRzKCl7'@;
put 'Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9b3Bl'@;
put 'bigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7dGhpcy5zaG93RGF0ZXBpY2tlcihsKSxzdXBlci5vcGVuKCks'@;
put 'ZC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRk'@;
put 'IiwxKX19LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiw3KX19XSx7Z3Jv'@;
put 'dXA6bzRlfSl9Y2xvc2UoKXt2YXIgbDtudWxsIT09KGw9dGhpcy4kZGF0ZVBpY2tlcikmJnZvaWQgMCE9PWwmJmwuZGVzdHJveSYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2NvbnN0IGg9dGhpcy5ob3QuX2dldEVkaXRvck1hbmFn'@;
put 'ZXIoKTtoLmNsb3NlRWRpdG9yKCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKSxoLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAobzRlKSxzdXBlci5jbG9zZSgpfWZpbmlzaEVk'@;
put 'aXRpbmcoKXtzdXBlci5maW5pc2hFZGl0aW5nKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3Qg'@;
put 'YT0kcShxUCx0aGlzLEtxKS5jYWxsKHRoaXMpLGQ9dGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpLGg9ISFsJiZWJChsLmtleUNvZGUpO2xldCBmO3RoaXMuZGF0ZVBpY2tlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy4kZGF0ZVBpY2tlcj1uZXcgR3EodGhpcy5nZXREYXRlUGlja2Vy'@;
put 'Q29uZmlnKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudCYmdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQoUHMpLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe30sdGhpcy5vcmlnaW5hbFZhbHVlPyhmPXRoaXMub3JpZ2lu'@;
put 'YWxWYWx1ZSxQcyhmLGEsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoUHMoZixhKSwhMCksdGhpcy5nZXRWYWx1ZSgpIT09dGhpcy5vcmlnaW5hbFZhbHVlJiZ0aGlzLnNldFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSksIWgmJiFkJiZ0aGlzLnNldFZhbHVlKCIi'@;
put 'KSk6dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZT8oZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlLFBzKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChQcyhmLGEpLCEwKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLiRk'@;
put 'YXRlUGlja2VyLmdvdG9Ub2RheSgpfWhpZGVEYXRlcGlja2VyKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRlKCl9Z2V0RGF0ZVBpY2tlckNvbmZpZygpe3ZhciBsO2NvbnN0IGE9dGhpcy5URVhUQVJFQSxkPXt9O3RoaXMuY2VsbFBy'@;
put 'b3BlcnRpZXMmJnRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyYmd0UoZCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcpO2NvbnN0IGg9ZC5vblNlbGVjdCxmPWQub25DbG9zZTtyZXR1cm4gZC5maWVsZD1hLGQudHJpZ2dlcj1hLGQuY29udGFpbmVyPXRo'@;
put 'aXMuZGF0ZVBpY2tlcixkLmJvdW5kPSExLGQua2V5Ym9hcmRJbnB1dD0hMSxkLmZvcm1hdD1udWxsIT09KGw9ZC5mb3JtYXQpJiZ2b2lkIDAhPT1sP2w6JHEocVAsdGhpcyxLcSkuY2FsbCh0aGlzKSxkLnJlcG9zaXRpb249ZC5yZXBvc2l0aW9ufHwhMSxkLmlzUlRMPSExLGQub25TZWxlY3Q9'@;
put 'dj0+e2xldCBNPXY7aXNOYU4oTS5nZXRUaW1lKCkpfHwoTT1QcyhNKS5mb3JtYXQoJHEocVAsdGhpcyxLcSkuY2FsbCh0aGlzKSkpLHRoaXMuc2V0VmFsdWUoTSksaCYmaCgpLG8zKCkmJnRoaXMuaGlkZURhdGVwaWNrZXIoKX0sZC5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWR8'@;
put 'fHRoaXMuZmluaXNoRWRpdGluZyghMSksZiYmZigpfSxkfXJlZnJlc2hEaW1lbnNpb25zKGwpe3ZhciBhO2lmKHN1cGVyLnJlZnJlc2hEaW1lbnNpb25zKGwpLHRoaXMuc3RhdGUhPT1hdS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJl'@;
put 'dHVybiB2b2lkIHRoaXMuaGlkZURhdGVwaWNrZXIoKTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PXRoaXMuaG90LHt3dE92ZXJsYXlzOmZ9PXRoaXMuaG90LnZpZXcuX3d0LHt3dFRhYmxlOnZ9PW51bGwhPT0oYT1mLmdldFBhcmVudE92ZXJsYXkodGhpcy5U'@;
put 'RCkpJiZ2b2lkIDAhPT1hP2E6dGhpcy5ob3Qudmlldy5fd3QsTT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSksST1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygp'@;
put 'KSxHPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKSxyZT1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKTtpZih0aGlzLnJvdz49TSYmdGhpcy5yb3c8'@;
put 'PUkmJnRoaXMuY29sPj1HJiZ0aGlzLmNvbDw9cmUpe2NvbnN0IHVlPXRoaXMuVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXQrdWUudG9wK1N1KHRoaXMuVEQpfXB4YDtsZXQgeWU9dGhp'@;
put 'cy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldDt0aGlzLmhvdC5pc1J0bCgpP3llKz11ZS5yaWdodC1pdSh0aGlzLmRhdGVQaWNrZXIpOnllKz11ZS5sZWZ0LHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9YCR7eWV9cHhgfWVsc2UgdGhpcy5oaWRlRGF0ZXBpY2tlcigpfX1mdW5jdGlvbiBL'@;
put 'cSgpe3ZhciBjO3JldHVybiBudWxsIT09KGM9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0KSYmdm9pZCAwIT09Yz9jOiJERC9NTS9ZWVlZIn1jbGFzcyBjNGUgZXh0ZW5kcyB6cXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImRyb3Bkb3duIn1wcmVwYXJlKGwsYSxkLGgs'@;
put 'Zix2KXt2LmZpbHRlcj0hMSx2LnN0cmljdD0hMCxzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX19Y2xhc3MgdTRlIGV4dGVuZHMgczl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3MgZDRlIGV4dGVuZHMgczl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h'@;
put 'cmd1bWVudHMpLGZ1bmN0aW9uIFlhdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR2F0KGMpe3ZhciBsPWZ1bmN0aW9uICRhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu'@;
put 'Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImF1dG9SZXNpemUiLFpwZSh0aGlzLmhv'@;
put 'dC5yb290RG9jdW1lbnQse3RleHRDb250ZW50Omw9PiJcdTIwMjIiLnJlcGVhdChsLnZhbHVlLmxlbmd0aCl9KSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29yZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhp'@;
put 'cy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5k'@;
put 'c29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLEFwKHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSguLi5r'@;
put 'bSgtMSkpLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpfX1jb25zdCBYcT0iaHRfZWRpdG9yX3Zpc2libGUiLGg0ZT0ic2VsZWN0RWRpdG9yIjtjbGFzcyBmNGUgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInNlbGVjdCJ9'@;
put 'aW5pdCgpe3RoaXMuc2VsZWN0V3JhcHBlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zZWxlY3Q9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5w'@;
put 'dXQiLCJ0cnVlIiksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztsLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVB'@;
put 'cnJvdyIsYSYmbC5zZXRBdHRyaWJ1dGUoLi4uTjcoKSksbC5hcHBlbmRDaGlsZCh0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjViYyIpKSxFaSh0aGlzLnNlbGVjdFdyYXBwZXIsImh0U2VsZWN0RWRpdG9yIiksdGhpcy5zZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxk'@;
put 'KHRoaXMuc2VsZWN0KSx0aGlzLnNlbGVjdFdyYXBwZXIuaW5zZXJ0QmVmb3JlKGwsdGhpcy5zZWxlY3RXcmFwcGVyLmZpcnN0Q2hpbGQpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0V3JhcHBlciksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0VmFsdWUoKXty'@;
put 'ZXR1cm4gdGhpcy5zZWxlY3QudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5zZWxlY3QudmFsdWU9bH1vcGVuKCl7dGhpcy5fb3BlbmVkPSEwLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFn'@;
put 'ZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIixncyh0aGlzLnNlbGVjdFdyYXBwZXIsWHEpJiZocyh0aGlzLnNlbGVj'@;
put 'dFdyYXBwZXIsWHEpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lv'@;
put 'bnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUi'@;
put 'LCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBJO0k9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgTT9NKHRoaXMucm93LHRoaXMuY29sLHRoaXMucHJvcCk6TSksQXAodGhpcy5zZWxlY3QpLHFzKEksKEcscmUpPT57Y29uc3QgdWU9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpO3VlLnZhbHVlPXJlLGo3KHVlLEcpLHRoaXMuc2VsZWN0LmFwcGVuZENo'@;
put 'aWxkKHVlKX0pfXByZXBhcmVPcHRpb25zKGwpe2xldCBhPXt9O2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBkPTAsaD1sLmxlbmd0aDtkPGg7ZCsrKWFbbFtkXV09bFtkXTtlbHNlIm9iamVjdCI9PXR5cGVvZiBsJiYoYT1sKTtyZXR1cm4gYX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRo'@;
put 'aXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5yb3csdGhpcy5wcm9wKTt0aGlzLm9yaWdpbmFsVmFsdWU9bCx0aGlzLnNldFZhbHVlKGwpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2lmKHRoaXMuc3RhdGUhPT1hdS5FRElUSU5HKXJldHVybjtp'@;
put 'Zih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuY2xvc2UoKTtjb25zdHt0b3A6bCxzdGFydDphLHdpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxmPXRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZTtmLmhlaWdodD1g'@;
put 'JHtofXB4YCxmLndpZHRoPWAke2R9cHhgLGYudG9wPWAke2x9cHhgLGZbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7YX1weGAsZi5tYXJnaW49IjBweCIsRWkodGhpcy5zZWxlY3RXcmFwcGVyLFhxKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0'@;
put 'U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6aDRlfTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSYmYS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgtMTto'@;
put 'Pj0wJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4KzE7aDw9dGhpcy5zZWxlY3QubGVuZ3RoLTEmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fV0s'@;
put 'ZCl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoaDRlKX19Y2xhc3MgcDRlIGV4dGVuZHMgczl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0aW1lIn1w'@;
put 'cmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLlRFWFRBUkVBLmRpcj0ibHRyIn19ZnVuY3Rpb24gcXEoYyxsLGEsZCxoLGYsdil7Y1QuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGo3KGwsZj8/IiIsITEpfWZ1bmN0aW9uIElfKGMsbCxhLGQs'@;
put 'aCxmLHYpe2NvbnN0e3Jvb3REb2N1bWVudDpNfT1jLEk9di5hbGxvd0h0bWw/cXE6RWcsRz1NLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHJlPWMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztpZihHLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIscmUmJkcuc2V0QXR0cmlidXRlKC4uLk43'@;
put 'KCkpLEcuYXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLEkuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCJceGEwIikpLGwuaW5zZXJ0QmVmb3JlKEcsbC5maXJzdENoaWxkKSxFaShs'@;
put 'LCJodEF1dG9jb21wbGV0ZSIpLCFjLmFjQXJyb3dMaXN0ZW5lcil7Y29uc3QgdWU9bmV3IFoyKGMpO2MuYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKHllKXtncyh5ZS50YXJnZXQsImh0QXV0b2NvbXBsZXRlQXJyb3ciKSYmYy52aWV3Ll93dC5nZXRTZXR0aW5nKCJvbkNlbGxEYmxDbGljayIs'@;
put 'bnVsbCxjLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksbCl9LHVlLmFkZEV2ZW50TGlzdGVuZXIoYy5yb290RWxlbWVudCwibW91c2Vkb3duIixjLmFjQXJyb3dMaXN0ZW5lciksYy5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e3VlLmRlc3Ryb3koKX0pfX1mdW5jdGlvbiBKcShjLGws'@;
put 'YSxkLGgsZix2KXtJXy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9cXEuUkVOREVSRVJfVFlQRT0iaHRtbCIsSV8uUkVOREVSRVJfVFlQRT0iYXV0b2NvbXBsZXRlIixKcS5SRU5ERVJFUl9UWVBFPSJkcm9wZG93biI7Y29uc3QgZzRlPW5ldyBXZWFrTWFwLG00ZT1uZXcgV2Vha01hcCxu'@;
put 'c3Q9Imh0QmFkVmFsdWUiLFJfPSJkYXRhLXJvdyIsTF89ImRhdGEtY29sIixyc3Q9ImNoZWNrYm94UmVuZGVyZXIiO2Z1bmN0aW9uIFFxKGMsbCxhLGQsaCxmLHYpe2NvbnN0e3Jvb3REb2N1bWVudDpNfT1jLEk9Yy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2NULmFwcGx5KHRoaXMsW2MsbCxh'@;
put 'LGQsaCxmLHZdKSxmdW5jdGlvbiBpc3QoYyl7bGV0IGw9bTRlLmdldChjKTtpZighbCl7Y29uc3R7cm9vdEVsZW1lbnQ6YX09YztsPW5ldyBaMihjKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwiY2xpY2siLGQ9PmZ1bmN0aW9uIGxzdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFlSihhKXx8'@;
put 'IWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFzQXR0cmlidXRlKExfKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShSXyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoTF8pLDEwKTtsLmdldENlbGxNZXRhKGQsaCkucmVhZE9ubHkmJmMucHJldmVudERlZmF1'@;
put 'bHQoKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLGQ9PmZ1bmN0aW9uIG9zdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2VKKGEpJiYoIWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFzQXR0cmlidXRlKExfKXx8c2V0VGltZW91dChsLmxpc3RlbiwxMCkpfShkLGMpKSxs'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIoYSwiY2hhbmdlIixkPT5mdW5jdGlvbiBjc3QoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighZUooYSl8fCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoUl8pLDEw'@;
put 'KSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKExfKSwxMCksZj1sLmdldENlbGxNZXRhKGQsaCk7aWYoIWYucmVhZE9ubHkpe2xldCB2PW51bGw7dj1jLnRhcmdldC5jaGVja2VkP3ZvaWQgMD09PWYudW5jaGVja2VkVGVtcGxhdGV8fGYuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCE9PWYudW5j'@;
put 'aGVja2VkVGVtcGxhdGUmJmYudW5jaGVja2VkVGVtcGxhdGUsbC5zZXREYXRhQXRDZWxsKGQsaCx2KX19KGQsYykpLG00ZS5zZXQoYyxsKX19KGMpO2xldCBHPWZ1bmN0aW9uIGFzdChjKXtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gbC5jbGFzc05hbWU9Imh0Q2hl'@;
put 'Y2tib3hSZW5kZXJlcklucHV0IixsLnR5cGU9ImNoZWNrYm94IixsLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGwuY2xvbmVOb2RlKCExKX0oTSk7Y29uc3QgcmU9di5sYWJlbDtsZXQgdWU9ITE7aWYodHlwZW9mIHYuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHYuY2hlY2tlZFRlbXBs'@;
put 'YXRlPSEwKSx0eXBlb2Ygdi51bmNoZWNrZWRUZW1wbGF0ZT4idSImJih2LnVuY2hlY2tlZFRlbXBsYXRlPSExKSxBcChsKSxmPT09di5jaGVja2VkVGVtcGxhdGV8fG9jKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PW9jKHYuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2Vy'@;
put 'Q2FzZSh2LmxvY2FsZSk/Ry5jaGVja2VkPSEwOmY9PT12LnVuY2hlY2tlZFRlbXBsYXRlfHxvYyhmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT1vYyh2LnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/Ry5jaGVja2VkPSExOmpjKGYpP0VpKEcs'@;
put 'Im5vVmFsdWUiKTooRy5zdHlsZS5kaXNwbGF5PSJub25lIixFaShHLG5zdCksdWU9ITApLG1zKEcsW1tSXyxhXSxbTF8sZF1dKSxJJiZtcyhHLFtuXyhjLmdldFRyYW5zbGF0ZWRQaHJhc2UoRy5jaGVja2VkP2hxOmZxKSksejJlKEcuY2hlY2tlZCksZHFlKCldKSwhdWUmJnJlKXtsZXQgR2U9'@;
put 'IiI7aWYocmUudmFsdWUpR2U9ImZ1bmN0aW9uIj09dHlwZW9mIHJlLnZhbHVlP3JlLnZhbHVlLmNhbGwodGhpcyxhLGQsaCxmKTpyZS52YWx1ZTtlbHNlIGlmKHJlLnByb3BlcnR5KXtjb25zdCBwdD1jLmdldERhdGFBdFJvd1Byb3AoYSxyZS5wcm9wZXJ0eSk7R2U9bnVsbCE9PXB0P3B0OiIi'@;
put 'fWNvbnN0IHN0PWZ1bmN0aW9uIHNzdChjLGwsYSl7Y29uc3QgZD1jLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7ZC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlckxhYmVsICIrKGE/ImZ1bGxXaWR0aCI6IiIpO2NvbnN0IGg9Yy5jcmVhdGVUZXh0Tm9kZShsKTtpZihhKXtjb25zdCBmPWMu'@;
put 'Y3JlYXRlRWxlbWVudCgic3BhbiIpO2YuYXBwZW5kQ2hpbGQoaCksZC5hcHBlbmRDaGlsZChmKX1lbHNlIGQuYXBwZW5kQ2hpbGQoaCk7cmV0dXJuIGQuY2xvbmVOb2RlKCEwKX0oTSxHZSwhMCE9PXJlLnNlcGFyYXRlZCk7ImJlZm9yZSI9PT1yZS5wb3NpdGlvbj9yZS5zZXBhcmF0ZWQ/KGwu'@;
put 'YXBwZW5kQ2hpbGQoc3QpLGwuYXBwZW5kQ2hpbGQoRykpOihzdC5hcHBlbmRDaGlsZChHKSxHPXN0KTooIXJlLnBvc2l0aW9ufHwiYWZ0ZXIiPT09cmUucG9zaXRpb24pJiYocmUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKEcpLGwuYXBwZW5kQ2hpbGQoc3QpKTooc3QuaW5zZXJ0QmVmb3Jl'@;
put 'KEcsc3QuZmlyc3RDaGlsZCksRz1zdCkpfWZ1bmN0aW9uIEVlKCl7bGV0IEdlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3Qgc3Q9Yy5nZXRTZWxlY3RlZFJhbmdlKCkscHQ9W10sZHQ9bmV3IE1hcDtsZXQgcXQ9W10sbW49MDtp'@;
put 'ZihzdCl7Zm9yKGxldCB3bj0wO3duPHN0Lmxlbmd0aDt3bisrKXtjb25zdHtyb3c6aG4sY29sOk1ufT1zdFt3bl0uZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93Ok1yLGNvbDprcn09c3Rbd25dLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgcW49aG47cW48PU1yO3FuKz0xKWZvcihsZXQg'@;
put 'Z3I9TW47Z3I8PWtyO2dyKz0xKXtjb25zdCBxcj1jLmdldENlbGxNZXRhKHFuLGdyKTtpZihxci5oaWRkZW4pY29udGludWU7Y29uc3QgX2k9e2NoZWNrZWRUZW1wbGF0ZTpxci5jaGVja2VkVGVtcGxhdGUsdW5jaGVja2VkVGVtcGxhdGU6cXIudW5jaGVja2VkVGVtcGxhdGV9O2lmKCJjaGVj'@;
put 'a2JveCIhPT1xci50eXBlKXshMD09PUdlJiYhcXIucmVhZE9ubHkmJihkdC5oYXMocHQubGVuZ3RoKT9kdC5zZXQocHQubGVuZ3RoLFsuLi5kdC5nZXQocHQubGVuZ3RoKSxbcW4sZ3IsbnVsbF1dKTpkdC5zZXQocHQubGVuZ3RoLFtbcW4sZ3IsbnVsbF1dKSk7Y29udGludWV9aWYoITA9PT1x'@;
put 'ci5yZWFkT25seSljb250aW51ZTt0eXBlb2YgcXIuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHFyLmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIHFyLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHFyLnVuY2hlY2tlZFRlbXBsYXRlPSExKTtjb25zdCBQbj1jLmdldERhdGFBdENlbGwocW4sZ3Ip'@;
put 'OyExPT09R2U/W3FyLmNoZWNrZWRUZW1wbGF0ZSxxci5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKV0uaW5jbHVkZXMoUG4pP3F0LnB1c2goW3FuLGdyLHFyLnVuY2hlY2tlZFRlbXBsYXRlLF9pXSk6W3FyLnVuY2hlY2tlZFRlbXBsYXRlLHFyLnVuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5n'@;
put 'KCksbnVsbCx2b2lkIDBdLmluY2x1ZGVzKFBuKSYmcXQucHVzaChbcW4sZ3IscXIuY2hlY2tlZFRlbXBsYXRlLF9pXSk6cXQucHVzaChbcW4sZ3IscXIudW5jaGVja2VkVGVtcGxhdGUsX2ldKSxtbis9MX1wdC5wdXNoKG1uKSxtbj0wfXF0PXF0LmV2ZXJ5KHduPT57bGV0WywsaG5dPXduO3Jl'@;
put 'dHVybiBobj09PXF0WzBdWzJdfSk/cXQubWFwKHduPT57bGV0W2huLE1uLE1yXT13bjtyZXR1cm5baG4sTW4sTXJdfSk6cXQubWFwKHduPT57bGV0W2huLE1uLCxNcl09d247cmV0dXJuW2huLE1uLE1yLmNoZWNrZWRUZW1wbGF0ZV19KSxxdC5sZW5ndGg+MCYmcHQuZm9yRWFjaCgod24saG4p'@;
put 'PT57bGV0IE1uPXF0LnNwbGljZSgwLHduKTtkdC5zaXplJiZkdC5oYXMoaG4pJiYoTW49Wy4uLk1uLC4uLmR0LmdldChobildKSxjLnNldERhdGFBdENlbGwoTW4pfSl9fWZ1bmN0aW9uIEJlKCl7Y29uc3QgR2U9Yy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoR2Upe2ZvcihsZXQgc3Q9MDtzdDxH'@;
put 'ZS5sZW5ndGg7c3QrKyl7Y29uc3QgcHQ9R2Vbc3RdLmdldFRvcFN0YXJ0Q29ybmVyKCksZHQ9R2Vbc3RdLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgcXQ9cHQucm93O3F0PD1kdC5yb3c7cXQrKylmb3IobGV0IG1uPXB0LmNvbDttbjw9ZHQuY29sO21uKyspe2lmKGMuZ2V0Q2VsbE1l'@;
put 'dGEocXQsbW4pLnJlYWRPbmx5KWNvbnRpbnVlO2NvbnN0IGhuPWMuZ2V0Q2VsbChxdCxtbik7aWYoa3AoaG4pJiZobi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPWNoZWNrYm94XSIpLmxlbmd0aD4wKXJldHVybiEwfX1yZXR1cm4hMX19KCFyZXx8cmUmJiFyZS5zZXBhcmF0ZWQpJiZs'@;
put 'LmFwcGVuZENoaWxkKEcpLHVlJiZsLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIiNiYWQtdmFsdWUjIikpLGc0ZS5oYXMoYyl8fChnNGUuc2V0KGMsITApLGZ1bmN0aW9uIHllKCl7Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7'@;
put 'a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCksIUJlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kdD92b2lkIDA6ZHQuaGlnaGxpZ2h0LmlzQ2VsbCgpfX0se2tleXM6W1siZW50'@;
put 'ZXIiXV0sY2FsbGJhY2s6KCk9PihFZSgpLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pntjb25zdCBkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIGMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmcmJmR0Py5oaWdobGlnaHQuaXNDZWxsKCkmJiFjLnNlbGVjdGlvbi5pc011'@;
put 'bHRpcGxlKCl9fSx7a2V5czpbWyJkZWxldGUiXSxbImJhY2tzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCEwKSwhQmUoKSkscnVuT25seUlmOigpPT57dmFyIGR0O3JldHVybiBudWxsPT09KGR0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWR0P3ZvaWQgMDpkdC5oaWdo'@;
put 'bGlnaHQuaXNDZWxsKCl9fV0se2dyb3VwOnJzdCxyZWxhdGl2ZVRvR3JvdXA6em0scG9zaXRpb246ImJlZm9yZSJ9KX0oKSl9ZnVuY3Rpb24gZUooYyl7cmV0dXJuIklOUFVUIj09PWMudGFnTmFtZSYmImNoZWNrYm94Ij09PWMuZ2V0QXR0cmlidXRlKCJ0eXBlIil9ZnVuY3Rpb24gdEooYyxs'@;
put 'LGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfU1hLmdldFNpbmdsZXRvbigpLmFkZCgibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixmdW5jdGlvbihjLGwsYSl7Y29uc3R7bGFiZWw6ZCx0eXBlOmgscm93OmYsY29sdW1uOnYscHJvcDpNfT1sO2lmKCJjaGVja2Jv'@;
put 'eCI9PT1oKXtpZihkKXtjb25zdHt2YWx1ZTpJLHByb3BlcnR5Okd9PWQ7bGV0IHJlPWE7aWYoSSlyZT0iZnVuY3Rpb24iPT10eXBlb2YgST9JKGYsdixNLGEpOkk7ZWxzZSBpZihHKXtjb25zdCB1ZT10aGlzLmdldERhdGFBdFJvd1Byb3AoZixHKTtyZT1udWxsIT09dWU/dWU6YX1jPXJlfXJl'@;
put 'dHVybiBjfX0pLFFxLlJFTkRFUkVSX1RZUEU9ImNoZWNrYm94Iix0Si5SRU5ERVJFUl9UWVBFPSJoYW5kc29udGFibGUiO3ZhciBuSix5NGUsckosYjRlLGlKLHc0ZSxkc3Q9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBn'@;
put 'bG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBoc3QoYyl7cmV0dXJuIGMmJmMuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsImRlZmF1bHQiKT9jLmRlZmF1bHQ6Y31mdW5jdGlvbiBfNGUoKXtpZihiNGUp'@;
put 'cmV0dXJuIHJKO2I0ZT0xO2NvbnN0IGM9W3trZXk6IlppQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNyl9LHtrZXk6IlpCIixmYWN0b3I6TWF0aC5wb3coMWUzLDcpfSx7a2V5OiJZaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDgpfSx7a2V5OiJZQiIsZmFjdG9yOk1hdGgucG93KDFlMyw4KX0s'@;
put 'e2tleToiVGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw0KX0se2tleToiVEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNCl9LHtrZXk6IlBpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNSl9LHtrZXk6IlBCIixmYWN0b3I6TWF0aC5wb3coMWUzLDUpfSx7a2V5OiJNaUIiLGZhY3RvcjpNYXRoLnBv'@;
put 'dygxMDI0LDIpfSx7a2V5OiJNQiIsZmFjdG9yOk1hdGgucG93KDFlMywyKX0se2tleToiS2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwxKX0se2tleToiS0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMSl9LHtrZXk6IkdpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMyl9LHtrZXk6IkdCIixmYWN0'@;
put 'b3I6TWF0aC5wb3coMWUzLDMpfSx7a2V5OiJFaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDYpfSx7a2V5OiJFQiIsZmFjdG9yOk1hdGgucG93KDFlMyw2KX0se2tleToiQiIsZmFjdG9yOjF9XTtmdW5jdGlvbiBsKEkpe3JldHVybiBJLnJlcGxhY2UoL1stL1xcXiQqKz8uKCl8W1xde31dL2cs'@;
put 'IlxcJCYiKX1mdW5jdGlvbiBhKEksRyxyZSx1ZSx5ZSxFZSxCZSl7aWYoIWlzTmFOKCtJKSlyZXR1cm4rSTtsZXQgR2U9IiIsc3Q9SS5yZXBsYWNlKC8oXlteKF0qKVwoKC4qKVwpKFteKV0qJCkvLCIkMSQyJDMiKTtpZihzdCE9PUkpcmV0dXJuLTEqYShzdCxHLHJlLHVlLHllLEVlKTtmb3Io'@;
put 'bGV0IGhuPTA7aG48Yy5sZW5ndGg7aG4rKyl7bGV0IE1uPWNbaG5dO2lmKEdlPUkucmVwbGFjZShSZWdFeHAoYChbMC05IF0pKCR7TW4ua2V5fSkkYCksIiQxIiksR2UhPT1JKXJldHVybiBhKEdlLEcscmUsdWUseWUsRWUpKk1uLmZhY3Rvcn1pZihHZT1JLnJlcGxhY2UoIiUiLCIiKSxHZSE9'@;
put 'PUkpcmV0dXJuIGEoR2UsRyxyZSx1ZSx5ZSxFZSkvMTAwO2xldCBwdD1wYXJzZUZsb2F0KEkpO2lmKGlzTmFOKHB0KSlyZXR1cm47bGV0IGR0PXVlKHB0KTtpZihkdCYmIi4iIT09ZHQmJihHZT1JLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtsKGR0KX0kYCksIiIpLEdlIT09SSkpcmV0dXJuIGEo'@;
put 'R2UsRyxyZSx1ZSx5ZSxFZSk7bGV0IHF0PXt9O09iamVjdC5rZXlzKEVlKS5mb3JFYWNoKGhuPT57cXRbRWVbaG5dXT1obn0pO2xldCBtbj1PYmplY3Qua2V5cyhxdCkuc29ydCgpLnJldmVyc2UoKSx3bj1tbi5sZW5ndGg7Zm9yKGxldCBobj0wO2huPHduO2huKyspe2xldCBNbj1tbltobl0s'@;
put 'TXI9cXRbTW5dO2lmKEdlPUkucmVwbGFjZShNbiwiIiksR2UhPT1JKXtsZXQga3I7c3dpdGNoKE1yKXtjYXNlInRob3VzYW5kIjprcj1NYXRoLnBvdygxMCwzKTticmVhaztjYXNlIm1pbGxpb24iOmtyPU1hdGgucG93KDEwLDYpO2JyZWFrO2Nhc2UiYmlsbGlvbiI6a3I9TWF0aC5wb3coMTAs'@;
put 'OSk7YnJlYWs7Y2FzZSJ0cmlsbGlvbiI6a3I9TWF0aC5wb3coMTAsMTIpfXJldHVybiBhKEdlLEcscmUsdWUseWUsRWUpKmtyfX19ZnVuY3Rpb24gaChJLEcscmU9IiIsdWUseWUsRWUsQmUpe2lmKCIiPT09SSlyZXR1cm47aWYoST09PXllKXJldHVybiAwO2xldCBHZT1mdW5jdGlvbiBkKEks'@;
put 'RyxyZSl7bGV0IHVlPUkucmVwbGFjZShyZSwiIik7cmV0dXJuIHVlPXVlLnJlcGxhY2UobmV3IFJlZ0V4cChgKFswLTldKSR7bChHLnRob3VzYW5kcyl9KFswLTldKWAsImciKSwiJDEkMiIpLHVlPXVlLnJlcGxhY2UoRy5kZWNpbWFsLCIuIiksdWV9KEksRyxyZSk7cmV0dXJuIGEoR2UsRyxy'@;
put 'ZSx1ZSx5ZSxFZSl9cmV0dXJuIHJKPXt1bmZvcm1hdDpmdW5jdGlvbiBNKEksRyl7Y29uc3QgcmU9bEooKTtsZXQgc3QsdWU9cmUuY3VycmVudERlbGltaXRlcnMoKSx5ZT1yZS5jdXJyZW50Q3VycmVuY3koKS5zeW1ib2wsRWU9cmUuY3VycmVudE9yZGluYWwoKSxCZT1yZS5nZXRaZXJvRm9y'@;
put 'bWF0KCksR2U9cmUuY3VycmVudEFiYnJldmlhdGlvbnMoKTtpZigic3RyaW5nIj09dHlwZW9mIEkpc3Q9ZnVuY3Rpb24gZihJLEcpe2lmKCFJLmluZGV4T2YoIjoiKXx8IjoiPT09Ry50aG91c2FuZHMpcmV0dXJuITE7bGV0IHVlPUkuc3BsaXQoIjoiKTtpZigzIT09dWUubGVuZ3RoKXJldHVy'@;
put 'biExO2xldCBFZT0rdWVbMV0sQmU9K3VlWzJdO3JldHVybiFpc05hTigrdWVbMF0pJiYhaXNOYU4oRWUpJiYhaXNOYU4oQmUpfShJLHVlKT9mdW5jdGlvbiB2KEkpe2xldCBHPUkuc3BsaXQoIjoiKTtyZXR1cm4rR1syXSs2MCorR1sxXSszNjAwKitHWzBdfShJKTpoKEksdWUseWUsRWUsQmUs'@;
put 'R2UpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBJKXJldHVybjtzdD1JfWlmKHZvaWQgMCE9PXN0KXJldHVybiBzdH19fWZ1bmN0aW9uIGFKKCl7aWYodzRlKXJldHVybiBpSjt3NGU9MTtsZXQgYz1fNGUoKTtjb25zdCBsPS9eW2Etel17MiwzfSgtW2EtekEtWl17NH0pPygtKFtBLVpdezJ9'@;
put 'fFswLTldezN9KSk/JC8sRz17b3V0cHV0Ont0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsiY3VycmVuY3kiLCJwZXJjZW50IiwiYnl0ZSIsInRpbWUiLCJvcmRpbmFsIiwibnVtYmVyIl19LGJhc2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJkZWNpbWFsIiwiYmluYXJ5IiwiZ2Vu'@;
put 'ZXJhbCJdLHJlc3RyaWN0aW9uOihzdCxwdCk9PiJieXRlIj09PXB0Lm91dHB1dCxtZXNzYWdlOiJgYmFzZWAgbXVzdCBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgYnl0ZWAiLG1hbmRhdG9yeTpzdD0+ImJ5dGUiPT09c3Qub3V0cHV0fSxjaGFyYWN0ZXJpc3RpYzp7dHlw'@;
put 'ZToibnVtYmVyIixyZXN0cmljdGlvbjpzdD0+c3Q+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHByZWZpeDoic3RyaW5nIixwb3N0Zml4OiJzdHJpbmciLGZvcmNlQXZlcmFnZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInRyaWxsaW9uIiwiYmlsbGlvbiIsIm1p'@;
put 'bGxpb24iLCJ0aG91c2FuZCJdfSxhdmVyYWdlOiJib29sZWFuIixsb3dQcmVjaXNpb246e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihzdCxwdCk9PiEwPT09cHQuYXZlcmFnZSxtZXNzYWdlOiJgbG93UHJlY2lzaW9uYCBtdXN0IGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3B0aW9u'@;
put 'IGBhdmVyYWdlYCBpcyBzZXQifSxjdXJyZW5jeVBvc2l0aW9uOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsicHJlZml4IiwiaW5maXgiLCJwb3N0Zml4Il19LGN1cnJlbmN5U3ltYm9sOiJzdHJpbmciLHRvdGFsTGVuZ3RoOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uczpbe3Jlc3Ry'@;
put 'aWN0aW9uOnN0PT5zdD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0se3Jlc3RyaWN0aW9uOihzdCxwdCk9PiFwdC5leHBvbmVudGlhbCxtZXNzYWdlOiJgdG90YWxMZW5ndGhgIGlzIGluY29tcGF0aWJsZSB3aXRoIGBleHBvbmVudGlhbGAifV19LG1hbnRpc3NhOnt0eXBl'@;
put 'OiJudW1iZXIiLHJlc3RyaWN0aW9uOnN0PT5zdD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0sb3B0aW9uYWxNYW50aXNzYToiYm9vbGVhbiIsdHJpbU1hbnRpc3NhOiJib29sZWFuIixyb3VuZGluZ0Z1bmN0aW9uOiJmdW5jdGlvbiIsb3B0aW9uYWxDaGFyYWN0ZXJpc3Rp'@;
put 'YzoiYm9vbGVhbiIsdGhvdXNhbmRTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjoiYm9vbGVhbiIsYWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0Iixj'@;
put 'aGlsZHJlbjp7dGhvdXNhbmQ6InN0cmluZyIsbWlsbGlvbjoic3RyaW5nIixiaWxsaW9uOiJzdHJpbmciLHRyaWxsaW9uOiJzdHJpbmcifX0sbmVnYXRpdmU6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJzaWduIiwicGFyZW50aGVzaXMiXX0sZm9yY2VTaWduOiJib29sZWFuIixleHBv'@;
put 'bmVudGlhbDp7dHlwZToiYm9vbGVhbiJ9LHByZWZpeFN5bWJvbDp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246KHN0LHB0KT0+InBlcmNlbnQiPT09cHQub3V0cHV0LG1lc3NhZ2U6ImBwcmVmaXhTeW1ib2xgIGNhbiBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgcGVy'@;
put 'Y2VudGAifX0scmU9e2xhbmd1YWdlVGFnOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMCxyZXN0cmljdGlvbjpzdD0+c3QubWF0Y2gobCksbWVzc2FnZToidGhlIGxhbmd1YWdlIHRhZyBtdXN0IGZvbGxvdyB0aGUgQkNQIDQ3IHNwZWNpZmljYXRpb24gKHNlZSBodHRwczovL3Rvb2xzLmll'@;
put 'ZnQub3JnL2h0bWwvYmNwNDcpIn0sZGVsaW1pdGVyczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmRzOiJzdHJpbmciLGRlY2ltYWw6InN0cmluZyIsdGhvdXNhbmRzU2l6ZToibnVtYmVyIn0sbWFuZGF0b3J5OiEwfSxhYmJyZXZpYXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxk'@;
put 'cmVuOnt0aG91c2FuZDp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LG1pbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSxiaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sdHJpbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfX0sbWFuZGF0b3J5'@;
put 'OiEwfSxzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToiYm9vbGVhbiIsb3JkaW5hbDp7dHlwZToiZnVuY3Rpb24iLG1hbmRhdG9yeTohMH0sYnl0ZXM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2JpbmFyeVN1ZmZpeGVzOiJvYmplY3QiLGRlY2ltYWxT'@;
put 'dWZmaXhlczoib2JqZWN0In19LGN1cnJlbmN5Ont0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntzeW1ib2w6InN0cmluZyIscG9zaXRpb246InN0cmluZyIsY29kZToic3RyaW5nIn0sbWFuZGF0b3J5OiEwfSxkZWZhdWx0czoiZm9ybWF0IixvcmRpbmFsRm9ybWF0OiJmb3JtYXQiLGJ5dGVGb3Jt'@;
put 'YXQ6ImZvcm1hdCIscGVyY2VudGFnZUZvcm1hdDoiZm9ybWF0IixjdXJyZW5jeUZvcm1hdDoiZm9ybWF0Iix0aW1lRGVmYXVsdHM6ImZvcm1hdCIsZm9ybWF0czp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7Zm91ckRpZ2l0czp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRo'@;
put 'VHdvRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9fX19O2Z1bmN0aW9uIHllKHN0'@;
put 'KXtyZXR1cm4gdm9pZCAwIT09Yy51bmZvcm1hdChzdCl9ZnVuY3Rpb24gRWUoc3QscHQsZHQscXQ9ITEpe2xldCBtbj1PYmplY3Qua2V5cyhzdCkubWFwKHduPT57aWYoIXB0W3duXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gSW52YWxpZCBrZXk6ICR7d259YCksITE7bGV0IGhuPXN0'@;
put 'W3duXSxNbj1wdFt3bl07aWYoInN0cmluZyI9PXR5cGVvZiBNbiYmKE1uPXt0eXBlOk1ufSksImZvcm1hdCI9PT1Nbi50eXBlKXtpZighRWUoaG4sRyxgW1ZhbGlkYXRlICR7d259XWAsITApKXJldHVybiExfWVsc2UgaWYodHlwZW9mIGhuIT09TW4udHlwZSlyZXR1cm4gY29uc29sZS5lcnJv'@;
put 'cihgJHtkdH0gJHt3bn0gdHlwZSBtaXNtYXRjaGVkOiAiJHtNbi50eXBlfSIgZXhwZWN0ZWQsICIke3R5cGVvZiBobn0iIHByb3ZpZGVkYCksITE7aWYoTW4ucmVzdHJpY3Rpb25zJiZNbi5yZXN0cmljdGlvbnMubGVuZ3RoKXtsZXQgTXI9TW4ucmVzdHJpY3Rpb25zLmxlbmd0aDtmb3IobGV0'@;
put 'IGtyPTA7a3I8TXI7a3IrKyl7bGV0e3Jlc3RyaWN0aW9uOnFuLG1lc3NhZ2U6Z3J9PU1uLnJlc3RyaWN0aW9uc1trcl07aWYoIXFuKGhuLHN0KSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gJHt3bn0gaW52YWxpZCB2YWx1ZTogJHtncn1gKSwhMX19cmV0dXJuIE1uLnJlc3RyaWN0aW9u'@;
put 'JiYhTW4ucmVzdHJpY3Rpb24oaG4sc3QpPyhjb25zb2xlLmVycm9yKGAke2R0fSAke3dufSBpbnZhbGlkIHZhbHVlOiAke01uLm1lc3NhZ2V9YCksITEpOk1uLnZhbGlkVmFsdWVzJiYtMT09PU1uLnZhbGlkVmFsdWVzLmluZGV4T2YoaG4pPyhjb25zb2xlLmVycm9yKGAke2R0fSAke3dufSBp'@;
put 'bnZhbGlkIHZhbHVlOiBtdXN0IGJlIGFtb25nICR7SlNPTi5zdHJpbmdpZnkoTW4udmFsaWRWYWx1ZXMpfSwgIiR7aG59IiBwcm92aWRlZGApLCExKTohKE1uLmNoaWxkcmVuJiYhRWUoaG4sTW4uY2hpbGRyZW4sYFtWYWxpZGF0ZSAke3dufV1gKSl9KTtyZXR1cm4gcXR8fG1uLnB1c2goLi4u'@;
put 'T2JqZWN0LmtleXMocHQpLm1hcCh3bj0+e2xldCBobj1wdFt3bl07aWYoInN0cmluZyI9PXR5cGVvZiBobiYmKGhuPXt0eXBlOmhufSksaG4ubWFuZGF0b3J5KXtsZXQgTW49aG4ubWFuZGF0b3J5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNbiYmKE1uPU1uKHN0KSksTW4mJnZvaWQgMD09PXN0'@;
put 'W3duXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gTWlzc2luZyBtYW5kYXRvcnkga2V5ICIke3dufSJgKSwhMX1yZXR1cm4hMH0pKSxtbi5yZWR1Y2UoKHduLGhuKT0+d24mJmhuLCEwKX1mdW5jdGlvbiBCZShzdCl7cmV0dXJuIEVlKHN0LEcsIltWYWxpZGF0ZSBmb3JtYXRdIil9cmV0'@;
put 'dXJuIGlKPXt2YWxpZGF0ZTpmdW5jdGlvbiB1ZShzdCxwdCl7bGV0IGR0PXllKHN0KSxxdD1CZShwdCk7cmV0dXJuIGR0JiZxdH0sdmFsaWRhdGVGb3JtYXQ6QmUsdmFsaWRhdGVJbnB1dDp5ZSx2YWxpZGF0ZUxhbmd1YWdlOmZ1bmN0aW9uIEdlKHN0KXtyZXR1cm4gRWUoc3QscmUsIltWYWxp'@;
put 'ZGF0ZSBsYW5ndWFnZV0iKX19fXZhciBvSixDNGUsc0o9e3BhcnNlRm9ybWF0OmZ1bmN0aW9uIGtzdChjLGw9e30pe3JldHVybiJzdHJpbmciIT10eXBlb2YgYz9jOihjPWZ1bmN0aW9uIHBzdChjLGwpe2xldCBhPWMubWF0Y2goL157KFtefV0qKX0vKTtyZXR1cm4gYT8obC5wcmVmaXg9YVsx'@;
put 'XSxjLnNsaWNlKGFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxjPWZ1bmN0aW9uIGdzdChjLGwpe2xldCBhPWMubWF0Y2goL3soW159XSopfSQvKTtyZXR1cm4gYT8obC5wb3N0Zml4PWFbMV0sYy5zbGljZSgwLC1hWzBdLmxlbmd0aCkpOmN9KGMsbCksZnVuY3Rpb24gbXN0KGMsbCl7aWYoLTE9PT1j'@;
put 'LmluZGV4T2YoIiQiKSl7aWYoLTE9PT1jLmluZGV4T2YoIiUiKSlyZXR1cm4tMSE9PWMuaW5kZXhPZigiYmQiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJnZW5lcmFsIikpOi0xIT09Yy5pbmRleE9mKCJiIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iYmluYXJ5Iikp'@;
put 'Oi0xIT09Yy5pbmRleE9mKCJkIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iZGVjaW1hbCIpKTp2b2lkKC0xPT09Yy5pbmRleE9mKCI6Iik/LTEhPT1jLmluZGV4T2YoIm8iKSYmKGwub3V0cHV0PSJvcmRpbmFsIik6bC5vdXRwdXQ9InRpbWUiKTtsLm91dHB1dD0icGVyY2VudCJ9'@;
put 'ZWxzZSBsLm91dHB1dD0iY3VycmVuY3kifShjLGwpLGZ1bmN0aW9uIGJzdChjLGwpe2xldCBhPWMubWF0Y2goL1sxLTldK1swLTldKi8pO2EmJihsLnRvdGFsTGVuZ3RoPSthWzBdKX0oYyxsKSxmdW5jdGlvbiBfc3QoYyxsKXtsZXQgZD1jLnNwbGl0KCIuIilbMF0ubWF0Y2goLzArLyk7ZCYm'@;
put 'KGwuY2hhcmFjdGVyaXN0aWM9ZFswXS5sZW5ndGgpfShjLGwpLGZ1bmN0aW9uIEVzdChjLGwpe2lmKC0xIT09Yy5pbmRleE9mKCIuIikpe2xldCBhPWMuc3BsaXQoIi4iKVswXTtsLm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM9LTE9PT1hLmluZGV4T2YoIjAiKX19KGMsbCksZnVuY3Rpb24gU3N0'@;
put 'KGMsbCl7LTEhPT1jLmluZGV4T2YoImEiKSYmKGwuYXZlcmFnZT0hMCl9KGMsbCksZnVuY3Rpb24gTXN0KGMsbCl7LTEhPT1jLmluZGV4T2YoIksiKT9sLmZvcmNlQXZlcmFnZT0idGhvdXNhbmQiOi0xIT09Yy5pbmRleE9mKCJNIik/bC5mb3JjZUF2ZXJhZ2U9Im1pbGxpb24iOi0xIT09Yy5p'@;
put 'bmRleE9mKCJCIik/bC5mb3JjZUF2ZXJhZ2U9ImJpbGxpb24iOi0xIT09Yy5pbmRleE9mKCJUIikmJihsLmZvcmNlQXZlcmFnZT0idHJpbGxpb24iKX0oYyxsKSxmdW5jdGlvbiB3c3QoYyxsKXtsZXQgYT1jLnNwbGl0KCIuIilbMV07aWYoYSl7bGV0IGQ9YS5tYXRjaCgvMCsvKTtkJiYobC5t'@;
put 'YW50aXNzYT1kWzBdLmxlbmd0aCl9fShjLGwpLGZ1bmN0aW9uIHhzdChjLGwpe2MubWF0Y2goL1xbXC5dLyk/bC5vcHRpb25hbE1hbnRpc3NhPSEwOmMubWF0Y2goL1wuLykmJihsLm9wdGlvbmFsTWFudGlzc2E9ITEpfShjLGwpLGZ1bmN0aW9uIENzdChjLGwpe2NvbnN0IGE9Yy5zcGxpdCgi'@;
put 'LiIpWzFdO2EmJihsLnRyaW1NYW50aXNzYT0tMSE9PWEuaW5kZXhPZigiWyIpKX0oYyxsKSxmdW5jdGlvbiB2c3QoYyxsKXstMSE9PWMuaW5kZXhPZigiLCIpJiYobC50aG91c2FuZFNlcGFyYXRlZD0hMCl9KGMsbCksZnVuY3Rpb24geXN0KGMsbCl7LTEhPT1jLmluZGV4T2YoIiAiKSYmKGwu'@;
put 'c3BhY2VTZXBhcmF0ZWQ9ITAsbC5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5PSEwLChsLmF2ZXJhZ2V8fGwuZm9yY2VBdmVyYWdlKSYmKGwuc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb249ITApKX0oYyxsKSxmdW5jdGlvbiBUc3QoYyxsKXtjLm1hdGNoKC9eXCs/XChbXildKlwpJC8pJiYobC5u'@;
put 'ZWdhdGl2ZT0icGFyZW50aGVzaXMiKSxjLm1hdGNoKC9eXCs/LS8pJiYobC5uZWdhdGl2ZT0ic2lnbiIpfShjLGwpLGZ1bmN0aW9uIEFzdChjLGwpe2MubWF0Y2goL15cKy8pJiYobC5mb3JjZVNpZ249ITApfShjLGwpLGwpfX07ZnVuY3Rpb24gbEooKXtpZihDNGUpcmV0dXJuIG9KO0M0ZT0x'@;
put 'O2NvbnN0IGM9ZnVuY3Rpb24gZnN0KCl7cmV0dXJuIHk0ZXx8KHk0ZT0xLG5KPXtsYW5ndWFnZVRhZzoiZW4tVVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlv'@;
put 'bjoidCJ9LHNwYWNlU2VwYXJhdGVkOiExLG9yZGluYWw6ZnVuY3Rpb24oYyl7bGV0IGw9YyUxMDtyZXR1cm4gMT09fn4oYyUxMDAvMTApPyJ0aCI6MT09PWw/InN0IjoyPT09bD8ibmQiOjM9PT1sPyJyZCI6InRoIn0sYnl0ZXM6e2JpbmFyeVN1ZmZpeGVzOlsiQiIsIktpQiIsIk1pQiIsIkdp'@;
put 'QiIsIlRpQiIsIlBpQiIsIkVpQiIsIlppQiIsIllpQiJdLGRlY2ltYWxTdWZmaXhlczpbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiIsIlBCIiwiRUIiLCJaQiIsIllCIl19LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0'@;
put 'aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3Vy'@;
put 'cmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1h'@;
put 'bnRpc3NhOjB9fX0pLG5KfSgpLGw9YUooKSxhPXNKO2xldCBoLGQ9e30sZj17fSx2PW51bGwsTT17fTtmdW5jdGlvbiBJKHJlKXtoPXJlfWZ1bmN0aW9uIEcoKXtyZXR1cm4gZltoXX1yZXR1cm4gZC5sYW5ndWFnZXM9KCk9Pk9iamVjdC5hc3NpZ24oe30sZiksZC5jdXJyZW50TGFuZ3VhZ2U9'@;
put 'KCk9PmgsZC5jdXJyZW50Qnl0ZXM9KCk9PkcoKS5ieXRlc3x8e30sZC5jdXJyZW50Q3VycmVuY3k9KCk9PkcoKS5jdXJyZW5jeSxkLmN1cnJlbnRBYmJyZXZpYXRpb25zPSgpPT5HKCkuYWJicmV2aWF0aW9ucyxkLmN1cnJlbnREZWxpbWl0ZXJzPSgpPT5HKCkuZGVsaW1pdGVycyxkLmN1cnJl'@;
put 'bnRPcmRpbmFsPSgpPT5HKCkub3JkaW5hbCxkLmN1cnJlbnREZWZhdWx0cz0oKT0+T2JqZWN0LmFzc2lnbih7fSxHKCkuZGVmYXVsdHMsTSksZC5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxHKCkub3JkaW5hbEZv'@;
put 'cm1hdCksZC5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxHKCkuYnl0ZUZvcm1hdCksZC5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxH'@;
put 'KCkucGVyY2VudGFnZUZvcm1hdCksZC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksRygpLmN1cnJlbmN5Rm9ybWF0KSxkLmN1cnJlbnRUaW1lRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1'@;
put 'cnJlbnREZWZhdWx0cygpLEcoKS50aW1lRm9ybWF0KSxkLnNldERlZmF1bHRzPXJlPT57cmU9YS5wYXJzZUZvcm1hdChyZSksbC52YWxpZGF0ZUZvcm1hdChyZSkmJihNPXJlKX0sZC5nZXRaZXJvRm9ybWF0PSgpPT52LGQuc2V0WmVyb0Zvcm1hdD1yZT0+dj0ic3RyaW5nIj09dHlwZW9mIHJl'@;
put 'P3JlOm51bGwsZC5oYXNaZXJvRm9ybWF0PSgpPT5udWxsIT09dixkLmxhbmd1YWdlRGF0YT1yZT0+e2lmKHJlKXtpZihmW3JlXSlyZXR1cm4gZltyZV07dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHRhZyAiJHtyZX0iYCl9cmV0dXJuIEcoKX0sZC5yZWdpc3Rlckxhbmd1YWdlPShyZSx1ZT0h'@;
put 'MSk9PntpZighbC52YWxpZGF0ZUxhbmd1YWdlKHJlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGFuZ3VhZ2UgZGF0YSIpO2ZbcmUubGFuZ3VhZ2VUYWddPXJlLHVlJiZJKHJlLmxhbmd1YWdlVGFnKX0sZC5zZXRMYW5ndWFnZT0ocmUsdWU9Yy5sYW5ndWFnZVRhZyk9PntpZighZltyZV0p'@;
put 'e2xldCB5ZT1yZS5zcGxpdCgiLSIpWzBdLEVlPU9iamVjdC5rZXlzKGYpLmZpbmQoQmU9PkJlLnNwbGl0KCItIilbMF09PT15ZSk7cmV0dXJuIGZbRWVdP3ZvaWQgSShFZSk6dm9pZCBJKHVlKX1JKHJlKX0sZC5yZWdpc3Rlckxhbmd1YWdlKGMpLGg9Yy5sYW5ndWFnZVRhZyxvSj1kfXZhciBT'@;
put 'NGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihjKXshZnVuY3Rpb24obCl7dmFyIGEsZD0vXi0/KD86XGQrKD86XC5cZCopP3xcLlxkKykoPzplWystXT9cZCspPyQvaSxoPU1hdGguY2VpbCxmPU1hdGguZmxvb3Isdj0iW0JpZ051bWJlciBFcnJvcl0gIixNPXYrIk51bWJlciBwcmltaXRpdmUg'@;
put 'aGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICIsST0xZTE0LEc9MTQscmU9OTAwNzE5OTI1NDc0MDk5MSx1ZT1bMSwxMCwxMDAsMWUzLDFlNCwxZTUsMWU2LDFlNywxZTgsMWU5LDFlMTAsMWUxMSwxZTEyLDFlMTNdLHllPTFlNyxFZT0xZTk7ZnVuY3Rpb24gR2UoaG4pe3Zh'@;
put 'ciBNbj0wfGhuO3JldHVybiBobj4wfHxobj09PU1uP01uOk1uLTF9ZnVuY3Rpb24gc3QoaG4pe2Zvcih2YXIgTW4sTXIsa3I9MSxxbj1obi5sZW5ndGgsZ3I9aG5bMF0rIiI7a3I8cW47KXtmb3IoTW49aG5ba3IrK10rIiIsTXI9Ry1Nbi5sZW5ndGg7TXItLTtNbj0iMCIrTW4pO2dyKz1Nbn1m'@;
put 'b3IocW49Z3IubGVuZ3RoOzQ4PT09Z3IuY2hhckNvZGVBdCgtLXFuKTspO3JldHVybiBnci5zbGljZSgwLHFuKzF8fDEpfWZ1bmN0aW9uIHB0KGhuLE1uKXt2YXIgTXIsa3IscW49aG4uYyxncj1Nbi5jLHFyPWhuLnMsX2k9TW4ucyxQbj1obi5lLFVyPU1uLmU7aWYoIXFyfHwhX2kpcmV0dXJu'@;
put 'IG51bGw7aWYoa3I9Z3ImJiFnclswXSwoTXI9cW4mJiFxblswXSl8fGtyKXJldHVybiBNcj9rcj8wOi1faTpxcjtpZihxciE9X2kpcmV0dXJuIHFyO2lmKE1yPXFyPDAsa3I9UG49PVVyLCFxbnx8IWdyKXJldHVybiBrcj8wOiFxbl5Ncj8xOi0xO2lmKCFrcilyZXR1cm4gUG4+VXJeTXI/MTot'@;
put 'MTtmb3IoX2k9KFBuPXFuLmxlbmd0aCk8KFVyPWdyLmxlbmd0aCk/UG46VXIscXI9MDtxcjxfaTtxcisrKWlmKHFuW3FyXSE9Z3JbcXJdKXJldHVybiBxbltxcl0+Z3JbcXJdXk1yPzE6LTE7cmV0dXJuIFBuPT1Vcj8wOlBuPlVyXk1yPzE6LTF9ZnVuY3Rpb24gZHQoaG4sTW4sTXIsa3Ipe2lm'@;
put 'KGhuPE1ufHxobj5Ncnx8aG4hPT1mKGhuKSl0aHJvdyBFcnJvcih2Kyhrcnx8IkFyZ3VtZW50IikrKCJudW1iZXIiPT10eXBlb2YgaG4/aG48TW58fGhuPk1yPyIgb3V0IG9mIHJhbmdlOiAiOiIgbm90IGFuIGludGVnZXI6ICI6IiBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAiKStTdHJpbmco'@;
put 'aG4pKX1mdW5jdGlvbiBxdChobil7dmFyIE1uPWhuLmMubGVuZ3RoLTE7cmV0dXJuIEdlKGhuLmUvRyk9PU1uJiZobi5jW01uXSUyIT0wfWZ1bmN0aW9uIG1uKGhuLE1uKXtyZXR1cm4oaG4ubGVuZ3RoPjE/aG4uY2hhckF0KDApKyIuIitobi5zbGljZSgxKTpobikrKE1uPDA/ImUiOiJlKyIp'@;
put 'K01ufWZ1bmN0aW9uIHduKGhuLE1uLE1yKXt2YXIga3IscW47aWYoTW48MCl7Zm9yKHFuPU1yKyIuIjsrK01uO3FuKz1Ncik7aG49cW4raG59ZWxzZSBpZigrK01uPihrcj1obi5sZW5ndGgpKXtmb3IocW49TXIsTW4tPWtyOy0tTW47cW4rPU1yKTtobis9cW59ZWxzZSBNbjxrciYmKGhuPWhu'@;
put 'LnNsaWNlKDAsTW4pKyIuIitobi5zbGljZShNbikpO3JldHVybiBobn1hPWZ1bmN0aW9uIEJlKGhuKXt2YXIgTW4sTXIsa3IsR3QsYm4scW49eHQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4dCx0b1N0cmluZzpudWxsLHZhbHVlT2Y6bnVsbH0sZ3I9bmV3IHh0KDEpLHFyPTIwLF9pPTQsUG49'@;
put 'LTcsVXI9MjEsdHI9LTFlNyxCcj0xZTcsWXI9ITEsd2k9MSxCaT0wLGhhPXtwcmVmaXg6IiIsZ3JvdXBTaXplOjMsc2Vjb25kYXJ5R3JvdXBTaXplOjAsZ3JvdXBTZXBhcmF0b3I6IiwiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGZyYWN0aW9uR3JvdXBTaXplOjAsZnJhY3Rpb25Hcm91cFNlcGFy'@;
put 'YXRvcjoiXHhhMCIsc3VmZml4OiIifSxtYT0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix2dD0hMDtmdW5jdGlvbiB4dChHdCxibil7dmFyIHhuLEluLFhuLE5uLHZyLFduLGZyLERyLE9yPXRoaXM7aWYoIShPciBpbnN0YW5jZW9mIHh0KSlyZXR1cm4gbmV3IHh0KEd0'@;
put 'LGJuKTtpZihudWxsPT1ibil7aWYoR3QmJiEwPT09R3QuX2lzQmlnTnVtYmVyKXJldHVybiBPci5zPUd0LnMsdm9pZCghR3QuY3x8R3QuZT5Ccj9Pci5jPU9yLmU9bnVsbDpHdC5lPHRyP09yLmM9W09yLmU9MF06KE9yLmU9R3QuZSxPci5jPUd0LmMuc2xpY2UoKSkpO2lmKChXbj0ibnVtYmVy'@;
put 'Ij09dHlwZW9mIEd0KSYmMCpHdD09MCl7aWYoT3Iucz0xL0d0PDA/KEd0PS1HdCwtMSk6MSxHdD09PX5+R3Qpe2ZvcihObj0wLHZyPUd0O3ZyPj0xMDt2ci89MTAsTm4rKyk7cmV0dXJuIHZvaWQoTm4+QnI/T3IuYz1Pci5lPW51bGw6KE9yLmU9Tm4sT3IuYz1bR3RdKSl9RHI9U3RyaW5nKEd0'@;
put 'KX1lbHNle2lmKCFkLnRlc3QoRHI9U3RyaW5nKEd0KSkpcmV0dXJuIGtyKE9yLERyLFduKTtPci5zPTQ1PT1Eci5jaGFyQ29kZUF0KDApPyhEcj1Eci5zbGljZSgxKSwtMSk6MX0oTm49RHIuaW5kZXhPZigiLiIpKT4tMSYmKERyPURyLnJlcGxhY2UoIi4iLCIiKSksKHZyPURyLnNlYXJjaCgv'@;
put 'ZS9pKSk+MD8oTm48MCYmKE5uPXZyKSxObis9K0RyLnNsaWNlKHZyKzEpLERyPURyLnN1YnN0cmluZygwLHZyKSk6Tm48MCYmKE5uPURyLmxlbmd0aCl9ZWxzZXtpZihkdChibiwyLG1hLmxlbmd0aCwiQmFzZSIpLDEwPT1ibiYmdnQpcmV0dXJuIGFyKE9yPW5ldyB4dChHdCkscXIrT3IuZSsx'@;
put 'LF9pKTtpZihEcj1TdHJpbmcoR3QpLFduPSJudW1iZXIiPT10eXBlb2YgR3Qpe2lmKDAqR3QhPTApcmV0dXJuIGtyKE9yLERyLFduLGJuKTtpZihPci5zPTEvR3Q8MD8oRHI9RHIuc2xpY2UoMSksLTEpOjEseHQuREVCVUcmJkRyLnJlcGxhY2UoL14wXC4wKnxcLi8sIiIpLmxlbmd0aD4xNSl0'@;
put 'aHJvdyBFcnJvcihNK0d0KX1lbHNlIE9yLnM9NDU9PT1Eci5jaGFyQ29kZUF0KDApPyhEcj1Eci5zbGljZSgxKSwtMSk6MTtmb3IoeG49bWEuc2xpY2UoMCxibiksTm49dnI9MCxmcj1Eci5sZW5ndGg7dnI8ZnI7dnIrKylpZih4bi5pbmRleE9mKEluPURyLmNoYXJBdCh2cikpPDApe2lmKCIu'@;
put 'Ij09SW4pe2lmKHZyPk5uKXtObj1mcjtjb250aW51ZX19ZWxzZSBpZighWG4mJihEcj09RHIudG9VcHBlckNhc2UoKSYmKERyPURyLnRvTG93ZXJDYXNlKCkpfHxEcj09RHIudG9Mb3dlckNhc2UoKSYmKERyPURyLnRvVXBwZXJDYXNlKCkpKSl7WG49ITAsdnI9LTEsTm49MDtjb250aW51ZX1y'@;
put 'ZXR1cm4ga3IoT3IsU3RyaW5nKEd0KSxXbixibil9V249ITEsKE5uPShEcj1NcihEcixibiwxMCxPci5zKSkuaW5kZXhPZigiLiIpKT4tMT9Ecj1Eci5yZXBsYWNlKCIuIiwiIik6Tm49RHIubGVuZ3RofWZvcih2cj0wOzQ4PT09RHIuY2hhckNvZGVBdCh2cik7dnIrKyk7Zm9yKGZyPURyLmxl'@;
put 'bmd0aDs0OD09PURyLmNoYXJDb2RlQXQoLS1mcik7KTtpZihEcj1Eci5zbGljZSh2ciwrK2ZyKSl7aWYoZnItPXZyLFduJiZ4dC5ERUJVRyYmZnI+MTUmJihHdD5yZXx8R3QhPT1mKEd0KSkpdGhyb3cgRXJyb3IoTStPci5zKkd0KTtpZigoTm49Tm4tdnItMSk+QnIpT3IuYz1Pci5lPW51bGw7'@;
put 'ZWxzZSBpZihObjx0cilPci5jPVtPci5lPTBdO2Vsc2V7aWYoT3IuZT1ObixPci5jPVtdLHZyPShObisxKSVHLE5uPDAmJih2cis9RyksdnI8ZnIpe2Zvcih2ciYmT3IuYy5wdXNoKCtEci5zbGljZSgwLHZyKSksZnItPUc7dnI8ZnI7KU9yLmMucHVzaCgrRHIuc2xpY2UodnIsdnIrPUcpKTt2'@;
put 'cj1HLShEcj1Eci5zbGljZSh2cikpLmxlbmd0aH1lbHNlIHZyLT1mcjtmb3IoO3ZyLS07RHIrPSIwIik7T3IuYy5wdXNoKCtEcil9fWVsc2UgT3IuYz1bT3IuZT0wXX1mdW5jdGlvbiAkdChHdCxibix4bixJbil7dmFyIFhuLE5uLHZyLFduLGZyO2lmKG51bGw9PXhuP3huPV9pOmR0KHhuLDAs'@;
put 'OCksIUd0LmMpcmV0dXJuIEd0LnRvU3RyaW5nKCk7aWYoWG49R3QuY1swXSx2cj1HdC5lLG51bGw9PWJuKWZyPXN0KEd0LmMpLGZyPTE9PUlufHwyPT1JbiYmKHZyPD1Qbnx8dnI+PVVyKT9tbihmcix2cik6d24oZnIsdnIsIjAiKTtlbHNlIGlmKE5uPShHdD1hcihuZXcgeHQoR3QpLGJuLHhu'@;
put 'KSkuZSxXbj0oZnI9c3QoR3QuYykpLmxlbmd0aCwxPT1Jbnx8Mj09SW4mJihibjw9Tm58fE5uPD1Qbikpe2Zvcig7V248Ym47ZnIrPSIwIixXbisrKTtmcj1tbihmcixObil9ZWxzZSBpZihibi09dnIsZnI9d24oZnIsTm4sIjAiKSxObisxPlduKXtpZigtLWJuPjApZm9yKGZyKz0iLiI7Ym4t'@;
put 'LTtmcis9IjAiKTt9ZWxzZSBpZigoYm4rPU5uLVduKT4wKWZvcihObisxPT1XbiYmKGZyKz0iLiIpO2JuLS07ZnIrPSIwIik7cmV0dXJuIEd0LnM8MCYmWG4/Ii0iK2ZyOmZyfWZ1bmN0aW9uIFluKEd0LGJuKXtmb3IodmFyIHhuLEluLFhuPTEsTm49bmV3IHh0KEd0WzBdKTtYbjxHdC5sZW5n'@;
put 'dGg7WG4rKykoIShJbj1uZXcgeHQoR3RbWG5dKSkuc3x8KHhuPXB0KE5uLEluKSk9PT1ibnx8MD09PXhuJiZObi5zPT09Ym4pJiYoTm49SW4pO3JldHVybiBObn1mdW5jdGlvbiAkbihHdCxibix4bil7Zm9yKHZhciBJbj0xLFhuPWJuLmxlbmd0aDshYm5bLS1Ybl07Ym4ucG9wKCkpO2ZvcihY'@;
put 'bj1iblswXTtYbj49MTA7WG4vPTEwLEluKyspO3JldHVybih4bj1Jbit4bipHLTEpPkJyP0d0LmM9R3QuZT1udWxsOnhuPHRyP0d0LmM9W0d0LmU9MF06KEd0LmU9eG4sR3QuYz1ibiksR3R9ZnVuY3Rpb24gYXIoR3QsYm4seG4sSW4pe3ZhciBYbixObix2cixXbixmcixEcixPcix1aT1HdC5j'@;
put 'LEVhPXVlO2lmKHVpKXtlOntmb3IoWG49MSxXbj11aVswXTtXbj49MTA7V24vPTEwLFhuKyspO2lmKChObj1ibi1Ybik8MClObis9Ryxmcj11aVtEcj0wXSxPcj1mKGZyL0VhW1huLSh2cj1ibiktMV0lMTApO2Vsc2UgaWYoKERyPWgoKE5uKzEpL0cpKT49dWkubGVuZ3RoKXtpZighSW4pYnJl'@;
put 'YWsgZTtmb3IoO3VpLmxlbmd0aDw9RHI7dWkucHVzaCgwKSk7ZnI9T3I9MCxYbj0xLHZyPShObiU9RyktRysxfWVsc2V7Zm9yKGZyPVduPXVpW0RyXSxYbj0xO1duPj0xMDtXbi89MTAsWG4rKyk7T3I9KHZyPShObiU9RyktRytYbik8MD8wOmYoZnIvRWFbWG4tdnItMV0lMTApfWlmKEluPUlu'@;
put 'fHxibjwwfHxudWxsIT11aVtEcisxXXx8KHZyPDA/ZnI6ZnIlRWFbWG4tdnItMV0pLEluPXhuPDQ/KE9yfHxJbikmJigwPT14bnx8eG49PShHdC5zPDA/MzoyKSk6T3I+NXx8NT09T3ImJig0PT14bnx8SW58fDY9PXhuJiYoTm4+MD92cj4wP2ZyL0VhW1huLXZyXTowOnVpW0RyLTFdKSUxMCYx'@;
put 'fHx4bj09KEd0LnM8MD84OjcpKSxibjwxfHwhdWlbMF0pcmV0dXJuIHVpLmxlbmd0aD0wLEluPyh1aVswXT1FYVsoRy0oYm4tPUd0LmUrMSklRyklR10sR3QuZT0tYm58fDApOnVpWzBdPUd0LmU9MCxHdDtpZigwPT1Obj8odWkubGVuZ3RoPURyLFduPTEsRHItLSk6KHVpLmxlbmd0aD1Ecisx'@;
put 'LFduPUVhW0ctTm5dLHVpW0RyXT12cj4wP2YoZnIvRWFbWG4tdnJdJUVhW3ZyXSkqV246MCksSW4pZm9yKDs7KXtpZigwPT1Ecil7Zm9yKE5uPTEsdnI9dWlbMF07dnI+PTEwO3ZyLz0xMCxObisrKTtmb3IodnI9dWlbMF0rPVduLFduPTE7dnI+PTEwO3ZyLz0xMCxXbisrKTtObiE9V24mJihH'@;
put 'dC5lKyssdWlbMF09PUkmJih1aVswXT0xKSk7YnJlYWt9aWYodWlbRHJdKz1Xbix1aVtEcl0hPUkpYnJlYWs7dWlbRHItLV09MCxXbj0xfWZvcihObj11aS5sZW5ndGg7MD09PXVpWy0tTm5dO3VpLnBvcCgpKTt9R3QuZT5Ccj9HdC5jPUd0LmU9bnVsbDpHdC5lPHRyJiYoR3QuYz1bR3QuZT0w'@;
put 'XSl9cmV0dXJuIEd0fWZ1bmN0aW9uIEdyKEd0KXt2YXIgYm4seG49R3QuZTtyZXR1cm4gbnVsbD09PXhuP0d0LnRvU3RyaW5nKCk6KGJuPXN0KEd0LmMpLGJuPXhuPD1Qbnx8eG4+PVVyP21uKGJuLHhuKTp3bihibix4biwiMCIpLEd0LnM8MD8iLSIrYm46Ym4pfXJldHVybiB4dC5jbG9uZT1C'@;
put 'ZSx4dC5ST1VORF9VUD0wLHh0LlJPVU5EX0RPV049MSx4dC5ST1VORF9DRUlMPTIseHQuUk9VTkRfRkxPT1I9Myx4dC5ST1VORF9IQUxGX1VQPTQseHQuUk9VTkRfSEFMRl9ET1dOPTUseHQuUk9VTkRfSEFMRl9FVkVOPTYseHQuUk9VTkRfSEFMRl9DRUlMPTcseHQuUk9VTkRfSEFMRl9GTE9P'@;
put 'Uj04LHh0LkVVQ0xJRD05LHh0LmNvbmZpZz14dC5zZXQ9ZnVuY3Rpb24oR3Qpe3ZhciBibix4bjtpZihudWxsIT1HdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBHdCl0aHJvdyBFcnJvcih2KyJPYmplY3QgZXhwZWN0ZWQ6ICIrR3QpO2lmKEd0Lmhhc093blByb3BlcnR5KGJuPSJERUNJTUFMX1BM'@;
put 'QUNFUyIpJiYoZHQoeG49R3RbYm5dLDAsRWUsYm4pLHFyPXhuKSxHdC5oYXNPd25Qcm9wZXJ0eShibj0iUk9VTkRJTkdfTU9ERSIpJiYoZHQoeG49R3RbYm5dLDAsOCxibiksX2k9eG4pLEd0Lmhhc093blByb3BlcnR5KGJuPSJFWFBPTkVOVElBTF9BVCIpJiYoKHhuPUd0W2JuXSkmJnhuLnBv'@;
put 'cD8oZHQoeG5bMF0sLUVlLDAsYm4pLGR0KHhuWzFdLDAsRWUsYm4pLFBuPXhuWzBdLFVyPXhuWzFdKTooZHQoeG4sLUVlLEVlLGJuKSxQbj0tKFVyPXhuPDA/LXhuOnhuKSkpLEd0Lmhhc093blByb3BlcnR5KGJuPSJSQU5HRSIpKWlmKCh4bj1HdFtibl0pJiZ4bi5wb3ApZHQoeG5bMF0sLUVl'@;
put 'LC0xLGJuKSxkdCh4blsxXSwxLEVlLGJuKSx0cj14blswXSxCcj14blsxXTtlbHNle2lmKGR0KHhuLC1FZSxFZSxibiksIXhuKXRocm93IEVycm9yKHYrYm4rIiBjYW5ub3QgYmUgemVybzogIit4bik7dHI9LShCcj14bjwwPy14bjp4bil9aWYoR3QuaGFzT3duUHJvcGVydHkoYm49IkNSWVBU'@;
put 'TyIpKXtpZigoeG49R3RbYm5dKSE9PSEheG4pdGhyb3cgRXJyb3IoditibisiIG5vdCB0cnVlIG9yIGZhbHNlOiAiK3huKTtpZih4bil7aWYoISh0eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvJiYoY3J5cHRvLmdldFJhbmRvbVZhbHVlc3x8Y3J5cHRvLnJhbmRvbUJ5dGVzKSkpdGhyb3cgWXI9'@;
put 'IXhuLEVycm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpO1lyPXhufWVsc2UgWXI9eG59aWYoR3QuaGFzT3duUHJvcGVydHkoYm49Ik1PRFVMT19NT0RFIikmJihkdCh4bj1HdFtibl0sMCw5LGJuKSx3aT14biksR3QuaGFzT3duUHJvcGVydHkoYm49IlBPV19QUkVDSVNJT04iKSYmKGR0KHhu'@;
put 'PUd0W2JuXSwwLEVlLGJuKSxCaT14biksR3QuaGFzT3duUHJvcGVydHkoYm49IkZPUk1BVCIpKXtpZigib2JqZWN0IiE9dHlwZW9mKHhuPUd0W2JuXSkpdGhyb3cgRXJyb3IoditibisiIG5vdCBhbiBvYmplY3Q6ICIreG4pO2hhPXhufWlmKEd0Lmhhc093blByb3BlcnR5KGJuPSJBTFBIQUJF'@;
put 'VCIpKXtpZigic3RyaW5nIiE9dHlwZW9mKHhuPUd0W2JuXSl8fC9eLj8kfFsrXC0uXHNdfCguKS4qXDEvLnRlc3QoeG4pKXRocm93IEVycm9yKHYrYm4rIiBpbnZhbGlkOiAiK3huKTt2dD0iMDEyMzQ1Njc4OSI9PXhuLnNsaWNlKDAsMTApLG1hPXhufX1yZXR1cm57REVDSU1BTF9QTEFDRVM6'@;
put 'cXIsUk9VTkRJTkdfTU9ERTpfaSxFWFBPTkVOVElBTF9BVDpbUG4sVXJdLFJBTkdFOlt0cixCcl0sQ1JZUFRPOllyLE1PRFVMT19NT0RFOndpLFBPV19QUkVDSVNJT046QmksRk9STUFUOmhhLEFMUEhBQkVUOm1hfX0seHQuaXNCaWdOdW1iZXI9ZnVuY3Rpb24oR3Qpe2lmKCFHdHx8ITAhPT1H'@;
put 'dC5faXNCaWdOdW1iZXIpcmV0dXJuITE7aWYoIXh0LkRFQlVHKXJldHVybiEwO3ZhciBibix4bixJbj1HdC5jLFhuPUd0LmUsTm49R3QucztlOmlmKCJbb2JqZWN0IEFycmF5XSI9PXt9LnRvU3RyaW5nLmNhbGwoSW4pKXtpZigoMT09PU5ufHwtMT09PU5uKSYmWG4+PS1FZSYmWG48PUVlJiZY'@;
put 'bj09PWYoWG4pKXtpZigwPT09SW5bMF0pe2lmKDA9PT1YbiYmMT09PUluLmxlbmd0aClyZXR1cm4hMDticmVhayBlfWlmKChibj0oWG4rMSklRyk8MSYmKGJuKz1HKSxTdHJpbmcoSW5bMF0pLmxlbmd0aD09Ym4pe2Zvcihibj0wO2JuPEluLmxlbmd0aDtibisrKWlmKCh4bj1Jbltibl0pPDB8'@;
put 'fHhuPj1JfHx4biE9PWYoeG4pKWJyZWFrIGU7aWYoMCE9PXhuKXJldHVybiEwfX19ZWxzZSBpZihudWxsPT09SW4mJm51bGw9PT1YbiYmKG51bGw9PT1Obnx8MT09PU5ufHwtMT09PU5uKSlyZXR1cm4hMDt0aHJvdyBFcnJvcih2KyJJbnZhbGlkIEJpZ051bWJlcjogIitHdCl9LHh0Lm1heGlt'@;
put 'dW09eHQubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIFluKGFyZ3VtZW50cywtMSl9LHh0Lm1pbmltdW09eHQubWluPWZ1bmN0aW9uKCl7cmV0dXJuIFluKGFyZ3VtZW50cywxKX0seHQucmFuZG9tPShHdD05MDA3MTk5MjU0NzQwOTkyLGJuPU1hdGgucmFuZG9tKCkqR3QmMjA5NzE1MT9mdW5jdGlv'@;
put 'bigpe3JldHVybiBmKE1hdGgucmFuZG9tKCkqR3QpfTpmdW5jdGlvbigpe3JldHVybiA4Mzg4NjA4KigxMDczNzQxODI0Kk1hdGgucmFuZG9tKCl8MCkrKDgzODg2MDgqTWF0aC5yYW5kb20oKXwwKX0sZnVuY3Rpb24oeG4pe3ZhciBJbixYbixObix2cixXbixmcj0wLERyPVtdLE9yPW5ldyB4'@;
put 'dChncik7aWYobnVsbD09eG4/eG49cXI6ZHQoeG4sMCxFZSksdnI9aCh4bi9HKSxZcilpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtmb3IoSW49Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkodnIqPTIpKTtmcjx2cjspKFduPTEzMTA3MipJbltmcl0rKEluW2ZyKzFd'@;
put 'Pj4+MTEpKT49OWUxNT8oWG49Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpLEluW2ZyXT1YblswXSxJbltmcisxXT1YblsxXSk6KERyLnB1c2goV24lMWUxNCksZnIrPTIpO2ZyPXZyLzJ9ZWxzZXtpZighY3J5cHRvLnJhbmRvbUJ5dGVzKXRocm93IFlyPSExLEVy'@;
put 'cm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpO2ZvcihJbj1jcnlwdG8ucmFuZG9tQnl0ZXModnIqPTcpO2ZyPHZyOykoV249MjgxNDc0OTc2NzEwNjU2KigzMSZJbltmcl0pKzEwOTk1MTE2Mjc3NzYqSW5bZnIrMV0rNDI5NDk2NzI5NipJbltmcisyXSsxNjc3NzIxNipJbltmciszXSsoSW5b'@;
put 'ZnIrNF08PDE2KSsoSW5bZnIrNV08PDgpK0luW2ZyKzZdKT49OWUxNT9jcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShJbixmcik6KERyLnB1c2goV24lMWUxNCksZnIrPTcpO2ZyPXZyLzd9aWYoIVlyKWZvcig7ZnI8dnI7KShXbj1ibigpKTw5ZTE1JiYoRHJbZnIrK109V24lMWUxNCk7Zm9y'@;
put 'KHZyPURyWy0tZnJdLHhuJT1HLHZyJiZ4biYmKERyW2ZyXT1mKHZyLyhXbj11ZVtHLXhuXSkpKlduKTswPT09RHJbZnJdO0RyLnBvcCgpLGZyLS0pO2lmKGZyPDApRHI9W05uPTBdO2Vsc2V7Zm9yKE5uPS0xOzA9PT1EclswXTtEci5zcGxpY2UoMCwxKSxObi09Ryk7Zm9yKGZyPTEsV249RHJb'@;
put 'MF07V24+PTEwO1duLz0xMCxmcisrKTtmcjxHJiYoTm4tPUctZnIpfXJldHVybiBPci5lPU5uLE9yLmM9RHIsT3J9KSx4dC5zdW09ZnVuY3Rpb24oKXtmb3IodmFyIEd0PTEsYm49YXJndW1lbnRzLHhuPW5ldyB4dChiblswXSk7R3Q8Ym4ubGVuZ3RoOyl4bj14bi5wbHVzKGJuW0d0KytdKTty'@;
put 'ZXR1cm4geG59LE1yPWZ1bmN0aW9uKCl7dmFyIEd0PSIwMTIzNDU2Nzg5IjtmdW5jdGlvbiBibih4bixJbixYbixObil7Zm9yKHZhciB2cixmcixXbj1bMF0sRHI9MCxPcj14bi5sZW5ndGg7RHI8T3I7KXtmb3IoZnI9V24ubGVuZ3RoO2ZyLS07V25bZnJdKj1Jbik7Zm9yKFduWzBdKz1Obi5p'@;
put 'bmRleE9mKHhuLmNoYXJBdChEcisrKSksdnI9MDt2cjxXbi5sZW5ndGg7dnIrKylXblt2cl0+WG4tMSYmKG51bGw9PVduW3ZyKzFdJiYoV25bdnIrMV09MCksV25bdnIrMV0rPVduW3ZyXS9YbnwwLFduW3ZyXSU9WG4pfXJldHVybiBXbi5yZXZlcnNlKCl9cmV0dXJuIGZ1bmN0aW9uKHhuLElu'@;
put 'LFhuLE5uLHZyKXt2YXIgV24sZnIsRHIsT3IsdWksRWEsWmksRHMsdW89eG4uaW5kZXhPZigiLiIpLFdzPXFyLFNzPV9pO2Zvcih1bz49MCYmKE9yPUJpLEJpPTAseG49eG4ucmVwbGFjZSgiLiIsIiIpLEVhPShEcz1uZXcgeHQoSW4pKS5wb3coeG4ubGVuZ3RoLXVvKSxCaT1PcixEcy5jPWJu'@;
put 'KHduKHN0KEVhLmMpLEVhLmUsIjAiKSwxMCxYbixHdCksRHMuZT1Ecy5jLmxlbmd0aCksRHI9T3I9KFppPWJuKHhuLEluLFhuLHZyPyhXbj1tYSxHdCk6KFduPUd0LG1hKSkpLmxlbmd0aDswPT1aaVstLU9yXTtaaS5wb3AoKSk7aWYoIVppWzBdKXJldHVybiBXbi5jaGFyQXQoMCk7aWYodW88'@;
put 'MD8tLURyOihFYS5jPVppLEVhLmU9RHIsRWEucz1ObixaaT0oRWE9TW4oRWEsRHMsV3MsU3MsWG4pKS5jLHVpPUVhLnIsRHI9RWEuZSksdW89WmlbZnI9RHIrV3MrMV0sT3I9WG4vMix1aT11aXx8ZnI8MHx8bnVsbCE9WmlbZnIrMV0sdWk9U3M8ND8obnVsbCE9dW98fHVpKSYmKDA9PVNzfHxT'@;
put 'cz09KEVhLnM8MD8zOjIpKTp1bz5Pcnx8dW89PU9yJiYoND09U3N8fHVpfHw2PT1TcyYmMSZaaVtmci0xXXx8U3M9PShFYS5zPDA/ODo3KSksZnI8MXx8IVppWzBdKXhuPXVpP3duKFduLmNoYXJBdCgxKSwtV3MsV24uY2hhckF0KDApKTpXbi5jaGFyQXQoMCk7ZWxzZXtpZihaaS5sZW5ndGg9'@;
put 'ZnIsdWkpZm9yKC0tWG47KytaaVstLWZyXT5YbjspWmlbZnJdPTAsZnJ8fCgrK0RyLFppPVsxXS5jb25jYXQoWmkpKTtmb3IoT3I9WmkubGVuZ3RoOyFaaVstLU9yXTspO2Zvcih1bz0wLHhuPSIiO3VvPD1Pcjt4bis9V24uY2hhckF0KFppW3VvKytdKSk7eG49d24oeG4sRHIsV24uY2hhckF0'@;
put 'KDApKX1yZXR1cm4geG59fSgpLE1uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gR3QoSW4sWG4sTm4pe3ZhciB2cixXbixmcixEcixPcj0wLHVpPUluLmxlbmd0aCxFYT1YbiV5ZSxaaT1Ybi95ZXwwO2ZvcihJbj1Jbi5zbGljZSgpO3VpLS07KU9yPSgoV249RWEqKGZyPUluW3VpXSV5ZSkrKHZyPVpp'@;
put 'KmZyKyhEcj1Jblt1aV0veWV8MCkqRWEpJXllKnllK09yKS9ObnwwKSsodnIveWV8MCkrWmkqRHIsSW5bdWldPVduJU5uO3JldHVybiBPciYmKEluPVtPcl0uY29uY2F0KEluKSksSW59ZnVuY3Rpb24gYm4oSW4sWG4sTm4sdnIpe3ZhciBXbixmcjtpZihObiE9dnIpZnI9Tm4+dnI/MTotMTtl'@;
put 'bHNlIGZvcihXbj1mcj0wO1duPE5uO1duKyspaWYoSW5bV25dIT1YbltXbl0pe2ZyPUluW1duXT5YbltXbl0/MTotMTticmVha31yZXR1cm4gZnJ9ZnVuY3Rpb24geG4oSW4sWG4sTm4sdnIpe2Zvcih2YXIgV249MDtObi0tOylJbltObl0tPVduLEluW05uXT0oV249SW5bTm5dPFhuW05uXT8x'@;
put 'OjApKnZyK0luW05uXS1YbltObl07Zm9yKDshSW5bMF0mJkluLmxlbmd0aD4xO0luLnNwbGljZSgwLDEpKTt9cmV0dXJuIGZ1bmN0aW9uKEluLFhuLE5uLHZyLFduKXt2YXIgZnIsRHIsT3IsdWksRWEsWmksRHMsdW8sV3MsU3MsTXMsZm8seDAsWWgsUWQsRGMsdGMsJG89SW4ucz09WG4ucz8x'@;
put 'Oi0xLCRsPUluLmMsa289WG4uYztpZighKCRsJiYkbFswXSYma28mJmtvWzBdKSlyZXR1cm4gbmV3IHh0KEluLnMmJlhuLnMmJigkbD8ha298fCRsWzBdIT1rb1swXTprbyk/JGwmJjA9PSRsWzBdfHwha28/MCokbzokby8wOk5hTik7Zm9yKFdzPSh1bz1uZXcgeHQoJG8pKS5jPVtdLCRvPU5u'@;
put 'KyhEcj1Jbi5lLVhuLmUpKzEsV258fChXbj1JLERyPUdlKEluLmUvRyktR2UoWG4uZS9HKSwkbz0kby9HfDApLE9yPTA7a29bT3JdPT0oJGxbT3JdfHwwKTtPcisrKTtpZihrb1tPcl0+KCRsW09yXXx8MCkmJkRyLS0sJG88MClXcy5wdXNoKDEpLHVpPSEwO2Vsc2V7Zm9yKFloPSRsLmxlbmd0'@;
put 'aCxEYz1rby5sZW5ndGgsT3I9MCwkbys9MiwoRWE9ZihXbi8oa29bMF0rMSkpKT4xJiYoa289R3Qoa28sRWEsV24pLCRsPUd0KCRsLEVhLFduKSxEYz1rby5sZW5ndGgsWWg9JGwubGVuZ3RoKSx4MD1EYyxNcz0oU3M9JGwuc2xpY2UoMCxEYykpLmxlbmd0aDtNczxEYztTc1tNcysrXT0wKTt0'@;
put 'Yz1rby5zbGljZSgpLHRjPVswXS5jb25jYXQodGMpLFFkPWtvWzBdLGtvWzFdPj1Xbi8yJiZRZCsrO2Rve2lmKEVhPTAsKGZyPWJuKGtvLFNzLERjLE1zKSk8MCl7aWYoZm89U3NbMF0sRGMhPU1zJiYoZm89Zm8qV24rKFNzWzFdfHwwKSksKEVhPWYoZm8vUWQpKT4xKWZvcihFYT49V24mJihF'@;
put 'YT1Xbi0xKSxEcz0oWmk9R3Qoa28sRWEsV24pKS5sZW5ndGgsTXM9U3MubGVuZ3RoOzE9PWJuKFppLFNzLERzLE1zKTspRWEtLSx4bihaaSxEYzxEcz90YzprbyxEcyxXbiksRHM9WmkubGVuZ3RoLGZyPTE7ZWxzZSAwPT1FYSYmKGZyPUVhPTEpLERzPShaaT1rby5zbGljZSgpKS5sZW5ndGg7'@;
put 'aWYoRHM8TXMmJihaaT1bMF0uY29uY2F0KFppKSkseG4oU3MsWmksTXMsV24pLE1zPVNzLmxlbmd0aCwtMT09ZnIpZm9yKDtibihrbyxTcyxEYyxNcyk8MTspRWErKyx4bihTcyxEYzxNcz90YzprbyxNcyxXbiksTXM9U3MubGVuZ3RofWVsc2UgMD09PWZyJiYoRWErKyxTcz1bMF0pO1dzW09y'@;
put 'KytdPUVhLFNzWzBdP1NzW01zKytdPSRsW3gwXXx8MDooU3M9WyRsW3gwXV0sTXM9MSl9d2hpbGUoKHgwKys8WWh8fG51bGwhPVNzWzBdKSYmJG8tLSk7dWk9bnVsbCE9U3NbMF0sV3NbMF18fFdzLnNwbGljZSgwLDEpfWlmKFduPT1JKXtmb3IoT3I9MSwkbz1Xc1swXTskbz49MTA7JG8vPTEw'@;
put 'LE9yKyspO2FyKHVvLE5uKyh1by5lPU9yK0RyKkctMSkrMSx2cix1aSl9ZWxzZSB1by5lPURyLHVvLnI9K3VpO3JldHVybiB1b319KCksa3I9ZnVuY3Rpb24oKXt2YXIgR3Q9L14oLT8pMChbeGJvXSkoPz1cd1tcdy5dKiQpL2ksYm49L14oW14uXSspXC4kLyx4bj0vXlwuKFteLl0rKSQvLElu'@;
put 'PS9eLT8oSW5maW5pdHl8TmFOKSQvLFhuPS9eXHMqXCsoPz1bXHcuXSl8XlxzK3xccyskL2c7cmV0dXJuIGZ1bmN0aW9uKE5uLHZyLFduLGZyKXt2YXIgRHIsT3I9V24/dnI6dnIucmVwbGFjZShYbiwiIik7aWYoSW4udGVzdChPcikpTm4ucz1pc05hTihPcik/bnVsbDpPcjwwPy0xOjE7ZWxz'@;
put 'ZXtpZighV24mJihPcj1Pci5yZXBsYWNlKEd0LGZ1bmN0aW9uKHVpLEVhLFppKXtyZXR1cm4gRHI9IngiPT0oWmk9WmkudG9Mb3dlckNhc2UoKSk/MTY6ImIiPT1aaT8yOjgsZnImJmZyIT1Ecj91aTpFYX0pLGZyJiYoRHI9ZnIsT3I9T3IucmVwbGFjZShibiwiJDEiKS5yZXBsYWNlKHhuLCIw'@;
put 'LiQxIikpLHZyIT1PcikpcmV0dXJuIG5ldyB4dChPcixEcik7aWYoeHQuREVCVUcpdGhyb3cgRXJyb3IodisiTm90IGEiKyhmcj8iIGJhc2UgIitmcjoiIikrIiBudW1iZXI6ICIrdnIpO05uLnM9bnVsbH1Obi5jPU5uLmU9bnVsbH19KCkscW4uYWJzb2x1dGVWYWx1ZT1xbi5hYnM9ZnVuY3Rp'@;
put 'b24oKXt2YXIgR3Q9bmV3IHh0KHRoaXMpO3JldHVybiBHdC5zPDAmJihHdC5zPTEpLEd0fSxxbi5jb21wYXJlZFRvPWZ1bmN0aW9uKEd0LGJuKXtyZXR1cm4gcHQodGhpcyxuZXcgeHQoR3QsYm4pKX0scW4uZGVjaW1hbFBsYWNlcz1xbi5kcD1mdW5jdGlvbihHdCxibil7dmFyIHhuLEluLFhu'@;
put 'O2lmKG51bGwhPUd0KXJldHVybiBkdChHdCwwLEVlKSxudWxsPT1ibj9ibj1faTpkdChibiwwLDgpLGFyKG5ldyB4dCh0aGlzKSxHdCt0aGlzLmUrMSxibik7aWYoISh4bj10aGlzLmMpKXJldHVybiBudWxsO2lmKEluPSgoWG49eG4ubGVuZ3RoLTEpLUdlKHRoaXMuZS9HKSkqRyxYbj14bltY'@;
put 'bl0pZm9yKDtYbiUxMD09MDtYbi89MTAsSW4tLSk7cmV0dXJuIEluPDAmJihJbj0wKSxJbn0scW4uZGl2aWRlZEJ5PXFuLmRpdj1mdW5jdGlvbihHdCxibil7cmV0dXJuIE1uKHRoaXMsbmV3IHh0KEd0LGJuKSxxcixfaSl9LHFuLmRpdmlkZWRUb0ludGVnZXJCeT1xbi5pZGl2PWZ1bmN0aW9u'@;
put 'KEd0LGJuKXtyZXR1cm4gTW4odGhpcyxuZXcgeHQoR3QsYm4pLDAsMSl9LHFuLmV4cG9uZW50aWF0ZWRCeT1xbi5wb3c9ZnVuY3Rpb24oR3QsYm4pe3ZhciB4bixJbixYbixObixXbixmcixEcixPcix1aT10aGlzO2lmKChHdD1uZXcgeHQoR3QpKS5jJiYhR3QuaXNJbnRlZ2VyKCkpdGhyb3cg'@;
put 'RXJyb3IodisiRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICIrR3IoR3QpKTtpZihudWxsIT1ibiYmKGJuPW5ldyB4dChibikpLFduPUd0LmU+MTQsIXVpLmN8fCF1aS5jWzBdfHwxPT11aS5jWzBdJiYhdWkuZSYmMT09dWkuYy5sZW5ndGh8fCFHdC5jfHwhR3QuY1swXSlyZXR1cm4gT3I9bmV3'@;
put 'IHh0KE1hdGgucG93KCtHcih1aSksV24/R3QucyooMi1xdChHdCkpOitHcihHdCkpKSxibj9Pci5tb2QoYm4pOk9yO2lmKGZyPUd0LnM8MCxibil7aWYoYm4uYz8hYm4uY1swXTohYm4ucylyZXR1cm4gbmV3IHh0KE5hTik7KEluPSFmciYmdWkuaXNJbnRlZ2VyKCkmJmJuLmlzSW50ZWdlcigp'@;
put 'KSYmKHVpPXVpLm1vZChibikpfWVsc2V7aWYoR3QuZT45JiYodWkuZT4wfHx1aS5lPC0xfHwoMD09dWkuZT91aS5jWzBdPjF8fFduJiZ1aS5jWzFdPj0yNGU3OnVpLmNbMF08OGUxM3x8V24mJnVpLmNbMF08PTk5OTk5NzVlNykpKXJldHVybiBObj11aS5zPDAmJnF0KEd0KT8tMDowLHVpLmU+'@;
put 'LTEmJihObj0xL05uKSxuZXcgeHQoZnI/MS9ObjpObik7QmkmJihObj1oKEJpL0crMikpfWZvcihXbj8oeG49bmV3IHh0KC41KSxmciYmKEd0LnM9MSksRHI9cXQoR3QpKTpEcj0oWG49TWF0aC5hYnMoK0dyKEd0KSkpJTIsT3I9bmV3IHh0KGdyKTs7KXtpZihEcil7aWYoIShPcj1Pci50aW1l'@;
put 'cyh1aSkpLmMpYnJlYWs7Tm4/T3IuYy5sZW5ndGg+Tm4mJihPci5jLmxlbmd0aD1Obik6SW4mJihPcj1Pci5tb2QoYm4pKX1pZihYbil7aWYoMD09PShYbj1mKFhuLzIpKSlicmVhaztEcj1YbiUyfWVsc2UgaWYoYXIoR3Q9R3QudGltZXMoeG4pLEd0LmUrMSwxKSxHdC5lPjE0KURyPXF0KEd0'@;
put 'KTtlbHNle2lmKDA9PShYbj0rR3IoR3QpKSlicmVhaztEcj1YbiUyfXVpPXVpLnRpbWVzKHVpKSxObj91aS5jJiZ1aS5jLmxlbmd0aD5ObiYmKHVpLmMubGVuZ3RoPU5uKTpJbiYmKHVpPXVpLm1vZChibikpfXJldHVybiBJbj9PcjooZnImJihPcj1nci5kaXYoT3IpKSxibj9Pci5tb2QoYm4p'@;
put 'Ok5uP2FyKE9yLEJpLF9pLHZvaWQgMCk6T3IpfSxxbi5pbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oR3Qpe3ZhciBibj1uZXcgeHQodGhpcyk7cmV0dXJuIG51bGw9PUd0P0d0PV9pOmR0KEd0LDAsOCksYXIoYm4sYm4uZSsxLEd0KX0scW4uaXNFcXVhbFRvPXFuLmVxPWZ1bmN0aW9uKEd0LGJuKXty'@;
put 'ZXR1cm4gMD09PXB0KHRoaXMsbmV3IHh0KEd0LGJuKSl9LHFuLmlzRmluaXRlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmN9LHFuLmlzR3JlYXRlclRoYW49cW4uZ3Q9ZnVuY3Rpb24oR3QsYm4pe3JldHVybiBwdCh0aGlzLG5ldyB4dChHdCxibikpPjB9LHFuLmlzR3JlYXRlclRoYW5PckVx'@;
put 'dWFsVG89cW4uZ3RlPWZ1bmN0aW9uKEd0LGJuKXtyZXR1cm4gMT09PShibj1wdCh0aGlzLG5ldyB4dChHdCxibikpKXx8MD09PWJufSxxbi5pc0ludGVnZXI9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmR2UodGhpcy5lL0cpPnRoaXMuYy5sZW5ndGgtMn0scW4uaXNMZXNzVGhhbj1xbi5s'@;
put 'dD1mdW5jdGlvbihHdCxibil7cmV0dXJuIHB0KHRoaXMsbmV3IHh0KEd0LGJuKSk8MH0scW4uaXNMZXNzVGhhbk9yRXF1YWxUbz1xbi5sdGU9ZnVuY3Rpb24oR3QsYm4pe3JldHVybi0xPT09KGJuPXB0KHRoaXMsbmV3IHh0KEd0LGJuKSkpfHwwPT09Ym59LHFuLmlzTmFOPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIXRoaXMuc30scW4uaXNOZWdhdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM8MH0scW4uaXNQb3NpdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM+MH0scW4uaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJjA9PXRoaXMuY1swXX0scW4ubWludXM9ZnVuY3Rp'@;
put 'b24oR3QsYm4pe3ZhciB4bixJbixYbixObix2cj10aGlzLFduPXZyLnM7aWYoYm49KEd0PW5ldyB4dChHdCxibikpLnMsIVdufHwhYm4pcmV0dXJuIG5ldyB4dChOYU4pO2lmKFduIT1ibilyZXR1cm4gR3Qucz0tYm4sdnIucGx1cyhHdCk7dmFyIGZyPXZyLmUvRyxEcj1HdC5lL0csT3I9dnIu'@;
put 'Yyx1aT1HdC5jO2lmKCFmcnx8IURyKXtpZighT3J8fCF1aSlyZXR1cm4gT3I/KEd0LnM9LWJuLEd0KTpuZXcgeHQodWk/dnI6TmFOKTtpZighT3JbMF18fCF1aVswXSlyZXR1cm4gdWlbMF0/KEd0LnM9LWJuLEd0KTpuZXcgeHQoT3JbMF0/dnI6Mz09X2k/LTA6MCl9aWYoZnI9R2UoZnIpLERy'@;
put 'PUdlKERyKSxPcj1Pci5zbGljZSgpLFduPWZyLURyKXtmb3IoKE5uPVduPDApPyhXbj0tV24sWG49T3IpOihEcj1mcixYbj11aSksWG4ucmV2ZXJzZSgpLGJuPVduO2JuLS07WG4ucHVzaCgwKSk7WG4ucmV2ZXJzZSgpfWVsc2UgZm9yKEluPShObj0oV249T3IubGVuZ3RoKTwoYm49dWkubGVu'@;
put 'Z3RoKSk/V246Ym4sV249Ym49MDtibjxJbjtibisrKWlmKE9yW2JuXSE9dWlbYm5dKXtObj1Pcltibl08dWlbYm5dO2JyZWFrfWlmKE5uJiYoWG49T3IsT3I9dWksdWk9WG4sR3Qucz0tR3QucyksKGJuPShJbj11aS5sZW5ndGgpLSh4bj1Pci5sZW5ndGgpKT4wKWZvcig7Ym4tLTtPclt4bisr'@;
put 'XT0wKTtmb3IoYm49SS0xO0luPlduOyl7aWYoT3JbLS1Jbl08dWlbSW5dKXtmb3IoeG49SW47eG4mJiFPclstLXhuXTtPclt4bl09Ym4pOy0tT3JbeG5dLE9yW0luXSs9SX1PcltJbl0tPXVpW0luXX1mb3IoOzA9PU9yWzBdO09yLnNwbGljZSgwLDEpLC0tRHIpO3JldHVybiBPclswXT8kbihH'@;
put 'dCxPcixEcik6KEd0LnM9Mz09X2k/LTE6MSxHdC5jPVtHdC5lPTBdLEd0KX0scW4ubW9kdWxvPXFuLm1vZD1mdW5jdGlvbihHdCxibil7dmFyIHhuLEluLFhuPXRoaXM7cmV0dXJuIEd0PW5ldyB4dChHdCxibiksIVhuLmN8fCFHdC5zfHxHdC5jJiYhR3QuY1swXT9uZXcgeHQoTmFOKTohR3Qu'@;
put 'Y3x8WG4uYyYmIVhuLmNbMF0/bmV3IHh0KFhuKTooOT09d2k/KEluPUd0LnMsR3Qucz0xLHhuPU1uKFhuLEd0LDAsMyksR3Qucz1Jbix4bi5zKj1Jbik6eG49TW4oWG4sR3QsMCx3aSksIShHdD1Ybi5taW51cyh4bi50aW1lcyhHdCkpKS5jWzBdJiYxPT13aSYmKEd0LnM9WG4ucyksR3QpfSxx'@;
put 'bi5tdWx0aXBsaWVkQnk9cW4udGltZXM9ZnVuY3Rpb24oR3QsYm4pe3ZhciB4bixJbixYbixObix2cixXbixmcixEcixPcix1aSxFYSxaaSxEcyx1byxXcyxTcz10aGlzLE1zPVNzLmMsZm89KEd0PW5ldyB4dChHdCxibikpLmM7aWYoIShNcyYmZm8mJk1zWzBdJiZmb1swXSkpcmV0dXJuIVNz'@;
put 'LnN8fCFHdC5zfHxNcyYmIU1zWzBdJiYhZm98fGZvJiYhZm9bMF0mJiFNcz9HdC5jPUd0LmU9R3Qucz1udWxsOihHdC5zKj1Tcy5zLE1zJiZmbz8oR3QuYz1bMF0sR3QuZT0wKTpHdC5jPUd0LmU9bnVsbCksR3Q7Zm9yKEluPUdlKFNzLmUvRykrR2UoR3QuZS9HKSxHdC5zKj1Tcy5zLChmcj1N'@;
put 'cy5sZW5ndGgpPCh1aT1mby5sZW5ndGgpJiYoRHM9TXMsTXM9Zm8sZm89RHMsWG49ZnIsZnI9dWksdWk9WG4pLFhuPWZyK3VpLERzPVtdO1huLS07RHMucHVzaCgwKSk7Zm9yKHVvPUksV3M9eWUsWG49dWk7LS1Ybj49MDspe2Zvcih4bj0wLEVhPWZvW1huXSVXcyxaaT1mb1tYbl0vV3N8MCxO'@;
put 'bj1YbisodnI9ZnIpO05uPlhuOyl4bj0oKERyPUVhKihEcj1Nc1stLXZyXSVXcykrKFduPVppKkRyKyhPcj1Nc1t2cl0vV3N8MCkqRWEpJVdzKldzK0RzW05uXSt4bikvdW98MCkrKFduL1dzfDApK1ppKk9yLERzW05uLS1dPURyJXVvO0RzW05uXT14bn1yZXR1cm4geG4/KytJbjpEcy5zcGxp'@;
put 'Y2UoMCwxKSwkbihHdCxEcyxJbil9LHFuLm5lZ2F0ZWQ9ZnVuY3Rpb24oKXt2YXIgR3Q9bmV3IHh0KHRoaXMpO3JldHVybiBHdC5zPS1HdC5zfHxudWxsLEd0fSxxbi5wbHVzPWZ1bmN0aW9uKEd0LGJuKXt2YXIgeG4sSW49dGhpcyxYbj1Jbi5zO2lmKGJuPShHdD1uZXcgeHQoR3QsYm4pKS5z'@;
put 'LCFYbnx8IWJuKXJldHVybiBuZXcgeHQoTmFOKTtpZihYbiE9Ym4pcmV0dXJuIEd0LnM9LWJuLEluLm1pbnVzKEd0KTt2YXIgTm49SW4uZS9HLHZyPUd0LmUvRyxXbj1Jbi5jLGZyPUd0LmM7aWYoIU5ufHwhdnIpe2lmKCFXbnx8IWZyKXJldHVybiBuZXcgeHQoWG4vMCk7aWYoIVduWzBdfHwh'@;
put 'ZnJbMF0pcmV0dXJuIGZyWzBdP0d0Om5ldyB4dChXblswXT9JbjowKlhuKX1pZihObj1HZShObiksdnI9R2UodnIpLFduPVduLnNsaWNlKCksWG49Tm4tdnIpe2ZvcihYbj4wPyh2cj1Obix4bj1mcik6KFhuPS1Ybix4bj1XbikseG4ucmV2ZXJzZSgpO1huLS07eG4ucHVzaCgwKSk7eG4ucmV2'@;
put 'ZXJzZSgpfWZvcigoWG49V24ubGVuZ3RoKS0oYm49ZnIubGVuZ3RoKTwwJiYoeG49ZnIsZnI9V24sV249eG4sYm49WG4pLFhuPTA7Ym47KVhuPShXblstLWJuXT1Xbltibl0rZnJbYm5dK1huKS9JfDAsV25bYm5dPUk9PT1Xbltibl0/MDpXbltibl0lSTtyZXR1cm4gWG4mJihXbj1bWG5dLmNv'@;
put 'bmNhdChXbiksKyt2ciksJG4oR3QsV24sdnIpfSxxbi5wcmVjaXNpb249cW4uc2Q9ZnVuY3Rpb24oR3QsYm4pe3ZhciB4bixJbixYbjtpZihudWxsIT1HdCYmR3QhPT0hIUd0KXJldHVybiBkdChHdCwxLEVlKSxudWxsPT1ibj9ibj1faTpkdChibiwwLDgpLGFyKG5ldyB4dCh0aGlzKSxHdCxi'@;
put 'bik7aWYoISh4bj10aGlzLmMpKXJldHVybiBudWxsO2lmKEluPShYbj14bi5sZW5ndGgtMSkqRysxLFhuPXhuW1huXSl7Zm9yKDtYbiUxMD09MDtYbi89MTAsSW4tLSk7Zm9yKFhuPXhuWzBdO1huPj0xMDtYbi89MTAsSW4rKyk7fXJldHVybiBHdCYmdGhpcy5lKzE+SW4mJihJbj10aGlzLmUr'@;
put 'MSksSW59LHFuLnNoaWZ0ZWRCeT1mdW5jdGlvbihHdCl7cmV0dXJuIGR0KEd0LC1yZSxyZSksdGhpcy50aW1lcygiMWUiK0d0KX0scW4uc3F1YXJlUm9vdD1xbi5zcXJ0PWZ1bmN0aW9uKCl7dmFyIEd0LGJuLHhuLEluLFhuLE5uPXRoaXMsdnI9Tm4uYyxXbj1Obi5zLGZyPU5uLmUsRHI9cXIr'@;
put 'NCxPcj1uZXcgeHQoIjAuNSIpO2lmKDEhPT1Xbnx8IXZyfHwhdnJbMF0pcmV0dXJuIG5ldyB4dCghV258fFduPDAmJighdnJ8fHZyWzBdKT9OYU46dnI/Tm46MS8wKTtpZigwPT0oV249TWF0aC5zcXJ0KCtHcihObikpKXx8V249PTEvMD8oKChibj1zdCh2cikpLmxlbmd0aCtmciklMj09MCYm'@;
put 'KGJuKz0iMCIpLFduPU1hdGguc3FydCgrYm4pLGZyPUdlKChmcisxKS8yKS0oZnI8MHx8ZnIlMikseG49bmV3IHh0KGJuPVduPT0xLzA/IjVlIitmcjooYm49V24udG9FeHBvbmVudGlhbCgpKS5zbGljZSgwLGJuLmluZGV4T2YoImUiKSsxKStmcikpOnhuPW5ldyB4dChXbisiIikseG4uY1sw'@;
put 'XSlmb3IoKFduPShmcj14bi5lKStEcik8MyYmKFduPTApOzspaWYoeG49T3IudGltZXMoKFhuPXhuKS5wbHVzKE1uKE5uLFhuLERyLDEpKSksc3QoWG4uYykuc2xpY2UoMCxXbik9PT0oYm49c3QoeG4uYykpLnNsaWNlKDAsV24pKXtpZih4bi5lPGZyJiYtLVduLCI5OTk5IiE9KGJuPWJuLnNs'@;
put 'aWNlKFduLTMsV24rMSkpJiYoSW58fCI0OTk5IiE9Ym4pKXsoIStibnx8IStibi5zbGljZSgxKSYmIjUiPT1ibi5jaGFyQXQoMCkpJiYoYXIoeG4seG4uZStxcisyLDEpLEd0PSF4bi50aW1lcyh4bikuZXEoTm4pKTticmVha31pZighSW4mJihhcihYbixYbi5lK3FyKzIsMCksWG4udGltZXMo'@;
put 'WG4pLmVxKE5uKSkpe3huPVhuO2JyZWFrfURyKz00LFduKz00LEluPTF9cmV0dXJuIGFyKHhuLHhuLmUrcXIrMSxfaSxHdCl9LHFuLnRvRXhwb25lbnRpYWw9ZnVuY3Rpb24oR3QsYm4pe3JldHVybiBudWxsIT1HdCYmKGR0KEd0LDAsRWUpLEd0KyspLCR0KHRoaXMsR3QsYm4sMSl9LHFuLnRv'@;
put 'Rml4ZWQ9ZnVuY3Rpb24oR3QsYm4pe3JldHVybiBudWxsIT1HdCYmKGR0KEd0LDAsRWUpLEd0PUd0K3RoaXMuZSsxKSwkdCh0aGlzLEd0LGJuKX0scW4udG9Gb3JtYXQ9ZnVuY3Rpb24oR3QsYm4seG4pe3ZhciBJbjtpZihudWxsPT14biludWxsIT1HdCYmYm4mJiJvYmplY3QiPT10eXBlb2Yg'@;
put 'Ym4/KHhuPWJuLGJuPW51bGwpOkd0JiYib2JqZWN0Ij09dHlwZW9mIEd0Pyh4bj1HdCxHdD1ibj1udWxsKTp4bj1oYTtlbHNlIGlmKCJvYmplY3QiIT10eXBlb2YgeG4pdGhyb3cgRXJyb3IodisiQXJndW1lbnQgbm90IGFuIG9iamVjdDogIit4bik7aWYoSW49dGhpcy50b0ZpeGVkKEd0LGJu'@;
put 'KSx0aGlzLmMpe3ZhciBObix2cj1Jbi5zcGxpdCgiLiIpLFduPSt4bi5ncm91cFNpemUsZnI9K3huLnNlY29uZGFyeUdyb3VwU2l6ZSxEcj14bi5ncm91cFNlcGFyYXRvcnx8IiIsT3I9dnJbMF0sdWk9dnJbMV0sRWE9dGhpcy5zPDAsWmk9RWE/T3Iuc2xpY2UoMSk6T3IsRHM9WmkubGVuZ3Ro'@;
put 'O2lmKGZyJiYoTm49V24sV249ZnIsZnI9Tm4sRHMtPU5uKSxXbj4wJiZEcz4wKXtmb3IoT3I9Wmkuc3Vic3RyKDAsTm49RHMlV258fFduKTtObjxEcztObis9V24pT3IrPURyK1ppLnN1YnN0cihObixXbik7ZnI+MCYmKE9yKz1EcitaaS5zbGljZShObikpLEVhJiYoT3I9Ii0iK09yKX1Jbj11'@;
put 'aT9PcisoeG4uZGVjaW1hbFNlcGFyYXRvcnx8IiIpKygoZnI9K3huLmZyYWN0aW9uR3JvdXBTaXplKT91aS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcZHsiK2ZyKyJ9XFxCIiwiZyIpLCIkJiIrKHhuLmZyYWN0aW9uR3JvdXBTZXBhcmF0b3J8fCIiKSk6dWkpOk9yfXJldHVybih4bi5wcmVmaXh8'@;
put 'fCIiKStJbisoeG4uc3VmZml4fHwiIil9LHFuLnRvRnJhY3Rpb249ZnVuY3Rpb24oR3Qpe3ZhciBibix4bixJbixYbixObix2cixXbixmcixEcixPcix1aSxFYSxaaT10aGlzLERzPVppLmM7aWYobnVsbCE9R3QmJighKFduPW5ldyB4dChHdCkpLmlzSW50ZWdlcigpJiYoV24uY3x8MSE9PVdu'@;
put 'LnMpfHxXbi5sdChncikpKXRocm93IEVycm9yKHYrIkFyZ3VtZW50ICIrKFduLmlzSW50ZWdlcigpPyJvdXQgb2YgcmFuZ2U6ICI6Im5vdCBhbiBpbnRlZ2VyOiAiKStHcihXbikpO2lmKCFEcylyZXR1cm4gbmV3IHh0KFppKTtmb3IoYm49bmV3IHh0KGdyKSxEcj14bj1uZXcgeHQoZ3IpLElu'@;
put 'PWZyPW5ldyB4dChnciksRWE9c3QoRHMpLE5uPWJuLmU9RWEubGVuZ3RoLVppLmUtMSxibi5jWzBdPXVlWyh2cj1ObiVHKTwwP0crdnI6dnJdLEd0PSFHdHx8V24uY29tcGFyZWRUbyhibik+MD9Obj4wP2JuOkRyOlduLHZyPUJyLEJyPTEvMCxXbj1uZXcgeHQoRWEpLGZyLmNbMF09MDtPcj1N'@;
put 'bihXbixibiwwLDEpLDEhPShYbj14bi5wbHVzKE9yLnRpbWVzKEluKSkpLmNvbXBhcmVkVG8oR3QpOyl4bj1JbixJbj1YbixEcj1mci5wbHVzKE9yLnRpbWVzKFhuPURyKSksZnI9WG4sYm49V24ubWludXMoT3IudGltZXMoWG49Ym4pKSxXbj1YbjtyZXR1cm4gWG49TW4oR3QubWludXMoeG4p'@;
put 'LEluLDAsMSksZnI9ZnIucGx1cyhYbi50aW1lcyhEcikpLHhuPXhuLnBsdXMoWG4udGltZXMoSW4pKSxmci5zPURyLnM9Wmkucyx1aT1NbihEcixJbixObio9MixfaSkubWludXMoWmkpLmFicygpLmNvbXBhcmVkVG8oTW4oZnIseG4sTm4sX2kpLm1pbnVzKFppKS5hYnMoKSk8MT9bRHIsSW5d'@;
put 'Oltmcix4bl0sQnI9dnIsdWl9LHFuLnRvTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuK0dyKHRoaXMpfSxxbi50b1ByZWNpc2lvbj1mdW5jdGlvbihHdCxibil7cmV0dXJuIG51bGwhPUd0JiZkdChHdCwxLEVlKSwkdCh0aGlzLEd0LGJuLDIpfSxxbi50b1N0cmluZz1mdW5jdGlvbihHdCl7dmFy'@;
put 'IGJuLHhuPXRoaXMsSW49eG4ucyxYbj14bi5lO3JldHVybiBudWxsPT09WG4/SW4/KGJuPSJJbmZpbml0eSIsSW48MCYmKGJuPSItIitibikpOmJuPSJOYU4iOihudWxsPT1HdD9ibj1Ybjw9UG58fFhuPj1Vcj9tbihzdCh4bi5jKSxYbik6d24oc3QoeG4uYyksWG4sIjAiKToxMD09PUd0JiZ2'@;
put 'dD9ibj13bihzdCgoeG49YXIobmV3IHh0KHhuKSxxcitYbisxLF9pKSkuYykseG4uZSwiMCIpOihkdChHdCwyLG1hLmxlbmd0aCwiQmFzZSIpLGJuPU1yKHduKHN0KHhuLmMpLFhuLCIwIiksMTAsR3QsSW4sITApKSxJbjwwJiZ4bi5jWzBdJiYoYm49Ii0iK2JuKSksYm59LHFuLnZhbHVlT2Y9'@;
put 'cW4udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIEdyKHRoaXMpfSxxbi5faXNCaWdOdW1iZXI9ITAsbnVsbCE9aG4mJnh0LnNldChobikseHR9KCksYS5kZWZhdWx0PWEuQmlnTnVtYmVyPWEsYy5leHBvcnRzP2MuZXhwb3J0cz1hOihsfHwobD10eXBlb2Ygc2VsZjwidSImJnNlbGY/c2VsZjp3'@;
put 'aW5kb3cpLGwuQmlnTnVtYmVyPWEpfShkc3QpfShTNGUpO3ZhciBNNGU9UzRlLmV4cG9ydHM7Y29uc3QgbTM9bEooKSxMc3Q9YUooKSxPc3Q9c0osUHN0PU00ZSxVMD17dHJpbGxpb246TWF0aC5wb3coMTAsMTIpLGJpbGxpb246TWF0aC5wb3coMTAsOSksbWlsbGlvbjpNYXRoLnBvdygxMCw2'@;
put 'KSx0aG91c2FuZDpNYXRoLnBvdygxMCwzKX0sdVQ9e3RvdGFsTGVuZ3RoOjAsY2hhcmFjdGVyaXN0aWM6MCxmb3JjZUF2ZXJhZ2U6ITEsYXZlcmFnZTohMSxtYW50aXNzYTotMSxvcHRpb25hbE1hbnRpc3NhOiEwLHRob3VzYW5kU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJhdGVkOiExLG5lZ2F0'@;
put 'aXZlOiJzaWduIixmb3JjZVNpZ246ITEscm91bmRpbmdGdW5jdGlvbjpNYXRoLnJvdW5kLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiExfSx7YmluYXJ5U3VmZml4ZXM6eDRlLGRlY2ltYWxTdWZmaXhlczpKUH09bTMuY3VycmVudEJ5dGVzKCksY0o9e2dlbmVyYWw6e3NjYWxlOjEwMjQs'@;
put 'c3VmZml4ZXM6SlAsbWFya2VyOiJiZCJ9LGJpbmFyeTp7c2NhbGU6MTAyNCxzdWZmaXhlczp4NGUsbWFya2VyOiJiIn0sZGVjaW1hbDp7c2NhbGU6MWUzLHN1ZmZpeGVzOkpQLG1hcmtlcjoiZCJ9fTtmdW5jdGlvbiBRUChjLGwsYSl7bGV0IGQ9bFswXSxoPU1hdGguYWJzKGMpO2lmKGg+PWEp'@;
put 'e2ZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7KytmKXtsZXQgdj1NYXRoLnBvdyhhLGYpLE09TWF0aC5wb3coYSxmKzEpO2lmKGg+PXYmJmg8TSl7ZD1sW2ZdLGMvPXY7YnJlYWt9fWQ9PT1sWzBdJiYoYy89TWF0aC5wb3coYSxsLmxlbmd0aC0xKSxkPWxbbC5sZW5ndGgtMV0pfXJldHVybnt2YWx1'@;
put 'ZTpjLHN1ZmZpeDpkfX1mdW5jdGlvbiBlRihjKXtsZXQgbD0iIjtmb3IobGV0IGE9MDthPGM7YSsrKWwrPSIwIjtyZXR1cm4gbH1mdW5jdGlvbiBkVCh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmE9bTMsZGVjaW1hbFNlcGFyYXRvcjpkLGRlZmF1bHRzOmg9YS5jdXJyZW50'@;
put 'RGVmYXVsdHMoKX0pe2xldCBmPWMuX3ZhbHVlO2lmKDA9PT1mJiZhLmhhc1plcm9Gb3JtYXQoKSlyZXR1cm4gYS5nZXRaZXJvRm9ybWF0KCk7aWYoIWlzRmluaXRlKGYpKXJldHVybiBmLnRvU3RyaW5nKCk7bGV0IHY9T2JqZWN0LmFzc2lnbih7fSx1VCxoLGwpLE09di50b3RhbExlbmd0aCxJ'@;
put 'PU0/MDp2LmNoYXJhY3RlcmlzdGljLEc9di5vcHRpb25hbENoYXJhY3RlcmlzdGljLHJlPXYuZm9yY2VBdmVyYWdlLHllPSEhTXx8ISFyZXx8di5hdmVyYWdlLEVlPU0/LTE6eWUmJnZvaWQgMD09PWwubWFudGlzc2E/MDp2Lm1hbnRpc3NhLEJlPSFNJiYodm9pZCAwPT09bC5vcHRpb25hbE1h'@;
put 'bnRpc3NhPy0xPT09RWU6di5vcHRpb25hbE1hbnRpc3NhKSxHZT12LnRyaW1NYW50aXNzYSxzdD12LnRob3VzYW5kU2VwYXJhdGVkLHB0PXYuc3BhY2VTZXBhcmF0ZWQsZHQ9di5uZWdhdGl2ZSxxdD12LmZvcmNlU2lnbixtbj12LmV4cG9uZW50aWFsLHduPXYucm91bmRpbmdGdW5jdGlvbixo'@;
put 'bj0iIjtpZih5ZSl7bGV0IE1yPWZ1bmN0aW9uIFlzdCh7dmFsdWU6Yyxmb3JjZUF2ZXJhZ2U6bCxsb3dQcmVjaXNpb246YT0hMCxhYmJyZXZpYXRpb25zOmQsc3BhY2VTZXBhcmF0ZWQ6aD0hMSx0b3RhbExlbmd0aDpmPTAscm91bmRpbmdGdW5jdGlvbjp2PU1hdGgucm91bmR9KXtsZXQgTT0i'@;
put 'IixJPU1hdGguYWJzKGMpLEc9LTE7aWYobCYmZFtsXSYmVTBbbF0/KE09ZFtsXSxjLz1VMFtsXSk6ST49VTAudHJpbGxpb258fGEmJjE9PT12KEkvVTAudHJpbGxpb24pPyhNPWQudHJpbGxpb24sYy89VTAudHJpbGxpb24pOkk8VTAudHJpbGxpb24mJkk+PVUwLmJpbGxpb258fGEmJjE9PT12'@;
put 'KEkvVTAuYmlsbGlvbik/KE09ZC5iaWxsaW9uLGMvPVUwLmJpbGxpb24pOkk8VTAuYmlsbGlvbiYmST49VTAubWlsbGlvbnx8YSYmMT09PXYoSS9VMC5taWxsaW9uKT8oTT1kLm1pbGxpb24sYy89VTAubWlsbGlvbik6KEk8VTAubWlsbGlvbiYmST49VTAudGhvdXNhbmR8fGEmJjE9PT12KEkv'@;
put 'VTAudGhvdXNhbmQpKSYmKE09ZC50aG91c2FuZCxjLz1VMC50aG91c2FuZCksTSYmKE09KGg/IiAiOiIiKStNKSxmKXtsZXQgdWU9YzwwLHllPWMudG9TdHJpbmcoKS5zcGxpdCgiLiIpWzBdO0c9TWF0aC5tYXgoZi0odWU/eWUubGVuZ3RoLTE6eWUubGVuZ3RoKSwwKX1yZXR1cm57dmFsdWU6'@;
put 'YyxhYmJyZXZpYXRpb246TSxtYW50aXNzYVByZWNpc2lvbjpHfX0oe3ZhbHVlOmYsZm9yY2VBdmVyYWdlOnJlLGxvd1ByZWNpc2lvbjp2Lmxvd1ByZWNpc2lvbixhYmJyZXZpYXRpb25zOmEuY3VycmVudEFiYnJldmlhdGlvbnMoKSxzcGFjZVNlcGFyYXRlZDpwdCxyb3VuZGluZ0Z1bmN0aW9u'@;
put 'OnduLHRvdGFsTGVuZ3RoOk19KTtmPU1yLnZhbHVlLGhuKz1Nci5hYmJyZXZpYXRpb24sTSYmKEVlPU1yLm1hbnRpc3NhUHJlY2lzaW9uKX1pZihtbil7bGV0IE1yPWZ1bmN0aW9uIEdzdCh7dmFsdWU6YyxjaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbjpsfSl7bGV0W2EsZF09Yy50b0V4cG9uZW50'@;
put 'aWFsKCkuc3BsaXQoImUiKSxoPSthO3JldHVybiBsPygxPGwmJihoKj1NYXRoLnBvdygxMCxsLTEpLGQ9K2QtKGwtMSksZD1kPj0wP2ArJHtkfWA6ZCkse3ZhbHVlOmgsYWJicmV2aWF0aW9uOmBlJHtkfWB9KTp7dmFsdWU6aCxhYmJyZXZpYXRpb246YGUke2R9YH19KHt2YWx1ZTpmLGNoYXJh'@;
put 'Y3RlcmlzdGljUHJlY2lzaW9uOkl9KTtmPU1yLnZhbHVlLGhuPU1yLmFiYnJldmlhdGlvbitobn1sZXQgTW49ZnVuY3Rpb24gWHN0KGMsbCxhLGQsaCxmKXtpZigtMT09PWQpcmV0dXJuIGM7bGV0IHY9ZnVuY3Rpb24gS3N0KGMsbCxhPU1hdGgucm91bmQpe3JldHVybi0xIT09Yy50b1N0cmlu'@;
put 'ZygpLmluZGV4T2YoImUiKT9mdW5jdGlvbiAkc3QoYyxsKXtsZXQgYT1jLnRvU3RyaW5nKCksW2QsaF09YS5zcGxpdCgiZSIpLFtmLHY9IiJdPWQuc3BsaXQoIi4iKTtpZigraD4wKWE9Zit2K2VGKGgtdi5sZW5ndGgpO2Vsc2V7bGV0IE09Ii4iO009K2Y8MD9gLTAke019YDpgMCR7TX1gO2xl'@;
put 'dCBJPShlRigtaC0xKStNYXRoLmFicyhmKSt2KS5zdWJzdHIoMCxsKTtJLmxlbmd0aDxsJiYoSSs9ZUYobC1JLmxlbmd0aCkpLGE9TStJfXJldHVybitoPjAmJmw+MCYmKGErPWAuJHtlRihsKX1gKSxhfShjLGwpOm5ldyBQc3QoYSgrYCR7Y31lKyR7bH1gKS9NYXRoLnBvdygxMCxsKSkudG9G'@;
put 'aXhlZChsKX0obCxkLGYpLFtNLEk9IiJdPXYudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKEkubWF0Y2goL14wKyQvKSYmKGF8fGgpKXJldHVybiBNO2xldCBHPUkubWF0Y2goLzArJC8pO3JldHVybiBoJiZHP2Ake019LiR7SS50b1N0cmluZygpLnNsaWNlKDAsRy5pbmRleCl9YDp2LnRvU3Ry'@;
put 'aW5nKCl9KGYudG9TdHJpbmcoKSxmLEJlLEVlLEdlLHduKTtyZXR1cm4gTW49ZnVuY3Rpb24gcXN0KGMsbCxhLGQpe2xldCBoPWMsW2Ysdl09aC50b1N0cmluZygpLnNwbGl0KCIuIik7aWYoZi5tYXRjaCgvXi0/MCQvKSYmYSlyZXR1cm4gdj9gJHtmLnJlcGxhY2UoIjAiLCIiKX0uJHt2fWA6'@;
put 'Zi5yZXBsYWNlKCIwIiwiIik7Y29uc3QgTT1sPDAmJjA9PT1mLmluZGV4T2YoIi0iKTtpZihNJiYoZj1mLnNsaWNlKDEpLGg9aC5zbGljZSgxKSksZi5sZW5ndGg8ZCl7bGV0IEk9ZC1mLmxlbmd0aDtmb3IobGV0IEc9MDtHPEk7RysrKWg9YDAke2h9YH1yZXR1cm4gTSYmKGg9YC0ke2h9YCks'@;
put 'aC50b1N0cmluZygpfShNbixmLEcsSSksTW49ZnVuY3Rpb24gUXN0KGMsbCxhLGQsaCl7bGV0IGY9ZC5jdXJyZW50RGVsaW1pdGVycygpLHY9Zi50aG91c2FuZHM7aD1ofHxmLmRlY2ltYWw7bGV0IE09Zi50aG91c2FuZHNTaXplfHwzLEk9Yy50b1N0cmluZygpLEc9SS5zcGxpdCgiLiIpWzBd'@;
put 'LHJlPUkuc3BsaXQoIi4iKVsxXTtjb25zdCB1ZT1sPDAmJjA9PT1HLmluZGV4T2YoIi0iKTtyZXR1cm4gYSYmKHVlJiYoRz1HLnNsaWNlKDEpKSxmdW5jdGlvbiBKc3QoYyxsKXtsZXQgYT1bXSxkPTA7Zm9yKGxldCBoPWM7aD4wO2gtLSlkPT09bCYmKGEudW5zaGlmdChoKSxkPTApLGQrKzty'@;
put 'ZXR1cm4gYX0oRy5sZW5ndGgsTSkuZm9yRWFjaCgoRWUsQmUpPT57Rz1HLnNsaWNlKDAsRWUrQmUpK3YrRy5zbGljZShFZStCZSl9KSx1ZSYmKEc9YC0ke0d9YCkpLEk9cmU/RytoK3JlOkcsSX0oTW4sZixzdCxhLGQpLCh5ZXx8bW4pJiYoTW49ZnVuY3Rpb24gZW90KGMsbCl7cmV0dXJuIGMr'@;
put 'bH0oTW4saG4pKSwocXR8fGY8MCkmJihNbj1mdW5jdGlvbiB0b3QoYyxsLGEpe3JldHVybiAwPT09bD9jOjA9PStjP2MucmVwbGFjZSgiLSIsIiIpOmw+MD9gKyR7Y31gOiJzaWduIj09PWE/YzpgKCR7Yy5yZXBsYWNlKCItIiwiIil9KWB9KE1uLGYsZHQpKSxNbn1mdW5jdGlvbiBPXyhjLGwp'@;
put 'e2lmKCFjKXJldHVybiBsO2xldCBhPU9iamVjdC5rZXlzKGMpO3JldHVybiAxPT09YS5sZW5ndGgmJiJvdXRwdXQiPT09YVswXT9sOmN9Y29uc3QgQWc9TTRlO2Z1bmN0aW9uIEU0ZShjLGwsYSl7bGV0IGQ9bmV3IEFnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwu'@;
put 'X3ZhbHVlKSxoPW5ldyBBZyhoKSxjLl92YWx1ZT1kLm1pbnVzKGgpLnRvTnVtYmVyKCksY31jb25zdCBWcD1sSigpLGhvdD1hSigpLGZvdD0oYz0+KHtsb2FkTGFuZ3VhZ2VzSW5Ob2RlOmw9PmZ1bmN0aW9uIElzdChjLGwpe2MuZm9yRWFjaChhPT57bGV0IGQ7dHJ5e2Q9ZnVuY3Rpb24gRHN0'@;
put 'KGMpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgIicrYysnIi4gUGxlYXNlIGNvbmZpZ3VyZSB0aGUgZHluYW1pY1JlcXVpcmVUYXJnZXRzIG9yL2FuZCBpZ25vcmVEeW5hbWljUmVxdWlyZXMgb3B0aW9uIG9mIEByb2xsdXAvcGx1Z2luLWNvbW1vbmpz'@;
put 'IGFwcHJvcHJpYXRlbHkgZm9yIHRoaXMgcmVxdWlyZSBjYWxsIHRvIHdvcmsuJyl9KGAuLi9sYW5ndWFnZXMvJHthfWApfWNhdGNoe2NvbnNvbGUuZXJyb3IoYFVuYWJsZSB0byBsb2FkICIke2F9Ii4gTm8gbWF0Y2hpbmcgbGFuZ3VhZ2UgZmlsZSBmb3VuZC5gKX1kJiZsLnJlZ2lzdGVyTGFu'@;
put 'Z3VhZ2UoZCl9KX0obCxjKX0pKShzdSkscG90PV80ZSgpO2xldCBvOT0oYz0+KHtmb3JtYXQ6KC4uLmwpPT5mdW5jdGlvbiBGc3QoYyxsPXt9LGEpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmKGw9T3N0LnBhcnNlRm9ybWF0KGwpKSwhTHN0LnZhbGlkYXRlRm9ybWF0KGwpKXJldHVybiJFUlJP'@;
put 'UjogaW52YWxpZCBmb3JtYXQiO2xldCBoPWwucHJlZml4fHwiIixmPWwucG9zdGZpeHx8IiIsdj1mdW5jdGlvbiBIc3QoYyxsLGEpe3N3aXRjaChsLm91dHB1dCl7Y2FzZSJjdXJyZW5jeSI6cmV0dXJuIGZ1bmN0aW9uIFdzdChjLGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRDdXJyZW5jeSgpO2xl'@;
put 'dCB2LGg9T2JqZWN0LmFzc2lnbih7fSxsKSxmPU9iamVjdC5hc3NpZ24oe30sdVQsaCksTT0iIixJPSEhZi50b3RhbExlbmd0aHx8ISFmLmZvcmNlQXZlcmFnZXx8Zi5hdmVyYWdlLEc9aC5jdXJyZW5jeVBvc2l0aW9ufHxkLnBvc2l0aW9uLHJlPWguY3VycmVuY3lTeW1ib2x8fGQuc3ltYm9s'@;
put 'O2NvbnN0IHVlPXZvaWQgMCE9PWYuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeT9mLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6Zi5zcGFjZVNlcGFyYXRlZDt2b2lkIDA9PT1oLmxvd1ByZWNpc2lvbiYmKGgubG93UHJlY2lzaW9uPSExKSx1ZSYmKE09IiAiKSwiaW5maXgiPT09RyYmKHY9TStyZStN'@;
put 'KTtsZXQgeWU9ZFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6aCxzdGF0ZTphLGRlY2ltYWxTZXBhcmF0b3I6dn0pO3JldHVybiJwcmVmaXgiPT09RyYmKHllPWMuX3ZhbHVlPDAmJiJzaWduIj09PWYubmVnYXRpdmU/YC0ke019JHtyZX0ke3llLnNsaWNlKDEpfWA6Yy5fdmFsdWU+MCYm'@;
put 'Zi5mb3JjZVNpZ24/YCske019JHtyZX0ke3llLnNsaWNlKDEpfWA6cmUrTSt5ZSksKCFHfHwicG9zdGZpeCI9PT1HKSYmKE09IWYuc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb24mJkk/IiI6TSx5ZT15ZStNK3JlKSx5ZX0oYyxsPU9fKGwsbTMuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1h'@;
put 'dCgpKSxtMyk7Y2FzZSJwZXJjZW50IjpyZXR1cm4gZnVuY3Rpb24gWnN0KGMsbCxhLGQpe2xldCBoPWwucHJlZml4U3ltYm9sLGY9ZFQoe2luc3RhbmNlOmQoMTAwKmMuX3ZhbHVlKSxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PU9iamVjdC5hc3NpZ24oe30sdVQsbCk7cmV0dXJuIGg/'@;
put 'YCUke3Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7Zn1gOmAke2Z9JHt2LnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0lYH0oYyxsPU9fKGwsbTMuY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0KCkpLG0zLGEpO2Nhc2UiYnl0ZSI6cmV0dXJuIGZ1bmN0aW9uIGpzdChjLGwsYSxkKXtsZXQg'@;
put 'aD1sLmJhc2V8fCJiaW5hcnkiLGY9T2JqZWN0LmFzc2lnbih7fSx1VCxsKTtjb25zdHtiaW5hcnlTdWZmaXhlczp2LGRlY2ltYWxTdWZmaXhlczpNfT1hLmN1cnJlbnRCeXRlcygpO2xldCBHPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVzOk18fEpQLG1hcmtlcjoiYmQifSxiaW5hcnk6'@;
put 'e3NjYWxlOjEwMjQsc3VmZml4ZXM6dnx8eDRlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpNfHxKUCxtYXJrZXI6ImQifX1baF0se3ZhbHVlOnJlLHN1ZmZpeDp1ZX09UVAoYy5fdmFsdWUsRy5zdWZmaXhlcyxHLnNjYWxlKTtyZXR1cm5gJHtkVCh7aW5zdGFuY2U6'@;
put 'ZChyZSkscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphLGRlZmF1bHRzOmEuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCl9KX0ke2Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7dWV9YH0oYyxsPU9fKGwsbTMuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCkpLG0zLGEpO2Nhc2UidGltZSI6cmV0'@;
put 'dXJuIGw9T18obCxtMy5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQoKSksZnVuY3Rpb24gVXN0KGMpe2xldCBsPU1hdGguZmxvb3IoYy5fdmFsdWUvNjAvNjApLGE9TWF0aC5mbG9vcigoYy5fdmFsdWUtNjAqbCo2MCkvNjApLGQ9TWF0aC5yb3VuZChjLl92YWx1ZS02MCpsKjYwLTYwKmEpO3Jl'@;
put 'dHVybmAke2x9OiR7YTwxMD8iMCI6IiJ9JHthfToke2Q8MTA/IjAiOiIifSR7ZH1gfShjKTtjYXNlIm9yZGluYWwiOnJldHVybiBmdW5jdGlvbiB6c3QoYyxsLGEpe2xldCBkPWEuY3VycmVudE9yZGluYWwoKSxoPU9iamVjdC5hc3NpZ24oe30sdVQsbCksZj1kVCh7aW5zdGFuY2U6Yyxwcm92'@;
put 'aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PWQoYy5fdmFsdWUpO3JldHVybmAke2Z9JHtoLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke3Z9YH0oYyxsPU9fKGwsbTMuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0KCkpLG0zKTtkZWZhdWx0OnJldHVybiBkVCh7aW5zdGFuY2U6Yyxwcm92aWRl'@;
put 'ZEZvcm1hdDpsLG51bWJybzphfSl9fShjLGwsYSk7cmV0dXJuIHY9ZnVuY3Rpb24gbm90KGMsbCl7cmV0dXJuIGwrY30odixoKSx2PWZ1bmN0aW9uIHJvdChjLGwpe3JldHVybiBjK2x9KHYsZiksdn0oLi4ubCxjKSxnZXRCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIEJzdChjKXtsZXQgbD1j'@;
put 'Si5nZW5lcmFsO3JldHVybiBRUChjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxnZXRCaW5hcnlCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIFZzdChjKXtsZXQgbD1jSi5iaW5hcnk7cmV0dXJuIFFQKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3Vm'@;
put 'Zml4fSguLi5sLGMpLGdldERlY2ltYWxCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIE5zdChjKXtsZXQgbD1jSi5kZWNpbWFsO3JldHVybiBRUChjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxmb3JtYXRPckRlZmF1bHQ6T199KSkoc3UpLGw5PShjPT4oe2Fk'@;
put 'ZDoobCxhKT0+ZnVuY3Rpb24gYW90KGMsbCxhKXtsZXQgZD1uZXcgQWcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IEFnKGgpLGMuX3ZhbHVlPWQucGx1cyhoKS50b051bWJlcigpLGN9KGwsYSxjKSxzdWJ0cmFjdDoobCxhKT0+RTRlKGws'@;
put 'YSxjKSxtdWx0aXBseToobCxhKT0+ZnVuY3Rpb24gc290KGMsbCxhKXtsZXQgZD1uZXcgQWcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IEFnKGgpLGMuX3ZhbHVlPWQudGltZXMoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksZGl2aWRlOihs'@;
put 'LGEpPT5mdW5jdGlvbiBvb3QoYyxsLGEpe2xldCBkPW5ldyBBZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgQWcoaCksYy5fdmFsdWU9ZC5kaXZpZGVkQnkoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksc2V0OihsLGEpPT5mdW5jdGlvbiBs'@;
put 'b3QoYyxsLGEpe2xldCBkPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihkPWwuX3ZhbHVlKSxjLl92YWx1ZT1kLGN9KGwsYSxjKSxkaWZmZXJlbmNlOihsLGEpPT5mdW5jdGlvbiBjb3QoYyxsLGEpe2xldCBkPWEoYy5fdmFsdWUpO3JldHVybiBFNGUoZCxsLGEpLE1hdGguYWJzKGQuX3ZhbHVl'@;
put 'KX0obCxhLGMpLEJpZ051bWJlcjpBZ30pKShzdSk7Y29uc3QgZ290PXNKO2NsYXNzIFQ0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl92YWx1ZT1sfWNsb25lKCl7cmV0dXJuIHN1KHRoaXMuX3ZhbHVlKX1mb3JtYXQobD17fSl7cmV0dXJuIG85LmZvcm1hdCh0aGlzLGwpfWZvcm1hdEN1cnJlbmN5'@;
put 'KGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmKGw9Z290LnBhcnNlRm9ybWF0KGwpKSwobD1vOS5mb3JtYXRPckRlZmF1bHQobCxWcC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0KCkpKS5vdXRwdXQ9ImN1cnJlbmN5IixvOS5mb3JtYXQodGhpcyxsKX1mb3JtYXRUaW1lKGw9e30p'@;
put 'e3JldHVybiBsLm91dHB1dD0idGltZSIsbzkuZm9ybWF0KHRoaXMsbCl9YmluYXJ5Qnl0ZVVuaXRzKCl7cmV0dXJuIG85LmdldEJpbmFyeUJ5dGVVbml0KHRoaXMpfWRlY2ltYWxCeXRlVW5pdHMoKXtyZXR1cm4gbzkuZ2V0RGVjaW1hbEJ5dGVVbml0KHRoaXMpfWJ5dGVVbml0cygpe3JldHVy'@;
put 'biBvOS5nZXRCeXRlVW5pdCh0aGlzKX1kaWZmZXJlbmNlKGwpe3JldHVybiBsOS5kaWZmZXJlbmNlKHRoaXMsbCl9YWRkKGwpe3JldHVybiBsOS5hZGQodGhpcyxsKX1zdWJ0cmFjdChsKXtyZXR1cm4gbDkuc3VidHJhY3QodGhpcyxsKX1tdWx0aXBseShsKXtyZXR1cm4gbDkubXVsdGlwbHko'@;
put 'dGhpcyxsKX1kaXZpZGUobCl7cmV0dXJuIGw5LmRpdmlkZSh0aGlzLGwpfXNldChsKXtyZXR1cm4gbDkuc2V0KHRoaXMsQTRlKGwpKX12YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiBBNGUoYyl7bGV0IGw9YztyZXR1cm4g'@;
put 'c3UuaXNOdW1icm8oYyk/bD1jLl92YWx1ZToic3RyaW5nIj09dHlwZW9mIGM/bD1zdS51bmZvcm1hdChjKTppc05hTihjKSYmKGw9TmFOKSxsfWZ1bmN0aW9uIHN1KGMpe3JldHVybiBuZXcgVDRlKEE0ZShjKSl9c3UudmVyc2lvbj0iMi41LjAiLHN1LmlzTnVtYnJvPWZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiBjIGluc3RhbmNlb2YgVDRlfSxzdS5sYW5ndWFnZT1WcC5jdXJyZW50TGFuZ3VhZ2Usc3UucmVnaXN0ZXJMYW5ndWFnZT1WcC5yZWdpc3Rlckxhbmd1YWdlLHN1LnNldExhbmd1YWdlPVZwLnNldExhbmd1YWdlLHN1Lmxhbmd1YWdlcz1WcC5sYW5ndWFnZXMsc3UubGFuZ3VhZ2VEYXRh'@;
put 'PVZwLmxhbmd1YWdlRGF0YSxzdS56ZXJvRm9ybWF0PVZwLnNldFplcm9Gb3JtYXQsc3UuZGVmYXVsdEZvcm1hdD1WcC5jdXJyZW50RGVmYXVsdHMsc3Uuc2V0RGVmYXVsdHM9VnAuc2V0RGVmYXVsdHMsc3UuZGVmYXVsdEN1cnJlbmN5Rm9ybWF0PVZwLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRG'@;
put 'b3JtYXQsc3UudmFsaWRhdGU9aG90LnZhbGlkYXRlLHN1LmxvYWRMYW5ndWFnZXNJbk5vZGU9Zm90LmxvYWRMYW5ndWFnZXNJbk5vZGUsc3UudW5mb3JtYXQ9cG90LnVuZm9ybWF0LHN1LkJpZ051bWJlcj1sOS5CaWdOdW1iZXI7dmFyIFdtPWhzdChzdSk7ZnVuY3Rpb24gazRlKGMsbCl7aWYo'@;
put 'ZzEoYykpe2NvbnN0IGE9bC5udW1lcmljRm9ybWF0LGQ9YSYmYS5jdWx0dXJlfHwiLSIsaD1hJiZhLnBhdHRlcm47aWYodHlwZW9mIGQ8InUiJiYhV20ubGFuZ3VhZ2VzKClbZF0pe2NvbnN0IGY9ZC5yZXBsYWNlKCItIiwiIiksdj1XbS5hbGxMYW5ndWFnZXM/V20uYWxsTGFuZ3VhZ2VzW2Rd'@;
put 'OldtW2ZdO3YmJldtLnJlZ2lzdGVyTGFuZ3VhZ2Uodil9V20uc2V0TGFuZ3VhZ2UoZCksYz1XbShjKS5mb3JtYXQoaHx8IjAiKX1yZXR1cm4gY31mdW5jdGlvbiB1SihjLGwsYSxkLGgsZix2KXtsZXQgTT1mO2lmKGcxKE0pKXtsZXQgRz1bXTtpZihBcnJheS5pc0FycmF5KHYuY2xhc3NOYW1l'@;
put 'KSlHPXYuY2xhc3NOYW1lO2Vsc2V7dmFyIEk7Y29uc3QgcmU9bnVsbCE9PShJPXYuY2xhc3NOYW1lKSYmdm9pZCAwIT09ST9JOiIiO3JlLmxlbmd0aCYmKEc9cmUuc3BsaXQoIiAiKSl9TT1rNGUoTSx2KSxHLmluZGV4T2YoImh0TGVmdCIpPDAmJkcuaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZH'@;
put 'LmluZGV4T2YoImh0UmlnaHQiKTwwJiZHLmluZGV4T2YoImh0SnVzdGlmeSIpPDAmJkcucHVzaCgiaHRSaWdodCIpLEcuaW5kZXhPZigiaHROdW1lcmljIik8MCYmRy5wdXNoKCJodE51bWVyaWMiKSx2LmNsYXNzTmFtZT1HLmpvaW4oIiAiKSxsLmRpcj0ibHRyIn1FZyhjLGwsYSxkLGgsTSx2'@;
put 'KX1mdW5jdGlvbiBkSihjLGwsYSxkLGgsZix2KXtFZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSk7Y29uc3QgST12Lmhhc2hTeW1ib2x8fCIqIjtsZXQgRz0iIjtLYSgodi5oYXNoTGVuZ3RofHxsLmlubmVySFRNTC5sZW5ndGgpLTEsKCk9PntHKz1JfSksajcobCxHKX1mdW5jdGlvbiBo'@;
put 'SihjLGwsYSxkLGgsZix2KXtFZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9ZnVuY3Rpb24gZkooYyxsLGEsZCxoLGYsdil7RWcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZGlyPSJsdHIifWZ1bmN0aW9uIGhUKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksdGhpcy5h'@;
put 'bGxvd0VtcHR5JiYiIj09PWE/bCghMCk6dGhpcy5zdHJpY3QmJnRoaXMuc291cmNlPyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNvdXJjZT90aGlzLnNvdXJjZShhLEQ0ZShhLGwpKTpENGUoYSxsKSh0aGlzLnNvdXJjZSk6bCghMCl9ZnVuY3Rpb24gRDRlKGMsbCl7Y29uc3QgYT1jO3JldHVy'@;
put 'biBmdW5jdGlvbihkKXtsZXQgaD0hMTtmb3IobGV0IGY9MCx2PWQubGVuZ3RoO2Y8djtmKyspaWYoYT09PWRbZl0pe2g9ITA7YnJlYWt9bChoKX19ZnVuY3Rpb24gSTRlKGMpe2NvbnN0IGw9bmV3IERhdGUoYyk7cmV0dXJuIGlzTmFOKG5ldyBEYXRlKGAke2N9VDAwOjAwYCkuZ2V0RGF0ZSgp'@;
put 'KT9sOm5ldyBEYXRlKGwuZ2V0VGltZSgpKzZlNCpsLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIHRGKGMsbCl7Y29uc3QgYT1TZmUoczRlLHRoaXMuaW5zdGFuY2UpO2xldCBkPWMsaD0hMDtudWxsPT1kJiYoZD0iIik7bGV0IGY9UHMoZCx0aGlzLmRhdGVGb3JtYXR8fGEuZGVmYXVs'@;
put 'dERhdGVGb3JtYXQsITApLmlzVmFsaWQoKSx2PVBzKG5ldyBEYXRlKGQpKS5pc1ZhbGlkKCl8fGY7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWQmJih2PSEwLGY9ITApLHZ8fChoPSExKSwhdiYmZiYmKGg9ITApLHYmJiFmKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0KXtjb25zdCBNPWZ1'@;
put 'bmN0aW9uIE1vdChjLGwpe2NvbnN0IGE9UHMoSTRlKGMpKSxkPVBzKGMsbCksaD1jLnNlYXJjaCgvW0EtWmEtel0vZyk+LTE7bGV0IGY7cmV0dXJuIGY9YS5pc1ZhbGlkKCkmJmEuZm9ybWF0KCJ4Iik9PT1kLmZvcm1hdCgieCIpfHwhZC5pc1ZhbGlkKCl8fGg/YTpkLGYuZm9ybWF0KGwpfShk'@;
put 'LHRoaXMuZGF0ZUZvcm1hdCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlzdWFsUm93LHRoaXMudmlzdWFsQ29sLE0sImRhdGVWYWxpZGF0b3IiKSxoPSEwfWVsc2UgaD0hMTtsKGgpfWZ1bmN0aW9uIHBKKGMsbCl7aFQuYXBwbHkodGhpcyxbYyxsXSl9ZnVuY3Rpb24gZ0oo'@;
put 'YyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSxsKCEoIXRoaXMuYWxsb3dFbXB0eXx8IiIhPT1hKXx8IiIhPT1hJiZnMShjKSl9dUouUkVOREVSRVJfVFlQRT0ibnVtZXJpYyIsZEouUkVOREVSRVJfVFlQRT0icGFzc3dvcmQiLGhKLlJFTkRFUkVSX1RZUEU9InNlbGVjdCIsZkouUkVOREVS'@;
put 'RVJfVFlQRT0idGltZSIsaFQuVkFMSURBVE9SX1RZUEU9ImF1dG9jb21wbGV0ZSIsdEYuVkFMSURBVE9SX1RZUEU9ImRhdGUiLHBKLlZBTElEQVRPUl9UWVBFPSJkcm9wZG93biIsZ0ouVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO2NvbnN0IFRvdD1bIllZWVktTU0tRERUSEg6bW06c3MuU1NT'@;
put 'WiIsIlgiLCJ4Il07ZnVuY3Rpb24gbkYoYyxsKXtjb25zdCBhPXRoaXMudGltZUZvcm1hdHx8Img6bW06c3MgYSI7bGV0IGQ9ITAsaD1jO251bGw9PT1oJiYoaD0iIiksaD0vXlxkezMsfSQvLnRlc3QoaCk/cGFyc2VJbnQoaCwxMCk6aDtjb25zdCBmPS9eXGR7MSwyfSQvLnRlc3QoaCk7ZiYm'@;
put 'KGgrPSI6MDAiKTtjb25zdCB2PVBzKGgsVG90LCEwKS5pc1ZhbGlkKCk/UHMoaCk6UHMoaCxhKTtsZXQgTT12LmlzVmFsaWQoKSxJPVBzKGgsYSwhMCkuaXNWYWxpZCgpJiYhZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09aCYmKE09ITAsST0hMCksTXx8KGQ9ITEpLCFNJiZJJiYoZD0hMCks'@;
put 'TSYmIUkpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IEc9di5mb3JtYXQoYSk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlzdWFsUm93LHRoaXMudmlzdWFsQ29sLEcsInRpbWVWYWxpZGF0b3IiKSxkPSEwfWVsc2UgZD0hMTtsKGQpfW5GLlZBTElEQVRPUl9U'@;
put 'WVBFPSJ0aW1lIjtjb25zdCBEb3Q9e0NFTExfVFlQRToiYXV0b2NvbXBsZXRlIixlZGl0b3I6enEscmVuZGVyZXI6SV8sdmFsaWRhdG9yOmhUfSxJb3Q9e0NFTExfVFlQRToiY2hlY2tib3giLGVkaXRvcjplNGUscmVuZGVyZXI6UXF9O2Z1bmN0aW9uIFI0ZShjLGwsYSxkLGgsZix2KXtJXy5h'@;
put 'cHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9UjRlLlJFTkRFUkVSX1RZUEU9ImRhdGUiO2NvbnN0IExvdD17Q0VMTF9UWVBFOiJkYXRlIixlZGl0b3I6bDRlLHJlbmRlcmVyOlI0ZSx2YWxpZGF0b3I6dEZ9LE9vdD17Q0VMTF9UWVBFOiJkcm9wZG93biIsZWRpdG9yOmM0ZSxyZW5kZXJlcjpK'@;
put 'cSx2YWxpZGF0b3I6cEosZmlsdGVyOiExLHN0cmljdDohMH0sUG90PXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOkhxLHJlbmRlcmVyOnRKfSxGb3Q9e0NFTExfVFlQRToibnVtZXJpYyIsZWRpdG9yOnU0ZSxyZW5kZXJlcjp1Six2YWxpZGF0b3I6Z0osZGF0YVR5cGU6Im51bWJl'@;
put 'ciJ9LEhvdD17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOmQ0ZSxyZW5kZXJlcjpkSixjb3B5YWJsZTohMX0sTm90PXtDRUxMX1RZUEU6InNlbGVjdCIsZWRpdG9yOmY0ZSxyZW5kZXJlcjpoSn0sVm90PXtDRUxMX1RZUEU6InRpbWUiLGVkaXRvcjpwNGUscmVuZGVyZXI6ZkosdmFsaWRh'@;
put 'dG9yOm5GfTtmdW5jdGlvbiBMNGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFBfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVb3Qo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24gWm90KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBGXyhjLGwpe3JldHVybiBjLmdldChPNGUoYyxsKSl9ZnVuY3Rpb24gTzRlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBQNGU9bmV3IE1hcChbWyJwbHVnaW4iLGZ1bmN0aW9uIFNKZShjKXtyZXR1'@;
put 'cm4hIU9FKGMpfV0sWyJjZWxsLXR5cGUiLGhwZV0sWyJlZGl0b3IiLENmZV0sWyJyZW5kZXJlciIsT2ZlXSxbInZhbGlkYXRvciIsUGZlXV0pLEY0ZT1TeW1ib2woIm1haW5TZXR0aW5nIiksckY9W107bGV0IGM5PW51bGw7dmFyIHU5PW5ldyBXZWFrTWFwLEg0ZT1uZXcgV2Vha1NldDtjbGFz'@;
put 'cyBGb3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYmFzZSJ9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdGhpcy5QTFVHSU5fS0VZXX1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57fX1jb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gam90KGMsbCl7'@;
put 'TDRlKGMsbCksbC5hZGQoYyl9KSh0aGlzLEg0ZSksUF8odGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgWjIodGhpcykpLFBfKHRoaXMsInBsdWdpbk5hbWUiLG51bGwpLFBfKHRoaXMsInBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyIsW10pLFBfKHRoaXMsImlzUGx1Z2luc1JlYWR5IiwhMSks'@;
put 'UF8odGhpcywiZW5hYmxlZCIsITEpLFBfKHRoaXMsImluaXRpYWxpemVkIiwhMSksZnVuY3Rpb24gem90KGMsbCxhKXtMNGUoYyxsKSxsLnNldChjLGEpfSh0aGlzLHU5LHt9KSxUcCh0aGlzLCJob3QiLGwse3dyaXRhYmxlOiExfSksYzk9bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclBs'@;
put 'dWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixhPT50aGlzLm9uVXBkYXRlU2V0dGluZ3MoYSkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUluaXQiLCgpPT50aGlzLmlu'@;
put 'aXQoKSl9aW5pdCgpe3RoaXMucGx1Z2luTmFtZT10aGlzLmhvdC5nZXRQbHVnaW5OYW1lKHRoaXMpO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUyxhPUFycmF5LmlzQXJyYXkobCk/bDpbXTtpZihhLmxlbmd0aD4wKXtjb25zdCBoPVtdO2lmKGEuZm9yRWFjaChmPT57Y29u'@;
put 'c3RbdixNXT1mLnNwbGl0KCI6Iik7aWYoIVA0ZS5oYXModikpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgIiR7dn0iIHdhcyBmb3VuZC5gKTtQNGUuZ2V0KHYpKE0pfHxoLnB1c2goYCAtICR7TX0gKCR7dn0pYCl9KSxoLmxlbmd0aD4wKXtjb25zdCBm'@;
put 'PVtgVGhlICR7dGhpcy5wbHVnaW5OYW1lfSBwbHVnaW4gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBtb2R1bGVzOlxuYCxgJHtoLmpvaW4oIlxuIil9XG5gXS5qb2luKCIiKTtyRi5wdXNoKGYpfX1pZihjOXx8KGM5PXJLKCkpLGM5LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKT49MCYmYzkuc3Bs'@;
put 'aWNlKGM5LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKSwxKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT57dGhpcy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCl9KSwwPT09YzkubGVuZ3RoKXtpZihyRi5s'@;
put 'ZW5ndGg+MCl7Y29uc3QgaD1bYCR7ckYuam9pbigiXG4iKX1cbmAsIllvdSBoYXZlIHRvIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlbSBtYW51YWxseS4iXS5qb2luKCIiKTt0aHJvdyByRi5sZW5ndGg9MCxuZXcgRXJyb3IoaCl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGx1Z2luc0luaXRp'@;
put 'YWxpemVkIil9dGhpcy5pbml0aWFsaXplZD0hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWQ9ITB9ZGlzYWJsZVBsdWdpbigpe3ZhciBsO251bGw9PT0obD10aGlzLmV2ZW50TWFuYWdlcil8fHZvaWQgMD09PWx8fGwuY2xlYXIoKSx0aGlzLmNsZWFySG9va3MoKSx0aGlzLmVuYWJsZWQ9'@;
put 'ITF9Z2V0U2V0dGluZyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZXTtpZih2b2lkIDA9PT1sKXJldHVybiBhO2NvbnN0IGQ9dGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX1NFVFRJTkdTO3ZhciBoLGY7cmV0dXJuKEFycmF5Lmlz'@;
put 'QXJyYXkoYSl8fFhzKGEpKSYmZFtGNGVdPT09bD9BcnJheS5pc0FycmF5KGEpP2E6bnVsbCE9PShoPWFbbF0pJiZ2b2lkIDAhPT1oP2g6ZFtsXTpYcyhhKSYmbnVsbCE9PShmPWFbbF0pJiZ2b2lkIDAhPT1mP2Y6ZFtsXX1hZGRIb29rKGwsYSxkKXtGXyh1OSx0aGlzKVtsXT1GXyh1OSx0aGlz'@;
put 'KVtsXXx8W107Y29uc3QgaD1GXyh1OSx0aGlzKVtsXTt0aGlzLmhvdC5hZGRIb29rKGwsYSxkKSxoLnB1c2goYSksRl8odTksdGhpcylbbF09aH1yZW1vdmVIb29rcyhsKXtLbihGXyh1OSx0aGlzKVtsXXx8W10sYT0+e3RoaXMuaG90LnJlbW92ZUhvb2sobCxhKX0pfWNsZWFySG9va3MoKXtj'@;
put 'b25zdCBsPUZfKHU5LHRoaXMpO3FzKGwsKGEsZCk9PnRoaXMucmVtb3ZlSG9va3MoZCkpLGwubGVuZ3RoPTB9Y2FsbE9uUGx1Z2luc1JlYWR5KGwpe3RoaXMuaXNQbHVnaW5zUmVhZHk/bCgpOnRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLnB1c2gobCl9b25BZnRlclBsdWdpbnNJ'@;
put 'bml0aWFsaXplZCgpe0tuKHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLGw9PmwoKSksdGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MubGVuZ3RoPTAsdGhpcy5pc1BsdWdpbnNSZWFkeT0hMH1vblVwZGF0ZVNldHRpbmdzKGwpe2NvbnN0IGE9TzRlKEg0ZSx0aGlzLFlv'@;
put 'dCkuY2FsbCh0aGlzLGwpO3RoaXMuaXNFbmFibGVkJiYodGhpcy5lbmFibGVkJiYhdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5kaXNhYmxlUGx1Z2luKCksIXRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFi'@;
put 'bGVkKCkmJmEmJnRoaXMudXBkYXRlUGx1Z2luKGwpKX11cGRhdGVQbHVnaW4oKXt9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD10aGlzLmV2ZW50TWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpLHFzKHRoaXMsKGEsZCk9PnsiaG90IiE9PWQmJih0'@;
put 'aGlzW2RdPW51bGwpfSksZGVsZXRlIHRoaXMudCxkZWxldGUgdGhpcy5ob3R9fWZ1bmN0aW9uIFlvdChjKXtpZighYylyZXR1cm4hMTtjb25zdCBsPXRoaXMuY29uc3RydWN0b3IuU0VUVElOR19LRVlTO2lmKCJib29sZWFuIj09dHlwZW9mIGwpcmV0dXJuIGw7Zm9yKGxldCBhPTA7YTxsLmxl'@;
put 'bmd0aDthKyspaWYodm9pZCAwIT09Y1tsW2FdXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBkOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR290KGMpe3ZhciBsPWZ1bmN0aW9uICRvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz'@;
put 'dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts'@;
put 'XT1hLGN9Y29uc3QgbUo9Y2xhc3MgS290e2NvbnN0cnVjdG9yKGwpe2Q5KHRoaXMsImhvdCIsbnVsbCksZDkodGhpcywiY29udGFpbmVyIixudWxsKSxkOSh0aGlzLCJpbmplY3RlZCIsITEpLGQ5KHRoaXMsInJvd3MiLFtdKSxkOSh0aGlzLCJjb2x1bW5zIixbXSksZDkodGhpcywic2FtcGxl'@;
put 'cyIsbnVsbCksZDkodGhpcywic2V0dGluZ3MiLHt1c2VIZWFkZXJzOiEwfSksdGhpcy5ob3Q9bH1hZGRSb3cobCxhKXtpZih0aGlzLmNvbHVtbnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhpcy5yb3dzLmxlbmd0'@;
put 'aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e3JvdzpsfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUu'@;
put 'Y2xhc3NOYW1lKSx0aGlzLnRhYmxlLmNvbEdyb3VwLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sR3JvdXBzQ29sKGwpKSx0aGlzLnRhYmxlLnRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlUm93KGwpKSwwPT09bCYmRWkodGhpcy50YWJsZS50YWJsZSwiaHRHaG9zdFRhYmxlRmlyc3RSb3ci'@;
put 'KSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWFkZENvbHVtbkhlYWRlcnNSb3cobCl7aWYobnVsbCE9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBkPXtyb3c6LTF9O3RoaXMu'@;
put 'cm93cy5wdXNoKGQpLHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSksdGhpcy5zYW1wbGVzPWwsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xH'@;
put 'cm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLmFwcGVuZENvbHVtbkhlYWRlcnNSb3coKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfX1hZGRDb2x1'@;
put 'bW4obCxhKXtpZih0aGlzLnJvd3MubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhpcy5jb2x1bW5zLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50'@;
put 'LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e2NvbDpsfTt0aGlzLmNvbHVtbnMucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSYmbnVsbCE9PXRoaXMuaG90'@;
put 'LmdldENvbEhlYWRlcihsKSYmdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIobCx0aGlzLnRhYmxlLnRoLHZvaWQgMCwtMSksdGhpcy50YWJsZS50Qm9keS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbChsKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMu'@;
put 'dGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1nZXRIZWlnaHRzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxLbih0aGlzLnJvd3MsYT0+e2NvbnN0e2hlaWdodDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5yb3csTWF0'@;
put 'aC5jZWlsKGQpKX0pfWdldFdpZHRocyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksS24odGhpcy5jb2x1bW5zLGE9Pntjb25zdHt3aWR0aDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5jb2wsTWF0aC5jZWlsKGQpKX0pfXNldFNldHRpbmdzKGwp'@;
put 'e3RoaXMuc2V0dGluZ3M9bH1zZXRTZXR0aW5nKGwsYSl7dGhpcy5zZXR0aW5nc3x8KHRoaXMuc2V0dGluZ3M9e30pLHRoaXMuc2V0dGluZ3NbbF09YX1nZXRTZXR0aW5ncygpe3JldHVybiB0aGlzLnNldHRpbmdzfWdldFNldHRpbmcobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0'@;
put 'aW5nc1tsXTpudWxsfWNyZWF0ZUNvbEdyb3Vwc0NvbChsKXtjb25zdCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmYS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoLTEsLTEp'@;
put 'KSx0aGlzLnNhbXBsZXMuZm9yRWFjaChkPT57S24oZC5zdHJpbmdzLGg9PnthLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudChoLmNvbCxsKSl9KX0pLGF9Y3JlYXRlUm93KGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVu'@;
put 'dCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJih0aGlzLmhvdC52aWV3LmFwcGVuZFJvd0hlYWRlcihsLGgpLGQuYXBwZW5kQ2hpbGQoaCkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGY9PntLbihmLnN0cmluZ3Msdj0+e2NvbnN0IE09'@;
put 'di5jb2wsST10aGlzLmhvdC5nZXRDZWxsTWV0YShsLE0pLEc9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKEkpLHJlPWEuY3JlYXRlRWxlbWVudCgidGQiKTtyZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxHKHRoaXMuaG90LHJlLGwsTSx0aGlzLmhvdC5jb2xUb1Byb3AoTSksdi52'@;
put 'YWx1ZSxJKSxkLmFwcGVuZENoaWxkKHJlKX0pfSksZH1hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1bXTtpZih0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkpe2NvbnN0IGg9bC5jcmVh'@;
put 'dGVFbGVtZW50KCJ0aCIpO2QucHVzaChbLTEsaF0pLGEuYXBwZW5kQ2hpbGQoaCl9dGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e0tuKGguc3RyaW5ncyxmPT57Y29uc3Qgdj1mLmNvbCxNPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goW3YsTV0pLGEuYXBwZW5kQ2hpbGQoTSl9KX0pLHRo'@;
put 'aXMudGFibGUudEhlYWQuYXBwZW5kQ2hpbGQoYSksS24oZCxoPT57Y29uc3RbZix2XT1oO3RoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGYsdil9KX1jcmVhdGVDb2wobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0'@;
put 'dXJuIHRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntLbihoLnN0cmluZ3MsZj0+e2NvbnN0IHY9Zi5yb3csTT10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LGwpLEk9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKE0pLEc9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpLHJlPWEuY3JlYXRlRWxlbWVudCgidHIi'@;
put 'KTtHLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLEkodGhpcy5ob3QsRyx2LGwsdGhpcy5ob3QuY29sVG9Qcm9wKGwpLGYudmFsdWUsTSkscmUuYXBwZW5kQ2hpbGQoRyksZC5hcHBlbmRDaGlsZChyZSl9KX0pLGR9Y2xlYW4oKXt0aGlzLnJvd3MubGVuZ3RoPTAsdGhpcy5yb3dzWy0x'@;
put 'XT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5yZW1vdmVUYWJsZSgpfWluamVjdFRhYmxlKCl7dGhpcy5pbmplY3RlZHx8KCgoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQpLHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYmdGhpcy5jb250YWluZXIuY29udGFpbmVyLnBh'@;
put 'cmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVudChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm9v'@;
put 'dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpO2xldCBoPTA7YT49MCYmbD49MCYmKGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxsKS5jb2xzcGFuKTtsZXQgZj10aGlzLmhvdC5nZXRDb2xXaWR0aChsKTtpZihoPjEpZm9yKGxldCB2PWwrMTt2PGwraDt2KyspZis9dGhpcy5ob3QuZ2V0'@;
put 'Q29sV2lkdGgodik7cmV0dXJuIGQuc3R5bGUud2lkdGg9YCR7Zn1weGAsZH1jcmVhdGVUYWJsZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURv'@;
put 'Y3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSxmPWEuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx2PWEuY3JlYXRlRWxlbWVudCgidGJvZHkiKSxNPWEuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSxJPWEuY3JlYXRlRWxlbWVudCgidHIiKSxHPWEuY3JlYXRlRWxl'@;
put 'bWVudCgidGgiKTtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJmguYXBwZW5kQ2hpbGQoTSksdGhpcy5pc0hvcml6b250YWwoKSYmKEkuYXBwZW5kQ2hpbGQoRyksZi5hcHBlbmRDaGlsZChJKSxoLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixoLnN0eWxlLndpZHRoPSJhdXRvIiksaC5hcHBl'@;
put 'bmRDaGlsZChmKSx0aGlzLmlzVmVydGljYWwoKSYmdi5hcHBlbmRDaGlsZChJKSxoLmFwcGVuZENoaWxkKHYpLEVpKGgsbCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCx0YWJsZTpoLHRIZWFkOmYsdEJvZHk6dixjb2xHcm91cDpNLHRyOkksdGg6R319Y3JlYXRlQ29udGFpbmVyKCl7'@;
put 'bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gRWkoaCxgaHRH'@;
put 'aG9zdFRhYmxlIGh0QXV0b1NpemUgJHtsLnRyaW0oKX1gKSxkLmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLGNvbnRhaW5lcjpofX1pc1ZlcnRpY2FsKCl7cmV0dXJuISghdGhpcy5yb3dzLmxlbmd0aHx8dGhpcy5jb2x1bW5zLmxlbmd0aCl9aXNIb3Jpem9udGFsKCl7cmV0dXJuISghdGhp'@;
put 'cy5jb2x1bW5zLmxlbmd0aHx8dGhpcy5yb3dzLmxlbmd0aCl9fTtmdW5jdGlvbiBpRihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWG90KGMpe3ZhciBsPWZ1bmN0aW9uIHFvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp'@;
put 'dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09'@;
put 'bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xh'@;
put 'c3Mgdkp7c3RhdGljIGdldCBTQU1QTEVfQ09VTlQoKXtyZXR1cm4gM31jb25zdHJ1Y3RvcihsKXtpRih0aGlzLCJzYW1wbGVzIixudWxsKSxpRih0aGlzLCJkYXRhRmFjdG9yeSIsbnVsbCksaUYodGhpcywiY3VzdG9tU2FtcGxlQ291bnQiLG51bGwpLGlGKHRoaXMsImFsbG93RHVwbGljYXRl'@;
put 'cyIsITEpLHRoaXMuZGF0YUZhY3Rvcnk9bH1nZXRTYW1wbGVDb3VudCgpe3JldHVybiB0aGlzLmN1c3RvbVNhbXBsZUNvdW50P3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ6dkouU0FNUExFX0NPVU5UfXNldFNhbXBsZUNvdW50KGwpe3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bH1zZXRBbGxvd0R1'@;
put 'cGxpY2F0ZXMobCl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9bH1nZW5lcmF0ZVJvd1NhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoInJvdyIsYSxsKX1nZW5lcmF0ZUNvbHVtblNhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoImNvbCIsYSxsKX1n'@;
put 'ZW5lcmF0ZVNhbXBsZXMobCxhLGQpe2NvbnN0IGg9bmV3IE1hcCx7ZnJvbTpmLHRvOnZ9PSJudW1iZXIiPT10eXBlb2YgZD97ZnJvbTpkLHRvOmR9OmQ7cmV0dXJuIEthKGYsdixNPT57Y29uc3QgST10aGlzLmdlbmVyYXRlU2FtcGxlKGwsYSxNKTtoLnNldChNLEkpfSksaH1nZW5lcmF0ZVNh'@;
put 'bXBsZShsLGEsZCl7aWYoInJvdyIhPT1sJiYiY29sIiE9PWwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZSIpO2NvbnN0IGg9bmV3IE1hcCxmPSJyb3ciPT09bD8iY29sIjoicm93Iix2PVtdO3JldHVybiBLYShhLmZyb20sYS50byxNPT57Y29uc3QgST0icm93Ij09'@;
put 'PWw/dGhpcy5kYXRhRmFjdG9yeShkLE0pOnRoaXMuZGF0YUZhY3RvcnkoTSxkKTtpZighMT09PUkpcmV0dXJuO2NvbnN0e3ZhbHVlOkcsYnVuZGxlU2VlZDpyZX09SSx1ZT0ic3RyaW5nIj09dHlwZW9mIHJlJiZyZS5sZW5ndGg+MDtsZXQgeWU7eWU9dWU/cmU6WHMoRyk/YCR7T2JqZWN0Lmtl'@;
put 'eXMoRykubGVuZ3RofWA6QXJyYXkuaXNBcnJheShHKT9gJHtHLmxlbmd0aH1gOmAke29jKEcpLmxlbmd0aH1gLGguaGFzKHllKXx8aC5zZXQoeWUse25lZWRlZDp0aGlzLmdldFNhbXBsZUNvdW50KCksc3RyaW5nczpbXX0pO2NvbnN0IEVlPWguZ2V0KHllKTtFZS5uZWVkZWQmJighKHYuaW5k'@;
put 'ZXhPZihHKT4tMSl8fHRoaXMuYWxsb3dEdXBsaWNhdGVzfHx1ZSkmJihFZS5zdHJpbmdzLnB1c2goe3ZhbHVlOkcsW2ZdOk19KSx2LnB1c2goRyksRWUubmVlZGVkLT0xKX0pLGh9fWNvbnN0IE40ZT12SjtmdW5jdGlvbiB5SihjLGwsYSl7VjRlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBW'@;
put 'NGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGZUKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBRb3QoYyl7dmFyIGw9ZnVuY3Rpb24g'@;
put 'ZWx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj'@;
put 'LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZbShjLGwpe3JldHVybiBjLmdldCh6ZChjLGwpKX1mdW5jdGlvbiBhRihjLGwsYSl7cmV0dXJuIGMuc2V0KHpkKGMsbCksYSksYX1mdW5jdGlvbiB6ZChjLGws'@;
put 'YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0'@;
put 'ZXIoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpO2NvbnN0IGJKPSJhdXRvQ29sdW1uU2l6ZSI7dmFyIF9KPW5ldyBXZWFrTWFwLEhfPW5ldyBXZWFrTWFwLE5fPW5ldyBXZWFrTWFwLEZoPW5ldyBXZWFrU2V0O2NsYXNzIHBUIGV4dGVuZHMgRm97c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7'@;
put 'cmV0dXJuIGJKfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxl'@;
put 'RHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBKb3QoYyxsKXtWNGUoYyxsKSxsLmFkZChjKX0odGhp'@;
put 'cyxGaCksZlQodGhpcywiZ2hvc3RUYWJsZSIsbmV3IG1KKHRoaXMuaG90KSksZlQodGhpcywic2FtcGxlc0dlbmVyYXRvciIsbmV3IE40ZSgoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZCk7aWYodGhpcy5ob3Qu'@;
put 'cm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaCl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGYpKXJldHVybiExO2NvbnN0IHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKTtsZXQgTT0iIjt2LnNwYW5uZWR8fChNPXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxkKSk7bGV0'@;
put 'IEk9IiI7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYoST10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixJLHYsTSkpLHt2YWx1ZTpNLGJ1bmRsZVNlZWQ6SX19KSksZlQodGhpcywiaW5Qcm9ncmVzcyIsITEp'@;
put 'LGZUKHRoaXMsIm1lYXN1cmVkQ29sdW1ucyIsMCksZlQodGhpcywiY29sdW1uV2lkdGhzTWFwIixuZXcgam0pLHlKKHRoaXMsX0osITEpLHlKKHRoaXMsSF8sW10pLHlKKHRoaXMsTl8sW10pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIs'@;
put 'dGhpcy5jb2x1bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoYSxkLGgpPT56ZChGaCx0aGlzLHo0ZSkuY2FsbCh0aGlzLGEsZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2JKXSYmIXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKCkuY29sV2lkdGhzfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmdob3N0VGFibGUuc2V0U2V0dGluZygidXNlSGVhZGVycyIsdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikpLHRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRB'@;
put 'bGxvd0R1cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgYT10aGlzLmdldFNldHRpbmcoInNhbXBsaW5nUmF0aW8iKTthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChGaCxsLGFsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZv'@;
put 'cmVDaGFuZ2VSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpkKEZoLGwsc2x0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1'@;
put 'ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpkKEZoLGwsbGx0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsKCk9PnpkKEZo'@;
put 'LHRoaXMsaWx0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoZCxoKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChoLGQpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT56ZChGaCx0aGlzLG9sdCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRl'@;
put 'UGx1Z2luKCl7YUYoTl8sdGhpcyx0aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChsLGEsZCk9Pnpk'@;
put 'KEZoLHRoaXMsejRlKS5jYWxsKHRoaXMsbCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCl7aWYoIXRoaXMuaG90LmNvdW50Um93cygpKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksYT10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7LTEh'@;
put 'PT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmwsdG86YX0sdm9pZCAwLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l'@;
put 'bnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtLYShoLmZyb20saC50byx2PT57bGV0IE09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2KTtudWxs'@;
put 'PT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoTSkpJiZ6ZChGaCx0aGlzLEI0ZSkuY2FsbCh0aGlzLHYsZil9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5n'@;
put 'dGgmJih6ZChGaCx0aGlzLGo0ZSkuY2FsbCh0aGlzKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt'@;
put 'ZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5jb3VudENvbHMoKS0xO2xldCBmPW51bGw7dGhpcy5pblByb2dyZXNzPSEw'@;
put 'O2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIFNFKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrcFQuQ0FMQ1VMQVRJT05fU1RFUCxoKX0sbCxhKSxkPWQrcFQuQ0FMQ1VMQVRJT05fU1RF'@;
put 'UCsxLGQ8aD9mPUNFKHYpOihTRShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOk19LGwsYSks'@;
put 'ZD1NKzEpLGQ8aD92KCk6dGhpcy5pblByb2dyZXNzPSExfXJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7dGhpcy5ob3Qudmlldy5pc1Zpc2libGUoKSYmdGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSwhMCl9Z2V0U3lu'@;
put 'Y0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbYkpdO2xldCBhPXBULlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKS0xO3JldHVybiBYcyhsKSYmKGE9bC5zeW5jTGltaXQsbSQoYSk/YT1RJChkLGEpOmE+'@;
put 'Pj0wKSxNYXRoLm1pbihhLGQpfWdldENvbHVtbldpZHRoKGwsYSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxoPWE7cmV0dXJuIHZvaWQgMD09PWgmJihoPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRl'@;
put 'eCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkJiYibnVtYmVyIj09dHlwZW9mIGgmJihoPU1hdGgubWF4KGgsYl8pKSksaH1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkp'@;
put 'JiZ2b2lkIDAhPT1sP2w6LTF9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PWw/bDotMX1maW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpe3JldHVybiB0'@;
put 'aGlzLmhvdC5nZXRDb2xIZWFkZXIoKS5yZWR1Y2UoKGQsaCxmKT0+e2NvbnN0IHY9WW0oSF8sdGhpcykubGVuZ3RoO3JldHVybih2LTE8Znx8WW0oSF8sdGhpcylbZl0hPT1oKSYmZC5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpKSx2LTE8Zj9ZbShIXyx0aGlzKS5wdXNoKGgpOllt'@;
put 'KEhfLHRoaXMpW2ZdPWgsZH0sW10pfWNsZWFyQ2FjaGUobCl7QXJyYXkuaXNBcnJheShsKT90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFjaChhPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMuY29sdW1uV2lkdGhz'@;
put 'TWFwLmNsZWFyKCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZENvbHVtbnMpLmZpbHRlcihsPT5udWxsPT09bCkubGVuZ3RofWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxz'@;
put 'dXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHJsdChjKXtjb25zdCBsPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX07Yy5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7bnVsbCE9PWQmJih0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0'@;
put 'dGluZ3MoZCl8fHpkKEZoLHRoaXMsQjRlKS5jYWxsKHRoaXMsYSxsKSl9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih6ZChGaCx0aGlzLGo0ZSkuY2FsbCh0aGlzKSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9ZnVuY3Rpb24gQjRlKGMsbCl7dGhpcy5zYW1wbGVzR2VuZXJh'@;
put 'dG9yLmdlbmVyYXRlQ29sdW1uU2FtcGxlcyhjLGwpLmZvckVhY2goKGQsaCk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW4oaCxkKSl9ZnVuY3Rpb24gajRlKCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0V2lkdGhzKChjLGwpPT57Y29uc3QgYT10'@;
put 'aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLGwpfSl9LCEwKX1mdW5jdGlvbiBpbHQoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKSx0aGlzLmluUHJvZ3Jlc3N8fCh6ZChGaCx0aGlzLHJsdCkuY2Fs'@;
put 'bCh0aGlzLFltKE5fLHRoaXMpKSxhRihOXyx0aGlzLFtdKSl9ZnVuY3Rpb24gYWx0KGMsbCl7bHx8dGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfWZ1bmN0aW9uIHNsdChjKXtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57bGV0WyxoXT1kO2NvbnN0IGY9dGhpcy5ob3QucHJvcFRv'@;
put 'Q29sKGgpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGYpJiYtMT09PWEuaW5kZXhPZihmKSYmYS5wdXNoKGYpLGF9LFtdKTtZbShOXyx0aGlzKS5wdXNoKC4uLmwpfWZ1bmN0aW9uIHo0ZShjLGwsYSl7bGV0IGQ9YztyZXR1cm4gYSYmKHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKGwsdm9p'@;
put 'ZCAwLCEwKSxkPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCx2b2lkIDAsITEpKSxkfWZ1bmN0aW9uIG9sdCgpe2FGKEhfLHRoaXMsdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkpLHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKSxhRihfSix0aGlzLCEwKX1mdW5jdGlvbiBsbHQoYyl7aWYo'@;
put 'IVltKF9KLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6aC5jb2w7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKTst'@;
put 'MT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7WW0oTl8sdGhpcykucHVzaCguLi5sKX1jb25zdCBoOT17aG9yaXpvbnRhbDoiaG9yaXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07ZnVuY3Rpb24gVl8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZsdChjKXt2'@;
put 'YXIgbD1mdW5jdGlvbiBwbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGdUKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6'@;
put 'YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1NYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVBdXRvZmlsbCIp'@;
put 'LE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7Y29uc3QgbWx0PVsiZmlsbEhhbmRsZSJdO3ZhciBCXz1uZXcgV2Vha1NldDtjbGFzcyBibHQgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZGx0KGMsbCl7KGZ1'@;
put 'bmN0aW9uIGhsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEJfKSxWXyh0aGlzLCJhZGRpbmdTdGFydGVkIiwh'@;
put 'MSksVl8odGhpcywibW91c2VEb3duT25DZWxsQ29ybmVyIiwhMSksVl8odGhpcywibW91c2VEcmFnT3V0c2lkZSIsITEpLFZfKHRoaXMsImhhbmRsZURyYWdnZWRDZWxscyIsMCksVl8odGhpcywiZGlyZWN0aW9ucyIsW10pLFZfKHRoaXMsImF1dG9JbnNlcnRSb3ciLCExKX1zdGF0aWMgZ2V0'@;
put 'IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuWyJhdXRvZmlsbCIsLi4ubWx0XX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5m'@;
put 'aWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+Z1QoQl8sdGhpcyx3bHQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRI'@;
put 'b29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT5nVChCXyx0aGlzLF9sdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsKGwsYSk9PmdUKEJfLHRoaXMsQ2x0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRh'@;
put 'dGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyTWFwcGVkU2V0dGluZ3MoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0U2VsZWN0aW9uRGF0YSgpe2NvbnN0IGw9'@;
put 'dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7cm93OmEsY29sOmR9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmgsY29sOmZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsW3tzdGFydFJvdzphLHN0YXJ0'@;
put 'Q29sOmQsZW5kUm93OmgsZW5kQ29sOmZ9XSksTT1bXSxJPVtdLEc9W107cmV0dXJuIEtuKHYscmU9Pntmb3IobGV0IHVlPXJlLnN0YXJ0Um93O3VlPD1yZS5lbmRSb3c7dWUrPTEpLTE9PT1NLmluZGV4T2YodWUpJiZNLnB1c2godWUpO2ZvcihsZXQgdWU9cmUuc3RhcnRDb2w7dWU8PXJlLmVu'@;
put 'ZENvbDt1ZSs9MSktMT09PUkuaW5kZXhPZih1ZSkmJkkucHVzaCh1ZSl9KSxLbihNLHJlPT57Y29uc3QgdWU9W107S24oSSx5ZT0+e3VlLnB1c2godGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKHJlLHllKSl9KSxHLnB1c2godWUpfSksR31maWxsSW4oKXtpZih0aGlzLmhvdC5zZWxlY3Rpb24u'@;
put 'aGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3RbbCxhLGQsaF09dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWYuZ2V0VG9wU3RhcnRDb3Ju'@;
put 'ZXIoKSxNPWYuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dGhpcy5yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKTtjb25zdCBJPVt2LnJvdyx2LmNvbCxNLnJvdyxNLmNvbF0sRz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsW01hdGgubWluKHYucm93LGwpLE1hdGgu'@;
put 'bWluKHYuY29sLGEpLE1hdGgubWF4KE0ucm93LGQpLE1hdGgubWF4KE0uY29sLGgpXSxJKSx7ZGlyZWN0aW9uT2ZEcmFnOnJlLHN0YXJ0T2ZEcmFnQ29vcmRzOnVlLGVuZE9mRHJhZ0Nvb3Jkczp5ZX09ZnVuY3Rpb24gY2x0KGMsbCxhKXtsZXQgZCxoLGY7cmV0dXJuIGxbMF09PT1jWzBdJiZs'@;
put 'WzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNbMV0tMSkpOmxbMl09PT1jWzJdJiZsWzBdPT09Y1swXSYmbFszXT5jWzNdPyhmPSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxjWzBdJiZsWzFdPT09Y1sxXT8oZj0idXAiLGQ9'@;
put 'YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsxXT09PWNbMV0mJihmPSJkb3duIixkPWEoY1syXSsxLGxbMV0pLGg9YShsWzJdLGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpmLHN0YXJ0T2ZEcmFnQ29v'@;
put 'cmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShJLEcsKEVlLEJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRWUsQmUpKTtpZih1ZSYmdWUucm93Pi0xJiZ1ZS5jb2w+LTEpe2NvbnN0IEVlPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLEJlPWYuY2xvbmUoKSxHZT10aGlzLmhvdC5fY3Jl'@;
put 'YXRlQ2VsbFJhbmdlKHVlLHVlLHllKSxzdD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLEVlLEJlLEdlLHJlKTtpZighMT09PXN0KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBw'@;
put 'dD1zdDtjb25zdCBkdD1zdDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YocmUpPi0xJiYoMSE9PWR0Lmxlbmd0aHx8MCE9PWR0WzBdLmxlbmd0aCkpaWYocHQ9W10sInVwIj09PXJlKXtjb25zdCBxdD15ZS5yb3ctdWUucm93KzEsbW49cXQlZHQubGVuZ3RoO2ZvcihsZXQgd249MDt3bjxxdDt3'@;
put 'bisrKXB0LnB1c2goZHRbKHduKyhkdC5sZW5ndGgtbW4pKSVkdC5sZW5ndGhdKX1lbHNle2NvbnN0IHF0PXllLmNvbC11ZS5jb2wrMSxtbj1xdCVkdFswXS5sZW5ndGg7Zm9yKGxldCB3bj0wO3duPGR0Lmxlbmd0aDt3bisrKXtwdC5wdXNoKFtdKTtmb3IobGV0IGhuPTA7aG48cXQ7aG4rKylw'@;
put 'dFt3bl0ucHVzaChkdFt3bl1bKGhuKyhkdFt3bl0ubGVuZ3RoLW1uKSklZHRbd25dLmxlbmd0aF0pfX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh1ZS5yb3csdWUuY29sLHB0LHllLnJvdyx5ZS5jb2wsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCxudWxsKSx0aGlzLnNldFNlbGVjdGlv'@;
put 'bihHKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBdXRvZmlsbCIscHQsQmUsR2UscmUpLHRoaXMuaG90LnJlbmRlcigpfWVsc2UgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtyZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQobCl7cmV0dXJuIGwucm93PDAmJihsLnJvdz0wKSxs'@;
put 'LmNvbDwwJiYobC5jb2w9MCksbH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBoPWw7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5LnZlcnRpY2Fs'@;
put 'KSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5Lmhvcml6b250YWwpKXtjb25zdCBmPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKTsoZC5jb2w8PWwuY29sfHxmLmNvbD49bC5jb2wpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCkpLChkLnJvdzxsLnJvd3x8Zi5y'@;
put 'b3c+bC5yb3cpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNvbCkpfWVsc2UgaWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5LnZlcnRpY2FsKSloPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlv'@;
put 'bnMuaW5jbHVkZXMoaDkuaG9yaXpvbnRhbCkpcmV0dXJuO2g9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpfXJldHVybiB0aGlzLnJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChoKX1zaG93Qm9yZGVyKGwpe2NvbnN0IGE9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmRE'@;
put 'cm9wQm9yZGVycyhsKTthJiZ0aGlzLnJlZHJhd0JvcmRlcnMoYSl9YWRkUm93KCl7dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0'@;
put 'ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgp'@;
put 'LGE9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bFsyXTxkLTEmJmFbMl09PT1kLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRSb3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNl'@;
put 'bnRGaWxsZWRJblJvdyhsKXtjb25zdCBhPXRoaXMuaG90LmdldERhdGEoKSxkPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBoO2ZvcihsZXQgZj1sWzJdKzE7ZjxkO2YrKyl7Zm9yKGxldCBJPWxbMV07STw9bFszXTtJKyspaWYoIWpjKGFbZl1bSV0pKXJldHVybi0xO2NvbnN0IE09YVtmXVts'@;
put 'WzNdKzFdOyghamMoYVtmXVtsWzFdLTFdKXx8IWpjKE0pKSYmKGg9Zil9cmV0dXJuIGh9YWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90Ll9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKGxbMF0sbFsxXSkpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLGxbM10pKS5jb21taXQoKX1zZXRTZWxlY3Rpb24obCl7dGhpcy5ob3Quc2VsZWN0Q2VsbCguLi55byhsLGE9Pk1hdGgubWF4KGEsMCkpLCExLCExKX1zZWxlY3RBZGphY2VudCgpe2NvbnN0'@;
put 'IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKTtyZXR1cm4tMSE9PWEmJnZvaWQgMCE9PWEmJih0aGlzLmFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKSwhMCl9cmVzZXRT'@;
put 'ZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpfXJlZHJhd0JvcmRlcnMobCl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQo'@;
put 'dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mcm9tKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS50bykuYWRkKGwpLmNvbW1pdCgpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGwpe2NvbnN0e2RvY3VtZW50RWxl'@;
put 'bWVudDphfT10aGlzLmhvdC5yb290RG9jdW1lbnQsZD1qMCh0aGlzLmhvdC50YWJsZSkudG9wLSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0fHxhLnNjcm9sbFRvcCkrU3UodGhpcy5ob3QudGFibGUpLGg9ajAodGhpcy5ob3QudGFibGUpLmxlZnQtKHRoaXMuaG90LnJvb3RXaW5k'@;
put 'b3cucGFnZVhPZmZzZXR8fGEuc2Nyb2xsTGVmdCkraXUodGhpcy5ob3QudGFibGUpO3JldHVybiBsLmNsaWVudFk+ZCYmbC5jbGllbnRYPD1ofXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5h'@;
put 'ZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5nVChCXyx0aGlzLFNsdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmdUKEJfLHRoaXMsTWx0KS5jYWxsKHRoaXMsYSkpfWNsZWFyTWFwcGVkU2V0dGluZ3MoKXt0'@;
put 'aGlzLmRpcmVjdGlvbnMubGVuZ3RoPTAsdGhpcy5hdXRvSW5zZXJ0Um93PSExfW1hcFNldHRpbmdzKCl7Y29uc3QgbD1mdW5jdGlvbiB1bHQoYyl7Y29uc3QgbD17fTtyZXR1cm4hMD09PWM/KGwuZGlyZWN0aW9ucz1PYmplY3Qua2V5cyhoOSksbC5hdXRvSW5zZXJ0Um93PSEwKTpYcyhjKT8o'@;
put 'bC5hdXRvSW5zZXJ0Um93PSEhSGEoYy5hdXRvSW5zZXJ0Um93KSYmYy5kaXJlY3Rpb24hPT1oOS5ob3Jpem9udGFsJiZjLmF1dG9JbnNlcnRSb3csbC5kaXJlY3Rpb25zPUhhKGMuZGlyZWN0aW9uKT9bYy5kaXJlY3Rpb25dOk9iamVjdC5rZXlzKGg5KSk6InN0cmluZyI9PXR5cGVvZiBjPyhs'@;
put 'LmRpcmVjdGlvbnM9W2NdLGwuYXV0b0luc2VydFJvdz0hMCk6KGwuZGlyZWN0aW9ucz1bXSxsLmF1dG9JbnNlcnRSb3c9ITEpLGx9KHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZSk7dGhpcy5kaXJlY3Rpb25zPWwuZGlyZWN0aW9ucyx0aGlzLmF1dG9JbnNlcnRSb3c9bC5hdXRv'@;
put 'SW5zZXJ0Um93fWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIF9sdCgpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1mdW5jdGlvbiB3bHQoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0xLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSEwfWZ1bmN0'@;
put 'aW9uIENsdChjKXt0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lciYmIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscys9MSx0aGlzLnNob3dCb3JkZXIoYyksdGhpcy5hZGROZXdSb3dJZk5lZWRlZCgp'@;
put 'KX1mdW5jdGlvbiBTbHQoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjEmJnRoaXMuZmlsbEluKCksdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMSl9ZnVuY3Rpb24gTWx0KGMpe2NvbnN0IGw9'@;
put 'dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUoYyk7ITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJmw/KHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITApOnRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0'@;
put 'aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhpcy5hZGRSb3coKX1mdW5jdGlvbiBaNGUoYyxsLGEpe1c0ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVzRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUg'@;
put 'dGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRWx0KGMpe3ZhciBsPWZ1bmN0aW9uIFRsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz'@;
put 'dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts'@;
put 'XT1hLGN9ZnVuY3Rpb24gWTRlKGMsbCxhKXtyZXR1cm4gYy5zZXQoQnAoYyxsKSxhKSxhfWZ1bmN0aW9uIHNGKGMsbCl7cmV0dXJuIGMuZ2V0KEJwKGMsbCkpfWZ1bmN0aW9uIEJwKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRz'@;
put 'Lmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB3Sj0iYXV0b1Jvd1NpemUiO3ZhciBtVD1uZXcgV2Vha01hcCxDSj1uZXcgV2Vha01hcCxrZz1uZXcgV2Vha1NldDtjbGFzcyB2VCBl'@;
put 'eHRlbmRzIEZve3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB3Sn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA0MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJz'@;
put 'OiEwLHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0'@;
put 'aW9uIHhsdChjLGwpe1c0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGtnKSxqXyh0aGlzLCJoZWFkZXJIZWlnaHQiLG51bGwpLGpfKHRoaXMsImdob3N0VGFibGUiLG5ldyBtSih0aGlzLmhvdCkpLGpfKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5ldyBONGUoKGEsZCk9Pntjb25zdCBoPXRoaXMu'@;
put 'aG90LnRvUGh5c2ljYWxSb3coYSksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKGgpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmKXx8YT49MCYmZD49MCYmdGhpcy5ob3QuZ2V0Q2VsbE1ldGEo'@;
put 'YSxkKS5oaWRkZW4pcmV0dXJuITE7bGV0IHY7cmV0dXJuIGE+PTA/dj10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCk6LTE9PT1hJiYodj10aGlzLmhvdC5nZXRDb2xIZWFkZXIoZCkpLHt2YWx1ZTp2fX0pKSxqXyh0aGlzLCJpblByb2dyZXNzIiwhMSksal8odGhpcywibWVhc3VyZWRSb3dz'@;
put 'IiwwKSxqXyh0aGlzLCJyb3dIZWlnaHRzTWFwIixuZXcgam0pLFo0ZSh0aGlzLG1ULFtdKSxaNGUodGhpcyxDSiwhMSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Sb3dTaXplIix0aGlzLnJvd0hlaWdodHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVz'@;
put 'aXplIiwoYSxkLGgpPT5CcChrZyx0aGlzLEc0ZSkuY2FsbCh0aGlzLGEsZCxoKSl9aXNFbmFibGVkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3dKXTtyZXR1cm4hMD09PWx8fFhzKGwpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0'@;
put 'aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGE9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2Ft'@;
put 'cGxlQ291bnQocGFyc2VJbnQoYSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQnAoa2csbCxSbHQpLmNhbGwobCwu'@;
put 'Li5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBCcChrZyxsLExsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5h'@;
put 'ZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8'@;
put 'ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEJwKGtnLGwsUGx0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsKCk9PkJwKGtnLHRoaXMsSWx0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGQsaCk9PnRoaXMuZ2V0'@;
put 'Um93SGVpZ2h0KGgsZCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PkJwKGtnLHRoaXMsT2x0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsKCk9PnRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRp'@;
put 'c2FibGVQbHVnaW4oKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGwsYSxkKT0+QnAoa2csdGhpcyxHNGUpLmNhbGwodGhpcyxsLGEsZCkpfWNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCl7aWYo'@;
put 'IXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksYT10aGlzLmdldExhc3RWaXNpYmxlUm93KCk7LTEhPT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpsLHRvOmF9LHZvaWQgMCx0aGlzLmhvdC5mb3Jj'@;
put 'ZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZVJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVt'@;
put 'YmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO2lmKG51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0IHY9dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcygtMSxmKTt0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uSGVhZGVyc1Jvdyh2LmdldCgt'@;
put 'MSkpfUthKGguZnJvbSxoLnRvLHY9PntsZXQgTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpO251bGw9PT1NJiYoTT12KSwoZHx8bnVsbD09PXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKHYs'@;
put 'ZikuZm9yRWFjaCgoRyxyZSk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3cocmUsRykpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygodixNKT0+e3Y8MD90aGlzLmhlYWRlckhlaWdo'@;
put 'dD1NOnRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxNKX0pfSwhMCksdGhpcy5tZWFzdXJlZFJvd3M9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRz'@;
put 'Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9MDtjb25zdCBoPXRoaXMuaG90LmNvdW50'@;
put 'Um93cygpLTE7bGV0IGY9bnVsbDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3Qgdj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gU0UoZiksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrdlQuQ0FMQ1VMQVRJT05f'@;
put 'U1RFUCxoKX0sbCxhKSxkPWQrdlQuQ0FMQ1VMQVRJT05fU1RFUCsxLGQ8aD9mPUNFKHYpOihTRShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1'@;
put 'bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzpNfSxsLGEpLGQ9TSsxKSxkPGg/digpOih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9cmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7dGhpcy5ob3Qudmlldy5pc1Zpc2libGUoKSYmdGhpcy5j'@;
put 'YWxjdWxhdGVBbGxSb3dzSGVpZ2h0KHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3dKXTtsZXQgYT12VC5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhp'@;
put 'cy5ob3QuY291bnRSb3dzKCktMTtyZXR1cm4gWHMobCkmJihhPWwuc3luY0xpbWl0LG0kKGEpP2E9USQoZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRSb3dIZWlnaHQobCxhKXtjb25zdCBkPWw8MD90aGlzLmhlYWRlckhlaWdodDp0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdElu'@;
put 'ZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpO2xldCBoPWE7cmV0dXJuIG51bGwhPT1kJiZkPihhfHwwKSYmKGg9ZCksaH1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWFkZXJIZWlnaHR9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7dmFyIGw7cmV0dXJuIG51bGwhPT0o'@;
put 'bD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9pZCAwIT09bD9sOi0xfWdldExhc3RWaXNpYmxlUm93KCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCkpJiZ2b2lkIDAhPT1sP2w6LTF9Y2xlYXJDYWNo'@;
put 'ZShsKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLEFycmF5LmlzQXJyYXkobCk/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goYT0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5yb3dIZWlnaHRzTWFwLmNsZWFyKCl9'@;
put 'Y2xlYXJDYWNoZUJ5UmFuZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9Omw7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntLYShNYXRoLm1pbihhLGQpLE1hdGgubWF4KGEsZCksaD0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1'@;
put 'ZUF0SW5kZXgoaCxudWxsKX0pfSwhMCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3VyZWRSb3dzKS5maWx0ZXIobD0+bnVsbD09PWwpLmxlbmd0aH1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNs'@;
put 'ZWFuKCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBEbHQoYyl7Y29uc3QgbD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9O2MuZm9yRWFjaChhPT57dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhhLGwpLmZvckVhY2goKGgsZik9PnRoaXMuZ2hv'@;
put 'c3RUYWJsZS5hZGRSb3coZixoKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpO3RoaXMucm93SGVpZ2h0'@;
put 'c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxkKX0pfSwhMCksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIElsdCgpe3RoaXMuY2FsY3VsYXRlVmlzaWJsZVJvd3NIZWlnaHQoKSx0aGlzLmluUHJvZ3Jlc3N8fChCcChrZyx0aGlzLERsdCkuY2FsbCh0aGlzLHNGKG1ULHRoaXMpKSxZ'@;
put 'NGUobVQsdGhpcyxbXSkpfWZ1bmN0aW9uIEc0ZShjLGwsYSl7bGV0IGQ9YztyZXR1cm4gYSYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodChsLHZvaWQgMCwhMCksZD10aGlzLmdldFJvd0hlaWdodChsKSksZH1mdW5jdGlvbiBSbHQoYyxsKXtsfHx0aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hl'@;
put 'aWdodCgpfWZ1bmN0aW9uIExsdChjKXtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57bGV0W2hdPWQ7cmV0dXJuLTE9PT1hLmluZGV4T2YoaCkmJmEucHVzaChoKSxhfSxbXSk7c0YobVQsdGhpcykucHVzaCguLi5sKX1mdW5jdGlvbiBPbHQoKXt0aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdo'@;
put 'dCgpLFk0ZShDSix0aGlzLCEwKX1mdW5jdGlvbiBQbHQoYyl7aWYoIXNGKENKLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6aC5yb3c7aWYoTnVtYmVyLmlzSW50ZWdlcihm'@;
put 'KSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbFJvdyhmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7c0YobVQsdGhpcykucHVzaCguLi5sKX1jb25zdCAkNGU9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6'@;
put 'SEssZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6WEV9XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkJLLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmpLfV1dKSxLNGU9Yz0+e2lmKCExPT09JDRlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0'@;
put 'cmF0ZWd5IHdpdGggSUQgJyR7Y30nIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiAkNGUuZ2V0KGMpfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkZsdCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpIbHR9PUs0ZSgicGh5c2ljYWxseUluZGV4ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0'@;
put 'ZW1zOkJsdCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpqbHR9PUs0ZSgicGh5c2ljYWxseUluZGV4ZWQiKTtjb25zdCBYNGU9ImJpbmRSb3dzV2l0aEhlYWRlcnMiLHE0ZT1uZXcgTWFwKFtbImxvb3NlIixjbGFzcyBObHQgZXh0ZW5kcyBRN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWlu'@;
put 'c2VydChsLGEpe2NvbnN0IGQ9VksodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1GbHQoZCxsLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7Y29uc3QgYT1IbHQodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcz1OSyhhLGwpLHN1cGVyLnJlbW92ZShsKX19XSxbInN0cmljdCIsY2xhc3Mgemx0IGV4dGVuZHMgUTd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9Qmx0KHRoaXMuaW5kZXhlZFZhbHVlcyxsLGEsKGQsaCk9PnRoaXMuZ2V0'@;
put 'TmV4dFZhbHVlKGgpKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWpsdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksc3VwZXIucmVtb3ZlKGwpfWdldE5leHRWYWx1ZShsKXtyZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5nZXRWYWx1ZXMoKSkrMStsfX1dXSk7'@;
put 'dmFyIEo0ZT1uZXcgV2Vha1NldDtjbGFzcyBKbHQgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gWmx0KGMsbCl7KGZ1bmN0aW9uIFdsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo'@;
put 'ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEo0ZSksZnVuY3Rpb24gWWx0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBHbHQoYyl7dmFyIGw9ZnVuY3Rpb24gJGx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwh'@;
put 'YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy'@;
put 'aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1'@;
put 'cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiaGVhZGVySW5kZXhlcyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFg0ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5n'@;
put 'ZXRTZXR0aW5ncygpW1g0ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPW51bGwhPT0obD1xNGUuZ2V0KHRoaXMuZ2V0U2V0dGluZygpKSkmJnZvaWQgMCE9PWw/bDpxNGUuZ2V0KCJsb29zZSIpO3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhv'@;
put 'dC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIsbmV3IGEpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixkPT5mdW5jdGlvbiBLbHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVu'@;
put 'dHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShKNGUsdGhpcyxRbHQpLmNhbGwodGhpcyxkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0lu'@;
put 'ZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gUWx0KGMpe3JldHVybiB0aGlzLmhlYWRlckluZGV4ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRv'@;
put 'UGh5c2ljYWxSb3coYykpfWZ1bmN0aW9uIFE0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZWdlKGMsbCxhKXtyZXR1cm4obD1mdW5j'@;
put 'dGlvbiBuY3QoYyl7dmFyIGw9ZnVuY3Rpb24gcmN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQp'@;
put 'cmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlp'@;
put 'biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB0Z2UoYyxsKXtyZXR1cm4gYy5nZXQoel8oYyxsKSl9ZnVuY3Rpb24gU0ooYyxsLGEpe3JldHVybiBjLnNldCh6'@;
put 'XyhjLGwpLGEpLGF9ZnVuY3Rpb24gel8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVj'@;
put 'dCIpfWNvbnN0IG9GPSJjb2xsYXBzaWJsZUNvbHVtbnMiLGFjdD1bIm5lc3RlZEhlYWRlcnMiXSxVXz0iY29sbGFwc2libGVJbmRpY2F0b3IiLG5nZT1vRixyZ2U9bmV3IE1hcChbWyJjb2xsYXBzZSIse2hpZGVDb2x1bW46ITAsYmVmb3JlSG9vazoiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLGFm'@;
put 'dGVySG9vazoiYWZ0ZXJDb2x1bW5Db2xsYXBzZSJ9XSxbImV4cGFuZCIse2hpZGVDb2x1bW46ITEsYmVmb3JlSG9vazoiYmVmb3JlQ29sdW1uRXhwYW5kIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uRXhwYW5kIn1dXSk7dmFyIFpfPW5ldyBXZWFrTWFwLHlUPW5ldyBXZWFrU2V0O2NsYXNzIHNj'@;
put 'dCBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBlY3QoYyxsKXtRNGUoYyxsKSxsLmFkZChjKX0odGhpcyx5VCksZWdlKHRoaXMsIm5lc3RlZEhlYWRlcnNQbHVnaW4iLG51bGwpLGVnZSh0aGlzLCJoZWFkZXJTdGF0ZU1hbmFnZXIiLG51bGwp'@;
put 'LGZ1bmN0aW9uIHRjdChjLGwsYSl7UTRlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxaXyxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gb0Z9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjkwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBs'@;
put 'dWdpbjpOZXN0ZWRIZWFkZXJzIl19c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bb0YsLi4uYWN0XX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbb0ZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25z'@;
put 'dHtuZXN0ZWRIZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7YXx8WW8oIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGluIG9yZGVyIHRvIHVzZSBjb2xsYXBzaWJsZSBoZWFkZXJzLiIpLFNKKFpfLHRoaXMsdGhpcy5ob3QuY29sdW1uSW5k'@;
put 'ZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsImhpZGluZyIpKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJuZXN0ZWRIZWFkZXJzIiksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXI9dGhpcy5uZXN0ZWRIZWFkZXJz'@;
put 'UGx1Z2luLmdldFN0YXRlTWFuYWdlcigpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnpfKHlULHRoaXMsY2N0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8'@;
put 'ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpfKHlULGwsdWN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJn'@;
put 'dW1lbnRzW2ZdO3JldHVybiB6Xyh5VCxsLG9jdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChkLGgsZik9PnpfKHlULHRoaXMsbGN0KS5jYWxsKHRoaXMsZCxoLGYpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1'@;
put 'Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZih0aGlzLmhvdC52aWV3KXtpZighdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMpe2NvbnN0e2NvbGxhcHNpYmxlQ29sdW1uczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygp'@;
put 'OyJib29sZWFuIj09dHlwZW9mIGw/dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoYT0+KHtjb2xsYXBzaWJsZTphLm9yaWdDb2xzcGFuPjF9KSk6QXJyYXkuaXNBcnJheShsKSYmKHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcFN0YXRlKCgpPT4oe2NvbGxhcHNpYmxlOiExfSkp'@;
put 'LHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1lcmdlU3RhdGVXaXRoKGwpKX1zdXBlci51cGRhdGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxTSihaXyx0aGlzLG51bGwpLHRoaXMubmVz'@;
put 'dGVkSGVhZGVyc1BsdWdpbj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJCdXR0b25zKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNo'@;
put 'b3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dmFyIGw7Y29uc3R7cm93OmEsY29sOmR9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LHtjb2xsYXBzaWJsZTpoLGlzQ29sbGFwc2VkOmYsY29sdW1uSW5kZXg6dn09bnVsbCE9PShsPXRoaXMu'@;
put 'aGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGQpKSYmdm9pZCAwIT09bD9sOnt9O2lmKGgpcmV0dXJuIGY/dGhpcy5leHBhbmRTZWN0aW9uKHtyb3c6YSxjb2w6dn0pOnRoaXMuY29sbGFwc2VTZWN0aW9uKHtyb3c6YSxjb2w6dn0pLCExfSxydW5Pbmx5SWY6KCk9'@;
put 'Pnt2YXIgbCxhO3JldHVybihudWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNTaW5nbGUoKSkmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGlnaGxp'@;
put 'Z2h0LmlzSGVhZGVyKCkpfSxncm91cDpuZ2UscmVsYXRpdmVUb0dyb3VwOnptLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG5nZSl9'@;
put 'Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlz'@;
put 'LnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhF'@;
put 'QUQ6bnVsbCxmPWZ1bmN0aW9uKHYpe3YmJnYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KX07S2EoMCxsLTEsdj0+e2NvbnN0IE09YS5jaGlsZE5vZGVzW3ZdLEk9ZC5jaGlsZE5vZGVzW3ZdLEc9aD9oLmNoaWxkTm9kZXNbdl06bnVsbDtLYSgwLE0uY2hpbGROb2Rlcy5sZW5ndGgtMSxyZT0+'@;
put 'e2xldCB1ZT1NLmNoaWxkTm9kZXNbcmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApO2YodWUpLEkmJkkuY2hpbGROb2Rlc1tyZV0mJih1ZT1JLmNoaWxkTm9kZXNbcmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApLGYodWUpKSxoJiZHJiZHLmNoaWxkTm9kZXNbcmVdJiYodWU9Ry5jaGlsZE5v'@;
put 'ZGVzW3JlXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKSxmKHVlKSl9KX0pfWV4cGFuZFNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBz'@;
put 'ZSIpfXRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMobCl7Y29uc3QgYT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBOb2RlcyhkPT57Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGhlYWRlckxldmVsOnYsY29sdW1uSW5kZXg6TSxpc0NvbGxhcHNlZDpJfT1kO2lmKCEw'@;
put 'PT09aCYmZj4xJiYoSSYmImV4cGFuZCI9PT1sfHwhSSYmImNvbGxhcHNlIj09PWwpKXJldHVybntyb3c6dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubGV2ZWxUb1Jvd0Nvb3Jkcyh2KSxjb2w6TX19KTt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihhLGwpfWNvbGxhcHNlQWxsKCl7dGhp'@;
put 'cy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGwsYSl7aWYoIXJnZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1'@;
put 'cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2F9KS5gKTtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm47Y29uc3QgZD1BbShsLEVlPT57bGV0e3JvdzpCZX09RWU7cmV0dXJuIEJlPDB9KTtsZXQgaD1kLmxlbmd0aD4wO0tuKGQsRWU9Pnt2YXIgQmU7bGV0e3JvdzpHZSxjb2w6c3R9PUVl'@;
put 'O2NvbnN0e2NvbGxhcHNpYmxlOnB0LGlzQ29sbGFwc2VkOmR0fT1udWxsIT09KEJlPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKEdlLHN0KSkmJnZvaWQgMCE9PUJlP0JlOnt9O2lmKCFwdHx8ZHQmJiJjb2xsYXBzZSI9PT1hfHwhZHQmJiJleHBhbmQiPT09YSly'@;
put 'ZXR1cm4gaD0hMSwhMX0pO2NvbnN0IGY9W10sdj1bXTtoJiZLbihkLEVlPT57bGV0e3JvdzpCZSxjb2w6R2V9PUVlO2NvbnN0e2NvbHNwYW5Db21wZW5zYXRpb246c3QsYWZmZWN0ZWRDb2x1bW5zOnB0LHJvbGxiYWNrTW9kaWZpY2F0aW9uOmR0fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50'@;
put 'cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhLEJlLEdlKTtzdD4wJiYodi5wdXNoKC4uLnB0KSxmLnB1c2goZHQpKX0pO2NvbnN0IE09dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCk7bGV0IEk9W107ImNvbGxhcHNlIj09PWE/ST1UMmUoWy4uLk0sLi4udl0pOiJleHBhbmQiPT09YSYmKEk9QW0o'@;
put 'TSxFZT0+IXYuaW5jbHVkZXMoRWUpKSk7Y29uc3QgRz1yZ2UuZ2V0KGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoRy5iZWZvcmVIb29rLE0sSSxoKSlyZXR1cm4gdm9pZCBLbihmLEVlPT57RWUoKX0pO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57S24odixFZT0+e3RnZShaXyx0'@;
put 'aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihFZSksRy5oaWRlQ29sdW1uKX0pfSwhMCk7Y29uc3QgdWU9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCkubGVuZ3RoIT09TS5sZW5ndGgseWU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigi'@;
put 'Y29sbGFwc2UiPT09YSYmdWUmJnllKXtjb25zdHtyb3c6RWUsY29sOkJlfT15ZS5oaWdobGlnaHQ7aWYoKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKEVlKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oQmUpKSYmdi5pbmNsdWRlcyhCZSkpe2NvbnN0IHN0'@;
put 'PUVlPj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFZSwxLCEwKTpFZSxwdD1CZT49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQmUsMSwhMCk6QmU7bnVsbCE9PXN0JiZudWxsIT09cHQmJnRo'@;
put 'aXMuaG90LnNlbGVjdENlbGwoc3QscHQpfX10aGlzLmhvdC5ydW5Ib29rcyhHLmFmdGVySG9vayxNLEksaCx1ZSksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX1nZXRDb2xsYXBzZWRDb2x1bW5zKCl7cmV0dXJuIHRnZShaXyx0aGlzKS5nZXRI'@;
put 'aWRkZW5JbmRleGVzKCl9ZGVzdHJveSgpe1NKKFpfLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBvY3QoYyxsLGEpe3ZhciBkO2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46Zixpc0NvbGxhcHNlZDp2fT1udWxsIT09KGQ9dGhpcy5oZWFkZXJTdGF0ZU1hbmFn'@;
put 'ZXIuZ2V0SGVhZGVyU2V0dGluZ3MoYSxjKSkmJnZvaWQgMCE9PWQ/ZDp7fSxNPWgmJmY+MSYmYz49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxJPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bGV0IEc9bC5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKTt2'@;
put 'YXIgcmU7QjcobCxbQjIoIiIpWzBdXSksTT8oR3x8KEc9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEVpKEcsVV8pLGwucXVlcnlTZWxlY3RvcigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQoRykpLGhzKEcsWyJjb2xsYXBzZWQiLCJleHBhbmRlZCJd'@;
put 'KSx2PyhFaShHLCJjb2xsYXBzZWQiKSxMbShHLCIrIiksSSYmbXMobCwuLi5CMighMSkpKTooRWkoRywiZXhwYW5kZWQiKSxMbShHLCItIiksSSYmbXMobCwuLi5CMighMCkpKSxJJiZtcyhHLC4uLk43KCkpKTpudWxsPT09KHJlPUcpfHx2b2lkIDA9PT1yZXx8cmUucmVtb3ZlKCl9ZnVuY3Rp'@;
put 'b24gbGN0KGMsbCl7Z3MoYy50YXJnZXQsVV8pJiYoZ3MoYy50YXJnZXQsImV4cGFuZGVkIik/KHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChjLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKSk6Z3MoYy50YXJnZXQsImNv'@;
put 'bGxhcHNlZCIpJiYodGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGMudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKSksejIoYykpfWZ1bmN0aW9uIGNjdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gdWN0KGMsbCl7'@;
put 'bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBmOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZGN0KGMpe3ZhciBsPWZ1bmN0aW9uIGhjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9'@;
put 'PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVy'@;
put 'KShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgZmN0PVsic29ydEVt'@;
put 'cHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Il07Y2xhc3MgdmN0e2NvbnN0cnVjdG9yKGwsYSl7ZjkodGhpcywiaG90Iix2b2lkIDApLGY5KHRoaXMsInNvcnRpbmdTdGF0ZXMiLG5ldyB5UCksZjkodGhpcywic29ydEVtcHR5Q2Vs'@;
put 'bHMiLCExKSxmOSh0aGlzLCJpbmRpY2F0b3IiLCEwKSxmOSh0aGlzLCJoZWFkZXJBY3Rpb24iLCEwKSxmOSh0aGlzLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Iix2b2lkIDApLGY5KHRoaXMsIm1hcE5hbWUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm1hcE5hbWU9YSx0aGlzLmhvdC5jb2x1'@;
put 'bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChhLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCl7WHMobCkmJnFzKGwsKGEsZCk9PntmY3QuaW5jbHVkZXMoZCkmJih0aGlzW2RdPWEpfSl9Z2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKXtjb25zdCBsPXtz'@;
put 'b3J0RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rpb246dGhpcy5oZWFkZXJBY3Rpb259O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkmJihsLmNvbXBhcmVGdW5jdGlvbkZh'@;
put 'Y3Rvcnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSxsfWdldFNvcnRPcmRlck9mQ29sdW1uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl8fHZvaWQgMD09PWE/dm9p'@;
put 'ZCAwOmEuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKXtyZXR1cm4gbD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkuZmluZEluZGV4KGE9PntsZXRbZF09YTtyZXR1cm4gZD09PWx9KX1nZXROdW1iZXJP'@;
put 'ZlNvcnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpfWlzQ29sdW1uU29ydGVkKGwpe3JldHVybiBYcyh0aGlzLnNvcnRp'@;
put 'bmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKX1nZXRTb3J0U3RhdGVzKCl7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoYT0+e2xldFtkLGhdPWE7cmV0dXJu'@;
put 'e2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSwuLi5ofX0pfWdldENvbHVtblNvcnRTdGF0ZShsKXtjb25zdCBhPXRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoSGEoYSkpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRlcjphfX1zZXRTb3J0U3RhdGVzKGwpe3RoaXMuc29y'@;
put 'dGluZ1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obFthXS5jb2x1bW4pLHtzb3J0T3JkZXI6bFthXS5zb3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5o'@;
put 'b3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1udWxsfX1mdW5jdGlvbiBpZ2UoYyxsLGEpe2NvbnN0IGQ9bC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGgsZil7Y29uc3R7c29ydEVtcHR5Q2VsbHM6dn09YTtyZXR1cm4i'@;
put 'c3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb2NhbGVMb3dlckNhc2UoZCkpLCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi50b0xvY2FsZUxvd2VyQ2FzZShkKSksaD09PWY/anA6amMoaCk/amMoZik/anA6diYmImFzYyI9PT1jP1pjOldjOmpjKGYpP3YmJiJhc2MiPT09Yz9XYzpaYzppc05h'@;
put 'TihoKSYmIWlzTmFOKGYpPyJhc2MiPT09Yz9XYzpaYzohaXNOYU4oaCkmJmlzTmFOKGYpfHwoaXNOYU4oaCl8fGlzTmFOKGYpfHwoaD1wYXJzZUZsb2F0KGgpLGY9cGFyc2VGbG9hdChmKSksaDxmKT8iYXNjIj09PWM/WmM6V2M6aD5mPyJhc2MiPT09Yz9XYzpaYzpqcH19Y29uc3R7cmVnaXN0'@;
put 'ZXI6YlQsZ2V0SXRlbTpzZ2UsaGFzSXRlbTpFY3R9PVUyKCJzb3J0aW5nLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiKSx7cmVnaXN0ZXI6b2dlLGdldEl0ZW06VGN0fT1VMigic29ydGluZy5tYWluU29ydENvbXBhcmF0b3IiKTtmdW5jdGlvbiBsZ2UoYyl7cmV0dXJuIEVjdChjKT9zZ2UoYyk6'@;
put 'c2dlKCJkZWZhdWx0Iil9YlQoImNoZWNrYm94IixmdW5jdGlvbiBfY3QoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVtcGxhdGUsaD1sLnVuY2hlY2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbih2LE0pe2NvbnN0IEk9amModiksRz1qYyhNKSxyZT1J'@;
put 'P2g6dix1ZT1HP2g6TSx5ZT1yZT09PWh8fHJlPT09ZCxFZT11ZT09PWh8fHVlPT09ZDtpZighMT09PWYpe2lmKEkmJiExPT09RylyZXR1cm4gV2M7aWYoITE9PT1JJiZHKXJldHVybiBaY31yZXR1cm4hMT09PXllJiZFZT8iYXNjIj09PWM/WmM6V2M6eWUmJiExPT09RWU/ImFzYyI9PT1jP1dj'@;
put 'OlpjOiExPT09eWUmJiExPT09RWU/aWdlKGMsbCxhKSh2LE0pOnJlPT09aCYmdWU9PT1kPyJhc2MiPT09Yz9aYzpXYzpyZT09PWQmJnVlPT09aD8iYXNjIj09PWM/V2M6WmM6anB9fSksYlQoImRhdGUiLGZ1bmN0aW9uIENjdChjLGwsYSl7cmV0dXJuIGZnZShjLGwuZGF0ZUZvcm1hdCxhKX0p'@;
put 'LGJUKCJkZWZhdWx0IixpZ2UpLGJUKCJudW1lcmljIixmdW5jdGlvbiB5Y3QoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0IGY9cGFyc2VGbG9hdChkKSx2PXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOk19PWE7aWYoZj09PXZ8fGlzTmFOKGYpJiZpc05hTih2KSlyZXR1'@;
put 'cm4ganA7aWYoTSl7aWYoamMoZCkpcmV0dXJuImFzYyI9PT1jP1pjOldjO2lmKGpjKGgpKXJldHVybiJhc2MiPT09Yz9XYzpaY31yZXR1cm4gaXNOYU4oZik/V2M6aXNOYU4odik/WmM6Zjx2PyJhc2MiPT09Yz9aYzpXYzpmPnY/ImFzYyI9PT1jP1djOlpjOmpwfX0pLGJUKCJ0aW1lIixmdW5j'@;
put 'dGlvbiBNY3QoYyxsLGEpe3JldHVybiBmZ2UoYyxsLnRpbWVGb3JtYXQsYSl9KTtjb25zdCBqcD0wLFpjPS0xLFdjPTEsbEY9ImFzYyIsY0Y9ImRlc2MiLGNnZT0iY29sSGVhZGVyIjtmdW5jdGlvbiB1Z2UoYyl7aWYoYyE9PWNGKXJldHVybiBjPT09bEY/Y0Y6bEZ9ZnVuY3Rpb24gZGdlKGMp'@;
put 'e3JldHVybiBjLnF1ZXJ5U2VsZWN0b3IoYC4ke2NnZX1gKX1mdW5jdGlvbiBoZ2UoYyxsKXtpZihjPDB8fCFsLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT1sLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO3JldHVybiBBcnJheS5mcm9tKGEpLmluZGV4T2YobC5wYXJlbnRO'@;
put 'b2RlKS1hLmxlbmd0aD09LTF9ZnVuY3Rpb24gTUooYyxsLGEpe3JldHVybi0xPT09YyYmbD49MCYmITE9PT1QbShhKX1mdW5jdGlvbiBmZ2UoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOmZ9PWE7aWYoZD09PWgpcmV0dXJuIGpwO2lmKGpjKGQpKXJl'@;
put 'dHVybiBqYyhoKT9qcDpmJiYiYXNjIj09PWM/WmM6V2M7aWYoamMoaCkpcmV0dXJuIGYmJiJhc2MiPT09Yz9XYzpaYztjb25zdCB2PVBzKGQsbCksTT1QcyhoLGwpO3JldHVybiB2LmlzVmFsaWQoKT9NLmlzVmFsaWQoKT9NLmlzQWZ0ZXIodik/ImFzYyI9PT1jP1pjOldjOk0uaXNCZWZvcmUo'@;
put 'dik/ImFzYyI9PT1jP1djOlpjOmpwOlpjOldjfX1jb25zdCBwZ2U9ImluZGljYXRvckRpc2FibGVkIixnZ2U9ImNvbHVtblNvcnRpbmciLG1nZT0ic29ydEFjdGlvbiIsdmdlPW5ldyBNYXAoW1tsRiwiYXNjZW5kaW5nIl0sW2NGLCJkZXNjZW5kaW5nIl1dKTtmdW5jdGlvbiB1RihjLGwsYSl7'@;
put 'cmV0dXJuKGw9ZnVuY3Rpb24gVmN0KGMpe3ZhciBsPWZ1bmN0aW9uIEJjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs'@;
put 'P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gV18oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl'@;
put 'dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGRGPSJjb2x1bW5Tb3J0aW5nIixoRj0iYXBwZW5kIix5Z2U9ZEY7b2dlKGRGLGZ1bmN0aW9uIEZjdChjLGwp'@;
put 'e3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24oTSl7Y29uc3QgST1jWzBdLEc9bFswXSxyZT1oWzBdLHVlPWZbMF0seWU9Ry5jb2x1bW5Tb3J0aW5nO3JldHVybih5ZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P3llLmNvbXBhcmVG'@;
put 'dW5jdGlvbkZhY3Rvcnk6bGdlKEcudHlwZSkpKEksRyx5ZSkocmUsdWUpfSgpfX0pLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Tb3J0IiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29ydCIpO2NvbnN0IF9UPW5ldyBXZWFrTWFwO3Zh'@;
put 'ciBwOT1uZXcgV2Vha1NldDtjbGFzcyBiZ2UgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gSGN0KGMsbCl7KGZ1bmN0aW9uIE5jdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz'@;
put 'YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHA5KSx1Rih0aGlzLCJjb2x1bW5TdGF0ZXNNYW5hZ2VyIixudWxsKSx1Rih0aGlzLCJjb2x1bW5NZXRhQ2FjaGUiLG51bGwpLHVGKHRoaXMsInBsdWdpbktleSIsZEYpLHVGKHRo'@;
put 'aXMsImluZGV4ZXNTZXF1ZW5jZUNhY2hlIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZEZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1l'@;
put 'bmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKF9ULmhhcyh0aGlzLmhvdCkmJl9ULmdldCh0aGlzLmhvdCkhPT10aGlzLnBsdWdpbktleSlyZXR1cm4gdGhpcy5ob3QudXBkYXRlU2V0dGluZ3Moe1t0aGlzLnBsdWdpbktleV06ITF9KSx2b2lkIGZ1bmN0aW9uIEljdChjLGwpe1lvKGhsYFBs'@;
put 'dWdpbnMgXGBjb2x1bW5Tb3J0aW5nXGAgYW5kIFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHNpbXVsdGFuZW91c2x5Llx4MjAKICAgIE9ubHkgXGAke2N9XGAgd2lsbCB3b3JrLiBUaGUgXGAke2x9XGAgcGx1Z2luIHdpbGwgcmVtYWluIGRpc2FibGVkLmAp'@;
put 'fShfVC5nZXQodGhpcy5ob3QpLHRoaXMucGx1Z2luS2V5KTt0aGlzLmVuYWJsZWR8fChfVC5zZXQodGhpcy5ob3QsdGhpcy5wbHVnaW5LZXkpLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgdmN0KHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5j'@;
put 'b2x1bW5NZXRhQ2FjaGU9bmV3IGptKGE9PntsZXQgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQmJihkPWEpLHRoaXMuZ2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBs'@;
put 'dWdpbktleX0uY29sdW1uTWV0YWAsdGhpcy5jb2x1bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT5XXyhwOSx0aGlzLFVjdCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zv'@;
put 'cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBXXyhwOSxsLFdjdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsKGEsZCk9PnRoaXMub25BZnRlck9uQ2Vs'@;
put 'bE1vdXNlRG93bihhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PldfKHA5LHRoaXMseEopLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr'@;
put 'KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gV18ocDksbCxaY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuaG90LnZpZXcmJldfKHA5LHRoaXMseEopLmNhbGwodGhpcyksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7Y29uc3Qg'@;
put 'bD0oYSxkKT0+e2NvbnN0IGg9ZGdlKGQpOyExPT09aGdlKGEsZCl8fG51bGw9PT1ofHx0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoaCl9O19ULmRlbGV0ZSh0aGlzLmhvdCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRl'@;
put 'clZpZXdSZW5kZXIiLCgpPT57dGhpcy5ob3QucmVtb3ZlSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwpfSksdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntudWxsIT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1'@;
put 'ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5KSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPW51bGwpfSwhMCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5y'@;
put 'ZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWApLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5kZXN0cm95KCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBl'@;
put 'ci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2Vs'@;
put 'ZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4gdGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhsLmNvbCkpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDps'@;
put 'LmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJi0xPT09ZC5yb3cmJmQuY29sPj0wfSxyZWxhdGl2'@;
put 'ZVRvR3JvdXA6em0scG9zaXRpb246ImJlZm9yZSIsZ3JvdXA6eWdlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHlnZSl9c29ydChsKXtjb25zdCBhPXRoaXMuZ2V0'@;
put 'U29ydENvbmZpZygpLGQ9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCksaD10aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoZCk7ITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uU29ydCIsYSxkLGgpJiYoMD09PWEubGVuZ3RoJiZudWxsPT09dGhpcy5pbmRleGVzU2Vx'@;
put 'dWVuY2VDYWNoZSYmKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXksbmV3IEgzZSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5zZXRWYWx1ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5k'@;
put 'ZXhlc1NlcXVlbmNlKCkpKSxoJiYodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoZCksdGhpcy5zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGQpLHRoaXMuc2F2ZUFsbFNvcnRTZXR0aW5ncyhkKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uU29ydCIsYSxoP2Q6'@;
put 'YSxoKSxoJiZ0aGlzLmhvdC5yZW5kZXIoKSl9Y2xlYXJTb3J0KCl7dGhpcy5zb3J0KFtdKX1pc1NvcnRlZCgpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBI'@;
put 'YShsKT90aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0Q29sdW1uU29ydFN0YXRlKGwpOnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVzKCl9c2V0U29ydENvbmZpZyhsKXtjb25zdCBhPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGwpO3RoaXMuYXJlVmFsaWRT'@;
put 'b3J0Q29uZmlncyhhKSYmdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoYSl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0Fy'@;
put 'cmF5KGwpP2wuc2xpY2UoMCwxKTpbbF19YXJlVmFsaWRTb3J0Q29uZmlncyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiBmdW5jdGlvbiBEY3QoYyl7aWYoYy5zb21lKGE9PiExPT09ZnVuY3Rpb24ga2N0KGMpe2lmKCExPT09WHMoYykpcmV0dXJuITE7Y29uc3R7Y29s'@;
put 'dW1uOmwsc29ydE9yZGVyOmF9PWM7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobCkmJltsRixjRl0uaW5jbHVkZXMoYSl9KGEpKSlyZXR1cm4hMTtjb25zdCBsPWMubWFwKGE9PntsZXR7Y29sdW1uOmR9PWE7cmV0dXJuIGR9KTtyZXR1cm4gbmV3IFNldChsKS5zaXplPT09bC5sZW5ndGh9KGwp'@;
put 'JiZsLmV2ZXJ5KGQ9PntsZXR7Y29sdW1uOmh9PWQ7cmV0dXJuIGg8PWEmJmg+PTB9KX1zYXZlQWxsU29ydFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCk7YS5pbml0aWFsQ29uZmlnPXlvKGwsaD0+e2xldHtjb2x1'@;
put 'bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKSwuLi52fX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiY29sdW1uU29ydGluZyIsYSl9Z2V0QWxsU2F2ZWRTb3J0U2V0dGluZ3MoKXtjb25zdCBsPXt9O3RoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwiY29sdW1uU29ydGluZyIsbCk7Y29uc3QgYT1sLnZhbHVlO3JldHVybiBIYShhKSYmQXJyYXkuaXNBcnJheShhLmluaXRpYWxDb25maWcpJiYoYS5pbml0aWFsQ29uZmlnPXlvKGEuaW5pdGlhbENvbmZpZyxoPT57bGV0e2NvbHVt'@;
put 'bjpmLC4uLnZ9PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSwuLi52fX0pKSxhfWdldENvbHVtbk5leHRDb25maWcobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoSGEoYSkpe2NvbnN0IGg9dWdl'@;
put 'KGEpO3JldHVybiBIYShoKT97Y29sdW1uOmwsc29ydE9yZGVyOmh9OnZvaWQgMH1jb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpO2lmKE51bWJlci5pc0ludGVnZXIobCkmJmw+PTAmJmw8ZClyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOnVnZSgpfX1nZXROZXh0U29ydENvbmZpZyhsKXts'@;
put 'ZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aEY7Y29uc3QgZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpLGg9LTEhPT1kLGY9dGhpcy5nZXRTb3J0Q29uZmlnKCksdj10aGlz'@;
put 'LmdldENvbHVtbk5leHRDb25maWcobCk7aWYoaCl7aWYoYmModikpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSldO2lmKGE9PT1oRilyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKSx2XTtpZigicmVwbGFjZSI9PT1hKXJldHVyblsuLi5mLnNsaWNl'@;
put 'KDAsZCksdiwuLi5mLnNsaWNlKGQrMSldfXJldHVybiBIYSh2KT9mLmNvbmNhdCh2KTpmfWdldFBsdWdpbkNvbHVtbkNvbmZpZyhsKXtpZihYcyhsKSl7Y29uc3QgYT1sW3RoaXMucGx1Z2luS2V5XTtpZihYcyhhKSlyZXR1cm4gYX1yZXR1cm57fX1nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhs'@;
put 'KXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldLGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCksaD10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGY9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpO3JldHVybiBB'@;
put 'cnJheS5pc0FycmF5KGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zW2xdKSk6ZmwoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnMobCkpKTpPYmplY3Qu'@;
put 'YXNzaWduKGQsYSl9Z2V0Rmlyc3RDZWxsU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGQ9T2JqZWN0LmNyZWF0ZShhKTtyZXR1cm4gZFt0aGlzLnBsdWdpbktleV09dGhpcy5jb2x1bW5NZXRhQ2FjaGUuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5'@;
put 'c2ljYWxDb2x1bW4obCkpLGR9Z2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gYS5tYXhSb3dzPD1sP2EubWF4Um93czpsLWEubWluU3BhcmVSb3dzfXNvcnRCeVByZXNldFNvcnRTdGF0ZXMobCl7aWYodGhpcy5ob3Qucm93SW5k'@;
put 'ZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLDA9PT1sLmxlbmd0aClyZXR1cm47Y29uc3QgYT1bXSxkPXRoaXMuaG90LmNvdW50Um93cygpLGg9Rz0+eW8obCxyZT0+dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChHLHJlLmNv'@;
put 'bHVtbikpO2ZvcihsZXQgRz0wO0c8dGhpcy5nZXROdW1iZXJPZlJvd3NUb1NvcnQoZCk7Rys9MSlhLnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coRyldLmNvbmNhdChoKEcpKSk7Y29uc3QgZj15byhhLEc9PkdbMF0pOyFmdW5jdGlvbiBBY3QoYyxsKXtjb25zdCBhPVRjdChsKTtmb3Io'@;
put 'dmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkPjI/ZC0yOjApLGY9MjtmPGQ7ZisrKWhbZi0yXT1hcmd1bWVudHNbZl07Yy5zb3J0KGEoLi4uaCkpfShhLHRoaXMucGx1Z2luS2V5LHlvKGwsRz0+Ry5zb3J0T3JkZXIpLHlvKGwsRz0+dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5n'@;
put 'cyhHLmNvbHVtbikpKTtmb3IobGV0IEc9YS5sZW5ndGg7RzxkO0crPTEpYS5wdXNoKFtHXS5jb25jYXQoaChHKSkpO2NvbnN0IHY9eW8oYSxHPT5HWzBdKSxNPW5ldyBNYXAoeW8oZiwoRyxyZSk9PltHLHZbcmVdXSkpLEk9eW8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1Nl'@;
put 'cXVlbmNlKCksRz0+TS5oYXMoRyk/TS5nZXQoRyk6Ryk7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKEkpfXNvcnRCeVNldHRpbmdzKGwpe2lmKFhzKGwpKXt0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCk7Y29u'@;
put 'c3QgYT1sLmluaXRpYWxDb25maWc7KEFycmF5LmlzQXJyYXkoYSl8fFhzKGEpKSYmdGhpcy5zb3J0KGEpfWVsc2UgdGhpcy5ob3QucmVuZGVyKCl9dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtpZihocyhsLGZ1bmN0aW9uIFBjdCgpe3JldHVybiBBcnJheS5mcm9tKHZnZS52YWx1ZXMoKSkuY29u'@;
put 'Y2F0KG1nZSxwZ2UsZ2dlKX0oKSksITEhPT10aGlzLmVuYWJsZWQpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtFaShsLGZ1bmN0aW9uIE9jdChjLGwsYSxkKXtjb25zdCBoPVtnZ2VdO2lm'@;
put 'KGQmJmgucHVzaChtZ2UpLCExPT09YSlyZXR1cm4gaC5wdXNoKHBnZSksaDtjb25zdCBmPWMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7cmV0dXJuIEhhKGYpJiZoLnB1c2godmdlLmdldChmKSksaH0oLi4uZCkpfX1vblVwZGF0ZVNldHRpbmdzKGwpe3N1cGVyLm9uVXBkYXRlU2V0dGluZ3Mo'@;
put 'bCksbnVsbCE9PXRoaXMuY29sdW1uTWV0YUNhY2hlJiZ0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKSxIYShsW3RoaXMucGx1Z2luS2V5XSkmJnRoaXMuc29ydEJ5U2V0dGluZ3MobFt0aGlzLnBsdWdpbktl'@;
put 'eV0pfXdhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhKXtyZXR1cm4gdGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhhKVt0aGlzLnBsdWdpbktleV0uaGVhZGVyQWN0aW9uJiZncyhsLnRhcmdldCxjZ2UpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXtpZighMSE9PU1KKGEucm93LGEu'@;
put 'Y29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYmKHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpKTtjb25zdCBkPXRoaXMu'@;
put 'aG90LmdldEFjdGl2ZUVkaXRvcigpLGg9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKTtudWxsIT1kJiZkLmlzT3BlbmVkKCkmJnRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IoZC5yb3csZC5jb2wpP3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsKCk9Pnt0'@;
put 'aGlzLnNvcnQoaCl9KTp0aGlzLnNvcnQoaCl9fWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB4Sigpe2NvbnN0IGM9dGhpcy5nZXRBbGxTYXZlZFNvcnRT'@;
put 'ZXR0aW5ncygpO2lmKFhzKGMpKXRoaXMuc29ydEJ5U2V0dGluZ3MoYyk7ZWxzZXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MobCl9fWZ1bmN0aW9uIFVjdChjLGwpe2NvbnN0IGE9ZGdlKGwpO2lmKCExPT09aGdlKGMs'@;
put 'bCl8fG51bGw9PT1hKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYylbdGhpcy5wbHVnaW5LZXldO2lmKHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhhLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcixjLGQuaW5kaWNhdG9yLGQuaGVhZGVyQWN0aW9uKSx0aGlzLmhv'@;
put 'dC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCB2PXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihjKTttcyhsLC4uLihjPT5bImFyaWEtc29ydCIsY10pKHY/YCR7dn1lbmRpbmdgOiJub25lIikpfX1mdW5jdGlvbiBaY3QoYyl7ITA9PT1jJiZ0aGlz'@;
put 'LmhvdC52aWV3JiZXXyhwOSx0aGlzLHhKKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFdjdChjLGwsYSxkKXshMSE9PU1KKGwucm93LGwuY29sLGMpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoYyxsLmNvbCkmJnRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNz'@;
put 'ZWQoKSYmKGQuY29sdW1uPSEwKX1mdW5jdGlvbiBnOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWWN0KGMpe3ZhciBsPWZ1bmN0aW9uIEdjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj'@;
put 'KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgS2N0PWNsYXNzICRjdHtj'@;
put 'b25zdHJ1Y3RvcihsLGEpe2c5KHRoaXMsInBsdWdpbiIsdm9pZCAwKSxnOSh0aGlzLCJob3QiLHZvaWQgMCksZzkodGhpcywiZW5kcG9pbnRzIixbXSksZzkodGhpcywic2V0dGluZ3MiLHZvaWQgMCksZzkodGhpcywic2V0dGluZ3NUeXBlIiwiYXJyYXkiKSxnOSh0aGlzLCJjdXJyZW50RW5k'@;
put 'cG9pbnQiLG51bGwpLGc5KHRoaXMsImNlbGxzVG9TZXRDYWNoZSIsW10pLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuc2V0dGluZ3M9YX1pbml0RW5kcG9pbnRzKCl7dGhpcy5lbmRwb2ludHM9dGhpcy5wYXJzZVNldHRpbmdzKCksdGhpcy5yZWZyZXNoQWxs'@;
put 'RW5kcG9pbnRzKCl9Z2V0RW5kcG9pbnQobCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbbF06dGhpcy5lbmRwb2ludHNbbF19Z2V0QWxsRW5kcG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09'@;
put 'PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdFbmRwb2ludERhdGEobCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhsLmNhbGwodGhpcykpfXBhcnNlU2V0dGluZ3MobCl7Y29u'@;
put 'c3QgYT1bXTtsZXQgZD1sO2lmKGR8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiBkfHwoZD10aGlzLnNldHRpbmdzKSxLbihkLGg9Pntjb25zdCBmPXt9O3RoaXMuYXNzaWduU2V0dGluZyhoLGYsInJhbmdlcyIsW1swLHRoaXMuaG90LmNvdW50Um93cygpLTFdXSks'@;
put 'dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmV2ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvblJvdyIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5'@;
put 'IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uQ29sdW1uIixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1'@;
put 'bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic291cmNlQ29sdW1uIixoLmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJ0eXBlIiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5n'@;
put 'KGgsZiwiZm9yY2VOdW1lcmljIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZWFkT25seSIsITApLHRoaXMu'@;
put 'YXNzaWduU2V0dGluZyhoLGYsInJvdW5kRmxvYXQiLCExKSxhLnB1c2goZil9KSxhO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGluZyhsLGEsZCxoKXtpZigicmFuZ2VzIiE9PWR8fHZvaWQgMCE9PWxbZF0pe2lmKCJyYW5nZXMiIT09ZHx8MCE9PWxbZF0ubGVuZ3Ro'@;
put 'KWlmKHZvaWQgMD09PWxbZF0pe2lmKGggaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoO2FbZF09aH1lbHNlIGFbZF09ImRlc3RpbmF0aW9uUm93Ij09PWQmJmEucmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktbFtkXS0xOmxbZF19ZWxzZSBhW2RdPWh9cmVzZXRTZXR1cEJl'@;
put 'Zm9yZVN0cnVjdHVyZUFsdGVyYXRpb24obCxhLGQpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaD1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLGY9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtLbihmLHY9Pnsicm93Ij09PWgmJnYuZGVzdGlu'@;
put 'YXRpb25Sb3c+PWEmJigiaW5zZXJ0X3JvdyI9PT1sP3YuYWx0ZXJSb3dPZmZzZXQ9ZDoicmVtb3ZlX3JvdyI9PT1sJiYodi5hbHRlclJvd09mZnNldD0tMSpkKSksImNvbCI9PT1oJiZ2LmRlc3RpbmF0aW9uQ29sdW1uPj1hJiYoImluc2VydF9jb2wiPT09bD92LmFsdGVyQ29sdW1uT2Zmc2V0'@;
put 'PWQ6InJlbW92ZV9jb2wiPT09bCYmKHYuYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqZCkpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhmLCExKX1yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkLGgsZil7bGV0IHY9IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFy'@;
put 'Z3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IHllPSgpPT4odGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlVmlld1JlbmRlciIseWUpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhv'@;
put 'dC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIseWUpfWNvbnN0IE09bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixJPWwuaW5kZXhPZigicmVtb3ZlIik+LTE/LTE6MSxHPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCkscmU9MD09PWwuaW5kZXhPZigibW92ZV9yb3ciKSx1ZT1h'@;
put 'O0tuKEcseWU9Pnsicm93Ij09PU0mJnllLmRlc3RpbmF0aW9uUm93Pj11ZSYmKHllLmFsdGVyUm93T2Zmc2V0PUkqZCksImNvbCI9PT1NJiZ5ZS5kZXN0aW5hdGlvbkNvbHVtbj49dWUmJih5ZS5hbHRlckNvbHVtbk9mZnNldD1JKmQpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhHLCFyZSks'@;
put 'S24oRyxyZT95ZT0+e3RoaXMuZXh0ZW5kRW5kcG9pbnRSYW5nZXMoeWUsdWUsaFswXSxoLmxlbmd0aCksdGhpcy5yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKHllKSx0aGlzLmNsZWFyT2Zmc2V0SW5mb3JtYXRpb24oeWUpfTp5ZT0+e3RoaXMuc2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKHllLHVl'@;
put 'KX0pLHYmJnRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWNsZWFyT2Zmc2V0SW5mb3JtYXRpb24obCl7bC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9ZXh0ZW5kRW5kcG9pbnRSYW5nZXMobCxhLGQsaCl7S24obC5yYW5nZXMsZj0+e2ZbMV0mJihh'@;
put 'Pj1mWzBdJiZhPD1mWzFdP2Q+ZlsxXT9mWzFdKz1oOmQ8ZlswXSYmKGZbMF0tPWgpOmQ+PWZbMF0mJmQ8PWZbMV0mJihmWzFdLT1oLGE8PWZbMF0mJihmWzBdKz0xLGZbMV0rPTEpKSl9KX1yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKGwpe2NvbnN0IGQ9W10saD1bXTtLbihsLnJhbmdlcyxmPT57'@;
put 'Y29uc3Qgdj1bXTtpZihmWzFdKWZvcihsZXQgTT1mWzBdO008PWZbMV07TSsrKXYucHVzaCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KE0pKTtlbHNlIHYucHVzaCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGZbMF0pKTtoLnB1c2godil9KSxLbihoLGY9PntsZXQgdj1bXTtLbihmLChNLEkpPT57'@;
put 'MD09PUk/di5wdXNoKE0pOmZbSV0hPT1mW0ktMV0rMSYmKHYucHVzaChmW0ktMV0pLGQucHVzaCh2KSx2PVtdLHYucHVzaChNKSksST09PWYubGVuZ3RoLTEmJih2LnB1c2goTSksZC5wdXNoKHYpKX0pfSksbC5yYW5nZXM9ZH1zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMobCxhKXtsLmFsdGVy'@;
put 'Um93T2Zmc2V0JiYwIT09bC5hbHRlclJvd09mZnNldD8obC5kZXN0aW5hdGlvblJvdys9bC5hbHRlclJvd09mZnNldHx8MCxLbihsLnJhbmdlcyxkPT57S24oZCwoaCxmKT0+e2g+PWEmJihkW2ZdKz1sLmFsdGVyUm93T2Zmc2V0fHwwKX0pfSkpOmwuYWx0ZXJDb2x1bW5PZmZzZXQmJjAhPT1s'@;
put 'LmFsdGVyQ29sdW1uT2Zmc2V0JiYobC5kZXN0aW5hdGlvbkNvbHVtbis9bC5hbHRlckNvbHVtbk9mZnNldHx8MCxsLnNvdXJjZUNvbHVtbis9bC5hbHRlckNvbHVtbk9mZnNldHx8MCl9cmVzZXRBbGxFbmRwb2ludHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07bC5zb21lKGg9Pntjb25zdCB2PWguYWx0ZXJDb2x1bW5PZmZzZXR8fDA7cmV0dXJuIGguZGVzdGluYXRp'@;
put 'b25Sb3crKGguYWx0ZXJSb3dPZmZzZXR8fDApPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8aC5kZXN0aW5hdGlvbkNvbHVtbit2Pj10aGlzLmhvdC5jb3VudENvbHMoKX0pfHwodGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sS24obCxoPT57dGhpcy5yZXNldEVuZHBvaW50VmFsdWUoaCxhKX0pLHRo'@;
put 'aXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSl9cmVmcmVzaEFsbEVuZHBvaW50cygpe3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLEtuKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksbD0+'@;
put 'e3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsLCJpbml0Iil9KSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1h'@;
put 'cnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNoQ2hhbmdlZEVuZHBvaW50cyhsKXtjb25zdCBhPVtdO3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLEtuKGwsKGQsaCxmKT0+e2Ake2RbMl18fCIifWAhPWAke2RbM119YCYmS24odGhpcy5nZXRBbGxFbmRwb2ludHMoKSwo'@;
put 'dixNKT0+e3RoaXMuaG90LnByb3BUb0NvbChmW2hdWzFdKT09PXYuc291cmNlQ29sdW1uJiYtMT09PWEuaW5kZXhPZihNKSYmYS5wdXNoKE0pfSl9KSxLbihhLGQ9Pnt0aGlzLnJlZnJlc2hFbmRwb2ludCh0aGlzLmdldEVuZHBvaW50KGQpKX0pLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhp'@;
put 'cy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNoQ2VsbE1ldGFzKCl7dGhpcy5lbmRwb2ludHMuZm9yRWFjaChsPT57Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxs'@;
put 'IT09YSl7Y29uc3QgZD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGwuZGVzdGluYXRpb25Db2x1bW4pO2QucmVhZE9ubHk9bC5yZWFkT25seSxkLmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCJ9fSl9cmVmcmVzaEVuZHBvaW50KGwpe3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5w'@;
put 'bHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsKSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfXJlc2V0RW5kcG9pbnRWYWx1ZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGg9'@;
put 'bC5hbHRlckNvbHVtbk9mZnNldHx8MDt0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFt0aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KyhhJiZsLmFsdGVyUm93T2Zmc2V0fHwwKSksdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obC5kZXN0aW5hdGlvbkNvbHVtbisoYT9oOjAp'@;
put 'KSwiIl0pfXNldEVuZHBvaW50VmFsdWUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobC5kZXN0aW5hdGlvblJvdz49dGhpcy5o'@;
put 'b3QuY291bnRSb3dzKCl8fGwuZGVzdGluYXRpb25Db2x1bW4+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybiB2b2lkIHRoaXMudGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1mKXtjb25z'@;
put 'dCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGYsbC5kZXN0aW5hdGlvbkNvbHVtbik7KCJpbml0Ij09PWF8fHYucmVhZE9ubHkhPT1sLnJlYWRPbmx5KSYmKHYucmVhZE9ubHk9bC5yZWFkT25seSx2LmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCIpfWlmKCghMD09PWwucm91bmRGbG9h'@;
put 'dHx8TnVtYmVyLmlzSW50ZWdlcihsLnJvdW5kRmxvYXQpKSYmIWlzTmFOKGwucmVzdWx0KSl7Y29uc3Qgdj1sLnJvdW5kRmxvYXQ7bGV0IE09MDtOdW1iZXIuaXNJbnRlZ2VyKHYpJiYoTT1NYXRoLm1pbihNYXRoLm1heCgwLHYpLDEwMCkpLGwucmVzdWx0PWwucmVzdWx0LnRvRml4ZWQoTSl9'@;
put 'ZD90aGlzLmhvdC5zZXREYXRhQXRDZWxsKGgsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdCwiQ29sdW1uU3VtbWFyeS5zZXQiKTp0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFtoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHRdKSxsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFs'@;
put 'dGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH10aHJvd091dE9mQm91bmRzV2FybmluZygpe1lvKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbnMnIGRlc3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0YWJsZSBib3VuZGFyaWVzISIpfX07ZnVuY3Rpb24g'@;
put 'RUooYyl7cmV0dXJuIG51bGw9PWN8fGlzTmFOKGMpfWZ1bmN0aW9uIGZGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHBy'@;
put 'ZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBUSj0iY29sdW1uU3VtbWFyeSI7dmFyIHdUPW5ldyBXZWFrU2V0O2NsYXNzIG51dCBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBYY3QoYyxsKXsoZnVuY3Rpb24gcWN0KGMsbCl7aWYobC5o'@;
put 'YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsd1QpLGZ1bmN0aW9uIEpjdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUWN0KGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uIGV1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImVuZHBvaW50cyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFRKfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7'@;
put 'cmV0dXJuIDIyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVEpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1RKXSx0aGlzLmVuZHBvaW50cz1uZXcgS2N0KHRo'@;
put 'aXMsdGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGZGKHdULGwscnV0KS5jYWxsKGwsLi4uZCl9KSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmRih3VCxsLGF1dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclVwZGF0'@;
put 'ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmRih3VCxsLGl1dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLChhLGQs'@;
put 'aCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRl'@;
put 'cmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRz'@;
put 'LnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1l'@;
put 'bnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRl'@;
put 'cmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4u'@;
put 'LmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0'@;
put 'ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZkYod1QsbCxzdXQpLmNhbGwo'@;
put 'bCwuLi5kKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5lbmRwb2ludHM9bnVsbCx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1'@;
put 'Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9Y2FsY3VsYXRlKGwpe3N3aXRjaChsLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFr'@;
put 'O2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGwpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2Jy'@;
put 'ZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIHFzKGwucmFuZ2VzLGQ9PnthKz10aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJjZUNvbHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxh'@;
put 'KXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsdj0wO2Rve2lmKGY9dGhpcy5nZXRDZWxsVmFsdWUoaCxhKSxmPUVKKGYpP251bGw6ZixudWxsIT09Zil7Y29uc3QgTT0oYCR7Zn1gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7TT52JiYodj1NKX1kKz1mfHwwLGgtPTF9d2hpbGUo'@;
put 'aD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqdikvMTAqKnZ9Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gcXMobC5yYW5nZXMsaD0+e2NvbnN0IGY9dGhpcy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3VyY2VDb2x1bW4sYSk7aWYobnVsbD09PWQmJm51bGwh'@;
put 'PT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0pLG51bGw9PT1kPyJOb3QgZW5vdWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1heChsLGEsZCl7bGV0IHYsaD1udWxsLGY9bFsxXXx8'@;
put 'bFswXTtkb3tpZih2PXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksdj1FSih2KT9udWxsOnYsbnVsbD09PWgpaD12O2Vsc2UgaWYobnVsbCE9PXYpc3dpdGNoKGQpe2Nhc2UibWluIjpoPU1hdGgubWluKGgsdik7YnJlYWs7Y2FzZSJtYXgiOmg9TWF0aC5tYXgoaCx2KX1mLT0xfXdoaWxlKGY+PWxb'@;
put 'MF0pO3JldHVybiBofWNvdW50RW1wdHkobCxhKXtsZXQgZCxoPTAsZj1sWzFdfHxsWzBdO2Rve2Q9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSxkPUVKKGQpP251bGw6ZCxudWxsPT09ZCYmKGgrPTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJuIGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7'@;
put 'cmV0dXJuIHFzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhbMV0/MTpoWzFdLWhbMF0rMSx2PXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29sdW1uKTthKz1mLGEtPXZ9KSxhfWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJuIHRoaXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291'@;
put 'bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtsZXQgZj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksdj0iIjtpZihudWxsIT09ZCYmbnVsbCE9PWgmJih2PXRo'@;
put 'aXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksdi5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYmKCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBs'@;
put 'YWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVycm9yKGhsYENvbHVtblN1bW1hcnkgcGx1Z2luOiBjZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3Qg'@;
put 'aW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfX1mdW5jdGlvbiBydXQoKXt0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCl9ZnVuY3Rpb24gaXV0KGMpe3ZvaWQgMCE9PWMuY29sdW1ucyYmdGhpcy5lbmRw'@;
put 'b2ludHMucmVmcmVzaENlbGxNZXRhcygpfWZ1bmN0aW9uIGF1dChjLGwpe2MmJiJDb2x1bW5TdW1tYXJ5LnJlc2V0IiE9PWwmJiJDb2x1bW5TdW1tYXJ5LnNldCIhPT1sJiYibG9hZERhdGEiIT09bCYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENoYW5nZWRFbmRwb2ludHMoYyl9ZnVuY3Rpb24g'@;
put 'c3V0KGMsbCl7dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixjWzBdLGMubGVuZ3RoLGMsdGhpcy5wbHVnaW5OYW1lKSx0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIs'@;
put 'bCxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSl9ZnVuY3Rpb24gQUooYyxsLGEpe19nZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gX2dlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0'@;
put 'd2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBZXyhjLGwpe3JldHVybiBjLmdldChESihjLGwpKX1mdW5jdGlvbiBrSihjLGwsYSl7cmV0dXJuIGMuc2V0KERKKGMsbCksYSksYX1mdW5jdGlvbiBESihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0'@;
put 'dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHBGPW5ldyBXZWFrTWFwLGdGPW5ldyBXZWFrTWFwLG1GPW5ldyBXZWFrTWFwLHdnZT1uZXcgV2Vha1NldDtjbGFz'@;
put 'cyBDZ2V7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gb3V0KGMsbCl7X2dlKGMsbCksbC5hZGQoYyl9KSh0aGlzLHdnZSksQUoodGhpcyxwRiwhMCksQUoodGhpcyxnRixudWxsKSxBSih0aGlzLG1GLG5ldyBSZXNpemVPYnNlcnZlcihsPT5ESih3Z2UsdGhpcyxsdXQpLmNhbGwodGhpcyxsKSkp'@;
put 'fXNldE9ic2VydmVkRWxlbWVudChsKXtrSihnRix0aGlzLGwpfXVub2JzZXJ2ZSgpe1lfKG1GLHRoaXMpLnVub2JzZXJ2ZShZXyhnRix0aGlzKSl9b2JzZXJ2ZSgpe2tKKHBGLHRoaXMsITApLFlfKG1GLHRoaXMpLm9ic2VydmUoWV8oZ0YsdGhpcykpfWRlc3Ryb3koKXtZXyhtRix0aGlzKS5k'@;
put 'aXNjb25uZWN0KCl9fWZ1bmN0aW9uIGx1dChjKXshWV8ocEYsdGhpcykmJkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoP2MuZm9yRWFjaChsPT57bGV0e2JvcmRlckJveFNpemU6YX09bDtjb25zdHtpbmxpbmVTaXplOmQsYmxvY2tTaXplOmh9PWFbMF07dGhpcy5ydW5Mb2NhbEhvb2tzKCJy'@;
put 'ZXNpemUiLGQsaCl9KTprSihwRix0aGlzLCExKX1mdW5jdGlvbiBHbShjLGwsYSl7KGZ1bmN0aW9uIGN1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9'@;
put 'KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUGwoYyxsKXtyZXR1cm4gYy5nZXQoU2dlKGMsbCkpfWZ1bmN0aW9uIHpwKGMsbCxhKXtyZXR1cm4gYy5zZXQoU2dlKGMsbCksYSksYX1mdW5jdGlvbiBTZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl'@;
put 'dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXhsKENnZSx5MSk7dmFyIEdfPW5ldyBXZWFrTWFwLElKPW5ldyBXZWFrTWFwLFJKPW5ldyBXZWFrTWFwLERnPW5ldyBX'@;
put 'ZWFrTWFwLCRtPW5ldyBXZWFrTWFwLEttPW5ldyBXZWFrTWFwLHZGPW5ldyBXZWFrTWFwLCRfPW5ldyBXZWFrTWFwO2NsYXNzIG05e3N0YXRpYyBnZXQgQ0xBU1NfRURJVE9SX0NPTlRBSU5FUigpe3JldHVybiJodENvbW1lbnRzQ29udGFpbmVyIn1zdGF0aWMgZ2V0IENMQVNTX0VESVRPUigp'@;
put 'e3JldHVybiJodENvbW1lbnRzIn1zdGF0aWMgZ2V0IENMQVNTX0lOUFVUKCl7cmV0dXJuImh0Q29tbWVudFRleHRBcmVhIn1zdGF0aWMgZ2V0IENMQVNTX0NFTEwoKXtyZXR1cm4iaHRDb21tZW50Q2VsbCJ9Y29uc3RydWN0b3IobCxhLGQpe3ZhciBoPXRoaXM7R20odGhpcyxHXyx2b2lkIDAp'@;
put 'LEdtKHRoaXMsSUosdm9pZCAwKSxHbSh0aGlzLFJKLCExKSxHbSh0aGlzLERnLG51bGwpLEdtKHRoaXMsJG0sdm9pZCAwKSxHbSh0aGlzLEttLHZvaWQgMCksR20odGhpcyx2RiwhMCksR20odGhpcywkXyxuZXcgQ2dlKSx6cChHXyx0aGlzLGwpLHpwKElKLHRoaXMsZCksenAoUkosdGhpcyxh'@;
put 'KSx6cCgkbSx0aGlzLHRoaXMuY3JlYXRlRWRpdG9yKCkpLHpwKEttLHRoaXMsUGwoJG0sdGhpcykuc3R5bGUpLFBsKCRfLHRoaXMpLnNldE9ic2VydmVkRWxlbWVudCh0aGlzLmdldElucHV0RWxlbWVudCgpKSxQbCgkXyx0aGlzKS5hZGRMb2NhbEhvb2soInJlc2l6ZSIsZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gaC5ydW5Mb2NhbEhvb2tzKCJyZXNpemUiLC4uLnYpfSksdGhpcy5oaWRlKCl9c2V0UG9zaXRpb24obCxhKXtQbChLbSx0aGlzKS5sZWZ0PWAke2x9cHhg'@;
put 'LFBsKEttLHRoaXMpLnRvcD1gJHthfXB4YH1zZXRTaXplKGwsYSl7aWYobCYmYSl7Y29uc3QgZD10aGlzLmdldElucHV0RWxlbWVudCgpO2Quc3R5bGUud2lkdGg9YCR7bH1weGAsZC5zdHlsZS5oZWlnaHQ9YCR7YX1weGB9fWdldFNpemUoKXtyZXR1cm57d2lkdGg6aXUodGhpcy5nZXRJbnB1'@;
put 'dEVsZW1lbnQoKSksaGVpZ2h0OlN1KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpfX1vYnNlcnZlU2l6ZSgpe1BsKCRfLHRoaXMpLm9ic2VydmUoKX1yZXNldFNpemUoKXtjb25zdCBsPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7bC5zdHlsZS53aWR0aD0iIixsLnN0eWxlLmhlaWdodD0iIn1zZXRS'@;
put 'ZWFkT25seVN0YXRlKGwpe3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkucmVhZE9ubHk9bH1zaG93KCl7UGwoS20sdGhpcykuZGlzcGxheT0iYmxvY2siLHpwKHZGLHRoaXMsITEpfWhpZGUoKXtQbCgkXyx0aGlzKS51bm9ic2VydmUoKSxQbCh2Rix0aGlzKXx8KFBsKEttLHRoaXMpLmRpc3BsYXk9'@;
put 'Im5vbmUiKSx6cCh2Rix0aGlzLCEwKX1pc1Zpc2libGUoKXtyZXR1cm4iYmxvY2siPT09UGwoS20sdGhpcykuZGlzcGxheX1zZXRWYWx1ZSgpe2NvbnN0IGE9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIil8fCIiO3RoaXMuZ2V0SW5w'@;
put 'dXRFbGVtZW50KCkudmFsdWU9YX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlfWlzRm9jdXNlZCgpe3JldHVybiBQbChHXyx0aGlzKS5hY3RpdmVFbGVtZW50PT09dGhpcy5nZXRJbnB1dEVsZW1lbnQoKX1mb2N1cygpe3RoaXMuZ2V0SW5wdXRFbGVtZW50'@;
put 'KCkuZm9jdXMoKX1jcmVhdGVFZGl0b3IoKXtjb25zdCBsPVBsKEdfLHRoaXMpLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGE9UGwoR18sdGhpcykuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtyZXR1cm4gbC5zdHlsZS5kaXNwbGF5PSJub25lIix6cChEZyx0aGlzLFBsKEdfLHRoaXMpLmNyZWF0'@;
put 'ZUVsZW1lbnQoImRpdiIpKSxQbChEZyx0aGlzKS5zZXRBdHRyaWJ1dGUoImRpciIsUGwoUkosdGhpcyk/InJ0bCI6Imx0ciIpLEVpKFBsKERnLHRoaXMpLG05LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLFBsKElKLHRoaXMpLmFwcGVuZENoaWxkKFBsKERnLHRoaXMpKSxFaShsLG05LkNMQVNT'@;
put 'X0VESVRPUiksRWkoYSxtOS5DTEFTU19JTlBVVCksYS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksbC5hcHBlbmRDaGlsZChhKSxQbChEZyx0aGlzKS5hcHBlbmRDaGlsZChsKSxsfWdldElucHV0RWxlbWVudCgpe3JldHVybiBQbCgkbSx0aGlzKS5xdWVyeVNlbGVjdG9yKGAu'@;
put 'JHttOS5DTEFTU19JTlBVVH1gKX1nZXRFZGl0b3JFbGVtZW50KCl7cmV0dXJuIFBsKCRtLHRoaXMpfWRlc3Ryb3koKXtjb25zdCBsPVBsKERnLHRoaXMpP1BsKERnLHRoaXMpLnBhcmVudE5vZGU6bnVsbDtQbCgkbSx0aGlzKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFBsKCRtLHRoaXMpKSx6'@;
put 'cCgkbSx0aGlzLG51bGwpLHpwKEttLHRoaXMsbnVsbCksUGwoJF8sdGhpcykuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQoUGwoRGcsdGhpcykpfX14bChtOSx5MSk7Y29uc3QgdXV0PW05O2Z1bmN0aW9uIExKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBkdXQoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gaHV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBNZ2V7Y29uc3RydWN0b3IobCl7TEoodGhpcywid2FzTGFzdEFjdGlvblNob3ciLCEwKSxMSih0aGlzLCJzaG93RGVib3VuY2VkIixudWxsKSxMSih0aGlzLCJo'@;
put 'aWRpbmdUaW1lciIsbnVsbCksdGhpcy51cGRhdGVEZWxheShsKX1oaWRlKCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMSx0aGlzLmhpZGluZ1RpbWVyPXNldFRpbWVvdXQoKCk9PnshMT09PXRoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29rcygiaGlkZSIpfSwyNTAp'@;
put 'fXNob3cobCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMCx0aGlzLnNob3dEZWJvdW5jZWQobCl9Y2FuY2VsSGlkaW5nKCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMCxjbGVhclRpbWVvdXQodGhpcy5oaWRpbmdUaW1lciksdGhpcy5oaWRpbmdUaW1lcj1udWxsfXVwZGF0ZURlbGF5KCl7'@;
put 'dGhpcy5zaG93RGVib3VuY2VkPUlFKGE9Pnt0aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoInNob3ciLGEuZnJvbS5yb3csYS5mcm9tLmNvbCl9LGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToyNTApfWRlc3Ry'@;
put 'b3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpfX14bChNZ2UseTEpO2NvbnN0IGd1dD1NZ2UsaW89Ii0tLS0tLS0tLSI7ZnVuY3Rpb24gdjkoYyxsKXtjb25zdCBhPXt9O3JldHVybiBLbihjLGQ9PntkLmZvckFsbCgoaCxmKT0+e2g+PTAmJmY+PTAmJihhW2hdfHwoYVtoXT1bXSksYVtoXVtm'@;
put 'XT1sKGgsZikpfSl9KSxhfWZ1bmN0aW9uIFhtKGMsbCxhLGQsaCl7S24oYyxmPT57Zi5mb3JBbGwoKHYsTSk9Pnt2Pj0wJiZNPj0wJiZmdW5jdGlvbiB3dXQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9aChjLGwpO2xldCBNPWQ7di5jbGFzc05hbWUmJihNPSJ2ZXJ0aWNhbCI9PT1hP2Z1bmN0aW9u'@;
put 'IGJ1dChjLGwpe3JldHVybi0xIT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodFRvcCIsIiIpLnJlcGxhY2UoImh0TWlkZGxlIiwiIikucmVwbGFjZSgiaHRCb3R0b20iLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5jbGFzc05hbWUsZCk6ZnVuY3Rpb24gX3V0KGMsbCl7'@;
put 'cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0TGVmdCIsIiIpLnJlcGxhY2UoImh0Q2VudGVyIiwiIikucmVwbGFjZSgiaHRSaWdodCIsIiIpLnJlcGxhY2UoImh0SnVzdGlmeSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfSh2LmNsYXNzTmFtZSxkKSksZihj'@;
put 'LGwsImNsYXNzTmFtZSIsTSl9KHYsTSxsLGEsZCxoKX0pfSl9ZnVuY3Rpb24geGdlKGMpe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1mdW5jdGlvbiB5RihjLGwpe2xldCBhPSExO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZLbihjLGQ9PihkLmZv'@;
put 'ckFsbCgoaCxmKT0+e2lmKGg+PTAmJmY+PTAmJmwoaCxmKSlyZXR1cm4gYT0hMCwhMX0pLGEpKSxhfWZ1bmN0aW9uIGJGKGMsbCl7Y29uc3QgYT17dG9wOjAsbGVmdDowfTtpZihsIT09Yy5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6ZH09bC5kZWZhdWx0Vmlldyx7dG9wOmgs'@;
put 'bGVmdDpmfT1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2EudG9wPWgsYS5sZWZ0PWZ9cmV0dXJuIGF9ZnVuY3Rpb24gS18oYyxsLGEpe0VnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRWdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxp'@;
put 'emUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBxbShjLGwsYSl7cmV0dXJuIGMuc2V0KEhoKGMsbCksYSksYX1mdW5jdGlvbiBhbyhjLGwpe3JldHVybiBjLmdldChIaChjLGwpKX1mdW5jdGlvbiBIaChjLGwsYSl7aWYoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgX0Y9ImNvbW1lbnRzIixJZz0iY29tbWVudCIsQ1Q9InZh'@;
put 'bHVlIix3Rj0icmVhZE9ubHkiLFNUPV9GLE9KPWBwbHVnaW46JHtfRn1gO3ZhciBGbD1uZXcgV2Vha01hcCxVcD1uZXcgV2Vha01hcCxDRj1uZXcgV2Vha01hcCxTRj1uZXcgV2Vha01hcCxQSj1uZXcgV2Vha01hcCxNRj1uZXcgV2Vha01hcCxRMj1uZXcgV2Vha1NldDtjbGFzcyBBdXQgZXh0'@;
put 'ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gU3V0KGMsbCl7RWdlKGMsbCksbC5hZGQoYyl9KHRoaXMsUTIpLGZ1bmN0aW9uIE11dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geHV0KGMpe3ZhciBsPWZ1bmN0aW9uIEV1dChjLGwpe2lmKCJvYmpl'@;
put 'Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg'@;
put 'bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l'@;
put 'cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInJhbmdlIix7fSksS18odGhpcyxGbCxudWxsKSxLXyh0aGlzLFVwLG51bGwpLEtfKHRoaXMsQ0YsITEpLEtfKHRoaXMsU0YsITEpLEtfKHRoaXMsUEosbnVsbCksS18odGhpcyxNRiwiIil9c3Rh'@;
put 'dGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIF9GfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDYwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntkaXNwbGF5RGVsYXk6MjUwfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdz'@;
put 'KClbX0ZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoYW8oRmwsdGhpcyl8fChxbShGbCx0aGlzLG5ldyB1dXQodGhpcy5ob3Qucm9vdERvY3VtZW50LHRoaXMuaG90LmlzUnRsKCksdGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnQpKSxhbyhGbCx0aGlzKS5hZGRM'@;
put 'b2NhbEhvb2soInJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gSGgoUTIsbCxGdXQpLmNhbGwobCwuLi5kKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhl'@;
put 'bWUiLChhLGQpPT57ZHx8dGhpcy5oaWRlKCl9KSksYW8oVXAsdGhpcyl8fHFtKFVwLHRoaXMsbmV3IGd1dCh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIpKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGE9PnRoaXMuYWRkVG9Db250ZXh0TWVu'@;
put 'dShhKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIiwoYSxkLGgsZix2LE0pPT5IaChRMix0aGlzLEx1dCkuY2FsbCh0aGlzLGEsTSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLCgpPT5IaChRMix0aGlzLEh1dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckJlZ2lu'@;
put 'RWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT5IaChRMix0aGlzLEFnZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGE9PkhoKFEyLHRoaXMsQWdlKS5jYWxsKHRoaXMsYSkp'@;
put 'LGFvKFVwLHRoaXMpLmFkZExvY2FsSG9vaygiaGlkZSIsKCk9PnRoaXMuaGlkZSgpKSxhbyhVcCx0aGlzKS5hZGRMb2NhbEhvb2soInNob3ciLChhLGQpPT50aGlzLnNob3dBdENlbGwoYSxkKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBl'@;
put 'ci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7YW8oVXAsdGhpcykudXBkYXRlRGVsYXkodGhpcy5nZXRTZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2Fi'@;
put 'bGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYT1sLmdldENvbnRleHQoImdyaWQiKSxkPWwuYWRkQ29udGV4dChPSik7YS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwiQWx0IiwiTSJdXSxjYWxsYmFjazoo'@;
put 'KT0+e2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtxbShTRix0aGlzLCEwKSx0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCgpPT57dGhpcy5zZXRSYW5nZShoKSx0aGlzLnNob3coKSx0aGlzLmZvY3VzRWRpdG9yKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZShP'@;
put 'SiksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3FtKFNGLHRoaXMsITEpfSl9KX0sc3RvcFByb3BhZ2F0aW9uOiEwLHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWg/dm9pZCAwOmgu'@;
put 'aGlnaGxpZ2h0LmlzQ2VsbCgpfSxncm91cDpTVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57YW8oRmwsdGhpcykuc2V0VmFsdWUoYW8oTUYsdGhpcykpLHRoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0scnVuT25seUlm'@;
put 'OigpPT5hbyhGbCx0aGlzKS5pc1Zpc2libGUoKSYmYW8oRmwsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6U1R9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3Jp'@;
put 'ZCIpfSxydW5Pbmx5SWY6KCk9PmFvKEZsLHRoaXMpLmlzVmlzaWJsZSgpJiZhbyhGbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDpTVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxbIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OmwuZ2V0Q29udGV4dCgiZ3JpZCIpLGNh'@;
put 'bGxiYWNrOigpPT57YW8oRmwsdGhpcykuc2V0VmFsdWUoYW8oRmwsdGhpcykuZ2V0VmFsdWUoKSksdGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxncm91cDpTVH0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5n'@;
put 'ZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChTVCl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT10aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwi'@;
put 'bW91c2VvdmVyIixkPT5IaChRMix0aGlzLEl1dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+SGgoUTIsdGhpcyxrdXQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJt'@;
put 'b3VzZXVwIiwoKT0+SGgoUTIsdGhpcyxSdXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiZm9jdXMiLCgpPT5IaChRMix0aGlzLFB1dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJibHVyIiwoKT0+'@;
put 'SGgoUTIsdGhpcyxPdXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKSwibW91c2Vkb3duIixkPT5IaChRMix0aGlzLER1dCkuY2FsbCh0aGlzLGQpKX1zZXRSYW5nZShsKXt0aGlzLnJhbmdlPWx9Y2xl'@;
put 'YXJSYW5nZSgpe3RoaXMucmFuZ2U9e319dGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQobCl7Y29uc3QgYT1EbShsLnRhcmdldCwiVEQiLCJUQk9EWSIpO3JldHVybiEhKGEmJmdzKGEsImh0Q29tbWVudENlbGwiKSYmRG0oYSxbdGhpcy5ob3Qucm9vdEVsZW1lbnRdKSl9dGFyZ2V0SXNDb21tZW50'@;
put 'VGV4dEFyZWEobCl7cmV0dXJuIHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk9PT1sLnRhcmdldH1zZXRDb21tZW50KGwpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0'@;
put 'UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdCBhPWFvKEZsLHRoaXMpLmdldFZhbHVlKCk7bGV0IGQ9IiI7bnVsbCE9bD9kPWw6bnVsbCE9YSYmKGQ9YSksdGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse1tD'@;
put 'VF06ZH0pLHRoaXMuaG90LnJlbmRlcigpfXNldENvbW1lbnRBdENlbGwobCxhLGQpe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2V0Q29tbWVudChkKX1yZW1vdmVDb21tZW50KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7dGhp'@;
put 'cy5ob3Quc2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLElnKSxsJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1vdmVDb21tZW50QXRDZWxsKGwsYSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1syXSl8fGFyZ3VtZW50c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnJlbW92ZUNvbW1lbnQoZCl9Z2V0Q29tbWVudCgpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5n'@;
put 'ZS5mcm9tLmNvbCxDVCl9Z2V0Q29tbWVudEF0Q2VsbChsLGEpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGwsYSxDVCl9c2hvdygpe3ZhciBsO2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJh'@;
put 'bmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtmcm9tOntyb3c6YSxjb2w6ZH19PXRoaXMucmFuZ2U7aWYoYTwwfHxhPnRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTF8fGQ8MHx8ZD50aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKS0xKXJldHVybiEx'@;
put 'O2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sKTtyZXR1cm4gYW8oVXAsdGhpcykuY2FuY2VsSGlkaW5nKCksYW8oRmwsdGhpcykuc2V0VmFsdWUobnVsbCE9PShsPWhbSWddP2hbSWddW0NUXTpudWxsKSYmdm9pZCAw'@;
put 'IT09bD9sOiIiKSxhbyhGbCx0aGlzKS5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygpfWhpZGUoKXthbyhGbCx0aGlzKS5o'@;
put 'aWRlKCl9cmVmcmVzaEVkaXRvcigpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5yYW5nZS5mcm9tJiZhbyhGbCx0aGlzKS5pc1Zpc2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5k'@;
put 'ZXhNYXBwZXI6ZH09dGhpcy5ob3Qse3JvdzpoLGNvbDpmfT10aGlzLnJhbmdlLmZyb207bGV0IHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2NvbnN0IEk9bnVsbD09PXY7YW8oRmwsdGhpcykuc2V0UG9zaXRp'@;
put 'b24oMCwwKSxudWxsPT09diYmKHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsLTEpKSksbnVsbD09PU0mJihNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLC0xKSkp'@;
put 'O2NvbnN0IEc9bnVsbD09PXYscmU9bnVsbD09PU07dj12Pz8wLE09TT8/MDtjb25zdHtyb290V2luZG93OnVlLHZpZXc6e193dDp5ZX19PXRoaXMuaG90LHt3dFRhYmxlOkVlfT15ZSxCZT15ZS5nZXRDZWxsKHtyb3c6dixjb2w6TX0sITApLEdlPXRoaXMuZ2V0Q29tbWVudE1ldGEoaCxmLCJz'@;
put 'dHlsZSIpO0dlP2FvKEZsLHRoaXMpLnNldFNpemUoR2Uud2lkdGgsR2UuaGVpZ2h0KTphbyhGbCx0aGlzKS5yZXNldFNpemUoKTtjb25zdCBzdD1yZT8wOkVlLmdldENvbHVtbldpZHRoKE0pLHB0PUkmJiFHP1N1KEJlKTowLHtsZWZ0OmR0LHRvcDpxdCx3aWR0aDptbixoZWlnaHQ6d259PUJl'@;
put 'LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpobixoZWlnaHQ6TW59PWFvKEZsLHRoaXMpLmdldFNpemUoKSx7aW5uZXJXaWR0aDpNcixpbm5lckhlaWdodDprcn09dGhpcy5ob3Qucm9vdFdpbmRvdyxxbj10aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGdyPWQw'@;
put 'KHRoaXMuaG90LnJvb3REb2N1bWVudCkscXI9TCQodGhpcy5ob3Qucm9vdFdpbmRvdyk/Z3I6MCxfaT1PJCh0aGlzLmhvdC5yb290V2luZG93KT9ncjowO2xldCBQbj1kdCt1ZS5zY3JvbGxYK3N0LFVyPXF0K3VlLnNjcm9sbFkrcHQ7dGhpcy5ob3QuaXNSdGwoKSYmKFBuLT1obitzdCksdGhp'@;
put 'cy5ob3QuaXNMdHIoKSYmZHQrbW4raG4+TXItcXI/UG49ZHQrdWUuc2Nyb2xsWC1obi0xOnRoaXMuaG90LmlzUnRsKCkmJlBuPC0ocW4uc2Nyb2xsV2lkdGgtcW4uY2xpZW50V2lkdGgpJiYoUG49ZHQrdWUuc2Nyb2xsWCtzdCsxKSxxdCtNbj5rci1faSYmKFVyLT1Nbi13bisxKSxhbyhGbCx0'@;
put 'aGlzKS5zZXRQb3NpdGlvbihQbixVciksYW8oRmwsdGhpcykuc2V0UmVhZE9ubHlTdGF0ZSh0aGlzLmdldENvbW1lbnRNZXRhKGgsZix3RikpLGFvKEZsLHRoaXMpLm9ic2VydmVTaXplKCl9Zm9jdXNFZGl0b3IoKXthbyhGbCx0aGlzKS5mb2N1cygpfXVwZGF0ZUNvbW1lbnRNZXRhKGwsYSxk'@;
put 'KXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSlbSWddO2xldCBmO2g/KGY9cDEoaCksd0UoZixkKSk6Zj1kLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSxJZyxmKX1nZXRDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO2lmKGhbSWdd'@;
put 'KXJldHVybiBoW0lnXVtkXX1hZGRUb0NvbnRleHRNZW51KGwpe2wuaXRlbXMucHVzaCh7bmFtZTppb30sZnVuY3Rpb24gdnV0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzQWRkRWRpdCIsbmFtZSgpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8'@;
put 'fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBudWxsIT1hJiZhLmlzQ2VsbCgpJiZjLmdldENvbW1lbnRBdENlbGwoYS5yb3csYS5jb2wpP3RoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShmWCk6dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGhYKX0sY2FsbGJhY2soKXtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtjLnNldFJhbmdlKGwpLGMuc2hvdygpLGMuZm9jdXNFZGl0b3IoKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8dGhpcy5zZWxl'@;
put 'Y3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpLGZ1bmN0aW9uIHl1dChjKXtyZXR1cm57a2V5'@;
put 'OiJjb21tZW50c1JlbW92ZSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocFgpfSxjYWxsYmFjaygpe3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mb3JBbGwoKGEsZCk9PnthPj0wJiZkPj0wJiZjLnJlbW92ZUNvbW1lbnRBdENlbGwoYSxkLCExKX0pLHRoaXMu'@;
put 'cmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxl'@;
put 'Y3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiBDdXQoYyl7cmV0dXJue2tleToiY29tbWVudHNSZWFkT25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGdY'@;
put 'KTtyZXR1cm4geUYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGQsaCk9PmMuZ2V0Q29tbWVudE1ldGEoZCxoLHdGKSk/eGdlKGwpOmx9LGNhbGxiYWNrKCl7dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZvckFsbCgoYSxkKT0+e2lmKGE+PTAmJmQ+PTApe2NvbnN0IGg9ISFjLmdldENv'@;
put 'bW1lbnRNZXRhKGEsZCx3Rik7Yy51cGRhdGVDb21tZW50TWV0YShhLGQse1t3Rl06IWh9KX19KX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8IWMuZ2V0Q29tbWVudEF0Q2VsbChsLmhp'@;
put 'Z2hsaWdodC5yb3csbC5oaWdobGlnaHQuY29sKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xz'@;
put 'KCkpfX19KHRoaXMpKX1nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKXtyZXR1cm4gYW8oRmwsdGhpcykuZ2V0SW5wdXRFbGVtZW50KCl9ZGVzdHJveSgpe3ZhciBsLGE7bnVsbD09PShsPWFvKEZsLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksbnVsbD09PShhPWFvKFVwLHRoaXMpKXx8'@;
put 'dm9pZCAwPT09YXx8YS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBrdXQoYyl7aWYodGhpcy5ob3QudmlldyYmdGhpcy5ob3Qudmlldy5fd3QmJiFhbyhDRix0aGlzKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykpe2NvbnN0IGw9RG0oYy50YXJnZXQsIlRE'@;
put 'IiwiVEJPRFkiKTtsZXQgYT1udWxsO2wmJihhPXRoaXMuaG90LmdldENvb3JkcyhsKSksKCFsfHx0aGlzLnJhbmdlLmZyb20mJmEmJih0aGlzLnJhbmdlLmZyb20ucm93IT09YS5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1hLmNvbCkpJiZ0aGlzLmhpZGUoKX19ZnVuY3Rpb24gRHV0KGMp'@;
put 'e2Muc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gSXV0KGMpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDtpZighKGFvKENGLHRoaXMpfHxhbyhGbCx0aGlzKS5pc0ZvY3VzZWQoKXx8Z3MoYy50YXJnZXQsInd0Qm9yZGVyIil8fGFvKFBKLHRoaXMpPT09Yy50YXJnZXQpJiZhbyhG'@;
put 'bCx0aGlzKSlpZihxbShQSix0aGlzLGwuZWxlbWVudEZyb21Qb2ludChjLmNsaWVudFgsYy5jbGllbnRZKSksdGhpcy50YXJnZXRJc0NlbGxXaXRoQ29tbWVudChjKSl7Y29uc3QgYT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhjLnRhcmdldCkpO2FvKFVw'@;
put 'LHRoaXMpLnNob3coYSl9ZWxzZSBJbShjLnRhcmdldCxsKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykmJmFvKFVwLHRoaXMpLmhpZGUoKX1mdW5jdGlvbiBSdXQoKXtxbShDRix0aGlzLCExKX1mdW5jdGlvbiBMdXQoYyxsKXtsW0lnXSYmbFtJZ11bQ1RdJiZFaShjLGwuY29t'@;
put 'bWVudGVkQ2VsbENsYXNzTmFtZSl9ZnVuY3Rpb24gT3V0KCl7cW0oTUYsdGhpcywiIiksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSx0aGlzLnNldENvbW1lbnQoKX1mdW5jdGlvbiBQdXQoKXtxbShNRix0aGlzLHRoaXMuZ2V0Q29t'@;
put 'bWVudCgpKSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZShPSil9ZnVuY3Rpb24gRnV0KGMsbCl7dGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse3N0'@;
put 'eWxlOnt3aWR0aDpjLGhlaWdodDpsfX0pfWZ1bmN0aW9uIEFnZShjKXthbyhGbCx0aGlzKS5pc0ZvY3VzZWQoKSYmejIoYyl9ZnVuY3Rpb24gSHV0KCl7YW8oU0YsdGhpcyl8fHRoaXMuaGlkZSgpfWZ1bmN0aW9uIEZKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOdXQoYyl7dmFyIGw9ZnVu'@;
put 'Y3Rpb24gVnV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZ2V7Y29uc3RydWN0b3IobCl7RkoodGhpcywiaG90Iix2b2lkIDApLEZKKHRoaXMsImNvbW1hbmRzIix7fSksRkoodGhpcywiY29tbW9uQ2FsbGJhY2si'@;
put 'LG51bGwpLHRoaXMuaG90PWx9cmVnaXN0ZXJDb21tYW5kKGwsYSl7dGhpcy5jb21tYW5kc1tsXT1hfXNldENvbW1vbkNhbGxiYWNrKGwpe3RoaXMuY29tbW9uQ2FsbGJhY2s9bH1leGVjdXRlKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0x'@;
put 'O2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtjb25zdCBmPWwuc3BsaXQoIjoiKSx2PWZbMF0sTT0yPT09Zi5sZW5ndGg/ZlsxXTpudWxsO2xldCBJPXRoaXMuY29tbWFuZHNbdl07aWYoIUkpdGhyb3cgbmV3IEVycm9yKGBNZW51IGNvbW1hbmQgJyR7dn0nIG5vdCBleGlzdHMuYCk7aWYo'@;
put 'TSYmSS5zdWJtZW51JiYoST1mdW5jdGlvbiBCdXQoYyxsKXtsZXQgYTtyZXR1cm4gS24obCxkPT57Y29uc3QgaD1kLmtleT9kLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShoKSYmaFsxXT09PWMpcmV0dXJuIGE9ZCwhMX0pLGF9KE0sSS5zdWJtZW51Lml0ZW1zKSksITA9'@;
put 'PT1JLmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgSS5kaXNhYmxlZCYmITA9PT1JLmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHxDdShJLCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IEc9W107ImZ1bmN0aW9uIj09dHlwZW9mIEkuY2FsbGJhY2smJkcucHVzaChJLmNhbGxiYWNrKSwiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgdGhpcy5jb21tb25DYWxsYmFjayYmRy5wdXNoKHRoaXMuY29tbW9uQ2FsbGJhY2spLGQudW5zaGlmdChmLmpvaW4oIjoiKSksS24oRyxyZT0+cmUuYXBwbHkodGhpcy5ob3QsZCkpfX1jb25zdCBlZj0iYWxpZ25tZW50Iix4Rj0iY2xlYXJfY29sdW1uIixNVD0iY29s'@;
put 'X2xlZnQiLHhUPSJjb2xfcmlnaHQiLEVUPSJtYWtlX3JlYWRfb25seSIsRUY9InJlZG8iLFRUPSJyZW1vdmVfY29sIixURj0icmVtb3ZlX3JvdyIsQUY9InJvd19hYm92ZSIsa0Y9InJvd19iZWxvdyIsQVQ9Im5vX2l0ZW1zIixERj0idW5kbyIsRGdlPVtBRixrRixNVCx4VCx4RixURixUVCxE'@;
put 'RixFRixFVCxlZixpbyxBVF0sSWdlPXtbaW9dOmZ1bmN0aW9uIG11dCgpe3JldHVybntuYW1lOmlvfX0sW0FUXTpmdW5jdGlvbiBxdXQoKXtyZXR1cm57a2V5OkFULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEdLKX0sZGlzYWJsZWQ6ITAsaXNDb21tYW5kOiExfX0s'@;
put 'W0FGXTpmdW5jdGlvbiBLdXQoKXtyZXR1cm57a2V5OkFGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jv'@;
put 'd19hYm92ZSIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QWJvdmUiKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYm'@;
put 'Yy5oaWdobGlnaHQucm93PDB8fHRoaXMuY291bnRTb3VyY2VSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMD09PXRoaXMuY291bnRSb3dzKCl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdz'@;
put 'KCkuYWxsb3dJbnNlcnRSb3d9fX0sW2tGXTpmdW5jdGlvbiBYdXQoKXtyZXR1cm57a2V5OmtGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEtLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5l'@;
put 'cigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRl'@;
put 'cigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW01UXTpmdW5jdGlvbiBV'@;
put 'dXQoKXtyZXR1cm57a2V5Ok1ULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfZW5kIjoiaW5z'@;
put 'ZXJ0X2NvbF9zdGFydCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtbkxlZnQiKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4h'@;
put 'ISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMuY291bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVk'@;
put 'QnlDb3JuZXIoKSYmMD09PXRoaXMuY291bnRDb2xzKCl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW3hUXTpmdW5jdGlvbiBadXQoKXtyZXR1cm57a2V5OnhULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHFL'@;
put 'KX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdo'@;
put 'dCIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8Yy5pc1NpbmdsZUhl'@;
put 'YWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MHx8dGhpcy5jb3VudFNvdXJjZUNvbHMoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heENvbHMpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1ufX19LFt4Rl06ZnVuY3Rpb24genV0KCl7cmV0dXJue2tl'@;
put 'eTp4RixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShuWCl9LGNhbGxiYWNrKGMsbCl7Y29uc3QgYT1sWzBdLnN0YXJ0LmNvbCxkPWxbMF0uZW5kLmNvbDt0aGlzLmNvdW50Um93cygpJiZ0aGlzLnBvcHVsYXRlRnJvbUFycmF5KDAsYSxbW251bGxdXSxNYXRoLm1heChs'@;
put 'WzBdLnN0YXJ0LnJvdyxsWzBdLmVuZC5yb3cpLGQsIkNvbnRleHRNZW51LmNsZWFyQ29sdW1uIil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fCF0aGlzLnNlbGVjdGlv'@;
put 'bi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSlyZXR1cm4hMDtsZXQgbD0hMTtyZXR1cm4gYy5mb3JBbGwoKGEsZCk9PntpZihhPDB8fGQ8MClyZXR1cm4hMDtjb25zdHtyZWFkT25seTpofT10aGlzLmdldENlbGxNZXRhKGEsZCk7cmV0dXJuISFofHwobD0hMCwhMSl9KSwhbH19fSxbVEZd'@;
put 'OmZ1bmN0aW9uICR1dCgpe3JldHVybntrZXk6VEYsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0W2EsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEpL'@;
put 'LGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9yb3ciLGZ1bmN0aW9uIHRydChjKXtjb25zdCBsPXhfKGMuZ2V0U2VsZWN0ZWQoKSk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9ZVQobCx7Y3JlYXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQo'@;
put 'YyksY3JlYXRlQ2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGMpfSksZD1uZXcgU2V0O3JldHVybiBLbihjLmdldFNlbGVjdGVkKCksdj0+e2NvbnN0e2Zyb206TSx0bzpJfT1hKHYpLEc9TWF0aC5tYXgoTS5yb3csMCk7S24oQXJyYXkuZnJvbShuZXcgQXJyYXkoSS5yb3ctRysx'@;
put 'KSwodWUseWUpPT5HK3llKSx1ZT0+e2QuaGFzKHVlKXx8ZC5hZGQodWUpfSl9KSxHdShBcnJheS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxJLEcpPT4oMCE9PUkmJk09PT1HW0ktMV0rMT92W3YubGVuZ3RoLTFdWzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSwxLCJD'@;
put 'b250ZXh0TWVudS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MClyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2Vs'@;
put 'ZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZVJvd319fSxbVFRdOmZ1bmN0aW9uIEd1dCgpe3JldHVybntr'@;
put 'ZXk6VFQsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0WyxhLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShRSyxsKX0sY2FsbGJhY2soKXt0aGlzLmFs'@;
put 'dGVyKCJyZW1vdmVfY29sIixmdW5jdGlvbiBlcnQoYyl7Y29uc3QgbD14XyhjLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPWVUKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKGMpLGNyZWF0ZUNlbGxSYW5nZTpjLl9j'@;
put 'cmVhdGVDZWxsUmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gS24oYy5nZXRTZWxlY3RlZCgpLHY9Pntjb25zdHtmcm9tOk0sdG86SX09YSh2KSxHPU1hdGgubWF4KE0uY29sLDApO0tuKEFycmF5LmZyb20obmV3IEFycmF5KEkuY29sLUcrMSksKHVlLHllKT0+Ryt5ZSksdWU9Pntk'@;
put 'Lmhhcyh1ZSl8fGQuYWRkKHVlKX0pfSksR3UoQXJyYXkuZnJvbShkKS5zb3J0KCh2LE0pPT52LU0pLCh2LE0sSSxHKT0+KDAhPT1JJiZNPT09R1tJLTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYpLFtdKX0odGhpcyksbnVsbCwiQ29udGV4dE1lbnUucmVtb3ZlQ29s'@;
put 'dW1uIil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDApcmV0dXJuITA7Y29uc3QgbD10'@;
put 'aGlzLmNvdW50Q29scygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVDb2x1bW59'@;
put 'fX0sW0RGXTpmdW5jdGlvbiBKdXQoKXtyZXR1cm57a2V5OkRGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGVYKX0sY2FsbGJhY2soKXt0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS51bmRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9S'@;
put 'ZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1VuZG9BdmFpbGFibGUoKX19fSxbRUZdOmZ1bmN0aW9uIFl1dCgpe3JldHVybntrZXk6RUYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQ'@;
put 'aHJhc2UodFgpfSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnJlZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRv'@;
put 'UmVkbyIpLmlzUmVkb0F2YWlsYWJsZSgpfX19LFtFVF06ZnVuY3Rpb24gV3V0KCl7cmV0dXJue2tleTpFVCxjaGVja2FibGU6ITAsYXJpYUNoZWNrZWQoKXtyZXR1cm4geUYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGwsYSk9PnRoaXMuZ2V0Q2VsbE1ldGEobCxhKS5yZWFkT25seSl9LGFy'@;
put 'aWFMYWJlbCgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTVApfSxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE1QKTtyZXR1cm4geUYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSkmJihj'@;
put 'PXhnZShjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eUYoYywoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KTtLbihjLGE9PnthLmZvckFsbCgoZCxoKT0+e2Q+PTAmJmg+PTAmJnRoaXMuc2V0Q2VsbE1ldGEoZCxoLCJyZWFk'@;
put 'T25seSIsIWwpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwIT09dGhpcy5jb3VudFJvd3Mo'@;
put 'KSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbZWZdOmZ1bmN0aW9uIGp1dCgpe3JldHVybntrZXk6ZWYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobVgp'@;
put 'fSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hKGMmJiFjLmlzU2luZ2xlSGVhZGVyKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhp'@;
put 'cy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51OntpdGVtczpbe2tleTpgJHtlZn06bGVmdGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodlgpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD12OShjLCho'@;
put 'LGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNl'@;
put 'dENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtlZn06Y2VudGVyYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh5WCl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXY5KGMsKGgs'@;
put 'Zik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxYbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5z'@;
put 'ZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7ZWZ9OnJpZ2h0YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShiWCl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXY5KGMsKGgs'@;
put 'Zik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNl'@;
put 'dENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtlZn06anVzdGlmeWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoX1gpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD12OShjLCho'@;
put 'LGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlz'@;
put 'LnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6aW99LHtrZXk6YCR7ZWZ9OnRvcGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uod1gpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCks'@;
put 'bD12OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50'@;
put 'aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtlZn06bWlkZGxlYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDWCl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXY5'@;
put 'KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksWG0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRo'@;
put 'aXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke2VmfTpib3R0b21gLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFNYKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9djko'@;
put 'YywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxYbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhp'@;
put 'cy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24gUmdlKCl7Y29uc3QgYz17fTtyZXR1cm4gcXMoSWdlLChsLGEpPT57Y1thXT1sKCl9KSxjfWZ1bmN0aW9uIEhKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBRdXQoYyl7dmFy'@;
put 'IGw9ZnVuY3Rpb24gZTB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBMZ2V7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51'@;
put 'bGw7SEoodGhpcywiaG90Iix2b2lkIDApLEhKKHRoaXMsInByZWRlZmluZWRJdGVtcyIsUmdlKCkpLEhKKHRoaXMsImRlZmF1bHRPcmRlclBhdHRlcm4iLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17'@;
put 'fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAscXMobCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PWlvPyhhW2lvXT1kLGY9aW8pOmlzTmFOKHBhcnNlSW50KGgsMTApKT8oZC5rZXk9dm9pZCAwPT09ZC5rZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQs'@;
put 'Zj1kLmtleSksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0aW9uIHQwdCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpB'@;
put 'cnJheS5pc0FycmF5KGgpfHwoaD1sKSxYcyhoKT9xcyhoLChmLHYpPT57bGV0IE09YVsic3RyaW5nIj09dHlwZW9mIGY/Zjp2XTtNfHwoTT1mKSxYcyhmKT93dShNLGYpOiJzdHJpbmciPT10eXBlb2YgTSYmKE09e25hbWU6TX0pLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0p'@;
put 'fSk6S24oaCwoZix2KT0+e2xldCBNPWFbZl07IU0mJkRnZS5pbmRleE9mKGYpPj0wfHwoTXx8KE09e25hbWU6ZixrZXk6YCR7dn1gfSksWHMoZikmJnd1KE0sZiksdm9pZCAwPT09TS5rZXkmJihNLmtleT12KSxkLnB1c2goTSkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19ZnVuY3Rpb24gSm0oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG4wdChjKXt2YXIgbD1mdW5jdGlvbiByMHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m'@;
put 'IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv'@;
put 'bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGkwdHtjb25zdHJ1Y3RvcihsLGEpe0ptKHRoaXMsInRvcCIsdm9pZCAwKSxKbSh0aGlzLCJ0b3BSZWxhdGl2ZSIsdm9pZCAwKSxKbSh0aGlzLCJsZWZ0Iix2b2lkIDApLEptKHRoaXMsImxlZnRSZWxhdGl2ZSIsdm9p'@;
put 'ZCAwKSxKbSh0aGlzLCJzY3JvbGxUb3AiLHZvaWQgMCksSm0odGhpcywic2Nyb2xsTGVmdCIsdm9pZCAwKSxKbSh0aGlzLCJjZWxsSGVpZ2h0Iix2b2lkIDApLEptKHRoaXMsImNlbGxXaWR0aCIsdm9pZCAwKTtjb25zdCBkPWEuc2Nyb2xsWSxoPWEuc2Nyb2xsWDtsZXQgZix2LE0sSSxHLHJl'@;
put 'O3RoaXMucm9vdFdpbmRvdz1hLHRoaXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxNPXBhcnNlSW50KGwubGVmdCwxMCksRz1sLmhlaWdodHx8MCxyZT1sLndpZHRofHwwLHY9ZixJPU0sZis9ZCxNKz1oKToi'@;
put 'ZXZlbnQiPT09dGhpcy50eXBlJiYoZj1wYXJzZUludChsLnBhZ2VZLDEwKSxNPXBhcnNlSW50KGwucGFnZVgsMTApLEc9bC50YXJnZXQuY2xpZW50SGVpZ2h0LHJlPWwudGFyZ2V0LmNsaWVudFdpZHRoLHY9Zi1kLEk9TS1oKSx0aGlzLnRvcD1mLHRoaXMudG9wUmVsYXRpdmU9dix0aGlzLmxl'@;
put 'ZnQ9TSx0aGlzLmxlZnRSZWxhdGl2ZT1JLHRoaXMuc2Nyb2xsVG9wPWQsdGhpcy5zY3JvbGxMZWZ0PWgsdGhpcy5jZWxsSGVpZ2h0PUcsdGhpcy5jZWxsV2lkdGg9cmV9Z2V0U291cmNlVHlwZShsKXtsZXQgYT0ibGl0ZXJhbCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50'@;
put 'IiksYX1maXRzQWJvdmUobCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9mZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx'@;
put 'XTp0aGlzLnJvb3RXaW5kb3cuaW5uZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRoPD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9v'@;
put 'dFdpbmRvdy5pbm5lcldpZHRoKX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49bC5vZmZzZXRXaWR0aH19ZnVuY3Rpb24ga1QoYyxsLGEpeyhmdW5jdGlvbiBhMHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0'@;
put 'aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVzKGMsbCl7cmV0dXJuIGMuZ2V0KE9nZShjLGwpKX1mdW5jdGlvbiBJRihjLGwsYSl7cmV0dXJuIGMuc2V0KE9nZShjLGwpLGEpLGF9ZnVuY3Rpb24gT2dlKGMs'@;
put 'bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUTE9bmV3IFdlYWtNYXAsVWQ9'@;
put 'bmV3IFdlYWtNYXAsWmQ9bmV3IFdlYWtNYXAsTko9bmV3IFdlYWtNYXAsWF89bmV3IFdlYWtNYXA7Y2xhc3MgczB0e2NvbnN0cnVjdG9yKGwpe2tUKHRoaXMsUTEsdm9pZCAwKSxrVCh0aGlzLFVkLHZvaWQgMCksa1QodGhpcyxaZCx2b2lkIDApLGtUKHRoaXMsTkosITEpLGtUKHRoaXMsWF8s'@;
put 'e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0pLElGKE5KLHRoaXMsbCl9c2V0T2Zmc2V0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiBVcyhYXyx0aGlzKVtsXT1hLHRoaXN9c2V0RWxlbWVudChs'@;
put 'KXtyZXR1cm4gSUYoUTEsdGhpcyxsKSx0aGlzfXNldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIElGKFVkLHRoaXMsbCksdGhpc311cGRhdGVQb3NpdGlvbihsKXtJRihaZCx0aGlzLG5ldyBpMHQobCxVcyhRMSx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSksVXMoTkosdGhpcyk/'@;
put 'KFVzKFpkLHRoaXMpLmZpdHNCZWxvdyhVcyhRMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCk6VXMoWmQsdGhpcykuZml0c0Fib3ZlKFVzKFExLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlz'@;
put 'LnVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpKToodGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpKX11cGRhdGVIb3Jpem9udGFsUG9zaXRpb24oKXsicnRsIj09PVVzKFExLHRoaXMpLmRpcj9VcyhaZCx0aGlzKS5maXRzT25M'@;
put 'ZWZ0KFVzKFExLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6VXMoWmQsdGhpcykuZml0c09uUmlnaHQoVXMoUTEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTp0aGlzLnNldFBv'@;
put 'c2l0aW9uT25MZWZ0T2ZDdXJzb3IoKX1zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCl7bGV0IGw9VXMoWF8sdGhpcykuYWJvdmUrVXMoWmQsdGhpcykudG9wLVVzKFExLHRoaXMpLm9mZnNldEhlaWdodDtpZihVcyhVZCx0aGlzKSl7Y29uc3QgZD1VcyhVZCx0aGlzKS5vd25lckRvY3VtZW50LmRl'@;
put 'ZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoVXMoVWQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3AsMTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9yZGVyVG9wLDEwKTtsPVVzKFpkLHRoaXMpLnRvcCtVcyhaZCx0aGlz'@;
put 'KS5jZWxsSGVpZ2h0LVVzKFExLHRoaXMpLnNjcm9sbEhlaWdodCtoK2Z9VXMoUTEsdGhpcykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKXtsZXQgbD1VcyhYXyx0aGlzKS5iZWxvdytVcyhaZCx0aGlzKS50b3ArMTtpZihVcyhVZCx0aGlzKSl7Y29uc3QgZD1V'@;
put 'cyhVZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoVXMoVWQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3AsMTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9yZGVyVG9wLDEwKTts'@;
put 'PVVzKFpkLHRoaXMpLnRvcC1oLWYtMX1VcyhRMSx0aGlzKS5zdHlsZS50b3A9YCR7bH1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKXtsZXQgbD1VcyhaZCx0aGlzKS5sZWZ0O2lmKFVzKFVkLHRoaXMpKXtjb25zdCBhPVVzKFVkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZp'@;
put 'ZXcsZD1OdW1iZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKFVzKFVkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyUmlnaHRXaWR0aCwxMCk7bCs9VXMoWmQsdGhpcykuY2VsbFdpZHRoK2R9ZWxzZSBsKz1VcyhYXyx0aGlzKS5yaWdodDtVcyhRMSx0aGlzKS5z'@;
put 'dHlsZS5sZWZ0PWAke2x9cHhgfXNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKXtsZXQgbD1VcyhYXyx0aGlzKS5sZWZ0K1VzKFpkLHRoaXMpLmxlZnQtVXMoUTEsdGhpcykub2Zmc2V0V2lkdGg7aWYoVXMoVWQsdGhpcykpe2NvbnN0IGE9VXMoVWQsdGhpcykub3duZXJEb2N1bWVudC5kZWZh'@;
put 'dWx0VmlldztsLT1OdW1iZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKFVzKFVkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyTGVmdFdpZHRoLDEwKX1VcyhRMSx0aGlzKS5zdHlsZS5sZWZ0PWAke2x9cHhgfX1mdW5jdGlvbiBQZ2UoYyl7bGV0e2luaXRpYWxQ'@;
put 'YWdlOmw9LTEsc2l6ZTphPSgoKT0+MCksb25JdGVtU2VsZWN0OmQ9KCgpPT57fSksb25DbGVhcjpoPSgoKT0+e30pfT1jO2NvbnN0IGY9bmV3IFNldDtsZXQgdj1BbyhsLC0xLEdlKCktMSk7ZnVuY3Rpb24gTShwdCxkdCl7Y29uc3QgcXQ9R2UoKS0xO3JldHVybiBwdDwwJiYocHQ9cXQpLHB0'@;
put 'PnF0JiYocHQ9MCksZi5oYXMocHQpPy0xOihmLmFkZChwdCksITE9PT1kKHB0LCExKSYmKHB0PU0oMT09PWR0PysrcHQ6LS1wdCxkdCkpLHB0KX1mdW5jdGlvbiBHZSgpe3JldHVybiBNYXRoLm1heChhKCksMCl9cmV0dXJue3NldEN1cnJlbnRQYWdlOmZ1bmN0aW9uIEkocHQpe3B0Pi0xJiZw'@;
put 'dDxHZSgpJiYhMSE9PWQocHQsITApJiYodj1wdCl9LHNldFBhZ2VDdXJzb3JBdDpmdW5jdGlvbiBHKHB0KXtwdD4tMSYmcHQ8R2UoKSYmKHY9cHQpfSxnZXRDdXJyZW50UGFnZTpmdW5jdGlvbiByZSgpe3JldHVybiB2fSx0b0ZpcnN0SXRlbTpmdW5jdGlvbiB1ZSgpe0dlKCk+MCYmKGYuY2xl'@;
put 'YXIoKSx2PU0oMCwxKSl9LHRvTGFzdEl0ZW06ZnVuY3Rpb24geWUoKXtHZSgpPjAmJihmLmNsZWFyKCksdj1NKEdlKCktMSwtMSkpfSx0b05leHRJdGVtOmZ1bmN0aW9uIEVlKCl7R2UoKT4wJiYoZi5jbGVhcigpLHY9TSgrK3YsMSkpfSx0b1ByZXZpb3VzSXRlbTpmdW5jdGlvbiBCZSgpe0dl'@;
put 'KCk+MCYmKGYuY2xlYXIoKSx2PU0oLS12LC0xKSl9LGdldFNpemU6R2UsY2xlYXI6ZnVuY3Rpb24gc3QoKXtmLmNsZWFyKCksdj1sLGgoKX19fWZ1bmN0aW9uIFZKKGMpe3JldHVybiBDdShjLCJzdWJtZW51Iil9ZnVuY3Rpb24gQkooYyl7cmV0dXJuIG5ldyBSZWdFeHAoaW8sImkiKS50ZXN0'@;
put 'KGMubmFtZSl9ZnVuY3Rpb24gUkYoYyxsKXtyZXR1cm4hMD09PWMuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmRpc2FibGVkJiYhMD09PWMuZGlzYWJsZWQuY2FsbChsKX1mdW5jdGlvbiBGZ2UoYyl7cmV0dXJuIEN1KGMsImRpc2FibGVTZWxlY3Rpb24iKX1mdW5jdGlvbiBIZ2Uo'@;
put 'YyxsKXtjb25zdCBhPWMuc2xpY2UoMCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aCYmYVtkXS5uYW1lPT09bDspYS5zaGlmdCgpO3JldHVybiBhfWZ1bmN0aW9uIG0wdChjKXtyZXR1cm4hMD09PWMuY2hlY2thYmxlfWZ1bmN0aW9uIF8wdChjKXtyZXR1cm4obCxhLGQsaCxmLHYpPT57Y29uc3Qg'@;
put 'TT1sLmdldFNvdXJjZURhdGFBdFJvdyhkKSxJPWMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEc9ImZ1bmN0aW9uIj09dHlwZW9mIHY/di5jYWxsKGMpOnYscmU9ImZ1bmN0aW9uIj09dHlwZW9mIE0uYXJpYUxhYmVsP00uYXJpYUxhYmVsLmNhbGwoYyk6TS5hcmlhTGFiZWws'@;
put 'dWU9ImZ1bmN0aW9uIj09dHlwZW9mIE0uYXJpYUNoZWNrZWQ/TS5hcmlhQ2hlY2tlZC5jYWxsKGMpOk0uYXJpYUNoZWNrZWQ7aWYoQXAoYSksRWkoSSwiaHRJdGVtV3JhcHBlciIpLGMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgeWU9IVJGKE0sYykmJiFGZ2UoTSkmJiFCSihNKTtt'@;
put 'cyhhLFsuLi5tMHQoTSk/W1sicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giXSxuXyhyZSksejJlKHVlKV06W1sicm9sZSIsIm1lbnVpdGVtIl0sbl8oRyldLC4uLnllP1trbSgtMSldOltdLC4uLlJGKE0sYyk/W1siYXJpYS1kaXNhYmxlZCIsInRydWUiXV06W10sLi4uVkooTSk/W0IyKCExKV06'@;
put 'W11dKX1hLmNsYXNzTmFtZT0iIixhLmFwcGVuZENoaWxkKEkpLEJKKE0pP0VpKGEsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIE0ucmVuZGVyZXI/KEVpKGEsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksYS5hcHBlbmRDaGlsZChNLnJlbmRlcmVyKGwsSSxkLGgsZixHKSkpOmo3'@;
put 'KEksRyksUkYoTSxjKT9FaShhLCJodERpc2FibGVkIik6RmdlKE0pP0VpKGEsImh0U2VsZWN0aW9uRGlzYWJsZWQiKTpWSihNKSYmRWkoYSwiaHRTdWJtZW51Iil9fWZ1bmN0aW9uIGpKKGMsbCxhKXsoZnVuY3Rpb24gdzB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'Q2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBacChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQzB0KGMpe3ZhciBsPWZ1bmN0aW9uIFMwdChjLGwpe2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy'@;
put 'ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6'@;
put 'ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gekooYyxsLGEpe3JldHVybiBjLnNldChCZ2UoYyxsKSxhKSxhfWZ1bmN0aW9uIFFtKGMsbCl7cmV0dXJuIGMuZ2V0KEJnZShjLGwpKX1mdW5jdGlvbiBCZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBxXz1uZXcgV2Vha01hcCxMRj1uZXcgV2Vha01hcCxPRj1uZXcgV2Vh'@;
put 'a01hcDtjbGFzcyBKX3tnZXQgdGFibGVCb3JkZXJXaWR0aCgpe3JldHVybiB2b2lkIDA9PT1RbShPRix0aGlzKSYmdGhpcy5ob3RNZW51JiZ6SihPRix0aGlzLHBhcnNlSW50KHRoaXMuaG90TWVudS5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5ob3RNZW51LnZpZXcuX3d0Lnd0'@;
put 'VGFibGUuVEFCTEUpLmJvcmRlcldpZHRoLDEwKSksUW0oT0YsdGhpcyl9Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlzO1pwKHRoaXMsImhvdCIsdm9pZCAwKSxacCh0aGlzLCJvcHRpb25zIix2b2lkIDApLFpwKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IFoyKHRoaXMpKSxacCh0aGlzLCJj'@;
put 'b250YWluZXIiLHZvaWQgMCksWnAodGhpcywicG9zaXRpb25lciIsdm9pZCAwKSxacCh0aGlzLCJob3RNZW51IixudWxsKSxacCh0aGlzLCJob3RTdWJNZW51cyIse30pLFpwKHRoaXMsInBhcmVudE1lbnUiLHZvaWQgMCksWnAodGhpcywibWVudUl0ZW1zIixudWxsKSxacCh0aGlzLCJvcmln'@;
put 'T3V0c2lkZUNsaWNrRGVzZWxlY3RzIixudWxsKSxqSih0aGlzLHFfLHZvaWQgMCksakoodGhpcyxMRix2b2lkIDApLGpKKHRoaXMsT0Ysdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz1hfHx7cGFyZW50Om51bGwsbmFtZTpudWxsLGNsYXNzTmFtZToiIixrZWVwSW5WaWV3cG9ydDoh'@;
put 'MCxzdGFuZGFsb25lOiExLG1pbldpZHRoOjIxNSxjb250YWluZXI6dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnR9LHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLnBvc2l0aW9uZXI9bmV3IHMwdCh0aGlzLm9wdGlvbnMua2VlcElu'@;
put 'Vmlld3BvcnQpLHRoaXMucGFyZW50TWVudT10aGlzLm9wdGlvbnMucGFyZW50fHxudWxsLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsLi4uZil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoaCxmKT0+e3RoaXMub3B0'@;
put 'aW9ucy5jb250YWluZXIhPT10aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCYmKGhzKHRoaXMub3B0aW9ucy5jb250YWluZXIsL2h0LXRoZW1lLS4qL2cpLEVpKHRoaXMub3B0aW9ucy5jb250YWluZXIsaCkpLGZ8fHRoaXMuY2xvc2UoKX0pfXJlZ2lzdGVyRXZlbnRzKCl7bGV0IGw9dGhpcy5o'@;
put 'b3Qucm9vdFdpbmRvdztmb3IoO2w7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwibW91c2Vkb3duIixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwidG91Y2hz'@;
put 'dGFydCIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1WNyhsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51'@;
put 'SXRlbXM9bH1nZXROYXZpZ2F0b3IoKXtyZXR1cm4gUW0ocV8sdGhpcyl9Z2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCl7cmV0dXJuIFFtKExGLHRoaXMpfWdldFNlbGVjdGVkSXRlbSgpe3JldHVybiB0aGlzLmhhc1NlbGVjdGVkSXRlbSgpP3RoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRS'@;
put 'b3codGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpWzBdKTpudWxsfWhhc1NlbGVjdGVkSXRlbSgpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKSl9aXNTdWJNZW51KCl7cmV0dXJuIG51bGwhPT10aGlzLnBhcmVudE1lbnV9b3Blbigpe3Ro'@;
put 'aXMucnVuTG9jYWxIb29rcygiYmVmb3JlT3BlbiIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgbD1JRShNPT50aGlzLm9wZW5TdWJNZW51KE0pLDMwMCksYT10aGlzLm9wdGlvbnMubWlu'@;
put 'V2lkdGh8fDIxNTtsZXQgZD0hMSxoPUFtKHRoaXMubWVudUl0ZW1zLE09PihNLmtleT09PUFUJiYoZD0hMCksZnVuY3Rpb24gaDB0KGMsbCl7cmV0dXJuIWMuaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmhpZGRlbiYmYy5oaWRkZW4uY2FsbChsKSl9KE0sdGhpcy5ob3QpKSk7aWYo'@;
put 'aC5sZW5ndGg8MSYmIWQpaC5wdXNoKFJnZSgpW0FUXSk7ZWxzZSBpZigwPT09aC5sZW5ndGgpcmV0dXJuO2g9ZnVuY3Rpb24gZzB0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppbyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9'@;
put 'SGdlKGEsbCksYT1mdW5jdGlvbiBmMHQoYyxsKXtsZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPUhnZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiBwMHQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gS24oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5h'@;
put 'bWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1c2goYSl9KSxsfShhKSxhfShoLGlvKTtsZXQgZj0hMTtjb25zdCB2PXtkYXRhOmgsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpNPT5IYShNKSYmTTxhP2E6TSxhdXRvUm93U2l6'@;
put 'ZTohMSxyZWFkT25seTohMCxlZGl0b3I6ITEsY29weVBhc3RlOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGNvbHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjpfMHQodGhpcy5ob3QpfV0scmVuZGVyQWxsUm93czohMCxmcmFnbWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xpY2tEZXNl'@;
put 'bGVjdHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxiZWZvcmVSZWZyZXNoRGltZW5zaW9uczooKT0+'@;
put 'ITEsYmVmb3JlT25DZWxsTW91c2VPdmVyOihNLEkpPT57dGhpcy5ob3RNZW51LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKT9RbShxXyx0aGlzKS5zZXRDdXJyZW50UGFnZShJLnJvdyk6UW0ocV8sdGhpcykuc2V0UGFnZUN1cnNvckF0KEkucm93KX0sYWZ0ZXJPbkNlbGxNb3VzZU92'@;
put 'ZXI6KE0sSSk9Pnt0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKT9sKEkucm93KTp0aGlzLm9wZW5TdWJNZW51KEkucm93KX0sYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLGpPKCkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuY2xvc2UoITAp'@;
put 'fSxhZnRlclNlbGVjdGlvbjooTSxJLEcscmUsdWUpPT57dGhpcy5ob3RNZW51LnZpZXcuaXNNb3VzZURvd24oKSYmKHVlLnZhbHVlPSEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIix0aGlzLmdldFNlbGVjdGVkSXRlbSgpKX0sYmVmb3JlT25DZWxsTW91c2VV'@;
put 'cDpNPT57dGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKGY9IXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKE0pKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOk09PnsoIWpPKCl8fCFQbShNKSkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJ'@;
put 'dGVtKCkmJihvMygpfHxNJCgpP3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PnRoaXMuY2xvc2UoITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNPcGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3Rl'@;
put 'bigpfX07dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90TWVudT1uZXcgdGhpcy5ob3QuY29uc3RydWN0'@;
put 'b3IodGhpcy5jb250YWluZXIsdiksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmluaXQoKSx6SihxXyx0aGlzLGZ1bmN0aW9uIHYwdChjKXtyZXR1cm4gUGdlKHtzaXplOigpPT5jLmNvdW50Um93cygpLG9uSXRl'@;
put 'bVNlbGVjdChsLGEpe2NvbnN0IGQ9Yy5nZXRDZWxsKGwsMCk7aWYoIWR8fGZ1bmN0aW9uIGwwdChjKXtyZXR1cm4gZ3MoYywiaHRTZXBhcmF0b3IiKX0oZCl8fGZ1bmN0aW9uIHUwdChjKXtyZXR1cm4gZ3MoYywiaHREaXNhYmxlZCIpfShkKXx8ZnVuY3Rpb24gZDB0KGMpe3JldHVybiBncyhj'@;
put 'LCJodFNlbGVjdGlvbkRpc2FibGVkIil9KGQpKXJldHVybiExO2Muc2VsZWN0Q2VsbChsLDAsLi4uYT9bbCwwLCExLCExXTpbXSl9LG9uQ2xlYXIoKXtjLmRlc2VsZWN0Q2VsbCgpfX0pfSh0aGlzLmhvdE1lbnUpKSx6SihMRix0aGlzLGZ1bmN0aW9uIGIwdChjKXtsZXQgbD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT1bXTtmdW5jdGlvbiBkKEcscmUpe00ocmUpLmFkZFNob3J0Y3V0cyhHLHtncm91cDoibWVudSJ9KX1mdW5jdGlvbiBoKEcscmUpe2NvbnN0IHVlPU0ocmUpO0cuZm9yRWFjaCh5ZT0+e2xldHtr'@;
put 'ZXlzOkVlfT15ZTtFZS5mb3JFYWNoKEJlPT51ZS5yZW1vdmVTaG9ydGN1dHNCeUtleXMoQmUpKX0pLGEucHVzaCh7c2hvcnRjdXRzOkcsY29udGV4dE5hbWU6cmV9KSxkKEcscmUpfWZ1bmN0aW9uIHYoRyl7cmV0dXJuIEc/YG1lbnU6JHtHfWA6Im1lbnUifWZ1bmN0aW9uIE0oRyl7dmFyIHJl'@;
put 'O2NvbnN0IHVlPWMuaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKSx5ZT12KEcpO3JldHVybiBudWxsIT09KHJlPXVlLmdldENvbnRleHQoeWUpKSYmdm9pZCAwIT09cmU/cmU6dWUuYWRkQ29udGV4dCh5ZSl9cmV0dXJuIGQoZnVuY3Rpb24geTB0KGMpe2NvbnN0e2hvdDpsLGhvdE1lbnU6'@;
put 'YX09YztyZXR1cm5be2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxmb3J3YXJkVG9Db250ZXh0OmwuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT5jLmNsb3NlKCEwKX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFj'@;
put 'azooZCxoKT0+e2NvbnN0IGY9bC5nZXRTZXR0aW5ncygpLHY9ImZ1bmN0aW9uIj09dHlwZW9mIGYudGFiTW92ZXM/Zi50YWJNb3ZlcyhkKTpmLnRhYk1vdmVzO2guaW5jbHVkZXMoInNoaWZ0Iik/bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXYucm93LC12LmNvbCk6bC5zZWxlY3Rpb24u'@;
put 'dHJhbnNmb3JtU3RhcnQodi5yb3csdi5jb2wpLGMuY2xvc2UoITApfX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT5jLmNsb3NlKCl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b05leHRJdGVtKCl9LHtrZXlzOltbIkFycm93'@;
put 'VXAiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9QcmV2aW91c0l0ZW0oKX0se2tleXM6W1tsLmlzUnRsKCk/IkFycm93TGVmdCI6IkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBkPWEuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYoZCl7Y29uc3QgaD1jLm9wZW5TdWJN'@;
put 'ZW51KGRbMF0pO2gmJmguZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19fSx7a2V5czpbW2wuaXNSdGwoKT8iQXJyb3dSaWdodCI6IkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCkmJmMuaXNTdWJNZW51KCkmJihjLmNsb3NlKCksYy5pc1N1Yk1lbnUo'@;
put 'KSYmYy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dVcCJdLFsiSG9tZSJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd0Rvd24iXSxbIkVu'@;
put 'ZCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxjYWxsYmFjazpkPT57Y29uc3QgaD1hLmdldFNlbGVjdGVkTGFzdCgpO2gmJihhLmdldFNvdXJjZURhdGFBdFJvdyhoWzBdKS5zdWJtZW51P2Mub3BlblN1'@;
put 'Yk1lbnUoaFswXSkuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKTooYy5leGVjdXRlQ29tbWFuZChkKSxjLmNsb3NlKCEwKSkpfX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZExhc3QoKT9hLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtYS5jb3Vu'@;
put 'dFZpc2libGVSb3dzKCksMCk6Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkTGFzdCgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEuY291bnRWaXNpYmxlUm93cygpLDApOmMuZ2V0TmF2'@;
put 'aWdhdG9yKCkudG9MYXN0SXRlbSgpfX1dfShjKSksbC5mb3JFYWNoKEc9PntsZXR7c2hvcnRjdXRzOnJlLGNvbnRleHROYW1lOnVlfT1HO2gocmUsdWUpfSkse2FkZEN1c3RvbVNob3J0Y3V0czpoLGdldEN1c3RvbVNob3J0Y3V0czpmdW5jdGlvbiBmKCl7cmV0dXJuWy4uLmFdfSxnZXRDb250'@;
put 'ZXh0Ok0sbGlzdGVuOmZ1bmN0aW9uIEkoRyl7Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKHYoRykpfX19KHRoaXMpKSxRbShMRix0aGlzKS5saXN0ZW4oKSx0aGlzLmZvY3VzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2so'@;
put 'ImFmdGVyT3BlbiIsKCk9PnRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclN1Ym1lbnVPcGVuIix0aGlzKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlck9wZW4iLHRoaXMpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0m'@;
put 'JmFyZ3VtZW50c1swXTtpZih0aGlzLmlzT3BlbmVkKCkpaWYobCYmdGhpcy5pc1N1Yk1lbnUoKSl0aGlzLnBhcmVudE1lbnUuY2xvc2UoKTtlbHNlIGlmKFFtKHFfLHRoaXMpLmNsZWFyKCksdGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9u'@;
put 'ZSIsdGhpcy5ob3RNZW51LmRlc3Ryb3koKSx0aGlzLmhvdE1lbnU9bnVsbCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIiksdGhpcy5pc1N1Yk1l'@;
put 'bnUoKSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgYT10aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTthJiZtcyh0aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRDZWxsKGFbMF0sMCksW0IyKCExKV0pfXRoaXMucGFyZW50TWVudS5o'@;
put 'b3RNZW51Lmxpc3RlbigpfX1vcGVuU3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIGMwdChjKXtyZXR1cm4gZ3MoYywiaHRTdWJtZW51Iil9'@;
put 'KGEpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyBKXyh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMu'@;
put 'b3B0aW9ucy5jb250YWluZXJ9KTtyZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFn'@;
put 'cyYmbXMoYSxbQjIoITApXSksaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGQ9dGhpcy5ob3RTdWJNZW51c1thLmtleV07aWYoZCl7ZC5kZXN0cm95KCksZGVsZXRlIHRoaXMuaG90U3ViTWVudXNbYS5rZXldO2NvbnN0IGg9dGhp'@;
put 'cy5ob3RNZW51LmdldENlbGwobCwwKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZtcyhoLFtCMighMSldKX19Y2xvc2VBbGxTdWJNZW51cygpe0tuKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1Yk1lbnVzQ2xvc2Vk'@;
put 'KCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9Zm9jdXMoKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3Rl'@;
put 'bigpLHRoaXMuaG90TWVudS5saXN0ZW4oKSl9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1v'@;
put 'dmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lm'@;
put 'KHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIG8wdChjKXtyZXR1cm4geW8oYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIo'@;
put 'KSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXND'@;
put 'b21tYW5kUGFzc2l2ZShsKXtyZXR1cm4hMT09PWwuaXNDb21tYW5kfHxCSihsKXx8UkYobCx0aGlzLmhvdCl8fFZKKGwpfXNldE9mZnNldChsKXt0aGlzLnBvc2l0aW9uZXIuc2V0T2Zmc2V0KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd'@;
put 'OjApfXNldFBvc2l0aW9uKGwpe3RoaXMuaXNTdWJNZW51KCkmJnRoaXMucG9zaXRpb25lci5zZXRQYXJlbnRFbGVtZW50KHRoaXMucGFyZW50TWVudS5jb250YWluZXIpLHRoaXMucG9zaXRpb25lci5zZXRFbGVtZW50KHRoaXMuY29udGFpbmVyKS51cGRhdGVQb3NpdGlvbihsKX11cGRhdGVN'@;
put 'ZW51RGltZW5zaW9ucygpe2NvbnN0e3d0VGFibGU6bH09dGhpcy5ob3RNZW51LnZpZXcuX3d0LGE9dGhpcy5ob3RNZW51LmdldFNldHRpbmdzKCkuZGF0YSxkPWwuaGlkZXIuc3R5bGUsaD1sLmhvbGRlci5zdHlsZSxmPXBhcnNlSW50KGQud2lkdGgsMTApLHY9R3UoYSwoTSxJLEcpPT57Y29u'@;
put 'c3QgdWU9dGhpcy5ob3RNZW51LmdldENlbGwoRywwKT9TdSh0aGlzLmhvdE1lbnUuZ2V0Q2VsbChHLDApKTowO3JldHVybiBNKyhJLm5hbWU9PT1pbz8xOnVlKX0sMCk7dGhpcy5ob3RNZW51LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKT8oaC53aWR0aD1gJHtmKzN9cHhgLGguaGVp'@;
put 'Z2h0PWAke3YrM31weGApOihoLndpZHRoPWAke2Z9cHhgLGguaGVpZ2h0PWAke3Z9cHhgKSxkLmhlaWdodD1oLmhlaWdodH1jcmVhdGVDb250YWluZXIoKXtjb25zdCBhPXRoaXMub3B0aW9ucy5jb250YWluZXIub3duZXJEb2N1bWVudDtsZXQgaCxkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p'@;
put 'ZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBkJiYoZmwoZCkmJihkPWQuY2FsbCh0aGlzLmhvdCksZD1udWxsPT09ZHx8YmMoZCk/IiI6ZC50b1N0cmluZygpKSxkPWQucmVwbGFjZSgvW15BLVphLXowLTldL2csIl8iKSxkPWAke3RoaXMub3B0aW9ucy5jbGFz'@;
put 'c05hbWV9U3ViXyR7ZH1gLGg9YS5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfS4ke2R9YCkpLGh8fChoPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksRWkoaCxgaHRNZW51IGhhbmRzb250YWJsZSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmRWkoaCxkKSx0'@;
put 'aGlzLm9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofW9uQWZ0ZXJJbml0KCl7dGhpcy51cGRhdGVNZW51RGltZW5zaW9ucygpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJm1zKHRoaXMuaG90TWVudS5yb290RWxlbWVudCxbWyJyb2xlIiwibWVudSJdLGttKC0x'@;
put 'KV0pfW9uRG9jdW1lbnRNb3VzZURvd24obCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5vcHRpb25zLnN0YW5kYWxvbmUmJnRoaXMuaG90TWVudSYmIUltKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCl8fCh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKXx8dGhpcy5pc1N1Yk1l'@;
put 'bnUoKSkmJiFJbShsLnRhcmdldCwiLmh0TWVudSIpKSYmdGhpcy5jbG9zZSghMCl9b25Eb2N1bWVudENvbnRleHRNZW51KGwpe3RoaXMuaXNPcGVuZWQoKSYmZ3MobC50YXJnZXQsImh0Q29yZSIpJiZJbShsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpJiZsLnByZXZlbnREZWZh'@;
put 'dWx0KCl9fWZ1bmN0aW9uIFVKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFMHQoYyl7dmFyIGw9ZnVuY3Rpb24gVDB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs'@;
put 'KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci'@;
put 'KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBQRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eGwoSl8seTEpO2NvbnN0IERUPSJjb250ZXh0TWVudSIsemdlPURUO01h'@;
put 'LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29udGV4dE1lbnVTaG93IiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVTaG93IiksTWEu'@;
put 'Z2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVIaWRlIiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVFeGVjdXRlIik7dmFyIElUPW5ldyBXZWFrU2V0O2NsYXNzIEZGIGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5h'@;
put 'cmd1bWVudHMpLGZ1bmN0aW9uIE0wdChjLGwpeyhmdW5jdGlvbiB4MHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhp'@;
put 'cyxJVCksVUoodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcga2dlKHRoaXMuaG90KSksVUoodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxVSih0aGlzLCJtZW51IixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gRFR9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXty'@;
put 'ZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW0FGLGtGLGlvLE1ULHhULGlvLFRGLFRULGlvLERGLEVGLGlvLEVULGlvLGVmXX1pc0VuYWJsZWQoKXtyZXR1cm4h'@;
put 'IXRoaXMuaG90LmdldFNldHRpbmdzKClbRFRdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbRFRdOyJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5z'@;
put 'ZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IEpfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudH0pLHRoaXMubWVudS5h'@;
put 'ZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT5QRihJVCx0aGlzLEQwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+UEYoSVQsdGhpcyxJMHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5Q'@;
put 'RihJVCx0aGlzLFIwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGwuZXhlY3V0'@;
put 'ZUNvbW1hbmQuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixkPT5QRihJVCx0aGlzLGswdCkuY2FsbCh0aGlzLGQpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNh'@;
put 'YmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW51bGwpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRp'@;
put 'c2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIkJhY2tzbGFzaCJdLFsiU2hpZnQiLCJGMTAiXV0sY2FsbGJhY2s6'@;
put 'KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCk7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsKGwucm93LGwuY29sLCEwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWJGKHRoaXMubWVu'@;
put 'dS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2QubGVmdCx0b3A6YS50b3ArZC50b3AtMSthLmhlaWdodH0se2xlZnQ6YS53aWR0aCxhYm92ZTotYS5oZWlnaHR9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0s'@;
put 'cnVuT25seUlmOigpPT57dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBhJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSYmIXRoaXMubWVudS5pc09w'@;
put 'ZW5lZCgpfSxncm91cDp6Z2V9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoemdlKX1vcGVuKGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtpZihudWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpKXJldHVybjt0aGlzLnByZXBhcmVNZW51SXRlbXMoKSx0aGlzLm1lbnUub3BlbigpO2NvbnN0'@;
put 'IGg9dGhpcy5tZW51LnRhYmxlQm9yZGVyV2lkdGg+MDtxcyhkLChmLHYpPT57Y29uc3QgTT1bImJlbG93IiwicmlnaHQiXS5pbmNsdWRlcyh2KT9mKzE6Zi0xO3RoaXMubWVudS5zZXRPZmZzZXQodixoP2Y6TSl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCl9Y2xvc2UoKXt2YXIgbDtudWxs'@;
put 'PT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGx9ZXhlY3V0ZUNvbW1hbmQobCl7bnVsbD09PXRoaXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB'@;
put 'cnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShsLC4uLmQpfXByZXBhcmVNZW51SXRlbXMoKXt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgTGdlKHRoaXMuaG90LEZGLkRFRkFVTFRfSVRFTVMpO2NvbnN0IGw9'@;
put 'dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtEVF0sYT17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMobCl9O3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGEpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhhLml0ZW1z'@;
put 'KTtjb25zdCBkPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGwpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixkKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGQpLEtuKGQsaD0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGgua2V5'@;
put 'LGgpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGswdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKCksYT1sLnJvd0hlYWRlcnMsZD1sLmNvbEhlYWRlcnMsZj1jLnRhcmdldDtp'@;
put 'Zih0aGlzLmNsb3NlKCksZ3MoZiwiaGFuZHNvbnRhYmxlSW5wdXQiKXx8KGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLCEoYXx8ZHx8ZnVuY3Rpb24gaChNKXtyZXR1cm4iVEQiPT09TS5ub2RlTmFtZXx8IlREIj09PU0ucGFyZW50Tm9kZS5ub2RlTmFtZX0oZil8fGdz'@;
put 'KGYsImN1cnJlbnQiKSYmZ3MoZiwid3RCb3JkZXIiKSkpKXJldHVybjtjb25zdCB2PWJGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe3RvcDpjLmNsaWVudFkrdi50b3AsbGVmdDpjLmNsaWVudFgrdi5sZWZ0fSl9ZnVuY3Rpb24gRDB0KCl7'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gSTB0KCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBSMHQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0'@;
put 'ZXJDb250ZXh0TWVudUhpZGUiLHRoaXMpfUZGLlNFUEFSQVRPUj17bmFtZTppb307Y2xhc3MgTjB0e2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgVjB0e2Nv'@;
put 'bnN0cnVjdG9yKCl7dGhpcy5jbGlwYm9hcmREYXRhPW5ldyBOMHR9cHJldmVudERlZmF1bHQoKXt9Y29tcG9zZWRQYXRoKCl7cmV0dXJuW119fWZ1bmN0aW9uIFFfKGMsbCxhKXtVZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZWQoYyxsKXtyZXR1cm4gYy5nZXQodHcoYyxsKSl9ZnVuY3Rpb24gZXcoYyxsLGEpe3JldHVybiBjLnNldCh0dyhjLGwpLGEpLGF9ZnVuY3Rpb24g'@;
put 'dHcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBlNj1uZXcgV2Vha01h'@;
put 'cCxaSj1uZXcgV2Vha01hcCxSVD1uZXcgV2Vha01hcCxXSj1uZXcgV2Vha01hcCxZSj1uZXcgV2Vha01hcCxMVD1uZXcgV2Vha01hcCxPVD1uZXcgV2Vha1NldDtjbGFzcyBqMHR7Y29uc3RydWN0b3IobCl7bGV0e2NvdW50Um93czphLGNvdW50Q29sdW1uczpkLHJvd3NMaW1pdDpoLGNvbHVt'@;
put 'bnNMaW1pdDpmLGNvdW50Q29sdW1uSGVhZGVyczp2fT1sOyhmdW5jdGlvbiBCMHQoYyxsKXtVZ2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsT1QpLFFfKHRoaXMsZTYsdm9pZCAwKSxRXyh0aGlzLFpKLHZvaWQgMCksUV8odGhpcyxSVCx2b2lkIDApLFFfKHRoaXMsV0osdm9pZCAwKSxRXyh0aGlz'@;
put 'LFlKLHZvaWQgMCksUV8odGhpcyxMVCx2b2lkIDApLGV3KFpKLHRoaXMsYSksZXcoUlQsdGhpcyxkKSxldyhXSix0aGlzLGgpLGV3KFlKLHRoaXMsZiksZXcoTFQsdGhpcyx2KX1zZXRTZWxlY3RlZFJhbmdlKGwpe2V3KGU2LHRoaXMsbCl9Z2V0Q2VsbHNSYW5nZSgpe2lmKDA9PT1lZChaSix0'@;
put 'aGlzKS5jYWxsKHRoaXMpfHwwPT09ZWQoUlQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtyb3c6bCxjb2w6YX09ZWQoZTYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmQsY29sOmh9PWVkKGU2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGY9dHcoT1QsdGhp'@;
put 'cyx6MHQpLmNhbGwodGhpcyxsLGQpLHY9dHcoT1QsdGhpcyxHSikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09dixzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOnZ9fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtp'@;
put 'ZigwPT09ZWQoUlQsdGhpcykuY2FsbCh0aGlzKXx8MD09PWVkKExULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PWVkKGU2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1lZChlNix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPXR3KE9ULHRo'@;
put 'aXMsR0opLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PWVkKFJULHRoaXMpLmNhbGwodGhpcyl8fDA9PT1lZChMVCx0aGlz'@;
put 'KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1lZChlNix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09ZWQoZTYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD10dyhPVCx0aGlzLEdKKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6'@;
put 'YSE9PWQsc3RhcnRSb3c6LWVkKExULHRoaXMpLmNhbGwodGhpcyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBHSihjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrZWQoWUosdGhpcykuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiB6MHQoYyxsKXty'@;
put 'ZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK2VkKFdKLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gWmdlKGMpe2NvbnN0IGw9W10sYT1bXTtyZXR1cm4gS24oYyxkPT57S2EoTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJv'@;
put 'dyksST0+ey0xPT09bC5pbmRleE9mKEkpJiZsLnB1c2goSSl9KSxLYShNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29sLGQuZW5kQ29sKSxJPT57LTE9PT1hLmluZGV4T2YoSSkmJmEucHVzaChJKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9u'@;
put 'IHQ2KGMsbCxhKXtXZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFdnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUFQoYyxsLGEp'@;
put 'e3JldHVybihsPWZ1bmN0aW9uIFowdChjKXt2YXIgbD1mdW5jdGlvbiBXMHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl'@;
put 'Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg'@;
put 'bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFdkKGMsbCl7cmV0dXJuIGMuZ2V0KFlkKGMsbCkpfWZ1bmN0aW9uIHYzKGMsbCxhKXty'@;
put 'ZXR1cm4gYy5zZXQoWWQoYyxsKSxhKSxhfWZ1bmN0aW9uIFlkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQg'@;
put 'b24gdGhpcyBvYmplY3QiKX1NYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5TGltaXQiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5Q29weWFibGVSYW5nZSIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDdXQiKSxNYS5nZXRTaW5nbGV0'@;
put 'b24oKS5yZWdpc3RlcigiYWZ0ZXJDdXQiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUGFzdGUiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJQYXN0ZSIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb3B5IiksTWEuZ2V0U2luZ2xldG9u'@;
put 'KCkucmVnaXN0ZXIoImFmdGVyQ29weSIpO2NvbnN0ICRKPSJjb3B5UGFzdGUiLEcwdD1bImZyYWdtZW50U2VsZWN0aW9uIl0sWWdlPVsnPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJIYW5kc29udGFibGUiLz4nLCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnRke3doaXRlLXNwYWNl'@;
put 'Om5vcm1hbH1icnttc28tZGF0YS1wbGFjZW1lbnQ6c2FtZS1jZWxsfTwvc3R5bGU+J10uam9pbigiIik7dmFyIEtKPW5ldyBXZWFrTWFwLFhKPW5ldyBXZWFrTWFwLHFKPW5ldyBXZWFrTWFwLG53PW5ldyBXZWFrTWFwLEhGPW5ldyBXZWFrTWFwLE5GPW5ldyBXZWFrTWFwLHJ3PW5ldyBXZWFr'@;
put 'TWFwLFZGPW5ldyBXZWFrTWFwLE5oPW5ldyBXZWFrU2V0O2NsYXNzICQwdCBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBVMHQoYyxsKXtXZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxOaCksUFQodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLFBU'@;
put 'KHRoaXMsInJvd3NMaW1pdCIsMS8wKSxQVCh0aGlzLCJwYXN0ZU1vZGUiLCJvdmVyd3JpdGUiKSxQVCh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLHQ2KHRoaXMsS0osITEpLHQ2KHRoaXMsWEosITEpLHQ2KHRoaXMscUosITEpLHQ2KHRoaXMsbncsImNl'@;
put 'bGxzLW9ubHkiKSx0Nih0aGlzLEhGLCExKSx0Nih0aGlzLE5GLCExKSx0Nih0aGlzLHJ3LG5ldyBqMHQoe2NvdW50Um93czooKT0+dGhpcy5ob3QuY291bnRSb3dzKCksY291bnRDb2x1bW5zOigpPT50aGlzLmhvdC5jb3VudENvbHMoKSxyb3dzTGltaXQ6KCk9PnRoaXMucm93c0xpbWl0LGNv'@;
put 'bHVtbnNMaW1pdDooKT0+dGhpcy5jb2x1bW5zTGltaXQsY291bnRDb2x1bW5IZWFkZXJzOigpPT50aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSkpLHQ2KHRoaXMsVkYsITEpLFBUKHRoaXMsImNvcHlhYmxlUmFuZ2VzIixbXSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7'@;
put 'cmV0dXJuICRKfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuWyRKLC4uLkcwdF19c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gODB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3Bhc3RlTW9kZToib3ZlcndyaXRlIixyb3dzTGltaXQ6MS8w'@;
put 'LGNvbHVtbnNMaW1pdDoxLzAsY29weUNvbHVtbkhlYWRlcnM6ITEsY29weUNvbHVtbkdyb3VwSGVhZGVyczohMSxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITF9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVskSl19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYSxkPXRo'@;
put 'aXM7dGhpcy5lbmFibGVkfHwodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PShsPXRoaXMuZ2V0U2V0dGluZygicGFzdGVNb2RlIikpJiZ2b2lkIDAhPT1sP2w6dGhpcy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4odGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSk/dGhpcy5yb3dzTGlt'@;
put 'aXQ6dGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpKT90aGlzLmNvbHVtbnNMaW1pdDp0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpLHYzKEtKLHRoaXMsdGhpcy5nZXRTZXR0aW5n'@;
put 'KCJjb3B5Q29sdW1uSGVhZGVycyIpKSx2MyhYSix0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkdyb3VwSGVhZGVycyIpKSx2MyhxSix0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnNPbmx5IikpLHRoaXMudWlDb250YWluZXI9bnVsbCE9PShhPXRoaXMuZ2V0'@;
put 'U2V0dGluZygidWlDb250YWluZXIiKSkmJnZvaWQgMCE9PWE/YTp0aGlzLnVpQ29udGFpbmVyLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixoPT5ZZChOaCx0aGlzLHEwdCkuY2FsbCh0aGlzLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBZZChOaCxkLEowdCkuY2FsbChkLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PllkKE5oLHRoaXMs'@;
put 'UTB0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY29weSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkNvcHkoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5o'@;
put 'b3Qucm9vdERvY3VtZW50LCJjdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DdXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJwYXN0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblBhc3RlKC4uLmFyZ3Vt'@;
put 'ZW50cyl9KSxzXygpJiYodGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VlbnRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3Vt'@;
put 'ZW50c1t2XTtyZXR1cm4gWWQoTmgsZCxlMXQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJy'@;
put 'YXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIFlkKE5oLGQsdDF0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+WWQoTmgsdGhpcyxuMXQpLmNhbGwodGhpcykpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1'@;
put 'Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfWNvcHkoKXt2Myhudyx0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'P2FyZ3VtZW50c1swXToiY2VsbHMtb25seSIpLHYzKEhGLHRoaXMsITApLFlkKE5oLHRoaXMsR2dlKS5jYWxsKHRoaXMsImNvcHkiKX1jb3B5Q2VsbHNPbmx5KCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9Y29weUNvbHVtbkhlYWRlcnNPbmx5KCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVy'@;
put 'cy1vbmx5Iil9Y29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9Y29weVdpdGhDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIil9Y3V0KCl7djMoTkYsdGhpcywhMCksWWQoTmgsdGhpcyxH'@;
put 'Z2UpLmNhbGwodGhpcywiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiByVCh0aGlzLmdldFJhbmdlZERhdGEobCkpfWdldFJhbmdlZERhdGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09WmdlKGwpO3JldHVybiBLbihkLGY9Pntjb25zdCB2PVtdO0tuKGgs'@;
put 'TT0+e3YucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKE0sZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsTSkpfSksYS5wdXNoKHYpfSksYX1wYXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgVjB0O2wmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9o'@;
put 'dG1sIixhKSx0aGlzLm9uUGFzdGUoZCl9c2V0Q29weWFibGVUZXh0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtpZihsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuIHZvaWQodGhpcy5jb3B5YWJsZVJhbmdlcz1bXSk7V2QocncsdGhpcyku'@;
put 'c2V0U2VsZWN0ZWRSYW5nZShsKTtjb25zdCBhPW5ldyBNYXAoW1siaGVhZGVycyIsbnVsbF0sWyJjZWxscyIsbnVsbF1dKTsiY29sdW1uLWhlYWRlcnMtb25seSI9PT1XZChudyx0aGlzKT9hLnNldCgiaGVhZGVycyIsV2QocncsdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5n'@;
put 'ZSgpKTooIndpdGgtY29sdW1uLWhlYWRlcnMiPT09V2QobncsdGhpcyk/YS5zZXQoImhlYWRlcnMiLFdkKHJ3LHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6IndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiPT09V2QobncsdGhpcykmJmEuc2V0KCJoZWFkZXJzIixX'@;
put 'ZChydyx0aGlzKS5nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKSksYS5zZXQoImNlbGxzIixXZChydyx0aGlzKS5nZXRDZWxsc1JhbmdlKCkpKSx0aGlzLmNvcHlhYmxlUmFuZ2VzPUFycmF5LmZyb20oYS52YWx1ZXMoKSkuZmlsdGVyKGg9Pm51bGwhPT1oKS5tYXAoaD0+e2xldHtzdGFydFJv'@;
put 'dzpmLHN0YXJ0Q29sOnYsZW5kUm93Ok0sZW5kQ29sOkl9PWg7cmV0dXJue3N0YXJ0Um93OmYsc3RhcnRDb2w6dixlbmRSb3c6TSxlbmRDb2w6SX19KSx0aGlzLmNvcHlhYmxlUmFuZ2VzPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIix0aGlzLmNvcHlhYmxlUmFuZ2Vz'@;
put 'KTtjb25zdCBkPWEuZ2V0KCJjZWxscyIpO2lmKG51bGwhPT1kJiZkLmlzUmFuZ2VUcmltbWVkKXtjb25zdHtzdGFydFJvdzpoLHN0YXJ0Q29sOmYsZW5kUm93OnYsZW5kQ29sOk19PWQ7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weUxpbWl0Iix2LWgrMSxNLWYrMSx0aGlzLnJvd3NMaW1p'@;
put 'dCx0aGlzLmNvbHVtbnNMaW1pdCl9fWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5sZW5ndGgpcmV0dXJuO2NvbnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6dixjb2w6TX09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6'@;
put 'SSxjb2w6R309YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgcmU9dix1ZT1NLHllPXYsRWU9TTtmb3IoO2YubGVuZ3RoPGR8fHJlPD1JOyl7Y29uc3R7c2tpcFJvd09uUGFzdGU6QmUsdmlzdWFsUm93OkdlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShyZSxNKTtpZihyZT1HZSsxLCEwPT09QmUp'@;
put 'Y29udGludWU7eWU9R2UsdWU9TTtjb25zdCBzdD1bXSxwdD1mLmxlbmd0aCVkO2Zvcig7c3QubGVuZ3RoPGh8fHVlPD1HOyl7Y29uc3R7c2tpcENvbHVtbk9uUGFzdGU6ZHQsdmlzdWFsQ29sOnF0fT10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LHVlKTsodWU9cXQrMSwhMCE9PWR0KSYmKEVlPXF0'@;
put 'LHN0LnB1c2gobFtwdF1bc3QubGVuZ3RoJWhdKSl9Zi5wdXNoKHN0KX1yZXR1cm4gdjMoVkYsdGhpcywhMCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkodixNLGYsdm9pZCAwLHZvaWQgMCwiQ29weVBhc3RlLnBhc3RlIix0aGlzLnBhc3RlTW9kZSksW3YsTSx5ZSxFZV19b25Db3B5KGwp'@;
put 'e2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFXZChIRix0aGlzKXx8dGhpcy5pc0Vk'@;
put 'aXRvck9wZW5lZCgpfHxrcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhTUUoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSx2MyhIRix0aGlzLCExKTtjb25z'@;
put 'dCBmPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSx2PVlkKE5oLHRoaXMsSzB0KS5jYWxsKHRoaXMsdGhpcy5jb3B5YWJsZVJhbmdlcyk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvcHkiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyx2KSl7Y29uc3QgST1yVChm'@;
put 'KTtpZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IEc9cSQoZik7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLEkpLGwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtZZ2UsR10uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYm'@;
put 'dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLEkpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHkiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyx2KX12Myhudyx0aGlzLCJjZWxscy1vbmx5Iil9b25DdXQobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgp'@;
put 'WzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIVdkKE5GLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fGtwKGEpJiYoaCYm'@;
put 'YSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiFNRShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLHYzKE5GLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRo'@;
put 'aXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDdXQiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcykpe2NvbnN0IE09clQoZik7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBJPXEkKGYpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixN'@;
put 'KSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbWWdlLEldLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixNKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2Vs'@;
put 'bHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyl9fW9uUGFzdGUobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgpWzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/'@;
put 'Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwhdGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKXx8a3AoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIU1F'@;
put 'KGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bGV0IGY7aWYobC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNsaXBib2FyZERhdGE8InUiKXtjb25zdCByZT1QTyhsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9odG1sIikse0FERF9UQUdTOlsibWV0YSJdLEFERF9B'@;
put 'VFRSOlsiY29udGVudCJdLEZPUkNFX0JPRFk6ITB9KTtmPXJlJiYvKDx0YWJsZSl8KDxUQUJMRSkvZy50ZXN0KHJlKT9rZmUocmUsdGhpcy5ob3Qucm9vdERvY3VtZW50KS5kYXRhOmwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZl'@;
put 'bnQ+InUiJiZ0eXBlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhPCJ1IiYmKGY9dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mdW5jdGlvbiBWcnQoYyl7Y29uc3QgbD1bWyIiXV07'@;
put 'aWYoMD09PWMubGVuZ3RoKXJldHVybiBsO2xldCBoLGE9MCxkPTA7Zm9yKDtjLmxlbmd0aD4wJiZoIT09Yy5sZW5ndGg7KWlmKGg9Yy5sZW5ndGgsYy5tYXRjaCh3cGUpKWM9Yy5yZXBsYWNlKHdwZSwiIiksYSs9MSxsW2RdW2FdPSIiO2Vsc2UgaWYoYy5tYXRjaChfcGUpKWM9Yy5yZXBsYWNl'@;
put 'KF9wZSwiIiksYT0wLGQrPTEsbFtkXT1bIiJdO2Vsc2V7bGV0IGY9IiI7aWYoYy5zdGFydHNXaXRoKCciJykpe2xldCB2PTAsTT0hMDtmb3IoO007KXtjb25zdCBJPWMuc2xpY2UoMCwxKTsnIic9PT1JJiYodis9MSksZis9SSwoMD09PShjPWMuc2xpY2UoMSkpLmxlbmd0aHx8Yy5tYXRjaCgv'@;
put 'XltcdFxyXG5dLykmJnYlMj09MCkmJihNPSExKX1mPWYucmVwbGFjZSgvXiIvLCIiKS5yZXBsYWNlKC8iJC8sIiIpLnJlcGxhY2UoL1siXSovZyxJPT5uZXcgQXJyYXkoTWF0aC5mbG9vcihJLmxlbmd0aC8yKSkuZmlsbCgnIicpLmpvaW4oIiIpKX1lbHNle2NvbnN0IHY9Yy5tYXRjaChOcnQp'@;
put 'O2Y9dj92WzBdOiIiLGM9Yy5zbGljZShmLmxlbmd0aCl9bFtkXVthXT1mfXJldHVybiBsfShmKSksdm9pZCAwPT09Znx8ZiYmMD09PWYubGVuZ3RofHwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQYXN0ZSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKSlyZXR1cm47Y29uc3RbdixNLEks'@;
put 'R109dGhpcy5wb3B1bGF0ZVZhbHVlcyhmKTt0aGlzLmhvdC5zZWxlY3RDZWxsKHYsTSxNYXRoLm1pbih0aGlzLmhvdC5jb3VudFJvd3MoKS0xLEkpLE1hdGgubWluKHRoaXMuaG90LmNvdW50Q29scygpLTEsRykpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhc3RlIixmLHRoaXMuY29weWFi'@;
put 'bGVSYW5nZXMpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEdnZShjKXtpZihzXygpKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYobCl7Y29uc3R7cm93OmEsY29sOmR9PWwuaGlnaGxpZ2h0LGg9dGhpcy5ob3QuZ2V0Q2VsbChhLGQsITAp'@;
put 'O2gmJnVmZShoLCgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfSl9fWVsc2UgdGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfWZ1bmN0aW9uIEswdChjKXtjb25zdHtyb3dzOmx9PVpnZShjKTtsZXQgYT0wO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGgm'@;
put 'JiEobFtkXT49MCk7ZCsrKWErPTE7cmV0dXJue2NvbHVtbkhlYWRlcnNDb3VudDphfX1mdW5jdGlvbiBYMHQoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygpKXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoYyl7Y29uc3R7cm93OmwsY29sOmF9PWMuaGlnaGxp'@;
put 'Z2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO2QmJkYkKGQpfX19ZnVuY3Rpb24gJGdlKCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1jLmhpZ2hsaWdodCxkPXRo'@;
put 'aXMuaG90LmdldENlbGwobCxhLCEwKTtudWxsIT1kJiZkLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikmJkgkKGQpfX19ZnVuY3Rpb24gcTB0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gTDB0KGMpe3JldHVybntrZXk6ImNvcHkiLG5hbWUoKXty'@;
put 'ZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHJYKX0sY2FsbGJhY2soKXtjLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0'@;
put 'KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFdkKEtKLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gRjB0KGMpe3JldHVybntrZXk6ImNvcHlf'@;
put 'd2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9BbyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpWCxhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRoQ29sdW1uSGVhZGVy'@;
put 'cygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0'@;
put 'aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksV2QoWEosdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiBQMHQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9ncm91cF9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP0FvKGwuZ2V0'@;
put 'V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGFYLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRl'@;
put 'cnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFdkKHFKLHRoaXMpJiZj'@;
put 'Lml0ZW1zLnB1c2goZnVuY3Rpb24gTzB0KGMpe3JldHVybntrZXk6ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9BbyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShzWCxhKX0sY2FsbGJhY2soKXtjLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEw'@;
put 'O2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIEgwdChjKXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG9YKX0sY2FsbGJh'@;
put 'Y2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5n'@;
put 'ZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gSjB0KGMsbCxhLGQsaCl7V2QoVkYsdGhpcykmJihoLnZhbHVlPSEwKSx2MyhWRix0aGlzLCExKX1mdW5jdGlvbiBRMHQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fHRoaXMuaG90'@;
put 'LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuc2V0Q29weWFibGVUZXh0KCl9ZnVuY3Rpb24gZTF0KCl7WWQoTmgsdGhpcywkZ2UpLmNhbGwodGhpcyl9ZnVuY3Rpb24gdDF0KCl7WWQoTmgsdGhpcyxYMHQpLmNhbGwodGhpcyl9ZnVuY3Rpb24gbjF0KCl7WWQoTmgsdGhp'@;
put 'cywkZ2UpLmNhbGwodGhpcyl9ZnVuY3Rpb24gS2dlKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gSkooYyl7dmFyIGwsYTtyZXR1cm4oSGEoYy5zdGFydCl8fEhhKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5zdGFydCkmJnZvaWQgMCE9PWw/bDpj'@;
put 'LmxlZnQpLChIYShjLmVuZCl8fEhhKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gSFQoYyl7cmV0dXJuIEhhKGMuc3RhcnQpJiYoYy5sZWZ0PWMuc3RhcnQpLEhh'@;
put 'KGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gUUooYyxsKXtyZXR1cm57aWQ6S2dlKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAwIixjb3JuZXJWaXNpYmxlOiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6ITB9LGJvdHRvbTp7aGlkZTohMH0sc3RhcnQ6e2hpZGU6'@;
put 'ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uIExnKGMsbCl7bGV0IGE9ITE7cmV0dXJuIEtuKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgoaCxmKT0+e2lmKGg8MHx8ZjwwKXJldHVybjtjb25zdCB2PWMuZ2V0Q2VsbE1ldGEoaCxmKS5ib3JkZXJzO2lmKHYpe2lmKCFsKXJl'@;
put 'dHVybiBhPSEwLCExO2lmKCFDdSh2W2xdLCJoaWRlIil8fCExPT09dltsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiBCRihjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9Y29uc3QgbzF0PW5ldyBNYXAoW1sibGVmdCIsInN0'@;
put 'YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24gYzF0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6dG9wIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhYKTtyZXR1cm4gTGcodGhpcywidG9wIikmJihsPUJGKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9'@;
put 'TGcodGhpcywidG9wIik7Yy5wcmVwYXJlQm9yZGVyKGEsInRvcCIsZCl9fX1mdW5jdGlvbiB1MXQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJzdGFydCI6ImVuZCI7cmV0dXJue2tleToiYm9yZGVyczpyaWdodCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShFWCk7'@;
put 'cmV0dXJuIExnKHRoaXMsbCkmJihhPUJGKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9TGcodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gZDF0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVk'@;
put 'UGhyYXNlKFRYKTtyZXR1cm4gTGcodGhpcywiYm90dG9tIikmJihsPUJGKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9TGcodGhpcywiYm90dG9tIik7Yy5wcmVwYXJlQm9yZGVyKGEsImJvdHRvbSIsZCl9fX1mdW5jdGlvbiBoMXQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJlbmQi'@;
put 'OiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFYKTtyZXR1cm4gTGcodGhpcyxsKSYmKGE9QkYoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1MZyh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9'@;
put 'fX1mdW5jdGlvbiBmMXQoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShrWCl9LGNhbGxiYWNrKGwsYSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiFMZyh0aGlz'@;
put 'KX19fWZ1bmN0aW9uIFhnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29u'@;
put 'c3QgakY9ImN1c3RvbUJvcmRlcnMiO3ZhciBlUT1uZXcgV2Vha1NldDtjbGFzcyBfMXQgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gcDF0KGMsbCl7KGZ1bmN0aW9uIGcxdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGVRKSxmdW5jdGlvbiBtMXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHYxdChjKXt2YXIgbD1mdW5jdGlvbiB5MXQoYyxsKXtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0'@;
put 'aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl'@;
put 'bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gakZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0'@;
put 'dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2pGXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+WGdlKGVRLHRoaXMsdzF0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9'@;
put 'PlhnZShlUSx0aGlzLEMxdCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGVCb3JkZXJzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCks'@;
put 'dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXNldEJvcmRlcnMobCxhKXtsZXQgZD1bInRvcCIsImJvdHRvbSIsInN0YXJ0IiwiZW5kIl0saD1udWxsO2EmJih0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbYV0pLGQ9T2JqZWN0LmtleXMoYSksaD1K'@;
put 'SihhKSk7Y29uc3Qgdj1lVCh4XyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKHRoaXMuaG90KSxjcmVhdGVDZWxsUmFuZ2U6dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pO0tuKGwsTT0+e3YoTSkuZm9yQWxsKChJ'@;
put 'LEcpPT57S24oZCxyZT0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChJLEcsaCxmdW5jdGlvbiBsMXQoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1vMXQuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOmN9KHJlKSl9KX0pfSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRCb3Jk'@;
put 'ZXJzKGwpe2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybiB0aGlzLnNhdmVkQm9yZGVycztjb25zdCBkPWVUKHhfKGwpLHtjcmVhdGVDZWxsQ29vcmRzOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNlbGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2Vs'@;
put 'bFJhbmdlLmJpbmQodGhpcy5ob3QpfSksaD1bXTtyZXR1cm4gS24obCxmPT57ZChmKS5mb3JBbGwoKHYsTSk9PntLbih0aGlzLnNhdmVkQm9yZGVycyxJPT57SS5yb3c9PT12JiZJLmNvbD09PU0mJmgucHVzaChIVChJKSl9KX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRl'@;
put 'cnMobCk6KEtuKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9y'@;
put 'ZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGwsYSl7dGhpcy5jaGVja1NhdmVkQm9yZGVycyhsKXx8dGhpcy5zYXZlZEJvcmRlcnMucHVzaChsKTtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3cs'@;
put 'bC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3Qg'@;
put 'Zj10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuaG90LmNvdW50Q29scygpO2lmKGw+PWZ8fGE+PXYpcmV0dXJuO2xldCBNPVFKKGwsYSk7ZCYmKE09ZnVuY3Rpb24gaTF0KGMsbCl7cmV0dXJuIEN1KGwsImJvcmRlciIpJiZsLmJvcmRlciYmKGMuYm9yZGVyPWwuYm9yZGVyKSxDdShsLCJ0'@;
put 'b3AiKSYmSGEobC50b3ApJiYobC50b3A/KFhzKGwudG9wKXx8KGwudG9wPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMudG9wPWwudG9wKToobC50b3A9e2hpZGU6ITB9LGMudG9wPWwudG9wKSksQ3UobCwiYm90dG9tIikmJkhhKGwuYm90dG9tKSYmKGwuYm90dG9tPyhYcyhsLmJvdHRvbSl8'@;
put 'fChsLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmJvdHRvbT1sLmJvdHRvbSk6KGwuYm90dG9tPXtoaWRlOiEwfSxjLmJvdHRvbT1sLmJvdHRvbSkpLEN1KGwsInN0YXJ0IikmJkhhKGwuc3RhcnQpJiYobC5zdGFydD8oWHMobC5zdGFydCl8fChsLnN0YXJ0PXt3aWR0aDoxLGNv'@;
put 'bG9yOiIjMDAwIn0pLGMuc3RhcnQ9bC5zdGFydCk6KGwuc3RhcnQ9e2hpZGU6ITB9LGMuc3RhcnQ9bC5zdGFydCkpLEN1KGwsImVuZCIpJiZIYShsLmVuZCkmJihsLmVuZD8oWHMobC5lbmQpfHwobC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5lbmQ9bC5lbmQpOihsLmVuZD17aGlk'@;
put 'ZTohMH0sYy5lbmQ9bC5lbmQpKSxjfShNLGQpLEtuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxJPT57aWYoTS5pZD09PUkuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24oSS5zZXR0aW5ncyxkKSxNLmlkPUkuc2V0dGluZ3MuaWQsTS50b3A9'@;
put 'SS5zZXR0aW5ncy50b3AsTS5ib3R0b209SS5zZXR0aW5ncy5ib3R0b20sTS5zdGFydD1JLnNldHRpbmdzLnN0YXJ0LE0uZW5kPUkuc2V0dGluZ3MuZW5kLCExfSkpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsSFQoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdz'@;
put 'KE0saCl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLnRvLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKS0xKSxoPU1hdGgubWluKGwudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpO0thKGwuZnJvbS5yb3csZCxmPT57S2EobC5m'@;
put 'cm9tLmNvbCxoLHY9Pntjb25zdCBNPVFKKGYsdik7bGV0IEk9MDtmPT09bC5mcm9tLnJvdyYmQ3UoYSwidG9wIikmJihJKz0xLE0udG9wPWEudG9wKSxmPT09bC50by5yb3cmJkN1KGEsImJvdHRvbSIpJiYoSSs9MSxNLmJvdHRvbT1hLmJvdHRvbSksdj09PWwuZnJvbS5jb2wmJkN1KGEsInN0'@;
put 'YXJ0IikmJihJKz0xLE0uc3RhcnQ9YS5zdGFydCksdj09PWwudG8uY29sJiZDdShhLCJlbmQiKSYmKEkrPTEsTS5lbmQ9YS5lbmQpLEk+MCYmKHRoaXMuaG90LnNldENlbGxNZXRhKGYsdiwiYm9yZGVycyIsSFQoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKE0pKX0pfSl9cmVt'@;
put 'b3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9S2dlKGwsYSk7dGhpcy5zcGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1z'@;
put 'ZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/SkooZik6UUoobCxhKSxoPyhmW2RdPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoZik/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwsYSk6KHRo'@;
put 'aXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixIVChmKSkpKTooZltkXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tD'@;
put 'dXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixIVChmKSkpfXByZXBhcmVCb3JkZXIobCxhLGQpe0tuKGwsaD0+e2xldHtzdGFydDpmLGVuZDp2fT1o'@;
put 'O2lmKGYucm93PT09di5yb3cmJmYuY29sPT09di5jb2wpIm5vQm9yZGVycyI9PT1hP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhmLnJvdyxmLmNvbCk6dGhpcy5zZXRCb3JkZXIoZi5yb3csZi5jb2wsYSxkKTtlbHNlIHN3aXRjaChhKXtjYXNlIm5vQm9yZGVycyI6S2EoZi5jb2wsdi5jb2wsTT0+'@;
put 'e0thKGYucm93LHYucm93LEk9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMoSSxNKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOkthKGYuY29sLHYuY29sLE09Pnt0aGlzLnNldEJvcmRlcihmLnJvdyxNLGEsZCl9KTticmVhaztjYXNlImJvdHRvbSI6S2EoZi5jb2wsdi5jb2wsTT0+e3RoaXMuc2V0Qm9y'@;
put 'ZGVyKHYucm93LE0sYSxkKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOkthKGYucm93LHYucm93LE09Pnt0aGlzLnNldEJvcmRlcihNLGYuY29sLGEsZCl9KTticmVhaztjYXNlImVuZCI6S2EoZi5yb3csdi5yb3csTT0+e3RoaXMuc2V0Qm9yZGVyKE0sdi5jb2wsYSxkKX0pfX0pfWNyZWF0ZUN1c3Rv'@;
put 'bUJvcmRlcnMobCl7S24obCxhPT57Y29uc3QgZD1KSihhKTthLnJhbmdlP3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGEucmFuZ2UsZCk6dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3Rv'@;
put 'cDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIEd1KFthLGQsaCxmXSwoTSxJKT0+e2xldCBHPU07cmV0dXJuIEkmJkkuaGlkZSYmKEcrPTEpLEd9LDApfWNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPXlvKHRoaXMuaG90LnNlbGVjdGlvbi5o'@;
put 'aWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdzLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5jbGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe0tuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdo'@;
put 'bGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMu'@;
put 'c3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe0tuKHRoaXMuc2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9eW8odGhpcy5zYXZl'@;
put 'ZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9yZGVycyhsKXtsZXQgYT0hMTtyZXR1cm4gND09PXRoaXMuY291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpLbih0aGlzLnNh'@;
put 'dmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVybiB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIEtuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGln'@;
put 'aHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0dGluZ3MuaWQpcmV0dXJuIEtuKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKGYpLE09PntNLnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1'@;
put 'c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJlbW92ZUFsbEJvcmRlcnMobC5yb3csbC5jb2wpLGY9ITApOktuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyx2PT57'@;
put 'aWYobC5pZD09PXYuc2V0dGluZ3MuaWQpcmV0dXJuIHYudmlzdWFsQ2VsbFJhbmdlPWEsdi5jb21taXQoKSxkJiZLbih0aGlzLmhvdC52aWV3Ll93dC5zZWxlY3Rpb25NYW5hZ2VyLmdldEJvcmRlckluc3RhbmNlcyh2KSxJPT57SS5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSksZj0hMCwhMX0p'@;
put 'LGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbakZdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9cDEobCk7dGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1hKSx0aGlzLmNy'@;
put 'ZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0dGluZ3NDb2hlc2lvbihsKXtjb25zdCBhPWZ1bmN0aW9uIGExdChjKXtyZXR1cm4gYy5zb21lKGw9PkhhKGwubGVmdCl8fEhhKGwu'@;
put 'cmlnaHQpKX0obCksZD1mdW5jdGlvbiBzMXQoYyl7cmV0dXJuIGMuc29tZShsPT5IYShsLnN0YXJ0KXx8SGEobC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0'@;
put 'b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRp'@;
put 'b24gInN0YXJ0Ii8iZW5kIi4nKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB3MXQoYyl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqRl0mJmMuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0se2tleToiYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5z'@;
put 'bGF0ZWRQaHJhc2UoTVgpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEobCYmIWwuaXNTaW5nbGVIZWFkZXIoKSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbYzF0KHRoaXMpLHUxdCh0'@;
put 'aGlzKSxkMXQodGhpcyksaDF0KHRoaXMpLGYxdCh0aGlzKV19fSl9ZnVuY3Rpb24gQzF0KCl7dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpfWZ1bmN0aW9uIHRRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4MXQoYyl7dmFyIGw9ZnVuY3Rpb24gRTF0KGMsbCl7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl'@;
put 'dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh'@;
put 'MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBxZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu'@;
put 'dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IEpnZT0iZHJhZ1RvU2Nyb2xsIjt2YXIgblE9bmV3IFdlYWtTZXQ7Y2xhc3MgQTF0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFMxdChjLGwpeyhmdW5jdGlvbiBNMXQo'@;
put 'YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxuUSksdFEodGhpcywiYm91bmRhcmllcyIsbnVsbCksdFEodGhpcywi'@;
put 'Y2FsbGJhY2siLG51bGwpLHRRKHRoaXMsImxpc3RlbmluZyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBKZ2V9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKZ2VdfWVu'@;
put 'YWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGw9PnFnZShuUSx0aGlzLFFnZSkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT5xZ2UoblEsdGhpcyxRZ2UpLmNhbGwo'@;
put 'dGhpcyxsKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJFdmVu'@;
put 'dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2V0Qm91bmRhcmllcygpe3RoaXMuYm91bmRhcmllcz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2xlZnQ6MCxyaWdodDp0aGlzLmhvdC5yb290V2luZG93LmlubmVyV2lkdGgsdG9wOjAs'@;
put 'Ym90dG9tOnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJIZWlnaHR9fXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1jaGVjayhsLGEpe2xldCBkPTAsaD0wO2E8dGhpcy5ib3VuZGFyaWVzLnRvcD9oPWEtdGhpcy5ib3VuZGFyaWVzLnRvcDphPnRoaXMuYm91bmRhcmllcy5ib3R0b20m'@;
put 'JihoPWEtdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSksbDx0aGlzLmJvdW5kYXJpZXMubGVmdD9kPWwtdGhpcy5ib3VuZGFyaWVzLmxlZnQ6bD50aGlzLmJvdW5kYXJpZXMucmlnaHQmJihkPWwtdGhpcy5ib3VuZGFyaWVzLnJpZ2h0KSx0aGlzLmNhbGxiYWNrKGQsaCl9bGlzdGVuKCl7dGhpcy5s'@;
put 'aXN0ZW5pbmc9ITB9dW5saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMX1pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLmxpc3RlbmluZ31yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5ob3Q7bGV0IGE9bDtmb3IoO2E7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIoYS5kb2N1bWVudCwiY29udGV4dG1lbnUiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2V1cCIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cihhLmRvY3VtZW50LCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLGE9VjcoYSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9b25Nb3VzZU1vdmUobCl7dGhpcy5pc0xpc3RlbmluZygpJiZ0aGlzLmNoZWNrKGwuY2xpZW50WCxsLmNsaWVu'@;
put 'dFkpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFFnZShjKXtpZihQbShjKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7dGhpcy5zZXRCb3VuZGFyaWVzKGwhPT10aGlz'@;
put 'LmhvdC5yb290V2luZG93P2wuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6dm9pZCAwKSx0aGlzLnNldENhbGxiYWNrKChhLGQpPT57dmFyIGgsZjtjb25zdCB2PW51bGwhPT0oaD1sLnNjcm9sbExlZnQpJiZ2b2lkIDAhPT1oP2g6bC5zY3JvbGxYLE09bnVsbCE9PShmPWwuc2Nyb2xsVG9wKSYm'@;
put 'dm9pZCAwIT09Zj9mOmwuc2Nyb2xsWTtsLnNjcm9sbCh2KzUwKk1hdGguc2lnbihhKSxNKzIwKk1hdGguc2lnbihkKSl9KSx0aGlzLmxpc3RlbigpfWZ1bmN0aW9uIGU1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gclEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEkxdChjKXt2YXIgbD1mdW5jdGlvbiBSMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl'@;
put 'XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/'@;
put 'U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0'@;
put 'aW9uIHQ1ZShjLGwsYSl7cmV0dXJuIGMuc2V0KHRmKGMsbCksYSksYX1mdW5jdGlvbiB0ZihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50'@;
put 'IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLE1hLmdldFNpbmdsZXRvbigp'@;
put 'LnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IHpGPSJkcm9wZG93bk1lbnUi'@;
put 'LE5UPSJjaGFuZ2VUeXBlIixpUT16Rjt2YXIgVUY9bmV3IFdlYWtNYXAseTM9bmV3IFdlYWtTZXQ7Y2xhc3MgWkYgZXh0ZW5kcyBGb3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gekZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExV'@;
put 'R0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltNVCx4VCxpbyxUVCxpbyx4RixpbyxFVCxpbyxlZl19Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gazF0KGMsbCl7ZTVlKGMsbCksbC5hZGQo'@;
put 'Yyl9KHRoaXMseTMpLHJRKHRoaXMsImNvbW1hbmRFeGVjdXRvciIsbmV3IGtnZSh0aGlzLmhvdCkpLHJRKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksclEodGhpcywibWVudSIsbnVsbCksZnVuY3Rpb24gRDF0KGMsbCxhKXtlNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFVGLCExKSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnRmKHkzLHRoaXMsRjF0KS5jYWxsKHRoaXMsYSxkKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbekZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVy'@;
put 'bjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgTGdlKHRoaXMuaG90LFpGLkRFRkFVTFRfSVRFTVMpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJn'@;
put 'dW1lbnRzW3ZdO3JldHVybiB0Zih5MyxsLHoxdCkuY2FsbChsLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFy'@;
put 'Z3VtZW50c1t2XTtyZXR1cm4gdGYoeTMsbCxqMXQpLmNhbGwobCwuLi5mKX0pO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt6Rl0sZD17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSl9O3RoaXMucmVnaXN0ZXJFdmVudHMoKSwiZnVuY3Rpb24iPT10eXBlb2YgYS5j'@;
put 'YWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soYS5jYWxsYmFjayksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRv'@;
put 'd25NZW51RGVmYXVsdE9wdGlvbnMiLGQpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhkLml0ZW1zKTtjb25zdCBoPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IEpfKHRoaXMuaG90'@;
put 'LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6YS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnR9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGgpLHRoaXMubWVudS5zZXRN'@;
put 'ZW51SXRlbXMoaCksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PnRmKHkzLHRoaXMsSDF0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT50Zih5Myx0aGlzLE4xdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2Fs'@;
put 'SG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsZj0+dGYoeTMsdGhpcyxWMXQpLmNhbGwodGhpcyxmKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRmKHkzLHRoaXMsQjF0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIs'@;
put 'ZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gbC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4udil9KSxLbihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFu'@;
put 'ZChmLmtleSxmKSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMudW5yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9KCk9Pntjb25zdHtoaWdobGlnaHQ6ZH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigoZC5pc0hlYWRlcigpJiYtMT09PWQucm93fHxkLmlzQ2VsbCgpKSYmZC5j'@;
put 'b2w+PTApe3RoaXMuaG90LnNlbGVjdENvbHVtbnMoZC5jb2wsZC5jb2wsLTEpO2NvbnN0e2Zyb206aH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPWJGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSx2PXRoaXMuaG90LmdldENlbGwoLTEsaC5j'@;
put 'b2wsITApLnF1ZXJ5U2VsZWN0b3IoYC4ke05UfWApLE09di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6TS5sZWZ0K2YubGVmdCx0b3A6TS50b3Ardi5vZmZzZXRIZWlnaHQrZi50b3B9LHtsZWZ0Ok0ud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KSx0aGlz'@;
put 'Lm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19O3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl0sWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxs'@;
put 'YmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNIZWFk'@;
put 'ZXIoKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxjYXB0dXJlQ3RybDohMCxncm91cDppUX0se2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6YSxydW5Pbmx5SWY6KCk9Pnt2YXIgZDtjb25zdCBoPW51bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl'@;
put 'TGFzdCgpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaWdobGlnaHQ7cmV0dXJuIGgmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGgpJiZoLmlzQ2VsbCgpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOmlRfV0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5n'@;
put 'ZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChpUSl9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LCJjbGljayIsbD0+dGYoeTMsdGhpcyxQMXQp'@;
put 'LmNhbGwodGhpcyxsKSl9b3BlbihsKXt2YXIgYTtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH07bnVsbCE9PShhPXRoaXMubWVudSkmJnZvaWQgMCE9PWEmJmEuaXNPcGVu'@;
put 'ZWQoKXx8KHRoaXMubWVudS5vcGVuKCkscXMoZCwoaCxmKT0+e3RoaXMubWVudS5zZXRPZmZzZXQoZixoKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbihsKSl9Y2xvc2UoKXt2YXIgbDtudWxsPT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWV4ZWN1dGVDb21tYW5kKGwp'@;
put 'e2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGwsLi4uZCl9c2V0TGlzdGVuaW5nKCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGw/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhpcy5tZW51LmhvdE1lbnUudW5saXN0ZW4oKSl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0'@;
put 'cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBuNWUoYyl7Yy5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pfWZ1bmN0aW9uIFAxdChjKXtpZihncyhjLnRhcmdl'@;
put 'dCxOVCkpe2NvbnN0IGw9YkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpLGE9Yy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Yy5zdG9wUHJvcGFnYXRpb24oKSx0NWUoVUYsdGhpcywhMSksdGhpcy5vcGVuKHtsZWZ0OmEubGVmdCtsLmxlZnQsdG9w'@;
put 'OmEudG9wK2MudGFyZ2V0Lm9mZnNldEhlaWdodCtsLnRvcH0se2xlZnQ6YS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6M30pfX1mdW5jdGlvbiBGMXQoYyxsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtpZighYSlyZXR1cm47Y29uc3QgZD1hLnBhcmVudE5vZGUuY2hpbGROb2RlcyxoPUFy'@;
put 'cmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZCxhKTtpZihjPDB8fGghPT1kLmxlbmd0aC0xKXJldHVybjtjb25zdCBmPWwucXVlcnlTZWxlY3RvcihgLiR7TlR9YCk7aWYodGhpcy5lbmFibGVkJiZmKXJldHVybjtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkKGYmJmYucGFyZW50Tm9k'@;
put 'ZS5yZW1vdmVDaGlsZChmKSk7Y29uc3Qgdj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7di5jbGFzc05hbWU9TlQsdi50eXBlPSJidXR0b24iLHYudGFiSW5kZXg9LTEsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKG1zKHYsW043KCksbl8o'@;
put 'IiAiKV0pLG1zKGwsW0gyZSgibWVudSIpXSkpLHYub25jbGljaz1mdW5jdGlvbigpe3JldHVybiExfSxsLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKHYsbC5maXJzdENoaWxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEgxdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVT'@;
put 'aG93Iix0aGlzKX1mdW5jdGlvbiBOMXQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iix0aGlzKSx0Zih5Myx0aGlzLG41ZSkuY2FsbCh0aGlzLHRoaXMubWVudSl9ZnVuY3Rpb24gVjF0KGMpe3RmKHkzLHRoaXMsbjVlKS5jYWxsKHRoaXMsYyl9ZnVuY3Rpb24g'@;
put 'QjF0KCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9ZnVuY3Rpb24gajF0KGMpe3JldHVybiBmdW5jdGlvbiBMMXQoYyxsKXtyZXR1cm4gYy5nZXQodGYoYyxsKSl9KFVGLHRoaXMpP251bGw6Y31mdW5jdGlvbiB6MXQo'@;
put 'Yyl7Z3MoYy50YXJnZXQsTlQpJiZ0NWUoVUYsdGhpcywhMCl9ZnVuY3Rpb24gcjVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVMXQoYyl7dmFyIGw9ZnVuY3Rpb24gWjF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s'@;
put 'P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31aRi5T'@;
put 'RVBBUkFUT1I9e25hbWU6aW99O2NvbnN0IFkxdD1jbGFzcyBXMXR7Y29uc3RydWN0b3IobCl7cjVlKHRoaXMsImhvdCIsdm9pZCAwKSxyNWUodGhpcywib3B0aW9ucyIse30pLHRoaXMuaG90PWx9c2V0T3B0aW9ucyhsKXt0aGlzLm9wdGlvbnM9bH1nZXREYXRhKCl7Y29uc3R7c3RhcnRSb3c6'@;
put 'bCxzdGFydENvbDphLGVuZFJvdzpkLGVuZENvbDpofT10aGlzLl9nZXREYXRhUmFuZ2UoKSxmPXRoaXMub3B0aW9ucyx2PVtdO3JldHVybiBLYShsLGQsTT0+e2NvbnN0IEk9W107IWYuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coTSl8fChLYShhLGgsRz0+eyFmLmV4cG9y'@;
put 'dEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKEcpfHxJLnB1c2godGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChNLEcpKX0pLHYucHVzaChJKSl9KSx2fWdldFJvd0hlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5yb3dIZWFkZXJzKXtjb25zdHtzdGFydFJvdzph'@;
put 'LGVuZFJvdzpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldFJvd0hlYWRlcigpO0thKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9Z2V0Q29sdW1uSGVhZGVycygp'@;
put 'e2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLmNvbHVtbkhlYWRlcnMpe2NvbnN0e3N0YXJ0Q29sOmEsZW5kQ29sOmR9PXRoaXMuX2dldERhdGFSYW5nZSgpLGg9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCk7S2EoYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRo'@;
put 'aXMuX2lzSGlkZGVuQ29sdW1uKGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1fZ2V0RGF0YVJhbmdlKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKS0xLGE9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXRbZD0wLGg9MCxmPWEsdj1sXT10aGlzLm9wdGlvbnMucmFuZ2U7cmV0dXJu'@;
put 'IGQ9TWF0aC5tYXgoZCwwKSxoPU1hdGgubWF4KGgsMCksZj1NYXRoLm1pbihmLGEpLHY9TWF0aC5taW4odixsKSx7c3RhcnRSb3c6ZCxzdGFydENvbDpoLGVuZFJvdzpmLGVuZENvbDp2fX1faXNIaWRkZW5Sb3cobCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRo'@;
put 'aXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfV9pc0hpZGRlbkNvbHVtbihsKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9fTtmdW5jdGlvbiBpNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEcxdChjKXt2'@;
put 'YXIgbD1mdW5jdGlvbiAkMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGFRe3N0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQi'@;
put 'LGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhpZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxh'@;
put 'KXtpNWUodGhpcywiZGF0YVByb3ZpZGVyIix2b2lkIDApLGk1ZSh0aGlzLCJvcHRpb25zIix2b2lkIDApLHRoaXMuZGF0YVByb3ZpZGVyPWwsdGhpcy5vcHRpb25zPXRoaXMuX21lcmdlT3B0aW9ucyhhKSx0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9X21lcmdl'@;
put 'T3B0aW9ucyhsKXtsZXQgYT1zMyh0aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfT1BUSU9OUyk7Y29uc3QgZD1uZXcgRGF0ZTtyZXR1cm4gYT13dShzMyhhUS5ERUZBVUxUX09QVElPTlMpLGEpLGE9d3UoYSxsKSxhLmZpbGVuYW1lPXYkKGEuZmlsZW5hbWUse1lZWVk6ZC5nZXRGdWxsWWVhcigp'@;
put 'LE1NOmAke2QuZ2V0TW9udGgoKSsxfWAucGFkU3RhcnQoMiwiMCIpLEREOmAke2QuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwiMCIpfSksYX19Y29uc3QgSzF0PWFRO2Z1bmN0aW9uIGE1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHNRPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIHNkdChjKXtyZXR1cm4gYy5zdGFydHNXaXRoKCI9Iil8fGMuc3RhcnRzV2l0aCgiKyIp'@;
put 'fHxjLnN0YXJ0c1dpdGgoIi0iKXx8Yy5zdGFydHNXaXRoKCJAIil8fGMuc3RhcnRzV2l0aCgiXHQiKXx8Yy5zdGFydHNXaXRoKCJcciIpP2AnJHtjfWA6Y31mdW5jdGlvbiBvZHQoYyxsKXtyZXR1cm4gbC50ZXN0KGMpP2AnJHtjfWA6Y31jb25zdCBvUT17Y3N2OmNsYXNzIGFkdCBleHRlbmRz'@;
put 'IEsxdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gWDF0KGMsbCl7KGZ1bmN0aW9uIHExdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g'@;
put 'b2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHNRKX1zdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9jc3YiLGZpbGVFeHRlbnNpb246ImNzdiIsYm9tOiEwLGNvbHVtbkRlbGltaXRlcjoiLCIscm93RGVsaW1pdGVyOiJcclxuIixzYW5pdGl6'@;
put 'ZVZhbHVlczohMX19ZXhwb3J0KCl7Y29uc3QgbD10aGlzLm9wdGlvbnMsYT10aGlzLmRhdGFQcm92aWRlci5nZXREYXRhKCk7bGV0IGQ9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Q29sdW1uSGVhZGVycygpO2NvbnN0IGg9ZC5sZW5ndGg+MCxmPXRoaXMuZGF0YVByb3ZpZGVyLmdldFJvd0hlYWRl'@;
put 'cnMoKSx2PWYubGVuZ3RoPjA7bGV0IE09bC5ib20/Ilx1ZmVmZiI6IiI7cmV0dXJuIGgmJihkPXlvKGQsST0+dGhpcy5fZXNjYXBlQ2VsbChJLHtmb3JjZTohMCxzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSksdiYmKE0rPWwuY29sdW1uRGVsaW1pdGVyKSxNKz1kLmpvaW4obC5j'@;
put 'b2x1bW5EZWxpbWl0ZXIpLE0rPWwucm93RGVsaW1pdGVyKSxLbihhLChJLEcpPT57Rz4wJiYoTSs9bC5yb3dEZWxpbWl0ZXIpLHYmJihNKz10aGlzLl9lc2NhcGVDZWxsKGZbR10se3Nhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pLE0rPWwuY29sdW1uRGVsaW1pdGVyKTtjb25zdCBy'@;
put 'ZT1JLm1hcCh1ZT0+dGhpcy5fZXNjYXBlQ2VsbCh1ZSx7c2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSkpLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpO00rPXJlfSksTX1fZXNjYXBlQ2VsbChsKXtsZXR7Zm9yY2U6YT0hMSxzYW5pdGl6ZVZhbHVlOmQ9ITF9PWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxoPW9jKGwpO3JldHVybiIiPT09aHx8KGQmJihhPSEwKSxkIGluc3RhbmNlb2YgUmVnRXhwP2g9YTVlKHNRLHRoaXMsb2R0KS5jYWxsKHRoaXMsaCxkKToiZnVuY3Rpb24iPT10eXBlb2YgZD9oPWQoaCk6ZCYmKGg9'@;
put 'YTVlKHNRLHRoaXMsc2R0KS5jYWxsKHRoaXMsaCkpLChhfHxoLmluZGV4T2YoIlxyIik+PTB8fGguaW5kZXhPZignIicpPj0wfHxoLmluZGV4T2YoIlxuIik+PTB8fGguaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihoPWgucmVwbGFjZShuZXcgUmVnRXhwKCci'@;
put 'JywiZyIpLCciIicpLGg9YCIke2h9ImApKSxofX19O2NsYXNzIGZkdCBleHRlbmRzIEZve3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJleHBvcnRGaWxlIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNDB9aXNFbmFibGVkKCl7cmV0dXJuITB9ZXhwb3J0QXNT'@;
put 'dHJpbmcobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pLmV4cG9ydCgpfWV4cG9ydEFzQmxvYihsKXtyZXR1cm4gdGhpcy5fY3JlYXRlQmxvYih0aGlzLl9jcmVhdGVU'@;
put 'eXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KSl9ZG93bmxvYWRGaWxlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdHtyb290'@;
put 'RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9dGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGEpLHY9dGhpcy5fY3JlYXRlQmxvYihmKSxNPWguVVJMfHxoLndlYmtpdFVSTCxJPWQuY3JlYXRlRWxlbWVudCgiYSIpLEc9YCR7Zi5vcHRpb25zLmZpbGVuYW1lfS4ke2Yub3B0'@;
put 'aW9ucy5maWxlRXh0ZW5zaW9ufWA7aWYodm9pZCAwIT09SS5kb3dubG9hZCl7Y29uc3QgcmU9TS5jcmVhdGVPYmplY3RVUkwodik7SS5zdHlsZS5kaXNwbGF5PSJub25lIixJLnNldEF0dHJpYnV0ZSgiaHJlZiIscmUpLEkuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsRyksZC5ib2R5LmFwcGVu'@;
put 'ZENoaWxkKEkpLEkuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksZC5ib2R5LnJlbW92ZUNoaWxkKEkpLHNldFRpbWVvdXQoKCk9PntNLnJldm9rZU9iamVjdFVSTChyZSl9LDEwMCl9ZWxzZSBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmbmF2aWdhdG9yLm1zU2F2'@;
put 'ZU9yT3BlbkJsb2IodixHKX1fY3JlYXRlVHlwZUZvcm1hdHRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIW9RW2xdKXRocm93IG5ldyBFcnJvcihgRXhwb3J0IGZvcm1hdCB0eXBlICIke2x9IiBpcyBub3Qg'@;
put 'c3VwcG9ydGVkLmApO3JldHVybiBmdW5jdGlvbiB1ZHQoYyxsLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvUVtjXT9uZXcgb1FbY10obCxhKTpudWxsfShsLG5ldyBZMXQodGhpcy5ob3QpLGEpfV9jcmVhdGVCbG9iKGwpe2xldCBhPW51bGw7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYm'@;
put 'KGE9bmV3IEJsb2IoW2wuZXhwb3J0KCldLHt0eXBlOmAke2wub3B0aW9ucy5taW1lVHlwZX07Y2hhcnNldD0ke2wub3B0aW9ucy5lbmNvZGluZ31gfSkpLGF9fWZ1bmN0aW9uIGl3KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBwZHQoYyl7dmFyIGw9ZnVuY3Rpb24gZ2R0KGMsbCl7aWYoIm9i'@;
put 'amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2'@;
put 'ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51'@;
put 'bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBWVHtjb25zdHJ1Y3RvcihsLGEpe2xldHtpZDpkLHN0YXRlbGVzczpoPSEwfT1hO2l3KHRoaXMsImhvdCIsdm9pZCAwKSxpdyh0aGlzLCJpZCIsdm9pZCAwKSxpdyh0aGlzLCJlbGVtZW50cyIs'@;
put 'W10pLGl3KHRoaXMsImhpZGRlbiIsITEpLGl3KHRoaXMsInN0YXRlSWQiLCIiKSxpdyh0aGlzLCJzdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuaWQ9ZCx0aGlzLnN0YXRlSWQ9YEZpbHRlcnMuY29tcG9uZW50LiR7dGhpcy5pZH1gLHRoaXMuc3RhdGU9aD9udWxsOnRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCxuZXcgeVApfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHN9cmVzZXQoKXtLbih0aGlzLmVsZW1lbnRzLGw9PmwucmVzZXQoKSl9aGlkZSgpe3RoaXMuaGlkZGVuPSEwfXNob3coKXt0aGlzLmhpZGRlbj0h'@;
put 'MX1pc0hpZGRlbigpe3JldHVybiBudWxsPT09dGhpcy5ob3R8fHRoaXMuaGlkZGVufXJlc3RvcmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUuZ2V0VmFsdWVBdEluZGV4KGwpKX1zZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIHNldHRp'@;
put 'bmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9c2F2ZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5nZXRTdGF0ZSgpKX1nZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIGdhdGhlcmluZyBsb2dpYyBpcyBub3QgaW1w'@;
put 'bGVtZW50ZWQiKX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksS24odGhpcy5lbGVtZW50cyxsPT5sLmRlc3Ryb3koKSksdGhpcy5zdGF0ZT1udWxsLHRoaXMuZWxlbWVudHM9bnVs'@;
put 'bCx0aGlzLmhvdD1udWxsfX14bChWVCx5MSk7Y29uc3QgQlQ9e307ZnVuY3Rpb24gbjYoYyxsKXtpZighQlRbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0e2NvbmRpdGlvbjphLGRlc2NyaXB0b3I6ZH09QlRbY107bGV0IGg9'@;
put 'bDtyZXR1cm4gZC5pbnB1dFZhbHVlc0RlY29yYXRvciYmKGg9ZC5pbnB1dFZhbHVlc0RlY29yYXRvcihoKSksZnVuY3Rpb24oZil7cmV0dXJuIGEuYXBwbHkoZi5tZXRhLmluc3RhbmNlLFtdLmNvbmNhdChbZl0sW2hdKSl9fWZ1bmN0aW9uIHk5KGMpe2lmKCFCVFtjXSl0aHJvdyBFcnJvcihg'@;
put 'RmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIEJUW2NdLmRlc2NyaXB0b3J9ZnVuY3Rpb24geHUoYyxsLGEpe2Eua2V5PWMsQlRbY109e2NvbmRpdGlvbjpsLGRlc2NyaXB0b3I6YX19Y29uc3QgUzA9Im5vbmUiO3h1KFMwLGZ1bmN0aW9uIG1kdCgpe3Jl'@;
put 'dHVybiEwfSx7bmFtZTp4UCxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCBqVD0iZW1wdHkiO3h1KGpULGZ1bmN0aW9uIHZkdChjKXtyZXR1cm4gamMoYy52YWx1ZSl9LHtuYW1lOkZYLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFdGPSJub3Rf'@;
put 'ZW1wdHkiO3h1KFdGLGZ1bmN0aW9uIHlkdChjLGwpe3JldHVybiFuNihqVCxsKShjKX0se25hbWU6SFgsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgelQ9ImVxIjt4dSh6VCxmdW5jdGlvbiBiZHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gb2MoYy52YWx1ZSkudG9Mb2Nh'@;
put 'bGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSk9PT1vYyhhKX0se25hbWU6TlgsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgWUY9Im5lcSI7eHUoWUYsZnVuY3Rpb24gX2R0KGMsbCl7cmV0dXJuIW42KHpULGwpKGMpfSx7bmFtZTpWWCxpbnB1dHNDb3VudDoxLHNob3dP'@;
put 'cGVyYXRvcnM6ITB9KSx4dSgiZ3QiLGZ1bmN0aW9uIHdkdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT5kfSx7bmFtZTpaWCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSx4dSgiZ3Rl'@;
put 'IixmdW5jdGlvbiBDZHQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+PWR9LHtuYW1lOldYLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLHh1KCJsdCIsZnVuY3Rpb24gU2R0KGMsbCl7'@;
put 'bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPGR9LHtuYW1lOllYLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLHh1KCJsdGUiLGZ1bmN0aW9uIE1kdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4i'@;
put 'bnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTw9ZH0se25hbWU6R1gsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgbFE9ImRhdGVfYWZ0ZXIiO3h1KGxRLGZ1bmN0aW9uIHhkdChjLGwpe2xldFthXT1sO2NvbnN0IGQ9UHMo'@;
put 'Yy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCksaD1QcyhhLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFkLmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPj0wfSx7bmFtZTpYWCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBjUT0iZGF0ZV9iZWZv'@;
put 'cmUiO3h1KGNRLGZ1bmN0aW9uIEVkdChjLGwpe2xldFthXT1sO2NvbnN0IGQ9UHMoYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCksaD1QcyhhLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFkLmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPD0wfSx7bmFtZTpxWCxpbnB1'@;
put 'dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBHRj0iYmV0d2VlbiI7eHUoR0YsZnVuY3Rpb24gVGR0KGMsbCl7bGV0W2EsZF09bCxoPWEsZj1kO2lmKCJudW1lcmljIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXBhcnNlRmxvYXQoaCwxMCksTT1wYXJzZUZsb2F0KGYsMTApO2g9'@;
put 'TWF0aC5taW4odixNKSxmPU1hdGgubWF4KHYsTSl9ZWxzZSBpZigiZGF0ZSI9PT1jLm1ldGEudHlwZSl7Y29uc3Qgdj1uNihjUSxbZl0pLE09bjYobFEsW2hdKTtyZXR1cm4gdihjKSYmTShjKX1yZXR1cm4gYy52YWx1ZT49aCYmYy52YWx1ZTw9Zn0se25hbWU6JFgsaW5wdXRzQ291bnQ6Mixz'@;
put 'aG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZDVlPSJub3RfYmV0d2VlbiI7eHUoZDVlLGZ1bmN0aW9uIEFkdChjLGwpe3JldHVybiFuNihHRixsKShjKX0se25hbWU6S1gsaW5wdXRzQ291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgaDVlPSJiZWdpbnNfd2l0aCI7eHUoaDVlLGZ1bmN0'@;
put 'aW9uIGtkdChjLGwpe2xldFthXT1sO3JldHVybiBvYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5zdGFydHNXaXRoKG9jKGEpKX0se25hbWU6QlgsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSkseHUoImVuZHNfd2l0aCIsZnVuY3Rpb24gRGR0KGMs'@;
put 'bCl7bGV0W2FdPWw7cmV0dXJuIG9jKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmVuZHNXaXRoKG9jKGEpKX0se25hbWU6algsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgdVE9ImNvbnRhaW5zIjt4dSh1USxmdW5jdGlvbiBJZHQoYyxs'@;
put 'KXtsZXRbYV09bDtyZXR1cm4gb2MoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuaW5kZXhPZihvYyhhKSk+PTB9LHtuYW1lOnpYLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHA1ZT0ibm90X2NvbnRhaW5zIjt4dShwNWUsZnVuY3Rpb24g'@;
put 'UmR0KGMsbCl7cmV0dXJuIW42KHVRLGwpKGMpfSx7bmFtZTpVWCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBnNWU9ImRhdGVfdG9tb3Jyb3ciO3h1KGc1ZSxmdW5jdGlvbiBMZHQoYyl7Y29uc3QgbD1QcyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4h'@;
put 'IWwuaXNWYWxpZCgpJiZsLmlzU2FtZShQcygpLnN1YnRyYWN0KC0xLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6UVgsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IG01ZT0iZGF0ZV90b2RheSI7eHUobTVlLGZ1bmN0aW9uIE9kdChjKXtjb25zdCBsPVBzKGMudmFsdWUsYy5tZXRh'@;
put 'LmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKFBzKCkuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6SlgsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IHY1ZT0iZGF0ZV95ZXN0ZXJkYXkiO3h1KHY1ZSxmdW5jdGlvbiBQZHQoYyl7Y29uc3QgbD1QcyhjLnZhbHVlLGMu'@;
put 'bWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShQcygpLnN1YnRyYWN0KDEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTplcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgYjVlPXtudW1lcmljOltTMCxpbyxqVCxXRixpbyx6VCxZRixpbywiZ3Qi'@;
put 'LCJndGUiLCJsdCIsImx0ZSIsR0YsZDVlXSx0ZXh0OltTMCxpbyxqVCxXRixpbyx6VCxZRixpbyxoNWUsImVuZHNfd2l0aCIsaW8sdVEscDVlXSxkYXRlOltTMCxpbyxqVCxXRixpbyx6VCxZRixpbyxjUSxsUSxHRixpbyxnNWUsbTVlLHY1ZV19O2Z1bmN0aW9uIFVUKGMsbCxhKXtyZXR1cm4o'@;
put 'bD1mdW5jdGlvbiBWZHQoYyl7dmFyIGw9ZnVuY3Rpb24gQmR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw'@;
put 'ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi'@;
put 'fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBkUT0iYnVpbHQiLGhRPSJidWlsZGluZyIsXzVlPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlw'@;
put 'cmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgVmh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBzMyh7Y2xhc3NOYW1lOiIiLHZhbHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXtVVCh0aGlz'@;
put 'LCJob3QiLHZvaWQgMCksVVQodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgWjIodGhpcykpLFVUKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksVVQodGhpcywiX2VsZW1lbnQiLHZvaWQgMCksVVQodGhpcywiYnVpbGRTdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz13dShWaC5E'@;
put 'RUZBVUxUUyxhKSx0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy53cmFwSXQ/ImRpdiI6dGhpcy5vcHRpb25zLnRhZ05hbWUpfXNldFZhbHVlKGwpe3RoaXMub3B0aW9ucy52YWx1ZT1sLHRoaXMudXBkYXRlKCl9Z2V0VmFsdWUo'@;
put 'KXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PWhRP3RoaXMuX2VsZW1lbnQ6dGhpcy5idWlsZFN0YXRlPT09ZFE/KHRoaXMudXBkYXRlKCksdGhpcy5fZWxlbWVudCk6KHRoaXMuYnVpbGRTdGF0ZT1oUSx0aGlzLmJ1aWxk'@;
put 'KCksdGhpcy5idWlsZFN0YXRlPWRRLHRoaXMuX2VsZW1lbnQpfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09ZFF9dHJhbnNsYXRlSWZQb3NzaWJsZShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJmwuc3RhcnRzV2l0aChKMSk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShsKTpsfWJ1aWxkKCl7Y29uc3QgbD0oYSxkKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGg9PnRoaXMucnVuTG9jYWxIb29rcyhkLGgsdGhpcykpfTtpZih0aGlzLmJ1aWxkU3RhdGV8fCh0aGlzLmJ1aWxkU3RhdGU9aFEpLHRoaXMuX2VsZW1lbnQuc2V0'@;
put 'QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLHZvaWQgMCE9PXRoaXMub3B0aW9ucy50YWJJbmRleCYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0aGlzLm9wdGlvbnMudGFiSW5kZXgpLHZvaWQgMCE9PXRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLl9lbGVtZW50'@;
put 'LnNldEF0dHJpYnV0ZSgicm9sZSIsdGhpcy5vcHRpb25zLnJvbGUpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJkVpKHRoaXMuX2VsZW1lbnQsdGhpcy5vcHRpb25zLmNsYXNzTmFtZSksdGhpcy5vcHRpb25zLmNoaWxkcmVuLmxlbmd0aClLbih0aGlzLm9wdGlvbnMuY2hpbGRyZW4sYT0+dGhp'@;
put 'cy5fZWxlbWVudC5hcHBlbmRDaGlsZChhLmVsZW1lbnQpKTtlbHNlIGlmKHRoaXMub3B0aW9ucy53cmFwSXQpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnRhZ05hbWUpO2Euc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITAp'@;
put 'LHFzKHRoaXMub3B0aW9ucywoZCxoKT0+e3ZvaWQgMCE9PWFbaF0mJiJjbGFzc05hbWUiIT09aCYmInRhZ05hbWUiIT09aCYmImNoaWxkcmVuIiE9PWgmJihhW2hdPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShkKSl9KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLEtuKF81ZSxkPT5s'@;
put 'KGEsZCkpfWVsc2UgS24oXzVlLGE9PmwodGhpcy5fZWxlbWVudCxhKSl9dXBkYXRlKCl7fXJlc2V0KCl7dGhpcy5vcHRpb25zLnZhbHVlPSIiLHRoaXMudXBkYXRlKCl9c2hvdygpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSIifWhpZGUoKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxh'@;
put 'eT0ibm9uZSJ9Zm9jdXMoKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMuaG90PW51bGwsdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZWxl'@;
put 'bWVudCksdGhpcy5fZWxlbWVudD1udWxsfX1mdW5jdGlvbiB3NWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uICRGKGMsbCl7cmV0dXJu'@;
put 'IGMuZ2V0KGZRKGMsbCkpfWZ1bmN0aW9uIGZRKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBv'@;
put 'YmplY3QiKX14bChWaCx5MSk7dmFyIGF3PW5ldyBXZWFrTWFwLEM1ZT1uZXcgV2Vha1NldDtjbGFzcyByNiBleHRlbmRzIFZoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gczMoe3BsYWNlaG9sZGVyOiIiLHR5cGU6InRleHQiLHRhZ05hbWU6ImlucHV0Iix0YWJJbmRleDotMX0pfWNv'@;
put 'bnN0cnVjdG9yKGwsYSl7c3VwZXIobCx3dShyNi5ERUZBVUxUUyxhKSksZnVuY3Rpb24gamR0KGMsbCl7dzVlKGMsbCksbC5hZGQoYyl9KHRoaXMsQzVlKSxmdW5jdGlvbiB6ZHQoYyxsLGEpe3c1ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsYXcsdm9pZCAwKSx0aGlzLnJlZ2lzdGVySG9va3Mo'@;
put 'KX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImtleXVwIixsPT5mUShDNWUsdGhpcyxaZHQpLmNhbGwodGhpcyxsKSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbiBVZHQo'@;
put 'YyxsLGEpe2Muc2V0KGZRKGMsbCksYSl9KShhdyx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCksRWkodGhpcy5fZWxlbWVudCwiaHRVSUlucHV0IiksRWkobCwiaHRVSUlucHV0SWNvbiIpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0'@;
put 'aGlzLmlzQnVpbHQoKSYmKCRGKGF3LHRoaXMpLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsJEYoYXcsdGhpcykucGxhY2Vob2xkZXI9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciksJEYoYXcsdGhpcykudmFsdWU9dGhpcy50cmFuc2xhdGVJZlBvc3Np'@;
put 'YmxlKHRoaXMub3B0aW9ucy52YWx1ZSkpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJiRGKGF3LHRoaXMpLmZvY3VzKCl9fWZ1bmN0aW9uIFpkdChjKXt0aGlzLm9wdGlvbnMudmFsdWU9Yy50YXJnZXQudmFsdWV9ZnVuY3Rpb24gWlQoYyxsLGEpe1M1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rp'@;
put 'b24gUzVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBzdyhjLGwsYSl7cmV0dXJuIGMuc2V0KFdUKGMsbCksYSksYX1mdW5jdGlvbiBZ'@;
put 'YyhjLGwpe3JldHVybiBjLmdldChXVChjLGwpKX1mdW5jdGlvbiBXVChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVz'@;
put 'ZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGYwPW5ldyBXZWFrTWFwLEtGPW5ldyBXZWFrTWFwLFhGPW5ldyBXZWFrTWFwLHBRPW5ldyBXZWFrTWFwLHFGPW5ldyBXZWFrTWFwLEpGPW5ldyBXZWFrU2V0O2NsYXNzIFlUIGV4dGVuZHMgVmh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBz'@;
put 'Myh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITEsdGFiSW5kZXg6LTF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsd3UoWVQuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIFdkdChjLGwpe1M1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEpGKSxaVCh0aGlzLGYwLG51bGwpLFpUKHRoaXMs'@;
put 'S0YsW10pLFpUKHRoaXMsWEYsdm9pZCAwKSxaVCh0aGlzLHBRLHZvaWQgMCksWlQodGhpcyxxRix2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldE1lbnUoKXtyZXR1cm4gWWMoZjAsdGhpcyl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJjbGljayIsKCk9PldUKEpG'@;
put 'LHRoaXMsJGR0KS5jYWxsKHRoaXMpKX1zZXRJdGVtcyhsKXtzdyhLRix0aGlzLHRoaXMudHJhbnNsYXRlTmFtZXMobCkpLFljKGYwLHRoaXMpJiZZYyhmMCx0aGlzKS5zZXRNZW51SXRlbXMoWWMoS0YsdGhpcykpfXRyYW5zbGF0ZU5hbWVzKGwpe3JldHVybiBLbihsLGE9PnthLm5hbWU9dGhp'@;
put 'cy50cmFuc2xhdGVJZlBvc3NpYmxlKGEubmFtZSl9KSxsfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxzdyhmMCx0aGlzLG5ldyBKXyh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IixrZWVwSW5WaWV3cG9ydDohMSxzdGFuZGFsb25lOiEwLGNv'@;
put 'bnRhaW5lcjp0aGlzLm9wdGlvbnMubWVudUNvbnRhaW5lcn0pKSxZYyhmMCx0aGlzKS5zZXRNZW51SXRlbXMoWWMoS0YsdGhpcykpO2NvbnN0IGw9bmV3IFZoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3RDYXB0aW9uIn0pLGE9bmV3IFZoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0'@;
put 'VUlTZWxlY3REcm9wZG93biJ9KTtzdyhYRix0aGlzLGwpLHN3KHBRLHRoaXMsbC5lbGVtZW50KSxzdyhxRix0aGlzLGEpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJihtcyhhLmVsZW1lbnQsW043KCldKSxtcyh0aGlzLl9lbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il1dKSks'@;
put 'S24oW2wsYV0sZD0+dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxZYyhmMCx0aGlzKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsZD0+V1QoSkYsdGhpcyxZZHQpLmNhbGwodGhpcyxkKSksWWMoZjAsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+V1QoSkYs'@;
put 'dGhpcyxHZHQpLmNhbGwodGhpcykpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtsZXQgbDtsPXRoaXMub3B0aW9ucy52YWx1ZT90aGlzLm9wdGlvbnMudmFsdWUubmFtZTpZYyhmMCx0aGlzKS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh4UCksWWMo'@;
put 'cFEsdGhpcykudGV4dENvbnRlbnQ9bCxzdXBlci51cGRhdGUoKX1vcGVuT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1ljKGYwLHRoaXMpJiYoWWMoZjAsdGhpcykub3BlbigpLFljKGYwLHRoaXMpLnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMu'@;
put 'aG90LmlzTHRyKCk/bC5sZWZ0LTU6bC5sZWZ0LTMxLHRvcDpsLnRvcC0xLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0fSksWWMoZjAsdGhpcykuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKSxZYyhmMCx0aGlzKS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21T'@;
put 'aG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6YT0+e3RoaXMuY2xvc2VPcHRpb25zKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJ0YWJLZXlkb3duIixhKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pKX1jbG9z'@;
put 'ZU9wdGlvbnMoKXtZYyhmMCx0aGlzKSYmWWMoZjAsdGhpcykuY2xvc2UoKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKX1kZXN0cm95KCl7WWMoZjAsdGhpcykmJihZYyhmMCx0aGlzKS5kZXN0cm95KCksc3coZjAsdGhpcyxudWxsKSksWWMoWEYsdGhpcykm'@;
put 'JlljKFhGLHRoaXMpLmRlc3Ryb3koKSxZYyhxRix0aGlzKSYmWWMocUYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gWWR0KGMpe2MubmFtZSE9PWlvJiYodGhpcy5vcHRpb25zLnZhbHVlPWMsdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVj'@;
put 'dCIsdGhpcy5vcHRpb25zLnZhbHVlKSl9ZnVuY3Rpb24gR2R0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9ZnVuY3Rpb24gJGR0KCl7dGhpcy5vcGVuT3B0aW9ucygpfWZ1bmN0aW9uIE01ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcWR0KGMpe3ZhciBsPWZ1bmN0aW9u'@;
put 'IEpkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geDVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZ1E9bmV3IFdlYWtTZXQ7Y2xhc3MgbVEgZXh0ZW5kcyBWVHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksZnVuY3Rpb24gS2R0KGMsbCl7'@;
put 'KGZ1bmN0aW9uIFhkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGdRKSxNNWUodGhpcywibmFtZSIsIiIpLE01'@;
put 'ZSh0aGlzLCJhZGRTZXBhcmF0b3IiLCExKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYWRkU2VwYXJhdG9yPWEuYWRkU2VwYXJhdG9yLHRoaXMuZWxlbWVudHMucHVzaChuZXcgWVQodGhpcy5ob3Qse21lbnVDb250YWluZXI6YS5tZW51Q29udGFpbmVyfSkpLHRoaXMuZWxlbWVudHMucHVzaChu'@;
put 'ZXcgcjYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOmNxfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgcjYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOnVxfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soInNl'@;
put 'bGVjdCIsbD0+eDVlKGdRLHRoaXMsUWR0KS5jYWxsKHRoaXMsbCkpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpKS5hZGRMb2NhbEhvb2soInRhYktleWRvd24iLGw9PnRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0VGFiS2V5'@;
put 'ZG93biIsbCkpLEtuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGw9PntsLmFkZExvY2FsSG9vaygia2V5ZG93biIsYT0+eDVlKGdRLHRoaXMsZWh0KS5jYWxsKHRoaXMsYSkpfSl9c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLCFsKXJldHVybjtjb25zdCBhPXMzKGwuY29tbWFuZCk7YS5u'@;
put 'YW1lLnN0YXJ0c1dpdGgoVWMpJiYoYS5uYW1lPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoYS5uYW1lKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYSksS24obC5hcmdzLChkLGgpPT57aWYoaD5hLmlucHV0c0NvdW50LTEpcmV0dXJuITE7Y29uc3QgZj10aGlzLmdl'@;
put 'dElucHV0RWxlbWVudChoKTtmLnNldFZhbHVlKGQpLGZbYS5pbnB1dHNDb3VudD5oPyJzaG93IjoiaGlkZSJdKCksaHx8dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+Zi5mb2N1cygpLDEwKX0pfWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5nZXRWYWx1'@;
put 'ZSgpfHx5OShTMCksYT1bXTtyZXR1cm4gS24odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGQsaCk9PntsLmlucHV0c0NvdW50PmgmJmEucHVzaChkLmdldFZhbHVlKCkpfSkse2NvbW1hbmQ6bCxhcmdzOmF9fXVwZGF0ZVN0YXRlKGwsYSl7Y29uc3QgZD15OShsP2wubmFtZTpTMCk7dGhpcy5z'@;
put 'dGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYSx7Y29tbWFuZDpkLGFyZ3M6bD9sLmFyZ3M6W119KSxsfHxLbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxoPT5oLnNldFZhbHVlKG51bGwpKX1nZXRTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2Vv'@;
put 'ZiBZVClbMF19Z2V0SW5wdXRFbGVtZW50KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2xdfWdldElucHV0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5m'@;
put 'aWx0ZXIobD0+bCBpbnN0YW5jZW9mIHI2KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZix2'@;
put 'KT0+e0VpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiIpLHRoaXMuYWRkU2VwYXJhdG9yJiZFaShhLnBhcmVudE5vZGUsImJvcmRlciIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBFaShNLCJodEZpbHRlcnNN'@;
put 'ZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxLbih0aGlzLmVsZW1lbnRzLEk9PmEuYXBwZW5kQ2hpbGQoSS5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5n'@;
put 'ZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO2xldCBhPVt5OShTMCldO2lmKG51bGwhPT1sKXtjb25zdHt2aXN1YWxJbmRleDpkfT1sO2E9ZnVuY3Rpb24gTmR0KGMpe2NvbnN0IGw9W107bGV0IGE9YztyZXR1cm4gYjVlW2FdfHwoYT0idGV4dCIpLEtuKGI1ZVthXSxk'@;
put 'PT57bGV0IGg7aD1kPT09aW8/e25hbWU6aW99OnMzKHk5KGQpKSxsLnB1c2goaCl9KSxsfSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLGQsdGhpcy5ob3QuY291bnRSb3dzKCksZCkpfUtuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGQ9PmQuaGlkZSgpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQo'@;
put 'KS5zZXRJdGVtcyhhKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGFbMF0pfX1mdW5jdGlvbiBRZHQoYyl7S24odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGwsYSk9PntsW2MuaW5wdXRzQ291bnQ+YT8ic2hvdyI6ImhpZGUiXSgpLDA9PT1hJiZ0aGlz'@;
put 'LmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5sLmZvY3VzKCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGMpfWZ1bmN0aW9uIGVodChjKXtjXyhjLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSx6MihjKSl9Y29uc3QgR1Q9e307ZnVu'@;
put 'Y3Rpb24gbmh0KGMpe3JldHVybiBHVFtjXS5uYW1lfWZ1bmN0aW9uIHZRKGMsbCxhKXtHVFtjXT17bmFtZTpsLGZ1bmM6YX19Y29uc3QgaTY9ImNvbmp1bmN0aW9uIjt2UShpNixycSxmdW5jdGlvbiBpaHQoYyxsKXtyZXR1cm4gYy5ldmVyeShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgUUY9ImRp'@;
put 'c2p1bmN0aW9uIjt2UShRRixFUCxmdW5jdGlvbiBzaHQoYyxsKXtyZXR1cm4gYy5zb21lKGE9PmEuZnVuYyhsKSl9KTtjb25zdCB5UT0iZGlzanVuY3Rpb25XaXRoRXh0cmFDb25kaXRpb24iO2Z1bmN0aW9uIEU1ZShjLGwsYSl7KGZ1bmN0aW9uIGNodChjLGwpe2lmKGwuaGFzKGMpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gJFQoYyxsKXtyZXR1cm4gYy5nZXQoQTVlKGMsbCkpfWZ1bmN0aW9uIFQ1ZShjLGwsYSl7cmV0dXJu'@;
put 'IGMuc2V0KEE1ZShjLGwpLGEpLGF9ZnVuY3Rpb24gQTVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24g'@;
put 'dGhpcyBvYmplY3QiKX12USh5USxFUCxmdW5jdGlvbiBsaHQoYyxsKXtpZihjLmxlbmd0aDwzKXRocm93IEVycm9yKCJPcGVyYXRpb24gZG9lc24ndCB3b3JrIG9uIGxlc3MgdGhlbiB0aHJlZSBjb25kaXRpb25zLiIpO3JldHVybiBjLnNsaWNlKDAsYy5sZW5ndGgtMSkuc29tZShhPT5hLmZ1'@;
put 'bmMobCkpJiZjW2MubGVuZ3RoLTFdLmZ1bmMobCl9KTt2YXIgb3c9bmV3IFdlYWtNYXAsYlE9bmV3IFdlYWtNYXA7Y2xhc3MgZUggZXh0ZW5kcyBWaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIHMzKHt0eXBlOiJyYWRpbyIsdGFnTmFtZToiaW5wdXQiLGNsYXNzTmFtZToiaHRVSVJh'@;
put 'ZGlvIixsYWJlbDp7fX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx3dShlSC5ERUZBVUxUUyxhKSksRTVlKHRoaXMsb3csdm9pZCAwKSxFNWUodGhpcyxiUSx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50'@;
put 'KCJsYWJlbCIpO2wudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCksbC5odG1sRm9yPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwuaHRtbEZvciksVDVlKGJRLHRoaXMsbCksVDVlKG93'@;
put 'LHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKSwkVChvdyx0aGlzKS5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKCRUKGJRLHRoaXMpLnRleHRDb250ZW50'@;
put 'PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpKX1pc0NoZWNrZWQoKXtyZXR1cm4hIXRoaXMuaXNCdWlsdCgpJiYkVChvdyx0aGlzKS5jaGVja2VkfXNldENoZWNrZWQoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMuaXNCdWlsdCgpJiYoJFQob3csdGhpcykuY2hlY2tlZD1sKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiYkVChvdyx0aGlzKS5mb2N1cygpfX12YXIgRDVlPW5ldyBXZWFrU2V0O2NsYXNzIG1odCBleHRlbmRzIFZUe2NvbnN0cnVjdG9y'@;
put 'KGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiB1aHQoYyxsKXsoZnVuY3Rpb24gZGh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv'@;
put 'YmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsRDVlKSxmdW5jdGlvbiBoaHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZodChjKXt2YXIgbD1mdW5jdGlvbiBwaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl'@;
put 'XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/'@;
put 'U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlz'@;
put 'LCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMu'@;
put 'aXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+KEVpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudU9wZXJhdG9ycyIpLEtuKHRoaXMuZWxlbWVudHMsZD0+YS5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxhKX19YnVpbGRPcGVyYXRvcnNFbGVtZW50KCl7Y29uc3QgbD1baTYsUUZdO0tuKGws'@;
put 'YT0+e2NvbnN0IGQ9bmV3IGVIKHRoaXMuaG90LHtuYW1lOiJvcGVyYXRvciIsbGFiZWw6e2h0bWxGb3I6YSx0ZXh0Q29udGVudDpuaHQoYSl9LHZhbHVlOmEsY2hlY2tlZDphPT09bFswXSxpZDphfSk7ZC5hZGRMb2NhbEhvb2soImNoYW5nZSIsaD0+ZnVuY3Rpb24gZ2h0KGMsbCxhKXtpZigi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oRDVlLHRoaXMsdmh0KS5jYWxsKHRoaXMsaCkpLHRo'@;
put 'aXMuZWxlbWVudHMucHVzaChkKX0pfXNldENoZWNrZWQobCl7aWYodGhpcy5lbGVtZW50cy5sZW5ndGg8bCl0aHJvdyBFcnJvcihobGBSYWRpbyBidXR0b24gd2l0aCBpbmRleCAke2x9IGRvZXNuJ3QgZXhpc3QuYCk7S24odGhpcy5lbGVtZW50cywoYSxkKT0+e2Euc2V0Q2hlY2tlZChkPT09'@;
put 'bCl9KX1nZXRBY3RpdmVPcGVyYXRpb25JZCgpe2NvbnN0IGw9dGhpcy5lbGVtZW50cy5maW5kKGE9PmEgaW5zdGFuY2VvZiBlSCYmYS5pc0NoZWNrZWQoKSk7cmV0dXJuIGw/bC5nZXRWYWx1ZSgpOmk2fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKX1zZXRT'@;
put 'dGF0ZShsKXt0aGlzLnJlc2V0KCksbCYmdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpIT09bCYmS24odGhpcy5lbGVtZW50cyxhPT57YS5zZXRDaGVja2VkKGEuZ2V0VmFsdWUoKT09PWwpfSl9dXBkYXRlU3RhdGUoKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1swXT9hcmd1bWVudHNbMF06aTY7ZD09PXlRJiYoZD1RRiksdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZCl9cmVzZXQoKXt0aGlzLnNldENoZWNrZWQoMCl9fWZ1bmN0aW9uIHZodChjKXt0aGlzLnNldFN0YXRl'@;
put 'KGMudGFyZ2V0LnZhbHVlKX1mdW5jdGlvbiBiaHQoYyxsKXtsZXQgYT1jO3JldHVybiIiPT09YSYmKGE9YCgke2x9KWApLGF9ZnVuY3Rpb24gS1QoYyl7Y29uc3QgbD1uZXcgU2V0KGMpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5oYXMoYSl9fWZ1bmN0aW9uIF9RKGMpe3JldHVybiBj'@;
put 'Pz8iIn1mdW5jdGlvbiB3UShjKXtyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGMpKS5tYXAobD0+X1EobCkpLnNvcnQoKGwsYSk9PiJudW1iZXIiPT10eXBlb2YgbCYmIm51bWJlciI9PXR5cGVvZiBhP2wtYTpsPT09YT8wOmw+YT8xOi0xKX1mdW5jdGlvbiBJNWUoYyxsLGEsZCl7Y29uc3Qg'@;
put 'aD1bXSxmPWM9PT1sO2xldCB2O3JldHVybiBmfHwodj1LVChsKSksYy5mb3JFYWNoKE09PntsZXQgST0hMTsoZnx8dihNKSkmJihJPSEwKTtjb25zdCBHPXtjaGVja2VkOkksdmFsdWU6TSx2aXN1YWxWYWx1ZTpiaHQoTSxhKX07ZCYmZChHKSxoLnB1c2goRyl9KSxofWZ1bmN0aW9uIENRKGMs'@;
put 'bCl7cmV0dXJuIGMuZ2V0KFI1ZShjLGwpKX1mdW5jdGlvbiBSNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2Vu'@;
put 'dCBvbiB0aGlzIG9iamVjdCIpfVkyZSgpO3ZhciBYVD1uZXcgV2Vha01hcDtjbGFzcyBxVCBleHRlbmRzIFZoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gczMoe2hyZWY6IiMiLHRhZ05hbWU6ImEiLHRhYkluZGV4Oi0xLHJvbGU6ImJ1dHRvbiJ9KX1jb25zdHJ1Y3RvcihsLGEpe3N1'@;
put 'cGVyKGwsd3UocVQuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIF9odChjLGwsYSl7KGZ1bmN0aW9uIHdodChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShj'@;
put 'LGwpLGwuc2V0KGMsYSl9KHRoaXMsWFQsdm9pZCAwKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCksZnVuY3Rpb24gQ2h0KGMsbCxhKXtjLnNldChSNWUoYyxsKSxhKX0oWFQsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoQ1EoWFQsdGhpcyku'@;
put 'dGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy50ZXh0Q29udGVudCkpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJkNRKFhULHRoaXMpLmZvY3VzKCl9YWN0aXZhdGUoKXtDUShYVCx0aGlzKS5jbGljaygpfX1mdW5jdGlvbiBsdyhjLGwsYSl7TDVlKGMs'@;
put 'bCksbC5zZXQoYyxhKX1mdW5jdGlvbiBMNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFpzKGMsbCl7cmV0dXJuIGMuZ2V0KGN3KGMs'@;
put 'bCkpfWZ1bmN0aW9uIGIzKGMsbCxhKXtyZXR1cm4gYy5zZXQoY3coYyxsKSxhKSxhfWZ1bmN0aW9uIGN3KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl'@;
put 'IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBPNWU9Im11bHRpcGxlU2VsZWN0Lml0ZW1Cb3giO3ZhciBfMz1uZXcgV2Vha01hcCxFdT1uZXcgV2Vha01hcCxTUT1uZXcgV2Vha01hcCxPZz1uZXcgV2Vha01hcCxhNj1uZXcgV2Vha01hcCxzNj1uZXcgV2Vh'@;
put 'a01hcCxKVD1uZXcgV2Vha1NldDtjbGFzcyBRVCBleHRlbmRzIFZoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gczMoe2NsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0Iix2YWx1ZTpbXX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx3dShRVC5ERUZBVUxUUyxhKSksZnVuY3Rp'@;
put 'b24gU2h0KGMsbCl7TDVlKGMsbCksbC5hZGQoYyl9KHRoaXMsSlQpLGx3KHRoaXMsXzMsW10pLGx3KHRoaXMsRXUsdm9pZCAwKSxsdyh0aGlzLFNRLHZvaWQgMCksbHcodGhpcyxPZyx2b2lkIDApLGx3KHRoaXMsYTYsdm9pZCAwKSxsdyh0aGlzLHM2LHZvaWQgMCksYjMoT2csdGhpcyxuZXcg'@;
put 'cjYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOmxxLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIn0pKSxiMyhhNix0aGlzLG5ldyBxVCh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6aXEsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pKSxiMyhzNix0aGlzLG5ldyBxVCh0aGlzLmhv'@;
put 'dCx7dGV4dENvbnRlbnQ6YXEsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldEl0ZW1zQm94KCl7cmV0dXJuIFpzKEV1LHRoaXMpfXJlZ2lzdGVySG9va3MoKXtacyhPZyx0aGlzKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PmN3KEpULHRoaXMs'@;
put 'eGh0KS5jYWxsKHRoaXMsbCkpLFpzKE9nLHRoaXMpLmFkZExvY2FsSG9vaygiaW5wdXQiLGw9PmN3KEpULHRoaXMsTWh0KS5jYWxsKHRoaXMsbCkpLFpzKGE2LHRoaXMpLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PmN3KEpULHRoaXMsRWh0KS5jYWxsKHRoaXMsbCkpLFpzKHM2LHRoaXMpLmFk'@;
put 'ZExvY2FsSG9vaygiY2xpY2siLGw9PmN3KEpULHRoaXMsVGh0KS5jYWxsKHRoaXMsbCkpfXNldEl0ZW1zKGwpe3ZhciBhO2IzKF8zLHRoaXMsbCksbnVsbD09PShhPVpzKEV1LHRoaXMpKXx8dm9pZCAwPT09YXx8YS5sb2FkRGF0YShacyhfMyx0aGlzKSl9c2V0TG9jYWxlKGwpe2IzKFNRLHRo'@;
put 'aXMsbCl9Z2V0TG9jYWxlKCl7cmV0dXJuIFpzKFNRLHRoaXMpfWdldEl0ZW1zKCl7cmV0dXJuWy4uLlpzKF8zLHRoaXMpXX1nZXRWYWx1ZSgpe3JldHVybiBmdW5jdGlvbiBraHQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gYy5mb3JFYWNoKGE9PnthLmNoZWNrZWQmJmwucHVzaChhLnZhbHVlKX0p'@;
put 'LGx9KFpzKF8zLHRoaXMpKX1nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKXtyZXR1cm4gWnMoT2csdGhpcyl9Z2V0U2VsZWN0QWxsRWxlbWVudCgpe3JldHVybiBacyhhNix0aGlzKX1nZXRDbGVhckFsbEVsZW1lbnQoKXtyZXR1cm4gWnMoczYsdGhpcyl9aXNTZWxlY3RlZEFsbFZhbHVlcygpe3Jl'@;
put 'dHVybiBacyhfMyx0aGlzKS5sZW5ndGg9PT10aGlzLmdldFZhbHVlKCkubGVuZ3RofWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9bmV3IFZoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxl'@;
put 'Y3Rpb25Db250cm9scyIsY2hpbGRyZW46W1pzKGE2LHRoaXMpLFpzKHM2LHRoaXMpXX0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoWnMoT2csdGhpcykuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSk7'@;
put 'Y29uc3QgaD1mPT57dmFyIHY7aWYoIXRoaXMuX2VsZW1lbnQpcmV0dXJuO251bGw9PT0odj1acyhFdSx0aGlzKSl8fHZvaWQgMD09PXZ8fHYuZGVzdHJveSgpLEVpKGYsImh0VUlNdWx0aXBsZVNlbGVjdEhvdCIpLGIzKEV1LHRoaXMsbmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKGYse2RhdGE6'@;
put 'WnMoXzMsdGhpcyksY29sdW1uczpbe2RhdGE6ImNoZWNrZWQiLHR5cGU6ImNoZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlvbjoiYWZ0ZXIifX1dLGJlZm9yZVJlbmRlcmVyOihHLHJlLHVlLHllLEVlLEJlKT0+e0cudGl0bGU9QmUuaW5zdGFuY2UuZ2V0RGF0'@;
put 'YUF0Um93UHJvcChyZSxCZS5sYWJlbC5wcm9wZXJ0eSl9LGFmdGVyTGlzdGVuOigpPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJmb2N1cyIsdGhpcyl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6KCk9PntacyhFdSx0aGlzKS5saXN0ZW4oKX0sbW9kaWZ5Q29sV2lkdGg6Rz0+e2NvbnN0IHJlPVpzKEV1'@;
put 'LHRoaXMpLmNvbnRhaW5lci5zY3JvbGxXaWR0aC1kMChsKTtyZXR1cm4gdm9pZCAwIT09RyYmRzxyZT9yZTpHfSxtYXhDb2xzOjEsYXV0b1dyYXBDb2w6ITAsaGVpZ2h0OjExMCxjb3B5UGFzdGU6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsZmlsbEhhbmRsZTohMSxmcmFnbWVu'@;
put 'dFNlbGVjdGlvbjoiY2VsbCIsdGFiTW92ZXM6e3JvdzoxLGNvbDowfSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifSkpLFpzKEV1LHRoaXMpLmluaXQoKTtjb25zdCBJPVpzKEV1LHRo'@;
put 'aXMpLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKTtJLnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbIlRhYiJdKSxJLnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbIlNoaWZ0IiwiVGFiIl0pLEkuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOkc9Pnt0'@;
put 'aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLEcsdGhpcyl9LGdyb3VwOk81ZX0pLEkuYWRkU2hvcnRjdXQoe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpHPT57WnMoRXUsdGhpcykuZGVzZWxlY3RDZWxsKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixH'@;
put 'LHRoaXMpLHRoaXMucnVuTG9jYWxIb29rcygibGlzdFRhYktleWRvd24iLEcsdGhpcyl9LGdyb3VwOk81ZX0pfTtoKGEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmgoYSksMTAwKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZacyhFdSx0aGlzKS5saXN0ZW4oKX1yZXNldCgpe1pz'@;
put 'KE9nLHRoaXMpLnJlc2V0KCksWnMoYTYsdGhpcykucmVzZXQoKSxacyhzNix0aGlzKS5yZXNldCgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoWnMoRXUsdGhpcykubG9hZERhdGEoZnVuY3Rpb24gQWh0KGMsbCl7Y29uc3QgYT1LVChsKTtyZXR1cm4gYy5tYXAoZD0+KGQuY2hlY2tlZD1h'@;
put 'KGQudmFsdWUpLGQpKX0oWnMoXzMsdGhpcyksdGhpcy5vcHRpb25zLnZhbHVlKSksc3VwZXIudXBkYXRlKCkpfWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9WnMoRXUsdGhpcykpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxacyhPZyx0aGlzKS5kZXN0cm95KCksWnMoczYsdGhpcykuZGVz'@;
put 'dHJveSgpLFpzKGE2LHRoaXMpLmRlc3Ryb3koKSxiMyhPZyx0aGlzLG51bGwpLGIzKHM2LHRoaXMsbnVsbCksYjMoYTYsdGhpcyxudWxsKSxiMyhFdSx0aGlzLG51bGwpLGIzKF8zLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBNaHQoYyl7Y29uc3QgbD1jLnRhcmdldC52'@;
put 'YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKTtsZXQgYTthPSIiPT09bD9bLi4uWnMoXzMsdGhpcyldOlpzKF8zLHRoaXMpLmZpbHRlcihkPT5gJHtkLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZihsKT49MCksWnMoRXUs'@;
put 'dGhpcykubG9hZERhdGEoYSl9ZnVuY3Rpb24geGh0KGMpe3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsYyx0aGlzKSxOJChjXyxjLmtleUNvZGUpKCJBUlJPV19ET1dOIikmJihjLnByZXZlbnREZWZhdWx0KCksejIoYyksWnMoRXUsdGhpcykubGlzdGVuKCksWnMoRXUsdGhpcykuc2Vs'@;
put 'ZWN0Q2VsbCgwLDApKX1mdW5jdGlvbiBFaHQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksWnMoRXUsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKGEsZCk9PnthLmNoZWNrZWQ9ITAsbC5wdXNoKFBLKGEsZClbMF0pfSksWnMoRXUsdGhpcykuc2V0U291cmNlRGF0YUF0'@;
put 'Q2VsbChsKX1mdW5jdGlvbiBUaHQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksWnMoRXUsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKGEsZCk9PnthLmNoZWNrZWQ9ITEsbC5wdXNoKFBLKGEsZClbMF0pfSksWnMoRXUsdGhpcykuc2V0U291cmNlRGF0YUF0Q2VsbChs'@;
put 'KX1jb25zdCBiOT0iYnlfdmFsdWUiO2Z1bmN0aW9uIHRIKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24g'@;
put 'dGhpcyBvYmplY3QiKX14dShiOSxmdW5jdGlvbiBEaHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xldFtsXT1jO3JldHVybltLVChsKV19LHNob3dPcGVyYXRvcnM6ITF9KTt2'@;
put 'YXIgRjVlLGVBPW5ldyBXZWFrU2V0O2NsYXNzIEZodCBleHRlbmRzIFZUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBJaHQoYyxsKXsoZnVuY3Rpb24gUmh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu'@;
put 'bm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZUEpLGZ1bmN0aW9uIExodChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT2h0KGMpe3ZhciBsPWZ1bmN0aW9uIFBodChjLGwpe2lmKCJvYmpl'@;
put 'Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg'@;
put 'bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l'@;
put 'cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgUVQodGhpcy5ob3QpKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRN'@;
put 'dWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnRIKGVBLHRoaXMsSGh0KS5jYWxsKHRoaXMsbCkpLmFkZExvY2FsSG9vaygibGlzdFRhYktleWRvd24iLGw9PnRoaXMucnVuTG9jYWxIb29rcygibGlzdFRhYktleWRvd24iLGwpKSx0aGlzLmhvdC5hZGRI'@;
put 'b29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsKGwsYSk9PnRIKGVBLHRoaXMsTmh0KS5jYWxsKHRoaXMsbCxhKSl9Z2V0RWxlbWVudHMoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7cmV0dXJuW2wuZ2V0U2VhcmNoSW5wdXRFbGVtZW50KCksbC5n'@;
put 'ZXRTZWxlY3RBbGxFbGVtZW50KCksbC5nZXRDbGVhckFsbEVsZW1lbnQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpXX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksbCYmbC5jb21tYW5kLmtleT09PWI5KXtjb25zdCBhPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50'@;
put 'KCk7YS5zZXRJdGVtcyhsLml0ZW1zU25hcHNob3QpLGEuc2V0VmFsdWUobC5hcmdzWzBdKSxhLnNldExvY2FsZShsLmxvY2FsZSl9fWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLGE9bC5nZXRJdGVtcygpO3JldHVybntjb21tYW5kOntrZXk6bC5p'@;
put 'c1NlbGVjdGVkQWxsVmFsdWVzKCl8fCFhLmxlbmd0aD9TMDpiOX0sYXJnczpbbC5nZXRWYWx1ZSgpXSxpdGVtc1NuYXBzaG90OmF9fXVwZGF0ZVN0YXRlKGwpe2NvbnN0IGE9KGQsaCxmLHYsTSk9Pntjb25zdFtJXT1BbShoLHVlPT51ZS5uYW1lPT09YjkpLEc9e30scmU9dGhpcy5ob3QuZ2V0'@;
put 'VHJhbnNsYXRlZFBocmFzZShUUCk7aWYoSSl7Y29uc3QgdWU9dihkLE0pLHllPXlvKHVlLGR0PT5kdC52YWx1ZSksRWU9bmV3IE1hcCh1ZS5tYXAoZHQ9PltkdC52YWx1ZSx0aGlzLmhvdC5nZXRDZWxsTWV0YShkdC5tZXRhLnZpc3VhbFJvdyxkdC5tZXRhLnZpc3VhbENvbCldKSksQmU9d1Eo'@;
put 'eWUpO2YmJihJLmFyZ3NbMF09Zik7Y29uc3QgR2U9W10sc3Q9STVlKEJlLEkuYXJnc1swXSxyZSxkdD0+e2R0LmNoZWNrZWQmJkdlLnB1c2goZHQudmFsdWUpLHRIKGVBLHRoaXMsUDVlKS5jYWxsKHRoaXMsZHQsRWUpfSk7Ry5sb2NhbGU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsLmVkaXRl'@;
put 'ZENvbmRpdGlvblN0YWNrLmNvbHVtbikubG9jYWxlLEcuYXJncz1bR2VdLEcuY29tbWFuZD15OShiOSksRy5pdGVtc1NuYXBzaG90PXN0fWVsc2UgRy5hcmdzPVtdLEcuY29tbWFuZD15OShTMCk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoZCxHKX07YShsLmVkaXRlZENvbmRpdGlvblN0'@;
put 'YWNrLmNvbHVtbixsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSksbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3MubGVuZ3RoJiZhKGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbHVtbixs'@;
put 'LmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3RvcnksbC5lZGl0ZWRDb25kaXRpb25TdGFjayl9Z2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9'@;
put 'PmwgaW5zdGFuY2VvZiBRVClbMF19Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsdik9PntF'@;
put 'aShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBFaShNLCJodEZpbHRlcnNNZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVs'@;
put 'ZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxLbih0aGlzLmVsZW1lbnRzLEk9PmEuYXBwZW5kQ2hpbGQoSS5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFRQKSxhPXRoaXMuX2dldENvbHVtblZpc2libGVWYWx1ZXMo'@;
put 'KSxkPWEubWFwKEk9PkkudmFsdWUpLGg9bmV3IE1hcChhLm1hcChJPT5bSS52YWx1ZSxJLm1ldGFdKSksZj13UShkKSx2PUk1ZShmLGYsbCxJPT57dEgoZUEsdGhpcyxQNWUpLmNhbGwodGhpcyxJLGgpfSk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyh2KSxzdXBl'@;
put 'ci5yZXNldCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoZik7Y29uc3QgTT10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1NJiZ0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0'@;
put 'aGlzLmhvdC5nZXRDZWxsTWV0YSgwLE0udmlzdWFsSW5kZXgpLmxvY2FsZSl9X2dldENvbHVtblZpc2libGVWYWx1ZXMoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7cmV0dXJuIG51bGw9PT1sP1tdOnlvKHRoaXMuaG90LmdldERh'@;
put 'dGFBdENvbChsLnZpc3VhbEluZGV4KSwoYSxkKT0+KHt2YWx1ZTpfUShhKSxtZXRhOnRoaXMuaG90LmdldENlbGxNZXRhKGQsbC52aXN1YWxJbmRleCl9KSl9fWZ1bmN0aW9uIEhodChjKXtjXyhjLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSx6Mihj'@;
put 'KSl9ZnVuY3Rpb24gUDVlKGMsbCl7dGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiKSYmKGMudmlzdWFsVmFsdWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixjLnZpc3VhbFZhbHVlLGwuZ2V0KGMudmFsdWUp'@;
put 'KSl9ZnVuY3Rpb24gTmh0KGMsbCl7cmV0dXJuIm51bWVyaWMiPT09bC50eXBlP2s0ZShjLGwpOmN9dmFyIEg1ZT1uZXcgV2Vha1NldDtjbGFzcyB0QSBleHRlbmRzIFZUe3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4i'@;
put 'Y2FuY2VsIn1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiEwfSksZnVuY3Rpb24gVmh0KGMsbCl7KGZ1bmN0aW9uIEJodChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxl'@;
put 'bWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEg1ZSksZnVuY3Rpb24gamh0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB6aHQoYyl7dmFyIGw9ZnVuY3Rpb24gVWh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1j'@;
put 'W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y'@;
put 'ZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6'@;
put 'ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyByNih0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpzcSxjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbk9LIixpZGVudGlmaWVyOnRBLkJVVFRPTl9P'@;
put 'S30pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHI2KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOm9xLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uQ2FuY2VsIixpZGVudGlmaWVyOnRBLkJVVFRPTl9DQU5DRUx9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJI'@;
put 'b29rcygpe0tuKHRoaXMuZWxlbWVudHMsbD0+e2wuYWRkTG9jYWxIb29rKCJjbGljayIsKGEsZCk9PmZ1bmN0aW9uIFpodChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KEg1ZSx0aGlzLFdodCkuY2FsbCh0aGlzLGEsZCkpfSl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2Vs'@;
put 'ZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oRWkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51QWN0aW9uQmFyIiksS24odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1hY2NlcHQoKXt0aGlzLnJ1bkxv'@;
put 'Y2FsSG9va3MoImFjY2VwdCIpfWNhbmNlbCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIil9fWZ1bmN0aW9uIFdodChjLGwpe2wub3B0aW9ucy5pZGVudGlmaWVyPT09RjVlLkJVVFRPTl9PSz90aGlzLmFjY2VwdCgpOnRoaXMuY2FuY2VsKCl9ZnVuY3Rpb24gTVEoYyxsLGEpe3JldHVy'@;
put 'bihsPWZ1bmN0aW9uIFlodChjKXt2YXIgbD1mdW5jdGlvbiBHaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwr'@;
put 'IiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfUY1ZT10QTtjb25zdCBONWU9IkNvbmRpdGlvbkNvbGxlY3Rpb24uZmlsdGVyaW5nU3RhdGVzIjtjbGFzcyBWNWV7'@;
put 'Y29uc3RydWN0b3IobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtNUSh0aGlzLCJob3QiLHZvaWQgMCksTVEodGhpcywiaXNNYXBSZWdpc3RyYWJsZSIsdm9pZCAwKSxNUSh0aGlzLCJmaWx0ZXJpbmdTdGF0ZXMiLG5l'@;
put 'dyB5UCksdGhpcy5ob3Q9bCx0aGlzLmlzTWFwUmVnaXN0cmFibGU9YSwhMD09PXRoaXMuaXNNYXBSZWdpc3RyYWJsZT90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChONWUsdGhpcy5maWx0ZXJpbmdTdGF0ZXMpOnRoaXMuZmlsdGVyaW5nU3RhdGVzLmluaXQodGhpcy5o'@;
put 'b3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVuZ3RofWlzTWF0Y2gobCxhKXt2YXIgZDtjb25zdCBoPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChhKSxm'@;
put 'PW51bGwhPT0oZD1oPy5jb25kaXRpb25zKSYmdm9pZCAwIT09ZD9kOltdLHY9aD8ub3BlcmF0aW9uO3JldHVybiB0aGlzLmlzTWF0Y2hJbkNvbmRpdGlvbnMoZixsLHYpfWlzTWF0Y2hJbkNvbmRpdGlvbnMobCxhKXtyZXR1cm4hbC5sZW5ndGh8fGZ1bmN0aW9uIHRodChjKXtpZighR1RbY10p'@;
put 'dGhyb3cgRXJyb3IoYE9wZXJhdGlvbiB3aXRoIGlkICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdCBsPUdUW2NdLmZ1bmM7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGwoYSxkKX19KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1sy'@;
put 'XTppNikobCxhKX1hZGRDb25kaXRpb24obCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06aTYsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKDAs'@;
put 'bCkubG9jYWxlLHY9YS5hcmdzLm1hcChyZT0+InN0cmluZyI9PXR5cGVvZiByZT9yZS50b0xvY2FsZUxvd2VyQ2FzZShmKTpyZSksTT1hLm5hbWV8fGEuY29tbWFuZC5rZXk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVBZGQiLGwpO2NvbnN0IEk9dGhpcy5nZXRPcGVyYXRpb24obCk7aWYo'@;
put 'SSl7aWYoSSE9PWQpdGhyb3cgRXJyb3IoaGxgVGhlIGNvbHVtbiBvZiBpbmRleCAke2x9IGhhcyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgXGAke0l9XGBceDIwCiAgICAgICAgZmlsdGVyIG9wZXJhdGlvbi4gVXNlIFxgcmVtb3ZlQ29uZGl0aW9uc1xgIHRvIGNsZWFyIHRoZSBjdXJy'@;
put 'ZW50IGNvbmRpdGlvbnMgYW5kIHRoZW4gYWRkIG5ldyBvbmVzLlx4MjAKICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMgKGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBcYGNvbmp1bmN0aW9uXGAsXHgyMAogICAgICAgIHVzZSBp'@;
put 'dCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4pLmApfWVsc2UgaWYoYmMoR1RbZF0pKXRocm93IG5ldyBFcnJvcihobGBVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1lZCBcYCR7ZH1cYC4gUG9zc2libGUgb25lcyBhcmVceDIwCiAgICAgICAgXGBkaXNqdW5jdGlvblxgIGFu'@;
put 'ZCBcYGNvbmp1bmN0aW9uXGAuYCk7Y29uc3QgRz10aGlzLmdldENvbmRpdGlvbnMobCk7MD09PUcubGVuZ3RoP3RoaXMuZmlsdGVyaW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleChsLHtvcGVyYXRpb246ZCxjb25kaXRpb25zOlt7bmFtZTpNLGFyZ3M6dixmdW5jOm42KE0sdil9XX0saCk6Ry5w'@;
put 'dXNoKHtuYW1lOk0sYXJnczp2LGZ1bmM6bjYoTSx2KX0pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJBZGQiLGwpfWdldENvbmRpdGlvbnMobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0oZD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lk'@;
put 'IDA9PT1kP3ZvaWQgMDpkLmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1hP2E6W119Z2V0T3BlcmF0aW9uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vcGVyYXRpb259Z2V0RmlsdGVy'@;
put 'ZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAobD0+e2xldFthXT1sO3JldHVybiBhfSl9Z2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5pbmRleE9mKGwpfWV4cG9ydEFsbENvbmRp'@;
put 'dGlvbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLnJlZHVjZSgobCxhKT0+e2xldFtkLHtvcGVyYXRpb246aCxjb25kaXRpb25zOmZ9XT1hO3JldHVybiBsLnB1c2goe2NvbHVtbjpkLG9wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zi5tYXAodj0+e2xldHtuYW1l'@;
put 'Ok0sYXJnczpJfT12O3JldHVybntuYW1lOk0sYXJnczpbLi4uSV19fSl9KSxsfSxbXSl9aW1wb3J0QWxsQ29uZGl0aW9ucyhsKXt0aGlzLmNsZWFuKCksbC5mb3JFYWNoKGE9PnthLmNvbmRpdGlvbnMuZm9yRWFjaChkPT50aGlzLmFkZENvbmRpdGlvbihhLmNvbHVtbixkKSl9KX1yZW1vdmVD'@;
put 'b25kaXRpb25zKGwpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUmVtb3ZlIixsKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhclZhbHVlKGwpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJSZW1vdmUiLGwpfWNsZWFuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDbGVhbiIpLHRo'@;
put 'aXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsZWFuIil9aGFzQ29uZGl0aW9ucyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXRDb25kaXRpb25zKGwpO3JldHVybiBhP2Quc29tZShoPT5oLm5hbWU9PT1hKTpkLmxlbmd0aD4wfWRlc3Ryb3koKXt0aGlz'@;
put 'LmlzTWFwUmVnaXN0cmFibGUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoTjVlKSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1udWxsLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fXhsKFY1ZSx5MSk7Y29uc3QgQjVlPVY1ZTtmdW5jdGlvbiBqNWUoYyxsLGEpe3JldHVy'@;
put 'bihsPWZ1bmN0aW9uICRodChjKXt2YXIgbD1mdW5jdGlvbiBLaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwr'@;
put 'IiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHo1ZT1jbGFzcyBYaHR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOigpPT5bXTtqNWUodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxqNWUodGhpcywiY29sdW1uRGF0YUZhY3RvcnkiLHZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWwsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1h'@;
put 'fWZpbHRlcigpe2xldCBsPVtdO3JldHVybiBLbih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCksKGEsZCk9PntsZXQgaD10aGlzLmNvbHVtbkRhdGFGYWN0b3J5KGEpO2QmJihoPXRoaXMuX2dldEludGVyc2VjdERhdGEoaCxsKSksbD10aGlzLmZpbHRlckJ5'@;
put 'Q29sdW1uKGEsaCl9KSxsfWZpbHRlckJ5Q29sdW1uKGwpe2NvbnN0IGQ9W107cmV0dXJuIEtuKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxoPT57dm9pZCAwIT09aCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzTWF0Y2goaCxs'@;
put 'KSYmZC5wdXNoKGgpfSksZH1fZ2V0SW50ZXJzZWN0RGF0YShsLGEpe2NvbnN0IGQ9W107cmV0dXJuIEtuKGEsaD0+e2NvbnN0IGY9aC5tZXRhLnZpc3VhbFJvdzt2b2lkIDAhPT1sW2ZdJiYoZFtmXT1sW2ZdKX0pLGR9fTtmdW5jdGlvbiBfOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUWh0'@;
put 'KGMpe3ZhciBsPWZ1bmN0aW9uIGUydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geFEoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro'@;
put 'PDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBuSD1uZXcgV2Vha1NldDtjbGFzcyBVNWV7Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1syXT9hcmd1bWVudHNbMl06KCk9PltdOyhmdW5jdGlvbiBxaHQoYyxsKXsoZnVuY3Rpb24gSmh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMs'@;
put 'bCksbC5hZGQoYyl9KSh0aGlzLG5IKSxfOSh0aGlzLCJob3QiLHZvaWQgMCksXzkodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxfOSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSxfOSh0aGlzLCJjaGFuZ2VzIixbXSksXzkodGhpcywiZ3JvdXBpbmciLCExKSxf'@;
put 'OSh0aGlzLCJsYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbiIsLTEpLF85KHRoaXMsImxhdGVzdE9yZGVyU3RhY2siLFtdKSx0aGlzLmhvdD1sLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9ZCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJiZWZvcmVSZW1vdmUiLGg9PnhRKG5ILHRoaXMsdDJ0KS5jYWxsKHRoaXMsaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyUmVtb3ZlIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24u'@;
put 'YWRkTG9jYWxIb29rKCJhZnRlckFkZCIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlQ2xlYW4iLCgpPT54UShuSCx0aGlzLG4ydCkuY2FsbCh0aGlzKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9u'@;
put 'LmFkZExvY2FsSG9vaygiYWZ0ZXJDbGVhbiIsKCk9PnhRKG5ILHRoaXMscjJ0KS5jYWxsKHRoaXMpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZsdXNoKCl7dGhpcy5ncm91cGluZz0hMSxLbih0aGlzLmNoYW5nZXMsbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9'@;
put 'KSx0aGlzLmNoYW5nZXMubGVuZ3RoPTB9dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxhKXt2YXIgZD10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9PT10aGlzLmNoYW5nZXMuaW5kZXhPZihsKSYmdGhpcy5jaGFuZ2VzLnB1c2gobCkpO2NvbnN0IGg9dGhpcy5jb25kaXRpb25D'@;
put 'b2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtsZXQgZj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKTstMT09PWYmJihmPXRoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO2NvbnN0IHY9aC5zbGljZSgwLGYpLE09aC5zbGljZShm'@;
put 'KTtNLmxlbmd0aCYmTVswXS5jb2x1bW49PT1sJiZNLnNoaWZ0KCk7Y29uc3QgST1oZmUoZnVuY3Rpb24ocmUsdWUpe2xldCB5ZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107Y29uc3QgRWU9bmV3IEI1ZShkLmhvdCwhMSksQmU9W10u'@;
put 'Y29uY2F0KHJlLHllKTtFZS5pbXBvcnRBbGxDb25kaXRpb25zKEJlKTtjb25zdCBHZT1kLmNvbHVtbkRhdGFGYWN0b3J5KHVlKTtsZXQgc3Q7c3Q9RWUuaXNFbXB0eSgpP0dlOm5ldyB6NWUoRWUsZHQ9PmQuY29sdW1uRGF0YUZhY3RvcnkoZHQpKS5maWx0ZXIoKSxzdD15byhzdCxkdD0+ZHQu'@;
put 'bWV0YS52aXN1YWxSb3cpO2NvbnN0IHB0PUtUKHN0KTtyZXR1cm4gRWUuZGVzdHJveSgpLEFtKEdlLGR0PT5wdChkdC5tZXRhLnZpc3VhbFJvdykpfSkodiksRz1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygi'@;
put 'dXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlvbnM6R30sZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzOk0sZmlsdGVyZWRSb3dzRmFjdG9yeTpJLGNvbmRpdGlvbkFyZ3NDaGFuZ2U6YX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHFzKHRo'@;
put 'aXMsKGwsYSk9Pnt0aGlzW2FdPW51bGx9KX19ZnVuY3Rpb24gdDJ0KGMpe3RoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oYyl9ZnVuY3Rpb24gbjJ0KCl7dGhpcy5sYXRlc3RPcmRlclN0YWNrPXRo'@;
put 'aXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKX1mdW5jdGlvbiByMnQoKXtLbih0aGlzLmxhdGVzdE9yZGVyU3RhY2ssYz0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oYyl9KX14bChVNWUseTEpO2NvbnN0IGkydD1VNWUsbkE9ImZpbHRlcnMiO2Z1bmN0aW9u'@;
put 'IEVRKGMsbCxhKXtaNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFo1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gckEoYyxsLGEp'@;
put 'e3JldHVybihsPWZ1bmN0aW9uIGwydChjKXt2YXIgbD1mdW5jdGlvbiBjMnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl'@;
put 'Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg'@;
put 'bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHJIKGMsbCxhKXtyZXR1cm4gYy5zZXQoR2QoYyxsKSxhKSxhfWZ1bmN0aW9uIG5mKGMs'@;
put 'bCl7cmV0dXJuIGMuZ2V0KEdkKGMsbCkpfWZ1bmN0aW9uIEdkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQg'@;
put 'b24gdGhpcyBvYmplY3QiKX1jb25zdCBUUT0iZmlsdGVycyIsVzVlPVRRO3ZhciBQZz1uZXcgV2Vha01hcCxBUT1uZXcgV2Vha01hcCx3OT1uZXcgV2Vha01hcCxCaD1uZXcgV2Vha1NldDtjbGFzcyBkMnQgZXh0ZW5kcyBGb3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVFF9c3Rh'@;
put 'dGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjUwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpEcm9wZG93bk1lbnUiLCJwbHVnaW46SGlkZGVuUm93cyIsImNlbGwtdHlwZTpjaGVja2JveCJdfWNvbnN0cnVjdG9yKGwpe3ZhciBhO3N1cGVyKGwpLGE9'@;
put 'dGhpcyxmdW5jdGlvbiBvMnQoYyxsKXtaNWUoYyxsKSxsLmFkZChjKX0odGhpcyxCaCksckEodGhpcywiZHJvcGRvd25NZW51UGx1Z2luIixudWxsKSxyQSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIixudWxsKSxyQSh0aGlzLCJjb25kaXRpb25VcGRhdGVPYnNlcnZlciIsbnVsbCksckEo'@;
put 'dGhpcywiY29tcG9uZW50cyIsbmV3IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9uIixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5X3ZhbHVlIixudWxsXSxbImZpbHRlcl9hY3Rpb25fYmFyIixudWxsXV0p'@;
put 'KSxyQSh0aGlzLCJmaWx0ZXJzUm93c01hcCIsbnVsbCksRVEodGhpcyxQZyx2b2lkIDApLEVRKHRoaXMsQVEsbmV3IFdlYWtTZXQpLEVRKHRoaXMsdzksW10pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBHZChCaCxhLHkydCkuY2FsbChhLC4uLmgpfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1RRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5h'@;
put 'YmxlZClyZXR1cm47dGhpcy5maWx0ZXJzUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbmV3IHFFKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGE9dGhpcy5o'@;
put 'b3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsZD1hJiZhLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCxoPU09PihNLmFkZExvY2FsSG9vaygiYWNjZXB0IiwoKT0+R2QoQmgsdGhpcyxZNWUpLmNhbGwodGhpcywiYWNjZXB0IikpLE0uYWRkTG9jYWxIb29rKCJj'@;
put 'YW5jZWwiLCgpPT5HZChCaCx0aGlzLFk1ZSkuY2FsbCh0aGlzLCJjYW5jZWwiKSksTS5hZGRMb2NhbEhvb2soImNoYW5nZSIsST0+R2QoQmgsdGhpcyx2MnQpLmNhbGwodGhpcyxNLEkpKSxNKSxmPSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHRxKX06YDtpZighdGhpcy5j'@;
put 'b21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBNPW5ldyBtUSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6ZixhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5HZChC'@;
put 'aCx0aGlzLEc1ZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIsaChNKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfb3BlcmF0b3JzIixuZXcgbWh0KHRo'@;
put 'aXMuaG90LHtpZDoiZmlsdGVyX29wZXJhdG9ycyIsbmFtZToiT3BlcmF0b3JzIn0pKSwhdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSl7Y29uc3QgTT1uZXcgbVEodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRTZXBhcmF0'@;
put 'b3I6ITAsbWVudUNvbnRhaW5lcjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5HZChCaCx0aGlzLEc1ZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGgoTSkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9i'@;
put 'eV92YWx1ZSIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGgobmV3IEZodCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTooKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShucSl9OmB9KSkpLHRoaXMuY29tcG9uZW50cy5nZXQoImZp'@;
put 'bHRlcl9hY3Rpb25fYmFyIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9hY3Rpb25fYmFyIixoKG5ldyB0QSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9hY3Rpb25fYmFyIixuYW1lOiJBY3Rpb24gYmFyIn0pKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9ufHwodGhpcy5jb25kaXRpb25D'@;
put 'b2xsZWN0aW9uPW5ldyBCNWUodGhpcy5ob3QpKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyfHwodGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1uZXcgaTJ0KHRoaXMuaG90LHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixNPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihNKSksdGhp'@;
put 'cy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5hZGRMb2NhbEhvb2soInVwZGF0ZSIsTT0+R2QoQmgsdGhpcyxiMnQpLmNhbGwodGhpcyxNKSkpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKE09Pk0uc2hvdygpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMi'@;
put 'LGZ1bmN0aW9uKCl7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsST1uZXcgQXJyYXkoTSksRz0wO0c8TTtHKyspSVtHXT1hcmd1bWVudHNbR107cmV0dXJuIEdkKEJoLGwsbTJ0KS5jYWxsKGwsLi4uSSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCgpPT5HZChC'@;
put 'aCx0aGlzLGcydCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCgpPT5HZChCaCx0aGlzLGYydCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCgpPT5HZChCaCx0aGlzLHAydCkuY2FsbCh0aGlzKSksdGhp'@;
put 'cy5hZGRIb29rKCJhZnRlckNoYW5nZSIsTT0+R2QoQmgsdGhpcyxoMnQpLmNhbGwodGhpcyxNKSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luJiYodGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZGlzYWJsZVBsdWdpbigpLHRoaXMu'@;
put 'ZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZVBsdWdpbigpKSwhbmYoUGcsdGhpcykmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZWQpe2NvbnN0IE09W3tmb2N1czooKT0+e2NvbnN0IEc9bmYoUGcsdGhpcykuZ2V0TWVudSgpLHJlPUcuZ2V0TmF2aWdhdG9yKCksdWU9bmYoUGcsdGhp'@;
put 'cykuZ2V0TGFzdE1lbnVQYWdlKCk7Ry5mb2N1cygpLHVlPjA/cmUuc2V0Q3VycmVudFBhZ2UodWUpOnJlLnRvRmlyc3RJdGVtKCl9fSwuLi5BcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cykubWFwKEc9PntsZXRbLHJlXT1HO3JldHVybiByZS5nZXRFbGVtZW50cygpfSkuZmxhdCgpXTtySChQ'@;
put 'Zyx0aGlzLGZ1bmN0aW9uIHMydChjLGwpe2xldCBkLGE9LTE7Y29uc3QgaD1mdW5jdGlvbiBhMnQoYyl7cmV0dXJuIFBnZSh7aW5pdGlhbFBhZ2U6MCxzaXplOigpPT5jLmxlbmd0aCxvbkl0ZW1TZWxlY3Q6KGEsZCk9Pntjb25zdCBoPWNbYV07cmV0dXJuIGggaW5zdGFuY2VvZiBRVD9kOiEo'@;
put 'aC5lbGVtZW50JiYhejcoaC5lbGVtZW50KSkmJnZvaWQgaC5mb2N1cygpfX0pfShsKSxmPXVlPT4oKT0+e2QuaXNPcGVuZWQoKSYmZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4obkEpLGguc2V0Q3VycmVudFBhZ2UobC5pbmRleE9mKHVlKSl9O2Z1bmN0aW9uIHYodWUpe2Nv'@;
put 'bnN0IHllPWQuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCksRWU9dWUuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCk7aC5jbGVhcigpLEVlLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OnllLmdldENvbnRleHQo'@;
put 'bkEpLGNhbGxiYWNrOigpPT57dWUuaXNTdWJNZW51KCkmJnVlLmNsb3NlKCkseWUubGlzdGVuKG5BKX19XSksIXVlLmlzU3ViTWVudSgpJiZ5ZS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6QmU9Pntjb25zdCBHZT1kLmdldE5h'@;
put 'dmlnYXRvcigpO0dlLmdldEN1cnJlbnRQYWdlKCk+LTEmJihhPUdlLmdldEN1cnJlbnRQYWdlKCkpLEdlLmNsZWFyKCksQmUuc2hpZnRLZXk/aC50b1ByZXZpb3VzSXRlbSgpOmgudG9OZXh0SXRlbSgpfX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57ZC5jbG9zZSgpfX0se2tl'@;
put 'eXM6W1siRW50ZXIiXSxbIlNwYWNlIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOkJlPT57Y29uc3QgR2U9bFtoLmdldEN1cnJlbnRQYWdlKCldO0dlIGluc3RhbmNlb2YgWVQmJihHZS5vcGVuT3B0aW9ucygpLEJlLnByZXZlbnREZWZhdWx0KCkpLEdlIGluc3RhbmNlb2YgcVQmJihH'@;
put 'ZS5hY3RpdmF0ZSgpLEJlLnByZXZlbnREZWZhdWx0KCkpLEdlIGluc3RhbmNlb2YgVmh8fEJlLnByZXZlbnREZWZhdWx0KCl9fV0sbkEpfWZ1bmN0aW9uIEkodWUpe3VlLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLHllPT57eWUua2V5LnN0YXJ0c1dpdGgoImZpbHRlcl8i'@;
put 'KXx8aC5jbGVhcigpfSksdWUuYWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIix2KSx1ZS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsdiksZD11ZX1yZXR1cm4gbC5mb3JFYWNoKHVlPT57dWUgaW5zdGFuY2VvZiBWaCYmKHVlLmFkZExvY2FsSG9vaygiY2xpY2siLGYodWUpKSx1ZS5h'@;
put 'ZGRMb2NhbEhvb2soImZvY3VzIixmKHVlKSksdWUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIixmKHVlKSkpfSksSShjKSx7Li4uaCxsaXN0ZW46ZnVuY3Rpb24gTSgpe2QuZm9jdXMoKSxkLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihuQSl9LHNldE1lbnU6SSxnZXRNZW51'@;
put 'OmZ1bmN0aW9uIEcoKXtyZXR1cm4gZH0sZ2V0TGFzdE1lbnVQYWdlOmZ1bmN0aW9uIHJlKCl7cmV0dXJuIGF9fX0odGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudSxNKSk7Y29uc3QgST1HPT57bmYoUGcsdGhpcykubGlzdGVuKCksRy5wcmV2ZW50RGVmYXVsdCgpLGNfKEcua2V5Q29kZSwi'@;
put 'VEFCIikmJihHLnNoaWZ0S2V5P25mKFBnLHRoaXMpLnRvUHJldmlvdXNJdGVtKCk6bmYoUGcsdGhpcykudG9OZXh0SXRlbSgpKX07dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikuYWRkTG9jYWxIb29rKCJsaXN0VGFiS2V5ZG93biIsSSksdGhpcy5jb21wb25lbnRzLmdl'@;
put 'dCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmFkZExvY2FsSG9vaygic2VsZWN0VGFiS2V5ZG93biIsSSl9dGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93'@;
put 'bk1lbnVQbHVnaW4pJiZ2b2lkIDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNv'@;
put 'bmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJl'@;
put 'Z2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkFsdCIsIkEiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZCgpO3Ro'@;
put 'aXMuY2xlYXJDb25kaXRpb25zKCksdGhpcy5maWx0ZXIoKSxsJiZ0aGlzLmhvdC5zZWxlY3RDZWxscyhsKX0sZ3JvdXA6VzVlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdy'@;
put 'b3VwKFc1ZSl9YWRkQ29uZGl0aW9uKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106aTY7Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRp'@;
put 'b24oZix7Y29tbWFuZDp7a2V5OmF9LGFyZ3M6ZH0saCl9cmVtb3ZlQ29uZGl0aW9ucyhsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9Y2xlYXJDb25kaXRpb25zKGwpe2lmKHZvaWQgMD09'@;
put 'PWwpdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmNsZWFuKCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9fWltcG9ydENvbmRpdGlvbnMobCl7dGhpcy5jb25kaXRpb25Db2xsZWN0'@;
put 'aW9uLmltcG9ydEFsbENvbmRpdGlvbnMobCl9ZXhwb3J0Q29uZGl0aW9ucygpe3JldHVybiB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpfWZpbHRlcigpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPXRoaXMu'@;
put 'X2NyZWF0ZURhdGFGaWx0ZXIoKSxkPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgpO2xldCBoPVtdO2NvbnN0IGY9dGhpcy5leHBvcnRDb25kaXRpb25zKCksdj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRmlsdGVyIixmLG5mKHc5LHRoaXMpKTtpZighMSE9PXYmJmQpe2Nv'@;
put 'bnN0IE09W107dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksaD15byhhLmZpbHRlcigpLEc9PkcubWV0YS52aXN1YWxSb3cpO2NvbnN0IEk9S1QoaCk7S2EodGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMSxHPT57SShHKXx8TS5wdXNo'@;
put 'KEcpfSksS24oTSxHPT57dGhpcy5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoRywhMCl9KX0sITApLCFsJiYhaC5sZW5ndGgmJnRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHJIKHc5LHRoaXMsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpfWVsc2UhMT09PXZ8fGQ/dGhpcy5pbXBvcnRD'@;
put 'b25kaXRpb25zKG5mKHc5LHRoaXMpKToockgodzksdGhpcyx0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSksdGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKGw/LTE6MCx0aGlzLmhvdC5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5jb2wpLCExIT09diYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZpbHRlciIsZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgbDtjb25zdCBhPW51'@;
put 'bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGE/e3Zpc3VhbEluZGV4OmEuY29sLHBoeXNpY2FsSW5kZXg6dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhLmNvbCl9Om51bGx9Z2V0RGF0YU1hcEF0'@;
put 'Q29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCksZD1bXTtyZXR1cm4gS24odGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q29sKGEpLChoLGYpPT57dmFyIHY7Y29uc3R7cm93Ok0sY29sOkksdmlzdWFsQ29sOkcsdmlzdWFsUm93OnJlLHR5cGU6dWUsaW5zdGFuY2U6'@;
put 'eWUsZGF0ZUZvcm1hdDpFZSxsb2NhbGU6QmV9PXRoaXMuaG90LmdldENlbGxNZXRhKGYsYSksR2U9bnVsbCE9PSh2PXRoaXMuaG90LmdldERhdGFBdENlbGwodGhpcy5ob3QudG9WaXN1YWxSb3coZiksYSkpJiZ2b2lkIDAhPT12P3Y6aDtkLnB1c2goe21ldGE6e3JvdzpNLGNvbDpJLHZpc3Vh'@;
put 'bENvbDpHLHZpc3VhbFJvdzpyZSx0eXBlOnVlLGluc3RhbmNlOnllLGRhdGVGb3JtYXQ6RWUsbG9jYWxlOkJlfSx2YWx1ZTpfUShHZSl9KX0pLGR9dXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24obCl7Y29uc3QgZD13USh0aGlzLmhvdC5nZXREYXRhQXRDb2wobCkpO3RoaXMuY29uZGl0'@;
put 'aW9uVXBkYXRlT2JzZXJ2ZXIudXBkYXRlU3RhdGVzQXRDb2x1bW4obCxkKX1yZXN0b3JlQ29tcG9uZW50cyhsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBoeXNpY2FsSW5kZXg7bC5mb3JFYWNoKGg9Pnto'@;
put 'LmlzSGlkZGVuKCl8fGgucmVzdG9yZVN0YXRlKGQpfSksdGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpfWdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHMobCxhLGQsaCl7bGV0IGY9bDtyZXR1cm4gZj09PVFGJiZhLmNvbW1hbmQua2V5IT09UzAmJmQuY29tbWFu'@;
put 'ZC5rZXkhPT1TMCYmaC5jb21tYW5kLmtleSE9PVMwP2Y9eVE6aC5jb21tYW5kLmtleSE9PVMwJiYoYS5jb21tYW5kLmtleT09PVMwfHxkLmNvbW1hbmQua2V5PT09UzApJiYoZj1pNiksZn1zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5k'@;
put 'cm9wZG93bk1lbnVQbHVnaW4uc2V0TGlzdGVuaW5nKCl9dXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSx7Y29tbWFuZDphfT1sLmdldFN0YXRlKCksZD1bdGhpcy5jb21wb25lbnRz'@;
put 'LmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIildO2Euc2hvd09wZXJhdG9ycz90aGlzLnNob3dDb21wb25lbnRzKC4uLmQpOnRoaXMuaGlkZUNvbXBvbmVudHMoLi4uZCl9X2NyZWF0ZURhdGFGaWx0ZXIoKXtyZXR1cm4g'@;
put 'bmV3IHo1ZShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLGE9PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKGEpKX1nZXRJbmRleGVzT2ZDb21wb25lbnRzKCl7Y29uc3QgbD1bXTtpZighdGhpcy5k'@;
put 'cm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuIGw7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBLbihoLHY9PntLbihhLm1lbnVJdGVt'@;
put 'cywoTSxJKT0+e00ua2V5PT09di5nZXRNZW51SXRlbURlc2NyaXB0b3IoKS5rZXkmJmwucHVzaChJKX0pfSksbH1jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRo'@;
put 'aXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybjtjb25zdCBkPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuaG90TWVudSxoPWQuZ2V0UGx1Z2luKCJoaWRkZW5Sb3dzIik7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZj4xP2YtMTowKSxNPTE7TTxmO00rKyl2'@;
put 'W00tMV09YXJndW1lbnRzW01dO2NvbnN0IEk9dGhpcy5nZXRJbmRleGVzT2ZDb21wb25lbnRzKC4uLnYpO2w/aC5zaG93Um93cyhJKTpoLmhpZGVSb3dzKEkpLGQucmVuZGVyKCl9aGlkZUNvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7'@;
put 'ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCExLC4uLmEpfXNob3dDb21wb25lbnRzKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFu'@;
put 'Z2VDb21wb25lbnRzVmlzaWJpbGl0eSghMCwuLi5hKX1kZXN0cm95KCl7dGhpcy5lbmFibGVkJiYodGhpcy5jb21wb25lbnRzLmZvckVhY2goKGwsYSk9PntudWxsIT09bCYmKGwuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoYSxudWxsKSl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rp'@;
put 'b24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZGVzdHJveSgpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBoMnQoYyl7YyYmS24oYyxsPT57Y29uc3RbLGFdPWws'@;
put 'ZD10aGlzLmhvdC5wcm9wVG9Db2woYSk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoZCkmJnRoaXMudXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24oZCl9KX1mdW5jdGlvbiBmMnQoKXtjb25zdCBjPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7dGhpcy5y'@;
put 'ZXN0b3JlQ29tcG9uZW50cyhBcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cy52YWx1ZXMoKSkpLGMudXBkYXRlTWVudURpbWVuc2lvbnMoKX1mdW5jdGlvbiBwMnQoKXt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0'@;
put 'aW9ucygpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpfWZ1bmN0aW9uIGcydCgpe2NvbnN0IGM9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTtuZihBUSx0aGlzKS5oYXMoYyl8fG5mKFBnLHRo'@;
put 'aXMpLnNldE1lbnUoYyksbmYoQVEsdGhpcykuYWRkKGMpfWZ1bmN0aW9uIG0ydChjKXtjLml0ZW1zLnB1c2goe25hbWU6aW99KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChsPT57Yy5pdGVtcy5wdXNoKGwuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9ZnVuY3Rpb24gWTVlKGMpe3ZhciBs'@;
put 'O2lmKCJhY2NlcHQiPT09Yyl7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7dmFyIGE7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbD09PShhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8YS5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4Omh9PWQs'@;
put 'Zj10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKSx2PXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUoKSxNPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCks'@;
put 'ST10aGlzLmdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHModGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLmdldEFjdGl2ZU9wZXJhdGlvbklkKCksZix2LE0pO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZ3JvdXBDaGFuZ2VzKCk7bGV0IEc9dGhpcy5jb25k'@;
put 'aXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oaCk7LTE9PT1HJiYoRz12b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGgpLGYuY29tbWFuZC5rZXkhPT1TMCYmKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24o'@;
put 'aCxmLEksRyksdi5jb21tYW5kLmtleSE9PVMwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsdixJLEcpKSxNLmNvbW1hbmQua2V5IT09UzAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCxNLEksRyksdGhpcy5jb25kaXRpb25VcGRhdGVP'@;
put 'YnNlcnZlci5mbHVzaCgpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKHJlPT5yZS5zYXZlU3RhdGUoaCkpLHRoaXMuZmlsdGVyKCl9bnVsbD09PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWZ1bmN0aW9uIHYydChjLGwpe2NvbnN0IGE9dGhpcy5k'@;
put 'cm9wZG93bk1lbnVQbHVnaW4ubWVudTt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksYy5jb25zdHJ1Y3Rvcj09PW1RJiYhbC5pbnB1dHNDb3VudCYmdGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKSxhLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCl9ZnVuY3Rp'@;
put 'b24gRzVlKCl7dGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1mdW5jdGlvbiB5MnQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjKTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpJiZhPT09dGhpcy5o'@;
put 'b3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKS0xP0VpKGwsImh0RmlsdGVyc0FjdGl2ZSIpOmhzKGwsImh0RmlsdGVyc0FjdGl2ZSIpfWZ1bmN0aW9uIGIydChjKXt2YXIgbDtpZihudWxsPT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1sfHwhbC5lbmFibGVk'@;
put 'KXJldHVybjtjb25zdHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29uZGl0aW9uczphLGNvbHVtbjpkfSxjb25kaXRpb25BcmdzQ2hhbmdlOmh9PWM7QXJyYXkuaXNBcnJheShoKSYmckgodzksdGhpcyxuZih3OSx0aGlzKS5tYXAoTT0+KE0uY29sdW1uPT09ZCYmYS5sZW5ndGg+MCYmTS5jb25k'@;
put 'aXRpb25zLmZvckVhY2goST0+eyJieV92YWx1ZSI9PT1JLm5hbWUmJihJLmFyZ3M9W1suLi5oXV0pfSksTSkpKTtjb25zdCBmPWEuZmlsdGVyKE09Pk0ubmFtZT09PWI5KSx2PWEuZmlsdGVyKE09Pk0ubmFtZSE9PWI5KTtpZihmLmxlbmd0aD49Mnx8di5sZW5ndGg+PTMpWW8oaGxgVGhlIGZp'@;
put 'bHRlciBjb25kaXRpb25zIGhhdmUgYmVlbiBhcHBsaWVkIHByb3Blcmx5LCBidXQgY291bGRu4oCZdCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXHgyMAogICAgICAgIFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJvcGRvd24g'@;
put 'bWVudS5ceDIwCiAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24uYCk7ZWxzZXtjb25zdCBNPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRPcGVyYXRpb24oZCk7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLnVwZGF0ZVN0'@;
put 'YXRlKHZbMF0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS51cGRhdGVTdGF0ZSh2WzFdLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS51cGRhdGVTdGF0ZShNLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92'@;
put 'YWx1ZSIpLnVwZGF0ZVN0YXRlKGMpfX1jb25zdCAkNWU9ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiLGtRPXtsaWNlbnNlS2V5OiQ1ZSx1c2VBcnJheUFyaXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJvOiEwLHByZWNpc2lv'@;
put 'bkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxsZWFwWWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZIl0sdGltZUZvcm1h'@;
put 'dHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxsOiEwLHVzZVJlZ3VsYXJFeHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rpb25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGxhbmd1YWdlOiJl'@;
put 'bkdCIn07ZnVuY3Rpb24gSzVlKGMpe3ZhciBsO3JldHVybnttYXhDb2x1bW5zOmMubWF4Q29sdW1ucyxtYXhSb3dzOmMubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KGw9Y1t3MV0pfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5sYW5ndWFnZSl8fHZvaWQgMD09PWw/dm9pZCAwOmwubGFuZ0Nv'@;
put 'ZGV9fWZ1bmN0aW9uIFg1ZShjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykucmVkdWNlKChsLGEpPT4oImh5cGVyZm9ybXVsYSIhPT1hJiYobFthXT1jW2FdKSxsKSx7fSl9ZnVuY3Rpb24gaUgoKXtjb25zdCBjPSJlbmdpbmVfcmVsYXRpb25zaGlwIixsPVUyKHcxKTtyZXR1cm4gbC5oYXNJdGVt'@;
put 'KGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIERRKCl7Y29uc3QgYz0ic2hhcmVkX2VuZ2luZV91c2FnZSIsbD1VMih3MSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBxNWUoYyl7'@;
put 'dmFyIGw7Y29uc3QgYT1pSCgpLGQ9MD09PWEuc2l6ZT9bXTpBcnJheS5mcm9tKG51bGwhPT0obD1hLmdldChjKSkmJnZvaWQgMCE9PWw/bDpbXSk7cmV0dXJuIG5ldyBNYXAoZC5tYXAoaD0+W2guZ2V0UGx1Z2luKCJmb3JtdWxhcyIpLnNoZWV0SWQsaF0pKX1mdW5jdGlvbiBKNWUoYyxsKXtp'@;
put 'ZihjKXtjb25zdCBhPWlIKCksZD1hLmdldChjKSxoPURRKCksZj1oLmdldChjKTtkJiZkLmluY2x1ZGVzKGwpJiYoZC5zcGxpY2UoZC5pbmRleE9mKGwpLDEpLDA9PT1kLmxlbmd0aCYmYS5kZWxldGUoYykpLGYmJmYuaW5jbHVkZXMobC5ndWlkKSYmKGYuc3BsaWNlKGYuaW5kZXhPZihsLmd1'@;
put 'aWQpLDEpLDA9PT1mLmxlbmd0aCYmKGguZGVsZXRlKGMpLGMuZGVzdHJveSgpKSl9fWNvbnN0IFE1ZT0iREQvTU0vWVlZWSI7ZnVuY3Rpb24gSVEoYyxsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiJkYXRlIj09PWx9ZnVuY3Rpb24gZW1lKGMsbCl7cmV0dXJuIFBzKGMsbCwhMCkuaXNW'@;
put 'YWxpZCgpfWZ1bmN0aW9uIHRtZShjLGwpe3JldHVybiBQcyhjLGwsITApLmZvcm1hdChRNWUpfWZ1bmN0aW9uIFIydChjLGwpe3JldHVybiBQcyhjLFE1ZSwhMCkuZm9ybWF0KGwpfWZ1bmN0aW9uIG5tZShjLGwpe2NvbnN0IGQ9bmV3IERhdGUoRGF0ZS5VVEMoMCwwLGMrLTEpKTtyZXR1cm4g'@;
put 'UHMoZCkuZm9ybWF0KGwpfWZ1bmN0aW9uIFJRKGMsbCxhKXtjb25zdCBkPWZ1bmN0aW9uIE8ydChjLGwpe2NvbnN0IGE9W107cmV0dXJuIGMuZm9yRWFjaChkPT57Y29uc3QgaD17ZnJvbTpkLHRvOmx9O2EuZm9yRWFjaChmPT57Zi5mcm9tPmguZnJvbSYmZi50bzw9aC5mcm9tJiZmLmZyb20+'@;
put 'Zi50byYmKGguZnJvbSs9MSl9KSxoLmZyb20+PWwmJihsKz0xKSxhLnB1c2goaCl9KSxhfShjLGZ1bmN0aW9uIEwydChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKEFycmF5KGEpLmtleXMoKSkuZmlsdGVyKGY9PiExPT09Yy5pbmNsdWRlcyhmKSk7dmFyIGg7cmV0dXJuIDA9PT1sP251bGwh'@;
put 'PT0oaD1kW2xdKSYmdm9pZCAwIT09aD9oOjA6ZFtsLTFdKzF9KGMsbCxhKSk7cmV0dXJuIGZ1bmN0aW9uIFAydChjKXtyZXR1cm4gYy5mb3JFYWNoKChsLGEpPT57Yy5zbGljZShhKzEpLmZvckVhY2goaD0+e2guZnJvbT5sLmZyb20mJmguZnJvbTxoLnRvJiYoaC5mcm9tLT0xKX0pfSksY30o'@;
put 'ZCl9ZnVuY3Rpb24gQzkoYyxsLGEpeyhmdW5jdGlvbiBGMnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9u'@;
put 'IHdjKGMsbCl7cmV0dXJuIGMuZ2V0KHJtZShjLGwpKX1mdW5jdGlvbiBvNihjLGwsYSl7cmV0dXJuIGMuc2V0KHJtZShjLGwpLGEpLGF9ZnVuY3Rpb24gcm1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6'@;
put 'YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgaUE9bmV3IFdlYWtNYXAsbDY9bmV3IFdlYWtNYXAsamg9bmV3IFdlYWtNYXAsYUg9bmV3IFdlYWtNYXAsTFE9bmV3IFdlYWtNYXAsT1E9bmV3IFdlYWtNYXAs'@;
put 'c0g9bmV3IFdlYWtNYXA7Y29uc3QgaW1lPWNsYXNzIEgydHtjb25zdHJ1Y3RvcihsLGEsZCl7QzkodGhpcyxpQSx2b2lkIDApLEM5KHRoaXMsbDYsdm9pZCAwKSxDOSh0aGlzLGpoLHZvaWQgMCksQzkodGhpcyxhSCxbXSksQzkodGhpcyxMUSxbXSksQzkodGhpcyxPUSx2b2lkIDApLEM5KHRo'@;
put 'aXMsc0gsW10pLG82KGlBLHRoaXMsbCksbzYobDYsdGhpcyxhKSxvNihqaCx0aGlzLGQpfXNldFJlbW92ZWRIZkluZGV4ZXMobCl7cmV0dXJuIG82KHNILHRoaXMsbC5tYXAoYT0+e2NvbnN0IGQ9d2MobDYsdGhpcykuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoYSk7cmV0dXJuIHRoaXMu'@;
put 'Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKX0pKSx3YyhzSCx0aGlzKX1nZXRSZW1vdmVkSGZJbmRleGVzKCl7cmV0dXJuIHdjKHNILHRoaXMpfWdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT13YyhsNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKSxkPXdjKGw2LHRo'@;
put 'aXMpLmdldE5vdFRyaW1tZWRJbmRleGVzKCk7cmV0dXJuIGEuaW5kZXhPZihkW2xdLGwpfXN5bmNNb3ZlcyhsKXtjb25zdCBkPWBtb3ZlJHtmMSh3YyhpQSx0aGlzKSl9c2A7d2MoamgsdGhpcykuZ2V0RW5naW5lKCkuYmF0Y2goKCk9PntsLmZvckVhY2goaD0+e2guZnJvbSE9PWgudG8mJmgu'@;
put 'ZnJvbSsxIT09aC50byYmd2MoamgsdGhpcykuZ2V0RW5naW5lKClbZF0od2MoamgsdGhpcykuZ2V0U2hlZXRJZCgpLGguZnJvbSwxLGgudG8pfSl9KX1zdG9yZU1vdmVzSW5mb3JtYXRpb24obCxhLGQpeyExIT09ZCYmKG82KExRLHRoaXMsbC5tYXAoaD0+dGhpcy5nZXRIZkluZGV4RnJvbVZp'@;
put 'c3VhbEluZGV4KGgpKSksbzYoT1EsdGhpcyx0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSkpKX1jYWxjdWxhdGVBbmRTeW5jTW92ZXMobCxhKXtpZih3YyhqaCx0aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpfHwhMT09PWx8fCExPT09YSlyZXR1cm47Y29uc3QgZD1SUSh3YyhM'@;
put 'USx0aGlzKSx3YyhPUSx0aGlzKSx3YyhsNix0aGlzKS5nZXROdW1iZXJPZkluZGV4ZXMoKSk7bnVsbD09PXdjKGpoLHRoaXMpLmdldFNoZWV0SWQoKT93YyhqaCx0aGlzKS5nZXRQb3N0cG9uZUFjdGlvbigoKT0+dGhpcy5zeW5jTW92ZXMoZCkpOnRoaXMuc3luY01vdmVzKGQpfWdldEluZGV4'@;
put 'ZXNDaGFuZ2VTeW5jTWV0aG9kKCl7Y29uc3QgbD1gc2V0JHtmMSh3YyhpQSx0aGlzKSl9T3JkZXJgO3JldHVybiBhPT57aWYod2MoamgsdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKSlyZXR1cm47Y29uc3QgZD13YyhsNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKTtpZigidXBkYXRl'@;
put 'Ij09PWEmJmQubGVuZ3RoPjApe2NvbnN0IGg9d2MoYUgsdGhpcykubWFwKEk9PmQuaW5kZXhPZihJKSksZj13YyhqaCx0aGlzKS5nZXRFbmdpbmUoKS5nZXRTaGVldERpbWVuc2lvbnMod2MoamgsdGhpcykuZ2V0U2hlZXRJZCgpKTtsZXQgdjt2PSJyb3ciPT09d2MoaUEsdGhpcyk/Zi5oZWln'@;
put 'aHQ6Zi53aWR0aDtmb3IobGV0IEk9aC5sZW5ndGg7STx2O0krPTEpaC5wdXNoKEkpO3djKGpoLHRoaXMpLmdldEVuZ2luZSgpW2xdKHdjKGpoLHRoaXMpLmdldFNoZWV0SWQoKSxoKX1vNihhSCx0aGlzLGQpfX1pbml0KCl7bzYoYUgsdGhpcyx3YyhsNix0aGlzKS5nZXRJbmRleGVzU2VxdWVu'@;
put 'Y2UoKSl9fTtmdW5jdGlvbiBTOShjLGwsYSl7KGZ1bmN0aW9uIE4ydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVu'@;
put 'Y3Rpb24gRmcoYyxsKXtyZXR1cm4gYy5nZXQoYW1lKGMsbCkpfWZ1bmN0aW9uIE05KGMsbCxhKXtyZXR1cm4gYy5zZXQoYW1lKGMsbCksYSksYX1mdW5jdGlvbiBhbWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro'@;
put 'PDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBvSD1uZXcgV2Vha01hcCxsSD1uZXcgV2Vha01hcCxQUT1uZXcgV2Vha01hcCxGUT1uZXcgV2Vha01hcCxIUT1uZXcgV2Vha01hcCxOUT1uZXcgV2Vh'@;
put 'a01hcCxWUT1uZXcgV2Vha01hcDtjb25zdCBCMnQ9Y2xhc3MgVjJ0e2NvbnN0cnVjdG9yKGwsYSxkKXtTOSh0aGlzLG9ILHZvaWQgMCksUzkodGhpcyxsSCx2b2lkIDApLFM5KHRoaXMsUFEsdm9pZCAwKSxTOSh0aGlzLEZRLCExKSxTOSh0aGlzLEhRLCExKSxTOSh0aGlzLE5RLG51bGwpLFM5'@;
put 'KHRoaXMsVlEsbnVsbCksTTkob0gsdGhpcyxuZXcgaW1lKCJyb3ciLGwsdGhpcykpLE05KGxILHRoaXMsbmV3IGltZSgiY29sdW1uIixhLHRoaXMpKSxNOShQUSx0aGlzLGQpfWdldEZvckF4aXMobCl7cmV0dXJuIEZnKCJyb3ciPT09bD9vSDpsSCx0aGlzKX1zZXRQZXJmb3JtVW5kbyhsKXtN'@;
put 'OShGUSx0aGlzLGwpfXNldFBlcmZvcm1SZWRvKGwpe005KEhRLHRoaXMsbCl9aXNQZXJmb3JtaW5nVW5kb1JlZG8oKXtyZXR1cm4gRmcoRlEsdGhpcyl8fEZnKEhRLHRoaXMpfWdldFNoZWV0SWQoKXtyZXR1cm4gRmcoVlEsdGhpcyl9Z2V0RW5naW5lKCl7cmV0dXJuIEZnKE5RLHRoaXMpfWdl'@;
put 'dFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIEZnKFBRLHRoaXMpfXNldHVwU3luY0VuZHBvaW50KGwsYSl7TTkoTlEsdGhpcyxsKSxNOShWUSx0aGlzLGEpLEZnKG9ILHRoaXMpLmluaXQoKSxGZyhsSCx0aGlzKS5pbml0KCl9fTtmdW5jdGlvbiB4OShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g'@;
put 'ejJ0KGMpe3ZhciBsPWZ1bmN0aW9uIFUydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy'@;
put 'biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gQlEoYyxsLGEpe3NtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gc21lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBjNihjLGwsYSl7cmV0dXJuIGMuc2V0KGpvKGMsbCksYSksYX1mdW5jdGlvbiBFOShjLGwpe3JldHVybiBjLmdldChqbyhjLGwpKX1mdW5j'@;
put 'dGlvbiBqbyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdzE9ImZv'@;
put 'cm11bGFzIixaMnQ9WyJtYXhSb3dzIiwibWF4Q29sdW1ucyIsImxhbmd1YWdlIl07TWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiksTWEu'@;
put 'Z2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRBZGRlZCIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVtb3ZlZCIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVuYW1lZCIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy'@;
put 'KCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIik7Y29uc3QgdXc9Yz0+IlVuZG9SZWRvLnVuZG8iPT09Y3x8IlVuZG9SZWRvLnJlZG8iPT09Y3x8ImF1dG8iPT09Yzt2YXIgSGc9bmV3IFdlYWtNYXAsY0g9bmV3IFdlYWtNYXAsYUE9bmV3IFdlYWtNYXAsR289bmV3IFdlYWtTZXQ7Y2xhc3Mg'@;
put 'WTJ0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXt2YXIgbDtzdXBlciguLi5hcmd1bWVudHMpLGw9dGhpcyxmdW5jdGlvbiBqMnQoYyxsKXtzbWUoYyxsKSxsLmFkZChjKX0odGhpcyxHbyksQlEodGhpcyxIZywhMSksQlEodGhpcyxjSCwhMSksQlEodGhpcyxhQSxbWyJ2YWx1ZXNVcGRhdGVk'@;
put 'IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqbyhHbyxsLGxmdCkuY2FsbChsLC4uLmQpfV0sWyJuYW1lZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gam8oR28sbCxjZnQpLmNhbGwobCwuLi5kKX1dLFsibmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5l'@;
put 'dyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gam8oR28sbCx1ZnQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3Vt'@;
put 'ZW50c1toXTtyZXR1cm4gam8oR28sbCxkZnQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRSZW5hbWVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqbyhHbyxsLGhmdCkuY2Fs'@;
put 'bChsLC4uLmQpfV0sWyJzaGVldFJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGpvKEdvLGwsZmZ0KS5jYWxsKGwsLi4uZCl9XV0pLHg5KHRoaXMsInN0YXRpY1Jl'@;
put 'Z2lzdGVyIixVMigiZm9ybXVsYXMiKSkseDkodGhpcywiZW5naW5lIixudWxsKSx4OSh0aGlzLCJzaGVldElkIixudWxsKSx4OSh0aGlzLCJzaGVldE5hbWUiLG51bGwpLHg5KHRoaXMsImluZGV4U3luY2VyIixudWxsKSx4OSh0aGlzLCJyb3dBeGlzU3luY2VyIixudWxsKSx4OSh0aGlzLCJj'@;
put 'b2x1bW5BeGlzU3luY2VyIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdzF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjYwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3cxLC4uLloydF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlz'@;
put 'LmhvdC5nZXRTZXR0aW5ncygpW3cxXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhPXRoaXM7aWYoIXRoaXMuZW5hYmxlZCl7aWYodGhpcy5lbmdpbmU9bnVsbCE9PShsPWZ1bmN0aW9uIFMydChjKXtjb25zdCBsPWMuZ2V0U2V0dGluZ3MoKSxhPWxbdzFdLGQ9YT8uZW5naW5lO2lmKCEwPT09YXx8'@;
put 'YmMoZCkpcmV0dXJuIG51bGw7dmFyIGg7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQuaHlwZXJmb3JtdWxhfHwiZnVuY3Rpb24iPT10eXBlb2YgZClyZXR1cm4gZnVuY3Rpb24gTTJ0KGMsbCxhKXtjb25zdCBkPWxbdzFdLGg9ZnVuY3Rpb24gXzJ0KGMpe3ZhciBsO2NvbnN0IGE9Y1t3MV0sZD1Y'@;
put 'NWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLGg9SzVlKGMpO3JldHVybnsuLi5rUSwuLi5kLC4uLmh9fShsKSxmPWlIKCksdj1EUSgpOyhmdW5jdGlvbiB4MnQoYyxsKXtsJiZsLmZvckVhY2goYT0+e2NvbnN0'@;
put 'e25hbWU6ZCxwbHVnaW46aCx0cmFuc2xhdGlvbnM6Zn09YTt0cnl7Yy5yZWdpc3RlckZ1bmN0aW9uKGQsaCxmKX1jYXRjaCh2KXtZbyh2Lm1lc3NhZ2UpfX0pfSkoYyxkLmZ1bmN0aW9ucyksZnVuY3Rpb24gRTJ0KGMsbCl7aWYobCl7Y29uc3R7bGFuZ0NvZGU6YX09bDt0cnl7Yy5yZWdpc3Rl'@;
put 'ckxhbmd1YWdlKGEsbCl9Y2F0Y2goZCl7WW8oZC5tZXNzYWdlKX19fShjLGQubGFuZ3VhZ2UpO2NvbnN0IE09Yy5idWlsZEVtcHR5KGgpO3JldHVybiBmLnNldChNLFthXSksdi5zZXQoTSxbYS5ndWlkXSksZnVuY3Rpb24gVDJ0KGMsbCl7bCYmKGMuc3VzcGVuZEV2YWx1YXRpb24oKSxsLmZv'@;
put 'ckVhY2goYT0+e2NvbnN0e25hbWU6ZCxleHByZXNzaW9uOmgsc2NvcGU6ZixvcHRpb25zOnZ9PWE7dHJ5e2MuYWRkTmFtZWRFeHByZXNzaW9uKGQsaCxmLHYpfWNhdGNoKE0pe1lvKE0ubWVzc2FnZSl9fSksYy5yZXN1bWVFdmFsdWF0aW9uKCkpfShNLGQubmFtZWRFeHByZXNzaW9ucyksTS5v'@;
put 'bigic2hlZXRBZGRlZCIsKCk9PntNLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksTS5vbigic2hlZXRSZW1vdmVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNfShudWxsIT09KGg9ZC5oeXBlcmZvcm11bGEpJiZ2b2lkIDAhPT1oP2g6ZCxsLGMpO2lmKCJvYmplY3QiPT10'@;
put 'eXBlb2YgZCYmYmMoZC5oeXBlcmZvcm11bGEpKXtjb25zdCBmPWlIKCksdj1EUSgpLmdldChkKTtyZXR1cm4gZi5oYXMoZCl8fGYuc2V0KGQsW10pLGYuZ2V0KGQpLnB1c2goYyksdiYmdi5wdXNoKGMuZ3VpZCksZC5nZXRDb25maWcoKS5saWNlbnNlS2V5fHxkLnVwZGF0ZUNvbmZpZyh7bGlj'@;
put 'ZW5zZUtleTokNWV9KSwoZC5nZXRDb25maWcoKS5sZWFwWWVhcjE5MDAhPT1rUS5sZWFwWWVhcjE5MDB8fCExPT09SE8oZC5nZXRDb25maWcoKS5udWxsRGF0ZSxrUS5udWxsRGF0ZSkpJiZZbyhobGBJZiB5b3UgdXNlIEh5cGVyRm9ybXVsYSB3aXRoIEhhbmRzb250YWJsZSwga2VlcCB0aGUg'@;
put 'ZGVmYXVsdCBcYGxlYXBZZWFyMTkwMFxgIGFuZCBcYG51bGxEYXRlXGAgCiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1heSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy5gKSxkfXJldHVybiBudWxsfSh0aGlzLmhv'@;
put 'dCkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5lbmdpbmUsIXRoaXMuZW5naW5lKXJldHVybiB2b2lkIFlvKCJNaXNzaW5nIHRoZSByZXF1aXJlZCBgZW5naW5lYCBrZXkgaW4gdGhlIEZvcm11bGFzIHNldHRpbmdzLiBQbGVhc2UgZmlsbCBpdCB3aXRoIGVpdGhlciBhbiBlbmdpbmUgY2xhc3Mgb3Ig'@;
put 'YW4gZW5naW5lIGluc3RhbmNlLiIpO2lmKG51bGwhPT10aGlzLnNoZWV0TmFtZSYmIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7Y29uc3QgZD10aGlzLmFkZFNoZWV0KHRoaXMuc2hlZXROYW1lLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTshMSE9'@;
put 'PWQmJmpvKEdvLHRoaXMsc0EpLmNhbGwodGhpcyxkKX10aGlzLmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLG9tZSku'@;
put 'Y2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLGxtZSkuY2FsbChhLC4uLmgpfSksdGhp'@;
put 'cy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLG9tZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRl'@;
put 'clVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpvKEdvLGEsbG1lKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9u'@;
put 'KCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpvKEdvLGEsWDJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpvKEdvLGEscTJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9'@;
put 'bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLEcydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJy'@;
put 'YXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpvKEdvLGEsSjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7Zjxk'@;
put 'O2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gam8oR28sYSxjbWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09'@;
put 'YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLGNtZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0'@;
put 'dXJuIGpvKEdvLGEsUTJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gam8oR28sYSxlZnQp'@;
put 'LmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpvKEdvLGEscmZ0KS5jYWxsKGEsLi4uaCl9KSx0'@;
put 'aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLGlmdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZv'@;
put 'cmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpvKEdvLGEsdGZ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gam8oR28sYSxuZnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBk'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpvKEdvLGEsYWZ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLHNmdCkuY2FsbChhLC4uLmgpfSksdGhpcy5pbmRleFN5bmNlcj1uZXcgQjJ0KHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGQ9Pnt0aGlz'@;
put 'LmhvdC5hZGRIb29rT25jZSgiaW5pdCIsKCk9PntkKCl9KX0pLHRoaXMucm93QXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoInJvdyIpLHRoaXMuY29sdW1uQXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoImNvbHVtbiIpLHRoaXMuaG90LmFkZEhv'@;
put 'b2soImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLHRoaXMucm93QXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNN'@;
put 'ZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQsaCxmLHYpPT57dGhpcy5yb3dBeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsdil9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLmNvbHVtbkF4'@;
put 'aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93TW92ZSIsKGQsaCxmLHYsTSk9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbk1v'@;
put 'dmUiLChkLGgsZix2LE0pPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zlcyh2LE0pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRo'@;
put 'aXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGgsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVD'@;
put 'b2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblVuZnJlZXplIiwoZCxoKT0+'@;
put 'e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDZWxsTWV0YVJlc2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRz'@;
put 'W2ZdO3JldHVybiBqbyhHbyxhLEsydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITApLHRoaXMuZW5naW5lLnVuZG8oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVkbyIsKCk9Pnt0aGlzLmlu'@;
put 'ZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCEwKSx0aGlzLmVuZ2luZS5yZWRvKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIu'@;
put 'c2V0UGVyZm9ybVJlZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqbyhHbyxhLG9mdCkuY2FsbChhLC4u'@;
put 'LmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBdXRvZmlsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gam8oR28sYSwkMnQpLmNhbGwoYSwuLi5oKX0pLEU5KGFBLHRoaXMp'@;
put 'LmZvckVhY2goZD0+e2xldFtoLGZdPWQ7cmV0dXJuIHRoaXMuZW5naW5lLm9uKGgsZil9KSxzdXBlci5lbmFibGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe0U5KGFBLHRoaXMpLmZvckVhY2gobD0+e2xldFthLGRdPWw7cmV0dXJuIHRoaXMuZW5naW5lLm9mZihhLGQpfSksSjVlKHRoaXMu'@;
put 'ZW5naW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4obCl7Y29uc3QgYT1mdW5jdGlvbiB3MnQoYyl7dmFyIGw7Y29uc3QgYT1jW3cxXTtyZXR1cm57Li4uWDVlKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQg'@;
put 'MCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSwuLi5LNWUoYyl9fSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpKTsoZnVuY3Rpb24gQzJ0KGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLnNvbWUoYT0+dm9pZCAwIT09bFthXSYmbFthXSE9PWNbYV0pfSkodGhpcy5lbmdpbmUuZ2V0'@;
put 'Q29uZmlnKCksYSkmJnRoaXMuZW5naW5lLnVwZGF0ZUNvbmZpZyhhKTtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdO2lmKEhhKGQpJiZIYShkLnNoZWV0TmFtZSkmJmQuc2hlZXROYW1lIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuc3dpdGNoU2hlZXQoZC5zaGVldE5hbWUpLCFs'@;
put 'LmRhdGEmJm51bGw9PT10aGlzLnNoZWV0TmFtZSl7Y29uc3QgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXS5zaGVldE5hbWU7aWYoaCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QoaCkpdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7ZWxzZXtjb25zdCBmPXRoaXMuYWRk'@;
put 'U2hlZXQoaD8/dm9pZCAwLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTtqbyhHbyx0aGlzLHNBKS5jYWxsKHRoaXMsZil9fXN1cGVyLnVwZGF0ZVBsdWdpbihsKX1kZXN0cm95KCl7RTkoYUEsdGhpcykuZm9yRWFjaChsPT57dmFyIGE7bGV0W2QsaF09bDtyZXR1cm4gbnVsbD09PShh'@;
put 'PXRoaXMuZW5naW5lKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vZmYoZCxoKX0pLGM2KGFBLHRoaXMsbnVsbCksSjVlKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRlc3Ryb3koKX1hZGRTaGVldChsLGEpe2lmKEhhKGEpJiYhTDNlKGEpKXJldHVybiBZbygi'@;
put 'VGhlIHByb3ZpZGVkIGRhdGEgc2hvdWxkIGJlIGFuIGFycmF5IG9mIGFycmF5cy4iKSwhMTtpZihudWxsIT1sJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gWW8oIlNoZWV0IHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYWxyZWFkeSBleGlzdHMuIiksITE7dHJ5e2NvbnN0'@;
put 'IGQ9dGhpcy5lbmdpbmUuYWRkU2hlZXQobD8/dm9pZCAwKTtyZXR1cm4gYSYmdGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuZW5naW5lLmdldFNoZWV0SWQoZCksYSksZH1jYXRjaChkKXtyZXR1cm4gWW8oZC5tZXNzYWdlKSwhMX19c3dpdGNoU2hlZXQobCl7aWYoIXRoaXMuZW5n'@;
put 'aW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiB2b2lkIEIkKGBUaGUgc2hlZXQgbmFtZWQgXGAke2x9XGAgZG9lcyBub3QgZXhpc3QsIHN3aXRjaCBhYm9ydGVkLmApO2pvKEdvLHRoaXMsc0EpLmNhbGwodGhpcyxsKTtjb25zdCBhPXRoaXMuZW5naW5lLmdldFNoZWV0U2VyaWFsaXplZCh0'@;
put 'aGlzLnNoZWV0SWQpO2EubGVuZ3RoPjAmJnRoaXMuaG90LmxvYWREYXRhKGEsYCR7ZjEodzEpfS5zd2l0Y2hTaGVldGApfWdldENlbGxUeXBlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZDtjb25z'@;
put 'dCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsIT09aCYmbnVsbCE9PWY/dGhpcy5lbmdpbmUuZ2V0Q2VsbFR5cGUoe3NoZWV0OmQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbElu'@;
put 'ZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pOiJFTVBUWSJ9aXNGb3JtdWxhQ2VsbFR5cGUobCxhKXtyZXR1cm4gdGhpcy5lbmdpbmUuZG9lc0NlbGxIYXZlRm9ybXVsYSh7c2hlZXQ6YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSl9cmVuZGVyRGVwZW5k'@;
put 'ZW50U2hlZXRzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD1uZXcgU2V0O2wuZm9yRWFjaChoPT57dmFyIGY7Y29uc3Qgdj1udWxsPT1ofHxudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lk'@;
put 'IDA6Zi5zaGVldDt2b2lkIDAhPT12JiYoZC5oYXModil8fGQuYWRkKHYpKX0pLHE1ZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaCxmKT0+e3ZhciB2OyhhfHxmIT09dGhpcy5zaGVldElkKSYmZC5oYXMoZikmJihoLnJlbmRlcigpLG51bGw9PT0odj1oLnZpZXcpfHx2b2lkIDA9PT12fHx2LmFk'@;
put 'anVzdEVsZW1lbnRzU2l6ZSgpKX0pfXZhbGlkYXRlRGVwZW5kZW50Q2VsbHMobCl7Y29uc3QgZD1mPT57dmFyIHY7Y29uc3R7cm93Ok0sY29sOkksc2hlZXQ6R309bnVsbCE9PSh2PWY/LmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307cmV0dXJuIEhhKEcpP2Ake0d9OiR7TX14JHtJfWA6IiJ9'@;
put 'LGg9bmV3IFNldCgoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdKS5tYXAoZj0+ZChmKSkpO2wuZm9yRWFjaChmPT57dmFyIHYsTTtjb25zdHtyb3c6SSxjb2w6R309bnVsbCE9PSh2PWYuYWRkcmVzcykmJnZvaWQgMCE9PXY/djp7fTtp'@;
put 'ZighMT09PUhhKEkpfHwhMT09PUhhKEcpfHxJPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8Rz49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IHJlPW51bGw9PWZ8fG51bGw9PT0oTT1mLmFkZHJlc3MpfHx2b2lkIDA9PT1NP3ZvaWQgMDpNLnNoZWV0LHVlPWQoZik7aWYodm9pZCAw'@;
put 'IT09cmUmJiFoLmhhcyh1ZSkpe2NvbnN0IHllPXE1ZSh0aGlzLmVuZ2luZSkuZ2V0KHJlKTtpZigheWUpcmV0dXJuO3llLnZhbGlkYXRlQ2VsbCh5ZS5nZXREYXRhQXRDZWxsKEksRykseWUuZ2V0Q2VsbE1ldGEoSSxHKSwoKT0+e30pfX0pfXN5bmNDaGFuZ2VXaXRoRW5naW5lKGwsYSxkKXtj'@;
put 'b25zdCBoPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hlZXRJZH07aWYoIXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRv'@;
put 'U2V0Q2VsbENvbnRlbnRzKGgpKXJldHVybiB2b2lkIFlvKGBOb3QgcG9zc2libGUgdG8gc2V0IGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KGgpfWApO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtyZXR1cm4gSVEoZCxmLnR5cGUpJiYoZW1lKGQsZi5kYXRlRm9ybWF0'@;
put 'KT9kPXRtZShkLGYuZGF0ZUZvcm1hdCk6ITE9PT1mdW5jdGlvbiBJMnQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiZjLnN0YXJ0c1dpdGgoIj0iKX0oZCkmJihkPWAnJHtkfWApKSx0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoaCxkKX19ZnVuY3Rpb24gc0EoYyl7dGhpcy5zaGVl'@;
put 'dE5hbWU9Yyx0aGlzLnNoZWV0SWQ9dGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSl9ZnVuY3Rpb24gRzJ0KGMsbCxhKXtjb25zdCBkPXRoaXMuaG90LnByb3BUb0NvbChhKTtpZih0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGwsZCkpe2NvbnN0IGg9e3Jvdzp0aGlzLnJvd0F4'@;
put 'aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCksc2hlZXQ6dGhpcy5zaGVldElkfSxmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsZCk7bGV0IHY9dGhpcy5lbmdpbmUuZ2V0Q2Vs'@;
put 'bFZhbHVlKGgpO3JldHVybiJkYXRlIj09PWYudHlwZSYmZzEodikmJih2PW5tZSh2LGYuZGF0ZUZvcm1hdCkpLCJvYmplY3QiPT10eXBlb2YgdiYmbnVsbCE9PXY/di52YWx1ZTp2fXJldHVybiBjfWZ1bmN0aW9uICQydChjLGwsYSl7Y29uc3R7cm93OmQsY29sOmh9PWwuZ2V0VG9wU3RhcnRD'@;
put 'b3JuZXIoKSx7cm93OmYsY29sOnZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCkse3JvdzpNLGNvbDpJfT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpHLGNvbDpyZX09YS5nZXRCb3R0b21FbmRDb3JuZXIoKSx1ZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZy'@;
put 'b21WaXN1YWxJbmRleChkKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5B'@;
put 'eGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksc2hlZXQ6dGhpcy5zaGVldElkfX0seWU9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoTSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZp'@;
put 'c3VhbEluZGV4KEkpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRyksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHJlKSxzaGVldDp0aGlzLnNoZWV0SWR9'@;
put 'fTtpZighMT09PXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKHllKSlyZXR1cm4hMTtjb25zdCBFZT10aGlzLmVuZ2luZS5nZXRGaWxsUmFuZ2VEYXRhKHVlLHllKSx7cm93OkJlLGNvbDpHZX09dWUuc3RhcnQse3JvdzpzdCxjb2w6cHR9PXVlLmVuZCxkdD1zdC1C'@;
put 'ZSsxLHF0PXB0LUdlKzE7Zm9yKGxldCBtbj0wO21uPEVlLmxlbmd0aDttbis9MSlmb3IobGV0IHduPTA7d248RWVbbW5dLmxlbmd0aDt3bis9MSl7Y29uc3QgaG49RWVbbW5dW3duXSxNbj1CZSttbiVkdCxNcj1HZSt3biVxdCxrcj10aGlzLmhvdC5nZXRDZWxsTWV0YShNbixNcik7SVEoaG4s'@;
put 'a3IudHlwZSkmJihobi5zdGFydHNXaXRoKCInIik/RWVbbW5dW3duXT1obi5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoTW4sTXIsdGhpcy5zaGVldElkKSYmKEVlW21uXVt3bl09UjJ0KGhuLGtyLmRhdGVGb3JtYXQpKSl9cmV0dXJuIEVlfWZ1bmN0aW9uIG9tZShjLGwp'@;
put 'eyhhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiIpLmluY2x1ZGVzKGYxKHcxKSl8fGM2KGNILHRoaXMsYmModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kYXRhKSl9ZnVuY3Rpb24gSzJ0KCl7aWYoRTkoY0gsdGhpcykpcmV0dXJuIHZvaWQg'@;
put 'dGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7Y29uc3QgYz10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtjLmZvckVhY2goKGEsZCk9PnthLmZvckVhY2goKGgsZik9Pntjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGQsZix7c2tpcE1ldGFFeHRlbnNpb246ITB9KSxN'@;
put 'PXYuZGF0ZUZvcm1hdDtJUShoLHYudHlwZSkmJihlbWUoaCxNKT9jW2RdW2ZdPXRtZShoLE0pOmguc3RhcnRzV2l0aCgiPSIpfHwoY1tkXVtmXT1gJyR7aH1gKSl9KX0pLGM2KEhnLHRoaXMsITApO2NvbnN0IGw9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxjKTt0'@;
put 'aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMobCksYzYoSGcsdGhpcywhMSl9ZnVuY3Rpb24gbG1lKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMl0/YXJndW1lbnRzWzJdOiIiO2lmKGEuaW5jbHVkZXMoZjEodzEpKSlyZXR1cm47Y29uc3QgZD1mdW5jdGlvbiBBMnQoYyxsKXtyZXR1cm4oYmMobCl8fCFjLmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGlu'@;
put 'Z3MoKVt3MV0uc2hlZXROYW1lKTtpZihqbyhHbyx0aGlzLHNBKS5jYWxsKHRoaXMsZCksInVwZGF0ZVNldHRpbmdzIiE9PWEpaWYoRTkoY0gsdGhpcykpdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7ZWxzZXtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO2lm'@;
put 'KHRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVwbGFjZVNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCkpe2M2KEhnLHRoaXMsITApO2NvbnN0IGY9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKTt0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50'@;
put 'KHRoaXMuZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiksYzYoSGcsdGhpcywhMSl9fX1mdW5jdGlvbiBYMnQoYyxsLGEsZCl7aWYoImdldCIhPT1kfHxFOShIZyx0aGlzKXx8bnVsbD09PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1No'@;
put 'ZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHxudWxsPT09Y3x8bnVsbD09PWwpcmV0dXJuO2NvbnN0IGg9dGhpcy5nZXRDZWxsVHlwZShjLGwpO2lmKCJWQUxVRSI9PT1ofHwiRU1QVFkiPT09aClyZXR1cm4gdm9pZChhLnZhbHVlPWZ1bmN0aW9uIEQydChjKXtyZXR1cm4gZnVuY3Rpb24gazJ0'@;
put 'KGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmIiciPT09Yy5jaGFyQXQoMCkmJiI9Ij09PWMuY2hhckF0KDEpfShjKT9jLnN1YnN0cigxKTpjfShhLnZhbHVlKSk7Y29uc3QgZj17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpLGNvbDp0aGlz'@;
put 'LmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxzaGVldDp0aGlzLnNoZWV0SWR9O2xldCB2PXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShmKTtjb25zdCBNPXRoaXMuaG90LmdldENlbGxNZXRhKGMsbCx7c2tpcE1ldGFFeHRlbnNpb246ITB9KTsiZGF0ZSI9'@;
put 'PT1NLnR5cGUmJmcxKHYpJiYodj1ubWUodixNLmRhdGVGb3JtYXQpKSxhLnZhbHVlPSJvYmplY3QiPT10eXBlb2YgdiYmbnVsbCE9PXY/di52YWx1ZTp2fWZ1bmN0aW9uIHEydChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fEU5KEhnLHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlz'@;
put 'LmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3coYyksZj10aGlzLmhvdC5wcm9wVG9Db2wobCk7aWYobnVsbD09PWh8fG51bGw9PT1mKXJldHVybjtjb25zdCB2PXRoaXMuZ2V0Q2VsbFR5cGUoaCxmKTtpZigi'@;
put 'VkFMVUUiPT09dnx8IkVNUFRZIj09PXYpcmV0dXJuO2NvbnN0IE09dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1lbnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09TS53aWR0aCYmMD09PU0uaGVpZ2h0KXJldHVybjtjb25zdCBJPXtyb3c6dGhpcy5y'@;
put 'b3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLHNoZWV0OnRoaXMuc2hlZXRJZH07YS52YWx1ZT10aGlzLmVuZ2luZS5nZXRDZWxsU2VyaWFsaXplZChJKX1mdW5jdGlv'@;
put 'biBjbWUoYyxsKXtpZih1dyhsKSlyZXR1cm47Y29uc3QgYT1bXSxkPVtdLGg9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntjLmZvckVhY2goZj0+e2xldFt2LE0sLEldPWY7Y29uc3QgRz10aGlzLmhvdC5wcm9wVG9Db2woTSkscmU9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSx1ZT10aGlzLmhv'@;
put 'dC50b1BoeXNpY2FsQ29sdW1uKEcpLHllPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KEcpLHNoZWV0OnRoaXMuc2hlZXRJZH07bnVsbCE9PXJlJiZu'@;
put 'dWxsIT09dWU/dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZSh2LEcsSSk6YS5wdXNoKFt2LEcsSV0pLGQucHVzaCh7YWRkcmVzczp5ZX0pfSl9KTthLmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9Pnth'@;
put 'LmZvckVhY2godj0+e2xldFtNLEksR109djt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKE0sSSxHKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiwhMCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoaCxkKX1mdW5j'@;
put 'dGlvbiBKMnQoYyxsKXtpZih1dyhsKSlyZXR1cm47Y29uc3QgYT1bXSxkPVtdO2MuZm9yRWFjaChoPT57bGV0W2YsdiwsTV09aDtjb25zdCBJPXRoaXMuaG90LnByb3BUb0NvbCh2KTtpZighZzEoSSkpcmV0dXJuO2NvbnN0IEc9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZy'@;
put 'b21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoSSksc2hlZXQ6dGhpcy5zaGVldElkfTt0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhHKT8oZC5wdXNoKHthZGRyZXNzOkd9KSxhLnB1c2go'@;
put 'Li4udGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKEcsTSkpKTpZbyhgTm90IHBvc3NpYmxlIHRvIHNldCBzb3VyY2UgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoRyl9YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhhKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMo'@;
put 'YSxkKX1mdW5jdGlvbiBRMnQoYyxsKXtsZXQgYT10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKTtpZihjPj10aGlzLmhvdC5jb3VudFJvd3MoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMu'@;
put 'c2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkUm93cyh0aGlzLnNoZWV0SWQsW2EsbF0pKXJldHVybiExfWZ1bmN0aW9uIGVmdChjLGwpe2xldCBhPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90'@;
put 'LmNvdW50Q29scygpJiYoYT1jKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gdGZ0'@;
put 'KGMsbCxhKXtyZXR1cm4hMSE9PXRoaXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5KGY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW2YsMV0pKSYmdm9pZCAwfWZ1bmN0aW9uIG5mdChjLGwsYSl7cmV0dXJuITEh'@;
put 'PT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiByZnQoYyxsLGEpe2lmKHV3KGEpKXJldHVybjtjb25z'@;
put 'dCBkPXRoaXMuZW5naW5lLmFkZFJvd3ModGhpcy5zaGVldElkLFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZCl9ZnVuY3Rpb24gaWZ0KGMsbCxhKXtpZih1dyhhKSlyZXR1cm47Y29uc3QgZD10'@;
put 'aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyksbF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpfWZ1bmN0aW9uIGFmdChjLGwsYSxkKXtpZih1dyhkKSlyZXR1cm47Y29uc3Qg'@;
put 'aD10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHYsTSk9Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVu'@;
put 'dFNoZWV0cyhmKX1mdW5jdGlvbiBzZnQoYyxsLGEsZCl7aWYodXcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5n'@;
put 'aW5lLnJlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFt2LDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gb2Z0KGMsbCxhKXt2YXIgZDtjNihIZyx0aGlzLCEwKTtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShhLDAsYSsoKG51bGw9PT0o'@;
put 'ZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmxlbmd0aCl8fDApLHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTtjNihIZyx0aGlzLCExKSxoLmZvckVhY2goKGYsdik9PntmLmZvckVhY2goKE0sSSk9Pnt0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoe2NvbDpJLHJv'@;
put 'dzphK3Ysc2hlZXQ6dGhpcy5zaGVldElkfSxbW01dXSl9KX0pfWZ1bmN0aW9uIGxmdChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYyl9ZnVuY3Rpb24gY2Z0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQi'@;
put 'LGMsbCl9ZnVuY3Rpb24gdWZ0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYyxsKX1mdW5jdGlvbiBkZnQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRBZGRlZCIsYyl9ZnVuY3Rpb24gaGZ0KGMsbCl7am8oR28sdGhpcyxzQSku'@;
put 'Y2FsbCh0aGlzLGwpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVuYW1lZCIsYyxsKX1mdW5jdGlvbiBmZnQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldFJlbW92ZWQiLGMsbCl9ZnVuY3Rpb24gdW1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBUOShjLGwpe3JldHVybiBjLmdldCh1NihjLGwpKX1mdW5jdGlvbiBkbWUoYyxsLGEpe3JldHVybiBjLnNldCh1NihjLGwpLGEpLGF9ZnVuY3Rpb24gdTYo'@;
put 'YyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfU1hLmdldFNpbmdsZXRvbigpLnJl'@;
put 'Z2lzdGVyKCJiZWZvcmVIaWRlQ29sdW1ucyIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVDb2x1bW5zIiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZUNvbHVtbnMiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVD'@;
put 'b2x1bW5zIik7Y29uc3QgaG1lPSJoaWRkZW5Db2x1bW5zIjt2YXIgV3A9bmV3IFdlYWtNYXAsQTk9bmV3IFdlYWtTZXQ7Y2xhc3MgYmZ0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG1mdChjLGwpe3VtZShjLGwpLGwuYWRkKGMpfSh0aGlz'@;
put 'LEE5KSxmdW5jdGlvbiB2ZnQoYyxsLGEpe3VtZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsV3AsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGhtZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7'@;
put 'cmV0dXJue2NvcHlQYXN0ZUVuYWJsZWQ6ITAsaW5kaWNhdG9yczohMSxjb2x1bW5zOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbaG1lXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KGRtZShXcCx0aGlzLG5ldyB2UCksVDko'@;
put 'V3AsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dTYoQTksdGhpcyx4ZnQpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxUOShXcCx0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVs'@;
put 'dE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHU2KEE5LGwsTWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChhLGQs'@;
put 'aCk9PnU2KEE5LHRoaXMsd2Z0KS5jYWxsKHRoaXMsYSxkLGgpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoYSxkKT0+dTYoQTksdGhpcyxfZnQpLmNhbGwodGhpcyxhLGQpLDIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHU2KEE5LGwsU2Z0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9PnU2KEE5LHRoaXMsQ2Z0KS5jYWxsKHRoaXMsYSkpLHN1'@;
put 'cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5y'@;
put 'ZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Q29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1UOShXcCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGlj'@;
put 'ZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoS24obC5tYXAoRz0+dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihHKSksRz0+e2ZbR109ITF9KSxoPUd1KGYsKEcscmUsdWUpPT4ocmUmJkcucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbih1ZSkpLEcpLFtdKSksITEhPT10aGlzLmhvdC5ydW5I'@;
put 'b29rcygiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYpJiYoZCYmdiYmVDkoV3AsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8'@;
put 'YS5sZW5ndGgpKX1zaG93Q29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Q29sdW1ucyhhKX1oaWRlQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9'@;
put 'dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0tuKGwsdj0+e1Q5'@;
put 'KFdwLHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZUNvbHVtbnMiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZUNvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZUNvbHVtbnMoYSl9Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB5byhUOShXcCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCkpfWlz'@;
put 'SGlkZGVuKGwpe3JldHVybiBUOShXcCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYm'@;
put 'bC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7S24odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wuc2tpcENvbHVtbk9uUGFzdGU9ITF9KX1kZXN0cm95KCl7ZG1lKFdwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5j'@;
put 'dGlvbiBfZnQoYyxsKXtyZXR1cm4gdGhpcy5pc0hpZGRlbihsKT8wOnRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpJiYodGhpcy5pc0hpZGRlbihsKzEpfHx0aGlzLmlzSGlkZGVuKGwtMSkpJiYibnVtYmVyIj09dHlwZW9mIGMmJnRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKT9jKzE1OnZv'@;
put 'aWQgMH1mdW5jdGlvbiB3ZnQoYyxsLGEpe2lmKCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4obCkmJihhLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGwtMSkpYS5jbGFzc05hbWU9YS5jbGFzc05hbWV8fCIiLC0xPT09'@;
put 'YS5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGEuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihhLmNsYXNzTmFtZSl7Y29uc3QgZD1hLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGQubGVuZ3RoPjApe2NvbnN0IGg9ZC5pbmRleE9mKCJh'@;
put 'ZnRlckhpZGRlbkNvbHVtbiIpO2g+LTEmJmQuc3BsaWNlKGgsMSksYS5jbGFzc05hbWU9ZC5qb2luKCIgIil9fX1mdW5jdGlvbiBDZnQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIGM7Y29uc3QgbD1bXSxhPShkLGgsZix2KT0+e2wucHVzaCh7c3Rh'@;
put 'cnRSb3c6ZCxlbmRSb3c6aCxzdGFydENvbDpmLGVuZENvbDp2fSl9O3JldHVybiBLbihjLGQ9PntsZXQgaD0hMCxmPTA7S2EoZC5zdGFydENvbCxkLmVuZENvbCx2PT57dGhpcy5pc0hpZGRlbih2KT8oaHx8YShkLnN0YXJ0Um93LGQuZW5kUm93LGYsdi0xKSxoPSEwKTooaCYmKGY9diksdj09'@;
put 'PWQuZW5kQ29sJiZhKGQuc3RhcnRSb3csZC5lbmRSb3csZix2KSxoPSExKX0pfSksbH1mdW5jdGlvbiBTZnQoYyxsKXtpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fGM8MClyZXR1cm47Y29uc3QgYT1bXTtjPj0xJiZ0aGlzLmlzSGlkZGVuKGMtMSkmJmEucHVzaCgiYWZ0ZXJI'@;
put 'aWRkZW5Db2x1bW4iKSxjPHRoaXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4oYysxKSYmYS5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSxFaShsLGEpfWZ1bmN0aW9uIE1mdChjKXtjLml0ZW1zLnB1c2goe25hbWU6aW99LGZ1bmN0aW9uIHBmdChjKXtyZXR1cm57a2V5OiJo'@;
put 'aWRkZW5fY29sdW1uc19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3RbLGQsLGhdPWw7ZC1oIT0wJiYoYT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFJYLGEpfSxjYWxsYmFjaygp'@;
put 'e2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1NYXRoLm1heChNYXRoLm1pbihsLmNvbCxhLmNvbCksMCksaD1NYXRoLm1heChsLmNvbCxhLmNvbCksZj1bXTtmb3IobGV0IEk9ZDtJPD1oO0krPTEpZi5wdXNoKEkpO2MuaGlkZUNvbHVtbnMoZik7Y29u'@;
put 'c3QgTT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmW2YubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0ludGVnZXIoTSkmJk0+PTA/dGhpcy5zZWxlY3RDb2x1bW5zKE0pOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcu'@;
put 'YWRqdXN0RWxlbWVudHNTaXplKCl9LGRpc2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBnZnQoYyl7Y29uc3QgbD1b'@;
put 'XTtyZXR1cm57a2V5OiJoaWRkZW5fY29sdW1uc19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShMWCxsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9'@;
put 'bnVsbCE9PShhPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6'@;
put 'dGhpcy5jb3VudENvbHMoKS0xLGMuc2hvd0NvbHVtbnMobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi1oKzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnMoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT15byhj'@;
put 'LmdldEhpZGRlbkNvbHVtbnMoKSx1ZT0+dGhpcy50b1BoeXNpY2FsQ29sdW1uKHVlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9'@;
put 'MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCx2PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIsTT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksST12LmdldFJl'@;
put 'bmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksRz12LmdldE5vdFRyaW1tZWRJbmRleGVzKCkscmU9W107aWYoaCE9PWYpe2lmKGYtaCsxPkktTSsxKXtjb25zdCBFZT1HLnNsaWNlKGgsZisxKTtyZS5wdXNoKC4uLkVlLmZpbHRlcihCZT0+YS5pbmNsdWRlcyhCZSkpKX19ZWxzZSBpZigwPT09'@;
put 'TSYmTTxoKXJlLnB1c2goLi4uRy5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1NKXJlLnB1c2goLi4uRy5zbGljZSgwLHRoaXMuY291bnRDb2xzKCkpKTtlbHNle2NvbnN0IHVlPXRoaXMuY291bnRDb2xzKCktMTtJPT09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkluZGV4KHVlLC0xKSkmJnVlPmYmJnJlLnB1c2goLi4uRy5zbGljZShmKzEpKX1yZXR1cm4gS24ocmUsdWU9PntsLnB1c2godGhpcy50b1Zpc3VhbENvbHVtbih1ZSkpfSksMD09PWwubGVuZ3RofX19KHRoaXMpKX1mdW5jdGlvbiB4ZnQoKXtjb25zdCBjPXRoaXMuZ2V0'@;
put 'U2V0dGluZygiY29sdW1ucyIpO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaGlkZUNvbHVtbnMoYyl9ZnVuY3Rpb24gZm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv'@;
put 'YmplY3QiKX1mdW5jdGlvbiBrOShjLGwpe3JldHVybiBjLmdldChkNihjLGwpKX1mdW5jdGlvbiBwbWUoYyxsLGEpe3JldHVybiBjLnNldChkNihjLGwpLGEpLGF9ZnVuY3Rpb24gZDYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVu'@;
put 'dHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfU1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlUm93cyIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhp'@;
put 'ZGVSb3dzIiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZVJvd3MiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVSb3dzIik7Y29uc3QgZ21lPSJoaWRkZW5Sb3dzIjt2YXIgWXA9bmV3IFdlYWtNYXAsRDk9bmV3IFdlYWtTZXQ7Y2xhc3Mg'@;
put 'SWZ0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEFmdChjLGwpe2ZtZShjLGwpLGwuYWRkKGMpfSh0aGlzLEQ5KSxmdW5jdGlvbiBrZnQoYyxsLGEpe2ZtZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsWXAsbnVsbCl9c3RhdGljIGdldCBQTFVH'@;
put 'SU5fS0VZKCl7cmV0dXJuIGdtZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2NvcHlQYXN0ZUVuYWJsZWQ6ITAsaW5kaWNhdG9yczohMSxyb3dzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKClbZ21lXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHBtZShZcCx0aGlzLG5ldyB2UCksazkoWXAsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+ZDYoRDksdGhpcyxIZnQpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4'@;
put 'TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxrOShZcCx0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1h'@;
put 'cmd1bWVudHNbaF07cmV0dXJuIGQ2KEQ5LGwsRmZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChhLGQsaCk9PmQ2KEQ5LHRoaXMsTGZ0KS5jYWxsKHRoaXMsYSxkLGgpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGEsZCk9PmQ2KEQ5'@;
put 'LHRoaXMsUmZ0KS5jYWxsKHRoaXMsYSxkKSksdGhpcy5hZGRIb29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZDYoRDksbCxQZnQpLmNh'@;
put 'bGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsYT0+ZDYoRDksdGhpcyxPZnQpLmNhbGwodGhpcyxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIu'@;
put 'dXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5S'@;
put 'b3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPWs5KFlwLHRoaXMpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihLbihsLm1hcChHPT50aGlzLmhvdC50b1BoeXNpY2FsUm93KEcpKSxHPT57ZltHXT0hMX0pLGg9R3UoZiwoRyxyZSx1'@;
put 'ZSk9PihyZSYmRy5wdXNoKHRoaXMuaG90LnRvVmlzdWFsUm93KHVlKSksRyksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVSb3dzIixhLGgsZCYmdikmJihkJiZ2JiZrOShZcCx0aGlzKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRl'@;
put 'Um93cyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX1zaG93Um93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Um93cyhhKX1oaWRlUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0'@;
put 'SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVSb3dzIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+'@;
put 'e0tuKGwsdj0+e2s5KFlwLHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZVJvd3MiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZVJvdygpe2Zvcih2YXIgbD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZVJvd3MoYSl9Z2V0SGlkZGVuUm93cygpe3JldHVybiB5byhrOShZcCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxSb3cobCkpfWlzSGlkZGVu'@;
put 'KGwpe3JldHVybiBrOShZcCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShk'@;
put 'PT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7S24odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wuc2tpcFJvd09uUGFzdGU9ITF9KX1kZXN0cm95KCl7cG1lKFlwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBSZnQoYyxs'@;
put 'KXtyZXR1cm4gdGhpcy5pc0hpZGRlbihsKT8wOmN9ZnVuY3Rpb24gTGZ0KGMsbCxhKXtpZighMT09PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpJiZ0aGlzLmlzSGlkZGVuKGMpJiYoYS5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihjLTEpKWEuY2xhc3NOYW1l'@;
put 'PWEuY2xhc3NOYW1lfHwiIiwtMT09PWEuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuUm93IikmJihhLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlblJvdyIpO2Vsc2UgaWYoYS5jbGFzc05hbWUpe2NvbnN0IGQ9YS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihkLmxlbmd0aD4wKXtjb25z'@;
put 'dCBoPWQuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKTtoPi0xJiZkLnNwbGljZShoLDEpLGEuY2xhc3NOYW1lPWQuam9pbigiICIpfX19ZnVuY3Rpb24gT2Z0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiBjO2NvbnN0IGw9W10sYT0oZCxoLGYsdik9'@;
put 'PntsLnB1c2goe3N0YXJ0Um93OmQsZW5kUm93Omgsc3RhcnRDb2w6ZixlbmRDb2w6dn0pfTtyZXR1cm4gS24oYyxkPT57bGV0IGg9ITAsZj0wO0thKGQuc3RhcnRSb3csZC5lbmRSb3csdj0+e3RoaXMuaXNIaWRkZW4odik/KGh8fGEoZix2LTEsZC5zdGFydENvbCxkLmVuZENvbCksaD0hMCk6'@;
put 'KGgmJihmPXYpLHY9PT1kLmVuZFJvdyYmYShmLHYsZC5zdGFydENvbCxkLmVuZENvbCksaD0hMSl9KX0pLGx9ZnVuY3Rpb24gUGZ0KGMsbCl7aWYoIXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHxjPDApcmV0dXJuO2NvbnN0IGE9W107Yz49MSYmdGhpcy5pc0hpZGRlbihjLTEpJiZh'@;
put 'LnB1c2goImFmdGVySGlkZGVuUm93IiksYzx0aGlzLmhvdC5jb3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKGMrMSkmJmEucHVzaCgiYmVmb3JlSGlkZGVuUm93IiksRWkobCxhKX1mdW5jdGlvbiBGZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOmlvfSxmdW5jdGlvbiBFZnQoYyl7cmV0dXJu'@;
put 'e2tleToiaGlkZGVuX3Jvd3NfaGlkZSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0W2QsLGhdPWw7ZC1oIT0wJiYoYT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE9YLGEpfSxjYWxsYmFj'@;
put 'aygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1NYXRoLm1heChNYXRoLm1pbihsLnJvdyxhLnJvdyksMCksaD1NYXRoLm1heChsLnJvdyxhLnJvdyksZj1bXTtmb3IobGV0IEk9ZDtJPD1oO0krPTEpZi5wdXNoKEkpO2MuaGlkZVJvd3MoZik7Y29u'@;
put 'c3QgTT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmW2YubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0ludGVnZXIoTSkmJk0+PTA/dGhpcy5zZWxlY3RSb3dzKE0pOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0'@;
put 'RWxlbWVudHNTaXplKCl9LGRpc2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBUZnQoYyl7Y29uc3QgbD1bXTtyZXR1cm57'@;
put 'a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShQWCxsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRo'@;
put 'aXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudFJvd3MoKS0x'@;
put 'LGMuc2hvd1Jvd3MobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi1oKzE9PT10aGlzLmNvdW50Um93cygpfHx0aGlzLnNlbGVjdFJvd3MoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT15byhjLmdldEhpZGRlblJvd3MoKSx1ZT0+dGhp'@;
put 'cy50b1BoeXNpY2FsUm93KHVlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxh'@;
put 'c3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyx2PXRoaXMucm93SW5kZXhNYXBwZXIsTT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksST12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksRz12LmdldE5v'@;
put 'dFRyaW1tZWRJbmRleGVzKCkscmU9W107aWYoaCE9PWYpe2lmKGYtaCsxPkktTSsxKXtjb25zdCBFZT1HLnNsaWNlKGgsZisxKTtyZS5wdXNoKC4uLkVlLmZpbHRlcihCZT0+YS5pbmNsdWRlcyhCZSkpKX19ZWxzZSBpZigwPT09TSYmTTxoKXJlLnB1c2goLi4uRy5zbGljZSgwLGgpKTtlbHNl'@;
put 'IGlmKG51bGw9PT1NKXJlLnB1c2goLi4uRy5zbGljZSgwLHRoaXMuY291bnRSb3dzKCkpKTtlbHNle2NvbnN0IHVlPXRoaXMuY291bnRSb3dzKCktMTtJPT09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHVlLC0xKSkmJnVlPmYmJnJl'@;
put 'LnB1c2goLi4uRy5zbGljZShmKzEpKX1yZXR1cm4gS24ocmUsdWU9PntsLnB1c2godGhpcy50b1Zpc3VhbFJvdyh1ZSkpfSksMD09PWwubGVuZ3RofX19KHRoaXMpKX1mdW5jdGlvbiBIZnQoKXtjb25zdCBjPXRoaXMuZ2V0U2V0dGluZygicm93cyIpO0FycmF5LmlzQXJyYXkoYykmJnRoaXMu'@;
put 'aGlkZVJvd3MoYyl9ZnVuY3Rpb24gbW1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqUShjLGwpe3JldHVybiBjLmdldCh1SChjLGwp'@;
put 'KX1mdW5jdGlvbiB6UShjLGwsYSl7cmV0dXJuIGMuc2V0KHVIKGMsbCksYSksYX1mdW5jdGlvbiB1SChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBl'@;
put 'bGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJi'@;
put 'ZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3Qgdm1lPSJtYW51YWxDb2x1bW5GcmVlemUiO3ZhciBJOT1uZXcgV2Vha01hcCxVUT1uZXcgV2Vha1NldDtjbGFzcyBVZnQgZXh0ZW5kcyBGb3tjb25zdHJ1'@;
put 'Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gQmZ0KGMsbCl7bW1lKGMsbCksbC5hZGQoYyl9KHRoaXMsVVEpLGZ1bmN0aW9uIGpmdChjLGwsYSl7bW1lKGMsbCksbC5zZXQoYyxhKX0odGhpcyxJOSwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHZtZX1zdGF0'@;
put 'aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3ZtZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PnVI'@;
put 'KFVRLHRoaXMsWmZ0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGwsYSk9PnVIKFVRLHRoaXMsV2Z0KS5jYWxsKHRoaXMsbCxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt6UShJOSx0aGlzLCExKSxzdXBlci5kaXNhYmxl'@;
put 'UGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1mcmVlemVDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGQ9YS5maXhlZENvbHVtbnNTdGFydDx0aGlzLmhvdC5j'@;
put 'b3VudENvbHMoKSYmbD5hLmZpeGVkQ29sdW1uc1N0YXJ0LTE7alEoSTksdGhpcyl8fHpRKEk5LHRoaXMsITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtbkZyZWV6ZSIsbCxkKSYmKGQmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEuZml4'@;
put 'ZWRDb2x1bW5zU3RhcnQpLGEuX2ZpeGVkQ29sdW1uc1N0YXJ0Kz0xKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5GcmVlemUiLGwsZCkpfXVuZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ+MCYmbDw9YS5m'@;
put 'aXhlZENvbHVtbnNTdGFydC0xO2pRKEk5LHRoaXMpfHx6UShJOSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsbCxkKSYmKGQmJihhLl9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhl'@;
put 'cyhsLGEuZml4ZWRDb2x1bW5zU3RhcnQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsbCxkKSl9fWZ1bmN0aW9uIFpmdChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIE5mdChjKXtyZXR1cm57a2V5OiJmcmVlemVfY29sdW1uIixu'@;
put 'YW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShsWCl9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxoaWRkZW4oKXtjb25zdCBsPXRo'@;
put 'aXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w8PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xKSYmKGE9ITApLGF9fX0odGhpcyks'@;
put 'ZnVuY3Rpb24gVmZ0KGMpe3JldHVybntrZXk6InVuZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoY1gpfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09YTtjLnVuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhp'@;
put 'cy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w+PXRoaXMuZ2V0U2V0'@;
put 'dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCkmJihhPSEwKSxhfX19KHRoaXMpKX1mdW5jdGlvbiBXZnQoYyxsKXtpZihqUShJOSx0aGlzKSl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2lmKGw8YXx8Yy5zb21lKGQ9PmQ8YSkpcmV0dXJuITF9fWZ1'@;
put 'bmN0aW9uIGRIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZZnQoYyl7dmFyIGw9ZnVuY3Rpb24gR2Z0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl'@;
put 'ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i'@;
put 'c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBkdz0icHgiLF9tZT1jbGFzcyAkZnR7Y29uc3RydWN0b3IobCl7'@;
put 'ZEgodGhpcywiaG90Iix2b2lkIDApLGRIKHRoaXMsIl9lbGVtZW50IixudWxsKSxkSCh0aGlzLCJzdGF0ZSIsMCksZEgodGhpcywiaW5saW5lUHJvcGVydHkiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmlubGluZVByb3BlcnR5PWwuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1hcHBlbmRUbyhs'@;
put 'KXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVk'@;
put 'KCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0'@;
put 'aW9uKGwsYSl7ZzEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK2R3KSxnMShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV09YStkdyl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGU7cmV0dXJue3RvcDpsLnRvcD9wYXJz'@;
put 'ZUludChsLnRvcCwxMCk6MCxzdGFydDpsW3RoaXMuaW5saW5lUHJvcGVydHldP3BhcnNlSW50KGxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9fXNldFNpemUobCxhKXtnMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtkdyksZzEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxl'@;
put 'LmhlaWdodD1hK2R3KX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHls'@;
put 'ZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe2cxKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtkdyksZzEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW2BtYXJnaW4ke2YxKHRoaXMuaW5saW5lUHJvcGVydHkpfWBdPWErZHcpfWdldE9mZnNldCgpe2NvbnN0IGw9'@;
put 'dGhpcy5fZWxlbWVudC5zdHlsZSxhPWBtYXJnaW4ke2YxKHRoaXMuaW5saW5lUHJvcGVydHkpfWA7cmV0dXJue3RvcDpsLm1hcmdpblRvcD9wYXJzZUludChsLm1hcmdpblRvcCwxMCk6MCxzdGFydDpsW2FdP3BhcnNlSW50KGxbYV0sMTApOjB9fX0scWZ0PWNsYXNzIFhmdCBleHRlbmRzIF9t'@;
put 'ZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksRWkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCIpfX0sZTN0PWNsYXNzIFFmdCBleHRlbmRzIF9tZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksRWkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUt'@;
put 'LWd1aWRlbGluZSIpfX07ZnVuY3Rpb24gdzMoYyxsLGEpe3dtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gd21lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmpl'@;
put 'Y3QiKX1mdW5jdGlvbiAkZChjLGwsYSl7cmV0dXJuIGMuc2V0KGg2KGMsbCksYSksYX1mdW5jdGlvbiBaYShjLGwpe3JldHVybiBjLmdldChoNihjLGwpKX1mdW5jdGlvbiBoNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5s'@;
put 'ZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbk1vdmUiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1'@;
put 'bW5Nb3ZlIik7Y29uc3QgV1E9Im1hbnVhbENvbHVtbk1vdmUiLENtZT0iaHRfX21hbnVhbENvbHVtbk1vdmUiLGhIPSJzaG93LXVpIixZUT0ib24tbW92aW5nLS1jb2x1bW5zIixHUT0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIjt2YXIgdGQ9bmV3IFdlYWtNYXAsZjY9bmV3IFdlYWtNYXAs'@;
put 'Tmc9bmV3IFdlYWtNYXAsZkg9bmV3IFdlYWtNYXAscDY9bmV3IFdlYWtNYXAsbmQ9bmV3IFdlYWtNYXAscEg9bmV3IFdlYWtNYXAscmY9bmV3IFdlYWtNYXAsaHc9bmV3IFdlYWtNYXAsZ0g9bmV3IFdlYWtNYXAsb0E9bmV3IFdlYWtNYXAsUjk9bmV3IFdlYWtTZXQ7Y2xhc3MgcjN0IGV4dGVu'@;
put 'ZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHQzdChjLGwpe3dtZShjLGwpLGwuYWRkKGMpfSh0aGlzLFI5KSx3Myh0aGlzLHRkLG5ldyBxZnQodGhpcy5ob3QpKSx3Myh0aGlzLGY2LG5ldyBlM3QodGhpcy5ob3QpKSx3Myh0aGlzLE5nLFtdKSx3Myh0'@;
put 'aGlzLGZILDApLHczKHRoaXMscDYsITEpLHczKHRoaXMsbmQse30pLHczKHRoaXMscEgsdm9pZCAwKSx3Myh0aGlzLHJmLHZvaWQgMCksdzModGhpcyxodyx2b2lkIDApLHczKHRoaXMsZ0gsdm9pZCAwKSx3Myh0aGlzLG9BLHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu'@;
put 'IFdRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbV1FdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURv'@;
put 'd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGg2KFI5LGwsaTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rp'@;
put 'b24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaDYoUjksbCxzM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+aDYoUjksdGhpcyxs'@;
put 'M3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaDYoUjksbCxjM3QpLmNhbGwobCwuLi5kKX0pLHRo'@;
put 'aXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxFaSh0aGlzLmhvdC5yb290RWxlbWVudCxDbWUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGlu'@;
put 'Z3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7aHModGhpcy5ob3Qucm9vdEVsZW1lbnQsQ21lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxaYSh0ZCx0aGlzKS5kZXN0cm95KCksWmEoZjYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4o'@;
put 'KX1tb3ZlQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMubW92ZUNvbHVtbnMoW2xdLGEpfW1vdmVDb2x1bW5zKGwsYSl7Y29uc3QgZD1aYShwSCx0aGlzKSxoPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIixsLGEsZCxoKTtpZigk'@;
put 'ZChwSCx0aGlzLHZvaWQgMCksITE9PT1mKXJldHVybjtoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IHY9aCYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIixs'@;
put 'LGEsZCxoLHYpLHZ9ZHJhZ0NvbHVtbihsLGEpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtsXSxhKX1kcmFnQ29sdW1ucyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gJGQocEgsdGhpcyxhKSx0aGlzLm1vdmVDb2x1bW5zKGwsZCl9aXNNb3ZlUG9zc2li'@;
put 'bGUobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsdj1sLnNvbWUoST0+STwwKSxNPWwuc29tZShJPT5JPj1kKTtyZXR1cm4hKGh8fGZ8fHZ8fE0pfWlzQ29sdW1uT3JkZXJDaGFu'@;
put 'Z2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1HdShsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRDb2x1bW5zV2lkdGgobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy'@;
put 'O2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKz0xKXtjb25zdCB2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtmPDA/aCs9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfHwwOm51bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qu'@;
put 'd3RUYWJsZS5nZXRDb2x1bW5XaWR0aCh2KXx8MCl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbV1FdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlQ29sdW1ucyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3Qg'@;
put 'YT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlQ29sdW1ucyhhLDApfX1pc0ZpeGVkQ29sdW1uc1N0YXJ0KGwpe3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnR9cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90'@;
put 'LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsQ29sdW1uTW92ZSIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lz'@;
put 'dGVudFN0YXRlTG9hZCIsIm1hbnVhbENvbHVtbk1vdmUiLGwpLGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlQ29sdW1uc1RvTW92aW5nKGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4gS2EobCxhLGg9PntkLnB1c2goaCl9KSxkfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPXRoaXMuaG90LnZp'@;
put 'ZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKTt0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQoWmEocmYsdGhpcykpJiZsPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8oe2NvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC0xLC0x'@;
put 'KX0pO2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQsaD0ibnVtYmVyIj09dHlwZW9mIGQuc2Nyb2xsWD9kLnNjcm9sbFg6ZC5zY3JvbGxMZWZ0O2xldCBmPXRoaXMuaG90LnZpZXcuVEhFQUQu'@;
put 'b2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLFphKHJmLHRoaXMpLTEpO2NvbnN0IHY9YS5oaWRlci5vZmZzZXRXaWR0aCxNPWEuVEJPRFkub2Zmc2V0TGVmdCxJPVphKHRkLHRoaXMpLmdldE9mZnNldCgpLnN0YXJ0LEc9WmEodGQsdGhpcykuZ2V0U2l6ZSgpLndpZHRoO2xldCBy'@;
put 'ZT0wLHVlPTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3QgQmU9dGhpcy5ob3Qucm9vdFdpbmRvdyxHZT1pdSh0aGlzLmhvdC5yb290RWxlbWVudCksc3Q9QmUuaW5uZXJXaWR0aC1aYShodyx0aGlzKS1HZTt1ZT1CZS5pbm5lcldpZHRoLVphKG5kLHRoaXMpLmV2ZW50UGFnZVgtc3QtKHZv'@;
put 'aWQgMD09PWQuc2Nyb2xsWD9oOjApfWVsc2UgdWU9WmEobmQsdGhpcykuZXZlbnRQYWdlWC0oWmEoaHcsdGhpcyktKHZvaWQgMD09PWQuc2Nyb2xsWD9oOjApKTtpZihaYShnSCx0aGlzKSYmKHJlPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25l'@;
put 'Lnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKC0xKS5vZmZzZXRXaWR0aCksdGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KFphKHJmLHRoaXMpKSYmKGYrPWgpLGYrPXJlLFphKHJmLHRoaXMpPDApWmEob0EsdGhpcyk+MD9aYShuZCx0aGlzKS5jb2w9MDpaYShuZCx0aGlzKS5jb2w9bD4wP2wtMTps'@;
put 'O2Vsc2UgaWYoWmEobmQsdGhpcykuVEQub2Zmc2V0V2lkdGgvMitmPD11ZSl7Y29uc3QgQmU9WmEocmYsdGhpcyk+PVphKGZILHRoaXMpP1phKGZILHRoaXMpLTE6WmEocmYsdGhpcyk7WmEobmQsdGhpcykuY29sPUJlKzEsZis9WmEobmQsdGhpcykuVEQub2Zmc2V0V2lkdGh9ZWxzZSBaYShu'@;
put 'ZCx0aGlzKS5jb2w9WmEocmYsdGhpcyk7bGV0IHllPXVlLEVlPWY7dWUrRytJPj12P3llPXYtRy1JOnVlK0k8TStyZSYmKHllPU0rcmUrTWF0aC5hYnMoSSkpLGY+PXYtMT9FZT12LTE6MD09PUVlP0VlPTE6dm9pZCAwIT09ZC5zY3JvbGxYJiZaYShyZix0aGlzKTxaYShvQSx0aGlzKSYmKEVl'@;
put 'LT1aYShodyx0aGlzKTw9ZC5zY3JvbGxYP1phKGh3LHRoaXMpOjApLFphKHRkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwseWUpLFphKGY2LHRoaXMpLnNldFBvc2l0aW9uKG51bGwsRWUpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1'@;
put 'bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+aDYoUjksdGhpcyxhM3QpLmNhbGwodGhpcyxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+aDYoUjksdGhpcyxvM3QpLmNhbGwodGhpcykp'@;
put 'fXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtaYSh0ZCx0aGlzKS5idWlsZCgpLFphKGY2LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe1phKHRkLHRoaXMpLmRlc3Ryb3koKSxaYShmNix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVz'@;
put 'dHJveSgpfX1mdW5jdGlvbiBpM3QoYyxsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxNPWdzKGMudGFyZ2V0LCJzb3J0'@;
put 'QWN0aW9uIik7aWYoIXZ8fCFmfHxaYShwNix0aGlzKXx8MCE9PWMuYnV0dG9ufHxNKXJldHVybiAkZChwNix0aGlzLCExKSxaYShOZyx0aGlzKS5sZW5ndGg9MCx2b2lkIGhzKHRoaXMuaG90LnJvb3RFbGVtZW50LFtZUSxoSF0pO2NvbnN0IEk9WmEoZjYsdGhpcykuaXNCdWlsdCgpJiYhWmEo'@;
put 'ZjYsdGhpcykuaXNBcHBlbmRlZCgpLEc9WmEodGQsdGhpcykuaXNCdWlsdCgpJiYhWmEodGQsdGhpcykuaXNBcHBlbmRlZCgpO0kmJkcmJihaYShmNix0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSxaYSh0ZCx0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSk7Y29uc3R7ZnJvbTpyZSx0bzp1ZX09dix5'@;
put 'ZT1NYXRoLm1pbihyZS5jb2wsdWUuY29sKSxFZT1NYXRoLm1heChyZS5jb2wsdWUuY29sKTtpZihsLnJvdzwwJiZsLmNvbD49eWUmJmwuY29sPD1FZSl7ZC5jb2x1bW49ITAsJGQocDYsdGhpcywhMCk7Y29uc3QgQmU9YS5maXJzdENoaWxkP21mZShjLGEuZmlyc3RDaGlsZCkueDpjLm9mZnNl'@;
put 'dFg7WmEobmQsdGhpcykuZXZlbnRQYWdlWD1jLnBhZ2VYLCRkKHJmLHRoaXMsbC5jb2wpLFphKG5kLHRoaXMpLlREPWEsWmEobmQsdGhpcykuY29sPWwuY29sLCRkKE5nLHRoaXMsdGhpcy5wcmVwYXJlQ29sdW1uc1RvTW92aW5nKHllLEVlKSksJGQoZ0gsdGhpcywhIXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKCkucm93SGVhZGVycyksJGQoZkgsdGhpcyx0aGlzLmhvdC5jb3VudENvbHMoKSksJGQob0EsdGhpcyx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KSwkZChodyx0aGlzLGowKHRoaXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0KTtjb25zdCBHZT1aYShnSCx0'@;
put 'aGlzKT8tMTowLHN0PWguaG9sZGVyLnNjcm9sbFRvcCtoLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxLHB0PWwuY29sPFphKG9BLHRoaXMpLGR0PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSxxdD1NYXRoLmFicyhC'@;
put 'ZS0odGhpcy5ob3QuaXNSdGwoKT9hLm9mZnNldFdpZHRoOjApKSxtbj10aGlzLmdldENvbHVtbnNXaWR0aCh5ZSxsLmNvbC0xKStxdCx3bj10aGlzLmdldENvbHVtbnNXaWR0aChHZSx5ZS0xKSsocHQ/ZHQ6MCkrbW47WmEodGQsdGhpcykuc2V0UG9zaXRpb24oc3Qsd24pLFphKHRkLHRoaXMp'@;
put 'LnNldFNpemUodGhpcy5nZXRDb2x1bW5zV2lkdGgoeWUsRWUpLGguaGlkZXIub2Zmc2V0SGVpZ2h0LXN0KSxaYSh0ZCx0aGlzKS5zZXRPZmZzZXQobnVsbCwtbW4pLEVpKHRoaXMuaG90LnJvb3RFbGVtZW50LFlRKX1lbHNlIGhzKHRoaXMuaG90LnJvb3RFbGVtZW50LEdRKSwkZChwNix0aGlz'@;
put 'LCExKSxaYShOZyx0aGlzKS5sZW5ndGg9MH1mdW5jdGlvbiBhM3QoYyl7WmEocDYsdGhpcykmJihaYShuZCx0aGlzKS5ldmVudFBhZ2VYPWMucGFnZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIHMzdChjLGwsYSxkKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo'@;
put 'KXx8IVphKHA2LHRoaXMpfHwoWmEoTmcsdGhpcykuaW5kZXhPZihsLmNvbCk+LTE/aHModGhpcy5ob3Qucm9vdEVsZW1lbnQsaEgpOkVpKHRoaXMuaG90LnJvb3RFbGVtZW50LGhIKSxkLnJvdz0hMCxkLmNvbHVtbj0hMCxkLmNlbGw9ITAsJGQocmYsdGhpcyxsLmNvbCksWmEobmQsdGhpcyku'@;
put 'VEQ9YSl9ZnVuY3Rpb24gbzN0KCl7Y29uc3QgYz1aYShuZCx0aGlzKS5jb2wsbD1aYShOZyx0aGlzKS5sZW5ndGg7aWYoJGQocmYsdGhpcyx2b2lkIDApLCRkKHA2LHRoaXMsITEpLGhzKHRoaXMuaG90LnJvb3RFbGVtZW50LFtZUSxoSCxHUV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVj'@;
put 'dGVkQnlDb2x1bW5IZWFkZXIoKSYmRWkodGhpcy5ob3Qucm9vdEVsZW1lbnQsR1EpLGw8MXx8dm9pZCAwPT09YylyZXR1cm47Y29uc3QgYT1aYShOZyx0aGlzKVswXSxkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSksaD10aGlzLmRyYWdDb2x1bW5zKFphKE5nLHRoaXMpLGMpO2lmKFph'@;
put 'KE5nLHRoaXMpLmxlbmd0aD0wLCEwPT09aCl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpO3RoaXMuaG90LnNlbGVjdENvbHVtbnMo'@;
put 'ZixmK2wtMSl9fWZ1bmN0aW9uIGwzdCgpe2NvbnN0IGM9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPWMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KDApKzErYy5ob2xkZXIuc2Nyb2xsVG9wO1phKHRkLHRoaXMpLnNldFBvc2l0aW9uKGQpLFphKHRkLHRoaXMpLnNldFNpemUobnVsbCxjLmhp'@;
put 'ZGVyLm9mZnNldEhlaWdodC1kKX1mdW5jdGlvbiBjM3QoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZnVuY3Rpb24gQzEoYyxsLGEpe1NtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gU21lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRp'@;
put 'YWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBvdShjLGwsYSl7cmV0dXJuIGMuc2V0KEMzKGMsbCksYSksYX1mdW5jdGlvbiBBYShjLGwpe3JldHVybiBjLmdldChDMyhjLGwpKX1mdW5jdGlvbiBDMyhjLGwsYSl7aWYoImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgbUg9Im1hbnVhbENvbHVtblJlc2l6ZSIsTW1lPSJt'@;
put 'YW51YWxDb2x1bW5XaWR0aHMiO3ZhciBWZz1uZXcgV2Vha01hcCx2SD1uZXcgV2Vha01hcCx6aD1uZXcgV2Vha01hcCx5SD1uZXcgV2Vha01hcCxHcD1uZXcgV2Vha01hcCxoM3Q9bmV3IFdlYWtNYXAsZnc9bmV3IFdlYWtNYXAsYkg9bmV3IFdlYWtNYXAsS2Q9bmV3IFdlYWtNYXAsQmc9bmV3'@;
put 'IFdlYWtNYXAsTDk9bmV3IFdlYWtNYXAsX0g9bmV3IFdlYWtNYXAsbEE9bmV3IFdlYWtNYXAsY0E9bmV3IFdlYWtNYXAsVWg9bmV3IFdlYWtNYXAsdUE9bmV3IFdlYWtNYXAsJHA9bmV3IFdlYWtTZXQ7Y2xhc3MgZjN0IGV4dGVuZHMgRm97c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu'@;
put 'IG1IfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiB1M3QoYyxsKXtTbWUoYyxsKSxsLmFkZChjKX0odGhpcywkcCksQzEodGhpcyxWZyxudWxsKSxDMSh0aGlzLHZILG51bGwpLEMxKHRoaXMsemgsW10pLEMx'@;
put 'KHRoaXMseUgsbnVsbCksQzEodGhpcyxHcCxudWxsKSxDMSh0aGlzLGgzdCxudWxsKSxDMSh0aGlzLGZ3LG51bGwpLEMxKHRoaXMsYkgsbnVsbCksQzEodGhpcyxLZCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLEMxKHRoaXMsQmcsdGhpcy5ob3Qucm9vdERv'@;
put 'Y3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxDMSh0aGlzLEw5LG51bGwpLEMxKHRoaXMsX0gsITEpLEMxKHRoaXMsbEEsMCksQzEodGhpcyxjQSxudWxsKSxDMSh0aGlzLFVoLHZvaWQgMCksQzEodGhpcyx1QSx2b2lkIDApLEVpKEFhKEtkLHRoaXMpLCJtYW51YWxDb2x1bW5SZXNpemVy'@;
put 'IiksRWkoQWEoQmcsdGhpcyksIm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSF19ZW5hYmxlUGx1Z2luKCl7dmFy'@;
put 'IGw9dGhpczt0aGlzLmVuYWJsZWR8fChvdShVaCx0aGlzLG5ldyBqbSksQWEoVWgsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+QzMoJHAsdGhpcyxwM3QpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxBYShV'@;
put 'aCx0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gQzMoJHAsbCxfM3QpLmNhbGwobCwuLi5kKX0sMSksdGhpcy5h'@;
put 'ZGRIb29rKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEMzKCRwLGwsdzN0KS5jYWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRk'@;
put 'SG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBDMygkcCxsLEMzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5iaW5kRXZlbnRzKCksc3Vw'@;
put 'ZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe291KHVBLHRoaXMsQWEoVWgsdGhpcykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LmNvbHVtbklu'@;
put 'ZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbENvbHVtbldpZHRocygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIixNbWUsQWEoVWgsdGhpcykuZ2V0VmFsdWVzKCkpfWxvYWRNYW51'@;
put 'YWxDb2x1bW5XaWR0aHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsTW1lLGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9TWF0aC5tYXgoYSwyMCksaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3Jl'@;
put 'dHVybiBBYShVaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoaCxkKSxkfWNsZWFyTWFudWFsU2l6ZShsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7QWEoVWgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9c2V0dXBIYW5kbGVQb3NpdGlvbihsKXtpZighbC5wYXJl'@;
put 'bnROb2RlKXJldHVybjtvdShWZyx0aGlzLGwpO2NvbnN0e193dDphfT10aGlzLmhvdC52aWV3LGQ9YS53dFRhYmxlLmdldENvb3JkcyhBYShWZyx0aGlzKSksaD1kLmNvbDtpZihoPDApcmV0dXJuO2NvbnN0IGY9U3UoQWEoVmcsdGhpcykpLHY9QWEoVmcsdGhpcykuZ2V0Qm91bmRpbmdDbGll'@;
put 'bnRSZWN0KCk7bGV0IEk7aDxhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikmJihJPWEud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oQWEoVmcsdGhpcyksZC5yb3csZC5jb2wpKSxJfHwoST1hLnd0T3ZlcmxheXMu'@;
put 'dG9wT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihBYShWZyx0aGlzKSxkLnJvdyxkLmNvbCkpLG91KHZILHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSksb3UoemgsdGhpcyxbXSk7Y29uc3QgRz10aGlzLmhvdC5z'@;
put 'ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZHJiZLbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksdWU9PntLYSh1ZS5nZXRUb3BTdGFy'@;
put 'dENvcm5lcigpLmNvbCx1ZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsQmU9PntBYSh6aCx0aGlzKS5pbmNsdWRlcyhCZSl8fEFhKHpoLHRoaXMpLnB1c2goQmUpfSl9KSxBYSh6aCx0aGlzKS5pbmNsdWRlcyhBYSh2SCx0aGlzKSl8fG91KHpoLHRoaXMsW0FhKHZILHRoaXMpXSksb3UoYkgs'@;
put 'dGhpcyxJLnN0YXJ0LTYpLG91KGZ3LHRoaXMscGFyc2VJbnQodi53aWR0aCwxMCkpLEFhKEtkLHRoaXMpLnN0eWxlLnRvcD1gJHtJLnRvcH1weGAsQWEoS2QsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke0FhKGJILHRoaXMpK0FhKGZ3LHRoaXMpfXB4YCxBYShLZCx0aGlzKS5zdHls'@;
put 'ZS5oZWlnaHQ9YCR7Zn1weGAsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoQWEoS2QsdGhpcykpfXJlZnJlc2hIYW5kbGVQb3NpdGlvbigpe0FhKEtkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtBYShiSCx0aGlzKStBYSh5SCx0aGlzKX1weGB9c2V0dXBHdWlkZVBv'@;
put 'c2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludChTdShBYShLZCx0aGlzKSksMTApLGE9cGFyc2VJbnQoQWEoS2QsdGhpcykuc3R5bGUudG9wLDEwKStsLGQ9dGhpcy5ob3Qudmlldy5nZXRUYWJsZUhlaWdodCgpO0VpKEFhKEtkLHRoaXMpLCJhY3RpdmUiKSxFaShBYShCZyx0aGlzKSwiYWN0aXZl'@;
put 'IiksQWEoQmcsdGhpcykuc3R5bGUudG9wPWAke2F9cHhgLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSxBYShCZyx0aGlzKS5zdHlsZS5oZWlnaHQ9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoQWEoQmcsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7'@;
put 'QWEoQmcsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPUFhKEtkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXX1oaWRlSGFuZGxlQW5kR3VpZGUoKXtocyhBYShLZCx0aGlzKSwiYWN0aXZlIiksaHMoQWEoQmcsdGhpcyksImFjdGl2ZSIpfWNoZWNrSWZDb2x1bW5IZWFkZXIobCl7Y29u'@;
put 'c3QgYT1EbShsLFsiVEhFQUQiXSx0aGlzLmhvdC5yb290RWxlbWVudCkse3RvcE92ZXJsYXk6ZCx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aH09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cztyZXR1cm5bZC5jbG9uZS53dFRhYmxlLlRIRUFELGguY2xvbmUud3RUYWJsZS5USEVB'@;
put 'RF0uaW5jbHVkZXMoYSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhp'@;
put 'cy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsQWEoR3AsdGhpcyksZCwhMCk7dm9pZCAwIT09ZiYmb3UoR3AsdGhpcyxmKSx0aGlzLnNldE1hbnVh'@;
put 'bFNpemUoZCxBYShHcCx0aGlzKSksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIixBYShHcCx0aGlzKSxkLCEwKSxoJiZsKCl9O0FhKGxBLHRoaXMpPj0yJiYoQWEoemgsdGhpcykubGVuZ3RoPjE/KEtuKEFhKHpoLHRo'@;
put 'aXMpLGg9PnthKGgpfSksbCgpKTpLbihBYSh6aCx0aGlzKSxoPT57YShoLCEwKX0pKSxvdShsQSx0aGlzLDApLG91KGNBLHRoaXMsbnVsbCl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RWxlbWVudDphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExp'@;
put 'c3RlbmVyKGEsIm1vdXNlb3ZlciIsZD0+QzMoJHAsdGhpcyxnM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGQ9PkMzKCRwLHRoaXMsbTN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlz'@;
put 'dGVuZXIobCwibW91c2Vtb3ZlIixkPT5DMygkcCx0aGlzLHYzdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5DMygkcCx0aGlzLHkzdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cihBYShLZCx0aGlzKSwiY29udGV4dG1lbnUiLCgpPT5DMygkcCx0aGlzLGIzdCkuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcDN0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW21IXSxsPXRoaXMubG9hZE1hbnVhbENvbHVtbldpZHRo'@;
put 'cygpO3R5cGVvZiBsPCJ1Ij90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFjaCgoYSxkKT0+e0FhKFVoLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKTpBcnJheS5pc0FycmF5KGMpPyh0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2MuZm9yRWFjaCgoYSxk'@;
put 'KT0+e0FhKFVoLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKSxvdSh1QSx0aGlzLGMpKTohMD09PWMmJkFycmF5LmlzQXJyYXkoQWEodUEsdGhpcykpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0FhKHVBLHRoaXMpLmZvckVhY2goKGEsZCk9PntBYShVaCx0aGlzKS5z'@;
put 'ZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCl9ZnVuY3Rpb24gZzN0KGMpe2lmKCFQJChjLnRhcmdldCkmJiEwIT09QWEoX0gsdGhpcykmJnRoaXMuY2hlY2tJZkNvbHVtbkhlYWRlcihjLnRhcmdldCkpe2NvbnN0IGw9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoYy50YXJnZXQpO2lmKCFsKXJl'@;
put 'dHVybjtjb25zdCBhPWwuZ2V0QXR0cmlidXRlKCJjb2xzcGFuIik7bCYmKG51bGw9PT1hfHwiMSI9PT1hKSYmKEFhKEw5LHRoaXMpfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBtM3QoYyl7Yy50YXJnZXQucGFyZW50Tm9kZT09PXRoaXMuaG90LnJvb3RFbGVtZW50'@;
put 'JiZncyhjLnRhcmdldCwibWFudWFsQ29sdW1uUmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKEFhKFZnLHRoaXMpKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLG91KEw5LHRoaXMsITApLG51bGw9PT1BYShjQSx0aGlzKSYmKG91KGNBLHRoaXMsc2V0VGltZW91dCgoKT0+'@;
put 'dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KEFhKGNBLHRoaXMpKSksb3UobEEsdGhpcyxBYShsQSx0aGlzKSsxKSx0aGlzLnN0YXJ0WD1jLnBhZ2VYLG91KEdwLHRoaXMsQWEoZncsdGhpcykpKX1mdW5jdGlvbiB2M3QoYyl7aWYo'@;
put 'QWEoTDksdGhpcykpe2NvbnN0IGw9KGMucGFnZVgtdGhpcy5zdGFydFgpKnRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpO291KHlILHRoaXMsQWEoZncsdGhpcykrbCksS24oQWEoemgsdGhpcyksYT0+e291KEdwLHRoaXMsdGhpcy5zZXRNYW51YWxTaXplKGEsQWEoeUgsdGhpcykpKX0p'@;
put 'LHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpfX1mdW5jdGlvbiB5M3QoKXtjb25zdCBjPSgpPT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sbD0oYSxkKT0+e3RoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLEFhKEdwLHRoaXMpLGEsITEpLGQmJmMoKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLEFhKEdwLHRoaXMpLGEsITEpfTtBYShMOSx0aGlzKSYmKHRoaXMuaGlkZUhhbmRs'@;
put 'ZUFuZEd1aWRlKCksb3UoTDksdGhpcywhMSksQWEoR3AsdGhpcykhPT1BYShmdyx0aGlzKSYmKEFhKHpoLHRoaXMpLmxlbmd0aD4xPyhLbihBYSh6aCx0aGlzKSxkPT57bChkKX0pLGMoKSk6S24oQWEoemgsdGhpcyksZD0+e2woZCwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKEFh'@;
put 'KFZnLHRoaXMpKSl9ZnVuY3Rpb24gYjN0KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChBYShLZCx0aGlzKSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoQWEoQmcsdGhpcykpLG91KEw5LHRoaXMsITEpLG91KF9I'@;
put 'LHRoaXMsITApLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e291KF9ILHRoaXMsITEpfSl9ZnVuY3Rpb24gXzN0KGMsbCl7bGV0IGE9YztpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSxoPUFhKFVoLHRoaXMpLmdldFZhbHVlQXRJ'@;
put 'bmRleChkKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW21IXSYmaCYmKGE9aCl9cmV0dXJuIGF9ZnVuY3Rpb24gdzN0KGMsbCl7Y29uc3QgYT1BYShVaCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhP2E6'@;
put 'Y31mdW5jdGlvbiBDM3QoKXt0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpfWZ1bmN0aW9uICRRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBTM3QoYyl7dmFyIGw9ZnVuY3Rpb24gTTN0KGMsbCl7aWYoIm9iamVjdCIh'@;
put 'PXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0'@;
put 'IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJs'@;
put 'ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBwdz0icHgiLFRtZT1jbGFzcyB4M3R7Y29uc3RydWN0b3IobCl7JFEodGhpcywiaG90Iix2b2lkIDApLCRRKHRoaXMsIl9lbGVtZW50IixudWxsKSwkUSh0aGlzLCJzdGF0ZSIsMCksdGhpcy5ob3Q9bH1h'@;
put 'cHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5p'@;
put 'c0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0x'@;
put 'fXNldFBvc2l0aW9uKGwsYSl7dm9pZCAwIT09bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wPWwrcHcpLHZvaWQgMCE9PWEmJih0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ9YStwdyl9Z2V0UG9zaXRpb24oKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUudG9wP3BhcnNlSW50KHRo'@;
put 'aXMuX2VsZW1lbnQuc3R5bGUudG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdCwxMCk6MH19c2V0U2l6ZShsLGEpe2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwrcHcpLGEmJih0aGlzLl9lbGVtZW50'@;
put 'LnN0eWxlLmhlaWdodD1hK3B3KX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVu'@;
put 'dC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK3B3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0PWErcHcpfWdldE9mZnNldCgpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJn'@;
put 'aW5Ub3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0LDEwKTowfX19LEEzdD1jbGFzcyBUM3QgZXh0ZW5kcyBUbWV7YnVp'@;
put 'bGQoKXtzdXBlci5idWlsZCgpLEVpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQiKX19LEkzdD1jbGFzcyBEM3QgZXh0ZW5kcyBUbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLEVpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUi'@;
put 'KX19O2Z1bmN0aW9uIGd3KGMsbCxhKXtBbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEFtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rp'@;
put 'b24gTzkoYyxsLGEpe3JldHVybiBjLnNldChnNihjLGwpLGEpLGF9ZnVuY3Rpb24gSHMoYyxsKXtyZXR1cm4gYy5nZXQoZzYoYyxsKSl9ZnVuY3Rpb24gZzYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDph'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfU1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVSb3dNb3ZlIiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUm93TW92ZSIpO2NvbnN0IFhR'@;
put 'PSJtYW51YWxSb3dNb3ZlIixrbWU9Imh0X19tYW51YWxSb3dNb3ZlIix3SD0ic2hvdy11aSIscVE9Im9uLW1vdmluZy0tcm93cyIsSlE9ImFmdGVyLXNlbGVjdGlvbi0tcm93cyI7dmFyIHJkPW5ldyBXZWFrTWFwLG02PW5ldyBXZWFrTWFwLGpnPW5ldyBXZWFrTWFwLHY2PW5ldyBXZWFrTWFw'@;
put 'LFhkPW5ldyBXZWFrTWFwLENIPW5ldyBXZWFrTWFwLFA5PW5ldyBXZWFrU2V0O2NsYXNzIE8zdCBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBSM3QoYyxsKXtBbWUoYyxsKSxsLmFkZChjKX0odGhpcyxQOSksZ3codGhpcyxyZCxuZXcgQTN0'@;
put 'KHRoaXMuaG90KSksZ3codGhpcyxtNixuZXcgSTN0KHRoaXMuaG90KSksZ3codGhpcyxqZyxbXSksZ3codGhpcyx2Nix2b2lkIDApLGd3KHRoaXMsWGQse30pLGd3KHRoaXMsQ0gsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWFF9c3RhdGljIGdldCBQTFVHSU5fUFJJ'@;
put 'T1JJVFkoKXtyZXR1cm4gMTQwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtYUV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzYoUDksbCxQM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnNihQOSxsLEgzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9Pmc2KFA5LHRoaXMsVjN0KS5jYWxsKHRoaXMpKSx0aGlzLmFk'@;
put 'ZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGc2KFA5LGwsQjN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlz'@;
put 'LnJlZ2lzdGVyRXZlbnRzKCksRWkodGhpcy5ob3Qucm9vdEVsZW1lbnQsa21lKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRl'@;
put 'UGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2hzKHRoaXMuaG90LnJvb3RFbGVtZW50LGttZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksSHMocmQsdGhpcykuZGVzdHJveSgpLEhzKG02LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZVJvdyhsLGEpe3JldHVybiB0'@;
put 'aGlzLm1vdmVSb3dzKFtsXSxhKX1tb3ZlUm93cyhsLGEpe2NvbnN0IGQ9SHMoQ0gsdGhpcyksaD10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93TW92ZSIsbCxhLGQsaCk7aWYoTzkoQ0gsdGhpcyx2b2lkIDApLCExPT09ZilyZXR1cm47aCYm'@;
put 'dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCB2PWgmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCx2KSx2fWRyYWdSb3cobCxhKXtyZXR1cm4gdGhpcy5kcmFnUm93'@;
put 'cyhbbF0sYSl9ZHJhZ1Jvd3MobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIE85KENILHRoaXMsYSksdGhpcy5tb3ZlUm93cyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5k'@;
put 'ZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5kLGY9YTwwLHY9bC5zb21lKEk9Pkk8MCksTT1sLnNvbWUoST0+ST49ZCk7cmV0dXJuIShofHxmfHx2fHxNKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2Nv'@;
put 'bnN0IGQ9R3UobCwoaCxmKT0+KGY8YSYmKGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Um93c0hlaWdodChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrKyl7Y29uc3Qgdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5k'@;
put 'ZXgoZik7bnVsbCE9PXYmJihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodCh2KXx8dGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkpfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0'@;
put 'aW5ncygpW1hRXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZVJvd3MobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZVJvd3MoYSwwKX19aXNGaXhlZFJvd1RvcChsKXtyZXR1cm4gbDx0aGlz'@;
put 'LmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcH1pc0ZpeGVkUm93Qm90dG9tKGwpe3JldHVybiBsPnRoaXMuaG90LmNvdW50Um93cygpLTEtdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b219cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tzKCJw'@;
put 'ZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsUm93TW92ZSIsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1h'@;
put 'bnVhbFJvd01vdmUiLGwpLGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlUm93c1RvTW92aW5nKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9W107aWYoIWwpcmV0dXJuIGE7Y29uc3R7ZnJvbTpkLHRvOmh9PWw7cmV0dXJuIEthKE1hdGgubWluKGQucm93LGgu'@;
put 'cm93KSxNYXRoLm1heChkLnJvdyxoLnJvdyksTT0+e2EucHVzaChNKX0pLGF9cmVmcmVzaFBvc2l0aW9ucygpe2NvbnN0IGw9SHMoWGQsdGhpcykuY29vcmRzLGE9dGhpcy5ob3QuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxkPXRoaXMuaG90LmdldExhc3RGdWxseVZpc2libGVSb3coKSxo'@;
put 'PXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMuaXNGaXhlZFJvd1RvcChsLnJvdykmJmE+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS0xLC0xKSksdGhpcy5pc0ZpeGVkUm93Qm90dG9tKGwucm93'@;
put 'KSYmZDxoJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkKzEsMSksdm9pZCAwLCEwKTtjb25zdCBmPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsdj1IcyhYZCx0aGlzKS5URCxNPXRoaXMuaG90LnJv'@;
put 'b3RFbGVtZW50LEk9ajAoTSksRz1vXyhNKSxyZT1mLmhvbGRlci5zY3JvbGxUb3AseWU9SS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3chPT1HP0cuc2Nyb2xsVG9wOjApLEVlPUhzKFhkLHRoaXMpLmV2ZW50UGFnZVkteWUrcmUsQmU9Zi5oaWRlci5vZmZzZXRIZWlnaHQsR2U9Zi5UQk9EWS5v'@;
put 'ZmZzZXRUb3Asc3Q9SHMocmQsdGhpcykuZ2V0T2Zmc2V0KCkudG9wLHB0PUhzKHJkLHRoaXMpLmdldFNpemUoKS5oZWlnaHQsZHQ9di5vZmZzZXRIZWlnaHQvMixxdD12Lm9mZnNldEhlaWdodDtsZXQgbW49dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRIZWlnaHQrdGhpcy5nZXRSb3dzSGVp'@;
put 'Z2h0KDAsbC5yb3ctMSk7Y29uc3Qgd249RWU+PW1uK2R0O3RoaXMuaXNGaXhlZFJvd1RvcChsLnJvdykmJihtbis9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksbC5yb3c8MD9IcyhYZCx0aGlzKS5yb3c9YT4wP2EtMTphOnduPyhI'@;
put 'cyhYZCx0aGlzKS5yb3c9bC5yb3crMSxtbis9MD09PWwucm93P3F0LTE6cXQpOkhzKFhkLHRoaXMpLnJvdz1sLnJvdztsZXQgaG49RWUsTW49bW47RWUrcHQrc3Q+PUJlP2huPUJlLXB0LXN0OkVlK3N0PEdlJiYoaG49R2UrTWF0aC5hYnMoc3QpKSxtbj49QmUtMSYmKE1uPUJlLTEpLEhzKHJk'@;
put 'LHRoaXMpLnNldFBvc2l0aW9uKGhuKSxIcyhtNix0aGlzKS5zZXRQb3NpdGlvbihNbil9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixh'@;
put 'PT5nNihQOSx0aGlzLEYzdCkuY2FsbCh0aGlzLGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5nNihQOSx0aGlzLE4zdCkuY2FsbCh0aGlzKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9YnVpbGRQbHVn'@;
put 'aW5VSSgpe0hzKHJkLHRoaXMpLmJ1aWxkKCksSHMobTYsdGhpcykuYnVpbGQoKX1kZXN0cm95KCl7SHMocmQsdGhpcykuZGVzdHJveSgpLEhzKG02LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFAzdChjLGwsYSxkKXtjb25zdHt3dFRhYmxlOmgsd3RWaWV3cG9y'@;
put 'dDpmfT10aGlzLmhvdC52aWV3Ll93dCx2PXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxNPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIU18fCF2fHxIcyh2Nix0aGlzKXx8MCE9PWMuYnV0dG9uKXJldHVybiBPOSh2Nix0aGlzLCExKSxIcyhq'@;
put 'Zyx0aGlzKS5sZW5ndGg9MCx2b2lkIGhzKHRoaXMuaG90LnJvb3RFbGVtZW50LFtxUSx3SF0pO2NvbnN0IEk9SHMobTYsdGhpcykuaXNCdWlsdCgpJiYhSHMobTYsdGhpcykuaXNBcHBlbmRlZCgpLEc9SHMocmQsdGhpcykuaXNCdWlsdCgpJiYhSHMocmQsdGhpcykuaXNBcHBlbmRlZCgpO0km'@;
put 'JkcmJihIcyhtNix0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSxIcyhyZCx0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSk7Y29uc3R7ZnJvbTpyZSx0bzp1ZX09TSx5ZT1NYXRoLm1pbihyZS5yb3csdWUucm93KSxFZT1NYXRoLm1heChyZS5yb3csdWUucm93KTtpZihsLmNvbDwwJiZsLnJvdz49eWUm'@;
put 'Jmwucm93PD1FZSl7ZC5yb3c9ITAsTzkodjYsdGhpcywhMCksSHMoWGQsdGhpcykuZXZlbnRQYWdlWT1jLnBhZ2VZLEhzKFhkLHRoaXMpLmNvb3Jkcz1sLEhzKFhkLHRoaXMpLlREPWEsTzkoamcsdGhpcyx0aGlzLnByZXBhcmVSb3dzVG9Nb3ZpbmcoKSk7Y29uc3QgQmU9aC5ob2xkZXIuc2Ny'@;
put 'b2xsTGVmdCtmLmdldFJvd0hlYWRlcldpZHRoKCksR2U9dGhpcy5nZXRSb3dzSGVpZ2h0KHllLGwucm93LTEpKyhjLmNsaWVudFktYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApO0hzKHJkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsQmUpLEhzKHJkLHRoaXMpLnNldFNpemUoaC5oaWRl'@;
put 'ci5vZmZzZXRXaWR0aC1CZSx0aGlzLmdldFJvd3NIZWlnaHQoeWUsRWUpKSxIcyhyZCx0aGlzKS5zZXRPZmZzZXQoLUdlLG51bGwpLEVpKHRoaXMuaG90LnJvb3RFbGVtZW50LHFRKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIGhzKHRoaXMuaG90LnJvb3RFbGVtZW50LEpRKSxPOSh2'@;
put 'Nix0aGlzLCExKSxIcyhqZyx0aGlzKS5sZW5ndGg9MH1mdW5jdGlvbiBGM3QoYyl7SHModjYsdGhpcykmJihIcyhYZCx0aGlzKS5ldmVudFBhZ2VZPWMucGFnZVksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIEgzdChjLGwsYSxkKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n'@;
put 'ZUxhc3QoKXx8IUhzKHY2LHRoaXMpfHwoSHMoamcsdGhpcykuaW5kZXhPZihsLnJvdyk+LTE/aHModGhpcy5ob3Qucm9vdEVsZW1lbnQsd0gpOkVpKHRoaXMuaG90LnJvb3RFbGVtZW50LHdIKSxkLnJvdz0hMCxkLmNvbHVtbj0hMCxkLmNlbGw9ITAsSHMoWGQsdGhpcykuY29vcmRzPWwsSHMo'@;
put 'WGQsdGhpcykuVEQ9YSl9ZnVuY3Rpb24gTjN0KCl7Y29uc3QgYz1IcyhYZCx0aGlzKS5yb3csbD1IcyhqZyx0aGlzKS5sZW5ndGg7aWYoTzkodjYsdGhpcywhMSksaHModGhpcy5ob3Qucm9vdEVsZW1lbnQsW3FRLHdILEpRXSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hl'@;
put 'YWRlcigpJiZFaSh0aGlzLmhvdC5yb290RWxlbWVudCxKUSksbDwxfHx2b2lkIDA9PT1jKXJldHVybjtjb25zdCBhPUhzKGpnLHRoaXMpWzBdLGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxoPXRoaXMuZHJhZ1Jvd3MoSHMoamcsdGhpcyksYyk7aWYoSHMoamcsdGhpcykubGVuZ3RoPTAs'@;
put 'ITA9PT1oKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3coZCk7dGhpcy5ob3Quc2VsZWN0Um93cyhmLGYrbC0xKX19ZnVuY3Rpb24gVjN0KCl7'@;
put 'Y29uc3QgYz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK2MuaG9sZGVyLnNjcm9sbExlZnQ7SHMocmQsdGhpcykuc2V0UG9zaXRpb24obnVsbCxkKSxIcyhyZCx0aGlzKS5zZXRTaXplKGMuaGlkZXIu'@;
put 'b2Zmc2V0V2lkdGgtZCl9ZnVuY3Rpb24gQjN0KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9uIFMxKGMsbCxhKXtEbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIERtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl'@;
put 'IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gR2MoYyxsLGEpe3JldHVybiBjLnNldCh6ZyhjLGwpLGEpLGF9ZnVuY3Rpb24geGEoYyxsKXtyZXR1cm4gYy5nZXQoemcoYyxsKSl9ZnVuY3Rpb24gemcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFNIPSJtYW51YWxSb3dSZXNpemUiLEltZT0ibWFudWFsUm93'@;
put 'SGVpZ2h0cyI7dmFyIEtwPW5ldyBXZWFrTWFwLE1IPW5ldyBXZWFrTWFwLFpoPW5ldyBXZWFrTWFwLGRBPW5ldyBXZWFrTWFwLHk2PW5ldyBXZWFrTWFwLFFRPW5ldyBXZWFrTWFwLG13PW5ldyBXZWFrTWFwLHhIPW5ldyBXZWFrTWFwLGlkPW5ldyBXZWFrTWFwLFhwPW5ldyBXZWFrTWFwLEY5'@;
put 'PW5ldyBXZWFrTWFwLEVIPW5ldyBXZWFrTWFwLGhBPW5ldyBXZWFrTWFwLGZBPW5ldyBXZWFrTWFwLFMzPW5ldyBXZWFrTWFwLHBBPW5ldyBXZWFrTWFwLGI2PW5ldyBXZWFrU2V0O2NsYXNzIFUzdCBleHRlbmRzIEZve3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBTSH1zdGF0aWMg'@;
put 'Z2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBqM3QoYyxsKXtEbWUoYyxsKSxsLmFkZChjKX0odGhpcyxiNiksUzEodGhpcyxLcCxudWxsKSxTMSh0aGlzLE1ILG51bGwpLFMxKHRoaXMsWmgsW10pLFMxKHRoaXMsZEEsbnVs'@;
put 'bCksUzEodGhpcyx5NixudWxsKSxTMSh0aGlzLFFRLG51bGwpLFMxKHRoaXMsbXcsbnVsbCksUzEodGhpcyx4SCxudWxsKSxTMSh0aGlzLGlkLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksUzEodGhpcyxYcCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRl'@;
put 'RWxlbWVudCgiRElWIikpLFMxKHRoaXMsRjksITEpLFMxKHRoaXMsRUgsITEpLFMxKHRoaXMsaEEsMCksUzEodGhpcyxmQSxudWxsKSxTMSh0aGlzLFMzLHZvaWQgMCksUzEodGhpcyxwQSx2b2lkIDApLEVpKHhhKGlkLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyIiksRWkoeGEoWHAsdGhpcyks'@;
put 'Im1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtTSF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwoR2MoUzMsdGhp'@;
put 'cyxuZXcgam0pLHhhKFMzLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnpnKGI2LHRoaXMsWDN0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUseGEoUzMsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVp'@;
put 'Z2h0IiwobCxhKT0+emcoYjYsdGhpcyxLM3QpLmNhbGwodGhpcyxsLGEpKSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNh'@;
put 'YmxlUGx1Z2luKCl7R2MocEEsdGhpcyx4YShTMyx0aGlzKS5nZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsUm93SGVpZ2h0cygpe3RoaXMuaG90LnJ1bkhvb2tz'@;
put 'KCJwZXJzaXN0ZW50U3RhdGVTYXZlIixJbWUseGEoUzMsdGhpcykuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxSb3dIZWlnaHRzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLEltZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxh'@;
put 'KXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD1NYXRoLm1heChhLHRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKTtyZXR1cm4geGEoUzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsaCksaH1nZXRMYXN0RGVzaXJlZFJvd0hlaWdodCgpe3Jl'@;
put 'dHVybiB4YShkQSx0aGlzKX1zZXR1cEhhbmRsZVBvc2l0aW9uKGwpe0djKEtwLHRoaXMsbCk7Y29uc3R7dmlldzphfT10aGlzLmhvdCx7X3d0OmR9PWEsaD1kLnd0VGFibGUuZ2V0Q29vcmRzKHhhKEtwLHRoaXMpKSxmPWgucm93O2lmKGY8MClyZXR1cm47Y29uc3Qgdj1pdSh4YShLcCx0aGlz'@;
put 'KSksTT14YShLcCx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJPWY8ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxHPWY+PWEuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKDAsMSktZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTtsZXQgcmU7ST9yZT1kLnd0T3Zlcmxh'@;
put 'eXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHhhKEtwLHRoaXMpLGgucm93LGguY29sKTpHJiYocmU9ZC53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih4YShLcCx0aGlz'@;
put 'KSxoLnJvdyxoLmNvbCkpLHJlfHwocmU9ZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih4YShLcCx0aGlzKSxoLnJvdyxoLmNvbCkpLEdjKE1ILHRoaXMsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJ'@;
put 'bmRleChmKSksR2MoWmgsdGhpcyxbXSk7Y29uc3QgdWU9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmdWUmJktuKHRoaXMuaG90'@;
put 'LmdldFNlbGVjdGVkUmFuZ2UoKSxFZT0+e0thKEVlLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LEVlLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93LHN0PT57eGEoWmgsdGhpcykuaW5jbHVkZXMoc3QpfHx4YShaaCx0aGlzKS5wdXNoKHN0KX0pfSkseGEoWmgsdGhpcykuaW5jbHVkZXMoeGEo'@;
put 'TUgsdGhpcykpfHxHYyhaaCx0aGlzLFt4YShNSCx0aGlzKV0pLEdjKHhILHRoaXMscmUudG9wLTYpLEdjKG13LHRoaXMscGFyc2VJbnQoTS5oZWlnaHQsMTApKSx4YShpZCx0aGlzKS5zdHlsZS50b3A9YCR7eGEoeEgsdGhpcykreGEobXcsdGhpcyl9cHhgLHhhKGlkLHRoaXMpLnN0eWxlW3Ro'@;
put 'aXMuaW5saW5lRGlyXT1gJHtyZS5zdGFydH1weGAseGEoaWQsdGhpcykuc3R5bGUud2lkdGg9YCR7dn1weGAsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoeGEoaWQsdGhpcykpfXJlZnJlc2hIYW5kbGVQb3NpdGlvbigpe3hhKGlkLHRoaXMpLnN0eWxlLnRvcD1gJHt4YSh4SCx0'@;
put 'aGlzKSt4YShkQSx0aGlzKX1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludChpdSh4YShpZCx0aGlzKSksMTApLGE9cGFyc2VJbnQoeGEoaWQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdLDEwKStsLGQ9dGhpcy5ob3Qudmlldy5nZXRUYWJsZVdpZHRoKCk7RWko'@;
put 'eGEoaWQsdGhpcyksImFjdGl2ZSIpLEVpKHhhKFhwLHRoaXMpLCJhY3RpdmUiKSx4YShYcCx0aGlzKS5zdHlsZS50b3A9eGEoaWQsdGhpcykuc3R5bGUudG9wLHhhKFhwLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHthfXB4YCx4YShYcCx0aGlzKS5zdHlsZS53aWR0aD1kLWwrInB4'@;
put 'Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh4YShYcCx0aGlzKSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXt4YShYcCx0aGlzKS5zdHlsZS50b3A9eGEoaWQsdGhpcykuc3R5bGUudG9wfWhpZGVIYW5kbGVBbmRHdWlkZSgpe2hzKHhhKGlkLHRoaXMpLCJhY3RpdmUiKSxocyh4'@;
put 'YShYcCx0aGlzKSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcihsKXtjb25zdCBhPURtKGwsWyJUQk9EWSJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7aW5saW5lU3RhcnRPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmgsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVy'@;
put 'bGF5OmZ9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RUYWJsZS5UQk9EWSxoLmNsb25lLnd0VGFibGUuVEJPRFksZi5jbG9uZS53dFRhYmxlLlRCT0RZXS5pbmNsdWRlcyhhKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFn'@;
put 'TmFtZT8iVEgiPT09bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpO3JldHVybiB2b2lkIDAhPT1hJiZ4YSh5Nix0'@;
put 'aGlzKTxhP2E6eGEoeTYsdGhpcyl9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUi'@;
put 'LHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApO3ZvaWQgMCE9PWYmJkdjKHk2LHRoaXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQseGEoeTYsdGhpcykpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCksaCYm'@;
put 'bCgpfTt4YShoQSx0aGlzKT49MiYmKHhhKFpoLHRoaXMpLmxlbmd0aD4xPyhLbih4YShaaCx0aGlzKSxoPT57YShoKX0pLGwoKSk6S24oeGEoWmgsdGhpcyksaD0+e2EoaCwhMCl9KSksR2MoaEEsdGhpcywwKSxHYyhmQSx0aGlzLG51bGwpfWJpbmRFdmVudHMoKXtjb25zdHtyb290RWxlbWVu'@;
put 'dDpsLHJvb3RXaW5kb3c6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PnpnKGI2LHRoaXMsWjN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT56Zyhi'@;
put 'Nix0aGlzLFczdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIsZD0+emcoYjYsdGhpcyxZM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+emcoYjYs'@;
put 'dGhpcyxHM3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoeGEoaWQsdGhpcyksImNvbnRleHRtZW51IiwoKT0+emcoYjYsdGhpcywkM3QpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFozdChjKXtpZighUCQo'@;
put 'Yy50YXJnZXQpJiYhMCE9PXhhKEVILHRoaXMpJiZ0aGlzLmNoZWNrSWZSb3dIZWFkZXIoYy50YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGMudGFyZ2V0KTtsJiYoeGEoRjksdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihsKSl9fWZ1bmN0aW9uIFczdChj'@;
put 'KXtncyhjLnRhcmdldCwibWFudWFsUm93UmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHhhKEtwLHRoaXMpKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLEdjKEY5LHRoaXMsITApLG51bGw9PT14YShmQSx0aGlzKSYmKEdjKGZBLHRoaXMsc2V0VGltZW91dCgoKT0+dGhp'@;
put 'cy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KHhhKGZBLHRoaXMpKSksR2MoaEEsdGhpcyx4YShoQSx0aGlzKSsxKSxHYyhRUSx0aGlzLGMucGFnZVkpLEdjKHk2LHRoaXMseGEobXcsdGhpcykpKX1mdW5jdGlvbiBZM3QoYyl7eGEoRjks'@;
put 'dGhpcykmJihHYyhkQSx0aGlzLHhhKG13LHRoaXMpKyhjLnBhZ2VZLXhhKFFRLHRoaXMpKSksS24oeGEoWmgsdGhpcyksbD0+e0djKHk2LHRoaXMsdGhpcy5zZXRNYW51YWxTaXplKGwseGEoZEEsdGhpcykpKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3Vp'@;
put 'ZGVQb3NpdGlvbigpKX1mdW5jdGlvbiBHM3QoKXtjb25zdCBjPSgpPT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sbD0oYSxkKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0'@;
put 'KGEpLGEsITEpLGQmJmMoKSx0aGlzLnNhdmVNYW51YWxSb3dIZWlnaHRzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChhKSxhLCExKX07eGEoRjksdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLEdjKEY5LHRoaXMs'@;
put 'ITEpLHhhKHk2LHRoaXMpIT09eGEobXcsdGhpcykmJih4YShaaCx0aGlzKS5sZW5ndGg+MT8oS24oeGEoWmgsdGhpcyksZD0+e2woZCl9KSxjKCkpOktuKHhhKFpoLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih4YShLcCx0aGlzKSkpfWZ1bmN0aW9uICQz'@;
put 'dCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoeGEoaWQsdGhpcykpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHhhKFhwLHRoaXMpKSxHYyhGOSx0aGlzLCExKSxHYyhFSCx0aGlzLCEwKSx0aGlzLmhvdC5fcmVn'@;
put 'aXN0ZXJJbW1lZGlhdGUoKCk9PntHYyhFSCx0aGlzLCExKX0pfWZ1bmN0aW9uIEszdChjLGwpe2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD14YShTMyx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGlu'@;
put 'Z3MoKVtTSF0mJmgmJihhPWgpfXJldHVybiBhfWZ1bmN0aW9uIFgzdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtTSF0sbD10aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0eXBlb2YgbDwidSI/bC5mb3JFYWNoKChhLGQp'@;
put 'PT57eGEoUzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KTpBcnJheS5pc0FycmF5KGMpPyhjLmZvckVhY2goKGEsZCk9Pnt4YShTMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pLEdjKHBBLHRoaXMsYykpOiEwPT09YyYmQXJyYXkuaXNBcnJheSh4YShwQSx0aGlzKSkmJnhhKHBB'@;
put 'LHRoaXMpLmZvckVhY2goKGEsZCk9Pnt4YShTMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCl9ZnVuY3Rpb24gSDkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFEzdChjKXt2YXIgbD1mdW5jdGlvbiBlcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj'@;
put 'O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh'@;
put 'bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3'@;
put 'cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFJtZShjLGwpe3JldHVybiBjLmdldChMbWUoYyxsKSl9ZnVuY3Rpb24gVEgoYyxsLGEpe3JldHVybiBjLnNldChMbWUoYyxsKSxhKSxhfWZ1bmN0aW9uIExtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo'@;
put 'bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Yig2ODE0NiksYig3NDk5KTt2YXIgTjk9bmV3IFdlYWtNYXA7Y29uc3QgcXA9Y2xhc3MgdHB0e2NvbnN0cnVj'@;
put 'dG9yKGwsYSxkLGgsZix2KXtIOSh0aGlzLCJyb3ciLHZvaWQgMCksSDkodGhpcywiY29sIix2b2lkIDApLEg5KHRoaXMsInJvd3NwYW4iLHZvaWQgMCksSDkodGhpcywiY29sc3BhbiIsdm9pZCAwKSxIOSh0aGlzLCJyZW1vdmVkIiwhMSksSDkodGhpcywiY2VsbENvb3Jkc0ZhY3RvcnkiLHZv'@;
put 'aWQgMCksSDkodGhpcywiY2VsbFJhbmdlRmFjdG9yeSIsdm9pZCAwKSxmdW5jdGlvbiBxM3QoYyxsLGEpeyhmdW5jdGlvbiBKM3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u'@;
put 'IGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLE45LG51bGwpLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnJvd3NwYW49ZCx0aGlzLmNvbHNwYW49aCx0aGlzLmNlbGxDb29yZHNGYWN0b3J5PWYsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5PXZ9c3RhdGljIE5FR0FUSVZFX1ZB'@;
put 'TFVFU19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO3JldHVybiBobGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgd2l0aCB7cm93OiAke2F9LCBjb2w6ICR7ZH0sXHgyMAogICAgICByb3dzcGFuOiAke2h9LCBjb2xzcGFuOiAke2Z9fSBjb250YWlu'@;
put 'cyBuZWdhdGl2ZSB2YWx1ZXMsIHdoaWNoIGlzXHgyMAogICAgICBub3Qgc3VwcG9ydGVkLiBJdCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBJU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBobGBUaGUgbWVy'@;
put 'Z2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGlzIHBvc2l0aW9uZWRceDIwCiAgICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAu'@;
put 'YH1zdGF0aWMgSVNfU0lOR0xFX0NFTEwobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBobGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhhcyBib3RoICJyb3dzcGFuIlx4MjAKICAgICAgYW5kICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1h'@;
put 'a2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBaRVJPX1NQQU5fV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGhsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaGFzICJy'@;
put 'b3dzcGFuIlx4MjAKICAgICAgb3IgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIwIiwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIGNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMobCl7bGV0e3JvdzphLGNvbDpkLHJvd3Nw'@;
put 'YW46aCxjb2xzcGFuOmZ9PWw7cmV0dXJuIGE8MHx8ZDwwfHxoPDB8fGY8MH1zdGF0aWMgaXNTaW5nbGVDZWxsKGwpe2xldHtyb3dzcGFuOmEsY29sc3BhbjpkfT1sO3JldHVybiAxPT09ZCYmMT09PWF9c3RhdGljIGNvbnRhaW5zWmVyb1NwYW4obCl7bGV0e3Jvd3NwYW46YSxjb2xzcGFuOmR9'@;
put 'PWw7cmV0dXJuIDA9PT1kfHwwPT09YX1zdGF0aWMgaXNPdXRPZkJvdW5kcyhsLGEsZCl7cmV0dXJuIGwucm93PDB8fGwuY29sPDB8fGwucm93Pj1hfHxsLnJvdytsLnJvd3NwYW4tMT49YXx8bC5jb2w+PWR8fGwuY29sK2wuY29sc3Bhbi0xPj1kfW5vcm1hbGl6ZShsKXtjb25zdCBhPWwuY291'@;
put 'bnRSb3dzKCksZD1sLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz5hLTEmJih0aGlzLnJvdz1hLTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMucm93K3RoaXMucm93c3Bhbj5hLTEmJih0aGlzLnJvd3Nw'@;
put 'YW49YS10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bhbj1kLXRoaXMuY29sKSxUSChOOSx0aGlzLG51bGwpfWluY2x1ZGVzKGwsYSl7cmV0dXJuIHRoaXMucm93PD1sJiZ0aGlzLmNvbDw9YSYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWwmJnRoaXMu'@;
put 'Y29sK3RoaXMuY29sc3Bhbi0xPj1hfWluY2x1ZGVzSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmNvbDw9bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWx9aW5jbHVkZXNWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWx9c2hp'@;
put 'ZnQobCxhKXtjb25zdCBkPWxbMF18fGxbMV0saD1hK01hdGguYWJzKGxbMF18fGxbMV0pLTEsZj1sWzBdPyJjb2xzcGFuIjoicm93c3BhbiIsdj1sWzBdPyJjb2wiOiJyb3ciLE09TWF0aC5taW4oYSxoKSxJPU1hdGgubWF4KGEsaCksRz10aGlzW3ZdLHJlPXRoaXNbdl0rdGhpc1tmXS0xO2lm'@;
put 'KEc+PWEmJih0aGlzW3ZdKz1kKSxkPjApYTw9cmUmJmE+RyYmKHRoaXNbZl0rPWQpO2Vsc2UgaWYoZDwwKXtpZihNPD1HJiZJPj1yZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLFRIKE45LHRoaXMsbnVsbCksITE7aWYoRz49TSYmRzw9SSl7Y29uc3QgdWU9SS1HKzEseWU9TWF0aC5hYnMoZCkt'@;
put 'dWU7dGhpc1t2XS09eWUrZCx0aGlzW2ZdLT11ZX1lbHNlIEc8PU0mJnJlPj1JP3RoaXNbZl0rPWQ6Rzw9TSYmcmU+PU0mJnJlPEkmJih0aGlzW2ZdLT1yZS1NKzEpfXJldHVybiBUSChOOSx0aGlzLG51bGwpLCEwfWlzRmFydGhlcihsLGEpe3JldHVybiFsfHwoImRvd24iPT09YT9sLnJvdyts'@;
put 'LnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09YT9sLnJvdz50aGlzLnJvdzoicmlnaHQiPT09YT9sLmNvbCtsLmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT1hP2wuY29sPnRoaXMuY29sOm51bGwpfWdldExhc3RSb3coKXtyZXR1cm4g'@;
put 'dGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiBSbWUoTjksdGhpcyl8fFRIKE45LHRoaXMsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5y'@;
put 'b3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5nZXRMYXN0Um93KCksdGhpcy5nZXRMYXN0Q29sdW1uKCkpKSksUm1lKE45LHRoaXMpfX07ZnVuY3Rpb24gQUgoYyxsLGEpe3JldHVybihsPWZ1'@;
put 'bmN0aW9uIGlwdChjKXt2YXIgbD1mdW5jdGlvbiBhcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp'@;
put 'KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFY5KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1l'@;
put 'bnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgXzY9bmV3IFdlYWtTZXQ7Y2xhc3Mga0h7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIG5wdChjLGwpeyhmdW5jdGlvbiBycHQoYyxs'@;
put 'KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsXzYpLEFIKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxBSCh0aGlzLCJtZXJn'@;
put 'ZWRDZWxscyIsW10pLEFIKHRoaXMsIm1lcmdlZENlbGxzTWF0cml4IixuZXcgTWFwKSxBSCh0aGlzLCJob3QiLHZvaWQgMCksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdH1zdGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGhsYFRo'@;
put 'ZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0sIG92ZXJsYXBzXHgyMAogICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJnZWQgY2VsbC4gVGhlIG92ZXJsYXBwaW5nIG1lcmdlZCBjZWxsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2VceDIwCiAg'@;
put 'ICAgIGZpeCB5b3VyIHNldHVwLmB9Z2V0KGwsYSl7dmFyIGQ7cmV0dXJuISghdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5oYXMobCl8fG51bGw9PT0oZD10aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5nZXQoYSkpfHx2b2lkIDA9PT1kKSYmZH1nZXRCeVJhbmdlKGwpe2NvbnN0e3Jvdzph'@;
put 'LGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7bGV0IE09ITE7Zm9yKGxldCBJPTA7STx2O0krKyl7Y29uc3QgRz10aGlzLm1lcmdlZENlbGxzW0ldLHtyb3c6cmUsY29sOnVl'@;
put 'LHJvd3NwYW46eWUsY29sc3BhbjpFZX09RztpZihyZT49YSYmcmUreWUtMTw9aCYmdWU+PWQmJnVlK0VlLTE8PWYpe009RzticmVha319cmV0dXJuIE19ZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGwpe2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNo'@;
put 'KGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpJfT1oO2ZvcihsZXQgRz1mO0c8ZitJO0crKylmb3IobGV0IHJlPXY7cmU8ditNO3JlKyspYS5hZGQoYHIke0d9LGMke3JlfWApfSksbC5maWx0ZXIoaD0+e2NvbnN0e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFu'@;
put 'Okl9PWgsRz1uZXcgU2V0O2xldCByZT0hMTtmb3IobGV0IHVlPWY7dWU8ZitJO3VlKyspe2ZvcihsZXQgeWU9djt5ZTx2K007eWUrKyl7Y29uc3QgRWU9YHIke3VlfSxjJHt5ZX1gO2lmKGEuaGFzKEVlKSl7WW8oa0guSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhoKSkscmU9ITA7YnJlYWt9Ry5h'@;
put 'ZGQoRWUpfWlmKHJlKWJyZWFrfXJldHVybiByZXx8YS5hZGQoLi4uRyksIXJlfSl9Z2V0V2l0aGluUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdHtyb3c6ZCxjb2w6aH09bC5nZXRUb3BTdGFydENvcm5l'@;
put 'cigpLHtyb3c6Zixjb2w6dn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxNPVtdO2ZvcihsZXQgST1kO0k8PWY7SSsrKWZvcihsZXQgRz1oO0c8PXY7RysrKXtjb25zdCByZT10aGlzLmdldChJLEcpO3JlJiYoYXx8IWEmJnJlLnJvdz09PUkmJnJlLmNvbD09PUcpJiZNLnB1c2gocmUpfXJldHVy'@;
put 'biBNfWFkZChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9bC5yb3csaD1sLmNvbCxNPW5ldyBxcChkLGgsbC5yb3dzcGFuLGwuY29sc3Bhbix0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlzLmhvdC5f'@;
put 'Y3JlYXRlQ2VsbFJhbmdlKSxJPXRoaXMuZ2V0KGQsaCksRz0hYSYmdGhpcy5pc092ZXJsYXBwaW5nKE0pO3JldHVybiBJfHxHPyhHJiZZbyhrSC5JU19PVkVSTEFQUElOR19XQVJOSU5HKE0pKSwhMSk6KHRoaXMuaG90JiZNLm5vcm1hbGl6ZSh0aGlzLmhvdCksdGhpcy5tZXJnZWRDZWxscy5w'@;
put 'dXNoKE0pLFY5KF82LHRoaXMsT21lKS5jYWxsKHRoaXMsTSksTSl9cmVtb3ZlKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpLGg9ZD90aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoZCk6LTE7cmV0dXJuISghZHx8LTE9PT1oKSYmKHRoaXMubWVyZ2VkQ2VsbHMuc3BsaWNlKGgsMSksVjkoXzYs'@;
put 'dGhpcyxzcHQpLmNhbGwodGhpcyxkKSxkKX1jbGVhcigpe0tuKHRoaXMubWVyZ2VkQ2VsbHMsbD0+e2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO0thKGEsYStoLHY9PntLYShkLGQrZixNPT57Y29uc3QgST10aGlzLmhvdC5nZXRDZWxsKHYsTSk7SSYmKEkucmVtb3Zl'@;
put 'QXR0cmlidXRlKCJyb3dzcGFuIiksSS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxJLnN0eWxlLmRpc3BsYXk9IiIpfSl9KX0pLHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAsdGhpcy5tZXJnZWRDZWxsc01hdHJpeD1uZXcgTWFwfWlzT3ZlcmxhcHBpbmcobCl7Y29uc3QgYT1sLmdldFJh'@;
put 'bmdlKCk7Zm9yKGxldCBkPTA7ZDx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtkKyspaWYodGhpcy5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLm92ZXJsYXBzKGEpKXJldHVybiEwO3JldHVybiExfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxh'@;
put 'KTtpZighZClyZXR1cm4hMTtjb25zdHtyb3c6aCxjb2w6Zixyb3dzcGFuOnYsY29sc3BhbjpNfT1kLEk9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLEc9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEkpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RS'@;
put 'ZW5kZXJlZFZpc2libGVSb3coKSxyZT1bImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhJKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksdWU9QW8oRyxoLGgrdi0x'@;
put 'KSx5ZT1BbyhyZSxmLGYrTS0xKTtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHVlLDEpPT09bCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHllLDEpPT09YX1nZXRGaXJzdFJlbmRlcmFi'@;
put 'bGVDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWR8fHRoaXMuaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSk7Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90'@;
put 'SGlkZGVuSW5kZXgoZC5yb3csMSksZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0U3RhcnRNb3N0Q29sdW1uSW5kZXgobCxhKXtjb25zdCBkPVY5KF82'@;
put 'LHRoaXMsREgpLmNhbGwodGhpcyxsLCJjb2wiLC0xKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxhKXtjb25zdCBkPVY5KF82LHRoaXMsREgpLmNhbGwodGhpcyxsLCJj'@;
put 'b2wiLDEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT49YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldFRvcE1vc3RSb3dJbmRleChsLGEpe2NvbnN0IGQ9VjkoXzYsdGhpcyxESCkuY2FsbCh0aGlzLGwsInJvdyIsLTEpO2xldCBoPWE7Zm9yKGxldCBmPTA7'@;
put 'ZjxkLmxlbmd0aDtmKyspaWYoZFtmXTw9YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldEJvdHRvbU1vc3RSb3dJbmRleChsLGEpe2NvbnN0IGQ9VjkoXzYsdGhpcyxESCkuY2FsbCh0aGlzLGwsInJvdyIsMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPj1h'@;
put 'KXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9c2hpZnRDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD1bMCwwXTtzd2l0Y2gobCl7Y2FzZSJyaWdodCI6aFswXSs9ZDticmVhaztjYXNlImxlZnQiOmhbMF0tPWQ7YnJlYWs7Y2FzZSJkb3duIjpoWzFdKz1kO2JyZWFrO2Nhc2UidXAiOmhbMV0tPWR9'@;
put 'Y29uc3QgZj1bXTt0aGlzLm1lcmdlZENlbGxzLmZvckVhY2godj0+e3Yuc2hpZnQoaCxhKSx2LnJlbW92ZWQmJmYucHVzaCh2KX0pLGYuZm9yRWFjaCh2PT57dGhpcy5tZXJnZWRDZWxscy5zcGxpY2UodGhpcy5tZXJnZWRDZWxscy5pbmRleE9mKHYpLDEpfSksdGhpcy5tZXJnZWRDZWxsc01h'@;
put 'dHJpeC5jbGVhcigpLHRoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaCh2PT57VjkoXzYsdGhpcyxPbWUpLmNhbGwodGhpcyx2KX0pfX1mdW5jdGlvbiBESChjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO2NvbnN0IGQ9bmV3'@;
put 'IE1hcCxoPTE9PT1hP2MuZ2V0VG9wU3RhcnRDb3JuZXIoKTpjLmdldEJvdHRvbUVuZENvcm5lcigpLGY9MT09PWE/Yy5nZXRCb3R0b21FbmRDb3JuZXIoKTpjLmdldFRvcFN0YXJ0Q29ybmVyKCk7Zm9yKGxldCB2PWgucm93OzE9PT1hP3Y8PWYucm93OnY+PWYucm93O3YrPWEpZm9yKGxldCBN'@;
put 'PWguY29sOzE9PT1hP008PWYuY29sOk0+PWYuY29sO00rPWEpe2NvbnN0IEk9InJvdyI9PT1sP3Y6TSxHPXRoaXMuZ2V0KHYsTSk7bGV0IHJlPUk7RyYmKHJlPTE9PT1hP0dbbF0rR1tgJHtsfXNwYW5gXS0xOkdbbF0pLGQuaGFzKEkpfHxkLnNldChJLG5ldyBTZXQpLGQuZ2V0KEkpLmFkZChy'@;
put 'ZSl9cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChBcnJheS5mcm9tKGQuZW50cmllcygpKS5maWx0ZXIodj0+e2xldFssTV09djtyZXR1cm4gMT09PU0uc2l6ZX0pLmZsYXRNYXAodj0+e2xldFssTV09djtyZXR1cm4gQXJyYXkuZnJvbShNKX0pKSl9ZnVuY3Rpb24gT21lKGMpe2ZvcihsZXQg'@;
put 'bD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wrYy5jb2xzcGFuO2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4LmhhcyhsKXx8dGhpcy5tZXJnZWRDZWxsc01hdHJpeC5zZXQobCxuZXcgTWFwKSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChs'@;
put 'KS5zZXQoYSxjKX1mdW5jdGlvbiBzcHQoYyl7Zm9yKGxldCBsPWMucm93O2w8Yy5yb3crYy5yb3dzcGFuO2wrKylmb3IobGV0IGE9Yy5jb2w7YTxjLmNvbCtjLmNvbHNwYW47YSsrKXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLmRlbGV0ZShhKX1jb25zdCBvcHQ9a0g7ZnVuY3Rpb24g'@;
put 'ZWVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBscHQoYyl7dmFyIGw9ZnVuY3Rpb24gY3B0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi'@;
put 'KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s'@;
put 'Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBkcHQ9Y2xhc3MgdXB0e2NvbnN0cnVjdG9yKGwpe2VlZSh0aGlzLCJwbHVn'@;
put 'aW4iLHZvaWQgMCksZWVlKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsdm9pZCAwKSxlZWUodGhpcywiY3VycmVudEZpbGxEYXRhIixudWxsKSx0aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbn1nZXRE'@;
put 'aXJlY3Rpb24obCxhKXtsZXQgZD1udWxsO3JldHVybiBkPWFbMF09PT1sWzBdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/ImRvd24iOmFbMl09PT1sWzJdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/InVwIjphWzFdPT09bFsxXSYmYVsyXT09PWxbMl0/InJpZ2h0IjoibGVmdCIsZH1z'@;
put 'bmFwRHJhZ0FyZWEobCxhLGQsaCl7Y29uc3QgZj1hLnNsaWNlKDApLHY9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLFtNLEksRyxyZV09bCx5ZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTE/Ry1NKzE6cmUtSSsxLEJlPXYtTWF0aC5mbG9vcih2L3llKSp5ZSxHZT10aGlzLmdldEZh'@;
put 'cnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihHZSlpZigiZG93biI9PT1kKXtjb25zdCBzdD1HZS5yb3crR2Uucm93c3Bhbi1NLUJlO2ZbMl0rc3Q+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1CZTpmWzJdKz1CZT9zdDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0'@;
put 'IHN0PUdlLmNvbCtHZS5jb2xzcGFuLUktQmU7ZlszXStzdD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPUJlOmZbM10rPUJlP3N0OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3Qgc3Q9Ry1CZS1HZS5yb3crMTtmWzBdK3N0PDA/ZlswXSs9QmU6ZlswXS09QmU/c3Q6MH1lbHNl'@;
put 'IGlmKCJsZWZ0Ij09PWQpe2NvbnN0IHN0PXJlLUJlLUdlLmNvbCsxO2ZbMV0rc3Q8MD9mWzFdKz1CZTpmWzFdLT1CZT9zdDowfXJldHVybiB0aGlzLnVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUoe2Jhc2VBcmVhOmwsZHJhZ0RpcmVjdGlvbjpkLGZvdW5kTWVyZ2VkQ2VsbHM6aCxmaWxsU2l6ZTp2'@;
put 'LGRyYWdBcmVhOmYsY3ljbGVMZW5ndGg6eWV9KSxmfXVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUobCl7dGhpcy5jdXJyZW50RmlsbERhdGF8fCh0aGlzLmN1cnJlbnRGaWxsRGF0YT17fSksd3UodGhpcy5jdXJyZW50RmlsbERhdGEsbCl9Z2V0QXV0b2ZpbGxTaXplKGwsYSxkKXtjb25zdFtoLGYs'@;
put 'dixNXT1sLFtJLEcscmUsdWVdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybiBoLUk7Y2FzZSJkb3duIjpyZXR1cm4gcmUtdjtjYXNlImxlZnQiOnJldHVybiBmLUc7Y2FzZSJyaWdodCI6cmV0dXJuIHVlLU07ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2NvbnN0'@;
put 'W2gsZix2LE1dPWwsW0ksRyxyZSx1ZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuW0ksRyxoLTEsTV07Y2FzZSJkb3duIjp7Y29uc3QgeWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHJlLE0pO3JldHVyblt2KzEsZixyZSsoeWU/eWUucm93c3Bhbi0xOjApLE1dfWNhc2Ui'@;
put 'bGVmdCI6cmV0dXJuW0ksRyx2LGYtMV07Y2FzZSJyaWdodCI6e2NvbnN0IHllPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChyZSxNKTtyZXR1cm5baCxNKyh5ZT95ZS5jb2xzcGFuLTE6MCkscmUsdWVdfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihs'@;
put 'LGEsZCxoKXtjb25zdFtmLHYsTSxJXT1sLEc9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xLHJlPUc/TTpJLHVlPUc/Zjp2LHllPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxFZT1HP00tZisxOkktdisxLEdlPXllLU1hdGguZmxvb3IoeWUvRWUpKkVlO2xldCBzdD1udWxsLHB0PW51'@;
put 'bGwsZHQ9bnVsbDtzd2l0Y2goZCl7Y2FzZSJ1cCI6c3Q9ImluY2x1ZGVzVmVydGljYWxseSIsZHQ9cmUtR2UrMTticmVhaztjYXNlImxlZnQiOnN0PSJpbmNsdWRlc0hvcml6b250YWxseSIsZHQ9cmUtR2UrMTticmVhaztjYXNlImRvd24iOnN0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLGR0PXVl'@;
put 'K0dlLTE7YnJlYWs7Y2FzZSJyaWdodCI6c3Q9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixkdD11ZStHZS0xfXJldHVybiBLbihoLHF0PT57cXRbc3RdKGR0KSYmcXQuaXNGYXJ0aGVyKHB0LGQpJiYocHQ9cXQpfSkscHR9cmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGwpe2lmKCF0aGlzLmN1'@;
put 'cnJlbnRGaWxsRGF0YSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFJhbmdlRnJvbUNoYW5nZXMobCksZD10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGg9dGhpcy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbixmPShHLHJlKT0+e3N3aXRjaChoKXtjYXNlInVwIjpy'@;
put 'ZXR1cm4gRy5yb3ctcmU+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gRy5yb3crRy5yb3dzcGFuLTErcmU8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0dXJuIEcuY29sLXJlPj1hLmZyb20uY29sdW1uO2Nhc2UicmlnaHQiOnJldHVybiBHLmNvbCtHLmNvbHNwYW4tMStyZTw9YS50by5j'@;
put 'b2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCB2PTAsTT1udWxsLEk9MTtkb3tmb3IobGV0IEc9MDtHPGQubGVuZ3RoO0crPTEpe2lmKE09ZFtHXSx2PUkqdGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsZihNLHYpKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5t'@;
put 'ZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3ctdixyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyt2LHJvd3NwYW46'@;
put 'TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbC12LGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJl'@;
put 'YWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCt2LGNvbHNwYW46TS5jb2xzcGFufSwhMCl9Rz09PWQubGVuZ3RoLTEmJihJKz0xKX19d2hpbGUoZihNLHYpKTt0aGlzLmN1cnJl'@;
put 'bnRGaWxsRGF0YT1udWxsLHRoaXMucGx1Z2luLmhvdC5yZW5kZXIoKSxkLmxlbmd0aD4wJiZ0aGlzLnBsdWdpbi5pZkNocm9tZUZvcmNlUmVwYWludCgpfWdldFJhbmdlRnJvbUNoYW5nZXMobCl7Y29uc3QgYT17bWluOm51bGwsbWF4Om51bGx9LGQ9e21pbjpudWxsLG1heDpudWxsfTtyZXR1'@;
put 'cm4gS24obCxoPT57Y29uc3QgZj1oWzBdLHY9dGhpcy5wbHVnaW4uaG90LnByb3BUb0NvbChoWzFdKTsobnVsbD09PWEubWlufHxmPGEubWluKSYmKGEubWluPWYpLChudWxsPT09YS5tYXh8fGY+YS5tYXgpJiYoYS5tYXg9ZiksKG51bGw9PT1kLm1pbnx8djxkLm1pbikmJihkLm1pbj12KSwo'@;
put 'bnVsbD09PWQubWF4fHx2PmQubWF4KSYmKGQubWF4PXYpfSkse2Zyb206e3JvdzphLm1pbixjb2x1bW46ZC5taW59LHRvOntyb3c6YS5tYXgsY29sdW1uOmQubWF4fX19ZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RHJhZ0FyZWEobCxhLGQpLFtm'@;
put 'LHYsTSxJXT1oLEc9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdikscmU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sSSksdWU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UoRyxHLHJlKTtpZigwPT09dGhpcy5tZXJnZWRDZWxsc0NvbGxl'@;
put 'Y3Rpb24uZ2V0V2l0aGluUmFuZ2UodWUsITApLmxlbmd0aClyZXR1cm4hMTtjb25zdCBFZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh1ZSwhMSk7cmV0dXJuIDA9PT1FZS5sZW5ndGh8fCgidXAiPT09ZHx8ImRvd24iPT09ZD8hRWUuZXZlcnkoQmU9PntsZXR7'@;
put 'Y29sc3BhbjpHZX09QmU7cmV0dXJuIEdlPT09dWUuZ2V0V2lkdGgoKX0pOiFFZS5ldmVyeShCZT0+e2xldHtyb3dzcGFuOkdlfT1CZTtyZXR1cm4gR2U9PT11ZS5nZXRIZWlnaHQoKX0pKX19O2Z1bmN0aW9uIHRlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaHB0KGMpe3ZhciBsPWZ1bmN0'@;
put 'aW9uIGZwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgZ3B0PWNsYXNzIHBwdHtjb25zdHJ1Y3RvcihsKXt0ZWUodGhpcywicGx1Z2luIix2b2lkIDApLHRlZSh0aGlzLCJob3QiLHZvaWQgMCksdGVlKHRoaXMsImZ1'@;
put 'bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lIiwiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwiKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90fWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBmPU1hdGgubWluKGRbMF0sZFsyXSksdj1NYXRoLm1p'@;
put 'bihkWzFdLGRbM10pLE09TWF0aC5tYXgoZFswXSxkWzJdKSxJPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09aHx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKSlyZXR1cm47Y29uc3QgcmU9dGhpcy5wbHVn'@;
put 'aW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFyZSlyZXR1cm47Y29uc3QgdWU9cmUuZ2V0TGFzdFJvdygpLHllPXJlLmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9cmUucm93JiZ2PD1yZS5jb2wmJk0+PXVlJiZJPj15ZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRD'@;
put 'ZWxsQ2xhc3NOYW1lfS0ke2h9YDp0aGlzLmlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChyZSx0aGlzLnBsdWdpbi5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpKT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWA6dm9pZCAwfWlzTWVyZ2VDZWxsRnVsbHlT'@;
put 'ZWxlY3RlZChsLGEpe2NvbnN0IGQ9W107aWYoIWF8fCFsKXJldHVybiExO2ZvcihsZXQgaD0wO2g8bC5yb3dzcGFuO2grPTEpZm9yKGxldCBmPTA7ZjxsLmNvbHNwYW47Zis9MSlkLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3craCxsLmNvbCtmKSk7Zm9yKGxldCBoPTA7'@;
put 'aDxkLmxlbmd0aDtoKz0xKXtjb25zdCBmPVtdO2ZvcihsZXQgdj0wO3Y8YS5sZW5ndGg7dis9MSlmW3ZdPWFbdl0uaW5jbHVkZXMoZFtoXSk7aWYoIWYuaW5jbHVkZXMoITApKXJldHVybiExfXJldHVybiEwfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl7Y29uc3Qg'@;
put 'bD1bXTtmb3IobGV0IGE9MDthPD03O2ErPTEpbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7YX1gKTtyZXR1cm4gbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYCksbH19O2Z1bmN0aW9uIGdB'@;
put 'KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2cHQoYyl7dmFyIGw9ZnVuY3Rpb24geXB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtp'@;
put 'Zigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09'@;
put 'dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBQbWV7Y29uc3RydWN0b3IobCl7Z0EodGhpcywiZGF0YSIsdm9pZCAwKSxnQSh0'@;
put 'aGlzLCJuZXh0IixudWxsKSxnQSh0aGlzLCJwcmV2IixudWxsKSx0aGlzLmRhdGE9bH19Y29uc3QgSUg9Y2xhc3MgYnB0e2NvbnN0cnVjdG9yKCl7Z0EodGhpcywiZmlyc3QiLG51bGwpLGdBKHRoaXMsImxhc3QiLG51bGwpfXB1c2gobCl7Y29uc3QgYT1uZXcgUG1lKGwpO2lmKG51bGw9PT10'@;
put 'aGlzLmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5sYXN0O3RoaXMubGFzdD1hLGEucHJldj1kLGQubmV4dD1hfXJldHVybiBhfXVuc2hpZnQobCl7Y29uc3QgYT1uZXcgUG1lKGwpO2lmKG51bGw9PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlz'@;
put 'Lmxhc3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5maXJzdDt0aGlzLmZpcnN0PWEsYS5uZXh0PWQsZC5wcmV2PWF9fWlub3JkZXIobCl7bGV0IGE9dGhpcy5maXJzdDtmb3IoO2E7KXtjb25zdCBkPWwoYSk7aWYoYT09PXRoaXMubGFzdHx8ITA9PT1kKWJyZWFrO2E9YS5uZXh0fX1yZW1vdmUobCl7'@;
put 'aWYobnVsbD09PXRoaXMuZmlyc3QpcmV0dXJuITE7bGV0IGQsaCxhPXRoaXMuZmlyc3Q7Zm9yKDthOyl7aWYoYS5kYXRhPT09bClyZXR1cm4gZD1hLm5leHQsaD1hLnByZXYsZCYmKGQucHJldj1oKSxoJiYoaC5uZXh0PWQpLGE9PT10aGlzLmZpcnN0JiYodGhpcy5maXJzdD1kKSxhPT09dGhp'@;
put 'cy5sYXN0JiYodGhpcy5sYXN0PWgpLCEwO2E9YS5uZXh0fXJldHVybiExfWhhc0N5Y2xlKCl7bGV0IGw9dGhpcy5maXJzdCxhPXRoaXMuZmlyc3Q7Zm9yKDs7KXtpZihudWxsPT09bHx8KGw9bC5uZXh0LG51bGw9PT1sKSlyZXR1cm4hMTtpZihsPWwubmV4dCxhPWEubmV4dCxsPT09YSlyZXR1'@;
put 'cm4hMH19cG9wKCl7aWYobnVsbD09PXRoaXMubGFzdClyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMubGFzdDtyZXR1cm4gdGhpcy5sYXN0PXRoaXMubGFzdC5wcmV2LGx9c2hpZnQoKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuZmlyc3Q7cmV0dXJuIHRo'@;
put 'aXMuZmlyc3Q9dGhpcy5maXJzdC5uZXh0LGx9cmVjdXJzaXZlUmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0KXJldHVybjsoZnVuY3Rpb24gbChkLGgpe2gmJihsKGgsaC5uZXh0KSxoLm5leHQ9ZCl9KSh0aGlzLmZpcnN0LHRoaXMuZmlyc3QubmV4dCksdGhpcy5maXJzdC5uZXh0PW51bGw7Y29u'@;
put 'c3QgYT10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9dGhpcy5sYXN0LHRoaXMubGFzdD1hfXJldmVyc2UoKXtpZighdGhpcy5maXJzdHx8IXRoaXMuZmlyc3QubmV4dClyZXR1cm47bGV0IGQsbD10aGlzLmZpcnN0Lm5leHQsYT10aGlzLmZpcnN0O2Zvcig7bDspZD1sLm5leHQsbC5uZXh0PWEsYS5w'@;
put 'cmV2PWwsYT1sLGw9ZDt0aGlzLmZpcnN0Lm5leHQ9bnVsbCx0aGlzLmxhc3QucHJldj1udWxsLGQ9dGhpcy5maXJzdCx0aGlzLmZpcnN0PWEsdGhpcy5sYXN0PWR9fTtmdW5jdGlvbiBCOShjLGwsYSl7Rm1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBGbWUoYyxsKXtpZihsLmhhcyhjKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHBsKGMsbCl7cmV0dXJuIGMuZ2V0KFJIKGMsbCkpfWZ1bmN0aW9uIFdoKGMsbCxhKXtyZXR1cm4gYy5zZXQoUkgoYyxsKSxh'@;
put 'KSxhfWZ1bmN0aW9uIFJIKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIg'@;
put 'SnA9bmV3IFdlYWtNYXAsUXA9bmV3IFdlYWtNYXAsZTQ9bmV3IFdlYWtNYXAsdDQ9bmV3IFdlYWtNYXAsbmVlPW5ldyBXZWFrTWFwLExIPW5ldyBXZWFrTWFwLE9IPW5ldyBXZWFrTWFwLHJlZT1uZXcgV2Vha1NldDtjbGFzcyB3cHR7Y29uc3RydWN0b3IobCl7bGV0e21lcmdlZENlbGxzR2V0'@;
put 'dGVyOmEscm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1sOyhmdW5jdGlvbiBfcHQoYyxsKXtGbWUoYyxsKSxsLmFkZChjKX0pKHRoaXMscmVlKSxCOSh0aGlzLEpwLG5ldyBJSCksQjkodGhpcyxRcCxuZXcgSUgpLEI5KHRoaXMsZTQsbnVsbCksQjkodGhpcyx0NCxudWxs'@;
put 'KSxCOSh0aGlzLG5lZSxudWxsKSxCOSh0aGlzLExILG51bGwpLEI5KHRoaXMsT0gsbnVsbCksV2gobmVlLHRoaXMsYSksV2goTEgsdGhpcyxkKSxXaChPSCx0aGlzLGgpfWdldEN1cnJlbnRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gcGwodDQsdGhpcykuZGF0YX1nZXRGaXJzdFZlcnRpY2FsTm9k'@;
put 'ZSgpe3JldHVybiBwbChRcCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gcGwodDQsdGhpcykubmV4dC5kYXRhfWdldFByZXZWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gcGwodDQsdGhpcykucHJldi5kYXRhfWdldEN1cnJlbnRIb3Jpem9udGFsTm9kZSgpe3Jl'@;
put 'dHVybiBwbChlNCx0aGlzKS5kYXRhfWdldEZpcnN0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gcGwoSnAsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gcGwoZTQsdGhpcykubmV4dC5kYXRhfWdldFByZXZIb3Jpem9udGFsTm9kZSgpe3JldHVybiBwbChl'@;
put 'NCx0aGlzKS5wcmV2LmRhdGF9c2V0UHJldk5vZGVBc0FjdGl2ZSgpe1doKHQ0LHRoaXMscGwodDQsdGhpcykucHJldiksV2goZTQsdGhpcyxwbChlNCx0aGlzKS5wcmV2KX1zZXROZXh0Tm9kZUFzQWN0aXZlKCl7V2godDQsdGhpcyxwbCh0NCx0aGlzKS5uZXh0KSxXaChlNCx0aGlzLHBsKGU0'@;
put 'LHRoaXMpLm5leHQpfWJ1aWxkRm9jdXNPcmRlcihsKXtjb25zdCBhPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksaD1uZXcgV2Vha1NldDtXaChKcCx0aGlzLG5ldyBJSCk7Zm9yKGxldCB2PWEucm93O3Y8PWQucm93O3YrKylpZighcGwoTEgsdGhpcyku'@;
put 'aXNIaWRkZW4odikpZm9yKGxldCBNPWEuY29sO008PWQuY29sO00rKyl7aWYocGwoT0gsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7Y29uc3QgST1SSChyZWUsdGhpcyxIbWUpLmNhbGwodGhpcyxsLHBsKEpwLHRoaXMpLGgsdixNKTtJJiZXaChlNCx0aGlzLEkpfXBsKEpwLHRoaXMpLmZp'@;
put 'cnN0JiYocGwoSnAsdGhpcykuZmlyc3QucHJldj1wbChKcCx0aGlzKS5sYXN0LHBsKEpwLHRoaXMpLmxhc3QubmV4dD1wbChKcCx0aGlzKS5maXJzdCk7Y29uc3QgZj1uZXcgV2Vha1NldDtXaChRcCx0aGlzLG5ldyBJSCk7Zm9yKGxldCB2PWEuY29sO3Y8PWQuY29sO3YrKylpZighcGwoT0gs'@;
put 'dGhpcykuaXNIaWRkZW4odikpZm9yKGxldCBNPWEucm93O008PWQucm93O00rKyl7aWYocGwoTEgsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7Y29uc3QgST1SSChyZWUsdGhpcyxIbWUpLmNhbGwodGhpcyxsLHBsKFFwLHRoaXMpLGYsTSx2KTtJJiZXaCh0NCx0aGlzLEkpfXBsKFFwLHRo'@;
put 'aXMpLmZpcnN0JiYocGwoUXAsdGhpcykuZmlyc3QucHJldj1wbChRcCx0aGlzKS5sYXN0LHBsKFFwLHRoaXMpLmxhc3QubmV4dD1wbChRcCx0aGlzKS5maXJzdCl9c2V0QWN0aXZlTm9kZShsLGEpe3JldHVybiBwbChKcCx0aGlzKS5pbm9yZGVyKGQ9Pntjb25zdHtyb3dTdGFydDpoLHJvd0Vu'@;
put 'ZDpmLGNvbFN0YXJ0OnYsY29sRW5kOk19PWQuZGF0YTtpZihsPj1oJiZsPD1mJiZhPj12JiZhPD1NKXJldHVybiBXaChlNCx0aGlzLGQpLCExfSkscGwoUXAsdGhpcykuaW5vcmRlcihkPT57Y29uc3R7cm93U3RhcnQ6aCxyb3dFbmQ6Zixjb2xTdGFydDp2LGNvbEVuZDpNfT1kLmRhdGE7aWYo'@;
put 'bD49aCYmbDw9ZiYmYT49diYmYTw9TSlyZXR1cm4gV2godDQsdGhpcyxkKSwhMX0pLHRoaXN9fWZ1bmN0aW9uIEhtZShjLGwsYSxkLGgpe2NvbnN0IGY9Yy5nZXRUb3BTdGFydENvcm5lcigpLHY9Yy5nZXRCb3R0b21FbmRDb3JuZXIoKSxNPWMuaGlnaGxpZ2h0LmNsb25lKCkubm9ybWFsaXpl'@;
put 'KCksST1wbChuZWUsdGhpcykuY2FsbCh0aGlzLGQsaCk7aWYoSSYmYS5oYXMoSSkpcmV0dXJuIG51bGw7Y29uc3QgRz17Y29sU3RhcnQ6aCxjb2xFbmQ6aCxyb3dTdGFydDpkLHJvd0VuZDpkfTtpZihJKXtpZihhLmFkZChJKSxJLnJvdzxmLnJvd3x8SS5yb3crSS5yb3dzcGFuLTE+di5yb3d8'@;
put 'fEkuY29sPGYuY29sfHxJLmNvbCtJLmNvbHNwYW4tMT52LmNvbClyZXR1cm4gbnVsbDtHLmNvbFN0YXJ0PUkuY29sLEcuY29sRW5kPUkuY29sK0kuY29sc3Bhbi0xLEcucm93U3RhcnQ9SS5yb3csRy5yb3dFbmQ9SS5yb3crSS5yb3dzcGFuLTF9Y29uc3QgcmU9bC5wdXNoKEcpO3JldHVybiBk'@;
put 'PT09TS5yb3cmJmg9PT1NLmNvbHx8SSYmTS5yb3c+PUkucm93JiZNLnJvdzw9SS5yb3crSS5yb3dzcGFuLTEmJk0uY29sPj1JLmNvbCYmTS5jb2w8PUkuY29sK0kuY29sc3Bhbi0xP3JlOm51bGx9ZnVuY3Rpb24gTm1lKGMsbCxhKXtjb25zdHtyb3dJbmRleE1hcHBlcjpkLHN0eWxlc0hhbmRs'@;
put 'ZXI6aH09YyxmPWguZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCB2PTA7Zm9yKGxldCBJPWw7STxsK2E7SSsrKWlmKCFkLmlzSGlkZGVuKEkpKXt2YXIgTTt2Kz1udWxsIT09KE09Yy5nZXRSb3dIZWlnaHQoSSkpJiZ2b2lkIDAhPT1NP006ZiwwPT09SSYmIWguaXNDbGFzc2ljVGhlbWUoKSYm'@;
put 'KHYrPTEpfXJldHVybiB2fWZ1bmN0aW9uIFBIKGMsbCxhKXtWbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFZtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2Jq'@;
put 'ZWN0Iil9ZnVuY3Rpb24gaWVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNcHQoYyl7dmFyIGw9ZnVuY3Rpb24geHB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs'@;
put 'KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci'@;
put 'KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBtQShjLGwsYSl7cmV0dXJuIGMuc2V0KEVs'@;
put 'KGMsbCksYSksYX1mdW5jdGlvbiBlYyhjLGwpe3JldHVybiBjLmdldChFbChjLGwpKX1mdW5jdGlvbiBFbChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0'@;
put 'ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxNYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksTWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJl'@;
put 'Zm9yZVVubWVyZ2VDZWxscyIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVubWVyZ2VDZWxscyIpO2NvbnN0IGFlZT0ibWVyZ2VDZWxscyIsQm1lPWFlZTt2YXIgYWY9bmV3IFdlYWtNYXAsc2Y9bmV3IFdlYWtNYXAsbjQ9bmV3IFdlYWtNYXAsam1lPW5ldyBXZWFrTWFwLEhs'@;
put 'PW5ldyBXZWFrU2V0O2NsYXNzIFRwdCBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBTcHQoYyxsKXtWbWUoYyxsKSxsLmFkZChjKX0odGhpcyxIbCksaWVlKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsbnVsbCksaWVlKHRoaXMsImF1'@;
put 'dG9maWxsQ2FsY3VsYXRpb25zIixudWxsKSxpZWUodGhpcywic2VsZWN0aW9uQ2FsY3VsYXRpb25zIixudWxsKSxQSCh0aGlzLGFmLG51bGwpLFBIKHRoaXMsc2Yse3JvdzowLGNvbDowfSksUEgodGhpcyxuNCxuZXcgd3B0KHttZXJnZWRDZWxsc0dldHRlcjoobCxhKT0+dGhpcy5tZXJnZWRD'@;
put 'ZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSkscm93SW5kZXhNYXBwZXI6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXJ9KSksUEgodGhpcyxqbWUsZnVuY3Rpb24gQ3B0KGMpe2NvbnN0e2hvdDpsfT1jLHtyb3dJbmRleE1h'@;
put 'cHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWwsaD1uZXcgTWFwO3JldHVybntiZWZvcmU6ZnVuY3Rpb24gZigpe30sYWZ0ZXI6ZnVuY3Rpb24gdihNLEksRyl7Y29uc3QgcmU9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KEksRyk7aWYoIVhzKHJlKSlyZXR1cm4gTS5yZW1vdmVBdHRy'@;
put 'aWJ1dGUoInJvd3NwYW4iKSxNLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLHNfKCkmJmguaGFzKEkpJiYhbC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMmJihNLnN0eWxlLmhlaWdodD1gJHtoLmdldChJKX1weGAsaC5kZWxldGUoSSkpLHZvaWQoTS5zdHlsZS5kaXNwbGF5PSIiKTtjb25z'@;
put 'dHtyb3c6dWUsY29sOnllLGNvbHNwYW46RWUscm93c3BhbjpCZX09cmUsW0dlLHN0XT1jLnRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUodWUsQmUseWUsRWUpLHB0PWMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKTtpZihzXygpJiYwPT09eWUmJiFsLmdldFNldHRpbmdzKCkucm93'@;
put 'SGVhZGVycyl7Y29uc3QgcW49Tm1lKGwsdWUsQmUpO2guc2V0KEkscW4vQmUpfWNvbnN0IG1uPUdlLWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChJKSsxLHduPXN0LWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChHKSsxO2xldCBobj1hLmdldE5lYXJlc3ROb3RIaWRkZW5J'@;
put 'bmRleCh1ZSwxKSxNbj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh5ZSwxKTtpZihwdCl7Y29uc3QgcW49bC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCk7WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHFuKXx8KGhuPU1hdGgubWF4KGhuLGwuZ2V0Rmly'@;
put 'c3RSZW5kZXJlZFZpc2libGVSb3coKSkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHFuKXx8KE1uPU1hdGgubWF4KE1uLGwuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkpfWNv'@;
put 'bnN0IE1yPU1hdGgubWluKEJlLG1uKSxrcj1NYXRoLm1pbihFZSx3bik7aG49PT1JJiZNbj09PUc/KE0uc2V0QXR0cmlidXRlKCJyb3dzcGFuIixNciksTS5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLGtyKSk6KE0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksTS5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'ImNvbHNwYW4iKSxNLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX19fSh0aGlzKSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGFlZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue1tGNGVdOiJj'@;
put 'ZWxscyIsdmlydHVhbGl6ZWQ6ITEsY2VsbHM6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVthZWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3IG9wdCh0aGlzKSx0aGlz'@;
put 'LmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyBkcHQodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IGdwdCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr'@;
put 'KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCxBcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1'@;
put 'bWVudHNbaF07cmV0dXJuIEVsKEhsLGwsRHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3Jl'@;
put 'dHVybiBFbChIbCxsLElwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEVsKEhsLGws'@;
put 'UnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCxMcHQp'@;
put 'LmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCxVbWUpLmNhbGwobCwuLi5k'@;
put 'KX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEVsKEhsLGwsVW1lKS5jYWxsKGwsLi4uZCl9KSx0aGlz'@;
put 'LmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLFBwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29r'@;
put 'KCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLEZwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNl'@;
put 'bGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCxIcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIs'@;
put 'ZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCx6bWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsZnVuY3Rpb24o'@;
put 'KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCx6bWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2'@;
put 'YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLGtwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBlYyhqbWUsbCkuYWZ0ZXIo'@;
put 'Li4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLE9wdCku'@;
put 'Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLE5wdCkuY2FsbChsLC4uLmQpfSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLFZwdCkuY2FsbChsLC4uLmQp'@;
put 'fSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLEJwdCkuY2FsbChs'@;
put 'LC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLGpwdCkuY2FsbChsLC4uLmQpfSksdGhp'@;
put 'cy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCx6cHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJS'@;
put 'ZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEVsKEhsLGwsVXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLFpwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJn'@;
put 'dW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRWwoSGwsbCxXcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcg'@;
put 'QXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEVsKEhsLGwsWXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto'@;
put 'PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFbChIbCxsLEdwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1h'@;
put 'cmd1bWVudHNbaF07cmV0dXJuIEVsKEhsLGwsJHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1l'@;
put 'bnRzW2hdO3JldHVybiBFbChIbCxsLEtwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVCZWdpbkVkaXRpbmciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJu'@;
put 'IEVsKEhsLGwsWHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEVs'@;
put 'KEhsLGwscXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGEsZCk9PntpZigiTWVyZ2VDZWxscyI9PT1kKXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7'@;
put 'dGhpcy5jbGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21T'@;
put 'ZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIUMkKCkpcmV0dXJuO2NvbnN0IGw9W107bGV0IGE9W107dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChkPT57Y29uc3R7cm93Omgscm93c3BhbjpmfT1k'@;
put 'O2ZvcihsZXQgdj1oKzE7djxoK2Y7disrKWEucHVzaCh2KX0pLGE9Wy4uLm5ldyBTZXQoYSldLGEuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpO3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuZ2V0'@;
put 'T3ZlcmxheXMoITApLm1hcChmPT4ibWFzdGVyIj09PWY/Lm5hbWU/ZjpmLmNsb25lLnd0VGFibGUpLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5nZXRSb3coaCk7diYmKHYuc3R5bGUuYmFja2dyb3VuZD1URSh2LCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwiLCAwLjk5KSIpLGwucHVz'@;
put 'aCh2KSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntsLmZvckVhY2goZD0+e3ZhciBoO2Quc3R5bGUuYmFja2dyb3VuZD1udWxsPT09KGg9VEUoZCwiYmFja2dyb3VuZENvbG9yIikpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0sMSl9'@;
put 'dmFsaWRhdGVTZXR0aW5nKGwpe3JldHVybiEoIWx8fChxcC5jb250YWluc05lZ2F0aXZlVmFsdWVzKGwpPyhZbyhxcC5ORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKSksMSk6cXAuaXNPdXRPZkJvdW5kcyhsLHRoaXMuaG90LmNvdW50Um93cygpLHRoaXMuaG90LmNvdW50Q29scygpKT8oWW8o'@;
put 'cXAuSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpKSwxKTpxcC5pc1NpbmdsZUNlbGwobCk/KFlvKHFwLklTX1NJTkdMRV9DRUxMKGwpKSwxKTpxcC5jb250YWluc1plcm9TcGFuKGwpJiYoWW8ocXAuWkVST19TUEFOX1dBUk5JTkcobCkpLDEpKSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3MoKXtj'@;
put 'b25zdCBsPXRoaXMuZ2V0U2V0dGluZygiY2VsbHMiKS5maWx0ZXIoaD0+dGhpcy52YWxpZGF0ZVNldHRpbmcoaCkpLGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGwpLGQ9W107YS5mb3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixy'@;
put 'b3dzcGFuOk0sY29sc3BhbjpJfT1oLEc9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxyZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmK00tMSx2K0ktMSksdWU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShHLEcscmUpO3RoaXMubWVyZ2VSYW5nZSh1ZSwhMCwhMCk7Zm9y'@;
put 'KGxldCB5ZT1mO3llPGYrTTt5ZSsrKWZvcihsZXQgRWU9djtFZTx2K0k7RWUrKykoeWUhPT1mfHxFZSE9PXYpJiZkLnB1c2goW3llLEVlLG51bGxdKX0pLDAhPT1kLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChkLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKX1jbGVhckNv'@;
put 'bGxlY3Rpb25zKCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uY2xlYXIoKX1jYW5NZXJnZVJhbmdlKGwpe3JldHVybiEhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfHx0aGlzLnZhbGlkYXRlU2V0dGluZyhsKX1tZXJnZVNlbGVj'@;
put 'dGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlzLmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29u'@;
put 'c3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5tZXJnZVJhbmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfXVubWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy'@;
put 'Z3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVy'@;
put 'Z2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxmPWwu'@;
put 'Z2V0Qm90dG9tRW5kQ29ybmVyKCksdj17cm93Omgucm93LGNvbDpoLmNvbCxyb3dzcGFuOmYucm93LWgucm93KzEsY29sc3BhbjpmLmNvbC1oLmNvbCsxfSxNPVtdO2xldCBJPW51bGw7cmV0dXJuISF0aGlzLmNhbk1lcmdlUmFuZ2UodixhKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVN'@;
put 'ZXJnZUNlbGxzIixsLGEpLEthKDAsdi5yb3dzcGFuLTEscmU9PntLYSgwLHYuY29sc3Bhbi0xLHVlPT57bGV0IHllPW51bGw7TVtyZV18fChNW3JlXT1bXSksMD09PXJlJiYwPT09dWU/eWU9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYucm93'@;
put 'KSx0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYuY29sKSk6dGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3crcmUsdi5jb2wrdWUsImhpZGRlbiIsITApLE1bcmVdW3VlXT15ZX0pfSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3csdi5jb2wsInNwYW5uZWQiLCEwKSwhdGhpcy5tZXJnZWRD'@;
put 'ZWxsc0NvbGxlY3Rpb24uYWRkKHYsYSl8fChkP0k9W3Yucm93LHYuY29sLE1dOnRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHYucm93LHYuY29sLE0sdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWUpLGF8fHRoaXMuaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29r'@;
put 'cygiYWZ0ZXJNZXJnZUNlbGxzIixsLHYsYSksSSkpfXVubWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UobCk7MCE9'@;
put 'PWQubGVuZ3RoJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsbCxhKSxLbihkLGg9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaC5yb3csaC5jb2wpLEthKDAsaC5yb3dzcGFuLTEsZj0+e0thKDAsaC5jb2xzcGFuLTEsdj0+e3RoaXMuaG90LnJl'@;
put 'bW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrdiwiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdyxoLmNvbCwic3Bhbm5lZCIpfSksdGhpcy5ob3QucnVuSG9va3MoImFm'@;
put 'dGVyVW5tZXJnZUNlbGxzIixsLGEpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShsKXtjb25zdHtmcm9tOmEsdG86ZH09bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEucm93LGEuY29sKTtoLnJvdz09PWEucm93JiZoLmNvbD09'@;
put 'PWEuY29sJiZoLnJvdytoLnJvd3NwYW4tMT09PWQucm93JiZoLmNvbCtoLmNvbHNwYW4tMT09PWQuY29sP3RoaXMudW5tZXJnZVJhbmdlKGwpOnRoaXMubWVyZ2VTZWxlY3Rpb24obCl9bWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLHY9dGhp'@;
put 'cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXVubWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'ZCxoKTt0aGlzLnVubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZix2KSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIm0iXV0sY2Fs'@;
put 'bGJhY2s6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7ZCYmIWQuaXNTaW5nbGVIZWFkZXIoKSYmKHRoaXMudG9nZ2xlTWVyZ2UoZCksdGhpcy5ob3QucmVuZGVyKCkpfSxydW5Pbmx5SWY6ZD0+IWQuYWx0S2V5LGdyb3VwOkJtZX0pfXVucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChCbWUpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVu'@;
put 'ZGVyYWJsZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKFhzKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRl'@;
put 'eCh2LnJvdywxKSk7aWYoTTxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJl'@;
put 'bmRlcmFibGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYoWHModikpe2NvbnN0IEk9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4'@;
put 'KHYucm93K3Yucm93c3Bhbi0xLC0xKSk7aWYoST5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9SSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5n'@;
put 'ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKFhzKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5l'@;
put 'YXJlc3ROb3RIaWRkZW5JbmRleCh2LmNvbCwxKSk7aWYoTTxsLnN0YXJ0Q29sdW1uKXJldHVybiBsLnN0YXJ0Q29sdW1uPU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1'@;
put 'bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYoWHModikpe2NvbnN0IEk9ZC5nZXRSZW5kZXJhYmxlRnJvbVZp'@;
put 'c3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sK3YuY29sc3Bhbi0xLC0xKSk7aWYoST5sLmVuZENvbHVtbilyZXR1cm4gbC5lbmRDb2x1bW49SSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX19fXRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRl'@;
put 'cmFibGUobCxhLGQsaCl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdDtsZXQgTSxJO3JldHVybiBNPTA9PT1hP2YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsMSk6Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCthLTEsLTEpLEk9MD09'@;
put 'PWg/di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTp2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkK2gtMSwtMSksW2w+PTA/Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0pOmwsZD49MD92LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSSk6ZF19fWZ1bmN0aW9u'@;
put 'IEFwdCgpe3RoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MoKSx0aGlzLmhvdC5yZW5kZXIoKX1mdW5jdGlvbiBrcHQoYyl7aWYoYyl7Y29uc3QgbD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCksaD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7Zis9MSlpZihkLnJvdz09PWxbZl0ucm93JiZkLmNvbD09PWxbZl0uY29sJiZoLnJvdz09PWxbZl0ucm93K2xbZl0ucm93c3Bhbi0xJiZoLmNvbD09PWxbZl0uY29sK2xbZl0uY29s'@;
put 'c3Bhbi0xKXJldHVybiExfXJldHVybiBjfWZ1bmN0aW9uIERwdChjKXtlYyhzZix0aGlzKS5yb3c9Yy5yb3csZWMoc2YsdGhpcykuY29sPWMuY29sfWZ1bmN0aW9uIElwdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDphfT1sLHtjb2x1bW5J'@;
put 'bmRleE1hcHBlcjpkLHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O2VjKGFmLHRoaXMpJiYobnVsbCE9PWguZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChlYyhhZix0aGlzKS5yb3cpJiYoYS5yb3c9ZWMoYWYsdGhpcykucm93KSxudWxsIT09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3Vh'@;
put 'bEluZGV4KGVjKGFmLHRoaXMpLmNvbCkmJihhLmNvbD1lYyhhZix0aGlzKS5jb2wpLG1BKGFmLHRoaXMsbnVsbCkpO2NvbnN0IGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEucm93LGEuY29sKTtpZighZilyZXR1cm47Y29uc3Qgdj1mLmNvbCxNPWYuY29sK2YuY29sc3Bhbi0x'@;
put 'O2lmKGMuY29sPDApe2NvbnN0IHVlPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT92LTE6TSwtMSk7Yy5jb2w9bnVsbD09PXVlPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsYS5jb2wpOi1NYXRoLm1heCh0aGlzLmhv'@;
put 'dC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKHVlLGEuY29sKS0xLDEpfWVsc2UgaWYoYy5jb2w+MCl7Y29uc3QgdWU9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5jb2w+PXYmJmEuY29sPD1NP00rMTp2LDEpO2MuY29sPW51bGw9PT11ZT90aGlzLmhvdC52aWV3LmNv'@;
put 'dW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGEuY29sLHRoaXMuaG90LmNvdW50Q29scygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGEuY29sLHVlKS0xLDEpfWNvbnN0IEk9Zi5yb3csRz1mLnJvdytmLnJvd3NwYW4tMTtpZihjLnJv'@;
put 'dzwwKXtjb25zdCB1ZT1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdz49SSYmYS5yb3c8PUc/SS0xOkcsLTEpO2Mucm93PW51bGw9PT11ZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGEucm93KTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3Vu'@;
put 'dFJlbmRlcmFibGVSb3dzSW5SYW5nZSh1ZSxhLnJvdyktMSwxKX1lbHNlIGlmKGMucm93PjApe2NvbnN0IHVlPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEucm93Pj1JJiZhLnJvdzw9Rz9HKzE6SSwxKTtjLnJvdz1udWxsPT09dWU/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVS'@;
put 'b3dzSW5SYW5nZShhLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShhLnJvdyx1ZSktMSwxKX19ZnVuY3Rpb24gUnB0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWwu'@;
put 'Y2xvbmUoKSx7dG86ZH09bCx7Y29sdW1uSW5kZXhNYXBwZXI6aCxyb3dJbmRleE1hcHBlcjpmfT10aGlzLmhvdCx2PShNLEkpPT57YS5leHBhbmQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTSxJKSk7Zm9yKGxldCBHPTA7Rzx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRD'@;
put 'ZWxscy5sZW5ndGg7Rys9MSlhLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbR10uZ2V0UmFuZ2UoKSl9O2lmKGMuY29sPDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsZC5jb2wp'@;
put 'K2MuY29sO3YoZC5yb3csTSksIkUtVyI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIkUtVyI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCk7Y29uc3QgST1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwh'@;
put 'PT1JJiYoYy5jb2w9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoSSxkLmNvbCktMSwxKSl9ZWxzZSBpZihjLmNvbD4wKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxkLmNvbCkrYy5j'@;
put 'b2w7dihkLnJvdyxNKSwiVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiVy1FIj09PWEuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTT1hLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCk7Y29uc3QgST1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09'@;
put 'SSYmKGMuY29sPU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoZC5jb2wsSSktMSwxKSl9aWYoYy5yb3c8MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0VG9wTW9zdFJvd0luZGV4KGwsZC5yb3cpK2Mucm93O3YoTSxkLmNv'@;
put 'bCksIlMtTiI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJTLU4iPT09YS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYoTT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93KTtjb25zdCBJPWYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSk7bnVsbCE9PUkmJihjLnJvdz0tTWF0aC5t'@;
put 'YXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShJLGQucm93KS0xLDEpKX1lbHNlIGlmKGMucm93PjApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJvdHRvbU1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJOLVMiPT09'@;
put 'bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiTi1TIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyk7Y29uc3QgST1mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09SSYmKGMucm93PU1hdGgubWF4KHRoaXMu'@;
put 'aG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoZC5yb3csSSktMSwxKSl9fWZ1bmN0aW9uIExwdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0Omx9PWM7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhl'@;
put 'YWRlcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpcmV0dXJuIHZvaWQgbUEoYWYsdGhpcyxsLmNsb25lKCkpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdl'@;
put 'KHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u'@;
put 'Lm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwucm93LGwuY29sKTttQShhZix0aGlzLGwuY2xvbmUoKSksYSYmbC5hc3NpZ24oYSl9ZnVuY3Rpb24gem1lKGMsbCxhLGQpe2lmKGM8MHx8bDwwKXJldHVybjtjb25z'@;
put 'dCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChjLGwpO2lmKCFoKXJldHVybjtjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpJfT1oLEc9ZixyZT12LHVlPWYrSS0xLHllPXYrTS0xO2lmKCJyZW5kZXIiPT09ZCYmdGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXpl'@;
put 'ZCIpKXtjb25zdCBFZT10aGlzLmhvdC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCksQmU9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVlKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCksR2U9WyJpbmxpbmVfc3RhcnQiLCJ0b3Bf'@;
put 'aW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRWUpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtyZXR1cm5bQW8oQmUsRyx1ZSksQW8oR2UscmUseWUpLEFvKHRoaXMuaG90LmdldExhc3RSZW5kZXJl'@;
put 'ZFZpc2libGVSb3coKSxHLHVlKSxBbyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkscmUseWUpXX1yZXR1cm5bRyxyZSx1ZSx5ZV19ZnVuY3Rpb24gT3B0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gbXB0KGMpe3JldHVybntrZXk6'@;
put 'Im1lcmdlQ2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYobCl7Y29uc3QgYT1jLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihhLnJvdz09PWxbMF0mJmEuY29sPT09bFsxXSYmYS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNv'@;
put 'bCthLmNvbHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShkWCl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh1WCl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0'@;
put 'aW9uKHRoaXMuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO2MudG9nZ2xlTWVyZ2UobCksdGhpcy5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJu'@;
put 'IWx8fHFwLmlzU2luZ2xlQ2VsbCh7cm93OmxbMF0sY29sOmxbMV0scm93c3BhbjpsWzJdLWxbMF0rMSxjb2xzcGFuOmxbM10tbFsxXSsxfSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gVW1lKCl7bUEoYWYsdGhpcyxu'@;
put 'dWxsKX1mdW5jdGlvbiBQcHQoKXtpZihlYyhhZix0aGlzKS5pc0NlbGwoKSlyZXR1cm47Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGw9Yy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpLGE9Yy5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksZD1lYyhhZix0aGlzKS5jbG9u'@;
put 'ZSgpLm5vcm1hbGl6ZSgpO2VjKG40LHRoaXMpLnNldEFjdGl2ZU5vZGUoZC5yb3csZC5jb2wpLGVjKHNmLHRoaXMpLnJvdz4wfHxlYyhzZix0aGlzKS5jb2w+MD9lYyhuNCx0aGlzKS5zZXRQcmV2Tm9kZUFzQWN0aXZlKCk6KCJFLVciPT09YSYmZWMoc2YsdGhpcykuY29sPDB8fCJTLU4iPT09'@;
put 'bCYmZWMoc2YsdGhpcykucm93PDApJiZlYyhuNCx0aGlzKS5zZXROZXh0Tm9kZUFzQWN0aXZlKCl9ZnVuY3Rpb24gRnB0KGMsbCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtjb2x1bW5JbmRleE1hcHBlcjpkLHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O2xl'@;
put 'dCBmPW51bGwsdj1udWxsO2lmKGVjKHNmLHRoaXMpLmNvbDwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6SX09ZWMobjQsdGhpcykuZ2V0UHJldkhvcml6b250YWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChJLC0xKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0s'@;
put 'LTEpfWVsc2UgaWYoZWMoc2YsdGhpcykuY29sPjApe2NvbnN0e3Jvd1N0YXJ0Ok0sY29sU3RhcnQ6SX09ZWMobjQsdGhpcykuZ2V0TmV4dEhvcml6b250YWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChJLDEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKX1l'@;
put 'bHNlIGlmKGVjKHNmLHRoaXMpLnJvdzwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6SX09ZWMobjQsdGhpcykuZ2V0UHJldlZlcnRpY2FsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoSSwtMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKX1lbHNlIGlmKGVj'@;
put 'KHNmLHRoaXMpLnJvdz4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0Okl9PWVjKG40LHRoaXMpLmdldE5leHRWZXJ0aWNhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEksMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpfWlmKG51bGwhPT1mfHxudWxs'@;
put 'IT09dil7Y29uc3QgTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLEk9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KE0ucm93LE0uY29sKSxHPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtjPU0ucm93LGw9TS5jb2wsYS5oaWdobGlnaHQuYXNz'@;
put 'aWduKEk/e3Jvdzp0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoSS5yb3csMSksY29sOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChJLmNvbCwxKX06TSksRy5jbGVhcigpLEcuYWRkKE0pLmNvbW1pdCgp'@;
put 'fWVjKG40LHRoaXMpLnNldEFjdGl2ZU5vZGUoYyxsKSxtQShzZix0aGlzLHtyb3c6MCxjb2w6MH0pfWZ1bmN0aW9uIEhwdCgpe3RoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaXNIZWFkZXIoKXx8ZWMobjQsdGhpcykuYnVpbGRGb2N1c09yZGVyKHRoaXMuaG90LmdldFNlbGVjdGVk'@;
put 'UmFuZ2VMYXN0KCkpfWZ1bmN0aW9uIE5wdChjLGwsYSl7Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtkJiYoZC5yb3chPT1jfHxkLmNvbCE9PWw/YS5jb3B5YWJsZT0hMTooYS5yb3dzcGFuPWQucm93c3BhbixhLmNvbHNwYW49ZC5jb2xzcGFuKSl9ZnVuY3Rp'@;
put 'b24gVnB0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGMsbCl9ZnVuY3Rpb24gQnB0KGMpe2lmKHRo'@;
put 'aXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGMsbCl9ZnVuY3Rpb24ganB0KGMsbCl7Y29uc3QgYT10aGlz'@;
put 'LmF1dG9maWxsQ2FsY3VsYXRpb25zLmdldERpcmVjdGlvbihsLGMpO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYyxhKSlyZXR1cm4gbDtjb25zdCBkPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMF0sbFsxXSksaD10aGlz'@;
put 'LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzJdLGxbM10pLGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShkLGQsaCksdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShmKTtyZXR1cm4gMD09PXYubGVuZ3RoP2M6dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5z'@;
put 'bmFwRHJhZ0FyZWEobCxjLGEsdil9ZnVuY3Rpb24genB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygicmlnaHQiLGMsbCl9ZnVuY3Rpb24gVXB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygibGVmdCIs'@;
put 'YyxsKX1mdW5jdGlvbiBacHQoYyxsLGEpeyJhdXRvIiE9PWEmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImRvd24iLGMsbCl9ZnVuY3Rpb24gV3B0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygidXAiLGMsbCl9'@;
put 'ZnVuY3Rpb24gWXB0KGMsbCl7IkF1dG9maWxsLmZpbGwiPT09bCYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24oYyl9ZnVuY3Rpb24gR3B0KGMsbCl7aWYobCYmImFyZWEiPT09bCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl'@;
put 'TGFzdCgpO0tuKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGEpLGg9PnthLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz09PWguZ2V0TGFzdFJvdygpJiZhLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbD09PWguZ2V0TGFzdENvbHVtbigpJiYoY1syXT1oLnJvdyxj'@;
put 'WzNdPWguY29sKX0pfX1mdW5jdGlvbiAkcHQoYyxsLGEsZCl7aWYoYSlyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGMsbCxhLGQpfWZ1bmN0aW9uIEtwdCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5n'@;
put 'ZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgpfWZ1bmN0aW9uIFhwdChjLGwsYSxkKXtpZighKGQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rp'@;
put 'b24uZ2V0QnlSYW5nZShoKTtpZighZilyZXR1cm47Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxmLmNvbCksTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdytmLnJvd3NwYW4tMSxmLmNvbCtmLmNvbHNwYW4tMSk7cmV0dXJuIDA9PT10aGlzLmhvdC5z'@;
put 'ZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgpJiZoLmlzRXF1YWwodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkpfWZ1bmN0aW9uIHFwdChjLGwsYSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzfHwiYm90dG9tIj09PWF8fCJib3R0b21faW5saW5lX3N0YXJ0X2Nv'@;
put 'cm5lciI9PT1hKXJldHVybiBjO2xldCBkLGg7aWYoIm1hc3RlciI9PT1hKWQ9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxoPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtlbHNle2NvbnN0IHllPXRoaXMuaG90LnZpZXcuZ2V0T3Zlcmxh'@;
put 'eUJ5TmFtZShhKTtkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoeWUuY2xvbmUud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJ'@;
put 'bmRleCh5ZS5jbG9uZS53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpKX1pZighdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsZCkpcmV0dXJuIGM7Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGQpLE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'bCxoKSxJPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLEc9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoSSwhMCkscmU9Ry5yZWR1Y2UoKHllLEVlKT0+e2xldHtyb3dzcGFuOkJlfT1FZTtyZXR1cm4gTWF0aC5tYXgoeWUsQmUpfSwxKTtsZXQgdWU9'@;
put 'MDtyZXR1cm4gRy5sZW5ndGg+MSYmR1swXS5yb3dzcGFuPHJlJiYodWU9cmUtR1swXS5yb3dzcGFuKSxHLmZvckVhY2goeWU9PntsZXR7cm93c3BhbjpFZX09eWUsQmU9MDtCZT0idG9wIj09PWF8fCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1hP01hdGgubWluKHJlLHRoaXMuaG90LnZp'@;
put 'ZXcuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKS1sKTpFZS11ZSxjPU1hdGgubWF4KGM/PzAsTm1lKHRoaXMuaG90LGwsQmUpKX0pLGN9Y29uc3QgRkg9Im11bHRpQ29sdW1uU29ydGluZyIsV21lPUZIO29nZShGSCxmdW5jdGlvbiBKcHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtj'@;
put 'b25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uIHYoTSl7Y29uc3QgST1jW01dLEc9bFtNXSxyZT1oW01dLHVlPWZbTV0seWU9Ry5tdWx0aUNvbHVtblNvcnRpbmcsQmU9KHllLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/eWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpsZ2Uo'@;
put 'Ry50eXBlKSkoSSxHLHllKShyZSx1ZSk7aWYoQmU9PT1qcCl7Y29uc3QgR2U9TSsxO2lmKHR5cGVvZiBsW0dlXTwidSIpcmV0dXJuIHYoR2UpfXJldHVybiBCZX0oMCl9fSk7Y2xhc3MgYTR0IGV4dGVuZHMgYmdle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB0'@;
put 'NHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG40dChjKXt2YXIgbD1mdW5jdGlvbiByNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp'@;
put 'O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi'@;
put 'PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJwbHVnaW5LZXkiLEZIKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1'@;
put 'cm4gRkh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5hYmxlUGx1Z2luKCl7c3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRp'@;
put 'c2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25z'@;
put 'dHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4tMT09PWwucm93JiZsLmNvbD49MCYmdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWcobC5jb2wsaEYpKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10'@;
put 'aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVj'@;
put 'dGlvbi5pc0NlbGxWaXNpYmxlKGQpJiZkLmlzSGVhZGVyKCl9LHJlbGF0aXZlVG9Hcm91cDp6bSxwb3NpdGlvbjoiYmVmb3JlIixncm91cDpXbWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigp'@;
put 'LmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFdtZSl9c29ydChsKXtzdXBlci5zb3J0KGwpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gc3VwZXIu'@;
put 'Z2V0U29ydENvbmZpZyhsKX1zZXRTb3J0Q29uZmlnKGwpe3N1cGVyLnNldFNvcnRDb25maWcobCl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0Fy'@;
put 'cmF5KGwpP2w6W2xdfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMobCwuLi5kKSxocyhsLGZ1bmN0aW9u'@;
put 'IGU0dChjKXtjb25zdCBsPWMuY2xhc3NOYW1lLnNwbGl0KCIgIiksYT1uZXcgUmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiBsLmZpbHRlcihkPT5hLnRlc3QoZCkpfShsKSksITEhPT10aGlzLmVuYWJsZWQmJkVpKGwsZnVuY3Rpb24gUXB0KGMsbCxhKXtjb25zdCBkPVtdO3Jl'@;
put 'dHVybiExPT09YXx8Yy5pc0NvbHVtblNvcnRlZChsKSYmYy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZkLnB1c2goYHNvcnQtJHtjLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSsxfWApLGR9KC4uLmQpKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT1NSihh'@;
put 'LnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpJiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSx0aGlzLnNv'@;
put 'cnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhhLmNvbCxoRikpKTp0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKSkpfX1mdW5jdGlvbiBZbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHM0dChjKXt2YXIgbD1mdW5jdGlvbiBvNHQoYyxsKXtpZigib2JqZWN0IiE9'@;
put 'dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg'@;
put 'cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl'@;
put 'OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHU0dCBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxZbWUodGhpcywiZHJhZ2dlZCIsW10pLFltZSh0aGlzLCJsYXN0U2V0Q2VsbCIsbnVsbCl9c3RhdGljIGdldCBQTFVH'@;
put 'SU5fS0VZKCl7cmV0dXJuIm11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTYwfWlzRW5hYmxlZCgpe3JldHVybiBvMygpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBl'@;
put 'ci5lbmFibGVQbHVnaW4oKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMse3Jvb3RFbGVtZW50OmF9PXRoaXMuaG90O2Z1bmN0aW9uIGQoaCl7aWYoMT09PWwuZHJhZ2dlZC5sZW5ndGgpcmV0dXJuIGwuZHJhZ2dlZC5zcGxpY2UoMCxsLmRyYWdnZWQubGVuZ3RoKSwhMDtjb25z'@;
put 'dCBmPWwuZHJhZ2dlZC5pbmRleE9mKGgpO2lmKC0xPT09ZilyZXR1cm4hMTswPT09Zj9sLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKDAsMSk6MT09PWYmJihsLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKC0xKSl9dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaHN0'@;
put 'YXJ0IixoPT57bGV0IGY7cmV0dXJuIGdzKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYu'@;
put 'Z2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6Z3MoaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsLmRyYWdnZWQucHVzaCgiYm90dG9tIiks'@;
put 'bC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDB9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoZW5k'@;
put 'IixoPT5ncyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOmdzKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwo'@;
put 'bCwiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNobW92ZSIsaD0+e2NvbnN0e3Jvb3REb2N1bWVudDpmfT10aGlzLmhvdDtsZXQgdixNLEksRyxy'@;
put 'ZSx1ZTtpZigwPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgeWU9Zi5lbGVtZW50RnJvbVBvaW50KGgudG91Y2hlc1swXS5jbGllbnRYLGgudG91Y2hlc1swXS5jbGllbnRZKTsheWV8fHllPT09bC5sYXN0U2V0Q2VsbHx8KCgiVEQiPT09eWUubm9kZU5hbWV8fCJUSCI9PT15ZS5u'@;
put 'b2RlTmFtZSkmJih2PWwuaG90LmdldENvb3Jkcyh5ZSksLTE9PT12LmNvbCYmKHYuY29sPTApLE09bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxJPU0uZ2V0V2lkdGgoKSxHPU0uZ2V0SGVpZ2h0KCkscmU9TS5nZXREaXJlY3Rpb24oKSwxPT09SSYmMT09PUcmJmwuaG90LnNlbGVjdGlv'@;
put 'bi5zZXRSYW5nZUVuZCh2KSx1ZT1sLmdldEN1cnJlbnRSYW5nZUNvb3JkcyhNLHYsbC50b3VjaFN0YXJ0UmFuZ2UuZGlyZWN0aW9uLHJlLGwuZHJhZ2dlZFswXSksbnVsbCE9PXVlLnN0YXJ0JiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VTdGFydCh1ZS5zdGFydCksbC5ob3Quc2VsZWN0aW9u'@;
put 'LnNldFJhbmdlRW5kKHVlLmVuZCksbC5sYXN0U2V0Q2VsbD15ZSksaC5wcmV2ZW50RGVmYXVsdCgpKX0pfWdldEN1cnJlbnRSYW5nZUNvb3JkcyhsLGEsZCxoLGYpe2NvbnN0IHY9bC5nZXRUb3BTdGFydENvcm5lcigpLE09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxJPWwuZ2V0Qm90dG9tU3Rh'@;
put 'cnRDb3JuZXIoKSxHPWwuZ2V0VG9wRW5kQ29ybmVyKCk7bGV0IHJlPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2goZCl7Y2FzZSJORS1TVyI6c3dpdGNoKGgpe2Nhc2UiTkUtU1ciOmNhc2UiTlctU0UiOnJlPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'YS5yb3csbC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoSS5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5j'@;
put 'b2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWYmJihyZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTS5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9KX1icmVhaztjYXNlIk5XLVNFIjpzd2l0Y2goaCl7Y2Fz'@;
put 'ZSJORS1TVyI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDpJfTpyZS5lbmQ9YTticmVhaztjYXNlIk5XLVNFIjoidG9wIj09PWY/cmU9e3N0YXJ0OmEsZW5kOk19OnJlLmVuZD1hO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9yZT17c3RhcnQ6YSxlbmQ6dn06cmUuZW5kPWE7YnJlYWs7'@;
put 'Y2FzZSJTVy1ORSI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDpHfTpyZS5lbmQ9YX1icmVhaztjYXNlIlNXLU5FIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6cmU9ImJvdHRvbSI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCksZW5kOnRoaXMuaG90'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKEkucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csTS5jb2wpfTticmVhaztjYXNlIlNXLU5FIjpyZT0idG9wIj09PWY/e3N0YXJ0OnRo'@;
put 'aXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LE0uY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxD'@;
put 'b29yZHModi5yb3csYS5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWY/cmU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LEcuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpfToidG9wIj09PWYmJihyZT17c3Rh'@;
put 'cnQ6SSxlbmQ6YX0pfWJyZWFrO2Nhc2UiU0UtTlciOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpjYXNlIk5FLVNXIjpjYXNlIlNXLU5FIjoidG9wIj09PWYmJihyZS5lbmQ9YSk7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9PT1mP3JlLmVuZD1hOnJlPXtzdGFydDphLGVuZDp2fX19cmV0dXJuIHJl'@;
put 'fWlzRHJhZ2dlZCgpe3JldHVybiB0aGlzLmRyYWdnZWQubGVuZ3RoPjB9fWZ1bmN0aW9uIHNlZSgpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBzaWJsZTpkPSExLGNyb3NzSGlkZGVuQ29sdW1uczpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRk'@;
put 'ZW46dj0hMSxpc1Jvb3Q6TT0hMSxpc1BsYWNlaG9sZGVyOkk9ITEsaGVhZGVyQ2xhc3NOYW1lczpHPVtdfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJue2xhYmVsOmMsY29sc3BhbjpsLG9yaWdDb2xzcGFuOmEsY29sbGFw'@;
put 'c2libGU6ZCxpc0NvbGxhcHNlZDpmLGNyb3NzSGlkZGVuQ29sdW1uczpoLGlzSGlkZGVuOnYsaXNSb290Ok0saXNQbGFjZWhvbGRlcjpJLGhlYWRlckNsYXNzTmFtZXM6R319ZnVuY3Rpb24gb2VlKGMsbCxhKXsoZnVuY3Rpb24gaDR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBNMyhjLGwpe3JldHVybiBjLmdldCgkbWUoYyxsKSl9ZnVuY3Rpb24gdkEoYyxsLGEpe3JldHVybiBjLnNldCgkbWUo'@;
put 'YyxsKSxhKSxhfWZ1bmN0aW9uICRtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0'@;
put 'Iil9Y29uc3QgS21lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBVZz1uZXcgV2Vha01hcCxqOT1uZXcgV2Vha01hcCxsZWU9bmV3IFdlYWtNYXA7Y2xhc3MgZjR0e2NvbnN0cnVjdG9yKCl7b2VlKHRoaXMsVWcsW10pLG9lZSh0aGlzLGo5LDApLG9lZSh0aGlzLGxlZSwxLzApfXNldENv'@;
put 'bHVtbnNMaW1pdChsKXt2QShsZWUsdGhpcyxsKX1zZXREYXRhKCl7dkEoVWcsdGhpcyxmdW5jdGlvbiBkNHQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO0tuKGMs'@;
put 'aD0+e2NvbnN0IGY9W107bGV0IHY9MDthLnB1c2goZiksS24oaCxNPT57Y29uc3QgST1zZWUoKTtpZihYcyhNKSl7Y29uc3R7bGFiZWw6cmUsY29sc3Bhbjp1ZSxoZWFkZXJDbGFzc05hbWU6eWV9PU07SS5sYWJlbD1vYyhyZSksIm51bWJlciI9PXR5cGVvZiB1ZSYmdWU+MSYmKEkuY29sc3Bh'@;
put 'bj11ZSxJLm9yaWdDb2xzcGFuPXVlKSwic3RyaW5nIj09dHlwZW9mIHllJiYoSS5oZWFkZXJDbGFzc05hbWVzPVsuLi55ZS5zcGxpdCgiICIpXSl9ZWxzZSBJLmxhYmVsPW9jKE0pO3YrPUkub3JpZ0NvbHNwYW47bGV0IEc9ITE7aWYodj49bCYmKEkuY29sc3Bhbj1JLm9yaWdDb2xzcGFuLSh2'@;
put 'LWwpLEkub3JpZ0NvbHNwYW49SS5jb2xzcGFuLEc9ITApLGYucHVzaChJKSxJLmNvbHNwYW4+MSlmb3IobGV0IHJlPTA7cmU8SS5jb2xzcGFuLTE7cmUrKylmLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtyZXR1cm4hR30pfSk7Y29uc3QgZD1NYXRoLm1heCguLi55byhhLGg9'@;
put 'PmgubGVuZ3RoKSk7cmV0dXJuIEtuKGEsaD0+e2lmKGgubGVuZ3RoPGQpe2NvbnN0IGY9eW8obmV3IEFycmF5KGQtaC5sZW5ndGgpLCgpPT5zZWUoKSk7aC5zcGxpY2UoaC5sZW5ndGgsMCwuLi5mKX19KSxhfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1'@;
put 'bWVudHNbMF06W10sTTMobGVlLHRoaXMpKSksdkEoajksdGhpcyxNMyhVZyx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gTTMoVWcsdGhpcyl9bWVyZ2VXaXRoKGwpe0tuKGwsYT0+e2xldHtyb3c6ZCxjb2w6aCwuLi5mfT1hO2NvbnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhk'@;
put 'LGgpO251bGwhPT12JiZ3dSh2LGYsS21lKX0pfW1hcChsKXtLbihNMyhVZyx0aGlzKSxhPT57S24oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7WHMoaCkmJnd1KGQsaCxLbWUpfSl9KX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkO2lmKGw+PU0zKGo5LHRoaXMpfHxsPDApcmV0dXJuIG51'@;
put 'bGw7Y29uc3QgaD1NMyhVZyx0aGlzKVtsXTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaCl8fGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+PU0zKGo5LHRoaXMpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj1NMyhVZyx0aGlzKVtsXTtsZXQgdj0wO2ZvcihsZXQgTT1hO008Zi5sZW5ndGg7TSsrKXtjb25zdCBJPWZbTV07aWYoSS5pc1BsYWNlaG9sZGVyKXRo'@;
put 'cm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKHYrPUkuY29sc3BhbixoLnB1c2goSSksSS5jb2xzcGFuPjEmJihNKz1JLmNvbHNwYW4tMSksdj09PWQpYnJlYWs7aWYodj5kKXRocm93IG5l'@;
put 'dyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gTTMoajksdGhpcyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIE0zKGo5LHRoaXMpPjA/TTMoVWcs'@;
put 'dGhpcylbMF0ubGVuZ3RoOjB9Y2xlYXIoKXt2QShVZyx0aGlzLFtdKSx2QShqOSx0aGlzLDApfX1mdW5jdGlvbiBjZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHA0dChjKXt2YXIgbD1mdW5jdGlvbiBnNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh'@;
put 'PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp'@;
put 'fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs'@;
put 'ZTohMH0pOmNbbF09YSxjfWNvbnN0IFhtZT0iREYtcHJlLW9yZGVyIixlNmU9bmV3IE1hcChbW1htZSxmdW5jdGlvbiBxbWUoYyxsKXtsZXQgYT1jLmNhbGwobCx0aGlzKTtmb3IobGV0IGQ9MDtkPHRoaXMuY2hpbGRzLmxlbmd0aDtkKyspe2lmKCExPT09YSlyZXR1cm4hMTthPXFtZS5jYWxs'@;
put 'KHRoaXMuY2hpbGRzW2RdLGMsbCl9cmV0dXJuIGF9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uIEptZShjLGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHMubGVuZ3RoO2ErKylpZighMT09PUptZS5jYWxsKHRoaXMuY2hpbGRzW2FdLGMsbCkpcmV0dXJuITE7cmV0dXJuIGMuY2FsbChs'@;
put 'LHRoaXMpfV0sWyJCRiIsZnVuY3Rpb24gdjR0KGMsbCl7Y29uc3QgYT1bdGhpc107IWZ1bmN0aW9uIGQoKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9YS5zaGlmdCgpO2EucHVzaCguLi5oLmNoaWxkcyksITEhPT1jLmNhbGwobCxoKSYmZCgpfSgpfV1dKTtjbGFzcyBISHtjb25z'@;
put 'dHJ1Y3RvcihsKXtjZWUodGhpcywiZGF0YSIse30pLGNlZSh0aGlzLCJwYXJlbnQiLG51bGwpLGNlZSh0aGlzLCJjaGlsZHMiLFtdKSx0aGlzLmRhdGE9bH1hZGRDaGlsZChsKXtsLnBhcmVudD10aGlzLHRoaXMuY2hpbGRzLnB1c2gobCl9Y2xvbmVUcmVlKCl7bGV0IGw9YXJndW1lbnRzLmxl'@;
put 'bmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXM7Y29uc3QgYT1uZXcgSEgoey4uLmwuZGF0YX0pO2ZvcihsZXQgZD0wO2Q8bC5jaGlsZHMubGVuZ3RoO2QrKylhLmFkZENoaWxkKHRoaXMuY2xvbmVUcmVlKGwuY2hpbGRzW2RdKSk7cmV0dXJuIGF9cmVwbGFj'@;
put 'ZVRyZWVXaXRoKGwpe3RoaXMuZGF0YT17Li4ubC5kYXRhfSx0aGlzLmNoaWxkcz1bXTtmb3IobGV0IGE9MDthPGwuY2hpbGRzLmxlbmd0aDthKyspdGhpcy5hZGRDaGlsZChsLmNoaWxkc1thXSl9d2Fsa0Rvd24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMV0/YXJndW1lbnRzWzFdOiJCRiI7aWYoIWU2ZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kgIiR7YX0iIGRvZXMgbm90IGV4aXN0YCk7ZTZlLmdldChhKS5jYWxsKHRoaXMsbCx0aGlzKX13YWxrVXAobCl7Y29uc3QgYT10aGlzLGQ9aD0+eyExIT09bC5j'@;
put 'YWxsKGEsaCkmJm51bGwhPT1oLnBhcmVudCYmZChoLnBhcmVudCl9O2QodGhpcyl9fWZ1bmN0aW9uIHVlZShjLGwsYSl7KGZ1bmN0aW9uIGI0dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMg'@;
put 'dHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gYWQoYyxsKXtyZXR1cm4gYy5nZXQodDZlKGMsbCkpfWZ1bmN0aW9uIHQ2ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9s'@;
put 'OmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHZ3PW5ldyBXZWFrTWFwLHo5PW5ldyBXZWFrTWFwLHl3PW5ldyBXZWFrTWFwO2NsYXNzIHc0dHtjb25zdHJ1Y3RvcihsKXt1ZWUodGhpcyx2dyxuZXcgTWFw'@;
put 'KSx1ZWUodGhpcyx6OSxuZXcgTWFwKSx1ZWUodGhpcyx5dyxudWxsKSxmdW5jdGlvbiBfNHQoYyxsLGEpe2Muc2V0KHQ2ZShjLGwpLGEpfSh5dyx0aGlzLGwpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20oYWQodncsdGhpcykudmFsdWVzKCkpfWdldFJvb3RCeUNvbHVtbihsKXtsZXQg'@;
put 'YTtyZXR1cm4gYWQoejksdGhpcykuaGFzKGwpJiYoYT1hZCh2dyx0aGlzKS5nZXQoYWQoejksdGhpcykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNvbHVtbihhKTtpZighZClyZXR1cm47Y29uc3QgaD1hLWFkKHo5LHRoaXMpLmdldChhKTtsZXQgdixm'@;
put 'PTA7cmV0dXJuIGQud2Fsa0Rvd24oTT0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOkksaGVhZGVyTGV2ZWw6R319PU07aWYobD09PUcpe2lmKGg+PWYmJmg8PWYrSS0xKXJldHVybiB2PU0sdi5kYXRhLmlzUm9vdD1hPT09di5kYXRhLmNvbHVtbkluZGV4LCExO2YrPUl9fSksdn1yZWJ1aWxk'@;
put 'VHJlZUluZGV4KCl7bGV0IGw9MDthZCh6OSx0aGlzKS5jbGVhcigpLEtuKGFkKHZ3LHRoaXMpLGE9PntsZXRbLHtkYXRhOntjb2xzcGFuOmR9fV09YTtmb3IobGV0IGg9bDtoPGwrZDtoKyspYWQoejksdGhpcykuc2V0KGgsbCk7bCs9ZH0pfWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25z'@;
put 'dCBsPWFkKHl3LHRoaXMpLmdldENvbHVtbnNDb3VudCgpO2xldCBhPTA7Zm9yKDthPGw7KXtjb25zdCBkPWFkKHl3LHRoaXMpLmdldEhlYWRlclNldHRpbmdzKDAsYSksaD1uZXcgSEg7YWQodncsdGhpcykuc2V0KGEsaCksdGhpcy5idWlsZExlYXZlcyhoLGEsMCxkLm9yaWdDb2xzcGFuKSxh'@;
put 'Kz1kLm9yaWdDb2xzcGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MTtjb25zdCBmPWFkKHl3LHRoaXMpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGEs'@;
put 'aCk7ZCs9MSxLbihmLHY9Pntjb25zdCBNPXsuLi52LGhlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDphfTtsZXQgSTsxPT09ZD8obC5kYXRhPU0sST1sKTooST1uZXcgSEgoTSksbC5hZGRDaGlsZChJKSksZDxhZCh5dyx0aGlzKS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVz'@;
put 'KEksYSxkLHYub3JpZ0NvbHNwYW4pLGErPXYub3JpZ0NvbHNwYW59KX1jbGVhcigpe2FkKHZ3LHRoaXMpLmNsZWFyKCksYWQoejksdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gbjZlKGMsbCl7Yy53YWxrRG93bihhPT57bGV0e2RhdGE6ZCxjaGlsZHM6aH09YTtpZighZC5pc0hpZGRlbiYmKGwo'@;
put 'ZC5jb2x1bW5JbmRleCksMD09PWgubGVuZ3RoKSlmb3IobGV0IGY9MTtmPGQuY29sc3BhbjtmKyspbChkLmNvbHVtbkluZGV4K2YpfSl9ZnVuY3Rpb24gTkgoYyxsKXtsZXR7Y2hpbGRzOmF9PWM7aWYoMCE9PWEubGVuZ3RoKXJldHVybiBhWzBdLmRhdGFbbF19ZnVuY3Rpb24gVkgoYyl7cmV0'@;
put 'dXJuIE5IKGMsIm9yaWdDb2xzcGFuIik9PT1jLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gZGVlKGMpe2NvbnN0e2RhdGE6bCxjaGlsZHM6YX09YztpZighbC5pc0NvbGxhcHNlZHx8bC5pc0hpZGRlbnx8bC5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9'@;
put 'Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKFZIKGMpKXJldHVybiBkZWUoYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSksZj1uZXcgU2V0O2xldCB2PTA7aWYoaC5sZW5ndGg+MClLbihoLE09PntNLnJlcGxhY2VUcmVlV2l0'@;
put 'aChNLmRhdGEuY2xvbmVkVHJlZSksTS5kYXRhLmNsb25lZFRyZWU9bnVsbCx2Kz1NLmRhdGEuY29sc3BhbixuNmUoTSxHPT57Zi5hZGQoRyl9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjpNLG9yaWdDb2xzcGFuOkksY29sdW1uSW5kZXg6R309bDt2PUktTTtmb3IobGV0IHJlPTE7cmU8STtyZSsr'@;
put 'KWYuYWRkKEcrcmUpfXJldHVybiBjLndhbGtVcChNPT57Y29uc3R7ZGF0YTpJfT1NO0kuY29sc3Bhbis9dixJLmNvbHNwYW4+PUkub3JpZ0NvbHNwYW4/KEkuY29sc3Bhbj1JLm9yaWdDb2xzcGFuLEkuaXNDb2xsYXBzZWQ9ITEpOlZIKE0pJiYoSS5pc0NvbGxhcHNlZD1OSChNLCJpc0NvbGxh'@;
put 'cHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+aGVlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246dn19ZnVuY3Rpb24gaGVlKGMpe3ZhciBsO2NvbnN0e2RhdGE6YSxjaGlsZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlz'@;
put 'SGlkZGVufHxhLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoVkgoYykpcmV0dXJuIGhlZShkWzBdKTthLmlzQ29sbGFwc2VkPSEwO2NvbnN0IGY9ZC5zbGljZSgxKSx2'@;
put 'PW5ldyBTZXQ7aWYoZi5sZW5ndGg+MClLbihmLEk9PntuNmUoSSxHPT57di5hZGQoRyl9KSxJLmRhdGEuY2xvbmVkVHJlZT1JLmNsb25lVHJlZSgpLEkud2Fsa0Rvd24oRz0+e2xldHtkYXRhOnJlfT1HO3JlLmlzSGlkZGVuPSEwfSl9KTtlbHNle2NvbnN0e29yaWdDb2xzcGFuOkksY29sdW1u'@;
put 'SW5kZXg6R309YTtmb3IobGV0IHJlPTE7cmU8STtyZSsrKXYuYWRkKEcrcmUpfWNvbnN0IE09YS5jb2xzcGFuLShudWxsIT09KGw9TkgoYywiY29sc3BhbiIpKSYmdm9pZCAwIT09bD9sOjEpO3JldHVybiBjLndhbGtVcChJPT57Y29uc3R7ZGF0YTpHfT1JO0cuY29sc3Bhbi09TSxHLmNvbHNw'@;
put 'YW48PTE/KEcuY29sc3Bhbj0xLEcuaXNDb2xsYXBzZWQ9ITApOlZIKEkpJiYoRy5pc0NvbGxhcHNlZD1OSChJLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+ZGVlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKHYpLGNvbHNwYW5Db21wZW5zYXRpb246'@;
put 'TX19Y29uc3QgcjZlPW5ldyBNYXAoW1siY29sbGFwc2UiLGhlZV0sWyJleHBhbmQiLGRlZV0sWyJoaWRlLWNvbHVtbiIsZnVuY3Rpb24gQzR0KGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBo'@;
put 'YXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihobGBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9u'@;
put 'IGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAo'@;
put 'aD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5wdXNoKGwpLGYuY29sc3Bhbj4xP2YuY29sc3Bhbi09MTpmLmlzSGlkZGVuPSEwfSl9XSxbInNob3ctY29sdW1uIixmdW5jdGlvbiBTNHQoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGhsYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBs'@;
put 'YXN0IG5vZGUsIHRoZSBzaG93IGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZighYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9'@;
put 'fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5zcGxpY2UoZi5jcm9zc0hpZGRlbkNvbHVtbnMuaW5kZXhPZihsKSwxKSwhZi5pc0hpZGRlbiYmZi5jb2xzcGFuPGYub3JpZ0NvbHNwYW4mJihmLmNv'@;
put 'bHNwYW4rPTEpLGYuaXNIaWRkZW49ITF9KX1dXSk7ZnVuY3Rpb24gQkgoYyl7Y29uc3QgbD1bXTtyZXR1cm4gS24oYyxhPT57YS53YWxrRG93bihkPT57Y29uc3QgaD1kLmRhdGEse29yaWdDb2xzcGFuOmYsY29sdW1uSW5kZXg6dixoZWFkZXJMZXZlbDpNLGNyb3NzSGlkZGVuQ29sdW1uczpJ'@;
put 'fT1oLEc9ZnVuY3Rpb24gRTR0KGMsbCl7bGV0IGE7cmV0dXJuIEFycmF5LmlzQXJyYXkoY1tsXSk/YT1jW2xdOihhPVtdLGNbbF09YSksYX0obCxNKTtsZXQgcmU9ITE7Zm9yKGxldCB1ZT12O3VlPHYrZjt1ZSsrKWlmKEkuaW5jbHVkZXModWUpfHxyZSlHLnB1c2goe2xhYmVsOiIiLGlzUGxh'@;
put 'Y2Vob2xkZXI6ITB9KTtlbHNle2NvbnN0IEVlPXg0dChoKTtFZS5pc1Jvb3Q9ITAsRy5wdXNoKEVlKSxyZT0hMH19KX0pLGx9ZnVuY3Rpb24geDR0KGMpe2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczpsLC4uLmF9PXNlZShjKTtyZXR1cm4gYX1mdW5jdGlvbiBmZWUoYyxsLGEpeyhmdW5jdGlv'@;
put 'biBUNHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHlBKGMsbCxhKXtyZXR1cm4gYy5zZXQoaTZlKGMs'@;
put 'bCksYSksYX1mdW5jdGlvbiAkYyhjLGwpe3JldHVybiBjLmdldChpNmUoYyxsKSl9ZnVuY3Rpb24gaTZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl'@;
put 'IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgcjQ9bmV3IFdlYWtNYXAscWQ9bmV3IFdlYWtNYXAsVTk9bmV3IFdlYWtNYXA7Y2xhc3MgQTR0e2NvbnN0cnVjdG9yKCl7ZmVlKHRoaXMscjQsbmV3IGY0dCksZmVlKHRoaXMscWQsbmV3IHc0dCgkYyhyNCx0aGlz'@;
put 'KSkpLGZlZSh0aGlzLFU5LFtbXV0pfXNldFN0YXRlKGwpeyRjKHI0LHRoaXMpLnNldERhdGEobCk7bGV0IGE9ITE7dHJ5eyRjKHFkLHRoaXMpLmJ1aWxkVHJlZSgpfWNhdGNoeyRjKHFkLHRoaXMpLmNsZWFyKCksJGMocjQsdGhpcykuY2xlYXIoKSxhPSEwfXJldHVybiB5QShVOSx0aGlzLEJI'@;
put 'KCRjKHFkLHRoaXMpLmdldFJvb3RzKCkpKSxhfXNldENvbHVtbnNMaW1pdChsKXskYyhyNCx0aGlzKS5zZXRDb2x1bW5zTGltaXQobCl9bWVyZ2VTdGF0ZVdpdGgobCl7Y29uc3QgYT15byhsLGQ9PntsZXR7cm93OmgsLi4uZn09ZDtyZXR1cm57cm93Omg8MD90aGlzLnJvd0Nvb3Jkc1RvTGV2'@;
put 'ZWwoaCk6aCwuLi5mfX0pOyRjKHI0LHRoaXMpLm1lcmdlV2l0aChhKSwkYyhxZCx0aGlzKS5idWlsZFRyZWUoKSx5QShVOSx0aGlzLEJIKCRjKHFkLHRoaXMpLmdldFJvb3RzKCkpKX1tYXBTdGF0ZShsKXskYyhyNCx0aGlzKS5tYXAobCksJGMocWQsdGhpcykuYnVpbGRUcmVlKCkseUEoVTks'@;
put 'dGhpcyxCSCgkYyhxZCx0aGlzKS5nZXRSb290cygpKSl9bWFwTm9kZXMobCl7cmV0dXJuIEd1KCRjKHFkLHRoaXMpLmdldFJvb3RzKCksKGEsZCk9PihkLndhbGtEb3duKGg9Pntjb25zdCBmPWwoaC5kYXRhKTt2b2lkIDAhPT1mJiZhLnB1c2goZil9KSxhKSxbXSl9dHJpZ2dlck5vZGVNb2Rp'@;
put 'ZmljYXRpb24obCxhLGQpe2E8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKTtjb25zdCBoPSRjKHFkLHRoaXMpLmdldE5vZGUoYSxkKTtsZXQgZjtyZXR1cm4gaCYmKGY9ZnVuY3Rpb24gTTR0KGMsbCxhKXtpZighcjZlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1v'@;
put 'ZGlmaWVyIGFjdGlvbiAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gcjZlLmdldChjKShsLGEpfShsLGgsZCkseUEoVTksdGhpcyxCSCgkYyhxZCx0aGlzKS5nZXRSb290cygpKSkpLGZ9dHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihsLGEpe3JldHVybiB0aGlzLnRyaWdnZXJO'@;
put 'b2RlTW9kaWZpY2F0aW9uKGwsLTEsYSl9cm93Q29vcmRzVG9MZXZlbChsKXtpZihsPj0wKXJldHVybiBudWxsO2NvbnN0IGE9bCtNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE8MD9udWxsOmF9bGV2ZWxUb1Jvd0Nvb3JkcyhsKXtpZihsPDApcmV0dXJuIG51bGw7'@;
put 'Y29uc3QgYT1sLU1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYT49MD9udWxsOmF9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZCxoO3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291'@;
put 'bnQoKT9udWxsOm51bGwhPT0oZD1udWxsPT09KGg9JGMoVTksdGhpcylbbF0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldEhlYWRlclRyZWVOb2RlKGwsYSk7cmV0dXJuIGQ/ey4u'@;
put 'LmQuZGF0YX06bnVsbH1nZXRIZWFkZXJUcmVlTm9kZShsLGEpe3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOiRjKHFkLHRoaXMpLmdldE5vZGUobCxhKXx8bnVsbH1maW5kVG9wTW9zdEVudGly'@;
put 'ZUhlYWRlckxldmVsKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2NvbnN0IGQ9YS1sKzE7bGV0IGg9ITEsZj1udWxsO2ZvcihsZXQgdj1sO3Y8PWE7disrKXtjb25zdCBNPSRjKHFkLHRoaXMpLmdldFJvb3RCeUNvbHVt'@;
put 'bih2KTtpZighTSlicmVhaztoPSEwLE0ud2Fsa0Rvd24oST0+e2NvbnN0e2NvbHVtbkluZGV4OkcsaGVhZGVyTGV2ZWw6cmUsb3JpZ0NvbHNwYW46dWUsaXNIaWRkZW46eWV9PUkuZGF0YTt5ZXx8dWU8PWQmJkc+PWwmJkcrdWUtMTw9YSYmKG51bGw9PT1mfHxyZTxmKSYmKGY9cmUpfSxYbWUp'@;
put 'fXJldHVybiBoJiZudWxsPT09Zj8tMTp0aGlzLmxldmVsVG9Sb3dDb29yZHMoZj8/MCl9ZmluZExlZnRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aH09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEw'@;
put 'fTtpZihoKXJldHVybiBhO2xldCBmPWEtMTtmb3IoO2Y+PTA7KXt2YXIgdjtjb25zdHtpc1Jvb3Q6TX09bnVsbCE9PSh2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxmKSkmJnZvaWQgMCE9PXY/djp7aXNSb290OiEwfTtpZihNKWJyZWFrO2YtPTF9cmV0dXJuIGZ9ZmluZFJpZ2h0TW9zdENv'@;
put 'bHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omgsb3JpZ0NvbHNwYW46Zn09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwLG9yaWdDb2xzcGFuOjF9O2lmKGgpcmV0dXJuIGErZi0xO2xldCB2PWErMTtmb3IoO3Y8'@;
put 'dGhpcy5nZXRDb2x1bW5zQ291bnQoKTspe3ZhciBNO2NvbnN0e2lzUm9vdDpJfT1udWxsIT09KE09dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLHYpKSYmdm9pZCAwIT09TT9NOntpc1Jvb3Q6ITB9O2lmKEkpYnJlYWs7dis9MX1yZXR1cm4gdi0xfWdldExheWVyc0NvdW50KCl7cmV0dXJuICRj'@;
put 'KHI0LHRoaXMpLmdldExheWVyc0NvdW50KCl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuICRjKHI0LHRoaXMpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7eUEoVTksdGhpcyxbXSksJGMocjQsdGhpcykuY2xlYXIoKSwkYyhxZCx0aGlzKS5jbGVhcigpfX1mdW5jdGlvbiBiQShjLGwsYSl7'@;
put 'cmV0dXJuKGw9ZnVuY3Rpb24gazR0KGMpe3ZhciBsPWZ1bmN0aW9uIEQ0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs'@;
put 'P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgUjR0PWNsYXNzIEk0dHtjb25zdHJ1Y3RvcihsLGEpe2JBKHRoaXMsImhvdCIsdm9pZCAwKSxi'@;
put 'QSh0aGlzLCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlciIsdm9pZCAwKSxiQSh0aGlzLCJsYXllcnNDb3VudCIsMCksYkEodGhpcywiY29udGFpbmVyIix2b2lkIDApLGJBKHRoaXMsIndpZHRoc01hcCIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0'@;
put 'ZXI9YSx0aGlzLndpZHRoc01hcD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJuZXN0ZWRIZWFkZXJzLndpZHRoc01hcCIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIil9c2V0TGF5ZXJzQ291bnQobCl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9'@;
put 'bCx0aGlzfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9YnVpbGRXaWR0aHNNYXAoKXtjb25zdCBsPXRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKTt0aGlzLmNvbnRhaW5lcj10aGlzLmhv'@;
put 'dC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIpLGwmJnRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQobCksdGhpcy5fYnVpbGRHaG9zdFRhYmxl'@;
put 'KHRoaXMuY29udGFpbmVyKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7Y29uc3QgYT10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJ0cjpsYXN0LW9mLXR5cGUgdGgiKSxkPWEubGVuZ3RoO3RoaXMud2lkdGhzTWFwLmNsZWFy'@;
put 'KCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpLHY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKTt0aGlzLndpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgodixhW2hdLm9mZnNl'@;
put 'dFdpZHRoKX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsfV9idWlsZEdob3N0VGFibGUobCl7Y29uc3R7cm9vdERvY3VtZW50OmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhpcy5ob3QsaD1hLmNyZWF0ZURv'@;
put 'Y3VtZW50RnJhZ21lbnQoKSxmPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSx2PSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsTT1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7Zm9yKGxldCBJPTA7STx0aGlzLmxheWVyc0NvdW50O0krKyl7Y29uc3QgRz1hLmNy'@;
put 'ZWF0ZUVsZW1lbnQoInRyIik7Zm9yKGxldCByZT0wO3JlPE07cmUrKyl7bGV0IHVlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZSk7bnVsbD09PXVlJiYodWU9cmUpO2NvbnN0IHllPWEuY3JlYXRlRWxlbWVudCgidGgiKSxFZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0'@;
put 'dGVyKEksdWUpO2lmKEVlJiYoIUVlLmlzUGxhY2Vob2xkZXJ8fEVlLmlzSGlkZGVuKSl7bGV0IEJlPUVlLmxhYmVsO3YmJihCZSs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPicpLGo3KHllLEJlKSx5ZS5jb2xTcGFuPUVlLmNvbHNwYW4sRy5hcHBlbmRDaGlsZCh5ZSl9'@;
put 'fWYuYXBwZW5kQ2hpbGQoRyl9aC5hcHBlbmRDaGlsZChmKSxsLmFwcGVuZENoaWxkKGgpfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfX07ZnVuY3Rpb24gYTZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPNHQoYyl7dmFyIGw9ZnVuY3Rpb24g'@;
put 'UDR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj'@;
put 'LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBfQShjLGwsYSl7czZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBzNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p'@;
put 'dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFpnKGMsbCxhKXtyZXR1cm4gYy5zZXQoS2MoYyxsKSxhKSxhfWZ1bmN0aW9uIGJvKGMsbCl7cmV0dXJuIGMuZ2V0KEtjKGMsbCkpfWZ1bmN0aW9uIEtjKGMsbCxhKXtpZigiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBvNmU9Im5lc3RlZEhlYWRlcnMiO3ZhciBUbD1u'@;
put 'ZXcgV2Vha01hcCx3Nj1uZXcgV2Vha01hcCx3QT1uZXcgV2Vha01hcCxqSD1uZXcgV2Vha01hcCx6SD1uZXcgV2Vha01hcCxsdT1uZXcgV2Vha1NldDtjbGFzcyBINHQgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gTDR0KGMsbCl7czZlKGMs'@;
put 'bCksbC5hZGQoYyl9KHRoaXMsbHUpLF9BKHRoaXMsVGwsbmV3IEE0dCksX0EodGhpcyx3NixudWxsKSxfQSh0aGlzLHdBLG51bGwpLF9BKHRoaXMsakgsITEpLF9BKHRoaXMsekgsbnVsbCksYTZlKHRoaXMsImdob3N0VGFibGUiLG5ldyBSNHQodGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVh'@;
put 'ZGVyU2V0dGluZ3MobCxhKSkpLGE2ZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIG82ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyODB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5n'@;
put 'ZXRTZXR0aW5ncygpW282ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsoIUFycmF5LmlzQXJyYXkoYSl8fCFBcnJheS5pc0FycmF5KGFbMF0pKSYmWW8oaGxgWW91'@;
put 'ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFu'@;
put 'OiAyIH1dXWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PktjKGx1LHRoaXMsUTR0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1'@;
put 'bWVudHNbZl07cmV0dXJuIEtjKGx1LGwsZWd0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty'@;
put 'ZXR1cm4gS2MobHUsbCxqNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEtjKGx1'@;
put 'LGwsejR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxVNHQpLmNh'@;
put 'bGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VVcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxaNHQpLmNhbGwobCwuLi5oKX0p'@;
put 'LHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBLYyhsdSxsLFc0dCkuY2FsbChsLC4uLmgpfSksdGhp'@;
put 'cy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxZNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygi'@;
put 'YWZ0ZXJTZWxlY3Rpb24iLCgpPT5LYyhsdSx0aGlzLFVIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCgpPT5LYyhsdSx0aGlzLFVIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Iixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBLYyhsdSxsLE40dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZD0+'@;
put 'S2MobHUsdGhpcywkNHQpLmNhbGwodGhpcyxkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxYNHQpLmNh'@;
put 'bGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEtjKGx1LGwscTR0KS5jYWxsKGwsLi4u'@;
put 'aCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxWNHQpLmNhbGwobCwuLi5o'@;
put 'KX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29weSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxCNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVm'@;
put 'b3JlU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxHNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENv'@;
put 'bHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS2MobHUsbCxLNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Rm9j'@;
put 'dXNlZEVsZW1lbnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEtjKGx1LGwsSjR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2Nh'@;
put 'bEhvb2soImNhY2hlVXBkYXRlZCIsKCk9PktjKGx1LHRoaXMsVUgpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIiwoKT0+S2MobHUsdGhpcyxVSCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRh'@;
put 'dGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2JvKFRsLHRoaXMpLnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYm'@;
put 'KHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1ibyhUbCx0aGlzKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZZbyhobGBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtp'@;
put 'bmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNo'@;
put 'KChhLGQpPT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO2JvKFRsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFibyh3Nix0aGlzKSYmdGhpcy5lbmFibGVkJiZaZyh3Nix0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNy'@;
put 'ZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6dn09ZDtpZigicmVwbGFjZSI9PT1oKXtjb25zdCBNPSEwPT09dj8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7Ym8oVGwsdGhpcykudHJp'@;
put 'Z2dlckNvbHVtbk1vZGlmaWNhdGlvbihNLGYpfX0pLHRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkpLmJ1aWxkV2lkdGhzTWFwKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJs'@;
put 'ZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xzcGFucygpLGJvKFRsLHRoaXMpLmNsZWFyKCksYm8odzYsdGhpcykudW5zdWJzY3JpYmUoKSxaZyh3Nix0aGlzLG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4g'@;
put 'Ym8oVGwsdGhpcyl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gYm8oVGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBibyhUbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZighdGhpcy5ob3Qudmlldyly'@;
put 'ZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0'@;
put 'Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IHY9MDt2PGE7disrKXtjb25zdCBNPWQuY2hpbGROb2Rlc1t2XTtpZighTSlicmVhaztjb25zdCBJPWguY2hpbGROb2Rlc1t2XSxHPWY/'@;
put 'Zi5jaGlsZE5vZGVzW3ZdOm51bGw7Zm9yKGxldCByZT0wLHVlPU0uY2hpbGROb2Rlcy5sZW5ndGg7cmU8dWU7cmUrKylNLmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGhzKE0uY2hpbGROb2Rlc1tyZV0sImhpZGRlbkhlYWRlciIpLEkmJkkuY2hpbGROb2Rlc1ty'@;
put 'ZV0mJihJLmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGhzKEkuY2hpbGROb2Rlc1tyZV0sImhpZGRlbkhlYWRlciIpKSxmJiZHJiZHLmNoaWxkTm9kZXNbcmVdJiYoRy5jaGlsZE5vZGVzW3JlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxocyhHLmNoaWxk'@;
put 'Tm9kZXNbcmVdLCJoaWRkZW5IZWFkZXIiKSl9fWhlYWRlclJlbmRlcmVyRmFjdG9yeShsKXt2YXIgYT10aGlzO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtyZXR1cm4oaCxmKT0+e3ZhciB2O2NvbnN0e2NvbHVtbkluZGV4TWFwcGVy'@;
put 'Ok0sdmlldzpJfT10aGlzLmhvdDtsZXQgRz1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PUcmJihHPWgpLGYucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksaHMoZiwiaGlkZGVuSGVhZGVyIiksaHMoZiwiaGlkZGVuSGVhZGVyVGV4dCIpO2NvbnN0e2NvbHNwYW46'@;
put 'cmUsaXNIaWRkZW46dWUsaXNQbGFjZWhvbGRlcjp5ZSxoZWFkZXJDbGFzc05hbWVzOkVlfT1udWxsIT09KHY9Ym8oVGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxHKSkmJnZvaWQgMCE9PXY/djp7bGFiZWw6IiJ9O2lmKHllfHx1ZSlFaShmLCJoaWRkZW5IZWFkZXIiKTtlbHNlIGlmKHJl'@;
put 'PjEpe3ZhciBCZSxHZSxzdDtjb25zdHt3dE92ZXJsYXlzOnB0fT1JLl93dCxkdD1udWxsPT09KEJlPXB0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PUJlP3ZvaWQgMDpCZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLHF0PW51bGw9PT0oR2U9cHQuaW5s'@;
put 'aW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09R2U/dm9pZCAwOkdlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZik7KG51bGw9PT0oc3Q9cHQudG9wT3ZlcmxheSl8fHZvaWQgMD09PXN0P3ZvaWQgMDpzdC5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpKSYmRzxkJiZFaShm'@;
put 'LCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3Qgd249ZHR8fHF0P01hdGgubWluKHJlLGQtaCk6cmU7d24+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLHduKX1pZih0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihHLGYsZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRDb2x1bW5IZWFkZXJW'@;
put 'YWx1ZSguLi5hcmd1bWVudHMpfSxsKSwheWUmJiF1ZSl7Y29uc3QgcHQ9Zi5xdWVyeVNlbGVjdG9yKCJkaXYucmVsYXRpdmUiKTtwdCYmRWUmJkVlLmxlbmd0aD4wJiYoaHMocHQsdGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShHKS5oZWFkZXJDbGFzc05hbWUpLEVpKHB0LEVlKSl9fX1nZXRDb2x1'@;
put 'bW5IZWFkZXJWYWx1ZShsLGEpe3ZhciBkO2NvbnN0e2lzSGlkZGVuOmgsaXNQbGFjZWhvbGRlcjpmfT1udWxsIT09KGQ9Ym8oVGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7fTtyZXR1cm4gZnx8aD8iIjp0aGlzLmhvdC5nZXRDb2xIZWFkZXIobCxhKX1k'@;
put 'ZXN0cm95KCl7WmcoVGwsdGhpcyxudWxsKSxudWxsIT09Ym8odzYsdGhpcykmJihibyh3Nix0aGlzKS51bnN1YnNjcmliZSgpLFpnKHc2LHRoaXMsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkp'@;
put 'cmV0dXJuIGJvKFRsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLnJvdyxsLmNvbCl9fWZ1bmN0aW9uIFVIKCl7dmFyIGM7Y29uc3QgbD1udWxsPT09KGM9dGhpcy5ob3QpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0'@;
put 'e2hpZ2hsaWdodDphfT1sO2lmKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApe2NvbnN0IGg9Ym8oVGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO2YudmlzdWFsQ2VsbFJhbmdlLmhpZ2hs'@;
put 'aWdodC5jb2w9aCxmLnZpc3VhbENlbGxSYW5nZS5mcm9tLmNvbD1oLGYudmlzdWFsQ2VsbFJhbmdlLnRvLmNvbD1oLGYuY29tbWl0KCl9fWZ1bmN0aW9uIE40dChjLGwpe3ZhciBhO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighZClyZXR1cm4gYztjb25zdHto'@;
put 'aWdobGlnaHQ6aH09ZCx7bmF2aWdhYmxlSGVhZGVyczpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLE09Zj9oLnJvdzpudWxsPT09KGE9Ym8oekgsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnJvdyxJ'@;
put 'PXY/YzpoLmNvbCxHPU08MCYmST49MDtpZihaZyh6SCx0aGlzLG51bGwpLCFHKXJldHVybiBjO2NvbnN0IHJlPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCksdWU9dGhpcy5ob3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLHllPXVlLXJlKzEsRWU9Ym8oVGwsdGhp'@;
put 'cykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoTSxJKSxCZT1ibyhUbCx0aGlzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoTSxJKSxHZT1CZS1FZSsxO2lmKEVlPHJlJiZCZT51ZSlyZXR1cm4gRWU7aWYodil7bGV0IHN0PW51bGw7cmV0dXJuIEVlPj1yZSYmQmU+dWU/R2U+eWU/KGwudmFs'@;
put 'dWU9InN0YXJ0IixzdD1FZSk6KGwudmFsdWU9ImVuZCIsc3Q9QmUpOkVlPHJlJiZCZTw9dWUmJihHZT55ZT8obC52YWx1ZT0iZW5kIixzdD1CZSk6KGwudmFsdWU9InN0YXJ0IixzdD1FZSkpLHN0fXJldHVybiBFZTw9cmU/RWU6QmV9ZnVuY3Rpb24gVjR0KGMsbCxhKXtjb25zdCBkPWJvKFRs'@;
put 'LHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLGMpO2lmKCFkKXJldHVybiBjO2NvbnN0e2NvbHVtbkN1cnNvcjpoLHNlbGVjdGlvblR5cGU6ZixzZWxlY3Rpb25XaWR0aDp2fT1hLHtpc1Jvb3Q6TSxjb2xzcGFuOkl9PWJvKFRsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsYyk7aWYo'@;
put 'Zj09PW1xKXtpZighTSlyZXR1cm4gZC5jb2x1bW5JbmRleH1lbHNlIGlmKGY9PT1KM2UmJihJPnYtaHx8IU0pKXJldHVybiBudWxsO3JldHVybiBjfWZ1bmN0aW9uIEI0dChjLGwsYSl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpkfT1hO2lmKDAhPT1kKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7'@;
put 'ZisrKXtjb25zdHtzdGFydFJvdzp2LHN0YXJ0Q29sOk0sZW5kUm93OkksZW5kQ29sOkd9PWxbZl0scmU9SS12KzE7aWYodj49MHx8MT09TS1HKzEpYnJlYWs7Zm9yKGxldCB5ZT1NO3llPD1HO3llKyspZm9yKGxldCBFZT12O0VlPD1JO0VlKyspe3ZhciBoO2NvbnN0IEJlPXJlK0VlLEdlPXll'@;
put 'LU07MCE9PUdlJiYhMT09PShudWxsPT09KGg9Ym8oVGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKEVlLHllKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaXNSb290KSYmKGNbQmVdW0dlXT0iIil9fX1mdW5jdGlvbiBqNHQoYyxsLGEsZCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRh'@;
put 'QnlDb29yZHMobCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gejR0KGMsbCl7Y29uc3QgYT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighYSlyZXR1cm47Wmcod0EsdGhpcyxsLmNsb25lKCkpLFpnKGpILHRoaXMsITApO2NvbnN0e3NlbGVjdGlvbjpkfT10aGlz'@;
put 'LmhvdCxoPWQuaXNTZWxlY3RlZCgpP2QuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGY9W10se2NvbHVtbkluZGV4OnYsb3JpZ0NvbHNwYW46TX09YSxJPSFkLmluSW5TZWxlY3Rpb24obCk7Yy5zaGlmdEtleSYmaD9sLmNvbDxoLmZyb20uY29sP2YucHVzaChoLmdldFRvcEVu'@;
put 'ZENvcm5lcigpLmNvbCx2LGwucm93KTpmLnB1c2gobC5jb2w+aC5mcm9tLmNvbD9oLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sOnYsditNLTEsbC5yb3cpOigkTyhjKXx8UG0oYykmJkl8fGdmZShjKSkmJmYucHVzaCh2LHYrTS0xLGwucm93KSxkLnNlbGVjdENvbHVtbnMoLi4uZil9ZnVuY3Rp'@;
put 'b24gVTR0KGMsbCxhLGQpe2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fGQuY29sdW1uKXJldHVybjtjb25zdCBoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFoKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpmLG9yaWdDb2xzcGFuOnZ9PWgsTT10'@;
put 'aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEk9TS5nZXRUb3BTdGFydENvcm5lcigpLEc9TS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTpyZX09TTtkLmNvbHVtbj0hMCxkLmNlbGw9ITA7Y29uc3QgdWU9W10seWU9QW8obC5yb3csLTEvMCwtMSk7bC5jb2w8cmUuY29sP3VlLnB1'@;
put 'c2goRy5jb2wsZix5ZSk6dWUucHVzaChsLmNvbD5yZS5jb2w/SS5jb2w6ZixmK3YtMSx5ZSksdGhpcy5ob3Quc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoLi4udWUpfWZ1bmN0aW9uIFo0dCgpe1pnKGpILHRoaXMsITEpfWZ1bmN0aW9uIFc0dCgpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6Y309'@;
put 'dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpfHwhYm8oakgsdGhpcyl8fCFjKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGQ9bC5nZXRCb3R0b21FbmRD'@;
put 'b3JuZXIoKS5jb2wse2NvbHVtbkluZGV4Omgsb3JpZ0NvbHNwYW46Zn09Ym8oVGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGJvKHdBLHRoaXMpLnJvdyxibyh3QSx0aGlzKS5jb2wpO2lmKGwuc2V0SGlnaGxpZ2h0KGJvKHdBLHRoaXMpKSxmPmwuZ2V0V2lkdGgoKXx8aDxhfHxoK2Yt'@;
put 'MT5kKXtjb25zdCB2PWJvKFRsLHRoaXMpLmZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwoQW8oYSxoLGgrZi0xKSxBbyhkLGgsaCtmLTEpKTtsLmhpZ2hsaWdodC5yb3c9dixsLmhpZ2hsaWdodC5jb2w9bC5mcm9tLmNvbH19ZnVuY3Rpb24gWTR0KGMpe2NvbnN0e2hpZ2hsaWdodDpsfT10'@;
put 'aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crYy5yb3csbC5jb2wrYy5jb2wpO2lmKCEoYS5pc0hlYWRlcigpJiZhLmNvbD49MCkpcmV0dXJuO2NvbnN0IGg9Ym8oVGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgo'@;
put 'YS5yb3csYS5jb2wpLGY9Ym8oVGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKTtpZihjLmNvbDwwKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/aC0xOmYsLTEp'@;
put 'O2MuY29sPW51bGw9PT1NPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsbC5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKE0sbC5jb2wpLTEsMSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBNPXRo'@;
put 'aXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/ZisxOmgsMSk7Yy5jb2w9bnVsbD09PU0/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6'@;
put 'TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCxNKS0xLDEpfX1mdW5jdGlvbiBHNHQoYyxsLGEpe2NvbnN0IGQ9Yy5yb3csaD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmMuY29sfSksZj10aGlz'@;
put 'Ll9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmwuY29sfSk7WmcoekgsdGhpcyxhLmNsb25lKCkpLGwuY29sPGMuY29sPyhoJiYoYy5jb2w9aC5jb2x1bW5JbmRleCtoLm9yaWdDb2xzcGFuLTEpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4KSk6bC5jb2w+PWMuY29s'@;
put 'JiYoaCYmKGMuY29sPWguY29sdW1uSW5kZXgpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4K2Yub3JpZ0NvbHNwYW4tMSkpfWZ1bmN0aW9uICQ0dChjKXtpZihibyhUbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpPjApe2MubGVuZ3RoPTA7Zm9yKGxldCBsPTA7bDxibyhUbCx0aGlzKS5nZXRMYXll'@;
put 'cnNDb3VudCgpO2wrKyljLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkobCkpfX1mdW5jdGlvbiBLNHQoYyl7Y29uc3QgbD1ibyhUbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2xldCBhPWMuc3RhcnRDb2x1bW4sZD0hIWw7Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj1ibyhU'@;
put 'bCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoLGMuc3RhcnRDb2x1bW4pLHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtpZihmPj0wJiYoZD0hMSksZzEodikmJnY8Yy5zdGFydENvbHVtbil7YT12O2JyZWFrfX1jLnN0'@;
put 'YXJ0Q29sdW1uPWQ/Ym8oVGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKDAsYSkuY29sdW1uSW5kZXg6YX1mdW5jdGlvbiBYNHQoYyxsKXtjb25zdCBhPXRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aChsKTtyZXR1cm4gYz5hP2M6YX1mdW5jdGlvbiBxNHQoYyxsLGEpe3ZhciBkO2NvbnN0'@;
put 'e2xhYmVsOmh9PW51bGwhPT0oZD1ibyhUbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7bGFiZWw6IiJ9O3JldHVybiBofWZ1bmN0aW9uIEo0dChjLGwpe2lmKGM8MClyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbChjLGJvKFRsLHRoaXMpLmZpbmRMZWZ0'@;
put 'TW9zdENvbHVtbkluZGV4KGMsbCksITApfWZ1bmN0aW9uIFE0dCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gZWd0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBDQShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdGd0KGMpe3ZhciBsPWZ1bmN0aW9uIG5ndChj'@;
put 'LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA'@;
put 'dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2'@;
put 'YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgaWd0PWNsYXNzIHJndHtjb25zdHJ1Y3RvcihsLGEpe0NBKHRoaXMsImhvdCIsdm9pZCAwKSxDQSh0aGlzLCJkYXRhIixudWxsKSxDQSh0aGlzLCJwbHVnaW4iLHZvaWQgMCks'@;
put 'Q0EodGhpcywicGFyZW50UmVmZXJlbmNlIixuZXcgV2Vha01hcCksQ0EodGhpcywiY2FjaGUiLHtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9KSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRh'@;
put 'KCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRh'@;
put 'dGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LEthKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNh'@;
put 'Y2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVsc1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dz'@;
put 'LnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhpcy5oYXNDaGlsZHJlbihsKSYmS24obC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3Qo'@;
put 'bCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSx2PWE7aWYoaXNOYU4odikmJnYuZW5kKXJldHVybiB2O2xldCBNPWw7cmV0dXJuIE18fChNPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCx2LT0xKSxudWxs'@;
put 'IT1kJiZ2PT09ZD97cmVzdWx0Ok0sZW5kOiEwfTpudWxsIT1oJiZNPT09aD97cmVzdWx0OnYsZW5kOiEwfToodis9MSxNLl9fY2hpbGRyZW4mJktuKE0uX19jaGlsZHJlbixJPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KEksZj9udWxsOk0pLHY9dGhpcy5yZWFkVHJlZU5vZGVzKEks'@;
put 'dixkLGgpLGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4hMX0pLHYpfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2NoaWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4gcXModGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1u'@;
put 'dWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJv'@;
put 'd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7'@;
put 'cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oS24oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGguX19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1p'@;
put 'c05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJuIGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXts'@;
put 'ZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdldFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hp'@;
put 'bGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7'@;
put 'cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFP'@;
put 'YmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJiho'@;
put 'PXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1v'@;
put 'Y2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXModiwxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHYsMSksdGhp'@;
put 'cy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBNPXRoaXMuZ2V0Um93SW5kZXgo'@;
put 'bCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLE0sMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwo'@;
put 'dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoTSwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJz'@;
put 'KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixNLDEpLGY9TX1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBs'@;
put 'dWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+'@;
put 'MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhpcy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlz'@;
put 'LmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZyb21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxk'@;
put 'PW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyhLYShsWzBdLGxbMl0seWU9Pntjb25zdCBFZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coeWUpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoRWUpKX0pLEthKDAsaC5sZW5ndGgtMix5ZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVu'@;
put 'dChoW3llXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksdj10aGlzLmNvdW50Q2hpbGRyZW4oZCksTT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpLEk9dGhpcy5nZXRSb3dQYXJlbnQoZCksRz10aGlzLmdldFJvd1BhcmVudChJ'@;
put 'KSxyZT10aGlzLmdldFJvd0luZGV4KEcpO2xldCB1ZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEZXRhY2hDaGlsZCIsSSxkKSxudWxsIT1NKXtjb25zdCB5ZT1BcnJheS5mcm9tKG5ldyBBcnJheShmK3YrMSkua2V5cygpKS5zcGxpY2UoLTEqKHYrMSkpO2lmKHRoaXMuaG90'@;
put 'LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsdisxLHllLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLEkuX19jaGlsZHJlbi5zcGxpY2UoTSwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsZix2KzEseWUsdGhpcy5wbHVnaW4ucGx1'@;
put 'Z2luTmFtZSksRyl7dWU9cmUrdGhpcy5jb3VudENoaWxkcmVuKEcpO2NvbnN0IEVlPXRoaXMuZ2V0Q2hpbGQoRyx0aGlzLmNvdW50Q2hpbGRyZW4oRyktMSksQmU9dGhpcy5nZXRSb3dJbmRleChFZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsQmUrMSx2KzEsdGhpcy5w'@;
put 'bHVnaW4ucGx1Z2luTmFtZSksRy5fX2NoaWxkcmVuLnB1c2goZCl9ZWxzZSB1ZT10aGlzLmhvdC5jb3VudFJvd3MoKSsxLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLHVlLTIsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuZGF0YS5wdXNoKGQpfXRoaXMucmV3'@;
put 'cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93Iix1ZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEZXRhY2hDaGlsZCIsSSxkLHRoaXMuZ2V0Um93SW5kZXgoZCkpLGEmJnRoaXMuaG90LnJlbmRlcigpfWZp'@;
put 'bHRlckRhdGEobCxhLGQpe2NvbnN0IGg9W107S24oZCxmPT57aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChmKSl9KSxLbihoLGY9Pntjb25zdCB2PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZiksTT10aGlzLmdldFJvd1BhcmVudChmKTtudWxsPT09TT90aGlzLmRhdGEuc3BsaWNl'@;
put 'KHYsMSk6TS5fX2NoaWxkcmVuLnNwbGljZSh2LDEpfSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zcGxpY2VEYXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RGF0YU9iamVjdChsLTEpO2xldCBmPW51bGwsdj1sO2gmJmguX19jaGlsZHJlbiYmMD09PWguX19jaGlsZHJlbi5sZW5ndGg/KGY9aCx2'@;
put 'PTApOmw8dGhpcy5jb3VudEFsbFJvd3MoKSYmKGY9dGhpcy5nZXRSb3dQYXJlbnQobCksdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpKSxmP2Q/Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEsLi4uZCk6Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEpOmQ/dGhpcy5kYXRhLnNwbGljZSh2'@;
put 'LGEsLi4uZCk6dGhpcy5kYXRhLnNwbGljZSh2LGEpLHRoaXMucmV3cml0ZUNhY2hlKCl9c3luY1Jvd1dpdGhSYXdTb3VyY2UobCl7bGV0IGE9bCxkPWE7ZG97ZD10aGlzLmdldFJvd1BhcmVudChkKSxudWxsIT09ZCYmKGE9ZCl9d2hpbGUobnVsbCE9PWQpO3RoaXMucGx1Z2luLmRpc2FibGVD'@;
put 'b3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLCJfX2NoaWxkcmVuIixhLl9fY2hpbGRyZW4sIk5lc3RlZFJvd3Muc3luY1Jvd1dpdGhSYXdTb3VyY2UiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJ'@;
put 'TW9kaWZpZXJzKCl9bW92ZVJvdyhsLGEsZCxoKXtjb25zdCBmPWE9PT10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuZ2V0Um93UGFyZW50KGwpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSxJPXYuX19jaGlsZHJlbi5zbGljZShNLE0rMSksRz1sPmE7bGV0IHJlPXRoaXMu'@;
put 'Z2V0Um93UGFyZW50KGY/YS0xOmEpO251bGw9PXJlJiYocmU9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSksbnVsbD09cmUmJihyZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSkscmU/cmUuX19jaGlsZHJlbnx8KHJlLl9fY2hpbGRyZW49W10pOihyZT10aGlzLmdldERhdGFPYmplY3QoYSkscmUu'@;
put 'X19jaGlsZHJlbj1bXSk7Y29uc3QgdWU9Znx8ZHx8aD9yZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLHllPXY9PT1yZTtyZS5fX2NoaWxkcmVuLnNwbGljZSh1ZSwwLElbMF0pLHYuX19jaGlsZHJlbi5zcGxpY2UoTSsoRyYmeWU/MTowKSwxKSx0'@;
put 'aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHYpLHllfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHJlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6'@;
put 'bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fTtmdW5jdGlvbiBsNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGFndChjKXt2YXIgbD1m'@;
put 'dW5jdGlvbiBzZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHBlZT1jbGFzcyBvZ3R7Y29uc3RydWN0b3IobCxhKXtsNmUodGhpcywiaG90Iix2b2lkIDApLGw2ZSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksdGhpcy5o'@;
put 'b3Q9YSx0aGlzLnBsdWdpbj1sfX07Y2xhc3MgV2cgZXh0ZW5kcyBwZWV7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZlbHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwi'@;
put 'LGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRo'@;
put 'aXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1udWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNh'@;
put 'bFJvdyhsKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwoZCksZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksdj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYiKVswXSxNPXYucXVlcnlTZWxlY3Rvcigic3Bhbi5yb3dIZWFkZXIiKSxJPXYucXVlcnlTZWxlY3Rv'@;
put 'ckFsbCgnW2NsYXNzXj0iaHRfbmVzdGluZyJdJyksRz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKEtuKEkscmU9PntyZSYmdi5yZW1vdmVDaGlsZChyZSl9KSxFaShhLFdnLkNTU19DTEFTU0VTLmluZGljYXRvckNvbnRhaW5lciksaCl7Y29uc3R7cm9vdERvY3VtZW50OnJl'@;
put 'fT10aGlzLmhvdCx1ZT1NLmNsb25lTm9kZSghMCk7di5pbm5lckhUTUw9IiIsS2EoMCxoLTEsKCk9Pntjb25zdCB5ZT1yZS5jcmVhdGVFbGVtZW50KCJTUEFOIik7RWkoeWUsV2cuQ1NTX0NMQVNTRVMuZW1wdHlJbmRpY2F0b3IpLHYuYXBwZW5kQ2hpbGQoeWUpfSksdi5hcHBlbmRDaGlsZCh1'@;
put 'ZSl9aWYodGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSl7Y29uc3QgcmU9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO0cmJm1zKHJlLFtONygpXSksRWkoYSxXZy5DU1NfQ0xBU1NFUy5wYXJlbnQpLHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVu'@;
put 'Q29sbGFwc2VkKGQpPyhFaShyZSxgJHtXZy5DU1NfQ0xBU1NFUy5idXR0b259ICR7V2cuQ1NTX0NMQVNTRVMuZXhwYW5kQnV0dG9ufWApLEcmJm1zKGEsW0IyKCExKV0pKTooRWkocmUsYCR7V2cuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1dnLkNTU19DTEFTU0VTLmNvbGxhcHNlQnV0dG9ufWAp'@;
put 'LEcmJm1zKGEsW0IyKCEwKV0pKSx2LmFwcGVuZENoaWxkKHJlKX19dXBkYXRlUm93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDthfHwoYT10aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVsQ291bnQpO2xldCBkPTExO3RoaXMuaG90LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKXx8KGQ9'@;
put 'Mip0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nIikpLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1NYXRoLm1heCg1MCxkKzEwKmErMjUpLHRoaXMuaG90LnJlbmRlcigpfX1jb25zdCBjNmU9V2csY2d0PWNsYXNzIGxn'@;
put 'dCBleHRlbmRzIHBlZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkO3N1cGVyKGwsYSksZD10aGlzLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzZWRSb3dzPVtdLHRoaXMuY29sbGFwc2VkUm93c1N0YXNoPXtzdGFzaDpmdW5jdGlvbigpe2xldCBo'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07ZC5sYXN0Q29sbGFwc2VkUm93cz1kLmNvbGxhcHNlZFJvd3Muc2xpY2UoMCksZC5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGQubGFzdENvbGxhcHNlZFJvd3MsaCl9LHNoaWZ0U3Rhc2g6ZnVu'@;
put 'Y3Rpb24oaCxmKXtsZXQgdj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtudWxsPT1mJiYoZj0xLzApLEtuKGQubGFzdENvbGxhcHNlZFJvd3MsKE0sSSk9PntNPj1oJiZNPGYmJihkLmxhc3RDb2xsYXBzZWRSb3dzW0ldPU0rdil9KX0s'@;
put 'YXBwbHlTdGFzaDpmdW5jdGlvbigpe2QuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGQubGFzdENvbGxhcHNlZFJvd3MsIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSksZC5sYXN0Q29sbGFwc2VkUm93cz12b2lkIDB9LHRyaW1TdGFz'@;
put 'aDooaCxmKT0+e0thKGgsaCtmLTEsdj0+e2NvbnN0IE09dGhpcy5sYXN0Q29sbGFwc2VkUm93cy5pbmRleE9mKHYpO00+LTEmJnRoaXMubGFzdENvbGxhcHNlZFJvd3Muc3BsaWNlKE0sMSl9KX19fWNvbGxhcHNlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5h'@;
put 'Z2VyLmdldFJvd0luZGV4KGYpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpJiZLbihmLl9fY2hpbGRyZW4sST0+e2gucHVzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KEkpKX0pLE09dGhpcy5j'@;
put 'b2xsYXBzZVJvd3MoaCwhMCwhMSksZCYmdGhpcy50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLC0xPT09dGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YodikmJnRoaXMuY29sbGFwc2VkUm93cy5wdXNoKHYpLE19Y29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGwpe2xldCBh'@;
put 'PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107S24obCxmPT57aC5wdXNoKC4uLnRoaXMuY29sbGFwc2VD'@;
put 'aGlsZHJlbihmLCExLCExKSl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VSb3cobCl7dGhpcy5jb2xsYXBzZVJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfWNv'@;
put 'bGxhcHNlUm93cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBLbihsLGY9Pnto'@;
put 'LnB1c2goZiksYSYmdGhpcy5jb2xsYXBzZUNoaWxkUm93cyhmLGgpfSksZCYmdGhpcy50cmltUm93cyhoKSxofWNvbGxhcHNlQ2hpbGRSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxoPWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihsKSYmS24odGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLl9fY2hpbGRyZW4sdj0+e2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2'@;
put 'KTthLnB1c2goTSksdGhpcy5jb2xsYXBzZUNoaWxkUm93cyhNLGEpfSksaCYmdGhpcy50cmltUm93cyhhKX1leHBhbmRSb3cobCl7dGhpcy5leHBhbmRSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1leHBhbmRSb3dz'@;
put 'KGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9W107cmV0dXJuIEtuKGwsZj0+e2gucHVzaChmKSxh'@;
put 'JiZ0aGlzLmV4cGFuZENoaWxkUm93cyhmLGgpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGh9ZXhwYW5kQ2hpbGRSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihsKSYmS24odGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLl9fY2hpbGRyZW4sdj0+e2lmKCF0aGlzLmlzQW55UGFyZW50Q29sbGFwc2VkKHYpKXtjb25zdCBNPXRoaXMuZGF0'@;
put 'YU1hbmFnZXIuZ2V0Um93SW5kZXgodik7YS5wdXNoKE0pLHRoaXMuZXhwYW5kQ2hpbGRSb3dzKE0sYSl9fSksaCYmdGhpcy51bnRyaW1Sb3dzKGEpfWV4cGFuZENoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNb'@;
put 'MV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCx2PW51bGwsTT1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLHY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChsKSk6KGY9dGhpcy5k'@;
put 'YXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLHY9bCksdGhpcy5jb2xsYXBzZWRSb3dzLnNwbGljZSh0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSwxKSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpJiZLbihmLl9fY2hpbGRyZW4sST0+e2NvbnN0IEc9dGhpcy5kYXRhTWFu'@;
put 'YWdlci5nZXRSb3dJbmRleChJKTtoLnB1c2goRyl9KSxNPXRoaXMuZXhwYW5kUm93cyhoLCEwLCExKSxkJiZ0aGlzLnVudHJpbVJvd3MoTSksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSxNfWV4cGFuZE11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtLbihsLGY9PntoLnB1c2goLi4udGhpcy5leHBhbmRDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0aGlz'@;
put 'LnVudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZUFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtLbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmNvbGxhcHNlTXVs'@;
put 'dGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfWV4cGFuZEFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtLbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmV4cGFuZE11bHRpcGxl'@;
put 'Q2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX10cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0tuKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKX11bnRyaW1Sb3dzKGwpe3RoaXMuaG90'@;
put 'LmJhdGNoRXhlY3V0aW9uKCgpPT57S24obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMSl9KX0sITApfWFyZUNoaWxkcmVuQ29sbGFwc2VkKGwpe2xldCBhPWlzTmFOKGwpP2w6dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLGQ9'@;
put 'ITA7cmV0dXJuIG51bGw9PT1hJiYoYT17X19jaGlsZHJlbjp0aGlzLmRhdGFNYW5hZ2VyLmRhdGF9KSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGEpJiZLbihhLl9fY2hpbGRyZW4saD0+e2NvbnN0IGY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChoKTtpZighdGhpcy5wbHVn'@;
put 'aW4uY29sbGFwc2VkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgoZikpcmV0dXJuIGQ9ITEsITF9KSxkfWlzQW55UGFyZW50Q29sbGFwc2VkKGwpe2xldCBhPWw7Zm9yKDtudWxsIT09YTspe2E9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYSk7Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2Vy'@;
put 'LmdldFJvd0luZGV4KGEpO2lmKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGQpPi0xKXJldHVybiEwfXJldHVybiExfXRvZ2dsZVN0YXRlKGwsYSl7aWYoYS5jb2w+PTApcmV0dXJuO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGEucm93KTtncyhsLnRhcmdldCxjNmUuQ1NT'@;
put 'X0NMQVNTRVMuYnV0dG9uKSYmKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/dGhpcy5leHBhbmRDaGlsZHJlbihkKTp0aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZCksejIobCkpfXRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCl9dW50cmFu'@;
put 'c2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1Zpc3VhbFJvdyhsKX1yZW5kZXJBbmRBZGp1c3QoKXt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfX07dmFyIHU2ZT1uZXcgV2Vha01hcDtjb25zdCB5Z3Q9Y2xhc3Mgdmd0IGV4'@;
put 'dGVuZHMgcGVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBoZ3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZndChjKXt2YXIgbD1mdW5jdGlvbiBwZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv'@;
put 'UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09'@;
put 'YSxjfSh0aGlzLCJkYXRhTWFuYWdlciIsdGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIpLGZ1bmN0aW9uIHVndChjLGwsYSl7KGZ1bmN0aW9uIGRndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMg'@;
put 'dHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsdTZlLHtyb3dfYWJvdmU6KGwsYSk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoYVthLmxlbmd0aC0xXS5zdGFydC5yb3csImFib3ZlIil9LHJvd19iZWxvdzoobCxhKT0+e3RoaXMuZGF0YU1hbmFnZXIu'@;
put 'YWRkU2libGluZyhhW2EubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYmVsb3ciKX19KX1hcHBlbmRPcHRpb25zKGwpe2NvbnN0IGE9W3trZXk6ImFkZF9jaGlsZCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRFgpfSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5kYXRh'@;
put 'TWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpWzBdKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKTt0aGlzLmRhdGFNYW5hZ2VyLmFkZENoaWxkKGgpfSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRMYXN0KCk7cmV0dXJuIWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0'@;
put 'dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShJWCl9LGNhbGxiYWNrOigpPT57dGhpcy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGg9dGhp'@;
put 'cy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRbMF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChoKXx8IWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhp'@;
put 'cy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se25hbWU6Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gS2EoMCxsLml0ZW1zLmxlbmd0aC0xLGQ9PntpZigwPT09ZClyZXR1cm4gS24oYSwoaCxmKT0+e2wuaXRlbXMuc3BsaWNlKGQrZiwwLGgpfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGlu'@;
put 'Z09wdGlvbnMobCl9bW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKXtyZXR1cm4gS2EoMCxsLml0ZW1zLmxlbmd0aC0xLGE9Pntjb25zdCBkPWZ1bmN0aW9uIGdndChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiBtZ3QoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMu'@;
put 'aGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0odTZlLHRoaXMpW2wuaXRlbXNbYV0ua2V5XTtudWxsIT1kJiYobC5pdGVtc1thXS5jYWxs'@;
put 'YmFjaz1kKX0pLGx9fTtmdW5jdGlvbiBaSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYmd0KGMpe3ZhciBsPWZ1bmN0aW9uIF9ndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgd2d0e2NvbnN0cnVjdG9yKGwpe1pI'@;
put 'KHRoaXMsInBsdWdpbiIsdm9pZCAwKSxaSCh0aGlzLCJob3QiLHZvaWQgMCksWkgodGhpcywiZGF0YU1hbmFnZXIiLHZvaWQgMCksWkgodGhpcywiY29sbGFwc2luZ1VJIix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3QsdGhpcy5kYXRhTWFuYWdlcj1sLmRhdGFNYW5hZ2Vy'@;
put 'LHRoaXMuY29sbGFwc2luZ1VJPWwuY29sbGFwc2luZ1VJfW9uQmVmb3JlUm93TW92ZShsLGEsZCxoKXtpZih0aGlzLmRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyh7cm93czpsLGZpbmFsSW5kZXg6YSxkcm9wSW5kZXg6ZCxtb3ZlUG9zc2libGU6aH0pKXJldHVybiExO3RoaXMubW92'@;
put 'ZWRUb0NvbGxhcHNlZD0hMTtjb25zdCB2PWQ9PT10aGlzLmhvdC5jb3VudFJvd3MoKSxNPXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk6dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGQpO2xldCBJPSEwO2NvbnN0IEc9bC5tYXAoQmU9PntpZighSSlyZXR1cm4hMTtj'@;
put 'b25zdCBHZT10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coQmUpO3JldHVybiBJPXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcoR2UsTSksR2V9KSxyZT0tMT09PUcuaW5kZXhPZihNKTtpZighSXx8IXJlKXJldHVybiExO2NvbnN0IHVlPXRoaXMuZ2V0QmFzZVBhcmVudChHKSx5'@;
put 'ZT10aGlzLmdldFRhcmdldFBhcmVudCh2LE0pLEVlPXVlPT09eWU7cmV0dXJuIHRoaXMubW92ZWRUb0NvbGxhcHNlZD10aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZCh5ZSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCksdGhpcy5zaGlm'@;
put 'dENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhHLE0sRWUpLHRoaXMubW92ZVJvd3MoRyxNLHllKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShHLE0pLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCEx'@;
put 'KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsZCxoLGgmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKSksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5zZWxlY3RDZWxscyhsLGQpLCExfWRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyhsKXtjb25zdHtyb3dzOmEs'@;
put 'ZmluYWxJbmRleDpkLGRyb3BJbmRleDpoLG1vdmVQb3NzaWJsZTpmfT1sO2xldCB2PSExO3JldHVybiBiYyhoKSYmKFlvKGhsYFNpbmNlIHZlcnNpb24gOC4wLjAgb2YgdGhlIEhhbmRzb250YWJsZSB0aGUgJ21vdmVSb3dzJyBtZXRob2QgaXNuJ3QgdXNlZCBmb3IgbW92aW5nIHJvd3NceDIw'@;
put 'CiAgICAgIHdoZW4gdGhlIE5lc3RlZFJvd3MgcGx1Z2luIGlzIGVuYWJsZWQuIFBsZWFzZSB1c2UgdGhlICdkcmFnUm93cycgbWV0aG9kIGluc3RlYWQuYCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsYSxkLGgsZiwhMSksdj0hMCksdn1zaG91bGRBbGxvd01vdmluZyhsLGEp'@;
put 'e3JldHVybiEodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChsKXx8dGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKXx8bD09PWF8fDA9PT1hKX1nZXRCYXNlUGFyZW50KGwpe3JldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChsWzBdKX1nZXRUYXJnZXRQYXJl'@;
put 'bnQobCxhKXtsZXQgZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChsP2EtMTphKTtyZXR1cm4gbnVsbD09ZCYmKGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYS0xKSksZH1zaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhsLGEsZCl7ZHx8KE1hdGgubWF4KC4u'@;
put 'LmwpPD1hP3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGxbMF0sYSwtMSpsLmxlbmd0aCk6dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxsWzBdLGwubGVuZ3RoKSl9bW92ZVJvd3MobCxhLGQpe2NvbnN0IGg9'@;
put 'YT09PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZCkrdGhpcy5kYXRhTWFuYWdlci5jb3VudENoaWxkcmVuKGQpKzE7dGhpcy5ob3QuYmF0Y2hSZW5kZXIoKCk9PntsLmZvckVhY2goZj0+e3RoaXMuZGF0YU1hbmFnZXIubW92ZVJvdyhmLGEsdGhpcy5tb3ZlZFRvQ29sbGFwc2VkLGgp'@;
put 'fSl9KX1tb3ZlQ2VsbHNNZXRhKGwsYSl7Y29uc3QgZD1bXSxoPU1hdGgubWF4KC4uLmwpPGE7bC5mb3JFYWNoKGY9PntkLnB1c2godGhpcy5ob3QuZ2V0Q2VsbE1ldGFBdFJvdyhmKSl9KSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEobFswXSxsLmxlbmd0aCksdGhpcy5ob3Quc3BsaWNlQ2Vs'@;
put 'bHNNZXRhKGEtKGg/ZC5sZW5ndGg6MCksMCwuLi5kKX1zZWxlY3RDZWxscyhsLGEpe2NvbnN0IGQ9bC5sZW5ndGg7bGV0IGg9MCxmPTA7aWYodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXtsZXQgdj1udWxsO3Y9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGxbZC0xXTxhP2Et'@;
put 'ZDphKTtjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KG51bGw9PT12P3RoaXMuaG90LmNvdW50U291cmNlUm93cygpLTE6di0xKSxJPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSk7aD10aGlzLmRhdGFNYW5hZ2VyLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhJKSxm'@;
put 'PWh9ZWxzZSBsW2QtMV08YT8oZj1hLTEsaD1mLWQrMSk6KGg9YSxmPWgrZC0xKTt0aGlzLmhvdC5zZWxlY3RDZWxscyhbW2gsMCxmLHRoaXMuaG90LmNvdW50Q29scygpLTFdXSwhMSl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX19ZnVuY3Rp'@;
put 'b24gZDZlKGMsbCxhKXtoNmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGg2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZ2VlKGMs'@;
put 'bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBTZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gTWd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw'@;
put 'ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBXSChjLGwpe3JldHVybiBjLmdldChwMChjLGwpKX1mdW5jdGlvbiBZSChjLGws'@;
put 'YSl7cmV0dXJuIGMuc2V0KHAwKGMsbCksYSksYX1mdW5jdGlvbiBwMChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVz'@;
put 'ZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgR0g9Im5lc3RlZFJvd3MiLGY2ZT1HSDt2YXIgJEg9bmV3IFdlYWtNYXAsYnc9bmV3IFdlYWtNYXAsTTA9bmV3IFdlYWtTZXQ7Y2xhc3MgVGd0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIENn'@;
put 'dChjLGwpe2g2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLE0wKSxnZWUodGhpcywiZGF0YU1hbmFnZXIiLG51bGwpLGdlZSh0aGlzLCJoZWFkZXJzVUkiLG51bGwpLGdlZSh0aGlzLCJjb2xsYXBzZWRSb3dzTWFwIixudWxsKSxkNmUodGhpcywkSCwhMSksZDZlKHRoaXMsYncsITEpfXN0YXRpYyBn'@;
put 'ZXQgUExVR0lOX0tFWSgpe3JldHVybiBHSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0dIXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sbGFw'@;
put 'c2VkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIsbmV3IHFFKSx0aGlzLmRhdGFNYW5hZ2VyPW5ldyBpZ3QodGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3IGNndCh0aGlzLHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1u'@;
put 'ZXcgYzZlKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVVST1uZXcgeWd0KHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92ZUNvbnRyb2xsZXI9bmV3IHdndCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gcDAoTTAsbCxqZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxo'@;
put 'PTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gcDAoTTAsbCx6Z3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93RGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVJvd0RhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5'@;
put 'U291cmNlTGVuZ3RoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5U291cmNlTGVuZ3RoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURhdGFTcGxpY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEYXRhU3BsaWNlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk'@;
put 'ZEhvb2soImZpbHRlckRhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHAwKE0wLGwsRGd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1l'@;
put 'bnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gcDAoTTAsbCxJZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFk'@;
put 'ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHAwKE0wLGwsUmd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rp'@;
put 'b24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gcDAoTTAsbCxrZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1h'@;
put 'cmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBwMChNMCxsLFBndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gcDAoTTAsbCxPZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0w'@;
put 'O2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHAwKE0wLGwsRmd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1'@;
put 'bWVudHNbaF07cmV0dXJuIHAwKE0wLGwsSGd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVy'@;
put 'biBwMChNMCxsLE5ndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBwMChNMCxsLFZndCku'@;
put 'Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gcDAoTTAsbCxMZ3QpLmNhbGwobCwuLi5k'@;
put 'KX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHAwKE0wLGwsQmd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2so'@;
put 'ImJlZm9yZVJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHAwKE0wLGwsQWd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixh'@;
put 'PT5wMChNMCx0aGlzLHA2ZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9PnAwKE0wLHRoaXMscDZlKS5jYWxsKHRoaXMsYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMu'@;
put 'aG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCk7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEo'@;
put 'KTt0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZGF0YU1hbmFnZXIudXBkYXRlV2l0aERhdGEobCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6'@;
put 'W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPXRoaXMuY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobC5yb3cpO3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxh'@;
put 'cHNlZChhKT90aGlzLmNvbGxhcHNpbmdVSS5leHBhbmRDaGlsZHJlbihhKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZUNoaWxkcmVuKGEpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lk'@;
put 'IDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJi0xPT09ZC5jb2wmJmQu'@;
put 'cm93Pj0wfSxncm91cDpmNmUscmVsYXRpdmVUb0dyb3VwOnptLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGY2ZSl9ZGlzYWJsZUNv'@;
put 'cmVBUElNb2RpZmllcnMoKXtZSChidyx0aGlzLCEwKX1lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl7WUgoYncsdGhpcywhMSl9b25Nb2RpZnlSb3dEYXRhKGwpe2lmKCFXSChidyx0aGlzKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpfW9uTW9kaWZ5U291cmNlTGVu'@;
put 'Z3RoKCl7aWYoIVdIKGJ3LHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0dXJuISghV0goYncsdGhpcykmJiF0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpJiYodGhpcy5kYXRhTWFuYWdl'@;
put 'ci5zcGxpY2VEYXRhKGwsYSxkKSwxKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gQWd0KGMsbCxhLGQpe3JldHVybiB0aGlzLnJvd01vdmVDb250cm9sbGVyLm9uQmVmb3JlUm93TW92ZShjLGwsYSxkKX1mdW5jdGlvbiBrZ3QoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJ'@;
put 'LnRvZ2dsZVN0YXRlKGMsbCxhKX1mdW5jdGlvbiBEZ3QoYyxsLGEpe3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNoKGFbMF0sbCksdGhpcy5jb2xsYXBzaW5nVUku'@;
put 'Y29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYVswXSxudWxsLC0xKmwpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShjLGwsYSksWUgoJEgsdGhpcywhMCksdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1mdW5jdGlvbiBJZ3QoYyl7cmV0dXJuIHRoaXMuY29udGV4'@;
put 'dE1lbnVVSS5hcHBlbmRPcHRpb25zKGMpfWZ1bmN0aW9uIFJndChjLGwpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhjLGwpfWZ1bmN0aW9uIExndChjKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWFkZXJzVUkucm93SGVhZGVyV2lkdGhDYWNoZSxjKX1mdW5jdGlvbiBP'@;
put 'Z3QoYyxsLGEsZCl7ZCE9PXRoaXMucGx1Z2luTmFtZSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e1lIKCRILHRoaXMsITEpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2go'@;
put 'KX0pfWZ1bmN0aW9uIFBndChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKGEucmVkdWNlKChoLGYpPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChmKSl7Y29uc3Qgdj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZikuX19jaGlsZHJlbjtyZXR1cm4gaC5hZGQoZiksQXJy'@;
put 'YXkuaXNBcnJheSh2KSYmdi5mb3JFYWNoKE09PmguYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSkpKSxofXJldHVybiBoLmFkZChmKX0sbmV3IFNldCkpO2EubGVuZ3RoPTAsYS5wdXNoKC4uLmQpfWZ1bmN0aW9uIEZndCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJv'@;
put 'd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIEhndChjLGwpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCks'@;
put 'dGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBOZ3QoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1mdW5jdGlvbiBWZ3QoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNo'@;
put 'KGEsbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIEJndCgpe3RoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gamd0KCl7dGhp'@;
put 'cy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiB6Z3QoYyxsKXtXSCgkSCx0aGlzKSYmKGwuc2tpcFJlbmRlcj0hMCl9ZnVuY3Rpb24gcDZlKGMpe2lmKCFPM2UoYykpcmV0dXJuIEIkKCJUaGUgTmVzdGVkIFJvd3MgcGx1Z2luIHJlcXVpcmVzIGFuIEFycmF5IG9m'@;
put 'IE9iamVjdHMgYXMgYSBkYXRhc2V0IHRvIGJlIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLiIpLHRoaXMuaG90LmdldFNldHRpbmdzKClbR0hdPSExLHZvaWQgdGhpcy5kaXNhYmxlUGx1Z2luKCk7dGhpcy5kYXRhTWFuYWdlci5zZXREYXRhKGMpLHRoaXMuZGF0YU1h'@;
put 'bmFnZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gbWVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gWmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09'@;
put 'YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp'@;
put 'KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBZZ3Q9Y2xhc3MgV2d0'@;
put 'e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7bWVlKHRoaXMsInJvb3RXaW5kb3ciLHZvaWQgMCksbWVlKHRoaXMsInByZWZpeCIsdm9pZCAwKSxtZWUodGhpcywic2F2ZWRLZXlzIixbXSks'@;
put 'dGhpcy5yb290V2luZG93PWEsdGhpcy5wcmVmaXg9bCx0aGlzLmxvYWRTYXZlZEtleXMoKX1zYXZlVmFsdWUobCxhKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7bH1gLEpTT04uc3RyaW5naWZ5KGEpKSwtMT09PXRoaXMuc2F2ZWRLZXlz'@;
put 'LmluZGV4T2YobCkmJih0aGlzLnNhdmVkS2V5cy5wdXNoKGwpLHRoaXMuc2F2ZVNhdmVkS2V5cygpKX1sb2FkVmFsdWUobCxhKXtjb25zdCBoPXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHt0eXBlb2YgbD4idSI/YTpsfWApO3JldHVybiBu'@;
put 'dWxsPT09aD92b2lkIDA6SlNPTi5wYXJzZShoKX1yZXNldChsKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7bH1gKX1yZXNldEFsbCgpe0tuKHRoaXMuc2F2ZWRLZXlzLChsLGEpPT57dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFn'@;
put 'ZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke3RoaXMuc2F2ZWRLZXlzW2FdfWApfSksdGhpcy5jbGVhclNhdmVkS2V5cygpfWxvYWRTYXZlZEtleXMoKXtjb25zdCBsPXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRT'@;
put 'dGF0ZUtleXNgKSxhPSJzdHJpbmciPT10eXBlb2YgbD9KU09OLnBhcnNlKGwpOnZvaWQgMDt0aGlzLnNhdmVkS2V5cz1hfHxbXX1zYXZlU2F2ZWRLZXlzKCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2As'@;
put 'SlNPTi5zdHJpbmdpZnkodGhpcy5zYXZlZEtleXMpKX1jbGVhclNhdmVkS2V5cygpe3RoaXMuc2F2ZWRLZXlzLmxlbmd0aD0wLHRoaXMuc2F2ZVNhdmVkS2V5cygpfX07TWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVNhdmUiKSxNYS5nZXRTaW5nbGV0b24oKS5y'@;
put 'ZWdpc3RlcigicGVyc2lzdGVudFN0YXRlTG9hZCIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIpO2NvbnN0IGc2ZT0icGVyc2lzdGVudFN0YXRlIjtjbGFzcyBxZ3QgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyks'@;
put 'ZnVuY3Rpb24gR2d0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiAkZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gS2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8'@;
put 'ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1'@;
put 'cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywic3RvcmFnZSIsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJ'@;
put 'Tl9LRVkoKXtyZXR1cm4gZzZlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2c2ZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5zdG9yYWdlfHwodGhpcy5zdG9yYWdlPW5l'@;
put 'dyBZZ3QodGhpcy5ob3Qucm9vdENvbnRhaW5lci5pZHx8dGhpcy5ob3Qucm9vdEVsZW1lbnQuaWQsdGhpcy5ob3Qucm9vdFdpbmRvdykpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlU2F2ZSIsKGwsYSk9PnRoaXMuc2F2ZVZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVu'@;
put 'dFN0YXRlTG9hZCIsKGwsYSk9PnRoaXMubG9hZFZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlUmVzZXQiLCgpPT50aGlzLnJlc2V0VmFsdWUoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnN0b3JhZ2U9dm9pZCAwLHN1cGVyLmRp'@;
put 'c2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWxvYWRWYWx1ZShsLGEpe2EudmFsdWU9dGhpcy5zdG9yYWdlLmxvYWRWYWx1ZShsKX1zYXZlVmFsdWUobCxhKXt0aGlzLnN0b3Jh'@;
put 'Z2Uuc2F2ZVZhbHVlKGwsYSl9cmVzZXRWYWx1ZShsKXt0eXBlb2YgbD4idSI/dGhpcy5zdG9yYWdlLnJlc2V0QWxsKCk6dGhpcy5zdG9yYWdlLnJlc2V0KGwpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHZlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZTV0KGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uIHQ1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gbTZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6'@;
put 'YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB5ZWU9InNlYXJjaCIsaTV0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7Yy5nZXRDZWxsTWV0YShsLGEpLmlzU2VhcmNoUmVzdWx0PWh9LGE1dD1mdW5jdGlvbihj'@;
put 'LGwsYSl7cmV0dXJuIShiYyhjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fGJjKGwpfHxudWxsPT09bCkmJi0xIT09bC50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2Nh'@;
put 'bGUpKX07dmFyIGJlZT1uZXcgV2Vha1NldDtjbGFzcyBzNXQgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gSmd0KGMsbCl7KGZ1bmN0aW9uIFFndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs'@;
put 'aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGJlZSksdmVlKHRoaXMsImNhbGxiYWNrIixpNXQpLHZlZSh0aGlzLCJxdWVyeU1ldGhvZCIsYTV0KSx2ZWUodGhpcywic2VhcmNoUmVzdWx0Q2xhc3MiLCJodFNl'@;
put 'YXJjaFJlc3VsdCIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB5ZWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTkwfWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3llZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0'@;
put 'aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt5ZWVdO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoYSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShk'@;
put 'KSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbTZlKGJlZSxsLHY2ZSkuY2FsbChsLC4uLmgpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7Y29uc3QgYT1mdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9'@;
put 'bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBtNmUoYmVlLGwsdjZlKS5jYWxsKGwsLi4uaCl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMu'@;
put 'aG90LnJlbW92ZUhvb2soImJlZm9yZVJlbmRlcmVyIixhKX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dz'@;
put 'KCksZj10aGlzLmhvdC5jb3VudENvbHMoKSx2PVtdLE09dGhpcy5ob3Q7cmV0dXJuIEthKDAsaC0xLEk9PntLYSgwLGYtMSxHPT57Y29uc3QgcmU9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChJLEcpLHVlPXRoaXMuaG90LmdldENlbGxNZXRhKEksRykseWU9dWUuc2VhcmNoLmNhbGxiYWNrfHxh'@;
put 'LEJlPSh1ZS5zZWFyY2gucXVlcnlNZXRob2R8fGQpKGwscmUsdWUpO0JlJiZ2LnB1c2goe3JvdzpJLGNvbDpHLGRhdGE6cmV9KSx5ZSYmeWUoTSxJLEcscmUsQmUpfSl9KSx2fWdldENhbGxiYWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2t9c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1s'@;
put 'fWdldFF1ZXJ5TWV0aG9kKCl7cmV0dXJuIHRoaXMucXVlcnlNZXRob2R9c2V0UXVlcnlNZXRob2QobCl7dGhpcy5xdWVyeU1ldGhvZD1sfWdldFNlYXJjaFJlc3VsdENsYXNzKCl7cmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9c2V0U2VhcmNoUmVzdWx0Q2xhc3MobCl7dGhpcy5zZWFy'@;
put 'Y2hSZXN1bHRDbGFzcz1sfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe1hzKGwpJiYobC5zZWFyY2hSZXN1bHRDbGFzcyYmdGhpcy5zZXRTZWFyY2hSZXN1bHRDbGFzcyhsLnNlYXJjaFJlc3VsdENsYXNzKSxsLnF1ZXJ5TWV0aG9kJiZ0aGlzLnNldFF1ZXJ5TWV0aG9kKGwucXVlcnlNZXRob2Qp'@;
put 'LGwuY2FsbGJhY2smJnRoaXMuc2V0Q2FsbGJhY2sobC5jYWxsYmFjaykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHY2ZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1mLmNsYXNzTmFtZXx8W107bGV0IE09W107InN0cmluZyI9PXR5cGVvZiB2P009di5zcGxpdCgiICIpOk0u'@;
put 'cHVzaCguLi52KSx0aGlzLmlzRW5hYmxlZCgpJiZmLmlzU2VhcmNoUmVzdWx0P00uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fE0ucHVzaChgJHt0aGlzLnNlYXJjaFJlc3VsdENsYXNzfWApOk0uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcykmJk0uc3BsaWNlKE0u'@;
put 'aW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxmLmNsYXNzTmFtZT1NLmpvaW4oIiAiKX1mdW5jdGlvbiBLSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbzV0KGMpe3ZhciBsPWZ1bmN0aW9uIGw1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh'@;
put 'YmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeTZle2NvbnN0cnVjdG9yKGwpe0tIKHRoaXMsInZpZXdwb3J0V2lkdGgiLHZvaWQgMCksS0godGhpcywib3ZlcndyaXRlQ29sdW1uV2lkdGhGbiIsdm9pZCAwKSxLSCh0aGlzLCJiYXNlV2lkdGhzIixuZXcgTWFwKSxLSCh0aGlzLCJzdHJldGNoZWRX'@;
put 'aWR0aHMiLG5ldyBNYXApLHRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbj1sfXByZXBhcmUobCl7bGV0e3ZpZXdwb3J0V2lkdGg6YX09bDt0aGlzLnZpZXdwb3J0V2lkdGg9YSx0aGlzLmJhc2VXaWR0aHMuY2xlYXIoKSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpfXNldENvbHVtbkJh'@;
put 'c2VXaWR0aChsLGEpe3RoaXMuYmFzZVdpZHRocy5zZXQobCxhKX1jYWxjdWxhdGUoKXt9Z2V0V2lkdGhzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zdHJldGNoZWRXaWR0aHMpfX1jbGFzcyBjNXQgZXh0ZW5kcyB5NmV7Y2FsY3VsYXRlKCl7Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFz'@;
put 'ZVdpZHRocykucmVkdWNlKCh1ZSx5ZSk9PntsZXRbLEVlXT15ZTtyZXR1cm4gdWUrRWV9LDApO2lmKHRoaXMudmlld3BvcnRXaWR0aC1sPDApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCBkPXRoaXMudmlld3BvcnRXaWR0aC9sLGg9W10sZj1bXTtsZXQg'@;
put 'dj10aGlzLnZpZXdwb3J0V2lkdGgsTT0wO2lmKHRoaXMuYmFzZVdpZHRocy5mb3JFYWNoKCh1ZSx5ZSk9Pntjb25zdCBFZT1NYXRoLnJvdW5kKHVlKmQpLEJlPXRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbihFZSx5ZSk7RWU9PT1CZSYmRWU+PWJfPyhoLnB1c2goW3llLEJlXSksTSs9QmUp'@;
put 'OkVlIT09QmUmJihoLnB1c2goW3llLEJlXSksZi5wdXNoKHllKSx2LT1CZSl9KSx2PD1iXylyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IEk9di9NO2xldCBHPS0xLHJlPTA7aC5mb3JFYWNoKCh1ZSx5ZSk9PntsZXRbRWUsQmVdPXVlLEdlPUJlO2YuaW5j'@;
put 'bHVkZXMoRWUpfHwoR2U9TWF0aC5yb3VuZChCZSpJKSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KEVlLEdlKSxHPUVlLHllPGgubGVuZ3RoLTEmJihyZSs9R2UpfSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2l6ZT4xJiZ0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoRyxNYXRoLnJvdW5kKHRo'@;
put 'aXMudmlld3BvcnRXaWR0aC1yZSkpfX1mdW5jdGlvbiBiNmUoYyxsLGEpeyhmdW5jdGlvbiB1NXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxs'@;
put 'KSxsLnNldChjLGEpfWZ1bmN0aW9uIF9lZShjLGwpe3JldHVybiBjLmdldChfNmUoYyxsKSl9ZnVuY3Rpb24gWEgoYyxsLGEpe3JldHVybiBjLnNldChfNmUoYyxsKSxhKSxhfWZ1bmN0aW9uIF82ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu'@;
put 'IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHFIPW5ldyBXZWFrTWFwLFNBPW5ldyBXZWFrTWFwO2NsYXNzIGQ1dCBleHRlbmRzIHk2ZXtjb25zdHJ1Y3Rvcigpe3N1'@;
put 'cGVyKC4uLmFyZ3VtZW50cyksYjZlKHRoaXMscUgsMCksYjZlKHRoaXMsU0EsLTEpfXByZXBhcmUobCl7c3VwZXIucHJlcGFyZShsKSxYSChxSCx0aGlzLDApLFhIKFNBLHRoaXMsLTEpfXNldENvbHVtbkJhc2VXaWR0aChsLGEpe3N1cGVyLnNldENvbHVtbkJhc2VXaWR0aChsLGEpLFhIKFNB'@;
put 'LHRoaXMsbCksWEgocUgsdGhpcyxhKX1jYWxjdWxhdGUoKXtpZigtMT09PV9lZShTQSx0aGlzKSlyZXR1cm47Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChkLGgpPT57bGV0WyxmXT1oO3JldHVybiBkK2Z9LDApLGE9TWF0aC5tYXgodGhpcy52aWV3cG9ydFdp'@;
put 'ZHRoLWwrX2VlKHFILHRoaXMpLDApO3RoaXMuc3RyZXRjaGVkV2lkdGhzLnNldChfZWUoU0EsdGhpcyksYSl9fWZ1bmN0aW9uIEpIKGMsbCxhKXt3NmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHc2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0'@;
put 'aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gY3UoYyxsKXtyZXR1cm4gYy5nZXQoX3coYyxsKSl9ZnVuY3Rpb24gd2VlKGMsbCxhKXtyZXR1cm4gYy5zZXQoX3coYyxsKSxhKSxhfWZ1bmN0aW9uIF93KGMsbCxhKXtpZigiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTTE9bmV3IFdlYWtNYXAsd3c9bmV3IFdlYWtNYXAs'@;
put 'Q2VlPW5ldyBXZWFrTWFwLFFIPW5ldyBXZWFrTWFwLE1BPW5ldyBXZWFrU2V0O2NsYXNzIHA1dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gaDV0KGMsbCl7dzZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLE1BKSxKSCh0aGlzLE0xLHZvaWQgMCksSkgodGhpcyx3dyx2b2lkIDApLEpIKHRoaXMs'@;
put 'Q2VlLG5ldyBNYXAoW1siYWxsIixuZXcgYzV0KF93KE1BLHRoaXMsQzZlKS5iaW5kKHRoaXMpKV0sWyJsYXN0IixuZXcgZDV0KF93KE1BLHRoaXMsQzZlKS5iaW5kKHRoaXMpKV1dKSksSkgodGhpcyxRSCwibm9uZSIpLHdlZShNMSx0aGlzLGwpLHdlZSh3dyx0aGlzLGN1KE0xLHRoaXMpLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoInN0cmV0Y2hDb2x1bW5zIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKSl9dXNlU3RyYXRlZ3kobCl7d2VlKFFILHRoaXMsY3UoQ2VlLHRoaXMpLmhhcyhsKT9sOiJub25lIil9cmVmcmVzaFN0cmV0Y2hpbmcoKXsibm9u'@;
put 'ZSIhPT1jdShRSCx0aGlzKT9jdShNMSx0aGlzKS5iYXRjaEV4ZWN1dGlvbigoKT0+e2N1KHd3LHRoaXMpLmNsZWFyKCk7Y29uc3QgbD1jdShDZWUsdGhpcykuZ2V0KGN1KFFILHRoaXMpKTtsZXQgZD1jdShNMSx0aGlzKS52aWV3LmdldFZpZXdwb3J0V2lkdGgoKTtfdyhNQSx0aGlzLGc1dCku'@;
put 'Y2FsbCh0aGlzKSYmKGQtPWQwKGN1KE0xLHRoaXMpLnJvb3REb2N1bWVudCkpLGwucHJlcGFyZSh7dmlld3BvcnRXaWR0aDpkfSk7Zm9yKGxldCBoPTA7aDxjdShNMSx0aGlzKS5jb3VudENvbHMoKTtoKyspY3UoTTEsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oY3UoTTEsdGhp'@;
put 'cykudG9QaHlzaWNhbENvbHVtbihoKSl8fGwuc2V0Q29sdW1uQmFzZVdpZHRoKGgsX3coTUEsdGhpcyxtNXQpLmNhbGwodGhpcyxoKSk7bC5jYWxjdWxhdGUoKSxsLmdldFdpZHRocygpLmZvckVhY2goaD0+e2xldFtmLHZdPWg7Y3Uod3csdGhpcykuc2V0VmFsdWVBdEluZGV4KGN1KE0xLHRo'@;
put 'aXMpLnRvUGh5c2ljYWxDb2x1bW4oZiksdil9KX0sITApOmN1KHd3LHRoaXMpLmNsZWFyKCl9Z2V0U3RyZXRjaGVkV2lkdGgobCl7cmV0dXJuIGN1KHd3LHRoaXMpLmdldFZhbHVlQXRJbmRleChjdShNMSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGwpKX19ZnVuY3Rpb24gZzV0KCl7Y29uc3R7'@;
put 'dmlldzpjLHN0eWxlc0hhbmRsZXI6bH09Y3UoTTEsdGhpcyk7aWYoYy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSlyZXR1cm4hMTtjb25zdCBhPWMuZ2V0Vmlld3BvcnRIZWlnaHQoKSxkPWN1KE0xLHRoaXMpLmNvdW50Um93cygpLGg9bC5nZXREZWZhdWx0Um93SGVpZ2h0KCk7'@;
put 'bGV0IGY9MCx2PSExO2ZvcihsZXQgST0wO0k8ZDtJKyspe3ZhciBNO2lmKGYrPShudWxsIT09KE09Y3UoTTEsdGhpcykuZ2V0Um93SGVpZ2h0KEkpKSYmdm9pZCAwIT09TT9NOmgpKygwPT09ST8xOjApLGY+YSl7dj0hMDticmVha319cmV0dXJuIHZ9ZnVuY3Rpb24gbTV0KGMpe3ZhciBsO3Jl'@;
put 'dHVybiBudWxsIT09KGw9Y3UoTTEsdGhpcykuZ2V0Q29sV2lkdGgoYywiU3RyZXRjaENvbHVtbnMiKSkmJnZvaWQgMCE9PWw/bDpiX31mdW5jdGlvbiBDNmUoYyxsKXtyZXR1cm4gY3UoTTEsdGhpcykucnVuSG9va3MoImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYyxsKX1mdW5jdGlv'@;
put 'biBTZWUoYyxsLGEpe1M2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUzZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBNZWUoYyxs'@;
put 'LGEpe3JldHVybiBjLnNldChlTihjLGwpLGEpLGF9ZnVuY3Rpb24gWWcoYyxsKXtyZXR1cm4gYy5nZXQoZU4oYyxsKSl9ZnVuY3Rpb24gZU4oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBDdz1uZXcgV2Vha01hcCx0Tj1uZXcgV2Vha01hcCx4QT1uZXcgV2Vha01hcCx4ZWU9bmV3IFdlYWtTZXQ7Y2xhc3MgXzV0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBl'@;
put 'ciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHY1dChjLGwpe1M2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLHhlZSksU2VlKHRoaXMsQ3csbmV3IHA1dCh0aGlzLmhvdCkpLFNlZSh0aGlzLHROLG51bGwpLFNlZSh0aGlzLHhBLG5ldyBSZXNpemVPYnNlcnZlcihsPT57cmVxdWVzdEFuaW1hdGlvbkZy'@;
put 'YW1lKCgpPT57dmFyIGE7bnVsbCE9PShhPXRoaXMuaG90KSYmdm9pZCAwIT09YSYmYS52aWV3LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJmwuZm9yRWFjaChkPT57bGV0e2NvbnRlbnRSZWN0Omh9PWQ7bnVsbCE9PVlnKHROLHRoaXMpJiZZZyh0Tix0aGlzKSE9PWgud2lk'@;
put 'dGgmJih0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpLE1lZSh0Tix0aGlzLGgud2lkdGgpfSl9KX0pKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ic3RyZXRjaENvbHVtbnMifXN0YXRpYyBnZXQgUExVR0lOX1BS'@;
put 'SU9SSVRZKCl7cmV0dXJuIDE1NX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVyblsiYWxsIiwibGFzdCJdLmluY2x1ZGVzKHRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFi'@;
put 'bGVkfHwoWWcoQ3csdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksWWcoeEEsdGhpcykub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGVOKHhlZSxsLEM1dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJh'@;
put 'eShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZU4oeGVlLGwsdzV0KS5jYWxsKGwsLi4uZCl9LDEwKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7WWcoQ3csdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNo'@;
put 'SCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSxZZyh4QSx0aGlzKS51bm9ic2VydmUodGhpcy5ob3Qucm9vdEVsZW1lbnQpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiBZZyhDdyx0aGlzKS5nZXRTdHJldGNoZWRXaWR0aChsKX1k'@;
put 'ZXN0cm95KCl7WWcoeEEsdGhpcykuZGlzY29ubmVjdCgpLE1lZSh4QSx0aGlzLG51bGwpLE1lZShDdyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdzV0KGMsbCxhKXtpZihhPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Q29sdW1uV2lkdGgo'@;
put 'bCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBkP2Q6Y31mdW5jdGlvbiBDNXQoYyl7YyYmWWcoQ3csdGhpcykucmVmcmVzaFN0cmV0Y2hpbmcoKX1mdW5jdGlvbiBuTihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geDV0KGMpe3ZhciBsPWZ1bmN0aW9uIEU1dChjLGwpe2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy'@;
put 'ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6'@;
put 'ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRWVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l'@;
put 'bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgck49bmV3IFdlYWtTZXQ7Y2xhc3MgazV0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFM1dChjLGwpeyhmdW5jdGlvbiBNNXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxyTiksbk4odGhpcywic2Nyb2xsYmFycyIsW10pLG5OKHRoaXMsImNsb25lcyIsW10pLG5OKHRoaXMsImxvY2tl'@;
put 'ZENvbGxlY3Rpb24iLCExKSxuTih0aGlzLCJmcmVlemVPdmVybGF5cyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ0b3VjaFNjcm9sbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjAwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9'@;
put 'aXNFbmFibGVkKCl7cmV0dXJuIHckKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT5FZWUock4sdGhpcyxENXQpLmNhbGwodGhpcykpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBk'@;
put 'YXRlUGx1Z2luKCl7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIiwoKT0+RWVlKHJOLHRoaXMsSTV0'@;
put 'KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTW9tZW50dW1TY3JvbGwiLCgpPT5FZWUock4sdGhpcyxSNXQpLmNhbGwodGhpcykpfX1mdW5jdGlvbiBENXQoKXtpZih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6Yyxib3R0b21PdmVybGF5Omws'@;
put 'aW5saW5lU3RhcnRPdmVybGF5OmEsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmQsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0'@;
put 'aGlzLnNjcm9sbGJhcnMucHVzaChjKSxsLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChsKSx0aGlzLnNjcm9sbGJhcnMucHVzaChhKSxkJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChkKSxoJiZoLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSx0aGlzLmNsb25lcz1bXSxjLm5lZWRG'@;
put 'dWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksbC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChsLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1'@;
put 'c2goYS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxkJiZ0aGlzLmNsb25lcy5wdXNoKGQuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksaCYmaC5jbG9uZSYmdGhpcy5jbG9uZXMucHVzaChoLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpfWZ1bmN0aW9u'@;
put 'IEk1dCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITAsS24odGhpcy5jbG9uZXMsYz0+e0VpKGMsImhpZGUtdHdlZW4iKX0pfWZ1bmN0aW9uIFI1dCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITEsS24odGhpcy5jbG9uZXMsYz0+e2hzKGMsImhpZGUtdHdlZW4iKSxFaShjLCJzaG93LXR3ZWVuIil9'@;
put 'KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57S24odGhpcy5jbG9uZXMsYz0+e2hzKGMsInNob3ctdHdlZW4iKX0pfSw0MDApLEtuKHRoaXMuc2Nyb2xsYmFycyxjPT57Yy5yZWZyZXNoKCksYy5yZXNldEZpeGVkUG9zaXRpb24oKX0pLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3Zlcmxh'@;
put 'eXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKX1jb25zdCBpTj0idHJpbVJvd3MiO3ZhciBNNmU9bmV3IFdlYWtTZXQ7Y2xhc3MgQjV0IGV4dGVuZHMgRm97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEw1dChjLGwpeyhmdW5jdGlvbiBPNXQoYyxsKXtpZihsLmhh'@;
put 'cyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxNNmUpLGZ1bmN0aW9uIFA1dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRjV0KGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uIEg1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInRyaW1tZWRSb3dzTWFwIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gaU59c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJ'@;
put 'VFkoKXtyZXR1cm4gMzMwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtpTl19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy50cmltbWVkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgidHJpbVJvd3MiLG5ldyBx'@;
put 'RSksdGhpcy50cmltbWVkUm93c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5mdW5jdGlvbiBONXQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUg'@;
put 'ZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShNNmUsdGhpcyxqNXQpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbaU5dO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90'@;
put 'LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy50cmltbWVkUm93c01hcC5jbGVhcigpLEtuKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBw'@;
put 'ZXIudW5yZWdpc3Rlck1hcCgidHJpbVJvd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5p'@;
put 'c1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57S24obCx2PT57dGhpcy50cmltbWVk'@;
put 'Um93c01hcC5zZXRWYWx1ZUF0SW5kZXgodiwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9dHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFb'@;
put 'ZF09YXJndW1lbnRzW2RdO3RoaXMudHJpbVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5n'@;
put 'dGg+MDtkJiZ2JiYoS24obCxJPT57ZltJXT0hMX0pLGg9R3UoZiwoSSxHLHJlKT0+KEcmJkkucHVzaChyZSksSSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbnRyaW1Sb3ciLGEsaCxkJiZ2KSYmKGQmJnYmJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVzKGYpLHRo'@;
put 'aXMuaG90LnJ1bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnVudHJpbVJvd3Mo'@;
put 'YSl9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChsKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50U291cmNlUm93'@;
put 'cygpO3JldHVybiBsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gajV0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2lOXTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhvdC5iYXRjaEV4'@;
put 'ZWN1dGlvbigoKT0+e0tuKGMsbD0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGwsITApfSl9LCEwKX1jbGFzcyBsZntjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gejV0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVNXQoYyl7dmFyIGw9ZnVuY3Rpb24gWjV0KGMsbCl7'@;
put 'aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By'@;
put 'aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVl'@;
put 'OmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImFjdGlvblR5cGUiLCIiKSx0aGlzLmFjdGlvblR5cGU9bH11bmRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX1yZWRvKCl7dGhyb3cgbmV3IEVycm9yKCJO'@;
put 'b3QgaW1wbGVtZW50ZWQiKX19ZnVuY3Rpb24gYU4oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFc1dChjKXt2YXIgbD1mdW5jdGlvbiBZNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2'@;
put 'YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9'@;
put 'KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRlZSBleHRlbmRzIGxme2Nv'@;
put 'bnN0cnVjdG9yKGwpe2xldHtzdGF0ZUJlZm9yZTphLHJhbmdlOmQsdHlwZTpoLGFsaWdubWVudDpmfT1sO3N1cGVyKCJjZWxsX2FsaWdubWVudCIpLGFOKHRoaXMsInN0YXRlQmVmb3JlIix2b2lkIDApLGFOKHRoaXMsInJhbmdlIix2b2lkIDApLGFOKHRoaXMsInR5cGUiLHZvaWQgMCksYU4o'@;
put 'dGhpcywiYWxpZ25tZW50Iix2b2lkIDApLHRoaXMuc3RhdGVCZWZvcmU9YSx0aGlzLnJhbmdlPWQsdGhpcy50eXBlPWgsdGhpcy5hbGlnbm1lbnQ9Zn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKGQsaCxmLHYpPT57'@;
put 'YS5kb25lKCgpPT5uZXcgVGVlKHtzdGF0ZUJlZm9yZTpkLHJhbmdlOmgsdHlwZTpmLGFsaWdubWVudDp2fSkpfSl9dW5kbyhsLGEpe0tuKHRoaXMucmFuZ2UsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmbC5zZXRDZWxsTWV0YShoLGYsImNsYXNzTmFtZSIsdGhpcy5zdGF0ZUJl'@;
put 'Zm9yZVtoXVtmXXx8IiBodExlZnQiKX0pfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfXJlZG8obCxhKXtYbSh0aGlzLnJhbmdlLHRoaXMudHlwZSx0aGlzLmFsaWdubWVudCwoZCxoKT0+bC5nZXRDZWxsTWV0YShkLGgpLChkLGgsZix2KT0+bC5zZXRD'@;
put 'ZWxsTWV0YShkLGgsZix2KSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfX1mdW5jdGlvbiB4NmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEc1dChjKXt2YXIgbD1mdW5jdGlvbiAkNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy'@;
put 'biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl'@;
put 'IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEFlZSBleHRlbmRzIGxme2NvbnN0cnVjdG9yKGwpe2xldHtjb2x1bW5zOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJjb2xfbW92ZSIpLHg2ZSh0aGlzLCJjb2x1bW5zIix2b2lkIDApLHg2ZSh0aGlzLCJmaW5hbENvbHVtbkluZGV4Iix2'@;
put 'b2lkIDApLHRoaXMuY29sdW1ucz1hLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBBZWUoe2NvbHVtbnM6ZCxm'@;
put 'aW5hbEluZGV4Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksUlEodGhpcy5jb2x1bW5zLHRoaXMuZmluYWxDb2x1bW5JbmRleCxsLmNvbHVtbkluZGV4TWFwcGVyLmdldE51'@;
put 'bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZUNvbHVtbihNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbMF0sdGhpcy5jb2x1bW5zWzBd'@;
put 'K3RoaXMuY29sdW1ucy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZUNvbHVtbnModGhpcy5jb2x1bW5zLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4'@;
put 'KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RDb2x1bW5zKHRoaXMuZmluYWxDb2x1bW5JbmRleCx0aGlzLmZpbmFsQ29sdW1uSW5kZXgrdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX19ZnVuY3Rpb24gRTZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLNXQoYyl7dmFyIGw9'@;
put 'ZnVuY3Rpb24gWDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZWUgZXh0ZW5kcyBsZntjb25zdHJ1Y3RvcihsKXtsZXR7Y3VycmVudFNvcnRTdGF0ZTphLG5ld1NvcnRTdGF0ZTpkfT1sO3N1cGVyKCJjb2xfc29y'@;
put 'dCIpLEU2ZSh0aGlzLCJwcmV2aW91c1NvcnRTdGF0ZSIsdm9pZCAwKSxFNmUodGhpcywibmV4dFNvcnRTdGF0ZSIsdm9pZCAwKSx0aGlzLnByZXZpb3VzU29ydFN0YXRlPWEsdGhpcy5uZXh0U29ydFN0YXRlPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2so'@;
put 'ImJlZm9yZUNvbHVtblNvcnQiLChkLGgsZik9PntmJiZhLmRvbmUoKCk9Pm5ldyBrZWUoe2N1cnJlbnRTb3J0U3RhdGU6ZCxuZXdTb3J0U3RhdGU6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigibXVsdGlDb2x1bW5T'@;
put 'b3J0aW5nIiksZj1oLmlzRW5hYmxlZCgpP2g6ZDt0aGlzLnByZXZpb3VzU29ydFN0YXRlLmxlbmd0aD9mLnNvcnQodGhpcy5wcmV2aW91c1NvcnRTdGF0ZSk6Zi5jbGVhclNvcnQoKSxhKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmciKSxoPWwuZ2V0UGx1'@;
put 'Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKTsoaC5pc0VuYWJsZWQoKT9oOmQpLnNvcnQodGhpcy5uZXh0U29ydFN0YXRlKSxhKCl9fWZ1bmN0aW9uIFQ2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcTV0KGMpe3ZhciBsPWZ1bmN0aW9uIEo1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'Y3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4g'@;
put 'YSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29u'@;
put 'ZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgRGVlIGV4dGVuZHMgbGZ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImluc2VydF9jb2wiKSxUNmUodGhpcywiaW5kZXgiLHZvaWQgMCksVDZlKHRoaXMsImFtb3VudCIsdm9pZCAw'@;
put 'KSx0aGlzLmluZGV4PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChkLGgsZik9PnthLmRvbmUoKCk9Pm5ldyBEZWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxhKXtsLmFkZEhvb2tP'@;
put 'bmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZUNvbCIsYSksbC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRl'@;
put 'eCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBBNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFE1dChjKXt2YXIgbD1mdW5jdGlvbiBlbXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp'@;
put 'Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry'@;
put 'aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEll'@;
put 'ZSBleHRlbmRzIGxme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGFtb3VudDpkfT1sO3N1cGVyKCJpbnNlcnRfcm93IiksQTZlKHRoaXMsImluZGV4Iix2b2lkIDApLEE2ZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3RhdGljIHN0YXJ0UmVn'@;
put 'aXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoZCxoLGYpPT57YS5kb25lKCgpPT5uZXcgSWVlKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmNvdW50Um93cygpLGg9bC5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93czt0'@;
put 'aGlzLmluZGV4Pj1kJiZ0aGlzLmluZGV4LWg8ZCYmKHRoaXMuaW5kZXgtPWgpLGwuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2Uo'@;
put 'ImFmdGVyQ3JlYXRlUm93IixhKSxsLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHNOKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0bXQoYyl7dmFyIGw9ZnVuY3Rpb24gbm10KGMsbCl7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt'@;
put 'dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy'@;
put 'YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBSZWUgZXh0ZW5kcyBsZntjb25zdHJ1Y3RvcihsKXtsZXR7Y2hhbmdlczphLHNlbGVjdGVkOmQsY291bnRDb2xzOmgsY291bnRSb3dzOmZ9PWw7c3VwZXIoImNoYW5nZSIpLHNOKHRoaXMsImNoYW5n'@;
put 'ZXMiLHZvaWQgMCksc04odGhpcywic2VsZWN0ZWQiLHZvaWQgMCksc04odGhpcywiY291bnRDb2xzIix2b2lkIDApLHNOKHRoaXMsImNvdW50Um93cyIsdm9pZCAwKSx0aGlzLmNoYW5nZXM9YSx0aGlzLnNlbGVjdGVkPWQsdGhpcy5jb3VudENvbHM9aCx0aGlzLmNvdW50Um93cz1mfXN0YXRp'@;
put 'YyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1kJiZkLmxlbmd0aDtmJiZkLmZpbmQoST0+e2NvbnN0WywsRyxyZV09STtyZXR1cm4gRyE9PXJlfSkmJmEuZG9uZSgoKT0+e2NvbnN0IEk9ZC5yZWR1Y2Uo'@;
put 'KHJlLHVlKT0+KHJlLnB1c2goWy4uLnVlXSkscmUpLFtdKTtJLmZvckVhY2gocmU9PntyZVsxXT1sLnByb3BUb0NvbChyZVsxXSl9KTtjb25zdCBHPWY+MT90aGlzLmdldFNlbGVjdGVkKCk6W1tJWzBdWzBdLElbMF1bMV1dXTtyZXR1cm4gbmV3IFJlZSh7Y2hhbmdlczpJLHNlbGVjdGVkOkcs'@;
put 'Y291bnRDb2xzOmwuY291bnRDb2xzKCksY291bnRSb3dzOmwuY291bnRSb3dzKCl9KX0saCl9KX11bmRvKGwsYSl7Y29uc3QgZD1wMSh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgdj0wLE09ZC5sZW5ndGg7djxNO3YrKylkW3ZdLnNwbGljZSgzLDEpO2wuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdl'@;
put 'IixhKSxsLnNldERhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBoPWwuY291bnRSb3dzKCktdGhpcy5jb3VudFJvd3M7aD4wJiZsLmFsdGVyKCJyZW1vdmVfcm93IixudWxsLGgsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBmPWwuY291bnRDb2xzKCktdGhpcy5j'@;
put 'b3VudENvbHM7Zj4wJiZsLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpJiZsLmFsdGVyKCJyZW1vdmVfY29sIixudWxsLGYsIlVuZG9SZWRvLnVuZG8iKSxsLnNjcm9sbFRvRm9jdXNlZENlbGwoKSxsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfXJlZG8obCxhKXtjb25z'@;
put 'dCBkPXAxKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCBoPTAsZj1kLmxlbmd0aDtoPGY7aCsrKWRbaF0uc3BsaWNlKDIsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGEpLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpLHRoaXMuc2VsZWN0ZWQmJmwuc2Vs'@;
put 'ZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9fWZ1bmN0aW9uIGs2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcm10KGMpe3ZhciBsPWZ1bmN0aW9uIGltdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm'@;
put 'KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp'@;
put 'bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTGVl'@;
put 'IGV4dGVuZHMgbGZ7Y29uc3RydWN0b3IobCl7bGV0e2NvbmRpdGlvbnNTdGFjazphLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmR9PWw7c3VwZXIoImZpbHRlciIpLGs2ZSh0aGlzLCJjb25kaXRpb25zU3RhY2siLHZvaWQgMCksazZlKHRoaXMsInByZXZpb3VzQ29uZGl0aW9uc1N0YWNrIix2'@;
put 'b2lkIDApLHRoaXMuY29uZGl0aW9uc1N0YWNrPWEsdGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjaz1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLChkLGgpPT57YS5kb25lKCgpPT5uZXcgTGVlKHtjb25kaXRpb25zU3RhY2s6'@;
put 'ZCxwcmV2aW91c0NvbmRpdGlvbnNTdGFjazpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQuaW1wb3J0Q29uZGl0aW9ucyh0aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0YWNrKSxkLmZpbHRl'@;
put 'cigpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLmltcG9ydENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2spLGQuZmlsdGVyKCl9fWNsYXNzIE9lZSBleHRlbmRzIGxme2NvbnN0cnVjdG9y'@;
put 'KGwpe2xldHtkYXRhOmEsY2VsbFJhbmdlOmR9PWw7c3VwZXIoIm1lcmdlX2NlbGxzIiksZnVuY3Rpb24gYW10KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBzbXQoYyl7dmFyIGw9ZnVuY3Rpb24gb210KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1'@;
put 'cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9'@;
put 'KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWQsdGhpcy5kYXRhPWF9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZU1lcmdlQ2VsbHMiLChkLGgpPT57aWYoaClyZXR1cm47Y29uc3QgZj1kLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCksdj1kLmdldEJvdHRvbUVuZENvcm5lcigpLE09bC5nZXREYXRhKGYucm93LGYuY29sLHYucm93LHYuY29sKTthLmRvbmUoKCk9Pm5ldyBPZWUoe2RhdGE6TSxjZWxsUmFuZ2U6ZH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7'@;
put 'bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCk7Y29uc3QgaD10aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO2wucG9wdWxhdGVGcm9tQXJyYXkoaC5yb3csaC5jb2wsdGhpcy5kYXRhLHZvaWQgMCx2b2lk'@;
put 'IDAsIk1lcmdlQ2VsbHMiKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlKX19ZnVuY3Rpb24gRDZlKGMsbCxhLGQsaCl7Y29uc3QgZj1bInZpc3Vh'@;
put 'bFJvdyIsInZpc3VhbENvbCIsInJvdyIsImNvbCIsInByb3AiXSx2PWYubGVuZ3RoLE09W107cmV0dXJuIEthKGQsaCxJPT57S2EobCxhLEc9Pntjb25zdCByZT1jLmdldENlbGxNZXRhKEcsSSk7aWYoT2JqZWN0LmtleXMocmUpLmxlbmd0aCE9PXYpe2NvbnN0IHVlPU9iamVjdC5mcm9tRW50'@;
put 'cmllcyhPYmplY3QuZW50cmllcyhyZSkuZmlsdGVyKHllPT57bGV0W0VlXT15ZTtyZXR1cm4hMT09PWYuaW5jbHVkZXMoRWUpfSkpO00ucHVzaChbcmUudmlzdWFsUm93LHJlLnZpc3VhbENvbCx1ZV0pfX0pfSksTX1mdW5jdGlvbiBHZyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbG10KGMp'@;
put 'e3ZhciBsPWZ1bmN0aW9uIGNtdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUGVlIGV4dGVuZHMgbGZ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsaW5kZXhlczpkLGRhdGE6aCxhbW91bnQ6ZixoZWFkZXJzOnYs'@;
put 'Y29sdW1uUG9zaXRpb25zOk0scm93UG9zaXRpb25zOkksZml4ZWRDb2x1bW5zU3RhcnQ6RyxyZW1vdmVkQ2VsbE1ldGFzOnJlfT1sO3N1cGVyKCJyZW1vdmVfY29sIiksR2codGhpcywiaW5kZXgiLHZvaWQgMCksR2codGhpcywiaW5kZXhlcyIsdm9pZCAwKSxHZyh0aGlzLCJkYXRhIix2b2lk'@;
put 'IDApLEdnKHRoaXMsImFtb3VudCIsdm9pZCAwKSxHZyh0aGlzLCJoZWFkZXJzIix2b2lkIDApLEdnKHRoaXMsImNvbHVtblBvc2l0aW9ucyIsdm9pZCAwKSxHZyh0aGlzLCJyb3dQb3NpdGlvbnMiLHZvaWQgMCksR2codGhpcywiZml4ZWRDb2x1bW5zU3RhcnQiLHZvaWQgMCksR2codGhpcywi'@;
put 'cmVtb3ZlZENlbGxNZXRhcyIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5pbmRleGVzPWQsdGhpcy5kYXRhPWgsdGhpcy5hbW91bnQ9Zix0aGlzLmhlYWRlcnM9dix0aGlzLmNvbHVtblBvc2l0aW9ucz1NLnNsaWNlKDApLHRoaXMucm93UG9zaXRpb25zPUkuc2xpY2UoMCksdGhpcy5maXhl'@;
put 'ZENvbHVtbnNTdGFydD1HLHRoaXMucmVtb3ZlZENlbGxNZXRhcz1yZX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pntjb25zdCBJPWwuZ2V0U291cmNlRGF0YUFycmF5KCksRz0obC5j'@;
put 'b3VudENvbHMoKStkKSVsLmNvdW50Q29scygpLHJlPUcraC0xLHVlPVtdLHllPVtdLEVlPVtdO3JldHVybiBLYShJLmxlbmd0aC0xLEJlPT57Y29uc3QgR2U9W10sc3Q9SVtCZV07S2EoRyxyZSxwdD0+e0dlLnB1c2goc3RbbC50b1BoeXNpY2FsQ29sdW1uKHB0KV0pfSksdWUucHVzaChHZSl9'@;
put 'KSxLYShoLTEsQmU9PntFZS5wdXNoKGwudG9QaHlzaWNhbENvbHVtbihHK0JlKSl9KSxBcnJheS5pc0FycmF5KGwuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzKSYmS2EoaC0xLEJlPT57eWUucHVzaChsLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1tsLnRvUGh5c2ljYWxDb2x1bW4oRytCZSld'@;
put 'fHxudWxsKX0pLG5ldyBQZWUoe2luZGV4OkcsaW5kZXhlczpFZSxkYXRhOnVlLGFtb3VudDpoLGhlYWRlcnM6eWUsY29sdW1uUG9zaXRpb25zOmwuY29sdW1uSW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkscm93UG9zaXRpb25zOmwucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1Nl'@;
put 'cXVlbmNlKCksZml4ZWRDb2x1bW5zU3RhcnQ6bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LHJlbW92ZWRDZWxsTWV0YXM6RDZlKGwsMCxsLmNvdW50Um93cygpLEcscmUpfSl9LHYpfSl9dW5kbyhsLGEpe2wuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD10aGlzLmZp'@;
put 'eGVkQ29sdW1uc1N0YXJ0O2NvbnN0IGg9dGhpcy5pbmRleGVzLnNsaWNlKDApLnNvcnQoKSxmPShyZSx1ZSx5ZSk9PnllW3RoaXMuaW5kZXhlcy5pbmRleE9mKGhbdWVdKV0sdj10aGlzLmRhdGEubGVuZ3RoLE09W107Zm9yKGxldCByZT0wO3JlPHY7cmUrKylNLnB1c2goeW8odGhpcy5kYXRh'@;
put 'W3JlXSxmKSk7Y29uc3QgST15byh0aGlzLmhlYWRlcnMsZiksRz1bXTtsLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyksbC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsbC50b1Zpc3VhbENvbHVtbih0aGlzLmluZGV4ZXNbMF0pLHRo'@;
put 'aXMuaW5kZXhlcy5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxsLmJhdGNoRXhlY3V0aW9uKCgpPT57bC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dQb3NpdGlvbnMpLGwuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9z'@;
put 'aXRpb25zKX0sITApLEtuKGwuZ2V0U291cmNlRGF0YUFycmF5KCksKHJlLHVlKT0+e0tuKGgsKHllLEVlKT0+e3JlW3llXT1NW3VlXVtFZV0sRy5wdXNoKFt1ZSx5ZSxyZVt5ZV1dKX0pfSksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJktuKEksKHJlLHVlKT0+e2wuZ2V0U2V0dGluZ3MoKS5j'@;
put 'b2xIZWFkZXJzW2hbdWVdXT1yZX0pLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKHJlPT57bGV0W3VlLHllLEVlXT1yZTtsLnNldENlbGxNZXRhT2JqZWN0KHVlLHllLEVlKX0pLGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5zZXRTb3VyY2VEYXRhQXRDZWxsKEcs'@;
put 'bnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixhKSxsLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIFN3KGMsbCxhKXtyZXR1cm4obD1mdW5j'@;
put 'dGlvbiB1bXQoYyl7dmFyIGw9ZnVuY3Rpb24gZG10KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQp'@;
put 'cmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlp'@;
put 'biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBGZWUgZXh0ZW5kcyBsZntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxkYXRhOmQsZml4ZWRSb3dzQm90dG9tOmgs'@;
put 'Zml4ZWRSb3dzVG9wOmYscm93SW5kZXhlc1NlcXVlbmNlOnYscmVtb3ZlZENlbGxNZXRhczpNfT1sO3N1cGVyKCJyZW1vdmVfcm93IiksU3codGhpcywiaW5kZXgiLHZvaWQgMCksU3codGhpcywiZGF0YSIsdm9pZCAwKSxTdyh0aGlzLCJmaXhlZFJvd3NCb3R0b20iLHZvaWQgMCksU3codGhp'@;
put 'cywiZml4ZWRSb3dzVG9wIix2b2lkIDApLFN3KHRoaXMsInJvd0luZGV4ZXNTZXF1ZW5jZSIsdm9pZCAwKSxTdyh0aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmRhdGE9ZCx0aGlzLmZpeGVkUm93c0JvdHRvbT1oLHRoaXMuZml4ZWRSb3dzVG9wPWYs'@;
put 'dGhpcy5yb3dJbmRleGVzU2VxdWVuY2U9dix0aGlzLnJlbW92ZWRDZWxsTWV0YXM9TX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pntjb25zdCBJPWwudG9QaHlzaWNhbFJvdyhkKSxH'@;
put 'PUkraC0xLHJlPXAxKGwuZ2V0U291cmNlRGF0YShJLDAsSStoLTEsbC5jb3VudFNvdXJjZUNvbHMoKS0xKSk7cmV0dXJuIG5ldyBGZWUoe2luZGV4OkksZGF0YTpyZSxmaXhlZFJvd3NCb3R0b206bC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSxmaXhlZFJvd3NUb3A6bC5nZXRTZXR0'@;
put 'aW5ncygpLmZpeGVkUm93c1RvcCxyb3dJbmRleGVzU2VxdWVuY2U6bC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyZW1vdmVkQ2VsbE1ldGFzOkQ2ZShsLEksRywwLGwuY291bnRDb2xzKCktMSl9KX0sdil9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFNldHRpbmdzKCks'@;
put 'aD1bXTtkLmZpeGVkUm93c0JvdHRvbT10aGlzLmZpeGVkUm93c0JvdHRvbSxkLmZpeGVkUm93c1RvcD10aGlzLmZpeGVkUm93c1RvcCx0aGlzLmRhdGEuZm9yRWFjaCgoZix2KT0+e09iamVjdC5rZXlzKGYpLmZvckVhY2goTT0+e2NvbnN0IEk9cGFyc2VJbnQoTSwxMCk7aC5wdXNoKFt0aGlz'@;
put 'LmluZGV4K3YsaXNOYU4oSSk/TTpJLGZbTV1dKX0pfSksbC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLGwuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGwudG9WaXN1YWxSb3codGhpcy5pbmRleCksdGhpcy5kYXRhLmxlbmd0aCwi'@;
put 'VW5kb1JlZG8udW5kbyIpLGwucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKSx0aGlzLnJlbW92ZWRDZWxsTWV0YXMuZm9yRWFjaChmPT57bGV0W3YsTSxJXT1mO2wuc2V0Q2VsbE1ldGFPYmplY3QodixNLEkpfSksbC5hZGRIb29rT25j'@;
put 'ZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnNldFNvdXJjZURhdGFBdENlbGwoaCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGEpLGwuYWx0ZXIoInJlbW92ZV9yb3ciLGwudG9WaXN1YWxSb3codGhpcy5pbmRleCks'@;
put 'dGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBJNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGhtdChjKXt2YXIgbD1mdW5jdGlvbiBmbXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl'@;
put 'XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/'@;
put 'U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNz'@;
put 'IEhlZSBleHRlbmRzIGxme2NvbnN0cnVjdG9yKGwpe2xldHtyb3dzOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJyb3dfbW92ZSIpLEk2ZSh0aGlzLCJyb3dzIix2b2lkIDApLEk2ZSh0aGlzLCJmaW5hbFJvd0luZGV4Iix2b2lkIDApLHRoaXMucm93cz1hLnNsaWNlKCksdGhpcy5maW5hbFJv'@;
put 'd0luZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBIZWUoe3Jvd3M6ZCxmaW5hbEluZGV4Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFu'@;
put 'dWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksUlEodGhpcy5yb3dzLHRoaXMuZmluYWxSb3dJbmRleCxsLnJvd0luZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYm'@;
put 'KE0tPTEpLGQubW92ZVJvdyhNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLnJvd3NbMF0sdGhpcy5yb3dzWzBdK3RoaXMucm93cy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKTtsLmFkZEhv'@;
put 'b2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMuZmluYWxSb3dJbmRleCx0aGlzLmZpbmFsUm93SW5kZXgrdGhpcy5yb3dz'@;
put 'Lmxlbmd0aC0xKX19Y2xhc3MgTmVlIGV4dGVuZHMgbGZ7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSYW5nZTphfT1sO3N1cGVyKCJ1bm1lcmdlX2NlbGxzIiksZnVuY3Rpb24gcG10KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBnbXQoYyl7dmFyIGw9ZnVuY3Rpb24gbW10KGMsbCl7aWYoIm9i'@;
put 'amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2'@;
put 'ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51'@;
put 'bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWF9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyVW5tZXJnZUNlbGxzIiwoZCxoKT0+'@;
put 'e2h8fGEuZG9uZSgoKT0+bmV3IE5lZSh7Y2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX1yZWRvKGwsYSl7Y29u'@;
put 'c3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApLGwucmVuZGVyKCl9fWZ1bmN0aW9uIFZlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gX210KGMpe3ZhciBsPWZ1'@;
put 'bmN0aW9uIHdtdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gQmVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1NYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5kbyIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuZG8iKSxNYS5nZXRTaW5nbGV0b24oKS5y'@;
put 'ZWdpc3RlcigiYmVmb3JlUmVkbyIpLE1hLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJlZG8iKTtjb25zdCBMNmU9bmV3IFNldDt2YXIgamVlLHplZSxVZWUsWmVlLFdlZSxvTj1uZXcgV2Vha1NldDtjbGFzcyBNbXQgZXh0ZW5kcyBGb3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXty'@;
put 'ZXR1cm4idW5kb1JlZG8ifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDFlM31zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIHltdChjLGwpeyhmdW5jdGlvbiBibXQoYyxsKXtpZihsLmhhcyhjKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxvTiksVmVlKHRoaXMsImRvbmVBY3Rpb25zIixbXSksVmVlKHRoaXMsInVuZG9uZUFjdGlvbnMiLFtd'@;
put 'KSxWZWUodGhpcywiaWdub3JlTmV3QWN0aW9ucyIsITEpLGZ1bmN0aW9uIHZtdChjLGwpe1tUZWUsQWVlLGtlZSxEZWUsSWVlLFJlZSxMZWUsT2VlLFBlZSxGZWUsSGVlLE5lZV0uZm9yRWFjaChhPT5hLnN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoYyxsKSl9KGwsdGhpcyl9aXNFbmFibGVkKCl7'@;
put 'cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnVuZG99ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7'@;
put 'aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBCZWUob04sbCx4bXQpLmNhbGwobCwuLi5kKX0pLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxCZWUob04sdGhpcyxFbXQpLmNhbGwodGhpcyksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1'@;
put 'Z2luKCksdGhpcy5jbGVhcigpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLEJlZShvTix0aGlzLFRtdCkuY2FsbCh0aGlzKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltb'@;
put 'IkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6Zj0+IWYuYWx0S2V5LGdyb3Vw'@;
put 'OiJ1bmRvUmVkbyJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoInVuZG9SZWRvIil9ZG9uZShsLGEpe2lmKHRoaXMuaWdub3JlTmV3QWN0aW9uc3x8IlVuZG9SZWRv'@;
put 'LnVuZG8iPT09YXx8IlVuZG9SZWRvLnJlZG8iPT09YXx8ImF1dG8iPT09YSlyZXR1cm47Y29uc3QgaD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixoLGEpKXJldHVybjtjb25zdCB2PWwoKSxNPXRoaXMu'@;
put 'dW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaCh2KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGgsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixNKSx0aGlz'@;
put 'LnVuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixNLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX11bmRvKCl7aWYoIXRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5kb25lQWN0aW9ucy5zbGlj'@;
put 'ZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGwpO2NvbnN0IGE9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGwsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPXAxKGEpO2lm'@;
put 'KCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG8iLGQpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixmKSxhLnVuZG8odGhpcy5o'@;
put 'b3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy51bmRvbmVBY3Rpb25zLnB1c2goYSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG8iLGQp'@;
put 'fXJlZG8oKXtpZighdGhpcy5pc1JlZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgbD10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMudW5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGwsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGQ9cDEoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkbyIsZCkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBmPXRoaXMuZG9u'@;
put 'ZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixmKSxhLnJlZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0'@;
put 'YWNrQ2hhbmdlIixmLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkbyIsZCl9aXNVbmRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9aXNSZWRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMudW5kb25lQWN0aW9u'@;
put 'cy5sZW5ndGg+MH1jbGVhcigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wfWRlc3Ryb3koKXt0aGlzLmNsZWFyKCksdGhpcy5kb25lQWN0aW9ucz1udWxsLHRoaXMudW5kb25lQWN0aW9ucz1udWxsLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rp'@;
put 'b24geG10KGMsbCl7ImxvYWREYXRhIj09PWwmJnRoaXMuY2xlYXIoKX1mdW5jdGlvbiBFbXQoKXtjb25zdCBjPWw9PntMNmUuaGFzKGwpfHwoWW8oaGxgVGhlICIke2x9IiBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgaXQgd2lsbCBiZSByZW1vdmVkXHgyMAogICAgICAgICAgZnJvbSB0aGUg'@;
put 'Q29yZSBBUEkgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kIGZyb20gdGhlIFVuZG9SZWRvIHBsdWdpblx4MjAKICAgICAgICAgIChlLmcuIFxgaG90SW5zdGFuY2UuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLiR7bH0oKVxgKS5gKSxMNmUuYWRkKGwpKX07dGhpcy5ob3QudW5k'@;
put 'bz0oKT0+e2MoInVuZG8iKSx0aGlzLnVuZG8oKX0sdGhpcy5ob3QucmVkbz0oKT0+e2MoInJlZG8iKSx0aGlzLnJlZG8oKX0sdGhpcy5ob3QuaXNVbmRvQXZhaWxhYmxlPSgpPT4oYygiaXNVbmRvQXZhaWxhYmxlIiksdGhpcy5pc1VuZG9BdmFpbGFibGUoKSksdGhpcy5ob3QuaXNSZWRvQXZh'@;
put 'aWxhYmxlPSgpPT4oYygiaXNSZWRvQXZhaWxhYmxlIiksdGhpcy5pc1JlZG9BdmFpbGFibGUoKSksdGhpcy5ob3QuY2xlYXJVbmRvPSgpPT57YygiY2xlYXIiKSx0aGlzLmNsZWFyKCl9LHRoaXMuaG90LnVuZG9SZWRvPXRoaXN9ZnVuY3Rpb24gVG10KCl7ZGVsZXRlIHRoaXMuaG90LnVuZG8s'@;
put 'ZGVsZXRlIHRoaXMuaG90LnJlZG8sZGVsZXRlIHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSB0aGlzLmhvdC5jbGVhclVuZG8sZGVsZXRlIHRoaXMuaG90LnVuZG9SZWRvfWZ1bmN0aW9uIEVBKCl7KGZ1bmN0aW9uIEphdCgp'@;
put 'e0hkKGtfKSxIZCh6cSksSGQoZTRlKSxIZChsNGUpLEhkKGM0ZSksSGQoSHEpLEhkKHU0ZSksSGQoZDRlKSxIZChmNGUpLEhkKHM5KSxIZChwNGUpfSkoKSxmdW5jdGlvbiB3b3QoKXtMaChJXyksTGgoY1QpLExoKFFxKSxMaChKcSksTGgodEopLExoKHFxKSxMaCh1SiksTGgoZEopLExoKGhK'@;
put 'KSxMaChFZyksTGgoZkopfSgpLGZ1bmN0aW9uIGtvdCgpe1k3KGhUKSxZNyhwSiksWTcodEYpLFk3KGdKKSxZNyhuRil9KCksZnVuY3Rpb24gQm90KCl7WDIoRG90KSxYMihJb3QpLFgyKExvdCksWDIoT290KSxYMihQb3QpLFgyKEZvdCksWDIoSG90KSxYMihOb3QpLFgyKEdwZSksWDIoVm90'@;
put 'KX0oKSxmdW5jdGlvbiBBbXQoKXtQbyhwVCksUG8oYmx0KSxQbyh2VCksUG8oSmx0KSxQbyhzY3QpLFBvKGJnZSksUG8obnV0KSxQbyhBdXQpLFBvKEZGKSxQbygkMHQpLFBvKF8xdCksUG8oQTF0KSxQbyhaRiksUG8oZmR0KSxQbyhkMnQpLFBvKFkydCksUG8oYmZ0KSxQbyhJZnQpLFBvKFVm'@;
put 'dCksUG8ocjN0KSxQbyhmM3QpLFBvKE8zdCksUG8oVTN0KSxQbyhUcHQpLFBvKGE0dCksUG8odTR0KSxQbyhINHQpLFBvKFRndCksUG8ocWd0KSxQbyhzNXQpLFBvKF81dCksUG8oazV0KSxQbyhCNXQpLFBvKE1tdCl9KCl9RUEoKSxmdW5jdGlvbiBrbXQoYyl7Y29uc3QgbD0hKHR5cGVvZiB3'@;
put 'aW5kb3c+InUiKSYmd2luZG93LmpRdWVyeTtsJiYobC5mbi5oYW5kc29udGFibGU9ZnVuY3Rpb24oYSl7Y29uc3QgZD10aGlzLmZpcnN0KCk7bGV0IGYsaD1kLmRhdGEoImhhbmRzb250YWJsZSIpO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7Y29uc3QgRz1hfHx7fTtyZXR1cm4gaD9oLnVwZGF0'@;
put 'ZVNldHRpbmdzKEcpOihoPW5ldyBjLkNvcmUoZFswXSxHKSxkLmRhdGEoImhhbmRzb250YWJsZSIsaCksaC5pbml0KCkpLGR9aWYoaCl7aWYoISh0eXBlb2YgaFthXTwidSIpKXRocm93IG5ldyBFcnJvcihgSGFuZHNvbnRhYmxlIGRvIG5vdCBwcm92aWRlIGFjdGlvbjogJHthfWApO2Zvcih2'@;
put 'YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHY+MT92LTE6MCksST0xO0k8djtJKyspTVtJLTFdPWFyZ3VtZW50c1tJXTtmPWhbYV0uY2FsbChoLC4uLk0pLCJkZXN0cm95Ij09PWEmJmQucmVtb3ZlRGF0YSgpfXJldHVybiBmfSl9KHJvKSxyby5fX0dob3N0VGFibGU9bUoscm8u'@;
put 'X2dldExpc3RlbmVyc0NvdW50ZXI9ZnVuY3Rpb24gckplKCl7cmV0dXJuIHFPfSxyby5fZ2V0UmVnaXN0ZXJlZE1hcHNDb3VudGVyPWZ1bmN0aW9uIGVudCgpe3JldHVybiB6S30scm8uRXZlbnRNYW5hZ2VyPVoyO2NvbnN0IERtdD1bRCxGLEIsWix3LFIsXyxZLE4scCxqLExdLEltdD1bSCxQ'@;
put 'XTtyby5oZWxwZXI9e30scm8uZG9tPXt9LEtuKERtdCxjPT57S24oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYocm8uaGVscGVyW2xdPWNbbF0pfSl9KSxLbihJbXQsYz0+e0tuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9Pnsi'@;
put 'XyIhPT1sLmNoYXJBdCgwKSYmKHJvLmRvbVtsXT1jW2xdKX0pfSkscm8uY2VsbFR5cGVzPW51bGwhPT0oamVlPXJvLmNlbGxUeXBlcykmJnZvaWQgMCE9PWplZT9qZWU6e30sS24obHJ0KCksYz0+e3JvLmNlbGxUeXBlc1tjXT14cShjKX0pLHJvLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBl'@;
put 'PVgyLHJvLmNlbGxUeXBlcy5nZXRDZWxsVHlwZT14cSxyby5lZGl0b3JzPW51bGwhPT0oemVlPXJvLmVkaXRvcnMpJiZ2b2lkIDAhPT16ZWU/emVlOnt9LEtuKFhxZSgpLGM9Pntyby5lZGl0b3JzW2Ake2YxKGMpfUVkaXRvcmBdPVhPKGMpfSkscm8uZWRpdG9ycy5yZWdpc3RlckVkaXRvcj1I'@;
put 'ZCxyby5lZGl0b3JzLmdldEVkaXRvcj1YTyxyby5yZW5kZXJlcnM9bnVsbCE9PShVZWU9cm8ucmVuZGVyZXJzKSYmdm9pZCAwIT09VWVlP1VlZTp7fSxLbihBSmUoKSxjPT57Y29uc3QgbD1pUChjKTsiYmFzZSI9PT1jJiYocm8ucmVuZGVyZXJzLmNlbGxEZWNvcmF0b3I9bCkscm8ucmVuZGVy'@;
put 'ZXJzW2Ake2YxKGMpfVJlbmRlcmVyYF09bH0pLHJvLnJlbmRlcmVycy5yZWdpc3RlclJlbmRlcmVyPUxoLHJvLnJlbmRlcmVycy5nZXRSZW5kZXJlcj1pUCxyby52YWxpZGF0b3JzPW51bGwhPT0oWmVlPXJvLnZhbGlkYXRvcnMpJiZ2b2lkIDAhPT1aZWU/WmVlOnt9LEtuKElKZSgpLGM9Pnty'@;
put 'by52YWxpZGF0b3JzW2Ake2YxKGMpfVZhbGlkYXRvcmBdPWlLKGMpfSkscm8udmFsaWRhdG9ycy5yZWdpc3RlclZhbGlkYXRvcj1ZNyxyby52YWxpZGF0b3JzLmdldFZhbGlkYXRvcj1pSyxyby5wbHVnaW5zPW51bGwhPT0oV2VlPXJvLnBsdWdpbnMpJiZ2b2lkIDAhPT1XZWU/V2VlOnt9LEtu'@;
put 'KHJLKCksYz0+e3JvLnBsdWdpbnNbY109T0UoYyl9KSxyby5wbHVnaW5zW2Ake2YxKEZvLlBMVUdJTl9LRVkpfVBsdWdpbmBdPUZvLHJvLnBsdWdpbnMucmVnaXN0ZXJQbHVnaW49UG8scm8ucGx1Z2lucy5nZXRQbHVnaW49T0U7Y29uc3QgTXc9cm8sUm10PVsiaW5wdXRQbGFjZWhvbGRlciJd'@;
put 'O2Z1bmN0aW9uIExtdChjLGwpe31jb25zdCBPbXQ9WyJjb250YWluZXIiXTtsZXQgUG10PSgoKT0+e2NsYXNzIGN7dG9wO2xlZnQ7aGVpZ2h0O3dpZHRoO3NldCBpc1Zpc2libGUoYSl7dGhpcy5faXNWaXNpYmxlPWF9c2V0IGNvbXBvbmVudFJlZihhKXthJiZ0aGlzLmNvbnRhaW5lci5pbnNl'@;
put 'cnQoYS5ob3N0Vmlldyl9Y29udGFpbmVyO2dldCBkaXNwbGF5KCl7cmV0dXJuIHRoaXMuX2lzVmlzaWJsZT8iYmxvY2siOiJub25lIn1faXNWaXNpYmxlPSExO2RldGFjaEVkaXRvcigpe3RoaXMuY29udGFpbmVyLmRldGFjaCgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu'@;
put 'IG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZGYShSbXQsNyxUcyksMiZkKXtsZXQgZjt5aShmPWJpKCkpJiYoaC5jb250YWluZXI9Zi5maXJzdCl9fSxpbnB1'@;
put 'dHM6e3RvcDoidG9wIixsZWZ0OiJsZWZ0IixoZWlnaHQ6ImhlaWdodCIsd2lkdGg6IndpZHRoIixpc1Zpc2libGU6ImlzVmlzaWJsZSIsY29tcG9uZW50UmVmOiJjb21wb25lbnRSZWYifSxkZWNsczozLHZhcnM6MTQsY29uc3RzOltbImlucHV0UGxhY2Vob2xkZXIiLCIiXSxbMSwiaGFuZHNv'@;
put 'bnRhYmxlSW5wdXRIb2xkZXIiLCJodF9jbG9uZV9tYXN0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsTG10LDAsMCwibmctdGVtcGxhdGUiLG51bGwsMCxnYyksaGUoKSksMiZkJiZOMSgiZGlzcGxheSIsaC5kaXNwbGF5KSgid2lkdGgiLGgu'@;
put 'd2lkdGgsInB4IikoImhlaWdodCIsaC5oZWlnaHQsInB4IikoIm1heC13aWR0aCIsaC53aWR0aCwicHgiKSgibWF4LWhlaWdodCIsaC5oZWlnaHQsInB4IikoInRvcCIsaC50b3AsInB4IikoImxlZnQiLGgubGVmdCwicHgiKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9'@;
put 'cmV0dXJuIGN9KSgpO2NsYXNzIEZtdCBleHRlbmRzIE13LmVkaXRvcnMuQmFzZUVkaXRvcntfY29tcG9uZW50UmVmO19lZGl0b3JQbGFjZUhvbGRlclJlZjtfaXNQbGFjZWhvbGRlclJlYWR5PSExO19maW5pc2hFZGl0U3Vic2NyaXB0aW9uO19jYW5jZWxFZGl0U3Vic2NyaXB0aW9uO2NvbnN0'@;
put 'cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93UmVzaXplIix0aGlzLm9uQWZ0ZXJSb3dSZXNpemUuYmluZCh0aGlzKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMub25BZnRlckNvbHVtblJlc2l6ZS5iaW5kKHRoaXMpKSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLHRoaXMub25BZnRlckRlc3Ryb3kuYmluZCh0aGlzKSl9cHJlcGFyZShsLGEsZCxoLGYsdil7aWYoIXRoaXMuaXNPcGVuZWQoKSl7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGEpO3Ro'@;
put 'aXMuX2lzUGxhY2Vob2xkZXJSZWFkeXx8KHRoaXMuY3JlYXRlRWRpdG9yUGxhY2Vob2xkZXIoTS5fZW52aXJvbm1lbnRJbmplY3RvciksdGhpcy5faXNQbGFjZWhvbGRlclJlYWR5PSEwKSx0aGlzLl9jb21wb25lbnRSZWY9TS5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlLHRoaXMuX2Zpbmlz'@;
put 'aEVkaXRTdWJzY3JpcHRpb24mJih0aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24mJih0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uLnVuc3Vi'@;
put 'c2NyaWJlKCksdGhpcy5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb249dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmZpbmlzaEVkaXQucGlwZShnaCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5maW5pc2hFZGl0aW5nKCl9KSx0'@;
put 'aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uPXRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5jYW5jZWxFZGl0LnBpcGUoZ2goMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2FuY2VsQ2hhbmdlcygpfSl9fWNsb3NlKCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5yZXNldEVkaXRvclN0YXRl'@;
put 'KCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLmluc3RhbmNlLmRldGFjaEVkaXRvcigpLHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5vbkNsb3NlKCkpfWZvY3VzKCl7dGhp'@;
put 'cy5fY29tcG9uZW50UmVmLmluc3RhbmNlLm9uRm9jdXMoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2U/LmdldFZhbHVlKCl9b3BlbihsKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhp'@;
put 'cy5hcHBseVByb3BzVG9FZGl0b3IoKSx0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2Uub25PcGVuKGwpfXNldFZhbHVlKGwpe3RoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZT8uc2V0VmFsdWUobCksdGhpcy5fY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMo'@;
put 'KX1hcHBseVByb3BzVG9FZGl0b3IoKXtjb25zdCBsPXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKXx8dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLnNldFZhbHVlKG51bGwpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgib3JpZ2luYWxWYWx1'@;
put 'ZSIsdGhpcy5vcmlnaW5hbFZhbHVlKSx0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoInJvdyIsdGhpcy5yb3cpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgiY29sdW1uIix0aGlzLmNvbCksdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCJwcm9wIix0aGlzLnByb3ApLHRoaXMu'@;
put 'X2NvbXBvbmVudFJlZi5zZXRJbnB1dCgiY2VsbFByb3BlcnRpZXMiLHRoaXMuY2VsbFByb3BlcnRpZXMpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ0b3AiLGwudG9wKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgibGVmdCIsbC5zdGFydCksdGhp'@;
put 'cy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImhlaWdodCIsbC5oZWlnaHQpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ3aWR0aCIsbC53aWR0aCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImlzVmlzaWJsZSIsITApLHRoaXMuX2Vk'@;
put 'aXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJjb21wb25lbnRSZWYiLHRoaXMuX2NvbXBvbmVudFJlZiksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfWNyZWF0ZUVkaXRvclBsYWNlaG9sZGVyKGwpe3RoaXMuX2VkaXRvclBs'@;
put 'YWNlSG9sZGVyUmVmPXBSKFBtdCx7ZW52aXJvbm1lbnRJbmplY3RvcjpsfSksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCl9b25BZnRlckNvbHVtblJlc2l6ZSgpe3RoaXMuaXNPcGVuZWQo'@;
put 'KSYmdGhpcy5hcHBseVByb3BzVG9FZGl0b3IoKX1vbkFmdGVyUm93UmVzaXplKCl7dGhpcy5pc09wZW5lZCgpJiZ0aGlzLmFwcGx5UHJvcHNUb0VkaXRvcigpfW9uQWZ0ZXJEZXN0cm95KCl7dGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWY/LmRlc3Ryb3koKX1yZXNldEVkaXRvclN0YXRlKCl7'@;
put 'dGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoInRvcCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgibGVmdCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaGVpZ2h0Iix2b2lkIDApLHRoaXMuX2VkaXRv'@;
put 'clBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ3aWR0aCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaXNWaXNpYmxlIiwhMSksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImNvbXBvbmVudFJlZiIsdm9pZCAwKX19Y2xhc3MgbE57c3Rh'@;
put 'dGljIFJFTkRFUkVSX01BUktFUj1TeW1ib2woIkhvdENlbGxSZW5kZXJlckNvbXBvbmVudCIpO3ZhbHVlPSIiO2luc3RhbmNlO3RkO3Jvdztjb2w7cHJvcDtjZWxsUHJvcGVydGllcztnZXRQcm9wcygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5yZW5kZXJlclByb3BzPz97fX1zdGF0'@;
put 'aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bE4pfTtzdGF0aWMgXHUwMjc1Y21wPU5yKHt0eXBlOmxOLHNlbGVjdG9yczpbWyJob3QtY2VsbC1yZW5kZXJlciJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsaW5zdGFuY2U6Imluc3RhbmNlIix0ZDoidGQiLHJvdzoicm93'@;
put 'Iixjb2w6ImNvbCIscHJvcDoicHJvcCIsY2VsbFByb3BlcnRpZXM6ImNlbGxQcm9wZXJ0aWVzIn0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXt9LGVuY2Fwc3VsYXRpb246Mn0pfWZ1bmN0aW9uIE82ZShjKXtyZXR1cm4gYz8uUkVOREVSRVJfTUFSS0VSPT09bE4uUkVO'@;
put 'REVSRVJfTUFSS0VSfWxldCBWbXQ9KCgpPT57Y2xhc3MgY3thcHBSZWY7ZW52aXJvbm1lbnRJbmplY3Rvcjtjb25zdHJ1Y3RvcihhLGQpe3RoaXMuYXBwUmVmPWEsdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWR9Y3JlYXRlUmVuZGVyZXJGcm9tQ29tcG9uZW50KGEsZD17fSxoPSExKXtyZXR1'@;
put 'cm4oZix2LE0sSSxHLHJlLHVlKT0+e2NvbnN0IHllPXt2YWx1ZTpyZSxpbnN0YW5jZTpmLHRkOnYscm93Ok0sY29sOkkscHJvcDpHLGNlbGxQcm9wZXJ0aWVzOnVlfTtpZihkJiZPYmplY3QuYXNzaWduKHVlLHtyZW5kZXJlclByb3BzOmR9KSxNdy5yZW5kZXJlcnMuQmFzZVJlbmRlcmVyLmFw'@;
put 'cGx5KHRoaXMsW2YsdixNLEksRyxyZSx1ZV0pLHYuaW5uZXJIVE1MPSIiLGZ1bmN0aW9uIE5tdChjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlRW1iZWRkZWRWaWV3fShhKSl0aGlzLmF0dGFjaFRlbXBsYXRlVG9FbGVtZW50KGEsdix5ZSk7ZWxzZSBpZihPNmUoYSkp'@;
put 'e2NvbnN0IEJlPXRoaXMuY3JlYXRlQ29tcG9uZW50KGEseWUpO3RoaXMuYXR0YWNoQ29tcG9uZW50VG9FbGVtZW50KEJlLHYpfWVsc2UgY29uc29sZS53YXJuKCJUaGUgcHJvdmlkZWQgcmVuZGVyZXIgY29tcG9uZW50IHdhcyBub3QgcmVjb2duaXplZCBhcyBhIHZhbGlkIGN1c3RvbSByZW5k'@;
put 'ZXJlci4gSXQgbXVzdCBlaXRoZXIgZXh0ZW5kIEhvdENlbGxSZW5kZXJlckNvbXBvbmVudCBvciBiZSBhIHZhbGlkIFRlbXBsYXRlUmVmLiBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBjdXN0b20gcmVuZGVyZXIgaXMgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCBpbXBvcnRlZCBmcm9tIHRo'@;
put 'ZSBwcm9wZXIgc291cmNlLiIpO3JldHVybiBoJiZPNmUoYSkmJk13LnJlbmRlcmVycy5yZWdpc3RlclJlbmRlcmVyKGEuY29uc3RydWN0b3IubmFtZSxhKSx2fX1hdHRhY2hUZW1wbGF0ZVRvRWxlbWVudChhLGQsaCl7Y29uc3QgZj1hLmNyZWF0ZUVtYmVkZGVkVmlldyh7JGltcGxpY2l0Omgu'@;
put 'dmFsdWUsLi4uaH0pO2YuZGV0ZWN0Q2hhbmdlcygpLGYucm9vdE5vZGVzLmZvckVhY2godj0+e2QuYXBwZW5kQ2hpbGQodil9KX1jcmVhdGVDb21wb25lbnQoYSxkKXtjb25zdCBoPXBSKGEse2Vudmlyb25tZW50SW5qZWN0b3I6dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSk7cmV0dXJuIE9i'@;
put 'amVjdC5rZXlzKGQpLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZik/aC5zZXRJbnB1dChmLGRbZl0pOmNvbnNvbGUud2FybihgSW5wdXQgcHJvcGVydHkgIiR7Zn0iIGRvZXMgbm90IGV4aXN0IG9uIGNvbXBvbmVudCBpbnN0YW5jZTogJHthPy5uYW1lfS5gKX0pLGguY2hhbmdlRGV0'@;
put 'ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoaC5ob3N0VmlldyksaH1hdHRhY2hDb21wb25lbnRUb0VsZW1lbnQoYSxkKXtkLmFwcGVuZENoaWxkKGEuaG9zdFZpZXcucm9vdE5vZGVzWzBdKX1kZXN0cm95Q29tcG9uZW50KGEpe3RoaXMuYXBwUmVmLmRl'@;
put 'dGFjaFZpZXcoYS5ob3N0VmlldyksYS5kZXN0cm95KCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKHVwKSxDcihxbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9'@;
put 'cmV0dXJuIGN9KSgpO2NvbnN0IEJtdD1PYmplY3Qua2V5cyhyby5EZWZhdWx0U2V0dGluZ3MpLFA2ZT1yby5ob29rcy5nZXRSZWdpc3RlcmVkKCk7bGV0IEY2ZT0oKCk9PntjbGFzcyBje2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlO2Vudmlyb25tZW50SW5qZWN0b3I7Y29uc3RydWN0b3IoYSxk'@;
put 'KXt0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlPWEsdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWR9YXBwbHlDdXN0b21TZXR0aW5ncyhhLGQpe2NvbnN0IGg9YTtyZXR1cm4gdGhpcy51cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIoaCksdGhpcy51cGRhdGVD'@;
put 'b2x1bW5FZGl0b3JGb3JHaXZlbkN1c3RvbUVkaXRvcihoKSx0aGlzLnVwZGF0ZUNvbHVtblZhbGlkYXRvckZvckdpdmVuQ3VzdG9tVmFsaWRhdG9yKGgpLHRoaXMud3JhcEhvb2tzSW5OZ1pvbmUoaCxkKSxoPz97fX13cmFwSG9va3NJbk5nWm9uZShhLGQpe1A2ZS5jb25jYXQoQm10KS5mb3JF'@;
put 'YWNoKGY9Pntjb25zdCB2PVA2ZS5pbmRleE9mKGYpPi0xO2xldCBNO3YmJihNPWFbZl0pLHZvaWQgMCE9PU0mJihhW2ZdPWQmJiJmdW5jdGlvbiI9PXR5cGVvZiBNJiZ2P2Z1bmN0aW9uKC4uLkkpe3JldHVybiBkLnJ1bigoKT0+TS5hcHBseSh0aGlzLEkpKX06TSl9KX11cGRhdGVDb2x1bW5S'@;
put 'ZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIoYSl7QXJyYXkuaXNBcnJheShhPy5jb2x1bW5zKSYmYT8uY29sdW1ucz8uZmlsdGVyKGQ9PnRoaXMuaXNSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUoZC5yZW5kZXJlcil8fHRoaXMuaXNUZW1wbGF0ZVJlZihkLnJlbmRlcmVyKSk/LmZvckVh'@;
put 'Y2goZD0+e2NvbnN0IGg9KHRoaXMuaXNUZW1wbGF0ZVJlZihkLnJlbmRlcmVyKSxkLnJlbmRlcmVyKTtkLnJlbmRlcmVyPXRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlUmVuZGVyZXJGcm9tQ29tcG9uZW50KGgsZC5yZW5kZXJlclByb3BzPz97fSl9KX11cGRhdGVDb2x1bW5F'@;
put 'ZGl0b3JGb3JHaXZlbkN1c3RvbUVkaXRvcihhKXtBcnJheS5pc0FycmF5KGE/LmNvbHVtbnMpJiZhPy5jb2x1bW5zPy5maWx0ZXIoZD0+dGhpcy5pc0VkaXRvckNvbXBvbmVudFJlZlR5cGUoZC5lZGl0b3IpKT8uZm9yRWFjaChkPT57ZC5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlPXBSKGQu'@;
put 'ZWRpdG9yLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcn0pLGQuX2Vudmlyb25tZW50SW5qZWN0b3I9dGhpcy5lbnZpcm9ubWVudEluamVjdG9yLGQuZWRpdG9yPUZtdH0pfXVwZGF0ZUNvbHVtblZhbGlkYXRvckZvckdpdmVuQ3VzdG9tVmFsaWRhdG9yKGEp'@;
put 'e0FycmF5LmlzQXJyYXkoYT8uY29sdW1ucykmJmE/LmNvbHVtbnM/LmZpbHRlcihkPT50aGlzLmlzQ3VzdG9tVmFsaWRhdG9yRm4oZC52YWxpZGF0b3IpKT8uZm9yRWFjaChkPT57Y29uc3QgaD1kLnZhbGlkYXRvcjtkLnZhbGlkYXRvcj0oZix2KT0+e3YoaChmKSl9fSl9aXNDdXN0b21WYWxp'@;
put 'ZGF0b3JGbihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYSYmMT09PWEubGVuZ3RofWlzRWRpdG9yQ29tcG9uZW50UmVmVHlwZShhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYSYmISFhPy5cdTAyNzVjbXB9aXNSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUoYSl7cmV0dXJuImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIGEmJiEhYT8uXHUwMjc1Y21wfWlzVGVtcGxhdGVSZWYoYSl7cmV0dXJuIGEmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLmNyZWF0ZUVtYmVkZGVkVmlld31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoQ3IoVm10KSxDcihxbCkpfTtzdGF0'@;
put 'aWMgXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHptdD1uZXcgU3QoIkhPVF9HTE9CQUxfQ09ORklHIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHt9KX0pO2xldCBVbXQ9KCgpPT57Y2xhc3MgY3tkZWZhdWx0'@;
put 'Q29uZmlnPXtsaWNlbnNlOnZvaWQgMCx0aGVtZU5hbWU6IiJ9O2NvbmZpZ1N1YmplY3Q9bmV3IEpyKHRoaXMuZGVmYXVsdENvbmZpZyk7Z2V0IGNvbmZpZyQoKXtyZXR1cm4gdGhpcy5jb25maWdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWNvbnN0cnVjdG9yKGEpe3RoaXMuZGVmYXVsdENvbmZp'@;
put 'Zz17Li4udGhpcy5kZWZhdWx0Q29uZmlnLC4uLmF9LHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuZGVmYXVsdENvbmZpZyl9c2V0Q29uZmlnKGEpe3RoaXMuY29uZmlnU3ViamVjdC5uZXh0KHsuLi50aGlzLmRlZmF1bHRDb25maWcsLi4uYX0pfWdldENvbmZpZygpe3JldHVybiB0aGlz'@;
put 'LmNvbmZpZ1N1YmplY3QudmFsdWV9cmVzZXRDb25maWcoKXt0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh7Li4udGhpcy5kZWZhdWx0Q29uZmlnfSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKENyKHptdCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1ybih7dG9r'@;
put 'ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLCRnPSgoKT0+e2NsYXNzIGN7X2hvdFNldHRpbmdzUmVzb2x2ZXI7X2hvdENvbmZpZztuZ1pvbmU7ZGF0YT1udWxsO3NldHRpbmdzPXt9O2NvbnRhaW5lcjtfX2hvdEluc3RhbmNlPW51bGw7'@;
put 'Y29uZmlnU3Vic2NyaXB0aW9uO2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyPWEsdGhpcy5faG90Q29uZmlnPWQsdGhpcy5uZ1pvbmU9aH1nZXQgaG90SW5zdGFuY2UoKXtyZXR1cm4hdGhpcy5fX2hvdEluc3RhbmNlfHx0aGlzLl9faG90SW5zdGFuY2UmJiF0'@;
put 'aGlzLl9faG90SW5zdGFuY2UuaXNEZXN0cm95ZWQ/dGhpcy5fX2hvdEluc3RhbmNlOihjb25zb2xlLndhcm4oIlRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQgd2FzIGRlc3Ryb3llZCBhbmQgY2Fubm90IGJlIHVzZWQgcHJvcGVybHkuIiksbnVsbCl9'@;
put 'c2V0IGhvdEluc3RhbmNlKGEpe3RoaXMuX19ob3RJbnN0YW5jZT1hfW5nQWZ0ZXJWaWV3SW5pdCgpe2xldCBhPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIuYXBwbHlDdXN0b21TZXR0aW5ncyh0aGlzLnNldHRpbmdzLHRoaXMubmdab25lKTtjb25zdCBkPXRoaXMuZ2V0TmVnb3RpYXRlZFNl'@;
put 'dHRpbmdzKGEpO2E9ey4uLmEsLi4uZCxkYXRhOnRoaXMuZGF0YX0sdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyByby5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJbnN0YW5jZS5pbml0KCl9KSx0aGlz'@;
put 'LmNvbmZpZ1N1YnNjcmlwdGlvbj10aGlzLl9ob3RDb25maWcuY29uZmlnJC5zdWJzY3JpYmUoaD0+e2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IGY9dGhpcy5nZXROZWdvdGlhdGVkU2V0dGluZ3ModGhpcy5zZXR0aW5ncyk7dGhpcy51cGRhdGVIb3RUYWJsZShmKX19KX1uZ09uQ2hhbmdl'@;
put 'cyhhKXtpZihudWxsIT09dGhpcy5ob3RJbnN0YW5jZSl7aWYoYS5zZXR0aW5ncyYmIWEuc2V0dGluZ3MuZmlyc3RDaGFuZ2Upe2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5hcHBseUN1c3RvbVNldHRpbmdzKGEuc2V0dGluZ3MuY3VycmVudFZhbHVlLHRoaXMubmdab25lKTt0'@;
put 'aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfWEuZGF0YSYmIWEuZGF0YS5maXJzdENoYW5nZSYmdGhpcy5ob3RJbnN0YW5jZT8udXBkYXRlRGF0YShhLmRhdGEuY3VycmVudFZhbHVlKX19bmdPbkRlc3Ryb3koKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCF0aGlzLmhvdElu'@;
put 'c3RhbmNlKXJldHVybjtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5jb2x1bW5zO2EmJkFycmF5LmlzQXJyYXkoYSkmJmEuZm9yRWFjaChkPT57ZC5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlJiZkLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2UuZGVzdHJveSgpfSks'@;
put 'dGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZUhvdFRhYmxlKGEpe3RoaXMuaG90SW5zdGFuY2UmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZT8udXBkYXRlU2V0'@;
put 'dGluZ3MoYSwhMSl9KX1nZXROZWdvdGlhdGVkU2V0dGluZ3MoYSl7Y29uc3QgZD10aGlzLl9ob3RDb25maWcuZ2V0Q29uZmlnKCksaD17fTtyZXR1cm4gaC5saWNlbnNlS2V5PWEubGljZW5zZUtleT8/ZC5saWNlbnNlLGgudGhlbWVOYW1lPWEudGhlbWVOYW1lPz9kLnRoZW1lTmFtZSxoLmxh'@;
put 'bmd1YWdlPWEubGFuZ3VhZ2U/P2QubGFuZ3VhZ2UsdGhpcy5fX2hvdEluc3RhbmNlfHwoaC5sYXlvdXREaXJlY3Rpb249YS5sYXlvdXREaXJlY3Rpb24/P2QubGF5b3V0RGlyZWN0aW9uKSxofXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShGNmUpLCRl'@;
put 'KFVtdCksJGUoR2EpKX07c3RhdGljIFx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJob3QtdGFibGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZGYShPbXQsNSksMiZkKXtsZXQgZjt5aShmPWJpKCkpJiYoaC5jb250YWluZXI9Zi5maXJzdCl9fSxpbnB1dHM6'@;
put 'e2RhdGE6ImRhdGEiLHNldHRpbmdzOiJzZXR0aW5ncyJ9LGZlYXR1cmVzOlt1YShbRjZlXSksYmxdLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJld0KDAsImRpdiIsbnVsbCwwKX0sc3R5bGVzOlsiOmhvc3R7ZGlz'@;
put 'cGxheTpibG9ja31cbiJdLGVuY2Fwc3VsYXRpb246Mn0pfXJldHVybiBjfSkoKSxaOT0oKCk9PntjbGFzcyBje3N0YXRpYyB2ZXJzaW9uPSIxNi4wLjEiO2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBmb3JSb290KCl7cmV0dXJue25nTW9kdWxlOmN9fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'ZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1BaSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj1Bcih7fSl9cmV0dXJuIGN9KSgpLGNmPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0'@;
put 'aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYV19KX19cmV0dXJuIGN9KSgpLHh3PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0'@;
put 'YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W01XLHdoZV0saW1wb3J0czpbTGEsa2MsQmMsQjAsY2ZdfSl9fXJldHVybiBjfSkoKSxUQT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGFdfSl9fXJldHVybiBjfSkoKSxINmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7'@;
put 'cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLEIwLExhLGtjXX0pfX1yZXR1cm4gY30pKCksVzk9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'ZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLGtjLEIwLEJjLHh3LFRBLGNmLEg2ZV19KX19cmV0dXJuIGN9KSgpO2NsYXNzIFllZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVl'@;
put 'dWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fWNvbnN0IEdlZT0oYyxsLGEpPT57Zm9yKGxldCBkIG9mIGMpe2NvbnN0IGg9bC5maW5kKHY9PnYuZGF0YT09PWQuTkFNRSksZj1hLnZhcnNbZC5OQU1FXTtmJiYoZC5UWVBFPVsiREFURSIsIkRBVEVUSU1FIiwiVElN'@;
put 'RSJdLmluY2x1ZGVzKGQuRERUWVBFKT8ibnVtIjpmLnR5cGUpLGgmJmQuREVTQyYmKGguZGVzYz1kLkRFU0MpLGgmJmYubGVuZ3RoJiYoaC5sZW5ndGg9cGFyc2VJbnQoZi5sZW5ndGgpKSxoJiZkLkNMU19SVUxFJiYoaC5jbHNSdWxlPWQuQ0xTX1JVTEUpfXJldHVybiBsfTtmdW5jdGlvbiAk'@;
put 'ZWUoYyxsKXtpZihudWxsPT1jfHwhaXNOYU4oYykmJmlzRmluaXRlKGMpKXJldHVybiBsJiZsKCEwKSwhMDtjb25zdCBhPSgwLHBnLmlzU3BlY2lhbE1pc3NpbmcpKGMpO3JldHVybiBsJiZsKGEpLGF9Y29uc3QgTjZlPXtDQVNFOihjLGwpPT57c3dpdGNoKGwpe2Nhc2UiVVBDQVNFIjpyZXR1'@;
put 'cm4hIVt2b2lkIDAsbnVsbF0uaW5jbHVkZXMoYyl8fCJzdHJpbmciPT10eXBlb2YgYyYmYy50b1N0cmluZygpPT09Yy50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7Y2FzZSJMT1dDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0uaW5jbHVkZXMoYyl8fCJzdHJpbmciPT10eXBlb2YgYyYmYy50'@;
put 'b1N0cmluZygpPT09Yy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCl9cmV0dXJuITB9LE1JTlZBTDooYyxsKT0+e2NvbnN0IGE9JGVlKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4oIWF8fCFpc05hTihkKSkmJmQ+PU51bWJlcihsLnRvU3RyaW5nKCkpfSxNQVhWQUw6KGMsbCk9Pntjb25zdCBh'@;
put 'PSRlZShjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuISghYXx8IWlzTmFOKGQpKXx8ZDw9TnVtYmVyKGwudG9TdHJpbmcoKSl9LE5PVE5VTEw6KGMsbCk9Pm51bGwhPWMmJmMudG9TdHJpbmcoKS5sZW5ndGg+MH07dmFyIEtlZT1iKDc4Mzc1KTtjbGFzcyBLbXQgZXh0ZW5kcyBNdy5lZGl0b3Jz'@;
put 'LkF1dG9jb21wbGV0ZUVkaXRvcntjb25zdHJ1Y3RvcihsKXtzdXBlcihsKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCl9b3BlbihsKXtzdXBlci5vcGVuKGwpLHRoaXMuaXNDZWxsTnVtZXJpYygpP3RoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibnVtZXJp'@;
put 'Y0xpc3Rib3giKTp0aGlzLmh0Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm51bWVyaWNMaXN0Ym94Iil9aXNDZWxsTnVtZXJpYygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5jbGFzc05hbWU/LmluY2x1ZGVzKCJodE51bWVyaWMiKX19Y2xhc3MgVjZle2NvbnN0cnVjdG9yKGws'@;
put 'YSxkLGgsZix2KXt0aGlzLnJ1bGVzPVtdLHRoaXMuZHFydWxlcz1bXSx0aGlzLmRxZGF0YT1bXSx0aGlzLmhpZGRlbkNvbHVtbnM9W10sdGhpcy5wcmltYXJ5S2V5cz1bXSx0aGlzLmV4ZWN1dGVIb3RWYWxpZGF0b3I9KE0sSSxHKT0+e2NvbnN0IHJlPXsuLi5NLHZhbGlkYXRvcjp2b2lkIDAs'@;
put 'Y29ycmVjdEZvcm1hdDohMSxyb3c6MCxjb2w6MCxpbnN0YW5jZTpuZXcgTXcoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikse30pLHZpc3VhbFJvdzowLHZpc3VhbENvbDowLHByb3A6MH07bnVsbD09SSYmKEk9IiIpLE0mJk0udmFsaWRhdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS52'@;
put 'YWxpZGF0b3I/TS52YWxpZGF0b3IuY2FsbChyZSxJLHVlPT57RyYmRyh1ZSl9KTpHJiZHKCExKX0sdGhpcy5yZWdpc3RlckN1c3RvbUVkaXRvcnMoKSx0aGlzLnNhc3BhcmFtcz1sLHRoaXMuaG90SW5zdGFuY2U9dix0aGlzLnJ1bGVzPShjPT57dHJ5e3JldHVybiBKU09OLnBhcnNlKGBbJHtj'@;
put 'fV1gKX1jYXRjaHtyZXR1cm5bXX19KShsLkNPTFRZUEUpLHRoaXMucnVsZXM9R2VlKGQsdGhpcy5ydWxlcyxhKSx0aGlzLnJ1bGVzPShjPT57aWYoIUtlZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEgb2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51'@;
put 'bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5QSy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRh'@;
put 'KCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9cmVnaXN0ZXJDdXN0b21FZGl0b3JzKCl7TXcuZWRpdG9ycy5yZWdpc3RlckVkaXRvcigiYXV0b2NvbXBsZXRlLmN1c3RvbSIsS210KX1nZXRSdWxlcygpe3JldHVybiB0aGlzLnJ1bGVzfWdldFJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJ'@;
put 'bmRleChsKTtyZXR1cm4gdGhpcy5ydWxlc1thXX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHRoaXMuaGlkZGVuQ29sdW1uc311cGRhdGVSdWxlKGwsYSl7bGV0IGQ9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlc1tkXT17Li4udGhpcy5ydWxlc1tkXSwuLi5hfX1yZW1vdmVSdWxl'@;
put 'KGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlcy5zcGxpY2UoYSwxKX1nZXREcURldGFpbHMobCl7cmV0dXJuIGw/dGhpcy5kcXJ1bGVzLmZpbHRlcihhPT5hLkJBU0VfQ09MPT09bCk6dGhpcy5kcXJ1bGVzfWlzRHFDb2wobCl7cmV0dXJuISF0aGlzLmRxcnVsZXMu'@;
put 'ZmluZChhPT5hLkJBU0VfQ09MPT09bCl9aGFzRHFSdWxlcyhsLGEsZD0hMSl7cmV0dXJuIGQ/dGhpcy5kcXJ1bGVzLmZpbHRlcihoPT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpLmxlbmd0aD09PWEubGVuZ3RoOiEhdGhpcy5kcXJ1bGVzLmZpbmQoaD0+aC5CQVNF'@;
put 'X0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKX1nZXREcURyb3Bkb3duU291cmNlKGwpe2xldCBhPVtdO3JldHVybiB0aGlzLmRxcnVsZXMuZm9yRWFjaChkPT57ZC5CQVNFX0NPTC50b1N0cmluZygpPT09bC5kYXRhJiZsLmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwi'@;
put 'U09GVFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIsIlNPRlRTRUxFQ1RfSE9PSyJdLmluY2x1ZGVzKGQuUlVMRV9UWVBFLnRvU3RyaW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWQuQkFTRV9DT0wpLmZvckVhY2goaD0+e2EucHVzaChsLnR5cGUmJiJudW1lcmlj'@;
put 'Ij09PWwudHlwZT9OdW1iZXIoaC5SVUxFX0RBVEEpOmguUlVMRV9EQVRBKX0pfSksYX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0YS5sZW5ndGg+MCYmKGM9Pntjb25zdCBsPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKGE9PntsLmluY2x1ZGVzKGEuQkFTRV9DT0wpfHxsLnB1c2go'@;
put 'YS5CQVNFX0NPTCl9KSxsfSkoKS5mb3JFYWNoKGE9PntsZXQgZD0hMTt0aGlzLmRxcnVsZXMubGVuZ3RoPjAmJnRoaXMuZHFydWxlcy5mb3JFYWNoKGg9PntoLkJBU0VfQ09MPT09YSYmKCJTT0ZUU0VMRUNUIj09PWguUlVMRV9UWVBFfHwiSEFSRFNFTEVDVCI9PT1oLlJVTEVfVFlQRSkmJihk'@;
put 'PSEwKX0pLGR8fHRoaXMuZHFydWxlcy5wdXNoKHtCQVNFX0NPTDphLFJVTEVfVFlQRToiU09GVFNFTEVDVCIsUlVMRV9WQUxVRTphLFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgbD0wO2w8dGhpcy5ydWxlcy5sZW5ndGg7bCsrKXtjb25zdCBhPXRoaXMucnVsZXNbbF0uZGF0'@;
put 'YXx8IiI7aWYoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hKXtpZih0aGlzLmlzRHFDb2woYSkpe2xldCBoPXRoaXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2xdKTtoLmxlbmd0aD4wJiYodGhpcy5ydWxlc1tsXS5zb3VyY2U9aCx0aGlzLnJ1bGVzW2xdLnR5'@;
put 'cGU9ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1tsXS5lZGl0b3I9ImF1dG9jb21wbGV0ZS5jdXN0b20iLHRoaXMucnVsZXNbbF0uZmlsdGVyPSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEs'@;
put 'WyJIQVJEU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5z'@;
put 'dHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiTk9UTlVMTCJdKSYmKHRoaXMucnVsZXNbbF0uYWxsb3dFbXB0eT0hMSl9InRydWUiPT09dGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0JiYodGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0PSEwKSx0aGlzLnNldERlZmF1bHRWYWxpZGF0'@;
put 'b3IodGhpcyxsKSx0aGlzLnNldENvbHVtbkxldmVsU2VjdXJpdHkobCl9fXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRyYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goMCl9c2V0RGVmYXVsdFZhbGlkYXRvcihsLGEpe3RoaXMucnVsZXNbYV0udmFsaWRhdG9yPWZ1bmN0aW9uKGQsaCl7Y29uc3Qg'@;
put 'Zj1sLnJ1bGVzW2FdLmRhdGE/LnRvU3RyaW5nKCksdj1sLnJ1bGVzW2FdLnR5cGV8fCIiO2xldCBNPW51bGw7cmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlzLmVkaXRvciYmImF1dG9jb21wbGV0ZS5jdXN0b20iIT09dGhpcy5lZGl0b3J8fChsLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcigi'@;
put 'YXV0b2NvbXBsZXRlIikuY2FsbCh0aGlzLGQsST0+e009SX0pLE0pPyhsLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcih2KS5jYWxsKHRoaXMsZCxJPT57TT1JfSksTT9sLmxlbmd0aENoZWNrKGQsbC5ydWxlc1thXS5sZW5ndGgsdik/bC5pc0RxQ29sKGZ8fCIiKSYmISgoYyxsKT0+e2Zvcihs'@;
put 'ZXQgYSBvZiBjKWlmKE42ZVthLlJVTEVfVFlQRV0mJiFONmVbYS5SVUxFX1RZUEVdKGwsYS5SVUxFX1ZBTFVFKSlyZXR1cm4gY29uc29sZS53YXJuKGBEUSBJbnZhbGlkIFJlYXNvbjogJHthLlJVTEVfVFlQRX1cblZhbHVlOiAke2x9KVxuUnVsZSBWYWx1ZTogJHthLlJVTEVfVkFMVUUubGVu'@;
put 'Z3RoPjAmJiIgIiE9PWEuUlVMRV9WQUxVRT9hLlJVTEVfVkFMVUU6Ik5vdCBkZWZpbmVkIn1gKSwhMTtyZXR1cm4hMH0pKGwuZ2V0RHFEZXRhaWxzKGZ8fCIiKSxkKT8oY29uc29sZS53YXJuKGBEUSBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6dm9p'@;
put 'ZCBoKCEwKTooY29uc29sZS53YXJuKGBMZW5ndGggVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpKTooY29uc29sZS53'@;
put 'YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gKGF1dG9jb21wbGV0ZSkgLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKX19bGVuZ3RoQ2hlY2sobCxhLGQpe2lmKCgwLHBnLmlzU3BlY2lhbE1pc3NpbmcpKGwpfHxudWxsPT1sfHxudWxsPT1hKXJldHVybiEwO2lmKCJudW1l'@;
put 'cmljIj09PWQpe2lmKDg9PT1hKXJldHVybiEwO2lmKGE8M3x8YT44fHwhTnVtYmVyLmlzSW50ZWdlcihhKSlyZXR1cm4gY29uc29sZS53YXJuKCJpbnZhbGlkIGxlbmd0aCBmcm9tIFNBUywgcnVsZSBsZW5ndGggY2FuIG9ubHkgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDMtOCIpLCExO2NvbnN0'@;
put 'IGg9TnVtYmVyKGwpPT09bCYmbCUxIT0wO2lmKGE8OCYmaClyZXR1cm4gY29uc29sZS53YXJuKCJyZWR1Y2VkIGxlbmd0aCBudW1lcmljcyBjYW5ub3QgY29udGFpbiBkZWNpbWFscyBlbHNlIHByZWNpc2lvbiB3aWxsIGJlIGFmZmVjdGVkIiksITE7c3dpdGNoKGEpe2Nhc2UgMzpyZXR1cm4g'@;
put 'bDw9ODE5MjtjYXNlIDQ6cmV0dXJuIGw8PTIwOTcxNTI7Y2FzZSA1OnJldHVybiBsPD01MzY4NzA5MTI7Y2FzZSA2OnJldHVybiBsPD0xMzc0Mzg5NTM0NzI7Y2FzZSA3OnJldHVybiBsPD0zNTE4NDM3MjA4ODgzMn19cmV0dXJuIGwudG9TdHJpbmcoKS5sZW5ndGg8PWF9Z2V0SGFuZHNvbnRh'@;
put 'YmxlVmFsaWRhdG9yKGwpe3N3aXRjaChsKXtjYXNlImF1dG9jb21wbGV0ZSI6cmV0dXJuIGhUO2Nhc2UibnVtZXJpYyI6cmV0dXJuICRlZTtjYXNlImRhdGUiOnJldHVybiB0RjtjYXNlInRpbWUiOnJldHVybiBuRjtkZWZhdWx0OnJldHVybihhLGQpPT5kP2QoITApOm51bGx9fWdldFJ1bGVJ'@;
put 'bmRleChsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bDp0aGlzLnJ1bGVzLmZpbmRJbmRleChhPT5hLmRhdGE9PT1sKX1zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGE9dGhpcy5ydWxlc1tsXTtpZih0aGlzLnBy'@;
put 'aW1hcnlLZXlzLmluY2x1ZGVzKGEuZGF0YSkmJihhLmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1hLmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKGwpLCJSRUFEIj09PWEuY2xzUnVsZSYmKGEucmVhZE9ubHk9ITApLCJFRElUIj09PWEuY2xzUnVsZSl7YS5yZWFkT25seT0hMTtj'@;
put 'b25zdCBkPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpO3RoaXMuaGlkZGVuQ29sdW1ucy5zcGxpY2UoZCwxKX19fWNvbnN0IGNOPXtudW1lcmljOiIiLGRlZmF1bHQ6IiJ9LFhtdD0oYyxsKT0+Yz8iYXV0b2NvbXBsZXRlIj09PWM/bCYmbC5zb3VyY2U/bC5zb3VyY2VbMF06W106Y04u'@;
put 'aGFzT3duUHJvcGVydHkoYyk/Y05bY106Y04uZGVmYXVsdDpjTi5kZWZhdWx0LFhlZT1jPT5uZXcgRGF0ZShNYXRoLnJvdW5kKDg2NDAwKihjLTI1NTY5KSoxZTMpKSxKbXQ9KGMsbCxhLGQsaCxmLHYpPT4oSmVlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8Y2RzLWlj'@;
put 'b24gc2hhcGU9ImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiBzdGF0dXM9Indhcm5pbmciPjwvY2RzLWljb24+YCxsKSxxZWU9KGMsbCxhLGQsaCxmLHYpPT4oSmVlKGwpLGwuaW5uZXJIVE1MPWZ8fCIiLGwpLFFtdD0oYyxsLGEsZCxoLGYsdik9PihKZWUobCksbC5pbm5lckhUTUw9YCR7Zj9mLnRv'@;
put 'U3RyaW5nKCk6IiJ9IDxzcGFuIGNsYXNzPSJzcGlubmVyIHNwaW5uZXItc20gdmVydGljYWwtYWxpZ24tbWlkZGxlIj48L3NwYW4+YCxsKSxKZWU9Yz0+e2MuY2xhc3NMaXN0LmNvbnRhaW5zKCJodERhcmsiKXx8Yy5jbGFzc0xpc3QuYWRkKCJodERhcmsiKX0sQjZlPWM9PntsZXQgbD0oIjAi'@;
put 'K2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LFFlZT1jPT5jLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKGMuZ2V0TW9udGgo'@;
put 'KSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK2MuZ2V0RGF0ZSgpKS5zbGljZSgtMiksZXRlPWM9PiEhL14tezAsMX1cZCskLy50ZXN0KGMpLGo2ZT1jPT4hIS9eXGQrXC5cZCskLy50ZXN0KGMpLHR0ZT0oYyxsKT0+bmV3IEZpbGUoW2NdLGwse2xhc3RNb2RpZmllZDoobmV3IERhdGUpLmdldFRp'@;
put 'bWUoKX0pO3ZhciBUdT1iKDYzNTc4KSx6NmU9Yig5NDI0OCksVTZlPWIoODM4MzgpO2NsYXNzIFo2ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxpY2VuY2VTdGF0ZT1sLmxpY2VuY2VTdGF0ZX1wYXJzZVNwcmVhZHNoZWV0RmlsZShsLGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBuZXcgUHJvbWlz'@;
put 'ZSgodixNKT0+e2NvbnN0IEk9bC51cGxvYWRlcnx8bmV3IFllZTtpZihsLndvcmtib29rKXRoaXMucGFyc2VFeGNlbEZpbGUobCxsLndvcmtib29rLEksaCkudGhlbihHPT57dihHKX0pLmNhdGNoKEc9PntNKEcpfSk7ZWxzZXtjb25zdCByZT1sLmZpbGU7bC5lbmNvZGluZ3x8KGwuZW5jb2Rp'@;
put 'bmc9IlVURi04IiksZCYmZChgTG9hZGluZyAke3JlLm5hbWV9IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgdWU9cmUubmFtZS5zbGljZShyZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrMSxyZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyIhPT11ZS50b0xvd2VyQ2FzZSgpKXtpZigi'@;
put 'Y3N2Ij09PXVlLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMucGFyc2VDc3ZGaWxlKGwsSSx1ZSkudGhlbih5ZT0+dih5ZSkpLmNhdGNoKHllPT5NKHllKSk7e2xldCB5ZT0nSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrbC5maWxlLm5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNzdiBvciBl'@;
put 'eGNlbCBmaWxlLic7cmV0dXJuIEkucXVldWUucG9wKCksTSh5ZSl9fXtsZXQgeWU9bmV3IEZpbGVSZWFkZXI7eWUub25sb2FkPWZ1bmN0aW9uKCl7dmFyIEJlPVEoZnVuY3Rpb24qKEdlKXtjb25zdCBzdD15aWVsZCBmLnhzbHhTdGFydFJlYWRpbmcoR2UsYSxsLnBhc3N3b3JkKTtpZighc3Qp'@;
put 'cmV0dXJuIE0oIk5vIHdvcmtib29rIGZvdW5kLiIpO2YucGFyc2VFeGNlbEZpbGUobCxzdCxJLGgpLnRoZW4ocHQ9Pnt2KHB0KX0pLmNhdGNoKHB0PT57TShwdCl9KX0pO3JldHVybiBmdW5jdGlvbihHZSl7cmV0dXJuIEJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkseWUucmVhZEFzQXJy'@;
put 'YXlCdWZmZXIocmUpfX19KX1wYXJzZUV4Y2VsRmlsZShsLGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT0hMSxJPVtdO2NvbnN0IEc9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmwuaGVhZGVyQXJyYXldLHJlPXRoaXMuc2VhcmNoRGF0YUluRXhj'@;
put 'ZWwoYSxsKTtsZXQgdWU9W107aWYocmUuZm91bmQ/KE09ITAsdWU9cmUuZm91bmQuYXJyYXlEYXRhLHJlLmZvdW5kLmhlYWRlcnMuaW5jbHVkZXMoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpfHwodWU9dWUubWFwKEJlPT4oQmUudW5zaGlmdCh7djoiIn0pLEJlKSkpLGgmJmgo'@;
put 'YFNoZWV0OiAke3JlLmZvdW5kLnNoZWV0TmFtZX1cblJhbmdlOiAke3JlLmZvdW5kLnN0YXJ0QWRkcmVzc306JHtyZS5mb3VuZC5lbmRBZGRyZXNzfWApKTpJPXJlLm1pc3Npbmd8fFtdLEkubGVuZ3RoPjApe2xldCBCZT1JLm1hcChHZT0+YFNoZWV0OiAke0dlLnNoZWV0TmFtZX0uXG5NaXNz'@;
put 'aW5nIGNvbHVtbnM6ICR7R2UubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKTtyZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEJlKX1pZigwPT09dWUubGVuZ3RofHwwPT09dWVbMF0ubGVuZ3RoKXtsZXQgQmU9Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjty'@;
put 'ZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEJlKX1pZigobC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjB8fGwuZGF0ZUhlYWRlcnMubGVuZ3RoPjB8fGwudGltZUhlYWRlcnMubGVuZ3RoPjApJiYodWU9dGhpcy51cGRhdGVEYXRlVGltZUNvbHMoRyx1ZSxsKSksbC54bFJ1bGVzLmxlbmd0aD4wJiYo'@;
put 'dWU9dGhpcy51cGRhdGVYTFJ1bGVDb2xzKEcsdWUsbCkpLCFNKXtsZXQgQmU9IiI7cmV0dXJuIEJlPTA9PT1JLmxlbmd0aD8iTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiOkkubWFwKEdlPT5gU2hlZXQ6ICR7R2Uuc2hlZXROYW1lfS5cbk1pc3NpbmcgY29sdW1uczogJHtHZS5t'@;
put 'aXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpLGQucXVldWUucG9wKCksdihCZSl9e2wuaGVhZGVyU2hvdz1HLHVlPXVlLm1hcChxdD0+cXQubWFwKG1uPT4ibiI9PT1tbi50fHxtbi53P21uLnY6InN0cmluZyI9PXR5cGVvZiBtbi52P21uLnYudHJpbSgpOm1uLnYpKSx1'@;
put 'ZT11ZS5tYXAocXQ9PnF0Lm1hcCgobW4sd24pPT57IW1uJiYwIT09bW4mJihtbj0iIik7Y29uc3QgaG49bC5oZWFkZXJTaG93W3duXTtyZXR1cm4ibnVtZXJpYyI9PT1sLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGhuKT8udHlwZSYmKDAscGcuaXNTcGVjaWFsTWlzc2luZykobW4pJiYhbW4uaW5j'@;
put 'bHVkZXMoIi4iKSYmKG1uPSIuIittbiksbW59KSk7Y29uc3QgQmU9dWUuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IHB0LEdlPVR1LnV0aWxzLmpzb25fdG9fc2hlZXQoQmUse3NraXBIZWFkZXI6ITB9KSxzdD1UdS51dGlscy5zaGVldF90'@;
put 'b19jc3YoR2UpO2lmKHN0PUcuam9pbigiLCIpKyJcbiIrc3QsIldMQVRJTjEiPT09bC5lbmNvZGluZyl7bGV0IHF0PXo2ZS5kZWNvZGUoVTZlLkJ1ZmZlci5mcm9tKHN0KSwiQ1AtMTI1MiIpO3B0PW5ldyBCbG9iKFtxdF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1lbHNlIHB0PW5ldyBC'@;
put 'bG9iKFtzdF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtsZXQgZHQ9dHRlKHB0LGwuZmlsZS5uYW1lKyIuY3N2Iik7ZC5hZGRUb1F1ZXVlKFtkdF0pfWlmKDA9PT11ZS5sZW5ndGgpcmV0dXJuIHYoYFRhYmxlIGluIHRoZSBmaWxlIGlzIGVtcHR5LiBEYXRhIGZvdW5kIG9uIHNoZWV0OiAk'@;
put 'e3JlLmZvdW5kPy5zaGVldE5hbWV8fCIifWApO2lmKCFyZS5mb3VuZClyZXR1cm4gdigiTm8gcmVsZXZhbnQgZGF0YSBmb3VuZC4gJ2ZvdW5kJyBvYmplY3QgaXMgZW1wdHksIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuIik7Y29uc3QgeWU9cmUuZm91bmQuc3RhcnRBZGRyZXNzfHwiIixF'@;
put 'ZT1yZS5mb3VuZC5lbmRBZGRyZXNzfHwiIjtyZXR1cm4gZih7dXBsb2FkZXI6ZCxkYXRhOnVlLHJhbmdlU2hlZXRSZXM6e2ZvdW5kOiEhcmUuZm91bmQsc2hlZXROYW1lOnJlLmZvdW5kLnNoZWV0TmFtZSxyYW5nZVN0YXJ0QWRkcmVzczp5ZSxyYW5nZUVuZEFkZHJlc3M6RWUscmFuZ2VBZGRy'@;
put 'ZXNzOmAke3llfToke0VlfWAsbWlzc2luZ0hlYWRlcnM6SX0saGVhZGVyU2hvdzpsLmhlYWRlclNob3d9KX0pfXBhcnNlQ3N2RmlsZShsLGEsZCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLGYpPT57aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT0xLzApcmV0'@;
put 'dXJuIGEucXVldWUucG9wKCksZigiRXhjZWwgZmlsZXMgb25seS4gVG8gdW5sb2NrIENTViB1cGxvYWRzLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIik7aWYoIldMQVRJTjEiIT09bC5lbmNvZGluZylyZXR1cm4gaCh7dXBsb2FkZXI6YX0pO3tsZXQgdj1uZXcg'@;
put 'RmlsZVJlYWRlcjt2Lm9ubG9hZD1JPT57bGV0IEc9ejZlLmRlY29kZShVNmUuQnVmZmVyLmZyb20oSS50YXJnZXQucmVzdWx0KSwiQ1AtMTI1MiIpLHJlPW5ldyBCbG9iKFtHXSx7dHlwZTpkfSksdWU9dHRlKHJlLGwuZmlsZS5uYW1lKTtyZXR1cm4gYS5xdWV1ZS5wb3AoKSxhLmFkZFRvUXVl'@;
put 'dWUoW3VlXSksaCh7dXBsb2FkZXI6YX0pfSx2LnJlYWRBc0FycmF5QnVmZmVyKGwuZmlsZSl9fSl9Ynl0ZXNUb01CKGwpe3JldHVybiBwYXJzZUZsb2F0KChsLzEwNDg1NzYpLnRvRml4ZWQoMikpfXhzbHhTdGFydFJlYWRpbmcobCxhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNl'@;
put 'KGZ1bmN0aW9uKCl7dmFyIGY9UShmdW5jdGlvbioodixNKXtjb25zdCBJPWgudG9Cc3RyKGwudGFyZ2V0LnJlc3VsdCk7bGV0IEcscmU9ITE7Y29uc3QgdWU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0'@;
put 'OiExLHBhc3N3b3JkOmR9O3RyeXtHPXlpZWxkIGgueGxzeFJlYWQoSSx7Li4udWV9KX1jYXRjaCh5ZSl7aWYoIXllLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSlyZXR1cm4gTSgiRXJyb3IgcmVhZGluZyB0aGUgZmlsZSIpO3tyZT0hMDtsZXQgRWU9ITE7Zm9y'@;
put 'KDtyZTspe2NvbnN0IEJlPXlpZWxkIGEoe2Vycm9yOkVlfSk7aWYoQmUpdHJ5e0c9eWllbGQgaC54bHN4UmVhZChJLHsuLi51ZSxwYXNzd29yZDpCZX0pLHJlPSExLEVlPSExfWNhdGNoKEdlKXtFZT0hMCxHZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChy'@;
put 'ZT0hMSl9ZWxzZSByZT0hMX19fXJldHVybiBHP3YoRyk6TSgiRmFpbGVkIHRvIHBhcnNlIGEgd29ya2Jvb2siKX0pO3JldHVybiBmdW5jdGlvbih2LE0pe3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfXhsc3hSZWFkKGwsYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57'@;
put 'aWYoYSYmYS5wYXNzd29yZClyZXR1cm4gY29uc29sZS5pbmZvKCJOb3QgdXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIC0gaGFzIHBhc3N3b3JkIiksZChUdS5yZWFkKGwsYSkpO2lmKHR5cGVvZiBXb3JrZXI+InUiKXJldHVybiBjb25zb2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIg'@;
put 'dG8gcGFyc2UgdGhlIFhMU1ggLSBubyBXb3JrZXIgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKSxkKFR1LnJlYWQobCxhKSk7Y29uc29sZS5pbmZvKCJVc2luZyB3b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1giKTtjb25zdCBmPW5ldyBXb3JrZXIoYi50dShuZXcgVVJMKGIucCtiLnUo'@;
put 'NDExKSxiLmIpKSk7Zi5vbm1lc3NhZ2U9KHtkYXRhOnZ9KT0+eyJyZWFkaW5nX2VuZCI9PT12LmV2ZW50P2Qodi53b3JrYm9vayk6di5lcnJvcj9oKHYuZXJyb3IpOihjb25zb2xlLmluZm8oIldvcmtlciBmYWlsZWQgdG8gcGFyc2UgdGhlIFhMU1ggLSBmYWxsYmFjayB0byBub24gd29ya2Vy'@;
put 'IHBhcnNpbmciKSxkKFR1LnJlYWQodixhKSkpfSxmLnBvc3RNZXNzYWdlKHtkYXRhOmwsb3B0czphfSksc2V0VGltZW91dCgoKT0+ZChUdS5yZWFkKGwsYSkpLDZlNSl9KX1zZWFyY2hEYXRhSW5FeGNlbChsLGEpe2xldCBkLGgsZix2LE09IiIsST1bXSxyZT1bIl9fX19fREVMRVRFX19USElT'@;
put 'X19SRUNPUkRfX19fXyIsLi4uYS5oZWFkZXJBcnJheV0ubWFwKHllPT55ZS50b0xvd2VyQ2FzZSgpKSx1ZT1yZS5yZWR1Y2UoKHllLEVlKT0+KHllW0VlXT0tMSx5ZSkse30pO2ZvcihsZXQgeWUgb2YgbC5TaGVldE5hbWVzKXtkPXZvaWQgMCxoPXZvaWQgMCx1ZT1yZS5yZWR1Y2UoKGhuLE1u'@;
put 'KT0+KGhuW01uXT0tMSxobikse30pO2xldCBFZT1bXTtNPXllO2NvbnN0IEJlPWwuU2hlZXRzW01dO2lmKE9iamVjdC5rZXlzKEJlKS5mb3JFYWNoKGhuPT57Y29uc3QgTW49QmVbaG5dLnY7aWYoTW4mJiJzdHJpbmciPT10eXBlb2YgTW4pe2NvbnN0IE1yPU1uLnRvTG93ZXJDYXNlKCk7cmUu'@;
put 'aW5kZXhPZihNcik+LTEmJih1ZVtNcl09aG4sZHx8KGQ9aG4pLGg9aG4pfX0pLC0xPT09dWUuX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fJiZkZWxldGUgdWUuX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fLEVlPU9iamVjdC5rZXlzKHVlKS5maWx0ZXIoaG49Pi0xPT09dWVb'@;
put 'aG5dKSxFZS5sZW5ndGg+MCl7SS5wdXNoKHtzaGVldE5hbWU6TSxtaXNzaW5nSGVhZGVyczpFZS5tYXAoaG49PmhuLnRvVXBwZXJDYXNlKCkpfSk7Y29udGludWV9Y29uc3QgR2U9T2JqZWN0LmtleXModWUpO2xldCBkdCxzdD1bXSxwdD1bXTtHZS5zb3J0KChobixNbik9Pntjb25zdCBNcj1h'@;
put 'LmhlYWRlclBrcy5pbmNsdWRlcyhobik/MTowO3JldHVybihhLmhlYWRlclBrcy5pbmNsdWRlcyhNbik/MTowKS1Ncn0pLmZvckVhY2goaG49Pntjb25zdCBNbj11ZVtobl0sTXI9TW4ubWF0Y2goL1xEKy8pLGtyPU1uLm1hdGNoKC9cZCsvKSxxbj0oTXI/TXJbMF06LTEpfHwtMSxxcj1wYXJz'@;
put 'ZUludCgoa3I/a3JbMF06LTEpfHwtMSkrMTtsZXQgX2k9MDtpZihkdClmb3IobGV0IFBuPXFyO1BuPD1kdDtQbisrKXtjb25zdCB0cj1CZVtgJHtxbn0ke1BufWBdO2lmKGEuaGVhZGVyUGtzLmluY2x1ZGVzKGhuKSYmKHZvaWQgMD09PXRyfHx2b2lkIDA9PT10ci52KSl7ZHQ9UG47YnJlYWt9'@;
put 'c3RbX2ldfHxzdC5wdXNoKHt9KSx0ciYmKHN0W19pXVtobl09InN0cmluZyI9PXR5cGVvZiB0ci52P3RyLnYudHJpbSgpOnRyLnYpLHB0W19pXXx8cHQucHVzaChbXSkscHRbX2ldLnB1c2godHI/P3t2OiIifSksX2krK31lbHNle2xldCBQbj1xcjtmb3IoO3ZvaWQgMD09PWR0Oyl7Y29uc3Qg'@;
put 'VXI9YCR7cW59JHtQbn1gLHRyPUJlW1VyXTtpZighdHJ8fHZvaWQgMD09PXRyLnYpe2R0PVBuLTE7YnJlYWt9c3RbX2ldfHxzdC5wdXNoKHt9KSxzdFtfaV1baG5dPSJuIj09PUJlW1VyXS50P0JlW1VyXS52OkJlW1VyXS53P0JlW1VyXS53OiJzdHJpbmciPT10eXBlb2YgQmVbVXJdLnY/QmVb'@;
put 'VXJdLnYudHJpbSgpOkJlW1VyXS52LHB0W19pXXx8cHQucHVzaChbXSkscHRbX2ldLnB1c2godHI/P3t2OiIifSksUG4rKyxfaSsrfX1pZihkJiZoKXtjb25zdCBQbj1oLm1hdGNoKC9cRCsvKTtmPWQsdj1gJHtQbn0ke2R0fWB9fSk7Y29uc3QgbW49W107bGV0IHduO3JldHVybiBzdC5mb3JF'@;
put 'YWNoKChobixNbik9PntsZXQgTXI9ITE7YS5oZWFkZXJQa3MuZm9yRWFjaChrcj0+e3ZvaWQgMD09PWhuW2tyLnRvTG93ZXJDYXNlKCldJiYoTXI9ITApfSksTXImJihtbi5wdXNoKE1uKSx3bnx8KHduPU1uKSl9KSx3bj8oc3Quc3BsaWNlKHduLDEvMCkscHQuc3BsaWNlKHduLDEvMCkpOm1u'@;
put 'LnNvcnQoKGhuLE1uKT0+TW4taG4pLmZvckVhY2goaG49PntzdC5zcGxpY2UoaG4sMSkscHQuc3BsaWNlKGhuLDEpfSkscHQubGVuZ3RoP3tmb3VuZDp7ZGF0YTpzdCxhcnJheURhdGE6cHQsc2hlZXROYW1lOk0sc3RhcnRBZGRyZXNzOmYsZW5kQWRkcmVzczp2LGhlYWRlcnM6R2V9fTp7fX1y'@;
put 'ZXR1cm57bWlzc2luZzpJfX11cGRhdGVEYXRlVGltZUNvbHMobCxhLGQpe2lmKGQuZGF0ZUhlYWRlcnMubGVuZ3RoPjApe2NvbnN0IGg9W107ZC5kYXRlSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2gu'@;
put 'Zm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lmKGV0ZShNLnYpKXtjb25zdCBJPVhlZShOdW1iZXIoTS52KSk7TS52PUkuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoSS5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrSS5nZXREYXRlKCkpLnNsaWNlKC0yKX1lbHNlIGlmKE0mJk0u'@;
put 'diYmLTE9PT1NLnYudG9TdHJpbmcoKS5pbmRleE9mKCI6Iikpe2NvbnN0IEk9bmV3IERhdGUoTS52KTsiSW52YWxpZCBEYXRlIiE9PUkudG9VVENTdHJpbmcoKSYmKE0udj1RZWUoSSkpfWZbdl09TX0pfSl9aWYoZC50aW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGg9W107ZC50aW1lSGVhZGVy'@;
put 'cy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lmKGV0ZShNLnYpfHxqNmUoTS52KXx8TS52LmluY2x1ZGVzKCJFLSIpKXtjb25zdCBJPVhlZShOdW1iZXIoTS52KSk7'@;
put 'TS52PUI2ZShJKX1mW3ZdPU19KX0pfWlmKGQuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLmRhdGVUaW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29u'@;
put 'c3QgTT1mW3ZdO2lmKGV0ZShNLnYpfHxqNmUoTS52KSl7Y29uc3QgST1YZWUoTnVtYmVyKE0udikpO00udj1RZWUoSSkrIiAiK0I2ZShJKX1lbHNle2lmKC0xPT09TS52LmluZGV4T2YoIiAiKSYmLTEhPT1NLnYuaW5kZXhPZigiOiIpKXtsZXQgRz1NLnYuc3Vic3RyaW5nKDAsTS52LmluZGV4'@;
put 'T2YoIjoiKSk7Rz1HKyIgIitNLnYuc3Vic3RyaW5nKE0udi5pbmRleE9mKCI6IikrMSksTS52PUd9Y29uc3QgST1uZXcgRGF0ZShNLnYpOyJJbnZhbGlkIERhdGUiIT09SS50b1VUQ1N0cmluZygpJiYoTS52PVFlZShJKSsiICIrKGM9PntsZXQgbD0oIjAiK2MuZ2V0SG91cnMoKSkuc2xpY2Uo'@;
put 'LTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdldFNlY29uZHMoKSkuc2xpY2UoLTIpLGx9KShJKSl9Zlt2XT1NfSl9KX1yZXR1cm4gYX11cGRhdGVYTFJ1bGVDb2xzKGwsYSxkKXtpZihkLnhsUnVsZXMubGVuZ3RoPjApe2Nv'@;
put 'bnN0IGg9W107ZC54bFJ1bGVzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYuWExfQ09MVU1OKSYmKGYuaW5kZXg9bC5pbmRleE9mKGYuWExfQ09MVU1OKSxoLnB1c2goZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2LmluZGV4XTsiRk9STVVMQSI9PT12'@;
put 'LlhMX1JVTEUmJiJmImluIE0mJigibiI9PT1NLnQ/TS52PSI9IitNLmY6TS53PSI9IitNLmYpLGZbdl09TX0pfSl9cmV0dXJuIGF9dG9Cc3RyKGwpe2xldCBhPW5ldyBVaW50OEFycmF5KGwpLGQ9IiIsaD1hLmJ5dGVMZW5ndGg7Zm9yKGxldCBmPTA7ZjxoO2YrKylkKz1TdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKGFbZl0pO3JldHVybiBkfX1sZXQgVzZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGlj'@;
put 'ZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZD1mPT5uZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZS5vcGVuKGYpLnN1YnNjcmliZShJPT57dihJLnBhc3N3b3JkKX0pfSl9cGFyc2VFeGNlbEZpbGUoYSxkLGgp'@;
put 'e3JldHVybiBuZXcgWjZlKHtsaWNlbmNlU3RhdGU6dGhpcy5saWNlbmNlU3RhdGV9KS5wYXJzZVNwcmVhZHNoZWV0RmlsZShhLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCxkLGgpfXhsc3hSZWFkRmlsZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCBmPW5ldyBaNmUoe2xp'@;
put 'Y2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pO2xldCB2PW5ldyBGaWxlUmVhZGVyO3Yub25sb2FkPU09PntmLnhzbHhTdGFydFJlYWRpbmcoTSx0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQpLnRoZW4oST0+e2QoSSl9KS5jYXRjaChJPT57aChJKX0pfSx2LnJlYWRBc0FycmF5QnVmZmVy'@;
put 'KGEpfSl9cGFyc2VFeGNlbFNoZWV0TmFtZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGgsZik9Pntjb25zdCB2PW5ldyBGaWxlUmVhZGVyO2lmKCFhKXJldHVybiBjb25zb2xlLndhcm4oImZpbGUgaXMgbWlzc2luZyIpLGgoe3NoZWV0'@;
put 'TmFtZXM6W119KTt2Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciBNPVEoZnVuY3Rpb24qKEkpe2lmKCFJPy50YXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJGaWxlIHJlYWRlciBldmVudC50YXJnZXQgaXMgbWlzc2luZyIpO2xldCBHLHVlLHJlPSExO2NvbnN0IHllPUkudGFyZ2V0LnJl'@;
put 'c3VsdDt0cnl7Rz1UdS5yZWFkKHllLHtib29rU2hlZXRzOiEwLHR5cGU6ImJpbmFyeSJ9KX1jYXRjaChFZSl7aWYoIUVlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSlyZXR1cm4gZigiRXJyb3IgcmVhZGluZyB0aGUgZmlsZSIpO3tyZT0hMDtsZXQgQmU9ITE7'@;
put 'Zm9yKDtyZTspe2lmKHVlPXlpZWxkIGQucHJvbXB0RXhjZWxQYXNzd29yZCh7ZXJyb3I6QmV9KSwhdWUpcmV0dXJuIHJlPSExLGYoIk5vIHBhc3N3b3JkIHByb3ZpZGVkIik7dHJ5e0c9VHUucmVhZCh5ZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkiLHBhc3N3b3JkOnVlfSkscmU9ITEs'@;
put 'QmU9ITF9Y2F0Y2goR2Upe0JlPSEwLEdlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KHJlPSExKX1pZighdWUpcmV0dXJuIGYoIkludmFsaWQgcGFzc3dvcmQsIGZhaWxlZCB0byBkZWNyeXB0IHRoZSBmaWxlIil9fX1pZighRylyZXR1cm4gZigiRXJyb3Ig'@;
put 'cGFyc2luZyB0aGUgd29ya2Jvb2siKTt0cnl7cmV0dXJuIGgoe3NoZWV0TmFtZXM6Ry5TaGVldE5hbWVzLHBhc3N3b3JkOnVlfSl9Y2F0Y2goRWUpe2NvbnNvbGUuZXJyb3IoRWUpfX0pO3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gTS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHYub25l'@;
put 'cnJvcj1mdW5jdGlvbihNKXtjb25zb2xlLmxvZyhNKX0sdi5yZWFkQXNCaW5hcnlTdHJpbmcoYSl9KX0pKCl9Ynl0ZXNUb01CKGEpe3JldHVybiBwYXJzZUZsb2F0KChhLzEwNDg1NzYpLnRvRml4ZWQoMikpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8'@;
put 'fGMpKENyKENoZSksQ3IobWMpLENyKGMxKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWTk9dm9pZCAwLHI2dD1bImVuLUdCIixbWyJhIiwicCJdLFsiYW0iLCJw'@;
put 'bSJdLFk5XSxbWyJhbSIsInBtIl0sWTksWTldLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5Iiwi'@;
put 'U2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLFk5LFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwdCIsIk9jdCIs'@;
put 'Ik5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sWTksW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJp'@;
put 'c3QiLCJBbm5vIERvbWluaSJdXSwxLFs2LDBdLFsiZGQvTU0veSIsImQgTU1NIHkiLCJkIE1NTU0geSIsIkVFRUUsIGQgTU1NTSB5Il0sWyJISDptbSIsIkhIOm1tOnNzIiwiSEg6bW06c3MgeiIsIkhIOm1tOnNzIHp6enoiXSxbInsxfSwgezB9IixZOSwiezF9ICdhdCcgezB9IixZOV0sWyIu'@;
put 'IiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJHQlAiLCJceGEzIiwiQnJpdGlzaCBQb3VuZCIse0pQWTpbIkpQXHhhNSIsIlx4YTUiXSxVU0Q6WyJV'@;
put 'UyQiLCIkIl19LCJsdHIiLGZ1bmN0aW9uIG42dChjKXtjb25zdCBhPU1hdGguZmxvb3IoTWF0aC5hYnMoYykpLGQ9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWEmJjA9PT1kPzE6NX1dLGk2dD1bImlucHV0Il0sYTZ0PVsiKiJdLHM2dD0o'@;
put 'YyxsKT0+KHsid2lkdGgucHgiOmMsIm1heC1oZWlnaHQucHgiOmx9KTtmdW5jdGlvbiBvNnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDcpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTHIoIiAiLGEubG9hZGluZ01vcmU/IkxvYWRpbmcuLi4iOiJMT0FEIE1PUkUi'@;
put 'LCIgIil9fWxldCBZNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNkcj1hLHRoaXMuaW5wdXRJZD0iIix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuYXV0b2NvbXBsZXRlPSJvZmYiLHRo'@;
put 'aXMudGFiaW5kZXg9IiIsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy5vbklucHV0S2V5ZG93bj1uZXcgS3IsdGhpcy5vbklucHV0Q2hhbmdlPW5ldyBLcix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9uTG9hZGluZ01vcmU9bmV3IEty'@;
put 'LHRoaXMuZGF0YWxpc3RPcGVuPSExLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5PTE1MCx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5pbnB1dENsaWVudFJlY3Q9e30sdGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmxvYWRpbmdNb3JlPSEx'@;
put 'fW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX0sNTAwKX1vbklucHV0RmlyZWQoYSxkLGgpe3RoaXMub3BlbkRhdGFsaXN0KCJjbGljayIhPT1oKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMu'@;
put 'ZmlsdGVyT3B0aW9uc0xpc3QoKSwoIXRoaXMuZW1pdE9ubHlTZWxlY3RlZHx8ZCkmJih0aGlzLm9uSW5wdXRDaGFuZ2UuZW1pdCh7dGFyZ2V0Ont2YWx1ZTp0aGlzLnZhbHVlfX0pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSl9b25JbnB1dENsaWNrKGEpe3RoaXMub3BlbkRh'@;
put 'dGFsaXN0KCl9b3BlbkRhdGFsaXN0KGE9ITApe3RoaXMuZGF0YWxpc3RPcGVuPSEwLGEmJih0aGlzLmFmdGVyT3BlbkxvY2s9ITAsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmFmdGVyT3BlbkxvY2s9ITF9LHRoaXMuYWZ0ZXJPcGVuTG9ja0Rl'@;
put 'bGF5KSl9Y2xvc2VEYXRhbGlzdCgpe2NsZWFyVGltZW91dCh0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQpLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmRhdGFsaXN0T3Blbj0hMX1yZXNldERhdGFsaXN0RmlsdGVyKCl7dGhpcy5maWx0ZXJPcHRpb25zTGlzdCghMCl9b25JbnB1'@;
put 'dEZvY3VzaW4oYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITB9b25JbnB1dEZvY3Vzb3V0KGEpe3RoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25JbnB1dE1vdXNlZW50ZXIoYSl7dGhpcy5pbnB1dENsaWVudFJlY3Qud2lkdGh8fHRoaXMuY2FsY3VsYXRlSW5w'@;
put 'dXRQb3NpdGlvbigpfWZpbHRlck9wdGlvbnNMaXN0KGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO2lmKDA9PT10aGlzLnZhbHVlLmxl'@;
put 'bmd0aCl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1pZihhKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWNvbnN0IHY9Zi5pbm5lclRleHR8fCIiLE09Zi52YWx1ZXx8IiI7KHYrTSk/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy52YWx1'@;
put 'ZS50b0xvd2VyQ2FzZSgpKT9mLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOmYuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fXNldFRvQ2xvc2VEYXRhbGlzdCgpe3RoaXMuZGF0YWxpc3RDbG9zZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2V8fHRo'@;
put 'aXMuYWZ0ZXJPcGVuTG9ja3x8KHRoaXMuY2xvc2VEYXRhbGlzdCgpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5yZXNldERhdGFsaXN0RmlsdGVyKCkpfSwxMDApfWNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKXtjb25zdCBkPXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/'@;
put 'LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Qud2lkdGg+MCYmZC5oZWlnaHQ+MCYmKHRoaXMuaW5wdXRDbGllbnRSZWN0PXt3aWR0aDpkLndpZHRoLGJvdHRvbTpkLmJvdHRvbX0pLHRoaXMuaW5uZXJIZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0fW9uRGF0YUxpc3RNb3VzZUVudGVyKGEpe3Ro'@;
put 'aXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITB9b25EYXRhTGlzdE1vdXNlTGVhdmUoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9b25EYXRhTGlzdFNjcm9sbChhKXt0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgp'@;
put 'fW9uRGF0YUxpc3RDbGljayhhKXtjb25zdCBkPWEudGFyZ2V0OyJsb2FkLW1vcmUiIT09ZC5kYXRhc2V0Py50eXBlPyJPUFRJT04iIT09ZC50YWdOYW1lfHx0aGlzLnNldE9wdGlvblZhbHVlKGQuaW5uZXJUZXh0LGQudmFsdWUpOnRoaXMubG9hZE1vcmUoKX1sb2FkTW9yZSgpe3RoaXMub25M'@;
put 'b2FkaW5nTW9yZS5lbWl0KHtsb2FkTW9yZUZpbmlzaGVkOmE9Pnt0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9YX19KSx0aGlzLmxvYWRpbmdNb3JlPSEwfXNldE9wdGlvblZhbHVlKGEsZCl7KGF8fGQpJiYoZHx8KGQ9YSkpLGQmJih0aGlzLnByZXZlbnREYXRhbGlz'@;
put 'dENsb3NlPSExLHRoaXMudmFsdWU9ZCx0aGlzLm9uSW5wdXRGaXJlZChudWxsLCEwLCJjbGljayIpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCkpfW9uTWFpbktleWRvd24oYSl7c3dpdGNoKGEua2V5KXtjYXNlIkFycm93VXAiOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygidXAiKTticmVh'@;
put 'aztjYXNlIkFycm93RG93biI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJkb3duIik7YnJlYWs7Y2FzZSJFbnRlciI6dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCl9fW9uSW5wdXRLZXl1cChhKXtyZXR1cm4hdGhpcy5kYXRhbGlzdE9wZW58fCgiRXNjYXBlIj09PWEua2V5PyhhLnN0b3BQ'@;
put 'cm9wYWdhdGlvbigpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSwhMSk6dm9pZCAwKX11bnNlbGVjdEFsbE9wdGlvbnMoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0'@;
put 'aW9uYCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIil9c2VsZWN0Rm9jdXNlZE9wdGlvbigpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb24uZm9jdXNlZGApO2Em'@;
put 'JnRoaXMub25EYXRhTGlzdENsaWNrKHt0YXJnZXQ6YX0pLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9Z2V0T3B0aW9uc01vdmVGb2N1cyhhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uOm5vdCguaGlkZGVuKWAp'@;
put 'O2xldCBoPTA7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IHY9ZFtmXTtpZih2LmNsYXNzTGlzdC5jb250YWlucygiZm9jdXNlZCIpKXtoPSJkb3duIj09PWE/ZisxOmYtMSxoPDAmJihoPWQubGVuZ3RoLTEpLGg+ZC5sZW5ndGgtMSYmKGg9MCksdi5jbGFzc0xpc3QucmVtb3Zl'@;
put 'KCJmb2N1c2VkIik7YnJlYWt9fWRbaF0uY2xhc3NMaXN0LmFkZCgiZm9jdXNlZCIpfW9uUmVzaXplKGEpe3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKHhvKSl9fXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXV0b2NvbXBsZXRlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmRmEoaTZ0LDUpLDImZCl7bGV0IGY7eWkoZj1iaSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9u'@;
put 'KGQsaCl7MSZkJiZGdCgicmVzaXplIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vblJlc2l6ZSh2KX0sMCx0Uyl9LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsYXV0'@;
put 'b2NvbXBsZXRlOiJhdXRvY29tcGxldGUiLHRhYmluZGV4OiJ0YWJpbmRleCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7b25JbnB1dEtleWRvd246Im9uSW5wdXRLZXlkb3duIixvbklucHV0Q2hh'@;
put 'bmdlOiJvbklucHV0Q2hhbmdlIix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uTG9hZGluZ01vcmU6Im9uTG9hZGluZ01vcmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6YTZ0LGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1siaW5wdXQiLCIiXSxbIm9wdGlvbnMiLCIiXSxbMSwiYXV0b2NvbXBs'@;
put 'ZXRlLXdyYXBwZXIiLDMsImtleWRvd24iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIsImZvY3Vzb3V0Iiwi'@;
put 'a2V5dXAiLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiLCJuZ1N0eWxlIiwiaWQiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsImNs'@;
put 'YXNzIiwibG9hZC1tb3JlIiw0LCJuZ0lmIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO3NhKCksZGUoMCwiZGl2IiwyKSxGdCgia2V5ZG93biIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0'@;
put 'KGYpLEN0KGgub25NYWluS2V5ZG93bihNKSl9KSxkZSgxLCJpbnB1dCIsMywwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGdpKGgudmFsdWUsTSl8fChoLnZhbHVlPU0pLEN0KE0pfSksRnQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3Qo'@;
put 'aC5vbklucHV0Q2xpY2soTSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGaXJlZChNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dE1vdXNlZW50ZXIoTSkpfSkoImZvY3VzIixmdW5j'@;
put 'dGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNpbihNKSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGb2N1c291dChNKSl9KSgia2V5dXAiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRLZXl1cChNKSl9'@;
put 'KSxoZSgpLFd0KDMsImRpdiIsNCksZGUoNCwiZGl2Iiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RDbGljayhNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdE1vdXNlRW50ZXIoTSkp'@;
put 'fSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RNb3VzZUxlYXZlKE0pKX0pKCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RTY3JvbGwoTSkpfSksZGUoNSwiZGl2IixudWxsLDEpLFdyKDcpLGhlKCks'@;
put 'Z3QoOCxvNnQsMiwxLCJvcHRpb24iLDYpLGhlKCkoKX1pZigyJmQpe2NvbnN0IGY9ZGEoNik7ZmUoKSxNZSgiaWQiLGguaW5wdXRJZCkoInBsYWNlaG9sZGVyIixoLnBsYWNlaG9sZGVyKSxmaSgibmdNb2RlbCIsaC52YWx1ZSksTWUoImRpc2FibGVkIixoLmRpc2FibGVkKSxocigibGlzdCIs'@;
put 'ImRhdGFsaXN0XyIraC5pbnB1dElkKSxmZSgyKSxUcigiaGlkZGVuIiwhaC5kYXRhbGlzdE9wZW4pLGZlKCksVHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxNZSgibmdTdHlsZSIsY3AoMTIsczZ0LGguaW5wdXRDbGllbnRSZWN0LndpZHRoLGguaW5uZXJIZWlnaHQmJmguaW5wdXRDbGll'@;
put 'bnRSZWN0LmJvdHRvbT9oLmlubmVySGVpZ2h0LWguaW5wdXRDbGllbnRSZWN0LmJvdHRvbTp2b2lkIDApKSgiaWQiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoNCksTWUoIm5nSWYiLGYuY2hpbGRyZW4ubGVuZ3RoPjAmJmguZW5hYmxlTG9hZE1vcmUpfX0sZGVwZW5kZW5jaWVzOltiYSxo'@;
put 'c2UsRDIsSTIsR2wsdGwsV29dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksbDZ0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aDwxKXJldHVybiBhO3N3aXRjaChkKXtjYXNlImRhdGUiOnJldHVybiBQcyhhLCJERE1N'@;
put 'TVlZWVk6aGg6bW06c3MiKS5mb3JtYXQoIkREL01NL1lZWVkiKTtjYXNlInRpbWUiOntpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIHRpbWUuIFZhbHVlIGlzIG5vdCBzdHJpbmcuIik7Y29uc3QgaD1wYXJzZUludChhLnNwbGl0KCI6IilbMF0p'@;
put 'LGY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSx2PXBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSk7cmV0dXJuYCR7aDwxMD8iMCIraDpofToke2Y8MTA/IjAiK2Y6Zn06JHt2PDEwPyIwIit2OnZ9YH19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2E6YS50b1N0cmluZygpfXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJkYXRlVGltZUZvcm1hdHRlciIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGM2dD1bImlucHV0Il0sdTZ0PVsiKiJdO2Z1bmN0aW9uIGQ2'@;
put 'dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2FpKDApLE9lKDEsIiAvICIpLGRlKDIsInNwYW4iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25DaGFuZ2VMYWJlbCgic2Vjb25kIikpfSksT2UoMyksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1M'@;
put 'ZSgyKTtmZSgyKSxUcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsInNlY29uZCI9PT1hLmxhYmVsU2VsZWN0ZWQpLGZlKCksU3IoYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIGg2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImxhYmVsIiw0KSgxLCJzcGFuIiw1KSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25DaGFuZ2VMYWJlbCgiZmlyc3QiKSl9KSxPZSgyKSxoZSgpLGd0KDMsZDZ0LDQsMywibmctY29udGFpbmVyIiw2KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO1RyKCJzZWNvbmRMYWJlbEFjdGl2ZSIsYS5zZWNvbmRMYWJlbCYm'@;
put 'YS5zZWNvbmRMYWJlbC5sZW5ndGg+MCksZmUoKSxUcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsImZpcnN0Ij09PWEubGFiZWxTZWxlY3RlZCksZmUoKSxTcihhLmxhYmVsKSxmZSgpLE1lKCJuZ0lmIixhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24gZjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9u'@;
put 'KCk7YWkoMCksZGUoMSwiY2xyLWRhdGUtY29udGFpbmVyIikoMiwiaW5wdXQiLDcpLFFvKDMsImRhdGVUaW1lRm9ybWF0dGVyIiksRnQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uRGF0ZUlucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChhKSxDdChMZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkZvY3VzaW5JbnB1dCho'@;
put 'KSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksaGUoKSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxl'@;
put 'KCk7ZmUoMiksTWUoImlkIixhLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsejgoMyw1LGEudGVtcCwiZGF0ZSIpKSgiY2xyRGF0ZSIsYS52YWx1ZSkoImRpc2FibGVkIixhLmRpc2FibGVkKSxocigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gcDZ0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwiaW5wdXQiLDgpLEZ0KCJpbnB1dCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vz'@;
put 'b3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5v'@;
put 'bklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJ2YWx1ZSIsYS52YWx1ZSkoImlkIixhLmlucHV0SWQpKCJkaXNhYmxl'@;
put 'ZCIsYS5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIGc2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2FpKDApLGRlKDEsImFwcC1hdXRvY29tcGxldGUiLDksMCksRnQoIm9uSW5wdXRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChh'@;
put 'KSxDdChMZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgib25Mb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuYXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCkpfSksV3IoMyksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoImlucHV0SWQiLGEu'@;
put 'aW5wdXRJZCkoInZhbHVlIiwobnVsbD09YS52YWx1ZT9udWxsOmEudmFsdWUudG9TdHJpbmcoKSl8fCIiKSgiZW5hYmxlTG9hZE1vcmUiLGEuZW5hYmxlTG9hZE1vcmUpKCJlbWl0T25seVNlbGVjdGVkIixhLmVtaXRPbmx5U2VsZWN0ZWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCl9fWxldCBH'@;
put 'NmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5wdXRJZD0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmRpc2FibGVTb2Z0c2VsZWN0PSExLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3Jl'@;
put 'PSExLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub25JbnB1dEV2ZW50PW5ldyBLcix0aGlzLmZvY3VzaW5JbnB1dD1uZXcgS3IsdGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlPW5ldyBLcix0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2U9bmV3IEtyLHRoaXMudGVtcD0iIix0aGlz'@;
put 'LmlucHV0Rm9jdXNlZD0hMSx0aGlzLmxhYmVsU2VsZWN0ZWQ9ImZpcnN0In1uZ09uQ2hhbmdlcyhhKXthLnZhbHVlJiZhLnZhbHVlLmN1cnJlbnRWYWx1ZSE9PWEudmFsdWUucHJldmlvdXNWYWx1ZSYmdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEudmFsdWUuY3VycmVudFZhbHVlKX1uZ09uSW5p'@;
put 'dCgpe31hdXRvY29tcGxldGVMb2FkaW5nTW9yZShhKXt0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUuZW1pdChhKX1vbklucHV0RmlyZWQoYSl7Y29uc3QgZD1hLnRhcmdldC52YWx1ZTt0aGlzLnRlbXA9ZCx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZCksdGhpcy5vbklucHV0RXZlbnQu'@;
put 'ZW1pdChhKX1vbkRhdGVJbnB1dEZpcmVkKGEpe3RoaXMudGVtcD1hLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChhKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uSW5wdXRNb3VzZU91dCgpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnZhbHVlPXRoaXMudGVtcCx0aGlzLnRlbXA9'@;
put 'IiIpfW9uSW5wdXRNb3VzZU92ZXIoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy50ZW1wPXRoaXMudmFsdWU/dGhpcy52YWx1ZToiIix0aGlzLnZhbHVlPSIiKX1vbkZvY3VzaW5JbnB1dChhKXt0aGlzLmZvY3VzaW5JbnB1dC5lbWl0KGEpfW9uQ2hhbmdlTGFiZWwoYSl7dGhpcy5s'@;
put 'YWJlbFNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVtaXQoImZpcnN0Ij09PWE/dGhpcy5sYWJlbDp0aGlzLnNlY29uZExhYmVsKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zb2Z0LXNlbGVjdCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJkZhKGM2dCw1KSwyJmQpe2xldCBmO3lpKGY9YmkoKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIsbGFiZWw6Imxh'@;
put 'YmVsIixzZWNvbmRMYWJlbDoic2Vjb25kTGFiZWwiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixkaXNhYmxlU29mdHNlbGVjdDoiZGlzYWJsZVNvZnRzZWxlY3QiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3Jl'@;
put 'OiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25JbnB1dEV2ZW50OiJvbklucHV0RXZlbnQiLGZvY3VzaW5JbnB1dDoiZm9jdXNpbklucHV0IixvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlOiJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixz'@;
put 'ZWxlY3RlZExhYmVsQ2hhbmdlOiJzZWxlY3RlZExhYmVsQ2hhbmdlIn0sZmVhdHVyZXM6W2JsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dTZ0LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWyJpbnB1dCIsIiJdLFsiY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUi'@;
put 'LDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNsaWNrIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMywiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2lu'@;
put 'IiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJpZCIsInBsYWNlaG9sZGVyIiwiY2xyRGF0ZSIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1dC12YWwiLDMsImlucHV0IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91'@;
put 'dCIsInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLDEsImlucHV0LXZhbCIsMywib25JbnB1dENoYW5nZSIsIm9uTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVt'@;
put 'aXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKHNhKCksZ3QoMCxoNnQsNCw2LCJsYWJlbCIsMSksYWkoMSwyKSxndCgyLGY2dCw0LDgsIm5nLWNvbnRhaW5lciIsMykoMyxwNnQsMiw0LCJuZy1jb250YWluZXIiLDMpKDQsZzZ0LDQsNSwi'@;
put 'bmctY29udGFpbmVyIiwzKSxzaSgpKSwyJmQmJihNZSgibmdJZiIsaC5sYWJlbCksZmUoKSxNZSgibmdTd2l0Y2giLGgudHlwZSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ0ZXh0'@;
put 'IikpfSxkZXBlbmRlbmNpZXM6W2JhLHgyLGRwLGNvLHF4LG5PLGRHLFk2ZSxsNnRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksRXc9KCgpPT57Y2xhc3MgY3tzZXQgbmdWYXIoYSl7dGhpcy5jb250ZXh0LiRpbXBsaWNpdD10aGlzLmNvbnRleHQubmdWYXI9YSx0aGlzLmhhc1Zp'@;
put 'ZXd8fCh0aGlzLnZjUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLHRoaXMuY29udGV4dCksdGhpcy5oYXNWaWV3PSEwKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMudGVtcGxhdGVSZWY9YSx0aGlzLnZjUmVmPWQsdGhpcy5jb250ZXh0PXskaW1wbGljaXQ6bnVsbCxuZ1Zh'@;
put 'cjpudWxsfSx0aGlzLmhhc1ZpZXc9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUod2wpLCRlKFRzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1ZhciIsIiJdXSxpbnB1dHM6e25nVmFy'@;
put 'OiJuZ1ZhciJ9fSl9fXJldHVybiBjfSkoKSxtNnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSxkPSJkYXlzIixoPSExKXtpZih2b2lkIDA9PT1hJiYoYT0iIiksInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkp'@;
put 'LDA9PT1hLmxlbmd0aCl7aWYoImRheXMiPT09ZClyZXR1cm4gbnVsbDtpZigic2Vjb25kcyI9PT1kKXJldHVybiBoPyIxMTowMDowMCI6bnVsbH1sZXQgZj10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQpO2lmKDQ9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtj'@;
put 'b25zdCBNPWEuc3BsaXQoIjoiKTtmPW5ldyBEYXRlKE1bMF0pLGYuc2V0SG91cnMocGFyc2VJbnQoTVsxXSkpLGYuc2V0TWludXRlcyhwYXJzZUludChNWzJdKSksZi5zZXRTZWNvbmRzKHBhcnNlSW50KE1bM10pKX1lbHNlIGlzTmFOKE51bWJlcihhKSkmJihmPW5ldyBEYXRlKGEpKTtsZXQg'@;
put 'dj1gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRIb3VycygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldE1pbnV0ZXMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8o'@;
put 'Zi5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSl9YDtyZXR1cm4gaD92OmZ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoYnUsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1hbCh7bmFtZToic2FzVG9Kc0RhdGUiLHR5cGU6YyxwdXJlOiEw'@;
put 'fSl9fXJldHVybiBjfSkoKSx2NnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSl7aWYobnVsbD09YXx8IiI9PT1hKXJldHVybiIiO2xldCBkLGgsZjtpZigic3RyaW5nIj09dHlwZW9mIGEmJjM9PT1hLnNwbGl0KCI6IikubGVu'@;
put 'Z3RoKXtjb25zdCB2PWEuc3BsaXQoIjoiKTtkPXZbMF0saD12WzFdLGY9dlsyXX1lbHNlIm51bWJlciIhPXR5cGVvZiBhJiYoYT1wYXJzZUludChhKSksZD1NYXRoLmZsb29yKGEvMzYwMCksaD1NYXRoLmZsb29yKGElMzYwMC82MCksZj1NYXRoLmZsb29yKGElMzYwMCU2MCk7cmV0dXJuYCR7'@;
put 'dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGQpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhoKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZil9YH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk'@;
put 'fHxjKSgkZShidSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJzZWNvbmRzUGFyc2VyIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeTZ0PShjLGwsYSk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YX0pLGI2dD0oYyxsLGEs'@;
put 'ZCk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSxfNnQ9KGMsbCxhLGQpPT4oe3JhbmdlOiJzdGFydCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MCxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSx3NnQ9KGMsbCxh'@;
put 'LGQpPT4oe3JhbmdlOiJlbmQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjEscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSk7ZnVuY3Rpb24gQzZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp'@;
put 'Y2l0O01lKCJzZWxlY3RlZCIsTGUoKS5sb2dpY09wZXJhdG9yc1swXSksZmUoKSxMcigiICIsYSwiICIpfX1mdW5jdGlvbiBTNnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDIzKSxPZSgxLCJcbiAgICAgICAgIiksV3QoMiwicHJvZ3Jlc3MiKSxPZSgzLCJcbiAgICAgICIpLGhlKCkpfWZ1bmN0'@;
put 'aW9uIE02dChjLGwpezEmYyYmV3QoMCwiZGl2Iil9ZnVuY3Rpb24geDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJzZWxlY3RlZCIsTGUoMikubG9naWNPcGVyYXRvcnNbMF0pLGZlKCksTHIoIiAiLGEs'@;
put 'IiAiKX19ZnVuY3Rpb24gRTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5hZGRHcm91cENsYXVzZSgpKX0pLFd0KDEsImNsci1pY29uIiwzMyksZGUoMiwic3BhbiIpLE9lKDMs'@;
put 'Ikdyb3VwIiksaGUoKSgpfX1mdW5jdGlvbiBUNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuaW5kZXg7cmV0dXJuIEN0KExlKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSksaGUo'@;
put 'KX19ZnVuY3Rpb24gQTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTHIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBrNnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxPZSgxKSxoZSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxTcihhKX19ZnVuY3Rpb24gRDZ0KGMsbCl7MSZjJiZMbCgwKX1mdW5jdGlvbiBJNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3Qg'@;
put 'aD1MZSgyKS5pbmRleCxmPUxlKCkuaW5kZXgsdj1MZSgpO3JldHVybiB2LmN1cnJlbnRRdWVyeUluZGV4PWgsQ3Qodi5jdXJyZW50Q2xhdXNlSW5kZXg9Zil9KSxPZSgyLCIgQ2hvb3NlIHZhbHVlcyAiKSxoZSgpLGd0KDMsRDZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKX1pZigyJmMp'@;
put 'e2NvbnN0IGE9TGUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1MZSgpLmluZGV4O0xlKCk7Y29uc3Qgdj1kYSgzNyk7ZmUoMyksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLHYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsYk0oMix5NnQsZCxoLGYpKX19ZnVuY3Rpb24gUjZ0KGMsbCl7'@;
put 'MSZjJiZMbCgwKX1mdW5jdGlvbiBMNnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU0KSxndCgxLFI2dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLm5nVmFyLGQ9TGUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCx2PUxlKCkuaW5kZXgsTT1MZSgp'@;
put 'LEk9ZGEoMzEpLEc9ZGEoMzMpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9JOkcpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsdFIoMixiNnQsaCxmLHYsYSkpfX1mdW5jdGlvbiBPNnQoYyxsKXsxJmMmJkxsKDApfWZ1bmN0aW9uIFA2dChjLGwpezEmYyYm'@;
put 'TGwoMCl9ZnVuY3Rpb24gRjZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NSkoMSwiZGl2Iiw1NiksZ3QoMixPNnQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpLGRlKDMsImRpdiIsNTcpLGd0KDQsUDZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'TGUoKS5uZ1ZhcixkPUxlKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1MZSgpLmluZGV4LE09TGUoKSxJPWRhKDMxKSxHPWRhKDM1KTtmZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0k6RykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0Uig0LF82dCxo'@;
put 'LGYsdixhKSksZmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9JOkcpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsdFIoOSx3NnQsaCxmLHYsYSkpfX1mdW5jdGlvbiBINnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDU4KSgxLCJsYWJl'@;
put 'bCIsNyksT2UoMiwiVmFsdWUiKSxoZSgpLGRlKDMsImlucHV0Iiw1OSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxpY2l0O3JldHVybiBnaShmLnZhbHVlLGgpfHwoZi52YWx1ZT1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixm'@;
put 'dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLmluZGV4LHY9TGUoKS5pbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLGYsdikpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoMyksZmkoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5j'@;
put 'dGlvbiBONnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ2KSxndCgxLEk2dCw0LDYsImRpdiIsNDcpKDIsTDZ0LDIsNywiZGl2Iiw0OCkoMyxGNnQsNSwxNCwiZGl2Iiw0OSkoNCxINnQsNCwxLCJkaXYiLDUwKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgi'@;
put 'bmdJZiIsIklOIj09PWEub3BlcmF0b3J8fCJOT1QgSU4iPT09YS5vcGVyYXRvciksZmUoKSxNZSgibmdJZiIsIkJFVFdFRU4iIT09YS5vcGVyYXRvciYmIklOIiE9PWEub3BlcmF0b3ImJiJOT1QgSU4iIT09YS5vcGVyYXRvciYmIkxJS0UiIT09YS5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWEu'@;
put 'b3BlcmF0b3ImJiJCRUdJTlNfV0lUSCIhPT1hLm9wZXJhdG9yKSxmZSgpLE1lKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9wZXJhdG9yKSxmZSgpLE1lKCJuZ0lmIiwiTElLRSI9PT1hLm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YS5vcGVyYXRvcnx8IkNPTlRBSU5TIj09PWEub3BlcmF0b3Ip'@;
put 'fX1mdW5jdGlvbiBWNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDEwKSgxLCJkaXYiLDM1KSgyLCJkaXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3QiLDM3KSxwaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBn'@;
put 'aShmLnZhcmlhYmxlLGgpfHwoZi52YXJpYWJsZT1oKSxDdChoKX0pLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLiRpbXBsaWNpdCxNPWYuaW5kZXgsST1MZSgpLmluZGV4O3JldHVybiBDdChMZSgpLnZhcmlhYmxlSW5wdXRDaGFuZ2Uodi52YXJpYWJs'@;
put 'ZSxNLEksaCkpfSksZ3QoNCxBNnQsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxkZSg1LCJkaXYiLDM5KSg2LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDcsImxhYmVsIiksT2UoOCwiT3BlcmF0b3IiKSxoZSgpLGRlKDksInNlbGVjdCIsNDApLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv'@;
put 'bihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5vcGVyYXRvcixoKXx8KGYub3BlcmF0b3I9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09TGUoKS5pbmRleDtyZXR1cm4g'@;
put 'Q3QoTGUoKS5zZXRWYXJpYWJsZU9wZXJhdG9yKHYsZi5vcGVyYXRvcixNKSl9KSxndCgxMCxrNnQsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxndCgxMSxONnQsNSw0LCJkaXYiLDQxKSxkZSgxMiwiZGl2Iiw0MikoMTMsImJ1dHRvbiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25z'@;
put 'dCBoPXd0KGEpLmluZGV4LGY9TGUoKS5pbmRleDtyZXR1cm4gQ3QoTGUoKS5yZW1vdmVDbGF1c2UoaCxmKSl9KSxXdCgxNCwiY2xyLWljb24iLDQ0KSgxNSwic3BhbiIpLGhlKCksZGUoMTYsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuaW5k'@;
put 'ZXg7cmV0dXJuIEN0KExlKCkuYWRkQ2xhdXNlKGgpKX0pLFd0KDE3LCJjbHItaWNvbiIsMzMpKDE4LCJzcGFuIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPUxlKCkuaW5kZXgsZj1MZSgpO1RyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xh'@;
put 'dXNlKSxmZSgzKSxNZSgiaWQiLCJzZWxlY3RfdmFsc192YXJfaWQiK2QrIl8iK2gpKCJpbnB1dElkIiwidmFsc192YXJfaWQiK2QrIl8iK2gpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksZmkoInZhbHVlIixhLnZhcmlhYmxlKSxmZSgpLE1lKCJuZ0Zvck9mIixmLmNvbHMpLGZlKDUpLGZpKCJu'@;
put 'Z01vZGVsIixhLm9wZXJhdG9yKSxmZSgpLE1lKCJuZ0Zvck9mIixhLm9wZXJhdG9ycyksZmUoKSxNZSgibmdWYXIiLCJEQVRFIj09PWEuZGR0eXBlfHwiREFURVRJTUUiPT09YS5kZHR5cGV8fCJUSU1FIj09PWEuZGR0eXBlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLDE9PT1mLmNsYXVzZXMucXVl'@;
put 'cnlPYmpbaF0uZWxlbWVudHMubGVuZ3RoKX19ZnVuY3Rpb24gQjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyNCkoMSwiZGl2IiwxMCkoMiwiZGl2IiwyNSkoMywiZGl2IiwyNikoNCwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg1LCJsYWJlbCIpLE9lKDYsIkxvZ2lj'@;
put 'IiksaGUoKSxkZSg3LCJzZWxlY3QiLDI3KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuY2xhdXNlTG9naWMsaCl8fChmLmNsYXVzZUxvZ2ljPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHd0KGEpLEN0KExlKCkuc2V0TG9naWMoKSl9KSxndCg4LHg2dCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLFd0KDksImJyIiksZ3QoMTAsRTZ0LDQsMCwiYnV0dG9uIiwyOCksaGUoKSxkZSgxMSwiZGl2IiwyOSksZ3QoMTIsVDZ0LDEsMCwiY2xyLWljb24iLDMwKSgxMyxWNnQs'@;
put 'MTksMTEsImRpdiIsMzEpLGhlKCkoKSxXdCgxNCwiYnIiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSxUcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoNiksZmkoIm5nTW9kZWwiLGEuY2xhdXNlTG9naWMpLE1lKCJkaXNhYmxlZCIs'@;
put 'YS5lbGVtZW50cy5sZW5ndGg8MiksZmUoKSxNZSgibmdGb3JPZiIsZC5sb2dpY09wZXJhdG9ycyksZmUoMiksTWUoIm5nSWYiLGQuaW5uZXJXaWR0aD43NjgpLGZlKDIpLE1lKCJuZ0lmIixkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjEpLGZlKCksTWUoIm5nRm9yT2YiLGEuZWxlbWVudHMp'@;
put 'fX1mdW5jdGlvbiBqNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYyKSxRbygyLCJzYXNUb0pzRGF0ZSIpLFFvKDMsInNhc1RvSnNEYXRlIiksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCksdj1m'@;
put 'LnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsST1mLnF1ZXJ5SW5kZXgsRz1mLmNsYXVzZUluZGV4O3JldHVybiBDdChMZSgpLmRhdGVDaGFuZ2UoaCx2LEksRyxNKSl9KSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1'@;
put 'ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksTWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9BYygyLDMsZC52YWx1ZVtoXSk6QWMoMyw1LGQudmFsdWUpKX19ZnVuY3Rpb24gejZ0KGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MyksUW8oMiwic2FzVG9Kc0RhdGUiKSxRbygzLCJzYXNUb0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJ'@;
put 'bmRleDtyZXR1cm4gQ3QoTGUoKS5nZXRRdWVyeURhdGVUaW1lKE0sdikuZGF0ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLGY9aC5xdWVyeSx2PWgucXVlcnlWYWx1ZUluZGV4LE09aC5xdWVyeUluZGV4LEk9aC5jbGF1c2VJbmRleDtyZXR1cm4g'@;
put 'Q3QoTGUoKS5kYXRlVGltZUNoYW5nZShmLE0sSSx2KSl9KSxoZSgpLGRlKDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLFFvKDUsInNhc1RvSnNEYXRlIiksUW8oNiwic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKSx2PWYucXVlcnlJ'@;
put 'bmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuZ2V0UXVlcnlEYXRlVGltZShNLHYpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxJPWguY2xh'@;
put 'dXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuZGF0ZVRpbWVDaGFuZ2UoZixNLEksdikpfSksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLE1lKCJkaXNhYmxlU29mdHNl'@;
put 'bGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/ejgoMiw2LGQudmFsdWVbaF0sInNlY29uZHMiKTp6OCgzLDksZC52YWx1ZSwic2Vjb25kcyIpKSxmZSgzKSxNZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNf'@;
put 'dGltZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP0NVKDUsMTIsZC52YWx1ZVtoXSwic2Vjb25kcyIsITApOkNVKDYsMTYsZC52YWx1ZSwic2Vjb25kcyIsITApKX19ZnVuY3Rpb24gVTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0'@;
put 'Iiw2NSksUW8oMiwic2Vjb25kc1BhcnNlciIpLFFvKDMsInNlY29uZHNQYXJzZXIiKSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsST1mLnF1ZXJ5SW5kZXgsRz1mLmNsYXVzZUluZGV4O3JldHVy'@;
put 'biBDdChMZSgpLnRpbWVDaGFuZ2UoaCx2LEksRyxNKSl9KSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksTWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0'@;
put 'SWQiLCJ2YWxzXyIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP0FjKDIsMyxkLnZhbHVlW2hdKTpBYygzLDUsZC52YWx1ZSkpfX1mdW5jdGlvbiBaNnQoYyxsKXsxJmMmJihhaSgwLDYwKSxndCgxLGo2dCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpKDIsejZ0LDcsMjAsIm5nLWNvbnRhaW5l'@;
put 'ciIsNjEpKDMsVTZ0LDQsNywibmctY29udGFpbmVyIiw2MSksc2koKSksMiZjJiYoTWUoIm5nU3dpdGNoIixsLnF1ZXJ5LmRkdHlwZSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiREFURSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsIkRBVEVUSU1FIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNl'@;
put 'IiwiVElNRSIpKX1mdW5jdGlvbiBXNnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInZhbHVlIixhLnVuZm9ybWF0dGVkKSxmZSgpLExyKCIgIixhLmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVuY3Rpb24g'@;
put 'WTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxXNnQsMiwyLCJvcHRpb24iLDY3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5xdWVyeTtmZSgpLE1lKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIEc2dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLE9lKDEp'@;
put 'LGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuTkFNRSksZmUoKSxMcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uICQ2dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsRzZ0LDIsMiwib3B0aW9uIiw2OSksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxp'@;
put 'Y2l0LGQ9TGUoMikucXVlcnk7ZmUoKSxNZSgibmdJZiIsYS5UWVBFPT09ZC50eXBlKX19ZnVuY3Rpb24gSzZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSwkNnQsMiwxLCJuZy1jb250YWluZXIiLDM4KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdGb3JPZiIs'@;
put 'YS5jb2xzKX19ZnVuY3Rpb24gWDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw2NiksRnQoInNlbGVjdGVkTGFiZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7cmV0dXJuIEN0KExlKCkuc2VsZWN0ZWRMYWJlbENoYW5n'@;
put 'ZShoLGYpKX0pLHBpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5xdWVyeTtyZXR1cm4gZ2koZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeUluZGV4LE09Zi5j'@;
put 'bGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLnRhcmdldC52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeSxNPWYucXVlcnlJbmRleCxJPWYuY2xhdXNlSW5kZXg7cmV0'@;
put 'dXJuIEN0KExlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxJKSl9KSxndCgxLFk2dCwyLDEsImRpdiIsMjApKDIsSzZ0LDIsMSwiZGl2IiwyMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXg7TWUo'@;
put 'InNlY29uZExhYmVsIiwiVmFyaWFibGUiKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS52YWx1ZVZhcmlhYmxlKSgiaW5wdXRJZCIsInZhbHNfIitkKyJfIitoKSxmaSgidmFsdWUiLGEudmFsdWUpLE1lKCJlbmFibGVMb2FkTW9yZSIsYS5ub2JzPmEudmFsdWVzLmxlbmd0aCksZmUoKSxNZSgibmdJ'@;
put 'ZiIsIWEudmFsdWVWYXJpYWJsZSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZVZhcmlhYmxlKX19ZnVuY3Rpb24gcTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5mb3JtYXR0ZWQpLGZlKCks'@;
put 'THIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIEo2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNzApLHBpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleDty'@;
put 'ZXR1cm4gZ2kodi52YWx1ZVtNXSxoKXx8KHYudmFsdWVbTV09aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLnF1ZXJ5LHY9aC5xdWVyeUluZGV4LE09aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhm'@;
put 'LnZhbHVlLHYsTSkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeUluZGV4LEk9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxN'@;
put 'LEkpKX0pLGd0KDEscTZ0LDIsMiwib3B0aW9uIiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5yYW5nZSxkPWwucXVlcnksaD1sLnF1ZXJ5VmFsdWVJbmRleDtNZSgiaW5wdXRJZCIsInZhbHMtIithKyJfIitsLnF1ZXJ5SW5kZXgrIl8iK2wuY2xhdXNlSW5kZXgpLGZpKCJ2YWx1ZSIsZC52'@;
put 'YWx1ZVtoXSksTWUoImVuYWJsZUxvYWRNb3JlIixkLm5vYnM+ZC52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWgmJiJzdGFydCIhPT1hJiYhZC52YWx1ZVswXSksZmUoKSxNZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1mdW5jdGlvbiBRNnQoYyxsKXsxJmMmJihkZSgwLCJoNSIs'@;
put 'NzgpLE9lKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSxoZSgpKX1mdW5jdGlvbiBlOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEsImlucHV0Iiw4MCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3Qo'@;
put 'YSkuaW5kZXgsdj1MZSgyKS5xdWVyeTtyZXR1cm4gZ2kodi52YWx1ZVtmXS5jaGVja2VkLGgpfHwodi52YWx1ZVtmXS5jaGVja2VkPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMiksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUlu'@;
put 'ZGV4O3JldHVybiBDdChMZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsdixNKSl9KSxoZSgpLGRlKDIsImxhYmVsIiksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgyKS5xdWVyeTtmZSgpLGZpKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNr'@;
put 'ZWQpLGZlKDIpLExyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiB0OHQoYyxsKXtpZigxJmMmJihkZSgwLCJzZWN0aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpLGd0KDIsZTh0LDQsMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDM4KSxoZSgpKCkpLDImYyl7Y29u'@;
put 'c3QgYT1MZSgpLnF1ZXJ5O2ZlKDIpLE1lKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIG44dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1tb2RhbCIsNzEpKDEsImgzIiw3MiksT2UoMiwiU2VsZWN0IHZhbHVlcyIpLGhlKCksZGUoMywiZGl2Iiw3MyksZ3QoNCxR'@;
put 'NnQsMiwwLCJoNSIsNzQpKDUsdDh0LDMsMSwic2VjdGlvbiIsNzUpLGhlKCksZGUoNiwiZGl2Iiw3NikoNywiYnV0dG9uIiw3NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gaC5jdXJyZW50UXVlcnlJbmRleD0tMSxDdChoLmN1cnJlbnRDbGF1c2VJ'@;
put 'bmRleD0tMSl9KSxPZSg4LCIgQXBwbHkgIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4LGY9TGUoKTtNZSgiY2xyTW9kYWxPcGVuIixmLmN1cnJlbnRRdWVyeUluZGV4PT09ZCYmZi5jdXJyZW50Q2xhdXNlSW5kZXg9PT1o'@;
put 'KSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLE1lKCJuZ0lmIiwhZi5pc0FycihhLnZhbHVlKSksZmUoKSxNZSgibmdJZiIsZi5pc0FycihhLnZhbHVlKSl9fSFmdW5jdGlvbiB5d2UoYyxsLGEpeyhmdW5jdGlvbiAkOWUoYyxsLGEpeyJzdHJpbmciIT10eXBlb2YgbCYmKGE9bCxsPWNb'@;
put 'UWwuTG9jYWxlSWRdKSxsPWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSxWeVtsXT1jLGEmJihWeVtsXVtRbC5FeHRyYURhdGFdPWEpfSkoYyxsLGEpfShyNnQpO2xldCBudGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1h'@;
put 'LHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5jZGY9Zix0aGlzLmNhY2hpbmc9ITAsdGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4i'@;
put 'LCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhp'@;
put 'cy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51'@;
put 'bGwsdmFsdWVWYXJpYWJsZTohMSxzdGFydHJvdzowLHJvd3M6MCxub2JzOjAsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dLGNsYXVzZUxvZ2ljOiIiLGludmFsaWRDbGF1c2U6ITF9LHRoaXMuc2VsVmFyPXtpbmRleDpudWxsLGZvcm1hdDpudWxsLHR5cGU6bnVsbH0sdGhpcy5pbk9iaj1be2No'@;
put 'ZWNrZWQ6ITEsdmFsdWU6bnVsbH1dLHRoaXMuZ3JvdXBMb2dpYz0iQU5EIix0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy5sb2dpY09wZXJhdG9ycz1bIkFORCIsIk9SIl0sdGhpcy5x'@;
put 'dWVyeURhdGVUaW1lPVtdLHRoaXMuY3VycmVudENsYXVzZUluZGV4PS0xLHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9LTEsdGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbCx0aGlzLmlubmVyV2lkdGg9d2luZG93LnNjcmVlbi53aWR0aCx0aGlzLmlubmVyV2lkdGg+NzY4JiYodGhpcy5ub0Jv'@;
put 'cmRlcj0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmF5OyIpfWdldFF1ZXJ5RGF0ZVRpbWUoYSxkKXtsZXQgaD10aGlzLnF1ZXJ5RGF0ZVRpbWUuZmluZChmPT5mLmNsYXVzZUluZGV4PT09YSYmZi5xdWVyeUluZGV4PT09ZCk7aWYoIWgpe2NvbnN0IGY9dGhpcy5xdWVyeURhdGVUaW1lLnB1'@;
put 'c2goe2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkLGRhdGU6IiIsdGltZToiIn0pLTE7aD10aGlzLnF1ZXJ5RGF0ZVRpbWVbZl19cmV0dXJuIGh9dXNlUGlja2Vyc0NoYW5nZSgpe3RoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLnVzZVBpY2tlcnMmJnRoaXMuY2xhdXNlcy5xdWVyeU9iai5m'@;
put 'b3JFYWNoKGE9PnthLmVsZW1lbnRzLmZvckVhY2goZD0+e1siREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKGQuZGR0eXBlKSYmZC52YWx1ZVZhcmlhYmxlJiYoZC52YWx1ZT0iIixkLnZhbHVlVmFyaWFibGU9ITEpfSl9KX1yZXNldEZpbHRlcigpe3RoaXMud2hlcmVTdHJpbmc9'@;
put 'dm9pZCAwLHRoaXMud2hlcmVDbGF1c2U9dm9pZCAwLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSx0aGlzLmNsYXVz'@;
put 'ZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy53aGVyZUNsYXVzZUZuKCEwKX1zZXRUb0dsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Kbi5yb290UGFyYW18'@;
put 'fCJlZGl0b3IiPT09Sm4ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09Sm4ucm9vdFBhcmFtJiYoYT0idmlld2VyIikseWMoSm4sYSkuZmlsdGVyLmdyb3VwTG9naWM9dGhpcy5ncm91cExvZ2ljLCJzdHJp'@;
put 'bmciPT10eXBlb2YgdGhpcy53aGVyZUNsYXVzZSYmKHljKEpuLGEpLmZpbHRlci53aGVyZUNsYXVzZT10aGlzLndoZXJlQ2xhdXNlKSwic3RyaW5nIj09dHlwZW9mIHRoaXMubGliZHMmJih5YyhKbixhKS5maWx0ZXIubGliZHM9dGhpcy5saWJkcykseWMoSm4sYSkuZmlsdGVyLmNsYXVzZXM9'@;
put 'dGhpcy5jbGF1c2VzfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09Sm4ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUpuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3Ii'@;
put 'OiJ2aWV3Ij09PUpuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLHljKEpuLGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoeWMoSm4sYSkuZmlsdGVyLmNvbHMpKSkseWMoSm4sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlz'@;
put 'LnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh5YyhKbixhKS5maWx0ZXIudmFscykpKSwiIiE9PXljKEpuLGEpLmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPXljKEpuLGEpLmZpbHRlci5ncm91cExvZ2ljLHRoaXMud2hlcmVDbGF1c2U9eWMoSm4sYSkuZmlsdGVy'@;
put 'LndoZXJlQ2xhdXNlLHRoaXMubGliZHM9eWMoSm4sYSkuZmlsdGVyLmxpYmRzLHRoaXMuY2xhdXNlcz15YyhKbixhKS5maWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdyb3VwTG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1h'@;
put 'LHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9ZGF0ZUNoYW5nZShhLGQsaCxmLHYpe2xldCBNPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMu'@;
put 'cXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09TSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhNLGgsZil9ZGF0ZVRpbWVDaGFuZ2UoYSxkLGgsZil7Y29uc3Qgdj10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoaCxkKTtpZigiIj09PXYuZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjt2'@;
put 'LmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IE09cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMF0pLEk9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMV0pLEc9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMl0pfHwwO2xldCByZT1uZXcgRGF0ZSh2LmRhdGUpLHVlPW5l'@;
put 'dyBEYXRlKHJlLmdldEZ1bGxZZWFyKCkscmUuZ2V0TW9udGgoKSxyZS5nZXREYXRlKCksTSxJLEcpLHllPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKHVlLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09YS5vcGVyYXRvciYmdm9pZCAwIT09ZiYmKHRoaXMuY2xhdXNl'@;
put 'cy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZVtmXT15ZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyh5ZSxkLGgpfXRpbWVDaGFuZ2UoYSxkLGgsZix2KXthPWEudGFyZ2V0LnZhbHVlO2xldCB5ZT02MCpwYXJzZUludChhLnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3Bs'@;
put 'aXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09eWUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoeWUsaCxmKX1keW5h'@;
put 'bWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZCl7bGV0IGg9W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBmPTA7Zjx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2YrKylmb3Io'@;
put 'bGV0IHY9MDt2PHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50cy5sZW5ndGg7disrKXtpZihmPT09YSYmdj09PWR8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRl'@;
put 'cyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZSkpY29udGludWU7bGV0IE09IiI7Y29uc3QgST10aGlzLmNsYXVzZXMucXVlcnlPYmpb'@;
put 'Zl0uZWxlbWVudHNbdl0ub3BlcmF0b3IsRz10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFyaWFibGU7IkJFVFdFRU4iPT09ST9NPWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2Jq'@;
put 'W2ZdW3ZdLnZhbHVlWzFdfWA6IklOIj09PUl8fCJOT1QgSU4iPT09ST8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlLmZvckVhY2gocmU9PntpZihyZS5jaGVja2VkKXtsZXQgdWU9cmUudmFsOyJzdHJpbmciIT10eXBlb2YgdWV8fCgwLHBnLmlzU3BlY2lhbE1pc3NpbmcpKHVl'@;
put 'KT9NLmxlbmd0aD4wP00rPWAsJHt1ZX1gOk09YCgke3VlfWA6TS5sZW5ndGg+MD9NKz1gLCcke3VlfSdgOk09YCgnJHt1ZX0nYH19KSxNLmxlbmd0aD4wJiYoTSs9IikiKSk6IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWU/TT0iY2hhciI9PT10aGlzLmNs'@;
put 'YXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGUmJihNPWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWV9J2ApLGgucHVzaCh7R1JPVVBf'@;
put 'TE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOkcsT1BFUkFUT1JfTk06SSxSQVdfVkFMVUU6TXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2Jq'@;
put 'W2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSl9cmV0dXJuIGh9Z2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtjb25zdCBNPXYubGliZHN8fCIiO3RyeXtpZih2b2lkIDAhPT12LmNvbHMpe2ZvcihsZXQgR2U9MDtHZTx2LmNvbHMubGVuZ3Ro'@;
put 'O0dlKyspdi5jb2xzW0dlXS5OQU1FPT09ZCYmKHYuc2VsVmFyLmluZGV4PUdlKTtjb25zdCBJPXYuY29sc1t2LnNlbFZhci5pbmRleF0uRERUWVBFLHtzdGFydHJvdzpHLHJvd3M6cmV9PXYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXSx1ZT12LnJvd3NfaW5jcmVtZW50LHllPUcr'@;
put 'cmU7bGV0IEVlPVtdO3YuZHluYW1pY1doZXJlQ2xhdXNlJiYoRWU9di5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGYsaCkpO2NvbnN0IEJlPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKEkpO3Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGQsTSxFZSx5ZSx1'@;
put 'ZSkudGhlbihHZT0+e2NvbnN0IHN0PUdlLnZhbHMse1NUQVJUUk9XOnB0LFJPV1M6ZHQsTk9CUzpxdH09R2UubWV0YVswXTtpZih2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0uc3RhcnRyb3c9cHQsdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnJvd3M9ZHQsdi5j'@;
put 'bGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLm5vYnM9cXQsMT09PXN0Lmxlbmd0aCYmIiI9PT1zdFswXS5GT1JNQVRURUQmJiIiPT09c3RbMF0uVU5GT1JNQVRURUQ/YS5sb2FkTW9yZUZpbmlzaGVkKCExKToodi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5w'@;
put 'dXNoKC4uLnN0Lm1hcChobj0+e2NvbnN0IE1uPSJudW0iPT09R2UuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBrcj1NbiYmKDAscGcuaXNTcGVjaWFsTWlzc2luZykoaG4uVU5GT1JNQVRURUQpPyIuIitobi5VTkZPUk1BVFRFRDpobi5VTkZPUk1BVFRFRDtyZXR1cm4gTW4mJm51'@;
put 'bGw9PT1rciYmKGtyPSIuIikse2Zvcm1hdHRlZDpCZT9obi5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpobi5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6a3J9fSkpLGEubG9hZE1vcmVGaW5pc2hlZChxdC12LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLmxlbmd0aD4wKSks'@;
put 'di53aGVyZUNsYXVzZUZuKCksdi5zZXRUb0dsb2JhbHMoKSx2LndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09di5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUluZGV4Om1uLHF1ZXJ5SW5kZXg6d259PXYucGVuZGluZ0lOVmFsdWVzU2V0O3Yuc2V0SU5WYWx1ZXMobW4sd24p'@;
put 'LHYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9di5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2goR2U9Pnt2LndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChJKXt2LmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixJKX19KSgpfWdldFZh'@;
put 'bHVlcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtmLndoZXJlQ2xhdXNlTG9hZGluZz0hMDtsZXQgdj0iIjt2b2lkIDAhPT1mLmxpYmRzJiYodj1mLmxpYmRzKSxmLmNsZWFyVmFsdWVzKGQsaCksZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVl'@;
put 'cz1bXSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9IiIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9yPSI9IixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFyaWFibGU9YTt0cnl7aWYodm9pZCAwIT09Zi5jb2xzKXtm'@;
put 'b3IobGV0IHJlPTA7cmU8Zi5jb2xzLmxlbmd0aDtyZSsrKWYuY29sc1tyZV0uTkFNRT09PWEmJihmLnNlbFZhci5pbmRleD1yZSk7Y29uc3QgTT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLkREVFlQRTtmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uZGR0eXBlPU0sZi5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU9Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5UWVBFLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcnM9Im51bSI9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT9mLm51bU9wZXJhdG9yczpm'@;
put 'LmNoYXJPcGVyYXRvcnM7bGV0IEk9W107Zi5keW5hbWljV2hlcmVDbGF1c2UmJihJPWYuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihoLGQpKTtjb25zdCBHPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKE0pO2Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGEs'@;
put 'dixJLDEsZi5pbml0aWFsX3Jvd3MpLnRoZW4ocmU9Pntjb25zdCB1ZT1yZS52YWxzLHtTVEFSVFJPVzp5ZSxST1dTOkVlLE5PQlM6QmV9PXJlLm1ldGFbMF07aWYoZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnN0YXJ0cm93PXllLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVt'@;
put 'ZW50c1tkXS5yb3dzPUVlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5ub2JzPUJlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9dWUubWFwKEdlPT57Y29uc3Qgc3Q9Im51bSI9PT1yZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IGR0'@;
put 'PXN0JiYoMCxwZy5pc1NwZWNpYWxNaXNzaW5nKShHZS5VTkZPUk1BVFRFRCk/Ii4iK0dlLlVORk9STUFUVEVEOkdlLlVORk9STUFUVEVEO3JldHVybiBzdCYmbnVsbD09PWR0JiYoZHQ9Ii4iKSx7Zm9ybWF0dGVkOkc/R2UuRk9STUFUVEVELnNwbGl0KCIuIilbMF06R2UuRk9STUFUVEVELHVu'@;
put 'Zm9ybWF0dGVkOmR0fX0pLnNsaWNlKDAsMmUzKSxmLndoZXJlQ2xhdXNlRm4oKSxmLnNldFRvR2xvYmFscygpLGYud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1mLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6R2UscXVlcnlJbmRleDpzdH09Zi5wZW5kaW5nSU5W'@;
put 'YWx1ZXNTZXQ7Zi5zZXRJTlZhbHVlcyhHZSxzdCksZi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1mLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChyZT0+e2Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKE0pe2YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVi'@;
put 'bGljL2dldGNvbHZhbHMiLE0pfX0pKCl9Z2V0bG9naWMoYSl7dGhpcy5sb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpfXNldExvZ2ljKCl7dGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1pc0FycihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5JiZhLmxlbmd0'@;
put 'aD4wJiZ0eXBlb2YgYVswXS5jaGVja2VkPCJ1In1zZWxlY3RlZExhYmVsQ2hhbmdlKGEsZCl7ZC52YWx1ZVZhcmlhYmxlPSJWYXJpYWJsZSI9PT1hLGQudmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFyaWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQs'@;
put 'aCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcjsiQkVUV0VFTiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEu'@;
put 'dG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9yKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJ'@;
put 'TiIhPT1kJiYoZj1mIGluc3RhbmNlb2YgQXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBmWzBdP2ZbMF06IiIpLHRoaXMuY2xlYXJWYWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwi'@;
put 'PiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xh'@;
put 'dXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElOIj09PWQpJiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCks'@;
put 'dGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3Io'@;
put 'bGV0IHY9MDt2PGYubGVuZ3RoO3YrKyloLnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbdl0uZm9ybWF0dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJWYWx1ZXMoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFs'@;
put 'dWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS5vcGVyYXRvcjsoIkJFVFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFz'@;
put 'SW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSlpZihkLmludmFsaWRDbGF1c2U9ITEsIiI9PT1kLnZhbHVlJiYiTkUiIT09ZC5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhcmlhYmxlfHxudWxsPT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFsdWUp'@;
put 'cmV0dXJuIGQuaW52YWxpZENsYXVzZT0hMCwhMDtyZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVz'@;
put 'ZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNl'@;
put 'KHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlz'@;
put 'LmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBkPXRoaXMuY2xhdXNlcy5x'@;
put 'dWVyeU9ialthXS5jbGF1c2VMb2dpYzt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM9dHlwZW9mIGQ+InUiPyJBTkQiOiJPUiI9PT1kPyJPUiI6IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFz'@;
put 'SW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2Vs'@;
put 'ZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKGEsZCl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDto'@;
put 'KyspaWYoZFtoXS52YWx1ZT09PWEpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2UoYSl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50'@;
put 'cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4oYT0hMSl7Y29uc3QgZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYoYSYmKGQucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQg'@;
put 'MCE9PXRoaXMubGliZHMpe2xldCBoPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihkLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxpYmRzKTthfHwodGhpcy53aGVyZUNsYXVzZT1oLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9aC5zdHJpbmcpfX1uZ0FmdGVyVmll'@;
put 'd0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxs'@;
put 'LHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vic2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIh'@;
put 'PT1Kbi5yb290UGFyYW0mJiJlZGl0b3IiIT09Sm4ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEpuLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09Sm4ucm9vdFBhcmFtJiZKbi52aWV3ZXIuZmlsdGVyLmNvbHMu'@;
put 'bGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsSm4udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUo'@;
put 'ZD0+eygiaG9tZSI9PT1Kbi5yb290UGFyYW18fCJlZGl0b3IiPT09Sm4ucm9vdFBhcmFtKSYmSm4uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxKbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXci'@;
put 'PT09Sm4ucm9vdFBhcmFtJiZKbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEpuLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3Ro'@;
put 'aXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJfaWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ry'@;
put 'b3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKEloKSwkZShtYyksJGUo'@;
put 'YnUpLCRlKHhvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LGZlYXR1cmVzOlt1YShbe3Byb3ZpZGU6V2YsdXNlVmFsdWU6ImVuLUdCIn1d'@;
put 'KV0sZGVjbHM6MzgsdmFyczoxMSxjb25zdHM6W1sicGlja2VyIiwiIl0sWyJub3RQaWNrZXIiLCIiXSxbIm5vdFBpY2tlclJhbmdlIiwiIl0sWyJjaGVja2JveFZhbHVlcyIsIiJdLFsxLCJjbHItZmxleC1yb3ciLCJjbHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEsImNsci1jb250cm9sLWNv'@;
put 'bnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVj'@;
put 'a2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLXJvdyJdLFsxLCJzZWxlY3QiLCJjbHItY29sLW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01vZGVs'@;
put 'Il0sWzMsInNlbGVjdGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWNvbC1tZC0xMCIsIm1iLTMwIl0sWzEsImxpbmUtbnVtYmVycyIsImxhbmd1YWdlLW1hcmt1cCJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwibGFuZ3VhZ2Ut'@;
put 'c3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xhdXNlcy1jb250YWluZXIiLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiY2xhdXNlLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInNlbGVjdGVkIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3Ai'@;
put 'XSxbMSwiY2xhdXNlLXJvdyJdLFsxLCJjbGF1c2UtbG9naWMiLCJjbHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayBtdC0xMCIs'@;
put 'MywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2xhdXNlLXF1ZXJ5IiwiY2xyLWNvbC1tZC0xMCJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsImNsYXNzIiwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3ciLDMsImlu'@;
put 'dmFsaWQtY2xhdXNlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0xMCIsMywiY2xpY2siXSxbInNoYXBlIiwicGx1cyJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsMSwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24i'@;
put 'LDMsImNsaWNrIl0sWzEsInZhcmlhYmxlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbMSwiZGF0YWxpc3Qtd3JhcHBlciJdLFsibGFiZWwiLCJWYXJpYWJsZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJpZCIsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVk'@;
put 'IiwidmFsdWUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm9wZXJhdG9yLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsYXNzIiwidmFsdWUtY29sIGZvcm0tZ3JvdXAgY2xyLWNvbC1t'@;
put 'ZC0zIiw0LCJuZ1ZhciJdLFsxLCJjbGF1c2UtYnV0dG9ucyIsImNsci1jb2wtbWQtMiIsImJ0bi1ncm91cCJdLFsxLCJidG4iLCJidG4td2FybmluZyIsImJ0bi1ibG9jayIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsImJ0'@;
put 'bi1ibG9jayIsMywiY2xpY2siXSxbMSwidmFsdWUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xhc3MiLCJjaGVja2JveC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpbmdsZS1maWVsZC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJhbmdlLXZhbHMiLDQsIm5n'@;
put 'SWYiXSxbImNsYXNzIiwiY29udGFpbnMtdmFscyIsNCwibmdJZiJdLFsxLCJjaGVja2JveC12YWxzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsInNpbmds'@;
put 'ZS1maWVsZC12YWxzIl0sWzEsInJhbmdlLXZhbHMiXSxbMSwiZnJvbSJdLFsxLCJ0byJdLFsxLCJjb250YWlucy12YWxzIl0sWyJ0eXBlIiwidGV4dCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxb'@;
put 'ImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0'@;
put 'IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJ0eXBlIiwidGltZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0aW1lIiwzLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29m'@;
put 'dHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsMywic2VsZWN0ZWRMYWJlbENoYW5nZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsInNlY29uZExhYmVsIiwiZW1pdE9ubHlTZWxlY3RlZCIsImlucHV0'@;
put 'SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nSWYiXSxbImxhYmVsIiwiVmFsdWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5n'@;
put 'TW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZGlzYWJsZWQiXSxbMSwiaW4tdmFsdWVzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwibm8tdmFsdWVz'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZvcm0tYmxvY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwibm8tdmFsdWVzIl0sWzEsImZvcm0tYmxvY2siXSxbInR5cGUiLCJjaGVja2JveCIs'@;
put 'ImNsckNoZWNrYm94IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlucHV0Iiw2KSxwaSgibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGdpKGguZHluYW1pY1doZXJlQ2xhdXNlLE0pfHwoaC5keW5hbWljV2hlcmVDbGF1c2U9TSksQ3QoTSl9KSxoZSgpLGRlKDQsImxhYmVsIiw3KSxPZSg1LCJEeW5hbWljIHdoZXJlIGNsYXVzZSIpLGhlKCkoKSgpLGRlKDYsImRpdiIs'@;
put 'OCkoNywiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSg4LCJpbnB1dCIsOSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLnVzZVBpY2tlcnMsTSl8fChoLnVzZVBpY2tlcnM9TSksQ3QoTSl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChm'@;
put 'KSxDdChoLnVzZVBpY2tlcnNDaGFuZ2UoKSl9KSxoZSgpLGRlKDksImxhYmVsIiw3KSxPZSgxMCwiIFVzZSBwaWNrZXJzICIpLGhlKCkoKSgpKCksZGUoMTEsImRpdiIsMTApKDEyLCJkaXYiLDExKSgxMywiY2xyLXNlbGVjdC1jb250YWluZXIiKSgxNCwibGFiZWwiKSxPZSgxNSwiR3JvdXAg'@;
put 'bG9naWMiKSxoZSgpLGRlKDE2LCJzZWxlY3QiLDEyKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGdpKGguZ3JvdXBMb2dpYyxNKXx8KGguZ3JvdXBMb2dpYz1NKSxDdChNKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxD'@;
put 'dChoLnNldEdyb3VwTG9naWMoaC5ncm91cExvZ2ljKSl9KSxndCgxNyxDNnQsMiwyLCJvcHRpb24iLDEzKSxoZSgpKCkoKSxkZSgxOCwiZGl2IiwxNCkoMTksInByZSIsMTUpLE9lKDIwLCIgICAgICAiKSxndCgyMSxTNnQsNCwwLCJkaXYiLDE2KSxPZSgyMiwiXG5cbiAgICAgICIpLGRlKDIz'@;
put 'LCJjb2RlIiwxNyksT2UoMjQpLGhlKCksT2UoMjUsIlxuICAgICIpLGhlKCkoKSgpLGRlKDI2LCJkaXYiLDE4KSgyNywiZGl2IiwxOSksZ3QoMjgsTTZ0LDEsMCwiZGl2IiwyMCkoMjksQjZ0LDE1LDgsImRpdiIsMjEpLGhlKCkoKSxndCgzMCxaNnQsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCww'@;
put 'LGdjKSgzMixYNnQsMyw3LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGdjKSgzNCxKNnQsMiw1LCJuZy10ZW1wbGF0ZSIsbnVsbCwyLGdjKSgzNixuOHQsOSw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwzLGdjKX0yJmQmJihmZSgzKSxmaSgibmdNb2RlbCIsaC5keW5hbWljV2hlcmVDbGF1c2UpLGZlKDUp'@;
put 'LGZpKCJuZ01vZGVsIixoLnVzZVBpY2tlcnMpLGZlKDgpLE1lKCJkaXNhYmxlZCIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk8MSksZmkoIm5nTW9kZWwiLGguZ3JvdXBMb2dpYyksZmUoKSxNZSgibmdG'@;
put 'b3JPZiIsaC5sb2dpY09wZXJhdG9ycyksZmUoNCksTWUoIm5nSWYiLGgud2hlcmVDbGF1c2VMb2FkaW5nKSxmZSgzKSxTcihoLndoZXJlQ2xhdXNlKSxmZSgzKSxUcigiY2xyLWNvbC1tZC0xMCIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1'@;
put 'c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksZmUoKSxNZSgibmdJZiIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksZmUoKSxNZSgibmdGb3JPZiIsaC5jbGF1c2VzLnF1ZXJ5T2JqKSl9LGRlcGVuZGVu'@;
put 'Y2llczpbUXMsYmEsQjEseDIsZHAsT2wscnUsWXUsY28sSWQsRmIseGgsRTcsWmIsRDIsSTIsR2wsTWQsazIsdGwsV28sRzZlLEV3LG02dCx2NnRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksaTQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31vbkNsaWNrKGEpe2EudGFy'@;
put 'Z2V0LmZvY3VzKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBTdGVhbEZvY3VzIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYm'@;
put 'RnQoImNsaWNrIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNsaWNrKHYpfSl9fSl9fXJldHVybiBjfSkoKTtjb25zdCByOHQ9WyJzZWFyY2hMaWJUcmVlSW5wdXQiXTtmdW5jdGlvbiBpOHQoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gYTh0KGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBzOHQoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDApLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3Qo'@;
put 'aCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxndCg0LGk4dCwxLDAsImNsci1pY29uIiw5KSg1LGE4dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1kYSgzKSxkPUxlKCk7ZmUo'@;
put 'MiksZmkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIG84dChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBsOHQoYyxsKXtp'@;
put 'ZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9ZGEoMyksZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVy'@;
put 'KGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBjOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwxOCwyKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3Qg'@;
put 'Zj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIp'@;
put 'KX0pLGhlKCksZ3QoNCxvOHQsMSwwLCJjbHItaWNvbiIsOSkoNSxsOHQsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZGEoMyksZD1MZSgyKS4kaW1wbGljaXQ7ZmUoMiksZmkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1'@;
put 'ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHU4dChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBkOHQoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gaDh0KGMsbCl7MSZjJiYoZGUoMCwic3Bh'@;
put 'biIpLE9lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkpfWZ1bmN0aW9uIGY4dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxndCgxLGg4dCwyLDAsInNwYW4iLDI1KSxoZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcjtmZSgpLE1lKCJuZ0lmIixhKX19ZnVuY3Rpb24gcDh0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIGc4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3d0KGEpLExlKCk7Y29uc3QgaD1kYSgzKSxmPUxlKDMpLiRpbXBsaWNpdCx2PUxlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIG04dChjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDI5LDIpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmlu'@;
put 'Zz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDMpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykudHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCksZ3QoNCxwOHQsMSwwLCJjbHItaWNvbiIsOSkoNSxnOHQsMSwwLCJjbHIt'@;
put 'aWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZGEoMyksZD1MZSgzKS4kaW1wbGljaXQ7ZmUoMiksZmkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0'@;
put 'aW9uIHY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1MZSgzKS4kaW1wbGljaXQsdj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExl'@;
put 'KCkuY29sdW1uT25DbGljayhoLHYsZikpfSksV3QoMiwiY2xyLWljb24iLDMxKSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoNik7ZmUoKSxUcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxMcigiICIsYS5D'@;
put 'T0xOQU1FLCIgIil9fWZ1bmN0aW9uIHk4dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsbTh0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMix2OHQsNCwzLCJjbHItdHJlZS1ub2RlIiw0KSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuY29sdW1u'@;
put 'cyksZmUoKSxNZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gYjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5uZ1ZhcixmPUxlKCkuJGltcGxpY2l0'@;
put 'LHY9TGUoMikuJGltcGxpY2l0LE09TGUoKTtyZXR1cm4gQ3QoaD8iIjpNLnRhYmxlT25DbGljayhmLlRBQkxFVVJJLGYsdikpfSksYWkoMiwyMSksZ3QoMyx1OHQsMSwwLCJjbHItaWNvbiIsMjIpKDQsZDh0LDEsMCwiY2xyLWljb24iLDIzKSxzaSgpLE9lKDUpLGhlKCksZ3QoNixmOHQsMiwx'@;
put 'LCJjbHItdG9vbHRpcC1jb250ZW50IiwyNCkoNyx5OHQsMywyLCJuZy1jb250YWluZXIiLDI1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9TGUoKS4kaW1wbGljaXQsaD1MZSgyKS4kaW1wbGljaXQsZj1MZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZl'@;
put 'IixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLGZlKCksTWUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMCksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMSksZmUoKSxMcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLGZl'@;
put 'KDIpLE1lKCJuZ0lmIixmLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBfOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4g'@;
put 'Q3QoTGUoKS50cmVlTm9kZUNsaWNrZWQoaCxmLHYudGFibGVzKSl9KSxwaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBnaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGd0KDEsYjh0LDgsOSwiY2xy'@;
put 'LXRvb2x0aXAiLDE5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgzKTtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxmaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1'@;
put 'bW5zKSxmZSgpLE1lKCJuZ1ZhciIsZCsxPmgubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gdzh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTQsMSksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChh'@;
put 'KTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubGlicmFyeUxpc3QpKX0pLHBpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5leHBhbmRl'@;
put 'ZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgyLCJwIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9ZGEoMSksZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIHYubGliPWYuTElCUkFSWUlELEN0KHYubGlicmFyeU9uQ2xpY2sodi5saWJ8fCIiLGYs'@;
put 'aCkpfSksV3QoMywiY2xyLWljb24iLDE2KSxPZSg0KSxoZSgpLGd0KDUsYzh0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoNixfOHQsMiw1LCJjbHItdHJlZS1ub2RlIiwxNyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCks'@;
put 'ZmkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDQpLExyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rp'@;
put 'b24gQzh0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSx3OHQsNyw3LCJjbHItdHJlZS1ub2RlIiwxMyksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBTOHQoYyxsKXsxJmMmJihkZSgwLCJk'@;
put 'aXYiLDMyKSgxLCJzcGFuIiwzMyksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1sZXQgTTh0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zZWFyY2hMaWJJbnB1dExpc3Q9bmV3IGxoLHRo'@;
put 'aXMudGFibGVPbkNsaWNrRW1pdHRlcj1uZXcgS3IsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXI9bmV3IEtyLHRoaXMuaGFzQ29sdW1ucz0hMSx0aGlzLnBhZ2luZz0hMCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMubGlicmFyaWVzUGFn'@;
put 'aW5nPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNlYXJjaExpYklucHV0TGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1uZ09uQ2hh'@;
put 'bmdlcyhhKXthLmxpYnJhcnlMaXN0Py5jdXJyZW50VmFsdWUmJnRoaXMubGlicmFyeUxpc3QmJnRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1s'@;
put 'aWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksSm4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9dHJlZU5vZGVDbGlj'@;
put 'a2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7ZC5pbkZvcmVncm91bmQ9ITA7Y29uc3QgZj0oKT0+c2V0VGltZW91dCgoKT0+aC5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1l'@;
put 'bnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCkpO2lmKGQudGFibGVzKWQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiEwfSk7ZWxzZXtkLmxvYWRp'@;
put 'bmdUYWJsZXM9ITAsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiExfSk7Y29uc3Qgdj1zZXRJbnRlcnZhbCgoKT0+e2QubG9hZGluZ1RhYmxlc3x8KGYoKSxjbGVhckludGVydmFsKHYpKX0sNTAwKX1kLmV4cGFuZGVkJiZm'@;
put 'KCksdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyh0aGlzLmxpYnJhcnlMaXN0LGQpfXRhYmxlT25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57Zi5oYXNDb2x1bW5zPyhkLmNvbHVtbnM/KGQuZXhw'@;
put 'YW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVt'@;
put 'bnM9ITAsZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6Zi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJp'@;
put 'OmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlz'@;
put 'LmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gu'@;
put 'bGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdp'@;
put 'bmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRsZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQt'@;
put 'MTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShidSksJGUoYzEpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1'@;
put 'bmN0aW9uKGQsaCl7aWYoMSZkJiZGYShyOHQsNSksMiZkKXtsZXQgZjt5aShmPWJpKCkpJiYoaC5zZWFyY2hMaWJJbnB1dExpc3Q9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJzY3JvbGwiLGZ1bmN0aW9uKHYpe3JldHVybiBoLmhhbmRsZVNjcm9sbCh2KX0pfSxp'@;
put 'bnB1dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1p'@;
put 'dHRlciJ9LGZlYXR1cmVzOltibF0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsibGliVHJlZU5vZGUiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2Yi'@;
put 'XSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRv'@;
put 'Y29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0s'@;
put 'WzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRl'@;
put 'ciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIi'@;
put 'LCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJd'@;
put 'LFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIs'@;
put 'ImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYi'@;
put 'LDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihk'@;
put 'LGgpezEmZCYmKGRlKDAsImNsci10cmVlIiksZ3QoMSxzOHQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSgyLEM4dCwyLDEsIm5nLWNvbnRhaW5lciIsNCksaGUoKSxndCgzLFM4dCwzLDAsImRpdiIsNSkpLDImZCYmKGZlKCksTWUoIm5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nRm9y'@;
put 'T2YiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSl9LGRlcGVuZGVuY2llczpbUXMsYmEseDIsZHAsQWgsUGQsaGcsT2wsVjAsUDIsWTEsdjcsYjcseTcsR2wsdGwsV28sRXcsaTRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qg'@;
put 'eDh0PVsicmVzaXplQm94Il0sRTh0PVsiZHJhZ0hhbmRsZUNvcm5lciJdLFQ4dD0oYyxsLGEpPT4oe2NvbEhlYWRlcnNIaWRkZW46Yyxjb2xIZWFkZXJzVmlzaWJsZTpsLGhlYWRlclBrczphfSksQTh0PShjLGwpPT4oe3g6Yyx5Omx9KSxrOHQ9KCk9Pih7fSk7ZnVuY3Rpb24gRDh0KGMsbCl7'@;
put 'aWYoMSZjJiYoZGUoMCwic3BhbiIsMzcpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksQnUoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8i'@;
put 'dmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEk4dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzgpLFd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gUjh0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDAp'@;
put 'LE9lKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxoZSgpKX1mdW5jdGlvbiBMOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkYy10cmVlIiw0MSksRnQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGli'@;
put 'cmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLnRhYmxlT25DbGljayhoKSl9KSxoZSgpfTImYyYmTWUoImxpYnJhcnlMaXN0IixMZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gTzh0KGMsbCl7MSZjJiYoZGUoMCwi'@;
put 'cCIsNDIpLE9lKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksaGUoKSl9ZnVuY3Rpb24gUDh0KGMsbCl7MSZjJiZXdCgwLCJjbHItc3Bpbm5lciIsNTApfWZ1bmN0aW9uIEY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImEiLDE3KSxGdCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2Lm1pbmltaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLFd0KDEsImNsci1pY29uIiwyMCksZGUoMiwic3BhbiIsMTkpLE9lKDMsIk1pbmltaXplIHZpZXdib3giKSxoZSgp'@;
put 'KCl9fWZ1bmN0aW9uIEg4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2LnJlc3RvcmUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksV3Qo'@;
put 'MSwiY2xyLWljb24iLDIxKSxkZSgyLCJzcGFuIiwxOSksT2UoMywiUmVzdG9yZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBOOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7'@;
put 'cmV0dXJuIEN0KExlKCkuc2VsZWN0Vmlld2JveChoKSl9KSxkZSgxLCJkaXYiLDQ0KSxPZSgyKSxndCgzLFA4dCwxLDAsImNsci1zcGlubmVyIiw0NSksaGUoKSxkZSg0LCJkaXYiKSg1LCJhIiw0NiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PUxl'@;
put 'KCk7cmV0dXJuIHYucmVzZXRQb3NTaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLFd0KDYsImNsci1pY29uIiw0NyksZGUoNywic3BhbiIsMTkpLE9lKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIiksaGUoKSgpLGd0KDksRjh0LDQsMCwiYSIsNDgpKDEwLEg4dCw0LDAsImEi'@;
put 'LDQ4KSxkZSgxMSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2LmNsb3NlKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLFd0KDEyLCJjbHItaWNvbiIsNDkpLGRlKDEzLCJzcGFuIiwxOSksT2UoMTQsIkNs'@;
put 'b3NlIHZpZXdib3giKSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7VHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxmZSgyKSxaZigiICMiLGEuaWQsIiAiLGEubGlicmFy'@;
put 'eSwiLiIsYS50YWJsZSwiICIpLGZlKCksTWUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKDIpLFRyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSksZmUoNCksTWUoIm5nSWYiLCFhLm1pbmltaXplZCksZmUoKSxNZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1mdW5jdGlvbiBWOHQoYyxsKXtp'@;
put 'ZigxJmMmJihkZSgwLCJvcHRpb24iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxMcigiICIsYSwiICIpfX1mdW5jdGlvbiBCOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJkaXYiLDUzKSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw1NCww'@;
put 'KSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9ZGEoMyksdj1MZSgpLm5nVmFyO3JldHVybiBDdChMZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKGYsaCx2LmNvbEhlYWRlcnNIaWRkZW4pKX0pLGd0KDQsVjh0LDIsMSwib3B0aW9uIiw1NSksaGUoKSgpLHNpKCl9aWYo'@;
put 'MiZjKXtjb25zdCBhPUxlKCkubmdWYXI7ZmUoMiksTWUoImlucHV0SWQiLCJ2aWV3Ym94LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLGZlKDIpLE1lKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlvbiBqOHQoYyxsKXsxJmMmJld0KDAsImNsci1p'@;
put 'Y29uIiw2MSl9ZnVuY3Rpb24gejh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykub25Db2xSZW1vdmUoaCkpfSksaGUoKX19ZnVuY3Rp'@;
put 'b24gVTh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1OCkoMSwic3BhbiIpLE9lKDIpLGd0KDMsajh0LDEsMCwiY2xyLWljb24iLDU5KSxoZSgpLGd0KDQsejh0LDEsMCwiY2xyLWljb24iLDYwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKS5uZ1ZhcixoPUxlKCk7'@;
put 'd3JlKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLFRyKCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLE1lKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5o'@;
put 'ZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKDIpLEJ1KCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1h'@;
put 'dHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLGZlKCksTWUoIm5nSWYiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgpLE1lKCJuZ0lmIiwhZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpfX1mdW5jdGlvbiBaOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxk'@;
put 'ZSgxLCJwIiwxMCksT2UoMiwiQ29sdW1ucyBUbyBEaXNwbGF5IChkcmFnIGFuZCByZS1vcmRlcikiKSxoZSgpLGRlKDMsImRpdiIsNTYpLEZ0KCJjZGtEcm9wTGlzdERyb3BwZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS5jb2x1bW5zRHJvcChoKSl9KSxndCg0LFU4dCw1'@;
put 'LDEzLCJkaXYiLDU3KSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkubmdWYXI7ZmUoMyksTWUoImNka0Ryb3BMaXN0RGF0YSIsYS5jb2xIZWFkZXJzVmlzaWJsZSksZmUoKSxNZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIFc4dChjLGwpe2lmKDEmYyYm'@;
put 'KGRlKDAsImRpdiIsNTEpLGd0KDEsQjh0LDUsMywibmctY29udGFpbmVyIiw1MikoMixaOHQsNSwyLCJuZy1jb250YWluZXIiLDUyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcjtmZSgpLE1lKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLGZlKCksTWUoIm5nSWYiLGEuY29sSGVhZGVy'@;
put 'c1Zpc2libGUpfX1mdW5jdGlvbiBZOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNvbGxhcHNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9u'@;
put 'IEc4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiw4NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuZXhwYW5kKGgpKX0pLGhlKCl9fWZ1bmN0aW9uICQ4dChjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1PbigpO2RlKDAsImNsci1pY29uIiw4OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1kYSgxNik7cmV0dXJuIEN0KExlKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpfX1mdW5jdGlvbiBLOHQoYyxsKXsxJmMmJihkZSgwLCJzcGFu'@;
put 'Iiw4OSksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gWDh0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsOTApLE9lKDEsIkxvYWRpbmcuLi4iKSxoZSgpKX1mdW5jdGlvbiBxOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsOTEpLEZ0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0LGY9ZGEoMTYpO3JldHVybiBMZSgpLnJlbG9hZFRhYmxlRGF0YShoKSxDdChmLnZhbHVlPSIiKX0pLGhlKCl9fWZ1bmN0aW9uIEo4dChjLGwpezEmYyYmKGRlKDAsImRpdiIsOTUpLFd0KDEsImNsci1zcGlubmVyIiwz'@;
put 'OSksaGUoKSl9ZnVuY3Rpb24gUTh0KGMsbCl7aWYoMSZjJiZXdCgwLCJob3QtdGFibGUiLDk2KSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O01lKCJzZXR0aW5ncyIsTGUoKS52aWV3Ym94SG90U2V0dGluZ3MuZ2V0KGEuaWQpfHxabygyLGs4dCkpKCJpZCIsImhvdFRhYmxlXyIrYS5p'@;
put 'ZCl9fWZ1bmN0aW9uIGU3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTIpLGd0KDEsSjh0LDIsMCwiZGl2Iiw5MykoMixROHQsMSwzLCJob3QtdGFibGUiLDk0KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPUxlKCkuJGltcGxpY2l0LGg9TGUoKTtOMSgiZGlzcGxheSIsZC5jb2xs'@;
put 'YXBzZWQ/Im5vbmUiOiIiKSxmZSgpLE1lKCJuZ0lmIixkLmxvYWRpbmdEYXRhJiZhPDApLGZlKCksTWUoIm5nSWYiLGE+LTEmJmgudmlld2JveEhvdFNldHRpbmdzLmdldChkLmlkKSl9fWZ1bmN0aW9uIHQ3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNjMsMSksRnQo'@;
put 'Im1vdXNlZG93biIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5mb2N1c1ZpZXdib3goaCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudmlld2JveERyYWdFbmRlZCho'@;
put 'LGYpKX0pLGRlKDIsImRpdiIsNjQpKDMsInNwYW4iLDY1KSxPZSg0KSxoZSgpLGRlKDUsImRpdiIsNjYpLGd0KDYsWTh0LDEsMCwiY2xyLWljb24iLDY3KSg3LEc4dCwxLDAsImNsci1pY29uIiw2OCksZGUoOCwiY2xyLWljb24iLDY5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13'@;
put 'dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkubWluaW1pemUoaCkpfSksaGUoKSxkZSg5LCJjbHItaWNvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5jbG9zZShoKSl9KSxoZSgpKCkoKSxkZSgxMCwic3BhbiIs'@;
put 'NzEsMiksRnQoImNka0RyYWdNb3ZlZCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1kYSgxKSxNPWRhKDExKTtyZXR1cm4gQ3QoTGUoKS5kcmFnTW92ZShNLHYsZixoKSl9KSxoZSgpLGRlKDEyLCJmb3JtIiw3MikoMTMsImRpdiIsNzMpKDE0LCJkaXYiLDc0KSgxNSwi'@;
put 'aW5wdXQiLDc1LDMpLEZ0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPWRhKDE2KTtyZXR1cm4gQ3QoTGUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLGhlKCksZ3QoMTcsJDh0LDEsMCwiY2xyLWljb24iLDc2KSgxOCxLOHQsMiwwLCJzcGFuIiw3Nyks'@;
put 'aGUoKSxkZSgxOSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIxLCJpbnB1dCIsNzgpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5zZWFyY2hOdW1lcmljLGgpfHwo'@;
put 'Zi5zZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgyMiwibGFiZWwiKSxPZSgyMywiTnVtZXJpYyIpLGhlKCkoKSgpKCksZGUoMjQsImRpdiIsNDQpLGd0KDI1LFg4dCwyLDAsInNwYW4iLDc5KSgyNixxOHQsMSwwLCJjbHItaWNvbiIsODApLGRlKDI3LCJhIiw4MSksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9ZGEoMTYpO3JldHVybiBMZSgpLm9wZW5GaWx0ZXIoaCksQ3QoZi52YWx1ZT0iIil9KSxXdCgyOCwiY2xyLWljb24iLDgyKSxkZSgyOSwic3BhbiIsODMpLE9lKDMwKSxoZSgpKCksZGUoMzEsImNsci1pY29uIiw4NCksRnQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLm9wZW5UYWJsZUVkaXQoaCkpfSksaGUoKSgpKCksZ3QoMzIsZTd0LDMsNCwiZGl2Iiw4NSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgpO04xKCJkaXNwbGF5Iixh'@;
put 'Lm1pbmltaXplZD8ibm9uZSI6IiIpKCJ3aWR0aCIsYS53aWR0aCwicHgiKSgiaGVpZ2h0IixhLmhlaWdodCwicHgiKSgicG9pbnRlci1ldmVudHMiLGEuY29sbGFwc2VkPyJub25lIjoiIikoImJveC1zaGFkb3ciLGEuY29sbGFwc2VkPyJub25lIjoiIiksVHIoImZvY3VzZWQiLGEuZm9jdXNl'@;
put 'ZCksTWUoImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIixjcCgzNCxBOHQsYS54LGEueSkpKCJpZCIsInZpZXdib3hfIithLmlkKSxmZSg0KSxaZigiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKDIpLE1lKCJuZ0lmIiwhYS5jb2xsYXBzZWQpLGZlKCksTWUoIm5n'@;
put 'SWYiLGEuY29sbGFwc2VkKSxmZSgzKSxNZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLGZlKDIpLE4xKCJkaXNwbGF5IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLGZlKDMpLE1lKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxmZSgyKSxNZSgibmdJZiIsIWEu'@;
put 'c2VhcmNoTG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxmZSgzKSxmaSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxmZSg0KSxNZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksZmUoKSxNZSgibmdJZiIsIWEubG9hZGluZ0RhdGEpLGZlKDIpLFRyKCJmaWx0ZXItYWN0'@;
put 'aXZlIiwiMCIhPT1hLmZpbHRlcl9wayksZmUoMiksU3IoYS5maWx0ZXJUZXh0KSxmZSgpLFRyKCJkaXNhYmxlZCIsIWQudGFibGVFZGl0RXhpc3RzKGEpKSxmZSgpLE1lKCJuZ1ZhciIsZC5nZXRWaWV3Ym94VGFibGVJbmRleChhKSl9fWZ1bmN0aW9uIG43dChjLGwpe2lmKDEmYyYmV3QoMCwi'@;
put 'YXBwLXF1ZXJ5Iiw5Nyw0KSwyJmMpe2NvbnN0IGE9TGUoKTtNZSgidmlld2JveElkIixudWxsPT1hLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDphLmZpbHRlcmluZ1ZpZXdib3guaWQpfX1sZXQgJDZlPSgoKT0+e2NsYXNzIGN7Z2V0IHZpZXdib3hNb2RhbCgpe3JldHVybiB0aGlzLl92aWV3Ym94'@;
put 'TW9kYWx9c2V0IHZpZXdib3hNb2RhbChhKXtpZighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3gmJmEpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiVmlld2JveGVzIiksdm9pZCB0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KCExKTt0'@;
put 'aGlzLl92aWV3Ym94TW9kYWw9YSxhJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLHJlLHVlKXt0aGlzLm5nWm9uZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMu'@;
put 'c2FzU3RvcmVTZXJ2aWNlPXYsdGhpcy5sb2dnZXJTZXJ2aWNlPU0sdGhpcy5oZWxwZXJTZXJ2aWNlPUksdGhpcy5yb3V0ZXI9Ryx0aGlzLmFjdGl2YXRlZFJvdXRlPXJlLHRoaXMuY2RmPXVlLHRoaXMuX3ZpZXdib3hNb2RhbD0hMSx0aGlzLnZpZXdib3hNb2RhbENoYW5nZT1uZXcgS3IsdGhp'@;
put 'cy5saWJpbmZvPW51bGwsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSEwLHRoaXMudmlld2JveGVzPVtdLHRoaXMuZGVmYXVsdENvbmZpZz17aWQ6LTEsbGlicmFyeToiIix0YWJsZToiIix3aWR0aDo1MDAsaGVpZ2h0OjMwMCx4OjAseToxNTAsY29sdW1uczpbXX0sdGhpcy5zYXNqc0NvbmZpZz1u'@;
put 'ZXcgeWguU0FTanNDb25maWcsdGhpcy5ob3RUYWJsZURlZmF1bHQ9e2RhdGE6W10saGVhZGVyUGtzOltdLCRkYXRhZm9ybWF0czp7fSxhbGxDb2xIZWFkZXJzOltdLGNvbEhlYWRlcnNIaWRkZW46W10sY29sSGVhZGVyc1Zpc2libGU6W10sY29sSGVhZGVyczpbXSxjb250ZXh0TWVudTpbImNv'@;
put 'cHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxjb2x1bW5zOltdLGNvbHM6W10saGVpZ2h0OjIwMCxzZXR0aW5nczp7fSxoaWRkZW5Db2x1bW5z'@;
put 'OiEwLG1hbnVhbENvbHVtbk1vdmU6ITEsYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLGRyb3Bkb3duTWVudTp2b2lkIDB9LHRoaXMudmlld2JveEhvdFNldHRpbmdzPW5ldyBNYXAsdGhpcy52aWV3Ym94VGFibGVzPVtdLHRoaXMuZmlsdGVyPSExLHRoaXMuZmls'@;
put 'dGVyTG9hZGluZz0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5tYXhWaWV3Ym94ZXM9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD09PTEv'@;
put 'MD82OnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXR8fDZ9bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5m'@;
put 'aW5hbGx5KCgpPT57dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1Nl'@;
put 'cnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94'@;
put 'ZXM7YSYmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2'@;
put 'YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZp'@;
put 'ZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57dGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChhKT4tMSYmdGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShhKX0pfSwxZTMpfWdldCB2aWV3Ym94'@;
put 'TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxl'@;
put 'cyhhLmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2lmKGQudmlld2JveExpbWl0UmVhY2hlZClyZXR1cm47Y29uc3QgaD17Li4uZC5kZWZhdWx0Q29uZmlnLHRhYmxlOmEubGliVGFibGUsbGlicmFy'@;
put 'eTphLmxpYnJhcnkuTElCUkFSWU5BTUUsbG9hZGluZ0RhdGE6ITAsZmlsdGVyX3BrOiIwIixpZDpkLnZpZXdib3hlcy5sZW5ndGgrMSx4OndpbmRvdy5pbm5lcldpZHRoLWQuZGVmYXVsdENvbmZpZy53aWR0aCx5OjE1MH07ZC52aWV3Ym94ZXMucHVzaChoKSxzZXRUaW1lb3V0KCgpPT57ZC5z'@;
put 'ZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pO2NvbnN0IGY9YCR7YS5saWJyYXJ5LkxJQlJBUllSRUZ9LiR7YS5saWJUYWJsZX1gO3lpZWxkIGQubG9hZERhdGEoZixoKSxoLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLGQuc25hcFRvR3JpZCgp'@;
put 'fSkoKX1sb2FkVGFibGVzKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKGg9PntsZXQgZj1oLm1wdGFibGVzLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5NRU1OQU1FfSk7dGhpcy5saWJpbmZvPWgubGliaW5mb3x8W10sdGhpcy50YWJsZXM9ZixkJiYoZC50'@;
put 'YWJsZXM9ZixkLmxpYmluZm89dGhpcy5saWJpbmZvLGQubG9hZGluZ1RhYmxlcz0hMSxmLmxlbmd0aD4wJiYoZC5leHBhbmRlZD0hMCkpfSkuY2F0Y2goaD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihoKX0pfXJlbG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBRKGZ1bmN0aW9u'@;
put 'Kigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBNPWgudmlld2JveFRhYmxlcy5maW5kKEk9Pkkudmlld2JveElkPT09ZC5pZCk7aC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihJPT57TSYmKE0uaG90VGFibGUuZGF0'@;
put 'YT1JLnZpZXdkYXRhLGguY3JlYXRlVmlld2JveFRhYmxlU2V0dGluZ3MoZCkpLGYobnVsbCl9KS5jYXRjaCgoKT0+e3YoKX0pfSl9KSgpfWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT0hMSxJPWgu'@;
put 'dmlld2JveFRhYmxlcy5maW5kKEc9Pkcudmlld2JveElkPT09ZC5pZCk7SSYmKCIwIj09PWQuZmlsdGVyX3BrfHwhZC5maWx0ZXJfcGspJiZmKCksaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihHPT57ST9NPSEwOkk9e3ZpZXdi'@;
put 'b3hJZDpkLmlkLHZpZXdib3hMaWJEYXRhc2V0OmEsaG90VGFibGU6Y0woaC5ob3RUYWJsZURlZmF1bHQpfSxJLmhvdFRhYmxlLmRhdGE9Ry52aWV3ZGF0YSxJLmhvdFRhYmxlLiRkYXRhZm9ybWF0cz1HLiR2aWV3ZGF0YSxJLmhvdFRhYmxlLmNvbHM9Ry5jb2xzLEdlZShJLmhvdFRhYmxlLmNv'@;
put 'bHMsW10sRy4kdmlld2RhdGEpO2xldCByZT1bXSx1ZT1bXTtmb3IobGV0IHllIGluIEcudmlld2RhdGFbMF0peWUmJnVlLnB1c2goeWUpO2ZvcihsZXQgeWU9MDt5ZTx1ZS5sZW5ndGg7eWUrKylyZS5wdXNoKHtkYXRhOnVlW3llXX0pO0kuaG90VGFibGUuaGVhZGVyUGtzPWNMKEcuc2FzcGFy'@;
put 'YW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpKSxJLmhvdFRhYmxlLmFsbENvbEhlYWRlcnM9dWUuZmlsdGVyKHllPT4hSS5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoeWUpKSxJLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW49Y0woSS5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzKSxJLmhv'@;
put 'dFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPXVlLmZpbHRlcih5ZT0+SS5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoeWUpKSxJLmhvdFRhYmxlLmNvbEhlYWRlcnM9dWUsSS5ob3RUYWJsZS5jb2x1bW5zPXJlLGQuY29sdW1ucyYmZC5jb2x1bW5zLmxlbmd0aD4wPyhJLmhvdFRhYmxlLm1h'@;
put 'bnVhbENvbHVtbk1vdmU9ZC5jb2x1bW5zLGQuY29sdW1ucz8ubWFwKCh5ZSxFZSk9Pntjb25zdCBCZT11ZVt5ZV0sR2U9SS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLmluZGV4T2YoQmUpO0dlPi0xJiYoSS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZShHZSwxKSxJLmhvdFRh'@;
put 'YmxlLmNvbEhlYWRlcnNWaXNpYmxlW0VlXT1CZSl9KSk6SS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKC4uLkkuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoMCwxMCkpLEkuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9SS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlz'@;
put 'aWJsZS5maWx0ZXIoeWU9PnllKSxNfHxoLnZpZXdib3hUYWJsZXMucHVzaChJKSxkLnF1ZXJ5PWguaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRy5xdWVyeSksZC5maWx0ZXJUZXh0PUcuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGguY3JlYXRlVmlld2JveFRhYmxlU2V0dGluZ3MoZCksc2V0'@;
put 'VGltZW91dCgoKT0+e2gudXBkYXRlSG90Q29sdW1ucyhJLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW58fFtdLGQuaWQpLHNldFRpbWVvdXQoKCk9Pntjb25zdCB5ZT1oLmdldFZpZXdib3hIb3RJbnN0YW5jZShkLmlkKTt5ZSYmKHllLnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3Zl'@;
put 'OkkuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENvbEhlYWRlcjooRWUsQmUpPT57Y29uc3QgR2U9eWU/LmNvbFRvUHJvcChFZSk7R2UmJkkuaG90VGFibGUuaGVhZGVyUGtzLmluZGV4T2YoR2UpPi0xJiZCZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUi'@;
put 'KSxCZS5jbGFzc0xpc3QuYWRkKEpuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSkseWUucmVuZGVyKCkpLGguc2VsZWN0ZWRWaWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGQpfSw1MDApfSwxMDApLGYoKX0pLmNhdGNoKEc9PntoLmxvZ2dlclNlcnZpY2UuZXJy'@;
put 'b3IoRyksdigpfSl9KX0pKCl9cmVMb2FkVmlld2JveHRhYmxlcyhhKXthLm1hcChkPT57Y29uc3QgaD1gJHtkLmxpYnJhcnl9LiR7ZC50YWJsZX1gO2QubG9hZGluZ0RhdGE9ITAsdGhpcy5sb2FkRGF0YShoLGQpLnRoZW4oKCk9PntkLmxvYWRpbmdEYXRhPSExfSl9KX1tYXhXaWR0aENoZWtl'@;
put 'cihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRWaWV3Ym94VGFibGVJbmRleChhKXtyZXR1cm4gdGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChoPT5oLnZpZXdib3hJZD09PWEuaWQpfWNyZWF0ZVZpZXdib3hUYWJsZVNldHRpbmdzKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94VGFi'@;
put 'bGVJbmRleChhKTtpZigtMT09PWQpcmV0dXJuIHZvaWQgdGhpcy52aWV3Ym94SG90U2V0dGluZ3Muc2V0KGEuaWQse30pO2NvbnN0IGg9dGhpcy52aWV3Ym94VGFibGVzW2RdLGY9dGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodChhKTt0aGlzLnZpZXdib3hIb3RTZXR0aW5ncy5zZXQoYS5pZCx7'@;
put 'Y29sSGVhZGVyczpoLmhvdFRhYmxlLmNvbEhlYWRlcnMsY29sdW1uczpoLmhvdFRhYmxlLmNvbHVtbnMsaGVpZ2h0OmYscmVhZE9ubHk6ITAsbW9kaWZ5Q29sV2lkdGg6dGhpcy5tYXhXaWR0aENoZWtlcixjb3B5UGFzdGU6aC5ob3RUYWJsZS5jb3B5UGFzdGUsY29udGV4dE1lbnU6aC5ob3RU'@;
put 'YWJsZS5jb250ZXh0TWVudSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6NTAsZmlsdGVyczohMCxkcm9wZG93bk1lbnU6aC5ob3RUYWJsZS5kcm9wZG93bk1lbnUsc3RyZXRjaEg6ImFsbCIsY2VsbHM6aC5ob3RUYWJsZS5jZWxscyxtYXhSb3dzOmgu'@;
put 'aG90VGFibGUubWF4Um93c3x8MS8wLG1hbnVhbENvbHVtblJlc2l6ZTohMCxyb3dIZWFkZXJzOiEwLGxpY2Vuc2VLZXk6aC5ob3RUYWJsZS5saWNlbnNlS2V5fSksc2V0VGltZW91dCgoKT0+e3RoaXMuY2RmLmRldGVjdENoYW5nZXMoKSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgTT10aGlzLmdl'@;
put 'dFZpZXdib3hIb3RJbnN0YW5jZShhLmlkKTtNJiYoTS5sb2FkRGF0YShoLmhvdFRhYmxlLmRhdGEpLE0ucmVuZGVyKCkpfSw1MDApfSl9Z2V0Vmlld2JveFRhYmxlU2V0dGluZ3MoYSl7cmV0dXJuIHRoaXMudmlld2JveEhvdFNldHRpbmdzLmdldChhLmlkKXx8e319cmVzaXplKGEsZCl7Y29u'@;
put 'c3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PWgubGVmdC1mLmxlZnQraC53aWR0aCxNPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0eWxlLndpZHRoPXYrInB4IixkLnN0eWxlLmhlaWdodD1NKyJweCIsdGhpcy5zZXRB'@;
put 'bGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFlMywoKT0+e3RoaXMudmlld2JveENoYW5nZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSx0aGlzLnZpZXdib3hlcy5mb3JFYWNoKEk9Pnt0aGlzLnJlZnJlc2hU'@;
put 'YWJsZUFmdGVyUmVzaXplKEkpfSl9KSx7d2lkdGg6dixoZWlnaHQ6TX19ZHJhZ01vdmUoYSxkLGgsZil7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCB2PXRoaXMucmVzaXplKGEsZCk7aC53aWR0aD12LndpZHRoLGguaGVpZ2h0PXYuaGVpZ2h0fSl9c2V0QWxsSGFu'@;
put 'ZGxlVHJhbnNmb3JtKCl7dGhpcy5yZXNpemVCb3hRdWVyeS5mb3JFYWNoKGE9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWBoYW5kbGVfJHthLm5hdGl2ZUVsZW1lbnQuaWR9YCxmPXRoaXMuZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5LmZpbmQoKHYs'@;
put 'TSk9PnYubmF0aXZlRWxlbWVudC5pZD09PWgpO3RoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKGY/Lm5hdGl2ZUVsZW1lbnQsZCwiYm90aCIpfSl9c2V0SGFuZGxlVHJhbnNmb3JtKGEsZCxoKXtjb25zdCBmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHY9ZC53aWR0aC1mLndpZHRoLE09'@;
put 'ZC5oZWlnaHQtZi5oZWlnaHQ7dis9NSxNKz01LCJ4Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dn1weCwgMClgKSwieSI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgwLCAke019cHgpYCksImJvdGgiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0'@;
put 'cmFuc2xhdGUoJHt2fXB4LCAke019cHgpYCl9Zm9jdXNWaWV3Ym94KGEpe3RoaXMudmlld2JveGVzLm1hcChkPT57ZC5mb2N1c2VkPSExfSksYS5mb2N1c2VkPSEwfXZpZXdib3hEcmFnRW5kZWQoYSxkKXtsZXQgZj1hLnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCgpO2QueD1mLmxlZnQsZC55PWYudG9wLHRoaXMudmlld2JveENoYW5nZWQoKX1zbmFwVG9HcmlkKCl7Y29uc3QgYT13aW5kb3cuaW5uZXJXaWR0aCxkPXdpbmRvdy5pbm5lckhlaWdodCxNPU1hdGguY2VpbCh0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksST1NYXRoLmZsb29yKHRoaXMu'@;
put 'dmlld2JveGVzLmxlbmd0aC8yKSx1ZT0oYS01KihNKzEpKS9NLHllPShhLTUqKEkrMSkpL0k7bGV0IEJlPTAsc3Q9KGQtMjUwLTYwKS8yLHB0PTAsZHQ9MDtmb3IobGV0IHF0PTA7cXQ8dGhpcy52aWV3Ym94ZXMubGVuZ3RoO3F0Kyspe2xldCBtbj10aGlzLnZpZXdib3hlc1txdF0sd249IShx'@;
put 'dD5NLTEpO2NvbnN0IGhuPXduP3VlOnllOyF3biYmMD09PWR0JiYocHQ9MCxkdCsrLEJlPTApLG1uLng9NStCZStwdCooaG4rNSksbW4ueT0yNTArZHQqKHN0KzUpLG1uLndpZHRoPWhuLG1uLmhlaWdodD1zdCxwdCsrfXRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhp'@;
put 'cy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLnZpZXdib3hlcy5mb3JFYWNoKHF0PT57dGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShxdCl9KX0pfW1pbmltaXplQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITB9KSx0aGlzLnZpZXdib3hDaGFu'@;
put 'Z2VkKCl9cmVzdG9yZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc2V0UG9zU2l6ZShhKXthLng9d2luZG93LmlubmVyV2lkdGgtdGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEueT10aGlzLmRlZmF1bHRD'@;
put 'b25maWcueSxhLndpZHRoPXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLmhlaWdodD10aGlzLmRlZmF1bHRDb25maWcuaGVpZ2h0LHRoaXMudmlld2JveENoYW5nZWQoKX1taW5pbWl6ZShhKXthLm1pbmltaXplZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZShhKXthLm1pbmlt'@;
put 'aXplZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoYSl9LDEwMCl9Y29sbGFwc2UoYSl7YS5jb2xsYXBzZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWV4cGFuZChhKXthLmNvbGxhcHNlZD0hMSx0aGlzLnZp'@;
put 'ZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoYSl9LDEwMCl9Y2xvc2UoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgoZj0+Zi5pZD09PWEuaWQpLGg9dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChmPT5mLnZp'@;
put 'ZXdib3hJZD09PWEuaWQpO2Q+LTEmJnRoaXMudmlld2JveGVzLnNwbGljZShkLDEpLGg+LTEmJnRoaXMudmlld2JveFRhYmxlcy5zcGxpY2UoaCwxKSx0aGlzLnZpZXdib3hIb3RTZXR0aW5ncy5kZWxldGUoYS5pZCksdGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkPT09YS5pZCYmdGhpcy51bnNl'@;
put 'dFNlbGVjdGVkVmlld2JveCgpLEpuLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKG1aKSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c2VsZWN0Vmlld2JveChhKXt2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlJiZ2b2lkIDA9PT10aGlzLnNlbGVj'@;
put 'dGVkVmlld2JveD90aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpOmEuaWQ9PT10aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ/dGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpOnRoaXMucmVzZXRTZWxlY3RlZFZpZXdib3goYSl9Y29sdW1uc0Ryb3AoYSl7dGhpcy5zZWxlY3RlZFZpZXdib3hU'@;
put 'YWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbiYmKGEucHJldmlvdXNDb250YWluZXI9PT1hLmNvbnRhaW5lcj93MWUoYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpOmZ1bmN0aW9uIGVIZShjLGwsYSxkKXtjb25zdCBoPUx4KGEsYy5sZW5ndGgt'@;
put 'MSksZj1MeChkLGwubGVuZ3RoKTtjLmxlbmd0aCYmbC5zcGxpY2UoZiwwLGMuc3BsaWNlKGgsMSlbMF0pfShhLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90'@;
put 'VGFibGUmJiJvYmplY3QiPT10eXBlb2YgdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYmdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLml0ZW0uZGF0YSxhLmN1cnJlbnRJbmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25D'@;
put 'b2xzZWFyY2hDaGFuZ2UoYSxkLGgpe2NvbnN0IGY9aC5pbmRleE9mKGQpO2guc3BsaWNlKGYsMSksYS52YWx1ZT0iIix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSYmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChk'@;
put 'KSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChkLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFi'@;
put 'bGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKX1vbkNvbFJlbW92ZShhKXtpZih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxl'@;
put 'LmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmluZGV4T2YoYSk7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5zcGxpY2UoZCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChhKSx0'@;
put 'aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUu'@;
put 'aG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19cmVzZXRTZWxlY3RlZFZpZXdib3goYSl7dGhpcy5zZWxlY3RlZFZpZXdib3g9YSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5m'@;
put 'aW5kKGQ9PmQudmlld2JveElkPT09YS5pZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12b2lkIDAsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT12b2lkIDB9c3RvcFByb3BhZ2F0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihhKXt0'@;
put 'aGlzLnNlbGVjdFZpZXdib3goYSk7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChhKV07dGhpcy5maWx0ZXJMaWJkcz1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1gLHRoaXMuZmlsdGVyaW5nVmlld2JveD1hLHRoaXMuZmlsdGVyPSEwLHRoaXMu'@;
put 'Y2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxpYmRzLGQuaG90VGFibGUuY29scyl9b3BlblRhYmxlRWRpdChhKXtjb25zdCBkPWEubGlicmFyeSsiLiIrYS50YWJsZTtsZXQgaD1sb2NhdGlvbi5ocmVmLnNsaWNl'@;
put 'KDAsbG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIikpO2g9YCR7aH0jL2VkaXRvci8ke2R9YCx3aW5kb3cub3BlbihoLCJfYmxhbmsiKX1yZXNldEZpbHRlcigpe3RoaXMuZmlsdGVyaW5nVmlld2JveCYmKHRoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFi'@;
put 'bGVEYXRhKHRoaXMuZmlsdGVyaW5nVmlld2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLEpuLnZpZXdib3hlc1t0aGlzLmZpbHRlcmluZ1ZpZXdib3guaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUobVopKX1zZW5kQ2xhdXNlKCl7dGhpcy5maWx0ZXJM'@;
put 'b2FkaW5nPSEwO2xldCBhPVtdLGQ9W107aWYodHlwZW9mIHRoaXMuY2xhdXNlcz4idSIpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7e2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9iajtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7'@;
put 'Y29uc3Qgdj1oW2ZdLmVsZW1lbnRzO2E9di5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIG51bGw9PT1NLnZhcmlhYmxlfSksYS5sZW5ndGgmJmQucHVzaCh2KX19aWYoZC5sZW5ndGgpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7dHJ5'@;
put 'e2lmKHZvaWQgMCE9PXRoaXMuY2xhdXNlcyYmdGhpcy5maWx0ZXJMaWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O3RoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKHY9Pntjb25zdCBNPXtmaWx0ZXJDbGF1c2VzOltd'@;
put 'fTt2LmVsZW1lbnRzLmZvckVhY2goST0+e00uZmlsdGVyQ2xhdXNlcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoSSkpfSksTS5jbGF1c2VMb2dpYz12LmNsYXVzZUxvZ2ljLGguZmlsdGVyR3JvdXBzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShNKSl9KTtj'@;
put 'b25zdCBmPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KHRoaXMuZmlsdGVyTGliZHMsZikudGhlbih2PT57dGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz12LnJlc3VsdFswXS5GSUxURVJf'@;
put 'UkssdGhpcy5sb2FkRGF0YSh0aGlzLmZpbHRlckxpYmRzLHRoaXMuZmlsdGVyaW5nVmlld2JveCkudGhlbigoKT0+e3RoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX0pLmNhdGNoKHY9Pnt0aGlzLmZpbHRlckxvYWRpbmc9ITF9KX19'@;
put 'Y2F0Y2h7dGhpcy5maWx0ZXJMb2FkaW5nPSExfX1zZWFyY2hUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBmPWEudmFsdWUsdj1kLmxpYnJhcnkrIi4iK2QudGFibGUsTT1wYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKTtj'@;
put 'b25zdCBJPWgudmlld2JveFRhYmxlcy5maW5kKEc9Pkcudmlld2JveElkPT09ZC5pZCk7SSYmKHlpZWxkIGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGYsZC5zZWFyY2hOdW1lcmljLHYsTSkudGhlbihHPT57Ry5zYXNwYXJhbXN8fEcudmlld0RhdGE/KEkuaG90VGFibGUuZGF0'@;
put 'YT1HLnZpZXdkYXRhLGguY3JlYXRlVmlld2JveFRhYmxlU2V0dGluZ3MoZCkpOmQuc2VhcmNoTG9hZGluZz0hMH0pLmNhdGNoKEc9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoRyl9KSxkLnNlYXJjaExvYWRpbmc9ITEpfSkoKX1yZWxvYWRUYWJsZURhdGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4g'@;
put 'UShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWA7YS5sb2FkaW5nRGF0YT0hMCx5aWVsZCBkLnJlbG9hZERhdGEoaCxhKSxhLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkoKX11cGRhdGVIb3RDb2x1bW5z'@;
put 'KGEsZCl7dGhpcy51cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZCksdGhpcy5zZXRDb2x1bW5PcmRlcihkKX11cGRhdGVDb2x1bW5PcmRlckhvdChhLGQsaCl7Y29uc3QgZj10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShoKTtpZihmKXtjb25zdCB2PWYucHJvcFRvQ29sKGEpO2YuZ2V0UGx1'@;
put 'Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIikubW92ZUNvbHVtbih2LGQpLGYucmVuZGVyKCksdGhpcy5zZXRDb2x1bW5PcmRlcihoKX19dGFibGVFZGl0RXhpc3RzKGEpe2NvbnN0IGQ9Sm4uZWRpdG9yLmxpYnNBbmRUYWJsZXMsaD1hLmxpYnJhcnk7cmV0dXJuISFkW2hdJiZkW2hdLmluY2x1ZGVz'@;
put 'KGEudGFibGUpfXNldENvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZChoPT5oLmlkPT09YSk7aWYoZCl7Y29uc3QgaD10aGlzLmNyZWF0ZUNvbHVtbk9yZGVyKGEpO2QuY29sdW1ucz1oLmxlbmd0aD4wP2g6ZC5jb2x1bW5zfXRoaXMudmlld2JveENoYW5nZWQoKX1j'@;
put 'cmVhdGVDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGEpO2lmKCFkKXJldHVybltdO2NvbnN0IGg9ZC5nZXRDb2xIZWFkZXIoKSxmPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnM7aWYoIWYpcmV0dXJuW107Y29u'@;
put 'c3Qgdj10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZT8uY29sSGVhZGVyc1Zpc2libGUubGVuZ3RofHw1LE09W107cmV0dXJuIGgubWFwKChJLEcpPT57aWYoRzx2KXtjb25zdCByZT1mLmluZGV4T2YoSSk7cmU+LTEmJk0ucHVzaChyZSl9fSksTX11cGRhdGVIaWRkZW5Db2x1'@;
put 'bW5zSG90KGEsZCl7Y29uc3QgaD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShkKTtpZihoKXtjb25zdCBmPWEubWFwKHY9PmgucHJvcFRvQ29sKHYpKTtoLnVwZGF0ZVNldHRpbmdzKHtoaWRkZW5Db2x1bW5zOntjb2x1bW5zOmZ9fSksaC5yZW5kZXIoKX19Y2FsY3VsYXRlVGFibGVIZWln'@;
put 'aHQoYSl7cmV0dXJuIGEuaGVpZ2h0LTIwLTM2LTJ9cmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoYSl7Y29uc3QgZD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShhLmlkKTtkJiZzZXRUaW1lb3V0KCgpPT57dHJ5e2QudXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlzLmNhbGN1bGF0ZVRhYmxl'@;
put 'SGVpZ2h0KGEpfSksZC5yZWZyZXNoRGltZW5zaW9ucygpLGQucmVuZGVyKCl9Y2F0Y2h7c2V0VGltZW91dCgoKT0+e3RyeXtkLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodChhKX0pLGQucmVmcmVzaERpbWVuc2lvbnMoKX1jYXRjaChmKXtjb25zb2xl'@;
put 'Lndhcm4oIkZhaWxlZCB0byByZWZyZXNoIEhPVCBkaW1lbnNpb25zIGZvciB2aWV3Ym94IixhLmlkLGYpfX0sNTAwKX19LDEwMCl9Z2V0Vmlld2JveEhvdEluc3RhbmNlKGEpe2lmKCFhfHwhdGhpcy5ob3RUYWJsZUNvbXBvbmVudHMpcmV0dXJuO2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmlu'@;
put 'ZEluZGV4KE09Pk0uaWQ9PT1hKTtpZigtMT09PWQpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3RUYWJsZUNvbXBvbmVudHMudG9BcnJheSgpO2xldCBmPTA7Zm9yKGxldCBNPTA7TTxkO00rKyl0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KHRoaXMudmlld2JveGVzW01dKT4tMSYmZisrO3JldHVy'@;
put 'biBoW2ZdPy5ob3RJbnN0YW5jZXx8dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7bGV0IGE7Y29uc3QgZD10aGlzLmVuY29kZVVybERhdGEodGhpcy52aWV3Ym94ZXMpO2QubGVuZ3RoPjAmJihhPXt2aWV3Ym94ZXM6ZH0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMu'@;
put 'YWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6YX0pLHRoaXMucHJlcGFyZUZpbHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9yKGxldCBhIG9mIHRoaXMudmlld2JveGVzKWlmKEpuLnZpZXdib3hlc1thLmlkXXx8KEpuLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZp'@;
put 'Y2UuZGVlcENsb25lKG1aKSksYS5xdWVyeSYmYS5xdWVyeS5sZW5ndGg+MCl7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXMuZmluZChmPT5mLnZpZXdib3hJZD09PWEuaWQpLGg9YHZpZXdib3hlcy4ke2EuaWR9YDtKbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLnF1ZXJ5PWEucXVlcnksSm4u'@;
put 'dmlld2JveGVzW2EuaWRdLmZpbHRlci5saWJkcz1hLmxpYnJhcnkrIi4iK2EudGFibGUsdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShoLGQ/LmhvdFRhYmxlLmNvbHMpfX1lbmNvZGVVcmxEYXRhKGEpe2xldCBkPSIiO3JldHVybiBhLm1hcCgoaCxm'@;
put 'KT0+e2QrPWAke2guaWR9LSR7aC5saWJyYXJ5fS0ke2gudGFibGV9LSR7aC53aWR0aH0tJHtoLmhlaWdodH0tJHtoLnh9LSR7aC55fS0ke2guY29sbGFwc2VkPzE6MH0tJHtoLm1pbmltaXplZD8xOjB9LSR7aC5maWx0ZXJfcGt8fDB9JHtoLmNvbHVtbnMmJmguY29sdW1ucy5sZW5ndGg+MD8i'@;
put 'LSIraC5jb2x1bW5zPy5qb2luKCIsIik6IiJ9YCxmIT09YS5sZW5ndGgtMSYmKGQrPSI7Iil9KSxkfWRlY29kZVVybERhdGEoYSl7bGV0IGg9W107cmV0dXJuIGEuc3BsaXQoIjsiKS5tYXAodj0+e2NvbnN0IE09di5zcGxpdCgiLSIpO2gucHVzaCh7aWQ6cGFyc2VJbnQoTVswXSksbGlicmFy'@;
put 'eTpNWzFdLHRhYmxlOk1bMl0sd2lkdGg6cGFyc2VJbnQoTVszXSksaGVpZ2h0OnBhcnNlSW50KE1bNF0pLHg6cGFyc2VJbnQoTVs1XSkseTpwYXJzZUludChNWzZdKSxjb2xsYXBzZWQ6ISFwYXJzZUludChNWzddKSxtaW5pbWl6ZWQ6ISFwYXJzZUludChNWzhdKSxjb2x1bW5zOk1bMTBdPy5z'@;
put 'cGxpdCgiLCIpLm1hcChJPT5wYXJzZUludChJKSl8fFtdLGZpbHRlcl9wazpNWzldfSl9KSxofW5nT25EZXN0cm95KCl7dGhpcy5fcXVlcnk/LnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoR2EpLCRlKGMxKSwkZShW'@;
put 'byksJGUobWMpLCRlKEloKSwkZShTZCksJGUoYnUpLCRlKExvKSwkZSh5dSksJGUoeG8pKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3Ym94ZXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYoRmEoeDh0LDUpLEZhKEU4'@;
put 'dCw1KSxGYSgkZyw1KSksMiZkKXtsZXQgZjt5aShmPWJpKCkpJiYoaC5yZXNpemVCb3hRdWVyeT1mKSx5aShmPWJpKCkpJiYoaC5kcmFnSGFuZGxlQ29ybmVyUXVlcnk9ZikseWkoZj1iaSgpKSYmKGguaG90VGFibGVDb21wb25lbnRzPWYpfX0saW5wdXRzOnt2aWV3Ym94TW9kYWw6InZpZXdi'@;
put 'b3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5nZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siaW5wdXQiLCIiXSxbInJlc2l6ZUJveCIsIiJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJdLFsic2VhcmNoRWwiLCIiXSxbInF1ZXJ5Rmls'@;
put 'dGVyIiwiIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJs'@;
put 'aWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwibXQtMCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJj'@;
put 'bGFzcyIsIm0tMCB2aWV3Ym94LWxpbWl0LW5vdGljZSIsNCwibmdJZiJdLFszLCJsaWJyYXJ5TGlzdCIsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLDQsIm5nSWYiXSxbMSwiY3VycmVudGx5LW9wZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29u'@;
put 'dGVudC1iZXR3ZWVuIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC0zIiwzLCJjbGljayJdLFsic2hhcGUiLCJncmlkLXZpZXciLCJzaXplIiwiMTkiXSxbMSwidG9vbHRp'@;
put 'cC1jb250ZW50Il0sWyJzaGFwZSIsIm1pbnVzIiwic2l6ZSIsIjE5Il0sWyJzaGFwZSIsIndpbmRvdy1yZXN0b3JlIiwic2l6ZSIsIjE5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcGVuLXZpZXdib3ggZC1mbGV4IGNsci1qdXN0aWZ5'@;
put 'LWNvbnRlbnQtYmV0d2VlbiBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsIm10LTEwIl0sWzEsIm0t'@;
put 'MCJdLFsiY2xhc3MiLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIiw0LCJuZ1ZhciJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ2aWV3Ym94ZXMtY29u'@;
put 'dGFpbmVyIl0sWyJjbGFzcyIsInZpZXdib3giLCJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDMsImZvY3VzZWQiLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludGVyLWV2ZW50cyIsImJveC1zaGFkb3ci'@;
put 'LCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIiwibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3Nh'@;
put 'YmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzMsInZpZXdib3hJZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0s'@;
put 'WyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwibGljZW5jZS1ub3RpY2UiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwibS0wIiwidmll'@;
put 'd2JveC1saW1pdC1ub3RpY2UiXSxbMywibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsImxpYnJhcnlMaXN0Il0sWzEsInRleHQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwib3Blbi12aWV3Ym94IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1i'@;
put 'ZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLCJjbGFzcyIsIm1sLTMiLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEs'@;
put 'InRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiY3Vyc29yLW1vdmUiLCJzaXplIiwiMTMiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLCJjbGFzcyIsInRvb2x0aXAgdG9vbHRpcC1tZCB0b29s'@;
put 'dGlwLWJvdHRvbS1sZWZ0IG1sLTMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjE5Il0sWyJjbHJTbWFsbCIsIiIsMSwibWwtMyJdLFsiY2RrRHJvcExpc3RHcm91cCIsIiIsMSwiY29uZmlndXJhdGlvbi13cmFwcGVyIl0sWzQsIm5nSWYiXSxbMSwiY29s'@;
put 'cy1zZWFyY2giXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggY29sdW1ucyIsInRhYmluZGV4IiwiMCIsMywidmFsdWVDaGFuZ2UiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCJdLFs0LCJuZ0ZvciIs'@;
put 'Im5nRm9yT2YiXSxbImNka0Ryb3BMaXN0IiwiIiwxLCJjb2xzLWxpc3QiLDMsImNka0Ryb3BMaXN0RHJvcHBlZCIsImNka0Ryb3BMaXN0RGF0YSJdLFsiY2RrRHJhZyIsIiIsMywiY2xhc3MiLCJjdXJzb3ItZGVmYXVsdC1pIiwicHJpbWFyeUtleUhlYWRlclN0eWxlIiwiY2RrRHJhZ0RhdGEi'@;
put 'LCJjZGtEcmFnRGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJhZyIsIiIsMywiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRyYXNoIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2si'@;
put 'LDQsIm5nSWYiXSxbInNoYXBlIiwia2V5Il0sWyJzaGFwZSIsInRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMSwidmlld2JveCIsMywibW91c2Vk'@;
put 'b3duIiwiY2RrRHJhZ0VuZGVkIiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCJdLFsiY2RrRHJhZ0hhbmRsZSIsIiIsMSwiZHJhZy1oYW5kbGUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRhYmxlLXRp'@;
put 'dGxlIl0sWzEsImFjdGlvbnMiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJtaW51cyIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWyJjZGtE'@;
put 'cmFnIiwiIiwxLCJkcmFnSGFuZGxlIiwiY29ybmVyIiwzLCJjZGtEcmFnTW92ZWQiLCJpZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWZsZXgtd3JhcCIsInRhYmxlLXNlYXJjaC13cmFw'@;
put 'cGVyIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LXdyYXAiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVyIiwidHlwZSJdLFsic2hh'@;
put 'cGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0s'@;
put 'WyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1zbSIsNCwibmdJZiJdLFsic2hhcGUiLCJyZWZyZXNoIiwiY2xhc3MiLCJjbGljay1pY29uIiwzLCJjbGljayIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbGci'@;
put 'LCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtNSIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIiwxLCJjbGljay1pY29uIl0sWzEsInRvb2x0aXAtY29udGVudCIsInRvb2x0aXAtbG9uZyJdLFsic2hhcGUiLCJwZW5jaWwiLDEsImNsaWNrLWljb24iLCJtbC01IiwzLCJjbGljayJdLFsi'@;
put 'Y2xhc3MiLCJjb250ZW50IiwzLCJkaXNwbGF5Iiw0LCJuZ1ZhciJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0s'@;
put 'WzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsImNsaWNrLWljb24iLDMsImNsaWNrIl0sWzEsImNvbnRlbnQiXSxbImNsYXNzIiwiaG90LXNwaW5uZXIgbXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFszLCJzZXR0aW5ncyIsImlkIiw0'@;
put 'LCJuZ0lmIl0sWzEsImhvdC1zcGlubmVyIiwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWzMsInNldHRpbmdzIiwiaWQiXSxbMywidmlld2JveElkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiw1KSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdl'@;
put 'IixmdW5jdGlvbih2KXtyZXR1cm4gaC5jbHJNb2RhbE9wZW5DaGFuZ2Uodil9KSxkZSgxLCJoMyIsNiksT2UoMiwiIFZpZXdib3hlcyAiKSxndCgzLEQ4dCwyLDIsInNwYW4iLDcpLGhlKCksZGUoNCwiZGl2Iiw4KSg1LCJkaXYiLDkpKDYsInAiLDEwKSxPZSg3LCJBZGQgbmV3IiksaGUoKSxX'@;
put 'dCg4LCJociIsMTEpLGd0KDksSTh0LDIsMCwiZGl2IiwxMikoMTAsUjh0LDIsMCwicCIsMTMpKDExLEw4dCwxLDEsImRjLXRyZWUiLDE0KSxoZSgpLGRlKDEyLCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsInAiLDEwKSxPZSgxNSwiQ3VycmVudGx5IG9wZW4iKSxoZSgpLGRlKDE2LCJkaXYi'@;
put 'KSgxNywiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zbmFwVG9HcmlkKCl9KSxXdCgxOCwiY2xyLWljb24iLDE4KSxkZSgxOSwic3BhbiIsMTkpLE9lKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiksaGUoKSgpLGRlKDIxLCJhIiwxNyksRnQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBoLm1pbmltaXplQWxsKCl9KSxXdCgyMiwiY2xyLWljb24iLDIwKSxkZSgyMywic3BhbiIsMTkpLE9lKDI0LCJNaW5pbWl6ZSBhbGwgdmlld2JveGVzIiksaGUoKSgpLGRlKDI1LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3RvcmVBbGwo'@;
put 'KX0pLFd0KDI2LCJjbHItaWNvbiIsMjEpLGRlKDI3LCJzcGFuIiwxOSksT2UoMjgsIlJlc3RvcmUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSgpKCksV3QoMjksImhyIiksZ3QoMzAsTzh0LDIsMCwicCIsMjIpKDMxLE44dCwxNSwxMCwiZGl2IiwyMyksZGUoMzIsImRpdiIsMjQpKDMzLCJwIiwy'@;
put 'NSksT2UoMzQpLGhlKCkoKSxXdCgzNSwiaHIiKSxndCgzNixXOHQsMywyLCJkaXYiLDI2KSxoZSgpKCksZGUoMzcsImRpdiIsMjcpKDM4LCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudmlld2JveE1vZGFsPSExfSksT2UoMzksIiBPayAiKSxoZSgpKCkoKSxk'@;
put 'ZSg0MCwiZGl2IiwyOSksZ3QoNDEsdDd0LDMzLDM3LCJkaXYiLDMwKSxoZSgpLGRlKDQyLCJjbHItbW9kYWwiLDMxKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZ2koaC5maWx0ZXIsdil8fChoLmZpbHRlcj12KSx2fSksZGUoNDMsImgzIiwzMiksT2UoNDQs'@;
put 'IiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLGRlKDQ1LCJzcGFuIiksT2UoNDYpLGhlKCkoKSxkZSg0NywiZGl2IiwzMyksZ3QoNDgsbjd0LDIsMSwiYXBwLXF1ZXJ5IiwzNCksaGUoKSxkZSg0OSwiZGl2IiwyNykoNTAsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gaC5yZXNldEZpbHRlcigpfSksT2UoNTEsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSg1MiwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmZpbHRlcj0hMX0pLE9lKDUzLCIgQ2FuY2VsICIpLGhlKCksZGUoNTQsImJ1dHRvbiIsMzYpLEZ0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zZW5kQ2xhdXNlKCl9KSxPZSg1NSwiIE9rICIpLGhlKCkoKSgpKSwyJmQmJihNZSgiY2xyTW9kYWxPcGVuIixoLnZpZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgzKSxNZSgibmdJZiIsaC5s'@;
put 'aWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLGZlKDYpLE1lKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgudmlld2JveExpbWl0UmVhY2hlZCksZmUoKSxNZSgibmdJZiIsaC52aWV3Ym94TW9kYWwpLGZlKDE5KSxNZSgibmdJ'@;
put 'ZiIsaC52aWV3Ym94ZXMubGVuZ3RoPDEpLGZlKCksTWUoIm5nRm9yT2YiLGgudmlld2JveGVzKSxmZSgzKSxMcigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9aC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmaC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9'@;
put 'PWguc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20g'@;
put 'YWJvdmUiLCIpICIpLGZlKDIpLE1lKCJuZ1ZhciIsYk0oMTksVDh0LG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVs'@;
put 'bD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3Rl'@;
put 'ZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksZmUoNSksTWUoIm5nRm9yT2YiLGgudmlld2JveGVzKSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xy'@;
put 'TW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLEJ1KCIgIyIsbnVsbD09aC5maWx0ZXJpbmdWaWV3Ym94P251bGw6aC5maWx0ZXJpbmdWaWV3Ym94LmlkLCIgIixoLmZpbHRlckxpYmRzLCIgIiksZmUoMiksTWUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsaC5maWx0ZXJM'@;
put 'b2FkaW5nKSl9LGRlcGVuZGVuY2llczpbUXMsYmEsT2wscnUsWXUsVjAsSDIsY28sY2RlLElkLEZiLHhoLFkxLFJkLGw3LEQyLEkyLE1kLHRsLHM3LFdvLHdwLG50ZSwkZyxrMWUsQTFlLElZLFQxZSxZNmUsTTh0LEV3LHNFXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLEs2ZT0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZU92ZXI9bmV3IEtyLHRoaXMuZmlsZURyb3A9bmV3IEtyLHRoaXMuZWxlbWVudD1hfW9uRHJvcChhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyPy5maWxlcyxoPVtdO2lmKGQpZm9yKGxl'@;
put 'dCBmPTA7ZjxkLmxlbmd0aDtmKyspaC5wdXNoKGRbZl0pO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoaCksdGhpcy5maWxlT3Zlci5lbWl0KCExKSx0aGlzLmZpbGVEcm9wLmVtaXQoaCl9b25EcmFnT3ZlcihhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5z'@;
put 'ZmVyO2lmKGQpe2lmKC0xPT09ZC50eXBlcy5pbmRleE9mKCJGaWxlcyIpKXJldHVybjtkLmRyb3BFZmZlY3Q9ImNvcHkifXRoaXMuZmlsZU92ZXIuZW1pdCghMCl9b25EcmFnTGVhdmUoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSksdGhpcy5maWxlT3Zlci5lbWl0KCExKX1fcHJldmVudEFu'@;
put 'ZFN0b3AoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoUWkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVE'@;
put 'cm9wIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImRyb3AiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJvcCh2KX0pKCJkcmFnb3ZlciIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnT3Zlcih2KX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBo'@;
put 'Lm9uRHJhZ0xlYXZlKHYpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZU92ZXI6ImZpbGVPdmVyIixmaWxlRHJvcDoiZmlsZURyb3AifX0pfX1yZXR1cm4gY30pKCksWDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlU2VsZWN0ZWQ9'@;
put 'bmV3IEtyLHRoaXMuZWxlbWVudD1hfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlsZXM7dGhpcy51cGxvYWRl'@;
put 'cj8uYWRkVG9RdWV1ZShhKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGEpLHRoaXMuaXNFbXB0eUFmdGVyU2VsZWN0aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUo'@;
put 'UWkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVTZWxlY3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2hhbmdlKCl9KX0saW5wdXRzOnt1cGxv'@;
put 'YWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiByN3QoYyxsKXsxJmMmJihkZSgwLCJwIiw4KSxPZSgxLCIgTm8gZGF0YXNldCBtZXRhIHRvIHNob3cuICIpLGhlKCkpfWZ1bmN0aW9uIGk3dChjLGwp'@;
put 'e2lmKDEmYyYmKGFpKDApLGRlKDEsImNsci1kZy1jb2x1bW4iKSxPZSgyKSxoZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxTcihhLmNvbE5hbWV8fGEuY29sS2V5KX19ZnVuY3Rpb24gYTd0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwiY2xyLWRnLWNlbGwiKSxP'@;
put 'ZSgyKSxoZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCkuJGltcGxpY2l0O2ZlKDIpLFNyKGRbYS5jb2xLZXldKX19ZnVuY3Rpb24gczd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtj'@;
put 'b25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoZi5vblJvd0NsaWNrP2Yub25Sb3dDbGljayhoKToiIil9KSxndCgxLGE3dCwzLDEsIm5nLWNvbnRhaW5lciIsNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5n'@;
put 'Rm9yT2YiLGEuY29sc1RvRGlzcGxheSl9fWZ1bmN0aW9uIG83dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIsMTEpKDEsImNsci1kYXRhZ3JpZCIpLGd0KDIsaTd0LDMsMSwibmctY29udGFpbmVyIiw1KSgzLHM3dCwyLDEsImNsci1kZy1yb3ciLDEyKSxoZSgpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgyKSxNZSgibmdGb3JPZiIsYS5jb2xzVG9EaXNwbGF5KSxmZSgpLE1lKCJuZ0Zvck9mIixhLm1ldGEpfX1mdW5jdGlvbiBsN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiw5KSxPZSgyKSxoZSgpLGd0KDMsbzd0'@;
put 'LDQsMiwiY2xyLXRhYi1jb250ZW50IiwxMCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDtmZSgyKSxTcihhLm5hbWUpLGZlKCksTWUoImNscklmQWN0aXZlIiwwPT09ZCl9fWxldCBxNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3Blbj0hMSx0'@;
put 'aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IsdGhpcy5yb3dDbGlja2VkPW5ldyBLcix0aGlzLmRzbWV0YVRhYnM9W10sdGhpcy52ZXJzaW9uc1RhYnM9W10sdGhpcy50YWJzPVtdfW5nT25Jbml0KCl7fW5nT25DaGFuZ2VzKGEpe2EuZHNtZXRh'@;
put 'Py5jdXJyZW50VmFsdWU/Lmxlbmd0aD4wJiYodGhpcy5wYXJzZURTTWV0YSgpLHRoaXMucGFyc2VWZXJzaW9ucygpLHRoaXMudGFicz1bLi4udGhpcy5kc21ldGFUYWJzLC4uLnRoaXMudmVyc2lvbnNUYWJzXSl9cGFyc2VEU01ldGEoKXt0aGlzLmRzbWV0YVRhYnM9W107Zm9yKGxldCBhIG9m'@;
put 'IHRoaXMuZHNtZXRhKXtsZXQgZD10aGlzLmRzbWV0YVRhYnMuZmluZEluZGV4KGg9PmgubmFtZT09PWEuT0RTX1RBQkxFKTtkPDAmJihkPXRoaXMuZHNtZXRhVGFicy5wdXNoKHtuYW1lOmEuT0RTX1RBQkxFLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6Ik5B'@;
put 'TUUifSx7Y29sS2V5OiJWQUxVRSJ9XSxtZXRhOltdLG9uUm93Q2xpY2s6aD0+e3RoaXMucm93Q2xpY2tlZC5lbWl0KGgpfX0pLTEpLHRoaXMuZHNtZXRhVGFic1tkXS5tZXRhLnB1c2goYSl9fXBhcnNlVmVyc2lvbnMoKXt0aGlzLnZlcnNpb25zVGFicz1be25hbWU6IlZFUlNJT05TIix0aXRs'@;
put 'ZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJMT0FEX1JFRiJ9LHtjb2xLZXk6IlVTRVJfTk0ifSx7Y29sS2V5OiJWRVJTSU9OX0RUVE0ifSx7Y29sS2V5OiJORVdfUkVDT1JEUyIsY29sTmFtZToiQUREIn0se2NvbEtleToiQ0hBTkdFRF9SRUNPUkRTIixjb2xOYW1l'@;
put 'OiJNT0QifSx7Y29sS2V5OiJERUxFVEVEX1JFQ09SRFMiLGNvbE5hbWU6IkRFTCJ9LHtjb2xLZXk6IlZFUlNJT05fREVTQyJ9XSxtZXRhOnRoaXMudmVyc2lvbnMsb25Sb3dDbGljazphPT57dGhpcy5yb3dDbGlja2VkLmVtaXQoYSl9fV19b25PcGVuQ2hhbmdlKGEpe3RoaXMub3Blbj1hLHRo'@;
put 'aXMub3BlbkNoYW5nZS5lbWl0KGEpfW9uQ2xvc2VDbGljaygpe3RoaXMub25PcGVuQ2hhbmdlKCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kYXRh'@;
put 'c2V0LWluZm8iXV0saW5wdXRzOntvcGVuOiJvcGVuIixkc21ldGE6ImRzbWV0YSIsdmVyc2lvbnM6InZlcnNpb25zIn0sb3V0cHV0czp7b3BlbkNoYW5nZToib3BlbkNoYW5nZSIscm93Q2xpY2tlZDoicm93Q2xpY2tlZCJ9LGZlYXR1cmVzOltibF0sZGVjbHM6MTAsdmFyczo1LGNvbnN0czpb'@;
put 'WzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwidGV4'@;
put 'dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsckxheW91dCIsInZlcnRpY2FsIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInRleHQtY2VudGVy'@;
put 'Il0sWyJjbHJUYWJMaW5rIiwiIiwiaWQiLCJsaW5rMSJdLFsiaWQiLCJjb250ZW50MSIsImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIiw0LCJjbHJJZkFjdGl2ZSJdLFsiaWQiLCJjb250ZW50MSIsMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVu'@;
put 'dC1jZW50ZXIiLCJ3LTEwMCJdLFsiY2xhc3MiLCJjbGlja2FibGUtcm93IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsaWNrYWJsZS1yb3ciLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxGdCgiY2xyTW9k'@;
put 'YWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk9wZW5DaGFuZ2Uodil9KSxkZSgxLCJoMyIsMSksT2UoMiwiRGF0YXNldCBNZXRhIiksaGUoKSxkZSgzLCJkaXYiLDIpLGd0KDQscjd0LDIsMCwicCIsMyksZGUoNSwiY2xyLXRhYnMiLDQpLGd0KDYsbDd0LDQsMiwiY2xyLXRh'@;
put 'YiIsNSksaGUoKSgpLGRlKDcsImRpdiIsNikoOCwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DbG9zZUNsaWNrKCl9KSxPZSg5LCIgQ2xvc2UgIiksaGUoKSgpKCkpLDImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLGgub3BlbikoImNsck1vZGFsU2l6ZSIsInhs'@;
put 'IikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxmZSg0KSxNZSgibmdJZiIsaC5kc21ldGFUYWJzLmxlbmd0aDwxKSxmZSgyKSxNZSgibmdGb3JPZiIsaC50YWJzKSl9LGRlcGVuZGVuY2llczpbUXMsYmEseG0scjMsUjcsU20seHAsTDcsSmIsTW0sazcsQ20sRDcscnUsWXUsTGIsdm0sYm0seDcs'@;
put 'eW0sbW0sUzddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgYzd0PSgpPT5bIm51bWVyaWMiLHZvaWQgMF0sSjZlPSgpPT5bImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZS5jdXN0b20iXSxydGU9KGMsbCk9Pih7Y29sOmMsY29sSW5kZXg6bH0pLHU3dD0oKT0+W3Zv'@;
put 'aWQgMF0sZDd0PSgpPT5bIlNPRlRTRUxFQ1QiLCJTT0ZUU0VMRUNUX0hPT0siXTtmdW5jdGlvbiBoN3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNSksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksU3IoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpfX1mdW5jdGlvbiBmN3Qo'@;
put 'YyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmdlbmVyYXRlRWRpdFJlY29yZFVybCgpKX0pLE9lKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO01lKCJkaXNhYmxlZCIsYS5n'@;
put 'ZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nKSxmZSgpLExyKCIgIixhLmdlbmVyYXRlZFJlY29yZFVybD8iY29weSB0byBjbGlwYm9hcmQiOmEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwiICIpfX1mdW5j'@;
put 'dGlvbiBwN3QoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGg3dCwyLDEsInNwYW4iLDEzKSgyLGY3dCwyLDIsImJ1dHRvbiIsMTQpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0'@;
put 'aW9uKSksZmUoKSxNZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKX19ZnVuY3Rpb24gZzd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNykoMSwic3BhbiIsMTgpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rp'@;
put 'b24gbTd0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIHY3dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDMyKSxPZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiB5N3QoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gYjd0KGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWlucHV0LWNvbnRhaW5lciIsMzUpKDEsImlucHV0IiwzNiksRnQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMykuaW5kZXg7cmV0dXJuIEN0KExlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0'@;
put 'ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpLiRpbXBsaWNpdCx2PUxlKDIpO3JldHVybiB2LnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpLEN0KHYuY3VycmVu'@;
put 'dFJlY29yZC5ub0xpbmtPcHRpb249ITApfSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMykuJGltcGxpY2l0LHY9TGUoMik7cmV0dXJuIGdpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgp'@;
put 'fSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKS4kaW1wbGljaXQsZD1MZSgyKTtUcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLGZlKCksZmkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiBf'@;
put 'N3QoYyxsKXsxJmMmJkxsKDApfWZ1bmN0aW9uIHc3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsXzd0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O0xlKDIpO2NvbnN0IGY9ZGEoMTYpO2ZlKCks'@;
put 'TWUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsY3AoMixydGUsZCxoKSl9fWZ1bmN0aW9uIEM3dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsYjd0LDIsMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMzQpKDIsdzd0LDIsNSwiZGl2Iiw1KSxzaSgpKSwy'@;
put 'JmMpe2xldCBhLGQ7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQsZj1MZSgyKTtmZSgpLE1lKCJuZ0lmIixabygyLGM3dCkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6'@;
put 'YS5lZGl0b3IpKSxmZSgpLE1lKCJuZ0lmIixabygzLEo2ZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6ZC5lZGl0b3IpKX19ZnVuY3Rpb24gUzd0KGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIpKDEsInRleHRhcmVhIiwzOCwxKSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKS5pbmRleDtyZXR1cm4gQ3QoTGUoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBh'@;
put 'c3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoNSkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMykuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxwaSgibmdN'@;
put 'b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKS4kaW1wbGljaXQsdj1MZSgyKTtyZXR1cm4gZ2kodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxPZSgzLCIgICAgICAgICAgICAgICAgICAiKSxoZSgp'@;
put 'LGRlKDQsImNsci1jb250cm9sLWhlbHBlciIpLE9lKDUpLGhlKCkoKX1pZigyJmMpe2xldCBhLGQsaDtjb25zdCBmPWRhKDIpLHY9TGUoMykuJGltcGxpY2l0LE09TGUoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixNLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyh2LmtleSkp'@;
put 'KCJub3QtY2hhciIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6YS50eXBlKSxNZSgicm93cyIsdi52YWx1ZS5sZW5ndGg+ODA/NjoxKSxmaSgibmdNb2RlbCIsTS5jdXJyZW50UmVj'@;
put 'b3JkW3Yua2V5XSksTWUoIm1heExlbmd0aCIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6ZC5sZW5ndGgpLGZlKDQpLEJ1KCIiLGYudmFsdWUubGVuZ3RoLCIgLyAiLG51bGw9PU0u'@;
put 'Y3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmgubGVuZ3RoLCIiKX19ZnVuY3Rpb24gTTd0KGMsbCl7MSZjJiZMbCgwKX1mdW5jdGlvbiB4N3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgx'@;
put 'LE03dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtMZSgyKTtjb25zdCBmPWRhKDE2KTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGNwKDIscnRlLGQs'@;
put 'aCkpfX1mdW5jdGlvbiBFN3QoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLFM3dCw2LDksImNsci10ZXh0YXJlYS1jb250YWluZXIiLDUpKDIseDd0LDIsNSwiZGl2Iiw1KSxzaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQsZj1MZSgyKTtmZSgpLE1lKCJuZ0lmIixa'@;
put 'bygyLHU3dCkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6YS5lZGl0b3IpKSxmZSgpLE1lKCJuZ0lmIixabygzLEo2ZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50'@;
put 'UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6ZC5lZGl0b3IpKX19ZnVuY3Rpb24gVDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMzkpKDEsInRleHRh'@;
put 'cmVhIiw0MCksRnQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYu'@;
put 'a2V5KSl9KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgyKTtyZXR1cm4gZ2kodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpLGRlKDIsImNsci1j'@;
put 'b250cm9sLWhlbHBlciIpLE9lKDMsIkhIOm1tOnNzIiksaGUoKSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1MZSgyKS4kaW1wbGljaXQsaD1MZSgyKTtmZSgpLFRyKCJpbnZhbGlkLWRhdGEiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGQua2V5KSkoIm5vdC1jaGFyIixu'@;
put 'dWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnR5cGUpLE1lKCJyb3dzIixkLnZhbHVlLmxlbmd0aD44MD82OjEpLGZpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKX19'@;
put 'ZnVuY3Rpb24gQTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwzOSkoMSwidGV4dGFyZWEiLDQxKSxGdCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7'@;
put 'Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdCx2PUxlKDIpO3JldHVybiBnaSh2LmN1cnJlbnRSZWNvcmRb'@;
put 'Zi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCksZGUoMiwiY2xyLWRhdGUtY29udGFpbmVyIiw0MikoMywiaW5wdXQiLDQzKSxGdCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0'@;
put 'KExlKDIpLnJlY29yZERhdGVDaGFuZ2UoaCxmLmtleSkpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdCxkPUxlKDIpO2ZlKCksVHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxmaSgibmdNb2RlbCIs'@;
put 'ZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIGs3dChjLGwpezEmYyYmTGwoMCl9ZnVuY3Rpb24gRDd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxrN3QsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMiksZD1hLiRpbXBsaWNpdCxo'@;
put 'PWEuaW5kZXg7TGUoMik7Y29uc3QgZj1kYSgxNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixjcCgyLHJ0ZSxkLGgpKX19ZnVuY3Rpb24gSTd0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywi'@;
put 'cCIsMjIpLE9lKDQpLGd0KDUsbTd0LDEsMCwiY2xyLWljb24iLDIzKSxoZSgpLGRlKDYsInAiLDI0KSxPZSg3KSxoZSgpKCksZGUoOCwiZGl2IiwyNSksZ3QoOSx2N3QsMiwwLCJzcGFuIiwyNikoMTAseTd0LDEsMCwiY2xyLWljb24iLDI3KSgxMSxDN3QsMyw0LCJuZy1jb250YWluZXIiLDI4'@;
put 'KSgxMixFN3QsMyw0LCJuZy1jb250YWluZXIiLDI4KSgxMyxUN3QsNCw2LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwyOSkoMTQsQTd0LDQsMywiZGl2IiwyOSkoMTUsRDd0LDIsNSwiZGl2IiwyOCksaGUoKSgpLFd0KDE2LCJociIsMzApLHNpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPUxl'@;
put 'KCksZj1oLiRpbXBsaWNpdCx2PWguaW5kZXgsTT1MZSgyKTtmZSg0KSxMcigiICIsZi5rZXksIiAiKSxmZSgpLE1lKCJuZ0lmIixNLmlzQ29sUGsoZi5rZXkpKSxmZSgyKSxMcigiICIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1NLmN1cnJlbnRSZWNvcmRWYWxp'@;
put 'ZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6YS5kZXNjLCIgIiksZmUoKSxNZSgibmdTd2l0Y2giLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOmQudHlwZSksZmUoKSxNZSgibmdJ'@;
put 'ZiIsTS5jdXJyZW50UmVjb3JkTG9hZGluZ3MuaW5jbHVkZXModikpLGZlKCksTWUoIm5nSWYiLE0uY3VycmVudFJlY29yZEVycm9ycy5pbmNsdWRlcyh2KSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwibnVtZXJpYyIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsdm9pZCAwKSxmZSgpLE1lKCJu'@;
put 'Z1N3aXRjaENhc2UiLCJ0aW1lIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsImF1dG9jb21wbGV0ZSIpfX1mdW5jdGlvbiBSN3QoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLEk3dCwxNywxMSwibmctY29udGFpbmVyIiw1KSxzaSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIkFjdGlvbiIhPT1hLmtleSYmIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLmtleSYmIm5vTGlua09wdGlvbiIhPT1hLmtleSl9fWZ1bmN0aW9uIEw3dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsUjd0'@;
put 'LDIsMSwibmctY29udGFpbmVyIiwxOSksUW8oMiwia2V5dmFsdWUiKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0Zvck9mIix6OCgyLDIsYS5jdXJyZW50UmVjb3JkLGEub3JpZ2luYWxPcmRlcikpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19ZnVuY3Rpb24gTzd0'@;
put 'KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWFsZXJ0Iiw0NCkoMSwiY2xyLWFsZXJ0LWl0ZW0iKSgyLCJzcGFuIiw0NSksT2UoMywiIERhdGEgVmFsaWRhdGlvbiBFcnJvcnMgLSBQbGVhc2UgUmV2aWV3ICIpLGhlKCkoKSgpKSwyJmMmJihOMSgidmlzaWJpbGl0eSIsTGUoKS5jdXJyZW50UmVjb3Jk'@;
put 'SW52YWxpZENvbHMubGVuZ3RoPjA/InZpc2libGUiOiJoaWRkZW4iKSxNZSgiY2xyQWxlcnRDbG9zYWJsZSIsITEpKCJjbHJBbGVydFR5cGUiLCJkYW5nZXIiKSl9ZnVuY3Rpb24gUDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw0NikoMSwiYnV0dG9uIiw0NyksRnQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uUHJldmlvdXNSZWNvcmRDbGljaygpKX0pLFd0KDIsImNsci1pY29uIiw0OCksaGUoKSxkZSgzLCJwIiksT2UoNCwiIEN1cnJlbnQgcm93OiAiKSxkZSg1LCJzdHJvbmciKSxPZSg2KSxoZSgpKCksZGUoNywiYnV0dG9u'@;
put 'Iiw0NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uTmV4dFJlY29yZENsaWNrKCkpfSksV3QoOCwiY2xyLWljb24iLDQ5KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xz'@;
put 'Lmxlbmd0aD4wKSxmZSg1KSxMcigiICIsYS5jdXJyZW50UmVjb3JkSW5kZXgrMSwiICIpLGZlKCksTWUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCl9fWZ1bmN0aW9uIEY3dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNTMpLE9lKDEpLGhlKCkp'@;
put 'LDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgibmdWYWx1ZSIsYSksZmUoKSxMcigiICIsYSwiICIpfX1mdW5jdGlvbiBIN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiKSgxLCJhcHAtc29mdC1zZWxlY3QiLDUxKSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3Qo'@;
put 'YSk7Y29uc3QgZj1MZSgpLmNvbEluZGV4O3JldHVybiBDdChMZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pLHBpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLmNvbCx2PUxlKCk7cmV0dXJuIGdpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2'@;
put 'LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCksZj1oLmNvbCx2PWguY29sSW5kZXg7cmV0dXJuIEN0KExlKCkub25SZWNvcmREcm9wZG93bkNoYW5nZShmLmtleSx2KSl9KSxndCgyLEY3dCwyLDIs'@;
put 'Im9wdGlvbiIsNTIpLGhlKCkoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9TGUoKS5jb2wsaD1MZSgpO2ZlKCksZmkoInZhbHVlIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKSxNZSgiaW5wdXRJZCIsZC5rZXkpLGZlKCksTWUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRv'@;
put 'cnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEuc291cmNlKX19ZnVuY3Rpb24gTjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw1NiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYSks'@;
put 'ZmUoKSxMcigiICIsYSwiICIpfX1mdW5jdGlvbiBWN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJzZWxlY3QiLDU0KSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLmNvbEluZGV4O3JldHVybiBDdChMZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyho'@;
put 'LGYpKX0pLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuY29sLHY9TGUoKTtyZXR1cm4gZ2kodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxndCgxLE43dCwyLDIsIm9wdGlvbiIsNTUp'@;
put 'LGhlKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPUxlKCkuY29sLGg9TGUoKTtmaSgibmdNb2RlbCIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSksZmUoKSxNZSgibmdGb3JPZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3Iu'@;
put 'Z2V0UnVsZShkLmtleSkpP251bGw6YS5zb3VyY2UpfX1mdW5jdGlvbiBCN3QoYyxsKXtpZigxJmMmJmd0KDAsSDd0LDMsMywiZGl2Iiw1MCkoMSxWN3QsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLGdjKSwyJmMpe2NvbnN0IGE9bC5jb2wsZD1kYSgyKSxoPUxlKCk7TWUoIm5nSWYiLG51bGw9'@;
put 'PWguY3VycmVudFJlY29yZFZhbGlkYXRvcj9udWxsOmguY3VycmVudFJlY29yZFZhbGlkYXRvci5oYXNEcVJ1bGVzKGEua2V5LFpvKDIsZDd0KSkpKCJuZ0lmRWxzZSIsZCl9fWxldCBqN3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhp'@;
put 'cy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmN1cnJlbnRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRSZWNvcmRM'@;
put 'b2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRSZWNvcmRFcnJvcnM9W10sdGhpcy5vblJlY29yZENoYW5nZT1uZXcgS3IsdGhpcy5vblJlY29yZElucHV0Rm9jdXNlZD1uZXcgS3IsdGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZD1uZXcgS3IsdGhpcy5vblJlY29yZEVkaXRDbG9zZT1uZXcgS3Is'@;
put 'dGhpcy5vblJlY29yZEVkaXRDb25maXJtPW5ldyBLcix0aGlzLm9uTmV4dFJlY29yZD1uZXcgS3IsdGhpcy5vblByZXZpb3VzUmVjb3JkPW5ldyBLcix0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scz1bXSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5l'@;
put 'cmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLm9yaWdpbmFsT3JkZXI9KGgsZik9PjB9bmdPbkluaXQoKXt9dmFsaWRhdGVSZWNvcmRDb2woYSxkKXt2YXIg'@;
put 'aD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2guY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZXhlY3V0ZUhvdFZhbGlkYXRvcihhLGQsTT0+e2YoTSl9KX0pfSkoKX1yZWNvcmREYXRlQ2hhbmdlKGEsZCl7bGV0IGg9dGhpcy5jdXJyZW50UmVj'@;
put 'b3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLGY9aD9oLmRhdGVGb3JtYXQ6IiI7dGhpcy5jdXJyZW50UmVjb3JkJiYodGhpcy5jdXJyZW50UmVjb3JkW2RdPWpzZSgpKGEpLmZvcm1hdChmKSl9Y29uZmlybVJlY29yZEVkaXQoKXt0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8'@;
put 'MSYmdGhpcy5vblJlY29yZENoYW5nZS5lbWl0KHRoaXMuY3VycmVudFJlY29yZCl9Y2xvc2VSZWNvcmRFZGl0KCl7dGhpcy5vblJlY29yZEVkaXRDbG9zZS5lbWl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShhLGQpe3RoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQuZW1pdCh7Y29sTmFt'@;
put 'ZTphLGNvbDpkfSl9b25SZWNvcmRJbnB1dEZvY3VzKGEsZCl7dGhpcy5vblJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDphLGNvbE5hbWU6ZH0pfXJlY29yZElucHV0UGFzdGUoYSl7c2V0VGltZW91dCgoKT0+e2EudGFyZ2V0LnZhbHVlPWEudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xz'@;
put 'KyQvLCIiKX0sMCl9cmVjb3JkSW5wdXRDaGFuZ2UoYSxkKXt2YXIgaD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLHY9YS50YXJnZXQudmFsdWU7aC5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgzMDAsKCk9'@;
put 'PntoLnZhbGlkYXRlUmVjb3JkQ29sKGYsdikudGhlbihNPT57Y29uc3QgST1oLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGQpO00/ST4tMSYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuc3BsaWNlKEksMSk6STwwJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5wdXNo'@;
put 'KGQpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVjb3JkLmVtaXQoKX1jb3B5VG9DbGlwKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlY29yZE1v'@;
put 'ZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtoLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsaC5zdHlsZS5sZWZ0PSIwIixoLnN0eWxlLnRvcD0iMCIsaC5zdHlsZS5vcGFjaXR5PSIwIixoLnN0eWxlLnpJbmRleD0i'@;
put 'NTAwMCIsaC52YWx1ZT1hLGQuYXBwZW5kQ2hpbGQoaCksaC5mb2N1cygpLGguc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkLnJlbW92ZUNoaWxkKGgpLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPWF9fWdlbmVyYXRlRWRpdFJlY29yZFVybCgpe3ZhciBhPXRoaXM7cmV0'@;
put 'dXJuIFEoZnVuY3Rpb24qKCl7aWYoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpYS5jb3B5VG9DbGlwKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKTtlbHNle2EuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMDtjb25zdCBkPVtdO2EuaGVhZGVyUGtzLmZvckVhY2goaD0+e2xldCBmPSJDIix2PSIi'@;
put 'O2ZvcihsZXQgTT0wO008YS5jZWxsVmFsaWRhdGlvbi5sZW5ndGg7TSsrKXtjb25zdCBJPWEuY2VsbFZhbGlkYXRpb25bTV07aWYoSS5kYXRhPT09aCl7KCJudW1lcmljIj09PUkudHlwZXx8ImRhdGUiPT09SS50eXBlfHwidGltZSI9PT1JLnR5cGUpJiYoZj0iTiIpO2JyZWFrfX12PSJDIj09'@;
put 'PWY/YCcke2EuY3VycmVudFJlY29yZFtoXX0nYDphLmN1cnJlbnRSZWNvcmRbaF0udG9TdHJpbmcoKSxkLnB1c2goe0dST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0lEOjAsVkFSSUFCTEVfTk06aCxPUEVSQVRPUl9OTToiPSIsUkFXX1ZBTFVFOnZ9KX0p'@;
put 'LGQubGVuZ3RoPjAmJmEubGliZHMmJih5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxkKS50aGVuKGg9PnthLnF1ZXJ5RmlsdGVyPXtpZDpoLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6aC5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfTtjb25zdCBNPWxvY2F0aW9u'@;
put 'LmhyZWYuc3BsaXQoIiMiKVswXSsiIy9lZGl0b3IvZWRpdC1yZWNvcmQvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkO2EuY29weVRvQ2xpcChNKSxhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsYS5maWx0ZXI9ITF9KS5jYXRjaChoPT57YS5zdWJt'@;
put 'aXRMb2FkaW5nPSExfSkpfX0pKCl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX10cmFja0J5Rm4oYSxkKXtyZXR1cm4gYX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShJaCksJGUoYnUpKX19c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1lZGl0LXJlY29yZCJdXSxpbnB1dHM6e2N1cnJlbnRSZWNvcmQ6ImN1cnJlbnRSZWNvcmQiLHJlY29yZEFjdGlvbjoicmVjb3JkQWN0aW9uIixsaWJkczoibGliZHMiLHF1ZXJ5RmlsdGVyOiJxdWVyeUZpbHRlciIs'@;
put 'ZmlsdGVyOiJmaWx0ZXIiLHN1Ym1pdExvYWRpbmc6InN1Ym1pdExvYWRpbmciLGhlYWRlclBrczoiaGVhZGVyUGtzIixjZWxsVmFsaWRhdGlvbjoiY2VsbFZhbGlkYXRpb24iLGN1cnJlbnRSZWNvcmRJbmRleDoiY3VycmVudFJlY29yZEluZGV4IixjdXJyZW50UmVjb3JkTG9hZGluZ3M6ImN1'@;
put 'cnJlbnRSZWNvcmRMb2FkaW5ncyIsY3VycmVudFJlY29yZEVycm9yczoiY3VycmVudFJlY29yZEVycm9ycyIsY3VycmVudFJlY29yZFZhbGlkYXRvcjoiY3VycmVudFJlY29yZFZhbGlkYXRvciJ9LG91dHB1dHM6e29uUmVjb3JkQ2hhbmdlOiJvblJlY29yZENoYW5nZSIsb25SZWNvcmRJbnB1'@;
put 'dEZvY3VzZWQ6Im9uUmVjb3JkSW5wdXRGb2N1c2VkIixvblJlY29yZERyb3Bkb3duQ2hhbmdlZDoib25SZWNvcmREcm9wZG93bkNoYW5nZWQiLG9uUmVjb3JkRWRpdENsb3NlOiJvblJlY29yZEVkaXRDbG9zZSIsb25SZWNvcmRFZGl0Q29uZmlybToib25SZWNvcmRFZGl0Q29uZmlybSIsb25O'@;
put 'ZXh0UmVjb3JkOiJvbk5leHRSZWNvcmQiLG9uUHJldmlvdXNSZWNvcmQ6Im9uUHJldmlvdXNSZWNvcmQifSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWyJhdXRvY29tcGxldGUiLCIiXSxbImNoYXJUZXh0YXJlYSIsIiJdLFsib3RoZXJfdGhhbl9zb2Z0X3NlbGVjdCIsIiJdLFsiaWQiLCJy'@;
put 'ZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnkt'@;
put 'Y29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsInAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9u'@;
put 'LWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLCJtci01aSIsMywi'@;
put 'Y2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZm9jdXNhYmxlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdl'@;
put 'bmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0'@;
put 'dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRy'@;
put 'YWNrQnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWzEsIm5hbWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBl'@;
put 'ciIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1h'@;
put 'YnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBl'@;
put 'Iiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0'@;
put 'aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJmb2N1c2lu'@;
put 'IiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJu'@;
put 'Z01vZGVsIiwibWF4TGVuZ3RoIl0sWzEsImRhdGUtZmllbGQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJuZ01vZGVsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCIxIiwiY29scyIsImF1dG8iLDEsIm5vdC1jaGFyIiwz'@;
put 'LCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZGF0ZS1waWNrZXIiXSxbInR5cGUiLCJkYXRlIiwibmFtZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwxLCJkLW5vbmUiLDMsImNsckRhdGVDaGFuZ2UiXSxbMSwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJj'@;
put 'bHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIl0sWzEsImFsZXJ0LXRleHQiXSxbMSwicHJldi1uZXh0Il0sWyJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJh'@;
put 'bmdsZSBsZWZ0Iiwic2l6ZSIsIjIzIl0sWyJzaGFwZSIsImFuZ2xlIHJpZ2h0Iiwic2l6ZSIsIjIzIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFszLCJmb2N1c2luIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJ2YWx1ZSIsImlucHV0SWQiXSxbMywibmdWYWx1ZSIsNCwibmdGb3Ii'@;
put 'LCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXSxbImNsclNlbGVjdCIsIiIsMywiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9'@;
put 'T24oKTtkZSgwLCJjbHItbW9kYWwiLDMpKDEsImgzIiw0KSxPZSgyKSxndCgzLHA3dCwzLDIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg0LCJkaXYiLDYpLGd0KDUsZzd0LDMsMCwiZGl2Iiw3KSg2LEw3dCwzLDUsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg3LCJkaXYiLDgpLGd0KDgs'@;
put 'Tzd0LDQsNCwiY2xyLWFsZXJ0Iiw5KSg5LFA3dCw5LDMsImRpdiIsMTApLGRlKDEwLCJkaXYiKSgxMSwiYnV0dG9uIiwxMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLEN0KGguY2xvc2VSZWNvcmRFZGl0KCkpfSks'@;
put 'T2UoMTIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMywiYnV0dG9uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSksT2UoMTQsIiBDb25maXJtICIpLGhlKCkoKSgpLGd0KDE1LEI3dCwzLDMsIm5nLXRlbXBsYXRlIixudWxs'@;
put 'LDAsZ2MpLGhlKCl9MiZkJiYoTWUoImNsck1vZGFsT3BlbiIsITApKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksWmYoIiAiLCJBREQiPT09aC5yZWNvcmRBY3Rpb24/IkFkZCI6IkVkaXQiLCIgcmVjb3JkIGluICIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsw'@;
put 'XSwiLiIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsxXSwiICIpLGZlKCksTWUoIm5nSWYiLCJFRElUIj09PWgucmVjb3JkQWN0aW9uKSxmZSgyKSxNZSgibmdJZiIsaC5hZGRSZWNvcmRMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhaC5hZGRSZWNvcmRMb2FkaW5nKSxm'@;
put 'ZSgyKSxNZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxKSxmZSg0KSxNZSgiZGlzYWJsZWQiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSl9LGRl'@;
put 'cGVuZGVuY2llczpbUXMsYmEsQjEseDIsZHAsRDIsSTIsR2wsazIsdGwsV28sckUsbmhlLGlFLE9sLHJ1LFl1LFdMLHF4LG5PLGRHLFkxLHFMLEU3LHJPLElkZSxHNmUseFJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gejd0KGMsbCl7aWYoMSZjJiYoZGUoMCwi'@;
put 'cCIsMyksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTHIoIiAiLGEsIiAiKX19bGV0IFU3dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0h'@;
put 'MSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRoaXMu'@;
put 'cHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3Ro'@;
put 'LTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0'@;
put 'aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxkZWNsczo1LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsx'@;
put 'LCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJtLTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiKSxndCgxLHo3dCwyLDEsInAiLDApLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxPZSg0LCJMb2FkaW5n'@;
put 'Li4uIiksaGUoKSgpKSwyJmQmJihmZSgpLE1lKCJuZ0Zvck9mIixoLnByb2Nlc3NlZFN0YXRlcykpfSxkZXBlbmRlbmNpZXM6W1FzXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLFo3dD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cfC9nLCIg'@;
put 'fCAiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1hbCh7bmFtZToicGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksUTZlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3Jt'@;
put 'KGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRkU2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IHY9aC5sZW5ndGg+MT8iLiIraFsxXToiIixNPS8oXGQrKShcZHszfSkvO2Zvcig7TS50'@;
put 'ZXN0KGYpOylmPWYucmVwbGFjZShNLCIkMSIrZCsiJDIiKTtyZXR1cm4gZit2fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJ0aG91c2FuZFNlcGFyYXRvciIsdHlwZTpjLHB1cmU6ITB9'@;
put 'KX19cmV0dXJuIGN9KSgpO2NvbnN0IFc3dD1bImh0Il0sWTd0PVsidXBsb2FkU3RhdGVyIl0sRzd0PVsicXVlcnlGaWx0ZXIiXSwkN3Q9WyJmaWxlVXBsb2FkSW5wdXQiXSxLN3Q9KGMsbCk9Pih7bGliTmFtZTpjLHRhYmxlTmFtZTpsfSksZThlPSgpPT5bIiIsIiAiXSxYN3Q9Yz0+KHtoZWFk'@;
put 'ZXJCYXJGaWx0ZXI6Y30pLHE3dD0oKT0+WyIvaG9tZSJdO2Z1bmN0aW9uIEo3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNjQpKDEsInNwYW4iLDY1KSgyLCJsYWJlbCIsNjYpLE9lKDMsIiBCcm93c2UgIiksaGUoKSgpLGRlKDQsImlucHV0Iiw2NywzKSxGdCgiY2hh'@;
put 'bmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5hdHRhY2hGaWxlKGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSxNZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1mdW5jdGlvbiBRN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYi'@;
put 'LDY4KSgxLCJidXR0b24iLDY5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudXBsb2FkUGFyc2VkRmlsZXMoKSl9KSxPZSgyLCIgVXBsb2FkICIpLGhlKCkoKX0yJmMmJihmZSgpLE1lKCJkaXNhYmxlZCIsITApKX1mdW5jdGlvbiBlOXQoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE9lKDEsIiBDbG9zZSAiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO01lKCJkaXNhYmxlZCIsYS5leGNlbEZpbGVQ'@;
put 'YXJzaW5nfHxhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiB0OXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDcxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE9lKDEsIiBTa2lwICIpLGhl'@;
put 'KCl9fWZ1bmN0aW9uIG45dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzIpLFd0KDEsImFwcC11cGxvYWQtc3RhdGVyIixudWxsLDQpLGhlKCkpfWZ1bmN0aW9uIHI5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImFwcC1lZGl0LXJlY29yZCIsNzMpLEZ0KCJvblJlY29yZENoYW5n'@;
put 'ZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jb25maXJtUmVjb3JkRWRpdCgpKX0pKCJvblJlY29yZElucHV0Rm9jdXNlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgpKX0pKCJvblJlY29yZEVkaXRDbG9zZSIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbG9zZVJlY29yZEVkaXQoKSl9KSgib25OZXh0UmVjb3JkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uTmV4dFJlY29yZCgpKX0pKCJvblByZXZpb3VzUmVjb3JkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9u'@;
put 'UHJldmlvdXNSZWNvcmQoKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO01lKCJjdXJyZW50UmVjb3JkIixhLmN1cnJlbnRFZGl0UmVjb3JkKSgicmVjb3JkQWN0aW9uIixhLnJlY29yZEFjdGlvbikoImxpYmRzIixhLmxpYmRzKSgicXVlcnlGaWx0ZXIiLGEucXVlcnlGaWx0ZXIpKCJm'@;
put 'aWx0ZXIiLGEuZmlsdGVyKSgic3VibWl0TG9hZGluZyIsYS5zdWJtaXRMb2FkaW5nKSgiaGVhZGVyUGtzIixhLmhlYWRlclBrcykoImNlbGxWYWxpZGF0aW9uIixhLmNlbGxWYWxpZGF0aW9uKSgiY3VycmVudFJlY29yZEluZGV4IixhLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpKCJjdXJyZW50'@;
put 'UmVjb3JkTG9hZGluZ3MiLGEuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncykoImN1cnJlbnRSZWNvcmRFcnJvcnMiLGEuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMpKCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIixhLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yKX19ZnVuY3Rpb24gaTl0KGMs'@;
put 'bCl7MSZjJiYoZGUoMCwiZGl2Iiw3NCksV3QoMSwicHJvZ3Jlc3MiKSxoZSgpKX1mdW5jdGlvbiBhOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDc1KSgxLCJzcGFuIiw3NiksV3QoMiwiY2xyLWljb24iLDc3KSxkZSgzLCJzcGFuIiw3OCksT2UoNCwiQmFjayB0byB0'@;
put 'YWJsZSBzZWxlY3Rpb24iKSxoZSgpKCksZGUoNSwic3BhbiIsNzkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS52aWV3Ym94TWFuYWdlcigpKX0pLFd0KDYsImNsci1pY29uIiw4MCksZGUoNywic3BhbiIsNzgpLE9lKDgsIlZpZXdib3hlcyIpLGhlKCkoKSgp'@;
put 'fTImYyYmKGZlKCksTWUoInJvdXRlckxpbmsiLFpvKDEscTd0KSkpfWZ1bmN0aW9uIHM5dChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDg2KX1mdW5jdGlvbiBvOXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBh'@;
put 'PUxlKDMpO2ZlKCksTHIoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIGw5dChjLGwpezEmYyYmKGFpKDApLGd0KDEsbzl0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLHNpKCkpfWZ1bmN0aW9uIGM5dChjLGwpe2lmKDEmYyYmKGFpKDApLE9lKDEpLFFvKDIsInRob3VzYW5kU2Vw'@;
put 'YXJhdG9yIiksc2koKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksSkkoIiAoIix6OCgyLDQsYS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09YS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93cyIsIiwgIixhLmNvbHMubGVuZ3RoLCIiLDE9PT1hLmNvbHMubGVuZ3RoPyIgY29s'@;
put 'IjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiB1OXQoYyxsKXsxJmMmJihhaSgwKSxPZSgxLCIgKDAgcm93cykgIiksc2koKSl9ZnVuY3Rpb24gZDl0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxjOXQsMyw3LCJuZy1jb250YWluZXIiLDM5KSgyLHU5dCwyLDAsIm5nLWNvbnRhaW5lciIsMzkp'@;
put 'LHNpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS56ZXJvRmlsdGVyUm93cyksZmUoKSxNZSgibmdJZiIsYS56ZXJvRmlsdGVyUm93cyl9fWZ1bmN0aW9uIGg5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImg0Iiw4MSkoMSwiY2xyLXRvb2x0aXAiKSgy'@;
put 'LCJjbHItaWNvbiIsODIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDMsczl0LDEsMCwiY2xyLWljb24iLDgzKSxkZSg0LCJzcGFuIiw4NCksT2UoNSksZGUoNiwiYSIsODUpLE9lKDcpLGhlKCkoKSxndCg4LGw5'@;
put 'dCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCksZ3QoOSxkOXQsMywyLCJuZy1jb250YWluZXIiLDM5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9TGUoKTtmZSgzKSxNZSgibmdJZiIsYS50YWJsZU5hbWUuaW5jbHVkZXMoIi1GQyIpKSxmZSgyKSxMcigiICIsYS5saWJOYW1l'@;
put 'LCIuIiksZmUoKSxNZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIitkLmxpYmRzKSxmZSgpLFNyKGEudGFibGVOYW1lLnJlcGxhY2UoIi1GQyIsIiIpKSxmZSgpLE1lKCJuZ0lmIixkLmRzTm90ZSYmZC5kc05vdGUubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGQuZGF0YVNvdXJjZSl9fWZ1'@;
put 'bmN0aW9uIGY5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsOTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykub25TaG93VXBsb2FkTW9kYWwoKSl9KSxXdCgxLCJjbHItaWNvbiIsOTYpLGRlKDIsInNwYW4iLDc4KSxPZSgzLCJV'@;
put 'cGxvYWQiKSxoZSgpKCl9fWZ1bmN0aW9uIHA5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2FpKDApLGRlKDEsImJ1dHRvbiIsOTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub3BlblFiKCkpfSksV3QoMiwiY2xyLWljb24iLDkxKSxkZSgzLCJzcGFu'@;
put 'Iiw3OCksT2UoNCwiRmlsdGVyIiksaGUoKSgpLGRlKDUsImJ1dHRvbiIsOTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZWRpdFRhYmxlKCkpfSksV3QoNiwiY2xyLWljb24iLDkzKSxkZSg3LCJzcGFuIiw3OCksT2UoOCwiRWRpdCIpLGhlKCkoKSxndCg5'@;
put 'LGY5dCw0LDAsImJ1dHRvbiIsOTQpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDkpLE1lKCJuZ0lmIiwhYS5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyl9fWZ1bmN0aW9uIGc5dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNCk7'@;
put 'ZmUoKSxCdSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xs'@;
put 'ZXIuaW8iKX19ZnVuY3Rpb24gbTl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODgpLGd0KDEsZzl0LDIsMiwic3BhbiIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1'@;
put 'bmN0aW9uIHY5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2FpKDApLGRlKDEsImJ1dHRvbiIsOTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuY2FuY2VsRWRpdCgpKX0pLFd0KDIsImNsci1pY29uIiw5OCksZGUoMywic3BhbiIpLE9lKDQsIkNhbmNl'@;
put 'bCIpLGhlKCkoKSxkZSg1LCJjbHItdG9vbHRpcCIpKDYsImJ1dHRvbiIsOTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJvdygpKX0pLFd0KDcsImNsci1pY29uIiwxMDAp'@;
put 'LE9lKDgsIkFkZCBSb3cgIiksaGUoKSxndCg5LG05dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxoZSgpLGRlKDEwLCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNoZWNrU2F2ZSgpKX0pLFd0KDExLCJjbHItaWNvbiIsMTAx'@;
put 'KSxPZSgxMiwiU3VibWl0ICIpLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNiksVHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyksTWUoImNsckxvYWRpbmciLGEuYWRkaW5nTmV3Um93KX19ZnVuY3Rpb24geTl0KGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxMDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSxXdCgxLCJjbHItaWNvbiIsOTMpLGRlKDIsInNwYW4iKSxPZSgzLCJFZGl0IiksaGUoKSgpfX1mdW5j'@;
put 'dGlvbiBiOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJidXR0b24iLDEwMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5kaXNjYXJkU291cmNlRmlsZT0hMCl9KSxXdCgyLCJjbHItaWNvbiIsOTgpLGRlKDMsInNwYW4iKSxPZSg0'@;
put 'LCJEaXNjYXJkIGZpbGUiKSxoZSgpKCksZ3QoNSx5OXQsNCwwLCJidXR0b24iLDEwMyksZGUoNiwiYnV0dG9uIiwxMDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuc3VibWl0RXhjZWwoKSl9KSxXdCg3LCJjbHItaWNvbiIsMTAxKSxPZSg4LCIgU3VibWl0'@;
put 'ICIpLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNSksTWUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkpLGZlKCksTWUoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIF85dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsODkpLGd0KDEscDl0LDEw'@;
put 'LDEsIm5nLWNvbnRhaW5lciIsMzkpKDIsdjl0LDEzLDMsIm5nLWNvbnRhaW5lciIsMzkpKDMsYjl0LDksMiwibmctY29udGFpbmVyIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksZmUoKSxN'@;
put 'ZSgibmdJZiIsIWEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLGZlKCksTWUoIm5nSWYiLGEudXBsb2FkUHJldmlldyl9fWZ1bmN0aW9uIHc5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA2KSgxLCJzcGFuIiksT2UoMiwiRklMVEVSIDogIiksZGUoMywiYiIpLE9l'@;
put 'KDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSxTcihhLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIEM5dChjLGwpezEmYyYmKGFpKDApLGRlKDEsInNwYW4iLDEwOSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiLDExMCkoNCwicCIsMTExKSxPZSg1LCJMb2Fk'@;
put 'aW5nIHRhYmxlIiksaGUoKSgpLHNpKCkpfWZ1bmN0aW9uIFM5dChjLGwpezEmYyYmKGFpKDApLGRlKDEsInNwYW4iKSxXdCgyLCJjbHItaWNvbiIsMTEyKSxoZSgpLGRlKDMsImRpdiIsMTEwKSg0LCJwIiwxMTEpLE9lKDUsIkxvYWRpbmcgdGFibGUgZXJyb3IiKSxoZSgpKCksc2koKSl9ZnVu'@;
put 'Y3Rpb24gTTl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDcpKDEsImRpdiIsMTA4KSxndCgyLEM5dCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpKDMsUzl0LDYsMCwibmctY29udGFpbmVyIiwzOSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSxNZSgibmdJZiIsIWEuZ2V0ZGF0'@;
put 'YUVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmdldGRhdGFFcnJvcil9fWZ1bmN0aW9uIHg5dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxCdSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVk'@;
put 'aXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gRTl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAt'@;
put 'Y29udGVudCIsMTE1KSxndCgxLHg5dCwyLDIsInNwYW4iLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBUOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdG9vbHRp'@;
put 'cCIpKDEsImJ1dHRvbiIsMTEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkpfSksV3QoMiwiY2xyLWljb24iLDEwMCksT2UoMywiIEFkZCBS'@;
put 'ZWNvcmQgIiksaGUoKSxndCg0LEU5dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBBOXQoYyxsKXtpZigxJmMm'@;
put 'JihkZSgwLCJwIiwxMTYpLE9lKDEpLFd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTHIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250YWN0ICIpfX1mdW5j'@;
put 'dGlvbiBrOXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMjgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLEJ1KCJPbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93'@;
put 'c19saW1pdD8icm93Ijoicm93cyIsIiB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEQ5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTI5KSgxLCJk'@;
put 'aXYiLDEzMCkoMiwibGFiZWwiLDEzMSksT2UoMywiTWVzc2FnZSIpLGhlKCksZGUoNCwidGV4dGFyZWEiLDEzMikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIGdpKGYubWVzc2FnZSxoKXx8KGYubWVzc2FnZT1oKSxDdChoKX0pLGhl'@;
put 'KCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSg0KSxmaSgibmdNb2RlbCIsYS5tZXNzYWdlKSxNZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKSgidmFsdWUiLGEudmFsaWRhdGlvbkRvbmU/IiI6IlBsZWFzZSB3YWl0IHdoaWxlIHdlIHZhbGlkYXRlICIrYS5jb2xzLmxlbmd0'@;
put 'aCphLm1vZGlmZWRSb3dzSW5kZXhlcy5sZW5ndGgrIiBjZWxscy4iKX19ZnVuY3Rpb24gSTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMTcpKDEsImRpdiIsMTE4KSgyLCJkaXYiLDExOSkoMywiZGl2IiwxMjApKDQsImJ1dHRvbiIsMTIxKSxXdCg1LCJjbHItaWNv'@;
put 'biIsMTIyKSxoZSgpLGRlKDYsImgzIiw4KSxPZSg3KSxoZSgpKCksZGUoOCwiZGl2Iiw5KSxndCg5LGs5dCwyLDIsInNwYW4iLDEyMykoMTAsRDl0LDUsMywiZGl2IiwxMjQpLGhlKCksZGUoMTEsImRpdiIsMTI1KSgxMiwiYnV0dG9uIiwxMjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChh'@;
put 'KTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGguc2F2ZVRhYmxlKGguaG90VGFibGUuZGF0YSkpfSksT2UoMTMsIiBTdWJtaXQgIiksaGUoKSxkZSgxNCwiYnV0dG9uIiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIGguY2FuY2VsU3VibWl0KCks'@;
put 'aC5zdWJtaXQ9ITEsQ3QoaC52YWxpZGF0aW9uRG9uZT0wKX0pLE9lKDE1LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSg3KSxaZigiIFN1Ym1pdCBmb3IgQXBwcm92YWwgKCIsYS5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQsIiBhZGRlZCwgIixhLnJvd3ND'@;
put 'aGFuZ2VkLnJvd3NVcGRhdGVkLCIgdXBkYXRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksZmUoMiksTWUoIm5nSWYiLGEudG90YWxSb3dzQ2hhbmdlZD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCYmYS5saWNlbmNlU3RhdGUudmFs'@;
put 'dWUuc3VibWl0X3Jvd3NfbGltaXQhPT1hLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlVHJ1ZSksZmUoMiksTWUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSl9fWZ1bmN0aW9uIFI5dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzMyksT2UoMSksUW8oMiwicGtTcGFj'@;
put 'ZVNlcGFyYXRlIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTtmZSgpLEJ1KCIgT24gcm93ICIsYSsxLCI6ICIsQWMoMiwyLGQucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIsIiIpKSwiICIpfX1mdW5jdGlvbiBMOXQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiksT2UoMSks'@;
put 'aGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksWmYoIiAiLGEuY29sLCIoIixhLmxlbiwiKSwgIixhLnZhbCwiICIpfX1mdW5jdGlvbiBPOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDEzNCkoMSwiZGl2IiwxMzUpKDIsImRpdiIsMTE5KSgzLCJkaXYi'@;
put 'LDEyMCkoNCwiYnV0dG9uIiwxMjEpLFd0KDUsImNsci1pY29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLE9lKDcsIkVycm9yIiksaGUoKSgpLGRlKDgsImRpdiIsOSkoOSwicCIpLE9lKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDIz'@;
put 'KSgxMiwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksT2UoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFA5dChjLGwpezEmYyYmV3QoMCwiYXBwLXF1ZXJ5IixudWxsLDUpfWZ1bmN0aW9u'@;
put 'IEY5dChjLGwpezEmYyYmKGRlKDAsInAiLDEzNiksT2UoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIiksaGUoKSl9bGV0IHVOPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuY250PTB9c3RhdGlje3RoaXMubm9uUGtDbnQ9MH1zdGF0aWN7dGhpcy5sYXN0Q2VsbD0w'@;
put 'fXVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKXt0aGlzLmhvdFRhYmxlU2V0dGluZ3M9e2NvbEhlYWRlcnM6dGhpcy5ob3RUYWJsZS5jb2xIZWFkZXJzLGNvbHVtbnM6dGhpcy5ob3RUYWJsZS5jb2x1bW5zLGhlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxsaWNlbnNlS2V5OnRoaXMuaG90VGFi'@;
put 'bGUubGljZW5zZUtleSxyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxjb250ZXh0TWVudTohMH19Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLHJlLHVlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNl'@;
put 'cnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5yb3V0ZT1JLHRoaXMuc2FzU2VydmljZT1HLHRoaXMuY2RmPXJlLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlPXVlLHRoaXMudXBs'@;
put 'b2FkU3RhdGVyQ29tcExpc3Q9bmV3IGxoLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgbGgsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgbGgsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9'@;
put 'LHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlU2V0dGluZ3M9e30sdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltd'@;
put 'LGhpZGRlbjohMCxjb2x1bW5zOltdLGhlaWdodDoiY2FsYygxMDB2aCAtIDE2MHB4KSIsbGljZW5zZUtleTp2b2lkIDAscmVhZE9ubHk6ITAsY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRl'@;
put 'bXM6e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7Y29uc3QgQmU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoIUJlKXJldHVybiExO2NvbnN0IEdlPUJlWzBdO3JldHVybiBHZS5mcm9tLnJvdyE9PUdlLnRvLnJvd30sY2FsbGJhY2s6KEVlLEJlLEdlKT0+e2NvbnN0IHN0'@;
put 'PUJlWzBdO3N0LnN0YXJ0LnJvdz09PXN0LmVuZC5yb3cmJnRoaXMuZWRpdFJlY29yZChudWxsLHN0LnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUiLGNhbGxiYWNrOihFZSxCZSxHZSk9Pnt0aGlzLmluc2VydFJvd0F0UG9zaXRpb24oQmVbMF0uc3RhcnQu'@;
put 'cm93KX19LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyIsY2FsbGJhY2s6KEVlLEJlLEdlKT0+e3RoaXMuaW5zZXJ0Um93QXRQb3NpdGlvbihCZVswXS5zdGFydC5yb3crMSl9fSxyZW1vdmVfcm93OntuYW1lOiJJZ25vcmUgcm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0'@;
put 'IGhlYWRlcnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJzIn0sY29weV9jb2x1bW5faGVhZGVyc19vbmx5OntuYW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25h'@;
put 'bWU6IlJlZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOjAscm93c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5t'@;
put 'b2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtGaWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNh'@;
put 'dmVMb2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBrTnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSEx'@;
put 'LHRoaXMucGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlzLnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0hMSx0aGlzLmV4Y2VlZENlbGxzPVtdLHRoaXMudXBsb2FkZXI9bmV3IFllZSx0aGlz'@;
put 'LnVwbG9hZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5kYXRhPVtdLHRoaXMuaGVhZGVyQXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9'@;
put 'LHRoaXMuaGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Bab25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVI'@;
put 'ZWFkZXJzPVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVsZXM9W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgR24s'@;
put 'dGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3VyY2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVkaXRNb2RhbD0hMSx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVk'@;
put 'aXRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVy'@;
put 'bD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0ZGF0YUVycm9yPSExLHRoaXMuemVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZp'@;
put 'bGVEcmFnT3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRVhUUkFfQ09MX05BTUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9U'@;
put 'WVBFOjMsUkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRElTUExBWV9WQUxVRToxLFJBV19WQUxVRToyfSx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25N'@;
put 'YXA9W10sdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy50aW1lc0NsaWNrZWQ9MCxLZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0mJldtLnJlZ2lzdGVyTGFuZ3VhZ2UoS2VlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKSx0aGlz'@;
put 'LnBhcnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0'@;
put 'RWRpdFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rp'@;
put 'b25zPXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5hfSksdGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRS'@;
put 'b3cmJihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4'@;
put 'dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRh'@;
put 'U291cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRN'@;
put 'b2RhbCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1h'@;
put 'dGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVkIHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2FkTW9kYWw9ITApfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92'@;
put 'ZXI9YX1hdHRhY2hGaWxlKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IkxvYWRpbmciLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMCx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMuZmlsZW5hbWU9Zi5u'@;
put 'YW1lLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmYsdXBsb2FkZXI6dGhpcy51cGxvYWRlcixkY1ZhbGlkYXRvcjp0aGlzLmRjVmFsaWRhdG9yLGhlYWRlclBrczp0aGlzLmhlYWRlclBrcyxoZWFkZXJBcnJheTp0aGlzLmhlYWRlckFycmF5LGhlYWRlclNo'@;
put 'b3c6dGhpcy5oZWFkZXJTaG93LHRpbWVIZWFkZXJzOnRoaXMudGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6dGhpcy5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6dGhpcy5kYXRlVGltZUhlYWRlcnMseGxSdWxlczp0aGlzLnhsUnVsZXMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ30sdj0+e3Ro'@;
put 'aXMuYXBwZW5kVXBsb2FkU3RhdGUodil9LHY9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJUYWJsZSBGb3VuZCIsdil9KS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9UShmdW5jdGlvbiooTSl7TSYmKGguZXhjZWxGaWxlUmVhZHk9ITAsaC51cGxvYWRlcj1NLnVwbG9hZGVyLE0u'@;
put 'ZGF0YSYmTS5oZWFkZXJTaG93PyhoLmRhdGE9TS5kYXRhLGguaGVhZGVyU2hvdz1NLmhlYWRlclNob3csaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCkpOnlpZWxkIGgudXBsb2FkUGFyc2VkRmlsZXMoKSl9KTtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfX0oKSkuY2F0Y2godj0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsdixudWxsKSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsc2V0VGltZW91dCgoKT0+e3RoaXMuZmlsZW5hbWU9IiJ9KX0pLmZpbmFsbHkoKCk9Pnt0aGlz'@;
put 'LmV4Y2VsRmlsZVBhcnNpbmc9ITF9KX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMudXBsb2FkUGFyc2VkRmlsZXMoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXVwbG9hZFBhcnNlZEZpbGVzKCl7dmFyIGE9dGhp'@;
put 'cztyZXR1cm4gUShmdW5jdGlvbiooKXtpZihhLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGEudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT1hLmR1cGxpY2F0ZVBr'@;
put 'SW5kZXhlcy5sZW5ndGgpcmV0dXJuIGEucGtEdXBzPSEwLHZvaWQoYS5zdWJtaXQ9ITEpO2EucGtEdXBzPSExLGEudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGEudXBsb2FkZXIucXVldWUpZC5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSk7eWllbGQg'@;
put 'YS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoYS51cGxvYWRVcmwsZCx7dGFibGU6YS5saWJkc30pLnRoZW4oaD0+e2lmKHR5cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcz4idSIpcmV0dXJuO3thLnVwbG9h'@;
put 'ZExvYWRpbmc9ITE7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF07YS5zdWNjZXNzRW5hYmxlPSEwLGEudGFibGVJZD1mLkRTSUQsYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYS50YWJsZUlkKX19ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLHY9'@;
put 'Zi5zYXNqc0Fib3J0WzBdLk1TRyxNPWYuc2FzanNBYm9ydFswXS5NQUM7YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZW5hbWU9IiIsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiks'@;
put 'YS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIix2LHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6TX0pfX0saD0+e2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVVcGxvYWRJbnB1'@;
put 'dENvbXBMaXN0LmZpcnN0JiYoYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLGguYWRhcHRlclJlc3BvbnNlKX0pfSko'@;
put 'KX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IGE9W107dGhp'@;
put 'cy5kYXRhLm1hcChoPT57Y29uc3QgZj17fTt0aGlzLmhlYWRlclNob3cubWFwKCh2LE0pPT57Zlt2XT1oW01dfSksZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxhLnB1c2goZil9KSx0aGlzLmRhdGFTb3Vy'@;
put 'Y2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixkLnVw'@;
put 'ZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2'@;
put 'aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5nRXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxv'@;
put 'd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9'@;
put 'ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZl'@;
put 'ZD0iIil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShhLGQ9ITEpe3RoaXMuY2RmLmRldGVjdENo'@;
put 'YW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShhKSl9aXNDb2xQayhhKXtyZXR1cm4gdGhp'@;
put 'cy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVl'@;
put 'cnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W107Y29uc3QgaD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFy'@;
put 'aWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09Sm4ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUpuLnJvb3RQYXJhbSkmJihKbi5lZGl0b3IuZmlsdGVyLmNs'@;
put 'YXVzZXM9W10sSm4uZWRpdG9yLmZpbHRlci5xdWVyeT1bXSxKbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5n'@;
put 'dGg7disrKXtjb25zdCBNPWZbdl0uZWxlbWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihJKXtyZXR1cm4gbnVsbD09PUkudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt0'@;
put 'cnl7aWYodm9pZCAwIT09YS5jbGF1c2VzJiZhLmxpYmRzKXtjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goTT0+e2NvbnN0IEk9e2ZpbHRlckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9y'@;
put 'RWFjaChHPT57SS5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShHKSl9KSxJLmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEkpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZp'@;
put 'Y2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5RmlsdGVyPXtpZDpNLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6TS5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfSxhLnJvdXRlci5u'@;
put 'YXZpZ2F0ZShbIi8iXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hh'@;
put 'bmRsaW5nOiJwcmVzZXJ2ZSJ9KSksYS5maWx0ZXI9ITF9KS5jYXRjaChNPT57YS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGYpe2EucXVlcnlFcnI9ITAsYS5zdWJtaXRMb2FkaW5nPSExLGEucXVlcnlFcnJNZXNzYWdlPWZ9fSkoKX1vcGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0'@;
put 'ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYmRzLHRoaXMuY29scykpfWVkaXRUYWJsZShhLGQpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIs'@;
put 'ITApO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZSxmPWguZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSx2PWYuZ2V0U29ydENvbmZpZygpLE09QXJyYXkuaXNBcnJheSh2KT92Olt2XTtzZXRUaW1lb3V0KCgpPT57YXx8KHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBl'@;
put 'clNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksZCYmdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsaC51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5o'@;
put 'b3RUYWJsZS5yZWFkT25seX0sITEpLGgucmVuZGVyKCk7Zm9yKGNvbnN0IEkgb2YgTSlmLnNvcnQoSSk7dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMTAwKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5'@;
put 'cGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpZm9yKGNvbnN0IGggaW4gZCl7Y29uc3QgZj10aGlzLmNvbHMuZmluZCh2PT52Lk5BTUU9PT1oKTtmJiYiIiE9PWRbaF0mJiJudW0iPT09Zi5UWVBFJiYhZi5ERFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWYuRERUWVBFLmluY2x1ZGVzKCJEQVRFIikm'@;
put 'JihkW2hdPXBhcnNlSW50KGRbaF0pKX19Y2FuY2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy5jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1h'@;
put 'LmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaD1kLmdldFNvcnRDb25maWcoKSxmPUFycmF5LmlzQXJyYXkoaCk/aDpbaF07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNl'@;
put 'VW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnZhbGlkYXRlUm93cyh0'@;
put 'aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGNvbnN0IHYgb2YgZilkLnNvcnQodik7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0Ns'@;
put 'aWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRk'@;
put 'Um93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPXRoaXMuY3JlYXRlRW1wdHlSb3coKTt0aGlzLmRhdGFTb3VyY2UucHVzaChkKSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2Vs'@;
put 'ZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNyZWF0ZUVtcHR5Um93KCl7Y29uc3QgYT17fTtyZXR1cm4gdGhpcy5oZWFkZXJDb2x1bW5zLmZvckVhY2go'@;
put 'ZD0+e2FbZF09IiJ9KSxhLm5vTGlua09wdGlvbj0hMCxhfWluc2VydFJvd0F0UG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLmNyZWF0ZUVtcHR5Um93KCk7dGhpcy5kYXRhU291cmNlLnNwbGljZShhLDAsZCk7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2gudXBkYXRlU2V0dGluZ3Moe2RhdGE6'@;
put 'dGhpcy5kYXRhU291cmNlfSwhMSksaC5yZW5kZXIoKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1jYW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNv'@;
put 'dXJjZUJlZm9yZVN1Ym1pdD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2Vs'@;
put 'bFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gMD09PWg/NjA6ZD41MDA/NTAwOmR9fSwhMSksYS5zZWxlY3RDZWxsKDAsMCksYS5yZW5kZXIoKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0'@;
put 'aW9uVmFsdWVzKCl9Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2Vk'@;
put 'KSk7bGV0IGE9MCxkPTAsaD0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmKyspe2NvbnN0IHY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0p'@;
put 'O2lmKCJZZXMiPT09di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSxkKys7ZWxzZXtjb25zdCBNPXRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5maW5kKEk9Pntmb3IoY29uc3QgRyBvZiB0aGlzLmhlYWRlclBrcylpZihJW0ddIT09dltH'@;
put 'XSlyZXR1cm4hMTtyZXR1cm4hMH0pO00/SlNPTi5zdHJpbmdpZnkodikhPT1KU09OLnN0cmluZ2lmeShNKSYmKHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxhKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLHRoaXMubW9kaWZl'@;
put 'ZFJvd3NJbmRleGVzLnB1c2goZiksaCsrKX19dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6YSxyb3dzRGVsZXRlZDpkLHJvd3NBZGRlZDpofX1jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IGQgb2YgdGhpcy5kdXBsaWNh'@;
put 'dGVQa0luZGV4ZXMpZm9yKGxldCBoPTE7aDw9dGhpcy5yZWFkT25seUZpZWxkcztoKyspe2EucmVtb3ZlQ2VsbE1ldGEoZCxoLCJ2YWxpZCIpLGEucmVtb3ZlQ2VsbE1ldGEoZCxoLCJkdXBLZXkiKTtjb25zdCBmPWEuZ2V0Q2VsbE1ldGEoZCxoKTtpZihmLmNsYXNzTmFtZSl7bGV0IHY7dj1B'@;
put 'cnJheS5pc0FycmF5KGYuY2xhc3NOYW1lKT9mLmNsYXNzTmFtZS5maWx0ZXIoTT0+ImRjLWludmFsaWQtY2VsbCIhPT1NKS5qb2luKCIgIik6Zi5jbGFzc05hbWUucmVwbGFjZSgiZGMtaW52YWxpZC1jZWxsIiwiIikudHJpbSgpLGEuc2V0Q2VsbE1ldGEoZCxoLCJjbGFzc05hbWUiLHYpfX10'@;
put 'aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSxhLnJlbmRlcigpfXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKTtjb25zdCBkPXRoaXMuZGF0YVNvdXJjZTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQg'@;
put 'dj0wO3Y8ZC5sZW5ndGg7disrKXtsZXQgTT0iIjtmb3IobGV0IEk9MTtJPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtJKyspTT1NKyJ8IisoZFt2XVt0aGlzLmhlYWRlckNvbHVtbnNbSV1dfHwiIik7dGhpcy5wa0ZpZWxkcy5wdXNoKE0pfWNvbnN0IGg9W107aWYodGhpcy5wa0ZpZWxkcy5sZW5n'@;
put 'dGg+MClmb3IobGV0IHY9MDt2PHRoaXMucGtGaWVsZHMubGVuZ3RoO3YrKylmb3IobGV0IE09MDtNPHRoaXMucGtGaWVsZHMubGVuZ3RoO00rKyl0aGlzLnBrRmllbGRzW3ZdPT09dGhpcy5wa0ZpZWxkc1tNXSYmTSE9PXYmJiJ8IiE9PXRoaXMucGtGaWVsZHNbdl0mJmgucHVzaChNKTtmb3Io'@;
put 'bGV0IHY9MDt2PGQubGVuZ3RoO3YrKylmb3IobGV0IE09MDtNPHRoaXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7TSsrKXtjb25zdCBJPWEuZ2V0Q2VsbE1ldGEodixNKTtJJiYoSS52YWxpZD0hMCxJLmR1cEtleT0hMSl9Zm9yKGxldCB2PTA7djxoLmxlbmd0aDt2KyspZm9yKGxldCBNPTE7TTx0'@;
put 'aGlzLnJlYWRPbmx5RmllbGRzKzE7TSsrKWEuc2V0Q2VsbE1ldGEoaFt2XSxNLCJ2YWxpZCIsITEpLGEuc2V0Q2VsbE1ldGEoaFt2XSxNLCJkdXBLZXkiLCEwKSxhLnNldENlbGxNZXRhKGhbdl0sTSwiY2xhc3NOYW1lIiwiZGMtaW52YWxpZC1jZWxsIik7dGhpcy5kdXBsaWNhdGVQa0luZGV4'@;
put 'ZXM9Wy4uLm5ldyBTZXQoaC5zb3J0KCkpXSxhLnJlbmRlcigpfXJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoYT0hMSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IGYgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3Qgdj1mLnZhbHVlcy5tYXAoTT0+TVt0'@;
put 'aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2guYmF0Y2goKCk9Pntjb25zdCBNPWguZ2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wpLEk9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShNLmRhdGF8fCIiKTtsZXQgRztJJiYoRz10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bk'@;
put 'b3duU291cmNlKEkpKSxHfHwoRz1bXSk7Y29uc3QgcmU9Wy4uLm5ldyBTZXQoWy4uLkcsLi4udl0pXTt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHtzb3VyY2U6cmV9KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzb3VyY2UiLHJlKSxmLnZh'@;
put 'bHVlcy5sZW5ndGg+MCYmKGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInN0cmljdCIsZi5z'@;
put 'dHJpY3QpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmYuc3RyaWN0'@;
put 'LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhmLHZvaWQgMCxhLGQpLGgucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGEsZCxoPSExLGYpe2lmKGEpe2R8fChkPWEucm93KTtjb25zdCBNPXRoaXMuZ2V0RXh0'@;
put 'ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsTSxoLGYpfWVsc2UgZm9yKGNvbnN0IE0gb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgST10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoTSk7dGhpcy5z'@;
put 'ZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoTSxNLnJvdyxJLGgsZil9fXNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsaCxmPSExLHYpe2NvbnN0IE09dGhpcy5ob3RJbnN0YW5jZSxJPVtdO2Zvcihjb25zdCBHIG9mIGgpSS5pbmRleE9mKEcuRVhUUkFfQ09MX05BTUUpPDAmJkkucHVzaChH'@;
put 'LkVYVFJBX0NPTF9OQU1FKTtmb3IoY29uc3QgRyBvZiBJKXtjb25zdCByZT1oLmZpbHRlcihkdD0+ZHQuRVhUUkFfQ09MX05BTUU9PT1HKTtsZXQgdWU9cmUubWFwKGR0PT4iQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSk7Y29uc3QgeWU9'@;
put 'TS5wcm9wVG9Db2woRyk7dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZHQ9PmR0LnJvdz09PWQmJmR0LmNvbD09PXllKXx8dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2goe3JvdzpkLGNvbDp5ZSxhY3RpdmU6ITF9'@;
put 'KSxNLnNldENlbGxNZXRhKGQseWUsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksTS5zZXRDZWxsTWV0YShkLHllLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksTS5zZXRDZWxsTWV0YShkLHllLCJzdHJpY3QiLGEuc3RyaWN0KSxNLnNldENlbGxNZXRhKGQseWUsImZpbHRlciIs'@;
put 'ITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoeWUse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IEJlPU0uZ2V0Q2VsbE1ldGEoZCx5ZSksR2U9'@;
put 'dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZS5kYXRhfHwiIik7bGV0IHN0O0dlJiYoc3Q9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShHZSkpLHN0fHwoc3Q9W10pLCJudW1lcmljIj09PUdlPy50eXBlPyhzdD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5'@;
put 'VmFsdWVzKHN0LCJudW1iZXIiKSx1ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHVlLCJudW1iZXIiKSk6KHN0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoc3QsInN0cmluZyIpLHVlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlW'@;
put 'YWx1ZXModWUsInN0cmluZyIpKTtjb25zdCBwdD1bLi4ubmV3IFNldChbLi4uc3QsLi4udWVdKV07aWYoTS5zZXRDZWxsTWV0YShkLHllLCJzb3VyY2UiLHB0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHllLHtzb3VyY2U6cHR9KSxmKXtpZih2JiZ2IT09'@;
put 'ZClyZXR1cm47Y29uc3QgZHQ9cmUuZmluZChxdD0+MT09PXF0LkZPUkNFX0ZMQUcpO2R0JiZzZXRUaW1lb3V0KCgpPT57TS5zZXREYXRhQXRDZWxsKGQseWUsIkMiPT09ZHQuRElTUExBWV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRh'@;
put 'dGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD09PWQmJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVtHXT0iQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVu'@;
put 'ZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSxkKXtjb25zdCBmPXRoaXMuaG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChkfHxhLnJvdyxhLmNvbCksdj0oYS52YWx1ZXMuZmluZChyZT0+cmVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09Zil8fFtdKVt0aGlzLmNlbGxWYWxp'@;
put 'ZGF0aW9uRmllbGRzLkRJU1BMQVlfSU5ERVhdLE09YS5leHRlbmRlZF92YWx1ZXM/LmZpbHRlcihyZT0+cmVbMF09PT12KSxJPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzKSxHPVtdO2Zvcihjb25zdCByZSBvZiBNfHxbXSl7'@;
put 'Y29uc3QgdWU9e307Zm9yKGNvbnN0IHllIG9mIE9iamVjdC5rZXlzKEkpKXVlW3llXT1yZVtJW3llXV07Ry5wdXNoKHVlKX1yZXR1cm4gR31jaGVja1NhdmUoKXtpZih0aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlz'@;
put 'LnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMgdG8gc3VibWl0Iix0aGlzLmJhZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWlu'@;
put 'LiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpO2ZvcihsZXQgZD0wO2Q8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtkKysp'@;
put 'ZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtkXS5ub0xpbmtPcHRpb247Zm9yKDt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPjA7KXtjb25zdCBkPXRoaXMuZGF0YVNvdXJjZVt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTFdO2lmKCFPYmplY3Qua2V5cyhkKS5ldmVyeShmPT4iX19fX19ERUxFVEVfX1RI'@;
put 'SVNfX1JFQ09SRF9fX19fIj09PWZ8fCFkW2ZdfHwiIj09PWRbZl0pKWJyZWFrO3RoaXMuZGF0YVNvdXJjZS5wb3AoKX1pZihhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRp'@;
put 'b24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gZD41MDA/NTAwOmR9fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksYy5jbnQ9MCxjLm5vblBrQ250PTAsdGhpcy52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVz'@;
put 'Lmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5zdWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2Vydmlj'@;
put 'ZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9Pntjb25zdCBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JtRmllbGRzXzgi'@;
put 'KTtkJiZkLmZvY3VzKCl9LDIwMCkpfSl9c2F2ZVRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aWYoZC5ob3RJbnN0YW5jZS5nZXREYXRhKCksYT0oYT1hLmZpbHRlcih2PT4hIWQuZGF0YU1vZGlmaWVkLmZpbmQoST0+e2Zvcihjb25zdCBHIG9mIGQuaGVhZGVyUGtz'@;
put 'KWlmKElbR10hPT12W0ddKXJldHVybiExO3JldHVybiEwfSkpKS5tYXAodj0+e2NvbnN0IE09di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSB2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyx2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19f'@;
put 'Xz1NLE9iamVjdC5rZXlzKHYpLm1hcChJPT57Im51bWVyaWMiPT09ZC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShJKT8udHlwZSYmIi4iPT09dltJXSYmKHZbSV09bnVsbCl9KSx2fSksZC5sb2dnZXJTZXJ2aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQiLGEpLGQuY2hlY2tJbnZhbGlkKCkpcmV0dXJu'@;
put 'IGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLGQuY2FuY2VsU3VibWl0KCksdm9pZChkLnN1Ym1pdD0hMSk7aWYoZC52YWxpZGF0aW9uRG9uZT0wLGQuc2F2ZUxvYWRpbmc9ITAsYy5jbnQ8MSYmMD09'@;
put 'PWQuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aCYmYy5ub25Qa0NudDwxKXtkLnNhdmVMb2FkaW5nPSEwLGQuZGlzYWJsZVN1Ym1pdD0hMSxkLnN1Ym1pdD0hMDtjb25zdCB2PXtBQ1RJT046IkxPQUQifTtpZihkLm1lc3NhZ2U9ZC5tZXNzYWdlLnJlcGxhY2UoL1xuL2csIi4gIiksdi5NRVNT'@;
put 'QUdFPWQubWVzc2FnZSx2LkxJQkRTPWQubGliZHMsZC5jb2xzKXtjb25zdCBNPWEuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7aWYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUodixNLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3Jz'@;
put 'L3N0YWdlZGF0YSIsZC4kZGF0YUZvcm1hdHMpLnRoZW4oRz0+e2lmKHR5cGVvZiBHLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXM8InUiKXJldHVybiBkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitHLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF0uRFNJRCksITA7bGV0IHJl'@;
put 'PSJTdWJtaXQgcmVxdWVzdCBmYWlsZWQiO0cmJihyZSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIEc/RzpKU09OLnN0cmluZ2lmeShHKX1gKSxkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLHJlLG51bGwsIlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2goRz0+'@;
put 'e2NvbnNvbGUubG9nKCJlcnIiLEcpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMCxkLnN1Ym1pdD0hMTtjb25zdCByZT0ic3RyaW5nIj09dHlwZW9mIEcuYWRhcHRlclJlc3Buc2U/Ry5hZGFwdGVyUmVzcG5zZTpKU09OLnN0cmluZ2lmeShHLmFkYXB0ZXJSZXNwbnNl'@;
put 'KTtyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4ke3JlfWAsbnVsbCwiU3VibWl0IGVycm9yIiksITF9KSlyZXR1cm59fWMuY250Pj0xPyhkLnBrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJt'@;
put 'aXQ9ITEsYy5ub25Qa0NudD49MT8oZC5ub1BrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsZC5jYW5jZWxTdWJtaXQoKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3VyY2UoYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0'@;
put 'b3I/LmdldFJ1bGUoYSl9Y2hlY2tJbnZhbGlkKCl7aWYoIXRoaXMuaG90VGFibGVDb21wb25lbnR8fCF0aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlKXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RUYWJsZUNvbXBvbmVudC5ob3RJbnN0YW5jZS5yb290RWxlbWVudDtpZighYSly'@;
put 'ZXR1cm4hMTtjb25zdCBkPWEucXVlcnlTZWxlY3RvckFsbCgiLmh0SW52YWxpZCIpLGg9YS5xdWVyeVNlbGVjdG9yQWxsKCIuZGMtaW52YWxpZC1jZWxsIik7cmV0dXJuIGQubGVuZ3RoPjB8fGgubGVuZ3RoPjB9Z29Ub0VkaXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1j'@;
put 'bG9zZVJlY29yZEVkaXQoYSl7dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dm9pZCAwLCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24mJiFhJiYodGhpcy5kYXRhU291cmNl'@;
put 'PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSl9Y29uZmlybVJlY29yZEVkaXQoYT0hMCl7Y29uc3QgZD10aGlzLmN1cnJlbnRFZGl0UmVjb3Jk'@;
put 'SW5kZXg7YSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGY9Pntjb25zdCB2PXRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl0sTT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2ZdPy50eXBlLEk9KDAscGcuaXNTcGVjaWFsTWlz'@;
put 'c2luZykodik7TSYmIWlzTmFOKHYpJiYhSSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl09MSp2KX0pLHRoaXMuZGF0YVNvdXJjZVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90VGFibGUuZGF0YVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2Uu'@;
put 'dXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJl'@;
put 'Y29yZEluZGV4Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0'@;
put 'aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFk'@;
put 'ZFJlY29yZEJ1dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3Jk'@;
put 'KCksc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKGEsZCxoKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5l'@;
put 'dmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1kfHxkPDB8fHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3JkQWN0aW9uPWg/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVh'@;
put 'ZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCExLGgpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRjVmFsaWRhdG9yKSxoKXRoaXMucHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRh'@;
put 'dGFTb3VyY2UpLHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KGQpKTtmb3IoY29uc3QgdiBvZiBmKWlmKHYpe2NvbnN0IE09di5wcm9wPy50b1N0cmluZygp'@;
put 'O2RlbGV0ZSB2LnByb3AsZGVsZXRlIHYuZGF0YSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHYuY29sLHsuLi52LGRhdGE6TX0pfX10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9ZCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVyU2Vydmlj'@;
put 'ZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2RdKX19dG9nZ2xlSG90UGx1Z2luKGEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2guYmF0Y2goKCk9Pntjb25zdCBmPWguZ2V0UGx1Z2luKGEpO2Y/KHNldFRpbWVvdXQoKCk9PntkP2YuZW5hYmxlUGx1Z2luKCk6Zi5kaXNhYmxlUGx1'@;
put 'Z2luKCl9LDEwMCksaC5yZW5kZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUgSG90IFBsdWdpbiBmYWlsZWQgLSBQbHVnaW4gbmFtZWQ6ICIrYSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKXtyZXR1cm4hIXRoaXMuZGlzYWJs'@;
put 'ZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGY9PmYucm93PT09YSYmZi5jb2w9PT1kJiYhZi5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihhLGQpe2lmKHRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhv'@;
put 'dEluc3RhbmNlO2lmKGguZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSlyZXR1cm47Y29uc3Qgdj1oLmdldERhdGFBdENlbGwoYSxkKSxNPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2FdKSxJPU9iamVjdC5rZXlzKE0pW2RdLEc9dGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlLmRlbGV0ZUtleXNBbmRIYXNoKE0sW0ksIm5vTGlua09wdGlvbiJdLCExKSxyZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleCh1ZT0+dWUuaGFzaD09PUcpO2lmKHJlPi0xKXtsZXQgdWU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtyZV0udmFsdWVzLm1hcChCZT0+'@;
put 'QmVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25zdCB5ZT0oaC5nZXRDZWxsTWV0YShhLGQpLnNvdXJjZXx8W10pLmxlbmd0aDwxLEVlPSIgIiE9PXY7aC5iYXRjaCgoKT0+e2NvbnN0IEJlPWguZ2V0Q2VsbE1ldGEoYSxkKSxHZT10aGlzLmRjVmFsaWRhdG9yPy5n'@;
put 'ZXRSdWxlKEJlLmRhdGF8fCIiKTtsZXQgc3Q7R2UmJihzdD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKEdlKSksc3R8fChzdD1bXSksIm51bWVyaWMiPT09R2U/LnR5cGU/KHN0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoc3QsIm51bWJlciIp'@;
put 'LHVlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXModWUsIm51bWJlciIpKTooc3Q9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhzdCwic3RyaW5nIiksdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh1ZSwic3RyaW5nIikp'@;
put 'O2NvbnN0IHB0PVsuLi5uZXcgU2V0KFsuLi5zdCwuLi51ZV0pXTtpZihoLnNldENlbGxNZXRhKGEsZCwic291cmNlIixwdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtzb3VyY2U6cHR9KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXS52YWx1'@;
put 'ZXMubGVuZ3RoPjApe2NvbnN0IGR0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLnN0cmljdDtoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGEsZCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1l'@;
put 'dGEoYSxkLCJzdHJpY3QiLGR0KSxoLnNldENlbGxNZXRhKGEsZCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpkdCxmaWx0'@;
put 'ZXI6ITF9KX10aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyh0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXSxhLHllJiZFZSksaC5yZW5kZXIoKX0pfWlmKHJlPDApe2NvbnN0IHVlPXtTQVNDb250cm9sVGFibGU6W3tsaWJkczp0aGlzLmxpYmRzLHZhcmlhYmxlX25t'@;
put 'Okl9XSxzb3VyY2Vfcm93OltNXX0seWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKEkpLmZpbmQoRWU9PiJTT0ZUU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PUVlLlJVTEVfVFlQRSk7eWUmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNl'@;
put 'LnB1c2goe3JvdzphLGNvbDpkLHN0cmljdDoiSEFSRFNFTEVDVF9IT09LIj09PXllLlJVTEVfVFlQRSx2YWx1ZXM6W10saGFzaDpHLGNvdW50OnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoKzF9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFFtdCksdGhpcy5jdXJyZW50'@;
put 'RWRpdFJlY29yZExvYWRpbmdzLnB1c2goZCksaC5yZW5kZXIoKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRkeW5hbWljY29sdmFscyIsdWUsdm9pZCAwLHtzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOiEwLHN1cHByZXNzRXJyb3JBYm9ydE1vZGFsOiEwfSkudGhlbihF'@;
put 'ZT0+e2lmKEVlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX3ZhbHVlcy5tYXAoR2U9PkdlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSkubGVuZ3RoPjApe2NvbnN0IEdlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHN0PT5zdC5oYXNoPT09Ryk7R2U+'@;
put 'LTEmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW0dlXT17Li4udGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtHZV0scm93OmEsY29sOmQsdmFsdWVzOkVlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX3ZhbHVlcyxleHRlbmRlZF92YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNf'@;
put 'ZXh0ZW5kZWRfdmFsdWVzfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixxZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLGgu'@;
put 'YmF0Y2goKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCEwLGEpLGgucmVuZGVyKCksaC52YWxpZGF0ZVJvd3MoW2FdKX0sMTAwKX0pfWlmKGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIscWVlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9h'@;
put 'ZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD50aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0KXtjb25zdCBHZT10aGlzLmNlbGxW'@;
put 'YWxpZGF0aW9uU291cmNlLnJlZHVjZSgocHQsZHQpPT5wdC5jb3VudDxkdC5jb3VudD9wdDpkdCksc3Q9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKEdlKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShzdCwxKX19KS5jYXRjaChFZT0+e2NvbnN0IEJlPXRoaXMu'@;
put 'Y2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KEdlPT5HZS5oYXNoPT09Ryk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UoQmUsMSksaC5iYXRjaCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsSm10KSxoLnJlbmRlcigpfSksdGhpcy5jdXJyZW50RWRpdFJl'@;
put 'Y29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnB1c2goZCksc2V0VGltZW91dCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIscWVlKSxoLnJlbmRlcigpLHRo'@;
put 'aXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZihkKSwxKX0sM2UzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoi'@;
put 'LEVlKX0pKX19Y2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKXt0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHR5cGVvZiB0aGlzLmZpbHRlcl9wazwidSImJjE9PT10aGlzLmhvdFRhYmxlLmRhdGEubGVuZ3RoJiZbbnVsbCwiIl0uaW5jbHVkZXModGhpcy5ob3RUYWJsZS5kYXRhWzBdW3RoaXMuaGVh'@;
put 'ZGVyUGtzWzBdXSkmJih0aGlzLnplcm9GaWx0ZXJSb3dzPSEwKX1vblJlY29yZElucHV0Rm9jdXMoYSl7dGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24odGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LGEuY29sTmFtZSl9ZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJs'@;
put 'ZShhLGQsaCl7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2godGhpcy5kYXRhU291cmNlW2hdLFthLCJub0xpbmtPcHRpb24iXSksdj10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmQoTT0+TS5oYXNoPT09ZiYmZD09PU0uY29sKTtpZih2JiZ2LmV4dGVu'@;
put 'ZGVkX3ZhbHVlcyYmdi5leHRlbmRlZF92YWx1ZXMubGVuZ3RoPjApe2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKHYsaCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHModixoLE0sITApfX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAh'@;
put 'PT1hLkxPQURfUkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXZpZXdib3hNYW5hZ2VyKCl7dGhpcy52aWV3Ym94ZXM9ITB9Z2V0IHRvdGFsUm93c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCt0aGlzLnJvd3ND'@;
put 'aGFuZ2VkLnJvd3NEZWxldGVkK3RoaXMucm93c0NoYW5nZWQucm93c0FkZGVkfXNldENlbGxGaWx0ZXIoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCk7aWYoIWQpcmV0dXJuO2NvbnN0IGg9ZCYmZFswXTtpZihoKXtjb25zdCBmPWhbMF0sTT1oWzFdO2lmKGY9PT1o'@;
put 'WzJdJiZNPT09aFszXSl7Y29uc3QgRz10aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhKGYsTSk7RyYmRy5maWx0ZXI9PT0hYSYmdGhpcy5ob3RJbnN0YW5jZS5zZXRDZWxsTWV0YShmLE0sImZpbHRlciIsYSl9fX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7'@;
put 'YS51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCksYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGg9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9aCxhLnVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKX0pLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNj'@;
put 'cmliZShoPT57aC5saWJkcz09PWEubGliZHMmJihhLndoZXJlU3RyaW5nPWguc3RyaW5nLGEuY2xhdXNlcz1oLm9iail9KTtjb25zdCBkPXt9O3R5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiJiYoYS5saWJkcz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0s'@;
put 'YS5maWx0ZXJfcGs9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQsImVkaXQtcmVjb3JkIj09PWEucm91dGUuc25hcHNob3QudXJsWzBdLnBhdGgmJihhLnJlY29yZEFjdGlvbj10eXBlb2YgYS5maWx0ZXJfcGs8InUiPyJFRElUIjoiQUREIiksZC5MSUJEUz1hLmxpYmRzLHR5cGVv'@;
put 'ZiBhLmZpbHRlcl9wazwidSImJihkLkZJTFRFUl9SSz1wYXJzZUludChhLmZpbHRlcl9waykpLGQuT1VUREVTVD0iV0VCIixhLmxpYmRzJiYoSm4uZWRpdG9yLmxpYnJhcnk9YS5saWJkcy5zcGxpdCgiLiIpWzBdLEpuLmVkaXRvci50YWJsZT1hLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxhLmxp'@;
put 'YmRzJiYoYS5nZXRkYXRhRXJyb3I9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2UoZCwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9nZXRkYXRhIixhLmxpYmRzKS50aGVuKGg9PnthLmluaXRTZXR1cChoKX0pLmNhdGNoKGg9PnthLmdldGRhdGFFcnJvcj0hMCxhLnRh'@;
put 'YmxlVHJ1ZT0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMWUzKSxzZXRUaW1lb3V0KCgpPT57aWYodGhpcy5ob3RUYWJsZUNvbXBvbmVudCYmdGhpcy5ob3RUYWJsZUNvbXBvbmVudC5ob3RJbnN0YW5jZSl7'@;
put 'Y29uc3QgYT10aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlLnJvb3RFbGVtZW50O2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixkPT57dGhpcy51cGxvYWRQcmV2aWV3fHx0aGlzLmhvdENsaWNrZWQoKSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVudC5x'@;
put 'dWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO2gmJmguY2xpY2soKX0sMTAwKX0pfX0sMTAwKX1uZ09uRGVzdHJveSgpe3RoaXMuYXJpYU9ic2VydmVyJiYodGhpcy5hcmlhT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuYXJpYU9ic2VydmVyPXZvaWQgMCksdGhp'@;
put 'cy5hcmlhQ2hlY2tJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD12b2lkIDApfWZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl7Y29uc3QgYT0oKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5odC13cmFwcGVy'@;
put 'LCAud3RIb2xkZXIsIFtpZF49Imh0XyJdJykuZm9yRWFjaChHPT57Ry5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKSxHLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpLEcucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IiksRy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlz'@;
put 'ZWxlY3RhYmxlIil9KTtjb25zdCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPSJ0cmVlZ3JpZCJdJyksZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0icHJlc2VudGF0aW9uIl0nKTtoLmZvckVhY2goRz0+e0cucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksRy5y'@;
put 'ZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxHLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIpLEcucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSksZi5mb3JFYWNoKEc9PntHLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVj'@;
put 'dCwgdGV4dGFyZWEsIFt0YWJpbmRleF0sIFtvbmNsaWNrXSwgW2NvbnRlbnRlZGl0YWJsZV0iKS5sZW5ndGg+MCYmRy5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLXJvd2NvdW50PSItMSJdJykuZm9yRWFjaChHPT57Ry5yZW1vdmVB'@;
put 'dHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRhYmxlIikuZm9yRWFjaChHPT57Ry5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8Ry5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0YWJsZSIpLEcucXVlcnlTZWxlY3RvckFsbCgidGgiKS5mb3JFYWNoKHVl'@;
put 'PT57dWUuZ2V0QXR0cmlidXRlKCJzY29wZSIpfHx1ZS5zZXRBdHRyaWJ1dGUoInNjb3BlIiwiY29sIil9KX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtjb250ZW50ZWRpdGFibGVdIikuZm9yRWFjaChHPT57aWYoIUcuZ2V0'@;
put 'QXR0cmlidXRlKCJhcmlhLWxhYmVsIikmJiFHLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iikpe2NvbnN0IHJlPUcudGV4dENvbnRlbnQ/LnRyaW0oKTtyZSYmRy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHJlKX19KX07YSgpLHNldFRpbWVvdXQoYSwxMDApLHNldFRpbWVvdXQo'@;
put 'YSw1MDApLHNldFRpbWVvdXQoYSwxZTMpLHNldFRpbWVvdXQoYSwyZTMpLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWx8fCh0aGlzLmFyaWFDaGVja0ludGVydmFsPXNldEludGVydmFsKGEsM2UzKSksdGhpcy5hcmlhT2JzZXJ2ZXJ8fCh0aGlzLmFyaWFPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNl'@;
put 'cnZlcihkPT57bGV0IGg9ITE7ZC5mb3JFYWNoKGY9PnsiYXR0cmlidXRlcyI9PT1mLnR5cGUmJigicm9sZSI9PT1mLmF0dHJpYnV0ZU5hbWV8fCJhcmlhLXJvd2NvdW50Ij09PWYuYXR0cmlidXRlTmFtZSkmJihoPSEwKSwiY2hpbGRMaXN0Ij09PWYudHlwZSYmZi5hZGRlZE5vZGVzLmZvckVh'@;
put 'Y2godj0+e2lmKHYubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7Y29uc3QgTT12OyhNLmhhc0F0dHJpYnV0ZSgicm9sZSIpfHxNLmhhc0F0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpKSYmKGg9ITApfX0pfSksaCYmc2V0VGltZW91dChhLDUwKX0pLHRoaXMuYXJpYU9ic2VydmVyLm9i'@;
put 'c2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsYXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJyb2xlIiwiYXJpYS1yb3djb3VudCIsImFyaWEtY29sY291bnQiLCJhcmlhLW11bHRpc2VsZWN0YWJsZSJdfSkpfWluaXRTZXR1cChhKXtpZih0aGlzLmhv'@;
put 'dEluc3RhbmNlPXRoaXMuaG90VGFibGVDb21wb25lbnQuaG90SW5zdGFuY2UsdGhpcy5nZXRkYXRhRXJyb3J8fCFhfHwhYS5kYXRhfHwhdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5kc21ldGEsdGhpcy52ZXJzaW9ucz1h'@;
put 'LmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGQ9dGhpcy5kc21ldGEuZmluZChJPT4iTk9URVMiPT09SS5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoST0+IkREX0xPTkdERVNDIj09PUkuTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKEk9PiJERF9TSE9SVERFU0MiPT09SS5OQU1FKTt0aGlzLmRz'@;
put 'Tm90ZT1kJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOmYmJmYuVkFMVUU/Zi5WQUxVRToiIjtjb25zdCB2PXRoaXMuaG90SW5zdGFuY2UsTT1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KGM9Pntjb25zdCBsPVtdO2ZvcihsZXQgYSBv'@;
put 'ZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTtyZXR1cm4gbH0pKHRoaXMuY29scykpLE0uZm9yRWFjaChJPT57dGhpcy5hcHByb3ZlcnMucHVzaChJLlBFUlNPTk5BTUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1h'@;
put 'LmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRhdGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2'@;
put 'ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFyYW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjoh'@;
put 'MH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RI'@;
put 'SVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksdGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSks'@;
put 'IiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1sw'@;
put 'XS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBWNmUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNh'@;
put 'c2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVzLGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxl'@;
put 'dCBJPTA7STx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO0krKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRhdGlvbltJXS5kYXRhXT1YbXQodGhpcy5jZWxsVmFsaWRhdGlvbltJXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bSV0pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLHYu'@;
put 'dXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoi'@;
put 'YWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oSSxHKXtyZXR1cm4gMD09PUc/NjA6ST41MDA/NTAw'@;
put 'Okl9LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxy'@;
put 'b3dIZWFkZXJzOkk9PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjI0LG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZHx8MS8wLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGF1dG9XcmFwUm93OiExLGF1dG9XcmFwQ29s'@;
put 'OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6ITEsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVu'@;
put 'ZGVyZXI6KEksRyxyZSx1ZSx5ZSxFZSk9Pntjb25zdCBCZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IEdlLHN0PSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBwdD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLGR0PXB0P3B0'@;
put 'WzBdWzFdOi0xLHF0PXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChkdCk7R2U9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbcXRdLEdlJiYoc3Q9YExBQkVMOiAke0dlPy5sYWJlbH08YnI+VFlQRTogJHtHZT8udHlwZX08YnI+TEVOR1RIOiAke0dlPy5sZW5ndGh9PGJyPkZPUk1BVDogJHtH'@;
put 'ZT8uZm9ybWF0fWApfXJldHVybiBCZS5pbm5lckhUTUw9c3QsQmV9fX19LGRhdGFTY2hlbWE6dGhpcy5ob3REYXRhU2NoZW1hLGNvbnRleHRNZW51OnRoaXMuaG90VGFibGUuc2V0dGluZ3MuY29udGV4dE1lbnUsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VzdG9tSCIsYWZ0ZXJHZXRDb2xI'@;
put 'ZWFkZXI6KEksRyk9Pntjb25zdCByZT10aGlzLmNvbHVtbkhlYWRlcltJXSx1ZT1yZSYmdGhpcy5pc0NvbFBrKHJlKSx5ZT1yZSYmdGhpcy5pc1JlYWRvbmx5Q29sKHJlKTt1ZSYmRy5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSx5ZSYmIXVlJiZHLmNsYXNzTGlzdC5h'@;
put 'ZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1JJiZHLmNsYXNzTGlzdC5hZGQoImZpcnN0Q29sdW1uSGVhZGVyU3R5bGUiKSxHLmNsYXNzTGlzdC5hZGQoSm4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooSSxHLHJlKT0+e2NvbnN0IHVlPUcmJnRo'@;
put 'aXMuaXNSZWFkb25seUNvbChHKSx5ZT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5pbmNsdWRlcyhJKSYmRz49MSYmRzw9dGhpcy5yZWFkT25seUZpZWxkcyxFZT1yZS5jbGFzc05hbWV8fCIiO2xldCBCZTtCZT1BcnJheS5pc0FycmF5KEVlKT9bLi4uRWVdOkVlLnNwbGl0KCIgIikuZmlsdGVy'@;
put 'KEdlPT5HZS5sZW5ndGg+MCksdWUmJiFCZS5pbmNsdWRlcygicmVhZG9ubHlDZWxsIikmJkJlLnB1c2goInJlYWRvbmx5Q2VsbCIpLHllJiYoQmUuaW5jbHVkZXMoImRjLWludmFsaWQtY2VsbCIpfHxCZS5wdXNoKCJkYy1pbnZhbGlkLWNlbGwiKSxyZS52YWxpZD0hMSxyZS5kdXBLZXk9ITAp'@;
put 'LEJlLmxlbmd0aD4wJiYocmUuY2xhc3NOYW1lPUJlLmpvaW4oIiAiKSl9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNv'@;
put 'bHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05ULHYuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChJLEcscmUs'@;
put 'dWUseWUsRWUpPT57ST09PXJlJiZHPT09dWUmJiExPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24oSSxHKX0pLHYuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT57dGhpcy5zZXRDZWxsRmlsdGVyKCExKX0pLHYuYWRkSG9vaygiYmVm'@;
put 'b3JlS2V5RG93biIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITApfSksdi5hZGRIb29rKCJhZnRlckNoYW5nZSIsKEksRyk9PntpZigiZWRpdCI9PT1HKXtjb25zdCByZT10aGlzLmhvdEluc3RhbmNlLHVlPUlbMF1bMF0seWU9SVswXVsxXSxFZT1yZS5wcm9wVG9Db2woeWUpLEJlPXJlLmdl'@;
put 'dENlbGxNZXRhKHVlLEVlKTtCZSYmITE9PT1CZS5maWx0ZXImJnJlLnNldENlbGxNZXRhKHVlLEVlLCJmaWx0ZXIiLCEwKSx0aGlzLmV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoeWUsRWUsdWUpfX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW5kZXIiLEk9Pnt0aGlzLmV2'@;
put 'ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSx0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9KSx2LmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9LDUwKX0pLHYuYWRkSG9vaygiYWZ0ZXJDcmVh'@;
put 'dGVSb3ciLChJLEcpPT57aWYoST50aGlzLmRhdGFTb3VyY2UubGVuZ3RoKXtjb25zdCByZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57cmUmJihyZS5zY3JvbGxUb3A9cmUuc2Nyb2xsSGVpZ2h0KX0pfX0pLHYuYWRkSG9vaygiYmVmb3JlQ3Jl'@;
put 'YXRlUm93IiwoSSxHLHJlKT0+e2lmKCF0aGlzLmFkZGluZ05ld1JvdyYmIkNvbnRleHRNZW51Lmluc2VydF9yb3dfYWJvdmUiIT09cmUmJiJDb250ZXh0TWVudS5pbnNlcnRfcm93X2JlbG93IiE9PXJlKXJldHVybiExfSksdi5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKEksRyk9Pntjb25zdCBy'@;
put 'ZT1HWzBdLnN0YXJ0Q29sO0lbMF09SVswXS5tYXAoKHVlLHllKT0+e2NvbnN0IEVlPXRoaXMuY29sdW1uSGVhZGVyW3JlK3llXSxCZT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW0VlXT8udHlwZSxHZT0oMCxwZy5pc1NwZWNpYWxNaXNzaW5nKSh1ZSk7cmV0dXJuIEJlJiYhaXNO'@;
put 'YU4odWUpJiYhR2UmJih1ZSo9MSksdWV9KX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2Vk'@;
put 'aXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24/KHRoaXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgm'@;
put 'JnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3RoPjAmJigiaG9tZSI9PT1Kbi5yb290UGFyYW18fCJlZGl0b3IiPT09Sm4ucm9vdFBhcmFtKSYmMD09PUpuLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihKbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMu'@;
put 'aGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxKbi5lZGl0b3IuZmlsdGVyLmxpYmRzPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykp'@;
put 'LHYucmVuZGVyKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTAwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShjMSksJGUobWMpLCRlKFNkKSwkZShJaCksJGUoYnUpLCRlKExvKSwkZSh5dSksJGUo'@;
put 'Vm8pLCRlKHhvKSwkZShXNmUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1lZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYoRmEoJGcsNSksRmEoVzd0LDcpLEZhKFk3dCw1KSxGYShHN3QsNSksRmEoJDd0LDUpKSwy'@;
put 'JmQpe2xldCBmO3lpKGY9YmkoKSkmJihoLmhvdFRhYmxlQ29tcG9uZW50PWYuZmlyc3QpLHlpKGY9YmkoKSkmJihoLmh0PWYuZmlyc3QpLHlpKGY9YmkoKSkmJihoLnVwbG9hZFN0YXRlckNvbXBMaXN0PWYpLHlpKGY9YmkoKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9ZikseWkoZj1iaSgp'@;
put 'KSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTc3LHZhcnM6NzUsY29uc3RzOltbImh0IiwiIl0sWyJob3RJbnN0YW5jZSIsIiJdLFsiZmlsZVBhc3N3b3JkSW5wdXQiLCIiXSxbImZpbGVVcGxvYWRJbnB1'@;
put 'dCIsIiJdLFsidXBsb2FkU3RhdGVyIiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJjb250ZW50LWFyZWEiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5n'@;
put 'ZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJj'@;
put 'bHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC1hdXRvIl0sWzEsImVuY29kaW5nLWJsb2NrIl0sWyJjbHJJbmxpbmUiLCIiLDEsIm10LTAiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwi'@;
put 'dmFsdWUiLCJVVEYtOCIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIldMQVRJTjEiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVs'@;
put 'IiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGZpbHRlckJ0biIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZWRpdEJ0biIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImRpc2FibGVkIiwiY2xp'@;
put 'Y2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGNlbC1wYXJzaW5nIGNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWzMsImN1cnJlbnRSZWNv'@;
put 'cmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1'@;
put 'cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRp'@;
put 'YyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3JkZXItMCIsImJveC1zaGFkb3ctbm9uZS1pIiwicG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQi'@;
put 'LDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIiLCJoZWFkZXJCYXIiLCJjbHItZmxleC1tZC1yb3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1j'@;
put 'b2wtMTIgY2xyLWNvbC1tZC0zIGNsci1jb2wtbGctNCBiYWNrQnRuIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLW1kLTUiLCJjbHItY29sLWxnLTQiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJlZGl0b3ItdGl0bGUg'@;
put 'dGV4dC1jZW50ZXIgbXQtMCIsNCwibmdWYXIiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLW1kLTQgY2xyLWNvbC1sZy00IGJ0bkN0cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJjbHIt'@;
put 'ZmxleC0xIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbMSwiY2FyZC10ZXh0IiwiaG90RWRpdG9yIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50Il0s'@;
put 'WzEsImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaWQiLCJob3RUYWJsZSIsMSwiZWRpdC1ob3QiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJd'@;
put 'LFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibS0wIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJk'@;
put 'dXBsaWNhdGUta2V5cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWyJjbGFzcyIsImQtYmxvY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0s'@;
put 'WzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGlj'@;
put 'ayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4i'@;
put 'LCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1'@;
put 'dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiXSxbImNsYXNzIiwibS0wIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJkaXNh'@;
put 'YmxlZCJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3Ii'@;
put 'LCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwidXBsb2FkZXIiXSxbMSwi'@;
put 'Y2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJj'@;
put 'bGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImV4Y2VsLXBhcnNpbmciLCJjbHItY29sLW1kLTEyIl0sWzMsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVk'@;
put 'aXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJ'@;
put 'bmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtMyIsImNsci1jb2wtbGctNCIsImJh'@;
put 'Y2tCdG4iXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwidGV4dCJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRu'@;
put 'LXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwidmlld2JveC1vcGVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIiwic2l6ZSIsIjIwIl0sWzEsImVkaXRvci10aXRsZSIsInRleHQtY2VudGVyIiwibXQtMCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImlu'@;
put 'Zm8tY2lyY2xlIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ciLDQsIm5nSWYiXSxbImNsclRvb2x0'@;
put 'aXBUcmlnZ2VyIiwiIl0sWzEsIm1yLTEwIiwidmlldy10YWJsZSIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJi'@;
put 'b3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC00IiwiY2xyLWNvbC1sZy00IiwiYnRuQ3RybCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuVmlldyIsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9j'@;
put 'ayIsImJ0bi1kaW1tZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJub3RlIl0sWyJ0eXBlIiwiYnV0dG9u'@;
put 'IiwiY2xhc3MiLCJidG4gaWNvbi1jb2xsYXBzZSBidG4tc20gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0w'@;
put 'IiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9u'@;
put 'IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRu'@;
put 'LW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi'@;
put 'dG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5m'@;
put 'b0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsic2hhcGUiLCJl'@;
put 'cnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0'@;
put 'LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsIm1vZGFs'@;
put 'LWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJkLWJsb2NrIHctMTAwIHRleHQtY2Vu'@;
put 'dGVyIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItb2Zmc2V0LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnktY29udGVudC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBlIiwic3VibWl0IiwidGFiaW5kZXgi'@;
put 'LCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwibS0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGlj'@;
put 'ayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLXJlZCJdLFsxLCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwidGV4dC1hcmVhLWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRl'@;
put 'eHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsInZhbHVlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hl'@;
put 'c3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJkaXYiLDYpKDEsImNsci1tb2RhbCIsNyksRnQoImZp'@;
put 'bGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5hdHRhY2hGaWxlKE0sITApKX0pLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChm'@;
put 'KSxnaShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGguc2hvd1VwbG9hZE1vZGFsPU0pLEN0KE0pfSksZGUoMiwiaDMiLDgpLE9lKDMsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSg0LCJkaXYiLDkpKDUsImRpdiIsMTApKDYsInNwYW4iKSxPZSg3LCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2Fk'@;
put 'ISIpLGhlKCkoKSxkZSg4LCJkaXYiLDExKSg5LCJkaXYiLDEyKSgxMCwiZGl2IiwxMykoMTEsImRpdiIsMTQpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiwxNSkoMTMsImNsci1yYWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxNikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3Jl'@;
put 'dHVybiB3dChmKSxnaShoLmVuY29kaW5nLE0pfHwoaC5lbmNvZGluZz1NKSxDdChNKX0pLGhlKCksZGUoMTUsImxhYmVsIiksT2UoMTYsIlVURi04IiksaGUoKSgpLGRlKDE3LCJjbHItcmFkaW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTcpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihN'@;
put 'KXtyZXR1cm4gd3QoZiksZ2koaC5lbmNvZGluZyxNKXx8KGguZW5jb2Rpbmc9TSksQ3QoTSl9KSxoZSgpLGRlKDE5LCJsYWJlbCIpLE9lKDIwLCJXTEFUSU4xIiksaGUoKSgpKCkoKSgpLGd0KDIxLEo3dCw2LDEsImRpdiIsMTgpKDIyLFE3dCwzLDEsImRpdiIsMTkpLGRlKDIzLCJkaXYiLDEz'@;
put 'KSxndCgyNCxlOXQsMiwxLCJidXR0b24iLDIwKSgyNSx0OXQsMiwwLCJidXR0b24iLDIxKSxoZSgpLGd0KDI2LG45dCwzLDAsImRpdiIsMjIpLGhlKCkoKSgpLFd0KDI3LCJkaXYiLDIzKSxoZSgpLGd0KDI4LHI5dCwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDI0KSxkZSgyOSwiZGl2IiwyNSww'@;
put 'KSxndCgzMSxpOXQsMiwwLCJkaXYiLDI2KSxkZSgzMiwiZGl2IiwyNyksRnQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vblNob3dVcGxvYWRNb2RhbCgpKX0pLGRlKDMzLCJkaXYiLDI4KSxndCgzNCxhOXQsOSwyLCJkaXYiLDI5KSxkZSgzNSwiZGl2'@;
put 'IiwzMCksZ3QoMzYsaDl0LDEwLDYsImg0IiwzMSksaGUoKSxndCgzNyxfOXQsNCwzLCJkaXYiLDMyKSgzOCx3OXQsNSwxLCJkaXYiLDMzKSxoZSgpLGRlKDM5LCJkaXYiLDM0KSxndCg0MCxNOXQsNCwyLCJkaXYiLDM1KSxkZSg0MSwiZGl2IiwzNikoNDIsImRpdiIsMzcpLFd0KDQzLCJob3Qt'@;
put 'dGFibGUiLDM4LDEpLGhlKCksZGUoNDUsImRpdiIpLGd0KDQ2LFQ5dCw1LDIsImNsci10b29sdGlwIiwzOSkoNDcsQTl0LDMsMSwicCIsNDApLGhlKCksZ3QoNDgsSTl0LDE2LDYsImRpdiIsNDEpLGRlKDQ5LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlv'@;
put 'bihNKXtyZXR1cm4gd3QoZiksZ2koaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSg1MCwiaDMiLDgpLE9lKDUxLCJOb3RpY2UiKSxoZSgpLGRlKDUyLCJkaXYiLDkpKDUzLCJwIiw0MyksT2UoNTQpLGhlKCkoKSxkZSg1NSwiZGl2Iiwy'@;
put 'MykoNTYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxPZSg1NywiIENhbmNlbCAiKSxoZSgpLGRlKDU4LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudXBs'@;
put 'b2FkUGFyc2VkRmlsZXMoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLE9lKDU5LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDYwLCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5iYWRFZGl0LE0pfHwoaC5i'@;
put 'YWRFZGl0PU0pLEN0KE0pfSksZGUoNjEsImgzIiw4KSxPZSg2MiksaGUoKSxkZSg2MywiZGl2Iiw5KSg2NCwicCIpLE9lKDY1KSxoZSgpKCksZGUoNjYsImRpdiIsMjMpKDY3LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguYmFkRWRpdD0hMSl9'@;
put 'KSxPZSg2OCwiIE9rICIpLGhlKCkoKSgpLGRlKDY5LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5wa051bGwsTSl8fChoLnBrTnVsbD1NKSxDdChNKX0pLGRlKDcwLCJoMyIsOCksT2UoNzEsIkVycm9yIiksaGUo'@;
put 'KSxkZSg3MiwiZGl2Iiw5KSg3MywicCIpLE9lKDc0LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxoZSgpKCksZGUoNzUsImRpdiIsMjMpKDc2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucGtOdWxsPSExLEN0KGguYmFkRWRpdD0hMSl9KSxPZSg3NywiIE9rICIpLGhlKCkoKSgpLGRlKDc4LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5ub1BrTnVsbCxN'@;
put 'KXx8KGgubm9Qa051bGw9TSksQ3QoTSl9KSxkZSg3OSwiaDMiLDgpLE9lKDgwLCJFcnJvciIpLGhlKCksZGUoODEsImRpdiIsOSkoODIsInAiKSxPZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSxoZSgpKCksZGUoODQsImRpdiIsMjMpKDg1'@;
put 'LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubm9Qa051bGw9ITEsQ3QoaC5iYWRFZGl0PSExKX0pLE9lKDg2LCIgT2sgIiksaGUoKSgpKCksZGUoODcsImNsci1tb2RhbCIsNDYpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3Jl'@;
put 'dHVybiB3dChmKSxnaShoLnBrRHVwcyxNKXx8KGgucGtEdXBzPU0pLEN0KE0pfSksZGUoODgsImgzIiw4KSxPZSg4OSwiRXJyb3IiKSxoZSgpLGRlKDkwLCJkaXYiLDkpKDkxLCJwIiksT2UoOTIsIiBEdXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5'@;
put 'IGNvbHVtbnMgIiksaGUoKSxkZSg5MywicCIpLE9lKDk0LCJEdXBsaWNhdGVzIGZvdW5kOiIpLGhlKCksZ3QoOTUsUjl0LDMsNCwic3BhbiIsNDcpLGhlKCksZGUoOTYsImRpdiIsMjMpKDk3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucGtE'@;
put 'dXBzPSExKX0pLE9lKDk4LCIgT2sgIiksaGUoKSgpKCksZGUoOTksImNsci1tb2RhbCIsNDIpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLnRvb0xvbmcsTSl8fChoLnRvb0xvbmc9TSksQ3QoTSl9KSxkZSgxMDAsImgzIiw4KSxPZSgxMDEs'@;
put 'IkVycm9yIiksaGUoKSxkZSgxMDIsImRpdiIsOSkoMTAzLCJwIiksT2UoMTA0LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6ICIpLGhlKCksZ3QoMTA1LEw5dCwyLDMsInAiLDQ4KSxoZSgpLGRlKDEwNiwiZGl2IiwyMykoMTA3'@;
put 'LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudG9vTG9uZz0hMSxDdChoLmNsZWFuRXhjZWVkKCkpfSksT2UoMTA4LCIgT2sgIiksaGUoKSgpKCkoKSgpKCkoKSgpLGd0KDEwOSxPOXQsMTQsMCwiZGl2Iiw0OSksZGUoMTEwLCJjbHItbW9kYWwiLDUw'@;
put 'KSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDExMSwiaDMiLDUxKSxPZSgxMTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxkZSgxMTMsInNwYW4iKSxPZSgxMTQpLGhlKCkoKSxk'@;
put 'ZSgxMTUsImRpdiIsOSksZ3QoMTE2LFA5dCwyLDAsImFwcC1xdWVyeSIsMzkpLGhlKCksZGUoMTE3LCJkaXYiLDIzKSgxMTgsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLE9lKDExOSwiIHJlc2V0IGZpbHRlciAi'@;
put 'KSxoZSgpLGRlKDEyMCwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmZpbHRlcj0hMSl9KSxPZSgxMjEsIiBDYW5jZWwgIiksaGUoKSxkZSgxMjIsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5z'@;
put 'ZW5kQ2xhdXNlKCkpfSksT2UoMTIzLCIgT2sgIiksaGUoKSgpKCksZGUoMTI0LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSgxMjUsImgzIiw4'@;
put 'KSxPZSgxMjYsIkVycm9yIiksaGUoKSxkZSgxMjcsImRpdiIsOSkoMTI4LCJwIiksT2UoMTI5KSxoZSgpKCksZGUoMTMwLCJkaXYiLDIzKSgxMzEsImJ1dHRvbiIsNTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxPZSgxMzIsIiBDYW5j'@;
put 'ZWwgIiksaGUoKSxkZSgxMzMsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxPZSgxMzQsIiBPayAiKSxoZSgpKCkoKSxkZSgxMzUsImNsci1tb2RhbCIsNTYpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KE0pe3JldHVybiB3dChmKSxnaShoLmRpc2NhcmRTb3VyY2VGaWxlLE0pfHwoaC5kaXNjYXJkU291cmNlRmlsZT1NKSxDdChNKX0pLGRlKDEzNiwiaDMiLDUxKSxPZSgxMzcsIldhcm5pbmciKSxoZSgpLGRlKDEzOCwiZGl2Iiw5KSxPZSgxMzksIiBUaGlzIGFjdGlvbiB3aWxsIGRpc2NhcmQg'@;
put 'dGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdzIGxvYWRlZCBkYXRhICIpLGRlKDE0MCwiYiIpLE9lKDE0MSksaGUoKSxPZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRlKDE0MywiZGl2IiwyMykoMTQ0LCJidXR0b24iLDUzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHd0KGYpLEN0KGguZGlzY2FyZFNvdXJjZUZpbGU9ITEpfSksT2UoMTQ1LCIgQ2FuY2VsICIpLGhlKCksZGUoMTQ2LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZGlzY2FyZFNvdXJjZUZpbGU9ITEsQ3QoaC5kaXNjYXJkUGVuZGluZ0V4Y2Vs'@;
put 'KCEwKSl9KSxPZSgxNDcsIiBPayAiKSxoZSgpKCkoKSxkZSgxNDgsImNsci1tb2RhbCIsNTYpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLmZpbGVQYXNzd29yZE1vZGFsLE0pfHwoaC5maWxlUGFzc3dvcmRNb2RhbD1NKSxDdChNKX0pLGRl'@;
put 'KDE0OSwiaDMiLDUxKSxPZSgxNTAsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDE1MSwiZGl2Iiw1OCkoMTUyLCJwIiw0MyksT2UoMTUzLCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxXdCgxNTQsImlucHV0Iiw1OSwyKSxoZSgpLGRlKDE1NiwiZGl2IiwyMyks'@;
put 'Z3QoMTU3LEY5dCwyLDAsInAiLDYwKSxkZSgxNTgsImJ1dHRvbiIsNTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApKX0pLE9lKDE1OSwiIENhbmNlbCB1cGxvYWQg'@;
put 'IiksaGUoKSxkZSgxNjAsImJ1dHRvbiIsNjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWRhKDE1NSk7cmV0dXJuIGguZmlsZVBhc3N3b3JkTW9kYWw9ITEsQ3QoaC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoTS52YWx1ZSkpfSksT2UoMTYxLCIgVW5sb2NrICIpLGhl'@;
put 'KCkoKSgpLGRlKDE2MiwiY2xyLW1vZGFsIiw1NikscGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGdpKGgubWFudWFsRmlsZUVkaXRNb2RhbCxNKXx8KGgubWFudWFsRmlsZUVkaXRNb2RhbD1NKSxDdChNKX0pLGRlKDE2MywiaDMiLDUxKSxPZSgxNjQs'@;
put 'Ildhcm5pbmciKSxoZSgpLGRlKDE2NSwiZGl2Iiw5KSxPZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIpLGRlKDE2NywiYiIpLE9lKDE2OCksaGUoKSxPZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8g'@;
put 'cHJvY2VlZD8gIiksaGUoKSxkZSgxNzAsImRpdiIsMjMpKDE3MSwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEpfSksT2UoMTcyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTczLCJidXR0b24iLDU3KSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSxDdChoLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCkpfSksT2UoMTc0LCIgT2sgIiksaGUoKSgpKCksZGUoMTc1LCJhcHAtZGF0YXNldC1pbmZvIiw2MikscGkoIm9wZW5DaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKE0pe3JldHVybiB3dChmKSxnaShoLmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDE3NiwiYXBwLXZp'@;
put 'ZXdib3hlcyIsNjMpLHBpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLnZpZXdib3hlcyxNKXx8KGgudmlld2JveGVzPU0pLEN0KE0pfSksaGUoKX1pZigyJmQpe2NvbnN0IGY9ZGEoMTU1KTtmZSgpLE1lKCJ1cGxvYWRlciIsaC51cGxvYWRlciko'@;
put 'ImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxmaSgiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksZmUoMTMpLGZpKCJuZ01vZGVsIixo'@;
put 'LmVuY29kaW5nKSxNZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSg0KSxmaSgibmdNb2RlbCIsaC5lbmNvZGluZyksTWUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSksZmUoMyksTWUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKCksTWUo'@;
put 'Im5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCksTWUoIm5nSWYiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSxNZSgibmdJZiIs'@;
put 'aC5leGNlbEZpbGVQYXJzaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5jdXJyZW50RWRpdFJlY29yZEluZGV4Pi0xKSxmZSgzKSxNZSgibmdJZiIsIWgudmFsaWRhdGlvbkRvbmUmJmguc3VibWl0KSxmZSgzKSxNZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCksVHIoImNsci1jb2wtbGctMTIiLCFo'@;
put 'LnRhYmxlVHJ1ZSksZmUoKSxNZSgibmdWYXIiLGNwKDY4LEs3dCxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxmZSgpLE1lKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSxNZSgibmdJZiIs'@;
put 'IVpvKDcxLGU4ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSxmZSgpLE1lKCJuZ0NsYXNzIixscCg3MyxYN3QsIVpvKDcyLGU4ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSksZmUoKSxNZSgibmdJZiIsIWgudGFibGVUcnVlKSxmZSgzKSxUcigiaGlkZGVuIixoLmhvdFRhYmxlLmhpZGRlbiks'@;
put 'TWUoImRhdGEiLGguaG90VGFibGUuZGF0YSkoInNldHRpbmdzIixoLmhvdFRhYmxlU2V0dGluZ3MpLGZlKDMpLE1lKCJuZ0lmIixoLnRhYmxlVHJ1ZSYmIWgucmVzdHJpY3Rpb25zLnJlbW92ZUFkZFJlY29yZEJ1dHRvbiksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuZWRp'@;
put 'dG9yX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkmJmguZGF0YVNvdXJjZSYmaC5kYXRhU291cmNlLmxlbmd0aD5oLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdCksZmUoKSxmaSgiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExp'@;
put 'bWl0Tm90aWNlKSxmZSg1KSxMcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1'@;
put 'cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksZmUoNiksZmkoImNsck1vZGFsT3BlbiIsaC5iYWRFZGl0KSxmZSgyKSxTcihoLmJhZEVkaXRUaXRsZXx8IkVycm9yIiksZmUoMyksU3IoaC5iYWRFZGl0Q2F1c2UpLGZlKDQpLGZpKCJjbHJNb2RhbE9wZW4iLGgucGtOdWxsKSxmZSg5KSxmaSgi'@;
put 'Y2xyTW9kYWxPcGVuIixoLm5vUGtOdWxsKSxmZSg5KSxmaSgiY2xyTW9kYWxPcGVuIixoLnBrRHVwcyksZmUoOCksTWUoIm5nRm9yT2YiLGguZHVwbGljYXRlUGtJbmRleGVzKSxmZSg0KSxmaSgiY2xyTW9kYWxPcGVuIixoLnRvb0xvbmcpLGZlKDYpLE1lKCJuZ0Zvck9mIixoLmV4Y2VlZENl'@;
put 'bGxzKSxmZSg0KSxNZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLExyKCIgIixoLmxpYmRzLCIgIiksZmUoMiksTWUoIm5nSWYiLGguZmls'@;
put 'dGVyKSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxmaSgiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSxmZSg1KSxTcihoLnF1ZXJ5RXJyTWVzc2FnZSksZmUoNiksZmkoImNsck1vZGFsT3BlbiIsaC5kaXNjYXJkU291cmNlRmlsZSksTWUoImNsck1vZGFs'@;
put 'U2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxTcihoLmZpbGVuYW1lKSxmZSg3KSxmaSgiY2xyTW9kYWxPcGVuIixoLmZpbGVQYXNzd29yZE1vZGFsKSxNZSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDkpLE1lKCJuZ0lmIixo'@;
put 'LmZpbGVVbmxvY2tFcnJvciksZmUoMyksTWUoImRpc2FibGVkIixmLnZhbHVlLmxlbmd0aDwxKSxmZSgyKSxmaSgiY2xyTW9kYWxPcGVuIixoLm1hbnVhbEZpbGVFZGl0TW9kYWwpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksU3IoaC5maWxl'@;
put 'bmFtZSksZmUoNyksZmkoIm9wZW4iLGguZGF0YXNldEluZm8pLE1lKCJkc21ldGEiLGguZHNtZXRhKSgidmVyc2lvbnMiLGgudmVyc2lvbnMpLGZlKCksZmkoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94ZXMpfX0sZGVwZW5kZW5jaWVzOlskNmUsdnUsUXMsYmEsR2wsQ0wsdGwsV28sbDEsT2ws'@;
put 'cnUsWXUsVjAsUDIsSDIsY28sZkcsalplLGhHLHJPLHY3LGI3LHk3LCRnLEV3LHNFLEs2ZSxYNmUscTZlLHlPLG50ZSxqN3QsVTd0LFo3dCxRNmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSDl0PVt7cGF0aDoiOmxpYk1lbSIsY29tcG9uZW50OnVOfSx7cGF0aDoi'@;
put 'OmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDp1Tn0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0iLGNvbXBvbmVudDp1Tn0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6dU59XTtsZXQgTjl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxCYy5mb3JDaGlsZChIOXQpLEJjXX0pfX1yZXR1cm4gY30pKCksQUE9KCgpPT57Y2xhc3MgY3tz'@;
put 'dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLEIwLExhLGtjLGNmXX0pfX1yZXR1cm4gY30pKCksaXRlPSgoKT0+e2Ns'@;
put 'YXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxCMCxMYSxrYyxXOSxUQSxjZl19KX19cmV0dXJuIGN9KSgp'@;
put 'O0VBKCk7bGV0IHQ4ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGEsQjAsTGEsa2MsaXRl'@;
put 'LFo5LEQxZSxINmUsQUEsY2ZdfSl9fXJldHVybiBjfSkoKTtFQSgpO2xldCBWOXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAy'@;
put 'NzVpbmo9QXIoe2ltcG9ydHM6W3Q4ZSxMYSxrYyxOOXQsQjAsWjksVzksY2YseHcsVEEsQUEsRDFlLGl0ZV19KX19cmV0dXJuIGN9KSgpLEI5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZk'@;
put 'JiZXdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbbmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgajl0PVsic2lkZWJhck5hdiJdLHo5dD1bIioiXSxVOXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi91c2VycyJdLFo5dD0oKT0+WyIvdmlldy91c2VybmF2'@;
put 'L2dyb3VwcyJdLFc5dD0oKT0+WyIvdmlldy91c2VybmF2L3JvbGVzIl07ZnVuY3Rpb24gWTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYSIsMTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykubmF2aWdhdGVUb1ZpZXdlcigpKX0pLE9lKDEs'@;
put 'IkRhdGEiKSxoZSgpfX1mdW5jdGlvbiBHOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwxOSksT2UoMSwiQVBJIEV4cGxvcmVyIiksaGUoKSl9ZnVuY3Rpb24gJDl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjApLE9lKDEsIkxpbmVhZ2UiKSxoZSgpKX1mdW5jdGlvbiBLOXQoYyxsKXsxJmMmJihkZSgw'@;
put 'LCJhIiwyMSksT2UoMSwiTWV0YWRhdGEiKSxoZSgpKX1mdW5jdGlvbiBYOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMiksT2UoMSwiIFVzZXJzIiksaGUoKSl9ZnVuY3Rpb24gcTl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjMpLE9lKDEsIlN1Ym1pdHRlZCIpLGhlKCkpfWZ1bmN0aW9uIEo5dChj'@;
put 'LGwpezEmYyYmKGRlKDAsImEiLDI0KSxPZSgxLCJUbyBBcHByb3ZlIiksaGUoKSl9ZnVuY3Rpb24gUTl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxndCgxLFk5dCwyLDAsImEiLDExKSgyLEc5dCwyLDAsImEiLDEyKSgzLCQ5dCwyLDAsImEiLDEzKSg0LEs5dCwy'@;
put 'LDAsImEiLDE0KSg1LFg5dCwyLDAsImEiLDE1KSg2LHE5dCwyLDAsImEiLDE2KSg3LEo5dCwyLDAsImEiLDE3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3Iikm'@;
put 'JiJTQVNWSVlBIj09PWEuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLE1lKCJuZ0lmIixh'@;
put 'LmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKX19ZnVuY3Rpb24gZXZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgy'@;
put 'LCJidXR0b24iLDgpLE9lKDMpLFd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsUTl0LDgsNywiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLExyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1mdW5jdGlvbiB0dnQoYyxsKXsxJmMmJld0'@;
put 'KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIG52dChjLGwpezEmYyYmV3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gcnZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsMjYpKDIsInAiLDI3KSxXdCgzLCJjbHItaWNvbiIsMzIpLE9lKDQsIiBS'@;
put 'b2xlcyAiKSxoZSgpKCksZ3QoNSxudnQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgicm91dGVyTGluayIsWm8oMixXOXQpKSxmZSg0KSxNZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvcm9sZXMi'@;
put 'KSl9fWZ1bmN0aW9uIGl2dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIiwyNSkoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjYpKDMsInAiLDI3KSxXdCg0LCJjbHItaWNvbiIsMjgpLE9lKDUsIiBVc2VycyIpLGhlKCkoKSxXdCg2LCJjbHItdGFiLWNvbnRlbnQiKSxoZSgpLGRlKDcs'@;
put 'ImNsci10YWIiKSg4LCJidXR0b24iLDI2KSg5LCJwIiwyNyksV3QoMTAsImNsci1pY29uIiwyOSksT2UoMTEsIiBHcm91cHMiKSxoZSgpKCksZ3QoMTIsdHZ0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUoKSxndCgxMyxydnQsNiwzLCJjbHItdGFiIiwzMSksaGUoKSksMiZjKXtjb25z'@;
put 'dCBhPUxlKCk7ZmUoMiksTWUoInJvdXRlckxpbmsiLFpvKDQsVTl0KSksZmUoNiksTWUoInJvdXRlckxpbmsiLFpvKDUsWjl0KSksZmUoNCksTWUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L2dyb3VwcyIpKSxmZSgpLE1lKCJuZ0lmIiwiU0FTOSI9PT1hLnNl'@;
put 'cnZlclR5cGUpfX1mdW5jdGlvbiBhdnQoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpKDEsImEiLDMzKSxPZSgyLCJUYWJsZXMiKSxoZSgpLGRlKDMsImEiLDM0KSxPZSg0LCJFeGNlbCBNYXBzIiksaGUoKSxkZSg1LCJhIiwzNSksT2UoNiwiTXVsdGkgTG9hZCIpLGhlKCko'@;
put 'KSl9ZnVuY3Rpb24gc3Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLE9lKDMpLFd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsYXZ0LDcsMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1M'@;
put 'ZSgpO2ZlKDMpLExyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1sZXQgYTQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcm91dGVyPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLl9zYXNTZXJ2aWNlPWgsdGhpcy5zY3JvbGxlZFRvQm90dG9tPW5ldyBLcix0aGlz'@;
put 'LnNpZGViYXJPcGVuPSEwLHRoaXMuc2lkZWJhcldpZHRoPW51bGwsdGhpcy5zaWRlYmFyTWF4V2lkdGg9bnVsbCx0aGlzLnJlc2l6aW5nPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHloLlNBU2pzQ29uZmlnLHRoaXMuc2FzanNDb25maWc9dGhpcy5fc2FzU2VydmljZS5nZXRTYXNqc0NvbmZp'@;
put 'ZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLl9zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2lkZWJhclRvZ2dsZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2lkZWJhck9wZW49YT9hLm9wZW46IXRoaXMuc2lkZWJhck9wZW4sdGhpcy5ldmVu'@;
put 'dFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KX1vblRyZWVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLnNjcm9sbGVkVG9Cb3R0b20uZW1pdCgpfWlzTWFpblJvdXRlKGEpe3JldHVybiB0'@;
put 'aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfWdldFN1YlBhZ2UoKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgiLyIpWzJdfW5hdmlnYXRlVG9WaWV3ZXIoKXtKbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0iIix0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0'@;
put 'YSIpfXJlc2l6ZVN0YXJ0KCl7dGhpcy5yZXNpemluZz0hMCxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9InVzZXItc2VsZWN0OiBub25lIn1yZXNpemVFbmQoKXt0aGlzLnJlc2l6aW5nPSExLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO'@;
put 'YW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0iIn1vbk1vdXNlTW92ZShhKXtpZih0aGlzLnJlc2l6aW5nKXt0aGlzLnNpZGViYXJXaWR0aD1hLmNsaWVudFg7bGV0IGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibmF2LXRyZWUiKVswXTt0aGlzLnNpZGViYXJXaWR0aCYm'@;
put 'dGhpcy5pc092ZXJmbG93bihkKSYmKHRoaXMuc2lkZWJhck1heFdpZHRoPXRoaXMuc2lkZWJhcldpZHRoPj0zNzU/dGhpcy5zaWRlYmFyV2lkdGgrMTA6dGhpcy5zaWRlYmFyTWF4V2lkdGgpfX1vbk1vdXNlVXAoYSl7dGhpcy5yZXNpemluZyYmdGhpcy5yZXNpemVFbmQoKX1pc092ZXJmbG93'@;
put 'bihhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aD5hLmNsaWVudFdpZHRofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKExvKSwkZShtYyksJGUoVm8pKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1z'@;
put 'aWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmRmEoajl0LDUpLDImZCl7bGV0IGY7eWkoZj1iaSgpKSYmKGguc2lkZWJhck5hdj1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoIm1vdXNlbW92ZSIsZnVuY3Rpb24odil7cmV0dXJu'@;
put 'IGgub25Nb3VzZU1vdmUodil9LDAsSzMpKCJtb3VzZXVwIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk1vdXNlVXAodil9LCExLEszKX0sb3V0cHV0czp7c2Nyb2xsZWRUb0JvdHRvbToic2Nyb2xsZWRUb0JvdHRvbSJ9LG5nQ29udGVudFNlbGVjdG9yczp6OXQsZGVjbHM6OSx2YXJzOjEzLGNv'@;
put 'bnN0czpbWyJzaWRlYmFyTmF2IiwiIl0sWyJpZCIsInNpZGViYXJOYXYiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUi'@;
put 'LDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tcHJpbWFyeSJd'@;
put 'LFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFw'@;
put 'aS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwi'@;
put 'Iiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJj'@;
put 'bHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3Zl'@;
put 'Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3Jl'@;
put 'ciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFk'@;
put 'YXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9h'@;
put 'cHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5r'@;
put 'IiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZMaW5r'@;
put 'IiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9leGNlbC1tYXBzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZM'@;
put 'aW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL211bHRpLWxvYWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7c2EoKSxkZSgwLCJjbHItdmVydGljYWwtbmF2IiwxLDApLGd0KDIsZXZ0LDYsMSwiZGl2'@;
put 'IiwyKSgzLGl2dCwxNCw2LCJjbHItdGFicyIsMykoNCxzdnQsNiwxLCJkaXYiLDIpLFd0KDUsImRpdiIsNCksZGUoNiwiZGl2Iiw1KSxGdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vblRyZWVTY3JvbGwoTSkpfSksV3IoNyksaGUoKSxkZSg4LCJzcGFuIiw2KSxG'@;
put 'dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2l6ZVN0YXJ0KCkpfSksaGUoKSgpfTImZCYmKE4xKCJ3aWR0aCIsaC5zaWRlYmFyV2lkdGgsInB4IikoIm1heC13aWR0aCIsaC5zaWRlYmFyTWF4V2lkdGgsInB4IiksVHIoImNsb3NlZCIsIWguc2lkZWJhck9w'@;
put 'ZW4pKCJyZXNpemluZyIsaC5yZXNpemluZyksZmUoMiksTWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxNZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLGZlKCksTWUoIm5nSWYiLGguaXNNYWluUm91dGUoImhvbWUiKSksZmUoNCksVHIoInJlc2l6'@;
put 'aW5nIixoLnJlc2l6aW5nKSl9LGRlcGVuZGVuY2llczpbYmEsT2wsTGIsUDIsdm0sYm0seDcseW0sbW0sUzcsckcsYUcsc2csZzcsbTcsbDEsdWJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gb3Z0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0'@;
put 'aW9uIGx2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24g'@;
put 'Y3Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTAsMCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZ2koZi5saWJyYXJpZXNTZWFyY2gsaCl8fChm'@;
put 'LmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsb3Z0LDEsMCwiY2xyLWljb24iLDExKSg1LGx2dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDImYyl7'@;
put 'Y29uc3QgYT1kYSgzKSxkPUxlKCk7ZmUoMiksZmkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHV2dChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24i'@;
put 'LDEzKX1mdW5jdGlvbiBkdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9ZGEoMyksZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3Ry'@;
put 'aW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIGh2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5wdXQiLDE5LDEpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbiho'@;
put 'KXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50cmVlT25GaWx0'@;
put 'ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LHV2dCwxLDAsImNsci1pY29uIiwxMSkoNSxkdnQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZGEoMyksZD1MZSgyKS4kaW1wbGljaXQ7ZmUoMiksZmkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxN'@;
put 'ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGZ2dChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBwdnQoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gZ3Z0KGMsbCl7'@;
put 'MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjkpKDEsInNwYW4iKSxPZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0aW9uIG12dChjLGwpezEmYyYmKGFpKDApLGd0KDEsZ3Z0LDMsMCwi'@;
put 'Y2xyLXRvb2x0aXAtY29udGVudCIsMjgpLHNpKCkpfWZ1bmN0aW9uIHZ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1MZSgpLiRpbXBsaWNpdCx2'@;
put 'PUxlKDIpLiRpbXBsaWNpdCxNPUxlKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxhaSgyLDIyKSxndCgzLGZ2dCwxLDAsImNsci1pY29uIiwyMykoNCxwdnQsMSwwLCJjbHItaWNvbiIsMjQpLHNpKCksT2UoNSksaGUoKSxndCg2LG12dCwyLDAsIm5nLWNvbnRhaW5l'@;
put 'ciIsMjUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1MZSgpLiRpbXBsaWNpdCxoPUxlKDIpLiRpbXBsaWNpdCxmPUxlKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxNZSgibmdTd2l0'@;
put 'Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLExyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoKSxNZSgibmdJZiIsYSl9fWZ1bmN0aW9uIHl2dChjLGwpe2lmKDEmYyYmKGRlKDAs'@;
put 'ImNsci10cmVlLW5vZGUiKSxndCgxLHZ2dCw3LDksImNsci10b29sdGlwIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1MZSgzKTtmZSgpLE1lKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gYnZ0KGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIHYudHJlZU5vZGVDbGlja2VkKGgsZiksQ3Qodi5saWI9Zi5MSUJSQVJZUkVGKX0pLHBp'@;
put 'KCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4k'@;
put 'aW1wbGljaXQsZj1MZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksV3QoMiwiY2xyLWljb24iLDE4KSxPZSgzKSxoZSgpLGd0KDQsaHZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoNSx5dnQsMiwxLCJjbHItdHJlZS1u'@;
put 'b2RlIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxmaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksTHIoIiAiLGEuTElC'@;
put 'UkFSWVJFRiwiICIpLGZlKCksTWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLE1lKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIF92dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsYnZ0LDYsNywiY2xyLXRyZWUtbm9kZSIsMTUpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtm'@;
put 'ZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiB3dnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksT2UoMywiIExvYWRpbmcuLi4gIiksaGUoKSgpKCkpfWZ1bmN0aW9uIEN2dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxPZSgxLCIg'@;
put 'UGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLGhlKCkpfWZ1bmN0aW9uIFN2dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxPZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQgIiksaGUoKSl9ZnVuY3Rpb24gTXZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMyksV3QoMSwiaW1n'@;
put 'IiwzNCksZ3QoMixDdnQsMiwwLCJwIiwzNSkoMyxTdnQsMiwwLCJwIiwzNSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMiksTWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCksTWUoIm5nSWYiLChu'@;
put 'dWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgeHZ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmhl'@;
put 'bHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9bnVsbCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRpbmc9'@;
put 'ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWUlEIT09ZC5MSUJSQVJZSUQmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xs'@;
put 'YXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQpe2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRlZCYmIXRoaXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQpLHRo'@;
put 'aXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5nVGFibGVzPSEwO2xldCBmLHY9W107aWYodGhpcy5saWJzQW5kVGFibGVzJiYoZj10aGlzLmxpYnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBsZWFz'@;
put 'ZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7bGV0IE09Zi5maWx0ZXIoZnVuY3Rpb24oSSl7cmV0dXJuLTE9PT12LmluZGV4T2YoSSkmJih2LnB1c2goSSksITApfSk7dGhpcy50YWJsZXM9TSxKbi5lZGl0b3IubGlicmFyaWVzPXRoaXMubGlicmFyaWVzfUpuLmVkaXRvci5saWJyYXJ5PWEsZHx8'@;
put 'dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aC5saWJUYWI9aC5saWIrIi4iK2gudGFibGUsaC5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCks'@;
put 'Sm4uZWRpdG9yLnRhYmxlPWEsZHx8aC5jbGVhckdsb2JhbHNGaWx0ZXIoKX0pKCl9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7Sm4uZWRpdG9yLmZpbHRlci5saWJkcz0iIixKbi5lZGl0b3IuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEpuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixKbi5lZGl0'@;
put 'b3IuZmlsdGVyLmNsYXVzZXM9W10sSm4uZWRpdG9yLmZpbHRlci52YWxzPVtdLEpuLmVkaXRvci5maWx0ZXIuY29scz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfXRyZWVPbkZpbHRlcihh'@;
put 'LGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudHJlZU5vZGVMaWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllSRUYiKSxKbi5saW5lYWdlLmxp'@;
put 'YnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLnRhYmxlPWEsdGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMuc2VsZWN0VGFibGUoYSksdGhpcy5lZGl0VGFibGUoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9l'@;
put 'ZGl0b3IvIit0aGlzLmxpYisiLiIrdGhpcy50YWJsZSl9Z2V0TGlicmFyeVRhYmxlU3RhdGUoKXtpZihudWxsIT09Sm4uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzJiYodGhpcy50cmVlTm9kZUxpYnJhcmllcz1Kbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMpLCIiIT09Sm4uZWRpdG9yLmxp'@;
put 'YnJhcnkpe3RoaXMubGliPUpuLmVkaXRvci5saWJyYXJ5O2xldCBhPW51bGw7dGhpcy50cmVlTm9kZUxpYnJhcmllcyYmKGE9dGhpcy50cmVlTm9kZUxpYnJhcmllcy5maW5kKGQ9PmQuTElCUkFSWVJFRj09PXRoaXMubGliKSksdGhpcy5zZWxlY3RMaWJyYXJ5KEpuLmVkaXRvci5saWJyYXJ5'@;
put 'LCEwLGEpfX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Kbi5lZGl0b3IubGlic0FuZFRhYmxlcyx0aGlzLmxpYnJhcmllcz1Kbi5lZGl0b3IubGlicmFyaWVzLHRoaXMuZ2V0TGlicmFyeVRhYmxlU3RhdGUoKSx0aGlzLmxvYWRpbmc9ITF9bmdBZnRlckNvbnRlbnRJbml0'@;
put 'KCl7Sm4uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xvYmFscygpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5nZXRGcm9tR2xvYmFscygpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu'@;
put 'ZXcoZHx8YykoJGUoTG8pLCRlKHl1KSwkZShjMSksJGUoYnUpLCRlKG1jKSwkZShWbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaG9tZS1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjgsdmFyczo0'@;
put 'LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5l'@;
put 'ci13cmFwcGVyLWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwiYXBwU3RlYWxGb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiTGli'@;
put 'cmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0s'@;
put 'WyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRp'@;
put 'bmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdN'@;
put 'b2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUi'@;
put 'LDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIs'@;
put 'ImxnIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIvc2VydmljZXMvd2Vi'@;
put 'L2ltYWdlcy9zZWxlY3QtdGFibGUucG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkgbXQtMTAiLCJjZHMtdGV4dCIsInNlY3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlv'@;
put 'biIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImNsci10cmVlIiksZ3QoMixjdnQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLF92dCwyLDEsIm5nLWNvbnRhaW5lciIsMyks'@;
put 'aGUoKSgpLGRlKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxndCg2LHd2dCw0LDAsImRpdiIsNikoNyxNdnQsNCwyLCJkaXYiLDcpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLChudWxsPT1oLnRyZWVOb2RlTGlicmFyaWVzP251bGw6aC50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjAp'@;
put 'LGZlKCksTWUoIm5nRm9yT2YiLGgudHJlZU5vZGVMaWJyYXJpZXMpLGZlKDMpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltHbCx0bCxXbyxBaCxQZCxoZyxPbCxWMCxQMixZMSx2NyxiNyx5NyxhNCxRcyxiYSx4MixkcCxF'@;
put 'dyxpNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBFdnQ9Yz0+e2Zvcihjb25zdCBsIGluIGMpaWYoIl9fcm93TnVtX18iIT09bClyZXR1cm4hMTtyZXR1cm4hMH0sYXRlPWM9Pntjb25zdCBhPWMubWF0Y2goL1JcWyhcZCspXF1DXFsoXGQrKVxdLyk7cmV0dXJuIGE/'@;
put 'e3JvdzpwYXJzZUludChhWzFdLDEwKSxjb2x1bW46cGFyc2VJbnQoYVsyXSwxMCl9Om51bGx9LG44ZT0oYyxsKT0+e2lmKGMuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihjPWMucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGMuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGE9YXRl'@;
put 'KGMpO2lmKGEpe2NvbnN0e3JvdzpkLGNvbHVtbjpofT1hO2M9VHUudXRpbHMuZW5jb2RlX2NlbGwoe3I6ZC0xLGM6aC0xfSl9fWlmKGMuc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBhPSIiO2NvbnN0IGQ9Yy5tYXRjaCgvQ1xbXGQrXF06KC4rKS8pO2QmJihhPWRbMV0pO2NvbnN0IGY9Yy5z'@;
put 'cGxpdCgiICIpWzFdO2xldCB2PSIiLE09LTEsST0iIjtpZihpc05hTihOdW1iZXIoZikpP3Y9ZjpNPXBhcnNlSW50KGYpLC0xIT09TSl7Y29uc3QgdWU9bFtNLTFdO2Zvcihjb25zdCB5ZSBpbiB1ZSlpZigiX19yb3dOdW1fXyIhPT15ZSYmdWVbeWVdPT09YSl7ST15ZStNO2JyZWFrfX1lbHNl'@;
put 'IGZvcihsZXQgdWU9MDt1ZTxsLmxlbmd0aDt1ZSsrKWlmKGxbdWVdW3ZdPT09YSl7ST12Kyh1ZSsxKTticmVha31jb25zdCBHPVR1LnV0aWxzLmRlY29kZV9jZWxsKEkpLHJlPWF0ZShjKTtpZihyZSl7Y29uc3R7cm93OnVlLGNvbHVtbjp5ZX09cmU7Yz1UdS51dGlscy5lbmNvZGVfY2VsbCh7'@;
put 'cjpHLnIrdWUsYzpHLmMreWV9KX19cmV0dXJuIGN9LEF2dD1bImZpbGVVcGxvYWRJbnB1dCJdO2Z1bmN0aW9uIGt2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLFd0KDEsImNsci1zcGlubmVyIiwyOSksaGUoKSl9ZnVuY3Rpb24gRHZ0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMzAp'@;
put 'fWZ1bmN0aW9uIEl2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwzMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gaC5zZWFyY2hTdHJpbmc9IiIsQ3QoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0'@;
put 'aW9uIFJ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2FpKDApLGRlKDEsImNsci10cmVlLW5vZGUiKSgyLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkueGxtYXBPbkNsaWNrKGgpKX0pLFd0KDMsImNs'@;
put 'ci1pY29uIiwzMyksT2UoNCksaGUoKSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTtmZSgyKSxUcigiYWN0aXZlIixkLmlzQWN0aXZlWExNYXAoYS5pZCkpLGZlKDIpLExyKCIgIixhLmlkLCIgIil9fWZ1bmN0aW9uIEx2dChjLGwpezEmYyYmKGRlKDAsInAiLDM3'@;
put 'KSxPZSgxLCIgUGxlYXNlIHNlbGVjdCBhIG1hcCAiKSxoZSgpKX1mdW5jdGlvbiBPdnQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNyksT2UoMSwiIE5vIGV4Y2VsIG1hcCBpcyBmb3VuZCAiKSxoZSgpKX1mdW5jdGlvbiBQdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSxXdCgxLCJpbWci'@;
put 'LDM1KSxndCgyLEx2dCwyLDAsInAiLDM2KSgzLE92dCwyLDAsInAiLDM2KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSxNZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aDwxKX19ZnVuY3Rpb24gRnZ0KGMsbCl7aWYoMSZjJiYo'@;
put 'ZGUoMCwiZGl2IiwzOCkoMSwic3BhbiIsMzkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2IikoNCwiaDQiKSxPZSg1KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoNSksU3IoYS5pc0xvYWRpbmdEZXNjKX19ZnVuY3Rpb24gSHZ0KGMsbCl7MSZjJiZXdCgwLCJj'@;
put 'bHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBOdnQoYyxsKXsxJmMmJld0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIFZ2dChjLGwpezEmYyYmTGwoMCl9ZnVuY3Rpb24gQnZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw0MCksRnQoImZpbGVEcmFnZ2VkT3Zl'@;
put 'ciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLGRlKDEsImNsci10YWJzIikoMiwiY2xyLXRhYiIpKDMsImJ1dHRvbiIsNDEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRU'@;
put 'YWI9aC5UYWJzRW51bS5SdWxlcyl9KSxPZSg0LCJSdWxlcyIpLGhlKCksZ3QoNSxIdnQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDQyKSxoZSgpLGRlKDYsImNsci10YWIiKSg3LCJidXR0b24iLDQxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVybiBDdCho'@;
put 'LnNlbGVjdGVkVGFiPWguVGFic0VudW0uRGF0YSl9KSxPZSg4LCJEYXRhIiksaGUoKSxndCg5LE52dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCkoKSxndCgxMCxWdnQsMSwwLCJuZy1jb250YWluZXIiLDQzKSxkZSgxMSwiZGl2Iiw0NCkoMTIsImgzIiw0NSksT2UoMTMpLGhlKCks'@;
put 'ZGUoMTQsImkiLDQ1KSxPZSgxNSksaGUoKSxkZSgxNiwicCIsNDUpLE9lKDE3LCIgUnVsZXMgU291cmNlOiAiKSxkZSgxOCwiYSIsNDYpLE9lKDE5KSxoZSgpKCksZGUoMjAsInAiLDQ1KSxPZSgyMSwiIFRhcmdldCBkYXRhc2V0OiAiKSxkZSgyMiwiYSIsNDYpLE9lKDIzKSxoZSgpKCkoKSxk'@;
put 'ZSgyNCwiZGl2Iiw0NyksV3QoMjUsImhvdC10YWJsZSIsNDgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKSxkPWRhKDQxKTtmZSg1KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzKSxmZSg0KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRU'@;
put 'YWI9PT1hLlRhYnNFbnVtLkRhdGEpLGZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKDMpLExyKCIgIixhLnNlbGVjdGVkWExNYXAuaWQsIiAiKSxmZSgyKSxTcihhLnNlbGVjdGVkWExNYXAuZGVzY3JpcHRpb24pLGZlKDMpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Eu'@;
put 'cnVsZXNTb3VyY2UpLGZlKCksTHIoIiAiLGEucnVsZXNTb3VyY2UsIiAiKSxmZSgzKSxNZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMpLGZlKCksTHIoIiAiLGEuc2VsZWN0ZWRYTE1hcC50YXJnZXREUywiICIpLGZlKDIpLE1lKCJkYXRhIixh'@;
put 'LnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXM6YS54bERhdGEpKCJzZXR0aW5ncyIsYS5ob3RUYWJsZVNldHRpbmdzKX19ZnVuY3Rpb24ganZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLFd0KDIsImNsci1pY29uIiw1MyksZGUoMywic3BhbiIpLE9lKDQsIlVwbG9hZCIpLGhlKCkoKSgpfX1mdW5jdGlvbiB6dnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYi'@;
put 'LDUxKSgxLCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnN1Ym1pdEV4Y2VsKCkpfSksV3QoMiwiY2xyLWljb24iLDUzKSxkZSgzLCJzcGFuIiksT2UoNCwiU3VibWl0IiksaGUoKSgpKCl9fWZ1bmN0aW9uIFV2dChjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZGlzY2FyZEV4dHJhY3RlZERhdGEoKSl9KSxXdCgyLCJjbHItaWNvbiIsNTUpLGRlKDMsInNwYW4iKSxPZSg0LCJEaXNjYXJkIiksaGUo'@;
put 'KSgpKCl9fWZ1bmN0aW9uIFp2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDkpLGd0KDEsanZ0LDUsMCwiZGl2Iiw1MCkoMix6dnQsNSwwLCJkaXYiLDUwKSgzLFV2dCw1LDAsImRpdiIsNTApLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLGEuc3RhdHVzPT09YS5T'@;
put 'dGF0dXNFbnVtLlJlYWR5VG9VcGxvYWQpLGZlKCksTWUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQpLGZlKCksTWUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQpfX12YXIgdWY9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5O'@;
put 'b01hcFNlbGVjdGVkPTBdPSJOb01hcFNlbGVjdGVkIixjW2MuRmV0Y2hpbmdSdWxlcz0xXT0iRmV0Y2hpbmdSdWxlcyIsY1tjLlJlYWR5VG9VcGxvYWQ9Ml09IlJlYWR5VG9VcGxvYWQiLGNbYy5FeHRyYWN0aW5nRGF0YT0zXT0iRXh0cmFjdGluZ0RhdGEiLGNbYy5SZWFkeVRvU3VibWl0PTRd'@;
put 'PSJSZWFkeVRvU3VibWl0IixjW2MuU3VibWl0dGluZ0V4dHJhY3RlZERhdGE9NV09IlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhIixjW2MuU3VibWl0dGluZz02XT0iU3VibWl0dGluZyIsY30odWZ8fHt9KSxUdz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJ1bGVzPTBdPSJSdWxlcyIsY1tjLkRh'@;
put 'dGE9MV09IkRhdGEiLGN9KFR3fHx7fSk7bGV0IHI4ZT0oKCk9PntjbGFzcyBje2dldCBob3RUYWJsZVNldHRpbmdzKCl7cmV0dXJue211bHRpQ29sdW1uU29ydGluZzohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxjb2xIZWFkZXJzOnRoaXMuc2VsZWN0ZWRUYWI9PT10aGlzLlRh'@;
put 'YnNFbnVtLlJ1bGVzP3RoaXMueGxtYXBSdWxlc0hlYWRlcnM6dGhpcy54bFVwbG9hZEhlYWRlcixjb2x1bW5zOnRoaXMuc2VsZWN0ZWRUYWI9PT10aGlzLlRhYnNFbnVtLlJ1bGVzP3RoaXMueGxtYXBSdWxlc0NvbHVtbnM6dGhpcy54bFVwbG9hZENvbHVtbnMsZmlsdGVyczohMCxoZWlnaHQ6'@;
put 'IjEwMCUiLHN0cmV0Y2hIOiJhbGwiLGFmdGVyR2V0Q29sSGVhZGVyOnRoaXMuYWZ0ZXJHZXRDb2xIZWFkZXIsbW9kaWZ5Q29sV2lkdGg6dGhpcy5tYXhXaWR0aENoZWNrZXIsY2VsbHM6dGhpcy5nZXRDZWxsQ29uZmlndXJhdGlvbixtYXhSb3dzOnRoaXMuaG90VGFibGVNYXhSb3dzLG1hbnVh'@;
put 'bENvbHVtblJlc2l6ZTohMCxyb3dIZWFkZXJzOnRoaXMucm93SGVhZGVycyxyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjIwLGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXksY2xhc3NOYW1lOiJodERhcmsifX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXt0aGlzLmV2'@;
put 'ZW50U2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1N0b3JlU2VydmljZT1NLHRoaXMuc2FzU2VydmljZT1JLHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMuZmlsZVVw'@;
put 'bG9hZElucHV0Q29tcExpc3Q9bmV3IGxoLHRoaXMuU3RhdHVzRW51bT11Zix0aGlzLlRhYnNFbnVtPVR3LHRoaXMuc2VsZWN0ZWRUYWI9VHcuUnVsZXMsdGhpcy5ydWxlc1NvdXJjZT1Kbi5kY0xpYisiLk1QRV9YTE1BUF9SVUxFUyIsdGhpcy54bG1hcHM9W10sdGhpcy5zZWxlY3RlZFhMTWFw'@;
put 'PXZvaWQgMCx0aGlzLnNlYXJjaFN0cmluZz0iIix0aGlzLnhsbWFwc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXVmLk5vTWFwU2VsZWN0ZWQsdGhpcy54bG1hcFJ1bGVzSGVhZGVycz1bIlhMTUFQX1NIRUVUIiwiWExNQVBf'@;
put 'UkFOR0VfSUQiLCJYTE1BUF9TVEFSVCIsIlhMTUFQX0ZJTklTSCJdLHRoaXMueGxtYXBSdWxlc0NvbHVtbnM9W3tkYXRhOiJYTE1BUF9TSEVFVCJ9LHtkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJYTE1BUF9TVEFSVCJ9LHtkYXRhOiJYTE1BUF9GSU5JU0gifV0sdGhpcy54bG1hcFJ1'@;
put 'bGVzPVtdLHRoaXMueGxVcGxvYWRIZWFkZXI9WyJYTE1BUF9SQU5HRV9JRCIsIlJPV19OTyIsIkNPTF9OTyIsIlZBTFVFX1RYVCJdLHRoaXMueGxVcGxvYWRDb2x1bW5zPVt7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiUk9XX05PIn0se2RhdGE6IkNPTF9OTyJ9LHtkYXRhOiJWQUxV'@;
put 'RV9UWFQifV0sdGhpcy54bERhdGE9W10sdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLnVwbG9hZGVyPW5ldyBZZWUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5s'@;
put 'aWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMH1hZnRlckdldENvbEhlYWRlcihhLGQpe2QuY2xhc3NMaXN0LmFk'@;
put 'ZChKbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfXhsbWFwT25DbGljayhhKXthLmlkIT09dGhpcy5zZWxlY3RlZFhMTWFwPy5pZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1hLHRoaXMueGxEYXRhPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0'@;
put 'aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnNlbGVjdGVkVGFiPVR3LlJ1bGVzLHRoaXMudmlld1hMTWFwUnVsZXMoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5'@;
put 'VXJsKCIvaG9tZS9leGNlbC1tYXBzLyIrYS5pZCkpfXhsbWFwTGlzdE9uRmlsdGVyKCl7dGhpcy54bG1hcHM9dGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoPjA/Sm4ueGxtYXBzLmZpbHRlcihkPT5kLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNh'@;
put 'c2UoKSkpOkpuLnhsbWFwc31pc0FjdGl2ZVhMTWFwKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkWExNYXA/LmlkPT09YX1tYXhXaWR0aENoZWNrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Q2VsbENvbmZpZ3VyYXRpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fXJvd0hlYWRlcnMoKXty'@;
put 'ZXR1cm4iICJ9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMH1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2NvbnN0IGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKCFm'@;
put 'KXJldHVybjtjb25zdCB2PWYubmFtZTtpZih0aGlzLmZpbGVuYW1lPXYsInhscyI9PT12LnNsaWNlKHYubGFzdEluZGV4T2YoIi4iKSsxLHYubGFzdEluZGV4T2YoIi4iKSs0KS50b0xvd2VyQ2FzZSgpKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlz'@;
put 'TG9hZGluZ0Rlc2M9IkV4dHJhY3RpbmcgRGF0YSIsdGhpcy5zdGF0dXM9dWYuRXh0cmFjdGluZ0RhdGE7Y29uc3QgST1uZXcgRmlsZVJlYWRlcjtJLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBHPVEoZnVuY3Rpb24qKHJlKXtjb25zdCB1ZT0oYz0+e2NvbnN0IGw9bmV3IFVpbnQ4QXJyYXkoYyk7'@;
put 'bGV0IGE9IiI7Y29uc3QgZD1sLmJ5dGVMZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbaF0pO3JldHVybiBhfSkocmUudGFyZ2V0LnJlc3VsdCk7bGV0IHllO2NvbnN0IEVlPXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYToh'@;
put 'MCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMX07dHJ5e3llPVR1LnJlYWQodWUsey4uLkVlfSl9Y2F0Y2goQmUpe2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsQmUsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZigheWUpcmV0dXJuIGguaXNMb2Fk'@;
put 'aW5nPSExLGguaXNMb2FkaW5nRGVzYz0iIixoLnN0YXR1cz11Zi5SZWFkeVRvVXBsb2FkLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKTtoLmV4dHJhY3REYXRhKHllKX0pO3JldHVybiBmdW5jdGlvbihyZSl7cmV0dXJuIEcuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxJLnJlYWRBc0Fy'@;
put 'cmF5QnVmZmVyKGYpfWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXVmLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRN'@;
put 'b2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXVmLlJl'@;
put 'YWR5VG9VcGxvYWQsdGhpcy54bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1Udy5SdWxlcyx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3Qu'@;
put 'bmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMu'@;
put 'eGxEYXRhLmxlbmd0aClyZXR1cm47dGhpcy5zdGF0dXM9dWYuU3VibWl0dGluZyx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9yKGNvbnN0IE0gb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2go'@;
put 'e2ZpbGU6TSxmaWxlTmFtZTpNLm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBdKS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoTT0+T2JqZWN0LnZhbHVlcyhNKS5q'@;
put 'b2luKCIsIikpLmpvaW4oIlxuIiksaD1uZXcgQmxvYihbZF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxmPXR0ZShoLHRoaXMuZmlsZW5hbWUrIi5jc3YiKTthLnB1c2goe2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRp'@;
put 'dG9ycy9sb2FkZmlsZSIsYSx7dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihNPT57aWYoTS5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydCl7Y29uc3QgST1NLmFkYXB0ZXJSZXNwb25zZTt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixJLnNhc2pz'@;
put 'QWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpJLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpJLlNZU0VSUk9SVEVYVCxNQUM6SS5zYXNqc0Fib3J0WzBdLk1BQ30pfWVsc2UgTS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3Rh'@;
put 'Z2UvIitNLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF0uRFNJRCl9KS5jYXRjaChNPT57dGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsTS5yZXNwb25zZSl9KS5maW5hbGx5KCgpPT57dGhpcy5zdGF0dXM9dWYuUmVhZHlUb1N1Ym1pdCx0aGlz'@;
put 'LmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiJ9KX1leHRyYWN0RGF0YShhKXtjb25zdCBkPVtdO3RoaXMueGxtYXBSdWxlcy5mb3JFYWNoKGg9PntsZXQgZj1oLlhMTUFQX1NIRUVUO2lmKGYuc3RhcnRzV2l0aCgiLyIpKXtjb25zdCBFZT1mLnNwbGl0KCIvIilbMV0sQmU9cGFy'@;
put 'c2VJbnQoRWUpLTE7Zj1hLlNoZWV0TmFtZXNbQmVdfWNvbnN0IHY9YS5TaGVldHNbZl0sTT1UdS51dGlscy5zaGVldF90b19qc29uKHYse3JhdzohMCxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pLEk9bjhlKGguWExNQVBfU1RBUlQsTSksRz0oKGMsbCxhKT0+e2lmKCIiPT09bClyZXR1cm4g'@;
put 'YztpZihsLnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYobD1sLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxsLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBkPWF0ZShsKTtpZihkKXtjb25zdHtyb3c6aCxjb2x1bW46Zn09ZCx7cjp2LGM6TX09VHUudXRpbHMuZGVjb2RlX2NlbGwo'@;
put 'Yyk7bD1UdS51dGlscy5lbmNvZGVfY2VsbCh7cjp2K2gsYzpNK2Z9KX19aWYobC5zdGFydHNXaXRoKCJNQVRDSCAiKSYmKGw9bjhlKGwsYSkpLCJMQVNURE9XTiI9PT1sKXtjb25zdHtyOmQsYzpofT1UdS51dGlscy5kZWNvZGVfY2VsbChjKSxmPVR1LnV0aWxzLmVuY29kZV9jb2woaCk7bGV0'@;
put 'IHY9ZDtmb3IobGV0IE09ZCsxO008YS5sZW5ndGgmJmFbTV1bZl07TSsrKXY9TTtsPWYrKHYrMSl9aWYoIkJMQU5LUk9XIj09PWwpe2NvbnN0e3I6ZH09VHUudXRpbHMuZGVjb2RlX2NlbGwoYyk7bGV0IGg9ZDtmb3IobGV0IEk9ZCsxO0k8YS5sZW5ndGgmJiFFdnQoYVtJXSk7SSsrKWg9STts'@;
put 'PU9iamVjdC5rZXlzKGFbaF0pLmZpbHRlcihJPT4iX19yb3dOdW1fXyIhPT1JKS5yZWR1Y2UoKEksRyk9Pkc+ST9HOkksIiIpKyhoKzEpfXJldHVybiBsfSkoSSxoLlhMTUFQX0ZJTklTSCxNKSxyZT1gJHtJfToke0d9YCx1ZT1UdS51dGlscy5kZWNvZGVfcmFuZ2UocmUpLHllPVR1LnV0aWxz'@;
put 'LnNoZWV0X3RvX2pzb24odix7cmF3OiEwLHJhbmdlOnJlLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSk7Zm9yKGxldCBFZT0wO0VlPHllLmxlbmd0aDtFZSsrKXtjb25zdCBCZT15ZVtFZV07Zm9yKGxldCBHZT11ZS5zLmMsc3Q9MDtHZTw9dWUuZS5jO0dlKyssc3QrKyl7Y29uc3QgcHQ9VHUu'@;
put 'dXRpbHMuZW5jb2RlX2NvbChHZSk7cHQgaW4gQmUmJmQucHVzaCh7TE9BRF9SRUY6IjAiLFhMTUFQX0lEOmguWExNQVBfSUQsWExNQVBfUkFOR0VfSUQ6aC5YTE1BUF9SQU5HRV9JRCxST1dfTk86RWUrMSxDT0xfTk86c3QrMSxWQUxVRV9UWFQ6QmVbcHRdfSl9fX0pLHRoaXMuc3RhdHVzPXVm'@;
put 'LlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMueGxEYXRhPWQsdGhpcy5zZWxlY3RlZFRhYj1Udy5EYXRhfXZpZXdYTE1hcFJ1bGVzKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLnNlbGVjdGVkWExNYXAmJihhLmlz'@;
put 'TG9hZGluZz0hMCxhLmlzTG9hZGluZ0Rlc2M9IkxvYWRpbmcgZXhjZWwgcnVsZXMiLGEuc3RhdHVzPXVmLkZldGNoaW5nUnVsZXMseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0WExNYXBSdWxlcyhhLnNlbGVjdGVkWExNYXAuaWQpLnRoZW4oZD0+e2EueGxtYXBSdWxlcz1kLnhsbWFwcnVs'@;
put 'ZXMsYS5zdGF0dXM9dWYuUmVhZHlUb1VwbG9hZH0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KSxhLmlzTG9hZGluZz0hMSxhLmlzTG9hZGluZ0Rlc2M9IiIpfSkoKX1sb2FkKCl7dGhpcy54bG1hcHM9Sm4ueGxtYXBzLHRoaXMueGxtYXBzTG9hZGluZz0hMTtjb25zdCBh'@;
put 'PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkO2lmKGEpe2NvbnN0IGQ9dGhpcy54bG1hcHMuZmluZChoPT5oLmlkPT09YSk7ZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1kLHRoaXMudmlld1hMTWFwUnVsZXMoKSl9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5z'@;
put 'ZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hfSl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe0puLmVkaXRvci5zdGFydHVwU2V0P3RoaXMubG9hZCgpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2Ny'@;
put 'aWJlKCgpPT57dGhpcy5sb2FkKCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShtYyksJGUoYzEpLCRlKFNkKSwkZSh5dSksJGUoTG8pLCRlKEloKSwkZShWbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmRmEoQXZ0LDUpLDImZCl7bGV0IGY7eWkoZj1iaSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoImNv'@;
put 'bnRlbnQtY29udGFpbmVyIixoLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRlY2xzOjQyLHZhcnM6MTYsY29uc3RzOltbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0'@;
put 'ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBJZCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIs'@;
put 'MywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUtc2Vs'@;
put 'ZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwiIiwx'@;
put 'LCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwi'@;
put 'bW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIs'@;
put 'InctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwi'@;
put 'dXBsb2FkZXIiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1j'@;
put 'ZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWxlIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTSm9iRXhl'@;
put 'Y3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL2ltYWdlcy9zZWxlY3QtdGFibGUucG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkgbXQtMTAi'@;
put 'LCJjZHMtdGV4dCIsInNlY3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiaC0xMDAiLCJk'@;
put 'LWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsiY2xyVGFiTGluayIsIiIsMywiY2xpY2siXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJjbHItcm93IiwibS0wIiwibWItMTAtaSIsInZpZXdlclRpdGxlIl0sWzEsImQt'@;
put 'ZmxleCIsImNsci1jb2wtMTIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTUtaSJdLFsiY2RzLXRleHQiLCJsYWJlbExpbmsiLDEsIm1sLTEwIiwzLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1mbGV4LTEiXSxbImlkIiwiaG90LXRhYmxlIiwzLCJkYXRhIiwic2V0dGluZ3MiXSxb'@;
put 'MSwiY2xyLXJvdyIsIm0tMCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItY29sLTEyIGNsci1jb2wtbGctNCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRl'@;
put 'ciIsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJi'@;
put 'dG4tb3V0bGluZS1kYW5nZXIiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2RlKDAsImFwcC1zaWRlYmFyIiksZ3QoMSxrdnQsMiwwLCJkaXYiLDMpLGRlKDIsImNsci10'@;
put 'cmVlIikoMywiY2xyLXRyZWUtbm9kZSIsNCkoNCwiZGl2Iiw1KSg1LCJpbnB1dCIsNiwwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGdpKGguc2VhcmNoU3RyaW5nLE0pfHwoaC5zZWFyY2hTdHJpbmc9TSksQ3QoTSl9KSxGdCgia2V5dXAiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHd0KGYpLEN0KGgueGxtYXBMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDcsRHZ0LDEsMCwiY2xyLWljb24iLDcpKDgsSXZ0LDEsMCwiY2xyLWljb24iLDgpLGhlKCkoKSxndCg5LFJ2dCw1LDMsIm5nLWNvbnRhaW5lciIsOSksaGUoKSgpLGRlKDEwLCJkaXYiLDEwKSxndCgx'@;
put 'MSxQdnQsNCwyLCJkaXYiLDExKSgxMixGdnQsNiwxLCJkaXYiLDEyKSgxMyxCdnQsMjYsMTEsImRpdiIsMTMpLGRlKDE0LCJjbHItbW9kYWwiLDE0KSxGdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmZpbGVPdmVyQmFzZShNKSl9KSgiZmlsZURyb3AiLGZ1bmN0'@;
put 'aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmdldEZpbGVEZXNjKE0sITApKX0pLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGguc2hvd1VwbG9hZE1vZGFsPU0pLEN0KE0pfSksZGUoMTUsImgzIiwxNSks'@;
put 'T2UoMTYsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSgxNywiZGl2IiwxNikoMTgsImRpdiIsMTcpKDE5LCJzcGFuIiksT2UoMjAsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksaGUoKSgpLGRlKDIxLCJkaXYiLDE4KSgyMiwiZGl2IiwxOSkoMjMsImRpdiIsMjApKDI0LCJzcGFuIiwy'@;
put 'MSkoMjUsImxhYmVsIiwyMiksT2UoMjYsIiBCcm93c2UgIiksaGUoKSgpLGRlKDI3LCJpbnB1dCIsMjMsMSksRnQoImNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZ2V0RmlsZURlc2MoTSkpfSksaGUoKSgpKCkoKSgpKCksZGUoMjksImNsci1tb2RhbCIsMjQpLHBpKCJj'@;
put 'bHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLnN1Ym1pdExpbWl0Tm90aWNlLE0pfHwoaC5zdWJtaXRMaW1pdE5vdGljZT1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTUpLE9lKDMxLCJOb3RpY2UiKSxoZSgpLGRlKDMyLCJkaXYiLDE2KSgzMywicCIsMjUp'@;
put 'LE9lKDM0KSxoZSgpKCksZGUoMzUsImRpdiIsMjYpKDM2LCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksT2UoMzcsIiBDYW5jZWwgIiksaGUoKSxkZSgzOCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiB3dChmKSxoLnN1Ym1pdCgpLEN0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksT2UoMzksIiBTdWJtaXQgIiksaGUoKSgpKCkoKSxndCg0MCxadnQsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLGdjKX1pZigyJmQpe2NvbnN0IGY9ZGEoNik7ZmUoKSxNZSgibmdJ'@;
put 'ZiIsaC54bG1hcHNMb2FkaW5nKSxmZSg0KSxmaSgibmdNb2RlbCIsaC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixmLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixmLnZhbHVlLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0Zvck9mIixoLnhsbWFwcyksZmUoMiksTWUoIm5nSWYi'@;
put 'LCFoLnNlbGVjdGVkWExNYXApLGZlKCksTWUoIm5nSWYiLGguaXNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhaC5pc0xvYWRpbmcmJmguc2VsZWN0ZWRYTE1hcCksZmUoKSxNZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tk'@;
put 'cm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxmaSgiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksZmUoMTMpLE1lKCJ1cGxvYWRlciIsaC51cGxvYWRlciksZmUoMiksZmkoImNsck1vZGFsT3BlbiIsaC5zdWJtaXRMaW1pdE5vdGljZSksZmUoNSksTHIoIiBEdWUgdG8g'@;
put 'Y3VycmVudCBsaWNlbmNlLCBvbmx5ICIsaC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX0s'@;
put 'ZGVwZW5kZW5jaWVzOlskZyxsMSxHbCx0bCxXbyxBaCxQZCxoZyxPbCxydSxZdSxMYixjbyxZMSx2bSxibSx4Nyx5bSxtbSxTNyxSZCxhNCxRcyxiYSxCMSxzRSxLNmUsWDZlLGk0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFd2dD1be3BhdGg6IiIsY29tcG9uZW50'@;
put 'OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAt'@;
put 'cm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZXdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbbmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksY2hpbGRy'@;
put 'ZW46W3twYXRoOiIiLGNvbXBvbmVudDpyOGV9LHtwYXRoOiI6aWQiLGNvbXBvbmVudDpyOGV9XX1dO2xldCBZdnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9'@;
put 'KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0JjLmZvckNoaWxkKFd2dCksQmNdfSl9fXJldHVybiBjfSkoKTtFQSgpO2xldCBHdnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1o5LFl2dCxrYyxCMCxXOSxMYSxBQSxjZl19KX19cmV0dXJuIGN9KSgpLCR2dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFy'@;
put 'czowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZXdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbbmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgc3RlPShjLGwsYSk9PntsLmNsYXNzTGlzdC5hZGQoSm4uaGFuZHNvbnRhYmxlLmRhcmtUYWJs'@;
put 'ZUhlYWRlckNsYXNzKX0sS3Z0PVsiY29udGVudEFyZWEiXSxYdnQ9WyJob3RJbnN0YW5jZU1haW4iXSxxdnQ9WyJob3RJbnN0YW5jZVVzZXJEYXRhc2V0Il07ZnVuY3Rpb24gSnZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNiksV3QoMSwiY2xyLXNwaW5uZXIiLDI0KSxoZSgpKX1mdW5jdGlv'@;
put 'biBRdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDI3KSgxLCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KGRhKDQpLmNsaWNrKCkpfSksT2UoMiwiIEJyb3dzZSBmaWxlICIpLGhlKCksZGUoMywiaW5wdXQiLDI5LDEpLEZ0'@;
put 'KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgiZGlzYWJsZWQiLG51bGwhPT1hLnNlbGVjdGVkRmlsZXx8YS5zdWJtaXR0aW5nQ3N2KX19ZnVuY3Rpb24gZXl0KGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyNykoMSwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5vbkRpc2NhcmQoKSl9KSxPZSgyLCIgRGlzY2FyZCAiKSxoZSgpLGRlKDMsImJ1dHRvbiIsMzMpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25TdWJtaXRBbGwoKSl9KSxPZSg0LCIgU3VibWl0IEFsbCAiKSxoZSgpKCl9fWZ1bmN0aW9uIHR5dChjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDM4KX1mdW5jdGlvbiBueXQoYyxsKXsxJmMmJld0KDAsImNkcy1pY29uIiwzOSl9'@;
put 'ZnVuY3Rpb24gcnl0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSx0eXQsMSwwLCJjZHMtaWNvbiIsMzYpKDIsbnl0LDEsMCwiY2RzLWljb24iLDM3KSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsYS5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKCksTWUo'@;
put 'Im5nSWYiLGEuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpfX1mdW5jdGlvbiBpeXQoYyxsKXsxJmMmJld0KDAsImNkcy1pY29uIiwzOCl9ZnVuY3Rpb24gYXl0KGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNDEpfWZ1bmN0aW9uIHN5dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsaXl0LDEsMCwi'@;
put 'Y2RzLWljb24iLDM2KSgyLGF5dCwxLDAsImNkcy1pY29uIiw0MCksc2koKSksMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhKGEuZGF0YXNvdXJjZS5sZW5ndGgmJmEucGFyc2VSZXN1bHQpKSxmZSgpLE1lKCJuZ0lmIixhLmRhdGFzb3VyY2UubGVuZ3RoJiZh'@;
put 'LnBhcnNlUmVzdWx0KX19ZnVuY3Rpb24gb3l0KGMsbCl7MSZjJiZXdCgwLCJjZHMtaWNvbiIsNDEpfWZ1bmN0aW9uIGx5dChjLGwpezEmYyYmV3QoMCwiY2xyLXNwaW5uZXIiLDQzKX1mdW5jdGlvbiBjeXQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLG95dCwxLDAsImNkcy1pY29uIiw0MCko'@;
put 'MixseXQsMSwwLCJjbHItc3Bpbm5lciIsNDIpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEucGFyc2luZ1RhYmxlKSxmZSgpLE1lKCJuZ0lmIixhLnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIHV5dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEs'@;
put 'c3l0LDMsMiwibmctY29udGFpbmVyIiw2KSgyLGN5dCwzLDIsIm5nLWNvbnRhaW5lciIsNiksc2koKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuZGF0YXNvdXJjZSksZmUoKSxNZSgibmdJZiIsIWEuZGF0YXNvdXJjZSl9fWZ1bmN0aW9uIGR5dChjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLm9uUGFyc2VkRGF0YXNldENsaWNrKGgpKX0pLGd0KDIscnl0LDMsMiwibmct'@;
put 'Y29udGFpbmVyIiw2KSgzLHV5dCwzLDIsIm5nLWNvbnRhaW5lciIsNiksZGUoNCwic3BhbiIsMzUpLE9lKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdCksZmUoKSxN'@;
put 'ZSgibmdJZiIsIWEuc3VibWl0UmVzdWx0KSxmZSgyKSxMcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBoeXQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGV5dCw1LDAsImRpdiIsNSksZGUoMiwicCIsMzApLE9lKDMsIkZvdW5kIHRhYmxlczoiKSxoZSgpLGRlKDQsImNsci10cmVlIiks'@;
put 'Z3QoNSxkeXQsNiw1LCJjbHItdHJlZS1ub2RlIiwzMSksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5leGNlbHNTdWJtaXR0ZWQpLGZlKDQpLE1lKCJuZ0Zvck9mIixhLnBhcnNlZERhdGFzZXRzKX19ZnVuY3Rpb24gZnl0KGMsbCl7MSZjJiZXdCgwLCJj'@;
put 'ZHMtaWNvbiIsMzgpfWZ1bmN0aW9uIHB5dChjLGwpezEmYyYmV3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBneXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3Qo'@;
put 'YSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhoKSl9KSxndCgyLGZ5dCwxLDAsImNkcy1pY29uIiwzNikoMyxweXQsMSwwLCJjZHMtaWNvbiIsMzcpLFd0KDQsImNkcy1pY29uIiw0MSksT2UoNSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1s'@;
put 'LiRpbXBsaWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLE1lKCJuZ0lmIixhLmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLnN1Y2Nlc3MpLGZlKDIpLExyKCIgIixhLmxpYmRzLCIgIil9fWZ1bmN0aW9uIG15dChjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsInAiLDQ0KSxPZSgy'@;
put 'LCJTdWJtaXR0ZWQgdGFibGVzOiIpLGhlKCksZGUoMywiY2xyLXRyZWUiKSxndCg0LGd5dCw2LDUsImNsci10cmVlLW5vZGUiLDMxKSxoZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDQpLE1lKCJuZ0Zvck9mIixhLnN1Ym1pdHRlZENzdkRhdGFzZXRzKX19ZnVuY3Rpb24gdnl0KGMs'@;
put 'bCl7MSZjJiYoZGUoMCwiZGl2Iiw0NiksV3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJwIiw0OCksT2UoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLGhlKCkoKSl9ZnVuY3Rpb24geXl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwiZGl2Iiw0OSkoMiwiZGl2Iiw1'@;
put 'MCkoMywicCIsNTEpLE9lKDQsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSg1LCJzdHJvbmciKSxPZSg2KSxoZSgpLGRlKDcsImNsci10b29sdGlwIikoOCwiY2RzLWljb24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9uRGlzY2FyZEZpbGUoKSl9KSxo'@;
put 'ZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiKSxPZSgxMCwiIERpc2NhcmQgdGhlIGZpbGUgIiksaGUoKSgpKCksZGUoMTEsInAiLDUzKSxPZSgxMiwiIEZpbGUgc2l6ZTogIiksZGUoMTMsInN0cm9uZyIpLE9lKDE0KSxoZSgpKCksZGUoMTUsInAiLDU0KSxPZSgxNiwiIFBhc3RlIG9y'@;
put 'IHR5cGUgdGhlIGxpc3Qgb2YgZGF0YXNldHMgdG8gdXBsb2FkOiAiKSxoZSgpLGRlKDE3LCJjbHItY29udHJvbC1oZWxwZXIiLDU1KSxPZSgxOCwiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQuIFdlIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgdGFibGVzIGJ5IHRoZSBzaGVldG5hbWUgYW5k'@;
put 'IHBvcHVsYXRlIGlmIGFueS4iKSxoZSgpLFd0KDE5LCJob3QtdGFibGUiLDU2LDIpLGRlKDIxLCJkaXYiLDU3KSgyMiwiYnV0dG9uIiw1OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5vblN0YXJ0UGFyc2luZ0ZpbGUoKSl9KSxPZSgyMywiIENvbnRpbnVl'@;
put 'ICIpLGhlKCkoKSgpKCksc2koKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNiksU3IoYS5zZWxlY3RlZEZpbGUubmFtZSksZmUoOCksTHIoIiIsYS5zZWxlY3RlZEZpbGUuc2l6ZU1CLCIgTUIiKSxmZSg1KSxNZSgic2V0dGluZ3MiLGEuaG90VXNlckRhdGFzZXRzU2V0dGluZ3MpLGZlKDMp'@;
put 'LE1lKCJkaXNhYmxlZCIsIWEubWF0Y2hlZERhdGFzZXRzLmxlbmd0aCkoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIGJ5dChjLGwpe2lmKDEmYyYmKGFpKDApLFd0KDEsImNsci1pY29uIiw1OSksZGUoMiwicCIsNDgpLE9lKDMpLGhlKCksc2koKSksMiZjKXtjb25z'@;
put 'dCBhPUxlKDQpO2ZlKDMpLExyKCIgIixhLmZpbGVMb2FkaW5nU3RhdGUsIi4uLiAiKX19ZnVuY3Rpb24gX3l0KGMsbCl7MSZjJiYoYWkoMCksV3QoMSwiY2xyLWljb24iLDYwKSxkZSgyLCJwIiw0OCksT2UoMywiIFBsZWFzZSBzZWxlY3QgYSBkYXRhc2V0IG9uIHRoZSBsZWZ0IHRvIHJldmll'@;
put 'dyB0aGUgZGF0YSAiKSxoZSgpLHNpKCkpfWZ1bmN0aW9uIHd5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLGd0KDEsYnl0LDQsMSwibmctY29udGFpbmVyIiw2KSgyLF95dCw0LDAsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksTWUoIm5nSWYi'@;
put 'LGEuZmlsZUxvYWRpbmdTdGF0ZSE9PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpLGZlKCksTWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZT09PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpfX1mdW5jdGlvbiBDeXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NykoMSwic3Ryb25nIiks'@;
put 'T2UoMiwiU1VDQ0VTUyIpLGhlKCkoKSl9ZnVuY3Rpb24gU3l0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzgpKDEsInN0cm9uZyIpLE9lKDIsIkVSUk9SIiksaGUoKSgpKX1mdW5jdGlvbiBNeXQoYyxsKXsxJmMmJihkZSgwLCJwIiw2NSksT2UoMSwiIEVycm9yIGRldGFpbHM6ICIpLGhlKCkp'@;
put 'fWZ1bmN0aW9uIHh5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNzkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDUpO3JldHVybiBDdChoLnJlU3VibWl0VGFibGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0KSl9KSxPZSgxLCIgUmVzdWJt'@;
put 'aXQgIiksaGUoKX0yJmMmJk1lKCJjbHJMb2FkaW5nIixMZSg1KS5zdWJtaXRMb2FkaW5nKX1mdW5jdGlvbiBFeXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDcxKSgxLCJkaXYiKSgyLCJwIiw2NCksT2UoMywiIFN1Ym1pdCBTdGF0dXM6ICIpLGd0KDQsQ3l0LDMsMCwi'@;
put 'c3BhbiIsNzIpKDUsU3l0LDMsMCwic3BhbiIsNzMpLGhlKCksZ3QoNixNeXQsMiwwLCJwIiw3NCksaGUoKSxkZSg3LCJkaXYiKSxndCg4LHh5dCwyLDEsImJ1dHRvbiIsNzUpLGRlKDksImJ1dHRvbiIsNzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDQpO3JldHVy'@;
put 'biBDdChoLmRvd25sb2FkRmlsZShoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmxvZ3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSl9KSxPZSgxMCwiIERvd25sb2Fk'@;
put 'IGxvZyAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoNCksTWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpLGZlKCksTWUoIm5nSWYiLG51bGw9'@;
put 'PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0'@;
put 'LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoMiksTWUoIm5nSWYiLCFhLnN1Ym1pdHRpbmdDc3YmJihudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfX1mdW5jdGlvbiBUeXQoYyxsKXtp'@;
put 'ZigxJmMmJihkZSgwLCJkaXYiLDgwKSgxLCJkaXYiLDgxKSxPZSgyKSxRbygzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoMiksTHIoIiAiLEFjKDMsMSxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRh'@;
put 'c2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gQXl0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwic3Ryb25nIiksT2UoMiksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoMiksQnUoJyInLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3Vs'@;
put 'dC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMuc2hlZXROYW1lLCciIScsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQu'@;
put 'cGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5yYW5nZUFkZHJlc3MsIiIpfX1mdW5jdGlvbiBreXQoYyxsKXsxJmMmJihkZSgwLCJzdHJvbmciKSxPZSgxLCJObyBkYXRhIGZvdW5kIiksaGUoKSl9ZnVuY3Rpb24gRHl0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODMpKDEsInN0cm9uZyIpLE9l'@;
put 'KDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSxoZSgpLFd0KDMsImNsci1zcGlubmVyIiw4NCksaGUoKSl9ZnVuY3Rpb24gSXl0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxreXQsMiwwLCJzdHJvbmciLDYpKDIsRHl0LDQsMCwic3BhbiIsODIpLHNpKCkpLDImYyl7Y29uc3QgYT1M'@;
put 'ZSg0KTtmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSksZmUoKSxNZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIFJ5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsODUpLFd0KDEsImNsci1zcGlubmVy'@;
put 'Iiw4NiksaGUoKSl9ZnVuY3Rpb24gTHl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZ3QoMSxFeXQsMTEsNCwiZGl2Iiw2MSkoMixUeXQsNCwzLCJkaXYiLDYyKSxkZSgzLCJkaXYiLDYzKSg0LCJkaXYiKSg1LCJwIiw2NCksT2UoNiwiIEZvdW5kIGluIHJhbmdlOiAiKSxndCg3'@;
put 'LEF5dCwzLDIsIm5nLWNvbnRhaW5lciIsNikoOCxJeXQsMywyLCJuZy1jb250YWluZXIiLDYpLGhlKCksZGUoOSwicCIsNjUpLE9lKDEwLCIgRGF0YXNldDogIiksZGUoMTEsInN0cm9uZyIpKDEyLCJjbHItdG9vbHRpcCIpKDEzLCJhIiw2NiksT2UoMTQpLGhlKCksZGUoMTUsImNsci10b29s'@;
put 'dGlwLWNvbnRlbnQiLDY3KSxPZSgxNiwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCkoKSxkZSgxNywiZGl2IikoMTgsImNsci10b2dnbGUtd3JhcHBlciIpKDE5LCJpbnB1dCIsNjgpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxl'@;
put 'KDMpO3JldHVybiBnaShmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbixoKXx8KGYuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uPWgpLEN0KGgpfSksaGUoKSxkZSgyMCwibGFiZWwiKSxPZSgyMSwiSW5jbHVkZSBpbiBzdWJtaXNzaW9uIiks'@;
put 'aGUoKSgpKCkoKSxndCgyMixSeXQsMiwwLCJkaXYiLDY5KSxXdCgyMywiaG90LXRhYmxlIiw3MCwzKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0KSxmZSgpLE1lKCJuZ0lmIixudWxsPT1hLmFjdGl2'@;
put 'ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoNSksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdCksZmUoKSxNZSgibmdJZiIsIWEuYWN0aXZlUGFyc2VkRGF0YXNldC5w'@;
put 'YXJzZVJlc3VsdCksZmUoNSksTWUoInJvdXRlckxpbmsiLCIvZWRpdG9yLyIrYS5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxmZSgpLFNyKGEuYWN0aXZlUGFyc2VkRGF0YXNldC5saWJkcyksZmUoKSxNZSgiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiKSgiY2xyU2l6ZSIsInNtIiksZmUo'@;
put 'NCksZmkoIm5nTW9kZWwiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uKSxNZSgiZGlzYWJsZWQiLCEoYS5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2UmJmEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdCkpLGZlKDMpLE1lKCJuZ0lmIixhLmlz'@;
put 'SG90SGlkZGVuKSxmZSgpLE1lKCJzZXR0aW5ncyIsYS5ob3RNYWluVGFibGVTZXR0aW5ncyl9fWZ1bmN0aW9uIE95dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsd3l0LDMsMiwiZGl2IiwxMSkoMixMeXQsMjUsMTIsIm5nLWNvbnRhaW5lciIsNiksc2koKSksMiZjKXtjb25zdCBhPUxlKDIp'@;
put 'O2ZlKCksTWUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldCl9fWZ1bmN0aW9uIFB5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDYpLFd0KDEsImNsci1pY29uIiw2MCksZGUoMiwicCIsNDgpLE9lKDMsIiBQbGVhc2Ug'@;
put 'c2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1pdCByZXN1bHRzICIpLGhlKCkoKSl9ZnVuY3Rpb24gRnl0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxQeXQsNCwwLCJkaXYiLDExKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdJZiIs'@;
put 'IWEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIEh5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc3KSgxLCJzdHJvbmciKSxPZSgyLCJTVUNDRVNTIiksaGUoKSgpKX1mdW5jdGlvbiBOeXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3OCkoMSwic3Ryb25nIiksT2UoMiwi'@;
put 'RVJST1IiKSxoZSgpKCkpfWZ1bmN0aW9uIFZ5dChjLGwpezEmYyYmKGRlKDAsInAiLDY1KSxPZSgxLCIgRXJyb3IgZGV0YWlsczogIiksaGUoKSl9ZnVuY3Rpb24gQnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSksT2UoMiksUW8oMywianNvbiIpLGhlKCkoKSks'@;
put 'MiZjKXtjb25zdCBhPUxlKDMpO2ZlKDIpLExyKCIgIixBYygzLDEsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSwiICIpfX1mdW5jdGlvbiBqeXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJkaXYiLDg3KSgyLCJkaXYiKSgzLCJwIiw2NCksT2UoNCwi'@;
put 'IE1hdGNoZWQgd2l0aCBkYXRhc2V0OiAiKSxkZSg1LCJzdHJvbmciKSg2LCJjbHItdG9vbHRpcCIpKDcsImEiLDY2KSxPZSg4KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiLDY3KSxPZSgxMCwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTEsInAi'@;
put 'LDY0KSxPZSgxMiwiIFN0YXR1czogIiksZ3QoMTMsSHl0LDMsMCwic3BhbiIsNzIpKDE0LE55dCwzLDAsInNwYW4iLDczKSxoZSgpLGd0KDE1LFZ5dCwyLDAsInAiLDc0KSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYnV0dG9uIiw3NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0'@;
put 'IGg9TGUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzfHxoLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpKX0pLE9lKDE4LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSgpLGd0KDE5LEJ5dCw0LDMsImRpdiIsNjIp'@;
put 'LHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDcpLE1lKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSxTcihhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMpLGZlKCksTWUoImNsclBvc2l0aW9uIiwidG9w'@;
put 'LXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2VzcyksZmUoKSxNZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRh'@;
put 'dGFzZXQuZXJyb3IpLGZlKDQpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpfX1mdW5jdGlvbiB6eXQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLHl5dCwyNCw1LCJuZy1jb250YWluZXIiLDYpKDIsT3l0LDMsMiwibmctY29udGFpbmVyIiw2KSgzLEZ5dCwy'@;
put 'LDEsIm5nLWNvbnRhaW5lciIsNikoNCxqeXQsMjAsOCwibmctY29udGFpbmVyIiw2KSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJm51bGwhPT1hLnNlbGVjdGVkRmlsZSksZmUoKSxNZSgibmdJZiIsYS5wYXJzZWREYXRh'@;
put 'c2V0cy5sZW5ndGgmJiFhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsYS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIFV5dChjLGwpe2lmKDEmYyYmKGRl'@;
put 'KDAsInAiLDg4KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLExyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJl'@;
put 'bW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciBBdz1mdW5jdGlvbihjKXtyZXR1cm4gYy5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixjLnBhcnNpbmc9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgaW4gdGhlIGZpbGUiLGMu'@;
put 'cGFyc2VkPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGZpbmlzaGVkIixjLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3RlZCIsY30oQXd8fHt9KTtjb25zdCBaeXQ9W3twYXRoOiIiLGNvbXBvbmVudDokdnQsY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2lu'@;
put 'aXRpYWxpemVIb3RTZXR0aW5ncygpe3RoaXMuaG90TWFpblRhYmxlU2V0dGluZ3M9e2NsYXNzTmFtZTpbImh0RGFyayJdLGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXksbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLG1hbnVhbENv'@;
put 'bHVtblJlc2l6ZTohMCxhdXRvQ29sdW1uU2l6ZTohMCxmaWx0ZXJzOiEwLHN0cmV0Y2hIOiJhbGwiLGFmdGVyR2V0Q29sSGVhZGVyOnN0ZSxtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hla2VyfTtjb25zdHtkYXRhOmEsLi4uZH09dGhpcy5ob3RVc2VyRGF0YXNldHM7dGhpcy5ob3RV'@;
put 'c2VyRGF0YXNldHNTZXR0aW5ncz17Li4uZCxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGVMaWNlbnNlS2V5fX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZp'@;
put 'Y2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy5jZHI9SSx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VT'@;
put 'ZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmZpbGVMb2FkaW5nU3RhdGU9QXcubm90U2VsZWN0ZWQsdGhpcy5GaWxlTG9hZGluZ1N0YXRlPUF3LHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhvdFRhYmxlTWF4Um93cz10aGlzLmxpY2VuY2VT'@;
put 'dGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsdGhpcy5jc3ZGaWxlcz1bXSx0aGlzLmNzdlN1Ym1pdHRpbmc9ITEsdGhpcy5hdXRvRGV0ZWN0aW5nQ29sdW1ucz0hMSx0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMucGFyc2VkRGF0YXNldHM9W10sdGhpcy5zdWJtaXR0ZWRD'@;
put 'c3ZEYXRhc2V0cz1bXSx0aGlzLmRhdGFzZXRzTG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMubWF0Y2hlZERhdGFzZXRzPVtdLHRoaXMuc2hlZXROYW1lcz1bXSx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIiLHRoaXMubGlic0FuZFRh'@;
put 'Ymxlcz17fSx0aGlzLmhvdE1haW5UYWJsZVNldHRpbmdzPXt9LHRoaXMuaG90VXNlckRhdGFzZXRzU2V0dGluZ3M9e30sdGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIiLHRoaXMuaG90VXNlckRhdGFzZXRzPXtjb2xIZWFkZXJzOlsiTGli'@;
put 'cmFyeSIsIlRhYmxlIl0sZGF0YTpbWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl1dLGNvbHVtbnM6W3t0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6'@;
put 'W119LHt0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119XSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIzMDVweCIsY2xhc3NOYW1lOlsiaHREYXJrIl0sY29udGV4dE1lbnU6e2l0ZW1zOntyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25h'@;
put 'bWU6Ikluc2VydCBSb3cgYmVsb3cifX19LG1hbnVhbFJvd01vdmU6ITAsY29sdW1uU29ydGluZzohMCxhZnRlckdldENvbEhlYWRlcjpzdGUsc3RyZXRjaEg6ImFsbCJ9LHRoaXMuYWZ0ZXJHZXRDb2xIZWFkZXI9c3RlfW5nT25Jbml0KCl7dGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5z'@;
put 'ZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hLHRoaXMuaW5pdGlhbGl6ZUhvdFNldHRpbmdzKCl9KSx0aGlzLmluaXRpYWxpemVIb3RTZXR0aW5ncygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFRhYmxlVXNlckRhdGFzZXRD'@;
put 'b21wb25lbnQmJiF0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJnRoaXMuaW5pdFVzZXJJbnB1dEhvdCgpLHRoaXMuaG90VGFibGVNYWluQ29tcG9uZW50JiYhdGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5pbml0SG90KCl9LDUwKX1uZ0FmdGVyQ29udGVudEluaXQoKXtKbi5lZGl0b3Iuc3Rh'@;
put 'cnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Kbi5lZGl0b3IubGlic0FuZFRhYmxl'@;
put 'cztjb25zdCBhPU9iamVjdC5rZXlzKHRoaXMubGlic0FuZFRhYmxlcyk7dGhpcy5ob3RVc2VyRGF0YXNldHM/LmNvbHVtbnMmJih0aGlzLmhvdFVzZXJEYXRhc2V0cy5jb2x1bW5zWzBdLnNvdXJjZT1hKX1vbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtj'@;
put 'b25zdCBoPWE/LnRhcmdldD8uZmlsZXN8fFtdO2lmKGgubGVuZ3RoPDEpcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gZmlsZSBmb3VuZC4iLG51bGwsIkZpbGUgVXBsb2FkIik7bGV0IGY9IiI7Zm9yKGxldCB2IG9mIGgpe2NvbnN0IE09di5uYW1l'@;
put 'LnNwbGl0KCIuIikucG9wKCk7aWYoZnx8KGY9TSksZiE9PU0pcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTWl4ZWQgZXh0ZW5zaW9ucyBlcnJvciIsIlBsZWFzZSBzZWxlY3QgZmlsZXMgd2l0aCBzYW1lIGV4dGVuc2lvbi4iKTtmPU19aWYoWyJ4bHN4IiwieGxz'@;
put 'bSIsInhsbSJdLmluY2x1ZGVzKGYpKWQuc2VsZWN0ZWRGaWxlPWEudGFyZ2V0LmZpbGVzWzBdLGQuc2VsZWN0ZWRGaWxlJiYoZC5maWxlTG9hZGluZ1N0YXRlPUF3LnJlYWRpbmcsZC5zZWxlY3RlZEZpbGUuc2l6ZU1CPWQuc3ByZWFkc2hlZXRTZXJ2aWNlLmJ5dGVzVG9NQihkLnNlbGVjdGVk'@;
put 'RmlsZS5zaXplKSxkLnNwcmVhZHNoZWV0U2VydmljZS54bHN4UmVhZEZpbGUoZC5zZWxlY3RlZEZpbGUpLnRoZW4odj0+e2QuZmlsZUxvYWRpbmdTdGF0ZT1Bdy5wYXJzaW5nLGQuc2VsZWN0ZWRGaWxlLndvcmtib29rPXZ9KSksZC5pbml0VXNlcklucHV0SG90KCksc2V0VGltZW91dCgoKT0+'@;
put 'e2Qub25BdXRvRGV0ZWN0Q29sdW1ucygpfSwxMDApO2Vsc2V7aWYoImNzdiIhPT1mKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk9ubHkgZXhjZWwgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZC4gKHhsc3gpIixudWxsLCJFeHRlbnNpb24gRXJyb3IiKTtk'@;
put 'Lm9uTXVsdGlDc3ZGaWxlcyhhLnRhcmdldC5maWxlcyl9YS50YXJnZXQudmFsdWU9IiJ9KSgpfW9uTXVsdGlDc3ZGaWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2ZvcihsZXQgaCBvZiBhKXtjb25zdCBmPWQucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5uYW1lKTtk'@;
put 'LmlzVmFsaWREYXRhc2V0Rm9ybWF0KGYpJiZkLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKGYpJiZkLmNzdkZpbGVzLnB1c2goe2ZpbGU6aCxmaWxlTmFtZTpoLm5hbWV9KX1kLmNzdkZpbGVzLmxlbmd0aD8oZC5jc3ZTdWJtaXR0aW5nPSEwLHlpZWxkIGQuc3VibWl0Q3N2RmlsZXMoKSxkLmNz'@;
put 'dlN1Ym1pdHRpbmc9ITEpOmQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkNTViBVcGxvYWQiLCJOb25lIG9mIHRoZSBhdHRhY2hlZCBDU1YgZmlsZSBuYW1lcyBtYXRjaGVkIGFuIGFjdHVhbCBkYXRhc2V0LiIpfSkoKX1vbkRpc2NhcmRGaWxlKCl7dGhpcy5zZWxlY3RlZEZpbGU9bnVs'@;
put 'bCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIifW9uU3RhcnRQYXJzaW5nRmlsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS51cGxvYWRMb2FkaW5nPSEwO2NvbnN0IGQ9W107bGV0IGg9W107Zm9yKGxldCBmIG9mIGEubWF0Y2hlZERhdGFzZXRzKXtjb25zdCB2PWEuZmV0'@;
put 'Y2hEYXRhc2V0KGYpO2QucHVzaCh2KX1Qcm9taXNlLmFsbFNldHRsZWQoZCkudGhlbihmPT57Zi5mb3JFYWNoKE09PnsiZnVsZmlsbGVkIj09PU0uc3RhdHVzJiZNLnZhbHVlJiZoLnB1c2goTS52YWx1ZSl9KSxhLnVwbG9hZExvYWRpbmc9ITEsYS5idWlsZERhdGFzZXRzT2JqZWN0cyhoKS5m'@;
put 'b3JFYWNoKE09PnthLnBhcnNlZERhdGFzZXRzLnB1c2goe2xpYmRzOk0ubGliZHMsaW5jbHVkZUluU3VibWlzc2lvbjohMCxkYXRhc2V0SW5mbzpNLHBhcnNpbmdUYWJsZTohMH0pfSksYS53b3JrYm9va0xvYWRlZCgpLnRoZW4oTT0+e2ZvcihsZXQgSSBvZiBhLnBhcnNlZERhdGFzZXRzKWEu'@;
put 'c3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmEuc2VsZWN0ZWRGaWxlLHdvcmtib29rOk0scGFzc3dvcmQ6YS5zZWxlY3RlZEZpbGUucGFzc3dvcmR8fHZvaWQgMCxkY1ZhbGlkYXRvcjpJLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yLGhlYWRlclBrczpJLmRhdGFzZXRJ'@;
put 'bmZvLmhlYWRlclBrcyxoZWFkZXJBcnJheTpJLmRhdGFzZXRJbmZvLmhlYWRlckFycmF5LGhlYWRlclNob3c6W10sdGltZUhlYWRlcnM6SS5kYXRhc2V0SW5mby50aW1lSGVhZGVycyxkYXRlSGVhZGVyczpJLmRhdGFzZXRJbmZvLmRhdGVIZWFkZXJzLGRhdGVUaW1lSGVhZGVyczpJLmRhdGFz'@;
put 'ZXRJbmZvLmRhdGVUaW1lSGVhZGVycyx4bFJ1bGVzOkkuZGF0YXNldEluZm8ueGxSdWxlc30pLnRoZW4oRz0+e2lmKGEuZmlsZUxvYWRpbmdTdGF0ZT1Bdy5wYXJzZWQsRyYmRy5kYXRhKXtsZXQgcmU9W107Ry5kYXRhLm1hcCh1ZT0+e2xldCB5ZT17fTtHLmhlYWRlclNob3cubWFwKChFZSxC'@;
put 'ZSk9Pnt5ZVtFZV09dWVbQmVdfSkseWUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwoeWUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPSJObyIpLHJlLnB1c2goeWUpfSksSS5kYXRhc291cmNlPXJlLEkucGFyc2VSZXN1bHQ9RyxJLnBhcnNpbmdUYWJsZT0hMX19KS5j'@;
put 'YXRjaChHPT57Y29uc29sZS53YXJuKCJQYXJzaW5nIGV4Y2VsIGZpbGUgZXJyb3IuIixHKSxJLmRhdGFzb3VyY2U9W10sSS5pbmNsdWRlSW5TdWJtaXNzaW9uPSExLEkucGFyc2luZ1RhYmxlPSExfSl9KX0pfSkoKX1vblN1Ym1pdEFsbCgpe3RoaXMudGFibGVzVG9TdWJtaXQubGVuZ3RoP3Ro'@;
put 'aXMuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSEwOnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vIHRhYmxlcyB0byBzdWJtaXQiLCJQbGVhc2UgaW5jbHVkZSBhdCBsZWFzdCBvbmUgdGFibGUgdG8gcHJvY2VlZC4iKX1vbkRpc2NhcmQoKXt0aGlzLnBhcnNlZERhdGFzZXRzPVtd'@;
put 'LHRoaXMubWF0Y2hlZERhdGFzZXRzPVtdLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLnN1Ym1pdFJlYXNvbk1lc3NhZ2U9IiJ9aW5pdEhvdCgpe3NldFRpbWVvdXQoKCk9PntpZih0aGlzLmhvdFRhYmxlTWFpbkNvbXBvbmVudD8uaG90SW5z'@;
put 'dGFuY2Upe3RoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZU1haW5Db21wb25lbnQuaG90SW5zdGFuY2U7Y29uc3QgZD10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmKHRoaXMuaG90SW5z'@;
put 'dGFuY2UudXBkYXRlU2V0dGluZ3Moe2NvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3I/LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAs'@;
put 'aGVpZ2h0OmR8fCIzMDBweCIsY2xhc3NOYW1lOlsiaHREYXJrIl19KSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCksc2V0VGltZW91dCgoKT0+e3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2UmJih0aGlzLmhvdEluc3RhbmNlLmxv'@;
put 'YWREYXRhKHRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpKX0sMTAwKSl9fSwxMDApfWluaXRVc2VySW5wdXRIb3QoKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFRhYmxlVXNlckRhdGFzZXRDb21wb25lbnQ/'@;
put 'LmhvdEluc3RhbmNlJiYodGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0PXRoaXMuaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudC5ob3RJbnN0YW5jZSxzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RVc2VyRGF0YXNldHMuZGF0YSYmKHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5sb2Fk'@;
put 'RGF0YSh0aGlzLmhvdFVzZXJEYXRhc2V0cy5kYXRhKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCkpfSw1MCksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsKGQsaCk9PntpZihkKWZvcihsZXQgZiBvZiBkKWYmJmZbM10mJihm'@;
put 'WzNdPWZbM10udG9VcHBlckNhc2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7dmFyIGQ9UShmdW5jdGlvbiooaCxmKXtpZihoKXsiZWRpdCI9PT1mJiYoeWllbGQgYS5vblVzZXJJbnB1dERhdGFzZXRzQ2hhbmdlKCkp'@;
put 'O2ZvcihsZXQgdiBvZiBoKWEubWFya1VubWF0Y2hlZFJvd3ModlswXSk7YS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCksYS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnJlbmRlcigpfX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHRo'@;
put 'aXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXt2YXIgZD1RKGZ1bmN0aW9uKihoLGYsdixNKXt5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKTtmb3IobGV0IEkgb2YgdilhLm1hcmtVbm1hdGNoZWRSb3dzKEkpfSk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKGgsZix2LE0pe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKX0sMTAwKX1keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl7dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0JiZ0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YSgpLmZvckVh'@;
put 'Y2goKGQsaCk9Pntjb25zdCBmPWRbMF07ZiYmZi5sZW5ndGgmJnRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5zZXRDZWxsTWV0YShoLDEsInNvdXJjZSIsdGhpcy5saWJzQW5kVGFibGVzW2ZdKX0pfW1hcmtVbm1hdGNoZWRSb3dzKGEpe2lmKCF0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFz'@;
put 'ZXQpcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGFBdFJvdyhhKSxoPWAke2RbMF19LiR7ZFsxXX1gLGY9dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldENlbGxNZXRhQXRSb3coYSk7ZCYmZFswXSYmZFsxXT90aGlzLm1hdGNoZWREYXRhc2V0'@;
put 'cy5pbmNsdWRlcyhoKT9mLmZvckVhY2godj0+e3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5zZXRDZWxsTWV0YShhLHYuY29sLCJjbGFzc05hbWUiLCIiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFt'@;
put 'ZSIsIm5vdC1tYXRjaGVkIil9KTpmLmZvckVhY2godj0+e3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5zZXRDZWxsTWV0YShhLHYuY29sLCJjbGFzc05hbWUiLCIiKX0pfW9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLmhlbHBl'@;
put 'clNlcnZpY2UuZGVib3VuY2VDYWxsKDEwMCwoKT0+e2NvbnN0IGg9dGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKTt0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSxoLmZvckVhY2goZj0+e2NvbnN0IHY9Zi50cmltKCk7dGhpcy5pc1ZhbGlkRGF0YXNldEZvcm1hdCh2KSYmdGhpcy5pc1ZhbGlkRGF0'@;
put 'YXNldFJlZmVyZW5jZSh2KSYmIXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKHYpP3RoaXMubWF0Y2hlZERhdGFzZXRzLnB1c2godik6Y29uc29sZS53YXJuKGBTaGVldCBuYW1lOiAke3Z9IGlzIG5vdCBhbiBhY3R1YWwgZGF0YXNldCByZWZlcmVuY2UuYCl9KSx0aGlzLmNkci5kZXRl'@;
put 'Y3RDaGFuZ2VzKCksYSh2b2lkIDApfSl9KX1vbkF1dG9EZXRlY3RDb2x1bW5zKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtpZighYS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0KXtsZXQgdj0wO2NvbnN0IE09MjA7Zm9yKDshYS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0JiZ2PE07'@;
put 'KXlpZWxkIG5ldyBQcm9taXNlKEk9PnNldFRpbWVvdXQoSSwxMDApKSx2Kys7aWYoIWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oImhvdEluc3RhbmNlVXNlckRhdGFzZXQgbm90IHJlYWR5IGFmdGVyIHdhaXRpbmciKX1sZXQgZD0hMTtpZih5aWVs'@;
put 'ZCBhLnBhcnNlRXhjZWxTaGVldE5hbWVzKCkudGhlbih2PT57YS5zaGVldE5hbWVzPXZ9KS5jYXRjaCh2PT57di5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGQ9ITApfSksZClyZXR1cm4gYS5vbkRpc2NhcmRGaWxlKCksdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJMb2NrZWQg'@;
put 'ZmlsZSIsIldlIGZhaWxlZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7YS5zaGVldE5hbWVzJiYoYS5tYXRjaGVkRGF0YXNldHM9W10sYS51c2VySW5wdXREYXRhc2V0cz0iIixhLnNoZWV0TmFtZXMuZm9yRWFjaCgodixNKT0+e2NvbnN0IEk9di50cmltKCk7YS5pc1ZhbGlkRGF0YXNldEZvcm1h'@;
put 'dChJKSYmYS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShJKT9hLm1hdGNoZWREYXRhc2V0cy5wdXNoKEkpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtJfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkpLGEudXNlcklucHV0RGF0YXNldHM9YS5tYXRjaGVkRGF0'@;
put 'YXNldHMuam9pbigiXG4iKTtjb25zdCBoPWEubWF0Y2hlZERhdGFzZXRzLm1hcCh2PT5bdi5zcGxpdCgiLiIpWzBdLHYuc3BsaXQoIi4iKVsxXV0pLGY9YS5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoaC5sZW5ndGg8Zil7Y29uc3Qgdj1mLWgubGVuZ3RoO2ZvcihsZXQgTT0wO008'@;
put 'djtNKyspaC5wdXNoKFsiIiwiIl0pfWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldCYmc2V0VGltZW91dCgoKT0+e2EuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5sb2FkRGF0YShoKSxhLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCl9LDEwMCksYS5keW5hbWljQ2VsbFZhbGlkYXRpb25z'@;
put 'KCl9KSgpfW9uUGFyc2VkRGF0YXNldENsaWNrKGEpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLGEuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRIb3QoKX1vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsU3Vi'@;
put 'bWl0dGVkQ3N2RGF0YXNldHMoKSxhLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBhY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNl'@;
put 'dHMuZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoZD0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGQudHJpbSgpKSkuZmlsdGVyKGQ9PmQubGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4o'@;
put 'KXtpZighdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhYSYmYS5pbmNsdWRlcygiaHRDdXN0b21IaWRkZW4iKX1jYXRjaHtyZXR1cm4hMH19Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0'@;
put 'dXJuIHRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuZGF0YXNvdXJjZSYmYS5wYXJzZVJlc3VsdCYmYS5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVybiB0aGlzLmNzdkZpbGVzLmxlbmd0aD4wfWdldCBleGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4h'@;
put 'IXRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKGEpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFnZWRhdGEtJHt0aGlzLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpT'@;
put 'T04uc3RyaW5naWZ5KGEpKX1zdWJtaXRDc3ZGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIGEuY3N2RmlsZXMpe2NvbnN0IGY9YS5wYXJzZURhdGFzZXRGcm9tQ3N2TmFtZShoLmZpbGVOYW1lKTtsZXQgdixNO3lpZWxkIGEuc2Fz'@;
put 'U2VydmljZS51cGxvYWRGaWxlKCJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixbaF0se3RhYmxlOmZ9KS50aGVuKEk9Pnt0eXBlb2YgSS5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydDwidSI/dj1JLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0Ok09SS5hZGFwdGVyUmVzcG9uc2V9LEk9'@;
put 'Pntjb25zb2xlLmVycm9yKCJlcnIiLEkpLHY9SS5hZGFwdGVyUmVzcG9uc2V9KSxkLnB1c2goe3N1Y2Nlc3M6TSxlcnJvcjp2LGxpYmRzOmZ9KX1hLnN1Ym1pdHRlZENzdkRhdGFzZXRzPWR9KSgpfWZldGNoRGF0YXNldChhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2lmKGEp'@;
put 'cmV0dXJuIGQuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKHtMSUJEUzphLE9VVERFU1Q6IldFQiJ9LCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEpLnRoZW4oZj0+ZikuY2F0Y2goZj0+e2NvbnNvbGUud2FybihgRXJyb3IgZmV0Y2hpbmcgJHthfWAsZil9KX0pKCl9'@;
put 'c3VibWl0VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsZC5wYXJzZWREYXRhc2V0cyksZC5zdWJtaXRMb2FkaW5nPSEwO2ZvcihsZXQgaCBvZiBkLnBhcnNlZERhdGFzZXRzKXtpZighaC5w'@;
put 'YXJzZVJlc3VsdHx8IWguZGF0YXNvdXJjZXx8IWguaW5jbHVkZUluU3VibWlzc2lvbnx8YSYmIWEuaW5jbHVkZXMoaC5saWJkcykpY29udGludWU7bGV0IGY9e307ZC5zdWJtaXRSZWFzb25NZXNzYWdlPWQuc3VibWl0UmVhc29uTWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLGYuQUNUSU9O'@;
put 'PSJMT0FEIixmLk1FU1NBR0U9ZC5zdWJtaXRSZWFzb25NZXNzYWdlLGYuTElCRFM9aC5saWJkcztsZXQgdj1oLmRhdGFzb3VyY2U7aWYodil7dj12Lm1hcCh5ZT0+e2xldCBFZT15ZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSB5ZS5fX19fX0RFTEVURV9f'@;
put 'VEhJU19fUkVDT1JEX19fX18seWUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPUVlLE9iamVjdC5rZXlzKHllKS5tYXAoQmU9PnsibnVtZXJpYyI9PT1oLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlKT8udHlwZSYmIi4iPT09eWVbQmVdJiYoeWVbQmVdPW51bGwp'@;
put 'fSkseWV9KTtjb25zdCBNPXYuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IEksRyxyZTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShmLE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixoLmRhdGFzZXRJ'@;
put 'bmZvLmRhdGEuJHNhc2RhdGEsITAse2RlYnVnOiEwfSkudGhlbih5ZT0+e0c9eWUuYWRhcHRlclJlc3BvbnNlLHJlPXllLmxvZ30pLmNhdGNoKHllPT57Y29uc29sZS5lcnJvcigiZXJyIix5ZSksST15ZS5hZGFwdGVyUmVzcG9uc2UscmU9eWUubG9nfSksaC5zdWJtaXRSZXN1bHQ9e3N1Y2Nl'@;
put 'c3M6RyxlcnJvcjpJLGxvZzpyZSxwYXJzZVJlc3VsdDpoLnBhcnNlUmVzdWx0LGxpYmRzOmgubGliZHN9fX1kLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSxkLnN1Ym1pdExvYWRpbmc9ITEsZC5kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl9KSgpfXJlU3VibWl0VGFibGUoYSl7dmFyIGQ9'@;
put 'dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXt5aWVsZCBkLnN1Ym1pdFRhYmxlcyhbYS5saWJkc10pO2NvbnN0IGg9ZC5wYXJzZWREYXRhc2V0cy5maW5kKGY9PmYubGliZHM9PT1hLmxpYmRzKTtoJiYoaC5hY3RpdmU9ITApfSkoKX13b3JrYm9va0xvYWRlZCgpe3JldHVybiBuZXcgUHJvbWlz'@;
put 'ZSgoYSxkKT0+e3RoaXMuc2VsZWN0ZWRGaWxlfHxkKCJObyBmaWxlIHNlbGVjdGVkIiksdGhpcy53b3JrYm9va0ludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2smJihjbGVhckludGVydmFsKHRoaXMud29ya2Jvb2tJbnRlcnZhbCksYSh0aGlzLnNl'@;
put 'bGVjdGVkRmlsZS53b3JrYm9vaykpfSw1MDApfSl9cGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoYSl7Y29uc3QgZD1hLnNwbGl0KCIuIik7cmV0dXJuIGQucG9wKCksZC5qb2luKCIuIil9Z2V0RGF0YXNldHNGcm9tSG90KCl7cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldD90aGlz'@;
put 'LmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YSgpLmZpbHRlcihkPT5kWzBdPy5sZW5ndGgmJmRbMV0/Lmxlbmd0aCkubWFwKGQ9PmQ/YCR7ZFswXX0uJHtkWzFdfWA6IiIpOltdfXBhcnNlRXhjZWxTaGVldE5hbWVzKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1'@;
put 'cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZighYS5zZWxlY3RlZEZpbGUpcmV0dXJuIGQoW10pO2Euc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxTaGVldE5hbWVzKGEuc2VsZWN0ZWRGaWxlKS50aGVuKGY9PihmLnBhc3N3b3JkJiYoYS5zZWxlY3RlZEZpbGUucGFzc3dvcmQ9Zi5wYXNz'@;
put 'd29yZCksZChmLnNoZWV0TmFtZXMpKSkuY2F0Y2goZj0+aChmKSl9KX0pKCl9aXNWYWxpZERhdGFzZXRGb3JtYXQoYSl7cmV0dXJuL15cd3sxLDh9XC5cd3sxLDMyfSQvZ2ltLnRlc3QoYSl9aXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoYSl7Y29uc3QgZD1hLnNwbGl0KCIuIilbMF0saD1hLnNw'@;
put 'bGl0KCIuIilbMV07cmV0dXJuISF0aGlzLmxpYnNBbmRUYWJsZXNbZF0/LmluY2x1ZGVzKGgpfWJ1aWxkRGF0YXNldHNPYmplY3RzKGEpe2lmKCFhKXJldHVybltdO2NvbnN0IGQ9W107Zm9yKGxldCBoIG9mIGEpaWYoaC5kYXRhKXtjb25zdCBmPXsuLi5oLGhvdFRhYmxlOntkYXRhOmguZGF0'@;
put 'YS5zYXNkYXRhLHNldHRpbmdzOnt9fSxjb2xzOltdLGhlYWRlckNvbHVtbnM6W10saGVhZGVyUGtzOltdLGhlYWRlckFycmF5OltdLGRhdGVIZWFkZXJzOltdLHRpbWVIZWFkZXJzOltdLGRhdGVUaW1lSGVhZGVyczpbXSx4bFJ1bGVzOltdLGNvbHVtbkhlYWRlcjpbXX07Zi5jb2xzPWguZGF0'@;
put 'YS5jb2xzLGYuaGVhZGVyQ29sdW1ucz1oLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSxmLmhlYWRlclBrcz1oLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksLTEhPT1mLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09S'@;
put 'RF9fX19fIikmJihmLmhlYWRlckNvbHVtbnNbZi5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLGYuaGVhZGVyQXJyYXk9Zi5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZB'@;
put 'UlMmJihmLmRhdGVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJihmLnRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFt'@;
put 'c1swXS5EVFRNVkFSUyYmKGYuZGF0ZVRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksaC5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYoZi54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaC5kYXRhLnhsX3J1bGVzKSksZi5kY1Zh'@;
put 'bGlkYXRvcj1uZXcgVjZlKGguZGF0YS5zYXNwYXJhbXNbMF0saC5kYXRhLiRzYXNkYXRhLGguZGF0YS5jb2xzLGguZGF0YS5kcXJ1bGVzLGguZGF0YS5kcWRhdGEpLGYuY29sdW1uSGVhZGVyPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGQucHVzaChmKX1yZXR1'@;
put 'cm4gZH1kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMucGFyc2VkRGF0YXNldHMpYS5hY3RpdmU9ITF9ZGVzZWxlY3RBbGxTdWJtaXR0ZWRDc3ZEYXRhc2V0cygpe2ZvcihsZXQgYSBvZiB0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzKWEuYWN0aXZlPSExfXN0'@;
put 'YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKG1jKSwkZShjMSksJGUoYnUpLCRlKEloKSwkZShXNmUpLCRlKFZvKSwkZSh4bykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQi'@;
put 'XV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYoRmEoS3Z0LDcpLEZhKFh2dCw1KSxGYShxdnQsNSkpLDImZCl7bGV0IGY7eWkoZj1iaSgpKSYmKGguY29udGVudEFyZWFSZWY9Zi5maXJzdCkseWkoZj1iaSgpKSYmKGguaG90VGFibGVNYWluQ29tcG9uZW50PWYuZmlyc3QpLHlp'@;
put 'KGY9YmkoKSkmJihoLmhvdFRhYmxlVXNlckRhdGFzZXRDb21wb25lbnQ9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoImNvbnRlbnQtY29udGFpbmVyIixoLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRlY2xzOjM3LHZhcnM6MTgsY29u'@;
put 'c3RzOltbImNvbnRlbnRBcmVhIiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImhvdEluc3RhbmNlVXNlckRhdGFzZXQiLCIiXSxbImhvdEluc3RhbmNlTWFpbiIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2Vu'@;
put 'dGVyIG1iLTEwIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNs'@;
put 'ci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNs'@;
put 'ck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2RzLXRleHQiLCJib2R5IiwiY2xhc3MiLCJsaWNlbmNlLWxpbWl0LW5vdGljZSBtdC0wIG1iLTE1Iiw0LCJuZ0lmIl0sWzEsInRleHQtYXJlYS1mdWxsLXdpZHRoIl0sWyJmb3IiLCJmb3JtRmll'@;
put 'bGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjZHMtdGV4dCIsImNhcHRpb25fY2xl'@;
put 'YW4iLDEsIm10LTEwIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsInN1Ym1pdC10YWJsZXMiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayIs'@;
put 'ImNsckxvYWRpbmciXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCIsInRleHQtY2VudGVyIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm1iLTEwIl0sWyJp'@;
put 'ZCIsImJyb3dzZS1maWxlIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwibXVsdGlwbGUiLCIiLDMsImNoYW5nZSJdLFsiY2RzLXRleHQiLCJjYXB0aW9uIiwx'@;
put 'LCJtbC0xMCIsIm1iLTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwiYnRuLXNtIiwibXItMTAiLDMsImNsaWNrIl0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5v'@;
put 'ZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwibWwtNSJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDQsIm5nSWYiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJz'@;
put 'aGFwZSIsImNoZWNrLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0YWJs'@;
put 'ZSJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiLCJtdC0xMCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwzLCJjbGljayJdLFsxLCJuby10YWJsZS1zZWxl'@;
put 'Y3RlZCIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwidXBsb2FkLWNsb3VkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImQtZmxleCIs'@;
put 'ImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMTUiXSxbMSwiZGF0YXNldC1pbnB1dC13cmFwcGVyIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwidHJhc2giLCJzdGF0dXMiLCJkYW5nZXIi'@;
put 'LDEsIm1sLTUiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTIwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xNSJdLFsxLCJtYi01Il0sWyJpZCIsImhvdFRhYmxlVXNlckRhdGFzZXQiLDEs'@;
put 'Im10LTE1IiwzLCJzZXR0aW5ncyJdLFsxLCJkYXRhc2V0LXNlbGVjdGlvbi1hY3Rpb25zIiwidGV4dC1yaWdodCIsIm10LTEwIl0sWyJpZCIsImNvbnRpbnVlLWJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiLCJjbHJMb2FkaW5nIl0sWyJz'@;
put 'aGFwZSIsInByb2Nlc3Mtb24tdm0iLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVu'@;
put 'dC1iZXR3ZWVuIHAtMTAgbXQtMTUgc3VibWlzc2lvbi1yZXN1bHRzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVycm9yLWZpZWxkIG10LTE1Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSJdLFsiY2RzLXRleHQiLCJzZWNv'@;
put 'bmRhcnkgcmVndWxhciIsMSwibWItMTAiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzMsImNsclBvc2l0aW9uIiwiY2xyU2l6ZSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwibmFt'@;
put 'ZSIsIm9wdGlvbnMiLCJyZXF1aXJlZCIsIiIsInZhbHVlIiwib3B0aW9uMSIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCIsNCwibmdJZiJdLFsiaWQiLCJob3RUYWJsZSIsMSwibXQtMTUiLDMsInNldHRpbmdzIl0s'@;
put 'WzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSIsInN1Ym1pc3Npb24tcmVzdWx0cyJdLFsiY2xhc3MiLCJjb2xvci1ncmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5'@;
put 'IHJlZ3VsYXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTEwIiwzLCJjbGljayJdLFsxLCJjb2xvci1ncmVlbiJdLFsxLCJjb2xvci1y'@;
put 'ZWQiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImVycm9yLWZpZWxkIiwibXQtMTUiXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4'@;
put 'IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTUiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCJdLFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiXSxbImNkcy10ZXh0IiwiYm9keSIs'@;
put 'MSwibGljZW5jZS1saW1pdC1ub3RpY2UiLCJtdC0wIiwibWItMTUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJhcHAtc2lkZWJhciIpLGd0KDEsSnZ0LDIsMCwiZGl2Iiw0KSgyLFF2dCw1LDEsImRpdiIsNSkoMyxoeXQsNiwyLCJuZy1jb250'@;
put 'YWluZXIiLDYpKDQsbXl0LDUsMSwibmctY29udGFpbmVyIiw2KSxoZSgpLGRlKDUsImRpdiIsNywwKSg3LCJkaXYiLDgpKDgsImRpdiIsOSkoOSwicCIsMTApLE9lKDEwLCJNdWx0aSBEYXRhc2V0IExvYWQiKSxoZSgpKCksZ3QoMTEsdnl0LDQsMCwiZGl2IiwxMSkoMTIsenl0LDUsNCwibmct'@;
put 'Y29udGFpbmVyIiw2KSxoZSgpKCksZGUoMTMsImNsci1tb2RhbCIsMTIpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLnNob3dTdWJtaXRSZWFzb25Nb2RhbCxNKXx8KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPU0pLEN0KE0pfSksZGUoMTQs'@;
put 'ImgzIiwxMyksT2UoMTUpLGhlKCksZGUoMTYsImRpdiIsMTQpLGd0KDE3LFV5dCwyLDEsInAiLDE1KSxkZSgxOCwiZGl2IiwxNikoMTksImxhYmVsIiwxNyksT2UoMjAsIk1lc3NhZ2UiKSxoZSgpLGRlKDIxLCJ0ZXh0YXJlYSIsMTgpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXty'@;
put 'ZXR1cm4gd3QoZiksZ2koaC5zdWJtaXRSZWFzb25NZXNzYWdlLE0pfHwoaC5zdWJtaXRSZWFzb25NZXNzYWdlPU0pLEN0KE0pfSksaGUoKSgpLGRlKDIyLCJwIiwxOSksT2UoMjMsIiBUYWJsZXMgd2lsbCBiZSBzZW50IHNlcXVlbnRpYWxseSwgbG9ncyB3aWxsIGJlIGF2YWlsYWJsZSBhZnRl'@;
put 'ciBhbGwgdGFibGVzIGFyZSBzdWJtaXR0ZWQuICIpLGhlKCkoKSxkZSgyNCwiZGl2IiwyMCkoMjUsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEpfSksT2UoMjYsIiBDYW5jZWwgIiksaGUoKSxkZSgy'@;
put 'NywiYnV0dG9uIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdFRhYmxlcygpKX0pLE9lKDI4LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDI5LCJjbHItbW9kYWwiLDEyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4g'@;
put 'd3QoZiksZ2koaC5jc3ZTdWJtaXR0aW5nLE0pfHwoaC5jc3ZTdWJtaXR0aW5nPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxMyksT2UoMzEpLGhlKCksZGUoMzIsImRpdiIsMTQpKDMzLCJkaXYiLDIzKSxXdCgzNCwiY2xyLXNwaW5uZXIiLDI0KSxoZSgpLGRlKDM1LCJwIiwyNSksT2UoMzYsIiBU'@;
put 'aGlzIHdpbGwgdGFrZSBmZXcgbW9tZW50cyAiKSxoZSgpKCkoKX0yJmQmJihmZSgpLE1lKCJuZ0lmIixoLmRhdGFzZXRzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWgucGFyc2VkRGF0YXNldHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWguc3Vi'@;
put 'bWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoNyksTWUoIm5nSWYiLG51bGw9PT1oLnNlbGVjdGVkRmlsZSYmIWguc3VibWl0dGluZ0NzdiksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWguc2VsZWN0ZWRGaWxl'@;
put 'fHxoLnN1Ym1pdHRpbmdDc3YpLGZlKCksZmkoImNsck1vZGFsT3BlbiIsaC5zaG93U3VibWl0UmVhc29uTW9kYWwpLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksQnUoIiBTdWJtaXQgIixoLnRhYmxlc1RvU3VibWl0Lmxlbmd0aCwiICIsMT09PWgudGFibGVzVG9TdWJtaXQubGVu'@;
put 'Z3RoPyJ0YWJsZSI6InRhYmxlcyIsIiBmb3IgYXBwcm92YWwgIiksZmUoMiksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoNCksZmkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uTWVzc2FnZSksZmUoNCksTWUoImRpc2Fi'@;
put 'bGVkIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLGZpKCJjbHJNb2RhbE9wZW4iLGguY3N2U3VibWl0dGluZyksTWUoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSxCdSgiIFN1Ym1pdHRpbmcgIixoLmNzdkZpbGVzLmxl'@;
put 'bmd0aCwiIENTViAiLDE9PT1oLmNzdkZpbGVzLmxlbmd0aD8iZmlsZSI6ImZpbGVzIiwiICIpKX0sZGVwZW5kZW5jaWVzOlskZyxsMSxHbCxNZCx0bCx1WSxXbyxBaCxQZCxoZyxPbCxlbyxydSxZdSxWMCxIMixjbyxXTCxJZCx4aCxyTyx2NyxiNyx5NyxSZCxhNCxRcyxiYSxpWl0sZW5jYXBz'@;
put 'dWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dfV07bGV0IFd5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7'@;
put 'aW1wb3J0czpbQmMuZm9yQ2hpbGQoWnl0KSxCY119KX19cmV0dXJuIGN9KSgpO0VBKCk7bGV0IFl5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9QWkoe3R5cGU6Y30pfXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbWjksV3l0LGtjLEIwLFc5LExhLEFBLGNmXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgR3l0PVt7cGF0aDoiIixjb21wb25lbnQ6Qjl0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRhYmxlcyJ9LHtw'@;
put 'YXRoOiJ0YWJsZXMiLGNvbXBvbmVudDp4dnR9LHtwYXRoOiJleGNlbC1tYXBzIixsb2FkQ2hpbGRyZW46KCk9Pkd2dH0se3BhdGg6Im11bHRpLWxvYWQiLGxvYWRDaGlsZHJlbjooKT0+WXl0fV19XTtsZXQgJHl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltCYy5mb3JDaGlsZChHeXQpLEJjXX0pfX1yZXR1cm4gY30pKCksS3l0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlskeXQsa2MsQjAsVzksTGEsQUEsY2ZdfSl9fXJldHVybiBjfSkoKSxvdGU9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnJvdXRlcj1kfWNhbkFjdGl2YXRlKGEsZCl7cmV0dXJuISEodm9pZCAwIT09ZD8ucm9vdC5xdWVyeVBhcmFtcy5mb3JjZXx8ZD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZp'@;
put 'Y2UuaXNBcHBBY3RpdmF0ZWR8fG51bGwhPT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhMT09PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3Rp'@;
put 'dmF0ZShhLGQsaCxmKXtyZXR1cm4hKGg/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3JlZ2lzdGVyIil8fHRoaXMubGljZW5jZVNlcnZpY2UuYXBwTG9ja2VkLnZhbHVlKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShDcihjMSksQ3IoTG8pKX19'@;
put 'c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ybih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtsZXQgQzY9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhp'@;
put 'Z2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxs'@;
put 'LHhodG1sOiExfTtmdW5jdGlvbiBpOGUoYyl7QzY9Y31jb25zdCBhOGU9L1smPD4iJ10vLFh5dD1uZXcgUmVnRXhwKGE4ZS5zb3VyY2UsImciKSxzOGU9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLHF5dD1uZXcgUmVnRXhwKHM4ZS5zb3VyY2Us'@;
put 'ImciKSxKeXQ9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LG84ZT1jPT5KeXRbY107ZnVuY3Rpb24geDEoYyxsKXtpZihsKXtpZihhOGUudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKFh5dCxvOGUpfWVsc2UgaWYoczhlLnRlc3Qo'@;
put 'YykpcmV0dXJuIGMucmVwbGFjZShxeXQsbzhlKTtyZXR1cm4gY31jb25zdCBReXQ9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vZ2k7ZnVuY3Rpb24gbDhlKGMpe3JldHVybiBjLnJlcGxhY2UoUXl0LChsLGEpPT4iY29sb24iPT09KGE9YS50b0xvd2VyQ2FzZSgp'@;
put 'KT8iOiI6IiMiPT09YS5jaGFyQXQoMCk/IngiPT09YS5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK2Euc3Vic3RyaW5nKDEpKToiIil9Y29uc3QgZWJ0PS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9u'@;
put 'IEFsKGMsbCl7Yz0ic3RyaW5nIj09dHlwZW9mIGM/YzpjLnNvdXJjZSxsPWx8fCIiO2NvbnN0IGE9e3JlcGxhY2U6KGQsaCk9PihoPShoPWguc291cmNlfHxoKS5yZXBsYWNlKGVidCwiJDEiKSxjPWMucmVwbGFjZShkLGgpLGEpLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKGMsbCl9O3JldHVy'@;
put 'biBhfWNvbnN0IHRidD0vW15cdzpdL2csbmJ0PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gYzhlKGMsbCxhKXtpZihjKXtsZXQgZDt0cnl7ZD1kZWNvZGVVUklDb21wb25lbnQobDhlKGEpKS5yZXBsYWNlKHRidCwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1'@;
put 'cm4gbnVsbH1pZigwPT09ZC5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH1sJiYhbmJ0LnRlc3QoYSkmJihhPWZ1bmN0aW9uIHNidChjLGwpe2ROWyIgIitjXXx8KGROWyIgIitjXT1y'@;
put 'YnQudGVzdChjKT9jKyIvIjpmTihjLCIvIiwhMCkpO2NvbnN0IGE9LTE9PT0oYz1kTlsiICIrY10pLmluZGV4T2YoIjoiKTtyZXR1cm4iLy8iPT09bC5zdWJzdHJpbmcoMCwyKT9hP2w6Yy5yZXBsYWNlKGlidCwiJDEiKStsOiIvIj09PWwuY2hhckF0KDApP2E/bDpjLnJlcGxhY2UoYWJ0LCIk'@;
put 'MSIpK2w6YytsfShsLGEpKTt0cnl7YT1lbmNvZGVVUkkoYSkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gYX1jb25zdCBkTj17fSxyYnQ9L15bXjpdKzpcLypbXi9dKiQvLGlidD0vXihbXjpdKzopW1xzXFNdKiQvLGFidD0vXihbXjpdKzpcLypbXi9dKilb'@;
put 'XHNcU10qJC8saE49e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB1OGUoYyxsKXtjb25zdCBkPWMucmVwbGFjZSgvXHwvZywoZix2LE0pPT57bGV0IEk9ITEsRz12O2Zvcig7LS1HPj0wJiYiXFwiPT09TVtHXTspST0hSTtyZXR1cm4gST8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQg'@;
put 'aD0wO2lmKGRbMF0udHJpbSgpfHxkLnNoaWZ0KCksZC5sZW5ndGg+MCYmIWRbZC5sZW5ndGgtMV0udHJpbSgpJiZkLnBvcCgpLGQubGVuZ3RoPmwpZC5zcGxpY2UobCk7ZWxzZSBmb3IoO2QubGVuZ3RoPGw7KWQucHVzaCgiIik7Zm9yKDtoPGQubGVuZ3RoO2grKylkW2hdPWRbaF0udHJpbSgp'@;
put 'LnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiBkfWZ1bmN0aW9uIGZOKGMsbCxhKXtjb25zdCBkPWMubGVuZ3RoO2lmKDA9PT1kKXJldHVybiIiO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWMuY2hhckF0KGQtaC0xKTtpZihmIT09bHx8YSl7aWYoZj09PWx8fCFhKWJyZWFrO2grK31l'@;
put 'bHNlIGgrK31yZXR1cm4gYy5zbGljZSgwLGQtaCl9ZnVuY3Rpb24gZDhlKGMsbCxhLGQpe2NvbnN0IGg9bC5ocmVmLGY9bC50aXRsZT94MShsLnRpdGxlKTpudWxsLHY9Y1sxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYoIiEiIT09Y1swXS5jaGFyQXQoMCkpe2Quc3RhdGUuaW5M'@;
put 'aW5rPSEwO2NvbnN0IE09e3R5cGU6ImxpbmsiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6dix0b2tlbnM6ZC5pbmxpbmVUb2tlbnModil9O3JldHVybiBkLnN0YXRlLmluTGluaz0hMSxNfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDp4MSh2KX19Y2xh'@;
put 'c3MgcE57Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fEM2fXNwYWNlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMobCk7aWYoYSYmYVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzphWzBdfX1jb2RlKGwpe2NvbnN0IGE9dGhpcy5ydWxl'@;
put 'cy5ibG9jay5jb2RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6YVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP2Q6Zk4oZCwiXG4iKX19fWZlbmNl'@;
put 'cyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLGg9ZnVuY3Rpb24gY2J0KGMsbCl7Y29uc3QgYT1jLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobnVsbD09PWEpcmV0dXJuIGw7Y29uc3QgZD1hWzFdO3JldHVybiBsLnNwbGl0'@;
put 'KCJcbiIpLm1hcChoPT57Y29uc3QgZj1oLm1hdGNoKC9eXHMrLyk7aWYobnVsbD09PWYpcmV0dXJuIGg7Y29uc3Rbdl09ZjtyZXR1cm4gdi5sZW5ndGg+PWQubGVuZ3RoP2guc2xpY2UoZC5sZW5ndGgpOmh9KS5qb2luKCJcbiIpfShkLGFbM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3'@;
put 'OmQsbGFuZzphWzJdP2FbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVsyXSx0ZXh0Omh9fX1oZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS50cmltKCk7aWYoLyMkLy50'@;
put 'ZXN0KGQpKXtjb25zdCBoPWZOKGQsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaHx8LyAkLy50ZXN0KGgpKSYmKGQ9aC50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDphWzFdLmxlbmd0aCx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQp'@;
put 'fX19aHIobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaHIiLHJhdzphWzBdfX1ibG9ja3F1b3RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14g'@;
put 'Kj5bIFx0XT8vZ20sIiIpLGg9dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgZj10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGQpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1oLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6YVswXSx0b2tlbnM6Zix0'@;
put 'ZXh0OmR9fX1saXN0KGwpe2xldCBhPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGwpO2lmKGEpe2xldCBkLGgsZix2LE0sSSxHLHJlLHVlLHllLEVlLEJlLEdlPWFbMV0udHJpbSgpO2NvbnN0IHN0PUdlLmxlbmd0aD4xLHB0PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpzdCxzdGFy'@;
put 'dDpzdD8rR2Uuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O0dlPXN0P2BcXGR7MSw5fVxcJHtHZS5zbGljZSgtMSl9YDpgXFwke0dlfWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYoR2U9c3Q/R2U6IlsqKy1dIik7Y29uc3QgZHQ9bmV3IFJlZ0V4cChgXiggezAsM30ke0dlfSko'@;
put 'KD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7Zm9yKDtsJiYoQmU9ITEsKGE9ZHQuZXhlYyhsKSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QobCkpOyl7aWYoZD1hWzBdLGw9bC5zdWJzdHJpbmcoZC5sZW5ndGgpLHJlPWFbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQr'@;
put 'Lyxtbj0+IiAiLnJlcGVhdCgzKm1uLmxlbmd0aCkpLHVlPWwuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KHY9MixFZT1yZS50cmltTGVmdCgpKToodj1hWzJdLnNlYXJjaCgvW14gXS8pLHY9dj40PzE6dixFZT1yZS5zbGljZSh2KSx2Kz1hWzFdLmxlbmd0aCksST0h'@;
put 'MSwhcmUmJi9eICokLy50ZXN0KHVlKSYmKGQrPXVlKyJcbiIsbD1sLnN1YnN0cmluZyh1ZS5sZW5ndGgrMSksQmU9ITApLCFCZSl7Y29uc3QgbW49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIFx0XVteXFxuXSopPyg/Olxc'@;
put 'bnwkKSlgKSx3bj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksaG49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KD86XGBcYFxgfH5+filgKSxNbj1uZXcgUmVn'@;
put 'RXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0jYCk7Zm9yKDtsJiYoeWU9bC5zcGxpdCgiXG4iLDEpWzBdLHVlPXllLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHVlPXVlLnJlcGxhY2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksIShobi50ZXN0KHVlKXx8TW4udGVzdCh1'@;
put 'ZSl8fG1uLnRlc3QodWUpfHx3bi50ZXN0KGwpKSk7KXtpZih1ZS5zZWFyY2goL1teIF0vKT49dnx8IXVlLnRyaW0oKSlFZSs9IlxuIit1ZS5zbGljZSh2KTtlbHNle2lmKEl8fHJlLnNlYXJjaCgvW14gXS8pPj00fHxobi50ZXN0KHJlKXx8TW4udGVzdChyZSl8fHduLnRlc3QocmUpKWJyZWFr'@;
put 'O0VlKz0iXG4iK3VlfSFJJiYhdWUudHJpbSgpJiYoST0hMCksZCs9eWUrIlxuIixsPWwuc3Vic3RyaW5nKHllLmxlbmd0aCsxKSxyZT11ZS5zbGljZSh2KX19cHQubG9vc2V8fChHP3B0Lmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZCkmJihHPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKGg9'@;
put 'L15cW1sgeFhdXF0gLy5leGVjKEVlKSxoJiYoZj0iWyBdICIhPT1oWzBdLEVlPUVlLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSkscHQuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZCx0YXNrOiEhaCxjaGVja2VkOmYsbG9vc2U6ITEsdGV4dDpFZX0pLHB0LnJhdys9ZH1w'@;
put 'dC5pdGVtc1twdC5pdGVtcy5sZW5ndGgtMV0ucmF3PWQudHJpbVJpZ2h0KCkscHQuaXRlbXNbcHQuaXRlbXMubGVuZ3RoLTFdLnRleHQ9RWUudHJpbVJpZ2h0KCkscHQucmF3PXB0LnJhdy50cmltUmlnaHQoKTtjb25zdCBxdD1wdC5pdGVtcy5sZW5ndGg7Zm9yKE09MDtNPHF0O00rKylpZih0'@;
put 'aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxwdC5pdGVtc1tNXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhwdC5pdGVtc1tNXS50ZXh0LFtdKSwhcHQubG9vc2Upe2NvbnN0IG1uPXB0Lml0ZW1zW01dLnRva2Vucy5maWx0ZXIoaG49PiJzcGFjZSI9PT1obi50eXBlKSx3bj1tbi5sZW5n'@;
put 'dGg+MCYmbW4uc29tZShobj0+L1xuLipcbi8udGVzdChobi5yYXcpKTtwdC5sb29zZT13bn1pZihwdC5sb29zZSlmb3IoTT0wO008cXQ7TSsrKXB0Lml0ZW1zW01dLmxvb3NlPSEwO3JldHVybiBwdH19aHRtbChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGwpO2lmKGEp'@;
put 'e2NvbnN0IGQ9e3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzphWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09YVsxXXx8InNjcmlwdCI9PT1hWzFdfHwic3R5bGUiPT09YVsxXSksdGV4dDphWzBdfTtpZih0aGlzLm9wdGlvbnMuc2FuaXRpemUpe2NvbnN0IGg9dGhp'@;
put 'cy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOngxKGFbMF0pO2QudHlwZT0icGFyYWdyYXBoIixkLnRleHQ9aCxkLnRva2Vucz10aGlzLmxleGVyLmlubGluZShoKX1yZXR1cm4gZH19ZGVmKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhl'@;
put 'YyhsKTtpZihhKXtjb25zdCBkPWFbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGg9YVsyXT9hWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLGY9YVszXT9hWzNdLnN1YnN0cmluZygxLGFb'@;
put 'M10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6ZCxyYXc6YVswXSxocmVmOmgsdGl0bGU6Zn19fXRhYmxlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGwpO2lmKGEpe2Nv'@;
put 'bnN0IGQ9e3R5cGU6InRhYmxlIixoZWFkZXI6dThlKGFbMV0pLm1hcChoPT4oe3RleHQ6aH0pKSxhbGlnbjphWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czphWzNdJiZhWzNdLnRyaW0oKT9hWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0'@;
put 'KCJcbiIpOltdfTtpZihkLmhlYWRlci5sZW5ndGg9PT1kLmFsaWduLmxlbmd0aCl7ZC5yYXc9YVswXTtsZXQgZix2LE0sSSxoPWQuYWxpZ24ubGVuZ3RoO2ZvcihmPTA7ZjxoO2YrKylkLmFsaWduW2ZdPS9eICotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8u'@;
put 'dGVzdChkLmFsaWduW2ZdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KGQuYWxpZ25bZl0pPyJsZWZ0IjpudWxsO2ZvcihoPWQucm93cy5sZW5ndGgsZj0wO2Y8aDtmKyspZC5yb3dzW2ZdPXU4ZShkLnJvd3NbZl0sZC5oZWFkZXIubGVuZ3RoKS5tYXAoRz0+KHt0ZXh0Okd9KSk7Zm9yKGg9'@;
put 'ZC5oZWFkZXIubGVuZ3RoLHY9MDt2PGg7disrKWQuaGVhZGVyW3ZdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShkLmhlYWRlclt2XS50ZXh0KTtmb3IoaD1kLnJvd3MubGVuZ3RoLHY9MDt2PGg7disrKWZvcihJPWQucm93c1t2XSxNPTA7TTxJLmxlbmd0aDtNKyspSVtNXS50b2tlbnM9dGhp'@;
put 'cy5sZXhlci5pbmxpbmUoSVtNXS50ZXh0KTtyZXR1cm4gZH19fWxoZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOiI9Ij09PWFbMl0uY2hhckF0KDApPzE6Mix0ZXh0OmFb'@;
put 'MV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMV0pfX1wYXJhZ3JhcGgobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9IlxuIj09PWFbMV0uY2hhckF0KGFbMV0ubGVuZ3RoLTEpP2FbMV0uc2xpY2UoMCwtMSk6YVsxXTtyZXR1'@;
put 'cm57dHlwZToicGFyYWdyYXBoIixyYXc6YVswXSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19dGV4dChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6InRleHQiLHJhdzphWzBdLHRleHQ6YVswXSx0b2tlbnM6dGhp'@;
put 'cy5sZXhlci5pbmxpbmUoYVswXSl9fWVzY2FwZShsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OmFbMF0sdGV4dDp4MShhWzFdKX19dGFnKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMo'@;
put 'bCk7aWYoYSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRo'@;
put 'aXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9p'@;
put 'LnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzphWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9j'@;
put 'ayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6eDEoYVswXSk6YVswXX19bGluayhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhsKTtpZihhKXtjb25zdCBk'@;
put 'PWFbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChkKSl7aWYoIS8+JC8udGVzdChkKSlyZXR1cm47Y29uc3Qgdj1mTihkLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChkLmxlbmd0aC12Lmxlbmd0aCklMj09MClyZXR1cm59ZWxzZXtjb25zdCB2PWZ1bmN0aW9u'@;
put 'IG9idChjLGwpe2lmKC0xPT09Yy5pbmRleE9mKGxbMV0pKXJldHVybi0xO2NvbnN0IGE9Yy5sZW5ndGg7bGV0IGQ9MCxoPTA7Zm9yKDtoPGE7aCsrKWlmKCJcXCI9PT1jW2hdKWgrKztlbHNlIGlmKGNbaF09PT1sWzBdKWQrKztlbHNlIGlmKGNbaF09PT1sWzFdJiYoZC0tLGQ8MCkpcmV0dXJu'@;
put 'IGg7cmV0dXJuLTF9KGFbMl0sIigpIik7aWYodj4tMSl7Y29uc3QgST0oMD09PWFbMF0uaW5kZXhPZigiISIpPzU6NCkrYVsxXS5sZW5ndGgrdjthWzJdPWFbMl0uc3Vic3RyaW5nKDAsdiksYVswXT1hWzBdLnN1YnN0cmluZygwLEkpLnRyaW0oKSxhWzNdPSIifX1sZXQgaD1hWzJdLGY9IiI7'@;
put 'aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCB2PS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhoKTt2JiYoaD12WzFdLGY9dlszXSl9ZWxzZSBmPWFbM10/YVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaD1oLnRyaW0oKSwvXjwvLnRlc3QoaCkmJihoPXRoaXMu'@;
put 'b3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdChkKT9oLnNsaWNlKDEpOmguc2xpY2UoMSwtMSkpLGQ4ZShhLHtocmVmOmgmJmgucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpmJiZmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQx'@;
put 'Iil9LGFbMF0sdGhpcy5sZXhlcil9fXJlZmxpbmsobCxhKXtsZXQgZDtpZigoZD10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMobCkpfHwoZD10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhsKSkpe2xldCBoPShkWzJdfHxkWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lmKGg9'@;
put 'YVtoLnRvTG93ZXJDYXNlKCldLCFoKXtjb25zdCBmPWRbMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6Zix0ZXh0OmZ9fXJldHVybiBkOGUoZCxoLGRbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKGwsYSxkPSIiKXtsZXQgaD10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5s'@;
put 'RGVsaW0uZXhlYyhsKTtpZighKCFofHxoWzNdJiZkLm1hdGNoKC9bXHB7TH1ccHtOfV0vdSkpJiYoIWhbMV0mJiFoWzJdfHwhZHx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhkKSkpe2NvbnN0IHY9aFswXS5sZW5ndGgtMTtsZXQgTSxJLEc9dixyZT0wO2NvbnN0IHVlPSIq'@;
put 'Ij09PWhbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVuZDtmb3IodWUubGFzdEluZGV4PTAsYT1hLnNsaWNlKC0xKmwubGVuZ3RoK3YpO251bGwhPShoPXVlLmV4ZWMoYSkpOyl7aWYoTT1oWzFdfHxo'@;
put 'WzJdfHxoWzNdfHxoWzRdfHxoWzVdfHxoWzZdLCFNKWNvbnRpbnVlO2lmKEk9TS5sZW5ndGgsaFszXXx8aFs0XSl7Rys9STtjb250aW51ZX1pZigoaFs1XXx8aFs2XSkmJnYlMyYmISgoditJKSUzKSl7cmUrPUk7Y29udGludWV9aWYoRy09SSxHPjApY29udGludWU7ST1NYXRoLm1pbihJLEkr'@;
put 'RytyZSk7Y29uc3QgeWU9bC5zbGljZSgwLHYraC5pbmRleCtJKzEpO2lmKE1hdGgubWluKHYsSSklMil7Y29uc3QgQmU9eWUuc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6eWUsdGV4dDpCZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoQmUpfX1jb25zdCBFZT15ZS5z'@;
put 'bGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6eWUsdGV4dDpFZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoRWUpfX19fWNvZGVzcGFuKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0ucmVwbGFjZSgvXG4v'@;
put 'ZywiICIpO2NvbnN0IGg9L1teIF0vLnRlc3QoZCksZj0vXiAvLnRlc3QoZCkmJi8gJC8udGVzdChkKTtyZXR1cm4gaCYmZiYmKGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0aC0xKSksZD14MShkLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzphWzBdLHRleHQ6ZH19fWJyKGwpe2NvbnN0IGE9dGhp'@;
put 'cy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJiciIscmF3OmFbMF19fWRlbChsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImRlbCIscmF3OmFbMF0sdGV4dDphWzJdLHRva2Vuczp0aGlzLmxleGVyLmlu'@;
put 'bGluZVRva2VucyhhWzJdKX19YXV0b2xpbmsobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMobCk7aWYoZCl7bGV0IGgsZjtyZXR1cm4iQCI9PT1kWzJdPyhoPXgxKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzFdKTpkWzFdKSxmPSJtYWlsdG86IitoKTooaD14'@;
put 'MShkWzFdKSxmPWgpLHt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19dXJsKGwsYSl7bGV0IGQ7aWYoZD10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhsKSl7bGV0IGgsZjtpZigiQCI9PT1kWzJdKWg9eDEo'@;
put 'dGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMF0pOmRbMF0pLGY9Im1haWx0bzoiK2g7ZWxzZXtsZXQgdjtkb3t2PWRbMF0sZFswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZFswXSlbMF19d2hpbGUodiE9PWRbMF0pO2g9eDEoZFswXSksZj0id3d3LiI9PT1kWzFdPyJodHRw'@;
put 'Oi8vIitkWzBdOmRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX1pbmxpbmVUZXh0KGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMobCk7aWYoZCl7bGV0IGg7cmV0'@;
put 'dXJuIGg9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZFswXSk6eDEoZFswXSk6ZFswXTp4MSh0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/YShkWzBdKTpkWzBdKSx7'@;
put 'dHlwZToidGV4dCIscmF3OmRbMF0sdGV4dDpofX19fWNvbnN0IHBzPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5d'@;
put 'KikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxz'@;
put 'fCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5d'@;
put 'W1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZyko'@;
put 'PzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2Ny'@;
put 'aXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98'@;
put 'ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTpoTixsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2tx'@;
put 'dW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkv'@;
put 'fTtwcy5kZWY9QWwocHMuZGVmKS5yZXBsYWNlKCJsYWJlbCIscHMuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIscHMuX3RpdGxlKS5nZXRSZWdleCgpLHBzLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxwcy5saXN0SXRlbVN0YXJ0PUFsKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgi'@;
put 'YnVsbCIscHMuYnVsbGV0KS5nZXRSZWdleCgpLHBzLmxpc3Q9QWwocHMubGlzdCkucmVwbGFjZSgvYnVsbC9nLHBzLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJk'@;
put 'ZWYiLCJcXG4rKD89Iitwcy5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxwcy5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8'@;
put 'ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJh'@;
put 'bXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixwcy5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8scHMuaHRtbD1BbChwcy5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIscHMuX2Nv'@;
put 'bW1lbnQpLnJlcGxhY2UoInRhZyIscHMuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxwcy5saGVhZGluZz1BbChwcy5saGVhZGluZyku'@;
put 'cmVwbGFjZSgvYnVsbC9nLHBzLmJ1bGxldCkuZ2V0UmVnZXgoKSxwcy5wYXJhZ3JhcGg9QWwocHMuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLHBzLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIs'@;
put 'IiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/'@;
put 'OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixwcy5fdGFnKS5nZXRSZWdleCgpLHBzLmJsb2NrcXVvdGU9QWwocHMuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixwcy5wYXJhZ3JhcGgpLmdldFJlZ2V4'@;
put 'KCkscHMubm9ybWFsPXsuLi5wc30scHMuZ2ZtPXsuLi5wcy5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLipcXHwuKilcXG4gezAsM30oPzpcXHwgKik/KDo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3Rl'@;
put 'fGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifSxwcy5nZm0udGFibGU9QWwocHMuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIscHMuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5y'@;
put 'ZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86'@;
put 'ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIscHMuX3RhZykuZ2V0UmVnZXgoKSxwcy5nZm0ucGFyYWdyYXBoPUFsKHBzLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixwcy5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7'@;
put 'MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIscHMuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBs'@;
put 'YWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIscHMuX3RhZykuZ2V0UmVnZXgoKSxwcy5wZWRhbnRpYz17Li4u'@;
put 'cHMubm9ybWFsLGh0bWw6QWwoIl4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxh'@;
put 'Y2UoImNvbW1lbnQiLHBzLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5z'@;
put 'fGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpo'@;
put 'TixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpBbChwcy5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLHBzLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLHBzLmxoZWFk'@;
put 'aW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3QgRGE9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5f'@;
put 'YHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6aE4sdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58Xjwh'@;
put 'W2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0o'@;
put 'PzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlte'@;
put 'XypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5j'@;
put 'dF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/'@;
put 'PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwp'@;
put 'XG4oPyFccyokKS8sZGVsOmhOLHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307ZnVuY3Rpb24gdWJ0KGMpe3JldHVy'@;
put 'biBjLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQiKS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQxXHUyMDE4IikucmVwbGFjZSgvJy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFc'@;
put 'dTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpfWZ1bmN0aW9uIGg4ZShjKXtsZXQgYSxkLGw9IiI7Y29uc3QgaD1jLmxlbmd0aDtmb3IoYT0wO2E8aDthKyspZD1jLmNoYXJDb2RlQXQoYSksTWF0aC5yYW5kb20oKT4uNSYmKGQ9IngiK2Qu'@;
put 'dG9TdHJpbmcoMTYpKSxsKz0iJiMiK2QrIjsiO3JldHVybiBsfURhLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IixEYS5wdW5jdHVhdGlvbj1BbChEYS5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csRGEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLERhLmJs'@;
put 'b2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxEYS5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2csRGEuX2VzY2FwZXM9L1xcKFtwdW5jdF0pL2csRGEuX2NvbW1lbnQ9QWwocHMuX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIs'@;
put 'Ii0tXHgzZSIpLmdldFJlZ2V4KCksRGEuZW1TdHJvbmcubERlbGltPUFsKERhLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxhY2UoL3B1bmN0L2csRGEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLERhLmVtU3Ryb25nLnJEZWxpbUFzdD1BbChEYS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1Iiku'@;
put 'cmVwbGFjZSgvcHVuY3QvZyxEYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksRGEuZW1TdHJvbmcuckRlbGltVW5kPUFsKERhLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLERhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxEYS5hbnlQdW5jdHVhdGlvbj1BbChE'@;
put 'YS5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLERhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxEYS5fZXNjYXBlcz1BbChEYS5fZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLERhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxEYS5fc2NoZW1lPS9bYS16QS1a'@;
put 'XVthLXpBLVowLTkrLi1dezEsMzF9LyxEYS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8p'@;
put 'Kyg/IVstX10pLyxEYS5hdXRvbGluaz1BbChEYS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixEYS5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsRGEuX2VtYWlsKS5nZXRSZWdleCgpLERhLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1c'@;
put 'cyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sRGEudGFnPUFsKERhLnRhZykucmVwbGFjZSgiY29tbWVudCIsRGEuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsRGEuX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKSxEYS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18'@;
put 'XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sRGEuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sRGEuX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8sRGEubGluaz1BbChEYS5saW5r'@;
put 'KS5yZXBsYWNlKCJsYWJlbCIsRGEuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixEYS5faHJlZikucmVwbGFjZSgidGl0bGUiLERhLl90aXRsZSkuZ2V0UmVnZXgoKSxEYS5yZWZsaW5rPUFsKERhLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixEYS5fbGFiZWwpLnJlcGxhY2UoInJlZiIscHMuX2xh'@;
put 'YmVsKS5nZXRSZWdleCgpLERhLm5vbGluaz1BbChEYS5ub2xpbmspLnJlcGxhY2UoInJlZiIscHMuX2xhYmVsKS5nZXRSZWdleCgpLERhLnJlZmxpbmtTZWFyY2g9QWwoRGEucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLERhLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIs'@;
put 'RGEubm9saW5rKS5nZXRSZWdleCgpLERhLm5vcm1hbD17Li4uRGF9LERhLnBlZGFudGljPXsuLi5EYS5ub3JtYWwsc3Ryb25nOntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVu'@;
put 'ZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5r'@;
put 'OkFsKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixEYS5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpBbCgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsRGEuX2xhYmVsKS5nZXRSZWdleCgpfSxEYS5nZm09ey4uLkRh'@;
put 'Lm5vcm1hbCxlc2NhcGU6QWwoRGEuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0'@;
put 'cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxz'@;
put 'fl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58'@;
put 'JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSxEYS5nZm0udXJsPUFsKERhLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsRGEuZ2ZtLl9leHRlbmRlZF9lbWFpbCku'@;
put 'Z2V0UmVnZXgoKSxEYS5icmVha3M9ey4uLkRhLmdmbSxicjpBbChEYS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6QWwoRGEuZ2ZtLnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtj'@;
put 'bGFzcyBzNHtjb25zdHJ1Y3RvcihsKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1sfHxDNix0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBwTix0aGlzLnRva2VuaXplcj10'@;
put 'aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IGE9e2Jsb2NrOnBz'@;
put 'Lm5vcm1hbCxpbmxpbmU6RGEubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGEuYmxvY2s9cHMucGVkYW50aWMsYS5pbmxpbmU9RGEucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihhLmJsb2NrPXBzLmdmbSxhLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP0RhLmJyZWFrczpE'@;
put 'YS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWF9c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazpwcyxpbmxpbmU6RGF9fXN0YXRpYyBsZXgobCxhKXtyZXR1cm4gbmV3IHM0KGEpLmxleChsKX1zdGF0aWMgbGV4SW5saW5lKGwsYSl7cmV0dXJuIG5ldyBzNChhKS5pbmxpbmVUb2tl'@;
put 'bnMobCl9bGV4KGwpe2xldCBhO2ZvcihsPWwucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMobCx0aGlzLnRva2Vucyk7YT10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKGEuc3JjLGEudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9'@;
put 'YmxvY2tUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsdjtmb3IobD10aGlzLm9wdGlvbnMucGVkYW50aWM/bC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6bC5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChNLEksRyk9PkkrIiAgICAiLnJlcGVhdChHLmxlbmd0aCkp'@;
put 'O2w7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKE09PiEhKGQ9TS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxh'@;
put 'LnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuc3BhY2UobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSwxPT09ZC5yYXcubGVuZ3RoJiZhLmxlbmd0aD4wP2FbYS5sZW5ndGgtMV0ucmF3Kz0iXG4iOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVy'@;
put 'LmNvZGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/YS5wdXNoKGQpOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhp'@;
put 'cy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5mZW5jZXMobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5oZWFkaW5nKGwpKXtsPWwuc3Vic3Ry'@;
put 'aW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3'@;
put 'Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGlzdChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmh0bWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1'@;
put 'c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWYobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/dGhpcy50b2tlbnMubGlua3NbZC50YWddfHwodGhpcy50b2tl'@;
put 'bnMubGlua3NbZC50YWddPXtocmVmOmQuaHJlZix0aXRsZTpkLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6'@;
put 'ZXIudGFibGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVu'@;
put 'c2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2spe2xldCBNPTEvMDtjb25zdCBJPWwuc2xpY2UoMSk7bGV0IEc7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtHPXJlLmNhbGwoe2xleGVyOnRoaXN9LEkpLCJudW1i'@;
put 'ZXIiPT10eXBlb2YgRyYmRz49MCYmKE09TWF0aC5taW4oTSxHKSl9KSxNPDEvMCYmTT49MCYmKGY9bC5zdWJzdHJpbmcoMCxNKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKGQ9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGYpKSl7aD1hW2EubGVuZ3RoLTFdLHYmJiJwYXJhZ3JhcGgiPT09aC50'@;
put 'eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCksdj1mLmxlbmd0aCE9PWwubGVuZ3RoLGw9bC5zdWJzdHJp'@;
put 'bmcoZC5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRleHQobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5s'@;
put 'aW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgTT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2ls'@;
put 'ZW50KXtjb25zb2xlLmVycm9yKE0pO2JyZWFrfXRocm93IG5ldyBFcnJvcihNKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLGF9aW5saW5lKGwsYT1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmwsdG9rZW5zOmF9KSxhfWlubGluZVRva2VucyhsLGE9W10pe2xldCBk'@;
put 'LGgsZixNLEksRyx2PWw7aWYodGhpcy50b2tlbnMubGlua3Mpe2NvbnN0IHJlPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihyZS5sZW5ndGg+MClmb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWModikpOylyZS5pbmNs'@;
put 'dWRlcyhNWzBdLnNsaWNlKE1bMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJih2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1m'@;
put 'b3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyh2KSk7KXY9di5zbGljZSgwLE0uaW5kZXgpKyJbIisiYSIucmVwZWF0KE1bMF0ubGVuZ3RoLTIpKyJdIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFz'@;
put 'dEluZGV4KTtmb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKHYpKTspdj12LnNsaWNlKDAsTS5pbmRleCkrIisrIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zv'@;
put 'cig7bDspaWYoSXx8KEc9IiIpLEk9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShyZT0+ISEoZD1yZS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJz'@;
put 'dHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFnKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxl'@;
put 'bmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpbmsobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxh'@;
put 'LnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5yZWZsaW5rKGwsdGhpcy50b2tlbnMubGlua3MpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50'@;
put 'ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGwsdixHKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGwpKXtsPWwuc3Vic3RyaW5nKGQu'@;
put 'cmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYnIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1'@;
put 'c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5hdXRvbGluayhsLGg4ZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYoZD10aGlzLnRva2VuaXplci51cmwobCxoOGUpKSl7bD1sLnN1YnN0cmlu'@;
put 'ZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgcmU9MS8wO2NvbnN0IHVlPWwuc2xpY2UoMSk7bGV0IHllO3RoaXMub3B0aW9ucy5leHRlbnNpb25z'@;
put 'LnN0YXJ0SW5saW5lLmZvckVhY2goZnVuY3Rpb24oRWUpe3llPUVlLmNhbGwoe2xleGVyOnRoaXN9LHVlKSwibnVtYmVyIj09dHlwZW9mIHllJiZ5ZT49MCYmKHJlPU1hdGgubWluKHJlLHllKSl9KSxyZTwxLzAmJnJlPj0wJiYoZj1sLnN1YnN0cmluZygwLHJlKzEpKX1pZihkPXRoaXMudG9r'@;
put 'ZW5pemVyLmlubGluZVRleHQoZix1YnQpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksIl8iIT09ZC5yYXcuc2xpY2UoLTEpJiYoRz1kLnJhdy5zbGljZSgtMSkpLEk9ITAsaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0'@;
put 'KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgcmU9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihyZSk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKHJlKX19cmV0dXJuIGF9fWNsYXNzIGdO'@;
put 'e2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxDNn1jb2RlKGwsYSxkKXtjb25zdCBoPShhfHwiIikubWF0Y2goL1xTKi8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2NvbnN0IGY9dGhpcy5vcHRpb25zLmhpZ2hsaWdodChsLGgpO251bGwhPWYmJmYhPT1sJiYoZD0hMCxs'@;
put 'PWYpfXJldHVybiBsPWwucmVwbGFjZSgvXG4kLywiIikrIlxuIixoPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3gxKGgpKyciPicrKGQ/bDp4MShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+IisoZD9sOngxKGwsITApKSsiPC9jb2Rl'@;
put 'PjwvcHJlPlxuIn1ibG9ja3F1b3RlKGwpe3JldHVybmA8YmxvY2txdW90ZT5cbiR7bH08L2Jsb2NrcXVvdGU+XG5gfWh0bWwobCxhKXtyZXR1cm4gbH1oZWFkaW5nKGwsYSxkLGgpe3JldHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzP2A8aCR7YX0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRl'@;
put 'clByZWZpeCtoLnNsdWcoZCl9Ij4ke2x9PC9oJHthfT5cbmA6YDxoJHthfT4ke2x9PC9oJHthfT5cbmB9aHIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn1saXN0KGwsYSxkKXtjb25zdCBoPWE/Im9sIjoidWwiO3JldHVybiI8IitoKyhhJiYxIT09ZD8n'@;
put 'IHN0YXJ0PSInK2QrJyInOiIiKSsiPlxuIitsKyI8LyIraCsiPlxuIn1saXN0aXRlbShsKXtyZXR1cm5gPGxpPiR7bH08L2xpPlxuYH1jaGVja2JveChsKXtyZXR1cm4iPGlucHV0ICIrKGw/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0'@;
put 'aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifXBhcmFncmFwaChsKXtyZXR1cm5gPHA+JHtsfTwvcD5cbmB9dGFibGUobCxhKXtyZXR1cm4gYSYmKGE9YDx0Ym9keT4ke2F9PC90Ym9keT5gKSwiPHRhYmxlPlxuPHRoZWFkPlxuIitsKyI8L3RoZWFkPlxuIithKyI8L3RhYmxlPlxuIn10YWJsZXJv'@;
put 'dyhsKXtyZXR1cm5gPHRyPlxuJHtsfTwvdHI+XG5gfXRhYmxlY2VsbChsLGEpe2NvbnN0IGQ9YS5oZWFkZXI/InRoIjoidGQiO3JldHVybihhLmFsaWduP2A8JHtkfSBhbGlnbj0iJHthLmFsaWdufSI+YDpgPCR7ZH0+YCkrbCtgPC8ke2R9PlxuYH1zdHJvbmcobCl7cmV0dXJuYDxzdHJvbmc+'@;
put 'JHtsfTwvc3Ryb25nPmB9ZW0obCl7cmV0dXJuYDxlbT4ke2x9PC9lbT5gfWNvZGVzcGFuKGwpe3JldHVybmA8Y29kZT4ke2x9PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8YnIvPiI6Ijxicj4ifWRlbChsKXtyZXR1cm5gPGRlbD4ke2x9PC9kZWw+YH1saW5rKGws'@;
put 'YSxkKXtpZihudWxsPT09KGw9YzhlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9JzxhIGhyZWY9IicrbCsnIic7cmV0dXJuIGEmJihoKz0nIHRpdGxlPSInK2ErJyInKSxoKz0iPiIrZCsiPC9hPiIsaH1pbWFnZShsLGEsZCl7'@;
put 'aWYobnVsbD09PShsPWM4ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPWA8aW1nIHNyYz0iJHtsfSIgYWx0PSIke2R9ImA7cmV0dXJuIGEmJihoKz1gIHRpdGxlPSIke2F9ImApLGgrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4i'@;
put 'OiI+IixofXRleHQobCl7cmV0dXJuIGx9fWNsYXNzIGN0ZXtzdHJvbmcobCl7cmV0dXJuIGx9ZW0obCl7cmV0dXJuIGx9Y29kZXNwYW4obCl7cmV0dXJuIGx9ZGVsKGwpe3JldHVybiBsfWh0bWwobCl7cmV0dXJuIGx9dGV4dChsKXtyZXR1cm4gbH1saW5rKGwsYSxkKXtyZXR1cm4iIitkfWlt'@;
put 'YWdlKGwsYSxkKXtyZXR1cm4iIitkfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIHV0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17fX1zZXJpYWxpemUobCl7cmV0dXJuIGwudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1c'@;
put 'dTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2csIi0iKX1nZXROZXh0U2FmZVNsdWcobCxhKXtsZXQgZD1sLGg9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpe2g9dGhpcy5zZWVuW2xdO2Rve2grKyxk'@;
put 'PWwrIi0iK2h9d2hpbGUodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKX1yZXR1cm4gYXx8KHRoaXMuc2VlbltsXT1oLHRoaXMuc2VlbltkXT0wKSxkfXNsdWcobCxhPXt9KXtjb25zdCBkPXRoaXMuc2VyaWFsaXplKGwpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhkLGEuZHJ5cnVu'@;
put 'KX19Y2xhc3MgbzR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fEM2LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBnTix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRp'@;
put 'b25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBjdGUsdGhpcy5zbHVnZ2VyPW5ldyB1dGV9c3RhdGljIHBhcnNlKGwsYSl7cmV0dXJuIG5ldyBvNChhKS5wYXJzZShsKX1zdGF0aWMgcGFyc2VJbmxpbmUobCxhKXtyZXR1cm4gbmV3IG80KGEpLnBhcnNlSW5saW5lKGwpfXBhcnNlKGwsYT0hMCl7'@;
put 'bGV0IGgsZix2LE0sSSxHLHJlLHVlLHllLEVlLEJlLEdlLHN0LHB0LGR0LHF0LG1uLHduLGhuLGQ9IiI7Y29uc3QgTW49bC5sZW5ndGg7Zm9yKGg9MDtoPE1uO2grKylpZihFZT1sW2hdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMm'@;
put 'JnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tFZS50eXBlXSYmKGhuPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tFZS50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sRWUpLCExIT09aG58fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwi'@;
put 'YmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKEVlLnR5cGUpKSlkKz1obnx8IiI7ZWxzZSBzd2l0Y2goRWUudHlwZSl7Y2FzZSJzcGFjZSI6Y29udGludWU7Y2FzZSJociI6ZCs9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlO2Nhc2UiaGVh'@;
put 'ZGluZyI6ZCs9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zKSxFZS5kZXB0aCxsOGUodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6ZCs9dGhpcy5yZW5k'@;
put 'ZXJlci5jb2RlKEVlLnRleHQsRWUubGFuZyxFZS5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IodWU9IiIscmU9IiIsTT1FZS5oZWFkZXIubGVuZ3RoLGY9MDtmPE07ZisrKXJlKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKEVlLmhlYWRlcltmXS50'@;
put 'b2tlbnMpLHtoZWFkZXI6ITAsYWxpZ246RWUuYWxpZ25bZl19KTtmb3IodWUrPXRoaXMucmVuZGVyZXIudGFibGVyb3cocmUpLHllPSIiLE09RWUucm93cy5sZW5ndGgsZj0wO2Y8TTtmKyspe2ZvcihHPUVlLnJvd3NbZl0scmU9IiIsST1HLmxlbmd0aCx2PTA7djxJO3YrKylyZSs9dGhpcy5y'@;
put 'ZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShHW3ZdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpFZS5hbGlnblt2XX0pO3llKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHJlKX1kKz10aGlzLnJlbmRlcmVyLnRhYmxlKHVlLHllKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUi'@;
put 'OnllPXRoaXMucGFyc2UoRWUudG9rZW5zKSxkKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoeWUpO2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKEJlPUVlLm9yZGVyZWQsR2U9RWUuc3RhcnQsc3Q9RWUubG9vc2UsTT1FZS5pdGVtcy5sZW5ndGgseWU9IiIsZj0wO2Y8TTtmKyspZHQ9RWUuaXRl'@;
put 'bXNbZl0scXQ9ZHQuY2hlY2tlZCxtbj1kdC50YXNrLHB0PSIiLGR0LnRhc2smJih3bj10aGlzLnJlbmRlcmVyLmNoZWNrYm94KHF0KSxzdD9kdC50b2tlbnMubGVuZ3RoPjAmJiJwYXJhZ3JhcGgiPT09ZHQudG9rZW5zWzBdLnR5cGU/KGR0LnRva2Vuc1swXS50ZXh0PXduKyIgIitkdC50b2tl'@;
put 'bnNbMF0udGV4dCxkdC50b2tlbnNbMF0udG9rZW5zJiZkdC50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiYidGV4dCI9PT1kdC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihkdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9d24rIiAiK2R0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkp'@;
put 'OmR0LnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OndufSk6cHQrPXduKSxwdCs9dGhpcy5wYXJzZShkdC50b2tlbnMsc3QpLHllKz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKHB0LG1uLHF0KTtkKz10aGlzLnJlbmRlcmVyLmxpc3QoeWUsQmUsR2UpO2NvbnRpbnVlO2Nhc2UiaHRt'@;
put 'bCI6ZCs9dGhpcy5yZW5kZXJlci5odG1sKEVlLnRleHQsRWUuYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpkKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2VucykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKHllPUVlLnRva2Vucz90aGlz'@;
put 'LnBhcnNlSW5saW5lKEVlLnRva2Vucyk6RWUudGV4dDtoKzE8TW4mJiJ0ZXh0Ij09PWxbaCsxXS50eXBlOylFZT1sWysraF0seWUrPSJcbiIrKEVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKEVlLnRva2Vucyk6RWUudGV4dCk7ZCs9YT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh5ZSk6eWU7'@;
put 'Y29udGludWU7ZGVmYXVsdDp7Y29uc3QgTXI9J1Rva2VuIHdpdGggIicrRWUudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoTXIpO3Rocm93IG5ldyBFcnJvcihNcil9fXJldHVybiBkfXBhcnNlSW5s'@;
put 'aW5lKGwsYSl7YT1hfHx0aGlzLnJlbmRlcmVyO2xldCBoLGYsdixkPSIiO2NvbnN0IE09bC5sZW5ndGg7Zm9yKGg9MDtoPE07aCsrKWlmKGY9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5z'@;
put 'aW9ucy5yZW5kZXJlcnNbZi50eXBlXSYmKHY9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGYpLCExIT09dnx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRl'@;
put 'bCIsInRleHQiXS5pbmNsdWRlcyhmLnR5cGUpKSlkKz12fHwiIjtlbHNlIHN3aXRjaChmLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOmQrPWEudGV4dChmLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6ZCs9YS5odG1sKGYudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpkKz1hLmxpbmsoZi5o'@;
put 'cmVmLGYudGl0bGUsdGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJpbWFnZSI6ZCs9YS5pbWFnZShmLmhyZWYsZi50aXRsZSxmLnRleHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpkKz1hLnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNl'@;
put 'ImVtIjpkKz1hLmVtKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOmQrPWEuY29kZXNwYW4oZi50ZXh0KTticmVhaztjYXNlImJyIjpkKz1hLmJyKCk7YnJlYWs7Y2FzZSJkZWwiOmQrPWEuZGVsKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkp'@;
put 'O2JyZWFrO2RlZmF1bHQ6e2NvbnN0IEk9J1Rva2VuIHdpdGggIicrZi50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihJKTt0aHJvdyBuZXcgRXJyb3IoSSl9fXJldHVybiBkfX1jbGFzcyBtTntjb25z'@;
put 'dHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8QzZ9c3RhdGljIHBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKTtwcmVwcm9jZXNzKGwpe3JldHVybiBsfXBvc3Rwcm9jZXNzKGwpe3JldHVybiBsfX1jb25zdCBHOT1uZXcgY2xhc3MgZGJ0e2Rl'@;
put 'ZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJl'@;
put 'bmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07b3B0aW9ucz10aGlzLnNldE9wdGlvbnM7cGFyc2U9dGhpcy4jZShzNC5sZXgsbzQucGFyc2UpO3BhcnNl'@;
put 'SW5saW5lPXRoaXMuI2UoczQubGV4SW5saW5lLG80LnBhcnNlSW5saW5lKTtQYXJzZXI9bzQ7cGFyc2VyPW80LnBhcnNlO1JlbmRlcmVyPWdOO1RleHRSZW5kZXJlcj1jdGU7TGV4ZXI9czQ7bGV4ZXI9czQubGV4O1Rva2VuaXplcj1wTjtTbHVnZ2VyPXV0ZTtIb29rcz1tTjtjb25zdHJ1Y3Rv'@;
put 'ciguLi5sKXt0aGlzLnVzZSguLi5sKX13YWxrVG9rZW5zKGwsYSl7bGV0IGQ9W107Zm9yKGNvbnN0IGggb2YgbClzd2l0Y2goZD1kLmNvbmNhdChhLmNhbGwodGhpcyxoKSksaC50eXBlKXtjYXNlInRhYmxlIjpmb3IoY29uc3QgZiBvZiBoLmhlYWRlcilkPWQuY29uY2F0KHRoaXMud2Fsa1Rv'@;
put 'a2VucyhmLnRva2VucyxhKSk7Zm9yKGNvbnN0IGYgb2YgaC5yb3dzKWZvcihjb25zdCB2IG9mIGYpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnModi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UibGlzdCI6ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC5pdGVtcyxhKSk7YnJlYWs7ZGVmYXVs'@;
put 'dDp0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2VucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0uZm9yRWFjaChm'@;
put 'PT57ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaFtmXSxhKSl9KTpoLnRva2VucyYmKGQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGgudG9rZW5zLGEpKSl9cmV0dXJuIGR9dXNlKC4uLmwpe2NvbnN0IGE9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxk'@;
put 'VG9rZW5zOnt9fTtyZXR1cm4gbC5mb3JFYWNoKGQ9Pntjb25zdCBoPXsuLi5kfTtpZihoLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fGguYXN5bmN8fCExLGQuZXh0ZW5zaW9ucyYmKGQuZXh0ZW5zaW9ucy5mb3JFYWNoKGY9PntpZighZi5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5z'@;
put 'aW9uIG5hbWUgcmVxdWlyZWQiKTtpZihmLnJlbmRlcmVyKXtjb25zdCB2PWEucmVuZGVyZXJzW2YubmFtZV07YS5yZW5kZXJlcnNbZi5uYW1lXT12P2Z1bmN0aW9uKC4uLk0pe2xldCBJPWYucmVuZGVyZXIuYXBwbHkodGhpcyxNKTtyZXR1cm4hMT09PUkmJihJPXYuYXBwbHkodGhpcyxNKSks'@;
put 'SX06Zi5yZW5kZXJlcn1pZihmLnRva2VuaXplcil7aWYoIWYubGV2ZWx8fCJibG9jayIhPT1mLmxldmVsJiYiaW5saW5lIiE9PWYubGV2ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7YVtmLmxldmVsXT9hW2YubGV2ZWxd'@;
put 'LnVuc2hpZnQoZi50b2tlbml6ZXIpOmFbZi5sZXZlbF09W2YudG9rZW5pemVyXSxmLnN0YXJ0JiYoImJsb2NrIj09PWYubGV2ZWw/YS5zdGFydEJsb2NrP2Euc3RhcnRCbG9jay5wdXNoKGYuc3RhcnQpOmEuc3RhcnRCbG9jaz1bZi5zdGFydF06ImlubGluZSI9PT1mLmxldmVsJiYoYS5zdGFy'@;
put 'dElubGluZT9hLnN0YXJ0SW5saW5lLnB1c2goZi5zdGFydCk6YS5zdGFydElubGluZT1bZi5zdGFydF0pKX1mLmNoaWxkVG9rZW5zJiYoYS5jaGlsZFRva2Vuc1tmLm5hbWVdPWYuY2hpbGRUb2tlbnMpfSksaC5leHRlbnNpb25zPWEpLGQucmVuZGVyZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0'@;
put 'cy5yZW5kZXJlcnx8bmV3IGdOKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCB2IGluIGQucmVuZGVyZXIpe2NvbnN0IE09Zlt2XTtmW3ZdPSguLi5JKT0+e2xldCBHPWQucmVuZGVyZXJbdl0uYXBwbHkoZixJKTtyZXR1cm4hMT09PUcmJihHPU0uYXBwbHkoZixJKSksR319aC5yZW5kZXJlcj1m'@;
put 'fWlmKGQudG9rZW5pemVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgcE4odGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IHYgaW4gZC50b2tlbml6ZXIpe2NvbnN0IE09Zlt2XTtmW3ZdPSguLi5JKT0+e2xldCBHPWQudG9rZW5pemVyW3ZdLmFwcGx5KGYsSSk7cmV0dXJu'@;
put 'ITE9PT1HJiYoRz1NLmFwcGx5KGYsSSkpLEd9fWgudG9rZW5pemVyPWZ9aWYoZC5ob29rcyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgbU47Zm9yKGNvbnN0IHYgaW4gZC5ob29rcyl7Y29uc3QgTT1mW3ZdO2Zbdl09bU4ucGFzc1Rocm91Z2hIb29rcy5oYXModik/ST0+e2lm'@;
put 'KHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzW3ZdLmNhbGwoZixJKSkudGhlbihyZT0+TS5jYWxsKGYscmUpKTtjb25zdCBHPWQuaG9va3Nbdl0uY2FsbChmLEkpO3JldHVybiBNLmNhbGwoZixHKX06KC4uLkkpPT57bGV0IEc9ZC5ob29rc1t2XS5h'@;
put 'cHBseShmLEkpO3JldHVybiExPT09RyYmKEc9TS5hcHBseShmLEkpKSxHfX1oLmhvb2tzPWZ9aWYoZC53YWxrVG9rZW5zKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztoLndhbGtUb2tlbnM9ZnVuY3Rpb24odil7bGV0IE09W107cmV0dXJuIE0ucHVzaChkLndhbGtUb2tlbnMu'@;
put 'Y2FsbCh0aGlzLHYpKSxmJiYoTT1NLmNvbmNhdChmLmNhbGwodGhpcyx2KSkpLE19fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaH19KSx0aGlzfXNldE9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ubH0sdGhpc30jZShsLGEp'@;
put 'e3JldHVybihkLGgsZik9PnsiZnVuY3Rpb24iPT10eXBlb2YgaCYmKGY9aCxoPW51bGwpO2NvbnN0IHY9ey4uLmh9O2g9ey4uLnRoaXMuZGVmYXVsdHMsLi4udn07Y29uc3QgTT10aGlzLiN0KGguc2lsZW50LGguYXN5bmMsZik7aWYodHlwZW9mIGQ+InUifHxudWxsPT09ZClyZXR1cm4gTShu'@;
put 'ZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiBkKXJldHVybiBNKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmlu'@;
put 'Zy5jYWxsKGQpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihmdW5jdGlvbiBsYnQoYyxsKXshY3x8Yy5zaWxlbnR8fChsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBjYWxsYmFjayBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2ls'@;
put 'bCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvdXNpbmdfcHJvI2FzeW5jIiksKGMuc2FuaXRpemV8fGMuc2FuaXRpemVyKSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc2FuaXRpemUgYW5kIHNhbml0aXplciBwYXJhbWV0'@;
put 'ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC43LjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvIy9VU0lOR19BRFZBTkNFRC5tZCNvcHRpb25zIiksKGMu'@;
put 'aGlnaGxpZ2h0fHwibGFuZ3VhZ2UtIiE9PWMubGFuZ1ByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBi'@;
put 'ZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQg'@;
put 'aXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRp'@;
put 'bmcgYHttYW5nbGU6IGZhbHNlfWAuIiksYy5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUu'@;
put 'IEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQg'@;
put 'bm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRl'@;
put 'cHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLChjLmhlYWRlcklkc3x8Yy5oZWFkZXJQ'@;
put 'cmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4g'@;
put 'VG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSl9KGgsZiksaC5ob29rcyYmKGguaG9va3Mub3B0aW9ucz1o'@;
put 'KSxmKXtjb25zdCBJPWguaGlnaGxpZ2h0O2xldCBHO3RyeXtoLmhvb2tzJiYoZD1oLmhvb2tzLnByZXByb2Nlc3MoZCkpLEc9bChkLGgpfWNhdGNoKHllKXtyZXR1cm4gTSh5ZSl9Y29uc3QgcmU9eWU9PntsZXQgRWU7aWYoIXllKXRyeXtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhH'@;
put 'LGgud2Fsa1Rva2VucyksRWU9YShHLGgpLGguaG9va3MmJihFZT1oLmhvb2tzLnBvc3Rwcm9jZXNzKEVlKSl9Y2F0Y2goQmUpe3llPUJlfXJldHVybiBoLmhpZ2hsaWdodD1JLHllP00oeWUpOmYobnVsbCxFZSl9O2lmKCFJfHxJLmxlbmd0aDwzfHwoZGVsZXRlIGguaGlnaGxpZ2h0LCFHLmxl'@;
put 'bmd0aCkpcmV0dXJuIHJlKCk7bGV0IHVlPTA7cmV0dXJuIHRoaXMud2Fsa1Rva2VucyhHLHllPT57ImNvZGUiPT09eWUudHlwZSYmKHVlKyssc2V0VGltZW91dCgoKT0+e0koeWUudGV4dCx5ZS5sYW5nLChFZSxCZSk9PntpZihFZSlyZXR1cm4gcmUoRWUpO251bGwhPUJlJiZCZSE9PXllLnRl'@;
put 'eHQmJih5ZS50ZXh0PUJlLHllLmVzY2FwZWQ9ITApLHVlLS0sMD09PXVlJiZyZSgpfSl9LDApKX0pLHZvaWQoMD09PXVlJiZyZSgpKX1pZihoLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoaC5ob29rcz9oLmhvb2tzLnByZXByb2Nlc3MoZCk6ZCkudGhlbihJPT5sKEksaCkpLnRoZW4o'@;
put 'ST0+aC53YWxrVG9rZW5zP1Byb21pc2UuYWxsKHRoaXMud2Fsa1Rva2VucyhJLGgud2Fsa1Rva2VucykpLnRoZW4oKCk9PkkpOkkpLnRoZW4oST0+YShJLGgpKS50aGVuKEk9PmguaG9va3M/aC5ob29rcy5wb3N0cHJvY2VzcyhJKTpJKS5jYXRjaChNKTt0cnl7aC5ob29rcyYmKGQ9aC5ob29r'@;
put 'cy5wcmVwcm9jZXNzKGQpKTtjb25zdCBJPWwoZCxoKTtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhJLGgud2Fsa1Rva2Vucyk7bGV0IEc9YShJLGgpO3JldHVybiBoLmhvb2tzJiYoRz1oLmhvb2tzLnBvc3Rwcm9jZXNzKEcpKSxHfWNhdGNoKEkpe3JldHVybiBNKEkpfX19I3QobCxh'@;
put 'LGQpe3JldHVybiBoPT57aWYoaC5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGwpe2NvbnN0IGY9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIreDEoaC5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijty'@;
put 'ZXR1cm4gYT9Qcm9taXNlLnJlc29sdmUoZik6ZD92b2lkIGQobnVsbCxmKTpmfWlmKGEpcmV0dXJuIFByb21pc2UucmVqZWN0KGgpO2lmKCFkKXRocm93IGg7ZChoKX19fShDNik7ZnVuY3Rpb24ga2woYyxsLGEpe3JldHVybiBHOS5wYXJzZShjLGwsYSl9a2wub3B0aW9ucz1rbC5zZXRPcHRp'@;
put 'b25zPWZ1bmN0aW9uKGMpe3JldHVybiBHOS5zZXRPcHRpb25zKGMpLGk4ZShrbC5kZWZhdWx0cz1HOS5kZWZhdWx0cyksa2x9LGtsLmdldERlZmF1bHRzPWZ1bmN0aW9uIGx0ZSgpe3JldHVybnthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAs'@;
put 'aGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiEx'@;
put 'LHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX19LGtsLmRlZmF1bHRzPUM2LGtsLnVzZT1mdW5jdGlvbiguLi5jKXtyZXR1cm4gRzkudXNlKC4uLmMpLGk4ZShrbC5kZWZhdWx0cz1HOS5kZWZhdWx0cyksa2x9LGtsLndhbGtUb2tlbnM9ZnVuY3Rpb24oYyxsKXtyZXR1'@;
put 'cm4gRzkud2Fsa1Rva2VucyhjLGwpfSxrbC5wYXJzZUlubGluZT1HOS5wYXJzZUlubGluZSxrbC5QYXJzZXI9bzQsa2wucGFyc2VyPW80LnBhcnNlLGtsLlJlbmRlcmVyPWdOLGtsLlRleHRSZW5kZXJlcj1jdGUsa2wuTGV4ZXI9czQsa2wubGV4ZXI9czQubGV4LGtsLlRva2VuaXplcj1wTixr'@;
put 'bC5TbHVnZ2VyPXV0ZSxrbC5Ib29rcz1tTixrbC5wYXJzZT1rbDtjb25zdCBmYnQ9WyJtYXJrZG93bkNhcmQiXTtmdW5jdGlvbiBwYnQoYyxsKXsxJmMmJld0KDAsImNsci1zcGlubmVyIiw4KX1sZXQgZ2J0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEs'@;
put 'dGhpcy5hZ3JlZUNoZWNrZWQ9ITEsdGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmV1bGFfbWFya2Rvd249J1xuTGljZW5jZSBBZ3JlZW1lbnQgZm9yIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhZVxuPT09PT09PT09PT09PT09PT09PT1cblxuQ29w'@;
put 'eXJpZ2h0IChjKSBCb3dlIElPIEx0ZFxuXG5EYXRhIENvbnRyb2xsZXIgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYnkgNEdMIEFwcHMsIGEgYnJhbmQgb3duZWQgYnkgQm93ZSBJTyBMdGQsIGEgVUsgTGltaXRlZCBDb21wYW55IGhlYWRxdWFydGVkIGluIDI5IE9sZGZpZWxkIFJkLCBDdW1i'@;
put 'cmlhLCByZWdpc3RlcmVkIGF0IENvbXBhbmllcyBIb3VzZSB3aXRoIGNvbXBhbnkgbnVtYmVyIDA4Nzc3MTcxLCBWQVQgbnVtYmVyOiAyMDM5MTQyNDBcblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cywgaW5jbHVkaW5nIGludGVybmF0'@;
put 'aW9uYWwgdHJlYXRpZXMsIGFuZCBkdWFsLWxpY2Vuc2VkIFx1MjAxMyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IgcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5'@;
put 'IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuXG5JZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1'@;
put 'c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImxpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWQiIGZpbGUgYXZh'@;
put 'aWxhYmxlIGhlcmU6ICBodHRwczovL2dpdC5kYXRhY29udHJvbGxlci5pby9kYy9kYy9zcmMvYnJhbmNoL21haW4vbGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZFxuXG5Zb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzIGlzIHN1'@;
put 'YmplY3QgdG8gdGhlIHRlcm1zIGluY2x1ZGVkIGluIGFuIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbkluIGFueSBjYXNlLCB5b3UgbXVzdCBub3QgbWFrZSBhbnkgc3VjaCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0byBkZXZlbG9wIHNvZnR3YXJlIHdoaWNoIG1heSBiZSBj'@;
put 'b25zaWRlcmVkIGNvbXBldGl0aXZlIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuVU5MRVNTIEVYUFJFU1NMWSBBR1JFRUQgT1RIRVJXSVNFLCA0R0wgQVBQUyBQUk9WSURFUyBUSElTIFNPRlRXQVJFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T'@;
put 'IE9GIEFOWSBLSU5ELCBBTkQgSU4gTk8gRVZFTlQgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgU0hBTEwgNEdMIEFQUFMgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFV'@;
put 'RU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HIEZST00gVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRS5cblxuXG4nfW5nT25Jbml0KCl7Y29uc3QgYT1rbC5zZXRPcHRpb25zKHt9KTt0aGlzLmV1bGFfbWFya2Rvd249YS5wYXJzZSh0aGlzLmV1bGFf'@;
put 'bWFya2Rvd24pfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLm1hcmtkb3duQ2FyZCYmdGhpcy5tYXJrZG93bkNhcmQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsIikpfSl9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYWdy'@;
put 'ZWVDaGVja2VkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZ2lzdGVydXNlciIse1NBU0NvbnRyb2xUYWJsZTpbe0FDQ0VQVEVEOiJ5ZXMifV19KS50aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25z'@;
put 'ZS5yZXR1cm4mJmQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVsb2FkKCl9KS5jYXRjaChkPT5kKS5maW5hbGx5KCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuYWdyZWVCb3hMb2NrZWQ9'@;
put 'ITEsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITF9LDFlMyl9KSl9b25DYXJkQmxvY2tTY3JvbGwoYSl7aWYoIXRoaXMuYWdyZWVDbGlja2VkKXtsZXQgZD1hLnRhcmdldDtkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hKGQuc2Nyb2xsVG9wK2Qub2Zmc2V0SGVpZ2h0'@;
put 'Pj1kLnNjcm9sbEhlaWdodC0yMCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShWbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgp'@;
put 'e2lmKDEmZCYmRmEoZmJ0LDUpLDImZCl7bGV0IGY7eWkoZj1iaSgpKSYmKGgubWFya2Rvd25DYXJkPWYuZmlyc3QpfX0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3Jv'@;
put 'bGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJj'@;
put 'bHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksT2UoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLGRlKDMsInAi'@;
put 'KSxPZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSxoZSgpKCksZGUoNSwiZGl2IiwzLDApLEZ0KCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3'@;
put 'dChmKSxDdChoLm9uQ2FyZEJsb2NrU2Nyb2xsKE0pKX0pLGhlKCksZGUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIsNSkoOSwiaW5wdXQiLDYpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5hZ3JlZUNoZWNrZWQsTSl8fChoLmFn'@;
put 'cmVlQ2hlY2tlZD1NKSxDdChNKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTAsImxhYmVsIiksT2UoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksaGUoKSgp'@;
put 'LGd0KDEyLHBidCwxLDAsImNsci1zcGlubmVyIiw3KSxoZSgpKCl9MiZkJiYoZmUoNSksTWUoImlubmVySFRNTCIsaC5ldWxhX21hcmtkb3duLFY0KSxmZSgzKSxUcigiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKCksZmkoIm5nTW9kZWwiLGguYWdyZWVDaGVja2VkKSxNZSgiZGlz'@;
put 'YWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKDMpLE1lKCJuZ0lmIixoLmFncmVlQm94TG9ja2VkJiZoLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W2JhLE1kLHRsLFdvLGNvLElkLHhoLFJkXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG1idChjLGwp'@;
put 'ezEmYyYmKGRlKDAsInAiLDI5KSxPZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3UgbW9yZSBkZXRhaWxzIGF0IHRoZSBtb21lbnQgIiksaGUoKSl9ZnVuY3Rpb24gdmJ0KGMsbCl7aWYoMSZjJiZXdCgwLCJwIiwzMCksMiZjKXtjb25zdCBhPUxlKDMp'@;
put 'O01lKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxWNCl9fWZ1bmN0aW9uIHlidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJzdHJvbmciKSxPZSgyLCJEZXRhaWxzOiIpLGhlKCksT2UoMyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDMpLExyKCIgIixh'@;
put 'LmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIGJidChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsbWJ0LDIsMCwicCIsMjcpKDIsdmJ0LDEsMSwicCIsMjgpKDMseWJ0LDQsMSwicCIsNCksc2koKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmtleUVycm9yKSxmZSgp'@;
put 'LE1lKCJuZ0lmIixhLmtleUVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIF9idChjLGwpezEmYyYmKGFpKDApLGRlKDEsInAiLDI5KSxPZSgyLCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBm'@;
put 'b3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxXdCgzLCJjb250YWN0LWxpbmsiLDMxKSxPZSg0LCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIiksaGUoKSxzaSgpKX1mdW5jdGlvbiB3YnQoYyxsKXsx'@;
put 'JmMmJihhaSgwKSxkZSgxLCJwIiwyOSksT2UoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNlbmNlIGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vuc2Uga2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSxoZSgpLHNpKCkp'@;
put 'fWZ1bmN0aW9uIENidChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9TGUoMik7VHIoIm1pc3NrZXkiLGgubWlzc21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxmZSgpLEJ1KCIgIixhLCIi'@;
put 'LGQ9PT0obnVsbD09aC5zeXNzaXRlLnZhbHVlP251bGw6aC5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19ZnVuY3Rpb24gU2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzIpKDEsInN0cm9uZyIpLE9lKDIsIkFsbG93ZWQgdXNlcnM6IiksaGUoKSxPZSgzKSxoZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9TGUoMik7ZmUoMyksTHIoIiAiLGEubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpfX1mdW5jdGlvbiBNYnQoYyxsKXsxJmMmJld0KDAsImNsci1zcGlubmVyIiwzMyl9ZnVuY3Rpb24geGJ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksT2UoMSwiIERyb3AgLyBC'@;
put 'cm93c2UgbGljZW5jZSBmaWxlICIpLGhlKCkpfWZ1bmN0aW9uIEVidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLE9lKDEsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSgyLCJzdHJvbmciKSxPZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgzKSxTcihhLmxpY2VuY2VmaWxlLmZp'@;
put 'bGVuYW1lKX19ZnVuY3Rpb24gVGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwic3Ryb25nIiksT2UoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMiksU3IoYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gQWJ0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSx4YnQs'@;
put 'MiwwLCJkaXYiLDQpKDIsRWJ0LDQsMSwiZGl2Iiw0KSgzLFRidCwzLDEsImRpdiIsNCksc2koKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoIm5nSWYiLCIiPT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxm'@;
put 'ZSgpLE1lKCJuZ0lmIixhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBrYnQoYyxsKXsxJmMmJihkZSgwLCJidXR0b24iLDM0KSxPZSgxLCIgQ29udGludWUgd2l0aCBmcmVlIHRpZXIgIiksaGUoKSl9ZnVuY3Rpb24gRGJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2'@;
put 'Iiw1KSgxLCJkaXYiLDYpLE9lKDIsIkxpY2VuY2luZyIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJkaXYiLDgpLGd0KDUsYmJ0LDQsMywibmctY29udGFpbmVyIiw5KSg2LF9idCw1LDAsIm5nLWNvbnRhaW5lciIsOSkoNyx3YnQsMywwLCJuZy1jb250YWluZXIiLDkpLGRlKDgsInAiKSg5LCJz'@;
put 'dHJvbmciKSxPZSgxMCwiU1lTU0lURToiKSxoZSgpLGd0KDExLENidCwyLDQsInNwYW4iLDEwKSxkZSgxMiwiYSIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWRhKDE0KSxmPWRhKDE2KSx2PUxlKCk7cmV0dXJuIEN0KHYuY29weVN5c3NpdGUoaCxmLHYuc3lzc2l0'@;
put 'ZS52YWx1ZXx8W10pKX0pLFd0KDEzLCJjbHItaWNvbiIsMTIsMCksZGUoMTUsInNwYW4iLDEzLDEpLE9lKDE3LCJDb3B5IHRvIGNsaXBib2FyZCIpLGhlKCkoKSgpLGd0KDE4LFNidCw0LDEsInAiLDE0KSxkZSgxOSwiY2xyLXRhYnMiKSgyMCwiY2xyLXRhYiIpKDIxLCJidXR0b24iLDE1KSxP'@;
put 'ZSgyMiwiVXBsb2FkIGxpY2VuY2UiKSxoZSgpLGRlKDIzLCJjbHItdGFiLWNvbnRlbnQiKSgyNCwiaW5wdXQiLDE2LDIpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSksaGUoKSxkZSgyNiwiZGl2IiwxNyksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChkYSgyNSkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uRmlsZUNhcHR1cmUoaCwhMCkpfSksZ3QoMjcsTWJ0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSgyOCxBYnQsNCwzLCJuZy1jb250'@;
put 'YWluZXIiLDQpLGhlKCkoKSgpLGRlKDI5LCJjbHItdGFiIikoMzAsImJ1dHRvbiIsMTUpLE9lKDMxLCJQYXN0ZSBsaWNlbmNlIiksaGUoKSxkZSgzMiwiY2xyLXRhYi1jb250ZW50IikoMzMsImZvcm0iLDE5KSgzNCwicCIpLE9lKDM1LCJMaWNlbmNlIGtleToiKSxoZSgpLGRlKDM2LCJkaXYi'@;
put 'LDIwKSgzNywidGV4dGFyZWEiLDIxKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBnaShmLmxpY2VuY2VLZXlWYWx1ZSxoKXx8KGYubGljZW5jZUtleVZhbHVlPWgpLEN0KGgpfSksRnQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHd0KGEpLEN0KExlKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSxkZSgzOCwiZm9ybSIsMjIpKDM5LCJwIiksT2UoNDAsIkFjdGl2YXRpb24ga2V5OiIpLGhlKCksZGUoNDEsImRpdiIsMjApKDQyLCJ0ZXh0YXJlYSIsMjMpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChh'@;
put 'KTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYuYWN0aXZhdGlvbktleVZhbHVlLGgpfHwoZi5hY3RpdmF0aW9uS2V5VmFsdWU9aCksQ3QoaCl9KSxGdCgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50cmltS2V5cygpKX0pLGhlKCkoKSgpKCkoKSgpKCksZGUo'@;
put 'NDMsImRpdiIsMjQpKDQ0LCJidXR0b24iLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuYXBwbHlLZXlzKCkpfSksT2UoNDUsIiBBcHBseSBsaWNlbmNlIGtleXMgIiksaGUoKSxndCg0NixrYnQsMiwwLCJidXR0b24iLDI2KSxoZSgpKCkoKX1pZigyJmMp'@;
put 'e2NvbnN0IGE9TGUoKTtmZSgzKSxNZSgibmdTd2l0Y2giLGEuYWN0aW9uKSxmZSgyKSxNZSgibmdTd2l0Y2hDYXNlIiwia2V5IiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwibGltaXQiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5zeXNz'@;
put 'aXRlLnZhbHVlKSxmZSg3KSxNZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYmYS51c2VyQ291bnRMaW1pdGF0aW9uKSxmZSg5KSxNZSgibmdJZiIsYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLmxpY2VuY2VGaWxlTG9hZGluZyksZmUoOSksZmkoIm5nTW9kZWwiLGEu'@;
put 'bGljZW5jZUtleVZhbHVlKSxmZSg1KSxmaSgibmdNb2RlbCIsYS5hY3RpdmF0aW9uS2V5VmFsdWUpLGZlKDIpLE1lKCJjbHJMb2FkaW5nIixhLmFwcGx5aW5nS2V5cykoImRpc2FibGVkIixhLmRpc2FibGVBcHBseUJ1dHRvbiksZmUoMiksTWUoIm5nSWYiLGEuaXNBcHBGcmVlVGllci52YWx1'@;
put 'ZSl9fWZ1bmN0aW9uIElidChjLGwpezEmYyYmV3QoMCwiYXBwLXRlcm1zIil9dmFyIGY4ZT1mdW5jdGlvbihjKXtyZXR1cm4gYy5rZXk9ImtleSIsYy5yZWdpc3Rlcj0icmVnaXN0ZXIiLGMubGltaXQ9ImxpbWl0IixjLnVwZGF0ZT0idXBkYXRlIixjfShmOGV8fHt9KTtjb25zdCBSYnQ9W3tw'@;
put 'YXRoOiI6YWN0aW9uIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnJvdXRlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuYXBwU2VydmljZT1mLHRoaXMuYWN0aW9uPW51bGwsdGhpcy5saWNlbnNlRXJyb3Jz'@;
put 'PXttaXNzaW5nOidMaWNlbmNlIGtleSBpcyBtaXNzaW5nIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlz'@;
put 'IGJlbG93LicsZXhwaXJlZDonTGljZW5jZSBrZXkgaXMgZXhwaXJlZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFs'@;
put 'aWQga2V5cyBiZWxvdy4nLGludmFsaWQ6J0xpY2VuY2Uga2V5IGlzIGludmFsaWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVu'@;
put 'dGVyIHZhbGlkIGtleXMgYmVsb3cuJyxtaXNzbWF0Y2g6J1lvdXIgU1lTU0lURSAoYmVsb3cpIGlzIG5vdCBmb3VuZCBpbiB0aGUgbGljZW5jZSBrZXkgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5p'@;
put 'byI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJ30sdGhpcy5saWNlbmNlS2V5VmFsdWU9IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9IiIsdGhpcy5hcHBseWluZ0tleXM9ITEsdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5z'@;
put 'eXNzaXRlLHRoaXMuY3VycmVudExpY2VuY2VLZXk9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlS2V5LHRoaXMuY3VycmVudEFjdGl2YXRpb25LZXk9dGhpcy5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uS2V5LHRoaXMuaXNBcHBGcmVlVGllcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBw'@;
put 'RnJlZVRpZXIsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPXRoaXMubGljZW5jZVNlcnZpY2UudXNlckNvdW50TGltaXRhdGlvbix0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5pbnB1dFR5cGU9ImZpbGUiLHRoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZWZpbGU9'@;
put 'e2ZpbGVuYW1lOiIifX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMuY3VycmVudExpY2VuY2VLZXl8fCIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl8fCIiLHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKGE9Pnt0'@;
put 'aGlzLmtleUVycm9yPWEuZXJyb3IsdGhpcy5taXNzbWF0Y2hlZEtleT1hLm1pc3NtYXRjaElkLGEuZGV0YWlscyYmKHRoaXMuZXJyb3JEZXRhaWxzPWF0b2IoYS5kZXRhaWxzKSl9KSx0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoYT0+e2xldCBkPWEuYWN0aW9uO2QmJk9iamVjdC52YWx1'@;
put 'ZXMoZjhlKS5pbmNsdWRlcyhkKSYmKHRoaXMuYWN0aW9uPWQpfSksdGhpcy5saWNlbnNlS2V5RGF0YT10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCl9dHJpbUtleXMoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmxpY2VuY2VLZXlWYWx1ZS50cmltKCksdGhpcy5h'@;
put 'Y3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUudHJpbSgpfWNvcHlTeXNzaXRlKGEsZCxoKXtjb25zdCBmPWguam9pbigiXG4iKTtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChmKS50aGVuKCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY2hlY2siKSxh'@;
put 'LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpcy1zdWNjZXNzIiksZC5pbm5lclRleHQ9IkNvcGllZCEiLHNldFRpbWVvdXQoKCk9PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjb3B5IiksYS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIiksZC5pbm5lclRleHQ9IkNvcHkgdG8gY2xpcGJvYXJkIn0s'@;
put 'MWUzKX0pfWFwcGx5S2V5cygpe3RoaXMuYXBwbHlpbmdLZXlzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWdpc3RlcmtleSIse2tleXVwbG9hZDpbe0FDVElWQVRJT05fS0VZOnRoaXMuYWN0aXZhdGlvbktleVZhbHVlLExJQ0VOQ0VfS0VZOnRoaXMubGljZW5jZUtleVZh'@;
put 'bHVlfV19KS50aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm4mJmQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVwbGFjZShsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0pfSku'@;
put 'ZmluYWxseSgoKT0+e3RoaXMuYXBwbHlpbmdLZXlzPSExfSl9b25GaWxlQ2FwdHVyZShhLGQ9ITEpe2xldCBoPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZih0aGlzLmxpY2VuY2VmaWxlLmZpbGVuYW1lPWgubmFtZSwhaClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITA7Y29u'@;
put 'c3QgZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD12PT57aWYodGhpcy5saWNlbmNlRmlsZUVycm9yPSJFcnJvciByZWFkaW5nIGZpbGUuIiwhdnx8IXYudGFyZ2V0fHwyIT12LnRhcmdldC5yZWFkeVN0YXRlfHx2LnRhcmdldC5lcnJvcnx8IXYudGFyZ2V0LnJlc3VsdClyZXR1cm47dGhpcy5s'@;
put 'aWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlRmlsZUVycm9yPXZvaWQgMDtjb25zdCBNPXYudGFyZ2V0LnJlc3VsdC50b1N0cmluZygpLnNwbGl0KCJcbiIpO3RoaXMuYWN0aXZhdGlvbktleVZhbHVlPU1bMV0sdGhpcy5saWNlbmNlS2V5VmFsdWU9TVswXX0sZi5yZWFkQXNUZXh0'@;
put 'KGgpfXN3aXRjaFR5cGUoYSl7dGhpcy5pbnB1dFR5cGU9YX1nZXQgZGlzYWJsZUFwcGx5QnV0dG9uKCl7cmV0dXJuIHRoaXMubGljZW5jZUtleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5saWNlbmNlS2V5VmFsdWU9PT10aGlzLmN1cnJl'@;
put 'bnRMaWNlbmNlS2V5JiZ0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT09PXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoeXUpLCRlKGMxKSwkZShWbyksJGUodUwpKX19c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbImNvcHlJY29uIiwiIl0sWyJjb3B5VG9vbHRpcCIsIiJdLFsibGljZW5jZUZpbGUiLCIiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNh'@;
put 'cmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywibmdTd2l0Y2giXSxbMSwiY2FyZC10ZXh0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJtaXNza2V5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLXRvcC1yaWdo'@;
put 'dCIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSIsInNpemUiLCIxNSIsMSwiY3Vyc29yLXBvaW50ZXIiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFsiY2xyVGFiTGluayIsIiJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNoYW5nZSJd'@;
put 'LFsiYXBwRmlsZURyb3AiLCIiLDEsImRyb3AtYXJlYSIsMywiY2xpY2siLCJmaWxlRHJvcCJdLFsiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWzEsImNsci1mb3JtIiwibGljZW5zZS1rZXktZm9ybSJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbIm5hbWUiLCJsaWNlbnNl'@;
put 'LWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJdLFsxLCJjbHItZm9ybSIsImFjdGl2YXRpb24ta2V5LWZvcm0iXSxbIm5hbWUiLCJhY3RpdmF0aW9u'@;
put 'LWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBhY3RpdmF0aW9uIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxb'@;
put 'MSwiYnRuIiwiYnRuLXByaW1hcnkiLCJhcHBseS1rZXlzIiwzLCJjbGljayIsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsicm91dGVyTGluayIsIi8iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiw0LCJuZ0lmIl0sWyJjbGFz'@;
put 'cyIsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWzEsImtleS1lcnJvciJdLFsxLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCJdLFsiY2xhc3NlcyIsImNvbG9yLWdyZWVuIl0sWzEsIm0tMCJdLFsxLCJzcGlubmVyLXNtIl0sWyJyb3V0ZXJMaW5rIiwiLyIsMSwiYnRuIiwi'@;
put 'YnRuLXNtIiwiYnRuLWxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJmd0KDAsRGJ0LDQ3LDEzLCJkaXYiLDMpKDEsSWJ0LDEsMCwiYXBwLXRlcm1zIiw0KSwyJmQmJihNZSgibmdJZiIsInJlZ2lzdGVyIiE9PWguYWN0aW9uKSxmZSgpLE1lKCJuZ0lmIiwicmVnaXN0ZXIiPT09'@;
put 'aC5hY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltRcyxiYSx4MixkcCxsNyxHbCx0bCxzNyxXbyx3cCxPbCxWMCxIMix2bSxibSx4Nyx5bSxtbSxTNyxSZCxsMSxnYnQseU9dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksY2FuQWN0aXZhdGU6W290ZV0sY2FuRGVhY3RpdmF0ZTpbb3Rl'@;
put 'XX1dO2xldCBMYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0JjLmZvckNoaWxkKFJidCks'@;
put 'QmNdfSl9fXJldHVybiBjfSkoKSxPYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhLGtj'@;
put 'LEIwLExidCx4d119KX19cmV0dXJuIGN9KSgpO2NvbnN0IFBidD0oKT0+KHtzdGFuZGFsb25lOiEwfSkscDhlPShjLGwsYSk9Pih7YWRkZWRSb3c6YyxkZWxldGVkUm93OmwsdXBkYXRlZFJvdzphfSksZzhlPWM9Pih7ImNoIHRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLXRvcC1yaWdodCI6'@;
put 'Y30pO2Z1bmN0aW9uIEZidChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwxOSksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0LGQ9TGUoKTtNZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2QuanNQYXJhbXNbYV0pLGZlKCksTHIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19'@;
put 'ZnVuY3Rpb24gSGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSxMcigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBOYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0'@;
put 'KSxPZSgyKSxoZSgpLGd0KDMsRmJ0LDIsMiwidGQiLDE3KSg0LEhidCwyLDEsInRkIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLFNyKGEpLGZlKCksTWUoIm5nSWYiLGEuaW5jbHVkZXMoIlRBQkxFX0lEIikpLGZlKCksTWUoIm5nSWYiLCFhLmluY2x1ZGVzKCJU'@;
put 'QUJMRV9JRCIpKX19ZnVuY3Rpb24gVmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsNCksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgzKTtmZSgyKSxTcihhKSxmZSgyKSxTcihkLnN1Ym1pdERldGFp'@;
put 'bHNbYV0pfX1mdW5jdGlvbiBCYnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMykoMywidGhlYWQiKSg0LCJ0ciIpKDUsInRoIiw0KSxPZSg2LCJOYW1lIiksaGUoKSxkZSg3LCJ0aCIsNCksT2UoOCwiVmFsdWUiKSxoZSgpKCko'@;
put 'KSxkZSg5LCJ0Ym9keSIpLGd0KDEwLFZidCw1LDIsInRyIiw1KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMTApLE1lKCJuZ0Zvck9mIixhLnN1Ym1pdEFycil9fWZ1bmN0aW9uIGpidChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLE9lKDIpLGhlKCksZGUo'@;
put 'MywidGQiLDQpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoMik7ZmUoMiksU3IoYSksZmUoMiksU3IoZC5qc1BhcmFtc1thXSl9fWZ1bmN0aW9uIHpidChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIikoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjAp'@;
put 'LE9lKDMsIlN1Ym1pdHRlZCBUYWJsZSBEZXRhaWxzIiksaGUoKSxndCg0LEJidCwxMSwxLCJjbHItdGFiLWNvbnRlbnQiLDIxKSxoZSgpLGRlKDUsImNsci10YWIiKSg2LCJidXR0b24iLDIwKSxPZSg3LCJCYXNlIFRhYmxlIERldGFpbHMiKSxoZSgpLGRlKDgsImNsci10YWItY29udGVudCIp'@;
put 'KDksImRpdiIsMjIpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxPZSgxNCwiTmFtZSIpLGhlKCksZGUoMTUsInRoIiw0KSxPZSgxNiwiVmFsdWUiKSxoZSgpKCkoKSxkZSgxNywidGJvZHkiKSxndCgxOCxqYnQsNSwyLCJ0ciIsNSksaGUoKSgpKCkoKSgp'@;
put 'KCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDQpLE1lKCJjbHJJZkFjdGl2ZSIsITApLGZlKDE0KSxNZSgibmdGb3JPZiIsYS5rZXlzQXJyYXkpfX1mdW5jdGlvbiBVYnQoYyxsKXsxJmMmJihkZSgwLCJwIiw3MiksT2UoMSwiIFRoZXJlIGFyZSBubyBkZXRhaWxzIHRvIHNob3cgIiksaGUoKSl9'@;
put 'ZnVuY3Rpb24gWmJ0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwiZGl2Iiw3MykoMiwic3BhbiIpLE9lKDMsIlRhYmxlIElkOiIpLGhlKCksZGUoNCwic3Ryb25nIiw3NCksT2UoNSksaGUoKSgpLGRlKDYsImRpdiIpKDcsInNwYW4iKSxPZSg4LCJTdWJtaXR0ZXI6IiksaGUoKSxkZSg5LCJz'@;
put 'cGFuIiw3NSksT2UoMTApLGhlKCkoKSxkZSgxMSwiZGl2IikoMTIsInNwYW4iKSxPZSgxMywiU3VibWl0dGVkIG9uOiIpLGhlKCksZGUoMTQsInNwYW4iLDc1KSxPZSgxNSksaGUoKSgpLGRlKDE2LCJkaXYiKSgxNywic3BhbiIpLE9lKDE4LCJTdWJtaXR0ZWQgUmVhc29uOiIpLGhlKCksZGUo'@;
put 'MTksInNwYW4iLDc1KSxPZSgyMCksaGUoKSgpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxNZSgicm91dGVyTGluayIsIi9zdGFnZS8iKyhudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lEKSksZmUoKSxMcigiICIsbnVsbD09YS50YWJsZURl'@;
put 'dGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiICIpLGZlKDUpLExyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9CWV9OTSwiICIpLGZlKDUpLExyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRh'@;
put 'aWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksZmUoNSksTHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX1JFQVNPTl9UWFQsIiAiKX19ZnVuY3Rpb24gV2J0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpLFd0KDEsImNsci1pY29uIiw3'@;
put 'NyksT2UoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxoZSgpKX1mdW5jdGlvbiBZYnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiLDUxKSxndCgzLFVi'@;
put 'dCwyLDAsInAiLDQ1KSg0LFpidCwyMSw1LCJuZy1jb250YWluZXIiLDgpLGhlKCksZGUoNSwiZGl2Iiw1MikoNiwiZGl2Iiw1MykoNywiZGl2Iiw1NCkoOCwiZGl2Iiw1NSkoOSwiYnV0dG9uIiw1NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoNCk7cmV0dXJuIEN0'@;
put 'KGguZ29Ub0Jhc2UobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLE9lKDEwLCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZGUoMTEsImJ1dHRvbiIsNTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDQpO3JldHVybiBDdChoLmdl'@;
put 'dFRhYmxlKGgudGFibGVJZCkpfSksT2UoMTIsIiBWaWV3IHN0YWdlZCBkYXRhICIpLGhlKCksZGUoMTMsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDQpO3JldHVybiBDdChoLmdvQmFjayhudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFt'@;
put 'cy5UQUJMRV9OTSkpfSksT2UoMTQsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxNSwiZGl2Iiw1OSkoMTYsImJ1dHRvbiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkuYXBwcm92ZVRhYmxlKCkpfSksT2UoMTcsIiBBQ0NFUFQgIiks'@;
put 'aGUoKSxkZSgxOCwiYnV0dG9uIiw2MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5yZWplY3RPcGVuPSEwKX0pLE9lKDE5LCIgUkVKRUNUICIpLGhlKCksZGUoMjAsImNsci10b2dnbGUtY29udGFpbmVyIiw2MikoMjEsImNsci10b2dnbGUtd3JhcHBlciIp'@;
put 'KDIyLCJpbnB1dCIsNjMpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDQpO3JldHVybiBnaShmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0dGVkVmFsdWVzPWgpLEN0KGgpfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSks'@;
put 'Q3QoTGUoNCkuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxoZSgpLGRlKDIzLCJsYWJlbCIsNjQpLE9lKDI0KSxoZSgpKCkoKSgpLGRlKDI1LCJkaXYiLDY1KSxndCgyNixXYnQsMywwLCJzcGFuIiw2NiksZGUoMjcsImRpdiIsMzEpKDI4LCJkaXYiLDY3KSgyOSwic3BhbiIsNjgpLE9lKDMwLCIg'@;
put 'Q2hhbmdlZCBSb3dzICIpLGRlKDMxLCJzcGFuIiw2OSksT2UoMzIpLGhlKCkoKSxkZSgzMywic3BhbiIsNzApLE9lKDM0LCIgQWRkZWQgUm93cyAiKSxkZSgzNSwic3BhbiIsNjkpLE9lKDM2KSxoZSgpKCksZGUoMzcsInNwYW4iLDcxKSxPZSgzOCwiIERlbGV0ZWQgUm93cyAiKSxkZSgzOSwi'@;
put 'c3BhbiIsNjkpLE9lKDQwKSxoZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDQpO2ZlKDMpLE1lKCJuZ0lmIiwhYS50YWJsZURldGFpbHMpLGZlKCksTWUoIm5nSWYiLGEudGFibGVEZXRhaWxzKSxmZSgxMiksTWUoImNsckxvYWRpbmciLGEuYWNjZXB0TG9hZGluZykoImRp'@;
put 'c2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLGZlKDIpLE1lKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNB'@;
put 'UFBST1ZFUil8fGEubm9DaGFuZ2VzKSxmZSg0KSxmaSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLFNyKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGZlKDIpLE1lKCJuZ0lmIixhLmRpZmZzTGltaXQpLGZlKDYpLFNyKGEubGVucy51cGRh'@;
put 'dGVkKSxmZSg0KSxTcihhLmxlbnMubmV3KSxmZSg0KSxTcihhLmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uIEdidChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxPZSgyLCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiAkYnQoYyxsKXtpZigxJmMmJihkZSgwLCJk'@;
put 'aXYiLDc4KSgxLCJzcGFuIiw3OSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLEdidCwzLDAsImRpdiIsODApLGhlKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgzKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gS2J0KGMsbCl7MSZjJiYoZGUoMCwicCIsNzIp'@;
put 'LE9lKDEsIiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLGhlKCkpfWZ1bmN0aW9uIFhidChjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxTcihhKX19ZnVuY3Rpb24gcWJ0KGMsbCl7aWYoMSZjJiYoZGUo'@;
put 'MCwic3BhbiIsODYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLmluZGV4LGQ9TGUoMikuaW5kZXgsaD1MZSg0KTtmZSgpLExyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9fWZ1bmN0aW9uIEpidChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw4'@;
put 'NCksT2UoMSksZ3QoMixxYnQsMiwxLCJzcGFuIiw4NSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPUxlKDIpLmluZGV4LGY9TGUoNCk7TWUoIm5nQ2xhc3MiLGxwKDMsZzhlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSks'@;
put 'ZmUoKSxMcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLGZlKCksTWUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gUWJ0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxKYnQsMyw1LCJ0ZCIsODMpLHNpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1MZSgpLmluZGV4LGQ9TGUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gZV90KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDIpLmluZGV4LGg9TGUoNCk7ZmUo'@;
put 'KSxMcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiB0X3QoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGVfdCwyLDEsInRkIiw0Nyksc2koKSksMiZjKXtjb25zdCBhPUxlKCkuaW5kZXgsZD1MZSg0KTtmZSgpLE1lKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1m'@;
put 'dW5jdGlvbiBuX3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsODIpLGd0KDEsUWJ0LDIsMSwibmctY29udGFpbmVyIiw4KSgyLHRfdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1MZSg0KTtNZSgibmdDbGFzcyIsYk0oMyxwOGUsImFkZGVkIj09'@;
put 'ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksZmUoKSxNZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksZmUoKSxNZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIHJfdChjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1PbigpO2RlKDAsImRpdiIsMjkpKDEsImRpdiIsMzApKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLmdvVG9BcHByb3ZhbHNMaXN0KCkpfSksV3QoNSwiY2xyLWljb24iLDM0KSxPZSg2'@;
put 'LCJCYWNrIHRvIGFwcHJvdmFscyBsaXN0ICIpLGhlKCkoKSxkZSg3LCJkaXYiLDM1KSg4LCJoMyIsMzYpLE9lKDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLmdldERldGFpbHMoKSl9KSxXdCgx'@;
put 'MiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKSxkZSgxMywicCIsNDApLE9lKDE0KSxoZSgpKCksZGUoMTUsImRpdiIsNDEpLGd0KDE2LFlidCw0MSwxMSwiZGl2Iiw0MiksaGUoKSxndCgxNywkYnQsNCwxLCJkaXYiLDQzKSxkZSgxOCwiZGl2Iiw0NCksZ3QoMTksS2J0LDIsMCwicCIsNDUpLGRl'@;
put 'KDIwLCJ0YWJsZSIsMykoMjEsInRoZWFkIikoMjIsInRyIiw0NiksZ3QoMjMsWGJ0LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUoMjQsInRib2R5IiksZ3QoMjUsbl90LDMsNywidHIiLDQ4KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSg5KSxMcigiICIsbnVsbD09YS5qc1Bh'@;
put 'cmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfTk0sIiAiKSxmZSg1KSxMcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfREVTQywiICIpLGZlKDIpLE1lKCJuZ0lmIixhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxmZSgyKSxNZSgi'@;
put 'bmdJZiIsYS5sb2FkaW5nVGFibGUmJmEubm9DaGFuZ2VzKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBpX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI3KSxndCgxLHJfdCwyNiw3LCJkaXYiLDI4KSxo'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBhX3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3OSksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gc190KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgy'@;
put 'LCJMb2FkaW5nIHByZXZpZXciKSxoZSgpKCkpfWZ1bmN0aW9uIG9fdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsODcpLGd0KDEsYV90LDIsMCwic3BhbiIsODgpKDIsc190LDMsMCwiZGl2Iiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxm'@;
put 'ZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBsX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIzKSxndCgxLGlfdCwyLDEsImRpdiIsMjQpLGRlKDIsImRpdiIsMjUpLGd0KDMsb190LDMsMiwiZGl2IiwyNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJu'@;
put 'Z0lmIixhLmxvYWRlZCksZmUoMiksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIGNfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSxXdCgxLCJjbHItaWNvbiIsNzcpLE9lKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNw'@;
put 'bGF5ZWQgIiksaGUoKSl9ZnVuY3Rpb24gdV90KGMsbCl7MSZjJiZXdCgwLCJkaXYiLDQ5KX1mdW5jdGlvbiBkX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc1KSgxLCJwIiw4MSksT2UoMiwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gaF90KGMsbCl7aWYoMSZjJiYoZGUoMCwi'@;
put 'ZGl2IiwxMDQpKDEsInNwYW4iLDc5KSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDMsZF90LDMsMCwiZGl2Iiw4MCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDQpO2ZlKDMpLE1lKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBmX3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0'@;
put 'aCIsNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksU3IoYSl9fWZ1bmN0aW9uIHBfdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDg2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDIpLmluZGV4LGg9TGUoNCk7ZmUoKSxMcigi'@;
put 'T3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBnX3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsODQpLE9lKDEpLGd0KDIscF90LDIsMSwic3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgy'@;
put 'KS5pbmRleCxmPUxlKDQpO01lKCJuZ0NsYXNzIixscCgzLGc4ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLGZlKCksTHIoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxmZSgpLE1lKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1'@;
put 'cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIG1fdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsZ190LDMsNSwidGQiLDgzKSxzaSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDQpO2ZlKCksTWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIHZfdChjLGwp'@;
put 'e2lmKDEmYyYmKGRlKDAsInRkIiw0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKS5pbmRleCxoPUxlKDQpO2ZlKCksTHIoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24geV90KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSx2X3Qs'@;
put 'MiwxLCJ0ZCIsNDcpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgpLmluZGV4LGQ9TGUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gYl90KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDgyKSxndCgxLG1fdCwyLDEsIm5nLWNvbnRhaW5lciIsOCkoMix5X3QsMiwx'@;
put 'LCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9TGUoNCk7TWUoIm5nQ2xhc3MiLGJNKDMscDhlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVk'@;
put 'Ij09PWQuY2hBcnJbYV0pLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBfX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDkzKSgxLCJkaXYiLDk0KSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiw5NSksRnQoImNs'@;
put 'aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5nb1RvU3VibWl0TGlzdCgpKX0pLFd0KDUsImNkcy1pY29uIiw5NiksT2UoNiwiQmFjayB0byBzdWJtaXR0ZWQgbGlzdCAiKSxoZSgpKCksZGUoNywiZGl2Iiw5NykoOCwiaDMiLDk4KSxPZSg5KSxoZSgpKCksZGUoMTAsImRp'@;
put 'diIsMzcpKDExLCJhIiwzOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS50YWJsZUZsYWc9ITApfSksV3QoMTIsImNsci1pY29uIiwzOSksaGUoKSgpKCksZGUoMTMsInAiLDk5KSxPZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDUwKSgxNiwiZGl2Iiw1MSko'@;
put 'MTcsImRpdiIsNzMpKDE4LCJzcGFuIiksT2UoMTksIlRhYmxlIElkOiIpLGhlKCksZGUoMjAsInN0cm9uZyIsNzQpKDIxLCJzcGFuIiksT2UoMjIpLGhlKCkoKSgpLGRlKDIzLCJkaXYiKSgyNCwic3BhbiIpLE9lKDI1LCJTdWJtaXR0ZWQgb246IiksaGUoKSxkZSgyNiwic3BhbiIsNzUpLE9l'@;
put 'KDI3KSxoZSgpKCksZGUoMjgsImRpdiIpKDI5LCJzcGFuIiksT2UoMzAsIlN1Ym1pdCBNZXNzYWdlOiIpLGhlKCksZGUoMzEsInNwYW4iKSxPZSgzMiksaGUoKSgpKCksZGUoMzMsImRpdiIsNTIpKDM0LCJkaXYiLDUzKSgzNSwiZGl2Iiw1NCkoMzYsImRpdiIsNTUpKDM3LCJidXR0b24iLDU2'@;
put 'KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgzKTtyZXR1cm4gQ3QoaC5nb1RvQmFzZShoLnN1Yk9iai5iYXNlKSl9KSxPZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDM5LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29u'@;
put 'c3QgaD1MZSgzKTtyZXR1cm4gQ3QoaC5nZXRUYWJsZShoLnN1Yk9iai50YWJsZUlkKSl9KSxPZSg0MCwiIFZpZXcgc3RhZ2VkIGRhdGEgIiksaGUoKSxkZSg0MSwiYnV0dG9uIiw1OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMyk7cmV0dXJuIEN0KGguZ29CYWNr'@;
put 'KGguc3ViT2JqLmJhc2UpKX0pLE9lKDQyLCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoNDMsImRpdiIsNjUpLGd0KDQ0LGNfdCwzLDAsInNwYW4iLDY2KSxkZSg0NSwiZGl2IiwzMSkoNDYsImRpdiIsNjcpKDQ3LCJzcGFuIiw2OCksT2UoNDgsIiBDaGFuZ2VkIFJvd3MgIiks'@;
put 'ZGUoNDksInNwYW4iLDY5KSxPZSg1MCksaGUoKSgpLGRlKDUxLCJzcGFuIiw3MCksT2UoNTIsIiBBZGRlZCBSb3dzICIpLGRlKDUzLCJzcGFuIiw2OSksT2UoNTQpLGhlKCkoKSxkZSg1NSwic3BhbiIsNzEpLE9lKDU2LCIgRGVsZXRlZCBSb3dzICIpLGRlKDU3LCJzcGFuIiw2OSksT2UoNTgp'@;
put 'LGhlKCkoKSgpKCkoKSxkZSg1OSwiZGl2Iiw1MykoNjAsImNsci10b2dnbGUtY29udGFpbmVyIiwxMDApKDYxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg2MiwiaW5wdXQiLDYzKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKTtyZXR1cm4gZ2koZi5m'@;
put 'b3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSksaGUoKSxkZSg2MywibGFiZWwiKSxPZSg2NCksaGUoKSgpKCkoKSgpKCksZGUoNjUs'@;
put 'ImRpdiIsMTAxKSxndCg2Nix1X3QsMSwwLCJkaXYiLDQyKSxoZSgpLGd0KDY3LGhfdCw0LDEsImRpdiIsMTAyKSxkZSg2OCwiZGl2IiwxMDMpKDY5LCJ0YWJsZSIsMykoNzAsInRoZWFkIikoNzEsInRyIiw0NiksZ3QoNzIsZl90LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUoNzMsInRib2R5Iiks'@;
put 'Z3QoNzQsYl90LDMsNywidHIiLDQ4KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSg5KSxMcigiICIsYS5zdWJPYmouYmFzZSwiICIpLGZlKDUpLExyKCIgIixhLnRhYmxlRGVzY3JpcHRpb24sIiAiKSxmZSg2KSxNZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2Euc3ViT2Jq'@;
put 'LnRhYmxlSWQpLGZlKDIpLExyKCIgIixhLnN1Yk9iai50YWJsZUlkLCIiKSxmZSg1KSxMcigiICIsYS5zdWJPYmouc3VibWl0dGVkLCIgIiksZmUoNSksTHIoIiAiLGEuc3ViT2JqLnN1Ym1pdFJlYXNvbiwiICIpLGZlKDEyKSxNZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2KSxTcihhLmxl'@;
put 'bnMudXBkYXRlZCksZmUoNCksU3IoYS5sZW5zLm5ldyksZmUoNCksU3IoYS5sZW5zLmRlbGV0ZWQpLGZlKDQpLGZpKCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksZmUoMiksU3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksZmUoMiksTWUoIm5nSWYi'@;
put 'LGEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLGZlKDUpLE1lKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksZmUoMiksTWUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIHdfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTEpLGd0KDEsX190LDc1LDE2LCJk'@;
put 'aXYiLDkyKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBDX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLE9lKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBTX3QoYyxsKXtpZigx'@;
put 'JmMmJihkZSgwLCJkaXYiLDEwNSkoMSwiZGl2IiwxMDYpKDIsInNwYW4iLDc5KSxPZSgzLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDQsQ190LDMsMCwiZGl2Iiw4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSg0KSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gTV90KGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSx3X3QsMiwxLCJkaXYiLDg5KSgyLFNfdCw1LDEsImRpdiIsOTApLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1sZXQgbThlPSgoKT0+e2NsYXNzIGN7'@;
put 'Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnJvdXRlPXYsdGhpcy5kZXRhaWxzT3Blbj0hMSx0aGlzLnJlamVjdE9wZW49ITEsdGhpcy5sZW5zPXtuZXc6'@;
put 'MCx1cGRhdGVkOjAsZGVsZXRlZDowfSx0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRpbmdUYWJsZT0hMSx0aGlzLnN1Ym1pdFJlYXNvbj0iIix0aGlzLmluc3RhbmNlPSJob3RJbnN0YW5jZSIsdGhpcy5hY2NlcHRMb2FkaW5nPSExLHRoaXMucmVqZWN0TG9hZGluZz0hMSx0aGlzLnN1Ym1pdHRl'@;
put 'ZD0hMSx0aGlzLnRhYmxlRmxhZz0hMSx0aGlzLnJvd0tleXM9W10sdGhpcy5jaEFycj1bXSx0aGlzLnNlY29uZE9wZW49ITEsdGhpcy5mb3JtYXR0ZWRWYWx1ZXM9ITAsdGhpcy5jaGFuZ2VzQXJyPVtdLHRoaXMuZGlmZlRhYmxlPXtkYXRhOltdfSx0aGlzLmRpZmZzTGltaXQ9ITEsdGhpcy5y'@;
put 'ZWNvcmRzTGltaXQ9MTAwLHRoaXMucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlPSExfWdldCBub0NoYW5nZXMoKXtyZXR1cm4gMD09PXRoaXMubGVucy5uZXcmJjA9PT10aGlzLmxlbnMudXBkYXRlZCYmMD09PXRoaXMubGVucy5kZWxldGVkfWdvVG9CYXNlKGEpe3RoaXMucm91'@;
put 'dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdvVG9BcHByb3ZhbHNMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmUiKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvQmFjayhhKXt0aGlzLnJv'@;
put 'dXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31nZXREZXRhaWxz'@;
put 'KCl7dGhpcy5kZXRhaWxzT3Blbj0hMH1vbkhvdFNlbGVjdGlvbihhKXt0aGlzLmhvdFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFNlbGVjdGlvbj1udWxsfSwxMDApfXJlamVjdGluZygpe3ZhciBhPXRoaXM7cmV0dXJuIFEo'@;
put 'ZnVuY3Rpb24qKCl7YS5yZWplY3RMb2FkaW5nPSEwLGEuc3VibWl0UmVhc29uPWEuc3VibWl0UmVhc29uLnJlcGxhY2UoL1xuL2csIi4gIik7bGV0IGQ9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLFNUUF9SRUFTT046YS5zdWJtaXRSZWFzb259O3lpZWxkIGEu'@;
put 'c2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpLnRoZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExLGEucmVqZWN0TG9hZGluZz0h'@;
put 'MX0pfSkoKX1hcHByb3ZlVGFibGUoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5wYXJhbXM/LkRJRkZUSU1FLExJQkRTOmEucGFyYW1zPy5M'@;
put 'SUJEU307eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmUmJmEuc2FzU2VydmljZS5yZWxvYWRTdGFydHVwRGF0YSgpLGEu'@;
put 'cm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSl9KSgpfWdvVG9TdWJtaXRMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZCIpfWNhbGxDaGFuZ2VzSW5mbyhhKXt2YXIgZD10'@;
put 'aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYSkudGhlbihoPT57ZC50YWJsZURldGFpbHM9aC5qc3BhcmFtc1swXSxkLmpzUGFyYW1zPWguanNwYXJhbXNbMF07bGV0IGY9W107Zm9yKGNvbnN0IHYgaW4gZC5qc1BhcmFtcylk'@;
put 'LmpzUGFyYW1zLmhhc093blByb3BlcnR5KHYpJiZmLnB1c2godik7ZC5rZXlzQXJyYXk9ZiwiTVBFX1RBQkxFUyI9PT1oLmpzcGFyYW1zWzBdLkJBU0VfRFMmJihkLnJlZnJlc2hTdGFydHVwc2VydmljZUFmdGVyQXBwcm92ZT0hMCl9KS5jYXRjaChoPT57ZC5hY2NlcHRMb2FkaW5nPSExfSku'@;
put 'ZmluYWxseSgoKT0+e2QubG9hZGVkPSEwfSl9KSgpfWZvcm1hdHRpbmdDaGFuZ2VkKCl7dGhpcy5jYWxjRGlmZigpfWNhbGNEaWZmKCl7aWYoIXRoaXMucmVzcG9uc2UpcmV0dXJuO2xldCBhPXRoaXMucmVzcG9uc2UubmV3LGQ9dGhpcy5yZXNwb25zZS51cGRhdGVzLGg9dGhpcy5yZXNwb25z'@;
put 'ZS5kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5vcmlnaW5hbHM7dGhpcy5mb3JtYXR0ZWRWYWx1ZXMmJihhPXRoaXMucmVzcG9uc2UuZm10X25ldyxkPXRoaXMucmVzcG9uc2UuZm10X3VwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmZtdF9kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5mbXRfb3JpZ2lu'@;
put 'YWxzKSx0aGlzLm9yaWdpbmFscz1mLHRoaXMucm93S2V5cz1bXTtmb3IobGV0IGR0PTA7ZHQ8ZC5sZW5ndGg7ZHQrKyl7bGV0IHF0PU9iamVjdC5rZXlzKGRbZHRdKTtmb3IobGV0IG1uPTA7bW48cXQubGVuZ3RoO21uKyspZFtkdF1bcXRbbW5dXSE9PWZbZHRdW3F0W21uXV0mJnRoaXMuY2hh'@;
put 'bmdlc0Fyci5wdXNoKHtpbmQ6ZHQsZmllbGQ6cXRbbW5dLHByb3A6ZFtkdF1bcXRbbW5dXSxvcmlnaW5hbDpmW2R0XVtxdFttbl1dfSl9dGhpcy5sZW5zPXtuZXc6dGhpcy5wYXJhbXM/Lk5VTV9BRERFRHx8MCx1cGRhdGVkOnRoaXMucGFyYW1zPy5OVU1fVVBEQVRFRHx8MCxkZWxldGVkOnRo'@;
put 'aXMucGFyYW1zPy5OVU1fREVMRVRFRHx8MH07bGV0IEc9W10scmU9ZC5jb25jYXQoYSxoKTtmb3IobGV0IGR0PTA7ZHQ8dGhpcy5yZXNwb25zZS5jb2xzLmxlbmd0aDtkdCsrKUcucHVzaCh0aGlzLnJlc3BvbnNlLmNvbHNbZHRdLk5BTUUpO2xldCB1ZT10aGlzLmxlbnMubmV3PnRoaXMucmVj'@;
put 'b3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy5uZXcseWU9dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLnVwZGF0ZWQ7dGhpcy5kaWZmc0xpbWl0PXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXR8'@;
put 'fHRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMuZGVsZXRlZD50aGlzLnJlY29yZHNMaW1pdCx0aGlzLmFkZENvdW50PXVlO2xldCBCZT1bXSxHZT1bXTtmb3IobGV0IGR0PTA7ZHQ8Ry5sZW5ndGg7ZHQrKylHZS5wdXNoKHtkYXRhOkdbZHRdLHJlYWRPbmx5'@;
put 'OiEwfSk7dGhpcy5kaWZmVGFibGUuZGF0YT1yZTtmb3IobGV0IGR0PTA7ZHQ8cmUubGVuZ3RoO2R0Kyspe2xldCBtbj1PYmplY3Qua2V5cyhyZVtkdF0pO3RoaXMucm93S2V5cy5wdXNoKG1uKX1sZXQgc3Q9W10scHQ9W107Zm9yKGxldCBkdD0wO2R0PHRoaXMuZGlmZlRhYmxlLmRhdGEubGVu'@;
put 'Z3RoO2R0Kyspe2lmKGR0PHllJiYwIT09eWUpe3N0LnB1c2goW10pLHB0LnB1c2goW10pLEJlLnB1c2goInVwZGF0ZWQiKTtsZXQgcXQ9T2JqZWN0LmtleXModGhpcy5kaWZmVGFibGUuZGF0YVtkdF0pO2ZvcihsZXQgbW49MDttbjxxdC5sZW5ndGg7bW4rKyl7bGV0IHduPXF0W21uXTtmW2R0'@;
put 'XVt3bl0hPT1kW2R0XVt3bl0/KHN0W2R0XS5wdXNoKCEwKSxwdFtkdF0ucHVzaChmW2R0XVt3bl0pKTooc3RbZHRdLnB1c2goITEpLHB0W2R0XS5wdXNoKG51bGwpKX10aGlzLmFyckNoYW5nZWQ9c3QsdGhpcy5hcnJPZkNoYW5nZXM9cHR9ZHQ+PXllJiZkdDx5ZSt1ZSYmQmUucHVzaCgiYWRk'@;
put 'ZWQiKSxkdD51ZSt5ZS0xJiZCZS5wdXNoKCJkZWxldGVkIil9dGhpcy5jaEFycj1CZSx0aGlzLnJvd0hlYWRlcj10aGlzLnJvd0tleXNbMF0sdGhpcy5kaWZmVGFibGUuZGF0YT1yZX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2lmKGEuX2RldGFp'@;
put 'bHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uuc3VibWl0dERldGFpbC5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1RKGZ1bmN0aW9uKihmKXthLnN1Yk9iaj1mLnZpZXdEYXRhLGEudGFibGVJZD1mLnZpZXdEYXRhLnRhYmxlSWQsYS5zdWJtaXR0ZWQ9Zi52aWV3RGF0YS5zdWIsYS5zdWJtaXRE'@;
put 'ZXRhaWxzPWYuZGF0YSxhLnN1Ym1pdEFycj1bXTtmb3IobGV0IE0gaW4gYS5zdWJtaXREZXRhaWxzKSJzdWIiIT09TSYmYS5zdWJtaXRBcnIucHVzaChNKTtsZXQgdj17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygp'@;
put 'fTthLnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnModiwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKE09PnthLnBhcmFtcz1NLnBhcmFtc1swXSxhLnJlc3BvbnNlPU0sYS5jYWxjRGlmZigpLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KS5jYXRjaChN'@;
put 'PT5NKS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITB9KX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ+InUiKXJldHVybjthLnRhYmxlSWQ9YS5yb3V0ZXIu'@;
put 'c25hcHNob3QucGFyYW1zLnRhYmxlSWQ7bGV0IGQ9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3Rk'@;
put 'YXRhIikudGhlbihoPT57YS5wYXJhbXM9aC5wYXJhbXNbMF0sYS5yZXNwb25zZT1oLGEuY2FsY0RpZmYoKSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMCxhLnNldEZvY3Vz'@;
put 'KCl9KX0pKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXRhaWxzU3ViJiZ0aGlzLl9kZXRhaWxzU3ViLnVuc3Vic2NyaWJlKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2NlcHRCdG4iKTthJiZhLmZvY3VzKCl9LDIw'@;
put 'MCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoSWgpLCRlKFZvKSwkZShtYyksJGUoeXUpLCRlKExvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZS1kZXRhaWxzIl1dLGhvc3RB'@;
put 'dHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJu'@;
put 'Z0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9y'@;
put 'bUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIs'@;
put 'ImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJd'@;
put 'LFsxLCJsZWZ0IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50'@;
put 'ZXIiLDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNv'@;
put 'bHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwi'@;
put 'bS0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJv'@;
put 'dmFsSW5mbyJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNh'@;
put 'cmQtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4'@;
put 'Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xy'@;
put 'LWNvbC1tZC01Il0sWzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0w'@;
put 'Il0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwi'@;
put 'YnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2Fw'@;
put 'LXNtLTAiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRu'@;
put 'IiwiYnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxb'@;
put 'MSwiZm9ybWF0dGVkLXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xy'@;
put 'LWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUt'@;
put 'MTgiXSxbMSwibXQtMTUiXSxbMSwibGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVt'@;
put 'biIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNz'@;
put 'Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIs'@;
put 'ImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1j'@;
put 'b2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVm'@;
put 'dCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwi'@;
put 'b3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwi'@;
put 'anVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCkscGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0'@;
put 'dXJuIGdpKGguZGV0YWlsc09wZW4sdil8fChoLmRldGFpbHNPcGVuPXYpLHZ9KSxkZSgxLCJoMyIsMSksT2UoMiwiQXBwcm92YWwgRGV0YWlscyIpLGhlKCksZGUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxPZSg4LCJOYW1lIiksaGUoKSxk'@;
put 'ZSg5LCJ0aCIsNCksT2UoMTAsIlZhbHVlIiksaGUoKSgpKCksZGUoMTEsInRib2R5IiksZ3QoMTIsTmJ0LDUsMywidHIiLDUpLGhlKCkoKSgpLGRlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZXRhaWxzT3Blbj0hMX0pLE9lKDE1'@;
put 'LCIgT2sgIiksaGUoKSgpKCksZGUoMTYsImNsci1tb2RhbCIsMCkscGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGdpKGgudGFibGVGbGFnLHYpfHwoaC50YWJsZUZsYWc9diksdn0pLGRlKDE3LCJoMyIsMSksT2UoMTgsIkFsbCBEZXRhaWxzIiksaGUoKSxkZSgx'@;
put 'OSwiZGl2IiwyKSxndCgyMCx6YnQsMTksMiwiY2xyLXRhYnMiLDgpLGhlKCksZGUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnRhYmxlRmxhZz0hMX0pLE9lKDIzLCIgT2sgIiksaGUoKSgpKCksZGUoMjQsImNsci1tb2RhbCIsMCks'@;
put 'cGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGdpKGgucmVqZWN0T3Blbix2KXx8KGgucmVqZWN0T3Blbj12KSx2fSksZGUoMjUsImgzIiwxKSxPZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxoZSgpLGRlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24i'@;
put 'LDkpKDMwLCJkaXYiLDEwKSgzMSwibGFiZWwiLDExKSxPZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksaGUoKSxkZSgzMywidGV4dGFyZWEiLDEyKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGdpKGguc3VibWl0UmVhc29uLHYpfHwoaC5zdWJtaXRSZWFzb249'@;
put 'diksdn0pLGhlKCkoKSgpKCkoKSxkZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdE9wZW49ITF9KSxPZSgzNiwiIENhbmNlbCAiKSxoZSgpLGRlKDM3LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGgucmVqZWN0aW5nKCl9KSxPZSgzOCwiIE9LICIpLGhlKCkoKSgpLGRlKDM5LCJkaXYiLDE1KSxndCg0MCxsX3QsNCwyLCJkaXYiLDE2KSg0MSxNX3QsMywyLCJkaXYiLDgpLGhlKCkpLDImZCYmKGZpKCJjbHJNb2RhbE9wZW4iLGguZGV0YWlsc09wZW4pLGZlKDEyKSxNZSgibmdGb3JP'@;
put 'ZiIsaC5rZXlzQXJyYXkpLGZlKDQpLGZpKCJjbHJNb2RhbE9wZW4iLGgudGFibGVGbGFnKSxmZSg0KSxNZSgibmdJZiIsaC50YWJsZUZsYWcpLGZlKDQpLGZpKCJjbHJNb2RhbE9wZW4iLGgucmVqZWN0T3BlbiksZmUoOSksZmkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uKSxNZSgibmdNb2Rl'@;
put 'bE9wdGlvbnMiLFpvKDExLFBidCkpKCJpbm5lckhUTUwiLGguc3VibWl0UmVhc29uLFY0KSxmZSg0KSxNZSgiY2xyTG9hZGluZyIsaC5yZWplY3RMb2FkaW5nKSxmZSgzKSxNZSgibmdJZiIsIWguc3VibWl0dGVkKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6'@;
put 'W3Z1LFFzLGJhLGw3LEdsLE1kLHRsLHM3LFdvLHdwLGwxLE9sLGVvLHJ1LFl1LFYwLExiLEgyLGNvLElkLEZiLHhoLHZtLGJtLHg3LHltLG1tLFM3XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHhfdD1jPT4oe25vQm9yZGVyOmN9KSxFX3Q9KCk9PlszLDUsMTAsMTVd'@;
put 'O2Z1bmN0aW9uIFRfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTApKDEsImRpdiIsMTEpLFd0KDIsImNsci1pY29uIiwxMiksZGUoMywiaDMiLDEzKSxPZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGhlKCkoKSgpKX1mdW5jdGlvbiBBX3QoYyxsKXsxJmMmJihkZSgw'@;
put 'LCJoMyIsMTQpLE9lKDEsIiBSRVZJRVcgIiksaGUoKSl9ZnVuY3Rpb24ga190KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTUpLE9lKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksT2UoMyksaGUoKSxPZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGhlKCkpLDImYyl7Y29uc3QgYT1M'@;
put 'ZSgpO2ZlKDMpLExyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gRF90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTgpLE9lKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIElfdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiwiTG9hZGluZyBhcHByb3Zh'@;
put 'bHMgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rpb24gUl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxEX3QsMiwwLCJzcGFuIiwxNykoMixJX3QsMywwLCJkaXYiLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJ'@;
put 'ZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gTF90KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsNDApfWZ1bmN0aW9uIE9fdChjLGwpezEmYyYmV3QoMCwiY2xyLXNwaW5uZXIiLDQxKSwyJmMmJk1lKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIFBfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Pbigp'@;
put 'O2RlKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLE9lKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxPZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksT2UoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpLE9lKDgpLGhlKCksZGUoOSwiY2xyLWRnLWNlbGwiKSgxMCwi'@;
put 'ZGl2IiwyOCkoMTEsImEiLDI5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoTGUoMikuZ2V0Q2xpY2tlZChoKSl9KSxXdCgxMiwiY2xyLWljb24iLDMwKSxkZSgxMywic3BhbiIsMzEpLE9lKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4i'@;
put 'KSxoZSgpKCksZGUoMTUsImEiLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPUxlKDIpO3JldHVybiBDdChmLnJlamVjdExvYWRpbmc/IiI6TS5yZWplY3RpbmcodikpfSksZ3QoMTYsTF90LDEsMCwiY2xyLWljb24iLDMz'@;
put 'KSgxNyxPX3QsMSwxLCJjbHItc3Bpbm5lciIsMzQpLGRlKDE4LCJzcGFuIiwzMSksT2UoMTksIlJlamVjdCIpLGhlKCkoKSxkZSgyMCwiYSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikuZ2V0VGFibGUoaC50YWJsZUlk'@;
put 'KSl9KSxXdCgyMSwiY2xyLWljb24iLDM2KSxkZSgyMiwic3BhbiIsMzEpLE9lKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDI0LCJjbHItZGctY2VsbCIsMzcpKDI1LCJidXR0b24iLDM4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSku'@;
put 'JGltcGxpY2l0O3JldHVybiBMZSgyKS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksV3QoMjYsImNsci1pY29uIiwzOSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLFNyKGEuc3VibWl0dGVyKSxmZSgyKSxTcihhLmJhc2VU'@;
put 'YWJsZSksZmUoMiksU3IoYS5zdWJtaXR0ZWQpLGZlKDIpLFNyKGEuc3VibWl0UmVhc29uKSxmZSg4KSxNZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxmZSg4KSxNZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIEZfdChjLGwpe2lm'@;
put 'KDEmYyYmKGRlKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxPZSgzLCIgU1VCTUlUVEVSICIpLFd0KDQsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyMSksaGUoKSxkZSg1LCJjbHItZGctY29sdW1uIiwyMCksT2UoNiwiIEJBU0UgVEFCTEUgIiks'@;
put 'V3QoNywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDIyKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDIwKSxPZSg5LCIgU1VCTUlUVEVEICIpLFd0KDEwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjMpLGhlKCksZGUoMTEsImNsci1kZy1jb2x1bW4iLDIwKSxPZSgxMiwiIFNVQk1JVCBSRUFT'@;
put 'T04gIiksV3QoMTMsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyNCksaGUoKSxkZSgxNCwiY2xyLWRnLWNvbHVtbiIpLE9lKDE1LCJBQ1RJT04iKSxoZSgpLGRlKDE2LCJjbHItZGctY29sdW1uIiksT2UoMTcsIkRPV05MT0FEIiksaGUoKSxndCgxOCxQX3QsMjcsNywiY2xyLWRnLXJvdyIsMjUp'@;
put 'LGRlKDE5LCJjbHItZGctZm9vdGVyIikoMjAsImNsci1kZy1wYWdpbmF0aW9uIiwyNiwwKSgyMiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjcpLE9lKDIzLCJJdGVtcyBwZXIgcGFnZSIpLGhlKCksT2UoMjQpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1kYSgyMSksZD1MZSgpO2ZlKDIpLE1lKCJj'@;
put 'bHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksZmUoMiksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdHRlckZpbHRlciksZmUoKSxNZSgiY2xyRGdGaWVsZCIsImJhc2VUYWJsZSIpLGZlKDIpLE1lKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5iYXNlVGFibGVGaWx0ZXIpLGZlKCksTWUoImNs'@;
put 'ckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQuc3VibWl0dGVkRmlsdGVyKSxmZSgpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoMiksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdFJlYXNvbkZpbHRlciksZmUoNSks'@;
put 'TWUoImNsckRnSXRlbXNPZiIsZC5hcHByb3ZlTGlzdCksZmUoMiksTWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxNZSgiY2xyUGFnZVNpemVPcHRpb25zIixabygxNCxFX3QpKSxmZSgyKSxaZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJ'@;
put 'dGVtcywiIGFwcHJvdmFscyAiKX19Y2xhc3MgSF90e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXR0ZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIE5fdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuYmFzZVRhYmxlLnRvTG93ZXJDYXNlKCkuaW5k'@;
put 'ZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBWX3R7YWNjZXB0cyhsLGEpe3JldHVybiBsLnN1Ym1pdHRlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3MgQl90e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXRSZWFzb24udG9Mb3dlckNh'@;
put 'c2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWxldCBqX3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9dix0'@;
put 'aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMuc3VibWl0dGVyRmlsdGVyPW5ldyBIX3QsdGhpcy5iYXNlVGFibGVGaWx0ZXI9bmV3IE5fdCx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgVl90LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBCX3R9Z2V0VGFibGUoYSl7dGhp'@;
put 'cy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRDbGlja2VkKGEpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxlSWQ9dGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0'@;
put 'aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpKX1yZWplY3RpbmcoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXt2b2lkIDAhPT1kLmFwcHJvdmVMaXN0JiYoZC50YWJsZUlkPWQuYXBwcm92ZUxpc3RbYV0udGFibGVJZCk7bGV0IGg9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJM'@;
put 'RSIsVEFCTEU6ZC50YWJsZUlkLFNUUF9SRUFTT046InF1aWNrIHJlamVjdGlvbiJ9O3RyeXsoZC5hcHByb3ZlTGlzdHx8W10pW2FdLnJlamVjdExvYWRpbmc9ITAsKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhoLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlv'@;
put 'biIpKS5mcm9tc2FzWzBdLlJFU1BPTlNFLmluY2x1ZGVzKCJTVUNDRVNTIikmJigoZC5hcHByb3ZlTGlzdHx8W10pW2FdLnJlamVjdExvYWRpbmc9ITEsZC5hcHByb3ZlTGlzdD8uc3BsaWNlKGEsMSksZC5yZW1haW5lZC0tLGQuY2RyLmRldGVjdENoYW5nZXMoKSl9Y2F0Y2goZil7ZC5ldmVu'@;
put 'dFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvcmVqZWN0aW9uIixmKX19KSgpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5j'@;
put 'dGlvbiooKXthLml0ZW1zTnVtPTEwO2xldCBkPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRBcHByb3ZhbHMoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiKTthLnJlbWFpbmVkPWguZnJv'@;
put 'bXNhcy5sZW5ndGg7bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXR0ZWQ6di5TVUJNSVRURURfT05fRFRUTSxiYXNlVGFibGU6di5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjp2'@;
put 'LlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2EuYXBwcm92ZUxpc3Q9ZixhLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLGgpfX0pKCl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdl'@;
put 'dFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoSWgpLCRlKG1jKSwkZShMbyksJGUoVm8pLCRlKHhvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFp'@;
put 'bmVyIl0sZGVjbHM6OSx2YXJzOjgsY29uc3RzOltbInBhZ2luYXRpb24iLCIiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNz'@;
put 'IiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIiw0LCJuZ0lmIl0sWyJuZy1pZiIs'@;
put 'ImxvYWRlZCIsMSwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayIsIm5vYXBwcm92YWxzLWluZm8td3JhcHBlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJp'@;
put 'cy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiYXBwcm92YWxz'@;
put 'LWxpc3Qtd3JhcHBlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdWJtaXR0ZXIiLDMsImNsckRn'@;
put 'U3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIGJhc2UgdGFibGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlZCBkYXRlIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdWJtaXQgcmVh'@;
put 'c29uIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl0sWyJyb2xlIiwidG9vbGJhciIsImFyaWEtbGFiZWwiLCJUYWJsZSBhY3Rpb25zIiwxLCJjbHItcm93Iiwi'@;
put 'ZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ncmVlbiIsMywiY2xpY2siXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjQiLCJhcmlh'@;
put 'LWhpZGRlbiIsInRydWUiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLXJlZCIsMywiY2xpY2siXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiwiYXJp'@;
put 'YS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDMsImNsclNtYWxsIiw0LCJuZ0lmIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNr'@;
put 'Il0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUiLDEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayIs'@;
put 'ImlkIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwzLCJjbHJTbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSkoMSwiZGl2Iiwy'@;
put 'KSxndCgyLFRfdCw1LDAsImRpdiIsMyksZGUoMywiZGl2Iiw0KSxndCg0LEFfdCwyLDAsImgzIiw1KSg1LGtfdCw1LDEsInAiLDYpLGhlKCksZ3QoNixSX3QsMywyLCJkaXYiLDcpLGRlKDcsImRpdiIsOCksZ3QoOCxGX3QsMjUsMTUsImRpdiIsOSksaGUoKSgpKCkpLDImZCYmKGZlKDIpLE1l'@;
put 'KCJuZ0lmIiwwPT09aC5yZW1haW5lZCksZmUoKSxNZSgibmdDbGFzcyIsbHAoNix4X3QsIWgubG9hZGVkKSksZmUoKSxNZSgibmdJZiIsaC5sb2FkZWQmJjAhPT1oLnJlbWFpbmVkKSxmZSgpLE1lKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVtYWluZWQpLGZlKCksTWUoIm5nSWYiLCFoLmxv'@;
put 'YWRlZCksZmUoMiksTWUoIm5nSWYiLGguYXBwcm92ZUxpc3QmJjAhPT1oLnJlbWFpbmVkKSl9LGRlcGVuZGVuY2llczpbdnUsYmEseG0scjMsUjcsZk8sS2IsbkUscE8sU20seHAsTDcsSmIsTW0sazcsQ20sRDcsV2IsT2wsUmRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29u'@;
put 'c3Qgel90PWM9Pih7bm9Cb3JkZXI6Y30pLFVfdD0oKT0+WzMsNSwxMCwxNV07ZnVuY3Rpb24gWl90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksV3QoMiwiY2xyLWljb24iLDE1KSxkZSgzLCJoMyIsMTYpLE9lKDQsIiBZb3UgaGF2ZSBub3Qgc3VibWl0dGVkIGFueSB0'@;
put 'YWJsZXMgIiksaGUoKSgpKCkpfWZ1bmN0aW9uIFdfdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNyksT2UoMSwiIFNVQk1JVCBRVUVVRSAiKSxoZSgpKX1mdW5jdGlvbiBZX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxOCksT2UoMSwiIFlvdSBoYXZlICIpLGRlKDIsInNwYW4iKSxPZSgzKSxo'@;
put 'ZSgpLE9lKDQsInN1Ym1pc3Npb25zIHdhaXRpbmcgdG8gYmUgYXBwcm92ZWQgIiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDMpLExyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gR190KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMjEpLE9lKDEsIiBMb2FkaW5nLi4uICIpLGhl'@;
put 'KCkpfWZ1bmN0aW9uICRfdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiwiTG9hZGluZyBzdWJtaXR0ZWQgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rpb24gS190KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOSksZ3QoMSxHX3QsMiwwLCJzcGFuIiwyMCkoMiwkX3QsMywwLCJk'@;
put 'aXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFhfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kZy1yb3ciLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDUpLmdvVG9EZXRhaWxzKGgudGFibGVJZCkpfSksZGUoMSwiY2xyLWRnLWNlbGwiKSxPZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksT2UoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLE9lKDYpLGhlKCksZGUo'@;
put 'NywiY2xyLWRnLWNlbGwiKSg4LCJkaXYiLDMxKSg5LCJhIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSg1KS5nb1RvU3RhZ2UoaC50YWJsZUlkKSl9KSxXdCgxMCwiY2xyLWljb24iLDMzKSxkZSgxMSwic3BhbiIsMzQpLE9l'@;
put 'KDEyLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDEzLCJjbHItZGctY2VsbCIsMzUpKDE0LCJidXR0b24iLDM2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBMZSg1KS5kb3dubG9hZChmLnRhYmxlSWQpLEN0'@;
put 'KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksV3QoMTUsImNsci1pY29uIiwzNyksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLFNyKGEuYmFzZSksZmUoMiksU3IoYS5zdWJtaXR0ZWQpLGZlKDIpLFNyKGEuc3VibWl0UmVhc29uKX19ZnVuY3Rpb24gcV90KGMsbCl7'@;
put 'aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwyMykoMiwiY2xyLWRnLWNvbHVtbiIpLE9lKDMsIkJBU0UgVEFCTEUiKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iLDI0KSxPZSg1LCIgU1VCTUlUVEVEICIpLFd0KDYsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyNSksaGUo'@;
put 'KSxkZSg3LCJjbHItZGctY29sdW1uIiwyNCksT2UoOCwiIFNVQk1JVCBSRUFTT04gIiksV3QoOSwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDI2KSxoZSgpLGRlKDEwLCJjbHItZGctY29sdW1uIiwxMyksT2UoMTEsIkFDVElPTiIpLGhlKCksZGUoMTIsImNsci1kZy1jb2x1bW4iLDEzKSxPZSgx'@;
put 'MywiRE9XTkxPQUQiKSxoZSgpLGd0KDE0LFhfdCwxNiwzLCJjbHItZGctcm93IiwyNyksZGUoMTUsImNsci1kZy1mb290ZXIiKSgxNiwiY2xyLWRnLXBhZ2luYXRpb24iLDI4LDApKDE4LCJjbHItZGctcGFnZS1zaXplIiwyOSksT2UoMTksIkl0ZW1zIHBlciBwYWdlIiksaGUoKSxPZSgyMCks'@;
put 'aGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPWRhKDE3KSxkPUxlKDQpO2ZlKDQpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksZmUoMiksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdHRlZEZpbHRlciksZmUoKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLGZlKDIp'@;
put 'LE1lKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5zdWJtaXRSZWFzb25GaWx0ZXIpLGZlKDUpLE1lKCJjbHJEZ0l0ZW1zT2YiLGQuc3VibWl0dGVyTGlzdCksZmUoMiksTWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxNZSgiY2xyUGFnZVNpemVPcHRpb25zIixabygxMCxVX3QpKSxmZSgyKSxa'@;
put 'ZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBKX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIyKSxndCgxLHFfdCwyMSwxMSwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUo'@;
put 'Myk7ZmUoKSxNZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0JiYwIT09YS5yZW1haW5lZCl9fWZ1bmN0aW9uIFFfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNiksZ3QoMSxaX3QsNSwwLCJkaXYiLDcpLGRlKDIsImRpdiIsOCksZ3QoMyxXX3QsMiwwLCJoMyIsOSkoNCxZX3QsNSwxLCJwIiwx'@;
put 'MCksaGUoKSxndCg1LEtfdCwzLDIsImRpdiIsMTEpKDYsSl90LDIsMSwiZGl2IiwxMiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTWUoIm5nSWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxvYWRlZCksZmUoKSxNZSgibmdDbGFzcyIsbHAoNix6X3QsIWEubG9hZGVkKSksZmUoKSxNZSgi'@;
put 'bmdJZiIsMCE9PWEucmVtYWluZWQpLGZlKCksTWUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1haW5lZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIGV3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCksZ3QoMSxRX3Qs'@;
put 'Nyw4LCJkaXYiLDUpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLCFhLnN1YlJlYWR5KX19ZnVuY3Rpb24gdHd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksV3QoMSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLGhlKCkpfWNsYXNzIG53dHthY2NlcHRzKGwsYSl7cmV0dXJu'@;
put 'IGwuc3VibWl0dGVkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyByd3R7YWNjZXB0cyhsLGEpe3JldHVybiBsLnN1Ym1pdFJlYXNvbi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49MH19bGV0IHY4ZT0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMucmVtYWluZWQ9MCx0aGlzLmxvYWRlZD0hMSx0aGlzLnN1YlJlYWR5PSExLHRoaXMu'@;
put 'ZGV0YWlsc09wZW49ITEsdGhpcy5zdWJtaXR0ZWRGaWx0ZXI9bmV3IG53dCx0aGlzLnN1Ym1pdFJlYXNvbkZpbHRlcj1uZXcgcnd0fWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb1RvRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5'@;
put 'VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxkKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBR'@;
put 'KGZ1bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3Vi'@;
put 'bWl0dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9C'@;
put 'WV9OTSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KE09Pk0udGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0'@;
put 'RGV0YWlscyhhLnN1Ym1pdHRlckxpc3Rbdl0sdil9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2'@;
put 'aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93'@;
put 'bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0'@;
put 'YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoSWgpLCRlKG1jKSwkZShMbyksJGUoeXUpLCRlKFZvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0'@;
put 'dGVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJjb250ZW50LWFyZWEiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNz'@;
put 'IiwiY2FyZCIsNCwibmdJZiJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0s'@;
put 'WyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJj'@;
put 'bHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibm8tc3VibWl0dGVkLXRhYmxlcyIsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50'@;
put 'ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAw'@;
put 'IiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLWNvbC1tZC0xMiJd'@;
put 'LFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlZCBkYXRlIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdWJtaXQgcmVhc29uIiwz'@;
put 'LCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0s'@;
put 'WyJyb2xlIiwidG9vbHRpcCIsImFyaWEtbGFiZWwiLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0Iiwi'@;
put 'Y29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUgZm9yIHRhYmxlIHJl'@;
put 'Y29yZCIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSxndCgxLGV3dCwyLDEsImRpdiIsMikoMix0d3QsMiwwLCJkaXYiLDMpLGhlKCkpLDImZCYmKGZlKCksTWUo'@;
put 'Im5nSWYiLCFoLnN1YlJlYWR5KSxmZSgpLE1lKCJuZ0lmIixoLnN1YlJlYWR5KSl9LGRlcGVuZGVuY2llczpbdnUsYmEseG0scjMsUjcsZk8sS2IsbkUscE8sU20seHAsTDcsSmIsTW0sazcsQ20sRDcsV2IsT2wsbThlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGl3'@;
put 'dD0oYyxsKT0+KHtyZWplY3RlZDpjLGFjY2VwdGVkOmx9KTtmdW5jdGlvbiBhd3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEyKSxXdCgxLCJjbHItaWNvbiIsMTMpLGRlKDIsImgzIiwxNCksT2UoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBzaG93IiksaGUoKSgpKX1mdW5jdGlvbiBzd3Qo'@;
put 'YyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1MZSgpO3JldHVybiBDdChmLmdldFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE9lKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PUxlKCkuJGltcGxpY2l0LGQ9TGUoKTtmZSgpLFNyKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiBvd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiKSgxLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1M'@;
put 'ZSgpO3JldHVybiBDdChmLmdldEJhc2VUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxPZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJzcGFuIiksT2UoNCwiIC8gIiksaGUoKSxkZSg1LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1M'@;
put 'ZSgpO3JldHVybiBDdChmLmdldEVkaXRUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxPZSg2LCJFRElUIiksaGUoKSgpfX1mdW5jdGlvbiBsd3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0LGQ9TGUoKTtmZSgpLFNy'@;
put 'KGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiBjd3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw2KSxPZSgyKSxoZSgpLGRlKDMsInRkIiw2KSxndCg0LHN3dCwyLDEsImEiLDE1KSg1LG93dCw3LDAsImRpdiIsMTYpKDYsbHd0LDIsMSwic3BhbiIsMTYpLGhlKCkoKSksMiZj'@;
put 'KXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDtmZSgyKSxTcihhKSxmZSgyKSxNZSgibmdJZiIsZDwxKSxmZSgpLE1lKCJuZ0lmIixkPDImJmQ+PTEpLGZlKCksTWUoIm5nSWYiLGQ+PTIpfX1mdW5jdGlvbiB1d3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwyMCksT2UoMSwiIExvYWRp'@;
put 'bmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gZHd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2FkaW5nIGhpc3RvcnkiKSxoZSgpKCkpfWZ1bmN0aW9uIGh3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTgpLGd0KDEsdXd0LDIsMCwic3BhbiIsMTkpKDIsZHd0LDMs'@;
put 'MCwiZGl2IiwxNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBmd3QoYyxsKXsxJmMmJihkZSgwLCJoMyIsMjgpLE9lKDEsIkhJU1RPUlkiKSxoZSgpKX1mdW5jdGlvbiBwd3QoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJwIiwyOSksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksTHIoIiBUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQsIiByZWNvcmRzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRy'@;
put 'b2xsZXIuaW8gIil9fWZ1bmN0aW9uIGd3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kZy1yb3ciLDM5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDMpLmdldEFwcHJJbmRleChoKSl9KSxkZSgxLCJjbHIt'@;
put 'ZGctY2VsbCIsNDApKDIsImEiLDQxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDMpLmdldEJhc2VUYWJsZShoLmJhc2V0YWJsZSkpfSksT2UoMyksaGUoKSgpLGRlKDQsImNsci1kZy1jZWxsIiw0MiksT2UoNSksaGUoKSxkZSg2'@;
put 'LCJjbHItZGctY2VsbCIsNDApLE9lKDcpLGhlKCksZGUoOCwiY2xyLWRnLWNlbGwiLDQwKSxPZSg5KSxoZSgpLGRlKDEwLCJjbHItZGctY2VsbCIsNDApLE9lKDExKSxoZSgpLGRlKDEyLCJjbHItZGctY2VsbCIsNDApLE9lKDEzKSxoZSgpLGRlKDE0LCJjbHItZGctY2VsbCIsNDMpKDE1LCJi'@;
put 'dXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBMZSgzKS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksV3QoMTYsImNsci1pY29uIiw0NSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwu'@;
put 'JGltcGxpY2l0O2ZlKDMpLFNyKGEuYmFzZXRhYmxlKSxmZSgpLE1lKCJuZ0NsYXNzIixjcCg3LGl3dCwiUkVKRUNURUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksZmUoKSxTcihhLnN0YXR1cyksZmUoMiksU3IoYS5zdWJtaXR0ZXIpLGZlKDIpLFNyKGEuc3VibWl0dGVk'@;
put 'UmVhc29uKSxmZSgyKSxTcihhLnN1Ym1pdHRlZCksZmUoMiksU3IoYS5yZXZpZXdlZCl9fWZ1bmN0aW9uIG13dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kYXRhZ3JpZCIsMzApKDEsImNsci1kZy1jb2x1bW4iLDMxKSxPZSgyLCIgQkFTRV9UQUJMRSAiKSxXdCgzLCJjbHItZGctc3RyaW5n'@;
put 'LWZpbHRlciIsMzIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIsMzEpLE9lKDUsIiBTVEFUVVMgIiksV3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDMzKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iLDMxKSxPZSg4LCIgU1VCTUlUVEVSICIpLFd0KDksImNsci1kZy1zdHJpbmctZmls'@;
put 'dGVyIiwzNCksaGUoKSxkZSgxMCwiY2xyLWRnLWNvbHVtbiIsMzEpLE9lKDExLCIgU1VCTUlUIFJFQVNPTiAiKSxXdCgxMiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDM1KSxoZSgpLGRlKDEzLCJjbHItZGctY29sdW1uIiwzMSksT2UoMTQsIiBTVUJNSVRURUQgIiksV3QoMTUsImNsci1kZy1z'@;
put 'dHJpbmctZmlsdGVyIiwzNiksaGUoKSxkZSgxNiwiY2xyLWRnLWNvbHVtbiIsMzEpLE9lKDE3LCIgQVBQUk9WRUQgLyBSRUpFQ1RFRCAiKSxXdCgxOCwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDM3KSxoZSgpLGRlKDE5LCJjbHItZGctY29sdW1uIiksT2UoMjAsIkRPV05MT0FEIiksaGUoKSxn'@;
put 'dCgyMSxnd3QsMTcsMTAsImNsci1kZy1yb3ciLDM4KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgiY2xyRGdGaWVsZCIsImJhc2V0YWJsZSIpLGZlKDIpLE1lKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5iYXNlVGFibGVGaWx0ZXIpLGZlKCksTWUoImNsckRnRmllbGQiLCJzdGF0'@;
put 'dXMiKSxmZSgyKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEuc3RhdHVzRmlsdGVyKSxmZSgpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksZmUoMiksTWUoImNsckRnU3RyaW5nRmlsdGVyIixhLnN1Ym1pdHRlckZpbHRlciksZmUoKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZFJl'@;
put 'YXNvbiIpLGZlKDIpLE1lKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5zdWJtaXRSZWFzb25GaWx0ZXIpLGZlKCksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEuc3VibWl0dGVkRmlsdGVyKSxmZSgpLE1lKCJjbHJEZ0ZpZWxkIiwicmV2'@;
put 'aWV3ZWQiKSxmZSgyKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEucmV2aWV3ZWRGaWx0ZXIpLGZlKDMpLE1lKCJjbHJEZ0l0ZW1zT2YiLGEuaGlzdG9yeSl9fWZ1bmN0aW9uIHZ3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNDYpLEZ0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikubG9hZERhdGEoKSl9KSxPZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nTW9yZSksZmUoKSxMcigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVuY3Rpb24geXd0KGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMiksZ3QoMixmd3QsMiwwLCJoMyIsMjMpKDMscHd0LDIsMSwicCIsMjQpLGhlKCksZ3QoNCxtd3QsMjIsMTMsImNsci1kYXRhZ3JpZCIsMjUpLGRlKDUsImRpdiIsMjYpLGd0KDYsdnd0LDIsMiwiYnV0dG9uIiwyNyksaGUoKSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSxNZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIixhLmxpY2Vu'@;
put 'Y2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZD09PWEuSW5maW5pdHkmJmEucm93c0xlZnRUb0xvYWQ+MCl9fWNsYXNzIGJ3dHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuYmFzZXRhYmxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBfd3R7'@;
put 'YWNjZXB0cyhsLGEpe3JldHVybiBsLnN0YXR1cy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3Mgd3d0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXR0ZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIEN3'@;
put 'dHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuc3VibWl0dGVkUmVhc29uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBTd3R7YWNjZXB0cyhsLGEpe3JldHVybiBsLnN1Ym1pdHRlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49'@;
put 'MH19Y2xhc3MgTXd0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5yZXZpZXdlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49MH19Y29uc3QgeHd0PVt7cGF0aDoiYXBwcm92ZSIsY29tcG9uZW50OmpfdH0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVu'@;
put 'dDptOGV9LHtwYXRoOiJzdWJtaXR0ZWQiLGNvbXBvbmVudDp2OGV9LHtwYXRoOiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNvbXBvbmVudDp2OGV9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMubGljZW5jZVNlcnZpY2U9'@;
put 'YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLmhpc3Rvcnk9W10sdGhpcy50YWJsZVRpdGxlcz1bXSx0aGlzLmhpc3RvcnlBcnI9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMCx0'@;
put 'aGlzLm9wZW5Nb2RhbD0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLmFwcHJvdmVEYXRhPXt9LHRoaXMuc2FzanNDb25maWc9bmV3IHloLlNBU2pzQ29uZmlnLHRoaXMuYmFzZVRhYmxlRmlsdGVyPW5ldyBid3QsdGhpcy5zdGF0dXNGaWx0ZXI9bmV3IF93dCx0aGlzLnN1Ym1pdHRlckZpbHRlcj1u'@;
put 'ZXcgd3d0LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBDd3QsdGhpcy5zdWJtaXR0ZWRGaWx0ZXI9bmV3IFN3dCx0aGlzLnJldmlld2VkRmlsdGVyPW5ldyBNd3QsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMu'@;
put 'bGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9'@;
put 'Z2V0QmFzZVRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgo'@;
put 'aD0+aC5UQUJMRV9JRD09PWEudGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlz'@;
put 'Lmhpc3RQYXJhbXMuSElTVDtyZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3Blbiho'@;
put 'K3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgZD17U1RBUlRS'@;
put 'T1c6YS5oaXN0UGFyYW1zLkhJU1QrYS5oaXN0UGFyYW1zLlNUQVJUUk9XfTthLmxvYWRpbmdNb3JlPSEwO3RyeXtsZXQgZixoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEhpc3RvcnkoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRoaXN0b3J5Iik7YS5sb2FkaW5nTW9yZT0h'@;
put 'MSxhLmhpc3RQYXJhbXM9aC5oaXN0cGFyYW1zWzBdO2NvbnN0IHY9aC5mcm9tc2FzLnNsaWNlKDAsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpO2lmKHYubGVuZ3RoPjApe2NvbnN0IE09djthLmhpc3RvcnlBcnI9dixmPU9iamVjdC5rZXlzKE1bMF0pLGEudGFi'@;
put 'bGVUaXRsZXM9ZjtsZXQgST12Lm1hcChmdW5jdGlvbihHKXtyZXR1cm57dGFibGVJZDpHLlRBQkxFX0lELHN1Ym1pdHRlcjpHLlNVQk1JVFRFUixzdWJtaXR0ZWRSZWFzb246Ry5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6Ry5TVUJNSVRURUQsc3RhdHVzOkcuU1RBVFVTLHJldmll'@;
put 'd1JlYXNvbjpHLlJFVklFV19SRUFTT05fVFhULHJldmlld2VyOkcuUkVWSUVXRVIscmV2aWV3ZWQ6Ry5SRVZJRVdFRCxudW1PZkFwcHJvdmFsczpHLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOkcuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5JKSxhLmxvYWRl'@;
put 'ZD0hMH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhpc3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBh'@;
put 'PXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS5sb2FkRGF0YSgpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShjMSksJGUoSWgpLCRlKG1jKSwkZShMbyksJGUoVm8pKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMs'@;
put 'c2VsZWN0b3JzOltbImFwcC1oaXN0b3J5Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNsYXNzIiwiY2FyZC1ibG9jayBkLWZsZXgganVzdGlmeS1j'@;
put 'b250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVm'@;
put 'dCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsIkNsb3NlIG1vZGFsIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2Vu'@;
put 'dGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWdu'@;
put 'LWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciB0YWJsZS1saW5rIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lm'@;
put 'Il0sWzEsImN1cnNvci1wb2ludGVyIiwidGFibGUtbGluayIsMywiY2xpY2siXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bp'@;
put 'bm5lciJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwi'@;
put 'ZGF0YWdyaWQtaGlzdG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJidG4gYnRuLXN1Y2Nlc3MiLDMsImNsckxv'@;
put 'YWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdyaWQtaGlzdG9yeSIsImRhdGFncmlkLWN1c3RvbS1mb290'@;
put 'ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBiYXNlIHRhYmxlIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdGF0dXMiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlciIs'@;
put 'MywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0IHJlYXNvbiIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVy'@;
put 'IHJldmlld2VkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsIm0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2Vu'@;
put 'dGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxb'@;
put 'MSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxhd3QsNCwwLCJkaXYiLDEpLGRlKDIsImNsci1tb2RhbCIsMikscGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24o'@;
put 'dil7cmV0dXJuIGdpKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9kYWw9diksdn0pLGRlKDMsImg0IiwzKSxPZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaGUoKSxkZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIikoOSwidGgiLDYpLE9lKDEwLCJOYW1lIiksaGUo'@;
put 'KSxkZSgxMSwidGgiLDYpLE9lKDEyLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDEzLCJ0Ym9keSIpLGd0KDE0LGN3dCw3LDQsInRyIiw3KSxoZSgpKCkoKSxkZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub3Blbk1vZGFsPSExfSksT2Uo'@;
put 'MTcsIiBPSyAiKSxoZSgpKCkoKSxndCgxOCxod3QsMywyLCJkaXYiLDEwKSgxOSx5d3QsNyw0LCJkaXYiLDExKSxoZSgpKSwyJmQmJihmZSgpLE1lKCJuZ0lmIixoLm5vRGF0YSksZmUoKSxmaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Nb2RhbCksTWUoImNsck1vZGFsU2l6ZSIsInhsIiksZmUo'@;
put 'MTIpLE1lKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSxmZSg0KSxNZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbdnUsUXMsYmEseG0scjMsUjcsS2IsU20seHAsTDcsSmIsTW0sazcsQ20sRDcsV2IsT2wscnUs'@;
put 'WXUsVjAsSDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgRXd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxCYy5mb3JDaGlsZCh4d3QpLEJjXX0pfX1yZXR1cm4gY30pKCksVHd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpj'@;
put 'fSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxrYyxFd3QsQjAsWjksY2YseHddfSl9fXJldHVybiBjfSkoKSxBd3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZXdCgwLCJyb3V0ZXIt'@;
put 'b3V0bGV0Iil9LGRlcGVuZGVuY2llczpbbmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qga3d0PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIER3dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDYpLE9lKDEsIiBMb2FkaW5nLi4uICIpLGhl'@;
put 'KCkpfWZ1bmN0aW9uIEl3dChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIFJ3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCksZ3QoMSxEd3QsMiwwLCJzcGFuIiw1KSgyLEl3dCwzLDAsImRp'@;
put 'diIsMyksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBMd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHd0KGEpLEN0KExlKDIpLmFwcHJvdmVUYWJsZVNjcmVlbigpKX0pLE9lKDEsIiBBcHByb3ZlICIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO01lKCJkaXNhYmxlZCIsIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19T'@;
put 'VEFUVVNfSUQpfHwiUkVKRUNURUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKX19ZnVuY3Rpb24gT3d0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVu'@;
put 'dCIsMzEpKDEsInNwYW4iKSxPZSgyLCIgUmV2ZXJ0IHRoaXMgYW5kIGFsbCBzdWJzZXF1ZW50IGNoYW5nZXMgIiksaGUoKSgpKX1mdW5jdGlvbiBQd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDI5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp'@;
put 'LEN0KExlKDIpLnJldmVydENoYW5nZXMoKSl9KSxPZSgxLCIgUkVWRVJUICIpLGd0KDIsT3d0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMzApLGhlKCl9MiZjJiZNZSgiY2xyTG9hZGluZyIsTGUoMikucmV2ZXJ0aW5nQ2hhbmdlcyl9ZnVuY3Rpb24gRnd0KGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPU9uKCk7ZGUoMCwiZGl2IikoMSwiZGl2Iiw3KSgyLCJkaXYiLDgpKDMsImg0Iiw5KSxPZSg0LCJTdGFnZWQgRGF0YSIpLGhlKCkoKSgpLGRlKDUsImRpdiIsMTApKDYsImRpdiIsMTEpKDcsImRpdiIsMTIpKDgsImRpdiIsOCksT2UoOSwiQmFzaWMgU3VibWl0dGVkIERldGFpbHMiKSxo'@;
put 'ZSgpKCksZGUoMTAsImRpdiIpKDExLCJzcGFuIiksT2UoMTIsIlRhYmxlIElkOiIpLGhlKCksZGUoMTMsInN0cm9uZyIpKDE0LCJzcGFuIiksT2UoMTUpLGhlKCkoKSgpLGRlKDE2LCJkaXYiKSgxNywic3BhbiIpLE9lKDE4LCJCYXNlIFRhYmxlOiIpLGhlKCksZGUoMTksImEiLDEzKSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxPZSgyMCksaGUoKSgpLGRlKDIxLCJkaXYiKSgyMiwic3BhbiIpLE9lKDIzLCJTdWJtaXQgRGF0ZToiKSxoZSgpLGRlKDI0LCJzcGFuIiwxNCksT2UoMjUpLGhlKCkoKSxkZSgyNiwi'@;
put 'ZGl2IikoMjcsInNwYW4iKSxPZSgyOCwiUmV2aWV3IFN0YXR1czoiKSxoZSgpLGRlKDI5LCJzcGFuIiwxNSksT2UoMzApLGhlKCkoKSgpLGRlKDMxLCJkaXYiLDE2KSgzMiwiZGl2IiwxMikoMzMsImRpdiIsOCksT2UoMzQsIkFjdGlvbnMiKSxoZSgpKCksZGUoMzUsImRpdiIsMTcpKDM2LCJk'@;
put 'aXYiLDE4KSgzNywiYnV0dG9uIiwxOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksT2UoMzgsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxndCgzOSxMd3QsMiwyLCJidXR0b24iLDIwKSxkZSg0MCwiYnV0dG9uIiwy'@;
put 'MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmdvQmFjaygpKX0pLE9lKDQxLCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCksZGUoNDIsImJ1dHRvbiIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGguZG93'@;
put 'bmxvYWQobnVsbD09aC50YWJsZURldGFpbHM/bnVsbDpoLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpfSksV3QoNDMsImNsci1pY29uIiwyMyksaGUoKSxkZSg0NCwiY2xyLXRvb2x0aXAiKSxndCg0NSxQd3QsMywxLCJidXR0b24iLDI0KSxoZSgpKCkoKSgpKCksZGUoNDYsImRpdiIsMjUpLFd0'@;
put 'KDQ3LCJob3QtdGFibGUiLDI2KSxoZSgpLFd0KDQ4LCJkaXYiLDI3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKDE1KSxMcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiIiksZmUoNSksTHIoIiAiLG51bGw9PWEudGFibGVEZXRh'@;
put 'aWxzP251bGw6YS50YWJsZURldGFpbHMuQkFTRV9UQUJMRSwiICIpLGZlKDUpLExyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksZmUoNCksTWUoIm5nQ2xhc3MiLGNwKDEyLGt3dCwiUkVKRUNURUQiPT09KG51bGw9'@;
put 'PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCksIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSksaHIoImFyaWEtbGFiZWwiLCJSZXZpZXcgc3RhdHVzOiAiKyhu'@;
put 'dWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSxmZSgpLExyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQsIiAiKSxmZSg3KSxNZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5n'@;
put 'Q2hhbmdlcyksZmUoMiksTWUoIm5nSWYiLCJZRVMiIT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKCksTWUoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpLGZlKDUpLE1lKCJuZ0lmIiwiWUVTIj09PShudWxsPT1hLnRh'@;
put 'YmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkFMTE9XX1JFU1RPUkUpKSxmZSgyKSxNZSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgic2V0dGluZ3MiLGEuaG90VGFibGVTZXR0aW5ncyl9fWNvbnN0IEh3dD1be3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tn'@;
put 'ZXQgaG90VGFibGVTZXR0aW5ncygpe3JldHVybnsuLi50aGlzLmhvdFRhYmxlLnNldHRpbmdzLGNvbEhlYWRlcnM6dGhpcy5ob3RUYWJsZS5jb2xIZWFkZXJzLGNvbHVtbnM6dGhpcy5ob3RUYWJsZS5jb2x1bW5zLG1heFJvd3M6dGhpcy5ob3RUYWJsZS5tYXhSb3dzLGhlaWdodDp0aGlzLmhv'@;
put 'dFRhYmxlLmhlaWdodCxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGUubGljZW5zZUtleSxhZnRlckdldENvbEhlYWRlcjp0aGlzLmhvdFRhYmxlLmFmdGVyR2V0Q29sSGVhZGVyLGFmdGVySW5pdDp0aGlzLmhvdFRhYmxlLmFmdGVySW5pdCxzdHJldGNoSDoiYWxsIixjZWxsczp0aGlzLmhvdFRh'@;
put 'YmxlLmNlbGxzLGNsYXNzTmFtZToiaHREYXJrIn19Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPXYsdGhpcy5zYXNTZXJ2aWNlPU0s'@;
put 'dGhpcy5sb2FkZWQ9ITEsdGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDo1MDAsc2V0dGluZ3M6e2FyaWFU'@;
put 'YWdzOiExLHRhYmxlQ2xhc3NOYW1lOiJodENlbnRlciIsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiExLGF1dG9XcmFwUm93OiExLGF1dG9XcmFwQ29sOiExfSxsaWNlbnNlS2V5OnZvaWQgMCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wLGFm'@;
put 'dGVyR2V0Q29sSGVhZGVyOihJLEcscmUpPT57Ry5jbGFzc0xpc3QuYWRkKEpuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LGFmdGVySW5pdDooKT0+e3RoaXMuZml4Rm9jdXNDYXRjaGVyQWNjZXNzaWJpbGl0eSgpfX19c3VibWl0dGVkVGFibGVTY3JlZW4oKXt0aGlzLnJv'@;
put 'dXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMudGFibGVfaWQpfWFwcHJvdmVUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlRGV0LyIrdGhpcy50YWJsZV9pZCl9dmlld2VyVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRl'@;
put 'QnlVcmwoIi92aWV3L2RhdGEvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1nb0JhY2soKXtKbi54bG1hcHMuZmluZChkPT5kLnRhcmdldERTPT09dGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSk/dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9leGNlbC1tYXBzLyIr'@;
put 'dGhpcy5ob3RUYWJsZS5kYXRhWzBdLlhMTUFQX0lEKTp0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9'@;
put 'ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7'@;
put 'aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7'@;
put 'dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJh'@;
put 'bXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQp'@;
put 'O2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3IobGV0IEkgaW4gaCloJiZmLnB1c2goSSk7Zm9yKGxldCBJPTA7STxmLmxl'@;
put 'bmd0aDtJKyspdi5wdXNoKHtkYXRhOmZbSV19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1NLGEubG9h'@;
put 'ZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRlZD0hMX19fSkoKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRU'@;
put 'aW1lb3V0KCgpPT57dGhpcy5maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5KCl9LDUwMCl9cmV2ZXJ0Q2hhbmdlcygpe3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9yZXN0b3JlIix7cmVzdG9yZV9pbjpbe2xvYWRfcmVmOnRoaXMu'@;
put 'dGFibGVfaWR9XX0pLnRoZW4oZD0+e2QuYWRhcHRlclJlc3BvbnNlLnJlc3RvcmVfb3V0JiZ0aGlzLnJvdXRlLm5hdmlnYXRlKFsiL3N0YWdlIl0pLnRoZW4oKCk9Pnt0aGlzLnJvdXRlLm5hdmlnYXRlKFtgL3N0YWdlLyR7ZC5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXRbMF0uTE9BRFJF'@;
put 'Rn1gXSl9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITF9KX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1maXhGb2N1c0NhdGNoZXJB'@;
put 'Y2Nlc3NpYmlsaXR5KCl7c2V0VGltZW91dCgoKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEZvY3VzQ2F0Y2hlciIpLmZvckVhY2goKGQsaCk9PntpZihkKXtkLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsYFRhYmxlIGZvY3VzIGNhdGNoZXIgJHtoKzF9YCksZC5zZXRBdHRy'@;
put 'aWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKTtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7Zi5zZXRBdHRyaWJ1dGUoImZvciIsZC5pZHx8'@;
put 'YGh0Rm9jdXNDYXRjaGVyJHtofWApLGYuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxmLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGYudGV4dENvbnRlbnQ9YFRhYmxlIGZvY3VzIGNhdGNoZXIgJHtoKzF9YCxkLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShmLGQpfX0pfSwxMDAp'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKGMxKSwkZShJaCksJGUobWMpLCRlKExvKSwkZSh5dSksJGUoVm8pKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6'@;
put 'WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgtODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1j'@;
put 'ZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxv'@;
put 'YWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQtYmxvY2siLCJjbHItY29sLW1kLTYiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJd'@;
put 'LFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsicm9sZSIsInN0YXR1cyIsMSwibXQtMTAiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNvbC1tZC02IiwiY2FyZC1ibG9jayIsIm5vLWJvcmRlcnMiXSxbMSwibXQtMjAiXSxbMSwicm93Il0sWyJhcmlhLWxhYmVsIiwi'@;
put 'VmlldyBiYXNlIHRhYmxlIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzLW91dGxpbmUgdGV4dC1jZW50ZXIg'@;
put 'bXItNWkiLCJhcmlhLWxhYmVsIiwiQXBwcm92ZSB0YWJsZSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkVkaXQgYmFzZSB0YWJsZSIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNr'@;
put 'IiwiZGlzYWJsZWQiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInRleHQtY2VudGVyIiwibXItNWkiLCJtaW4tdy0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJd'@;
put 'LFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWRhbmdlciB0ZXh0LWNlbnRlciBtdC0yMCIsImFyaWEtbGFiZWwiLCJSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hhbmdlcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEs'@;
put 'ImNhcmQtYmxvY2siXSxbImlkIiwiaG90VGFibGUiLCJhcmlhLWxhYmVsIiwiU3RhZ2VkIGRhdGEgdGFibGUiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwiYXJpYS1s'@;
put 'YWJlbCIsIkFwcHJvdmUgdGFibGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJSZXZlcnQgdGhpcyBhbmQgYWxsIHN1'@;
put 'YnNlcXVlbnQgY2hhbmdlcyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlv'@;
put 'biIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsUnd0LDMsMiwiZGl2IiwyKSgzLEZ3dCw0OSwxNSwiZGl2IiwzKSxoZSgpKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIiwhaC5s'@;
put 'b2FkZWQpLGZlKCksTWUoIm5nSWYiLGgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbdnUsYmEsT2wsVjAsUDIsSDIsdjcsYjcseTcsJGddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgTnd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxCMCxCYy5mb3JDaGlsZChId3QpLFo5LmZvclJvb3QoKV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFZ3dChjLGwpe2lm'@;
put 'KDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksU3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEJ3dChjLGwp'@;
put 'e2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksU3IoYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIGp3dChj'@;
put 'LGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxTcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiB6d3Qo'@;
put 'YyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxTcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9u'@;
put 'IFV3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgU3VibWl0IHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksU3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlv'@;
put 'biBad3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxPZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLFNyKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xp'@;
put 'bWl0KX19ZnVuY3Rpb24gV3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLE9lKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksU3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9'@;
put 'fWZ1bmN0aW9uIFl3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgTGluZWFnZSBkYWlseSBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxTcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xp'@;
put 'bWl0KX19ZnVuY3Rpb24gR3d0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxOSksT2UoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLGRlKDIsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikucmVmcmVzaERhdGFM'@;
put 'aW5lYWdlKCkpfSksT2UoMywiIFJFRlJFU0ggIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiAkd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxndCgxLEd3dCw0LDEs'@;
put 'ImRpdiIsMTgpLGRlKDIsImRpdiIsMTkpLE9lKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxvZyAiKSxkZSg0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSksT2UoNSwiIFJFRlJFU0ggIiksaGUoKSgp'@;
put 'LGRlKDYsImRpdiIsMTkpLE9lKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLGRlKDgsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5kb3dubG9hZENvbmZpZ3VyYXRpb24oKSl9KSxPZSg5LCIgRE9XTkxPQUQgIiksaGUoKSgpLGRl'@;
put 'KDEwLCJkaXYiLDE5KSxPZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxkZSgxMiwiYnV0dG9uIiwyMiksT2UoMTMsIiBVUERBVEUgIiksaGUoKSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgzKSxNZSgiY2xy'@;
put 'TG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBLd3Q9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmFw'@;
put 'cFNldHRpbmdzU2VydmljZT1mLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQuMTIuMiIsYXBwVmVyc2lvbjoidjcuMi4xIi5yZXBsYWNlKCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6anNlKCkocGFyc2VJbnQoIjE3NTQ2NzQ1MTAzMjUiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpN'@;
put 'TSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0'@;
put 'eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhp'@;
put 'cy5lbnZpcm9ubWVudEluZm89dGhpcy5hcHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuc2V0dGluZ3M9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWUsdGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMmJih0aGlzLmVudmlyb25tZW50SW5mby5BVVRP'@;
put 'RVhFQz1kZWNvZGVVUklDb21wb25lbnQodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpKSx0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zdWJzY3JpYmUodj0+e3RoaXMuc2V0dGluZ3M9dn0pfW5nT25Jbml0KCl7fXNldHRpbmdDaGFuZ2UoYSl7dGhpcy5hcHBTZXR0aW5n'@;
put 'c1NlcnZpY2Uuc2V0QXBwU2V0dGluZ3ModGhpcy5zZXR0aW5ncyl9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1hLnNlcnZlclVybCxoPWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3'@;
put 'aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vZXhwb3J0Y29uZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxs'@;
put 'KS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9k'@;
put 'YWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITF9KX1yZWZyZXNoRGF0YUxpbmVhZ2UoKXt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaHRhYmxlbGluZWFnZSIsbnVsbCkudGhl'@;
put 'bihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEw'@;
put 'fSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFyc2VSZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZSh1'@;
put 'TCksJGUoVm8pLCRlKGMxKSwkZShKUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN5c3RlbSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTM4LHZhcnM6MzYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0s'@;
put 'WzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZs'@;
put 'ZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMt'@;
put 'dGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEs'@;
put 'Im1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwi'@;
put 'YnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'ZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLE9lKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLGhlKCksV3QoNCwiaHIiLDMpLGRlKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksT2UoOSwiIEVudmlyb25tZW50IERldGFpbHMgIiks'@;
put 'V3QoMTAsInNwYW4iLDcpLGhlKCksZGUoMTEsInAiLDgpLE9lKDEyLCIgU1lTU0lURTogIiksZGUoMTMsInNwYW4iLDcpLE9lKDE0KSxoZSgpKCksZGUoMTUsInAiLDgpLE9lKDE2LCIgU1lTU0NQTDogIiksZGUoMTcsInNwYW4iLDcpLE9lKDE4KSxoZSgpKCksZGUoMTksInAiLDgpLE9lKDIw'@;
put 'LCIgU1lTVENQSVBIT1NUTkFNRTogIiksZGUoMjEsInNwYW4iLDcpLE9lKDIyKSxoZSgpKCksZGUoMjMsInAiLDgpLE9lKDI0LCIgU1lTVkxPTkc6ICIpLGRlKDI1LCJzcGFuIiw3KSxPZSgyNiksaGUoKSgpLGRlKDI3LCJwIiw4KSxPZSgyOCwiIE1FTVNJWkU6ICIpLGRlKDI5LCJzcGFuIiw3'@;
put 'KSxPZSgzMCksaGUoKSgpLGRlKDMxLCJwIiw4KSxPZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxkZSgzMywic3BhbiIsNyksT2UoMzQpLGhlKCkoKSxkZSgzNSwicCIsOCksT2UoMzYsIiBTWVNIT1NUTkFNRTogIiksZGUoMzcsInNwYW4iLDcpLE9lKDM4KSxoZSgpKCksZGUoMzksInAiLDgp'@;
put 'LE9lKDQwLCIgU1lTVVNFUklEOiAiKSxkZSg0MSwic3BhbiIsNyksT2UoNDIpLGhlKCkoKSxkZSg0MywicCIsOCksT2UoNDQsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLGRlKDQ1LCJzcGFuIiw3KSxPZSg0NiksaGUoKSgpLGRlKDQ3LCJwIiw4KSxPZSg0OCwiIFNZU0VOQ09ESU5HOiAiKSxkZSg0'@;
put 'OSwic3BhbiIsNyksT2UoNTApLGhlKCkoKSxkZSg1MSwicCIsOCksT2UoNTIsIiBBVVRPRVhFQzogIiksZGUoNTMsInNwYW4iLDcpLE9lKDU0KSxoZSgpKCkoKSxkZSg1NSwiZGl2Iiw5KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxPZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLFd0'@;
put 'KDU5LCJzcGFuIiw3KSxoZSgpLGRlKDYwLCJwIiw4KSxPZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLGRlKDYyLCJzcGFuIiw3KSxPZSg2MyksaGUoKSgpLGRlKDY0LCJwIiw4KSxPZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksZGUoNjYsInNwYW4iLDcpLE9lKDY3KSxoZSgpKCks'@;
put 'ZGUoNjgsInAiLDgpLE9lKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxkZSg3MCwic3BhbiIsNyksT2UoNzEpLGhlKCkoKSxkZSg3MiwicCIsOCksT2UoNzMsIiBIVFRQOiAiKSxkZSg3NCwic3BhbiIsNyksT2UoNzUpLGhlKCkoKSxkZSg3NiwicCIsOCksT2UoNzcsIiBEQyBBZG1pbiBHcm91'@;
put 'cDogIiksZGUoNzgsInNwYW4iLDcpLE9lKDc5KSxoZSgpKCksZGUoODAsInAiLDgpLE9lKDgxLCIgQXBwIExvY2F0aW9uOiAiKSxkZSg4Miwic3BhbiIsNyksT2UoODMpLGhlKCkoKSgpKCksZGUoODQsImRpdiIpKDg1LCJoNiIsNiksT2UoODYsIiBMaWNlbmNlIGRldGFpbHMgIiksV3QoODcs'@;
put 'InNwYW4iLDcpLGhlKCksZGUoODgsInAiLDgpLE9lKDg5LCIgVmFsaWQgdW50aWw6ICIpLGRlKDkwLCJzcGFuIiw3KSxPZSg5MSksaGUoKSgpLGRlKDkyLCJwIiw4KSxPZSg5MywiIFVzZXJzIGFsbG93ZWQ6ICIpLGRlKDk0LCJzcGFuIiw3KSxPZSg5NSksaGUoKSgpLGRlKDk2LCJwIiw4KSxP'@;
put 'ZSg5NywiIFNpdGUgSURzOiAiKSxkZSg5OCwic3BhbiIsNyksT2UoOTkpLGhlKCkoKSxkZSgxMDAsInAiLDgpLE9lKDEwMSwiIEZyZWUgVGllcjogIiksZGUoMTAyLCJzcGFuIiw3KSxPZSgxMDMpLGhlKCkoKSxndCgxMDQsVnd0LDQsMSwicCIsMTApKDEwNSxCd3QsNCwxLCJwIiwxMCkoMTA2'@;
put 'LGp3dCw0LDEsInAiLDEwKSgxMDcsend0LDQsMSwicCIsMTApKDEwOCxVd3QsNCwxLCJwIiwxMCkoMTA5LFp3dCw0LDEsInAiLDEwKSgxMTAsV3d0LDQsMSwicCIsMTApKDExMSxZd3QsNCwxLCJwIiwxMCksZGUoMTEyLCJwIiw4KSxPZSgxMTMsIiBWaWV3Ym94ZXM6ICIpLGRlKDExNCwic3Bh'@;
put 'biIsNyksT2UoMTE1KSxoZSgpKCksZGUoMTE2LCJwIiw4KSxPZSgxMTcsIiBGaWxlIFVwbG9hZDogIiksZGUoMTE4LCJzcGFuIiw3KSxPZSgxMTkpLGhlKCkoKSxkZSgxMjAsInAiLDgpLE9lKDEyMSwiIEVkaXQgcmVjb3JkOiAiKSxkZSgxMjIsInNwYW4iLDcpLE9lKDEyMyksaGUoKSgpLGRl'@;
put 'KDEyNCwicCIsOCksT2UoMTI1LCIgQWRkIHJlY29yZDogIiksZGUoMTI2LCJzcGFuIiw3KSxPZSgxMjcpLGhlKCkoKSgpKCksV3QoMTI4LCJociIsMyksZ3QoMTI5LCR3dCwxNCwyLCJuZy1jb250YWluZXIiLDExKSxoZSgpKCkoKSxkZSgxMzAsImNsci1tb2RhbCIsMTIpLHBpKCJjbHJNb2Rh'@;
put 'bE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBnaShoLnJlc3BvbnNlTW9kYWwsdil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGRlKDEzMSwiaDMiLDEzKSxPZSgxMzIsIlJlc3BvbnNlIiksaGUoKSxkZSgxMzMsImRpdiIsMTQpLE9lKDEzNCksaGUoKSxkZSgxMzUsImRpdiIsMTUp'@;
put 'KDEzNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3BvbnNlTW9kYWw9ITF9KSxPZSgxMzcsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoZmUoMTQpLFNyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSks'@;
put 'ZmUoNCksU3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSxmZSg0KSxTcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLGZlKDQpLFNyKG51bGw9PWguZW52aXJvbm1l'@;
put 'bnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLGZlKDQpLFNyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uTUVNU0laRSksZmUoNCksU3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNQ'@;
put 'Uk9DRVNTTU9ERSksZmUoNCksU3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksZmUoNCksU3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNVU0VSSUQpLGZlKDQpLFNyKG51bGw9PWgu'@;
put 'ZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxmZSg0KSxTcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxmZSg0KSxTcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmgu'@;
put 'ZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxmZSg5KSxTcihoLmFwcEluZm8uYXBwVmVyc2lvbiksZmUoNCksU3IoaC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxmZSg0KSxTcihoLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLGZlKDQpLFNyKGguaHR0cD8iWUVTIjoiTk8iKSxmZSg0KSxTcihu'@;
put 'dWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxmZSg0KSxTcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFQUF9MT0MpLGZlKDgpLFNyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxp'@;
put 'Y2VuY2VJbmZvLnZhbGlkX3VudGlsKSxmZSg0KSxTcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxmZSg0KSxTcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSxmZSg0KSxTcihudWxs'@;
put 'IT1oLmxpY2VuY2VJbmZvJiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dz'@;
put 'X2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZl'@;
put 'KCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VT'@;
put 'dGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLFNyKGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksZmUoNCks'@;
put 'U3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxmZSg0KSxTcihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLGZlKDQpLFNyKGgubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxmZSgyKSxNZSgibmdJ'@;
put 'ZiIsMT09PShudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9uc2VNb2RhbCksZmUoNCksTHIoIiAiLGgucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbYmEsbDEscnUsWXUsVjAs'@;
put 'SDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgWHd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'aW5qPUFyKHtpbXBvcnRzOltCYy5mb3JDaGlsZChLd3QpLEJjXX0pfX1yZXR1cm4gY30pKCkscXd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSl9c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMYSxYd3QsQjAsa2NdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBKd3QoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gUXd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5ncm91cFNlYXJjaD0iIixDdChoLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gZUN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2'@;
put 'Iiw4KSgyLCJpbnB1dCIsOSwwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBnaShmLmdyb3VwU2VhcmNoLGgpfHwoZi5ncm91cFNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUo'@;
put 'KS5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxKd3QsMSwwLCJjbHItaWNvbiIsMTApKDUsUXd0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWRhKDMpLGQ9TGUoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5ncm91cFNlYXJjaCksZmUoMiksTWUoIm5n'@;
put 'SWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB0Q3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1w'@;
put 'bGljaXQ7cmV0dXJuIEN0KExlKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxXdCgyLCJjbHItaWNvbiIsMTcpLE9lKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQsZD1MZSgpO1RyKCJhY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxmZSgz'@;
put 'KSxMcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gbkN0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSx0Q3QsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHJDdChj'@;
put 'LGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIGlDdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSko'@;
put 'NiwicCIsMjYpKDcsImIiKSxPZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNSkoMTEsImkiKSxPZSgxMiksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDgpLFNyKGEuZ3JvdXBOYW1lKSxmZSg0KSxTcihhLmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0'@;
put 'aW9uIil9fWZ1bmN0aW9uIGFDdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gc0N0KGMsbCl7MSZjJiYoYWkoMCksZGUoMSwidGQiLDMxKSgyLCJiIiksT2UoMywiTkFNRSIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIi'@;
put 'KSxPZSg2LCJFTUFJTCIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxPZSg5LCJDUkVBVEVEIiksaGUoKSgpLGRlKDEwLCJ0ZCIsMzIpKDExLCJiIiksT2UoMTIsIlVQREFURUQiKSxoZSgpKCksc2koKSl9ZnVuY3Rpb24gb0N0KGMsbCl7MSZjJiYoYWkoMCksZGUoMSwidGQiLDMxKSgy'@;
put 'LCJiIiksT2UoMywiSUQiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksT2UoNiwiRElTUExBWSBOQU1FIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLE9lKDksIlVTRVIgTkFNRSIpLGhlKCkoKSxzaSgpKX1mdW5jdGlvbiBsQ3QoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJ0'@;
put 'ZCIsMzIpLE9lKDIpLGhlKCksZGUoMywidGQiLDMyKSxPZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksT2UoNiksaGUoKSxkZSg3LCJ0ZCIsMzIpLE9lKDgpLGhlKCksc2koKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLFNyKGEuTUVNQkVSTkFNRSksZmUoMiksU3IoYS5FTUFJ'@;
put 'TCksZmUoMiksU3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSxTcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBjQ3QoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJ0ZCIsMzIpLE9lKDIpLGhlKCksZGUoMywidGQiLDMyKSxPZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksT2UoNiksaGUoKSxz'@;
put 'aSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoMiksU3IoYS5JRCksZmUoMiksU3IoYS5ESVNQTEFZTkFNRSksZmUoMiksU3IoYS5VU0VSTkFNRSl9fWZ1bmN0aW9uIHVDdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMyksZ3QoMSxsQ3QsOSw0LCJuZy1jb250YWluZXIiLDYp'@;
put 'KDIsY0N0LDcsMywibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSg0KTtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIisoYS5VUklNRU18fGEuSUQpKSxmZSgpLE1lKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5'@;
put 'cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gZEN0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyxzQ3QsMTMsMCwibmctY29udGFpbmVyIiw2KSg0LG9DdCwxMCww'@;
put 'LCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYsdUN0LDMsMywidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgzKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlw'@;
put 'ZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoMiksTWUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gaEN0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyKSxoZSgpLGd0KDMsYUN0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjcpLGd0KDUsZEN0LDcs'@;
put 'MywidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxMcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1m'@;
put 'dW5jdGlvbiBmQ3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLE9lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIHBDdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMykoMSwidGQiLDMyKSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgicm91'@;
put 'dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxmZSgyKSxTcihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiBnQ3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQsImIiKSxPZSg1KSxoZSgpKCkoKSgpLGRl'@;
put 'KDYsInRib2R5IiksZ3QoNyxwQ3QsMywyLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDUpLExyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIG1DdChjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxndCgzLGZDdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LGdDdCw4LDIsInRhYmxlIiwyOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMiksU3IoYS5ncm91cE5hbWUpLGZlKCksTWUoIm5nSWYiLDA9PWEu'@;
put 'Z3JvdXBNZW1iZXJDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIHZDdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsaUN0LDEzLDIsImRpdiIsMjApLGRlKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLGd0KDUs'@;
put 'aEN0LDYsMywiZGl2Iiw2KSg2LG1DdCw2LDMsImRpdiIsNiksV3QoNywiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoNCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2Vy'@;
put 'dmVyVHlwZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWxldCB5OGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVy'@;
put 'PWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyB5'@;
put 'aC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPU4wLlksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwi'@;
put 'U0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtKbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5w'@;
put 'YXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEpuLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPUpuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9Sm4udXNlcm5hdi5n'@;
put 'cm91cFNlYXJjaCk6KHZvaWQgMD09PUpuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlv'@;
put 'bi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1FOmYubmFtZSxHUk9VUERFU0M6Zi5kZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxKbi51'@;
put 'c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsSm4udXNlcm5hdi5ncm91cExpc3Q9YS5hZGFwdGVyUmVz'@;
put 'cG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Kbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUpuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0h'@;
put 'MTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1V'@;
put 'Ukl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVy'@;
put 'Q291bnQ9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFt'@;
put 'VVJJLHRoaXMuZ3JvdXBOYW1lPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkp'@;
put 'fSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksSm4udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxv'@;
put 'YWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlz'@;
put 'LmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0'@;
put 'IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCB2PWYuaXRlbXMubWFwKE09Pih7TUVNQkVSTkFNRTpNLm5hbWUsTUVNQkVSSUQ6TS5p'@;
put 'ZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9'@;
put 'ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuYWRhcHRlclJlc3Bv'@;
put 'bnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUoVm8pLCRlKGJ1KSwkZShMbyksJGUocGgpLCRlKHl1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZ3Jv'@;
put 'dXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0s'@;
put 'WzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVy'@;
put 'IGJ5IEdyb3VwcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJj'@;
put 'aCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5l'@;
put 'ciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsxLCJ0YWJsZS1jb250YWluZXIi'@;
put 'XSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihk'@;
put 'LGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsZUN0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxuQ3QsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsckN0LDMsMCwiZGl2Iiw1KSg2LHZDdCw4LDMsImRpdiIs'@;
put 'NiksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLGguZ3JvdXBzKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmdyb3VwcyksZmUoMiksTWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5ncm91cE1lbWJlcnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltRcyxiYSxsMSxH'@;
put 'bCx0bCxXbyxBaCxQZCxPbCxZMSxhNCxpNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB5Q3QoKXt9ZnVuY3Rpb24gZHRlKGMpe3JldHVybiBudWxsPT1jP3lDdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoYyl9fWZ1bmN0aW9uIGI4ZShj'@;
put 'KXtyZXR1cm4gbnVsbD09Yz9bXTpBcnJheS5pc0FycmF5KGMpP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBfQ3QoKXtyZXR1cm5bXX1mdW5jdGlvbiBfOGUoYyl7cmV0dXJuIG51bGw9PWM/X0N0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChjKX19ZnVuY3Rpb24g'@;
put 'dzhlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoYyl9fWZ1bmN0aW9uIEM4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwubWF0Y2hlcyhjKX19dmFyIFNDdD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiB4Q3QoKXtyZXR1cm4gdGhpcy5maXJz'@;
put 'dEVsZW1lbnRDaGlsZH12YXIgVEN0PUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gQUN0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gUzhlKGMpe3JldHVybiBuZXcgQXJyYXkoYy5sZW5ndGgpfWZ1bmN0aW9uIHZOKGMsbCl7dGhpcy5vd25lckRv'@;
put 'Y3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1jLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWMsdGhpcy5fX2RhdGFfXz1sfWZ1bmN0aW9uIE9DdChjLGwsYSxkLGgsZil7Zm9yKHZhciBNLHY9MCxJPWwubGVuZ3RoLEc9Zi5sZW5ndGg7'@;
put 'djxHOysrdikoTT1sW3ZdKT8oTS5fX2RhdGFfXz1mW3ZdLGRbdl09TSk6YVt2XT1uZXcgdk4oYyxmW3ZdKTtmb3IoO3Y8STsrK3YpKE09bFt2XSkmJihoW3ZdPU0pfWZ1bmN0aW9uIFBDdChjLGwsYSxkLGgsZix2KXt2YXIgTSxJLEVlLEc9bmV3IE1hcCxyZT1sLmxlbmd0aCx1ZT1mLmxlbmd0'@;
put 'aCx5ZT1uZXcgQXJyYXkocmUpO2ZvcihNPTA7TTxyZTsrK00pKEk9bFtNXSkmJih5ZVtNXT1FZT12LmNhbGwoSSxJLl9fZGF0YV9fLE0sbCkrIiIsRy5oYXMoRWUpP2hbTV09STpHLnNldChFZSxJKSk7Zm9yKE09MDtNPHVlOysrTSlFZT12LmNhbGwoYyxmW01dLE0sZikrIiIsKEk9Ry5nZXQo'@;
put 'RWUpKT8oZFtNXT1JLEkuX19kYXRhX189ZltNXSxHLmRlbGV0ZShFZSkpOmFbTV09bmV3IHZOKGMsZltNXSk7Zm9yKE09MDtNPHJlOysrTSkoST1sW01dKSYmRy5nZXQoeWVbTV0pPT09SSYmKGhbTV09SSl9ZnVuY3Rpb24gRkN0KGMpe3JldHVybiBjLl9fZGF0YV9ffWZ1bmN0aW9uIE5DdChj'@;
put 'KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJiJsZW5ndGgiaW4gYz9jOkFycmF5LmZyb20oYyl9ZnVuY3Rpb24gWkN0KGMsbCl7cmV0dXJuIGM8bD8tMTpjPmw/MTpjPj1sPzA6TmFOfXZOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dk4sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'IHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyxsKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0'@;
put 'b3IoYyl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGMpfX07dmFyIGh0ZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgTThlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRt'@;
put 'bDpodGUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB5TihjKXt2YXIgbD1jKz0iIixhPWwuaW5kZXhPZigi'@;
put 'OiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGw9Yy5zbGljZSgwLGEpKSYmKGM9Yy5zbGljZShhKzEpKSxNOGUuaGFzT3duUHJvcGVydHkobCk/e3NwYWNlOk04ZVtsXSxsb2NhbDpjfTpjfWZ1bmN0aW9uIHFDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShj'@;
put 'KX19ZnVuY3Rpb24gSkN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gUUN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsKX19ZnVuY3Rpb24gZVN0KGMsbCl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbCl9fWZ1bmN0aW9uIHRTdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6dGhpcy5zZXRBdHRyaWJ1dGUo'@;
put 'YyxhKX19ZnVuY3Rpb24gblN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsYSl9fWZ1bmN0'@;
put 'aW9uIHg4ZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGMuZG9jdW1lbnQmJmN8fGMuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gaVN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fWZ1bmN0aW9u'@;
put 'IGFTdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwsYSl9fWZ1bmN0aW9uIHNTdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMp'@;
put 'OnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxkLGEpfX1mdW5jdGlvbiBrdyhjLGwpe3JldHVybiBjLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobCl8fHg4ZShjKS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShsKX1mdW5jdGlvbiBsU3QoYyl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKCl7ZGVsZXRlIHRoaXNbY119fWZ1bmN0aW9uIGNTdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbY109bH19ZnVuY3Rpb24gdVN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT9kZWxldGUgdGhpc1tjXTp0aGlzW2Nd'@;
put 'PWF9fWZ1bmN0aW9uIEU4ZShjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZnRlKGMpe3JldHVybiBjLmNsYXNzTGlzdHx8bmV3IFQ4ZShjKX1mdW5jdGlvbiBUOGUoYyl7dGhpcy5fbm9kZT1jLHRoaXMuX25hbWVzPUU4ZShjLmdldEF0dHJpYnV0ZSgiY2xhc3Mi'@;
put 'KXx8IiIpfWZ1bmN0aW9uIEE4ZShjLGwpe2Zvcih2YXIgYT1mdGUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBrOGUoYyxsKXtmb3IodmFyIGE9ZnRlKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5yZW1vdmUobFtkXSl9ZnVuY3Rpb24gaFN0KGMp'@;
put 'e3JldHVybiBmdW5jdGlvbigpe0E4ZSh0aGlzLGMpfX1mdW5jdGlvbiBmU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7azhlKHRoaXMsYyl9fWZ1bmN0aW9uIHBTdChjLGwpe3JldHVybiBmdW5jdGlvbigpeyhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9BOGU6azhlKSh0aGlzLGMpfX1mdW5jdGlv'@;
put 'biBtU3QoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHZTdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fWZ1bmN0aW9uIHlTdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWw/'@;
put 'PyIifX1mdW5jdGlvbiBfU3QoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB3U3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9Y319ZnVuY3Rpb24gQ1N0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJI'@;
put 'VE1MPWw/PyIifX1mdW5jdGlvbiBNU3QoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRVN0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUu'@;
put 'Zmlyc3RDaGlsZCl9ZnVuY3Rpb24gQVN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBhPT09aHRlJiZsLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1odGU/bC5jcmVhdGVFbGVtZW50KGMpOmwu'@;
put 'Y3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIGtTdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBEOGUoYyl7dmFyIGw9eU4oYyk7cmV0dXJuKGwubG9jYWw/a1N0OkFT'@;
put 'dCkobCl9ZnVuY3Rpb24gSVN0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTFN0KCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gUFN0KCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5z'@;
put 'ZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBGU3QoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIGpTdChjKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysrZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVuZXIs'@;
put 'Zi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gelN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uIFZTdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9f'@;
put 'KX19KGwpO2lmKGQpZm9yKHZhciB2PTAsTT1kLmxlbmd0aDt2PE07Kyt2KWlmKChoPWRbdl0pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3Rl'@;
put 'bmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5fX29u'@;
put 'PVtoXX19ZnVuY3Rpb24gSThlKGMsbCxhKXt2YXIgZD14OGUoYyksaD1kLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJsZSks'@;
put 'aC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gWlN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEk4ZSh0aGlzLGMsbCl9fWZ1bmN0aW9uIFdTdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBJOGUo'@;
put 'dGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19VDhlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikp'@;
put 'KX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVy'@;
put 'biB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIHB0ZT1bbnVsbF07ZnVuY3Rpb24gc2QoYyxsKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWx9ZnVuY3Rpb24gUjhlKCl7cmV0dXJuIG5ldyBzZChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHB0ZSl9c2QucHJvdG90'@;
put 'eXBlPVI4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnNkLHNlbGVjdDpmdW5jdGlvbiBiQ3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWR0ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgSSxHLGY9'@;
put 'bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1uZXcgQXJyYXkodikscmU9MDtyZTx2OysrcmUpKEk9ZltyZV0pJiYoRz1jLmNhbGwoSSxJLl9fZGF0YV9fLHJlLGYpKSYmKCJfX2RhdGFfXyJpbiBJJiYoRy5fX2RhdGFfXz1JLl9fZGF0YV9fKSxNW3JlXT1HKTtyZXR1cm4gbmV3IHNkKGQsdGhpcy5f'@;
put 'cGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBDQ3QoYyl7Yz0iZnVuY3Rpb24iPT10eXBlb2YgYz9mdW5jdGlvbiB3Q3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI4ZShjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fShjKTpfOGUoYyk7Zm9yKHZhciBsPXRoaXMuX2dyb3Vwcyxh'@;
put 'PWwubGVuZ3RoLGQ9W10saD1bXSxmPTA7ZjxhOysrZilmb3IodmFyIEksdj1sW2ZdLE09di5sZW5ndGgsRz0wO0c8TTsrK0cpKEk9dltHXSkmJihkLnB1c2goYy5jYWxsKEksSS5fX2RhdGFfXyxHLHYpKSxoLnB1c2goSSkpO3JldHVybiBuZXcgc2QoZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rp'@;
put 'b24gRUN0KGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP3hDdDpmdW5jdGlvbiBNQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFNDdC5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOkM4ZShjKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlv'@;
put 'biBEQ3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/QUN0OmZ1bmN0aW9uIGtDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVEN0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6QzhlKGMpKSl9LGZpbHRlcjpmdW5jdGlvbiBJQ3Qo'@;
put 'Yyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXc4ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgSSxmPWxbaF0sdj1mLmxlbmd0aCxNPWRbaF09W10sRz0wO0c8djsrK0cpKEk9ZltHXSkmJmMuY2FsbChJ'@;
put 'LEkuX19kYXRhX18sRyxmKSYmTS5wdXNoKEkpO3JldHVybiBuZXcgc2QoZCx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBIQ3QoYyxsKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLEZDdCk7dmFyIGE9bD9QQ3Q6T0N0LGQ9dGhpcy5fcGFyZW50cyxo'@;
put 'PXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9ZnVuY3Rpb24gTEN0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0oYykpO2Zvcih2YXIgZj1oLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPW5ldyBBcnJheShmKSxJPW5ldyBBcnJheShmKSxHPTA7RzxmOysrRyl7'@;
put 'dmFyIHJlPWRbR10sdWU9aFtHXSx5ZT11ZS5sZW5ndGgsRWU9TkN0KGMuY2FsbChyZSxyZSYmcmUuX19kYXRhX18sRyxkKSksQmU9RWUubGVuZ3RoLEdlPU1bR109bmV3IEFycmF5KEJlKSxzdD12W0ddPW5ldyBBcnJheShCZSk7YShyZSx1ZSxHZSxzdCxJW0ddPW5ldyBBcnJheSh5ZSksRWUs'@;
put 'bCk7Zm9yKHZhciBtbix3bixkdD0wLHF0PTA7ZHQ8QmU7KytkdClpZihtbj1HZVtkdF0pe2ZvcihkdD49cXQmJihxdD1kdCsxKTshKHduPXN0W3F0XSkmJisrcXQ8QmU7KTttbi5fbmV4dD13bnx8bnVsbH19cmV0dXJuKHY9bmV3IHNkKHYsZCkpLl9lbnRlcj1NLHYuX2V4aXQ9SSx2fSxlbnRl'@;
put 'cjpmdW5jdGlvbiBSQ3QoKXtyZXR1cm4gbmV3IHNkKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKFM4ZSksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gVkN0KCl7cmV0dXJuIG5ldyBzZCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFM4ZSksdGhpcy5fcGFyZW50cyl9'@;
put 'LGpvaW46ZnVuY3Rpb24gQkN0KGMsbCxhKXt2YXIgZD10aGlzLmVudGVyKCksaD10aGlzLGY9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/KGQ9YyhkKSkmJihkPWQuc2VsZWN0aW9uKCkpOmQ9ZC5hcHBlbmQoYysiIiksbnVsbCE9bCYmKGg9bChoKSkmJihoPWguc2Vs'@;
put 'ZWN0aW9uKCkpLG51bGw9PWE/Zi5yZW1vdmUoKTphKGYpLGQmJmg/ZC5tZXJnZShoKS5vcmRlcigpOmh9LG1lcmdlOmZ1bmN0aW9uIGpDdChjKXtmb3IodmFyIGw9Yy5zZWxlY3Rpb24/Yy5zZWxlY3Rpb24oKTpjLGE9dGhpcy5fZ3JvdXBzLGQ9bC5fZ3JvdXBzLGg9YS5sZW5ndGgsdj1NYXRo'@;
put 'Lm1pbihoLGQubGVuZ3RoKSxNPW5ldyBBcnJheShoKSxJPTA7STx2OysrSSlmb3IodmFyIEVlLEc9YVtJXSxyZT1kW0ldLHVlPUcubGVuZ3RoLHllPU1bSV09bmV3IEFycmF5KHVlKSxCZT0wO0JlPHVlOysrQmUpKEVlPUdbQmVdfHxyZVtCZV0pJiYoeWVbQmVdPUVlKTtmb3IoO0k8aDsrK0kp'@;
put 'TVtJXT1hW0ldO3JldHVybiBuZXcgc2QoTSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uICRTdCgpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbiB6Q3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9LTEsYT1jLmxlbmd0aDsrK2w8YTspZm9yKHZhciB2LGQ9Y1tsXSxo'@;
put 'PWQubGVuZ3RoLTEsZj1kW2hdOy0taD49MDspKHY9ZFtoXSkmJihmJiY0XnYuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZikmJmYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodixmKSxmPXYpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIFVDdChjKXtmdW5jdGlvbiBsKHVlLHllKXtyZXR1'@;
put 'cm4gdWUmJnllP2ModWUuX19kYXRhX18seWUuX19kYXRhX18pOiF1ZS0heWV9Y3x8KGM9WkN0KTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGQ9YS5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2Ype2Zvcih2YXIgRyx2PWFbZl0sTT12Lmxlbmd0aCxJPWhbZl09bmV3IEFycmF5KE0p'@;
put 'LHJlPTA7cmU8TTsrK3JlKShHPXZbcmVdKSYmKElbcmVdPUcpO0kuc29ydChsKX1yZXR1cm4gbmV3IHNkKGgsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBXQ3QoKXt2YXIgYz1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGMuYXBwbHkobnVsbCxh'@;
put 'cmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIFlDdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIEdDdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7Kyto'@;
put 'KXt2YXIgdj1kW2hdO2lmKHYpcmV0dXJuIHZ9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gJEN0KCl7bGV0IGM9MDtmb3IoY29uc3QgbCBvZiB0aGlzKSsrYztyZXR1cm4gY30sZW1wdHk6ZnVuY3Rpb24gS0N0KCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIFhDdChjKXtm'@;
put 'b3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9MCxkPWwubGVuZ3RoO2E8ZDsrK2EpZm9yKHZhciBNLGg9bFthXSxmPTAsdj1oLmxlbmd0aDtmPHY7KytmKShNPWhbZl0pJiZjLmNhbGwoTSxNLl9fZGF0YV9fLGYsaCk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gclN0KGMsbCl7dmFyIGE9eU4o'@;
put 'Yyk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZD10aGlzLm5vZGUoKTtyZXR1cm4gYS5sb2NhbD9kLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk6ZC5nZXRBdHRyaWJ1dGUoYSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD9hLmxvY2FsP0pDdDpxQ3Q6ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIGw/YS5sb2NhbD9uU3Q6dFN0OmEubG9jYWw/ZVN0OlFDdCkoYSxsKSl9LHN0eWxlOmZ1bmN0aW9uIG9TdChjLGwsYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWw/aVN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP3NTdDphU3QpKGMsbCxhPz8iIikp'@;
put 'Omt3KHRoaXMubm9kZSgpLGMpfSxwcm9wZXJ0eTpmdW5jdGlvbiBkU3QoYyxsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9sU3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dVN0OmNTdCkoYyxsKSk6dGhpcy5ub2RlKClbY119LGNsYXNzZWQ6ZnVuY3Rpb24g'@;
put 'Z1N0KGMsbCl7dmFyIGE9RThlKGMrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPWZ0ZSh0aGlzLm5vZGUoKSksaD0tMSxmPWEubGVuZ3RoOysraDxmOylpZighZC5jb250YWlucyhhW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgbD9wU3Q6bD9oU3Q6ZlN0KShhLGwpKX0sdGV4dDpmdW5jdGlvbiBiU3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/bVN0OigiZnVuY3Rpb24iPT10eXBlb2YgYz95U3Q6dlN0KShjKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6'@;
put 'ZnVuY3Rpb24gU1N0KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1jP19TdDooImZ1bmN0aW9uIj09dHlwZW9mIGM/Q1N0OndTdCkoYykpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24geFN0KCl7cmV0dXJuIHRoaXMuZWFjaChNU3QpfSxs'@;
put 'b3dlcjpmdW5jdGlvbiBUU3QoKXtyZXR1cm4gdGhpcy5lYWNoKEVTdCl9LGFwcGVuZDpmdW5jdGlvbiBEU3QoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpEOGUoYyk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobC5hcHBseSh0'@;
put 'aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBSU3QoYyxsKXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOkQ4ZShjKSxkPW51bGw9PWw/SVN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP2w6ZHRlKGwpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'Lmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIE9TdCgpe3JldHVybiB0aGlzLmVhY2goTFN0KX0sY2xvbmU6ZnVuY3Rpb24gSFN0KGMpe3JldHVybiB0aGlzLnNlbGVjdChjP0ZTdDpQ'@;
put 'U3QpfSxkYXR1bTpmdW5jdGlvbiBOU3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBVU3QoYyxsLGEpe3ZhciBoLHYsZD1mdW5jdGlvbiBCU3QoYyl7cmV0dXJuIGMudHJpbSgp'@;
put 'LnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7'@;
put 'Zm9yKE09bD96U3Q6alN0LGg9MDtoPGY7KytoKXRoaXMuZWFjaChNKGRbaF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIE09dGhpcy5ub2RlKCkuX19vbjtpZihNKWZvcih2YXIgcmUsST0wLEc9TS5sZW5ndGg7STxHOysrSSlmb3IoaD0wLHJlPU1bSV07aDxmOysraClpZigodj1kW2hdKS50eXBl'@;
put 'PT09cmUudHlwZSYmdi5uYW1lPT09cmUubmFtZSlyZXR1cm4gcmUudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIFlTdChjLGwpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP1dTdDpaU3QpKGMsbCkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbipHU3QoKXtmb3Io'@;
put 'dmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciB2LGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKSh2PWRbaF0pJiYoeWllbGQgdil9fTtjb25zdCAkOT1SOGU7ZnVuY3Rpb24gZ3RlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgc2Qo'@;
put 'W2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgc2QoW2I4ZShjKV0scHRlKX1mdW5jdGlvbiBfbyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IHNkKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVu'@;
put 'dC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgc2QoW1tjXV0scHRlKX12YXIgS1N0PXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIEw4ZSgpe2Zvcih2YXIgZCxjPTAsbD1hcmd1bWVudHMubGVuZ3RoLGE9e307YzxsOysrYyl7aWYoIShkPWFyZ3VtZW50c1tjXSsiIil8fGQgaW4gYXx8L1tccy5dLy50'@;
put 'ZXN0KGQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2QpO2FbZF09W119cmV0dXJuIG5ldyBiTihhKX1mdW5jdGlvbiBiTihjKXt0aGlzLl89Y31mdW5jdGlvbiBxU3QoYyxsKXtmb3IodmFyIGgsYT0wLGQ9Yy5sZW5ndGg7YTxkOysrYSlpZigoaD1jW2FdKS5uYW1lPT09bCly'@;
put 'ZXR1cm4gaC52YWx1ZX1mdW5jdGlvbiBPOGUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9Yy5sZW5ndGg7ZDxoOysrZClpZihjW2RdLm5hbWU9PT1sKXtjW2RdPUtTdCxjPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5zbGljZShkKzEpKTticmVha31yZXR1cm4gbnVsbCE9YSYmYy5wdXNoKHtuYW1lOmws'@;
put 'dmFsdWU6YX0pLGN9Yk4ucHJvdG90eXBlPUw4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJOLG9uOmZ1bmN0aW9uKGMsbCl7dmFyIGgsYT10aGlzLl8sZD1mdW5jdGlvbiBYU3QoYyxsKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBkPSIiLGg9'@;
put 'YS5pbmRleE9mKCIuIik7aWYoaD49MCYmKGQ9YS5zbGljZShoKzEpLGE9YS5zbGljZSgwLGgpKSxhJiYhbC5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIithKTtyZXR1cm57dHlwZTphLG5hbWU6ZH19KX0oYysiIixhKSxmPS0xLHY9ZC5sZW5ndGg7'@;
put 'aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbCk7Zm9yKDsrK2Y8djspaWYoaD0oYz1kW2ZdKS50eXBlKWFbaF09TzhlKGFbaF0sYy5uYW1lLGwpO2Vsc2UgaWYobnVs'@;
put 'bD09bClmb3IoaCBpbiBhKWFbaF09TzhlKGFbaF0sYy5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytmPHY7KWlmKChoPShjPWRbZl0pLnR5cGUpJiYoaD1xU3QoYVtoXSxjLm5hbWUpKSlyZXR1cm4gaH0sY29weTpmdW5jdGlvbigpe3ZhciBjPXt9LGw9dGhpcy5fO2Zvcih2YXIgYSBp'@;
put 'biBsKWNbYV09bFthXS5zbGljZSgpO3JldHVybiBuZXcgYk4oYyl9LGNhbGw6ZnVuY3Rpb24oYyxsKXtpZigoaD1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBoLGYsYT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpYVtkXT1hcmd1bWVudHNbZCsyXTtpZighdGhpcy5fLmhhc093blBy'@;
put 'b3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2ZvcihkPTAsaD0oZj10aGlzLl9bY10pLmxlbmd0aDtkPGg7KytkKWZbZF0udmFsdWUuYXBwbHkobCxhKX0sYXBwbHk6ZnVuY3Rpb24oYyxsLGEpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKHZhciBkPXRoaXMuX1tjXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKWRbaF0udmFsdWUuYXBwbHkobCxhKX19O2NvbnN0IG10ZT1MOGU7dmFyIF9OLElBLER3PTAsa0E9MCxEQT0wLFA4ZT0xZTMsd049MCxLOT0wLENOPTAsUkE9Im9i'@;
put 'amVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsRjhlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0'@;
put 'aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIHZ0ZSgpe3JldHVybiBLOXx8KEY4ZShKU3QpLEs5PVJBLm5vdygpK0NOKX1mdW5jdGlvbiBKU3QoKXtLOT0wfWZ1bmN0aW9uIFNOKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBIOGUoYyxs'@;
put 'LGEpe3ZhciBkPW5ldyBTTjtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIE44ZSgpe0s5PSh3Tj1SQS5ub3coKSkrQ04sRHc9a0E9MDt0cnl7IWZ1bmN0aW9uIFFTdCgpe3Z0ZSgpLCsrRHc7Zm9yKHZhciBsLGM9X047YzspKGw9SzktYy5fdGltZSk+PTAmJmMuX2NhbGwuY2Fs'@;
put 'bCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tRHd9KCl9ZmluYWxseXtEdz0wLGZ1bmN0aW9uIHRNdCgpe2Zvcih2YXIgYyxhLGw9X04sZD0xLzA7bDspbC5fY2FsbD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4'@;
put 'dD1hOl9OPWEpO0lBPWMseXRlKGQpfSgpLEs5PTB9fWZ1bmN0aW9uIGVNdCgpe3ZhciBjPVJBLm5vdygpLGw9Yy13TjtsPlA4ZSYmKENOLT1sLHdOPWMpfWZ1bmN0aW9uIHl0ZShjKXtEd3x8KGtBJiYoa0E9Y2xlYXJUaW1lb3V0KGtBKSksYy1LOT4yND8oYzwxLzAmJihrQT1zZXRUaW1lb3V0'@;
put 'KE44ZSxjLVJBLm5vdygpLUNOKSksREEmJihEQT1jbGVhckludGVydmFsKERBKSkpOihEQXx8KHdOPVJBLm5vdygpLERBPXNldEludGVydmFsKGVNdCxQOGUpKSxEdz0xLEY4ZShOOGUpKSl9ZnVuY3Rpb24gTU4oYyxsLGEpe3ZhciBkPW5ldyBTTjtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0'@;
put 'b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9U04ucHJvdG90eXBlPUg4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlNOLHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1'@;
put 'bmN0aW9uIik7YT0obnVsbD09YT92dGUoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMuX25leHQmJklBIT09dGhpcyYmKElBP0lBLl9uZXh0PXRoaXM6X049dGhpcyxJQT10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLHl0ZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYm'@;
put 'KHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx5dGUoKSl9fTt2YXIgbk10PW10ZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxyTXQ9W10sVjhlPTAsX3RlPTIseE49Myx3dGU9NSxFTj02O2Z1bmN0aW9uIFROKGMsbCxhLGQsaCxmKXt2YXIgdj1jLl9fdHJhbnNp'@;
put 'dGlvbjtpZih2KXtpZihhIGluIHYpcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uIGlNdChjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiB2KEcpe3ZhciByZSx1ZSx5ZSxFZTtpZigxIT09YS5zdGF0ZSlyZXR1cm4gSSgpO2ZvcihyZSBpbiBkKWlm'@;
put 'KChFZT1kW3JlXSkubmFtZT09PWEubmFtZSl7aWYoRWUuc3RhdGU9PT14TilyZXR1cm4gTU4odik7ND09PUVlLnN0YXRlPyhFZS5zdGF0ZT1FTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiaW50ZXJydXB0IixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW3Jl'@;
put 'XSk6K3JlPGwmJihFZS5zdGF0ZT1FTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiY2FuY2VsIixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW3JlXSl9aWYoTU4oZnVuY3Rpb24oKXthLnN0YXRlPT09eE4mJihhLnN0YXRlPTQsYS50aW1lci5yZXN0YXJ0KE0s'@;
put 'YS5kZWxheSxhLnRpbWUpLE0oRykpfSksYS5zdGF0ZT1fdGUsYS5vbi5jYWxsKCJzdGFydCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksYS5zdGF0ZT09PV90ZSl7Zm9yKGEuc3RhdGU9eE4saD1uZXcgQXJyYXkoeWU9YS50d2Vlbi5sZW5ndGgpLHJlPTAsdWU9LTE7cmU8eWU7Kyty'@;
put 'ZSkoRWU9YS50d2VlbltyZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSkmJihoWysrdWVdPUVlKTtoLmxlbmd0aD11ZSsxfX1mdW5jdGlvbiBNKEcpe2Zvcih2YXIgcmU9RzxhLmR1cmF0aW9uP2EuZWFzZS5jYWxsKG51bGwsRy9hLmR1cmF0aW9uKTooYS50aW1l'@;
put 'ci5yZXN0YXJ0KEkpLGEuc3RhdGU9d3RlLDEpLHVlPS0xLHllPWgubGVuZ3RoOysrdWU8eWU7KWhbdWVdLmNhbGwoYyxyZSk7YS5zdGF0ZT09PXd0ZSYmKGEub24uY2FsbCgiZW5kIixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxJKCkpfWZ1bmN0aW9uIEkoKXtmb3IodmFyIEcgaW4g'@;
put 'YS5zdGF0ZT1FTixhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9SDhlKGZ1bmN0aW9uIGYoRyl7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydCh2LGEuZGVsYXksYS50aW1lKSxhLmRlbGF5PD1HJiZ2KEctYS5k'@;
put 'ZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOm5NdCx0d2VlbjpyTXQsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VjhlfSl9ZnVuY3Rpb24gQ3RlKGMsbCl7dmFy'@;
put 'IGE9eDMoYyxsKTtpZihhLnN0YXRlPlY4ZSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBhfWZ1bmN0aW9uIGw0KGMsbCl7dmFyIGE9eDMoYyxsKTtpZihhLnN0YXRlPnhOKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVu'@;
put 'bmluZyIpO3JldHVybiBhfWZ1bmN0aW9uIHgzKGMsbCl7dmFyIGE9Yy5fX3RyYW5zaXRpb247aWYoIWF8fCEoYT1hW2xdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGF9ZnVuY3Rpb24gQU4oYyxsKXt2YXIgZCxoLHYsYT1jLl9fdHJhbnNpdGlvbixm'@;
put 'PSEwO2lmKGEpe2Zvcih2IGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSkoZD1hW3ZdKS5uYW1lPT09bD8oaD1kLnN0YXRlPl90ZSYmZC5zdGF0ZTx3dGUsZC5zdGF0ZT1FTixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoaD8iaW50ZXJydXB0IjoiY2FuY2VsIixjLGMuX19kYXRhX18sZC5pbmRl'@;
put 'eCxkLmdyb3VwKSxkZWxldGUgYVt2XSk6Zj0hMTtmJiZkZWxldGUgYy5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGM0KGMsbCl7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihhKXtyZXR1cm4gYyooMS1hKStsKmF9fXZhciBrTixqOGU9MTgwL01hdGguUEksU3RlPXt0cmFuc2xhdGVYOjAsdHJh'@;
put 'bnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIHo4ZShjLGwsYSxkLGgsZil7dmFyIHYsTSxJO3JldHVybih2PU1hdGguc3FydChjKmMrbCpsKSkmJihjLz12LGwvPXYpLChJPWMqYStsKmQpJiYoYS09YypJLGQtPWwqSSksKE09TWF0aC5zcXJ0'@;
put 'KGEqYStkKmQpKSYmKGEvPU0sZC89TSxJLz1NKSxjKmQ8bCphJiYoYz0tYyxsPS1sLEk9LUksdj0tdikse3RyYW5zbGF0ZVg6aCx0cmFuc2xhdGVZOmYscm90YXRlOk1hdGguYXRhbjIobCxjKSpqOGUsc2tld1g6TWF0aC5hdGFuKEkpKmo4ZSxzY2FsZVg6dixzY2FsZVk6TX19ZnVuY3Rpb24g'@;
put 'VThlKGMsbCxhLGQpe2Z1bmN0aW9uIGgoRyl7cmV0dXJuIEcubGVuZ3RoP0cucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihHLHJlKXt2YXIgdWU9W10seWU9W107cmV0dXJuIEc9YyhHKSxyZT1jKHJlKSxmdW5jdGlvbiBmKEcscmUsdWUseWUsRWUsQmUpe2lmKEchPT11ZXx8cmUhPT15'@;
put 'ZSl7dmFyIEdlPUVlLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO0JlLnB1c2goe2k6R2UtNCx4OmM0KEcsdWUpfSx7aTpHZS0yLHg6YzQocmUseWUpfSl9ZWxzZSh1ZXx8eWUpJiZFZS5wdXNoKCJ0cmFuc2xhdGUoIit1ZStsK3llK2EpfShHLnRyYW5zbGF0ZVgsRy50cmFuc2xh'@;
put 'dGVZLHJlLnRyYW5zbGF0ZVgscmUudHJhbnNsYXRlWSx1ZSx5ZSksZnVuY3Rpb24gdihHLHJlLHVlLHllKXtHIT09cmU/KEctcmU+MTgwP3JlKz0zNjA6cmUtRz4xODAmJihHKz0zNjApLHllLnB1c2goe2k6dWUucHVzaChoKHVlKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6YzQoRyxyZSl9KSk6'@;
put 'cmUmJnVlLnB1c2goaCh1ZSkrInJvdGF0ZSgiK3JlK2QpfShHLnJvdGF0ZSxyZS5yb3RhdGUsdWUseWUpLGZ1bmN0aW9uIE0oRyxyZSx1ZSx5ZSl7RyE9PXJlP3llLnB1c2goe2k6dWUucHVzaChoKHVlKSsic2tld1goIixudWxsLGQpLTIseDpjNChHLHJlKX0pOnJlJiZ1ZS5wdXNoKGgodWUp'@;
put 'KyJza2V3WCgiK3JlK2QpfShHLnNrZXdYLHJlLnNrZXdYLHVlLHllKSxmdW5jdGlvbiBJKEcscmUsdWUseWUsRWUsQmUpe2lmKEchPT11ZXx8cmUhPT15ZSl7dmFyIEdlPUVlLnB1c2goaChFZSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO0JlLnB1c2goe2k6R2UtNCx4OmM0KEcsdWUp'@;
put 'fSx7aTpHZS0yLHg6YzQocmUseWUpfSl9ZWxzZSgxIT09dWV8fDEhPT15ZSkmJkVlLnB1c2goaChFZSkrInNjYWxlKCIrdWUrIiwiK3llKyIpIil9KEcuc2NhbGVYLEcuc2NhbGVZLHJlLnNjYWxlWCxyZS5zY2FsZVksdWUseWUpLEc9cmU9bnVsbCxmdW5jdGlvbihFZSl7Zm9yKHZhciBzdCxC'@;
put 'ZT0tMSxHZT15ZS5sZW5ndGg7KytCZTxHZTspdWVbKHN0PXllW0JlXSkuaV09c3QueChFZSk7cmV0dXJuIHVlLmpvaW4oIiIpfX19dmFyIGxNdD1VOGUoZnVuY3Rpb24gc010KGMpe2NvbnN0IGw9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01h'@;
put 'dHJpeCkoYysiIik7cmV0dXJuIGwuaXNJZGVudGl0eT9TdGU6ejhlKGwuYSxsLmIsbC5jLGwuZCxsLmUsbC5mKX0sInB4LCAiLCJweCkiLCJkZWcpIiksWjhlPVU4ZShmdW5jdGlvbiBvTXQoYyl7cmV0dXJuIG51bGwhPWMmJihrTnx8KGtOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0'@;
put 'cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGtOLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixjKSxjPWtOLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3o4ZSgoYz1jLm1hdHJpeCkuYSxjLmIsYy5jLGMuZCxjLmUsYy5mKTpTdGV9LCIsICIsIikiLCIpIik7ZnVuY3Rp'@;
put 'b24gY010KGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1sNCh0aGlzLGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIHY9MCxNPShkPWE9ZikubGVuZ3RoO3Y8TTsrK3YpaWYoZFt2XS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2UodiwxKTticmVha31oLnR3'@;
put 'ZWVuPWR9fWZ1bmN0aW9uIHVNdChjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9bDQodGhpcyxjKSx2PWYudHdlZW47aWYodiE9PWQpe2g9KGQ9dikuc2xpY2UoKTtmb3IodmFyIE09e25hbWU6bCx2'@;
put 'YWx1ZTphfSxJPTAsRz1oLmxlbmd0aDtJPEc7KytJKWlmKGhbSV0ubmFtZT09PWwpe2hbSV09TTticmVha31JPT09RyYmaC5wdXNoKE0pfWYudHdlZW49aH19ZnVuY3Rpb24gTXRlKGMsbCxhKXt2YXIgZD1jLl9pZDtyZXR1cm4gYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9bDQodGhpcyxkKTso'@;
put 'aC52YWx1ZXx8KGgudmFsdWU9e30pKVtsXT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGgpe3JldHVybiB4MyhoLGQpLnZhbHVlW2xdfX1mdW5jdGlvbiB4dGUoYyxsLGEpe2MucHJvdG90eXBlPWwucHJvdG90eXBlPWEsYS5jb25zdHJ1Y3Rvcj1jfWZ1bmN0aW9uIFc4ZShj'@;
put 'LGwpe3ZhciBhPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiBsKWFbZF09bFtkXTtyZXR1cm4gYX1mdW5jdGlvbiBMQSgpe312YXIgRE49MS8uNyxJdz0iXFxzKihbKy1dP1xcZCspXFxzKiIsUEE9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/'@;
put 'XFxkKyk/KVxccyoiLHU0PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsaE10PS9eIyhbMC05YS1mXXszLDh9KSQvLGZNdD1uZXcgUmVnRXhwKGBecmdiXFwoJHtJd30sJHtJd30sJHtJd31cXCkkYCkscE10PW5ldyBSZWdFeHAoYF5yZ2JcXCgk'@;
put 'e3U0fSwke3U0fSwke3U0fVxcKSRgKSxnTXQ9bmV3IFJlZ0V4cChgXnJnYmFcXCgke0l3fSwke0l3fSwke0l3fSwke1BBfVxcKSRgKSxtTXQ9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3U0fSwke3U0fSwke3U0fSwke1BBfVxcKSRgKSx2TXQ9bmV3IFJlZ0V4cChgXmhzbFxcKCR7UEF9LCR7dTR9'@;
put 'LCR7dTR9XFwpJGApLHlNdD1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7UEF9LCR7dTR9LCR7dTR9LCR7UEF9XFwpJGApLFk4ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZTox'@;
put 'NjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6'@;
put 'MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFy'@;
put 'a2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4'@;
put 'NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUx'@;
put 'LGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2'@;
put 'NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxp'@;
put 'dm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1'@;
put 'OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6'@;
put 'ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9v'@;
put 'bjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxt'@;
put 'ZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2'@;
put 'NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0'@;
put 'cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxy'@;
put 'b3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1'@;
put 'ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3'@;
put 'MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBHOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3Jt'@;
put 'YXRIZXgoKX1mdW5jdGlvbiAkOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBYOShjKXt2YXIgbCxhO3JldHVybiBjPShjKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobD1oTXQuZXhlYyhjKSk/KGE9bFsxXS5sZW5ndGgsbD1wYXJzZUludChsWzFdLDE2KSw2'@;
put 'PT09YT9LOGUobCk6Mz09PWE/bmV3IEpkKGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoMTUmbCk8PDR8MTUmbCwxKTo4PT09YT9JTihsPj4yNCYyNTUsbD4+MTYmMjU1LGw+PjgmMjU1LCgyNTUmbCkvMjU1KTo0PT09YT9JTihsPj4xMiYxNXxsPj44JjI0MCxsPj44JjE1fGw+PjQm'@;
put 'MjQwLGw+PjQmMTV8MjQwJmwsKCgxNSZsKTw8NHwxNSZsKS8yNTUpOm51bGwpOihsPWZNdC5leGVjKGMpKT9uZXcgSmQobFsxXSxsWzJdLGxbM10sMSk6KGw9cE10LmV4ZWMoYykpP25ldyBKZCgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEwMCwxKToobD1nTXQuZXhlYyhj'@;
put 'KSk/SU4obFsxXSxsWzJdLGxbM10sbFs0XSk6KGw9bU10LmV4ZWMoYykpP0lOKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLGxbNF0pOihsPXZNdC5leGVjKGMpKT9KOGUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCwxKToobD15TXQuZXhlYyhjKSk/SjhlKGxbMV0sbFsy'@;
put 'XS8xMDAsbFszXS8xMDAsbFs0XSk6WThlLmhhc093blByb3BlcnR5KGMpP0s4ZShZOGVbY10pOiJ0cmFuc3BhcmVudCI9PT1jP25ldyBKZChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEs4ZShjKXtyZXR1cm4gbmV3IEpkKGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYywxKX1mdW5jdGlv'@;
put 'biBJTihjLGwsYSxkKXtyZXR1cm4gZDw9MCYmKGM9bD1hPU5hTiksbmV3IEpkKGMsbCxhLGQpfWZ1bmN0aW9uIFJOKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbiB3TXQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBMQXx8KGM9WDkoYykpLGM/bmV3IEpkKChj'@;
put 'PWMucmdiKCkpLnIsYy5nLGMuYixjLm9wYWNpdHkpOm5ldyBKZH0oYyk6bmV3IEpkKGMsbCxhLGQ/PzEpfWZ1bmN0aW9uIEpkKGMsbCxhLGQpe3RoaXMucj0rYyx0aGlzLmc9K2wsdGhpcy5iPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBYOGUoKXtyZXR1cm5gIyR7SjkodGhpcy5yKX0k'@;
put 'e0o5KHRoaXMuZyl9JHtKOSh0aGlzLmIpfWB9ZnVuY3Rpb24gcThlKCl7Y29uc3QgYz1MTih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJyZ2IoIjoicmdiYSgifSR7cTkodGhpcy5yKX0sICR7cTkodGhpcy5nKX0sICR7cTkodGhpcy5iKX0kezE9PT1jPyIpIjpgLCAke2N9KWB9YH1m'@;
put 'dW5jdGlvbiBMTihjKXtyZXR1cm4gaXNOYU4oYyk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsYykpfWZ1bmN0aW9uIHE5KGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGMpfHwwKSl9ZnVuY3Rpb24gSjkoYyl7cmV0dXJuKChjPXE5KGMpKTwxNj8iMCI6IiIp'@;
put 'K2MudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEo4ZShjLGwsYSxkKXtyZXR1cm4gZDw9MD9jPWw9YT1OYU46YTw9MHx8YT49MT9jPWw9TmFOOmw8PTAmJihjPU5hTiksbmV3IEUzKGMsbCxhLGQpfWZ1bmN0aW9uIFE4ZShjKXtpZihjIGluc3RhbmNlb2YgRTMpcmV0dXJuIG5ldyBFMyhjLmgsYy5z'@;
put 'LGMubCxjLm9wYWNpdHkpO2lmKGMgaW5zdGFuY2VvZiBMQXx8KGM9WDkoYykpLCFjKXJldHVybiBuZXcgRTM7aWYoYyBpbnN0YW5jZW9mIEUzKXJldHVybiBjO3ZhciBsPShjPWMucmdiKCkpLnIvMjU1LGE9Yy5nLzI1NSxkPWMuYi8yNTUsaD1NYXRoLm1pbihsLGEsZCksZj1NYXRoLm1heChs'@;
put 'LGEsZCksdj1OYU4sTT1mLWgsST0oZitoKS8yO3JldHVybiBNPyh2PWw9PT1mPyhhLWQpL00rNiooYTxkKTphPT09Zj8oZC1sKS9NKzI6KGwtYSkvTSs0LE0vPUk8LjU/ZitoOjItZi1oLHYqPTYwKTpNPUk+MCYmSTwxPzA6dixuZXcgRTModixNLEksYy5vcGFjaXR5KX1mdW5jdGlvbiBFMyhj'@;
put 'LGwsYSxkKXt0aGlzLmg9K2MsdGhpcy5zPStsLHRoaXMubD0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gZTdlKGMpe3JldHVybihjPShjfHwwKSUzNjApPDA/YyszNjA6Y31mdW5jdGlvbiBPTihjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGN8fDApKX1mdW5jdGlvbiBFdGUo'@;
put 'YyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIHQ3ZShjLGwsYSxkLGgpe3ZhciBmPWMqYyx2PWYqYztyZXR1cm4oKDEtMypjKzMqZi12KSpsKyg0LTYqZiszKnYpKmErKDErMypjKzMqZi0zKnYp'@;
put 'KmQrdipoKS82fXh0ZShMQSxYOSx7Y29weShjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGMpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpHOGUsZm9ybWF0SGV4Okc4ZSxmb3JtYXRIZXg4OmZ1bmN0'@;
put 'aW9uIGJNdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX0sZm9ybWF0SHNsOmZ1bmN0aW9uIF9NdCgpe3JldHVybiBROGUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjokOGUsdG9TdHJpbmc6JDhlfSkseHRlKEpkLFJOLFc4ZShMQSx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9'@;
put 'bnVsbD09Yz9ETjpNYXRoLnBvdyhETixjKSxuZXcgSmQodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IEpkKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0'@;
put 'eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgSmQocTkodGhpcy5yKSxxOSh0aGlzLmcpLHE5KHRoaXMuYiksTE4odGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwy'@;
put 'NTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpYOGUsZm9ybWF0SGV4Olg4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIENNdCgpe3JldHVybmAjJHtKOSh0aGlzLnIpfSR7SjkodGhpcy5nKX0ke0o5KHRoaXMuYil9JHtK'@;
put 'OSgyNTUqKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKX1gfSxmb3JtYXRSZ2I6cThlLHRvU3RyaW5nOnE4ZX0pKSx4dGUoRTMsZnVuY3Rpb24gU010KGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ROGUoYyk6bmV3IEUzKGMsbCxhLGQ/PzEpfSxXOGUo'@;
put 'TEEse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/RE46TWF0aC5wb3coRE4sYyksbmV3IEUzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IEUzKHRoaXMuaCx0aGlzLnMsdGhp'@;
put 'cy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIqYS1kO3JldHVybiBuZXcgSmQoRXRlKGM+PTI0MD9jLTI0MDpjKzEy'@;
put 'MCxoLGQpLEV0ZShjLGgsZCksRXRlKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IEUzKGU3ZSh0aGlzLmgpLE9OKHRoaXMucyksT04odGhpcy5sKSxMTih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5z'@;
put 'JiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9TE4odGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke2U3ZSh0aGlzLmgp'@;
put 'fSwgJHsxMDAqT04odGhpcy5zKX0lLCAkezEwMCpPTih0aGlzLmwpfSUkezE9PT1jPyIpIjpgLCAke2N9KWB9YH19KSk7Y29uc3QgVHRlPWM9PigpPT5jO2Z1bmN0aW9uIHI3ZShjLGwpe3ZhciBhPWwtYztyZXR1cm4gYT9mdW5jdGlvbiBuN2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIGMrYSpsfX0oYyxhKTpUdGUoaXNOYU4oYyk/bDpjKX1jb25zdCBQTj1mdW5jdGlvbiBjKGwpe3ZhciBhPWZ1bmN0aW9uIFRNdChjKXtyZXR1cm4gMT09KGM9K2MpP3I3ZTpmdW5jdGlvbihsLGEpe3JldHVybiBhLWw/ZnVuY3Rpb24gRU10KGMsbCxhKXtyZXR1cm4gYz1NYXRoLnBvdyhj'@;
put 'LGEpLGw9TWF0aC5wb3cobCxhKS1jLGE9MS9hLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLnBvdyhjK2QqbCxhKX19KGwsYSxjKTpUdGUoaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgdj1hKChoPVJOKGgpKS5yLChmPVJOKGYpKS5yKSxNPWEoaC5nLGYuZyksST1hKGgu'@;
put 'YixmLmIpLEc9cjdlKGgub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihyZSl7cmV0dXJuIGgucj12KHJlKSxoLmc9TShyZSksaC5iPUkocmUpLGgub3BhY2l0eT1HKHJlKSxoKyIifX1yZXR1cm4gZC5nYW1tYT1jLGR9KDEpO2Z1bmN0aW9uIGk3ZShjKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24obCl7dmFyIHYsTSxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxhOysrdilNPVJOKGxbdl0pLGRbdl09TS5yfHwwLGhbdl09TS5nfHwwLGZbdl09TS5ifHwwO3JldHVybiBkPWMoZCksaD1jKGgpLGY9YyhmKSxNLm9w'@;
put 'YWNpdHk9MSxmdW5jdGlvbihJKXtyZXR1cm4gTS5yPWQoSSksTS5nPWgoSSksTS5iPWYoSSksTSsiIn19fWk3ZShmdW5jdGlvbiBNTXQoYyl7dmFyIGw9Yy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9YTw9MD9hPTA6YT49MT8oYT0xLGwtMSk6TWF0aC5mbG9vcihhKmwpLGg9'@;
put 'Y1tkXSxmPWNbZCsxXTtyZXR1cm4gdDdlKChhLWQvbCkqbCxkPjA/Y1tkLTFdOjIqaC1mLGgsZixkPGwtMT9jW2QrMl06MipmLWgpfX0pLGk3ZShmdW5jdGlvbiB4TXQoYyl7dmFyIGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGguZmxvb3IoKChhJT0xKTwwPysrYTph'@;
put 'KSpsKTtyZXR1cm4gdDdlKChhLWQvbCkqbCxjWyhkK2wtMSklbF0sY1tkJWxdLGNbKGQrMSklbF0sY1soZCsyKSVsXSl9fSk7dmFyIEF0ZT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csa3RlPW5ldyBSZWdFeHAoQXRlLnNvdXJjZSwiZyIpO2Z1bmN0aW9u'@;
put 'IGE3ZShjLGwpe3ZhciBkLGgsZixhPUF0ZS5sYXN0SW5kZXg9a3RlLmxhc3RJbmRleD0wLHY9LTEsTT1bXSxJPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1BdGUuZXhlYyhjKSkmJihoPWt0ZS5leGVjKGwpKTspKGY9aC5pbmRleCk+YSYmKGY9bC5zbGljZShhLGYpLE1bdl0/TVt2XSs9ZjpNWysr'@;
put 'dl09ZiksKGQ9ZFswXSk9PT0oaD1oWzBdKT9NW3ZdP01bdl0rPWg6TVsrK3ZdPWg6KE1bKyt2XT1udWxsLEkucHVzaCh7aTp2LHg6YzQoZCxoKX0pKSxhPWt0ZS5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSxNLmxlbmd0'@;
put 'aDwyP0lbMF0/ZnVuY3Rpb24ga010KGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKSsiIn19KElbMF0ueCk6ZnVuY3Rpb24gQU10KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6KGw9SS5sZW5ndGgsZnVuY3Rpb24oRyl7Zm9yKHZhciB1ZSxyZT0wO3JlPGw7Kyty'@;
put 'ZSlNWyh1ZT1JW3JlXSkuaV09dWUueChHKTtyZXR1cm4gTS5qb2luKCIiKX0pfWZ1bmN0aW9uIHM3ZShjLGwpe3ZhciBhO3JldHVybigibnVtYmVyIj09dHlwZW9mIGw/YzQ6bCBpbnN0YW5jZW9mIFg5P1BOOihhPVg5KGwpKT8obD1hLFBOKTphN2UpKGMsbCl9ZnVuY3Rpb24gRE10KGMpe3Jl'@;
put 'dHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBJTXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBSTXQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlv'@;
put 'bigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlKGMpO3JldHVybiB2PT09aD9udWxsOnY9PT1kP2Y6Zj1sKGQ9dixhKX19ZnVuY3Rpb24gTE10KGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk7'@;
put 'cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBPTXQoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixJLE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGMpOih2PXRoaXMuZ2V0QXR0cmli'@;
put 'dXRlKGMpKT09PShJPU0rIiIpP251bGw6dj09PWQmJkk9PT1oP2Y6KGg9SSxmPWwoZD12LE0pKX19ZnVuY3Rpb24gUE10KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHYsSSxNPWEodGhpcyk7cmV0dXJuIG51bGw9PU0/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5T'@;
put 'KGMuc3BhY2UsYy5sb2NhbCk6KHY9dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpKT09PShJPU0rIiIpP251bGw6dj09PWQmJkk9PT1oP2Y6KGg9SSxmPWwoZD12LE0pKX19ZnVuY3Rpb24gVk10KGMsbCl7dmFyIGEsZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rpb24gTk10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBC'@;
put 'TXQoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBITXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxh'@;
put 'fXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gek10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7Q3RlKHRoaXMsYykuZGVsYXk9K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVTXQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe0N0ZSh0aGlzLGMpLmRlbGF5PWx9fWZ1'@;
put 'bmN0aW9uIFdNdChjLGwpe3JldHVybiBmdW5jdGlvbigpe2w0KHRoaXMsYykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBZTXQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe2w0KHRoaXMsYykuZHVyYXRpb249bH19dmFyIG94dD0kOS5wcm90b3R5cGUu'@;
put 'Y29uc3RydWN0b3I7ZnVuY3Rpb24gbzdlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciB4eHQ9MDtmdW5jdGlvbiBkNChjLGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVu'@;
put 'Y3Rpb24gRHRlKGMpe3JldHVybiAkOSgpLnRyYW5zaXRpb24oYyl9ZnVuY3Rpb24gbDdlKCl7cmV0dXJuKyt4eHR9dmFyIEtnPSQ5LnByb3RvdHlwZTtkNC5wcm90b3R5cGU9RHRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZDQsc2VsZWN0OmZ1bmN0aW9uIGF4dChjKXt2YXIgbD10aGlzLl9u'@;
put 'YW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWR0ZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7Kyt2KWZvcih2YXIgcmUsdWUsTT1kW3ZdLEk9TS5sZW5ndGgsRz1mW3ZdPW5ldyBBcnJheShJKSx5ZT0w'@;
put 'O3llPEk7Kyt5ZSkocmU9TVt5ZV0pJiYodWU9Yy5jYWxsKHJlLHJlLl9fZGF0YV9fLHllLE0pKSYmKCJfX2RhdGFfXyJpbiByZSYmKHVlLl9fZGF0YV9fPXJlLl9fZGF0YV9fKSxHW3llXT11ZSxUTihHW3llXSxsLGEseWUsRyx4MyhyZSxhKSkpO3JldHVybiBuZXcgZDQoZix0aGlzLl9wYXJl'@;
put 'bnRzLGwsYSl9LHNlbGVjdEFsbDpmdW5jdGlvbiBzeHQoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1fOGUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPVtdLHY9W10sTT0wO008aDsrK00pZm9yKHZhciByZSxJ'@;
put 'PWRbTV0sRz1JLmxlbmd0aCx1ZT0wO3VlPEc7Kyt1ZSlpZihyZT1JW3VlXSl7Zm9yKHZhciBFZSx5ZT1jLmNhbGwocmUscmUuX19kYXRhX18sdWUsSSksQmU9eDMocmUsYSksR2U9MCxzdD15ZS5sZW5ndGg7R2U8c3Q7KytHZSkoRWU9eWVbR2VdKSYmVE4oRWUsbCxhLEdlLHllLEJlKTtmLnB1'@;
put 'c2goeWUpLHYucHVzaChyZSl9cmV0dXJuIG5ldyBkNChmLHYsbCxhKX0sc2VsZWN0Q2hpbGQ6S2cuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46S2cuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIEpNdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9dzhlKGMpKTtmb3IodmFy'@;
put 'IGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBJLGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxHPTA7Rzx2OysrRykoST1mW0ddKSYmYy5jYWxsKEksSS5fX2RhdGFfXyxHLGYpJiZNLnB1c2goSSk7cmV0dXJuIG5ldyBkNChk'@;
put 'LHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIFFNdChjKXtpZihjLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9Yy5fZ3JvdXBzLGQ9bC5sZW5ndGgsZj1NYXRoLm1pbihkLGEubGVuZ3RoKSx2'@;
put 'PW5ldyBBcnJheShkKSxNPTA7TTxmOysrTSlmb3IodmFyIHllLEk9bFtNXSxHPWFbTV0scmU9SS5sZW5ndGgsdWU9dltNXT1uZXcgQXJyYXkocmUpLEVlPTA7RWU8cmU7KytFZSkoeWU9SVtFZV18fEdbRWVdKSYmKHVlW0VlXT15ZSk7Zm9yKDtNPGQ7KytNKXZbTV09bFtNXTtyZXR1cm4gbmV3'@;
put 'IGQ0KHYsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIGx4dCgpe3JldHVybiBuZXcgb3h0KHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBTeHQoKXtmb3IodmFyIGM9dGhpcy5fbmFtZSxsPXRoaXMu'@;
put 'X2lkLGE9bDdlKCksZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIEksdj1kW2ZdLE09di5sZW5ndGgsRz0wO0c8TTsrK0cpaWYoST12W0ddKXt2YXIgcmU9eDMoSSxsKTtUTihJLGMsYSxHLHYse3RpbWU6cmUudGltZStyZS5kZWxheStyZS5kdXJhdGlvbixk'@;
put 'ZWxheTowLGR1cmF0aW9uOnJlLmR1cmF0aW9uLGVhc2U6cmUuZWFzZX0pfXJldHVybiBuZXcgZDQoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6S2cuY2FsbCxub2RlczpLZy5ub2Rlcyxub2RlOktnLm5vZGUsc2l6ZTpLZy5zaXplLGVtcHR5OktnLmVtcHR5LGVhY2g6S2cuZWFjaCxvbjpm'@;
put 'dW5jdGlvbiBueHQoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3gzKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiB0eHQoYyxsLGEpe3ZhciBkLGgsZj1mdW5jdGlvbiBleHQoYyl7cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxp'@;
put 'dCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTtyZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/Q3RlOmw0O3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWYodGhpcyxjKSxNPXYub247TSE9PWQmJihoPShkPU0p'@;
put 'LmNvcHkoKSkub24obCxhKSx2Lm9uPWh9fShhLGMsbCkpfSxhdHRyOmZ1bmN0aW9uIEZNdChjLGwpe3ZhciBhPXlOKGMpLGQ9InRyYW5zZm9ybSI9PT1hP1o4ZTpzN2U7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGMsImZ1bmN0aW9uIj09dHlwZW9mIGw/KGEubG9jYWw/UE10Ok9NdCkoYSxkLE10'@;
put 'ZSh0aGlzLCJhdHRyLiIrYyxsKSk6bnVsbD09bD8oYS5sb2NhbD9JTXQ6RE10KShhKTooYS5sb2NhbD9MTXQ6Uk10KShhLGQsbCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gak10KGMsbCl7dmFyIGE9ImF0dHIuIitjO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oYT10aGlzLnR3ZWVuKGEp'@;
put 'KSYmYS5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjt2YXIgZD15TihjKTtyZXR1cm4gdGhpcy50d2VlbihhLChkLmxvY2FsP1ZNdDpCTXQpKGQsbCkpfSxzdHlsZTpmdW5jdGlvbiBmeHQo'@;
put 'YyxsLGEpe3ZhciBkPSJ0cmFuc2Zvcm0iPT0oYys9IiIpP2xNdDpzN2U7cmV0dXJuIG51bGw9PWw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gY3h0KGMsbCl7dmFyIGEsZCxoO3JldHVybiBmdW5jdGlvbigpe3ZhciBmPWt3KHRoaXMsYyksdj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0'@;
put 'eShjKSxrdyh0aGlzLGMpKTtyZXR1cm4gZj09PXY/bnVsbDpmPT09YSYmdj09PWQ/aDpoPWwoYT1mLGQ9dil9fShjLGQpKS5vbigiZW5kLnN0eWxlLiIrYyxvN2UoYykpOiJmdW5jdGlvbiI9PXR5cGVvZiBsP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIGR4dChjLGwsYSl7dmFyIGQsaCxm'@;
put 'O3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWt3KHRoaXMsYyksTT1hKHRoaXMpLEk9TSsiIjtyZXR1cm4gbnVsbD09TSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksST1NPWt3KHRoaXMsYykpLHY9PT1JP251bGw6dj09PWQmJkk9PT1oP2Y6KGg9SSxmPWwoZD12LE0pKX19KGMsZCxN'@;
put 'dGUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiBoeHQoYyxsKXt2YXIgYSxkLGgsTSxmPSJzdHlsZS4iK2wsdj0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgST1sNCh0aGlzLGMpLEc9SS5vbixyZT1udWxsPT1JLnZhbHVlW2ZdP018fChNPW83ZShsKSk6dm9pZCAw'@;
put 'OyhHIT09YXx8aCE9PXJlKSYmKGQ9KGE9RykuY29weSgpKS5vbih2LGg9cmUpLEkub249ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiB1eHQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWt3KHRoaXMsYyk7cmV0dXJuIHY9'@;
put 'PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIG14dChjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9dGhpcy50d2VlbihkKSkm'@;
put 'JmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiBneHQoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3ZhciB2PWwuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpO3JldHVybiB2IT09aCYmKGQ9KGg9dikmJmZ1bmN0aW9uIHB4dChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMsdixhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxmfShjLGwsYT8/IiIpKX0s'@;
put 'dGV4dDpmdW5jdGlvbiBieHQoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIHl4dChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fShNdGUodGhpcywidGV4dCIsYykpOmZ1bmN0'@;
put 'aW9uIHZ4dChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fShudWxsPT1jPyIiOmMrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIEN4dChjKXt2YXIgbD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihsPXRoaXMudHdlZW4obCkpJiZsLl92YWx1ZTtp'@;
put 'ZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGwsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGwsZnVuY3Rpb24gd3h0KGMpe3ZhciBsLGE7ZnVuY3Rpb24gZCgpe3ZhciBoPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Jl'@;
put 'dHVybiBoIT09YSYmKGw9KGE9aCkmJmZ1bmN0aW9uIF94dChjKXtyZXR1cm4gZnVuY3Rpb24obCl7dGhpcy50ZXh0Q29udGVudD1jLmNhbGwodGhpcyxsKX19KGgpKSxsfXJldHVybiBkLl92YWx1ZT1jLGR9KGMpKX0scmVtb3ZlOmZ1bmN0aW9uIGl4dCgpe3JldHVybiB0aGlzLm9uKCJlbmQu'@;
put 'cmVtb3ZlIixmdW5jdGlvbiByeHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrYSE9PWMpcmV0dXJuO2wmJmwucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBk'@;
put 'TXQoYyxsKXt2YXIgYT10aGlzLl9pZDtpZihjKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgdixkPXgzKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpaWYoKHY9ZFtoXSkubmFtZT09PWMpcmV0dXJuIHYudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJu'@;
put 'IHRoaXMuZWFjaCgobnVsbD09bD9jTXQ6dU10KShhLGMsbCkpfSxkZWxheTpmdW5jdGlvbiBaTXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz96TXQ6VU10KShsLGMpKTp4Myh0aGlzLm5vZGUoKSxsKS5k'@;
put 'ZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gR010KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/V010OllNdCkobCxjKSk6eDModGhpcy5ub2RlKCksbCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gS010KGMp'@;
put 'e3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbiAkTXQoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7bDQodGhpcyxjKS5lYXNlPWx9fShsLGMpKTp4Myh0aGlzLm5vZGUo'@;
put 'KSxsKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiBxTXQoYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gWE10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYo'@;
put 'ImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO2w0KHRoaXMsYykuZWFzZT1hfX0odGhpcy5faWQsYykpfSxlbmQ6ZnVuY3Rpb24gTXh0KCl7dmFyIGMsbCxhPXRoaXMsZD1hLl9pZCxoPWEuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLHYpe3ZhciBNPXt2'@;
put 'YWx1ZTp2fSxJPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taCYmZigpfX07YS5lYWNoKGZ1bmN0aW9uKCl7dmFyIEc9bDQodGhpcyxkKSxyZT1HLm9uO3JlIT09YyYmKChsPShjPXJlKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goTSksbC5fLmludGVycnVwdC5wdXNoKE0pLGwuXy5lbmQucHVzaChJ'@;
put 'KSksRy5vbj1sfSksMD09PWgmJmYoKX0pfSxbU3ltYm9sLml0ZXJhdG9yXTpLZ1tTeW1ib2wuaXRlcmF0b3JdfTt2YXIgVHh0PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbiBFeHQoYyl7cmV0dXJuKChjKj0yKTw9MT9jKmMqYzooYy09MikqYypjKzIpLzJ9'@;
put 'fTtmdW5jdGlvbiBBeHQoYyxsKXtmb3IodmFyIGE7IShhPWMuX190cmFuc2l0aW9uKXx8IShhPWFbbF0pOylpZighKGM9Yy5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtsfSBub3QgZm91bmRgKTtyZXR1cm4gYX0kOS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0'@;
put 'aW9uIGFNdChjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7QU4odGhpcyxjKX0pfSwkOS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBreHQoYyl7dmFyIGwsYTtjIGluc3RhbmNlb2YgZDQ/KGw9Yy5faWQsYz1jLl9uYW1lKToobD1sN2UoKSwoYT1UeHQpLnRpbWU9dnRlKCks'@;
put 'Yz1udWxsPT1jP251bGw6YysiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgSSx2PWRbZl0sTT12Lmxlbmd0aCxHPTA7RzxNOysrRykoST12W0ddKSYmVE4oSSxjLGwsRyx2LGF8fEF4dChJLGwpKTtyZXR1cm4gbmV3IGQ0KGQsdGhpcy5f'@;
put 'cGFyZW50cyxjLGwpfTt2YXIgRHh0PVtudWxsXTtjb25zdCBJdGU9e2NhcHR1cmU6ITAscGFzc2l2ZTohMX07ZnVuY3Rpb24gUnRlKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGM3ZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykp'@;
put 'KzEvYykvMn1jb25zdCBIeHQ9ZnVuY3Rpb24gYyhsLGEsZCl7ZnVuY3Rpb24gaChmLHYpe3ZhciBzdCxwdCxNPWZbMF0sST1mWzFdLEc9ZlsyXSx5ZT12WzJdLEVlPXZbMF0tTSxCZT12WzFdLUksR2U9RWUqRWUrQmUqQmU7aWYoR2U8MWUtMTIpcHQ9TWF0aC5sb2coeWUvRykvbCxzdD1mdW5j'@;
put 'dGlvbihNbil7cmV0dXJuW00rTW4qRWUsSStNbipCZSxHKk1hdGguZXhwKGwqTW4qcHQpXX07ZWxzZXt2YXIgZHQ9TWF0aC5zcXJ0KEdlKSxxdD0oeWUqeWUtRypHK2QqR2UpLygyKkcqYSpkdCksbW49KHllKnllLUcqRy1kKkdlKS8oMip5ZSphKmR0KSx3bj1NYXRoLmxvZyhNYXRoLnNxcnQo'@;
put 'cXQqcXQrMSktcXQpLGhuPU1hdGgubG9nKE1hdGguc3FydChtbiptbisxKS1tbik7cHQ9KGhuLXduKS9sLHN0PWZ1bmN0aW9uKE1uKXt2YXIgTXI9TW4qcHQsa3I9YzdlKHduKSxxbj1HLyhhKmR0KSooa3IqZnVuY3Rpb24gRnh0KGMpe3JldHVybigoYz1NYXRoLmV4cCgyKmMpKS0xKS8oYysx'@;
put 'KX0obCpNcit3biktZnVuY3Rpb24gUHh0KGMpe3JldHVybigoYz1NYXRoLmV4cChjKSktMS9jKS8yfSh3bikpO3JldHVybltNK3FuKkVlLEkrcW4qQmUsRyprci9jN2UobCpNcit3bildfX1yZXR1cm4gc3QuZHVyYXRpb249MWUzKnB0KmwvTWF0aC5TUVJUMixzdH1yZXR1cm4gaC5yaG89ZnVu'@;
put 'Y3Rpb24oZil7dmFyIHY9TWF0aC5tYXgoLjAwMSwrZiksTT12KnY7cmV0dXJuIGModixNLE0qTSl9LGh9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiBROShjLGwpe2lmKGM9ZnVuY3Rpb24gTnh0KGMpe2xldCBsO2Zvcig7bD1jLnNvdXJjZUV2ZW50OyljPWw7cmV0dXJuIGN9KGMpLHZvaWQg'@;
put 'MD09PWwmJihsPWMuY3VycmVudFRhcmdldCksbCl7dmFyIGE9bC5vd25lclNWR0VsZW1lbnR8fGw7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGQ9YS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBkLng9Yy5jbGllbnRYLGQueT1jLmNsaWVudFksWyhkPWQubWF0cml4VHJhbnNmb3JtKGwuZ2V0'@;
put 'U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxkLnldfWlmKGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgaD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltjLmNsaWVudFgtaC5sZWZ0LWwuY2xpZW50TGVmdCxjLmNsaWVudFktaC50b3AtbC5jbGllbnRUb3BdfX1yZXR1cm5b'@;
put 'Yy5wYWdlWCxjLnBhZ2VZXX1jb25zdCBGTj1jPT4oKT0+YztmdW5jdGlvbiBWeHQoYyx7c291cmNlRXZlbnQ6bCx0YXJnZXQ6YSx0cmFuc2Zvcm06ZCxkaXNwYXRjaDpofSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy'@;
put 'YWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmwsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdHJhbnNmb3JtOnt2YWx1ZTpkLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1'@;
put 'ZTpofX0pfWZ1bmN0aW9uIFhnKGMsbCxhKXt0aGlzLms9Yyx0aGlzLng9bCx0aGlzLnk9YX1YZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhnLHNjYWxlOmZ1bmN0aW9uKGMpe3JldHVybiAxPT09Yz90aGlzOm5ldyBYZyh0aGlzLmsqYyx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0'@;
put 'aW9uKGMsbCl7cmV0dXJuIDA9PT1jJjA9PT1sP3RoaXM6bmV3IFhnKHRoaXMuayx0aGlzLngrdGhpcy5rKmMsdGhpcy55K3RoaXMuaypsKX0sYXBwbHk6ZnVuY3Rpb24oYyl7cmV0dXJuW2NbMF0qdGhpcy5rK3RoaXMueCxjWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIGMqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGMpe3JldHVybiBjKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihjKXtyZXR1cm5bKGNbMF0tdGhpcy54KS90aGlzLmssKGNbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGMpe3JldHVybihj'@;
put 'LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChjLmludmVydCxjKSl9LHJlc2NhbGVZ'@;
put 'OmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIiki'@;
put 'fX07dmFyIEhOPW5ldyBYZygxLDAsMCk7ZnVuY3Rpb24gTk4oYyl7Zm9yKDshYy5fX3pvb207KWlmKCEoYz1jLnBhcmVudE5vZGUpKXJldHVybiBITjtyZXR1cm4gYy5fX3pvb219ZnVuY3Rpb24gTHRlKGMpe2Muc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gRkEoYyl7Yy5w'@;
put 'cmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQnh0KGMpe3JldHVybiEoYy5jdHJsS2V5JiYid2hlZWwiIT09Yy50eXBlfHxjLmJ1dHRvbil9ZnVuY3Rpb24ganh0KCl7dmFyIGM9dGhpcztyZXR1cm4gYyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/'@;
put 'KGM9Yy5vd25lclNWR0VsZW1lbnR8fGMpLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKGM9Yy52aWV3Qm94LmJhc2VWYWwpLngsYy55XSxbYy54K2Mud2lkdGgsYy55K2MuaGVpZ2h0XV06W1swLDBdLFtjLndpZHRoLmJhc2VWYWwudmFsdWUsYy5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dOltb'@;
put 'MCwwXSxbYy5jbGllbnRXaWR0aCxjLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIHU3ZSgpe3JldHVybiB0aGlzLl9fem9vbXx8SE59ZnVuY3Rpb24genh0KGMpe3JldHVybi1jLmRlbHRhWSooMT09PWMuZGVsdGFNb2RlPy4wNTpjLmRlbHRhTW9kZT8xOi4wMDIpKihjLmN0cmxLZXk/MTA6MSl9'@;
put 'ZnVuY3Rpb24gVXh0KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIFp4dChjLGwsYSl7dmFyIGQ9Yy5pbnZlcnRYKGxbMF1bMF0pLWFbMF1bMF0saD1jLmludmVydFgobFsxXVswXSktYVsxXVswXSxmPWMuaW52ZXJ0WShs'@;
put 'WzBdWzFdKS1hWzBdWzFdLHY9Yy5pbnZlcnRZKGxbMV1bMV0pLWFbMV1bMV07cmV0dXJuIGMudHJhbnNsYXRlKGg+ZD8oZCtoKS8yOk1hdGgubWluKDAsZCl8fE1hdGgubWF4KDAsaCksdj5mPyhmK3YpLzI6TWF0aC5taW4oMCxmKXx8TWF0aC5tYXgoMCx2KSl9ZnVuY3Rpb24gZDdlKGMpe3Zh'@;
put 'ciBsPXt9LGE9Yy5ub2RlKCkubm9kZU5hbWU7bC50YWc9YSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsLmF0dHJpYnV0ZXM9e307dmFyIGQ9Yy5ub2RlKCkuYXR0cmlidXRlcztpZihkKWZvcih2YXIgaD0wO2g8ZC5sZW5n'@;
put 'dGg7aCsrKXt2YXIgZj1kW2hdO2wuYXR0cmlidXRlc1tmLm5hbWVdPWYudmFsdWV9dmFyIHJlLEk9Yy5ub2RlKCkudHJhbnNmb3JtO2lmKEkmJjAhPUkuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgRz1JLmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7bC50cmFuc2xhdGlvbj17eDpH'@;
put 'LmUseTpHLmZ9LGwuc2NhbGU9Ry5hfWlmKCJlbGxpcHNlIj09YSYmKGwuY2VudGVyPXt4OmwuYXR0cmlidXRlcy5jeCx5OmwuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09YSl7dmFyIHVlPShyZT1jLmF0dHIoInBvaW50cyIpLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihxdCl7cmV0dXJu'@;
put 'IHF0LnNwbGl0KCIsIilbMF19KSx5ZT1yZS5tYXAoZnVuY3Rpb24ocXQpe3JldHVybiBxdC5zcGxpdCgiLCIpWzFdfSksRWU9TWF0aC5taW4uYXBwbHkobnVsbCx1ZSksQmU9TWF0aC5tYXguYXBwbHkobnVsbCx1ZSksR2U9TWF0aC5taW4uYXBwbHkobnVsbCx5ZSksc3Q9TWF0aC5tYXguYXBw'@;
put 'bHkobnVsbCx5ZSk7bC5iYm94PXt4OkVlLHk6R2Usd2lkdGg6QmUtRWUsaGVpZ2h0OnN0LUdlfSxsLmNlbnRlcj17eDooRWUrQmUpLzIseTooR2Urc3QpLzJ9fSJwYXRoIj09YSYmKChyZT1jLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksdWU9cmUubWFwKGZ1bmN0aW9uKGdy'@;
put 'KXtyZXR1cm4rZ3Iuc3BsaXQoIiwiKVswXX0pLHllPXJlLm1hcChmdW5jdGlvbihncil7cmV0dXJuK2dyLnNwbGl0KCIsIilbMV19KSxFZT1NYXRoLm1pbi5hcHBseShudWxsLHVlKSxCZT1NYXRoLm1heC5hcHBseShudWxsLHVlKSxHZT1NYXRoLm1pbi5hcHBseShudWxsLHllKSxzdD1NYXRo'@;
put 'Lm1heC5hcHBseShudWxsLHllKSxsLmJib3g9e3g6RWUseTpHZSx3aWR0aDpCZS1FZSxoZWlnaHQ6c3QtR2V9LGwuY2VudGVyPXt4OihFZStCZSkvMix5OihHZStzdCkvMn0sbC50b3RhbExlbmd0aD1jLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpKTtyZXR1cm4idGV4dCI9PWEmJihsLmNlbnRl'@;
put 'cj17eDpjLmF0dHIoIngiKSx5OmMuYXR0cigieSIpfSksIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbH1mdW5jdGlvbiBldihjKXt2YXIgbD1kN2UoYyk7cmV0dXJuIGwuY2hpbGRyZW49W10sZ3RlKGMubm9kZSgpLmNoaWxk'@;
put 'Tm9kZXMpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1ldihfbyh0aGlzKSk7ZC5wYXJlbnQ9bCxsLmNoaWxkcmVuLnB1c2goZCl9KSxsfWZ1bmN0aW9uIE90ZShjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1l'@;
put 'bnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBQdGUoYyl7dmFyIGw9T3RlKGMpLGE9X28obCksZD1jLmF0dHJpYnV0ZXM7Zm9yKHZhciBoIG9mIE9iamVjdC5rZXlz'@;
put 'KGQpKWEuYXR0cihoLGRbaF0pO3JldHVybiBsfWZ1bmN0aW9uIGg3ZShjLGwpe3ZhciBhPV9vKGMubm9kZSgpLnBhcmVudE5vZGUpLGQ9UHRlKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxo'@;
put 'fWZ1bmN0aW9uIEZ0ZShjLGwpeyFmdW5jdGlvbiBZeHQoYyxsKXtjLmRhdHVtKGwpLGMuZGF0YShbbF0sZnVuY3Rpb24oYSl7cmV0dXJuIGEua2V5fSl9KGMsbCksZ3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oZCxoKXtGdGUoX28odGhpcyksbC5jaGlsZHJlbltoXSl9'@;
put 'KX1mdW5jdGlvbiBIQShjLGw9MCl7dmFyIGE9X28odGhpcyksaD1jLmF0dHJpYnV0ZXMsZj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciBNPWZbdl0sST1NLm5hbWU7aWYoInhtbG5zIiE9SS5zcGxpdCgiOiIpWzBdJiZNLm5hbWVzcGFj'@;
put 'ZVVSSSl7dmFyIEc9TS5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtJPUdbRy5sZW5ndGgtMV0rIjoiK0l9SSBpbiBofHwoaFtJXT1udWxsKX1mb3IodmFyIHVlIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cih1ZSxoW3VlXSk7Yy50ZXh0JiZhLnRleHQoYy50ZXh0KSxmdW5jdGlvbiBHeHQoYyxs'@;
put 'KXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5jaGlsZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24odil7cmV0dXJuIHYuY2hpbGRyZW59LGZ1bmN0aW9uKHYpe3JldHVybiB2LnRhZysiLSIrbH0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbih2KXty'@;
put 'ZXR1cm4gT3RlKHYpfSksaD1hLmV4aXQoKTtoPWgucmVtb3ZlKCksYT1kLm1lcmdlKGEpO3ZhciBmPXt9O2EuZWFjaChmdW5jdGlvbih2KXt2YXIgTT12LnRhZztudWxsPT1mW01dJiYoZltNXT0wKTt2YXIgST1mW01dKys7SEEuY2FsbCh0aGlzLHYsSSl9KX0oYSxsKX1mdW5jdGlvbiBmN2Uo'@;
put 'YyxsKXt2YXIgdixhPWw/bC5sZW5ndGg6MCxkPWM/TWF0aC5taW4oYSxjLmxlbmd0aCk6MCxoPW5ldyBBcnJheShkKSxmPW5ldyBBcnJheShhKTtmb3Iodj0wO3Y8ZDsrK3YpaFt2XT1WTihjW3ZdLGxbdl0pO2Zvcig7djxhOysrdilmW3ZdPWxbdl07cmV0dXJuIGZ1bmN0aW9uKE0pe2Zvcih2'@;
put 'PTA7djxkOysrdilmW3ZdPWhbdl0oTSk7cmV0dXJuIGZ9fWZ1bmN0aW9uICR4dChjLGwpe3ZhciBhPW5ldyBEYXRlO3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oZCl7cmV0dXJuIGEuc2V0VGltZShjKigxLWQpK2wqZCksYX19ZnVuY3Rpb24gS3h0KGMsbCl7dmFyIGgsYT17fSxkPXt9O2Zv'@;
put 'cihoIGluKG51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMpJiYoYz17fSksKG51bGw9PT1sfHwib2JqZWN0IiE9dHlwZW9mIGwpJiYobD17fSksbCloIGluIGM/YVtoXT1WTihjW2hdLGxbaF0pOmRbaF09bFtoXTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGggaW4gYSlkW2hdPWFbaF0oZik7'@;
put 'cmV0dXJuIGR9fWZ1bmN0aW9uIFh4dChjLGwpe2x8fChsPVtdKTt2YXIgaCxhPWM/TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpOjAsZD1sLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGYpe2ZvcihoPTA7aDxhOysraClkW2hdPWNbaF0qKDEtZikrbFtoXSpmO3JldHVybiBkfX1mdW5jdGlv'@;
put 'biBWTihjLGwpe3ZhciBkLGE9dHlwZW9mIGw7cmV0dXJuIG51bGw9PWx8fCJib29sZWFuIj09PWE/VHRlKGwpOigibnVtYmVyIj09PWE/YzQ6InN0cmluZyI9PT1hPyhkPVg5KGwpKT8obD1kLFBOKTphN2U6bCBpbnN0YW5jZW9mIFg5P1BOOmwgaW5zdGFuY2VvZiBEYXRlPyR4dDpmdW5jdGlv'@;
put 'biBxeHQoYyl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhjKSYmIShjIGluc3RhbmNlb2YgRGF0YVZpZXcpfShsKT9YeHQ6QXJyYXkuaXNBcnJheShsKT9mN2U6ImZ1bmN0aW9uIiE9dHlwZW9mIGwudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGwudG9TdHJpbmd8fGlzTmFOKGwpP0t4'@;
put 'dDpjNCkoYyxsKX1mdW5jdGlvbiBwN2UoKXt2YXIgYz10aGlzLGQ9X28odGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJzdmciKSk7aWYoMD09ZC5zaXplKCkpcmV0dXJuIHRoaXM7dGhpcy5fem9vbVNlbGVjdGlvbj1kO3ZhciBoPWZ1bmN0aW9uIFd4dCgpe3ZhciByZSx1'@;
put 'ZSx5ZSxjPUJ4dCxsPWp4dCxhPVp4dCxkPXp4dCxoPVV4dCxmPVswLDEvMF0sdj1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxNPTI1MCxJPUh4dCxHPW10ZSgic3RhcnQiLCJ6b29tIiwiZW5kIiksRWU9NTAwLEJlPTE1MCxHZT0wLHN0PTEwO2Z1bmN0aW9uIHB0KFBuKXtQbi5wcm9wZXJ0eSgi'@;
put 'X196b29tIix1N2UpLm9uKCJ3aGVlbC56b29tIixNcix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsa3IpLm9uKCJkYmxjbGljay56b29tIixxbikuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLGdyKS5vbigidG91Y2htb3ZlLnpvb20iLHFyKS5vbigidG91Y2hlbmQu'@;
put 'em9vbSB0b3VjaGNhbmNlbC56b29tIixfaSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkdChQbixVcil7cmV0dXJuKFVyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxVcikpKT09PVBuLms/UG46bmV3IFhnKFVyLFBu'@;
put 'LngsUG4ueSl9ZnVuY3Rpb24gcXQoUG4sVXIsdHIpe3ZhciBCcj1VclswXS10clswXSpQbi5rLFlyPVVyWzFdLXRyWzFdKlBuLms7cmV0dXJuIEJyPT09UG4ueCYmWXI9PT1Qbi55P1BuOm5ldyBYZyhQbi5rLEJyLFlyKX1mdW5jdGlvbiBtbihQbil7cmV0dXJuWygrUG5bMF1bMF0rICtQblsx'@;
put 'XVswXSkvMiwoK1BuWzBdWzFdKyArUG5bMV1bMV0pLzJdfWZ1bmN0aW9uIHduKFBuLFVyLHRyLEJyKXtQbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtobih0aGlzLGFyZ3VtZW50cykuZXZlbnQoQnIpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9u'@;
put 'KCl7aG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KEJyKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciBZcj10aGlzLHdpPWFyZ3VtZW50cyxCaT1obihZcix3aSkuZXZlbnQoQnIpLGhhPWwuYXBwbHkoWXIsd2kpLG1hPW51bGw9PXRyP21uKGhhKToiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgdHI/dHIuYXBwbHkoWXIsd2kpOnRyLHZ0PU1hdGgubWF4KGhhWzFdWzBdLWhhWzBdWzBdLGhhWzFdWzFdLWhhWzBdWzFdKSx4dD1Zci5fX3pvb20sJHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFVyP1VyLmFwcGx5KFlyLHdpKTpVcixZbj1JKHh0LmludmVydChtYSkuY29uY2F0KHZ0L3h0Lmsp'@;
put 'LCR0LmludmVydChtYSkuY29uY2F0KHZ0LyR0LmspKTtyZXR1cm4gZnVuY3Rpb24oJG4pe2lmKDE9PT0kbikkbj0kdDtlbHNle3ZhciBhcj1ZbigkbiksR3I9dnQvYXJbMl07JG49bmV3IFhnKEdyLG1hWzBdLWFyWzBdKkdyLG1hWzFdLWFyWzFdKkdyKX1CaS56b29tKG51bGwsJG4pfX0pfWZ1'@;
put 'bmN0aW9uIGhuKFBuLFVyLHRyKXtyZXR1cm4hdHImJlBuLl9fem9vbWluZ3x8bmV3IE1uKFBuLFVyKX1mdW5jdGlvbiBNbihQbixVcil7dGhpcy50aGF0PVBuLHRoaXMuYXJncz1Vcix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1sLmFwcGx5KFBuLFVy'@;
put 'KSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBNcihQbiwuLi5Vcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0cj1obih0aGlzLFVyKS5ldmVudChQbiksQnI9dGhpcy5fX3pvb20sWXI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLEJyLmsqTWF0aC5wb3coMixkLmFwcGx5KHRo'@;
put 'aXMsYXJndW1lbnRzKSkpKSx3aT1ROShQbik7aWYodHIud2hlZWwpKHRyLm1vdXNlWzBdWzBdIT09d2lbMF18fHRyLm1vdXNlWzBdWzFdIT09d2lbMV0pJiYodHIubW91c2VbMV09QnIuaW52ZXJ0KHRyLm1vdXNlWzBdPXdpKSksY2xlYXJUaW1lb3V0KHRyLndoZWVsKTtlbHNle2lmKEJyLms9'@;
put 'PT1ZcilyZXR1cm47dHIubW91c2U9W3dpLEJyLmludmVydCh3aSldLEFOKHRoaXMpLHRyLnN0YXJ0KCl9RkEoUG4pLHRyLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gQmkoKXt0ci53aGVlbD1udWxsLHRyLmVuZCgpfSxCZSksdHIuem9vbSgibW91c2UiLGEocXQoZHQoQnIsWXIpLHRyLm1v'@;
put 'dXNlWzBdLHRyLm1vdXNlWzFdKSx0ci5leHRlbnQsdikpfX1mdW5jdGlvbiBrcihQbiwuLi5Vcil7aWYoIXllJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHRyPVBuLmN1cnJlbnRUYXJnZXQsQnI9aG4odGhpcyxVciwhMCkuZXZlbnQoUG4pLFlyPV9vKFBuLnZpZXcpLm9uKCJtb3Vz'@;
put 'ZW1vdmUuem9vbSIsZnVuY3Rpb24gbWEoeHQpe2lmKEZBKHh0KSwhQnIubW92ZWQpe3ZhciAkdD14dC5jbGllbnRYLUJpLFluPXh0LmNsaWVudFktaGE7QnIubW92ZWQ9JHQqJHQrWW4qWW4+R2V9QnIuZXZlbnQoeHQpLnpvb20oIm1vdXNlIixhKHF0KEJyLnRoYXQuX196b29tLEJyLm1vdXNl'@;
put 'WzBdPVE5KHh0LHRyKSxCci5tb3VzZVsxXSksQnIuZXh0ZW50LHYpKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uIHZ0KHh0KXtZci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxmdW5jdGlvbiBMeHQoYyxsKXt2YXIgYT1jLmRvY3VtZW50LmRvY3VtZW50'@;
put 'RWxlbWVudCxkPV9vKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7bCYmKGQub24oImNsaWNrLmRyYWciLFJ0ZSxJdGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGE/ZC5vbigic2VsZWN0c3RhcnQuZHJh'@;
put 'ZyIsbnVsbCk6KGEuc3R5bGUuTW96VXNlclNlbGVjdD1hLl9fbm9zZWxlY3QsZGVsZXRlIGEuX19ub3NlbGVjdCl9KHh0LnZpZXcsQnIubW92ZWQpLEZBKHh0KSxCci5ldmVudCh4dCkuZW5kKCl9LCEwKSx3aT1ROShQbix0ciksQmk9UG4uY2xpZW50WCxoYT1Qbi5jbGllbnRZOyhmdW5jdGlv'@;
put 'biBSeHQoYyl7dmFyIGw9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1fbyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLFJ0ZSxJdGUpOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQuZHJhZyIsUnRlLEl0ZSk6KGwuX19ub3NlbGVjdD1sLnN0eWxlLk1velVzZXJTZWxl'@;
put 'Y3QsbC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9KShQbi52aWV3KSxMdGUoUG4pLEJyLm1vdXNlPVt3aSx0aGlzLl9fem9vbS5pbnZlcnQod2kpXSxBTih0aGlzKSxCci5zdGFydCgpfX1mdW5jdGlvbiBxbihQbiwuLi5Vcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0'@;
put 'cj10aGlzLl9fem9vbSxCcj1ROShQbi5jaGFuZ2VkVG91Y2hlcz9Qbi5jaGFuZ2VkVG91Y2hlc1swXTpQbix0aGlzKSxZcj10ci5pbnZlcnQoQnIpLEJpPWEocXQoZHQodHIsdHIuayooUG4uc2hpZnRLZXk/LjU6MikpLEJyLFlyKSxsLmFwcGx5KHRoaXMsVXIpLHYpO0ZBKFBuKSxNPjA/X28o'@;
put 'dGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0pLmNhbGwod24sQmksQnIsUG4pOl9vKHRoaXMpLmNhbGwocHQudHJhbnNmb3JtLEJpLEJyLFBuKX19ZnVuY3Rpb24gZ3IoUG4sLi4uVXIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgd2ksQmksaGEsbWEsdHI9UG4udG91Y2hl'@;
put 'cyxCcj10ci5sZW5ndGgsWXI9aG4odGhpcyxVcixQbi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1CcikuZXZlbnQoUG4pO2ZvcihMdGUoUG4pLEJpPTA7Qmk8QnI7KytCaSltYT1bbWE9UTkoaGE9dHJbQmldLHRoaXMpLHRoaXMuX196b29tLmludmVydChtYSksaGEuaWRlbnRpZmllcl0sWXIu'@;
put 'dG91Y2gwPyFZci50b3VjaDEmJllyLnRvdWNoMFsyXSE9PW1hWzJdJiYoWXIudG91Y2gxPW1hLFlyLnRhcHM9MCk6KFlyLnRvdWNoMD1tYSx3aT0hMCxZci50YXBzPTErISFyZSk7cmUmJihyZT1jbGVhclRpbWVvdXQocmUpKSx3aSYmKFlyLnRhcHM8MiYmKHVlPW1hWzBdLHJlPXNldFRpbWVv'@;
put 'dXQoZnVuY3Rpb24oKXtyZT1udWxsfSxFZSkpLEFOKHRoaXMpLFlyLnN0YXJ0KCkpfX1mdW5jdGlvbiBxcihQbiwuLi5Vcil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB3aSxCaSxoYSxtYSx0cj1obih0aGlzLFVyKS5ldmVudChQbiksQnI9UG4uY2hhbmdlZFRvdWNoZXMsWXI9QnIubGVuZ3Ro'@;
put 'O2ZvcihGQShQbiksd2k9MDt3aTxZcjsrK3dpKWhhPVE5KEJpPUJyW3dpXSx0aGlzKSx0ci50b3VjaDAmJnRyLnRvdWNoMFsyXT09PUJpLmlkZW50aWZpZXI/dHIudG91Y2gwWzBdPWhhOnRyLnRvdWNoMSYmdHIudG91Y2gxWzJdPT09QmkuaWRlbnRpZmllciYmKHRyLnRvdWNoMVswXT1oYSk7'@;
put 'aWYoQmk9dHIudGhhdC5fX3pvb20sdHIudG91Y2gxKXt2YXIgdnQ9dHIudG91Y2gwWzBdLHh0PXRyLnRvdWNoMFsxXSwkdD10ci50b3VjaDFbMF0sWW49dHIudG91Y2gxWzFdLCRuPSgkbj0kdFswXS12dFswXSkqJG4rKCRuPSR0WzFdLXZ0WzFdKSokbixhcj0oYXI9WW5bMF0teHRbMF0pKmFy'@;
put 'Kyhhcj1ZblsxXS14dFsxXSkqYXI7Qmk9ZHQoQmksTWF0aC5zcXJ0KCRuL2FyKSksaGE9Wyh2dFswXSskdFswXSkvMiwodnRbMV0rJHRbMV0pLzJdLG1hPVsoeHRbMF0rWW5bMF0pLzIsKHh0WzFdK1luWzFdKS8yXX1lbHNle2lmKCF0ci50b3VjaDApcmV0dXJuO2hhPXRyLnRvdWNoMFswXSxt'@;
put 'YT10ci50b3VjaDBbMV19dHIuem9vbSgidG91Y2giLGEocXQoQmksaGEsbWEpLHRyLmV4dGVudCx2KSl9fWZ1bmN0aW9uIF9pKFBuLC4uLlVyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHdpLEJpLHRyPWhuKHRoaXMsVXIpLmV2ZW50KFBuKSxCcj1Qbi5jaGFuZ2VkVG91Y2hlcyxZcj1Cci5s'@;
put 'ZW5ndGg7Zm9yKEx0ZShQbikseWUmJmNsZWFyVGltZW91dCh5ZSkseWU9c2V0VGltZW91dChmdW5jdGlvbigpe3llPW51bGx9LEVlKSx3aT0wO3dpPFlyOysrd2kpQmk9QnJbd2ldLHRyLnRvdWNoMCYmdHIudG91Y2gwWzJdPT09QmkuaWRlbnRpZmllcj9kZWxldGUgdHIudG91Y2gwOnRyLnRv'@;
put 'dWNoMSYmdHIudG91Y2gxWzJdPT09QmkuaWRlbnRpZmllciYmZGVsZXRlIHRyLnRvdWNoMTtpZih0ci50b3VjaDEmJiF0ci50b3VjaDAmJih0ci50b3VjaDA9dHIudG91Y2gxLGRlbGV0ZSB0ci50b3VjaDEpLHRyLnRvdWNoMCl0ci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHRyLnRv'@;
put 'dWNoMFswXSk7ZWxzZSBpZih0ci5lbmQoKSwyPT09dHIudGFwcyYmKEJpPVE5KEJpLHRoaXMpLE1hdGguaHlwb3QodWVbMF0tQmlbMF0sdWVbMV0tQmlbMV0pPHN0KSl7dmFyIGhhPV9vKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7aGEmJmhhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJl'@;
put 'dHVybiBwdC50cmFuc2Zvcm09ZnVuY3Rpb24oUG4sVXIsdHIsQnIpe3ZhciBZcj1Qbi5zZWxlY3Rpb24/UG4uc2VsZWN0aW9uKCk6UG47WXIucHJvcGVydHkoIl9fem9vbSIsdTdlKSxQbiE9PVlyP3duKFBuLFVyLHRyLEJyKTpZci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7aG4odGhp'@;
put 'cyxhcmd1bWVudHMpLmV2ZW50KEJyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgVXI/VXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOlVyKS5lbmQoKX0pfSxwdC5zY2FsZUJ5PWZ1bmN0aW9uKFBuLFVyLHRyLEJyKXtwdC5zY2FsZVRvKFBuLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBVcj9Vci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VXIpfSx0cixCcil9LHB0LnNjYWxlVG89ZnVuY3Rpb24oUG4sVXIsdHIsQnIpe3B0LnRyYW5zZm9ybShQbixmdW5jdGlvbigpe3ZhciBZcj1sLmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KSx3aT10aGlzLl9fem9vbSxCaT1udWxsPT10cj9tbihZcik6ImZ1bmN0aW9uIj09dHlwZW9mIHRyP3RyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0cixoYT13aS5pbnZlcnQoQmkpLG1hPSJmdW5jdGlvbiI9PXR5cGVvZiBVcj9Vci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VXI7cmV0dXJuIGEo'@;
put 'cXQoZHQod2ksbWEpLEJpLGhhKSxZcix2KX0sdHIsQnIpfSxwdC50cmFuc2xhdGVCeT1mdW5jdGlvbihQbixVcix0cixCcil7cHQudHJhbnNmb3JtKFBuLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBVcj9Vci5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyk6VXIsImZ1bmN0aW9uIj09dHlwZW9mIHRyP3RyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0ciksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdil9LG51bGwsQnIpfSxwdC50cmFuc2xhdGVUbz1mdW5jdGlvbihQbixVcix0cixCcixZcil7cHQudHJhbnNmb3JtKFBuLGZ1bmN0'@;
put 'aW9uKCl7dmFyIHdpPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLEJpPXRoaXMuX196b29tLGhhPW51bGw9PUJyP21uKHdpKToiZnVuY3Rpb24iPT10eXBlb2YgQnI/QnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkJyO3JldHVybiBhKEhOLnRyYW5zbGF0ZShoYVswXSxoYVsxXSkuc2NhbGUoQmku'@;
put 'aykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBVcj8tVXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1VciwiZnVuY3Rpb24iPT10eXBlb2YgdHI/LXRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotdHIpLHdpLHYpfSxCcixZcil9LE1uLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24oUG4p'@;
put 'e3JldHVybiBQbiYmKHRoaXMuc291cmNlRXZlbnQ9UG4pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKFBuLFVyKXtyZXR1cm4gdGhp'@;
put 'cy5tb3VzZSYmIm1vdXNlIiE9PVBuJiYodGhpcy5tb3VzZVsxXT1Vci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09UG4mJih0aGlzLnRvdWNoMFsxXT1Vci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PVBuJiYodGhp'@;
put 'cy50b3VjaDFbMV09VXIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1Vcix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1pdCgiZW5k'@;
put 'IikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oUG4pe3ZhciBVcj1fbyh0aGlzLnRoYXQpLmRhdHVtKCk7Ry5jYWxsKFBuLHRoaXMudGhhdCxuZXcgVnh0KFBuLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDpwdCx0eXBlOlBuLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRp'@;
put 'c3BhdGNoOkd9KSxVcil9fSxwdC53aGVlbERlbHRhPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgUG4/UG46Rk4oK1BuKSxwdCk6ZH0scHQuZmlsdGVyPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgUG4/UG46Rk4oISFQbikscHQpOmN9LHB0LnRvdWNoYWJsZT1mdW5jdGlvbihQbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIFBuP1BuOkZOKCEhUG4pLHB0KTpofSxwdC5leHRlbnQ9ZnVuY3Rpb24oUG4pe3JldHVybiBhcmd1'@;
put 'bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBQbj9QbjpGTihbWytQblswXVswXSwrUG5bMF1bMV1dLFsrUG5bMV1bMF0sK1BuWzFdWzFdXV0pLHB0KTpsfSxwdC5zY2FsZUV4dGVudD1mdW5jdGlvbihQbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K1BuWzBdLGZb'@;
put 'MV09K1BuWzFdLHB0KTpbZlswXSxmWzFdXX0scHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0rUG5bMF1bMF0sdlsxXVswXT0rUG5bMV1bMF0sdlswXVsxXT0rUG5bMF1bMV0sdlsxXVsxXT0rUG5bMV1bMV0scHQpOltbdlsw'@;
put 'XVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LHB0LmNvbnN0cmFpbj1mdW5jdGlvbihQbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9UG4scHQpOmF9LHB0LmR1cmF0aW9uPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0rUG4scHQpOk19LHB0Lmlu'@;
put 'dGVycG9sYXRlPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST1QbixwdCk6SX0scHQub249ZnVuY3Rpb24oKXt2YXIgUG49Ry5vbi5hcHBseShHLGFyZ3VtZW50cyk7cmV0dXJuIFBuPT09Rz9wdDpQbn0scHQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihQbil7cmV0dXJu'@;
put 'IGFyZ3VtZW50cy5sZW5ndGg/KEdlPShQbj0rUG4pKlBuLHB0KTpNYXRoLnNxcnQoR2UpfSxwdC50YXBEaXN0YW5jZT1mdW5jdGlvbihQbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHN0PStQbixwdCk6c3R9LHB0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0'@;
put 'ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShWTikub24oInpvb20iLGZ1bmN0aW9uIGwodil7X28oZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLHYudHJhbnNmb3JtKSxjLl9kaXNw'@;
put 'YXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPV9vKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fE50ZS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09Tk4oZC5ub2RlKCkp'@;
put 'LHRoaXN9ZnVuY3Rpb24gSHRlKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0aW9uLGE9dGhpcy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1OTih0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJuIGwmJihmPShmPWYuc2NhbGUoMS9hKSku'@;
put 'dHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxkLnkpKS5zY2FsZShoKX1mdW5jdGlvbiBOdGUoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLEh0ZS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0aW9uPWMuZGF0dW0o'@;
put 'KS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09SE4udHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9uIGlFdChj'@;
put 'LGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIFZOKFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gaChkKX0pLmpv'@;
put 'aW4oIkwiKTpsfX19ZnVuY3Rpb24gZzdlKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBtN2UoYyl7cmV0dXJuIGMucGFyZW50'@;
put 'JiZnN2UoYy5wYXJlbnQpfWZ1bmN0aW9uIHY3ZShjKXt2YXIgbD10aGlzLl90cmFuc2l0aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlvbnMuY29udmVydEVx'@;
put 'dWFsU2lkZWRQb2x5Z29ucyx2PXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51bGwhPWwsTT10aGlzLl9hdHRyaWJ1dGVyLEk9dGhpczt2YXIgdWU9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwhPWwpe3ZhciB5ZT10aGlzLl9qb2JzO2lmKEkuX2FjdGl2ZSlyZXR1cm4geWUucHVz'@;
put 'aChudWxsKSx0aGlzO3VlLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7SS5fYWN0aXZlPSExLDAhPXllLmxlbmd0aCYmKHllLnNoaWZ0KCksSS5yZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYmdWUudHJhbnNpdGlv'@;
put 'bihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7SS5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvblN0YXJ0IixJKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7SS5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsSSl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0IixmdW5j'@;
put 'dGlvbigpe0kuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEkpLEkuX2Rpc3BhdGNoLmNhbGwoImVuZCIsSSksYyYmYy5jYWxsKEkpfSk7dmFyIEVlPXRoaXMuX2RhdGEsQmU9dWUuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFtFZV0sZnVuY3Rpb24oR2Upe3JldHVybiBHZS5rZXl9KTtyZXR1'@;
put 'cm4gQmU9QmUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKEJlKSxmdW5jdGlvbiByZShHZSl7dmFyIHN0PV9vKHRoaXMpO2lmKCJzdmciPT1HZS50YWcpe3ZhciBwdD1JLl9vcHRpb25zO2lmKG51bGwhPXB0LndpZHRofHxudWxsIT1wdC5oZWlnaHQpe3ZhciBkdD1wdC53aWR0aCxxdD1w'@;
put 'dC5oZWlnaHQ7bnVsbD09ZHQ/ZHQ9NCpHZS5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2UoInB0IiwiIikvMzooc3QuYXR0cigid2lkdGgiLGR0KSxHZS5hdHRyaWJ1dGVzLndpZHRoPWR0KSxudWxsPT1xdD9xdD00KkdlLmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0IiwiIikvMzooc3Qu'@;
put 'YXR0cigiaGVpZ2h0IixxdCksR2UuYXR0cmlidXRlcy5oZWlnaHQ9cXQpLHB0LmZpdHx8KHN0LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKmR0LzQvcHQuc2NhbGV9ICR7MypxdC80L3B0LnNjYWxlfWApLEdlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MypkdC80L3B0LnNjYWxlfSAkezMq'@;
put 'cXQvNC9wdC5zY2FsZX1gKX0xIT1wdC5zY2FsZSYmKHB0LmZpdHx8bnVsbD09cHQud2lkdGgmJm51bGw9PXB0LmhlaWdodCkmJihkdD1HZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSxxdD1HZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSxzdC5hdHRyKCJ2aWV3'@;
put 'Qm94IixgMCAwICR7ZHQvcHQuc2NhbGV9ICR7cXQvcHQuc2NhbGV9YCksR2UuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHtkdC9wdC5zY2FsZX0gJHtxdC9wdC5zY2FsZX1gKX1NJiZzdC5lYWNoKE0pO3ZhciBtbj1HZS50YWcsd249R2UuYXR0cmlidXRlcyxobj1zdC5ub2RlKCkuYXR0cmli'@;
put 'dXRlcztpZihobilmb3IodmFyIE1uPTA7TW48aG4ubGVuZ3RoO01uKyspe3ZhciBNcj1obltNbl0sa3I9TXIubmFtZTtpZigieG1sbnMiIT1rci5zcGxpdCgiOiIpWzBdJiZNci5uYW1lc3BhY2VVUkkpe3ZhciBxbj1Nci5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtrcj1xbltxbi5sZW5ndGgt'@;
put 'MV0rIjoiK2tyfWtyIGluIHdufHwod25ba3JdPW51bGwpfXZhciBxcj0hMSxfaT0hMTtpZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZHZS5hbHRlcm5hdGl2ZU9sZCYmKF9pPSEwKSwoInBvbHlnb24iPT1tbnx8ImVsbGlw'@;
put 'c2UiPT1tbikmJkdlLmFsdGVybmF0aXZlTmV3JiYocXI9ITApLCJwb2x5Z29uIj09dGhpcy5ub2RlTmFtZSYmInBvbHlnb24iPT1tbiYmR2UuYWx0ZXJuYXRpdmVPbGQpe3ZhciBQbj1kN2Uoc3QpO2lmKCFmKXt2YXIgdHI9UG4uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKS5sZW5ndGg7'@;
put 'KEJyPUdlLmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09dHImJihxcj0hMSxfaT0hMSl9fWlmKF9pKXt2YXIgQmk9aDdlKHN0LEdlLmFsdGVybmF0aXZlT2xkKTtCaS5kYXRhKFtHZV0sZnVuY3Rpb24oKXtyZXR1cm4gR2Uua2V5fSksc3Q9Qml9cXImJihtbj0icGF0aCIs'@;
put 'd249R2UuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIG1hPXN0O2lmKGwmJihtYT1tYS50cmFuc2l0aW9uKGwpLGEmJm1hLmZpbHRlcihmdW5jdGlvbihXbil7cmV0dXJuIiMiPT1Xbi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLG1hLmZpbHRlcihmdW5jdGlv'@;
put 'bihXbil7cmV0dXJuIiMiPT1Xbi50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVuY3Rpb24oV24pe19vKHRoaXMpLmF0dHIoInN0eWxlIixXbiYmV24uYXR0cmlidXRlcyYmV24uYXR0cmlidXRlcy5zdHlsZXx8bnVsbCl9KSksdiYmInBhdGgiPT1tbiYmR2Uub2Zmc2V0KXt2YXIgeHQ9'@;
put 'R2UudG90YWxMZW5ndGg7c3QuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIseHQrIiAiK3h0KS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIseHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0dlLm9mZnNldC54KyIsIitHZS5vZmZzZXQueSsiKSIpLHduWyJzdHJva2UtZGFzaG9mZnNl'@;
put 'dCJdPTAsd24udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsbWEuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLHduWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLHduLnRyYW5zZm9ybSkub24oInN0YXJ0IixmdW5jdGlvbigpe19vKHRoaXMpLnN0eWxlKCJvcGFjaXR5'@;
put 'IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7X28odGhpcykuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX1pZih2JiYicG9seWdvbiI9PW1uJiZtN2UoR2UpJiZHZS5vZmZzZXQm'@;
put 'JiJwYXRoIj09R2UucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIFluPV9vKHN0Lm5vZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksJG49WW4ubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoMCksYXI9WW4ubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoR2UudG90YWxMZW5n'@;
put 'dGgpLEdyPVluLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKEdlLnRvdGFsTGVuZ3RoLTEpLEd0PTE4MCpNYXRoLmF0YW4yKGFyLnktR3IueSxhci54LUdyLngpL01hdGguUEksYm49JG4ueC1hci54K0dlLm9mZnNldC54LHhuPSRuLnktYXIueStHZS5vZmZzZXQueTtzdC5hdHRyKCJ0cmFuc2Zv'@;
put 'cm0iLCJ0cmFuc2xhdGUoIitibisiLCIreG4rIikiKSxtYS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oV24pe3ZhciBmcj1Zbi5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChHZS50b3RhbExlbmd0aCpXbiksRHI9WW4ubm9kZSgpLmdldFBvaW50QXRM'@;
put 'ZW5ndGgoR2UudG90YWxMZW5ndGgqV24rMSksT3I9MTgwKk1hdGguYXRhbjIoRHIueS1mci55LERyLngtZnIueCkvTWF0aC5QSS1HdDtyZXR1cm4idHJhbnNsYXRlKCIrKGJuPWZyLngtYXIueCtHZS5vZmZzZXQueCooMS1XbikpKyIsIisoeG49ZnIueS1hci55K0dlLm9mZnNldC55KigxLVdu'@;
put 'KSkrIikgcm90YXRlKCIrT3IrIiAiK2FyLngrIiAiK2FyLnkrIikifX0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtfbyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe19vKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12YXIgSW49ZCYmbCYm'@;
put 'InBhdGgiPT1tbiYmbnVsbCE9c3QuYXR0cigiZCIpO2Zvcih2YXIgWG4gb2YgT2JqZWN0LmtleXMod24pKXt2YXIgTm49d25bWG5dO2lmKEluJiYiZCI9PVhuKXt2YXIgQnI7KEJyPShHZS5hbHRlcm5hdGl2ZU9sZHx8R2UpLnBvaW50cykmJm1hLmF0dHJUd2VlbigiZCIsaUV0KEJyLE5uKSl9'@;
put 'ZWxzZXtpZigidHJhbnNmb3JtIj09WG4mJkdlLnRyYW5zbGF0aW9uKWlmKGwpe3ZhciB2cj1tYS5vbigiZW5kIik7bWEub24oInN0YXJ0IixmdW5jdGlvbigpe0kuX3pvb21CZWhhdmlvciYmbWEudHdlZW4oImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBXbj10aGlzO3JldHVybiBm'@;
put 'dW5jdGlvbihmcil7V24uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLFo4ZShOTihJLl96b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxIdGUuY2FsbChJLHN0KS50b1N0cmluZygpKShmcikpfX0pfSkub24oImVuZCIsZnVuY3Rpb24oKXt2ci5jYWxsKHRoaXMpLEkuX3pvb21CZWhh'@;
put 'dmlvciYmTnRlLmNhbGwoSSxzdCl9KX1lbHNlIEkuX3pvb21CZWhhdmlvciYmKE50ZS5jYWxsKEksc3QpLE5uPUh0ZS5jYWxsKEksc3QpLnRvU3RyaW5nKCkpO21hLmF0dHIoWG4sTm4pfX1xciYmbWEub24oImVuZCIsZnVuY3Rpb24oV24sZnIsRHIpe2g3ZShCaT1fbyh0aGlzKSxXbikuZGF0'@;
put 'YShbV25dLGZ1bmN0aW9uKCl7cmV0dXJuIFduLmtleX0pfSksR2UudGV4dCYmbWEudGV4dChHZS50ZXh0KSxmdW5jdGlvbiBHKEdlKXt2YXIgc3Q9R2Uuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIEdlLm5vZGUoKS5jaGlsZE5vZGVzfSkscHQ9KHN0PXN0LmRhdGEoZnVuY3Rpb24obW4p'@;
put 'e3JldHVybiBtbi5jaGlsZHJlbn0sZnVuY3Rpb24obW4pe3JldHVybiBtbi5rZXl9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24obW4pe3ZhciB3bj1PdGUobW4pO3JldHVybiIjdGV4dCI9PW1uLnRhZyYmYSYmKHduLm5vZGVWYWx1ZT1tbi50ZXh0KSx3bn0pOyhhfHx2JiZnN2UoR2UuZGF0'@;
put 'dW0oKSkpJiZwdC5maWx0ZXIoZnVuY3Rpb24obW4pe3JldHVybiIjIj09bW4udGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24obW4pe3ZhciB3bj1fbyh0aGlzKTtmb3IodmFyIGhuIG9mIE9iamVjdC5rZXlzKG1uLmF0dHJpYnV0ZXMpKXduLmF0dHIoaG4sbW4uYXR0cmlidXRlc1to'@;
put 'bl0pfSkuZmlsdGVyKGZ1bmN0aW9uKG1uKXtyZXR1cm4ic3ZnIj09bW4udGFnfHwiZyI9PW1uLnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyIHF0PXN0LmV4aXQoKTtNJiZxdC5lYWNoKE0pLGwmJihxdD1xdC50cmFuc2l0aW9uKGwpLGEmJnF0LmZpbHRlcihmdW5jdGlv'@;
put 'bihtbil7cmV0dXJuIiMiPT1tbi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApKSxxdD1xdC5yZW1vdmUoKSwoc3Q9cHQubWVyZ2Uoc3QpLm9yZGVyKCkpLmVhY2gocmUpfShzdCl9LmNhbGwoQmUubm9kZSgpLEVlKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29t'@;
put 'QmVoYXZpb3ImJnA3ZS5jYWxsKHRoaXMpLEkuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsSSksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfU5OLnByb3RvdHlwZT1YZy5wcm90b3R5cGU7dmFyIGRFdD1BcnJheUJ1ZmZl'@;
put 'cixBdT1VaW50OEFycmF5LEJOPVVpbnQxNkFycmF5LGhFdD1JbnQxNkFycmF5LGpOPUludDMyQXJyYXksVnRlPWZ1bmN0aW9uKGMsbCxhKXtpZihBdS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIEF1LnByb3RvdHlwZS5zbGljZS5jYWxsKGMsbCxhKTsobnVsbD09bHx8bDwwKSYmKGw9MCksKG51'@;
put 'bGw9PWF8fGE+Yy5sZW5ndGgpJiYoYT1jLmxlbmd0aCk7dmFyIGQ9bmV3IEF1KGEtbCk7cmV0dXJuIGQuc2V0KGMuc3ViYXJyYXkobCxhKSksZH0sTkE9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoQXUucHJvdG90eXBlLmZpbGwpcmV0dXJuIEF1LnByb3RvdHlwZS5maWxsLmNhbGwoYyxsLGEsZCk7'@;
put 'Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3RoKTthPGQ7KythKWNbYV09bDtyZXR1cm4gY30sZkV0PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKEF1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBBdS5wcm90b3R5cGUuY29weVdpdGhp'@;
put 'bi5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOyljW2wrK109Y1thKytdfSxwRXQ9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJpbnZhbGlk'@;
put 'IGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLHF1PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1uZXcgRXJyb3IobHx8cEV0W2NdKTtpZihkLmNvZGU9YyxFcnJvci5jYXB0dXJlU3RhY2tUcmFj'@;
put 'ZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxxdSksIWEpdGhyb3cgZDtyZXR1cm4gZH0seTdlPWZ1bmN0aW9uKGMsbCxhKXtmb3IodmFyIGQ9MCxoPTA7ZDxhOysrZClofD1jW2wrK108PChkPDwzKTtyZXR1cm4gaH0sbUV0PWZ1bmN0aW9uKGMsbCl7dmFyIGE9Y1swXXxjWzFdPDw4fGNb'@;
put 'Ml08PDE2O2lmKDMxMjY1Njg9PWEmJjI1Mz09Y1szXSl7dmFyIGQ9Y1s0XSxoPWQ+PjUmMSxmPWQ+PjImMSx2PTMmZCxNPWQ+PjY7OCZkJiZxdSgwKTt2YXIgST02LWgsRz0zPT12PzQ6dixyZT15N2UoYyxJLEcpLHVlPU0/MTw8TTpoLHllPXk3ZShjLEkrPUcsdWUpKygxPT1NJiYyNTYpLEVl'@;
put 'PXllO2lmKCFoKXt2YXIgQmU9MTw8MTArKGNbNV0+PjMpO0VlPUJlKyhCZT4+MykqKDcmY1s1XSl9RWU+MjE0NTM4NjQ5NiYmcXUoMSk7dmFyIEdlPW5ldyBBdSgoMT09bD95ZXx8RWU6bD8wOkVlKSsxMik7cmV0dXJuIEdlWzBdPTEsR2VbNF09NCxHZVs4XT04LHtiOkkrdWUseTowLGw6MCxk'@;
put 'OnJlLHc6bCYmMSE9bD9sOkdlLnN1YmFycmF5KDEyKSxlOkVlLG86bmV3IGpOKEdlLmJ1ZmZlciwwLDMpLHU6eWUsYzpmLG06TWF0aC5taW4oMTMxMDcyLEVlKX19aWYoMjU0ODE4OTM9PShhPj40fGNbM108PDIwKSlyZXR1cm4gZnVuY3Rpb24oYyxsKXtyZXR1cm4oY1s0XXxjWzVdPDw4fGNb'@;
put 'Nl08PDE2fGNbN108PDI0KT4+PjB9KGMpKzg7cXUoMCl9LHR2PWZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0wOzE8PGw8PWM7KytsKTtyZXR1cm4gbC0xfSxWQT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NCsobDw8MyksaD01KygxNSZjW2xdKTtoPmEmJnF1KDMpO2Zvcih2YXIgZj0xPDxoLHY9ZixN'@;
put 'PS0xLEk9LTEsRz0tMSxyZT1mLHVlPW5ldyBkRXQoNTEyKyhmPDwyKSkseWU9bmV3IGhFdCh1ZSwwLDI1NiksRWU9bmV3IEJOKHVlLDAsMjU2KSxCZT1uZXcgQk4odWUsNTEyLGYpLEdlPTUxMisoZjw8MSksc3Q9bmV3IEF1KHVlLEdlLGYpLHB0PW5ldyBBdSh1ZSxHZStmKTtNPDI1NSYmdj4w'@;
put 'Oyl7dmFyIGR0PXR2KHYrMSkscXQ9ZD4+Myxtbj0oMTw8ZHQrMSktMSx3bj0oY1txdF18Y1txdCsxXTw8OHxjW3F0KzJdPDwxNik+Pig3JmQpJm1uLGhuPSgxPDxkdCktMSxNbj1tbi12LTEsTXI9d24maG47aWYoTXI8TW4/KGQrPWR0LHduPU1yKTooZCs9ZHQrMSx3bj5obiYmKHduLT1Nbikp'@;
put 'LHllWysrTV09LS13biwtMT09d24/KHYrPXduLHN0Wy0tcmVdPU0pOnYtPXduLCF3bilkb3t2YXIga3I9ZD4+MztJPShjW2tyXXxjW2tyKzFdPDw4KT4+KDcmZCkmMyxkKz0yLE0rPUl9d2hpbGUoMz09SSl9KE0+MjU1fHx2KSYmcXUoMCk7Zm9yKHZhciBxbj0wLGdyPShmPj4xKSsoZj4+Mykr'@;
put 'Myxxcj1mLTEsX2k9MDtfaTw9TTsrK19pKXt2YXIgUG49eWVbX2ldO2lmKFBuPDEpRWVbX2ldPS1QbjtlbHNlIGZvcihHPTA7RzxQbjsrK0cpe3N0W3FuXT1faTtkb3txbj1xbitnciZxcn13aGlsZShxbj49cmUpfX1mb3IocW4mJnF1KDApLEc9MDtHPGY7KytHKXt2YXIgVXI9RWVbc3RbR11d'@;
put 'KyssdHI9cHRbR109aC10dihVcik7QmVbR109KFVyPDx0ciktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczpzdCxuOnB0LHQ6QmV9XX0seUV0PVZBKG5ldyBBdShbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLGJF'@;
put 'dD1WQShuZXcgQXUoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMsNjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0sX0V0PVZBKG5ldyBBdShbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3MywyXSksMCw1'@;
put 'KVsxXSxiN2U9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgak4oYSksaD0wO2g8YTsrK2gpZFtoXT1sLGwrPTE8PGNbaF07cmV0dXJuIGR9LEJ0ZT1uZXcgQXUobmV3IGpOKFswLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDEzNDY3ODAyMCwyMDIwNTAwNTcsMjY5NDIy'@;
put 'MDkzXSkuYnVmZmVyLDAsMzYpLHdFdD1iN2UoQnRlLDApLGp0ZT1uZXcgQXUobmV3IGpOKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksQ0V0PWI3ZShqdGUsMyksQkE9ZnVuY3Rpb24oYyxs'@;
put 'LGEpe3ZhciBkPWMubGVuZ3RoLGg9bC5sZW5ndGgsZj1jW2QtMV0sdj0oMTw8YS5iKS0xLE09LWEuYjtmfHxxdSgwKTtmb3IodmFyIEk9MCxHPWEuYixyZT0oZDw8MyktOCt0dihmKS1HLHVlPS0xO3JlPk0mJnVlPGg7KXt2YXIgeWU9cmU+PjM7bFsrK3VlXT1hLnNbST0oSTw8R3woY1t5ZV18'@;
put 'Y1t5ZSsxXTw8OHxjW3llKzJdPDwxNik+Pig3JnJlKSkmdl0scmUtPUc9YS5uW0ldfShyZSE9TXx8dWUrMSE9aCkmJnF1KDApfSxTRXQ9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTYsZj1sLmxlbmd0aCszPj4yLHY9Zjw8MSxNPWYrdjtCQShjLnN1YmFycmF5KGQsZCs9Y1swXXxjWzFdPDw4KSxs'@;
put 'LnN1YmFycmF5KDAsZiksYSksQkEoYy5zdWJhcnJheShkLGQrPWNbMl18Y1szXTw8OCksbC5zdWJhcnJheShmLHYpLGEpLEJBKGMuc3ViYXJyYXkoZCxkKz1jWzRdfGNbNV08PDgpLGwuc3ViYXJyYXkodixNKSxhKSxCQShjLnN1YmFycmF5KGQpLGwuc3ViYXJyYXkoTSksYSl9LE1FdD1mdW5j'@;
put 'dGlvbihjLGwsYSl7dmFyIGQsaD1sLmIsZj1jW2hdLHY9Zj4+MSYzO2wubD0xJmY7dmFyIE09Zj4+M3xjW2grMV08PDV8Y1toKzJdPDwxMyxJPShoKz0zKStNO2lmKDE9PXYpcmV0dXJuIGg+PWMubGVuZ3RoP3ZvaWQgMDoobC5iPWgrMSxhPyhOQShhLGNbaF0sbC55LGwueSs9TSksYSk6TkEo'@;
put 'bmV3IEF1KE0pLGNbaF0pKTtpZighKEk+Yy5sZW5ndGgpKXtpZigwPT12KXJldHVybiBsLmI9SSxhPyhhLnNldChjLnN1YmFycmF5KGgsSSksbC55KSxsLnkrPU0sYSk6VnRlKGMsaCxJKTtpZigyPT12KXt2YXIgRz1jW2hdLHJlPTMmRyx1ZT1HPj4yJjMseWU9Rz4+NCxFZT0wLEJlPTA7cmU8'@;
put 'Mj8xJnVlP3llfD1jWysraF08PDR8KDImdWUmJmNbKytoXTw8MTIpOnllPUc+PjM6KEJlPXVlLHVlPDI/KHllfD0oNjMmY1srK2hdKTw8NCxFZT1jW2hdPj42fGNbKytoXTw8Mik6Mj09dWU/KHllfD1jWysraF08PDR8KDMmY1srK2hdKTw8MTIsRWU9Y1toXT4+MnxjWysraF08PDYpOih5ZXw9'@;
put 'Y1srK2hdPDw0fCg2MyZjWysraF0pPDwxMixFZT1jW2hdPj42fGNbKytoXTw8MnxjWysraF08PDEwKSksKytoO3ZhciBHZT1hP2Euc3ViYXJyYXkobC55LGwueStsLm0pOm5ldyBBdShsLm0pLHN0PUdlLmxlbmd0aC15ZTtpZigwPT1yZSlHZS5zZXQoYy5zdWJhcnJheShoLGgrPXllKSxzdCk7'@;
put 'ZWxzZSBpZigxPT1yZSlOQShHZSxjW2grK10sc3QpO2Vsc2V7dmFyIHB0PWwuaDtpZigyPT1yZSl7dmFyIGR0PWZ1bmN0aW9uKGMsbCl7dmFyIGE9MCxkPS0xLGg9bmV3IEF1KDI5MiksZj1jW2xdLHY9aC5zdWJhcnJheSgwLDI1NiksTT1oLnN1YmFycmF5KDI1NiwyNjgpLEk9bmV3IEJOKGgu'@;
put 'YnVmZmVyLDI2OCk7aWYoZjwxMjgpe3ZhciBHPVZBKGMsbCsxLDYpLHVlPUdbMV0seWU9R1swXTw8MyxFZT1jW2wrPWZdO0VlfHxxdSgwKTtmb3IodmFyIEJlPTAsR2U9MCxzdD11ZS5iLHB0PXN0LGR0PSgrK2w8PDMpLTgrdHYoRWUpOyEoKGR0LT1zdCk8eWUpOyl7dmFyIHF0PWR0Pj4zO2lm'@;
put 'KHZbKytkXT11ZS5zW0JlKz0oY1txdF18Y1txdCsxXTw8OCk+Pig3JmR0KSYoMTw8c3QpLTFdLChkdC09cHQpPHllKWJyZWFrO3ZbKytkXT11ZS5zW0dlKz0oY1txdD1kdD4+M118Y1txdCsxXTw8OCk+Pig3JmR0KSYoMTw8cHQpLTFdLHN0PXVlLm5bQmVdLEJlPXVlLnRbQmVdLHB0PXVlLm5b'@;
put 'R2VdLEdlPXVlLnRbR2VdfSsrZD4yNTUmJnF1KDApfWVsc2V7Zm9yKGQ9Zi0xMjc7YTxkO2ErPTIpe3ZhciBtbj1jWysrbF07dlthXT1tbj4+NCx2W2ErMV09MTUmbW59KytsfXZhciB3bj0wO2ZvcihhPTA7YTxkOysrYSkoaG49dlthXSk+MTEmJnF1KDApLHduKz1obiYmMTw8aG4tMTt2YXIg'@;
put 'TW49dHYod24pKzEsTXI9MTw8TW4sa3I9TXItd247Zm9yKGtyJmtyLTEmJnF1KDApLHZbZCsrXT10dihrcikrMSxhPTA7YTxkOysrYSl7dmFyIGhuOysrTVt2W2FdPShobj12W2FdKSYmTW4rMS1obl19dmFyIHFuPW5ldyBBdShNcjw8MSksZ3I9cW4uc3ViYXJyYXkoMCxNcikscXI9cW4uc3Vi'@;
put 'YXJyYXkoTXIpO2ZvcihJW01uXT0wLGE9TW47YT4wOy0tYSl7dmFyIF9pPUlbYV07TkEocXIsYSxfaSxJW2EtMV09X2krTVthXSooMTw8TW4tYSkpfWZvcihJWzBdIT1NciYmcXUoMCksYT0wO2E8ZDsrK2Epe3ZhciBQbj12W2FdO2lmKFBuKXt2YXIgVXI9SVtQbl07TkEoZ3IsYSxVcixJW1Bu'@;
put 'XT1VcisoMTw8TW4tUG4pKX19cmV0dXJuW2wse246cXIsYjpNbixzOmdyfV19KGMsaCk7RWUrPWgtKGg9ZHRbMF0pLGwuaD1wdD1kdFsxXX1lbHNlIHB0fHxxdSgwKTsoQmU/U0V0OkJBKShjLnN1YmFycmF5KGgsaCs9RWUpLEdlLnN1YmFycmF5KHN0KSxwdCl9dmFyIHF0PWNbaCsrXTtpZihx'@;
put 'dCl7MjU1PT1xdD9xdD0zMjUxMisoY1toKytdfGNbaCsrXTw8OCk6cXQ+MTI3JiYocXQ9cXQtMTI4PDw4fGNbaCsrXSk7dmFyIG1uPWNbaCsrXTszJm1uJiZxdSgwKTtmb3IodmFyIHduPVtiRXQsX0V0LHlFdF0saG49Mjtobj4tMTstLWhuKXt2YXIgTW49bW4+PjIrKGhuPDwxKSYzO2lmKDE9'@;
put 'PU1uKXt2YXIgTXI9bmV3IEF1KFswLDAsY1toKytdXSk7d25baG5dPXtzOk1yLnN1YmFycmF5KDIsMyksbjpNci5zdWJhcnJheSgwLDEpLHQ6bmV3IEJOKE1yLmJ1ZmZlciwwLDEpLGI6MH19ZWxzZSAyPT1Nbj8oaD0oZD1WQShjLGgsOS0oMSZobikpKVswXSx3bltobl09ZFsxXSk6Mz09TW4m'@;
put 'JihsLnR8fHF1KDApLHduW2huXT1sLnRbaG5dKX12YXIga3I9bC50PXduLHFuPWtyWzBdLGdyPWtyWzFdLHFyPWtyWzJdLF9pPWNbSS0xXTtfaXx8cXUoMCk7dmFyIFBuPShJPDwzKS04K3R2KF9pKS1xci5iLFVyPVBuPj4zLHRyPTAsQnI9KGNbVXJdfGNbVXIrMV08PDgpPj4oNyZQbikmKDE8'@;
put 'PHFyLmIpLTEsWXI9KGNbVXI9KFBuLT1nci5iKT4+M118Y1tVcisxXTw8OCk+Pig3JlBuKSYoMTw8Z3IuYiktMSx3aT0oY1tVcj0oUG4tPXFuLmIpPj4zXXxjW1VyKzFdPDw4KT4+KDcmUG4pJigxPDxxbi5iKS0xO2ZvcigrK3F0Oy0tcXQ7KXt2YXIgQmk9cXIuc1tCcl0saGE9cXIubltCcl0s'@;
put 'bWE9cW4uc1t3aV0sdnQ9cW4ublt3aV0seHQ9Z3Iuc1tZcl0sJHQ9Z3IubltZcl0sWW49MTw8eHQsJG49WW4rKChjW1VyPShQbi09eHQpPj4zXXxjW1VyKzFdPDw4fGNbVXIrMl08PDE2fGNbVXIrM108PDI0KT4+Pig3JlBuKSZZbi0xKTtVcj0oUG4tPWp0ZVttYV0pPj4zO3ZhciBhcj1DRXRb'@;
put 'bWFdKygoY1tVcl18Y1tVcisxXTw8OHxjW1VyKzJdPDwxNik+Pig3JlBuKSYoMTw8anRlW21hXSktMSk7VXI9KFBuLT1CdGVbQmldKT4+Mzt2YXIgR3I9d0V0W0JpXSsoKGNbVXJdfGNbVXIrMV08PDh8Y1tVcisyXTw8MTYpPj4oNyZQbikmKDE8PEJ0ZVtCaV0pLTEpO2lmKFVyPShQbi09aGEp'@;
put 'Pj4zLEJyPXFyLnRbQnJdKygoY1tVcl18Y1tVcisxXTw8OCk+Pig3JlBuKSYoMTw8aGEpLTEpLFVyPShQbi09dnQpPj4zLHdpPXFuLnRbd2ldKygoY1tVcl18Y1tVcisxXTw8OCk+Pig3JlBuKSYoMTw8dnQpLTEpLFVyPShQbi09JHQpPj4zLFlyPWdyLnRbWXJdKygoY1tVcl18Y1tVcisxXTw8'@;
put 'OCk+Pig3JlBuKSYoMTw8JHQpLTEpLCRuPjMpbC5vWzJdPWwub1sxXSxsLm9bMV09bC5vWzBdLGwub1swXT0kbi09MztlbHNle3ZhciBHdD0kbi0oMCE9R3IpO0d0Pygkbj0zPT1HdD9sLm9bMF0tMTpsLm9bR3RdLEd0PjEmJihsLm9bMl09bC5vWzFdKSxsLm9bMV09bC5vWzBdLGwub1swXT0k'@;
put 'bik6JG49bC5vWzBdfWZvcihobj0wO2huPEdyOysraG4pR2VbdHIraG5dPUdlW3N0K2huXTtzdCs9R3I7dmFyIGJuPSh0cis9R3IpLSRuO2lmKGJuPDApe3ZhciB4bj0tYm4sSW49bC5lK2JuO2Zvcih4bj5hciYmKHhuPWFyKSxobj0wO2huPHhuOysraG4pR2VbdHIraG5dPWwud1tJbitobl07'@;
put 'dHIrPXhuLGFyLT14bixibj0wfWZvcihobj0wO2huPGFyOysraG4pR2VbdHIraG5dPUdlW2JuK2huXTt0cis9YXJ9aWYodHIhPXN0KWZvcig7c3Q8R2UubGVuZ3RoOylHZVt0cisrXT1HZVtzdCsrXTtlbHNlIHRyPUdlLmxlbmd0aDthP2wueSs9dHI6R2U9VnRlKEdlLDAsdHIpfWVsc2UgaWYo'@;
put 'YSl7aWYobC55Kz15ZSxzdClmb3IoaG49MDtobjx5ZTsrK2huKUdlW2huXT1HZVtzdCtobl19ZWxzZSBzdCYmKEdlPVZ0ZShHZSxzdCkpO3JldHVybiBsLmI9SSxHZX1xdSgyKX19O2Z1bmN0aW9uIHp0ZSgpe3JldHVybiB6dGU9UShmdW5jdGlvbiooYz17fSl7dmFyIEcscmUsRWUsYT1jLHVl'@;
put 'PWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkseWU9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpLEJlPSExO2Z1bmN0aW9uIHN0KFVlLGx0KXtVZXx8bWEobHQpfXZhciBkdCxxdCxtbix3bixobixNbixrcixxbixxcixwdD1VZT0+VWUuc3RhcnRzV2l0aCgiZmlsZTovLyIpLF9pPSExO2Z1'@;
put 'bmN0aW9uIFBuKCl7dmFyIFVlPW1uLmJ1ZmZlcjt3bj1uZXcgSW50OEFycmF5KFVlKSxNbj1uZXcgSW50MTZBcnJheShVZSksaG49bmV3IFVpbnQ4QXJyYXkoVWUpLG5ldyBVaW50MTZBcnJheShVZSksa3I9bmV3IEludDMyQXJyYXkoVWUpLHFuPW5ldyBVaW50MzJBcnJheShVZSksbmV3IEZs'@;
put 'b2F0MzJBcnJheShVZSkscXI9bmV3IEZsb2F0NjRBcnJheShVZSl9dmFyIHZ0LFlyPTAsd2k9bnVsbDtmdW5jdGlvbiBCaShVZSl7WXIrK31mdW5jdGlvbiBoYShVZSl7aWYoMD09LS1ZciYmd2kpe3ZhciBsdD13aTt3aT1udWxsLGx0KCl9fWZ1bmN0aW9uIG1hKFVlKXt5ZShVZT0iQWJvcnRl'@;
put 'ZCgiK1VlKyIpIiksQmU9ITAsVWUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgbHQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihVZSk7dGhyb3cgcXQ/LihsdCksbHR9ZnVuY3Rpb24gJG4oKXtyZXR1cm4oJG49UShmdW5jdGlvbiooVWUpe2lm'@;
put 'KCFFZSl0cnl7dmFyIGx0PXlpZWxkIEcoVWUpO3JldHVybiBuZXcgVWludDhBcnJheShsdCl9Y2F0Y2h7fXJldHVybiBmdW5jdGlvbiAkdChVZSl7aWYoVWU9PXZ0JiZFZSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoRWUpO2lmKHJlKXJldHVybiByZShVZSk7dGhyb3ciYm90aCBhc3luYyBhbmQg'@;
put 'c3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifShVZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEdyKCl7cmV0dXJuIEdyPVEoZnVuY3Rpb24qKFVlLGx0KXt0cnl7dmFyIEh0PXlpZWxkIGZ1bmN0aW9uIFluKFVlKXtyZXR1cm4gJG4uYXBwbHkodGhpcyxhcmd1'@;
put 'bWVudHMpfShVZSk7cmV0dXJuIHlpZWxkIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEh0LGx0KX1jYXRjaChrbil7eWUoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7a259YCksbWEoa24pfX0pLEdyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBibigp'@;
put 'e3JldHVybiBibj1RKGZ1bmN0aW9uKihVZSxsdCxIdCl7aWYoIVVlJiYiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcmJiFwdChsdCkpdHJ5e3ZhciBYdD1mZXRjaChsdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pO3JldHVybiB5aWVsZCBX'@;
put 'ZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhYdCxIdCl9Y2F0Y2gobHIpe3llKGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtscn1gKSx5ZSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKX1yZXR1cm4gZnVuY3Rpb24gYXIoVWUsbHQp'@;
put 'e3JldHVybiBHci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGx0LEh0KX0pLGJuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBYbigpe3JldHVybiBYbj1RKGZ1bmN0aW9uKigpe0JpKCk7dmFyIEh0PWZ1bmN0aW9uIHhuKCl7cmV0dXJue2E6cFJ0fX0oKTt2dD8/PSIiO3ZhciBYdD15'@;
put 'aWVsZCBmdW5jdGlvbiBHdChVZSxsdCxIdCl7cmV0dXJuIGJuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oRWUsdnQsSHQpO3JldHVybiBmdW5jdGlvbiBsdChscil7cmV0dXJuIGZ1bmN0aW9uIFVlKGxyLElyKXtyZXR1cm4gbW49KFlBPWxyLmV4cG9ydHMpLkEsUG4oKSxmdW5jdGlvbiBmUnQo'@;
put 'VWUpe2EuX3dlYmlkbF9mcmVlPVVlLkMsYS5fZnJlZT1VZS5ELGEuX3dlYmlkbF9tYWxsb2M9VWUuRSxhLl9tYWxsb2M9VWUuRixhLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPXo3ZT1VZS5HLGEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPVU3'@;
put 'ZT1VZS5ILGEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9WjdlPVVlLkksYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPVc3ZT1VZS5KLGEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9WTdlPVVlLkssYS5fZW1zY3JpcHRl'@;
put 'bl9iaW5kX0dyYXBodml6X2xheW91dF8zPUc3ZT1VZS5MLGEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9JDdlPVVlLk0sYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz1LN2U9VWUuTixhLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9'@;
put 'WDdlPVVlLk8sYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9sYXlvdXRfcmVzdWx0XzA9cTdlPVVlLlAsYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9SjdlPVVlLlEsYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX291'@;
put 'dEZpbGVfMD1RN2U9VWUuUixhLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPWU5ZT1VZS5TLGEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19udW1fcmV2XzA9dDllPVVlLlQsYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3Nl'@;
put 'dF9hY3ljbGljX251bV9yZXZfMT1uOWU9VWUuVSxhLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfb3V0XzA9cjllPVVlLlYsYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8xPWk5ZT1VZS5XLGEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRf'@;
put 'dHJlZF9lcnJfMD1hOWU9VWUuWCxhLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9czllPVVlLlksYS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X19fZGVzdHJveV9fXzA9bzllPVVlLlosbDllPVVlLl99KFlBKSxoYSgpLFlBfShsci5pbnN0YW5jZSl9KFh0KX0p'@;
put 'LFhuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgTm4sdnI7Y2xhc3MgV257bmFtZT0iRXhpdFN0YXR1cyI7Y29uc3RydWN0b3IobHQpe3RoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2x0fSlgLHRoaXMuc3RhdHVzPWx0fX1jbGFzcyBEcntjb25zdHJ1Y3Rv'@;
put 'cihsdCl7dGhpcy5leGNQdHI9bHQsdGhpcy5wdHI9bHQtMjR9c2V0X3R5cGUobHQpe3FuW3RoaXMucHRyKzQ+PjJdPWx0fWdldF90eXBlKCl7cmV0dXJuIHFuW3RoaXMucHRyKzQ+PjJdfXNldF9kZXN0cnVjdG9yKGx0KXtxblt0aGlzLnB0cis4Pj4yXT1sdH1nZXRfZGVzdHJ1Y3Rvcigpe3Jl'@;
put 'dHVybiBxblt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KGx0KXt3blt0aGlzLnB0cisxMl09bHQ9bHQ/MTowfWdldF9jYXVnaHQoKXtyZXR1cm4gMCE9d25bdGhpcy5wdHIrMTJdfXNldF9yZXRocm93bihsdCl7d25bdGhpcy5wdHIrMTNdPWx0PWx0PzE6MH1nZXRfcmV0aHJvd24oKXtyZXR1'@;
put 'cm4gMCE9d25bdGhpcy5wdHIrMTNdfWluaXQobHQsSHQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGx0KSx0aGlzLnNldF9kZXN0cnVjdG9yKEh0KX1zZXRfYWRqdXN0ZWRfcHRyKGx0KXtxblt0aGlzLnB0cisxNj4+Ml09bHR9Z2V0X2FkanVzdGVkX3B0cigpe3Jl'@;
put 'dHVybiBxblt0aGlzLnB0cisxNj4+Ml19fXZhciBaaT17aXNBYnM6VWU9PiIvIj09PVVlLmNoYXJBdCgwKSxzcGxpdFBhdGg6VWU9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKFVlKS5zbGljZSgxKSxub3JtYWxp'@;
put 'emVBcnJheTooVWUsbHQpPT57Zm9yKHZhciBIdD0wLFh0PVVlLmxlbmd0aC0xO1h0Pj0wO1h0LS0pe3ZhciBrbj1VZVtYdF07Ii4iPT09a24/VWUuc3BsaWNlKFh0LDEpOiIuLiI9PT1rbj8oVWUuc3BsaWNlKFh0LDEpLEh0KyspOkh0JiYoVWUuc3BsaWNlKFh0LDEpLEh0LS0pfWlmKGx0KWZv'@;
put 'cig7SHQ7SHQtLSlVZS51bnNoaWZ0KCIuLiIpO3JldHVybiBVZX0sbm9ybWFsaXplOlVlPT57dmFyIGx0PVppLmlzQWJzKFVlKSxIdD0iLyI9PT1VZS5zbGljZSgtMSk7cmV0dXJuIShVZT1aaS5ub3JtYWxpemVBcnJheShVZS5zcGxpdCgiLyIpLmZpbHRlcihYdD0+ISFYdCksIWx0KS5qb2lu'@;
put 'KCIvIikpJiYhbHQmJihVZT0iLiIpLFVlJiZIdCYmKFVlKz0iLyIpLChsdD8iLyI6IiIpK1VlfSxkaXJuYW1lOlVlPT57dmFyIGx0PVppLnNwbGl0UGF0aChVZSksSHQ9bHRbMF0sWHQ9bHRbMV07cmV0dXJuIEh0fHxYdD8oWHQmJihYdD1YdC5zbGljZSgwLC0xKSksSHQrWHQpOiIuIn0sYmFz'@;
put 'ZW5hbWU6VWU9PlVlJiZVZS5tYXRjaCgvKFteXC9dK3xcLylcLyokLylbMV0sam9pbjooLi4uVWUpPT5aaS5ub3JtYWxpemUoVWUuam9pbigiLyIpKSxqb2luMjooVWUsbHQpPT5aaS5ub3JtYWxpemUoVWUrIi8iK2x0KX0sdW89VWU9PnsodW89VWU9PmNyeXB0by5nZXRSYW5kb21WYWx1ZXMo'@;
put 'VWUpKShVZSl9LFdzPXtyZXNvbHZlOiguLi5VZSk9Pntmb3IodmFyIGx0PSIiLEh0PSExLFh0PVVlLmxlbmd0aC0xO1h0Pj0tMSYmIUh0O1h0LS0pe3ZhciBrbj1YdD49MD9VZVtYdF06WXQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBrbil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVu'@;
put 'dHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCFrbilyZXR1cm4iIjtsdD1rbisiLyIrbHQsSHQ9WmkuaXNBYnMoa24pfXJldHVybihIdD8iLyI6IiIpKyhsdD1aaS5ub3JtYWxpemVBcnJheShsdC5zcGxpdCgiLyIpLmZpbHRlcihscj0+ISFsciksIUh0KS5qb2luKCIv'@;
put 'IikpfHwiLiJ9LHJlbGF0aXZlOihVZSxsdCk9PntmdW5jdGlvbiBIdChScyl7Zm9yKHZhciBLbz0wO0tvPFJzLmxlbmd0aCYmIiI9PT1Sc1tLb107S28rKyk7Zm9yKHZhciBEbD1Scy5sZW5ndGgtMTtEbD49MCYmIiI9PT1Sc1tEbF07RGwtLSk7cmV0dXJuIEtvPkRsP1tdOlJzLnNsaWNlKEtv'@;
put 'LERsLUtvKzEpfVVlPVdzLnJlc29sdmUoVWUpLnNsaWNlKDEpLGx0PVdzLnJlc29sdmUobHQpLnNsaWNlKDEpO2Zvcih2YXIgWHQ9SHQoVWUuc3BsaXQoIi8iKSksa249SHQobHQuc3BsaXQoIi8iKSksbHI9TWF0aC5taW4oWHQubGVuZ3RoLGtuLmxlbmd0aCksSXI9bHIsJHI9MDskcjxscjsk'@;
put 'cisrKWlmKFh0WyRyXSE9PWtuWyRyXSl7SXI9JHI7YnJlYWt9dmFyIHZhPVtdO2Zvcigkcj1JcjskcjxYdC5sZW5ndGg7JHIrKyl2YS5wdXNoKCIuLiIpO3JldHVybih2YT12YS5jb25jYXQoa24uc2xpY2UoSXIpKSkuam9pbigiLyIpfX0sU3M9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcg'@;
put 'VGV4dERlY29kZXI6dm9pZCAwLGZvPShVZSxsdD0wLEh0LFh0KT0+e3ZhciBrbj0oKFVlLGx0LEh0LFh0KT0+e3ZhciBrbj1sdCtIdDtpZihYdClyZXR1cm4ga247Zm9yKDtVZVtsdF0mJiEobHQ+PWtuKTspKytsdDtyZXR1cm4gbHR9KShVZSxsdCxIdCxYdCk7aWYoa24tbHQ+MTYmJlVlLmJ1'@;
put 'ZmZlciYmU3MpcmV0dXJuIFNzLmRlY29kZShVZS5zdWJhcnJheShsdCxrbikpO2Zvcih2YXIgbHI9IiI7bHQ8a247KXt2YXIgSXI9VWVbbHQrK107aWYoMTI4JklyKXt2YXIgJHI9NjMmVWVbbHQrK107aWYoMTkyIT0oMjI0JklyKSl7dmFyIHZhPTYzJlVlW2x0KytdO2lmKChJcj0yMjQ9PSgy'@;
put 'NDAmSXIpPygxNSZJcik8PDEyfCRyPDw2fHZhOig3JklyKTw8MTh8JHI8PDEyfHZhPDw2fDYzJlVlW2x0KytdKTw2NTUzNilscis9U3RyaW5nLmZyb21DaGFyQ29kZShJcik7ZWxzZXt2YXIgUnM9SXItNjU1MzY7bHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8UnM+PjEwLDU2MzIwfDEw'@;
put 'MjMmUnMpfX1lbHNlIGxyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZJcik8PDZ8JHIpfWVsc2UgbHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoSXIpfXJldHVybiBscn0seDA9W10sWWg9VWU9Pntmb3IodmFyIGx0PTAsSHQ9MDtIdDxVZS5sZW5ndGg7KytIdCl7dmFyIFh0PVVlLmNoYXJDb2Rl'@;
put 'QXQoSHQpO1h0PD0xMjc/bHQrKzpYdDw9MjA0Nz9sdCs9MjpYdD49NTUyOTYmJlh0PD01NzM0Mz8obHQrPTQsKytIdCk6bHQrPTN9cmV0dXJuIGx0fSxRZD0oVWUsbHQsSHQsWHQpPT57aWYoIShYdD4wKSlyZXR1cm4gMDtmb3IodmFyIGtuPUh0LGxyPUh0K1h0LTEsSXI9MDtJcjxVZS5sZW5n'@;
put 'dGg7KytJcil7dmFyICRyPVVlLmNvZGVQb2ludEF0KElyKTtpZigkcjw9MTI3KXtpZihIdD49bHIpYnJlYWs7bHRbSHQrK109JHJ9ZWxzZSBpZigkcjw9MjA0Nyl7aWYoSHQrMT49bHIpYnJlYWs7bHRbSHQrK109MTkyfCRyPj42LGx0W0h0KytdPTEyOHw2MyYkcn1lbHNlIGlmKCRyPD02NTUz'@;
put 'NSl7aWYoSHQrMj49bHIpYnJlYWs7bHRbSHQrK109MjI0fCRyPj4xMixsdFtIdCsrXT0xMjh8JHI+PjYmNjMsbHRbSHQrK109MTI4fDYzJiRyfWVsc2V7aWYoSHQrMz49bHIpYnJlYWs7bHRbSHQrK109MjQwfCRyPj4xOCxsdFtIdCsrXT0xMjh8JHI+PjEyJjYzLGx0W0h0KytdPTEyOHwkcj4+'@;
put 'NiY2MyxsdFtIdCsrXT0xMjh8NjMmJHIsSXIrK319cmV0dXJuIGx0W0h0XT0wLEh0LWtufSxEYz0oVWUsbHQsSHQpPT57dmFyIFh0PUh0PjA/SHQ6WWgoVWUpKzEsa249bmV3IEFycmF5KFh0KSxscj1RZChVZSxrbiwwLGtuLmxlbmd0aCk7cmV0dXJuIGx0JiYoa24ubGVuZ3RoPWxyKSxrbn0s'@;
put 'JG89e3R0eXM6W10saW5pdCgpe30sc2h1dGRvd24oKXt9LHJlZ2lzdGVyKFVlLGx0KXskby50dHlzW1VlXT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczpsdH0sWXQucmVnaXN0ZXJEZXZpY2UoVWUsJG8uc3RyZWFtX29wcyl9LHN0cmVhbV9vcHM6e29wZW4oVWUpe3ZhciBsdD0kby50dHlzW1Vl'@;
put 'Lm5vZGUucmRldl07aWYoIWx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtVZS50dHk9bHQsVWUuc2Vla2FibGU9ITF9LGNsb3NlKFVlKXtVZS50dHkub3BzLmZzeW5jKFVlLnR0eSl9LGZzeW5jKFVlKXtVZS50dHkub3BzLmZzeW5jKFVlLnR0eSl9LHJlYWQoVWUsbHQsSHQsWHQsa24p'@;
put 'e2lmKCFVZS50dHl8fCFVZS50dHkub3BzLmdldF9jaGFyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYwKTtmb3IodmFyIGxyPTAsSXI9MDtJcjxYdDtJcisrKXt2YXIgJHI7dHJ5eyRyPVVlLnR0eS5vcHMuZ2V0X2NoYXIoVWUudHR5KX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigy'@;
put 'OSl9aWYodm9pZCAwPT09JHImJjA9PT1scil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2KTtpZihudWxsPT0kcilicmVhaztscisrLGx0W0h0K0lyXT0kcn1yZXR1cm4gbHImJihVZS5ub2RlLmF0aW1lPURhdGUubm93KCkpLGxyfSx3cml0ZShVZSxsdCxIdCxYdCxrbil7aWYoIVVlLnR0eXx8'@;
put 'IVVlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIGxyPTA7bHI8WHQ7bHIrKylVZS50dHkub3BzLnB1dF9jaGFyKFVlLnR0eSxsdFtIdCtscl0pfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gWHQmJihVZS5u'@;
put 'b2RlLm10aW1lPVVlLm5vZGUuY3RpbWU9RGF0ZS5ub3coKSksbHJ9fSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyOlVlPT54MC5sZW5ndGg/eDAuc2hpZnQoKTpudWxsLHB1dF9jaGFyKFVlLGx0KXtudWxsPT09bHR8fDEwPT09bHQ/KHVlKGZvKFVlLm91dHB1dCkpLFVlLm91dHB1dD1bXSk6'@;
put 'MCE9bHQmJlVlLm91dHB1dC5wdXNoKGx0KX0sZnN5bmMoVWUpe1VlLm91dHB1dD8ubGVuZ3RoPjAmJih1ZShmbyhVZS5vdXRwdXQpKSxVZS5vdXRwdXQ9W10pfSxpb2N0bF90Y2dldHM6VWU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2Nj'@;
put 'OlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KFVlLGx0LEh0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OlVlPT5bMjQsODBdfSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihV'@;
put 'ZSxsdCl7bnVsbD09PWx0fHwxMD09PWx0Pyh5ZShmbyhVZS5vdXRwdXQpKSxVZS5vdXRwdXQ9W10pOjAhPWx0JiZVZS5vdXRwdXQucHVzaChsdCl9LGZzeW5jKFVlKXtVZS5vdXRwdXQ/Lmxlbmd0aD4wJiYoeWUoZm8oVWUub3V0cHV0KSksVWUub3V0cHV0PVtdKX19fSxrbz0oVWUsbHQpPT5N'@;
put 'YXRoLmNlaWwoVWUvbHQpKmx0LG9kPVVlPT57VWU9a28oVWUsNjU1MzYpO3ZhciBsdD1sOWUoNjU1MzYsVWUpO3JldHVybiBsdCYmKChVZSxsdCk9Pntobi5maWxsKDAsVWUsVWUrbHQpfSkobHQsVWUpLGx0fSx0cz17b3BzX3RhYmxlOm51bGwsbW91bnQ6VWU9PnRzLmNyZWF0ZU5vZGUobnVs'@;
put 'bCwiLyIsMTY4OTUsMCksY3JlYXRlTm9kZShVZSxsdCxIdCxYdCl7aWYoWXQuaXNCbGtkZXYoSHQpfHxZdC5pc0ZJRk8oSHQpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTt0cy5vcHNfdGFibGV8fD17ZGlyOntub2RlOntnZXRhdHRyOnRzLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp0'@;
put 'cy5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDp0cy5ub2RlX29wcy5sb29rdXAsbWtub2Q6dHMubm9kZV9vcHMubWtub2QscmVuYW1lOnRzLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6dHMubm9kZV9vcHMudW5saW5rLHJtZGlyOnRzLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6dHMubm9kZV9vcHMu'@;
put 'cmVhZGRpcixzeW1saW5rOnRzLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOnRzLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjp0cy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6dHMubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6dHMuc3Ry'@;
put 'ZWFtX29wcy5sbHNlZWsscmVhZDp0cy5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6dHMuc3RyZWFtX29wcy53cml0ZSxtbWFwOnRzLnN0cmVhbV9vcHMubW1hcCxtc3luYzp0cy5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjp0cy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6'@;
put 'dHMubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazp0cy5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6dHMubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnRzLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpZdC5jaHJkZXZfc3RyZWFtX29wc319O3Zh'@;
put 'ciBrbj1ZdC5jcmVhdGVOb2RlKFVlLGx0LEh0LFh0KTtyZXR1cm4gWXQuaXNEaXIoa24ubW9kZSk/KGtuLm5vZGVfb3BzPXRzLm9wc190YWJsZS5kaXIubm9kZSxrbi5zdHJlYW1fb3BzPXRzLm9wc190YWJsZS5kaXIuc3RyZWFtLGtuLmNvbnRlbnRzPXt9KTpZdC5pc0ZpbGUoa24ubW9kZSk/'@;
put 'KGtuLm5vZGVfb3BzPXRzLm9wc190YWJsZS5maWxlLm5vZGUsa24uc3RyZWFtX29wcz10cy5vcHNfdGFibGUuZmlsZS5zdHJlYW0sa24udXNlZEJ5dGVzPTAsa24uY29udGVudHM9bnVsbCk6WXQuaXNMaW5rKGtuLm1vZGUpPyhrbi5ub2RlX29wcz10cy5vcHNfdGFibGUubGluay5ub2RlLGtu'@;
put 'LnN0cmVhbV9vcHM9dHMub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpZdC5pc0NocmRldihrbi5tb2RlKSYmKGtuLm5vZGVfb3BzPXRzLm9wc190YWJsZS5jaHJkZXYubm9kZSxrbi5zdHJlYW1fb3BzPXRzLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxrbi5hdGltZT1rbi5tdGltZT1rbi5jdGlt'@;
put 'ZT1EYXRlLm5vdygpLFVlJiYoVWUuY29udGVudHNbbHRdPWtuLFVlLmF0aW1lPVVlLm10aW1lPVVlLmN0aW1lPWtuLmF0aW1lKSxrbn0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6VWU9PlVlLmNvbnRlbnRzP1VlLmNvbnRlbnRzLnN1YmFycmF5P1VlLmNvbnRlbnRzLnN1YmFycmF5KDAsVWUu'@;
put 'dXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShVZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCksZXhwYW5kRmlsZVN0b3JhZ2UoVWUsbHQpe3ZhciBIdD1VZS5jb250ZW50cz9VZS5jb250ZW50cy5sZW5ndGg6MDtpZighKEh0Pj1sdCkpe2x0PU1hdGgubWF4KGx0LEh0KihIdDwxMDQ4NTc2'@;
put 'PzI6MS4xMjUpPj4+MCksMCE9SHQmJihsdD1NYXRoLm1heChsdCwyNTYpKTt2YXIga249VWUuY29udGVudHM7VWUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkobHQpLFVlLnVzZWRCeXRlcz4wJiZVZS5jb250ZW50cy5zZXQoa24uc3ViYXJyYXkoMCxVZS51c2VkQnl0ZXMpLDApfX0scmVzaXpl'@;
put 'RmlsZVN0b3JhZ2UoVWUsbHQpe2lmKFVlLnVzZWRCeXRlcyE9bHQpaWYoMD09bHQpVWUuY29udGVudHM9bnVsbCxVZS51c2VkQnl0ZXM9MDtlbHNle3ZhciBIdD1VZS5jb250ZW50cztVZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksSHQmJlVlLmNvbnRlbnRzLnNldChIdC5zdWJhcnJh'@;
put 'eSgwLE1hdGgubWluKGx0LFVlLnVzZWRCeXRlcykpKSxVZS51c2VkQnl0ZXM9bHR9fSxub2RlX29wczp7Z2V0YXR0cihVZSl7dmFyIGx0PXt9O3JldHVybiBsdC5kZXY9WXQuaXNDaHJkZXYoVWUubW9kZSk/VWUuaWQ6MSxsdC5pbm89VWUuaWQsbHQubW9kZT1VZS5tb2RlLGx0Lm5saW5rPTEs'@;
put 'bHQudWlkPTAsbHQuZ2lkPTAsbHQucmRldj1VZS5yZGV2LGx0LnNpemU9WXQuaXNEaXIoVWUubW9kZSk/NDA5NjpZdC5pc0ZpbGUoVWUubW9kZSk/VWUudXNlZEJ5dGVzOll0LmlzTGluayhVZS5tb2RlKT9VZS5saW5rLmxlbmd0aDowLGx0LmF0aW1lPW5ldyBEYXRlKFVlLmF0aW1lKSxsdC5t'@;
put 'dGltZT1uZXcgRGF0ZShVZS5tdGltZSksbHQuY3RpbWU9bmV3IERhdGUoVWUuY3RpbWUpLGx0LmJsa3NpemU9NDA5NixsdC5ibG9ja3M9TWF0aC5jZWlsKGx0LnNpemUvbHQuYmxrc2l6ZSksbHR9LHNldGF0dHIoVWUsbHQpe2ZvcihsZXQgSHQgb2ZbIm1vZGUiLCJhdGltZSIsIm10aW1lIiwi'@;
put 'Y3RpbWUiXSludWxsIT1sdFtIdF0mJihVZVtIdF09bHRbSHRdKTt2b2lkIDAhPT1sdC5zaXplJiZ0cy5yZXNpemVGaWxlU3RvcmFnZShVZSxsdC5zaXplKX0sbG9va3VwKFVlLGx0KXt0aHJvdyB0cy5kb2VzTm90RXhpc3RFcnJvcnx8KHRzLmRvZXNOb3RFeGlzdEVycm9yPW5ldyBZdC5FcnJu'@;
put 'b0Vycm9yKDQ0KSx0cy5kb2VzTm90RXhpc3RFcnJvci5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiIpLHRzLmRvZXNOb3RFeGlzdEVycm9yfSxta25vZDooVWUsbHQsSHQsWHQpPT50cy5jcmVhdGVOb2RlKFVlLGx0LEh0LFh0KSxyZW5hbWUoVWUsbHQsSHQpe3ZhciBYdDt0cnl7'@;
put 'WHQ9WXQubG9va3VwTm9kZShsdCxIdCl9Y2F0Y2h7fWlmKFh0KXtpZihZdC5pc0RpcihVZS5tb2RlKSlmb3IodmFyIGtuIGluIFh0LmNvbnRlbnRzKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU1KTtZdC5oYXNoUmVtb3ZlTm9kZShYdCl9ZGVsZXRlIFVlLnBhcmVudC5jb250ZW50c1tVZS5u'@;
put 'YW1lXSxsdC5jb250ZW50c1tIdF09VWUsVWUubmFtZT1IdCxsdC5jdGltZT1sdC5tdGltZT1VZS5wYXJlbnQuY3RpbWU9VWUucGFyZW50Lm10aW1lPURhdGUubm93KCl9LHVubGluayhVZSxsdCl7ZGVsZXRlIFVlLmNvbnRlbnRzW2x0XSxVZS5jdGltZT1VZS5tdGltZT1EYXRlLm5vdygpfSxy'@;
put 'bWRpcihVZSxsdCl7dmFyIEh0PVl0Lmxvb2t1cE5vZGUoVWUsbHQpO2Zvcih2YXIgWHQgaW4gSHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO2RlbGV0ZSBVZS5jb250ZW50c1tsdF0sVWUuY3RpbWU9VWUubXRpbWU9RGF0ZS5ub3coKX0scmVhZGRpcjpVZT0+WyIuIiwi'@;
put 'Li4iLC4uLk9iamVjdC5rZXlzKFVlLmNvbnRlbnRzKV0sc3ltbGluayhVZSxsdCxIdCl7dmFyIFh0PXRzLmNyZWF0ZU5vZGUoVWUsbHQsNDE0NzEsMCk7cmV0dXJuIFh0Lmxpbms9SHQsWHR9LHJlYWRsaW5rKFVlKXtpZighWXQuaXNMaW5rKFVlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vy'@;
put 'cm9yKDI4KTtyZXR1cm4gVWUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoVWUsbHQsSHQsWHQsa24pe3ZhciBscj1VZS5ub2RlLmNvbnRlbnRzO2lmKGtuPj1VZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgSXI9TWF0aC5taW4oVWUubm9kZS51c2VkQnl0ZXMta24sWHQpO2lmKElyPjgm'@;
put 'JmxyLnN1YmFycmF5KWx0LnNldChsci5zdWJhcnJheShrbixrbitJciksSHQpO2Vsc2UgZm9yKHZhciAkcj0wOyRyPElyOyRyKyspbHRbSHQrJHJdPWxyW2tuKyRyXTtyZXR1cm4gSXJ9LHdyaXRlKFVlLGx0LEh0LFh0LGtuLGxyKXtpZihsdC5idWZmZXI9PT13bi5idWZmZXImJihscj0hMSks'@;
put 'IVh0KXJldHVybiAwO3ZhciBJcj1VZS5ub2RlO2lmKElyLm10aW1lPUlyLmN0aW1lPURhdGUubm93KCksbHQuc3ViYXJyYXkmJighSXIuY29udGVudHN8fElyLmNvbnRlbnRzLnN1YmFycmF5KSl7aWYobHIpcmV0dXJuIElyLmNvbnRlbnRzPWx0LnN1YmFycmF5KEh0LEh0K1h0KSxJci51c2Vk'@;
put 'Qnl0ZXM9WHQsWHQ7aWYoMD09PUlyLnVzZWRCeXRlcyYmMD09PWtuKXJldHVybiBJci5jb250ZW50cz1sdC5zbGljZShIdCxIdCtYdCksSXIudXNlZEJ5dGVzPVh0LFh0O2lmKGtuK1h0PD1Jci51c2VkQnl0ZXMpcmV0dXJuIElyLmNvbnRlbnRzLnNldChsdC5zdWJhcnJheShIdCxIdCtYdCks'@;
put 'a24pLFh0fWlmKHRzLmV4cGFuZEZpbGVTdG9yYWdlKElyLGtuK1h0KSxJci5jb250ZW50cy5zdWJhcnJheSYmbHQuc3ViYXJyYXkpSXIuY29udGVudHMuc2V0KGx0LnN1YmFycmF5KEh0LEh0K1h0KSxrbik7ZWxzZSBmb3IodmFyICRyPTA7JHI8WHQ7JHIrKylJci5jb250ZW50c1trbiskcl09'@;
put 'bHRbSHQrJHJdO3JldHVybiBJci51c2VkQnl0ZXM9TWF0aC5tYXgoSXIudXNlZEJ5dGVzLGtuK1h0KSxYdH0sbGxzZWVrKFVlLGx0LEh0KXt2YXIgWHQ9bHQ7aWYoMT09PUh0P1h0Kz1VZS5wb3NpdGlvbjoyPT09SHQmJll0LmlzRmlsZShVZS5ub2RlLm1vZGUpJiYoWHQrPVVlLm5vZGUudXNl'@;
put 'ZEJ5dGVzKSxYdDwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWHR9LG1tYXAoVWUsbHQsSHQsWHQsa24pe2lmKCFZdC5pc0ZpbGUoVWUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7dmFyIGxyLElyLCRyPVVlLm5vZGUuY29udGVudHM7aWYoMiZr'@;
put 'bnx8ISRyfHwkci5idWZmZXIhPT13bi5idWZmZXIpe2lmKElyPSEwLCEobHI9b2QobHQpKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0OCk7JHImJigoSHQ+MHx8SHQrbHQ8JHIubGVuZ3RoKSYmKCRyPSRyLnN1YmFycmF5PyRyLnN1YmFycmF5KEh0LEh0K2x0KTpBcnJheS5wcm90b3R5cGUu'@;
put 'c2xpY2UuY2FsbCgkcixIdCxIdCtsdCkpLHduLnNldCgkcixscikpfWVsc2UgSXI9ITEsbHI9JHIuYnl0ZU9mZnNldDtyZXR1cm57cHRyOmxyLGFsbG9jYXRlZDpJcn19LG1zeW5jOihVZSxsdCxIdCxYdCxrbik9Pih0cy5zdHJlYW1fb3BzLndyaXRlKFVlLGx0LDAsWHQsSHQsITEpLDApfX0s'@;
put 'cWc9ZnVuY3Rpb24oKXt2YXIgVWU9UShmdW5jdGlvbioobHQpe3ZhciBIdD15aWVsZCBHKGx0KTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoSHQpfSk7cmV0dXJuIGZ1bmN0aW9uKEh0KXtyZXR1cm4gVWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxKdGU9W10sekE9KFVlLGx0KT0+e3ZhciBI'@;
put 'dD0wO3JldHVybiBVZSYmKEh0fD0zNjUpLGx0JiYoSHR8PTE0NiksSHR9LFl0PXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6'@;
put 'ITAsZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLEVycm5vRXJyb3I6Y2xhc3N7bmFtZT0iRXJybm9FcnJvciI7Y29uc3RydWN0b3IoVWUpe3RoaXMuZXJybm89VWV9fSxGU1N0cmVhbTpjbGFzc3tzaGFyZWQ9e307Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9i'@;
put 'amVjdChVZSl7dGhpcy5ub2RlPVVlfWdldCBpc1JlYWQoKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhpcy5mbGFncyl9Z2V0IGlzV3JpdGUoKXtyZXR1cm4hISgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc0FwcGVuZCgpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9Z2V0IGZsYWdzKCl7cmV0dXJu'@;
put 'IHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhVZSl7dGhpcy5zaGFyZWQuZmxhZ3M9VWV9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufXNldCBwb3NpdGlvbihVZSl7dGhpcy5zaGFyZWQucG9zaXRpb249VWV9fSxGU05vZGU6Y2xhc3N7bm9kZV9vcHM9e307'@;
put 'c3RyZWFtX29wcz17fTtyZWFkTW9kZT0zNjU7d3JpdGVNb2RlPTE0Njttb3VudGVkPW51bGw7Y29uc3RydWN0b3IoVWUsbHQsSHQsWHQpe1VlfHwoVWU9dGhpcyksdGhpcy5wYXJlbnQ9VWUsdGhpcy5tb3VudD1VZS5tb3VudCx0aGlzLmlkPVl0Lm5leHRJbm9kZSsrLHRoaXMubmFtZT1sdCx0'@;
put 'aGlzLm1vZGU9SHQsdGhpcy5yZGV2PVh0LHRoaXMuYXRpbWU9dGhpcy5tdGltZT10aGlzLmN0aW1lPURhdGUubm93KCl9Z2V0IHJlYWQoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMucmVhZE1vZGUpPT09dGhpcy5yZWFkTW9kZX1zZXQgcmVhZChVZSl7VWU/dGhpcy5tb2RlfD10aGlzLnJlYWRN'@;
put 'b2RlOnRoaXMubW9kZSY9fnRoaXMucmVhZE1vZGV9Z2V0IHdyaXRlKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLndyaXRlTW9kZSk9PT10aGlzLndyaXRlTW9kZX1zZXQgd3JpdGUoVWUpe1VlP3RoaXMubW9kZXw9dGhpcy53cml0ZU1vZGU6dGhpcy5tb2RlJj1+dGhpcy53cml0ZU1vZGV9Z2V0'@;
put 'IGlzRm9sZGVyKCl7cmV0dXJuIFl0LmlzRGlyKHRoaXMubW9kZSl9Z2V0IGlzRGV2aWNlKCl7cmV0dXJuIFl0LmlzQ2hyZGV2KHRoaXMubW9kZSl9fSxsb29rdXBQYXRoKFVlLGx0PXt9KXtpZighVWUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2x0LmZvbGxvd19tb3VudD8/PSEwLFpp'@;
put 'LmlzQWJzKFVlKXx8KFVlPVl0LmN3ZCgpKyIvIitVZSk7ZTpmb3IodmFyIEh0PTA7SHQ8NDA7SHQrKyl7Zm9yKHZhciBYdD1VZS5zcGxpdCgiLyIpLmZpbHRlcihScz0+ISFScyksa249WXQucm9vdCxscj0iLyIsSXI9MDtJcjxYdC5sZW5ndGg7SXIrKyl7dmFyICRyPUlyPT09WHQubGVuZ3Ro'@;
put 'LTE7aWYoJHImJmx0LnBhcmVudClicmVhaztpZigiLiIhPT1YdFtJcl0pe2lmKCIuLiI9PT1YdFtJcl0pe2lmKGxyPVppLmRpcm5hbWUobHIpLFl0LmlzUm9vdChrbikpe1VlPWxyKyIvIitYdC5zbGljZShJcisxKS5qb2luKCIvIiksSHQtLTtjb250aW51ZSBlfWtuPWtuLnBhcmVudDtjb250'@;
put 'aW51ZX1scj1aaS5qb2luMihscixYdFtJcl0pO3RyeXtrbj1ZdC5sb29rdXBOb2RlKGtuLFh0W0lyXSl9Y2F0Y2goUnMpe2lmKDQ0PT09UnM/LmVycm5vJiYkciYmbHQubm9lbnRfb2theSlyZXR1cm57cGF0aDpscn07dGhyb3cgUnN9aWYoWXQuaXNNb3VudHBvaW50KGtuKSYmKCEkcnx8bHQu'@;
put 'Zm9sbG93X21vdW50KSYmKGtuPWtuLm1vdW50ZWQucm9vdCksWXQuaXNMaW5rKGtuLm1vZGUpJiYoISRyfHxsdC5mb2xsb3cpKXtpZigha24ubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTIpO3ZhciB2YT1rbi5ub2RlX29wcy5yZWFkbGluayhrbik7WmkuaXNB'@;
put 'YnModmEpfHwodmE9WmkuZGlybmFtZShscikrIi8iK3ZhKSxVZT12YSsiLyIrWHQuc2xpY2UoSXIrMSkuam9pbigiLyIpO2NvbnRpbnVlIGV9fX1yZXR1cm57cGF0aDpscixub2RlOmtufX10aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMil9LGdldFBhdGgoVWUpe2Zvcih2YXIgbHQ7Oyl7aWYo'@;
put 'WXQuaXNSb290KFVlKSl7dmFyIEh0PVVlLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGx0PyIvIiE9PUh0W0h0Lmxlbmd0aC0xXT9gJHtIdH0vJHtsdH1gOkh0K2x0Okh0fWx0PWx0P2Ake1VlLm5hbWV9LyR7bHR9YDpVZS5uYW1lLFVlPVVlLnBhcmVudH19LGhhc2hOYW1lKFVlLGx0KXtmb3Io'@;
put 'dmFyIEh0PTAsWHQ9MDtYdDxsdC5sZW5ndGg7WHQrKylIdD0oSHQ8PDUpLUh0K2x0LmNoYXJDb2RlQXQoWHQpfDA7cmV0dXJuKFVlK0h0Pj4+MCklWXQubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGUoVWUpe3ZhciBsdD1ZdC5oYXNoTmFtZShVZS5wYXJlbnQuaWQsVWUubmFtZSk7VWUu'@;
put 'bmFtZV9uZXh0PVl0Lm5hbWVUYWJsZVtsdF0sWXQubmFtZVRhYmxlW2x0XT1VZX0saGFzaFJlbW92ZU5vZGUoVWUpe3ZhciBsdD1ZdC5oYXNoTmFtZShVZS5wYXJlbnQuaWQsVWUubmFtZSk7aWYoWXQubmFtZVRhYmxlW2x0XT09PVVlKVl0Lm5hbWVUYWJsZVtsdF09VWUubmFtZV9uZXh0O2Vs'@;
put 'c2UgZm9yKHZhciBIdD1ZdC5uYW1lVGFibGVbbHRdO0h0Oyl7aWYoSHQubmFtZV9uZXh0PT09VWUpe0h0Lm5hbWVfbmV4dD1VZS5uYW1lX25leHQ7YnJlYWt9SHQ9SHQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShVZSxsdCl7dmFyIEh0PVl0Lm1heUxvb2t1cChVZSk7aWYoSHQpdGhyb3cgbmV3'@;
put 'IFl0LkVycm5vRXJyb3IoSHQpO2Zvcih2YXIgWHQ9WXQuaGFzaE5hbWUoVWUuaWQsbHQpLGtuPVl0Lm5hbWVUYWJsZVtYdF07a247a249a24ubmFtZV9uZXh0KWlmKGtuLnBhcmVudC5pZD09PVVlLmlkJiZrbi5uYW1lPT09bHQpcmV0dXJuIGtuO3JldHVybiBZdC5sb29rdXAoVWUsbHQpfSxj'@;
put 'cmVhdGVOb2RlKFVlLGx0LEh0LFh0KXt2YXIga249bmV3IFl0LkZTTm9kZShVZSxsdCxIdCxYdCk7cmV0dXJuIFl0Lmhhc2hBZGROb2RlKGtuKSxrbn0sZGVzdHJveU5vZGUoVWUpe1l0Lmhhc2hSZW1vdmVOb2RlKFVlKX0saXNSb290OlVlPT5VZT09PVVlLnBhcmVudCxpc01vdW50cG9pbnQ6'@;
put 'VWU9PiEhVWUubW91bnRlZCxpc0ZpbGU6VWU9PjMyNzY4PT0oNjE0NDAmVWUpLGlzRGlyOlVlPT4xNjM4ND09KDYxNDQwJlVlKSxpc0xpbms6VWU9PjQwOTYwPT0oNjE0NDAmVWUpLGlzQ2hyZGV2OlVlPT44MTkyPT0oNjE0NDAmVWUpLGlzQmxrZGV2OlVlPT4yNDU3Nj09KDYxNDQwJlVlKSxp'@;
put 'c0ZJRk86VWU9PjQwOTY9PSg2MTQ0MCZVZSksaXNTb2NrZXQ6VWU9PiEoNDkxNTImflVlKSxmbGFnc1RvUGVybWlzc2lvblN0cmluZyhVZSl7dmFyIGx0PVsiciIsInciLCJydyJdWzMmVWVdO3JldHVybiA1MTImVWUmJihsdCs9InciKSxsdH0sbm9kZVBlcm1pc3Npb25zOihVZSxsdCk9Pll0'@;
put 'Lmlnbm9yZVBlcm1pc3Npb25zPzA6bHQuaW5jbHVkZXMoInIiKSYmISgyOTImVWUubW9kZSl8fGx0LmluY2x1ZGVzKCJ3IikmJiEoMTQ2JlVlLm1vZGUpfHxsdC5pbmNsdWRlcygieCIpJiYhKDczJlVlLm1vZGUpPzI6MCxtYXlMb29rdXA6VWU9Pll0LmlzRGlyKFVlLm1vZGUpP1l0Lm5vZGVQ'@;
put 'ZXJtaXNzaW9ucyhVZSwieCIpfHwoVWUubm9kZV9vcHMubG9va3VwPzA6Mik6NTQsbWF5Q3JlYXRlKFVlLGx0KXtpZighWXQuaXNEaXIoVWUubW9kZSkpcmV0dXJuIDU0O3RyeXtyZXR1cm4gWXQubG9va3VwTm9kZShVZSxsdCksMjB9Y2F0Y2h7fXJldHVybiBZdC5ub2RlUGVybWlzc2lvbnMo'@;
put 'VWUsInd4Iil9LG1heURlbGV0ZShVZSxsdCxIdCl7dmFyIFh0O3RyeXtYdD1ZdC5sb29rdXBOb2RlKFVlLGx0KX1jYXRjaChscil7cmV0dXJuIGxyLmVycm5vfXZhciBrbj1ZdC5ub2RlUGVybWlzc2lvbnMoVWUsInd4Iik7aWYoa24pcmV0dXJuIGtuO2lmKEh0KXtpZighWXQuaXNEaXIoWHQu'@;
put 'bW9kZSkpcmV0dXJuIDU0O2lmKFl0LmlzUm9vdChYdCl8fFl0LmdldFBhdGgoWHQpPT09WXQuY3dkKCkpcmV0dXJuIDEwfWVsc2UgaWYoWXQuaXNEaXIoWHQubW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuOihVZSxsdCk9PlVlP1l0LmlzTGluayhVZS5tb2RlKT8zMjpZdC5pc0Rp'@;
put 'cihVZS5tb2RlKSYmKCJyIiE9PVl0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGx0KXx8NTc2Jmx0KT8zMTpZdC5ub2RlUGVybWlzc2lvbnMoVWUsWXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcobHQpKTo0NCxjaGVja09wRXhpc3RzKFVlLGx0KXtpZighVWUpdGhyb3cgbmV3IFl0LkVycm5v'@;
put 'RXJyb3IobHQpO3JldHVybiBVZX0sTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkKCl7Zm9yKHZhciBVZT0wO1VlPD1ZdC5NQVhfT1BFTl9GRFM7VWUrKylpZighWXQuc3RyZWFtc1tVZV0pcmV0dXJuIFVlO3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChVZSl7'@;
put 'dmFyIGx0PVl0LmdldFN0cmVhbShVZSk7aWYoIWx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO3JldHVybiBsdH0sZ2V0U3RyZWFtOlVlPT5ZdC5zdHJlYW1zW1VlXSxjcmVhdGVTdHJlYW06KFVlLGx0PS0xKT0+KFVlPU9iamVjdC5hc3NpZ24obmV3IFl0LkZTU3RyZWFtLFVlKSwtMT09'@;
put 'bHQmJihsdD1ZdC5uZXh0ZmQoKSksVWUuZmQ9bHQsWXQuc3RyZWFtc1tsdF09VWUsVWUpLGNsb3NlU3RyZWFtKFVlKXtZdC5zdHJlYW1zW1VlXT1udWxsfSxkdXBTdHJlYW0oVWUsbHQ9LTEpe3ZhciBIdD1ZdC5jcmVhdGVTdHJlYW0oVWUsbHQpO3JldHVybiBIdC5zdHJlYW1fb3BzPy5kdXA/'@;
put 'LihIdCksSHR9LGRvU2V0QXR0cihVZSxsdCxIdCl7dmFyIFh0PVVlPy5zdHJlYW1fb3BzLnNldGF0dHIsa249WHQ/VWU6bHQ7WHQ/Pz1sdC5ub2RlX29wcy5zZXRhdHRyLFl0LmNoZWNrT3BFeGlzdHMoWHQsNjMpLFh0KGtuLEh0KX0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oVWUpe3ZhciBs'@;
put 'dD1ZdC5nZXREZXZpY2UoVWUubm9kZS5yZGV2KTtVZS5zdHJlYW1fb3BzPWx0LnN0cmVhbV9vcHMsVWUuc3RyZWFtX29wcy5vcGVuPy4oVWUpfSxsbHNlZWsoKXt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCl9fSxtYWpvcjpVZT0+VWU+PjgsbWlub3I6VWU9PjI1NSZVZSxtYWtlZGV2OihV'@;
put 'ZSxsdCk9PlVlPDw4fGx0LHJlZ2lzdGVyRGV2aWNlKFVlLGx0KXtZdC5kZXZpY2VzW1VlXT17c3RyZWFtX29wczpsdH19LGdldERldmljZTpVZT0+WXQuZGV2aWNlc1tVZV0sZ2V0TW91bnRzKFVlKXtmb3IodmFyIGx0PVtdLEh0PVtVZV07SHQubGVuZ3RoOyl7dmFyIFh0PUh0LnBvcCgpO2x0'@;
put 'LnB1c2goWHQpLEh0LnB1c2goLi4uWHQubW91bnRzKX1yZXR1cm4gbHR9LHN5bmNmcyhVZSxsdCl7ImZ1bmN0aW9uIj09dHlwZW9mIFVlJiYobHQ9VWUsVWU9ITEpLFl0LnN5bmNGU1JlcXVlc3RzKyssWXQuc3luY0ZTUmVxdWVzdHM+MSYmeWUoYHdhcm5pbmc6ICR7WXQuc3luY0ZTUmVxdWVz'@;
put 'dHN9IEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmtgKTt2YXIgSHQ9WXQuZ2V0TW91bnRzKFl0LnJvb3QubW91bnQpLFh0PTA7ZnVuY3Rpb24ga24oSXIpe3JldHVybiBZdC5zeW5jRlNSZXF1ZXN0cy0tLGx0KEly'@;
put 'KX1mdW5jdGlvbiBscihJcil7aWYoSXIpcmV0dXJuIGxyLmVycm9yZWQ/dm9pZCAwOihsci5lcnJvcmVkPSEwLGtuKElyKSk7KytYdD49SHQubGVuZ3RoJiZrbihudWxsKX1IdC5mb3JFYWNoKElyPT57aWYoIUlyLnR5cGUuc3luY2ZzKXJldHVybiBscihudWxsKTtJci50eXBlLnN5bmNmcyhJ'@;
put 'cixVZSxscil9KX0sbW91bnQoVWUsbHQsSHQpe3ZhciBscixYdD0iLyI9PT1IdCxrbj0hSHQ7aWYoWHQmJll0LnJvb3QpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKCFYdCYmIWtuKXt2YXIgSXI9WXQubG9va3VwUGF0aChIdCx7Zm9sbG93X21vdW50OiExfSk7aWYoSHQ9SXIucGF0'@;
put 'aCxZdC5pc01vdW50cG9pbnQobHI9SXIubm9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKCFZdC5pc0Rpcihsci5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCl9dmFyICRyPXt0eXBlOlVlLG9wdHM6bHQsbW91bnRwb2ludDpIdCxtb3VudHM6W119LHZhPVVlLm1v'@;
put 'dW50KCRyKTtyZXR1cm4gdmEubW91bnQ9JHIsJHIucm9vdD12YSxYdD9ZdC5yb290PXZhOmxyJiYobHIubW91bnRlZD0kcixsci5tb3VudCYmbHIubW91bnQubW91bnRzLnB1c2goJHIpKSx2YX0sdW5tb3VudChVZSl7dmFyIGx0PVl0Lmxvb2t1cFBhdGgoVWUse2ZvbGxvd19tb3VudDohMX0p'@;
put 'O2lmKCFZdC5pc01vdW50cG9pbnQobHQubm9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBIdD1sdC5ub2RlLFh0PUh0Lm1vdW50ZWQsa249WXQuZ2V0TW91bnRzKFh0KTtPYmplY3Qua2V5cyhZdC5uYW1lVGFibGUpLmZvckVhY2goSXI9Pntmb3IodmFyICRyPVl0Lm5hbWVU'@;
put 'YWJsZVtJcl07JHI7KXt2YXIgdmE9JHIubmFtZV9uZXh0O2tuLmluY2x1ZGVzKCRyLm1vdW50KSYmWXQuZGVzdHJveU5vZGUoJHIpLCRyPXZhfX0pLEh0Lm1vdW50ZWQ9bnVsbDt2YXIgbHI9SHQubW91bnQubW91bnRzLmluZGV4T2YoWHQpO0h0Lm1vdW50Lm1vdW50cy5zcGxpY2UobHIsMSl9'@;
put 'LGxvb2t1cDooVWUsbHQpPT5VZS5ub2RlX29wcy5sb29rdXAoVWUsbHQpLG1rbm9kKFVlLGx0LEh0KXt2YXIga249WXQubG9va3VwUGF0aChVZSx7cGFyZW50OiEwfSkubm9kZSxscj1aaS5iYXNlbmFtZShVZSk7aWYoIWxyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZigiLiI9PT1s'@;
put 'cnx8Ii4uIj09PWxyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIwKTt2YXIgSXI9WXQubWF5Q3JlYXRlKGtuLGxyKTtpZihJcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihJcik7aWYoIWtuLm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4ga24ubm9k'@;
put 'ZV9vcHMubWtub2Qoa24sbHIsbHQsSHQpfSxzdGF0ZnM6VWU9Pll0LnN0YXRmc05vZGUoWXQubG9va3VwUGF0aChVZSx7Zm9sbG93OiEwfSkubm9kZSksc3RhdGZzU3RyZWFtOlVlPT5ZdC5zdGF0ZnNOb2RlKFVlLm5vZGUpLHN0YXRmc05vZGUoVWUpe3ZhciBsdD17YnNpemU6NDA5NixmcnNp'@;
put 'emU6NDA5NixibG9ja3M6MWU2LGJmcmVlOjVlNSxiYXZhaWw6NWU1LGZpbGVzOll0Lm5leHRJbm9kZSxmZnJlZTpZdC5uZXh0SW5vZGUtMSxmc2lkOjQyLGZsYWdzOjIsbmFtZWxlbjoyNTV9O3JldHVybiBVZS5ub2RlX29wcy5zdGF0ZnMmJk9iamVjdC5hc3NpZ24obHQsVWUubm9kZV9vcHMu'@;
put 'c3RhdGZzKFVlLm1vdW50Lm9wdHMucm9vdCkpLGx0fSxjcmVhdGU6KFVlLGx0PTQzOCk9PihsdCY9NDA5NSxZdC5ta25vZChVZSxsdHw9MzI3NjgsMCkpLG1rZGlyOihVZSxsdD01MTEpPT4obHQmPTEwMjMsWXQubWtub2QoVWUsbHR8PTE2Mzg0LDApKSxta2RpclRyZWUoVWUsbHQpe3ZhciBI'@;
put 'dD1VZS5zcGxpdCgiLyIpLFh0PSIiO2Zvcih2YXIga24gb2YgSHQpaWYoa24peyhYdHx8WmkuaXNBYnMoVWUpKSYmKFh0Kz0iLyIpLFh0Kz1rbjt0cnl7WXQubWtkaXIoWHQsbHQpfWNhdGNoKGxyKXtpZigyMCE9bHIuZXJybm8pdGhyb3cgbHJ9fX0sbWtkZXY6KFVlLGx0LEh0KT0+KHR5cGVv'@;
put 'ZiBIdD4idSImJihIdD1sdCxsdD00MzgpLFl0Lm1rbm9kKFVlLGx0fD04MTkyLEh0KSksc3ltbGluayhVZSxsdCl7aWYoIVdzLnJlc29sdmUoVWUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgWHQ9WXQubG9va3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZTtpZighWHQpdGhy'@;
put 'b3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciBrbj1aaS5iYXNlbmFtZShsdCksbHI9WXQubWF5Q3JlYXRlKFh0LGtuKTtpZihscil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihscik7aWYoIVh0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiBY'@;
put 'dC5ub2RlX29wcy5zeW1saW5rKFh0LGtuLFVlKX0scmVuYW1lKFVlLGx0KXt2YXIgJHIsdmEsSHQ9WmkuZGlybmFtZShVZSksWHQ9WmkuZGlybmFtZShsdCksa249WmkuYmFzZW5hbWUoVWUpLGxyPVppLmJhc2VuYW1lKGx0KTtpZigkcj1ZdC5sb29rdXBQYXRoKFVlLHtwYXJlbnQ6ITB9KS5u'@;
put 'b2RlLHZhPVl0Lmxvb2t1cFBhdGgobHQse3BhcmVudDohMH0pLm5vZGUsISRyfHwhdmEpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKCRyLm1vdW50IT09dmEubW91bnQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzUpO3ZhciBEbCxScz1ZdC5sb29rdXBOb2RlKCRyLGtuKSxLbz1X'@;
put 'cy5yZWxhdGl2ZShVZSxYdCk7aWYoIi4iIT09S28uY2hhckF0KDApKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oS289V3MucmVsYXRpdmUobHQsSHQpKS5jaGFyQXQoMCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO3RyeXtEbD1ZdC5sb29rdXBOb2RlKHZhLGxy'@;
put 'KX1jYXRjaHt9aWYoUnMhPT1EbCl7dmFyIHBvPVl0LmlzRGlyKFJzLm1vZGUpLHhzPVl0Lm1heURlbGV0ZSgkcixrbixwbyk7aWYoeHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeHMpO2lmKHhzPURsP1l0Lm1heURlbGV0ZSh2YSxscixwbyk6WXQubWF5Q3JlYXRlKHZhLGxyKSl0aHJvdyBu'@;
put 'ZXcgWXQuRXJybm9FcnJvcih4cyk7aWYoISRyLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNNb3VudHBvaW50KFJzKXx8RGwmJll0LmlzTW91bnRwb2ludChEbCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKHZhIT09JHImJih4cz1Z'@;
put 'dC5ub2RlUGVybWlzc2lvbnMoJHIsInciKSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeHMpO1l0Lmhhc2hSZW1vdmVOb2RlKFJzKTt0cnl7JHIubm9kZV9vcHMucmVuYW1lKFJzLHZhLGxyKSxScy5wYXJlbnQ9dmF9Y2F0Y2goWG8pe3Rocm93IFhvfWZpbmFsbHl7WXQuaGFzaEFkZE5vZGUo'@;
put 'UnMpfX19LHJtZGlyKFVlKXt2YXIgSHQ9WXQubG9va3VwUGF0aChVZSx7cGFyZW50OiEwfSkubm9kZSxYdD1aaS5iYXNlbmFtZShVZSksa249WXQubG9va3VwTm9kZShIdCxYdCksbHI9WXQubWF5RGVsZXRlKEh0LFh0LCEwKTtpZihscil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihscik7aWYo'@;
put 'IUh0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoa24pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtIdC5ub2RlX29wcy5ybWRpcihIdCxYdCksWXQuZGVzdHJveU5vZGUoa24pfSxyZWFkZGlyKFVlKXt2YXIgSHQ9WXQu'@;
put 'bG9va3VwUGF0aChVZSx7Zm9sbG93OiEwfSkubm9kZTtyZXR1cm4gWXQuY2hlY2tPcEV4aXN0cyhIdC5ub2RlX29wcy5yZWFkZGlyLDU0KShIdCl9LHVubGluayhVZSl7dmFyIEh0PVl0Lmxvb2t1cFBhdGgoVWUse3BhcmVudDohMH0pLm5vZGU7aWYoIUh0KXRocm93IG5ldyBZdC5FcnJub0Vy'@;
put 'cm9yKDQ0KTt2YXIgWHQ9WmkuYmFzZW5hbWUoVWUpLGtuPVl0Lmxvb2t1cE5vZGUoSHQsWHQpLGxyPVl0Lm1heURlbGV0ZShIdCxYdCwhMSk7aWYobHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IobHIpO2lmKCFIdC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMp'@;
put 'O2lmKFl0LmlzTW91bnRwb2ludChrbikpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO0h0Lm5vZGVfb3BzLnVubGluayhIdCxYdCksWXQuZGVzdHJveU5vZGUoa24pfSxyZWFkbGluayhVZSl7dmFyIEh0PVl0Lmxvb2t1cFBhdGgoVWUpLm5vZGU7aWYoIUh0KXRocm93IG5ldyBZdC5FcnJu'@;
put 'b0Vycm9yKDQ0KTtpZighSHQubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBIdC5ub2RlX29wcy5yZWFkbGluayhIdCl9LHN0YXQoVWUsbHQpe3ZhciBYdD1ZdC5sb29rdXBQYXRoKFVlLHtmb2xsb3c6IWx0fSkubm9kZTtyZXR1cm4gWXQuY2hl'@;
put 'Y2tPcEV4aXN0cyhYdC5ub2RlX29wcy5nZXRhdHRyLDYzKShYdCl9LGZzdGF0KFVlKXt2YXIgbHQ9WXQuZ2V0U3RyZWFtQ2hlY2tlZChVZSksSHQ9bHQubm9kZSxYdD1sdC5zdHJlYW1fb3BzLmdldGF0dHIsa249WHQ/bHQ6SHQ7cmV0dXJuIFh0Pz89SHQubm9kZV9vcHMuZ2V0YXR0cixZdC5j'@;
put 'aGVja09wRXhpc3RzKFh0LDYzKSxYdChrbil9LGxzdGF0OlVlPT5ZdC5zdGF0KFVlLCEwKSxkb0NobW9kKFVlLGx0LEh0LFh0KXtZdC5kb1NldEF0dHIoVWUsbHQse21vZGU6NDA5NSZIdHwtNDA5NiZsdC5tb2RlLGN0aW1lOkRhdGUubm93KCksZG9udEZvbGxvdzpYdH0pfSxjaG1vZChVZSxs'@;
put 'dCxIdCl7dmFyIFh0O1h0PSJzdHJpbmciPT10eXBlb2YgVWU/WXQubG9va3VwUGF0aChVZSx7Zm9sbG93OiFIdH0pLm5vZGU6VWUsWXQuZG9DaG1vZChudWxsLFh0LGx0LEh0KX0sbGNobW9kKFVlLGx0KXtZdC5jaG1vZChVZSxsdCwhMCl9LGZjaG1vZChVZSxsdCl7dmFyIEh0PVl0LmdldFN0'@;
put 'cmVhbUNoZWNrZWQoVWUpO1l0LmRvQ2htb2QoSHQsSHQubm9kZSxsdCwhMSl9LGRvQ2hvd24oVWUsbHQsSHQpe1l0LmRvU2V0QXR0cihVZSxsdCx7dGltZXN0YW1wOkRhdGUubm93KCksZG9udEZvbGxvdzpIdH0pfSxjaG93bihVZSxsdCxIdCxYdCl7dmFyIGtuO2tuPSJzdHJpbmciPT10eXBl'@;
put 'b2YgVWU/WXQubG9va3VwUGF0aChVZSx7Zm9sbG93OiFYdH0pLm5vZGU6VWUsWXQuZG9DaG93bihudWxsLGtuLFh0KX0sbGNob3duKFVlLGx0LEh0KXtZdC5jaG93bihVZSxsdCxIdCwhMCl9LGZjaG93bihVZSxsdCxIdCl7dmFyIFh0PVl0LmdldFN0cmVhbUNoZWNrZWQoVWUpO1l0LmRvQ2hv'@;
put 'd24oWHQsWHQubm9kZSwhMSl9LGRvVHJ1bmNhdGUoVWUsbHQsSHQpe2lmKFl0LmlzRGlyKGx0Lm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWXQuaXNGaWxlKGx0Lm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgWHQ9WXQubm9kZVBlcm1pc3Npb25z'@;
put 'KGx0LCJ3Iik7aWYoWHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoWHQpO1l0LmRvU2V0QXR0cihVZSxsdCx7c2l6ZTpIdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSx0cnVuY2F0ZShVZSxsdCl7aWYobHQ8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEh0O0h0PSJzdHJpbmci'@;
put 'PT10eXBlb2YgVWU/WXQubG9va3VwUGF0aChVZSx7Zm9sbG93OiEwfSkubm9kZTpVZSxZdC5kb1RydW5jYXRlKG51bGwsSHQsbHQpfSxmdHJ1bmNhdGUoVWUsbHQpe3ZhciBIdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFVlKTtpZihsdDwwfHwhKDIwOTcxNTUmSHQuZmxhZ3MpKXRocm93IG5ldyBZ'@;
put 'dC5FcnJub0Vycm9yKDI4KTtZdC5kb1RydW5jYXRlKEh0LEh0Lm5vZGUsbHQpfSx1dGltZShVZSxsdCxIdCl7dmFyIGtuPVl0Lmxvb2t1cFBhdGgoVWUse2ZvbGxvdzohMH0pLm5vZGU7WXQuY2hlY2tPcEV4aXN0cyhrbi5ub2RlX29wcy5zZXRhdHRyLDYzKShrbix7YXRpbWU6bHQsbXRpbWU6'@;
put 'SHR9KX0sb3BlbihVZSxsdCxIdD00Mzgpe2lmKCIiPT09VWUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciBYdCxrbjtpZihsdD0ic3RyaW5nIj09dHlwZW9mIGx0PyhVZT0+e3ZhciBIdD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVtVZV07aWYo'@;
put 'dHlwZW9mIEh0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7VWV9YCk7cmV0dXJuIEh0fSkobHQpOmx0LEh0PTY0Jmx0PzQwOTUmSHR8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIFVlKVh0PVVlO2Vsc2V7a249VWUuZW5kc1dpdGgoIi8iKTt2YXIgbHI9'@;
put 'WXQubG9va3VwUGF0aChVZSx7Zm9sbG93OiEoMTMxMDcyJmx0KSxub2VudF9va2F5OiEwfSk7WHQ9bHIubm9kZSxVZT1sci5wYXRofXZhciBJcj0hMTtpZig2NCZsdClpZihYdCl7aWYoMTI4Jmx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIwKX1lbHNle2lmKGtuKXRocm93IG5ldyBZdC5F'@;
put 'cnJub0Vycm9yKDMxKTtYdD1ZdC5ta25vZChVZSw1MTF8SHQsMCksSXI9ITB9aWYoIVh0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZihZdC5pc0NocmRldihYdC5tb2RlKSYmKGx0Jj0tNTEzKSw2NTUzNiZsdCYmIVl0LmlzRGlyKFh0Lm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vy'@;
put 'cm9yKDU0KTtpZighSXIpe3ZhciAkcj1ZdC5tYXlPcGVuKFh0LGx0KTtpZigkcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigkcil9NTEyJmx0JiYhSXImJll0LnRydW5jYXRlKFh0LDApLGx0Jj0tMTMxNzEzO3ZhciB2YT1ZdC5jcmVhdGVTdHJlYW0oe25vZGU6WHQscGF0aDpZdC5nZXRQYXRo'@;
put 'KFh0KSxmbGFnczpsdCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6WHQuc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiB2YS5zdHJlYW1fb3BzLm9wZW4mJnZhLnN0cmVhbV9vcHMub3Blbih2YSksSXImJll0LmNobW9kKFh0LDUxMSZIdCksdmF9LGNs'@;
put 'b3NlKFVlKXtpZihZdC5pc0Nsb3NlZChVZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7VWUuZ2V0ZGVudHMmJihVZS5nZXRkZW50cz1udWxsKTt0cnl7VWUuc3RyZWFtX29wcy5jbG9zZSYmVWUuc3RyZWFtX29wcy5jbG9zZShVZSl9Y2F0Y2gobHQpe3Rocm93IGx0fWZpbmFsbHl7WXQu'@;
put 'Y2xvc2VTdHJlYW0oVWUuZmQpfVVlLmZkPW51bGx9LGlzQ2xvc2VkOlVlPT5udWxsPT09VWUuZmQsbGxzZWVrKFVlLGx0LEh0KXtpZihZdC5pc0Nsb3NlZChVZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoIVVlLnNlZWthYmxlfHwhVWUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cg'@;
put 'bmV3IFl0LkVycm5vRXJyb3IoNzApO2lmKDAhPUh0JiYxIT1IdCYmMiE9SHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBVZS5wb3NpdGlvbj1VZS5zdHJlYW1fb3BzLmxsc2VlayhVZSxsdCxIdCksVWUudW5nb3R0ZW49W10sVWUucG9zaXRpb259LHJlYWQoVWUsbHQsSHQs'@;
put 'WHQsa24pe2lmKFh0PDB8fGtuPDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKFl0LmlzQ2xvc2VkKFVlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZVZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoWXQuaXNEaXIoVWUubm9k'@;
put 'ZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMSk7aWYoIVVlLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIGxyPXR5cGVvZiBrbjwidSI7aWYobHIpe2lmKCFVZS5zZWVrYWJsZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCl9ZWxzZSBr'@;
put 'bj1VZS5wb3NpdGlvbjt2YXIgSXI9VWUuc3RyZWFtX29wcy5yZWFkKFVlLGx0LEh0LFh0LGtuKTtyZXR1cm4gbHJ8fChVZS5wb3NpdGlvbis9SXIpLElyfSx3cml0ZShVZSxsdCxIdCxYdCxrbixscil7aWYoWHQ8MHx8a248MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7aWYoWXQuaXND'@;
put 'bG9zZWQoVWUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZVZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoWXQuaXNEaXIoVWUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMSk7aWYoIVVlLnN0cmVhbV9vcHMud3JpdGUp'@;
put 'dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO1VlLnNlZWthYmxlJiYxMDI0JlVlLmZsYWdzJiZZdC5sbHNlZWsoVWUsMCwyKTt2YXIgSXI9dHlwZW9mIGtuPCJ1IjtpZihJcil7aWYoIVVlLnNlZWthYmxlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX1lbHNlIGtuPVVlLnBvc2l0aW9u'@;
put 'O3ZhciAkcj1VZS5zdHJlYW1fb3BzLndyaXRlKFVlLGx0LEh0LFh0LGtuLGxyKTtyZXR1cm4gSXJ8fChVZS5wb3NpdGlvbis9JHIpLCRyfSxtbWFwKFVlLGx0LEh0LFh0LGtuKXtpZigyJlh0JiYhKDIma24pJiYyIT0oMjA5NzE1NSZVZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3Io'@;
put 'Mik7aWYoMT09KDIwOTcxNTUmVWUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKCFVZS5zdHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO2lmKCFsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFVlLnN0cmVhbV9vcHMubW1h'@;
put 'cChVZSxsdCxIdCxYdCxrbil9LG1zeW5jOihVZSxsdCxIdCxYdCxrbik9PlVlLnN0cmVhbV9vcHMubXN5bmM/VWUuc3RyZWFtX29wcy5tc3luYyhVZSxsdCxIdCxYdCxrbik6MCxpb2N0bChVZSxsdCxIdCl7aWYoIVVlLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3Io'@;
put 'NTkpO3JldHVybiBVZS5zdHJlYW1fb3BzLmlvY3RsKFVlLGx0LEh0KX0scmVhZEZpbGUoVWUsbHQ9e30pe2lmKGx0LmZsYWdzPWx0LmZsYWdzfHwwLGx0LmVuY29kaW5nPWx0LmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1sdC5lbmNvZGluZyYmImJpbmFyeSIhPT1sdC5lbmNvZGluZyl0'@;
put 'aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtsdC5lbmNvZGluZ30iYCk7dmFyIEh0PVl0Lm9wZW4oVWUsbHQuZmxhZ3MpLGtuPVl0LnN0YXQoVWUpLnNpemUsbHI9bmV3IFVpbnQ4QXJyYXkoa24pO3JldHVybiBZdC5yZWFkKEh0LGxyLDAsa24sMCksInV0ZjgiPT09'@;
put 'bHQuZW5jb2RpbmcmJihscj1mbyhscikpLFl0LmNsb3NlKEh0KSxscn0sd3JpdGVGaWxlKFVlLGx0LEh0PXt9KXtIdC5mbGFncz1IdC5mbGFnc3x8NTc3O3ZhciBYdD1ZdC5vcGVuKFVlLEh0LmZsYWdzLEh0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgbHQmJihsdD1uZXcgVWludDhBcnJh'@;
put 'eShEYyhsdCwhMCkpKSwhQXJyYXlCdWZmZXIuaXNWaWV3KGx0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO1l0LndyaXRlKFh0LGx0LDAsbHQuYnl0ZUxlbmd0aCx2b2lkIDAsSHQuY2FuT3duKSxZdC5jbG9zZShYdCl9LGN3ZDooKT0+WXQuY3VycmVudFBhdGgs'@;
put 'Y2hkaXIoVWUpe3ZhciBsdD1ZdC5sb29rdXBQYXRoKFVlLHtmb2xsb3c6ITB9KTtpZihudWxsPT09bHQubm9kZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoIVl0LmlzRGlyKGx0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO3ZhciBIdD1ZdC5ub2RlUGVy'@;
put 'bWlzc2lvbnMobHQubm9kZSwieCIpO2lmKEh0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEh0KTtZdC5jdXJyZW50UGF0aD1sdC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3RtcCIpLFl0Lm1rZGlyKCIvaG9tZSIpLFl0Lm1rZGlyKCIvaG9tZS93ZWJfdXNl'@;
put 'ciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe1l0Lm1rZGlyKCIvZGV2IiksWXQucmVnaXN0ZXJEZXZpY2UoWXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihYdCxrbixscixJciwkcik9PklyLGxsc2VlazooKT0+MH0pLFl0Lm1rZGV2KCIvZGV2L251bGwiLFl0Lm1ha2VkZXYo'@;
put 'MSwzKSksJG8ucmVnaXN0ZXIoWXQubWFrZWRldig1LDApLCRvLmRlZmF1bHRfdHR5X29wcyksJG8ucmVnaXN0ZXIoWXQubWFrZWRldig2LDApLCRvLmRlZmF1bHRfdHR5MV9vcHMpLFl0Lm1rZGV2KCIvZGV2L3R0eSIsWXQubWFrZWRldig1LDApKSxZdC5ta2RldigiL2Rldi90dHkxIixZdC5t'@;
put 'YWtlZGV2KDYsMCkpO3ZhciBVZT1uZXcgVWludDhBcnJheSgxMDI0KSxsdD0wLEh0PSgpPT4oMD09PWx0JiYodW8oVWUpLGx0PVVlLmJ5dGVMZW5ndGgpLFVlWy0tbHRdKTtZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLEh0KSxZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9t'@;
put 'IixIdCksWXQubWtkaXIoIi9kZXYvc2htIiksWXQubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3Byb2MiKTt2YXIgVWU9WXQubWtkaXIoIi9wcm9jL3NlbGYiKTtZdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLFl0Lm1vdW50KHtt'@;
put 'b3VudCgpe3ZhciBsdD1ZdC5jcmVhdGVOb2RlKFVlLCJmZCIsMTY4OTUsNzMpO3JldHVybiBsdC5zdHJlYW1fb3BzPXtsbHNlZWs6dHMuc3RyZWFtX29wcy5sbHNlZWt9LGx0Lm5vZGVfb3BzPXtsb29rdXAoSHQsWHQpe3ZhciBrbj0rWHQsbHI9WXQuZ2V0U3RyZWFtQ2hlY2tlZChrbiksSXI9'@;
put 'e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5sci5wYXRofSxpZDprbisxfTtyZXR1cm4gSXIucGFyZW50PUlyLElyfSxyZWFkZGlyOigpPT5BcnJheS5mcm9tKFl0LnN0cmVhbXMuZW50cmllcygpKS5maWx0ZXIoKFtIdCxYdF0p'@;
put 'PT5YdCkubWFwKChbSHQsWHRdKT0+SHQudG9TdHJpbmcoKSl9LGx0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zKFVlLGx0LEh0KXtVZT9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsVWUpOll0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRp'@;
put 'biIpLGx0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxsdCk6WXQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZG91dCIpLEh0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVyciIsbnVsbCxIdCk6WXQuc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIi'@;
put 'KSxZdC5vcGVuKCIvZGV2L3N0ZGluIiwwKSxZdC5vcGVuKCIvZGV2L3N0ZG91dCIsMSksWXQub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WXQubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxZdC5tb3VudCh0cyx7fSwiLyIpLFl0LmNyZWF0ZURlZmF1bHREaXJlY3Rvcmll'@;
put 'cygpLFl0LmNyZWF0ZURlZmF1bHREZXZpY2VzKCksWXQuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksWXQuZmlsZXN5c3RlbXM9e01FTUZTOnRzfX0saW5pdChVZSxsdCxIdCl7WXQuaW5pdGlhbGl6ZWQ9ITAsWXQuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKFVlLGx0LEh0KX0scXVpdCgpe2Zv'@;
put 'cih2YXIgVWUgb2YoWXQuaW5pdGlhbGl6ZWQ9ITEsWXQuc3RyZWFtcykpVWUmJll0LmNsb3NlKFVlKX0sZmluZE9iamVjdChVZSxsdCl7dmFyIEh0PVl0LmFuYWx5emVQYXRoKFVlLGx0KTtyZXR1cm4gSHQuZXhpc3RzP0h0Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aChVZSxsdCl7dHJ5e1Vl'@;
put 'PShIdD1ZdC5sb29rdXBQYXRoKFVlLHtmb2xsb3c6IWx0fSkpLnBhdGh9Y2F0Y2h7fXZhciBYdD17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVs'@;
put 'bH07dHJ5e3ZhciBIdD1ZdC5sb29rdXBQYXRoKFVlLHtwYXJlbnQ6ITB9KTtYdC5wYXJlbnRFeGlzdHM9ITAsWHQucGFyZW50UGF0aD1IdC5wYXRoLFh0LnBhcmVudE9iamVjdD1IdC5ub2RlLFh0Lm5hbWU9WmkuYmFzZW5hbWUoVWUpLEh0PVl0Lmxvb2t1cFBhdGgoVWUse2ZvbGxvdzohbHR9'@;
put 'KSxYdC5leGlzdHM9ITAsWHQucGF0aD1IdC5wYXRoLFh0Lm9iamVjdD1IdC5ub2RlLFh0Lm5hbWU9SHQubm9kZS5uYW1lLFh0LmlzUm9vdD0iLyI9PT1IdC5wYXRofWNhdGNoKGtuKXtYdC5lcnJvcj1rbi5lcnJub31yZXR1cm4gWHR9LGNyZWF0ZVBhdGgoVWUsbHQsSHQsWHQpe1VlPSJzdHJp'@;
put 'bmciPT10eXBlb2YgVWU/VWU6WXQuZ2V0UGF0aChVZSk7Zm9yKHZhciBrbj1sdC5zcGxpdCgiLyIpLnJldmVyc2UoKTtrbi5sZW5ndGg7KXt2YXIgbHI9a24ucG9wKCk7aWYobHIpe3ZhciBJcj1aaS5qb2luMihVZSxscik7dHJ5e1l0Lm1rZGlyKElyKX1jYXRjaCgkcil7aWYoMjAhPSRyLmVy'@;
put 'cm5vKXRocm93ICRyfVVlPUlyfX1yZXR1cm4gSXJ9LGNyZWF0ZUZpbGUoVWUsbHQsSHQsWHQsa24pe3ZhciBscj1aaS5qb2luMigic3RyaW5nIj09dHlwZW9mIFVlP1VlOll0LmdldFBhdGgoVWUpLGx0KSxJcj16QShYdCxrbik7cmV0dXJuIFl0LmNyZWF0ZShscixJcil9LGNyZWF0ZURhdGFG'@;
put 'aWxlKFVlLGx0LEh0LFh0LGtuLGxyKXt2YXIgSXI9bHQ7VWUmJihVZT0ic3RyaW5nIj09dHlwZW9mIFVlP1VlOll0LmdldFBhdGgoVWUpLElyPWx0P1ppLmpvaW4yKFVlLGx0KTpVZSk7dmFyICRyPXpBKFh0LGtuKSx2YT1ZdC5jcmVhdGUoSXIsJHIpO2lmKEh0KXtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIEh0KXtmb3IodmFyIFJzPW5ldyBBcnJheShIdC5sZW5ndGgpLEtvPTAsRGw9SHQubGVuZ3RoO0tvPERsOysrS28pUnNbS29dPUh0LmNoYXJDb2RlQXQoS28pO0h0PVJzfVl0LmNobW9kKHZhLDE0Nnwkcik7dmFyIHBvPVl0Lm9wZW4odmEsNTc3KTtZdC53cml0ZShwbyxIdCwwLEh0Lmxl'@;
put 'bmd0aCwwLGxyKSxZdC5jbG9zZShwbyksWXQuY2htb2QodmEsJHIpfX0sY3JlYXRlRGV2aWNlKFVlLGx0LEh0LFh0KXt2YXIga249Wmkuam9pbjIoInN0cmluZyI9PXR5cGVvZiBVZT9VZTpZdC5nZXRQYXRoKFVlKSxsdCksbHI9ekEoISFIdCwhIVh0KTtZdC5jcmVhdGVEZXZpY2UubWFqb3I/'@;
put 'Pz02NDt2YXIgSXI9WXQubWFrZWRldihZdC5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gWXQucmVnaXN0ZXJEZXZpY2UoSXIse29wZW4oJHIpeyRyLnNlZWthYmxlPSExfSxjbG9zZSgkcil7WHQ/LmJ1ZmZlcj8ubGVuZ3RoJiZYdCgxMCl9LHJlYWQoJHIsdmEsUnMsS28sRGwpe2Zv'@;
put 'cih2YXIgcG89MCx4cz0wO3hzPEtvO3hzKyspe3ZhciBYbzt0cnl7WG89SHQoKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09WG8mJjA9PT1wbyl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2KTtpZihudWxsPT1YbylicmVhaztwbysrLHZhW1JzK3hzXT1Y'@;
put 'b31yZXR1cm4gcG8mJigkci5ub2RlLmF0aW1lPURhdGUubm93KCkpLHBvfSx3cml0ZSgkcix2YSxScyxLbyxEbCl7Zm9yKHZhciBwbz0wO3BvPEtvO3BvKyspdHJ5e1h0KHZhW1JzK3BvXSl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfXJldHVybiBLbyYmKCRyLm5vZGUubXRp'@;
put 'bWU9JHIubm9kZS5jdGltZT1EYXRlLm5vdygpKSxwb319KSxZdC5ta2RldihrbixscixJcil9LGZvcmNlTG9hZEZpbGUoVWUpe2lmKFVlLmlzRGV2aWNlfHxVZS5pc0ZvbGRlcnx8VWUubGlua3x8VWUuY29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0t'@;
put 'cHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO3RyeXtVZS5jb250ZW50cz1yZShVZS51cmwpLFVlLnVzZWRCeXRlcz1VZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfX0sY3JlYXRlTGF6eUZpbGUoVWUsbHQsSHQsWHQs'@;
put 'a24pe2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyICRyLHZh'@;
put 'PVl0LmNyZWF0ZUZpbGUoVWUsbHQsJHI9e2lzRGV2aWNlOiExLHVybDpIdH0sWHQsa24pOyRyLmNvbnRlbnRzP3ZhLmNvbnRlbnRzPSRyLmNvbnRlbnRzOiRyLnVybCYmKHZhLmNvbnRlbnRzPW51bGwsdmEudXJsPSRyLnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModmEse3VzZWRCeXRl'@;
put 'czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgUnM9e307ZnVuY3Rpb24gRGwocG8seHMsWG8sazEsQTMpe3ZhciBHaD1wby5ub2RlLmNvbnRlbnRzO2lmKEEzPj1HaC5sZW5ndGgpcmV0dXJuIDA7dmFyIGszPU1hdGgubWluKEdoLmxlbmd0aC1B'@;
put 'MyxrMSk7aWYoR2guc2xpY2UpZm9yKHZhciBEMz0wO0QzPGszO0QzKyspeHNbWG8rRDNdPUdoW0EzK0QzXTtlbHNlIGZvcihEMz0wO0QzPGszO0QzKyspeHNbWG8rRDNdPUdoLmdldChBMytEMyk7cmV0dXJuIGszfXJldHVybiBPYmplY3Qua2V5cyh2YS5zdHJlYW1fb3BzKS5mb3JFYWNoKHBv'@;
put 'PT57dmFyIHhzPXZhLnN0cmVhbV9vcHNbcG9dO1JzW3BvXT0oLi4uWG8pPT4oWXQuZm9yY2VMb2FkRmlsZSh2YSkseHMoLi4uWG8pKX0pLFJzLnJlYWQ9KHBvLHhzLFhvLGsxLEEzKT0+KFl0LmZvcmNlTG9hZEZpbGUodmEpLERsKHBvLHhzLFhvLGsxLEEzKSksUnMubW1hcD0ocG8seHMsWG8s'@;
put 'azEsQTMpPT57WXQuZm9yY2VMb2FkRmlsZSh2YSk7dmFyIEdoPW9kKHhzKTtpZighR2gpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDgpO3JldHVybiBEbChwbyx3bixHaCx4cyxYbykse3B0cjpHaCxhbGxvY2F0ZWQ6ITB9fSx2YS5zdHJlYW1fb3BzPVJzLHZhfX0sRTE9KFVlLGx0LEh0KT0+'@;
put 'VWU/Zm8oaG4sVWUsbHQsSHQpOiIiLGdsPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoVWUsbHQsSHQpe2lmKFppLmlzQWJzKGx0KSlyZXR1cm4gbHQ7dmFyIFh0O2lmKFh0PS0xMDA9PT1VZT9ZdC5jd2QoKTpnbC5nZXRTdHJlYW1Gcm9tRkQoVWUpLnBhdGgsMD09bHQubGVuZ3Ro'@;
put 'KXtpZighSHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3JldHVybiBYdH1yZXR1cm4gWHQrIi8iK2x0fSx3cml0ZVN0YXQoVWUsbHQpe2tyW1VlPj4yXT1sdC5kZXYsa3JbVWUrND4+Ml09bHQubW9kZSxxbltVZSs4Pj4yXT1sdC5ubGluayxrcltVZSsxMj4+Ml09bHQudWlkLGtyW1Vl'@;
put 'KzE2Pj4yXT1sdC5naWQsa3JbVWUrMjA+PjJdPWx0LnJkZXYsdnI9W2x0LnNpemU+Pj4wLChObj1sdC5zaXplLCtNYXRoLmFicyhObik+PTE/Tm4+MD8rTWF0aC5mbG9vcihObi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChObi0rKH5+Tm4+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjAp'@;
put 'XSxrcltVZSsyND4+Ml09dnJbMF0sa3JbVWUrMjg+PjJdPXZyWzFdLGtyW1VlKzMyPj4yXT00MDk2LGtyW1VlKzM2Pj4yXT1sdC5ibG9ja3M7dmFyIEh0PWx0LmF0aW1lLmdldFRpbWUoKSxYdD1sdC5tdGltZS5nZXRUaW1lKCksa249bHQuY3RpbWUuZ2V0VGltZSgpO3JldHVybiB2cj1bTWF0'@;
put 'aC5mbG9vcihIdC8xZTMpPj4+MCwoTm49TWF0aC5mbG9vcihIdC8xZTMpLCtNYXRoLmFicyhObik+PTE/Tm4+MD8rTWF0aC5mbG9vcihObi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChObi0rKH5+Tm4+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxrcltVZSs0MD4+Ml09dnJbMF0s'@;
put 'a3JbVWUrNDQ+PjJdPXZyWzFdLHFuW1VlKzQ4Pj4yXT1IdCUxZTMqMWUzKjFlMyx2cj1bTWF0aC5mbG9vcihYdC8xZTMpPj4+MCwoTm49TWF0aC5mbG9vcihYdC8xZTMpLCtNYXRoLmFicyhObik+PTE/Tm4+MD8rTWF0aC5mbG9vcihObi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChO'@;
put 'bi0rKH5+Tm4+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxrcltVZSs1Nj4+Ml09dnJbMF0sa3JbVWUrNjA+PjJdPXZyWzFdLHFuW1VlKzY0Pj4yXT1YdCUxZTMqMWUzKjFlMyx2cj1bTWF0aC5mbG9vcihrbi8xZTMpPj4+MCwoTm49TWF0aC5mbG9vcihrbi8xZTMpLCtNYXRoLmFicyhObik+'@;
put 'PTE/Tm4+MD8rTWF0aC5mbG9vcihObi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChObi0rKH5+Tm4+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxrcltVZSs3Mj4+Ml09dnJbMF0sa3JbVWUrNzY+PjJdPXZyWzFdLHFuW1VlKzgwPj4yXT1rbiUxZTMqMWUzKjFlMyx2cj1bbHQuaW5v'@;
put 'Pj4+MCwoTm49bHQuaW5vLCtNYXRoLmFicyhObik+PTE/Tm4+MD8rTWF0aC5mbG9vcihObi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChObi0rKH5+Tm4+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxrcltVZSs4OD4+Ml09dnJbMF0sa3JbVWUrOTI+PjJdPXZyWzFdLDB9LHdyaXRl'@;
put 'U3RhdEZzKFVlLGx0KXtrcltVZSs0Pj4yXT1sdC5ic2l6ZSxrcltVZSs0MD4+Ml09bHQuYnNpemUsa3JbVWUrOD4+Ml09bHQuYmxvY2tzLGtyW1VlKzEyPj4yXT1sdC5iZnJlZSxrcltVZSsxNj4+Ml09bHQuYmF2YWlsLGtyW1VlKzIwPj4yXT1sdC5maWxlcyxrcltVZSsyND4+Ml09bHQuZmZy'@;
put 'ZWUsa3JbVWUrMjg+PjJdPWx0LmZzaWQsa3JbVWUrNDQ+PjJdPWx0LmZsYWdzLGtyW1VlKzM2Pj4yXT1sdC5uYW1lbGVufSxkb01zeW5jKFVlLGx0LEh0LFh0LGtuKXtpZighWXQuaXNGaWxlKGx0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO2lmKDImWHQpcmV0dXJu'@;
put 'IDA7dmFyIGxyPWhuLnNsaWNlKFVlLFVlK0h0KTtZdC5tc3luYyhsdCxscixrbixIdCxYdCl9LGdldFN0cmVhbUZyb21GRDpVZT0+WXQuZ2V0U3RyZWFtQ2hlY2tlZChVZSksdmFyYXJnczp2b2lkIDAsZ2V0U3RyOlVlPT5FMShVZSl9LEx3PSgpPT57dmFyIFVlPWtyWytnbC52YXJhcmdzPj4y'@;
put 'XTtyZXR1cm4gZ2wudmFyYXJncys9NCxVZX0sWjA9THcsVDE9KFVlLGx0LEh0KT0+UWQoVWUsaG4sbHQsSHQpLGxzPVswLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMwNSwzMzVdLG1yPVswLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzRdLHphPShV'@;
put 'ZSxsdCk9Pmx0KzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFVZT8oVWU+Pj4wKSs0Mjk0OTY3Mjk2Kmx0Ok5hTixFNj0oKT0+RGF0ZS5ub3coKSxPdz1bXSxWSXQ9VWU9Pnt2YXIgSHQ9KFVlLW1uLmJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1KS82NTUzNnwwO3RyeXtyZXR1cm4gbW4uZ3JvdyhIdCks'@;
put 'UG4oKSwxfWNhdGNoe319LHRuZT17fSxXQT0oKT0+e2lmKCFXQS5zdHJpbmdzKXt2YXIgbHQ9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzooIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5h'@;
put 'dmlnYXRvci5sYW5ndWFnZXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciBIdCBpbiB0bmUpdm9pZCAwPT09dG5lW0h0XT9kZWxldGUgbHRbSHRdOmx0W0h0XT10bmVbSHRdO3ZhciBYdD1bXTtmb3IodmFyIEh0IGluIGx0KVh0LnB1'@;
put 'c2goYCR7SHR9PSR7bHRbSHRdfWApO1dBLnN0cmluZ3M9WHR9cmV0dXJuIFdBLnN0cmluZ3N9LGVSdD1bXTtZdC5jcmVhdGVQcmVsb2FkZWRGaWxlPShVZSxsdCxIdCxYdCxrbixscixJciwkcix2YSxScyk9Pnt2YXIgS289bHQ/V3MucmVzb2x2ZShaaS5qb2luMihVZSxsdCkpOlVlO2Z1bmN0'@;
put 'aW9uIHBvKHhzKXtmdW5jdGlvbiBYbyhrMSl7UnM/LigpLCRyfHwoKC4uLlVlKT0+e1l0LmNyZWF0ZURhdGFGaWxlKC4uLlVlKX0pKFVlLGx0LGsxLFh0LGtuLHZhKSxscj8uKCksaGEoKX0oKFVlLGx0LEh0LFh0KT0+e3R5cGVvZiBCcm93c2VyPCJ1IiYmQnJvd3Nlci5pbml0KCk7dmFyIGtu'@;
put 'PSExO3JldHVybiBKdGUuZm9yRWFjaChscj0+e2tufHxsci5jYW5IYW5kbGUobHQpJiYobHIuaGFuZGxlKFVlLGx0LEh0LFh0KSxrbj0hMCl9KSxrbn0pKHhzLEtvLFhvLCgpPT57SXI/LigpLGhhKCl9KXx8WG8oeHMpfUJpKCksInN0cmluZyI9PXR5cGVvZiBIdD9xZyhIdCkudGhlbihwbyxJ'@;
put 'cik6cG8oSHQpfSxZdC5zdGF0aWNJbml0KCksYS53YXNtQmluYXJ5JiYoRWU9YS53YXNtQmluYXJ5KSxhLlVURjhUb1N0cmluZz1FMTt2YXIgejdlLFU3ZSxaN2UsVzdlLFk3ZSxHN2UsJDdlLEs3ZSxYN2UscTdlLEo3ZSxRN2UsZTllLHQ5ZSxuOWUscjllLGk5ZSxhOWUsczllLG85ZSxsOWUs'@;
put 'dFJ0PXsxNzM1NzY6KFVlLGx0KT0+e3ZhciBIdD1FMShVZSksWHQ9RTEobHQpO1l0LmNyZWF0ZVBhdGgoIi8iLFppLmRpcm5hbWUoSHQpKSxZdC53cml0ZUZpbGUoWmkuam9pbigiLyIsSHQpLFh0KX19LHBSdD17YTooVWUsbHQsSHQpPT57dGhyb3cgbmV3IERyKFVlKS5pbml0KGx0LEh0KSxV'@;
put 'ZX0saTpmdW5jdGlvbiBLTihVZSxsdCxIdCxYdCl7dHJ5e2lmKGx0PWdsLmdldFN0cihsdCksbHQ9Z2wuY2FsY3VsYXRlQXQoVWUsbHQpLC04Jkh0KXJldHVybi0yODt2YXIgbHI9WXQubG9va3VwUGF0aChsdCx7Zm9sbG93OiEwfSkubm9kZTtpZighbHIpcmV0dXJuLTQ0O3ZhciBJcj0iIjty'@;
put 'ZXR1cm4gNCZIdCYmKElyKz0iciIpLDImSHQmJihJcis9InciKSwxJkh0JiYoSXIrPSJ4IiksSXImJll0Lm5vZGVQZXJtaXNzaW9ucyhscixJcik/LTI6MH1jYXRjaCgkcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09JHIubmFtZSl0aHJvdyAkcjtyZXR1cm4tJHIuZXJybm99'@;
put 'fSxlOmZ1bmN0aW9uIHg2KFVlLGx0LEh0KXtnbC52YXJhcmdzPUh0O3RyeXt2YXIgWHQ9Z2wuZ2V0U3RyZWFtRnJvbUZEKFVlKTtzd2l0Y2gobHQpe2Nhc2UgMDppZigoa249THcoKSk8MClyZXR1cm4tMjg7Zm9yKDtZdC5zdHJlYW1zW2tuXTspa24rKztyZXR1cm4gWXQuZHVwU3RyZWFtKFh0'@;
put 'LGtuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIFh0LmZsYWdzO2Nhc2UgNDp2YXIga249THcoKTtyZXR1cm4gWHQuZmxhZ3N8PWtuLDA7Y2FzZSAxMjpyZXR1cm4ga249WjAoKSxNbltrbiswPj4xXT0yLDB9cmV0dXJuLTI4fWNhdGNo'@;
put 'KCRyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT0kci5uYW1lKXRocm93ICRyO3JldHVybi0kci5lcnJub319LHk6ZnVuY3Rpb24gWE4oVWUsbHQpe3RyeXtyZXR1cm4gZ2wud3JpdGVTdGF0KGx0LFl0LmZzdGF0KFVlKSl9Y2F0Y2goSHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJF'@;
put 'cnJub0Vycm9yIiE9PUh0Lm5hbWUpdGhyb3cgSHQ7cmV0dXJuLUh0LmVycm5vfX0sazpmdW5jdGlvbiBxTihVZSxsdCxIdCl7Z2wudmFyYXJncz1IdDt0cnl7dmFyIFh0PWdsLmdldFN0cmVhbUZyb21GRChVZSk7c3dpdGNoKGx0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpj'@;
put 'YXNlIDIxNTEyOmNhc2UgMjE1MjQ6Y2FzZSAyMTUxNTpyZXR1cm4gWHQudHR5PzA6LTU5O2Nhc2UgMjE1MDU6aWYoIVh0LnR0eSlyZXR1cm4tNTk7aWYoWHQudHR5Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciBrbj1YdC50dHkub3BzLmlvY3RsX3RjZ2V0cyhYdCksbHI9WjAoKTtrcltscj4+Ml09'@;
put 'a24uY19pZmxhZ3x8MCxrcltscis0Pj4yXT1rbi5jX29mbGFnfHwwLGtyW2xyKzg+PjJdPWtuLmNfY2ZsYWd8fDAsa3JbbHIrMTI+PjJdPWtuLmNfbGZsYWd8fDA7Zm9yKHZhciBJcj0wO0lyPDMyO0lyKyspd25bbHIrSXIrMTddPWtuLmNfY2NbSXJdfHwwO3JldHVybiAwfXJldHVybiAwO2Nh'@;
put 'c2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OmlmKCFYdC50dHkpcmV0dXJuLTU5O2lmKFh0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtscj1aMCgpO3ZhciAkcj1rcltscj4+Ml0sdmE9a3JbbHIrND4+Ml0sUnM9a3JbbHIrOD4+Ml0sS289a3JbbHIrMTI+PjJdLERsPVtdO2ZvcihJcj0w'@;
put 'O0lyPDMyO0lyKyspRGwucHVzaCh3bltscitJcisxN10pO3JldHVybiBYdC50dHkub3BzLmlvY3RsX3Rjc2V0cyhYdC50dHksbHQse2NfaWZsYWc6JHIsY19vZmxhZzp2YSxjX2NmbGFnOlJzLGNfbGZsYWc6S28sY19jYzpEbH0pfXJldHVybiAwO2Nhc2UgMjE1MTk6cmV0dXJuIFh0LnR0eT8o'@;
put 'bHI9WjAoKSxrcltscj4+Ml09MCwwKTotNTk7Y2FzZSAyMTUyMDpyZXR1cm4gWHQudHR5Py0yODotNTk7Y2FzZSAyMTUzNzpjYXNlIDIxNTMxOnJldHVybiBscj1aMCgpLFl0LmlvY3RsKFh0LGx0LGxyKTtjYXNlIDIxNTIzOmlmKCFYdC50dHkpcmV0dXJuLTU5O2lmKFh0LnR0eS5vcHMuaW9j'@;
put 'dGxfdGlvY2d3aW5zeil7dmFyIHBvPVh0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihYdC50dHkpO2xyPVowKCksTW5bbHI+PjFdPXBvWzBdLE1uW2xyKzI+PjFdPXBvWzFdfXJldHVybiAwO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaCh4cyl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJy'@;
put 'b3IiIT09eHMubmFtZSl0aHJvdyB4cztyZXR1cm4teHMuZXJybm99fSx4OmZ1bmN0aW9uIFVBKFVlLGx0LEh0LFh0KXt0cnl7bHQ9Z2wuZ2V0U3RyKGx0KTt2YXIga249MjU2Jlh0LGxyPTQwOTYmWHQ7cmV0dXJuIFh0Jj0tNjQwMSxsdD1nbC5jYWxjdWxhdGVBdChVZSxsdCxsciksZ2wud3Jp'@;
put 'dGVTdGF0KEh0LGtuP1l0LmxzdGF0KGx0KTpZdC5zdGF0KGx0KSl9Y2F0Y2goSXIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUlyLm5hbWUpdGhyb3cgSXI7cmV0dXJuLUlyLmVycm5vfX0sZzpmdW5jdGlvbiBKTihVZSxsdCxIdCxYdCl7Z2wudmFyYXJncz1YdDt0cnl7bHQ9'@;
put 'Z2wuZ2V0U3RyKGx0KSxsdD1nbC5jYWxjdWxhdGVBdChVZSxsdCk7dmFyIGtuPVh0P0x3KCk6MDtyZXR1cm4gWXQub3BlbihsdCxIdCxrbikuZmR9Y2F0Y2gobHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWxyLm5hbWUpdGhyb3cgbHI7cmV0dXJuLWxyLmVycm5vfX0scjpm'@;
put 'dW5jdGlvbiBRTihVZSxsdCxIdCxYdCl7dHJ5e2lmKGx0PWdsLmdldFN0cihsdCksbHQ9Z2wuY2FsY3VsYXRlQXQoVWUsbHQpLFh0PD0wKXJldHVybi0yODt2YXIga249WXQucmVhZGxpbmsobHQpLGxyPU1hdGgubWluKFh0LFloKGtuKSksSXI9d25bSHQrbHJdO3JldHVybiBUMShrbixIdCxY'@;
put 'dCsxKSx3bltIdCtscl09SXIsbHJ9Y2F0Y2goJHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PSRyLm5hbWUpdGhyb3cgJHI7cmV0dXJuLSRyLmVycm5vfX0sczpmdW5jdGlvbiBlVihVZSl7dHJ5e3JldHVybiBVZT1nbC5nZXRTdHIoVWUpLFl0LnJtZGlyKFVlKSwwfWNhdGNo'@;
put 'KGx0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1sdC5uYW1lKXRocm93IGx0O3JldHVybi1sdC5lcnJub319LHQ6ZnVuY3Rpb24gdFYoVWUsbHQsSHQpe3RyeXtpZihsdD1nbC5nZXRTdHIobHQpLGx0PWdsLmNhbGN1bGF0ZUF0KFVlLGx0KSxIdCl7aWYoNTEyIT09SHQpcmV0'@;
put 'dXJuLTI4O1l0LnJtZGlyKGx0KX1lbHNlIFl0LnVubGluayhsdCk7cmV0dXJuIDB9Y2F0Y2goWHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVh0Lm5hbWUpdGhyb3cgWHQ7cmV0dXJuLVh0LmVycm5vfX0sajooKT0+bWEoIiIpLG86ZnVuY3Rpb24gdWMoVWUsbHQsSHQpe3Zh'@;
put 'ciBYdD16YShVZSxsdCksa249bmV3IERhdGUoMWUzKlh0KTtrcltIdD4+Ml09a24uZ2V0U2Vjb25kcygpLGtyW0h0KzQ+PjJdPWtuLmdldE1pbnV0ZXMoKSxrcltIdCs4Pj4yXT1rbi5nZXRIb3VycygpLGtyW0h0KzEyPj4yXT1rbi5nZXREYXRlKCksa3JbSHQrMTY+PjJdPWtuLmdldE1vbnRo'@;
put 'KCksa3JbSHQrMjA+PjJdPWtuLmdldEZ1bGxZZWFyKCktMTkwMCxrcltIdCsyND4+Ml09a24uZ2V0RGF5KCk7dmFyIGxyPTB8KFVlPT4oKFVlPT5VZSU0PT0wJiYoVWUlMTAwIT0wfHxVZSU0MDA9PTApKShVZS5nZXRGdWxsWWVhcigpKT9sczptcilbVWUuZ2V0TW9udGgoKV0rVWUuZ2V0RGF0'@;
put 'ZSgpLTEpKGtuKTtrcltIdCsyOD4+Ml09bHIsa3JbSHQrMzY+PjJdPS02MCprbi5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBJcj1uZXcgRGF0ZShrbi5nZXRGdWxsWWVhcigpLDAsMSksJHI9bmV3IERhdGUoa24uZ2V0RnVsbFllYXIoKSw2LDEpLmdldFRpbWV6b25lT2Zmc2V0KCksdmE9SXIu'@;
put 'Z2V0VGltZXpvbmVPZmZzZXQoKSxScz0wfCgkciE9dmEmJmtuLmdldFRpbWV6b25lT2Zmc2V0KCk9PU1hdGgubWluKHZhLCRyKSk7a3JbSHQrMzI+PjJdPVJzfSxtOmZ1bmN0aW9uIEUwKFVlLGx0LEh0LFh0LGtuLGxyLElyLCRyKXt2YXIgdmE9emEoa24sbHIpO3RyeXt2YXIgUnM9Z2wuZ2V0'@;
put 'U3RyZWFtRnJvbUZEKFh0KSxLbz1ZdC5tbWFwKFJzLFVlLHZhLGx0LEh0KSxEbD1Lby5wdHI7cmV0dXJuIGtyW0lyPj4yXT1Lby5hbGxvY2F0ZWQscW5bJHI+PjJdPURsLDB9Y2F0Y2gocG8pe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PXBvLm5hbWUpdGhyb3cgcG87cmV0dXJu'@;
put 'LXBvLmVycm5vfX0sbjpmdW5jdGlvbiBrdShVZSxsdCxIdCxYdCxrbixscixJcil7dmFyICRyPXphKGxyLElyKTt0cnl7dmFyIHZhPWdsLmdldFN0cmVhbUZyb21GRChrbik7MiZIdCYmZ2wuZG9Nc3luYyhVZSx2YSxsdCxYdCwkcil9Y2F0Y2goUnMpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJu'@;
put 'b0Vycm9yIiE9PVJzLm5hbWUpdGhyb3cgUnM7cmV0dXJuLVJzLmVycm5vfX0sdTooVWUsbHQsSHQsWHQpPT57dmFyIGtuPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxscj1uZXcgRGF0ZShrbiwwLDEpLElyPW5ldyBEYXRlKGtuLDYsMSksJHI9bHIuZ2V0VGltZXpvbmVPZmZzZXQoKSx2YT1J'@;
put 'ci5nZXRUaW1lem9uZU9mZnNldCgpLFJzPU1hdGgubWF4KCRyLHZhKTtxbltVZT4+Ml09NjAqUnMsa3JbbHQ+PjJdPSsoJHIhPXZhKTt2YXIgS289eHM9Pnt2YXIgWG89eHM+PTA/Ii0iOiIrIixrMT1NYXRoLmFicyh4cyk7cmV0dXJuYFVUQyR7WG99JHtTdHJpbmcoTWF0aC5mbG9vcihrMS82'@;
put 'MCkpLnBhZFN0YXJ0KDIsIjAiKX0ke1N0cmluZyhrMSU2MCkucGFkU3RhcnQoMiwiMCIpfWB9LERsPUtvKCRyKSxwbz1Lbyh2YSk7dmE8JHI/KFQxKERsLEh0LDE3KSxUMShwbyxYdCwxNykpOihUMShEbCxYdCwxNyksVDEocG8sSHQsMTcpKX0sbDpmdW5jdGlvbiByVihVZSxsdCxIdCxYdCl7'@;
put 'dmFyIGxyO2lmKHphKGx0LEh0KSwhKFVlPT5VZT49MCYmVWU8PTMpKFVlKSlyZXR1cm4gMjg7bHI9MD09PVVlP0U2KCk6cGVyZm9ybWFuY2Uubm93KCk7dmFyIElyPU1hdGgucm91bmQoMWUzKmxyKjFlMyk7cmV0dXJuIHZyPVtJcj4+PjAsKE5uPUlyLCtNYXRoLmFicyhObik+PTE/Tm4+MD8r'@;
put 'TWF0aC5mbG9vcihObi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChObi0rKH5+Tm4+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxrcltYdD4+Ml09dnJbMF0sa3JbWHQrND4+Ml09dnJbMV0sMH0sejooVWUsbHQsSHQpPT4oKFVlLGx0LEh0KT0+e3ZhciBYdD0oKFVlLGx0KT0+e093'@;
put 'Lmxlbmd0aD0wO2Zvcih2YXIgSHQ7SHQ9aG5bVWUrK107KXt2YXIgWHQ9MTA1IT1IdDtsdCs9KFh0Jj0xMTIhPUh0KSYmbHQlOD80OjAsT3cucHVzaCgxMTI9PUh0P3FuW2x0Pj4yXToxMDU9PUh0P2tyW2x0Pj4yXTpxcltsdD4+M10pLGx0Kz1YdD84OjR9cmV0dXJuIE93fSkobHQsSHQpO3Jl'@;
put 'dHVybiB0UnRbVWVdKC4uLlh0KX0pKFVlLGx0LEh0KSxoOkU2LHE6VWU9Pnt2YXIgbHQ9aG4ubGVuZ3RoLEh0PTIxNDc0ODM2NDg7aWYoKFVlPj4+PTApPkh0KXJldHVybiExO2Zvcih2YXIgWHQ9MTtYdDw9NDtYdCo9Mil7dmFyIGtuPWx0KigxKy4yL1h0KTtrbj1NYXRoLm1pbihrbixVZSsx'@;
put 'MDA2NjMyOTYpO3ZhciBscj1NYXRoLm1pbihIdCxrbyhNYXRoLm1heChVZSxrbiksNjU1MzYpKTtpZihWSXQobHIpKXJldHVybiEwfXJldHVybiExfSx2OihVZSxsdCk9Pnt2YXIgSHQ9MCxYdD0wO2Zvcih2YXIga24gb2YgV0EoKSl7dmFyIGxyPWx0K0h0O3FuW1VlK1h0Pj4yXT1scixIdCs9'@;
put 'VDEoa24sbHIsMS8wKSsxLFh0Kz00fXJldHVybiAwfSx3OihVZSxsdCk9Pnt2YXIgSHQ9V0EoKTtxbltVZT4+Ml09SHQubGVuZ3RoO3ZhciBYdD0wO2Zvcih2YXIga24gb2YgSHQpWHQrPVloKGtuKSsxO3JldHVybiBxbltsdD4+Ml09WHQsMH0sZjooVWUsbHQpPT57KFVlPT57KChVZSxsdCk9'@;
put 'Pnt0aHJvdyBsdH0pKDAsbmV3IFduKFVlKSl9KShVZSl9LGI6ZnVuY3Rpb24gJEl0KFVlKXt0cnl7dmFyIGx0PWdsLmdldFN0cmVhbUZyb21GRChVZSk7cmV0dXJuIFl0LmNsb3NlKGx0KSwwfWNhdGNoKEh0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1IdC5uYW1lKXRocm93'@;
put 'IEh0O3JldHVybiBIdC5lcnJub319LGQ6ZnVuY3Rpb24gWEl0KFVlLGx0LEh0LFh0KXt0cnl7dmFyIGxyPSgoVWUsbHQsSHQsWHQpPT57Zm9yKHZhciBrbj0wLGxyPTA7bHI8SHQ7bHIrKyl7dmFyIElyPXFuW2x0Pj4yXSwkcj1xbltsdCs0Pj4yXTtsdCs9ODt2YXIgdmE9WXQucmVhZChVZSx3'@;
put 'bixJciwkcixYdCk7aWYodmE8MClyZXR1cm4tMTtpZihrbis9dmEsdmE8JHIpYnJlYWs7dHlwZW9mIFh0PCJ1IiYmKFh0Kz12YSl9cmV0dXJuIGtufSkoZ2wuZ2V0U3RyZWFtRnJvbUZEKFVlKSxsdCxIdCk7cmV0dXJuIHFuW1h0Pj4yXT1sciwwfWNhdGNoKElyKXtpZih0eXBlb2YgWXQ+InUi'@;
put 'fHwiRXJybm9FcnJvciIhPT1Jci5uYW1lKXRocm93IElyO3JldHVybiBJci5lcnJub319LHA6ZnVuY3Rpb24gcUl0KFVlLGx0LEh0LFh0LGtuKXt2YXIgbHI9emEobHQsSHQpO3RyeXtpZihpc05hTihscikpcmV0dXJuIDYxO3ZhciBJcj1nbC5nZXRTdHJlYW1Gcm9tRkQoVWUpO3JldHVybiBZ'@;
put 'dC5sbHNlZWsoSXIsbHIsWHQpLHZyPVtJci5wb3NpdGlvbj4+PjAsKE5uPUlyLnBvc2l0aW9uLCtNYXRoLmFicyhObik+PTE/Tm4+MD8rTWF0aC5mbG9vcihObi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChObi0rKH5+Tm4+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxrcltrbj4+'@;
put 'Ml09dnJbMF0sa3Jba24rND4+Ml09dnJbMV0sSXIuZ2V0ZGVudHMmJjA9PT1sciYmMD09PVh0JiYoSXIuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaCgkcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09JHIubmFtZSl0aHJvdyAkcjtyZXR1cm4gJHIuZXJybm99fSxjOmZ1bmN0aW9u'@;
put 'IFFJdChVZSxsdCxIdCxYdCl7dHJ5e3ZhciBscj0oKFVlLGx0LEh0LFh0KT0+e2Zvcih2YXIga249MCxscj0wO2xyPEh0O2xyKyspe3ZhciBJcj1xbltsdD4+Ml0sJHI9cW5bbHQrND4+Ml07bHQrPTg7dmFyIHZhPVl0LndyaXRlKFVlLHduLElyLCRyLFh0KTtpZih2YTwwKXJldHVybi0xO2lm'@;
put 'KGtuKz12YSx2YTwkcilicmVhazt0eXBlb2YgWHQ8InUiJiYoWHQrPXZhKX1yZXR1cm4ga259KShnbC5nZXRTdHJlYW1Gcm9tRkQoVWUpLGx0LEh0KTtyZXR1cm4gcW5bWHQ+PjJdPWxyLDB9Y2F0Y2goSXIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUlyLm5hbWUpdGhyb3cg'@;
put 'SXI7cmV0dXJuIElyLmVycm5vfX19LFlBPXlpZWxkIGZ1bmN0aW9uIEluKCl7cmV0dXJuIFhuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oKTtmdW5jdGlvbiBoZigpe31mdW5jdGlvbiBpVihVZSl7cmV0dXJuKFVlfHxoZikuX19jYWNoZV9ffWZ1bmN0aW9uIHJuZShVZSxsdCl7dmFyIEh0PWlW'@;
put 'KGx0KSxYdD1IdFtVZV07cmV0dXJuIFh0fHwoKFh0PU9iamVjdC5jcmVhdGUoKGx0fHxoZikucHJvdG90eXBlKSkucHRyPVVlLEh0W1VlXT1YdCl9IWZ1bmN0aW9uIG5uZSgpe1lyPjB8fFlyPjA/d2k9bm5lOmZ1bmN0aW9uIFVlKCl7YS5jYWxsZWRSdW49ITAsIUJlJiYoZnVuY3Rpb24gdHIo'@;
put 'KXtfaT0hMCwoVWU9Pntmb3IoO1VlLmxlbmd0aD4wOylVZS5zaGlmdCgpKGEpfSkoZVJ0KSwhYS5ub0ZTSW5pdCYmIVl0LmluaXRpYWxpemVkJiZZdC5pbml0KCksJG8uaW5pdCgpLFlBLkIoKSxZdC5pZ25vcmVQZXJtaXNzaW9ucz0hMX0oKSxkdD8uKGEpKX0oKX0oKSwoaGYucHJvdG90eXBl'@;
put 'PU9iamVjdC5jcmVhdGUoaGYucHJvdG90eXBlKSkuY29uc3RydWN0b3I9aGYsaGYucHJvdG90eXBlLl9fY2xhc3NfXz1oZixoZi5fX2NhY2hlX189e30sYS5XcmFwcGVyT2JqZWN0PWhmLGEuZ2V0Q2FjaGU9aVYsYS53cmFwUG9pbnRlcj1ybmUsYS5jYXN0T2JqZWN0PWZ1bmN0aW9uIGdSdChV'@;
put 'ZSxsdCl7cmV0dXJuIHJuZShVZS5wdHIsbHQpfSxhLk5VTEw9cm5lKDApLGEuZGVzdHJveT1mdW5jdGlvbiBtUnQoVWUpe2lmKCFVZS5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7VWUuX19kZXN0'@;
put 'cm95X18oKSxkZWxldGUgaVYoVWUuX19jbGFzc19fKVtVZS5wdHJdfSxhLmNvbXBhcmU9ZnVuY3Rpb24gdlJ0KFVlLGx0KXtyZXR1cm4gVWUucHRyPT09bHQucHRyfSxhLmdldFBvaW50ZXI9ZnVuY3Rpb24geVJ0KFVlKXtyZXR1cm4gVWUucHRyfSxhLmdldENsYXNzPWZ1bmN0aW9uIGJSdChV'@;
put 'ZSl7cmV0dXJuIFVlLl9fY2xhc3NfX307dmFyIHpvPXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJlcGFyZSgpe2lmKHpvLm5lZWRlZCl7Zm9yKHZhciBVZT0wO1VlPHpvLnRlbXBzLmxlbmd0aDtVZSsrKWEuX3dlYmlkbF9mcmVlKHpvLnRlbXBzW1VlXSk7em8u'@;
put 'dGVtcHMubGVuZ3RoPTAsYS5fd2ViaWRsX2ZyZWUoem8uYnVmZmVyKSx6by5idWZmZXI9MCx6by5zaXplKz16by5uZWVkZWQsem8ubmVlZGVkPTB9em8uYnVmZmVyfHwoem8uc2l6ZSs9MTI4LHpvLmJ1ZmZlcj1hLl93ZWJpZGxfbWFsbG9jKHpvLnNpemUpLHN0KHpvLmJ1ZmZlcikpLHpvLnBv'@;
put 'cz0wfSxhbGxvYyhVZSxsdCl7c3Qoem8uYnVmZmVyKTt2YXIga24sWHQ9VWUubGVuZ3RoKmx0LkJZVEVTX1BFUl9FTEVNRU5UO3JldHVybiBYdD1rbyhYdCw4KSx6by5wb3MrWHQ+PXpvLnNpemU/KHN0KFh0PjApLHpvLm5lZWRlZCs9WHQsa249YS5fd2ViaWRsX21hbGxvYyhYdCksem8udGVt'@;
put 'cHMucHVzaChrbikpOihrbj16by5idWZmZXIrem8ucG9zLHpvLnBvcys9WHQpLGtufSxjb3B5KFVlLGx0LEh0KXtIdC89bHQuQllURVNfUEVSX0VMRU1FTlQ7Zm9yKHZhciBYdD0wO1h0PFVlLmxlbmd0aDtYdCsrKWx0W0h0K1h0XT1VZVtYdF19fTtmdW5jdGlvbiBmZihVZSl7aWYoInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBVZSl7dmFyIGx0PURjKFVlKSxIdD16by5hbGxvYyhsdCx3bik7cmV0dXJuIHpvLmNvcHkobHQsd24sSHQpLEh0fXJldHVybiBVZX1mdW5jdGlvbiBKZygpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9u'@;
put 'IHJzKFVlLGx0KXtVZSYmIm9iamVjdCI9PXR5cGVvZiBVZSYmKFVlPVVlLnB0ciksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLHRoaXMucHRyPVU3ZShVZSxsdCksaVYocnMpW3RoaXMucHRyXT10aGlzfXJldHVybihKZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoZi5w'@;
put 'cm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1KZyxKZy5wcm90b3R5cGUuX19jbGFzc19fPUpnLEpnLl9fY2FjaGVfXz17fSxhLlZvaWRQdHI9SmcsSmcucHJvdG90eXBlLl9fZGVzdHJveV9fPUpnLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3o3ZSh0aGlzLnB0cil9LChycy5wcm90'@;
put 'b3R5cGU9T2JqZWN0LmNyZWF0ZShoZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1ycyxycy5wcm90b3R5cGUuX19jbGFzc19fPXJzLHJzLl9fY2FjaGVfXz17fSxhLkdyYXBodml6PXJzLHJzLnByb3RvdHlwZS52ZXJzaW9uPXJzLnByb3RvdHlwZS52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEUxKFo3ZSgpKX0scnMucHJvdG90eXBlLmxhc3RFcnJvcj1ycy5wcm90b3R5cGUubGFzdEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIEUxKFc3ZSgpKX0scnMucHJvdG90eXBlLmNyZWF0ZUZpbGU9cnMucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oVWUsbHQpe3ZhciBIdD10aGlzLnB0'@;
put 'cjt6by5wcmVwYXJlKCksVWU9VWUmJiJvYmplY3QiPT10eXBlb2YgVWU/VWUucHRyOmZmKFVlKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6ZmYobHQpLFk3ZShIdCxVZSxsdCl9LHJzLnByb3RvdHlwZS5sYXlvdXQ9cnMucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbihVZSxs'@;
put 'dCxIdCl7dmFyIFh0PXRoaXMucHRyO3JldHVybiB6by5wcmVwYXJlKCksVWU9VWUmJiJvYmplY3QiPT10eXBlb2YgVWU/VWUucHRyOmZmKFVlKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6ZmYobHQpLEh0PUh0JiYib2JqZWN0Ij09dHlwZW9mIEh0P0h0LnB0cjpmZihIdCks'@;
put 'RTEoRzdlKFh0LFVlLGx0LEh0KSl9LHJzLnByb3RvdHlwZS5hY3ljbGljPXJzLnByb3RvdHlwZS5hY3ljbGljPWZ1bmN0aW9uKFVlLGx0LEh0KXt2YXIgWHQ9dGhpcy5wdHI7cmV0dXJuIHpvLnByZXBhcmUoKSxVZT1VZSYmIm9iamVjdCI9PXR5cGVvZiBVZT9VZS5wdHI6ZmYoVWUpLGx0JiYi'@;
put 'b2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxIdCYmIm9iamVjdCI9PXR5cGVvZiBIdCYmKEh0PUh0LnB0ciksISEkN2UoWHQsVWUsbHQsSHQpfSxycy5wcm90b3R5cGUudHJlZD1ycy5wcm90b3R5cGUudHJlZD1mdW5jdGlvbihVZSxsdCxIdCl7dmFyIFh0PXRoaXMucHRyO3pvLnBy'@;
put 'ZXBhcmUoKSxVZT1VZSYmIm9iamVjdCI9PXR5cGVvZiBVZT9VZS5wdHI6ZmYoVWUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxIdCYmIm9iamVjdCI9PXR5cGVvZiBIdCYmKEh0PUh0LnB0ciksSzdlKFh0LFVlLGx0LEh0KX0scnMucHJvdG90eXBlLnVuZmxhdHRlbj1y'@;
put 'cy5wcm90b3R5cGUudW5mbGF0dGVuPWZ1bmN0aW9uKFVlLGx0LEh0LFh0KXt2YXIga249dGhpcy5wdHI7cmV0dXJuIHpvLnByZXBhcmUoKSxVZT1VZSYmIm9iamVjdCI9PXR5cGVvZiBVZT9VZS5wdHI6ZmYoVWUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxIdCYmIm9i'@;
put 'amVjdCI9PXR5cGVvZiBIdCYmKEh0PUh0LnB0ciksWHQmJiJvYmplY3QiPT10eXBlb2YgWHQmJihYdD1YdC5wdHIpLEUxKFg3ZShrbixVZSxsdCxIdCxYdCkpfSxycy5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9cnMucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEUxKHE3ZSh0aGlzLnB0cikpfSxycy5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9cnMucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PWZ1bmN0aW9uKFVlKXt2YXIgbHQ9dGhpcy5wdHI7em8ucHJlcGFyZSgpLFVlPVVlJiYib2JqZWN0Ij09dHlwZW9mIFVlP1VlLnB0cjpm'@;
put 'ZihVZSksSjdlKGx0LFVlKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJzLnByb3RvdHlwZSwibGF5b3V0X3Jlc3VsdCIse2dldDpycy5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQsc2V0OnJzLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdH0pLHJzLnByb3RvdHlwZS5nZXRfYWN5Y2xp'@;
put 'Y19vdXRGaWxlPXJzLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIEUxKFE3ZSh0aGlzLnB0cikpfSxycy5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1ycy5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbihVZSl7dmFyIGx0'@;
put 'PXRoaXMucHRyO3pvLnByZXBhcmUoKSxVZT1VZSYmIm9iamVjdCI9PXR5cGVvZiBVZT9VZS5wdHI6ZmYoVWUpLGU5ZShsdCxVZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShycy5wcm90b3R5cGUsImFjeWNsaWNfb3V0RmlsZSIse2dldDpycy5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0Rmls'@;
put 'ZSxzZXQ6cnMucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGV9KSxycy5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1ycy5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbigpe3JldHVybiB0OWUodGhpcy5wdHIpfSxycy5wcm90b3R5cGUuc2V0X2FjeWNsaWNf'@;
put 'bnVtX3Jldj1ycy5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbihVZSl7VWUmJiJvYmplY3QiPT10eXBlb2YgVWUmJihVZT1VZS5wdHIpLG45ZSh0aGlzLnB0cixVZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShycy5wcm90b3R5cGUsImFjeWNsaWNfbnVtX3JldiIse2dl'@;
put 'dDpycy5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3JldixzZXQ6cnMucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXZ9KSxycy5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0PXJzLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gRTEocjllKHRoaXMucHRyKSl9LHJz'@;
put 'LnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9cnMucHJvdG90eXBlLnNldF90cmVkX291dD1mdW5jdGlvbihVZSl7dmFyIGx0PXRoaXMucHRyO3pvLnByZXBhcmUoKSxVZT1VZSYmIm9iamVjdCI9PXR5cGVvZiBVZT9VZS5wdHI6ZmYoVWUpLGk5ZShsdCxVZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShycy5wcm90b3R5cGUsInRyZWRfb3V0Iix7Z2V0OnJzLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQsc2V0OnJzLnByb3RvdHlwZS5zZXRfdHJlZF9vdXR9KSxycy5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyPXJzLnByb3RvdHlwZS5nZXRfdHJlZF9lcnI9ZnVuY3Rpb24oKXtyZXR1cm4gRTEoYTll'@;
put 'KHRoaXMucHRyKSl9LHJzLnByb3RvdHlwZS5zZXRfdHJlZF9lcnI9cnMucHJvdG90eXBlLnNldF90cmVkX2Vycj1mdW5jdGlvbihVZSl7dmFyIGx0PXRoaXMucHRyO3pvLnByZXBhcmUoKSxVZT1VZSYmIm9iamVjdCI9PXR5cGVvZiBVZT9VZS5wdHI6ZmYoVWUpLHM5ZShsdCxVZSl9LE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShycy5wcm90b3R5cGUsInRyZWRfZXJyIix7Z2V0OnJzLnByb3RvdHlwZS5nZXRfdHJlZF9lcnIsc2V0OnJzLnByb3RvdHlwZS5zZXRfdHJlZF9lcnJ9KSxycy5wcm90b3R5cGUuX19kZXN0cm95X189cnMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7'@;
put 'bzllKHRoaXMucHRyKX0sX2k/YTpuZXcgUHJvbWlzZSgoVWUsbHQpPT57ZHQ9VWUscXQ9bHR9KX0pLHp0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGpBLFV0ZTtmdW5jdGlvbiBSRXQoKXtyZXR1cm4gVXRlfHwoVXRlPWZ1bmN0aW9uIEVFdChjLGwpe2Zvcih2YXIgYT1bXSxkPSshbCxo'@;
put 'PTAsZj0wO2MubGVuZ3RoOyl7dmFyIHY9bUV0KGMsZHx8bCk7aWYoIm9iamVjdCI9PXR5cGVvZiB2KXtmb3IoZD8obD1udWxsLHYudy5sZW5ndGg9PXYudSYmKGEucHVzaChsPXYudyksZis9di51KSk6KGEucHVzaChsKSx2LmU9MCk7IXYubDspe3ZhciBNPU1FdChjLHYsbCk7TXx8cXUoNSks'@;
put 'bD92LmU9di55OihhLnB1c2goTSksZis9TS5sZW5ndGgsZkV0KHYudywwLE0ubGVuZ3RoKSx2Lncuc2V0KE0sdi53Lmxlbmd0aC1NLmxlbmd0aCkpfWg9di5iKzQqdi5jfWVsc2UgaD12O2M9Yy5zdWJhcnJheShoKX1yZXR1cm4gZnVuY3Rpb24oYyxsKXtpZigxPT1jLmxlbmd0aClyZXR1cm4g'@;
put 'Y1swXTtmb3IodmFyIGE9bmV3IEF1KGwpLGQ9MCxoPTA7ZDxjLmxlbmd0aDsrK2Qpe3ZhciBmPWNbZF07YS5zZXQoZixoKSxoKz1mLmxlbmd0aH1yZXR1cm4gYX0oYSxmKX0oZnVuY3Rpb24gREV0KGMpe2xldCBsPWMubGVuZ3RoLGE9W10sZD0wLGg9MCxmPS0xO2ZvcihsZXQgdj0wO3Y8bDt2'@;
put 'Kyspe2xldCBNPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSEjJCUmKCkqKywuLzo7PD0+P0BbXV5fYHt8fX4iJy5pbmRleE9mKGNbdl0pO2lmKC0xIT09TSlpZihmPDApZj1NO2Vsc2V7Zis9OTEqTSxkfD1mPDxoLGgrPSg4'@;
put 'MTkxJmYpPjg4PzEzOjE0O2Rve2EucHVzaCgyNTUmZCksZD4+PTgsaC09OH13aGlsZShoPjcpO2Y9LTF9fXJldHVybiBmPi0xJiZhLnB1c2goMjU1JihkfGY8PGgpKSxuZXcgVWludDhBcnJheShhKX0oJ3Y3I2FTWHAwfEQ1Rmo6Rz4hWU00VTJodHo4ey9ieX5sdExkZzcsVXFtKTJvOWBZVG1G'@;
put 'e34saVM8ajV8Ql5WaVUpLC8/cDJveGQ5ZHBMRCw1czlOYWM+Mmg3JntoR21mdy5bMkRaeCFwW1M0IV5DNEx5ck5hdCk7THhFUWxfZy9DcH1seTNDT14sJm4peWBXKUFxWT0lanhNJClqcEt9dnluZVB8XXlteSpiTzUkNn08eyVjM0Uvd1g0VWJfeXIzLmtyOTZAL3hfdyV5JW0/QXFIc1kxQjtu'@;
put 'T3c+InB2XS5MITomVkREXnk+al1vX1BAL2o8T2RARllIISoyY0QoMiUoLms7K2I7bTliInA8cGJfJHxFfGM/XWddTWpzT3xCM0t8ejFjJkRTUytNV0t9MDsuRWM3KjklYyU6Jjc0eik9R3NSTH0zODpSX2hLPXs0ekd7TG1VWjBvWDhiZXt6Oj1XIyFFPlY0JDVtY188V11JaV8iVjwzPD1FX0Fx'@;
put 'akk5I19YYmVIZUM+aiVUc0t7dDN6eVptT2g1c0JlQTsqNG1zfG9IeXc3XTVjb3QrWlVJNj9+Mk18Tyh3bGp6ZzRHTmN6PHw3XyhKImNxb2RRTUU9dWFgW11NKS5oUSR4XzdJbX4hUjpNYUZwYnkpc0MkUm4kYW9wcUhaXzF9Q2siN3FvdU0pLnRHM0ksOj5uQ3lbO3xrVmd+eVAqVFR0bEZzMmN5'@;
put 'I0A4Myp2NjE5Q3IieCwvXShHXXw+fU5+Z1h1VTc9S1Zrclp6JkRaZDdzNUF7bU1vR2IrejhVTmpDQUxLeFZTT3l8LzZ6ZktaXyMuN1BUR29hdzI2VTN5LjpbS3VvPk0kPn1afT5rUTEhSWFnazt0Pzx8bz56WkM3Nnk8QnJ1cjwqejhgezsycnomNkQvNHpqclRUWmh7KUcyQXt5I1pDTXxoMXwr'@;
put 'ZWNOVzQoUTVoPjQ7bmFGbkojQ2xROUc/O1E3PmJFVFFwRz46bF5HWGE4TCRGPXBHPXFHRnc3dFYyMjglKTF6b0dhczc/OHpiUCpsP0xZVmclSnprPDB8LyQ1JDc7IVpSRWIkWGAwIT5YWnNSKXJvXU13V1UuWTt7KU04TWpnLklzNV1ZODpJZnJ7em86Nl4lQG8qWDxsMHUyJVpNQDReUzosOXho'@;
put 'eHs2KHckcCVKdldvKnV+c1NMe3xEQEpsRVEoS2BDYloyI2BVRGldc3I4fEsjdXpAJUEhdUV2UysvUUlHb0o/RzEmJj9LI29ZMUprbm0vPUxhQWMwJiZMT3FmWTE+UDB5MlNoZ0hwPzN5L2p4VHc1NnY7fXY2bD1MODBDMlVHVmtwLloybD5ydGNQLk9wXSMjQlBwSztlMm0kME1MIzo+PFkiRH09'@;
put 'U3hWOElON3cwO1Q3P1M+XnNkZ3NFKjJhKjFYMWM2Ji9FPkZsNG09QmVOOSFoQm1bK1NtUmY1d3lpW0k4PV1EbyhWXnl3U19yXW9Ke0x7QXwhI2dEQyZBY0hQdnMiUyohdD5MYWduZjpqPE9MWVJSbkFQMSFreWckVk9aXyY/O0hzNjY/NDJQPW12Llo+Mjkza2E9dWUzZ1lwR357fm5LZHcqKSZJ'@;
put 'c1Y9NXouLk9wcVA8U1U/PGIueWUsWDVLQV4lL11xclNfPV5nOXJGPTpdM19edz5EflM1TmJiaUVqMGw8PSM2YGY4TndHQ1BWYXs9KEZeS1tLUW4sRXs2NlVpY1ReRmtmZ2Qkd2wlMj94eihXcDxbOmE7cyg9UUtOWUNnPTp1YDd5JSVQPCxFNyVLZWBpW0xVazxyaXJ9RjcuMl1Gb1tLWW4rYHZx'@;
put 'WlA4N2cqVnBOVG51LCUrOG52bFt0TCMhQWxwVDsociFreUpYVHheZnFySmZWYWVFaV9eOyZAbFp2QFp3T1U8cnpmLDZNU1ohfGF4Jk5XQW5KUUE5RENuVjwjNUgzIjlAYVBbbXlsdyZBSkM5LlsybjsrTjBZOFY/NGxgWzhANjBZK3JwUHxOZSxmJGVzXmgudTtRU2hHL19BYGBsP2FOZXxhfHM6'@;
put 'LzJ9ezw1P3NSJm1qa00wNVRYQGZEW05IUG9Hc1F9e2FSbkYxdykwRH4sJks6YUt+WykwJFFPRihVO0FlfGdMOEgsPWVodWJKRmFMIzx6e1JdJUZQJDlbXjo4VDxaeUcvNyEjSTd9ZHBaXUZObF9TVSswWG4+aUtjeEpxZklSRj1LRVgzTVhze11JcntYZFAod0wqVzdXU25DNkA6djQrWFRQRmJu'@;
put 'WmsydFc2L1pCL2prfW5VQTlSbFQ3MClibThTZEx5SlZ+eTg6ejBXLCVKVF9kSC94VkVrYVJnWn0jMndUdlZ5ZjFuc0xAQkgreWw1YGk6YUdWOSMoflckaT8vTnNoKzVNaXlRQld+VFpzfTQ1N2d9OGUxaiZCX0JuTCQuJmJzKDhCcVRnUSVkZmsmcmtzO0AhVUZFPngjM2JzWz5QOF53aWdySVda'@;
put 'UUojYSFrSCwhemRFMztOIVErL1Iwc0xyMG4kXjxweChtTT5iVCNFQUtAQlZfJCsmaDRnNHdHWXtyPDJKI2tIUnNQbTFsKHcuMkw5dSZqVmZCUmBbV0g4VXliK2ByfG9GdXhwR2pNeFV4W2RoUmc8UXB4Vm5wVytRSURGQlQmcGw5YilLOSw4VC4oIX5XSigsOHR6allPNU86ZFglX1N7Q0oobEsh'@;
put 'KnAuZj9TRXl3IUw6UytPIz4xN1pOZTtFYzdqW0xUM110aG81KFZZe0tnZl89XnB5TF4/U0BldFY4TDUyLjpDMXglMzAlKn5uQUUwXjFmNzE+d2E4Z1l7QElDfHt8bCM6TyV9eyw9RH4+OVBvajk0aVU5RVdoX2FtWWp5NU1iblk7bXl+X2lwYS9iRStmN01iZHtgckJdVnd3PjRdOG9YTlEzM0p3'@;
put 'bCI1LlMkWDw3fXx7PDFTJGZOZjUka0hWZzhAaGVKcDRrciRtenomQHV5N3RWXlc2QC50USJ8MzplOFZLTSx3cmlxUHkyXjdMQHxjYFtYMXY0fVNvQ0lkVlNvQ0lkJFZDQV9eMHpmUFhvNDZdTEhdXyplYDEmZiprTz1tKWxuL1VlaV8sNSNKOCZSR3d6UDsyfT13I2Z6fXZFfCYmVmc5IUtoe0ZS'@;
put 'S3NValVkTDZORDpCYDg8TG87bChTRVV9ZHp7bkImQl4oKWh8PGdDL1I8e2dTI288al12WlN7RTwpeiEqXWExdT86Ilh9YHg3I1l7QEo7NzdiajI7JFYjZSpGPDJmQ1pyQV9JZ05lI31vYWxIQjAiOE5ecGZrTEZBNklCMG4qPVROZVREQjojRWwoM3F8K3diX09yJTtdVCt4bzw6NCU8OiRQKjQo'@;
put 'dzc7NUJeLCo7eWxnezJmeSVmMG56NyxLUypWbCw/aks2KkwvYzB4a10reHBvP0c/bEJ8LyErOEBQPFlpcjA2ekhJb0FyMT87IVp1LG8sSyR2W2M5OVtaU0g9Vl0mMFk9eiw6aWgpVV1taXJ1TV03bXkjNUpyInUobWk4ZDNPdyhtSE5AWD94Vz8sVWdCcGg9RS99b30ueDxOI19MKVl+TilLOTNm'@;
put 'NTtDc1Q5ZmRxK3tqLHEmMj8iTU1VbW1aPkwjLEltMykvUlYuOkA4QHJCQ0UlREI6cEdrRj9TfHpEMV55UUYuVnguZ2VdakhOW0QiRGd6an1RRlV2XyZWZ3lsRnBKUW1sfUQkLz0zRjlTcmBkOyFuZnpaa1IrSz1je0k2SVtmfGlDc1hVQWdga184eFV6JnEpYGRSOH11OyFYYlRnVGkyN0ZXXzsk'@;
put 'djtwKSVVfml+OW9rMnVuSyRdY3ViTyE4KzF9fXB5bFhGZytiOnQ9UU8oNTlaRFVXYjwjaTgqI3V3Q3crUyxranE0OyVLNzhWMkwvZ0ZTWn19ImJTem8rMkNZRHlnbEtdMkY7dmNkPDhbJD1jckVnXXxoZXNGK0Z3TDFnUDJ5O2kkNkpzO2ljQCMyZEAje3cxTmoyeGdNUFM2ISVuT0I4VHljMT9t'@;
put 'TT1BNiZMVG1KPDwjUV1kL00mbXksPTVUYi5bdVY9KzgqbT07ODZwJCJ1X09RYm04NHJ5dWlkPjo0emdzfFpCMywrfDx6RGhxS31tUnpSIyo+T3AyUFNAOFZmSDM0JV5HREclRUwuRVM0YjE2YmQ7T3xfal0/TFNnPXdNTV1tTkxicltOMTh7Yi96djkqOjIjbDdCN21yKFQ0OjtkN3ZCXVVYezhK'@;
put 'KVMjPTFncUVLLjgyLmtAfjhtOCo6TVtPZ0g5Rn08PXBkeDd6VSFEPFtKfTgubD9GKXcpeitkdk58cm1CNypdZGZCYlNIKUtPKm9YInFjN3Q7dlZaLGczQToueCwjclIqS04iYCokN15eYnYoNDZvMk0qNzhSUGw3bGY6K1NRLDNgYXM0JDREcSRMZW5Zbnc/NS9qXjFeXk87Y3JYfDhUXXpeKGdx'@;
put 'bCY6dyMqIypkMClVQXNTWE9nN31iT0thWmsydCorKDo+R24wbCFadmk+dnhDTXZQcjtpe3E8dWQ0ZUElNG1sfT5LN2F4PT94cllUeyZ4NHQrZFtIOi9bIzNjSUksOno8QG1BeDR0LDpOJHU3cVgxLzcxa11AQ1NpViokYUx3JkxyUXo9T2ElVnZBL0l+R0heOThDckY5RGIvJH46d0NacithIm5z'@;
put 'clZkYE0/M3M2aD9AOltWWng2ZW0mbSJNWkZ7TDdBezVCeCY0enhkY0hHbXQ9aWwyVW8hd1dBPmxrOTpueWVNSTlKOFQ5NSVCe0YqRVd+RGhMcVJSSWRQVTZ8K0xIaHdAfEpiQj0hUFs0MEg9Sys4OlYhKDdzPmp1e0NxKlhSNzI+MHYmNWVKRldaOUF4Kmx5XTpEdVl5QlZzJU1pLk9AdDZCfkZK'@;
put 'JExybWQrRyQzTSQlJjlAIzxqMk0sPSQ+K15LOCJyISRCJkJ7MHkzb2dlQHAyVnY1QnRHJk98Wy9zVj94ciRLfEF7V3ojVHZ5czYwXis1T2xybUhRP05oVWdPezxbI0ZvfDVhay5xMj1LaEEzMjZ0Mj5GRytdUmthU18kKlswKF5oX2Aqc3IjPTgwMy5jOmUmdDxpYnwqfGJUPXpiTipAXlJ2N3Ni'@;
put 'MnRUTy43V3ZYYTlbT0ZMMGxQXnRtMl19aUJyIUNPbWdPNklhbyIkeHlMfWEubUArTn46Y3w2VDlJUkh5Ljl+TF5gIWspaj9BQz0/VFpoXmlkeSNWOXg1Pnc7b11tSFlac3FyWzp0PT0zdl1admZSfHBMcFluND47NG08SSVLclFrJGRAU11vYi5Ic1coIjMvbGluOURyY2ZfL1p+ZlY6K2xUXyJO'@;
put 'b082RlN+fVA4RHReZ1pMV28hKiM2WCU6byh0dno0QTRCL3xhajohU0d9e1YkOz1qMSs7KlFYWnJPZ1psQGI4MDhKaDNETjx1VGRBOFBFMiVCXVVEelZYXTo9fU5YN3A0elZqYFh5U1owPnhdeT0jPlVmP1M2TT4/bXIqTjE+QCpvYXVqOiQoVkZXfTI+LihlOyhybC9PfHBPRE9re2NCXy9GVlh5'@;
put 'UGg/X0ZXKV8vcXpwP2MkO0VjN2sue2xUe3xKfSJtSHlCe3hsUEpmYzM0T3U1LnBTNyY/QUlxJFBvdEc5aEtONTx2VHhHQ3FOa2tEXiF5P0hyT11hWmtldnMyYT5pN1Yrc3xaPFpFZ0lwe3p3IWBZJEhvPTRASn5ueSQ+PCs4UFpfdSYsbmdOOSE/IyJ8KWd6UyJxSztEcl8uJnhRfE5ENn1seSZ1'@;
put 'fns6c2N6bDRkYFEoOi9fZVMhc100T2Q4fm58YSJmNnIuKSNWd2VreS4hbCgmMWM2antVW1AxODZ0ZFhfSiVFSl4hUFJUbTxeITJdN0RvLDE6QE44Mk08MlY4RjdsY3pvMXVZJDkhZ0Q8dTdARmE2SjtlQGshIzVPMjVAZnFyQjZeTSVWPX1YKm8yfVpSYVZGPU9RYi96RFZBYHNbdWFIOT13R240'@;
put 'VTV6Qj4wZkxtITBuLiQpPHJmSjxta2wvT14xT2dGXV9eW2siZDVzSzteYmA/IWlpZVY5T21KOz5kbkx3W3B5U1pIJmB1Ki9oam5DPkpgRFgrVmNBbXpIOjNhL05SYyJ9RHJUNSp7OX0oTEIrU0EkZDQ7I3Y4QGhEQnxFJEA9Snw5eHQ3Q1ByJmFbaCFBO0liLD9qTT4qKHBCI1hMdnw5bSI5RXVh'@;
put 'aTYvaHA1ekZhaXExIj58OXMiYmFNTDZtKGE2KEFDc2dYOzpoREIrUUZCXzliP0hDXzxLQzpoX0E7STAwfGU7KFdDZ2siU3o4ayI1RVBnQWdeUTN0QkNERXFtQEA7aFVCeFBQZ0B3XlE3IktGeV1+bHQrW3oqd1hQO0hoPHorb1kvSCh6IThqK0V1bmZLdTMhdkxuRVpiSVRTaldNREk9cmtFfTkp'@;
put 'WVlLdGBlPDErYkI2VzRZQjwuKGt1d1UrcE9HfGVTdElESzp0cC9oLkEvR2xSfTthIiV0RlFbPVk7OnlheFZWZjtTamVNKElAcmx4YmpoTUFKMXNrRW0rSk4pRmhEZDw6eUFEL3dKMVNqLHRFRlU2SzFTai50RUYvTFJRbCs0dWxsVmQ0IVE/KENGOD5pNCE5TFtHbyFRXm4rK3VxbVY1cjFVamxY'@;
put 'OE9oNTNSV3opRCo4UF5vK3t1bmZxNlVqdVhXUSFdM1IrTC5KSSg3UHErfVliUnhKNFIvTCMwN2o7SDhSOkxGS09bVHZWandNWUo1N2Q8X3kqRWA8XixyK3B2dm47SFdqKylzRmByNWxtK3h2X29lZVdqL1glUH1eZStVamRCTUkmQDd5cCtIWnZWRj08Vjx8KERqWXNrWXwud001KW8+Vig/K0g0'@;
put 'TX0zQj9MSSpgTFZLPypLaEI2cnIqY1JWWlp8V0NzL11LW19CSUdiQTdwblMpbVQodiZyeipNaGl1NnIzKkxVc2thfGRbbTNocSQifWJyfDZDc21zayhyJSoyajt8by5hfHR4My50W2F8OkNyYyRqOHJvdTF1fS4wX09KfUYqMDVfSEd6UjtWXz92TWl1N3I0dSU6VlpjfGZENVNeS1Y/aVRHbztW'@;
put 'fD9fTlgjN3I2QEpPIkc4cl4qXmNza2R8KERhZl8zc3R+RDAhckY2XzxIQHF7M2E/SVJAKVVqSlgoSnMucTFJaX5FImpSTno4SClNS2ovQHdKZlB1I1NeZnY4SykjSjImKUhSZld1X1QzenY4TilVS0Q7WGVSZmR1T1ZiLHY4a2lpRil7TTg5ZWY5PW4uRH5LPHc8XXFnKD9XMHtQLkBpZyk/RFFN'@;
put 'QGxnRlhrbml4YWpWYFRkfCQqKlVRVHA/Kz1hOj9sSDtuLEM3PzdGWVlrW1hKc3gvbEp0NTswbkFEOXVHTypMSkkiJG91LlpdXV5dRUh2Sz4uR05HcSM9V08qYVtBVFY+TFIsYU93d1ZKZGxIT2kkaiNaNFlAWSE1V0J3fCl6THZuQDJnL0VYUkNNUWAoZHNWfD8+eygqRUdUWVlWRm8ia2t9WEVi'@;
put 'VSkySFQlMCxhUVM/M0p8JDpdOyRSdnIzNzN9UTBxTTx7WF9uLkR5IzpdLyQ8dVFoN0htZzFHI1l0RmwsaVMsX0YqSmlISllZQE5VYSpGLnU/VHxYU0d2dWtNbTZIT2N5NTF9KVRHN3VaTmFlSG0iNFYiK19fdmpYUEhEPU0wazZpaXxKcDcqW3dpPkZdQkdHT05bRHNmcD1+TE1SV0ZdXk08filW'@;
put 'R0t2fVF3dyxUYio/VDBXWD4qTXU/Typ5QXxxYVhbRiE0O1NFR0wmWHE7JGZSRURveEdPfTxGeHhuVHU0Skk4IXUrYS5BcWd0d3B3I2lmSm5lOFlUJkFHRFl0TE1hQUUmZ0dPWVlrW11JfDE0O11GU057RS86Z3diOUFvRHkja3dZWTlmP25KO0IzZSFuPUVNUTQmSkkyZyopSlVxMmtOVD9jS3E8'@;
put 'M2V9YWA/MEshQDNlQyUjdmlyYzB9KXVMTUM4MWM4LyRbKkxPN3pTUVY/dEg+Z0pJNW5CRTglOl10ZzApKVROelQ6c3F0dzYpSUpYW0FZSzdEPzFFUG1HbUE1X0ZHWnBKVTpOWnhpYEZ2Q3VVWWdLNzFMUEZMcilrQSpjd2NCREVHSWpxOyx0aXZxJVgrS2s+clBDZikoe0FSUG9ZRW5Ga11RWiIi'@;
put 'QlRmJmEiUXAic0RWNX5sNShbQiZlKTA6aFVCQEpSKiJdIlE2dDFFPVtpNjtoVkJlSWoscUlOdFBDbmooLDEoSUNZS0I9W1FIaVApZXVWRXtpP0ReOTJ0KURhVXshXzlBKTZDIXE7I3Y4XmhBLGtZT0loNTMheExMSSElPDBTaiIrK1lnU0Q5OFBvK05OcklsMy9JbGpAfGlDX1tdS2BfcUY1ZmBL'@;
put 'WT9qUWhCQmZMdUVUPiFVOUE/W0Q0JjM7dm5iQ2gmeCpqZ0A/SUciODpsLyQ9KkFQJDFiUDokUHZKbUNDQSpBP01Lc2Y5KklJdm5RLFBTPT84MH4pd0xnQ3dUW2ArX0RZMExieDlSanRMZnxYN0wjeHBONiFAVH4pJkx+RFdoYDVuZzpYMEkoI3NjSCo6TCFFSWtqfFBWPExuRmcmNl00KF5CTkZu'@;
put 'KlI5NldjP0FEMz1TQ3tRKEw2QXYoIk94Z3N4dEUkaThwLz4xaXxQOiZ6KntBfiMmajVyR3g6QmgxN3AuPlBVYWE9SjB2N0d7XUpteigrKHJYM3JyQypDJFEvUDNfeUp3MGxoTCk2QVY7Qm19PnZVVU07JjcqTkR+I0JteSh3bEBnPCZpdVRHYGwzODJfXTlkKXkjdjtvWVhNa2NfSWR+YHg1RV8l'@;
put 'cVlpT1FNU2lpYUA/YzhjM0czUkhYZD5HSVJnRHlPOjo+dmdSITdmZGcsZ1B1QFN5OWd1cjc8fi4qcjY8QGpsVG42ZSQ1NDtvJWRCOGlZZ1B7bThkdF1PZyQ4Mm94XXUkSms+N0I+RyE/QjxuSnEuOU1QLkcqcTdGKiI4MT99X0dHU1dYdW8uVlMuOHd8UlF2VEhkZH0wOCxOOW1XRn5SKjQlO184'@;
put 'aXRUOWlwNjcsOHdhWSIxeiZBcXFyM2MxNjtFek8lTE4/NSxMckxlT3x3eVh9L2NdLDg2Y3tSO2A3bzpsd05sMFNGfSFDPi9PXXZwJiUrZ04hZGRVbWh6Ukl5ZzlpPjpLcjFjaTJoJmE3M1NxUmU6elRrYjVzPW02bzIuNz53c187MTZ5Vi88QWUhbCVqISpMfCQ2QDpeOzFOTHxrPlJPY1tLVXds'@;
put 'OGFtYjE2JFNmK2JMJEFOdi55Qi5zd0IuQWt2YEpbdmBwdXpMS01OQl1DSWRRXlkkb0ZYfHRwVEBxblI+MHdBZVZBVD9gUFU1RUlgQm1LI0M7RXQyMTR7dkImMjZjVC8ldSQ3bzVzRyFqLltbOktyLGhwOURJQCkybmZvaUg3aiprWjFVWTRSOHomM0NoPVJreUMmJTxkQiZ2cWdVODkrIzdAOGdC'@;
put 'JlRLLCNwOFF7aGJ6T35mIzheaCpTel9aRnVARn5vb2ZVQkg0JlkuKUwiUGgyay8zV0ssbFVULmUidThEVmRvdF5WcGcxWXVZflJaLGtlc1d5QWhecGclSjleRj40O09we3VRWEElYlRxWS82clkmKGFtN0VZaTwrI3FpQi55U11LZEF3fWs+MCpiK09eOCZ4QzBMVCtacz1teHJYLlo+OVNAMkpO'@;
put 'eTo7T2YrQUEoIzROLkd+MDc6el5WXmd4JGkzSFEzPEZ5X2hVTT9yXkVWIkkkVkEyTSghb3lbQT4sdkVyTyF4SVFdcntwdWV8fjt6X0QyMkxie1h+PFdJUCNVdypRUTZ5WnVHIWNIRF5jWzk9dVlaKy5GK2NpMkclQ2drXyEwWGVTd1BQeUs3RE8pZFhBQWRkZj5DZmRVTD9SYkhlYFM4MWhiOnhu'@;
put 'M3NgbVUqcGIkaSZXSXVXKHE6b2tFZVIwKHVnP1BvcW9NL0JpRHhSO2NiRFtOPjBhW2N9LjthWSMyUSV4SWZ3UElmcyZ7R2AuSnNYWDsmQTNzdHcuUDFyWlp6Pjdvd2c2KnF4KTBZdV0sUjxzcnteXXQsN1Qud0drS35TL0JxQkpyRlIye01yTHZbRnJEXnRpW2NfLCQ1czZpZDtzTDBAaU90SHRT'@;
put 'bCoxV1A0a3FTblVGV1ciSExrZUUsMktPRisudmtnLlYsKn4kMzpybG9yT15sNzFyTH5iM3FbNXpIaVthI2QpXnpzJlAqXXdleCF3aHpCOl1OaTM+YVsiQTxuZm9rRSFOOzBIdCw8e0JGW09kQThCWSZTNnluPipqODNrYHFyQ1hFdWEyc0UhPURARWpVVk0iUkdQZ25pQ2hmT0BySXl9KHR6LkNQ'@;
put 'YGwzJmpQKyY7MVJqOCxBczJkX0VEPD5lJU9fZDhge0BLdGdqVWwrWGNJfGBeNiVZaTpLcGshKjozNnNPVzRTYEVqSFpCNzooSSttPjtJTTshVCZ4Wy4lU19kVXxAdkZYc15uUkhyciMwWyxLeVtLNT43b3BGayRCaEcjMSxaP0tqVHNmUUI/Pz1zRiFBKCZWK1NuM2NQaytwTjloQmJ+Y3NVTHxy'@;
put 'Nj5+MnpRPDdvYHpWOlVLfHc+XURlR2pUfSNMQFpmZVtMUCZDMXkzNWwvZUZ2Ui5WSCtveXl8Lmo6bz5ScD0xeTNffEcvcF10VXR6MWg9dDFvZCEyMmU1R3JEPz5EVDlOcTo2d1N0JEJIZ1N0JEJFPW5MTzBmYkRYP0U6PmAob2kjQSI+YChyeyQkdF9dVVtOZmIzN15HOU5ibjVBbURuPWAoPnR6'@;
put 'KU1YXW40byRKb2NjJXAuR3ZvW1NZZDRwakpTXitUW2xUOnF2VGoyUltEflRCckBTY2tjaTpxQVo6d258VHFBN0VSY3MyUG5fQSZXdj5tQ2k0cUM6JDN7KlRMKTAjT3s7bSpCai53biRTKT9WWygydkQ5MnFDdG5oYl9BQEJ+KGw0cUN0blZCJEJ5SV9KckBieFsyL1dFSG0mYCgwWEVISD9dU2Y+'@;
put 'JjZyQFEmbDJudjJUVmIrdVdCa1RMKXAuOnpJSHB0SU9rMm52M29bbTgmPUV1ZzA9Xm4ybyUyNE4uSl1FYCs4Mj9uMm86N3NufFQjN3BqKilNKTs6Y31XdSI7X3c4KmdUKT8mNnFqKikhTmlpSD9+Kl1aOTFNQ0NfKlhlR2t3OChsNFlFPzp8KCk2L0k0LEp0OlIhQzQsSXQ6UnR4VzhaLz91XUBx'@;
put 'dFNwViMpYWZzYlUlR3Q1YlVBWlNlLERubX5kIS9TSG9kYUhWMiRgUEg8bk9dXURHdHEwYHlOX155YHlTMSVYQ3M8dEtuPjNkfERjem5VMT4uamkrckVkeVNwSltjeVNNajlNK3E2SFpKeD4+YWtZSEsuMlUqP3M6MGV7dyZtcCxzZ0pjWWYpdz5sPkpXJFR0SHdFV3R5fD9kdDhXcltpWU9UTXt9'@;
put 'Pm46KiwiTi59WntsW0RWMmx5I2Ntb0BpOElnVFc6Um80Ul1SJVhaMzh4PEVTKjV0Y3dlVXIwN3MrNXF3RFowVS8pOU81bnxuTDA8Mk5NMERJLkVqflk5XUpKMVEsNW9BIiRdRFYycE5udnglcWpibE9ZXiFQNTBjUj9pYlhARyxRcDUjZlohNiI6Vmt0X2d7WW1oVFc6Vi4hKHxDcXV7YW5mdHtr'@;
put 'clNwdnBFUyZ3SH5lNV5kNTZySDpbJSQuXSYoVmc5RzgyZ3ZHNTklMkhUX2liVz9odE1iUGZCJl9NYjlBd0pudkJdMUgsYCQlXlUmXyg4fVlOaXdmdD9Bc0AqTmxYaWFCKzc7OEJXb3Y1QW1HckB1PmNSP2whVltHOSlMPXp3Zzt8dyVPZUdUTTZbdUQhaTl1c1M1QTwlbHQ5cjU/UyQ9bj1peXtt'@;
put 'Uj1peSQ+OFUhPjVeWjAzMzBBZmoiQCgvdHwsIT9rYG9gYTVzU0Q7TmxHRU1BL2c1eT9MJEJQM3wsUHkxN3FuIzQ2On1AS2ZHZSVzbGF8RTd0ZSVwRzBnVU84Nz9leF1tRiUpcEpMbj4yXlo/LjdJTWQjW0tldz8qLjAlbFkme2FqWldVbUdUMTJHJngpZmxDMkFqN2FUcDE1MGR1XjExNWQpP3F+'@;
put 'PnpUYkdzMkMpbHlJUmJkOnU9TXEzU3xBNHUzZ2VDXiVae1ssT1csUlpoKEJ8bUcqaGZdWyNRRzxfVUg+ZjtOODdqO09QbWZVXl9IWE4zNVJfdE5zXmRRRkVsQ1RaIl9KOG1ydSZKcTxFcUtLbmN8Vnc5fmZOYFt8OV9uTzdpd0xbcXVhe2hseUAwY1RIZl0wNyhbRjp0REZRKzsidU9rUFkvOWZ1'@;
put 'bjAjdUMqeDBQTWxUZHQuT3JFPDRAJmxzVHpOQ2Q3Uj1vMll9RkJzXjhEbXhWYWpwc1JUMyFDVUswOj1GYDhsd0wqUn0vMnJoYmxSX29KbD5ILCNmRGclMl1PZXo6ZHkyfkxjbFgmezV1KyRsPF1mNGhJciU7ZiZSX2gyOjt6TENpN1t6aHU+NHMyIUt9d2psRXFGdlRsKykoSGdQfUVlTElLdjhD'@;
put 'VzpuRE5OTiUlNG9RcGIsQEdgekxvZiUsZHg3fnthN3ElMVVOTkhPQlMxcH0zdzdtdCN2KSRveUlbezhoVU1YWzAkPjkzVGE1SClsP1g+RTleTyZTemUzd0xMVUdYPF1DODleekA9NVA5TU47dF1QP21ne3MzMyF3aHIvaj9UbGRQXjAkPmNLXTA7OUIzdj11YUdzb2xoKEBeYCtbOyw6TzpEaDMv'@;
put 'MS8xZ0dSNThdbVJ0c0Z7dkpNQl9CdDJtUkhVUFpQUFAyUlpQWWQjcEtyRSNIPDE+cT0ldGxgcVgqMX52K2BVc0tuOWRxYzo9JGNxZFNwPW1uMGRlfXtuP0tMOHAkRXlkR2lHc2U7RyFMN1dlJHdyJGE4aHhyQ3RdVmJFaj92KUh7QzZnTmVON00pUjVZYG9tPTVlRVtJMGs2Y1giTW86U3wiNy5G'@;
put 'P0dCJkcmdHRYfT5Ne3FlMUduRixkIW4kQ2pyQFdLWzlaXmxPY04jMTpdJENmVlBdW0ZaO1VBcDE1NCU+YklWMD5RWldqSkZ6dFVqbWFncXg1cE9lVkVkLFFqZ29FPzpkWT0pKHNfOiE1Ly8rSmVWcilHLEFaOEImTGM7SmQuUHxlSHBIaUx6UlFtTT0lUEEjIThVanlzbis6KVVlR1ApTzddOVY1'@;
put 'YGk0bDF6VEBxY35UL0ovXiREbiFTSUw6I3Z5cipGfF5eJW1gfCVNP0dxQjI4fjgrQER1JWJwNzk1Xmhic0JyVEReIz1hJF1LfEMrRUBeUEdvWmlVPTZ4LFpvey5pJSZdL2pmMiwxVCp2fCg4KUciUmxlQnUmezVnQjhmUmVQbippa1VaWm9JMzQ1JUchSlg8b2FCKHQ7aU9TWD4rd2xTWXY6MWN3'@;
put 'bFl7OnxlKy9eQjh6djRvLFh7Q0t8P3BkI2poL3c2LGJkLmolV1sxIUZuLkBNTlghO34vflVvZzJMX1IlK3FSdUZQMGVKUDJrTzZoSzspPUlqPDVBT0YjVjk8WlJAOG9+JGNsNyUlSiU6dj5rT30rU14oIyx1bkssTkB0Wzx4ZGRLQDcseSZ7Iyo4M143MkE8ZmNUX2NqJFd+LCtwKUh9aGVMSWNa'@;
put 'ZDopMTg5NDsyT1smaDdaeHw6XzJvSD5RK1BjfFs3MUlbT0JoJCw7JSx6YzhAPCU5bylpUHlVV29SazU/fmx4MDc5M3sxfi43NDVwRzs9MmY1OE96Jl4oX0RdUEpfXm85Wlt1W2hRVVZ1NFNndWtvUjBkVismUG5HUk4yN0BQZmNrKi5hIilVUTlMKU97MXtPN2dBblhOd2whUlpfPF52WixkNXFR'@;
put 'bj10RXNEKDR6bSJrXUQuWVd0cmlMajBwQkdWYSVmV3E7TFRlZGVgWi5vZEZYJSVTd3RQYkpwPy45PHdfWXhibDZjJVYwZEMzJXxZeGJbey9Xb3JyY1VPY1FzP28rZWdTeCwsYkpROHJVXldWei5JTFVKb3YkN3J5UjU/UWpXL1g2IWxPen44Z3NUOmZHN0B+QjReZWBSe2RZLDxuLlA2cjNQdjB9'@;
put 'YWp7P3U7dX1EaDVeWnNIcDA4JkkyX1ArYT1zNlIhfHBfMjAsYnpteGRzT0R1dm52c0QhYl90Vz8wL3lWfW92QGgrPVU7bU95YWhTdWQxR2FoOUN+LnRdMS55U194L1o6Pi9uZVNeaFpENCNCbX5gdmB3P3tHPkIyT0Qrc1VqX2x4cjx7L1B7Mm17Il47e0c6XSQ/KmQ7KVY7MUkrcVJYNktzVj0i'@;
put 'bzByenI0ZmduT29wXUVWeVVRU0V6V3B7e0h+blQ6P1hkeUF8cH4hKy96PVJvLkY9Xm96JHBqKnBmJH1qNl1tNm5TcGZROmw0c25KajlPZ2pvKDI9TiEhVXQjaTovOjQ4WT1NMFIsL1gmMlp0NnRpfjhnRy50NmVyQnJSRDV7OT48K3I2RiFjbSsoIU8wNVJQeW1ATVklI216eFdXPTlsaEwlPkgp'@;
put 'IWRiNCwvKCFyRmgjJk5nQFZjKlIrK2A+VkhFd0MpV1AmSi9oUSphXmwrRGVDWmlhZVBSKCVYNGc9PEl9NDYkU25MUXZyTEliTjlKU0p0XmkvMDpfJWV3Y19BME5pX35+X2t8Ik1iKWc+TFlaT18pZEhrPUNPcyZVa3BhWDtEWiRJZFMoKSVOPywycCFLPkh7Y2VKbG1JN2VTPndFUWksSk8uM01X'@;
put 'b1t6JkRna04qI1kpSDo0R0pbbVNKLzJxVG9fS0pUMl9GJWBRME4lX0ZRNDtDRmxiKnA9IygpKn12V1Bneno9PUQuKlJAcCVrcjw2dDZscng3fC9oRyNVcGNaekFyUSJ0OlpPfnRiOj5iQSlmP3R7e0JJW0FuMndyTEoueCFTOn1nKXlidl5TMmljOyJWLjJwIWw9ZjBNbipCdlBjMioycCF8fDxb'@;
put 'O20sKl0kalt9XXMmTUguc2IwSVtYPkQsTE99fW1geVRrYn5oajpSW2FrYkRRXzB4RXpaPC4qOj5OKEgzQXlvQy5tQzZ9VkBdZk9WdGReSmlPWlYwMTZEKyk2R0oxaU4+X3FKT2U+WUZRT31ePDJvUjRyTG4yb25OOVpVQi4sQiY8QC4qK2thTltFMGcyclJPfmhddi9ESHIldnNAeTYmflU0cEMk'@;
put 'IV5zTlM3Qip+Vz52REZeJDpMdHlAMWFwQXxuOFtbaW4re1hVQj1JUjBLM3AvL2A4ZHhie0gxUH00eyU6dVBaMUBmP1FsKmRhb1tyZSE7djhlSz0rMzRtQT4mK3xDPTlsTV8rTGRCY0ZlUzVVb20xOWFMYiZhbnYxUmdUb19Ia2I6UVB0Q1ROcV06TyltUzJnNnZlSi5nTFNZIUJ3cCEkNEhGeiNx'@;
put 'SGxETmZVMT9POnMuX2JnOX5gX01yPWBNYjltPj45Q2JRa0gzOmV3L25fYiFYXXQwITpJbUdyPik4fXcuekJrQChEKysuRHNhPzM/ZG0jJSk6NENWWmR4Yll4TkxeOG5iV29uKnp9NTYoV0Z8PkYoZmZoOj1pIltEfTlaaXRjSiUrYlRhNjBkWWQoRVBHRl95cG5vSDN2cUFde3FaUXBFaEFHP2Mi'@;
put 'a0V7LmFKTzZUUnYlbkYkRVVEdm8/Wi89PXdnSTpnXVFQcTV4RCF2Jm0rRH4kblBRR2E+Zjp2ay9QKy87R3U9Y3E2ITVPYTFHM3NAKjVMN017ezYjZE14bUAsazQoUHlve041XldxWExkW20yYFtUMF1TPSJ5NGtWOldTdT10O3dmVHRyUmduKWxHNFtLMSZ0O1JhLDcrJkVUUThaImdAXip9T3R9'@;
put 'WiJUSDQhOTwrbmlbVkZkTV8jbD48bEptWjkqYSJbe3VKTnw8UU03MGtqZEs7ZSVYLjo+dDFlNGUifGBkNTJJdS57QDpEZDMwYHlCeisvUD8vcVNMM3F7Yl0oOCNdOHFSSlJeaEUvTGZwcjhvYiEqOkJoODN8VWMyNHQ3SCx4bWQ4fnVDUD5tMHRZVz1md0FYdFZeKk9YMX1KMmxaSSpJWEdWLFsw'@;
put 'bnc+dCF5Xys6SnNvTyREcmFmLGZnSUc8SjFDNzhdanY0K2hndGw+T11FcnB5L3VlT1ZILl4zdVplSjhuekZTPDc/Kig3KFQ1Xz9TNkVTd2RvIlsyTk9vRTM6JE44ej9SX1VNdzt4WHxSREclRSVEMjBgeU5hPU0yTHdnQCxjb0o4PT1jXTAxOVJNbEYlfjhGZkZXQyhKaX1EJV9kZE1HcDBBTXN1'@;
put 'e2hmekFkTj5EbkQoZ3dweEVNM200UChRRU1BRE1pOFkiKTp5bEViJkZCS1luSlBNejZFST09ZDB4MVBLIiFGJFRyMyJUKGYwaiM2RVJgRFkqa2tyU2k9ZDZafFg+UURgN1s9SnRZYnI0dzI6QC9bYyR2dEYuSTIwem81eGM2SDh6bzV4KDFnXVpVTzZCfC4kczI7b2EyfGtSWnFmcGg9W2NdS2Nu'@;
put 'cCFYaF1lUUFpb14rU09LVHZDNDlfZ109cU0yRUhAeXtmUnlAJkx6WyhLdmhROiFSImJdeW87RHVqdzVpWE5lVEd5bVZJdnFuMDAkKTFeb2B4fTJxPSNYU1dKVEFnUDpuSkI5OFQmWH1QaChHZGtwR3BAcCkjJEV1ZWBrV1ZpZGo6QDBaZSVkOTojPktyUUVQOG9dVF89NlFxV15OPFA7JDsrU2cq'@;
put 'MkAqYi9jfTgwRDt5Z0MyTDJTdzM1T3dyMmx1JHAwLylXdiI4KDx0LDYkPjdUPzgjPllSOD8qWk84OmJPM0Q2aF10UTxmYkg0e1ViSiF5TUZwXWo6aXUiSENRKjRnSlQhbXpqWV0qTzV8b0V4VGRLWC5FIWIuOzEjTHppWlI5bSJPRTN8WmhGJWksPVs7Kk9TY31VKTtGRWE5KnRVLn1FV3pKI0pa'@;
put 'LEBOPWMwPSwpOVpOWW5sPWZ4PXNbSlIzfHxXcnJBX1skUSo3c1p3aEJlTUBCbDcpeW92T0JPRHBib0htWX1pSWFQfGVMbGd8PkVrOSt0eWBKQjkkOiVFMGF2VyxKI2NiZDY0JG0yeyQ5JHo9T209UF5pbEJsQiUjbFdSckYyP3xKbyY9bihQSl5oSFVETHgmdXp9XzdVQHk4ZXM/fSQ2TW54cm1y'@;
put 'aEgsJTwwIX16Vlt6LzZlc3BtZ11EJSQ6eiFdYndLRjJbS2FuRTJ8JSQ7Vm80OCpAblh6bD9wPEZPJT5qSFF5fmR8LG10VFpHfS9kLikxQWE9eitQO11RXU9kLC4/bWRmITtmT29tKEt7Q1c9Snx1Nyw9eGpfL1RZKUpDKGFePmpLclA9S31lMmNkMlNKcCoreXBjNW10QFtQOjNaLEMlKl4lfCRp'@;
put 'JVYudiFxci82LC90SCR9Inw+X3JJVSFaOWB5VkwwTCZWJmFhP3ElclpHKDg9PDMyYmdAQnF8PWd1ejtEbF1FKjZrVn4pV05NUmA3SCU/QyQmPWZiR1h8a3lIPEwxVyQ3d01vVHx0SXd7XnlIe2RZayRnZStmOjY8JiZNbDZZYGoqWlZ7U3ovLF9taDhIO0MlWigpWiVfRkFWK008ZVAlM2ghK15V'@;
put 'VEgrbEF7Y25LMD8mW0NNP3lybjs2ciNRIVloZVN1fExoOHc+emJ+NSF9Vzw+XS91JVhJPiNoaHg2SEZzPE5jOnBVNTtHfkU2RXMsNUZue1YxUkAhPjhVOFhKYWQ/KFtdczlVLzJmSk0pYjQ0e3tiL24wVSNVLiVLV1swbW4wWT11WHR9cCRASyw2W11kYWE1Ny8kKH1dZjcpJW9dcjJ9S3p8TmJo'@;
put 'OnlyY2g4aGhXMnJ4P1I4eH1UK3VvK2ZhbVVDWTFPd0w5YjpsZEohL11FXnlZRE14IWs1Z2hxcF9vYFN2Mm5sIUFwdzhTZjI5eGRKemFHI3FNMjZRXzBINntyLzVrWn1nXUk0WS5dJGI1aiksOjhJPHk0THF4M0g1XSxLZFBQLzw9InFWOSl2Y2VmbU0kV1BUTXNjb1RvX2FoIU5XUDg5Ky5faTFV'@;
put 'Olc/L2hBamUlWFJiI3FybTw9eyMobFRIPCw/PS9aQnRBPj83eUxDNjVvUnNIRGBfWTNrKzZNS3ZkSHkyT2coY0BseD0vZDBpNjsrM017PSVeQiljMGY9JDRPK2tDeEhrNkVmNXhHMFFDb1NwJDsiWC9BNkBzRk9FP3B5PyNsK15MdmJ0Wnl2cXl1bTpxe0VTKCpCM1d3cUdka3JtOmFeTFNZJDY8'@;
put 'YHhdaTl2dSl6ISorfktsd3tHIT1fZEdQLnhxXmJfZlldfC9NO1AyWy9maC4pOVQ0THBCWnNiLyF6Tyt3VnUlW2Z2ST9lSEsuTU1fWitqXTpmQ3NPYXcxSjM6ZSpLaFFldjJGfVM5UCZUYkwjV2pMMWBwLkUvX0ZfSWp0T1QmbGplRC8sZy8kTnJDTSVFWEZjZWBwJnFZaGY8N0kpKlp6fHJwejAr'@;
put 'V340S3ksJn5Acis0UFgiWzdKPVAsWC5AUDdbZEE2Xk1gdDxhXTA3SEdheEokKEY7TCFHci98Uy53RntoTVluSj1MZ3VkRCpkay9dJDhDfGE1MjIjVzhaOyEhfHY+UypTUH4jPmc5S1NeUlYud3suc3xvfSRtLjNaUTZ9XWprNytLKzRdTnlCa1U9YSQrc1YuR1Y7RXFsJG49eikjYExvMjQsTioo'@;
put 'MmNEKmRuI1Y5cmN+OCk/T0QlX0BtP1ZofHg9UmhyWiRWdDhdQV5FUyszKURbJWB0PihCS2sxeylbJihIL1hrQUxMZFUrXWpCXVp3YElTeHU3aVRReXk+NV4+aFdWfE47I0REV2RBckopb0Escn1lUSg0SThnJmNBci8idFZYXT91UU00LkJjN0hSWi9IY1IyOH5ffjRAZiNrUHh0fk1dR3Riek9+'@;
put 'OUI5diZzS1c1WCYsdXlWaFUveXBXS10+bnVnS2pMRklheGw5W0hESE1FWHVqY3hXT0d3PzhbSGk9PThbTyk7ekZRfEhGSUYkIWRwQWU9VyhOXlN7b3luRE9xJUc4WncqYWo1PFouZC59aW13NS8vX2VZb2shaVtgRGVYeV8vVT83OUAvZCFdZDdjJG85QENZcCVfTGZfV0d9V2R3Vz9kdV1NKW5X'@;
put 'VSJ5RXQuSTFZUUZuez44a1picDNWcDp7VlM/ejJZRHpWMHpHM317Y15rcCxeSnZEUUd4TiYhR2F1SFo4YVQ5UmluRDxYeTU+NHM6KzM/ZC5MLDZtSiU+OmV0JSgpO210P09TM3xHTTk+bH5SQFNjaUJueStdRVYoeXclLzxSQH1PeT1LTCklISsoc3A+TndPPGhRRyU8WjZLTW5jfF83Ll5CQEwz'@;
put 'dmkjLE9nNnMpNCF7UHJfJHpHc0s/LkJmSFNie2cubUBlYDY7O21COnwlXztwQldrLnFubF0jVUVxdTw4VTA/N3F5RyUxfD13YTo8dyRZWDlkeE86eVorbT4+ejxiWSk6MSZdb2M9LEdFamdWbyQ5L2Y6Y25uV1VweWd6cnxvUntiX3ZyJjlvJCI4OVRrcDsyTmJEb3pJYFl2OjspKD13Jj87MXx1'@;
put 'W3xyXyFtYyNkfUhRbFdINSUpKkVEZy88d2d3YHkhSFBHcVRGTnNdU3omdjx3Tz55WlcyS3opKkZ3aU1tWT8/V0BpNS5xX14iVm87Pmc0Wk9yfEppOTF5W3g4PWpbYm9mOTlndXIuOi5mK3NbYkR3SW95RF8sVkBZTHJ1eHhDTFE4KiZ0cHx6Xjxke3xwKGk5ZH5dZ2pEZS9jVEQmM3ovO21bSzhA'@;
put 'b29WNDtVWl9xJXczYy9qSz8qazNWOkh5TGcxOE01JCV6JTg9UjsrVkd6SVNGYG1VP35ZPDUmJDJieWw7TXZOWDl7Xm83fVhFcSU6LzVxSVVkOlNjPyVhX197UF0way9qWHUyfit8TVMmYDBANk5WPl5UWF4hLyVIdzFNanRaS05jVX1MIWxCNkVtayNlJSVsclNsI0RaQlkmSmBKI0VgR2okWE18'@;
put 'PFhkQDIqdmlaTTIjR3h5IUtWY3clMnY3Y3o8KUs8Y0BNbHBnTnVjRyJ2Py5sNXljcHQlYnNLKnd4fnJHb0wzLG5fW3xCaEkkS117fUp3QyFCeX1uWkFrMWQrbz1eIyMqPUdhTGxbbVdzJDl+cU9sJUwpdixxSFhlOiw6TSokPn0/NiY+eEUzWndqV1haS2d5RzY8T2Vdb3w8bT81NTw5XWFQPDlF'@;
put 'TzVnPGl4XkkzfCZMTk01JG13b0lHVT1RNnddNmkrTmp0R1hyImVZTGx7S3h3NEZUOUw6Ly8zfDs8MWJ+PTtjWHU+ODY/S1UiQCxdMl5NMHltWHs8QDxAWiw3TmF+bHU2Nk1mcnhKNTVdTDFKNFszKndyKFUoRnBMcDspQ3w7U2ElXzBuVz95dWg+VisySlFEVU4zZW4oYTlgMkpVJmZYcDpYRiN2'@;
put 'eFRfXXQ5TlZwVFl3SypoZF1fbXM3VndmO05fIT0mVUZ9M1NOPjB+Jm08eW14aiFLYUZ7QkY4ZG1ZPTVDZmdZV29qZEBSPkNeU3JSeFNFOGBQaThne29tUmgvWzJjVGlscjc7e0BgPGkmM0piSWJOfWQ5SnokKHEwTk1bSCYhISx5LFloKjhxfEQrZHorb2JRSFVuenxqcDRIais9Z15zNHRnOFNu'@;
put 'LjRSNyw4MDJLW1B5JmNqXTp8RlozQmdBbTJmVFBETHQxRkdFOSEuZyRWNlk/OG55bXlzWS9yYzs2O1hDTCQ0UkE1Z2w4NGYlYXRjaUwhNHF+O1Y7ektZPigzaCFyZiR6L19BUU1ffSV2JHk/MEM4cFp+QjFNaDFaQzUoPCs0aS5PWUdeSGJYK0ExZFNZYklefi4scSg2QjRNVHJPOHBUI1R3V2Aq'@;
put 'YHNqeSw8LmdxfltqeFM2JVVpS21IZUIvdE9WOnU6TT1SW3EvfE1YTDRCezgicHVUPkNQSVMsY2ptZy51Onk4Zy4iIXNDeVRRazkvVkNSdyJlcHZZeHRLeXZ9QjZESmFPJEE+dloyVXZvZ2dMR1Q9a2F0fXVFMlhTcDp6TjYqSjVpMmQveDxkKzU1fGhMOH1AJkYsfiJPRjZCLlhGI3FAQDolKlBi'@;
put 'cGxZa2QpIlpPY3g4IXd0VGQ7Y0A/ZElLOi9YOXB8KmZ9JSRmYH1GXiZkVUJZbmM+c2w5VWtZY25bKn49bFo/PT5lOz02YDZ1PF9bZFlLVi5hNVcybD1nSjhaJSkpNyEudjVhJSo2UWJ3enRaL0VrKFY7KS45QD1uK3RmZlQ/O0QkbjchWVVZZTpacTAhME1BXW9QWXd5TDxRaCo9ZyxLU0VFIzRz'@;
put 'IThFJXdSSjI9akxieEBPfV8pQX42MUQ6Mz9kakpybUMkSVNkNWksWEN6fUBtfjNPTCQyYnlPTGFifHllWX0meWxVWUosaXpfOVEvLlgibyFoREpSL29oTWBFMVYre3olVWx0Xnwoc05rIShjIkBLPWwqYEMlKUBvVi5CLFV3S2BzPDIhWTYqdD5tJXFMS3VVMHksUzh8R1MzSls+Wls4V34qcTdh'@;
put 'alM1eiVmfFVMSCt5LHQuWnY4Xko8NzhuRHNnS2w0clNkdj9bRTMvfjE5ME8jRS5uRWRqPmFJXl5xZDJNQyZ6JGl5Lz1HZC5lcnU/MyN2cCVGRD54bWR0USR2KFZIbX1xL3g0amBgckh7KmtNYGBMSHsqOFh3ViM1V2YhZEVdWyQpWld9QEtVcnAhXW1AJDVYOnIjbiltVEBlSHZoNCwiTiwmfnFT'@;
put 'fj95ayM9MVdmdSFRa0p3UHwxcXsubEsvTlgzREZDczZadzFgO012TlcrTixeQ3ZpfWhRNE9UYTZkXyE2Tm5MYnZHWnRQbXhOWSl6WFFkPzdLMSt+YHR0PUlTNmRudyFgX05GWkJ9YV5QZEVTSSwwO080WHk2JmdifSsqKHosXm9GSDdoU2I3b0VQMltvQ1J6K2hRO1NQKE0+YGtDPzwvNy9XNmBt'@;
put 'UnRFcTwqc25oSCpOUU9xfVB9YS4hdW52cmVKcC4xWkoiVmIqVTBMaT8hK2NJVWRnIkJUWSlMZkhqWTl8LnNQWnwlSWd7V0U8WU9NL0RnUlA2YUcwZH1qPCwzWz1lNT1XaXJdSC5GIm5HajE6RkRRYy5gO0s1fSZyIUF5V3cock4qTGs0cWtySF9UOFt7Qi5hXjo7bX08IVY+Nzw8PDVQO3x0Rjs9'@;
put 'OiRQQHJnJG88TkRKc3R0ZzhBRyF5VF9NN05zSVFUQClsfU1GSVRURm9ZPEMqc2pnWk0/Mzo0SDd1PHd5MjtER2RBcmBjU3BEVVh8dGk0K3FMa3BiPEYlVEUra01UIS9LRkdaOixdSzdFLixndz1XU0hudzZWJTMpZD9qKzpfUn5JI1NwOH1ieX1LNyVMSTlJdnRIfCV1UF4yI1RCNDt1S3Q5JDg5'@;
put 'JkNXPShnNG59SXxkKUs6VzFkVXUwKFdVOz04bmFLOz04SDFLbXV3VitDX15MTk5RSGV4ZDs6aUVOSXR9bXV+TjQ6UEQ/P0YsS3NPeHE+N0NuKVJ0VCg0IWUlLE1abSFxZSpVLyZtXi9NdkkyPDpdNWwyTzBgb3c9O2ZJI2p5RFdwa2IoLCslKjR3Qz5VYzh3L1E4d2NIMXdhWU81QS51OUJkUkQs'@;
put 'ZFhIVFFbKyxbejYsRyY/UT1tZno3U240ZUlfaCI6QmM3UmJoeXI2TkR2bUJRPHVncXNQRXVkcWxVdU1FNUJpOjdgL2JAX3dSYG8sb2MkVm9lLiVhS3FSSGd2YmVqOERxfFRkaT4zYiRJOEZWWGlTL3RtSTVIXVdWZUw2RT5pWmsweDdUXzNBMGRRJEw8cV1NPlBlMk1LRSN2TXF6SmN6Ykl3PnZl'@;
put 'WWdQKDQ3JDJpUXJtUHArWD8vPF4jOkImaT8sNXhNRF9jQ1cveWYiSlU9ODcySlcuSWUpdD5TUEAhclVANkxgfTQuZjdSWEZALk9Eb3hAVHlSPjBkOmcwWWg3V2g1eHwvK3ZPMG02PV0uTmtidTdoOm5QVDNSNmdsIz5ob1Jae0gxUyNpR10+OlJTNW5tQHp6cmwqZTReYTxDbUJRInBAZEBkQGRA'@;
put 'ZEBkaUhhaG5jJXciNUlObSRzaTxyazh3JWF0WUw0RmR7YnxWOl57dDxbe1NkQFZHKzg7enk/QH59L2FgfTVgVUV+N3dxeUM1NzxGZUZ5Z0x5Z3FfR0lfPn46cW86MTprfjdgSys1S1twJWd2SXMlQSw5eUx+M09Namgje2E/IzF2OEklbE9GU1codmNuZXFwbDY9XiNVanQlYz9GQkd8PkloanQl'@;
put 'aD9GQkd8Y2o6ImB+cjNeZD93YUtOcXU6YU9DN04rIzYjO00odEM0T2lZJkJ4PXZDfCVDOk94ZVliNzxGdFE8Wys0RX59czh3IWM7X0BwYHNzUXs2cCY0MSZnN2IodjtAcD8rNEo2TEY6VUFhUFVYXj9iOEl5NVspYTl7NE83KElSWEtwekQyJSJfY102QC50MFVdXz1XIzY6V1RwXylodVErXXAm'@;
put 'PWRfZSNZdXx7Wi5bbz4lbHpTNCNkR2lYRm02WUpEUlRfVy83anwpW25meUR1I2QiLFhocntkJEBdW2dbeDxLcCFxbndWXlt1dkZ7IzI4WzNoYytOQEldSzlAJW5nTmpnS0xUbStidSt+eHJ5IUdmYzNrbUM2ZHJhJVU7OlR6Uj5YMk16bV1TZW5fIWQ6TGFNPWE8cVZ4KUBPX3lwZmd8aWRrOilh'@;
put 'anl1WUkqLnRTW1AqMj1TfC4kPURnYnFeLmxibV5PWl9mS1RNYj5nNW4+PGQ8d2NvaXptZ3VaYXAoPXpNajdwRzk7JSM4IyNZTmVSPFdbQzg+Y34+PV1weStdejs0I2tIYGcrdklbYzZSUVFrTzpuPURyRyt1TnBSUWtbUlc5cj1mWElTSWAuOXd4Uzd1Z2xMfWBtVVFYcDp0Q0Z8MTUjSVFwUmtr'@;
put 'dU0rTkk6Ly41MiUrNEZgVl9bYHl8WVZPRXg3IlY/MSt5MCo6b11Ld1ppdTcvcSVRSXgpT0hBRCIhd1ZVS0JQKGk5ZHVKNDErZEZdTzVkaFdwNi8qRjJVJXF3Z0h8c0U+YyM0O0BHYC4xLzpyeWwrUEAxUjI3aXorLH4lXSJLVzd4TSlEclpkIkVZOlNqPWp5b34xaHQ2eyN2K0dWV2RycHZAV0I+'@;
put 'TVlqejAsNVspKGNQdDUrTTIqI19DZ2dZPjhdWlE9ezkpd1dLTHhKVDlZQCR7KSslI19KNVl7YFtbJE99X0hLfH1naHwuZjlAWGQlMEQuTylPXWNPPGU8NnZ0fDpYOkxhZUtXUFZnU1tzSTUlPG4xImZHX1F+RV1jUWt4KntAQW5SLDhTcGJWPHs5bylLOUBeRWJdYC5JdlhnN0JYXXtrXVJGOypt'@;
put 'UV1ZTV5BbTxZRlROYEJfKyRkXTVmYG18IVFpMmdxcEhNRy84b0khdEFzISsjVWorNS9ue25LOWtCSVNGb1Uxdi9UMll4SXw6OjAsd1hAPzppMysjKnhyLGpTd1EhTUh7KXljJnl2LzZYUm50MXRSKEtoOGpXVmt7eGlRQ1FVNjEwUEtKdW9nKThdZ1J0fUxSVnt3ZjIqYVlGQ3MlIyZST01lSzEx'@;
put 'Mm9NND5PRSpbcy5dU3tBNFR9ckRjaH1MTjIsOipGN3FwKW57KDJwSUd1PkMzN25SczFPSjsjTV81XjliY2A7IyYxLFJzWXN4LihaLyFHVlRVZCgqTnQ0LHNFT2tRbzNTfDpOfCxLfShud3o5JWVqMCI6WiMpVkBtamI/MWFMfFglNSVjRkc3ND9Tdz4pWU45Sn06bj5jSC9yOzdOaS5vYTJsIUpY'@;
put 'PWZTPFgxLF9SPFgxLGM5OmptUkp+I2g7TUtyKCZzY3E2U31TWi9hMyp6WTR3d2VJTC5HaWVzRmZIOzdddmMsfENGUT5PaS80NXo9YTMrTC9jdF9TM0E5KDwsPWA0aFcpNSVVO1g7RmwiNmVuMUFMYk48TSwsNiw4QDs/UDNAJStTYjdhe0VrQkY5O19SNUM9XVpUOTt2a2VlSEkwJmtPRU5FQSpX'@;
put 'ciVwbEB2e2EwO11vblluREczckAvLmZqXS5PNU1FQjc2ZTd1SHN5PUBldz5uJjwwRWwrL3QmPyp+TGZveCx8KkxaKzUqT1MmI0pdJDUxJjd4b2RLK1M5WW80W1JpTCNyNU8mRkohYjplcVJiOVV9JH1aY1t3RUYlciFEKDltY1A0UElTJXxFVnM9RHJHUzFTOU1LOntxYnpodWhiWHVqeVMxaWIj'@;
put 'Mkd4W0c1V1ZDdFp0dVFJUXV2L2xnYjNeVGhWaC50RS9YIiV5YnEje1oheClLMW94R2UrWEtddShWe2hwJSJnO0M7VTd6LERhWTA/VWN4TUxVJDcmYzd9Y3Q/QTsxT3pScEVLanlJdV58aHlIYmReLm95PjN7M0xqb2dWVnl4MlVYXyZBRmsmUHYpYjd2Y1ZLMX5wK1VHSWgiRWc9I3k6IklUaiIw'@;
put 'WHRIMUZNLFI9Q00qTTJBTX5rR0dUWV5Hcy90PikqLFVUWjt6O1VvUXhLeHE6eX1ecX1pJnV5TitaJik1djNheS9DREdjM0RVeD04M0Z4dz1JXlQjeWJCelRYT2owMmBMfUdvVkkma3hjVnJ3ckZnR0FoU1UxT05AR2A6cSo4PzFpfF9zX2NCekVxK1VOXjdrUF0lR3JZYlVVL3E3emxAR1JVb3F0'@;
put 'Xlc8P0FLQEFyTTVEK1U4TFQzaWFuLCU1KzJaV2IidXtpOVQ+cDdxI2BVIzVDaHVseDYsWi4xaVp5JV1+LkpAXWBtV2BHRmBRMCo1KSEsQFhga2dqeEN3NVs0aTVLQll1WTBDa3doSH5VYykzVXNOZ01JU1FYQlk8NnZ4Uk91WmNebk92KyhrTTBYak8mRzkvN0dpJnV8Vix9U2F3MVVaNCtzWERS'@;
put 'NmJ4cncyKCtwJTBESnM7bVg4cFl5WDlhZ3UoWFBTOXRBPkBodHUvYjovNnkvU2lLaDNRez9eKno/OmElbGNPVFFGVHBkSn1uZFAyelImNVtDcV1keTA9XVJkMTQ6OUQufnZrc1FTfitxTXpERi8kVSJhT1RCWXx0bjozY0cjQUpXcCQvdVtUMz94ITI0YmddSS5idXRrSkR2aztZXUtIbTFZU1tW'@;
put 'az8lVyp1RjtGVyl4K1h8MDU0cHtYVjsqfVlddXo+T2EsR3ltezJSPkBOb1lbdnZwWVRWanlxMklRKEtUZWF8QiZtKW5gZTw2LDxpPjYlcH5gZWVrMllXdjhmMmhoKVV6RCRgNn5PdVAsUHZIM1NjWnZzVjd9bzRRaHI+V2R5USJxRjklTyZKbm52fGJDcH0+Rm5RJSpeY3Z0XUdtMmwuVihYcGx5'@;
put 'WlpoQEFSIU9RRzpENEdwfT1pdHV2fU5DKjh0MVAqK0F4Ni9fMlZNU0slRT4wKz8jZ1ssUTRHVzt4JlVpN1ZUOU55eHBIfHVofFs5VFh9Lz0zdWFlJExJO2JSXSp3VTo9OzQxY2MmTDViJDUwcmZVZ0omaHc4Lip5ZW56MFBwSUwrRmJ9Sl1IWCxWfE5qeU9nKGNRclBeKFFQOigxanZ0OlJre2pV'@;
put 'R05vLmVAaXpxcnVYOzhZOlhoPDNKcThnQ1ZqRFVGRipuSFFeZmtgMDgyTSM0Nn0+ayJQWio+bEZFSkM4eTtRb3xLcGgrVi9veUJwWy9RN1ZmJGgvN3dWQSw+PG5YUmArPTZXLC4qYHxTRjJ3fEhWYkJ0NmRnVil4fEJzYSsyN3JXJFN2SWFzcH46THcxSnE2fFU4JlYme1IuITlDbz5rJlk/ODA3'@;
put 'Kmx7YUxiY2xTXW9iUEdDQFFJdHZ9R3F4S3s2NSVsMT5qSz1XK2ZYKlsseCNGVkZqVjIkd1EpLFU5OzYqbFAzdlVnR1hHWCxeZXVnQFFeVVgvampzN0swW3sxIiwkYWsvbTxxK012JUt3Uls4bENqbF96d3FhOGRJVWp4N01oRURfMHJLZkBeYksrdVgvKUduTVhQTW5BNTxecXIlTTFmfVlkKk4z'@;
put 'NU83dWdxY29QTjJmSG9EdGs+cnIlMUtkVlFvfkUwMlBiJSlCY3JSKEVlYHVYUm9iPzxoMyk3a0BDckt3cTp5Vl14JE5kUVZJQH1eRixoR29fTHFSaDw2Tk8veWd3KmFQUWRWXVdrMFhFY2clM1FsSnN+YUdJfjhkbWhEdzFAcUxUWHU9OEdibnQoeSxrPyN1O1c6LntFR3cxZCZBRzBJRDY7bWRg'@;
put 'NDAkTyh6KyZLKTM2cVIqPVA4MyRoKyo0TXFaUlZteXt7MihEUndda058U1pOTThobFhkN3hudkJyOEQhemFvK2xIVGhUdXlCeT0mY21wR3pAZUVNLHFsNnZ7OlhVVixyTnt7VEZYLztGd0VzNkVXbzdgN35mRmBbKFshZ3RaLyNAdWdAWld5aV5fSDhCPnI9SH4uek05bzpVOmE4bDdsUG0vQWJ2'@;
put 'WT04Nnc5VCVgRHg5ZmgveDdua01ISF0/bWtYN0B6WT04UCpQZmgvaX0xWyRtR3k4NkBXfmsvVCs5RHxSfDd+QyRnR2NtfXFsOW5VMHEqJT0iQU9tKGhSVHtJU1F8cCVtRVhdQGJVXkZEbkQoKiIlQHZIZUkqQlsxcjNdYX5NTCE9eDRBZSRkRUw4ZXpPI1ZUOU8rVFo/NS5WQW1JQlJLXnV8aV1r'@;
put 'SHFmSj1LMjVQZ29ne1t7MGpaUnUzJVRFc0xSYG9qbUM1XyVncD1SeV1veXtCZFNqOmFGcz0pKmRmO3whSXcrS1FiSGZBeHxgKjxiMkRoM0o6RWt+OERdcm9dPXMiMGdlbD0yaFRZLEE5JmBOY3k3VU1AZmAxW21YZFQkfFNMWDowfFo8RDFLZFpueXBGWy9ba110VnR4dEQhb3U9OFVBOnlyQWNO'@;
put 'fmRvLE5iKTRkYVd3VyFpQnA1ZTYkVlVhJWsjezpEc35XMjc5Iz97W1ZvMmkpVVQkfGFPO11fKmYoKU5VO08reTk+eDg5cWJ8KjRVW2F8KiRVaWVpel8qSThlfTVgTCtiYmg0L11Lbk0zJmdkbX00bFFYV1NUeS8vSUlaLzYsbH0sNUAhXl5hPX1meCUrIT9TJlFAODJRM1syTCVzbl1bLDFadTMx'@;
put 'aGU2O3lHd0NgVWJZZ01PdUczRmkvSU4zQ2RTM1ZLWmhDOWhUfUVTNzhEfXxaMiQvVzZBYXk2bEE1ZC5XOFg4SCVRK3l1OWteP2U7MXRnYT1DMncrV1QvRVZhKm9ZIVVXZWVYaDFuYyZXJGlHUXA9O3BJMjxpKDIzbTEuVkdyL3kpVnxoTHl7b2VDR3JfaHNLeU8veTtEfGh1Qj0vJS5IVlddUVht'@;
put 'a0MqW2hXQCs2N2QkVns2d1ZPRkVZSVkpKDA2QWR3YlcmbHVBekFxYilhYyRWREZQIToifiIoMSR6Sm82O2tyNEw4aHl0KFs3SHZlT1tmbWN9Sm96Qzhje3ojWyxLZ0NFOShINCx8cTZlb3AsRDQsMlhCRCluY1g1Sjl8MXlWay5JY1lEVDBZWmtUR1FAZWdYQF1kW28wMj1BM0heflFrMlMzJlBb'@;
put 'dz4sMiQkYHhAU09iNGlFJGF9dlVSRyg5b11KXStTcygwPjE4SzlUbzVVQHo9bV0yJit8eFc8eCVRbSp9OCthJTlJRl5FM3B3eXJWTjpkNUp9dCxGQC5PSUA6XUcmUH4zLGp2YEVxIixBWzt6eD5OVkdOOlR8cD1pOzJvLG0kOmN6ZzkmXlZSfnFxeWcmdXRxPDVpfD1bYjsxdXZdfGw8K3ZdczJC'@;
put 'O2cqPnh7P1guVCovKz8qNj9GNzkxTnx6bzxOZCE3SjxoPD1xNW1hNDpZPTorYjdYS1dwOUduNHgjMFhkLlNjQD1qZXx7SXF9PSJePT54Rz49aEVCY3pnIU43VXd6XUo2YjlYOndGcWQ6TGFhbHp6ZG55VSpzdSU5MUlXOU5iI0xsXXAhXzNkZHRnSStGW2NQfi5NJWFydT8zKl1KSEhRSllFIj0q'@;
put 'Zl1+NyIkckh7ayNmPjNMdU8+dFsvTCJmbEMieXhxZFosWmdAb05lRU1SZWVQKUFmLHkvOjJPfW5JKkg9VywlYT5LLl1YOU9xdTs4Q3o2Q3lLdzNhQC9fcmVgRzs5VG4xbUIuXjlNYGUmfiR5L2NzOyE+dWdlPHJrNkdeSz5iQXJHKj95Wk5QM1h+K3dgJktvVXBEaX1EKS9CX0xrM35qSXBzKiZ8'@;
put 'bD47cGZ0ZzJNbFdfWj1jdyQwY3EraFtTeSF4eCo/N2x5SEo3JV1ffDZTWkc0UCU7MSJhfT91T01HUDpMMU4rJFZ0MF9daXdIb2NuRn1ueTRdKWxFbyImVCslPkNzajlQRkVnQktNOV0xfkhkbXM2YGdHO2lecXkuYC9LZmVAZkFbc1Z0LDkma3k8LjA5MzVJS2ooXltsSzhbRmBWYClffERMTyM6'@;
put 'bnl+W245Uzw5eEN1Izp3fDpXbyRAKllaJXZEI2pQKCUiY2QrbXlnYj8qfHcmP2dQViZ6OT9fVSZuKng2KnlVT2cyO35gVmJdb1M0Q1Y7ST8sLk5deHMkcDNVSzJgcHpMWHk0NURvOlt2PTp3YGJTZV93ITJgVTshOmlsWjspWXg0TEV+ZUJtP0dwJWBWfjhUbWwxdkJ5NXZBT3NLbCNZdVNWbUxX'@;
put 'Ris5KyxqV3NLXW9IaW5mMXtTZjohdFlLUXlJNUBhckR7YSUwRHE3TWp0bF1tZkBuJU5vUVRtTTtrbUhdUEYySTJNd2BMUTdbZExtLGxkbWg3fEpYZFJkaDdCV183TTslMCJRaGM+eCFHUWk2ITo0JmRtJlA/UmUue3N4T0Y6NU1TUGk+PCQhdllaX1BQd3hPdysqPFtrfG0jMlFuRFhyaU5YTG5B'@;
put 'K0k8QW43b0U6eGI3Lms3d2JHYnBAKntxdVNQJXM2UG9aXy9AKW5uTWojMmx8MDNsUlNRP0xUVy5STV91K11ZPD0vYVpOKjN0aFtvKWpKY1l4JVgzdF0rLldwVk5ddjs3KzZycFFhMTBLei9IN2MwQFEwTChHZFgrY3l5RUt8JlZxKlY8PzdPZ1JjQS5nPFhPVlVzPWFBQTEqdnwxUl52WjkiX2I/'@;
put 'S0htQl92WlVscX18ZGU8dXIjNVN0P1NxQEE2Vyp6WzZWT1A6OD5LODp4cHtwWztMeTdwTnBSIyVkT2JObywlL3RuYXpIeytEeVVUMnFoLHg9a1ZvdClnKi9eYGpae3UrVCEzTDJkRHFBKzV+YFIqN2RATFU7PiZrJilILzRoLjMrLl1xVEY9KFRLYXp7UTNydkFVQ2lUVEtpcFk/WVZhPGJoNz48'@;
put 'Z11uVjRVLC96XWRgVFM8T11eMj40VVAsbU5gMTMlKVhRMjJSb0pUZ0hZe2l4ak5YdFA8dDpaRjxob256amRBR21YKV1OWjtVRFJTMyVLYl9KYEo5TnNJWnIwW2lGZDVANGIrZDUjMiVFb2RWQXBQIzE2PHEydlFWVDA5Oig+eTVsSz43W3t2SzhiMFQ8dyphWEhtVjkzYl9iKDFkZ2QuUEtWcSMs'@;
put 'SmwqaU4xclZhezl6ZCs2bnAwJi9vTSlbL290VVQ+M2ZSRk5nUyEuZ3AzN3B2dzckOl5kN3lCRiEiSGZ1W31vIjkjNUlwK1N8Ik1GQkprJCJFSzl0VkpVYTQ/ZEo1NCh2X11sYHRDNn1kMCFDLk9zNmpXb2A/LkV4VnFSISNuQihdcEV+UVhadFApKDsqNGV+V3IjTig8W0J7anRPTlJEUCokQ0hN'@;
put 'UzZJOztLdl4qMHZPZSFTOk19PHk1O0lKemdQZkpsMiY4VmRaVTZHekB3OEw+T25PfHQ0R3hWfl8sQXVWMHosZFlEc0xRMHd2K1NAKjE7cEphKz0wTG8mSHJGXyRDYio7QEZ4eTI/clJpPjduNjlRZTMkVGU/TlV8W1AmZHA3fmJ7cUFNLzU4Ui9MMzU0TCpLVXYicUFNUnJMYiJxN0xzXj4vLkJQ'@;
put 'bWl4P1Nje2xqTjZQW306NlooeiJdbSQ5emkwNyxvXkIrMz5bPjk9I0VfQmBfMjlzK2BtO25XY31uVWQsUVQlXld7PE9nZjVuTD5UNTpsbzAxXmB+dEFPSl8sJkd6JShtdnVfbHltT1Ffal1mOkZvRiU0dlNQUm5uSml6ck1QJTsxRipPd0o8VU82NGw3OFhGNWFYN2wuLHU2dSZEaFo5TmhRWTNs'@;
put 'XWo1JWdpPE94K2FwWzViOXE2SnElQ0MqcitnaDpsV1QjYEYsJHlST1NjdUI7NjNweDV6cGZCKW4kJEZCKXc7MzBRXV11d2hYUF4saEh2RFEqcyhvRH5GVDE/ZT13NVFjMTFzQ19OY3sjQzNNcktRZXxMbjI9KVlPWFJrSCtbWj1qMFI7KWJPQ2pXO057PV1HLkxpWjdYaTlPfmRsazkhPytUP1dg'@;
put 'YlBDZTFqN115azpONVJ1T0RMRkdiY3dWP2V1PWQ5aC50JD5rNyttSWVbI1BuN1ZxV2hOPEFwJGJwQltPYXYzfElUTW5NeCVNYlZ7K2w1NmliL19yWkBWZ1hIWDpzVTt4JmtbWz9WbntecnBNbDUkbHl6MEclYXR9XTc9cWVdM09eUExIWSImJUdTK25OWDhdayxNalRrZ1svfENEa3YuTVs2KVlb'@;
put 'WEBpTTo3QG1lNChRazU/Yi5ARmA3KztAWnpMRU1aT1FObWNRN2tIWnF3ST8zPilAYjc5eThbOll2WGR1KCpNdkhJbnBhaTB2UHFlPyIxeHxoTWBuNFJIVXwwRWgpbWU0Rj5wPUo1dmJTK2pvY152ckZWRWBJaWNeOnF5ITwjMDRzM0JVQzNwW1dxa3d3cW5zdnNaeTFjfTl0Q0dWLEZlRkkhI208'@;
put 'RWk/bj1ySEQqbTQqS0VRZFYzan5bTStXeXFzc1E4Q0dWXnBPQFNVWy4vJDA0JTZNajhDbnlHVH1LM1VhenB5clVgVl5wT0BSVVthNytWK0FyTTVOPlt6czJ6LG0lZkgiPVsmJH4zT3Y1ZyJZOTFxRSVqXm88d0RqWm5xP15rVVNVZFtiJio9cyxMQHpSMmY/UkA/cGBASz1dcGBYMWxNRFI1Q2pl'@;
put 'RFJHOyZiWzVCN0xrPTJ0Yn4rViwiJklYT25aYzQ6eWosOTI5WDZKb2BdfiN7aWw3RngzNl96M2xGKjYqJTBZeDpqR2k5PT8qdy5WKndXUmNpSyxYZiNbUUdHJTdHaWQzZjR7WFMjJjIiel8vWkdaTy9reFVKWCxsKGpgMEk4UF0wbEFlJTArLHVdT2hqe0BTLlB5a0I7UFJIVFFvc2pnSFNbd093'@;
put 'YVluMUh2JUglX0ZVTTc9ciNvcTttIVlHaWNLUXE7NGBuMzdvJG90diY7TnNGKEsxVVt4SERRaUpiJCIzbkpbQFN5N3psKmxBOUI4bzJVLktFYUI5eHU3Wi5SIjVeYmxxV2RmW1pjJCZZO2d5N142ZVk4LmR7YWQwdzJBXTBGbGY6ZTN5dj5ZVSxbNGNiKTF2LmQqbk4md35IdzdqQFEuPjkvJGsr'@;
put 'R1NObChsRGVCY0s7U1VVcHwpNFA4Z3ZLVk1EQlQ9MDVQM1g9TFc6b2YrPj1ufnREQV9dVW5SMyRBaFNFQ1lMZ1deJSRrPjxkcjI+ZzBaUmEpWUcmJWQ+ZT91a0kyPkM7dHwsJkJfXTcwRjxCe3AwI3pwK3IiNDdyQVNqLit+WiVpWjByUUU6UjBtbXZBREAjQXxCLHVIIjtmJEBPaXY8d2Q1aGkk'@;
put 'dTtwYmYvY095cGpNcjE2SlMpWk1dXTs3N0RQZ0JuaD1FMjV7LnQzOD1QeD0jNHBHJVN3SyFeJUBUOldzeV5qK209aFlRSkFiM3BYTThBQ3wpQUlTQFcpXjpSRSZmInooNSFNNjchIU46WXZOKDBFP1AqNFcsejhSamVeeHxdPTF5IT1yWnk2TE0jPiJbIyJpfVBiPXtbM004dVR1JTksQTUsXlor'@;
put 'Iz0xPzN3WXA1dVksVk46ZFFxWWpjPSJ7WUR9Om1naVRbezlSdFE7eSNuKjFuWTZHLEIjIUB3VjJtMVgieFpaXngwS1Y0LEx0SDNkcjpoQGJYWV5rcT03V1RaREZ9QFdxRlZgbkhOLlsvP2dETlg3VCVReGx4ckIvN1hNWW5KQXNAJSxQJE84MGIqMSM1WzVefjA2JnJhRmVHbzpMa3xQOXx7JUZg'@;
put 'b0xWYnRvVHo5Ji87R0ZgQlV6JVYjUWA/ck19MWF3MT1yVU59RGRnQzdZTHA7O3AqKl1bSlpfL2lOXVZAc05rUCIoZjQ1Lmx0L28mcVYoT2hUI0s4VkB8YGZUd19vJWVzJSJabDJpKU1eS1MxYlM5U3BxcGU1RTFHWTsuVHZ4YDFwT21dT2g8UTlTNWd9S1E4ZF9wYj9ua2U7PDdRWk9+bitJZktw'@;
put 'InM8KkFefkhwfVN4dF1vSSYrOE1Tb2k1NDVeQSs5bisyJS9jJGVqWmQ0b3ldVGEucV8iWVhAbVEseX5GVDY1PGt2PTZTOjVNTDRYbnFMbWRQO0U+ciRmJUZYN2hHYn0pTmpMNz1lKUlXM2daMXI5ZCJIfng5Y3BiO3tLNkZvaTAsejJjOT5RdyM3cCkrZCZuK0tBZlBEMS5iSH00d0twK0ZbX29l'@;
put 'MSQ+NSM3Izc9Q1ZYaHklVXAielZhM2lZTFlVQ1QhP0ZtPjpwYDtGNkJCXX4rO31WcDtFeit0TUdoV29qZEM3NGFdQjphMS9NVUNUIyh6Tk8weCVdO3IrTjowR1ZCM0c7TzVyU21sQCpONTpWIUo1QFdyTkUoKTdQcCJ6VmFEVkAyOFY0VS5OUTNzQG5YaD0qSztkK3okNEU+c1FMVmA3dmJzYmM3'@;
put 'OSNmWX5gLiRNe29reD44ZSFhWCx3YiZrMGNyQT8rZUVwQTFFX3o5ejZdOCN6XnNIUHlmeDg6dG5HcmtNNlJlaXN0dFZoVUBVLExPa3NkPWleUEpvL1pUWmFZPVFwY2ZvQThSeCQpfCszJXM1PWpVTnZlNUA/NCk2RnVFcyQ3b3kzN0dQWl9gY0RXenNMbXNvY0tveGdJaytfYlFlMD1id1d5UUtp'@;
put 'IXpkKGhzTGhpVz1jYTlBe15UMzlIRDlONjtWVnYhZEh7Z31jOnlbR35+JT0kd10zbS4rJjomeEB4OiMiMXFsITphbnteRlI7PUA9bFU6L0dRJmRmbTNgeDduaz5pZ2BUMzlxNUZaclVaSHBxM10yd3giKyM2e15UMyJBbFt2JUFyQldGbz1lKzE3fmhQYy96U2FaQE1ucCxzPFtKYjEzcWFIJiI/'@;
put 'SllkKXohP3tNWU1LOi8pcmVGZTU8NjdSciU7QztlMjQ4VkQ5MElhOWdgVDN2Uml9OEsyWXtGY3xuUWV1K01nYFhMRCheTCE6VFYrSkIrMStQVkM0djNyJFd3UH1xYUZQeXpaNSxVTWhNK0Apd3hqXSM9ajhJOG9PQ1ZuajVLX3xLK0RnamA+ZFFqKzVzS3A6fWUsWjovSFZhTTJNIXBfWUhITXFs'@;
put 'ViM8eiMvSiNbK3g2QiQybV12PXpDc1h8YTtNWy8hcjVLVCEkV2xyWHk9cW5PRChsRzpJcT5QK1N4NElCOGhESGFCKk8wYCRmKzRYITp2NjhZUHZxPFc3eDo0SENvdn1XKHd4cXNfc21XaUhqRzUlJVlYOVcycjM/eHtPLk8qWmJdYDIlNyEyeUZkVlFvLDYwT1FraU8veWYsNDFhKWo2KHV7Kj95'@;
put 'IlRFNUtycjBLW3xPMiFHdkE+OUIxUipoY100Oi57XVpvNSx0Klcrb3V+MEg8SUQhZnptUmBBWmJ7M2l5anBjNFgqN0l2ezZLNT59Ym9zPDhJckZCWEVWfSNmS14/PT1BI1UrWXsqdm8sd3ZbX3tLeH5hPyMyYC5bUVRXNCVsJlJPY3JNWypIcj44ZUpBVDQ6Ljc9V281Qm4lTFQ9e0tFcz1GOkt3'@;
put 'O1c3bXtnei49VkVUR1A8IVFpS1tSbmkiNyFSZ1BGPTtPRzo4NlBpfVJhflopZ0lmS10xezA2LlRkeTRHWFRnKCZWQDJmVzZ2YkR5bnpWNlB0ODxrVVJ5dSJlVXI1UG8sOlVmeGw/IzZkWyp4JWdQUW1DPExtbTl9MElvOmJwbzAzWjs3XVJaMFYqeFVdUlJ1ZXs8ZDEjZStOI1kpayxHb2FQLzo/'@;
put 'JnpySkFRVVgmWCg5I3ZFfTs7Tl9bQXJIbjpydVhDZGFJKlhQQV8xfWU2KG9Ue1QqVTlAPF93VG08JFlkcWE/YzVheEo+S002OkB0L1R0PVZNOkFwI3lAVlg1clY+a3ZSVmhLLnRWOi5TOS4yVnFhKUR5QjtLazxJeWdaaTVpSSovJHREZUVLO0A4bVJuOzloPjgzT1QvaG1COkUoe3E+XWY+dFY1'@;
put 'clUrSTxMc3B7KWdMQExeP1gwSShHTyFXdyZ0YlNLQmUrREcrYT8jYihQMSVsPWt1I1ZeYk9UL3FATVRpPDlNJHg0RXxbVix4PDwuL0kqRGc8a0tuP1h4eXZPdylmclklb0BJVFh7KjVYQTwlK2g1I2Q4KyEpYStQcio4a2ApLDB5UnQwWXJMcD9KIn5OK0YmQVs5MklTUi51WDtBWEJ0USxoQE9a'@;
put 'SWZiay9qOVY6ZTJaWUg0PltuMCssLyhncHlFeDZZZ3UxRHE3R2BHIytLVk4/OSRSODtYTy81JlVUek06PUlheFgsTyNIRCR5dFpiU3dJMHo3ZCQ/TylXNWp6ejU5cCkhK0lybSldWng4L0xtKHghK0MzelNRM2U1JVJQP0FiN2c/I3kxWlUpRDdLVDB2e2R2ZXliKWd3Oml6N19kMWdWa0xqfHZL'@;
put 'InUvRSJRQVRYbkJ+TX5MJEYkdF52bE4/Vj92NFFUWDg0UHdkRWt8aEY3X1N5elp+VlAhNyxpWTl3ZEVSeGV4MGBBe3c3O2dhOGJMZkIsZEszbzUkW2V3U3VhQl03LFBsc0Q2dS4hOWp+V2RATW1vUnwlczovIlJxTzJLOWp1Qnt3JFAxXypreDRNXWpaTmkxNFVOdn5LVFpHaVJpfXFKWCFkXkp6'@;
put 'PzxpJWdRa3hlYSJxVjk7IV84OEd0JWdfQjxkXT12O0AxZ2xMeHZoRlh7d1c9emxReDpSSTpnZEImVnR7YmY/I0JdbSI0ajRHQCpvN2lLY2UoZlp7QEg7OGY7Ziw4Kyo4UHJAQzRWV0BPY3QueXpeLls4QGpbL05pY3BIeyM7SHNAbzpGaUZYe0EhYzY/U1dTXWpuIyR4KypmNzdENGwmRmpGL3Ix'@;
put 'aSpabFo3eFNVUnRyO3RFenkqX0lFczBTP08/KW4sMVZEQCRAaUY8W1kwemQ0eipbOEokKkQ1ZGM+PEQzUVlqc3AyVXd4TGtfODYlX1coV3tpY0tlTTN7TmttQ31IO0UiLk03QVBSeSRPZGVxJCk7RjM3I1E4JlVfUHZQaTt1clhYXW1FV2RNTFlZVnlyKiosd3l0clJReTcuX1dkSVFIaHpvRDNq'@;
put 'P3gvMiZaWDdxK2QwQXdJIVFsQiZYQSpUKUp3fmJZUDdoUXF6RnB6Jih6aGVXfEZTTXV3PUZqRGNCWW5YS1F0Jmp4ODk/ZWNUQmZ+aU1zNU8qOFUwc1IkLlI8YEtKLFU3NSFfL007MTxBcmRYOk9+fGBmODdFMms0T3Aye2BKQD02WH5UXTUpK24yckBKPSJSPDZEOHBYTzo7IlpMVGs6dEtMeyJn'@;
put 'UVIid25tNEt9a2cpejt2OXwzVE18Z0REVUNyJko6KWRTeWYsb2NzXjt3XWtdRF5Hb3lJTSZpLnl+bXtnMVhGZVUkeCR4XjkuQ3orfGVWaTkzOl0rcl51dzcuOHxlfldON1QpVz0sfTE0Q3xZQCZ0S31fV1VnZ1BVZ1phTHsuMWJUOHE6bTNQbjp9MUFeL1lSWldvJjpJJSljL1FyVk1TOjdiVitf'@;
put 'XWl3KjlZezxFV2AoQE9dZnIpZ28iNWpKY3p8S1JYc2ZOUjdMe2BbVnJ+ekk6LyxFXnpHM25+KEltWUBLTlkuMW9KMTx5ZmhqS2UpbD48b05rRi5lUCZAdXk3dks5UmJjM2RLfWhFJG4zTyFRM1EiQHNzOyFtenQuTV5HUjErU1EyOH1FTFRCRnUhZDR7UmtpSnhEO3RKLHYjNS50NDAvRl8sbzRp'@;
put 'JEM1UlpXNT91bnxPMmZEYlJrYXByMU08JjRAfmk+ZERoRSFSWiUuOjNmQ31TRT9iPiZnNVJMVXwraElFOixfNEBrcDM1YSxXb2IsQSVXazB7KTxpeU1lJi49JHh0dVY4NkdbNnRUQU5hRSFteWlld0tdWyUvSDooNU5GOU9tUylZPVtkZiRuRTNNRywrZloiQypZKTxwT3pkUlpedGpTR3gvRl5h'@;
put 'MSswNjRYS2A7PXJEREwjek56UjhUYXtxRjl4YkY0Kz9WMz8qc31BdSw2bDNGcjI2SXRoW2NvOSQ0QEwkMiVfVFF8RlNSLFYwKXspZ2hDWWNOInhwYlVEdmZ4K1oqeG9iInZxUz5BVX1zV1hQImVIRXg3Qlc3bX1xMzNjU25KQmM2dihLT1pjNSNZSSpuOjM4eDJ8OiE6TW5FXXxuVGFuQ34uTFMr'@;
put 'I0QvcWRbfD46VDIuIng/YDoiNE5QI2c3eTtEQV4wbnlbRnFrMntkOE05XShLVURqYH1WUU5SazV+PFh7bkhzNT1OK2k3RWB+LHgjfkJhO2BIbWMpbDUkRyRXNjJkSm18UDtZPyN+LCZLIjBtL2dQcjtAU31AT1FzLyJ5NlRMI1l4PXloR2ZYMlRCemp5PzN1Ok9iL1JQTmdsY31sNzssTGxdJTxZ'@;
put 'XjFVNj5TNjRTWmkpeTxAOmdAUmshcVFRYkdrJXkrVmprZ2ArPyN7RitkIV4ieU9CQUxRdXpGc3cxL2NhWmJgZnM7Y31AI0dJVWpeMV82PlNnO0E3dGkmeCtOU19wdWpaez89W1IzKG8xPiNuZV9xeUE+LzVVaSZ4Jm96Tm1kWHJhT3tNVFRfJHFIUyk6TnsrKSNmRzA4UG9Qci94VVpDc31wME4j'@;
put 'ZTEheT9tLkZeJTUkT306anlGfXdKa04vYyFuVWh5TTg8ZF1Ybl1NdHJiM3xYUmtCVy5mSHVFSW8wfVhWWWVkIm4qd3FmditYIkA1TjhiX1szKG90XnZ0JGA2byo9ai47cmYrZzRYLGRVPWVFcmErb3kwTDw3YHkzQnBGUV1uMTU/KUNpMTErMH5GJkt9TjtFbmw5OTFQOV9dTFA7ZWYiOVNQRnVY'@;
put 'emVLbGdyRjd2YWYwKFVBNnRhIitwa2xIMSQjRF44byk9PCs6IWE/OE81SWw/I342OCF4U0s4flYmL0Y/YllvaixeYzUqeH5BbWFGTiNtSXdFSmE/I3M9R0VKXl8jcypHSVNUKSZtP1YqMWFTdGw0Rk58az55eUh9aVcvVmo1aFgwITBSMXFnQG5+Vm0wMj89SisleU9xcmYuMlNrME44T1JUY3tj'@;
put 'fC9hJVc8fkl1Zip4RnpzeEZUTFBiYU9YNy5NdT4vMCo0Tzc5P0FySWslRCQ+cWQpTWc0d09yUkUocEA5eExeeGJMNT1gKGFkMFtfPG9dRz03VUpSd3E3I0Q/W1Y3KWZZcDoqai5na01obSF4cWlle2RqdmJJfn1pJmk8VzcxIU5QQUImajxfITBLemRTMXl4cUp4NDFdLF5IK3lVSj19cj5vekEp'@;
put 'VCwoRU8jKmZYfTJ3dElXLmlCX1hMIkc2V0tjajpVSm9EVTwvKH1IaiEqNyoxM25VTjcxfXNFdzNVRDNFdzZeRDQ6NTQvWDtZUW9iPzIjIkVuJURSc2hCSk9qPm8uMS8/UG9WdjpMd1Y3bDhQR2FJKj58TF1oc341Xk1BUlpobDVZK1NPTjc7a1BmLjROTHpGUj9bP1lbbnd3eGMvand2RTtNUyw+'@;
put 'WTdpdmBpLlcrSSVLeV0sNFEveD08fVRbPVlRXUcmST9dQ1lHRTZadkk1UT5TQD1iMk95M2gpdlolPltVODJbdSZMZzxZbzZgSylReHl2dypbcXNidnRoTXEkLyM+JixORiFSM1VCfjEjNDt+SDFSKlc2JjteUWFnUWMmQ1VOYERDTVhlZE9KOi86TVR5IkhaRiVwM3ZXVzNqK21DTTtfcX05aDdY'@;
put 'fVUmfEE1KzMqW0lvWTc9N2JJOEtKJUB7Wit3Vk9dezxXcStuK3xJTFFWU1ZRb2VGcSZPbVpKbGQjZGo3Ulo+czpYci4qd3VIcktoQ3k1KkswRGFwa344VUVgLD1PIk8mY0ZrWXR9VFpsOXI2Ji5YNyRMKTE1UU0wRGxlKyxRXXV8cG54RzJndzV8XXEhXXF5clYlcmU1ZXxyWW8xRltbYUFMPnN1'@;
put 'eFpwIiJwMHs2JDxCdHI4a25xXUs2aXlkRkZPOi9BSz9kUlpqaTxuK3wqKWA2ViUhMlUjZi9gbF9kcmgoMTgiWzMwfko7aykqN21WN0RyIU1Ta3FoQEp4TUkveUptd2lbeWJHM1ZeJEJ6emQ8RW9yZGtlKVpfTG1TPl5TcyF3Z0dSaU5YbkAyMmRJSDhhai4rQyliaS8remJDK0RXRndnQT45IXJ3'@;
put 'XVQze1ZPNHhGKWU1Q1koa0swIUNHQDxgN2s0UXQrTXZocjQ0cyRNazVwZUdvZ2Y0Mnxzc3xYSEA+UHE/P1AwZ19qPlNBVil2ajVlSy8xUFh9T0lvd3xaRnlnIVs9fD5+S3lfT3ZJfj1EeUt6Rno0ZXtLOUo0T21ZL0I0bnRQfkUqXmd0KmF1I15wJHt6MTdILmIjR21ZNGcrNlpVdXRrZD9LJDI0'@;
put 'YkQyd3w/O0xDaUUsWn14TU5CSnpGK001cTZXIVViJSpRMmJ0X2xJPCNSUCtLQFguakh2SnM7bntNI0lreWR0JUVSfW1lTjRTclh2PUBrekxkSFcqQCRxMFJyUkNfaDNOWltWbmBEZ3ZdRWFAOElyImpna20xQiZKX28lX0dsVHhSMlN5ZUprejBSTEdYNHdWTHh5d0xsdEtXbjF3TEFzOWhyLypG'@;
put 'RlhyL0YyPEY7V1NAelJSQH0xcD8wUnBVWy4lfVVzWU1mQXBMVH08VjFqKjUzJGpaYyV1MjJdWCVCOCNxI2shb2syOWQwK0ZZeDc7VUQ3di9Lb1Z7cSNzP3RvJFZsezwxcFM+TDkrPyN9ViY4JSoxZjx5V316fi45aC48QElgeXBNQH1yazN5fFI+ZHt0ZmU5WEUwWTs0UUxXSGZdW1AqS20lK1NO'@;
put 'd3wrazV5bFg9VDk0Z01tZn46YVR0a1pfMDlDVUQjWGQjVTRWK2VkY3kubGMvXSRVK11SKHU1W3gkbFY/TkI6bFFDSCFAYWxVOV5BfDRYMUs5Y0RhNUBgRGtRRiVfIStmJiJtP1Y7blNLZiJxV0ZMMHA7bUNNfEpHK19KZDZELiRbVDxyeWQrNlZqVDxGbElFYGJTWSt4VU9PXn5iSFl2R2kpQzRP'@;
put 'SGlISmllWXhbdlR6YjlJVXlvYEtiXUkrPFsrU3hUOU12K2AmIl9XK3hdI1dFYG5Ed0Jwb056c11gWHlZQE9+IjV4YjkjI0UoViRuZl08fXV8OjYkNDE+Km91VDl6emFNK0Z3TGVoaDc7c35pPDVGXyErX3pzXyl8TE4sfF5SOzhNKVp+fEA0SkRSJT9wdmB5VE0pZW52I0h1NWVmK21jVEM0LDpK'@;
put 'cSkxX3Y+JDBxIj9xZ2FWOXFaZTx3U2UrSi9jWlMmfCRoIW4rfH5JLjFPVytgYUw2e1tfXV5Pcyk2cnwjbXpGdnN1dV9uWUA/KlNRNll8aVdbSUV6NDpAezYzRF5tVnYrbXlVWl91Z31FOGJ3VjEsRUsmUFpfe2JzNkBNez98TmNwe2ZCWXNhNTdUJDUwJTVGcnNec0QpX2d+YytsZ1QiJGc+TENv'@;
put 'T2Aza2tUJkd1PVZUMD82PkxXVltQM3E3KmVjfTpZYCR6cX1sJW1PPjMwV1Q4QDVFVE1+aVNlY1BQWmM7TSFdeEp9WzMrLmJkWzx3SHFAS1U3Tn1QIjwhNk1ybkk3VkQ5LEtTYmR7OUApR0l7JjRnUSl5WitvQmx+dEMvN3cvYCkjfV57eWRgV0ZMbjEpKnVOWGpObFdsMFdNVyxtP1YiJnJCT2Jf'@;
put 'eHZiZStuVVpWc31iSG9EQF5MSUxXVkxJYDQ0NkFWc19zPFFRNUZHJHNmdXFdW2B6fFFoaC5MSHVDbiUxS0olKDkqYS5WOF5KT1F0PkNlRiZGSyZOci8xfW9zUnhnRnhAZWFwLEJVO01+QSMrVDg3YHxPL0IzMCQuVStJQGN2MGprMT8xWyRtMEVkb1t2cWVrcF5ZM0NuQzEjRkJGOE9rcm90fS9h'@;
put 'Qld0eyV9NDtpfH59VTkkOzJOPihhN2xUaDxWUGwjRihtJDIjNHFRaiJiazdaL3JIZGwueHVoIVAsYWFTNEhoK3BFcTxQOzZNVDxQcFVaNmMyIz5JRENlNyplZmQiKlc5Vy9yQzM6UjlaOS8mfFsxVUlkSEVZOWRKR0pqLzA6Tyk5eV47Nz05bjlTSVNDJiFbKUdmKyE0USM0clhnNVtxRUhYRURI'@;
put 'bVAmJFkrXUFjL1tLNkZae2h1ImRdWXFFR2hkbStJTixjQmVBQFI3MkZYdTJYRXMrTnIhQ1VUITlyZ1o0TGFGaWpnbHBVSCJbSmtYKDIuOjtIPVJoXW8rKT1iWHQ/Uloramg5bTBgZ2VyU18yaDtkcGhjcmY3Wyx7IWYzamVkMDI6cjlqcFJsIiVeWTI6LldPflh2YXEkZXx5JCM5fShoeSJxe0Fl'@;
put 'UHlSeiVkL2QzNWx0MDVdY3EzXWBzX2w5U1o2Yl1SSVMjYmBZUWsvYiI1Xlsvb2VraFRdVGxLZjB6azRLa3d0b0kqZVlZMTF7IU8zNUtNTEA4VlFeRDo+aHp6dVUiYVdLdEZQbCU1Tz9NbVZ2TTJJVSJhWV9JWm03IkopSSVCfD84SyphJCR7I0JmcDAhQ1lEYmYxfS9eR1hOZHYyPHV1KzAxTmhu'@;
put 'WGA3NyRSImBGaylpY2pdQVZBMWZvKiIhUEExMi9GZyNaamBnTWNqI3V4SUB6RFMrQnJScXlUSFJNOjRncWlWSnp6aCJ8OV4xQm9AUDN6QVdfT1RbRmYqRWhXc18mQWV4amlFJWc9eHVSV3FPSjYsYkdicGZmOVJXakp9QkJaQTZlY3FiXSUySDhrXSZMXW1SP2NvU3lAJEZdPHVfQ1ZqeElKRS5h'@;
put 'L2d8cGkrW0goOTdSYT8xU1cxW314fHlSOTI2fjM1fEBPZCVXQG05O1VlKiFXcmtoVihEXXVvW0VfM2UrVHNTe1RJSGVuMjRWQn5jZE8pNz9dIyo6M280VFNPfkohZVFENGI3QiIwRDtCMG0mZn1AUS89OmdwWHB8UVBfdzg2cWZbcHJzdVc6SixeXlNlZSlOYTI4fV57SW9fMVFCbX5sUzxITXlO'@;
put 'ZkFIYCE/Zj8/N1ljQ3pMbzJIYyxYcnA6ZjlNRDdZVCNNaGE3TDNTKE1EN2RrNEc9bG5tayt0SGNEfUdiYyhhKyV9V1gxb2dzTExTKVRYIj5CfmdOPz5MOWEqPTdUMnF2dXF2c1EmZDppXXVCPTJUKCFAeWk7Z0daaitpWmksVzQ+TU1oLmtRT29eL3l6YWR3Zzg5XiV0REF4YGhjcHp4OVFlZUxr'@;
put 'dl1BZTVnKTlKI2c8IzRMbFBFVm4sbHBhY11naEZBMF5qKyhHI0pbZm9EQmFFczRHXiZeKzFYc3klNUlKKyM+Y1FEU04jOyozNkdaaUp6IzlSYnkvPmZ7cXRsKTo9M088dmN2SnokL2M9Zklwa01KJUlHO1k/I1JdMzZbLnY6eUcpMVVaLkdkelt2Jnc4KHA7QTZzSkI5W25hQ0d0eWVdUFp4TWEu'@;
put 'XXVBPlIyQ1lWa1pvZFtDOWAhWGN6PVNuT1lHe3JCNyYzIjVXXmZJaG8ld0lWUG0wMlV3Jkh+XVVIPDtRfVpMJm5GUmhyT11HTHJWd3spSiJGL2NtRHJxOEQhWj9tfU0ib3h7eElsRERvdnRlWUg1dGF5MGdOSndEaz1GdGZBM2tYKGYlUEt7S1R5enE3QHghNVR9L2s9RlU2cD9SYDZLKFI0U0U1'@;
put 'bWR8Lk1YN2Q0bE4+MiZSXWI+SntfUyQ6QmZeMnBeYy5iMlhURDNiOV82dGkmTG9ffWdHaHxdQ2JnTDF3Kj95XV1WZHh5PVs9KFJbXmdbWERQREt2enpwPW8zbC86b1omZE5hWX1FV18/U0FoR004JnhaQjJiX3hHflpkWjtBWDdBcVNuY0VoLnp2TnwhMXl2UTVGVTFaRUp5Ykl9WV9rd1l4Qzdk'@;
put 'VzoqaGVKaytOQWV8bn46ZWMyaDxeZkR2SVYoNytWK21iMnZYMyE0UXt4anAhX25xVHp3UUMhWlZZKzZoMjFDIkxQNWBXdWRPeWRGeWdWayZsXjYqKntAJTdjM0l5KywzYXcxOGRbI0VGOCEpak1yMTl1Mz0yQV1hNWVvLG4lTCkyNnM8OnNIcU5HaSJtVGF2SUhAQz58I3dKZU1Mazg1ITV0Oz44'@;
put 'cmtyVDo8d1B2UHhyODo/dzw6cWVWd2Q2JH1GXmFPOkdJcCZsaDdpYiZSIWtybUw5KF1kb3g3VTU4IyskKXxXeX5iOmAsPTEyO0RkSGpXUE02LE5GSn1iWmdaISUkN2k3a2xySENVJDFDSVJ6PiUlcGo4JXB5ZjxUJi9JJVRvaDdwO2x2NWVqeSsuMDBGPCZLZ0RESjQ/dkIjIUhMa3lRZSM9bHoq'@;
put 'RmJZIi4seXk7MHdxeTt5W0xGSW09MC9yQjF8OytuY2xTI2NiKjo9Y1FVYihmcEdaIXlaaFpNPWQ2dFlMcDtWLEVgbi94NCt7LGpaVG9pYSJbS1t9dmFga09yWGdTdSRtX1EwRXNVTjk6eWZ4ZDdkIjJ9fU1iR2IweTteaUZEIX5GT11qLlptbUAvKmduTixvQmFdMUVnL0wsbzRLVkN7LFZdQmla'@;
put 'aENxUCZHZSZyaEF6OmVeJGhjSiRYW053TDIueXglKndoem5ZZmpaa3tjQjgzJStiUHtQImRScFhZd2NQNCZBZUcxVV5lPkAyOl9BWCNrMVZZPj4hPnd8KnMmPVBxYUVqO1tKTSRIQVhVMkhqbHtgYDdkelRCKVB1WD5SNUNRaEY7ZDplfkJzU15tWD5SNSY/JVhwKCZTPkwhN11pJm1BfWc5eDZE'@;
put 'KCIsTDUxPyNhaTVsPSM+fFRfJWM/bWIjZTZlOEBPR3J2UiFSQH1JZ0VTQmU5SCUrVVtDbWg7SEl1NShrNkVVRlthZ0RSVylgUkdDM2MsYS9vSGIsRWA/QGhvJUVVZUN2NWs0dWh2ViM1OkpeU0I2U0c9cGJVPlM9T3RWVms+VSQ0VXFtSGMwS1hqK01IcUhtPkokTiNUKjVjSTg4JE1Saj56KXp0'@;
put 'VHJKb2wjMEN3I2g0S01FajRmcExtWHxqQ1NSekFBeyFUQXZEKU1OZkkpOz8ld3Buc2RbOW0lczZjXW5rWm8vMVZYO2gyV0FBQUFBQUFBQyI/eX0+THksQkptcUB7alVoYntxQ303Sj04MHNLVGQhPEIxKHVXW0F0ZF02Slc6Kj1CNC5jc3I0Om06WFMlbTA5fTsoazZ3cUJ5SC5IcWlkez1KVGZT'@;
put 'eU5VKmUkT2w8b0tzd3ohW1FSY2tbbHNhZT8sdmJ8ZGtqJShraSV2TT9EZ2xge1JzYXsmN2QoKmE+UVQpbTJIaH15X2hiaz9IWzddbip2fDt7c1h5bC8kXWo5T0M3Vi9+SXIjWmQ1RFFvQUUpdHB8cEEzKywibWwjWksvZHRhWzNyKiN2Okk6ZCwrUHFBTGFHemV9MXNGQjh2QHdNanI4NnA1XjpM'@;
put 'RH1gS19yX2cvJF1rQj1pQHp9TDVpbmhSQXhNeDxTXzBKfT4xOVFPTHQhYDozPUszNHY2O1kzRlJwKlh7KnQ0JjwqW0Y3Lmgwdz1xY28/YFMlNCsrfWtVPV89NylmMWZncDJnRSR+czFQVWkmJTg4Y2VhOTxtLlZCSG15eUFSUyJQL1B6JjhSVDY3RE1dJHM8bVY6VyplTFdIa0JlV0l8V2JmY1Ym'@;
put 'IzU0KkZvRlFxRyhWKk14MlZXPkxyPzBHN0FQMG9oTHJ0MExRYlVCRmBCTSN6RkBxZkM+QFV8MWRyfV1iTHZFPHZxL1BJNnxSTGFkO0NMYnlsS1csY1AsKk9NTjRbOmNTe2FndzIyPk48cVVHe0gyVy8xMFpyRXMyN0EpPzQjb1tQPyhqe142eGEiejVhaytkJHw+Z2FKXjxzS3NTe2JtYS51OyJu'@;
put 'WD9zNXs+UisufjUqfWZEUUxVbjJXSEJxRS9RcTomO1Jefn0iTX5qQnZlTnZNYFRCUVdEej9jKCQjUzdDI1JjX1NpP0BYUyk5Li8kYEFSOHZtRUJpLzZLWnk9cU5CZX5mNHo7TCh1bVAzPj5nbyhZTzFGe1FWMzhOYEBUXjNxe2R3PHE6TyNBODVVW1JVQmtkalswI15hVXdPJmsySFMjSCNecXRs'@;
put 'KipJYlkjdyMrKUhrOjZIQ31OK3hgW0UmUWI1UDs7L1FvVjhNJXZqKFRCT3s3LGpMIXY9cml9PF5aUjJDfVJNc01INmdfSFRzait5Olo+aFgvSztMPDRIWnBDPyVBWCpoYTRLPVgpbm4raVlmNU9jOmZOPS5VeyReZiVfZjNXQXlSY0xaMjdbfSZxYWltI0duN1drRTpuV3IqYHc5dzRzcTc5cWIv'@;
put 'PGF1YyokPHRaYURbUSlSdnJteXUlTTZpb2hNSHpEWyJhWUYqeTJEWktlaXVucV16N2A8LD9ycT1bW0RdZjFWRkAubyg2aWFdRldLQUBpNmokVzx3VWhLR19YKyEsZlB5cWNLS0tbNXpbXkYrWHt2OWlqQTAvWFU5UGNUaUYzLy53M01jfFp9N118V3I0dWVVcXpjZ1V3aCY1amR7PypTJiZYJSwz'@;
put 'KVleUVdwKFtBa2pbKWZfSyglSWM2eit1OEdXKWE5T2YsPz19cDBgSyRJI1VkNS9mc0hRQmAzJmdadV1iezhjcVgmTCh0UmZIakcxVkYoUChCUnxkMW01XXQsSzZCMGMoRmpeLGkuOXRPcW5ESEE6fnhwS2N0ZFtFeil9WXdGeV45UU53RTVONHBqMCEhe0kkZ2FRZXNUT2YzdiF4T3hyfDpkYUgr'@;
put 'UT0wI0guVjRLNFRRWE4+QzsiUnVKfmtISVZ8RXxdN0J3KmxSUmcvSVVxbE5rdUtmVV1EM2Rke1NAKWRKMiYofFBneTtXIStWO1JMNVJhMTh7X3NHRkptO0JXPE8sQ0tbdXo/LnA8OEhJV3wsSHl0RzhGPVJfSmhATSRiW2F9Ly43UGNwN1F7UHF4Zm1qbGUsW15qRzxFMmdEei80cFZoeyhvO2cp'@;
put 'UH5aQ1A4RCMlflBWamlVUnN0VTxkWzxEPy8iUDtGUlohQUchXmtvdl1Mc29ha1A0ZHB3XlNbOW1sZzkjeVM6TlVXSHF6aCt4M3Apb2IqL1A8cCNOfTU0NX5OVSVGKEMiMS87KUcqPVE3ODtbe1RwQ1o7fUs3R09oWj1Xe0pgeCVfa0leO2ZZYlBEfGtjXl5KNkAlKHVMMlh0N2YvL2xaJiwpSW9j'@;
put 'MzU6U0RFMm13QnJdT2xCfnQhRGRLQ0U8Zzw7ZVBjZFsrSEw0dk5HLzwoITRHWFAoPUo/TyhZdkJheSRzW1NoYDp3SHsvMjt8KH5sMzxLIlNOfWtlLDZBXnpFMChHfFJAPTlrS3BlMClhKC5LNk1Sa2k8bnQzdzRjLzopM21sejRGUXMyYj1CJF5oK15gXU93KzkiZzFFNiE9X182SzBgLmE0Njdw'@;
put 'K1c/b24yNnxPc2tGbis5Zy9AfG1Vcig4KjlMTlciP25ZU1o/dz1Qc3FAPihua3xbaTpIJW4meV4mPjExYlcpV1FgUj5RL2QyQlRlYEdHZW8vbW16WU4/TzleVl1BfkhgWmc+VGoyUnZEezt3ekJ7JmBnWmlkIyZmb2dLcztHZFZuRHkiWDo4K15BMS9deT58OEZUKTBhcHRtaihbN1VdWXhXLjdS'@;
put 'T3o1Q2F5dX1KelFsUEVOWl9IWl1LcEJQU1k8ey8jLz0qJnFfMGV+WGd8Wixrd1FzezdFM3VxMHpDVUIleFd5VDxeWHhLQXZ6X3BbdzM/QmU5VmZJdVdZMCQ0ci96NWgoMEBDa3JSLmNjeVZbYTlEKFZEaD9XWD5Jbj1WQmpwSkxDKXFmZz5YMWY0dik8JEMqNTQ0RFs4KiNTKjApd1Y7Oi4xN1Qj'@;
put 'R042Uks9b0Y0NFVwcyVKcEZwc1BKLjk2VywmPFtwJT4pKmN+NFdrK0wuVz10TU1pRz9APl8+KXsmZnZmNUArQUR4SXJ6NzREbT9ZZyZJRzRoQEJZIU1rTDZvLFh8ZGJmKCNmQWZ+OVQ5dFAydEg9PiVgSU1XLn40SX5YeEBwPCkjLlVZIjhFMld6KURvSzZMMz9CZ3g7QzM5aVYyQHFZWmtKXlQ6'@;
put 'TS5ealNifXBIUjdBPT9ZS0BKbixibU5wTzsqWiZTLkx5RCZIY2NIT0lvPWYyK1QkNEdfIWBGQFRyMXhnTmg6Jl5Jb25OSkgqSzZlRzZOaj12PlI9RnpKe3hveyV0U0UrVzljXz40T3hSL2lRXm1KIWB9OEpTfWRPQVUjPlBfJUQ1fWEvcCh3TSU8PFZGTlNJQj48K1A3Oi8/cTN0JiFdKSs8NiNq'@;
put 'ZG9aU20mbSxLW10vZ2sxO31FKix2OikyNCREdUNjSmpIZjxXaUIwXzY9e3hyW3pjaj5Mdmc6aD9gNkJRUSosRlpMMW41PWJKdHY3cDRCWHg8Qnc7OyRjITk4alpDKmFQLkVLZ0lfQCtMbXNXT0Z1QH19NEhMcUIuQEwuREJTQnRxbSxTMktPejdkKk0waGxJdzZfaE9Ee0ZlJEk5KVssTiQue1NK'@;
put 'OGxLNDN2IlN2dTosS1dMMHhnO2kwNmxCTGJbPmdtWjclKDFLdzIqTmshTnQkVFNPfElxYzp0bmM3RSVtek9GT2pwTSNeRCpVR2Vdc059RWY1SFtVITd8YjEuQXlCTXI1NW1gVG44QWIzViM9JilKNG5ZcXlxd0xDelc0dU4+TCMlK3g0eFhTajQrcChLM1N8Jj9ieiRAJTRHalhscEBxQW0+Kzg5'@;
put 'dGQoQ2ZAbz9dWj5ORDtTb3BCVEFQNH49OiJULnNARUZzO0QoWS9SfUsoTkEkQTxnW2EvNWQrVmIuJFhoPkJbQGxSXT1qZ3o9dFJPbDMuOCx3R0dZMS9Hd3JxLElFUGtUTz44bDJqPlB6OikxPkMhTDthbTQhK0xOVWBbVy5gZWFXZno+a2s/RlUxTihMZGUkMDRyPm85KSY5N01kMSxNUWQiL306'@;
put 'N1JhKTBaUW8yei8pImFeYjdocGl3M0tpNlIzOyI3Y2FEbDR9c0lMRUphd0BiZl06VkddRHt3am83e3twXXZZZE5XaTx1Qkk3KiFhMHpJZlV8QDhoZi4iXixSI1Q7bVJXI0x9Sl0oRTVbZTBRdThyZHwyUUcpaVFEOCtQYkdZODE3UnoiYklwaCJhOFFFPjQhKll3LkNNPV5qI2teKGlLMERlQ1Mh'@;
put 'QUhYalN2SzcmKWlYKXVScGR6WmN3RSUhKE1NVCl3KnBFN1dEW1hlZlB4RW1CcDlTZyVrYXtfPHtKTDBPOVZlXUxdNWIiJUBzalZrVV8zRXo4bjlJS1dkcldOWGZZL2Z4cj1GPiF9QDhdc2ZZJm1EUCE1PzcqVVJHdzI2OlQjTkgzOm5SXlZDL3BjeTJ6TllLXiI+REkxallhNXsucShDcHtIOTp8'@;
put 'anR3ayMzem5QWWx7ZElZZTs1dDw0OE4sR2JFcEZ3VTtfdF5gdEQ4eHAsNm11JXIhS103W3dBSnkjKk5vflJXeVk+ZndyTz8kfShtTDomckJSUmIoWzQzLENTUlVHV1F5TmkhUGtLQ2w1aG5lPWwyWGA1VUlLK2tta2hIc3RNP14lfUV2aCE2YmgqTzI/XmdZPE9qTVNlezBXeDFRemJOdUNoTl1y'@;
put 'elhqc3p9Xyt+KzdXJGhOdD8rQjVFemBmP0ZkVzZZSiR1ckooOlZUJCN0TjZVUCReSiIvbylGfDoxP19eRWQ1NTw7T20qa1ArLy9xP35OV0AvbVY7Un5Ie3l2UXxpNHJdfXpiaE5WUX1PNkp9d0IpfHMxanMiYm10W3FfNVole29fS3FYdUJNQk0lPE1nLjNvbldNczo9b0EmYD5Gd3clZnFHOXgy'@;
put 'dVdGOHEhVk18dm5WbE9tI20qY3JvJF5yQG5vb21OV1JtdUZSPkdpeXE8ZCxMOSVdO1cleUtQW0Bzb1RsXXBrQnIyVDZhK2Asd1pRQk5rZHY9S2g3aU81Y1cpXURyVTA6bjI7YkJSUkR9KFs8K2ptZl5aMHJKVnUmaUcjbCI4WXsqR20sSTQuUXR9NFFdbDdjV3haRzRsREU2UiMofWlaVFAqKXs/'@;
put 'MnJ5PktWLyNqLi88PEh2RXpLYntvQT5zWVIuLjdUfnQ3MCtbNHxbSTBhZCgpVG9IPDJ9c3FZXTppZj12OXA+cFE/TnMlMTJJI1tHbXhXZG55YSxvLClEaShfJCZtMjM+TyZwZmdzMHNhQz9oI0tiLzEhWnhPJnIzNj9bNVsmT1R8TXh5fUk0Z1JYKlZyJkNwdF5kIU0jTzh2PlopRjs1UkkiQF5S'@;
put 'Q3siXmtpNl5jaFRJKXRIIldAbTklTWhvY0k0WFJBIi4rPml4JV17WGRhIXROIWkudUwpRSF1dTQ/JjBsWH0pXjkmSnM4VGZ5fm45WDlRNXJMfWQldTd5LGhwezFbeEY6L3djdkdtKl1rb21Mfnw6OiRTLjAwN3F3fnJGVVt1Mz8wblt0WjFZWHxWdTt3eSM6KGpGeFAlMSRaOXV7O3MqeUU0bDxT'@;
put 'IywrN1hUXk59WFlwb35GQ3p1ZjZpLEVZMldLKj57SncuLklMNjZnYmphQlBJX1c9OjY0cShuVkY+cEZFM11beX4yL1VoYU1xYyoqPWBTXSV3SGoyNGp0dHhbQWMjTHtOdXtzJGEoNWA9QTk6SFBkd2thRklETm5MWE1LN3EqSXdNSXtGLnFlSjNgZy9UPyExMDMrKEppcmFFajFQMyk2ZCppMUVL'@;
put 'cS9PTHVnUF98JiMhUCNEaWQsaC5wS1BPalBLOkpzX0dqdEtMXmg6YDozRmVSQDlPX3NNJnVHSXZNKTdIYThtSHlGTytvSitiSHVrcHUzZkQ1L0ZJcSYoeDkkQ0Y0MH1hfHRVQklBfkwmfV13MzRPYGE7LFtrSXxocXN4OlVvP20pP1lsJXFLLkJ5QnojTlZsaWh9LHA4PC9tQjppZ3tDRlZ6VHoi'@;
put 'UVdbUywrLk5xPiRzby5CSER4Lil9dVkoXk0mUGMvRls0MlZ5LzlpZmIzSCl8NGllUTRsOltdSSpLX04sMmFRUjk+fDVAYig0Nm1sdT1Zb2ZMd1lqRUVRZDRoLjZxRywkeGA8LzVUeV5pLFtwJUR3ZlFiXnMqOiZndE51W1Q+dXsqPH4pNDgraV9kX0VEdEEyJW40I3t5el09RDdQKSVWYzlbK0hP'@;
put 'aXBCXi81SV1GUikwMi9YQjNYVEwwRGJCP1RmbjdRVV5kR3RAMTlHMm5sIkUpLDZqVUUxUlQqRn1BYH5RNiwpMG45NmkoUiIzX1M9UDxzVzQ8JFpGOk1BLFEibkgwPVNjOSpmYkl3SXNdeTlsaDVyV2AyVXQjZXJ6MnVfKVlgQH5eQT0/cntLPD1TMGd2e09JW3V6SnhoZClmPU03VjlAe3ddQSYm'@;
put 'ZGF8UHJQTTtJamNAPlF8a0kpR3FrKSwrPGhTeHJQUnQsUDkxUz5CZyNxWUA8KExKRkJRLlRSMTUkWU9GSWtqYHJJbnExQkNDOXtPN2taKUpQJWRoKkVvNj0iUzt5NEVJOjlFKUtlLmckUCg+eDIoU1o6a0JgTkM/QW51L3o3b2JGMHVFR0V6PkRMZ1JUbzE5b0ZBL1hRXjZ7QX4lKnsjUk9oR2ow'@;
put 'cG9zM21reCFVWSR1eX1VfFI3eyZjRl9yOnp+Jkd5LE4kfmZCU3NNWm5LRVV3JFVFQDxpaChKdnRiMS97LC5sZHUhYSpYczVLaVJkTk9gLkAyMF47RChYdC4+aTkyPCImTmBbcTteWCZtNFhEe2VQVWsieU5hel5UQiUqZ2cxaXQvZ0kxPCZtcGlobGdtfnU0fTZ3T0c1TzE8S1Rgb0V7KEJFLEtJ'@;
put 'Xz81WTttWD01IjsxOy9xd1g0KjZPUTlLYTIyYXdAdFE/PEBpQjQhUXNbbG9WfCUjWn4/NWRkTTVHYitpMyF5X0VOO2ZtWW8zTH1XNjVKTStmZ1BPIT5dRWxTUU0sUVBgdytaJiVUL3Q2T2xuYkMuR0VvdzRTLnpBXV5HdEV6amp5cl9WLEEyUW9LV3tQZmN0Izd6QCMjNCxGUzxWYn0xeXk3KCtM'@;
put 'SzJpImI8WWhlaXUoVG0zO25+SUBxSTI1I05LNDJhNkpRaWUwVVM8Yjk8dEhmP1pTTlpmJEg5Lmo4OlM8Q286OVB5JUMoOzsmLj5hb2kuXzhgIztQSXhMTzs6JipBMkYyb3M4SzFEIUgmc3BnSFVZdkdjRS5veS5HPUhuPS83VX1vcGcmPjghJkhsOntvNTxwUEtFQUlyQmYrXSooJiFtMF49fT13'@;
put 'fl44O3c1diYkbW95fSspNUdjOjNBVURuRzl0NSpbJit4ISF3TCpmd3VJPUFWe2o5QCIxYHQuaWV5c2xIOlNfPWNlZHhxSW5FUSlCNEhtZ1srVytje01oSXA8JkdYZiVTNlF4TyYofnIlb19veCNEO3FyVmAjezt1TzM/T2R1L0hCW2F1SV9aRk5LRUZOPUJJOUskOXdad0hpbnlZRV9kTF5WIzZn'@;
put 'VlplQSVMSkIqOj9CSjNiQlBoX1gzSlRBQGAob2QrPiolZUJMdlFWOT5IV1VPS1A7PE4iX1srZVkjSjZZQkdaS3JWPjNOKWJWbUtdYVB5Nmk1NjdFR3gzOmpqbTp4flk0MUQ7L1VWTkIkNElLM1l1YVI6KEU9YDkyRCFNLFc3eWwoQ0pjfWVTYjhWYFhBT145RjpkVitASioqTGlXOVl2YjdlPGFu'@;
put 'fD44X15vIUpQZlFYcDdbTl9NZDtpand9QnI/fV1jWkpgWE9gMjxPZj4lPFpybGBreyowKWJgb2ZCQSQ/YjZNSXM+aSRLYD4zYzZAaCRCT1lgaSE8eipfdHV4Ul5wcUxCQ1M8amMrb1ohKTdtWyZOPz8+OTBeYkBeSGFWUGROIWNWK05DYHk0cVN6aCRgZz4wcTpEQEspPDs2eCNPPXxAWyJXTk05'@;
put 'bHpyQ0Y1QVk4azYxfkR+P2pIe1Q4IU9fLCglXmJoNyUzeGd5PWddKUEiXihea1NNR1B+KlpCN1BaM2pgdi54VlUrPy8uOHg5TSN0LiZaTDg/fHp5QypJI3pkL3p8fiMzSHlmKk5ZQ011WFJmOjFOSn06Nkd5bkpPLlpSSnpZP2FDYnJsYndKeEt7Zj5yclFQPmlWL3NRNXNrfFc6RlVgMSRBLzF0'@;
put 'IyZycH06QEJqMzdjI0F0NDd6ZyZkRF5oUnJiKUssekpYO2gvSUl5ay5tcyN2PFBlWk8sQSxCWWIqM0dsUD1eS0xWa3F+P097eHFzS1k1QC5RYyYpKkQwQ0o+LGl3X3BIaTZAUUVhOFBPSkspRzkpZnpYSCpNcWQ5USJvKzZaUmNWNUs1VD03WmhddV1QVytKNjdCeTx+ci5HKzBKZCtkaCYsQV0k'@;
put 'U3RuXlQuRFo4dj10SjImTDBgcSYhTG9qRCMmaUo3ZEVXR31yOzlFV14/SC5FSit5fDYvUzExPn1UeDEudjxgUXBnN2tpYWRHMXB3WiRxRmAvMzNZRiZ8TUVlcEYiMmlNalk8Z30wPllvIy8vSHBfNit7JUM8bEBnWFdsUkhvdndXVjNAZGxqX3QuP00oYiFhOnBYSCtxQDEoVC5QWkZPXl9mJHxk'@;
put 'cT9XdDtzTCh4bFE5b0gpL2UvUDolb00pPmgjYT1oNFpbR1R4enw1LGVnaik1IlRmLF1NZTFtWltMVDRAYFJGMzZwWl48SCI9U310K0ZKXik0anhuaWopJCxYQkkvbUkwXi8sJDpyNG0haHFyMDpbQ3lPfltiTW8sRTt5QDpqKj9wdTF0YlRNb04oPHVEeGN+ITlpSDQwJEtaMHRyekg5fTEhcE15'@;
put 'Mls1Lm4+d3tGV2k2SEo2e3V7KytRPUYyO0EwdjtpSUs8TyNBXkU8OkFHTVppNjMjQypkRmEsXnIhSlhHMlZFej8yfTQ3dGAhQF9+O0NEV2RQJVpSK3d4cmtZZ1h9ZD5dPmtDM2t6cENJfFY6KyNkV14pRWVnPEp7VCNwUSZSOihuMiQjXi4idzhaMkdobjRha3QvamozKyVyS3IhJWZEK0RKOUc3'@;
put 'WUY9PUQkKjJLLzxXNkRMd2hiMiJ3b3IwRlEiJTdFPWpRczRWMDRvL0w9V1EzJFpULmRTeFA5R19eJXZXKClJPi59QC43ZzciJlM/fU9lRWN3ckZMIlUsXixIXm86M2ppNnVYbWYwK3RDYnswNC8sKlB9YVZDL15FOmU9Yk9uYHFUeV5yazg9TWdBazQmOGBYKTd+UXZVPj0+Zixfb1RyWlBaQCM6'@;
put 'RlpVKD0zQGZFTm4iKU85fSJsWmVNLiJBTTVnOX0jbStXbXhaZU1tdSVVUXcoaT9vV3dwdnwpXWkvRlJ8KHJWampRMj1hZyNKNjw0MGxqKnp+dyslWUBecVArfn5mdkcuUmg4ZCwmKEQ1QndMfDUqNFp6QzNVYTxJKlpyX3BePykzWnYwQ2goPVQxVElnWyljRH1COiZZdHk5JVQiMG87dFFGbltg'@;
put 'Knp0SiZAbzQ8WXdwMGk4Ml9RPCRmU3kzTFBIRjZiT21RdnxtWERhSG4jRUh3KnpKdiV8Wms/SnduL2Q6SWMlKjcmX1V4Kjp9aVgzc3tEOD13dStTOkomeyFsez51Pl8qYGV1SlA5bmFpNjhraSRlNDttPUxdaCxhRllOX2NdLnJnNkJiLipFS08oMztafmlPSkV3UCFxbjx5TkZqNEQqbXF2KnlV'@;
put 'aUVgLlhobHsmXUwjel55aElObn1ZcUBvKUdYSS5yRF5YcXxeJHFaVCo4WlFraTJiOmdrWntETzY2bDldRlJCckY6RXJwJFMya2l4UUwvZkRzPzZScipza05rPTxlZiZiQmFLZmR8bjFNTEZJV1BCQz5qTiQ9VixBRzN8OzBbMklucjZNPDUoOW9fMFl4fHQ2SmJlQGhWRnZ+YHRkWjNDNXcrKWBk'@;
put 'OSJYOmskJE5mJXVtaHshcTFyMn5eLkA0RHY/XnNsZGp5KkZhIV4rciU+ZVVdcyE8RjNTOzRLNVdlLi4ucTlGTHQ5WHRHa0tNPjVBTCRTeUdCVTM6TXtHWnJ2emlHfUEmKl91djVadDR3Xj81LGM6O3wkTiVHXjNZV0NVU1p1WGBAKVdDO2wmZUVUK3txZXJ8dUtvLEdwUHVVPktRV1VfMUYwdlVt'@;
put 'UncyKktbVXUkZkg/UXtRNyY3LzFCaEFCeVAicHhkJDBjTHZdIk88bj0/czh4b2ZgaW53fk4oU11UY3plcGBuVF8sOXo1KGByL2NITiFyXjE2RDJEYz9GakpxO1tQQl8ycSthQ1E/KTQ9e11GSE1AITVCNTRSQkFmbj83aVRJSEhkVz5XRExLR2c7fEBXdXNvWDdfK2Exdi5IIl0mb2ZadShoZDBz'@;
put 'ZmBOVGEhejQmNHV0ZVZGYTlXKSI5OXxyfDRHOnp3diN+NjsvYmN6Y01OakBOYzRRPyFgc2ZnaXkwS3owPzt6NDtGWnBtKldIWWBqaCEyUk4uIjUxOEpWNDBlJlVxNVYuOWAvR1ppKTEjTk4oKVFVPVJWZFJ9eHBSPi90YkdAMG9PbEJjNzRBaW1XYz5gRV1rOUBrS3YhY0dbeVJtJTJsaCttMEAm'@;
put 'Qk81P2VKTkY7eUpJKEk8Ti5iZV9zfkRhYnpBUT88TT1PL0lrM19kSlNhSWRedXZNUmJrbTp2UztFNVBCOEFwKigsZjR7VjImRDBGJitgOFFSdGgqeSZ4NV16JCNlK1Z8dXRla2d2cHkiJVdGQ2hXdG1UJmc0eEhFXzN+PXsiUEpyRVtnOFU5VlVWXkIhMTIhK0NLX1pwLHtiU3tzNSQoaFRra1Zw'@;
put 'MiJuelBCNX4paCRAfUlEZGhlJmtSZGBwcFhAPzEuZiVqQk95eWlDNkdRR0YsYm9RZWNWRHAvXmFLRkZ8Sj5YKldOSFFAOWE8NjZaPTMuX35eS0lRTlVwKVBAbVRVTCxTZi4hbUB3bHIzUlFRZTgsdUhMezY3Ly97eCNTLkVsUnBpLkNCOGhzT0gmTEZDRFlMLlgkLn1OfXcld19vUj00bmJxMkkm'@;
put 'QFhxeERAWn1GQFksTSFxZkUkQjl3VnoxYUp+fEV9L1dnREM8KjpkK2NMJV13S2tbXWolIjV5dHMyW1d4e1BJNFRkejR8cSJEKkIyIywjWEFDP2wyMUJVaGN2eD5wN05YZWRjN0xiUjgwXmJgalFIRj1gPjQjYyIhRm89WUxYUV5kYzp3Q0sjenxXUSNYTDFgXWBWeUVnKDgrIUpYPlglRmYoXmFu'@;
put 'W2lIWG4zVFJabExhQ3Z3OVs8X2V9c3Z9eXIvbDZkdCw1UytaUUdnYX0rI0trXT8uSnRgL0k3PzR0WGM6aiU3Jlk+Rl1YMjQsTjFYOTksIz1GUERrP0o7cSt1NHN8cG9PMXFFenY/bnBgWiQxclRZYWpVOFF6RUd4LjVpVXVyO3d8L1BLKmFSZHVEZzBOJiwuZVtoeSkiRkRZIWc/dlZrPmFJJHc4'@;
put 'NEssa2NwcDdze2J9NiRdRDNUM2luNjVTKzNQX0JLZDZZKUY0XlE5VWsufjYjYzk5KVE6WUprKU1hNUhNSC4oWV5pdF4wSWVjTEEmWUwwRloiQiNHZFpCSm50eUh6NVJSfVFpNjx0QCZEdSkkPDV2XlomdzkuSWNadH4sRlBhZ1ZEZFgoTnAzaCJyKlNHNnBWfWJ9XmpuS3dgfSNzQnlFPXNEKUY5'@;
put 'QWRCXnclKEV0VHhySipoI2pHdEsjM1hlbmNpOSJyeUZlKj4/fDpgcCNBc05oODdndTpEZnZSXXA9elF9ci5Ge1pvNXBhKzx0MT1+Z3czPm9KNHhydC5qNzFhSGkyLiYhcyQudzNXXl94SD9sUz99RGlmTF0/fVc/NWNjKFpjWVc+bHFUcTN+QjptYFB2VFE+SHohdiFMW1Z0Om9UZHojO0dLKDQq'@;
put 'RXZ6aVF8LkpeaXdiPilhXlJOe1toRHFCWUhiKSlPS1IuSTJKRiFTWF44JEdHNEhQRVhhRXxlLF5COlMvSm00ezVxYUU7dklSL15PL0VETnE8SnpKNFFxImhUPVomLmYqaDhtIXt3KihhQz4mLGc3Tzdaai5MeGopa2JpUmtnZ2R6NEguOENYKHg3QlJiX1RsMFg/SiJyPVFeOU8sKkdmZlI4dC9b'@;
put 'bH51QHcoZVh8UyNNaTc7UEM9bm02K0xWR24qWzlfMENVUzNiSSIvVWFzfiJUQU18M19jUz5LNjkvTTsrTmt6dzshR25EUmZDeWB1L01ST09wQz00Kk1OQFNWWWBxUih8RUwlW1Q3OnUsfS8zXkIlN3RffnRfUiV2bSRGWiQhNld8WmJPTXJkbiJ3Wit3K21DQ1I9aSNGc25fdEkkcTBPfThRUzJE'@;
put 'RV9BeiMjamkle1d7cGljVixpSyRNS01hUnMvUztzVnhFX19QSjpzLE9ddmlxI3guS11eUEdwbkQ0VWJ4Ukx9cHUmZj4jXkM2MEhGb3M0QlpHUUlGIVE1dTZ7YVteQikoW2ttWCRMZl17Tlh+XzomJShqUS9GIzdXcyhBc2NXbV9eOitzVj4jI01oNHx2ViZbcmNZJjc3QV1GbytLMHBXISovalI0'@;
put 'PD1PZTJ7YH1eSFtzfn54NVpgcl9jdmo1Ryx8MSJaZD52XitLUjp1OzNkWEc8T0tzJjp8c2IhRWlPNnl1RjlqQV1gZjMlak5SdEdYZlR8dWJKJWchfnhENkA0bWZXbTtdJEhJJmV3YXReYGVOVzh1OTFkRCZkdzpEe3tPWXJvREk0JSheenB4c245ViV9Q0glK2NyYTVZJGNEdi5+WnB6ezIiNlc9'@;
put 'T3k4NDh2dXEwPFp8WCFVSjY+S28kYktxaUc+dW5qTn1tcDYjcThpJF56Y2lXcGxKPD10RzNRSXRgOCJdPXBTJH1zY2dkWGBnXm1YUVglKG5mcilTbSZ9dFNySnojalJMWyRiZ3RDXk8lRTwrKXFIaHImR0h3Jk5CRjQiQkNJYSFOeDIrIVt2QixAQGYzIkNoXXJFTSVtdWJkZ0NdOjFucSIwZip+'@;
put 'UkcxJndTRz4iJFVaZEtUdCk3fX5iYm53OSpKSXh8OzNScE1jLCQ7VGpkKCVpaCNKRixPNi9GZzF0Vns8bHI5N2U8I1R2Kl9IXXYmaTloNkhDUkEvQFN4aj47RixuQVgpRT06Qi9gLjhvYixPfkxIV2VKVkZjSm9ZQi9JbUhLPy48VHFqS35kImpyWTZ8TGBzInozZlM6L301fVgsPWlaUT1lJlpZ'@;
put 'THZhNypOeDRMfmdUbUJPWXk/aHFicnU9NkhgdTQxM01TU146OnR1ImlzcSxXXW9SIkY9alkmWk9eTkpoUCg/UGBtLGRuPiVFPllQU2FHVnlUfnRPSV1UaTpZRk1MSWE0JT1MS20mbCpDWCQ2W2l2b1hSXX0jTXo3UUF7QTw+emBjV2sxV3o1SyFQWEUmfFhxP1QqNmNYWzNfdmw3Mz9gUzV9aSJj'@;
put 'fSRKcnN9X2dAMShMSSZDITdWY105M0hZP3d7UVNfJCspcVYwZ21JW0Z6QGEvQ18pcjB8dGwyTylkIl9TUFB1cF8xI2peRmVrJT88PTF9RWpJcGppQWQlZ2lPMGMqdUA/QFo+OFUwSm55MGp+JnA+cjNEUkR4PDUuNTo5SmVWOCJQeHJsMX5CSSpLT3xgci4ycDRvX3dAfix+bW1iZHtMdWE+PzV9'@;
put 'dHFGRmRlSkJdMls9Ql4vUFU1LnU4TyNxUy4zPHJyT2gzIWs2U15OOkhkaG9jcyx2XipvN3QyYiosfFRteV50TSQhS3tMcSFyKVVdQjRIXSl7NEo6bmcmSFFlW3okISV3ZWR3MnowJC5jJm1FOndwZExoe2dHalcyMyhrP1YiWEYxfEFdXkRxIWV0WmdyZiVrdTspdClKfnk+VVl8K0JVbiQ8UEh5'@;
put 'ZEZQaCw7WjR8fV11OG9IW2RyVncsSm06bywhYmIpUFs2WXVCIXluK2g9c1U1TVp5Y3E1Rms9bzc4NmZdeVJ8OmIqNmhaXll+MGs5U0MkPzJSMEJPKjJYQ0pfeHk+JDcyfEE/bCp+fTA5QCw8NW1Ze2lzXyxjeXhmJHFSYnVbfk5TNC8xWzJjJn43Lig+Y0BHZHxeJTgheHtdRno3cTBGMGxFKUNn'@;
put 'PFh3eT5VSmtATyVUQnQxTjlhQkc3cEw4YiQqNUlyUUNgRCVIPnR8ay44IXAjI2BFTShJeCkrLz5yTDN9V1k2L1dwXVgvKHMyaE1JZihgZ3QkOCtEUTZlSUp5NntRZm8/fkciQS5EZjNiMXwqM3htRnNpIT9dbnE1SF19UW03JCMzaiNOWCQveUc8RixJPTUkfmlJKS9Afipsc3NDWS9LZmE/KDkk'@;
put 'QEhpTU0zeUMwekskdTdLJC9CRmE5eGNfZmArVi95Rz9CVilifDBnTTlUemZuJiI1WWFdaDpzZXl7YHMyeF0pcDEwLkFaTWMmdGtrK1pVSWN4MD5eOVJ2aihjQ2FOUF42YD09L0ZzSWQ2Wi5WeTFoUzhBXjg/cTZ4M0s9eGpRSjpYNyUlej9WdHJyTnZtKzF0Q0JCZHdxSHUpNDZPfmFQKVVDVzMm'@;
put 'LnpOMmoqbC48WGhNOFhqXlVAdGJEXmY/R1Z8LGlIZGsmMyprdWdQT312M1hLNXxIUXJEMlJVN1A9V3E0eCZiLFhqeE9dYiZ6QlE+M1JgWGRJeUwueGFdJilKbXgiYU80ZTchdVtYMj1qI15VITNaSVMvKC8pazdnWTlAVT1mMXBmcEdKQEYlUmckcT9mZEd4YyNpJStNZlBkPHIuO2FTKC5NQFsk'@;
put 'R2BxV0BKJT9jfU58cD5XU0IjVFczal4iLzg4NkAwdFo5QEMqdXQiV3lweSFZJXx8dCtoaVYpVyY8ZnNVXjoobVl3ZHBHN1FlMl5CdjIuTjAmb0BCXX5ubzFITSJKSDNYY2xPZX1pJFZURC93fl4xWDxMQmZsaTxhfDhaMkt6VS9PUWBHailPP2omOF8zJisvY2svZnQsOiZoeVUjYSNjRygoX0hT'@;
put 'QjQiTX0+aTBoK14hWTJwKFovZktGWmdlYzNPeU1ibFUsJH5ONyx0Kyxrc35HQFlYe1lzeGZdZF9FWW4iLCt7P0d+Tyg1aTQmV2BmRy4zYDR3eWxqRD9KJjs/LnI8JCkmJjBAPn4lRHZZLFcxdWg5NyYzL0xQOTs/ITdNVV96IncrV2MibnlWdkRSUjM1PV0uYDxON3EuNH0mLmF0fkw+QFM+Oz91'@;
put 'cEJjOVQ9ak5zZ1NyOW9RJSgpUmsrRk5yUDxDbjI6UUVLMltFUnt9VSVLYzc4MTdgT0ZWKlUvQHNlSnJ+JlFEIk94SURWbSFzQS45PEhtZTxERE9xWm83ZkRPZjQ0WGoiWW9fKm4mfU5PYTE2cCVbaTFHVk5Te2xKRHQ0ZW5IfFB2OjtTUkJEeC5oRUB1MEpab3F3SDpzNkpTPzZvWksifTBuMl83'@;
put 'Vk08cVFuK1VxbCtbNUNxajUqNSs1PHhvVD5BbkZeYkd2P1VsYT4veHc5dzZeSCJTdltUdEUwXio+eltzPTYjSyNIfTBLTC5+dWxWW2JYNX4xP28qbyp0YyxfUiM1Wm1aIlRPVCR0RnBRQ2xMdUk5bjJsaSJuW0ZxPEBtZ3VbQXFeXixvK1ZdS1lFbFFuKExUJHxiZi4hSm0zLHRqZUY5O2J2XXcx'@;
put 'PTBRLlZdV05PJD47Rnh3SV4xek58Z3BZVmE6V14oOyhuKWo2PTlJUlBCYiRKNyQvPVNLK3hHND94MU5WT3Mod1JUamREY0thKlhsUjw9NXtCZmlXYCZDfmZbXj5fUz1zbnBAb2tsQHYwVi9laClzezEkb1JLNSVTUjI2bFB6SkBAcWt+PUUmWyQxIXtpJFdbLyxSOy98PWA4NmVjRjhjIi9RL2Q7'@;
put 'Mno/LF9DN0UoMkV3LHdYa3ZRbjt0UTola2dhWTpFIktZcDx3UVNobFh+MmYiUDRKYXF2c1Z0OTBuT30md05qVHlgUUtMez8qJTEyR0ljQHpzaUU2MFZPPmt+MFRPW3Z4JXpBRXBdfkJaRl5IWkI3V0k3dkRzSSF7VmV2az8hMTphbChIW1dQKWptRi5xfkBLKD14KDlhOGluNE09aVteRHJ4Wk5P'@;
put 'Jkxyd0VLX2piLGA5fSlYcklnbVNmbXFLeGgpaipveHo0clcuNmd6QkVDPD1+aCNVKz13aX08MjpHSEEwNDdzO1ZRcStSR0M7LmRLYzRge1gwL1hWSHAlaURabjJTNEt7QEphdEIpKypPbEJhWV1QKERpbHNaPG9RSzhgUSIlVFJ1KXg8RUR5PHNsZiU/SVBndnh1fCxhNzVZPEgqMW0kLjFKV0tj'@;
put 'eHhwUDpYJXtxTzVTRywpQiYvYXUzSjwwQiMucGd9VDJecXVuZC9ASnRGWWo+fHJgaiVxInVNP3gvWDQ4IShTZz1tb0ZuSTR+UjpVaH5hRSlheSldb3RlLy9MbDVvZnQqelVIam02R142VjxgQ054eEU4dlU6M3BGIylWND01eFVHTTxNMnlLcD1afEVqUmQ7MkdPb1JlRDZrTyl5dSVMcFg4YkVq'@;
put 'S1trcG1kSWpKQDAmPSkxY0AzbiI+aUA2Q3ZSeTVFc1J4IW52TFtHI1twUFNIUXlANDtlP2JJTTVhbCxZY305eHs4IUFwckxdL1t2VU5JK3VlZjtVeGFrZ3x5OlBRYFs7JlZIQ3hLKTNEYShhTyxoTD4iVWgkcVVyKztLSDxJM2NGUFM5RU0qfnBbdEFsc2VNZ1cuWTRjTj5OJkk6P3dLdiVyeDhT'@;
put 'biFpV0k1Jjtibj4pTlt4Q0RjJGcsRWl4dzRDKyMoZmQ3WWh6V2M/L0p7NCVwKSgyVTppelZ2TnZlOiUmM0dPVE8qLDhVWyhWa3EuZDcpYEVwXUExIikmeS9BTm1rRzw8V2ZmdCkuMyFOIURMNWtVWGlLZzUybFdDJVZwUXR0fmA6NGcycDhXTU9LNyQ/emFyKUJ9dj5SbU5dZFVXWyUhNTIlN1d2'@;
put 'QH1geG5VcnF5VlpJbS82QXxycDElNEtpaD8xcXxQe0NnTld6YXB1QTlfV2FfKnsqOXg2eFdhQj58TFJ2KyZ7TF40V1lDMFR2OXhLIz9BI0VHekgvQHRrb1BXPTxZQ3IyOkF3Lk9OcmBCMEdsanZ7ZGNvcWNucT14cERQdktSLDViK1NTODw8bT5AdjIvLEdIaXBMNHJqazJtWkxNT3RjK3VweCt5'@;
put 'X0tzbkFhT2JSYEU2JU07STpFWHo1Z1MqTSpfUWpTelM1WkNCYjxzVFslJjVRTixPVShSOHN5d0xhdTNKXWNhQ1hzTGZ9YnFVS1ZKTn45Yno1XSJRens9OzNXMU9XUFJyPCtARjB9QyZdN2FaWnBVUUBud0ImciEmUlhVZyJJfiZbRzA6cXEoRTt6Z19fT115fH5nb2lPJF5xVSNkMjxiLkklRGpM'@;
put 'OSM5blpeZUIpdHZJUjtYZG1ke3NzUldISW4/N0RMJE1vWnlGMVh1angiUzdmKTVHLj4wZCMlSnlLOCopTUBiYnBRJm4wZC81KDMsWzdNKGMxOGZQJj1DPXQpQTlJS25zSSQ6TVtRVmgzKk1GXz1gbVlfOktwJm8qO31BT2w4aWBgV25vMXldQmJzcU9MZlJVQmlHY1J2LEpbaUtSPTxVMVlvRVhI'@;
put 'P0N1WGp2KStIPilTJnQ4bmhOT1IscWZuKUdOL09EUiwhTXRYWjUwZmZ1Wjx9QWwyezgjSG57WXhsLDA0YnRNMG9PVDg/VHJ4eC9zU3dYLl1hdlg6YHpRZT0wWHEibGZ3Wno4Ll9kQH1zP1g8OWE1aj9ENHBZazloJmxOQj08QDR5em5ANDEmeyVFcz9SOVNeLFlLVnNSUmlDW0Y3LyQrXis+OzI0'@;
put 'Rjdoa0xrOztAdz1oaHBPZVR+YjFESWt0MTNmbTdYQXc7UmxnaXRFQH4xXUNzUl9qO31ZJGNITiQpR1JAUnJFOyomYmdodVBYWzZJPlBYZXx5P35nPlgpfWghQ3VxcEJpNzdnMHhFd116RW5rdFc4e2J6am9fbCFTcjIsOSR1WkJYVmpbMShmNm45ODtUZj5QTkZTW0hwakhEaGllQ2JDZm92UD17'@;
put 'LDIqe2I9YUR+Zy9KRWM3PGBeVU5LOjdEOWR5K1hvX3NHSSRZKCFoPDx2aHwqTmxGak5nWVchSF1odXY1aHIscXVAKChNUTRFJSNhTitoS303d3xoU3RqfFQxfnRfJGh0PStvLnQ/QElpdSxtSG9ydkN0Z1pAalVyM2A7NzU9NTh8bWIhck4/VTRCSj5qWG5FM2NtViNpSnRHMjM6VyREaD9nSWVT'@;
put 'V2BgSGBAL0xWaXdoVXtdOVcpMmp0dUJeYThoRXZveytLTSN7WFBoVV9qSCkhbkx8UF9gVUFBVVkoamE5eyUsOlo5Z0NgNDR6QzYpJCY5VCEoUFp1Nzo5NFMrKjlvdX00Q2FqKCl0I2VmTn5NUStHa2hKVDh1KGNMSzAydTRZSVEvcDZMLi53QkIhNDtEJElqcXkjYFFmZ0hiZ3R0VUFlM1d7SkAx'@;
put 'PlksR0s5Q2YwfHp7KiozQnEzfjVLViEvUXYiYiE/ektmOSs1VSZlVlZmW2A0Zl1ZRVcscWRMWyNEbCg1UiEjWCxQaDFyRFo+IXxieHRvbnVqLmZaX3xfZk9BeE5gTlRxej17e3xsOSNVJFpyP24sW3wjfldHfiJGNnF5PF1zYkBCSn5WeE47Pj1XITxqRzxFXT1dU1JLPiZlPV8pN3klYlIzU0VR'@;
put 'MjdIV0Y3QiZ5cWhbR24wQ3I6cnF1ZHdPRyFYajA8d1RnSF06OywuTkNBRzx+NDpLUGlSI34jLEpWZSglM3YvO1J3QFMuJkVPXypIS01tOHZ2cTVTL2ojV1dMMVF6TE4weFVnKlJVWS9jUF43Q30lWyZGKXFDKzpSQ2VOO3JCMlpHcDZNeUNaSyFiRUJOImdUbWF4V1UxPzBDayt5ZSwjVHhxOUQo'@;
put 'Tnx8WF14Q3o3PFl1amlpKzVnZyhiTnYoUDxDSG5HOWVYTTF4LDYzZ2VoXmQ0fXhZUm5Tci5nM29AdkEvJCsiOjI8akg7Z0JAWyVdLldQK2gvOjJRNmQwITZfb3ZFY3JpYyZvTiV2QWp4QyVSZjgrUVlBOzV7WHVbSjF5RkY3MHIoRE80PFAqSnwqdDBZQjVGfXpxMHtkJHN5Vkk0MUUpIXwyNUtb'@;
put 'ZXZALkV9Ul1LJGxyYGxQQGFCdytdXjBqTlNESj1dQ149Wi9WP30pfGpuYkB7PXRuZVZVZVFqN0VIYVZVKlh0bHxgSUp1NWo7TjxsUzldTCNELmxrR15dMTVkVHJze3plRjpjSltXZEQqaWxMd3ZJbncsTyZjV1BwX0lIbXFMXWtCXUsuXjZzSjNiclh0bXdFLGIvQihXbGFCZXxtVlRoSEQ+OFpH'@;
put 'aFEpMGlXMyJkMFZjYkU3bnB7ayZuWz82LjNbdWVARHh3W2FiWmpMblIvVVpsNlQ3Ii9+fkAoS0Y2cCFEa247c1s9TFJ9ZXZGaFMvQj5FQ1p1OXl0aE8pWkByd3dLOTVNPz9HQSshNX4mZ3g9OllwfFJZOTQ8N1RWRlFUXnthJEdDPzMpRVkwdV5wdFBgUjpoWk1uX2xJQFE6fVg8bms/Y31OKH5D'@;
put 'IUcpWWRqKHJaPlIhJlcmVEhRLmomeE5zIjoyTyVXeDY4RWJdK2s1N35UdlEwMiVIajUyR2l9JSFKUUFPL198UV12MSxTLlRNcEdDJjQsWjA+RU1+XWFJemdYPmNQfkV2W0E4OnlRYzE+cyZOOF9tIW02ZUh2XjJhRzY6alFDNC46JmUqfG9AUDZhMnRqMmpsL3JqQiFJSWB4SkpiOyReJHpPZiw5'@;
put 'I1lufEU0Omh7LnUkYjBweVdRdzQ4V147VjxyZyNwJEAkWFpKXnBlS2swU1hVVXU2Kz1rRD1hJVdya2pqVklmRlQySTZ5cD5hdF0wM3ErLGxkQm1dInh2JjZlaH4sJHUlJVd6c0pGS2pUeFpwRGsqOS5ffCwvYDk3JGlVaUJeUkteUH1LQH1RfXlEeGBCe3BLcWMyel8ie0VrUnU3JVhzTEdFb21d'@;
put 'VUozM2p+L2tjY3pJW3lyKyhLVX0kSjBbWWo1R1dFZT1mSChIYl1XRi9OYmF4NFFNenhaLFNdbTdScXVFcTk9VzRaQkA8TkdiMStQS2EmdiQzISFPTT5Kdy4uYUtZejRjPENrdkpffEc+akBOY2hpSlVXaGNLbzVeOTZ1O3oyZ2ZMK2EycHQ0Iitdb1l0Wj59Tk9XbGQ+NngyR3osQFY3XnZmOXF9'@;
put 'ZTJEIiNZJiQieVUuLi50cXBHVExMSU82YzFmPmdDPUsjUXlYX0hEQSl3M2JUZyJYMzNLRy4hfGZ2KXpGPWhyU2gmcSw1KSlQMmB4Ijs/ZG0iaUhrflZYP0tHYjlDWzd9QWAzKFozYXNXYDxMfG9BeyxhRWIrNGQsKT9UIURVWlU5OTZbbGVfOTR+Vls6a1RJVnolNS5VaTVZUSJ+NiFWL3FuSEEw'@;
put 'Z0x3QUw2UXhffH1TdDElXVheeD5eeWFNQ1I3W35hcEVISShFUi4/SnxIRUthOFA0IjwsKk1BbkY4IjlOYVVCIkokaFhXVGpDOCFedWBNaSEkPD9NKjd7K04hWEUrcXlJITpnW2l9KEI5OCxoLiVxY2h+LFUoYDRAYW5rR1V8Nj1zLiFZOC9pKio0T3JpOkpdd19hfVtKdENIN1JCIWpaODVHbXVd'@;
put 'SHcmMyEmakR6JVp4LDFhaSxNP1B+Ky9ifV9jeXt2SThxR2N4V2k5YTpLbXV9Xi9tcixaWXZpSTpmeFI4OjImW3YvOyooJXdEX3AiSzZRREA7UGlJbntBQ0ldQzNqP2x9dVJBLnA4PWVsJUBobD54Mk85Sm4/WEJhOVNMSjg8Ti9qMkJpRktyLjk0cE93fWo9TipnZG9oKCM+WjdRI1h3fmgxKXQi'@;
put 'cn0hNVJ5cC8wVShAfWAjKmxhSXZSbiEieGFSclBKL3R3XylyUzd3Zj9NNUhGIm1RYkQ1VWRANX00RCFVKXFtXnNdPD5mfW1HOWQwbURaImpZZ3lObFUwe2B1Lm5CNSp4W3lSPHdIS1U/alAlaGNieV0lbDw8UWc5fU0+WmVFMGdOWHpfRksmUW8lSEhCQndwJWshPVYkNVBWflVeQ3h4PDspZVV6'@;
put 'QWBhMSNxJnU7MVN+Y11yayNiJDM4L0lNWnZJQlFeUXVwampSd11VViF5I3VRJF1Oa3twKmNfQ0gsMmB9ODs0MCY0a1g4X31FdExGKnBKdWo8eDM0cDFHTjMybyk3Q0YyfixWL3lvXWxlUl0qcHRZfXQ1TC5ZU2tsKH1PXy5PPyRFS0JDXiRGNGNCPEQjKEtTWkRzW1QkbUx+e1NxLz5iOEpYKCY2'@;
put 'VSJdJV0zSU1GcnJqN0p9XmJ9cz8mSClAPG94NitIJSVOPDV9QD86bXk2RDBXXVcvRXkzd15RS0R3bUY0QypaKUBNMXdXM1JbK1I4JiVXLF1HLzpwUXcmXzpOUX5jPzlAITB7LF4oOGRkdGdENjlNMUhqJFYpby5fdD9wPVUpeCZRXTB0bldUPlQrMzZ7RXYieGR0L0dJdXF9eTFibVIzL3dnMzY8'@;
put 'aT0/eWF8MD5LZj9MbHNTSS9KeTV1bVZoVitMe3Y+SCJdNEFqbENgW1JJO0NZbCNHQ3RXdXdTdElpRVl8MS4lPURyXUVOdj93Rj5wLGVOSlZmUllIbV9CQClvJUFjeUNMKzBeRUksMDo7XlgyRyZ8P2RfW0UmL1JTKG5CSiJaVnR9PXZ3Lk4hLGlCQE5xPV5yPzQ7eiN6N1QpZX1lezt8Ons3Ljcx'@;
put 'bWNde0dFOTJDfHx3a1B6YXc8WSkxMGNWdSI5L24oRG1NWXFmSGtkLz51NntRdjA6O3tpLldQcExefTA9MWpyPCRJY3o/P1coO1lFZ2BQKlVqY2FsbFlGXlJNUDs7PnpFe3lvYmJkZnspISVlNElKZS8hKHRITl1xWTVkTixUZWU4XkZsT2ZeUzwmOitUNk9zYHR9LGMvREZ2I3RpRnBSfktld2JD'@;
put 'RjtJVXlSb3VNWXppJUg/OD1CfVo2Qm9qe1BuR2YpREhxZ0sqZisvK0xOJC4yKitzMlBaW110NHpDYWlJfS97Mi5QNFpzcVhnPFpxd3IzZzIlSnUrcnhneTx4VU9SM3xid0JoYFBmPyJeZSZdbWF3XnNKdWcrQ3w+ZH5Na3FGVEpCJU0rYmhyV1JFXy8hKWk0bmJKbHx8MF8uS0p0T25AWGkpdWA1'@;
put 'NFQ1by4/aiRZaDR4L1o8Q1BhMiIkQzt0bEk0OU9OKExNWHZ0JV8uQFlwOFZbYjRKJDQoXzY0O0RiP2c+YC4ucWg8aXE9WVZjIl8heVRJSEs9UzFSMCoyTmZfOiI1Xkd4TE5nbkcsWUoxUHk4KE9pR0koZlVPNylRPTNWKyQzZ2NHS01Ia2YzUG5qfmZnPHNsbUdLYzR+JlRNL2IsYjFSIiY0TCFT'@;
put 'cG5IMmhkRXFvMUk4biEwMT5kXz9dW2tNfUVZJmFYejwkW0lwQy5DMSxuPVEvWHhLcDRDSnIuVykqYTJfKnErXy9SXjUoTGt6YG43eDduJihMZTFbc11UXUFOO2gkWVQuZ2ZbYj97dykvZk4zM2YrWFZZckpTJCtAMmRVKDYhfHNea08xbFt0VHpgQ19uYXFoNEsoRD47U1dMQnx+QGwxc2g0WStx'@;
put 'P2pnbUlfTHckRiIxUj5fI0FEVmpkeGI0cDV2UCwsO3VTfmA2TD5gY2IuOGQyWigsZkAqdUBNdj1vJUUlemhafl1xUXJuPDh3TiIwZ3dFVz9OMXBVdXBWRGx1PzdLP2tOY0dMNyYoVnI2c0QkTl16fk5IRiEhSTtrTTdbYSxJV2MiKm5yX0RsXz8zcGFeQ0JDQENPZ3oxRGtoMS9KdnF+OVpwUjlq'@;
put 'cDJwQHJJW1FdKWh6PXNiS2JvZU9sSklnT0BGJjtSO2tCREJILm1YcUs9KFFJKVhxd1FaQ2h7eF88aWI6fEx8azNFJHxzWXpHS1h6X1JrKWUzJShmc1NNI2R4Xks1Mn56Yk9NZms0Ny5+cjN3KHBpNSZ5VDJ3eGFsWXxkXT5Dez0kRS9EKHt+WTpaZFppZyZKfjFDXSomWTZULn04Tmt5Lnw/cC9C'@;
put 'PCJIIzxQO0VHc0puQV19U1hvflQmTllJMX1qelF4QWc9eiN2OE5aak44cUY5KDVlUSRzITw6K1YmPj9RejBzTTJDPDN3YFIwVEBZbiloZFFYeXVeWHdEZjNCLmRScFhqdXt8cWlQez1vJHwudW9yKE9SZFFaKEk8Vnc2KVl0ay9KUk53M3dDK3Z5XVp9WmNidlRtfC9rR2dhKm9eN2xvWUtROm1Y'@;
put 'MVNORigqWi43NE1FUXEqbyRiX0dkYywxN2ZQY0UsLGVFflAvJFYkZDJEfDxDTC53TXpbN2tuRl1JcitPQ2tINzomXmlKSDAwVUkwVEt1SnQkPVpNLzA0QXh6JiZQPjRHbDp0JEA/Pih+YyR7WHAwPDk0SV9fTE9AbUx9O2R6b14sYUFMPjtMQ2dEPTdmJSJPR1ZUYktdN0hLb0gjUW5KIWs1eHts'@;
put 'TTlwdzddVyFgWGMsbXRiVGcrZWYlQXFQezB6ciFfTkRQPV1rXn1ZdkckeUlRX18oYHxZJiZiV3I5fnheSnd9c2RQLH1xbEQxSFRMJnhbR0xGcjNNcjc4c31ObE4qVSt+aiJvUGx0VjZnbDkkZl9MW295NUUsTHhzcHdKLCszdlVWY0ZIdjRRKnBNVXI7NGBXIlkpSWIySn5MaXY4V21ld0dqISZA'@;
put 'bDRfaTdiWC5kKCQ+dmwlOX13bS9GZ3ZKWmJwQkNMXmRrV21FZl9Nbi5zSzh8JV9WemBSKTdDYyt+L2pHXkVASFhraXFIamhhPEI6SGwleUkxNn1KOkZRS35mS0pIUzFibWtMKSU1NTEpaEVvQWlOX2Z9I3p5fGZoanp9eiYqdnw9KT91Z2xEPipiSX5qN21GJXEuM3o4XXt8JVF3SWMiaih6ZSsw'@;
put 'SSx0UGklV0AmK20zeCtrWW9KU2k2T2FWNjp9d2VuaFglO1EmeyRTejR9WD9KfHdNN2R1TXRzdD0wOSlgO0ZyVzplMzg6LlJRX2xFWUdAc1hqTTdKUEdLaT5YbXN8RWJdSmlwOCt3YHwpaTtyIikrbTE/UzNESzJpNDw0eyhYIj43ajMyUXl2bXpFOD1wb19hNUJNdXJvKEI7JXkjM3g7UWJrZSE9'@;
put 'eUNQc3dZMTdlTitiaThecCgyUjgweCFkWnVbLD9ge00uVGpYe3c1akQwakdjREphWn1hU34+YjVOREBnWVsvV3s+Slc5fVd0UVFBWWh+OGVMTjp4eFVdbGhSbiFRTl9VeTM4R2oqUk9kfG5MTmJ0dHkrT1pvbnhJbzlgazokPXpJUVtgMCpMdDA+VkZObiIpKy4xWX5MTlpdJCpfUW1pOHpUVGdU'@;
put 'YV4kXUI5QWxUT2I7R1BwMkEpdmxxaUdvZFo5Kj09RF8vL1N+UzF2P1dRdl1ZaWxhaG4/KGIubyp2MkJ2U1UmeVVEIWZLIWU6SE1XYmAsamt0YEp+dSxLVUUmWTZxZ257M3ZrbGl3JWxXazhybGx+MWVFbFtESlRaQGZuKEB+MlV1RHdtLlVwX3l6akZ0PlM+LDM3Tmc2SnhUbylrSFdNRF9taCl1'@;
put 'djRMLCFxODd1VlpMS1RUMnt6QTtGTV9KWCZ0TkhbUVNtKXQwYyRzamYzKE81JnFTPWc4MDA7SG8xYjtZMW9FfFVEfSh8Il1CYyJqJTVdVFNlKHNCWz55Skc2azFDOzY3cXNaW0FUeCYzKmJoWWVyKV5ZRH0qPFsvIm5DZW5aUkZyV2YvMGpfOUZ0ZFBkbmd4bVlBMHp4K0kuMVZsXz1deSFGeSo1'@;
put 'WH1iUDxJTD51L2dudEQ0Qk0/Rm5XXWxWekl7UTxXLF5BT2JxP1V9QCVeVmJkdnU0RSUpWFpXVVF7PU0rcjNGUXQpImBFbCJ+e0U1eyozVEs2eWRbNlF+K0ViPHJjQ2xCRWshb2JfeWtYQlFJWH0hUENZVkxSTzZiQWRVW1kqYlVda1BgKkFzW0pOZCFnKn19RkB9XToran1vUlUuTHpGOSRAMkEs'@;
put 'NkAvOkFCPi8kfHBXVXtnUDh4JWZ4PSM6R1VUamJealswc3chOjl0ZkNEZjxPPkx0aDlXNzRLLEI0WkcwSDRaKDhMQCFubyhmfjdCPSFmN3BRN2RmS0EvIjBDRnlaRjwwcEloTjgzMTswajxSOyRiZlJFc2JAZHAzbClvWVd2NUkoSGpNQF9rVV4haG1pR2Q7Y1pBKzEhYXpqdzNrYlhUVkhZMTF7'@;
put 'LyxiPW8sX2QmbVFZJEYuWVNdQnM5NUgyfitGOnZNTy9pTDhoVkVTWCN0S34wdEJQfWZnYGZBMFJRaF8yazlOQXVHI2l7ZlNjWmJDPGMkYXRreEhVVD9sRSxKPCVNeTtHd0hkNi5uZ0koRCsxNGhgeT9gUjVfTiJIbyVZenYzY1tIKGBvVHkjODMuM2lJPUBibClodmF6OF5IeyRQMSp7czI0U3Rv'@;
put 'JmgjOip4aHsjRyJ3SS9OPDEhViM0SklqcFF7NUlhTVFAMzFbUTRdaVgjQSE3MTY4KiRLaEclN2koIWxubGtAay5Da0k+OWN7MmpCKVtgOzpHbEldNk1WLyUjQDpqc1MwZz5HIXBzXkY6MkhTcF8lLm9lTXY7bUxXRmVKd3dnMVl9ZjIma2NHZDJLcVBTeU5TanwuYE9uaEwrU2R6cmBFMzVyP2Nv'@;
put 'WXElYk07Sng9ckh1WCg1YmxEcm0xNk1TTlhtfl0rYzEoTU9ANENWTktVJl0za19fdVIwTzJQXmpXOVVHcH08O2ZHRCxBekhLVno4UjlNOjkxSHF5JUE1UDx1QSxTZCF6NSZ3ai5DOTVTbyVnMCJfUnZuRmZ1OHA/WTd9Q3EvdX1WO1ZyLj5xdTpZN1R+bUEjbSpecTZnTkIsVXksNFczbzYjKyha'@;
put 'NX1QO0gvbFtPWHljJElvaCg5eHwkRW5nIXJGfGI5RHV6bWFZXSJTazNfMmV+ezwxfHIvdDRpIlJkZ01oQXBmVmoyIiRdWDl0fWdqKUc/eEZNeFkqfUFIZ15QWyoiZ0hhTmdFVDImXXpwUFBneEgiQ3NOUFNBUD02UnI1VWFnPCp9cio/dHdxQD09YUh2JjBmLE9XRGZ8W3BQKk9dZyZGSlM/L1o1'@;
put 'SGIhP1pMfCVjZlpsMiVtV14qTm9QOWN0WyUpR3c4KiVGX1MwZnRiU2ZMOHddYENrXy9hXj8vO0owQWwlNWVqIl1iOTdubyNrQl0zZ2M1MmdDIkAydU4yJDZvWEFlJT4rUXJNSjEuLk5IWW5FYm5NOTYyb3Z4Yzh1fEAqdzZsdkxvQkRUYEAqPkNFTkolV1NiP0pFcm5+ImpJKy5Scz05QTx+d2pK'@;
put 'IURuZnBVW2EpI3clQnUpflRrPjh3VFV6VFhlU0RiOlk+fHN7clptbU9AMy55YlZsKjdBbVsxcig5TnVfSTskKnY1Y187VSRKPUxtJipMOVomWD9hMndVYUowMypZaGJKI1FPIU44S3NeOn18azJ0akUodEAlZGo4YTBDJEVXfEp6RHF2TGMkTWokIyYsPnsodjpoJFZKWEMpTkVORTFYU0N2djl4'@;
put 'ODMjJSRVOE8wSyExeS5mWXVIeUU1ay4iLCZDMGg+QlErZF9eRmA6PHY+KD5+RmRdVnxKZnEwNS9HRDZBRWZBfC9Sfjx1NEBVJGdVaV59MSZleDsmfTtXVFdzd3crIU1ZY3FuUmtnJk14aGtkOmwqRCJGWH47O3plRzNiNCY+aXx4dGdxayhBLzR7Iy9FTF4zWykoZj1KfGtFRTdbWnczNDU8bWpl'@;
put 'eUN+NXRDMz43Zk9NZmlxZjhjNUdnb3B2NH5NZCMhZzc5cllyT3RwOFpAXmgoRytOKmdiSU1HNT1rNmEsOlklMkU0P2d3Qj8obnFKUWwrb2Q/bFt7dCt8WD82PFVBTUloL30/P3h5NTVHfXBkV1p+L1tdamR7byNGOnZuPWZILGtkeD9HY19rLHtiM0RsOnwzeXQ6WGRQaFdMKVkzJVJxMStCfD5h'@;
put 'MnY0blAyXVE2JDZJMDhoSm52WC5wPDUuR2FXViFgPTRrRGArNCUrNX00OVZ4fWs3JEQpPGlsbm54O2lLV3I2Ylg4V3E1JjJObiNoRkNdJHRhSz0hUl9yfGNXa1tsT2dMQUR5WkwvRy8mMX1yVVNIbFRiVismaDBWMHZIdT1oOUlKTjZCPnBnOjt6dldVckBfWShIdGRmWVd6XVB0MT0uS1BwIiNC'@;
put 'TX1+ZS5vYWM6IU9DekNaQzN+JmlgPlojNX1hTFU2SmFgUklUIjt5R0ZZST8mWn5xXixNJnomMTgyXWE0TGRBVUZOZzglJVQ0biNTeCVyfDJ8PEY8YXd0bHpULEg0WEhAQVkrWktDYTdTWm81VilVe2U8N3k2cT09ITk7MngvdDkkQ1Z0eTErRl1oUXZNSDQuT1hvMUltN0JlWmNZXyR2UklPTUV3'@;
put 'Tl5Uc3gmeUdrXXdrY34ycnwwUUh3Zi8rQVI0aGMyUnpIMl92YzRNemk0P3duKEtlRXw4RVl3YSldSH09VWZFaz9pNElObTpIdSk6PC5aR3RNYVM8b31OSnZzdVRKRiZlMltNa2tAUUBpNDx5amVVLygzPVQvZTttKHdUc0AvYGREWnRNVmdGKnBjWW9uZSN0MVh2S3M/YE1mUWUhQ1BIbFNKQmE7'@;
put 'NGd5UDd5RFNsJGdxQXJsdXAmKUVpO3p7WixyaF0yM0IsW1dfSyNwRTRJVkNnM2skZGs+WWMxR3UjJkArYkMuLkY0TjcjVGcjM3R+P0RPRDlSWEQxWkhAOiZJfHxlVSoueFIsSnw6NENDZHl7NC9Gc307c2dYNGo/aWQ7P3J2U1hoRVVeZVgzTUhbNmpRKTBdYV9JPXFrbHhxcVg3I1IvdGMybHky'@;
put 'SHhicXtmVVNicCxpPmZMb2JUdmxSNVVlP0MvQXsqdyNUN3RuK150NWpKd0FEXk5wK2U8ZiR5Jj9fcDo1TkF0RD1yT1hKWVUzeyJGOEoudlh1UFd9aSpKKiZSLDh+UE1rdUx5IVIxVThNJntbbSNoRFNoP059O2BAaTpiYGl5LG9DNSZMJk5OLmklczBZNSo3dFNfeHFQNlUpYCtKaD4xW1J1NU9m'@;
put 'VVV3Umw4JVQoN2U7UE8qY1EyVUhdTlBtW3I0fTwzdWEwV2FocTklUHJPeUxrajlTTVlKWEtOMmFaeS99ZTdAfGMpWjwsPE9xens/UlA9PVVzODc9XztTVTZLIm9PZHh7OUNNMUIwajsiQkFUOSNlN1pCalckRW02QUc+MVg9b006THYvWG9JWiFGUXZSIy8uS3FkcGVbO0tfI0VTSWkkallWLnM3'@;
put 'fXkoeUdUWVV0cyheVSY3aiNjbT9EdylMP1Z1Zlo8X2hxNU86YFlPLDMwIzIkNypBXWF6YXF1W00iemAzUDMpXj5wT1p3I1M2NkFHIXshKENNXUomQ0c4RTNycD8pZzNMWTNxYGErO3pOPTdFJCokbVhtfCk9IjlXYD1wd2RPWlI3bnI4Tj1xRjtEcVc8RTVtX0xrNkM7aCl3YFo7ZXY+ZyJ1Q2Ry'@;
put 'PUQ3fj1feWhMPzxyNmV1UHh+Ki47Qk8zeUomLyozbEt4Y0EzZjVnSCk0JSNRNkEra0o5dEJjeXtdbWpIVDhdenYuak5wcnh7ZU9SK1lCNFBNQklMS3RTek0/Z05ncDVXcHtPIzcpT10pNWJuTS9wcilKSyRkJDJ2cntxRWgmPXAuaSpCbGtHM1MpZkpXJlojV3xTbW9RRCJsdUshIX5uWG50PH02'@;
put 'VThJcyRSckUlU1FnOWckR3NXZDpCNjAyVyEmez1JZXxwYVJNQHZYdFpvKlNpKEcrckgvbEl6IWVvfk0wd2ZCPldpYjpHJXhPLn5OdDgjZTQ3NnZlTEJXeVU6KDhjRzwhWWRaK2pdYFc4fHx0Yk9RSl5ifU5bKF8oaHFHRnkjSzZ8R1c3P0BSdnVWOzZfcGgmVEB3PWUiMEQwQWYoe2pPb2JbNW9z'@;
put 'ZUt9fkBkaDw0RyJXOkdLKE9LKU9hfj5OS1NwNHxwOEVbRE5fL3x0LGM7akAsQjV3ZkIzUF93QSEmKGgwNiNyP09edm80Um9rQXZxWmZpK0RyLmFMX2QvS3xKVkszSEpUPkVQaFpBYmdCSkhQKjJddm9TVnMsTSQzO3kxNTJVcmlWPFB2PT5GfiZJfi5afE9PSTx7QEJOQEZ6NTA7WV1NZ3hFXmBa'@;
put 'OlloanRqfGtRWHVLNll6ZTQlbVk6eFgyTzBvMWolQGw6SkwlVi5gL3okVmZubkdvaEQuWj1bIUcwWC5+OmVeMD5tQ2E7dzt8fDBKMDQzKmpCXUx0V2pjYSU4eDYuWGpzMikkSWtDfWJlYTVPZ25CYnFOdkZlbiptI111UWBdbmpFdnE0MGd+SCZAVngxP1NSaG8xfl8qeCZ7dnxzKmI7RHczdG1o'@;
put 'IksyXj5KelNfOklkai49RitdaFBPNmx8eGFmfDFTRjhCNFJ6OzNnPSI0RjFvTWdmfjh8XjNRI11lZ0tkXlByUV9oNi91e056QT1pNlZVaVhQKSYyMTxTOFZOIS9FcSp+W2VWdkNPRHQ8YkdwViNiQDMiYWUyWmx2NChqNzdmZG1bUzgxOTxwTzIzOExIJEdZL0d4e2ViIkR0ayVyQFReZjFMJHF+'@;
put 'T1lrbCVDTlAlYSYhdGh2WVg/PSJneFtRSFpfVCpvejs/TyR8KDh5amhlciQqXlFTLkE1MEk8MX54SGlFS25iSnVzN1dDSlBSUCxhOS42ZVZZJl9fUVROOHAkeWh+anBWa3xKdUdTSilPdVdhNlRIdEVrMi5xQVZjNHs3UTQpV3debklZfFsifmk+NVsjTEpFamNyI3t6RjI1ImE9dkR7UHhBYWNS'@;
put 'YX5uWG4rJkZdfThyeG9HZVkrRiRAa21MMl9FQn5+KEMiOUR7KigqeVloSl1fLkwoUkZifEU4PztOVnQlQjYqSTdMVGNbZEIsMkpPdTNWZnUwUENYZ3hPOTRGdHFWdUBDWGhOZm1IayFzZTolI2JYTERMX3VETFckJmJgWk9EKCN4XW4xIm0zejxJQWB7fkF+QUImdl05WXN4dGpPXUMpKXkiZzdi'@;
put 'QzxSJnFvcmpCYCg4NXdLbHZVUHdoc3Q1MjUmMUYwe0Nhdy8wU1d5dnUyVyYmWXFSVzB5bjdgOE5sY0EmfGdoPDYiLEtKO104NHxXYD49cGBkU2pmSloyODshdTdpUXp5ZElYQGQjW0lHbkZrbiFmJWUhY1hyKmxvdGwoW19lSEdyL3xON15hNjF6SVREej8jbmpNJTQ2bi51MEQhTWV9VlB0Sm52'@;
put 'SDdzOGpoQihhJTlmaiUjdGMiZVFleUJNe0BgXT17ODJpR1tJeyhdLCIzN1ZScVJKcXFXSmBEbU84dGxxd1Y6QDJHYnkmR3tTQ0V1bF10UURgbEpVMywhTyMqXmlKNkJWQnNUfipmYFVuamojQ1ZdIVVEbUVmfGtrM3I9QE94XUtwMEIjNHdKM15BWVZIU01Zd0R5KkNbbFdYTHM9LntAL2pacigh'@;
put 'SCopMFlDOSojfXFWaV9McFFYfD0jNE52OX1jTio/azJIaWpNJmRwSjE7dz44JXsmYyw3PCZdW2hUfkUsRyxVN2wiISQwdVY1dUZKLC4ka11IY2pGVWNjNFVfIV1EIlQpWXdRbltfQEJ4X2VRVzAhPltZS3tDOmdSdTxJa2tFO04/UH0ibipWZV9BdGZ2R3QxUnRaSndBbEQsKlVIJTJWc1Y0Rz1V'@;
put 'UUxaZTI5SiliWll0MjtAbHpZVklEYD1QclNSWFRERltMKDttMzk+LHQ5IUFFeWE7NUNSRlV8MV9DdXxYZEJOWlM7aXVKVmxOMHhVZmhNdSF9NX4jUENOJU51fFRBVyUsM29BNkclcFJydmk8cDQkQSpfbiRZZEc9MT81PFY3R3tSLk5SNjIxWEJ3SilSK1clNnR2O3k2fVRHbHxCWWRFTEhlZ3Za'@;
put 'QStEV2xjU3wiTXhNIllGJXQxZzpRMz08TlROOUQpbVJxLjttRElMeSFsYFtjejYrV2pIcFRxJEtMLHJeZlNePWlpfV4mIWgjZD1QZ31zKmZwSTJERWdWYX4jZyZTWVN6dDRfck9bbjIzISV4cSZIRDtHbj5ReS9TcWQuVmcyUUt1ZUclakB9VUxVVDlaWCt5Vk5Td2VeTjtkTmEyUlkwKFJATVZd'@;
put 'Vn1DZEAoYzk2SjdrPXAhazFzYX4kQHcqNyFOL3tmYmVIeVAiNUZfWCtMfih3QnpoVzROeUBqTHF3ZlJ7Pio8e0tyWEBzOSM5ZWQrXi4rYWo4ImB5cmM1ckxXUmRkUVIkWHVWP1tmQFgpciZUL1d9QzFQNHI8MX0ydzEjMEhMMTwxVSZDUyZaaXwrS1h1NEovS1pBaSprOl9xMUE/MEB2PldvaVNl'@;
put 'JEheKUI9STVlOU8vSGw0Iz5YdktpMWZYRV8hUkRgTk81ZyNwTU1gP1REO2ZMTCFTMCorXmZ+djVaYTtaIjBuYXxmbnVYaj9gKzBjdihxZHJQRX1GclVQQGFYMSxZNzBgdXlGSCx2Ty9daCk9UEYyKjZhUnA0WSEwZnxBTjpXW2FJRUhHW154QU90VjxEeXh5TkksdkJEO0VuKTdjREBaWVpnb3km'@;
put 'W0x9JTx1cnR3SDcuQTpINEcvQlFUNUkrK2opIlZ3RFNxdFU3ZCheaFF5dl5TQUkrKDp0QCIvUUpzLFsjS0MpW086NyN+SjpFRzsvajJ7OHsrIUpAOzlNKklTJTcwZ19QJFVbZVIyNnd4T3k7Yj9uNVoxZUIqKlhqYi9DOSp4eDN1KzgxPG5GVUtTPkBbQ1BMeih5aUdwZUJAL0RPLyE8JCV1Vjg+'@;
put 'ZT0vWj09UHBdaUtscCRkYS54TUZxPkghdHVqTn0oX2BIWTtKIUhQYWksUnRASWJbKmxbZ0lnN0x0WyFJbD51IkEkMjVIb2ohZihSJVM0NSEyeEZ0My5ZelNPdFEpeEc/QkpaMEJrTzlYU0gsRVE7ZCx8TTFsRUEkfSZ1Q3E/fVgscztCQ2IxUjUjKnNEY01QfiRCcENadW5VRypba3F4aHB5WEdi'@;
put 'ZX0qUUtdMDNDTEwjUSZMe1lMYG1PUCk5PyU4M2l+QUYrQCRCUjBIej9RQnlLJVI1Nko8UTZbO3IxWV1Jei5hYUs4NzFzeV0zY3hqK35zNGx4SXN7TTUidmNbT085e0pERiNnJVRRZHxxai9eRXIyNkkrKFBKYEt7JiR8N2dvP0U2JWlwXVNIKlliTWVjeCQubSp0JGZNY2gzYHg/ci9WOilbWEh0'@;
put 'LnFuKUsqS2ZWQy5zYjoiI3QuVFspdyUvOHhrTzt6JGQkUk5XMFIqI2o1KUZ1QkQ8aFhNbXNmTFJka1lvV0U9XmlSdzlJdVcyNDYkbzR8eDJKQ20qdTpTflQ0MkFQIXpVZltlKUB9YVh4NC5JbDV9dy9dUU5XKDpfQ287R1g0P1t8XmI7NWBMW0drdCp1RVJIYUhOJlR5NyZ6fX52Q3RnSXc0eFpS'@;
put 'eUJmXShFUmU6cmZkZV9yK25hOz1LLzdHbnx4cF9eV1ZEYSJOS31JT256Z3pbLippe2EzL0FgcFlaRmEhXmFycC54W2Z+KTplLD07OSxPMyF8KSklaT1EZ2ErU359aHtZQUl7TGtfT0h8ZVNlKSk+dSU9PENsKU44Wlk8Y2tXY3AwY0IoZGhAc05iMFVNdURJVUt6fFY5bTt2VWh0KU5MLmYkPXg8'@;
put 'fV1VdiMqIyVeYnFPX2B1JEgmIUtGQl0xdC5LLnwpL0hWfD59LCRxPk5OSDQmXWdrYVAmYkYqSyF1UG5rTi9mNGopL1koUXhGYTtxcUQvTkghSWVyKz4ienFXRDs5KDJEaih7RHhOfX54Mj0od0whNUJkP2gra0pCKjZLaWVwXU9hR3RUJmFOUHB8QSVkZlIlYHNANEZtXSwjRVZ3SjMpSjFTVGhm'@;
put 'MEg0dTx2YVovVUR8Nns1VVRONWoqRSp+SDZaUz8jfGZBL2I8SCN7X29lJURaUn1XNkJUakslQFJ2Iy92NVc6YHZ3TCMxYWdXQHtjfUQlYlteMn0uNWImI2hJLzJfZzNwZSYjKF00QjBCRmsqJWhfQVdVQVlDbW1vRk9lUVc1QyRMQFoqc0hdSCkvc3tKdilnbl4/PTs4NVNoIXpZPz4sX0I1WWI/'@;
put 'dHFAPVdmRV58UnQiWH5yeHhfV1N2MyVbaHEjSSN+QFNtQldlWmNZU2ZEYnN+RU5YeSF2TEVrNWltTWZdQjtSXz1GLktVPksuWVZ1MUZ1YkpyRH1EREleS192e0hhekZDTygzQXosME9oUTMhfTA/IUoiQTwhUCF9L3lvTnRgNjVHSFAmdFN6QUJ9d0Z8ZnZ0MHN+WTtbYUpQLERJVDJwTXojRVNq'@;
put 'Sll+RHlDcWZEPFhwVGEkcFcqKiVPbjEhbChpdHBhQVEoWkQ3QmIsPjgjNitxKCw+JjFEP35gO0JVTVIvIlRNIURNSTZIPj89bD04TSU/VEt0U3lWOEIuZENdP2NHKkdbbjZKK2xDOnFoKX1IIWhuVng/RT9uNHhgOSFhPlg/NGUzYSJJR21zQ2MrPGY/bGI1PmlJKmhhYC8pbm5iTDo3cD9MJiNj'@;
put 'Lj89cVF3PiZiUyMlIk9xSns3Ol9CRzNzKHhxcG83NjdreV9uRj0meSlDfSJZM3ZpQzdpRTpobzxZYTF6bTdfNStKVFJwVkhdZVpCWDoxOW0hblVHTHhrdkkiV0ExSyR+KyxKRXc3ekdvVi8lVS9kZz1fV19qa0tpZVVITGN0d0xgamViMmIuVGw0PD1Ne3dnR057O2hLOll1ZShNenNpTjxIIX05'@;
put 'YmtxeGdqals3RzcrZmxqbGdWUjZkVSU+VWlMaEZIa2ciVFc/Yn5sVkhkai5tNF1Me3k1LC8iSyRYamtRWyUmUz5+eDVuWSVvPUVbUH1YVHdpKyEmKilYVmAvY1klMVFsSkMoMn0qfWM5OlN8eWN0OEpZMGR1QzFgRHwmKHR7R2BtIU1kal9XZEx+RFhrP35VWDZyN11DcG10U1E9L0VEYWAlXiNP'@;
put 'MFArU1MqXnpeOCg7UG9gM2o/WDhHcWhpLjhCT2oqS1Y5bGBYIlN1SjtqUVcjSkImWGU9I2IxckxyTGFse0tnJWYzay4kb00+SWNkUFNKVXhdby94YWooMj05cFopZHBIay9XR3E/dTU+KmZXdGI3RGQjLzxJXmx3ejZvJl1ZJVJMaXN3ZkddZy4qNTJzLGlZND1eLGR6fW88RXZBPmNkUHkuVE5p'@;
put 'KmY5cE5OZU1NI3QsTSVhT31mVW50dC9mU1FpUUhVPmx9NUclK1svYjtEbzRMTn1bJE1IUUVMenU7UCVNfEV5KTYsWDxBfk9wUHpiPCRpMypYWzRKVGZnbUp4RE9KMSQpOVYmREw2YzVrImNVekllVFMlb1ZQcyR7TSpIZ185PTU3cSE5eUJdfW54WyEjWHJQTUUqTy8mfSV3Z0RiajZIJUpAKE9l'@;
put 'LndUWHdHKVpmSnBkW1VXLkZ3YiloP0p6OXBHfVpDaz1LOzx0fnVwcGphMUpudEJOfncyRmo6Kl98KCg4NChVT0J9XUBuSURmRDZeW3pZZCxHeEA8KXlUIV48QDNrOjVVdzp9UGxWXVdpL1tCUE1yeXYuejxoWnNJZiU8Q309ZSUhYU1ZfCJMOWZlM2ZyKjVxQks4MipfZ0ImfTNZJUZCbGxCYXU4'@;
put 'eDtwbW8/Uzd7XltwQSYzdE1qZXI0OV43Ol11SUM5YzVFMHorc2J8KFhgd1o8NFk+YUN4UyM2cyxRWFAzViVWVGt9RE0mZ244W3A7VCIyeTlhT3IrKXIlRE97e0BxcC8lUWVeJUszXiE4JiRDfWpdMFcjaSh5O0U7ZFEkLiVmQ15XSmo6ODxkbXhiKiFhQ35sajx5NSl7MnJpX0tJME51M3pyJHZw'@;
put 'UjVIVjsscj9DSDZtcyYoLCVffERdP3t8TUNQYmU6aDh4Y2tbfjpKWThCZkNXJC5+OnA4Zyp8KV0vNXJAQz5zfkU1cFN3UTF2KkUmY2FXV21qW3xQRGppYURnYVdyMHBJNG97bypxc3I/TH1iWSFdU29QM2ptIi9VSSsqYGdDa0x2eXMra1trQ1RZME8wRDZXd3smcVBVYmRpImwpK3tRPHlIZF5w'@;
put 'QDRJWT1ZclI5TE1Ac1A9WE1QMEUidlpLMF8kUj0vWkNPTlpVLCsufCU3cTBqc09wYWwkTVAhJHZiTmFHTD01WmEudil5aW1ZeF9ORE1nSyEpTUlmNk47PHBuV1ZMI35lRHFnbHJqIWM9QllDSmRtJGNGKn15b3NeNyl7UEpwXT9waWM6Imd9cExFSER2anVyWCU4SXZKM1F9bFBOXjYlJmlxWH1s'@;
put 'Jj1sQExkIjRtcSwpPzhnclI6ITNqNk0oMFs0LD5IclY1Sk52Zl9AdClYTEFFKXNwdWo7KmJzPmRSTi52WWhWXkt8PWVHJUxCVSI6N25kNmg3b1FCNGFSYyJzSTdmVXpWZl4+W1REVCZrO2FxWCJ0cHw4VG0vKGYkUTlMU3kkO0JHJGopOC9YMC98Lm5gfDh3O2BQOigvZyJDa0t7b1VNXkI1QilF'@;
put 'ekJNWTMhdVBXSndEK1UjOXhMIl5HZzM+IXJad1MkOC5eM1hqeEY0Ry9ndChzKnExd0JIN0NuXy9FdTwlUEQ5KGo1TnQ/ezlxQGY+SyZVWmlBKV5ZWmo/P1tEYFZAaSFJPjF5OzslXVV0X3EyaGIxYXJjK1A1a0NYUyNUVDlHT3NRKlg/QFc/dGs7fVNiOF5VYkQxLmxxYm1BWlVka0l6TWZjc01a'@;
put 'M2wqWCtBNF1+YUdSQDdoZDRIJmNudCgwb1omKltyWT1nbHp9YSUrMy9JLjlbMUxuYUJkYF1jUCRMay8qM3BLKFYoc14kIU9PfUxdLHEkc2V8KEhyaV5SI2NdYSp1Sn1IRmBfN11vSTNBJiRLLFVqLH10c1BqRS59ZXNwLzVZKkspWDtvNFhvKUFvZkRYbUxFX252MENnSTh8IXZBZkpLejx4Y1lr'@;
put 'KGRmZlN9cDFBISJ1WjliPUw5c3ZMKSF2dnZoc1JWQDN0LCJ1Tk4uL2giZ2lqa2Y5cG03NzBkbG5zYWh+VX05Njo9VSwvfU1WUn54cXRBelBuc3QwK3REKmI6LDVAIzNHWyFJRU5NLDJUQUhIb0UkOSJKKWNmVE8uSSRyT3pNX2NbRl92fTpKZUB2WmQoTVdVKTI5Vjp+Xmw/eSF1Xk4iaS5dY2x3'@;
put 'dSk9a1A0WiVCITIzN04+ayImJVY4UjhAZmBUJWF3WG5MITVHSDxOJm4xUFtpX05xRV86K3NgMnM0bWhrd3tAWEh1PjZCP2hiZGRbd0w4TGk9T1VNSTVKVEBxfiNPOkIoW1UoVU42dm1RJEwvWm5uVmNSekNWIyVdYl5LIy5ZYzw2b0kzXnNfKUsjPkx5PDcvaDkhc0R0Oz1kWTQ4akpvZmY7TDk+'@;
put 'JUooJitpI09hRklmYmI5Nm9TTVg0TGBVPGlzTmVNLlg9WiRtQUhvblhrOE17Xjl3cGwzcCVldWVeM3M1SFloYVMocylrej1VSHR+PXc0OX5rZElNNkRCLCgoekxTWGAwZjVpNi91OG9mUlM+Nk1DWU1wTzdeLDR1MnVydyYreUdTPiExKGdkMihbXjAwP2o3ZnwxVntuPGRWU2RBUyxvViNHbUNg'@;
put 'YnUmckMufik1IjdfJjVqcWN4eE8vd0I/WmAkO0cjZnZyNmM4VUZmeH5CVFY8ZF4rTUM3c0ZgLndHY1R7WT0raD1iZTVhUEQybSJFQit5dFNlMHlNLyVxTT5YfWNoc345bVcuWz4lfTI3QkhFIVBjQlV1NWNoblM3ei4oLHc0aCZJfDRFWjA3Mk86Zl1MaFhpWktNJmgvUVQoe2l3YWt0PFt7ay9r'@;
put 'TCVmWTdKaj9jYlp4PzJBI3g5TngxWFtwUEVdMzo8QDo6fT98IWlvc1JyPXVbcmJzUDZ0dE19ZWExKT19TyV6bTpbWls2WG19TllpaTV7ZFcwJStTMWxMeUVIS0A9TG9fJjI6Q2M+bk1vKnp4NXFYVEwuei9vKUhzaFgufCQzd3JMX3ciWXU4djEhb3NScWJaYEpCQC5aOjZaKzE4Lm1SU2Y2TSYr'@;
put 'QmhzeDJ1NX5sLF8yN3dCaCpBJEBWZkpLN31MOjNWX3BPLiJ6fE9PclBSeUF6KmxOSihXbERjQHosWkFiV09jazkxSCtaMyhtSltIQVlnYVowMnQ5RX07JHpxZlV2XUJnQUUsPkomNGptSXc3RlkwPlo0cnN7ZnA6OHUzRCVfRV18eyo+PkBGWXdbUWE0RmIpLDNQfnZbLDhbPFsmWltbQDN6fGZ3'@;
put 'YG5JaSMid2FsPCVjQTFASjpGYXc6TDBNY3xwcXowVzxuXjlPNnlkV2YrO0xNV0p6cSwpIyZ+dTRXbiZtWVlBPnFIVEt8MX00QkdYdmZxdC5OYU1dWFZ4SUJUdWN9JnxjNnhGKUxaOHNaY1Joajd1cjVmInVOd3BScUQsZiRSZ3pCe0hUNiVJRXlVLGVibF1lYSRZUiMwayZLaU5MQjVddCVzcGVx'@;
put 'Lkk8NV00TjQhRj1uQDhETkF+UkAyO3lQPE82VXw6dlorfEV3OltkT2RELz9eXmJNUjEoPiV5PGFJOmYwU05TMUhSLzgiJWVmXiZxYUI1e1paaERTc3U6NnxnYWV2M29leD5iJl8zRygkfnQiTEZtKG1kUThZSnY6KmVKK2lCI3xZMT57eSpQVzZ+ISV9IyIqIVNDWW5gN15EOmVTQzJkUl5ZP1li'@;
put 'aG09K3lSRyN6ekBMPERGPjYjfSFddmsyWWlSbUlWK15pPldGJSFIS1tBS0B9VkN7Q303IzBWfDFKeT9hfEswJmp4W0JNZFN6SiQlSS9YV1Z8PDB+N3ZBKkxZNkcqJDI2R1pjViRxMCk8W1FhOmRsKG4pMyNgaGxdKiklc2lmeCxUO0Z0NywoWSh+UFByLlZAXSkhO2ozfmF2dTpBVm9YKjN5KU5f'@;
put 'P29GWTBON0FkZjwuIyV0eWpsKFBHfCFvYmRDel5QSXFtJT40P0J7d0k6alt0OT03U21CZzNATGE4UXdMI296Mm97Rnw+K3o9bltEX3tMRjF0YEJMOmNxX2UiS3Zja2Vbe2BLfl5TPTxeR3I1PVtJIWd8fi8oXkQsUSFvdXpqX189QUBxRFA1YHl8NVUxNDZrKSheLDwzSDEwS1tqel1dIjM+NnM/'@;
put 'I29OdCRoN3IwP045RU8sQ0ZQdFtIQCkvWH1KPSZEK1JvKEgzekdAMmhnTlIzQ2VIKklkIT9kMyJvYWlxV2pCK1c/KlF0SDYiazt4XSs/YCopWnJBUyopVkJ0c3x+KyRFIjIhPV5vSDRYeXReOyRFVU0sbDZqdEtze29kby4wZ3IsZHhpV2pjUkw+TWdRfV0lSUlMXmg9UzIrNGVVKGhCNGVWNkJF'@;
put 'fD8sSitiezpRLl9GXzxKYmV4fkZjQXU6d053Rj9Ca3laI3N5O0xEVXAkIjAzcSVIXX5PR0kxbFI4JVclXUlXdjdxazFCNjFhTmZVRnFkT1dnTElWbEs7ViYxNSN6O1I4dW5NNkxQLyhuazIrQD07R3VNKkF8K2FGOGlLRXZMME4vTjRyNGtQeUc5a3k/U1N9fGo+WWAhNnozbGcxYiEmTnRnWz1O'@;
put 'VGlAQG8kVDVSPyt3YkhxIl83UCRASEpmZzt0UjtGblZeRD1sMzM3KDpleW1IfmYyXzRVPyVyOz12fE9velJdaUQ2aUh4SiVUfl5JTzBxWUZ0UXhUNiw4PkdqdDlLOnRWKmBoMHxnNF5UNW4vayxUUmllKCFJKXtQZHxpTFYjYERnSnhnNztzZmdVQjZXKlNBIShMdCg2aTh2Tj8rbWFqLDs1bUV0'@;
put 'UDV9T281ZWMlaFpUVnN6cVQ9JjF9fl4udWFuT1pgPnJ8ZUM3KjkxbngiQiV5bFpReygpN2ZIPEVEW2JFSnNtTnYpaVlNfnpTMiExeSNtIjB0P28sZmRKe2NOWC81UTFQZT0rLHFAQFVWT0I0TDtCX1A2VUpzNiVLRTdpQT54SWxoNXF+dU4iWX18TjVUcUExZTN+PjVkTil2NmJYZ1hkaFZiYi5a'@;
put 'X3JdISlYJk40SmBeU3Q+eSg7Tk1ZRFdAX2UsLEdqPi9tXXZ7PytmKE5weDM1KUwwOTtHZ1g8dndeVWBJWTt9cXMwXjwlQDBWXnVkYHxwRG15fVJ0an5rSERmZF9ybXRoSjUvNztFYjJaOTN0YHxhcmAqUSFpeS5EbUp7OjF7Uzd+T19Nfj5BISlHd0Z2TVh6eGlSKk59SjQrWE5KdmhFaio4X142'@;
put 'UHI9R2YsYnxDTEdVIjdXNUN+RWI5S3pSMDhuUEJaZSllNzpIIkNQNz8jWT46SUBoSmE1Q1BNS289PjRNWF9WXTc3MEA3WG0jfF5LYllMMHE0W0d4KDN4NE1gUT0jVHp8NTx0PTlkeSk5Kmh6OVszY3Y9NEtNfmdzZHl2XXN9fj47eDAldz5eZW9aYiosIV5BIWZXNVRFcSJCVGFZRXhPOlpXX3VV'@;
put 'RC9Nci4pRGM7RVNIWnRwNHxieilSTWVvTm9lSnJJaTYuN3RGJkdBZyUrNkVKTCtJIkY8YkpNR015Q2Y1S2FXR05PUXEsTC83YkB1fWV1WkI2JjNPVCFNQHUic3M9L1FRXl1GaFZHWk47VD5va2FUditZZmNQakcpV3sjc1gxR1s5MWUqQT5qbSNjLzAlYWwkY0ErLlMuPkVMZntHPWJ9dHcoVTVT'@;
put 'IUw1VDYia3J0WDd6RzYvfm1maChZKzAmQVpJOXJ6cXB+QkZPNHl2O19aditZbiV5b20wbzhvSXFJSlVNfFE3cUxxWXdMdElDem0hOj10OmdJeW1mPyE5Ol5KWEhxPWoval0zVVluV20pZTJKdmhXWlZmKSFCUGNuamdnQjc7UC8udV8mQGVXN2ZZaSUwQ04/a1VDOkxvd2FFaEdrPUA5Q0I9ajJo'@;
put 'KWM0Q3dQXVFEXTE9fjFbIVRqenQjYl8sKlp7YlN7WGIpcVppTGx8I0cqW2coY2YrO3V4TGYrd05sJm1+ZXEvSG9VZEF3V2B+QXRGSHtXLlBGe0BZPG9JZkB6NFJ2XSZIcHR3TChIMHoxfHZSJktLd2hERTZHRU96Wm4+OUluOSFoOzNoQHZLZUojbDxiPnx1YiRWJWZCL1gxUEg4bVdIRF5XcCZb'@;
put 'TF02KVB0MlgqPD1QaVpmTHQxYklVM2A7cytDNCpKJUBuYGJDeyV5PWdoXT4pZTV5OnU6YkUjVyshckdndEpgKFJealVhMilhMDFtP0ZDRTV6Skw5TVFBVHhdc19eVCUmZThHPm97aENJbj4vY3tZVGkpY2dRKl91Tk9hNDo5dVphY0JpZ3VZdzdPRmVhSlJfTC8zUypCJGsqN1I2ek81bmZjRWYx'@;
put 'eSZRbGJjaFhzZm5jKX12c0tXYFk/MipARmA+eDBHYmhNZzhrOkx4I35KZiw0TkFqeGl4JD9uJUJBRzAsamZZPihEYmxnYjRFJEd3YTl1LkxdTHQraWwzVnYiczVGLG5vd204K1dfdj5mYmJ6M3NOU0hSL2Y7eXJRS31yOHtya3NrPW1wP1hQZTYrO3VubUd4LzJmSDJmOVdIKjM8RjMxent3IX4l'@;
put 'LGs2UmJMS3RHQE5PJUkjfCpjTz98TGhhaWI0bCUpZD84UGoyMm8wVG8pNXB0N0x6Zzhpby5UQ00lZVlNciNyWHZoaFVrJW9CQi43N0FjS3lSVnQzcnFRMEthXXovOjR6JHhHUyl0MUlvNX5YP09PYEJOXX1CfXtSYiFnLzpmOVFAKXo7YkIqQno2bHNQLF5DRS5+RHlEImVFaigsNjl4NTdUSFhl'@;
put 'YE81OzllcGJaaiRHfj1TOV0xPTFsQDxgZis6fFdNUFB4fV1mUV8hbVJyV3kjJTlocDw6SUZFQX01KnNjakJ0ImU2d3Z1NS4sRE16PXZOUVdGUTRDeCtAfmJ9X0RiW3hwXlBrY2w9fDlqd2l6K25TcGo6P2JdW2tfYUp7ZVQ3NDZlfG5tLjF7WXhxeFdYSXhRVUl+Q0QqenovJnxPeEtMVUh1W3d5'@;
put 'L18/TGlhW1tDPEZ5bGBVUXpUY3hCQ3pKR0JYLnRheGlsPXkkZzs+Nk1MU2sxR1txZXVWQHM4cHhGRzEsRF1lSnhzI0AvdnxPcElPXSQiZWBqPDNmTmw+cCtvfU48a3BRTU9zcWFqU2xUNDYvY3w0I1kkJCUoVWAhcSlVVXVrdV1wYiJAfCZbbFRsNV4uIzcoYV9Oc2dRMk4xTVtoOEBKVi9ffSVn'@;
put 'KWpdT217NkZTJnl0a0pWXks9OHdtclRzN3p5Tkh0JE9APDVIRGNmOVQyI2tiZyh1Mlc6VHsiQns+WyNgej1IQXs4Nyl+WDo9KCx3S3dURSVLPDFPWzZtNHJIZi8lLHhCNisodEIvIllLdHtzaihDJXF5XjtqdWIkYHYrdGEqenZoMnA5OD5sc3kzRGJfKUgrPmBkX3RfQVV6ZVUjMm4kN2N+NTQx'@;
put 'S1BbQ3NtWXpoVEAvRXlDe3F5YilTREtWIzN2bTwqLDZJX1tbUV5OJDtQRTIySm9lNmdKdDt9UkEuSFpbeixvciM2Ljd7PGo0bnEqfigielM/REhpfD8qPmVdJEYmL1haVEAme3YwZjE2eU1fTEFMKEhydiN8byRLY1pGUjNsdW5CSkwleExdPlI3R3pbQShFbWpbRUA4KEdPKSNNO3x5c3h0SXIv'@;
put 'ZEImcjZFcjFveEVCK0BsYkhQSCM3Uz9Kb2ROYTZJa1pyUGlTM1tBR1RjKigrJHY9RV9+cWVZK2hVSE0rcC5dblA4TnVCcCFObUc7UVdwfixaSnVnOUZUWmxdXmM5OV9mZilxK1NvS3ZUaEVXSklPSz1seGo7am4pNztDcyNLSVQvMGIrYSUvNWRHbTo7fnooJkQraSZ0UW5AYnopdWdYWiwyJSR4'@;
put 'cldMRS5sOmB3dTRrVnFrfChrW1IpMjl6L3g4fUdpSzExKDxhe1BvejQwQXxqbjRAYmYxbExEeCxQPlZYODI4SCF3MTpfIm5VdTxue2oqbHZ6WlppMGw6YGRrejdoVGJabXM9PUI+PzhnZyw+LEw/dH1Bel9kUDAre1ZaVX1wQjVdYmlYYHJDKiZSUXosT0sqPUI1M3kpNmRPSzJ7KDk5K0giQng7'@;
put 'Jkl0Iz1UNm9fSys/KDRsPGdnR2szJjUsKjsibytMflRbKjdBV0o5R3JWemoxWzBSenx7LnlNP2gyIVlfQzBoPzNXSiNzST1LMj9XMy5xNiJiNXVlQTtrcU1eSXhWdz5BIko1MGF1TjhsSHRCJHAxKWJYV2IrQDJFK0tGYip5dFVgclNyR09WUzVUcnpnfDpBMmFnRjV1biRCdDwyQl1MIm9FYCRZ'@;
put 'RlE6Q1JaOyt4cU80ZyNtYjczSG90PmB6ajM6KX5bPChVei48OyMoM1hiUUxjSilGTzdfKShONW9EWVlOL3UrbXZMcDcxOCg8WmkrI21EYSVfWlRfQyMoKGM5Zk0mY2BZclFqZTBrLyUrUnZXV0s1O30qT1E7Q2UxS2IpQGpyTyF1bVV8RTg1bC9JMFgpUlFvUlF4K1Z5OCY0ZHZuTXI2dkdnN2A9'@;
put 'NFdJQzZUSlJIaHkvPX1VTSJOdlY5ekZOK1FsLlN+eX0zUlZaRjtMOkdydjpZaCshUUJRJGFDfnYyIzlseDtGNkdxRmxyallYPyRGSWBMPGBgeXFESW9eKEtSbSlUPSModEwkIyt+a3siSnJmczJ2PyZDZStwYm85RE0lV2Y5eGRAfi53TURVV09QezQ2X30yT24+OClPbXdKUnJHUGo4K29Ddk4s'@;
put 'c0VZTThSI3FXUnRTfGE0Pi5KdiFAYXl2SW00UCpSVzAycnFnPXNCaUM9QDthWik6IUZmTGkyVyQkekRsQz5CfHJgRTYzdkJ5fmR6Y2w3c2o4WWshO1YiQ0t1LkkufnQ/YURpPElaS1g2SyNBeS4hZEZsVTlnZUBVbGxjU2N+V0Vgby4rOy9AKHVbVEwoRigqRCVUMDs4YCtleEAhWj5xL3EzaEZw'@;
put 'RHFTaT1VZ3NmKih7YWZuVlRlbmslVUtlenswM3tGN3dAIyFQcjs/fFN6KT84fD1JTVlnelA8bTM2PzJeY0I2PVAkKU5PdXI/SERLMlg8YFdMRGZQTXsyO2IhWzpYejdfPkZaWltLRGY4QVQkZzBJSipVez1zVUNsNzVObXxUdjgyZHtISCVzQVpBV29ETEJWZUJddE12PT1kODs2VjRPOzo+bjo+'@;
put 'MTNKXW1eNztWailoOkc1RTVmUWFdIWNJQF9HLi8sME57cnBCUXU5YW5mOGBuXklJQ2Y3NU4lU1VtdjojbXZ7bDIoOXwvTlU1Szc+P0RxQGgmQHt7LH5YSG5JLHlmRD1HMGpLPjRLe1VgYjZ+NHtDbU91YS5UUDwiSDYjV2ptRkFNYTQpaCp7bUlbR0ljKmAhKElXQl1fWzJzZzhUTCFUcnlARXlE'@;
put 'RTV0O2NkK08oS2ZyW0ZIUns2Y3dEVEQ3XmNgIyJAd2FII0w7dmFQKmxTZj1tdW0palEuXTYmKllWJXA7IV5WeHtGcC5eLCNyOiFNd21QU357SSpnbTFNRksyU209am5MTU5yRCYrTzA7REVqPmtsfll0MmZXMyVxd1Z8Xyx8MzclaSFdJVFVSH5wYmpoaWN4eFgmW2g4PCl0e29GUEx+c11tRyUm'@;
put 'PVs4PH47Q3ZNN0xFPnUxPmF4S1VMJFVHP1pDd0ZLbUtlKlFxako1Ym94RU5NfFN4VVUvREtJfmkqRVZRcWhPL0s0KnByN3hLfnZ8I0xoNVB1eS4xWiNkTCV3QyZoV3oyb0F8M1QpPUp6VihmZVAuQ2djWDdnTS8uen48cTlkO14/cTliR09lKUMvXntjbDs3MjpWdiFAUiUjNX14eHUkRTpUdV07'@;
put 'NjdNKDY9cnBqOW1xNnc1OUZJLkF9KlohfDpASSohRi5bRkxfKWU9KjtdXXVDdDU+JUg9aH1VI3JaTFJDX203Kl8kKm5JUGVPeWR5KShgNUs9b01Ae1QmaDQyYyY6QFR9OU4ye2kvSTpAdSY6OF15ZlZMOztGNkNaQig7VipWSDwhIy5AUVBrXkRKaV1WSUJqQU5rMzM+bGk1anBiXyYiej1hZm5z'@;
put 'WFRzRDhDL1IueSUrOXcrO3NLWzFgMV91QkcuMSEpVSMyPmMxZntgZXBCPm1TNDc+QFZWIXUsNSRCX2krKCY1eldCWSZXM2Z3emVAVE5VbWt6RUksbT1gUzArI3JFY1cuPXQ1aUI2VmEzWUY3KVcjPFk0WWBoXntZTSZiOilxInsrXm1QY2tfM2VDfF52RVQhUW8/dCw6fSU6LHBuTXkyL0Y0IVo2'@;
put 'aT5xVks+V1JDd0s1ZUh8KTdlPUZsNW9NN3xMeD1FMkYoTiE0eDZIfVlveCVeOi8qTWx3IzRbZDZ+S2R2MG8sYn4kXVFvJWZfK3B5IUU6YHpkWGQsMDR2RjAxeGNnVjBjaHhfLERLcE9hNyRxQHk0Z3BodU13VyR+Z0NTP3o1VX5ZWU13KmFGSjVRMHBDR0d5Y3JeRixOUTouNkpqfnBmI0B0Zn4q'@;
put 'RV0/PURzRnkxe1hrcW4rYUwoYVtEcll4S2p6V3ZRKWx5WU9yRFo0JFU+Q04hSnRDdXVgVj98V0B3RHwwOUp0d1ZkcXFvfkpHPEN1SlFwb1B8THxXaTFfZ3U7TWQpZFNFbkJyTU0rYEBCfmM3T3pOamtuQTo5aF1sYXxHIT94d0chUmh9VG1gKTVsTV9SWEJuQUNqfHhSaHJ8R2grV00oUCRyQn5W'@;
put 'PUxzPXlfPl16KGtkM0w5QmUpWSNdLE9HbTpaR31jS3h5ZkpfWlFuSHtiWzMiKyJ6fU4pL1JwbEomdXpdI1FWfWZQdUQrJDJld18lbSxxfkU8fVQyVVVrdmVaWkdeQTRfRnxFZWtBaWgxVEw0YDo7WUVCKUF0Z0ZoTitefV9US3lEWjM2JDFibl5ZLEk1dXN3MSteckBOPj5HPTlnR0w+d08/LFZB'@;
put 'U0ZKb09vVTgwQ0g1UiRmLkpVO0R+K3A0W3lyW3YjNT97MVkwU0ZsKzhGKjJVNWpWeTAvVlFXXz1aeVFQaU90a2clSWpnb145dkN1QSNsb3w4Q1BfRENqfm0zayptZFA9bTF8O0pBNE5ncDdgRTElUFJ2cTRlZmR3OXV5MktKSVszbjpgNHtxXztFO0wlNU1fSWE9eiJjdVZgZVBUa1NpYF8le2V+'@;
put 'NHIke2RzWT56cTx8PVJEcUh4MjI7b0h4XW45d0o1SDRGeEQpVDJbUnVTKlk8aSNka2p8Sy5QWGEkaWZ1STNRUH02UGZdMCVTWFopfk5sZW8mYHRTLmYzWj5VMzgiTzJ4I0AwN2RYLDBmNE9KfTY/ZkgxJiMoOSlvQThqR2tVMWYqIytHd01KMmJ4amUuR2wleSRUVG0lVGQ5RjRWaz5LfTRdbjhu'@;
put 'IXJMbVtbIShafTAzSzgsYjB+aVNOYWkjanNtRU4rcC9KR2J7Szw1KjsuI1ZxMDlHcyM2WTZPUEMyRm5YcERud1FwQ2hfSS9NcjxgVm1iZ3EhVUU9JWR6IXwueXNnW1lJPiMrOT9KMENTMXQ/bEolV19KZCFAb3B5Z1UjSlI9a2UwJHFoSERKYUoyZ3gzdlBEUU4/NjkwPH1gbVJ1Qk01KTwiWH4x'@;
put 'azk+Z2U/fDVfMUM4SStsOF07RlZVZWNeS3FOYj1dcTJpTSs4R1d1bkA+Z2N+SWAxb11Tb1k9JWojXz5aPFtvLCVqVzNodHU7JDVuJEdNeSRGOERHUTtVVVlxKG85d3lpYXN6b2d5VC9MMSVqeFhuVVIxOmVUYHhsaztjUkN0WD1fVV0hOzxPN2t9ZixQWVF+XSV0RFV6MFMqPSY7a11VejxqI28r'@;
put 'M2BdPjRiX3UuKyNufCFnTUV9PU5bVE4yMH1gcWFoNTRsZU9yeSRlLHBOJilnXk1NcTVRfHt6Kjo4ZHdvfTkzZGdHRiJkcWhnMk9JVl59Xm84Sns1IWs/NGdvVFUkPiw2W3xyQSZXP089dTB7SFFrUFIpaVMrQ0xHWmRlKS4/bSQ9YDw7bCIkKD9xJko0XiptYFYrfW9WXnRaQTNyPk1IRHptfWkh'@;
put 'S2xpJkBOOiQ3VExuO2NaW1RzbkAlJXR3ZzUvaUtOT2w4KXNDZyw7PGs6OWgqc1k1PVtoPDNjLypnYHJdZ3ZnNyNTI2R9PyFTTG15IWlzY3YjU2NHX1YkdXdlLFowN31fVzJJMzphOWNCcEBGd3JfRy8waXYpcnhKbTc/VmwsPjdyeTdKVGlYaypjIl8iJEghfXYrJmViZng3SmIient7a186azpg'@;
put 'W0h6OnV6MmMjblB4IVRDXj9RJTo1YFtSVSw1c2o4TSMwazR6e292QTlpWCV1OjhJPkM6Xy9LeDI2PltVXihTLiE2TlReSFc0REUoLzwqJih4Q11CR3NxI2tuSGR9fXJ0TmdgT05weENycTk8Tix4QlQmMEsjWFhHbl5TaE9gP3NWbWElNVY2ZHl8I0s4RGhRTE1xQ3RfJlF2WT8wIXBaPGVrTmR2'@;
put 'am1SKjt4UkNKXWsoRlk4IWkhOEo5OEs6LzE+clRIaEsick81OGVZWVhwSCNEIlk4SHovS2h0M3ZWJXteLF4zSHVNPWUoYkg/cj1GV34pY3o8OjhHUENJJUUxVXJCOEp4dFFVYkpoLjozR1oxQT06JSs/XmdlYGhWaS5FQi9vLzx9Y2BTKTtLWW98MEB1dkJsZzRmd1QjX2NkZUp4QTFfPjQjeWwr'@;
put 'RFI2S1pBZjA+cWtreHxnNElkcmRTbW9leno4OVVbalZlWlImZmtqJE0+WltaMCNeWChQJXwub0p4RU1KWW9PJi9XNTJjWlh9T0VlXnVVKEJIOjY/RjQ3LnpMbE5iKjojM091Qm54fWYqZiZpYCYpNGRgV3o4XVtPVn5IP19QVTo2WDZWWkAsdyQ7UUZsRjc0Ll82NCFSNj4lZy9nYG5YZUlqUzFj'@;
put 'bWZERUMkWj90TDVVUj00eGI/NU8obE1YblB2UH5fLDo5MVZqIzpHMzdEIzpHM2BgPTdlKjtvUHhzYXA0IVU3dXh3NUxjOUdCfldgVDdYTk9BTXZqRV97NWM0dnNmbD8jWGQ2dTI0ZUh2dTI0MGM1T1lhaTpiPzN3QmJIZWYvaiRdPjRmP01ZMDZQRSxMJk5BOUZMRUZdOVdlVF0+N20rV3koI24u'@;
put 'TV4ufkhXeHgjKUA7NE9udGtXcCZVJDh6am9CaDtjY113Wl9EaDkvJlF8N3FiYURZUDRxcyxSRm9SazwzNlh7NTZUU2ZLNWlxeFYpM3s/MGFmKW44c15sWnQueUwrQyhjMUc7Vl9XXzN0cyQuWjJLKDlCMXpPZ2Y8JmlMU1NeJXVYam9JUXdpK1d7cl0sd0dHQHlgPDQkc3xzdWx2LHwmcGZmVkdq'@;
put 'UVRsJjswcG9HJnNtcnc3X1lUSjwxcS54Zm5VVV4uYjdYU3gvelBxLGRYUSVdK2VWTVZAQ10lMi8wWCJyaE1Gaz82RWp9YWsycGVHISpwPzgqYCs7LjFzVjBeNVghNylQTGltN286ayFVaHk0TmJMcissdCkqUEEjanN8MExhL041VHJfaWhnPi58MEMxbyE8Y0ZQWzo+bG0yJGMzLCZkM2g+OkVQ'@;
put 'PXYqVi5zNDsoMV0oP2orbWtNTkRDeER8XTNbeyM0XVApRCYiUD5XKV9XOng4NWt8V3YlQHlifiRqJDZ3SS5fcHdOTDIyImdpKmdQQCJzbjRaSmhobndlbG1ZQmJ9ays6ajFBajBhN1lZTXc1NFRJdUV3YTJpPGFjSGJvb2ZEYXhaMD1kIVZ3VWlTQD1gbz1GMzhFcT8wS31TLHZbZXRdRHlQU0lZ'@;
put 'Y2t3KVc7THJHNnBnQHF5YVlLNkN1InpNbVk1KFpTLzBWdHA/YXR6Qll5dkRpSWRQbVk0LD5EKGh1bH07e2NkfmUrOz5OdzhoIighdEhmXkpUJiJZaF5kL1ImdV96QjFWWjtLVjRSfSwsNzFvaFQ2aWB8YVNPeSFybUJVN2F3a2UwVDh2Vl9tPGEkST9CaDcranMpWlkwanozclNgLCFXMF01U20x'@;
put 'XWMhOEBgWz4sLCxsbzxbJlYvN3lXITJLTEFgQl89OklQOGxvNDVpPkNnYHVsMkRGNHBdJDR3LFVwZ2NPSSV7WTQmaGg3ckRzPnQ2L3xVTWlDWipmaVNzaFBdMFRITn0jXThiMVNPa15gaFlKJWsyfDV7TnIjbkRYbl44PXVXLkRmbixdQV0lSlldYltUWjhtTTRnajJIMyJpfERIMzxSfWl1PGgz'@;
put 'OSkmNldLPkBDP1QrZC45I1NoJU8rTigpT0NIYF9CMXhvS3YjNTYqa3hnVUA8dENgOyRuNDZ2ZjVOQE53dn1aUEI/VEUwamssWjlnVHNDaSk9fTNtI0omM01UJD9TWm84WHQpMj54e0x2aDR5LGhMfkR0Kzw4VzNYUEAwRHskdWFRR1VnJjpUTWAxclVdK1gmPCx+TzZzUSlTaW1ZPVJtZUo5eHxA'@;
put 'KGssVVFZYkxAYTNzQFZkU2FdQEtpfFp+KCosOTxSKjBiZj90TChnIjZtZ3pxUik2N1FpMWsxW0ZoL0h3QShEVkMqRF9JNmkjaloqNiZhOD9OIXg5X3NIRUxTNSk8M3dHcTh3d3k9X3x8Tlo/dFhNVXZRc11DV294JUk0aH10eHluS2xQd2ZtZ3QvbnpnOVtyfShYJT9VVWh2dWw7Xi5ITT5AdV18'@;
put 'KmhwfTlEcTIoJiM9b310REsmeHEjSS5XZkAuJn45Znw2fm5iNUNvWjVDc1o1Q3Z3WEZoSDteWU9VZUt8TUk0XTU5ZV0sQysmO3QvWEM6L0YwPio2Y0VUTUtLIURDRFVOaS98XnBQNWVMXzBwcTgvTz1SN3ZkV2UzOSlUblYkaHg5Y1R4L0dyc0VfeT8lNDRNN3JsPURYTHx6dkwlZVlGaVA1R3ws'@;
put 'VStlNDlYQGteSiE0MEFCdCw9djJwei9ZLzh4TVhdQ0ouLHpeSWomQWVmJDxqYDl2STRkdWA9QDxhTVpldlordjlBdWJNd2xNdkNpQWs8aSVaKTxAVm9feXRYTjwoMV1eODA0aikpTFE8MCtPfGh9NH00cklPSEI1RDxJfi8kImAiajV6TTI0cDdhWTBTPGtsM0M8Q1pnbWQxW2FIa3JKTnJqbGN9'@;
put 'X0BlLmkwMSMzUl44ZVJKNjYhSjZuXnZPNnAha1peZmoxe3ZkSjZ0ZjJTMz9IY1c1LzdTNSNHZ2RQOCJ3KERORWI6bFIwe1creXtJO14mfEhKL29OSXVpN3ElWWVRUko5PT1GNVI4QyhiejQ8JStYJD9yVF8sJjhoX2Fram8zKiwrUm1iW0BaTnA3JHFyYTVjYG1tMSlqMiUkYTpeZlBAISRTRX0l'@;
put 'OTVqZiM5cGc0UFRFYDtLbipsdzo1W2JCWllpLiZhdWslKVdQcHV5YU0iJW4wZHBhVGJMemV6P3N5K3J6KnhSUWtUPyNAOUJtTkAoXUZdQzRMe0M/PStzRUwmLkVMKlBqen1EQDU7KWh6dkZwTlhiRFZlRzNdJDZzd3ZGcGQ2dnxLeiQpT0lXSjFqOzMvR29KOHs2TmJMPS5iMUlsU30ofmtUZlRr'@;
put 'IjdTdVVScHF+e2EuTCZwRHplIlg8Ji8pbHR9L0dvfFN+YyY9aWxhVTJbY2ZKVT4qNlI5WCNuU0RoRm1PRkgvJVVuOSxOVk9sO2JHKiNXRmM1PXh7Q2VybzBzRkwySUpnJF5IbV5idHgpZ3p6MF1eLiV8N2JxZXM3U2RET3MkfCo7Wj9lezAwakVOSHE/amxRTlclKVpoLjMhZW5pe3d8IVFHMC43'@;
put 'dFYlVGAxX0FQSEdvYCltWX1Lal91X1loT31CZHxwcTUrYHJDLyVlQ1BiIzBqTCRGLmp7RkphYTw5WEZpSVsrWTJyO0AhWWcmOCpiInV3IjQ+RitvVXFgPT59TksmKTlsIlJaPVpFNTdNSCU2TClCVEglOXspTXdbYlNxNiMxTDA1N2pGMFZxRWpnLDxCXyh4SzJbLGtZfn5yWkc4fjJCfVlFUU1u'@;
put 'JXlgW099cV5Mfllmcl5RNjR9U0RgeEI9MyQsX09xdlQ1WzFdKWd8eVpQTzN2VSQ/bn5MaDVGM3ZQP1Q3PCZkSk13P1cwXXxye2JRUEtLN3VgTSsxfltyLCsiZXNCfTpPYDE6V2VBPH0xSlp4JWBFVl9LeXxXK3x8USYyM1s+Tmw0UlhYPVIodUhEXSg7XVZiPkhzWFJHNmdvQWFwTXQ4PnlybTFM'@;
put 'YUptLCYpfVszcntbK2V3O1ZwbzRfOiw9PCJDX3tjbVU+NWcsY0RITkJnKWh3fVFEPDIqLE5IMV9EP3UzfHcpYkJlVnBDY1B+R2xDZj8xXjEqPC5nNHVsUj1jcDlpQXwwQEx4dEUpKk1JN3xYZ0RkKmZiYGhMNWVNYX53UFU2PUFhXTk2V0ovYnN3SzBiRC9bTGAxZnVAcStWeHF5PytwSVclJnEq'@;
put 'ZWNNISVbZCQ4XjNbQz01cTIjTVhOXyVodiYwXV8qZVMhM2s4PVE4WyhAayNGOEQvUD46KS5wKjV5fTg/S2ckOFBvJCpOdFo5Tyx4eXdqR2BOUW8rMVpdV3NZQV5vUGwjMHoxNTxnYTxmJH13QHVmOkVIblt5RDQkel4wTUw+eXo+SFksSGhdQXdDaGIzZnR1NnRfIU9bX1k/biVNdXteX11yMDB0'@;
put 'RXYyW1UzL1lGW3h5SF0zTGVJWUh2VV1oPkgjVyx8Kk1tNiRLVmFQQSxtPXtpdH14MWpRIkdrKWZvJF5NRiM7T1ZTLzspa3R3KCxLdno8OGs8JVAqeTRMJTtaaXdkVTpsbkFQciYsWl4iRT50JUB0KEM0a3hzPmEwVFJmYUl9YWl7OmdVbEdMcHVfbkpPOk8+azl9Yi9fNiFqajc3ZGF6bX0+U0A8'@;
put 'eyVqdT8lNT0hJH1tbSRJbDJIcGdtUVgjY0tnSXI6amN4Jllycl4+VUxxL3xQX1J+OUhyOk9vdzk5Lis4bzpYRj0yWHowOVtPOX55PH50YmhTWktPMnYpUCk6SFhCY2JWJSlafjc2OzlpbUdzWmdeV0cpLjgzQGdadjF3cE9IKnYjTyN1ZTBkKnwpKDxMJWYqP25jam4rN0NePU50ZFhWMChPdl0k'@;
put 'UCRlXkAoTzdhSjxzSj4uT3N+MTwiO2x3dTVKPHpBI1ZhMkBpfSRoNnM+NjBoSDVLWHhqdDB+dGZ+YmFadGFzNDpFTUVCP0IsZjJ+cylCJXppdkw+bTA/bThLLGZDLipuYWAmLjErO01aVnUoZipfZ3UubDcoci9VRDkmWGVFNk4jaGVVM1d7S1ROaDBnTnxIX1FFRXxuX1NaTyZGbzh+Mk1pa0dU'@;
put 'ZyhtQjJrQ0dpTXNOO19YaGdbejw4UEA/YyQrKiVsJCNEZVh6a3hVPVBsYFksVjo/TFlJfGdUMXxsQzlZPCFiPUlTRjRtQ0l1Z2khelYuZylzQH5nZGhPa3FwWk9rKjZKaTxBZip6OXVCbzBaQ1FBQ29aMStDdXkqb05CSSs/b3tYVko1MzUrKmNSajhdLlRlKWc7ZUB5QVJbXSxLeD48ZWRiT0Nu'@;
put 'eyU7RShSMnosfm1qMyN1fmd6IWoqKEskeCN4Jjx+fFBiYCVIN0EyYWV9bmEwJm0sNlJzJmVpLnhwe0c3R2EqYlJTJUFSMSsuX1N+LFN3MVcqe1Jwbz4zMnxNeE89eU8sKURYP2FRY2NuQncsNm1IVj9LVEdUYEQwLk9FSk42V3dSQyExMXkxb3BseWspZD82Y2wjMD89SGIqZXskUktqIlJwb1JU'@;
put 'PkgzSTNZLyZsdzFgL2orWjZ7UmhnPllyOCQyMSY4P1ZFbio4eHhGdXRvemVKfDNOKGpYNmtBcGNlKUohWT14fDJ+JXhaTWhETyM2OEZUJHIhTXE8NFF8P3Y0cndVNUJyN2M3UUx4cmtgT1pvSFJZZHQ9b01IQ0gmeS8yYG8+IiZ8eUVmNkUobC9lInA9T0s6JEQzPSEkVy5+QFhYSCQ+ZCRAYX1w'@;
put 'WnM9TXN2a2ZMP0ZSMHNSLjtkTCRUO0hCWGZWRFhrVSFvSHc8eGNvKU5fM3ZCcFtHPk9tR15HKCM2N1trYSpDMGpnSzhCYnd3Mk0jST4haEtSc045UX1hWCQkL08xUj55cz5UTWEsMiwvb256ZzJrXU1bdFFxPVdaVX1tYWMwYkE9YT1vIyM9PFcuK2dZeyN7RF5teSMudmskUSRnQDUsUGtYMGwr'@;
put 'LE5sVDQ1aittfVBrZEMhKmxDUThXJXIsZil2WGsyVkklMjU8Wk03dWw4P2d6T08qQy8wYGkzeFZUPDw3cHdOZXp7JnI3JlFWZiQ2TSUoeVFiMjZwRk1BXlRNREA6Z2F3NXByXzpVJjhGNkRUMTJAPUA2YmlDeyEyVE8yKllOPXwzbVp7Ry9XKyxbIWFSflR5WDpncj07YEh+ak47T2hdciJ9Tm5S'@;
put 'XXdpYywmWWppVDZkZn5OemJiTGpmaGUyOUhASV57RyNAa1ZlJTBvXWdWXStKZy8wT3w8TEMqQG51QnV+VnMySUs5XjlWYi4oMnlAJFdlZk5EIzVdQGlvb1E1PVRQSiZXKWYpfGYmZSNYe2c6bTRNTUk6bXkrQUdPI1spWm1uRU8mV1QxUz0reSFNVEZxSiRhSjZEYEpCZnljd3BiRyI5ZTlePH5Q'@;
put 'bntYKmEoVj80MU8zYjFpIkBdbiFqPUQvImhQIUJpfGBnezJkVkRRb2YkWm18WUpZXiZlR31hYy9ZZ1UwKy9rUCMqalBMaHtsRVdFdTh7Wkw1e0AyODFSaU0zfS84dTJ8Pk8uP2pWV3tnLHA3WEZTa1kxd2U5e2BoSVJfWjY9RV59cjF6WEk9WG5bV1s6IXwrL2ovIUpqNWQzOEFlc3h7YmJyW0BY'@;
put 'UkRlIkd9YS5UQ1h+NUZFbHZkdkJ6c0lMLnlaVUh+LClJY3dIYGssKGpzNjc3I2peP0NJWHBJIyFwNjJfPl1CckBgTjQ/YC5aZmwkOEteeHxiNHVBI0M1Yl5ZZ0NlUSNNb31pTnx1cE5Nb2VhPGBEa0JlaCNqOmcweFpNbXcidV9+cEltOXMsXjM9WjYlLl9BUkhEMWtCUHQpS3gja0h3Nzt4cjxU'@;
put 'SHh2UCwwN30vbHlSQiFCWzJWVkQiakUqfWgqOmBifihVUnwkK2FxQD5id0BIYUp3cEFYL0hgQ0MpTEY0dUcoOTN2bWJiO3BROHVjcCpEeXwodiokXWc/bCslTn0ydyF8Ymo/PTI4TGolW2Y8SVNwZ3w9dUg5OGZ5eityamwoNko1OTo4fHRoclhOa3xzb0MxaGRCVV0semlSJmAwcl8qZkAoND83'@;
put 'cyYlfnBFXzdqKT9NVGFoWXJ+ITZ0Vl5daHQ9MWZke2dlKCU0XUM4Q2U/IXE8RDl1OTpEIzBTQiV3eHxuUWc+TkZ2XVlVUTo1OUltLiZsNSxMSWlZNnAlWDZFPlIhST9deGopZGB0W3ZsKyxKQCNjdGFQJlIpNW45d0BBQS83S1o/ZUpnPFpGaSJ4dGFpPko5TyJZJH0/VmgkOzRxNE5WMzElbVt0'@;
put 'QFYyNTghdTpyKlFwO18qTl93fEBLRjlgcTMiWC5jW0tnNCt8Tk91blp5QFVsTHp4eGV9UD8kMF1JJEB2W2lfMSpyWUAodjFbbTlEZ0x4bmZDYGo7NiRJXVhJJjJrYVN2VVh3eC42aUoxKmdTTHpkcF0vayRYTWZKQChwMVlJMEM0NEx0bkRCYG9EWWJRKnAvLkwySU43dl9oVkFAWCl1LlFGNi5K'@;
put 'eW5KITdKWT93QUtpcGVHOik/eXtlKzlUe00oK0t9cnRjNkAmRn00THhqUVVUPzcqMCEwY0s+bmVILkU1T2JSXVg+cSQ0flZFbCJoZC5DTTo6ZGQ+fExVY2Z+KiopelIhKGldPyNBYmliWTg4SjckRjh0SHleeFJ8b2QxT2p9eU1leHkhIypUUTIke1k/alB+bSw2d0doXSt5UXZkJXRrYTFPI10s'@;
put 'cm9Ab0ZsJGoqOCZzJnA9ITRwRlZCQFZNWTkjc0syRT8ocUxyb3FtcFQ7dzUwQ1RbUmgjMCk/YjMzIU54TWpeWyRpPSlwOjpVVExRWiRkdmlbP0VzVF9uIlBib3BIYUY0X19adjEoZldmRihdcio8Zk4mVU19cnVxZVFqN0gpLHlyWGBnXyxNYEgpc2BaVnY9VFRwVU44MT9iM3pLIXZGQGs4TUtZ'@;
put 'Z2ZlXV05JVEzTVRzNEhWVVF0OChCOipsVWlDcEZnZyIhW0ZBY3pfVnNAKmpNPSRqbEdfNyVbQHtrYEYpUXhiYCUrLChDck1VUWxeOTwwd0ElYlFJaX0qWEJqezZRTyt3PjAxeGUrZm1fZHJwLENealgraUxrdCkyUzJnVm0lal5FJWhAXWVZcWpvUkZQdzd6ejB6IjZnb3V8Iyl+LyM/bGE+RmY0'@;
put 'JHE5VlRHeFhHRDh0I19OLzVGMUxdWV5PeUpfeHJkLjhPSndsQFZnSE46SHg/ZDVRNHpBYV49bXBYTSQ+b3BTTjRbbzlASnNzNU1iKEBLTDojeC5qblEwJkwzOD5FczFJTCsmY3FBKkl0b1RGQjtMMykycVF2U0gjYDwsentjSjhoLGF3dGR8KEs+dHJmVmw8Mm0hNk9PcmpAT31FMGMoOWQweTcw'@;
put 'Z0QlSz4wIlpyXkBKazI4SHorRTlLWyojcz5FVTEySlc9P2dVR3IyTCtePEZlaTdhM1JCWTA6Xl13NiRRXmY5Knk8YmtoTWlIKC4zSDJ9IVc8QkduTVVkI0JRc0lUWjRoLzswMkI+Kl4wNEA5d24/Ry9lOyRfPiF1YT90Zk43THcrbkJaMVBbXSZ4ckAhaSJbNkh5bzhhbiJfWlNWK1FUe1Bbe10l'@;
put 'ZismPC9zO153ZTI/SHc6XmRIe1gueHNEdnslKE5HZGk5X1ExcTZQJjNlcHVSUUpDQEZyZ0Y3RyEmIW4jPyRlU3FLbVVAbWdbQUdgMURSWlFvYDReL0A+Xl58eCVbL3xgNCM2NUteKVEjZzFKdj56Pn42aU5tLmxLMD5rRlcrYF1yRjIsMm5EZ0R0a2F7VTgjMUpsY3FLJUJMa2JITDFINnRGPSk7'@;
put 'd00/IlUpZyE9YFs0IVZoQHkjWEd2UEtOO1F6TzNVOEMoO3FKJig/YyhbX2MoPVd+cltVTTJxZH1LYVtiI2heNnZOQH0lVlFaIixGJV9pLzBIckQoP3RxO0Yyb149RGg3WCtMI1J4KnBma2pII2lMZmM7WHl0LiZPd2NSMEpiVVtuOCMxYjd9RUVlZkk2MXZlKWlnSk5hKWp7NWFtLCNqXWdyZ1lF'@;
put 'biQjRz8qYURzJCtYNyE/azh0YVcvRiFAI0E2S1p+I2I7XmJjfWVRXn45QmN5TTd+YUE0SHg9aUQwUjRAWnZ9R0ZhWUZzUnpLeX16YGh8fHcubTNJdyJxOUZSZjQ8fG11RHZqSjR9ZjBOcVB2U3FnQ1RkeW9FSD1qQ2tKZS9wTVsxRi9EMERBaCt1JFY+S2xaWy9UM2hTTCgxIUNhRSFKYWdebiVm'@;
put 'Pnkqalo0VkBnUEVhfkBJPT9ifnwmWGBLT2dgQE42cV9MaXxOPm5HOjI8VmZuIT5gRXRnKENyJnxiTGAlOUUsbXAkejl4Ync6L2s0P0t+JCRQPV0vUzNXSj9FKzpAQ259eE99JWhjXkZFQkNBemYpOntLPlp+flFHXiV7VyVnMWdFOixnMXl0XlZbalMpeXRWO2BXaTM8JFR0Z1Yld1A7UXo0fkZ5'@;
put 'O2U8Skk3blB4dCpmVHQ0XTR0KU8zZXdDL3MuJj4zKkpKTmYsMV1OPnAzOXQxbThgNCl8cjJyKzU9dm9JdXkxdUtCfEs7L2k0cVE7a0RCM0MmfGo0JltQYzpzOTxdPyIycVZsYF8jS0lVVUwzK2VEcD0mbWUvcD1OXlJhZnBII1duPj1DfGk1LDgscmRDOCtMKiwpaldyWGJqd1MuUTwvTm1JfF1B'@;
put 'XmEpU0ZrQi8qZHVuUWdCNmk+dDZuPkJwJHpQSE14aERbdltMPWFxUElrOV1RZHxuKFpZRjUzV19fcy5HPFdmL1p5IUNEV3ZackZDPilrUjBJQXs6YHJXejxreGZULHU4cDB4QipmfjVlfXpJc0YvVypGbmZ4RE90IX1DdWtsKzlaPVJnVUk9WihCOzo2USVpeXZtYz9DZXNmOy98cTYwQld7M3w6'@;
put 'aHhjUGA6QTRzOjtkanpPTCQ9N2EsW3dWY3ZTVl1bLjhFJjE8PmxAYCZVXyUjO3k8KjtlM2pgXmo6M3whOExBKHpzemVbITQhd3w/YHReVno9JTBDYTVlckg5aTg0XSg4RT0kKVdUMC9RaitkfVUjJU1fMV40ZzMmRC5xbUxyP1sqNGZmZyY6QXg1I0BqMlNLLlBHO2xJSTFMTnJHPnpHKjgqV1B9'@;
put 'LGMpZD9xbGJqNS4iXyIsYyl6dGdgO3RRPUpQUndGJWRVe2VhODloQTtMLHBVcSN9TzRFXVRrS2R2ayN5PCh8UnpMRE1US09AJFNRQ0c3dFRzQFtLVyo3cnc7XnZLU3tHWUFETU8lKVVfY3JXJXRePGkpYjBURkNHSzZCNCtaKVFnVVA5RW0zMiM4biNzTnkjSjY9YEBsaCJ2W0AxOWd3VzNrKStE'@;
put 'ImtDLjMkbm4yPSs1S2FzNjAoQ3khbVM3NU8/Z3ZPaTF5T0hdXXVuRzRrLkh7IW8/Pl12cEhPa0ZlNVIhdUp8TjhLXlNXJU5oVD8zaWpQNnNCLyY/QUR5azNCN0V9eGd6LyxifWVpSlA4NC9GM1dqTFB2SURLPlM8aWlYZjNnKWE5JUZSTWh0UF1EXy8pIk9MK2xwQXFyNGYqLDd7TVhrbzc+QGpH'@;
put 'RygoM00kYVt+NF1raz92Y05OWGYscVo8byklUF9jW204QWVMYWJycGtZNjRKXSRddTtMLDtsYVMrLG1LKERNSmJ3LGdzVDZKOklKNWEjamNtcUI2cyNmRy9tdD1DWn5HKys7bncyTD9eIlomPjJMLCwwdlI4XmhLQkF8eUBJK3A4VUFPSEBPcilsd3VgeEQ+Xjo3WCw3MjAzcX0xQlkwT3xyfXFP'@;
put 'NWB0TWBkSiNTKXNnOWk1MUV8empQRix1eEQ+YGxjRlpVOnh0T1MxSUAwPEJoO0A7XzFwZltIaXZCND5nUTpXMFlPdUQ6MTFYKSkrKmZ4ZmU2aEtSJmVfUjRoJTBVO0UpXUZ2TmIobGZEa3wmbTh6MXlKYXJVZk12aDxmNEN7JmskUCNMOXdxJGRkLnwzZThpYjo0Y15tQmtvUVMwZld0NColLzdQ'@;
put 'UH1ESDYxKSQ/fGp5Mmx4Y1JuMHBwYDxmOU5CSy45V302QEh2XV41bmJiOmBkS0xIU11qVjhyL3VIYlZBLGpYciZiWC5Lbyt7ajYpVUhKT04hVyxOYU4wc0MvVHM0PWAzK3w3STxRUEswRGRNYSQvQU5xZm1seGMwXXUvPiFJLC4wSTxRUGoyYWYuZk4wbzYwWEJlRHNDIWhlMzpUd1VOZzMhd14h'@;
put 'cT5dOEdhQUxoVDFxImArSCYxSTxUK2lXT2gwNlVdQTsiN1Ywe2o2RTE2LkVnfmhaYndIeGVpKi88OmI/Nzk/L3xkcE92LnUrRDhqXjVpPDAzYTckZn0/fGooTl4yXTIjfTJVSXp7OTkrIWRkMnRsLDdMUnlwKXE8dGxaKl13TXVoRzlPbTxgNW1NUmMrbyx1bWB1RWJKOjBfIV5iV20pU01NRVpj'@;
put 'YXB4Q2dfNVdwNnFDTllQLDxKbDdIMlMwYkE7TCxaSlQvaFp8a3kqbTZVY0Y4KEBnM0ZPaSk0Y31tNzZtTStOKDtkZDJ0USt9b1c1MzlwKWRecVl7ZEpPMF1VLixaMWcpUys3Litvfl93cDQ6IjsiLyIqN1RkeFpPdkZjOHdYRlkmIXtjfF15RlVgN0p7N1BRT2EoTzYwRDR8SlQwezFJaVU1TkVM'@;
put 'ZGl7RT9kNDNIek5iNV9IR19NNFJTSmpaVUBkRUV2SFVDXiN8NzlFWFtFSGtzZHt3ZnBFLmVpbTxJUlAwamJyUnU3JTxwe0BGPlNWa3tRLnYrSSJreVMrMyMkWFhJVyxiUmxndF8vLi8kInpSOmw+KHtSdjxmQlkwaCNZN1paYFRhSi41PGwzWiJ6Nmh3Vk1yTUxnNi9VWDAlV3BZV2g/bEFVLHV3'@;
put 'byRxcSU8LE9sdHpzcGF3M3liOnJqZzs6ZD1kJkVtLGF3I2V5SmV2QjQiTU1hMlYrT3heYC8/WHJuX3FNVTZFYjomdUJia05FQGVpbVVrSGV2IVskU2ZYUlgqRzhhKmRtOl94VHgxbzxVQ30uNS4vLi9OSzksbHEwI2ZCUU15TGd2S205cjJBdkM+d31TIiYiRCZFNWlpNH5YPzdhOit1UE1hSjE2'@;
put 'YTo2U19OMFN+STA2eHcjKXZEYjpBVWFKeFp8Tjdhbi9qWHImZENoP2orJW1daTxFWSM1MCFlOEd1VnBKXj92TzU8NEM+d1FhR1pvS3VLYTVyOTlId1g2KXd6ZW02M3xwKjlvY206PTpeZFptVD84TG9IcmVgWzEpfXxgcGw4Mj1MaGdufDUkaVZhWWouUjdHNU1QMEkkWGRyNSglSXJ9IyM6YSxM'@;
put 'eC5Xd1NUYFBSKVddPDUsOnA3dCZQfTZAV3ZHW288WVczfDoreHc+Z3ZuPjAhWG9KNH4rMChyM304cF5ZO0ZCSX5Wc1UlMG84c15YRGt8WSNqPyE/PU4+UXhpT0VmTCtTZl4sPCgxXWlzQX1zaSpHVmEveyk+ezRac3ReeDJ8U1F5bnFRbDt+UyQoa2dWKWZ8XWs3OVREQ34kemdoeD8wZWo9Ylt4'@;
put 'czlJaD8/ZEhSWW1LW3thLm1oMy8xbXpRenUkN2F+PjJjSmQ+eFJacTw/JnJeXzpOYnxlKDRybiE0TDdyU2ZLX2Z8SlB4SyR7akJnOlZyJFFSX04+Xj4sI2tSYzo2c0c+NCRaLEtfKTlEcFd8bV4udj07WVJFYV9QNTNhZl4vPndzTGZWQmhjYHtkeSMzb0c4eX51WV5xQmVKUDold1BUP0JrZ2Rm'@;
put 'ZWFvZVlVVSo0SDgvXzMmVF5VbWg0VH1YI0Q0fmkuN1ZxbjxibV9COCYycCF9RDJHYGd6b3YjQG5TSE10UiFiT3AiYDNnU2ZwRHR5cm5WSWspb34zU3Y1OzJwb2NjeTFfKEpwNVVUfFYqPSF7Yk9TblFlI3ZveVFuSXZhYlgmPDk9JDw6VFh6cGYqLEQyQlt1S09rSzBdRHs7bl9fRFlCK3VVeHs+'@;
put 'aV5pK0xvR1JqO0oxUD47QTp0ZS9XR0lYO0ZBTjFaRlZdWX5bST84QnQ5PlpEVjNUISo4MX4hUkV+eFNBXUImdm8vdjFTZnw5W3Y4PCElLF1hWm9MfmtESHZVVXV6QShDY3F8RyNuPGJZbzlzODw5R1lfRUxYX2laLyo/Y0VIPzlpNF8weWpWY1ZaT3wwNnBJYU9YXlorQTJVTkN9R19lLHpyP0hU'@;
put 'PzAqZD9WJkY+L2RqZHY2S3t3fi5McjU2W0NOOE1femp5RDxBUWp0Qj9LdFJwW3o+NGxIdiZAUUNBQDdqWix6fShJQWBSbkRFU3J1R1IhOlh1VGNFIlJwI3g+RilUWTRqQVdCOE1fejJuP0d5YWs2Y0VNQT01YDdmR2F1VnRrXyxUWkxBO3BGcVMxYDxgVUU+PkFSMVV7ZGxxIj4iN1YwWV0pN0cz'@;
put 'N0QuQXFPNFQxIX06YTNfaT12aUdmMl5LZFo7TlM/VHEseG9BMChYTCRMW2Q1RlFCL2g4fUNONnlyNFBEKUUkWE4iQklXQj01T0FRUiF9MUJDQ0UpSnRNNFs3N3M0WldYR2lMcC5PdTFwRHoxdDg+RzY8W0RbRjhNXkdPY3l2ST90XzZZb0lmen1HOHVocWI0c01pRHhXZG5lSHx9N2JQXT5KcUM0'@;
put 'QTIofGV3VzJVfCs4RlJjT0pddFpMRSI6dWtfbF94SnJYKnk6Q203OmMmOWQwTGtYSnEuL2BVUWlAWjlZfSl3eDQ0T0x1aHhuT2VNLm1bTjVWQXkyQC4iO0RdSV85dDMqLHZLfklLdT1nTWkjZCJDOWBnLFdZfFd+S3EvNmUzcE5hIk5NUnM2M0RadSMuWXMqLCY5S01+JGJwY1U6ZVBkTUM7TEsm'@;
put 'bD9Xdn5DPGc7VyNnKmp1IkJBRT5QeTMsezBgRGBzeEkoYWpEYSpfRVdEdDZybzVvQWlEaUJ4OzwqRWtgQWl5XztBLnR3R1U7bGU8YmVfWjcsel1vcWF2aV4lSTVSe2VIQTRwNzdGRHklWiJofXZvXz5DTFl0eX1UP20ycjZHNV51VDUlfjBJWSU0eHlTOSowN2ozPEY7LDgsZVFmPiFgcWhvV1BX'@;
put 'OyxMb1AhfCMpZmp4ITQ8JWl4IXY7MVtSVEFhSkdsQE9rPi5vfSFxVWBIIkAhOll5bWFud3t3SD5YR1BNPkZIQkQpP29TN1ZHT0NjI1dLO3Jza1lUaVFPayk6NFhSRntKNHdMPWB0UDgxeE9pVl0zL3QlWmkpd3E4R1UuZylwaVI/NXxQVzRqdTcrQyl8Z3hOZzAxPjZYK1pURF1HXXJ7dHglIUhI'@;
put 'andsJH1OPDYlcVZya31XNlVqMVNUVUFaWD1jb2ErQmc4aiguQCVLfldQOSgmT3d8ei52PzVASXdzZClwKDdLM10lZVZIcyRlOCo8e0luVnkjcUdfRz0wdlBhTj5IVWRkV01OPlplfWp2Z0kreE1IS0lGbk05YyN2TEc0VTRjKnQob1Y1Oml8WWR7KklyeUQkd2hFR2FpczkuekV5bzEiQTYzWmVi'@;
put 'cWk6dzcjJDtuTHMvVEFLZDdDJWtiXlVQO1pQZlZ4JEQ5KTltVEYmYz5KRSE2X2YjVUlORHc7X0Q5MGI1KkdHe2ZvS01fIzkwNzssVE9ZMDgxd3EueFFvLEVbYH5gVVRuY0B4WCVqUkYrX3l0TmtlcG9HUnA2Tk9SPyxEaH1GWzpML0ZBMjE8WiR4L2M1P0RJJjVnRllUTyQwdUc9N1BZTmVDN2A7'@;
put 'dWpAZHdXQkB8NkxjUWlUKz5+ajxiPS86RnQzflFTPkY+UVMsQ1VFNE4vczpBWjtHTDspdXV2UFMhcjFRNExVQHFRNFZ7en1CczpAZHY9Rjc9e2l7ZVkkbilXUmFIV2t+SzQ4MlB+SH1pJmE8fmZaOnM8YDtGdEErIXohI1ZjUyEhO3M8WlBbbkgoOGlGcClJTkwwViRdU3krYCpRI2AoXiVxVi5n'@;
put 'KDxAay46VTk/ZnlyYGM3VSR2eiU2cUtUaSx4U2krTVcwNVFqaTx0RWErKW1BeS4yQHdjZ1VDMElUNGMsb3F7fDZaXllyI2pDbTRld3x+fmViRmZ3STZtdyEmLCx1MERNaHZNUG9vfXVELEAmU1lYRXw0Y2lpTXAjSC4sRlBRanJNaXx1JDp3aVQwX1JUbl1xM0h8MDl0PS9zSVtyPjleKHFJYHUk'@;
put 'eDZ5YFpyUy5VIT45T1R6REBYRlZXfXkxfnp+UWc9OnVydTJbbnM8X113fHhJYDNjSlgpXWltV21+bX1wRzphRV5qa1AwU2IyTmJiLjNlNC9ObDBTYjJOYjE2aH1rUyE5YExFTEFKJTBqV303dEhaPn03WXssWks4ciJwP0lXYXltNmlCUkRyVSV7Pi9FPSoxWlBWaGNQTHp2RkZQSVdzVSNJX01n'@;
put 'aDYlVl5ZOjpwUE1dc0YkeD5IS0A8R2h7Tz5lUyVkaShoOilBNnA+Uz1YVktSdzBxZEZAV3AjPnBkLDZ0K15tOCVUXU1gNSUyPit1fmw5cU9mZ2xwNHkmQ1dCTW5gfkxoSEFBejM3VmcxUXBzZDw2dXF6VmY9RWREYHdxcUE5PUZAYzNFOjdDLGIiKnMzZlVQMEpmYVJFRDg5ZDAmSGt+cmxiOEk+'@;
put 'QUF5Omw3QjVEWm9QaXZIdTsvdTVFKytseWgsRDNvRChScnNyc1pKaG5TQmBjKDBTKEoxKkJnNGwhYWZDdjZoJGF2JmImXkRJWHw1WG9MeGNpQDQ+OClKRT5LUXVuc3pFd0ZJL1s4QlsmUCY7V1pqZ04vMV41OVU3SUlFPEt3WT5rRkk8PDckOU4+ZDl4W2FlNkIwXVRvO1MxXnYxUEtEYU5SdkN0'@;
put 'bmxjPVJhR1BSUEoxRGc1OS83NGRNQEkxRXY1OGNDWjgpLktQPUM0L3UqMHhJOm1KUit1eFlmP2FaJV0wdVEmd3FMbGY9QF0sdHtVUEo9PXFNTiUjT14mO2NDaVtuZVNxeyNyYHBaUjRnX3cvbzVGMildSykuREZ3cHlhazQlXl11eSkuJGVZJV93dkBqKS5vKzVyOmwlcjovYklBZncpW11wUyFZ'@;
put 'NFg5ayJVeCFrLEkjOV1vZVsmamtDbCMvXU4qYmh9SGokL2NHTUI9WHZBO0xWQ3FGIWsrd3Y0SkxYW3B9UX1dU0hFPVhpdDIhZGYudUE0YlNYQ116UDx6NFRsLCtYezIkNDkpSFJ5fEJPI0haX2NScUk1IyxhaTk0U2U2V0VMeVlvPzp3T3NqezhQN1ExW2w1K2ZbU05IMyhOUiRaWHpmaTg6dldW'@;
put 'QilsRm5NWl0zRWR1N1YlVWNQJkAjPDlUbFBvezNJcTV6Smxba0JScXxhcC9SPlV7VkFgPiNldmpUOk0uLEYkSXZQeVNDZkxQYzReaDJCIU9hXTRyLixqNnQ9JFZfUGlqJnZ6eFhUNGMkZWtebVY4eUJ9bXFPc3xqYmMrdyNDOE8jeExZMXIpVlEkZEBJWHNPWipSNklBYEE1fFZKNW9pKmRwb1J5'@;
put 'PV1aMz1SZm11fG9lM3ErI3pScSxvOnJmdEZnUFdnYGssdUs4RFpfKjxbIy5XPTUhfV10QXReXjx4aTBvKWNbOW4hMFNAbitvKzwoTSpkRjo3QTV3Ty8uJWdlb0tNNTNxbzJHLGx7UF9uUXVxMiRCLitFQkAzXkZ5aiRING9VZV08O19+SnJmaSEwNjhnLmZkK3k5OUhTfnIyIUJNc15wbSpEVDFn'@;
put 'cmhGSCsjW3d3PEdIdyY+O00mV0tOW2NsKjcwUngyNGIrVWgqPUVjYFZCLDFCfkA6Tj9hIXVVfitDS091R1ZIJTRpZCk2JkdYK2pNXVcyMDZiTHpVbz4xc1l3Wl1yQnU+Q1VGb0NGRWExe1cyamxMYC5FXWJ3I3t6YUVhV1Z3Oj5he1t4JGAwUzwqeGBlX1Z7OzRPZ1tOOVo9Ii5OMzArSSZpVTh7'@;
put 'P2kyb1pgWy9uO0A9MT4/Vng+WSNHeG0kSEo9WCg3fCswb3tnbE57cTAvVHNrU3BVai9CeD8qdWFTd1ssUUMvbENUZz5mc2FKdV1CQH5fSyg9N15PWjRbc0JvfjU5NiNCT05LfXZzYFBZe3U/ViRrT31+VSUiWn1GPkZlNFQ/bHBpT3dbc2tsWTB2e2w8a25Zd3YzOng1XmRDSEFLNjNtSF1+YnJI'@;
put 'YzQ2SFU3OS5hfF1ndnI2R2RTITtlT3Z6bHU3KTIpeHI5NXUxM3NFOmV5bCJHZFtAeGdATGhmaD94IiNjLyw8YClKYWheSUxSd0JQO2BjSz9ieExCWF12Pl1qZFo+OUU2TG1NN282dG5ecVV7KnxZc1QlenI1VG15PDhvVW0zdEx1fmdobX5uaktOWUdYcCFheENTd3VkcW08K3VMNnUxaF5lME0y'@;
put 'YVREdnxJWm1lX2g0QENWQ2BeVEYvdi9wYklwXy52SXwxeXQkL0lOIy9HfjZiOGlSfitBQlUoU0xdXShLMXpSaWR6PU5UOSkwaTVuUD1STiFEdmZ9KiVSUW84Ziw2cztjd0dKRjhmWUckKyN6VUhhdD4/JDJnfHt4KUheRDdfT01LQkRYQyFFfXpzTi9+SDdYVy85Sk1JUyldSnlqemJpVjA5eT9l'@;
put 'NSNqOkFZSD0lI09BYGhkLCVEU34/MylqLGFHRUgsVzxIPVJoKHwzI2pqXk0qPig1fCJsMDZgOEZ6QF86Nk5ib1A0KXRUa3dTPyNXZ2B8QH50ZDRdOS5bMix9QUV0YSh6dit1X1dVZnozUyZbPSY7P11ucCYlPmdvOSY7P11ucCYlfDFnXUwhPVJjJTVtMShvb30lLGNyaEUqJlBdQCI2ZldRTERa'@;
put 'ISNSR2JfeWc8RU1JVnIoaiFlRVc+QnVQZjxJUDVZNkJbV2kkJXVxPGVrK0BdTGRzUWFlPi9dazBiVlRDOVJVRXFFQ2lzRyl9X1U+QHxVSU5nWz9vfTNWJTQkT1Y1ZVdFPn1wbywhO3RbQEglRHxpeiRbe3p5Z11danFrY0hWUUxQRmEkLDQwNDJ5IkdudF5OaTxDUUBSSHhiP3xOTSt2MS88b2lb'@;
put 'KUBucW9PVERkfCVabXVbfSFDJTskeVIlV3s3UWdWJVJTXXsvSUEmc2ZfbkBQRUkucG9Nb25DT31+VnpKN3YpQEIjRCxOb242bX1sL2Q9X057ckZTPTNEZnZOeEYufWh+UDtPK31rVzlFPSY+d24wK2w5QH1raSZwU2cjYFdlaXduOixEYz1SPVJIaWZPRCQ2Tz1zUVQ0KEhVPEM0THF1ZHt0KVU/'@;
put 'bWJrLG9FIU9HeXc7JU1VLHRPZG1ybi4zaz4jO251d3JiY3NFTiVqRVlZcX1AS2tNQmt8KEw3JF4kayxgcF9rNF0sNyE6VmsvezlZY24oIWRRdyQsRURqdUElKUg4XSwmS3xMP2d4Xl8/Jkt8eHxrPiJKejVaN3h8SlRAIXdXdkVbIThKPDB7Yk95S0V3OUtpUnlHMTttNXZCbihqKncvTDcsQCtU'@;
put 'bGVzYjR2JHpEeUJtc0NUejpRPE55JXFZOEAuKGJNVUtgJVhLU0Zkb1Q6TEZjUn18PUJwd35KMll4TU08OVEmQjR5M0tpKkNEJjl7TVFEZjtVVilxI0tgKzQ2NVA3JjJJSno8Iz8/QGMhO1VsMGc6JiwyPVV1VjhTQHYmeypgSEJDWFdKdigmVyE9Y1BLSnVILHNUXm1kMyVxdF0kUTteRShVVVBM'@;
put 'P2g2aU0ybzhiNXx6RiFndUlZWz15Y2BWLnBtfGxUe2h0e1F9MmYzPkxLJWg1PU9IMHN7VjVtKU14IXJhdWZsUEQ5PjE0T14sLCx2UFtjXTRRNChfLkghKW4mVGpZNF1SMSUifVMpNn1WL0o5Q0RxRTVFMUZpcGg3Zld2S31hWWJbeHphRSUlQHNGaV9ycHYpXkZGaF1DUCEwajhOKjB2LCVrX2Jl'@;
put 'amlRcyY1TiIodDdHTiREViwmcjg3Z0RSbX5WYDFyQURTMXdFT0FZY0lZKG9VUnU9YGIoWzE/a0ReWz0/KW1NTV89ITheaHQ/JSllaj02K09AIUlaOHhjL2NrLEJwVnF3THtndiFURm0/Y08oNk8xRXhHRm5ISzk0W1FnViVmJmBQKDZjYT9DNCtfITk4bURRWG1LPzkyOWUveHpLJl1lfih4MGo9'@;
put 'TUVdfExLKzJ+PCYwVS9NflA2RGh5TXkvdWVjK3llMG9jLnFsNGlmOT58LFMoPCI1cVZ2MEguVj9yOlAxPS49OlNVVldPbD08Z1hMUkYmJXtNT0t1Z0Q1QGBoUmBtPW5CNngkNStGKjlZLz9wVi9CU3dAKCU8LFpfOHtxXmguYVZrV018cGF0YWNYM0Z7UCIqPmNwb08rY0t8OG0wIj9Be0p1WEIr'@;
put 'TG09SjdALjA+en46TklLa3VKR085R3YzZC4pNC9vLGRzJEkxbUUqOklGe1E9IXdbeEZFPEMsSE9PVUtFYUNKTlhwTFtJSDtiMn1EZGBpaDVuTTFqLHFpW0BuaDshXVtEZXc+M2Q5Sj9CckBPYj52X1E/PkRHJkYycHE+ZUl8cjdfKStqeytTbjV5QX5Eb3AmJSN2QG40P3E4SStsM259MEtrLFhy'@;
put 'ViFxejhDXUBKPys6Wz5XcXUxKH19YHlKUEUrT2FSJFtmTWtjPFU8RXk3X1NVP0JQXX4sQjYoLjRxTEZlZ1BdJnclUXxFJGFSSkZOZT5gd1djRTZyUWdkb08hamc2JUw9MHF5UkZfOEZxIS54SXldcXpQdWNsUlp+akROZVRrLkZ1eXErZGZXRmsuOz0mbX5AbT8qJFBGcFlkOk5sQl86MSswXVVh'@;
put 'cE4vPTxtOFJiVjY0YzI7SDZZMERkTWF2T0g2WTBEZE4sTUdCbFk9Q3dkO343ej1hIXdhLiolRXFhU3IsPHxaOm1bdWYjQj5+PEFQPD13LGpkImxxbTZsRiRbTElSJFcyL1QmWCN1XSUlV1M/eyE6Vyk+LGcxYU4zTF0yLHRabkBhVDw0LFA9OFFUVjZpdHsqeyIxcV46YlcyTjdKRjJFMnsqZCxU'@;
put 'YUpKan55NkV0WXpLPlhzTFE3aVtWKDkkO0dHPEFGJTJ3aTtfZGc2VURxTToobDZzQmgsZmhFLCl6YDc1QmZIIWJpMzEjXTxTLGlVWUQvWnAvLHwhOjhGbSVqMGAyTTxoUj1gQGF9eilAK3c+OF9bcHpSUDJ8OXhRbkRrIX51NSlKTFE4fmlESD9OI1htK3lITVU+KlZSfFImRDRCfntRb3ZTVHZW'@;
put 'Umt8OGNNNkJSJV1vd3w0XVs4O1JYJWpTKn1NfTh8QiRIbnV1YCZ1OUZLaThXY1VFfHFic1UuO2hHfjpDKmx5RldGKUs8fkdkS0l1JWl5PEksRjtuPnVmZ3ZnSyxgUWVadW9ETFRDIytZRTg1cjNJOmopQmFwYkh3RVhYPixxeEhHX0lfbmh7cmkoYl0oKXE7Y1tZcXRFK3MueX1ARElhWjBXUmcp'@;
put 'RjBfV0Rzan4vVnxdVXxTaT1rWDVVVXJwWGEidTRYfHZ0YyY+UFl8S2VFd0NpdlNsbT19TnV6UCYlTHx2WE9gMT1PTCxDaUcpKXFuKU5AVT9gbm9WTkJBUUwraHxOakxocV5YOHJCXm0wfWIrbTRnOW5sfj8peHZ1czxxPD49eCprb109YjdpXiJeImUicDh6djEzRFU9YnlbeD9BUGgkZFRrJlh5'@;
put 'cTA5aWAyS3MyU1NIfHVrMUY3VW9xW3VWOU5LZFJaUF9GJSVgX1VfeT9uPHEkc0hgIS5OOV5ZPmN1WnhgKm12bklOQTdeXj1STDBBW2tjLGA8NDdMKFQ4SVBtPG5CdlsvXmtVdlc4MHZUfj87R3E1SiExOVhAaGVsZyltOkcwQC4mP0lacFRqPyFmc0JEdzBuTTRWR2NxVC82R0Y1LHhdczxJd3Zp'@;
put 'Ymh6KytpfCMyRFYlMlQuSWNGY1ZhazBTYj56bXRVWUl6UkZ7T2xHXWwxUWA8Jkc4QDFUZClSRD5aUkFwdmtGPyxDTGopYkh2bT9lfExkUWMoJiEpKD5+WzBtS3wzWGspQT9yZ0NFSzZZMHI4Xk1+JnVUXTxYIV9RJCoyKyZwWUl4eVo0JFg3bkRfd0I5YE5qITt0LnZMeFBGaWd7Xnxxc3FmVVJ1'@;
put 'VjxYemd5RWpdOmBNaDE9Vis5dEkiRWxNT1gjI3QubUVXT2F+eWI5Mi9zPW9pL15XNXxAbz5UMCVCSkpra21DOipyajNXNElGe2ZbTyp4ZHQpbHdAQmwkYVM0Q1ojJjI7SC9wMGc1LFBrM1VNfEN4XkdhODxpNDg0WS5QVkVSKXFCYHFvfVR+ejt8USFDN19kWWYyfF5NK1ppQUcuRkBddFM3bUxx'@;
put 'ZHUyJGpIey5MbDNGN3Ysbm56X1Z3MD9udD5uRVJ4W0VQWzF4d1R2MEolTSRuPzA0KDhXOTFWQmV7JFJvTSVnQ09KaXw2Ik1JfUpnQEp2WGVJUT9DNiRTY2dUQyFUOWYha0JbTCJLKSg+e1kjb1VtQ35hbz0+e3xpbVVtQzNnMCs+Y0MuUmhQSjN2WDY/azFPP2h7aiZCPzZXJX5nZnZXJk5oI0hJ'@;
put 'a1pxQ2IhdTUpVWBld1U6VW9DbnsxeTFFVmVEX1FJbFZXUyYuMSUuJHR3fSJsZThZd0lUXU9vTyYhTy9IfSpFInpsTXdJQzp9YFJJPEVVJjhbPGx3dXJWcH5UNzhtWnRdVCtKKHQ4U1Z1JVcjR25kfmRNdDxHQTQ6I0dzcGlfck5mcV9DeU13T0xMRE0iWz9jRUtWZT1sR1MzfVl6QkVJeylvJTJl'@;
put 'RWYpLztOKy5LazIqd0lzP0hRaWIsZnt8VnB+REc4SmppL35keHU+JGorO0kqTDFuRTFUVmQ/K0BQcyp1cDpNJks7ISM7ZHg8dT8pcnViOUVMcn53Z0NIfmJ5NVk9WHhkeCJxQk5YdDtvLy5XcmVPRk8mIzhRYzJne3ZrJHpbQmVTOUUwUituPUJ2NFZobDEjUzpuPkF9TWFqSG9QPnI9T01QRWV7'@;
put 'dEI4QWVEOEs4Q2VBUGtDTVUoa349aTBdYHJ7SDcuJmNxQzV0ZVRAWDZsal9Me1BtVWVlTXQvZiUhYWNmZWY7MyFAL20hR10pKmB8bWVkZHIhZzwvaU9tXnwkTCw7OExiMkczRmhVZ29nOV0lUGtATX4qTn46N0ROclksTXEsaVUxQE5DZU99UkpiUk84Vk8kUks4fjolJT5neChuX09AOmxFZXA7'@;
put 'SXw1YDxnImNOSEQ4aGVZN18jbm5QKDw0Xj1Ha0UxUEMmJXZMRyNpMDw/O0FJb29GXUNeeSw8QzJweSNOK2tEZFtUZ3UrSU4sVlhFdExaSXYyL1tpbGxJezMpNTcocSxyS3g6YURHTV9EKmMoRC5GLiZbOTI3V2QmPip3YmhYWnlUZVsuI05uYHs3cC5EL0RGallCa3Zdd2J+NVMmLHNEWzowdEJu'@;
put 'OH4hNTZmLDg6JShsXzZbLEtqKS5dUTV4b0gvLHM1WFgqVS4xdmVpJkNwKV4xcDRqWGl1OVhGZWwpKFBgaU1lclFkLC4iTyEpWSs9fSlPYD4pK3dtSkJlWmtVbltHUkReU1JoeXVlaTBtblFgV2NEZSJValcyfTpZfjIvWiVbM11IZXZzSERaPTY5VktbSHxUfl95LyxwLHVAVmRAaWc0ZEo/YCg4'@;
put 'SCErdzc9Ry4pOnM8YWNdeHMja0pnU3gvUHI3XnxPJSliamt0L0tlJmM7NyxZbkd8JUcrLk5sL25QUiJec0MoYjhFcklAS0hWc15+PXx3LnBsdiY9eU85RWBxV09JeG9MUXhFdmV3UUtqUWJYSVdgTFVLUlohNHVYQnE9dzg8SlpOR09bX0BVOk5pP2xCUGRgSWV+SS5kP05KW2Y0ZlR1SDhxQDQ1'@;
put 'Vl5hZ3NaLDU4Wz9gfEhPUDsmbDQ4I2h2KmplMmRzKy95bStmLmcld2k0bmZ+VSVJNzZoXkVXZ3NoM1U1OVUxTG06Pl9qUWtvWE8xcVluOC4vKkVjLz4sXmliSjxsMjRHZTAhfmo1X09vR1JxMmdtMWZKO19ARDtnMXUwTFI1NHlKKTNfMj9qSjpJJiwkU1ElaHQrMUNVKDsqbFVVc0k/fF1CJDlP'@;
put 'eVlVYz5tV0R3KTByMkRAdEF1JTBbOlJ+UGhpU0w2Q2ByfXlVdCk1TCFAcy9iUDpYW0s2dlZ5Wy86UiMqZiZ4dTcjJXw8VFJRMEkrZ3BCZiZtVm1DQjhCO2VmfC8zVFgpPj5wKXhPKXhCPldfa1JGakBSNGh3WHQzVn1zS0VgJjxaeyxpa2VfVkA7KDlXUFc2LmFgVnBGP1NESUIsb2E3LCoqaXUm'@;
put 'XzlhTlZQY3BCI0JbSjgxS3Z0b2NUbFdMb094JmdqJSo4JFF3YX1fLywoTUV2PHc9JilvW1F3KXR5NkNweFZZeTlCIWFPLnBaaTp7YnlCVjAoaXdlKlNTVDhuLGpTQzY0ezdbSHE5NCo4JFEwPm9LbEEkMmZNJXxZMVtLR1JOJmZidU1iXypnNipydEFVdjF5cixSIypUSFtJOXlRdihdU15TY0hX'@;
put 'eHltZX46aUxHRWd5OVg3VjtaTVpbOGw7OVp1ezdMO0AhYVdPQTxKZV0oR3NeKn5bU1JSXmRoeHIkMWskRSYyXmVaXnFHWUg9Y0xlfURWITA6OGVAJnpfWUolajIubV9mcEQsPmApakcyXzdCbWVycj5FJnZqMGFSYSleX2s+WzJhSXdQRDV6RGZFUkgrLDBERitWWHBvU1IoTEshRX1QS3FOfWc5'@;
put 'dzN0XUBpaVVVOWowKl0xQn5mNjJmImNURzViezNNbDM0QWpYQWRXTTgxPCIxQWJ7amZ+VVFbQE1zb2tmPl5WbTUzWkEzP1ZvNUx4TXg0V3YidigvWHYiQUEmMmY1dnJlWHAjeWpEJDhLPCFlPXlPJTY9cigvO1YheE1xUWM0VmReOiRATWVLSDFYdEJ0LylrTUR1d3U3fnlrbFUxSWguZnspWmA6'@;
put 'dCVqSHImVGxiWE5xYSg3I2xCMGtKIXlrSi5vbzRfRlFoN01aeGRRbG8zV2d2SzEwdTB+RSwpUzJOX3RwLD4jQ29hSTEsZH1RS0syUF9JZmozP2RaIjh7ey5ZVjooJDl1QlRrLERUOkdPSV5VZHpwQCVNTGJSKyEvfkJafnwlXig/bjxgUmpxSUsmdkZ1Pi4/R0huYGZRdFpMV0xpJCIrdU9NI2g9'@;
put 'UjpKZFdCbj0hZURkU3p9aWgrdSZ5JilhSV4/b3AvS2tSJExNMS9zLypoaGlKXXhdTzhFfFI5JlgqeGNgfTBJOjAqODBhKTw8KDFdM11QfFRuI2pvPnJ9W0h+LEQhW2hIM1UoPzJaKHRCe2hdX1NbMFZPa1BbZWV5a0c9XSVFI3hFSXhfeC5fW0hyU197OzFPY1d0QCZZeEh4T24hJW5hPVMkfCRR'@;
put 'QylXVVthJXRHMSYvSTUvWjRlayN0PEUhYEhFbGAxRmNBYmlFcUZ6YEpraC4lUCE3TmlLIV1PU0xWTnkvQSNuM0laLkxCXmVNS0taUyt0aC5ERD94KHB3P0ojTFNkOTVqdUJXdiJMITw1WV8jR0l0fD9dSjt7JVRUYlhPWSZdZW89KFlKN09HejA6IylUbl0yZk0qek0wciIrSSlwJFB1bmozUGVB'@;
put 'UCE7KEMlXlNTODFwP2dtbTd+SWBMXX5WLC5DMX1eU2ElIjx2dHZMaXFgWHJzNTleMUwzcUc+ZjwwMSpaMyp4YUU9U3ZKTlQpMXE8L1EiVmNIPm0xe3lidCVqSnNxb0gvKn5pZCFQMnNxLEt0VE5YMWV4IXpMYjJsXkQ4UDhlb1JfTn5eISxlJFBGUk0lJmQhRHJiIj8zdDE6MjlAejBTVSloaixp'@;
put 'c0pLMGI1V2pFYF0mZlY9bFhJL3pVU15AYnIpPEwqQj4iOGpseFpnaVdURkd2OlZfU01MM1BYYV9JeSZpVnVYOWFDQjRrSmo1PCpgcyI6fWd8VnkqcERdPCMpfGRwT2Y8WFY+NT4jZCxbPFZwRWF4a2VKTXA8TWtfW04zNjlYeWdaLmFGTVFWdyoyaF9CIyl8QEVEVkV8dmNkT157c3Z4Z2A0L0px'@;
put 'KXs3aWhMcmdqQnExLk4sOlc5VSVuTlROSyFod05qbXBwRjBjLHVhQjhqNHZIaGUyRzJFOHpwO3xHdWRXM11jdWMzWikzY2VbYmQ8N2IoUnNiJUROUXNWTHIjW1Yzb0hlbDFlMmNkPHFUYSldbi54MSpiSkxOZmlTV0dzODtQeiQmakM/RVI6RDkhUUwzL3IoS0w7UnNAIWN3Izs+dV1SQlFaVzl4'@;
put 'aztuI3JKVW1eNzxkYDFHNDZ2PVE9cVIje2lWTi4jU2xmKT4rZTp9ISQxOEZ1PlgmdV8+KSQ+dEwlUGtiSHFvLCVqUFMzXWc7fG16M2JpelNPJmRFWHVtflI+T15HK1dzYlNbezI5LCRpfEc/N1pHeTosXUArLlVxV0l2N1BSSX5BOCw7JCNBTWElejlJQl9ddiE3fltjUkNfZzteRWpnKlFzQyIi'@;
put 'ZmNDYV1QX0xINmRramk1MiNqZF9WR2MhUC5kMjAoQEdsPnhsKl86Vkh6Ll13L0RIPXh3MTd2UGUpbCxfOTU1NFpDR1M8PmYkaUM7Pyg0XXZsLnokI05sdnVCTVhNMGNhM1FhOUB0P2w8NXRwZDMiaVZwVHF1RUZoWjk3TVk8W0VQKitIO1IheSxdN346I0AlfF8/JmNUYWZDdm5CdF52QCo5d0s1'@;
put 'KG9IZ0tqR3BaNVA+PDRlSnkvYCphZjlUeSowPWE8MDQxP3ZlXkdDRXZwIk5UVC8rTVQmZ193Kix8cW41ZWpOTV9LaDAoRi5GY09pUTdWS3BqbD0uXjZDfSEzI3hddn46SF9bdzdGOStMcH0rNTN0LERAan4vO09hRyFMNio1Pm9GSmt1bmN0PlhMKD1pLktUfXJSP1hOSWl6SiU0aDViWUdjOXE8'@;
put 'NnZxO051cXVVRkpLI288NHcoblZ0RWMjcTtOd3E8NipfXyRebzk4VSo+LFBwP1tDYGZjMi93WVpdR0s4T2s5QSU0UShPazl3c0F9WDomLy9pVGFdKnBVbnM0K20wdCxIYTx2YWpbTSNyZnZhPTpHM1shKSR3YDsuNHldeyN4NXFKO25UJlRZTEcsOGlZOlJlMmYhVUh6fkojemBud29kfEJ0ZS9Y'@;
put 'cW5eO3whLitQL2IvWktXXSxCSz4zaG5nMDZhRmQoIik0VkRmVnR+Rkh6V2kvWjR+dVFPXjRAMmMmIy8qdFpHcFR7aXojZDdiUSVXVz4qLlJ4KUlyVV0oTSE/Q01Bc3tvfXpRSV1kMlo6R2hYelZFRDdkNjlKNHZCSSxpc1JXLCZyWT9ma3ZkZ10wcmReZTtKWWxlNk8wNzFUJXZYYTZTWSlsSDU7'@;
put 'QFdiYG9BJVg3IXg7SlJLKnd3MEREODpKXmNyP2ZiSmEwZmxKQllhXj9LNmhgKTNkLHs/UGdxXzo4Zi9FY0NsIS9nYE1ZcSxmJDxfelpnen5FOCltMCxbJi8lY3pVOkJ9RTMzfFt1JldRelZoMHQsam8kT1NKJEZ7NytONjUoQFUpKjNuLCg5LDNRYXN2Zl1YSFJJL2I5QHw2djI3RmQ3RWRoIWMz'@;
put 'Xj9dMVE2Xj98bkM3ISFjM2VvUSFfOG5QaSx7O0psU05maUhkeD5GNSsjRnZfOEBVT3dROnhHNzZmSjpoPXcrPG1kJldYNTdbRXdDTUFBdigvTkMid0RlTGdjaSEwKVArOz4wRipCakhebDxOUFlESygrQExLdXtDMldBQUFBQUFBQUN0NUZlVmdpYVd8dzI/PENOYF9RI3ZmOj1JKF9LW1p9cU8m'@;
put 'JjJ7UFM+aTxGdVNzVXxlM11rd1BnX2JubytTaTwySH5NNyEvZzFLbyNbV2t0M2F6TXErM359cDJOXXNHQERwKC98YT1lJEN0eillKG1CMmVUcGB6TVVPbklHd29LeHNaYX1aMXE8dypXQWEyc2FGN1dAKFFyKF8iZis6NWModyNvW1NKMHNraz1eVkR0JDEzZE1kVHxTUmZ9TlRRSH5wKGpibF9F'@;
put 'aUwlRzBJeGl5I1VnNlU/UjtxS1UoQEIzIkNGTkR8YGA1eCtGd0ZabypWcHlqVkhtWXp3dXZgaCttR2B1YjAoPF0+Migkdi4rYUwoQ25IYz1DZVNlJXx9OSMrT3IyPSRzPVFIOmI0bzAmPkslQkxoTClrISJ1enM/SVBffEBjJSs7dVd1aXQ1VU5kWkokO19DMjxDI2VnTURkQmwrVmpjZ1dxXVhH'@;
put 'JEU0TG4lQEwyYGIzXiJWYCY3M3A9Kng4ezJAVSw5X3E6Y0p1UUZzI0o1UE9rc0xYSiFwSn0rP0RnbUtvJlYzOS9xVWZCUylaPDdaUHFRRXkhKj1JJE1oTkglWn1zVmNVJmg2JSVMPUNXXiolPUhVKnlRPl1NVyx8WkV5az1qY0tDWX4kMHZXblVEVSlIIUh7LklbXjNuKUN8JiVgeDZXYi9PL3U/'@;
put 'OjJiJT8rNTdzem0uISxbVWhNNGZTazZETy9fV0dCZWpnfUVwWT9YcH5eeyYhezI6U3pyNyRAWTBGNi9kdEt+YEQqbndhK1ZEKn1HZWRaJTVhJCZbTVQ8VnhQImFjamRpXkxLSnd1RjJ4TERdOW1XQ3Uqd0VYUypAMj11YEAxV0Q8P0wuIyhhbjJoNXZbQTJhPTxDRUZqW0JNTHEuQD5YfmBvJSww'@;
put 'aHlbNE9bRTU+bC5oWERFY2s1VTFdXU5iI3JwKz5yW1A5OCsqQjR6dW5VNjE4dmtVJU9YUDlAZHkxeCxZWHFbZmEvLkFBJSNlayQ2biNAaFpOITpHXlc0MG1ja0hVOVorW3BwckJUMklAJitVLiNbOXJkTV0kVCw+MHBeJk1AMTt4KT5qfFpOWHUkblFgJiI6YC53fCZIaH5GNkMweXI7QDtqNXhL'@;
put 'emBlSlk1SG1lbCY2QiNmaz1uTkVaRCZsaTMjc0tKRVEuN1QhNlFpZ3t1O0JjIU5vfmtlQSYlbThEeyNyXnx6LDY0fipnYDUqYUMiRl1sQDBpc2BTVzxkZGo8dFRJTHEmYEF5cTx4QV4re09YTHhzbltMQF82WFo3NWghU35RdW1SYDlzdGFwMkNfTEZCTUZze1k1Oy8hQURWckEianVgYS4pSSQp'@;
put 'KT9yZShQQWtISCh7IUJYUjJrRkw0YihMPjQrPnhtSlc4VWZwZTFselgscXVnR11iJjRVKzNbJUlGW1RFbER1UyVvSDt8encxNlAhSylBUzB5P0pwdX13RS5CWDZYTSo9cE90JkVebjs0Xy82WiY/TDZgV0pIOUpbQzFddCQ1LE1dY0NyUiRHdWdOWl1VIWBKIT1nP15GdmFmUF00RHpaJFNzdFpR'@;
put 'JFlBTT13LDZ1TlFLXk83UCNDbHNsNDU9LmtjRUloW0I0QTthfkxdekklO3BxQWxINENYPHxXcFU0Xnl3SCZ5S1koeSgybF83RCxpRHZwRygzdiI2c351LEdsR0NsSyZebjhpVF1GTyNOWXNxY2FWPVVRWz1WWXxrSEJ1QC91VlREbm1sK3pCQl1uUlkzOH14SXd7Nyt4KCViTl08M1tGckdlK08u'@;
put 'fjgpaSZnaHwqLjZxU2tPfGZnJkY9RGp4SVM9ZDh9XmdHUnNxO2k9PiFIWDVrX1FRUG5DaDtzXjtRXjlGX0lLITA3M3w1RDFgeVpteVdbd2RkXzE2TGYle2ciU2sqclF6ZVQjNT9eRHJfc3VfOXlPIilsVWgiVix5YEhkNi9iPig2d192OSFnalM3SCRGUVNRZSZ7JltoTVArQ35KOiUqdFtFY014'@;
put 'RUZeaUBna3o7WzMuYlgjOS9Jai9fTy5LQlFNYiJfOkA1YVVfLnQ5PU0/dVdxcGJ9aGZvVSpZWjFmTz4hQjo7VGJUU1s4UU0rL0BOYiZlNTZEYlldSjNDeDk9bTw0MDQ8X0BddC9ZPWNsNW1XL1hrLzQ0aytwKXNsXlE+b1tNKnFLPS9Mb1JUSSI+Oyg7LD1tOmZAUXprLk9MIXpYN2J8cV8oL1RV'@;
put 'eUlKe0YqSzArQDpXKlo3XmVaOGhnNnp9S14vcnRScC80NDEmUCoufWYzU30kUkc3Q2owdDUmP0k9dmlGNkEpbTBuVXlgUSx8PEFlS1VvdHJuXnEwcnBTLzxWa0lJczlYOHsrQj4kKDdyV0ZyPHhzVGxPQjhbXm9zNjB9MXVvJTlgOyRPOl59OzNbNWdXNHE9MG0kP19Ed01XJFZBLzYyPldldUpp'@;
put 'O2d6R3FtczVZTDxNaToid3MyWSp9bCQkQksoRGJ7fiE1blVLWkU5cF0rS3Arc25HfjxBZiw2eWlWP3MwImA8WnEqV2dlKFg8aGNJWTAhV3NkKWRiQHdYYUxvKUxeZjtqaWVyTE0wPD8jWGNzZz57XVB7MGNeKytBbCl6OkpoUUgkMnhJZGg3VVkvbTs5R1d0bW0qMHZuLlhedkdveklyRF14aiRE'@;
put 'dmhZYlo1THpJKlZ6ezdYbGZOMUBOfik8PyxxaCU2fHNsbVU3bjtkNiVTOHV9TiUlenBGY25hZT87akR+anU9K05ee3V6RWhzXjNLREhMZS88Q2lGSVRiVDlTSiUzaCV3PUhNPH1DTGQ0XSFNOEtdNSUyWEQoPGwuW2gpNG9NSFE/OVNeeGpWeX57VGphYCl6TmVLL2dDIXVscVVYbjJYT002d0dE'@;
put 'Kj1meSRJZzBHIyJ2MTFhOkVORF1qUnE4QE5wV3FCRS4/N3xwSTRsfDlWPjw1W2FVUVdJIXJ8eFpwfEYuUUw3JWd1cyEmXUsvcClTMXBMIUl5PTl9XXlJUm9pJlJlT356MWN4QF1EWl4jamwzL2JiYj9sWHlufnQwTnZHcXdxbiJIR1tjQVRDNixNT19qLHFPWnY8dUIhZXhoJW8hNWVfXUpPKlRY'@;
put 'QjBZdih0WCh0InFLTk18em80fjo/NC5YNkdUc3tHZUB1V1dUY3J1JXdBX2x6S2YsLld5KFdAUVZkQih8UyNxPDdnV0xtdVheU0g7RzJmPFh0fnN4W3IoL1FPV2pkZm9HeXB0a0omLjd0YXpDLyl5ZHdERT9JJTM4IVs7VTlhJWkzbjV1WlZzcHZPakwqUHc+WTYhNC4yZ2hhbC5jKHNeQjluPGtb'@;
put 'Mz1od3gqVU4haF5ZYTd8dVtyXTgwIUQuIzUmKitUTiRubilWLEl9dy9OY1k+TSM0ey9fV2JPMDU8bnB7P3Y3RCt2SU13W0d6LGM/KXBYVnFjRFdEZ15ISEI1bUZLWE46TmFjOlRHKmg6P0BVQkhDWGx1WUN3ODswTExUNjMhNC9MQmY8ejJmflg0TCo7SiFrOCohazRbenlmNXdjMj5+PHN1e21T'@;
put 'cEd+OzFlejRmWzAvUzA+OVs7ZGIhRz5PdU4kZmxtd0dHcXF6fU1EcERFRXYsfE8oUkY4MHQ/fjpgNy9rK0tdU1dvOS8qXXo2JW5KIkl3cnMyMGVUXnchWmlaaFFtUmhKSTVpZDYuODB0JSE/a2N1IkM4cHddbzR+ISU0K05RPTZKaWZtNCtiNSlbdl5FZF4lbXA6X01dTSsuTz05SE15b3o0K19v'@;
put 'aiR4SF9WP3pueD9MSy9YXkhrKDMsPD9vJjhVdC5qJjhmcUx7Tm1NPU8mcTgmc0E2VmY0JTBwfXtPPUNjMTozQEg6aWBuaShPKkNETn0kKXVDSHRwRFZ1JGArYChqUEpWOUkqM0RifWp+X1FmKzJmYkJsfTpQZnlqMyFZelk2ZUpNfVo5bG9tQU0+R3duP1ghfCYvd2FqSzUxdXEuSmVNW35ZIkh5'@;
put 'b2BOezRuMTd+QyoyYDxEMyRSQlBfN2YvMUdVaC5WQ3dJNVBoLlhqWnF2K19ZX28/YGdYcG9AQ2FxQEomeixMWTheUyFKMT9oSDI5Q1t6TnZSPUAoJU10NTBWPFZyKjJGIXhidGE4ZVU+eDJGezt9JkRXcEZ1OFk1TF8sVkpASFI/JlJxc0A0cHszOFdJcjlERVQpdj45NCxmeHpFSWMoK2crO3lf'@;
put 'Qm0+X0ZlSFZfaEtJTT5IcklDOEVmOzNtd0wjbmlrJF5Ydz9Sc359fFtUcS8zcGtfdjBnVmE+VHAydDhORFBtTDNDNnVvezV1OSJeW2M1YFY4L0FtO0N7PGFJQmx0MnZzdXBidm5ffkJifTtoLDFLYXE9dmZnZkZLfihFV2c1MUBPZ0R6eVtAe3IqcGVbRF9WaigiIlAlc2R3WkxFYUUpemZwTVJY'@;
put 'TyU8IWJEUztufGRCeVFzczZvZmQrKThGOyJ4LCYwRTFvakBzMUxkeUF5S1FrPCw4YSQ9V1FrPlp9TS4vR1NOLEksamc6K20+enpONEFqeFJoL3U5aG9jcDg6aixsRmZFNHRlTTtBZ3xaS1F1Xlt4Wn5aPStHcSpTMStxQiwraDU4QytUNHxiM2hSOmt2QFFScUMzLjNZYVRLbGV7Lm5tdzJqPVFV'@;
put 'SjI4aFYkQkB9cXsoQGtxYFguP3suX2g+e11zTD41LFcxPHpUYG48fDFsYDhpUCkpMGJbWlFaXyN4Z2d5KEtZMiExcDNAOCNeYnM8NGx0QiJhUikiOGZLa182XSZmMVgoTHxhKHQ4e3wiJVhUOWhxLzMlYFpSc1lbTVJVT3NSKGBrYXtFO0RkfDtzMXFEeEY4OmhfKU1kWj9TUl4jdGtfRGpMLFAz'@;
put 'ZUg5LnNYOmBJZ0QiXj9FLFArYVpsfkRodFdJZnFLdzBCXmxmU3h0MV19VzY6eUZ3Jj90RzBHQUsoT0hQXSNaPiZlSClkPj5BeDgoWCR6PE5Nbz97SnloaV0uOzQ/PVJ3aSgzdUp2Zk5KPzAhcnp1L3VvdGY8YTdOIlNCWHJkWCIsQjJgZXNyYDtPfXMvIjhuVW5yXzwkO110bWxmekl0bzMifEBd'@;
put 'Zlt2QH1zZl9GMkQlZGpxWWQ4XXdqeEV4MzdfT3s0SDBoYEI6QF9wdFo+UUp4SjNSLCRQSUB6dntKNXNFXW9WTlswS0pAKGFmTmk1XVtscUBnd3NDKFgvQmk2VS9WUGZPSW9HV1Z1NWw8fCxsd1RAdH5WNGBpUl4+JXxHKVYmfFo+KHlJOUxWUFEwU3t7azojckxmdixKU3k6V25IITlBdWlkZ0Nw'@;
put 'dysvLm5kQUI8UDB2JD48QWooMncxTDcxTFlgbkprUT0qcE4pcUAkWXNHVF9FbksvdldZcSosLDV4TVRXbEI4QzM5XkdaPWhWdyVbLDMmO1taUkIzKTZDQDoqTGA4eVViYXlEQ106RilhOnl1aFN7XmJCMzdjRkRaaUReaGBJd3JhfEVJKUExT1g+Q0R+Vj1DJHVVNmpeIi5LbkIobHoyfCJrME1j'@;
put 'T3h2OWNYOCRVPTZ+b1pDelRwb3JNLi52WmghK0FTS0dTbW1ldGJDMCZXfUd7SHdpOUwvc0NMW3B7Y1B6XlFgSm0/aj4hXXFZUDRlOnRNRyt9LnArTD1+L0xtYSs6ZSM2eUppU0dnUlQsMElAXncvTE0lPU8sWyQuakZuYVYyeipkdTgyUjB7dV5neFpBcD1fWHkmPShuUC9oPXJvdmNyL2xDMWxP'@;
put 'U3gpUVkxOkw7IWBoOixhcTd7ZS5xVj5HYX5IMHRGXmw9bWgzVVhiYyF8XUc3ZjZTNGhZezV8eCQzSUVFcjAqcG5Yakc7IT9GK3tgJUtOWmg0JVZiOyJ7Iyt9SC5CanxYfnd9X2V7R0t3KHo5XzY5eEMyMXdDWXl5RSpkPW9qPXNpMlNZQykhJmF7XTxOTSJuRj95PnRKbzpYTT9pTVQxYn0sbVMz'@;
put 'UGkmPnBOM3JpMHFtUktlU299dmdeR1sxPGUycnVyZWAjJi9BODckXV9aRiVCJFBQd3FfMXNTJG46JU1vJWJDMCFAKmdjfn5aazQ9PEpkW3lUeGBXZlpfNnE8fSl7NkpLQnFPLi4+ZiteXmhiazNCRnYheypmcWVOMk5lW31NbSFsRHRZIzlwdzMxZyxmU21dcl5ZJSxCYkVmJWlaVVZ0YGc6LHBt'@;
put 'XTdOSi4zNHBdJFNOcHI/VTcvRkYjJiYsP11AaWN3UyJCJVQjPH5Le19ibGBkV0Y4TWdIbn1QKWtjRGA9PT5fXkQ4VyxTJjIyfHt2Xzh7ciJWYEwhWlp4eVpfL0M/LDg8NXg/OVU4am9VcD59U0p2ZmYoLytNL0osQD4xXnlqRHcpKVlQZEQhPldbM244Xz4pZDFNPmdiP1dtVmhwQFBlMjw8OjRU'@;
put 'Ump8L309e05ac3U0Z05zV1dEZG1sa1dEckhmJlYoK0dvRCg0TUkzXSZSKFRBI1ZAOHpgWlBxMTA8UXFjSmt7RTx1WS4xTilqNTtmLCRBYiRnNV8kRStudS9WKltBJWRsYTksKERHL3J6JTxZLzFTNzUjPEZuS2I1bjtGYk1LfD4vaWwqME9BTTpASykwRHA+M2tEP1FtXn47Rzt1YDldWzdCIm9V'@;
put 'SzZWUUUpQ2hKSShvcCNYeytzP2w2OGZzXW8+dz5FVCpRZF5XbXdCcFE/dW5Lfnl0RX1JKjRbZVAhIjA1OE51ZjVyWSFjbltxI2dWfHQjbF8rTzgjPzAxInohZmB4Mj4vLkFRR1I0V25oakJjTn0oVGszMkw6WCxdNl51P1t+MFRxfTRPSSYuLjcoUCkiaVF2SnhHX31dSkprYWBQOFZ4SUJMLi5H'@;
put 'Tm9dJGI8TlRzSlVOJVV1Ti5OX1VbZmRuWE49R0d9WFJLLGdwbS8mNDRxTWo2dmRqRG8mUlh4K3x3NmhUcnclPF43U2A1QjRCUFlqdHxxISVlOFNyeFg3Tz4ld2ZmMEVwPC9rV0t4Rm8wRUYwO2MzJlVbXUVqZXlUUVQ0fHQ4LigzXmFWVWU3SXwuTFBlITFhZlY5JTxxU1JMeFN4dlR5aH5CUWQi'@;
put 'K0c3SXApP0l4JDZ1ITRtX14jPyZLcXI+VHJNenYrS3k7bFFeNFQiSXRCOXQmSGJ3ZWoqUzRyNiU/K14jenspImQ9PmxKNWwpZjU1Tk46R3hLTi9OLExsdjBbPVg5QUh1REhpTipsNFZbM3RdZ1E/czNtSlMqdncoQzQwRGJHWmxUVz1ydmRra344L31mVzZEP0tgIj0jT3A0ZnxrMTBZWWFOJDMx'@;
put 'IkVzVGtYOUBBN3ZjV0V2LiJeQ2tXLndXNXltSl9oZlpvaWNNMiVpL29HO291V1Mqb0VsNT81QXU5MXdaRDVPanBfLykpY2wxcElNcUhnP2tkZTBkVl9daEFMVlhZWis5PS5ORXhFMHp0ZHl8eSYldCxlQGw+bVtKK1FpZW5kOEg1Rll6WlFYaTddb1tYVXE3bzdTMGMxWGd2JTgsRSN0Yl8pU0Vw'@;
put 'aE9MREVIO3ZuSnY7aER0aT1EMWNWLkleaFdgXzMqKnltSDtWUWw6Zk1oeDExcHo+VCFObkRDVFFJUy9XeHVPS3AzWnVSUGw0NSRDb1p+L2BANks5MGBMeEsvdyNMMClmbmlEWyV7T1hkQm1jOnFQNHJPVit2I2JSb15kdGA4RUJdYzVNTHdeaDpjLDkwQXVCYCM/T15UYVosRlpnSF08ZUsuI08o'@;
put 'MUpnfSFFbnJ1Z24qanNlIlJQXX5PWTMyI0pZVWguW09KVXhMfjlKbUMyZHtFclAsQDQ5RT4xOWlIMiZDYmpZRlJHNS9uYlFTVHU9Tk5wcXlNOHJHVTpxY0YhfHxPXyFAdWguIUBTaUNuNXtsfkl7JCFIO2BhSz4hNkVGcylIWDFZZmMmM0dBcnpDfXl6Ol10OjI1ayVObXJxK1JhczYzOU9NeSM4'@;
put 'dUR6XStZMVsrSFUsanRfRX48fiQuSEJRZzhbTCN0aHkrNzsmJFZpLy5ObGpwNjM8WHV0Rnp5cT9wRCN+bUpxSzp3PSV3cWlRfSMleHh0QTd6aTpJLml7S1VTcElvYDBAZnMoKDkqVzMwP2JjendfQmomIzM3SDlmJjpGN3dGOyxael98Y10jck1BWjpOYD0vOTpyWURLOmRSSWFMYTczbyRQbnw9'@;
put 'QGAhWzNoK3lkOmhyWkwqVCM2O0YzOHVgVD5hOCMoTj4leXcsKDF4MSxHNGopPH0vXmNKKGNNciNXK1hIfDR1cn1BVH1IKHRPSH5wZGBCfWRne0ZXY0Q4L21UZlliMUB7R3BZZEU5JSh1cFhIblpkUUokbmhyK2ZTPExBfCNtOkxtUVd+LE1mWlohMUFEfEJ3eDx5YFFKZn5FRE5MamZMPHt1eykl'@;
put 'K2dQLDE4YUVfSzwzSylKKU4rLiM1UTYvZWJYVmRCM3RqazImQkI7OnNFP1p5Wzl1PmtjZ0koLCZpXzUzakcxSGJUOyFlQ3QpXkRkc1k8LDpUSHZAP2UmVzpZVkx2UElBM1EmKXBlaVAmOHZnYEhOVHxFYU1GMGtiLFNxODkuSmlsPVpKa2s4LER2L2Z4REZTQmxRSS99bWxvKFF0Snp0S1UhfVgq'@;
put 'Qjh3KnVlVDFtbkExMWFKW2U+Sl9oK1c6RCQicmdOaGMyOVFYcVNNYDUhP3sweWdrS01FZEk8WjkhTCRXRDlRcFI5Ziwjd3FXfF8vXmpEXVRpdWR0KXEucUlTSV1ENTQzYkx+bEFpTmhRMnJgTFBzVUlMQ2N4M3RxTV41WkNfLl8iN1N3YGtkJnhrTUl+NExDIVRKJCZEIm9QcURXZDRBWzBUQEE+'@;
put 'QlNTbT44PmRbRWcicCEkNmV0QlRYSjVpcD5uSHlmfHJSO3ZzXW0sVUVoZ1t9LHwrU1I8MCN+QDBPQHNwTjFOM0w2d3lSXkBNVXRsRmBraCFIOyRDcDojLjk4MT9DUEhDKlhFQk5EZTcwOCk7RHZuRyMyX3k2O3VPTiFjQFkyQ3hVOHIwWzBTXnk/ZDs0K3JYQFNlOTQoRkpbIlRJUyxSVUtlTCxR'@;
put 'PEZnQH1qUWlmYkRLZmZ6RHpNc3plY0FoKmlCTWdhJUJkQnhdbEB9Q280ai57eX1ZNE99ZlQ8L2MlMl8razlpI19TfE9II0AzfFtyT0g/SXkqXzlUUk8wQ0pMUWVkZmlCfT5BOnkoV3JhYV9dP3QvZGdnbUtJMjl3PVl7dSo1NDlNZ2pNcFhRcnB4MERAOUxbOUBlbSlWWXZfeVJhfENrNGIjfF5Y'@;
put 'VHVjTSJxfilNXU8mcFheRDVOdFBpW15jJCNvSkxedyJDYHVpcmAkZkN5V2ZeTEQ6SlQjPDpjejBCeTxUajpxK0YkOkZxJFRjYXZTWWxxRCp0b0twOHNaR2kjUGFmWHhUSXw6QlI8TVJLfFhockM3ISFvKH0qU0tiayoyQGBWSTBXeF9+V2lCNyFLbTNsZ35gbjhRMHhJcHU7L2BRcmxDUUN4M15R'@;
put 'KmFOMz1gX1pLYX01SjkkNHc8ImBHMWFyQU8zS15RejBWNjhafkpOUlVePCtlPm5vVCZFYDp0eUNBcz5LVnpBaThCXW9hXlNEVklmJmBUU0kqZE5fa2NHIWAzUT9SQjNleSh+VCpkdmZhMGZ4VzRzYlU0LFtqQDVMLDYzdjApM1oiRFMlQUNmUCN4JGRZfWl1InUmSkckU2l+Jl5wQSNdVV15IWdT'@;
put 'RVd3MSM4Tl1oQkBxbS5KajQhKnYvZXBgO0YwIiZYY21NQ2s+ZjtDa1RwLH5JR3l9fFRsKGBVVHp5bXRgSnclZn5zPHhgRitrLlV4MWJmIToxW0ZfYi8oUiwhKzw9IVJ1e11uLnxHWlcvLigpUCtVdS9LREZlXUd8SEFrSVAqdkVoeFdta3Nndm5wXU1PSyMkX18lIUc9KTI+SU0pUklnNi4yfHVn'@;
put 'RkVdJUhjInA4cV5+QHZZbyZHXzAoNnRZels9JXQzZDBSTCtfZEFUIVBrb3Y5bWFyUz1CcixxZkhAWSJvVyo5Kn5seDpYZyl5eGpCSk4/fG97MzNNTXxaXV1PSFlhZWg0VXtWKGQmRzYxSEtsRHQsRj5+U0Y2Y191IXdKZW93ZEZnIiJoRyxueV9dZDZyW3cpP2YlPFlYaVF9UDcldnZRJUc9TXMk'@;
put 'THwzJXVYO19PO2xDISRAQDk9RThlaUdrOXQsQzpsOUQwYnw2IjVlUml7U0xEW2NJanIzeE4oaHM7QF4vYWspe3pOX1NNPlt9WGp3TUZHK3NedE15XUdpWlE7VHxaMnsrc31lK19xe2VpdUN3UWF2eX1bP31naUEqP0osUldUayhMMUMsJD4qdFJnTiRSVTlyOCNZPSs8MFMqPX4qNnQ1dC9VWmhD'@;
put 'Qno6YHklW30iSTxnRjF9eiUjOjM2bG9NYC9faUJvMnZXWkojVTMjN2FdRkkpYipGJS5FbU84aU5UT2cxLmhjMUBdV3ZoW1pKSGQkSUduKzs0LyIvc2Z+SUs7bV02L14sSV1Ba2EzZmY2XXkvfl0zcllAW09RVUpIYmFqblM3Y2NHO3l9VDwmJjkzOXdARWwzaWVzeElfP0N3K0hFVDheI1NLV2A3'@;
put 'KnJ1emoidnAsY1ZKJlI6Q3xeZyRHMExIViw2SnAkdEROUW1lPldHME4xLD4wRCEycUswSD16WUAicygyWWZCYiIjcFZFbGIzcVFDby9nJVp9Z210a3cucGV9WHVZdFkuTyE2fTdgXi5rWDg1Tl1kek9qN1g4Z0VURiI9UElFalZUKG82eXZDKjwucFc/RUJ5U3lxdEshZ31aUFo2L0UhTkRyRjk0'@;
put 'NV91Pzt8W3hmN3hKKVs4NlBqb28/QjlfNSZHUmxaWik5VXsrN0J+RF0iNTcrJWJPbCVsKmJaOUptSCEqfm05c2VndlorfSplQ0c7bilOJkBqTCYmKCg3UWEzTlJsOXFsOFVhek4sVz1IcXE0MHRZRTNVeCs1ez9wL2hWW2lMfmRhbDxHdXs9YFMwSXkzKzphOTIubk5YVi5hRWxDTShqJXNtYC9k'@;
put 'ZmNxXjtGbVNVWUteflYidGRkbmh9ITZQMH1nNyhfSzwjM2BuO0dgNWdVVjNlX1o7O210XyN6RkFgYWQ6dlFRUHk+cCYqa1lkTSRbUFpzY2EoVD1VJTQqKlBvfDhZKXRfVVJyMSRTe0ZrNEpqeXI2ITMvfCREVjJZZSVrcm09Wlp9Q2h0UlIuNi9EazsqTSM1SV5TZW1EUGReODAhL150WGRNNyJr'@;
put 'fkRHfCpTVWIzOSFnWCtyS3gxYGpHMTY7PEpERipJXl9SV0htWzdOYzI2cVVNaUBafnRvTVhrPE0zPFpZbmFzYDlwLm95NXBhbjZvTCVMfVBELmwoQD98YzNDOH5MITkkZWJBWCVOZFlha1UpNDdXOmdOM0hvMXxuU35kel9gXWFZYTp8TThhUmtDS35uKmxmPyQvMWp0NVteXiFWfixFVFAvSXZm'@;
put 'bHNGZ11gbkdGeCU/PTkxKUdKNzhCSiQ3NXQ4LmdjZEglOW0xYWp2N2IsQkRwdGp+U25VXUtveFROTy99M1lbPDMwbCspS3lPYkBnOTxkY2lsZCosM0d4blEoRGA1SlMrX2ZbITN8b2I5OGE9PCY8NEI+azZNbFg2WyxaanVGT1E5MGxfTkVjQlcse0o8e0tWP2JgTUtLLmx8dHNRY1Q5cXJjX044'@;
put 'NkJ8XztbanZxQzpDWCg3Kz1pa00+VW1hYDI5KSFYNyE3SSxQQWJIV1dKUDRofn5gTy4qTV9tSHo7RH0oaDxId2JOJDQlKzNTYCE2K1l7MGB7aHA3XT1JOFEhSHc3azRnZ1h2YTxOK3JBbk9sJmwvOGdvV2NkTH1GP2NzJjNNaz1CUjNUaU0zQ1tZQUApfi58d15XYlE3WUM0TW51IkwqPChxKGRm'@;
put 'Y0QzPlhlfDBsVWo3MWc6NDpHXSM9NldBKVdATHk7TntsRmRMKnd1KitOaT8qS1ZrZlBffTU3diMrWXRwVURVZVZaITtYPERkI35abUUuPTRRbkRlOzIkNVBtbEdJOEBSJGM+QFkvLFhbaD5pSCxIVzYkZlpBL0gyOW1ELnlpNiFyKFYvLnc2JVNZd1kpKWNlWzRWKmtSNzUhdU06ITJiMDZnZ1BE'@;
put 'Jns2Z1ZueWBnSDF6TyZ5VCkuTFguNlguMT98Oy5DKGg5dT8oMFlYL3xiVkghIXtxRUBWNzMoM3NeWHA5T3YyczlpYTRbLFtpNVJNOU1jM0NsSmZzT35hVnxHRFZ+SjQhQEVOJnMyVXNmWHhQX25ebjU0YjltWDIxWDxaNzNkR2JgRUReTHt+Q3EyQmpOdDk/YjpbbjsjWU02JClQW1BYXjBKLlpe'@;
put 'fF8hMldmUTFeKFlydkc3SzV1Sk8mQ3NudVVOPCNOQXA0aEEsdz9hYktqNyRvYG1zODRtKWRuO3IwYiFOZHQsYmoxMyNAYXc3OG4+Undpd2QzcyVFQ29MdCRHMyZ0QWo0bnRmbUIrbEk1JVh7a1FtRTBWamQkSiF0XVU5UUtUVnRCKl9fZ2ZzW2dUNXQ6aVV5WHs6UEAvbzFWdD1eSE5yYTBsRyJe'@;
put 'fWpJa3A+STJZbFNHKkdrflVicntRZyw7Wy4zaVcxOl0kQCMqb29mPDd1YHU7V293KSlidTIyWDltYkMlOmR8OGl8aFprakohJX0idnF0QXxuL3RWQnQ0QEl9KmB0ZyFvb3g1UWtXNUBwfD0+MS9qMzkqPVB8b2cvaDlJa0pBVl5SZ1MsPSwqNjBJKUVoVFcsM2xLLy9+LlN3ZiFAbzxbNnVmXmBf'@;
put 'S29tI0kzTmRsNl42dyI5OktqNGFSUDZaYzJUeVBAeFs1THZDKVFOeUB2TmNwMWRGVmo8Pnc6cW0xIVUxeGQ3Ln12NVI8dTYkKnNlbnRnXWUrLzhDeCZsdE9DW1dvPVR+Wi5xQm5GN2E6NSkmI0V8c2djIyh5TDF5cHROQmVpYylbTDNZZSo4aCNUZjRJVlUmREBzWmY6V1FreElVay4jJT9MfCpU'@;
put 'WTppbkp8I1tAdWFXfkVoIzQ7OT4vSlNiLnFmRDZFJmc+PWhqdDpCem9rcHJBOldhdk5rWzZXV08oMHRBe0NtKVkueSJsODUuP0pSeUwpailIWW5lY08oeW09NDUqNW5gTHtkb3VpOl0kbCo5ekpOM0FCTWNNNXp4Q2ptRnEsIntlVlFyU2NhNX5uZS9XN1RdO2AsNy5ScHx6WiolY1lXO01FPlta'@;
put 'fGFOP2trPm1hIlhhODNdWnhfNVp8P2Q5ZV9lQElZJWA5QXxKcXRtOUsrSUdwWEtGZCx5X2cuPk9MOjRlYVZNe3Y2VCNOWU4wWGNfYkB0WkAhMDAhcTFbd0VzUXVWTnByd0R1Rn03IW4uKCpgQFtuMURLNikodzVDZm9Valpsb2V8OSlRNV0vR1RvIzlFT1NTOiRdPG9VNTRHOkddfSJ6eC5fODUl'@;
put 'RU45QD15aWcpZCM8bk9xNiNXUTdzPVghLCkqQClgKVB4T0BAXmE9Ono2ZHwyQFIoYCYiZ3ZlMlNHbEUyJEtfeV9yXlBvSEkyNlk9WmhwaU1ZKlcjU25OL3RdR3YuME1xMjRMRilGKFBxSHFua0JGeT9kIm4sM3dFMHh9TTVOPlJCezV8aixHZFUqRCsoKjJ7VEc9QHdxKV5eWE5ROjVDYz4yOyM3'@;
put 'a147QER8ZXw8PEM+dzwpcF84QT1KWE5xMm50LFIiSSwrPjB6TzxYUVN1Ty99VENBTUVVakVfbzR9VFlUc2M1S3thW3xJVFNrfm1qT0ZENUBrXUJBdSp+ZU9BU3tMfV9oQnVZdGZ7K2BFNDopLHFRYi9KZTsxSDZtYnRySUd+Y0pzZEtnJDcuZmo3VCozbTAsTiVQS2E/cVM+NilCWG5sTjlRbiVI'@;
put 'S0JMMzV8KXJ3QkhaLjhidTxleDkrdSlpNVBSZWNoJVFmV0dPcW8rQTFvOXp+QDQ6eyZLMmlsQGFuLzw1bXBbWmdhaWY+YiMzS31maCM7RlE8SUwweyo7IUg9VUI1WEhxN2BkKmR7T1NaV2l9d1ZoeDgqPkQiX3AkcCNVL2dNZVouTVJMWW42XXpjSGRMNSsrZD01LGo/JGF9YWo5Qz4uVEptdEx9'@;
put 'VylxPUMrcUt3PzdJNzR2SCRud2hmRU4odUBdM25lUnFRa1JCMUAxVkZjRGEpQUxsRHVSN0lOaz9XZE1mPkZmPjRrfD5gQio8WipHVDk1TFNFcE0waG9xIStfZF9dKShWa1RERGlCNj9fVj1QKiQkRlQ7Wj1QTHFqXUFyfjxyNEJdUkpGV0tUYUNrd0phbXlAKXV7Z1k4Z35mSVFWbWhNTHpIOEtt'@;
put 'bFNaSFJwdCU7WDluXl5Zc146Qyo9R0kuVWdiLyhjKSxAWm9ddkAuYkhRTzdjdE4pOWdGdEo5U14lMVUuX3RsfCszNXkkPGdiM1M4L2JENSpEbCFeZHNgSiskWDdXUyUmdkJASFE8VSxpdks4cmRKNig5e1JxXjhtbVY8QE9HVUx4e3F7YEwiJHssX2N7em1+JFReXVt+WVdwQjh8Wi4/P2JvTHBx'@;
put 'WSErWlgjTy9tTF9bQn4hI19bUzNBV19vb3hXMzskXyxnT192azxKalJNOlIsP01zTThrMHJfPF4wIWhTezMxXVZ3ZCZ4eUw5UHJjZzFTdDkyK0NKWH11PFFWN0omSThKSVBBPy9lOl44eWFMZyJCfV95KDc8Lzs7QFZUJldsaFc9b3I7dCVOLHFQfl04UFkqYEB8QVojNX00Y2RFRlgsaExGfjxQ'@;
put 'ZWkobC5gZDJ+Vzt1NXt3ITRufjF9QFhwIShBVzA2XiVhYzxZWT4uR189OT0vRVtGbF0yZT1VVXV7TixlODYjRCVGZzc4MyRHYldYMzF7a1c5RFpVcEl6JVFnX2p5YkFdJDh2JGlwPyZpdXhjJmooPSZZX0duO2RweCFUYy5bXV08P1J8RVAoMGlGU0o9IX12SjhMVSshZFNffFtVbkIvN0FkYyIs'@;
put 'PFQ0OXQiQ2QxITNpbj85MXgsXyhXNzxlOV9Ec08rR1RDSUZOWV9nR1hlekFJT14+MmdVUykiaXRqKmBIZkNsQVE0IjRPendyP0ZxNEVtfW10WyhbLnxFZU5BUXE3Q281fDEoTW5edld6VSFrOFM6R25AeHQqR2xJWCJXUHJiOX4yampfQGByLiw+TE8weyNuPU5WcGFzQjNtLDg7Yjg6bCVCNEd0'@;
put 'QjM3WjZTeURwbHdFQEM0QnokK0JtSEkiVzpEJENCR3NOVmdJT05yPHwsdUd6PTl6WClyb2tzNiRmIUouR15lfjY4PTQsLn1NMzFEb2tHaG8sLncjJUd0cVQ1Q2ZHekJiUz8mKDxubD9QNz9EXWhqOSxvSXFFXXNzJjIvUVFVSiVgamphPigqfUFHZSVMNHY6QlJ+SF19NSZHckowQ2FQWGc7IytO'@;
put 'cj5+VkhrZCglUTpTKCVqL11jZXcrOVUxdHlWWzcsTGoyZlV+VF4+XUY+aTpOUzlbQndhX1YzWkdOMzxpWlBTXVZ8aG1fNz46WTg5VTZ7QCZ0LldWOWZqNW91Z0p2PlcuczBgOXZpKXx8QkEsXjExfXZGMFRpX05LUVszJiZxMnoiTmBmbCFLS0hwO09Ka3o6SzsiOUs3KXp6Jjoma251WDtRP3Ve'@;
put 'aUF3Rl4qInVbNTtQJCNaZS9vJWpYbSw3azQ+JHdVeX4iNVlFaG1YS3dXXyRoJSh9K1tXeHQ4QHAqfkcjT297eExvUE10e11kUHQvTmlEVVVmYn09ai90bEt6KzRWa35nJk9EWVh5d283TEJxWypAb2YpO1JRcE4qZGg4YShnWE87V0d+SCwlKlp5KlZBVikpTWtFanIlMkVjTSkyemBtNSZJUCJg'@;
put 'dXZWbyVAcEB8aDgjaUNFRCF8PjFqcEQiPDpLK0RUQTF6flVKVGQwOGBLaHU5fnBJQkBfQ01sa2lUO0UuY3VWRFRecGcwKUdAOlZnJS5Bel8wUkA4QDJEUFYkLnx6JHdIInZRYXE4TDx2S2hRQWA6cjF3ND4oeGwzdWd6MzAuZ3I9TW8sOEtoKXt6PXAxRDlOKmIkQWk2dE07ZXYpWVd7XTdfdmFZ'@;
put 'fT9YfHNtWFtwSjdvW2tvdEpTQnphMHRAcGFrfDtqXlNdJGRSOWNtJFE+a3FBKlU1QTt8b3NFS0d1Y05oel5NWHpiK0xufExwXVh+Y2xrKENiO2J0aE98KDhzfnZ+ZyJmRlZTcF1sJi91dDxpKkk/Tlp4IklDMWJqclFIeHx5OiI9XXlTTDNfbFVjL2dkXyxOajw7S3YxXWZlM2lyeW8oZlFFYXFB'@;
put 'JkhwYVhRR31lXiFFW3p6TWBNJlNpfERreUghViYjUjFIbXoiKEgkSTxqeSo9RnBkOSlGQm96UnQoMGVnQyNCZEo7fTJzRUY5SSNFQX1xIyV7RENmZ3Mlb2RRK2dMVUhMUV4/bnExT3t5KjdnP1UlU2ZHbUFIX1B0dzZjaXhjP2RJO2NLdjlNMEhweFVpYSJicnJHITRmOjl6Lk06R3U9W1ptIllt'@;
put 'M2MleHdUZ0NhQ0VJfl5xWUExbC5MVW5FMmtbKiFUZWdSP01IWSthfE1iKTpHIi9sM1N6OlQjOzd7I35hQVBwbiI4JmJkWCwmdj1YMWI3enN2OmQ2UHtddHZqRDJRQm1dfmJadiEoQWZKO3J+MUVaTCo2YE9fRV5mMXoqd1F5eXg/MjRlWTI/LCF7WS9QQk5iZ0NHZiZzKG9qMz1RU3l0Jjxbd1Ai'@;
put 'TUsmSkY8SlBuYzdlZnFtaUBafHE2W0I7RnZMPVRTYnJWLyI2bCNNVj5mKiNYPE8lX2cpKChbKVN1ODpeRH03cFpoSSJ1dFNhaWldRnQiUl02QXV3UjpHamE1JkQ2UUhgdE0oLis9fkBeXmpFe3o3bjJhXURkQkV8IUdYXUlTNj44Sk5NezZNPUk9dyVJPFVDOE0sfCxGZGQ8eDt5Y0I0SDcyLyt5'@;
put 'fSVjQnVOVzNNJV1TVypIVDBpMEduLH1Ue2cpTT9oX3ZzPUNKXVZ6PkxvRGpDV2NfKnwjUS9XQT5NP2FNJSpBMzlGWEtMeUY9Lj0kVC8oJmgkV1RwQlNXMTVnPVl3Q3JIN0lnX24wbXZsTV1OYjNzRkMqYW0mcGp0KWdoYFFUb2NVMUdea3smc0VNQVArTTFbe1Z8Zjh4cEdLP3FHV3Q6WX5IPzsr'@;
put 'U2lLW0gmREh0SktwZkNvUjc8I09qRzd+YGd3KihmTWswWUo6IkdUVnpNYyQ6a1E+Ull0X0QxNTkxezBCL1pIejdXJTU/P2VOQC41T2U1cTEmWUB2M0pIQTkhQF9ULHlBX0RmJHxVeEVaLk8yLE00W0lOYyZKN1sxYyR+c2p7Y0tuTmYrb2dPOEJRNShAJEU3JTVGdHxyY2A5ImJRe2YxakRuKn5o'@;
put 'bEl2R3c3WiQ1YHY6fEYlbWpqKF1PLitFNVpYIWF5PTxQJjJAcVBeZUpPKFdteGNfIWkoSTp5YGFdMWVEMkgjSzhZWFZmQ3t4VUx2OmlHMDdSbHlMKDNRWFlzI1AuQ2Jdb3coZHs4X0YuZ1pLbisxYjQmIiZleXJVRHBFdl5Yc1poWk4vM2t1c1J7ej57NUQqaUxgTDRsXVRlKjU6OUpofDdtbXhV'@;
put 'bWIpRmhSP00iLGM9W1h3aUtYM1ZITHJoS0FwZFpLez85PG4pQkx4OUZAZnJAd0xsMXgrMyskR0phJHthaiN7T3o/NVhnaHorRigpdWk6cSJNP1NrKC4kWTZeMFhSdDg3eWJsTzxoQSNwI0ZtcT5gNGVEek5ibyQqInlUJVslL1NedmJdeUR+ZTlVOF9bPXhVMFk1Ji4+Wi9aSXhhZnQhNUwqO35d'@;
put 'ZyReZyUlWTh1S11jaDg0cWs+TGd7bGQyTysscCNLOn1SMmVPLkd7aCZoS1hiZUNaej05b3FLNS8/PERJciE5NlZCPSQrQk92diwseGImS2YhI213IjtRXnVweiJ+R30oSWN4PjsiVGZSa2ZqIWY/ZT06YkZPIi84M3VwdmwwTEp5S0dJOnN6TFVaPTNvR0smTmNCZFEjeSEmQllYVHJGbX1lUV83'@;
put 'L000ZXpCLGg4Q0tYSSZCQCZUYGtvNGJIeU14WEE1fmVdWFJgfjdrNSI+RkkhakZec2hOVn5UWEcrQE13cE8wfWc2RD55Z3pjR0R5LH1ZNDhRZXQubnFibFJ7SXV+LzZSWFNIZ15SLzNQeHtic3h5Y1Y8XTNrVHV8aD8uXTpSNUJpPEc+LFRiVDZEKHlqeW1+IyhgJi5wYFlyaUtaQyImNDdGbFBT'@;
put 'JEMhTVM5fmtyJWBhWSxJVz1OQzdvN1UqTWJLWjdBY2BLV0JtIz9xZFNiTFlpP3UrXT0hV0pmVj53Lj9pN0hHNz4lR343UmE/S2VYbHU4PFA0R1YvKWl4U1A+e254emtGd217PS5hTSlATW8waVMqZTxMUFFeUUxRazBhJWRFR0ZtSVs2QUc8KnpQfGVJRk1wVjBLbms3Wkwkbyo4KFFsTElkaSpk'@;
put 'cXtZeDUjbGlIMHcoKXxiNGRefCtKPStSalZaalNGTXgwY2w8OzlxX1QuWG5RKG5uSlFqTGxHXlpaTm1+XnNvXjxON0dzITsmYy9jZ3pgZDZ7NCpleig7PTU0NGl0Mi4/JUQ/ZmFiKDxfWEtYNDE0XmAhSWZhXkh7THphb2Mhd1Y+K0hPVyY7aCZ3TF0vYUo8dUc1TChUcHZFO05FaVU/Zk4hYig0'@;
put 'Ik1BLH5wT2s1R0BLIkpudzsqTCJtRXYzVlQ5XkYiWUJmWV1Qdy8rMztZM2BGPl5nQUAvXTowX1ZAMlFmUnxhN11UNXlMITJ9UXM/Ml56TTNrSGNuNTRQRXdvVlBAblBOcFZALF5MUiM6djJlYW5URl9nPUdKbF9+b2w9KHRUYHBUZTRxSWtYbVpMdSt0UVVNakpFNVp8U2sjTkx5Lkt1RldTKEBW'@;
put 'ZSFSYHBUPSpyI2R8bEpJTlhHQnRqZnpQVD4/LnU6enlzR0lGK2VBckg7Kz46UHBIO152IiNzTEVwPjska1k/Xig1YilzdUI9KSw0TDBeQ258TiZrPHt4eEw/RVJgTS52eDpjVjE2bC8sL3VgJiRSTEJwNz14d1goUDZvfnkrSDg/VD5dZ3JIfCRYfklHOzRsPT8yUGBlX29DQSI9WVpNYC4mU0p+'@;
put 'RXBzS3UrQl5rY0FwXXdoVDpKVHdBOTB9OUJWazBnRXcmQihuNV4wOlNLUTswPTc2X0V+KHJscHJJQE1Ga0ViN0hLVX5MaVJqd0BxQF5bd1YyWkY4T0c6dFg0YkxzVSkpPlZ2enJSd0lXc0JOT2lNal5gLFp6Tjw+T0ReOihjI1U6dXdKeiZ3MD94ekwpbldHXl1sW1ZjdG44TThJIXc3XSRlW1Rn'@;
put 'NEwpb3ZOSFk7dmtuZkgpTH0iVzNDWXYvRnEvPH13RUlfJGc8YyZSOUw5aHNEJnM/YVNWQnU0KnxfQDdpW1lrOWtNR2g0SERpY29YVUpNfnt9VFM3S1QwOHRtOHlrVjhfdDtUSVRLJVQiLkZseW0+aCZfMGRwKUl7KSVxe1IkP1tYQWhSakBHTFMwPVZGXjZRMyZsO0hCaWkueG9IXXxXMzpTYFFH'@;
put 'RnVhJCk9RWtYdHVeME9HJT1MSUlTRSxdLi88d09NRjJYJit9T1RkWkw2ZHZLO1FqLyVnTix9cFNfPkIkOiY3JGlUPm4qdUBmWWY1MjxPaFdIWyRKXU5FXUJVcU8qTFsyPWhUS3Jdd19hZzRLVikxRylBVyhlfiVtc19PJV4yT2YmO1BENVE5PFkpV2oxNmRqMVAwbWRpPFJDVy5HaWhheXFhXn5K'@;
put 'dmVkbiR8PU15NkxaSFE1KXtOdT1nZSNwcXhQVF5iLCE6MTViKHlAXWNgZGlRNEdvOVVHXzF2RE9wQ2B5eyFrYEZ7T1pVL18xVXl5WFNubHhRX108O2BoZiNVMTheTTJbWkFYeD1aa3A7OUE3IyYsKnZiaVplbUIxV1t3Z2txUEA4fGdwbWhnVzYzI19LL2dlRTNBYWt7ZjVaPm5vSWFHWVRJUls1'@;
put 'SCZXeXgiNz15Uk1rMkJHMlZqanA6NUtWMjdRRmtJXUdte1J2PWxmcU1RYzIjZkZPcilGeWNpMWFTYCRMb28sPltXflVJaCM3bDB2enhPIlVjTVFYSkIsKVFBJjR5ZTM6JCUhQ1RTS2Q1am4zXmk8ZEFFWk9MPSpGOWFBQ31feXAmVmxoQCQrLGM1QCguUzAjL2h1Qj81WUNCUFFGci8heF4pPWBn'@;
put 'OyR+I1lvXnJpS159KyE/dF9rNnFbMnVQIXpwREtUSGhlfGFvLFs2bl9+PmUlRU1CUFh0cngkcnltYHAqPTwyRU1hS3BgTz1fS2dgSERNfEB4REhneSR+JGJyZnV4VTNiKVJ3W2R2blpHfCtsaU05VUh6LldmVihtSDoqX1dYRGFTTnxFcU5JSz95JEFebzExNlJrQE1zSikiO1ZiYyR+KWsyfGpa'@;
put 'UihEOTtIa2E2Ky8uMEY2ZyR5ak8ydzJDZyxfKXpPYlM2L10+NlJ2UF8vR0dWeXYhTjgoI0Y+JFVgJjg8fkhiYFlIT1YldEEvdXxJNG8va1ljOzdiMXQlI2czMWg+QjpMPTd6VEE1Knl2SXZTbHIvc2AwQy48L2F0JjVGNGZgLztiJismfGg5RmVjT0RKZU5YdGV4PUMxT3NmIjtPP3g2RnhlOE1a'@;
put 'QXMoRFcpWUJxLlc6QyY/PDJkNiVwP148I09Bd0F8L1FwVDR6RnAlJnd5MV0kIzJuY1c5Q3txdnlOL0MxTkMqLyw0SWNBR3tYTFlRfVMvQ2ZEWX5qWjVTa1R5WlUkdlZmbktTIyR+Vn5KSzZQZ21UWGUyMlReNStLUlM9LmJAd0dXIi9ad3hKbVFSWGZLYWNiV3ZQJShbcC9MYWZgUihBcEFWOy42'@;
put 'NlFvVX57blVCL3BoKEx7M2pGY3gudmRnTnFQZTIpNHVvN21QJV5rXm19c2UsNlZLJlV6O0I5ZlBDZWEwRF52c2ZeUEVgfUBuNltsempNYkJTOUA7RGRtJWIseWJrMFBeZXc7O00kVmRuW09dTj1eXl9wO0ZreCRTQDMid1dRUmMjO1ZEWjB9Z1BhO3pQSllMd2dFdkx9Q3shR3BJXXpJQ1FlYTB2'@;
put 'TG1pQ2VQLiV+K11LbXt7Wn48Kzo+cDtGSigjMUIkVzxmI0N5d15rW2prZTB2N0ZNN2BERnJXdFhlKj4kc3JJVTFoT2dhNH5PZkV2O30mLzQ0WGxyaiV8InBweyR3XUlEc314Kl4yV3BnVnYkfnVCKjtJQ0IpZT5bQzRqR1BbUmZsb1RkWVBPVWk9VmdvJDB9TUMvQS9Rd2ByRGV2UUs7Mj57WCtY'@;
put 'eUxiSUFxbC5vYE92ZXAkd21bPSNbfSFgUCo4KS52WCl6YCU+XiM1KFhePixFWjAzNCV3M29wJnExYT12KVlHNWJsLF9IU1NSUlZDPE4sIU40RzheZzV+VUVNJTVvcWcxZkdwSSNgMiNZZnMmPCo/PEBmcj55Tnh+YjAlT3pKUElMVGlBQ24zRyI7alRKZ2IwRXllYSpUcHR5ekJAQ3ZbO3hvQk1X'@;
put 'bHY/UCNdeFBlI1U3UnUmMlJZfWQqZSM1QVFYWz4mW3RdL2cxTHpzaks/bCMzX3NYP0AlTSk/UUxXbDpeIWZabX4qTFtxT2F3ZEw2ZlNSUy5GL15ybihKaF9zRV5Icyo1UT59TXtRfSM+SXxDeU1HbD1rKGFMamh9e1srLFZJXTkoaCIiNSJkVj9lKnBUIUUlTytgKn4jRWNYJXx0RXZeZlFwLktk'@;
put 'fDc2KklxbnpaUDxdJUdobHBjWSk9Ll5ZKzRNITpeR3cpLCtxRnk/fSUkTisiNTFBd3BzQ0B2OnlAayM/NSw2bEEyIjdfIy8oKVRLWHRsUTFZdWMrL0UpLDgzNjBOcllILlBBJnBRJSFtenRRNnhtK3Qrclt4TzUpfD9CfjhYMmFfWUx3IXhHYXo1NntuT3ByTVlmJGYvb3VLZ3ExM3V4O1VUVD9A'@;
put 'Xj4ybk5aNnU2Z241WUZ1QC4/VU51anFxW3osMH5hbV9RYmRsYlQ/WjxnUGd6ayV0MW1KN0RQZ08rMGVKRnM9WDBgS0olbFpyN3V5KSFtOCZOYnxJRVs+cDlENzRdZCVPOHJpTUVNZG5+c300V0JzRDA0dXlaOFVZcEZvR2UvOlJOYFN5KF5oWWtoSkYscEopYD9ESkxUTClAY0dJKS9KeTo6TnBE'@;
put 'Sm5SW3V9aFJtKG47PlEoK2A4bWBUN3c0TDR7Q2JuOWNoN0YlM113Szs+ND5PQ1M2eFBiYnMuMk0uSWRvTTE3ZjkhQkw4Plo/OEsxJk4+TyV9XmlNPFNTM0Z2Y15ebTdNKEB4JldwZyssNyVJTTtXU01wUyF8MiZdK09PV2BIfDI/b0dzNS8oNz1FSUpAPmBFbmRzfkpIIyo8fVB9PCpHPlNNWUxE'@;
put 'I2c6eTpMfjAlfGw7fmN3UV1AZzhSQj9MPXgqaG5MOV1oJmQqZURPJW5vfDRWYUQiRUA3SU9DWTI9ZHshO0VlRyQ/MDw4a0lrfC86bGAxITxNNHxgRCFrfD5hRXZ6cihjKHRCIjBUfUV7WERITFV6bm1pSWU+KFE+VlVqaEpgUnJ6Qmp8dGxDQ2NCSmxSNU4kfCsydTJrZThRUWZlT0pJQ2M3LmE5'@;
put 'bHNTdnRiTkgrPT1ieT9aLyp+PDw6MTY5YVhGJUV4NGpuWlVRMnhkdzxkVEdpeE5+Vj0+WiFGWEcpNVlYPl95L0VFO3U2cCJ2YGJGQHMhSlp0LC4/L3hDVVEsKSZ+JWJFUUIjaWlKLytMZl0kcDk2R2gzPzR6TSomYWhzTTBIR0V9VTE6IWtJbCgseTVfckZjVGlDKF94RGNpSSI7KlojKDA0V0FY'@;
put 'OUNmKlk5aCZCO0leb3FNLkc5SzZWMUl4TX5yRV03WiJ8ODxESHRRSDQmaj5jQUR2QE57aF5IP0NHKyssam5SKk1lKjlvMzVbciY+XVdpSz4qYTxeUlFIMUJ0NzRwOWtkbndPZWRufHU6fWghTDpZT0dNXz9NUU8+Km1ecytiXkRyWT81TDdxcyh6dkhDUVhHQ3E7QWVhfUgjfTsoLmNxVD1EXTRA'@;
put 'MzZDYXtnRjl9MENHWHIzQUkrXnVNbjpEaUJ5SW9rbmVFUzBTZCljc2tFZmgiNVhgVzVbNGtnZUw3PUglL0EsSFpudVBzT1NGbl1OYm9iYm9GZldqPyUyKTVXQUBVZkxfOClWXmFraFQ7ZGhpb3s+RjI2ZUk6czJIbntGLG1hY1VwRV5xO3RSNz1UeUMickJ7bkB7RUUmQFhkYll4aD45P0lsXSF8'@;
put 'V01YNjpqMzAuTTA9ZypbVT0sKEx+KTZdSkQ2aSx7ZDhGUn1gTXoyUFJnalVNJGsmYmNaKm9DRilVWyY6WyRUfWVxXUB8ZGokaDA/Xk1vNUt2UmxhZmNzRiVCOCkoKUNzTWp6TDE0L1huPjczI0Naey9zPCxzYkw+T2NxKitqOEZdR3clIm1lZCQrNGxEeTwkRy8jamJCckV1P31zMHV9RCQqbn1L'@;
put 'Km56USF8PHkxP0ZLPklwaiU1eEUzYTJIZ0gmJkB3ST8lclFLOnBnJEBfRSNWJTdiJSIpVmYuKmleT2EuLip5aFN8aW1zX3NJej9sbF9CRzNvYWt0YWVzWSlKU3ZkeGN5IkoiRDwrO11dekBYZHlPRW15eTwlV2duc1BQW0QjQm4pUmw3JHY5eC96K0AxRGV6WERFUHVue1JHPWF4ayRdWGAodH01'@;
put 'ZWB1P1ssTVolTzVBO3B3dyZpNX5zJjEpakkyc1pTQnJ3RS9TQ150S2dFaDVPQWdecWs4eltVV0BGY3QyOG1tP11pXVhzPSNzdjduRV1semEvT1s+O0RFInNCKzh6OUBIYFJfSHZTXThjUndTYG1OXTlma3hgTmJZVlM1Kk5SYUQ6XUcuM3RZLkZgZylgfHN2RHxtXz9zPmVMWVUpfGtmW1p6TGdO'@;
put 'ZGwiK30vbjlsY08+OmgqKlZiNmkpXThAZlA4MEBGPX5qZnNMZ2QjUG8vRVtaSjNEZUwmJHZZYyVZXSRwYW9yMTs5YlNOXXpBZWw+MmF8VThsRmldb25kLHlXNUI4VjMuODxxYjpIJno8SF9MUTFPUjAveHE1KGBxYHJAIT4uWlFrYjVKSzJGWX5HUFM/QzE2fGNwVz0oLG5tcHQ8dE0kJGFeKnAq'@;
put 'PUAxRlFSVHRNSHoxVWxvYGoxaHlVPDtZJT1sXntOJFVwbmVGa01ofjQoeVRFQWZseC5OJFV9SDlNTndwdj9+JHR5ITxnKEQhNH46a3EwRSltNkt+ajloSzNlRjEwOnkmeD1dRkl6YU9VandFQ0xzWGlYW0gzbEJ7LENzMWVTSDd+Q2Z+KD14YHVMZnBQN3k7RitUPT0/Tzp4Z3ByN2VxQXN2LmZC'@;
put 'KyNXJVAveDdmdik7ImE9WnA/NFVtajJQfW59PDZ6OXRQSnt4Ozo9LDg7UjhPZEI0eSxBTnR4fnFzZmxCQjBPTTdXYHMxJUxkZjlhcSt7bzJGOH1qVXdrXmJ0cGhoY15bUXlMM3pCPHZJQ0ddVDY/PDtwKWNZbjQzNGt0ZVdAZ0w1PElTQn5MKkVxQUo0RjMuJl0rPTRqVG1WZzslZiE0fm15WG1s'@;
put 'T3JKfUdDdCRhakY0L0AkRVFqPGFwSC49fiorZyUrQykwWW4uVS5rQlZPaXh4NjxMbGpwTyshWUNPYFFQTUQ2KHFXNUFnJSN9ZyZ0YzAsUlY+UmhmX31OLE4jNU9VJUY4Z2Y4VmNIZGV5XmRfS1dCJnZzYiJWfV1hbzQ8ZVVfandrTVhXTy8vW2lvT3dNaTltbkBdWStpWFc1fSNbW21ZNVJ2Y3R1'@;
put 'PWZodVZTLFJufWhjejwrWSs2d25FUjEsMDVraDE9SC9xIUxabjpZJXo4JSJ2bkBIPVFaMWVgUUtWRGYsRU4+cSxyJXNxSUNlTi5xRWJqX2Z1UWo+RTArWU9SZ2tmSTY7aGpuN2xzYj9ZLlQ1PTl1Q2ZIQ29mIXhmUVp1MDYzTDR7IVdZM3ZbKV08RjpvRj1AYGZsJXsuWk83JXZMOzJWZzxYPW02'@;
put 'OVRHQzgzdFRlZzMuaipDRS8qOkx0Y1VtN0tfY1ZjT1khIzUraFR5ZnlyZWhBS2RDOTprcWNSIUJfd1QkdCQ+UEUiPFcqPTlSXTVOY2FffStnUGAwVHs0R10hInR8d0c1V0VNaTIpUkJAZWFpOmRxKVlNT3EsNUw9RzlCd0YwU2I4WFk4JXlZXXRNeDptJEYjU2xHNj1QR049UXIqImFYKHwjU0o5'@;
put 'PWBvQHJnUHlVSE5VOSVwT1VrSk5HI0RFemlZMkVnOnBDZitqaVVCMm1zOFMpW15FcTY1TDovMEJFdk1VODwxVF04Lm50TVM4JX55YF9jYzkzOlU8NkUkJWVtZVcpcT1fNzNPJTUlallBYltsZHA7KF1uRDlxey84Imx9UXQpLlBwZyt7eV13NX10ZkIsVWVrJmEzSW1MfjRxL21BJD90U2dNQjc9'@;
put 'RjFfWFVMMEdsTkcwPmAkIXdqOSg+UlRMIkhmYFNWWX18X2Fld05ge2svfDBDdUtPWTUoPW1aVmMxXWZQUFBfSipyaGBTcXcyKU4hTHNJPjdaRjo9dEJodytaSGtXUyJ9Jl5eT3w4U0JJOXd3YU1ldyZncnN+P1BEXnZ4ZSxnXTxLZz9dcVJ3WSlWcnlbMyIpazd8ciRLSi9xUUh6bGRgKjI/aChM'@;
put 'Yn19MH18Sy5yMWcweytgL0JQJCpiSFhgMWMsNzo/QXYweH1nfC5vbUd2Jjp0fk14cSFyZVlZeSRSMkZLRDYxODJIRl86Qm4vbCF9dF9ZIXF5THdnSCtBbEFoZHw3KT0kazdvO3hjJH1bJkIuQmwobUZpaW51NXxZLlJmYFBiR3dXeEJMYmZxZzR1RkZffkw9VVlzVCEwN2VqNFohQS9JY29lUGVM'@;
put 'Mjx+RDtIcjBrWTs5fFhCQSMjTmJ5NDw3XXQvPShacmxRLmJLOis4dDR7OSwjYkhLMlhyWzBlc2hmSXpgJHBoT0ZaPUZadkkjPDNkTGMldD1yPTpkTFIpWm0vWnljc3YiUk47alg3Om9JVklUMU4oRUszLjlJVyI5RF8+NEk1W0FnQnB1Jk5zW0NYYTJmY0csWnlPKj1PRSlmfktsXkh6d3hQN09T'@;
put 'XnJ1NWxNYm0ybDBsWHRRPlcmND17ZiI9XypTYG1iPzt7djI3VjpJJlR5YTJFWFk/eTJaR2I+I3pUM3swaFhgZllTcGk2RFp5bkNkcFVEZTNTNigpQ1RzL3h7YilKNEYvTCpWZk5YX04mSitsKT9TKmp9PCpOV2g4Vy9edGcuVkY/b0pGJjs6e1VMPHEodiw7S01qZyosI3dRPkJvP05KQ0MlSWxx'@;
put 'cHJbOV5FLkJhO1NPe2tLSyxXaXlhXjNoL1NdSVRkd21nbjomLHd4aHg0WjwucjJmYFh4XSM1LGZMZ3dKZTI3e2k/dT89QW9gOT1idzBIV3FjXkhkbCMsQEUvT0BOTms+SEBbPTRVaWNDIXhsNn4peClpQmp0Q0MiZ1k2InoodVgwKWNEOk8qenl0Njs+MEFRVFtQXmYiJSNIcHwpTWUrJWdFJkQy'@;
put 'b3xjLDo6RiU7Nj5xJnAoWVpxXlRdK0ckTFcjaEExVEwxanxjVEgjUXt1WDhsNW17Wk5aW2Q8TlhAPGh2WmN1LCI7UygwcXlwMiVdMiJ9TDZHRnArbF5FX0JLVldkWG4xYnBFWTtJYVFZbGRLOUBMczRxYj1QWitDJXVQVF85ak06PkxRWnksX1lLJnl0VzBaSUI+dDNaXS83UUs5MylkO1heOFVu'@;
put 'b1RCNDklTCZFeXFHNmQ2N3NsUCQlLlBFTjBvTC4mfj8jS1JxYVMyZHhrZ3dnSnVDR2tfIXluOlc3OSxCRFImYVQwVnhDYXh0aUgiXkY8MHFldEl+LDhCKnc1d20ydVpjUyZVYTQxWWlrSjFUXiErUXNQK3xrWX5RWll+R1B6LmhZVzFsMj4ybXNALjp2aiw/Ny50OmE/RGcwITRQNVJYcEI3Oz8y'@;
put 'MWY/K1lUZ1tFelpzOyRlREBOSCxUalkpdzBXOWBgYV52aTlmMUgjaltZY0k5Wjx5ZFI1X2hXfkdiaVQxMERBUCFdV3E6K1ZQOE9lJCl0NU02TjtCLygkV0kpJlhXdztdKVhlNS9dPEdiUC9qWyFuPU91ayJQRHNFR2NFNXRtOnorZ1E6Y2tTTWt4eUlAXiNOdk4oJlA3JXIsTyE6Yj5YNlBHQFAk'@;
put 'WlN1N0VnYGdaKFk2N2hHeF43Nmd4R2dJKmF8LGZLZS83RmdnaS9jPSNQWHZpdyo7a3NvVDpLYlQvdiFsaTtMbTI+eGhhIU0+Wi9Jbzp6WDFQPnNrJmVbbTZ5eTguRCxjNTldVHpTZFN2YlolXy5SPSp7KHAuajNWdUUzUVRiU1N2fTA0XyVAI3MvQ0c8Q2hTXVRPPSZiR0shUz5lQU19NiUwQjJ6'@;
put 'Nzx+OS5NNk9UfSEzXnNfM1F3LytJJVYlLHtHaWB3fEV6Yn42MngobypAZDJZOmM6K3IxSDRuQGFKRkcvTnRCR2dFTGlVOEdOeSQiYW4vJlJHKVdAWURoUlM/Z0pLUV0+WWpsJntaJjpBTUMiZUxQYVRWKkYzSGRgZ1haP2dEY01ZRWtYVz9tbWdUfGN8TmN4XzI9ek9IL1QhM1JZZXtxbmVZNzNo'@;
put 'KmVaRDoyOEEvIzZCL0xDQ3J0XW1iIiYiQzlDbUBBSSFbZzo0fERaWj9ddkxyUE9xMzI2JllNITh1KFI5UmFqdUd0WXlOWihWLzoqOCxZd1MxbTk4M349ak5He1BNSCYpOyI6WTIraH43QzMpPHNeTmc3a3Z+U0pFak8vYzVfQndDJFF3PTRMVDklbTt0RUZCTV5fUktOXnIiWCsyQlZjKjVwQlgp'@;
put 'bHpPKU0mRHZmcDRvdys2dEooXVFGaDBkbXZ+fGtpbX09ejluUD1faCtUWThOYF0oYS5mSSlhVllGQ2t6WjI3UmleLzpaSXxLQGolSClHeH5wLlZMS29dMTJ1Y3pDUlReOFFIaVt1ZVU1Y3czaj46djpVblVDfDo9L198bHU+MkQ9YzJxZXBibDspcjdabktTdndMRT04YkdqZUBTXWcibihSIl54'@;
put 'QThdKGtVOkVYenpET31aRCwvIyFfaWphJWImeiRuNHRiOzAmVSRVdj05fWlUIyhqZFdjbEw8KFMqUWsyJi5mJlJzSkgvNTo8ZVdpRVM4fVJhP1JqOW0kOX1bYzBsSUUmckQjdyFeRFkhR31LXllKXyhNR3lebnJleDZKcSNwMTxnYTJKRGpQbjQ/X1JVNyV0cDNNbjZEXnNvX3hQNFA2akh0fGA6'@;
put 'LE9kazIuTEtbVDpMXi5SSyo+Xkl+bXF7XnpCPjd4QVZwb1Q2S0k8YUlseDFGOzFULDAsclpoQnE5cj9yPFYoUm19Lko0aGp8fj8/bUx+Xnk8UWw8RjFSKH1MRnNpUEMjcTQ9VTRtbFJONHJ0dHgmNlNWMGleQDE0Vm1jcHgxRTdqKnlWYXQwKzd4IU9VK258bipmTTEjeFlPWSlpMWNHeH0vVCV8'@;
put 'Mm98O0BsfngxbHBCQmRhT0tzcG0+dDU1UVVVRzhgRjU7RXh2LiUrbTBAVkZiPFV2Qjc6OS5kSmVdcVoyckhpaUdQS2FKJGplaTghW1d+VXd6WHlmXkRHWD5BSj8pVHhZYE9zTWdyW3o/fVQ8fl15RUdjIjkkPz53TDNOSW5rK2JNYDR+JTU6IiFRSEJ1bWBgcStBYSV9YmU4N2EoNSlMNGpzTy47'@;
put 'VnRBbV1xWilWck48dSxfOWFmYVosQm5GbTRwRFBVbTJNMFJXWU93aCR2ezhXPj5yKGBDOk5PUmo/Plk9aGp0K3wldztFQDtlbzsjOHVvU1hjPTlUfVd6ZVohay5ZcyJRNTVBeHhjdWZUPG8zIlZ3fGI2fFU6TDtbbyN3Wmh7Mlg2RDA1RT55Lk06LDwoNGA1ZWJBODpUJExyQCUqXjFCX1JSbys5'@;
put 'TFZdeThDc1Jqek54SnYyanxqRmgkT2hfeCx2RnM7UVAzOiYkdGUuWS5oSl82ZFg7YkN5Wm8sb0xraU0wXSJHTSs4Wnoyc2BXfTozcG9qS1RTRUMlcWxPakk0dGxvKztKLnQpcyMkVk5SOigxZmAveUBFNjlEJVc2cWpqfWt2VGs6XkF7Vj9rT0csY2E9aWlsN3J3VjVmSkM9eHcucT58c21dbSpa'@;
put 'cmVhP1txbVVpfExgVE5qdEdTWEJzSWkxeWtoMj0zYWhRcS8+NXI8KkdYTX4/N0o3VVJ0bmVQZDohdFlnYndKZE18ZXpDPiJ1ZV8sZE1qWjRjanJsTSk0P1JVS3gqSjVreVVvZnpNPmtraUljWXR9Kz4wY29DU2xXXk9mW0dSIn4/bz1IYiZSallkc243cHhOIzBQWH5CbXkvbiwjY1tielIwdC80'@;
put 'KDlkJWU1TFFXUyhfMVciR0t9UCNjVV4wUlNtIyJLdi50MGUvIkIxR0V2UVg4OFJnN0RSL3xJYFFqIzZUbDtCWnVxPmAxZWFgSlhsZENeYFhwM1FkdTwmTCZHWnF5R18pVV9nfSMzRWtdOCVgRV1tK0IsMihwe3NEQltOSVkqSE97OUIvIzE4ZlNJNCtme04kYilYL19hOUU3dHUqLEFvRTxmRzY0'@;
put 'cipFVEwiJTRSejFPWmN4Sld2Lj9idXI4LkRCOlZKSldHTFZicSQjcl5dNmNXRUJPN1JdIUheWlY5b1oySHl1KG90K1ViY0liYDk4cGlveyUuNFh3JksiLE4/JkY5bG49ZnpUR0BiI2ErZzc1IlIpPUltQHB8Lyw+IyhTdSlkSDNJVmRESTR2MGdzanZUcHFDVCZEdUBwdlZiNztMcnVPZTwxYWUh'@;
put 'Mz5lXiZPLCQ+ME0wQiZxLnFCTiRCeT5hXSg/fHR3MiRdTW98aXpeaDY8fFlKOzpIZWk4Skcvbmp6X1dlJEFOWCN7ajR8aDdbOHg0aDNOKHdTdjBsekQsVF1MZlZWOyFbcmhodlFyRntzOXJDLikmcXpLVTtkYjhaOiJOfWBDS2hPdCZlU2s5Nj5WUCNGVipqUko4TEI8MCNHcHtaTG8zOStzST85'@;
put 'NSZtVEgrdXZRLiw6cWx9TGtkT1kwU3pjbFFLYE0sJnBQODUxe2QxSlMqPUNuNzNZR1QwXllPbUkoIT5wZSFdRTRadHFTUEwlLEs6Ylo5ZF4wPjNlNVshTyQhIkdTezlLIWcvTUNefFh5KVd6U2lELnJPbyNCVDdCWmQsVEdvbVFgb0R2VX1feTo2ZnMyLGk6eChMelAxJmBkfWUwJnt5OTgkIixC'@;
put 'XnZuQ1Z3JE84OUd7NDM1Z0U/RDk/UEUxJUZnVUpJQFgodnVjQ1BeJkJja0EoM3QmXWVzcUJCRCRIPW1Je2BNIXdYJkcyOT9XPH1JUSs+MXhYakMrYDFvdCladER0dFF3QThRIUovK0JZZ1R1Qj99e1Q8TV4scjIvU008clZAVzYuI3J4dylucTJFTFtGdyh5V1tuIV4zU31mcGFFZzdHTFYjJnhS'@;
put 'ZmRPOzh0VT48OTV8PCNQVFZ4bGQ7c3NnZzhPYSxdNE4lZWE1dHIvUU9bIl5+fS5ZYVIrY0VTZElmN0dJR24vb3IybV44UyIoYCxTeHlMLlFFbmBJI0Z5bm8+Piw9QHQ0IndwbklFZlVTIWEpX3pqI2FYYDJAcGt4ais3OGB8QDB5UUM0e0kyOFlmS3UxfThMVF0+Wy9pfHUiezYoJGJIfjN3ZyFn'@;
put 'VDlnPjZ5RHh8YVBIMTptZXJIKUtvaHw1MjguNH1PcWZaLDFoWUx5dV14VWFUOXZmOlpANk81OHVKXkImWVRtUSVuQDdjSVljfVVhfEhGJlFMMH5SQmZHTkRRX0M1TXcjVGwhKFdKZFg/Mm87fC8lKkglMWxVK29famt2Uk52ZT4jM11BJmI/JmxdT1AybyJUUEh1QnlvfT5fUXZKTy4kNHN6fmpE'@;
put 'X2RmU0lJZztpY2RqIkVIbS9SPjteSysqbytSanRyakA6eTd2VkZKIW8pJH1WPFVOXnlfUmY6WEoid3Q7QzhwZyMyc2JAXXVacSoycV47MjlgfE0qKmQxbD4kWFdpb0pgJX5SUEUpN2ZIL0BBS01DLFo9dXY9TF1gX0NgPkQyXkB4UERVaDJZKkQvWSN+KChzWThrO3pXcTEvN01nYmhtTltgQigm'@;
put 'NEk8c0wvTzh5WWJ7a01OPjJGdTs0Nnd+O2R+LDVYKnF5SCo+OTZ2U2swcnBKMz9+SHw7Yig+djNqdC4vNEZ1PD5MUlBMR3VIdDVEZ2NPfGdDYEcrNCYjTTtDN1hjfi9Ja089dXpDUDY9XjxBQ0goZ2hqQlJBdVMjRi9TZiJbZXp9cGlUejE+eEtXaSFvaGtjVEt0VmdvWVp3OkA5YiRkOitqMUZ+'@;
put 'N1s3d3BQQ0k6SitiVl5SSWdpZ316em9CcFsoc0d4LGhFZEA0aCFzSEklTj9RMTl9bmhPP01SUCIuS3E5dlcze1lWMVdKRyNgIjtLbkxfZzUvVWMzXlJBKjokWys5NVNHJHAiWzNxJXcvMzY5P3BsZUo0TWkrKCtSZ2VBN043ekQ6RFVZPExvXld9aCwzUDs1WytrIytManpfNnUkTWVVMHhieXxT'@;
put 'cmwzLCguTj5XbU1gVEJDbmFOQ3trU1J6JT5od042JHhaaEdDcmtpTl9IPEg3PCR6UTQxbn4hZUl3cUdbanJRKzBmKzxbXl1kcE5gRFAobm0vNHo7c2lYIkp2cHp8PDIqWiRNb05MZz1PVWhzcGpGWnYiTDx1M0UrTXxHYkZWXzdPcHdjbSNJQVdbdGEsQDEybiJLWVs0WzhgXVpyYDhCZj1FRGQ5'@;
put 'LjAka0VAM1VCdE9CZiNeXmkqYk14bU52JX49eH5BRFYvfHkmMzNFP2dgXl4hdkM+T1pAenhrY3AxNn0yUFNbdUtmVkhuMzgvYVpxJj9JbnlWeiRZOXIuKD54I11PaSVLN0JlXVJpImo6YS5gdEFtaHpqRD9jLi5vRGNLQTZDI1QrdHdTaHtpZSMvUGkpZXo1TDBnL2NBQEEyb1QmYUdzVkRlVFA3'@;
put 'dip+TypwTFBHLEpXbTA4WDU4UUtCIToxTnJYaWdadUhJbT5Zcn1kJV1bQEosaDt8Uk8hdn49eipZVnZsSkxCKis2OXR3MVhFaEFuY1FYfGIkbnMhPWBWQFRNP059d3FLOzZtSUglezxuMSRESW9MSWQjNlZVOTgsPmgyM2MwUzlFcHFkWDV1VjZDRlIqciFjbEVWeCZnWkdobk0oKzZkJCoyOkhF'@;
put 'dmp+OnlGblouQCU5eHt8UDsvVjZTdG1iVFRAVzFXaX49VipuLGQiV0tsZ2VHPEYpLDFAMW0zYzEpL0xVUGJAUlNyQnMlMTdCM2VpTHxeeEUuXW5xdnp1dVlaKjVqVEhTbkN3TmQ0fD0uVUtOaFF0NCpaRENPSkUpIUpxO1tHZ3hRVDJXdTtsUDcpVXg8SFk0Y0FXZXpjRU4kMjZaOCsjRTY0SVVC'@;
put 'e3tibFB1W0ljKEVDRFF0b2s3S31ue3lxZml3JD1ELCFjSD1vbitNXjR7ZVFHOFBWNSleLm4mLGw9NFdjVGtWeH5ORXcuZm9SM30uUXZDLEp2dUtAZ3FnY35fWVQpTWRsSFlNeX5KYUl4Tk0mN18lNlVzc35je3lXMjZqblo6Ol0jcShocWtXP1ViPk8oK2Z6bylVZkNuQndAOTkwSTBraT1vUzBV'@;
put 'ZEQoTmBiKUU6dUdzVzNUPE9uOE9ncmwjU3hVMW1MaiZgYipeNGpZI3R6QWVheHM/Zyl8c0tfJjl2NGxOcEdCaiguOlR6L0NqSERjQE0iR29OSyRwRXx5dl09LGg2a1pUcEUlPWlYYmVSaXcoRGUrQlhVWXRuUTpgWU1dWHd+ISE7MHZXKnElU3MqXSxQNX45SHEqYk1jWVdZJD10dCxfaS8qbzYr'@;
put 'UHhNeCpbUmAsO3x0eFohNHd4Oj91eVl2JW57JkBkVmQlbzAjb0JMZ1c+cUpTW2cwfnhlKiF3WCxpQ3kxSX1ebmJGTUlILDsvXlNHRGlZXT08fTF2ZGlHbzJabit5SkQmVDNaej14U2cyT09iJWA+U3hFdj89KFclNTA8dzBkXV1+PD1MPXFCV1ZnVUQ2PF47Rn1sYWlJWXhWPiNGcGp+OmkmUkRd'@;
put 'dFt8XnZyfiNQVSU6RylHRkBvaD0vMm1PMTo3dWp3RCJQU1Q/OFAkcGtaLkJZfllsM21ZNzV8MGUkaUhjRTBuTylmc2Y3IUA9L3QyRVdaejcoQj4kfCFDZnVLYUptbkwzMW06JVAzITAqNmZkclN4Oj5tLy87UHt1PnZXOFtOZUNYTCNqbFokJXMxSSFBXTE4VHdrckVYW2doeExjaSpuXWx5OUpg'@;
put 'Sm58IWkzVltvcDlQJFBVcVc/dzVmYyM+KkpldFpdfmJeVGdDRi9nRGtmZHw6TmUzJSlRMDpuQ2YyT0g1eWNoW3gsLHFrW0ZOPUNTJEEhXXJJVGBVYUh4WDRGYjVfOjRYYzEifEwkPSpedWRVaSR4ezFoQ2FSOVYjcjVKKTdASSNGSm0lX3tVfDR+YW4yNW1STjIxQlZAXShoSUV+QElnTUkuSWpj'@;
put 'MWJYI2Bxdlc5Xzo8c3hHKFJGPV4lUHVUK3tBOWVTKnFkNGRIMSZaLiNnZGclLEpFaHB4NyJnVWh5WGhuQyV0OjVlWS9PbSgmfHJPaixeZXU+T1UkMXd2RlFWX3FtY3ghQkVmRytsRkQscyxPM1FrK0opSl1dR2ooMS5sQ0xtKVI4Vj5SbUtZcSpaSllWPz5xODYxYGUxZW0/aXZ7NT9HUnY8ai96'@;
put 'LHN+Wio+YWxvMD50OSJNM3B4c2Bqdy4jdTYxKjwxZlZQOVtjYz4jZVAiT0llTnJpRFZEW3QxYVBqSyNYM34qTEZhNm1hbXNjS3V2cWokPzk3TUh7K0dTQXYlZER8dlVWNnM6bm4lZmw7M3QzK043ailwblExNzJlTzh+SzFUdERYMXE9I21TUFt5LENYb29vSnkuYGxgUFhKeWdxTlpOYihtUjZI'@;
put 'a0svaFhqfmtOTFM2MXAjT3N8YlVkS1FZdGJUNzM3fUFQNHxgUm13I0FyZWx8eDN0KklPajd8ajVtfTlTKDBaLyp6VDduSi9kPj94PHE9SzReWUslYXlUM1RMRiV8cX0lITNTNnRzTyVPNHg1czpCPGJ6d0ZUYzpGWnwiRlQjUTJDYTRld2c1PnVrQGtxWD9JT08xM3pRP0ovTnxialV9WWw+QEd5'@;
put 'MWkuaS4leD5MLmZCKFtFajYwXVhsRSNbeSwxRX5NejshMGRsTlVHJjI9YD0sUHdOcXNocmg6dnldKllNel1HeDxQNTNZVGtvYjgkMnMqdHV3SXVzbmVuMElQKHw2altZeTB1LEMmU35HaCFjLjJIIWV3Y0xpPV86XzJGImw3XXtYK3VzRXVgPXN6UWRHLFJQZl1kaGRZVXhkckx4JDlMZWZgVnB7'@;
put 'QUVgUHEvKVtedUI/OyphPW96OjB4K0ZMSy9JUFYxWXwmQzp4OlheWW9RJjV2bGhZLCh7K2JQM0oqPnYrZThKRjRPKyhzQjlEdmBuO1NMYE8iTWRIMVoreEE8amR9RShAO1B5QjtvdHxOckgwUEVTU0k4S2huNToyJGB2fm1iaD1uV2FzRD44V0U6bnQzclt7YUhCbiFkSksqJlFkTT5jYGJ1N0Au'@;
put 'NHMrL11NZHp7fFY2eiYlOXBPbjJCa3kwNiwmcEhuVmA6KmY/d1Y0XkRENVpEIU94LDc+VmphYXFweUxPaF8pOGF8NF5NTWpzeC5oZ1ZjJW4hRz8lcDZkQyg5Ri48NU98Kis5NixhcjJNWkZ7c2ZsXz4zK1lvbEc0b1VfQittUl1GNEJMeTk/UzB9PUldSmgmOjxOUWc5fihzfSwoMihMI0x1U2RF'@;
put 'RytgYSJrSj0hPEY3bGcoSSU6PHEqMWBHVCYpJGQ/WC54dD5bfU9DO3ZaTThOIUpgSTlMUURNM2N3V1BOemlqTFBDKTs8eX4qejo8RTw6X2AlVDI7L2FvLjo6VilLVTM4QEwhPWlMO09VZ2cibzBkMiNZez8mdmkiSlgvaHBCUltMRFtoSSFDcj9vPyF9KkEzKlE5THd3M3k4OE5pdzV+dnkrYHZr'@;
put 'Rms/PTdPWCl3bGNhPm19cUo6LyRaRzJiRTR2cyRQNm1INmwwXlNgdD16ZjYlJGZzd3o7NVIhYVpVViYhYVVVIShoaShSWnpRVCtWZ25IbVQ9T1FGMVoocXMqW3tpaF5fKXc5Pl9tN2FydVlNW3hmKzY4JlhmK2Fxak1GSDtFS3dKXldKUXFOOGNpVUkwcD8yRzolVixxVjg4XnlnWjlbfUd7V3Ns'@;
put 'di4vZiJeRGo8P1ombltnfWMvYy9FOUwyb2sjLmJKN0hJSk9FKisrKjFQeG9LLCRUJmtkcUg4Y05weVRZYzFBVmJ3eEJrfSNpJmp1UyxzNzs3THNKczM0N31GLyp1NHpPKXdLRXFNQ1dQSkVfRjswZWcpOzVsSCFPKnp+JF9rLzx+S2BXQVdvSzN7XjNNcjpMIUE6XzszLCkhc11mOmVuPSohaTR3'@;
put 'SD5dKlVgTXsscEUiN2wwY0BmSClvL28+Z1M8WjE9aF1hWj9MIXR5fDgjWSFtZjlzbHdwUS9OLGA7PV82WHA4PTc7O1gzPERvekpgQXJYfTdfc0RdXXB7emZXJUtnKDAlcjBiSG0uXjY5YCVwaFFkYnJRM35+Nlh9I1IkV0lFejtwWSUsIiVVUUVKelE5MFtURlNHP099JipnPnlPQj1JWThqWT1M'@;
put 'ayRgKTV7d28mXXQqZCVxSlB3fWM2RihOfnNCaFFqcyVqWX5dKWw3O2FRUSxISmIzZkZUXWJtKEMre190Vit2UEVZWXJtRFZFcjZFfXpRYDdtKWgqQ2RRM2htQkdZMGY7VlgpQ1AsdXJtW31AZSReUjZ+Y29kLis5VzpmdyIpP2IhTkt5KiM3KFE0d0U+bCRbNkBJRTB4S1V5PX56L2dgU0FpS1VI'@;
put 'RlovZyRJUjdwNjJ2LnFtaihTZE9iPHJRJXR9dkIpM1RlQUc1YVVNVC5UQkJleX5wU3Q/NTRAZlFRUXlFMFJaMTpSJnArX0NxSUp6PG9lVnw9dzFpTC5LeVkqV3B+SzslMUksRChbKnBPZ3pTTzVNUVVSVFd1NEhyfGhBSGhVTG9qKTFiLmZsUWplakhpakt9JFRHZjt+OGhiZFBWPXhvRzliMzFI'@;
put 'MFs6QHFhcTBBZXBFKFdXNCYrZENWYFprWjoiYldSJWJsVkFZTzJreiJCb3RdK1lQVmFQdFg3PVlFZU5iKFNGUjkqS35CalE/K0hyLDk6I3JFIkFySWdkNTJPPnQ4Ol1nV1lqfjlZfWhMVUouIUhnSzpCYUleQ1VVenwiYCojSH02I0N6fkB3ZGhoInVMSkFFMyFhSkovUTNwTEQweXs8P1Z0VkIy'@;
put 'Lk5selUrJFEmRkRoZyFMbmZJRFsyZXtJO0xiLit1WH5jPGs8TTBhLkdhaFpQXnxDX09dbCpxSS8kfSQpSGR4ZFV6UFJQQ2dbX3cyQlR+SnJqaSRdVGlWbSNKV3tHQUJfL0MuUFYyUyUrV3sye1szSCQoZ3hjI3toam51MGd5cXM7VU5AJjpIMXoqQHs5Z0c+QF1AZDZeZEBUPGFhUDVUQmZVa1lZ'@;
put 'K3A1akAkT2RBTW44SEY7JlJoNndkamJBLyw3bm9SYDFUe15lZ2VMOnFGe2Q0cmBNIn5KaDRvWUQ3UzJAV0pbXURJPkgvKTlnVHpKWDNteG9lV2BKQF5+TE9ZeUR2SSMsS0d+UDA5KEROems3Om9Ie3pHKHBlL3B5TUdnezNTY2M2LjFrSGFnRlZ8PiFiV2JLd2JeRFBmPXAiZEx8dkxCXkhJRjN2'@;
put 'dnxoMXAwTWJQS31RO0NsdlJgTmFOfCopTX1heHYlOWVHOXFJJWl4SjFwRFZIb0lzY1YlPGhuPFE3RV16TldVdiU6L3NUND9GLmQoWD54RE9DZ0RIeUU9LjdpSX0iaUpqcCY/YT4ia0ZGOGNye00jeDBhNDhJIy5GTXljW0pWcVsrMF9Hc2RbOmhgaXp8dXErZG4zcXpWWjkyNnlVSWV3Q2RDeG5T'@;
put 'Pm9dfTA2OSgmQ19TZjFMcjJlV1h5SFEqXk1yWGBaSnB1KmF+ISo9X301ck80fkMuWiF8KSJpKXVgRnJyQj52QGclQ0omYXZ5dzwiUXdiRysqUUNQNGlXRStOd2dwfUFvSlEvXSF6YjhxPlVJUC5OeDxHISFnJDk+NTtgdyN9blp8V2guNDVLPkNJOU4hcjkxLk5gTVdnV2FZPFhjVk97YEdRPExu'@;
put 'aSYzMXt6MnB6OE1YNG8hajMuIUhJZWFvSzYpO3JscEpTOnM9UnEkaC5CIz1hUUZ+WjduSVBgelk1InMubDteSUgwM1opST80TylNQCV3XXhVey5FRSJlWWkhc3wrUGl8aChsfXQwVU06dGM7Wj5iQS5iIUhzLFlFRDRFRzFZIzt0YkgvK0A3KyNaSkkwayMySVJyd3BSfX5QMjVMKyEiNEB4KkdN'@;
put 'Rzt8UGl1KylRQFNOWH16JGVmKEYoZD91MntgTEVpYnVkNFBHdkJ0QDd6N18zI2dzVVFQMWxFKShwPWJmMVtFSyNuYiYkeXFsdVsmI04pSmF3RUxZOlFfWEVSanMlN0NqRXNPKSI1OnQocSZvejdyVSg7fEo9VilFcz4zN1BjaHZgI3dhRVg5Unl1bUU8fGd8LGcmflZPXWU0YVJGdiZRR0dqcGwh'@;
put 'NGY0WmJdP35HNmBiaXcrfGg1emd7anFrb094flFPJnZXT0h9WCZQIXl0O2AhXzFdLmguQGpVbDwvTy94bDhbM3ppblZAVmIhWmBucUV0UncwOHt8cGVsW3FQUlJSUENzaDtQcXhYdUV9ZX10THVTd1JeRFB0YStUTmR5YiEqUj15OiozPWRubWdOLyFeNiwuYjoqZCkjR0daWXVzLmEsSXd5MWsh'@;
put 'S1VeUGE9NkppLyQvVSNUXSNIXzhaTTIlWEMuTShNSVAjWyZoZClvNjRUYyt3bnBSS2I7MXglZ1hDQmx1XnpONypfdCZ2U28lbTxqVzZnNCQhWGVPfjVWKXRNbndNN34pdHgzcD1FfDVYIVMrdDVBSHFLIXRFQjVCIiQ8KHs0QElVIURUW2Rlaks/O0JAdkB6UF03Znw1QVRET0sxWk9bLEE3alIz'@;
put 'KzJ3JUpAQTVOY1YlMjN0SyM2alt7R01vVnpEQiVZbkE5ZlVsTG5MV1d1fn5OJWxNfmYpSXVDWEVRYSVdVXxSVXVIKC9rQzQjelooeUUqOV1zYX5SU0thJG5iYHk5cGZLJnp5czkyLk9seylYMUlKOWArNCRzNzNhOU9ifkZLeD5+bEddQCxrZFpqX3ouK1hjQDxNYkU3LzUmJGNxYElrOkxga2xi'@;
put 'WmcmWDUvZjVeUkQhNDVoajQzJiFDSXt6byh4NmBFazYiKEQwV3xNQWZ1SFdMbCRmREtmJXsqUzoxekQ/QE9CaD4+dHE7JWR1Zy4qKkgsMmZnezN6MCsmcCkhaD5EWmIwRiNjVj58YlQ5VSMoLjpVcD8mXlRBOXJeWlVoaWV8Oi5MTFBkNCpnWFZ6cF9DJEhYX3VIXWVoditRaXBHU1pCMUpjWTBX'@;
put 'e0FnPDosIXh6VGF4LmRiTV1EODUpOURKczRNdld6QysjbF4iIz5CZEFJPlNOVCk3VjMlfmBYNXJrZDp0aW5WViZSSmwsPVc3WV9YYDpSREk+bHV2aFROSzNpT3UrJTp1ZUUzUiRqdSYqQTZobjRtZCwjQUBycTNuVmtmTSVXNSxuTmA4bTM2eCpbVjhbfVs8W30yP1J5NlM5XjByYldQOk1YQ3pL'@;
put 'c1QxdG1JOE05VUxxK3Y6NjtjZHZ9VXp9RnlsZilBQGtpKCROZ0dIb09hUHN1PW4sT3VjUDkofUwyUFtWcSxpYjZNMGRLaFk6TiVkdl41dF5XJGhmanxLVSNkMTk5bkdVYGBrdiFST3l5bjB0NCREPkljQ1VhZU9mdS8lbi44TGJRdiVaVH5uOz9zaCVpQTJFSFpzRmJVaz46YTdEdX4xX1IyQSIp'@;
put 'KWFqXjVYdkZIX21rfDEpVzFWSmx2Z3EzZT4uMDoyPXo1Q21COm9LWmFDc2kxWWRgKDxIPVQ7Ni9NJitoUGltdVB9UXE/QTdBS3EmQnlqaj96bX5ebTFfYnlaJUpvYyU3eSgsYH5+Yjk0SGxsS2VETnpSRlE4Q3FwKWk1Ui97PjgyZW0vfT42dVYhUiltY1JVUitweztTbCJIOzhaXUssQHdoM3Vj'@;
put 'LiZ0STNhVyZLTDRbaE5sVlBQbE5ZVVZIbFU2MEBEX2J2Ryk3TWslW0Y2RTNVR181TUc3XVhEQk48dm5UKEJ0VEhDXXVNdzV1L1dZNFdXRm0rQGZKVVJQUzl7NlFZfDoreUMhQSkyfFMiOyFJeXk4Ri9uZ2lCJEA3SW9DeSFafCl+dGg/N09PL2RjZD1vS0wufj5hKStFT3IxUloqUFNXUCQxK058'@;
put 'Sz51SmJ9TW4vSSQlS3NnclUrZjFJQFdRY3c3Ui9wXUFfL0Bbfkk3RCxVTCV2W08uS3RsPXY+aWtoaTgiPWooJnZVejdxM3U2cChbJm9manxJJHRZV3JCLFV0JXo5QkwqfU93eHYvR29Jc0wpNHheWj52bWV7S0x6TGBRVlM9bHo8UXV3WUM9N0kxRyVEVzUsfDFtNGA8ZURRJnxpMiQmRF4lbmFh'@;
put 'aCFZRH1Te0BLV19keXVkQnZjbnA0N34/a15gP3M+LHRtcl1OJmA/ZHpZem0uNUVzNkYpTkdHJXRmQF5GV1lZVm9se1VJe3ZKMlFuUkBjZntMSkJUXXAkaztia0k6LnM6LCVOZ29Da2R2NmNbT0swNyg9c2pJZHEuemEzRkIqXm59MUAxUkA5UyJlOUlRSzw0QT9MSD5rclkmZF8pSUxkPk5dVGRk'@;
put 'ZygpTFZ4Nm5LdjIyYlM3RkImV0Mjfj5aan07OywiU2wlJnRIdnwhKTBXK156PzlwQitIei9QWkZZP3JmcHBDUWxFOVNMYW5dT0NAYCVoZ1UvXzNQdUJHUk48alc3bnZ1Xl9afW81Rl16Lm9hWSM5LnxUP2BVbDo0SXV8W0xrP0lVS3gqYEkrNEp3eFZ6SHsjXXtfPThzMFM7b0Miazg2cihnUmJC'@;
put 'XXx8UClWUDd1WEtfcHtKdkB4dTlabztfUyI7NShrLElxT111IjYscSZsfEVFYDF2VDVTdDNtcjd3NlltTUNHN3RAbkJwJkZic0c0YWZJQ0t5ZHhmSGQ4UmUvL3osfDc7IiJheFFNJGNqaEQ2SDpWZE1YW2RtNlltdihkWFUoZTVbOEJJOT12aCNdc05HaEZaU0VBZGQrY0A0Q2ZlX2t2cm1bU0h7'@;
put 'XUA2cSo9ISFYKlkrW1FJNStXYm1uO0NgeWEyNlRiLzBMI0g2ZnghbDt+ezQzbWdgNCVHVk0mQWxISSlNeEVpPzJpNjZbTUI0ZTYzUEoqYVQmWWtJeDJOUEtadlBgVihGTmMyL2IvViRvI3loQkhYNWVmNWw6OV59T2AxYFFGaUxTN0JCNEJdIXg1ST51WnlQT2oqVW8sUiNuRX1qVlFmcFlzT0BV'@;
put 'cTRKXWA1W24xUDM0Vnd9V1R7SytNfkcpX1ZEaz1rQEU3LywmPmxgZTx7PigqbXw5SVolLloxY1pnXSF5T0hxYzZtU0k6TipxITlJLGs8fiRFdlA7RlYhUUl9VlNgY31MYDgsW34jODowd19NNCQ3S3swQjJVSV8qe1ZBQiZCQT86LGM8XTR3Q18zQGQ8TWQ3XXEzTTJkVWVLSzFlKG1ZaFs1biJz'@;
put 'djRYTGAuJl5daUtweCNWKjooND1IVC9JQ3V8d08kKTxbSEI9Km9UJWpuZWRjOWA1JTljITg2KDRnPyF6bCM6MisyZ0FMU19jcilbM2c6RXF3V3hCZCJFVzxOOCIwPS5LMUVYRC5SQGJjc0VhSDtqYSFONUkjXTNvP11veCU3SWVeZmY3PHcoVnpgd1NUMylBXkw6dW92cnFsMTF9RXBzYmhDWXda'@;
put 'Z2ghdXskbjB4Y3VHYWM2VFA9K1A7SiJDLldCTjJ0IyIyY35GUGl7UFtkOG9QMCMjV20ze2AybmlMM0kiMiohXlNfTn4mPzR1TVQ2WVF5NjlCRUc3PSpBRWFWPlZhJFlTemgzMUB8XW5ffCM+UmFgcDBtc10lTiVZYmhnSittOypPTHtMbzZCTjBvMEU/OHBha3JJLEZwUHZUS246dDpydyg1YlZG'@;
put 'UX43PlJqT1EoI1g+QTpHZGZUJTxAZyZJSSJrTkdjbSo0ZU09NmRPSCRsbzhFPFBtOnNaTVF8eChHYTh9Mn4yRipsT1U5Q0FTSHtiPENEK2IsXWBYaUlKT25NYCVqOl40QUhjKT8rXj4haW1dVXtvSiVFSy8ySD1FK2RmfF5EOlp5NFYrem5CWWAufls9TU9APXRlZEMiUUtrWTpFaXdMPk1DYzVs'@;
put 'VSxycUJOSDhXYDFkcnhhfU06ZEgxeFd3fS9rOWVAaEV7LkE2Z0hzb3VPVHdSZmQmI1clalE+T2lReFNZWE1RR1VkV3pRU0F6KmkhUUt0JjQpYEF6KHdwKitCamJ2RTYpPE0jYHJeJDVKZ0JGZCVsMyJZSlNBcTNHNTRqKTRYOTchZ3wjMzZvMjBuZXhqNH4yQU50VUd0VVIiUG5XUzRhTmUiKmt7'@;
put 'Mm1rQ2g7LjR6eC52NDJRUEVGbFhqbFUwLmFnUGtmJncmejU2Q1AuP1EjaVBAKCQyUHlXfjcwVTslXU9yTT4vPWA8byY4LHRMPz9TZ20qK2U8Ims+PClOKG5hVmVUKi5HWHllV05dUjkrbmdrJUdUOWBgZixofmRPPyMkLnk4blRRI2M/OWZueWtnWTpvRyFGS1lXPl9kWC4wIXViMyozRTpwUlt8'@;
put 'bTJOZWJNVjMjcF9BK2IucygzfHFIZE9Tdz4+TGhTKHIvMy8uXWxofm9yRTRnMm5QPl8vSThEMntOPDdXV3cjInUzfDFgIVUxZ2kzUFpCQGEzaDwkUE0ocUBEXjRiQGlPcDNVdnxFZXg6PTFRNlp5ZUoyPnp9UDJMdkBZa1VOe1V5JntuPlVeJUEpeDE+RV9VYmcsL1IqX2BLLFEkYHFHRGM9Iy8v'@;
put 'fFgqb2dmfiheYldMPHZlOjBfREJsMWhpUDIuSzhDXzlgQ1V0TThTM1sqay4kT2AlNihLVCIwVVY7LlttQCFiXnlidTkrTy90YnRVXjYjfSRzUil6M2NKezE9UFJdTHNJW31aNnlMPkQsM0k7P3F8N2NBcVcpVVJyUGgpV0BhW3hIJFJqay52WEh4K3hiUFpPSmZfSSJdJT5IMzd4RCNJUDpfYUR4'@;
put 'LjFeZ0VxcTArci9HRFd0anRTbSZeYTIuZ31FfT02R0xmcilyZnJ5P2xiJVZITWBuUlleL0QuOEJwKWVEW0A6PU8xaF45JHNjeFNYSHxUfGh6VT9ISVYkL1dLSmJ9eTlrLFdFc3guejJPSFJWVSEuaylnI1pGbyRdc0I3RU8sckUxLGghUSxXT3pXaVBuRjFDUEdCKip5ZnM2XiYzZ0RhQDAvcHFv'@;
put 'dUBFKDdmJHtMeVIyb210RzBhT0J4PF8kXXdTRjwuKEQiQ3x9cDdOInM/QkE+YHluekJwfmVHK2lkT09ZfFtFZVI6LH5PInpHMVdueikrVGkpeUJebilqLlg4SDdKRmluKHJ9XkdTNWM1VC5genEvOW4vPVFRbm46NUh1NGk2M24+flc3UUVEMW5KRmZ9YSE9UVJXcVAjTyJzR3ZGLCFtelBZfWNs'@;
put 'V2hxSFgzJEciOSpoIng5I3lDY1NXMC9ncXtkOzRqRX1qSHh+WmE0OVIjNXlxZEk0UURjNVsyV0xSdmZ0eD16dlR2P2h2Y2tQJjwjajR+VSU9VyZTUTN7cV05eVk7dmtWfFVOZSlWP158Yz93QCo2JUlEW09lcHE9W2w4LE94dCRPMnVDQGhzTiFTM2spVD81YEQpbT5wYXkrYzI4Qi94JDVROHx6'@;
put 'cT96eS5ZYkthRVU6cWplfGRhOWFFLnVYfTJKeExybno4MiJyKjlxQz02WTpUMEl7TThGLyIuKjBjMkglUipANkk4V2A3SDlNUS5wZ0IoIUYveTY6RytWck5xQnpqbVJUMnhTPnR3LHh4KUhsVTFpZko1eFJlLFIqNmdSOkFwYi86Z2NsKDA4d300aT4+eVcpaW0iTl11bFhveUh+RElRbD5TezJj'@;
put 'JEJJOFMoL2tyOGgjYGx4YH18Pk11NDo4SzhlVylTOFtId1NaMVp7aF5UaW9SR0tWaVtQW2VoMDVWQ3ZYRUgjc00wcThRVTNRRUspR1Y0SUJTeWZ6OXMhRHw7OEF7Oj1ZI05YPz49d08mNzVFSFQrPkJiJEVvbj8zcnEzbTY6P34ibjFLREJWQFltNV1FTGsmey9MfTYvPGs+MTErWTRePlpwQTQ/'@;
put 'WzglXyJHdGpBUy9jJSZ5TCFaJmZ4RnJKVCV1IldjOGYlN3xvTj9kN2ZYW2diIiRJPllPeDdFJWpTTj80S3FOPWdZKXx7Ryl5YHRKMTFPPEMvfmQkUiUoQzR8PH4rKE9adWZALlhOLmNZIjFbPVRSJjxvdWJmbDVoPXIrUHNqbUBHKlZfTUY4KHcmKTZNe0sjNG55RnA8bDdieUJ+SmIxK0BnQGJN'@;
put 'W2g5NzN4c15OYUk9diU3KWh3al15TDdkYXJtdkk/QDw5JXlvcTFIMGw4USYmejIjW0IkaiJ5fn5RPUJwYkE7REZvL0B1JWloOShqYXFOdTMvJWVbbGd8RyNxUDVHQzkiYTokfnVhSzZdcUx9QHxXY1Q/SWlCd250Znl4cV12Tzh7XUB+ZkhvSXpLZCtKZDdHVSVFelVgcTImTjlOIUxVMHY/NFpQ'@;
put 'XmI1WUBaMVF+OTphKTd1LmIuVVk2QXBZV0dQQWMpLE9pJXJBZzBxaFtOdWlWfiRpUTt1eksyNnV3NS9gZElwVDMoKzZ6TzpFPDJFYUVGPU9fUCRiVzE/Mj4xeCJ8SWNhWVoxbU5wNENWQXNFYHA8Nn4hfTRjcmghek5QaXwiUFJBQ0xFay5vLDg1cCR8Ll1AMV5qZ3Yyd2UhSiJ5Q28lUktOPyVK'@;
put 'WnZ2bkpeSCl7Z2xic0Z1JDoiKTtVdzV3UXdpeX5lbEYkZWFKWUUpISEuLk0qSCY0VSJfdjMqOjlaWVcrSkhpMUpOXk4wYTg2JGwud0dzYlViU1d4X3ElNX1IJnFqJWlqalgoXiNESmBdY1VVbFdvVFE+M0ZfOFs0UDYka05ydnU5ailYMUo/TU5QJUUkc10lMGliKHJsdSUpNS5iMSkzdU1OaHoy'@;
put 'TXNCWmska11lYGNEe3NaP3ZHQmEoWSs6bkg9SmRyVjEhPT00fi5IXSlRRWZWdGRjdF5MOnRYfnA6T2FkNCZQfDVEfnppMWFxMU19TlM/aXA7Lj5fOCRjMzI2IzFJISFudjJ0aGRIeSIuVWNUb3NxYC82MSM4UmMqKUdyQnh1OkdXUlhDJjZEJDhGJl9dPDYldCs7O2FabEJ4cGZeK0lhR2h5SW8h'@;
put 'LEJ7I3J4ZEFgYyVCV1lfTHI9YVNgTlFQdkx6VndXU3ROOXolQG9mRGs8KlVBUFlQIWlQVEdGP010OCpDOGIjRSxIMz1hKkZ3NTpVXUpqQy8sYkhmSWU8MUxGQmlNSHBSPEpsLlRuQlN4PC8xMCJCMlVXWmk6ZzZ5aF9UV1sqaUNnOFkpNilZZHlPYl9nW2l6bzxOQmlXLDZBekhGJmosQGl9W0ZC'@;
put 'cyRLQmtWc3owJD1xV0lyKnh4dm1PQEx8Qy9jWSw+bTc8X3RWIVkma0sjfDpmVixQKHBRJGhQKmZaXiklbCZWVVR2RXYrdiVtZ3AkTUhwNWlIR3pdOjNjOl0iVzxZU3J6bUspbzlmZTBHYkxLalheUChKdEpPWWFFeFpuUmxUS1hbaTQkbUN3PTE1SlovW1hQekN7NWclcUNkQ040eHplQm98Si5h'@;
put 'ZGxyRWxuOnI0a0dzfCZsd3wzZ29OSFtpWF5EUnpESmN7TkY5dUhPdzhePS9uLn18OHsxTVF9ZUJbbDlXVCppY0xUTjIvZzp+ZU98RVpDVU98Pyh0dW1qZX11IkY4RDNkI2tBMUJRMkE4KUcsfWhjN0deMDQ9MFBDR1IzKn5+fW1KPn1WMWAkNiEuOXNGPFk4T1ZCKiNxbTNYRUJeRHgjc3xlcyFz'@;
put 'UU0mbXl1KUN6IWltRWYmOF57SCF3OjpaLnhhVHs5QmE0UzgiS2I/WyxJY1daQ1Fbdj1LTjEsd0t3eitxOlkhNDVESUkwYndLVjxJPyp+ZVtHeFFmel02XWNLaSJSOHgsbHVMZFYrIX5zd29rS145KmhOdF5aPHdoW2N7RiNicTo8JE1YbWUwOzV3TzVZbTU+aHgiVkZqVDQjWktwQz00ckIrRjFf'@;
put 'K1RSJCRtdDwpciUqR1pLPStAfEoycXBga1puPEcqNkssQiY0WUBJX05FTVVjTmJtMi44YkQvLmp3NXRKfn5dQj8oRkJ+NHo6K3AqTSR8RW56eyslKTFrNSIqUnB6XnM0dEVuIlFDJjVdJEtVT3xPKUtMb2lmVExIaHJgPjk+UFp4WSo+dz9RQF14XixmSjpnTTVFUlJWL2V1VktHZGloZXVUOXg7'@;
put 'ZGIsa1N0N214enN3MUZAUnJVbl9bNkA/ZjRIczpRakNYbCVmTElRIitDXVpqPVo2KFsmMUVXKyo6ZS9kKHE0KG5ISlo/PFZvPUpgZUEkT2JPdXI1MUJNJkY3SS8sKU5xM0tkalFNLnEpJih1fkVOTmQ+dlc7Z3Fpd2ZpKiVMNW1NTCJ0KmxqXTJJTitPJVM4WVprMCt6NlFdW1Z4ezZnWXR5cHsw'@;
put 'XVltbUFXX1FvIT8jeTUiW1s0a0QiNT9wKTpFbj1iZllWfENdV31dNS8pYF04LnV4X1pMZXE2QD10Qj86IzBXU2I/T3FbNz88e2ZAI1hDfjZmI3xgVGk0Q04jNjY9Mj1eS05OWUZxUHJFfSUoZWF5T1lRalUmPSQ8VTc/WkhlOmoiOkFeLlUyUjg1X3YkOF05TDUpbygsSG1vTGdxe1tRWDVsbCxK'@;
put 'dDYjKWpkeEYhIzVhfjtYQDx5Xzt9MzRLOnhKUWJ6fXBzQ2UlKlpPN1daOldSQWEwNEsuYEcxJGJEcnJ1QD5saTBvLyZDOSgvQlpIa25ENVh4LnRYaCQzfTEjaj1iN2srV2g1Nz51UlhXUT5QJktnTiU7LkIhaDVlOjlTb3c9JCZTZXhBbHxzRVFXLms7ZGh5TDMkZUJAeHV3fEpjSlgha054Ynl1'@;
put 'X116N1oqSUA4Xyh2byNWJTFKRUpkcy93dVAxajc5TWc/ekQ3Y2JYPyFfMH09eSIxeD17PWVuIVtUXndhdX5rZUI+RGlwWiFzJW5ILEoqezdlUWl5JlFBcyY2PTpMemsrJF0lQGtRNE9ldFg3K3l7QkhGIWVIXzByOFNdIzBBVGVhYVU7Z1c2W2VZTVI4KlpKXV5nVnVbP0pYNTNnTmNQVkteJWVp'@;
put 'QldhOm4/Lz5OamJsZXcoX2pUeDJjWWRBekpkKDpmUmgySFdNYXZbYVZdZn4haktfVWkxPGZ7IWxhflhaSkBKW2Y0fX5zdGpoPChYRlhlMV1aaWFKfC9lTVFEZDxlNmhNb3lAN3gmZ3FrM0JyZG9HLHJibzBSaEhEY0hgRjdDc25mJGhtSFNGaTJBQkFfXyhFcy55Y2hsdylwfVlkTyQ8ckM/c2h+'@;
put 'LFZdUyM2VC5zZip9XU98IX5NJVNIR1BnRDdgfHMlWjtxQE9ubk5jaFNCODd7VD9fO3EuYT1ud3NBfDRPcENgQDhhYUtjRyhhOikleXdedWxsLio6JnY4U0svdEloelpVUW97PXk+LltrflE2THp1UkRKeDRvWGdybCF5KnRYUjVoSEdNcEI4JlF+Mks6R3k9bjtHYXxlbjc7MXBFWTo2cGxMbE9F'@;
put 'SkJ2c0lsJXFpYFs5TUV5NityfC8vTm1QTmJwQGR9QDpJUU4oZ2EiPVRxLHZQVm8/InA8N3NMdyNeW3dsNTxOai9bWGBJe3BAY0drVmpqfE5oRnUmXSN7JkVafFBPcTRbfiJLcTQmfEMhL2xofjRTeWtsLzsvbiRfVztbcDNFaypIIzgwZWwjbltTeFpsbHYoTm1HQW01cDY3TUVYejs6USg4L1Fi'@;
put 'TW9JNmZ+Oip6NXZiJEhUP2d4TUtNSGNDPVlqez9Rez5DVzkzPjMoPEphcFZJY3dnNEQybFs+eDc/P1VCQlVQSFdnMDQmK3BUTUFFNDBhUEg4aGp8UmhtKlRRSDQ2SU9+N3ZyXkQqKH1nVnBfcUIjSj5CciUhRDx7SVlVX0owMTYvcFJuP2ZlWisoT2NSei9XVWw+ZS8zbSNSY3tmOWtnNlZ7cXRv'@;
put 'ZTk7RjslQFc3UlM/UUxNRSZVU15HeVRSS2Q4Sm0iP3QmRHx2MHJpc3pSTCFCNi50MXt1Nl8qeT9OfDtlRGcuMHk0TSksSVVkUmVGSyV+fWsxQFNVailJOSNNe2RCcSRUQiZeNE93QDY9MEMrRU9UMCxRaz4vLD5gaz5VTk8sPVZOVT88OSFJLE93PzVAfFV5SnxjQ3VtLis9NGNpN1p7PTleNWA0'@;
put 'I1pJUipudFhVajlgQHNsdD9aTnBLYlpTRXE8JkFieT5VQ15ZM1s3XS50YyVeP0hDV259NyFSM2oyUztWPkhoSnR5V3lyalQ8UjgrOCFLVWlFcFdFYGJnWV0oKHVba3hUb2tZbCZGP3d5dDIoP1FBJkxTPix6YGY9UVVzZ3EsNCtofDZGMGNHQHEzLmc7cjZSO2YqU0g9Wl5gNml2ZDQlWz4mSnZK'@;
put 'aHYlO1N1Y2BaR2FCUnF+cFZ2T2pmVVE2UiV0UmlJX0xMPURJRiN+dH1mMWxvWzYybE4vK1tDOmExc3pdUyMifT1OV0Y8fVBJQktGcltrfm8pXlVNL2Z1U01TUU16XnVKfTZDSHB6MzYjI1FTR2gpVDlTOWV1YT9YeGw4eyNaNmpQSihjeWRwR09ubmVTRHB6LitXP2tOSnMlc0dlREwjQ3hPLzhw'@;
put 'OEw6b1o5R1ZTOVRrNk8waHdLX1Mpfnlna106LHFDMiN0M2tvRSpDbXhHRFdDZyQhY2olWnZbPjZ9S1BUQmRzbj46WUlfRFopZylOOy5CQ0x2QlFmXm5HejJ2P0VNM2c/NSQ0WWc6cEVPP11YTXY8VDNVJl1fVHJ6alJOaVJpOHQwIzZaYTJZU1pwbEpkIT9XJFFMXSkxZUhqJH41UjtTciJAXkM1'@;
put 'WERYJVlSPVNrSTM8aXxJNEVCSmVIeENoO18qb0VAOCpNaURCUSQ1Lmh5dkJ3fTQ3MUhKYEpeeXx+OEU2UHlWQiRoYGtQTCgiU1hfMCshfi88ZSx1RGtneVpFWUxHRH0pRzNHSm5kbl4iL2ttY08zYjxHMX1kREQoNjRIbG8+UUopOyZYUTBATipvVV10dkclfSJbRTA+cGlQT3RDQzR0ZzNbTk9l'@;
put 'VSNUSV0mdXk1L0lhQCZuY2F9dl5MSC9CImhmUTFjN0guZSVlbGh8V19QeStwe20kWUV9O3l5a1tPUzNnJVFIeHBMUk0kOTlRYTx2NTxuXzxgdiE1KHZtc19JL244XXJLRUlsMDBHO1N9RGxvRWBOc0VwVzdNTn5vMixTWjVWUUcicT5qO3JlcmRDQXh6NFU7Z0BuMltiVHRoPmREbD0pRVdwW0Zt'@;
put 'THZvODhmYzNrPUZ+Ul92NlBxS3tfJVt2RzJQWW8+Iy93LDVhS1BOTDFpK1BAUF4qQlk1Qms/ZW1lQWd0P2U7REJnWFRpXmtGelBUQisoS1Z0b11hbWJFIlomXmV5SyVWNVQ4V3BhJEdqc3JXJlBURzBHJUFkRkJPI1dnOmhxeEpvPDlSensqIl5CMFhFKGhTa10xW1NIJnJKPWpWaWR5clFZdyIp'@;
put 'Y3NvI21DbGxaRXc5U2c3QiUmXjcydEN3I3ghX30qKkxSZm1+V0ZJRCxadDljKVtzczJtJWVIPj1uUXkvJHAvLH56bXtpXndNSThrZHVOQTQ1Om5QeXpFWEBTeSFEYGomTkxiTUdkWWN2eHNPNU0oWDxNUHsoTEZjUXNsUylLLjB6PGxCLnYuTithISxnKT1ObzIsZHYoST1xOyMzW1tVXS8hWXd1'@;
put 'cGUjRV4vMFp3NEdaT3U5VXEsfVlKfF1BUjZCVVJuMFZSQDYpJkgoUVg6KzcjdCo3cG5RRFZMPFp6P0wuSiZfYFA7W29aQDlGLj5SQztNUkIzNm9lVFFBeyVMSnFucWYjUkpYd01XPj92VldJVytRfltbNWtSaCNTWC5YamIjQnRkfSosVUpWOCM9NkZZYnQlMU1FIylHazpZYDZJWlZqQ3E+TCQk'@;
put 'OW4yb2hibG0vOHlabDpDQncpPXQqQS89dGZNSWldYXFEJD1wKD0/cUhwTjUpeTpQfk4ycSZLIUpRPmxBQ2pdPltELz4waWhMLjhgWlYyMUoqKiFyTWhSM2hxSGh3cUs/UytkdUQ6MmUrYSk9V3VOK1plSnohbzldPXYzUnB0P2p5SnJIS3VnfWp9PUJkS2V6JSIpSVN8WnxFSiJ9JmZSe3hmVlhd'@;
put 'QzRMYnI6Xkhpa3FPKkNOJGU5RFc6am9EVixFTnA3ZVBha08pYXpaZW83LlpyWUdkUFphX2dXZC4+cWJfRWZEeC9BNWtseDwrIUR9SVJaJFV1Mj1HcSk4V1NvPG9UQjosdGxVQ25GJDRIOSx5emhIPiVEPShsbT1gKU4jfDdWRm87RSU3SHR8aVFOPnd3TmsrUmNfXmBNcXlOYHNIIl1vQD9pRUVI'@;
put 'RFFVIyM4SW5gNCNiLzN+Nk1paE83UCtKRFZRbWZ4Pit4aUBOT25LSHhtYmdFUX5NM046byVVMVQ2Vl98fGImSyhZSFU1Li4zQHBFNXpxNiN3PGRkOFBRaF53VFI6R1UqYyFPbmI1UTwlPF4hRV1tL3lwTSRYNiZbaz1lPjoqcnEvT0dOTHhubCx9V2tARVF2MSl5USklYmRzMjhiWjImVWksNjdx'@;
put 'Izd6WzBFd2Q6fVZFOlNmVXtDSiZYeXxGY3B2XmZKUEJMVXtkanIvaT9PbH58dDN3VDMvUEwwfHBHJGNwW35LITZ2QXt5a2B0Jk5mbE5iaThJXys8dXMpb1dGbkYsKkp6eTZ5O1goWTQ2Yjo+Z25RLExeNUJ7dH1ZW09QNWJ3Y1d5LHJoQCo2YjdhWy9xbWplRWhVfmlWaVNLPk85U28waU5OTXEj'@;
put 'azpabHA6RDRRUnJHQDVPPEBdWlRjcjI8Omp4IzpiTCt1OVAmfWJuLGolZT03aCY4KTteZ1hIKFkpanRTKVZEOkYmNmd5QEpOTXw/eldteWFZUkAyIk4hT2dKKHd4R05FX2k5Y2pIaF8yIXQxVTAvS1lMRzswKkk3cFJAQyZJSUVoX0FXM0A8QHFxTC5xaDxid0pBbCNWNyRiVmFbTzFWbWBnNHA9'@;
put 'Iy4+L2ledVgmQnt6OXg0Ymgjdl80Ul8pJlQ3YlZ2Tkg2WTBPUjM0PVUiPEFgXisicm1LT3dZT2s1KGciOCVKM3BOXyw/eTpSX091dXtgTV8vdlFQWW9aXlpXL203XnojOTN+NGhMSjBBVmMvXWc4U1ddODhAXVUsNm4lfTUxJW9QQE5gZyMzPW50TyNNZFNaLio8TnNHV1lNQEExfGlHbn5YfVos'@;
put 'eVUmQnJJUipsTntRSDl3fkZPfHhQZWc4IiR6bS9ZUTAwUzFnO2t2N144cCtgRCFfKXdpNGhkOHFMdW85ckhNYSNlSlJ4dF8sL2lUXztpVH1CdVNseFJIOV9SMmNAPihzZ1J+NjwqU3JdbEpwZWR6VTtefVdyYDNnPlZJKEE4VCxQOUkhYzgzaVJUI2NQeHdLRjpCe0lafHAvJU5JM1NySj17YSZP'@;
put 'Jn5SfEBgYVBSQi5nRD5gQXNCLEd5Xk98LFhmXkkzK293P3JtJDNLYl1RV3AiRmN5ZjBtVlNLWzN7N2V+Y3dROixYXTQwRHc+eDthYFY8bCZEYkk1Mk9FVmNMY0kwJVRaJG1vWitZJHolRkZFPWp7K3RIcmUzI3ZMN15AMmNAPmpeMWk+WTpqT2c5NzxjZiJAKnZ1bn1jMTUyeDt9I2g+YmhiSkMs'@;
put 'JjxXYX4oNyNYOHZQP30lPzQ2XkhYaWJ5QGA7d0FXelk0eHV9fSxgRFQqIUQzNzdZUjJVMXsvYDJJbWM6ajI1Pl5gbHZKb3ovRFF1MHA7Tn5ZYmczXit5X2VpT2pzbCs4MnB9P2c8XiRQa2Iua2RkN3NTOmZWXlIvVjNvLExsRmxdPUdTdjcwJFh1OHBBKEVLQGZCW0tdVWFvS1t7c2dZaEMzRV1R'@;
put 'JXpxPSV1eTIuOHVJZXYvTHMkeDg8OHs5bV88eyJJQFlqJClCRGNoR3FHV2RDOC8sLmopWndAYXkyNUVbPHA+bywlak00OzsiJSojXmxRVjRtTighYlkxYlElIUklV3YrKjMpbGpPdilUTjRSYlovYi5mdkJySVtJUkheIXRmVyV1JkQiM3EhZk1TeE9ZTD41cHI+aH5wayhpWDdGVTl4K2BsWnZ+'@;
put 'SEYqLE5zdWtiWyJSLzZifVR6TEtMI2k8T35jfW4yLnM7UzYqIS44LmlrIzwoUih7LGdjZXxkJnNqaXxsV3IuMSkqPkBDdjo5QCx2dSohOTdsITk3bSE5N24hL3wkRWtiPVNlaTkzZThKZFE3fG1EUyQ0VSE+Ikh6SVNCL2Z1WFVNV0Nsak87PiRFbD45aXFQSis7Unk1X2BqWEJzcmspJWgoNn0x'@;
put 'UHpmaV5nISUmT2xuLEVaTWQxODVwMVE3IXM7Qi9rPkRlLk9HN0N9JFJiMy5YbVZ3Wi9LV1ZudT5nUmslbXY5ZlcodX5QUzt1ZExPbDZCfEA2bHlSX1ptY19WeT8heiVDRXUrbz9aS0EoIXBDOSNrNCprQ3kyV3ZPWnhmcTlRailKOmF8VTRkUF1iO2NPfSFlcmthakl5WHRyQ29ZSyJoTiRgOSR+'@;
put 'dUVNcCgjYDRjR3wwOnE6WkxofkldMX57JjVPaGEyeFtIcSF4TEkpXTFmLzZ6ViRdWClscFZuSkV7a00hbGV4ZWU3Yio9cT9IbCY6S3d7RkA6UzZGVXlpd2BbQGdEaF0mVVZHeDRpe21qZk9eMSQ5SV9kclJZIl5dIT1vdiElZDovP1t9e19ZbjtPbi55QEMxMml+VmI8JUc+Z0A0cVh+M3dpe3Ij'@;
put 'TFd5azdMIWB1TVA8WGE1fmQlYmJgPyxkRHVwUy5AVjk/VzgocVszLi42LGc4Jm96YWlbYSpkZzolfmRKanxZW0spVXlSVzcsZn1hSSQ+I2FQVzFGVFBfX05waGNPQEdYT2ZCUV8yW1M1Llc5aW02VGRjZG85NyRoXkxuYjEvYyVPdiYmI1BpcjJSZXhaSTA8XnpgeTJCeG5VTl5HSjRkWCtseUFU'@;
put 'cyhTQzY5Qk9+NTgqX1pWPiU0SFkyb3FGS3JXXz46fWsjTFV7UmNiU1lKJnBdakFWcSQmTFV7Xk0/PXl6aEZ1KW00PW9PNEgqZnlna2ZJMzchJWReMy9BR0F2O1dbPl98JiR8MX13MXBgZzhhaFgmPVRHRzp8Kz5rTkZbWyhxJVkmdk1hQV1JX1IyIyNfNiN4Z11fRUZ7R3U2b003XzZCUl8hSHx2'@;
put 'K3g5WURNPlRuNUU8bkt5T1lHbHA6OFZrWFYwRWhvOTJQaFBdPD9dbnBvejE3MmRqLlEuWGpILk9NJnxqK1JXPz5+PyhqTlMkcGxMdXIrJFNgJTpdP0oqZE5gJk1DVFd+eU8lN2QsaD9lJmlJbDR4eXUxSSVwWkNAPTgwZSZsO35gNiNVbyV9T1NNLFZiZ2k9NVZTYzA+SCJwX0lDPTRReG5CcFow'@;
put 'PEdWe1tvTittbU14fGtmc0h8RT5Zb2hdRV5gNHxeK1ouVU53a1tJVkNuMiFaa01ZW300Ik14Py96WnxxfFhnViRaKndkRVJ6QThIUGQzR1hVUyNiRVRyYk1oQiUhTz91Nl5UM3RMMT00SGVPeXA6JT89ciNbI10leG1iM1EqYWlFcCw/VTBeTnU8RywuTXNqXy83Sjphb1t9MDdFTFNIbjgsVU5r'@;
put 'YHZaOkhMPi5NKis5eExTXj10Lj8wTkZkPlYwND5vXnFxWSUzZDRQSC9pKFYxTDRpIV1TdyNhYFQpUW02TGpvVlFdcTwrI08vamQ1TiN4KCxydSZiXnJhPUt9K0U2P29iQlpMZDg0ZWk5Lj1NSDB0K31SdEVNI0RCJEB3TGxoOX5xOWxTQG1GaUtDUEw7XjZTQ1BlamE2Zz5GVTJ1SH41UGUoYV00'@;
put 'Yjkha19ELDI6WlFILFJUY2tzblZqWGByJmBAb2c+WD43U3BHNzlqfUNjQ2J4RDE6O1pGXig3MjFLcHVFeDw3e2VscWs/NEkwPyo0ZWg9Vz5tM1s4U2xwVjheTk56LG0uWTk/PS54fDB4RHIwMmwuRnVEak8lU1FjUk4hVG9WSzRoeSJ7eiN9c0p4WFVmQmxqNjMvR0FdMGNNUn1TPDYwV3g2e19g'@;
put 'eWJPTDhUSzh6cUtYNnFLMz1ZRU0+aUR7I19vcV9UOTw9P11Zd0EoTEpEM3pGXVdYfTQ5X2RwYl0lNj4wT05JZkhOSVtaIU87WjJAeWFCdCt0YTB4VS83W0ltUylqImtPSW1sYmE1ekBMZUltbDdhQ285O19EQyMhW3lAQzRoUkEvVkhrdGl8YFVib0BTJnF6UTlZe1RHLExPQmkmOlNwTHBxX0lP'@;
put 'WkhzPWJ6dWQjYGtjTS4yWFgvKFEjS3NiaH0/SHA/ImZhUXMwSHJMQzY5SHA1Ylg4Q3ZsKnFxMixeUixgNUk9RyJ3fjZDek9oZSh5VWRmO2ozSz58OFAuXig/X1ZhK2VYUXxsdC5QXnhTM0pLMEtZZjRzSUd1OTpgfiVXLHk0RSZnKj9VQFhCfG1xSFlrPDplO2t+ZztwfHdkXkNoLkU4ViRdQmhy'@;
put 'MGEuPCFobWRkPjNnJjQjJG8lUG55cjA7Kz1MdWI0ZCxWL31NRDwzcCNiMWROY0t6YE1uU0gwe1Y8ZVB5SDBgbmV+UkRNR1JZPm1LTW51O0haOV9gRiZgJl1ATGspT3lLSCFVNTNwNlkmX259QHR1KDxiXipKcnF7fE1rIzIlcWl7TTxobGpteyt3VGFvW1hIai9idywrMm5vW3hXJmV4V1h5M2lW'@;
put 'IjYyNUQyaz5NP287RHFifC8vPT9GWSE3VitqQFZ2XV9wSkdhJT0uRVtAPHREJjZSXl9JQkZ2Zno7LCMrL1ArJm5rVFdkNEJPaXFeTTxNcmBrM1d4TG12bWlHcChnUWdML3VbYDM7Rj5UP3czXlo/OG9kVHd7e0VNQmhMQChNbmYrL29ReEtgMFl5UEg0OFlRUyJNIUErX0VAeCMiNl41PzxsfiN+'@;
put 'Mzk3citBOmF6MVgpKm8vc1pgLnRVUWxJPGVOR25sNWtROEhCWTxARjJ2eDY5UUl9WH1mdGxyVEV3fHFvJlgpQXtOXyRZTEtIUjZUSjFuVisjXmdkUihJcXpmRmQpUChCRy4wajMvUUU2WSgkP0slYCgoPVpALF88K1NlJGNrczYrQFEoYDlbVGxxSFMqIUtQT1E6N29PUWBJZVt6MiNKXWpmUD0s'@;
put 'KjN7QDdhN3E8M3lPQD8/Z285PWFAMUA2OXlreD80VyY3ejxuMi4zK05TQ0BQM2JgOFBRO2lzT1NefVQ1XSNPeW9GNnhRemMqSnUmUFtYTXwoemQkUjE6Qi5YcGg6WFYmayw1OjJpWmBiWnhQQHUzYlhaelVpei5HTHVQISZTRil0NEdQRykqNDQ6fjUzbCo0UiwuTUhTeTRPa1U1NTNLO3BgKDVq'@;
put 'ZVtnTCVkSlpdO29FMy5PKTpNRD1nQndZYyJjdS9xVTdSP3UvUD9Ea0V5WVl6MStfcG40Pm9XPDchImdGJls6ZmF0N2IxWjw/IWVzOmMvJjV1Yl06Nn5TJndtei83UjFbZzs7VUd3MHZxSXIrdF40QGxNeEFFYD83IWlofGlmKU97eHtPVDg6WF5NRkdqay5Gak1weHZaMXMwQWxXXnhjSW5xcVUy'@;
put 'eyxzJHt6UDVscm5US1lCSns8JD9uNF4lNmxEQDc9d2Y2VzdPRF1BSjlgP3BjKWZ6SXZZRT9wYyllRztoSUc2a1tRYCVTYW5dIks3WEBWc1B8cU5qRlo5NH1aOzR4Mj9eZT4lfVNTeDVnL0s0Yy9Ne1suayphekhgeG9FQWJpJkNqT3xxQ19TNnhgLnx3PE9iVihLNnNoOHg7NFRdV2taNW4wJXFN'@;
put 'JDxOeUQzezZTJjxYUHRQakMxJkAlK1E8NiJ3JTcpaWZjUkchR2IuJXwxZExePDduIzJwMD5fKzI0KTYuaiUuPUg5UztLa1EhcDo8V1ZjZTQ8Lnl9Yyh1Sl5yKmgqIiFuXllDSTJTL0V7IzdYREp4RDosZSZQKV1gfENTZD4yZHljczVoREEzTjNYaDl4bSVOel8vUTohcGpedkJIQH4hZVFfYXMw'@;
put 'TEVsSng0dCNRYzNTLzcldixQO2xdRj5YZG5pP246Sz9PN3BbN3AsK0VXOj02TWZEfl9JYnNeY1RHUHxHYXw5eD8kUmt2R3hjJll2LmE6NjRVV10rNUA2UztyWlpYSW03IlZgP3AkPDxwJkJfZEpOdXNxcyxzcjlsZC8obTwxQ2lJY20/enB7LlImK3VfXWExbkM+UzRheHVDP09pKVFfbk0uQ2Qh'@;
put 'aFBEalY8N2BeMHc8NTB6aXYuK0hYYmVRTHd7fWJnOUcrTEtMWX5GIWEiejU/dzRxeD59LHZJfXBbZiZ0aT9gWEBIYHMsc2QpU3Z4InZBYypDZ3glNChpN0QkLHRmPmFxVlF2fUchbzNYc1NyUlM0UzBpeTVqc1tsIztuRE1XJDc/dCxKTiN2aFtaRypAXWozSV9DdnlWL1hNOFJCeERaRW1YPitT'@;
put 'aTcrKipnSlpwQSh0VD93M1tdNU9kOytPP1hwJWAmOWxbYiZ2RDluXj5VX0Y/Zzo1NFRxeHxrTmpUZFBHP1BpVChIXVJfdGdPQzcyTF86Tjd7Z0ZEKEg8OEFbMWRfR09VdG5MPGpHVDdjJC43NEVucFlpeTRgeigwfU9jI2ROPip9SlQhfH1oflExSEQrOH59YVJwamh2bmA1cDAvUXQ1eilCIndp'@;
put 'IyU5SXQqP1NORXdqJiJ5P3YpS1psT1pTZiREPUF7SjRbWjRvcTpDbE9tZTRCS0NoRjcjO1hKIn1ZV0MlciFYUiI8KSJxaUs1KWRJZ11aNEYoREhpWWM3IllnQzkveFdKc3hRR0BVQDJSbjxpRjcjSnY6eW5ueEZIalZRJktabFN4MUw8JDVBR0JJaXxxMVtOIndZTDxISEpMS0BhSWUhPlBMKlV4'@;
put 'VyFPUjE6U1BnQHA0U3l6WkxkRiQyWTc/YEsiUlRIYioqRC9RO2FANDVxOUpndX0peENeNn1QcnljSjpqOzFrZDhXeVF9K3NsZThMP01oOCEmcChMfmp2PXIrc25SU1ZqSlljfGRmW19XQCF7OktxdyRJYHZvVExUUTlvdSR8Wk9scEdjc31nL318RVFuNkJ0KWM4d0JvLnRUbiNMVXt2fVhYV1JJ'@;
put 'SFRkO1UpRzhUQy4yNm9ObTZ7dztKNGFfZDphVi40eHUpbTRFXnEmQDN2N09BNTFKXmYmUSVwdWtZdFNnP2Z1PkBwS1NGRFdiWiN2OSU5L1tdbzxsU1g3S2VOeHUuST9xJS5CZjUpW0d1SVd+eXJHPTRwI0NjOEdQJURBWDFSdUVdUGNBKH15WCY8MC50YD17T1omfEMuP2ZYQjQ9MWBjS2RlbEB0'@;
put 'Z1t9fHUzT3pvJF1abnVEQlArViJJQCFbfHFlTGhiRiV5dmwmPWdRRTJLailIUSlfe0cyWV5ic2BPRk1hdk8rMk5sSi99VHdsQnosYChwV00uKjQ0d01Ia1Q+MUBgNF8hfX4hclVJLCNnWFs8OHk/bFUvWm56RTomfEwxWCsoY0x+WWl5eH1hTDp+fXJvJF4lfDRCcV4pUnFzemdIKDQ2fiU5aTh+'@;
put 'ITghO2E8KFV8ISt9Jk8uMFNBXitDaiZPaz50LyUrZ1VidEpuQ21wODkidkxqQVguP2tseGJ7WmUwXnpDX2kyVzBqWWNgLFlBMmNSSGZieDR2PXxIXiUucFhpR3Zubn4obkRqTn00YDU2WEhBV08hRDQwWl0rOVNQbEwwcmlpUnZNKyokRUdGeXZ2TUdIQXZ7SUMyL08sZ1RdejJCW1QsZzN8bkEy'@;
put 'T1AxR35qUHQpZEtPVl10MGRKWDxHLCY7Z1AqOXk3VkBXN0NVNUdZaTs7cXNsXlk2fjwhRlFtMnpGL1lkQl5OPUltPHY2M0s+NndhWiZkdHxnMilxWnxBamhrNiZJYz1FLFpuakE6Zm9Ae3djVlJTLGZvXVFaeXw+W3xndlcialsvUzhZbnJefjlwSSZqTD5YXiZPMD12fkkhe1F3KVhTQDFXe0x0'@;
put 'USRGKXI9dkV8MVc7Y0lqdix7P158VSwzeXlie3N5R0klY31iNFYhblBVL0FkQTpxNUp4TDc7d1tmXnxMXVkzWkIvQFpsUGUlQjBCUURObiJCTExKM200ajA9ei9oW3t5UFJdKj1qUXBsNX5GcGQuJHVyJS9tLjgrW1psV35EXSF8blRkRiFGdT07ODFsPVMlY2peUFcyPXpmZmMkeSpJMlA5S3c7'@;
put 'OCZid11tT1lhd3lHS05JITcpY2lUZiojOz1NeTVuXjdnMGEyREo/a34pYTpATmllYFpyc2cqOGQ5QDkvLkRCXXt0d2tJblpnKmcrTihPOz9+S0NYY1JmODEsYyR2JSJVUjomcDt3V1RuTWc9dCwmeDNtfm99aE9nUiUqPTQ9SGQpZXFNOThgTmh+YXVPPU0+U3N1b2FyZyFdZGR6RmZpXmU+SDpA'@;
put 'L2VWPkMjal57eERHSjlVZ29UYWhpOjYsd3hIXTlMKGg9e1g+TD1AQmhySlJkOyxMV2JmQ3RfO2d0LF40TH5DfjBta1YraF5tXVVYU3x4TlFiYDZGRTMyYzo3amAhP1JKPFYrTkU/RUAjTFsuPCRuV0Y4fH5VfmB9cCpbe15GeHF6SHdYSFRoNWRJVj5gNjZ3NSJAUT4mQVVaRV4oQ2JWems1Vlp2'@;
put 'e2QoUT1qUXl3W2tybC9PbDdVb3VTQzUhMlEodV9dVSFQMEJddk9bPnwlLkB+TXlVNSwvNl5IalFAZEUseiwuL0dmaGRuS1ZPcVUsdF9nI1VPP3Y3TlokJVNsfjIlO1lqUisjdXd4fiVBVih7STRvbUQ3bzI2ZyRmTDQ1amc6MUBzQCUxU15DX3NiX1NOeGxiT18xYGlrfVtUQmp5Tmwjcz8hZ21W'@;
put 'Xm1UYHBTKH4/WFh4S0c1Lm1ZJHpCMT5VczAkMHUiezgrUmRJeXIqMSxyc2wwI1glYiMrS0UvIWFHVVFHPVZQNCwqYGFHN0xtNHV8dGdKJW51cjNnVmQjLzhATm0xSnx0fi59VCheIjVscEh8aUorIj9sPD9rbVU6TUw2REIvJTttazwucVBJRVBhPjhnanNMTUBvazgyYHQvRWI9NyImPnh1cjRl'@;
put 'UVs9blYrWVJbKWRWcz9uXW8wT3gvW2Q0UC4zTUlaXXt6bkNHd25hbWFRT1QwNDhxbjJAJT8xOWhraXs/cHYzeT5PblFWPlJNKFZgT0ZXM1pAc2NmVGEsd09hZTdvMChLOUhueD5PJWdxWHc5TU5zSSw6cGQjbDQwR257KiI/elRNZ0JgdHFfSj40WlZOKzt5STlpTTl8N1BqbnNUbixDckxFWzlE'@;
put 'KUxBbmIqQUNDRDMobis0eGJeRlhBZD5yK2U4OEFFODJ1cXI+ak92Oy9gdTp7QnQod3ZxTyQodypfOT03UD17VCEycWt4aThIekhEb0lFNi4vZClPaWE8X0klVUptZTltMGhpfik/JD5UYS9WfjZLJmNNJD9yTk59TWo+XiE+ZDM9RF4oellLLGswUzhHSkhCSDxHQzBBcWM3SlRIVT9aTnlYQ05P'@;
put 'I3YwNFZNQldWYSp6WkoreC9mTDsleiZaMW47WnZ9OWIyTUlQaG5bV0hQe3NtPG9EKXosPXpUMipXSiw0YDImUisqWi9BMGxWd0V8cFFNcHJra1R3LGpJcjJ7RSZdbzZLS1MpM1dZTUhueTFlfW1yfFA2fCVlZmQsTG9MJmpZaiIpSmdTdll5TjNdVltXMzg7WXNZOW92XWsvKlg9Q3F2THByRGZw'@;
put 'PndLSnElbTN0dHk6KU9vYy9ySj1MJExSPFZZdX4lfFA2M3k2Sj5qfm96VWJRQ3dybTMsfEAuODx3N1JCWCRLK1VeJGBuQi4kPyVuL2tebzhpUVRkOUchOUAlVko3YXkzTGZGU0BbaXR1QXk0bXEqJGpLbCRpQC87eHBDdUpSVFg9WXQiVVsvP35ZO0Q8N2d1WTttQTVhXSUyTH1VfXEpdmBYPGom'@;
put 'QnsmKXdIUyM9Y0FsT1BzIzxaS3lQYD5JO0BPO3ckQCozMGJHO3trJiRwLHApJmI4W3J3ZkcqI3BTPn5nZ3llSzRNaUpEISFueXJdU3BeVSE9LCNpPmE4dVk5Y3E6WnVycjBye01Je2FIcEszJSVxQH0yWiUmKVNifDFjUCM7emdiXU5UT3FxTSRQIjBuNm1OeSV2LzU1c2I+az5MfjNZUlh4cU55'@;
put 'JURnP1pdXlghTFJ9Wyo7dW9SZFtUWUJxelgyaWsvQGdjNVVZVkE6JEA0Oj5nfEZpREFlJDF6Z1RiImt0M1k5PVh1YUE+UGVYLF5MM05CX1JiVSFKWVRqYTtReXFnanJ1e0B9MjBGYGs9V2k8eHVpbTN2QG4hSV9kZyR2SWl9N3FSMmheUUduYjs1SVpbbj83SUl0JWUxVVZSIyoraE9ITDJTSHEl'@;
put 'alpSa0hKMTAqQlcqV0V+R29dR3FHVCpUZWxRR3xrcnkpUlVoWm5KX2lrcWshUWo1bDp2KyMiWjx9LGoySy46MmJqK0lvL3UsQltKKEs/KHh2c1Mpa0xMSlBFYCVYOXUrTDA6L0o9QyteTFt5UiZrNiEqS0AkTTMsSntYSExdVk1OPHY1e2BlLG06PmJaM191Vmg8dTA2JSVbJXg1KShUaj1nSTlM'@;
put 'S2FOZ1BpZWhmIm81YVVBcVVwR1g8MHNAJXI2RzhKZ3xHPyF5QCtMTHl0Q1lKW088KFRxIjd4ZnleIXQqXl5KSDl6ZnleQW9jLEsjVXlhOzB7fCQhSmZgTDdSYmFRTkl9PmxwQzk+KSQ/T05BKGBASFgqNkZ6cTc5TGdzUyhvcihGdnwiSmpzV1g9VlZndz9UYnY9fVchZkZ7PkgsRW5dYlZOREl1'@;
put 'KGdQRnJRe0t2Y01ZN0s2IWkmUGZpNyt4P0tEPXhKYVR+fWhKTDQ+VWJPb3NqKkZjaldEN0JMaXVpfEE7LjZTLjhlM2ljJS9RYGB1SUtffF5qTzlEai5DaCo2Mm91VGh4MWVjJTFedGxHYz9TbjNFbWs8fV9jXz4+TmxDPklmKW5OJEMqbUp7b0UwbHo4dWs4Ri90Z3A9N3hCJmpYXmsmXzZ3YitW'@;
put 'fU14WitFcVloZWVNZUA8YWNFPSomQCptYEtGY0Y1Sz8qPjlyJFMkdSkreDZULiNxM05dc0tUZF8lVHIqeHxAUy43PSshem8/a1NwPDhnVUdJMyVTIWRHOi5QK00zXW15NzFnb2dDR1FXSjclRnkwI3csXjRMaDEhTW5nYSt2K2E7Uk5MO1dYaT4jVFhGR148NmIifSl+KW5zcyghUTkkWyp1SltX'@;
put 'KEklIXg3M20qYjksPWM8XlU5KTYvJUVUPFFEazU2YUUmQD5vaCQyOHw1dUpRUl08bS87NTxDTzNEMHl4SSwiPFhKeTc4anhESUhRT2djOnt4RF5dfj9uUWdjJDRqWCx1K0VyKSg0azxTNihke2NEXVF7e09ISTZASHBjXV5kdk89SFhhLip+M3tWcD9dcjclfXU4M3JnPyV8Xn1mc2FTVT9dQUtW'@;
put 'cHd0UkkyM3t2WTh5XkVnQl90UW41SUpZUk15LHR7KT1fQmhjallgZzxEP3YjbDsqPWc8aGpmKTIvdXJ7UV4/NU8idWc5NERgNz9vK3FKcTNxVm1pQyt9LHA2NHFWOntDKkVJR1lAQ0ZkS3VOZCRxSD0sdF9FTVRSfjkmeU1iI0pxbWNoKjs8RkRvM0BeMUxKWSRxe2NUYFtuMiNSRnA4KUs4Jn5u'@;
put 'VXBPaCNMSFlOJXJNfm9dYDVDWmpiP1pfPSxiNnd9JVpWbW4/aGRLMmJtaCV1S3Q6RU1mYW1wbmllW3kwUDlyclFlfk9rJjZiYTMxISEmfFZ8eiticj9HUCI5ezc+RkN8WDFPbTt6fkIiJWFqXitWRUEmNEtmdnFAenw0Z0FKQyFGJnlMWkl3JnNGfGRzYyVUVSlickJXcUxKNT1kbm1FJlFSbVou'@;
put 'VFNdK3FMU0clKjxNNCRlUXFXTSZ2bHl+X3ZiK1JdXV5gSkQ2UltGJUVrZW1hRT9IcXd6WXhyKzIxYSMlJj5RRzopSmA7Ny9VNz13diUiTEopa0lwfmJvLH53MUAqajJydCF4TXAhJGJWcHV7Tz51KHhHVz4qJV0qSChkUzI3KUBWW3xiKDE+Yl92ayE5Rm5BVU8sS2loSDIrJkU4SF44Ujo2Z3JY'@;
put 'VWE2OXJWTkY3UT8kc2g4IkpOdUhxemB3SkUlISFsWypSfFJSdWRMT3h7K2cyfSE+cSQ+anlIIyZ4QHZPb3MwJis3c1dzO2J7VmZGKkN5e3VdRCxBMT9GTGdOYTFBcGAkXjtkLmk2V2o3Ly9uMzhtTj9hUl09TzhbWXVSXUVJSjYkMmtvKktnTj4vO0krJm5RP0BEI0VxZiFJZCYwbmcoNiY+eWB5'@;
put 'eVR8JjBbNmMsNnh+XkVxR1tNe14hJmAoQ3F+cSpzN19UQUtCeUIrTypZRH1kL2pKJCkycGAkOHhmcklMM0VURlg1PS8wRlg/ck5OWi8uKT1SQml5NipTS3ZuZlFzVzxlPjwhTDZ6MCIkYGtAKnxxSzZaVndsPlkjLHhHLFtVJSZ9aSppazdoTmxKMk8oQG14PExmYy5gNGFRZS8+UStFansheiZb'@;
put 'Kzl0eTtRaGVFLkdoSy49bCU6aTBkOmZkZzpBYmFveSU4OmkjZlk8Mm11YWEqNVJSLH1KdDBnPWxrW2RsN1Q7QzM+LkA0TlRCT0k0ZSw4bntBeiZ4KiYrdWIoL3BdPX5DKEZAYXcmOEZDczlENi93JjtAMip9NnhVYURFWkNHLD1ePHRxXk4qL0xicXV2T2pASzVmOjVtV1lCcXslb0UhTT1AV0Al'@;
put 'LHRnezJCK1tAVlg8Rl94M31SLD91M0ZWKGUvdkMyd0FdbFgxfktpZzpOcyIoW2BJNWp9eDVdMixbWjNIQ0lOX1M3R3tROnJVPE5bRjVTOWBwQGNPfmZuflVGP3QlM0VeQltoPSMyNjUpNy8uXlZlNU9pTTp6cGZPczFPS2ovaiMyeDVSaHtpPkREMkBebS43QntAQXUjN01VPFVbMmNdeU13M0dx'@;
put 'JiU0cVhqXyYoUUNJbFBtPSIwMXtINVJlYzlsLHxFdHNAW19ZInJqIUsyOVFyTzhOKFVBTHh9KG1hZztLXzs2SF1gcEcoZ1pqendSNXtYX0UucmhsNlUlZ0RvMX5MRHB3STd3LjdvcHVhPzdJSXRSPUxzfEUoSUw6KSkkYWo9VWlSJFFDNSErW3I5YG8mbkprMjg+JGApbEdgWXRhdGFkNmRnW299'@;
put 'N3RYND1uZ3RsOzZEMT59KERRcSpFbWBRIXdqQCpeNE56O3suU2xqSG1xYVteNHV+T2hnVE5PXUhySnFnVjVWaDdPRihPJVBqM0h4Xi8+RyNPQjlpaFZGJkk9b2ZLcDA3RW48NT5tTU9pVzNrOip4bC5tSDxENDl9Sns8NjQ9UDFWbV5GVW9Kb0ZMa1d6S3NjWDtKMl43XXlmQSg+ekFyYC9DTGhq'@;
put 'IURJbFB3c1kqbjVjNyZMOEgzUH55LzFvY25jcn03L3gxZl0pZF1OKkx4TG0jUDJQNFpZb1E4bTFYQ1VZPX1MakoyNyR9JU8lUCgwaG5zbz9LeEtMfStpOWJDaXheYjNzQHtFZHc6eHl0JW5zPDN8PUppPnBdWFRXVXNsVzBtND10WjI9TGl7JFZGWG15aFBlfFV7a2A0dGFpLDsmLFVNUFZLaHk+'@;
put 'Oj5UZC80LmxgRHI9ZCNMcWNnVlZOX09NLj95X2EhNCM3alg3P15TQUpYPHFDK1QoWD9ve0NfTz55NTQpNkxgNl1bUWt1KHliSE1ZVGZwYmUiQ2kvYlJqOWRNY3F1VlZvTDgrVEt9SWlHYXY+VD95QDE+eWFZWmo8YWRNWlhNN1h6Q3p9dCZEVWpJbk1YX09mLEE5KGpMPndMImU0TChuQSROSDBZ'@;
put 'Yj5CcGZPVUx4SGcsdjl2JW4/Jm59N3s2cmQkdkdjbFErNz9kRH10MHRsYXJBUzxMQkthbntISmp6MHwlUjc1dik8eyM/cj1hVyY1Z31eaXN8dThreGImI3I1TiJMfjkxaXIxcEFTcnd2L0FoeW08ZnxaU1UqLmp2N1ZCMn51fEt7KnY+Q194UFEsfEBMfko8NTRzXnImbFF8WD5YX3hSISN8VXpj'@;
put 'OWE1OWFDYz1kJVh2ZTk4eCYrI2BrPSEmY0NoU1Nwe1p3Wi98S21gNntkOXBqK3g4XkJKUjxHMndMWE9WUz80Xy5UO3k4KntscTAyMUN3NU0ydzR7LlZRLDppd0YlJDQqYk1PTFpPZHRuKmZSe0lTVnBmP1B7I09+Qk9fb2JRVE9fK3FZZiVYT2tGYz1MRjQzbDo3fTxtXlNkTnpQaCZuSnhvVWkq'@;
put 'N0pGQGglK3VFJiRLJWF9IUJTKyNoOl91X1VAbDFlVCV+ZF0wOUYzOlUoYyZzYHVRNyQ7Kko4Xl1aR1k+T241ZHM7TnNCKHlaazUpIVouTzxmPCp4alh+ckUzXXdmeXQhY2BZajZyJHlgKlh1JVpaREdeYUg8clcsNCxBakl4cmdhTTslPT5HdXhTRykqJXF2ekdNfGlhLis/Tl9gV2s3KkJdVW14'@;
put 'Uyx8L0VkfWdhYyxxWm1QIiNga10zenBbYDt2eEc3fTc/LmtpX35UVDJKJmt4SCYqcVJTbVBbcjNxVTdxRCo9aXJRRyF8fXw1QFdAKkQyalJHSkdlPVpIeXJRRzJzXmV2PnReXiUlUCx3TV4zVGB0Z1ZmZWtXX0Y8NjtASzBWSXh9SzNZeXF2JDomNzN+TzEodXVfUXtPJG09JV4jcXQrVzZKX1s/'@;
put 'TlF6RWZxR2xEJiFfLD8+PCIuJTQkZlIsMi94LFVsVSFNWkhUbSgrMkIuIVZWfSo8Ozx2ZG1zbzFKJiFlP2VeYnteVDBgPU9EXSV8NGgwO2xhZX1dIXxqbVhqN1haTjI9OjFtMXhTOj1LX0VUPGVnbz8hSjJvZmFQMyFnL0FyN1Q8WUBDaz42VypiWmg3QWg4alA/NDk5PFE+NGIoZ2sib0AvQV0p'@;
put 'enxnOlhjfXZDSlEwUT99ZjFrPXBAejNGaCJPTG1WZnU9VygjOFZscHtVMV9wYE9LSTZGfHw7OXlMamBBWHpdOUo7SUJfIyV8bzpYWE08ejtFbXg9ZCUxKlNTSmheQHYkeHpZdWx8XW85aXFgX2BiRk1qIzxAfCl5bm5zbktKKGxMMG8qIzRwRH1WNXtYVTddWnZ9PElCOn1teywyU0BiVEszYFVI'@;
put 'TjVuPXU6dFFsYTp0OHFoRWM2Vi4vMUxFOFMmeyo9QjB0bmUjQDFOKXphUyFmSyxPVUU3YEJVWFZmcFlrYFN2MXByWUY1K19MOGVOTUZfOzUrUmMwU3ZpL31YMyxXdiFIRGRIVC9bIyspKlVhbDBOXmVzdzI3QntXMTYwe3J6T3tDT3FydkNHZCwqW0lQRThbN3o/PFRwVUl2QlcjSlNNeWl3P0os'@;
put 'aCp0fDYzZD1EUTUmNzg2VmohRUdUcnZKRioxMSlVMUw9b002UCt2L053W0o6cGZPW1NwSE5OUWEqTnBJX2VKLDJ2Tz16OmU+XXlARnNnS31aVmMsX3J5K3J1dXFrZ142aXMhNStDMk5HQmZbZ0t8XzZQaG85THpTQ0hTPjAlKTR8PF1FYXJBYU5CP2U6dlFtcSMkRjNvPiQhbnF4MjJAJC9gXz9g'@;
put 'V0ByInZKaWpPe0EoWnlDfC9iWkRibkksJl5NWjxAMV10M2spMWM+enZuV2MyezxJalgqVH18WiFKfXpCIURHKUVVWDxFSTNARkB1YDV9fj0+YUYjYn1AKXRSKlBqJXR5OnluTUl0TXsxdkQzQEIhT0hpbSFPfEU5VGVnOE93V3pARiF3WUJ2TFdWOHtXS019R2NEYFs7JlZ5b1h5USZAcmg1UFZ0'@;
put 'fDhtU0QvSUJXL3xUNSpkZzQxcDBKJWgmUGQoNmNNYVsubWB6MmI4PWFEXVU3O200Z3A+ZUVrVERuUDlza1Q/bnwoUkQ2OzQ6NH5JdXwwR0lPbEtZdzN4Mz82OHZSW3k/SzxxQHBDMl9zS3FPZDZ3e3xtbkVvO1J2VklAbFIrRUgwfl8sJT9vX2RVRWNlVUV6cCYiSXU7Oz9dRTZgNEQ8alBFWF54'@;
put 'aT9jeDc9azg1JD81O1Z+Iy9tZnYkXlEiRjo+cGV0QTpzRkFQKHN2aX5RfF55NzUkIUUwdT5KOWNmeHtlRUV0Pzt3JkBGVHs0QHhPMD8+Q3FXbilednEjN2UmKF9tKi9jaE0/T0ApYFsxSWB0NipjQmZIZzkhdnVweXZgRVhFenBoPWp8NyxwVVl4U2ZNPztbbCE1L1o2LGgmSyoyNERmaUkwSXFJ'@;
put 'KCYpdSshR2A3ZHp4Lkd1RSVaIVhNSF9NKUl6U192UihUWl9AS2x1M1U2YEBLWXlGdEMmfT5uWEt8Xyg6PXx6Snw/MHUsRH16PzA8KzJnJm1fQ2lSPnByUyVsI15SQ2lXaCxUZTFDTEFAPVk7QHVWP28sdjJMdlpwWzlbWEcmbyU1IkxKWWBMUWVgRmJARVg2MSY2ZHQ5UH1oWz1+KSteMDIuT05l'@;
put 'W0h+czVGJW4wITRNbE1NbGdWLnFxKz9XMkA1NXVoWnlUUChqay5BUEkpdyZBaklFNHY7el4/KnJxSHo5eVJrY05VdU1XUjNhMy56TVtwO1AyQ3RYWy50a15qPVU2QFtddFVORmVOQkx2JkcpdForP3FaLH0hMGJ6Lk9PRmdmakU+b01YQlIiTW9+bzxUN31nMF9IakMrNkhVW0ZacysrMlJBOUJr'@;
put 'PVNWPm87cDx8Vy9GW0ZHPzhNRGtMXylmcXM/ZGFKRFl4LkYxZUFXd1RqPnJDb3RQSFlLLD1aRm8rKCw2O3JpRlpSRzpYOGloUUVAVWxhPHBaWExERmc3fExTc0h8NURdLmVoSlh6e1hgaj5PTjdlWTBtWWhNaHFhVktBMWV6VCo1JUZkdUU+Uyh3I2tJR1p7NmYie3gpXyw9UzU+TVMmOzZBbSJP'@;
put 'QFhWfCR3KV86X0FHdUk6QjUwQFdqYj1PPXZpTj9iNVFIJmBBPztKQXEjQX5fenJ+Z1twZjlQcyFEb20mfVZQcm5zZiU9XjpZW0lsbXA9aXg6fHhIZ1sxXXQmYGF3NGhxWU1xUHRQJUw9ZCJxI2laYDozenUiTHA9ZDxqPil2di5QaFZNOC42T0I/UEo7T3spMEw7VkkiYyVWZHkxaGQsUEU3SHdZ'@;
put 'aGhkdXlwOkg8S05CUjdKV2gvfEMqPkd1SVJhe3EqSi9Wck4+OnNJQ09hKS5UP10oUm57NHAuXnNJQlImVTFlYGFYfltOXXxlMkN3OjVYRVh4X1t0RiUrZnJ4eWFQViE7RnlMWi87d35RODBBbEcqK15+RGNdKVNgPzU/PXhXPCN2RC5hQ2p8JFRVWGdTPldYPGtIWjB8LypYUkRneU94PiQpQExs'@;
put 'SlUwVTtpPUg6ZGNPdzg1RlJeRjspRmI+NylWcXxuSlM9ZVt7Uj8iUyEmQCokaz9YfkZ0fGQ5Jmc7Q3Irc0JKSkNycT5PMEU5Wy5xN2doOmJ5Q15Tb1VTbGgmcm5VTnJRVkc0WlZMQltyPEw/SlssJjUrWGtIZ3V5QjcsSmRnWUgoKUN1X3xSMWN5VjZ2OkRvRk5TTm07alhmMlpmYCE5I3RoQF0/'@;
put 'RU1DRD48SXpJYHkuNTA5dkpuKmJ4ZjV0S3lKTWFAXmxyZUghbixaanN4Sj90THlgK0tFaH0zLEN1NVlHSXd8Um1mO1VLMjlja3RrRSkmQyg2M1ZrKyJSSE9vJXg+QWhPNDFJa0k1RV8pXXJ9RndfP2ZhQFg8Vkg5SWxhU3ApSzxIfnVRMjFdYm5HKU0qVSoyY1QyMTooZ3wqMUppUT02QXAhMVYm'@;
put 'P25NOyQ8OVkxSVpIbGxsUTM+ck5CZjVRWSZhaTROJHg7bDxsMDcmRypCe2xoODsuPkAyOlNDRjg8XlZ5XW1eY3gyLnRAOjZtbCZBM2YuKGArLm5rRnxTKkJOZUVbN0oxRz1vUUlfb1ZqNExoRzpNNytFZGxPTzFaImhqXklQIkFbKlcveHxRWix7WWNnU25bQ2hIcSN4TX5dR0tnW0Q8WWo0RyRC'@;
put 'aGYqU2FJVlF2bFBQZDVbOlNFXSZ4X10oKiN1fDZlMGUmLytJeGJtaWU/NUAvRjo8ei43fXZ6M2wxL2NPUzNnY2JON2pxb0lnSHRxXTR1M2glYTYoYCsuM0tdWmlFNTA2KkUxOnoyWD4qQzZWSSs3XXVCLkFrQVNCMjxpMTdrU15pMz9mY0d2Q29jQEN5bVIjKmNFZ3htUixSZmxxUmpQIypNRWd4'@;
put 'JVswWHRTLyxiUk1fUTd1OUVYbS8+YnQpd0d3SENkTWFiaVkwRTpLYWBpcCopS11vPjY6KzQmLy9XTStQfFJtNUxqSmJqZD0qRyhJNyxlSnV5XThER1lAWFomVDZMSDFQS2ZoLkRkRURPdjEpdU9hRU92T05VYVVDZWBSPDFKd1I5OyJreXdRNWVWOTk5KiUqVyslTixgSkk0UH0xK08rSXhwb3Bb'@;
put 'ZnhbdjhVcSlXTG16TyY2LGxkZGkhbT1Ld0kjfkw/aiZ3KmlHOTpJIV1ORl9eTD51SV1IOXhlMVUkbXN8T3MvaXJoNmNEPGAhUTdoSXlaRztRWCQsblN2L2xFJXViKWY9Z1ZWK0YiOkNpOGhZMFhoTF1+PzdtdClfJE1gYEg8MHttP3dtK3ZxdClwZl5fWkdOUlZNWz14PXRjYz8/XV9MXSNKMkRl'@;
put 'OC5TI0Y2Rk5jO0xkZEhVYUJQRHB3UCUjLkAyOkBofFAkSDdJQXhlaEN7VjMqbEA/MHUoP15bWktvel5bOCY+a1lxOyp0M0VvcnldX1dFRFY6LCNZTUBwT2A1fEtNaTtgKV9LWXshUGttZWJiTUB+S3FqW05RVFp5QUF2cUcsfm1tSHJHPHo5d10wOCwlalZCL0VtNXZBeDZ6RGIpSEJ6TCxBPXlh'@;
put 'fCU9JmB9Z2RPQ3Y+azFXJj15cG1WMkp+XS9qZ05ZYlZdQTUqZCglYjZ1RUBYWSFgT3pAdnZ9ZzohLjRjKiVObn02VSM6KkpUQlpiMHhPTXk5RT1oZCkuUGJPa3h6KVVYayYxLFY7bnwvbHo2KkJdcjU6P19PdWoycE45dy9nbDdzRFRpeGMqQ0dRKjpuJHJraTo2d19adl9Ual87d201V0BDc3N3'@;
put 'TE93MmByNEdUQCN1blFvNWpzQSZHLnpwJVBMWnhQNENoUE0rU0pkdUdrYSojbG4zZUt4cjl4SF4+bSovMnRMcEZWNzhmTERNU21VaFJ+XUc5WVloUUw1QlFMfj1AJiYxNFZ6QF1dOXZiNT07aV5kOSFuYFMoM3gsQD9VN2BvW2lHLHdRSl5HMTV6Ijc5WVRZfTd+ZEF5LFJAK0xiVkQ6UiMqQ3Qy'@;
put 'OSVuLk1OWTdGKlQ0P3thL24kIWh7cHB5QzBkKENpcVpPP2dfNkkoM1N5XmF1NioyVk86NzBOOVUscSNqTFY/SiVMIXE6b2JWQFBGNmtIQjxjQypmVGdwQlUqP1AicUt3ak4+WUwjTjBDclV4M2lFOmxUNWVBd1RPNUl6dzMrQ1NLXTQmVEh0K2hlKz5FVEt4V1t4P1hAaytKLj9rdjQlMk1ebFUp'@;
put 'VWtSSEBFPHolckRgaWheazdpODhmc1lzYTpuc3A/blU7WllzKHZ6QlZITm1FUDxVU0s5eEFsS09JaiJ6PiQ0a1JSKzJPSVY4aCo1W1pQUFVtJWxhVy9WX11PKGElbiFPTkREYH1meSFmeTw4YipIdXdURyl4IzR3als6LnxLfGhxNC4vMXghX2A/aEdnaWI0S0hWe2hGTUw/cEUkQXNuLG5may50'@;
put 'XjQxSHUrfCluYXxXQDp2KkpEeSg5NUBbKCVdNiR4S0gocDVbeHYsVnx9dnc9WSYpIVo+K31mUj9FJSkqJTVLRDdmPC5JfnBITEN3I3E0NXRyfEgmWU4+bXx5OVhWfF52OXIlI2tEJCRXa14zVEpGYEltTDw0aUY8U3IhbGtzRnE9VCMoNjpVYipEXTpdcXErSEZSOnFjN19iRVtSR1MpUGs/KSoj'@;
put 'dktKPClFUiF+STVnWitAQE03emcrR35yeUcwbX0qOn1mbHZdeksyfm1Vbn49Skw3VElwV1tOfEU+TW9DJGtQeExiJWx4TiNLdztBcy4kRE9eUEguTV1jT11YM155SXMsITNqZTFaamJRazdJOylufGIiaGRaSUg6REpMcj5xbjB9Nnw6VlA5JFUmJGNxZCJlT3NUYTM2RT8rM0RqeHhOVGdpKyEy'@;
put 'UkZKemAlVDJjVllqOlJXSGl8cj94UVRnVFY/PCpLY3RPIl9haSFwXV1HdGVbQVZXWkRGfGtKajhLYmFqUz5WVCorZ1QyImVrS0l7SDNeekcuMndhazw/fk1mMF9GWGNGJmZlP1o0Kn52M3ZEMSEmMGB1OGJOak94Kz91V31yLnN3SnkiOXhgY35pYmNbPE1vPjk8UERfT2woVisjKHAudVo+JkdU'@;
put 'eHcidG5VSzVNeHtuV0JIWlMsRzZDe2pPeGtLJnkyeHohL2I4KWtbXTFRXTxMYmRYNFVtTnYxQDJaXkNkP09venFOJWt7L1lqK2tlSlFoXUVfWkleTShiUXFtRjtPbzpuY1ZVbFhVOHdlaW82W1VlWzw9YztJbF9IeU1rR0tARkZWTUFXcCY+Tm5eRWd1KUN5fSlBV0lXbFBURVU3RS5QI2NvfWFw'@;
put 'cyRzWmtVVDxwVWsmbF1FNlZ2K0RRRF9Fc1prfmcxJXVocis4OFVZaGU5anssbi9Oe2JPMDBRcFkzajsqUjcsZzh1OiwqLGJsUEw0SVIuUGksIjkpQFBVQzldakMkV0Vyb1BrQlJJMDQmUzI+MHBeNTxySyoyVztmPi9PaWJjSnpmPV07OG57aVFFKi9wemROamAyUkVbNyg3QWxIZ2VsdltyIW5Q'@;
put 'fH1FcmhlWDFVaHdQOHFoZWtvOHRtSkNJQk9EakRacW5FLmswXjA3QFQlaUZKdS9YXTluUDRsXSZAR1IlUSVhUWlbQlJkI18mQEdQJThnJjAjQGtnSzokMiYwSVJ7KmsqUSViZmlvNmY9JiJAIVJJSURgZGFaREo2WGE4TDh6MD9CcCosUmpbTjlnYFQsMkNoJElaenAsYG4hTiRCLFQ/Jk5tL0sw'@;
put 'ZHU1RHdiU2c/XnoxNCN1I0lFNVhsYlpUTkRIQiNTTGJkeHxSXnNTIkpIWnxnLkcwenRyaVE8Y1o2RGFdfUMmZ3MqL3deKE5aeFcrbS88VStDdnEvPFJrMmtjNUAmQitqT2IzLH11STguQiY0PiM3ODJMUk5PO1lTVHRLNXwpZWN2Llc7PFU2ZT1TcDJRek9IMHkoYXFOdkdgTyF+IVhoPWBKYlVG'@;
put 'ZkYkW2IueVFqaHkpeiRNYVJJPSorfV45S3lGUSxNU2tzMjt9QkJuMCxjUztYdn1ORz9+TyxjJno3ZCohamFBSTE6Ym5CWGl4LmZKaHNZeFNAal8wJmdGZF5vZGNdV3wyUjsmZ3xaODtePUMoSVhdL0lsTUMoW25ocnQ5eEtKciVgcE1pS29mVytuaGdZPTt5WFh8I3FrLmVaNWQxbzouc1FnQkRR'@;
put 'VHVRdllbeClaemQySjguPWlbNCVHWFVKcypHQ258JCQkTi5HdTFpaHZpMGw6IiVmPD98WyVzPVRXa0xUW2oxQS5SSUdrMCl1PmtuPGE1JTdTezRZMUpERUY8MTo6XjZVcls7MCg/S3JOQ2k1MFl1YC5vNlpYe1RNRjY6QDZDWHEvQW5DLn1yXnN4dkYmWzIxPENfRzIrL3Y5VyM5ZEBwbXlefDlz'@;
put 'O0A9N2dyKkZGNEtNLkJFQ3pFM3xqJjl0Nk0+Xnw0KHN4di8yPXBYa2U5KDRwellROyUyUmtFYDMhR300elZwI200fWVqTjBVW1hNRnhOPChdbHl7Vz58IXFWNzVxaWU2RVhye2pYMTxPZz9Le3NCW2pyblQiJVRLLEgjW31iZkQ0Q0EyZy8rI2lMd3E5dlc0P0VCVVhVZ29FPltGZn1uMm4ye0d6'@;
put 'VyZ8YT9WOVFoRS5UKlRFSj9AcjVuQFZ+fHxXT3NSWDcvJl4mQ0FMQDNObmlxcCZPPnUxc3klbnkvSEBBNXNkMVl7YkFwUmE9RVteS0xuQ0ByOjN9eSxKRj0zUT5FKnwrTGxfNFgmUEI0TmF3IVtYSGBaWGs+O0guV20jOjZmSGBDNi99WihbfHN0Ul1wN35mOHNubTspJGJNIklROSFNLiI3NVo8'@;
put 'OmBveF5fZzlyfUYhP1Vzc01zKUZkKCZxJntAfGFwJFhTWS5aPmVKbzU8cm0rJTRhZzxaOmI4byRRRDZ+YCVJKE1xODVyMkE+WX5AaixvYFl1L3YrXzshREJeNlZ2c2kodC8zfF9GeT5kXiFiej5mbk9iWyVkOGAoZCQ0dXQvSiNIOHY2fXxRMENPRWNNLDkhNDBYa0dCa3EvSXRPVTs0UWdPaTVy'@;
put 'RDdZYiEodmQxMjBvYnI6O3owKHAqJWUvNWBfNHg6ZVEsMTJ3VFpvTT5DOj9fbHosKjRaJklFTnNUOk5lQFEzYWxWRkQxSlhNXi4pakxZYnc0WzV0e2VbdWteejg0K2A2d3pxKzUlekpicj5PaHt6aFlqcyElIztpZEZxImA4U0EmXjNpZGBoc3BVSXJue0c0YGVbKVNSNm5jdllWRndhPzRCcm0l'@;
put 'YX1EWGs/RGZnd3ZNZyldUUZSRlJoJFtYZER2OH5XfTM1dXAuYXYhP0ZTMChVXmFvKHZDbUtBdmJNQypzN3p9L2BhSjs7ZltiS05FdSE/WSozZ3swfC9wRUxwQDU+MUwscXQ6IzFQTXY3RDVqeDYjW0lfRVJsSiYlVFB8PHpiQTEkRT19S3pJNGx3XjErTToyME1BWUs6bXE0NUFXcUVpNVplczpA'@;
put 'KkMlME9rYj5bfiksSndwQV1jXzE/UW5mK3RuZUslcCRpX282fElQO05KOzVOV2tDUmM3OUYuRyVnISFyVz0vaV9JTyomfDw7Nypwa0JeXkxocDxVVHxVTkMmIyFneU8/b1JraU1zfmR1TmFxRTBhXlZaOU8sfjJSSm5vfGxMMXlHIXg5elNFSHgxdk5rIixrS3NgZmsoIWAhOVJYNCl9Pk5+OUtM'@;
put 'PWBwfl9HZmZmansvUytFZ2IxOHlzaDs5dF9KX19HPnAmUFs6dX02RkVrSzVeJH0mSUMhcGdKUHlGR1cxPXZZNzk3MU07bmh2OVJ9UzosPj81NEJqVyY5WCZnYTE8LGFyTnhmNWM1ODtyMnFHdUlPRXs9NytNVTR4aWhZOUp7VmJJPHpHJkU3U3gzaEZhNVNyLkd0Jjc1ZDoleDImfXNoUUBie1pD'@;
put 'PytsK3EpdjJRaUApU2NvbSl+b2hGOnB6cVR5IzpVPEZ0aXlaPX43ZlN7V2ohZHVlY3RrQlI+cF1paXRFU3xDREN+QWU0dWNLYSpXdFZqP3pVQ1dsWHpuKyRfVU54MHsuYXRNezZRSFlgOzcqfTtibGpJWmtiPjNYTCs+KXxuMFNEaCklTUoxaDRMIml5Wj1pSWJ1dks2dWZSVFo7ajhkbkx4eE9S'@;
put 'PnBNX05aTVlAYjdMSTwyeEJfX3dHVSpreFl0PykvfXk4ZTBZa34mSkpUVU5VVD4/VCtIKU0ufHQ+JFFKWC93Jl1vS3kxWH5ve1Q+UnQ7Y2YkMzRdLyUrNkBJVmRKanQrQHpgciMxLk4/WUYkbCNlSjh2NiNYI0ZbNUNDKnZWQ3c3Kzs3XkZkZXhgP0dta0BoPSF2Q1UkRD9sTH5LVFo/b0UudXE3'@;
put 'MD43ZTpVe0d9RVtDJkJdUWdYPkVobGQwSVBGW0dgX1ZyITwlbW5AQ2VuaUsqfiZEWVp1LnR+WDBfe0dvfFhVbm9FPjEvRDJ0Q1NiU31HOFJvc0N3Vm51S2tuU1VlKywlZXlCYT1XZyRsMDxKMl43RlE7fkZgfEBgXVJsSihBLFRiNkdSS3ImImF0STBAWVJrNkAyJE9CPkdbezN6cFBbdyYkUDhy'@;
put 'dTpwOWJ6ZXhoWVVVLGc4Y1UsM35zR1gwYmBmJSt3TFoveko2QWt3JTI6dGtJS1JrQTdWVG1NQ0Rwb3pCUjVtOWNOQXkwUXpRRjZCSiFZTmEsK09GYHRdb3dFbmFUOkpKUTd4WnMwaTM7cUtJZy8mQ0EyRFFvcHs9KyFyJFlRSFZfMHFreSNLXlU+ImNCKEIrQ0JgVVk9N0YwLyJ+U150UXpmUDwx'@;
put 'ZHs9UmNKcWxXVSlXNG1GMDtuMjNeeX0zeys7cy46d2RLPVM6ckBELiNqUi9DQDtlNkcwQkAsRHZJI0hWaXd0MCVxTkovQV1CJCVDYmFyNyNqN0puU3xaSHVXLHh6TiM3RGZINjBdNShiUGkuMl86W1E6QD4xTVgjL2JvbHpoUXVEUzFbcX5SeVAzZzpAXUhvNyUrJkBmITlxPTAuMGlqRn0xcDxi'@;
put 'aktJUF41bWp8IiV6dCRfNmkrOTNRK3BkWk82NVdoImdQdCsyfGoreHJTRXUva2AoK1orTEV2Q0dXNXZiVGovUGFAdj9xWShFVz5rTE5iOlAjOWthRClCb1RfJTBzWFAxQ3UrWGJbe3owSCxtb2IqVXBHTHlBLHY7QGIwe0MqTGE1Z2BKOmEySDl1anhWekV1b2JFRzFhPzUwJC9STENnKkh4Ozcu'@;
put 'aC4rJEVROUgzSl1XOS9NMDpMeF87bmVpMDFpIkYiQz5AaC9lKnN7JENTal41bGxBTG9QNC98WFVsUT42W2ZvX1AhT2UwUjZST09YakJHOkd2d3lfZ0xKOU4xNXN9fDBiOTEsQDFEMmYhWWx+b2lRd2podlR1KkpSPHc7fEhQLnBTfEl5SXBoTzErKnZDfCtHeTFNdFNsMkJbeVNeTlhVPDEiMVY6'@;
put 'X0ozLFtIKjhtcEZ7XlBhO3k2RntJejIveyUkRXFZWWgid3BYe0l8XU9meixPR2NIWlolQ3Z3ekxuQCk2b11+d2oqaW1sOUg3bXRnS0h1T28rYFVjdHtKI3xqK1k8UnlaZGA8fTh5Kko3TnVVdWhAdjkzbEgxZ01ifW9YbyM1QntYaE4sM3ltSk06dWxodlBaUF5SYVMsI2laU1FlNWZHNlQ0Ni43'@;
put 'YFkzQltfb1pTQGVhb0dQZyxJLiFffmMzbWBvTi4pOF5LNCw3UmBpeFlvPGRldnhuMkxxVmF1WVFtPkpTYUldRU5WYSp6QlttUy9vWmF0fnB+c2tlZV40bHQrcmVAMyhPXT86fFIoTXssS2tzK3M3cz92Nl55LE8jLyZWdVkxQ1Nqb1IrWHF3O3pYMiZgRndGMjZIJjYpY1NOe1Y7OGxzWHlaTVE5'@;
put 'L1hbIUQqRmlYWTJVcSFLcmRpY10mTzg1aCYzZDx5KDNTT2UxRWE/Yk1pZnhLYSRWUGsyXjZTL0p2a1F1cyx4RSEvLzZRfSVbYWNlaChIdDU6YHFDW0U5JnIlcUt7NH1aNWkoXnBGaFV6MklKZjVNNT1ucyUwZCxkfFdrZEliKS57RyEvMy84biM9VWZ7fHx2NS54SFVibVZSUzhZJnZHd1leQjps'@;
put 'bXc7XkhUKyM7SzZ+Nn16UHZMSkMrXXIxIit5Uyx5U11MRD9IZnUlTTExVVhXbm5FKUpAR3UhcTxvbDsiW3NjS2RYe35ldExTSixUXUpPKTRqN1g1PnxDX08pMlQpQTgzREB8V0p2NFUoVDJFI2Q8OCswUkY6Tiowbkw9fHllZkAyLEJ4XjtSaV0iMUd1KlhNXk8lbzAiVXhZZkZdWkRgKH08KHBV'@;
put 'aipzKVkvMy9FKTxuRFh0UzU6SWNfMV0ycDtiOm8yWmsyZmtQMHVtJX1AXWQwQ35XWUZ7L3ZXbiYpcTl4QV9RUTc9PChxJUBweTRWUnIsQk4oNilnTzo8SWtxIzJwXkZuU2Z0bmwjXW5vYkJAVn42JHd7e09hUS5PJk0lP2MwV0BvJn1NKkZZSChqVitZJilUSSw6LjFjW0ZNeFhQc09FcXYqVy5I'@;
put 'czwwNngyOXg2JVA9ajUpaFJJPGRiSWFNWVBXbTNAM09XIntxZFUhe2dMWyFCT1c5PSZjOCtBcSYvKTk0QGNPIkRNK350M1VtbE5oQihGcmxuSi5mKS9nZyorMmB5IWcwZGVAZ1IudSEvRUtATUMyQEUkfCUxODQ9LiokQUl1WEIhQj8rX2ROMCIjdT88WHYkL3J5R3V6Z0x5ZzBiakt5I3E5ajVa'@;
put 'UHN1by9kflJ2LjdSWUJ+NX5JJGBWemkjIiskW1l3QHZBJC9vVWtLazNsKlJ2b1VrR2szbDVKO0Q6bnpOIi9PaSJDblA/cGI7KG4oTXssUyE+WzdhPzFHSkZvSUV7OitodFZfdUdTWzs/Z2VaRWc9ZCx5Xz9mVUdKMDJWUXNUa1tNVG9SbmxGMiwwajdZMCQvLCZgQ01PZ2NDMzxMNn5AQHlUZEZa'@;
put 'RT1hNixjYHorRChEN0FwW214T1JdVCV+ODhAYysmfndoT2dBc1RXZCRqYEkzMCQ1filAS2x1KklFVzpKQ2p5cWRNZ1Qlcj9dTjlPTyV2T2xXVyV1fT9zTyw8YXZjOzoyZ1V7ezYuQDU3N2hnYiw5JHxdYkk5W3l4aG1gXjxgPlUuMyRIKDszNWZwZS9acjsueFd4eiFPLHBWPjBJMzdlMTBLTl1S'@;
put 'RlFhLCtmWndqKCpqXnpBKXFqZ1tgd0hdQXl4ZkEzTWo6aSwhVWtvI1NMRiNEYn0scU43YFVOQiNzY2kzM0J8IlRWeXc5bjQrbGxjSjY6NjYwUm0lRSs3dylAeFZLLi9ILC8zIX48fGdFRn0+NSVeM1lMT3clbVJaLzgiYHJma0FYQ19PfnhLR3VJa2QqKVd6VWNOP3sycUtpKE56X3NoZG5RMHhV'@;
put 'XnxtYUspTCwvcDkqW3RoMHAsQ1syRUhEQjA0QD14PXBRQ3cmUnhZKDxGWFRPLFI8MXM8QjprKTsuVD91Z2R2cjFXJmU2VyZuJUA2Sl5MN0FrQjMyNiZ3ZEpsaV56byZiZD5PQk59X1dwIjl5KC8xYjFHdW5QTENTRkd1YSssTFl6X29LKWlkL0VhY051XjZATzFAZGtneW04L1pAS1VHWCxnWmRj'@;
put 'ejJGdHhvPCk2T0lOUzUzaDpGKkA5ZUFrUjMmUEwxaUUlVT85UTUvNXJTOypPZWxGTmFOcGtLLHdQKWlIK2MjW2VPRUBsdSE/W08xZE5qfkdVZGR4SEdFdiUxPjhpZHpiezBJPV5QcUNCVVp1P0NGNkBpcCtxY3BIblVMcWYlPWIuZSMqL1FNOmFvWHR7MGB6aTVESH4lOnJlezgxRGt0VU16ekh2'@;
put 'ZlpdUWV9YlMpR2MjYlopeDhIJF8ucXFscWBxNjBMWFgvfTBCQ3A0cnckcVRLKVpGSVZnNVttWj5Nbkd5OH5oO3VpaTVrMTZYOnpVUHNQOjB7MElMdXUlSTdaLjVhQz9ZRTA6ZDAxZUs0Slouaj1aLDxTeX1Xa0Q/cFFvU09FUyhHODxncEA8I2NmMkg2WTBSPCpHTi5vQFtnfGtpazFadi4qJX5S'@;
put 'PzRLXnMmPSUrfC8haUhnOXB7PV80XVUuKlFEVnJ3Yy48fDRjcDZ2dnMhM3l4ZiM8N2RMPnlDY2NSU0QwPl86X2xtZTdkXVNUSn0wYGFCUTE8fDoqWXorciteaFZLVW51ZVFPZj0qcWp1M25sNTtBQjR7STx8dWJYOWYmO20jWXxZQF5HPDNnSXohYWNffDdWVl9xUztdNWg9c0x7cX02OFIzIUZZ'@;
put 'ViNlWVJ0aEdRUW5Vck80UW4iJXlNcHtvP2cmV3JmfWA0YCFdWzUhO182OTpbPV4vRHtzfE5xa3BVSEN8JV5qKllATlhaST1+VjBsJEcrJTVkdG1rLl5qeDxpLlgvQyNIKF9mU2Q0SFptNEh7Nn0qVjMwZTp6dU89ZXdHSCtBMWdRekpfempZdkVvOyYwSXFsRm4wcXZVOE9yeyM8M3R7VDJHbnJo'@;
put 'eUAmWFQ1LnVaeiI3SChyZXdUN2B0eVNWSCxRMF80NyZhN3dWXXx8cmx+YHpJW3VwVHlaeVA7fF5eVmYqc01xIW5zcXc2KSpHdCtRSnRLMEszJmBZUjwjc3BtND44OGN1V1o0ayVuV152Yzg9bmE+RXNeR3dmPm14R2s3e0EmekZ8WyFnVzA1Wz9wSTA8XltoWyQsX1AseEU2L0dXfnlddEYkRlpp'@;
put 'a11DKWJfYFZ3dTBqT3BZOzwod2kme1NBTnRjQT1+cmMmcTk+JDpMZVNpOFQya2VMeSZVSkVyKjNhSXRIdDVeTVd5SCNEMSVkJGZmfDcsQk1AQ0IoUypxYUw1dilBZVYvYlN0Yk5WdF4wQlpdb3lsQXk1e19JaFh3I3U2Ljo6dz1TdHQkfH1bVEtzOTxAT2xYP1ZOeiUobyJtVTtzZjwxTz1DKW1K'@;
put 'KjhkNC48LzhBO1FZNT1LVmdeM3xPT0JVVTIvXXNAfWojKl16QDFWPFlId0hqc08pR2NaaFZGXm9gVVshXUs3TCI8JXhlNkpUIzQ6WXt6NT9VZEduIWQ4LCtkSSZQd1trc0lkSkZZSHlTMGd6NHdud00uSit9OTRvUkVlYHYzN0xHTFJYVjcpWDlgZyZZN2xFUkR+TUZSQEldOSlTNi5dJjZge10y'@;
put 'RS8iKzJmUi51SjN5VHl7aDdwOWQzQ0ZOXj8oPVRYLjk6ZVhDKkZpTiEpJVghJTJSaDpLRlRIRyQuVGxgO08qU2VuMGt0KkpORDBZQS90ISR+ezh7U1NDfjhJZk1DPSkjWGsvUStUS0BTOXwmVXNjQUd0QjZ1ZWN3V2p0SnRMbFlONUIsJkFxaDVCOWVjV0VaRFF3fEwwX19TR05UZUVhRFhMYSgp'@;
put 'aFQoSj5VdX1scDBHPWQ1LHZCP3BPYUBfc0Y9V3FmX2EhOSJ6W1RXaFZZKV9QYFFGbzB7ZF9WdUVpWCklO2lqQGAlNE1AJGBLdCMiRzUxWVJkdlhZbSNxK1J3Vk9ITHJaTUBKJCNsZ0k8MHR4WWAuRC4/ZykpUGJJcFRRTDMvblJVIkYpK3l3dGkvfXRNTTpJITYsQzpaMzx6U05GJHxsTWcwfjM7'@;
put 'NEEjOEVJe2hJTGRTemtSPlhoTTJpQlpvMisvPkp1bmh2KSs8ayVvYCxecjJiJDRGaV9GOXxNKWBbajo2ZSlAJHQ7OHhAV0Q5ZllTOS4qUz9Qe1dtN0g5fG07SEAhP0M5Zk9zMlU7NiVbcE4uKStKUz4obiwkcnAhUnRsNnBZeF8wIi8hYn10JDQxUXJAQn0lN1k3O1AmfFRqQWNaej9xPnRuVXFF'@;
put 'fF0kT0BobkJ1eE0zWEppYT5NJCF7S1RHNTRyPnVgfWJ1WjJ8RWdCXWtFQyU9YEhxalZvSlZTSWcrR2JmUTIoSmB2SiRGVGd4fChodn1ianZmVjgxPHx9XSkoMC4kRUdnRGdGN2wjKDdLW0YpeyhjMy4pNTwzM2czU3VsLy9MdHNQbUkkJlVCRTl2N2J0eWdYVjJ1SmJ4fDAmJS9OVjZoeD00K0p9'@;
put 'NXMzY20yKC9vODJVQi9rXVYuSHNYMTYmVSRIRVhiUmA/RkZqQkZpTjBlaTVqPWFAZVt4L1dpI2RObGM9Ljore307eUB8U0txYGZKJHpWXkAyPlNlVWNbYCoxOnxeU19BJk0jIngxVW1VZ0tnNXFhJW8lV2deVGlQSHQ8Ozs2SGNWM3tHWikhYmpfdmg4PyFxZiwzLzVaLmMmaVZCckpZIiF3MlE5'@;
put 'T0NsdU9NZ31aXjpOPj9AZV5qKFVSXU5lSXd2NXpVY0lxcFNoX0k2RGVwJHpXKD5YMVEhNH4ySzlJWEBWbHpGbjFKYkVvZW4vbFVWO2xyXnE/XiljOEtIdVY9ajQ7b04hTT5hUkAjPWtJSSVSIUJEW0FvdW95OlM5bGNzdTs1OF4wKFVLXjB3T0crTU4iWDhSS0FTJn59bHxhbDIrU1d1b3lDN1Ai'@;
put 'MVJXUipGRm43SDd0RmYvYTFkel0vdmlEaSFHRGBAdCh3fURBdXFLbGtwWzxiTlZ8OVNLQmFpek91aS9EOlo5cTR+MilQPWlmVGd4MzRmTUc5TUJmLyY5S0gkUzI9RWE6YSZ4QnI6QTVqJFEoYFAjNyVUS01Ka0xiN3klSEMvIjo9REI0NE1uNmpFUjtvRW91b1NXM1l3aEw3Qns2R35PfDBRWG0v'@;
put 'V3F+ZFVqckhZLzMiS3ckYlp3SVBOXjI7SWpCUU04MzYpJXQ3PTdtNXh4fkcsNWoyfG1sSXIhYHEkLHB7eXkyKW5sW2dTXmRyP20/bWZVQXFWME14PEB4Lk5VcFtQMzJVcz5rdlJEdUk/ZyQxY0VvdG4jMUk7VGwhLE03dGI5WFV9K2lrKU5CazFgR3kheDFvNi5hPUcqRDVJKXtXe1RjbGVsNTl8'@;
put 'Sy46RUtVdEdbK3V8aywyfDdlSjlHTk8xWlp1VDkiS11ReTUleSFsbkxgNm4+U3A2MyFjKGxsUClTTU84TEt5KiZ1cixHOSl1S3FEcjBRSEF5OyY7LygrRW9+NGIyOjFgREVEYGczPygoPmFFKSo7a15zNjRqTkljeG1tMlg1JDJFfmtKYShxaDd6R19xa2NUdTI6czouKFM3XjhWKz91V30zL1dQ'@;
put 'KSMxckpzUVhSLGVZIzs+Zjo1cmdSMS5bKW5tMHIzQHBZZHFmU11ASWJPKmsxZSJiX2lma2ojbnMrYHpmQTl+cmsuaDhmUGUqfktBNWxvQjRxS3VNbStYa2NwZi5be09OPXU0OTckc1NbXm9bZGdtWk8+YW4mWj8mSVl7cjI6ZD44anV5UEYvWldaNHZ4TFovNStSbSZkPVhoaWJLbnBGfUVvcj1F'@;
put 'aENKX0NTLmhzYncjOWpkaGElZy88bjpqWDBQQ2kxWXFYcGwqO31bVSQlSik6KWdIYXRVUnNgJnlaMDdzcCY1MjZ5LHpNOi4zTCl3JTROX30zcnkwIXA5eEQuN3kqejJUOWFyQF9TTSJCVXBEKDc0OmBPXSw6SjdiODJQaXwuWDBQVUBHZ2JsO2pGQ0h1WmYmaWszKWJKaiVANXZFcTYkRjN2OlVW'@;
put 'Q1d2ZXtTPzU+JT5LQFBzcjBjRDlQP013QjVGJjhuP1Q/JklkWjFJU0NVY2QoQGBhay5IcU4rfmJ2QndUND49LGJlUDlWWkNpZjtTI0Q3K19eIXkhMT5FcW4hIkxFVlRVfmgycCl4bXB8fGhjdT43IXtfOUxxelEwOWJXJl92NWhGe2RtTDZePFQhfWl7aTQqeEQ9elNfPV5JM0ZuOTBtKWRYX1A5'@;
put 'd0BydjBkKEdMKXI7NGJ5MzBsZn53Ql1eJDxgRXk8Y2hoYFZpayxYN3BKVW1OQ3tSeSh0MXZuP0NnNmREOTA2WSlJVW4rKWteL2dBXUBtQVVFO1REek1NK0J9eEY1KEwlQ0giajQqUU4qezR9TUR5bk89aXx2dVdBQUFBQUFGUkFBZSl+XkZCLFpUNW02NTxvYGMwZnc9fFdnX1NkdnFONUh1NnxL'@;
put 'aVVLOm9IMlJRfHZifW8sbmZGPVB8JDBWaGJpQjJpI0x8fH5GVzxJPDM4Jio2ejZzdH4xQCY+OVlEfnI8Q05yNDNNMUJzZGV4I0lMSD45MzJESHh9cW9IMEBpdmJhOz9BIyRiInZAdXlRP2ZHVz9gW2FaMztpaT8sJm58b0MuRDNSZD5GIUMoK1ZwPXhPd0B8WkFORH1TWU44az5Zdj01NzBqO0tZ'@;
put 'e21SemEjd0dwWyJiWV5KWSsmQjs1O0drb1YlcnBdcUIsWlk5N3A8Z2d4IjMsRiNIJSw8N3UkclZpdU5PSy5idnt1dnlNdV5hcyNQSlYlRSJYJDljPiZFYEdERSJVQHZCO2Rqcy9lRXs4cFp+KllwJDQya2BKKU5pOU9sYn1+fnokO3YkfUwzMWxbXmldRiw2dT9fTlg8VT1iQlAobE1DLDV3Mnou'@;
put 'NnNWNjZaMzpBS3QzLyszRWlxeCp3XllTNDlzb2BgalEiQ2RkPStLO2s9ZDNxeUo3K31HXUc7ISRlQENIaURbQ2EsKyghLCRRIXZ9Y2NWc0wvRDV+Ozo5ZnQhJlF8a2Mwalp4Mi9lfnxdXjJGbjNURX1sZUI1TXZ7U3BqIkleMzVaW3c4an1Dem0yJW0+ay9nTlkqaS54ZVNiVnwkOTpMK0tYb3JM'@;
put 'MytQZiE3NyImYTFrZlc7amtVPmJsTThFfmBgZTNLSitgI2dLREF5ZDN6XkRNdE4kVHJ4RXVHUk0pJXoicmwhQmtMJUBKRWF+Myl0dERWc1J9YE92WDxPVUl7bWdQKlddTz9eVGZBKCZEWjdCbzlOU1YpN2A8eSZzc2opM1t6OUNYPWttMjYzalM0d05CY2tlaUk7fCh1Xk8udkY2RH5MQyFrcm1Z'@;
put 'NkAudzNZXiRlakxhPz1VX093dD8lb0s6OG45XSU6fUx2bDc9JCJNT3NxVU9waXx2akU8OCZucWR2NCF9VlM3U35VTmB8NWJ8VnRoYXomQWV3Onw1XzVTdz4leENQSjF0azcvIil7TUVsV3VAQDYrLHhxfkFnWGNoRn5mV35COi5OWDgmUWgvWDRdJWREZVA4bEd8YEpyQkZ8PnVDUFhJSyhFTGMm'@;
put 'PytWa1N8fUEjZ0luYnt0JWAqQCpPV28wTT4yU0gwMnxvcyhVO2xvNCY3aDhnOi4pPnxjaDlJJFZ0TzxDKD9sbktMRCokOkM3ZykyWDhUSWlLfXtKKTsrZVI7ZCMsL2dRNEVwaV1yfmF0VU47QCo1UVNDJmRuV1lafF1GfTdlIVNbZnJ2RmBeM141R3xtUnFQZDVdVSprVnRIWzxpJEw9UUp4Xjdt'@;
put 'ezdBUHcyTlQ6JH13dSw2cyQoPT4yNDxeUFVCWktlTUo4W01DUD5CLyNdfVMjMjIxKD4lVUdrMDtPTVtJU1RDQlY9YkZhWn5IVThvZUxCciREUjokcS5JI0tbKT5bcnA1ISMoRj5CcV0ocFh4M0pnemdtcmE2JDtEcVY1WVp9cjQ7I01XcngmVSwkanAyYX1iSDFoaUswYm0iQ1NEMUsvVEtwOnNx'@;
put 'OV4wfV1JI0tFfHtCQj85YzM7PEoxZ1tvJGVjW14lZG9yPXF9S3ZZSl4+byNScyJ+Ky5CfS5Md2oiWHtbPFMhNys0OlkxT2J0KltVS086Ok9wZU94NyErVlsuTXFwYnBbTU1YVEJaPj4qUkN4PWo/eC9jVnZQQ0IxPTdwOVlDWlRlLE9fLGU1Rl5ILm0vInpMZUBqeX5+YF9hazRTaVclYTRpUEQq'@;
put 'Qkcwc158Uk5PJlNffS9tWjJVanM7Oz1rQFYockRZSWF+ankqR2hJPFt3eyxAUXx3PHk/WS49IlM2THNFSkckT2U1QkomUi8xKmUlYGhOVix5fVQrLkwhYV87LF5YaXpuYD1JaykjWkVmcWRAeVJyfmxhZjRiXlowZE1MP2VFPjNbQ2RtYX49bkZkO255LEJ7V2c8OE5CYnE1YnQqd3xyKmI1bF9K'@;
put 'W2VncHhRJTNNW1Jqdz89eSlaSTMyWCk6OUFUTiJhci9EdCpjWHlmYlhuOkBGK0htdm5ONHJtO109RShTTzhbR0deW152Xl9yOXsqUkJuVXBkc1lecjh2ZjY5ZyZSYTl2O0t0SnlgYEh9U1VBN05vfU50JCY7Uzkoe0NVeUxCeV4qdDZgSD9je0ZgJTslLGpNbGhsK09fP2Y9RTIvSjQ9Q0MsVnw3'@;
put 'YzZaalgoeVp2Qlh6PSZEUW1mfnNQSGU5Nz11VDtTUS9TMil7QmZXa3oxdk5WOnNjbmZ3JEhHJWdxLC9yT0ZZIS4lUlZAJDttW0JBdjB+fVFaNmRmNVZKZ01nUGlnZnw7d3tZOkhCd2VVUSV9cWM6XldxeWkqdGd6MlFgOj8wdFZ0dks7cEsicilyXmxRY3k+RXtHdmhWSHNzfVJaNiJtV3heWmxu'@;
put 'Zjo0M3NCKSNMN3tReCtgZS57QCs1KTJXRzc5dEk8Y0AvIXAlRUJSfkgoNXJwInBVLj86a1IxRUBHYDtsMCI+SyREVV9uKHtCKTxnNzpDN25oKWlkMUs5SDIkb34sI006K2IsVT4jSEBvXyU3UDh3fXN6MTN0bGJbT0BmIWZefFc9JGNwdF80KTk6MWZDSHV9ZixOejN4X21Wc1lRcmkxVGkvXl13'@;
put 'cF0ie1BzRW86Py8kIzQjR0lOfEhaU14pSyNpNnsqcTpBQDMxT0ZfdWRWcCp2cCFte2k3OTAmIkoiLGFZQjhbNz0rZDEkQz1VMUtPKiRSd111NlE/X2tdWWZ0cG0jMSN5fjUlWjw7ITgxOXJTbHMkZGkhNSpzNkRzYChefkxDPiJ2RUBoOkhLPmZyVzhPZlNtaE1nUCtqeiR2d2ModXJkVjJ0IkRY'@;
put 'MCl+RmBOYWh6XlVTbGphW3JVPllDPUp7PU48Sk1YREw7VHxUXXo9LEFVelRWTE1bRHBDZTdzR1ZKJEdPPyJiSW83KWo4Pz09bW5XUUdVMnYjW0p6aT1sQE5INXtzQitvTDovRkA0XzBvdl9Zd3lJfXNKVksyVlF0c0R6anhIfmN7KkBQajQiUWY8e1FHVVh7UX1FXmB7ZmdqKj0/WTV+NkJhI2Jr'@;
put 'eV5ANk9UXyl4fWRUQGVVQy4xVm5tdjZ9ak1VTHlIQSp6enw3SXkkTWpoLHk1dFR8KzJZSmtIQl8xKTo8aCZfcCQ6fFUqJGI/cEJFTVhpTDIxejBQUXYlZHthaVBhI0c1a2s6L3RSNjZoWjhPdVhMbz9WPypfXkdUJl4kaWRWOUxiKT9AZG5aSkhIKFoiSXYhPFgrdDhrVnpNWWwpMkp8SnE9VGcv'@;
put 'eXw2X0RFNjtfRTx2ZGdTPTBlLy58cjFzNFEyWmJJSnJYJC45TVQvblB2cXYvKkJySWwjJl0ydm5PW2h4VyJLQW0weGRfdXZBckNsY0dGREFWJUhhaTo7O1AzUmgmJkpiUT5rPn5VPGhJPnIhNl4hcCtfdzVbemJTa0hFOF1icyU2YTc9dm8wNE1KNl8zWTdgL2h4VjRIdHF5IlZdNVs9Pnc8d04h'@;
put 'dTwiYlAxRnNqITVkT2F1ZXUsTE1NWXhHVE83cDFeS3dUIXlaa0ZfcDV7NiZdKGY0Tn5vSWJAYXYsKTVhYGlFOF1kfHMha15OYGB+PlpPcCppOFpyQH5ZTUBGYn1kP2xRcGYiUk9vTiFnOXZwJFJeekBsfk1ITmBjPFdQbnw6YDVIc19ebXFmO1YpOXB7VXNHOVZUOl9nJWd7ZVMxJUwuTl1RTCp6'@;
put 'aWc7S2p8KmwsTDNoZU48b0shLEJHfU9CT3ZRWSRmUmkiL219TzAybUxCYz1mX21WMndOP098fUtaJStiXS57TGlAM2E2Z2VdaXtxLkAiUUJoU2Y3Qns2eFYsUF12VzFfWV5RRmFiTGdTUlRjb3N3di9oN08wQEIqfWFHcmpMfj1YcDpjIVMoPElhX2VwVGlnYEApXV15Xl5nPHo9T2w2c186MF1s'@;
put 'VCx6dz1yPjJiPHxUIkI2VDRGZXhVLiV6XnIlQVdROTozVXtAeWB5WDp3cXFXRzJnSVB6IW4leUtqOD17IVo8SVlgJnF4ajgrMl5qPig+cUtTPyw2eyt5VmptNzY5aGMwPG9wRzllNW0pTCpLS2VeMCgsaGIjNHdydU02VndEdm47PmRoYGpPNGokQ0l2PTtvUyFjeFlHdVA8UFIkImYuTj57Kns6'@;
put 'QWZFIn46anB7P2olYyVfaldeQz1iPl8yU1VXTj1hLyRjPmprW0pjImZYVX1RdiVbUmhBOV9JJU40R2tPPnR2Pkh7Y0w9O098WDEvTTZiVGA2eGM2VWFLPGcxPihEdn12RGQobDYpOkY+Xkcke0JKNE8ldzN2U1JCL2ZwTj4+YXFvPiRCPEd9e0lJUUNibW5OWUNjaXAjZXF6KSRgSDEhRUhpUHtj'@;
put 'VTYpUmxwOCkkOyU9ZEhPYS9ANStFYXVvQEdoN280TnUkQjdZL257ZktDVXBlUVRAKy89dH1SfGJsLCFmVWtUcEpAUkQvOWBre1FyITtlMEVWSSs3TzQqUUpIPk59OFE9WHFnfWdPanJmYlBWZlQ4MEM3MnVFRF98d3ouYWd0YHg8cWxXJUhSZFB1UlVTMH43b2B+T3MseDdfKXEqT0I9YSR4a3pL'@;
put 'U34oZW83TG9EYVIha18jWkx8fC5LfjpTIVE0bFVaej5LYHRCJHlzSTBgSW5yLnZSVF5NTFF9RFZPdkZhYlVmTWZlVW5HSEdPbHpHS3w/M3cjJUl0ZloxMFgzKXNsalNedlBYfEt8IUFnOWc0LjldbmUyJmc9fmlbRWRGP3d4fWMoOH5xN3JiYmcidnBXQV8qL2tBQChkZ2VTcTMqcz9wcjZ9cnBT'@;
put 'ZT13NCowIzZUInRVdUcoQ2xdXnZub0VAaih5RTQ5dTxUKERzSkdbMiUpZ2lKeXJkeUUwU09WdCp7QilDRzUlPCZKKTkzdWRDYkZdNTBKVHpjbXl4UmNEU0lDOFMmeU55MEMkcTU9RWxDLCtsaCUuW2ZKVlA3IX5yUiI/WWRte3dwekRaI2YzMFU+a1Q4UE1pMVdSKnVQIyh+eXMjRFRgbG1zXkB5'@;
put 'N2Iwbm1HYFhRbSNTX3MxfTpmL0hpZUZUd2xaQFEsL25JMnpSX28mWHswNTZyNnxLLFcpXUNEY2xBXVAxJGMpfH4qdmxqWSVwPCV9RTgwSDs1STNNYUhaZzs7OX0hfkchdCxOLHpSbGNRZ1dmUUpucTJDITYpN3BYWCgrP3B1a0hwNlp9dSI0TC4sTiJmIlg9YSNoLE9eXmJ5Qk9pcmR0JjF0IlI3'@;
put 'ZnpINXI0Q2tUNzFlX2IkNEpEbUhmNGFybThLSEhbaD9ofHk+PFMyMSs6TTVXYU5XNV5hXSlvZWBwbDxoOGZ1UGh4NT15Ym9ycUYhYUFGOWo0PyEqZ3pUXUhxWVVNSVhoUHw/Yj0uMiMkaDldOF88Wi81dTM9Xjs7a3k1U0RTPitTfTY2emZeTm5sPSltcyElJmJ9XUg2MSNqXVghSEJLIUJTW0tt'@;
put 'YTRTL209bUdCXSZnSTkhWHM4UWh0X15tKSZ9fEhYPV9gTEUoNn1CTXxraCQ7SVEsOGpFZ3pdYVcobGJyRnFpSz9LcCRtalksJiJaaSYyS1RXSDBkJjhhQzpCQHlTSFdRcmxua1lmOjdzI3dOfVgxV1srVCIpcStBeCxZW188bkJYaXxUWFA6WGpkZGJUMDhoUjo1T1FddUNjNFBYWjBnWjNhZXos'@;
put 'VnxaPyxXIlJpJTB2eCg9Yi5fd3pYZll2OX1DK3w4ZjtSVlk+LkU/OiN6KXcvWXwpOk1HQyF9MTY3IlZbe3RpNCp4PDlfPiZuaDgjdnVUVzUrfW02Lyo2bTw+JWFnbyh7P0hWNihgekoxVlFJTSJaZmlWTU4paSltPXJIZCR4Slg8RHArcmt0fFpGUypyNyg5bFtvZzZ2NmR5QH1AKjM9amRiKko+'@;
put 'OSt0ekh6I0xMaDQ+ImV5YS89UjwwYWRaVFJVKjgzQUV1a2o/e2JqM04qV1lPNXxzbWM+UytZYCVHeXpNVUciWkkvNyJ6TEt8VlN7bkddXWsvbVJvdEVxPmRkb0J9Tnt1W1VpM11da048Ny87KXxoentxajU1JkAsPlhvL2oxJjU7PFpRX1I7Nmt5LzUrQmsmTGRuTDpMSDhNLGcsIiUmVWI/Tmk5'@;
put 'aT9acnFDcFhhZz9Fa30mRmpWSWNgdCpSU0ZIRD0yOTZKaGh7IyVDXnk6MVZHOlhMa2x0UFR3X2p6dU9jXyYlSz00QzZIVm43THRPJiI2M1o7STtoXW18Yy4ydjk1e2NjfXwxfDwmfUN3NFs9eyQhNyR1Zj10SUFYMD5Jdmo2NVlDXk5UbH1IZi8xdG5AUyN1QWBCU2lHaGheYkomW3NOZUs6X3sw'@;
put 'NT48ZDlKJmlET11hV2BESWcjPlM6TUgmRktyTDRtazRMS3xnPEwwRCUmW2RpQjZjKD1FX2ZGbHJvUiw+Kls/I0Asb21GazZAZV8kfXgyMEV7Ji4uKmN2I2B7VzIlWTlzeVI8a3wsQkxfK3xnLzgvK1M7OyFfRDlRQnQwYTdefFJdTn5HL1MsRGEwcG1FfTI3NzoyeWtpZisrdHNMSDo1Q2BTW2Zr'@;
put 'TyVncD95LHxaR1l+aT8lRnVUdDYrTVFuZjRaO094d1FubnlHbiNDLlYrKEI0SWFWJW1feXYxaGwvZk88Jn1jLEFddXZyY3c7N115MTddbyNzayljPiw5TV17WHtma3NtNmlTSSV4Ul9qXy4kUEhGc1N3JEteO0wwUkhBcmk2MStmbV4wOT1QVyssRXRqNDgwVjk5dV9PIlF3W3wzWGE+ODlsS1BI'@;
put 'XmxlOjAsLGhXYiFRNykxazkmMlAvR1oxOjY8ZHEsIUNHSH5+em9RMWk1NHlSenRhQDAmVS4reWcjdltVN1V8PTBZPlU7cjZRPnRNJk1idD1ZdSVSPT17WTc9KmhubU5NNGBUXVJMIS57VWFNRCxxdkJlZmA4L186OSpaVi9+ansmdUtPS0p6KjxGQGhwc2UqfHtaZmc/RXNJeTkhZUFwKDVZLE9j'@;
put 'L1dgXS5YMyheS3BoKGN0dDpxc2BBLnZ8MSR3Xy8sY2U3SmplbDZHOlU/ZmI2aW0yZzVvM3IoOmFlTXlfMEJFM2tqfVJCcHVdNT0sbzhQKGN4fWZLe3VMcD9rRip5eU5HTVhULD9MMGd+Vj5RLnp8MEd5dmtUTlpYSkBzXTduQzErYVJKVlYsVnI4YmpJbng1WTdXRk5LZ0okdSg6MzorOSkrSmlX'@;
put 'MnV1V1d0Skl+QWViS2haMyomJWU5KURyJVI3d2VBYk5AKjR4IiQ2O1YjWXI7SSwzb2ZwUDRqJXVfRiZDTzFoPWV7ZXE6fCUiIzpAV3glKjNNcnFmNDhbe2RJImwmRX4rN2VIQyx0Qk0oe0JZRVc4TU5nOEU4JU9rQVVOJmk2OzpuQ2ttTDAyWmQufk1XXiohL0tCanVIZTIhRlFDV3BoVzc8Tit0'@;
put 'ZH4jdCZmIXt+dHZ6QHxoXkpzV15UeGNhXUc3JG9PUXVScnwhR2RueC9vRHEybmk3Ylk8NnVzbFRvQyNyejRdazczSmM9Lkt+MiE0Rj4zWGlPLnhmKVQiLyxKaDRxNUxtal9wWiUuOTRXc1trelAzcSJlaVFBNlNdPVdVZ25EUXQ3cGE6QyNdUV9JeT5CTDp7JHkhOGhLPzZNWi5hbW07OVRmJlRl'@;
put 'VUprfmA1dyt7OzMqIVg3Rl8sKEFpWUtfRUJMRTQ6enh7UUU3OjskcEp1NCFQeV8mNnZ0PilLUSxZPl47dyluUnFuP2omSUl6QldfaUxbcCx6Jj45eVN1P3N3X2VOUj1fOnw4UUJnfFdHVF4kdTlDeGM5SktUelsrenU5YHVea2J9e2h+SyhvWEtmRypHNls/RjZ3bz49bXdmeGhpdnxIVTRSYjgm'@;
put 'Z3pHaD9NWFowOVQre3tDQStfNCQ7eGY+Yy5RMSlEeUZ9blRIfTorbHBlfkhucFJyZ0xRJkkqb3lfYEEyJSFaYmgyWFh3ZXV7WTs2IU57QSpEX1o9ak16W0xNOFlhfU1rSU1qfSFUWWQxMXV0VnIlYSlVQTA9M08qUVIifn5EKn5VLDBUNCo7MGJqO0AxSFNJY2pHQ0leQE81Un0wSzErTDRNVHdu'@;
put 'XUt3d1JOa09dYCx3dUd1ckZpO3hZJl99IU1VUTc5MHdMWF4seSF7all2aSVpWlRwSXk4QyoraUFHK2RaVDFGbXtFa0ErYGs+MFFaRTlyckg4bS5DbzF4Nz8oSVs0dXd+V1JsQzpTTX5vd2hOLn49ZFpObS5gSkpJPjtsV35PeXQkPW98TElGfCQkTjRVaFBpPTZYZ3dIbDl1bVtTPyooJCFXTD5b'@;
put 'bys8NE5hTTh5ZFY/K3EhUmJRUGhHfX4uWkRaZV13JUNNJllqXTZtIn53VFJjKzF7MiMkSH15fVpON3QjZWlBTGJKVjw+LiZvQzFnLyM1MUAxc3c2VUAhP1htOltsWFNvPSRiUnBwKk9VQnwve1I9WU4mcX5WYE8lKz1lQlk/JW87dnJUc09IcGd5YCtLM0lWZn0/bSNwNis5TGkxR3BnLnA0NFBu'@;
put 'Pzg9Uj5tdjtIXn0kTWVJbig1XlUqTGRWZFc6aEI2TmclOnwmd2tlOmw+Inc8TVs6YmlQaS42OnYhJjM/O0M+SzNpJl0hUV1KXmpSTV4zRkw/MlYzWlFPViVyTy8sZz00ZFVlV3JgJV00SXpuYlFgaUZnaCtjeUdUfUxSISNneHleTSs8N1tAZipJKi9mQzRCSURlRE9HZnlgczQqO2FzZWU8Xnoz'@;
put 'RCZkcFpDUW9CQl9NdjNvM1B6ZCYoSG87UDZmNnU7fmJbJiRTVGVNWlspXTVPSUBTJjA8UW5PQHtEUjFnMCFOMGFqYUxfd1NWPjR6cy8jalR3NlZzM3ghaC5yITt1ViR1InEpeEIhRykuP21VRnxfVClQcyk8Yj9ZQ01FVXNac0JQd2tJc0JbXTFgP0A3PV5Tfml1blBQUC9pOH5SV1sod2F8YHFe'@;
put 'XypdX14vTWpkaShQUXF4KiJaJWlhP2dxSC9jNyhPQHNKfnV5aEZ0IzhKTDQ9LCYjIlMuOUF6Kj5kXWg4L0tPTk5bNExZMjBHTHIyLyQ3V15YXUcvTTYyQ2w2eSRBaF4yendtNk0uaTRPMHpNQzFSOWNdWUgpd2Y9aVlpez9XbHtuTVQmLnJfJFdYPmBgYHxJPWdhNV9KbD5sKD9RcER3NntkSVB4'@;
put 'JXtjM2hARWIiIiEjX2YwaEFGJH5MJkZ5WlhLcH5yezJPK0AuTnAqcFB2Pkh0W3laVURXMzA4OUpEKDM+T3s0Z3xRN2VoN2ZSYmU2VUtIdTN9JmtjMUhTYl9FKkIrJUBJQj9za0p2SjxmbGZxQ2lRT2daRmg5XkBjMmNBI3dYYWtUenhqSjNZKzVTWGQobmFCdURIVTlXZmM4YGdCNj0iUzhhcVU/'@;
put 'byZ+QTVlLkxuLzcrWzMuYGZhNS5NSlE4fVFDLyptQzN+dGFUeWspP3poTW05YnYibXQ3cDw7Syoybi96cWZwWy5iY3dnU2teZU9sN0Q3XU9pMzo4flY0biVsYlNKPjYyJmclQDFDcEclOm9PY0pANmowQkdHWWp+dF1SaXM+S0RJKXEjY296cnMlNm9CRzN6U3Z0I3c7TVRSNm5lKUdveUdLYDgo'@;
put 'fVlEYEVqUjk6LnRTUmJgU1tvPipMVyVsdyQhan52MXpPMi4sUS49PG1HMHBHYDFdek83PkcvcTVfVl9UJmgqSzRya0lfJiQ8WH42b3JLZXZpcWU+JDlnWkhZOUUoazYsMVQjcz1ocHhqUTopViooLnglbDI5dndfT0ZLVHFBRW9xUEhWWnU0KlslP0pnTmVjKStXLFErXm1aLnc2TUZtZ3pdfGli'@;
put 'Q1BIKVYuIVgoaT0wNXhXOk9TcmNnQzFHKD8lWE9bXkQpWCxvczQqR25XNzM3YTE8eVQ3PVB5KC8wVntRPlIiPjwqSyZ4PmxuYk8uUlVbUC9ETE1kITgqe3FeWyF8Kk10dFJISVdZdVMld0IxS2RtX0kmNno5TnlhKH0+bWUzRTMkQ29dNmxXY0BPKGdUb0dWKHx2aF1fYzNDfDVXITpMK3dwSzBV'@;
put 'XXRyKD9HVH1PRDxXezs+VTFffEpDX3dOdFc1TGgwVlBmPVs0VG5FTXE5IntCRC5RcS5FRGBXYWtLMiF6V1k5JXFZY3ZeVTZrej14RWY6OyIqSiVtRTxxV3J5LFlFeX4uSzZLJlcpNVJjUlEkTWt0U34yPDtVXWM5ZSVDJkpqQVchYykhPk9Ba2oxbmxqZH13YGRBXjtIOmA2OkVnfHcsVCxXOUdP'@;
put 'Pzl7dVlYNz1vSXdiQEgqQyIsalE1aHooa2FqWCQ+R05ELHZyXW9Pc1N3Q2gqKztQTjt2L1RyNjJHOEVlXl9vfkU5X2AyOXp8Nj5dOmlGZCY6VSwjKkROX2RffUxAc3VqdkUqPj4jX0s1NHdAKHl8UVBVYzNRLFttSiRNOWk1d2EkcEl3YlR3bj1jU2x1VyNFU0IpWWxlJSlESXVyOjZVbUFGfEA9'@;
put 'bjpWZXtMeHRgJn1rSixZdSYoXyJSJlBlaW9QS09tTSNdeEEkcnc7cmBEX3FpZH08IyROI0hLKlR1M0guNltkP2hpX1BOc1kseGdBKUJldCxCVVouIX5fRSpzSWx3TSt7R2tiO0lrYkY4QjNkPEoqR1RQbTAvWmhnIUpsWFdIQF0yRGNORF0/Zkt4UilSRHQyQV9hNyEvd3s3TTAxb18uWG99a1kj'@;
put 'RTg9cmVAJW9dO3Vyd1YvLy90KlpOQ2EiWSl8KlVHcCshRytKZCVEVm04a2lyQH09UkVHY1YscnY3ej8pQyw0OFE/Ils0InZeP2lyO3woU1RYLzFsUVFeIV8pU1hhO0ssdiF8KlFtd0lZcHg1WyUmMDFgfFElTGwpdWVHci9FaVt0bTwpfS9YZXJ4XyRsYjVeOj5YRi5oWyh4Q3RtZWYqdGI9MlYu'@;
put 'KFZxbkNVeCxNaVpHNEchdkIxOXNqM0lJeWJsdVtrQCJ0Z1ZBSXouMnJVVjV+LGZBNGlfPixiNVlMUDF4Zm9QWXJBRWFKfWwsMTBaWmNPNlFuPi8oIUBEZzgrdFg7YiFuSnpMV1IrOW8iUER5bkdbSFJseW5VTSVMckZXVEZeXVEjJDtzezZ7PFZeOypDSFdeclZlP15ULHR9KkNILFNLTTVKTkBL'@;
put 'bTFfJWx6L0xOPFdZNSZpUSpXSW8kcDwselQ1XUY3KDhZYiMhZSFwcVk3N35Zelo6RkVZTCFAaWRGI35+VzEocUVoTDBJMFgpRjhbUkhQSDpWMzhCTHhSaEpDQiN8Q2pbdjp5c0NmNGtifj9aRy9RY1ROYGosI1ZhUGslRXBuT21DeU8xJCp7JWc6ekZxXzx4VHBbfXxsZnZxa1BVRnlSPnFhLmQo'@;
put 'e3MjL2N4ZzsvI0RjTTQ0bHdeR3VUeFpRUTZSRDA/Z2QmfVokZWQ7W0BRY2EzbXh8XnRrLCp5JHpQSzp8WihZXWsrIT8qVW05Mnh4eTpfayZKOlRCNyR7RTc2dCFgdjhbIWRGbHVDNl9OJVVLdDQlLFlHIndRV3FvVl4jd31HdVMoO05YSy8+Q0Q3Zzs6V2VDOT5SMyR+VCxhNEpHViVVbCQqQ2Up'@;
put 'NVUxVjVec3N+TyFTKjBdeGl3IWpMVEwpJCI2ZiUpe2ZhejxGLHh+PSpHd18kR2QqcVdNUDchOz13U0BYRiNUcGAzOm9AUG5KRiVkZ3w7T1l2WF9jJSozK11FU2E7V3RMM3kwXmFlRGQpWCRsbnJ3Y0hPNi47QWQ8Om01NFZRSFVDajBvLnd8W1IkfXM/PWRAL3xoejg6IVEhVHNAXThMVU0wS2A3'@;
put 'KkYmXWNUZlk3WnsxbnMzPGkxdXpYRUZCLzBTbHQqPG8/Vk0mOURRYXUxNzxKVHdHP29rUVFteEQ6NDpqTHRnV1Z5aCombn5tbnhVcytSQ0VfWSI4NnVSTCNneHtyODBQJnxlZ2p+d1lOWzc4ckYsbXkhQjkvK2p1dFNnK2I6KSNvbCEsVnJzREJ9OShgfExwYXdwVGk2eSx5WC9QR0M2YkpVPXEx'@;
put 'QnFIPH0hOTNuVU5GS3dsSnRdTXRUSy5BTHI5XlBASmVXJUYjQiJnPyZmIlRZTEUjQjRMKUMoIyptK3xCMzVSQ2tYI0lKW2J1O1VBaDpPNzRjciE6UVMjakduZWI8eEV8VFlnPEZZe29lJEZJSiMqRkBBQF5rbGJyX2FlK1Q8alpXd01TQkpNUyxrWS5idCVWV1ZsSk59aT9eekVCfnNzNWc3SVdW'@;
put 'W3RkMFpvalBmP359SV9fJTZOSDdTa1EvWGhlMDVGcEBbJThJJHgzITdyYDtgSU9WVnVIfVBhZldxbU5kc3F2QkAuQXpAVDZlLDpPPlptbGVaRFFgfThRKjxmLFA/b3QmWys1ZFhtSltxPChDO05+OEhZRFE0XlheI1VUUDZeKkR+VGNKLDMsI19hamdbaXtiX3RmJn53Iik5cXk3YFhoUDI5LFBs'@;
put 'RX1ZKCFjaWBhfGMxJFYvand6KE5yInBZJTxoKzFwem9PQWNATUJHIjhzZmUxSDZGWHglcWNuMHpQYXo1RzNXc0N2PHpYZHNwP3h7VW45RUI+O0ZrJUhoLl11aF0iTkMhWDlbJUcqeko5WHFFNmttKiFlKzdPdWJzenZddVNLMFI8XU0/MnZqQmJUaWsvKjJQLjYxdyN9PjBaZXAxREpEMy4sQkkx'@;
put 'MnhPOzxoYUxYSChgcjRQNnNXTVYlSSwqeHd9Ln5PdCh7OjFiITopVWBSJUcxKHAwZ0xaJlYvOXpvQnAqSiIoVnNaKmtfJFVYazEyUkoxPytSOnJ5bnJzSShNekgxPWokbGFASUo5c1h+TG11W3I9blUyMCZySFY1WVJFVWQiSHBqcmBQV1lGLDEpKXZPUm87W1g3Sy5IW0R0fGBZYCZEcEs4XmYr'@;
put 'W3VDWUl5ZGpnYDtOcnp0JkJZYSxQSU9FZmlFSVJvWEt4WE1Fe2h3fG52SnpZWn1dKmMjQmlDZkBzfEJjZGVnaihTVHBJL3FEQ2doUnI2TEZwUSZ0QnAoeH5VXi9IQyJGRHdraTc4RTc5Sz1xeHJ0PjJ7ODMlZDciY3lYUnMjPkU4JThpYVFTIVpOclI/USZ2XUIwdko8LEsmZD06YHpPczVoWnRU'@;
put 'MVJuVkhvbiYkJStMdS4mYGpCcForK2FMVlV8dnFKVlJkcD5QaGYuaEVZV1g+fV93PkU/LzA2UipbaHNpXUY2S0JsVFhNS1IxWXIpM0NQeD5wUVFdVFNKYCVWO2xOTmZxWkwxWVA+RF9vLmZweVk4fWxNSlVtOGk5Z3VPKDgmXnZaPn5ha29SeypWLHlTfDRYUE90WmBPKXkpdEF1OkBCQHo2OVBx'@;
put 'dEBwSz1vTFtuPVFCVX01Y0xTci97bmUvX0NLans3NFMwQitxU0E6PlZlcXllWmBnUyNfL2Y1UXpvSTZMQFl6WHMjdWozeWtyKCtZQ3FWZF4pNS8xPyJ2dGd9JmlLaDE6VFBeKVVkd2ouVGd6fWgvaGpUeWA0R0pxX2dyYHUkRVExUXtKO15TYmBkXUZWdkhaZzAyLDNbPCxrRT0iKmZkUG95eFlZ'@;
put 'LmN5OlJmQzxKQz46c1RHYDkjfWhWPCM0KSsiWjlmbXdpa3dfS15rYF8heHtPaiwqJGlfSn1xKElnYzx+ZFVXcCtAOS9QIXkpYUwqQSJCSyU/KmVCeGwmM3c2fWZCI2lWelZoZTdsfi4pYUhbdFRGRCVCZ3Z6dXpjdVNXUkt2ako6MDQ8QUx8JCNReHRDVXBYWltzJT9ocztQLnw0RlRULzwxdX1x'@;
put 'NlorX25GY349OS48VjJEO20xQytkNXkkUitacGRSQFVhXjRsNmNSM0J3Si5rekRYblBvMDpmeXJjMzJZTzcxRj55Z2tfXVNWaiR5SDdxVFE/biM0cSJAZ3xHJUNVW1QpZ1VPaUNZYChsOXBdb1d3PTRERW01THtYdl9XRWg1cGt9eH5EYkNTJW04OUdKZS9pWTByRyQ4NkY0P1FRL1JWcjQifj1m'@;
put 'KD1iKTF1d2JTIipYbD0vYFFMN3RYY15HJSZ6RjdCIWJ0dmsheH5bWX5TUlVlWzZsKTAqZkRAIllyZTxJKiZ5fF5sTG5WNyNkXUg6XnloX1lXRjoxVzlxb3V4bGloOWg+IkNxb3NyQkg0b3ZCcm0qPkZuc0ZeVmI0Ym9JLz5NNiwicGdtdHA5OyVISVhefU5eOWJ3RG4wb0tFMXZxKFBGSlkoNE4v'@;
put 'KUlOKjJ5cCVIY3YpVFIwUCFiMGdJWkUvKTVqN3Y4LEozN3tsbmVQdVNCT3dhb1NLNmpOQGNkSFhdWH50Zl8mfUlefD1JKy5IaEE7U1hgS0R2Wj8mOXcjSFRFQnJrPE9EPGk3Imx4T3AuMD5fSGxUeDElVzJBTCx1Sys0K1tRRE91LGBmeXM8SCEoMmVWLFgyVXhndFtPSUJSbiwqWiRaM3ozay5Q'@;
put 'SyRDSmNVOHp8RzxNSm55R2Y6Rm5xandOfms2fUVCT1ZofUUwOGV5d0NscWY2VmllVXY6V0xWQjdDKDJ8MGlqOyV1VFVFbnpiS2BqInpMMSx2SmxpNFN9O19NOiUmcU9TTntDPE4qcCFbOFYrS1kmRkhYM20hU2wwc0p7Ol5Lem5wV1IsclRxayU3UyhvN3debWtiSHFPen1gKV8+NTJOaFJtS3Ro'@;
put 'WyVZXkcjOjp2ejRodCw3TzBIcSQ0STNnV3FIam9ddnJRNXw/K3doOVBPaG1wQ3chXn0lWC5OI0sqWyNQRX5MYWdVWHsoKisyXVs2Tz1iPy9kOSVTO3l4dU59YyQua0E7IUg1RHddSHlOcDA/Xz1abSw7WVlDam5FXSMvemUiST8kcj9GN10/V2x0cXx3IXxBRztDbHRJbmNVenVgbXF0fld0IWRP'@;
put 'JHFRaDI+KEopfWlLOERqUzUqMyNVWEw6XUpkSGNUJiQxL2c7XkwiI2lKIX1XMnx5RCVENTRQMFArOloie01GY2txM1ckUjhFL2s3OnAkekkic1EwQnk0ZWdNandbMmBVK1gsZ2Y/WVJbZixUSSJEXWg1WzI8THliSzxWJlBOJlFzbjArPW9LOmtiSG9mfnRuI3sjWDB1TmRRZHJicndeU0djSjp2'@;
put 'ZC5YeHI9dU9Tc3svfWhjU0lBKWtpOWhxKyxdZWEiNXUmS2F0MHpDJllzVSlbNDkkM3dmV29QLCN+LkBWYjJ+aXh3LEtfISw0cj84aWdKIVFrKj4lV2NofVdrdDAqYW8/bzkwXzNBLHwxdUxPJSk/cjIuWGNsckVwZW0yLjp8fDxkd11Ke1drZGZFLlZjSFdHN1cqY059JXdJIml7V3tQKn5ZUVk5'@;
put 'dk9oVkxoTnJ8WH5bdUpvaTtldmtSVVVJRD1+NV44WV1xMGdMIl92YjVjMGRWPWdfZlh6TTF1K09wJi8vRj0yUlp+LG95TjE5QV99XzNHbzRTOSEjdTVYZWNsYGRwUV1TWS5EXy9xPlpdMnRYIk9JMT8jbnA+fjA/cDZeeTEmXWtnZCN9clklSWw8UUpkQk4jYzhNIj47UWpSKlc5MEJVZiJKc0NN'@;
put 'c3g1TGE6Zyh6dH5veUJ4aEwuI3FeKXEyclA7VFU5M0JaLlMiQSNTcVJeZCtiRnEmSk5YZzxzQXBaIXYmej1YaWdxeE1OKldCbWVXY1paZiUse1BIRUV2YldLdncuI2RqSC4mbXcqeTJxJkMhLGhVeHNJUGdtODl5YjJzUFJxQkpDc2kzSGRaJklieF1KSSw0L0c0fEhRVG94Nz9FTl5aOWw5d1Q5'@;
put 'RT89UXJxaTYrWTIjRyg4eUUsVnwqTXk8bCt4KHBIQzQxQHVOazcmeGZedk1RIXx3bE5AUFtRS1dNWUluQlBHKXREcjguIS93VntmXzFgalpjOEhJUllgW0t9PTNrNDpxeTprPG9eUDpXLjRRY0t2RTpXWmAjNlR5cX1IOF1XZWBfM2Jqa1VKNF9ROWlkYWt+TmxTLD1RfTR4JktOXVEwL0J5RS5a'@;
put 'aWdaXWl0dCk8Yn1bTWliTCZgNk90REJIXTNNPDdQVm14aHhdWTY5aDlPcnNxPl0qM3Y9OzJgYihVRUBSJi9fW1lUIkJwZlovQz0uIlpPMlk+a0ckOn17MT5IajwhO1duTEVMOyEyNSU8YFlwKTpYISZQJE9Janx7KUdle01HXTV4e2F6LDx9b1lGVzElNG9GW211Mys6XzpbazNdQ0dQdztecHNh'@;
put 'fGcodF5MaWRoWVMwSS9uO1FsTTpbZ2E4JEl0VjM9NkI5MXx7UHEyV0pXcW8vWU4jbyNWWFE/Qj87LDEkRllwa2t0SEpBa24qMis7MGFpNEJ1P2tAY1pAUG1hNU9FOVM3ekxZZUAydTUrOSY3PVNkfEghbShEaVVyKlAmZiI/LntNISZoISJ2VDNCQ3VvPGxKJmghYGsmQEZDPVI8e3dPUFReZEp8'@;
put 'eXM0VCJoPkx3RTtSVS92TWY2eTlrRSprd1E/UnZvajFQeUUlPSYqXiVDYHZUN2x9eDpJd21oS3s9KXErWngpdk14YFc3OCxPN2IrMHU/N2krRHdzSjs2VCRAWWB+P2JCUCN0VTFRVWFDfTpmY2UoWDdFNVtDeztUOFpNUj1QfkA4MWlhU3txe0haPDRMZ1l+fTZMWSExRGkmPThURnpzK1csdX5U'@;
put 'PV5YcUVlZzxwTy9Yc0l2dFR9d09uYmc+fHcqN31UNH1CIkdPKFppQH1WflpfVlZ9I3krU2FUcFsycTQhMUl5cGV6SDZga2YrJj8sWCVkMGdkRmA/PU0pYW1CIXdlYCUuWD9NRHpQTiZdSGl7dzZMVXNZaHQ/P3w5PUZJbjxbOnJDdi5bYkldRk8oSmwoPmtuYUVET2JHUEpWa1g7d3FxVEs6V112'@;
put 'KX47O3p6a3B+c0tmIn10ayticHJJVTlaOEo3dU87WDIqInJpPThiQ3tVfkU5XTd5UUg3fE1UfC8qIy9fPjJVRisrYntqYnRnV0dEZmVzeF16a3d7bkUmYzNYTD5GdENxVzUuVE1PMyVddks7RGxvISV8ZX5YVz47LFl7YSpUOGVyYFJ+d3srS1BuVT43WC9pfmVYRyxpMXMvRzFEWCkiKmVybFpr'@;
put 'OlIpMXMhRWFGRyR1dkRMPklwPmYjO2lvZSRrNyspMD84ekBhfEphd1kmIUtpZFs3azRRNUd7WSROZ0diK24iNEJzblU/NSZyOXVJKUhaeW1sIzovMVBKaFJSbDAmMW5gTlAjQm4/fW48TnQqKWp0WVZFTV1TRk0+YFE9aFVkQUA9dyR7VjIqbk0vcStBWjlNYUR2YksxeEQjVG0rOWBHKCNKJVhT'@;
put 'fSJtb2dtZUJ1eSJxTmhaKDpNRUlWeyswflAySypBS2M5KDlaZXI/dXk6fT8mNEQvWjg1W1pGaS88ISs3PTBzbj07LG1aLlpNX3l4fSg6IzckJDRFNmcqP2dWfENua2xNfl5YZS9aOlBfIjplWG1hVGZ3K3tOa1hba18sMFhiYXQ+fFk+bXhhaChpQztGZy58elJTY09WRjQ/cj11RD9keVlDQD0o'@;
put 'RSg9NG9VTnkoOCpSQ0o6K2hxYVJoYyJMfSs4aWhMI3lzNV5eei5tMWUxMiRnYHImS1ssRkZqYEB2RkIsPH5BIz8iMWJKeFZBUn1KO0N1Q1ppOVd3UWh0RFclY185OkhVT2Q2TEhbdytReTlvayNVbk56XVQ5U0goLiY2Mm4uYyVATnNdQCFxZnhMXUhPLEw+UkRxPH5kNHc+dzRzaHg7YDVpdnRs'@;
put 'QD4wImt4UUoqVT8/OCU1UE92U2NGSStueHY3NyZxTTFISXs/NDd4YDB0TFlebDhJbTZJPVcmfFpeQGJBez9pO1NuJk0+YT12Rz1aZjIyXz90PVpgTCFYSW0ubDp5b3opd0AvXmFwUWApWzV0LF9NdnVjI0FMaz4hcVs9YDAsJVZOX0BjantpSCVgeGU4ZU5PQmk3Ly95SHpqSXZsbC9VRXo9TSZZ'@;
put 'JnBfKWpBMHBgZUdeKmhGO28vOEFsb2IlQ1N6NkB6a3dVIj8qMFEpL2Q2eVNDZkIsQUY0fkhIPTxoa2YxY1o2WWcwLCFpKUpqMHc8aUdDNXlrSyw5bjsyM1MvUUwrZGAye1N0KiI+VDtBbXIwe2l9bEk3RHxwZkFWMEdlc311TnBWNi8pXmJhM2tLcmFTfW5FaVY8dTtaTlAuPih7UyEvVmA0cWEu'@;
put 'V0xQW09kJXVLYiRTa0d0XXZnZXpQR3lRJDtUOlMyUE9lRjVNJCY3fVlUNz5JN0xzQ30/Ri88NEZrZzBpXyVncW5qJGJKX0dLb1I5UF5SekJTfGI1QmFxRi4kcS5CKVFOfjo9SD1IfCVaT2UoMi88NDpfJjorSDUrMnFBPWIvL31OSDlxYXc7TER1QEo1YHhMPyVkUn1ULy8xNF5rSzh4MWQwdyxf'@;
put 'QWkqZlQsW2lgdzRHKkZ9NS8sZEFrWXZ0SDJ2c3ZEUWdoUjw7SDxecWEuOkksUHFHd1dnRWd4eXZGNDxTVjlTVkYjXTQsKiF1XUxMRlhRXikqWz08OXA3dWIwQm9aZV1zRzl9ZVQqIT9DbGVgWlJFJV1la1Y5ejksPmlrJGBdUDFsbHM9ODQ9XyFtXjEobHh7dkRbWks/ZSZQTHo9LGxkM1lrVWEr'@;
put 'V3RFSURTLjNYKngrSjR2e10ydEovYC9fMV5zQi9eZz9GSDNoPEpKblJ3N3ozO11MMlZLeEAqMEVhQVRDTjFKSE03Ol49bE9QN3kqSHBoeVsrZXJlR2UwYVJHTk5JIloiNjFYc3ZHajkiI2xzazskaG1bWDR+O3EyckxmInwlXmVBNmgjd3lqITZoW1FMKiNpT1d1YyQsKTA4NTx0PCldOnxqMmVJ'@;
put 'RjxTUUdzKjBNXWR9MmMqWCZeSlpQR2Zqbm9ZQltoSz1GQEQpaUhvL0dsKV1BejgqP1I+LytDK2A7L3pdITB6PSVtaS44NEdlKCt5UEFzWEp0STlsek5WYHFxS0U0c1JCOClaWWJFbj9rXz8wVil3Q3F+Q15vP0BhQGZRbyMkb14lWT1VM3EyTXFaPHRMaSFIZFRHMSpMaF48a2RsVWxSZztUTUs6'@;
put 'eHNdaE4+N0BIXSRjQm44JT9KaSkwX3wwNk1VXU1bb2p5c0A+Y2FQa1Fke2c1eWQzaCE2IUVYSFdRSj9DZVNSc0k7YipgPz90VUpnfUJBL0lIMkBqbT8wWTZxNkQpIVEoOztWYlFYUFp4bH5GQj18QUtSSH50fmdqOmV6QjsqKEhpNDghKSF8dCtCTmV8YTd9KU9zcG9eNkt2JVA5aWhfRV5GOTZ8'@;
put 'YEBDcjN7PW1EKlFARilRNCIkYkghTF1ral9eRXBuTkZnaiJjT29WLjtgY35ZU1RMe308fjkoXip5QEZHNHY0WFJUeFBqLzk4Ny5WL2FYXm1YKkVfd19wK0xhIVVPdURBcV1kZlMsVGFfVldUNklXRVkrKGZQcDEvNXN3MzRkalllbzBCUVkpanc2cTJqQ3ElYWAzeiZVQXJTPXJ1Y0kue2xlYmdd'@;
put 'Pn5ILDg3Ujt3YS57Nnk3fWZ0JTU7N0coKCZ6aT0kSkl8ayMhQHdGJXAxTnltPkBZTDxIbTZzdG1oaU9DY2ZCcSE8Ukw1VmpaMCgjbGRUVXUyQzdHSV1BQXFJSnxTS2JFWWM4K1Y0Lnc7ZlM4MCY9Z1pMV2UvN0NgUnlQaFdCV0ZOQ0s/a1V7TzBaZDQoX01tJjB2PF4weTp2PHo5dSNePmtqIUh4'@;
put 'QXU6ViM1S3cqZyIxTThScDJ2PnYoW14la0cqOyJFdVIuXUxEWjZPRExCfT4pW1RKPCZyWWFhVWFkPTltfFtYV2kpW3RhMVQzWzJmeFdNYEBsazduRXlAYitpKUovXUZ6MVc+KCE5RTFhU1dYZ34wMzo2eW5pQltyKj51dSt9QVo7IXI+KTtUZytMNiI3UXU4OFgzbmpHcVpvdl59dF18TXlJRlBq'@;
put 'aHVTVFI6N34hYytXOFtgeiVjYGEhIyZrWy91LkQ0bCYsdDBjQiw7KXdjMXJCaXMuRj0vWEwhOn13aGlPPkheMlJsbk9mMDlqdyJwblBYNCUxMTxePXtRQ1RTUlslNXheNnhudnZRV0l2bipmV2krJmwyI00uTzg4LyN6LDtGelArQVNAbG0xOlRGWE1oVSx+KE8yMSlMNDdrJWxSIjFsTDdyLzsu'@;
put 'Uz0vWjFDImxjLnNXfVlIQl8zTm1XdSJiakEiMk8+R0JxW0AoTCorKCkyYyNoMVJCQn1uMGMiWUJPNjdANXpJM2t4MmJsano6P1MkQT53Nj1LI2ZASGw7fXBCL0wxTFF3Y0dhUi5QT1hrPDl5I3pKKXFve0d8bCpJS1I1UFFyc3pnLH4zPjRuSUAxUHtqZiFmJXVoX34sYTdTP0NgL2pyWDQjL2Q2'@;
put 'bSVDZzRnKHZzYF1ZRFYjeF8wLzpneVg4ISYzR2dEWSxvfFc0NjYzQTg8QTpOKyRHK0hrRDQkdksvYV1BLEBmV0lIPEJoV0t4TDQ8TXliQiRXajI1X219SlE/UzVGSnIqMDBmdCYobFtaaG4pUzRNbUZ7VGEic2F3YixXZnR4cGlodGF6JCJtJVQzbTImaUxvd21BIVU8S1lsUVIzSEJMdiFiNylz'@;
put 'c2hqXi9rYEt5ajxgbTUzPmFWdkc0QTQ8Q1dBRVs8VDc/RyNCNWN4cWlheWRZaU86TSRLbEdlRkZPSStlSD96fTQ1enZoe2w8Wm9BOU5+eHhoYDRzamBnRTNAUjtDUjJxL2Z+RVBScThwYlYzeUlJWkJzdzJFPytLN1p1bi9BZ1BJKUNXMHxHTj5QN18jIzJnblZEPCI4SEBhPDZAJm1vLiFqUiVK'@;
put 'aXZpW108L25iSiZTWSooR2lsMnJSKW1sRCshRV9eVno5Y2IiPEA3cm46cCVMblFjOUpfei5UeiIuPmpnSkhfZS84L2NkVH4vdX5RbGg+dFpFNHQkXVFLVHxWWXNGeilPQ3toKi9AQUw6X1tVKzxGdW9QZCIqK2Q+KD1QRndiPnU4VCwmIyFGRj5lT0hxZiZMMktMPytjNEMoIkIidF49Z1BHVVtC'@;
put 'bzZYc1EmUkg7bnJ4UCF9X31TdEg9V1t8aShIQ052QkROUyovfitzLDdue2d+N3RAK2A1M1JIVjFZLFglXjUiNnd3K1NkR1N4WDN6On5HdENzdHxVYSFvXzIuNlQzP05QQDNVUDs6SylhRUpsXVB5OCVHPjNRbXJfby9yfkwkcHtNbzd1InF8P19JTUR+X2FdKEg0Z09PYSs7dXU6JHhpKz4/Mjh6'@;
put 'VmwxdURUK2U3blp9cGt8UjxOeStlay5BKS9VKENgUGxGUyxpRUdZI35LYXtASipVQkU3e3FxaXRJSXFLPzwwcTBnRW9AUU9JRGU4VXdDIT9eTSJxLGkoLCMkLipWeyVaT0hAS35wZj5sbE9MTFleamFlMz0oSSN0JmQ7ZnJOQm17Ll59R3A2Z0Rqe3d6Ok5aS0UlIVd3SC9HSztrdz9qJXE7OiI2'@;
put 'OyslWi4oNC9yY0hEMG9eOnR2SEAkPlY3fkFoXktqb2hGPnhVfWM2fW5+NHJtZlM5PyMiYHpUJStlWD9wSlo8TjNmWm57YGsmTkY8Y1Z+RGFgTVdlc3x9MlNiYUx0bmp9Ul5ddUR2O1AwXk1FR2klYH5aOS4+M1I5LzdRIXExQkZMe2I+UjdtYWAvezU5fjwzcjtdUTU1JnVhel1PPSYjKztueV01'@;
put 'W2x3MiZARnY/OkZmSXgqcV4+M1pGbGZ6TyIrKW1RYF0xUVlGSEYuZkRIclB7W05INSV5ZzJQPllCOlVaLkhyczdiYjs9RXJdTjBWVSRdUT96Zj52TGNeYm4jSEMlT0IkQFY7X2dKTEk8b25qdXwkcXhhXnpJayZlRzJueGNJMHE0TEdwWURXUHFmZ2BaRHJ9b3VtVVhCajJXX29NRGxOPThyKmwm'@;
put 'MiQ9OlY4WUwwVEgiLDRrU0IocmxqSzhuaUtGfHM7I1k6U3BEPUg7MnlQVktRXm1eOXpfLHRyQ1ckUG9PPUYyeUlJdkdjZihIRnFFRGwyLn5IbDRJblBycXtKIWU8Qy4vTWd0am4hPjQvbzI4XyVOU0g3QUdTan5NUW9kb1taQTloYkBqXjAyUnF3STtkbDlIMmJXPiY2YHlYTzckd1tiMzs4MyFO'@;
put 'bCZSblQ5SnFJS1Q6W2tFODtQRjwlcTRCOk5Id2ZZUExWa0w9IyFLJX5TTiIvJT5ZMnxRPW1PP0JDP1csJGJCXjVKQV1XLy8mLCs/KUQoK2dsIjBvOzQ1JiorTSNKaDtHNyRVOlY+I1JgIiRCOT5lKm9gWSIhJSxMUm54VDw8JUUvYEp2THw5THJhLCM9MGhwfFY8PzdVJXt4amUrd2J5XmB6Q3ou'@;
put 'dXdPVGRuVWMqeXYhV2VadEJWUHs3djU3N0tFaGlaOi9gMl9ffS4kSm49RlIyQ2cvWWFNWGQxdlZrVT56bilQRDNtbk5IJE0vVi5xWX5bJHQ+ekN7ekk1e3tOSnhKQyZHanp1LGpYTkR+Um1rZlJtJHglYzE4LiVRaVdzXT5lKFA1Lm0rOFZyeUpULmJ7I3J6VjRtXVhoJWdtZEhtOl0oWGAvaz1R'@;
put 'Jn1VQTVhTWJVRXJVRDhYfnVIeDRsMlBDS3tOO25gNT19bj9XQj1DM1RAQ3ZDMilzKjldbkw2Okl8LkxMb3s9W2RPMjpme2YhfmEwNltqJGhnSXd5Kjc/YlFbJkZyZ1g8UjJrUU8yOTUoVWk+IWcsN1I5cGg6cmZXQyRPKzIuZ05aRUljWnNXXTIwZ1VdXXIlY244OnBxa1kjeWZiSFpFN3F9fnB0'@;
put 'fW4kNlssKk80OH1WcFZlSnBVInM/R1t6OVd2NFJ5c3BZVzpoIVhTfW97Kl5WcWlqczc+dzBrSG1nZ3M6PXJeNUxhVzZnOEs3T3ldSnVdM081S2U4ISpHMFthbGtxakN3RmMpbjMxK00odnU4O1s/cVpaMnRudFN3RGxyK3hrVGRXRWNyOE9dY0UkLD49NWc5QTU3dmpFSk5vdj5QPDxAUDBaUyZW'@;
put 'OTs8bT9CRERLeX1jQzckKDcpLG87QWRPcjBfZ21xcTtgQl9WMSFsUmRrd2osekdgSVtoTExkc1VacXFOPS4meH1ncF5oOTpFaDNKKzFrWTFPKWtLc15tcDd+QUxeKiErX2hoPGpNdUxEJUdTZipILzRHOCZCcWBaQjBNMDYhI3dgKWxqfDdCREtSSmRFMXAxRWJUISMsPnhXcXBrTkRJaW46T3VX'@;
put 'dj95IytQZmVUX31RS01oXlRKT2ssQX5qNldFX3lmTyV1I0JYeUdaQkpRTG8lWDpjQCk/KUI9NUcxfU1iOWRnNzdjbUlUT08kWH5NYlVVX0I0djNGLnduOXdtSXF8UTliby5COmJrPWN8S3pHNFFFMGg7Qn52cEZicGppWV41QWVTbDNqbUw5W1oyP3svYjQxT3o8KXVifkN3SDYsM2JJd3FPR0Vu'@;
put 'VCVQYDcxdFFwPGNEO3JNfDZydGVCb2lUdlh7QXVvZj4pb3xeIklIYTsuIVp8bm9yJTJJI057Y3NnM3BWZyxiM3k3XnI5OyEkbUZvSU5RKzVLMjhJT1FGUmYhbU5ucHNwX3hefiFYcEc1MEI2ZTc5Zz89U2phdjF9QXV2NXxbbER1fT9FUCVMVW1acSNTJTdaPV9eX3NdTnYxblh8MiszJFNpV3pS'@;
put 'Oi9bP19uM2IiLEVqa3lZTnpSRjIuQ0RPPnFSQ0YjRCR0emswUTNlIlJkTzddRkNzJSZ5ZEQvJXdgciEsQ3AjN21uJVRuMXckNU4wLGlwUFFwZ1cuNG86YCNVS2M+bkY3N2VqRzBaeTJoWFZCIVNGTCZtK20lfn1ZNSoyeEw2Uik4aEhwMUt6UGAqW2tsc29zVXM7OzJRemF+ajJ9VSYpJTt3Jk8l'@;
put 'XnJ9JmNKaHRRME48ZWJGYWw0Uk8uO007JHJ5djRXRjVaaFhGYGZeLFRMXURMNGk0OSVPRGQsJlhII2s2ZVE3cj0+MTNdXTl9XU9hTj4kalVuP3ROT20xdnJmblQvMlpkJG5QWFlMSFYiOCU7KHFVfXVRMyRgWTowWnhNKWdVVnV1NyNFZFYvdlp3Mj1pUDBuWS9sWClSY3gyPCJrIml9RkhWZUdj'@;
put 'QEIrY3A0ejJDTV85NVkqPVt+aCtlLyJUI1dXV0BAfSZvK1ZHY3lRPjtwWmVyMVV6KWVYMDxpQGhpLFNRdHBlbXpNUUQ6S1JKfjFlYV1fMmV8OXpvNHxXQk8uIX4hKGhlImNVKDBAbXNNMD5vfDpKX1dMOH1WIzZBdSg9Mmt2RCRdaW86SFskM2U5Rndoa25STGNocTU8OU1TKDtpVjIiUGd4MChF'@;
put 'Oj5dPEBfeF5lO3VlLjRwSHxPOjgybz9kSzMlTXx+RX18cHU2SmU8LEZydk8xWDkhdVskaylrTmFAQUYmLmN0PGo4eDFfT1YpeiQ/PG9ha2k3aVRUSilJK0c3czErI3BRYGIjJDk3IzpqeXB2UmIyPyxfPXN4akxxKWksLFU5W2NMU2ZbY0RKdWFLZlRMNEZZUkIjX2UzcjcxL30oVnJXWkR2eiQo'@;
put 'W19xZWk+aTs2cD1WRjZNQEMiLDZpQ11NbzQsODJjNXtabTZJK35bMEF4VTJUKGkxJHNLN2Q3O2tTfTtkcnpxeFNIazc3T0MlRzp7Qm45JksiSCx3QFFwX0hHZ114WDVEcFErJn56e0JEL0A/aiNjUml+YH1TaDRCPHouRj9gI2VZMCF9OUIqQWpJQCs5NWtWQHo2LjcqPiQ0RklhTUBNW359OC5x'@;
put 'NCtuYFhNaVt0N008bj4uWE8kdnkqJVV2Sk8qMyVBZl1qNVVeWW49fXpYenJScTtuPl9VdkZgfFV7OUd6VCNAISpgWyY2eV1FeWFIZj8pWSxKQkhpJmhtWWdQc3pEdGNlWFdDUWc/Jk03aTAxK01sPUYlbTx8dCRHQmYrdT59cns8akhyY1V+SXAmXl0renU9ZXdASERuNkRWdD9pZmYuXkhZNXZa'@;
put 'QEdweGJ6W2kkO1FuPklkclRDaFp9enwuTWteOjJLOnl3Z2dRYihkM2xxd0omaF92InhVd3pQLCEsRWFDKmhwZ3xZMCh2K3ZZWjN+TmY7XXA1Xkg7ZiNTWzcsST9ARGAyfVE/Wn5SS21qdWZAdyRpOHs9UzA+Ml57JkU1WD8sSyI0OEFGWmF+Nn1falYpcG1feVJwPCU3OnRLUWhgdkNBeGZaVCZW'@;
put 'VlZ3KCE0O2h5MztaXytYO0gvUlRbVCp9YjpkZ2twUTpxZWlkX35iOzB2TjBDSmhReExgbFtQYng1WyF5Kj8xZF9WNXpEXyFQYXUkajYxW0FnQitTVEN3SCJmUSs9XilbYyN8WU5mLkN7dnIuS19EXVpSMm1xKUx2UnI7MDcmZWdrZVclI31DLGxFKUBpKT1IQmQuJVRxJGpPaWEwV0FLWClwNnxZ'@;
put 'JDI9TyhhdCZmMWF8SFNeaDNkN2NqeDE7ZEtrd3AwQHc2YWg0P1MyOit6fGx0TiJNOWhiWlRTM3B2NnZKWTJhODZ0cmhLcTRVYi9wWHpFJDJYdiw5c0psMXY5OW5USVg1flQxUTprfH4oQyNjVXRpYFZ0MyFIdiFBaFBmP1RsTXdWTjcqK2gqczcoNlkwNWB5ST5oTmJVajo8O0Fvb340UEE0Wmx7'@;
put 'R3crTzVnUGteJD08KiRBMUxlIn0ldmwpZVMwIylCMjt1IiVbOX5GWD5nImlPNHB1ZypBT0p7NFFiTy9gUV9ZSG9PZzUkZltbXnE3dyhYK00oNUIhR35FTyRvUXA4LDVZPXFvLC9QSUUlSiFpJSR8aTs4VylRbmNxJWI9VjsvOUdATTBOOXRQfSUycyU0eyhIN2lNemFNOmQ/MXlsP20uX20kZEpF'@;
put 'OD8wdkVnXm1BZjcxN21NbDklLjtSR3ZBWFhiUiU/elZBLiJbLGNRdXIySTYiUTtGUjZBT2JMejZ4PGBQTmdPPSQiVUojPGA6MFMiXT1vPFJSWHdTNyFUTjc+SmNIUSo1VWsrRXgzUjpdPzE4NHw5QDNvTHlQXSNqc2o0dHRkRzxYMFQpaUNTZU0+a3tEJTMwSVhTN1ZROlEqek59bWRKdHpHXjE2'@;
put 'REMyO3JgJVQ3YjJPLGdgZ3ozQTpSMEFCL3ozNDhGJVlCWiR2ZlFpJX5PRFIwSEZDSCtAYT93VyVkVXcmWiZqNzNSbSwkeG80TGRCJnE6eyNuezgkWk9fb0V5TFFDcWhWTFV8YnVoYmVHWih6NCUrIU5tbF01bl9dWXJgflF7W3Qyent8MS8iSEI7UGVWdGoodyRePF9BMWxJVEddOVZfVjhoWlVC'@;
put 'YzJVd2RCVUJgIzA5IkNDTktzTUNqeTBFV2dhOVtzPExqMzYoSzxpRmd1bl5qO2UxXm8wM1I1cXglPjA3VlgpX21dLmRMQz85RjJJNUFuJTwmI3xIQHBLKHZ6eT1PS25AZ0QyXWl9MG9LKVJ2aT4vQ2Y6eUU/QGJ8VktFV35NRzpYQyZEaSpsK2BqbGN8KnJdaDlURzlgMCs9JUxpX204X1gpe2Ak'@;
put 'N2tpT19uQXdWfW9ORDtII0goUDFValVCPjE2bCk6NVA5djh3eiwjenJWSm5qYDNyMVIsSSoicC8zTDRmUzhWSmBgM1hzWVErPUVfJUcpNUk5VlViYWxCPFsvTUdFP3hPRVIzRlF+JCkwYVRsfjtBMHJsL2VeYE9rVzxLb3ZYaFFqaCJGaVRYY2tnZzxaezpaJWR2NWs9Rnd7OjojcjR3SHpHOHlj'@;
put 'VklyQ0w0ODhMZ0cvRUAhY3ZKKFA5bD19UGNgKnxpY2RifGE4aFNgSGo1OTB2TTg+emYscE5xXV48UiQjMj46OnFFJUJ7KjpQX0AsVDNkW3gwKTI5Lnc3ZURwJH1KVm5odXJAQHImLGBzTnBQblpEISltT1dnI3FsX0k0LjFhNDpqNStVcGNXTTd6cTRzKXNlaFAsdz9+LndSS1loIzohWEQ5WUQ/'@;
put 'YCx5YiVdVCRAVTx0Om9GRyRbP2RWSjhLPmVpK0VBUHZgSUc5UnBNVjNfZEZQP2xmWl5oOmA/OWkvQFQ8Ty9ncyE1JFV8fltbYzM3X2MwL3xPNl1gInBYaDBvU3JIQXxpckkvQUQ2ayo6RUp0QSw/SnduS3NEalJXL2sjRUpuRDJgKiE+cywrJHpCKUNxNG4sMkxdWT1kTDkpT0RTNiY+e2o+TGE8'@;
put 'dEhAbVNLbzkhVmgjRDo7dkxWZDhfSTlvW0V1dWhJYndwbWJ3OjN+Znd2S1RbTzU7VVVARiJKNUhkNUgjWTF9cWs0RDNoME42X2FAcTU6dnhvPypbZkw5dGwlcEN0ajdfW1ghT1ohI2x6PmpRQEw9Lk1SayhmKDxRQ1JIRzgsO00zTCwhNnU+bFs1ci93S3FsRiwrYlRRSjh9UUdGVD9HW2FMXnlr'@;
put 'OjlfZ0luWz1WS0tzc2BmV2g2XmpaUDBZVTB+e0VYSyhrNWZadFY2VEo9MTZ6L2JsPlcmYC5yQFNyPm9AfCsqPkQ6TSwrd1s6eVErfFF8VD1iJURbNnEzRTRraXI1TSpJTiZ4O1FKdTRUbHd0UT93Pi5idiF4fmQ1P2dNVmFzJjlPMXl7WTRSYHcwcWBNM201RXRyc3xKOys8P1A6c2N6SX45OVhQ'@;
put 'STM1UTtUXVNwZVVDSCR0KjxuPTI9QlY+KTxmSGliI2shPjZ8SzpuLkRBRk5NXlEjZnBmT043XT1QMFhoKUQmNUtDUUNbUEtkTCF9fkoqIm1RNGBKQjtBMCJkfk4wdGh2LzBIcjpdUlRifTBGYnNhZ2BaJTkzdEw8WUQvZWRxZVBGRnNmTGc1VVFxZG1ANU9RUzVGay5nLldsN2FyJGpNRDgxUndb'@;
put 'dCh6PCpGZEFjcV5DN31oZzgrP35sNW1+aHxuWD4sN15XY2BafVZvXUY1aztzdi5SdGMufWluQW5UcllSRUlpYjRdKmhVQm4hQHBTb19SODEqS3gibywpLzRPKnV7ZWN7UH1TO0ZiUH1WLCViXm07WF07TF9qMz9eP0g7cF00fWZ3YVpZeCVeKSEjQVJhRmhtYC5vajs+T25WQXVqQ3xSVGtJWVIu'@;
put 'RmpdIzJpaiQ/KyUyNlcoW0gockg5dmtMRFErb0xxRWU1LiY4JWJndigoNjVadTY2ezpzYmIoNzp0I0RgWHJ0elJxbTBxdmZHP2BGJmskKSg9V2pjPTBddzxMMEMjVlVEdF11K0tBTy4obzZrdXJgQjA5N3VFQ2czZTlQZHhGTXprJFI1b081bzNtfmQzfU8wJXtDbGl1dGZtd1dPQUh8KU0qcVBv'@;
put 'NSxSJUczOzssTm0+SU1xWH5FajV+Tnh+OVAhMC9HalY3WmlAQzAleWllSX1pdEZmYUR8On1bK0pmYTJnWFE4fTdPbEtZSytrYyhGPXtKVVdSLmYyTS4lISZ9NnVMMU8jYSwvdjxzKT9ZMUN8dUlibDVhbnlXdjN+YHZhfWdWc0tgNFJ0QkYhMzNhNytocTVGQV9heiYle1pCLEJ+KWlrL1ZxTz5t'@;
put 'a0h+eTp1WTp6dDVKaSpLMUFGKjF0V1hpYCo/TEFhcFFlXio/ViQ3Y1NEQENCdkZRLiZ+aH5gIS9OL1IkOmZIdmt9VyZHfExsVUtGeGM6WGdSeGhlWnw1e0tLN3NnaiIjT3c8MXxNUmJmTzBwTHEqcDdJXyosU18wN2hqPzZuaE0xd3ZzKFMvWWlTVlRtZ3xCKCVlWyVoKl4uRXUxUzU/bmMoTEN5'@;
put 'bnB9OjwlQ2k6Mm5MTTg2blV4YyNkbSNLcGYkNEAoXkMrJHk5U15ZNlRGdVlIRjMlcGFVQTR9cnNQKSw5T1I/JlQmXjRtMlZESH1CZUNyO3VQVlkkIk5XL0ppSV1gMlhMIXIhQWZjTnVYQnxdQDh8b3ZZPnBbXSQlSHRudE88NGAmXUE0YDEvXUYsSFJlXnM1QEQuRyNea0YzJWhCNDh3YEBGbXUj'@;
put 'Z2VeTV9FdyppbmVVaT0wejJAYTRpNlFPVElVdGIoWHwjZy9vMVQjYHIycSp3cmtNYDk+VXdTUF0qMmcsR2h3THBSKjNqT3Bhfjp5NUtvXmpzRyFzYHcqWD5yIUkyeWRyNiRsZDw2UlAma1VFcEZWNFkuY09sUEQrKUZSSWRwRnorbWpiLjk8I2YlaChtLnhDV2UyWWl+LCRBTzdzbTFVSzYmfTFS'@;
put 'LzdXP19tfThMXjolfXlIeHd3ckEkSz07ayJDWFZPZiowXVF1IU9wSG99ZnF5ZGJGYWFHOWIsVWw0YShEOVg0MEtYX10rS2VrdDMxQ3RkUyQ+PX5BOzFiZ3gwb0FKVnQlcmtJdFE/L3VtcFR4QUJKLHdXOG9fPGM/a3loK2w/fkgxKGlxPmBLPGNdTklyO2UmP2JCTkhQLDw5aHRuVTF+fTsuYTRE'@;
put 'WSUpXU81c15mTTA/Xkc+eUBmIk0vbj49OS5UfkVgR1Ixd2pPbyZ9YiphX2MmJH5UOE8+Zls2dUNbP3p0OkJgUEg8UEldPHlhW3cuQk4pWCtDRjREZClpKVs1TC8kQ1BITWN+MD9gXnhbNVhqSHRSSHsrOnIsZHhvVG93cnx1VV1eLGBIa247NkZJTU13VS5ueGx2Wz4+XyVGSWgoSitWdW15SC5i'@;
put 'ZXwhMklCS3kqXjAvV1UhWn5xSDJ2bUtIeiZaVWpudHl3Si9ddXArRWxfPTpXLFVJVyNqdnEuJlhPQ1hPXmV1MntLS0Q8PnYwOkUlV01VbiorTVhYVURqQXU1ZSVWKz5ZV3BqKDdyUHwhNkJBOWFbOylGUzt2b0JJekhMbjslb0VCUEpmQlh6S2l3SkooSXB+TmN1eEBmej1VRkY5ViY2aHFzVEow'@;
put 'OnJwX1IhIldzNm49aSZEaD9IZk8zOVMmUDJkNEkuaWx2OGJAOFJEQFkhXzciSyt1cz8yeCVSaGZqPXA3fCt8eGMoQGBkNEUiIiRYOll2XmJLbCFoRD5+JmBIeFp8LC5tI0klXjhRUnRlUTR2Ril4K2dXPklEVS91VnwuMyMkdnlZaGZeTnh0VmdSVHpnOT48PVNDSFl4XUo/MHkqRHxeOzJXPGUz'@;
put 'YVJPdWN8K3gpX3d8VSthOHp3TSRtTGYxNmlsNnJ+WDtZaUs+OW95KXMwMEl6eVpeRkF9TzZaVGJZSkB2I1IwVCMmZVZpZk9wc3VEQ1Q/XUlsOkVwL1N1NWQsR2oxQk1CLiJ1OyYySzlfI2U/Knprd3xPSHpFaytjQyleXkJ6VnFGcWZyNklsL3A1SWI4PWBkRilXSGA5XToyd0ZSSiJ4O0c2eTF5'@;
put 'IWExRUdLdS48PFZLeWNFSzJIMiprSGwsZzV5a01+ITpsVHg4P1o4M0xqPVpGJHFvUz5mSDdNVDNCUWtbUzFLbzcoUDlucUxPImE1OCJofj05bUg8YExZU0RFWUtkI0BZaWk2Q0tLQUlUU2lxJnAkVXN9VjEjWSpCW3BSd303IjlxI25yaTJ+cSRRSXZ6cmVpInxlcUJ9XjN3RExCP0Vqd1RlK1dL'@;
put 'WFBNMW96SmQ9ZE4yS2wiKk13JSR3c1Y6JHMkW1gqPnZ8L00mP09jNDYqOyNNLCswRzY0RWQ9L05yZWV3SSx8WEg5VDIkOkcodWlwbWUufXBMPEMzQGl2KnY0eU88aCE1MiZKN1tEbEgmSnNhPDZ8UVR5ejFlYjNsLEp2Pn4lW0g2ZTxjMGxsbVBxYCk+azxrJHhWZiEkUTYoKmMvP3NfRCF8cU03'@;
put 'OzJJbEQlZklKXzhmUXRYNShqbn04Qmc5NDBOR10+ViJQL1pXKkhuJSY1M2NQfXliaG0zPDdvdCQ8T2wsaXVuIUJ5WEtEUk4vX1hPczVvUj4rbnUlL1ZaMEtCVDFqQE8wXTpNZyFYPFA3ZGRdLGkhW1NRVCpVZjUxNks9eFhoTHldc0pVczhIdWx9LDA/XzA6Ti47IW54fntITyU4LkRgVDxtT2hr'@;
put 'TF8hbjZqOilZZGZ5QWBwYz8/cVNNKkZ3OTElVTtKM05pNUZYPFEmJVt1KlExIzNtcEQlNk5KTkNVdmVmeSt7Tk4sdX5CanAhSS8vJkBmN3RQKzBKK2BANCJIY3ZbNShnZCRNN14uXS5yMTNHa1Q3IW9WRzw4TVE7TU5UbXMsR0JNVnd2TztXLz5DMUYsX1Y4aiFFWjgsY0M5bnxHdSN7dF8jXVNI'@;
put 'M3JuQmEubWUsV0RSS0pWNVZIUitiTDx1b0c0RFg7S2R8KUhgJkApMlgyPC86SGM1QCE2W0AlU1dqREY3UyFNRSZ5KElKdCVGL1FtPFM/LnxFX34yYVp7YEVQKGBjUU5CUllFQXIqbFU6LHxXK1YuUXpXPUJiL25+ZG14TnpKO25tU0t4YF19LEI3R31rcW4oQ0VrYD5WQTwzei9nLz9fWiwmXyw8'@;
put 'PzZ8W04hRjJqSHZwams7Ii5MN1F3QnlnJWUjaChvI2EjIn02ZXRecTVvPltDNHtzRU4oVHBLdmlCemMxcXsuXkh3PF18VC5zenFbdGpafitkIXR7cFNiQl8pcms4TEV8SHY6dmxSayFiPnFheSpNUCN0KCR2YTkwUjwkV3VAfX58fEAkZTtRemNRbjkkW35RbTl7ZWE3fHJJTHRLZ118U2B6akB2'@;
put 'Sm0wKmFoPDFDZ0FKR19yVVI1YFMwTmpUc3l5JG92aSsma0pqeDlPU2ksNzshQUFlPk1DODJwNEBXKV87RnBdVntsYS5vQXZ9K2VFUSwlRVE3Q3csckg5YXQ8OUpqOzV2O2F9fUxxaVRJMTxGRWkxTERNYEV2elNacC4lO0YhPC49SFRPc2xsZU5CWFYvcjFZNCRRU31BNUVIcDo5RzJHZFM2eXQx'@;
put 'Uykqb3NGcCNqSStCYDxpfG9nYkFkWyZOcmMkXiQ/SmFWfDEoVlVPbXNbX3FoUkx9YEQxYFt3WjlqLnJScFtqInlKUzg+ai9jI0BvaWtfNVI4W3RLa3hMUFp0RVosNVR1YC5sfGB2LH03QUc5Ozowdjxwem9FWVJ4VnZXIlcoKj9deWxwLzk7P05VJCFTZV9bN09LZCxnfklIMXsuIWNHU2RtLEdy'@;
put 'YGshRSxHIlQlfHxmKWF0UH18Q3AjYUNIRT8qZ34uRC9lem11VyJuK3RXPmFbNi9aejtlQDJXWXZHLFVtT29XcWNNMCJxWl00Yj4wSiQ6YDRWMFB1dFpzUmxRS0RnXVJOR0lfPkRBOVRwI1ohN1A5bmRGP3pVLiZnMkwkakw7aUIkKnkxM0cuIjdxPEpzdyp7WyJdcGtlODhxfmFuYiNMMDBoNjwm'@;
put 'WEFzbiVrTW51PmNFdjxtfk5fQC9uRml9LjNpeGx1MT1dK0kjIVNvT1FUNTZES1BfVzNwSngxR1hHNSpePDc8WF9IJlNzWEx+ITwqazssSTwrMzEjRntfcUNGWmIlVlNaeTEwJDtObWF7MSE2TFE0Pm9gSlI8MithRkQubFd5Qk5vK0tTPH4keiVoTWZVM2JlKm96aVR6QCFCe0JRXmdwOGV2Sih0'@;
put 'YllLNXBZYVoqLlQlSkQ3WHpPTW9GcDh4fm1gciswaFFdPlcxR0x9aGRVfCMrMWkhbUpmN31IUjQiZHI/KnczP35wJDRjYV4hYGgjPCRwU2E5Q2FoNFY5XVc1LmZyOj1LIVh3bShuUk5BMGB2KlBIdXRFN35fWW1VPj51ZChwXi9SdnJpfHo/YX5WTVFlZj1UR3NHWUYicT52Kl9iN2VIMz0sNygx'@;
put 'NE1GYy4+TUdWXkwidmZZcyR1dl8se21sQXpwYXRHZ1ssRTEsN0RadG5TcE1uNjE7LlYofFNMcEdoP11qJFtOIkV1O3l6cllWSzJPYEZITCZ+QmFsRW9fZlF0YHxDLkR3U3IsdTdtVT8hV1NicWRsdyJ4fntsPFM7Wjd2cTszN2ooUUZCZVVyOVNALkMmbmxwKms3cDc7dkhdOXYoLnBCdzEue0l5'@;
put 'RVszN1EjSj0zTzNSajNNZSglMGM5dHNTKWhgVzROSD9BYzs6fSYuIWA4Ilh+SEtlWCQka2h+dk4jWXNzYG03eSp5LjQ8bXduMilwLlg7VDdeSCZGdz1XPSFDMEsra2s3Wm5AK1crY1tYUDUvbmluJUNJbXIwcHBoJjY9PSRZX1k5di5aK10vRS5aJTMuI1tAVzwmRyo5TDsjWC9MX2Niaz5mZkp1'@;
put 'XjlQR3N0eHheJFVUZkN+Li54L0ojb1hRVSErXnY7W2lnfHV8ekExfnMiTEJRPD47ayFIOCs6YlkhZW15K1lLJGt+InZpMilsSyN9TUdhL3ByMWtnJVBtKUN1Q09dJThbW2N+LEAjOlElckZSKklNYXxQMGN3ZGB4TzkiUURrTnhXU1lMMl9yRGhddz4jQWFzdTMwUDdZRnpPJVguN3JSemdWSTss'@;
put 'MThEcmtKZk8pdmJ1RVtVJCZjdTFkKXBaUTQ6SzdxWitDdTpbKyxuI2ZdOGtSOzZyRnVMd0QibVh5RjZwe3AlLjVrJFdpK3xQOXpkS35OezleKGw7IUdebWUrSl1UdjRKfTFIIjhZO1QvTz9KczFIPWxCTm1MQXxiXy54T0t4L1M5NFpjKUVDK3BXWDVxXWRuJSpGc3VEXlJzSjlMeTIsWllyQk5M'@;
put 'V24zbCtDQT5YfWR2WGtGdnRAamlJKCliUDRQfjp2KW1kPURdLE1fKTd1N0Z2c0ZIcX50aFQlIk85bndOVEAvW21KVFkoU2JPWiQsdy53QX1TUFhZZUk2fFlNLktaT1UhMUZedkR6RTgiO05nMCEvZD88b2ZTXiQxRyZlVHBTIXBHZ2xCVyZ8eX1iSDlaQmZgJiFAO01QKW4jazVoVEpiMkB1bClA'@;
put 'NXs5bHtFRk0xZilVdTdgM2FqS31fSVcuPGs9M1o0Im86JHk7eGA/QzYyPFBWMnJfPltuekFjOzBXfWMhNE9kQVZ6clFMYDVfak1fUDMmVnkmJUxSOihGJCQ1X09HYyp5JmAicEM8aiFGUihNfmpaV29YLlpXcWRxcyV8fEhvIURma10vWG1fS01GK1lheSJ5XVdRLE1tRjhpcWN+LGZ8e3xCTjhA'@;
put 'LEs/dGZQUnx7ZVttSytlMFJSJl5hbzBMT2hjTVJVfDZWQVBHZ2xaNk4yPFo8ZjRkc25NMCRZMCFsKD5zKkc1PUJXLERzIi49TmBWblBkU3tVRD8+cXh4TU1iP0ooXVswO1FTM1FkUE5OaWB+Z0RQRk48UU1YSEpSeXBpei9gZVZTXj5JWV1uI3sqOWFTTEc1ZFVnXT9aNWE1PShNS1I4R0k7UG5D'@;
put 'JUk9IWxnPmo9QVlvRjwiNnJeN3RxKjVPbUA1ZUhwaiNYRThWb1hOPj11d2VnaiEhOChFS0d+aig7elE/KGBQSGJ3WGcyZVpqKncsUiM/LiEiaDM1VS4kISVYfHJSUixyM3ZLKzlvIiEieXFWUVs1KEsvInhWSyg4KmdpK1R5OjV4TUR2T25NSUtQYSVRclBuaXZmc000aX5vdGkse2AkPmlkSyph'@;
put 'SmFdSzhBP09JUWFnUnldcHwzQHVVP1VRWCJuVEcpTXsxWnMqM2xEWHEsfnkvWlRIVVt4NlkrWEEhOmh9YSwrfihRU1RZWDdbOFpjI3gpTE5NITpUcylTXTpsS3J9V3J5fnN3eTM1RHksYC5UIzkhd2F3Sl4oY3RSLF5mV2RFcjgyM35ZTCw7VUo9MkEzO24yLERNQHckVHczZW88QW41OC9iNFZz'@;
put 'dz5ZZ19gWCxpYT5dS3QmYUNQajtjeik2QmtEfWNpO3UvfUkwOm03e1svMUlmMiRnZG59am5gRCtyNGxbYGxmbCtIVi4qPSZ5bkpTSyNfR0JeMW9zXyhgc0d1YG1TTixLKlAsIVQ6QTMobSRUVHdjUCo3MVRALF5BOThoR0kuXSMiKjEzUS85SXcrWmlQanIqYUtybExmJlJ7QzMzU3RldyNCOnI+'@;
put 'NEB2QmZMZS46KGMseSIsIytxVk9eVmNuMUlaPW0reyRRW3QoJHFPQF54X0oscCFrSCVYUXchXTVnS2E9Qnt8YTlnaml6XkptNiZiWlRlWWNIeX55V0tnXk8yaiRJQCtBQCZIcThbeD1hYTZVSHlKTENpRWlQM3x+PXkvZ21odXFHK21XeTtqMmJrUHIuMVFnQm5DKlM/Wk8/Mmc6SSFheldZfUow'@;
put 'RVN4WVdWRTRwMVdoOlU1SDZRNzxuQnhRZV9yYCpYX3NwfkFlJT9kWlI/ImwyaUE2ZSs5K0M7OkF4YS5afjtVTURUcmFQWURnT2kreV9IcT5PKmtNblUsOk04UDpwbXJdSUp7JURwO1tAUWREY1FhKHRRLGBeWEtXUzEmJTk1fEFiQUBUXUZsP14sTTxiUDl2UkF0UEgoVSF8Sl4sa2ZVK3Z4Mz9Z'@;
put 'dClEPkdLQkNXQH1uIyNJfFl3THlaRV93X2FHMCxPPG1YfikyUyF3MUs/fmg7dnQwNmhrWCtsYTB8bywlQ2dJbnR8fnMueGZXYldxZCtHInJ8bWxxWnZXZiMpfE16SWp8THJnOj5EJWxHZ3IpS0U6ZipZXmw6czUuVk4/JVhRfTB2cHBwdz48NkJRfkB3e15+dkc5L2dUQUUuRW9JaGNuaWl3MUEu'@;
put 'cVcqUGI4NH0oRzQ0NE5iZldCfj9SLmFTZztfYlRVKlQ8fDBqSjx1Y358L29qXVNNYWdxOlt1az9gLDY/eEV6Nz5iLnt2VDJQcUpoeytZWmliR0U5XTh9USJ0Rk1vTWBoZnRbSVBVM052RlRlNSlxenA8NkV0VmRHXmBMJkY+OlR1RUBbYEQlekhdYkJ9UGxqSj9xbWgjQ1JuYypYPS5qbXh2ISI6'@;
put 'VTk2RmRmZ0lpRT9fWHo7elVmcj5FeFkjPll4eWNIcnAvJHhgV1JtK09UJSF4QGE3PEovMG82VDZIWHZrSXpESXFmalF0W09oKlBRe3ovQVFZUnw3O1NSOVZMNXhbOGYhKCh7ZiN6Tn1iczBwNik3LihGUnF1KVRhIXouciFKOzN1MUoofXcsU21kU2d+UkY+Ujs7LiFTdFheOUlpRlMrITBMVTsx'@;
put 'M2xDL35wW0lMdlorcno/JUl7d1JHe1gpPS87PkRFbzZsXiF5PW8kZiUjd2MyVkpNLHJgNFckXmxAeCFSUkVYJE4kTUteUChJYGt6YjgkaFE3UDxMLCxJP3BtW3AzJltlVV5tYVMsYlMqOVkwU2Y/NipAcFFxTHI1RyI2bXlHTkRlZlJ8L3w7fEIlflI6QmxOQCZCQlpHPi9OfCJHe01XYj9XVl00'@;
put 'R0s5XWQ2bkljTHZ4YlhUfCxMOkRGa2VhXXt5LDdhWDJDeCh1ZSFONU0wfjAyVFR0JjkuaHFkZFo/Wy5ySG5LM19YVTpHfkB2MDl7JlR0L0tuX1lQJWg+QGBzcTF8X3c2JUgpaCtvYG5LcVRvK004ZmRQaSI0RzhVWTREbGs4aSU/ZFlsPFNTfHl2JDNwVSVkKFd6UCNMTzJeWUJsSSR1U15sODRi'@;
put 'ZF1KRCp7bThbNmdISi8wRjRqRGF1UXxuRHoqcFQoI05kZUlYLlspVWBkZ3ddPSwyUm9oZm93cWU4Q1FncixKeDF0KmgvdnNpdmwzMTJOSjhfV1hlRl9fUmlFYmxlTVMlY1c5PXRgWlM9RT5+Uk9uYCpPNlQjcXwrSUhfNHh0WEgjMTFPLnJmPEZhc0NreypHNU95R3FyKXM/MU5iZkIuJj5lKlpF'@;
put 'dW1VKipDOSh1LExyQyxsNDF4SS5kKTRBZkhFZ3JlNG5ZclZ7W0U8ejdBQFBgNSVtb3xPbExpZzI6O2JEPTsrdkJZRWckYlteKGtbMXg2fDQkaEB8PVUuTD0raFBIbG18OmZnNzQhJSNbP3tqaEY5RjE+LmIhLkI6VlVtWmtrbGZIe2swKUdhZUNseW1TMz9ISTx1TzldR25leU9Lb2tlfFBFXTBP'@;
put 'NylUYSt8Lj4xRDNVMnZyQGA3fFdnZENQW3ZgfDA+KFlPO1hOOiZudCZwS2sofDVvMXJITVErN1p1VmkpIVZLZERhc3d1PypTfi9lX3NmPVJdbjlqSCxRWVhnbWJaMEkma1A/S0ghYz5NIU9EUnNJTXtIbj8vLCRYV30lUnBZTVJ8ek9fcmdoTCVXTjs9TnU/JUgjUFRQKk9yaCgpN2JCd2hWVjFf'@;
put 'PTxedDVmdzJUZ0JgRTp7SXpJbWFiUTxDRkskUlF+WXdGWk8jfmR6PFRDVWU3Q0p+cj86Lj1peDZVNjhbUSRzak1gYkZlXkRlViFYOzcwaG8vTzF+JE0xczU6OVRZeFRsLGlYdD05aG5mbEVNdGhYKktMUFkvViIoaDxVdTZaaj4rQixCdCFlYT9yRGVUWFRMU0ovZWo2bz0zLmU5Kzl4QVprflhK'@;
put 'VHtyIyRXaGtCZ0lHUjs4Wi5dV3ovLloqYlBESG4zdXV9Pm4sWn5SMlV8NDVzVHZCTXRWMS4sQW92UHRTPWRlY0pXOUA3LDJaZz9xRylzPFB6aH5gaGdBcGFsUDZ5OHhdZ2c2ZSppLzo7KVdKQzNSUWcoNk9Re3RVRlI5PmUzRGApMTdgbERocGBRfltMTCRAPlY6fXo/YlUoWHluYFcpdntNd3I/'@;
put 'WVc8ajIkak5pNDs5NmpPfmVKNTJYMH19NyV0LkJWTUElJW8xajlaS2NqJlJxRkw5PVtRQDpDVDF5Ml5iWmE7bVNhdWpeWCI7cWhPJSVaMnYwPlJ7T2BbU15MKkw4enpJb1pSfjM2Jm9CdkIwX11reFE5aUI6WC5lZkpZNCRsfCI9bndoUEcxRD5xfCx4eDArJDJfVipMUTxXem5lVzRMSXlTX0My'@;
put 'als+RSNneUs7YXwzXjlfeSM0fiJDREoqQEpXVHlgdjtTX35yM1ZHOCYyeXxSMSYwTTh4dntQVnkqIkU4JHp5dikoa19NT2csdFI/KGxld1VYWmFCR3Z1Z25bcTVTO0pVOD5rLF1EVDBdaFZOd25ybXk/Qm1DUjVPPzZCcHdtdGN9aDxqcWhNaiRSVisxS3B4eTdeO1lDJFIpeTMyNWdWRXslejhJ'@;
put 'PUA5NVVrdFtIJXRbW1drRXVNYkxNWDNCPXdWMENgaVJqcUlPQVNSU3V9VWh4KEdDXTdmYSF0W0xfSztda1I7WkdxM3R4SWRpXTJ+eVpyP3lHciFzOjtzQjtZPE0/ZHskdUU7ZFp9UnZsTXJOPn1YbyhkZmo4bzhafn11SjlUbldUVzlLWzw7VjRee1tzIjw9Mz9PMzRRL2ZKUj9Hd0s1QG8oSVVM'@;
put 'WSoycmVeMygsSnI+ZU5qPk9pfTNUTUlGZD1oP0UqO3ZzIjhaKE52UDdWYi9ZQFFbeSwpPF8wTHk4ISR4Vk5IPDtRXT5rRSxFPiJsZyZIKipMTG5TT1MwVjh3ezUsX3x1Z0BnTWRnOjssRjQ6czswL2VBQkVHPjdNLCVnaDFFRnY0TWl4OnpeP2tkZ2NWQmpATX5rZmt2a3FDSkBEVCh3bnk4Kk59'@;
put 'aGpyNUgwa2JVVGcqQn5ScnBmL0ZebFlgZTsyPjk+XTA+I1F5U2F+M0w+SXM+R253KGVxdDRjYVhIMWB2W3lgUGdzQCtPMUZfaX5MOlpkY1MhOFhlcl58QGhjMlR1PUVZMl1DO2l3UDx5Iyw1VDE2PyxoP3N6UjRVY2JNN3FpPkApRHgyUlhDRGcicmgveCk6KDZ4bSpaKSo8VnQqJWdPLjZ6OD4m'@;
put 'fVd3M09yIUtALnl2U2lPK04qbDJWYkROOUNCN21xW11HdmZvaFtdOVZva2AxYk5YaDtHeHdfcF9SeisifTZzdX4wLmNzTiQxNj5dakpTSTQ+Vnhvdk0xfTF6WGIpX1JgVHxHNHpYKng0I2VdZU5xRklMb1E1NnI3U1hDQWxJWlJoTUpDdi5EYCg6QHouemtoQGh0cU0rW2cwQ01PS2RIMDtqP11s'@;
put 'ZmpjKipLKWczczw7bkZ6VTZDREZRUzNiR3lGX053aXE8emp+aUA0VF43OGJmRzlkUm4paX59Tm9KZVhZX2UueThaekBDdWxbUFluI1lYUTdTdjw3dHpCJk93QVVSVTNNZnZMcFk2WFJydUxtJnp8PlBGfGN5RVYyYTF4PHxQKlNdRjxuZEtWL25+WXRIWWdPJTtte1M1IUFkMCQ9ayNrZjY8Tjg/'@;
put 'fVt2Li9NZHh6dV02KCx0WHNJO0R7YDpye0RIcW81SWtKSXQ8REFhIl44dypgbFdKN1dDfk9rKUQpbVJbXTpvYWJYN3Q/SEo+K31YMUN1ZyhgYjtec04pfWhyOSp1ejI+dj41Qk8+WU1lUyk7IXQqbWdpKylnRyVqJDRYXT5uMEVxUF5CXiNtKX0+L2h0JEUxQzd8Nz8wSUd4Xyl5bk4uPiU1YXU9'@;
put 'IUF5VUBhSCJeI29MRnsvZDJeflFsbjc2Ok0uejkoVFg7c3hqbGJtYDJ6Z3YvOEE0emVPfEdqUXQiX20yYTxpWCU1UyZ5P2E5Oyh5TldAISZocT5deiF5Qm0/QWFUbiEoKF5hZyhBZHlLPyx4bUArO3JKbVI1MVFidls0NWs7OU56P2podVtEVW5bTntTPisiJDlnbCwiY3k5bj5DSyxkbmwofj5J'@;
put 'PWx3TlV9NmhWS09YVmElKkZuPVRJQD5KUy4jKXlIYlFKbDIvVSxxWzYoaE5kcGZ4VlhNb0dKQCZqIUEhaihDQCRYQz5QN2ksOmY1Kk50QTtJeSohbDJ4OmdQXWc6Mk00NylDfGJkfTQ+W2FQPT9aRG9AOT9vcHwxfEZgQkxLUTI0d1dEMEAwbSJHb0pRTHc4RHRRNHpDUnhQRkBnOCVwbTNgLix5'@;
put 'JSU9NFpnS1F7R0tJbnd+JFo6RkVwW2IqcWx7MC5aPXs1T0tyUyUqcVF5Rm9LQC5pO1dVdTgyOTZ+dVIzOyZ6NiZeZCtAZzVbJHIoP31oUzx7JkcxLisoLzt5ZHF1c0BkciRFU08mbXE7ZTpCISNgI3N5UmN3JVRLY0dlUj9XQkpPUSZ8eCNzWzVGYm5oMWxxZ20rTDU/YXtlb3MuenlYUUF+YWZm'@;
put 'Q3Yse0RDRHNiYSZiYV85YVAxc3pdVkY5T1FSelsuSHl5YW86MFh6e2dReyQ5UU0uLmFsRldgNkNeKE5dQn1BRVtYJW8mUClkaTAzN3J6V2BMcyUkUmMxejFsY2FYbTY8K2lbQipSViZ7MjRCc3B2W0Vde0YjN2R7dGFxaG9aSl4uOS9qLlcoYWxULlZvdylZO3Jkb0BFJUdpaE88aS5BPiNxS1JQ'@;
put 'TE1DcVBkP0NUUFB9PkxJI2AwSHo6OjE+MkAkO1NkfDl+RTg3YndjR0cmInk0cVEifDp1UHdafXVaLF5sQl1ETWpyfUVpRGRGfV4jPHRBdypmVCMzeisyT1QwTi5qOWFqamAvPSY4MFZ7OlBgcFN9aF9CKzckY1NAT2xPQGt5JXFJQkVjZ3cmd0Q4TlA5JV8lUGArUV85OHghNWRFYEB0THN+WW5e'@;
put 'aTJROGQwKCFQNDVmKTJjRFd7LlFfW258bDE5cj5hSHs4KEhSM0EsREgoL0w+MzIufVQhSUBgYXgkOmJKeS8jJVFSY1hoL3dIeiQvOW07ZmNvU2UwK3s7QUgmZyhiS1QyU1hbSHdYez1SJTRLMXVKZypud0RJMns7cHlVckFSWEh+JXNnIlBIazckWFJtZG4kQVE7QmpEb3dPUEdhNzR9flN0Ll0m'@;
put 'ZUw0WXAsQzA3dzJzVCIvajVVKmUkcHk9K0pEbyEsQkA9VG81ckZxJHE9ZG5EQzpjbWd+LFhFTUFURCVpY1guW0VbV3pZUEdyRSxWNmAiK0ZkPFNQQyxYJn1sbDt4Oz5BWmleck8lTnAqVV1bR0JjVSUoX1RGMjdoYUdTUXYjfTdlW0RvK2F1IzM3UHQke11AT30lcWI3S0Q2ZS5GNzlzdnRGaD9z'@;
put 'IVYyMVF0JDM5S11HM1cvMjsxSWlBQ1lYTmFfekpxUGdRSkBbYzdnQXV5Kj91R0wpR3VWeFlJLzEsWDNAMVk3cUVqIyI7a0BzeyhsZTluPTR9UX12fFUjbUlnRUxpQChbKUdQcWxCUzBmK2JNZz4kQ1BuNlpCPFB9Qk1mKHo/SDhzMXp8fkI5PkpURSgrLGNGbDloMF1EcyFUczlDNjZ8YEc5a3w9'@;
put 'Mnd3VV5HdXJ6O3R1bHEpb0hYXTxvQitifDd6NzUzTDk3e2hedi9JOzomemxeeVVYTWIrbCpgNTBHajAuRVdNcnlYQDBLIiw2ZkVEVk48OFosWSFudyY6YzVFPSQ2a1Q9clZTUStBZDlSWHRsfWErLm9PSD8oVWdvb1I3SDVCOnoyRCZJN3ElX1NbSllzLHUwI2x5cyl8KjJRVUNAcDF5PXhLPDZH'@;
put 'PngmOk1dOil8PiNnel9wXT5eUlZdamgkSlBhKThqfmEsT09YRUQvOnttb2Bbb0lkLzN8b2VPejY2MV4haERVc1FaKHRJezAjVGE5bXA7TEIhKEY+djIjbDwsUHVdZkI+cm1bS3RaTXM0JHppfHwzdSt2ckQ/OzUuW3EmTEE4Q2dPTiRQSnRkMT1obk9udmokK1omOzV9Umw7NWdIfmBhRmJhYWNg'@;
put 'RjAxR2JUWVNVImh2TjUzU0AoY0tkVUhUJnZXY3ZqJXhsXzYzY1VQd1okY2gkU011RDpmV0Vke3Z4bVlfbU9Za0E/I3NpeHBicXNRQUR5cDF4PWI5QChBSWdyUG5YVyQ7IzJ8UH06a2VQNXxlZzM6UHVTcV1tNlROSjtLSEtZY342c2RRQ0k1ZXJ8NE40NTZlLGBIQyY6YCtWNiRdcCQoayYwak1p'@;
put 'bT5PM1phK2Q4c05fTnIoY11daD1Pc2VecS8xI1d5RDUqI1B6b05gOy87ejxsO0piMWEjcyZaKShrTXBibF5yejNtTnkjJl1aZXRedzxtQEV5ITcmLFBAI0JDOiZwekttREB9a2xmNSwuZ3RmTHJ7NkVGOmVYMlt9PmlZdjZpQkJvSjNAKn1obCxSOHt9cVlrSHhPRUxaXktGbil+d3pzbHsuOXVY'@;
put 'WCxgViI9ekRqVElTJkcxQio3SldidT1TKT90Y2lefG1qMyQ4PHtTT2VGbmFpT00mO25Ye2V3dC5PKFUiXSxgcSU0JldELHlsP0YofnQ3QlElfilvX1QpNSQ4ey9XNF4mQU9IWil7OW4kJFEoTU80d01ecEAwPUY0UCNoeXBHQD0sMGRIckBlR1guZ3xdMl1mIUB2PFVsbVIwfHEsfUQxLz03cHt4'@;
put 'K2RkfTddOWddYW53OndlRTpUMGJzRD0+UDc0aU9hMitBT1lAUlBSP11rcSRWN0ZhP3VWdWdNSCQpb1RjVTJCZWFhWE9ldUQ+UyhPXnJDWy8vTjZaXXFTWzlxaGtVfXZtfF9yY2FJN0gwSGIzclU/VlRORWk6UnE5K2FNJGVKJXl5MUAmeXs1aS9TYyYhR0tOXlZEUFVqMVE4Sn5EVFFvaUlwVz5O'@;
put 'MWg+LjtDcXUsNSQ1Y15OaCZ9a1t7Ml9Fdno/P3M2RHBCaz8vWWNDekFKJEp5V2Z5XX1KaHRtUjdvdl4/biwkdThnTj87Smp0L3Q9dWZNdFs+WjB6V3Q6NFIrXUtkT1dJSXYuJiFYKl9UJmwpPFc7InxbJn5NeE1gQ2JlOWx6ZXk+ZC48I05qe1ZuM3d3STorRnx1Kl1Ab25afS9BQns1aSF4Sldf'@;
put 'YiZMMCNeUDxpWkNjay8kTSYlX1YhSz44Iyk+aGt9NjB8fSN8LGk2XilEQE4sI3ZrNEszKVs/PT47PmhHMFZrY2t3LCxFU0ZFIVZ3JmYqQUApZzooZVBWNldCL0JZcWxsRSQ+NEcuX0l0NF1SWGReUX49QyM4c1dsaF5RaTkvUlhbcW1bZ1t4WlVzRVVpVlB7Zl8+JWVTXjQjeG0hNGJtR3lBMVpW'@;
put 'MFMzTGwxbSxfQlpoMkYhOH1mbUkiVF9OfkdPSFQlQ0F8NEJDQVBuWFtCensxK0E6PlhJJTJOTE5mYWI/QWl1WW5Dbz9bamAyKXB7bGckRShITkBQRnx3WWFLP1pOZlNeLFI4THZ7Qis0aUhmKyVWdCo4dSF5aUJHdEh5dkprXTguXy9kPXNtSzxZbV5Neit4bnJHJFIoWT5pVWEqTCZ7YHM8fnB2'@;
put 'SD4wWSs0IWZ7fSVdY2MrM046U00+P1hQTk5ifnMwWWRjKi5DTVdnbEs+O35AcXp7MWpFXl1zZH1SeXMpIlBVIlt7NWEud1dVKE1NNjk+OkksSVI9TFpnXXR6ND5GKGF5OVJadXNORjVXQC5qJmJzNmowX1NUL1pzayZKRGAxZ3Q7MG5NVT1CXlJVfnc/Pz1Xa2JdcSFwSCs7MCo0fDghcFkrRCxs'@;
put 'Sy9RU0J0YzdbYUAkfC9dfGpvaF46IStDSz4mcnRLY1IsITY5UUlMS3g+Pm5OdEJsXj4hS0V1VX5HO2lsMG5tay9zPTM4T1tYXXZFdzM8en5fZ1ZOVkwqRkc+QUJgTmFgSWs6VEB4PzVKa3d1VUhFU1FKSTQ/VEJsSlAwYXRDOHJYdlJ6Qng9aip+P3UhMjx1KlNkTFk5MSU/TjwpYCZ5U0dBTC4i'@;
put 'Wl04cjRMWn4wVztsOU1HVl5XO3FfcjBDJHMkQlZDc0M/ZiJZKz9XZXkjKDNTNVgyQnM0IyMzIWJtcjptd3xwSWM5bm5aPiFTKDxqIWwmfVFedl01ZXpEcSVPYiV7dnElWC8lNCExdTJ6Ny9+PShPMmRlfFM1N0lYX08xQ31rTD5BbFBTeDVSeHxqT0I2RSIjTzBzMmF1IWxKKmVbaW1yNiNOeTRR'@;
put 'KU16KkVvbEQ/d1k7JnJsLGBWNUIvQ0tFTVg1Jk03UzkkK0NwaCs5ajVyViMzV1Z7TWdIK003KHxgWllCPC9xKEQmYlMuTEtSUm1HO0VBPVRMT2VIK0xOPmdPVWQ7W35lbkh1O3V5TTgsaXImSyEpKTUkRU1tQF1TcTU6d2F8UUY+QyhqJGJHcnhKfC5YSjZUQ1N4eDhwenN3LGw5PnQmT01bUCU/'@;
put 'Z3phRjQkSWRvSXxCSWZhUz0wJFdMO1d2KmQ/VWJMdjZ6bWdfP111VF9wfXU3T1dHYV5PZXxLaGdHUCpgdE9mQUNSMSpSZWoqMjN5JClrd0gsUT5xLm1RIz0zVEBKWE5+Jn4/ZHUrWyZRVHd4fHpTVVRmfkYvJSlDd2MwYGV3M2BxbHxRNXpQIT0qR0pPNGNhW2hKfGNMVz9NRWYyYmdqSXRaXXE0'@;
put 'dkhrXj1WMUN4Z3ltJXdgVU1QUDMyflV9fChkdHR4QmlFb2FoR2psL0xVUWgvcSF3R0NrLkgicS93I0RXTWhWVzZSb3lrM3wkZCgleHhRaChke0RGSSpnOVhZbVIyVjBJYV0vIjlETnF4Wmc6SFFvOVttSDpGMXFlS2czJmxdcCgkfGU6cVpzMC4pRXY4fXhCR2Z8elVmNywvWlZ2dUw7XzN6dUFj'@;
put 'OUBrUHosYC8uSGlMSm1FQGJoWGtfT2ZnOHFnb3gyYmVfa3M7ZEZtfTxiWEo9diNkLn1jMy5CfVk3RyVFU0FxcFM0JHBRS0MjJGouOkdGYDp4S00zKjAjNSpmI3huMFBYfDppNjczfiJaMVVpSjxhZiMoT0xIekpbRFB4U30oQ3gmKDM9cjkwZU5fMktgOVVgWVZ9dUgiYS4mRVgmdXs4QSlETXRU'@;
put 'cUhUYCxyU0VVKFt5KmhIWTJJKmtMcHtINTlYKUFzbltESFN5WW1PTXQ9YGQ3V3c4cCYwSi5LXnt8K2VzXUlgQiUkWHYoUz4oMG8vZWkyMEFoNnAwQHBRSmQiRmRORT91Ni5iLklqWkNNdnc/S0ZjLCwjQ2YyMyM+UHw+VE9RRHR6Njs5WjA4LlIvYmJTI0kjNiw6JDJEUHx2bFY7NV5tdDpmeH5q'@;
put 'JFE7KSV6OFUxTSo6ZislU21eaV1kKkA2cjc2TnMlQDY0RToxInlIdHpgdVlaPEZVM2woLFpqSmpiaFI1Rzs3UWt1b0VXTEZzfG1hLENMJEVfSjsyfj4sTkR8dm1jPHZUNyF2JlNkbmQscH1vXnFmWi9aWDxUdio+X3lITXZCOl8mZD1IOCFOQ2hxWSFzZU10PENuaVpiKC44dChyNThNOiRhJi5E'@;
put 'Slh5c3QrfD1bOFVTUi9ecXZ8Q2JwPCJWM3ZKaTVISjciKCw3dmhPSDpBV3sxWzgoWChrQTEiIixXQSpHOkRiTG94d2AufD17Y0o6NGJPWFBZSnNtSG1uYj08PzwwUk43UTVVNUJzMDNAWix3ZTR2cGdnNlhfbm8yS01EaVFDRFoyR0BZc1NhRTFbfWIzam1be0EqRTU/NyNmbzpjWjBRMWNuWjtl'@;
put 'K15TUWlJLntMe3R+Umc/I2N4VWZbTlNYQ15CdnFEWmdZOSZ4S0U5NX1pbWF6KWVoPitvR2xvNyNlend4NndtIXtOVkxwZVhedFp2SG5GZDRiK1g7XiY1eXMhcj00b2lucX1TU2k6TlJKaGlRYz5Mfn19PGRXYl80V1t5bUUlUXEmT2UuTzQ3bHFsQlpTNGFQI05rdCY0IVNXQHdhcCMlbTBIRS40'@;
put 'JilvbEs9RyJOfVYmJls0ek1zUzN5cUk2a2VOLE9vRGJYT3N+YWp0OCZRRExfISEuIyNkXzFYJSYoT0lUTWYzJjtCKCJeUlYxbFQ+JjpwTkMhLCNJOSFEQz9QYy4vLit9Yl10NUg4Xn02flBYWGRxNntoO3YmOEY4KkIjMEJEfiN6NWY9PkZ+UHBVJHNBKiR9ZVFhW1g3dnlRXl5mOFYlRWg5STh5'@;
put 'M1JUT35yNVJ2eDt5Pyg6WzVbMnJibCUlUmhqYF14YHFFdEZQVUNRY3c0YHlyR3VGXU4+cGxMYCtyUjQjUix7ci5dZ0I2ZzdgfV9acmhDKVJsKkBvYm5jP0JvNE5kKUlwVTEoMFJac1k8YlJsPnUrT0lxaFZ9OTZmYDouL3o0L1dIZlFZbj94RUtjNWksMVl8RGI0LiQ1JX1YdiJiX3IlO1s8ajRV'@;
put 'KzZYcDt3QktBV0tMbX15eStdYDR3UHJvSilFZkVnSGI8VWo0SDlGU0RkUTd+UzloSFk8MlZFcVMpe0AzLyJOKjBJdVZlTCRpRDJHdkNbYVRZJH1FSHpZMkN6MFRHMChAN3FndFhTc05uLjp9T1ZGMCFgbU5bL01wRXtDeyo9RUVlVkMyU1pUfmNfLkw5cnNyaC5Vbit1MF9LU2NdcSFhVittOzQu'@;
put 'QjRib2tbUE1MJERQOGxlM1tnZmZgMTkoJFRGcDNRZDFBcTVlJkxZJmZmYHRMVkFWSFIoKzhtd0NgUFVKX35GaX5nMH05flo/WjdDdUIzMzFfJXFIVik8b24wIV1xUUViM15AWEBvfUsrR09ubE8iUTp3PTpqfHZqOT1RRiF+NjhZdzFgIXY9fXVNRjwiQkNtQG0hKnNNXiMzPS81YDM0JV06bHss'@;
put 'MHlCImxVMGgqSkJ0Ym9qVmYmIWJJVmZPXyReYUE2YyFwQVAsdGJGUUJXNjt4N1NrI019QHNjPTJZfF5tWX1Qc09odU1eRlohZ0M8Y30xbysrVGJ2cVA3S20xL3I7UyVYKkNCallKRUwzdylEJGJSWGpMWHhpP2A2IUhjcmdqcG9fW2pePytsdGMhJk13SmFhYHVFRTo3WTV+KCNGTEpYY0lgP18p'@;
put 'a1BoSjVwdn5jO2hnR2w8SUVvYWhHO2shYDl4UVs5QFdRY34zOyNsWGRwaSZhb0ZlPT0vSSQ3KUI+IVJ4bE9LLDJGPjZxSWlzYWNuM29TIVM6L2V7KDk5Xj1SfDooQEMsemRgWyN1bTNGTS8rbS93XVVQSnopYFosLHYwRGhSK3JQQlgwY2l0ZjNoN15gakoyaG9XWSZZS35TPlJwM21jIWpHLzJZ'@;
put 'aSxPbGE0MGFzPXk3IzJtdHhoRWdNN3lWe01XaVNKKV1OL3h5c0JyVVBQbG19JGI9MSFffkk5andTKHtCNyR7X2BqcS5FPWNhNDZ2LmkqSU1WbThheXxRQl1uTWJYUyx8ZHU8aGd1SSYuVyExUnJ4bFl2OEZGNmRhbEFAb017MmttLCpZN0M7Ii5jT14jXkJHPU00M2lFS2U0P3FMWk5AWUZSfTUk'@;
put 'R0drWSxLLE5zUWlqMilZOE96Ii5fb31ld1Y6QlgkTzliOmtbSnRwT2RKUFhnOl5xdlNjVU4/a18wQ0gwa3IkLENeMT1waTx5a3YyWENfLH4/PiQhJXpQOFdgZ3peVFQ7ZTl6ak9mZkByR017XmtdIWEpTH4wKH55Sl5ud2ZzdyFXL1Jee3Zaejg6Uj5RfnV4QnF1cG1iRkxqI2UzJElsRUtgVC9H'@;
put 'XUEqODtQdFQuKzAsblMreyl3cGNsQjZkfCY+SGpuYGB8LmFOfVY3anRdKSUwR0o5fkJ6eWskRUAkXmNITS5XKjk2WGk7KX0jM1Q9cEh8VnBhTjw0eUZjVkttV2xRaERseVspRjRxdmdIMk5FY0NSIzZIPGA/JndFYnUxNnNoJDZ3eGk6Q0BJV2twMS5IW1hSL3lBX3pkNDIvYDE1aTsmc0wrNCte'@;
put 'dS8lcS5aY1QuKGU/VU9AbTdpWC9GTmd2QCgpRD1ielhiPWU9c01xMmBeRWFjQUZaZDEqM3E+LEQsTFIkSUghIX1GMFhnJHF6IixQMz5NX3E1JXdSP1g3MXczLixFPkZHZytIKlJ0QmB2cyxWQ2p4Rl9fb3p4YSIuPEM+QltNckJMNVojI1BhVT07bzhUc3o/c2tfPCFtU1tKemNgTHJgQFpJX18u'@;
put 'byJsWkUuTCxqTEpsIzwzVWVaLjB4dU07eXJHdU5tNlUvfWksSmw5WFNYRCE/b25gSzBNWCwvZUQsKXpbRmo/U0d7M3oqaHBQJn4/Rk0rVzZ2a2R8SSJ2KFpJblQ8SkB3MlpMUitBb2Uzbn47YT1SR0AkTjFaUDU4WGQ1RTg4TFFAYW0jKEV8TCtKam4mNEtwUW1uKHAvMXZvYi5pIT1JPlNmWTMz'@;
put 'STRgZEU3QCgkMzksVStkQmNodlJmM2VzOjMhYn14KXo3WVRMdShJeyk6XmM0eXBmMz5lWEtFTTxdWHVpaCNwRVRuZU0uXWZqM09Oej82ZUZ5JHB6cndDQjdjUk91eXlvYl85OHhGbHw6eXRfVzUyPkp6SW5nNiF8MThARlAlQzY4eUxCdHNIQDNDc3EieDFHNHBNSFA7LkhRbTgzWkohZVRENyVU'@;
put 'SG8+ZHg1ZTtzeyE/Wk95TUJwfiY3ayZ5fW5yKy5dOnpeLloyMDNpd0ZmMlVCfHVyXnBkdXYyMGJEOTpfZE57byRwaVJXW3loOWJ3fHlrb1c0e3UzeiR5SENIckk8RklrVWxtRCkla2o2c1JBUkVDPDNKXkopdHVoYkdyYD50OVU4VileZGc7TjE6QigpUmBwSnhWW1BIOU5BZTsiYFV9eE52KnZg'@;
put 'N2RgMExLZit1LFlQTEp5I3JAMnpvO15VQkxdK1dyKHUofDxrJGt3Yk1JJU5YT0pPRXVDNF9lSFU4PHpDWmJ6RHc5a3BFaHhIVX58KHM/SD0uYkl9OEEyVVthSnpJJGliQ1RWQjU3Y3JOVTF5JUZodnVHTGsmcW8lXjs4WXFLeDcxNWJ9T3MhOSl2fUJFdThYNVA7X1tuKzAjOj1bYktgbEg1T1Qp'@;
put 'TVFYOnVUSzZifXA4RnU4RipzRGB3Lm9zUWZ4b1NwTHNwPy8rN0ZTS31WdE1ySVBKKEJhUEVMdC8hZjE5TXZad0V4KUI8Syl2aD1+bkRmdk9DcEVIXVNYeXVZVDQ4VGFYSmIuPkVaUlQpd1kmIzZ6MkNMQjdPLGI9M2g+dyFadzZQNEdVYSx6Z0x+aSVxdTp3UFt8KiFNZl84RiE0M21OWnVGOCIr'@;
put 'cW1NYiRbdTZ8JH4/K2Nbamx4eFF1UldsZnkzYEI3VSUoOFhYcmltfmtLIntlNCZ+YSlfZCFJe1cwYUB3MU1yZzBZTWY/VlJOfklpRXRiS2BKQTo3M0xlYlpyd0ZULykkT3JrMDZ8cDQ3XjFOay4sUGQ8ekl0JEo9a1ovJT9QU3lHM197JTcheVRzSSpWQ0Q5RFdgPGokdD9wX2l1ZmZ2WSpXZCpv'@;
put 'L2MufG83RmVkTHxEaSl2X1ZnN3JbLjswdzc7QkU2dCQkW1FmYkAkJFhqOFdGMEVMQlowUTlwcihaY1s3ZXNjQCMhe2Y7c1dZOUc3Y2xIT3FPeENJemFJQTEhXlM0W0VqeFhbZG8mPl9NZVReSCZ1KDpPemFeZm40MjI5bTQ5cC86YlBEXUZOYTVWXkVnKyFydWZjPlFYcDZIMEhrI141LGkuJXpI'@;
put 'UXhAKSk0VkMiOnAsRXxmaURreDMzOC5nXnQlN19XLHBqb3dvLmckd0ozYSlmaWAkVmU1X3JGeENuNkhtNVFTZT0oOnpTTUlLbVpvbkIiYGdiTitsejcidzhfRCZ5QDdRXjEqOkBwcXhka049ZmtRVUZYN3BeSFZ4Z3dYPk11S0N+NHAkeFZJRCNGfSQ0Tl00ZStZIUBiZ3ZjNCQvN3NPJlk0TFtI'@;
put 'cHFybm0kd343P2xWSHwpNj00UXExe3NgTkMoOXxJclteKX50ZVZ4fCRxZjxXOFg0WkdrQVpKZmUycyQkbCZNejlCc2lCX1QyOWZbOFE0YXxkRFkvK0AjUnBJX1Q/Pk08TDZVQnM2MSl1PHhxen5YKXouMFJJVnchWHppYD95Y1ghTXhaR2Z4V1Rfd1J4OzUoXVhvOlZ3M3RsaWFDd1h8emphTjpf'@;
put 'W0QpcWdZWWJrdUZqX01qXUlZc1VDUndVUT9QcHdvMDpmeUp8UUtGeSoyX3hZT1hyK3tjIytpS1o2Z29aIVt3TjBQL3ZBJjhQbyxNIz1lcCxecnQ/dDtGbGlPaiZFPiNodDdAO31AZTZTWG9NWERLRjVsLGQlP0p+a3l+RD5pdiMvYXlhWnJuWntMfDRRMTdRWUk/TFB5N3gxa1ElUDtKJHtIb3d3'@;
put 'UENWZE4oTj8+I2tHYFZpSyJlUVArfDNoTU18R1A+NS5WN1FhU0olLCZNbjJfRT5JKHM0dVgvcjVROSp0PkcpOS9MMiEucH54aWc6YDtxVGRJdWAsIWFPOEVPKGZ7TXQrPXd3OCF1fHRUcWk2V2E+KS9SL1tdSUhSZXgzbT17SD9MMFY2V1JwbV9NWnZjZllKRiZuOjdoK3RoUnQlLjJtbDJHaF8i'@;
put 'IyJGYU1Dak9ER3FXcmpPdF06fnI2dV1zWnRFM0dAdS4vY2h8dTRNT3pLNyo/NVIxbFljYEpEQFE/YUdRQDl6WX0kNzd1aS9jJV15ZUh+ZT9vcDdrdUxkNEs/QkJ2VXdrM2EmbkoxQ3plOkF4Zzt8UWdeam93REB7elhdY3ZPXl5YNEFDZXtlKzhTK35RSCVOOGs8b3p6NV4oeT0/bTxwKjw2TVVr'@;
put 'bWw7ciMqdnheVkdaO21iWDo6MEhJMk9hRXY3cVM7bUxZcWp9aiFZYF4mNkVefWl7VGhHR3Bwd21aIUl6PTlXUjMkNUNbeDswZEk+I1JAUnlNd2ByPihhMWdCezxkaXJ9TzQvYjk/UiwqaTxZKzNzZyEiPXZMMzNOPTt2aldfaCZFLmtKO0pRcDlUdnI/SktbSSkmKnk9MmJXY0VvbzBDNDJ5R2hn'@;
put 'TkFiO2w4cjBzRmRhezZxckhkXyROdlNLM0J3Yj00RmE6NFR1I1dDS0JuU2A0Smd1V050NEAzN1srLG16NW91WkV3ODdJV3s+KVdnKX5sTDxCaismIW16W3BGPEc9TXAvW3dpO1k9e1h6UiNUQ19LIyM7PXd0emVQaGZ8PFEpOFsrMkY/Zy5sRn18Xj59dTk5dTF1Vi94Z1pjXWFOSGNjd1hUfDRA'@;
put 'Qismc11FenMxfVdZUksrdS8pcGBxbWF9LD82SlNBRVFaTEVDVklqW3ZeJU9vN0BQJnZpOE54dHEqXmxoeHBmITVzMl1eayxdQXppUCwwakAraCVUWUhhfkt9cUAxNVQ6SXhebEpzbS9WOG0qbzVWV1Q0UDtKP0I0fGM4aEdXeiYxb0wxcF1TektNJFY3LHM4dkJpWWcrR0YrZCM3OHRdLksyP3g+'@;
put 'JDNKbSxxOStLQmQsQmBWN24+Rl8oMkV4W0daVEVaL2xVX35fYlB8eVs6e2poUlExakE1fWJvJl40ZVA8SjchXTFAV1trYUxZK0A7Qi4zejldcG1vMmolOik4aEliRVU3L0deVC9OSHJhKWdtUzMpSkU8TFZ9fG00Q0E9NCpTTUNMLF8hVEcmJjd3OkNNbk5tMCt9M01HWmU6PGJ4UU9yU3EzMyFu'@;
put 'S2xwZn0ycF0seld4dVUlIzQxM0YwczNHbSl8ZTdjXylZVXowPGVVcl9XZTp8fCN3TUEiJlZQeTJDSWZkXVJ9O1JjZz5HckFhUkxgejdadEYzSnpOSlNub21KeiMkZjEpYkAhd1NDP3sxOTg2RkQpTDg9a0x5NEhKeX1lWWlXfGZQeX0henI7NzJ8Ynl6aEpHVCp5JFVJbCl6NSlpSHomenRHSkZ0'@;
put 'N20/fXsoTnI/RHQmXkopN110ZSM2ZFdJUlpKbD09bHE0OGY9N2ZbdWd1P3dRJFR4OUhJZCtFLjV8ZSNsfHs/UGk/KUAydFRMZm9DNWhdfDlhQGQoJFlYWXlbRyF2JHpMVlVIVDxAd29pPT9ifHY0ZG1CMzxPLi9ndHs/fmJzK2p9QlgoOnBpYnNqW2JRdVMofUwwa2p2bWk3djdmaF4mYWMybjEu'@;
put 'YFJ5P0tPeUFKQltyfGY7Zjd1YzB0V0ZTYGImZStUamoqUntCdyx9PH51VEBtYmw1TGQ8NkZmQSspaEtYYlMrO1pIZS4rOmpeUEVSVTBETjhIPj89XUlRPzBzd2NJRFd0d01XM117LlN5eUxWPDImZzV0fXcyQ2MiSU1edk4melF9LjcjXT1qd30zMU4mS3xdS3haT2h6ZSJlK29HYFA5TDQyZ35P'@;
put 'PVBYKT47M0lueGNpNz5feWR+bHdoTCNVO2pveE47Olo4Wi9pN3h6T2M1Jk9LN2pPSCZsYW1AYW5da00rc3RrK1VMKmx4VCpQXlNOMUxnS3p8eTZUPUQxdGF2U0s3RDJMSVZqVFkmXmVDej0wfkB+fWF1SXpeQSh5dlkkY05veCtePURDK3lmJClFbnNWZXg4bWtfITsjKDlVaXF4VUR5el5xdihK'@;
put 'IXlGam5JViRDJCRYP2FMUHA4QyNgQXFhVDd1YFs1dylPXUBTJjNhTXYkLDhjZHAiTHphOzJ1QD87XV5AOm9XRllnWSpxQWMwdEZ1anVVWmtvVkhxZD4qUzt6I1hfSzJYRkFoWj4iemtWR1NZWzs3dj5aVDhVV1ZXaUokQjRlIVpHSzMoenw5Uz08ZTghYigjLy9xajUxLGw8a1RZUyxfc3I7ZlRF'@;
put 'WkMvPzFwOkpLTkVpUmZXXjpRNkVMUiFFaWNyJWhSWzpKdCg4dnA+KDlCeSl9IW04LmpdMDJjXW9Bcy4xdkdNQHF3Xj0lU3kvPl8/SFIjOmNyTkIwellaaUdvcmExKVVNUHRFbmR6aEtEQ2k1Y3lzd2A3X2svRnEpVWA2Q1RPI1BMLnpob103I2ZqUFY7WD4pTFFENE5uKzV7Qi41dT5XYWdUX1ts'@;
put 'eTFQeXcmYCFjdWQ3WUJnU3t6cHImdz5qdjMjL0hdQzRMZEZhdVsoSE11ZFdWXnBMZC5nM2JJWSxOeFo+U3soKjVpWG92WWV8ZWxnUVo/UD4qbiZIMi5yOzJlalNPK0UwOEdOK0VqUCN9T0lEbUpYPUN4JD02P1tPVnF1WUlieDN3QGo5eEtlaCVsM1RzJjhEKHlWMiZHUFEmfFNhSjlZPWAwcW57'@;
put 'aVk7Uy5NQjdHZiFlTzkkN2opbHJBYHcublI1WntCITNpUz43b2xlTzVUOGNBY0A2bS5xaz1YeXlXNmVtPF1CMH5ydENkWXZATmxOVUI0ISt9fWVIek8kPkB2SHNRI0p8bnt8amFQUl8yTT8wW0BMO28sV1Z4IytVRU1namhGb0VmRVdocDxqWSg9blp+fHgvKS9UYkV6d0lxRWRRYUBBT0NTIyN1'@;
put 'U2Rkc2VHbGxkOjZtYUtaXSF6L2ZHdnUpLzBJMFcwWkp4LjR+JG8kVzZAT3RRRXArZls1XnxAVD82cFZpL3s9QjdYeXFFdUVTUWRTIjdlaT1SUE5OdEFxT0VadV5uaDldTXJ0RnJCc2FiO0lOcyNwPVJEI3k4U1I4Wz9rI29MZC5XTiFzZ2ZbZ3VwLDo0dEQmc0xkVVUyKncka01XVXFaaWI+YF4x'@;
put 'QHhhM0JZW2AzeyMveUVtckdKRkZTXmljWmVKd1d2TTp4JnE0KiEjdj8/aHooOkUhdkxycV5XQSZ5cUU6TFU+KWRPT2tte0hiTlksMEJ9SUU/UGhjL1tWYUZjfEUvS2V7bG55Uitjfi5sbnlSJEc8ZEIvPEdlY2Jee0kzLCNIRDV1RD1ZZUR4dl02RHxue319PSRnOXxRI2sidm8zcHY4ZzF1UTpY'@;
put 'eWk0OmozL0FIeXhGXzApZDFyJlBnKUU2NTw1b0h2cEE6RUokSE4oeSsiS3tgajFEOzAkJk04eE0yOjdoRnhVZlIyZH1aR1JeRiVQL3VRPEZ5OHpUP2laNkRwK3l4JlBaT1Qoay5vREA7YyVTekNYVGlOXztMZVsoUEd1VTA+TDR0KzNHJWhna0YzdSlGSl5VWTMvZnMmelldLH44OyNaajVUZGJo'@;
put 'JHpiPjRnSnV7OSZZaGZVO01TbFlXb3pISGA8TUJdazlTckdaMHxLQE5xS318JV9qbngodlVeSW5kejRWRUMqMGhLIXhBMUllT3h1YSVnMUg+djFiaGU3WWcxSEN8fDg5VTVOTnY6PDsvOS5+JkpzcH5dZV8qfTJ0PH1BYHRxS1JIPDgsV2F7QGtAP1pNcFFyblApR3NbPldtcXssTTw5d2F9RChQ'@;
put 'TjpKOyxCWmd6LmlkUylKPElBSmBAVEc4MV5bP1pwQ3VRYWpHdXh4TnwmUClsR0duWkVwZmVzYmQwXjsxaE9hSSYkKF8xYyYxOmtAS3xtUjNxd1Z5elp5WVd5QjpdSFthXUl3VDlHI1U7S0prMFhbJi59bigoVFhaTURFK1h7WS5nLFVLSy87cj9kLzwoUnJleldlI11PLnxGL2ZDUUNlJk9QbE5Q'@;
put 'TCZESWlMNW1kMElNZFRQVEMre0k/cGJZMC55ejEvYUhDJilfKjtFd0kqYih1VCMjUjZ1eUwmNTRQTTI5UTc4KlRYLj9CQjI9fWFNSGxYY0V7JSNGKTUjPFtEQlp2SFRYQF5mRV52SEhvdjRYaXhIJWRLWkV3e3A9ZVJSPktbcU51dk92QVdtJVZgVGg5ZiRiSHghOlU6bjc8N3VwKmJaajxmXjVl'@;
put 'JllzbXRFXj0xZjM5dUFXT2h7eUZHVSVHdi9KflY+VnY5UldwPnMoMUd8alMpXiptam8lUFA/KlhSZHgqZjVOSXFiNCo0XWI7QEVxazBaL144UH1BZ3tIPmksfSEoS2lzL1F+ZkxBdyEvMDkuXy91eGhnWk5zPDAlSHp2aXlmeFp7TjBsLCU4Y2ghN1FeJDRoQ1Q1Pm1SNiRNT3NuVF1WS156V0U4'@;
put 'RS90dUhpTW0oWllNYF4wQGVSL2NzPDEsZWNCNz5laFN2NUkwVUl7I31edFFOUCNIMWREY1ZpYyo2XW5WfmsvJThwKyVhWnV9Mz9BaXcqPFFIbktzfU8pKjIhdUNjMzhiRTxlQ0leVTJoW2NZS3N3ZWA6cnd5YzV4aU9aX0JjbCZyUG9eeExZLC9GNTFZdHZdNFhbOVpqS31lQ3NIcn1IYHZ0VHYq'@;
put 'SiUoTERCWzJWV0BqQnZgRTIqdz9qU2s0WDZHT3RUdlt0YC5AJC8xUTJ2JXIjbmYpOy5GYGRWYG00PDBeNT9ITFFIMzpKbyNyclhyZnRhZUhgRzxvPV10PHJubypRW1ZJXjpqN3lVOzt7PyNqIkokUDMqeVRNOFVvPWB0Typ6PS87LzU+Qjk2dThEQF46XWI8TzQrd3A0eiouMXBCViZXIW9taUsk'@;
put 'ajNja3o4R3NYSHJUXVAycjFiUkc8PT1bKiE/czFHd2FTRDNON1VxO0QqWVhuJnJrNSRVPmxkdlNTUUIwLnF9WmpdNFpwdzcwc1lMYVU+Q1B1YTpKeU9lRTBsYUZLd19WeUpqOmJqI1lrbyg6biwlZWghZFUwaGc2aS5OUn0wJWVvTV9WPmwvZj5qOi9lJSRJRzFkWndbaVtuJjwraHAkU2lgVCU+'@;
put 'N08zMFhAbm8/Tl5ATHdsakdddFY/PVhDd3BqbyhTR0xGRmNBcG5pPGpDeTNWXXV6cWVzRyVNdnhbPilEMVU0KlhdK2dZZXxFJmZCWnAhLEhZbGRCPSpxcyk7LzVGfTl1eXQjdXoiNzwpcWIsSnMqWWF0azU8THI+Ny9nNThYUTk3Kz86Yls6fDRBPmY2OkA+PEtKRHhiSTpKc2ckMGdsazUkfD5u'@;
put 'bz85amFAQioqejYxaCYhM0RQJE9pYHteN1lsW3FoTlJ7ViVxQWMzYGpkVGx3Z1RyWyokdjY3WTElQCNzSmIyP10kQ0NDMV1FT3lPSTsyW1tZKCI4dFFZfWt3fTd7Wls8NTk6fW02QjReW0Q5fkMwMTNRSDhtUTpab3w0SlRlcFlWcEdgLFh5U1kxWGltOSVLc2ReNjIjNExxMXZCaDBEcnFnNlhD'@;
put 'Nyxba0BIUUpQTU5hMnV3fUNyOlAoaDpnPUFXMSRYbjBlSmxBY14rZFE1VHo8dXA+Q3dhdkBLb0ZjcXJbNXtzTyV9VnpiVnhKdWBZZT9fN2BdV0N6N0khL1J7LkZAW1B4ezVoJmRsMlswX3t3KiJ7VHZRIzR1XWZTXnFjRnN2c1ExeXVbL2E3S3N3ZWg6ay96K0wkM3tKSTBRPnZDUDUwZ1NCME1s'@;
put 'WktuLl00JkpxQnUsVy9zdzMmOkA4MFhTPzIufTNseDImblBvOGFPa3EiLkhadj8zUW1pdDd2PiorSDJLYFdMPzZsYDR0Oj1ZLjVqPCtWNSREZF5sQXFUU2ZRRldEbHk9X1tbVXY+X0F3W3t5dT5rVXVKRSU8N1BeKlheb0okUWdePUg4VDdYZWtvbWNJLH5GZ1k+W0pvN0VQNS91SDEjY25KcHJQ'@;
put 'MDdQPkMoJkFmTUMhTDMkcHg+SUxCM1dQOH1fXS9XT1k2a1psNlNDdlgxKEFnfEI3TE1eRiV1KlBPSSVLdmlMLjkvKm8rTlFMOjZ6PGA4dVg+UEowJFJ4R0k4L046fHE7JFRIKCZHTjtIb2soRFk8STc4RUJpLjU1RkR2ZSFXZGEue2U1UHgqKkZDJF5Ed1h+VFllO1BzKSJseFFCLDBoNyw2SVQo'@;
put 'cSI4IXg+M0R1WFprbkQwKWNAdWtVam5EazVOdDJSWXVHKVBjTnZGUlpCJVdOJmhSTng6ZC99RUN8aGxnNXhpIXkuXVFTYWN1Vik/Q2FYSHR+WHxPbFgkV1dFTXYuYVV2eCkuJjdCbnVDY2BXIj5UQFhRNylsalBJT2lHRy5ZV2d1bDxIbWsoQnRMQj49LnZEVFhIVjteXmk2WG1AfEp1TEpFSDtP'@;
put 'TXR4djM9Ty5VL0tzKVFqVGlYeWVFRXQufUNAUmpdOSo7dntSSlQoLFlIeH5VUGMufVBOQlgpLmJlMmRbSGZ2UHxyTnVyYHR+VUU0LE87bF5IdlR7QUJ7M2lITkMkfUl5ejtZfSplMDgvO19PU25IRnYie1p2WkNrS2N0LGhTem1gKyx+aUVFVGRbJEhBM3dWMXhZRnlfbCh3fmhhYllyXnFzSjNG'@;
put 'Iys4XS8qUTw2TV1DX0hMRTw/N29MPzM0N2A4RjJXNmFpIV1DT007QDYzOUxsSzVwajVVclpseD82dXhbZkI+QHQ7M1Y3ei59R2NRY0MzMHw9VTdHZ1tPSzJuTD5dRjdSZlI3TzR3T3Fna3dJVHQpRlo9UyF3KVVAZEMsP2dEbGB+Qi5MdURzQUlmPCZoTn1BOyh0PUZoZjtDPTtBY2puZ0VyTlgk'@;
put 'eV1SaUs1KDMqY1tpPjptYnZ6VVNDO2wsU3QpOWR9KXRQa01zJUkyJlBoW2x1TypNKT1ITXZTTnRLYDZiODBOfCFMS3MpZyU4LHclV2klJlhMfiY9amgqNiRgNEZoKkJhTS5CYU10aURQaUN6fCtCYU1NOSFjM09uUUcvMlp2SGoudXg1fi42JE11aEJ9YylYMkJ9en4vRndpWFhdQypfN1ljQFBv'@;
put 'NSs5V2l0UUcvSzxUZi5zSD5pUitjIW08ZCEwbzUzP0JZVG5XLjxrSGNZKTJeOTJlPF0uOyJwdDEvbz8uX2AuXmZWKVUrM1RyUFddX3dZSWNLc1RfKndeeFcjJWB+ckU9fHFwcjsjJmtYcU9tWCtScmNKXm9Ad3ZSLnVgYypWIWsvViIpQHZfQjo2RkJMMjRPcUc8Qlcvakw3VSRYRWtFVWh2T0A+'@;
put 'S1EmVCQmbWZMXkIkZW1YMHRnT0NTOChSY0toK15uaWtMYHl7NCM7XWFBb3Jab2t6MWJQbEptK3I9JV9iY3hpZngyOkpVeERqdkZkbk85RkE/TjZyPTRsVkZDX0JbOlEmQFU/Qj5iX11COlh2fmo9QFRrZ3tvPVlNc1AwNSlZdFApPnZ2MiIpTjl2KWoqQj5PRH5Gb0lLc14qfmUmbT93TTssP3h0'@;
put 'OipebmYrVWkxT3RLXjpEUjp1OitXXU1RTyY9VUVJVHM7SjdeLkJfRm5KfFIiQCF+dEJWWmojekRfSH1bWko+YDZwKnYhJTJhc3gzI0pLZ3ZxOT5fQ3BzNk9hSjNQOipncHJ9IUJ7X282RjlQdmY3VToxMEk+YHdiW2BOfF1keSF+aVJpN3MzKXEiYCtgNmRpW1RndCV3N2crb0dOeXl3Z3VoPCM0'@;
put 'Q3FgMj1eKXkoSyIzKGRVNnxNRUk/cyVCOyUqbHJwKTgyNS8pRD1xWjkvZmlZYkZHOT1keGsvIyNOMCw8S29GTyxVTV5CP2NvK0FXSGFwXiUyUSY0RGRYZDtRQEchOFguQENWc0VIZVFNa3MjNStdMmguVU13SnRZQm4+fFY5RjhoTGN6Qjsod287XVBHXUp6X2BRczwqZ2M2NEtzNVZoQiZGJmYs'@;
put 'e2FfLE5AcGB2fmFMVUFLNz9KOk0hInlpMklKOmhhPU9Pd2hxMHZgc0MiLDp5Q2JCeEJrQUsqZE5ETCN9VEF7dTBXP2o5QkVZRVA8KF14KUJDRllaeHYjPlt1cXtMdTkweSokeDxQKVIrJHVHd3l3Xz9BOyxIdVB9JUl5dGYuYVJqUEs/UkNITF4/WzlXQnF1enQ2Rm9ydjpBWXVDYnZuNGpaYDBo'@;
put 'PVUwR3UlRillW0I8MklPX2d4ezJFNExvMDxDVWpgT09dTTdTTip4bVIjKnA5ezA0W15+M3t0flQlMHl0LlZMbUY/e3ZDP0RjL3dIPSREZjxrY1guO2lEW2UoIyJrWzo4VGIhL2goVTcuOllsaEU7XihKbE1wUU02UDp1cWY/MU40UFM4a0U9RDAwS1g/L2loeHsqdXVTekI+Q3hGUW40UjsrSzk4'@;
put 'N2xbb2ZMd2pOR1F1PnFqYzU4cyQhZT5Yajg3PDNdKSQicnZoeXJeTzgvbHZKZjVCflFYT3FmentrVH0wNXhybVFoWUhCKERFMSYlcEdhcmVedXxWRERVWG8mND8wTF0yRTdrYkI0U2FYW29ZOXJSLyE3ZXBIWXZ7cUJ+PD81fnR6OVBJU2VnXU8mQjlmLlQ5ZGBiMUBvKHBjQnJ9K3FhPEFQITMw'@;
put 'fkI9U29JfUZOMS9+ajpgVDw5YzIpZSFyJC5sXyFhe2J9bVJ0U3BrXTpDYWQ4anxiIzpGdUwjMkpNZjYjKH1OSkRfVn5QNnd+KSRuRCEsOFZAOF1LNFJWJkBpNUZDZng7ZTE6aHRMKFBeQnxGc20sYWpBSTQpdGo1OFE3NzAsTHhxRTRzKTJ1MFh8RmR7MGR1Z0JoLENJM1ldYzZye3tebTx2Xy98'@;
put 'eHJfZlJdUD5pUnkjLmxbY00xJEMqTT0sPj0mUl4xJW4wbkBMXzh8angsJD4pTFJ0L0lnK1JqZUQmaTpuSzcxcj5SNE5gaUJbOUg8RllhTzhLVmNbcHBsLiFIJCx+cSwsbm9pUyt7Yz90ayZ2N0E1PHNENEN6dj54SkVEUHdwRDgsfTNhWzgmSzRwST8jZHxaWiIsKVhUK1BPWilbYTBubzM8QT54'@;
put 'YGhGUDpsMWsxKCJJb0FIKjUsTF1aWV5LUTZRcj12I2E/ZyZhel0wN29IZEA7MTgoZHMzYkw0ciEmKSZeKFN9aTRCT3ghN0FIejdnOiI3dSkpJH1oTFJSNTU+JXxtMip3YVdVZDZ5XUFecUtyO3NhVlg4a0UsSURgaT5ZN1c4OWBrTGEpQndqWmZ4RGRYXUNBWGtNc0dyZ2hWMWYkRVp3U2h0NE0+'@;
put 'TGRqSmh2ejdkMlhUUzwjJj0zaHRacFMueERpTm0kM1g8MzRmMDJUckpZeCNDdHpOQjc2cTRnXlYuYTApX2dDfThJSUJRODI/PU9TNldQNEB9QC9ET1UvZj5fN19SS2NRQXZnbztmZkBiQ3Y6YiFuYkVXdCl2NCxwPkprc0R1JnlYfXtLKExwNFdAbSg0MWhrNGN5S1QoOTZnZHRRN2MqXzVmOVo3'@;
put 'MzZGK3ZGU04xdjQjJWRpT3Qyank9NEZ5N1BpKlUoXS5vPiFLZHtrWDpGQnE5VnV0QE9CMylPSVVqO1hJe0pNUkhzcSNne1JAbDxsdE5ZJX1wSyVCKHEwVjArY01hX1BtRz5PU1BtYXh9VHJKSnU1NCE0MGA8MyspKGtGSys1NFI7UHJkN1FJZmZ6MFFoXS4pOmFvY2NPLDw/WX0zI2FPYWVkVT8z'@;
put 'JWB8Uz5wVSZrLFhJTEpWUGYjeXdfa1QrfXV5RWI4TlJWL0prRG1aQ3JCZmBdWkErZWZqVFU2SXhwOTd8WFdsZE45KHF7IV9UJVtVaS42cmlLfWhmaUgzZWl0ZVZMYX1OSVokfHNeaDgjTkNyXlc2XUJqTCFJOi9odld6KEB2ejtze2tTcSh2eSJLRzFkMSQ0LEZPTy8sSzdWfU0pKzE9cX1eISok'@;
put 'STFIZlNUfVc2JXRhO0NnYXZ5ZnE6SSwhV0FWSnllcyk2LG5kZ1AwYU9uJlZtYFBpUF4uVD94YHQrUVpwQzhHOlVQNX51XmkzMjB7OSEoel0sPyFlclZedDwlTzpZaFI9TDh9X3ouXVNCNyI4fGdWLHwoZkN+RTwsOzZwQW5bNSlTbih7RCF2L3pUJT8ufFpCTyh4PkMrXWsyQ0s1MVJVZW0uRj1V'@;
put 'fnxhcXMqOXRIe25wWzRGUFRVaFBbdTpbT3okKiZVczVScEx7b3tYZyZgbls/X2NPN2l9RywkfmVUMnhxPHEqN0xVfEM5Q3JoLG9xZDI0MFYjYSN4aXtRLnA9eUtJal1TJjghcSQzPkBRJV9+fW8sJCVHOUNHZzBzTXZrKEN1d15GZ2U4IkY3Y1RrW0QzfWdTd1M2clg1Om1kSjNIRzp+K0V4PyF4'@;
put 'JGxKZytKSFohKUQ5LDlYKVF9Kj52OytrNUlidDdWd31wQiZEZzY8MV9mMWdsX3Yve2EqLlYsLDtZJF5pZSF8YkJwIT1pdCRySkV4aVZ1PCQjR30xQjlhTFEoMi9qN3FLSnFSNWNZNWwyI1h3aj9TQlhETkg1TU9VeVJoRlcoc3IyPzs4O0FkU3olIT9ndHpNZVVRP2ZRPj0jbVFhW3wjdilQNVB4'@;
put 'OzdDdlB1R1UzNXhScEokSj5AJVFXVm4hPmxLdjQ5e2RXcllndnh6OyYvQWNyJns3aTMybywqQ2xFJjU4Tk11fnQqSl5pXSVXWjYpTzN8fGVaIVJ8S3BCdlk1V2hsWjcsbzdRST0rJXF8QyEsdWg6UCVGV3tnNEVEY1skXTU8V1plW2IzNSl7Rzs7MjFvYk1FRXVYYiZOMiZ2VE9Id3l2WD9dYVY/'@;
put 'fHBUS1FoUTR0JnFVeWdTeiMuTkdOTVkqQFFoRjcmKnxjKnVYU0tmfD8hV11RUEVUZ0M0c1FydGNASW1CT0lXeFkiez8vfDB5ZENsNHokJTVRW3hGR093bDYwaCZDdiQmUHZRdlFLV0xiQVdNWEl+e1cwJnVhR3NuUixyImwrYjVUZylvZ1s6dVRAWUV5TXg2VWp+cns9OC9OdWQ6MnZVN2Q9ZSJE'@;
put 'Uz9xYE82QklmWiR+aHgjfCMzTU89Xm8sZiFkenowPkBQZiV9NkxMOkhJPXMxPlElXSQsfnc/bEBUV3tlfldBKCEoWWFmZ1dhSDMsJThyRm55OSxgS0xTbU45WVllbiQwcnNhIUR7KnMrX2A+USh6Rjg6Q30/PXZzPUYjcnx+OEhHXld8Ni8sbz0zO3xhYTB9JHRBKjwhbkJOUCU5VGRieEFJNENW'@;
put 'RnFLdGdqPW5Pa0t8dUN9QnJZKmRAM1MjR0REZ2IpUl5KRC9CSzYyWVkrbX56YF9Nc09ATXMofnNRTnMyUSRCN2hTM2w6JWp0KVhiTU1qVEEsZjdrOEBkSVQzJl5WYVZkVlU0bH5EYUM+S3JsfCpyTGNHX2MyL2BEbUZIRyVAYlFDRC8pUkU0RT5pQiZ8eXxRc2F5c2FBXiJsVFA6Z1pPNSlhbzEh'@;
put 'WGxqR0tsaEY2dmI6YFdWUnZwRm58bjx5bF4/PEclJksrY19IWiZvSno4b3UiNkIsIUVGfVE4JV5fQCsrZFtlYmlPMj4obiVIPDkiem1odyRiYFFoeik1bEJPPzAmaGF3Z1MrX3U+QnhtUiMqZU89aWh4YF96LzlZW0lGNjVCbUJPMDg3UF0iN1kwa0tKe000cVlkbXU4WW5eK000PnR6ZXM2ZE9g'@;
put 'b1NfMip6c15fLCZmcjRkLlY/WytpUXMiUENeWzNtIzk9OjVWfXEkYmppPn57MGpCJkI+aktRfmRZdnx7c0tObi9jKWtdUixpe1AhRVAqXWllX2Ftd21sTlNLaz5SOStkTjxYIShoO1huLDVDczAmbSZ0VDU7RGR3S2IyMVpLNjM/SW5HbjNAS3diOnlFPTpjITp6UDwmaj5SYC4lakByYD9OXVU8'@;
put 'UFN9bjRqPmdTdHZUZTBBTzdkVCk5cGZVeF1HNismdWF2T0g2WyVAXVN5SCtwUjlvd1kvbk1AUHMjKkZKVyN+R19gIjAiQXNvYGFwXTlrUTp1ZFRsZzp7LHtTalt8Pyw9aC5iVGA/SSkydHklVz9JIW09QShbMGlsd1JPY3YlY0BZRmhNfFo6Sj5tfkBlWVtBMi5KNkAqVmFwQVtyLjZ0a0VPK2dn'@;
put 'U2lQVmEqcG0kfDlDIWs9cEk2R3t7RV00T35AfHBFcGQwMzdkOVd2RlR4PltgV2hTfGFkeDcqIUE+QD1fO2tjdiVPYSQsVHZmRldyKmNONWoue29sYTtMPVFUVUw2WThkMXAyQix8WjMxQyFfKFo8fUttckcpYGZrLnkpMGw5PVEzN29ZTn5APV5iTjwxVyw2e3U5S0VCY31yU2JreyFfO1gvSyNb'@;
put 'V29WPTs8aTs8cCUvZE55Xmg4NWheTVlIZlNWU2ZbMTdBcUQyZzt9ZEZTUT9keGpdIVBRUks6Qiwlck1mamp2ZkNVSlR7SjwlT0M7U3B3YGJodjcwYGRxUmtpcEtAV0N8czRAb0Ymc1tSUmYvc1tAOGRPWHNFbilQc3xrPCxlQiZ4IUFMcXB8bUEmdUhIMVEoemMwYXJwPXluLFlpS1tbK0ZbPU1H'@;
put 'SHV8PzZaSkx3KS9FZ1VbSFU0U2h6PlZUd0FxNCt5TEQvfElCWX1Qb1ReTkxzdzVpRlNEKD5CPl87ZzxtLm9wT3pId1ohOkYvYEJZdjtJMjh3MVo0UTVeNzR1dWx9WEllRU5xb1d6TF41cEoiP2p4fX13cEIwY09HImlfNUlDWXlWVSNdI093OCNTJlUsU2k9VylwbnFeUi8+RTBJZVRGRUNQXkZY'@;
put 'V1RFdDtaQjAuWCFMSmV1PW53KE11UG09WWJIYHZMRGlTUks/L31WS2w9Y2N0YyxefDxVaFImLHhzeX5uSko5Yl5qI2lAZFBnSjs8NVRHQj4wTT84VWhucSIhV2dvOSoqdDlYckxNJVBWPGdYKE58Unk4VFZLRUZrbD0iaCFMJFYsTWRHVkZWMU9USisqQiFWeGNNaygwPTI8dC9zLCU/XV9TP2dv'@;
put 'OUgyeERSO204LGAqV3I5alhCYEVDb2V1QjB7OndOOCNSfjtTJTdVK117VysjPmR3PE0sS2l5SD0waHhuUn0rRCZdZmZMayIsajY9SnAySV9hQ2U3cUJERGNQfCMlYjYkXzhPMU9INkE4b0VpP3gwVDVuYXNlJFJ+dUVuJmM2TnR7WTB0dENPbmB7ZF0xaiNNNitDVTNPI25mOF9QY1Z2VXpYIVRg'@;
put 'RjtbTFosV31LZTJscnU8R2pZJWpHaEFPeiYvKVFiTzNKIXBqK2B+XldpPHxdazBqMGBKLGk7Y3dzUWxGdU9OdVRIQCFFX0tpM0oiJTQuZFUjM3N4Jlp5UlNQWm5SJXB3S25RM0M3RWpDdk8sOGAsbERONU5Tb2NwTmVNYT9JMGo7ajtyWTBEZFcpPmswWFBJazdsLmVVZWlYYXxtJlV9RFFqdS5n'@;
put 'cixVejgmM2MyLEYlWD09Wm5hOmlmVXBQRmszNE0wZUlHbyh0Uk1TX1dIQlR+TVQ7RkFZfl1dKTVieUpEXkpfcCU9OzlvcSEsNWtJeTs7dUU4S31wVT8wUy9FXkUwTVN3MHhwRHMpNz9UM3RgZjw9ZDZxdXtIOnVVX2V7OGZMWz9pKSosSmZVYXlYPl1sT2Q5TyJfVE9BNnF7YlhSSXFlU147QGNM'@;
put 'd3RCJmk3RzVyeztaPml0aU5PWyFQaUZhRjxRWm4vNXd1d1NaOVN5PEBHW0RydVM/NnU1Y1U1JWJfRlVfR0RIPFFUVipYYkU8ZDFndnVtbTFGJGozJDs9KmhjQX1GeVc+X2kwVlVyYm5VJU0yQmAkK2hefGN1Ln1VfUNTJkQ+PSwjTUw/QGwqZXIuZ3s2OiQxMSV5fTc4OEBWOyU+K2A1djlATF9+'@;
put 'aTNEWUhJP1Q4N3UuRXJmXUNmK3U4Ink7OCFZIW49SCg0I1NHek9EV0pRQ2JSIXlmRCMiTz5VPD12IkM4dFh0KU51KzF1IUN6KVlETkIkaz12Wn5WVzF6TSZqRV4+dT9BbVBBQkRMZGl8TUJ2ejBHanZjP1pqNUwpZ2JOfGcmM2UmSFZCbWMpXzRXfC5HQWRYT3BZSSwxcnZKVmEpclgmRHp1UWBj'@;
put 'UUQ0TSFveiEsT0QmQ0RQPip3YDVmTnZGOmdDW15oZ0ZKPjkqdmBxVH5qQ01xbF4kPCxgJl89Mi4+LyluUVFiWDRSR1pNU2hCI3phQ2hRfkVUYl4vMGZRU107UyEldilpbispZUBUNjJtRkhDdWo5UXZLfXxiciJ6NVR0UTFCLHtdc3d7TihxNCohNixSaj4ySyhxb1VfU2duJEVGLzNxSz9yWnJt'@;
put 'KDFsSTNNekB+PHdyLm1wSSplVSs5WV1pc0Qma3RvVVgveHIsP0U7TFUxMTNNaGZsRk5XZFVIRktQU1VRRk0rLCx4aSVEeVRvQ3grW3BbPm9jUytJLzJ2WytiLCFCbz9kUX05VEtBeSRCUFc3clAuTGhmV3lZLzlwK1AoOmk2RzVCdjtNKFlbOiEweVhvTCM0eHJ9NCJHRnhMNlIoRlFmLClAQHFx'@;
put 'X29OZDY5cmZFYnhKaSF7XW8reWdfUkBsXiY/L2x+Okl5fnd7OUhUTjZmcFYkWXBrMFlLc2h3Y1VgWUJAS0xsYyhZQ3t6OHhyRThlUV1SVi4oIixEeV9NKGppNj19REg/V1YofFdAPjsxbjV2IVgiSmBKWFBHZDljJFF2P0VuOV9ub1JTR3hbT0NkaTtyb2lUbkJnL1IqYnUrL1o9bTYoPUxXIUU0'@;
put 'OS47T3lBYnYuODdKNEJaYkB1MmRSa0BBVUlGfkhVeUN6fSV0PDgsTWliPnclQSZmNmlXalhBVj9nYzZwLGJkL2UsUzg3RHk8LEpAVHBfOV5AXko+Kl9bXjpDe2smYGpFb25vOm1ZYEhraDdkMVgxcG9mcyZeVm44RSYwXyMsPWk8cnBCI1lLRShhRnJeUV89S2ZGemJEez1lYS4iaUw2Qj5AVSZH'@;
put 'Qz0mLjVwMUdEPjgmN3pyc0gqUEBVTnZBMShUIVlhZUJ2TWllalUjfnx1SypBJX4lXkB7VytNOnM0b2AoaC4qY1VVJFZvbkdeWyRmYEBKTVE4dS5eIUQiXT1wQG9GIlUjW3BXTkFvJXF4YSlle1B5Rkl5WzJBeVteLCtabk06S1l6b1BvaVpmRkFuKFI8WyJALGMjaEN9dU9BJWQ5YEAjblpPZU5P'@;
put 'NmV0cGZ4Xk8oSSRfV29vdl9ZO2ZQbUJDUTRvMygyeGJeImR8aCNSZUA1b116REA9YFBkN29dZi4jRXlGfjEvciVPW2gmZnJUaHVMe0VDMlUxIyY9aiJWTDp8PyZTL3hjZGpxXld1aktKM1dLJTNCeno9Z09LLCQzQnl6MmxJc1s9QGU/WmhTOmJASSFXInFveF1FTl9GXTooQntXaGp1XVsxaHpI'@;
put 'MDRyRGoubmFeW2BrVz9BX0BWMXpAfipsXy4iPSVUWiZ8XnhdWWh8KlEpT1smcXshOnd9JS9EKX4kelsrRDBvW0MrJXpMeWdyb0gqa0EmeiQiO2ptZjt7cTgsW3R5XiJrWXtkMWEzVXJ7dz9nQWMlcT1AKSw6cExtci5LL2VIcUs/TEFHPmo/MldQVCl7dXYsL1BOTDxbcGVTUnJETmlJM2ljcTRE'@;
put 'W3sucipeals/JFVsOzs6eF0sI2h7Y2s/ISZxQjlMZWYzZHBDYHIxNCFKIXtJYnh4TEFwLlFZdWAqPy9vSn1IMXdwOW1meyRxLlh1ST82OF58R3dVIzdDIndWSC8wdXRbVXwyTmF5eyVJKVRRRkVaU0pQRzsoK29AYX1VZWdCM2cpQHU9dF1gdjByUCRLb3RxQ2UsV0hfVSMqbXdYWTVweSE6cDIu'@;
put 'LEdVdnhEJU1pYnFmWz0qKGUrQkw+XWdAYnswVnxVNjtMMiZMWUB4SkdrQHFKKEIuQWxtOmcyKmNtbGEuME9qTH5BIXx+VjFhQzdGUjFJbVFTI1I+YGY/Wjl1bkY4PihvcTRHWFM3PmhaQzsrczs7RyZraT54PW9MNiVWVlRpdEcyfEdoZDAhPD9NMG5ySVVxYDNYJnFyZGh6K1NvJX4kW1c3QixZ'@;
put 'cjN+bW9lYU10ZUdLQF4pUFA5USZbazIiTX1VfHc9ZjU2clRWfW8lMWprYzhRU09HREZPMjh1M1p2eF0rd3lmaC5maTJ9dHF8Umd5WmU5b1FJQ1FZZ3NgSmh2eHx6ezA3bHVCWVRsaWM5ZVh1O31TNik1cTxYc1Y9RjJZaWkwQkxaY1pAZGo9YDBhejp9SG5MXyJrZzpUcnl2UlMkSkcoQiMmOVg1'@;
put 'djZDaF8mS3R7QFpnLClzdyZgMDtLImNLcUxHdSp3TXZqNkN7NihNd3NlVVUyKTR9PkgsY05reWxKVWl5c3MqQU1FbD9IQ2BpN1tFOD4pRnVodFQlKDRJWXFYV1lqI3xEMHg4MiliKEFOaUdeViwlam89UV4oI0hrYDk3KUFxfV5jOm0pR312OEh5aTljQD1bJlk6MD1veWhqdSlyMWxpTE08Z2xK'@;
put 'dHc1PTtLT3ZGO3tMaSszW2BwbFdXT0B9RH55bjEhajgxNnkxaGxyVzYmZkhsNVc7Nn0+b1NXeV5bX1slbk4+fSUjYiY3IVBaO3RJWF53PHRJejFvaVBSSjxGNHR+U2clcW8kTHo3Lz49I0ZBWWx7Z3RlR1Q5ZEc5UG48bFNXMGpwNF9tSGtYcVFBOWswdHkiOGswOjtsZ0kqfG9gIWg9anF6fWVv'@;
put 'dDg3JCZQZixIYiRJUS8lKmYsMXA/ZWF7T3V8Xy43L2hxT1l3IURIYGMrVldfbXhrNTAjKHlIeXw1U3d5az06bE1NNDFGSD0pSj5BP3g6Nig2P1BFOXh4NEQ7WWxFNDJMLGJPSz1AQjI6Q19ILCQ3ND99JGNwSl5sZSohKWFoLmc3VWZMdjxaMyhyenZJNGBFUTtHPm1vIkp1a2tHeT9GY0JyWVA8'@;
put 'YmFocDNPWERxTD9IKVY8dXg5XkNbQ2sofmEqdDVZMC9nSjN5Kjw7SE4hUzsvO2dPMT9eUFo9T1Zqb3YkcUhiejVbUztZfmsiUCFOVlJbYTptKiFeSX4kbyt5NmdyQCxObHI5VTsjcCFPYUMhOW5SIW9+M1lnUCZnV1hVSz59ODY9XjEwSG4vbXZEeC5NMWE2ZywkZjxvdkVudDRCK29sNFd8TSIz'@;
put 'RlsrfEMhbkd6d0I0Z2JILk9CYVJuNGxsPEBxa01TcjJSUjtyWnwmZi5vWD5eJGMxKnc6d3MuXU9LWmYlLjFgakZ2fmBrL01sITRiOk85IzFjbiJCcHN7UCYpYjhEbSE2ZDBdaVZ1b0J2SisyPjFNaCt6VyM9YTEkKCQvZU42YmpRTTRqNzslTDtJRURCRE5lQWc3ZWU4M3skISR4OGViSUh7YCZW'@;
put 'cGdpKG95WSM4PkNaW0tvMi49bys5NEowWTl7Y3EkPzgsUnMrL11SOUVpKDZHKDVCaXB5ayFGRCklcWZ4dXVMO2pPKDtyTmZaeHxDMTRYZC5hd0pkTVp4dkxycllxOmByem5jKDg6NmU4UDNzIXJ5eklCeyVrMXI8Q28lbiNXNjVsazsldmYvbFVOUWh2LHMoJkBSIlpoRkJncElMZUIqZ0ZzYTlV'@;
put 'cHBXTTNZQkxFbS5mUUdHUWhlMCtMZSlZaTh0UF1GNk9JbGZQc2QsPHA6ZThpM106QU9eLCguJkxMZCh1T1ZfSStXY3V7LjZsJjVHJVdOPXA9MyVCOykyeDxuPClPdytSLiY7a2FyPSFxdUQ8RDx4Tl84KXh2IXp6WDZ3PClaSzNaJnUkW0IsTj91ekZPMzl6LykqWmlQcSx8W25wbUczdTslKXQ+'@;
put 'cEUmQjJMVzg5fGM+TV5Vd34yOSYsQFt8YXlHSFREajNzTD5sOz5nRH5bPlFJPmgqRFYoPCUoPTZaRHkqSmBwQVtzPjtoMExhJjgocGpJX1NCM1ZTaVAjKE96ZDBKWyNzZWMoPXo5b1s8JXtIWnkjNHIwR1pNRlZGbTNlc2N3W2BvdXRxcHE3UDVOYVEwJDh1Ynl2ekAyOXtxQWhHIzghSUowWDxP'@;
put 'SzBVWEgvV3Y0Q3tYLio6XWgyMVhIemFGLk8zWjxVfEkvZil4dllYUDIpaXBnRUU0YTFbQ1M7cnQ5b2QyK0FISk4sXWImeWFFVEdqLkBnP1cqTmB5YWkobGdpQ3tKczg/Wl5pSitFYWgyeG5gNUJAbXJjfGFqeXc3ck5VezAmcGZtRjFZUmV5RGFoXVlOM0lmIVcmUWouNF12WDIuRXZvbWQrazQr'@;
put 'c0BbZWhrMWdGQ3NCOlMoUENGdWVwW15kNyRuM1FTciMpZzpzMkp0Mi5ZbiRLPyViXjZ4c2l+Wzh3ak8xO2haVk1KPDF3e2I9Q1IvYGk5N1lyKmxuNDh7eyE5OUIwQ0BeaEJIQ3hiJFViVTBiWXpqcDpqTEBFPjEwL1N0Kzhme34kdDh0JSxFS2Z5elhAcUQkIUc2NnVkYzslfCRTMkklUV19aCl7'@;
put 'SXcrZEg2cHhLPFgmQjc6diRQdHlnMXFsMXthSlMwJjtjQik5T24hS3IkJUAxcTRdcXY9P2ApdFA9azw4TDZSMkI4ang2aUU9Xm9SPkdXdmFiMUhZV2tzcCZGUjFkVlE8cV5WUXZPW2d1JSIlbUkvPXgoSndqNjZTSkI9QXVfTHZ+JUFoSWxURix4WipnPUg5cF0sbUZXKV5AQChQLltiJEEoLF1R'@;
put 'PSgvQWAsVGtOQmN5eDhkVyVmQjR6ZllNV0k8LGs0SFt2THs4SWh4d2ooZzkwSX0kZz5GPHVxWSo5KE0pMUZUKSY9dTowJF03L1AuWj5PSXY6eSEzTn10T0kmYCQlYkAxc0xNOTg2aVUoaDBhKjE/c15PYDdUOStWbl1ueVIhWXpMRC8lcTxAPVErXSFVdipYL3wpSXt1QCJPLiNZWXBaR0c6WHsw'@;
put 'VVFaQ0heZEBSRl1DenlWLH55RGRNYX1wYi5OU0t3c0VbdSZgd200TT9AO0tJfUFYUSNDPWE7aGI/RmZ+VHZSNT1hWV5heF1FN212UVpHWkZgNilgbGVNJDo8WVRQblV9dDNBI2YzIyVTbm04N2R9NyVqRFZ3enREfFpNcDovODwmajh6KjVRZm9lfFBKKGsjdjd+NWJvYDcvbmZsWn1neFFdN2de'@;
put 'WypLOltTXnBxdihqSVlWQkJAIztjQShbfV1KWDZ+M04hUXlQWygqSGR9aXUvIUxBKDgsU2E1VDh2NlY7S3RJVzhIYyZEVVoqNjNxYEF8XWttSChpS0ZuUzlBTDpbUm1pSHhZZzNgRS9jbk9uITQsS2QqfiRkekwxfWN5L2E0cipJNj5CTWhmdk8oIWc+aE9vU0pENEM+LlMwUW0vWF9DZGk2bmww'@;
put 'MjVSTFJOQVdWfSg6NTYlKzBQVFpjKkJhKkVte2BwbEBpMm5yISJ4RWxNMXt0MGtDWm0xYENUWz02K0BJQDtVfjE/TWBbaiFwUm1QJiZSRmwlLGZoT15lSTpKenZZTl9DXkQ6TXJHIU09cGdzJHA2YURUengqRk8mOmRfUXdCbkJVWHVPST4pLEw/Yns6eVZ2fD9MTTpKflQ9KWU1fXJgQ1Ntc2Fu'@;
put 'Mis6XVYyL2xtZWhkaWxYc04qU09hJSM9KVdKYURNP0U8LmJNOytba01XR0kwN0YhMFk7c2oiTF8vIm5bNChabW53O3VUI2hEV0x6XmJ9Q0tbOzxZd1NhQ1UwK0o+O24vJHtRKXlZOyw2RiUpQHdoSn0hdy5mO2ZweHBZejspc0pRWlpCc2d7QF4qaFNCY0I+UVR7PEgwdS9GMEtzRj1ROkM5X3k8'@;
put 'enZXQ3pQaU9MKWdRdnZGTn52P0ZaSD9MZz5MWzRMJSM+InRpdk09WEpkcHZlUyNoPmNBR1FDcnZMLF9GcmcxayxBRTZKNnVTTTpWQmAjKklUU3RkQ2RdV05yOyYiW3E3ODwlT29NclRkT1psOkEvY08sNm82Y1AwI1BnMHsjNlQwUXFYdCo9KnEhUn5JZU4vbTVNczA1Lyh+US4kKDR4amh4Rj99'@;
put 'ZHJEKGkqNUJwbHxCRXc1QSNpTGorZ1lLe3tDNTlCMkQmfGMscl9RSnRHfSYpQXE7b3hVYTRYOHhFVj06TGdZQGtaTktLaXQ/PSY6ckUoentkLk8vNkt4RHVkZ0Z0P11OUj9INTtzT1tAXylmaEduUHZ3aUczOVlQTz1pfCxIMXhUUkp6N1JyLEFENGBeOjdpaEV5ciI9eiR2LEZxdVlvc2k8Rlcp'@;
put 'KjJYP0JHTlhyM1h4QkUubVg7WncrLHdUQnN4XkJ8RVY7PUFudTtZa0J1RTpUQ2deVHRLRUUmeEBIUDEiM15yNnMpIVk1TEwxUHcre29UfklAJEEsfVA2XyxMMVBIdCw+VnBQJnd7cmhgeH1naG5ASnFGcnZ1TT1EZV1pYiJKL0RoWGx6fUZDeVtsRDddRWlxWCZFWnQ5SCp4PkNENUlhQ10oX3Zq'@;
put 'Q2N1Q3lRJDpMXylvYHM0fERtZmtINGBrR19JcD1lTDNtaHRWW31ucEtebktzQXNkeEFXQX1BdyR6YG0xWy9MQiVwcGhpJkhgdT8/OUlvKkZSc3xHKHZudkklTjk9fjBBVT9nO2wuMERtflE9KEouNCwwVTxLejQpbiNXTD9Vc2RaWUV8eGVEOyhgTGJ1d3F8Z1JDTDlZJCtKVUJHPnt6Q0xAS2dR'@;
put 'dzglRnpwJm51O0FEPUo5SVR8Ol1CNy9zZkFsYFNxQ298MWxWJSVwSmZAT29FaSVlUHl2P1dtaUUvQ0tEajpuYkk8PiRoPn0+UmxpKnFLYkJ4bnI5RkBJPiIpYT9SRjtFeDFrXkxYPiYmXmYxOylqWUJWfElsOlhlWlI6LC4jVEE+N0RhM2hZVj1uQypWeitLVGchIiUmIUt9XSZZQD1OQmFOeD1k'@;
put 'eDw0aEF3P3N4LzlsU25RcCs4WDdJcUJbOSMvSXdFTkxCJmBtQn1RK3IkQE4jVFpOJkZrayZHIyI7NWhvOVRJN1trdyRpPClCS3A/I1ojMzxxQS54KHElSjIyIWpuRyU4dH5BNEF+PVYwc0FzTXh2WEFEODRnUlYkJGAmUkFoSFZGU1QmRzUhMU1ORlNvP30/Y1NvKG5sby55Pis8RGZFYH03ZWUx'@;
put 'WEB3KDB6JkwuIWNQfSVKT2ZwZmJxfHFNWVBvLE1bcjU9MFZHK3QkJFshI3xKJXVpcD1pUlFbaT9aOVQibHA8WCNkXWZMZEUyYVUiYG9UZkEzekdmPnI9XTtYJEYkVm57Kl4leG1eZTRKRUNeNkthMzU/LGUhPV1JNkNPRil4LjkuXSw7alAmOGZsRltzcVYuUEJLa31uZHZBZjVCKyFtYSZTXXEq'@;
put 'fWJDQFM2VXxTSlAjeHFiYlM9KipTT252MVpIIzsqMF98Z1k8V3NyJl81VWBtaVNSSHo0PXZhWCVhRFtvUHh2UC4lRzY3U3AzWytGYjJTXSxnfThueHtfMihuUzp2Ri5LXlclUVtEZzt0bW9KWVlLQjxpN1dWbFRBbntMUDFzZjxdSD9yb14hbDRZIVVSa0I3eDJGfFc8LHBePXpzTn1oLl1RU3Fl'@;
put 'WDNke3BwaDNQKC49UFJ1O1ouZzhLLnElJEd8MEpAfD5LLGhlbz5hfUJQYFVOWSQobHs1I15oJGtuMSQlaHxpWVttUyQ7XUQ2OHV9aHY7QVAyNClMJD8hVm5gT1NIeTxhUTJGOihicEdNSzhHbGJrIT5HXU9lVWQ5KXl4dnwxcV44Q15wc1VvY3R1WkJvQzVDbFtYOldqQldTWyhXYDoiLzVSbEQ7'@;
put 'em50QjE9VDhPPi9LVmZLd3E5VTNOTT9nN314QW5xTEQ7aTtsVXEhNzsoSCRuVnksdD89RkhPQnhvNXo9bDNQTU50YVRpSFFQVV5mMzpMPEt7fGg3elM7YyZKXT1nJjFsL0YuZU8pYWAhaUV5dlo9QVI0OGouWlA1KThZM2JwTGo7dyNGTjA9fEQsdF1XaHddRndWfHxJISVmKGcmekE6TGE4I2Z2'@;
put 'JDBWcnA7dT09WjBQQ05zQGYlRSFMYV0rRkBBPGlwWERkTlRuKnQmIiNkNVtYaE5TOTt1NUxkezlLL0Q3OWlEJjw6V2VAIy5VQiVyS2pkWyE5QnYmfUc6ajxmXjBMR2x5LFhAVztUKCJCWjRXPyh7WmRVNjljVW1ua1ozLmhraT0+L0I/Z3VwW1ZbZGcweH4vPD1TYkIzcGJrcy5QWEBSRkVFSzkj'@;
put 'U0JzVCRBN0FVPyZYKCQoe0A/PDJPaVkiMG0uQUI1SjFDNEpnWERFOUYsbkxGclklNnZia2lXL21EIjV5dnRTfFpHXn5yU15XS1B4bS5+WiN9fnJAcExGUHVsYl83fVE1OFswPFtCVG9SaU8kOSs6SyQjVnExZktkMWsvO2tOZXNhMGZbbXNhS1tpOm9jLClxbFhaWml9MG1OTDlDQis1V2gpUXdq'@;
put 'aHo4PW01TE1POUJzfFs/QSNjW116NFssS2dPWUo1Yk0jcGBBbHEjRz10RWZ3LC57IWN4Okoqb2FSOSohWnApSkt4Q19EPT8vbSllaSo5eSlHazUmSFVKS3hYREZ6QGtraz8vZk9VMkdHVSJtaz8wO343fDpOWylCay5Xblk+bTVKUz5EfmowOywhMVBoYFNfe2w8JSZ2YCI7aGcoKyY6I2xyY19Z'@;
put 'ajx7Mj5jaD1rMn0vek9OTmsyNiJLL1MyfmZiejUoblJtWSZwaiwpKCE5b1pYY0VjRkUyVyojbk8wY1JSOXg4bCpxPkVIS1UxYkpoTy5YdUZGbTdadTd2UjVFdypSfT45USUrTyNRMCMqXkorX2VFaHdKMCsyejNITlFtVEojVWlJfkxxQDp3S1VbeFZvJGxFPnZHKSJLYiJTUGo9eGxtJV99YVpn'@;
put 'RGdXVTAmJm0kLHJ0aWtmbWxxXyZeJjA/RltdJFQ1W2oyP0VXIzpEWj9dMyNxMUZXaEopcF9yZXZIdStqUmFAZzU7LDJnJENpQXhkQjRVTkFBO2M5IzJyQi98NXxfVEc+KSQ9di5xRkttOWYlM1VBVlcyQ1FeUzUpQWQzcl4mMFFrX3VVI0lIKX1zOSo9Rn1SfDdhOUUhdFV0R0xzR3A4Mklja2wq'@;
put 'TTtdajdjMHZaRm57VXpPOTRTXj50OylyXUslTy4/NHg5dmQ0fTxCKEhVZDx3LG51O2pLalJNdTFyVmpfSiExZV9mMT0ybXZNXlVVIWBWPjhxN3FHfFlzd0pQITZRTyxdTDA/WlVmUnRJb01WXyY/NWxadUxtV0A6QD16V1BfdVU+W3BVTD90fHVgJHBiI04jLm0qdDQoTn5uPVspKVNhXSRIRjFb'@;
put 'U2Vge2tbd1U9ZSk8bHBsYEhIUjRAOXdKbFdvOHI0LCUsbVEzPitObDEjYTJWXnJlUlB4R34xNVV8Qm57RVVvQyR6MXAzUVNCYDtVO0M/K0xEQ30lSTg2TnRDSDh9ZkJUS0BsPzA/YzE4cGh5Pz9pZE9uQDtpaTVQPnUqXSgjbVVzWjQ5cWlYSDN7dmQhPi4pe1ImIzZxOVV0ZS9OM1oyJEQzOiRR'@;
put 'eXNUUlIpcFtLWEEyRFVDT0RFJE5eV3t4PUhqVE1eXXllZFsxV3QrM004MSFydkorW05Sckc+ekAqWlk+YWNQYXVhSmU8NXEuQE0qbFlsfEN0Y3I5JUxtPmchWU87aWldJDVOTVFsNnB5MH1iMXZEdDtaTkJjR28ubkx1TnhdXyxGeyVCMlJXZGx0VGd0KndaQW5qSUdXPmdZODlXR11XS007MktL'@;
put 'V3F3aCNvIlk4LHBxW2xSK20le11jeiNoZ0Z4U3JSfVNzQih5QCpWMUxmQVZZVkpobmdJV1grQ3QsOFlgVl8vbEJPeHE8elYrYHFSbUZvY247eVNNTHJoLktiIjgvbHx5SXRTVFY5TCUvZSExTEBDZFZ2Y3QhW0VhSERRdDw2d3E1OUxCVG8uVnVZd0hYP0V8XVZ1QTRNUiYqbUZzckZEJU9dOnJX'@;
put 'K29CYTlgJmdUQ2MoY31SMSNSZkImcHtOVS5vaEohO0xVJkA8MGY8Im9bLElVSUtAWXVSdiQ1JFYqK0B0UlVvTixOVWZVT3NJM2B1REBxQzk9dl15Z01hTUF2Llt1Rlo6bFlmRUs3fnpEQSsrMUhGT3AiOHpIZVUkUGNQeU5OYFdaPU5gX3p6Vjlubks+W2JnTj5nMUNYL1VQSkxaZixjLzYoTj1H'@;
put 'LFpGbjZ9ezNXb31mSCRZXjZSW28zQjh7ISNvQz1UVGhJQkVFZjJmcGB+ZHg1aXZoW2ZuQG4qcGhYImVEeCtUJnYrTEEhSV00cDtJTDJEYF52RH5hZV5UcH5wcHVZZ0h2JGBxfWJSVTN9NTVbMW5MZFd7Y0xqMD1PZERlfE9gMUs3Y0dgZjEmLDdhNm1qNXx0QS4yaH10XzguIWR4NitBWENsb2pe'@;
put 'UXQmQzRAcFVMVTV9UzxoKU9nL2pBWilPT0hHSFUiLnwyPGBqOWFCTC99TGx0Y0h1SFdMTC8pfX5wKkclKjQkeyVwT31UXUo3LyFOOmBsaCQ/RUIoXll1NUZ9VG06PXxOTC9delgwRkg3NEFSSExiYiY+S0IzPjM4Zy80S0wzOzBXc0NAe0wwW24rK1JrN29fWSJtMEB1cVskZGFkVT5BdFRxQHZ8'@;
put 'eT1pUkYrZEByNWRVYU1YZ0ozdEN8JWBAKV9FdyJtKXw2M2tBO0RRVEZbVWcmWDopMG9qNSQvemw8SyFOWz5YJlhdUjdUe3NWeSFSJj1qPC8/Y31MKE08bzsyKkpheno9aj9bVD8/OUpwJmdeWGxzUmdnOWcuKExoX2RHMWMqS3s9LF9SOEJrNX0yejAoUTkwW3c0O1p6fkFbQGdZQkd5UiwuL213'@;
put 'MCVoMklKZTBhJlM8NlZ3MjYzYTNTI05saz8kK2QuS3xsdDs7JG89Sno1IX1KMn1wXn15XW9BXnNSTyhbajV0QXV3fG5mVyhZc0xLUkgrOlc2YlI5TihYOShJN2k4RFdfNXplT0VfT1VPa2p6T1N4aHh8dChRYl1GbUZyM3tNYjl1WVMhemdbfihuckRfO15yP3ZUakZSNlE8V2IzL35nSisuLCpL'@;
put 'U1Vme2osfDlYUkpCdHFVPkNUY1FfcFFQWj1ESVVgbSY8K3J1U1NTNXFxL284OV40c3ZkWzdCNToiXlloSWp7Xk9NI25VNzFiPyRabUFfWjBRYXsySTl2VUUsfTRUb3RsYj86Q25AZXdGd25AMGVBUmNudFlxc3tQNWAwbHJDR2prKk0zP1NiaEZXWlE4SD1QJXxUTmA2KSl9PzgiPG0lXkQpUCEp'@;
put 'UyIuKV5RKDdQPnhkVz94WnQiJVhWcE1lYUF2IiVqeCNqP2h1OUpPZHBSeTBzaGtaJXE8PS4/NyJTQi9BVTNmMmxdSldMUFlAe2JWIUpkMFJWM0w/b30yPzR8RGFmeC5TdEdpJV9KQFZbKnZEeSk5UVlmK0gyeWVkOiRtSSgjUHdBQiZncSY+XzFZIms9RTMrREl5dVBONyR3VkNoVjA8OCY9X1lL'@;
put 'NnNmOVZja28yLCoodnt4LjYqbj95ZkdeNSN1T3JadXExdF1KYDIya1JGTGRQKTFVIT00Lzc7fmdjWn1oIldNYiNOL0ZIa0hpT3JIKGc7Znh1WGJAbmp+IU5vTmxvITtgUEpybzpzNWBSaTtsNjElMSUxJTElMTpeKCw9YUxrPSxyNjlvdyRvLltPLy55P1VhMT5MOkZsL2ErakI3TmxwdmA6ZCVZ'@;
put 'MFF9O0dDJHppXiMzMWdxMGBXK0pbPzRQMXxRencjcD4rdnl2Vz9HKlNLRjhhfXRbL1RCc0dzeEJDTDVXMiwsMWFaSD5oSTZKPC5mKVQ6X08yd3cxJFZMLHdueVlbS0M6Pi5Ze0EoSl9oTyQwTnhDfSVaMGVFZio4dnJhUWMjdW54QUtHOyx4QUtGR3pucUNZJnN1JlRWQnFucXs9SEwucntKVEls'@;
put 'VT8zP3ZYVk45M152d3ROJm9uIk1FZVp4OGxFTz8uTENuMntrbypGa3t0NiFOTjwkWVtyVk81Tjt4Um1MdzZvLGdHQH12NUBldGFofU99cy87JnBiWlBeQjpbJFU9UjpdaDJdIWxiWWkmW3wrLkhIKW8kSm9TITQuU0JtJmJbWFt8dEJiREJmRFFFVUVMaCNkXm92bzhvTUI+O3UzJG5BKjRwWzpF'@;
put 'OkZOU09uLHtgV0c8R3I0Yk52O2J1dSRiYDVrJkE6L0dVNzBPS3l2ZSU3QHFXMCh3ZGg9ZSkrR0w0RkFbK11CPmF0Tj9eeTAqP0ouSmImLmE4ZWomV2g1JmdKW2dTVWMpXXFlJVA9RiJ7LlA9eDtVcXlCYkozLEc8KjRLfDkqO1RLJixZLC5EUDpAWSVfY04kVnVYVnYmVEY3ekMvOiluXkR7Kk98'@;
put 'fG42YS9HVlF0ayxvbHNSMHM/THFPRG5UdHcsKUdodGt2Q0dqRHl+cWJ6aDFZc3dYKGclL2J8emFNcHNKPH46WU1wUjpCMTB9bnlVYCtsZlB+e1cyPjNKSmtmLHheZ3o5SjJNaCJTcHgrYEo8b3gxSzRYJEp4IlhdR1dCS315WSZYbCFRd2hUNW5EdWFtZnhKRWpjUjl7dFU/TlBRQ3wuU1NmLjNS'@;
put 'Xld1KXV4KXV2Z1F5SWJ4dXckTVgxOFU+TDZDMCMwcVd+SnY5V0E2aVA2VUhsTyFGaTIrV0t3Qz9SUUU6dTNQWCZAXyYqZih3JD5gNnAuWSROeS9CfT8wXVA6O3gvNSZ8dFZQXy4rZlBrRk5VaCJocyFLNih6XVtbK3NYVDJSQUFBZ0FiNEFBS09adHxMe0JYRShNbDkrPEdILm8jN3c3eE4mQF10'@;
put 'WlI8dWx4LkxBR0FBQUFBQUFBQUE+ZUFzIU1OS1c7S2tBPTs4d21oXXRVZzpZQFA0b3NKQEdJYj1+fXk8WGR6X3lPfG9DTDl9bWtxO31YIV1wJFhGdzNJTk8ydmVgU2NCJSpfP2B5aX1EZXgySWl3cSxHWChtWkhIeF8kQnlGJWN1JiFhMUw0b1QvVXdbNXttLC5OWXREe2koXkc3bmxkIV52Mkk/'@;
put 'Q3xlX0EyUkFnSUZrfmN2PXlDLiRxOmFZKS9oXTUjTWVFSix8SHRuSWZ6LFpvbiFmMHpLVXAxO2J1eERjbCIqYDgjKzV0MGdULiVtRzFiX3ZkNVt1cGRZTFoyW0NlYnx8SF9KO3NFeTVta2A6cnhBayt1NXN1JFduPHZbTVclNywxXUJqcV9aSCRgU3BUSnQ8blE6WyhafTI5Ok9wL2Via1VeXkUk'@;
put 'ISwoS2hJLn0zXiUsJi94cVtRdDZCPXUkIXdCSjgzInAuTm83KjcuKFo3cTcuSGVmRHB4dUQ7alcoP0RqNzd7dSNgfD1TLDVYdV41Pjg8fjpaVWxiZEV9fCx9aXFDXmIjQiRtIyZGJjRpJHc0bDlSNj9zT1daQmdvMEU6UEQuVHBfJntbYkJmLjssdTd1Y259JW8vT2hHQCMrYzIhJFl2UF5OJWUq'@;
put 'YyNhcDFKIzIsN0NCUCpCR344aShjYGxpaVg2K15gOnMzVkdPJj47fkpuS3xheUpWYl9wMy9FXVUwLGk+SSE6PC9BfHhZaVhNREM5NDE9Xmoqe1RjQmgwUVNeeV5XZ1hVV0M3R0RbbURMKi53dT9CbD5PQC53dDJ5QUFIJCpEPi8yRVpCcFF4Xj9GU01iTVVLU3hWL2c3OHl+TWoqM2NpfDJtaE92'@;
put 'RGM3LmtnV0szK2RoRTJgYTIwI1QjcF8kfG1wPVUvZVhfb01naXpVMlZNcWdnbFBEKXYyIXN8Kk0uXSZ3eWo8Sy5DJnZuRD4pRWA7RjpdM3EvL29QaVJeMFkqNSFAODNhXW5jal17ejRJVkFKMWgpKiU4O2dpa2BRUSZEa1oyPFkqMGxrUTpEMVYsXm1tfk82QjlKLCJHRXRIaVVrTFp6Ik5CI29R'@;
put 'eG1Ae04+a2g6YWl2eCFZSHJGXzZbWyI+bDNUKmA6Im1TXU5bR2BnQ18jSE1NLDZ6SntCV2tFSCt0PE4qUnlXXU0qPz02N2lMSU1TfmtSenRST3dwNzk+Z0g3N0FrOHNAOD4maypFZl9bMmhYMz54UnVrcVNFYnU+O0ZUdkZVclQ4Z199dXBycS56NE94WmNkMXkiU0lIUS9aTCQxd3VeLGhCTUB3'@;
put 'PDQjYTpEX21jZyM8YitWcW5PKDs4S3A6YSRKL21DQGF6MEBnKjlsfnhTbUlDXzJEIzdvRiUhdXBNXW97cFNyXjlvJFIxNSptRVA+QGN7Rz5zLHRkQm4yJnI/amgpfjAjeWFEQGwkME1yLzRPV1FQJmZJTEs0N0x0aSt9T3VES0spSSU3JHhUbkYqY2pLe2JNIl11SVY2VHZsLC5jJiFhVT9YUkgv'@;
put 'Y21dbGEpRCQhQDFddjZ4Z01UOjolJSoxUWNDRls9bD9qQVQ3NVR3fEJzUzBUOVtzJVBmPCokNkFzJUR4T1Y4aWpmU1Z8fUdKKUA0V01zTEg+bERbSnsmXXJ6NUIyTTg5UXBPVkRHNkQ0TGdnc3JMQns+ZXBFd3VTbk1gUUUwL25tb1R2KDxmX2FSVnYhVWt2P0goTCFDdVI0b1pJOWI5ZDF+WyVL'@;
put 'fnszVkJTW0xII3hEOnZwQl4odzBWamBjMjpJaTkrWEA4O2peZDwxVTx3d05PKXgyP2hpWldEY207bz9eSGtIdDxfdnkjPnBQMjNfYyQhenFJRC9nXlpYWz5TQXdQIXFDa1gsU3c6YnxsMn1gaVt8NjJPQTR4PzkxV0d0KHUmSDBlMmZtVG5PJiFmNFFZTV9HOil4IVtaRGsrZSQ7K0sjNH0+Ojhz'@;
put 'eVZCUWVrN1R4a3lLU1lZOiRdaGZqaDh9SnFtMl8/TnQpJmExQChxKnwhSGBRX0VDeXA4K0ROJF4oO19mJGxOUF1KaHc4OzYhY1Z0S2l1X2hpeHw6VCkjITtGakArJFdNbmI5YUUwOnFfWWJmXl1DWm5YUm5DTHo3MG8qI1dRY31MbU5UNDByKiYjY0IqQTBeK31gU2RaIyRrbShCY2E0X2khJTBX'@;
put 'NjdlelNjbUh9eEMlakU6czI1UDZpbHdKKjdibGRAU0ZEXXtWMWpvdG09TXE+NVRaTkJ0bW51NDNWPyEyN3lnZXxLNGIiNmtMLltSJCJiOEVFVj1sMkBvMDF9JnxQPV16cD8hWkN2PCtiX2dvIW5XISUxcDFZP0BBQjNzSj9sXSNfRSYxZyl+K3YwOHJzZkNxMkBeUX1idDJ8KSNqcVc4M1EuXjcs'@;
put 'cmVOen17d283aE5HMFpZTDxESF00Y3B+KiJLMVBodXdjP2A6fWVGNWF7YH5VeHlxYXM+MUomVzk1QUx0XS8pWmozSjZ7aEhpPTojeV9XKC51eD1oKmN9OU1DUEl4N3lAL3g7LCRfVD9kMnokRyYkeVM8UHlhIXk/cG9ISTVPfSJdXXg5fmJUaXZqdU8xUSJRUU5sdSF4eXN8XmE6QWUoUCh4WHJk'@;
put 'ZlRafkVAKU1CdHB+b25JSCEqQkRhLj55S2lnfXApUTp0SSR+e3QjZUp5OU9nTjRYQip+VFg/MU9oMGk2RWVNbnZbPzhISjVrdklGeHxSQiRUbkpwUXpfPndZP25mUFlxIXAuSTZMdWpiOWh9WGkuOEdOfExPVShHalY+dT9aR3Q+Vi9rV0M8QytVOE5OdkpIRCw6Z0VrfWtLJCR0IjJ9ZV87Oy4x'@;
put 'S0FKZH1VOXFmfS42Lz8/eTY1QllUMUUwSFsjJFYiO20leTtuaXdodHAqY2x0bVchM2xKNmpnfSZYSGpnLytZQFsxcWdeJWwkQGhpLH1HdSFmbX1NNjZFaUxkQWUhR0RwVTAydC5jImNVX2V5cTZTVGZnbGxIPywpfXpLUm8xW3EhPXZWKn0vK3VOZGJXQkYqJDsqRnZYcUdMSmM9dHYoUyZkay9u'@;
put 'TS4reC5ZL1NNV194clJFVyQ6cihSJllAPl5GYWc0eDNsc1BnRmIkQDgpSFlEfTE4ZFcxXVBWdXxgT3tJdjo+MXkwSnJXbzsxTSZYLEtLXzduKnN7M05hSEx4fFNjaE9YezB8ZmxHOHtzXzszPlkweXlFKGtTPnBKWyh5MWF7KCZhfG9KVSlqZF9KYyVaSHxyNzpXemxYSjU9TkE/O09TV0x+MnRk'@;
put 'ZEFnVDJLa2EkV09ZIjlISzBQL2QuLm1dX0lIPEomfFRSXS9AY0QqamQofGV1TDFVPTxua0JjZ2ByYnZePWheam4xakZTeV8oOD5faXM3JjZILDgkKjc6QTw0Wj8pWWlUWD1PZSFdSiZCdn1PKiQhYmdmPnBSb3dpR2B8PF9OcXlrJGxTe3RbdHZ9RnBIbX1mKFRUOGVxd0BFfV5IRHQ6fVlyZDs/'@;
put 'PSNQaW4uWVlvdDxYdEpMZixbe0J7VCh6fmwyc0x7e1EjSExxMUwpJkVKTFEyMW1HUyhPPjteUlMzamorIkpybl12bWxOSE46LkxgNzQ5dnI4VG4wZC9iZEJ0bWExNnZZRSNsfHMlfHwvWmRddn5LMn5yLnh9Kyo/YFZjRm9ebnE4I3NhQ0hXMHUmQ2VfaFR8M1AoczU1cW5mdDZiYVExM0pvVTdU'@;
put 'M09XPEUlUjhueVJifHpWWV8zRkN2PVhafTpeMDYlNSleNlckdWZdPFNHKHU0QyxqJUJjRzNpImwxPiYuK2hFa3gmNkhGaHRJYEpSQjk4USJXcSFTeFBMZGZZbS5ePCE6O3liNjolXmxqVDMiPTJZOSZ7Jn15XVkwfmI0amZRPyF0XytJY3pZflpib1gkUUpdTiE6al9FUG0zdyhtND1hRyp9RDo1'@;
put 'UUBKdWMrKiQhY3c6V0oobTBSOUhvakxZLyUpJjxFOTkydGNZZzpvVHckMmZuOSwrJnRHP0E2cTpIfUQ+YF1rLyF8R1dYZjt4fHxVOEVZZTBsTzQxejNufWI/VUY3W1lFeCVqV0FIMVgkdXV2aSZUNHVGS30uPHkjPG9yNHAjNVlFYUQ2V01RSHJJaHZodV5qaGwmRlNzOSQrJnYzOGBmJWl1XkZb'@;
put 'aTpAWmRwcUpVXXNwRX5mNDRJZHVsUnheJl9ZUEgvQj5zM1NsJWVXISFicTxLbzcrb3dZVU9pL1lHLFIoNiIhR3pHPFdjOll6PT84XTIpQFlYZGdnYypOYTBRZnlIc0xPXWZ8eHRXMTppJUl3Wj43MUw2b2g8RnM1e3ZsL0FdWnFbNHczUig1RUIodk1WJTZeYU1DTWosRCFoODw0eEB9O01kbSZg'@;
put 'OWFPZzR2cV57eThlVEhiaishcldVb3ore0YoZVF6X3ZCSHM3OjdUX0R5I3hXRCMmRjZiSVFdU3NdTGI9MkNTcXVXaWpxdngwJExELns5TC8+Y3oyQFFAP0V1X2peZVtwRTQrYGEjd0tfKkJoIzJzNEV0NENfaXFkQkJaUUo3b2A4Z0RpQGBwWVojcHdYej8+KU94aTdESE40fDRyYEgxLjtvMjdT'@;
put 'azdsVUA8JXx5W0o1fWojQCtJfV1kKiZsNV9gYXdeN3hyPkx5cE9YYjZkcnJ+WXp6Pm8pT3ZzSzEyZW9GfDd6MCokTGwwRiM+RFAlZUE3JEAiWCNKT0VVfDdKJG9MciF3LzIvLHJwanEkeH5ecisrIVcxLixQUjw1YDI5X3RBQz18TkFaJWtHNHleMnEwM2N7TVovZXhQM0h3WTA2dGYzI0MrXSsp'@;
put 'cWYkJC9rYkdUdF18fW9ddzRlKj5lQnlha0xuZ2hMQDAxfVZdIjJRM2ZEWHIjJG9sOmVffnNuN3hBQThXRi5sMCxeUEhzVG1ZX0AlVDNIbWJfOnwuO3ljZUdhNi5IelVEUElQdD95MXAqPW4kPjZgVyQheCQ2b2g8Q1g+aXdVKkUodCNkcj5RZDtOdDRJTk5PK3VrMkY6XzFKLnhEWlhlcEVufD1n'@;
put 'R0t7MFtuOFgpL2NKfUh6Z10sNFQ3Q2l4L2A9Xk9pYUFUT3ojak90SVsmMiJJVz1+dE1YMDtiR2J7YllgcS5GV0JuI3lVYkAsL3I8VktCInxxJFU2RGJoJFQwKyQyUjxkfHA5JVN6b31iQzw5SEUwN0VLcE5QfSgmIzhfUihKSXRmL1dEQ0ErYjwqOkBPPFp1PSNScFEoNmNGKVEja2orQ3AxQDoq'@;
put 'Q2ciXjhdVnNlRmFCV15wPTFNJSo4RVI2aEUrLzlaQz4vKmlrYHVvND8mQjEqaGJAZSZQfkcmOj1qVDFXeFZVUz5GXiJpK3ZDVD5BYGlebiQmM21oQHElUSF1QGBNUTY6RkMxJWFoQzgwV1BIUyxVbjc4KH57aCQ5cXx+Rm9Cen0vdCw4LCpSYG0/WSo+ejI2NF5WalUlTXU6OzI0fTFrXnc+THZ2'@;
put 'I2BkV3FtPHNMSzVQWUFyX1FzImJZe0gqWHxLKzQvKkhgXlIzI0V9UXFYSU9HNih0NUxXfnIuY1lCbnIoe10rTWYkXjtEKmpKMlZUKj9CeXFsKGNuWTtsYlslajVxe3NeIWoodCFdNj8hQE17Oj49ciUmW35CXlJGKlJAfjorVnlIYz5ZKj5uVDE3RkViY3pGP1RgNW5BSEUoQnI6dV15Iz4lZDA0'@;
put 'R3d0I1kxVXFvTlRVczIyUD5YYk5Rdl4kbGQqaG5pNSpINW5XKjZsUylzfCYrMFt4cypfTkJONHNaVU5rTzc0fj8uVT5DaDZwdF9YVEwpfFFTIU8zc3FFWDosU00yfShqdG90Omh9OXwuTEpoY25IRHxeRXc+JGE3dVV1Sjp5JCtDY1c5QUBhP0YwT3lXa2ZZXlRnRmB6Vio9e09gYls4RXRZdTVl'@;
put 'L35HV3s0LEYkdCJKJGJAS2E1Jj0xUVpxMl9taXtWQD5iMl87QEpfNC9AI1V8TWw8NjRRNFIpbUE1PDgyRDF2WEhNYzh3elY3eVJNOn1RTV9acFlqJFVkOXcvKTZYfEpGZiFEMks2RDk4P183JDQ6OUo1Jl0pelptSkl+Ung2UUIoOzI5UzB8W3M4Y0I7JkpYNU1YbUckWFY0Z0B+N3F6amlgTSov'@;
put 'L0JDXkE+PypTRVU+IWw+ZFIkZSl8WyMlcnU+TThEfXglI2tTVVRAV2RWZnkkYSwvLGcvbCpncnZ8W2EpWCM/aFNkU3g7JFVDZFIpVFFKcSxKIWY+M144Qkt4UnF7Sl57STc7W2ImKWU5U3RscVd9ZHtPKXcoPTQqOkZ8SkRKK2g7eCMoSSRvJkRFdGk6UU5qMnNCMSFjI0BBczxgdyNFUiRvInxV'@;
put 'Xls5Uk1hSk4rdC9+XlVoV2JJKmghQUBtJW9fcWJ7el1PYDxJZ3E9RyhyfV9WRW9HLHwkQDJmLnFKfUZEMUNUVnlwPXZHRFVOYCl3IWBmIzI7XzgmQDZXdWwweURfKnJ4VllJbFZ1WyNleShYNnM+cGxkRH4vKW53U2N6KD0hIzMybjBua0x3MG4ifCQrVXNaRzhNVWwpXyhjNjdOTzdGZlV9YHUh'@;
put 'RlM8RENMJiEoWCglKVg1P3xwbExvM09HK2J7YXlKLyp9XW89dmIpeEMjbFg7VXx3QzA4Vi4wO2w8dDxkbS9yZlVOKkZnSy5La0loPTY8Z2JoYHZgOXUjMTMwST9BcUdCbltASHhMM1R1OWheNG9QNUhXcmlGMC5mdS48RGB5IiFpaTE7bE13UnBkQW5gbXlIMlU0e2ssOHI4TStoaHV2NnEjTUwy'@;
put 'V1M/fTEzNzx5IzdmUzh1S342XSN2dFklU0JyOC9EPixIaTRxeEBENXZPZCErJEdbezFMdEkobW5UQHtuNFtib3smXjdMMG06Oi9IXjl9NV9CVkM1S2slNTw8Z0JlfWdmRls/Ji46fTQ+T20sZ1dWWT9xUVA3IWV8SixQV2VQckQoNmVQVmZ2OSE6XkAsb2B2KG1gVTk6YlUyODUqZ2d9S3B2IWs4'@;
put 'K3VhcTAyPjhhN1BmQGVLL1AiWlJde0VwW1kkXzlmO0JeU0JfYFEuLiRYJiZgLDdiPmI6IiNkaChCOHlzfmoodkJGfU8iKzRHSzpYJlRic3hGeVBpRDZoby4uVFpOYTxQakJqYChmImM7JkAyUDAjcVEvWiV0els7bmlVRSpdei8/SU19aGQsMnVAZ2QuLmw1bH5UW18sUEp2JDducGEpQmk8PmEp'@;
put 'SE84SFU7bWQ1WngsM3BCSjZ9MmczPjJHZjMlLzklWUNSS2wxTENLLCQ4bDUhV3FkXz1NSm9vLENpQHckZnBaOyNuIW5xP0wianA4RCN+SVc8S09XVjM6VmxTSVUyQn17SXhjOENCUFlaTHs4QSt0YChnXkJRN2YuZTRCayFLZ19rPCZiOW5xIlBUYX40X2tFN2lHP2Q2VGgsWmF2ZlI3ITpIaiky'@;
put 'ZCJxaU5DaVtGb0ZtSn0lNSgiN0NhY2BFXmFbRHB1dTl9JUFMZSNZc0NNJj09I2drTnVrYWpjQkR0UXl7cz0hXVh6UW5iNCNuNWI5W217TnJSb2BjNyIjO1R0MFV8ZlM4LGBRNlpaPnh9W0tZRXVDTSNkS3c9dktkK1dRVEAyO1c1PD1lMTUxXnlIPUI9bkUhUj82VTtWZkpYYFQ0Z100TDQySXlN'@;
put 'UUhGQ0hySTguUjc0eFtKPjBRX2F8Xl9pY3YlIiltNkthdzU2RXJSXipkNX5mKCRXPlNIMS86NTRrKkxtLD1GUDpvbUYkfkxzMXFyQ3FTTD1GSiYhP2dTO1REMFEmb1VWZVg7SzVjb3VVSDBkXUZpfHlbP1RWQl9eXiFeQm5PJFd2VF5lYmhwYS5EZikzWiMzeyxkRHdmQ3R+OENvTi5+O3g1M3k/'@;
put 'aTh1Y01zOzFCfik4YXguOFZkcHRnIXlqekp1alcyQ2RFVV9AekVRNEh6JCokciZ8Ojd2KnFpVFYydjE8eiYya0crcU1Nb24qezl2Syp5ZmNCUTRUeTxmNn5FUSwkckEqSio3dk5PXzpHLz1dXmtKdXBqKXQlcGFvfFNCUXgmSWBxNTApOitxXmRQNWBGSXA0Nj5pUGssPVg2fjhdYTkxUjloaUlf'@;
put 'P1JWOXcsdChnRUt3MHFEOk1TdGZZMX5NTDE9RjEkektSQ2FjJD41UEtgJl0pfmojMEVdczd9T3g/M0UifmR9MyMkP1ElWjp0eDspVX1TREdNalBBOm8uM0hjUTpMQnZ1ejU9VERSYWwpVUNrWSJZfW92MGxLMGRJPEUvYEhlQ21IIUxBNUFLfFdaS09LemRKeFg+bm9sJnNIImhHT0IxWGRyKWdO'@;
put 'NldXdXUyNi5sW0sjRlBVWGNJalY1U1RIRUlHYClRdl1uNDY/aCg2SCgiV0cqcTNyYTVYajxjJiNjYS9mPkxaOUNydSs9WGVhMTJJaVZ7JTpeKjk8cjZFNDMleTRrUkh+OkVDT11dJVlwSWghS0U0Y1JLYThac29GWW1TQHF+P2xXZWFsRmZWZmtYMnR1Z0Z9MnlVQy96L0NhNEgyZFJzaigxekZy'@;
put 'OmYmWD1DfjVSdDxlb2tuYVo0NCxrLFAxPU11YSl5ZUhNKiF4RSVYSmhyNT9TdihWSFViOUMpNjphSGRCeWpuWUw5KGxeWW9bSSJsVV0rKlNgYCZkTDM6W2ljWW1+WFlpYno+LkkpaFZLbT1bOE0qc2BGRltWVnZSPzZ+cFhNSX5uR31sNj05WyoxfSN5RSkxQ2csZj5Sbj1LOWRdUyNNdmhzcDF3'@;
put 'fDk0Z340eGE0JGEoVDwvdysuUWlbVkQzc219UV5pOmQsaV0/Ry5IITByY0JyVnxMJEdhV1RKbG52Tk5oRDc/bFcuNXBJKj5GbG43anpgal9DZnldWGF6OFYxSWlScEhBQHE+YVI8TEtDe2c1PGV1SSs5ZTJCWG9YS1h9Vyp1dlNAczxMOXFpLC5zW0V9ajBPaj1zKSgobDl7dTFLeUwxVz12XmJK'@;
put 'SzxWME9tNipHQ1c1ezU9PF5YbiJXLEt0dEJeKUV3SlNRT110K2EjQSw4azhdPnMicH0pNyJxPnQ2cEgjKEx0S3h8PyxuUTY+N0JHX2RgfTZrSHVqSFpmX2VQX31INipXUzNuN3JAL3wmbWFRYn1bRU9UM3hvd2RmSmpRKyh1SnlXMHEzMWNiUjNGN0o/JUg+Z3ZtVGQsKU9mWCR1W3x9NklSTyhX'@;
put 'Iz1VLyJtIytAamk4VX1XWHxIOVIxb1NKcUNUZj57YWhxYDEkSlNpS3pgOXdWbDUlYjJZeHc6ZUdUa2RCPXI8bTxAVnEwWGYia35RLlZiaWsufmNnS3YqRl1NKGRmWGhISXBRUnJgUUdoSGIxMkZGeDM0VF5QWHh8SXw6aFlkRFZSbWRHPERxXUlPWSY9bjFQPUtHbzpbdmUiP3cwX2IkOCVWbGRb'@;
put 'SGBOYkYpemtiXUJObWhGQ2hxZDszW0U8LkBzenBhX3RZOHN8OF5gbXJ7eEw4b1E9SXxXZG9IKnVlS21XdzAke3ltMCJsUGVNfXlRUXEsZGk2Yyt0U0k7PCtMKzc9NVldSEBKfSJgdDN1Uk15K1ptLGkmXXhsIkA1OnJ8QzE6MUBsXSZsZCw+IzVwSWUkW0JDXkkzen04QVFYI1YvcVoxZ3xCU1RP'@;
put 'R0V5KUlrLjJnOSQxKExpQXY0TTcvPGJnMi40PkVBLypqNkpoOkArWjpveGpKXnFzZXslQUtkfFsmaTtQd1YmKXpdeWhjfDVue2t3ciR7ang1OzYrellWbnZ4TGF6SVtweFp+TiY6KW8veHEmZSN+OzZufk5xY1MjWllzeGBFRWA0Xmw1IXc4Ly82TW1VZjhdWkpwN215cyxkVkN1dkJXTGVbd15f'@;
put 'JHdmeyo0KTFCNHUqSF56Pk11RSY8cUMzWWR1LzZ7PWFmQ288dWZ1Vnk6Ki58PEhXfTJiZ3ZeRWN1WSlqbzUxZmIpNDlYPWAmel4sQUxCIXU9N2JsL0FxbEBmMlh5b002R3JyT0RZT19MfU9NfG1HV3dHKyh7PWR3KGpGcS5PIiV0V28yKEo+bExgfjRuXVcuIlE0alEuT1N0REU1dTI1OHVeUXRi'@;
put 'W1p8InFjTChDWy5TKz12WFlJfVgydzUwKlVpa3VgOVIyQTkqUWY2eWBDRSsic3kjKlVSZk9lQ0NZclRefnV5UUpnTTJPUH1RdUc3M1t2ektMRSg8STQ0bWQ0PF9FKDVpbUBwJTZsVkI3MnZBKkY8d3o1dEp4fCNWQSpNS0lXb30oLEtLdUVRKWQ7T19GYEQib2s4UzopcGI8TC87OltjV1NGdHNK'@;
put 'ODExZToyeWZbWGwzKFsjJndoTGs/dGxyLy8wZz44UVt+QT5XeSR0SUkpMjhsMit1OUE2VU4kejhvcz9sRU9iJiZtbU9ncDBLd1pZQFJEVlNFKVIifn1GWDJdTldCSjUxSHIibiQqVixxJURxOy4qYWJrL3k5ezpeWUNCUWhTWFo/Y2ZnQ2YobCNRdmhPa35wOyx9VSZrfTJrRTd+ciJaMyZkdGE0'@;
put 'KSE+fn11TGZqYHBhd0RRR2hKOyhJZz9IVDN1Qnt9JihEKihzPFJtJDZnIncoXVguPlBzdFVUcE49XUxDfDcmIUJJP2lQWmZlQFAoREtWMHY2cjEhYXJTNyVEYEs/dWUyIztJMl5WdEUxKkVpZGxQSjZPPisjOClLYlY/eV1mWiFISzptTkVFN31XKEtQQj5QIywxO2FfPn1MWG1dPSxzTkhmbHs3'@;
put 'ZFtAKGI2UmUrKWooNTNJLHNteXY2fnNdYXFNeTU5Okw0SzZRWChmWERSYGkkdm0zYSpNaHFbKklVZE9ya3F1TlMrfT9DJFs+UmBgdU41fj1Cdm5HeCoqO3Rna2tYSnsyOiVVT2AkVlddKzN3OTlSRVooKiE/LjM1cEtmcjVtKUBRVTsyK3BIfjZlenhMUG4rWkYwcDI8e28+ZnFMZCw5dXs+eT5s'@;
put 'ZSpAUnFeTXw1YisqSkdyWDY7KmU6VTFfJnl2SCJKSiZOPGQjQCk/QE5EL34qfDVEIXpoS0wzejU/b2o3cC5+VzI+b20pTVM1IW1VPm41RXpabSQqX31QRD9RYDFKVmxoZ3FVSF1KTW9VQU15b2dbbnt5NWJsZERkdkM5RzxZVykrI2l4Y0ozRzdxI1VsRU1+UjlSVGF2fDl9alVxd0ApY0U/KFNn'@;
put 'akxReUleL25NMCQsXXVCRCNmbjgrNHF8WDpKd080NUdXNmV2NzFYaDtXRT9fMlRLP2lUT09OKytgOU5PPyw2bTBVfl44Uj9IOHlxPVhYdFtjLno1MW9lIiY4entKVUVGdSNIQ1kraCxXSiNTbm8oM19XdixZQjZBeEIuNDAmOEEhdzhZUXolU0xKWXY0bUcpVkQ+aDJULlVgXV8+JGh2bTxzdHs4'@;
put 'KzxfN0k+VUJ7MV5nYWVkIlokQmsxcnAwQztiRi9GTF8je0c3WWJHYXFYQltufTtSSGZxfW1TamJLPClBfXJEZWs+RXI4YD0rb0pzU04lX1N5JTQ8YkxSVV9GOXYhIVc8LzJtcX5iTGp8OjZXaEs+dlZhdCRyKkUuJCwhLj4uOE1nZmBsfUpKbSY4eEF1TjUoRSEvJDxHOTk1NWJOPHZHKVRZKD9I'@;
put 'ak9EUU9+RmdxOTU3Ul92NTl7K1BmTkxMe181ZGg9eHliJWpCIkciUjZZMC84YiR2RSJYVEN2WEF0V3BnTzhIK096Yl5nJXA/JmdEKT9AWTZxPHxwS3BHRkF8TEhoZlB9IUtyOTFDJkN8NW1dSSE1SlI3JmdvcERiWjs2KShLPl9aaltKTTBPVXdAcVVxO1VhXXdbVz93WWApWjNEXWE3KHRFT2Bp'@;
put 'ZjtUK0lQVkxFeUh9M0hpI0p7WDF+fDgvXXVEVGNnQjVDLlBFQ3VCYS5HeWUzS3R4bmxQPiUlSVdXTFJwczQoWmxGXSUzSC8qdmdFTV90RHFGNGBKKWNQck5eJTBteFZiYTVHTXtRfnRQbVIlRV48ZlI+dj8oJCtTM0tScSl6cVdhUiQ4Z0BteX1vREFHPnJuKEZqfVVbWGszeVhlVCxrWGUra3BP'@;
put 'RldZOEw5dk0jPHZudnpuKzpJQFtaa0xqVW0kV04oWj8rSm5dZDk+TVkpZnUqaWFnJlJlNzhaaUFAYG1jSEFPPmozNnZnJUdSM2xsRFNHWGJqNVpzYW8zdjdUW2wqZ218SyQ6cns0OkZ7ayx9MXU9WUpkYCR1Skl1S0BnKU8sXm1wMH5pRiVMRXdzNXZpcExqe3A6blQiYF9LTjBFUWVDT2VtPl97'@;
put 'PSpHSXpebns/cDlCZyRSOGJTWFUhIkFTXVNvanhFMSkuT0VdcVFvMHJhW3w/a2h7fWVTLj5DaCZobS8kN1hIaEBWfT8rP0p2P0dkNWUuI0ZscGhoe29HVjt3bUEhKlIpd1BDZzYmMTdgNUN0T3t9XSs4Vyg5aCxuWj9DUFBJbSQ8WzNMbkgyWmp7c3duPSVPYEg1RldmRDR+eGxueEB8Tnlhdmc4'@;
put 'bkt3Ti9tQkVILnE4VzdiKGhWL2thRHQja3NlcmxdcTpwMGlqOFp0aEpjXVNJNU02JXtEXWtOOXJQOz5eX21XW1soMl9sQkkoTDRadHNjP3g0fEtgQSYsbmV3SSxeQjpYc3VATGkkYkpuO1RdSmJiTmIqZUJQRH17ZWgvb35BRXxoUC5bcU1wb3RgYm90aThVVlAoUS9AWilaIzFAcyZGX3xgMns8'@;
put 'TlJzSU1DVSNKUjQxVXY3Oj8+ezg4NCEqW1ZFbS8pVipiWilCRVU3OXNOcyU2RC40RDA3RT0jIXs/OzBpWjBJZmpBQ0k0MGlqaHYxc0BmOCgubHspUC9mQV9OfkVoQGIrL1IqX3x9X2xIRGp+fnY/fC5+JVZJN0shUDkqd3xqSHROPTkqYUVWUDchSVpUdGlIPHQ6fClMMTFRYi9idnB8L056KyQ/'@;
put 'VTBKUnN8c3dlPCFgQ1F9MyVXTC88TSxaV0FEU01qTGpqaFp8NlY6ZDQjVlBPMzJ8S0Bnd0c8UGU3c3VsNndMVU45Ync4YEtfS31YOGwqeGQkLj86Ti92e2FYW2lNN3BtZk0lRl1GVmZmJUxWLEhxfWpgQmhnd09iPCQ4bEg3SnMoMkZ8WzxxOE1IOD18Q2VlOmdDPFRBVzM8OkJuTWdIdTQ8PWdE'@;
put 'cnwlYXkrd3pxazNYIVJIekdSMmJdX2x5PWMqSXZudGtMNnklVntKe2JqPlAxOkBUdzlZezRBc3cqWmdMTThZTTBUTV1kQ1Uub2l1NWJ4fXpTfl5aNGhabEhWYHc+LnA8MzdnRzZxVl5kWG5WZS8uNEAxbSFmMUp1eklMMlF3bnBtbGklVF1EJnNPdUdMJnEvTHJLfkBWOFlvajJJQVRkbmpMXXZR'@;
put 'fmhbWVQjeX5YbyYyLiVAPl0xY1pZRixbcyNtW3omLHZ8e3gyJEowcDhxWWJhQEJgO0gwU2N0VnlWYDo0ZTBrRmA5cy5yUlI4fnJSUSpHSnpnSjFNdmd4KU1oZHxMWDt5eVskbGMlZztTKlRmJkMsOVdjVW98PmFjWzZ1TGQiNCVDJmRhfS5yOjU5dip9WHtXUT1qQ3pRZCliOX5mUjpeOzxUNz1r'@;
put 'XTZUd3l7NlYzPi9FUU1iWlRqIilPKzBkW3JVJnV0XyQ+X0ZWUFReRiNYckplYWwjKGZMRiFeQj1ATG4oWDxmPkx0WnNiOWlQMGptUiVSNndgc3FKbHY3OSQkNmlIfltmM2dpSyNUQndyWnhXYTA8Y0EydyUxUihMeFNbfEZ8IUtpdEA1fmRWRShhUXdedmA7KVY1eVFIazUlWGZmIjpGWjk4SVhk'@;
put 'WDB4W0VlYTEjIyhpUyo2elozcGg1c01yNjtfXjVdfER3eFglbkA/RVlkPXRjbT9NT2ZgVW9iUjw9ZyhVSEBMajgqTF4jKlh6RV1+KmVSKX47ejZtWzxtYE0/PXE5SkRdM0J1ezlheV9WZnB4Q31kR0wuRzx1bmZwTlNSSHFHUUo9cF56bWl1Z0MoV3BLYCEmL19lSk5vZ0FjIzhsTCYmPmVIWS41'@;
put 'NEszLFBfYn59ZT9tO3pTIXdaIX4uYThmTFVnPEclMnhvZ0M7OWpwUDVoKGZzW19xSyxxJTc2ODdfNEZaY2djUnA5e2UqUlI5bz15fWx4bCVYMTpeIW0ocyt4eSNmfXlxfS58YXd+YkczSEdmaDw2OkAhVU1zLFdDX31XKHN+JjhFc3wxYUl3TVMrcXlNSXF9diJvJjxAcXQuNWdxJH5ILjxgZTEj'@;
put 'XnVpUUJeP05pNT5JWl9wU0M1TSlGRTRTU0c2Wn5ZNWF9YV52bSw+ZHdLNXRwbjouUGF5bShWNyRLQ2d5SCl0XXc3YD17eC4rWkpYRkIlOVt4flRDKzkvSDBVUiR3TWRtRjI0TncjSiUuV3hVZUhjWSpENn4yPV0qbUE8cXNTTXFEPmE6cyF1W2FHIj1CMENnfVRlWnA4Wl9KPmZVd34jJFcve1ps'@;
put 'R1IhcHgpMTQ2JD1FO2x4eHF9YFowd3NwNzdpMDd1PTd4Mi53STN4eiNDVW1vK2U0byJpRmpKTj9VQDltYUV6SW99W2FRaltVQkJBViN8O0IsbXkvZ0BAO1RIOkYrZXFmK3N+Jj53V288UF5qTl8pKClEXTFyKjBHKFIsJCk1OWhna0I0TCNaS10xRWE7I2E3RjluMXR+TFU1YjlzMkkySUReZkY/'@;
put 'MDlDM19yN05+NzdtXk4/LnVEJmo3I2lrMCFGdElyRHovano9TissQVNUNil9TilRamZne154X008K3lxSGBVSmNBISlKRjg4ekhibVJxWGBaRnI6fTJraTl9VzxRSzB6Q3F7KlVLODF2bzxYZUw7VH5mMiskUipZOXRIQHMrYUQxbn1ITW5beUcxc2h8MmNFJnFAQStyK154OjsiWVIvQiVOe3o1'@;
put 'R0RATyp5QklrNVt9VypPKjZ9ZGhCSz4jamhpUWlZQU5eRGpULEFyT3Z6Wl1me2lKWjRdKGx2dSR9d1klYFdTJiwjUVBgVWoyNFdFZmg1Tk1sbiZuNXl4eS54MTEwQC91e3ciOUxUN2F0UXdqPU1uQmVabTdbdFJrRm8qSElCViN4OU9EPHRYWEpPWD1nLmFmQDtFb006QVpedUI5XmRFUzVKT2pv'@;
put 'ZSJudFFIU216dnd4dThQaFt4aDJMTklMbGlJRUYrR0B6SlJ5eyZvK3VBL14vVWkoOSspVWoqMjglfH46O31TdG9vWD05TCtYLzdebWApOyRMclo+bUtiJWphUXFxcU1WRTEjUlI1dFN6Oiw4V1tESjFBMSs6R2ZadH5scyJVP3h9TVltJT5jaEE5RHtLLkZ3WS93WFg6PnUhc3hrNm1BMCVHT0Ax'@;
put 'YXZiRCtBYnJ0ZXcxcComR3pHMSQ1RnYkQjx8PVZiSV0xaDsoMzN0cVppO2N4PTRwelcjRXhddmUxeTQjIiZQUjspM192YF10fXZEOX1nRmVTejomSUViWFp+X1F9T3RHezNHRWhgRWoiUmBBZFIoVlYlNjxodTVDd1t3UHZlSlFkM3NGY0tbIXZsaERuRj1mJjFjNWd9UkdJMlNNdygpPFQlZ2d+'@;
put 'NS5id2pPbm1LflteenJSV1I5VSlFbUo4K3UoKTk8PEleR3RlRSp9QyJOMiYhLCIoend8Vy5UaUcvd2RgUnxCNV44cikwSDltbT1qe0JJQldHJFpPSH5wOVc8QD5UPC9kOypXOCZONCZSKU4pTzd0ZXQwdU9DTUdLV2dzUFtbU2pnaiNuNSE+UlNRXUooJkVBKlhDR09GamtwSE4uTXUsRHhbYExm'@;
put 'MT4xSl8sWE5jS0w2JGl5RW5MS1dqISgkMXpEP11XbGhNVUozU0J2ak5+X1MobXpSbiRgV15DKkw2ZEhKZFVRZiFdPFkvbiRrb0VCPV9vbUxhfmJ+eEF9fmhJeHwlakZ8d2wvJFVjKEhjJEBaQUcxZnNFLGE/Q3AkPnpvSjtiX307U0N7KnBlOXpoK09faEVGWHUkZHZDdD1XVkdnPSFkQ0tyZiR4'@;
put 'NCMiYzJCUjIvSEhOSzxtODsoP10zO0VVYypedXRfd3tIL3pFWmFbMmc6dT9tKSVWfUE/JmtqYElEMmV7PTI5Rl43QGEpfk0jdW5SITdTaTxmajhVWHthRlIqen05Oyghe3N1WU5oLyxKWmFrYz9qLEpyWF1GYioxXmJDb3pXJUVJMSVeMmNsTz8zXSNIJVJTdHVwNWI3YExVfV1jJiVIbWhsJF1T'@;
put 'ZmBXWHg8SncxMkdkOTg3THB2dEBHSD9RSVdvOEw8YmA0Rm5HfldrSUJ8R257K2RYNDlbSVBGUCFtdHF1akwvNlc7VjZEbk1jLDF7aSt7UU4laVsjO1A9ZH0/UFdxQlBvWShjOWoqMU13TkJJI3FzcV5FfiRfPGpXKm5OfHpRZS4saWcjSHdtUnIkZnNXJTFweStXLDMsY10kKVgsJGRIUmhfajVk'@;
put 'fj4jeERofSUuPW13RjZ6MihkMix4OEhxRUNOJWsuRXhJalUle2UwIUNERW0oVkZteG9DSDJmN3R5KkJKflk5NUw2bDY2SDUvZmNEe1V9TWM4ZnFkNEBXa1pIbD85PyFdNCN9SUVBdzhubTdPX3xtW3o+Y1FzckMwIztkRHUuNyQ6amJzSGA0Wz8uXUVnaSk5eGdgbiw3VkxafTRrWnJqM1VsVnNf'@;
put 'QVZ+ZVIhK1A5UVhrKXFwRmtiKSgzPCFvbTA7JjJDSWVSWmdpMn1QekU+fXNVd2NlJlRWSX1XQnlfR3pufF0kOUBwPytQMEN6Nl5eezBWbS5eLlopelttKVkvKGYmTiZAYU9Sb19DTDUxQy9vN3tjUiR5YS81PiVRaTFBUUpUc1J0JkNgeCs+X3FvalRMOVB9azRxTUZjX0BxcG9JTDUue3t2eVF9'@;
put 'JUY7WSVJZ3ZXMTxEYG4xSl5UZixvakFqQzcxOk9JfHZ2eExMaj5DLnkiQkROKDlzdmApXVVAV1U8ZnI/bDxbMUg2cjwjalByVERYYDZtbFNxMktuXTJ3dDFXKVpTZnNJNWhrakB8SmMkPU5PZ1J0Wm83bklXbilfITpAe2V4ISQ1MlszJHd5WGFWKkkrPyhZTSpsTmdtNGFacDlOTDBVN0ltRWg9'@;
put 'MSRMW2R+YlUufVNwWHx4aWNhayZwW0lQNmwuO114Qmd+Ll1rP0VfK2syM1dgZHg9IjBjOE0ieFYvQktPO3d4cC85Mm1YI1FFK3RKOlIpMzRRKH1PWk5eP0hfVHBkTCxjTlJAQEwmOkdCIm5ML3JQI05KZTZTR2JxUmI5d2klP2BHJkJiSlVucipMYE57NiJfQlhULDhuVX4sbCNVSk8hLkBTa203'@;
put 'KyR9ZV40ZGxDZE1VS09LTXkkNDZRX2xUKX1wVX1lK1BZV3dZXko5RDZTTXBjTV94RXImUkxhX0M/PmYkb2Y6Q3A7aXRvSGYuKktdSko8UjlucV1yR0ZXaEM1JVI4ZUlaRilCM2BIeFJaWFE0KTMicWU/I1VvLkpdTF0wSFFxQ0krfUF2dVRMS1U3LGQ+QUJEfXIxXWprRiZbOmxMMCVNOHtEfn44'@;
put 'MHM5SnheNnhCQitddHtLRzs0dUNCQiE4PEJLeXg5c2N8alhGJS46TkU7RnBXcjViUCMuZyo2RkxzcFR4ajI9PWN4KHJ8XTNlN3M2N14yYkQkZGhbb044MWZHbHhBbkpUfSN5biVNUmZRV3cqUzZaXjcwPk1aQz95U0plLjBtSSZydGZ8dTlGc3gzc0k7eixlKU17WCUvNnYkX31CIVBzejB9QC9Y'@;
put 'PyY0PSh5d2gpPjVdJn5ub31KdDVsZH4xc3pnWkdsZVFDQVVnSSFkS1tZQERBdXtrPEBtWj1fMnkuY2JGRkw0Q3xCQn1sZyo6WU1+YmksS3ZKNjVUaG1NQzFqZT9bY1txfVE6PjtpUCxgPywyQyZwNGAmY0xwLEBVRmc3MWlRb1MpYHxCfkA/JEcsRnBPQ1k1akxgWE9LQk1hfTxRKGtIbm03SUtV'@;
put 'dGpVVlZfa1dTbTVCdjtUSE54WiwlQF5LWGI4Jj1PYF5HPEM4aEwiSmNaKWlDQ2pjQmklcWxnZHJlQV8sJGhndllMOSZrS0pXL2F8aFhZIyska2NaKiopMTdnaip7byx8JVZdInhwa1VmN3MpWDBCJCJAb0xCR2EhUiJWaVtEfmchdUNveCp0Vk1WeD8zWnZ6VncvaFhnVGcydmZFQyM/K3lvZUMj'@;
put 'aHNCPEVeN3xOSSRqXnJ4JEpdUH10bVY6MFYzKWhlNjpIYj9BVXt+L2hwXVJYfUtGTERRMCxxdnV2aD1YfHZ9Ti8yLGFvPUsoU2hsTDVEeWR5ZlEyfSpzT0d0T0QoSk5qPUVJTF1ZSU1NfV0/Nml4bSEheyRtWlU2ZUUuYCp2MV03dXh3Y2Zxa0JVfG9QOFN1NlReLG5UeSprQS9FSnl5O08oZ0ND'@;
put 'KDNnbm5iImhHMFtjfTgwKWdFWD9BZ3l0LnFpaUMuP1BkZF07KyxXT3k1I2s9cyt0QC5geiwqJXQ3TVQyXW9pbzd1cis+bixGb3RhejVjMih4NHZteShLWmlwMU5aKEMyIlk3bF98ISpQQnh0PHpZZCFSMyxedng+fUwpdWp4JXJweC5yZE5YbVRoSHdMWXA/WClXM0dySU8jZVA6WmpNMkg3XUd9'@;
put 'MUAvK2BQO3FQSXZiNV4xMkciUWxII3d6V20yK1U6RF4qSFA0UngpRWxxcHt7XSYpXXtjbGtFJDAwdEYlW2JlW1FNYEEuYEp7cF53PFgzfFk5fkpfOSpJd3JqMmQ/KFcsN0hRT0pCaGt9eT9YO0ckODxnbS85VV1MS1g/YWxsMi98Lntze0haTkhhPkZrJkZTOkVwZUZOWn17MXFiZjlQWUNuZXc/'@;
put 'SEY9JkVARmphaix+cjA9NTI1M1JIMnxUK0tlfSI9ezdhe1hDLDxXcT0wbWl1dWw3M0QvX0JTTVp2L0hLK3xmc3x5fDZedn0keVZMWFQsQHRCYUZVK3t9dHV0LE1tKyVgU2ZWXmswPiRuKEdRT3JNIjd5O2FPNyVJTmxqRnYlXjhueUIqSnZsUCY2P0xkcixPSlJxJX4kY1lkc1lmL3w9U3dXM2hZ'@;
put 'a2U6QGFQQmVPQTAwd15ZL0Fhd15dLDpXdk5GQ0ZXNnYyKE8/UDtAU1h9WiNZO2lTZUBQPlQ4U0M9O35iZVFhUW9LZltBcS81UzdyS2IpQUQrbEptWXdeK0xxIVdPI094TSZGcDE2V2laOkxIfVBVPzIoMnpmbndLfFZ8WF1oY2QuZ3BrI25uVzJQWDVfUl1XLzBrRzVFdGBbWnlZQU13Ok0kUUAh'@;
put 'U1ltKS8ja2c5ZngkbnRIfD49Wns4fnZ8TllMb0IkdHc7d0syR3JeRmIyaF1JfVhLZ3dnaWZ4OWIvTTsweVl5Sjo1bF1rbmc+dVErdVVfRXo3R0t3fDhyLiQ8UFlMJTAwLk1SdCFKMC8+Lm9fLHw+c0pDbWg9UD9QR3ZLb0dKOl9aYTJCVERAPE9iYE9iXiQ4TXdeO2xGKFFtcEB3dyslQTU2VyNI'@;
put 'I0plezlgLFQ3TGsxQWNrOys2eGRIZ10/bjpwK2NwJHY/TERiN15RYXgiVGA+Tl8kMGV0c2diJTNyITxAYj1kflpuWURGI1BMNz5aWHBqNzIyVGNVOSF8NGU+VWNFYzJ+Wj43Qk92RTgoc18xJH02M3xHSy92L2t9PkVwS0pAbjo4IigyXjJlbT13SUp5aDtUbmtiJTtHTTNCOnUiPFNALCpPYz5K'@;
put 'OzVuI3JiQ1FCS31XXWQ1UURFKT9xTHhzMSQ1JG9aYkh+KXk4WTdmOl5FSFM1QXkofGZUUTY2Zk5DUHcjdShVW0p0P2d3dTNDM0NaJn5zMSU4LCRYKU5SYn5DKl9yZGV4SXFsRy8wdWcyWTVxPEheUmpgbXUvKkt+eGc4RVFfYVgpbHBsQGE9S0UpYENNP2J1KiVjYSNyKGB9WGoyc14ubSMybjN4'@;
put 'Py4rejw5TDcpbzZKR04qX2lRSHQhVkZUNWxAWVE3VXFHN0ZHJFN2Skg3QixhUlg5a0VVNHwhaGV3RVJdN1NAdllrfUZHRXJIZS8xYXQ5emg1KD9XdGg3JTJKQHpZaWE1XXFvRSx4VTgpc3xMSlFAUj9UXTR5PGV6NWhMNkdTNXMlNitCWUpgZXFAT1Y2QG9kPFpUTjB7RUs3IkhycldEODsyUkBJ'@;
put 'fUMzTEtGaTxHUUFGXyw2bWJLWEJmVW5EMy9NPjc9Ty8kTnR0c1JtYTk+Rk09NDcoOGguWH1zYjwob1klLGg7NyF+Zi4pJGRfYVptMElQMU16YkFjZVkwZDB0XWwrJjhgXip5dWNSLERERTNMJUN2X3xHUFFZZHUpcUMuJWFlcGk1QHwuckA0WUN0InI2Qzc/PnghSX0laW9SJlFHYXJwU2xxK3U7'@;
put 'KCVka3VuZEZZPnU9LCJTbHByeiJmQUdQe006Z2M4O10kcURoRUNfdzZqaXojbG8oeHJDQU1gSGI3Jkw6I3czMk9GLmFQXWJLL3g3Nyo9X0tGRjlsWTk/MGdwJnA/Tn5BJnolVXI+XlcpdFNqND0xPCF5UEVoPEhNYiRGT1ZCKWUuTVVBWjokIyljT2BeU2BjaTx0VW44cGl4MUBVWCVWejMsXTJR'@;
put 'Q3VqNDM1ekxvfiE/JS5ubiw0O0FnNDZXQkd+KzJeWy5iTDBGJTZ2c0FrXyx4I3Nfdm9GSixJQ108dSEzMGdJY3wpZTlCMVhCY0J4cl1rd1lSdTR4XVd2WiZldXIrW3lUKCY4RGJReltvTEouOW8sUD9KZGY9Y2ZNMHA4IVAlQTpscX5FX357ci9+ZiM6N0tQMy5YZm1PLj5jd3hOJDFCKzphMVFh'@;
put 'IW0uMmNvUChKMSVTe1o1Km5KZWx2RDV+TVVaQFJBWmNCOXMofVg+MC58Slk3X2IofWlIOj5XOmg3JGVFKXZhU3M1Yjt8aW83elNwPz9NIypkQjdlSHVhQSshOl9oa0N5JDdWeTJMNHthZTFQenk+LyNwaj88S1Q/ZnFbVnxIQ1tfcllAW3QrPjs2cTlIYDxIUls4JXJGTih6M30jdkQmX0AkcU8o'@;
put 'RlUwPDh2L14/Z2FHWi9zTGwuRVhEYmBSKE0yJUh6bnBKPipWVTReUkFtbCM6ZSpadWg+M3B1M0I5Rz4zYU1JIVR9VGE6KnleTVZBTWFxZV49ZHh0XVdZPzQka3AuIiVvUz97fUVSQSZsTElCTlFgYENFLGsmKlJNWkhed3NiJE1TW2MrXmFqeCVOfWFsQz41fG45MUFKRFIuazcrVE4hfD00YHh1'@;
put 'X2c7LCJVSFd6UCxtQ31DU3BPN3g/IndKWU9kc2Z7KEB+PkVxIipnZCgheXpWOkFobSRfbFNZUGlyYyRuSyZ9ZGEsPGNIXmxIOVhTZEhnWWt4LG0vdGpnfHd9dyxMbjFTUU4qTTJnV2QmIX00Qzo6TUFKI115NzNPJVlddkg3MzcvZE9JWk0/bF9xfko7RnptfTpJN0A+bUxXTlc7ZTNWQH5eY2JO'@;
put 'blY9cEMoK1M1QmttX05DWF9TQS5zPSUyUkV3QylveWZsdyM6N2NEfiUwfTNtLjtia18zcW88ZkYjLjVlN2VGOFVHeUNDZChjVUlsLztAaTRgXmRsKWI3O3Q2XV40Ti9oQm50WyVANnp3PyJxOF9CMFpmXW1YTF5Qa2w+T0BhTERhOHw0QDxpfiQ0Omo8OUcjWmE2Q0tgfTc+JmNWSF0uYzJIWTth'@;
put 'YjNLck1yO3J0d3dyWUYxVyN+MHBCdk06RER0RnhpME42IURKVS81Q0hEfEY8eX0jWmlgWUROcyVzNVlpLEh+c3xwU28wVD8mRTFYXztWIWUuakpRP3UhTFVDPkYqKT1nc308bEViZjV+cDlLV0E3X0xkOW5pemwzN18wPj5YfXVlS3gqJV9MIUQ7QzhiRCV5PS5yUX0+Qm4jYnlwP2xtJFY9KT1J'@;
put 'OGtbTFJkPVN8JUQzfDI+dHM0VGQxR05mamElbWZNJnVFTytIUWg6VDkyZUNINSpFTjB+TmZfJX5INTFUaHUodCRwJWRWRCZlWUxAdUZ8WmQ5eyUzNjJJbk1+aT1jal16T0lWN28mQ2tyZnUoOUhbRDMkI0p+Q19Ge0pxXzlNdiombWVna2FDdWNxd2Ixcl4mbXpzOVhSZ0V1JSFCTzI7c0x8fGlI'@;
put 'V3RhRmNISFhLN014PmZnTTpAbkVwTGMrN107bXRhbyR0XldeUkAqaFBvVzBQdTguSVp1Iiwmbl1GWXJaZnRAQyhbcXQ/LyRkUG4uXTZeLktgdjdrYmA7WjgxX102Zm4qeDAmbHYvaHROWX5NI1NSKlp7PTYyQDJvP3J8V29jM3VNVm0hajFDVVsqZ0t6fmIrOz45M0FOMn4mMCR2fnhWVTw5JGhE'@;
put 'UldifiE4Wk5qaXw5ZX5edTcxUikoM1kqW3ZmcXo/KzdAI1l3Iz03blAmd1psJkdVcV1ZTCZfc31JPFRzaE13QH1YfFpCRyw0WTBEMk5Yc0I5Nn1yZDcsJmdXOnZtZVlFSUs3dVY6YkgsQ1gmL01qdEBpbTd1XS9YJV4hOy8kXl1ucDcwOmRMTGt4cCo5P04oLztiITR4WUJURTJ3YWZKMX4vSDVL'@;
put 'JilGY1IvZU55Zm46OWFAQzkkJXZdSkMoZksrXSYoIjprVWVQRVB3RUNmfm5Bby43P2Q8bXpEV1Zhe297Tnk8IUZRZEopOFJ6aiVESDQzenRIQ3tpak49XztuYlJwXWVnKjF4O2FqQzNyO2J7KjI5dSlNbXk4bWlwWk1gbCVnJilUcFRoLkYiTEgzdEIvLD1KNU5ecWU2SnlwJHomZU86MnhgW1Mr'@;
put 'Uig9OltNeiIjblg3fWtMeyEsJEtyRHJIJC45c18zLlh2Jk1yMGYvc083LDBgJTw8MzVrYT01fDE4SFFEQ0t3Y0okQE9NXllyMSlAYzZQfF0/d1F1IjtzKD5GJVBiQyl7V31JTSNyYW86IkEmNUdXW3gxNjY4WDl7JDZ8S2JaZHZ8an02Wmx6KWFpO21RP0xGfmJNa295PVBtMmk3ZGh+JnNRdjY3'@;
put 'JSJGTkVqMWIxL01UfFs4W2g9P090e1BJKH54Ynw+QDA0aVpNMW8lZ2hpdk5OdWExYmc0aHxtZndrdUIyZ3U1MTN0fkhMSD5fTGF3cn5na3BMY2llWSFVeUVmcSg0W2orW1kwPkI5UXFHd1s0VD1kOU8+NDs1LFleNjEzYV1IJG56YVJ5ay5IITFCXXAwSCpdJEVrMHVZVUtbTzZyZSxSO21yT1NS'@;
put 'ejh6PFZLRVt5fUIpciphbmAmYmM/PUR0L2IvbHgvRmA9SDddMnVtWy8rMnBDXU9JO2Q2IXFpXjpBSktFTGp3czM6ZV1UWURsVHpzNUhDeVpHOSU0ZS8hOXZWLl80Z349dlU5OFBaN3dEYkhqNmkhS3M1UVdPUHRQUzk7Rj9nPGh5cSN8JEd3P1lHRFpSM0RTaCJYfmA3M2xKQnFDKCRzXUZMWztp'@;
put 'UVJBaSExJSpjVEhtenBmbjgrJU1CY18sUkBKbm5YdDchRl5OPypvdTVrJjg9OWslOCMye1hRdTojWypkPCFSIW9IWHljWlAhNUxDSGZ1OXIqd0Y5ciZ9aFo1SSVCOUo7I3J2YlgjNnwjLDJtfERraSFQdVZ3MmdQPDkkbnhLM2hzO1B9VTw6fiozaCREe2VSLz1GY0koMEQkdjJ0TTxsMmZ2N1Z3'@;
put 'MzB+cVcrQEoiU1VAN2AlfG5SU2E1WjR8KC94KlpidGReQFA7WipMTCVzbjpVI3xrbl1NUGtVVCxUUjExRz1JQU1mcyw+Yz1peCtFIkAlYTpiIXI2JGk5a0dtYl1VSz9rbVpWXUpaQm5oPmo+RW54dGhxQ11xJS4+PSRyMDZYWGE5YVE1eSZ1dmdMR0Y8dXZaZyFGd2hbdmF1PGZOZ05TfndxfChI'@;
put 'dyFgLyNyaE4sN0U/P1dqMSo5KH5YSCNNXnxlc3koKitRVnhVX1lQMkxbNiwwe3pOWX46RWouVSNaKVZeUEBTKl1LLmJHImozdTx9UWUhJXB6MXksImptYipFLmVee0ViViY/OiVTfXd3fEJxcGk6XWh0Wjppe2N+eytKVzw/RSxCaD5ILiQ1ZU8mcXFuNFB7KX1iYDpGMylFZHheTTNOOkxYVmt6'@;
put 'amldbmNrI1dgcGREdENteGoyIT58VGZGNGR5KixAUHRyXlRDbWhjVityXjkuMFY9Pm4qJWZMa2clP3twO01AJFpwVzkxYmI/OlFpUjRBW1RpVVp6eUplNU1FRVtTNHU3JExCY1VDKldFbCYvUXZfRW47djpbR0ImN3NUMDtacWJaeUU2bSIqI1IqZFBIUmJ9UVNbb3UjZyt9UFhXIV4qVDAlIjA3'@;
put 'ZF5taTAkKGFuJjVDKHxtSmFPMGZbQmsyKV9wc3VBZ250RTZyTHw0flFISVluLylgRV9FOU94OXpHSTpdZT9JY2RMNDIrWWUoV0tCOyNyRVFiczdXd1tPV0RdKnhYKWkuRnR1Rkt2PyNCX2pwX1VNeFkuYVt1bHEsfV5UfC80RWkrJTJyVjFrKzJOOSh6RXFsOEVDMDxHb21qPClZR1dWYVs3d1d3'@;
put 'WGVmU3BuOiMwPyxGdFhFWzRvX2ErMWI0Zjt5KkQqfiZ7fnxOYC9jTV5yQVAoWVdbImE4OlEuJmddWE5dK1o7V209bjxnM2RPOF8zamlZfWkpYDNPd0JBezBobChyS2A9fmooMGx3Lk06ZlE4djpqenBUWFE2aXowImF6KzMwRFN8OysoVC5tI0o9VXMifWxSZy9AMiwyW1hCLl0rMnkiQCtFOX5u'@;
put 'fTtvdSIpVmBoOFFyPVdqI2BvfWt1NWQoZE1XV3JLOWJ+MXhWWFc6Vz9AeStWIntmJWYkc08yTUojeGlqQFhreW5USERAc1dfJSt2JWhqYVlIP3JhVzB9TDJFVXs+N1FEKHE/WlVjKSt5PSVnbnhRRTlVUmg+cVQyUlN+dExSRlYqdUp8QnN6O0E3dlUhREYscjtSaiNHWzZVWWhtW2lyY3J1bEA5'@;
put 'T0Q9ImF7Xk9qanl5fjRTViZ9Plg2OzB8Tjd3JDUhaFFqZ0ZVZ3h6KGpyJDQ2YDtBdFMkUShgYENBSWsxXlc/MlBWdGg8K0d2cVR0dltON1I6Xm09MTZAZCFwOnZgVEA7eEBrNUBxLHNAO3RbPkNRQWw+bkBUPHUlcSg9QWxsLyhQd0E9d2xue0hLR3Z6NjEoK1l1IyVSdnp8XTU2djxjLlJ8c0tZ'@;
put 'Tm1DNzsqRSJIalY0VD0lXXhZY1FiOSUvfFh4YX01VWxgJjM8TjZLdTk+NnhdMn1ea3BRZVhJPDUxZ2k1K1YxX1UhWjlIPWs8U2Q0ME46flFbXWMkSVR+Imx7LHZbO1JNWT8hZnNMQ0p+WSNfTSU1UCVCJDsuO1hmMWs0e1FXV0k6RnNZbmcoKEVdPlY3VHJGQ0prclYlOV5pcV9bcWpIZDQmYVhQ'@;
put 'Kkp+aUFNfipLTG4yL2pBZlMrX08rNSY1SnRPfXRlO35wKmg3T1lmQ0xedFd7LDJ9TD4iLk08I35QPzoxOk8qSGdxKXJDPj9wXyQ/dEM3M0FnZkg6aHUoSyoyWkViJVlfcEZ4PXNBW1N5MURGNmMqPnBlOiw5SS9HcDFVRG0+JSphQnhVQEZTIitkQWd3UjwpNy8zRUBlZC9HUzhvfjhYWDhCcih6'@;
put 'KmlBKmNmWUlDW1FbOHFWNDAhZGFXWVQrZjJQZyk4bXdpRTxqYDE5LiFrWEA5a1kkflksVkN7T3s1TD96QT5iXUxKYmcqeTBIcjIoam9oX0tscnNMXnkySF50ZlV8S3R6RDVMXVk3JDAkcX1QWVhIKT5FPmk6a0YrJExnRUQkcyooR0YrT118NTtifTk3NHtybXFZP0ZpKjB4WDI+dihWVCx3anNP'@;
put 'OCYuPDA8M0xLOn1jM1o8My9fUCtsamZNb2YpSX1DLitIbzxtby4/KyFtWlVsTE9mLFU2aV9dPWBsR3ksZjNgMVA2MG0oSE9lNW5vVHg1OWtaWDQ5XzNjck9nYTM2VnorTlo1SjcyezdzUm82OzNSbFZGeitYTXZrb2FYSjx6KGBuMTxrPGV1U09FXldCdnRKaDY9YHR8TnsvJUhldksuWEZUL09y'@;
put 'LiZTJFEoSDBIbmI6YUVUe35aNDtGLlR6bHExSFNybVA6SU9dUz12Y0JjaWRbXzV0UkZXOmdzVDwoSEYiPmRicUdEVDYhfntEdTw9S0gsTTxvcUBpK0dPRFRNISZ8QHslaFE/eXgheXljVHRhVDdBYnd4UEIlWndmd0pVZzRzP3RfUSg+aD9rIXYpMUAmMXQ2WjlCVERDNV1PIkxXUl00MnpMRV5R'@;
put 'W19DazJ+fXluLC5Qd3Z0SlIvVyoheisyT20oLiZIe054biRUPHQ4WmRqTmxub2N2O284LFQ+RmhMbjMqQj1oNTIsPyIuTlFIVjs2bG1IJm9OYGRjP3VWW1dVVXRNNDZ7eEIodmRTZ2h1Ly5QYSU2Q0BVQHpuTVBiR1I1XzxfXltYcV1GXnRAfUhSJlshSjM/NlA/U2hMbXdFTkg9KEZkSmopQSZ8'@;
put 'bzJpO2w/OSxsJDBHOjcsM15nXWc+InIqLnkwOCMrWDFLPVFvaF1zR3lJdjlWVXRCTlB0cVU/UTRXVW5MeW4rPXRBTS49bCIhUShqXz4wNi4+ckdEdCYhe3d2IVIxSUNbSXRJJXUsancuQUxHKjtRTzI+UDhicG5weTdZbFNrUnJ1RXJNZyQmVXpQLlVfaFM2UzcoYUt2QytwRjBKSmh7VVJNUF1g'@;
put 'fnRmej9weXVmSE1ZXSUpS1JCQF5SK0c0RC4uNU1JOV0wVzh3NkEyTixtYGhocGt4PX4jME8xaiJyPFUlcFFXVThqXXohY1hUajlAOjNydTJDQ1Y3Ok1+XTxkVX1nczpEM3dVamFyKntvYTVvQihjL0ZUX0VMTG5JZFcqe2BsWUBxRzNXWUgvX2psREQ2eEFTfV5sI0l7fCRrT3xOaHtASlA/KF4h'@;
put 'UnxJTz0vVn1EODE7KDZebVUvNWx9JiEhPT92V3xCZFhRe282O1phIiIhLkZVQmhYd2V7MGBQa2lSQyYhIzhGJUdsYWtjIkZBPz8qKk1jZl1AbEgvI0ooKDQ6JHdFUWtyKUlDQTdAflsoM0VHcztEKG5nQEIxRWB1c2pxN3VxNUckTz9PcigoWnhOcVo/bG0xV05QQU0mN0RgQ2tRUG42eWRRa11r'@;
put 'JD9YUXwmcU83O0ZBW1Q+eVVqQ3xVfjtnXk9jJnRhInF7bzBiV2d8dFhiXTZqYkRMd1luXi5daHUuY25SRFs8SXtuQnliPXtVVHlsdmt1UzgiP2A4cmBKU00jREZ8KlZuL0xCV3UmW1phMEVZMlRYQzs7c0N1JSNlZmNxKTRlOGV9SklnfCVoXmgjbl4mWHNsIWZYWFF+OXZUcU1KPD9SPik9eDV+'@;
put 'RCg9bT5qJD1fJEV+WkkrV29OPEh4P2AoPWAoOWZpTW0/dV0kVCkpNighS2pDZmhlNDchVH5jOSkxRSFMRWsxLHEjUzxRRjFZaldOMnJsYENOWV4keXxXPEZ9cztsTyV+ejB2JHR9TnNhZiw/dkopKSUoal5aR3xAQm56U05bYiIrYj9qNnlAdWNSaTNHYnQmMXYsc2IvfUZ4a19pVGZeL1ZjNFM8'@;
put 'MGJPbHI9TENGcmZKcDxHSFksTkR1WSMhNj44LENtZilCZ3FBOXNmO1ZCd1oxRGhCdihbdXdCT1tENCpAWFkqfkYhbyM6R2M5ezcwaGs+VVhuc31RXV1sYWMsWVghXj1ibiRDU3BWQDZySVowSExLNmtgZUB6LyJpUiF7Lnd3PzVPRElZIT1xYUZwN2d5ZWt9WSZYfCksKGRLYStnN0U7ZE46d3Ms'@;
put 'a0IzM3N4RC9DSGhlVDQoOWZkUXlrZUpCP0p3MXp+TCFWMStEJnRYRmglbTIhNGxiT0wmaTU8fjVxPUxeekh6UWIuNUFUVTxBRCg3JTYzSzhgLyZMKH0/LmEjSXRzcTI6NUA+MktxQV5eUz8mKntvLElaeTY/KW9LRlFUZjU+Pm59XzE+cC5SPlkwUTV7dnk7XVlHYHlbISU3cEEwMSFYdXhmdVRs'@;
put 'czExSChUSDRoXyhiYFM/LE9xXnpGSzlXci9sSDx8SH5sRTJaZ340aXVNcEgmP10rY2lnTjomJmk/YEwpPHNKODZqMCUoPX4+L2leWXp6ZkNAdVRRPiRwNyhaZlchV0dSdkVHLkUmbF07XzgmKDo4Vns7N2A2fD1pQ09nMnBTb0BRdDNXNGpmN1d6fSZgRj9+VSgzMm0zQEZrKytofkMjKDwzTilq'@;
put 'aHg8VmV0eU1SNWFoRU8zL25NPC5yX0d9MmdAK0FBUGt5dFsiZiQpTVAyJiopPSExRDM8fjteJmpZKUYpLEMiJUdYS29aVmcoSjpyQlVBQ2I4fXhiJGRWcWBRb30hPTdJWDNSPEA4WTtrMlVZeFVMZ3JTI1h+VyxdakJENCtxRzpRTTJqbmFIT3lqU1dtYC92fUxfLls4PFIlc15mZ0dOZG9vTiFh'@;
put 'W3VWYWYvXTBOc3tkZygsQ1kvaSNgeDxDZH49dWxdPTNIXTJnb3ZnLnk9Tk1NTlEifXdZUCQpbkt3cF9pOVY/ZWIpZyV9MzAjU1dvTDB3ImFoP3tlI1NBa0p2R1pvc01gMD9XbSZ3Y0NnV1pROFpgPXBvbXFEQj04dS5tRyFKcktIWEo7SD42Uml7R10sLDdkWldrYHg8SmZfdV80ImZhKCtYP0Ml'@;
put 'O2ludSR2bnUuKV9OO2N0e1BqcmprKktEOD43S3ZyNltMcVNDclt5U1dUKmdJU04mKXZZYFtuXjIrTU5dczB3IVIuLi59OFQ7NWQ1JFJjMiwwcGd7NSRvcSo6JmU4NWFlcF5YKUFmQyk2JWxpWE80fCJaRjpQSyN3KWcrVElFVkJNZno7WF1ZZHlSfjBqOXY3JiEzJFhWMk4oai4jTzZvJmwuSWFe'@;
put 'UDE7bVdpP1c+aG59MGs/Jj5VKUtDWWA7V2BQI1pva2RySnRJeVkwJisqQ3lVfTxpUG9odC5URS9zbD96KlgkYWooSkgkTFlLRyh0Jm96XlJpNXk2PT5ZKiQla25LJk4wezZLWmRaJTRmfSYze0IhO1g+bHNBcExZP1tLVV5NUlY8N2w9fHc+WTcxc0FROXdqSU5ofihmaFBCVi5TQWRpfD4yZjNe'@;
put 'Om5fUG1kcTlIdF1uTnJTbmZaOywxTDx7MHUmVH49dCw+VjksPCZaWCNzLFZIaSFecHR1S304OGslR19WSk1wQkxZYjNeJkgwcEdUWFEzSTJzYmskY3R3Qkh2eHYkUyVZNHlFezgjdHIhNTF2MSNnZG9HJiF8cWRaVm07OSVSb0Z6MDQ/WkFlUTgxWlMxR2hFMlF7aDhuT3d9RlI3dlBqOCpXWkp7'@;
put 'Z0tkM04xdDI6PU58SyQoP0MzREQuU3p6NmdSSD90UHBGTjM6PiRwLGVkUjFTNV14UD5DUEhiOzkofHFgJDRpfXpLWyxSeU45NjAmajV4Kl0ydWFiM0JGK2NLJFdPc15PUHxTM3U3KTVafmFJaXB5aH1nZ3hmLnNHMiVoVm9LNlAuODgzeU51I3JsYyZwQkBzVFBAKXRrRHlWdjhfSVZrJFUmLFNq'@;
put 'N2xCMylkP1VJXTQkPnF2WChPMW4hSUE+aHp4O0ZSKmYzP3kmVXgkbkhvcT9JNiI2azhLejVHVURIWEVKZFRicUhbXiV5SUZ7QnU0RXU3cUlodigrYjJgQl0sY1JpO0k0d2JjUCRTV3tjN3YvTVNndm85YXF2aX10ZGdDTm9WcE5Dd0ZyVzBvR3NLMz5wbGRvST14bG5sXXluYXAmWVhSal1SOU1T'@;
put 'XjNxP00kKClZclswIWQ9aUVQeWlSekdCSVAoTUIweGlRVStKdHRObyIvNFdiSXVJa3FTTDssZ0pSNyY6M0kjdWFKOnEoQjdrZiQyTS5DQF9fPG9kXkcsY3ooOTRyLmEjP0lqUnI4eEsxRVRZSmMhTFlUZDolKWZOemklN2xecEt9VGt0dmE2diswW2RTUkVdQFBSKDptM0x2ZVArNU0hYmd8clVP'@;
put 'fT4kaF9XfnN2LDB+SnteJVBnK2AhJmp+Tld0e3hJcGQ8PUYvWUp1Sjl3fk9vZSouPzsmMD9qOSV1YkQzYllpSk5FYytnJnJ7cTJvWUNVPSwzbWE1NDJifFVKaEBGYEd9WUVhMXlCLFJVezJDNjU+VXhDIj1eU3VQeWc8TlN8NzF6O2YuZENZa0ZqYWxJQUd3bGpsMkIlS1pDajZHcVhiL1VTQiQp'@;
put 'P09BKC9TaUN6QSM4bjMjUE1MKGdGcWIqWjFCTiUwYWJ7PCxjU3V0dXJUcHhDbSE+MDtZTlQrOEZbWU11TWxBLHw1JUJ+W0p4LEssTSNzWzFePXw5PFplPTEqSX1JfG9jREVHaEBjTCg7WVdfQktAP3hJSUhBLmtIdz0yY0QuM2VpYVtRbiR1a0srfXo+RTd2R0dWdDV2SCFPbipWV3BjJmZrSTZV'@;
put 'YCRNLDUrRXc0QiUza2xMbSNJdj4zX2E2QVZ0a3s9ODYzMDd9fjhoNWs1eW9QVDpjQFNUdCVRTE52S2VTRm4wSTs0MVpEOCxPK2swUlFiSFRQcW9WPV9ATlIhb0FoJFpwJnR9ZzI3MldiYFdJW24zMl5HRSQ5PkltfWJbc2p5TXwrQk59clZXLEBTaSRAfWhST2M0Y1tDPEFGcFImeltTenQvXV9z'@;
put 'RSt5fEoudHZyY2hIJFdeS29VSUVBWWF5ZGNjSV5dWyV6KCJJV1RGUkdKMlZvTEZyJk9kQkdJaWk1e3l7aXRrbC8zbm9ZPFU1YzVUN0xUcjUmMXc+V10qYXpJYFdCU10sSX5UJjw3U00pOk82W0RTQjBOISteekJ3TS5nSFhKemE6byZPe246PypLXVN9cG5TfDJob0BabmghWWtTUlpqNSQlV3dw'@;
put 'Ty8lSVJQNX0qJVpgM2h8NysvI2hbKTxnUXEjcUZCfUkrem4zKDdgc15+bUheTXMrUSIsYkF3YVpCNSkrPVJ+eV0lUkdKfkE+Zm1+Lz5wSSF6cztsJVtOWzFkT1M7QlhLYktVcSNIYjooYTVVLCV0ajF2bFtCPU45ZktiakR9UCElOSh7Xl1AQmRaJTNkei9QR1AsdjVbKG4/clhZSVJfXTAqZ25k'@;
put 'MSh9NU5nbz4lTERgUS5MLGZ3UVBPT2tWQjJDcjF7SXYqKyRCIltaS2tOQW1aTWdZYXBaIzc0S1M7IkB6cmZ1SkEiW1BZLzlZUzNdamFMdE0rWCZOYXoye3NMUVE/NHxFPithWi4lQ3sxPF9oWUl+KiJXOGU+O1JUU1RENFJReTluQG08a05iTFR9bT9hL25rW05Lcls+QzJuX1ZZJS83eWFhSj5n'@;
put 'dmtfM1FfO1V8bCxaeDpCWSJQOUM/KH5oTGhWXTB6WS8wMXZJKTI2LnBvSEUmWUJGR1lRZnQxe3d1PiFVUTlZbH52QkZQJDBAVTNJalclWTRYUzZ5QTIzK0FPaUJLISh4SEdFOWlgd2Y7U0suZ3Z1RygjQ252aE8yWnlxQEwidT5IUmtITGdte1MrZz57V2Q5dHZMITxMejcjTGVfXVtMXShPQil+'@;
put 'fG1wJEhYNDttZn1RTlRUUHZaO19iS3pCJkdtUkthTn1eUE1OOWwxUjE5fkpeRT9XVXQ+Wn5uaCUheWZZKUluOHtFZnd9MDl8Lj1ZZTl+eXp7ZyM1JiZ7Tm92JntdJmMhTVQ7PilCb15DXiFUc05UNGZWPF8oO3B1SSxYOiRnQT8uejEsIUBMRGJGRz03Y086fD5TJDh4LGE3TWgua251Li9iIUxW'@;
put 'YHV+My9rOXomMmRIMDxzNSRRcWdmYH5SVTVEP3NLKzB0Yjk9VW46RkhsW2I6RGQvXyxJSCgjcEFIPEhuaGUzXyQyPT9TO1ojJHNfKzZfaSUxZElkUk4/RG81Li5wPFR7fkdWKl1FX3g0WztBfjU7UShXJTU4PSRYflc7QTUqd1lNd2tEU0pyY0tdd0Y5d3opMF8oSCN5SFYpPllsbHVQOmBMQHcm'@;
put 'TUl7MkM/L0I7STBbU3NSQnR8QVBZeCt5Rjt4MF9TZWBGUFVNQj9dOTR7cnlDajVOQyUmeEl2Qz00QyMrLExwPitrKm51ITUmYlJHdX1HKyhhdkssKEBPSH1Xc05jNl8vITQ3WUZyPSNVRm87MDVIPDZ3U1p1cTBoKyp0eyolWCpYZzZfdktNNHkpT0x7bkFNM1NxbyRoZEcvTkU/JFNWMHQsWV1H'@;
put 'fDBnbWA/d11IXj1pVSlBOEJid1EuNXZaS0w2TlMiKU01WysjMTFmfGAuPzxAczZaXTkyMiRtfnYldmJoODQwZ2AyI2dONGd4bVlZVVZIYVJfWjUjbFB6TmJsUHJtO3ZhfGo4djc0IWl3QnQld0JHbF0xNVdAdFVkTFFfbzBSPiY4V3BSSlBVUnZtaCkvWiU4eTB2dy97XUlYOmsxcW5DO0B5aCgv'@;
put 'ezguLDRzIW9xTmdQYSFlQlN6aiY6KWVkSTcjPldLfiNYMUhiPk0uMkZpQTghT0QveC9mcGopOj1fd2UrZlM0LyZuN2VyY3NfNkoiV3MyXTY1WUZxMUZNdTU1Jisrdm49QXlDbHhzYW56fkBiQntmYURZK3hLVTRiXl1UZF8weW1zLmQ8fUh+WU5hLEY7dDByWVBgPWEhaFZXaF5JZEV9W11tfH5b'@;
put 'MTYibXY6dHBFJSV6W24pVClFMDdNS0w1JD1aVXc7VEdjO3NgMmE5ckw2M31ZJVs2bXtDXShEP2VAYCFMZyolcjwxSD00RCo1X3pOcGZjIjJNPVdmTkFSdFJPLyRtOnljMVg4dk1PYXhWeHZ7TnBWSHxYZjEvTDEkenkmaVIrUnA7SnYiPHQ/bmJ0Zl9IVElDI1R1YEtbUS5sYFleWW9BWSY9dCx4'@;
put 'ZSpTT3tqSX5sM2gkTEY1VWRUdT5ZPU5IUGcmXSQ4KGZae1t6Ik01MVBvZyliZ25gKzpgJFdrR1U8dXU1UGNvLj46NDYlXm90cCxgP3t5cmxVRHNEOnFFUj5pI31Pc2B5clE0LlFIb1hPXjwxXTQuL0JnSHVPXml3QSltQXR5THNkdCtldWlQfHl3Q3N7XVpkfmQmelVKdGQpTi81Ki8mem0oYz4q'@;
put 'JDlEMHsrYSpFbCZlUTN9eUhEWHpbbE1sWjBNImxTTF5haj1OIjEmL240a2lyOmA3OUxWZUsiY1lFLFJkZkdtY2ZhQ0NvKF5KXlV8OmZfbHArMTdUbSREWlBAXys5M0NhOkEwZ09ZbyhfYTM9d1FkcHpTbjBiNXxFLHdxSHg7QEB4RS5sYDdYXUVUQ1NFd29TW0c2PmA4T1g9ZWA7PEZfQ2xZTF5k'@;
put 'eEchW05iXjhSbCopOGdxW2xjVC52Pyl4YygzfSkxfnczckpSP0ZbL1Yma2QxM3MhSDJbJXVvQSQiRzRRV0lxUlciI0c8bEgkX0pCImpZdiRzZS9YYSRoTW9xezhYPkkkKEhIbEZXQTNgaVdDTzxsKlJAQ21YR11RZnhRXUhjMzBDV3c6V0RBMCkvT1Q0Yn58YSFNRnVlSTA0L2ltRTkydT1YVHUp'@;
put 'VUZwfmUqSnJzPHt3WTRXNS4+MCo1TH19PGEkdnNrb0g3Ing1fWZEPyg2Kj9mQjkrW1YoPUwjdkIhOXBwWjw9UVBSY3AwZDBgdnMqbD1LRGgsIU14fX0rSUgzdSlnOiF2ZF0hUyN9OStscU1oTytzXzZBXy8jY0lBfVsoTkNYYS4xcEBDRT16KVd3bSxeOHl1SnEhOUlSfXEyWHd0ZUtXNzNlLjQv'@;
put 'LypmL2RVYERlaz1wIVN7UnhtUjU+Okl0V1ZNSjt9O151aEI5T21TXTZ2RGdJbDdbS3B2XUs6IVhCYHMjTH13YUYve1ZzN2JNQSJbe1FPQG0hK2hHb1pAREN8bEpdZX52bntTeHVFY1VPSF1hXTJLJkxVOyh7SkAxI3BvMnwpNS98TzJXaHxQOk9nRT0vX0p3bTdiM0BASGEvKlh9elIuJGo+SSJC'@;
put 'JDxASWAlJUojIzFVPFBDQ2ArRHNzeyMyczJELzRrRjE5ZTpBU3IhRDZkKVo3TUI4ZXdKUEp+anckOzIzPlAiaCF2clZVQ0U3alIvPnddRCRpczdKJUc1TXJlaG5Va216bVVEcV09SW0hLjdEXzRqbl08UkZEVG46bEdgWTJ4QHo8PVliOihVKWEreC9NQVNkcVNyVHFPOEdbP3JjJis/RjFYZC9u'@;
put 'aVE4K09nWilWSGszKj5SWkB6WiRsZGdyYSViUnNNKUs+QkVUY14wczAyNFR5TH1wQmIiejFDMHZrLCVxV1RWPFBlJjp7I201UnlLPiUjaV5BfSg2fTUkKW5lOXEic180L0clLipRV21eMUVtQzJYITc1WUV2fipzInoqaiM3ZCRteUJDNEskOEF+TF57THNuXitYTSg8ZH5BYipPKUVvPSZbaERJ'@;
put 'cDIyJntdZml+aktxdHhjfjk2fWhYUW4yd3V7cjJqRF59WEBUd0dlM05uLjs+JCZSUihpTTd3TmUkQ0V3aW5JekxMUGlYOXJZbG5bNEgkdGVafEV7T0ZMSkNeQ0tUdCxJSEsjPFUwM0xSYTFVTXpANyFoOzFAQEJqJldDPXdWXmROMG1kdkxZaHVUdVkjaEJGRkApYDU7L0RbQDVhfWpMImguSCYk'@;
put 'KWBaS3F5RCE3e1M+aEV3c3B5TSNrSCVuc0k7QVZlMjRPN0pAOnFYYmttdk1gLnQ4clp7WEtAOlcwcSI+VFBJITsuSH5PSTFYeTYlNjhkZW51aDYyZXIlSUl3SSRBd0tNaj1sQ25SP01xMXFRY2tRdH1XQD0xVHtGaX5DdXZUYXVeRFRGVWlRaGV0a0ZDdVE4PU1MRjRqbn4+Vj9LLFJlbStobj5u'@;
put 'SClaNlVLdTYwXiZtLj1UdjA1VmdEX0hLL1AoQi9pSlYvZlpGLC83Kj9YM3BRNjt9MUomPCUjPVthO3BZVkJpaWRNI1t3a05zN3JSeVdZMS59M1guSG9AXj08XUtJQk5GZF5+e1N2ei5ffUR4Knd3RCw2LnBgPCU4Xy9CYUg3LzxKcCFrWTcpMWI/Si8lb1EkKXwoRkc4LGkzZE4odXs6LGhaUXV5'@;
put 'IzQ5LnVbbVo0ei5aby5EcXdpZkU1NUx2S1tYKThEcz9WX1IxSDMjUm8kQXtmJXt4Oit+JFkoQzxhKjEocz9oKjBCUzdgYV8vITc4c2xxaHF3I31RRmBAOCw/R3Yie0FJTC4jPiUyMG9IdFpkRUVLWntmOEY0dUp+YCVuVT1abG40TUtadjFUS1hoanY/SFR4PSZNXXFVfSw7YDs/a3pENW4rJS9r'@;
put 'M2UjYDF6NGE0ZyRNMXkwYkhaXXxkUXB+aCVYbjd2JCtnLFJQdDBISi4mRltMKmBbLkFgR1o6TV5oRF1xTFVvd1A+KStZLCshN042RjZSTUEyLGFXN2JRTDx1YztaUGpPSn1HISMobmo+Kiovfj9uejw5JUdDMXZrOShhIm5hTGpua0lsLysvVTNpOnJMdTRuY2VzdChLQnEkbkh1NEcse0l6cVd2'@;
put 'eGVpPEklQUdCRC5PQWhAMlpzIkd3WDdkOzdNNT05XzVwSHZXeT5TNVJFKmwhM3shKDJnMzpdVXE/bC50dDpmaEpRZ1NFUmVBVXxIQipXK0E0L20xSHVFUlcpNz9BLEg5SlllbFJENi9hR2U2V3FvMCpobysuMWBKJFdyWShjaHVgWkwpQ11JXzhnM1tEU0RwdTNBUExibmxaeUosMXJALmFHSUwj'@;
put 'JWZ6Q2hCTTVTc1UzTW1aM2I0OTU0JndiVnEqNmFFelAwbmdvSzV2QjoxdnY+WTNXI204YHNJY21hVlhNKHZvbkB3KERVU15ZeEUjL0J5Kk55Oj9TfXhzPEpnbyt7eVZLXm91aGkyKEJCRSppem5aZVVWVjIqR3xNdHt3b3xQfk5nOz8xXVl8bDdXe1l0QUQ0OjZ0Q0Z8dUh2dkRlcFQlTHl5MSlK'@;
put 'YURDWTBLeCxjITxFJiZOV25VYTR2XSIvNFFOSE5MIk1KTT1aeFRjeDgvc0tneEgoTVdaJEMhc0IxKj8wQSh5Q2ByYFs5W008fDxvXjo5IVJxJF89TXx5QD52TT1Se1Y5UlJ6IlRNe1hjNS87bCZxejsmck0sYWkqUEAwRDVGdGt5SSlBbUl9OCh8MGVoa2Fra0BsLFF8OXZUdVt6Q214WCpyUSRf'@;
put 'ayNLKDQhejpQJlEmdS5gIToyIUUlU3MwW0R1JmZlTTk1Vkt9QypVWypuRCYmanw+InVXUS9OUUcvTXFJI2Rrb210S0BCZFFrbTJVdyU9aVBvK2QvWD49bChuW092NHtvJTcxNjxBUnxpIV5leGczLzN2Zzd0Nm4sIVNyIns1bkw7OHUqWjQ8Lltrfj98TGQlOj9oI0s/Q142M1h7TE90WXhAZVJo'@;
put 'MCZDX1liSzF9PzM4fnVkUlkvKFM4Kz5NT0laRVVhbGswM31Ccj4vOD5PJF18Pi5dMH51PSZURWw4VVN9e11UZ01TMks5XjgsdSNVMjJHOCpGOVp8WTc7V05tRn02YSVfcElRL09aI1ZjNTNvej85S1Q9P0lQM3V2NTNOSV9fczduS0A8QSpBdnxAL0tAOX4sTyFrPXcpbTpeMzE/UW9OM2olTnch'@;
put 'W1Z4PDs9NjJ0IVsmbS5PeFZ2L1F8eE8pTXlEfWUxRyQyenBhPmsoc2RzfF5RVU95Q21SJHJ0dnNYX29hP2N6MkQ6bX1FPjBBQjZsPXd3Y1ltd3B8M2QkTCIiZFZxJFg7bmRndispdVVpK1J+bixMI21fWG9sTTVueHlEKUh1O1ViYl59IzlUIUdhfCQ4JXVbJEp1RWgiTFp0SmZ+R1BoXUsqVTJj'@;
put 'KGp9KktAVX44Q0o5U0J7QiokY01xcXhydGdBSURnJnFVezpCJXh0Rm1UWz0pb20jazF9e1JNQSJoVzV+P1o7UDBEOCt4aT80TT4+SVsofGpIRjVkMyQoJCY8LG83SFZLaXdyNUpUIjVgJmopKDowcytkOWwyXkVsYkZDVntvTUl0dH17VzFxSS5eajNkNk1mdWhOLyl3Sk5nSExpbWBRZzlpM2Ys'@;
put 'PndsWXBSQm1kLjlvSDlJW3xyIXx7ZFEvWG5FcUlmWi9LXlhdcz9oPGJ8SigpXzk+R1VSTnhPWDlhKFZITjtGelhFV2UxSzZeZWtqaFpMSUZ8P1szTnRJQzRLIVA/TSQ8LldAP2BtT19RcmwzTEo+fSE8MlFIRC8xRGB9M29WX2hdPnFQW0E5SzsyZCg1azRITyo3dEl0K3QqYiZuIyFvOTZ2JCF7'@;
put 'dW5tPHRePmlOKlVwdmVtLjRfek9RckFsO2BrdkVDWyFjZ15kUUpuW10odmpYfVclclMiQGw1aTg7NyJ7PHRiRHorcip8Ij15Ol10SGJHekZIQiQraD5JSUZgVUJxJmB3JW0scipZYHciQDFGeElNa0JSQiJmVXF4emJ3UVkpdXc0KjJeSVhVLHw5MF4iRChFPSRILi94fHddS24xeVc6Q3pRbTx6'@;
put 'T09YSVBuZmp5S1BRUk5dQmxYUEchXUlLSmlVYSo0VFA3Z2JEciZ3VSxBQyZSZHwoZFFDNDkrMzAuKXNaRShUQjwiZ2RlNWc8THYyTUBzMD4ucF5jWkA1bnBwO0dldTRkNiY8SXNmKmM6ZFhHNl1EZTw7PHVAR0tSQ35EKGY3K259NDdjJDNFek8iMHNJKEhgLjgiKT8rdFNZQjNOSz1qLyJwU3xf'@;
put 'THpFbHJAYE9QdzEmW2R1WDtRXVh0flg2UGo4a20yP3pNWypAc0B4YyEoX3ozZU1tbFp4a1R0RW9VaXtnaSVVUmshb09zYzhDI2F2fkhFXyZpeWYlR3pnJVNHcE4+WCxGY1leU2leWkc6Lmp0cTVyPS5EKVR1PihNJjQoO2pnMkFwJnU+SERGZCJmIn5DOHxyRnQuP11Acys7WGMiVXdDXnIqXzBK'@;
put 'YzpZTTJuQkAlNGZ6dDFTXm1KbE83U2dme1YjbThkI3ErZ2prTHFPIyxoWF8md3BhP0YyNFVPUS53cWt2SS9iMmdTbmtnP0NjY0ZzJDooXyE/bC4kL05OYVR0ekg5ZD5zQ1NFIVooXVREKHJRfnJ1P0Q9YT4iRU55UCNqPDIwSzduWktnelBrIXh8TGBIQy9yeWRweiVVSVV3aX06Jn56X2dRW1V6'@;
put 'Z3dXayNRa3UmKWR8e1FLPGU1b0hnWilvSU1LQD5rMG4oU3F9OCNCMGhhWzs4dmheZElsdzRoekszVVdHc0ooeH1WQ0hsWzVzWG9dZl0kdTwyVzt6QV99fSJYXXNLW1EyVjcyYkl2ZEsrPn1+NjN9LEBxOiw3Rkl9IyljbkVBMHw8bkt5Q0VmX0JdTntDdSVQMWZqOkVyei8vXkJiUl0yMngqfG4z'@;
put 'WHhxVmRVfHVbX3kufmRyWC9Dcn5HUyRiIz06OVp3TXFdQjN9byFpMVhOYmk0Lys0bSp6aGdAc3l1LEAycUN0Rls9aFs+T3ZhfEBLRmY+Qjl0ZThNZlo8bVNec2A5fWZaanIuNCM3YzREUUtLbXkjenp1NzAjZFU4Om5YKDIhUEJfZGVgfGQjKG5vMGpmLDFZUlgkWVMmYU0sNCY3OWIoaUVLJDAy'@;
put 'KlVlZE5+clE5TjdSYj46SGtNSklFdyMlQVEraCVFdUphbUthRXhKMSVaQTRBJFBgYE13a2B2Zm15PWEhOU9wPXtibU9rWzIvIllRJS91NVVzcClvYDtodWlbJURMaHlpVU0qek1pcC45MzZxYDp7Oi9jSUtUfnNJRXBlbUNwYiNXP1tGZFIje3ssX15rbT80Om53VzJ1I19vVmheOUtEVm1KUU5q'@;
put 'b0BeQ0xaS0JmLHZ4IlRFSFk6Izx5M0FPbj5MJSxQYCZGVSk+fm1hMnFnTVVoJT16T0k+UCw1ZmJFKG4xQkZOJUNmb3ZqWFNrNHRebjtBVT47UVl+NGEka312WkUlS2xGTU1JWmBEdVJ3UUQuJngjezlbaCNnWGY/OzVJZ11IXyxjMG8oNkUmajF1NUJSZFFoJGxldXw0K15IcEVSXzhMZD8hXnpM'@;
put 'Uzp+Inc3P2B8PkZyRy4sPmBGVX0iMV9uIjYwYUJfJFdlSC5FaVlQXmlOeDc4aXVufGIkQ0codiNtPTVnUSR2a0k8bGFda2VJcDxCRH1VOWtoOSk0fS9rYFFSSD11PGo5YVhDJF9xaEo6K2JwLkt7QFAzO05hcUE6PDtYaV83eStFV3pGXXNhKHJqZURSN0p5K31vYT1zQG9xUH5GdWkxVUh5KnJz'@;
put 'WXpTbVdCMj5veHg/VnE0XW10RjEpT2oxL2xdOT19VVQsPUQ4JDBsNkFTSnFFb0t5STJhVFspXX0hUXBoZC9jN1ZPVn1VI2BUQG1RPWVUU2JMKHtwJVF+VWdIejVdTlF2Uy5YZX5+MGs3NXM7N31ISC9zSzZBdWIza19Qe047OGxLe2UpfTJkMysmKjJtNUwpNTpxMloiInwxJmthNy5AREtGZDx2'@;
put 'Vk9mWDVzcDlOb1BdTk51dW05Zykjaz5JTFFbfkRGby9zLj5VMzguWCsoV1tHUmRyXnxEbXh7ZTx9JmZKQXZmdXdoSDdIITphO1ozemIjdj07SS5aRnF9JmYyWm9zY1s9UytkNGdbIWcuUmAsaEN2emhrSHMkTG1MK1oxdl0jRVNkNWEqNywxcHc7VX1CPEM9TUBsTztibih5VzhmOU8hOGpeZFUo'@;
put 'XTtEN2dfZTp8dEBMQiZRezJhN2k7ZVt4bU8pNl4icmYrNXA+ez5vPV9PSVJAeE9eTWNqdD13XTdYRSNAS3h2OmBtQHdtaiJKOGNNRCVbM2Vma1NiT0J0Y1guLj1xSC56bnt0ZExwZVRyVzVkMVBKZDc6NlcrWWojaSh3SGs7LzMpT2cwe2cyaDJdUWJaaj01JSg6VCNwLEhBS0h8WSlLPCNyfUtS'@;
put 'bXk8OW05R1BXPWFqaHR4Tj5zbXg2Y2UkfnFOdERRR2xPdm1UQSRaOj9SUzlBViYlO3ZfbX5pXVZoNnxOS0VVRnpGQWt8OCZCNm80Zi9QaF5NRVR0dUtMan5NQ3JvJHUmZWIjeFFrel0qb0x7VUB5T0VreSp6ZWt2YSwuPjM2eSVEQmxzb35LdDRWTUA9eW5hLjVOUEMqKCQ3ej9NJSRrYVFSPFAw'@;
put 'SUtNZXFAIl5NW2RuO1RXX3BBKHAuZ3txOlo5YmojdXhSI3JIU3EwREI8XUpCI2A/eURPdVNRNDxnMVpfKigsfShZUzVxTG59Pm8kREUwWjpHV2ddKnZhTEJ7O1VfdUwydDw7fGs5N2d4VUkuKyNJQ2BlaCtAUDIldmRFJElgRUZxV2FPTDdMeSxgM1J0NHZTQl1hZ0A7bzZDPmB1UD1oNE58dWtf'@;
put 'RXBJR2VmWTplc3x7cDE7akc8ZGlaIV1TcG4wRFR1ZnlMX30ocGkzZix2WEwicyMxYTd1cTgqai9LZzk2TmpaWShUUytjbUZSLzQmO3IjViRTPD53ckJydU04KDZtKWdTNF4mZ2Fda35ZYCN0UUh5dCE8Lz9pRz41UUVRbnBUazhwMG5tMnx8W29wTUF2MVJqPHxXK2NWZWpUT3YyfkZoIzIqfk06'@;
put 'IUYuSD03TWsmM1JVYyV+IVR+YEJwbE90fCY8UkpERlVUQEwiQFVtWjliO0RmfmxIYX0xSUBZO3ZaZHtIZFc6LC5FVHs4eUtpZ2RNcigsMGFuXy9iLC5IbXlrOWZ4eiIudj4+aXdsRyNmfVtdaHxPL0xIPmZVNyFwclAldmE6b2E1Rnowa0pVL2RRL1olUyp4aFRGO2JbVlFdN3dKSFtSZ3I3L3Ft'@;
put 'MGlKUm9iaDEmL18+cz8yaU4ubipTIVcwIzA6dT9bdVMsfGVXPHUzP11zWHR+Zl1NUTN6RVtBNCQ6UDFzTDN6PDx+Sz0vbktzQVklNTR9Wk85Z1t2cWdjLm1HZEt8STk/PUVQPGV1REY2ZmhiaFdIeiJKfWJPQVZXJEZaO35YX3g9KHA7c1dZOFFZXyxKc2c5eEltcXMhNkNUSmwqYmdEfU1pPjRM'@;
put 'WTxWQTcoVSRvJmopYGlhS1c2bX5YezteT31iJkBKWHt4PGJ7PWNWQTRzQyg4QikmL3hLI1hIPFNqWSFbYXk+Z0l5ZkIsblVjLmFRVUNgYiM5Pm1yQ2EkMlc2bE1efndTbGBBeXEiUz5Lazs7UHM0OCpzODM7K21IdTwjPilaT1VpM3IuNDo1YGxkJShgX31mKWF+UFRHYTM9cnl5ODVaPyMkYF5q'@;
put 'QFAuRUZQQXA4RDRAYk5sb0VocGZ9KCE0ZXFKOSF6bzc7Oz0ybTAlWXMjNzw6an5zQGYvVGp3KTc3QmhrPjohdTEySTR3XjhpWVtvNksydSQrbEwvaWcqdmZvfGw+PnZtRVomYGY5K3F5WCw0fXpLLj4lKTVWQndYSldEPXt0eEkmRkF4TmFMZmxQPzQ1UWBeN0w1ckp9R098JE1WZ3IvTkYuRC45'@;
put 'MUZeIXQiSipSY2t1Kj9YV2B0b2JVPFVVJG03JXgiMzJILHI1eDc2Pm4memJqJkx+TGFsMGNkXzp3JnYxKW1XUHA9SnJSV2I2RWU2fS4zbk0oQ0tVUmVIalNvY1VQcXtfP116NCFIRDg0NWZbYGpPTyQ0aStROUgueWlSZEMzVjJsRmZtRWkrbEQvdWxbT3Q4KSU9My8sdnVHZk9MLCkkN0Y0Pm42'@;
put 'fkx8eyg3L114X3sxPVpYKGtMT0poZlU2LGNMPyJpK3gzb1h4SiNkTkJnN0subks5XWVkKzJTS3lLXUpXMzM8cSZDdCpAcjZsPjJJQnh5TCYqaTNUYXEueU03aiJZa3pXeSNwYkpPQlJVQGdvYXpdUX14XWo/XShYSDBOUCFBLn0icFp0TTQ3fVo3eDB7Q2hvaXssTSksJH5MI0h2U0A3N2wqQ3RY'@;
put 'JTsjUm9gR15wV2xVVHNfKVk7Q1B0JXN8Om88JTdee3VaJF1pan1MO3QpKmM0M0dhJm99OVhASDhBW1pEVytFakd7NzVLZFleZipHT3wqJD9+RzwrUF8+cHxfKSpPak5iKDZrKzAiQFVkX2xXTmIrWVkpV3VYP0QsKnlFMV5VPylyal9kSTV0Inl9TUZZZV5sSyhvQX1pYXZYOTdgbUsuNHUmcUUz'@;
put 'YH0oJUN9ank6VjxsPHFGUlFbU2wsbC9GWjNNbWl7ZD1we3hAUj1qIXAvckd7OVosd2pkeT1jPk4vJEdsVV05WEB0UGFMJUFOLCxKSyFCfktrZ3NqOX51JSZ6fDhRJWlOPXt0OkdYZHlbW2IldHp1aUE7bTheX3dOSllxdjQ0Ul9QT2s8fjByJHJSekB7OkBVSG91NDZzRUJHe3pTSjgrWWF3cW5C'@;
put 'LiE8PSE/YTkrSXtOOkZgO2h+NyU4a21bLmw1NjxZMndbSCZRY3poKExaWjdjRjchRF19VUMlUlI1bDRlP3wqaW9NPzVwI3Vye24/S1JZYz1fZTlHc3hoVDpibmhkNlo+NDY6VSRzfElxMCNWXng9bnwxPUBMe05bPyVkfGRNX2lobEV+O1Z2WUFnKSRJSWJueUM1OUNJL3wxL1NeJmQydFdsXThr'@;
put 'cm81QT83ZiRdUShyYl5+UWpyfVlDKSo/S0Q3LGMoNW1xJFozIXRSdHFWX2s5fUZpLkMrdS50bVVxIW8penEvJEAsSlpqPzttOzJfRT1GMGx1YEl4ZlIvSjQpLyZ0fnp8ZHI6a0VeWUNzKzZWTF1DOU08cnMzXiQjSmplU1ssfEx9RTlbTDx4eTh1P1Bge3hAV1hvVn56QjNeb31OXkQuNllgSXF1'@;
put 'MjYxU3kvQ2Z3ekRTei95OGxGRXguMmpWIVBDZHFsWltebWBkSzcqSkVPJiIsLmpRMH1OITYuTjpgQTIpcC8rPW5sZ0Y+Xl5iUzFIQ1dUOm1nb25DUV9HKSNmP2BpUzMzJn58Vlo5V1RKXn5kJTVGUyMjK1smX0F1enJ6fX0oSnp3fDptLi5lTTx2JSZ6e0ojIVZbIjc2MUM/O11FMSNNJllYM3Yz'@;
put 'KyhsbCFUIzRPRCR+KXtBc15jIVJTQXRbSWNzW0RFQXRFO0tyWW5HJFRRYlF9aGhVfDhdQ15RV3x1eGg1Qyt2XTYhOn5+RyE/clcxXkBJVSlbRUV+TGFLTGNCSHZEMG9LMnA1VXApLnI5e1AhYG1QRDJNeXMvQXtaKVo2Tkk6Kj9UfE46c2d+XVR6Qkg6IVZKKXdfWiIkNm8pOVl5QypSYWdCRiwj'@;
put 'IzZiaWFgSWVxPSFxJiYvdklQPjhZVVFKIVlHPn5xT2RdLm9BQVRSUHE4Q19zYWBuWlgvWE96ezUpN3R7MWEsMGIwTi4yUVVFbjwkXkhWfD5DSX04KVlkSXZpQE9EPl85SSNidkhFbFQ9fDRUOHhZfjlecDtgdDM/WUVsfj8jdnRnbHF4fSlXTSowamBWVSh3QEB9fix0bj9kP0lyb3FYWUdmb3kq'@;
put 'fXdjcnt2fTBlMStQUnsqeE1ye14mUW5eRC9eMy4pdUJbXiJdSXhab0QzNj1SST1AMWs/WCZIdCtfdU9RXnRLKVNgW0QkdlRbc1Q/dEszaUghd1tGTnNlV2Q9NWBgNG91RktsMGRGa11gR01YI2AkbnY6OyZrfkh3YXQpfmFteDhyJC9eP3BWcHdqLmVpJj1lNmhscmx7SzMvRmxSLGB8QF45PGRs'@;
put 'en42eEh6OjQpPlhGJjxRRDkxTkdOUlAlLG4rRDpjMlV7JDVHQDhaeDgzenY7dDhRbjJsK0pGVU8wbEsoR0FdVXhINUhRN2FMRCt5SVooOVRTej9uJmlmby5uMDo+Om03fmNBbEcjRH1nTWhCKH1CMTdJTDF2JXpjQX48JnAqTllNdihLdC5KXTZ7JCI6M3RHe2Ruc18+bVdGbUg4dDU3eUJ+Ll9U'@;
put 'VE8ybWgvMF1ta0x9OURBemZgeGksPi88QDQ9VD82TGs2N2FiK1I0ZGZPV1J2UEtrNT5lblFzd19LLjd2TVV1TixOfG1FW3clJW99Kz5YJDteRWFOTkZ6VFFqUnA8JCxiSUMsN21gXXt7cDhQKlF0fGgkaFM/O2hOLFZyeCRiU3E4ejd0KzB6RjwpWV9URE5+JkRtZ1NpI3F9WWoje3UzQ2RzbjRo'@;
put 'cEdrRG9fZmpFWHl9aEtYUjNOQVttSW1iSHtpXi50JHY+YnIhcnx0cUUpYDdWPGxpKjlgazNgeHIxe1NqMENJIS9AQEIwamo5d3BReHgoYk1aVWJpVWd0VFk9T2RwSlo1ciNdQilwNHpZQylCZ2hPQndpPjxeN1hTV3NKPks9JF9JeCNlemgzOih7Z34wWGBrMzo8MmsoZEFHVXJJMEhUSyE/RSRg'@;
put 'cD15T0Y5TDIzMmdBe20oJlVicHJkPX14OU5mMmZHfEl0UExkWzw5QHx9ejAwP3BAYC88QHtqSGd3Mjg5OWxVTG4kIiNyTj0lPy5nNjtJIUY3RWA4fmgjJkk9dUZXeXYqKHBNZyx8ND9IankpRHh8XzJUeig2fSJjYGxKc3k0LyFTOjojY28/PHpWUEpuRWxfPCleL3pCVjVPQ0NUK3hBQksseFtv'@;
put 'TDsuLC50NHFjOiQqUX5MJlJEKnBXe1BkXl1vQUJtSGREQ1R2XW0pXWxje0ExWiZUNmpKQmRPOTc1Uj9AQzVgL1UvXilvR0tVREUqNktlb2V4azZ5YmF2N1h4UjNVW3MpRSxeWjJQNyk5byxsVGk9cS9MVnFhXlNDU2lXRkAmWTFeQEhgIVElJXsjXSEmM1o2YEk1PlE8WDk6JF5JLGI7YVs2bG5M'@;
put 'KmE0UjRTL04pRCpKMUBIPChKL3khR29NN0Z3Lj9RKXpYaWM1Kk1qfGFFU302elN2IlVLZWVBb0JHMEVXaVNATVhWS2poRltPaDdCSV9qTDNVUD9lRFQ6WXpkdD0ucD4pUlJsJE8sJCxGX2M1W35nRFllcWBsJVtxKy92K0FALiJGZjUjc3pxNj5PVEN5Jkt2Rn1OK3J+Mi4hIVp8Q010ZmxAMUVz'@;
put 'fXh9dT5yK1JGMip4IzJrSSwpWlNPQlFHZX1kNVtUVntbVTZQSk4rOSNPT0oxKS4jTyllVnRVcXtpMHBHWSkxdmlvIUN3R2xQSGxSJDxUeTFMPk9wP3YyKWxpRSNpe1JzdFhYLjhPbE10TS53V2Z2Qm9MfiZkdDwsZmtjPDxOblQoO2V1RXgxcXBgU291fDw4OztsbjRkfSgjI0ZwQithcmlEdF44'@;
put 'fXwlPkwrRkk1OHlyZkYkN099L3RVRVFnNndEbUBEaEV6UjVOR2l2SE9rYWUhe3dDOFVWcUBFKTpJTzhebmNmV0hkKndGenZlSHpDVF1WQHczQkJOMTNvMU9KN250LmhAWlorZlJrd0c2MCg2dVp8Y0IiIX1CdE94I0U3P0x7Xml+X3lsNT1JYDVCKVoxNlBecnBrOSxFSXJePmZUUVpZdn1AND5D'@;
put 'X2tfNiVQPCVaSHxDdmk8L0cje21VVnhnMVt7d2E4aXwvUWt5a1l4fVsuWU5hLj54PCxEXmlnNmFCfDVXdSxucjFpJEtecGs/NCNUclR+WGQhfElGRl0mKlFoZnNLdl8uOV9QPTxLYiJwKHxLZSg8Wm41cHlXUVohKlJtOWxDTjdTUXowLmROXXtgd2VYSmhpUUNEJUh8V0U+S3VXVEdpYzlKcF9L'@;
put 'MWxLZGE9RVo/RFUsfkglZF14MzZmQjNkWyMpND95O3BmfCQ+Zy9bYXdWWV9eKC8+ZSRmP0s/NE5qRk5pYmdvSHtEKEc8WVNAN1FtLmg4VXM4aGVDY3Vbc2AyWi4zdz13ckQ8I0hgbkBCP2M4V3E8Uj5aJW9kcX1abCprXmJVQnJ3d0xaZEU4V0x2e3lGLGM3TzhCd2B8QXc/ZVk3N2NSXnEmezAj'@;
put 'aTtSZF1gWElKZS8wcHM7NHVNV0M8Kz5adCEoKUhEOHhRZTR8NHs6bFd2KyZlQSJEOmxXL0pHUXR6OkdoY1V9NkI9TXY7P25mM3JdPm0xRTlabiFYTX5MWUd9fDolMCVHPTUkQWx0ciZoNnRQX1p8ciRZUz9IcUBreSVNOmJ7Vz5SQzFaTEA1YUZGR09qcDd8bGF0SEVbRyVOTSg7eGdrbTdncnFD'@;
put 'WzhjKz5bRmU6VHxdI2w+VXM3IztrSFc6bWs/O0MqQjdOXUUlXyFKa0RJT1oodXtUWHRPJndXcW1kalJ7IlBGTCNbVHwyUDtCY3EyX19kMEYvZ3IzRmF9Kj9pU1N1TUV1Y2FBcyVNR0g+YW5kNWhdRVdJSn18NjtUSUZOX1ZfWEl2SHpnSHozZSxQeFBgdjlTKmY7UFd1eG5zKXwpPnhVP1hoezFt'@;
put 'fW18Nlo6eSFQciYsRlMjMjhkbDZFMXhoalt8PkcjTjxSR11KUkJ+YSs2RXoqZ1J0SWxASzMraj1rQzU3SVRFZWFsQG9BO3Nad3IwdGckI0BJOkc7OmZWJCwlKGVMJSNUcz1uXkglcDxVdEw2OlJqPUpPRztQZzt8SDlsVVBUJixLbGlEUmoxIU5Qalo/dEFlfTNoW2c4blhEOVpBfj5SbWc0eHde'@;
put 'YEp4ZFpgVytDakN+PzVxTHx2Z2daUVY3Iz5SaF0pd0dIX1thRlpSbz5tTV0qdGY8dj97QHp7YVVdaWMqVSxiUDE7VkoyME4rMV9mI2VtVik6fmMpYm98MG1EaytxRUIkcDYkJHVNPnpnUHBANXM9cClMV3lzKFVAZWw/c2RrZ0VVKWpuYVEmYG5nTzJSP3o7KSIhTiJ1M0MjYWQ+WXAzcWk4SXNl'@;
put 'akt7LEpvbE4haF5sPCh1QTYlPn5mWF1fTntCZmk5SnRxTzc7MzZLTipBZTtBRlFBOlYwU2RbTG51IiVGWzxud2FqOCZwPCh5Qk9oOU1xREA2LnAlQm5IZ1hyYHhkclJkWiRXS2c9cEB0MzU+PCkvdUpBdFJIP1pOJExjVSNrKm5rTnVXMHJrMUNXPnRRfnBIXmw/TVZKUyJdTUMqaSU8P2Q2U0BR'@;
put 'Nm0qXT5POXtRciV7WTVYWVIpTC5lLkZCOi5CWyUwc0M3ZFNVOlN2VGpfPH5QPzJBPilrTXllWW1XUGoieihYMiEuPENRX0FjNWpLQyRbUzx5b3VyLHdUbntRNyg7SFV0fXkvfSNyS29iQVhhVntPNCVgY3IuWlNpdyxlb2wwMFNaTzF4RnEse2c2VWVyUkpSdzVQOjdfZFdaSFEiJnJMaHshYkV8'@;
put 'ZT59KzR0IWBYcXA4PE1KSCpNM0gyODlBMUcwIW5fa2YoamtFUCtFYksjZThmRkZ3fXMmUChKSzZgfDxDVTs6WVpFNlNbfEQpd2UhP3BoXT9raHExUmlVfDhUL2U0c2JAfml+P2s8WERIcSEmSyZmJEBuUFBQczN9fGlNUStTdExfYkcmZ1ssJVRJOndZTHI+bT4sZFNvVls5P3huNDN2MDFuRTpq'@;
put 'M3FPeEU3JTpNWHB8I281NyFrfWE3bE9KMzs2RDthentDJiZYe01TY1ojVDhzKkREOTgmLyxEWWhnbH5LJThlRmc/fmhPelF+ZUUwcT46QW8lNHZjQE5xITl6MEd2XiRMfFo7aXt9WnxDKENrV1RYLGEjS0ZuKlkwYihmYylLfkgycVFIS3UlRGM5a0RPYSVzVnJEJTcxJWhRXmZWNFhZdDNoaW0x'@;
put 'VCYycUM0KyVkSiQoalFHcFZXdnRLQz5YbEZHPFJPR19Ac0sjQU1YPzB0a1VQL0t6Ozs8X2tSMUE4TGNOd14hZFtGNXR0elN2aEM4S2xJWl1tKSZVLnZlS0FAMEZ0dGRzIk9eJWokcUxwdikzTSUze1REVnMpMjkmRD9UcXImd2dbMjV+I2w2MFpRRC5HQW9ReFcyRzEpOiV1NmwseXFoKXNpOUZI'@;
put 'TjM5fnw6cGUuVnA3eXBjXUNAUnhzTXZRL2BqdzNbWV09VWMjYEE1KS87IjReRyM1PU45MXtMN1QrR0tfRz1WZmF+aTFLNDZsblMibi5vIUcoUCxUUnUiR2xaKj1OLEtYayJiLjE+b3VOJHw5THo4NiU9cD8lKSpodCp2PzJXeVdyaC5HS3ZRYj4+KmJ8cXxePWVvOCUsTkJKa0l8aCRGTlAoRHRT'@;
put 'PD5xcFp9I009RlpjbCNuOVlmNH4/Y2xiaUttZ0AhTC9xW3t5MnU5fEdeU1pHbz1KYFIvKnZ2OEpYc29WPlo+b18zQng6ZUdTNzh+TzVBcVJ2cXheJnNfUTBgJGwvTzIqa2lQNjsiLGdfTWEzQCpSITshTD18cjlIOyZ6ciswamNrSTReeiJQX3h0KWNxQkZQKSNmVyhPVUovXWZzT2tNPzJPO21K'@;
put 'JFdrWGNyZ2pHaDt0TmFLO2xSTCt6Rj8pJSZuQy5tSF5mQ1IuWTNMYUF2TWV6QHpMYGJzfWZqRnA9Q0h5anl1cDV2X3QrfTgiYHR8d3k5dDZCY0pKcUs8KWl3XkJ6R2syNW9bRXdafShGNENXMCE9X1JOL1Fwbz1oY3dEWXc6OTFHO1pzJGBjTzFmOGNnIVtfMkc9W05KTCQpV0EuN3h4Jl4vQCxe'@;
put 'OSklNENSZUgqVj8wWy41UUkmPFM4IWB3VFdzQ3ssNFZZenJkS2lhMVNvflcxO3l8dnsyZHNWeH1tVTV9ajw4MkRhZldlVEB6aFN8I3xIaGA/IyMrWDNlWEUwQHtXaT1xYHtPYmRYPHQoSSsrVlFHa0FwbGZkcl8hSjsjK3RPdUU0QFghYF1HMjB4ckYhZEZwWz5wTWNATUU0X1QkVmdjVkhIV1V9'@;
put 'PiR5Zm5EX1leMzRwTDsiInpqTHV8I0ZPU1FJTCtWQmcvNCp4SCloZmJzcXFuOXhQYVs3QnFpS01PZiJ7KWEjYWk4IjIxS3k0ZF9TWkorX3xQKylNKn5AJmtiVHRVKyVvODw2cztfZj5VViJlcnU+dHZrZT14dzRhOj50dT5KTU5CLDRoMHQsXz08SHc4NWVgPSt4Kj5oe0QmM2Y7JXplWUgye3ZI'@;
put 'LzAxRkd8KVRKaX5gOTxXQiY1T3Yrez5WK3dtajxXbHArdylDSXBgfX1RWShIQCg3MVVsP1lSQSomJiowLmFZeX5wNEsudE9TdEQkWStzY19RXlRJOUx8PHcscEZTQUR8ZTUkSWYrbGJ3M0BzPlo0N2JjKHhGPkZoTX0pbX4yVSZgL318dEApWDU7LmpvNHJaZjU+e2s7YWRkQ1s5bypLaDh1YC54'@;
put 'NmQ3WDRZdVhpVSVoLyVJSW40PHQrSy9FK34xeEtmZERldmMwdjNeRV48ezhIeDI6bDxoKEpDO2R7TElrfiVraHM6P2t5RDcqeEBIV2hBalEhYHBTZz97cj1AVztKTjxFN3BbeGxuQy5Gb0AsKXAxXygubTVQTkVEI0hPd1IuQ0s9RVt6YG5ALzZtIlpWbERJajZuVHlGOCR0dnJ5Vko3a1c3MXtO'@;
put 'ekRgLnlwR0ZAfGRVfDBBbkx+P192SDp8SDtHYTlCd3B4cHlbPj1PL31pWCNONzlfQEFuV11FVDJdPH1CMU5JU0NadSVhMzYoZ2pxd0hiSlMpeWhDYVtodSssfTlfVi9eU3h9d24wM3d0Vl5uNWJ7ez9WVVNbYlQkfS83eCppYW9xeDt9K3VOYVlddHJrUl8sKW84O3o1czw4d1hRRDNANDVSWWZI'@;
put 'ZWpjWWhNa0VnY0NXZFk3MnM9VkQjVyk1S0x4OWxseTd1bjh7UCtec2BwdXY/V2QrTl5RKDpkQTdKPCRTUUhkZlFGYDZYdiVhVGVBTkA/WHY+enAiLkJNL2t8KFlwLGpEP1hzYk1kUUhkV0AyTTNYa0AxPkI7NEA5bTYke0Y+KzcrVytwUC4rQE9sdnMlYTZ0cWtZIWhEPjRzajJwXkBvYSwlVXVB'@;
put 'OUZuOndARUFJR0ovPyRLXmxBVkdMTFJIcDtedit5Mj4oJj5uXlc8QCZ3R2tXKE1xdVc+fVM6ZER7bHhfIm5pYDwvIk1kTz0ubDZaaHJVclJaMklifGUuKnouc29IIXRkRjorLnoyOjBCYmNIXUheWXdiRS5lKjB4ZV1DXj9QPGpJM0x2PXM0PiVgKHJCU30yIlRUJUpreV1xfilYTDppOSx4S0t0'@;
put 'JlFGaFFWdFU3KFR8dig5YFVzQm9yR0VwN29bWForQXhQcGpjNjU0KF9KNT5hbjlSb21WQ1coVzBuU3UqUDFeTU1ufXRWa14uTWdjNV82N21Wc2RTMjxAV3V0Xn5pJkB1UT1RR01ILixYaH5gUXt2I2FYNnFJMC5eV3prOGYjNy99WXFAWVo3czIqa3c/eTl5Tl5WPSkwQ1ByQ1RRW3NgR3B2KGF2'@;
put 'PE1tdHEuRFQ+OSZjb3VuM1V9cUhYYXtQZGdAZFcjSTVMIXtqdThfLDEodGh4OFRoN2hpMC5qSkdzLCF5ZjZfVlFbLFY+ZiR6bl8pPn4wXiZzWE5aS253OzhhdGYqbWJ4VldzWnt8KmhGVTMwYFlIQmFWeyxIInJpP29Ca2RmPyR8QUdFNkJtMCEsUyZHbEVERmxkeTohSWJxZj9AXiZ0JVoqXTo1'@;
put 'PlpidWJWWDlxX0d1eiEmcSF0YGJSdE5SKDA+IWdxQiZOSVUueWUlXWFzQ345K0o+Kl48bCo3PEN4d188VnRxOVY3SGV0RCQyYncrRWxKWUdHJGczZiQ0ZktbZ3thUmY2eSs2cjheKHx6YXExNTUueHQvbTw5VStNdShVWmJVcjFEan4+T09TLyZCYmtmNz5BSSpHM0VgeV0qOm5rVzxsUFJUe3NA'@;
put 'VyElIn09U2whR3h7STZrc0JMd3lffjJDRSN0d2xyKkRNTHUyVGhRIV1UMW1aX3BxTUNZUGBGT0VbeSl1STF8d3RlKygvUWtzOkpfaltxWVphMnVKVzM5dzdofml0eFlUQ01HTlBkWHNzQkRkQzh3L1kkLENwQnI/RG5OUUpCfHsuWWhbPlN9MXRBUT5uQmBEUT5dPWs8ZmtLQ2NWcixnZjJxP0Fh'@;
put 'cHBBW2Q3b0tsTE1nbUBJPnZlczJhSWkkNjFqWVBkYjFeP2c2MUt6REBTbWpuOkBocEtoTyRfNWMwTlFlOEUkWCRkbThySF5vbDBKSj9SVU1+Tn11QzdCR1pSIytkaHpWJE9sYUI+XiN6MnprSEdkQ0gyNkJzWXR0Tmc7dDFnI35iNEhVU0ZTNl4wXm4qVm8jIWQpKW0lZGc+UTlISS5IdkIpV3ha'@;
put 'KGcoQ1NxeHU9e1MzNFgjPSFxQ3p0WCU3MTZjYExZbT9xV199S0k+JS9RO1ttMlU/bnQsM20rUDhlfmpsTzJLbEhYfihYZGlkRyptJjgyLGs2ejgqSnVqRylwTEZeeWA9bl9tQ3xrMmpwfixNLiY6PndyKygpdll9REc9MyV9RF96enNaeC5bNE01OE41VXBjMWtSNGV5Rz89ZHMremNpbnUmfU47'@;
put 'R1c6QVhERUorQnQ5WF89SDBZb1o7cDhgcCNaTUFrOEY8fSVRQCh3NShIWmc6OnUmVjs5PkEhYEh3VFkzMTV8ITAjSyZSMH4re1RsP2hfYiNfQnFycyJwa0FUVGJ4dFJDX3FXaHppMCg0WVNNR2pHcnUyOm1WT3RyRT9+bHZqN0kqT0cuQ0JXPmhhVUp9WDtJa0k/cVZSfTojN242alFzSWlXZVI7'@;
put 'WGhNPU5zbEN7W01HQCs5XUhxQ350bHd+e2IsK2JjKl9IdVNHeEBMXjFLNnQvOWZIVWVGOUkmX0xMenJrUVdQPl8idHx5RV15Z0ZpfWN4QHtsImpBT1pRVWZVJS9xQyF9Oz9wdH5dQiE6Ok8hKDNAWV1mI0lxel8zLD06NkNvVUQ+IzdjUDIye3w6OXI5NHJqKUNmX1FgOl4jdEk6ez91MXc7d1lQ'@;
put 'I3AhKjNKPUNtXmtGPFNveGZCZ2J8IVopPWB5JmY5Yn1DUXJMcVFYT2pUYDN8eSxHWXJKLFBnfXhicUdJR0h8KTpkMHFrWmAjd2IrVHFFREZFfnxoRURhNngjT2p5ZylVYiE7VmByX200d3ZFdy9dakZReGVhSmpsbHkyUkB4Yj9Yaj87a1UzajFxRVI4JkNBYWZBTE1ufnU1MkREQURfYm1pYmor'@;
put 'V1J4Q1VySV9tMy5yPS5nNXljI3VUX1J5KHxhPF9gOXsmJkkpfkl5LzlfOy42cmFhO0sqRmtRRTZFI2BNOWQ1KXl1NCpoVV49ZF5sQzVaa21IZTVFVUJ7OXMheyFzZHlifnFCcisxeTQvKFp4cSFrJlhpJj9+WCtpQWdpfWlxTDYrT3suezs/R2cqdXdgX0hAMEc6VHliMURpQnFaOXlVSkh0fF4s'@;
put 'YmcySm1RJU9BVFVQdGdfbl1ZU0sqdnVhQG9TQkA/NzRsXlU3RmF8MSJ7Ojo4YHhUO2dAOHxGWkY4KT5uTFtCQnRFYipUZ2l3bF9GNy9gfXhnLEg4PTM2SlJleSNbKzhAOll9d21ASFViO3I/KFNMM04mcFoiSih0UGY5Z0xNXyF8Xmw+LmFkSkEkbUlMWGBCUHdMSFIvRWVBcHooT0FoS1t4TVlx'@;
put 'ZFM9YGJ+RT53cTE8SDptPVgveWNxLj5wfGJudGd2XUo7aUZrY15Fa2wzNG5wbFhua24wfEs8d0plbTYse1U6UDgwfmZne2ZaITFpXkNmPk1kKjsiKXtMeEQoYSkkRXxdWk89d0V5O1RkU2B2bmxjPjFsZmptTVo0fmp5Kzc4JiVGfDBVdktCQUBXZ3lgJkdIWmtqVGwkIU4hcmlyb0x0Rm9yWFp0'@;
put 'KV16ZEJNUTpCVypiKllVJEBDUlZ8VmsmRCxIYE86KFMjZEkvWk5vfFZEc18iby57VjEzblRjdWVYP0BNJTwsRiJkQzlGUndAUSVQWiwwYi9mbWIscmo/K2BwVCljPEdmO19HNn4/cEhtUnZwRmciZFtBbU1PVDBTciJXeHhPdkRfW3ElMzA+T25qZ29oY0Beb3soTSNXTVhXZntFYTdBWmlCeERk'@;
put 'QiVURnJFNCljNXVFKyIxfEAjY19ZcDQwcDw6ODRuV0hyb0pQQX5uSGo9Sz1KRC9UPThrZWguWUdddSZhdE5pWH1lZnlLRyF3RjJ2O055JF1aJnU1bV1HalIlVWpSS2R2T1cqRCJeaHRnZ0tgYWcoSDxuWm5AYzJCc3M7P1c7enpsKTpvQk5YcCxQcF4sKV04RnR5RyMqbE88b0JxWyIod1duKSgx'@;
put 'aXUvMlA2fit0ZSVIc0EmITQwOGpEaHpVRHtMZHtGU3MqWTVCOz5OZ2M+TiMoYm4zMFlKM3x6KTo8JSxYfFZOLHNVfFVxfTVoQFBUVSwjYD1TTi9IJnM/ZXZUcDVxd3RPTVJdPWtyIzosV1oyKUNFJGk3ZjMzRDQseyIvZE86YjM3ajdfWWJ4Qm1qOEtWTzFjXyQkanB3dE8pIixpOzI1SyMsQEdB'@;
put 'ZFo/VyxwZl5Ibjp9ZFFjMmdjTGtFP3hiW00mSiEzJWFwS2EkTDoremY0UkhNVG8qZFpETF8xSH1YdENAIVp0Z2AmPEA/fk1EMmc1I1BzLEhyMy5kVWtYM3VePUIxNjl9YisiamlZRDYuLmJGOEd2Jn0mdS5mNmhkdXEjdndfeWpyYiVlPSRWMTZdNUc9SmZqTWhleytOSXR3c2p8VkBPRlFnVVR2'@;
put 'NVpvMCpaZ2RAXk9lT019djYsQl97d09adzgsemAmcGVdKzY1SlkzYStpTzRDRyZ+NDNnSVZ8JXVzaVRRREBAcSI5KEhra0hHZTAjazolOS4oPXR3SF1DTWJpPC9GPW9pJVB0WTMyU0owL11NUitaRWQ/TU9IeHBRSmpUakg+ZGxwWSx2LnwjLzI+ZlQ9JXJpRm0kMnV8XUl5V1VsKSNjaTs4OEs+'@;
put 'MGUpdiVTKXVhdFF7SC94OzR7IXRJM0ltQigqTjhmUSo2LG19bkVVeXx1fmh1NEZxdWxSQCYxKz8zeXkpPiZyTS95clRfLCZnSWxdSEBRIiZee2klMXNGWT5MYygufXl0dXJmXlpne3pxSztsc3F9TWlFTHByUVdrPklgSF9AdXJXWXsufXI+InN7cyNJLEhyRTFQR19bdkMwV0kkPE80KVE0REpe'@;
put 'eU5jLDcjTFlLPyoyb1FMJjR6NyVMSVJ+eVRRaXw9P15kczg8PEp8cDg4SV9SWmw2Lk9YeVF1QVBKaUdReksqKmBsfS5NfSJnJVBOXXBKLmJvMG0kUzVmQHNKY0cjWiVaelJZOk0yLDpjWTkrY2k6SyhGPT9oeDxMW3Z8IT80Q09iR3ElJSs0Q1F2PXMlellpIzxuJEsqYTU1bUo1dS5vOnRUOmR2'@;
put 'bGlRdURZeHUual46TSJxcTdwOVNOcXZ0WnI3WzBUIS50SVNgTGYjOFFzS2E3b3A1TUtkcFlCKEFsJlArJEphflRYMyJvfWk3MSQpYGN2XU1oRXoiVUxaRFo9amtHaytXWjZZIWkwdE8rZjxrXjR0MTNkYWU8ODM9JFtWZl49JmIjJXkrMFteNCRCdTBKaHZRY05bYmkzLF5yYCV2cntiTSo9Wmdj'@;
put 'VmZ8ME5DfjssV0lAUCtBYmpMNDxNODsqQjRONkVgcWpweHRiWyEsam9Fe0kwLkdVUzg9OVc8ZmkyZ2BRMEpLNk1dMnQ/VmRSd0tNV2NRL2RlJFhTLmlxZDp0WmspOktkQ05UJiteSU9qX3M2cUJFPyxWWGNEa2IkKkZJSDxhdkpPeDExUXM+ckkwNVlwOlVlMXtMaTNYOXgkfEhUVlNRcHtUSHRn'@;
put 'd0NZJGgyUikzJjJ2JV53QF5wQk1xWnlRUWpGa3N9PGl5c1Yya0xqRmohVjBRPUNPVCUuZk1+ZnUubjNTbH1UVjZVPG1tcD5zZmdrIlZtISNxQyEyJXssOi5uUk1haWtzZkVHKlI4KDpIV0Y+dz5uTD5PJm5fOU51S0ZWJkY9Tj1OQjpYeklGTXE1NC53Qk9wc1JENlBPRTkvdEBrZn1nMFV3XiZf'@;
put 'KC5Ba0IjeUd7ZGoycF0vRlZYMzYrRnx8ayNpITVWPXpVXiMjfXA+X2ArTEVxfWxyTzhxPzo0a2crPWV+PE88VTQ1LDR0b2A1MGo5cUk8Q2B+V3J6alVpYGtJPSsuRllzPVBtN31aVWx5bH5qMm9OYU9SRWMlalgzL2B9ZiRXLC5eP0JCV1NhTVkld3ppT110PEYyZEMrPFtyYnNLRj5PekIuXXEu'@;
put 'cWY/JDQ1Ri9hR21ma088VW1iJGElSGM3fD5jRTB+Z1UpLzljTVphWVtNLChAe34pLFglb29pOVciOEt9QjEzVE9YKT49T2kuX1FCP1gqalh2K2FwP3s/fHY0Q0JZYHMrL0gmVlZ2RFJxciVnLjAsJVA2Kz9HU3NyVjFsP21iQ0RxKG9VMjlKPihEdk1CLnJ9YDU4V2lWIiwlbGV6SEx8JXZAblJX'@;
put 'Pj9pQlgpfkY7TE1wPiZbW2xiZ0RHZzFtM018enIrXyxlYyMqJElMaUw7b09ua0NEJD9JIns0Zy9nZ0k0eEYhdHgiIWh1cEJfK1ZDbF9xMCNTQU1dUnxwMmZNIXlKdF1nPH0qR2spWFE8RWYuU1owJX1wNVdmaSxPQFoheHthWDBEZF5WY0d1PlJXMXIpUjlOWEVxdnkwVVB6KmMoJipkeXtfME10'@;
put 'YkBfZTorWHU5aWJOJTpCV1ZKSFtSXWE8Uk9OWmBiYUJWaXlELCpTJkQoZWJTYHJySy5Zb346aldNfHJWbXFCLC5MaTlvXU07SSpQMEZURHsjbDlaPD9PcjIjbGJsezM/dH1uYHZifkdCMS59ZHdkdDNFfHYyP2QpbWtAX0dLZ2k/MG1iJCUpUHp1T3F1Xm5pMDpWXUx+S11DOmIyWlFVOjBxTFhW'@;
put 'N2BMQ2J5OEZlTFZjI0ZtNEddUWs8cG4oUlRueXFSSkx1QngyTGZGMW8sUnpBYT4wbyxAZ1VxXytGSEMqYHpzdXQlV3Z+TTExNkJjbV49bUN5RV5WVVhGeEhXZmxAb1debSU6eU9TdEMrNSUqfFQ5Wi9GM1IrfDkhInZuZixkL0ZiUzM2bGYrWDRzdUt9bmtZfCQ7XjR3QyZxVzsmfnRdOFFJe3pC'@;
put 'ZXI/Wj96W2F4T3w6R3VeN1spIUlISStxdlF2XyRJZSshXVk5dE0yNTRPfDFjI0ozWCk2YzA9S2xwXWYieCRUK3VhVChqMypYOllJe3VKPzlEZ2VPLEY0bCFfJlhVJDRNIWw9dWM+Y3J2X1ZyVG5nMn1Wdi5qMCxaJldtWmBLU3c8NjMybisqXyRhelZCMX1sVEwsSDZVVWpYU2EzMSZUTkZsNipJ'@;
put 'VEpjPm9FJF4pWUl8Uz8lKFo8S3FgP3hrZW9SNEtlPlB9bjcjWjF0fCp9aihCQH19TXI6PS9VJChuJmROPj5xc1lbaDZFOmk3VCU3UVRzUCs1OSV8IzpiaFdJIX0uNV03MEkoI3xVYSg6S3p1I0BwM0pqNXkiRVc+MWdKam4uY0ZJVFtbNk4sPUA/dGQ8U0g3aU0iSm9EOj92WmNZI0JyKzxAMzdU'@;
put 'JW1deWJgOjFRTno7TDhgfS83YTptPT8+PDEsQ0N4dlBdaTFEMTtZdyxEVWxPYTF2WWsjWypUUFVQYEAxN1YlXU96YiFmQyFHa1tib2A8KldTK0Q3a2Q5NG1AQCJfaDdMWGxvMDQmcVdWOGsyQ1tQVjxsL0g7U1lMXjZsKHZUNnRmSXFXM3h+Qm1tSDtaSVBgN1F1WGRRTiZbeWRyMUZxX2pRUXZH'@;
put 'P2gvSHJaejIzR3twZTA0b2ZOKHRbNFVVaFYzLDEjfHIweDlOZkRScGNHdT49dUZgTnhwP3J0OURLJCJXJj1AKDl0fVNVWCYmSllndU9Tby9GV3pqQks2PXJNNEk+ci9SQ1VxZFBNRjA0b10weWl1b0syTz9iUDZ8fmIpdW9acDQ8azZCSHdFKnkpW287MG1SKylVMH0+PUhleElLND9xS3ImdDkl'@;
put 'QEV+PDNuZjoibF5AQE5OdTlhJWxWPkJpJVkyRUhjTmw9cU14Zk8+VjUjb15QRmdXKiM1dCNSVV4/XixfRSVrOmZPNU98R1NsWUBePW59UUBbPCRrayxfOF8hcEY7PVBUWkU0ZGFjUSlDR3dOeCtWPzs+PiEqbz4xMmo8VCliTCYwKElSaXxSMmRtZ01FOEQ+MTE3ek86U09mZTZIRlk7QWMhfH02'@;
put 'YGVvbkpJSjtEZFNKejhbNFBrM2lTPVpfRnZrNFRiSyVZI3Q3M14/MEZOdWZze3VGLEVfZ1NhOEc8KEMlaFs5WWhjfjksPXd+cklXQ3BtVj1lKGE/bWdDMFFvViJlRDM0bW1lNHVUTn1wX050bT10T18oSCZdLEA0flkmdTV0bl81QSlDeTV5eDc4IyxkQiQ4Ny8rbG4lIlcmPXRlRTU1bTtSZzhe'@;
put 'Q3NZTSlsVEwsSVBGO0hkaWs9NlchdkQlSUB3T2d0REl2eSIkZnhTYzRqR3hvR2N0VWVTUiVbW1hoMERyc049Ym9MQHhnXX1LWy5hRnh4ZyMqVEFpV1t1amElVm9Qbzd8LklOUklwNHNydT5UY3hTL0tVLlVWZGNtTX4uTkUiTjQ8JU02TVtITm47Pj5jOUdyRll6RXNfdil6QHlYejloTUdWRVh6'@;
put 'QW9aYDBZSTAoVkN7Oz5Lb2U0KV1xY1p6V3t5ZEheSSpBKjxPQSR2YUtFRXNuK1pAeyxBcjpgQzV+TklJfnIsaXQxPGArL2VVNiY5O1dJXShtJkhGPzZsdSsvZVV3PEAwTzFJR35yP0g/Yi5VeFptQiwpQkQhWyQrb1RQc2U8YCk3eXFWQUluJW56UmtDYyFLPGFaSH1uajMyZnlZfmhSSVh5OWFC'@;
put 'OkMlcDZQV2c3b0lpaypZcSVAcHkiX04qQltLaiZrV2tIanxUaDhXUGh4WDZueSpdcHdIMGN9VUc0Tzo4QHtvdWZaSH5VQlg1ODpjW19CI216cGNYbmRyQXN8KFV+U0QzaklPcVhJJCVdLk9BMzE1RH1aIVhGRG1MKHxAQVYpLGlTfEROdkJPa0tHPCVWW0R8X2Fjaj1JMjdXW3JBaUVnODRATCNL'@;
put 'fCYsNUV2N2JGVW5oVng1dj05UCU1KDRsaXBVZyJlZS8wekZDPTk7PjYoWXR7ditsXTlVJS90fHgvdC83aEJAVz1GPHl4Tj96eXVydCxxZEdHUW54c01tMnx3YSFOaFFjcktbRCRmNUIhQTB3PEFydGB2el9IS0NCJjk1Wk8+fGEzemEmW2YuIzZHXk5PVyFzQXYzMzR9PExMRVNWfGVvZWNWdGNA'@;
put 'Xm1fXWYuIzBAUiw9QWNvWXQ+anJyMCh+I3w7MUczTEg5TmlzSmVNJVtKdn54dzhlWEgxTTxgbWFEe0dCPU8wJStVVU0/MTBTREopfGFBJCVGaCgjeGw0c2kjdV92YUN2WEtNfWF0Qjw+Z1V6TlBjTjNJRUxDMGA8PiIoUTBCSChJQTMxNTlTfk1DZEgvUjBIeGtTdSoqalpsN0VORkJWbDQkKFVs'@;
put 'K3VHPk9CaUJZQ0BFNEBEWGV0LCkrdW8uSHUhQTVHUWNrdGNLP0tNcWFdKVtyL00hSTc3KEplYXNnLGtXZGE3V0tCa11xYyJiQ3R9eWVxamEkKUVtQFlTI0NkUyN1SmE3M1p8U2A/NU9OLGZKfl9FZjRlNWVsKXNRRnNJe31fcUJOV0lLRVd8KCZxNlBPan5sTiJ2LGxQdlMsd3FpWlRqaVRsby4y'@;
put 'Ny8pV3l3e1R4fGZ5K0w6SzkpWFRxRSopXVMhLjsoLGlmbX1sYFExQnpbTEcienlufCUjVmtsXS49VlF2d25RezRTOz5lVzEuMillNjtBQ25dYWlTWz5ZV0o9S0FTJjBWN1NSK3I9cig7WzdZP3hCekpbS3UzOChpNm0+cjYlMn5rOktOKStLR0JzMS5kVzVNUlMlfjFFdmpdKlNIZkt9elk7ITxN'@;
put 'U2tKYFpkLDA0SF8veCpxYVVXaG09RnNEUit4V2JBKSR9VjZdLlB4fiNNKUo8JDcpUXFOanN4SklJJT1bQVd+dSpIalNqNCJ7ISVhR0hUWDxIaTJJM2ciJTpvaFlkbyRQPGN6UTZaenIzdFY1b3Bva2UxTzp9d3lXcFElNls3ZmkpPzZTXTckZWY+OVlsejYsPGtZPEMoOEJZW1IrdDskYXxQeGs2'@;
put 'OVB2dDd4aEFWTSNwIUJ6fiQ5KndZX0lBMnxfO3hOV2w8TjpibUk4ci98ViJwIl91TDpkODxefD8oN3tbV1MkRCx1JFduOyUrbF8/WG5qJF42ZWsmM2dAY2lzbSo2YWxPQDksdiRSJHVKcSNTPVpkR2NnSStqTDxjS3BZfFZYNW5QeF59P1FuOStwM0Y5TSxtTU5fO31DR1kxVDIjLkZHJjIrYGkq'@;
put 'TGNWbEA8Vkw+NiV3eWZOeVg6eGBnMmZGNDI4cUt0aDFnU0tQUTEiNTskNC96enxyJU5TIyklfFFucCsvWylHaCR2ci9gcVJGMFN4X2ZpenJTbjdrbGkhcnhzJlFCJDtUI2xFUGFhOilzK3BiczhJYXdER2JQMUdsQTdBRSx3cFo/I0lZVDJwWllbSFEkPWRYR1VrbHMscGFSVXpEKVkrZk06Ii4+'@;
put 'ZiJrfDh4fCl3SlA8Oj4kfGhyLzIicFJuYXooaFEpcmlZSlNnZ3xxNjtkOGRbaHhHIVBHZDx3KldTb2o2U0F8fHtvbHt0WFt4eWlFMWslSyhBKkFpSEdPIkp1RXdYNHhOR3I/RnRgd2VESEx8T3wzaXdjPzpsOFc5ISQ8diohUyllK3N+LmtxamledHFkUlUxaVgxKHA5aH5feSNFLjx2SV5gJUtX'@;
put 'UG89Vm9pWFJ0Pi9hMSo0Q3hlK3NndihHUH1SJXk3XkBje3BRcVI6UzhQSE1JfDJHUVUlYWBOJjpUOkUvT2ZwN2kob1UuXVg7OGM8cE9SNTE3LG1gL19EPWR3TDM8fGZETiR2OH4ufGhOczhgK3B3Q1ZOaW9KM3RfKGlLZlVOK2l+ISJlWnA1bDxpMlB4ODgjSTVRbkRMVGIsLDRiaWVeRUZGaHFG'@;
put 'VnFjUSNHYElgWVE9aCRLXmFOcWN7dGxkM0w2QjsyKywzZmwuTjJvRH0zTXJddEp2djxMM1NoUGxKO1Quc1g7WDt9b1g4fmV1UEAuc1VVVSp0LEN6YkNEcjFmTWJgVVAmJEtyclQmJFU9XTx6Kk1TOCw8Ymtibm5tVDxnOCRZPCRCV3lKPFtmTyRyeiJnQkxVLlBQKFspT35ZSyVUX2xQYm5XcD8r'@;
put 'Pm5jayF4KHR9blcvflE9Ymw1LnJDPkZYbD5AWChyV3k4MnR5aFFvYGMmKiFtcSEiRXY4InEueyZ5NEgyJUFrSC4sO0JzblchfXxCUjgjMCYsQFpgJmVXRj85UHk4RTZtOyRefEhyLnFTbkdPW0NfJmk9R3hsN28lMlVTN2wjezoueF0se3VsKUxKW1dmeV0qY3QwbSpzVHJpV3NsTDd5bXRxUS85'@;
put 'UCw8djokbW80WWY2ay86Ni5lQkdfTVlPVFk4a3kkK2FyT154KjdKNGtpO0MlZmF1akVhMHhDV1tpem55PUQvI19yanpaIyxWLHJHRVJmLE1qUmdlYix8PDBpaEFPU2Z6RUI3QWUiXl82L2ZqMnEsTEtGW3xnQ0A5fFdVSC5UVG1IP08rZHg3YT5teCEra3xMdmlodEUsaWc9eEhPRjxLNVRTY299'@;
put 'PDImKnVZREE0IV9ofnEwVVhVeHE2WC9DfFtIT1hMOVdBe097Mm9IYFp2UWhaTEM0K1JrRyVHVS5xZjNbO3l2fD1hTzZiW0loMTM0P19ub2lKU29TSHs5Q21nKmpRPzZOVTZYO3l7fVk3bmVmTk5gKnEsNyJDY2MmSzRINyZZTCw3JCY1SkklPixFZ1s+KTNsbkA1NXNmXjBYcVNgWXJPdEFbQCkk'@;
put 'JCViT3NwYWE/elpmX0h+ZGVOV0NiQkhhc3F9QDZ8SE1Vck5qc1teZjVGYEB3VFU5MyQzfG5+VGFgZXVSNl4qMHJOK2VpflRea3lTKHJsfEt0RVF4K1glYHBSKWFgOkdkX08qOyZQdVYyKGZraEBicW5UY3c6WmBmc3ZVcUs2cWspUVNgNGprJShaUXdOMCFNX2s9SU9+KygoenR1WVIxNz4uOUxk'@;
put 'QGkwdnkpJihhbWlMW0NJVzc7Ti9zVz1pVyZpPUVIPj1XbHV3QXVJZVdzREVOPklPeik4Uz17UWpZfi5iV35yU0hiUGNCbHwoPVozTSx4bmlXX1dsVVolfkBLN3trPj1pTWJCMyhrWVt8Nlh1aFVhdUV6cVdhTnh5c0Y1Mk1sS3sqKENtTi46KHtGaHc2c00uQWs2PWxHTkwuelF1fHIrOz5XWnk5'@;
put 'WmNRTkxmR2xQN000TSFwO1NoQyImMEpyfTRAND5mSkw3ZXFqNEN8Myw8bztdP2N6MSVON0hicFkyTmQrNXQjezFGKkVVbXxOU0EzblFvRTdfS2xAa0pxfFZdVXdxW1ZvcEVFIl1TRkpWOCt6NWYkJnR3S24+RUdgQi80cmddW3BmITojMjlndSUsLzpxMVdTREVRJUMsam92MyxLbFMhVVQsVT00'@;
put 'PTgiSy53QWk0V092djlkSjp7PTRVWG5HfFhSUVE/KDl4RW16SFFieGNNazg5a2FRfGgkZiRRcTwidzNnSUpdb3VgbXtsaDlNaT5DcS8lUVMiK30sbCZpUml1SyhRU2hwdWBuREMxZlp0TVp4P1dybiFCcj96e3tROSE/VU92VXVLUTdfYzRTbigmaC5aI3xCdGhhR2w1fHJibypjIWUzMUB7LCZm'@;
put 'UlFDYV0mXj5fTlFBUGAodzVGdzt6bDY4MGVCVD92Qz1uLHdSWEB2JXRmPXZ2SXpxTClfcmRxS3hMSDZqaiZKQSZgeVR3aWk6N3BCfGRMXmZWdXAhV25QUyNsXTZiXU56IiU5JkZ+SyxnUTd1NUJSPWl2RUUpSjg7VVQsYUgqPUhhI3pNan1DMVZsb3VncHwhY2lVfDFzRkpRXSFza2ticG9FSSM1'@;
put 'LH4yYTs3MV47Ji9MXXxhRjkwYURfY3Z7P09SfnRjfXI5aTxYOlM7M00uLjJWM0teK1goNTAqZWVoYVlZUylSOHRLe2RxeStELnsxQnRCYjRzUT5iW115R1BdfDF3QSk7XX1gQyZdaih2QmB3KTJbYml7NDNmISN0eipET01bLDwwbXtmaGhNQ0lnOElUM0BsIyUkIVUlPV58OWVZKyEpSU5wc2p5'@;
put 'WEdPOl5+cjs2SDk6RVErOmI7JGExeUt6X0g2MjdwamhiIU5yU1ZXRGUxP0IvWG9BUG10ZiVPI3dPKDpzM3k3dTA1W0NyZmVbTUZyNVFET3ZrXzdMTno6eSVyNkp7Z2NyUjpTRj9qYjI9SWIyPV03OGBkMXlVeDhXcHwmJjJLZ3E7SDolIURYdXV7ZDt9Xn0xNUhnRC8kUUhMWVZhXnVdNDxMUHoz'@;
put 'RCFoZSVrMGNIQF1VWXl7XmUuMFhqOC9INERoO1VnP3IsfClyckVYbzo/KXJaS1JdMEpacFNKdlFSMm99bjF7KilsOyhaI3lgYWJXWDphJXo1VmltOnMwInBSW14jPHBoPnhBMyhfanl8UVNMb3pGXkohd2kwI0hmZUlONylVYStrWkFaTClZWDdfWF83Q1MuSypTLyZQZHI6Sz4oL0Z8MSJiUHc7'@;
put 'TDQud344WCksdXUrUjJaRylJNko1bVNRYmpJV3VlSV0/SDYxeH1yQVZeYU1hITIsQ3ZqYFltVFopUT06a3JiRjJTVzlTMnh+azx5M2J1R1gwRGQlenBdWTFdL2szRk0jNTlLO2w3dWldfmJGOG56RHpaUiVJaSMzWExTOEd+MGMvP1ByM05PLjpDJV8mSEFsYlJ2UVlwUjpTWm1MO0Bld3E4PER2'@;
put 'dkA/RHosL3JkYT93dT17SUEzQkZ2YkFgJVo4aU5GfV99Tz9XS0AjIVVpWnR7IVlQelIiJSUxPVVqNV4xanovOiFfaShMPTAlWVBabXc9RXRyKjJEfjs/aD1Ub2p4TSF1QXlOL0szZ11XclArZ1kiJlkkbmBUPGkmdHImdXU+L2RNaW5kIzBzIjIhYEZ1KnlHVDopLGEwNEUhKlspaCp0QDpjaVB7'@;
put 'WHpUW3QkeHp1WjA6KnMjVHJKcDpgLDBRVEtZUWNoJnpUPUJJTW1JJikyTnxIaj00cmxdQSFDPD5GfE0qLlV2SkhMTTpTYDB0bkQvNjA0Qzs4UzguO1dNOWZfVSYhWUdJTX0rT29mNT59diUoWWF0K2V3cUpoQUwrOTMsSWdUJmh4U3M9LnFfUyljVn16bl5lQW1XRFhyZ099UUk+QEFRIXJSYTNm'@;
put 'cFAvIzQkQThpb11me2k1bCZnbEIuaW1SYmBOdFJjJCVqPXt6PEQrPE0mQzpCP209RUomfDs+JFFydllZWVkkTHElMU9fKDZuSj42blRRfFlfMXImOHxUQiokRUhrb203XUJhJE8pVCpCayVba2FIT1osJCJjQl9DKUZYL1FWeUZvZUJOQndefnwxTSpiVF12cH07JVt1fDheb0opZXw2azpsQCZv'@;
put 'fSllM1I8eUF7dStVc29GZTEmIWk5ZDVPVTIwU3dwfV0wNE8qZzk2Uz0sJCFqVXMvXT8lRyZrXmk4b3dUXjUvc1h5cms0W1FUYi8jR1QycFJlaCo8SXtvN3M9YHohc2ddPHUlbSM9eVNkTChlenR6Z3ZfMkBePTVyPDJXNzEja1RGaypCaVE/Kl9GM2Usaj1BclkpYEN+ZVtORUk+eyUwSnZAalVz'@;
put 'T3ouIysjMUNebkNuU1c0LyNUYFUucH08IzU7Kn1PWUgoPXA6LChibSp7Jl5SaEVWcUtxS1A2NURkOjJ0cHN4TkFhaThCfGpRcFQhUkZwdks1RCopJkJNVjN3NmNaMCE+T0hoMTVmdWt4b345SE4zVHlDcilZfDdINDBxSipGbzFFUUZIQWgxXzl2USo4MjExJF4yZmtRN3txQjZpRyZrS0xANlZk'@;
put 'VF55KV5dclB3cj0lQ0QmX1E1QH0mTE1vSElQe3ByT2deRGtvMz0/PzhNYWpyTUBCZUdNbT89OE1hTThMTj4vaktKZVZ3TCtOXmFeIzhMTjhQOWtPOzAiJXQ3LF9DOmVnLGQsPGdeNiw5OUg7d21RO1gjRWh2U2I+PSVJaHAweEtZYGkpKSl9NHg6bVQsdylnaTwkcHk2Y0BxfGBCalpSNmM3JWAm'@;
put 'PG1aQjhgQX47OCV8PC9XKGxYflcmXjgqOGFUUWpfYiI3QHJGJE41JUlQPT9uW3NVdGh0IkREOHFGdCpmaGZnRHImdmpjTHQiN2Yxen5bP25baTdQWXkkdTcqJGd5IXlAelliM2BwP3pDSjhGeypBW0FqLnpTflp0Z1k8UklCKD0jKlh7Q14xflpCfF1adDBjY0xDOEBsY11VLGo4aWsuK01oVElF'@;
put 'L0xwMEhfRChOflRFWHwkb1JnSUYpfCRCSyw5cVFKWEdELHkkYms9YlBfZGhxJk4uQGJTfWd9fEsmQWR0PWd9ayR0Q1g/YWFfInRuKkV3dXF3TD80ZTBlL15nRTBAb2kjVkVfUmU6L1FFKl5nRTUqYkcreVl2bWA8KTFRWVZuYG9NKSM8eDg8cXl5LFU9Mzc9UH5BdFhicW5mZjRTcHteQXFKdWVj'@;
put 'Nll4SXg+bU5eeXQxcFMoTylqSTYuKFIqOjZCPnBRekV9cFgpaCMyc05fbyVfbDskTHVTaVg3ZTtMRWJrSXgvOEI+YTE8Nk5pZVhnY1k3WTl4aX4vImEoXWt8fW9ILjxkbjJWayohJiUvK00+a0BJX1NjIyVxVDxvc3VQeWpQazE3dC9YNVJgQ2Irfm1AV0l2Yj90blM9dyliVzhXNDR0TFo8fGts'@;
put 'WjpQR2Ajem9DMUI3b1czcUgodT5yWmJ8cnh3aCg+eHFzNyUifigsZUJYeE9kZy81OCJeXmlpVDdaRHpOYDFvJXRbL0tnVDlscT4/OCFHXy8yWjcrLEE3a0gwKkkyWUpRTiVXcXRJXlpwdyl8XW5wRDxeckM+byxMWHsuVyljZi5ARj4lPSwrU1puSCZzfUteOFNvUVgscG96QlpDUXpDJSlxaDxd'@;
put 'cDQzODdbaVkxUWt4c0I9SEQ+Z2lvZX1wUFI8T2AjfHFyLF5uYkdKeCtWK0tnMTEycmtDXmpZV2AoTHkxe0Y/LypsXkBLan1dS3xVIXBpNzhMXXRSMSpjP2J+YTBta3AmeUNUc0BkXWVSPGcrZjRRSDtgbSVPSlFhTE1fRSQpXlZIT08oMmYvYH5BaD5iL3xuKmJua3hLT2JNeCY5dWIrUjV7IXhA'@;
put 'UFZda3ZKbnIzRGQyKWMhbzxPfj0lZX1CMjkpSmxYbWRjPjYrSkZOX2AvWVJ8PU0hfC8sUUxMZEdqR2gsS3M/JUwvT006ZWhLT31DPkkyZ15XcCVrKjBtMy9Od0BLMzBELDRNVW9RPW1jXyZLbT1SP25ESUY2X1RESDgqVF0qMl8hNm8uYnBvLGpRc2Zedj1CX0l5bzk1bnRJNXdvejNXRC5tSnss'@;
put 'Q19uZjhoSVZUWyZxPCo3OlR6QTo+Yns0dE1PWFUpfXxCJkV9KnMuaj18Ny9EQEApaF9VJXlVdlFANihiN3okZzVyeXpxeX0+bmw2NSNmaWZSbUF7Uy55cG16IltUeVc9JTMlWm1iKU5vOjoqTmt5NVVsUWw2K2AuaUVvcEZaKU57e0A4PzdRVWRNPX4jXkw8bnBsbW5KYyNsKkMjI3smWlljPypr'@;
put 'dVgrP2NZT0woQU93TVQmQWthKiRnN0hULHJZd1todEBMVzshKHt5VF9ZRCh3YWZCd3pyMCYlSWdlfWFuYHM3K0cwU30mRSM7cShxX1ZwK1QrJVswaGpxI1tAQDAwOG8hIXlnVSN6eCxCV3lpTSwiPXFeTEJpOy9STk4vVT9mfn53THkmMyQze0t7d0Y/Zn5LcD9MNElKS3FJUDoiOGxrO0kqPUdg'@;
put 'KGcyTyY2PS49UlojNURuTWp9WClRVjA5I2skNSomW0M4YHEqUEwmRGN4dS5WMUtLZm1rYFA8MS9TUl1VZDBzVGxSPyw6WSt1NUNKLiV6Li9JOlteRm56N2pURlJFdG1HP0RudnZMKHJBa2QoPUVFWDIrJGRkeEJPP2suQDEyPkleJTtJfCVSbzhmajhlfSYhS0dKPTlrXnNZd1l6dEtnNVQoP0xf'@;
put 'JjZKa1FLKSJSQ218XmR6X25Oayl3USV2Q3BlfUNJRWRCKixTVU8jTnU9a1NvVXtgYWMzT2l2MWsoMW8mRkIlbSpKNEFlMD80M2Y/RzxPIkdSOEgyTUE8YENCYGEwNz9mOU03aUBNPGEiPUAhV05AZCRFb30mNUtDfHxRd0Z5S3QrRW90RG0wJkopcGZMMjcpeDgxRnsoTWs3TUNsTi4peG82I2Vh'@;
put 'enZJW2tkUCpkdDIyeT9IXzBDREksNTxmUHU0SywpLlltaSwxOHxkRU8zdm95PzFxe3J2ZE4sVTw6LDhrRm1RbjZeeF09N2BQSiZzIjNUInpMKGsxajFmfUcmKUxyM3ZlYU9JTDBMMExGOmNUMklBbmJnZ1Uvak4zNDF8RFk7NC5vOT9CQiRbXmskREVOblp7e25JYGwsYCwwZmVJKHReNFNsO04l'@;
put 'VyhdTE83dnZ+WGNvSzE/cFdWNGYuN0IyOU9YOyZET2EqZCpYJmIyUU8qV2AhXWsmNHBwejhWZUssP21TR1UjK3B0SXw7IVM8Ok1VOVAhRU8kTX1scXNmP25FJTRMaXpGNFtlOFFzS1M3bXZZI2hXK3RUQ0lEdTAiVCkkejFIZilfUF1iXSxkT3tVSFNOfjZbQypyJllLMHd2OiFsPSYxW0hKM11A'@;
put 'fippYCwoWGZBfVs8TX0vbkA8V0RaY0w6NiZsRjwsNnsjcjVrfXtkYkhOQ2olUCxrYlF6JD4hUzZyWHN6RGQuQ1RiOkU4Ti9pTV17MWcpYjV8dXppTTRiWDxLdHNlelJ3MU1wdmt3LlQ7PEZIY1JjSktQZmshUEAxZF5mPjN4fV5BNmZtNDJCUVduJjhwLEBQPE4uW1dkIiwvIVVmP2I+UjpkOUx3'@;
put 'PlNKNWE0LFl3LGRpY1YqfG8rZTpTSFdaZ3M1VGFpYFo+VV1vZmx0JS91czFQdyMxSHJ9XWt7Q01aa1dCWEJWcipNP053KnRWdUNxcy5lO3tbVjcqQ2hzOzR+XiZqO11keT1qU2YhX1MwKjdeZDIlX1k9NUFqPHEhLDAlP097LnpCeFAvX0lAQX1hdzBKWWMqVlIhKXdGY29YRnAmbDlVXkM/KFEl'@;
put 'IU1DQ2hWdkZKSS5JWFc4VV4hI3MhRUk+V3g/JkpZKzFgJn5hSUhuRk8wKztmcnJiV19Qe3dhbiQ9cEJOQTYlMiNeaCovclp1ZH5oPVRhbisyU3tJSE1+VGdqfDc6MjxgYFlbMVFPcUkpYjJHd244eHQ2LFZeVzJxVjxZJiI7Y0I1Q0Nje1JIbD9SRlFqJj1JSE1QPz8wWSN2e3VrQ15bL2xvaygi'@;
put 'Ok14dUJKUlAxTjZrSldWan5yNmhYPnBzNGx+NktpfD9eVlAhemtPZSM0O1ZKeENXa1VmfmB9a2VSSXNgcDxNTyV+ZG9NK3UwcHxbSmZoUU99ME10OzBKTmpRUF42WEVpVywxYjFELyF9WVlxJiZnalYjX0V4cjU1RTVDZUk4LEw6YTxpaGA7aWhTRztDMypdcFZKQGBJY19jcU8oZDg0cEdQX3t7'@;
put 'cEU+cittTGJuYWhwZ1NNVyJGdXR4OTtEUj4lOFo5MVhYeVAjO1g2YDY3SztQWkozNTpuWXQ/My9vd2dHQjs4U2ohQj5YeTE3P2NLZGd0TSt7N3paSEBZWTEwQDRhUSJKZWdvY11weitLPiVHZzU/aXQ5KTZQbH1VM0l2SXU5KTZVKyorL3ZZKk1ialFMLFUqQz51S3tqfSlZLnovZ3NaWnJrMUs7'@;
put 'SyMmRTVnUVNlOUFqTnN9YnY3JG49OFJ+PyxjOHszSytuIzo1UV10bSF0MikxWFdPcTpTYF89Pi9melRBRFd5TmxeQnA6VV1IWD1wU2kzaUc8czRwUSx3ZUIpTTQsSGQ+cj01KjtCWS4hNiFPVENxc2pDKm1gQmAwTWJZJV8lIm0/XiN5VVlkeTdKe3h7M0tWS3M7YDhkRFs8a11sOTBnfTBRJjhG'@;
put 'eGA2NTpnWksoMkBpflRdL0k/cG1yYDVkIXRCWmlJSmVkfUsqcV5+XjZeWGVUWjNNQlZEbio9P0M1Q0xqYkd1S19MdUt9Lkp6RV80fXdYeFlPNSlRNncrY2gpbjpmYT86eWljQFF1bjd+MElwIjhaPkFHc3M5bCRqYmcvWkJdejdvTDE1MitaOVNmPXooR1JmeGpgR2czKTRJY04+ZGEzR0RXbCZ8'@;
put 'VWp8RiNJRzVZaXdkMys0IXdbRFtiUTMxZjY8cnpYV3FRNmlaP3p5JV4sak9zUCsvTm13eG1HcGpbNCNnb2pbSUN2cF5LNzYwKkU3VithfXBPe1B8OSF9dmRINkZfd30/LHpBbiFnREU6S2tlL0E4YXw1M2tULnZ9WiE9Pjw9LEtkKz9bSC9fI2VSPj9wZlZwakpqPXBxSzNNdWg4NzQjfjoyZzNC'@;
put 'UjdoJis6U117cDFoIiV9RmA5cV9YUWc9bV5YXjZie3pXN1hKU2Ngfi8qPCw4cihqSlVWfG0vKjtNbEUufG45Lz0pMSMlKGc6Y1VhNFBEaj4xWz13dkZRJGhwbVVZPWc1I2x4cllWc1VzSklUQ1U1KDhvW2FBWlNveHpCK00sLGYsJCZ6RTdzSFhCRSYjSm5rcWJzX28jey9BX0dnUSQzTi5hOlt5'@;
put 'clRfWUw4Q2t3cStGVj5hTmE/Zm5QSE91Wl98Lm9CeVpJQ2MqPVpzdCVQRWFAakpYfiJeOD0uXXMuX0BBa3VvZGpdPlMofnUybzRUalhkeGt4aFhtVEtqOC4zeSR7SUBhWzx2JUkwU0NrLyV5a0JtSjJLY3RpcXk2KnJJbGFjMUllXngiSiE9eUNxdUJLKWtCZFU6UEdlaTlmdEpqeiUxYGFPdE5M'@;
put 'XXRrPz5AOUIkRiwvQ2A/WEYrTTl5YXVYXV5Wfit8K0dOL05qP1VeIzJbbUhiX25bOVkpPnB6PyFMcGNCMUE7cn5IMzVrPlQjMSluazM7MHJgbFArbW1LZk1GZ0NxayskPT1EdlhARjBzNT9FLCwse0hPPXshWCxtTEQlfGprQDwkRzJjOlg/fjNibUZrRXEsSjd+UU1YdkJbfGRLfTdreWo5b0dh'@;
put 'YHBoaHhgSGpsR0tXWlQmdzFsPXVOUX5PWzFyRGBqaClKMTE6RmBRKyxBazxuK0d5S3ouckxgRUUkLn1YdChMTCZDeGN6fHFbKz0zSE81QyQ/WnY/JSMsUUhnKUcseGQickFgOWZmbTZYTG5JSiE/UjdvZiIoOnBzdXdxQz5tY18yIT8uT0V2IiguSGlQc3FrJnUkOkwjUFAsKXJ0X2RRVmB5cmtb'@;
put 'Xk1iYjtYX1Q5a09UezMiNW1yfT4qY21dXW5HbD97IWJFfiU8bCw/d3R1L11YcXd+Y104dnxOfk9dZnBecSF5XXpqaDpiVj1IJjczeSQoX1Y0flMraXx1USVxJGthbShpZzdwYEszWTF0SDtebEhMXiJgVi80LF5LTmdFKS5DUUJuMDBJT31iSCpCJjRSJlA7PGBKbFsqWipDV21KI1BgY053YFFg'@;
put 'JiRJPS4sakdRKypucyp6RGRkLExtazgzQkp5dmZbVy8udk1dQzRMcXVAP0dvQHFmQEcwb2xBPFFtd0Buc11AO0hjdXclRCpGbEs2JFh1SU5SOWQ1LFRdd2hVNjRIOVlVXyZeXiNtVkU1fTFLUX03QG5kNy9ePiNBY2hmXmkuelFTcUZgTlRJK3poODFOW3M0JGVeM0hOT0xZW19aRDhQVjZoOCt9'@;
put 'OzU+Wn5CNmx3OzE2YjpdIm0vajMofkNTaDo/TFkjPHx8eiM8bmdaPlJzT2M+PUR7fF51VUl9UkRbS0xTQFJKSmNWLEJ6RkEzOnNlMCJaTmNHQ35iY2coI3UucFRQZDF2Z1V0QkksbyNENyxfSGUpXkV+UVZKZXB8NHlzRk9SL0tjJHRIei5CNj9RKkBbSCF5ZTQ3bkhgS0RbL1BDbUxEfDNRPiQu'@;
put 'ckkqYWIkO1VRWmZYJjIwQThdXmVDZHwqMnchflNEW0w2QCorcHw5eCpydHp0PixZNGY+UE9WMVd5cFZwKVQ4TytreVJwaktAcDMzUGFYdzhGLmFddyZ1ZXUlbWMuO3x7R2lUIk04V058TF9zZyJKYktDKntILz85SlZ1KmYhSXM9Imh8TjtgTH1YfHN5Qjt6XTdDZz1iZ35bbSVSR3hWKy5nLkZM'@;
put 'Qig9NFhXXW5nLkNrR2d2c1gqZy5GL0Z6ImJ+LEhgNThgSHM9cmw5MTB9STZsTm1dSX0/Xms+WTc/dC9GODE8QFQiZU1JRTdNfVc+L1JjITp2dHRYbiVFNUUmRTVGSG9RVmg/bWhAUy94cV9YTl9ZNypCR0MjcHB5PUJ9fElPQEskRHVfUmNiX0RLNkZbS25ULk1zfW15NksscCtRblpAb1BIajYr'@;
put 'ZSNQdDZGb31ReihCVjhmYkc6TWdhVCJdSm1oPTAmZ2AqKGN3dyIlbWh2fWF4K1BbQk4/LD0mL158M2tYMnQ7P2xnVjdVejwsKEpwZnB9bSliY3sxYFpCNUdsNEA9OzZgU3QwWjs+JjVLOXRUVmwoe0dESGIufFJZWlcrV2lvbl5IYWpAaU11NihHTWR8QXwiYClwcVJRKnxSbFNzMzkidXdgVTs8'@;
put 'K1l7JCgueEYjOSheL1ZjMjMvZXRFK3RvaEJ2Pk1wVm06PzhXRSp0USF6Vjp2LDciOWY7SDdtQkljfG0yQSNjejN7b0x1cDcmKz19TSEmbGt2c3hVLD07ZTVJbWl6Z2gkNyJnSUVXW255Kl9yKS5Vc2ZvXktobUZSe0AqLFYyW11hK1NoWkttMnY7XWg0P1tLe3wzMTA5aHVrVzo4KzxRclYyL2FE'@;
put 'WTB1bGlbfD9yIm99U1lPQFlIUFVVa2FreEp6anRKMmt4bT9MJWl2RFNUJXBwdDdyK252L3pfbDg5O0BsISpgRW03UU9mbUlKVEl9PTZYb0c5d2xZJHMyOCw0bEE3SyRkSUExKDB2W1tPKTczWXZVSnlbN2dVSnpvIjdPcjE6O2VdX1lUVzw9O0hBSHJsPDwscTwoSXt1ZzxnRkkmO0ZWbTJ7d0t4'@;
put 'ZW5yMl0sKmMmOy94RmsuPy9iISM9aDo1I2ErIT8qeFcuJEUmRXZHXlh+IyJIam5TS19zcjtxS0dga1cqZFEiMy5OMm9sPnh4aEZvWF5obGcmeCM8bWBWSWdNT1RqT3h2aTE9Ji8qJWNyMyVQJWg+cTdhc05ZaENdUWgzbCpjQilAQGFSXW5bd0JFXnAwZiYhezFYMXMqQUNZMTo6cHF+Zlk/cHFg'@;
put 'YCM1U05je21OVCVKTn58JCtLfTpOPjhWOVY7MSxuOktyJChDLixARXM/NTUpTmxuUlZIRk01WWcyaUdtei8/NDFOamdHbDhJUEZ6VV0vdUVaXmZgUjJMOlNgNkZRRmZ2OFkzIVB4OClQYml3LG5xTUYwOW8lZG5dPiVHbzNiZ257XzZKcm9xRXAofDFrTjpdMFtmTWdSVT9xY0BfZFomUD92SllH'@;
put 'dytea0omdTA/N0UsaWtQWWoqP05jdyJPamtjd2hKWzZjdyhEQE4wRykjamtFMnMsP1pfSWVyaUskUi52diRxO2h0Ji9QZChHbDxEcCshNWM1Xns6RjRmS1phVCUraSNPMSQmJkYkbWRiMDlGTmNbSyMrYVVkNCIuSiM5MjFsYlErMjIuOTFkOiwxYmh4UiVEI3JyOHFKXThKZ1pLT1FeMHlSLj9r'@;
put 'WDU8N00+Pi9mJiFHayppaz93Qk0rPS5LTV9VaGZVNVlQPlE9R19VQi8pPiNeeiNzMSsxTWdhbXJnWm5dNX5hTDBoazAsKCZJOilpI1UpNzAqdiopN3FySXNXNyteT095OmlGe0s0KkZMTVp4KmkhVEtSdzEqNk1VeWhZXWdKNzZiNjIrdyJCaF1yWlN3aSZCfld1VmJ8NjBWLyM9aF83VU91Ll1V'@;
put 'U2BxTT5SPUpyI2ouSSIwSnNBeSJ1L2xrNHhYY3NlRURnSkl5QE1UQ1lhVDxxQmh4cDtUViNfbjBWPz1NUy9AcT92VD03XzcmJVY2SWojcF9uYillOkZIRSMlRClKMHZHI3JzYCNqJFIuYi9uRXpzIUc2NVRFNGUlUSFKNHBgQSVhZEFoSHJyZ25gNzpmbm8pYlREbHtTX2lNMkpeQWV9UFhuZU4y'@;
put 'LHU2YWtsPENPS204OS48Kk1bXjMlTlF9ZCgxdXI6UzJ0JjI5Lk1GVS5zVjAuXWhZJlsmNy5qdT4xfCE4fl0pKzE6KU5RSiZfPkpmUnxbJjg+ZmJBUE5qRjtQZW98RHMyUUI4IjYuO3NrKnd9MV8qTmVSPD12NDFwXjI3OzNWJDJVQl5VJUkhU1E0dkE3a2xsKGF9IWR0JHxPOjtLNn4uLDNFZUAs'@;
put 'JFdPOTxbYDhNPXZtfWxWLFkkYjUjYF1uOm5VeEQrJlVET1RJJDtNZzojM2wlMCI1VmU6WUQkZTFJOl9SJEhFPWxQaWJyODFRK0ltW3kmKiw4cUdZI2hxJGQ2bltMbnomdDhDVl03VT4rKkwoe01IcloyUkV3Um9aeX1mNn48Zk1NPXB6aCp2bW9AI0V3cHlXTnxHVEFgR2BGdnV8QkdrYUpoOGs+'@;
put 'e1FWdV1NZix8O3pRWD5yfiRuQnxKSFosTUpZWypvI1UuY2l6TWlsW2Yme2pocDJgLyt1KCxWdzV4UlpPYz55d2dGeCQ8P2UzKDFsa1cpZ01yeHB+YTkhOFsxWDB2a3owckUufFYoIVtoI3I9c31BbmcxcEN4ZXxBRm5lI24vaSp8T3dBfS54R3kkNGU/JDZXQjZCUT9kUE1ASGlRREZGKHRSZVlb'@;
put 'ZXFwfSYmMTJoa054fDhjRWZmXWRyP0NydXZFZVltKVt2SkE+Ik1QbThaPyJycGt+TjZsfDxTS19efjFMYypSNT9CcTUjVyklZ0JpVHgzYlNAQ3hTe1R1JCUoIWVmPWZPKFYoZ3BKMiF7eztdJWdMKFgxeUpLb3JOYjB9ZlEwYyZRYzcxWmw8b30mXlt7ZCVXR0tNOzxdTlFDP0xRUUs0RHxdOipe'@;
put 'KHc1NjwzKlE9Kys3fiN+d0h7WFIvIk0vOFZEPmhhTD4rdWY9P3R7eWs6P3leKldEX35aV0VZX3hIPS5KdTdbOyxtWigoQnhEfH1OVUBfUFFLM0trczouSnVQTk00cixKdS92Y2ZUMyFAUSt8cj5XTzc0QjZZSj9EOllsIkpkRSltRHpWeik8cDNnc1VtMmZ0VkB5aH5ZMGRnekpUa2p6VlpvTzwq'@;
put 'W3dsNm5xUSlFOjt8WTR1SWZNQWNETWZHZ3lKVmZaU0wyK2R5Tz9uTW9ZQ2R+VC90PC5QYHswLEEwQlBgZEJSVm5na3R5I3BZLDsma0xhSU9aMlNNVlVvMHFAel1qUjcvbWwpZnt6U0hBM1RTQTZLV1ElJC5IYVo8S2Q9cCw/YXJZe3w0JEo+RD5ZXio6PyEvdT11LnZ5c0ZyVGRGTFNjRmFWNkNu'@;
put 'XlBYTWF+YzNNWyZMbHdhJFFjcEFyYzlXd1t+SHpYMTB6T3VWal4/Zj5tUVt9WTssdlNrKnx6VkZVX1dWSzJVei5JcVFiVHswZ3A4Zjk7PUBQQW8wNExYWHV6KnYqSDRGJFYkbCFsVjkkX31NM0xnOlpzZnY7fDp5O0QyL2tuQmFrfEttJVU9biRyTmtvZlZAXylyOilJdHlHdVdncjdmdU8/SEo3'@;
put 'S0UxQE9xZntkWUB4WHdpRzJRImcoaihDWTBbJno3OE19bUZzQmozezJnL0BYMXxnOXxrdnpUblFiZXxQKFcwUlh1fnJpdCYhTGQsOVFPYERkWSFYa1IqNHBxRGIjezU8b2tfRCxbUiZVP3M3Ilc9bjUkV3hnbWQ1YzlvRjBDTm9Kd3wvb3dDQmAke18iRW9EcSkwZzUkfG5gPTcsPT1lYT9OL29a'@;
put 'bkkpLiU+c0B0P204YEBqTVZnVDZVXU4+KThie3pNWztGJXRDZWxCcH5xSXd4OWZfbTNCSl50eWtGLjNkNUtEN0x4OXV9N2Z4MG5xJkN7KiVIPnkxSCI/TDpjUC5gYToiKHhIVmliOU01SSFlbz8yKSk3O1MzZ3FLQFFUQ2FCYG14eHMiRGAiP2hWNUE3N1NhNzIsTkJXTSVXT35WVTkrfiFidEoz'@;
put 'MEpTY1YvVmRTSjpCPjB1fS5zdiVKU0cpYEJALHM+PytFMG5xKSVVcyxvQHJDaV58RiopXjhObGdfUCxEfiRaWkRYLC5VJnxQXSshbEtYNntqYVF3R1lYOU5IWi91T0hTQm46dm9RRzY8fSwuLklQK2VNYnhGKiRJTSU2T313Xkk0PGlXIyYmYillIUpsenFPSWFad2xNLF0wWnt6XSpiUGBLUE5G'@;
put 'RDBrOilCP2orRV9qQDJrUjprXmA2UkdBSGkxVXZ2VyNjUlFgeGx4XyZbdFVhTUpmRVYxWkN5KzRgMl9WTyNvPVpCMkAqbzV7flVGfnNFT1hFO3I/OGJqc29MfVVKYz4wZ1t9fW5ySmtXY2c5U194UnVUXUZVciFSKXwqdT09eFgxcl0iKDk9fUBSekJvN1RVVXpVQW9AciExSF9CO310O3FwaXU1'@;
put 'fXUuX2x2MkZMOG19ajczXSlbbzM2RylrW1NGZDRqOVNnSyo3eFNtMGZoaiRmV2xKUVJtMFB5P05rOX4re1NGbHQzUz5hXyhSYEwjOmwjMyZ6OSM2S3ZJKEBnd1tCdUsiXyYhIT9nKmt3QncjOytxckQvNkhuSVpuREU+UUIoXUI4OU1rb2pbOGJPSVhXUDVeQTlMO285YFt8OiRscDRMKD1ZIzRe'@;
put 'XzFaS3dVMm1JYDh3fnd7clRFN2h7XzFCJmQ5eyYxUDxDazAiLH5LZjRBemcsWSxSREw4RzRtY2hzVCZ1Jjg8Vzh9SHB+OSxVfk8xQntXOH1Ib35rXTR+Y11CfixxP0haNEE5JEdXbkVEZW0wWDFbV1A+a0J1OHhmc1l8VC8jaklPQjssclp7JXpvcThBcVNqSG8pUERoRmNnVmx3V3ZUfERuZE52'@;
put 'byZgZnEqMEkibHRabStALlVWOixId2xIKWNhY3RZaHE+QWpuOHJjQX0oSkg/bT9qWkY7bll3V1lzSCxYTyFtJWosYll5KEYhPnRKUkV1aEhSQWw3V3hHTzp1NVdTVixCNUJRdWgvMzBhZDZ5YmkjZkxgaFQ3di40dyJiUjxga2tmeD4pcV9GSCl1aD9bV0VSNn1CRj4pXlFXQyw0JERhdCksXXlY'@;
put 'NUxwQzVRVkhCai9rSEhLJXROaU83ZXN2OV5EdHd4VCxEY3QwbktpOEU3enFCLkRhTGxfIUojdjVLYkg8KEZpc0lqSEtDInZoRHVDOXRvP0VIeHRBdyFaSFBfKVRIRkI8b3BpXXE7WCRmP2I5Rm1nKz9WY1RxLmtKQV5YYE55Lmk6UzVVRUI6fU9udjQlZ0FKWD1bLy5fJEJELyplMmNNbUN1Zjgw'@;
put 'WEElPCZLRmIwMyM0RTN2dGJPVlhNUkpWWWldQ2lGPDVMO11JcilAeXZwSExzWVRIM0wlRn1HP2kjdl4+TE9WeFJ0T1ZFLHBJbSt8aEpMbz9nRHUidW5YQGZTTVVecWFxMUVgeCZfTEQvT0NJTGZfRXEpaU4mQz5jO28+XS5EWyZmVFdhUSJpQ2hHblV6Kncqe2AwdzBaTnZsQkNpfjFWdHRKcSk9'@;
put 'RjpiTyImXzlCMClBeFgiIUcqQiQ/XVFURmJkPyk3SSl3U2lAVnJQXiMkIjtNeUsrR0d7W053V0FtImkieG9RMEV6QkdYbG59TGBOczZNQUp0Z1NoRnAvVnExNV4xckQjdDQ5QG5iI3BWSkp6RkhqZWU3UEFZYD4vd0JEWkJ5KCVXK0trT0pJY01KZkR0NkNwWzpSZkIxdHJCYEJ9R2tUPUI8d3Ix'@;
put 'dyQ7YGU2QzRTUEZKVHV+UUM1VTh6Y2ZCeyhAYH5GekwlWzRqVE4vQnNpJnI5WmU6MUtePiFrV1hzUDppIUNPUU59bCk8Q19YOEE7RllCYE44S2NNbERmczA6YHEzbEE7PmJwfEJUfUwvPmY7Wk9tKUMhdTZeOTomQC5dN2RiTFZ4R25hUSJNZjcqW04+V001KGosYVI5LlFQdj0oIWYpKzd6WmFR'@;
put 'N0wqLDVzZXlIQEQvbl1WXipqd2VJOGZKaipBZTElOE9jKSskcXovfmZ2byI3QmZCMkdERnRmfi9ZMHtLbjdkRm9JZyNocEYobCt8ZDlebEs2cEQ3ZkNUckpCO09lJmM3WS4pYDxXWzlDcWNEX3ZgcGNiOlJrZ0tYcH4laVZZcHUlOVY1bXteNVhRP1RXLFUxYVZmOksrIUhWR3xkay5zJVg0Qnw5'@;
put 'QWYscktWITBOKzpgM1NyeSJYKGpVUCJVN0IiJWNKUT1PSXZpQVJwcXZwak4weTNRO1AyUGRZdyxacj8yPXI/ZSVRLHdyKl4/KGo3Un12VilTeTNbT0hUP0hXUCNGYnYxTHU1IUhma2wjJVlyfDkuQjI4VWNESHwpQzpAXnxWRz5WaDtyN1hhSnF1e0NVL1ZMTkYuZjJEUn5WN25mZnJeTlM9Ly9v'@;
put 'MEdYVmp3ZmpWJTAhIjhTQjJYIV9pcmo2PEI1YVorXz5SZWE/ckdvMVJlNSxMYCpsTntRM0JlbzwlYVQoWWA4fUtEUE5wYEA9eXEpaGVhfVJ2dHN4eiF1c3NELDE5T2JXbHlPJEVAOFsjLj1ZO1BORFpiaXlTLGYuYW9HdVpTIytxJD9iMzc3WT9qUFkmNFNGUSRuZEt0NWM6U2lsNFV6bDttO2A8'@;
put 'ZXNWUGdQMUZRc25mQzRRYkhTQHYrZHg3X3dOWWF3XjJGIUpSXUMhWkJSfDcyTTx1ZnhuISZMVzd6VlpiPj12Nk1hfkFqNm5mWGJAR1ZVfm99KyZAdWlLYXhFXlR1anlUfjBGSlk7TGROLDNGfmQjYmNaKSQ1ZTheI11HbCRxe2ZLZkxJSmZWZkZZNWxXIW8iMnQoIjg3I0daTTpTPTVhZHkxOFk8'@;
put 'dCk0Kjs8bkNNPTZGYihieiYvTWBJLmEoKmhsd3tpSlM4IktiSWxpI11jLC9zaVpHSl8sKUMveFAvT3hMOl8mNDdRRUx9Pmd0MzJQfm81S18mcXdfNH1iIUAyTHw+JldydFV6OHRbIlV6bVh4ODV4YGEleywjQyQ1bGRGTU5uO1UoKDRBcFdEbn1aWEYvbURrbGFxfktbQ08/JSY9OCw4RT5LSH5W'@;
put 'PUwqJCQsOEZjXWAqSnVyRyJ0Vm9yQGlkZX5DQiREbVpRSUM3Pl8oa1tGQj1NTyx5UzpyX0o4ZCMoa1tGNy8sTHQ5aSRPPVtmMW9DNi9bX3Zvb2MpSEQ0TCJHTDM/RntoL2Y1d29vPVhCZG9vOGE+aUVIN2M5PzZMJWd9MGxOM2Q7WW5rInY0dklbNlVMTFFKfmUvZShVblgwNHBZS2hWZjRsPiVL'@;
put 'cXNgQTZyQEEsVTV9eTU1MnU2Y1ZHLmdRJFRPPTNCfHhgJDQ9WGIhfkphIypYXjpfZWpPKSRMSU9malBYP3huMnkmc1tzXXM7OEZRUyFZP3kmcm06KnVZaShDdT1QdmAkbmo3dF5BQFJsOmdsPytxcm0zQ0Ilcm16Q2pJa3hrWW8kdTV9Nlg7djMlIzRqeXVtUiE6KWNAdmVSNklkNSomQXlZVzY0'@;
put 'JldydCx0ZGBZOmZhQl8/Pi9mSk1yMzVuYyQ/PnhuOSV1ZXFtNkRVLk5xe3U9UHw/cFNtUWNHVS4kaFYkd0IwYGdLKTR9d3R8Kn0/U0IsaDx5Ji47KCN+LkJbKGNsQFUpeFBReEl5Pjt+ZFhCfkl6LlYzSF9udkEpJj1XRGhTV1o9T2ElW2ZRaXo4XmRlaWo4dGd8Vn1JZUwyamVXSXdLQyslSC5T'@;
put 'UU5zQT9LQElFNmxUfDMvNXRdNlNQeCFDITFQI3VSTXdwRnY8eCgudDNRI2FyKlReXmxCc1c1akdlfVVsOHU8Sj0qNlQuU1F7cDQ+RjBHOGpgOk0ybV1sW057Il9gO3dKO3ZpYEVnLF9HX25UczowQm5JNWwkckJtak42fGMpJHUlbVBAMmhzQmgqNHVDfFIpaUtVcCE9TlBLKztkbkJdLnlXLGIl'@;
put 'MXg9SF53eUxvPkFId3ZSLDRffWAjOm9ZOFdmbVM9Zmx2fCw7ZS57OXx6Vl5zdSMzKD1vdn04JTpETSFbNURwa3YqcDwyaVMsQi5UWFR2YiROPTpFem1GYTYpYWlPUm5maHg5VkJfRD5uZkdRTCR8IUdBT3YxKUZYMElxRSwwVVhYdDdSWng5Y2NSL0x1VWFILyRCX1A1Pyo+cEImQj5CX0FxQiZC'@;
put 'PkZJe15BcWMlaDtiYzk8Y0dWRio6Q0Q0eXNuVVlAYEtJO1sqN2EkN0BfcS5McjNWaUtQX1V2U05aX1VpaW9qeE1vbUBbcHk8IjVpezE/ZkY1SUJRamZqTFB3UUFrc3hRenkpU3lCZHl3YzJGUmN9RyIwbXh7V1JJaWxnWHQqZndMfkpndmt2UVNgRFc/ZFhdQ0h1WFJQJWJYNnphP2ZNLnFFU0NH'@;
put 'SE54MXdQfC5IIyRAPXl3UFJVR2ZkUk0hcSEsR3wyYCpBayh+cVUlUCVgISx7MVlfZTgjcVJIVyxzLEppbmZgLyk6M1UjLkolZ1daMWlIY2czMTZmW2ZRcVRmLzNrejcsOTdfQktyV0ZUSn5Lb11LZGcwVXRsV3Z0VGkrOSVDVyw8YTg7QlZpZnNrayxMS0ZSaDZWRDJpWXNlcG1fYzY+QFppQGEq'@;
put 'JXltYEAmUU18eiklODIjUXVEcGc6JHt5NGUxP2xuOUxUVlNUSXt3VHtgNVE6eSRecj4jKUlqTVM2c10rfCY+ZFs7N11kX2l9bGVOUW55Y0g5TVtGTUw6U14qNkU5Rj1ebDJ2bWBNanJSIWp0O0RXSnk0JFBnZlJTcS8hcGlTPFYhdno6XWlAa0U1ZiVQT24hYWA4R3JlW14mI0h7MVE6bllKbTRs'@;
put 'MF57UDYudlN6PFZ6ZGtxJlJEeitNZTQwImt7ZihdRXpjY3NpeVMsZkRUWHFicX05cjZ2Wn1CdXA5RkBLSUY8fXhgeUFLfFZdUDNYZFhXcXAkZkN+Z1B7PHc6eWhmaFYuWWh1SFRQejZAZWBGTDZYOEsoODokIUdsTGJFMV1jXmVnZjwoTUtKKzUvcCYpLEQmc0hsLiFYWmMuPTMyb217cnchYX5x'@;
put 'TSNXcy9fVWg6VXJUYDFndkhdaiRWaypaUjhFaX0wOVV9N1BiLjt0OzBQYTJOOmtVQkpdIkwrKl9qUmF3WSlxJUh+OzQjW3E+aUoyWy9qSjc4MCFYYDFnJm5gSzBxcjUqYWc+ZWUmX31vMjNGaVpdMEN5XihhWFp7dkhRZXtGdiU9dkgjIVthIj9zSGBWUSEpNnZYNVRoMHVJek8+a1VvUWVyaCMu'@;
put 'ZVtAczclQy9lWU01dTlLM1lPcztjY0c5NGQhOkIsLyNwWE0mO0lHPHUlUk9ST0x6dzxaXXV7VDxNP1trPUBNenpaOz99ck1ZQVh1cElkRXh3dlRddGMkNHZYbWpVNnIqJENIPDBCTVpbeH1VUE9EO3BlamNpY3c8Jmd8cnQ8Wl0sckhaTSYsXypTbGxaVzVsU3c/RHUlKWQ6LjpfOl8jcSojWEtQ'@;
put 'SGteQn5SQW9HWDIpRF1qSztjTy5MUmdRUHBEN3tIUUNTU0xVWGNZb28xeCZ1fEJUQylHUEQwZ0AyPnB+amJjQWt4b141dlglOiJjSDlmVnxxeCNMLCJPO05mXkVNYzArIUs4dylRaXdje3VDNEs1eVo+T11hZDRYN1IxJFQpJG9fZ0x7aCYobnRBWCgrazAiU1RDQnUodFNhQzZROEMvRnpAY31h'@;
put 'IjRJQSRQOHoycVVhPk0pUHleOkxCbzRzM3B3bS8rXiMxZzcsR3AwWjg6IStEdkJLKixGMCVUYFE8aGxMKFdobXpuXVAhTzpTL0Y1RChiWGM/aF1oVVROQGcsRW9wakQlNlNYSEwzQ2IhNTJrYmIwRDxCSUh8cHJ5KDhANDskXiRMYj1wU3d2QmBHKUI0NiokXVQiZVVOVVVeT3E1P0xMM2kwRU1D'@;
put 'KXdpKkw3W2NmaHxxY2VEKGJNYUpyYUQkRW1dYU9qSWt4bSFjbykoLyh9ZGRhOyNNPGJYT05VVUlQI2krYU1hSTw5XWMvJS9edzBuXW9ddn5FWTt6MzkhPU5naix1W1ghRDNmS1NibHtwRExJUWpmPk43X2hSaFFoJUo2fVFPYltjb29dWVVVO0IuNjZqODMjSzxwK2RWODVAQjkmYzBWV2QlN0V4'@;
put 'bDZgQl03TEN9JGpZMFBZNihiME8ueVlPfDdQW2F7RHF9LyglW3soKDk9OjZSMEtMaWReI312MFhRQCw2OWVEcCV8KFFHXXZYa3RbL3RAeUI0Q28zaElwfmNdblliIXE1eTF9KypncTFdVz1ZVTMiTSNXPmo+blJiazd2JSo9NmhyU1ArZHlzZ1E0SmZSK2h0SjJnVXB6QkZKKGR9N3hpRHJMJj19'@;
put 'W0pPYlhGMktlTDZLPjIsKiFyZmtiI283NlBLPXciTnJtJEhXOU8hcWssMDtbUmFOUVthWjg8Ylh1YDU1PDUleH5nc2tsUF8zS24wSEpLUl5rJmlyLylKOW9+ZXJJN0lZPjZ+YlMuQz5rd2NIVEk6bjRzZlhXayk1TFtzK3UzZ3pGYmJQVzI/WTJxMF0pdD1OLDdaRUs4bCx6VmNbJT09QV9qOzhV'@;
put 'UEBkZSYldn1JO3hdOjgkUV5vfE1uXXlDZ0NKI0hsPHBBSX5ROl8oNUp7MXgxL099L2A8dnwqQyxaWSxqU3QpJCRRfW5xb2htaHFnaX15RGRNPlJ2JU19NVsxfk9meDB4R0o6TDV8blIoa1t8Y01IT1hZImd0e0UlPFdgc1Z7W056WHZbSmkuZiMqIjUpWG58QF5JTX5UQ0g3UiQscE5xKUhHSU9+'@;
put 'NHA6T1dORFd1VTFHO1J6aiZjQFZeKjlBTzkuWDMoNU1yflQpaWwoTzt4ckJsUm9+ZyVYYSo4enNGZzE8JEJlIXp8dU9NWj5iRjRiT1RkV0o1Pn4reypqK1o1JE91P2lddlRgN2VCV1U1RWpDWWlBREFRQV9fSkFHdVdFYEokV0R6TkJpd3g4Uld2RDFSIjp9YVRQVm9ATUJGNEw+aXErQUFBQUFB'@;
put 'QUFnQThNLEwjPHIxUD5kWTZsdENuKWJMcVBZdVZPfmQ3XWw9IXB9TjFDOzc/I0xbRDJPR21PdHtNcCs8diF2Tjh8S0EkIV1gTH0mTDJiXURSe0NaJWZ6Y0I5V2NqJCIpYiszcD5LSlhgRjxmVk9tQixoWHpgTX5lKz1vfHdHRzomaD41ai5kUjppYDUiVHtfTVZhU2Erc3t6TUAwfntCcFpPLi5d'@;
put 'V1piZSVgaTYwRyljNTpBOUBoeVFxYlB+SUQqZipkbCo4fmtrVzt6eyQ/QGx8SWhCYkcqI0BVbVI3Tk1MVG5ifE8sNU0hU1leZihrSVJHPDl9XkpEUDxPOTRTeiM7O0I/SVJTbU5zNGlpdElpbTFbVztdbFRzWVpMcFdFM15DL2RIN3w3cHFvXSUpP0xaYGR9OTtzenhiZXE0MEBsZGFlfnp9ZUs2'@;
put 'OTxgRkJAVTR0alhSJDp1blpifj9IVWErbFlKRytEZnhyYlBNI1g1ZC96NUJ9VTBwPEJUYHlkNmdESSIhIW1QL1ZBcTp+fnBCSVB5O2tKR3pAbUcvJStEX1JhTXsyZTJJcHRHejQ9dmc+REFBLHQ2W3ExZ2hNZWd3bTw0QGskVzRxTnpIVVpBQGZJX2tHZ2MqTzIid0RPIWZGUlVfQk9AeWE6LER3'@;
put 'SEhWI2R9Zl0/RGtVYGQ9MHBbd1ZibzI2NktAOittZndFc3R5bkdUZ05DdkJGKD95VH5hYEJVeF1MSDxIT0llVTxRT094N3RDUnBpfF8/NyNbQiJaX3Q+X3N8TlUjWmJ+biJPcSN5WTtyO05KbnlLRkJ3NFpOUyZ0K2ljQzpqYmJKamtFQzMjZ0Q2U0ZJNzNqZn56USpqZyE2P0FBPl5GXSQzWW0w'@;
put 'b0JSNnI6b05hPz03RE9lQSNeQzY0MSpEI1RlYytVaFhDRjJPLk8rVFo8TS5jTj58QiNHPldUPXBLSCk7X1FJfTkhSDZAMD9IbSlMX1JRMj1yci9KbWR6PE9KKVF+XXdONUNBYnIuYChRZDpEND47IVp7dGpdLEVWOHwxInU5WUU1JVVKOXBCOSY0fS57QjlvbyJPZ29Cb0hBY1JOIzxhUCM7RmZ+'@;
put 'VDJkeCwwRmRyViNHViVNTklXbW49T19xeyZDJX18eWlFQFhKYTY3fiwoPHpuY2BxXVQ6OHtgaWtwYH1lalsxPmZqKXUsWXJRIUpYbmlhZ3I5MkQpcGEuK2JoJm1QfSg9WDIoSzZAVm9dcWJnJlVkZEdfNj05My9jWnlZQ0JiXS9nSXhyRnhWajxRUE5ZLmF5W2RXfjZdJFVWd15IY14pPig6SjhY'@;
put 'L3ZuOUd1SSF3NSJwfUAvdGFKNlZ2dlh4WlZVVkosOEM+LzFENW9IUFVHXn1YOFV1ej14Y2dTVE5fZkZxO2N6elBFV2k2LGVpTittLGgrXiMyWjtFZTRqSTIuenx6SCJsPXF+cmssaGl4ZUprI2FYVUVyIWZpSFlQP2lqQ348bTcrR2Yse3JufWh9e0pESk0rUXh2RDMrQyt+UiZhUjt0KzspOmcw'@;
put 'KVJ+Y1M6YGxiLypjZWFCTT99UVptX0VqTGBnRVY8MWg9IlowaiN0OWRYL3dMYkw1cjt+WHVPYFFwZjpvISxnYlppd21IXmpieT0pfS9YUGklQGk9Lm9wSSxBbX1RRlgkUlNCcEIodUlTVC9QbUNXRnApNDlfUm5WZyNlZ0c1dj1tMHxnIWNAXk52bXp7OS5UUXBWVFNbS25QKGZTalgmQmtHbDhV'@;
put 'aHBxLyJDcT0mcnZwKlQ4fUw7IkVVO0VefDM+JkhzZFJ0c0B5XXwwZXpfQ2ZjO0cxa3g4NiVGL0VYLz80VEheWWpRW3IlPEklfVo9LnBZaGpRX2M+YmhZbVRxPUBlMWcxWGRxaX0xbmA8anNITTxpOyQlYjAiV2VoZz4pJmglXVE5LGQxXXFDZHl+eiEkaF16ISRBWntzQGw+WFgvUyluLndNNiFw'@;
put 'aHBsJHFEYT0hX2g6PSh6eSpvQjVsKzU2JThydH5+ZmlUP0ZxZUFZPWZzLEJhT0RLfCFdKHJPfWFwPm52UGIqMTdCOGJQc0ArPUBGfHxOP2hMcmIoIy8/XlVeMkleKltpMVshcmIlOV95TzZ2SE5wYWJAeF10ZFE0eVMkQ3Nmcy9ndzZ2RTVTWHo3XThlIyhHVjFvNWdFVzsvUnghXkF+Yy9zU2ZG'@;
put 'QGgjVGhlRllyejhKbXV+R35tdDEoX11IZGk+Mn4oOEtYKTNLUlp6Q3tGVU1CSHNVPV1MdmosNi9edFByJTU/UW0zYEp1YGo2Rk9WNC9TVjRWSCl2a3I9X2wuaH0rTkFocmNYPS5WKSorYHhVaFgkaDdhcTl+NWhoeUI0a0hNKi9SOS5oOWQ7P3wqO3JwL25ITlljUm5fdjF2TFM7YCEjdWs0Lj85'@;
put 'U2g1dEdEYCRnQV02U2diImUsIWFNaTd2SEJuJTYwXXsrW0ZiPnpzWj1JYnlfKDluclQycE1sZ0M8OVAiQHQiUFJ5dz5aUlhvOUJ5ZTlVVGcrK0BLdEk8dkYxQXBsUz9mV25HfFZIdE9xeFssenN9PXdtI0FCQD9PVDBwQj1mW0JTN0xvaHxhSm9lLj0xZzUociQ+V1M7fT19ZjBrIVsyPlhdaWYq'@;
put 'dF5CQ3RfWUk2Ml4sI31fVzg4clRoZG9sPWdxdWdqdVQ8OTpfa3xzWi9WUSZjST5qeHx5S2V1WlB6WDVQWnZ2SWxXJT9GRC8mRkBpPV41WU9YdEVpNSE9I0Nrc0ouLF9Xfmw9REVDeEVpdWB6MXooL2R7fk9LPnc8Lm9FfkBOPHN5IV5ma2NQb0VVPDJgcz8kJlo9SGo0Q1VFfnQvayIzREl+eipf'@;
put 'K3tQMCtQLih+WlleVU1ldVF5MSNSPEl6aWhRZFM4dzduWSNOeD01ZjtdZSt6Y0B9SVhlZ2prQiwucCZsLFBSbnMhcjNaanRDRWslclVLPS5WYT1xWyZAQ2g/aiFAfkNZXjxiIk5POHxmYFpGaGA9YEBsa3dXXyxzQWEzOCtTVjBUY3JfTChZSnlbeDtmPTE1ejlfRGo1QjM6YGdbe2xmKHZWKyNE'@;
put 'R2B2XT9DU0pVMH5rU2tncDomP1B8Ql04W25CRXt7KFV0ZCQsPFEwNSR9c2hXaShJc08mSVJfaClFZTQucGldJlswLEUqSSFUWVRqQVZoRGpeKlkxSW1qfksodygsQVhgUTM6UHA2QV9LdEFpZyJQMjF2Qzt9Xks+WTpDS2NGQmFMOTRvfE95NTV1aUBpMVdme3grRCVUST92VyEkISk5XkxncVUq'@;
put 'MU5CZH1QIzlJfVUlKEBGeE0vc34qczhGM3JkXiJFX2dYU2lJIlooUUE+LH1Ucy5qOSZgO1NZOF8xcDRtRjNPe1s7ZWd4bjhgRFJjajpDTnwzfSZeY0p0JkFbbzNPKi9XMCNOWyFdWylGWFhGMypVeyQzXXRTUTNSPSVxdU5YbFtFYXBaVHkpNForZSJ7bEVhSl1KdDIyWEdbVTBzJHlrZ0d5US5P'@;
put 'SVNCeDRGLGVtW2JqNHUxRDd4Yy5DW08xT0tXdUpFcEA7b0NOQkdxV0pteTBPeXJJVCs8b1E3XkRse2drKltpc2tqLEd8Zn05KThpNmZOUDYpMnY/MjZVJiFXKC9MLi8xNkJsJmZsaHZqMU99WjIoRzcsN1IvXmg8c1AzIz8xVV8kXUlUNDMlNih3Tmlifk1TSClvN1BeOXlDQjZOSjp2eElPfSZS'@;
put 'TkRJQS9gOVVyM3ZhYjJsU0tuOS5eImN9UlFddCFLV0M7U1M4dnFwdz94UyZQUW0jWXdMUWYvKkdPYEdeQi8lZ0BpdW1dS0Z9XTRMKTUwRXVhS3ROWHNWYDA9aEtmKUR2aVAzTWBHbEI5XmM7PjFFYyhZQDdRaDNgV3UuezFIRy5ydjtdTG54Y1BYQ2g2PToqUVI5NjZOYi5NSmozL3lqfVVJc0xi'@;
put 'IjomP31ERndyQCowSGNuZiFQfkh8UClpbllIO0w4d25PLm82ZXV9KDt8TTh6bC5uIz5lODdAVyh6R3BNdX11PFJLPHJfYjF4NXVPbDN0ImBXPWNLbGArOng9eGdIJltBZTluWDRpLzJaejB5Qypvd3E0e043ekA4ezxUNm5dPEIiSVB+Rzg2aTl+IjtrbnhRcnVTYVFkLlhiQ1twZXkiLzIhKHgq'@;
put 'MjhZcj8sZCRjJSt8XzdAbkdDNWMveXl5fUpwPl41L2EyQGsiZHIyaSlmIy5NNzJ3KGltPkIvMytDWzNbJnkuOzc0WD8yUTB9bi94RHosTXdFZUdlflpfMCpRbSpJQkpgYz9HSjMzZkRQTSwybmUoZUMmZCReVE4+QyRGMERqUWdSbyReOz9EaT5NfjY7Un5UO3YyQnI5Vks3Im9oe0o6azl5TG5z'@;
put 'QV1yYVFvemVuR3tsa0ZGcTA5Xng5b0t6ZDZvbX0zQk5sWHE4WTlCb3phTUdYVkBuU0B2X3B9YDplaV43UFg4NFBHVnQoOSNLOT05KXFtVWloUyhQVFNQeiRGeXRGcmcpTkwpblpKaGUpV2JHOGp9Jjcud3RsUys3YEFpPTNdQSF9WzF+dWI4Wz4mW2xbRVB7Wlg0d3p8NFo4dWp+Y2V4JlpJaXNH'@;
put 'UWQ3VVpZcV1fV31MTmVgKnh1b2MrenokP2F1MH1lKipIVHB4ODYkJHU7UlBidShZRmRkND85Sm05SVBFbDdKeX47IjxJQlo7R1IseDpYSWoqMl5ndDU8RVI0VnRpaCF+OiR8JGtbQ0RIV2pILHAubSQwS19majVYfT9KaiMyYjpWUVtaQ0Q/RFdRIXZhVU5UdEV3S2RZbj54aTVDcVZfUjZrP08h'@;
put 'ZCheZHI/WGBSK1FrLFZ1IVorWDEzK2MpS3xFZWJWWiR4bCJBI2NQc1FIYHFfOEtNSyVXTHdWJWQrRlBCPGNObElwQ3JIdyI0cypgPSZQKSlJdz89cGomWyZBbyl0SjN5eSksPmBLOEooW2BddCkzZ1NfeGR9K15dSiwsfX5LWjFoXzpsKzkzamAvRCt+OE10aS9eTiZNRzdyYFB9dFVkfEA2O3dv'@;
put 'Sj9fQlloR2h8fj5lcz14XkIwYHFXQXkkbk9UKysoMnN9PlddfkVibF0jUFdkWUJVQ00icHNkdCRLIjRHWlFJQVlQS2tTeVBYMjxxdV8qTT8+PHJ7O2ZPcyZ9dlVEYkBjNFN7Wyp9K1gwJkhTOkFuW2c2a10lb0k2UlFNTHZ+cyIkcVROL1c9SGBlUj8pV2MlV2AqY0s+bHphUVoxM1pzKGx+dF52'@;
put 'aEhrbkVFb2k/bFNZSSo7Xn45dnYhfkN8WzVSMWZtY1JNISxSJEM4TVMoTz95UHdQWlBBSGcvSVoxb1lxNUQoJlNASVdOVVopOFJ2PUh0PERjV1RwUSUhSmg3eihnJDJMVFA5Q05kJkszKj19amF5JiNiXnkjM3BhJlRdYTNkcFljR1J+SztQLnRRMkF2bDtWXVRjJWp8UzVJQWMoRFpYfi44cyY7'@;
put 'eXphRntRL2FaRjVOU2Q8Ym1pSGR1bFYuSHlzXWR4R3pDeigvdV5mQVVWNjksNiJTMkcoM1RuZzpGSWJaZWl3QTZoeyNpJk8weDdvbn17ZExbP0xUU312c0VPYTpOYm93OGNFbEkqayI6UiUxZUhPKXdxcSpSbCQ/JD4/Ymg0dzd7Xjd7YVd4Pk5sWEBiflR5P2o9PHx9fFVnUUNjPzRrKExCVXpY'@;
put 'LGI+TyIrY2U6d2RjYzhaPHVQV10zQHUuXm4+YzE2MT5GdEMyaiZ7Z25XMnZVOyY/VEsxbkFYS3s2SEN4X1EjPjsvSFA9RmJCZ2ZjUGF0T0t0QDZjUjFUUXhqWl84VC4kfWkwa3IxMHVASnxGflNXcWdJcjxgKlh7SUgzW31EelJtd3dbVVZCUGBDamFMYTlwb2NrQnBFNS5OO3w1MjRDNSE1dEpY'@;
put 'P0hzJWBqTk50eEpHPGRIdzBMc2Bebi9LRFRuY1gkLFpIY3d0TyJzdjk3XyJzYklBYm9WR154W3NpcUZSZCFye3RxeUlYSkpHb0RqSGpzTXp8Z2gzcn42UixOfFJBKDlxUnk2bHIobW9rTyFLXmpeJC82Kn5JdEMlfi9vcV8vTjNLaVo/VXxtdnlxWDNCKE9vN3xgZEZmfjYhKn5YMnxWPWc/M1Mo'@;
put 'YT0udnRXYUYmczZkYHJbTzFhYVlXZnxHW0MhW2pFJjd4X1pZTkUpNj9hTWAiX3glWSEyezhMJV17SDYvZ0VDYTYpd0lrUXdnKCo9ZSYzYj5nPD1rU01RTT5zcGw3dmdFXyVyUjE4Nk1WaTk9NCZHL2lRaXhaV0BxVztTZk8kPn40ZS9xa1Ikdzs+ciNFQlk3VTdLeUhHYHo8dVcud0VkeSxrWVpN'@;
put 'aHZiP3ovTXF0VjtSNmJ4OCZ2Z08qZXZ4NVJ0TTh2YUQybSEmTWpSbjRhdT1xcD5sNHA8dyE5MGFQbUhpdTBYMExtNU51bXhRYDR+XVMmW2RsT0lvMEhtNXd0VTlIeylRPUxiOiRVSns5OnJERSlHIkckbV06cTF5RCJnZHpbQG80KzN4VHwqbHIje1N+OF9xWXEuUWg9L0hGKn4kYEd5TX5uOGk8'@;
put 'dypKWyMiPEJJLyEqVTdQbURBJDFFTFokTj1ddjJEaT1RcEdNXXl9USY2Sj88d0pPbngkSnZtWEUmfTB+ZFE8Njw4VjRUI1h0MCQkbzdxWUJ8KX5te3cxO2FJOUAhcn5XU2Y/KkNwalc5RVohLnxmVWNlNytPZ3xaZk9VST0seTR5dStKPDpJb1FyfHxKPj5VY2VfYCw6fEhsN2NeMiF+d2woc2Mo'@;
put 'PUF4RyFKKF5HdXtNYURKWSYkQ3xaVytZTH56Tj91fX0hKGtUbH44ZCVZMEVZYz8pVXxkdH5FNU8pIkNUYHJDVWdtcXs5bThEO0V5LFc0UWwpRmI9aiR1PH5UXlptdFA+L2R+YT1dS1hdKjYlOX46fGtsUVA8e047fmI9eyI8WE5fZygjMXxCa2JtdGksdEskem0udkdCYG18JlR1aCYhOGdjMUM3'@;
put 'eiNlYSxqTyF3JkZGcmpJfnJTSEliIWZHU28sSXRpKmBjTzRJSWx7TW9mTHh0czlQYiRxbj5XVVBvUkVdeWJdbFhyd0w/X0BLYj5XLCRlV29TTUsjOyF+RlQxcDZTMXY3X0w0dW97b0drfXA7PHVQMXJNImpefjdya2Eua2BXc3A/eVRbSXFXeltiSS5xPUNFI1NzMUZSRlpsazVDKkdHbzhNUE09'@;
put 'PC8pMTB4dG04P1k1Y0w0aWF1R2ohTHRMY1ZuRFh6PEY4MWpiYlIsMWkwK1M6THxoRnBCSkRFNlNxdko0IzR+ODw7SyVmZSJXdXFmVFp8Qj4kXXI2QDNuME8hWWMiYlIpNzYqO0E3PEA0T3RiOlpxTX5dRSFKTnQha2h7LH1eL2lGfHVCMTU5SlFJNGU9UntrdXtFKDopaExKL3QxTlE8dj0mM0Nr'@;
put 'SFp9MTN0bkJURyElLFNmUGEoI1JqeFIlP2pgL3diIkY7VDR7S0YmTWJkekd0Z0pJYjlvOzAyR05WRWBGeng7PSpNYT4hU2lsRmM6dTtmXllBOG0zZksieyg8c18sK352UT1TWEB7fkg1fHYxPypaMDM3XS43LGJTRzJ+N3gxUzpeeyNjVEE0YltLZlZvbkJyOXo/WC5zSEpqTDpBZW1kJS8qRl1u'@;
put 'WlVUNHM/cilyOTZtNWRyYUI1V0d0K3luWCFDYG03JFZpZlt0dC5rfXcrKi5FYDVnTCMuaC8qdFQiNktRPkozcklifFZKPjBRa3Q9RnxuK3h7KDlMRT9rO0VGcGQxMHtuKiR3SWtjaXxfZmxQTXppLFJzUGgjQmNaKzI6REplLj45eyRzcEc5QCo8JjxXRWVAUkojOCt7QHMoKG1dLGEjTXhefl0r'@;
put 'Kns7Uy5QPXwleDZKX0kqLlkuR1BPKSFVTD5IcSQ1V2ExUHVWfSQuVGZBQnhRO11gYGxOXzh2cmokRzYwSTNrMio3VUZQKzdoW2xsJTtla1Y4KiRIO2BoYDtgSkdebkZValV0XUovc3s/LEw7e05nK2ZWRl0pTk11RHJPJVZlT25OcXw0LzVdbzZaOytodTYqaDVfMkw5L1VWUUtxVWs5QHkhJGMk'@;
put 'LiRHXUs6IyFHJkM9RCtQcGleMitDY19KZHhgdT5JU11zNnxuWSlleWc0MS9XZz9uc3AoRS53fUp7YEx1cEpgajo9XVk0ezk3TTRBfV1VJV9gWHxKbUhFbXV8S2hlZUNeP3Rlbyg3Zn4/P3xJQD95Lm1ndDxCNmJfN3QpWVoyUl5eO31JbkpQLnhobUVfRyZ1VGwkbG0zLE85SjRYRjBTQjQvRThk'@;
put 'IXEyRSxCZGN1aG1Ha2xXTlJTc1FEVi4pRkQxVjg8SztiTVFbK31+TCM7ZGVkKGBSPT1EYTtRVT14KjhgLEdZTlpHQzhbNTgmS3gwUyEwbiYmVjI8QHFuNCwiOVpnbW50UHh9SDglMmRbSnpLcDFnWGhraGk8U047MlZCWnlsI20wezElYm9aLz11O0UzRlNOO2hCNUJ1WnsxVE1Ze3lQcV8rL3xE'@;
put 'XXpUbntNRjMoKig5Si4rQmxwWXhMNXF7OyI5JVEmJkV2PlRCK2MkUWs9LnN2QFZ2PllEfVY6b2JgLGJhPm5Aa0tvLHFqclh1LDZRQ20qVjs9KDpnVzsqN2NHI111RFBRVCUwTmV+Y3liX0s2UTs3SU1YNndyTUNBQ0pxdFZBIWpNcnVlV2JHTz95e11WcGBkKzBXcEllQCgvNSs1L1QvQklEQG5v'@;
put 'RW1ScFVSUigmYVJhYmxoK28wS25vdThVUVhvNEIobm5LR0lsOXUqdiFDSk88QGA9PC9DfH1nYj5XRjchX2lrZFBtPXducExScW9QYTJ4WjZdMSpJRDlMUTB8Mi9vdnc8U1hiezVMckBKcVRFc0pFNzx0WCwzfC88SlRxRUZabmBBaUAyI15qPz04QGxYXmxXJiJsUi9dd2VIU3IsOHc7aHcyYEZV'@;
put 'WWw/NzEydn0zZkpOTExTITZXRSxJS1RfdTBYfWZhU1Ykc01YW2ZaPltkYGE1VVMkO35bZGRtUWEhKi9SaDZXaT14MUdZYTE1ZnY/M2lwL3p7TGF3MFZ3cE8iTXlfTF43MlV2UVpwbWU/KCs7YykoWDFudXxxbFF+NHZWaEN7amBOOW9KM3lSOklsQG8zZ21TPkpyMVReTnVORWA5WnxUMFRzOT5G'@;
put 'dFE0OlU1XzphSDlrMSlRWUdSXXdlMSUmTjtoakM9eWI4OTAmKUlXPEcySjRwUXBkMHVrL1VxPyUsYlVHLz9kcXNPJiM7fmMveTsvMWQmWGRkJndmKjI+KytxKWAhXmVlNG81MCkvMEU1T2ErKUYiKyU0anQlV09bc2xJM2xoPTJud3dnJU83bkJfWGh0cG9UYypkOzEpRns0KUsjNmxMdGNPe0ta'@;
put 'IiNfa0JUPTldaCtgeF9QVHhlbDs+RUJRW2tNIkgrWXheUVJNVCpRMFlLeVNRZFp8Wk9QP2FvJUclcSh0RlcrdChEXSRGKlFdfGNMPG9EX2BLM1N0fEdPUi5EJUVqfkNTWFkoZ2ltazJ2T1c8QnZNaUljYGxiQks2PlliWDZufiVKfjNednYoQDpRQSZlZHZ8QWVKfjNSejZUe2ljaHtOfkFBYXoo'@;
put 'aE0mfV1FckpwUl4zMHxGOl4kI3Y3NzQoW0N3L345P1h7JlM7Snc9dXFIUGxpJTxvMlpmSnshWEJ0OT5oN1FlWFdsMixgOT9wSSY3eXdAaD0ma1N6UDJoQCZaVVlDWkNAM3h2RXR+OlcqPjJ4MGBlPDkhT1BrVGEmT3RiN3YvcnQ/UnwjX3cscz83SCpvZStdIUdLNkY1WjxOPVE6aztjNUlOaGt9'@;
put 'JVljQ1d1I31AXkVUYEMyImk6Ri4jK3B7XXBoUXk2N2FGfnl4MjFFMWUiQSM/NFtpbG9oLHFgIjhxY049ISRaSyNxdit3ZkxEbFRwM05kRilwTXx8ZyFkKC52ciJPM1FJdWBwdj9qQT8rQT1eV113QU9AYEBDXjYrWkNRJCVTRWIoV35GdH1MXmY7TmApfVAqfFM6UE1seyhhPTckQEcxMF9wOnom'@;
put 'Y19GZShtRF9uWiMqL0UvVzh2L2x7OXk7WTJ1MEtOdVoweDMmMypdZG4lOnF+Ny9DPi9fUkYxUWo8Zltsa1tPezh2XjhsSW5rZn5dNmhqUzxGSyowJCh3Ol9hQ0A7Xlk7eFhveUwwNUFmeTY4dHYqailSWChQZl93T0kqYX1EQGRiSlloZE8rQDZnNl5ja31RPHV4d3ZCYVtPPkwsPGsuTjRuVEd5'@;
put 'XTw1YlhSaCR7eyElaCRTRCpPbj5MdjZLajsjMHdKZzJocSFAM0B0VkozIUZVNWY5OiIzKmRqbGksbk5+QCZlOmF8fkptOSNRS25PflcxZWQoRG1iJH4qKH1UQ0F1PUUhKF1Jcn1jViFXQ3l0V3duPGhCNFFzb0l0SVA8UFpEZlFfTCslZ0YxLHd6UDFWPGA+TG9WYV1FOVNmVVtwP3BrUn1zT1VR'@;
put 'aElRYUMhXWxuUj5pQkh3U3JuX0xXamRUd1o4Syl5en1zezVSNT93T3RAYiZpcTx6V1U9d2FuQ0FVJlU1QChSUnE2VWxVZT84TGZ+fXk+SFpYZD5yeT13WX4iZF5ULzlxJnM7diFDUGBhdnRdfltsUyt5e3c9NGVQayxLRXxlQUdkQGtPQ1NdTEgsISQ3X14yT0dlTGNFVWB5STdnIXo1X1VTIiEk'@;
put 'Lj99PXZCTksySnBmeltPRnIkXmhXWkV6dGhRfnJCQjdmK3ZFYTJ5c0FzMnZ+fXZwUG5DZGBkSEo8bC9bekBwK09sTE4qZlBuPF4yenlydj1pMkZxOTs/anI3QkBKWDVkV0s4O2BbTGcuOFdSbiEqd2VHUDJ2I2h5K04xIVNEV2QrayUmb0FjJT9QczBafDVxS085JFpnbTRUYEdrSTohYmxIV3NF'@;
put 'V0ZrQ3x5XmNUK0JgdnVaKyghSShzU0hkRWp0cHs2dFNncVh2Ry81L0o0Sm0vXTFmJFghcmJTRC8raSQlbD8hQHZgVUsqZVdGXVBPS2FMQFU/WlFQSFFMakA+ZlM/SDowXm9NKzFdRXt9cWZkQTxXSyxDMCUvQFFvK2lpOTRNNyFAKH0jfXJnZmM1I0YqYW9ESGIhJFRJXlhPejNEOihAXjcuVlty'@;
put 'Tk5KNSMpZklAd0dacVFlWV5hYW8pYzoyczpYRTMifkF9XixqRkp9d2koeks6YiNJKklte3t4STBieGh3Iko8QG8zQ3JjMmB8Z2NFV0NbbkM6PHdmKCxaaWR8eE10S0olKCssUSkpM2ssclU1aFEkWklheiwxVjF7XTs3MTFKQlhiI34jVTRzSyVwW2FdMWVqKy43N31vdTRyUlRmOVM5VDAhSzxb'@;
put 'RGhLdyZaSnZzcUAxK2tme2M0b2p4TXB2TksoU1I9OSUqV3lIKXtLWX5nblpGayJebWk+JmEiMlpgPHBaKU0oMGJ6U0JOQD0hIWQ1bnFbdG9mLjVbKjlWSFVlRHRmNksicUxxcW1MTjhtKUxTSE1qPzgiRDZhTD5nM2FrWGxYZTxPdU9MXzM4fl5MKSUxYHg7ZUAqLi9ZL104Z3dSQ0RhNDB1OHNq'@;
put 'SzpXL159R3tqYU00Y3BsQ0cjPEskUFp4ZnZGb1NKPjt3THtINn1ZY1lSP0d1U2ZQQUh0dyNqfiUsQ34vbC8pby95Iik/ckViRj9EOWIveTRda314byRZOnJkOjhoJXUjVzNid3AvOVhvaDkhWC5TKzZiV3pEYzw1LHIxaWxmOWJ7bHIjcmN1by9EYm13ZWNVZmx0R29laj0lPUxTbDZIIks7PFkj'@;
put 'MFJzbnM6WUFwekg1K081VVt3SlhdPlkxRCRTU2RNc2pdM29LcFI7PHVUInJPIy5MSjojSXVKTjx2dGQ8YHlKR096U2MlSWxoSHxSelplYG0zYmJZQl5XM0YoIktlJWE4W29PKE49I106VmNqKyhSNDQkTFhxdjFERHh9NEZHQ31DMix1QVVCKTIlWUdTd2pKbmcvLmJRNXR6YE46TD11JDtxfUM1'@;
put 'eSQ1Q1dOcnNaMjs+dEBWaXlJeFtfZStPXzh6W2pzPGNnLGd7KXdodipjI0NsamJlazptRCZQamV7e1Q9cXc4XncjfW1EW2x0QH5EN0xTWG9tLCYiZUU3U09MIyxMOGlBTm8oVVh1dj9JWndZVDNgZ0dyemJtMEU1QThKSmB4RXViO2dCNVd3aGNEY3Uuc0k+fiNJJDZzbTQobzlPQlQwZkV8NEku'@;
put 'Zk51V2BTOUwvTFo3YmE3Ymx7VWpTZmBlOng2bH1TcTwvWyZaKlQsX3FxaHVWQCh6PypZYzU8MlVWfUt3Xz5ibkNQXlNMdWtQZn0+IztsYj9KbSpkUSVsZVY+eW50X0Z1N2hZel9pLCh+TSQzbjxDQDssRXdYJXZnInVBKDdNI2tlPy97flN+InUhMztmL2ZtSkA7WzhncVEvb24uPzBXOndYK1po'@;
put 'Q00wUjlCZWxtWCtESF55fkZFQ0pVYVo2cypDWy5GTXU5SCVpe0p2cVN+UktHXWJXISo7VSMoampheDNAWC5td1l7dzNsQyMpOGQuKSlAXzgoQUE7OV1uVlEjYUNzRDhYYVVlRE40dDtzUjVUblZkLkJSOVgmYWhKV3M7QHtpTX1lIkdBMmxiO1EhbTJJZEsiJTpHKGpHL2VlOk16ZlQkdD8pUmV+'@;
put 'YXtzLmhNWzNqLm9nOiZ0LHJ3T1FScjJDK1hlfiNRUkRyN3pQbDZPdUcjZThBWVRqLkFFXyhdU1QrRHE+TnErWSNYezo4Pmp6a2RBOi8sYlt4eFdbSCZtR3haZnhzVn5wZTN5SVVDLmNkanlfRXYsW1Z+dF4mRk4hb2Z4bmY/Jj0sLmM9Vl9faSVPNn4scTpFTkcoTnJxRkgyYmwrPk8jblhxfVk8'@;
put 'fHhAP1MyLjFGd35qK3spIWFaQHB2W2prej91OFdvQDZvKj86bklmU3ZCXl5LUTFTNSZLWFkufGw1IVBeeyJVSnVXJGoyRDZ6K0k0cVBFVHxoWz5fRWtmd3l3fGRpdy5gOFFtLzV1ZUJEMXVsRUs8KEZEPXYyenlUekMmb3VeMyp8WUcjN1glI21JMEBMY3xWUmcwSyZrbW0la2JgQ0Yiemo/NGFM'@;
put 'Xj5Kdyp6VFJvNUclMVNvck9TMlQmSGghSTo6PjZVeGAheGIoN1RCTl8lRUF4cnc6SkJWNjs2PVR2bCpfbWpFMGcyWjs9cGhHJGtfdVNgWDY7Pkgsa0J3KzFAWDt4T2ZIeT9TNHJOWkRZISVqV18oQG46NUw9b01zZSFgKlJYeWo1bXBCenNiNWxuUHBafnAxIzRbbSlaUkBhKTZwR0UrRll2P2Fn'@;
put 'bjZAMk5VKUt8eF4iTztJM1NKRVN2I2wpQ25FWFpPYEE5Q0huXWQjRD9eQjdoZWdSVyZeNVVHaikxJXglcWBgKW9MaSppeSN3R09vbWsxOFtyJHs4QGRwbng4TlJnby5NaS5GKX5OckZdXWk/OEp5ZXE/cGxUcilOTixyZ1NFTzxbOzAySTM7RE57SVpJbFspJUt3RVM7TFIkbE1SYi8lensxZ3tj'@;
put 'fm06JF8pSilKdXtXO0wkalIkclpBd1B4fV4ieGNwM01CKmZ9Inw7SktTbGI0LmMoRUYlUC5vXiZ8YjJ6YDFCRX1tMD18USNhQkdvI2l5NXhIVm8sVnk7Q0AlRlJbcilwXSRtS2d8OERHYHpYOih6TGppakkjKE9bdGBQPDpHJnA9UCp+PD58SEZnSmsmKXcqNnkrU1g4QElhczkpTnB3SXxHUCND'@;
put 'bzVzVWtaPCp3Z04xST52dmwzTyZXQHp+cTxsZzVHM1ovfHJFMCVAI0BHNXhJfjo6e2pOY01QVWtSSUwxbShTPilHMntaa106SyZtcDVtK3FzeTdwInw2WHJuYmlVd3Z2cVtqZTRbMlJGflAmdXkjSmlvX35wR1U0XSlrVm9GPjRuM1EmeVtPWkZwX2VlI2gyMCxBbXs1KH1+ZFlJU091NXhYPlZO'@;
put 'O3A+NWJYcFsuciomLkNFWEBmXTB8bCgkZko0VUYve2AlekYhQnF3LzFbTlg/WWQ1VigoMklWcT4wW2lDazlQUGp2KDNfZzlGUUNQRkAuMUxTbjllOTlJdUs6SXJvcU84bWpQJnU4Zy5CVDQvVT1OaTUmSnVzKCRiS0gmLzcscSRpYFQzWS5+KTJhJlh3I1tIV2t8UXp6TldNc11uVXRqRXtKVWpX'@;
put 'eF4vV2MuRTo7THRlI0lzKUUpPEpreXY2fEkzcDcuL0F3OUhgJE1LKkczSCkwMjJsbzFgZWE3VVZDSz56dn1pUFBPKiRVYyRpOyhyJmMhRSFBPW9VV2tBfVs0dzh7YnNsSV5KeGMhQk1rajVQfEpfRGVydE9mTD1zdX0mLDQ3aSNAU10sJCtPIiQ3Ll5nSnYuJU5RKzdfST1EVyV2TTVYdzkwSENA'@;
put 'TmwsO0A9USxhX3NTUTpIZUspOUomX1hYYiliJWBHRGJoXkVNMVh1W35tPWkmJmdmKmFWYjFDUGM2dTl4Tk5lVi9gcUxFW1okRjd6VipoU3RxXnByQ1t7XmxMI35fYztabjliJH1qJD8uUUJePEZNciN2JihKdnliXUZXWmpwOilMKW54KUduI2ZaUi9YKWBKfnBXMFAwRiROfVhuUmFeODFiTnx4'@;
put 'SGBvKFN6YTxBTktAQyo1flBfUUBuSEY7QlYuYHhnbkk/fSk9cHNPQFNpL2VzSkdVeHYxT1M0YTpVblE0M0FscDJoTkRjcjZvbSVuMjguMWpPQSNuZlQpIV9QdjBjMTY1ZTo1SE15T3BGUmV5QzYoZzBbUXBuST0zQjJXSHciKEMrKDM6TlUzV2EoVGJhXWdTaC4uR3ZWUWdDRnohKS9NLihLUHBV'@;
put 'fi9RYEk0LGQobSU8PEdhZG1tdEl0UFBVUjw/WVVXfVZKJFBhXktIKEJ4VTQyM2M1L1oidTRgdT94RXZjcSZxdEFXME5bJlFKNEYucDN1aHlQbXZ1TV4uITBie1hOYz5UJkBpUH5iPHdhLlBKVnxjUmJjWlluXnZrXmBZZ0V1TUYhPlI3KXhRfVpbVCUmfjFva1J2cDNeWU9YSDs7QWovY2Q+JjdY'@;
put 'PW9YNSR5PU9mYnxKe1YjKjhVdkNVXz4pSzcuNE4iI15Lb3ZgUnh1a0khL0w/UE1iT3QzeUdVZDBhTHE5KzR8b0pmUzE6Nzs6Z0Z8aSgsfEJYMXBuSms1JSZQSmVHaXExVl5pMz5kc2tAdWZ7SW5sdmFhdDZzV1VsNF1baFp6NSRmaHpFSjp5S2BCLj9QIWhaJXRlIW1fR3kqfjNSNnl6d3E6N0la'@;
put 'ZXchaGl5WThaYCJSeGQqfmNeNTBOeEFaentEWGB9QnV4LktYWSkoNXVLXzlXT1R7diVHNXJuIzEqaklpbTk1UlVHM1omPUd3MUI2MV0+MnRvW0hSKChEYWV8OkdBdjtbb0VoPHYxPzFpNm9VMFhMc199Z25vYiZ3bCNKb34uZChuQTIjemYwc3tpb1lsQl97SkVqVDYlXi81QylYVGdofXRTN0lh'@;
put 'YFhIVzQpYXRNJklVOGA4cy9qQWE+Y0dybjlpMzBPWi97a1YjJGc0ZzgzN29XWjltcEdmb0hDd1BiIl9AT3M2WVRYJVYuTTQkZzxCK29CO2olL1lraW9bNVUzemxodF5MajhwKik/JUhYLnh0OmEuUU9tay9HSjFZWndNcV9SfS9jNUZRNCkkSkJDIil0fTxSRH06JX4meXVfRG1gSWNfMDB7L3o7'@;
put 'aCNPfG9mc21xYW19UWdfSjVCST54SFs9UGlqYXZPSF5TNzxDW1hXMUd6ZElDOEhdUEgoYSQ6JVR0KEpEVnpvREooPyY2Ll5NLnxQX0U9P0lHI2xVWC5SfjtSSkwud1dZVDYoYSl1Sz9meXk1UixNWCglT0BOcFFGIix2XXV4WkxgODtmW3AzUzZPbTVDP35MVylMKjdleFZdTVVNeCEqIW4+Xkdw'@;
put 'aHt8VHhfWSUpMChVXU1YRzIvRUJCczFxN1ZDQExmL0kkUGZPP3hrOTRGQz5IQWpVNldPNkhVfSNAbF1NXTNEMVhoZ0p7LHY7Y1NTbiJbLl54KmRCXTVsTWBxZCokVjltMU9ETHcmTGBKe05gI0thUDZGMCJUOCxdOm0kdyJpK1ldLFhXLntRP0l7WlFEST9ic1hdKTRvamlrTCRRRGs+JGl6YkhQ'@;
put 'P3leRVRwQSl+TEhnSG12PUhFSnhDVXVYbHs0Jn5kTiVDWTdQeGxsNjRwajpCNHJCSjdCRE9Ce1NbUTJkQHp4bjJ+OTgkSitNREo7IX5XJS5CcV8hTk4iUSxVdC9MODo9cF5YTms+UFV1MDJVK2NjPWJUbVFrWFJISFpyR2lRUjF3RHwhcnROKUdbWittcE4qV2diaD4yWmM/KHk1e0NdPV56Olln'@;
put 'ditVMypoWXwrIWl4NGtxSXhLeURlLH5aTjZlUC99TlhGMSQma2RndVc2XTcmJDBWckpmXVYyRW5BazRiZnZmdHM7P10+e05uQHE1SDV9UVhMW0ZDVGkrK05kJExdIUgjZTc3OiR4V0ZHS3ZeMmcmPHJ0RXdMZ3YpbWJkWVFeZ3l5cFE+Jk9xO1hGd016d1prIW4+M1Z5TDQ5YHFoZGtyTXU7IT8j'@;
put 'Ilp5LiNGRDRfc0ljelNaW05sTXJhYzluPD9wXzw+VEdJX0Z7UHtjU2lyK0J8aXpERl1+Yi9LN1BXclUrU0JHaDZbTFYkP2AvMUp7ZGBoTC5iX002Qj9PISYjKGxTNXo2KWNrN3p2UDVtY0IkSW9EMmskQT83KVVSPFM4RXAja3NBP19CRl11Y2kheGFATV0/QSwkb2QrIShgKlFXLGFZbXkrYUJN'@;
put 'eWxqUXgzZzV6VmNLSG1pWSxbTDYvd0NUeD5dP0w3aCNkb0UzeF1qTm1wc0Jvc0UkM0lhdS5tIW53N0dXdH1vaVRRQWQ8TzJHIiVlOmZbblUvSG55T2U8NF1ZXU44cjpMOyR3JCEuMG8kcn4jdWpeWkBmWHR7PHJvXmBvPkd5ejIrVGspL3YqNl1YMVRsIiI2UnovTE1kQ1Q3OXhVanZeRT85Y1l2'@;
put 'ImBaSHw2VzRYIX1TPmkkJkdLVkVDSU1RSlgiRiQiQ21qSz5faUx7Zl9JPGEvWW4oOzhRNDdhTmUvVzQwWig2SXkpKUNATiI3UlpuPmRGMDUrYXAlK05qdHhgdypILi9zQTBeLjYkbT92TH4re3hOLDRYc2xONFFQQnRBe2JeJjleNGtdQSpabEh1d1YzVyt3VkNGb1ZXU2BKYSlaIUM2dEMhQjxm'@;
put 'MWdOZFJxcW1hNWs7YFJ7NiZuRTpOYUJuVDFEaz4pS0Vkc15RbGZLcXx1ImcwJk9PKHo2QlJFd3dSSEdmaX5LfEQvNGd3SWJVJnxNIXtJemUpY0RZRCpQZnN+aldsUF8jSmdfTktnN0k4L0xxRnprSmd6OSU0PiQkVEZZbG9oN2ZtVX16UjxOVzhyMGhZVE5QTTtvR21dJHwzKkQ3SXF5TmxbSEA+'@;
put 'T2UhME08PjQoTk1jNmBmNX4jV1Q7SkoudylbcXFGLnk1STEraHd4Vj4kSTREZi9bNV5CTFlAWngqOEg4aUQhSmEzeW9NVXFjI1tbZ0k7Y142cXZefik2Tkd0fWkjazp5QF80WWNfOHteMnV1UEFoSHBEY3YiNVpmTjEwR3V3aE47dl16OnRKaz8ofmg3WlBmfUpLfl16QD1JTzRMa288WFllRkE2'@;
put 'Qil0TUNkKFV9USVTe2VMM0MpRyRTQiQ0MFcwMUZYO19ncjs9eUNQRUQ6d2o8L2dESVNNN1FEN3omNWlnQzE2PmBySnpEeUUzXV9CZ0FfZ3RgZkdFSSFIVl55I1duQ0Y9XT4kZjB+JmhJX1FHRTs1ZVgpQlVJM0B1dzJeOTs3d3IlflRhOUhnOGBmQE5CMVBIZngkSFNbbSZvdF9iZ3dbLkYpLGw1'@;
put 'TCkqZHJWRXw6NCk3WTQjJWZFc0JBeFNiUnZ+NHB1aUt6ZzVASEdfUXJoLE0qZmVhIWUsc14rck0lL3pGMn1+JjVPSTBBRU50JVoxMTtTXWp7TTw/WnpGJXs2ezRMemlecSVUSyV7NEYiWF1gRF5wOH1EfXlMPC9NbiNhMTwoQ01qazxkND9xb3QyKEBRd2ljXmFrbUQ3aXByRDc3I08zQT8rL3ov'@;
put 'OldLR2wmeXIuRkU1RGBoU1Z8ZDZ+IXlmQ21ZLFA5N2JgV3tCVCp+aGRsflRCLyNFI1glUl1rQztIVTYiYClocEZweFh7R2YiTUY6L1tdMGZDKEo8JldeRnd0M3VPeEdzZ1cwWTc3NFM3SFtITHoxaUIjLGBZI0cocCZHVnAqSkNsZFYvO2lRPT1+b09vNVlPWDAxT2h5JjJwUSlHdHppTk5lcDNt'@;
put 'SDNBM1lhM3NBKEExVWksZjohb2Q6cDEhWkxfPHpwRnBTbHliYHZOJC8yc2Neclp+ez56TyprbXt8Wz51VzopczI0WGgzJk9EI0hhLmBxK2xTLFsoelBoVURzdjlVOkAsRDs0TXs9d2JwKCpXTElPX3AlTDJ0Z1g/JSZkIkVNclp6Py4wPkR2MlJ6Olt1NiMyKXdfRz1gTCZiRn5vWHZRdit9LiQz'@;
put 'NFRrO1VSNTkwRXF2R2w3QUImbV5pajolWjRKYHFFcX5rTitveClGKFVKRSJ9OGh5JXRKYHdEJVdnQFleWUFuKzZnZVQ4MG9WRk56dGB+L35jYz8iPiNOamBTSDdCPTdnSF1iOlYvWiUycGQwME1GQmRqOEx6eG88MD9eKmVjcCoqOTA6YGpiaDtUeGc9QnYlQ0t1VjRYSXZhRGZ9IltpeC59Q314'@;
put 'JSRhRntLdDRhZXRlKURIZ009e0VqPT5ZcGdFRERFfWFZa3tpQFYic2s8LmJ+TkF1e019T30ha0wuZH05OGxqP0JsZ2JETzZwJUVdJUNdYHwoQj0sJWx8OVhuejUwREJ6M2M8c1RzKCN6LG8weXU5Ql5wb25WWjMuVlI7R18pIWJgVEMrLCFqUTphW1p6Z0x2akBDVDt3RyVXUDNWZ1RCI0Y8V3Zs'@;
put 'TylQYXhBengrbj4wdzg7SGpxL199cy80X312b3wkdShCbnxWW059VSk2UylsZDV9eTZDQSFlfUYqWlhFJC9gKVAjPlddQW1JTjZNRF8rdzF5c085SzpDM2k+UEpkZikiQyRafjJkfVMrQnYvVzlqLywjQG9iREwpVTlaOjFZYltwRTBSIUtOZnZhN3BiSmE2dShWVGlPOStgIU5AYjV6amJ2d0g6'@;
put 'ZlJzOTVCK2t8PkwwTV1QSTNHKjwhPmppLkM3NG4pPllZVi5vcFA+WU81NiRDbE1SKk84PEJIc2VGIiFAPzcyZ2xCK2Z2fFBCTihaR3I+Rnp9Z1dtMStJZW9OWkZhUFNEK1RoRUpPajBJLG9eMnAyUXU/Xj0mYzZ9bD5RVSN3UVJLRyRueHgkXm51PCVaPWBFSTh5QmBLdWFYMXZKZChsTDxTeHs0'@;
put 'dkY1bUxTU1glVCY/byk7ZkZRZlM/NjxYdk8wRGl2ZD8mOnx8Nn5fbV1aUVZ7S2ZWQWlNPzpqMk5MSnYvelcqJiYuam93NFpdencqSyR+SWU/aGpBXXcjLDBKWFtuOGhXbE5kZzRlI2FFNytVKChPJWRAakluUTchfkMmM1ZZaSFXKUZHazZlPCRbSnNDQ2RBUileJFQ6ZXdTV2JfWiVAJGAid2BW'@;
put 'Rk97YCtsP1smOSMvTDF3e0d7XkZUMUR4fWB+fXo8TnFSUyFDLzV2SWcrPF0hX19gZC9jJXNHXTpBK2xTdVt1Q2xXNHxhe3U1PD9gYyEvNWxrfChXd0Y6OU9eNGUmfHhId2ZeSmdALz1lWz5JRmw4S35mXlBzRj1ve0s4ZWA+RzIlSEQ/UFFsTVd4cGRqaz8scnZeNSU8WGBBfUV5dCRFRT15czFi'@;
put 'SGxdXkcvZ1tRTDRHQ3YoWklQR2BwdmE5Y01SJGE2KmBCeDNnKCFtU2B1Ny9JPCltO3F4P05rMURSWnVPViJlP2tsWn1lZXwxVVNtWW5YUT4wImt+OFg1bU8yK3NHJVBLU355WXhtUnBWXzgxcVVMV3ljfXFhIT4pfGlWbjQhenZCTFphTD0pRWtHWiEwVSIlYEBUSGFkJTtaJCghfkRmQSZYOTpn'@;
put 'VzJMQDJXXlltME1vN29JaDcvY2xaST4oJF8mKztCaU1+PkssWWA2dlJ0eHIidiJPITpiUiVRbGc0T0dSUj9ZM2srWmExSGB9bjZHVF5UM2x3NEoubDc7QnhVWmpjOlNxV04kNyJ+an1UPndtJXJVeW00ODE+ODI5UjdZdl59V2ZHby9WRXNVSWZ2UUVnKEMqeEdmWENVKXh3elV7S2R9P3h7ZGFb'@;
put 'SjElX29TKSxGMm90TUVvLjBHJU8qekpaKkYlVmNYNDg5cHlCIiNXfUY0Ym9+PVMpaXp2Lk9WRm5mT2FjRHYxK0hrMGUvY3h3ZzY0I0NeR18wfWJvWSE4a3ZXJmp4Tz4sciRRciEkMU19cElCaVV9PFt4Kk9DSjZeLzdJSSlpY1ldWnt1fUl4S0t8cUgvRTtBazJzdyhoKH4oZm4/aCZeWUhZYkN4'@;
put 'XUNoRktrPU1MQzVnZ1RqUChaSjBwWGN0Zl9eLFlVdHxjdUtuYVMjXT5DP1hlOyJQd1lbUSFdLnZaVW1MWkVWI1lmIzp5K2k/S19PYytlMHJDNVlvcldKbiQue3YvbndNVGRmO105cTFhKzl5JCpiYmg+PFlYPFZ0LHVRUixgdlNrOC80eC92eW10WUNiazVSWmB6bmw6RlJkYExaZyE9L1ptRyxL'@;
put 'Kl5VeyNYd15RUDBVY0NLeVZ7ViR9bTdqWDZbQDFyXmc0XnFYOkxFW2xZT3U6W19UOkltJlsjMTdSTXdYb0laUnJHc1JPNlFyTSo1UT5bLG5mJFVENXImSUk2MS5XaD19XVcjL15bVzhgUGpASTE5eV5nYk8lT0RuXW0lQm4sYk9fLCkmUSJsK2J6QXVocHZ5LFNOS3A3O2cuIlpKak80I1osTG4+'@;
put 'UWIxcXhkQnQwMDVXbnZCVX1JIk1MdS9qVjUkVy8zfmgzMFdrWk8rMi5YcCVTMih9T3FySkooQk05TjgyR0lSW1R9JEN8Xmg3MGUsXn14MEUhL05rYTVtfj5hXmkmdVNVW1Nsa3t+cV9RRW5nd2xZMm1hO0pqZGpvcVlRQ0pbVDhIKyhNIjRDeng1Mj5jOn03QSVnUVF5dCJ2P14+cXpxIyxPVyo3'@;
put 'fXo/UWdZIXR8NiM0cVtFbl1MTHA1Tj0hYnEubjR4PUZBbXR8VWhTdl9icXVpaEdhLjEzJV95Z3hfOkY1Zk4+UWNGZVsjSyh1OT42NFBDIkpiQk5UbHtyWEJqSm1HMXJGdFtRJnZhOE43RCY5MVgqT3B4X1pOdk9CKVkmY1B6W2RfXURRLjJLTmcoQCxIUU51eHxqKjdmPnhSKDNvdzRKXkpReTFL'@;
put 'JWFqW11FbjJ4S2FJcTQvNE1JJV84W2wlbW8mSkhzeUBYcXx8UEFJIUc1NGckemN5WE81d0MpJTZwSGpYeU5IQV1GNEMucGZPZj5sYyxhQU9VdythSyhnXlNwQWtoVXVDYk8oanlrWmIrezdIQ2F8ZXlDS0dJPHlgbmFuQ0t+OFk9Qk9ucDRDPk99MFtTbiguSHhCSktkIXxzS3QwPCloZGNUTDJd'@;
put 'YDR2aWpoeVErbTFncCkyJVhEPjs+ZjsuLjB0QFI/KlNxaG4+Tjo+M3U/OFhiPCx+SCYuV3d7SUZuRSJhKi4iOyVuT1A9QUNyX0clalt6PXJGNVd5S0ZlRjRhTmdDOWVJKXI1djd6Milqc1JbfT1ReyRkMmNEbTolVjFbQV5hN31nTzcwRzNwVmIzdFMxaDZGYjJ1QTtRL1REWjxDI3R3MDorKkF2'@;
put 'QHVbUXZkZUFjW3A0R2BAeV0vam9BTFZ1Njl1TnFhXXMrfm5wQCpTTVJmbzVzODI5cUBObTw2TWdjUnB7SUF2en5jTzJnUUdNOig8X1V1e2FBKlpkfHYqdTljfWJPRHpUVSFLUn1jYDwydWR9RmNPaT0sIkF3dGxaInpAN0Izbk9nV2ZuSWhxeGlsc11rPk94L2tFJSs8SXVaeklFZ1Qxal5JZG4i'@;
put 'I2BsQSZlKSxpWVBHN0BWRnwvYzcjWyF2SW4sInVSUDRkPHc+K3FLYyhTeSExfVM3dGVIVyNhOG0hakJ8PWFhWVtScDIxXklnWnAqbiYoKkNnSl56TDBSWHJ0alRqMld+cDshR2d7ei81ZlJObTF+Xnk4JHRIRV99NUgqXltqZGpVJGskTm1RT09DLEg+eyZqZGZQcTgpbE4+RCwsd045Jj0mRWth'@;
put 'VXBIVGdEWXc7I0paYXguakF9MnhFSWRVOHtqdUp0Ijl5SyIkWSUrYiRDRjkvNVlmQ15xRmk8NFk1dXN4c1kyM2l1Z2FNfDlsVHgvJCs5dXcrdWBnM2x9QmBsYi9rd1IpbGE8OyEuSzNadSNNSnhyZC8+Ym9eR1djelM8VFI6aD1CdndJfSEmSFlKY3xsVCFKKU9jdmVILEVxLnhwSSwpY3FKJm1a'@;
put 'MH50QkAhdD8jXn5EJUt4ejdHZFZFPzxCRl9IQnE+OkM1QXdvIjh6bkF3R0hXI3pbY0l1SDZNQzM1YDpDWCYoX0d1QilJcy5jJUx6bGdPeWk/NW0qcipZbitiU010In1DS1dxYWxOKz4vO0ldc20hIkxdSXMvYlM+dis+bnEvWk82YEVfRCgxNXM5WncucHkud09jL0ZRWVRNe1E3I1loUExZLG57'@;
put 'TD5bNXEuM3g3W2MqYG1tZUNsQDdiaWNJLiR4cVpLXWlJbmkqfHAqMjhSOjQ1SS9QTWFVO3dtWWpIUy9pbjdJXWBebjtrX0JxZDxqXi5DTyR5Ykped18yb35AP3A2aW5BJEt+WmppK09vcz09PjRtTDEwYX1MMHBOKTlPbn5JUmpOaG9TKStRRX4hYSEpJjw9fTVWSGBdQXZQOzUmIXV0PWo2VXQ+'@;
put 'NHJ8O0dnXVpTRltAUltyWWNzPjdCcWpxVCRJVG13KCNvJklyXTFMc3wmZEgjJlJWKUprJTUwe1dWMEgveGw1LlU0JVV0flo4NEwwemZZWismN2dCO2shaWdDRFRmbFVBQT1RNFFJdkpOOk5gOiRrc3UxVVdwa1ZXWWFXX2RYdGp2LnY+P3V0bi84I1s0cmlJT3xrfU0uYE9lUVJXdDN0cj8jPGt+'@;
put 'bkN+a2M8ZntvTlY1MnhkIXwqKWIpWjMweHB+ZSkzKnFSPlckOFg0YVg0MURqSipxUTlNPSVDd316R0U8czZzR3xoK2ExVmI0e0k3YVdNYGVJR0QkUjV6V1p+bE9BfVE1eTFTaXs1QlA6bzw8LyZBSyNhOltiO0pKWTRPaTMhRXQxUk4vVEc0TjJ0cSR6REtEXl9hRH17LlRWZHxUW1YvLH4uO005'@;
put 'SCtESnMrZy5fIW8iInx3I2o2ZjhLNG9KMyNeUWJpbGZLbT1mOmd5RSZwPjUsJVFlPlsrcV0ySFZIWi9MTXozc19lbUQyKUkqZTJMbl1ON1BCemhoamswWUhwRSUublUyP0k1NVA3eXgqPWRNNyNJLmZwY3NEVyVxNGQzJDdwYiZaVjV0VnVEUShoSGBuPkwmbm1VUE1WQCF5IlVCKGNjZl9jYjYs'@;
put 'ZlYpQFlYMTlOOSoxPmU0OT5+T1QuJTVRdXYqcFJ1Ulh3VVlCbFpZez5KVy5+LHZeZWFTbVB4JVp1IXEseSMqVFA4OE1FQTl8RkAuMD02Zk9Fd05KLkJxSVhSfDNCWnE9WlNqejFoKXomcjFdZykzMUV8VC4oSipMPzZ3PXdLXypJUTJqNkZ8MyRkIWBlaU5RdDI/R04yV0sidmJUZ21nNThlblV6'@;
put 'SnRSLy5eazIsWDQ9P3g7TD5fOVpENkYjaGAvYGdhNiQsPEckT1NdRlo1Pn4xa1VGOnsrX2NVQmY3PXt0NWdEcmFhVlgpcTAkV0ldVmtHVltCPWt8NCQoRk1VLiNoMX4yaFM9Iyp1RTghNmswIVk3TDF8UiU8SWl3PTJbRUZedldIcHkkMyN6Ly5mI3Fzd3NXaHlPfHA4PVlrSE41KDZldXdfUTNs'@;
put 'UzRfcHVHaWYlT0pMejcuJG1dRCNKVV1DMURAISleXmp6JF4lZGBzYWxlO2pmd1guUkxIdW5WSngiKD9CZ3hDeHVyJnRae11sNSNlR0NlJlNrRnQ6bDdPN016VWhzREdjUF4+OD9MOT4xVGUmd29UPFZddHtqZyJKdXtaMlYsX3hrI215a1h7emY/aXEjLCZpIyFNR35RYkpuQyZtckVAalsjSypm'@;
put 'PHt6b1NbRjdOJEJlR24qYmAqPnwyfmEsbnZSQ0siQ2V8XkROYkJFZSw7TDBtME40Q3BAOVB6W3V5SCNOKVBjYVlMPVJPNUNpL0VITDdQO1FHUmRnblRjMzxMMXVJfF52eD1MLjhPNExAPiwqaUU6K2QvckBJRUYxe3MwZkAuS1R8e2B9XkpQbGoqRDhycm83XUFNUlcsQFZ8XWBueFddJlErdC9i'@;
put 'VF1IRUBNVX1PcVtzX0lsPzFxRD1Efl9eM2tkSV1jbD9UR2oqRmQhdkgse2VZdiIoUTgzdGt+O207U1Y0YTd7WCZxRjBCU34je1QzLmxaVWwoRH5fRGhTKn5jLG4mSmdILjszNkQ3UkNOTjE5bGJrQ1daYC83bTFQOmA5QWN1YkhLdiVZRWF9L2tLYyFBQmFwR3xDS3okbFV7JGI1WTRDajk5XTxu'@;
put 'KGZsOzBEOVpXbW5aSzVyZFpNWFphQFRxYjtJISokcWdAWlIoSXxmPkw8KT9JXjxGRUVdRXBZZUxGKVZKUEtFJS9jNSF3Z0l9O29vbXcvMT07TitVUy40RWA+Ki57MVc7azc7TmMod3x8Ky9kYGBxbyRNO3ptOS85MktTcXEwTURhOTpYdk5eKT0mS2pee1hMZlp2dEQ/YEVROHNnak5gX0sqJi4o'@;
put 'UHE/SW4qTkdGNV11RT05XWBLS3tURWd1dSZCOjhQSVA7PzlrT2BySHlfNFFAVGF6ISlleGJQXWBAc316UXw3Sz4oSVQsYG1lYi52K2Aobm1eRz9COS92S1YjPH1ZPF86UU8jdkRJY2M7a0p3fElnIjQjLGEjZllMJm1yaTFNdjNgMDVbc28+Qlt+T0lKXjYkaT1ac0hHPHNpIzZXQ103bl5IaiVe'@;
put 'c21wZ3h9WW8lb3Vhe0dCKUowRVBeSkpYJFNJRTgzIihZck1eVWVrUXZEMnFWUW17VXBifit2aUN+QnI9KEpzPD1UTTU1b0Y/PzxJUmhmVUFkO24rTDNsI0Jqc0QjI2A0eWpmVzw6I0JXJmEzfnl3Zzx6NGFHKHMuI3B1ZSNVP31AOTNvdVhlS1hJd201JVN2MCRkTFlLaSYyRVNQcEZ4S0t9Z1gv'@;
put 'IjNRMkZJMk8ucztyWDxfTHVnNkg6PUxjMG5McWA2VTBfQTlbISRJNHo5IWM/UGwpY1MxTT5kI3RgekRkLkRqL2FvcEZOVk1NXmkpSXMpLk0iK0k4bCE9cnZ7aUgxTG9gJlhCJih2MWQpUSNwNlpUPjk7VTJWckFgPn5SJEFSNHk4ZlNobE9PVkAzZ1NrRFNAYG1TW1J2ekooeFcwMWtaPUA4MWl1'@;
put 'Q3l7YUYsQHNTfExqd1RhVzw8R1Y7I3UkUT9uVUJKYUkoZTo+Xy95eDdwIT1OSj1ALGswcU1HQzQoOkVifU0vc2BkOkZkN21HcyFDenNsPmBzOGpRW09gOXYmJXNfQmhWIjJvdEl2YSRZa0p3RV13YG4hRzF4IX1sMS5kaE5uPXBgIXA9YnVtXVp9byVnKHAkcGRzMkBRYjElOjx+LyZJNnh4bG9Q'@;
put 'bDxwfTBEXlpEfSQzbi5iTVtQR0oxVzpwNTJ1Qio3Ikt3IW0yJGF3SXQ4SnNOZGdsI14wQFZsOmJ2L2hbLjQvbGJuW2x1Rip7TUFKMmBPckR2P2IqWGY6Wl5vc1lHdTJ4ImV6ZU50JjlzTSpWRkhwUnpPIUJwa10wTyozSXF+SSslfTxPRzhqcjdxZmNOYnllSysofmQ2cG4/NHBIc0thIUFMMlZ7'@;
put 'cHkrNztsYExNLyhyZiNOYHJiMHl4dD9MdF5GNUx8eFY/MCVxVGdpS3ReYVI9KUg3MyEkb3tmWVA4VDxyWyV1ZWJwSmNiUjNaZmF2UiwmTFojKFhDbXs/ZVJbZXhrR0x5Ni9kIyF3TGw2UFY8TXl7ZkF2eWFUQkYkayx5TWRBIkVbeFg3YDhfIlp6eVA2Rz5oaCMoS0RiMExxVitLeiQ6d31gJXs7'@;
put 'fjI/KH09X1RdTHo+cDk0UFhoeS98QG9bMyEhJl1RcncwTTMmQUE3LGlffHQmZnhGOCw3JiY7KSYpdGFTYXY0U091bnltW1B5OX1DRHFFaz9OUkYsemJNUjd7Vm1qb0dgZnU2WC5YM2dbQCZUMWM2b3lhP3MqZ1A8b1hVP3UmeVBqfnRdMVFfRCNIdVckKiRAa09kS0Z5SXdHKHwvNWpTZjhUS2xh'@;
put 'On50I1lFfT8iVjxCeyM7L3B1ayEvNEVNMEhTJm0qZDsuaFRvSCNAZV90a09UdCJ9L29lLGcuX3NQSFVlaXRDdVREUTFLd1liNCM8bmN4NkBuQ3NibjY3fWdbViFVW0l2b2hiJXszP1tbPn5hU09WJlV8LmBeQEc3WH1fKDBJV0x0Kl9ZdEY6enhYOj9WeWRtS1hFJl5SSmRtJSRtc21mNlgyLGNi'@;
put 'd0ZLQHVwJVNvNFlteXF9WS89JTBhcml+RDIqLjN9PnxmTXVZX0chVCg0cThqckNsL3x3ZWVZOmt5Iy5rQWcjP185bnRnR1lPKyFNMl8scyw8KiojKGxoe0VxNjpOM3U1SHhnIVcoZjtsOUFRRDpoSFI2YnYwOi8wa3BwUFk9eWZSfUBNXmZCRmNWR0lRVEhZYyhXUl8sYj9xbjMwL0w1ZGlOTylx'@;
put 'QGVbVStyQjZ7MF0mV3IzVz0xUzUoIUdbMHAhaT82bEN0OVJbMiFLWFYpMiRQX3kzfkhaL2h9cipAWkdWTU9kJD5NdXV9QVJaRFRCdiIsIz0wS3lbP3xYb10lZGJVbE1HKCVtaHsyND9JK0NKZiFJLkA1a3ciSDVpKSkkfShRIUxESGEhSTpFdUBzYXA2O29TQmJgbyRsRjA4Lmh0X35GIW9nYG5v'@;
put 'SVJCYGNdfFl8cU9JQ2JhR0Z7Qm8pUExSbygrPzEsQUUuWmJGd29jOSp8YUlxNHF7V0ldW0B6OFcmaiN+O2AmOSFwOV4/NWdQOHlidUpoJjYsISEqbDk6bCRfdlR5NVcia2RzOXcuXjc2WnpxP34vZHJlPGxaQyJ5QXhjPGZAPF9uT0ZsLyZoIV1zVyRxe2pZIiRqVldsODBiK3FNajMlYytLfEMi'@;
put 'JmNKL2NYPVNMbylWLDZSRGo3aCZYP2R1dGVsNWZedXlERHhpWF44cmBKMCoyVG9pcG1jRDUuVDQzPkBpVzFRVk9zMShGa202OGN6MjZFYTVOeUxUQlQ2Zy8sNzQ/L2dQSn48VjVIcCxdXTR5b3hNK2I3QXI7WWY1cjt3bF8yZjJMQCFARERfQFlUcmlzRykpNUo6bzFuSVhqNCxmQFRDKUdLL2N5'@;
put 'LHRrO0M2cUBybVEjdD9WfCozRVpWYFJ9MV01L3t6czx6JlV6aWh1b0ZrSGcuUE85UWZKL351T0VEenQjSiJYXztdZFIhYiwxVT1BUyZYP0IxMiVsOGRhd1lCenYvVVE2JFs4YCNoKTd0QkQiX1JvXTk5eWdHTWIzXVBiOUZvSXI2MUVQdk4obFMsQns0Ik4/MGtXTTR6Syhteit5cDR0dkxQYlU5'@;
put 'LmwhPn04VX5GRWtRZ1puQFRHVkYhYyRqTnJoSERObHoxPml2WU5mUT0mWUk1aVorLnc0RjFqekB1VmJtb05sQlo2JWJuKElAY3VSPipBOEk4Wz9jPCQ0SVZPdjovYyFqcn5yMHxJfS4zbT55RjByOERlMTVLZVA1W1Y8Q3B7bUJ0MW14PU0jQGlvZiwrYmlTMn1MLl9SQ21sX2FheFtBP2NRd2xS'@;
put 'cismYGxXNSpDP3VnM1U9VnVXeXVBOyYiKkpBYD1uPkxkKURWdyNfNlY4UlN4Sz9fampeMlA4Y1RlSDxkdS45e1E8eTtxWlpzXU5QNGpuTXVqZHB2JmRAMGFKVWxxRyEyI1A8ZXBkSyhtZ2lbOFsoYmMkWkxSLi91VGkyOkNGdmtBdDw/UEwyWSkzfnJ3Ni97P059O0xEUz9SbSVDZiRYaigkeS97'@;
put 'eltbMkFQL0E8Ozs/LmAwc1BEbT0hZWNfXk9XX19na0wpVnYqZkwwdnx9NlZXIT4wPl5ZSDx+d31SRU5VOExiY19Nez50NiZ+YT1GaD9zO0BDSHYqZE1hPFU9WjVJL05wdHpWWGssMVlNK196VFBrYVQ8Y1kyTzxbWW0wcHcuKE1iXy5uO0FbWko4JTAwZi9he1MoW045RXooeUVmSEV9bDZFaX06'@;
put 'd28qWXtufFpPMFAqZT1zMV1kZnteSkIqcTsiKUIhTlR1NGJ7VChBUyluUCEkdTBhP2tgO2x0Qkc/XnVRc3hyb1sqc2pRUyl0OGRSPSJVVmFJUX5fZ3tnYHNuOWExeUg2STQ6ISxiRT1dYC9zQHI5TyE2fHElSCFRMXNqazlAVSg3JWZnMH1SNEB1NEtbZEcmVlB1fEMmWUQlZylUbndxOFBXYU9H'@;
put 'OSxkWHdxY29IZnlDRypuKV46MXhiaW9nKWErdjZlbCtzb2QyWCxAJUZ3MCNndnQjVm9pTW88bjtsdklmUFUmRCU/Vz5xWVdjM1AzQ2lHZUAiKXdOflhtaU9dTmJHdzxfbmhnTCM5cTYpaExSXkdQJVBjUDR6OkwwKzFuQiVqLlYlIkt3b14ycjk7fiVAP3pJTGsrViwyKTs4MDEkbTo9OmVlJi5n'@;
put 'RDkual14VyljeyNbamJLS2ZMQ1J4Nm1CfTB+fShXayloX3M0ZlIsa0JfQXksUFQwdltPd0VNJH1acHhldzMudUo3Q2cpaXs3LkU9fiZaUWVEOW1+PEh8ZGJBP21RYnZtMnZnYz1JQWRCU1oySSVkKntyQ2drd2xFfldCPj5sMT1ENltoYzssVkElZXtdIUNCV1ZOY3UreTRIMkg+QUhafF1rW3hj'@;
put 'KTQqeTYqM2c2THF9RH5ZYnpKbXQzVkI8Uk1kayV9aTlxfXRdbzxpNjMiYlp2dndWJlFBVXtVUU9BPTIud1p2PHl2MkhJZ2oxOTxCe21XMTBRcV5AfU9nM1lIV0dtN3ZSJFNnPFJwMDJaYzN1LlJaSFs4c1tTbDUkRF0sZl82ekBbblU+X3FlRHMyXlg0UkgpKyVmN0FbfllufjsoWzphb187SlVm'@;
put 'UGwxbnF4ZixYaU4vYHk7I1syJXckQlB3S1VNNW1lcV4hdkZNWl9OVG1HbXkpcShjQTg8c3QqJU1Yd0E7alJjJWs9NzVGbFVQLEIySXI6dWY/ckFGRyk7RlJpfSlpOX4ueW5icXpjRHcsVVVKT05xOzVkIypdOC4vQ19OV2I/Q0QlUFQ4cikyYVY/dDVJX01uNG5Zd1UhZlQveVooa3V5clBKanRW'@;
put 'Olc3OX1Gc3RJT0hBVEl4SGZ5QjUvJmphZjY/bW0+UUhaJnF6bEhyM3UlfU1Aa1R3UUcla0c2dDszci9ZWkAjZTZxZGJZXWk2d0dKMmg6LmdwO0pGWVNAXkolaWoqUWVhdDxCWiNgOmxfb0VWanNDJm5nLFohbXRLJEJTeF9jWktqT3I0XVp0ZlF6biZ+fnYkKCEofVFDSzx8OCQrOj1uOF1ZMmhN'@;
put 'Y0JMLilzWUpjQ0NnUVBnQEwxeF1bNCZePm8zblE7RFV5fkd7SW4ldWleY2dLODMkTzpPS3pTWkxFQ2I2JF8lWm1CfWNNUVlMLEAhYlRibCZNP3UlPl1VbnEqNGFrbzZYTi9bdyRkYVt4Rj1oRFdQP2tmN3hrISY1Uj5yJndZVEJSMURtP3pHUlQ7ME5xZFRpIWJeW2E5VFpoMXBzZCpmYTs9MDB9'@;
put 'W3FqcWozRmNmMSo+dT9dUWVYUUdNflB9M2wrXTFSO2BJalZAb1BDYSVOfVFZa09OOGE3S1lrY3gqbno5bEluL1c6UWBKPV9vMyxMTyk4UXIyXjh8dmBIbChAWz1tU2JgVW9ZfmZXM346W2o9fUZWdEdMNTZ0aWQ3MXYwWFduMVFoOUN3L05yP3piPzpXODt+c0VneFRze1gwXz1aeE5zIVV1MnZW'@;
put 'cGF9MldzczgjMjlRX19+bmR8PX4zMXF7Xlh1Y29wWCNWa100bjhnKnI1NjJSX2V3R11Ie1d0WStieVFtSnRrI1NgZS4oY0A7YEd9K2RzbkN8cHB7RXR2NS4hc19EeHdya1luRXN0MTteNkdFTS5zMlJuPUVdMTdWTEJqQjVNJWJWOipQZ2B2OEV5KHJtPkVRJXZ3UFdwKmhQMnwqdDJnQHc6Kjo6'@;
put 'aEs7WWVZMS5bb0ovUFc0QjE4ST43IkFpdUxCLlUvUnIsInR7ezYoPTV7dT5QM1Q7OGx3PyEwYmghZTciNDl5OUYiWWtTOV9nKTBCIyU/ZExyLlcpfnJxKVN5KnRRZWA5d3QleztWVlAoSihLUDY1N000QiVXQCRDTDROSi9Fb25DazJhdlVXXmtHdyJLXkwuNElJI0B5Z35rS0JBa2dPeSUrdUFb'@;
put 'JjoiPXYwPCZGRy42RCYuQVpJdXdfR2p6QUA7dSVMUVR7IUg5Ym8qJGZxI098JiFAN3RSWEhKU1phNHJQcSNGc3JFYGo4d1RVRHd1PzhCQ2drTWc5c0o8V0c2Uj8+L1ZhZXBjOG40Y3JrQ21OdEYsO014L2pkXkxRbyEwcV1NTUhmYmRTUy5EUl5VRDZ5K2FZXzAzWEJYcnZEeT0lcih2NSljel9x'@;
put 'K1tfPk1sRlokaGYycm9MUXImO25+S2o1QSxTUj1zeC4rKWxJPnIpUSJrLDxXQz9iQz1eJSszRFQuPiZpIjpJIUQpOT8lTjZ9OmdAflN5IVs/cmIqKEEjMXM8N0tzMmxzSyYvcHByYD5gImpEL1FtNVVRTHZlRG44UkJgcillT2MzJTtUQVRafVc5b0Q/R1g9VjBXIS4qaXklVHxuZkU6Pnp5bFB7'@;
put 'MUlKLmVhREZnVzJbVF89bC5JRXt7bmlJJi4zQFR5RVo/amJTZ2M1al5tKjdkJEMramd1ekdRXUJHdFhNM0dWMHUqK1lvZylZcj5zcT53fkQhcSslXUpFUkJaJXpOamJrMF0zcEApPjFeNixEPmhuJkZ2MSFucXYhNXBQeUhoQnI8TW5APSMzU25HVGoiQykpcDsjL3dFLH5jNyprVU5ValdtM3tf'@;
put 'WVU/VzlodE1OYnV1a0JiTjgzW0k0ZVU/aHQjSk4qZXMmd1VuUWxjTVMjSmM3MUk6b1okNVE5MiN3W1F1NzU+aX1CQl05JnZmVHBYenhGeGxaUFMkWHpCNyVGPDh3cD9aS2RJbWFOdEI3e0UvVSVHX1gwOElyZys9I0dQOyQwI2VmLD5Rdzs/S2IjNy5uSVN5ezYoWmVBQ0E/fmx9bHUwP3F4ZEYk'@;
put 'VTxAWUV+Yz1PPyR0Z1M7UnBsLldQUVBXQS85OzRFKX4qbU1nMj9pTTk5PmooXWxRPEJzZ0dDTTkya3c2IXglfT9EKiM+PE1DR2k+RW84SmlzdVZ5Z3hqaT5WOUpyXlBKPCYraHwrfSp+YEs4T1crcUdlLzA3M0xMQ0ZUcXA8O1MhWk1od1ZxLl04L3lEYUklfV07IyZqZ0lfeTB7N3l9RCJzUHB0'@;
put 'XXpVJC5EdFV8I1VBPCg2UCxyQFV1W0NyWjloZ1B7YjRLVjNlNzFbNj5VZkFWZz83NCtJbjA7YTJKIX5TL0R7MDhTa2FXTlkxb3RjcXx7PkFIRnJLKGc+eUUlR0lGRC8lIzxeZz5jUG8zbi5FP1FrYCs8ZzZ0L2BGPSJxcmIlYEtbOGxrMmA6L1tROltdaSQ+R2BGTmRTZVgwbX5zRnBnd0JpO042'@;
put 'cytkZkovVUtpYCJRIzo4dypEMz9BZWApWWpkJV5GcFE/Wy8zTDdTRDRbS3VlUE9tYik8dzA4YnlHRUVlUCViZi9Ka1EweEgqZHBLYHwuO18zemhdYzwpa3RzWWcmXk86RTxNQElYYTAxayovXWZOYD92IismX0FYRkNhaTAzdDZJbSF9WHYqelNbOlMwfX47PF5bTzd1SWJTQFJSOT15SltCUGhI'@;
put 'cj5XNEN1MFZsS2pbOm9hR3ZwbXlteixJWUhVLCw/WGlnUUh5QGp6PV5ZO3BCRkxpd0tvRFIlZyx6R207bTV8c1syJW9AKHgzRldnIkMkQEReXWlBKWRXMi9Jbl90PUlkfUFDPGdlPDZ7eDZ3O080RldmaGZJP1FqbEFRM3RaUjxYNzomLz51X0tFeEJzUG5CVylDTy5oXkh1K0oxVyx3VDZCenBr'@;
put 'cHFedDAoMndHJWYzU0EsIVs8WyQhWFliMlgyJVI5JDUjNG8lelsvTWZJfmxTSzN5SCJJRDxSLCZwRy82L2EjdzxALktKeVZBVD5ta1hsezVWUGdiKDorOyhzRkw9OS5UbD0vY2lfY3plQlRHfGJ0OV8qUCZJNCE8Y0xySnE9Rj5gcixgX28jO3t4TS5oWGE1di93LkNmUHshYSkob1BUKGUlPXhm'@;
put 'WUNNK1FWa0xsWFUvNFNbYXcqLm5PKkk+bUR3KWpPQ142dio/REg8Iiped2pQW2NLPnheUFE4US9dc0NMLEJ7fEx7TXhtdkRtTiZ2U3siWitKX1NZMk5JLEk7KVtMQE5wZ0tPUWFWQ0JgQCN+O31CcCJmNXcwQyY4VHtyYil5MjxwUSFIdT9qezY0c0N7TzlORWI3fTtqTjZBLlIjZDJCfndUOjpO'@;
put 'a3E/WTZ6T2ZGTSNqc1spPHx3Zi9VJFRzfCMieTs2UmA1TCVyZCowYSV5QnF3KkRyPk1nQkRmUjAwREw7KDpGKHMwc050MUZsYk06OmxOdnBYR00sel5aejlaeTY2alIhPkd1OHoqXiVjVFchYHlBa1VLZGM0fHEwZG1eX3YqeGxaP1c2djdgSi4oKGpRKDV4OGxLQklJNisvXVVDO2RfYWZmeG9U'@;
put 'KzBrOFoiPl02b2tYZ21LcikqVnQkQCpYJiQ9Ul5AVUU0Zi5pRHg1ZCU4aTIhZCsxZ2VtL2cxfHtRdVMwJGUmMy49LlVSbnZddHJmOmJTaEVkTGRJfWZEd2tzKER9aTtjWE1EMzclNDBKY0xaMkIpImFqdHpzfC8xZkZkaWs4VkIsbUQjbVtefksqeE9KJGcld0xlKnNoYmdmWjZ1eHg1KzJiJFB2'@;
put 'RzR5dmw1IThMfj1Rb2ZBZ1A4dnkkYnJ6eTZ+YGJLTyphNWJdWVJHcV1ELH5yX2h+MytgRzttRFFadFQubjNpaS9DLGA+cFdsUX1jazdCfHJnbUxCSGt+eFVwTyh7PF5aajg/YnlUfXppN3VIV1JZTGpuJUIzIzBadCV1VEYkYWt3fnBARjxPalhLT0hmRjZtIXVYRjYlK3pLcVIqOD5nWmopSi48'@;
put 'PF5bQ3FiVHx6JkA+WFNSO1R2flFLWzhnP1VsT2ZXLmxpRUZdOFVARFhrZGE+XkZ9MylTRjY3fFtGJlJCeVUrTGM7O2NLQWc/ZzR6NGpKal1tJSVtVys7JFBnS0dAU0k/I2xCfkJYVW0pN2FgK25YKDkyYSVbfEIyQ05kVH5gMWJGNWw9Zj4laGNdPlUpIkhmYF5YIUQ6Zm5VfGBnSWtQX1V7P0JA'@;
put 'S3Q0RygkN1l1XlszJUYoNDpOVDJeOCUpL244eDBxRHYufns3V1RMPWdURyF9bkZiS1Z5byE5eCk3KHUxQj1aOmttR1lQNCYjU2BUQk1RKSFLdFBDcTo8RUk8I3Y0VmFGSDVIbVZtZDI8N0RrVzwkKEhbcGZ4KTopN1lPTiE+Xk88fllkQlM9Kn1RcDkzdkNqVytzWE8iOW9+eFNYP3VuMiY7fDMo'@;
put 'eCVZbGY8SHV6ZnZhSzhEUyFJKl02W3JFM0A5VFQ9KipUSkxvVE1nQ3B1UDJbUEc7QGZzI1ZoOHpzNmFZTSg9WUIsV0NrInpSZDc2YXxLXjw9QTJqeDN3NE5fYCIsOTdJbCx1VlE4Wy9jVk9ha3FeaTJ6T15ydWcvfmU1V2AhRU0maWR5KT0lWmFjXzVbYipnPHthJjtxRHpWJEZMY1BpZjNPWGJN'@;
put 'Vk1MdCZgRGFeQiNITTtnT1dtMkIobzFSaV9mdD1pcEoxMlZHXzVnNWpsbSM/ITJdJCtpcyMhVUNMKkA6UlsxMHs7IlIvcUIhPy5SLERoUj5rfi9COG5qeTF0ak9uQl9NbFt1dixsbzZ+V2lENk8zeTYwaD1ffnA5TFNOcmdNNEtzYCZQQ0ZaMSEzLzh6RnR0ZE1ic24lMWluRDdkKTJPVCg6fmVe'@;
put 'V2ZePjZARUF+IlN0anJtRmMzRiZhITN9bHFqISQjUyUmNkR0aC5aR0RdWDV4MG5bdWVzS3tJKilWUVtgaWVdPS9TUXpMI05FOHA5bjYoZiUlW0tnPGx7RSRCUVR0fUk0JClQSnFDbnIjM3JuKkdUcyNbfFFBe3ZgInNSeFAoeFRSeUhGQ1JpTFZ+MHZYJGBNRV9ZRiE9NyN6STgrYHBGTTpaTDhG'@;
put 'fXlTMXosQ1BSej8kbjErRlF8eytaWUg8YytGLEt2S0ArZCtaRHJMSCprYEVXRyZNN2IjTThYSUh3Z2w6aW4iMCswQVRKanR9bU1eTm02bW1rWiU+W0hgdmRbfE9kKXNbZl9hfGBaVGhGWTVzTF1XT3deJDNLXS59em9CPVhbUj84IWBWVzdULllfT01BVEFdRT1WamZgOzdEeTQ1aUloLk9KJDxO'@;
put 'bCI0fDw2RU45UjRab1RdTUx4ey5DQ084MVY/WjQhb2thaWYkW1pTZ34odGMve35SLm5bPHA9bWRvRENrSVZOLmddTil0YzNsV0g6XnFAez0iRTBHU3AuRlEhK0NKfih+WV1JOjFUajdFZSNta0c+KUIzQD5KZGZiLnF6O0UxJCM4Mlk3KkMhdFdZaFU/UitoVGFTN2ZnakBDMVhUbzlDPiplWV1p'@;
put 'I31VUCFFSTMlTG18P0E2WVd6MH1JRF0pUnFfQ2xIWGxUV3JlNUhxZEpLPnBlbCM/MHVHJGp0d15ndDFfSXVaTGNTWH5abysxI0d0RSVZZCtHWC5PVURAOkJZdE1UOXAuc3hHemo6Rig8b0AqUjNEeStfdEp3TyNWP2QzZUpTaThkbTFBOkdWLHwmQ09feXpbaS43SWt3WXtQb0NASlpTdD9GRn0h'@;
put 'NXl+fE0sfEc6dHkySWZwcyh0dkVsMU1ATUVMX1lpO0pLXms0P2ZHe2F4V3xOSlJHVm0iPVlTSjF4Vik2Y3t3cmFUfCRmeXthWFJEczYxUylTNSNWdjdLMGlML2N3aU9VWjRTNFdCZzFmLnhzNHZOdDJdRUNgcjx8OiYuS0VSN2B1aC98JlU+QjEqd0MkSXVZVWpEOi5WfHQmWWolS3YjYipeKix1'@;
put 'bE51WVhlYG4+ZXxOWDJXaH02JDlFZSNyRThfOnM1Nilkdj5qXjY4LGYwRm9WPFU8PC8pQkpMWlZkfCEqVU99X1chXWZyaSlVPC9FVi4jWUU2KjB1OlcoYnEvWEc6VSVIIXNBR1NEejdyWWZpTGlleXh4VCJBcmpAdG0xa2hMVzF6OHxSaWk7d2s3alFiM00sa0lvZnReNklBMGdjPUJfW2NeVXld'@;
put 'SytrO219PE1Ncl1QYkJ8U0NFRXhOZX0ha25hLnB1c1VqJkB5aDd5JVJdSmRAeDwwbFdNMzI6V3J4M0QlKX1IJDlqTCpeQ2dUTX1vcnhDSkBRSDR4LChSOntLV2VbbTI/VlFRJjFzOzBVSk4pIUtUS146SFh+b0M1Mn5uRTpgeztZOWhuJHBFXy5MR1dhKE11IUVibmJfd3xaSHUoJGV1PXh5c3Yz'@;
put 'VilsMDA+Zk1uUDdKW14ocj1RZzRVQm1ES3spL1M0bFdEP1J0Q3F2QWc5T112blpkYjFGRihJZXN4djM7ciI5YkQ0InNZaFdjWyx5QikkTGBubGhjQ0MjVWt2TSI3M01jcV10YUJVV1BVUjokeHdKN1hHPCwoSzohKjlfPkFRfDdKOSYjWTIqY15RPiVHZDZdfnwsR1EpL2V7RiMofXl4ZjlpP3RY'@;
put 'Xj8wNkspSVlaWWl9S0NYTzBXSCF9fm01bEliY2glcWdaUkY+WnUwR2hwcXJkdSk+d2g+VUcsfVdGbkdXZWo1Lm9KYXk5O083S3h+LHZKaUI5QGlqVF9gWj5KJmM1PEd3Xkk2TWdoSGM+SkVRLjx8L3F2P1ZEKkQxd094KCxfZ31OXW0qM3dEQ1EkPHJFbzZvM1gjLjBbanNYN3AuWF15OTVqKjQ7'@;
put 'IU4sMiNxLGJnUig6bkUjR0tldHZkPGR9LkF0dnR9VHJ0aSpTSU12RElHN11xSkMxVVUla0VSTG9LXiVUb1Q1TWRwYn53KF90T317cDxwVHlrcCM3UkJkVSVfRiptUXZJQXx4dHpaRWRuXUBsR1lWbXVUbUJudXpgdEAxSEx3R3Z6OWJUTVZFVz12I2d7bUJOU3kxKm9jWSVBbipheFFKQEdsezUp'@;
put 'RFUiKVtANWwofTl2SFI1PVVaXmxsXXlPVCFWWXNISGgqWHV3cjFqOEQ7SU07IWohIVpEP3w8bnw8Y3liZDEvbHheUGxIXWRmKVNHT2AxJW9fIio9VDxhbTJ+WFJjVDRLUyVDLmltMCgwfGZ+RENscGpbQlQ1UVRlbkAkWUkiaFY4NCkmfCh6QGUlUVZedCx1OHFMZWA0NzZaJWFvPUxfIUc/SUcl'@;
put 'SUQvU2I5SCZOZzJPXmZCZlk3OGNScSpvP1AkX0VdNk0+RHpOamZQNlpETmFBVmBOS1Q0Ll8kZjFpPXU0bnAlN0RAOnxiJVAvTXN0ak9gM1B3UiZFZSFVdkI2MiQ8bGtwPmdYU3JIczQlU0BXOUFeZH1edyRySXR+UylJeiklbiR1I3p8ajdGVil5VDtYZmV6JExHazdKPTtdfnhxME5+JGlfQjtZ'@;
put 'U31mOVBYPkNSX2h+Nkx6a2E3XzpAMGxaLiNNRkNsJU1sSmdWZixVdUJdTyhvQltZPlZFNGlnKl8oKzQ3OEV6b255UyRuRmEkQEpoVGYwZSQ4dlRCJjJ1fmQ3V0dSXk42eXlYdDE6YmA+ZiMwZUp4IT1IVyQ6P2FBOUt4Zlp4Jjt5aDU6YHNZd3hjOS9KX3ElZ0gueC52VkpxWnpWTSJ5ZmRLKiU9'@;
put 'TWZKYyNadUBld19tclVFOU1YLzwoRVYxVGZxc1pacEk4MmZ6UjUvfGZ5dkdPb0lgaD9EfShvPG1NLGpKZCM9TlAoXzZgQl5kMWZmTFZuPXNmJE9naFN5ZDQ8TDxheD0lcEV5KHslR05XKyVvSnpOQmh7fHBYKz1FbGBpNGE1NWZSTl5kYl0ydmh3KVIvW0ZeJldUdiVuSG9vUSRtcEVVKztYUEN3'@;
put 'WjQhW1clb3NWVH1OXzheTEI0QCxbMn5eX1B5OTlHYzVjeFYxOUFJYVp5XXBLTVJadmY4dCVBKi89M0J3SSQ7Si4mditkKkd+Km1HKXQxfGNVIjFpbXwjT3BDZWY0NFlVTF1vaiYzan4mekBINmhoJntsdV5CQy4zTVFgXlFNVnNwLEQ/V3M+I3dgMiQ/Y1d0MWJJXyplcSYqNCNYUG94TFFyNzdC'@;
put 'e1UuPDR9JVE8fjYiNSNFXkNhN1kuUE9AIllCM2lvZzAqJUVvNUdadVl3OjM/dX4qfTIvdG5DMSkhJmN8WWJwUj4wclYsbz9QVFd9U2lGSlg5O0p+NixKPVZ0RlZXVl9DUCt2KD9UcntEN2QzSjRTJmQjLmtpLnRJalo0JWhdVEZfKnY0SE0jRDJsIylEfk5yPmRqSzhzZj9aa0pYOSMsWmE0KmZ7'@;
put 'fl1XYUxBTjZQbSQpdF9ReWxnWG9VVE1ScVoxWEdZNG1dY1Jnc2dVPjI+Pm4vei9GfWhHRkVQWTxqYWFPV3U6emgwdEt9dkxLQjkjRHx5fDojNCkwfD0iYSl3Y1loPkRofUR9VHRoMXwxODRnZyw2JWRCeUdvfk5KLmImRDI2Nkw/PUBLJFVnV3ouXndSSzlNcSwldW9yYjl6dls3OyFUYytMdUZr'@;
put 'Z1EqeCFLRDVzUUJ8PkEsZSMoY003JE94P3Y5ZmRjXjpqbGA5RC4qUEFtOm9WUnhiSiJYPjJZU1gqRFdlPEMuQ2UofDFxOTtLYGZDWX1fTF84Uis2SjVYe1kuXXpbd1hSc11YPCNtK0VoT2JTO1BiRVBVRV9acTolNFNyPXkiL0wvPmBlbHIjJWFNX1lYbmlDQlN1QGRKIjU4UWl3b1BaPmU5PVc1'@;
put 'ckRGNn40Z2wlOFYldFtCTXpVTzp0WEVXLF03R0ZuY05jY29MYldOOC8mPk9eIlR5SWRrazM6ckVGO1ZzTmZXUk1sYFt4OnR3LypSZTV2eXthaDtnaVp1LiQhUXZqWFVoYyo/YFpxIVd4KV1YakhCek87fkMkeismS3g2MW80S3hyREp9I3hzLDhqRXQvT0xoN1FlNEhlcH1pcElOblckOz91a1Jv'@;
put 'VH1rP1pRfExibWVRY2VpVmkqS2FQRUk8RnBMUEt2cU5zYSUuT2ovUmpsZjNFPz1YVlg/dWkxNUkuVyRHaWkrTUIlOGo/TTJ1X3ZeM2MwP2Nmbls6InhbKlg8NFMlNUdXS2c7b1sjMkQ7VTZbb0g3JlR1OmlXNTdTIlQySltiNExSSHlwUGNhSHkuP2dEU1lbbztAMVo2V0Bvbyh6dFskRlR+KmN7'@;
put 'IUVHdnZVRk1kXWk7YFVXVl88dGIqNDA9aytRaENyNWBfIWlhdDliJEJJQ0lgalJXQEFDKzhWXkhuY2pbM2FiUCtERHYjWTUjL29lV0grKCN9NGp1UVM+I3R6L25nQWJoTUpsbmVgWEZIMW1Yd0xhU0BfOT4paTF4XmlOQURjYlBUe0cxd3cka1htdHFSanE5NWwwd159an0oXzkkdiYvSj5aXm11'@;
put 'fGBJTnEubmpUQFFvbCNTLjF7YTs7PHdEYEx9TktySzFYdE96PCxUT085XkZ5YD5kcil2WUEwUH5IdTpiN0hDWVZhfTY0YyZJb2kuZD86X2BFTlE3Q3ZQbk5iZFdXUVhzJEdNKEU0VHZvcT58S0wldWtdXWlHPUxRKFNoT2ouIk4ySVQlUnYmNTlbSSt5PV8yRENZLmJMZFY1P186N19eTVEma05h'@;
put 'KjVUIi8hOWBpcTRhUWN0OHtifD5mPmBXSThhYEdaREFUQD04RVAkOyk9Rlh4ODNmdDpiQ1BYbGp2eCs5OTVefC46MzVVbXVfV0ZwSSJMLEdQV0koL1hIV2o5ZjNMMU1AYkJGdFREJjZQSX44WChXU3U0Pi50NFhaNE11Qk0rMGZnM09NeSYiUlhoPyhXaEpCSnl4MVZxQVplN0Y8aC8oT0ZgQDlh'@;
put 'SzhIan1xR3hxWFNZck4/fiRheFojNHhpWnE6MipNYjpSZHpIP3AmRkV+b21lflN9TmBUdyhXKGNGcSo4NCoiSldIPUM0ZHg2Kj5+fSZZNC5xSGM0QV5bbCVUfExZREJVNShxNGZINHhFRXdYRHQmLzhULmV4PF1jZnIiTkc/SzwyXndyOT9PXiguJF5DMX48PWQxMTVEKCNEMHdkIVt8ZUUzJDhP'@;
put 'V30+QWlicWJpJX1ddDxOdSNwYCpYMT83dX1NREBlUCpLLHljTUtPbCM3eWV5bWRvcktmPmE1bzEkXXIwbEUsRipQOXw3OllxaCJLPUMwbE9VYGxvc01dZVEubWdWdn4oUV9VKCFEQ2FkPDRuIUpFOntSLkVacEB2RmdUS3BmWGchVjg7RH5FekAlNDVbM0NBL0UsJmMmYU0+RVNHdjBKX1llOV9n'@;
put 'UnQuWChYfk9DdEZHKXF3QzIqVDNVTGZ5OSV5RUN0aUJPRkB6WkZ5ajE3YUA7UjZ8ZnUjVm1VY01VLGR1TDR6QjszQGg3diR9IU54cjhXZF5qIyQhb0w3MXVOVmFfVT43JC8+ekUrZnM9dDR7fVcxV2VXdTxsU0wjKVg8JHV8QVIkckR1a2FZUj9TaGVWY318OSp3NXlvNmVxUHRvSiQxKmo/MTdt'@;
put 'ViVqNGFMP0cmeiUjb1ZzZjBNNSt7ZjRSb31KOH5XcDl8e2ppQyNbZSNnaHQjcCpNejlmSyRFJGdtMjBtaVg0IUpmaTFvSj00YURQM3woWjNEKDQ1VzlsMTtAQjZMfkxeRWJja0gue2BYaF5id3whJTApa1ROLCVTUVMhTiwzI21IUH1fSXE0I25odXRmRiZ6QTF4SHpoXiRFTClFN3ZPYE1la0Ql'@;
put 'dXA2TEVeSTIhP1c4cnxOWEUwOWp7WnBwU3dUXnc4a0xJTW5xb3t7TXlsdDY3MWVwXShnMS49c1lEJEFeO0QvXnIua2RPWyIhaW0/Rzk9NTFlc2YraFJpXTY3NS5eNjszXUMhZkUxSTpudiNlNkkyR282I2RwcFQ7VDxJZzYmO0Q8MDhJQXZxIVFfTUo3U1RHLyVmU1FVKUwxfGd8a3k/UHRWM05G'@;
put 'OnM0QmAoO1smKG5IQDRtN2VWSCF9akhMSnlub0NbWnJzLj5HZG1ZUikiX1BbZEZARm19QFBtQjQzbGE7Jko8TmMyNU9gUCRhYXovWTB9ZXF4X11He15idCYzal1mLGZRbihmN3dpXnM0RkRtfFN8I0c8X21UaWQ/aWZwQ15dJVk1RWJ6NXcvMn11fmwlZSNEKltzXzdrOHshKmlAYjBDM3Y0bDtx'@;
put 'bG1lYClIXyM5dGN4TiUvUF9Lcm0rJThNQjQiUnxjaztxYjBqNSFDL2FMbFRZRGBUXmluY2I6UTciISJzcXhgMklYQ00lI2ZySD53KzFZLkspT0sxO1U1eG12SHFXd1ZNVmkqbjM2NGB6W1g0Y2VsUC87YW9SPC4pRWRNSFhqNmoxV0Fhd0M4QCpYYlh2Zj1ocHIlWWQiOnV4JXdfU2UvMyNqKW4j'@;
put 'eS47dS51OmkmUXh9X05tZlchW29SemJkJU5edX0lQUFNbj9BMUJ+LmhtXyo7TURLX2hpLHpedi8xc3NLSH41b0tOa3BFLDdBYyliIkdZNT1reSR3dCx+W0F6R3gkMFRCVXJAfERTaihqWjEqcyluaj4oYlAhejcxZnBdNUZ4fXspR181aCUyY19mLCowWlVNSyt9cj04N2d5PC8pTz9uSWM9ZFps'@;
put 'fjk3JjtFaV5KWmZaJEFZQC5AbFppez9wRThPZUoqbCtiQWtMcExNU3JFfUxgWF9+P1JnJnh+MDUhOkI5Q0ZiZiojb3N3c1IoRk5PajAkUm9xcVdlRWs0I0FnYWVtfmFfPHs1YjdhRHdeV1t5LEYubWN2cC5+SG9iTGE+NUxVWTR7PDhURltmTmFxbWc1T3Zpd0pnVVMuRV9JSnhUL0g9Vz0ofkNy'@;
put 'JV0weEw3dCxVd3R0aVtoSjZkKnYrTmZMMDtFMHAocSJMfCF0YTdMWDRdO0lxNT9mVGFXQSVAMkVdRVcuOXEpImhFXjo3cW8/byM1KGhZOz9VdSR0b0J3Skd4cDlZcns5eEB2KSxpbFk5VVNjUkF9LFg4ekMzSzVZd2spWD83dlcyWWFbR0Zaam1TUDZvdkV5MXMpUFFqKXcsbnRxWTUyU1lfTD5a'@;
put 'RH0qd3w/OUZIOzFIbWxNTihrTko1WEJJZG8jeDZnXShhfCJlNlJhMD9zZ0o+XmJQbDopKExSbDlkdzBPRGJQeDxTMWNhbUshLDpBKSN1QSRRaWF4PUx8N2Q+dyVVaEB8NSxzNmpgVDxPUzcqT1p5PjVidlchSnNOfjByRSl6UStPOEYzdFY0cmQiblhMMH5rbyNVXlcycFN2Rj1takdoZkoiLGBa'@;
put 'X2VeWFVnMF9aaGQ8PDRrL0pqJmRQXW1NREArUFpUaFdtP3YqXnU/OCk9WXMsdFomYzUoV11oSCtuTHBRbXl7I0pLSCZScShoc1FmdUtbMDRsU25KWG82Y0xeaGIvIXpfeE92VjJ8NnB8UDRAfTxKI1A9SkMqbEU8XVZrNTB5aDg3bHkkYzFfVTJPKk0wKk5ALH1RWmdvOk8rJDlqfHZHVUYjVFYv'@;
put 'PlAkTE1ZJjBlMlJUcVdoUS5XKFAoaDwrNnp0ZlAoOSYjKExiNTQ3eUw/PmUkSi5sI0cxeHtGYXYqWXM6Oys7Jkd0KSZ1WHwieTAsUEdWMEhocSVFI3RzUzN1eDFIe1B0TWZwdU5+cVclIy9rRUoheSFdQX54RDdYc2x4L3dGLlVSbVJWfUxTezY7PzthQ0hMeSJMOCRzbTFiaWJGeXxEYUM4SUF6'@;
put 'Qjo8I3RxNVFSRmM8NFM6REdXZj5DandhIX0yYE9xSDl6aSRLJSxPdCJJcVN0Oixde2JJP3JjY3NCOXVlQ2ImWGc7I1AsVHZQJClWe3AqaTR8VSYqflBoNVA8eVh5dFJvSmBDcHJTN054Qnk6Zz87cSpbLCo4WWxRLG0kc1lzO1s0KF5HOGltYWc3PVoxWmBlLFhoMCZNazw2aGdKVWh1PT05Tk5V'@;
put 'Y0IyY15qbT9RfXMlWTxZQCJ1OE8rOF1PYSVmMS9AM3dYJS46PTd1VTEhQ1JBZj1kP3s2N3lxe11DUlpzeDE0NXF2Vig9b3gkUk5UJDU5ST1rUHw/OEwrYUBTPiMsSGE6eyFRXj1EfEpYL358VSohZzwmNH5+QlIwRW9yVV5hJWw3JnlbISppfSh2PVJLU1VwRHV1NmBVcVE9c3A/UFRraG1fd2FG'@;
put 'Pn1wZDl8NSQ5T2lLNldJSXJuSnhPYCMjKFBKL2ciZV9ocC90anpLcGt5KT0+KmFraThldnpRS0R6dF50aWAkNXNSVFgpRmM8W2VHZTVMMz5Wc3BfUC81cWFFcnskbldVa0F1T1s2U3dHWExYM0dhL3h2VmFQaGlONSFpMDFmVip9RjwsM0EjKUpGVDM/fVRKbG9QPU9fRkBQfXxrV1JkRyMuaXRZ'@;
put 'YylgOnJzKnk+UTB4TSRjNHhycXdOQFQ3Vjh9eTh3QiJVaTtnVnhsPzZbfVRiK2VaQFBMdDYxd3lrPiZ7JGY/JC9VQUpgNlZmIilDO1Q6aUNIM1Zlakl0WWl8QjhNZ3QwP1VrZX1PRF9UIyhrPkJmIz1WXj5UMlArRnBEO0c+NUZYamlSPjNRVDZ0cWd2Yk1DZ1ZRTSUpdVtjSl40Pk97RFdmT0pe'@;
put 'czhIRD9vXj9aXnFeKHlNPVtdfl4pWXZqezpkVk9wSUp0S1hmejpPa21tYFFafnQyRXRNMzo5SmUlMmF2c3soJHcoPko5KkwvZC8+Ll8jN30lNGxnX21bNl9UcF5RUSZ8XWJEVjVYfSI0KldeYChzQzM6K0ZqYG8hdyRCIU1ROmhwL1csbW11SztIZkFSXkxVbGV3dn5hekZ7Kn1zeyZtPUI/Jjlz'@;
put 'PGQzT2o0UHMxWy8yOjpBLjNvTz9Fa1AsITdhNi4oUC5tfmxUP3x6bHN4RTFBXisicFIwYkg+NzAiT2N5aG1pNCQwKz5WTjBfLClXVjhDQjtxKHA+SVh7RHJFUFVwKiVFXygmdVdaP3FHaDtlansqJD5AP29DUl5OZCxrejo0Xlt+KGUoI3xAdjIuQitTXVJDRnd6L15qVVB7aGpsSnxzKGdxYEdn'@;
put 'dU8/RCx3WWdrOFRdXWlrRHQ2LyNiajMue1h8SmsuSlNVflk1O012bmFkRHJhbVBVXnxjUFNTfWZycXA4JXEyRDpZYmtKJTh4I31DSTRwN0B2NzR5P1hFXVRXWGUqP0RrTVkuNCUzTyQ9ZmE5dlM6d2lOLns4dzNOakcqbTg3NktWMDF5MHl6I1QhTlUyL0VAJEZIUzcibzN3cl8ycXU7VihkdXRw'@;
put 'VGJofjtTeVMmckh+JmphYjklUXJsPnsmfVFfbmxKKHk5V0dke3x2L2teMipGKk9kZlp4LmVvZjtyVF9QQ0Q/ODRFbVA4NGUhWVRyS0w3OTdIWiN5ZjdRWzFvXypMK3RSd04/QndZamg7LEs5U2plUyU3VXxtXyIobHRZSXIoanprS3loY05BL11KeS4pMkk8eXBMbm5HaGtLI2Nycio8S2VTTGc/'@;
put 'Q21+PSRzUiYyOyVCQ0wyRjpJQnw2PHpze2RPYT9ZLD87OF16LFFESm9fUjEhRzk1eUkufVNKWDBsVi8uP3AxW0o6QXYxcm0keE5zKkttST01V3RpUTUyakd1NSZqMV0rY10wMHM7YVRkQy5pfXM9fF9BbEpBQX5BTTFeTURTY1Via3RAaWAqZzJ0WHxrLiR+Y3EwL1NZTiZOMyZMMlNiVl9RK0gv'@;
put 'SUdtMEZQbUl8cXEraTNibD1MJEdxUnpMMSZOOHVTbF46ZCxmSHkkbmFZYyhzcTAmX0k0W31DRGlNe1NmL0ZPWTZYeW5ULkZeKDdHLCVrTHZJWTxacj82QURRaGBsOlVOX2txW1NmRl95U2I6L1RHd3prVyhbYV5+Xn1DSFEjQV5nPTM3b0JoaSlgVV90I2x1Mz5WbXsseCxRez5tMiw0fU1QZT4k'@;
put 'a3VbNW5zfm1yQ2RJNWokZjk9WGNLSmJpNUl7ak1DTTBGaE46TSZDYTlhOnB0c11CMXRJPyRxJllvSXtbVEVoPCloVEsma307JlQ7MHgxNjRuYTV4QDZpR29uelQzeSglW0RLPSRVRShCL0A5YlBvYSswL25NQT8uTGJXLixsdFYpdlE3cSZ7T1lMUDtOfExMLihKP0FqQCV1UntbMHdVRUpVVkEu'@;
put 'PWJDMCJdIllJX3RmNTRefXY+bS4id3xRfl4vN1d9OT1xNStRSiVfJHJscW14YXc/WEArZlIkJmQueCQ2NXpyU0U1dW58Xncma0Msayo6bCwmYEprYW9GJUNySjMuSTEoayxaIyl4IWZxSnN8R2EkKFA9ciUwM31aVHZbfi8lRCZ7REgxMChYdzFCRVQ8VShrRismdCJBeWg+dFV6bWYsRVY6KGNO'@;
put 'XSxyNkNdLiYpOCRwJHdiMU5TOihpOE92JV03RlYmK1FXdHg9LzRWTE9oSSw6bGVJQGBXaCt2a3gqQ1VIcHRzeXtnMSw6elV9UUNIX00mMSI7Q0JudSM1Nk1MWVBNMjZxQ3tMPnh7aXo9JmJGRXopQVdhTUkud0IvIWlyYXRyVlRKQyhWa0owTXlFJjZGRzsmXWRzJktkOF1zLFtpblRrJCtrP2th'@;
put 'QV1GbUpYeGhdfmMiZWJnK2BzWGBYdCVMNGRVV1lHbVlhRF1ZIXhxajBJeXQ2PHg8YVcpKHltLH17e08jPmtRVkZ8bVk3PkhrIWpbTDNQKEBmcDliVSE9KXVlU0BRJFZPQTcvbyZ6SlNgfnE7bGFEdnlLYH4xZGtiNGd5Q2NyWWArdm4oM3NiUDY7TVZDUTRqVF8jWF9bMCVQfTI9ZjBSJFJ9aSRJ'@;
put 'PGZKVX4iJks7e1J0JnFFeFo8ZzwoRHJSYzAlQ2lxPWl7VmRvIX1USy52JD96Sy5wNlNvUkxJfTlAMSFzM3FPNkA6U3xOJUxOWEJ9fHkySzJ5bVNteEtvUllOQGNKOGZUMFMuclI9XSMzQE9zSTpWfXxubTd1JHQseW86W0UpTXQkK3YsX2NDLlJZTW1JO0xmOFFvLl13O30wMklybjxFYGhFN3Ak'@;
put 'PD9laTZpN3kibUksJXYhZF90e3t5VzIqUWdFTlpESyhCWWFkWStkTFJaQHczJk5MTjBgJXBFIiYiaDM+ZEJVVmpwVHRDamMjNU1bVUN0enBjRS40Zz06WEJZY0ZWPEtBfGFQZyJeZ1s7MEs2OGU6Zlo2Z2pZb2xZZlg0eCh4IzM3UXskdGJESnNsKlNkfE0kVzg/N0AxMXBSOi9WQy59WG4ha3RV'@;
put 'N2pXbTw2YlRdbkhiY1FrbnEvYzB3Xi9mcC9VaTxxQHBJYmdxK0Iud19SRyg7a0w7XSp6dFFRQkw/XU9ocDRmZEMyTEIyKW86OiQsWnI4XSk5aSspRnNmRSV8fTJlMDB2Q2AoMVAqdXw9dVRxRjgvRk9AYT82N2BCbVs5MzhOZF8mLjkyVGE2c204bjtgV2AiU2o7W3skfnhSYTcqYCJhaGAla1F+'@;
put 'c0dhZndfS2YjLDRdTDtAZ1Fee1NGQzRea0Akajc+PT1BREt1KnRFOFE8cnZmIVVaQHREYSZLRHdwTzR8dlNbPHVnR21Pc3RxLGFnRF1GfVYjcmZWMT5ZaDg0fCtDWC5PViw6YlZYfkBPYGpOZmo5MXRIJlJNeiIpX1FPM3xsMWFycFc/WUlqfTgja2JPMyxeXnpDOz9BZlhoe3NHZ0UjYXlESyp2'@;
put 'KllUJndMS2ZlLmp8NTNVfU8yfVJRUS50UW59XjFNU3pdLC5uKSNrZlNWUjQoUEIyUWleOk5tfGFVQ31SRFtZMF5CZEkwflR6REBweDh+VC5ZWEk+T0JRM2teezFXfVcucmk/TjBqQEQ0PHIjLykxXywiZVg3cDN2P0AhfDRadlZwV3NiMHFrXl1dTCtTY0hmWiZHeSI/dnlpOytkdm01UEo4ciR4'@;
put 'fiYzLj9qN2JNVlhbI1d8Lz95XnZacig9OFU3N3wqYDBnaUBvMG42OyVxfDRgRXRLTGMzWT0hQTkqVVE1VFZmLjlbaGx+I0hFTV1dKCE2TkU8VlFJKEpyTlBpXVtSLGVAJV5jeT9LY2lNMj9JKmtbO2s3IiE2cyh2ZzFaOGJHfWEpcUZEaihlMmdsRmBhYHQ+NXpMfXFZbnYjVW10MX5sJDguKS45'@;
put 'Mk5fYHtSfDd9LEVyTHcmQDEjdjZdVjEiQEJaQTRFdHMvb1kxR0dDJkRjS2hxeUoqXVViJjR1Yy4+czhFdXV3bjFZS2lNbDxwb0NvMjZmLlNmVixAd019O100dF12JHQwZ0FBdzFwMHYvdWJhZkJKYV9nXXdhbWdNN2hhZSpLNi5aRHA/c28xKVN8bypCbFtIVTtzPDIiVnEyfC9XMyI5InI/RCku'@;
put 'SUhrMiFwQjRLPEhDM2FgWWk1V34hSGttS2VpJE9IMmJqPTw0LFFXQlpyczNFQUYhI0B1dURtUHRNLyhddk89RE1fYG1PN3NiODdHPVl4PkYrSWl6PyZQIW5jZiElWCJnLFUxWT9UPXUmdXJNe3dxazZkVXteVE86I248ZkE5dW98ZFFffmQ+V2BoejQ5UXFUamVIbHtMWHUzT2ozYFVtO2RCJTpY'@;
put 'eUsxajpqRShrTFVsSj01YzZ1OWZgcFJDWm5HPn5fZ35gREcuSnVBQT04P31KTUdmKmpLNkl4clc3X3RSMFlJeUYwQ2JtOGBkYjw4OVdWUCpMdFM7UUopZ3BYSHksR34lKFIxJEBbbkgpfSlIWnZoMDtdK3x6TDk0UjN4ZEBmWixjfC46JXspMURTKn0iJXdwdS9ifHMsUFo2d2dzVyYuL21uXz9L'@;
put 'YEA5QXU0UERfMX0oWShMTmtaWHlYcH5GKHRCZmprPShwX3h6Yi9KbztjQSlKa14+LDlQdnd0MF1SVnprISpfWVQkWDBkKiQ4ZSw0fTYuTSNmdzhASGNnfXdjYj9dby5rfF18TjNrNyFRY0E5W0ElSHtfe3pLN0A2YDtaQGBmJUxzPSkqRGU+OSRSQSIxX0V0N2JqU0NbVGBeSCNad240VDtXVF0r'@;
put 'WVEkMllzemhZcH5GKEMxJFlKT08xYGNnKmUvS11xXTBeMkxIVEt0eTxiPSZuTGEoRipGV0xMS3smdSMzVjNVX0JPVmNJemE2O0l4dC8+T2FvQi9UTz83WjVXQHA/JlhJPEs/OXE7RTxRUlsrTWtFUWw4RkZ8IVMwWTRFRmBDY2RbPGVWI09aKEhNTyNlbElUO3U1Qn1vSTpyV1Y4JUIuP1hrPl02'@;
put 'JkVNVmRqKkd4SEhIQCxPTlR+ZU8qbzxrYXVyQn4kPFdTPk1YeTVVUU5eZnUvQn1OMzJqejtsVjxWJFtwVHQ6TltsdnpNRV00SDBXNFdJUSE3U3ZEMG5tR05SaV1pJX5POzRNU0s2VWBadSJ4Zz9NclZqOHZAdTY6ZyJTVmtqeFVtaFUvTzx5WTYmQnorJHt0JmgoRG50OTIiYF09JDh2R15bW0o+'@;
put 'TXJgcE8oTzNjQnFXMjJ7WDcxKzxZdGFJRG4pcVM/fFs2PW5bIWhJOk1LOyVQTFQvMVgrKl1nPStUZXluRz1CNEQsODVRW314XkBpIi9TQCV3fHEkbTlUZUcqMlZRbGUlPlE8JHZGU013US9kSiljcDNSO2duWzdfXWM2S3FxSlRCOHtwRj8kcHtCKFRYMUx+WkMoZDg7U21vUW5GM2wyRXowKVpR'@;
put 'JlBQMl1mfkhwcHYpd1hueT5ISkhFfiE9fjE8ZiMseShKb2dbLiQmUU42LHUxbCs8VlhaZU5iQkRVe0VSWF80WHR1d0hYWkJMIjtddWxzM2w4YCJ9Piw6KFhgR3xmYmx4KSNkMUs5RnBrOj0mKiUmRkpzdXssY1c2W3ZVKTY5dlAibHV1fWpnZip6UmRwfGx8OENSfWB9aHFzP3h0ZVZqJV4oZXFN'@;
put 'OGB4Y1FNKXpNZ3YoWzY7fjUiTXglT1p0TkxdMkoyQjMuI3ppcGR1cENUXkNtckhKMCNbS1siZnJUNlJpfjRhRksoYTlAdCVvT1NrT056Zm1ge0BnVXF4UlR7ZjBgTiRqZCYlNEl8c0NTYTZvey9oWU5bSU5gVkhDdEp4OGQhYkRQYzQiRFhBZzlddkx6Kjt7dkUjajExTnB9IVBGKXRkKlole0Uz'@;
put 'NkcqQitULE13JXxsc2IlO0Y8NXQlMClRK0R9RTRZfVp8PDx1ImoyT2RgRlB6I3RURlVHWnNyO3wscXdzeWh7c3pTb1FtQFRlRGA0N2lHIz54MyttbyY4Y1VPI1pmdi5rckppeXNJSlJVZ0VuZk1ZRVlSO3FsXSt1Ij4+NUBsVUpASm5uVSMvTWAmNUciJlpNV0N8SFd+R3pvMyEzR2RwdUVZc28q'@;
put 'XUE6amY0dDVWc1JUMzEsP3kkXilud1V7R3M4MDF0Sj5BJW06XixoaGkyJEIzXWJqPTBhdkU8TU5XPWRZfjkicSNCRzw2In1NUV04Yz5uJitFbUNAcUd5V1F4TnhCekVOT3w1biFLMHV4WUpkaSYyPX5bOXg6O0N2NCk8b0BZc0o3anNHIWV8fCpWNTx8JCtAMjN1KHZVVil0OjwlJWtkVXZwd3de'@;
put 'QWpFKWx7aEZkWkxWcVVkUVpTOFVxJUo2Z3RzSDllITsoWXRuWD9UPTp+PjFGSnM+Z35mNjYqL1VBVXAqLFBJIlI+bGF5KkN4NnpZKzhQMjNJSGomPTk4LD9bdHVQP3h7Liw7JE5jPn5QUDFyM2RfbjpqUzF2K20mV3VpWkVQUkRYRVlFQ0tmU0o+a0dmTCRLdyg1OVZ2UE5TTk0kIypxODNhcUZS'@;
put 'Vl07RGxXMzAodVt8ZUozSlNuK1FqITdpNmRJQUJAX0VGdTkpRHxGeiU/VyhDVFIhZEpqJikxU0hqbWElQmx3X2laN1hMVkp1KEpNNlhwR3xPZFlhZCR7a3olLHwsTkxsJTEuWXh5dk1COW9sT1NjVkcqNSxRfD9jRWNyN3xfKXk+X0V7Tjl+XjdVMGF5dExVU0g2OVdjV2Y6fVQmNlBLQVV1OjVZ'@;
put 'ayFwInR8S1okU2QuWnQqeThGUUgkIkxeSXZxNj56MVRtUklqY3BoUXhEY1hieDZnb0xoZ0NhRCo3dGFLPUFmNFMyQHUoZywhKXlBSmBCe2lvWz9bLkZPTmRaWDAxLzVkcjFUWEMyM0JIeitSQFYibGpHXSllOTJ8SD50dDFJMl5APyFxeEV7Yn5bXS9DYVJJOEJvXkckLnZRPFUwXzRreVBDbD0o'@;
put 'U1AhXXUrJSI+c114SWJBMWFISHJLMkszNntlJCRRRGpUOTRLcUdGfWwiJX0oOXdCP35pOW1zW34sVDpkazJiOFp6NX0lMCZTb0w1ci8wPD5YQWY7fCJmVDVTMENzbngiZ01pVygxQ1J9aX04QCRYeypYOFFYNGNSVyJZQFJUbkNSfWBAdUdgSmRkYUdUX15hSzA9MDNnRSM6VGQhSUV4cmFiJCYj'@;
put 'e3dScEhvfCJHVUpROn1vUn15UCxJJkxQenZKQl1IYC5tJTtKclt9K1tbKyhZZmAiZkwkcHxUYGNTYXtMdTI7enVkNFphbk92JkhJSzMvYF9iP3MmKD9MSm8kaXN4Ky43SkM7Z2JabV1PbiJFT0MuKXxvUX1RU1EoI3wxNiw8OVYwR30jIn5RX1VZbk1MUz43ekRsRXg/PURrKDpIdERPczchKm0p'@;
put 'KmMyYj5TVUMzOCNDemdgcnxaRXk8VShfSmFTPG8xKSo4M2FQPTwxfU18Wl5pWGRERltoQkp7LCpFOy9LejMmOF04UDV9Q0p4bSNsQk5HTXF2e1R5czF6O1MuQEFEVSE3OEBbYU81RlRTX1BNZUFGYGVkX180ekpBalV3MSQ/fiokfUpLUFNNQFpNSD9SKHdKS3c2RGZyVTBhRUZUfmJVczJUZF42'@;
put 'd3NwVUJMYitMQSE0I1ZBSU0sR0ksUkBmY0d7eEVuK3hmfDFYOlVfal1zRDNDMloxPWohbEFNSFNkWXxoWTpCdWZDXXJpei4+aDxed19DRDdOMHpJZm0mTGZHTSNiYio7aVl3eGpMNFMzYz9AL1cxKkVNUjU/RDs/fSUiQmpFczlUZkozQ0RXY1cqPi5EQmxhSSM5K0FfUSYsQnp1dlRwM1hKSExb'@;
put 'VnQ3VW1GIzw5P2wsWy5BPEclcmpVbzA4UkNyTWllZyZ3Vm8sYSk5K1VYQEp7TWJIN1MoWHpecEVhP3Z0RWRpIXZDVDVYQF1dYl17VzUka0xMaGJSVkNsdnJ1Kzd1bStVe0J0emV9Rl55MS9AVyh2bzxaJFQ5bSl8cDpXNGI8ISxLcEMsYF1+dzUvOVFLZWtGJmZeMSR0UH1nOHw8fHhSJHgmZyRv'@;
put 'elAvJVBiTUpXWD9WPGJKajEpeSlJYzpWOHwkeFoqI3lvLCFJMTIxQzRFb19ZaCNxKyhSZURvWlJJakczdVs5dUJZKzhMams2M1k0c2omR2B7aDlEeGhEXlBRaEUjcmkpVjtkeXU8P30uOHpiYjwsbyVYcnlKUmRHYmc3RkJwcih2YGJgZ3t+YTNMQzt8bzx3aSk5QkdrakhkdFA6aFV8Lmleb3l2'@;
put 'YXpPJVMqPlQvOkNPbnlNa242TWI3cnVALDwpUHVLLDNYJXY+Nj49ImBBXWh7fiorNnt0YHNOZXNoeWIibF0zbFZRR1s+RFJ1Y2llKTdvUV1kRyQ4THhoVHJubHhsO3U0ZnQ1WT47UldRVkJaS0I4eH1iK2JASlUrRFp8MjcxLyxJNExTQTZeSklhb2MzREZDKSF1P2I8dDxxS1RPNlQxY3QkfCR0'@;
put 'cm4hbHZYc1oyRmtDM0R1QWYvSUFOcn1JajFSYHA/K11tUEUmVDlgd1FLW3JhdTJ5V35PfU0wQF9HQ1RHY2UxZ1hQKFYmOmc4cnVARmpobU11OjB3biZQKCRgb3E0Zz1KRVMrZWRFRlEsT3puJT9XS2gpTSRfSW5gXnJIREYhO1RdSCgpOyZmbDdJSEVNISVqOGNefmQzQ2I/PkMuWkx7UENNPD9Y'@;
put 'clUhTUs4MmJbQHolSy40bjRhd3hyWTcmWGooJngzJlswT21WWF1DZj5TZ3FfIUJwTkBNUiRrWEt0TFBBYXVpZ2ouQks3RDZzIUNJYX5vSzckNzJUR2w6cEcsN2RRcUtLMFFHTk1QTkZZREQlMHpdbjVNOHY4KUklO0lIeF5HO3FTOit7ejYvZjkkU2o2YWosV2RZZTZhJi9bIWZ9PjorRTlWdE9z'@;
put 'VThldkM6PDY9ODs1IktPUTpoTGZeKHQpcChacD44L1tQX2NXLCVEPTVEUTRtQnJjUDguITRjbzx6ZjhjcSpySUFZfTtFdC96dUN2VXV6WiR0bG98OHQvdFdOJShQSylYIWtJKmt8Jjtwa3RNbUBOXV0hT00wXTFCe0RMQDsiMThUUGlaRCwmfV96VWtBI1p6SGQxQlpmUStacCt7SjtsMFEyV2w+'@;
put 'ZT5sQT48YDA8ZDxYbCk1bXBeZSs3IW9RRF9tSmlsdjQyUVUvNyNpWUFzPC8iKnwzZHNpbU1YU3BENnZaLEszUzlYNV5NP1szcGAwWVliM0pJb0dGMG0xOkwvV3U0JFhSQiJ0RkhzNEpyWio0MColSTZCUHghSGZaazVuNmtWJD0sNGlXNWUuSyRMPV0sbn1BKHo0SjphfEYhJn4+OEh6V0khYHYh'@;
put 'fkIiPzprPiouLmVXP1E8TDc/R0lwVCtgM3h2d0I/YG9+N14hMTJQbWZgfTdqZSZlIjFsNFRtOyE3UWcxd2pCQGVoPXMpbXdtIWheZ2xVZj5CUi4kP103VyZqUmdaTi54QUI1IyNpXUYvWnU5aW0maUZnMzoiSHRkIURnNG5dIyw8XVg5KTR1RUswcnVVU0pXbComSXouJFZHczN4Tix0di8wX3tD'@;
put 'ZWVpWEZLY0djU3dtOj1sYD90Vk1ocDAhQ0g3bH0oU1lXbFE7Nkp9fHxadjNhcz1pMSppWTVWRX17ciRBPjgvTkh7cHoiUj1XfkAhdWNMZzV2UFRtdyQoIWY2KkNfJWZuZUlEPUwwdCtKO2wpL2JxdHVYbnJVRl9scG00cjxFUlhCdlRVcXhRL3hpKTVPfmNwM0M/NTMxMFlNeDBSVjtvRCFkK0lj'@;
put 'JksxX29NbEhyMll6UlBEQ30rdUtXPjUzbVt6bSQ0L2V5dzBaRjphYnVXMnoufFpdZ1ZNVFRJOztmb05naEZYYXp4SnFePDEwRlA1Lm1vcDVsa0ZgTSRgcmEzQ1ZucEFwKXI9JS8rZyZ9Y319NiR6IXlldEJaeVpyTXNHcTVJIT1hcl9Tb1FsIWl0c3dBWGhDbEs7YEE1JTxuPTUuT3dVa29UXnw4'@;
put 'UDBKajZ7dE9efURGUHs8TGVTd1tITVZDeiVNSU9TSVZTOD15L1BdNjhkRHp4RmpzQl9TdTk6UkRrQk8qRGtuWHlzWDw4JTt0fXUpci9eQUBqTWBpVWFYbGtXc3Rvdmt1MH5tUiVQOHZlPW5YNXNoMjF1KjgjVSVIZ2xIQy4zaEc4TyQoWWpZVXlEfStOWF5rdDhTcFVJT2dVO09ndkgpdW43QGhE'@;
put 'XmpBP0lONUM8QH1CaihYYjJxOXJ+I158eWA7YD94fkFVR1o4KSlrKVIwZkAqRG4rUkJkfGVnLytpO19ndWF5XkwoOyE2dSR6Xk1aYXBlX3ZzYHBCbmB9WUcsV1g3diN2a19dPjIkbjNgU2EyRjU3MktfTSZRKVApUmtralsqRV5+MkpLRGU3aC8vNWpZMWlUZyVQQERLOVV9VjE1L0duWV8oQjkm'@;
put 'KlRvOUwxI2xmbzQ+Uioze2BYUF4wb1BDejFMenZ1eVZKQ0ptUHduYjo1akxrMTxrPCpxNmhfWn4rWF1iXkFdPmtARjFlWU1YUUwle3RQej80XkgsQmxHPjhPRW5aSjVfUzY1I2RNPlFedDFYUkthQVNHPmVSY2BrM25zQFYwLiU5Rn1MJlBNYV5Ra3kic0NQW2lDLzBYVSV0YVs+cn1hVT9YdnY3'@;
put 'MSxCeXNaRylyZ2FzTXM8MEkwSUZXYFRTJmchdEdFSENUJmFKWCxrciVBaSRQdU8lV2gjKGEwLHJ+KT1fYGdycD5QMVcmfD86d25pZzBNJUJpUCwyZ1FpR2MhZGlmYj5AYmRpP0F1SExCJjxjVTNWYjAyKXl9UDV2e0xwLEg6O0Q+cE1FLHtGISlUdG9xVktpRmIpSmUoUG4pdmNRWSh1b3pNa0Jd'@;
put 'UElRTGUzT1BEPmAze01dRltlfXRMWV49bkFDI1E0I1hKcHA0Iys8MnoxMWMzVmJuNFdeLnMmTikuZkZeZml1Q3FlOVVoRndFTipQa01TME0yMlA8JFdtTD1ZKFNgPGpqd0c+RGlRa2lKOHBfVWdwVzVrMEguOioyM01kP0M7JSsjUXZ8aDUsXlhlYGBmVUQvQS8+IzJmI2FAbmF3dTYqX2p5dCZQ'@;
put 'KCZXaTlgMSUqU29wX1NoIld2MG5EaXhOIllCNGNbciJVIXRQWWh6VkU6ZFkycDVbNkZlOiReNztoOHNxWXUlT3xwSzVlXVs3KVI+JXNdb3ghMEM0XTpPVWpdViMhLHlAcClzLz5wWE5BUmdQZG97dmt0fURqcV1bUERGIXolLnk7akVmWUsuaVJ5emc8WkIqdWpCO3RYMktxXmZKbV95fXw2TH5W'@;
put 'Nlo0cEp1aCNROGJXKjk0Vi9UcUs6Z3o9YTwpW3puOTN9d3VRdiMwfG9DRzF3MHR6OEFXTnMhPDlkWFkuJXF8X3FXXl43bEspYXtRfSRhcC4jMD1QXyg1dEBLb29yXiF2TygsTV1gbWB1dWhHfm4qWShlTWhGfWFUWjxNZEQ8TnUzWk53MDl6Ykd1SXcwdERmVWkxbEUhdCoocn16K21OaCVjaEI1'@;
put 'O25xXy9way8sRWk4QUNCcUY7QG4zPDNjQGVVYStPN11XMkg6OltWNmQzW157S1RjW3trXXdteVpNeChpJT1JfCo7aXoxN2NpUkokMzxxaS91XykuMyVmdmkmOW5jOG1bcWdVUF91ZTMmRSZldTBXcHVTWzciY1JifXZXSTlhZXo2OCE4WDA+VTprZlB1bFtfJik3KXp7TDpeR25KPVJjXmVaM0U+'@;
put 'O14+NkJkUyZVbzdzUFloKSZ4aFs3cERaRX1hWTY/W1NlX018KC84ZmFuSzlAYj86PCFlOz1IdSowaFhIdUdke3ZGLyx3YF17NCxCPjtlYFJqamguOnV9fV94Qj47Pj8/Q3RyVzUxVkAoYWtfaV1jezFLbGhNVFJ3L2ZYUmtBU1o6T2tZaWA0QTdaSXU0X09KWUJTQjJycUIydEVlYktUYEtnTUUu'@;
put 'bGxCRHUqVFFgREReTDhSZVdWVm9VUGU5WmFnKjUpUmhMayVQTnFzbyYpZyl6e1FSS1JNakVWKlRjRFleejtKKEkjQ25zbyMhK3BbcnA6VGd6PmF7SH4lVl40KUoySX1pdiw7ZlklfV5ZLHEvY0ZTZls2Mno6eUU1c08+YT9rKG5hOTEoOz94XmpjfSQ5RThQe1dUQlkvdlphUVMzfVImSmZkdnoh'@;
put 'PXJLZmR2enliMjhzOEBYO0gqQGc7TSEkLkZreUIwKiM1Km01MzJwTiFKS10oIzlCQyVvNlZXdipvPXorImFoZ2B6QC4oZSIlJVFeO0MoQF0maCZQREVheCpPL3oyKSUuO046YVlJQSReSkVpOGZwVHh1ZmlmR1BPOEFbOihtWWhbZ2cjOXZZa1JCT3lRbmtYYiFPakZHOnhQIndjbDsmbmtCV29r'@;
put 'Wj4lLk03KCtgYElPQlBOaGIxWTA3KUdhQ1hOcVtAMWJ6KGNyZnc0PTg3RW9mWUJvZllBb2ZZLF8lcUpYNnI4RS80Y0N1TGsmdDl1eFptSTBsRl11dXwsWURuZE5dbmk4RCltZnxDd3tOIlNRUG4raE0hPkRna1RVNVdGXktBbCMpSjdhMGlhSVUiMkA7KTIzRjxhOU1JP2ptflUmYFhaaUJpfEV7'@;
put 'Uk1PSHpbPjR6d3Q0XVYwUk9yX01eKTBlWjtoXnk7YEgwLmhhdEt1Rkc1a3deeit4M01OSCx4akBsQ2ZpJkIucnthV1JeajtEXjopTjNZPi9NKEpHSWBMSmUhUjZpPHI1WSQrSFJiaSNDRHZVVHQ0eFI3fH1dIVEoUDM5KyM5XzR0JSZtTStPbj5JZjNrQ0p0Tzh3fktNUVo/MSR+S3I5YFBuTiFZ'@;
put 'OE5XYl8qfT9eeHJAZmJIKjB8XWxAVFU6bG9aL3gzZXdINyx3NiE3Z29AUyNmdHhEMCk1KWBsQ2xFZk03RyYrd1ljVjFZcFBFdzxzcDQ9Kz98KX47M3UmPEA9ezkjO1J4fHdKRFNla1hiT3hoMEQoT198YSUuQH5dW241JFFuWzExd0tPXzRiR0xMUTBuc0REWChHSWgmVlE2Zml4NXIxdEAmello'@;
put 'Q0U+d0dJQmNLNFVoMXB4PytObHxUIjhQblovd3A7SCMzbV5qPEIpQXljQnxCN1BDNiI9YmYpRU50aCk3Q1l0LypvLGJNP2p8SGQxQysyK2RlPkAmel0sJHlpSEVYI1I7SDVwSV1ILGs+Mm0lOHdmTkp1a05iK0hnZ0xUPEZHUyhZRFNWPnR3OV41I1Q4cVFAdUAiP2BbSFE8QCNtS11MO1dLOUtJ'@;
put 'WntLImRYN0dOY3M+THZzLGozYFNgSX5IUzhhfjBJLmFCbTJrbFpvQFFoN2FLKyVMcXVJNFtqYCFmSFp2d181KFFpbDQwKmwlX1YuRSwlbXtAPWVQbXpFO3s4aylmYixDaUQ3X3IiRSlnSXlJN19YWWFvLy53YD8sK09xZkRiYzRHa1QzSChefD1vT35GcWVwdUtuPywlTj56cTExMCh9MUMpYUNJ'@;
put 'MmRxIjEvb20kRUZ+XjwrT0oiZ1l1RSZUb0JkL15uQyt1R19oPVtAQzVsJWRDNyNkRi4uTFRINy5uU3EpR3JgUC9ANkN0T3RiaGxVZzM1SF5EJiVDWCsldDR1MzVDTlFuPkt5ckl+JVRRP14yIj9MQmRdRXZ0MUR9VU5BdkNDcThBWEZYaWRxVGFqI3ddYFgwQV4xUz5aNGBWdWp1T14/Rl8pRCV1'@;
put 'eGNTd31YOTxOQncsMGd7VVQpUHRdb25AU0tKRTI1dkByOVgvQF5oJXEpL20jaVZ0STBydVJlUXNLPyRhcjJCP2lHbn4zWHB0VDlXa3lHRTtiel8wUj9QWSpTR1BQbWQlaTYhR1dZTFBzIy96PEJzZywyUGlDKnNGXihjVDMvfE8iRE00eno+fCk7WzVqMmkjYV0qRGg1MEpxNDI2UWNpdFIjITVI'@;
put 'T3tvbX1jNFElaCVJVzJbM1dPUls4Y29IOmk0QG5zaEJ9Ojk6dWdZWy5ob3xyMV1JT2skTSJyImN1d0YuLjoyejhUYX19YD1gOEZTQkA2cm5BRGs5VHJHNnYhZCwzZzBQe1FYVj54XW5YZFdEXnZ0ciIpQyZbYlhTNVdSPi5NPjQ/Yk85cEU7V11bZy9vN1o3fGUkM2NkPz5GInpBYFI9ejphflAv'@;
put 'b2lVdEkwKXM/YEtFZ31XPiZ6OkMvbFNXPkJXPH5BTmd9Y11pT0Q3OU5EekZEWnNzWiVYX2t5fX1JQHFzTHJLT2wxIztSeFRvVnNXWV9TLjgxV2defEA/cE5qUCVMNFcpaDB2QF8ka2RZdzd6MSVQXmQ0e0NgaWk7L3JPLkIhM1tXJmNTXlBNT3tXKylKODR4ODwjUnR7WG0rPzFLLEt5U1lvL1JD'@;
put 'VkJWInV1dH5ROS5bSF5kZ2NKYjlIITBBZGNmT35FX2I5VjNRTVB4JWZUSyJCPFp3VjBQKltbRyozWy9lZXgvVThIempPaTR7JiEvbDU0YyxEaFYkSlhGNGJ4Nl5kO0gvZE5IfHQpNHp6TDYrZntPajQjIldFUkdNMFBRen1kNE1YYUZWQzpHbihoMXF5aiJuJXtlMFpJTzROeDNSY2BMJWl7Ind5'@;
put 'NEQ1KVd1aSlffS8xQ2FqeXl3Vm49TlIxVFM/NCJydXNyTzpPPHF8T0FwLjJWMUZWQHJpVDtyIUx2NEw0cVNeZDlyRWFJeEdWQXs9U2c8Ylo7K2FedzxJbmcvPDd3RWk0azRhXm5RYldaPnBjZzRqPlpLR0V+XmIuZD49S01JWmg0TnpZWygjNDQqJGF5TXBoV1JFW0ZdJkl9S01aVFspL05PMT1k'@;
put 'eFhjOUR5JitmRUg2c0JfUT4pInl9XyZtRVVxUzVnYVh6aCVVSFFjSjhJT1phc3RYQmU9VzBKN187d1hieFZod0BefDIpdmhDOjpWd3MmdFclMixPPCRXIip3QEBaOGBXYz85K3dNTmdVczxXMCMibkM4SThXbj5FdiFCYk5rKWNOZUwpSXBSPjJjMENhV2QlfC8vbTZNN3lnNldHS21jV1F4UzB3'@;
put 'V3ZpMXFfJSVRUUYwUUooKnM7Zz8zai9eUFNUN0wsTkkvYSVnfUVvKVZRe1QzRHMpZ0hvKTIsfkUzZkMkYEo7WGU0fGgobSxJZy9kMmY3MSxoRXFBVkVLaThQUD0lRChXXihzPWtHcUBbIytPUD1TRSRnfWk/RHgpIjlXTzQ9PVt1Y0xIQ0JhUXNSdiozX0YkLHovbWJqUlFvWTtbL0BRQzVuRHRg'@;
put 'QmAkYCo/eiE0OlQ0ei9tSGZpTk1FfldIYVQlbVJCbUJRTXVPJWAqfERyKnYjRmhrbz1pTkhyaVd5M08vQkJEaSVmTXRuMCxleCMvayRlcTAsZXglNHt0TElpcTwpMUs6U1tjRV91TVdzLHkqaEQpaz0rQGlna29IQjJXVTBqNE4lVipMSGd0Lm1XIlNVeiJKTFFFcHQxLGV4bnRYUnw1WlFjUk11'@;
put 'SnQ5NzJtZ1JNdTw0UTE3SUFYRVI3ZW4jPjIlMUxWSUk8aSw1eWQraVROVX5pa1ZDYnZCTj0/cERXTTE9XUZSY2c0SHhOYzcsYEU8PzxpMmswUl1WWk42blhjIiR+OCJqZmlnWF8/PEN0Z1FVTnBZKFlsW3lyZ313Ty8jZDJAQF0vKDs/Lmo0Z1B1ej1zang9RlJPUjIxTDFZSjx1NDFra3wrSzJa'@;
put 'Vzo/Skx9MWZQS0V9X3U5ZDo3KUlvYyNjZHdYQCokJCJKXlBsdCRvNExNLlRHeH1gOXtQK1QmZ3AvaGhQfXRELjxHKDBMbmlbSmdRW3hgJU8rPEhMTHkkZC54aTRfLD9qejAzVC5oPylbP0w1WzcqPUs1W0hoXj1VNVYlfDZIdnlXS000XzRzekwlPXNAcnYrXkdASz4hTGB5ZStleDEzTktyamwl'@;
put 'Ki5fO3NWaVF0KjJwYnl3L2dreUJxYnZnNy8xeVo9bnAoO05sYnRbUEhIWVIjWVs9NTJ9YW9bUjJSdkZ0VkRKQVBuUnMmdD18T2hJQyZqbzl2X1VDTmBvRElPV1F7O0pFSGh2bXdJKzR8aFNYWFAiXV9TemVLeDZzTz5HZismRkhHSzczdSQoe3Ywb0JPVntUP3RQSW4xQituamEiPiZeKzo8NlR9'@;
put 'bTVgU10wLFJvVnoqR1Ulei5bbEQkRz1kNWNJOFkuU20yRktdKFtuKTZsWzNaST1CbnVtMSErMzZePzxAQ34mQShIfCJyMTxPfWtKVS57eHNfU117JVA6UGt6cTk7dTFPTD9HNUZuOTUsTiZhXzw0PUwwc0BYejkzU092eWpBQyYzYUk5LCZGOEdGSCYyRzMpSTB2VTkwSyFnNkxpaHViUCIoeCol'@;
put 'PTNDXldoTjw0ejpUZVN8JmJsWGVuZXdSYFdjQGZ+V2p4eFZoTjxbLj5gSiMrM34yLm4oNmhoIylIQzRUY184RXcpclt4V2svMXlKQXc4ZHFaa3o/aElSXlB+NloyK055WS8xNHtjY29pNHxVamYwZX1bZ0EqKTk6LHQ4ZCNQMktZRjphMVpTLzpmbkgzajU2d0JfSVdXPj1LdH1SNkRXV3NUYkAr'@;
put 'MXFxODxNTThrZStvNmFWNz82RXxpfCVFR3dAeiRkRT5ddW9fKjp8QyUpIUYuJnVeVjhMQ3tjNiMiXSZZfGxRZFEjdntIPEB5Xi5bZSJOaElAPiYoYiNiWTQ+azNWcCJtUmNMNm5BdVlEbnU3T0clQz4zdWRwbmp6IzclNE5FLzMyNn1bO2pASjdpeSw/LCVpJH5eUT5eL0ojS1NEeFcuKX1wayFX'@;
put 'NE4uSUhdKmckL15nMDNIcDw0I213eSgjYXc8N1Ewdmw+WHpHKmZ6bVBrTGV5RXNbIzs9bkxrOSZ5XjFmTytJME4pJntUYiRVc2JnXmAmS1cyOS9uMSlyaE5LZ1NHU0BwKHFZKn4/dzhyUzUuUFhuZWx9d0UpI2loTz4+NmRvfT1RYzo+WG1TSFNVXV5dKE5KUzJ6LF9yQDZ3SFdeSFJRSXdhKHRW'@;
put 'Mj0uIjFNRGIsRTltaFFrbEdINS9HSTA8OCQ/JjB9KzJ0WHJTUC5CXm9DUihMRDZvNUUsVk8ya2NtLFhpYmpiQC5VSiNrb3x1cW49d2xRPXEzd1pDR0M0IyMrT3tbUis2OEhObmlYeXE5fTwiQER1dFl1djNFIXd5amU1PnVuWGdGZlkrI0AzdjZ1PSZnMUs7Qy54WTVua3grUCZTdEc4UEBebmRp'@;
put 'QFlzWWhiS2VOa3lLRmJ1Lj9aKFBzaT0hNXZEe3JxMUVzcXV4W0NJMmcoKiphamVqcjU8a2xAb0JgJEs1JD9vPCRCa2xPaGIrPT9tfU0wSENhU1AjNE5HOGhrUCVabXN4RT9APDEiN0AvW01ENU82TWIkZ2tRYCwkUFpmeSt3RlM9aW8scXhSPD5gfSslTGlNVFp5Pkhgfj0sTnxvPSR2TGUhXWoy'@;
put 'KGFpTlJLR0JtSndtfmNjNnt+VkkjNWQvNyxHMkpRWEF3e299NytZJWJ6bTEjSj1pJGY+fXczPnEkKENiJnVRNiExVSluZXBXN0orcH1dPFhSMXQ+YGglWjFwWHVucnlGLklJfmtnIyJ5K2ZlNDc/UE5QQDssRi9FOClOQVh5a3x7T2BMWjlmZmwrOlNoWj9YeVE4S3ojXiVKczFmY0A2c19pT0ZQ'@;
put 'MUw8OHlBcllfUyMzMS9PbFhNMyhDWl1banlWPnZzMW1SfjRecG9ZTmMuVjE7JSZ3PEA7VmBIOCx+KU9jOyVWWD9HVFBfUzM+RXZhTT1tMH56WnY9aHR8R30iYCRFOm1VbnUya3ZpZ0U2SXM0K3VrM0Jsc0x7aXtSQzAxWTBGfFFuVHAxYCJzZyo7P0Q0PUQyTSZJUVpvblhmUT1PbFskMiM1a29t'@;
put 'WE4hcC4mVypebExjLmMuekJeMU1ERVE3LEpsODMpdnZ0YHQrPGZ2K3FqVmxXcGRfaiVyOG0lentaWklGT3I8d2hIamlIZFlVZl1EaVA9azIqKi4/Q1Z1OmQ5bWRhK3V0dWAxV01fPitxe0dxUDZ1eFAjVzVbW0A/Ky40Y1hhOzpyYmBWN2hUOEwsQUk3TEQyV157dEMmQiZ0TlY8aU1MdlJ4cGRC'@;
put 'aj00d2Z4VkVzS2ZkQC8zISVtbUtPZzA0JT0qSlZPJCNuajIreHM5KmJEfCsxN1J3TVQrTVFqZWQpSy9aXldGSzRXVl5XbUFSZ0wzYypaRiF8MyF5MF4sWjNNYTFmJDtLfXo3THl8PDFfcH5bSytJeVRzY2VDekkjMGk0NWYzPHRUQ0k9dWljUWpBJm0peW5ER0dyb2tiKXd1NHV8WyMlPWtZX0VX'@;
put 'a3dqcSxJN089JGc/SHFuS3c7bl5ndjlBcz8/b21gZi8qPm45IUJRe1JtOlI0K2c5SWZjSiEoVEZyIWU+ZDwlbyt+RnkmTXB6Wkg/WlthfE0+aSNPUF9LLEU6M3lbJEgrZDpQZkBAN0dyenp3VXZqWVkrNWthPGkycVBOYlEqQU5POjZqdFNeLFNrbF5iO3okSWgmZnleIjZJVHdoYnVEYjlENyhT'@;
put 'SU9HRVlZK0xhUnZWb3VoYiUpenthZFVeLnpwdClLcnRkUDNxbzBfY0clanpZZEFhbihORlUzUWNoeEN7PmMrTVg3S2E5MCNYUyJVcW19WTcmSVMoJlN0fiN2QnBuSUBCbVRmKH4/ZjojWDBfcEI6cE5hIVJNNiZ+KzZmLHdweHc4JlQqNF05OGRQOlAjW0dOc3dRenc5VSE6KDIsVHtPMCRJIWgh'@;
put 'aWg0ZWFjPzV6IXxgY292WWZFUTxdRzJBMUEjZCU8LHU8e2I4QGU8XWghO2VleDNuOHV3Mj1JfmVvaVhPZWpSXmwmLmwyK2xva05MP0VkPktkeCJ3WWdFU2JWaFl0fDE3OVp3UXorN2I1Pk05MXxoaCUlKkFQNTZlYX5oUDd4aktddzk5fF9fN0RuK1dpaSExKjgmOGpjQVc4b2kvSmlyI1M8TEIj'@;
put 'dTkjWkZRdWEsJSxTXnc1dmV8TiQ3XXRyRzl+JEpQVGJXWn5IbV12YEU3eXV2Plt8WENLXSY/JjJbYiw9JE1SKGRKIkFSdCl6OGJgLEB3Z0JiI2BULEIiWjgkTTUlPUF6WUJtY209clteUUpLT31eUTJdMl51WWVVP21BcyZOZX0pSFY4W1ZnOXBIPl5ybUpLPG02JjkyTHx0TVgvUmswdCY7UVUy'@;
put 'c05MWE4sKEZnODtBfXVZPXxpczdTfkJoJSE3dCh0JDJ0VzFFPWBiX1o+YSZXSkltUmh3UjI0c1RPeFhSN09hSzcwantjTTUoa0JRIkZ8bi97bF1wUHVNND1MNm4sSE9vMCRMX2R2anpMWzhSejhteyV1fW9iM21+azRTOltzN0hbNVFHQnEhbV1leCxHZU9rKUd0Z3U6WkBCelc0KDowUD4xPFZp'@;
put 'Jm9YdE1mdyZHbUZXe2dPJCxUMWJ3dyRJUT9leFYweWF5cTZlZEdnNXVpY0BGWWh4Y2c7Z2FOPGlXIipzXk54OSkjVmMjaWNAUkttUjhDR0h7RWMjcFc2Zzs6cjRWWE0xaVU2KGQ7WFcpNmVIZk0vVUhtKWZ+a2oqREJ8aUI7ayxGfVB2QXJ5PENrWi5wQjVeSChFU0pJKkdnLjgyKzJiZGhXIU5i'@;
put 'SFJ4LkojPWxbSD1heFN+e1A3PW5ZfWdhOHFLQ2cpOiVrSiM/d11eb1BGTTpPOXltZGQuV11lODk9RyJhXkIxPWxCVmIydkVoZVhBenttZnl4PyJ6NkA8cyZJJCYvNSRFZjEsVUdBaDd5KWJZSDlJPEYiPktdVTN4P2osbyVXcDZZRjAkSXVBRkg0US9CX2MzamB2XXEsYVpdRn5NVnNYI1B3MDcv'@;
put 'c3dXJTtkL1pCe1tOWXxKMzlVT19CbENdfmt1QSJnb0NkU1Uvc0MxV2Y9QXV0ZjVKVTcyPEdkMmYjVyohOVE8aSRHPV0iZ0tnMGksZi5tPnZBQz8kayQ+N3s2aGhSJTxZWCo0Zys3PE9leCFKKzRQYVRxYHw2Yls6RyEmP1E4X04meChoTnkhUztaNzdORG4sPWxaVW47ZkxxRygxS2dmVjtaWUsh'@;
put 'eyVGcUdzS0xHfTAoQC9pPl5rXi5aMSh9VX1EaUV6TW10c3cvNGthPCl3RGBIbGlBVGV4bXA7M2g8WHRBbDtLMGZlVSJaKzhKW3hVV2Nvd1AlIWJ9LCU3fiFKZCo4TV97MkdTP1dFeS8qfSswQ2ZwYCNtTS5lNjciOWtRN1M3P3pYK3taPVImKDtMO1V+QGZ3TXVod1J2XTIhRX1tYTNdeGljUVBp'@;
put 'I2ZAQjh2JCNgUTlrei52NTxpaDNsRH56S3hNamQ5bUQ8S2JCTGYuPXd2KiI2ME1Fc05UQz5pSHs2JWNkV1gqbUY+Kz9ZP084LD1rViEsWWlhVUN8b3lpIjs3dW19Ny8iKTRPSV1xNmRGXzs1dmd8X14vdHkrPkNjVT1YeVlvWVQlakkoK3VLUGZwZnBJPjNpbX19Oiludj5LVWk/Yj9PNHd+YjtI'@;
put 'Plgsd0RkSCtKXm1LLDp5aUtNcTokRzJRUW5kRCshdWZkfUglR0RWZTRCKWdxP3I0fUI9encka2ZwWFJpPFg8O0dzNSxpU2Zxc05LRD81K2shUz9XayYkdTlOIjwmK0wlNTpSVjc6SUwwbmV6bXtMREkseUY9Zk88Q0dpV30ua1FWbj8mO2ZASTJ4PCZhRkFSWVpjQDJBUTR3VnQ8aF4hYVhhO0pF'@;
put 'K3A9OHJ1K2VPRjFuPGdEMHcuQn08L3s9PVF9Q1k9RiNlTDY/SGhgXk9lVHx2dG1vb3UoJFEkbktzUiFZOihUa20kUElELD5NTDMlaFdNXmBzMCVfeEI4ajspRndROVNVKUZUPyxveGR5KkFWVkhwYE9wLlU8SzV9Ri5qWFc9TzsuPiwqKzRfJnAmcDYuajdLIz1ZdD5eezV1TCNxMDJ6RjUuUTNh'@;
put 'WmhxN2k5WCMzQzd3LGFeMFUrRExzRV9YO1o4VSVUZ2ArVz43O2ZTbD03e2RVT1h9Vn49YVdaKntLNTx+YCNLJkhtaylxK3RKU0FbTHlHZ1lXe3EqVFEvT3RgKSRKb19kNCsuX3JPVH5HT18sUFk4YTpEbGY+ZGd0QVUpNGZyIzZjfE5WPUMscG06VTglSUIuQGc+WENgPT9lW35MbEllTz9rYTdJ'@;
put 'Q3p6PEZAVWl8PlY+Zm1pTXk2IilqSSYpUDZFfCpANjVMdzguZWA7ZXk/Nk0pOGE+MzZCcnh5bj8rQ244SFNLeUA6Xzc1TyJ3VnFYc2NJV3loKih1YFlFKVs4ZFZ9PTVXRHdwTzNNYzNMOiYwX0FpZUskRG84N0s/QXVwYW4sPGI6SWJReys2XUVzXzd8WUQpQUhtb0VZcSR7eFg9aWg9byJkJCsx'@;
put 'LDV1elBLM0NWQ0BeIV8+Ly59WXJybGcma2tnZGR3U21Sfl4kPzU1RGt8YSltbDJpXiJVbDI7Ri88M1M/OnsleFArMWNCUHlRRF8wQUsqKXBnc114YEJeUHhqL1sufXEjbXUwYlJZOj9FPkR6PEAxRTpJW2pTUzdzYiRtNHFwRFgqS3BVJkI3NmJSaXpjNndbVSkzflI9OnVocWRud3tUKD14aEJv'@;
put 'VnQhSGo0PHJvM2FwJjJIWkQpTWIoNkM3dC4kRnJMX308U09Ud2srdEsjZ3RVOjQ8Lyp6P0JzIWJCKG9bcTdhXisjJVAmayZeVE1Eb1BzZys7bXJnejhlPlZhXkcxO0Z5YiRFdmE/akpUU1FnV25UWHp4MEJnZyouamUyNUg6Mi4wRiVITmsmIk9AZDh3dmApfDBkW0pHV3AoOUBJYXsvdFM1P0VP'@;
put 'Z1A+QyJKMnIrMHw4IWo4VF1tLiEpOThmWkVFdCRaXi9dcDpRK0A4JmJpSWE/Z1RESWRRcT4kLlswOCx0REVCWl5kVCZYdCphJCpWPXFyM2kvLnF1b0xgQWsvWH1WPCkuLEs8cVYqJnA1R2NDL25naGtHfnFvbzNkZXw1amlOTDdRXSZrfGorNixGRHBLekF9KSRnOnsjXT1eZlJqYE03KSxlQSlM'@;
put 'YXVgZ2ZMeVN3V31FYUUiNEk8Y2JCK30/PmklbSIkYUpXSD1IeEdQdEBUa0NvQSFLak8/RVVmdGh6KS5oSkhDTkksKE81Xjs0O2R1Pj1FQUhsdlooanwuYW1nbW87ejRCQ3sxZ0B4Lnc4YjJpdXIlZmIoVTxhUlhgY1Y+enBRU1B4OmteTmtXX15tb2VWfTs1X204Q21NLDtZUTkyRy9hXm1DLG1f'@;
put 'KnZ0fV01fDMlOjNHXyFlfm1CKEpKdj48ZyRqN09OJCltVVB6RyMwJjBKdUVhWFpDJU5BSCtmOVQ9Y1RIKHN6a3k4QDhpYzsjITV1dlB9TSlVTHo4MjsoWm16OHcwQkNQRTVMMGlZWCtjJVo6Tl14aFo/dzB6Ul4sa1lGS145b3Y7aiN5cixAST89Jj8yIntwZ3ZZJmlmIyRJdVpDI3olTG5pWDQ8'@;
put 'KWRtZG9HaUFbdntOamhxWWs6QXIwcT9iUyZMJCJSeXYvVypUaCRjKEJ6RnxNZytlamQ+YzN2NEhXUEY9cE1gMFlpSSI0SUlFekExZClIZmVKNiNAeTdCOjI3UkQ6SE1uQ1hOO1M/dFQjKFlpSSI0SV0hXztOR1gxPStFdUZOPl44S1B4ZnRULGQ/WzI/PmR2aCwqQywuW1JeQFE+PGhAJkJrUSxf'@;
put 'JnQ5S0VdUEQwfnJLW2E/XW9Md1g/RVljbSVOVkhIPl8sKUNYRSkvdkk8JEooX1UyLH0oNTZjPHB2TXZULjBLQnRrRFFRNUMqQ3xFfT1WPjsmZD5PQlR1PXBge2ZfKVRSW1c+RzRAUiZlJGsqOSpkXmlkOTRgU3VfTGVEV0dSUF9GN3x8YF9zalZpP0pEV0ROW3B4NE5xdTdWV1tQMzhWZCFtY0te'@;
put 'KG02SGF+OyZnZm90YmxYWmRlUE10djQpTCtuPXRUOFEvcDhPPkA4YDg/dC4/JFs8P1UvNSE+eFlHRTpkLyM9bUcxUj0oK0RkTiwmUi5tJDJXeTwsWnFmcVgkd29xP0REWT08cE9CZ1tacSJbaG19V0FnRnx0Jn5LViUwTHJReW1HWzFDN0BHUFRoaFhmQClQYVNTfVpGM0FKMSlMLFlIWnA2fVpx'@;
put 'VF9TS01uTitvWjQ6fW8iRnV0ZkdSTEhOLHNjdipWRU8wZXdIdUN3SzBMJDhmazE1XyokZyhpOVBXIVlKJXlNYzpMSEhOUi9sdzlHcUpKdDhCZUREJU1EL29WXndHP0ZXK2FvTCtIQ18lNSxrRUk2L1dFbiJiTEleP0ZVaEhUY3ZYWVEhe0xpR313Q3JfOTNbZzEzYyg2dUBvQnUiP3QqNXRLSXht'@;
put 'XiZYcT02cD01c1paJU9uaGl0RXgmSHIjUmRWWE5fOz1Ee2pbWHhKWHhuTnspNmspYCZoPkVyMnpWekpdVTc1e1N1QyNUPjIrTXk7V3ozbGslez51MGJjNS9HSU5jTFpeZFtkOmlgOEhlJitqa1RUJU8ub0hta3wvJCEqUElQWTYpNlg6QHJPNTV4P25QYm8mJTNvazcuaXMwLGFidVd0Jip4YzUq'@;
put 'd0Y6Pl94Y2NJR2w8cGtYNiNNS3dII0k+bmtrbDNFSERCa0h3KTBGWFFKcWt4NDdwNmkkPSV9ZlQ4dH1aLE0pLi8+UiU6Lns5MlcqL2pqJm8vW1tbcllwXWtZcCVVe1MyNUZTa3BDcX57UCs9LllKfD4/a2B3XnxQK11waVtDPkMmZm1tOWEoZz5+VGlVQ1ZeZz4hS3p7Ui5eWlh2QDpwdj16LlNw'@;
put 'SVNJeXZrU3s4Q2xVJXE2UXxXblNqKUh5blNYUVYrOGBuT0FgcmdMSm49SDVLSHUiMn0/VDRXViE/Z2JaXSFrIiNNI11lUUF7XmgqIihWXW9HXk47YFojZm1Wb2JaRFpWQTByI3hWVmNeKHdET2M4LnFMJF5uZT5iVWFkWiFycExxL2ZbKHlBWWdtbjpxI2lBcio9d0x6eHx9YDl6UWBoWkkkNngq'@;
put 'bzkqJFUoW1J+amFLQFk5SHgjNkBgc1plbVp9e2ZpaHVpdE9mYnFJa3pidntOUkZENCF5LnxsQCJDWC9iek0yaGM4cnJReU44KXpkZytDNC54clZ5XXE3UWBCWnJmIXtNMDVGQSleVGBwUDtBS3wvelFxNXZ6ajxdcVFrMUc8MEEwdE4wI3V6Vk07JmZkUUg0Yz9KY30oVC50en1HNVA2UkZdYklZ'@;
put 'KFVfYykmMW1GM35rWy5HKkQ+NlVfY2dHVF9eb2BNfWdLYzFCVDF0OVlrPGYwTC93LnluclI6LGN6WnYlcUdkZl1bflo2SXpdUXdBVnpIQGUoQmJxd1omJkc6cSUjO3xHUD9aTWUzSVVJNUYmTDV2elVOZ0coZ1E4I01wW2R6a3oxZyZVYlglcW1Wbkc6OC55RngjWmJmKS5POHRWfnQ/d0VEI2Z8'@;
put 'R1pSKFZkSzg0WWFsO0peI1dEcHg1RU5SKSxba1hBcjsjXk5Ranh3JTEscz5NTV9KY0tZOzY2I1NvcFheWmJmSExWTXMjU285Yl5aYmZpPHwoXXFHUDBmaDxPP15ufDlfOGdxNiEoM3JHZjsyOER3VyU6TTU4T0AqQjJsVXlOd15MQ0xleSUzVEQ8MHBwKEJ2dUhsYUI1ITVWbVJRRiV1TFlhZXFX'@;
put 'Wk5UWmJmdUdDfkYhbmd3d21xWUw+T18ifCJKQiF3SFJVYEppTCFpbWdjKUthe0wqNGd0R2VlfWxSMzlVQG0qSFVPVU5ueUIvZk1pK1tqREhSUEYlTWhdNEZwL2xBcyVNJm16Ozchc2IrOnJwVDxSfjhhY11AYVM4M0Q+V2lNeGpmN0BJYiF2UENaZHRrV1hte2ZhJXc7fEtxXVsjWH5pRmU/d1dW'@;
put 'eE0wd2pCI3t5KV5vbUI1dWd0fWRxR2hJJTpnYWFHUDUlbk8lO2lOZEsvSVp2RnZ0MHwhW3xpRlBufH1TKzNucCN1MGB2JjQxaE9gVThpWXJSbkw0SlQ/fVhAQkUjO0ZlUFZPUysyLzg0RCQkZzU+alhAMFs8bTl6IXZheEpQZkc1PEtjbnNwV1p7SGRSbnl6clR+JmZPYXddMXFNK0dzY3lhNSwj'@;
put 'KDxtM3JVIzpKLj9afCNwU2AjdHxQbV1WV18/e057YzBEO1ExR3RfO0dyT2FvNDljfkY7WnJGM3ksL0daP1gxMHUlaUw9Mz9aSzI9VkoyPVpENy9FT190eX1hImd5XmExLjNWI2lPVTlxZSN2MUxJZ3w4XSlPTzsmOzhXX0N9UHJyTnN5K3pnfW18Ri9XPlAyTDEpUWk5bj4mS1hYKmVNSDtaYEcx'@;
put 'VSNWI3ZtVXp6YUtXbWg5eSFrQ11mQDlndzwpTCFkTnFsZUtHcFVdS2peS3U1ImI1Ky5hK0NyWS9ZSHtATzRpezJDaz56JEdCT2syJjlNQmhoK1hHPkwkKCtvS25XQGV4Yjt5O0wkKiUxY3JSQC4oMHVePW92ZyVhekFRJk1tTEtpVCx9JUEjfG1OektUWVt2LGZkZ0M7KTpwYUUzQy9PNzhOdj1M'@;
put 'JCkpKl1fW3BFKGk5YVZ+RWNxNVFNeE0lKlBiRDwuY21EelJGb1JORHE2VC8hW2VTbUlJVlB+VmJFb1pgInBJajxFVDNULHt6YTYqQVgmNm12Wzl4TCQ+JWlnQ2o/Zj9dfU8rdU1SU0c3QjtyMFh0a1R5UXpHdjAlfS5KOFohVTBhSytnMGRUeiFPR05zT3JNcUooZSFvRkVaMDxbcH5UM1taaHg0'@;
put 'Pyo9fVBJK1pjXl4sMG1HI1JVNixEIjU2JV5xLzc5WHBZUDBHWywwTns8SF9dfiVCVHRrNztfanZPcCNKV3NIVyhsfW9lalclcWRtWn1QT35KdG9aJF9nSTxKfDFsYT1Tc0RXM1M/KUs0Jml3YyY3JENONGdLNVUxVUZ5ZCxYMj1eX157On1eWmJuK3hRL3xBVG1wPF0pZylOND83NChVO3o1SX51'@;
put 'aSl3SGAhWGJGUDZOcUp2RnkpMHR0UEA2VU9NT2dgIi5vcl9VXUJ+aHlkQCZDZ3pZaF1MaC9SOzM9JGRFT3ZSby5nYi5MJl42WVo6N1U2OllvalFGKilONUBkYllua0JHLElaU1B4U1tTN1lxTG8yeF4oPXk/W3A/cmdKaW1nPSl0TEY5TEIsdS83Wm1fSXp0K0Y5NHVFanIofWU8XjFsRlFQckdM'@;
put 'Ul5LRFVpWjAsaXZyVzBzVH57c1R+ST19QjB8WHgwLFlWVzFBXihQeywqQ244bXsmQ2hRLHRpO1FeZldHX1VLU200JWlkP0QpZUZYUSFITilnRlRzTlQkajxfPSE7c2ZjdHleenlefjt2VFo4ZE9CYH4vQEM0SWlVW0tMMVZ9Xn14aXdlTWd3K3BBPlhCJGVIRXlXUHNjOk5EMmRsYGBncG1MbWVY'@;
put 'PGp5cklfZy9BTF0lcSsmYXE8Q11VWl1ZcnkiS0YuJS5xY1k1enw+SGBwXTAxTUlDcz5ob3MhOTVQeUdDP3JmPnEmVXUuaVlPSy9JWmU4bz9GTGlRaXJWfmQzOi9eZHM6X2RFNngidUY2LD02WSNGfEMmenI9fEwjd3plYGYxLiE1SnVmWTR0P1E2b0MmW3s6ejQoPTEmRGF3OW9DNysid0xsXjl5'@;
put 'YVA8SChYYi9eSDlJJDJgYiRBa2ZeMlJMI1RvaD9mYk9UN29DST5wfmclb2skWDYmcXRZQitAX35+eUtQPXRSJjsmYDRtdVNOT10uRFpCPjhtQkpPfSt3RWpmYEJrVC80dlZrdGAkUyQpZ3NTdUlLbDcuOmRybEQrSmF+QGtVNWEmTTpaeHAkQGpuc3slOk1vfj1vQStCWUhJIXBZKHc1ZGNNWFg+'@;
put 'fW9jZ2hJLitGJjsxITdYcVZXalYxUF9UQ3FGN10uUCp8XUl5RGBDOUsqei51fS5IcGw4cHEjWTlaPlk3ZXJTV3ElW25ORkxIc0lVPW4kZEgkLD0qblE2Y2djRipAZ3dqZUlNYFA3WygkIVUzWGtyS2pOK1AuY3xIeTVpZltQV3ZPcDZjTExEL0YhTzZJPEg1RU0zR2VqMSElKi86aCYiR31mXWUk'@;
put 'cSxUWFpVK2pCeUpAZWdXJHNdd2Y7VzJEZ3k3XzpvbTQ+NVgiI3Y4JXtPeG0jTTRtZj1FVis0VGVbRDE2eC9kMV0lK2ZhYyshbFRfI1UobExiOUByNkxkfkt9MHxCP2BWUTYlJjw9fWxOUyQjMm4mOktLdVFWbj9NSGRzYjdvYFE7YE9xQCxqNCQxKitRQDxyIyEmPEFeezdXXWRjY1s3MEVqWXcj'@;
put 'QkckOF5AVSt8VCkkfXxJNVhVbU5+Qm5zWmB5RjM4bGVdMEM3NDBNeT9bZj5iMXZORHJJVDJpUVBCXU1vQGU8TzlAWWk9UDJEKDIxJTpOezBRcD59Vj1mREozLjBBcHljPzJ1PEV3Uys5aTlmemopYGJJe1ByTl53TmF5N0hQaU0oWTRPISx5YjFqYmgialF9fmBgYX4vVnNTZi4xSDF1cUJgZVFr'@;
put 'Nzp2XntzLCY/Vlk+KWM7VlcpTyI1dmtJbmBzdGQ3VkxXaCFaM0g0NmIlajYjLHZjOy82QzdjO1E4Mz5MZG1EYH1PbUl+dz0yY25NLGVrQ0B8e1tMYjhuWUllaCMlTGRDO2x9emZdeSxRZDYhJng5cV0hYiU/eHBPWSRRekp8YCg1d0JvcFtZLEZaeyIrQlBQZndbcWY1LCw0QnZHJkIwU1Q5MnVn'@;
put 'JTtnfTRhYnsyZCpiJW96NFQ7X3pGM3EwNSw8JC5EL2A3ZS49JmsxdSosYU8vZVROI3hvTlpDRCtCQCVWJTxfO30vJEl3bFlUakk1RGptSnFBfGArR1gsdzxGUkdMbU92bWAwSU4/WzFJa1l7dWA5cUM5clYsNEBAay8yNW5zeCZhfWdqI299bk95YU88TVN7SnpyYGpjfnhHUCFnYVddXVFtQXhF'@;
put 'N2QkYlQla1sveGJSJSRYW3Q6b2Y0PW5nJChAM0hzXV5zR3NdKyMyNXN3JEtUOjV9P0kocGwqIlRnPi4wMnhaX3d2eEFueX06ZTNBNm0yJWdwTnU2c1tgLGZPLGEwWk0/I3UmNWFQT0ssVGpNSmpdJnwiMkAmTzAkY1cqOWRlIUI1QyF9ZFRZb0VuZD8wZnpqQyQ7VCleZEY4NHZCK2BVSXF6R3do'@;
put 'VDJSUkprRUJPKmV+NjFSRXh4QipYZUFHaFNoSF10TCVpa0drUDdbdztTIm1SSyR6ZU0ydTcxVE5Yai8yIztlQzxGSStVUD1QbjRDTSZYK3JyallWP0lFbTchd0R9QD1pd2tAMCYqOmtNeipsNjkkZmFXdH13Ny8xaDZmalMzVis6bTJaIW80YT1xa2F1eUtePTBHUFkrZ0sucCpQfHlkKHh6YHsq'@;
put 'WnlqVlJqO1hRUytgMVVzWjVSfXgqQSZhMy8wOUBKJHQlOXF+cWYzUkVAfCZhKlNoYmo3UCNMMGwuZjlJJCguJH1IW0s7JW8yKktbPSUuPHdXcyJHWC5nTyx7dn04YkR2ZTdgQDhnSXA6PGE+eHBZSjlpTmAqKWhdIXVMQ3EvXiN4PWBpKXQlfDlzPTR2JmdOQ0s3fj1xQzl8dDQxblV+cyV4UF8y'@;
put 'YCVuU2M2RV5ucE8hZ0t5ODpyb3psSEA/Ums1aHEsNTFuSVZvan57M1AhOj0zUT1yPkBRR0d5K2NVVUhaTEM2aFJ5MWYhR1cwd1YxZGxTfVB7V31WR31CYzwwWzpTUiMrJi5OLHt6KVskZiZbKCMxZE9sO3U0MFg1Q2g7MEw4Wl4hYFI4aG81LyhpO080M1Alb1hMZTVaIyRtazJSQGVUNitkfU8p'@;
put 'IVhPK1dAI1E+Q2I6dVlkfj0odE8lWm0zUUVNeTNLbSNpeW1nKGBIZGsmWGltXkkrV2VkOy8iJWwrIipuPXVmN2dwVkJhKTdkK11wMTxPLCp2bz1jO1Z7MVFPJTp7U3pvYGsvc2tRfTd2Lip3ZCNzZntHfnoubW9vb0B9bCRFV1txMXhCTCZfWlN4XlFuSnNtb0wzPUBfPF1qRXR8Kz9uM3RBVzVU'@;
put 'dC9fPUZ5NFA9fj0qez9AfCt4XyouYHRXZ2lYU1lbKDZafWdKMiRAcV5dPCUkeEM0ND0sNnJdQUpwXXleWmssM0BkdUpPJTxRPlI/R2lGRVcxITddUUo1Jm9sV1NWTHMvOWhlZ1s6OnEwPGFiR1k5bXJzKmx4bGVpZFUpUF1UL30vKkIwPHF7dWZ7TSxadkh5WzE4OWNTSXMraS9pbE0pJjg1MmI8'@;
put 'bW9VIVQlLjMuZ1g5eyV1Tno5dzkmL31McWFoVlFJTENNIkBAZUdNIkAuMiVsJkpXMG10TFYrUnteSTAkd1sxc2cuLFVOMkFrREN7ekRId1glPDgxeHNEd0RCZHo4Kyl5fHpqKDZILH1AV3MraW83SCwkVTxJK1IoOEkuZjMscnNPMzR0NG87YnFPcGV9Uzl3czooZjlGamBma0xhSWd4cGowcXQl'@;
put 'JUs3QENMO1l6OTgxMHBbbTQ/UU5yIjwkJlIhTlo+Y20mc01AIi5Vc25geH5gS2gmQ1VJTWsoXzwrNko3bVFfQitpNyl2NSxmOmV8MHN5TyQhYCw6Jnd7cn0pczJbaipNWjBxa3QwQDo5M3xbWnclVjVoNWFfN21hcjdRZiIsfWdXSWYwPDBpXWxvaCZZQzEyV3xsLCtSe1piYVFxdDV8VTc8fWYs'@;
put 'cH1pKi5iZXw8L0BfJjE3JjcwcTQ5JD9ofktdOW4hbnxnbTlzSCReLDlAOChIWWkmZm49S1o+bCEpZHEqU1FtdHEvXkJQdSQsMnhoKCN4VTtwSzorcWwzc044aSFNaC5QdmFeIyUlIz9oc3RsZzd4cGliKHVjJVU7XXttcSVeI0hoKS5VUDBAcFBfOlRNOz1IakM1QT5sN21gRlddbDt4V3A2ejs9'@;
put 'MnZFdUsidzQwMT97PFM9dlhhRSUxKncjcylrOy8pZV1Ec0Nab1BuIWd4REtFSndSIlV0Ym5KMCoyKyMyNUleYVtJd1JpdyVvOWMoKiRJeCEsVUZqRGN1ay81OVZzJVosO0lUJlhLcmU1UTEuXVgqb108cFZaXWB8PWBlby9XQk9gPyk2OmFDZHdjUTBPTXRzOEAlcEc6fHdjWXRWaEhnL0wxQy9Q'@;
put 'JCpDc2RkZnx9WyVGITYzaHt1cG1Zd1U4WWc8bVJRXiQuX1EhNF87JSlWOVUxRkdjKGcpVy5UWmw9SSVdP2RePXRzYDpFL2FfQWEvWHNsM2h7L31IPWFse0R3SHhAJktgbjRARiFCT3dbKzUrVEQ0eXxgVnxzKW9ob29FPUBYU2pvfnpCamtOdCorNSFyQkhne2ImWm5FV3E5SSxHe0ppRVd7MHlq'@;
put 'JiF1Jmh7PEh1KlJeKUBGQ017IU9xQG06bTVOe1Y8Y2oyel00SF1ocHtLJntOJkdxaUZ8fX5OTVdxUVg0c3F1fWZ2UF02Z2hudGI9RywubW1HaFQ8O1tzJXQwUlp1VExMSSgxKmk4Ml1XMDcrIUBgLjhSTFB2WDxZcHlkSjFzSCZrYTVqbm1fUDQjOjcwOVRhQnpeYlMxNipMK0swcX0sTzRecVA8'@;
put 'XTNQIVlYTW47fjk1aSQzSmJ8WE1bNndRdXVZTn4yPFNjd1tuOVo5KDRZayMrM19+K1ZiXz58OipubmJsMGF3S2xkdDNYPipuZVROYU1vNmBTI1p2TzolPT1sd2BVYjx8aCJtXlU2ZkA1Q1lYL11ARTBiPCxZdz8/JGZmTy4sRWdobCI6VSsmOjxHUSNrdSVwbi5td2AzWzhbKG1tYn18NG0iW0hw'@;
put 'MTRfYT9nOTpkQCVRXk52WmhafTUkRjRLJndGJmsjS0p7Q0c9NFZqZzFUPmtERGIpayQrL3hWPmtpbSRjKS9gSlQwcUpGWXNDeXd2b24jWG87K2taKG1mZyxDYSoheXp3RSkmJj5nUHNyJllDTEk2al5uMno8Y1lHRE4sJG5RcnUxQE4sOF5jbS80UGltazlweFpta0ZDfUI6fTFgXixPSkhwb1N5'@;
put 'JXZdSSZCPk1EZ1IiZEM7cFg5ITo/KnJENldtbihCZ1UhVVVxJkEiY11hK35KYldEJTZKJjheTExMdmcrTHo1amNLVGJwZ0N3XWJsW3k2cyNiNkx5UyJud2xEV0N6Nm4zS1JTSDBMV0hTfns9SU0/MVFxZURfUlpHKFN3V15GUF9iMUpBJm8vKV1VKiFXQzJnbTtrd0hRcFFSY2FqZkw3ZkVrdyNr'@;
put 'MV1fVjsvNENnIyt0RnZSQzElLiM1RUIjSTxvXmIvajlDT3IhYyNkPHd3fjx3akowXzB+XyRIK1h0YHNRRj03JCNHYW1vOlEmZiN6PWc/Iz9eS1A2PSpVXVtraXg/LD89e1NINig7Z1h3T2sxUmtxLGVpVjUkOHtfQkQ1OXtqOWk/VmM+L1YmPFc3S15DUGxeUyRtPFJXSkFlVlVaYGYvMGExQGZe'@;
put 'PEVqN1Yyc35fW1AwamVyWjwld1p6fjw0LH5EMkY0LCJtckdTO2locDAyI1RJP0ZIdEZ2fWojVU9DXS9BQyJwU2FjPWZ2L0I3O0hVU3F2JkF6YTE/ZyglNCY9Mko9ZCNVUkVQR1BCRilRb3FZVEh3b1hUczIpdXV3OiM/QyV6OWpQLCp7OFYmNHE6XnpscHBlKGJad3xhVjJGbywmOz9dbnAmJT5n'@;
put 'VUx2Qjd2KWtQeTkjYT9JP2lEbHRKLFRYSj1hTitFNWgqMjovYzQwfXlfKywmfjF6VmMrUlF8d30oa3B4dX1DNilmLyMpJSwqUmN3ZV42bjliU0o3NClrPGoqMjNMdUFRYy5QcD4rXn5WWlBrbTVrNGl4PF98REEoa0g1Qzxwd0hJeDlxP2d3fDRFOUAicDlwZm9TOFVxUDF3I3M8dnVhekwpSkNP'@;
put 'Y1dSQjxNRVAyRnlNeFgvQkQhbCMsITxNfTBzVjhRMnZ5dX02MjltelVkYk40S2dfa2csUWVhOEc4bjk6eVFpVCxLRG5lMDNdOGQjKkcweVAxNjVJLEUkRjBxREpJdS89NHhJKS9yIU1pdyl8am9mTzdCVmkualI0e097Y3tJWVgoc3x4I1pKYnVsc3x9WyU7T3JOPnxHbEs7QFY1fkk+SE9LJTdk'@;
put 'ZGd9LD5zM0NJWkFpPyVJVSkyMi9EZnYpTHlJMFZ9PiV1YWJ7XWpUc3BtXmI7Q305M0IrazE8O3c4cCsxN3tEUF5rK0xSJClEK2pmV1QoaG9ZWTczNFt4ZTowKGRVc18hSldNMSM7fGohVy5hY3xmOyxwOnssd2ozYCo5IjRoaFBhdl9BKDB1eUMlXkhjTjgqdGdUUX4kJlBua3RmRU05cFk9fWRk'@;
put 'OmxweyZxITtyPFE5akdSaXA7bUQmPTh9ZmdQdl94YC5AMWJiLi5iYi5iQjpRKm1lLn1dLldyMmg0THEwK0hoQC5+UD1baU9TeldsRTFHSEN4OSR3Mit8UjxyTUlTbGBmVkxfWlZuUEBMaW1GIUVLRkBDZiE0bGtoV0E4RkxpRTBGIVY4YFQ9UW9pc1sqdjhVSmsqbGMpdiM4Ty4kUy40UEIrOUE+'@;
put 'S2JFVWE6bGJkNjZgOkc8Oj87QkMmcDBYcSwxTkJvU1hyciFnPCtjdiUjdkI+flQsU1d8NFNsI0gkXmkmfUY5NVZBTGU/dlFObHUzMH40QCsoazN2Xkh0Z3NXOldPS2J1bHNOfnlGNEZxP3I/WFlFfl1qN0BXNyQyQmtOPVtYX2Jyc0kuXmkqb1pnTkspOzd9bDA5X1VMQzZ3I3xuZnB0RW1tZk5a'@;
put 'aiFmOk4rYlszPkwhZD9ZUytsWGNtaHo8W25wOHpHZD5AKSUpfSx2L0M+M2w3ezBZOCI0JixmeW01cjlydXZNZzEoez1mT3NaYWpZYk9LaVoyeiZ8Tz5md2hGUCpLeTp5I0xOS31+bm5NWkleKlNjdVkuLlRkdGdfcXlsbEE6QzMsPjQ8bG1UdlJmenc8IntkVX4rPW5MMThJV3h9MzIvc3graVNk'@;
put 'KWBPdiwsMHtafCNLKlZMR1pETjxgfkdoUTVGcGFKT2JBWnMxO3s+JT5LTTZNTFQxUm14d1M3NEtQfmBuRTg5eERrQFkrbk0vPTtjVVpHbCguRyxHLEd8T11sJnhgcXtuMz1dRHtsL1IvK24mZFtbOldPJHBxbC9SIXg7OXFPfTgrLm01Kzd9LFN6dWBJeXchKD4kXSVfO2RFbiM6bDc6Ln5YJCl6'@;
put 'Wz99UypkVHhGJSZ9NndWaSVqL3Bde1A7eHlzOmVpYk1MSlRaMyZtfGtFMUdIfXZgTDF5Inc6NDNOaUx4JFhuZGl1QjxwaGRnRXpGIXdxRGxAOVF3UDhhalNOMigheTI+UkJJOXtdO0VKNkV3cDIyVnFQczQwZlFPeksrSlpNKHxwcGF+KSQ3c0N1fXo7KypxeG5wJC5Te2N6a05CKl1vcltJaCRd'@;
put 'PjUoaW9sXTd3OnpobW88eDs3SWxKa1lKU0oxSkhPPEBWVT1Kcm86eEg7UWpZcip5U1crdFRaKnprIl87cSosVCwsYShQXldaTG87RTpqVVIjXlZ3TjhkTSlsVl1sOCJqZ2dPPSp3cGh+cD1ZWURpYisvVEAkSTxQVyZbJX1wPUsqXktJZmhJZTokSihHa3QmeComKT8/MilPZ1oxbVRLbmsyWiRA'@;
put 'OC4wTFNdQ3tSalA/MDolQCtuVj8pKjdPPTBtV21ua3xuSUw7Mlokc1lBOilGPFVoaCtlP3dEZENAOWcvLDZFMjFYNWsweD9NNnJdfVFtZU8yJTFuKEA/OD1LTGlSW2N4JlA8MWhZKUtlXzQ7M1dGTExwVCtVUjpfZ3VMfTBPaCw7RV5zXVUmc3VkdXomYEM+a2BnTjY+JVMkfGdPcGxLeSsuOm9t'@;
put 'ZlZYcyRtIVA2WHM5MSVTRntQQlkyZmhFYTRackFDVDdnVUVQS2RTMGRzfCl9WU9HSGhZQnFoUTw6clY4M2Z9QyM7K2VoR3V2a2s/cDp1WX0yeXZCTTgoWCZBaWVYaFZKMm8uWSZ5aEJfRHJuP2ddRHJuRl9wa3M7Ok80PWZpVU9sI1FjMjhOYzI4S2BJP1htM0ElU2A5eVhMZShQUWgjdF87MW9M'@;
put 'MjR2VXIlUGojMy5kZDRqMVRxUz9ZK2k5e0Y2d11UY2NPUnQ5M3FkXXIhb2xWJTNLbkNALE5yayQjXUluOTRiW3ViOnl1IjRTOnJhQTIudV8/eyF9X2spTCQ0V1VnMEZ7T319MUV1SnZGXilHQnJNRnZrV2trW0xMfDFePHtKN31UUjckK2BVQVpQe0xLMVVWI3QsIkAkZVF0a3tiSGhWPTc1XTJ4'@;
put 'dGZyMjFrL2s9SyhfTntLeUBFdjNaLjw3czooQlZbM2VBSGM3REF3QVBiUmtFQTNsc2RdM00zVihMQjNKIiwiP0s0JmNQTVpMUjUocnNjXnxVVEguLmByP3I4M15eYm40OlZZXWp5WCZvPVZXSylSVzJyPik/KXY6d0o7RXtQKyJ+PmFGaHE4VV9xdnIwRVldPEhxQThbJUE1QlFqMldHcl9zUnxr'@;
put 'a3tSOkN1Xjh0Sig0ZDooQU9afDQ1QnJBIllfXnxAfmVHcEMmX2xbZWc4dlExNnYqQkB2JHJBIk0kd2JhKHdXKlZrP19AbkwpX2xbenQ1ViRtXil5e29pND5NPmZzZ0J0flRsJD0iNGIjKHMpW0JncUJ9LHM1XmA2XXdKaThXbnkmJCpmTHUmb3lHRFJPPENOXnJ8R19QYlR9PGxSfmtyc1lEaVZH'@;
put 'ez0pe2RoKH5gczd9N2xaZWx5IzFCbTI2OUI1PipLfH02aE9oRVU1VCtzUSJtXSN3PDhYXUIuXikqXVVkOWlYUl0scG10SG9vX3JEa1d9TXJxMGJxT2VTKWtLV0o8ckJBbWxwVENxJn52e3dWMkArajBLUXFNYyV3NE82NWVFWG5jXnU7QUxBXWFGZ0YiSFdkJXppdF04RV1nPXZbTS9dMUJwJl90'@;
put 'LHtdaHBqVnh+LllkMEVle2EoU343JCJpUC9hfUhTNVFlK1I/a2xlaiEqe3NbaHl1PCx+Uj5rfkRHNSk9dXJ5YGdJLFRuSF95RkttTGVCVC5zSCwlOSZAbnliezQsIV5ITUkrX2JodWxzTmpdM1VUJD1BT35qJT5LTFg4QjVNJDBba1d4alR+ajBwdmxoPnJUPU8xYmBVVTFJO0Bpcjgpa3V4U1ld'@;
put 'S31HaHF8UWczNE1WQz5fP2RdKnMmbnFjdDp2c3N+TjpASSZgPDhlYGQ8cXBrWHV2Q1Y5dTR5QXl9ZjIkUjdQOEpsaGNXN3tZW3U0bW55cWdgTWdlTyl0bHxPNDdYNUBPb2t4bWBqJFVNU0VlW3UkPkFvaUo0ZCpJTkZNSkpebDJHNV4kMWp4ST04YFNaZyhiaDNyZzRRYnh5V3pVIzo9cyZma0V7'@;
put 'fV96JDc6KEteJnFaazQxa34mcUxHcjtFT2R8Il8zcyMsK3cueHJOXXRBSFYjWiRmOm4lKlZpM1kweWdRMDl0M1pARUlEQEV3M15HNn5IPjElUj5xXmxiIzBKSi9kNXxNSFFfRnNQODdPUWlCIjhPWSFDOFsxXy5NNjpNUzgiJV9wentIMEBgcT50dyovX2F5O3swPXJiPjBreWIwQzJ8L1ttYURN'@;
put 'ZmY6OG00cmZvOSY7TGFwcV4hYWQ2LFAwZzFtTiEzeGpWay5Yei4jYG88ejkmcG1xbXlMZ049RXE3NUxfVUldLip6OGUwUXxCRiZibkpQM3c/SC9jeithJEhEdyx2PjtGe29nOWdRYXRqOUE+ME5AVGhwPCQpJUVNQ2Q5YF1UVXRlfWNyQ09gXiQlP3lVXjBtPTxhMGttS14+OHdrWTA1X3xfbTRy'@;
put 'ViFnXlZsP2Q9MGpkeENoQUY1b2lzRUx0flshLGZ9YTE2WiQlajEjPmdJJHxxM3FDTUZrI0x5U0N7UTBDM0dqaFZPejxOP3FNZmR9RHxnMyRmYzcmcHdIO0VoW0UmN1R8LlA5RDZyWWsqRGtXZkNXVHFaJEY2KUREYV53UzA/bjlZeTBbOjl8cl5XKTpyNjlsYWhKXm87WzluQH5Rc0EyfXomYHE8'@;
put 'Ly8pLmYlWSM9P3QzeyM6ZlozW2cmcC9TWE5OZ0AzWWZya1I8VTt8Xndrc3hVTT9WRFR2YTFTODlwSF00MjZWKTQ2cmFVakEqK2ZGJDg2OE9DJCNHSzVHOFleSWBCUGRyQ1suNTVxNF4+c2ZlYWJZYHpnenViJVdfRkYlMHxnQCphYnNAQE95WXR7NVVpMHF4NmI6YjljWTpwMy9iTFhoKFtOTXtA'@;
put 'ZndjWF1dQUlhJlpFME5sTV09MXR6Ok5PTl4rcDV0dSVAZm1IS2EufXV0PzMvfUIrW0pHdksoWSg9UGBRNUtRPnlVelpQRj1jJkY1Q0hPZHgvVHMyKUl1UGxAblpIZyxRNUxpTyEsSmhbQDA9Kk5qQ21iJE9bYGBnNSxVcVBtYERsLCVDfT5sIjsuaj0wIjVKeVRKPmxFSFFSYVdafUY8KiF6N15i'@;
put 'dCVhcjx0KVU7eFViRUksKjNObGo+WVBiQWxoI3h6b2szMFk+QnNnZn11NCk8LlRCMjZFViQ7ZWt2XzpVaDpyNU85bS5AZXlUZzxsY0U4OHsqUEJwSWZCT3dgTyRvJnlITzsmM1RHL3pnSFY0fCMzU0I0Mj1jJlElIXx6VmBNPixaYC5YYz9mVEY9PGliMUUlWjhjPmE6a3VlaGY5InJmYFF2bHFz'@;
put 'JV48a2FaOHt2RikxSUtfT3FsJmxQbEJSQllMUHokOkY1UyxtY0xqbDVxXSkvVFd8SlpNS3drT1piblMwNj5aeTcpZzdZbUJFbXsseW1QUmFKPUloNTB6OXVabzcpKiRSVDlSdyUiNUI2THtHUDM2JHpPIV5QamxmN0lHIm8qV1V0aCh5bzc+N2NgZF5QN3xrdUA/JlVfSWoofCp9ZSZDaHEpISxF'@;
put 'NnhnIyVsSD5kOHhAW0RCbG05MzREfCFYJX1KWjhITjYidnE8WyMuLlo1M0E1aGVEPl5pdmo5OXN5VjBUQnBOKj83PHZ9JFg6bEJRQV5xfkZmTTo1T3A4WHpDaWAme2tdfV5OSmNKdzQmPDdhT0M5KlFFKSVhViZeUTV+S29QeHVOKj1aMFBXZyQ8akNUP20sKiU8NGpYOCtpO3dJLHU5ZWQ4Rj5F'@;
put 'SG5gZXFDZW1JMWk2MSoycTwsXVc4WEAvamRlQSMzfjtpQS5EIX51ZFV0RTRMV0tlIVFOU1h4T1pXbFFwQzNfe11mKEYjNnRINnB4bVIhWVRadGBtYytSSk0oLk93LlkwI2s7VGF5O0ZpMmlSJnBAK080Vn02MkN2ITNXXUNNMWR4UTt1aWQ5UHdXJWFpbFs4c3h0bX1ZOUx3JWU1O1EqaE02dTN5'@;
put 'WzFaMmxeRE1FIUhOKm5nUWdeZD5EbFRuJmcza1N0YVJWIz42W1lVVENdclUrNUtIZCwrZntaUzV8TywmNG0ob3V1dXlrPkpsRGVkN0o+Xmc/a0FXRzpTYH58blpiPjo3QnM1JSg5PTEsRDorPWY5OGMyQThKMG14JjslL3RUOSYyNnRmekxhMTtANChXJiVzfmcmRUFGdHh3Kk93eWJIX0FhP2ND'@;
put 'ejd4fmpiMkVdfTc2c3RILlBnUDwlL1JLVFBiRX5BOzdbUklrNzNKYjdLaiNHMTduemFnfGxUcFM4Jn45eH13amVQVkN6YS5WdlthWl0rI0ptWUA5bHdtUGZ3bV9wU2hjNzA2RFp8LHQuYmR5TmhTd0I9bDRncFU6cHQqfWlWYFljdiJqPS56UkkwZ0JXQlM2dDc1WTdET0lsZTpOZWY8LFs4eFtg'@;
put 'ezJmYXVrZGlBKkU7Xy86JTJRYDIjUEJdNkdKSCZ4LEBsNS9ZNHhUSnEqRjt2Y3skYmp9Wy86Zm9nJnRsTnUvb2tgZWdiKDlQYmRLQ2RreX4rKmksVGIkOnphVjJybGYxQ1psY1EwWT57b0ozI2R+TzY1QnssOldha1dAOkx9RXlGfit+U318T3VoKjwlZDV1e2x9WSV9VVQlTXhoUldmSlRacGAi'@;
put 'JCFWYEhZd2M/Ryh9P2FVXy5vPG1XVzxqM2JUOjV3U2V4NDtifT08RzgjYEIqRiZgIUEvcFRnM216REddMGlvb0UkO3twMHFaWV55UmBxXT03UCxHSldFVWcqdml5Q3JzXXluMl85UGJkNFk1Nio0dj9RWWF9dHxHTjlYSW1YJkhhQCE/UFI1XVB8L3tIfms0emljKTMvWTR4XSJuZSxlMmVYMTlT'@;
put 'KmdnSnZLQGprRGkwLlckREFlTU0+UHkhXnFyMjgkaFtNbWc6dylPd0gjfTBEOm01Sk5zNkBPWmoidXpjLywqSE0hblAzMkQofHBdcFBhTEVCNEUzbD07ZGAmazouZHNsYDgpIzVOSn10eyRWVUtqeCIqbC9bbFgjPE9PPHJjbTI4e3l1Jnh+ako4UTVLeXRRVm1ya2I+UVBHalM1MSV9JS9mNmNz'@;
put 'O2BIY2EkZTovdzVSfjZiYDp0IzwmeWUwS1BmP31CTSg4KGpTNE9heHNQYi9AVjZbWFUsJXNNfXRZWlFaU1ood1NtaEQoQyguQFJITVIjO3FoZClRTjgvSU9QWGxFQThwWzQ+Lk9UJW5hJXxHbEZIdyMqWn54MUxLN1p3TSkleGNpbWpIIz03U1pPPz5HJFFMYX54Kk19bHAvWkdEfmllMjFySlR5'@;
put 'SndQazUpWFFteSI5PTUhaF96UWdQfkM2YU9uIlBwNzM5R0h3N3RjVG8kKSUsIzhmVHVdPFQzMmlgU1gxWzxJOzo5PTFscHc7QE82QjZSJSs4QHU6JWkoMHgqQUwxc24iYGJRPVI2cHRrOkZRRDZKNyM9UjZMJWwxNnUvbzN3UEtCVkdjSSpQK115JjBAWkM1c0tFN3lIbm9YeEokSkVDWVVdPjgq'@;
put 'RkEqITRHKHlXY0g+dDsiLm9aPFguJktMNzJ3SEpXKT16SXNWSlJ9YGBhS2g8TStOaEpib3csUm4vITZzfmN4Njp5ZGBeKXt2RlkobjV1SDRYOGFHTCYvRXJtN1FtS21hcD9nRktMVjh2aCVqeGgqSHFaRV1wek1gYFsueFYoZ3wyLjA9M1BtfC99Q295Q2x7XzkwQzQucihaeTV4U3FZSSx1aSZ0'@;
put 'OEtRYTROJUR3MHJTb3lbSWs3W0MkTC4kIWNJfS5IKklNdml9JDhlTSkuZGVoNylOUGZ+fEBeNkp7Nn43WmNTbWJjNixrZi9aITdMcEY9TElkOjZMOms6W19QKnQwZG1FRGxTcCk1ZEghZDJVIS94TmxTUkBqfEpRbzZiU3hEQVhgb35gbnpmRkF9RUNnKyZJNldDaHZrTmA/bDYlKC5RNlNfRzZZ'@;
put 'MCNKImtDLGhPIndGYl5eMklkYjdZXS9DKnp3LiNXdisqRTVjZklrTkJzOz1uSnFAX1Mkcj1vOSQrIjUuazg6KyokSXVSOyVeL2FAWzdCd1J6bTdld0xOeGpkRjFNTWxJYztHd0AuWj8uXXRgS0x6IWRKN3F+V19YdlZAayw7TiwuZUkzKnZhd3pWYDJkbmBlTl16R2gwaF9Ib2QlYHpxMXFgMSxn'@;
put 'bHFpM2w0LmVeUmt5cC4mVTQxXztaJHlTSnUsJS5zLEx7dnc/dV9tZ1FfTyVhaTRdcSMmfT4xWkd0LkAuRS5PQ11KbG5GRzQiXV1Rekg2VHpCUH4/ZyY5JXNgTW1+RFZvVmUqVVhOUzs3JS5aZV17OFRWU3Q8L2oqSWhDP3d3bTEsTndtQFJjMl9tSTxUbXR5MTEmcCYlamBxP0BqOiJ6U186MWNB'@;
put 'IWt5a0x4cj9iMW9LZXI5OzZVNW0mNFFwSS4/YHlAbDVoLztheDg2b0EvZX0od09EUFpxU2FJaVhebyNxZ0xzZX1wa21YRWtVQmF4b2VyRzsmZUkiQHMmQUpTTld4YkVHQ1p9Qy5tQyZJYDxRNWIuezVwenhReEk5QnchKyljWk5Gcy9iQEAvclVsRmM3KE1UNCwxek5oRkBOKkJzWmNPI3hBI18m'@;
put 'Mmo1MnVPLndqLj5jWTdmTVM1bV12R1BhYEVEUHlHdTVrakdNb1NuNFl0QGB2K2tDQHwvd11vTEh3MH03a3ljaS8+Zk1iL1l3NXRRZSJVY15XMHZtOGBBI1dYVHtRT21NZGQ7byFrZ015QUFBRSlKQUd1e0UpTXhaZSE7P0RhMF5BV3ZEclBzSTlieXQhU0V5VWQoKi9GQURBQUFBQUFBQUFBdldg'@;
put 'dno9dy5vLC5xWVhnPik0L1VWUng7XWI9KEl9PChnOEw/PzJEczI4KVQoN0p8VkkyPlpFdTUvWyNhJWE3eWNSMUw7KF1HOC5QKTc7O0c+KiZObX1OJmo7cEhOX3NqcUgvOCF9WGgqX2FmWCMjfEErfDRxfGMpezhjWGl7OWsqI201blZXaGdacF9Jc3VzWTZ4NXtWLlE1S0kvP2ZCN0gpKHwkQih3'@;
put 'YFgzRzpqZl5zViJIVjIkPGhObCp7PHhKcTFWSFdUX1FzLlowYVFDaEYpUmNsIyVEdFhJb1VFU15xcWxyZWYwJk1XPEdHZntxO005PzVKP29we0JqVG9XSm5KYkNbd2VqTVZFRCE6bFl+KTNbNHkrZVdUSmI3a0MyWWthLkJ7MjxwYG4xU0MqTlBWIWRYeSkib3BKaT4pNEhQfllrTT96OilNW205'@;
put 'ZVhSLzR6UXlZT0grRiZ4UDwqR05bSTtHcVlDOjgwSHdbeGI0WzpyT1JwQUglPTkjPVdtUjRicVFFYURfeml0YzlINiFKUSkucCojLmosQGJRdVpYQmAlVl89Vnp2SXsvdF9fIjNsMVhMbVRaKldyI3lzeEpJQHRKIjRuP01nLjU3OEc1L0lCYUcpRD05eFdBZDFvTyR7dzxPSDFkTHZhbTwhbWd+'@;
put 'IVZNbk1Oe1h6Qlg5Nk95USZ3VixMOz8uYih6ZzxgRj9pJWp+amhZcW9TTDc5ZGI3en4/O11sOlBYWG57IU9Sblhqa2Q6LzNfZTdxV2lPKzpFZ0diN1c6PyZnKiFPPHVmUShWJCRnK3N5L0wrWXVgVjExJCxkflEkM0NEOkR2NDVhQj5qNFROMCQvY0tNLk9DUEAldWtlISVPdHtCLFpPO0J2dC8q'@;
put 'RzVPSW8jZyNwOy80TDRYJCltZGR+Vl1yaUkmeDFLMnJ9IlY/KT5ZaFFCR2FnUS5EeV9KaVN2T3pYJj1mez01NzU/KC5PaHpUP2h1dz05bX5RQX4ifjYvcmguNGQkS2h1WXVGQWFhcnM7aFMrZDI8VVZVQytmcTcqbnZHKXhbNzU3Y2M7YyFYc2wiSG1sTUxXOXokYEo0ajRDbTxXd3xqT0I8LHxb'@;
put 'WkwoTTp+ei9UWFBSSyRtN19zLlZJb3c0VVlNWT1GXlVqTjE4K2MxZnFMYmJkVF9hQks9JEllLllCLFUqRTlvZjA6ND90UHkmXVgxRTF+e21aMzRRKGZHU3dxQ1k6LnRDLik8TVpXaH1sbjNYYiguZG4sRn14MlBATzxTIUUmW19SPChYMC9FTGsjdjJkSi8vNSE8ZTdYTSROX1N8W1UuTDw+SjtA'@;
put 'UW16dCM0MV1MXT52IWckJXVWOjtfXnhzXVNpOFI0SEBhenN1ai53KH5FJS5HUjxpMW87N3p2bkJ6I2RCOmRvK05iJiNgeV12fS8pbChWbShwX2dwVyshR3JwaiZYOnJVdWQmZVF3YzhCd0dtb0BSIjs7VVUwWzI3REwjXSRsOTlxd3M4TWBib113Tl5uSFpGMHlfcmdOd21ja2JFeD5NTmtLak1t'@;
put 'JjU1SF90a05UN1d8dWsxMXdkam95XjRtX2dlQGYkejQjQjt8YD9KXztGdEV+UjtSJGNHRkkiRypFPTd6KzErLjFVLHQhJjFaMkt6OU1eMzheNTdhL3tLX3QrOUVpIVpbJkRxKmpUZEckR2Z0ImZXRFoqbmcjfG5oQShiV3hiZnQyWnRDZS41STpdXyk6cWpGTFZSKWlCQSY8PEEpXmhwSmZVd2lj'@;
put 'cGU2MH5NZSNzTFBQZTdDfWJ6VW0qVi9aVTE3UUcoQXokQ3tNd20xbW8vdUN1O0dCNDU/U1dkfnVxMl0sK3Fibn1DKj9fdWw0JDVaU1VtUUZIYn1bYzs4a3tqVlB1YiNiNDxNQVpCMj9KKXw7RWNNdk84JGVlXS81MmwpRUxUbGBDQ01QV2s7aGQpM1EsWnlobzdqdnZOYXZYbj0jPUxrLHFNdm50'@;
put 'dUNrcVlET0E+TTpXKDE2N2FbU1oxYE5scld4T1Z8ViZjQG44YSZ4OXwmWGJ8SVRKc31fWVJwMnx5ZXNMVXFfJHwlJD8paEx3QlBaIjdmdjYhJX4qfSxtT2M4JEd9bnNeW3Uydn1FPC5lPjI2V2EyayRRQVIpdF1KOzI8TUFPImI7YnowK2M+W2R9TyxCSF4zSSQ0OERgSFMmMCxJPUJYVH0lbmx1'@;
put 'VCZmIkpPd0dPVWN0YC85ZDJIVjlLZX06VVZdOG5OIn56Sy9jZDVLQkd4bHdmbFhKO1NEfWs5Um9CeG57ZCEvR3ZGRnxTXSFmdiZGUEYjPzZgLG5QJCROW2FWd0kiX3wmT0JTcnExJHBUc2VuYkBrck1OSGo+SmNxUXp9LzxSd01qWnp2NGF1Vj9BOnkwRjNwVXAoMT1NJSxwbDg+ZEA3cX5wMmw8'@;
put 'TndNdTxhU2ZfT198KGcwUUl9YG5nR3RIXVBsNTE2OnpkUn5he2VzQy9GeUNELCV1ISM4U0UqQnpnPENnV2FjJWZDSXM+V19dfiklNkBRNihqaTp4ZjZfbWwpcUlyNTgjd2IvOE47On57fGo1dHQjR1VhTn1uLj1gfFo1YX1LNWdkNHd3bCE3ZyZKfDdCNEJ5SjklX2I7bV5SbnhoNFVreHNyN05p'@;
put 'XiNDO2xVVCI+PlgvLloqYXh1cDJ2dlVpKGBRM2wjdl5xXndGRDFdaVBxN1N2YEtLOjVPQ2RGISV7LGw/VyQ9SnVJUVQrY2EyfihVWVMjfFVzeVolOng7bCgyKDxvPjg6TD5jMz9NLiQhWzpzbWp5Q2ZdTCI5dmdyXzlpZ1NPa29XV3c5JHhzfmIvO119dWZoaDwhQXx4Wl00Zz5wfUFQWmlENGAy'@;
put 'djoqZ29MRyMjVWZZM21qbzQjJnl1WGg7VlErXWciPX44JiswXUVBeihFcitAK3o7d3xyNTRMNi8seWtTbWpYTVNrcnViZ2VPQkchPk55bVUvPV4pbVkiTEFHTmxKVUAhZV1KdTNSX1dOUzYqZiZrJWJeankjeUtVKXNBUzNjd0w+LCN0QGlrYzBWNkxPd14ze2g/dEdzS3FESV50SEY5aUxdeEgq'@;
put 'Wis9Wms8MTkhTls0JFAyUDNtLCRVNCRIdl5jLCIzZTI6OWYoNVkvfGtXVC98YFlgdUdUfDBtalBoLkgyZU4jZj91PUlvPS9bb3kjMCVmIyh6clZrNmA4NWxGJiFhPWBAZn5yWVRvYktWSFgoSmlFOU5hYEdZR2ZYXkE6OmEzWGZ2ZT9CdUR+JEBCRjcjOTpYNkZDfmVeZTJpWTdmUHRPdDNuPm5o'@;
put 'bHB3ZHxmNlhTMjAzJi5ZVip0SXRTSnI/O3RXKHZMZmg4YlolYHZmV3V1PGZPWGZJc1tpW098eWUrdEk0eUpNcEtpR3plYk5qXz0wb3gyW05ZMHt1eTJWJXl8Wl4jSmRneHJLais7Wz5xaWFgVWBOTz9zKmlqL34xfXRaeXN6KU5dekA4cTt4K1Q/RjArSXJQSCs5dCxIMz8qfDA0ZjthbVAkdF9M'@;
put 'P2s0b1VQLDBwR1NHX15NcENyWWhjS1Z+KExRW3hqUUpnI3AhMDFnLmw7fnt4flF6fV4uTmArW0lyIjhsWyhMRzVZIS9FOyVdSCx5dSpZMnxNe1l6IUMqX1FHNE4ofGA8PV5IaDtzQkpgYHpdW3daTGNqMis+JkVuQiNYKHxSUV9VOmFGNEppdzVidyFVMTRRczo5YSo6VlhiRjl0NXJARituMzZ3'@;
put 'MHgsYHxrI09vOVhZYXgvamxtY0c6MjQqbjV5Iz9HUlJnUUBWfVpQamFvZyVSUlQuIjlmPV11OjZaJVlRXnpyOyNNTiM9LlJfJFdzUmgjdFFMbyNeI2lKQGAjRUk0Im5saTNjY0B+Nz4oTjhyWXJpN0hNfWRsbUNGbmFzbmhRfklVdjtyU1doOjB7Il5OcmY5UiUhIVcpUktWWH04QHwjby9ZfnVU'@;
put 'SHApaDhdJXV1KzZ3c0s9Lk1FRT13LHJYeyhdcztYLzpyKXAjZjpES2w5KTt8ZWo9OE9+emIqdE5NLys4YiNwVzE9OFQ7O0tMTGgxZjg6OzM7Tk0kVHYpNWtIY2l2d3Q4RnQhYSlKIyJFdkRXdzxVTks4PHl4a21xUV5GUlRte1pYKkJ5M2tYOlpPdGAvWkBWeFttMltmejspJUgmYjFTUFlzJXB0'@;
put 'fEJEOi5iSkBNOFtgQkVvRGVqaXQwTnZnWGRTKmZueCRYcCRgaFR+bitSelZebi9NZ3s+USw2Km9xZEZQdTZSa0JdcGt6fEo0LHpKV1o4c2pHLy8xIV1wJkl0ckVeflJdTXIpfUMwSFk3bko9N1ohOG9OZ2FARCNhJCEpPT5wVyFUOWoqMSY+IWFiNFomJjpMcm1BcURKVUhEdiQ3Zjc/REZzTX1W'@;
put 'M2xyQTk8MyM1cnhnfGx9d1IyIzkiXjs1byk/e3gzOCZOMFNATl1WO3B9fkIjIkE7VWJeJk5scyJESXhmXl5nPSkkKlhsTTJEcV5KJV06IWNROkdJMUxmWnMqM01FXSFqVzd+I0AvU35ST1VSOHZydTdWdkJAbkJHXXQrYWNOMV03SVlwe2BmRHk9S3BnTXtidG86Nk1CI2xhJStFN3kxSWVBJklH'@;
put 'O34/WnpzVmJKenB+Tk5lZ3l0JitRZWgkU2phZUNrQXl3PTcsKEteJj9La2A1TVRRRFtOciZXeiNzcmc+VyREWkBYREx6eiQ3U2treChPbnA5cWhmIXdOb0EuYGgiVyxLP0Y7NlZKUmRWd2d4P253S2h9OVdrRygzeHhTUXVgfGk5WHFxNyhERjY/WCMjUlBeaHppS0F5KyFfVEsrRE5PVzYhMkc7'@;
put 'SSlUc3lFMGA/NnRtV0xAZ1JIUHJ8YjJ0ZWg4LHkmNSRGd1Q9WF1xWDErTVZXbypPYSVkUD44cUxjN0EwdCp4X2s9aX1nXkR+dl11RUY/ajZWVjdvc2hIOn1sPXJidW5tRixadU1yYkNsRn1UNSNmdX5rQ1puVig9dTk1dU5bc3EjQ1h5JWt0IllnbzghJUI/ez9dQlQzNX1yY1RlbFtLZmgremM2'@;
put 'MVJuekk6PjNdVjBSdnUsfilXVjhPWWhYQ0d2QSorPTpEaX1dREUrS0hUXWZCPEM+UFFGV0N7PlRBc0FSWnxqXTNAOHpkP0U/WGt9eXVbIX1zbGA1WWpeTkViMDgseXBMKltJP2pHeUJaJXxzdl5RamBPY1Zud1EqPU5VTzwxTTx8WXVDVHpwRjNYR3ZjVEYpN3VxS25nS1FGMz4xYFJPfTJoN0ku'@;
put 'TXA8aCRGJFVCNFNJOlg7OklKWTxvIi8melFpX31keGNydkR8ckcoQ0RxdSJMPnIxUXNGYD9xU1tXV1RGdmNIMkp1V2N1dltvVyZ7bmpAcSs/dUBBYFp7P0I6bXV1STI6RGIhIXhoKWtSOUw4azc5cSlAQkY6d3dqYE5hQSh6OmdiWVJATGE3O1VRRkJwMldgZT8hfjMsWTg3I19dPixQfGQ8UT8w'@;
put 'aXgpRWx+OGA2aV1MM3t7SlsjSHZ+MHVAfG88MzFlbGIpW0psW1o/YSo2fD9eZ1giNU9jczV5L0Vje2xVd3MqSUgzTVVBQiNKUnpXensjeUdac2pHNWB7KFU2Lncxbyg1cXk7d0RAI11RbFRWS3xvfUB2MXAkQVElRjYyZkEmWiU2aV1MQzReejxYNispVC9oQz5WN18iQjpofHVYMC43ZU5sWG5X'@;
put 'dkV6MDdDfjZpWmtINH1eZ1pHMSgxbjAiSUwyYyhbR3tCY0NmbDspQXc/fWFYfGVNTnVtfTFYMnZ+aV5TeT47blMxPWJAIlZ3Q31VSFRCS2p9KyFSLHcpKDdVTUNLbT0rLzxILmMqMXw1fm53fHJ2T0tOemduXzQsRkZuZ1JgZ2k6dkhYYXlpRCNDJGIqZkg/VCksUXdMYiM4QV9TQ3s1aiMsOT5q'@;
put 'YDhCcDQ5dj1QSkRHP18zKyE2eSxmLCJ+Xn5GMnE2b3RxQkt6bVlsU0BFSk5AQiI1QGwkW3VGR3RbLz1oQiV9WFR8OkxEZXM6VlQ/O2xZNTohJXR3e2I4ZHRkPmR8TDlCbEZiKGp1YksxVE9rNVBAZ1dabVR1MDZeKUFzRXs/cGkrV0JyJFI7b0YhUj1jMG94S0gmYDg4Uih5Oj8wekJ9I2xFdis0'@;
put 'dD0rPVh0PGdvRjJlRmxdTE5NSnNsP0ZxQD8lYz1iY2ZNIXklW29UbXxKIUV5M2lnQ0NXJi5lYzQmb2BNSDRdKGtFYS5ubmVrNmI5WipiIkFfTWRQfi88ZCFGQCVvQFV9VFV0Nll+TjVrUUNHJTtLaT1PQzpnIkBPcD1GfmIycix2eiIqY3glbm1vIVt7bGRKYm12X0M2dEdTKiRAeyxFeXosR2Ej'@;
put 'e0YuXzd5Llo+RWd7dn1ROFFXO0VDalBuXipEOlB+IzA5YzNLbTIzL1AzJVcheGFVTk13MEwyS3NbJSpVYktITlFIdigrZE5HfVVGIUA1KF98ejEoXmcrI0x0TmhdLk9NVmlCaCxrJFpnfDpxcjI1VzVgQE8uRVRPfXRzYUpJfS5hN1g8XUshPjNtTGMuTjg9TzpTayxFd21bWFpPfmxwWGBWTzZI'@;
put 'cCJ9OyVvXUVsRnVNPjJbRURiRmd8RjBMXiNsbDR0SnY7T202QkcjRXclL31MNCRzfil7VEMvR1ZbPj1YZEcqZkMpSDk0OnU0QE03JGc4QGpUNy9oQmJoYUtRQ1h+PWA5JEp0P0xHZSJRVSp7dU0vIVZ+WVFhek8qUn5vQiIrSFU2X2lPMCMhUygoVnBZd2tUOFlRdXs8bldDbEdCczR9anY/W3FD'@;
put 'W3lgeHo1e2ljZWFseUY6XSZAN0ghd0QsZW96aWtmaHdAOTNNeWNXdCs+R1ZuaEg5enZHVyRLellCWl8kJGU9ZkFGTGUmdSZdQmkvPld9SlVJbG1EJkhnYihabiEoUmc2aEBSLy5HWmttMUJsQ3BYXnZgX01EKCY2dD10RUphfnxXXSlSb004MyFAQ1lZZ1cmVFNHRVZrRjZLO3BRVk0qU1VQVGNx'@;
put 'c0clOCREdGoxTTlBV0RjT2tpYSxaW3hdREpkQFY1NU1ZV1ZJKzVyezVUKntbNHRaKGszfmJ6NEQ9VHpVMUFlNHs1eUByVEBbMyFSPWw3Q1kjKD1vbiEvS28wTDpZTl5VeF1JQFZnZ3QzMC5DV3sybDxeOW5qO1phbTZuPzpsSzJKTztxK0pFMFIrZn1beXZUe0I9STFyPitZVV9rI3h6O2dqd351'@;
put 'dEoveV5lQyRtfmFiWmNnajJJYHJIQk8iNT0+fGZBM05xdDhGMFlWPCJkSEFUNjtCVmBrJTtAcV1LJFd6ZVIqVClKKVtkZXF1N0h7SyxoTkpsRWZXWiVUKER8Kmx0eSpuKys2amJzOk9jPEVuJHNZYkxpVEEzVVlNZiUkOzwqZTgzQ3FaW1VER309Jjd2Z2dkOD8xUWw2JVUvNkIsVVdNZlA0LGMx'@;
put 'QSxROHhYSFhORkt6XjojPTQ4TWxTTzB9TF93ei9Qfl9jQyw7SHU+ezwpRnA+MyxhKWIpaWNkcUUiaXxgdVpHVk53WHh4KHNOYFNGW2tRai5FfkJqR3g1bkJ1SElXUEc6PSxLeiV8ckEsP1h0eG47QXxqTytXbSE5azA6TkdwOXlXWHNhSzYme2ErdnxYY3R9WDJqKjZOcXE2aUN2SXNVb1I9Rm5o'@;
put 'd1t7TFg0YFd+WExqRnZpe1NfLklrJTYkQ0I9K31zUCQzazt2QHJHYyRoYTVdaWlDOHF0d1AkQHJndm8uaSJYWGEyJikucno7dyo2bHtNaSM6dHFqTiw3TDQ+PUpfPzsqPXd0Ii9zYSpQPU1WU2Btci53b31oQTlOe3xdYUBvTT9Cck1PKVNkLy8lWUZMQ2U9OkpgJnVZTzlvIWVBW1c9MUh+OHxC'@;
put 'VlFELks3NWQ7RytDbD1UZjtscj9DPS8rWUpEMXYrODZiK0JBWTo6ODBZWWJzbUVMSy8mU30jMH5QZiIsPGlrWVE4cUdmLGROXyxkSm5FcShbMFo0RkpvJX5HMEFHZXhYJmJFIWApNVZ7OG5xfkBQUVo5IVRtX3h3NDQzV3Nfd3V2WC9FUX1bcTJsU1lRSlhKP3Vad11kcmlPVTJZcmEiNyF0Ul9E'@;
put 'IStmUXFWQzAjPj5XS2VZRSVuOUZDKE5JM0MvT0hoNUk1Uio+ImhVKn0+OjokJEUzU3tpdG5+NHRfYFF8M1lDbjVpRHB5ckZFSiNrdng0XiZCPCI8dVpuKjowXlo2I2MyXTk7VE5nazk4Sm9IZUp6YVdCT1QpSlAsOVNAZG9SVXVsWyYmWFB7JmJ6MUN3ZXBhdEgwVkM5ei8mOz4yOnM9WzUhWSxN'@;
put 'QlMwfHdNMVheenRKPHk1IiFrdCE2Wlo/LlpebU40LFR4fCVGPWlJckNQSnJWcW9+SEF0Old7VSU6ZyZuXSUyd0skJm5PUUs7PWZqMVVbOGJLan5tclI2IVluW1o6YE5gYThGd19baWJ0eCQmbkx6NC52SUdbT0Flekk1InwrWCZQO31+RjNaPzpDYj1kVHc9ej8xSzMlYyUxJCVgMzpGYz9DRXtK'@;
put 'ejJOVE98UDhSMHUhMHl+WV0+fGBXWC9AS2xvO0ZPdjNZdXxPaWV4KjFsbEAwUU5qV1RfazRBNU5EQVc+VCFbY2tnInVZeW0lMUlAVi5zR0FGW1kuaUoyemsjNkNrTVN1JDwlS187bitpd0FtUWIoaiRrbUhgKj8qOUt7I0dXYCtUTGh9KHxbakBmUU8wU0JtRC5bO2dIL1AreSsvMHsicFVjdEM9'@;
put 'YnlZeCF0ekd5RiQlWTgpaHwvMDN+JSw0fF8sUDFZZkBgKk04VHFfPn5kLGJ4L2JqZHB1S1p6XkZ6bE9Ie0tmU246N2Q1ejomS09lSlEwTiE2MmJhOy9DWyVWKH5zWUlmPiNSaE17JjtAV2EzPXF2d0MiPEt9JDZ+XXsoPWczfXx0bGo7cCxhPCU5Vlt0I0V9I1kjPGsjdEU2KkRAb3NGdm1UVTo9'@;
put 'KjMjdG4wSmowW1Y/cEU3bjl8UmZJWCVaWlREeXg6PSl6eSh3Pl1PaGIqUHtNQ2JyPEt4diQuNSpoWVtGTWEsJnJ4VStTbTtMbGErIXEsREBaL1NzQzs/c3F9O0BGdVl6Sn1+di9QKDBJdzx1eCReY1BXaGUoMnZ9VitMa1lGZjJnSEpHfGcpVGdKa1dnJlovYDcmeH1ST0dVcFV4bG96Jk1Lc1JF'@;
put 'T0xqeEcqa31WfnNZNXciQHNLcTdWSWdDYiQuaTt4PFNpej4walUjTkd1L0hsd2BvNWgraChqe1R9ZHlva1hSWiNbJUZSen5AbiYqIUAiUTApdFRhSVNESC9HUXN4NCEwYXR0MU9AL3VJMmdaYntNeXx9Xys+YV0vYigmbFc7VV10KlVgW2dkRWk3VWtvLCsrcFFoPzVkIVNRKlVqeXltPCtmNz9K'@;
put 'NkY/NV9qaVk+VilsXTJGPCVZVWMrUm9vOVttUGM6SyVAYyEkVEohMVBvRHF2SVJNLGg7eDUucDFRbXk0KEhuR2xEailLaFFRczlIRmxDdChRMEN+RVdYPCQhZzArQG5CSloiNVJ2Zl94KUBHeEkhQGRATy9rUnwsYGorSyxPWXViUFtIMnRhZ0lRem0mL2p8MVtOISM+YU46eVVmZEZVMnF4c0c3'@;
put 'ZzdnWGorUSxCXlRYdl8waCQiaEooaWlbJm5iZ2kzP2JuRThPeVtjdmJOX3gzRkIjRmVKJWQmR0lpOzhtfDJtSkY7eH1FVXIuLmVhcHkqSV5fQ1lYVGYsRX1hZVFIYmAqMzxnRih4aTtMRXllMjFaYVd5YVhdRHdVenQpJm1edyZxVFEkN15ZR0debTBXMSh+RjBlcl9USV5kTH4vWU9JUkI/KyF2'@;
put 'bHNVPWt8dHJ+Q2JXSVFSNkhaciRpLj1WXTgsQyE9U3tJcXNSRT1OSGJtaXxRUDksJj9PQ3JWfX5BLEAzall8LkN1YX1oIUwoZk4hVWgseyVZOlswZ2FmbUFjVmhqIzF2Ylsvczg8aHNxNU1CaGEhQEZ3PERibWc3akZzemxgYzw2PDdGLiFNJUJ2TTNrMnByZVY9RFUucl9dZHhrfiNpIUtaQW0x'@;
put 'PGFoP3QkIURnQVBxPWZNcjZjeCJnPjslT3M4MnQ4Llc2SGZGOnFCKWkqKiRJTWRCUjVlKSF0di9IKUNzXW5fIzIpIT5aLnZ0QHVQezoyVX5eeyxnbGt0MnIhdGRWaUhaMCtxak9KMC86c3d2MktgSCM7JGAoJDRTdSNhTGdUY04lRDckRTVIQT5FVT02KzNAJFdIQC9dNjZoTGlsUU1EZm5ZMFpT'@;
put 'fCNXejgxTVpeP0olYFJDfTFxPihSVSghcEZJc0VkW2FobTx8cW1BKHRxUDUhc3dSNW51Xjx7e3JUO2hMZXNkRUp3PEpxUGdGQV4pe1BaR0Uze3Y4VDt6ZHAvI2M3OmVxWFY7R1R2UlNlbEZ5VEU4Kj90LmRWdUdWQFRVInYjQG0ibVEqUmI+LnwrRnhMU3Y8UkRodEVEbXhvNTFyNF9ZN3FTaEhq'@;
put 'a2pifH47bT9WW0JyV0FEYyxMSmN5MTZIaiwrUU1wQUclZTI6WkpmZDMvOzwwUDh3NV4ofmtiWTJGZC9BLl9Jay4hUVJ3bGE0cnxKOXNXM0IuPEUjMSRvJD53VD4/KlpQNlM4b3csWXd3OXVVfU8zaWZ3fChsVXBKM2NbVDo/PzNdKiZTUWJjITlHSCpQYTt9ODMzJHJ5aU55TXBVc25RV1smRjZV'@;
put 'KjtRYV0jSC9+d14uJndQR0JJLk9wSVFeX3RJbTluIVZ6OXN2Uj9YcXtAPUJfKTp3XygqNFkoPl5AM0xEaypwXWhTIktzXXl3YGBkMlUhWjM6LG0lP3tMV28hPzs2cWhAZCJdSyJnUkNXNXErcnNHdV11TGg6bj5ie01AaVpAO2lrRSFVSUZqcGpVWDhNeEQ3VT9qdSkxXk9hbzwrKS5nfEZpYUo9'@;
put 'bT1SbncjWDl2NVpQIzZLPF8+KWNeRUppQU54Qk5KT3I2em9mQjl1eDcvUlJecXZnQ09DNm9jVDhsR2NCWjQ8W0ZEYnpxcWZCOz8wS3ZpW3NaaChkSypWUmZAKyhHOXouZT18cUBsLDZPVjdye3tnWD1mWkoud2J1LHhRLnF4SUd7XkZLa1FuaT0idSZldSk+KVA2QFleaWgocihANW9veylDKFZv'@;
put 'NShdUH4vMWhnVkw3Y0I3YV9mOmdXUlk3JXJ6OzV2JFVpWXlua1J6OipLKlVtdSV0fV5nbS84dil2dHd3c3w1N0FeXXA6X2dIcURXPzw0Wl5kIV5RMDBlPkRTRDVtdnI6R1d7K3lSS3xSMDNRZmFKTFs3al51V0xwX2xJfVZqdSxiTV09ZX1GQzErWkFROiJTcVY4KylAIykqR1RaX2hnX28pZU40'@;
put 'b2JFL3YlWz5EMjJQeT1WK0QhMS5vfWNHQkllOVcyQjpHdTpUMk5EIWV2bntPNz5LfFR1QypUWk8kaUVmZCRkczIqR11DRCJNXWs2K09CWWFDa1ZHdU5zM2gvcVl5SEcyQiNRb0xjI1MyT1huSVtwLzl5WEdOWXJ2SGxuPlh7YU10K1NxNkVeQD5EfF5RYUVOZlY5I0tOLHI0dH1eM2VRKXc3QkdC'@;
put 'K2Y2R0VLSUxaPEkiT3QyYG5UcFl9Q0JWPFl3alU7emd9UHkuZlt2enJdelVoMCxDTkBtVShrNzYhW1Y+WXMpJkxVLHg1MGpFTm1oIyp0bVlKRWtxU1k/b1QpQmMjUSxeJj0+SFcwKikySWUmQl5GSz1WKDNBQHYkWWh9NmdTcH1LOVl6MS9OS1VQfW1WU0FfWCMmZy4yZSpwSmNlTUIjI2NzcUNq'@;
put 'SF8iPnpvI1A4USl8OVdwUnlGR1pROF4mMjUmWnt1UUp8ZztOUTcqKm59O2p8R0I2THxuOHQveVQ0ezFAKGBFTmY7MmdsSy5HOSoqOFkpKGVvPCE2YVg4QldDQ25ucXxKKkh5Kk5fV25EcHhTLytEPzhGeD4pUjlTLFgiNC8pakhPTD07T2FXWzl2MUpiTGVNcj5qc0xda3t5OzJdQVd+Tm5Qe0gm'@;
put 'NmNRfG5gWkMjT2giMXwoTFNfJHM/PEVYKSMjRytjXThFUTA0QG47MyNDaC87VFZ6ejlAI2ImI0tHeWBoMXgoSWE5fTk6fXlvaXw7VDZVdlR2KUYvdmBRUjNYXVAxalhabykoKEYvUXhmZShEdmdZT2Y1Ulh6R3V4WWFxYnc0SCNeXiZMaWokNigoJnY9cSwqWm54fiNfZEtARzAid2hJS3VZcE1W'@;
put 'K2M8dnEwLEhhamtMalZZamJMRWRSTylGdnsqfjk6eHZJSjlFUWwpfHBaTl15UGkxaWlSIWVBOTNhOixhcWVeclRsTmF1YH42fUpGOXtdUmM+Pk5mUnp3SUN5MSIkUjgidDR9Qn02ZkNmeEh7KTszTz8kUC9RN2VfaChqP3V8RC8vQzs/bmk4cjB9RzQqYkhWZnpTKypzV1pPPGhFdHd3R1YyU250'@;
put 'SVkkeWpCPGR+NFFjNy9mdHtWXkx5KD46bj1yRU1JdUtVU2gpRHxYJU9WTjpzTk50Zl1vL2ZwVn4jWTJCKTtYZU5vantaPCVOPChOXl8+MGp+IVBdXXFoI0FwTiJHc150fEg9OHgkfVl2a2xsUnAzQURFIU9pbUJ5XSM0QGJCVWpSInVRYElXdU08QyFjdGZTZTAqSChLQk5rTS5XfTYvdU86cHMm'@;
put 'am0+JmR9LEBvMVY0cmlgSyolSzVTOy9GL2t3O205NyJDLCpkUj5+ZnpaSy55ZVdAYyp2Yz8hLzMiJF1Qd0hZRGIjSVQiKlh6Nk5IQGN9M254L3h6aXshUEpLUSgsNyhaS2RhKHArMGNuKlo/U0J+dmhFeD1iWmYjXkM9PChBen5FXS8qRyUkQVtedG82Qj1sUCV8c3NgWVhKUjZyLkx0YiwjNEFC'@;
put 'cEdedSs0LlI/PWl8I14hL0BmLy9NJE1mSiFaRWtGWVFWZWV3KkAkTnVyZlR9cShpLjdMOClWXjFBO1k3QTIpfFVtOWg6WmlFaD48WFA5Q2tHTXl1KzNvYD95WSV6MnFjU287JDplQkhEWW9QcFBrIWJgPClzZGwoTWA/eGxzalshM3F3KyJXNHJSQSEyLHlgS2xDP0pXVT9iflowOG57Tz1+Sl43'@;
put 'WkxpRm1iZV8ka3g6ejpsZmBTI3xyRiwla3FDe1ZFZSFWd1J4dV1pOyZaKUlrKFFncUt9K3Vgc1B+WXN6ayh4PmM3XUAxbzlNd11LJXFaNDJxaDp2dXFfJDx2cVBzOUEjVWwjOWlZTiwuM1J0ZGk8WDU6dFl2aUxpZ0V7P1FRM1FyQiQ9YCp+KS5OaWxJTUlSVnJTZyNtRFc3UGxYbXl3MG9FV11h'@;
put 'IzgyQytiSWVmeHQhWT10QX0oNEQ4dS9mIXs4MjFUe2pMRyFfQW45d1M2ciQxcGxLS0F8Qy9EOEE4RGR0cmZOfWxVQzQ+Q35jM2RgM3lHanBEJTk8fkN2TCllaW8/cXpfWkliYyxKP0xQb05lX1tdfE0uMzFLP3x2P0tQUlVRUUFhbSghWEh6diZ5dyFkLm8vKE9TU0ZVV3V5MUJ5dS57YWw0RlA9'@;
put 'XzZoIXUydWUlU3VOdzpQanoxekA8NDgoPy8xJDQha21bZmJbbHVGNk5yfWUzQFlWXypjNCREKyg+XWMvWSY+Y3tMKSFHOWFVQDVMVi5eOilleVVGdmJZYzAzSSI8LEMxdmdKPUhuTzlzQl9IajlWKytIMEpeMmtdfkFLKiVMLkBjQGFTIiRKZnFrMkxzX0pTSVVOZUJgKj8sQV93ODw1V1RdRTlK'@;
put 'Z28rQl1JZy5pPCMvSCZjVHNrcF1wVDNYVihSTUFMLEpIPiRSXzAxeG0iaWBsSiIpXVA/ZiNLMG9YJVc1SmtgNXI7QXZfUSx3anNHbTVpYGI3Ij53KD1OfjBdVU1ZXlNTMWZFIU8uendtSnVMPF8+ZitVeDU0QV0xWSVCRXFCL2Z+K1Bqe0szdXY9JF5gZyQ4UTRhU1t2TWEpREh+OHI2P10yWD1j'@;
put 'NGB8PVMvQWNyXTZWRilzUGYwPXxxR1JHJH5OP35lN09UW1gmSDVxRyNbKWlmdT1WNT9QJiVZSFJLOmlBYnphZTNhTWU6b2R7TyJCWTklUnZAMWx4NCQoOEJIJWEscl5+ZVM7eiZGR3ZbUzl0N00lOUsoYXssb2B1PzohUEt0ZE5hODQ1KH16dHk0Q0BCYE1pKDxyemQkMiJJQFoqOS5qVTBvZFhA'@;
put 'YDNFfSUuKngoc1Avc3BObzRfYHRMdlZaWld1NlswaVsheStReiMsbXxyciNTVjlSZHhYWClgfVgrbithLmlEV1Vla3hSZSN9M2VXfFlZJmhoT2dFJWA3KG18QEpBK3lhMFdla2ZVbz1rYlJ0UmdOTEReKnI5X2J2KnZJOThSJih1e1VYe1BeL0hLdWd+eGkzV35NZitWfnJ9Zlk/YStaaXtoL210'@;
put 'R1FKXmREOzYxcWM0Y2JSJG1ecElaWWlUI25sbHFAamB4cz9+QVZ2RHQ5aWZRaEhNLGpYRDpAakVsY2F6LDNbNDJ+MUt2byhgTSl1QD9vJi5JO145cHo9cDw2U1RodHMjIi9xPjREVk1CPWEsPlhHblViRztyN2s/TUJfS2MvbjRSNGEqLDAuSDosdik7JjVlO0k2KVR3SyE+SSlbeWN0P3MpTGRL'@;
put 'WkNjLCxkTml3Uzl8RWJtdm4jPyU1MHBTbEtqST0zKFM/Ozx4SEozQWJ5X3VjMncuKDs6O2V6N1UrRmV+RE0jfS9Udmk+dGdUNVd3NSJ4WUlrOmFyJDZRTFh7IyZnY0AqKyo0fDl2XmpbWV9YYTZAejhOUzlRdFg7QUNzTmhOVk90SzIwUXRWTil7UVooS1hxI1VCIU8hWThbcUdyQjQ+aUR9c1Be'@;
put 'TyNiOVpTaV18KjV2Rl52LjdtY3M1PHZ2eHlzYDQ5On5eTzxKcjVkKGAyJE8oXTpTX0YkWnd7dCN+WFd+ZlowXkFSbW8oPDVFbH4oWU5GVWxXOGM9PjhpciZHal9bVktBSFMyYVQheldmdE8uKGxVbmowcXNhbylZYlJdPTQ7YD4iTHl1VTAqZjklbVpjWiZaLEFmXTFAb2JqYDoyLnxVO0YhU3gh'@;
put 'JXVJWitUTih1OitiMGVUR3dzNyE/UF8kPUVNNCwwMmlPUGlHOmcuXnlHOjBtZCFrOjxvPWAoWyFhV05wKVZMLjxPQWJfRjAhWGoqLlN1d0pAdlUrRk9yKENRXXR3cUdUTHpZMjtbLzpRSlNeXUleSU1gSiteYz5xVkZBTHVINn5wM2xVN2FgckRMQjdKPFJ9RjpvYHtzMnFhVU4ibywzQnBpNEJX'@;
put 'JT0rWmpWelQkNjJpX35FWXxCbkdAb31MPkIxfm9MTXBgRndDUmQjL3NmJklQbHksfnpWPX1hYEs1OyEpSVl2YWhmUkNYeWFTJDZeTiF+WUYpdnplSF9lWiw8KEJhPnczQEg3Q1NjYHVFYFV8aCFsPUZwaEAjJWxTVlhYZkNreHNoYmpXUkN+ajI0Kj0mNTNUOXxdVlRDRShRZ3lEZDhYeFBfUVpN'@;
put 'L3QidWBUeCpCUGkzI2kvLzhjbDNCdy89TFVTRmYzfmgyXTZDW2VQXSRoaW4uKUN5RT9IWWk+ckxuKiVOb3U0M3YoQShrKHhbcHgrNT12VkhJb0hgM2Z2Ll1pTDJTKFZqKlVmN3s7QEtYbDtqfkNzaDF9Uz5DcTFnZUBpak4/Qih6bylEIiYxRFB1XiVgUV1NeS5xQHFrOVUqeVtOZzx6Q2kkRF5m'@;
put 'YX12VzhUJih5K3pVWDIpVCN0Z0FAR1o5QHJubVI/dSNSeHU2NzVRaWhIOjBraFpuI2M0Sz5saSpyaSYxRXA1RGJSZDhScmppMDBrVDI8VT1PeF9oX0c2SEt2KXJwP3ZfNSRgd3YuM0NSLjcmXVYrdTpBaXBHTWsqLj5IQ0JKakxqIilfdkJ4MDMmby5+ZGZ6YF48KlRzWWEuc3U8ZSVgSW8ubHF8'@;
put 'JnNvdGZHVFNsb21iajpLMXB1YkxiOl58Vj9GV0d1dH1vT0NbTyVIXWIuU203czY8WiV1JmBaalY3ZUpwMFNTVEdZM0F4RihyOShHbGhoKDR9ZVF8UHdjbU8pcWJafEZGUTYrbkliSVgpaHY9V3ImcVReJDpzeTs+NDhqVCJtUnZTcTRhUFt9NWlIOHlUckA/R3xvNCMpV0dsVSxwdlhoLDJfaiVj'@;
put 'czZyMFdFWlhlQUI1XVIpcnEsYj4xQjxNLzBzMVo7djlydXtgWktGMmlpNClDOiw/X0leeTt9RGlwOWxPQThucDNVQ3JSTntDTnJiMnRvOWhEdml4Q0A9Ly57eWB2S0g3PiMpUUJ9S00lTU16dkk0YSFMUC9KbVF0MS9NQH5iKG5KLEU4I3osJUFPaV09SVdFLDUmNV8zczI6PCFpMUpuRWYjMVYk'@;
put 'TzAmLykhdzdhUD4wUG86SiJJJTFnfEV5cGhoQiJrVCZMTlZ0IjlRMUE0QExHOmRKTzIuKUR1amhOP0EwIihqe158SlhFM1l+a0ZQO3A8endyYHlxejNKQXZiYEdwTTl3MG1yfGdxWFRnW2ZCTTUmQj9GZSQmRDNlTEJbTzdPTi8sNHlVYGkxU214aTJCKkh4TkhfeTVAUj8oZkJQfHZAPCEmcmVp'@;
put 'RTxKTT4+NCI1NV1ZJEpfQl46IUdlYjxEczkzKShVcSM7VGsrRU9aQUMwY19ZPWI5TjIxT15XXUV0NytZK3dMb2pmKGFrKSFQN1hsQUN2ezE+Mkd3VH0rK1EsdFFHQnVIUnRxdFhbRmE3a2ciUHd4VmMrKDVMQW03NFUzJm8kR1JDaXw5MyxodDVxYUkld2N3OHBSbmJLTDtSQEk5WlVUZUwxNT46'@;
put 'JGYqZDdgPH1EJVBfcTVEUnR4XV4hRH4xVmNUbjZUSGtHPyNuQy90Vm0qR1BFbWIrdkpUWzdqQDBsYjg4MGhHbTx6bmFmS3FvT3l2T34wSnlHS1RYW0x1W1tleFszaC46K2x+dSghOj00N0JBeFEqKSFGJjZESVpyQTRgdXEoKT5jRF1Ycn1hU2x5d2NKYjQ3X34yInw/Z29YKHd9W0h1U1Y7SyJE'@;
put 'R3R0MHteOnVueG1zQyxzMkMiMzxzMkxyLk9LMCYlZSpZP0VjLmJVJXR+LHJGXipDKT9eL2twMXxOIkIvP2dHUn1bRG5NLytgQ1F7K1VGeW1dYyM0Xit+XiV4RVJEQyRQQUVafE9UITkxVGhZLjYmISVCRFRLbyYiZGxsfTlGZUZuT1UhI2I/PnVRaGg+QyglXyQ1PitJWVFPTlk1KWY2RURXa2BM'@;
put 'OF9nYCJFdGxrSUY7YVI1XlFLVChAOjoiY3o/P0lkVFh0WHk3TFR8XWFGQDRII3sqQGR0bSZgR1M1ISltYk5fYm00PXp0fG9ZKix7T1ZzayNjP2pRPDtxbmQvUHNEJDkzVWtqfEJwJEdeQ2pQelNoZ3dgT2JCcCxhZCxURntzc1hTOEIwUmRVNG5dcmU7bHQyK096U0tnXXljaD1TNSoyQVAjPWpQ'@;
put 'dXxNTjBtWTc2YjIoNl0saC92eWZfcnpOQjd8P0Blc3o+NS9kfkFLLF9edE9aU2JufkJSQm5aVEUzYi4kbWtwdF5EfCJ5PmcuW3NFVDs7OjVuMnRBXSx5Vy9yeC8lPi4+NUFoZmV1XmRYLD5YLm53V0MzejlRajFjKFFFTypBMmhaSCRSI1syR0Y9KUVaNWlmUFRdTGZbOG11dVlvL3NQe0pQek0x'@;
put 'bk5dWExGWFopMDkyTzZlUkVefSYrMl1nNGIwUkkwU0J1Kkd1W01gUCxEJTd2Ijt9ZGhuNlZOU0B0IS9ZJndxKGt3azB6OT1tL2BZKGVyPz56MCp1TXN9eVpafWNMYEliRXB9OT9yaC5SIUx0MERUMWk0Vnw7aX5Kb2c4PTR2YSFFcElUKGcrUCh9NFIqeSxpVSQwdEEwKWhnTWk0OWcwIUUhM3I9'@;
put 'R0hIKVNde2BiMldvWkoiWyhXcmVFNlNrYFlZKz54UiZbSUNsak03JWEjWmdfWEloY19qOnw7aUlGYzVTKjplKXxCOWJ2aSZtM0FDLHhPfldnIWF9Xzgoa1VFOXslKV59JldwT35iKmlKbm1Qe1Vab3FRIT9tVyleKHopZUk1V2dRUytfcSZnVT1seFAwZF1scU19LEhMYU4oLjY1bDF7ZVJmPXZX'@;
put 'MU92JDV3YHd3cFpkaCk/KCN+UTUhdmtVKGMrKU5KfEgxc3M1cF5yeGg7eixSbHMpP1V5fmM9OyxATzRHKmcyPHxQWjR9NWEjeVdLODR4dT1hc0xwOXksaGRZalM/JEd4SDF4ZGp7d2E/TDAwY3hDR3ZpQWdWbWh4PyRyP2FyeFRsSzV4b1FnRiVrWVhxY21rc30pXzs+aHRoYndPN3NgOTIhPHVx'@;
put 'V1R1fFpkcm1xfn4hciVlS2dkXWNHQT1TQXJpM0A0T2d8QHdlWXM1cktPImsoWHhrelphWlNfcj9GQCYlSS45XkNkIjk4X2dSS1h6Izk0KV1BY2s+P05JXl55e05eVDUiSDkiKXEqb2A0WmBfTzhXflBiVGMlJmk3KDNnTDFnPWxISi42aCo+XkUiSHJnLzxxQkI1Rko/V0BhUW1lbTM6LDVZRkQz'@;
put 'blpFKyJffi5CcWtqUmUyOXwrKDRlaGRINV5eU0cxKXU9IVBJcDgrW1hVPmozVlVBVzw4QHpvY1ZJS0BjXjVxTztlOSUkLzNPN3IxPHJOSDtqWCpySikvT3E+Tyg2NHNJU09DKDJ6P3I3K0xzVy44SkV9PlopJXc8ZVZaPmJRdzJdb0UrQ0k8TVI0aUhfQFVBJkdMQ0dCKF0wMCpQeVVtL1J4eVI6'@;
put 'MWRkX2JWUjJ8Km5sS1RqWzBhT0FwTmc1OEFKT2IvR0txdm5Nb05pQyNwKVRjZGFhRit+X3xVWjwzUko6QWlpd2ZTai8pR3R1az8+KlR2ZG09XjNAX09gNm88ST5gaiRVLnVweG1jaWAhMi4uUUFUbilHQXBHKm51dHB0XilCWX4xMXM1VCtjalkkYDQlJE9iOn1PTVQ1d1NNd3JTfmlpZ0wkeWBp'@;
put 'cyVTYClIcS4kRCEkc1paYUx1OTBpa3d2eVNaODRhbjdlPy8qK3gpaD5nMldJM2VUa2opMUNbJntiKSthQjZpTGlxLF0xUmk1NnF0ImpNPXhITm0lU1pfajBLYSxsOG1IfixMcSY8dEtgPDFgSnNyZWdyeCwqJmJhWXMxNUk/ZlNzY1RaVF91Uk10N0YqaylaYVBYNj1DSGtMfXhOQyVlWDE4QWFN'@;
put 'ezVWNTloIWN3IjdfPm5EITJjMEs2U3c5OXVrJSUkc0NwayReI3crLFQ3bzQlYn05Kjc2Wn1+PklKdHo9a1Yobj9xQCU9bmJTZ3hJam0ze1FnTH1SUDE/QFJ8RnM3JCFbOU5FXjdLfng8aXw2MS9Wb3xPeUF7NzpnOEx7d2tYTzVjZSEhZmJ7LmIxP1ddQ3dgX3hsYXk8XmhBRm9LR0hlOGx2WnZE'@;
put 'Mz5gcFVxa2RLMjsjQ3pNSytZOU5YP2ElflokXi5MPlNVL1d4NHU0YDBzL0M2NCVPa19NNkEjKSxQTTxZYkwhUjc4KlclfkpFfjF4SH07OjpiU1M2flhKfSxWVTY9V29dVTszVmopUzZ7MTNqVip3S1ZQKiVFb2FOUkk4b0J8ezJFY1oyQkc/aFArdzddTTkmUDt2VXEqTnh0Oms/akIob2JXXURq'@;
put 'PjpzZn1RNTxPMVRVSTtuJFcwbWpuQX0veVVTdWVRe1VpXj1vN2lPUnZDNXJtJm9LWWZUO2BALlRHKlZiMXxBM2pqPyUsQl0icjVHVGoqSmp8KEcxZDRydys6NEVXN2c/WGRpKkA5dHgvNyw3M3I/eH0qPzxuS256YW5Lam5hS0F5OnldallRKXJNV2I0Vm1adzt8NTN4VzRdXWNubWckP0dYS1Qr'@;
put 'SSgkW2RiRVN5VERnPjRpS15Edk9+Xzo2V3Z0T3dFakhIXnZNX0htRntuSXxCRXV2WkhxaDdjbShuXk00dks8N3w6bGwydURALiFvZUpWNW4/eEhPbSg1XTFpfTBmVnxiO1R1V25iYkF5dV4pZGQ9SWRiYjx0I00oYF1VMEd6SzhXYSMoZ08pTi8jTnR6JEU4LzpScFdhejVxYzhsTD83NCtKUm1E'@;
put 'fX45I0M+dE9sfi5YQUBdMV9vZV9nSXA+SjlFVCJCR1dFMSVXZVVpcipEOmp0YmpeczRqb3p2RmM1ZXkiUTdrTDZZdSY4ZF9yYHt8U21hYGl1dGkrUmBIO2QhOCthYmJTMUImMDdYNVhRfTJiRExGd0l2R3ROT1lRUT1OWzR+SWxlI107S2w5XjJ1MlVLWURMYC56cml3QT97VSRiUn1CP3FkbTRJ'@;
put 'blNFZT8oVnNKKTcmPSElRjhDKGxzP3hWfHFoKUhoWFJXPUU7VURzflVpeyF3N317cWRzW2l5cmlsNT58RiVvUUM7YyxhREV2V1ZwbUAqR21DZHtAWig3YkRkKXhEUW88XVlDKGRGOV4iMEEuJTZWX09OKXJhVVUkInVQeyglbkg7ODthPnEvN0kxUVpfcUxtQVIkOGsvR3NURzEkSm0zR0w0TSNi'@;
put 'VjEjTDVkNGZXV1U2VjBjUDRmWDQyNSRhYlJFVF0uX01IMm1oUkQoT1sjIk5pZTJJSmVTZTtAbCRnWXBfPTI5Q257X0A1aEIyVis1MHZEVGZtRGg3fE9mRlJbVGJgdXAkRnQyaC8jVEU8Rz99fFpjOXVGZnQyNTRpREJEZlQ0OzAlS118Uy8sfmhbazEuW1dEOTBMdSlZP2ZuOG1TSEFuVkBkdlZg'@;
put 'UWNMYj9dSE5qTjZHa2R+YnBEW08yMFAzLHwzKjQ/WlV4el1He1U4LyI0NG0yM0d9ek9Sa0l3YUJ8OmcuM1NeeERfOU1GSXw3VjEsW2M7RDUyPVpbIS5INyV1RT5MUE48KzY7LzxiWiVAYnRbfjZLN3h2STlVTF8jQl15LntDWGIuUXtnMk1pOH47LDkhd1dxeSM0RH1tVm1TfURwRD96WVpgXyNT'@;
put 'LFtUcj9PZCxFSD0mfGhFcGp3T3hJPl9hOylBMG9KN1AjW1ciY2d0ZUIjKSxsWXt5R1EuKGJgWklLN2MkY1hIL3hNeCNtMVBbNEs3YVpYZmB0K3xHWyF4di4+IyNKOlU1dlF9QCZGdmBiOl06dV1IXkRnKD9BQXpZUjNvQk5bTiVQIUZMOTdmNGhxQXJPejQjWnk+TXR0cyZoV2phWXpKRmkoeHFZ'@;
put 'RjMoXSFISllfUXQ/N3hXcGk8YD5lWHMzbTEwUEVpNFgkeD5+QzhOI1M3Y3RkX2FhZ1s+WnYpe2tLRiJ6O2tqa2g9ekY0bGlKMmNMPzdtQE1CdU8mOClheyMwP3w0IyImNWM5NGBXflNCSWpqJkg8XVpPWCU/ZTIwPVRMX1glZ1pJZmBUfio8PjU9UGJkVHtxQz1hI3hRMGQoVkklLFV2SEpfViJ0'@;
put 'ejBeImBZK3QrVntYVzR+IkRVcmIhPzt6XUZVNlJbPng4I0M3NGZoRzJYL09VMHdYNjZJN3BleldjUi9nXXB5WT9qVH5qTFFTZnVMZiRVNVlCN2lsb11YKTwhLlI8NiRaXTk0IzlKJnVrSS4hRnomIW1lZ2VAJFo2USY5YmwjUTcxRDhbV2xwaiNDbF8kemtWVHVJLFhuQ0hCL2JDU0BwK2dtOHVS'@;
put 'ZGwwUWB5SVRdTmtycTJqOlpmTWZESFt5ez9SWkF9cXxgIiZSPkxqKSVwIz5ISmVCfHE4Q3lrfF5kTUxseSNXS2s/aVljT1AoeytrOTsuTSp3Xll3ME1hfFJPcUksIUUuMGlZV2cpfnBqTy5rQz5JUm5OJHJIe1IiaVhre2k5Z2tia3E/OVVwQ0xIKWF3RjFFSHhWNi8kRmVSYzxWQ1tPd1F0SE5n'@;
put 'dTtmWD9MVEMxYDhESUAuWkRRWiF6U0dDb1k1IlU6YSJRK0IrRWJiOWQ4Pj5QZlB0bGxWYWxNRVVKeTplSmp6bihKZTJ4OSxoXi4mYjZGd3huKXkzWHk3cUUqPnpYJkk5dmNPZHVJZDxdP2k7Wn5oSVRgKH1SdkdgQXojSEN0eXJ+aHxLXT9VbUYlWjQqRD9kSip0eztHUUhbUWtbaHRSTSNzZ1g9'@;
put 'b0MrJkN+fkNXZXZVUS8pfTFqfVkvKjNiIXZJL0NNOFhiNl4yXUJ9cCZ5USlDYHlMQyMmXiJaR3BuaUB1JlJSUWcwP0hrYmM1P2pVLjZ1Yy4iVDVsdSVxbExDfD8zR3QuUFVKQEdwTD1aI2p9LHpgZTNDcHpUMUdfPW0/Wmw6SD4pM2VyKTFzayxSd0lQQksmM0N8bUdTT3padiIrKElpIzcyUHZZ'@;
put 'RGY7OjZIaj1heSh1SVNFLmpkblJvanB1aWJRYjM9T1RSOCVAeGFiWHxePDNMYyNgd0ZyIjprV2tPM0JPZ0VeMyEuTTBDYiRjOioxVWZmbXRjT21iazR2IS9sMXNQW3M7eUB6UkJrUSNDND5IPy5oXXYrUWg5JEJvRW0mP0xwUjRPamlTTCNsdjUzNHJCPTdKITo8Oyg8bzohOFY1Kz1dZCpmLnc9'@;
put 'LjpmaHNPY1Z1MmhVbS9WKVk/WzlGcXo1dHVqRTc/MWcycz8jRVZVdHxxK1NvTFkqeHF2dnJGZkhbMFJqLklSUmlvLElXTVtTW2YkXWpaa2gzQDRRIzdIIlQjS1hFMTU0WlE3KnB6PDhVSHY7PStqYGpedjYuPTJLJC5da1R3VTY0ZSlhdnlWP01EcUcoUG1vaFt7YF06alpFc0JnOXNiSVRqVjQy'@;
put 'UHovRX1JO3daMXY4NyorSWpsOyxEfGdYYSQrTGw6c2tHPmtDPEIxdU1XOlJMeE9IXUkidzI5RCQucWJlTGlbU2lITWFTViQ+YCMmNXw9T1dSR1UvWXZJdDIkXXhsfGYpYUtPc0x1MUc/YT8kMkRPZzFGU3A3aWNnfiRUK3I8UkImay9PeTw9cFVldWo5L09MfDQrSUFVYzome1NwTmI/Y3tPMUZO'@;
put 'YENfPFI5aH46SkU1UChGfmgxK3xZcSM1TXlhRUsrbnlXdV8kM31pU1hlOj4wQF0xRCZ3aUNseGFJdjRPUUcmbzxTP3pZJV40djAscWwrMkAjJFM4dDFqeWt6Y2p7dVpsY0U+JixrU190UGJxUUBHYC5MJVpHLjlSIktZLiZRKU9QOU9WOTJ2P1VhWTl9ITBrZ0AyTmcxTmpwTildd0d1XlpqU0t0'@;
put 'Z3I8KiFVMyNXRnhAbVU4PUkjT2s5VDVBOWc6dmtFTFFiVzFjeiNDNXpFMTAsIyl1djNqZkVzZiNINU81SGFnKHpVYmpzP3k2Sjgqd2VPJi9DazJJOjVjLzd8KENnekBrb2dNLm1Uck1seGBvMXlMNyZMMS9udGMmdUs9cEUuJi4mVWpfanBMRkNQeiZnK2RPeiZKMXdGSjJveEUjRSpFMyZBfCk2'@;
put 'LCE1cW1BYGNGMSRuU1opWyV6V3FoK2FoVS52Wm9HYitJZ2gkIjp3Z3JEQXVueHZfemQrUCkzQkc6cDcoNU56Nz5qKkZoRUxnUVQ9V2w5WXhaSHhCbVoiZFdJd2NKbzddNnJWVVE2TTd8b00+XXBLOihYLnBXN0VJNmpGKFlWZChAMkI3T054MzlecUVDbmZrM0tgaFY9InlCXT0sLCF5RTkhdmdT'@;
put 'KGVZcW5BRm5keVpqdUssa35BOURgeU9ZczxGamskNUFIRTdrU3ltYm92ViNuUkR8R2R4VUg9PVIkKzJ+cUN5NlM+YjU2aStFPSFYSXduNHBFWSh5Nl9ASEd7OncvWXFLMndqKE9KQzUoOihJQC5bTm5Bfj86SihGLiQyUWJkSmNAJl8+fXkmWHZkIU49KS5WdS4lWlRCcWVSbUpWYTAkaSVsfXNK'@;
put 'VGxtIUlCVmUkfiRwWl14ZX1zM2BzL3BhSmI1YVZ8UGBuUUxCZFZzUyMhc0suJDtTbEAmcW1namZIJHp2PF5UZk42ZkhuUXlTYTlLSStCZWlAaVRicUNRRDptREp9aCNxI30uLFJjUVMrLnl3b08rN2tmLiV5UHh0MWpfWkdWPyE8XzVOTXQuVSVfTVMoe0opQH43fH1JR2haPDU0PFJhMjY0UHl2'@;
put 'KF8yQ35fJXZKfXZCX1VRYi4+OCxVO2hXU3QvOGhqWTlRYTFza0E7JV0lLl4mRVQ1JF13cSZ+OVZuJWkufDR8JCloe2YpeWZDPSJsJG4wbyk2XUxMRGlaVHsqTiVqO2E2QlM8O3Uxe3R8WGRXUSwhUjlsNkZLQUhzUClTQks9M0BVLmQ+R2U8Vy5OSlVoJDszNWZgdV50YVs1Tl9KP0QicGlNe0Mr'@;
put 'YVs3dSxbQyg7RGg5Rk5TKCpnaldjOjM+PUhHIUV7TDdtXjhaIzQ+bGF2cz1TSF0kbjY5W2B7YkNaWWM/MjFYeUFZbDNYfW0vZTRxJUBYYXlXbVVaY2ZVaz5WfSRGKFVzeTQvb0Ywbz5GWjk3SW5uc303PX1fK21LZigmUjFiaWd+S2FqMjZGKlFINUE1NDxyRFU8JjJqOltkN1ErJTNhPGkpTG5Q'@;
put 'Ri9FfWNoeFU9dFRBIStCWkI2YExyRS9BJiojQyRFOHlZezg1M1dUOjBlQXRLS3RwOiN2JV5XMlRSaUw5MEglaWUrTmZ9ZGh0OzVQUF1pUTprW3M0KzYjPFMzNCZ0OVJAKUhoN1tmQ0YiSW9GWVFwImNxbEFHU0gyVE57PFtHSkxPPltsPXBscnY2P1JBUk13TGZbbWk/NTtgJSFsZilYSUtPXk8w'@;
put 'Ij5tY2wxLmJhMmRaX0lzIS5KWH02VkFWWEswXyMuRWZGdW09aVdmfFsoai4zITwpYXZEbSVWW3p0SXxEQDJUQ29SJilnQzEqUiZFNV5nWz43b3NKX0JOXSw9fU8qMGxQclp7XiZveCFuP0xKXXUxLm90VUI3Xn1DO3Z+cldJfit8ejtKPCY1VnBuQ1NNeXFwdnYxVFRJU3NEXktoTWN9Y0lYOCZB'@;
put 'a2Uia0c4YzBpOyYjKWZhZ288LGByZCZKNXY9Kz50dCRmXVJWJU5MKkY+S1FSU1sxPTBHM3NwemUvWWNvYWRDdGVVWnwpdG41LnIiSDFDY0R1JFcqczBmSi41YlFiOVo7ITIlbG5HfXc6VWlPMURKKkNIXjEjfVtGUFBMKSwmREJYU0ZUL2R0NSN7Ny48cEgqbkk5LHFrUUhyZTo9NEpWWH1NQ0oj'@;
put 'cj1gYE1YIiNPdWlCa2A3c290USNdTk92LEBHTlhpYnlaZzZyTktEeWN1eUVHWj5+InBxZHU1dzRzOWkxOy99aD9gSWRQWChlRFZGVSNWOix3YHlaa0FWRm0lN2lHPW05R20zbitGYVU0KWJweXhOWmw+YE04T0N+fmI2eUhgMVdPfmVoVTEvRnMmNjkkblA1I0NedX0qYlQhPXY6ZnFLM3JmP2xn'@;
put 'K0ZNISojKSE4MG89cHJTKj99NT9GfiRFViRCOnFjKnNvQXtgRGhSbFRjOkx6Pll8XTowc1Zde3VXLDdPcmM0Kn5aQFUjV21xQ3tdQVQ6dVUre1tAKTVgdy9RPDV8aSUrKElfc190NkQ2RE5BLiVFNSFOQGVjcm9IQE9OPGlCX1ZvNXN6UlJmQSpONkczM3M0QzxEOnhCKEoqfW9hVXNvTXs9JXV2'@;
put 'YEdFRjE8PFtRb2VLPislNkdUNiosfH1jd2IxVSJ3Z2VFbyNhXyYrbik9WHFwemJkYXU7Ri5aJUpWcWtOW3FJUCE+dD1GSUd8RWlDdyo9YCZyKmg8X3B2WHQlYXlqPiFfWE9RSHZyS0o9S2JpOztOOUpuQlRHOS9KV1tveEAjKjpvOSpJeyhRMEF1SispeHB7QS9vL0Q+JTN1eywkQEp9JT18SnhL'@;
put 'd00+I14jRlZzSEAiTHciTit7XmBDaEsvcGA6ai4weEpWQGdpLnhaR0VtRDF7VzV6c0V2JnZjWTw7JDkiTHpvVFpkPiZgPWd0RFlocjE5SCNOMzRvRV59dSV1Z2s3S2EuN3pEaSMhW2piXkczOkdfMmh8YyZOVl9BIjwkb1BsbVMzPztjLGVaWXsuRHlCQHEud2xkKCVNW081bXN1aCVBRmt6bnF1'@;
put 'dy46aGtXd3Q9MndBRkJAZURoaTtgYEs3MTZVKj9qY14lanhxJjJOaVZRX2c+T3AzVHNiUWkrVUIsP2UjME1AVTRFQ1pHVzxdZ2R3bGd6ZjJEQ3dkdWxZJVAzIzJTNjU3VGs1Nkt2PyIoNFFFPmhjZVd1SnR2W15gMFVwVzdTRFMxd29nK0RPMTE6XUltZChsRDNgRyt0RTI3ZkZZMUorVTMxRCVI'@;
put 'M3dzTGdEP0dRUjxeODVgdXliM1hjdmRbQXo+TUM2M1hfYyFASkkkIVVOJjF1YTFaeUtzM0VOOl94YHFgVztraXgjQlg9ZE5KYnJYeUlta3QyK3RpSz1pNltRMD9mMEVfZyk4VnRxW05hPWl0JGxMci99MHNpIkdlIUp9WFMhU09bXmVxWXMkK2U6bj9LfjZHNEchR0o1MUpweG5DaUB+QVBNbTdk'@;
put 'djNQQXR8OEl+KG94R20lcy5rIkowVlUsfnhuNV1iM1tQZj1wT2ciNWBtQlo1LDw2UyNPNV58LCN9Y31YRiMuV3BhNGg2amVob1VkdTRjQkAjP3xuYnEodHUlNyVPN2JRWDZ6YUllfSRSR3R5Q1FvOC4mZlk4VFZNeHE2OlRNW1VhUntgJjQraGc4MltXPmtme15SRkVVMjNjXipkfGdfMFJ4bkxd'@;
put 'bXkhOmAiOUxWQUIjMUIvK3xYTDF3UjMrTC8wKDheISM4ImQ3IylvYkVtbWVHeix5I14wfUs/aDdSJHs6Q2pwIVU0ZyFUZFdCPUFCZXQrZ3FsZ2BeVXVrd2FTalRoNURod0A7e2VZQndlb1NlNW8xWz4xOjc/YkRXRyN9PDYsfn59UXxjWiZZVkVMS0FWK28xWSJabzpBXnJiQE4zdysvUmFBKkd0'@;
put 'PCMrQiZPSk04TktoSWZ7V2FObjg6dF9DWVVsPzk6YDNRJkdGXzhTbyVXaFElWUdzIWVMQ1lraCpVeiVOQ0IsamBxcj1ZO2RKSXBOY3M0RCx3Py51N3IiSEU6bm0xLnNYbkhVc0ZdTVtsPzFXZ1sqVnc1P0M5MjZGL25NRGhIeDdodz0oa1svOTVyc3dIV289VCJVVFg5LkkmcDpSWEJsQkNEPnIp'@;
put 'Vk1SL2NmVilZbXtmZ2UsflQ1OE1VJW01cnpAfDBPaDJpPEFxV2ZOeD1KKmQwOXJpbVdmVW49KTZAU2w5e1UsY0k+eSJFTU14c2cyd0A6cG5RRFQ6NExYI0A0YiopKlp7OFJIXUV8eH07fCFOQjRmZ05pR0w2VDJ7WiZ6RXRidT9uLzFqcyhvPC9kVSM/KS57ZkhERnt3R0h9Nio8LE4qfFdgRENs'@;
put 'QGpNUyk5WnpDMm13VGpXSjpRX3BIPWtNJl9ZLHdkKiM8R0pkaG8saGRWMUh3NF13cTtkZU5jb29lJWE9ZXFLJW8zQkRqKlpoazs0ZDthRVRWJC85THZIX1I+LGE0YThGOXpeYjlafEdTOmkkdXBTX11wJSpHSitMZ34zI3Vscng0QVFBOWhPemFmd15AQHksQSo6UFIzQkYjQ2h+cj5sb2dFQExW'@;
put 'Q3peaHp9RWomTzw7U146UmxAQHtSRnwxMDJULnp7QHBFcG5WYzJtQmY7YG1YLkp7bjlnKGVnZ2RKVG1ld31UOmk0LDtrWHE1K357S34iSGVadm8+KDJnSTFedWRHYkhvU2A+cG4lfXQmTXt4O0BrVzA3YkhpNFBoSTF2UUxyRDZdUiRCa3o+dm8vWTwsNmNMYlI2eSt2ZSY0dCpHal4/T3QmQm0m'@;
put 'V0hiaSlIWyVsRClNNE9LN0pKdGowOnw4YGcoZ0V1VXtGYkU3Zk4jLDhpbVAoMXlbdEJiIis+RVN4KykvdnZ8XSopRWhxTXlaVSFnRERhW0xTVSk/cGVePFYvRlIhYVRlRC9qUml6TzphXkRtI0A0JWwqVEtIMlBYVW88N2EpIShlZilTOihpQm13UWlPKityaURtRmQ+VEghMDROPW9SNG5uLyZA'@;
put 'OW5DM01OZl9gRCtFU1B1RHtrdSIsQzNabWhnU1JCdF9ZZlZNcV1zLzZsPyJRM2ttTl98KmFWUiFdaVh5ZltXQ3t4Y2xlO3I8VlQoWltrQGgoJl04WyRKdUF3P0dRemhtaCUhWEtIN144LH5+eD0+c0hdXmFhPCFrckVQdGdWL1swKVdPend3aEh5KDtHRk1WflI3Pnt5bVtwLFY5dVVsQkRhbHV3'@;
put 'JXFTdUNzS2E3XXl9WERXeik7dE8oYlt2eFMoYUZsWnd4SGs8NmZBPX5iJjM3dXpmNzgpW29eTTFUYVIpfXZVK3QkJEkyZDlbVWljTD1UOjFpWU5aRW5pajZWcWUuNFo6e0VAQmF5WS49Z146RCZzbzZiRlpkY0dhbVJsWl9uT2dPb1pwY0A8Y0tfYShOUnsvOl1rXndgfUBbczF7YVElWlM6NkZq'@;
put 'K1dQSk4leS92YWQrR0JzPCNHKEdvLzUhMHwqTXliT3xTJih6KTp1PnBNLCM5ZndyWmY/PXBsYG18RFEmWzc8XTUzLFB1T2M3KTJFQyhjT35iU0AhOVclUyY1PzJFJVU5dUFuVyZ8TD5PKncsWyQpIXk6UHVjXT1ATFhRPWY4NWpQTVFnej1bPiY/RzE7M0M/bVpQYlVWfWwlXTVhRylROj0+WkNt'@;
put 'Xl92aDY1alozNHtqZy8waHNlLDQ7MEhARV09YSskO28/fnAzIjphaHxGYVRIIXpaOENqd0xdKmA6bi80aGtiJkpEUlRoSiUqYUtVYWhKPzomaSJ1ZCVje3VQdXspZkV8S2dxejZGcG01MHB7XTtDVDdhODIuIV5qU0tZWThUc1oqKCohTGBWeDEwY2hQKDIwN3hfdExJfUYkLjp5KD0sIXJnTXAz'@;
put 'RkY7TTpCK3ouVjhGX2lnc3pAO15YNn5heChPfVs2Y3FbPDQiTkhyfHZadiEsPyYxcThdZzEyQjgkSDgzRl9eVnAqOVFxTmx2d3tzSGd1PjR4ayFjVjlHV3EyI31udXZXcGxUUWNNZUtpR04xUFAoe0o+OlJtL3s4N0FZL11vajZDTjdQUXNyd2RrOn1BUyF+aiRlT1hTejFgb00hKldyMyFSMFEz'@;
put 'dkt3Um0pVnUme3U2YHY1VUlqMmJZNmVDQXN4Sit7Mm5DSWlibHZbQTFrS1AudUZqQzFtdXRaJi9EUkJCMUghP3YoYG5uSnYuV2VWOj43ZEIlI3w9SmRyOkV1IzpuXUlyZHRbTCI+PkhhNEl+UUNEZTNXSUg0MishJGhiYkxyU3hCTVA9bl00N29lSDsiWHNiMGRqWD4mWjguZCljWSxaUlUsQEZD'@;
put 'ZStJXSh4VX1sYC8+KSg1TlR4dG9fTnVCbnEiKDtOK31uQyZnVzYsIW45VUE0L1dbRXooendgQlY/Yk5EcFRbRjBOfDpNZURnYEZqdD0lbil8U1ltLDpTWjd3dnNlPDpAaSJ4KDpyRCtnXWRAdDlGaFEhX3oqcE1yfTlYZztwaz5iP2ghUDhMK1k+RCw7XiVTQT9Je0xlMGk+TG1AKD0mJilob3cz'@;
put 'dz9qNkVTIkYkczNGREMmZG84UW8haXpWbXprSFB2MWQyIzdsJlk6Yj52KTBuRyVtL1NFdTExV3x2WzZxYVY0MC9ZIjAyWGhtOlMsakpPKSlxZFc8N2Y6NWQpKnk/U0VzUnAvJkJ0ZjlFWllAOFh4ZGBoa1EmeiJsKj4hfm9scCZRS2B8MWlGS1c3cUk5MUswdkpze1MkUlYsdjVUPz5BWWtUN1hf'@;
put 'QWt2dkdBb2l2ITJSc08jYjJ6cWVUUkxocCFJY1lQZ1tTWG9uXTE4TkdkPXVCO0RiOUohRyUrfmVyUmwwSTB4fUw+KlcoeFhrNGhffD9bNUYjeGNXbTE+JlArKH5eOiE8U088OiwuSSJhSVM4KCt7IWtCMU8qTnp1VWRVUTJCeF9LcldlJDs9ZXEheCI6QnUjbkt7ZzlsbE9gJmxGZntgeUcwSFhA'@;
put 'OCZJJWAxISYjeG1EIUxne1NMcjxYQyZzOXFeJSU0dnwrSnw3bzF2Y1UuQlk+OnJNSUMpa3RqZ2VvNEErNDw1SXVYRCRsK0JeYDQqcV08TGk+d01teXhaODJkKn1dYEUpO0x1WUhUSjFKa2RnV21zXkIvOyVVWHVkSUVnY1tJIiZKSyRNR1psWXBUdnp7T2AzNzBfZUZ+RFBsIywhbDpdOmkxT35y'@;
put 'NnJVRy4+dSV3ZHFePjxGaV90Ryk/YiZIcWR0OExsQk5aNkhfXUZLYko8T3xbSFNpazV7ajduPjZsKi5uK1ViMzZNK3YhZVBtQ2tWOlRjbEtlPSQ2ZEw+bl5kLmRCViRAQENrNWJlPENINlpLfm4jLyRmUnQ1Pks6cFV7KkBFZyZrVUwvZ0pCQ3t8LFU8X0Mxd1MyL3A4XW84ZDZNeHNHVkh3KkR9'@;
put 'Q1d+LGd8YzBPckUoP1ZRP3k1dVJobmo9e19SRVksfUpXfF9fV2I7YlFJWEN7aWVrVzJoLzwjRG9IbSw7MWJAKEUlQUpNMn54JTNiYz1tYVFgN0V9OSRKWk8wTXJfZkdEN1Bqejp1OSJfO3dmWjouKCQlJDFBNXZbWF9HclNFe1ZlajFJfiJnOnAubm16eUIwRG9mR3R3aEtHOT9qOH5jM2IqTV9K'@;
put 'NjlnKFhhdFhbSFgje31XfmdqT0c7YGJ6Ql00d180QUE3Zigod295M3phUlhUOns1SiR9a2NdWGJ3MGs9JSVMeEtQeXo6QHBPa0p7Z0dLSWRpejRNKkllQlJOO0RXOmwhZ3wvfVddXz0qfEBnWSpSX0ZVRTklI3okdCxbWGZ0Wnw4O3dLNHFbQCQ/KkBWZlhubTl5czxFR2l+TmV9clY8alhRMH5o'@;
put 'aFBZMm5GYHtiNk1eaGI/bUNsNnROZGZlXU9zRWx1KUtVMyJrS2J8YihtOiNUeDAiSWY1TGI0QFAofUUhSTJWfUFaZHpsX3s3WHU+ISQ4OU5WeXIqN3FGIzxiei5NIUhHUkN2KTRqM3dNMHdfN3NXVX5hOFJXL1hqIXBxIzZ+U0tOUnlFcDZBMkpSIUlNXWdaZUEiRk1PPUUsQiskXzU1OCIxNjlE'@;
put 'LDxVfGRAIWA1PnhIYyM0SEYhRVZkZ3V0Nkt5YitwKSJDMGl7aCZ1ezx6MVFbRSkjI2kmbU84dih5RTgzSjdOVzQ1b3UkYE5vaC5FKnU7NmJLW29GPFYpXTdsayZraiJpLnFUS286Mig5IjFJNWpadn42UWFGSGIwJnhlTitTQDB2WWw0dClmdXV1bjZFPy8wQ0lIaXlKdVUrUzZzMEBLelV7JVI4'@;
put 'Wkk0WSRyQzBVOl9LbSR1elcial17bG8ueXUlVUJlTnRmcm9qeG9VYzNrfUoxI152K05ifislU3R2KSlbVXorMXtMLCFxZmdPInJwenN9ZSEmSGlLMjMwKko0YnBQWEB0MSs5WzozZHdRN0pDKW8/YkRuMU91I3hocTo0bipveDJUOGYrW3NGQF9jIzZqTkpRZiMoN3s6eTpPT2Q4JVBkNVUuUjV7'@;
put 'bT1yKm4jRj92NTJEKThbUDZ4KXxvKlVLT3Y3ejJ9JXNYLFlQRlloYGBLZXxqQWQ+LyIuWmYhRjNLZXx0Jm9nfXJLRmJ5OGJ5bkE+NzEkeiMsSTBjSWt4Ijc/IzhAQy8rYiEjYW9mWn5ZaylGYy4jeHRRcjF7LnI6LFhEPDVtV21tV0I5aEpfWUl9OHxNV3lxaHZKNTd7VSg9SWNfc3NtWixnVTsp'@;
put 'dU0rbTZGcT9+PDR7YWU6KGBNKl19bFBLVDI7MnVKZlt9bF57cixlPj1IVE16ezV2Uns+ZE5qMC5RI3paOUglNWdwUFpmfERSeG5IYHRaV3FvLHAkKUZ9QEN1I0RLVjNkMDh3SSYodksvbShDd3tieEpzVmA8UH1RUWxUalFFQ2tUeSpuW19WJElJRUs6QC51I3k/WWlUeTd9dEk3dm11P0phdjRZ'@;
put 'WntDZUQ1KU04V1VuPFVKQiZUTDRPfFM5bTlQOlNTZUxPYlUhR1BhXTZPNVQvMFBKWSI2XXl1UGFFYjIjKnE8VXx4PXlyVGlXdHJYaFRwcEIiUTl+TiFxKG0qfGpMYDYmS31bNXlOeyVuSDJLYkU2fW1mJkVxPng6aEVjUWJUL0w3eDdxcFZOYDdseHFec1UiVzt5Ii5QRzpXRyUjKzk5IWJVYWsv'@;
put 'SnQ+PlFRRXpsNmN3Sit5eWE0Ui55UVdvbFd1WDMhVn1fXT8lPyNXdHxDen0pRTgsQ15aQllAIXoxMT1XJUgiei5UQWRCS2NVanBFJEVBZSUzdWppVkFWPSkoa091NFdiezphIUp3TjkuQCQoeEJTSDJhM1kwKjwvZyEkN1c2QU49PE5iUFt+Q2taaWc7a3Ile05KMDgvcylZWTFNXnEiKUMpbm03'@;
put 'PjdZaik9bnoifUc7fj5HejZWd1ZRVk1mUyRoOCF1YkQ3ZVQsVm9qZWpFdl04bzFGdjplMzAjSiswUUsqMGJ7Okt8V2xjVzoxZSs9c1RENWVRISJQZkNtUFg3NzxJMVBRN0xgd0dxdzRwKW5ZMV81SjtXYUA/ImEzJjhBRlJXQnVlIkE7VDUpTWBqcEkwQDRfZWVsZnFFbCliZGB8Sl11OmIme2M+'@;
put 'QkUpMmBoTkw+dUpZfSNnMFtHYmIpXj9naD12VCp+OHohL094VF1waW4sSjFfWXBPNURFYWZdOktUJl4sSm9CfCwyOCM8eD5DRTRTUDg3XU0yWEk2XXppV2tMP3lFak4sJUppSmNzZ2N1SkFQIld3KyZGeE4hNjs7XU54ZUh7dSF1VChHaSFCTlVdfFFXeW9vIT98O0B1dHYyajhaOWNkNXIuODFt'@;
put 'OkIrJWRkSSoke0dwKSIwc1drS1k5JCNmIXwucFB1S0IqUT1YYm9UYGx0U0pCXjNrY1hHRFp9QT0xU3gjYyNecUMqcU8qUEVmUTcvZzdyUSpva2RLMkVoc2QySEVhOkdGVDQuUzR+bjtGdHQoK1JNZ2tfOHBCKlgib2lzUmlTV0FbRGRuSyV2LjJNSDhEXjpEMVNlOCEvZ08wbE5EJUpXc3ljI0xz'@;
put 'bVoma0FbWE5BbXoyUzliZkdgOSEpZiZ0M197MiF6MlpjckN8PF0kPmJKXld+UVQ/JWA2TzhFWCMlenxPN2JfNClgdHdubVFzcWglZlEobWRnWWxCalBZSkpsQVhlQGJGYUZBOFMrJVNHLEhtYjhQQExZaSZnbVc3dmNYe218KWYvX00uW3M/ZG9aSXAzJTJqV2lVfDcxeGRGNW5Ua1docUhsOX1l'@;
put 'NSZOakdqNypHPzU/QFJ0aXtsR2wpd3sxQiouLHZBXVR4TnBKRzpJbHhkaENZMlUyJWZHIUtCWCVjaUdfQztiLG1DWjBLI1g1bi9COVNFWz06JllDRzVZZnpzbkIjbCZFTCspNWpiblokIU4vSih2TGJnTVNyRGpqNSgyKFZsQDFNPWVefF5YSWEmVil+eW9dZj1RPHssUlk/eHs+Y2ZaQUdhUWE/'@;
put 'RU1ZOzZ4UmRYZ29BcHldNVRCeyRMYlNyYWQ8Rl5mQEBwZzA7dEhZWmlbNSpofiZ4LnV1UntRLFF3dTtlK2EsS0FwVj0yez59b2Z8VTJVOVUuPUx8cG0oIW40cGJ+SG05NWxnPmg0aEFBVmdATWJLYCs8ZyRHI3QsZDREOkplQC9TaERGRUlWUjksciwubUc8elRQVUJFdXMjdClgaFhvTDBwKHgy'@;
put 'KUJsKSlPZm1LLjV8PVJad2ExaVJSQTlyVWF2VT8yaSNFfV5kPSpHWE49Plhkb1FbTi8hLGxxMDI2OCFVX2JYXk93WGNIXSxZVndlfn51bls/RGNEWGc7RkR5Rk88OjtQO0MyRntlWVgrREolUkR7PiNnM3ZjeHdOZDAuZkJWSjArUSJEO3ptUktZMmxhaVlgOSlRNF0oX0U2QyU/fjNqXkY/cERa'@;
put 'P2JVdEhhRkQuVzdnZUo2WS5gZmhTMlRPIl9sOS9pY3QzaVpaQkpPTG5tamNuUHJ4UHtiJVIsMExoSk81YEspTXFpRC4vVWNsd1Rodkk8XV0vU2UoQVAlZUpXfStkWjhAW3VRYj9iaGs0Ni9uZVI+WiheLEZVS1oyO2VaYjt+bHxMRl9qLHlMbm1oYyhTTko1Tzd6S3NzSV5vKzgoSDspZzRiJHBI'@;
put 'ciphamU9YnxIeSFuXzsuV2p+Tn1VNixhRl9KLjwiaFZjMmB1JSgzRTBkMzx5MzZxJTNadjkwJFRJaEAsQ0gjXUFxeStucndSNmI2KVRqdDhvXz4ocHIzOjQ5fmNGV15CfTIjX1t9V0NYI3Y1QHx+LldRX1FWTWN1L2M0MFhKeXxMWTlOPz0iLlhlbVY+KU83O0EyQXNqXmdpPyIuQnEsOVshTDMv'@;
put 'PlZzI11CKUk0STl0UDRlKHp0KVVbeUEoSVFnUTdhMlNQKExHT0s4VCt6clVPPGh8eH4xXTk9fFRGY2ZiTigidj5hXjd+OlJ7TzViXSQ+Pks/JWVZSyVDMmpAT0ZRcXtaeEV0VkJwK2MvKkBAdSUzJC5ZTmRJPDVGc0siVUhFR1dpd3FlYnV6NkV8dEZfLH4zK3A5dkh1fCgxUUltd2NNZGlNSUgq'@;
put 'TzFGI09DaVR+M2pHY3xpfGhrNHBzWjFeMCNCIWFZQF5vS20vfVNRaj1+fG90O3V6P2tJTCxlWCsjUDJwTiRNUWZnRVtrKjROcVo4Tm9rfm4sSEczRWQ7ZUxBZjtAbDRwU3VJMXosRDA6S11pIWY9MEUxNjouWCNWOixrdGVSZi9JN0d+ejdkQnJzclNGdjBGcSVnWTR4OixmMVY2KCwlNmpFbFpH'@;
put 'azMpcyRqezg3Umx0LHR7JmUlT1RgYzRlb0gmek5JTmpeSVU6LkR2c04oYy45cC5Hfi8/fTVjRl1NW3ROVTw1L2QmLzlkRUR5ckskKSUuREA3Q19XO2R7M3lFa3YmOjpjXkBBISU1KjQpVVtkTnxRRD5OfEV5UEJDPGIueHlrTCpvIyFfa3dKd011WWp2QGo4byN1UCNlSn5ddzNEdElKW2h5REo1'@;
put 'Q2IudjN1JFRbX3RIViJkOzZtKFc5e0J4aVt8QGVUXUtiKUguW1Z6XU04M1cuMnVUSn5ocylAIl9hVCg7ay9IJWFKKEtuXX4+QyxXWERQakNuTVczT09DU0BsUUkjInZTfjZMcjVMRVMxPTZiKm9iS3R+LGIqP25SQ0YwTjJyeGJzO2VOaFYzLlAyaVRqYkg1czB5THJYXU8kdjNuMVpOJUg/WFdv'@;
put 'diQ5P0ZOaUkqJCYqUHxJX3A1eCF5XVhwXzN6QkEjeSxUZWo/IiQiQyJgZUtKSkd9RzQhOk9pKEosa1trJkBPREwmVj1fXnF8NiRfSn0ramk1SFMmaE1FP2x3P01NJHZIM35MODkqZ1Q3Yzw0QyZZTVlya2ghXiVrfH40TTl0M056NFE/eHpvdypIV0BgP29yaCJeM0Y2SjB7KnsoeEAvVU99OnEk'@;
put 'SXc8fj0+KmVhamwsKCRARFlrIVhJa3k2bkRkOF4/Nz5fXmM5KSN+aH0/Okt1UCVkIXgqXTJHYXpsczRPPGQ0KDRteiRQWXhSVFh4QXE2RkVvd0lZPyNSTkdefVN8Mz1yOmkrWCwjSkh7e29jIWxZYDlqK3hDdEdoVXhueCkoNVRQNEVaey9rUk1XcWdpPWkzanckTU9jOzt8KVg3TkhnV2YkN0tV'@;
put 'V3JKT2U5djVyVmZ9UlAyRCNGIWg3eT8oZm5OX19lWlQ9b35KQnRoW2VPUS5Je283N1slWzVEVGZUS2Z0fnQ6KykpfjVwPkl4QE9pfkNgSjlvWS4sT0BlLGN5WXl+Y3VWaUxPNWpgWCpfVFYvcU8sR0ZiQ0MoK1pxUDlHYXc3KH4hXyxVOVtGOz92YlBFTiMoTWo+TTQlRUBiZm41dTNCcncxKGZ3'@;
put 'VGBHNl9KYFVrakJkV0Q5bUFwSm9VI2VvaiRqMjUrcWl8VjspaClzOXhdd0VLPyxFZWdhTSldP0U4Oi93cS9dYDhfdl5neD96Rj9Zel5mUSlMKjFNKXtgRTZXRVMyRiZzTUhAdDtffDR6Vn43eTVjYztIMH5OaX0seD9mJWo+ODA0PnFIaU9KJH1dUnpZbWBdUlo9eE9iXzM7eVdEL3J5WG90L0E9'@;
put 'UWZfN3ZQYCRTQk1UPX00Uj48W2ZHNVUpY1VHUHs6O193c0ZgQTJ0QHJxK0Q5IXk6UEIjRWg5Z3NsVm4vMUApfjtzRTBvQmxTQH1bbXQ1dGZGLC9fIyxMemRmU1ErPXxFWipYZEFmdFdyV3VDR3dMVHYwKjwxX2hMVVkkQTVraGgyVSNSJkhlMWxlRHBAQyErMHU4cFZlL3l+JGA4NFpoc3t2QXgh'@;
put 'RjE4azMmKkd1S2wseD4veSpPNl4uPyVMYDpmOHdWL0ghfWkiVG5dcVE/aVEpbmkyZSwkMUlTdFM2TGtab0NrWW9aWX5bM3p6RGtxTixpdm5JdDs7Q0RBbUR5ZjxANjRRcCMqcnhyT203Ny9pZFUkdj1wS2sqbWddKzg6XzIyQ0FfakZ1V1IvY0B0dVZ1Sy47fHp+e1M3RmNZNSUzfD90dl45XlVC'@;
put 'MFdBIVFSMyYuN311cnlyM05eUll9T0x4Iyl0aVdfSDciPiJlOFVjczlgcCF4VVJMazdCMlZONWsrIk5oRmBaPEBiQFUraVFXeyZEdGR6aUV1XT15cDhGJT9ERXd1KUgmTXlZTlspVWFedVRKe0Q6TGBVdV55fWg5UngwSERYfl5PWDZsPE9pWmV4T2RjbVloejBoOVtOcmpILFUhQ1Aud2BdQClH'@;
put 'b31FTjN+dFBkTTpUa3JJYXBgMGgrPmpXQztbVl9FSUcpOiY3U0FaRCx0MCwxdjBhIml3QGQiYj5xOXl7X14kZlElbDBdVEh1Mlk8M1tedC5wWk5xdGRbXyM0VmszZFhYbm89ZkhZQC41M2E4UjFxOVhlNklrRnZ9QExbcURSKzl3X2drIzs5UypdJXMoKSMxS295NXU3O0VUKzQsfGt8Sn5pbXop'@;
put 'RkdOTldxXX0vZFo1Oj1zbz1qTyZLa29AM0NucE1RXzssQ10rM3U7ISVLRmN4eFQmTGFEeVlzU15HZGdNaHxdKHBMNW5pJkFhKDRISzczWiR4W14mSC59VTtgVDdgOX41ZzQqRTJYKSpwSDlMQnB1SmtdRm5DNjxwN0h6dkltck9wPEwpLzFUT0BXKV07eTw+VkZ0dHt9SEtaJE0vZHEoXTNgNzlE'@;
put 'MzF7YGUmOm4rbkVibm1MaSNha3U/ck1yTkhLYURCMW8yOz8rKkg1Qj0oRl51Y3BKd2JYNlJQKjptaTx6IUBJYVYldEdIYlFpJl5MVSpkSV8lM0RxKntZOmN4Ml52dnp0N0whVH5vcG5AWCF6blpmeWwiMFtqVmRHYERVPE1ZU21rKzVaQ2JUQiRWelRDaTY8fW96aCJpL2Q8L2dZS14zQW8jT2FG'@;
put 'RkVPR2soWz9NYnYyS1BQSWQwfGFGJSEmSndHL3MlPWdiMjVwfm5QZklwI3A/KFQ5a0ZURWFsQjxUdVoiYURFJWExPCUqUEd5Xkc8LzIqKWJ6TTYiejllbyYsa2kjTWZ3b2wwI2hARixjfjdvd11uUlJHQUhudU04Q0M9L09GaXdpLy9QWD9UVmRTTWVBJVJZNWg9OFs1e21hfSoiZ1NNe0hPIVBj'@;
put 'fltZZHFsWC5+Y2BxM0k/LzBjcksjRmJxUkxxckc3aiFAW0N1N2hNJDosKHVYa0hVZzJPNGFpODt0K080UShAYVptVE1ZOXRjZTE9WFFsUD9UJUxiQjh4fnlLKXJbd2hOZkdpMD5abjZqNExDXyw+ZH5yPTxsdUtKU1h7RmV5VGkkdHppZjtmMS41UHFeOi9iYnNRUjFzbykxOEJWWThwbVN0WilE'@;
put 'OT5hYFFPWkZ0e31Od0R7TmZYPFZ7SW1pX2BNUCxlY1EyYStgLzEic0ZXbV51NEFYck9qQyZTImJUMm1EMCZMe1g3c0olUHw3YDkrR2xNJVVSfno3MXpuRitRUFRDW3FhQWJeUSJDRyQ1Uzg9LlJjbm9mRzVmVSZjLHV3ZE10ZGNDOkkuXmUuIlJJfCY6Mlh6OjVEakgzREdJODU5TVgxMiJBJT8k'@;
put 'MUIiI3o3ZEpYQz5bNWdRV2Y2S0godGYjNUphdzY3MDMzMlg7PDVQOD52dGgvQH5ZL0wwPFQzUE1BJVgsaEJ+cXIpKUYsS1U5ZkwxSWl9UCsqPUZsa0E5XSxxbjx0IXMwJitSdHkiTWJ0LjRTdUBHMHtwQDZtMmRaOTw1cyVIYlYzKClNeSZFai98fGVaNyY1a3s8NFp9VSlndzI8Y3lgb3hkIUBl'@;
put 'dDlRTm5dVkVXV2A9b1spN0IrJHUrX3pselQqLHMoWDBUdTI+NmNQNmNdJEIsOVlUWVVoYUQ+OGsrVUNSTUNfciVQY08jWXtPUHw1dlMmcUN3P2oofUBDfjJhcVQ3WGg7eSpXZHp4MlNgT0t8P11lSzZfQjVCYX1Rb2V3YiFMVyR1Mks3YVs2PyFtcVdDSC8mTFQ6TUJaJVE6bE1jMH4sK1RkP3Bk'@;
put 'PEFIXyxBbUk5Xm1pZWAjNiYkRlo7LCg/JD5KWDVQWE9RQ09Ldk0vZypmeX5GaE5tdnVtaWlsM3QpaCoxXiU/Klp5WD9wZ3lWW2pZcUkvYC5HWHt1IjR8QkIoIz9JeU10PyteJE98RHY5KkRPLiZCb1U8PkdPLjJzMDx2fEJYUmglKStRPG9jfEg2aFtaM3Q6fU5KPnhPdl9rJWc9ekQ2PWJBR09p'@;
put 'NW5PdS5kNW9uR0VLISY+UFN0bmshWm9YRj1CMFclTXwlWkxNa0RAP19tPEVdNWpoNFo6dmdTdE5uVDh6QH5jNHVpK3EhIz0xUnJwfTJHVHpHSSIkX343fWRLTClLWEcidipZa1Jkc31CSTBSIm4ue1h3I21mcENtN2QqO3QwSk9oVSxiaEhfUWVJKUNBQWcsIWY9NnpzaTAwZUB7bD45fDkid3l7'@;
put 'WH1bPDpkR29VeilkLko1VCxhb3pxe2F0fixxQF19ZHpbcXY7WkglaFIpR0BNKG4vVHJrNFdOQ3lvYzhffSZZfV5SbTEwMkcmNSsxdE0qKGB2bVIzcmZtNkpCS1V4OyludCFKKGNpXkFKVXNVNSpNMDlLMXh8bU1ZK0dSJFVIZGFdeEBhIytLInNpIUwreX5JT1I0M3V4Jkt6RHBVRFBOZWA5TTlU'@;
put 'bC5wLHt6YkA7MEhZWVJJVG9xUGdFTHcwNGlFbDtoM0coVkRPY0wjSkE/enJlUDx2aEsxUG5dL2RgdnI6Ui9vaC45IUd+JVp1LjZTTTpRMGVbZnJfQDd5SChoQHA5d0FTfDQqbSVXTGwld2l6eFZbJDdPZDR7MVEvJGVUeEwpejpgW0Z8IlJvXmBuN1dedTVPRC9uPHpZfDx9YmY9ekQmbDVhITgv'@;
put 'XlZXQ2p4L3gsTFhCcH5rOGhHNzZxOkNUN2t3N1lhI1IpbihTbzQ4S2tVWXkmTjh2Qis5YGJNJThzRH1pKkxLcFh8WTtTdC5XWHQ9MCI/PXUsVkVoPSs9MD1dIisiRTAwRSIwMEZBITF5eyY/ZWhvd25XZS5lVk4hRiNpbyhTfmR5ImFiT11PSXJWJnZbPDF4PkEjSShpWHIvODRWQD5WN0AwaiVU'@;
put 'JVRWVUhsck04TFdMR0BjWVAzN1U+ZCVBe281OzI3Ozp2ajNKIUxiaGJgSXwmTE4sVjZHPEQzW3hfLjZVSi8hW0laRS5WPlVmYWtGaWwoQXE5TSJXV1hCKyo1Z3MoTHpqXnoueHZWInhvRDUvX3FTJFJ6I3oxZypELFI4KmhTN0VKaltdTnYzZWNsdkw9Xn5MLnBGZClrTi5NaW9wKX4mWTFHTjcl'@;
put 'Uzt8QjF0fUhEJlI5Li44JEFaaXBWPEl6YyxDdTxgcTlzdEVqW2BsMTFrcDR3ZkFwaFFDUCwsR0BoRUo2Ym9YKyR0TW5pXiM1MX1PMDhKPXFgX2hecXJ6S3w+dTIkN0J8ekhxdlJgNS5qSzZCRWEsZ3A/b2FGJExzTFBqa20iYCZNRmtscGZ3NCZWMTt7cFczamo6d05pQlg/TEZMMUdpIyxOWkVQ'@;
put 'YF5kcXlaU2lyKT9YcFBoTVNIXi9DOmwhKSF1ZGcrdT1PL1V7Z0EjYEk1Qjp1RnZUZkdIZDlaWExXa3YiVDA9cWluNVVqKldhPzY5SEU2aChBMmYwMWpiL1pNSVlzL3luMX15M1BeRm9DZ1o+YTQ8MzJZIjBxKk9DeH51ZzokcWN+OTk0OncpdklqQmhTUFIyPyFOY0UyZ1E5IXtMfEhVYjErUS5k'@;
put 'YzJgbUJdQWN9d1k5PGQoWG1dfklYOW1KMXROcXp8KVczYjVwMkBiUC9mW0I7QmpyZkJWVzoyZjx1VWF2RkteKTNeZDgmdnZ5XUA6WWtMb2RkeiopNTRudXEiWGZfbiMwelY2K20xR2R8T1gjb3lYdlBhQD1VWFQrOVB7cXR+NjMkSE0pWDJlZT8oYktqWzhWMls6dFAyPEYkRGs5aStsJTJkQy4z'@;
put 'YEtpN0lTXzM0NWE/X09TVjFzZ0ZSNVFrZVk6ODdWamF+PlNTUjVJOEA7b29SRnRfS3dpSypGKSRuY3dPJFpzUkN+Qik0UkRsQWRnO1ozWUsjXkZpZ3NvZGNyIzE7UD5naDdjWTZrTUdMTExxRiZqPTgjMnx6SklAR1okUyYhUEJoSWtSIjU6dDg9P0VsRlZiN3YoZTslJEk9MT5NVjwySG9Jfjco'@;
put 'c3Y2K3BWMV5yYkx6MyFpI0U9ZG1hVkBCO35HaTg8V3RRJncpVDY+fU0uUER4LzVWZUg5XnVOdzNwIzo/LzQ2REJ+P2ZmJF5ANngzSCZBKSVYeVouSndoJWkvSTZEYkRrLDtzMjJwWU5iP3oiV11jeltkUFJ7VX1kc1gmSCg5X1prMG8/dD08NGlwdkFxSFJubXA8MGJfMlpIemcqJHlvbjtDb1tQ'@;
put 'S3lBOiVGWVBGdD8yJFVPd3lRLmwiVTUuMmkwKT0hNVM3YFdRME06LCVpTUN4dXlDIkEhcl9hIn5yXXNfPG1PPjNCQiVpZUdMSzYoSCwjWlFEPTtJbUx8UTlDWklLYmQwWTlSSGhZXiwkIU8sZXxDb3A0Tm9KaWNGJl9jJC9obm99WHZieD85ZlRiW28ydTxgcW1eTWYoZWE4KWddZyxQZ0E4VkRk'@;
put 'VCksKSRkZ1B1bDlgZF96dDwudGJBVkIoNiQjPnQ/T3daKzZpTTp7N1MkcThIQm5ORHt0N2NKUHtQUlBZTnUzdH1MUG1HUHNWU0N+KiN3LCEwZThFIXZCOm0pT3dEJUR0VHhbaDUrPFlmR19bb0FaYFl8UzljPSt2UH0zWDRUb28qOTRya2x9UHtkQl45ZUw0W3pWMTBaWXIjb2lPZ184SjF5MWZ6'@;
put 'OFg/dzMpaUlfS0smSX0wW11BVilgYFg+Q0VQQ1J7S0JGeyY2dyFnfmcmcFBUTnUselJCVzQ0PFteYEZHXytMeGF0MnhNQDN9I2cuPjY3eTdjd1tmQ1BfcjQvQj5lUnkxN2VpK3pJP2BBZ2NDKERHe0NAdTMpInFUa0xLOVBKfDdneDRIWjwqQ2s4bFB3QVlvdjpeMGtPNmRkX3IsTTxZL0d8IVtf'@;
put 'PXlzcWFnPlR5THN4P1gyXmp8al9La0UrOzZfeE0oUisydWlrJnAjNFh+NDBaNDtUR1RxdCR8WmczRmlJcXBJcjx7bnx2TVhRZCRvZS9XM1RyN1YhQHhsZVdLeVtabX4/PjQqIl9QTDl4cjgsMG1XPDhwS1RgcFl7OVpCa1FrQkksQCl7aWlyZzgkeiRHcFIjJT58UjBeaVZiRWpPWzBlWmNTTn5d'@;
put 'IX4ob3pETXshaDg7cy88RnhfbnpGRHJjMFBwT1d3X0MvQkU+djJPNlpId2M7RkNkWD1KWmt4Ll9VXVhbaUhASzIrXW0hcHs2WWQ6aC5SLDRhPilbc1swJWY5UXVlZlRLN1cwTllxVkMlRm9fSVBncDV2O2IiMGNKcUpnXjFDKzBpTGldQ15IblF4M3MhJS4sRiROaThgQnY5IS43cVNONH51e2Ml'@;
put 'IlM2PkRNUW5tbiZWXXZlT0sjWmh+PjVmS3U9XiNrOEomMX1VXmpBWmUmbHlIdlhFOTFhQlR5TiFhKHN3QFl2aVd2Y2U3PVo3XXQ+K3Z3TGdEWWFURENsMG4oN30oXlYzO0B8dVZXQkU2SUI0IyV0Z2thayJ1Pn4xNCE1TCJZWFMwezxtL1hxKCZPfXpITH5gWSViPCFxTHQ8TDV0YFVCYWhaQ1E2'@;
put 'bGNgY3BoJC4sekRBQjsuOnhUVFIrfj0hW3dBWi5LSWMvTWNsQ1h6dkFBZDNVTksvZDNRcFFiRkwmNCVpTUxnOSQ8UWVoUzxFMGYheGFdM1pTR0VkZkdgMkZ9SlhwYSl8YD17MEkqXTolZ3t7WVU5akFFVF95JHZ9UFdYSTwzLC8qdyE2bGlEMWt0LytsaWFAOkM5LnJNKEVScGxVLEx1VCx0fTx+'@;
put 'UDFfNi81P2J8KlsyeCNSTFFoMFsvV3UwKy99Vy4sZ0swU0w6Xj44NG5jL2U1U3VEITlHaDlibXlSREdrV0pYU01zd29jZjZzaWVBSEBjVSJrOzFGM09VSlQqOmpKQHQ7Uz40TGpaWDBOfk9QZXxCV2t9Wlt7SjkzKTArUTZdR2dTXjMsUHFVR0hhSGdgeEpofkNGI1c0eC40c087JVRoIz1uWEwo'@;
put 'cyNHcllbWChGSCtITHdiXUUwVFUsbk1OPyshOTZARDwiTUdAflJwPihfTU9tSTJsemF5R3c3P3NKKTtIVEolSXVLNSpbUWtISEciVUJLRi9TMkt5Jnh+PyFociFgZyN5TSNzYmhmbm1JJW1yKlR5PjlQVSljQSU+cntbZHpgclgmSUZ+VEFsLEJdLld+bVtlJVBgPG0zTjNqdlg5PDVBfDVyR1Br'@;
put 'YCFETXZALjtpW144S297e31WIzJ2fVNEeWVAI1pHOE5ZJmlrXzt3ZTxtKTN4ZW1XIy8jJjUkYTtDW3h3ODFhNmBsK2x5dDxpImxINCt8Ojs9MktEd3goTS5deiI0ckVOWiJtc1leUmJ5IUxJNSZ0YnpOYT58e3MsQWJfOn0mLzBfNCVpcVtFd0ZWJlZVSWdlbExaeW5WZX1ieEdRUntnaUhsZkpY'@;
put 'dDxBLEROJHNVNHdqbGtwaHNJY0k4STI8RjM6TSJrPy58VSg2TXwlVF49NT0yRnx7OjpRUVUyW1dqQkpHUD8qNVRlWElCTUA9Rit9VjVMckhxLEZYPG9PN0tZSlpTNChscCU5c1hhM0w1ejgwTzorRTpPXkBVYlBiVmlAfEp1fEVBOXRLWjZESG43Oy9HMVtJMks/dFE2dnFeMDhHQVk8Tlcsdilo'@;
put 'fTUlOSskNihlME52YzFYVHlReUJzWlRnVnM8TT9AcmR9NUxtJGR7OndrcG4xQmRoczZNc15WfWNYbCNXKnx5OVB1L19tVURHKmkjWDIhblc5QyZXLF9aZGtFeCt7P0pXZm1fO0t0eXY7cXM/YEtOOlNWb29MOCQldF5obzpXSjl6TD9fZXU8KGpIWnQyUmw6aT9oT31iJDRsJVRxfXUlM0NWfiFe'@;
put 'RT5KPnVlK0crO1QkcmMlXmMrUzx2LndmMm9eKm14YG9ifD58QikkMjtOWzN5TXFwKUUoLFdgRjE1VC5xInlqdXlHNyFpXiQ+YHxpOUVrJHpSST9hdWdPaVNQemo3TFdUQk86aSlFPnJWQERrR2ttT1hvNWk9S2NpMGxeb0pwKGoqTV1hJFtIX3o1ejhgRi5GQGhoQEQ2TnBJVnt6VHA5RSl6dFBq'@;
put 'QzR9c1F7UFI9bnFsRWxMSnBDcjxFWik3Q304ZnhXIUhXKkReRTw3NltlOVAmWTooM157eT9GU3kiPjpLVCFuT2ZSZTZfWTcra0pWUj5uVT1DOmwkTlNMb05zcWdRRlM1eG11eTNbJT0qKj1kLmFTZzZ4XTVKbnpnfSJWe28vTGFeSG1CdFkuPD8jIiQrIjQxPlgrbEgkNHRkS1JDa1VgajwqflIp'@;
put 'QkN5cV4kYV40RmNvfVVSeldQN29bQ0hTKTR0KWE8MSE8ZDR3e2doIlovJl48W3tnUVtlK14kVHpkZV59XXtOVWxKRj17QnFaUkdeRjZCM2t9S2c4NzdVTWlQcFN2WzZpbHJwPkA9KV5qRmBbcixmdzhxLDpsMDAidTljI01sOXpTXV1sWyhoa2VBXTVIcyNBIUNkUmEzNS5ncGdGTH1mYE1AWD08'@;
put 'W2wlVyVsfnZeZnNYQjwubXw6PHNQNExRXSw3bTspQyE9fk5GUyl6Ki98KlRDIWteXUdRJSVtOiVHaENid1szVm19Tjl2TkR+SCJeR2Z9RnYzZVhydENlI3d5P2ZpRSQpdEUxQE9BbjFUZklELFlNKmwhKmY4JiRoMmw9XiIuNE82Ti5lLi9EcGB6RGIjQGouel5TPl0pQyNKMj86d08pdF99VVhk'@;
put 'JTFIZHFFLDxDVSU/UH4kNC8rZGhiITEjJntkRT97UWwhUSxeTUJ6ZnJGfnVkeTs2RUJSa1NZQFJjSjI5MXI1JkMkTlh+Y01pU2l4UDN0My5QVCt5XWg5TCJ3M352NyRtPT5sO1tvYXpMSj81VzlAQ2syPUJWPl1pKjh1WzRvQkwxN3VRWEtqUzk2cytxVUNidDBDKDppTUdlfjtdYUpGYjohOUF0'@;
put 'MCpPVyRYR0oucE9YUzpaWTZ4Ln5kZyJkUVJ5cT1eUCtCVj5RfitVLlhqbyhbYG8kRkdnWmxAL19+UlZBU1o6RSZOXWV+Tm59bkJXb3t8bFpsRGlrRXxORj5eWkxMQnRaRD93JjYiSFZvQ15yTnRTbzxfQ0xROGB9fWdnbmY0b3MvQ1hlSFgsKCp2X3MlMntAfjQ5KjwuKEVhIj1qJC4mOElYPH40'@;
put 'WS9PNVdeOHlTKE56eyRic3YyRjZtamNMeSV1YHxjKWp6bG0kc1t6MChjQU40UWVoemNLfGZHKl9hW0A4R2hyPW4qMG0xP3hXazljQkkiTD1UPmg4czZ4RT5oKVNKbyxiJW1IQGVxXnFDKlpBe10mU1I3aStqOm96e1RLQWZYXUd1OD08WT56a2ZiU0BVQzZgb3w0YzdXPERSODd7TVtJSlQzIX1l'@;
put 'dEw4LmZxQy9rQjhjdiRUSyR0K35xc1RPJWdyflNpbnw4Zz5GYkh1QngkeVtXRVJNdGtZakRWYSYkcCJRLzFMJmtwcUJBfGJpPE8ra2txfVhrRDx1RHFXdTBAd0pOWSVYfmlRZjQ4MW9tUiMoJDFUfiZ+K1BAQlRXRShXZXR7VV1DSVMxZyIqcX1OfCRMejo8WVBoX0REI3tqbTBkZEJeNzIxaD9D'@;
put 'TmRPTXtjVU1zOlYoIT1GMDVpTzRfYT0uZCxmV34sKXo/emtyTUtKVTY1a2VhX11yZT58VnAzPzNNQD88cUtORjRASiY3NG48aGVFbV1DUXRPYzk7LlRtKTchRmwxM35zUlViNio1bkttbTFAQi94ZVNrRzUxVnhhNzAsUTE1WCNjPmEyL3xRci5kdE8leCE9JGQyT3EqOGpUKm5AS0wkYmdqVV5q'@;
put 'WiIzU3UhVjRSJlE5c2pVNF54dH5lJGQsYWM3TXh7JC5Acng6YVtFTjExMXAwamRAdD5YU0IqNWZYMWdtcSsvTnM3SnZdKzdjal86KCJXNCxVfSEicjleS3xkYGZGczl1TVBnL3dyc15lck1HI3R8bzUqc31QQDRKZFhWWHZibCNYKk8iVlI3flF9c2JtbXU/YTM/NjNrbEJHcz08SThfXjpOXldi'@;
put 'bmZdcFFAdSV9KWtIK0xlfkFwQjRKSUAlYiZvbXEmb0s0akdfaDsvemdTWSZGcSRrKTNzaUlmVXwqWGtFRDx8cXNMWnRCb2FyfCtbPCUicV41WHJjR21oIyhDbnFuNztFP3ROaFlOdEp9L1BNNEg3Pi57YF0kdiVKK2tsW11hVik6VGhMQnIzfTU1WlteMG1YJjd4dllCZD1TNWNKbn1vVExjfEIu'@;
put 'eFB+VWJMP0drd1U7bVtRJEZVfC99PixaJGxgeWdJNUQvSyYlYU5OdEhvZXdzKldiSyZQYG16R3xTaVUiND9wRW8hfHZrdyo6RiUsOTJOdXBvfH5MYzwyPjwiMDNEcUhsRTV4MW4jZD1HcDUiNTVtJT5KS3d8cyFxNn5OezRCe2BzKSRRaVJnSCR6cFljZiR4VHxvUG9zMis1eDpGTE9GamQ5ZWd3'@;
put 'VitjVERxPFk2T11tRm48cU8sfEFZfDt3OlRjI2k4di82SnJUPiNPSyFaZSZiYzFsQT44OzhbQ3BgPjRtYmJZcTNaNXBDVC5dZig7cG1iLDFEfT0mRCtLfTtWfnszUiYwSUN1XndTbSV0fiR7Tkh+XzhrNjYiK1A6Y2Q8Om1ePCl1TXZmbUtMYWRrRnQraUh0W2gzRS5udl1VLCxyTjkqeDhZajZr'@;
put 'dFM5QHt6OW4jdzNXQztKSDdlVlVQVmhHKWpgaD9zbjplRGs/SEptSj5XXT92Zlk8ZzNJNU18NDtvVVpoa2N7JkUmPVJlP2Y3IkRSV2Ukb0ZPaHE3Z1l1UTo8KnxERHlKUmpDVCllKSxKLy5qYF8rb0xAYH5MLnh9cXA8SD8udDg+fmple01VUCUxKH5rNF5dIyg/QiJkOmtMVC5lXWw+SFcyIUlB'@;
put 'JjVEWj4sY2FxTzJ0WU9scnZ1PF9oZC5EUnMxOHsqUDBhVDAzLnFBUzhVQTM7KHJoMloxLnZXczYmYFJzRX1zTSxiOChqd244ck1dZCFMVV5gQl5NbVoxailVWiw6JmUrQHRqPD1XJV5kRD1GV2VjfjA1Ok58d218Wz9Qe1F3eG4qYSF6XWBQb0FzaVRZWnx2d0RiWS9MfkBJdnBVMjclVGFofShJ'@;
put 'PEJjeEp9XmpdLEF7N0UvZHhDbGAsek1yeDxAazFzLE1oVm12Nl0peGNjOHg/fEJzTHBYWVZ8ZSk7MnVKLjhVSnE0aFo8bCxxfGo+Xkk0OSZLPllnbE5GLyovMXIha254alhYbmZLMTVkY11AdClxInt7InhYVHVdfFEhfkRNWFc/Zmw4Vn1RaTd6Z05ZaGtWbzlxZHd8N3xUYGY2QS4sRXJ+X0R4'@;
put 'ZE5FVUB1YkIqTno2UUoudXFyU3VYb3Y6aSgpb3lsN2Rhb0lZIUNjTnFZL0dMYGxCfkklX1YwODxYbSEsPSklOFFTVj83O10vfjw0eD1qZFBIMTAlUn1wYngjRXAvUkBxX1t+PHZuVEZ6MHQoVHBbRiJhUkx9cUthK3g+e2EpSFo8emtHPVE2TW0vcHRNRjNTQkQ/bUpNKE56dmBecFFVI1BjbltC'@;
put 'O15lb0NPdD1TY2V7aiQsVEtHXXIpRSpIdk05WDpzP0l1TSUoQEI2KUpAVGVjIiZZakcmdTwxX05iRmt2UUA2MzxNL2IzTE08aHxIMjNvJkxSbjNWTjZ3azc7QmtdWG9yW3dDXnIlbjg9d1pvaypmUm5WIyRaUUBYdGBIX0twQEl9QFFdQ2laanZVXV95SWhNelhUPVd0c3F0RTZjbDM8ci5oOEQm'@;
put 'U3t6Y2ZiMG9JMEJ5NHZAcjdeQishKCosKWhibDJrZTZkUlZ+bjo8bXd0Ols8dkVBcGg1fVJndkdgfSolIj9jWjE+WTNNLjt2RHJ+UmcoPH0vZXxxeHhMVkB3QShpPE1XWyI6PVRIWERlL2I0Lzk0OXR4TjddITRlUzFhKGhKQjNUTmZZbDpgYHh4JDpJNm14QUxJSH5FaCFVdSpGW2txN1I9JHlR'@;
put 'KmxSdWdzNzUuPF9RWF17RHxlT0JyKG1bQGd7dXYzVD5JPSxKdTZtSXVhSj56MFNmRUEoIUpKLHEpO0doanMvQixHeFR4JEpOcyN8VWEoaUkmSTFGRXI9TW5CIVJna3FlNHRpQ2J+V2tkZ3lyci5+TzI3eSk/ajFDZ3BwL1E9VSEkQilbWEVLcChzMHZ7bih8Qzk7JSRXIys7SG9rYj4hdCZpYl1I'@;
put 'ajBbeFsvI09NOjtZU0U8KyZ1TkhRNClnJiE1d0hJb3lBej5OU2cqfTY9I15aZ1poY1h4Uz86eiFHRmJiXi48VywqTk91XlsiN0JbVTlgezdAZ34/aE1jYDpPTnowNlo3MEtaLEpvMyYlcyo6UHoxej1FODp+YkhdPTt2cGcke1J3OF97U3ZaPzRpVEZYWDk/a1FPe0ZSNGNjWksiZXdFaXVTRGZ7'@;
put 'eyxSVyUlRUV2L1dsQV1vbiFyaXwpOFdCIVtJcy8kX2YmbDpXVUp8cFI0JD5RWmFoaWZWXklYbFU4JDVnZzYrTnZRaVghWD9yUE9hTnlbTmt3MDh3MHJGTCpBYSlqZ24xSTNgV0E8SVNRPFp6SEFpOUUmTD1FX2hENiMwLCp3YTUsRHJiMDQjZHorb1pPPypbajc3SlM/dmByVmhBS2VvOyZFVHdb'@;
put 'L0J0a1FfSTg/djsyLC9BLzIsKVAjOk5NYF9sPHNUWGt9OFNJVE0pZEM8eTs6KG1rVm05fVNuIixaOlY0QChQQz5APSNaTSY0PkxRazdRJT0qK3JQW347Lz1MS2pxKmk3P1doImo4bCl5VExfeUx6PW8pQnBHT15CMVgwRDR9Zkk0XV8qZ150SGkqXWQ/Q2tXJVh2cX5ZK3hbaklOJFAzMH09Z3Na'@;
put 'OHw9KmtTWXllfkksTHVjUX15YTFVJVNHQkpIVGpRam1EOH5peiFpJk1Ud2RAU0prZzFaa3s0ViR2cDt8VCxZaEklaSYzSFQxeCp6ZCN2MkNEJDRnaWdgaSNITEBxSFdWdEtsSWpSfCwxRlhBcyVMUTcsJmMxd1c3dXZgJFYibi4wSCpbZVt+ZUpwUltyIktuajVFVSpzNkReRUdXRE1OTUI7TjFl'@;
put 'JDUlfUY0QF5pXXpfM3FBXm9DJFFsJUw8VUk8dzJXRCQ0ZFhwNkMqMzU5eTBTLlF5e1UiRlJwaiJHTUtxVFdfKkR1Tl83OVNOWl9BXlloLHFWTEh2XkVial5uJVZfWTs4OD1zcXZBOSQpNV8rbmluRzk7c14mOUhFYHgyLERkW0cuKDJjV2AyMlBiWkRjfVBdfU1He3BOMlhkZDpGUDFTQndbanw6'@;
put 'cndzQlg2OiojSUsmXy83IXZTIXQ8S21pIyRLOTc/VDVTYDNpYExGfj0kZlt7ejxVdzB8SEF8TSRLWlgqS2REVF1nXmIjamt+QlNjTnA6RCJaTWY4JnRQVWBJKSheTTd9Nk5xaDokfCE3O1lNO2g5XkIqOlNrdmFjV2Y0XjRAOTVtTHliSz9+dVNeMjF7O35dOXpxQnxYUHx+XzJrcUhBYD4hR3RF'@;
put 'TGpXL1ckTkN6YUM9ITpqV29oIWdrPlsxbjNXWVJQd1NbSkVdKkshKColNjYyNWBELEJHbmcmXSRMI2IhWFRxNVYlaUpLMlhsRVk6RjFNMU5fcnFpdllCSnZZIm5jTUN2LkA9KmQ9Q3lsREF3VChue35AP2pJMFh0Szo6PmVwb291VzhnXzQifmFHc2UvYzklK1pzRz4vVihbbF8zSm9yTVV3cyhG'@;
put 'Uk51U1MxKTQ+ZmFYbHR+fFNJOVpxX1hpTCE6SDQ1fF1rUkM6STZeUX13YFFoSUh5e2d9ekZUUiRgMU9kP0YkbjRiNThranN1JTZGXl47KEtYfU02cmZ6cFc7dHdEdkw4bTdldFN1VnJuc14kMlVSa31dYSVrdi9sbVVQdjc+cCFzQWAoJHVlM0YmOVEseHkqXjJJSmcyemBEKGtCSXVbXTlCTFVN'@;
put 'T35RTjl8TUZBLmQ+Uz4sQ2lAclZyWDhLbEI2MFF3YnZYOWpYWSMuI0VuUE9BOlQkQ0lsODNHKyFHdEhuTENhY2F4bVNYQ3VGYVBvdz9ZYFReJVclPFttbmJeIXBedjx4bWw2OCoueiFxPCRYJkI/NDxKZWQobWIzNnN8LDE2Q2xKS31YailyQG8oWn04KD0ieW9NWXdNQGNoS0t7LEhMRG4uREAp'@;
put 'V215MmtLTW9vYXN3U3JRJiR0QFMsMSwhIlUpamI6Y2c3QUkiZWU6I0w7ZiZHK1hUV0FNOHheQntsPVhKKWsuL2UjKTtYQCZsZE9oNT1hNVIlZ3h1Ky8la341Ull6M2c2MGBAYVhpRjJuKFk3eERHaEcsRWJzOCY5KFgoQz9scXEqREY0eDczT2dJUyZTKlM2PDV5RUspbz1YIUthNUt6LFBoTm5J'@;
put 'K0NSRS9zQGAucHBzdHpuJXtFUTwsYThSPzMlRCtvUkxSQzQmVk1tc3FKVT1uRHE8QW02T2NjfnFTJmtHfXVAdU92SHJ5WWMvem0yRl5yej1sKjwrTHA9PTpwOCgmclA6OFRZeT5bZUY+dkQuN3pdJC9rQDRlTHN9WEgzTitLalIiOmg9K04sOTomNGJbQldYV35MXVdbW35RJl9sRVh3KDRoWlJ9'@;
put 'SV4mZFY+QDJwfi9idDpwfFo6SnJraj9vMDhja1EsMVpOSlNLVmtfRSIsUnE7bkNYRi46bl9nayp0OS9rWS5eKFtyMm9TMCZSYyo1ZDVkUSZzKW44Jjs+aCVyN2h6L11WbylwS0lTKl8jVmckSj40SnU0XiZ9Z3UlM3NZU2l0e08rRCpzI1RFUFEjdHB2JFR6eXRpaTxPYFpoXSlrW2FTOW9hblt7'@;
put 'RTZ4VypsXXw2aGdxNGtHW0tQZ2xTOTAzY2Y3PHFFUzIxSE1jUmpTZ1Mvb3RHaG4lbTdWLGxvV1YpQTQvNzl3WyVKVyhCY106Q01wTHBLVFNZTkErUVlKY1VaTThwV2A7cX5rcWQiS2gmc196RHNzY3NrQTt3b1B+SFU9XStVWnlJJFtbRE56Zjxrck5pbVBpUWwyVyQ7cEJMI0RHKHBdRilmUig+'@;
put 'blYyP01JL3N5IXZMPmNEK3RZel9wLjZMKkgyVDVhI081S1N3bEwiTjlMRCU7ZlUydFVOPTJSfCEvdDBENSFbaWQ6JCohLFdEXjpmU0ZWVlBhWylzXUFtemFkLjNlR2t0aWR4JDReJWtkU3pgRl0sfm17fEJ1MSRMe31GQlhxcTUwWE9rc1o+QnA8cmdhekpVUSNET0VieEwzVUtNaztWUU5KV2lm'@;
put 'WD1KISxkRGsvSD9mPVIxOWNMTXt7eHZQYStONnU7Uk8vS30ycVpzayt3b1M2RCUlIjhWUCxgZjxCM0FmaERxVU0jPz14W2phRUorY3dKIkJuPmtYcnImVXhEJCVFKUFgNnBQZzM8bFtWSHVyVD41SEl+QiRdUnUmJXVWTEl0Iz8pb31oKj4zIUlnQXNFai8uMFlKb2QmIWAhW2FxPF9sNiNTTVFH'@;
put 'SHFNMTAxT2VfODB5flJxRiQ6akBGZV5RUko3SChHJm4wXnVGN1pOLmR2bCt0QGo3YyFzOHpOKSVJZ1dsNFdjZSNwTlZmZCVsVXBhaWJpblteSi9yWjl5dmhjSDMoVkUub2V1MyoufWkqXXtyZDg6LGdTRGIlPCtdSVpkNmw4bzElK3xbR0VWLlclb3d1cDN9Lj5DUjQmNktRVT1XMS9aV0pmeV5t'@;
put 'MH0lSE0qLyppaywhSHhVJCI2LzZzSVBRTTolU08lVlRuWEA9MzhAaDMrVS5Od1gsZjElbk9PbVMxcyI7aTsuYjUhJW1WZ0dybW5uUiNhOC4/XnQwZCg9Zy89Py5yeFRISlB1WjF5eVQmXiZCTEt4TVZFWn1ua1NpYUEzX3paYykyfkIrVnBOfClSU29yX1BbVWNTQ091QHIkMTI1eWglZ29LLykm'@;
put 'Om1nKyZPSFdiNDlza0cmcyQ7UGxMXXxiczVPOX5WIm1LdFlySmlmd2VQcDZpb25rTEUuejdRVChFTWYscTI0VWN9bHl8QU1XcyU3IT53ezhKeU1zKmwzXnlqa2ZNbGo4XyspdUBgXWJ+OHRAUD9LeVh0MDprMk5MWThPaGdJNT5PPVlDJThNfShMe1IzZFtUNCo+InxsaVVhQHhzd0cpYHMrIS97'@;
put 'QUh2MDM/I0Z5d21VV2VycyI3W3Jjcm9ge2d9Uz41XnRPUUw/eXUqSHNlfHhgI2tTTkMxOEVUXnxyNWZYbWx+Y25He3YwNC4jQl1EOn1MKzFPLiV6Ok9Md2AwT3d4eG4zPygwOTpRcCV7VGBiLG1pVEllVnZzKXhxTWc8fH06TmpjX1dydWpjfWFGbFZvR1dBMU43Q0hhKG51P2s8SGpiTllXLGhk'@;
put 'RVJgQy4zJn5GVjRES3EqY0NiMTdwPV5BMC4/R0hfMSJBVHFRXkYiJkxTIzovan5WbDZxRShac3EvcklnPG09bDRAd1VzeXhmVURQXlclV0Nod35+dzY8VGcpVW43OSw2OHRbOyNKezVpVTRwUGBBez9De0xTRk9YKzMhMCJEJH06SEpuTjRQJXFWTy9yP1c3fUFeTj1eXVN3b141UHlMcW9UMzJX'@;
put 'Omx4TWRDLGpuQF8wWD5Ke1puUms0R3xmIWFJXU8+ZjZDQ317dXUxWHxaRHxAUiRfWUBzcChvdHJNS1B0UkwoYnRYflVAJEl3MkdqTlIxNzNuQ3ouXzduSmBpYyp1ZD5DbT8uRl0hLnYjWUVnUSR9VkZyaEMiYSUzOiY+IXNYYiZGX2ZuM2B9eTZJWSUkKGxfQnd6ZSReVF0ke25nJVYkJG18dmN+'@;
put 'NikyYHZZRG9Ge1EuU08/MV95KyVtNF5ePCUzOGMiZVYuKGMyYEBLdVtdfHwmTWpiJUJ9bTFbZCZHWDFbO01HMlRiOWJdZzgxXyRaYTd4aXNjOnNXS0c8djJ5Q0tDPllVfUwvamhpTyFJKkM4LGlkaXEjUGF9W2tYMUhCb0Q+KTRUc2lDZDkldSE0b1pWenZ6byFCSWdrWHU9X0BCSz9kQ1FfLiV8'@;
put 'WG44Z2B4dk4zWjZfVHVQOys0QCJsKXhRfiRVKXxnfDdoPFcxNjQibGdtW3BYTyJaTWZVJVlRUDRQYHwpaExGaVJwKlVvak1hY28+LHw1ZipPWjtoZSFzJFgzaSkmQChAOkdRMXY9JldWKz9gPUxeSDd2IWs0LylsNF1NJjtxNUAiRmZ2TSwpPEUkS1VNZ0dkWl93Tmd+TGg2QzpBcU13Vzlhd0Al'@;
put 'UzVpK3w0LCVVMm4vMXU5WEV2fG46eFQ3P0tAR0UzKkpVV1orPSI8NThBOGpeSjFSX21uWmtQLk5YWy5gKVopJDt2LEJ9bC8iIz1YPU9PU3A+KWtgJU1XPm9bWGM0WGU7bkghUH02ZXtvLjA5WCFOX3A0MGhXfUw1Vl9HcTtmV1JCW0tLKGBSe2JxWmxyYz5jJi9DfF9xR2RCVjhDYEFbOmAlV2k9'@;
put 'SEcjUnpzOXFiZWNaJGooPm1bRmk7YSF2bHpTcnh4cVEuMnxoKW4sRn5GS3ZSSjNZcz5+I3U/MV19fkBqRFQobi9YTWZrWFVoMjIldVNSdFBTWnI6ZlUybHpodzxhd0d6O2AzWGBvIlhBSmxgUyReQUYuPWBUZTwjcSopTk5Ud29SJnlEbiV8WCt4dGwqPisiKWxWa0l1YmgpWDNGMEo8b3AieHY+'@;
put 'TiE7UWwwNmhQcG91VlcwYUN8fFp2XXFnc00oT05eLksrZ01UcGdRPzFBI3E5MzYoM3JSZ1diMnExcVMjcE44YXZBa0p4JDR3Q18jN0lNeXVfKUk1KmE2dHxMVjRFQ21BKjpJbHwmM2V9eFtzQ2IybUVHMywpc3k+L01ZSTpZLDpQTVZJWjdtRWVMVCJOKnYufWtWI0w9eylnXztkanRPSDAoels0'@;
put 'T1pxXTxaVk9NSEswR0RReFFWLGU+R1ZXOCxkaUF2Z1NBVjptY35TbTB9O08sP05da3RkZnZZfU19W0NdaiZYXSl0KSl0ayl9I2VwJV9MPkB5XXk7VjVWR3FNYFl0ZncsbEQkPUJXZH5Td3Ffe25CS2JUb2ZqTkBTZ146PFNtSWo5PXlxbm1nKikveXlYLyFMdXt0bkM6Onh3QGxVUTNJImRqVH0u'@;
put 'MlJrTiRjfjF4dDshMCg5PEohZTh+WncpNXt5Pi9pQFQvR2J7S2dXaXNhVHYxNnlPLj0lPjkyek9Hb3JDKClCd15HL0B8UGVSbnh2YC8reTArSFV6S256I3F0cE9TXy52Q3k9M10vcEwmOSgzaTsyfl1FZCpRYntSPFdzLGZXIVIkUylSVmhtfUJOfV8kZTNTPVFpYUJhdHBDJjZCXUNUWDFsc1pD'@;
put 'cnBnXnA1K2xIK3FCWzduMFV0MWImKXYhZ114SkxmWSVXdUI5b25yUXYyR2khRmxlfTVMLjR6e1I9TU0laTBIX1BXUmVtNTRQd3pOQkNCW3IpVVpdcVdCTmNmYEl4YFhFQ0diKlAvPUZCQHs1NnRTfnI4InxgMEN9eF1KYFt7fUteayxdJmZwMk5nVlhsRDZOYnJ5LHZLZnp2OGR0c3Z9YX4scXI8'@;
put 'V3BWVURaRHglbVR6ez1APzgqXjVRXkAyLiQ7O3AyMDt4ej1iW0ZOOU00Jk1lWy5tN31SKnV6PW9zeTlUbDFzZWhiVERMJmxvW18lN15LfUM0aTtXU2hhSSt2bmhlSlt+MT19IjBCW3U/YiVvPE1RW3JSVjQsXkZwXWElcl5bbCZVJTJ5Kn1YVVlnWVZRKiJ8PGo6bzg4cEVfK09UNkw2OEhgVWk1'@;
put 'LmpwWXE7anxgaHhZejcqPSVzRCl5P0dbOXZUbztsJHNvelJuaWFfNVFeWEpnUElCVn0pKnVaOEBjW048cVRCTTtTVGVVU344UjFMVTdWbyoucUZgRj0hU3hPIm4ycnlWYmE0XmN9ZSVzPXkiRnlBUlg4MCRfVEkkO14rP3RyXSU+Z285Wj5hMyxMVCliRE5nUlBrJikzZWdqWz9yPmxvOjhkRjY+'@;
put 'bjl7aj9UPC4/ejNGWFNVWWFhaDBsZS4qaiV6Y3JvcER1QV5gJkMwSDYrOkdmaEpfXjt4fXsoY3U5TDhnanA5SHJpS1VsIXJbRH0lQT0qJiVlbHVMbWlCWEJ7eWB3bDVJdSlFJF9hTXl6JmdkUFhSPGBqQ0w2QlVQcDx3fmtoXjhgaCpLaSJMR0NzWEJEaGdeRGppOyxAL1I+TUs/TFVsVHh2MVQy'@;
put 'PStvc19dO14wbWFUOGwwYF95M0Y9MExJd2BWKFQ6d017a1VAaTN2Vl1rX0JyPi9LPSEpbzpRLiZzdVlvNGRES15sSEhCbEFiIS86NCFjeGpxVUB6NFEoNUtsNjE/b1dERnwhUyJ6QWxqJjAvKkIqZiUjQSZ3Klo5NFp8WnchaGA0WVd4ezB3cnp2NClMeChqcGBWaHxndTM4eCwvYS5xcSMzIyhz'@;
put 'UFtXNU4kW3VqXitSZkNCUT46bSxlT2ZHalY1MURSL3ZvQUIjaU5SR2tHSVowUWtSQlhLREROe3B1ZmppYGdrR2hEeyJOaV4/fFc+aDN1X2hPI3kmRHxxR05aLGNQY3JicW8sKm9rSiVeUWEpKEBAR1d7dFNKW1VSMVAxd2lQPGUuXVV5bGQ+aWQlKSFTcHprI3srPT9Bb1s6WlNbUytxNUVtbDdY'@;
put 'Z0puLyh2fjpYNk1kSjopO29QNT1EPkcsKmdwOXs2OilgS0ZuR05jeU1aYUhVaDIsYS4wYGxmRWwhd31MNzY/VmxtZX12OGJlQ1RpVSZYWTB7Y3hhTyZSYkJ3LDNgI2pwUi9EN0AjWmdBb2RIISoxYFV0WjVCV1c9c11BbyJ8MCpOMXskdVltSFhaLFFOK1I4cU4lSGVTJjROK0EqIWxgSjdJJmV+'@;
put 'YlFZSm1SUSpYNV0oRipYciJzTU1OM1tKZHhhaWZocSEoc3Rnd29VZzRjSz1LaXd3bW0qW1kjdCVHfG9UQGdIZ0JpKExeK1poVlFmbEsiTGBtfT1ib1lkTTgrViVzVFNFb0V2Lm1pVGA/cz4iNUZMW25VaXxUaGN4XS5PU059ZUJTQjJBYnxOITt2O3Y7PFlTaEVkd24qfWxqbml9an1qJER2XyIz'@;
put 'QDtBcTtRITRXTXwwdG02MWZvNkBBSS9RW0NZTW9NezdvcyM5dWswKiNmKGplJHgqJGYlZihbcVg7NFd+OWU9RldWI1pxR2VvaVMpISpuKGIiMEphX3BgJEUqNXM0fFpVY1tkPW1ze2NsZ2QyOiw4fD4mKSxRW116cG91clQqO3xLMVVwfUZJbkkxXUxkY04lKW18K0FuTVUoK0E1TVE8YmlwOnUo'@;
put 'aV1WWWJtL01hZSxmeVV1WGFuUU9yYS5WV0loSkBCLko7KktPJmQzUCM8Ym1kNGpSLiVXQzZLfWo3cCwpZSMjIyM4QylgT3hiQzRbRjt4NF1YPFFrNkxoVnFwRUxMKzpFWkFNOylXUEs4KFEzOCZXMmw1NS8oVlhHWH1nfGNdZi8sND41VUtHKlREKyRJXSJCRGcvRWpoU3JFTWBHNU5eYUNgKzxA'@;
put 'TFkhdXIvdTdwKnVrcCorZX5iKlhaeT9ZPWxRJSIoJDBfYEh3b0JUNFlFSHpmTVt2PkxuJWI5TFZgIih7PSRbZW1rIikpYkM0Q2BzYmh5aTAua3NDdVslNzNteGptJCRTXVoxQEkpdyRaPlgyaTtGMyxiTTtGVHNbUFVMblR7SyFDazxjcyxwbTYpKDloKi54Z1NFNjY2TXUqYFhnaWs/e3FZcCZx'@;
put 'RVlRM2hYZ3J9M2BNamolYDU9Nythe3wkSm91Wko9QSMhWiY5TGorIk9DYmk8VjFmZk1kKUdya3tOPkhqfVJtKn1QUEVdPGVJKGQ7WGU2Xi9pY21Rc34qU0JfQnhtV1N4U1JhVXs8OiliS1Q5KWtMa0NGdkQldXBTe0FGKGZKWF1qYkpgV0EvITZpMFdhNjNRdXdvPyFTbGdhNlY0fF01M0YsNkU2'@;
put 'WntDcVFdOS9APF5waWw1bG4/UDs9KipLSHRDKHoybEMzWUhENX17dDhzL1A4eEwwOzc6Lnt0WmFENiNQaTNsOERbVmxHW0U7dlszWVlBVkJTcSleci9zUWA4Ik4oOkRGJCRLQTJlaUg9KGY5XWNFQUU3am5UQCpJQXFEVkRfPkBBS0UvazV9VlZYW3JHUn0oQztoSUh1VTU7PW1XIXFufl88Si5U'@;
put 'fUsrfVJTaDo7ZiwuYFIuYHdqMkgvdllsOmhkaiZGTzlbbD5LcFlIXkxWVXQlRWhnfjhGRFB1Oi8jeEI4cylQUmFJInFIdm9CQz1weWlZXTMoN15VRnxffHl1fHdBKWV5PEhFeyVvTylgJl9sQHUzNmdYUXlVI0BFMzkzQyVTYTN2WDtaLjtHUmNJXiJjVFRgTyI5NF51Y3h6Nj92U0had25jYlRe'@;
put 'XSt0MjdhJmxwZiRSOjs9QitZXnt3cUFTJC9aXWdUOy9lLC4qXTR2ISEocmtnUyxRazZ9cSYmeyVhLiQ9bz15WlFMTF4rOzxVY2dUanE4UGUoJk9sQno6SGFaTiRhS2kpLlNaUk9FZDc9Nzw3aT14dC4sKmcucnoheDliLDxUMldJVkpOQiVMTkFwZ29RNCpMI0B7QFtZZVRbU0Z7Im9PRFQkcH03'@;
put 'VkshezNyVDtZTjRqJE0wNFlPIU9gLGN+Nm9MX3V9QGtqa0A/XnwlNHVMb3p2PCwrRiR8TlFuPyw2Jm5XQjspfmsuYUp4NnFlQWAvdkRNRUVgTWl1b3RHXzpjL01RVFlJYmolWVdPdXFqS194alVFd0EuaFVFUWl7aixsS1RJQkM/XnhkS3t4aUdBdl1jd10sT1RGanpoOltVRytfVSgzUEppUitW'@;
put 'Mk4+d1lIJW8wPzR1LHZzVU8+NXclMUJSWFNnLDxGeE4kT1slYXJuJkBHeHtBZlloJlIpM1RiXVdYVndVZixmZWc8NCwwRUpMQWk6fWNtIWlpTkllLCooPHZgKiFjNz9icGs4Ml1tdzR0PWU/YCRSZnZ+e1prOEx9TyZWdlQ0TkNQMX5beHszc3lefD05TzF7VzFjZUEyfDlRSX0wfUpHU1tuczJM'@;
put 'Z1NlSGdQPWwoKWB7dFcrdF0qSE5vIm45akhXR0wwSWx8VWtdPEoqOCRuPnI/bmJYbWgsM1hMIkpIXmw/RiV2YEw5XyN4aWhHTHNOdV5tWV0/clEmayQ0KkZDZlV1QVE3aG5RZChbfE59JjssYSZmNXNTVXtgaE8kLD5bayhsMUB8YF5IW2gmZ3JwOEY1fFB9X0dkT1FmU091Ilg4eEFpLCNxaHE1'@;
put 'Qil9VEx6aVN3WzliL3hZNll8eV4qOX1eU0l5YUFDW3pzSnBFNlRIZm19ekxHUmFFdltKdE9lKGVDR0s4SXVocHF2NCwzU0V5OTZfWHwrWjplLjUqT1liRUB1PD9qLEJVI0hDWyMvYjJsNT1rdiFtU1tuQ2dAaXgvZyxPMDhmT04jTXNsOnpvXndyYkUiUjFUeThSSnl+ZzNuKWVzdXAjQlFTfFh0'@;
put 'STw+Q0tRZXZNYVNrSWt1TjM8d1g4LzZsRnsrYk97MCx2JmIrNntLPUc3OyI7IWp4LFo4NT1uUkBdYj8qcmM1bTc7T2JHS3pqdWNjNTAwSjp5Wmo2aXNVKH11biUlZF5KQWk7eWwpMjo2e3VZVik+Sl9wPipRdG0pcShfdSRvMTNzUGE+QDQkan4xO1NeeGJTTWh4SjRMKlomUipwKnN4YF9iclRf'@;
put 'eVJiaSNzU24pbyhgNHsqIX5rcSxLISR8ITMvRjcxb2BwNUluL0ApO1MwfnY/LDx6SXBLfCJwRSYwYWd1VH1kT3p4Sz0rSlU9SEglNllGflMsNSJubXpLaGt2L2kkKlN5fGI8WXw6XmZLXV1iUVM6PCp8WFdxWHk5YFI3OUhdR3dTLyplKHxVeCwvI1tMTGoofm5aaiEjM2goP1BPXmt0Tj9mfEgj'@;
put 'SFBPcEpgTzRTYSk4U08wSlBpUFIwdGQpIillZ08zL2hZRHMjTzF0KkBKV1lbdCV2S0xKX3AiNWJfSFp3KTtNI3wlbklpJGpoczIxcUgqYzk5fi5zcTRwMXhsY1UsVDc9KkVEdlY3djQvbTROPHBPWSR3elRyJUJVR0AlUEk8ZWc3Ii8oWTFvLnhvPG0hYjAkZTRQeGY1SFF4KHd7ZHVvcGFaWylI'@;
put 'cmY+dWx5dmRhaVpWflp5KmlnZVA7cEEleEEreFJDPjNKcmJYUEpVbSJsMmdeeztqQSVUX1d9WzhHbm9VaVB+VjkkJUs0SmpxSW12V3RzJHkyOGp7MV1PO1E9Wih4c0l+XTxNKCRAPyNvbGdgIihATTx5M2h4Lktjd2lHb0dke2paJkxmelhoZm01KSZCL28lTV96Y15kSkg3dHIsfUBWaCkhRH55'@;
put 'MiMvbEs6VW8jcGIuM2dSMExmM1lsdTpTdFI0LG9AfU0pNS90ZlUjV1RySEdZeUwhfFRWcyU6RVIvIktyV2xZJjcyJDFnPDdrOWVNSGRnVCN3MDYqdWR5UDp9OXxvZ15RSTk7SDMjN2VvaUB7IngldVhCNlVvcnRAcXF7KENqb1pfOEx5fUNAMUBNYndwUSxBSWtxPiUjNzt0KCZKb1E/UWZYViM3'@;
put 'Tzp6YTQhKGY7Wl81PTddTFh0VzVzRkhRd3g5PFd7S3lbSX4wMTZiOk5sMSNmJUx5YWcxe0lacHkrZTh8MUtoaztfND5DKiIvXzt+V0JfKXk0fFUxV053VGlHMzhsL3xxa0YjdXJ1UzhAd24lNlZQfkVuW2RVfUdLTkN7YHwvNDl7PVNWSTRyezJLVGZaTWRYbTsvOFZEbj5uP3lQaE9AOyo9RyNK'@;
put 'NUtIVDl6PDZqIXIhdkNsP0M8YEgzMTtIIVFJUEZMS0UveXp3P2pnJj9dYDw8WzV1ZGIoX2ZNd2FlQU1EOSREdnljO1NgTzQ8Z1s/e05LekVNfE9rTUNsITlueW16UXYoanRgPGVrWXd1cjV8WVd6OG01RzFdMV4xUSVxNFRgN2gmamhkaiJnKVhDQXkyeDNLJT5+VTB0NltCST41OSUlfj9NPjtM'@;
put 'UmdJfSZKazgmbl9mSnJ7M3E/JHQqNV5+PVpUNEh+WmwsSDFXJCs5MHlib3oiblQmTjNlUEhKOzB9TlE+RiUma3s/PExYVkFAVHFXOW06TDZ8YzlTX0M2Zj9ffXgkfj97LDlBb1MjalRPQT53RCJmRUZdYWEvXU0+N2xNJSMhLClXP1k+OHAodV5PQCZ4MTxyM15DdElOeXo9QSs+R0RbR2gsXUBB'@;
put 'b1A2bVFPbyh7dGwrbnp7VFFxVFZMQkhtfDxtQEA9c05HTldVV0woSzNQM1RMMUJ6Sj5LTF00OVNtOVlfUCJqT14jdj0haFZMaTh2YzFCc3NMUEA5R2Q3ZUpgNHBHI31gUnEkbSt+L3s/bytqcUVQRDhRVjg7PzhlLFdGWDMqXmwjTzFOSSNZSXcoOC87ND1PeGpbTjxPeGdhaGFGOj94eilULiI+'@;
put 'dHFRJm9lJlZAeE54PyVLelVNcDpqVDQ+USh9YnNxV0ZZRERuM09WSW9waW0+MEhAImNKIl1wdTcuaHoyTT9CNFNEUjpQXVIlOXFJRzd+TEV1dSV9YVFQVU1pSmJ4JCpNclAzaDRRKEBAOnEsam9vbGpMJDlaayN1WyFFSF1bJEAjcUttITNmPFo9UkkwZWkmcHIhenxzeSw7RzQoYGpvakw5XXRq'@;
put 'aW5LPEg2aX1RVzFeSjRBPVA/Y1ckRFRFenk6OVFJaDM9UCF3MExKJjhUNHgsRV1QUVRJQXBnOSsmLyQ9bEduJCEmQFEldzAmMCxAJWokbX5ncGZQaTQ9WCw8ajJnRTFZWiwoO0BiKkE7cUtvX1tsVSRzelhRfmlHaTFHNSl8NE9rbDVObGF2T3IoU29iQiRlXnpPNUouYC5zZilUPExhaEpMc0lm'@;
put 'QGU/ZGI7VDY/MHkxYmVVUHtUOSV+JV82YGQ0bkAlXSFsYGM3e01QOUwlfn19Pj0xcEVATDhQe1cvIW1JcnpoMEgxKnMkYmJxKWYwZSpzOjlZaDhhYF9WPTksb2B3YjdPP2dtamZMdk8ubiZpVWwkanAoK21ZO2dEfUJEXk1KZld6ZUtpelV9XTx+alEydntmQkhTOHg4Tit+Sn4hSDE9Q1lKaW5R'@;
put 'blUpTHBzcWJRRyErPVJaMWJkcHVxVTQ8cyEwQ3tbNX1oKypdPzF0dShEKyE3eng3JEhQNDdnOGBxL1ladCYpbXM9Rm8kK3U4R2E4JjJxY1dXaCRlKVVsXl1IR3FEOWIhaixpRHtVbSt1MmRZRVdXMmw2Ryp9WV9PK01ON3RwdzJhfkMrSHd6NmJbe0dSU0swfkgxUTpLbCthQTQoYUh9NVFAMyhY'@;
put 'IStdXXZweUJnTzlGVHgqSTFRfVRGKXp4LlIjKkheTnYxKTxpaHhtPzV2UiYsSzJJejt4dVIkTlZyNjU/OF5Pe2ljflVad2xgM1ohUiowX2xmKWpAcng1OX50Mjl+dD19UHAuQEQxJFE0Pn0+SVU6W3wlMDo8elJfaCQhWz0pPHoieVRPNWFTWWY9W1VtNWVvP2duUSFXdUwzbCJVMildPFd9I2Zd'@;
put 'MDY5Kz0iOVE6a2xQZVVLMz1rVDd1bWxfT3soN2xJbmpDRmYiKHA8d3c2OTsxc1VtXiswITF5MGRbWilhU2JpfGhaKjMpcmBdV1h5SUhBaHdMQVNiUiRnVE1pQDFQPE1hQiFpZE04SHpJPTByaS5NNCpLaT1NNCp+RiphYUAwMyVpfE9UPXw5JGIrTEZpXmcwQ1h8PzNMdy52ckF1cSpgQEkmTGdX'@;
put 'ODVvdXdnQGRJWz5JJllRYT5ZbChwcVRuNnNkVlkuJWpAPUg1KHpHflteTmkxWCtaQE9YP35xQSx2fnNyQi9CPks1K2pzTmc4fmAoOCkkXnYyYWNMRiFNOjRIJCN7TWc2Yl87PSxfXWg7W1piO3ZnS0FpTkU8bGhhMi8uLFAvPGgoUEpEUVpXbVsvaSpXMUU+MHIwN0I1RSFNWTMxUTpmeWdme0kl'@;
put 'cTtIUWhsLE5zVU15fFteSGZAW0VFLy82QXZ0Tl4jYjpyVG57S2kzNWI2IXMlIl5xMjZhZ2BYblNlQVZOPD9VezVseVpDWyJrRGZrWms3YThVKz0hQ1J3XntaKWt9YjlSSSkrUVY2PHlhbzllcmtkI3s/Uy9ndGIhRkxPck9nb1E8SiRMXnRKJktPcnkpN28zYXovQzVObDBZSjY5S2lgcE5AS2xx'@;
put 'dG1mQmFXcy9DaUVWQzx2Uip4VzszVE4hcFtJaU5SMEkuYURqTlIhS0pZMXFrRyVvWl8mSngkUEU8Qy5wNGIwSUk6anlOWyIyXno3cEZqNVZ0SyNZclpOTCR+WSFRPEhsUXBzcno7OjRKXSYlc2dqSzNfaWo0R3hvd2lSen1wZyFUSDc2Lk4qdSw1Y0A0K2hZMiNRb01RSk9TNkA9L0kqYztsaHhv'@;
put 'UmVRfGUpWVNGe3loIUh6RHJ9cjkqN3dhZSJzNDZ+SSNhd1ZnSGokRX0vJChHPz1WOFRXTHtEcDF4TVEqbXkqSXF3YjxwPHo0dDEpS10zYjpOR3BLRHt8MW49NkZ7PkhrcGhiS3ZdYn1OdFJoN09uVHtfcV0lbyQkJSZEMl4/Iys2TntbZkdJfU1SWT9SIU45TiE3YiM9Tj1OfWhMZThhOFVTR0pI'@;
put 'KStOQ05ze2dEM05IcyE/blVWeGt6WVMzI2JCezBsVTood3IrTUQ6TElOb1hGMyEpZF4qckssZUsyZks7QzVoTm01diVzTTpTaHNMaFclbFRsUHwpSCxoUk5dZGh5JWYzSDEranRTOEFAPHxMKkIhKFMwU314VUkhQ34sUUhae1BKIXhJLmFwcnZ1Y0QrakZ2a3RdSnNQR3liNn4hMiF9fmhUUypD'@;
put 'e2ZLYCtqYlhAaTIzQF5xbWh9Zyx4RVtOIyRjb1l1KUs0Pmd9QzFvMEJpWD9qMmdHSTcxIXF0NkZ7ZEVqQEJEWjJKXkUxVnV+OFFnb3xHVVAuU2dmd0FRR1ZjKTh1LmI2XVQ9K0U5MWxgWWhBPmsselU0cHdVUWhBPmdESmU4YTZhdiUvbUtUWmBAbUtUW3QjbztWLlBNeFFheSx0XSEsVV1RVU42'@;
put 'LEBPLk1wND1IWys1fXA2WVR4a2kkbWpDRmZQbGB8c0srK1AhUioxfmVGUXkrMU5eQ0lBaVloaCQ1Yj0vJDJIMUlwKFZiK2hvNWlnYnEwTixnOkJkaDpObStZb3N7al0mSVlGKlRNY3hhSypnYz0pZjhlMCs9UVBwPjZ+QDBsR0UlNkQydF55Um5bUjhPJnBlc058UGIxXStCMzZlSjl+JSQyVCV2'@;
put 'YklUaFF4anViamQjcTBRTFcsUWQ2d1BqPFR9ampGRG5hRGpoeH1mbGtoN3NLIzouOG5xW1BWT2w+SXk3OyM4clM7PTVzLmB7cEImKW4kRSYiKT1BLElYQj1VX0BKWFVPdDFaNF4pOUtMJjFsZjFAZk0mVmx6PFlAalZNa3tEZE1hOHxQUGxQbEUvInhbYzdIXlg5aV9rdmhAOWhWUiMuWztYOXRa'@;
put 'M0I7WithPk06dDV4cWdeTnY/KEZBck9oJHpXZURxZkBsZDlJPCsueCxePDQuTHQrSXluclR6Y3d4XWExd3Q/clVOOFdsdFM1ciReeSJCY2Z8OCp1Xy9VbihrT3lbXjdhRXBCSHh7NFQ/Z3A5YGteUEtzOl8yI2t7ZmF4ZF5Zfl9uLFckczg7Xi9uODxaKTpJKEk7bDYoVnZaXm5LK3dJaGAwRENs'@;
put 'XmZTRD13Km93cVI4UnNlPiU3bGk3MV5AMUZufHpbN09oTSowQD8jTWVbMzFpXi4wVnpXWSwqYVplP3BMVz9QfCEvYFB7Wl9dQnRZX2RQaUpZQS5xWFR3fjE/O2xnazFGdEVeMlNNSWx9WFF7aSRHZXZdKDxGWl8wQk9UbzA2OkNOT1lPeW1JWDddRHV1VjAxdV5hSWBVfSJpZT5zQDM0bWBwXzJS'@;
put 'STByeDxrLighLylxfHVnNSwhSiZsIWwhXXRfLzl4L1k8TDtrQDxHXmUsM2k3YX5pX01ePVQrRGsjNiQ4MW0haWYsSHlwJGIvXWs4eS5JMUQ8SUV8YmV6QmlYVippVF5zYkZyQCltZT9rdk99TTpYeTRwa29DKHwlTTEjQFIlRG82RnwkbWgxOWMkTFk8a3EsL3NBRGleImtKXTopdXVSJCM8JWd6'@;
put 'SF17cF5mZnsjWzwlW3xrfGsyL0cpdF5IU3QqLGwjP3JUai4yb0dfenZRZypqaHhVNiNVJEBEWl54aWYrUWZgPkt+dU8qd2crezErRE9HQk1DQFcxblZkbz1LPz41eTImXkt6U35HRlBYemhnXjhkOThkJGhyQUV7dSlyclJyUmh3ZXgoez5PZ0NmSzk0ajdYWCJXemRxOigoQlRNJD1PW2pQaDBN'@;
put 'VlUqRU51YGZZciJVcmwubGViVF5uLCZFanhQaURhRHhNe1VsY3JeSk9vLDpfTzlNXWp0WW9sTmliUkx6fF5bbEYmJklpOCRWamRpZGVHQj1UfXY6YUt6bHlzXkkrLmhqUiZPfTExfjA/bHVNVCNAXmQ+Qj9dP0BQQ1dSZjBNc1hkVkw+Qj1iRXVjSSY8dzpbWkU4dEhSMHxOMG5vIUU3dXliSCoi'@;
put 'QEwhRSU8OlVsT3lhPkMhL2ZzIVNsJHE0IytHcWBNdTBgUVZxQkBpQzNTbDBlJWtYZDFhZ1U5U1BZJC4yUzBaJC5nJHlZNShNN0ZCVGhESE9YQS9JLiYiRGplRHImW05qI3sjKWQqKl9qQVUofEFIQTxxNUBNa0ZnYW4wZ0llIWFUUyo/KWNHe1IwYEhkN0V8OHRsemBqJlQyfjpDLiI3Si5jLkkh'@;
put 'OkdFVEFWNS8yUzZIMWYqSDM4W2ZrZmsmRDJFW0U7TVFNJUNrczJJTiV1MGIyLDJFU3hFKT9uKW1qQzV1cE1sbEFTSSV2YFNsSG1nU1hVI0taLiRvWlt4bzpYYDZNMnRLRWlqUmokQm9wYFcmSGgpOGRRUFVNTSk3PkhYVilPRml8XzokRndXbVpYfWBqPV1heFczdndaKDo3cVp9RF0ma09afXVX'@;
put 'XSE1NFhOXWghPk5JLyohaCFSaSZ1N3Yrfkk4Nj8jQWxrVzMhMyVETCk/W0Jmejd6KUFVM21GXW5ROHwxfF9LMEBLeCRGVDNsJH5je0B3bDBVY3EzYX1DQDtjJEF9WFZQMUlFLjVPNXNbRWEyeDJZa1BiWTp1Z2o7OWF5VzpXaDBgRHBRc2tadTdPb2IkcGJLQDo5KF9APHJ9WCUvZG1RZXBGanok'@;
put 'emwwdlMmMzljLH10SjpgZHw0NG0xN2A6VHU2JVguIWx1djp3WTBEY11aVyUvXntbOSNwTVkjSm5dKlNCL1MjKUJ3RERlJmd2Y04wSjxTYlREJTleWks5SWxGenA/MDEhT3lpa1djU3xDZF0pbEEzT0JUPSNEd3hlTT5SLnZvbGoyN3pLb0c5TSl5V011b3tYeiV7e2tAYTdxTiNRVF09a1dvaGhD'@;
put 'fWlTXjgkQHM3QG1Cd3xHSnhoMjZ7IzZCaXU1cl1jbyNRWSghfEQ3W2FpMz1LaUsoeD1oI1dlUlZ1cWFCVClTNXVNd1deZThEciFFdmlpcSl0V1lDWVgvMUsrWz12MEpBblRnPGxOaUE+XntlN3gxOnMsNDpwQyZGeUIrQkA9eCkhZDc+diFMVkIwdmpMSDFYTzozfTApLDc+SklJOmVgcHpyX2Zd'@;
put 'VUVnLHloP3wyKmNeNjlocSNqekAwYUFpSzNlQDgsPV93T2Ezd1AuUWlQViZaRFRATSZKN0loYWQpSDh6blZzcE9oUjYmYiladk9HTi5nYjB2fUYrMG05KyNVNzxVO3J9diFFWmB8VDM/O0JhfHFPc2VpSmRPTUg2NjNPLDZifStdenwsYW86YDJfPjBWci9RZD4rbzBmRFdJV2FOenEjSCpDPUln'@;
put 'eTsjWm1IViNIPG0yTlQhOit2ZzlKO2xVQl51UFBiVnNqWXp+fFFwQlshK0trdXc4JWMuPm1LM2o2cTVQPHBUNyVwfUt5VSgxen48akI/LFEmdnF6dz0+Znh4cy8weDI5aDEpR0R2LkMuTnViTURyWkZdIzl2L3U6UT9UUEF6OjlAfGU2RFMoPE92KFgkPEs5am1IUiswQEErWiw2clslXSkqXVNQ'@;
put 'UDlxLHpZfmhqUFI2Szl5dDBpfGkuLCkuTz15W11uP0RKLmE2XyU/U2MyT0goaCEmKDc6OkFoXWBuX3BUJnFGaDFAWHF3ZiZ3VG9xQytyMm1Ad2dPL3JWfnYlIzAyd2lHOjZgSTFua0R1d209ZmB9PGlTXWo+Xmw4d0k7O3pbOjtGLyIzcnNAcWZIKCk0OW85cTUwbnlwZDY+XXIzUD1ve0o5SzRz'@;
put 'ajpNXmh+SzU2bSZPNipHQiZlNncvL1l+az1uTXZofWYxaXIpSFEyZClIOGFFbEtNKFt4NGE3YXA3d1kmbW5rbCY5L0IzbyR0RTt4aCVgcFVeNEBiKCllWHpfYX47OmtsfVpuWl1UJj47MCZuJDZIeyR+RV0jbH1ETXllVzk4W09ZZ29zW1JEYzk1VyFbQkReLjlRSSFKP0twRXh5SnwoLD9xcDw9'@;
put 'eF5ublg8SHg/Oz4lNCNlZm13TEY9Q0R9JFBEM1B8cWFhZlh6I00kbk1+Vz0vdW5wVH4lOCZvNCo3KldwbyxTO3UrekxnKGBFYSYvSyZ8Lm1zUSpBXlozaH0sZ3tVPTIkMG9HR2J1RCRsSDZ2ZC5jRmE4NVd9RENZNT1hUl9YMisvWi5vYHIjRnk1dmtMKzA7IVlGNCwpRX4xWyUldDpMPD89Ln5v'@;
put 'RDJXNFZXe2IkKmlTJDNNOC9IelsuVzNyT2xiVE0ybUpvb0cmPz9dS2wzbkNTaHF+bihPPEg5S0k/cmZ3ITZIVDMmO3whRUBEJkZXfEJZZTEzIl46dzAoOXp+bmlZKVBwKStlTCV9eUg1cF88TUpvQHlzbDFmK1h5TDw0MCFhYVFMPEhvXnIsbFZNc0MsJlVqRCwjOTQ4Oi5fX1hmV2IsdDYqaE54'@;
put 'UCZsIXRRfTBZQFdSIyp5TEZ4ZE5udHJFT0N3VFRqJit1QDIza35ob1g1cDVNaW86UVpGaiIkLl9zQCI0MDYmJSRLOks7LiI7PWlRbEVNTWE7NnxWX1tIXS9gajY2aWE8fEsvSywoK3lUNmhoP21uVCYpP2pVRVdDYT1wRWRgX09bRkZNRiFvWV9nbDBbRFR9L3NiMH5iYXM8V1I/Nmx5aERzd3hs'@;
put 'cSlkOXJlQF9FOldQe0xZa0MzPFkwKTNVPDU2bV5QK09mWzpyW35GPz0iY0oiQj5qXVs5ZTE9bCIxN1dKdXpaR1JCUThkLCxhRmgrZU83QS5IaFkyK013UHo0WmZmUDBfPk9EXiRoXytOfS8qIXZ0OnkmVVVIKSVMNUE0cHhDX01wJV9uejg7MUBEbTshc1t+NzpudHc4LCY7YVYyJDhvP3t4TUg6'@;
put 'WWpWZVE+c3IhZH42aT44PGBga3xpWEhgT1U7XTYxRERjRlk2VytVRzRLY1Jmd2xNTSQwMUREJl4lfGglWS93Vlk9QSZAKWVNJiJ9Q0FqRjV0dWRIVUgoRi4hR0dNImImQW58fVE4W3pdcFY8XWBWJiosX35UcnRUMz0iLD5zXVVkSlMvbDpBUDJUcmYrPS5haTdXI1VyV1VvPHB0OmNxZDBiVVFF'@;
put 'UUY+V2c5PHsuYnh9dHN8JD1tOHNdKnBqa2NLaXJzRVhMPThhS3FGTFdQcExMSTJFczNOXWdDVTM/eX1mWF9DMHVqRFJfbURZK01OaDV1dj5oR0xPYltWMUtnVF5xW19MQkdSciYsNHV1X3YxYnlPN08iNC57PXJuOmwoOzNuITdNZlosSFdmLm08NmRacn1kPDljeTJ2SkVNWWQrNjB5SFA4TlR5'@;
put 'ZHo/fkheMzRUWC9XKXNQVE0rLzZPfEtoOGFfWC92MUZnTHdHWjlFJU5+MHkxJlNoLjYlJkZncj5lR0kxeF1lTGVMSG9ac1d0PiZnZHJ9a3xze0F5JStaNjN7VF13fU1pfXFbazMsIzZueWRVVTtQMHAvT3IoWChbQW5VWyFNQjx7MzpyMHloKz8pVGxyIWY5OT42LmpXWktlcHNvcX1mPU8xP0pF'@;
put 'Z0xFO1lGcE8/dnNkWnZVVT1yPkxGN2g/O116dF1MOVFQdTkrdl0lWTZWYVhUYTMmfUN1KnJfUiteO2ApO2dabE1vc2dMfH0wWzopMFR6andxdFdbe3ZWUC5HRUdYQ1gzPW13SmB9TXRUYFVvVHN2ISFGNUl4PWRXd3ZqV3ZCKzN5N3RVckpKeTk8cURqUlNHXTcpd3lYU3w/SF1RPSgwOSRhMVI0'@;
put 'KWBoXTFwSnk9LF5nLFtIXzNtV3YpVkdEMXt5WytRN0AoTmFANjI9XVBGQEdpbl0vaz97dGswbSU1Vz5MKXptR05RX11PMWBQSEhvVGJVcDRSMVFIQTRIWWp0eEopXko/WyojYENDWVNpRyprMX08NzU5KD1hKHtnY0wwYmNMIUpdeyVHYXJyLnI6YF1YPipLZkY0NGN6emc/QUpAT0A4W01+TEw6'@;
put 'Mz50ZHRVfTJ5MDFsWFZidH4kRyhRMk5qOU08NyYlR1NGIyJRcztALl1GZ08pNjxNeUcme2M1ZH00WjxfaENLZy97dT1CKj1eZ2NMTFckNzc1OXlMcS85Tkt4K1IzeTAmdVd7Zjw0OXpGRTQleUU0JXRCMCV9LHBCX1poXVBIL0N2XmVjO359P10yaTQjJnM3XSJ1Z0hSXU46LHtkX2NrYF1bcF4h'@;
put 'ISZYS00rd0skbnAmcCNBPU5eLlAscW5yWFRwXlRdNnhfX0ZOTn0+e01zVDx5cmVRdi8yPFhjRCJ5aCkrYHk3JHUmNHt0fWtNVW82UUoxdzBZXUw9YGJSUzh0e0VLRigwfWFRdlpLbX1sQ0RZQEJVUHo7clZkNFdJKk1ebHw8UExeY1BZPVB1L2ghLmY8YU5wSmN8NmZVU2UjTHg2d2A1P0dKKzNG'@;
put 'LmReKSZwVU5wOCJVXXk6ekM3YmY0LEZjSVc8RW4lb2pQKyF0fF8maG9oPlptd3VmaiE/RVBdcFFgQjJqTTh8KVcvPHNbdXRxdVRea1A2S1hWO1hmJSZfeHJmQntKYD5eWHUpcyRTbzkkO3Q5JGRYZmdWd3JmYjZYKTt0a25la3xYWUwkaV5jY1AsUUAqV0Z4U21veSMqKj8mSXFkbDtVXTtlVU05'@;
put 'PWBda1NnfHsxJUojezZ3ISlWPjk/UkBaOTpqcUpkZWJ6MHNSR281anBAYHc9SSNbbVEldEIhdStvYzVwP0dOb2RGS0s1QCEsMG0sOFV3OWxDbHQwRStAKnF5SjIzVG1SIyokSWxhPHhVYkRRJUA7ZDtkWnc9ZC9uWHBRWTNUN2NkP1F+QEpvPFY6XXxQakhhZk9HOjUwMUVCUy4/SkI8M2FIPjAo'@;
put 'Tyg9TlkxPEFYajhDcEJ8ITlEQDFwXWFuSGM3Z1k7TzJjYjZpUCxkO09uQHdtVGdHUSEsTzYxbE07Y3VXdU0wZz8ldFddbmgsa1pUZyZQaC5mNjA7XlZyWHQ8TUA9bl9mam93ZTxdXk40NTJSKVJdQCs6JG96ISFVR0pIVDlEIz8xNU1CcUNDPEA5ciUyUGY2dEs3aWpOaW4zU0plNVY4XiEjRW5Z'@;
put 'TlNza1V+QCUiSjVKPXpoTG54PU4mZUFIU2VZdVlqMG13RXZ5LzA1Yj9lOCxeUSlOSk9PTXc/UkB7STh2bzxIO2Yjek9yS2JtMGheOC9zLFMwdVd7MWRoWF4yO19SM3ZyKXh9NVlXRCVGelQ6eDF6KUo1RHRLUEoscT9BemRKLmFHbTB7P18yfk5+fWpQT155Vl1IaDwjZSVhTkhPVkBbNVNJO3J7'@;
put 'dzxhLDlxekdnMD93SHlic2tqOD42aGFFVnJVXjtuaTBeKj82VDckI0VtLEVVKlBnaX5gOVhNaWdzTFhaRk8je05nY2FmYDEoanE+T010YndUKGYoSTljSGZ5cCxTb194KTIxVz16dF57JEw8czFVaj8+MEs1L1p7LDZ2cz1Lb0IkSyw0ITFUeFpfdTU8d3wpVTQhKVU+d0Q6bmRWKW5OZkR9dXlM'@;
put 'VDd9TClFckIjMU4vOzNCX0o7cGU+PXgpWk4kZ1tdSiNCI3AqcHZDTXQkampyayh1Q3VGNFhqN19RanhxWXhJb0FEbHE7bSRJPGlhQHs0cixbQnhZKnJdRyp0Xjt0YDc9bFJkP10zVlJde045cnl9KF8sR1QvVEtfS154dXFrXzhdYVM0UiQsKWZmQHdKLHgzV2lgJEtpKzprImhZWj1jSCkrXUpB'@;
put 'XnRDLnQzYFl9QmpXQUtgWGs7Pi59Y20/ZiRUNmUwc1h5LkNwM15LOnRwTENEemI/NHlMVUN8O215TXVYQUtJQjlPRzZPJGgjS3lNcXUvRkdRP0Q8TF9YPk08cXp9NEtORE9WKE4/fEgiK0pdRX1kUDhqQit3d0lBfHshcCp9aVdtbShvOVEpRX5QditTaGowTXsxc0BNR3dGZWpHOVkqbiRBOVFL'@;
put 'ZDZoJiF2NHNldXU3YEBpWVp4YUdxUXZIY0doaTpeJF8uZmNNcktOTEUzTDVDWWtjUUVpNmI9Z2owTXV0aEBDSTFaeThBR3kpdEFDRmpZTkY9bWk3MHUje0pIUypHZVI5alRfeU5vdW5KJW4qfmpWVSw/cEhYLDtMM3QyT3siTF8kXzppQnEpJTdrZTFBJmd1dEYyTEpidk9YPzh0RUdMM0pERjZP'@;
put 'JGZGK04kOl41V30hXWJWdVpvL0MjNDh1SGg2QHc0USsweGt2Z2c0dnMmY11iQiZgLGMxbzM2TilRRnkiWGF9TzBZK3ZKemMpeEUmIXNoJEohZTlZalAuMzdkKm58V3BGKkJlW1lDaDBodkE3X3UrKDdwVC81N1VZQys5OG1EZHtjUXI3YT14Y2FZRGdPcztWZDtaUCVtT2hfIjB6NmlsOFs4OjJs'@;
put 'Q2RWWF0xbyxtT35vfnxVcU0/QSFDejxFYUdOR0tvUmJjIWRWKnY3OGRYbzZdOEVuLmtQYiV7QlBmayNybXwsMnplN2FLMGx4ZnwqbW81RiVPdzsxeS4ienc9MyxVOCpNKy4yKzxxOn1NaWUhJnp3aU5VR2MoS1d+T09RY1orai9oRkIkYSk/Iix1d3c2QXwhbXVba1cpI1c+TTsjezFgQzBRak5m'@;
put 'eWR0X28hV217SUoqVTNXeV00QDR4R2FhTlh5VCVfSSpWSndwP1BvZjU4ZD43WUZEZiM0V0gkel1aUVg3VVRLd2NuMD1vODlwNVB6dHBNMlReIjh9ZjZ4NWQqd19wWG0sazx7X3YySkVqKTVzKlZQZzhNUSkzeSRSQjk0QGBPWTxbZGduVSM7eWNfR3lZKGdUWVR5MldATXc4bUhaSnBvWndEZnRP'@;
put 'R3pecFRNPS4wMVUqZllUTFVLOG9MczpEJisjQ1A6d0lmZG0uSXAocDIldz03X3RnOmoubypLfU5vVVgoKSwkdDVHZ1ROX3lDLFhnO2VaZClwTmFbOG9iKndQMmhXJj89ZWVJaWpJQFpdQnBMbHMwSGVNZ3h1cTJ8UlIpYEIka1IwcitlZmZYT1okQSN+WT0wbVRvMXhbdFskWXxmXUIzK2Y4Um0k'@;
put 'YSQmKzsjL2BaWjlfdi55d0l3OGxIV1ohI1NJTDdmfCM/fVdULHFRcTU+K1RpWH1Xek9NLFFJKnxKVXZAWWVALkQlK0NjUyYlaG4rcTZaSyopWU1oLlZZLGU3amgjYVkvTHxGNT1yZTNEXUM3dVNPW0lpMW4pLiYvRFJ6RVhlZTd4aCppUm0wYn1mTWhMK2FbenJ1L0ZfdmosQTdeaVM3aCI6Q319'@;
put 'KVh+OzIrbVghRjE0RyhIRkdSITF9cjdPe0UvaFBNUkFeWSN2MTc5WyVVJjRlOFY9YnpYVWB0WyZmQjRoLmAqN0guOyVsUTlVO18yYyNsSX0hQz1gNmNJX0J3c0xMTCtbUjVbT3txbng7L28lfVdueD1EQU9YIiJNUU0jdl9VLzFgNEB0MTdqSHlxP3xrXlFNPGJ2e2F5emgmdnZTWD4zTTNSfXFh'@;
put 'RzsxV34vamMmQU5YYEBLJChkOGxMXU9rVURmRnlpMS4/IW0+bkFlMTE4OGI/OiY4WXZPTDdOWSlpdDVJcjwoSEs7PH5PTTY8aFQ4Xy9fOT9zb0ZVYSRMblFtWk8oJFE4Kll3JiV8WHJoKy8xOihwM2tleiM6UXg/aCNfOE9GfEIqV0NgOmpIcyl3bCJTJCE9OypXO1R3OyxBOl5GUVpQXkgqbygz'@;
put 'TG9wUndxI0wjdnpvWl1GPUp5VyYoZD4hSERiel9DNExxdUNLInU/RlZYQUtPeTFyQ1paKVI5Nl0oakpPP1RWWGFxMjBgZXc6dEd0NkNDZlpJdXA2LnQwcjB6JndnWTcxLjhqe19UZjNNRUhEUEd1e1NoXktyKyF5dFVFTSh6SnZkaHpuX2luSTZiNSpYdnkpfUUmS3JCJlhCSDpiTGxoYXVZKEpl'@;
put 'VWozMXtvK29ye2MwRnV5Q1h4TDZbRl9LXiZHSChQc24+JGBTVjw8VH04Q1hIZ09rRmZybjRIbGpWN25TTy99IVlzYGRbJH1KPG8+fioiR3w9Kz9gXndueXJtKn1lJGNuTDBQP1JQWnhoa313NEoiL0ZPTXZ7VSg3TT1YfnIjNGdRUU9hM0lUX2ModHZ0JiJAK25mcUU9WXM/dy9TaTt0MStlMFFR'@;
put 'cX0sKyZNPzJseDBYUHpbLjNSM1guNCNmM1hrdFBgc3VNNXYoMTpkfD9QcE9QI2VPV2IlLno5aC98KHIpNXE4Qzt1RjcocjBSO3BzUmVLdTMjInJ1SFJDVHk5TlV7UiEoQSY3czs9XjBvLCx4Xjo1cFBENl9CXy8sQV5tPzVlP0Q8Pk12VGpEPTJCR2RORCZjXyZ9Ti5MIzgqeGxFX0JHMWk1YiRW'@;
put 'b3d4eGluRztJOVQ4QFp5R1dPaTUoMEswMDZ0PX1YMERkUTY9fWtPVGNdKCtBeTt3XmV6QSR7NXRvUUdeTVZqMHE5THJQQE1bOXopdnFadzI1b1JTIVdWY1tiXiw0VyRzI10+elliaWU3RzZhSkVuMSFCPmxST0VrMWc1KCxRO2hRXzhCZCVubmwxI01VIiokSVIwRGkwV25SIipjRXFJUUAwMzUx'@;
put 'MW1ORjlZKHhOR3pwbncmYHZ6KDRbRnRpcWkiVGIsYVhzLDZLeXdxdXtiQSZlW24rTVZMd3VQO2o8Kl5JeXBiOj0/fT8uUEFtKFksZntTM1EuZnh4dHlOU05UL0tQRyEzdG0+X30pcy5sQkJsU20pN3p7PER5WFEmIzM2TkBSNClbJm9iZD9fbDBFZD9gIUVmckhxfVhVLj1nb1pjdnUvLCIoeXRa'@;
put 'WTByMnJ9YD4mTFUrbitxeHBeeixuYX5oSTM0SHc6O1YmYGhOaFJHWzIlNzRuNihORyZ8QiFqLithLEwsa0k3U0o+KllvUXBbRD0rYWwvWUR1aFZnS3xaOVN2PlZoJGNjYD0/TUUjWzV4OUhHWFJ4SGBRRjVZIXpOUVtuPGZPKnh1eSNJdzNpeFNqdk9rOT1EYWVkRG83cihEdXA1ZmlxV0dvQmlb'@;
put 'cix7bTc/JTd2WiNeUS8sWHZeTT90N1FFVylRekclLDFbJixiJGNWWHxUZVJJKmVxVUl0YnFbL2lxfXhmQipUdkdCMEkyfClqJnU7VGR4ZzBWT3tCUFBITzZ4d1Z0TGtZTk12cm5FRiwwMUYsL1dNUUFZdVJhKU5nVkNiNURRJWFVYSRyRWp8RklteCRTPHs0LHIldjA/WF4uTzguQ098SDU/dmli'@;
put 'c0ErVlo8XyQpIm8zbitDQUFkbHdkXWBZdCFMNCZaQ3JEYkN8bj4/X0AkckBKXlNyeFo8NzBGSFl6Nj59aVpwImdvPVElKG9MMk11dGdMYGs7UC9jaXslP0hhVjFwPnJkTXxje2tHaWtyUyNpVXJnfEpSOEYmfVZnVjFjclVoZSYoYG59L3p9N1RkTlcpNihPJDR+PV00Xmklcl4xYF0hUiNHQisl'@;
put 'MExlS3UkOFVUIUVbUmBMdl07XjJvUChlIzBwUVJ5N2xTWHl4I1d2XiQqbEpqMEN0Wi5vKGE/RCFCZEIsNnwkJnJ1b0RBPEYvPyhpc3s5NnZXS3tOREBBVzRRR0wxVXkiNmk7VH5xa3Nga2B4UiVERk58VzlbXVVyN28zUk5zNlZiM1ZuWz1nT2ZlaSVVSWhQUykkKFpuNyl8Pl5DTWlMZ0ooXSVj'@;
put 'KWBeOCk/IlBAKXdCX25GOyhiQHVibHcmI1s9aDUoLDhIPDFkSkJvJSVBaHdjUVZzW2lBZXw8Rz5YXUNOS1g5Yn0sQ31oNig5RDtwKjs8d14sJmN1Yj0vR1ZvS25sejhVWUYzWihwYTE1OEc8bHhbSiFWTVp4bFJHJG15TzMzM3IrZlZCcShie0Bgdlh1Sjo5RG9oJHlYRiRbSU9VdjJiPDBoJnQq'@;
put 'PU1ra2h4LjssYVNRamQrMUUkJEJ4ZixyS3o3dWFqTUVhQjRBWGAkVC9gYSVRaj8/eXpfMCJCW3hbbEhXfkJjQVF8NkI9QmI/OkEoLm4mVkBKS1t2OFlxMURRWiNLYiV7eVFZVjJyTF1dOSJ5NnNkPSR3QiRBVHxkWzVAWihDZlJ9NCJvYGBnZUNNfGR9KUM7UiZLN0tLYVh7OlA4YUkyJntnPWQi'@;
put 'PVhZT2kjfVBGJEZnRlllKDtGUURoX0IkfWZVYDdUSSFOaE9GIVRZeHJgP0pNVlF9NCs2KkgxPnx5XU1UISI5NDVTSj9dQHVhVCpmKXQqP1FnckRhMWppdyU8al1kaVFTL3s1dGVaOXQmfn1GdllyXyw9JSY7JFs/XVUlXm5PU0x7RHNPMX4lKiwmPXZdU1ZKZGdUQGFiLGtJUGl3LiEpUXsvbyU9'@;
put 'NFI0fFIuKjdOI05aeTgiSTF7bkZDWnluYV44biEoN0YoJU83UyFFTTlkdW0uQi9lRFhmOzsvcEtYeDpyNDxuS1R4fiwlWTRAcTltMGJ3Yl5Yel9SM2RRcFZ2MU1ha3pFI0gjeHxadTFyVVtpdntMck5JeHYpZWlRPnJDaClqc3JjVzQjTHV9YkN+XSV3LEt7YGF+Nk5dJT1IfEBxdHpvYD9iTD50'@;
put 'OihxOG9xZ2BiQ35vLEYxdDpgMjpnfjhIS0YxLzt7d1FmY1lEeiErISZKbE41cl5EMkdnTDEwYSo2dlthSV17YiY8XnZbdyN2UEI1UVovNjd6ejlwOWt5ZVBbJjBEd3BCTmZYb3k+cjchbyRNaF5bUXkpc2xZJDwiSV87PHg1OXliKDkmO318anY6KEFsMzJrdTokRG0qazBhXkphJkw0cjlZPGck'@;
put 'VCMocVtZcG8iXX1vdlZPWjteRVo/UD4kS2hgOncocC97LjM7PGJDPEhLJTVIOGhQbW5qT0hnU281MSJFWE47cn1PRTRKNmcpS2tNS1QoYiw/QF5GK1pZckxoYXRCT31kWG81JkFvcXkmQFpnM3RlTSk/WF1uaHNPWys1SH5fNEl8U0pVXTU5PSVqKUVKaU5nZUshOTI8dmZwLi4mZlFIIXFbTnpC'@;
put 'OUJ5I0c4VVtOSDtrdnk1YWxFMzd5MmwqUDR7RyomTDQ/fFM1LnNLcypuZmM+Vj9FMXJiYFpTST5HPkEpOiYoUVVEQ0pyYVk+U31OWD97PWZ0KXA0QmVLcDUoLDJ4LihoKnVGRURDKGdLUU0vNSl9ZyUoLDRVYmJvcz4qLlpgayE8OSZWYyg7emhIbyU8dlZWYjQpMjZZOW1aSzI5UCRHMj9wS0go'@;
put 'LEBTYXl7eEQlajlyfnApSno5cj97dFBYPTBUMFNlJj5IMGlZT3praHQzU3tiKntCb28xOlRyRTA0VmJ4b3RJT3pXJEw1RH1iPFc4SD16c0M0eCN4Sik+OkFtXlZ5WVZPXXAyYTNZOVM4LyZbZXMsYkhDcUhtNkZCdnBnTSlKMVFlMHpaNF1ORW80JChsMSIkN0NydUkxYmdBMCNIbWkzKUpHQGRM'@;
put 'MDJmKGpZOlBiTERieWw5Pk88aE4qenk9OSxAS3JAK2pLNVZeUnZIIWRKdSp4cVJFPHxMRWFWQyQhJmF7QFAleClOdjErZmN8KnUiM0N5RXZIUjBYSHsxdE8+VltOL2hYMTYxZmwoQkkxVjFnMEE4UzhbamlNfnRML1Jfa1BgcCExZG88Lmg+SmtuW2klVz8sRFlAWCtkPn4jZHFTSkl8Zkpvc2My'@;
put 'aVU+em5aZ0Z1dWc4PTVVcSpZeisvS2JpQjFgWlE3blBaRmNvMjReemV3cSU8aFJhMkEpUDBxdXtIUlk3aWFVdyEifk1uZkJNIShJdX5GajlLNFQoITg6SVtldlpYdG5MNlgydXBAWWVLKjl0MSklOTFpWCtxQ3UrIjF+LCJyZWNva2NxXk5CZG47OCtGNG89cW9OS21FYXooTExpdUk4O2w+eXJ0'@;
put 'UitpdE90Pnxhc2ltTEx8Yi9vcFc+PE4heHl9NUVDQEh2Mm5vUW1Ke1pqZiVzPmZ4ZCQwR3l2R2l3cXVLS0FdMTRUODcpY35wN05oeHAjJjEjOllafVhxXmwjSShrUFJxNX5bPHJJR3pBaFBgSUlqblFEP0YsLHI1WyZafl8+WTRRMFlNQD56VkFTNUxZJVs3IVppekV9Kio/a2pKdjkpOyVdZ3hm'@;
put 'cnBPPXNLVHhOLFdwNSljJUZyJnArM3YwdF1gNjJxRGpabkY4USY7YDQhW3toSjZUa2YkajFfbT5AQFdSIl17Iz0oeHpPIStobD5QMk8vTnRhYCFKZDV5RzdvPllFXUpoKGpHQyF9Jn4uZVJGVnVdeCZsTCh+PjVVSUI+UDwqYGgrJkYpXl8sTDxrIj5KPDAxSkJyWGtQNUoqQWRsOTFxaU5SKjxq'@;
put 'dVkqZn16QWZgTDNJb1V8JGZ0Yj9SPTNQdUV1UU1yRT9ESH18QnFMI0EwY1lMTF5FPFF1JSlAXztGanZNUzlEfDZ+eVlWdStLM0lNJWtmPGdqb0xSM1lJLF9dKTtGUyZxTTxPX1FRaEBRV3JaMDJjYjJ4UFJwN3BZMGQ+WUY+en5AT3t4MUNfI1FpZntPPnFgJVgsKHE5alZYXWdnIzpZSH5oOEk4'@;
put 'I2hNNXNzP1tBbHZ3OlVAM1cpMSFRRzNGOmttV2pgdnM7Vjg/Jm56YUdmYj9NclhxKDJhbk9Ue2JaXSl1IX5iLEh9Um9iNU51YDV7dkR3IkxXNXIpUndFfkx7NT9RcUtRLjZkUVV2JiVzPEpxajpfIT09ZmY/eHV9WnJLRTAlTm9tKmpTV3ZfP1JsQVUiSl1QVCZ8JCJWclpbYGFnSS9RMU81Qyhk'@;
put 'UFRdfG1vZGtWakVDbWt6PXlBP0pVNlpHe1FfdSRbNUZOck9sPGNvYih2JTwlcGFOLlVhVjZKciwwdTg/W2kqPjY2P2AkJjNhV0xNK2Bva2s4QXJpW1Y9SCxDM1oxPjo1OChJMnBxaGgkLylJfn16anpYNnI5NWklPy4pLlszYUBiLGdWPWdEbk96KWhHbmsuYW9sIWlsK0w+X0VdYHV1KVJrNnlM'@;
put 'OyslOW43KmBJRjZ0eyJDbDdfakhbezQ9WTsiVi5OditGTFJmZjxqfWJCOjEjO1kpfkx4bVVHcmI+eSpkbjEucTglfFB1ZzF7ezBYT2pvU1tnYGtZcWZ6VWN7Wig2JSFzJV91RWx8YGpbZSJRR2NCUHw6KDhEZCJLbXZUTjZ1RjFUKj5KMH4vWTR4fXErPW5gTzZUPFZzIiJ9IiQiezRyY2svWWhI'@;
put 'LyhbNyZQPV84MmxwVWNmKHVacDQhcER6XVRqaEd4KXwqVz9ycStKRVZTZUo9MHZAZ0Q8YnUyT0gofXtFUC9VbTJtdXJYUHdhaWFQelRBfFpnPF5sSyI0fi5aXVAscT4kST4uOkV0Nls8Jjgub1dzXlM6KTZ4ND0vayhbe25WXyw1cC92KTIwRiZYanlASCo5Qz48TmFfYmhZPVRuTEBeLDVbJSU8'@;
put 'd2Rqb0RRaSp7Nlc8WHc0dys8cyFAZ2pYSGIyO1sxcCU1dENgaEg7Q1ghUDB8JTcvIkpEPlV2eFl4UjExRTVBfEhoLCE/ZD1EITdZQHVoeGM8N2xYR3M9P05TeS5gdkxUTXRSTiJrK280T2YuPVVMPiJdI1F+V1I1TW01ME59NyVKKzdvSj9XJEtqaVJae2FwLzl4R3csTzk+Xkk3YmdnaGslaSU+'@;
put 'XlQmOS5jdUNfNjFjOz07dXJxV2FINFtmaE15d3U9KWtWfm1gLjViWnsxXVpXI1tTTWw9aio8O21bQG53KlVsZHcvZikuNU1Ra3F0ZFh8PTFVX1AlSSpZQUFBQXl1Q0FvNCkpUURISGtTZHR0JT4rdWROL1UzIjo5Zl0xe0RpQFRIM1JRQ0VZJEFBQUFBQUF1VzRpdV9lYUVqLHE6JFJfTnljaCw4'@;
put 'KXt3cVpoVW5TcTpIaWh1aVk0bmAsIUJGfWlbNGRFPl4/SlgpR316OGFwNDcjK1NCU0ZLWkIiRWNDN2FoNn0+TV5NaS5NaG59UkB1I3RlSitLI2JnTGR1WX1Ma1BeTE47Sjlfai9fKVhLQzpMR3BpQEU9ZTx9TnF0SH42OjgjUTM0RSh2THUiIzFBdlNsOEdzY3E4VGQvK3tqVT9+YEdLayNENl0v'@;
put 'WSVQK2Bpekw6eUZdckpmbjFpZWgubWhbdXopTVE3JkFJTVBbcVV0USQ3MXdGYGorNkI/dlJRT34mWW59W29vW0RJakUwejcpbiU5fVlKZlU+YlZYK3F2RHRLaztleTZXTCNQVF9lTCl5NDUhcVp6PzEkKllPODRWRSRzX150ZE9dejhbUU06ISIhVkd7dC4jbCJmNGg3MXlQQEErOktwaF09VilF'@;
put 'Ym5HNnwhN3suVTBRLD9AJmQmfFouUyx3VGRdbkVIIUIiayowT3J6MUQ7NFRZZi43Zkl9bkJ9ZFIoVWIsSXQuNEMkUVs3cFhqbHxjO0FFdUQuMHJMJU1kYHZ2P3NmXi83RC5iUypVeFg6blt5SF9KQklgNT1TOFhDOHZ2TDdCcS9yfCpJbURhdlRucGcofTw9Yi8yMGNiMGkrXlNycixNQFJJfSNA'@;
put 'YX52a0w0MzFMWUA9PW5HUkpdVH5EKjVFXnZYSF19SUNrbjdWaj5aKDB7QGBLTGNobTJkb2UlVl8/ekskaGs8cmx9SjxiZ2AkZy5MPnpPSWM6fD90VTBzbyRiWH4hLyRGUGwpMkZYRiteSnx7fTd7WGFDdVsmZXFsWHNNIWNTe2pgKk93eE1WXiVnJEk6JXptcjB8OmFCVV5XV2N9ZDlefnZ7OWRG'@;
put 'YSJVTUNscyJzR0lYTV9uR21uWDZ6cWpnRWwxKmlYYXg9RG5OY2l+d3lNan40SH5UOG5OP0N0K1pwZUB6d3pkJmw4I0YyJk9YcCsuXzloUWg0KFVydFNkUmw8dWs1cmQ6STE9ITo8OThzT1EhNHBeZTRqUl9lSCZ3QHE1QFNoe3BeMldhNFgkYmA2bDozTzZTOEZ2eHw4eWVZbWxpc188aFIwQG9z'@;
put 'PzxuWS9lRTo/SlhWKnx9SEJuMVdqNHxTZV5DI0UiaSFYemFDYm9QR1tPaFspeVBISGxtPEdgZlMpXT1HTyZaOzs9d35yelI1PnlReWlZaS4rKkdQejRFNzQ6V3U3M3YrR3RHdVNJWDxSXT4pJEtYLF0iT3tBJCFlTkZSQD1OcDQuNzdOelEsWlRpVUlBJmxAZ0ZvRH15Yi5Fdy9saVJJNDFPVyg3'@;
put 'dC9CciNPO1NZIUpTYVIrciZfYFIqdGBMYUtBZEgpRS9SUCJEVmklO081T3hbNDw1bz1+KiNAUk00ajwsOSUkJERHfU47bj1fZyhhWXApflkjfi94L2tmWj9CYEczdmh4dlVxbVZKTVVhNCk8JjZbSXRwUnlEY3IuZTRjSFVaZlhbV3IiYWlycmp4YXY7ZU0kNEVAN2Y0YHJKaHMqW05UcnNOMXo4'@;
put 'ciMoUXxyWkZKbjxPIXROOEtsPy9NPzY1NVRQbjRuMG1sQF8qZVp4dV0lNSpFeGpKYUlWcWN4JlBzOSgyJDRYeT9ZN1VFMVJZUXJZbFg+W2s2e0x7SD12KyZiKiRYVk86U2pleCtsZml2eShXTXxLbCU7VG02MjhqWGBiYyplL1hXTlBSWTV7PlEjT3t3JXFkNzVLI2AlIWpkcXdWOX04M1lSIitp'@;
put 'cHs0T3ozSDJlNHYxUDdnaCZufT9laCsiInQrJHc+PzJuXVZWJFsuamM9eiwoXnsxLy5DdXZuRUxsUlVDKi43eGZRRz87UG9CI3tRXykzKlV4Ql1GQillJFpFTTpZXTEheigqcXIzV2N2TGhsS1U/aDB2cT5qJjsoaGFSd10kQ2I6SzJgU0VlSFcofkA8bUdYNVNyIzIqdEUsTVpfUy99em0kMigy'@;
put 'e3xZXyZLXSg6RDoza0gufUlgLzduYX5+YkE3dEtkYEIwRjQ8Uz90Rnk7NC5kQylSQF11biRnRHUqWygwW0JFJHNhO05be3c7XmM+L347TCJMNHlwXyZAdVtyMjBvZjYjWFM4RjZAZCVRQ08mR1l6WmtPSjNJK1VNXWEwXih5SF5RTlVicERgeUNhNFs7R3tsUDohWGlZRyosO2lPXn5EOjssRE1t'@;
put 'Pz1fcVY4PDl8SDw+SV1qTSxNZmtNUX1jfF87R2Z7V1syOU8vYmBaX2VeIn5eTjBmXXZpJXFnTio2c2RSJCVSfE9XPT1BTlIlMXcleTQ3azE5bDdJakhaM2p7PkkjYVFDbkNaczdQa19dSFo9QGp0IyRjeEMoakhMTCV1KX5pJmEhNXdXeChFRGxvRiFjdmR5azZiZWkiMFZoeC91RUUrezdbOV1H'@;
put 'c1F+I3dMWiN7WktleXFkaV5lODkxSCRhNyNkOzdaejE8QmsofChfbG57QiVFYCFJekJAYWg0USpKPERuUmBkSTR8Sks0NkV+VCR4KSZ5bm5TLlhMUVgiMUlLP09nbEN1MVp2MER9bU1YNk1va2hGNEc5a3MvazE0ImdZTFttRC55LyVUInxuOkskI3pFNDxQXWFqVUhZUm0pfj41YExlQDJUZmc6'@;
put 'RVEpcyJiQGp+W2gxRzQhajNEY3UkLERFak5HLHxrWlguM1dELnB2SHUsTmQ9dzpiX0BWSlF0e006VCZNNTVUJis0T0NILnomOSJlcjZoUEtRZ3F1M3oqNG9eclsheEErc0cwdFtHP0g6UzxyMWxYYzBNanJEck8kVjgocnl0WUtkMWcjOVllPXY4ZipxK2FHQm5pYyVpR1tJenwwO0NMMjhlYylK'@;
put 'cjI8R2IsKVh6Z1JUMGwveDAzWmBwTUsye3Z7amZGMFR3InJRI2F7SSUoSXs6cj91JCVlaTtXb2JLYExwXSh9ZFYqeE87L0FAZXFgZWpVR1ZjL1h3YU5GVUlyOyEwdUpMJltvWnRzNCtZKDVjXWNQZG1hLz5FVjMwRVIxa1ZfcyFrS0JQT15JV1hzY2shX2p8RV9LWWIhelB6UH1ydk1yO2M5aitO'@;
put 'IzZ+STI+M01uO1dwflVvQ20vRnpPOFFVbmo4ckptJTdQKTpAUDRCKmBRaltZfjpkWyt2UmE8bkkxOS5jfHhHMlNqbyVsIiRCZ0lzS2cvRnhBOSllbzpseT1ePWslX3BKLFQpd3RdSE87OTFzXUlvT1Z5ZEc3OWMycy8mMV1GOVIlaExjek0/PWpKRiFPWGYxa1RZOHU6O2NTY09INmhvWDkvZUM+'@;
put 'T34iJWVoZHByOGRZdy5LPnRiXi9dMlhedTJUZG9PM0M4MUJpbnVoeUJkRiRoKzsxPVdqRzlJdCtPcSwifk8wWXhHXz16Wmsybkx4KU1NUlc4Xz4kdUFMUDVzOzs5KF82YCZ6Ny5WY1UuSjg/VmkpKGplWlN3O1MyKT0vVngsZyZ5eHgwIzZ5ZFtRSl1sUExdYCR2ZXxsNUV6dDQ0Zld4OVcrbDFb'@;
put 'ZVppMW5ZZWVSdHpmYTIrSDxTSTA8QmFDT1M0IzslemtPMkV8QG9dVDpjdm5yLj9bVmkrPUV3WVRaYzM8MzprWTh6WlhsUytfd0Q/PnlQJG0iVXxMJjk6cVV+ST44SkNhY1l1QiwxWUJnKC8maSVmO1grUz5DaGghP35YWE9PODNHLix8PzguO2ArYTsjTjpDeUJjUUFwQHg7cV51PHlJPCtQPGkw'@;
put 'cjhZd3AzZVR5ZkpaKkF7cDh8MXNUJV06KXtwTEpXV2l0PVE9JDl9SVo8VzY7bzFQVl4sNj0wQDI+KE1WPT99bjJtRFh6W0NGYyZKa01WSkVgdlJGaVAxRVI5IyQrbFZoMi9tcTNXdmM5cjVuJSk0a0JYVV5yNVVCXzkkUmpyJlopI1ExSEYodHhFLkdYa1lGeURjYTx2QF5Qd09iYSM5T2lMdUd+'@;
put 'K2JhbEBuRHtBP281LCFBImVDbGtoL1VDJTNxMEZObFc6JWMiISwxYTZAKXJVV2FWMU40Vyo/TiJOMnNGMml3VCNwV2c+XUFTUSkjKmNkdnM4c3J1ME1jOyphfURhNXwmMGlBPkZkdUsia3B0NCFVWmArc1VLR0tyJGohLDByOjhzSm44V1FKVG5gNVc6YUdiXU5SRTwzZ2VuPX1aIWRGSnY2UyZk'@;
put 'XykpZVloK3lvVm1QanFZQkJsKHU6K0QmP1BaQiZ6Ji5LTmNZK1BraXFUc1ldfHtbdnI9aSgwRlF7YkZydlAjSyo1WklHVTg1fFgodzE3bDs3O0I7WlglXV1bN0JnXVc1Sj8yVHkqP3B9Rl1WPURueEMjT2FXelBdMnhPVGk0WFF6c1tEOV5wODhxO2swNT16YGAkc1p0Um85UTlEamdsM1lDLHE7'@;
put 'bS9CUHJhI3ZQRkQmRSMiK04qcm9nUz5SaGYwfH5+ZmBAc09sQjh0cCY1ITJySytdZUk7bnl+QEV0en5vUClFPSYkPU1mUzpuZW9xPGRXe0NvJSlJUl5ec0V3dzw/YTs9U2ErVz5zKjY8SW54RSE4JTJKRkRBYy9Mbn47X1VuSiN7RlpjWFt0NnM8VjJAJGJUIWQ9QjZnZVQodjx1ZHRTVGxvUHU0'@;
put 'TkU1Vz53SV5eY2JHOWM/RkZ0PHVBXlRNdXFwMkA9cz1palZ6ZGhvJixDVSgpWmkweiFqb2ErcWNLfFJTSzhdLkl4YSRfaUMidy5LdjtgV2pDKmR5WF0xcSg0W2cjeio/I3VRMnJhKCZaJkREP3pnPXdbR0NUTSJjakg2MEM/K3p0dzZpeW99dEBicGwhcFNLM1s7c1MmPV5UViUza3laamdmaXNi'@;
put 'PUpJPE9+T11lQmUzVzhlLy9VPzBJU350PDcuJjBYZk8oc2A9bnFvWytKOjRgV3FMNkNSL1csSy9VZHtKSmRRSWEzJFQvLloxIUFjNCFXbXhiYzV6VVRhZk9EWEohMVt4PG1GRG1mMkcoTHBHeEYsRndwVz1lWWBJUkV5K3h8Qnk9cEo/NktvRykiVG9kfF02KENrNUddSTVKREF+WURGalRSMy8z'@;
put 'alFERml+R0BaQUt6VS5WVkVIV1c+UXFQakVIV2VPaTRDPztiW2R8OXE5bEI6Nm9hcWk5ZmpPN2pRUS5kO3RNX0grYG5nNVArYm5hdDlxRUFvV2Yjby59TWRISmpQUUpKbUgsRVhSNkRldHl1Z2tZbUwydTxJS3QubjFTbUBiPjVyNkZqRzt2MzEhLEI5MVpTL1JYV3pJUlFFcUxqN28lTis8X3dP'@;
put 'VUB5OllnZGJCbSU1Uy82WyNzJT84ITUwJiZJVSZUVmlFWEIzOWh2XWlhS28xS18iPT5HRiFbJiROTTd8Rk4wd0p5WjleOkpjbG8zNDBiVWlON0Z9ITpxKChrLnpzcVhqSF03VkZ2YUxeR2s5LCpGN1J4akQ2ZU1OKiRFbTRdOyJqQ1RZKV95X1FCNHBlRUFNOFFQdGRQM3V8JmJyYXhhV291di46'@;
put 'd1BBblt4Xn0sbkJETXJDSDdiaGlwfEQpNXZ4ekAxdGIrSCtzNmtqbX45djdWJnYmNE0oJCZEJUZCNHBxK2NOUWp6ZCZoSHo9bSNZZExlW0RwYDpGKmJgYl4zT1opcWYsbXFAQ1h6MVRybCpaJlheVyxSZEMjVz4ldE04ejxrPEleNUwqell6cyo8fH10IWErTnhSQDxsdi5OOipKP3R2MDVJZygi'@;
put 'P0AvX1JBfFs+NzB5fjRFMTpYOmJgI21EZjpqbz9YRHlWOT5HJUczNHYpZWxuTUtELixeISpqb295JW1EbDQoLzMqQSNAfW5EITEiOnByKGElUDpZSDgqaVslLjloP2EwKVtBIW5KbEwrcDp0NyhsWG5RJDBfMS5Tcy4+UVo1OGopNkksM09EeFlFUz1kOUU9Rnxzb2cwImpWMU5jKGx6QCFxaklt'@;
put 'WSZjZmwvcTEiRUp6SSYlQzp9MVVVOzd9Y016WW0oUEk2NFFIO11Ed0t3Tnw5a05QQi40YXM6cGopZl9KJmF2IzZqezJAM1I6WVdOZjYxVGFJT0xIWWNnPGdKfUprXWg4ZWFORVAyRFZbJGheKitJUnNndVFpVkp2O3A7TCtEVGwyW0M2MiUxKmlieFk8fFAhbFBwR0VtKC9QRio/PTRWXn0pdnE2'@;
put 'SWd6YzVse3F1KHJZSy5feEY1NEhCdndQKSJCMVhCbSYpTEF3dU8yXTp9U0tNe2NJZVNOR3NZQ00qUHxifjcqSG8+OXlMV18qPi52InJXejkyQHxJO3Y8NmJPdFlSaiVtNkw5cGFAJjRVZF9fajcvejZCbT02OFopX29eOGV9NGZoVnlwTHVlJSVDIkdVfVIoImRIVyg3O1ZqZGledkhRTGRWKltH'@;
put 'S0RDfD5DIUF4S0tUcSpaVj9jR14oUlZgZ0YlYnFiVl4iR04qWGNbYnRNe10zOHk6ZHNzTXkpazx1Ynp8RlZRd3d7YTFFVTFOUFEweko7QUl2U0s7Nk5DODAqTGwhQmZyODdlOy9RInFFRkBNfXZ4SiNiWTlvRTtuOTVXNT54R2UwenF+fTRDLkc3QyV4c2hpSDYzMSNPaCZIU2FaJTNNLCQhMj92'@;
put 'Y3F+Vnw9Xmw3YDU4LldMXiNqRCl4I0BrVm5HJWBMZ25eQyQ/ZChZY2p1JCZRYTVVfERvV05jZk5WKWwocHphRzxzQUc8Vyt4Y2VvbzQ0KWJPK09TUiwlY2N+ZTRiZkVQaitne3x8UW5sb1lhMn49PExbR2JkTHV1LztqO2ZxTnJrenNrd3szVHUlekJCUHwpaXBrc2lnYmRyLzhRaT9rdHhHUnY4'@;
put 'LHssRSxlZS5GYUJgUGVYYypoYjl9STE4QzBxb3lFKVJGeFovS3g4VmF0WiRzSXk3XWM4SEM9YUxCZzpUKlRwd1VQQmEkSnRrIX5uMT0jcnhPYVdEc0dyTWVkJW14dnpSYGRmbF1PKlF4QTJ7PG0pYG5sYkQ7SHBmQ2NeKFNmRFchMk8zdFN5eWRuWDpjNEQ1eHNpYlh9LFFScFVSQ2E/K1JQZHt7'@;
put 'WX1xVUBjcWN9cCkwL35FNEd4dSE9NT5qTGx4aE48NGFJXWsvJjR9al86NXhyR2BzUU8+Wz9jMng3UyNVcCwkR0pLYEk7YEVkX3QpO3RdRUklI2MzIShxWldJcDwrdyhRIyx6fWIvS0ZCdT1jamI4Uy9LYVNdMSR9O3BYWEhYcVVmemo7YFE/eyVFKV9qLEg5JUo4ZipxIyNoNTFyQ3w5R3FjNT0q'@;
put 'NnRKNkJYKnJodH1wLCtzW3xeSH47WU9RIXxFbXNATDgraHs/b0J0W29ZS21oJU8xZXslRnY7QSk/YHFNOn07JkZdV2tUWUkxQXVHKnNKZGs+bj4uTW1mUVAuNTYzVCh5MD8kPl4pSjQvOVc1SGlnQnFNRS5vYCssWC5IZ3poZ3FIQUI8VnllZWtkUEAiPkNwLnA/bUgyZnllLkt0YT5ePihxOVZO'@;
put 'b0RaL1lpJkhBKm45c3pXWHl6eFJLMzBzPUs8QmgwPyY1OGE4PCpuVGtjIzt6IzsmJVFuQ3o6Wj5UT0F3ZlRoRE9CL0RKOF8wbWh+WzVwOi9aLFc3RFFDSEJSci9+TnY9WF1mXSspV0dzSzVbczhWSnMkQVhOTXRSNjtCe010LCxedl17T3JzXjp5WCMuPmJ9P2A/NWNxUGI3eSFfflo9RnRNYl5b'@;
put 'bSxbLiNsSS83ekczP0A4dDEhUHYoOzNneklbTVpCbVtGR1F+TmtaU0JWRXxXcHApSEVmK3VDbzR6ZW04NGV7LDFvODByaz1eKSRaQ1U2Umt2dHkhVSVwVFchPFdyeD1wQlVfYHMvVThPVXpzSTx5fmlhJnVIXThGb2RNTWdIVG97ZjVKNzB7LzNSOmdlQm1reSt1cXxNO2J3YFs4MTVIfDglR24j'@;
put 'JFImQ1dWTjZnM3BhR2J2QDtmWzo2OyxPeTFhWTBnaVhVeyY6JVBybTtPKS4zaFRFOVhqNmUlKHxVdyhTaFEpOW5Ebz11ciZiOFNRSFRkPC5HP1k7KSl+dDVHJCklYj9uRTBjSWg4I359WT9VZDY2ZmosPms1UnBiPiNBR3pnN00veDRZbHh9RERERygvQkc9X1EoW0x7V1EvKD5OUV4wMXdhdis9'@;
put 'OzgycW9jLi53ckpWd1JvfDI0OS52OngxIUhoWChyVFYmbU9bVClHQE1Zd0IqUDAuJVBTKFNZK1FSQUNnW3xaZCl7LDteLmRIbG4jJndpLHVAM0lkOElycTMue2ZQRXRqI3lTNmFTTyNJJV5UPkckNXwiYWUqTGE4KmYyZFdGYnZhekVQRzNNMk8hVUV+X2lbWnw/S1E7TlFhaSh3TnF6VSxDTCI3'@;
put 'SW5XcSM+cUx3L0RoSXdgWkNSLm5CWVBfenJhNmF4cW86VFomTUhNNWN0I0JRWnhIP0chPTp4VnVLcFdUdWxiakxNMXJ2JUcuTFQ3NDMrZWtsRTtnP2tja1QxdFQsNkQwaSVkdC5ldXE+cCQwUCpBPm1OWSxHSEpPcXliX2tNK00jSWQ4VEJiVnRzI2pYVE06aSVLYjZUQmYzPy4ual8mJGFwSnox'@;
put 'UVFGOnZLVWQwaFNFbSo2UHV5bWVINzsreF11NUM7QT1fPVIkOEA7ZGxdQn1Vczc6Zld3OHZVYUkxYChwSSNJRF0+Tz5qWmM8LnNfLjUjMkBMPCFPeS5TfXxUbzwjLiRdd3grNEZ+Xk5GKkFyVjRUdjgsMWI/L05tLD9vUTgsRWBYS3pEaUtWRkNsbmJmbC8uInk1bjQlSEwzPCJES0U4OmckaUli'@;
put 'ZW03OThafHRYY1o3XVIjbl57WWpeb3g4bkZ6ZHEmfChYeHN0LGI+YERsPEJ1M35bWSk0UUN0UzYjTWgmSmZEZCo3KzlKLkYuKUMoKlBePjBfdD1pWD1tYXxtN18zTjJkaS5CclJZYjhFOkFFVGldZVJAQXs6NmFzbSFGTTdVRkQ8ZjYzPDhRK35GVSN0I2pZc2J5ZVF4KWcrfVIjfDJUYzVlfCZ7'@;
put 'UX5gIkRJMDw3JUZkWWBOQ2Y4XiFDQUQ4UWN7UltbNWBrJEBrOF8iYCZDY0U4dlhtNXArcH0+cjJgOHA6VEFsK0tAPUJLcj1+aTopPE9YMFIkWVAkeSJjZEhOLzdzOyFqKi95PnhIL35LQCYwJFNCOHlCVW5SMzR0PHpxe0hLREhrYkVBYlVkdCg/JTBzanI5Qzt1ckpLeDVuSCUhbUBuN01Mek89'@;
put 'TyY/YU8ySlR5PSomPnVKKjYoKG5iTk9sKjlkIzU6XiROLlRoUGIrYjMlI1ZkUlMjeWRDWH5pNW9RUmc7a25AMXN5fXRTYEtPL1svNz1+Ml1WIUo4UGV0VH54JHFPQDBGN08oU3R0T2xbUjYvIWB+XSkra2lkR14jRHEpSzNYOmI4fF5ZY3pgLDdkcTI1NmpVI3YxenVDV0Q5ZCNnRCUlWXxXU0Y+'@;
put 'fHV8QFBfK2JTNjtrfXZtPG8oSCIkYjxaMSlAe3pWckN4ViQvc3FdWl4yM0ZeInJ4XndMOihkeEoiIi88ZXYkKjd0I1dHYnJnSjQ/NT8sNzBGUHxxPEQoMEJkTyFURHh6RSNrdVojTFZ9Omo/YnVGNEMjQG13fkZjfTdrW2Y5WkE3PTFGVH05fEJFQ2EjIjw2cWc+blRgY0ZVcXMqc0E/Ulolb0km'@;
put 'Y30oZHB+biFRKFE4MFRPfDJ6MU5OdDg9SCZQcVFLVzhqUj4mSV5edV9GNXxsSD1+NVlNald8Njh0JmNSYCxzfTtkdHN8dDNEVGxndyFRRTo/UUJRQD8xWzRsWi98PWVyNDtoSWVSNCZ6YUUmRGptOjwvKVdESTEwY051PllLM29pUiZBVVdiIXtCZWRqZmZTZkRbNTM0Z2B1KU48XXRhTDtZY2p6'@;
put 'MkZOIzN3UD0kfnpzdFgudClOXStEVkk/XXhbK2RxPVhaQmRzaSloekdvIkhsOjlOInY8aVtmKDFkIVZfND1Ubl9TL1p3bkAoaWJRTnJ5QnJLMVFqaHI7ZEBdX2lPI20zMGk3YExbUn1TIVRQQ0ZnMjxlOF17Z1kxOiMsTiE6fWMmTlJ2bFYkcV1nXUg8M2NzIWpYdFFpSjFiNSlQfmtPUEoxPypS'@;
put 'SG58fW8zNSVjKCJhJHtDSEBvREN8Xks6ZndHbURtQmF5SkQuWTs3TXlsLC50NGZVRV12Mn12RWVybSZXWyN1aUk8Qjw5N1lCX2s4NnBwfTouZDk4KHdUcHA/am02T3VsJDkrUmp2Pyh+TWJNTF5YYCRTekI9V2NwRngkJjwrTjZTQ09ATlJVR0pROG9BaTZ5P1QkeEwkbXllbHJJOHNLUDJ1bTxX'@;
put 'TFBJb3JVeS9eO09SJigiamkhLnA5TShyaSRjN15bInFJPGUydkBsPkl0WERwaFtvPkQ1IzdmOj1MPChEXU9EKGhKbytxK0NlQllnZyhHel5QLjVaOlkmc0RHS3FWNyxGOiV3Nis/djFKMiUoIXshNnxIPkUrOnAxeGdBVmxXb1VmVyQ7L200LHZMaUQ/cUA3NXxrbC9qWlkxX1tvUzQ7Mz87U2Fk'@;
put 'UUlvKkkxLEVja2w3XjJlQkhefEZjck9ieWxbbXM6UCJNaCtGe309Miw5RWRMTy5rfUU6ekw2cDFwKGcjLFI9UkpIKyQ7fX5wLCxPPylKQk05Pi5jakVvTE8jbnU2VkptS0w+Xj84PVNoaHtULGA/OEIwNSYmUixtUGcqZXxtSyh2YnIvYilLX115TGorUHc5UjVmY099SyMkLDxoczlRU3s8a1pT'@;
put 'NFVDUmIzT2RJbjptZmhqISFaXjpfLnRTTCpoMkxma0lKJVo/X2FZck4+TWFSSjIwJjJUdT4zPChiUCEodzJTLk1vbWo7TiIlI19TZWNsITs1N1NDNTY2ZFJ4KWBSWSkzY2R6ckAlUVB1QVZrLGFXdXlxa311Ln03T3J9JDpXT3ReOGZabElENG9SUF9NWUlsN0FpO3FaLyg5KExSI3I7ZmVTQVQj'@;
put 'JFMzW1BFRDFMR2FAfGQ0OHdVW2tlJUt7OlBMJEJkNSR4YCJgVWt2KCp6JFtpczo5XzZ7QGZ8PHl0dUh5MC9bWWwwdF09LCRVOTZnTntNO1JdcnAsYzlzMUU6YmJUVHovSnlzcF9CWH0oQlhYKmApMHdeU20uZ045MVVRI3FRZ0tuQzxzYDx+RFJ+QnEhImd6OWhMfDs7Xi9ybXU8eSkmVWxAJVtE'@;
put 'MX5dZSNvaCFqb0ZkWF1eYHxtSFh+N25BJiRnMW4lbXtwaHV3MlZpXXVhJmNHM01MOHgwal4vM3QvSCxzPDgpaXpjaSJxayZ4T0NTNnt3SGReU0M8RVZkdzN4L2FlPyhjNUdZR1I9VlFCWl1aSk9XSit7ZEVffHJSMiMwMU5AI080TkgzPWgrR1cxfisvX3kzS3YqakVley48YGBOMiEvUD1DczFA'@;
put 'TFs7Xi5PUD8zVlZ0Ly9GPmNWKng5fil3WnN7JiFoe0hwK0E5OmIzQjpiY15oSUtYWlZMTFAyXkF6enNiXUQ2Rm9QW212I3xlYTlfWEBwPk4pXUBEIzFkIUBkdD19dmsobkAyQ2g0cDRwZltbZzgqczkjJWwzekpWX307JT89TCxXSkldOHRdRzlldDxIdDxHPHgpQSVjI1BrJi9mPFk5MC9VIlR6'@;
put 'OzxXezpKTkEqIzgiJVlGOyUqfTMjZmQsVV44THU7Vzh1YXcoaFAmfGEvJkg0N1hkWD5saXUlW15sYVN5YCVPL3h6d3QkMzIrPk02Q3ZxNG1wZHViZndVV19yc3IvIUA+eTFnIzA2Ozl6WCx5OkIqSHNzOz15MExocVk7T0FiYE5ZNy4xSEN2ezpGWygrU3xnXTk6LE82Mzc3RD9bNDFYYUFsVVRY'@;
put 'P15NSjxvKHs+Qyo4P2FNJSVXdUZrYGNbKFdMWVJgTytuVW5SM35GPH1hRlFpUz1aZkghXUc+TGtlcyg0XWR5QjhLVyVtOnwmUHI5e1lRSXVhPzYoK2BoK0duK2lqb2RBLHBKRVI+W1Y0eHZ6WG8qImNrVVIsXm53IXUwbFQrbkljQ14/JUU3KUgsL2Fyc043eDsmZnMhOVQkVDlpOnhmVG1FNTdw'@;
put 'JCpGNmpDNEZiQl5Odk1Le3BdTjAiMUc5cyN4bmVULEM2alghMC9KPlhSREdbb3R9SzwyWFMlcjIha1pxMCNIO2lkJnpJIz9MKi95WTNzcnxFe0MmL3EkKj0+IiouPGFjZW45WTt9XjhZezB1cD58cEB1e0hjZF5IJS9GXls5dkspP202fD5gPCJOOVRobn0xcSp5JjtRPjQzRyE9ejE1Sk1PIUI4'@;
put 'V1loOn1CQFRGPFBGNEx7ZGA1XVMlQEQxPHxqVTBXSHU7WVdRdih4NW5rTUQ4aEdDWmJvLio5dl49YzVydWZpai5mMGk9V2ZoM2t2RSxteEZSX21WRTY7bzlHZmc8eV05cENETEUhSU4yZCVdfT18Oz4+XjpYbXx4VWU8L21sME95QX0/NVU5NGIoYUk4XiZYUWFLX0xUInl3YSJkRilMUyF+M3w+'@;
put 'bCJCVHl5LChQTS5CTyYvO21ndD9uLEhCZnJUMFdHZ1JYd0wxcEZFOGBHfTlDQ1Yvc0s+e1dBLklUbSg3cT5nbkw1eWY+a0VjNmt5IUE0WFVCZGZ8ZDohK3pIb3JKNiZrcHl+fjRSfEBIdzx1PFgyPi54JXdALngpZFt6VDFMSVEoaHxSP3ZUWVs7djUiKmw5PHRrayRXNTdWQm1ePzlwOXtoeD1e'@;
put 'e29peSNMPzN7e2IwOV0pKXlPO0BZNTNPb29WdFsrUigoYkhNUCh8RFRbS3VFSGxlYUFrVzNpO1klPHQ+NzFwYyZRTDwpYGhkOiRbJjRuLlNdZikhY1tpXX1GL1ZtSX5bJGokZCF5YXh+bl58LyxCYWI9dSJhbyQ4enAuTjNMVXw1aEY7XWZRKkBjJGRPcFBRU2RmUUhgVkt7UWFtIyl2fnEqc2hu'@;
put 'WF5ZfjhjNWA/fFQiQHF+TGAyMz5bVVBNIVB4dy9DU3VnZDFqQ1MmWyhXXl1ueXdiJEt8eGBAZFlhPiJROEVjUVY7Qy5dXyVkY3JPR0cpZXlJJnQvdi8rPX1kSiZeNlk7XUZlaThaM1gvNjd9O3QxUG56MT1HTjprMSYyX0xiSk5GSCwpdldfbURUOyk4cWFCKVFDQjpqbj8wXmAibkVVd20mYnIp'@;
put 'L1hrVVYpUUNFNTNvUm5uRVVdQXoseVRqJlE9d3t4VU89OVpTOWNlXWk5blhNIU1OIm5QMkpRfEtQUn10dVFiKXhNKnxuZlAlcll3KCQ9VCR0dnR9OzFjKEo/WVk4eVc0SXFfbUNSU2BHKDU6eW5kOWJHZyRYRVJkP2FLZH56JkFyJUxFNENzVTJ0W0ZBUG8+K3lEViglfFohI0BhZXxfKCNFMyxn'@;
put 'akZZdktKNlhNVUR0ITBTRldKZD5LNm55c1lbOCRbVl80aVAmTHNWKDVPT3JYaWMsfVMqeDFDb0hNU1VxWSs3cXo1cDdjUCJ8RUY3N09TREdDaV1bU0sxMlFZIngvMURSYWhGW3NJVDMjaHo/ej5tbUtDdSJMYWdsWjBDTnBoLHUrbnB9IyxCbVElNj5sdjFbb1V1ImhVZzJCXzh1Kn1XVDpwUEpL'@;
put 'Zj0zWVpYUDxvdnVgcHUoZ1hxdF51XyJtR2lQVCExW30qcUw0ME5rZEA9QkNBI1BIRnFwX1ZPQW11Jjw7fCZuKiU6eF44ZExkJHNQUmtdRlQmckw7ZDp+UlZ9XnojezczLH1sNnxLKF9XNlUuJWhfUz5tTyV9VHY/KDg1NiFZb1Uvb3BYWFJzSkw4KjFrPVtoeWEuL2pYcntTVk1zNTFzNjdZUUol'@;
put 'Z0hqNCFveyhgYWZBIzt0bVM2dl1IMjsxSntKLFNkPmw4OnVSPnFuUyU1WDdNdjJGMSNyVXFfP0Yqck9hT2Zqb215UUVwcWJOMXFMfkZVVCEqX2QjOVNoLDZqeDJMTyY0fklHS3BvVkQ7VHczSmQzcGkjfmRQSj1gU05yOzJHfFQ3NCN3V15yaUY9U186M2ZsM1JiK1JMRUBqflYifjVTR0lKMWtK'@;
put 'Um5yWTZMVT9dUz5FfHpxKE0oPXYxe2twUkc3Vmc5UjNUNnJTNUFKU3Y2QlooQkRTP0w9WypYaE8uXT4+WkUkc2wvbmhaVkp+eik3PHNNSVpWdVB2ZG08UkJnXUQ4W1EqdyNNRixUJGtSYkQjWjwpUDgpYWJaTFFIfUpkUT9tc2h7Rkl5SCRpTFgqREBMalE0eHdTPlAsKDFRMCFvNiw9TUNuZlNd'@;
put 'LH05MyhCJXRfc1Y5SlROYndxUjVhN0olcjBHS1VTaUlOeDBAeUdvSV1PN3ZNK2NrTHBbQ0A5MmhTei8qdXIoeHdeRCpEMj8jRGEseUxCOVlDWWt9cSQ9SCh3RndzZihgfTo0UVBTMSV9QkVxK01NaWVEZkZUdn5Ufk9acWZyRWhzYW4rISEkJDEmXy9Ve1B4RzplXjd8OjZkUl07Znc2d3V2ZGQ0'@;
put 'P0BrIkdRfjtVOCI1cGRYYUtIYXIyU1NEU29jViZnQ1h0M1dLYWJqSl5oNDVpd081LnkyYFN2bjo2W0E3SWBoU0RrVFZOWTleMV5ffk5bLisxIn05XmhFVXV5L3teRzVDdyUmdVY1Q1M1X1hhfnQodl5bL1lwTykkMV9xdW08YzVBZnQlMHVnKHNzdzJEZkspdXh0WDY8dHA4PHNfcj5IYGZbcHpA'@;
put 'QDxeRUlWRUxYezpUZ3dbbENePHBtJmE/UyZMN0EkVWgiOF9iKzJPdiZUdUdvdUZuJTIzZiVBUCJ5VFRmQn42QD5nZ2h9O1JtSzQzRCUlSHlROHFxY0dVOG18XnpLWDtQSFFbRkhpTSV9JUQ1ZUcrWGxZNGM6P1ltcFNrfVJobVFUQG00dF1Uc2dpS3I2bzRncitvS0F6RiM2dnspUWk4Xn4sLlhI'@;
put 'bV09ZGJhTUM0Y1puZlFCdms6KF4/eGhTVixsRC4uUztOMHksMVsxSmJ6YUZyUTdgQjhfOTdGdmdDYihNQlY7QnI1NEYhO1Zza1BzM3ZzeHo2KEY2InZhNGAyIjU5V0JqIyIhaUFvJHo5e0pAcF55Nj88YjRERS8lKWlhJnYmbWVMYnYpZW9SPFh8Rk90Nk0jM3NKPmpEVTg3TXp1bXw0UzFGa0Rj'@;
put 'dDEvUWxhLEBVYj49KDgweHI0YDhSPTdyNWEvKlQ1PX1JYiExcDtkfittUGNOJkx+S0R9e0o+Oi9qfShNPmpBJUBiOCY8bHA1anpYYWUveH0lNElqQ04mRSV+IS5gRFp6Jjxgb2laV3ExVyFfMHkreTZEKSE+fj49e2pdS0U/SUR9NFMhVCpRU3s6YjtAVFtVQFQueE5UaGh3cUczI1JDfSkmOE9r'@;
put 'cmR1fU9LS0Q9Z2tlLmBoKjBAbFZmN050XzNiK01Kczp+aWdEfHB4WTN5RihhaiRvLksrcXE+YSFWMXViRVNLVUNXZEJ7bUpAREslNHtbKk5bYUp0T0RSeX10V2Y+K1BATCZaeCt5OjUpfXNDc3JaN2ZPZ2xJay5gRlR6VERSfGkuJlNpVFMhKnc6e3w8KTEqeC9tYVZDWllSaSx2PSR9QGNTTV5W'@;
put 'VVdAQ057NVtoMiFqYUY2dlkmW3Y+QUxrZ248S0lMPTRTLzwoaSx9e3ZHLkRheFd8K0MuQ0dbO3hVPUI4OFNkXWB1TldafjIvSXgvfm9wQltmQk9waDByRDopMUYvMmNLJGw4dHY4TmtYO0VJMUFBbTRibz95a05uOzR2PEI9Lih3Z1ZwM1N3cHdQSVFiVT9sT3ZUcSxqN1BuVCtHflBITlhnP2lO'@;
put 'Lyx8aHZFTlk8QyFhSU5fKzVCVzZsdnZFIyg3YFRALDhHT182aU5LJn5+I0wmSmN6bygkSVtwWW1wMGVlMmNxdjA0SUd7KVFlOikyWm5IT3NtPixaKmFlfDBlMF5rdS9ifn1mSkIraz8lLkIuRiE3NiR0dn0lW1MlV25pej04PndhR2lKdm9LdV5PeSRMRF9kaFFiYF4pVCZoe30+PUxdNms6SEVC'@;
put 'ZE9YISI2O1JXe25iR3N2Rj9bfSpPZnIuWm8kK0MyI1shUCVeWT5GY3AyMlsvPDNfZEtCUmJpW3M2W0khKUopcyNec2BEcDRyMiIsPjxBZX5xKUhJS15IYXZoWSQsTCRhTSN4JE87fUoiU2NVeXcvSW17NXVYQUBRdEYwM08kfSR4T0tjXW42PE95KWJZUX1pY0tDPCFhRSYmVV9IJnZbW01abVo/'@;
put 'SyhIIWg/OWh9RUVuVng8Ly9dKz5MLEx7e0x2MCVFVkRgKGA/ISlLfjJFPktsKlhjSCxEb1p0Rl56bTZQVVYzVHE5cTpKQFkjTj5dajhrdy51el5QeUpzU0x8PyFYST9IbDxONnI2YHBbYFR7Wm55VkJCckM1Ryk8KTw9dkc0RCk3NiZtS3dAIz5wQjp0Kz0vaDpHd3smRG4iXXNQbX1tZyx+eiJH'@;
put 'bDMlcUJxNSFQTGBheXpuYDdQLzh6bWtzbHVPZ3t3TDtaQmRTZmRiSFFiTjB6RDt1ODdOZVA8bG13dXNZRCMzPTs8TDFjcXdfJXpdM3VwNH1CVnFlUjp3eX1lN2Q4b1J5SGVlVkIpMkk5TW5Udy9ZbVg0bD1iP1AiQj1+aEx2fjE/JHFlTUFkYXgoaD5KR30uNlcqRiJGNHJQKTNVPTkzUHVYWVEu'@;
put 'ZGs9Yk1JN1FdaHBLczwuNHkoeDoqQm02UE1KN2pXezBKRlNlUFVNciZUJD03ZHZKM35eRFtma1t8OkoqdkQudyh3NkpsUi50Q09MPlMldWUpVFhZc048Lm5oJHBxc0NHL2JnLyw6KVhHcmUscFI/W0RyLmp+Nl9OYSU3S2AkfiV+QT5JXTgwTjJqeXBZQTQwQDNLRXVtXktidC5eQHV5dy96TWwh'@;
put 'USErTmxaRTs9T2AqeH5OOXFsW2svciFMYk05SiV2OHdRRkVkWXo2U0hPX2hSOm9OaSkiT2pGemhHKil2eip6R2xialslITlwR0s6W0djPVAsOlRbY2FPU3FBJW1hc3JTSyFZYD97TFdablNYImludUs7VS54PyVHKFlGcER2VHxFfjRwIlUvV0p1MzZ5Z29wWyFiMVlTQ3NgTVMuNWl+WGlhQik5'@;
put 'UGksZDZ2MS5qaSt1Wy9GY3U9RUlsP2cpaGNYbmREV1Q/UCE7eHMjdyl0dltWQDhTSjBbdTNqMnc2UUJTY0N4Lz00Q35pKWhmSiUjMzU6VXVmbjRjI0osPVNReH5Tal4jcWlqMH51amRhcEY9ck4/USlhY2p4aFdoeTchNVk7QXlWbFsxcHBkMUA5QEsxSF1vdGwhP0JxNUZKWX1KYkB8Kl1UbERv'@;
put 'LlNTWyM0RTQ7TiJSKGo4Xm1iU2k/aGhJJVJPdXk5U3VWSjVGdVc6QUNDcCN5MGFkInYsZVhAVVkwfWBJZ0JROGdzIXVBZ3lxbmZ6KWsobyhbJUtaPSxpPkQwelQ+VzNJWTQ0b1pPMGpYSFUifmQpRi5dfj96ZVZ5eTQxeUxsfVtKcWV1fixtbEhVRTExUjtbTjZ+U35fczhUPVplXkQ/KndWRFJz'@;
put 'eXRhQVZKYXRWa29+Szw+WiEsWiNgJH1KUiY6NHlkQGtDNkE2MWpGY1JBQ2heMVspbVgvaSwiNSNPKVUvVnVaSGlxUCxnMnFgeDRUfWpaanVnRzJ3dXlgTUVKZGsqM3xHZUN6d0gmQiY4L2FUbFAiMyhVcE5JN11td2ppVVdXYlU0VjpVZSEpRDxVYkU6MHtma0BNYyhzKz8sX1d7Jl5LZyRtRGRm'@;
put 'NmhrMywsd1ZGNys/UWxTS2grJkNUSUBqWTlmfGt8WTw5c3p2Z29AJn1EJCtgQSUieUdRViJDIV4oK0ZSI1dXLkJGSX4oel8pMTw4Njw1SDwudHddWmI9enV5XVh9YXxZRD9ZWTVhbF0kcGB3aGdYcXopVjl8QWdPTWJqYzl8LzwzSX5tamRPWzVPU20wIz5vSmJoa1khKUY1UClHQSQ8PHRBM05t'@;
put 'K2E4JTxkIlNVQ2pZRi5gR2I8ITRhX0dBQXtZWiZ3R245RyZefEJfWjR1Tkc3NHZlSEg4Iz1hRH13U01qYVJjUWtpb219QDU/S1l+XW59YztbOEtSPVlYU05FQCledi5gRCsxNU1KRm9GXjY/OzA8X1AvbnlBTXMkbjIqV2E7Zjsvei4/WWxlN3dkNikpKVZbJGVEPkNpQSpXbng3aztGI0B8WDR5'@;
put 'eDZsOjklXUFLKn41NUw/ZCM1W0JbMFk/QHw9YSxPJUs6WUU1Zl0zamleTlM+MCZKRCwjekh0Q1orTUVsdkBUOyo8VmgzKmV0fD5QVGhGOWRKTyhoX3Q2L2ZGb2NwMUd6NmFGTnd9OShvSmc8VEFrYX0+YCNsJX11TSZlbiVmJUh9QGFAbFs+QUR0elAvXjo2S19DaDg7LD0zWCtPJl1tNDxjblEs'@;
put 'I3ZlK0NGaHF7NmZLeGM7OlY4SUBpQFEzKmZebC84O2VuMW14eyVvRyJ2JDRrNlV9OF4zKlpbalJydFptb1JdUGlifltQfXdBKWI6Kn5uWjFGSmR2dFY+bHF8SjR6TyxQS0tHaX1AJGlRKCJfZCp2KXhQRz1qNGwwJVlLS3tFK3ozJVFlOmZNZV80NnhwJV1fTVZyK1ZeVzV4d0JgZ1U0VUFtYTxD'@;
put 'JSNAZURCJVh9JEU5aUpAfXYsOHQ7cW9fbkBjYXJsJU55cHV0c1JCUTZbTkttXSIpc3I8NSNqUThrQSJqMFZxWGV3OVlINj5lZVBuaik/bE00XktyZ2E9M0BsNihNWnYmdX55X1pbN0wjaTJsejlbLk45fm5XZCNGYEZaZXx9V3FdTik4MTQ1NEhiMTQ2Q048TlFCbyp3NzZ9U1lgM0xfQ090MCVZ'@;
put 'aFVSVWc0eEJtOSpfTU8jdT8mUlskPS5zWWtOJklZPTFnRClEX01Wcj46OkVbcTJ6bnZ7LlhRVl0lZVU+bFRoPVEvTnoiYE44dlF3Jn1uVk4xTFovUz8kOW1+V3kvbExYT146W2Z1azpPKiNaTipgcXYrbyUwS29vPEg/bUBBI2NfV1c6MGE/fik0QnpXOyN4RWlIYCpvbSojblhjJmNObWFdQDNJ'@;
put 'PyQzODEsdHA6fk1oOXRieTxsP1VlbyxuWDQ/Qn0/e2A2TEx5WHJLfTE+QSpHT291PG0zKjdudW5zRHJ7NTV0MmkldT90ZEt2eE54Y294L3slR2suUihZWVlEaSk9Zkk+Rj93WyhGei9ra2BrK0JkPks/RSRCYWF0ZExPJnRxcX42ISJKcldsYGhNdFB+ejBLO1IjNFd5I2cqbCE9M21pZHI7dmN5'@;
put 'NUQvVT5HWHpSMWt0aWpodSY/O3R6MCExUF5wY1NOK24vPEZOJmd7WTk0JHsyTFhtZ0BdJFFoOl1qYWFPZjdTTjsoNS94d2RkfHQ8dF50ZD5VOTpgOmhwLHUhJW8kaS97dTtrOEhkLC9kMjA3dFliKiQ9YCFheD5nJWhCR2ZXfEU1WyxqWlJfeiohNnJCY0JWWUxfOi9dKEhXRCM2SVhtVTM/Kldx'@;
put 'QkVHQGJCfDhPe09ifVU2RyooUCU2YWwrLFtvKkx2OVtAPHg1ZC5+WmQ5KUc/WHNmbHQxZT5yUFRKJG1eZU8rPjk3Qz8qMTorYktWZVtyIlpAcVpaZ3dCRF4zTlhIV0J+YWkmak5FK1hrfGtrMz5VNWVEekE8TyZjdEV0dCo0bD5tTGhTe3hkdyZvSEpIN2t5WmpOWzVCaEBvW1Y8OTUpW2w7cl99'@;
put 'ZCFTfTswS0RAfkVyeXFhUztlZihEIWpDY2EqKCVMb3hxKj9PSVRqL3x3cD8uNzJLRDthNjtGMWdpWVY6IVhEZnJGKlhwaktvYmJGb1JfTWRkQiR+Y1NDJVRrK2dnbypnR3J8c0BQNyx4MihaKG8yMjs2SG9GZ25XW3hDdEhrNnx1IkVAQHoucjRFJFFsaFdxWE59c2tCbkxecVM2QVRddVssZ1J3'@;
put 'MCElSm1Jc0N2REsvQWhReFU6aDQ0aVldKXlwJW58Yk9KJC5idlYmXkdxTWQzP1g3M2tKZExaOlMpVCZdTHYuMEhYUHUyT0gsUik0dnNeajd2ViZHWGo0QTEmXShsaDBNcllJdGV1Nn1pNk51XWVbRy5ZWCJ8YmhRdWx5Yj96cHkiYmxgYT40cm9BeiNuak1ncCs1akYrUDphPEdDR1Z2N2RHPV49'@;
put 'Jj9mcUVAMmlDQG8iIUxqRlhMUjkrZjFoPHxfSGpqZ2w3TzVDOCExam9nV2BVPytAfXdbQWl5O0kveC5PMn16a3Z7MV56UDQmY3RNMk5YdDJgSGljciwqaTFzYVMubEFxQ1BvQDJ6LFNgKio1VyM6P1d0WDxsant8Mk9BSzpvLihyZGtsckJhfGFlbldtK201VXBpWDthUS84U2tsMXglKXV3QWts'@;
put 'YXQ4a0okRTUrMm1bX3VORXJFOjZ0QF0+b35tXWxAPl87InQ9cU9rNXs2XThEKlooTi9Fdm4vOElyXnBfMX5kRj9dY2VPR1tUcEdEQkJVa3RlQ1hsLEhpfmkmTikhPWxGNzApVFs3S2lyQSFjQm8vZj9BTGhdbmkoQSpRVDZTZV12P041QjIpLj9nUT9iO11gWSFNZSNMYCJJe1NxbiQ8MntOdy8u'@;
put 'I25lODY6SlRDS05bRU56ZDRvb1p2Y1BXST1mZSY7NlROaD4zXis2KXUhfkwrVyFwJXkvbmxMR1UkdCtfc2R4dEV2Smx5R3JjZU8/VGErbHQ0aUA8REhvYUE7ZWomU3AyajA/PDd9Llh5bV9FclVvUkcpTXV1OTErdCk5OyZ5L0RTNj1bPE1iMWV9aDxUYXtMVXJBJEEzfkxPRG1lZUUseFlPVSk3'@;
put 'KU1bbHZtKG4+TSJzMVYqeV99YTJvQ34yVkh8JENJSFBYNlA/Pl9bI05dM1Qmb3RHVVAocWN3THwpMVdSfklHV2ZRaVVmeygpUkxgczpkcTpmZUcrNWByPV1VJTwlMTosL2w5XT1lfWFzXyZ6IUZyZmVYLiNHUztUNCkpMDQ1RUFTaXgibnJUeTomdDdUKjNTbSJRbl1ueElRc0FMfE9aSmYxLzMu'@;
put 'QW9AI3BpXzxBK1p+Vl5FVSszL04rZjczKWwyW25uTU1iI1hoZGRFI3g6Sll9VkFsdGdaRkRrI0o9Q0NZWj9hdGN+LHN4cGB4Jmc2MnxJREcqMVBobXlpWUd0KlF+VmE7JDVgeU1NallJMzcuektDQFpZZXxvXzFLamcwamhwNzgoRUIuKSgiQUROfSVxI09ZLGRFbGkjZ3AuUyxtOD16Q3BCQmNh'@;
put 'JitgQTt0Q0phRW5fbVh2S3E2Szp6KmgjaXJeUnBMSixnekBRSjMjdWw1SDwheTs1R3opRHtHSHg3YTl1PC8ocHN9e3I1X3JSaE1IdU5Ve3NGYn04U11QKHxiaGlbWC8vdyppXXgvQmlTe0xfcUlaOHs4RTlPLF8+ZWtHRDx0TjhIS1EmdXkkXztbZ3pjcXg6ZHtKIWROQ19NIUY4QCo5OjpTW2hx'@;
put 'NGxYe0wydiRBZkJLIXlqZWx6YTA/YnhZOjRUZzNZdilxZm5RQ2hiS2U7bXdGOisrO2pnY0BjU1hgK3dZczhBIjgjLykldSp3ay51ZXJXMSw8bSEudSE3RD9WdnBsaFVXfX40aFF6cWV+MnI/KlY0KyFkTD1xeSNkSDFfMElIPXhseSQoOllOJG4jT2w5Q0J9PHBtbUNpMTVBNHtJJXpaSk48Kyhi'@;
put 'RWlVdStobWszSjQiPCNZVjlsLCw8bTwmYUVMcVA5M1N4Jk4jYmFjdTtsNHNxbWNVTXV6NnJEYiE+dFEhYnBafGJpUiU2PyE5S2dwUDJbbD9qbE9aTHV0fG9dcU5naGlmUyRITnk8PSplWD1LUlg7Tlh1V0hSTyZXXzolQXM7RDl1VT42S2h4bjBBIkNYRy82eGxeP31uJGppdkRIfXcpZF94MWFg'@;
put 'SGQkTjs2WmdNSnpZUXFwXyZ4RFdJVCksUVMrMkIwPnd3Kk1lJV9bL2tifGhXQVJTQDBYWGxMODkoX3cqdEMqQyVOUEIrPColeTQ2aCk+SHsmIzxwfndGcUtRTT1heGNOcihHRERiR2plfGB5O1FWVkhMWG5UJShiUFVTNzpAXXdGYmJefERzQDIoXk9QdSoyaTtFVGA/ejM2Jj9DIW9aK3FRQmNT'@;
put 'WWJ2Uyhae3JnSHA9dUFtfEFULENaUj0mKCZaJGVxVzE3KT1jYkA0d0RGKi98dEc9OEpaKl07c2RHciFPWVk7NGh9TyRDMGEzN3w1c1ZabmU2OXVVK3B8aEczRUpafVt7bF9HUWA3Tm84Z05vPkl6MCFdV2x3SWJ3RE03Vntle180OkJDeElaTV88Y2taVX4udys0MGdGaiw3bWc9OHE6QEYmWj9W'@;
put 'ImRPd0s0V0tyTjJDRkFafnBbZyRYVzhYNkxBbVJeYF8+VG5bVi9jbFRUeUw7VFZKLFQ6eGtuenR0QW03XjBjbj91RERMNl5MWHh2aDBoPU5xaD1WQ1VkcXVxR2g3N3U2bitLaVNOYzlkP0ZqNmlvfj1HYn5xIzJCT2Z6Si8yS3BkflkoYnQrUmFLfV9BJXxgdyx4P2k9RDBMP1NLM3NiayNdKi5X'@;
put 'Jm55MlJvM055UlJ0fltSYls0WlZPNUlxQ3VKcW1iJE82PTdFUUBOMz40aipQImMsPSovK2xVPDpNZ0wmezgqbkgkaUopQSlPcld0S2tpUEJDMlRmTzVofWh9ZDpeeWFbVSU9IipXfDhZXW1MOyhhXjVnQGkkOkg2OjtSZTpIZWl6dDxMO0ZsbyxrXnBlPStSbVlnLjksXnMkPV9eWyh5a1pXaEgw'@;
put 'UmciaCpLfkcvbiFyd0IyJUxOKHxFUSlaQ35EJndsVzxCdWMpVjl7Ti9Rc25RRXxaTXtKcGBXVW8+N10/YF8oOVQ9WXd+Ylt9MntKUjBZe1QrUTRVdU5jOUV9Lj4rOHRwOGomVDFONVV1UCZ9O3k4ISl3N245JFJ1aXBhNUNrUjk5KDVkZkJLaEk0QmFiaGpDQ253X2U/bH4/cW9DbTJpaSlqc3gz'@;
put 'R1kuaWJFVkhfUSFNUylLP0M1WSViSGplO1RwNzBVOUx0QT4zanlaemRIVy5wQHUze0ZZUyZtITBedmxbKEQ7UkpoalVEZzJuaGRlcmo+OGRWT2sxWEx8U0lOSCRJRSEqdSZ3cl15c0xyIndAPWEjK0JaKnxzTTJYSjg6TUR4cTBpai9qUCk2T2RMQikjTUMrbFs3eGJaTzYiKHpFPzZEZ1VwK1lS'@;
put 'K2gubEppZXAxIl9JbHB5aUFsfnRNdkxaQDAuR0tEcWhrOWUlOytVUCF5fC8jU2kmSjVgMlp0aTglJDxQdiNJZFFnZ0xGeCpuXTI/KUsmJSFOeWldaXQ9KipuMDNaSy48bV1ubWFsW1JISDdiPXNpVE9HU11iRGQiSHM3TTt5fjo7XnVYPCszV0xkaTxmRiVoek5Td1g2Q052M3RdRCp9XiYyc09C'@;
put 'bkBDM0VBayZzWXovaXttKHRURWg5MDw4cGw3fmZkZzRnejB5JCkpYiYrMDAucGo0MnRLZi8xUmZuJiNKJmFSemc4Omk7O2c+K0NTXUpiX319UyRyPl8lJDpBMipeRWdOOCUzKFdSej5CcSZBKUJ0N0N2SV9rITI0YW0rWnEoTEBUWlNuNi9IOGtHLlswU0daUUx5TkF0d1ZCfSxdflFwRjtuZi5a'@;
put 'UTFMJWluSiVDKk4yJDx7TT4jXmh0WEdWKnFdXylbPSlUP2Rvc3sraWhIKGpVKlh4bHJFcTowSGdkMkAlPERLbUJhWD9OTkhkdnxYcHNTenw2XUpyOl91QFYoUSo4V3RMZSVuYDR4cVgyciVEdTlNJnFmbyZbYSQkcUIwUGE+KWc3RHR+Mm05KykmQ0BwcjBCIipFODwwRyF4MX5nejhNfkxue1N6'@;
put 'XUg2bXUpU0klIjIpbUFPaTRWfUswPS9PSHlVNTxyeXFbLEIoNUp2TDREL2o7L3RKQjtwRi8jKm1KKix2akF1clJUR3s4ckZBejVYOENwb25ZakU1KFpoKCokI10mTjB7R2dOIWtJciskcW5JYVt3bXJPc1A0L0RgNFhzWmh7WltZZ1E0YDdmU0pbYEklUVY9bFlvJVUkZDpzPiZ7SnxfaDc8PTpG'@;
put 'amdaPF9PJUZaQzBJeiRObTJBZkBhRTFgNUUrfnpUSX4iNHR1RDVxM3s1clBtYkxmZmw9VTFZR0h+KWt+Zi8jRmNmd05XTSs0RCp1YCl3YmptbyFMa25OPURbRip8L2RedmF4QyFrVHhEK3dvLzV5SkB2QyFGXzEhSWFzK2R5O2VFPEJJIz18NnM4c0ZMaChjRHdYbWdJKUROKypKdlBNblNke0Ew'@;
put 'LkppUFIuRms0T3ttXVsrRmBPdm58RCEoR1k/KUM7ZTBsfnJWUmhkejN8czkvPVYhL2xSQVFGe3wwalFzL0lfclQhR2BLRXZ0JUo9UE9MfGsxbjIwUyNEbDVbNT5mbEJNdCEhfngjRTxDfUwhNVg7WFsrNFopZmppOCRmZn5vMHFmYHlHY142dzJqPkBTfHJgbnZ9dDF8KmY3I3o7dXhqWHw/cDFt'@;
put 'KG5mPT5YKHZYaXVsWTc9bDV5Q2w5XnhgeEVHc2E6UU5PPTg0N0RBdj5AdTtNOk9gTjZgUkF9I2k+eChwdkNGMGRHcjdNfGI9cmgmK0J4bTE2aTElTHUmXjp5Vy82cjV5SHshRXMhbEU3L2ViS0JUdypFJUxJIyE5ajRJYEBgQlEiOk1bbmRwKEd2T1VveiVFfCozW2JYQixnRighaGYvYEw8dkp5'@;
put 'V3B2ZHFWOmMhNHdEOXdJWUw8TXVDPG98KCNXViE2b34oe09qSkxiL3MsWG9+e2A5RUMoVnZeOno7OkczOXklfiNDN1g+cEA+fEVNYVlYX2Z8UFM6LGY3cltQMWgpbDtwSTpMJi52P2ZQdWRHJT1NaHM+bTRffChUNTd+JUk5KDFuTXQpWip0UkJlQ2RQYU16PXUpKDliSWA2NEg5UHA1KCNYQ3F7'@;
put 'TyUwTksuYWhIRT9COjY4Z2RmeG9pQUhwQ3R5PH1hXWQ7P3k6aSp6Tl5QczNedT9IM0JFfThVIWcrMigvdzgwMXVmZHx+SG97bDdTYihoLCF9R04rPyFFVTV3XUQsUzo5ZFlwKSFJIjV0MT88TC9fYm92fDYpTVI5NE8wQFMvUlcuRDNsMSxzZGdAe0JJcSFyfHJzTGV9cT1tYnU7YXx8d1tmNkBN'@;
put 'ZFNSa15zbGUzWitkO2RfYENaT0JRW289b3RURyF2WUxGekIjYUZGcXlxSmtIL0UxRSksMSgwSGFyd2UpeyVPRjpZNjBZb3FLOEVIO3s6KWhfe0k7NmFrOnFiT2xQRz1qUjx4TThmY0whcH4lNzp2ViQ3IzRHeSlaX0AqRmlFJixIL0JAfVVCaiZQW2FVMTA6TGBAKW9zdEJ2KVM0K0xqdEtpdnVd'@;
put 'dzpCRU5Jb1BIaF9iUlYvKFFZcl56LE5QLlRlKG51fmhgJjlmRmNiflV7KH5Le0YxUG58Y3pbck1+fU9jJFNPLzZbRT1AW1BUIzQ6NmV5fXlHcWwzZDR2O3I5WG96TSFzZTcoRilYTGpmSk1lYDQoL2UjKS9CU1Qwc00iPnhYNC4kJkFrXkl2ZkRgcmZwNXNiSW53fWFRbmx4N3tXWnohez1OdmZN'@;
put 'M2UlVn1WOElzSGYjPm9JR0d8KFlgYWZiYCJ1WCM2Q3ZsPXF0XnJdISl1R01wL2huXVJRIiRLaXxGfGVZd0cwT0xWYSJ7bD1vOVFXJHNUUDpZfnptUlMmdyg+TTBFX2Rsd0dqN3BjT2gjeEM7WEwuaFsmNis5YSlqdiN4Pm9ISEozN1FlM1U7Ok97fkRsOCFvTzdLQUNBOE1XOSszcGp5cklxd0wq'@;
put 'YEp9ZzZPUGNUXyEzYnpiREYyZHtkaFQ/VCtVODlJVzRAY0pfOGBgWGEmM1Imb2FiaTIqVnQ7bERAa358VTtHK3lzVX5ebmZJKjZOMlIlNFBuZXhHL18oTUBpOUhRciwuISZDTmslUXlhYnw6e1NET1lrJmVrLCRgW3YrI30pS0haSDImKVs6Pz51bk5pTixoOTwvdFlTckdncGhuZy8qLyUlOVg+'@;
put 'YTRuVXM/dmxAdF9dZT4yRWdeTmBrXmFITmVxMj0mQG5ERkheS21SUEFHZWhATDplVllwMFpaZEA3dDpkfiVVW1dKZFZrRi5mNEtmS0YoW3d7Nmcwc3BpOkt8TTRtbEcyKUwkQ2pHJjY9OX5kKihUKCV6OWV8Z2t9RFlpUTB0LzVUYiFrdyw6NXNEVlZHQHZkOi5ndkRgZiQ6Zz8ie3cwTF9EKSYq'@;
put 'VEA+d21IMjpIYFtWMjQ0c0Z4MEFWPENIcnhzZnYlVE17PiZbeDpdTWJefW49TiROYnwkVV9mXy5OWGB2aDtwd2t6V2hwOEFFSXMvMnxnIXV7OVlOTDNybW4pZzs8fSVpQj1oUmxLdHtfSCUqOHteeS9nVHszVjohfC5HQj5nQnpoI1F3b2RCPzZFcVF7Tzd2UTAufFZ+ODV4OVJQS2QhY1hTZXs/'@;
put 'UHlrZHB8K0JPTn01eWYudXFdKmdCfHsxRDg9am14akxwaHcuRHVoLE9SbnE+ekBmcWVZYnI5N1gqKXluZ3pIdih6SzNvY35ZKntWKnkvOjV9b0VhKHVIOSN9ZE12SGEpYmdDYmgvZl9HX1JqUiVBWHxZZWFzJC8yezBQNiQvNSZgX3NXVUJ7JS9rYGE5ZlZeRHU7XWpqRDwqe2EuclVEZCo8NUY0'@;
put 'Lkd6WCh3LiUqOG5DWnM/bWFwOF5dQkVRVWRtVVZ8dnlGeURCIUdXUU91UikhdHNZKExNNFpwI2x1dixzWG4/MixkP1tdUT0xaHdrSFIwbCZzaGhLdmYkIWNnOygmM3h8RSVLTGtHaWVIV14kTW86NSEqclBRbD58PWVtPj9Kano/PkpIL3dldTZeeSRLdTg9aCt4VFl1digwYjZdeiNXYzsld2ld'@;
put 'aFNqM15oRj8mOTE3KjVuZlU0OFF4fChrXntfbkltZipJfHNgUTs4WzdtIy93Pnl8NE9wV1oyd3dtKnRHLF8jPl5tPDszJHZpenBpKmkuPnJGam07JkRwWEx3JUhPfTFqNT1oWkhJZ0I9aC81bElze0Q0ZWZUek8lU01yckJfWDVuI0dhIjo+TzBWImQ0V0J2UkFPaj09W2JKYl9BVlcuS1QiNVhz'@;
put 'MUNNSjJoTkQ0Q2E2IlspTUdCSj0hWmpMdm5xUltlfVk/NUY3dTRrcig1bnZEcGJEcy5iKkwlaXMiTjZRS3goanhKK2NAdE1vYXlpdHM6NjNwVTNQUENaO0Iqa2NrcUYpfkpGbCx+aFJAWjBIdkZTWXcwYmhWZDYwPmZrMDxHLFJgUHt1c3N+LzZ5e31fbFVSUD1+JkxyN0l4T3c8L15BSlU4UHdw'@;
put 'ZyQlTi8wSz5qW1EkaE0uRWRZIVlxIT9vSyFzUHxrVUNmMGJ+YjdENC5+VSp9NW9VQWhaP0osaUEhZXQzS1h6NWpBX202cUJhY1E/WmVzYiFyUVB9dUxuX2s0Rn5PaSl1U0A4OSVGOFJ2LlFFO31WMU93c0plKWIwITpidDEpPG03MGdFMzVxeH1xVXpQMjombkNERGVJajNjKXVlJjB3QTJkSylp'@;
put 'ZVhfITplXjE3UyYwUkhOZGouJiZVbWxYPUJ0MFZAKjZLTyk9ITtLaUdNWjtATCorV1hUKWdNTyQ4V3NLcCJGTHJxRkBsbiptMEpFNUFCLjd8OnJ7RC9YRkIydkIjMzxTOFZ5e2p2QyFDeFI/OEtsKkhNakxdTlF4eVZPQ3xWVy9NR0B5XXU0fns7MXlEaC9MVXNeW0lgSXJ3U35XdEEueylodzRL'@;
put 'KGJJKCxoK3FZOjRsLlVLZE8rbmI0JFdgUVVIM3FeNEtIcGhyMG4uYFhaJE91bTl0XTdGa1IoX0QuWjZKNW4qY19GYT5HRHN4emYqYzBebCQlQEk9UDxPc1NadHNIZCo+QlIlfEEqN0MvXmB9ayVGcmlfb1d3IT5yPltiQFJIVU5NXmI1InlELiY0dDptS0omM1ZwUmx0V08vJHdjLDd5Oz52ajIo'@;
put 'LHl8TVVSZnd3U3Qje1J7RDB8aCpyOm56Xix9OSZnejo9PjM9QzxAQ1QyZnRddEYsV0MzYk0sVjAvYX4uTlF2dTpUcDBzU3ptM1B6IkxiJWhTbD4rPndMZFZWQDQvRDV2WF9vXjUhYiQhUiJ9WmhKJkAsSyFSXkolWiNjfi4lYUVRdm1lbiwzJG13V1liQXtEdiVLZ1kyaVN4WD5jaCgrT1VgN294'@;
put 'bSx1M15IdV0xKyxlbH5RUGAmPilOK1NmSiJQUFsvVjsoPmFYIyY9Sm5sUF40TlAwLyEoOEozPVMrOGspLHZUY2lpcXVQUkx1U0xjamFLKklkMjVsUG44eEZyXlNhfVR6eXlKYFVvLDxxZkxYIXssV0MvNSRgaVA0RldJOVhFMWU5c1UxXUMmIW40eCRpT08qM29zVkR1RFdnYTAqY0dkSk1lazlU'@;
put 'aClXKWE+bm13Z34xZyJVaiR9I3dyUn1oME5TNUlKdFV0VzpgY2V1SyMxKDNXcXZpJHNHfDlzTm9BJnt9R2ZAY09bVEwoW3N8Vz5BKy9bTl9pLzFvNDU3QVlhYjVxaTFrVHpBQlkxLy5LeXdkVHc3ayksXn4/ZT9raytvLD40XX0mUzpUZzJWTGt4UVs8QCp6Y3cwJmUjXXQwR2R6fmEmWWVvYDgr'@;
put 'bmpOOTh6TTY6RUFQNypsIlc4Riw1Z1ZOMlUzJHspN1loKUhONyhVSS56MFVlQUMhJSN2fiN3YlFDKUpDM0lHLnV8RXhFTDFdczhWeFRyUldlZ192YF91QyVWPWhAQCx+UGpPTTBaRWFVLCxpNnM5I1tYWGUybVB0XyhQOzteT2ZtWXgse3J1SkhMPl5QRmIrV3xifHh1Mm47ZV04eGsoRmQhQEJT'@;
put 'fW8zM3lZVXRCYkl5R0lHLi5JY3pCPltDR15ScWBTSTJbKSFie1NsI1tkN3A6YF9dd25VMi4+VDRWNzBrSTZuKFVOb2BJbGFfPUQ1VHFgL1ApPXNAUSE7NlZLSmgyLz9dIXV4TFcuW1UmbjFsQyQyL11zbTBDRkNCaUJNa2VrNUp1REYsPnF9fSU8fHAscW8vKDBdbEtudGN0TyxUWEAsUFYpYV58'@;
put 'O3p7NGJneS8yfnpiMmxgbFJway9XTmM3XX5VaTtXYVhZW05uT3lvcHA2cWd0YG57clB6RS5XMVhZNWBeRks+TVohXylbe3pKOy5keWxQLEN2NEhlPTo1KGo8aUVWYCNTXXE5NE04PypbSUp0NWZBeUJQcVVzRHo3VTpHJnRoXS49d3o8c1NhVkkudU5dazZna01BLGdRfFpOflYhYVRvPU85Qmh3'@;
put 'SnkxfXF8I1tXSzZJdnNNV2Y/O1c6ZEN7RVkvV1Y/LG5dbyxjVzIsdmBKa2k0LyQiOz1IYClqfUhHJGlDOXtGOUgxSUsqVlRqfnwmQ2FiUXNWbnoqRkBRSCZFWn1tT0pYQnVsKFNYd145aTVGRnZUcEcmIXlxZ3h2ZzdYb11SeDslZitDZzgmWHZ+Ujh3R2BLZTN+NDlPaDVXc0cxI2MweSZvKm9X'@;
put 'Z0Q+NDtkW15aR10oYWU9L0U9WHt4R0BAUDZjUUddX0Q6YnRXLmUqQUQ2cyRHc0NyMj9QYTZnUCViYzNLel5WL3Vbd2YwWXBjM0VgZHVyZ1dncXBlSzlaIl1aMEsoc0dHZWd3U0UxdWtVRzdIYUl7SWhncnQ7XSVKZVk2KyM4WVJuUSE2fFs+dWc9e3kkemBDUTBHMHcrP2ZPc0FsXzk4OVZjcmlt'@;
put 'UE5BMFtIPmJEVy92fDp2TChGZCo5ZCVfbyY+TS5XIilTbTdfOyxjVSVodjR+ZDtTIip0cmhvTDt5OV44NUEydUhKM0B8X0NkcjdlLm40ZWJqbEBsQnpPVGRKM35QWUdDITNvWDFmQ01HZjo6NGwyc0pXRylWLGgvYmxRTDJJQEA5RiMuMzN6XmFeUyR+OlVQNX0zXTVlcCQ5ZEdGSnZLITheIkJm'@;
put 'JFpMPU5FfV11X0UhaWJsPHdYMl5+eWd2Mj84YXg0bG47d1IjMU8vSSFZcTBZNUBRVFNYdzJCQE1NMDU6aSJ2JHRGdl8pKFpdanx5a2B2QGFwOnchQHRSKjVGVFM5XiF7TS4pKkdIJWJoeSFeYkdUUEooR3YxKys9cnguUyw8d30hbiF4OEduJCVDVSJSQnBrVHFMUy9iUEBifjAsPXwjYylmYHM0'@;
put 'aFJZaT5AeTRTe1gjKChHZ1BrRUlaOiwwK3QoR0dmeDpjezlReXVxZFhmSDJYcFl5Rl1dIVN1LiRZZSVZPEpxXz5CKEdlUFojUS9fbkdVLm0/T3hLJTtLTyxnXlFHVmRZTm5gNFl7VCszMSxaZmcyeHR9ZWNFWFY6JjFGIX5ARV1gKlc+YFokLHxTX1koREJsLCFyKS99OXleZSkmVWw/fm0/OlE7'@;
put 'ZGVabm8qbj1+YWB2bEBCbjQ4ZGlBVmFuSWNAOClQTz5yPHJXIXhQKl0vMVRqM3ZrL1J6dWM/Km1aW2o3THR1YFU0cT4odmgraykwLzt2UUZ0dkUhUmAjVzhGUlZzaj9IMl5dSEVHNG1+S3pNQSIya1tpdHllVj40SWQrb1suMGU9d0BSM1IqU2EjSXthZj5BcDUmKSx+WyxFNSpbOVE5XzVkSkFI'@;
put 'TDopMz4hYmBBR0wjdnVoUE9FPHVoYV5DJSxKOHpVXjU/OjVWbSlhKF08P1VhcVNeJltJNzpTNkIoeSt5UW4oNztlaSFnfUhwdToqdFc7O1ZCMjI6bjowSn1FeDVJNFpeMEdYVHFaJTUsND88Klt+KGt7U2czTXdKbGgyYWE/aHFlU0xaQztuTEBUZHA5ZVYva3BxQ2ZVPEk/NkMuUmp8W3NYPHgp'@;
put 'OUBvI01TMmAqMj9NTDJfIVEiZnpIfG9tZkxpZTJlQFJacXVddyUuNjdIdHwkV003QzU2MSM9djM8UFhrW2BHPSpwYktTLiluLkFJY3piO3hZS150UyN9L3w0Ynx7aTE6bE89MH04cCNoVjdCOEB4WzdsO1pAI2NMO2EhRXFzY219WXVNKUE9Tl05JDwqczxeb1J7VjcsKFt2TUdlcjhbUDhAM09Q'@;
put 'UWVQIVVFeTlNSVdOXWRyLDcyJmpnQi8xN0RjQ309ekJ9N099QVVOUz1JczpIZ0QlTXIucFt+I3dHIWAqTykvRFRRdG9xRVNdc3ZpKGFUNHQ0Z3M4NmRJc1J+NEU0OFtOXVY6Y3AsVT47KnohXWMuRTYmU3Z9d21ENyU6ZUdnJm45MU98by4zdFhXTENUSDVtVnFNUFhYSWUxPUxbWmMzQmNaZiY9'@;
put 'NU9ySTVFd2tXRHwjSmZrRytkUXojaDYxfDcxMVRETWtUbWViMCx7YntDQGtveVMwWSxqKFdzY0hTMXJwMiZWN2B5PWhJYUMsRmMyTFUkV2B9YDdsO0c5YTsuYmVzNSptS3hDSXlibWJeclM1PUE6aTE3QnVeJXYzazA6QVFuRzx8PGtbNyorOyFvQlY5fSEqKVV+RnIhMWZ+VW4hdG8ofXJ6XT1n'@;
put 'bGEiRDF9NSpYOyhja2ZhPE5WOkltazZjIUNRRE00ITJKdll6ajdIa1d1cCk5dlRQaX5ZXVt9KltbSH5xd0hGJGlFdDZ9cW1+ME15JmpPYCQ0JEk6d3ldVXJPWmcud0MxVEVNc0RmPHJ9WnNAKiR2aXpxd0JGUFMrdEEqRDxWIihuTlpUX0pWUHhVKlVPRHF1NUAvbiFCUGA5W0BrUm9aT3F0RUUx'@;
put 'IzRjWyEhVExYKmZ+V0U7UDk5WkRFdnRoaTVWRGJgZyttIXsrVU9tN0AoSlYyNXcrdkh7OzA9TyNdQ0JbTS9JeXlkS0FRN0VbSzN4TD1sLkcwT2xQYWZ7JnBJa24yV1IuezlbTWEpOVpuTEBUdjwremI9bm5VTUNETjl7eD9nUzB6KX4/cUAscCtefSVRTy8rMkNhITszZyF2PT1ZZyhoa3c1ZGdK'@;
put 'Qls1aHpQaTVAIik5fT9UfGx1b0J5dUhGUiFGI3Fsd2RBRWBKIjchQHV5ekBWdnx0elc7TWZvOlZ9aCEpMS9qVVAxSXUydWMzbi5aO0hULEVDMHJ6Um5CMEVfdS4zXlF0QW1oOXtPPjRXWiQ0K1lqdj46ZTtfYVcoQkkhd3JdN1A4JCkvS31vOG0pdExxRV5IYEo4V0YwNWh3UChrUCt3KG9pXVYm'@;
put 'VT1zL3txcHF2eSheb1lSUm8+dVF1W21Tfig4VEJrKjMuXUk1bkNgdTA+bVEqfTgoSiYrV0widn5NMTh4eihmWEUpQzdhczo/YWhJJFJWPUM/NWcval5ERmswXSt5RklbMTU1a1pxXnIlLytjXUt3blZIWGcwY1QkeDs1X25qfHtzNV9NIjJIe3E3OGsvWmd3eS86ZjxZXWtmbHFXLEZTQ1p1QWVn'@;
put 'IUA5XUNgdGZ5WSF8QU1oK0Fhd0UmQGAyRzIyPH45S2BGUj46KnhpRzl0cTYvITtUY3xdZCNbOTtacVUuPFlXM0ZuMS5VLiZpbi5TOShXTjQ3aHYve213KTllWjovdmR0T2wkRCkhbVdmZlQiSCkrJD0uW2c+Jm9acl1HWDx5Q3VvLG5pWSE6XyNMVHF3b2hmfFtQV2NbOF5WW0ZBc3FbRXZxWGxk'@;
put 'dVBLcU01MWAuXW9RZ0V9WDRWMl1kN1pHeDUlODQ1Qkk2fXNbeiozUy9VKUZ2YDVTfVBdOzVNZlV2MlJwKlBQdn1MI11TTD1OSCIxWWhRUyIydDs5e3VSciRSS3xlIm8pSGJZLmUpdkYwQ1tffDNATT1OcSxvJD9fLl84fjtjUnFFZF5NNTh1PDdKVTRBQU5fOylQTV44enRjSE59alQiKX40KExZ'@;
put 'TEcpTDdaRFFoSClnMlVKREowS2gmejMoOCR4OVA1PSFrPClgcy52IV4laUxqTSZMVVhdLFMqbDZDZl9TP1kzSnpSd2FuV2BRWmtKe3RKVUhFV09VZEVFfkxTKW5BWjdCd2M1YDZIcHgqVWJBdnxtV3x2WWAjbE9lRXEweWB0YjNUbkgsJTpwNiwwbWhAaitMbW53VnQqaVpzKTt0THRrNGlLaEhH'@;
put 'eiN6TCZQdyNSPEJbMG45N1dhY1JAMEVaX0NUakd4enF6bmxMMFZSS3AwdmchJXBuMkdRVWtDW0cySXI0NU9VZUxbQ0YpUGkyP2t3dzhMSFd7bGdaS1g9YDxVS0hMYHwkbEF9e2ZAWXojPFl2IVllOEZ3eThBeVRbPHwxSm0sWzhvVkI2KHYsOExxLmRoZ301I1hNWWYuVD11ZzVzOFtWUF5RL2RN'@;
put 'bkRrWXpyW0xIVltsbTppJWlZa2YrX1Y5KEV0XS8iXVZSMSxlPG9gWzxke3FUR2BwNFRkeEtWOVhHajM0UzEvL0VGSTNeU2wqKHpWJHB3Lnhtb3s/Nz59LlEjTDs8eD88P0k/K01NS0thWit8fW5qLjlwV0dhNj8uTWN+VGNARUt5eUliYkwsK0lme1Z7fSQ4PSZNLkBMezBSS2hXOW5OSC8wNmQo'@;
put 'b0l4O1dsS3MvJHNOcCgvM1twMWNPVU1aendWWncuWjBxQDxBTXpdODFyKEV6flJ1W1Y9XyVnNHFofEdGZSxmSHYiYlo9RkoyPGtRIzlnS3JufF0hLCVJQU9gekoxKH1SMlB5YyU/JC8yZGxpb1FQblJgSERvbE5edGk0dWY8bzg2cjg6RnciO2J6dT8wd1FSTGJjWmV4XncvUjBAP1h8JlpHVGJg'@;
put 'fHVMQVdOWlV1VDYwPVZ4d30xSV1DUzFQc2VmUEVac0VVLzRNJTxsWEpKJE9KdVQpQVo8aCF4PCtKYkNeamY2Iko6aERzUyQmPUJbRHtrKitTJkB3MiVuOHNUdXFecTBqJWB8QExfcGRSNWEoTlk/LFhpVjgoKDlhXnsrdUM8UG4xTWZBRGFka0gjPjdIW3hZK05nbTcsazg9UnBLU1Z+XUNmOClT'@;
put 'MXd7MUVaT2Z9bW4qfG5BNlY8I3tweSU7aS5MY2UrbStifV1WVkwjZGozNUFtb2VQeCNmLGRxZXVCN2BuLlkkNE5TJlJYY0dKWH47diQoTGUoQHFbTzElUVF6LmcrQ2cvXUw3TyFNPlNDOl92K3ZXSDc7bzVZJHg6U3hkOEl4T1I+KGcyeyM6PzVgZkVUU20hTU1vallje0JWfDFCeWZzbWUocS9l'@;
put 'P2hEeHF1aTw5KzpYbEUmaWxKNWJZSEE/OWVUdl9IamM6OllbM0lsWkZmYytWZFVZMyZMWktCVjE2TyxQeFh3cmcvOmQwRCNGUCYrVDhgTH1KMFdPTW9IcFRVb31FdClGOiU7OV9CRVIseHQqUiNXb3M4T1k3ZzVJNnd7aCU8eXohOCVycUhqa2doYm1zKFVnJVt4eVAjOGZpJCxtbGhSTmUuXzk2'@;
put 'bDlrNlk3L3MsTSZFaDhHeG5DOWZVNnFxI1FsfkpUVUVVdzM3aTI5Xl0yXy83XzhUdGVoNSpTNUQ/OndTcTJNRWlGQ0hqay4vaEFUYzp6WGVsWGtBMz5bLCglVT43dTt0bnxVUF9wL0xwLEZsTS5kZSN2Q046N05xfDVgNVomWEcwKHQjczlWQSg6THM3bmgiPitJK1Z5KVB1UVptIVhSS1FjXkVw'@;
put 'bHUlXWR0UEI0PWwpUlcrJldEOmNkZkkiWVFzMDsjOF9FcCNFbD4hQkt9dmFPKGpNa052PUlQLFtrNVNfJTpybCRETWQmPndpZXY3SHo8Rk43N2RxKW9FdzdebEAkOHZQRzlOQGlkTEdOWVgpMkcxVldXNChteiQoR3x3QnIoZXVNV18yRERTUyo6JSQrVmN9QTdIJkEuWnN1Z2FtbE5KX3dJRFJe'@;
put 'fEd7Mjl6bDY+T0s4XkBHfjdyNkIhVV9HcEc8b0R1ZHV8fGdKUkx7ZH45Q1NpWTlRPEhnQGYrampddyM/cT00Zj5LUWxOPT4pTC42byxJRFNIemA7OG4yWyl+aGgiLCRAXSJ+I2FpRmxGP0x6XUZQOkp3NGBnPyNKM0gzLjc2Oj0lUWJecXtDN2VudS9qbEBSQzt+S3FUPkVeaFlMZCZPWFtuOHVD'@;
put 'YF5YI3l0ODtfcT4rJDo3XkNuKlM+SzlJQjFBNyMhbWEwPlcsS1VyIyFORUgsYkJLU09XPXJ6XyMvS2opWDVzTDFWcjZ9OU9OWDdDfSo7OjVLKTEscW9tfiVKUU5HOi5fKmsrfjtXalJoMmV5VlJzcUlqZWd5YkozdnpNdit+cnN4YlJ6SCtoTDl9eFNIZntOWnZVaiI0Vzk3eiNSKTowPkxuSXQq'@;
put 'WzE0SWhybTsqSnNOb3lqTiZmUnE6UmhWWjNWcyswXStjbk1SMDovOkVPN0J4ZCE2TWo8N01WPklJXmApbnJoaip6fj1ScGxBS0pCMlJTbWhtRE5ZeUdlRj4xPzoqYkNoQSgzW343SkZqWjZsN006ZXUzRmgqUTp+TVtDSlVuZEskdE59Wns4bkxDXVptTjl8X1tMUjcmaiZPa21lQHcuNGlWfnsw'@;
put 'V0Y9MTFaKEB+VC5aKllpQmhnfig2JjRvaEUlSEBuQWdaTDl8cENmOXZYJjxuZkJjeDgkXlRLT0ZfZ1ddMSMvZFh7YTorJCNMWWNHbiwzQC50UGhBXU5SXnpici50WVl9Kzh4UWh7KSxlSDJbU2UpKTJYW3RvUE9JTGRYYX1UPnR4KFZQSTY/QnVUWnx9fi9kTSxnLGR5OjYrRmtaNGwmVjR9VTlW'@;
put 'aDZTWXBUaFQuQjFZeykwK2MhMipYeD5JZi4lKVZdZGByVHFmOUl8SC5CSDcjSS9dbS5fKSJRY1RnR0ZAfWdbSmQuWXFWIkp8UTVwKXZQUm14VWl1czQzfmBbVTMpYkI7aHlnP2MmdzMpRUc0YE5RPiMlU259SUJNKGxuazVZfFt0IzkhXWt2fUwrKX1HcTc0I3lWbF0zKEVOSG5+WV9USTp9end9'@;
put 'O2wzJHxxZE1lVEZhalppfTAqMyZdIn1DTnl4PzU2KEsiaWxqcCRsUTlKKDtsNzxrTUY8UXkwLEYsKChdcTo2ZzNiN0QlcEFXQiZLZHlRMFVJQjpaVEZ+R3E9dVk/TCttPSUwYCheMmJiciZbTylEcjEkeH1LcixaZGgpVVReaVZpM3BERDFkZk9+b1hnYV4rSn4qTWEiUWJeKkZPeChoQjdvIj1O'@;
put 'VXM+X2FTeTgxaV9YZkRALilvVE9XPXxCUnpjVUpKUSUqLDw+XT9EY2VufXRRNClqSTsvSmM1bC8+IyQ2KVp4ZylrPWh9O3Q4UEtgfUR9YFgqfE5kRCVnWVBgdnVUIzdKQGojPEhCKSZCTy5VcDIyPT9LJVUpPk0vViJLQ0wjRnxjOzUjXkdAbGw3VFoyY3ErYCEwV09zTklgbU9pIWJAWXA9K2tI'@;
put 'bDRLVGYhJnE3R0JdcHVqeitoW3UoJkNyODI/ezNoRWN8KTlHdEVGJVlmNTo9a24zcHdVVyMvSWwlYUt9PShqd0J9dyFpWjNLJV9NSiYxV3g3QEs6XUNII1ZpITBhViE1MFU2NSV0cXVPWmZMZSxjOVcmPUsoNDB4JlZNOGB3O0tXVClgRFc2NWwkWD10NXNtWD57VmtLWGl5fHU+KCQ5UDxeL1ov'@;
put 'dGA1NmVaKmM9QSpTM2BPI3JUeC5IOSM+Typ4L3puPWw9PmZhVExGTm9oTCp5MCN+Zl8wRzJLek8pdE4rcVk/d29yeyFXLz0yIzQjNiZNd35AcShuVSQ2dVpveW9xKV0oaDYhfD0idmN8UXNCOlR+TCk0JElEWX1XVzBMXV0iMF5oXzdCYXFqWk9RMl0qKVhaNTBYWmouRSt8VWcmLkVfSzZPMWpK'@;
put 'cTBELGVNdmhXcEZMQHp4eG9vVCZIIyVWeXQ9R2A9OEYqRzZ5M1spaSxYOV5LWzBjRkokJVNDWlt3Vl12U35aU1RPekxodHBqdHkiYllLYl1AKiolVXEiQHcmIntLciJQd10lOiQ5c1EyKjVyV045eiY2cnt7SGcwXzltZkwhdVMhb0UqbTw1bHhUKHVsSk1QRHxdWUI2PzF7TyI0dT92Sl5gYFte'@;
put 'bGd1Q2BobUlTRlkrdmZMR3t5fns1WXlURyN2U2hoZVgjaClPaEt8ZlI4UjBEVXxvZkNsS0s7R2xIYHcjbUJeVV0xPWxrSEV3TVROcmZ9OD5XJkBrOmE9ViZLPkgpZjhpajReRX53I0FUclVWbl9SeTdaQDNRbDR7QjwvRUd7UDNQT3sqWS5mNkw9ekBjbVdmLlBnPTYxd31OMEh7e20hTmlgMXAx'@;
put 'I0doQSNzYlJNIWxFNHtqeWlaODk3QnAuXm1VRVliPlkrdnJdfmFgYFc/VGZpeSZyWzciNF19d3BNXyQzXy93QDt8Z3IjQ1dPMXc/VEIiIyR4L2ddMDg4cEM6KF9lXUxmXyFXYjBuLmRddnhrfDk2eUp0SC5fMVVxXyxaPlFHM0xmRiR3NSkva1hZSk9QI203XWxWME50VUY0YWdRYiM3dCtVTUVW'@;
put 'VCVpcVt9VD8qNGhMUy4lWS56cDg0eiZ9VzY5dkAiL0JfbX4+OEoxMkJRXiYmKyFKJTw2NnsjYCZxVmd1UiwyWGRSL2NCZHlbY1BsfEFJO1o8bFVbV0gqITp3PGFTfitZSzdUX14pWSZ5MXNnSTA0U3hhcDNVOlJTOyV0JDBwU3VIKFAhTW8/dVFfd1o9Jl94P0FzdkUxe1dnYlFpQ0xKfEQqJV89'@;
put 'X29ISX1odjFOMWZwbD9dPnh3fHQsPDBiem45VDZffWBfbWN1Mjo6WnpfNlIjRiMkfWU2cj1uI0s7WF17IUduaTJHe1VBfnZZPHwkdXtoNDV2ezs/dHIwMSJ8NHIiITlAUSkkUCN+YEZMWnYyX1lUPWNodmA3Q1tdXWEiVEgoP0l5O0wle0ZZTnVzdjZwXTJWXkRRfV05VSY9S1ddU21qUHpJcU5O'@;
put 'OXpxUShtWFdFPjUrKmtFeX5WUXBONDNROiZkIkgsd1tFbHBPOnN6WFBvLD4jYW1rcD9wbDdhY0N9VTNwSGApIiZXWX5tcGplKStmQTpbcWtDZDJlOUFWRnloaEVtdj51O2loUzhHZ3w/U11NUl9vJHZaRGpvRSM1TyEhPDk9KjtebSVGRD1wLigzR0srQU8rTHpiVlgmKCZ0amtmcER6PW5IdDB4'@;
put 'JkVPTjN3VDwiL0MzKHcvQm5ONVE3WntuWi4jKGN5XiYoZEM9L09dN3xRcEJzcSlIY05xK0lNZTYpS2R+M1gzMzEpYFBXeHp2aVIsZzhNfG5+Jl5hbVEjU0ttQnI0UGZUVz8saTl1LGRZKXV9Si80P1lUQl99RUg7b1dQclVeXlE2antHSHVvI0ZsVkUkLylsMFc8dmVGY0phUnUiJmJEdk02cVN2'@;
put 'Myp+ciZmeyJ5QkEkNzJoTEJrOU4rblBdbT0+P3ZmIiZJfChmPlosbUsjVzZEMWRYSTN1R1BfT0hwJj81TENwXV9PRV07IUlkV0RJfTU6clpqaWY0Sl0vJChVfVBiN3RUQGs9WWpJTmx5WFc5LzZ7Ji8rd30wN2Y8Y1EiZH5wVGVUVzxaa1VGXzRwN2toPVdWLlM+YllZYjZbNkQ8blp1NSQuPVIu'@;
put 'VyI5Ql9nN04sQGxTJEJdXyxJbjpSVFVVZ2tzXn0zMzZBT2pxa1A2U1tAOXIyXkRqSD58PiN9NHhUPyolJCRWamEoZCZ1R1tWTTxkVlRlIS56dkFbWSZJUnxXclguKHhjVm05SFgkVk1XUXklMm19L3Q/JVZhXUZ6L0N7aigqYGdjP0doKXo1aDYxLFc/XkJMel47eEp+azI4KGgyVFsoODpvMzBA'@;
put 'Pl08dzpGImRSTnJVSGA2KChFVU9TJTheOm95fUlQRHciRWleRTRNREdfPHZmNlRpcE8jRGptQSRlelhsfUBwZHkoeGA/WFB7IVdwLn05QGQxfWcieykhOnglOm4uXkE2OTVKRF1ZQjFfVlpJR1ZyVGF9cFA3Pn1pbVMpJGhTNWo1b0F7NSRFX3tOQDVvd3x1Mi46PEk1YFl6LD1LZ1B9I0J0NS97'@;
put 'KDZ8Ziw2aXxiZGRiYmwoLiopQjJ4RWlba2poSn5EfD8wfHZ6K2I5IVhzMGhNRzRiO1tyMnU0eFZpe2NRQyFhQD53cDImJWo/MkZLNjlVY149XX1DaiojYWgoYElieDBxe0ludTMyYj1bY0BWY2pySERbTH0qYjU8fVIuZyhZOWtfMnsuLDMmeGFjLCU2OkVCSnsldmUreHhYWG1Yc29FMHRHT0Qy'@;
put 'aWVOVz9SZXZ1TjdaRSR1c1B1OHUieit7Pix1cUwvX2N5cV94YEVXT3ApcU43VlZJb1tAZzlQOjJqUm5wLkVdfT88Mm1gLERIIlluNElQLjsoZm54TFNqTXpMbEVNXi9acVRMLnVSTzhAfCQvK2ZEQUFnQGtTfX1UZVF1JEIzYmF3ej5sUl5SMT9ofGBrXU1ePi9lNipwRX0sIlohZFVMbH5oZkhE'@;
put 'fExuL3JINkldOTJ4O21BMX00ZGYvNH1PUmQ1OTE9dHB1dGgwWU9vcytSUk1EZ0F4YlNhOD82JWIkPEJ6L34jUyU3ZEBXLmJIVnpJeT0xLHlOWz1hYSprST1pL0t7a3o2UUphZmxGPChRTj8/LHk/cipoVlFte0JiIjVYdUkmS2lvTiZlaFJfYHdGfm1RRFZDSXdNKVtPalsiXnU9UXNSYC4wOVdq'@;
put 'ZWR1d1JIMC87Vj0+Wl5+Zm4xYDFQWX5JRjQxbCx7dSpnZCxDc2JmTmdtTm5PfnV8MU9GS3c9ZTtIPWQ1S1ZsN195XyhpPVVYKG9lUnxqN0I8NjtbcGhJSkdKUitMXzNveW1Uei5GciJMeS9EJH1WXk5GLkl7UCpJLHUqbEFCQmFETXk/NklIKj9XK0Veczs/LHFLNFV4blJMek09eSguZzk7OkpS'@;
put 'ODxbTFA/KH1DIlhqWzNrY3IqYUN3aWovPTMpP0hWdSomT0slPUQ+UGJmKWl5eThHdX0oTjZnYDtsb0tOXWYjV3BLfSJ3MWo9YHxfdExCMjhBN3B7L3VUUSJGTi9NMFh3dD0xQDl7Kix6RGJXPF5BZUJ8ZCRlYFdLVkk3YUE6RnJJVD4sUENqZ2tNc35aLipqKUk/TzpVa3RgSTh7VGVGSTRVM2lq'@;
put 'SStSO0xDYCJiOi5HdmR7RjQoandQVyp0ZFksaXx+MjxZO2BWV0JHcW47SmxRI0o+VGZebCUlfG9kWnZOdHlESGZFfm1yeSwyJHxnOjIhcTMmMSouVzNbeWJ7b21Fb1hbakdSSl5baGpZb0orP098Ly8+cUJ1KytmaWJSRjw3SyNlQjljP15kK0F7a3tbKXc3K3ZFalliZD9MYG5PIzx4Z30qejB9'@;
put 'fUhTOWY7eUg1eTxlRSJqRCZsZlNec3NleXVDMS5RM2NyJDY7cnxSRSpqUntqKz1WZXIkSW8qTDIlMVtGSmRqOnhyVksvZn0wZEIzYnckKyQ8I2MkalNwKm5MZDB4JmA+bTZEOl1UIjshPjdXKX1URXV7OiRne2Zta3d6RV9kdkxoMzNuM20xY1JdaTE8RlJnT0kpK1RdamVdd1o5IW4oRzp3TXc5'@;
put 'U0lpVXd0YXU5Mj14OSJSO1EwU2d9bU9vITpCRmt9b3c7JTprYEw0eD11Qm0iSkw/K1RObTdGdkwhUTh3dWY8eDJbNz9RTTQoK0Znc1BGfipBRTR6V200VHQ4MDVeJEBIKTg4OHRFbzchK3NNYW9aWlFRZVk/JjhvMmdzVHhSWHo6Ok5lKHpuWj9ETWcwMyMrMDdRaUdOPzBXfEB5K2Qodm9GOXx0'@;
put 'T2JYNlFMWyQzeTA+Q2M3dk80TmY9XzJxWSVpbzU1XXByeixJTk0rNnJSZz1UQzhFRFQkQHkjLz5AZDBxRFldP3xaZWBSUWMmYEc4O0pQQ3xbRTt3SUdHMCx9Pkl9TFFhZWROc2tXdSt5dGV9ZytMRSo9dz9rSDFCckJ2WVhxV1J5MDdYNWQoWF9vQjI7XXxtW1tpbVVCPVA1eDQxSlFwWHtaP3BE'@;
put 'aDxpVC9bMDdVbilYMEEzT1l4Nj1GRnx6TS9Oe0JESntGZSYzbn10Ym8hV0M4R3R3aSMzQENwYEZuQl4sPl05KHwxSHkqTyIiL0RqRSUyZTw+IXAiaTFyPWB2MHhDZTQ8JSU4WkZfeFRvZndWVlFTXSZLYVBSRnhEKnV7MkVSNn1bd2JVTnpfZjVTPWRwN3JBand6bDhPIiI8MVByUSJWWHMhYi5k'@;
put 'bElJODpFSER1VW9+cjtwWz5bUWxzdDM/P2I7WTsrLFNwQDcrcVQ4JnBYYVRWPVJWJE9uYm9dTj1kTmpWI3A4XVgrYVFZJjJZKUI5NlRfNz5EY0QpS2wybFJKcSVxbVhRLEk8REZmVT47dj9wfiRfMWIzPnBCbGxWXi9QX259M01HMjw2Q3Fvb0swWzBlZl59KCxYZWpvPkA3eWx0JXZ5WUo+T093'@;
put 'JkEvVHJBMklORWsxZm05dyZNUDUvJHB7cz9kN28+bEYkOD9pYnc9Q19VcDBTQmAlfUlNYnl5X0tKZUUya2ooQmt6OGpaW1FdZEttOjU1Rl9MUyUoTEVBSnpsM215eTU7XUhYJUtkeyFMI1R3OF5yYyhXQW56QFhlanJiLkt6YDpdaS9wZioyR0ZXTndfN1JgfHlCLmUrcFAhSE5RWnFNVW80N1Q5'@;
put 'S0xDKihIaC9zSXE/M0lrW3pbN0s5VmlSYXY+YU0xLENCfCYmY0FxeW1jcEUzWjw9am9zNnFMVFNHTlJFRVY8SDp+KHM+Q1NNUyE/WEZ9S0RPeTpxc3lFbUA8XkRgbkpXP0hYMTA0Tz1xUmc0UWo2TCs6S1V4U2haJEhBOCR0Vz18I3tRKjtCcTx3YV1xfWE0cUQrS1hNXTxBKDRjJEhaOyEpSWBQ'@;
put 'eEFHJUt1PVljKmtKLzlnQytVUUE6W04lQV5tOGxNd2ciJDZDQyheYE14PUE6ej5+TUE6WG54U3FhOHFVUVtkOy53VE1dRHMmX0dnUGZse3AmeFBPYnxWUlQwZCRzIjJnMG4pbFMuVkRsSCghVVcmaiYzcUV6Om8peHFZeTVaLGloaHBtUVMhfUcuSSptSDNXNXtReEVDWXQlPypEP148VntjJCVg'@;
put 'Wl4vPDpzPCMxPUFHWFQ5LDFXPzhRdmxbODBrdGMhZV43SVM5a2V2WURtfGVHVGhPRWY8ZndSRD5bNnJJWmsuWkYhaEcmRTFPP21QVk00KktRVSpTbyZPPVtsdW9wLGgyayx+YjUxfGt5OXd8NHdJVCl2cT1sY3ZSKlJYQ0s4VUUpJCpKeW9yOSt5JG1VMkY6bVhgWnVzWC9oXjxyamJxTyxUT1Rp'@;
put 'a0RLeyIxSH0xN3UxWSw9d3g/eURlTzJqaEVWZihCfGpHVFlNUU1pUmBSU3hAcjgqS1I8O0g3T2lAPlchaVdFbi9wdUpJTmBVbDUwUFcrTH5+ZlRKSDkxdVFfcz5hMjVGWzE6JikyTXNDQGZQb3ApX3V8Mz9SbGUzUiFud2l+RDJedzt7N0hGcD8wdGs8X0Y5VlQuQlUmV19WQWx6Ql13ZjsrS1db'@;
put 'KnoqLE0ucjUwckFtViYhfVZ7NF4vbzh0K2VAXWVHW2VUQm58QGd1OFRmQjJTMExST2lJUCY1MEZ6Yk1DNDspKX4sS2VMNnNMb0ZWUXxOUVZhbHRbTUZncix7XlEwQUwkKX0mblBMdnh9bXtldW4lRl06MXIhYWhbTVhHbzhoejFiP1l1ZU9iTEVgK1J6NDZqd24mRXxTOk8kbW9ZW18mW3RjIVZG'@;
put 'UjRLdXZxMCErIktBVGBHeHQjYmFoPDpVIX5dT1NtaX1oNUFQaVc5Si94Y0tqI0k8SXJWJSUwZltiNCleVyMzNzFnI0hwQDM7U1ZQX21hZmJrISFfSXhqOmVnfWtiPUZYMWM1cEY4MUBoX1duZ21AVmgjb29uaCM8SnN3YVVNQHR4ISRqNmwjfDhVUFVAa2QzNmx3QUFAal5XIy51UFU6NW42ajxe'@;
put 'YXEqTTdJNlMiKDxBOG1nSiEhYCZQRVV6eEVnQHlpfjU2YSFPdFBlWE1ZOjtsOzA3e2V+aUxVPncsTXRlTEhVdmRMaVZGazYyZ3J2JnF9SnVvWWB9S0FVKil9S2RMMFBXOng0bGpHYXpoYlUwZSVfSG4hIk99L29VRDdwUmZ7eH46XiE4JXFOc2dQdlkzaXtfYzU5LyNMYll+RChYUGpJXSomK3sk'@;
put 'QSV8IyNBNCp+MzBwITNHR2EjKGcrcSohPkpQZWErbCxYdzUkKkwyU2NRXmBbSVRRVkZgSUl9V3MwanZSPSs2Rk99eT1CL0h3K3IkX09UQHJaI0RkJkkkUTsxP1B7eHc+WDBuVChsO3xRSTF7cnhxKkJ2LmRxfDdHWl0kNzVscmtvXW05czZoJiRjTEREeUNBfUZnY31fcFVpOSZgJVBiP3Q7WF9Q'@;
put 'dyNpN15dbjJnOnxSO18xfXUrWShZT0pOYUw3W0l0OmBfK3BfcClxPX56JWUqUD1ERmpifGQ0Q25ZMXRuclQhM3swaDFCLH0hUUBEVW09WWRsaTFYUyY7RWVlWCg1JUxxbGAsUDdDaklgaW5FOjdkNm48QWhDYF54Ii5HOGd2bC9nYnRgPWRGTiJXNGx+ZXVWWl07UXR8N0hxNnt4eWU8eDokQS86'@;
put 'NT1HfEZkZUc3LGJ8aSghPnFDP3d7fVVvbTw7UDBIRU9BTjJEc1BbaFRePjkqZjkocFVMJnVpZHJ2dWNDVEU4Y2xjOWlwfDtBMyQ4LlZATnBDK3s8XnNtaF91YCExSn1pNGxSSE4pfVliITUjTFt4KX4zb2tHOWE5QFNGJEZEc3J8fGdXKEJpXVB0cFlkUFJeeC49QktKXSEkPio5PVhwQXtjViN6'@;
put 'byNdaG19TXluUlF1ZTFmQCE4cixdPU1OO2M9JDdXYCFzMCRqND8rRS5na0dCeGJYfUIqbWc0Kz1jZExeR0BsQ1FGdnsvP2IhNGVbe1IkdHZuUz43R1ImLGJOfEkmQ1c2aF9xfUhiYjI/ZXpNQiR8TThaMzglTitVJV12OnUjSH4zcVNBcCQsPlgueSUmTUw3X111cWJ1QGNnODRaUjkxPWB7UTRt'@;
put 'QUpCYn5FQ1M9RilTTWZPS11yOWcxK3tPVWBQbGNNckNPfDJdODZyZyU9JG4lQVN2KnFEISNqYkR1fld9Ilo/U0JgdEZ8aGI7Z2ZZT054SG8qa2IoRmxxVklEaWc1UC59ekpnK11fOV47amh2anorQ3ZNSUshQXtGczRFL2chMmdXeW0mJDt3RChyX30jQ1ZjPiNsPkxoPVJ5REouJlJEPSs8JFB3'@;
put 'R3p6bE15RVRJQnl3Tz1oSjg2MFNtPzkhTUEiTFZhPEpHUTN0KGRmUDRpRGxkK35bP19MVGpFdTZydmAqKTZoIilQJCE0JWhBcEs6Xjg6VCkoQj1YU1s7SjRQS2B9ZVRsaDwlMUtnMkF0KDJbTWc2fkRjfTxxKEVtbEAsemFWR28+SnpgQFBxVi5YMnhyWGFVQlU0ekJzJXB9VCtsPEAzT0F8fno2'@;
put 'Njoxa240MUUrQU5JYWs6Znt9PTVUQTNWMitsZno6dXgmOl9RYDoiVzZGfSEoe2RoeSlqeHZUaj54PlAsQFNrPmN+InYoVzojVGk7LHl3R3ZifmVFY1JEb194OThKTitCYCh7RT4hciNbWTU4JTc9c3E+NkBYWUZjP2BnazZlPz5pXywxMGIlUldWIzo1WFteN0EyREUvKXopbWtgUEl0ZkovSVZa'@;
put 'YVJtTEo3Ynp1e0ZYPVNDWEYmXW5LNWhGa0NKWnlBPCE4eVNoQkl1XjNLSChdL2RhZ3UyKnpSLlBoIURRa0llc1QiNE01ai8zZXpta1EhfDAldFk3IzhvIVQhLnM8bSVLN2ZBNy4xWDJzKiE5b3pDKHMzPSh9ZkU1UmdhP0YqOX0pZigvbF1zJHtkbi47RCRtZFRwPVtCXW1bSjQ/ezNZOzwmcD1R'@;
put 'WXE8IXkmN102WT9tSD9QKX1NR24hbV9PNy5QXjlQfFd7NExJP1h0MyQhZGpncU5Xfl9xRTx7WVAwZ0lOczxnREkoPWkwY0FUPDJ9S1p8Qj9gRFA4Vzk0fjNNcVQ9dipOa2BMQDRffFQsTCw1PUYjJSxTWj1XbHVNOmdGQyomQzc2KDF+RkFGPDsuTU9oKlVidUVyUVtgPWN7Y0krNkhPUHUzdixz'@;
put 'Vns2RVApdE42Wjd8SzdjbWU0RmxSbV8sYU5WPXxiNnBuTltjfGs8XlhmdX45dSV7W35kM3VPP1NXXyw4ZlFFSkYpbFZdMGJrdnkkTHtySnkvO2MlfTw8WG9mWCNAYUksRE1KTz1SJjcsMixJYHQzK0shR3pqKFc5VWZJTW4mK3lXZ1s4ZzJHR1Z8Ukp3Nl1ELHRnXSo+MWl0NV8ofD1helYyR143'@;
put 'cFcuTXhjKEwkX3RRcXMoR2RONSpxPD9qL2pnXkgqQ10kODt8LDssezolO0JLPFFzKSgzIyFRTDR1fT98M019ciI8dmZTKntGKFZ6UFBeWSJaSilYQnF+UVcyfj1VPCVyeGhGRFgxcz96ITxQdFpWcjRxMGdXMGxFKV17QDxyNC4zXm41RmQ8RVBTN0NwKWBaX2dzbDlIKUkkQU41VWp8JmVoSWt2'@;
put 'Vn1VTGpnMFAwWEh6IzpwPHVoZ3lDMltTcVR9X196NGpXNlJ1NERtSCRWRUhxLkh9I0xdTXYoU1BJU3VsVTYmWWx4dW9ua2R+NDt+ZVIhbDM0bzh+IXo/OF95L0A7eWZkVUY7PW1rWFpZTnFCay9jbEJJUUYhVlQyPiNwfTEoPmclZkB0UUFMMitgSyU2Y3IyenNwV0Z8e1A6SC5eUUJZY08oWDlz'@;
put 'JTVqUi5aQD9OfEBfK35SZjRIcUIqLGdQM30+RnIsM2BNc3Q6TE1xWGNUITIyRD8iWDNPTWlIa19KT1dQTkZYe3RPa3pKUkE+TGZPXXcrbEJYVWEiOHY7VmI8YkM1dU1CKW1ZLD9HZU1dJSVXZmZxMFRLek1tQCpTMmg3W1E2fkR9Qjo9QjVsO290PHhEfGlGWl8vViVZb3xyckJUN3p7JDt5biFW'@;
put 'TipfIWprUEkmaTFkMUIjIm4lRkgxbms5Vko6Qy58d35TRjBCcGAzdm97fjM0NVE0MSZ1NURSZUxbO2s0aS5KQ2BfaStjNkBJVUk/XXlWOy9BVFdScjo1ZjhGJkhAJChFR21zVS49JHo9RV58RnB5UDs5T1cqWFk3Ty9vTStOKEtGQ1BaP2AlKlAuRHVuIj4+UDgyKzdJcipGZng9YFUvQjB2YlQy'@;
put 'S3xoPFZiWXMyTlFkXVEjVjBFRC9fe0wiaVkpb250OWppOC5fV3VFJktPOEB7eztee1V5UzVAVyplRXs4W1hyfGhUUCJDdi5FcVVFVTs6dFJ6fl5tPVRNImxnOHYvP2BobDkqWlpVTXNsIjYlJEkwQy9TNVYjP0JXRXo9dFhmbUhXNHtRcCx1RSJgMGgzRT05ajNrbHpZNHMubjBsRFokNTh0KH1W'@;
put 'PTksYFB0KWkjbzEiPnVLUTdZUX4zfDQxeWFAUEMvdldKbG0oc15GN24hWCl2ZkMsZ3JTNGUqKzVuTU5CLkpUWFZ6PGxSbytpQTVeMjFJKV9QfCxiOFsqPH5kfSkyRXI9PzFWX2MpRkpjcG03WklmU1QhT2txQj1FckNkO1U7SX11YnVJQ19ZZmk9cjYzYFJDU3dQPHJDJk4vSDE/JHlGK2ZXQ1hU'@;
put 'aUY4VTpiUS9kWmYhejYkbGlFUFl3YCYuZyssV3JQPHQlOm9hYXkoPyJHX1dxdUluPyZEKl5STld1KDBCK1IhUV0kZyNwUlIzd01LcWI4VUtRL0opJStCeVNWdl1LdyFLd3Z0eFoufkk4Z0w0PHZ2PSJeXnxUeiUvJFVWVlIrNmdwSWo3TV40MWsuRWxqY0AjPFtldCVvV0ZMTHB8XU47VFc9ZjZb'@;
put 'anBsOEciPjJnWCgqeDg8RTIycTZxdUpKMncsV0xXbFJkW2czKkNuPUV9Mm8vdltGNlM3T046Q1ZyY3w+XW9dRX17NT1EJUgwZStjOiUvQVg9M2wzZ0c7XyJJInV0OkRQNWBSdGRTNU5RcXY1a25oUG5QUyttVnY1VTlSL1VfIX1hbz1eWDZMSUl7LEYpQlVkakhoMzZ1Mk5rTnJRcTAmfUhjcEV2'@;
put 'LlZQfXgrSmNdN3kpeClEbyF4SXA3UEwwYSFbaHcjWi4qKVd+LzhKbmJpQik0Z2krdlZqIj0lN1IkdFBpcC40XkwweVVoLm1lRVJCbFlZVUVOWzUzZEVsKWAzb3Q0eFdbcVYiMHVTanNjTzFELz8xL3BnRVZCPTUmb1MuRS8vWEJaMV90OGZVSHFZNz1CeUpDIjxKYjc2WkRhbX5TVXhaXiw+R0Ap'@;
put 'KW1QZz1YWlBqb3pSbHhWNG47Nz1IOVRMYUhOZ3B+fCUvIXt9Z1JKbWIwPEtKfVcpIU9TOER7RGB9a0F3aiIsaWgvS3ZOZFp2bX1uZHIoIyppPVBQckQkSEF3WjJfVnBeOXVnZ2cpWzdrc212fSxqcUFGPnFDbzpnWmxRbzFpWElRRGpAS0lbKihhQ2NkfV1pI1ddUmpMP2NKJSI8QjA6U3M+bC53'@;
put 'ZEszKjJrKzB2WSw4YFVLMk9YYS9fJl0vaSlVKkw3XSwpKi5MKFhWZ1BofENXV0VUITZjJkZxfjJXdVczblQsMCM2Qnc1TVY4Y05PTXxkb0EvVkByMXtdZ3NnOyEoVlNGLlltfUtjNmRgLFQyS1M8aGM5PUxVfEtRY0d5KTZoNy99QSVPK1k+LFF9V3o9ZCtUMlJSMWl5e3xZNlIsVVVqPyglUzNx'@;
put 'ZzEkYldPT0A5L2RJUmcyeEE8SnpnYio3ZSh6Q35XMXdLaWttZ0w/R0oqTEVGKF5sdn1XUDEwQCVQMnwpaEBmLGJDOjYvSjhRayg+TTJJWX5xTmNtdE5KfXxHe3U0XihnPC58N2NtR10kJlhoczQpU1YrOjtlOyouWDVsb18+JjIzNTIscUM9emBOOG9qVVkja0clXkMjLGB+eXtaYiZVLnI5Izpr'@;
put 'dzAxeH5jKnJaISh3UjE4Qkg2IUtPd2sqTDphKCNkUjg6ISEuW1dVciJtUyZKJGIzPXBIcSZpWD93eHokZ083QWZ2aFQvUjBgbV0zfiNzRTl5aCJ9c3B7fmMrTjIyIVM/WT5HfmdxbCR8UTZldis6YyowKGxDZH5GVklSYC9yb1lVK2wyIjFVfX56dSg7XUkqUSRNPTp0PGIjfmZ8SCJLbno9PD1G'@;
put 'OD91Oll6eTNNTTg6aFh6ci9ecUskTkc9MCIxIlB0c0Q8R2pLOHdrbjF8Nk8qJEYyMG46ckUwMkh7cX12SWtIcnoxOnwqZmdZaGNoUkw0UDJvLFk+czdzOmRBZWcjR3tIcl0qY2BhVz9xQWU/OEMxRCt5REpofjB0dVZZd1J1KFQyUUF5Nng3Nnt6LjEhbT9HUyo7SXF8SDhpemhraGpiNGl9YEdJ'@;
put 'bG8vMTokJUkieGRUOkp6bXN4I1c+dGRHPzUuMU9gTnpJcVdTWTBuRU8yOHY7O1FjQ0J9QTE2X1ZxY3RdV3F5amdCJGhhSkNTanp0I2ghMH06L2U/amYoMHFyOUgzTV5faHNfZ0RLYF9za0tQbSNUe05sVnlBNWVra2xIaShEX3BnQ15oayl5c3BDJiFNdXFYZGI5IT1ENz1rIzR+QnIjQjpsaEpQ'@;
put 'Rm8rTSNVMjFfKk0rZ2xoOl1PTiR9NFVHPyl3X35se3B5Q0JdfXtMIyVDRUcpTXo+ezA/Y099MFsmXkJgMkYwKjRudXUxJGNFfVJ2TjhkN2ovdypSL3glUnBvVmNaQC80bzs6KDI1ZyR5UVYsQUFTYFdLal1vYGdiTVVlWzVQcX51bjhWbldCMjw/dVlZOHxvW2glWkNleGk6OykjZjZHMkBgUVoz'@;
put 'JWEkZEkmLndqZWc1PGtqRG11JTtKOD08Uj1eNGF9fmA2Xlp0V3EhInEkYzxKe189Zj1nekBPWnB0JDRKM2xVTFUiLms6JVgqbkJPT301OHZ0JnpRT2A8WGkkLDJgPWQ8QzQpdFpBXzBFYTNTdVNRMF9uUyteRj46RWgpNlRBcnsyVy9rWFtpb1ZNeDRhVGM0WDZlQ2MrNVg6RkJjdjhvRjgwTCo3'@;
put 'WCMzUk5MZn48KmZGbW1EdHh+UmBpfiMsN3ZPNjw5ZUYjazhbX3pNYk0xWCteNHpEUytXR15sMVlKYis3Sl5tSWR8Z3ZiJDFEeX1Ya3J8K2Y4UWxfeltVb1ttaEV3Sil3aU98XyglZSUsdmMkU0c+fCFTPD1xYj1wRXN2JVJVRSs7Q30kd3NaYWUqW3QmaHJiJV9dcTlaN29qTUxWNVcldltkNmpj'@;
put 'PGEiI2dwRnUuSVs0b2A2XzRoJH5aV3lrLix5RlgvTlc+PVp4UFt9fGU5Tm99PSlzTWRQLzYvMUwqSjMpeHY1KFomNCQ9NS4vUTckdUQjJFlhQEw1cnc2JnEuam19OkRpVVUya1lsQD5lY2xJWjlGZUA9dURSZF1eUk8wMnxDUzkrSU9VfjFqK081VjIjWkJOJXY3e29KIiopQVRZYm8uKyVUb3sv'@;
put 'fl1ee2ZzSXhzU1N+YUpoWkRYI1JrUVp4VF9XKylLbSN2L1FIWn0/KSVNcUpNczx9Lmd0N1leb255Q0AmPGwuPlo9RkJzWyRUO2hvNWc+OTkxbmJuNUcoMjtNei83YWQmcTxgRE07L2R9YUwmSHJIMG43P0hXYVs0bzZVL19JZDJxQ2VlMyJQL2Q/Yl05JlpeNCE8clIpK2VXOnBYKzUmXWU7IV9p'@;
put 'PV08TTw6NEomMjk6XktvRHxrODYvaH0qN20ueklEVSNUYlE1OmpbMFhUU1Q0aFlqTz5wdi56VmMlSHJbRSMwJXR1TVR1XmVoLDl5KV9nb15SZDxFdEkxRElQRkI+I35qRXNBcV85NS5SSWhOZFlld0YvYyU6KiMrS01JaihyekImcXdEPVlbPFNuQzBvWHkzej9OTT5eWn0xMGRdRkQ5SHIqMUph'@;
put 'cypFWldJXyhnaU08Y2J3UnI0WmBtTU49N201JT0lWi4xQ3lPPSlkMkxQV0AkeVR2WTcjRUMye2F0X0dxISVNbnUwczFpT2l4O3QpM1lRMU16WUEobkwsR288dSgieHV5bTkoS1ZbNkdjbmZZXSUrLFpoWWxaeF15QjBtay9sZyVgfiZsPnVAaXkqUzRsdmlUNDxvMHkuPj1vfWZNVF1AK3shQlRm'@;
put 'dTt2PFVGdmRHXyshLDU5XUJWNUVleG9nLERERms3dmgrbD0yVHN5bVV0a1cma1pXUiY3UG4ueVB9WW5uRzNWSWh8K2VdMFdbUSIqQCp8dnJNLkpqZzpsYnA1XUFbd3RyPHIsTFNWYVhMKTZAUVMqUldhRT0mYCVuSHpjQ3ZGM31PP3MwVCVdb254cV5lVDYkY0tfT0Y7T1V3T0B1NmIoOmlgK1Y0'@;
put 'WDxkPzxeLHFeQzclSndTMzJAQ2hbZ2UmLjVEJXxkUihIakFJc1FpQTZPPXdDZSV1MTdHPmlGLExpSE5kOXNRW2BlUy5WPFFeS2EzQW1CV21KfEI9X2MpKGNSN2JfQkY6WSFyJE50IXU5Oz1xNTA2M2oqWENXMFduYS9aXmhpUGt8KT0ucjYpW0U3MD0vRWRtemtYZ29pPEZCNmQ0ayxJbWsiYEdp'@;
put 'PU8pJD9ic0k7ZVt5Rl4/XkhmdlAxN0daS1FMcXdEP3EpQmQ6bioyX1hTUCZvck9nWXMxeCo3Jjs/STJvTmQsPWQoQklnLFg+XSRJZjpOcCF4P0ZFQ1ovVSNvPCReMW9bOlImTy9XNzYwUGRjL25jKzdEZHl2XU19aTF6U3g6YVhmTytpNS5wZXc9PEdyNXQjLiorT3ViSW0xOUdWJWZFTEx8PzQo'@;
put 'WVpkcFMwb3ZdXmIrIj5IO0x4VXtxQHkySCZ2SC9kVX5fZVVxImV0WTpWPn40dHVsdWdzdTBTTl9efXUrbXRlfjA4WWp0O3xKUnRfd2hwVn0maTtXI2lrUm9ANEtLOVV6JkRhWj5KIix8VyNGaihCWyZ7TnBFRTJyNDA2T21iLGdZeU8yMkpLTmNYWClvZFp2JGJfYVkyPD4yPj5pQ29leTV4bzBL'@;
put 'WiNIUCkodVRRYE5LLHRFJVlHPlt+SFFgZThgb1MqUiQqMjBQIzxPTS4uS1NDfmk9T3dJWjQ7Nl5bKnxLLGZ7cFZJJSQkOCRGLzt8XTxbT0dPfF1yJEJJaF89SkJlbElDREgzRy5fQzNUX29ETmAkTS53aXpaX2N0QlgjOEhFbEhfc1clbGZDQT5ZJTc4blB8fExzMXxFTnl3Q1ZFOHNeNDhPfnFe'@;
put 'Q2VOTGB9bFVNLyp8LCZmakJmJkcoMUFrejpbU0J8LDNCNmlKampALFhdJl03bGhyNnM0MFlSbCQuMUh4Ji5fP2QqXl8zLCpRaVYwZDl9Z3xvTHdmMlMvLmNrW215VyEkK2xRYD1bWzVNJHFfTG9KbiFvcyZrMHEufVRjK0AjfV5ySENyQX15alRxLD1dQFF6KFk6KSQxN0U+Kmc0JHs2Oyk4MyNq'@;
put 'QF9NOys/cmdLaC5jOSNmRFQyREIjNSRSYUxJcFJWQE17JU0+Pl53TFg2PWlCYy4hU35UfWkvbyhkJm4mOSNSe1Ype0k8UCk6ejx0PDdUalF3NyomIjtSVzxNN29VcCNKOHUmSz02JTRRU0RbYVVdX1Q0RF9lU0dbb0F2fWsxJFplQ29YTm97TFp6TEFbOCwkXyMsaHUlPUYhSXssMnJUdHp2Nkpd'@;
put 'ZlhmMWZrPWhhUj9HZmVLbSkvVFpORFh9NHg+RT0lb2NzO0NMckNrRmlMYm1ePjNZM091N2VIdHd9IjNKWz4uY2pgPENJc2FdTGAuUDZYSG1rfkZhZiF9cyxvRz5AdDwvK2VSZH4pPXhKen5kX2ZldD0qb0RtRlFPUUVqPFRjKztMMl0ubl5kbGFXbXU2eUwlRz57TU13SzdVKSU4fls8SSRabCxX'@;
put 'QjRaK241MzRNXWhySyZSaU9WP3VSX0pjenUufHoibnduaTpVQ0daYnxUSnJqZmFCIjRFclFhbSlaUTRPaTk+O0ZNPDl6VTVjUENRcShvSjRMcXU6eSwmMUBQdDtFbm5AbzxWdVNIPEcpJVBpUi9mOFU0MjVvUGR9IW9WWS9mPXI/X2pxZGVNX30jRl44RF5UQjAhZ1ImTFlSNExdYzQrRSx2TE5a'@;
put 'Nm53aUJ5WGZJNF8wYitsaXliMVg5a3oyNzZ6aChaYGFUcE09Q0lIYyoyYFNlZFp6RXlNfDBKTSpHb1Q8WnVtUmEwKHgsKzQ6LCxBKXk+S2l6ayFVWHB+K1ZRUzxhInl4REhJT1Zdc0lZT3hbZS9KNXNkUlpePEp6UjhCI1YoOHpuUX1jIyVoUjRxKDI8LD4sW1tdQFIxUkl8JCUlQGkiMjt9QEk0'@;
put 'LkFWOHBUXWp3LCUpMXojbGEyW3khRlMvYyJ3JHt1IU5VTWpNQnRAYWhxV3hqTCNPRThOLFdYfSxiK34wKXFzdFBfKSZmRUc0I0tkVkdeMHd5ZVYlPGs0cUFSMGo2P0I8RyhHdTU9PjM/dDxmdCt8QkA8MC88cmpEOEV6d0BDUF5xYm1mX3d1V304TGxKYGx9ISY4Nm90KlBzJCQoOzRATzM9bFZS'@;
put 'Ul9RPGlsWFExUEgmRj1XLCh5aChsZUwiYnBwfio5cTM8IWs6PW0jM2x7ZD1dczE5PEBdVSg4OSQxLjRgayVOXkRzcGlnJU8kV216LkQ4LGddISQhdmFUV0RTI3t3VVtPdURWKzYrR0klUH0zfixtYSRiMWYjMStXeFEsVzJ4RTZXYzg0Tlp8In0pR1JWL1psdnVqS0pYdzR7KG44OypadHZwNXQ2'@;
put 'O1k/K3t1JC5rQD9nOzdiK0g0dC9+QjFCNkkmIjg6XnNjfHZMNV51dEQ1bFhEPChJdFUxeXw5XT0haGUyUGcjYDQiQWxKO0t1XnNDZzg/ISgofTY5UDlmQkNLUz1QOFd7dCZRSkM4cTcsKiIqZzZMM345YypQSGY9UE8heFo5IU5oLntVV2RNSlU+VkBbc3lrIT94Xm9EZU0lL0ZAXVc9dmdTJDtd'@;
put 'OHdpI2M1ODdKLHlwLlN1aHgvcXB6bXA5VDRbIyUsJkAmKzVKUCEzaSoqR0MpXVhiRElLMG1vMzFdbzJESm1FI0xqKEolJkxQfHFVXVhueFdiRUxJLHpsJTJ8TiVJVV9afCtIU0h7IlZwV0R5JkA7ZHdXVylkT2BWfVM+QDs8emgqPig3eis2SHoyWz8ybWgyRjprNnArWUBJMnY3UlVgNnFvYzpO'@;
put 'bHk0fWMjeyM5angqSWFyIz1BXzV2NVs2bUshIWR3V2dgbmg3SWttKEAzanA6RTFCNnsyYWFLU1VIOUk9YXNCRFgrd3xOXndqI0tMTGNCMT9NTi4kPFFCPD9CSEZpTFQlPVNCdEo6dTNNNTVzJWJSfS9FTG5fTkVwOlpBVHUwbnZdcGozKS9zZitOTUNZcmx4Sip0SUomVWpJT2dzN2BLI2B8aF9S'@;
put 'OUZTUSg7S3UkbVYhIyo9fCI5MWMxSHJxPSx9XlJLS3BCKnRpe25naTA1XzQrOllXNz0/OWQhMHUiPlpqLipQNTMmTkp0JD89dUxNXn0kXXE0Umg0ZygrczVsdFpsRW1wbzN1VE49RiFyczo8T15uR0ouU0U4XWpPWGIoIWJbW0wmZEYrUm1MdjtpUncqb01bSDN8MFNecix8IWRwYyNJbFFEc3Fp'@;
put 'dFklJHFLZEUrJD1RRF9dQzp5d0FDa15+Y1t3Y1tRMDFrKzdpN0hPfUZmZT1sXXVaMG1yVDVSKSpZK3VvLnRwOCovXiJFKmp2N3FJYUU1R3IyZHg5ZkN7TnZgVVt3IVRXQEl4QCE+NVVqcEtOOElPUj52NUl9WWN+a0gyXXBNI049KlBMRT5IY05SVXc+TjM4ZFM8dzRSJUIhZ1V4ak1ARm59RDpe'@;
put 'UHBwZyxQWmFZK05vdEJHbUJsVmNKeVsxI3RqdnswMmFvPil3QW9OOG1hLD8jUnVQMCxsQF1weyVCWn54OVBrLGtqfDk4fGlDUW1gW19qPkxYdFRPJGo0UTFWNihLMFAqKV4rVU4xdCt6e2tSOSJ4KnpOczY2JTF8RzAwTk59X2NPWnRReGFeTyMlUkZYPn1DLEshOWlSWWMkNG5xZk5mTVk5dSVs'@;
put 'ZXR6M3FSVyRqcWQ+IUUrSXxSQE1JIXcsOElaI01VLi4pWUpbayM4R1FabUo/V2tHeGVEcmdZRSlRYnZKdigwJjI4eUM7Vmo5TXBxZndCTkpJYVV4anNraUZIaiIiMEttSDRfcj9UaSEzJV46QUlFRiQ+fUs2RXlpQSReKDs9ZlkwXn5TPlQxU1Q+bDh7YTNHa2FCOjwvSHRpfmcxNWwzcTtdSUQq'@;
put 'N3tJeC4yVTgjQFlZaHpnZXRYY1h+dERDV1FzYUYhWCFvLDdKOnQlfWleY1hITzgmSC5zITR3eXAyTnJ4TGJHOmc8MjF2OX1wKUolJSY3fVZ1ZF5EfHguTyVQaFBQd1dVYE03LnEwT1tyI0M6KCVSUi9rbCFAUERRZ0dEKnJhdCNEVEV3clkvUlV1X2I0K0dHeVB4aVtnOUBXa2RrXS5xOjVNVnZz'@;
put 'NyRvTkc4NyJ6Jn1oJV9aVC9LWCljbkhhcEwjVCQzOlRbTVgiOlFpMG1pIUh4YyovQW1abGt8KDJVKmhtalZYKDhFd0xJMHBROkt4VjZGdmcscWglQDcvUz1oLnNdKT1dLC5sL2clQCR8L0hZXnFqSGEkIT8/QW9MekNRZ1BFRHk6VGV6KGsuK3tDdGU/QkE3KWQ9bW5BU1VrbVc8S0hRQUV1WGEh'@;
put 'L2toOkVeTm1yMntdKGcoO3g5VTJeRjMqWnI+PiRrfEt3YmhRSitlUCp8XlAkTVFUcDVZNnYpO3gsY1F5V3ZSay4iZXN6QEEubH1tQWB9MCtuIUoyTGIlVShCOiFzM3hkMTs6MVRgJjdlMn0rPj1EMkRyYzlnb2xtYE94I31wNHk7ZlsoQCN+RSREL2BjNGNnbnk/QlUyciVsSDI8Q1ovZjBJQUtr'@;
put 'PHU8ZzxdazFCL14uS1p5Sk98WSIyS1RbSEpIKG15O09adSlwIm49SlFGam4jbTJiS11QJllCM0ghTUZ0XkVEdF5FI3peZml5dT5wR2lrJmZpMClXbHk7R3lCdytfbSFiKSZBV25CXUN5WSRYNzpUSjA5Sjo/dyhTP11VSzVdaCtzNSVVRlJDSyVFXUBRVm1bNnt2IVB8fXdjMF5aMWFqJTw9Nncp'@;
put 'UnpILDczLzB5Zmp0U3pgSGdsRFE+PGFqNC9hTTE9YWEuQigqV350WW5uXWNWWE5FU0dHQ19pRkJPVl16YFpWe2dtJCkrJHpoJEV+JXJDJFtYPS92cHk6c2F5TzZ9VT4+aFFycHdecHFUd1paTEBIeiojNixWcnJUSjYmailnJGwrIkopcEtNbXd4YWlrJHleQl8jPWJka2lWbzZpTU44aDJIXlVu'@;
put 'YFFgRDxHISU/O1VhOUduNXNXXXV8QCJII1FyPFg+MjN7X2ZmczxPXzdCNmdrd0I8QE0lMEFQJi9MVkoybzhdOzVgeE1GeDNFPyVwP1p8OjttMzVIJDZiYE5Ccn17ajchNyIrUGYvd0skPDFMO2Nvbmo0e1Zkbix8ZEdSKW0yXXM0MTBrWEFEQCR6ZkZMZmtUNjozPGw8PjQ4YXRTejwhSkd2VFlR'@;
put 'T3hnKjZAa0txREZKZG4rUHxrYE9aYV9DeHh3dW8uNz9IO2dxXmlAY09RKj9GcXUqdz1Cb0UmUlNgfThZPEsoQFo6N2hmQGZVaTFINCx2IzB2OHgqQUNkfHFOalghI05PLnRJN0M1Oj5BbU5adz83RFc2O15BX3leSH05diYmSGNpI1BLZ1VSTClHa3BIYzNDaCRTI2dZVWYkN0czcU8hTlVrKzZ2'@;
put 'RFFOXlVqODo8cDgwWylGOCxbelI/MW1qaThZRk5HR0k9TVhoKXR1SH5sJjIxTzw9L2A+eTYoaXRaX2IsWk01YmpXIyhCW0d1dHF9RV5JMDtvfktWPT0iLkRKUkFDQEdadislLFRPdmtFOmRgJSxgMWtgPHVoZE48TjVyVX5yVV1XeCE8PFMoOXp5PClAX1orOkNJTnRSY34wMkc/fnA0WSRoKTRN'@;
put 'I3RfRChvRVE+RDohUUt0SWNxcUpfW2RIbWBNYjRObW9ofHBeL19hY0ltWnUvOk1XW3w9MHAzUX5VUzUyM3BDbFBnXjFPRiJjInp8MC41aEdwZVdmRDtOYDVASyZ5JD1NbjdMZzxIMzMleV5kb0VkK2QmajNrKVM7SFlIe3IpRkxqNyVNSiRbJjYySz5wXk97K2tYLm96dHRUO1ZJI1h3P3ErRjUz'@;
put 'PyZWWXV4aiFzNGVvM3klfC8yQCZ6QShTaEdzUiM4Ni8jPTBpYWdyal09XmJeWVc+LiM2TH4hfm9rIUY3cFtWd1V+cE0sISRFZS8kO3QmayVQelcoUGdjSFZ9IURNITUrOSJobjh6fEo8ejI4eWIoajNJO15tRjs8ckMyWjllMGxlMDRxXmlecDlxOXhCVWRGMHBNa0pyQ1I4cDJWcE5gWnxJNGJE'@;
put 'UThsJHVtKT0hd2w6M3YoKTBFfT9yfDloKDhGPTU0eGpIOU9zLz14Okk5RzEjXXgmRDZdUlhqZD0hVT42YTtidiYhVm9oLi8jclcke20vVzhjZi5SYDBYMDdGU1V4aj4uKGluYmc+e2Q0WnJiRC9NS3lPZmgiRV19cj1GWTFQOE8vKjFtd1owZS9Nfmo2PGxEd3QuND5FSSpQLzkuZXUpO2cwWl0i'@;
put 'JGxveWI9OVhvTzFUWjdSJTd0OmhVWUclRVVxJUo/S3l6OXZiMDJneHAke104Wko1LG5wMzIrMC8sRiN8YHU9RmNpIT41LDUvMD5CV3ZMOjtxSkg2P3ZSQDBiWVcjTmJWZVN+Pl04IUZTMDYvPHxgJmI6UmJ+NDcrRi8xalBEKS98UFVQKS9Cd08qWGsrYlAoYit7bjVHMWdHb2tdV15pal50c0p2'@;
put 'XUxPSjs+LGY+WVoqNGA6fXJiISZWQ0s/elJJaTg7bC98TkpzMlA3WSEydVBrdT1PdFB5cEEybGNCam1AS1V2PVAzZE4vJF1SLHN1UTxKKDt0OXNfezA8SyFEODFBa15weWdSU2dSfXAramVYfWpCI3JPSDZTbWAoSjNtYUU5Z2JENj5xIi4+N0F7Mnhpd3xOX1tTeSkiPEwmfH06eHE7VkI3YGEp'@;
put 'fkRNQGFWeih3eE5TTG55elpLamNOaTAmRVZUcGxQZ3RrMXNQbj1+JUBYJEI6bDcrRjE1MlBXVUNAdF1gXig0eGpWWiY5WTU0XyhmXmw0YE4pJHtgX2lLaTQ/MzovMn1QYVhAfiE7ZHMrTWhiMXJ0fj9gU2wlTjIkdFhvMyxGOiZVNHBlOEEyeWZQTDBBPmw6WlkkckdUeTB9V0c5K0VETXxZajtf'@;
put 'Tys/bUBvMksmVXE+dDldT1hRSV5GLGAhQ1Fmd3E2cDMuJGFEJGdTeX1RXzFPazBmZTxTVnAsa2xZMUVeTVN6MFNXWEcqKkJRaUNIdTJFPm5QNVovS3RWcmtTWDB4eldaZmx7Yks2QE1QdTEjODEpUGQyJUFAcGJpe0R0YklKYzo+Z3VlVDVvYiQ7WlpkW10xfCt9QzxQPkgoTjlVUyx2I0NQK0pP'@;
put 'LCJXcllgVENoTSFxWT9IdWZQI14sKi82UFY9cypMekFmZ3ZsJW94STBtTE9SVV8+bCZpY09zZilQVTFabj88aHNFcVVtZVk4eD9QU0w2ZzUjYy5TbEMsM000Nl8/ZF4qcmFOPiZ9ZHFOLmc6b0NYbGpDRXlkbl4mJT5nbTI4PFc7Ql90SjN2d0orelcvJkduXWhpZFI+diQxPno/MUhiRH44PlU6'@;
put 'LDFBV3w5Wnw6PC94UkhoTUM3LzVxNWFeWG5iWVYqVCN4eSpuK0c1KWpFU0xjK2U6JGF7bmxtPzElUm9qQCtMO1BdRH5pPER0Oyp0VnFYQWlGK1gwMURRb3ZPdEB1IVJ5aWp9Okc2Q006SnV0JE9SYlROYn1ka05ebTd1dVB1QDNeZSh6Plh5ZmkuND5AdSx1Z2wxL3xtP0hzdTtBTV9FdFlnd0lq'@;
put 'cT1KKVJBQTJjLmE1KWFqVE4pSl05MCgyZUs4YEopUkMiMmN2YGlCT3s3UlNlN2N2YGQsIzpBXnlhdVdOMCF8UHdGSmVFNlc5SUNBMmRjUCtMT28kVEdHNlhgXytkTF1+fXk3SEJLPlRFVjd5bU8/N1JlWkNDbTBFTnJOVDRMVy9STVlvamt4SlRPMDxIbmMhJmdrYllGMEVOVUhdZmlwJEk/a2x1'@;
put 'S3BVXW06OzZTXlRNUDwzWE12KlVITkhmW0NFXkVpTVlGaUthMDZRK3F3TE9sdlZ6OFVlfVplYktmfjo5Qjw9NCM7OEBibEpiUU0jWmtIeklWXkJmLlo0dz1sSVVTN1g4VH18X35kPmdHfktxYVJAKVpzTzFqMFQkcTZ6cnJbKWBGI1skIi5DRyR+NXVGIVZ7ckNAe3tpTjV4ai5XKHZbO3c0T2os'@;
put 'MzZZelMzbkFqMHNgeiV2JmhAaHttLk5hfVYxSDArTi93ZmU0dGUySjBROCVsIypxcW4ybyF7YnwwRU1LVVpgWSw8L0VrdF8+N0tec1JGSH1lOldJYG4mYVFMTU1HMVQoM3kwQFtVOmttLEh1SCs5Y1kwUkhPInYkMFhpcGkoOFtJT3wqOVR2MitlVnVadkZqUjZ0SGg9fWYlMC9ieEBNQFB+TUMs'@;
put 'aE9IOmx9VD59d1F6Z21tOGRZSXBmMnsyLmtIa1lPZjw5Jk9IQWplXks1ezIoX1BuV3cjNzl7cmNJOXlHWFIlZktOV3FSLChmYDU0OH1QPDElMSZJcFIsMXR7Jld9cyZ4X3xJaFBnYE9qJCg4PUImYGJ5V0IrJXJGcD9yP3l0S0wzdlp+bCtAZ1UjJiM+fkR8Vzd9NFhaM3lASVgrSzY0N3I/flNF'@;
put 'KntpTyQ8XS8oIXs/JkMpbGAkWERLKjA9eEY6SilMWEZKcFEiWEtZcWdhPWdQWT1LbVhjaipMTDlSKiVpWShddFE7MF8kQlBvNFpKXkQ3XzdnX2lweENkaUQ5QjpZX0psSTVzUiRiXmZAVFY2IXluQW1sUkQpLHV4VSYrKXJHOndud2pocCEycU9FNUYzdlgrS00jMmxdSFRKalIjY0ksQHNiPkgs'@;
put 'JGMoLyVKLkJpTFtjemgoWDkyclpUUT5hPmFiNCxxIzIlaUhIbCppeGBffEJrYGxSaVFqdk44NiJJOmQ0djQ1VzlzNGY7YzxdMUJ6fjh4fnVLUyMyQCw+bExSY09TNSp7TVNjKEgwPXZAcEUhSD4oVTJbR3cqJG12YiNtcnA7OV96cmB3UXkqRSwzWi8udiVAUHA4SDF4TGxLd2dydl4rQl1MY1BP'@;
put 'UCVRTFRYaUJkeUBeVWsudXBRZnp+Xnc8TyxQRj9mYnhPPjZ6YX0lVlVTVXU5JSNgWSkqKTEkQzB6NUEiJUc3bT9DeDI4Vm44JWc/VHxeSmd9WD1jQ2dpd3BYKWJuNV9YPV4/Tzh+SnFTI0lDdzo0NkZ4VU13e3gkVl1XOC9ASWpldSldOnRqZXJNUUZTQSZRWH5KNXAoYGR+YnJKOGtlNWkuekda'@;
put 'LldRc0FHTGwiVFRoT0NVcX5kUiohJl1DXkshQiYoNWlhVE4/an1mPHh8b3hfalEmRGcza1pTYSRXMmZNPUt2KThfZmgoOyx5aTRvOW4ySTlyTEwocnYmVWksdHE3IXgqT1lJQiU6Vi44dV5NMGs1LFp0KyQ6MypJRl42d0g8eyojU3RLMjYlSEZtWiVaJVhXfnE+KWoqclIsQWd9I3RxZ0txYlRO'@;
put 'MjdDbUdyPCFZPklRdGpeeVo8Tmgsdi5nZWpOcXlMTFkpelNUantZKnMoXU5ee21DR289cHB2W3ZHPXZWNFAyYSgiV2U6TmpIcG5TO1F+ZiQlYjhmUFc9UGVTXi9nQUg9ZFJiSVAhVmFaYWdTWktyYn1wLm5NNmMyVTZAbVszTERTUiRJYksyZmVTMHNWUjUyYCpCNWteQ2pxV1IqSEpEfFhmbiFp'@;
put 'L18vclpULll3RCl5Zkx2P2lCZ0NPNiplfT01JUQ9RTd1MHFyazZONnREdzZxO1JtLjljb1phbkNjPyFHMWJEcDttXXdOaHguLGdjbCpOOU9YNWZFbTZkUiF7TXV2dj5jXnh3JEFwd1ZVLiJae29MKVlKVGtUISZFTG14PV47NmgjdCtSc2VMIj0zckJoRSt4I3FCP1toWHdSJHBRbz0mWjNvRl9d'@;
put 'TVdvW1MrXmckLG47bDQsZ0R3W11NcSUkJXouNEtqTE92bUJXeDY9aUlSITpaOVc0Qjk0UV1kWmtNfnhTcSJheWspPiNgNDA4Y2Z1O0chJF8mOUpmODU9a1VMVUgjRUZkcjEpflROfkVxQHsuJmBhZmBkNCZ7NHg2VkUuaHBUMTRmbV44Y2VCIzEqMDUqPSlLO0clIiksXlBTc2dFREopNEBHT2dF'@;
put 'UXpxXm0hNCx7QjApWEJKUkIsQm1rfFo+IWxQa21ieU53QHJua3EpfGk5KHk3Z3o4dXAqKVM2JGZ8dCU7LkBdUlcxNz49bGRgMWdlbl9TKCNGeD9VZnFWZjo4bCRrbyY7PS4xaz11KT8ha2BmbUluUWk7aHVJcT1PVDREQzlTXzsvJnNRbUlvRkhkOD4yUG9+Kkg2WXN8NTlJVH4rQFBDKT48RTVG'@;
put 'Um0hRnU7WEU3SEBvXTc/LyNUIztbdGZ4IyJIZjd+LEdrajplb1dQeSN7Zj5waWU0V2E4YlpjTCZMOjFIJiVmeU1Fa1JGOmJhUnM/XiE0YzVAW1coJVdpb0UxViZpK1JzPHpPOzgpd1J6T2JweFFFSyt8RTsuLnNkYC93RDxTIXQhKFA7ZjRTejwlfDA0MGhhaWdyNE1tZV1DO011aFY5IUNVRlJ1'@;
put 'Sl0zTykzJjAxS3hHKXI7KXQyMEFmYW5TN1hzMU9dekEyRXV6YGoxNWk5Ty9lVjIxOitHI1tQVW8lel5fdjZHTXU/YklQMDxEZ1BdRj1IazF7QyIlPFF4YVI+JDJYMVhab2ohNylDOnJqS0VheHNlSlB1NmtzLnMsaHJ7bi5vfmMrZ1pmfmNpPFg8U1V9I1FsR2xCLGVaOGtObCohei5VVnVGUHsz'@;
put 'Z1V2Lz96Kn5VPUk5LHFsKXZsYDdfal0kcXFkbG9RQCJ4K0JQUFA/eFYxVy8/JXw2USFJQSY6aVUsJXcpcW9Fa21gZjNbWW5fcChBLj5XPnskMVVKRlQlX0ZpImVMVn5taDEjVUo6PXt7eWg6OUBkc2xqXStnaV4hN2sha097SFtfRkFSdT9nOjpkPiE8VmdreCo8S2VoOjo4e1RhUURFZ2VIa2xz'@;
put 'PiMiOGNOWmFBaGFoZ2JMa1ZMOyVqT0ZwPSQhakc9Z2V8dDEpSiU4LHIqWGA5LzApKSF+TE0vZnAxMVlrfT8uNl1hW0hWMmpZdmtpPj5DLmMqMlcuM2F4TzI5RXklOzklREZrOWomN2R4SFFmWndQPkMwUWxNWl1LYlNgOzdPK05vIyxRfGp0cD9McXB5JVhZR25zdW99ck9eOFc2OSVuMG0xKlE+'@;
put 'PiJWa2UuJGxlTT81Zj5qZH1qI3B7WXQ1M0c7ci5RRSQyKXIlXUVKRnskL1BdZF5PXUMuIWViOjI0VE84XmVrOVYkLncxMyw2emU1PjQrUlgoUXJRVE9iL3hkT0gwPi46PEtkO1ErbXUiSTouWGlDaj06UFs5PD40SGlgLDxpM29IYk9SMiFscz14Zj5rZDJbMHYyfklgLmd7KGpWWCV7emYrfWpl'@;
put 'fnVrdyQ7QmglMl12K15PR2s6K3prYnQ6Mi5tc351eF5EdVkuXix2PygkfG5uX3heal1oQmwyVTJUWlBQRXhia0p0InU9d0dGODgxQjs4VSJHTVJzfCw4TDVuLjQoai5EJCxdNjQxWTBEZGpgKnddUHgpPGRTO3BTSz8iVilNYTY+SC9qTCVlcWt2WlkrKmZtY1JYVVR5ZDkvLi5scCMwYHNGY0c8'@;
put 'YD1QbTZBI3w0NklXekpYdzQzeWtSPSlCM19tPyFRR2UpUE9qaUo6aipnQ21TfUMrUGk7PlNBWC9HbEdiUFZrLE5WKl1Fa05KNnpeTUVEOWZ4PFA+SGVDfEdYMGNgL2pNP2Q5d3BDZHRYNmE/SGBEN30jbGs9ZlRLREJTS2Y/Z11qLG9QYU9PXVBmaWIkMXN4JHh7NHB5Sis8OEBtNTwkdzQ5dixQ'@;
put 'R2VIUnFYSSxXdUBkL0wmbGxzVV4jUnwsOWpmYW1LQ2dzWEksSWdFcitScVE4QmxpPCVLeE4hRnlkNC5ffGptekpgbC8sNzREIyFeNjN7akAiZ3dwYnNoV1MjKSVfLFs3dlJUNUVSV34pLmY2eXBLYWxgcXwjLFo3VjVVUU14Ol5UTlJVPyRfVnhhSDBEPEclLkBrPHImR2V2SihmezB+a35nQWcy'@;
put 'Yz5GODI+bk1ZQi5KQ0ZhfCxdZXA1WzE1JHF5eGpsVGZlSTddZV58RCZ5LEB9KmtJaCU8P3pgTmx2cnVqVFFUUilpPD5YVXpASWh6NkxDTUw7U0dRUjx5JDx0NUtPbHZ4QEhUb01oZnJDSmZBYC5kJGAwN2doQDw1fEtWWXNNI05Na2VGfilUTjYySSg0VjEuQDt0YWczMSYzYyovMDdbViY3ZXpk'@;
put 'Ln1Ubkt2cS9FRmA2fUNaQGtnSTtHIU43P0REUC8paUsqLEVCPSFDTnVda1N+altlLz1TcDM6cVhJLEgjdlE0PWoiMztLMH4/dTB7PU8qJHkkd3p0Wkl2UWhgYE9rcE9QX3g7fls9RV42UDJQbj82eDp4KkQ7NkNeWF5JJUN5OVZZMVN6PGUmNWwucyQ/ZFshbmZvPy9qRSZrRlJyaEZOcm17KCtN'@;
put 'JjdWdmxMay41bjokKjk3W3x6Wl9KPSE/RjwxJG5PPlBMRjAxSl1jfGgmZSR8JnJSM0V3WDBKOFR7eWNpPHopJEcqQHpnYU9iWUBUYWlDI2xqW2ZKQlVhXkRyNEB7S3U2Tjd7bDYqMDB3MS5fZVNXLDg0M2QyVG1+Y14ucHc8P1hiODJwaGt9SXhmbXMjWlVdUDpHaiRVciwjTW1xLiZsKDlTcl8+'@;
put 'WzUiVF1PQ1BBOnNGSlUvfihWWWVhOXczQm90WnI5WGJSekc2WTBwOVFmU3A+OCpKdl4kZnFZbXVlP11DL0lNQ101VjBrdEVpTnkwK0kiWlVKZHhmb208IWBNY3dxZjtZI2psdy9uS1gjMig9cUt3ODAzPiIvNz1Yd24vLlsqI0R9VW4uQU92dzElRngzeSksUVVyXi5maGVHd1pIOm5rPSRvRjNF'@;
put 'OFdjQl1kSDlnVWJ0ejRfcXBjOVF7RjUycHBEOX1qKjBgRndEeXx4NjR3MHc1RFovMj4hQXhYfS9Lbyp2N2heRiRuYT9HTCksYUBHO2diandAJkxBNUdJZ3I+c0BqSjBsRFlqSnZ4Wml2Wn04fHlhRURfKkVheTx5YzZ3SnMjWGVbM0ByLjwrIW9IZ08kfjl3M1ppSktkbSYpSEs1QlZRXUdSbzFt'@;
put 'TDVtWi9OVCpVXjluTnApYTBvVlg3VUplXW92NjJGUj5UeDJDMil7KltrSn1WSihmKER0NG85aGVNIjwzbyxkKnYuY2B3L0ZUWEhnaDdIcTx6aUZyM0R6Qz0zOHFOZXdyWiU+cCsvWUc7QDZRVHdAVGclcltCKjUuIyZAVjZNKTYhO2lFdj9sW3FRIiFGeSRdSk84W0lxUCMuJWpsS2NoW2ZVK3JO'@;
put 'Pm5VaTgyNnVGMWQ6NG4mfks2Lkcqa2o8VXB5c1pjW0dKZVdMQ2FhdEtoeUx3a1s2NUtzclUoOC9jfmk7N1RWfHBhPlVdJmJhMy57Z2x5b21UYUhvcDF4NmNXbUYjQGBUWy5xJGVRWiM2bF50Z355TiUmfDVCYW4xR2wlLDhUL2w2KGY9O0FFPzJ2Plo5KjJUIXsjKi9uUU1+PCEid35bMSMvRiRF'@;
put 'SnZwSXkicElbYW5iaG1hQkBkYjx4SWksdiNjY2xuIiRAI3Q7TUN7UXh0fWpZMD9tRyZwdDJ0bDkzezVkL3hQNGdTT11ldmJSNXsjWmZoUHwjWjM5cFRLfGJNIyFgMU4vJSVsSFR1MzU8Xjh2Mmoua3JJakt7Kjk5Mn5vSGg8TXQ+Nj5Ka1dwOV9RI0UjdkteWF5ocSs8eHtLKzN2NTVoLjBVJTtH'@;
put 'QzJuTGFFLGdlIlQzVWp0TWxoMywjNWZ8c094MyVrR0QuPEFkQikpMko5NTJvdld5LjBaI0ppfCNaZ21MamU1cStEZ1pZaihIemtfKWF+P3pyWmZER0ZKaElWYGthdCFsZ0ImQj5fNVQ7fDRJbVMxXV5QdU88ZnpNbUorR1EyY09vfmp0aHRaWXojKjc7Z2BVUGohbGRDaHI+ZFFscFVbJG1Ze2lS'@;
put 'QWV2OWRydD1pdHIlL0p4cEJgaV5wfXEjMl4sZ11FZz5xMHBUUl0oS0tTRihrSFpHfi57b0ZscHhWMUhVbW46MEI4VURodjMlLjZldiY8OlddInRSPmtGS2dZSnsvLz9WdUt5fUNRfG16XlcqfGl2PXNuMDI8QDN7S3peeCY5c309TVhSYVcwPkU1KXIuXSkiZmk/TXR0Wz5fbU1JKCNabFo3Kjdx'@;
put 'IVpZXiFlOykjXW1iVEs8Ji9ZXS9WY3g8XWQkbTEoKylyXU1RVEBxQWNheDo0QmdaWSVKaXxYOjdKcSVkZ0xSJnokaF1FVWtaVCxLS1NNalMzWmFZQ0RiTWRfb3s8cnwubU5oND1nXSIsblQ5VFooYXtbT29UdERGfn1PP3gvYTkkIjR0cTw6dz1AbTZtUXwiWUFgMlcudj8vKXJvXUtIP21HQ0l9'@;
put 'SXY/bWZuWihARj94UEE3Pip5YCp4NjFydS8qfSE6T1RuVGRUTjRpL1gmbV12SSk9UExPe1hFUTxebThBRn5gMWAqXXZ6RmpaQWAhY1QpfltAJnlzfFc+eHZBNmhuWkFgXzQkYURdNTNIN0ppOm9vaFJ7WXg+bUVvWVcpOH4/ZTVlZ04wdXx6c3plQWA1V187IVtNPkl+O0w+eCRGTjRENXV8Lzov'@;
put 'UzBUPGdDPzlwbG9dNTI4YzMuOUhVQFA/MGYzRGRBYWp4KnhTWWdGJS9XU3ovVXoiNWRxZ2AiV3Z4biNCd19jKFglO2F1SU9SNWBpemw/XTdbXX1NPnBUMzMyYTdNT1M+JC5lcWhqYUZzbEVDejA+VU13UTVAaDZAKChlVyxhMXZ9Sl1YYUErMlBSYXFILDw/ZGZCWlFmd2pJdFRtblk6aVFTPUdk'@;
put 'JjdOUEJlclI+PF1yN2t2RlE4WllsbVorLyMpd2IrNUAlZDEsQylqbTUmIkJ1NFchbnJORVBxRF08Tz5sSTZuTXJNOFokIztvRl83MER9K09EZXJ0Om89ITtGSThfd3YwQzs5fDI4eXFydWMrSDM/fS8/RWIiMzh8YXt2Y3FVZEdIMjs2UU9Xa2hNL1pLWTdYezRed1BPck5Kdm8zUGdIaUl6Iigr'@;
put 'd1JsbUVOaFd3UmwiNFpOaDNmeiU9MGI+Qy5pY0Jye3orVnRoWz18e28zdiZvbyZRVi9YaFUzLnUobTNnWyFLWnlSK0s8TXIvfjk6bVY3OCU7JGJGcVg7bT48T3Awa1tlVVIwJXcqe1NNeTNkM1haMCMzeVUrYjFeLzBlLnspNWYsIWtEUkIyP2dBa0FTdjxvQ3hQZmVWYGRNP3hxdndXSkk2QHN5'@;
put 'N2RuZj5yTUAle1UsTkxAVGYlRlZzVW5LIV18JVJGTF0jUiQ7ZD1Ab0N6Wj8udkVEJUZOd010QVloNVVYe3tTQmZecTwzWyRnNzBYTzlGbHFaRkZZfGtyRjYxKHNCKihRYSg7MSh7dyFlUG15dS91O0BPKzhgYHddLj1HcTc3NHt+RjF+d35UJlslWDZZMFdeQy91VDJ6aCNfJl9qXytlfUJjb3kh'@;
put 'VncmP0VdM1cuYG1ZSlg6NytDbn4/bTUyKm1yJVBpO0hJRSNvLCVqK1AyN21qYGQuJSNSI1k9M2BoeGx2K0RuI3cre2p4JVF0PX5nPVRuTW55aXI8dyUqZiYme21PRVcxd0BbMHtSdmVoQFQ1IVY7SFk1Z0N2fGthZTpCTlA8IkB3enRwJjJkel8pPDUjWyYoRGpyeTRbTn09JDxlSyRDTUd8S0dF'@;
put 'Wm9ieykwe1tdOWRMN21xRVZrREtaeiIzTE9TU2Yjbz9WJmtJOW0sYChUaCthbytZdG40VmVnUTBgLCROUlcvc05+W2pAdDB0Lj0wIX5oVTI0KzFjJG43M0oxY043I08kVTpBKUBdYVRgSXxAIkV7O3c1QFZqQjhGZU1AVDBMJVpYJVooR0hfb0pfcXhpVG9TS3taaXNwcis+bFo8YSxkXjBdWjdK'@;
put 'bD5Ed1IhSD1MNy5xOSlzNiRSO0p8XzVXV2NnTyokeX1HS0J0T05yWk87STEiSVFydStGOlVmIz8zUmhZNiN7Mm8mI1lkVE40X1RoW3VJKVQleWQwS092RiwkfnchfW0uPl8+PGp3KnRUYXUvOlRbUDMqQURAe0AvWGBDTDxvdm8sJWpUIUU8Um0ma1pDfmlsIywkOC5YaiV1cEB7Kko+QDA4Qi94'@;
put 'RVpBUVtNMFksV19NMklLbmJYZUhIKnIsTGFIaD5pTVl9aSY8M25zfVkwVGojTnU3S0I2cGBGSlh3NGB5clhjXXJlZTg6XkNaKyFUWEwsJmk8S3cqXSM1aHpCNCwweiJudFlkNHk0clBZaVV0TDE2d1ZifFU3QEhpfnhMbSVQJCt1NExHWyM3fmg8b3ZCaU48NG05SStqaCMyemNmbEBvTC52em4/'@;
put 'VHhWW1skPz9ibDo8bG9hO3BPaFJoSWpEQE1+el56VUpUdWFrUD1IayNbMEExViRGOypSdW97LGIsZHwqeWk3aFR+SkQ7Z28rI1FOUjpAbGM1M2pLM1RJeGh+I1lATypgW1RlciR4c11dKFVHSFZYOXgvLi99PztXdF9zUX1VLGE7VHhrc0JNUjYvKUloYjBTJFlAT1ZjW2hqdkxhMVQyIUYrOXwo'@;
put 'WzE6OnJjVjhKXlYreSZOMEJnMGxdWFU9dzM8cmVabWYoRlJRZG04SXk/IzcyKXJXS1d4UlZVa0F2fC5Nc0d4T1hbYDI4RmtXYT4+IXNjKGN9OT9wSztvT1tufUlVSkUxS2koYSVGJFddQ19GVlhdQzRMO3phdC9GVyl6U35wNCFUUVBRQE1AVHFbUDlDOEpIPWlNKmUlLF1mN2JpYGluO2g+NTp3'@;
put 'fnA/NDdeOGpFdyh6IWVMVFEvJl49TXVFZVFOOjd3UyFFa3ZzXVl2XiVQUG5jL3p3NFNyTS5DaHJ1PCEmNXxIaDJmU08kSU82KEtXPSo0WWpuanJqUkl5en1zXzV+LEpzcStSNEl7QE5ENWtqI3k5RkhyTCZXcm5MRGpnWzRQPzdwR0pHVTxoWUJdb1oqXTAldnpdSDsvSVZUIiZkdStAUnllRXgl'@;
put 'Pm96fjw8TXB2KURqfk5Lc0R1K3hncmExbTEjNlshJVV9UEd1azdWYjNmM1ZraktUPSRvYV5oRGFaTyVtZj0zNS9ANW1+IVsqOVZKPWA1S1tJU3F1azZEdi9GXzZmYjoqVW0rXVJyQFpOT2B2MVprdTlUekx3UUdDTlUzKEg8N18maiJuSktsJTcrYykmdF10Sz9odCZtTFhlQ3ZDMEhVYHZSUUQ+'@;
put 'bDppNmkxJW9hTW9mJU4/NXhXLkFsVEA4ZUJEVVBfeHYxW2AuYms5QTdFI0pvVT0oQX1MdT18ZmslXyNhPCtOOWYvRjp3SmV6UildTjhoJU8kVHQ4eE0sY1I4fCZDLFQhXndTZD5iVzxPbD5OLno+Y0VIcl5CMVdPQ05eTHN4RDAsU0U2SWpXPFUjLnk7KF9mNzxlOyIrQylsYClrXUAmQ1BXVnJe'@;
put 'dWA0O107JjRAXlRlQ2hUbVU/VCwpKzt1L09gX3s4VHBNMVdhPUBjbC9URSl0cUA7NTo6OnNUdHlme3hgfGtkS3VnVkcmVDJ8MkpEUTM6UWh8N0FhPUByP3E/c3prXXAwIjc0JVtQV2tvSDBnPnolbjxnKktDZXhIU2hoRWhMa3U4O3FjYSxRZElCWjpxY0ozLmFHUWtsQCw1XTFLbUhaO19WXW1m'@;
put 'P3UhaSt5JUk6RCt5JEpydiVsVHNMe09iUmdXSFtZMiYxW2I/Km8uNSpvLi9WfTpQMHwhelgjJjYycjY4PU4kUX5BeGllPHhUX0RIeWVCVkRUSXM3S3oqJHxuUW1seDY3KEVeYXA1ImhpNXg0M0U4PmgvMnlMZiw3ZFVpW2I4TmpySiFEWi57fT00MCk5JDI9PWhiKztxZTBvPiF4Tmp0QEt9UiIm'@;
put 'Qml8aGNQYFNqZEQ9d1FGK2h8UUVFQiFIcElYaVlOemhnYEY9TUxYPTZgPSM0ajlZdlhVdTtneDFzSWtyKWIlJmEqVnxEeW5SYW82eSN1Ozo7SzlRSShSUE50MkltO3p6WEJ6fCFuanwmKXZXN2htXlltSCRFKDp6aV5kfT8jRE4/LDYlSyZ8U1gpT3Z7WHYjR0t2KCUmL1twISEmalJ7VFBiMUtt'@;
put 'SXEsNExEYmdxVnhSTDYlKkZWWF52KV5HUUokbHRkUDQxVmQvcC86XyQ1TThvPiReZlc2YFE8ck46QXZCLipSNDZyalAhYmpBKWFjWioyOl57Tmd2I0E1K1J1YTY9aChXbShdVU00aWU+ZG5oWzEsSGMkK11wM2dRTyhORW1rfHNRP01BK0NJODNfPVFARG1ZYClTRkQzQ35eQC8zXXtAclI7MDtV'@;
put 'MDE/STs+PygvdChUJH04RSxGOnwvVFVjbyNJZjpAUTV2I2lnc1c/ZX4mTERjOm5vS09kZ34lYms/LFkxbywlaiYlPGcqdD5sTDlBZ3x1bSo9I0VxWHk5QE52PGomOy8pbmY4VTBJUzhKKyEldDk9Z25RPj0+bHE7Tz1BPmZwPT1uYVQkISVhVFI+b0teSlY5S2RPQSZoMF1oPiFvcjIkVmtAZjRp'@;
put 'UjUwdEhRcFF+Xjd5SGUmfTovWERYWEdAOytkPGNbPGQ8JElLTG05ZHsvRz4vT2wqXW0hNiNPUTZeMV1pfEg1JDlQQFNMO3AwWCZSfHBEPXl1XVJ6ZyhMdGF3WlJ6dyZnOEVGKV9KRm1wbCEoPzhSOz0jTWpoPF5XISFRYENDMihnd35oSUssVGEsWjFZUCFieH5BcSolMWVJdUIoe0BpVWtsXiFJ'@;
put 'N3ttRjVkLlk8a3hqb1d7a0RgJEBhaUlgYXhqOERdOjZ5UlM+IjhsMSh9a2l0SGUxTmcxdjlRZH16K3JeaDFkNyI6OStKaXU7SWReKX1mVF15dm4hS2E3PW5qbCxtJnVwRXdtSCQjejd4anQ3cU41JVhkPnxrMk5XRXg1QT54PW4yKTs/fTxsYSZQIzBvLF1nLzNrLGF5ZlpZVWIuO0toaUZvem9C'@;
put 'X3hQdjFkfXtpNEZ7RFJZZylEIiNWMnZwXVg5aFcmfFU+Zjppd21ZSlFfQ3ZOM1dsNEI/Ujx2MkNKc2ZgTXM+Vno5KkBJcjt4MjtIamMoKyoiTTMxPXxuR3ljbCQyPlIzbHVnTG9nMjVRRmlneF09blB+P00uZEJSbzYuRVoiaiwral17TUVqX0cqUiZEYGF0PmFPSmE/ViNdbzw3VGl0cVIyN3Mr'@;
put 'WDE/TXI7SWFZUkk8VmdANiElQSVTVy5YQDpVYUBbNVs0PEMqQElpNVEwUiRqc3BOSmdxWCYpMzVVXnNOOCNTa2F0IVU7Yks9Iiw9VHE8PzkkSW8qJWVUO0Jfcng/dCUjeyVlfUdbQCEhdXkxQXdRSX1lYTsuSHBZS0dFKlkhdU8wemhpb3YpQE8leTJVIyNVKVIlPC97U2ZBbkgjU21FanJ+Znh2'@;
put 'cSsqQjNyYiYuSmF3NyhePV5ZQCg1PiphaTU+PztlMWRLcys1Ty8wRXlMJDdlR0pLU0NQXXFuIUg8RV5OPSI7bHd3L0ojaSVkOChARmxFdShpeWJQflo1KHh0KmpxT1txcT1rbG1yW0VReE9rZihqKDI8YnRkSysiOkNHNWxNQEBXeihQITsxKVB4OE89MG1vaHY1eSs0IyNdcE5tcmlsX05bSXVs'@;
put 'ZF5jS2cwS3BiTklseSMockIvai4sMT1VNkReJFo9eFt+Pn5GNmVpUW5vSnR9bjA7ZnJ1YmUsU0JtPSNHcUo2TXJzJl8yc29QYXBKSGspLngmIXw0ZVlWUnlKWDdzbW1AOyV4ejUyem1qfio1XXV5IiwlInVEUCp9WWQwIUQ2aiEqakksZlBSJHh6KWVtRSMwbGwyemQ6eEdZXjBpWndtJlBOd1Yr'@;
put 'PFowWG5mYTk3dSJnRTRALkVfKEU4XzpPX0dbOmE0OHx2MTROcENbTzxDbz12UGlVSCsqYWUuU2dFaXBAPjBXdzU2cmFGcjpMTH53NjVQSms0IlpndEhoazRzRDZ5Qi5CWzgza30oaEFzRCxwPyNGXzhYTVROWWlKSypudnsld0c8Xy9AVkdva0h2NEouWn55JlpEd1AmWStqOlgkLkd3dWFGPGQi'@;
put 'OiNjNkBJXW46Y1U0e2JFVFhhK1I6Ljg+aUw+LjFyKkVQSn1dWGgwc0pYLk1wWH1PTzRzej9FZ3dsaClZRjJWQWtRKFtBbTEuZFVjWz9dOjtkTlM1bEhuTU9tQU09Pzl8WkhtVmdTLkAuIVppRFVvPD5qTzQkMD99QWw/K2NXQTUhanQ2Mlc3R2JpNlJHMFhNVkt3RHRaX0VXR2ZAZ0QyQ001XSJ4'@;
put 'cUZWTHRdbVB0eUJbM2QzY1o6QmhybFZ+VVp5a0MiRy89O3FDV09XOSNRMSw3K1twfSI6XT0pWGswdi54ZHt9PjdAVFJjSWpuKVlDNVoiRzRAdjJbalZ1a1tpdH4iUHdaREsrZXR0M1FMKnNGNWV3RzwmPzZgalAxJTpPVlYmMG1uPT4uK3UvNzJBbio5WGNZWC9rKCVZaWxLeDYhOj5hISZaPFR5'@;
put 'UTMwcHZDKlYvL1BHbj83Q08rRWpMMDdGUWZEalBZSUhvX1dSMzt3ckhQUzxpSjpdZ1VKYHw7L0lFfDZdZnQhemNzLCIoVVIoV3N9cCRNIkM4QVk0YVRrM1coZkF3fS5jWDxHfS4vY2llaC4vQWl0QmZNdkxNamVmKC81SUg1LFhPX0FBcCZbRTopezxjdCYjLitNT3JOO3BzYj94WGF8L3gjPmxe'@;
put 'KGxkaXRrQyZ7NFVPeyFySCxCSlNhNDV4ai4/M1ZpeklRQmVhQWBlWUhTcFQjKzNwWl9TYlZTPDp8VDgmMVheUEdEYDUuZ3FdNlFWXnohWkIvelYyekMlNVBoZSZNUEdkQmh0PD5ebmlKIVJGem1WPVlNODJmOTVaeDVwMmQhJk54ZW4rcE41aF1SXiRVWnliTmclOkBycj9Gayl4TzhZb3VmZjJX'@;
put 'QDtPQFA/JisiYWxSOFA3L0c5eElmRXxDYk89XUpkK09FQ0YwflAhM3o0fGZbVV0zLmsvXXcvWyJ2fnY4NTt3IU9EJV8+NndWNDw1Lk80PV1UeUdSNTslb3U6WF9PK005OGBpS1V5MnZ0PlBlQDNbTEl0clUvL2tMaSVOXlUwSyshYG5WMVdJQD98Z0MhIl5VRyptQjleZ1lVWW0+Smp5XnVCNGMr'@;
put 'UjR+e2U0Y3pKL2hjdHdVeXEjeGgqeGpEVmsoWzM4S2VodGB5b3M4QXtscEJ4JnMyfXB9Rz1TMkxbUHp8Zlp5Yk5lVVY+UXBbb0J4KGBBcSUyd29+PikmZDhEVU4wayk0fjRMKExKK0NdbC53fFddPlN3UFEweUZ9ez1TeXBSRjEuYXt9Qjg7S0BSXj9memk/KzIlOXJKc1olJjhKJTliV3w/ZEE4'@;
put 'KntwZCtqW3lbMV8uezRLLFZkU2BTbVlvO2lVOD80JiVYZik7VFV+ej1WakJ5KChYPHtOUyhUSV9Rcys+QltWdVE9T0FHMklNZl44ZDE9bylZbnpIbVk2JGZjTkh2Yy8yMVtwaz50JlU+eSwwaUBrU3lOeCNxdSt1O2FmR0BQPjU5WlhHPElzSHZpcnVHYV1hVkU2Kz5iXSlGWm93dmcsT0tAKEZx'@;
put 'W0NZTk1eQmpAP3p6V0A3NyJ1Q2MwK1A6KkkhMEVHa3krWDBBLihhLmNMdk9PfShKO0RtdmEjPz48K3I3cXgzUitbXmlLY3lOK1UjKktWR29GTmkmP1claVQ0PEJnTlYwVENKWE8reWJGP01AVSU/a24wa0ooNGxualg1RV4iSFhpeHVsR35YMk92cHROQk9GallsfC50PEYhWUBpcCtWMDNzW2dX'@;
put 'OHAyJnZzY1s/ZVFiYTxkIWxhWWIydEskRlcke2I9cyM1cV0xRDpjcW1kc0J5alNzLFhXe2w5fmQkVz13L3pFMEsjVHRWRDplWzZmd2t5akVhWmdjMzhrNG85TnUyWzlvZ2NFcEEzZlBST2E0dyRHdk0/IVVtKFd1PSV6SVNRcHp1I2JUeTBxXjhaNE5saUVKdDlCTFQ2biIrUWpJMFVFVk0xeUI/'@;
put 'ZlVtYzRabW9tfF9GZG4jTEg9RChnck4+O3YyMkc2aXxRL0BgXXtjZkVMYU50OElUWChXbkprWXthdTVTP1ZpZlA+dSozfTRIPGElKiU4ZWd3Wk9jRHlpLGEzR1h0bUolZHFPbXpdQGhOSS47UHpEM1QzRD44ZCpMZV1kJlE6IktJP2w+Z1dZYCVoNWNOPW5JQmE5K0dmWEpmNEcrZmhUelJuQkFm'@;
put 'UCxXMEhOTGFPTWlaQDdZZSxEY1lzSFBNRXloKiVXIS8zbnVNPl98WDJ3cGJeQldIcHdQZndHR1s4TTdpejFHXTEoTlBdV081ZmZXMGJSfFE1NHwoP3ZJWTFQSTtYJitGKChrYXIyPztEXVQqQ1A+bFpyJktoaCUle1p0enUjeytVODtAeV1xfGVJNkQvaTh8MlsvNkg2fmt3YlRvMypVUSU8QSUm'@;
put 'ZXc/OiJxLHRSeHouOnRVbVVQNnc0dmNSXXxeKlZoOCtkeSZjW29eemFOcG9ISlQxQkpJc01qcng1W2JvX2tNanRmZnc/ISJOPj9acmIlS2d0R0E/Mn1kOzAlJFFjQFhyVWVVOyo+VWVsdnBEd2xLLEBLN0tObjtUTCxaSVluVFI3XlAsX0JlRix1JUM8Kn0je2N3Km5odE4+Y08pNlRxTjlOTWxM'@;
put 'KiU2LkhAVWMqblp0Tj5JYX1FT00ySSlVV0tNTjN0WV9JQDx6Km5GKj5QS1kkX0ZgXloqbkhqPFJyRl1MIz01SzhKRXcqS1omaGNzLiRLcWRtZDg1QSx1b21TLnZwe3RJMlB5WkxrYnxaRCU9dWNeOUswPjIucngyXl9DJEVFJDk/d2JFd3AmOjBfJnBLTy8jOVMhSjglRHw8PTVOLEZuXlp0SkRO'@;
put 'RmRrWEt0S3tiZyxHXiZZJFVDUFdrSjBqeFJGMih+dnQ+O3FwOTlgRCVkfSwwK2RKVHtqQUpkKWs2ZXd+OkU1QyFAVU90PERKLF0hUWRiKWxkJlhFdypLYSleQlFKKXo7Nk5EaDBVOTdeQm4rSn57PjZTVW9bJVh0NUIrckNafiN7MDwiMjBXNCpGemo9dU9fUzlFc0hpKV57VWs9eGZdVCo2aSx9'@;
put 'ViZgaUQjPEJ+KFswfFhwJXJRdj1+VWM+Y0BPLC5nPV1pc2JoN25ySjosVFZ3cU5SQyowUHZEZFo+Ml9KalpxTXdxOUJ3P3kiT3l4am02UEhoTXN7Ykt3P2wqR3xGYFtJdz8zMzJbKHFsNyxjZ2Q4P21wNCNucyEmenBJNVdALnNNc3Y5fXMhJi5sM082TyxIPzAzOHZsIkZ4Zzd4N3hbdElPa1Ju'@;
put 'VWNsdUVgWX0lfHVldlB+Z0klOH4/UWFvcF9yQyY/MG8sekYrO2k7PyRGTDRATXIlN1lAelVTTEN9WV1iZURNTD8wPWNOLDUkKXQ6Rjw7NihZRkVpUWM5R3w0SV1bIWl+L0dfcCs6NTp6bWBjRyRYKzMxSjdje0AxbyZDWzBhWzJXVW1eZCVKJGRPNSlyN2pASStCTTdOJUFEYEIxVS5Pbj1LeGUw'@;
put 'R310cnteLGcmSl9EPWE/MXdVb2pAK01JOVYsakUjNTpNP0NyZTd8NH42KjxaXSxaTCRZQDZQU0w+fVVdOzA1XUh3KyZ3cTVUeC5bSmooRWVjTjIvKFpzKUBJRUxxXm09cWZnNlQ8MHZRVDtaTzBrfFloTWNebE02bXBgYyw8ZlEwaXY+bHBGY3hVcjlbeEszYDdPPDxjWyQrI1NRPDd7JXo1ZF5v'@;
put 'PVEjNHVNO3NyQ1kmJWRRN3deWiprKCVoSFFeP2xJV0RZcDtNPzZefTpyYyJPanJoPmhUTnxPSUJ0MjxxNFYhRTZeUCwrT01nV2khVClJeWpASVUsK1M9R2d5YXFsRSl0MVJgM0xQe0g7O051Y1owPlkyd0hPdUdVTjRpPyErIVssfmpNUFV5ZGpbIUpuXXZTXkYhZDp2KSRhPGZbKHtUZzowWD0x'@;
put 'YnFQYV9hKGR5ZyhGYCxDbHUqJkhYbTZseX5+QnRZOk5PbFNZYDhpbGRNbnBuZkVFSlpRVENhJVRBS1k5ezlASWE3Tl5yczE8UEEwWUpuWS9zLDxTdjBLTUxKQm8oSjU5SXBbMStSclN0U2tqNkB6N0shPHRCdkN4LGxlPlhUYzdMI1VScyRhaVpUMmZhI3YybWYqOFkkWmdEOCJ4P19HcTpwdltN'@;
put 'cjhTYU5vXk5vUWZjLm4/YD1iW14rPTBCelg/OW5AcFs8bmFFOjBdaGc3ZHNkNk8jWn07X3pfUy87bVQ4VGY6ZVRmMlhqOyxiJFdeVGRiV0VINnM7Wntja0dzc0hHeypyOGpseCRuNi5rd0ooPypaW0ZNWS5nbUciRl0sUHQzIlspLndWYjw1ZXkjeVlmWWZlT3xrLmBiJHVqMFlLXyJ1MEhUYU58'@;
put 'cF8uYWAodStAc0l3Z21dIW4sW1hNN25ULnVqVF5STkxkWEFgSml7b1MoYU4mUHsqZlE/Q3Z1S1lXZ0Yxe3AkeiI5LmdBLz5iaSRHPjRkclAjRHlqfHZYd3lJNFgzdzxFSX09JjBXWjJOalB+bXA0VDw1cCRiJTklaVFkPk0ibkM+MF1IQndaang1Tj5HMGJufmQ9aihTOiZWVWI0JlF1MHtialdQ'@;
put 'S2kqPXFIfSNZY1NWdndQa1F8N1lJaDglN1BwUUhZfVNaO1U7WGVZWTBANWNZTVtMOTdhcjhlZG0pNndPT2QwYjdIRyFWMzJARzxkfm94M3JrWnFSRi5eP2IpYlB5LDppKjE1LnV4cFMrZU1ERmBQOFF1I3JUK08/Xl1gNENRVlVdYjYsQzR9NV5hL1BdfHUrUkI2IyY5PFYmMS4sVWBke2ZuJUFE'@;
put 'Wyg/fV17TzE6QitzWGFBYDoyVUxUNXV8PzpNNlsxXV1vKVsxcnFHZC5FLFp4aj4mRTxXN15tc3dOflQxcjVLPFZPTCVKNCopTGksKVojUW87LlRCN3svd3pkej1ZZ3ZHVHVQT1VDdXNOflJOb3pGIVYhWjA8aXBpJiErS3o3VHo2dU5+fU86QFAvYkJ3IzwkLG5mSjRPdUVBQVhMQnQkYkFBR0g7'@;
put 'VFp0RU18dSVHQVJqZSFBRkFTT205UTx2JThjbkxJNmx4LkxnQUFBQUFBQUFBQUE3RnFHSyhVT0JVenV9dnY0OkFFJDN+cXg8XXZkOmFJMDxDfjFISlVZJnwsRSJoNEsuYWpYQDJGZTUwKy44d3czRT9DREU1eEZgPVEvdX53UFJfK0kwYEZsM3RzPmNNb3lGNk9FWzY4YkZDV312IWl0TURISERb'@;
put 'ckRKLEJsRjIhV3E3c2ZEP0BRZm9SM2dxSG59KzExQ0p2ZTsoWGtmfD1PaWVUUT92QSV7KEI3dlhWdkdyN00jQTYjNkJbUEIqTXwvbW4mQ1lBKCRtQFB2bkElcTA2PGdAcXRPUi99aDRHd14/IT5uUjMrQDhJLk19d3QuPjhnV2VCKms5TDN5KF1qLE4oRG8rIUpBNFFjRCpvV1QzbDo+U1o0VExL'@;
put 'dE1Cb0dyUmBRMGhSe315NVgmSTFCRENpSzpvPi4yXz9BW3BOK156a29RUTx5PEBqUWBScSssPzF1VFYhdih6PW4jW0xfKj4sUkk1RSJLQVJOS2c3JXd1P0khcmAoNjJLdEpgfEdxIjVPY2ZgWT5JNyhndiVuaz1NSUtKRDx5VSUiPk8jUDg4SDBmcXJsXiRUaDo6T1MhVH1UUlVuIXEybmJ2YkBl'@;
put 'RT5MKSwrdVorXX1kLytvc2h1NWllYzpSTnRFYXkuZ1RCWjhYfU04LyF1emwieS8vJE0qblhrK2o0RnNqL1lQe30vRChSfU1hN2hjKl1sdTtIYnpJYjdOWkZGVUwkaTp1c1pwV0NdPlVaRlFgdGJiIzFNVHx5Y0dXR11LMEd7YyVsOktZUVRpTS54ZjZTenl6W3U+YmZGVDE3aDAqKHJFeEFsPylg'@;
put 'WmBGRFslXkxve0JxV2tVSF9WezdXc2NxQGRzMEJGcG8peSUwdXxTfUReSipoe1tfZSU0bD0ramhSLEptbHAjTypQZTRIMU9ZZUlYeFB4RnVxRCIxVW4jVDAsPSspPD1+SjZ3YCE1XUtSOVZmZSxVNXJGKC4wSyRVM20mRkg2bkpUW0RrdUNvMzEzV2BLY31JOnNRZEJlNSF+USRGTUJ4JWF8N1NP'@;
put 'QEMzNUM2dlcubFFsM0ZJMHBLVSVCej44NkNbNz9jJV81bGdHPXdvKDdrJE54PyozVl52M2V2MEtGOnooelBvW3Rsc1NEUHIzem0uS1J4elhYL3hyZzxKTFtmSF9Rdyp5KTFmK2Z6eTshUlk0VCxoZGlDbEcxVns3Pl5UaCVWYzg+e0xyXm5TUFI2eUBPd1F5Nk5zYzQlZDV7UWcsN3lxQmxAa3Nk'@;
put 'Mj4qNSpOIjhrZnpWeGA/TEkkVnQoQUYsYyxTM2ByRXhZYD45SWZXY04rfiV1Ik9ZWDdzWlBBSGM+VGI+O3ROODM1fGp0L1M0ZTA5Uz50K2g/R3VVKWRNXVBOJlVQQzUmL2dXJCZ3N3t8YmYleDx8YlQ2IUhfSSVdZiJLYXZCd0Y8PzsvX2pSOioiP0c3SmosSTNNRk1AV1o7VkxmOzhtalRhLlJL'@;
put 'QnJIPyt0dCEhVT10S1dBVm9UbDJjQWwrSUw5V10pKX1FTSlnLClua3V0L0s2TCt0emwwI29pRzNJe3hnOnwoRD4vMFJvS3dWPyM+N1NaQ3Y8UnJTSHJ9Z188SyJSMVZqXzhudGxnMkZxKU9AQzgsRiU3WFZiOlFKKn1bc2NDNTNWfWVdOjwzQ1BrN2JnVV5YOW0sZDRSPV5tJGlNdzJaU3N3Im57'@;
put 'aTZWK1Zkd1AqX3dMO01+STZGdHkjIyZpOmpwNWZRdV5UOFUqKHNadihDQzY2Jn1BaEAsNj87cjB0UnRfK1NqIjp5d2Y0In59V1NEZEU9ViJUN1J3PXtSZ3tzS14hQ2hQd3Jmd3EiTHV9b3FxQn1xPnhNI1E7YV9tMkJPS0c0PXdWbFJCU3codWwiVEApNFshIyV0YTxfY2g9RGlZYU5ReCN8OD45'@;
put 'Y2B2R241WHx6cjxSYSx3IXYvIXRhaXgpP1hZcUBeZnBsflZtQmwyZC5JRmZzWkkwdFAhVzshJE9xd1tUXzVoQlRQOyQlOE1bKTNBJDVHUjY9NC4xTjZWPEw3Mj8oREpMKCJAfTlCW0BHVm12I1RoOzBpc1UlclQ0ZEcoUmxdMkM7TC52UGZUTDVOdm06X3FVOT9bXkN7YnZ3W3xrXXB+XlpvRmM5'@;
put 'MV9kPjgpfVMoLmZOSEkkc2pmXzxDYT45MH0ld016Oy8uRFVZUWgpVE0oLHwlc3N2P0R0cCx3OHgpRW9uX15Ncls/aUFwI2Y2cT0hSXMxTHNsdypuMzxpezQ6WURFZnREWHdPPTU1LFlqZilJN1g3PilQKzdSSnIkXUchXmlmIzVvQjUrTHRvJEA7OjNeNmEzVjo7JVM7ZylUej96SnR0V0IzVXJF'@;
put 'a0F9M3NjfW4kbW4uK3UjMFNgWDl+NEI+MVV6RykybXxMMjcjZnYlSm9MW0dNMDlPcDVIdkA0Rm0sdFNwJCx7XlNfJDs0O2tKV0E/KDZbS3EkPmlQLz1fM3YwfUNOXl1HV3Y8LHl1S1RYRDJtJCE1eW1ARFowWzZbUD1ofGZCNH5XPW9iRlJzK353OndaMXs+JVFmXVdOQnhadmlALnAmIk13ZUFQ'@;
put 'MGVpcmpUTDUvZ3IrKy4wdHQkMVguZy4qfHlFQV1EKjxFX21xVUJBRzAwJDU8Vyxab3srTjRGLkpsbytoYVJWYm5PViIkIVRNWStaVW55cypobVhCJk9UYkl6ITFFRjM3YW4vb0VwYGYscXVIJHRvS2xFMEA2MVpaaV1AcEpiYTBXfWZ0c0g5P2UoKHhLMm0ya25IXzNSW15+a0x6UEd1WS5lPmhv'@;
put 'VjMmcjhdSDF+OjBOayZzJm5uUWxGZCM5eSFdYWIwdVk+LyJYKXZqTlJ8YmlEflhCT2xRd3RePjsmSSY2c045XjtMWmpEOyM5NFE2ckEyeCZRelErY1M5eEA3Jnl3KjkjPVZFMkdSVVFPQ0BFM2JPUGVMfTtBWyF2fExXU1Y8KVAjZiw2czg8V3FFWEo8WThdaj1uIkxYPzptPEl3bHQ5KCVOWHou'@;
put 'Vy5qfj0zVjRYMmIufXpiXnhZYH14SS5UWE5EIl0lT2ZyZ0hDaiJOVXhKaVBSWUtTLEwseEZaZiRJOzIpdTQ0OU1gXnE5QStBJWp4K1VJNk1JOT83TU9aWWJlQm8lMEg9IS8yMWo8QSEhc3gvOSg9K1ZBZkQhJlRTRGdQPitWZG8sZWB6QH1jeUp0Z3VHfUpFQmhGfXBtYEJBKWtKZSxiNSUlPyhd'@;
put 'TFtdaUUwIlgpY0RTKFg3bEFwUnAvK2xTOV9NS0dvJkJlaTAxZHViamllJDEkX2A8TWhtX2QyLmlyTU1fJl5JSXNZd1NXZUBnO0VdOlEsZmJRVVJgXWs4ajwocmMlcEZaPHEiSmUjckhqY0NXSU8xRVJEJSQ/T05DcjtFV10rdUsqUndvVTYpKV5vUXY/fDdUNV1dWCRrTk1EVH4/NCs7LlpKOyh5'@;
put 'QDhqOHNSUGhQfUtLV15hNkE3U15qJF1FZ2ohXTY+QG1uW1lCQ21KIUVffH1QKyxJWEw1fUt2b1lWWXc3PGIwcz90cURsMytgPlV1Z3FeZldvMkBobnJmYTJlJW91Vl59V0JzPEcrfHN8ay5fJG9RKTEielNAMnhoSjFfZkdzVC9vXS5bclVpanV5WCNiXT4kNGxTM00mMlpDYH19b104NFtzfGco'@;
put 'MDwkZ2VMK0wqNCVRS3o4Q1Nndl1iZkYwOmRMeWVYV3hiP3BrdExAQjU5ZW9SYlNnNUdjY2cwUWV+ZDptWm5xUzNdby9sdUoydz9URzRgSSkhfkVEVn0hS1pxM1s+IUNYSkJuaTlmUlUuYV0rMT47LGBlcUQ1PFZ0KSQ1fFV6KEd+TlFNSUt4bTg/JFBMNHhWWC9xI3pmLjczRkkzRS8vXSNyXyl7'@;
put 'UEI3RTZWfU8/X1ZPRlldfEhIRXJ6S2pwNEp5IU5rLDU9UU9bY2l+RCR9L10mdXE0fDNWdz9rJlsiZ2R1am8ycSg4Zz8rRzIpZE56QCV1SkwsR1VWYiFhOUdoJTYkTEkuaCorSm47I3hKfndRYXU1LFpkW29DJSkuVX0+MCxgfGx0W0tFaTQ5azVuOy5HLmdbKlhiPlA9UmI4biM8ZXZkITU9WFtL'@;
put 'P1pwSzBhN11VIS9zMVV7ayw0YV5hNVsxOC86QiM0cltrQmtMcDpMLGxxQ2tNd2hoJFNWfD8zQ089fW5mL1tzYnY3e1BGP0x+I2xHc3BYQ2hgUzFbM3EwXXdze2I8JVEyeCtfNzE0bmhdZFJdanRyTVt8W2EmTz95NXhtPk0vU0x6UWU0PCRaRHhZUUlNfXRGaUI5LFlEdFguQ2g9ZGZWXTE4aCV2'@;
put 'OHRaUmN3QD51d21AQXxGLkxPeVo2P3ZKe11aUyVEc1N0eXJkcF95Mmk9ODZMR3g6dWpXZW5EWjted3ZWZTxHMW98WF5MaGRDZ2dTVyIicTFgOzcmVDdHM2JnSnZOfGprfn19XlFqdng3Iz5hZHM/TXNoKE0yS1ZpWjlDViohNkZobFJgQDRmfj5wV2MrKCtONHhoQExsV3JCRGBia2lZRVhyWlFr'@;
put 'Yk1FTHUpUnRqey99emVfTVdCRjUiTlh6L28xWWx9fDAhZ2J4cztBPVI5ZFJMZzh6WHJsZX5McmQhZSxfeW8xTl8lLyU4cHQjRVNOfkNFK0ApeVRnR3gmeiU3NEZtKV9EeltDRT9AIzV1RCp0YHhkWGh0KERyWlZKT0g5Vy5XV09mVHEuezolY3xMZ0lHUFFrX1IoSnlbM0tMUnE2PSxfSlg8IUp3'@;
put 'KHYvPVh5dHxUU219cjV3KD8wYH1tK2ApWUUsdypSUSVacDNTQVZEKEtzI3p7bzxENXNrPkNaQU5KNXBdMDR5KGlvZ30+d01DPVJGOyNge3lVdk14SVR0bXUldUdPT2FWKFd7fTQ0S093UCtkVXJ5bCg7LHs1fHlkVUB+eChWdUN3PF95fGxDQ1okfkdOeDhhRnkjfCpmIXN0KXZ8OmBRIUJ1Jk5S'@;
put 'SWl6WCw8Yl5zIztYW2FYTG9EIzl3SigpTTZDVTArI3hsVDgiYHZjZFJmaGk6cGtxKU1ObkpWbjYvfE8mRFZIT1FKUlI5ZTRDOHZFJiNGfnZfTFNXUikxdCZzZmt7PDB7U25WXjFzcEs3IURJSGE3YittbEFPbTUwMUA8bE5YPSxPfS5NTGNqRS46Zlt4V0UoVn5Ze2pzTU1WUSkhaGQlRy8iJGo2'@;
put 'fWNEKjlGb1hpNkorZlBnSjAwe1tUOSpiUyJWbDdrTyZ9RlBlVS4pUFs6Pn5dUGNxaV5+eT1WTE9Ydix7MV5JJCRDRC82UD1AYkhDPXFZJmZNJSNPaE5abWVeWS4/ejh+MXIwIllfSnE1ZHNVLn45I1ZyY0Q/JERUdixwbnZWWkM6QW5ubjUlJGNaaDxOW3o5X0FHMys+YlhrT2JLQ31iQThiZ081'@;
put 'VFprVFZJOEo3Rn1UUWU6fDYxKWokb0ozazFkT0MqKVc+K0pUNWlYQkh6fSE4ekJWSCtNNStpaCxhcWE7VD9TY1BgOSx2QHNvd3lWQUJxYHFVNHlMMUtJeCtRbnBEIWFLQUApS0F9fWQqWm9qTG5AbD9EVDYjdyVGKlpeWSt1Vno4dHVQb0pNZTRKbDhIXl1VQ0A6SFJINkhzTGdkPHJ8S081WG1F'@;
put 'S1osO2wsN3RBWFFJT3I1Ij95V3oicGQ/RTFVJkBvY2BgLlZmO2dNQzsrZTlEKG9YWX1UTk9RMXlqPDNGPWZQYyg7NHZJNENrOFBMSEg5VnVNaWhCQE0rKX5nOiJ+ZE1XY1czQDZESH5wI0JWUEg5T10+bGh0TEgmMFJ8eVdzQDtrcll6YGUyXXRjS18mNntEajZSRmxaWHsvW0pDdFIkb1M2WGY7'@;
put 'X2hBazJQK1l+PVFtU1FNby94dERzZFYmbjY2RCg0MEQoWVNba2BDViVWbFFzV0pSd1c2cTp0MnZheTBDcUdBP0VYIXZnTW9FSkFlTEdCcU9DdD1KflFeWEswfigmdUt0Zkc6ImxaX2l1V1FBcDdYQ01NZ2tfLHRmKm5lUUxQMnorKHVuTXhXPno+YDVYVWleImZSbitGSFBxJUc7bVpXNGVKW3Zf'@;
put 'bSwyWE8pX0U1a301V09HOk5NM2M0flJGXWQySTcjNyFiUStPVHRwa249VnVaQHtxQCtDZlFZU0BwT3tnVDhDYi9IRWJtTVUlbnJtXz45JjtgLEZ+KShCc2E4KXxSWSlzRVBpTCF6VVRETiRjZWp2SGE1RGUvTXZCOGtqUytrKlBWVElXJCJ8WiVRd2l5NjwqQE9aVUB3JXNRaUxwZGVbKSNDOnZX'@;
put 'ak0rWzk4d05PQD54aWxWITE5VkJXdC5DXU5lT3U8V0BWL111RFFRSjkrK35rczI2Jmk/Nm90Y05WZlRbaCNkcVBCfCxAR053UmQ4NWYuJX5uW1F5QCZ3VDtnTj1+e2IoY1BeIUZKVikxWzMyKXE+NXZTTXlYM0BZPCJ6Q0dKViplaGQ3KkljajRmTG9EI1VxZGVzen1OSGtgQm03OnNpTC8pfnY3'@;
put 'THRpeTNWZW1uWXRnd3lhdWQseiYiQnFCM0FqfDJhc19Ibz1QLC9TbUksdHdCby5tUjpwXjQqZWQwP2kkYlhdI1UlYDRrVyZOOGgyM3xpcTYycmRUJiZNaFUpZFBJKEk4SGMkMlRYVlh5bHhPbXU6XkRlTDohTiNHZlhIWCNyJlUhX0NdSmQ8QG5rbk5RO1VIWUA7UWpPPGw2TUY+OHx2emZ3ezdZ'@;
put 'KHZkWl5rInwkempmRGx2ZEBUS149JFlyXjIoJlk2ZWA0WCY5Y0JMY3dscnVpOXc9eH0/eWVncEw+eFZMMHBMZXcoJFhIYnlNLD99eD1VWDEqfWB0VmpKaV5URFhrX2QjYDE6ZHxGN0YqaEhSSzIueVRRY00qeTs3Imo+NUVlM09tYyRzXkZycnFmfDBNL2omTFd9Y0VyUWczOXZOU3RgMUx0ciNh'@;
put 'QTJjckheLChZR0FdSWMhJlk4WHJzcWc0QCpLa1E0dDFAUHIyPnNjO1tXWlY1ZGIvPWFAdHF0QEhVPF0iSUdZTCJ+SnJpOjkxUDhranYmdG1CPkJUd2FYd18+dWJPMjx+WWVTbGkjTC5QLHV4d3VwIXlgdmZMQW9FMDo1OkNjRlR8bC81a3lXdXQjZGJfVH5UPUk1X3cmcyZfPjRzZjUxW1lUfjRG'@;
put 'dDFDTHFqLGh3X2Q8UXFvOlBzb0NrMWQkNzlVdl4wfng9VVNLR0BbZCFpczcrMCI0IUJMeTo4XjY3X3E7Kil3UFc9S1lGdCZlJUMyKXskQm91VXN5XzZIKVF9S2w6fXpUX35AR1JAaFM7Tj1eQi9bWjs3IVZ1MVJmWi5xY1J3T3RydVlWc3FdMzdfakUuc3kqTUJaYSJ9UzFYTmkqVXkpKXFhezpz'@;
put 'fDRHKyswTEo9fXhhL2V+ZjxZWlsvaUcpZXRhLF1fYnVhMkJXOSx6I1JCNlZUXmdPeGxZSmd0bXBHVVE+S2xldl4weCs2Qn5IPE0yRjg1UkVKJi97LCpRSSlpemMwSV9jb1Q4YS5FZD83U1UlLlJOQVMqSltrYXpARGVHST5WfHl2TyQ0I0g4fGZTTU41fSomJi9qX0Y0WVFibHtVSGdvUXlWQk96'@;
put 'Sz80dTZHekVBKTdnN2pvOEVMdXJQOjBDOywzSG15fHRVQDB1KzNmcjhRZCk2UCohTF4wYDdCIUFse2tbeDVdNmtEJkVmKD11KCYhMndzXltZZVtQRUF+a141eUMlPjs2bkBOcmhnJC49MkliaT94YjwsOzwvYDgiN01FRn0/VmZDdzVOXnYvL002Q1Y8Vjd7Nlc5Q3hJTU5lMkNjLGdDNT1OXVVR'@;
put 'RDg4eGxWdDVFJikkZyhUdiV9cGEwRU49IlUla2olWC5XOUhFeUI3JG1+JFVtYiRkQXR0cTE/RE5QaUEscmFpNGIvZCt4Zi5ZdGtSJV81NEohPnpdSmlaTkJiXWg9cD5KTlI1SkR3QF55KS5JWC9FQ24rbFcyRVpdeCE1WldjdStbIU5WK3QkWGUodHBNNmVXJkJsO3VxR1pwIkBdOUdHb0d2a2RV'@;
put 'c30kU0dkbXl9aUBHTUZsVVRMInZhWipZLFBxWntoSEVhK1RjPiZTcGlJM1BFU3dPRWk7VzZRKENOSSkyaT9jN2lHUlI5N15aQWFeSCtrNlVASTIxUT41SWpEImJyeGg5fDk9PDEhRXcmNHIkKFdrMkVmO2ErLzFSOzVLKmcjSHwzQ2orT2hZeFAuXSEuM151KmRsWSt7YShZdF90eW9ILDlNSjFd'@;
put 'XiZQNlU5JGguMzdHQiI4RH1wP10xTEk6T2lnb2Y5SCUzdWtuQ0ZaRzw4dWs3MigwOj5yd1pXPGZbMGRXRlJeTnxGZEJbQ1ZnSk1UaXExPCp4SHxveTlKflJBSUBQLHd1fHAxSDZIJX5HW2kvJlteazNTcCIiaXF9X0JKS3Q9bUZMbWxOSVlkSy9icWE3TDN5dG5ScW5RSyFVb2IwPnRDbn5vTEpv'@;
put 'N1ExZFdKc01CZVlffTYsPk1hJVtudWVgX0A8Pkd1Mm1zMH5GV3crWzNeTXJnRlFETk5eeS5GRWZhOzFIKnYpS2JHYTkyU2g0b1U/JFdGKSEsMHU1VHVnSztiSV58e0guen0lYVhGRHdiU21PfjsyOi43M0c4RSZAczFDQjgwU2J2Xj5CO0N7cTVCalF3MVNMUzAsTFptPSsxNGxLWnpdOE4jOWB6'@;
put 'ViUuWGl2QGJJfmhQQEJGYXJEST18d003cnlbZiEhInpjJFIhRSxINTBSKX0xaUR2WkF6JG1PJipKWn12JlpYOEV9cU5AU3RTaEFsWDRbTSQuXSpASUNbalk7QjhJelglN3c9KE8xJSJGN2xPVUImdGZCfHZOIntYRkwqVFE0QHQ4XnBNJXs7PTJaZWEkJi9CVi9ZITU9cFFuU2BSWldbPT94Znlp'@;
put 'JVJYNCwzUXAkLk9iVjJGJDxrIkYiUWA6dTgpbVt2akh+eDA5RUJHU34rYTw/bGt9RiRVOz5ZRXhNPEg5SX15PTtvR0okbHYzbVhXRU4qXnsiPyIpc3tYa3psfG1mZE8vb0J0ZDQ6IzUrYTl4UTp5NStHfklhR0QxPThEMUtTZTFkM3FPUUtAUEdSUEQqendNNEAqSitUWzk9ZVAhcHNzVCVIXiJy'@;
put 'KCNhKz5HTERjQS40SV1MPWklYjYuZEBQeGgibmcoV09hOUtTZjtfWUNYbjtNWDJuUXlFaz5hd3xQfVBNM25HYEVCNU1lY0RuSWg1S0dHazYzP3pXbCVlQClDYllETEtNKCQ1cDAjUDV3bUFwWkQ6fF5zNG1iNUMqeWB0bVF2N3J4Ojt6MlBGOUdTK0crMkJ4JFNZcDdydURvR10qUlh7bFMkNFo8'@;
put 'ZjFEdzpaNmx2Wy9DNU9eVlJIPEQ9UT40b1BPRXNgQiwyZlpqVWdXQFI5UHl6QHFWVCQ0clYyNjRvcGs1OSpCVUApfl9iZHl8WkZQey85bzcsR3FXeWVeSWlXIyhubERIV3ArUjk2eUFHKEcpSkJdSlNqOVA4WUxsbUczTWRJJWljZDlCPHw5JmlrPjI8UFJYVVs1Ijh5U18sZV1WL0JhMiZJdm9z'@;
put 'R25XW2ckdjEqPS9LUUllWHdMKl0/XjpaVz18KzI3TmtUL1I1bUhKNEJXQHJxXVN1U2JTbUVIJEwwant+KS9MdiIkI0dTZEx+TDpKOiV3TF90OyxyT1l3PFA4cG45dXs9XjVDck1pTEcqYFg0dVdkNGRVQGJTcmJ1SVdIQ2lhenMpISxFL3o3YmVKYiJvZHczUDIoQSMhTXp0TH03RG1lW1ojP1VA'@;
put 'ZiMmTk0vbUcsS2NTckp7KSFTTEM3U25VKHYoK2Uwa3hjSCN5QG9QOj5OKzk4cSosKTNpPC5jUjd0NVgjbiF5WV1JczdfUj9KQ1RJZSk1Yj06fVl+O18+SVVYPWVhR1JVcXFFai5sO3xOd30jPE0xYFE6Ki9jWXkqK311blpKanwoRkM2JUBzZFR4QWp2MGFFSChGRFI1I25LREZ+RWh7cVF5OXNb'@;
put 'Y1spY19GbWY5QntaPUY1cj1Za0kyMHxQITQlazpAbUpzZz8xRmE/NXRLXXd3IUdeRClZMkVeVWdgeXQlKGJQZDE+WHo9QjFUO34rczQqKzFYVEozNEtERzNAUndLYEoqfSJJdm9UTVgzRiZpIWl3Vm5sZnZXNGwwUiw7OX4qX0xWRnFDOF9gLz9IYz5CeTZUb006KDclRGgjUGlaaGxycy9BZGtq'@;
put 'cmVYel1CYlIjfmk4UikzM1opZ0sld0U+X0pIZHZUWy9fNERDTnhEZHRpZ1twME57IytYey5ORV1yQT5YMytafEhqWlh5PmJ0dT52JjF0X0VuK25rImJhWEBefjk/dzwlK1NEZ2pqN3RiSDJ4NXFWT1RFSExXeCMoQEtsYHZYO29jSDhiRVhENWF8flZKaUxsfm92SHl4LjoxWy5CLG44QlUhIiZy'@;
put 'TH05K3Z7cjArSipUNHNoQixfQCYqN3RJJjwoV19IOTZle1osXjJtYzRXaz9yKSQ/b0U3W2wvL2w0b2MjPVF+VmZuQjttaUtvcDk4LFZtK0gqJGdwJXRGYTo0ND08aGV+ZSF8TjtiU2A5K09uX0NnTHljRExHRUh3ZSF4WnFnfF5OJDtiOH5NXT4sfGwyJFVzMzJrQHQsZyVHZjBJZSV6TER9a0l3'@;
put 'TERPMTkzPXRCVFh7ZHgkRkdDXj02biRyMj5FJmlWcFBUcmZvYlR0dUN0I1tYN1V8S11DY19TeXVJI0d0dko1d2BbS291V2tYKSt7QzJVTkUsRWZSYENrLCtOaTQhTmRQaylfNWR8P0hzRFlndU9YdGAleCVpSmdaRDNORihBW3c+SixSRSQwZUh2PVZuJWhoeXJNbmglR1JuJCpSZndSXT59Q01o'@;
put 'eUJTdlBZQ0g0a35TN3hEXnxuay5VXl5ELjFDbXtEfio2Lj42XXJjJU5faWEiaT87S2l8KUxoc0ZtXmN8OHw1OH5gJWlTcCZNakxkcWN+aXhOekxrcFQvNSt0MV89QE4uby4zOndJdklJNWpQR0QkeTVEIz0uQVQ2eU8keCVXaENCNzBSVz5bUGVSYEBkYUA4LDlFNlpFL31CUXBSUjNQWy57VVE3'@;
put 'XlY8RUlafmlGYDZvJlZzQGlJeiRCbDNfVEcxbGN7R28pSXVHd1dpYWhwZWglQXZxIihicTt2d2NaQnBGWldURGVqeTtWdUswayNqSyVLMj5YOUFbPm9nJi9TKjxUcWY0NDgod0Z9c19WK2sxNnp5ZlZyYTc9N1YwL29eXTxjLlZ+MUhePEpRL0R6aFlnVSZoPVNBcncxVltfKWo4ZFEyb1MpRGpq'@;
put 'WXhAX1htWHxuSDZMXm1CWWFhMUJ6RS8zfT0yK1puImF3LyhvIip+WXYpY3xtQWYjYlI2N059UDtDOFdTVTR8alY4ViI4aFhwTz9Gb3dBYmJjYnVKZDw2K1I5UjIoVnh0Mj9QbGs0SlgrbDQ3YndIJE1oLnNEZWwjWHI5SC9ULmslWigmUX1Lb3MhbHVVT1YmX1kscmR+SVJkL00/RHAmTjw2fFlk'@;
put 'czs6L3JsbDBLPWdCPVlBVng2RHtUYjJKXndEKD1bVWQ/dlB5dFh0aWJtPzF7WVdGVmE8fGMmdiVgJS91WmhCanx1e31zVVRld2gpV14lPWBaLihCcTM7M0hGPW4iWXQpfVk4fFk3Xk5hRmVERGZ4RmR5L0MrKE41QXQvSHdiIih5NVpGaEZ1fThrbTo3UWleQ0FBI3BSeFdBV1ZgaEpHIVhEQEIp'@;
put 'IXE9ay9oTlIuRkdbOncrIkFOSDIjbVpeJDJiLzVjKXchL14id1dPZHN4blYwN3t3YXZyL3N6ZzAvPWI3M3MscUVXNnY2d2ByUXtofVBuNTQ2ZVdzRzBjP1Z8SzRtPWNhM2EmdUJxZkM+aSRbPGhxfiY5UEdTU0lJZWRZWHJMPGVHVW9pbz5iMjAyenRgIzwybV9bNXwjZWVqNGdTdn5yTjhrTn5p'@;
put 'NjU+bjtbJDIwJSN4ZiwsOjsqVHMkQF43TGJROlc5Mkc6U3dEPCtLeWgqcUk4Z1VANWV+RSRZMCw2MSNtNEwkXkRAXUtTTFtbV2JEOzBDOkdLSV1aNlQyRGV3I1Q/JSlnKGxrZjludyElWkojVTpHOCE3fk8lTS8qOUY8M3g4IlAseVNbbVNrc1JyS1QuMjxNWGJtSEowSzp3bTxLPTZBb3lod2V7'@;
put 'eTh0Oi8/KnJlPHdsWWV5QndKY3t7bGx7NF1WfCtxVVluOTR6JjVrV3x7Z1R4JXM9JUc7IT9fYEE4PjNTR3dfZDByUW1DZzYmXzRtbz56eSQ+XVEmVSYyaDVkWSsjNDBOKVFTUEpiJDxoSEdTX1ZRU3Z7LFM0bFE6LF8xc01YY11uU0hLQ3lXUmlVKixLOVtiZ3xuMkNsZXQqdm9tUzpDQlRUUyFk'@;
put 'Z21DOnR9YmxRPHAobERYY21MOVszcTFrXyJwKTRXXWV+VlUybWUuempfR0U3WFN7fm5kQmk9aW5lTz5DTGV2UlUzcWZUWF92Z2kzV319PHN4a199cDtpZEEmV1JqITxPeiFSKChwOjA2LEpxUzt5VTkvNWRofih0eGhCQjNBSERCcl9LZWNhPTVJOTpoNXlnLi9zYyk4RG1xe2MzT3tvRiFfWExh'@;
put 'UD9fYUtCcG5fdGM8S2JXT3NALEd+TCZKPDY9Ung4Mz91TVU3YSM0WXNgXyhnflMld1JjZjRiXmVpeSZSb0VffDRFWTZTezY/VUNbZjchMD1QRztXdkthdFlQfTsmITdYVHdkOl4iUXtVKnc9Snsycz9aOWtWQGROO11FKkVBaG5+Rn1wfmo3PmU8JEFma3RgNzJOW3xHejBWQkxUeiI9MTdiNWp5'@;
put 'cjpfSlBZaEAsQ0w7KV4rZF02bVNkX2Vda0xpNHQocTVma3dSSG94Syw/U2VXaElZY2Q4UkF4PmBibDx1Jl41OGNbRn1udXdZcGdBdF8pX04laH5xW1ErVWIzR2QwVTlfdXlEciVeIm8hc2t4aGFDLGRdO1FrS3d2d3tQMDRqQG9eKSw+Kz83Tlt6c21QW28pVkxzOHNgcDg7aTU6JlpdYTE6bDh0'@;
put 'QndkcnJkYGgyJWU+TDtuRFUkaFtpKzwkRF9VVTx7a04pPjVYRik3NE9+ZWRUVG1hOkNxKH5lLlBMPDRKb2J7TEYpYkImL2tKOD5zczs3ekY6ZHhsYUtgTnh6NyplaXFaQWJteVhsPXYjLl9KdFtfI2U8OiJsejZmJlNFTV1iRjd+cXxUXWVHX3NZbDdIaDJ2Z0ZDXy5EMmczZ055Rnd7U3t1QkFn'@;
put 'VXZeW3lAfjJIL0NkLEJ7WEMuUithY3J5Z0BwaFJbSHVqNSwyKldZbTprYmV+MipbL3gxRU5OaHpLaF9YRUJEO2p2dz8uMUVaZTFZPmg5VXVbLGlyQnJhZ1VZUnRkJCNybnRDZ09IJjFFLn5HUUtubkV6VSZSO0cqdnV0anxVfipYTTU5Vmx8ZWhpQU0/XTkkWGhbV19bKl8haGBKYFspQjlvOGVt'@;
put 'MDZ5O2hOOkZVen0wSVU5QWE3TyRkVnh5KDBNVGVmX2QqL19NeChfX3Zkc1p5U182UlEydU97eD5GK0YiLlZbY0AlQlk7PV11UDZ0TzZ5TFd0Vyg6Z0ZgTG5IKTNHbj0sOkd7SUtQUzNIaz1+cWsrT2VjamJFbjoxbmlJa0VTdzxFUTA+YnZ6JkliKW1bM1YrT2YiJn1AUENGP2tqdWxeTi9IKTZ5'@;
put 'WDRtO3ZOSnl9d0xaMkpkcUVZak08P05ESyU+dWY7YD95Tn5HYXoxZVduflF0e2IwSFRLSkIhWmp0SXg9Rz9QK1RhQDxrLmAhcHcoWlBbLEB6XyVyX0VhQXRzUWtjKE9xP1RAVmdfIllfNTtNNEVqTnM4aG18Pit8Yl0va15mTTNFY3NuTG9NeiUkSm1qfEtDL2VpU1ZRSU1TOkldPCZETng/XmQ0'@;
put 'cytkcVE8LjAxWDNAfkoxcWovLiRXfDluVHw4K0t3Pnk2TTYoTEp9WnR5RntIZlpxUThAPyVmWTc1QHkzUS9sdSglcjFRIllQIiJlIjlWUSgycSxDNCYidEgpKTFhalp5T3dKX2ZPfTMwNCFTZS5DUS84L3ZeKV0qZ25MQXhyMnxYalhlSllPQHRoZlNDVkRCS1tDK1t4Tm8qV0hiSTFeTTN6bDIx'@;
put 'ITUpYSY1ei9qTUp1PUdYWzxoO1ZdNWdSZFFmeWwpeXZdTUQwJGluZl5WP1dbUEhjTyteZCtCfXtuKDMpakczWDg9W103bnEoe3tTQCV6T0BjOzIoNytVKC5MUDs4YXZ2Qm0+Qzc/Tm9ITmA9UjdBN3d3STxCb2ZbZWNEfUhyYCleZjZFa1tbWFE4QV41YUw8diR+ZXZ2TE16aTM2QWpvVnQ/T0kk'@;
put 'O2ZVPjE4Xk9iNCN5XjtGcDIjYCR9YGwmYmY/NEEwdiJrODouI2skPXRsZTclWlJHTlk2NkNzdSQwUFZPbU4pUlY6Y3V1IkxNdSVjaWdHQVdQM1R+WXJVNCNdWSlQMTNPPFhFciNAO3o2WGdWN1ZXPnl2TlV3cilAXjpicEIvXXR7L0d0dzwoSFJHSlZpWzZ2T2orWSolZ3wmallZWUtCPywlYVlV'@;
put 'b0JMNlB+QDgxX09QR35qRT4+Qz5+RD49ail7QSZgaXByelpBVixAa0FLLnJJMCwjZmxETFF0ImRASFRbUT1zclloMHA+KkxkeWp2a2ROPSExUUIzOGYie0k+KUxmR010UDZLWHxsUT9eOjdVJF94WDtgVDElVktQLlVUMSV7UUI3fEgpcSNrbDRfInBEMjFtckgmLGA0eDFqZTI8RmAzKDBTaXtn'@;
put 'e3xaRE1JPllWV21fe2ZVNzVjTHk9WFVKMUM+LiNIRlZbK29tWXNjYlRxSEtqciw9L3xDajo0R3k7dHdaQmI7LiZqRWtPNX1YJFM6QVIoRyt9KCRyKEx+c2JURi5PYkplRWdBKjQoLzpNZmhbKXw2S3FhRVsyJGtrfWpwI1Nham18dntyKjluKiQkY3lWTjx5dGI+ZnU7cz10RkwoUylUb3NnOD0s'@;
put 'Qn5ydlI7R2hab2JRfEdKVzYzTEJ2PmgiWD8oYnNaclY5NiVYfCgjJnxpeVdrS2dTcCN3WERURE99fU52YzFXUnYxQjNXPm04SHl3YHcuOzAhdUtpcSZeOGs/YH16eCVaW1BDfClCP1M6MmFde2hiKnxQIzVCPnloJkR8by5KRl0jV2gvUDZCbl5kQnZDanojJWdvNCVDZUZhOGlkWldWK014KFps'@;
put 'UyQ8LilXYCMlQHNGT08+bjolRDN0UF4kc0BUSyNpQjomT11xa0FYJUwrbm1qKHJ7PS47YmIicDJjWkYpKztlLC9rI2pUXjp1LlZoIjB1TWZwXmI4KFQ4UnA+Pj9RWG1FPixzfSUseEBNK3BqTTgxeE5JQ2EqT2dCaGRIKzAiT2gvb3YxSi9CLnNVb0ZRUnwrR0RFckJVX1AqbWslKTBtRU1md15Z'@;
put 'RzJZSmxSVVoqcGxiR289QyxuRnVXTDU0NGNSQjF0a0wwW1lTO2dnLjA8QUUyRW8zTTkubUJYXW8jQHdIV0sueHJZfEYxVW11YUhoKUJoZHR6fXdSZ1UjMip8YDwqbzdMfFhTMzhdKWVgUDhIdyNSRk8sW2tjUlEiQDRjcCk+U1NddDZoPE9fa1JsP0NbP0NyMmcjeF00emZOJDZOKE1SP2hVPlZV'@;
put 'VCM3O2lIX2cvNzl8PGc7VFRQY1NWcl08NlI4UlVqJi5EMXZwWGRNPCovWHNARXR5MkNRfGlGbTxqT1QhXW1ldlp9aU8+cV5eeytrelhmemglM0Q1ZEo0dzhBe2wwNV42Zz1aTS8vI0spKSY/NTtlNTFPMHdDVCo4YFtZZXR8NHJlfFhgLFFmPU4/JCtINmV2Kz0lWShGVCMyMkxNeWp9fipCOHR4'@;
put 'OUt8WkZnUH5KKUdtVjdZcHZiVl82aXYrSy5QWVd7UTE/eVolaDpBPGBmYTZTcVdzLkUjR0I+N2x2aD4xQjdbdVl8fkFMVHRsOX0kKHxRbEtiemlrRXpHdXs4YVRAMTk7cjV7d1k9W1VGdlsuWypGN2FqQk5gQnxKR3RoUTd4Kzk3OjNrPy8xdCR0R0MqUUBJXVI8elM3alliOSFnO1o9NStgPl9e'@;
put 'SHw0P1lKZHsyLzVISGt8YUBBQTFkTyhnUTpCIzlaRUFsS3F4KSUzb0AocXZTITRZT35yVHZlcTJIQnFWJXhbbFJANGMwIU1TXyFqfnRjMUVxJjxmbCJWRl1FVDh8KSwzNlImbXQ5Wjs0bkp6cmdMQFZFa2BtUyoyI15nMWhNV2kmJD0lKHxYPz48P0h8cz9ZSk0pNzowW3M1dSlEQ1ksOGdwUTkp'@;
put 'ZSFOZGg4UnE1QHg5RTw+azJZc2F8aT01JUhQbUBvJiEkfkw2ansiOFE+WXFSdEh1WVkzPyNjditaSWYlcTZULHZ8Vlk1WTlTRUxzJlJWQWxgNzlMPnZYZFh1T3ZmY2xCdFU8RnE1PGJ0MFh5YEkrdiFoRkV4Zy90Ul9BYmR4KGxKIX0pQD5+byFZX0d4dUlnbTxAeXFwYixFVnMybDV7TFM8IWNz'@;
put 'dD1vREg3ak57em9zSG4qaT9obipydVNQYFhbS1ZnTVIvMiE1WzpyKXUhV00pRj9PQlBUdF8vS0crPV5ha3VhaiQrfVVOTEp9TDdfamZqSFYyaU0hRD9vLlF9S2wqcX59dnVeIlkmTzcmSj4jaGsvQGp5PHBiRyhKQUtOPmxCVkpWVn46ekV2NT1UYzRhfGtObko5OnMyO0V0VEtJXih7QD9iNylw'@;
put 'Xi98TF5uVkNWJStlb10sITEmQVkuIm5gKGcvLnA+UHolOExXQmFJaj9rQlJyQm41UH00Ui5wMiptcVlpR2dDbyVgVl5oXkg/OV55cGo/dF9wUmVrZVdGS0BeNnZ0PXF4bCR7Ilo4TnhmN09KVXY1JXw4TCZIcjI0OV5tVTI2bikqYjt8a2IzdUc2QEVvT35YbUA8ezphKFtoc0wvPyhgLkwmdm0/'@;
put 'SVY7aFZpU0E7ZyJCdSp1KWciPzFyQDxdOlNbeV9EczxsdHkxL01SZjtdKUAvP3YkX1opUjUiXzJEY1A3YCNIUHgqT1hJbnRreElVR0BmWi9zXXx8c10+RTlbdSM9fGV+NU8rI0pRZ1toLjZeNjBSWD41NllRTFpjWVBgbHZIdFhyezRMRmM7bHhnO0tkTTA7UTU1bHojL1hmM2BPWEJMLC44Tj57'@;
put 'OiZ6VHM3fXAzPCouVzxHYkNpeG5vcEZLaUFOc2AvVVdJSmRrI0JOPEtsSX1MMVssTkAoLHVYNyVDX35dX0U3PXksVVEqbWdFMWNhVko0Zl8kK2d7am5qaUksNyVuPU1KKzhPak94STZmVjI6Sl9YNT0sQVJUKUZxPmcsV0ZVTnlMfXZ2RDEqXUhAOHl2PSNNKVhnVixzVFYkcmVgQjl0PFJfR19m'@;
put 'XyxYQCJKLCRkWnZ2fn1wR1lYUVpddiVMVzYsUjdsLCNbZjdHWkF3PWReQlc/K2YwPE82Iz9uSncpYnxhWz5HfmptQnoyP3d1dU1wanBmQVdiYXUyflFzWFgzQzdlVC4sSCRycm5KTE1jOEhiT2JuM2xIdWFFcER6Pk1JTjxBcjQxRlBWd1l+Ol87Q0ErTCUlQipSbFo+NjQqfVFTX11NYTJXTD03'@;
put 'Szd4NjpOYzxbLj8pQERqNEI9SXtmZ2l7QWNLW0JIN21AJUY7Z188YGFQKywlTjcvXTBnTkx4SCVYTX1gUmlPMmRXPEFvaFg3em9IK2dYSGhwfDM6bmY4bXY5RERDQXpmYn5QN0AsNFY7T3pOflYwLlVVaXtPcmp0fVReN21xcyhYX0x4K3kla1U4SDV7WGt+RksmRTohI0x2TTd8b2Yobks3dFpW'@;
put 'Ri5ANlNTYH1FR2QhfE5JKDg/M1tpRFI3KGJMaTRJJCtEbmpPWlNnMkVEdHJKMGp0K254UEdfSVJbYSZeQEJwLyszYUVGbHFxdURWU0pwWiw0YitVTzxMS25xMUl3NyFwRlg8VV92NyskZ1pxRGBUPEVTakxJYnomcFppTj93cC9yTlU5UWtnZCtYMHlCeiZaOU5aYipaT296cExIYm0oSyZMZ2Qu'@;
put 'TmM5ZnlQLDB+d1dsXzN2SEB2aEhXciN7VCt6ZElVUHsqInx3VmcrUmVFfWhQQDwyXnVHUHl7cT55UGNvcFgiaThSOENUeF5jKjd7QHJWZn5oWFY9SHlwbmhTLlJydiszW3VJWGNFVjZJIz98IjEweyE+UC5FQ2VYPFp2eG5ITiZOdExmU2U1TWRZXy5XKCQuSmNAMXVzMi94XXVnXXZEK09xTCNJ'@;
put 'NFBwVG5rKWxVMnZ5SmRSTyREVDl0a0xDQFJHIUY7QyFkT1VIU2E0emNLPWpHJm51MjpMY1gpVXorNXYqa2wqW2ZfSXh2K3BLNFZKY347PnMpWC42YWxAcX5EL3RaenhFbHV3aGdoeztNRzlUaGl+ImtnLGxoVmdkVUhCQStgKE9jU2csLkByaiNHUyVEbyFSejh2e01OOTReQjpXcnVrcjJHZj52'@;
put 'bGw0b2VEfGdgeUdXVUMhTClPL0MkTCIqalV8SjB5aHxqL141Q085NWlUIUtwUzprSWhLfU8vTlJoQjAufFd4bnUpLz5WYTw3bl5nWVVpcDBpPzxfMihhNnNLKEBEX0xSejFlWnBDRjI9MkZSezVSak0pOkk+Nz9LQVIoLitxIXkxfGk9Y25IQG46UF1Na05FbEBwRXEhTm0oImsjSU1yKFJmMj1f'@;
put 'YHBqdkhBND1BJE17aHpEbDhqLHVhaj5zJVFVLyRldyVePSEvMElrTkZgZ0RNRWRofGF7Lmc+ck93OCF2M3x3dVFRT0Uxd3lIISV7MDhIYzt1U1ZiQT9pLCxPMVNjVXR1fjg1QFpKd21MJnRoJHN+KmlsPjBbNXB5OTlQdiE/cWF6VChEKTZNfDp6fSZHaXRmaVF7JmZ4TyZrOWFdO1dbJGloTVV3'@;
put 'KHVwWW1jY3hRYU9ATV9dYWR2UXVoMXhFPV9rTlJ7NW9hb2B5MERaNCVDZ1NyNGNgfTw2fGBNNjEvTU1AY053cl4yKXtOPHpwPEh7QWxFLC95cldxSVopUG50JEVdSz5hdGN5ezczZ01ebTVHaWAoQGc4VyVkOU5nSk5mPyIvPG9XMkpGPUNZekZDIXxRVElONWkzMUFtVk46VWtCaUtHI3JvWiRi'@;
put 'NSZnKTx5XXs+S1pCTWopZGtvZjpMZls5ZUQ+TFh3fjpvUWJMcWRnW3VpOGxeNzB8LGRoPjhYPjNYS1p0SmN8OE5aRkRCQ2JSb25gSkAmYXoqYzJHLylkJGNWLyVVQkgzNHcxUUptJC9qeWJ0OXhqUy9QLjx2c0dxMns1W3w3LDB+Ui46OV97cDZhJUxjbjE5bkxKUHRXRE4qUE5+ZjRQdGFpdjFu'@;
put 'ZC5qQkcmWXdXIkZ+YVFmdFEkQSVZLF1nSzwvKG84fDh6MFpweURPVThzLnZEUGAqQ0JON0syXUtYWCttOGI2RTw7bztLRl5VUm80SkdYYD1MI1dvXVdwbUclO0lCSj5TOmkwNk5YI14qQUFOWkFfMSovJjMlemM0fDYibGFaeU5ScSopND9BbWB9cmpRdkksJWRMTXBFUW0ye3IwL1N4PXhTNSFN'@;
put 'SlFzc2pmdiIyZSp9NDpfVXl5RTRPUy84WnNGN2F7QkA9eUl7b3lGM248ezArLGM6QnN1RWRrfE1NKEt1QT9RcnxSUyo+MkZTMl5EcVR4N3NPNF1vUn4xbzhHWXFjdkNXIVM7NV9KSW8kPkkxS21IP1VYPVYuQyVuZWJEdypEPCp2Ik43VT04Tj5ufW1ob2c4PjB5ITRUX2pAJm1MWSNhb3wjZThJ'@;
put 'QWBeaX0xKiohbl1sbD9mO0JKdjlgJGFvMmNESitFPD5MP3smbzQpLlQ0I1ttQDo8QzJTQC9jXmRlTXBgWUgwO2IlPXNKR1l1YE8pMl49VDxJPEBsem5vYU5sfGtVZCRhNk9xb1B+ZkZIJn5VJHo/TW9AYU5jRS89Pkh4eyZvIyVHbGddMTtaL2oyXkB9dUgualk7dCpPejoyN1lgc2ljXXVbLGB5'@;
put 'LEpgRTxtSndNMFIwNFVfTSQzU1dVL0Y2X3ZoMkooUkAzI0tFIilZakh8TyJxeHpIQFJXJGl9QiE2V09BVyNRazckZzM/NX0uclNVY15WTSxOWj0/NGo3fX16XU08W2RrRD8/fW0lS0ErWyhlUj1DYSI+KzB1MX5gVnB4KE8wb1BweXJtYl0kKlZ4b2lfaV1GUjpYdnI4R3A/V3JbIWdJJHd4Xj5e'@;
put 'TCZMMF5uREhfejhuNWNXUzhUIiVRa2V0MiZAcGdYLERmO0U8VXhWOXM9KlsrIWUrVTUlT2kreyFIJVJxdUpNSUwlczo9L0VTUCNRZ0NxPFlAXm45RzlpdW5mWGFaJHEvbjojbWldODpGcltATkopX2k2ezRnSzNTRSQqb1RNd0dCSE01NHxAQGdOKHs2KTBdIl0xYSE5RHwpfjt+RVB0Olp4SGko'@;
put 'MGI6X0B3cTdhJjtUVGc2RVEuRHRvY0E0Ln5tNUxqbU9DfVVqMj9OI319QWN4Ml9lY0FLZl9YKF0qJGh2KlpJQUZzR1I2JEwxeC9oNmxUeUV9RFtPb2AoNzdgXShTfXokLyhZbl1ESEdNdHFzOjk9YHtKey4+L05kIytOTyVUNFBaNlNJVU1PQ090OzQ4QWR2Py9CMWh8QGZmbW0seiFoflgkTHdq'@;
put 'Ui4iU35RL1FPXnt1Z10oaWcrO1Y+e1dTRzhkM2F8SFZDJXZmPi9iP0AmJForOV1EdXRtKD5bbEF8PnMqbTkvVC5mQjlnJEtUenVYUChqfk1tZit9KEF4OWJZY2BJQiMod1Z7UixGMTlMPClFXWcxWThyN0M+YkovRUI2KlA2O2ZRfUhMb2prLzZJQy5FRTpqdlVjT0JKYll9PStgLGhXVHJVPkVY'@;
put 'Wl0rfmooNl9aSmBvQjpyZTFvbVBEQDZNOFIzMWBSd31HPGE3Q0txdilBVjNPanw9V0YxVVpMNj9zWGsqSVorJUhXMHkrZXtIdCJ6dWErNTN3NSJkSGdkUTd3NmxAWGNuey4zN2t3eVgsNmFILGc/aFp4NFtiIys/Pl8kZ1Z2XWNtQ0k4UXF9ayhRZSN0YCxlN3BXK2txWykufDJTVnE4NUdGRlIo'@;
put 'aURvOitoRGN0ZkFha1Q3SDF4ZiMlQl5OcG1UOnooLz1AW1U9ez5ZfShUIlgsd1sqSigidSl9aSpeYVFTbE9iQUZ5XyVFLls7WH5jbVorXT5edX40OE5qX1tPZyFbRGxlZWM7Q3QuVUI6Mms1QUNKfVo/azFSbnhxX1hdMDAkaHs0P0FuODVudjMoUXtNd31hV2N3Ul5TNCM5MjArez9MNkduXjJ2'@;
put 'S1kmV208NT5hOjBsM0BFKlJ6VERwNVdqMy8xJDl7I1FFTDFERFFPbnZwMXNpUHQ6OyJvbz05RioxejhHIyp0MzlqP3BlQkkiRiRzYGJ0cyxndW95TzBBUjZIRmJkbnhpbmRLSSR4KGdQVk49Yio5aVRPYl1VfmVAZn4mN2thd2J2SnI8c0NMJDZMbXc5SH4kVzFGZjVgIi85d2RmdjFzWFE4fVdD'@;
put 'UTtLV0wlIzt0WEpeVzk+dXdMSDo4YFVnVDpjUzxjJjBuTnxTKz1kTFpGT1pJQiE9dmp4NzFhb2tTRHIpPFUpPU82NFd2bzJATzBTPTxANHsrZDFNOWNqOGFpZSIwKSFaQz1fXSs2MUJfIWh6eSQkOGFOY319amw9QmBySUElWWJJJGMhLH5qdGpzSU1kNmsuTHVaJTF2RFhyLlIwMXRLYTF8OGdN'@;
put 'SkhiUzp0Sn0zQkxeeUBYYSYhRFFFaSJSO3RSY3pGKU5tOCFxPTJtXmA4JGhoOVleNjchUVtPTno/QEZebGR2IS50cSR7XSV+Ky9bTC9scXxOY3FGXSZjeS4kVnxwQWorOHZRQz8mR2xRZFNbKkJUUCZ4UHN7ODc5REBfTiNXekFmNVB7alZpKFFEN10oQD5tQk5PWWdZZTJmKj5MPkZ0QnNBU182'@;
put 'OmpEUn5pXTh9RUl6Y3wxMyt2fGMuU0xsSTptU2VOYUFIeURkSyoodWhOUTBvYmthPnIvUDZeSihpTiJ9PmIxOTBQWjpJMTc3MXZ2O10wbEI7UVZ4azQxK1ZFaSMza2RqN2BHcm4oU1d4WHdHWG91RGZrRFhZTDhhJj55b0Bfdm4wbjpNYGBvTiRFOjs6UzhCaHExfSZCMm5ONFlDaHtqREt7Uzw5'@;
put 'Z0wlS2heTHtoPjJ2elZiQF9ySzhfRn1SbXw/LFojbUlFRU8lRiNDQzlXYi9BX2o8NSM4WV9+PX5GUGB7eXQ5NVJ8dTZnLGklWEdWQXhiI0hTM3wqPmdMcVglQXs+SUUhR3VyX35ZU1NeWkg5anFCeTRnVitPOj1VP0JZZEovRCRnQl4xYHheRSk6WUNBWUUzWEMxUkQ3QkN8KDRsZWBVSlJIJSRI'@;
put 'PyhHKiYqXklwMVlOYmsqWkIjXVovZWIvOWJnM0R2SzhIdyspMnFgWmxOYUI4YXA0OWlRL0pWPGo9aE0wd2djMnFSKFFWL1opXTRNeHB2KU0iKSYyTiQkVihzTjR+IUtuKSU+azVzLy9LPD5BY2ZbQ1VeKUtrMDt0fHFTbWUwKzEhY2Yhd3JjSHNgU3ZHUFZPaVo+TUBmay5lfSUhLm43a21oUF4w'@;
put 'YD0pOEtnIV9nfiprU08qY30iPmtrNFNYaDs4cj9mNDt2KWNRSSVwZXw9dm8mM3hRW1I8bDlGOVgxfWZKaVhkaX45IT83PnJNZmNTVzI8MmxNY1kkNi8jVWF9K3o4NXBWW0ErYCI1YigrdlttbHErMkg8R2M7QzBiNyhLQFdfZ3Q1L0lafkBdJSpdImQ1aSQzdjglZ1p8KDZuZHdhTkRNVX5Vd1dO'@;
put 'Y34qZ2w2KVhFXyFCY15eWyVTeTl6JkRhMkpeZ2NLfk9DUl5Ub1c8dHZJZWJoeEh0QTddYFI0LilBWnNaUVRPYkVDUlRZOz14ajltMHcoUi95OS9kUyxFK0NBX3ZvKkQzTU4uYSl7ezBLdURnWn04PFdLU1ZwfmBnRW59MjZzOEB4UmRwJjtMRSM9N2c2PGpiOGhxNSF0X1lYWS91WEVVXVNeOyxG'@;
put 'PDA0PiNIUyVUeD17SzRTa3NfM3k/ImQlZiRsPDxPOUIjUl46PyI3X2ZmbEBCUGNTUmx2Mjo7NVlIVUZkYkhDLlpVSD59XjxZPSMpNl9ndj80PEo0ZGhQLjY2Q3QvfUA3SCJWb3QmbyRkOW5ufD4zMDtbPCNDIjhVKytLK2U4U3oudyQ4YGhfW29NISo8ZDRpXzRuTnJpNUFjMC48NClaMHNfZU9M'@;
put 'OSJMaD5CeUZLeVlLTDA1eX1HS0RjQHMidjxkRyNhSiZ5M3lUKTYkSkM3b3UsZmVgQlpGOCNxejJEVzRfYU4lTkdbIVFDWThLVDxkUD9aeFpKbzgjXVEmRUhBcCFEImBGKEEiWWBuOGl6dll2MXVJen0wZ08mMiR+eVcoKjpjdVQzfS5saGooZEV+N1pMVCFONCFuaTVOdWE1Tlk+dFlhb0gjWTlf'@;
put 'c1hrR0csQnwoPGRlbmY6di9pMX1fJEAuekVuNn1vK2g2aXxsdmw4Vm95eFhvJnM6RDlfeldWVHdHaSQ/eTJpLk1ybTBFfj1baElIJiREW2FJMDU8dCE6UjlRSTY0dCN5M152MyQrVkc9akNgI1ZxSlshY3AqeS9+fllfTTxxLHY4T2VBcnlSYmpRenloSXEhQjw/ISwwQ35iVU0hWGl9VXxzTGgk'@;
put 'ekhTT3JYM2VvOkZkL2wxWG1wLn5EYVA4RStrMCRMXnQ2MSQmYXIjZFRmSlJuMU86QylMdVspSVh+bD1UIVtnc2dobG42fmh5MH0zYTR7dTxBbyZ2cCN+bDFCTTlLYDtjJko6V313Yl41NWRRc0deLCxdXkd1YV5IU0tIRDtVeyxTdWw0Y3NFWVdCVnskZH1hJXA+UTJGODtYTHRDTzU7KFhjcVJa'@;
put 'Zj97UnY8MjJ1USRXZ3BzVChtQlJKeStYUj5nRTFXNGFpfnFlb0F7YilyJkhTWiRRdTZbXy98NS8/NHhtWFRpeTIsTHZHZCEodnxFaWNOIUYpZHtjcHpQNktjJHo2Sk0jTzdMM2tKd1leeHgzJTgxO3dLPlVwfkdraj1wQS5nOWNmMXA4aSVOM2N7ZGl9bkolbFJdYSlYaz86JV9PdFkmczNlNGlf'@;
put 'JCpEb3EjVmtXdSJgZUciKXQ9Yj8mQ2FIPDksdnIpNGBPMWp5UktCZDg8X2p6KSFJcDxiLlQ/d0QidUlDJEBYYiV6LDN3dUJEcFkvQUtUKTAyaFlJLzM3QjJzKCxkQm4/NWRBaTNtODIjNVlia31bKGVEXkpBM2hHO3o/MjRaO248KXpCI0VgaG5DYGdIKz0+XnpMeCR4MyEzLHxOXmVhdGxOQS4z'@;
put 'eHI4NEA0JEFER3NBVm4pMjBWc2FWNyx9ZTBuKiwiRykoN3J0OVoxM0s5dSh2OXpzXjlMK1okcERoQFlyQ3g2IUNFLEQhI3pWNElDS15uQCprfHhXLzVQOVBmemt8WDVjMWFGWXIyUXRKWyhUaFZJXjxnRGhObWxyUyVwSEplczgrQEpLZj87O25CYkQpX1EzLlc2UX0kVXVqR19adCpMM24jOntm'@;
put 'V3loeHxmdXB5ZjdaVXR6PUU1a1thOkVVTDxufER6elpJM0lydlVKIzlpJUM3NEt3US5QKEwlTHk8eVpganhmZ1VqOk5QV2cqJXM8LjIuNXBEbTtpeG5IeFNrZGQ8am8mdXojJiFpb30iVT1yXW02RCxqNyg4KWhNMz1geWtzXWgobzwsYEQieWUqd1FHYnZnMlQ4O2ooLyQ1NVsuQVtkVXlHdmQi'@;
put 'OjNiVmkyI2NAUipXQXIsfE01UUNpJjc0YTgkImN8OVk4TSN0eCNFJll9cUddZU12OiY3SGtGdmFFbXxZWW86YEhTanBoVEg7VWAkL2ZOU01kKy9YeEhwMyY2LzlHc0pLY0ZUbDVQeWVyRXokeXFHWFY9KU9RKzFYc3AiSDNOemo0QCp9YWNxR19FSHJhIzhLS0QhYyY3RT5OcEtebkpgZjcheGtD'@;
put 'N01GImEpWE9PUyhnYDh5UDZrQD1ZKDJbS2o5PCI2a2RuJEZBXmojKDt4azZvfHQqW1hxWjg6akkiMCNpNThBJGk4TihOY1IxXmJPczYiUXEqe2NZcXl5VXskRi5HTGh5YTFzbWApMDZVIk40eEVzbDkhRlIzWzFVIXoidCsxJnkkb1BoK3ZwVV5eMzJhJSQuXjRLeDF4cn5SX1JCImEmTTQlMGBP'@;
put 'Y1BBJTpHSzspQDopJWFOfm8mKkp7TixMVVB4YHw1OFsjeGxKKzhAb211W2NvRTZEal4uamk7an4yb0JLWko/TkglLHN2JmM+c1BSJDJrY217Qk8pK2k9QWxOLzFKdi89Il1EWSZ8SDlpd18wJUZdP0AzMDxoeFtiUjNXNCwkcCY1QD86Nks0SnRRWlhKUW8xcyR2ak06RjY5aXJ3R3hEUk0xYT5a'@;
put 'e0VMIWBZaXJBIW1pJHAle146TltPN1dOaFFgUXN+YUxXSWcyTGlwSk9kfjpUPWxuNW9VPC9Ccm8mYXZgaWFoZmhtIUdDMiU6X2V2MGNybHZvb31qXUJmOCxJbjI3d1pQY2lbLHZLIUglN1VGJHVacigpcVlCUixgfCUuRlZIczs1fF0yRkV1MDJXeSh9JFoyOTQkX2QxJSpgOThweWJzTjZbe2db'@;
put 'IVA7cTJEKzp1RVhyOzpzXV5zSTteWCU1SkFAOUM3Ni51aEFOdTZnelB+YlFFS0VHfD4uMCxbKFtmYGJNKWJsOFcxdXVufXd5IXk/KmI1OnY7WmRPdnsufkRCc2w0eH1RbWhWMkxgMjh1N3s7P1gzNSNaJD1OOHZYP10lfldwe3pJOVBedkNGLnJ+KD1XWjlzfEVpIjY9JWFxc29pfC8uNnZ+cGZW'@;
put 'Zj9UKEB9b2VnRFJHbTJQbig/LnVidGNFZk5BY3gyUW83cUdEdlRGeDxxaFpDbjltX3VIQmEyO2MqOmI1V1hsOSRbQzw+Okk9e108S1N4MyZkcko+dmM1UEVCUjpzJEJVPEZtcC5FLClSJXgvYTYqdll7bENnK1dpV0dEWEJfJDlqe3NmUmxVTGUmSjJGfn1AJEhzPjBwNkd8N0lPI3xtP200TzVK'@;
put 'Tj81P2hvbT1teXt3YiN4InltLFA5bTl5Sy9HIjp3V15HTi5oLmxqUVpqSStPfnV5XXBQKEVuTTdsTUtmVGpTQHNyI01FV11URGUqLjVkLzZ8U0l9WmAwc35qOWZxXW91ViFKaWVOOklhWEVTVmIuI3psKVlFTi5dKkFzJGl2IkxkWz1wM3ZDNHFVYE4oRGVDZWUmNEIhJjRQMEoqR1N6VTErdCwr'@;
put 'Z2lORE9heWM9eFBkTGl+PCE2VWJ0ZldPIkNOcilgdmhQUF86NDxufkF9MFVbZltfTjByT1YmMWAsblY2TihPZkBSL2RFdUM5MXVDMihZYkl7aDklQUt5U35SbmdBRCwlLHpTKF1qeF0wXSpJdyZrYWlDcm4sYlMvfSpKQjRTKyE5KTBfYkVzTGNEQD5LYmdXe0g3JGgqIWt0aUpLRHRFT28yISQw'@;
put 'd0V0Zl1JSlNFMDxUR2p2O1tLJEthR0N7SjZUaW9aQShnJjRGTWd6a081QTJzbTQrRyJeOmAlckdUbEoidltMcExHNEwzRT1uQGJtcDwhZ2Mka0N9Vil3KkJePWkvQ0M3KiYyTTdONzY6VjpRMlFGJGNWRjlfIVU2XWxGP3p5O2VGUDZmO2omVWdhU3JDWXRoPCh3V2t1aUh1UWdTeW02KzRUbDxN'@;
put 'YyNZcWdxPG4oLjgvelJlSFZHTStFXUMic3x3bitxaHk4OVA/OEp9VlkxMCVxL1FIKERMdkpyUng0ZD5wR0shYkRaQ1lSKF5TWi46PyIpTnVhOlRNa114TnpaKC49cFdxeFY3bDV3fnRqa3RMY1ZVaWhkNC5VZGlrZUNufDchZWJ1NFBkNCVmP0dgI1h4RnRmJnxnXyJ7QzxmSDR3bXk6cXk0elE0'@;
put 'aFpdPiVXViZ2TGFwIUJYclU6WTFUMEUzcE95YiJJYDVuKFB4dyVRVGNyI2lPRnBrKHxkVGRLVy9mR1h9R0FpYSRac2ZTelJnUlg2IzBhX0pUWzEsUXt7e3JVVlYsQW86XVhjKHp0OjxqQDFoYTdHP0d9dGhuaDJgQnpgSGZeQH5BRiVqNVJeIlYqJTU2eDh2ZEpQPW9rVjRRekMkO2E5I1Zhaz8h'@;
put 'KzolLDFAeD1yU1dkQFtadWpSQlIvQTJBSXFrRTszd1QrKl9iRFAxPlVtIjdQWVlEZFtIdHFRKitjRElPYispLmFCME5TSklSQU50Mm45PFtKTklLYnxOYzU7cVozVVlUanN4dFElfkF4N3h7NStORXtDZnZxdyl8JlI4YjtZWnR1JG93dUEvPGlzL3MzUjxZTCEuakosRzpEVjZDZFlmNVN2LEdt'@;
put 'WUNnU3ltRksyZltxUUxofnAjPj9jfHx7QDVzUkJ9QGxNTHo4bnEqKDNXe0BqZjRDR19PcD9WQCU3SmVFZlVgTFRdQl9bU3teWGJLaGBZPXgrWnJbcWhaLzRHe3VfWyZHU28mbDI8bHNvZDdhUlhFM0dtaWFQezRWMlFtXk90MWIjMDEoNms+Q0JZfEcyISZUPDheaWJAa19YTlQ6OWk8e09aKDN4'@;
put 'S197eDpDT31rNCtVUl59c2lJQ0V4e2hNS0lATFpwc3ZZQDw6X3ZmcEdfRUN8Q3VyIk9XWWY/ZTB1I0Q+ZFEzVDl1OWYiNmJFbTR3eD9RIlo5cUVYfH5zeFMpaHhyemNkMStqTEVyZkI4PWB9Rj89Ym9ZaWhdTEBpJTlAaXM2eUI5bm1BZSZ0R00pYEJ8ZUEiY3lBfHE5YHlbSUJgeDpBIWF6YDQy'@;
put 'NE1CLFEjSSxzJmllPi85RjJ4P3xMa3t1Km97LmlULHU7MzBQTklybUpKcTEqMmltOD81QVkvOipIbF0wWmArJjhrOSgxcXYmRkNtInBucSg/M2NsfXBUfkt4PjQ4fGNALkBsI0xYMW11LE0jZCYxUj57V0x6MWUlNGpGbH5VaHRlTWx4X2BAN3lALjA+NTZLVChdVXM+JnhNVGNYKmJjZSt3VWI0'@;
put 'bWl4bil8V2VuQ0RgKzI5N3wwe2A6QC5RQjlSYV1NL0kiMjo+YShQbmFZYG0ydSEsMU5QUnc0R355Ni9kWnEyRTguM3FeV34mS0xRQDcqRiIqey9PZTpqb3x7fHwxYT4yUF54ZjNzZClARGs9QFN8TVJ8Lm1JdGx7UFhINykwW2RpbTBdNzllJHZQSmg+Wjs/YC5FUi54MDV1WFZMVXE9VXRVYFJ5'@;
put 'eToxQGR4ZE02bW9RellJQGFNUmU2fSZecDQ3PCRdU09KQksibjl5LD1LbzpNcSx4Z2Z6TFtWK29vTn4mNUV9JjdidShvJko/QV9nRlJadW44UmtlKFRiNUtldkQqI2VeMG9hP1Ivcl1XW3w/N0QlL1MrRn5IbGdrQyVbejN1QDZ5VWxSWnAxWzdgLDEqNHhoSnR8Rm4lUjBjLjpDfVVETSNxc0Yy'@;
put 'U2pme2JvLkhlMXVKMUZlTip3O0BncmlLa144P0RbaDFpdD0lN0EsW31rYmwuZSoven0+T2BtNixPYDJQVSZ1fk4rRVcueH1ZXzYydHYqYXMlM0ZhPSxDYUJpeHhWOGV6VlFrISlDQUNfN0QjJD1JW1Q/dy5RT2l0fT5kUldfV2Z4NkxEc1RbV3huXU15S3NTc19NQERPe0AiOmZyLFFZbEpHWXJe'@;
put 'JCRmM31GR3B8LnIyQWsoVCRQbUFoLENwTjNbKyt8ZlolUUdHUH5sdl42ezglJU1YdXR5T2V3cnosTCJTTFtMSWNCRCkmXj03Ty9oPyMmRFZDL3FlMVI0MyN9d2NgSGl3UVdIfWNIPFh9aUR8ZWVxXl4vJEgrS0pDVlBjez95dVBfbjR2aHl1YXRWS0tUIzN3Wk0rMUh7UG0kY1swank8a2E6OWp0'@;
put 'U0M3ZChydVkjWUVwfF8iTHt4XlV2MUMoTUcmLnFFeSw6WUosdUtnQWJAMWBSM19lS35ITSope1Fiez8/LiVwakU1MzxhZ2heam90K0FWaWtbbmR9WkIpfHJAV1siMCI4dm1nc2dQW3pZRjosQkRra05sKj0zeFZRSl04ZyZUIl9wVE1+PGdfKzhdUU9ecEQmPFFtM2E4KnRtZXQ/azA5WjFIY3Z5'@;
put 'ZjBIPEElYDI2PEVDSExRflJrWH1QKTh4QlBAMT44S0goJkpue0JJc2FIdTZpYTMwMXJxWjFfMCp2RzkpXiZQO1VVcmg5TElOaFlZJkBRK043Mkw8by9Cb3ZpPX08NGxpRTJHZ1VFS05MTWVGdGx2SXIzV2Y0UGJTMkY1I2VjUENwcyRgOzJsYk9dRSE5ZlI/OnArS29SYDoxMUUmXy4wcTE2bHxv'@;
put 'TkljdituLEt4TEwxR2c/KktqKHhXTF5kaFM5M3Y+QEQjYjFrdz46LFVCQElRUUBxZ1I4XjJbfmI2LyRvcEZkfDs1QnIsbUR1bU5SO3ErRHJIQ1s2PlZXUnhsIT5BTEo5fVVqVzBndXl+I2xgQWwmOF42JCFPPmxzVHl8MGo2OE97Vlk8OEhjRV55S1o/cjdQT3hWSVVzcTR9Sl9jJExdUUxTPFFD'@;
put 'WE93I0kjZEE2YFhHR35RO3F5OCYiNURrU2YuI29DfDF1TTpqSX1OOUAzcFh3aHovRE10QWNtUFpkKD0hTlN5Mk9HWjpYTl5QSTZ+QnFPT1c9cmxPVnJLPmdDRUZZYkUidkchSFpVNGljNSU/ei8qKGdFS1JBemdkdV9GPX09TDlkcCheTiRUM10oJGBsU0YvV3tye0BoX1ghSUtoJCRXRE9pXm5l'@;
put 'QlU/alBEY1MkUkl1ZlhPW3dsXXZQejtbLkgzPVFdIkFidD5XK1sjfms9SGI8eUc2Vy40b2lTZmh9b3ltdTpffjNCMVFddHk5Wls7cFchRnMla3UpVkVyaFZWWzciXVczfnEwTkwyJTlnbWFadD9pQH00dH4uNjU3czhkKmUvRFJJbWovRUBGbTt1T0hfQyRvXjpmInp0UV9gQyQ7diokSVdFOTxa'@;
put 'NDJsdCxbKU0xVWp3Sjw2O1YydCE3aUE0QCRVam5kWWVxLEteKns6bV9pRSZMLGZeKl9gUnYyeUdWRkxMTFRjUXRzNz59ezpWYkgham1BcT1FSCpHa2NTVWB9TEcqVSs+QnNHT0E7fVgzcC89ZlIrOTxDMWgvIzhTR31YMj8pOTozVlovRH03amA1eD5OO2pFeS5hb2A+dkkoZXtUSVRXTmprZ0or'@;
put 'dkMyfn4xITBSYUQvNHBjQD9peyI1cWg7Wm92JDRnb2hgNGBVZWFITi8yI0kwUWgyeGUwMW0hYiZbK0xAfVRdOkR1QEJkUTU4eXhNLClhLiFWMHd0PChPKXc9NUtAe342cyRsJnxAKjN8Lk5UQilnbyxuUzZkPnQ3a11qe0QlL3RGajJDLEZmI0NAJTJMKVReLitQbnpraDo4XXJGL08rTy9JblMi'@;
put 'X2MjNlBqLkJpQEghWTl0NTlFT2dQayNGfXA6bUVadFUjIlttOzM8UzJIfmEpPDdjO21QSD9NPjY2JTNmYi8/cEUyTzVRL1kxRXVPbU5ZI3R+Z0J4WkNiL3ViPXF4QUExc1JGby96czttP2RxRToqb2w6UCE+VzhgKiMid3NNXXFCN3pAUD1uT11EL0JsKSFJLDc9dWp8RiYpbF4zSmYyRTtYL1Y6'@;
put 'd3lWJW1hPCpuOHQrSE86dDJNfFlESmBpSF5KTnIsZ1ImSXtPN3FUM3RSZ0VdZz04ZDVsKDhOWE9KS2I9OSpiRnNgWDNpSXBHbkpzSXh6Qy9RMFF3TF4zRF1GMmJZblRXKjhNWTAraSk4Ij4rdiV9d11xdGFNWFM/LClpczBPeitFWE0sY2NgTCp8JiJSNElEQit8JXovJjFAST9Jd3FSanA/SGN7'@;
put 'eUx+bEI9cjA6bnQ2fHNKZ11hRH1LSkQwdUAlWz06S194eFR4MH1ObmRpVEVWZ3s3bHBuXm5OTHlMRTZXeFJiYjdHUlRvV18sZmF4T29zbSReQWg4YnZgZn5TI3dNRkRXbE1LejlRUTo7XVluXl8zV3kmN181PmVzRm9efHdfcTVSKz50IUJ0SzlPeWB2WDIyajx4SVZ9TUR9TUg9cDM+dGRoWkhI'@;
put 'TTxFdForbncoLCF1VVtRLHo2P31FfHRKMzs0T2RCe1BLPyJJbzVIV3NZKjxwMz8rKj5aWzRpU2oldl9BcyxMRXUmPnJfSyQ+Z3ldbyJ5PikiczhaMjVFTF9eRzdBWEg3Oy97JSN3SlZSVks3aEBzLHQlMSg1RXtbIURQWlJ3YU0iMy5BIioqIW15b2pRYGJWQmlSNDAzbn5iMl0hU0dHVFdhSGR1'@;
put 'cHk6NVZfMnhXVEh1fl4hNjwzM3o4fj8mSlZBPENDe3JSUiw9dFV7ZnJ4Lyk6L0E1dElQYVo7U0pIeyV5ZXYvaDcpSXBsPDVnMVc8LnloU2J+YF5PNSVedS5adGtQcnFhd11+M0doakwqOSE+M2lyRGtFazhAcnNSY0xZTWttSz40fGQ+Jio4YihqUyE6PWFNMjtbQFE7fVJJc2Amb3ZVJUpEa05r'@;
put 'Nn1hU10/SF1UaTg6cGQ+KzR3I05ARWckLywsdmVHXlZ6L2ZjQGgpb01yI109Ny5zc2o+VFp0eDl1KjBkXWBUXndgSjwvPGFyRypCPmlJbGd0U3Ewa09jIWY6WWg5eEJFayFOdER9IXIueWtRRHlgPipoJl1sYzN6ImhHT1tQLj5jMGxsbFdsMVQ2aWlXamI4ZlNYY0VdYClvOjp2ZjNBekFTTE1J'@;
put 'OX0kOWYxZlVPLy9fWFphPWRjPlNEOSFfWmtGQVFpZllGfjs4RixaamBTQlhJSS5jM29XTTVaIjtZY0p9JktHaVN8MCVGcjFya1dbMGxxfV41UW5xLz5bZEwqPGNsaEdGIkUyKF8ldix3Um8+OU9vdXllclVAXWc3SkVSblB3eGBJNzFbdC9JKHxXd0lbJHd5KEFFdnc/a3tlJDs5aVAySVkxdilO'@;
put 'aVJ6dDhBXnpwa0FEJSI4Kkl8P3FhY2UrbHd7bHs/MUB9Tncyb0RsaH5qKSZgcmZMPmY1K3tNTWpnd3ZIT2ZpRH5oWVdQOD8oX1FbQmF7YVpxckIyNjl6fmVTKzBQZmBMLmBvQmV3fC5IYXl0JFhCfmEufXlqTFo4cG9vLDpfXzgwSTtNRCpyJVZ3PDV9T3l1YjcmZHdLRlRVKVJYdklBamlyOVhg'@;
put 'b0goKD50ey53QzVqeCQxWixuYF9LRSprWUllWyV3N2hAfm19LjNaLmlKem15YmNIQnl4IVIrOUBeZVhiRy5sbnxgKWhZbUUkdiVsKEJ6MTU9OUReKTx7X3AuKlZnMnF9R0J9fGMqXUFpJE56N2UweV8+Z2BHPz1qPX1pZDs2SjQ0fWVTNzNxemVrYzxLQHlwLF1JRkNLVGopUS5yK29oTV5rdjQp'@;
put 'P00sOjVpPWVBM0tpZiVffUd+eVh9XmJ1KzZ4MCZUejl0biJBLGpqYWdUSVFMXlAlJHg3bntNNWpZTWNJNigzVG10RGMyaU9eNVBjSyV+Q2NAUXpuYTB1KEIiWW4uSnEqOzJbdipXeD10L1V1fTUpbGRNL3s8cXV0RWJbNFZ1VH1TOmBfUThUTiw3SzhaQ0k5PS9ONUgpTCt3cUE9cDRULDAzIntd'@;
put 'e2RgIzFaViRKUG4qUTNxNUM/fkcpPj1leWl4ej40P3ZuJmooKFopcFl9I0hnbylEfW03Nm9wZFdRMitLRTozdn5NTyRZbGw1Ol0pWUpuSztyUlZsfFghcDc1SSZ9NEdMOl81UCxTK258SW15QDFWe3Vaezs/IilZIUNZXmd+IyE4OVRWSUZGSjYofjF2ektkQExEOkR5WzhKbk9bJWRkODZtJis7'@;
put 'QyxTWTopNFcpR3JpRWMqL2RvfkN1PUolMTssL1Q3Qm4pSG9uQilhcHg4V2FfT10vfUB5N1U7Kzd7S18zQ01YbmE/dTFdQ1kxUTFmJl53SyshQEF4Ij5eRER6Rk83SWl4JmR1PCtheS5lUD51JXdUd0YkczZJOE9WNnVGaUlNL2ciVTQ5Ojg5LkF2bjsjXX1DOnVSYy55fU9AYWdGUz4oMHtTZ3Bb'@;
put 'OV92QD1BQk0yIlIhKkRUfFtrZHkrSmpaN2FBYCxreUssQEdBQksubCVMT0MhTWoleVJyWk06QlIwUmhjYCg8eV9vPzA0ZG12VUZaYzg3VXQ4V3N4JEBXQWJoaTZsViJYVGkuZ0wqQ1cuXzUjR3c5PnslTzJAdEMlVXxZdHQ1aXU3e2dTaE41ZktOYDMuXVlrP0xzPm91Pip5WCtLfGBOejJdV2Zl'@;
put 'b1o+bSt6TUA0OzpIaF5vVypfNlE5dDxnNCFJW3YvKyFUMDsuSUNYZFhjJmA2VFswQnpVSHV2XXEsQF0lZChYV2NUSzJ4RyhVcUdUKD5DS3NhMWVDMXtSbC5nYzQwQHI3STlQTHJmNWZkY21zIlM0PlJrQDVTSHtfV0clPmh8MCxfITlRKXV9Y2Ujaj55W31GY3NkK2JwMkNkSEc3I0xvcmZCI1dY'@;
put 'UW8odSZOcn5gZ18heSJNdlt9UmdoNlc6W249KjRvZjd1bWVGNGVdbzUqVX5SKkpnXXJKPjh7ZDlMcSxMS3xiVmNHTmcwWlY0ejptWzhVZ1AveiE+NXwwcTlrX1BILmokRFE3bUR9JG5HeUFuaS9kL01gbV8qKFRfKC90OSo5NE50YHN5TUVMRzVjeXZQLElCKnR5MnNBLG9ETjQyQWNWLnw5I3Ry'@;
put 'Z1NyPWBTW1RMQ0AyVnRIdlJTPU8zY34qQ04vZEIsbl0zcmRCJDl2SzdGKzBCLFppNXgwbUdoUCgyfmJBZTZBfVNYWjdefH1GSDlYTHdCWnZtYHM/Rkp1LDp9M3F1cEw5Im5DW0QkflI/bW84aD5RbmpnSWRwQCNzK2pEI2RkaC59VVNJUS5ZaC84STMsNTZNWFdNI0hgeiFGUmV0LCpsYSEkIn15'@;
put 'Nk9EN3F4IzhXOncoZXs5byNyPzsqYyVqaiJlfDhQdlBAOGJoNmRXLGR6Sm9dU29lMGImMDYxaHNtLHk+TV89dXx6OSpZI2t+aVJLOChUdFd5XSkvIkBvUFgxPCx5fn4ycVZTYUlAKDlmfTpTJjd5ZUlQfHYqLjU1MnVqdCVWTzxGKnxyTlM4cWM6empCQHVbZkdXdCxiPV81ckZEeDBRW3dKcVhF'@;
put 'PW4rVCR8TFdNKUB4ZjMhaHpJNCk+REMoPVloTW9WTEY8XzRyYVo5MD5fbWhPVlVOOlNOemdNLkBwZF5FVXh2JVZqL1k5QzZhYTR+Wm9gdigvN3xEbiN6YC99Q3NEI2h0RTkqS09TTj9GODA5MzhJOkZ1IVl3UWIrNXZjRGNwYn5yel82OyVOfXU/LG4zQkJVVCkoJHZGc1RBcEpNVkR8MmZzIXgo'@;
put 'Vj8wSjBAancjamFsYWYrMSZgbm9xSU09d19Xd0NBPTFEP1IpKTRRQEM/PDUxJCgqRElNYjNWOVZWdHBmNihSTWF1UUJ2dyh1XX01VmZRI2tJYyJIT0oqTz5LbVZMbEJbO0lRb1pkMz1uTT12Xmd6MEVhKyx+bzFPJmwwUWpLT0Rvd3tMNCpoUytEJk59I3lJRHYjQD1FSUUzaiQwM0A+ej07Zikl'@;
put 'WzROd3trMH15JFlzVEg7eSptIjRhM1U9Ri9IfFpaSVBEYk8ifSNuMVpgbEV4QGQ2c3tAKTEpczU9fjdla25mfTgrSExnZnB5SkUpSkA1fEhmNHMoIWx+UXRMdWhARzc4KzV7KkxmMGI9UnIxL1R4RyIxMWtATjFbVy4jOkspN3o9bWJ6dVYmZ2RYRTM0OFdnZlVbPXZ3MEgyeHMmU2U2VEk8TTtV'@;
put 'X10vL1gvMV9YelJwSUxhUlBXbX1bYXZCQk9qIiZbeXViMTUsL0k3aFA+TjtoNihSJkJCPHphKV9QNVNDJSw8X181cXkoYEt6PzMlRHhFNlYuPHNOWjgkNUZ7SGNdMWQzam9lYHFtQ1ArMldkJiYmOWd+V2ZsI09IVHEiIiRacWZDZHNja04iQSxpSnNlIW1pIXFYM040X0xWa3lzW05ZQzpUe2sr'@;
put 'Kz56QDdyTldaVTlDPjhQOWpSZz1dVEA3QT1CS0xvTVIwTGFAQ0cjQGZhTVJqaHJsdUp7QCNRdXc7NiVzdk13Qm4uZUpVNzpsZTwycGxofVVpTC9MIW95cTxESk8qRDNIUUhmMkcxSy56P3AmeFAwSE9vcGc7Lil3U3h3TyxraGduQD08cUc8X25lfDU0OkdjbyooZUFEWVAyJVRTR0x+fn5TaVl2'@;
put 'eXVKOjFJJklvKVI2UWIxZVZzfWg3I25EI3tSbTluW3MwMn19KGI4eWdDV0sydFp0bXwrMDVaNnBld3RuT30/bGR7RH1mMVd6TltfRG4jUWMhKm5gdmQ1Mj13PXY7LyEiNHAkQ09iWn1NZnclcWReRWY2fU1ZImY7JnYjJn1mXjQybXgqKV9mVXkud2k1Om9BayQ/MkUybC9wdjYzOihxPEBwRHFf'@;
put 'dSNeZitjSklRfDlWMTo1Xk04TmRReHB9T218SiNMbTAsenAzKyhSYzJJbkJGXl53P1Miel14YSx0NVNSPV5VRmJQMmolRV9dK2RzKzIlVzFoPDo2TXJdSndFdSR4eiNAeUZXeXV8PDN2RCRiNmN6SFlsL0grWClzRUtdNDdNNi94YTxnWz9SQzBWSzlzTlt9RzIubSNCWV8vc31gby5aYXYuZk1g'@;
put 'K019UlBaNjF2T0wqN144WUN7Syx5WTVIU2YhcXlxL3RYWi9CbSJfKCljV0VXe15CSTxSY3hQKyREbSFiUn0sJVgoMVs4YlBYM040OGJzU0YzanE5RFkubzt4MkFQZiE5WUJZfUhGSGNEVEBFL05HfEgyNnQ3MGJ9KTFbOW5zTWp5SmJ7dGlYcVo4SHMjYHsvdm0sN0RUQldIK1pJWCg8U1JNUWBO'@;
put 'P3lDOTd9OTRQUztaNVEpaiFiIjBBXXdQSzNGbU5tSm0oUEBMNlI9WTRSKW4+S3dwI3o6YG4kUzlTSkNPaDFlUzhKNjxCTT8iZ0lMej8rP0BLOzFkeFJtO0RZN0svSChhfGFETWd1LFNmNyFZZ2lyTisxSExHb2NYQFpbYUIjRVU5cTV7VUAoTWM+eTZFbSU1cX4/IzdxckNbSzMsaTUjWywyYWt4'@;
put 'UjtecnA4TF0mRj0qfEJkOl1DR1RTNkNDK3QyRlY1ZlFxIUYsek1dNSxBM2ArYEUlVElWVlIjL1VlPiNAPWFFfClxMnJzNz15a151ZFhaUlJ4XiRwJnNoOjgqTFUyK3tEKThFRWVlQzxiVUhvW1dDbWV3PGJSQ2whVCNZNlBQIykxZXh2K0doLm5bYEU5TSlya15lQDM8cnAkTk9OMylpOFo+MUhv'@;
put 'JTNLM3pvJVE/d3huN1g8WXRmS1VMI09yeixVSWJTInd0NTBiL28uJFdaRC5QWi9bKCo5Kih5bW0mW0lsUmM4KF0yUlpie3FCKT94dkQmLEs1MGhMTGJGWT5rX19TVlEhSCpKVStUeyQ0T2RHWnJ4TFhddW93fGllWDluQD5HN10rbFQie3tfNmJDT1VMQn5rOk5Cdl9aO0ZGSl03dC5xLi5aJkFq'@;
put 'SSJRRFZvYWEpfGQxNmJFaywjfTdlWmVTJSE6JnRrUVgpfVM5Z0FKMVNtOFhzNnNfXjY3ITx5SSJdfl89KkBeYDopXmIxUnNXOSV1JFcxdEheWHJiNGhGYDBubDh4O3IrK1B3Wj1gOnM/Q1JxQzh+QmsybktEVFZnXzo3QW4zQHc+ZD8lSTN7OllMYShBZXJkRiFWYi51SXRfe040UmFpeSshfWx8'@;
put 'YUhMTX5zVDtNKmdbPmFQe3h+STwoc1Z0SD5+WixqRD55WW9CcnNnek4lbylTYUZJXmlaaGQ1NjMzdy5fI0w6P3ZRI041ekR9cFEwR0JpXlJXU0Y7bHZTJG8hLGFTTy9nfnA9P2R5KDg/V1pnU0p6Jjk9fGV6MGRTYSgvJTJvOn1kO1lQUlFsa3RWc0lMWkliXXd6V0w5PldAVUlgLntNcEdrVU83'@;
put 'SE1IJU87fTIqTSFMa1FkJHhuUzA8RXB8UX4ve2xlSm5iaEU9N1AvUjosLEo7TU1GVztKMTVgIVAjQGljOEZNUENPdTwoXlZBV3IoW0Ake04pY29+Ljp3Qn5ZP0o0bmo+N0sjYDsuW1RlNyZvdGw+QHBmJiF8cktGdSRjNkFHZVYyK3ZUSHh+enl4IVp2fjFZPWwxM0dufit6SH48b1U2VjU2c3F9'@;
put 'SjwrWngrZnNrMiliKEY/Sl8mb01uOjFRMk0rVzBrNUtmRTYxKTBBIjRNIkMvS3E6VSQ/aF4oUFMldXAuYG90VCxGRj84VX5fVGZASnFKNVB5VDU2O1V4Mj57ZiVRVihDeTNyVjpiI3hfJU9MV2dRSEBJaFVqITJBJSZzRXEqdypjX0paTGJqRnckbkFPNFQhTWd5bigjcDdFSU1QZzUyWFcqMD1d'@;
put 'ISY4W3FPeX5gOGBvTEIhVyo7dGZITTduUF4zIVYxaHFkI2FAWndfbSF8by9sOHB1Y3JYR3pAK0lgaUguNEBiMXthYDAuZjhtbmopQFk7V2s7W2RZRDFfbW8+PVkhM1hEIyR7JFI2W3N9aWRuQmtDW2osVEEkKWZBQEE0X0s0YXdDJCZpcUwuajwqZE1vQHA0JTUwVTBoSkhsLENrfUFwSXBAdHA0'@;
put 'MldmVUYkKG0odCo0ZClUOSxqTUcwP1JmdnBkZzZxajorJkU3P3MzRH4+I1o7bSJ9WmpMP0VhdUhSQXgyZHF1dmVrfXhjJkBIMEY5S1ZRXV1pcktEUzAiWitMWXFuOGxzYUtGMylsOzwjKlNhWGphTSUuVDJBUEhYTWp7S0lhajdNXWAySC5QSDRyYkFtVDQjeEUrSHBtM3tAWHtnZHczUjJfNFFl'@;
put 'd2xfUjV2Q21kRTdMPVojYCwzcyppSTw2MS8+QmU4ZUpoSz5ldmd7Z0VYbk1TRHgyTUNkb01ZMzlEIVdHIXltOGAuYEA/d3E6e0tlZUt5QnhkSiNwODt2Y1s5K2osImdONWhPZ3x1QHtAMHFMQ1E4WlRPRGlyXjVpMz5ESzVELHdiTGBpalE5cVVATVIqNkR7LEN4YyQhfTVXOF0sSD5ieXlBfVlU'@;
put 'OUY6Pz9Ta2Q2Ry5taHAhbEheajxsXz9FS2ZrODJlUWdeM3pxQlJ9ZUp0WSt6W213Uik1T2kwTWNBYUFZNz1AdGgrMTN3ejpwR1AqMD5pTnxxcXxpRmlyaklqV2lqYlczSShAJHImZH1eQ2VbL081M0BTXkZyQUU2VGBtJEw1JjFaQkVCIiteNk1iKV97UV93PnY7R2xDKWdDZSJ2cS97R1pyNVVt'@;
put 'PT9JdHx6UWw4TUNdZl0vYz94fWJ9LzZ8Nk9wTnk4bGFYWm4yPlUreyxdbFBFX18oL01MSj9Jb2ZeJXJHMWYrNG89cj84OSFQK052ekhiO1NOczpbKHNfJFMzOUtxb0dCaHVdNXc+UVBvenZhXjIoOVUoTEpJJCE/QjpuempTfXU7dil+TXRWeVtjQ0o3OmJuT0svanB8dCNjcTdoL0ZyLDssdGZo'@;
put 'JlY5SEQwMk9taC9oI31rXz14bEt4bS9UcUBCYCRFdmttYDMjayZYeDtRW0M6XiN2LFAmanFHNS9CMFp1V28/IUJaaGwpeiZVUCEiPnlkb0F6Yn14dHkzLC9VfDoxQS5UMT1fVlBrdVdhJFdRQ1JKY21TOWxlOiVdZzxHODhSd2NIbVR9VVlQcT1YSGlBaig/TCNhdXl3UUVePU53VEh7Ik0uY3N2'@;
put 'dllaV0xzdWM9RS5FIUxdeDNESXlqRjx6ZUNhejV7NnQ9IVNHT1RlYHFONUA3PC4lMTZKcC9HZV5fK2whZGJ8eHNxKXt9JVJqaHc9MyYrIV1AbDBmbGV8IT06SHxxbyQieVYsSyJVViJuX2Z5dSo8THJ4dVAyWjBwYHF9VT5qaEwwcHIzaHx5d3liR2pnYX0hTTgybkhHa286Ti56KTRLaipgc3Ix'@;
put 'eilMM1U5X297VX0jPCV3SFM6dExzOE02PV0pZTxubCsqcVtpZStzXmYwb1dAMzY/JXlGZF1eUlI+QT4lfjpGN2EhSDdiOD52ZVJofDJjLHIhci9IMjAlaF13S0lGREw+ciNqMVUueUxmRWJgOU00WUMyUHJUQGl3S0IkdSZYUF48JlpsMFJXNnZkVUE3Q3xtdDwoVyNhfj9UX21yRnkqUmp1d25r'@;
put 'WTBCQEMlJl9kLithWGw5WUU9JlhtPS89Sm5EXXBAMDFJKkAwWio+V3cqMForQCxndzBrSjw1ZStIIkIiWX51OHQ+My5CdH5XTyohN3ozYD57fC9gaSV1RD1TI3x+JnYsJHk4TjBVVFpDM2w9OC5ub042PiNAXmVrOnFDdUBIRFdEd30iS1pfN1Yuek5eN31jJkNhTDFLalhoSTBIQzk3cnwzPG50'@;
put 'fXVSfHNVa1VrJkZUWEIhUXYhRCsxMVB5YTdRKlFiTy89TzUqbSxAfTI5MEUxU3AyQGlgREJGUDdMWntwNTh+aT9jNWwrVD87YnlhSihVe1p9N1AzY3MkNSs0NSkmeE46Y2NKSWttM1BvJHxEMyNGNEF+VDErSmxdPnZoJCFwSnJyJD1uITwxVmtnNnV1andOMXM9d15QaEhsdzpreU9pQ3syVUZ5'@;
put 'e0o7S05tRipNekE7VT9qdDp2JmwqT1lzZHZMUnU9WzExMUJqWElKaW4sZCFXe1UsV1thY0A4U18vPXd4ZDUzInlONzsjRmNfVVB5M1czYiNZMCswOlY/IXM1bldOSFFCOnU4Q25PUTUxPVVoKHpJXmRCckVhOD48VmRDRjV6SWtmXj0hUT1+bVskUWwvbVRafkwyMU1Pa0lbYnQzbkJrOlVjUVZK'@;
put 'WWoqYlY6T3FGYz9YKkNUR1FJJVVZdmBwPjBILzdUenFnS2VpM1BAUFtmXyQ5PlEod299S3tTZjleYTdKMHBWRFhjaisyMCI5WzFYMjVhWHFwV21rNntBMFQyZWVSZFdoalZuXkBFbzZ0fj0jOmdIRj1GJTNhMitbUEVrRVo4RmBvYHA0fF95QyRJNlc+OjZ5aiRTSmVvWiYscnsyUUNSLiw2WCxC'@;
put 'IntkfjJ0JWtdcnVAXl8uZ10hJjYza21JQUdfUGVUc24kL0VsTnN4LzNEYy5dQGpAU0VrI1hfLiZVSCgqWS4xfSRncEVGMShxYGhob2o7aSo/a1hQKzNKa0RKQDooXWVzNFJWXmBLYn1jdWc/NSRQNT5MbEU6dGx5WmQzTGdnTSw2KzlLalUuT3FqNmElVWdtcH1ONjc1WHc2S29aTW5ba3xqdjVQ'@;
put 'Imhtc0k+bXxnT3RIWnJFZ3JmVHhLTnkqN1tmW21fVF9hR2ZiUCMuMiF7PXcsXytLcyRvRSFgejt3YC4xJDBwWj9NfUdZXztoc3dxKyQ0dmM/am10LyZyOmYlUnorcFEoMVVQN1U8QWEjQ3dKWGAwUTtTWV97MyQsPGk5L2tYeCRRYF9YLm9VelU8N1FtOm1UN0YqZWtwS1BKJCNqa3AlJnh1Jng0'@;
put 'RHUmUUY2JSUxUSRpW3ExJU99Lk9+Si9bSzdEayFhIlgzSnc0PDtTeUtmeXZCJEBqZ2R1VVtCZnRsOHk9YWNvNnxYMFpjd0hadytEV09faE14dmdwRGpFOllOPzE0PEB0OkchXU5TN1ZRfTlLSGgqLDkqKiN1fEU+YF9eS1V1YEdhMl49Lmc6b2tXSCZKNWdPNlglXSpiZntxX0FNMUt9XVB9PDZH'@;
put 'Ol5AWk1tO35tRXN+PjBRbzV4UlY1azJ6Rm9kfVksa3l5P1M9OWNGIixpLnVYVX1AfXhFWHd4bkMzPE4vN0RRXitGW1J6KmlgeEpESXl7ci5WeWRzMF5EWk5vPUdLPCYkREtrQTBSNSRdbHZOTHdackllPigoVURPdEV2dk9gJTUjVSE+Vm5lL2dHX2cvRE0jaGFXKmU6fE43SnpLIVZVeTBhT0pu'@;
put 'SEI/NCopWmRoMnFEfj55I0Y9Y2RDRmJjbDBOalBjNnVBaERKL0JIWy5mcCRGTEcrU0UvIXYoMnF7dyg6fjBfLlVhXy4zPU80YE5UKCw6fDNjJXVVZiUyOF5VfGBLeCkiIk0zQHgvdWhgb0RkeGRqY3xicCoqKjFRfDx3LHxAUilqfEZ5YXx2NXZ7dnRUeE5HM040bzltdi9IYnJ0ej45Wj4qPjZ7'@;
put 'YSMxTzN1c08kcyRoW0RGbz00TGdjUE9NbS9IaH5yOCV8VFBwNGJXe1UpK1t2Rmd4JStXWVg6MFI3dFI5P3AsJj5zUTZxUU0uWnwuLCo3Pmt1KEMwUlRqeCM/PCtOWH5OIiZ4KyRxXVRUMEg3KT1OOCQwJnBQO3NuTWNudmciO30pcEhKem12bnNzPSkjVWldTmFkfDB6JlRJQ2t6Ti9RdyQ6WzNA'@;
put 'fmVQZnlPIUlkdUUqLlldZWxfeEgsIXdLLjI6NGBSOEdSY1VBU3JwcT5uXyNtXkBZWSJRcSgwNDtZVE8zc3wifHcvRz9mUVpvc258fFYjeSVnP2JXZitHc1JHWVQ4MTZ0ZCgqbklsMCglaV5QX3NxVTUrTXRdO09VRis3TT02OSlLaT41KEE3O2ZSa34sdV1oTVtsakN3UUo1SDZtcnh4SnQkUCZ6'@;
put 'c2pqJlA9VXAjI0xlcytge1t5WCR1Y2UkRDhKZEArem5tfTE4REdJaD52cXswKUdfVWVmP1hafVZtaDJFQUtOeGEseGZnZToxSTtlfGlpSGdwd1BlaXd3ak5fajk7M2Q5QG95eEl5UHBWNV9Qb1opeFA2LGlvXjR1eUZEOyFtWT9kZ185Yl5ISFJoaTBZUiVhLzk/NyN5ZzBfYms/UEJPT2hLSVFG'@;
put 'WVZHKEhSbEl3YmEmJVR0SDY/S0gqayQvaUooKDozMHFWJik9W01CQjg1a1BgbEpsNWN2KCNTOj9oRn48L25lPkgvcSJNcEJqRn1IPkI8KypafH0lRkFKJE0oI2VVTXtBJVBoJEtDPX49fHRGNnRETnlfTkk6SEN2aE9sWi5KMiImcEJSeVlJfChxVlNBb0UxXVJrQ3R5bkwhUnl5OlV6NSglL1l3'@;
put 'YkZyW2hLOmhyXXZvUkB2bzFhKSw7MEpTSkcmL0p4eiNjN3E2NFg6YFEpRWlqYD1FU2N4XUJjem5dRTN3Yz4iLFNJcy5WXihAdlRRfD09WD9MSVNtYXkhVSE7MlJ0VWEwNiYyWD9fRHw3dmlFVE02OGtdZUhuJWl5X3Q3Vj9QT2RLVWU7aiFrZ2FnRnFWd2NYNWZqMjtEOiIiNk88NmdGKiY6c1Zr'@;
put 'QH1ge1M3MWFmTmxbTFlfKUN7b04wZ2JdIW9TcXg+Rm8lbz5XTj5jQlZpTTlPRyRSa3IzeXhwZzU/dD41ZV87fVZ5NXlLZkNoWVJGRDZVSWhHZF9MNnJpYVlyWTRPSCo2V1hWS2doNE4sRmhgMXxTRTJ8UT1TUTRRVz5GcS4lMEVvTT0oamosaWNLWzNuKDZyPG15YHVbPzclQXN4O3ldZT4mRHR3'@;
put 'aWNVMGw3XiQydzJRSTJVN1JMXylTY00jbWQ1PiJGPUYxRW03bGkwSkdhZ0xkZmBFeFNGVkk/VDBdPEtYWzF6RGk7Yio0NC8zVixlfU16JTB9cTRlcXtYJH45TXlJLkxnTWV2dzo5SHtwM1YyW0ljRzNFOVQvNEhmJD5PblE7dlUkWX1EZTQpRUV1SlAyVTV8Sz1WO2A5SClBTU83MmhHOjI8YiRf'@;
put 'SjE6VU9jUVd5OHZ8KndCLFMpU3E6TiVqNmQmZEo9YXQ+Jno/dnEuYl5qOVM3I2oseGdJfVVeRzdMc3osenRjRCw2KjpvWFYwKi8sU1FSLnxxW1ZBW2lJWnkvajImTiRze245IS5PUW1lTjYxSVhsWCxxa0V1bEBQP3g7eSlNQ2FqfX5VVmF0SDZ0KTUvVnlLVDplMHpMWTgsTzsyaDZYZF5mUUs7'@;
put 'JHlYWlU2NjosbmllYSNZKUBDPU8+Vk9UckxQWUhUNDh2X3huOll5ZGJiK3BiXzhrL0ZUOTt5biRHMi4sW3xbVk5IRl5fLi4lU0JwdU0kZUs3LzMwTTMmPztnUnIuV1ZLQkMxdT8kPWkjPWc3NlEhPC9pLns3cl1JUEY/QUBISmxPPSFWb2tIOiF5bmE+PiNNIyEhM11nKzVPeVN5MEVFNFpjT000'@;
put 'cEJzM0Jldj9MPzYkZDJ7MVZuOmB1aEpKJH5dUDdDa0M7U2UuekJ+Rm1LSXd6JkcycHJPKTJ0e0t0KSVbQUNjRUlRb1F8Ty8vcFBjPHZ3ajJQJTJnITRlJFgmXy89c2kxX0dmMDptREJ2RCZNVSt2LHlqQnJzTV1SRHRkNkYsVWBnc28mfCRWUDp+NlhsN2ZDelpRNzNTWEM0STUqbyJDZmQ0amZU'@;
put 'OHZESH5Nc19nczNQamouYmIqZnhVfD19aXE+X0YmfCQrfHB4S3NDeX5BMVlCRE9USUIpSzs0Y3heTDhQWF1ReFB5fktNfSlpXUk2dlFCKiVNcmw4WCo9T0RFTXQzVkUhUGRaWCxjWW9qZHx6O2wpZ1s0WTp5ODg6T2Jve1U3MC9ONHs+bTksT0E2XjNTKFI9a0Y6SE12bmB2OVlaPVdgKG1RYSZ4'@;
put 'P3FEPS4wVGMraFVJK1plS3AwTERHbT5dSCU/aE5mVlsvcm1WKEFpPSFEPF8hZUNlXj19ZmI2S3hbem46YXckZkJ+IUNYZSYkI3V6eW5iSWU/JF9MI25TfjBVQHdieV9KZ25PW3FeazRscXglS15qaEEqcDd1WGFbIzdsMCVnO2N4LGZJZlV2ejdbYEJ9d2tMcTs5VmJeO0pjaXdCeit4eCg+YzQu'@;
put 'NGMxXyhmX1I2bmk0Wi9WKkBMRT5zYn4pP0Z8UXcyL3lMNzpJdFpiRTJJNikiaUI+fF5iaUAzKTBicXIvIzdtSzF3SSpjYXVrZzIxfkdAb2ZmRXA2Mm5jRyhNdS9MUyJdciUoXzw6YXQiOGQ2Q2lfbFlgOTUzfT1ibHlzS2gvTlJscjt1T0hlZTM3ai8rVzU/JVc3Sil+LEZhfFZ4dT1XW0F4Oltz'@;
put 'RVE0aToreXdEeE4jaHghfmpkbFliWEpmQ35yfn4pcCZiTWlESkFkM31jWTxPPm0qRXBIZCE4fj9UOFpXeFJzWi5JclZ7NTpgREFsPGt3RCUoUlE9JjEvfTosLGFpN0N5JGpMJEtFejVmNShFRj8qQCJsUDtCb29kNnc2bSh7QCtpS3tnRmk6QlN1KWEuInNKZyhYKDRxJjJjYUJ5VUkzWixCWEtX'@;
put 'KkxwbWMrZjdVJDI5andJail4QyZpQz19NUluQj1CU0NoXT5GL1JdK1VJVT13cyEscWcmJj9Nd15YUW5XUHl6LyQ1fltJd04oVXt+bTsuSkZCK0B0RX5XIXMsR3A4c2hKMj1aOSlkdntUOFtkVGd6QCFdayp8TFlfS3ZtXXF1PzliaWkrX0crW0R1VT8oSXd9XU9yakFSOl4xcGN6aHtIbEZnPTBl'@;
put 'IWliNVk8KTwwITRgNkJbeHs2UzNPZk1MRFk+I0txQXFWc3dNRmZaMWJWSGopZSR6aE1dezFLQVBWWVs8Mlpaalk+K3JkQisoVnI4OHJ2MyNhRFB5SktVOWZkV1s0XTxKWjh6LldyQyZLO3d5NFRuTjZhdWpbdDBAMVRKc3EzKWBXT1hRbHhdbzVGNkIqK1B2fkdhTzNQNVZwWyNjZjZvT1okU2Aq'@;
put 'KEEjNmolS357QSFvMHwuS2h7I2pVYldsaHVFb1ppTEhbXSsmXi53fEd5YnhNeFo5TSFXfVhSfk08fnEkIWNeOmxJaTozdCJEPUpzOX4rMkx8Nn1nYGM7Q1pYS2xlVDdXb1cqRlRhJH02O1s3cj5BYXBeVylRO3NnJWQlJX1Yb3Y7VjQpWkxeNEJBcEd6enRBMlN5P2h+R1g8VWdfMCRyRVhsTFFy'@;
put 'eUErSTVKTjNtYmA8V3tIdUQkdUd6YWttWFhvcSI9Vjx9STYqU2NZTz5PI2dyeHZoTDQidWRqKH1qYXBmST12WSF1aHheJXswYkBdTEZIfGFFJEt0fHxMUkdzTDJdPTBYSihuWS81ayt3KzVsWX5SQXJCOltiIjJMdzdgdD0meypsTEckRjFOZFplUnJjRztde0VfQ2pEdjRdb2xzZFpVZUB1Kj5t'@;
put 'VUdddX19XUQ+OF4lVkI4ZnleaWFuISs1ampFNHszRCRfe3pRMVlRT3heNVVwdGU5e21kaGlTP1RXT0Q0IUVSeHMuXi95PCo2L3opfCxDZSwvYXEmKSNvd3V8Uk8lWD06bDFkaX5zO100MChzVkg+dz1ddV00Zis3SXloSTVBc0lZPVI9UXQlKVdrO0lvMD9WZDFqIlkwbzF7I2VnMzljV3dXOlRg'@;
put 'Sk5kW0dgJE4rKjF7UWxjKkxrNl1MQlE0aSp+PHJqOUxsc1l8L3koTUZVYl53TVddOTNyNU4ySz8+ImYrRVdxRXcpeyY9cVsqfi8mbjYsejZAeStVTWxyLmV0NC46I25TVyYzX2kkOUU4XjRJKk8jQGRea2wjT0ttdjo5Rj11UmlYUF52I3RVOFpwSDNzODhmUGpDQSZwfSYrVD9tbz5FMkNMfWw0'@;
put 'MEtIWkU5d09tX05KLGRBJUtROk90c3gsWilYbCtHMWlrTWVMJF9TcWgjSDtKIXlJVmgmUWkzKzEpRGx1OHZFYiZwJk8jPiFNdn4oNDY9UkMjI3NQWE55MzxISkoxYVglNGBhTEg6ZGNOXiQ6XVE5VSliPFlYKU8+fXV7YzhVdDYqMWh5I2U3fTgrVXpfUkNVaElqb0slYztoaUgmMXNAZn54QjhS'@;
put 'LlN4VG9lVEpwb3FHdWZSMS90L1M8WGouIzZMT1lVQ3lAOl5rX3JHcFdSKGJ5bzZtemQ8Ims9aXo3QUNXNV9fRGpkIXh1KG5oNVREZDk4Rm9XTHl5al5+PFpdMXxMLHAzY3siRUVtKUJrWUpkJnNATn4uaSYlcz06QS4yQWUyMl1ZRkZ+dV84WzpUTFtnc1NeRSpaRj07M1FddUgpOS9XZUdEe0M8'@;
put 'OWlPcDI6SHMlYFNJWXtZKHVYb0kqPTskNjx2cG9TPUxQWS51K1tjMWdLOzU7IlcsWXJwJHUpSXV0VCI5b0QrXmdeMEVQbXVOPS9dJVJ4OjRva00/NF1DajMxP21mQnNRPlhrOi9GO1BULktjZjJGO1l9XjAzdm1BLElzbjJZN3AzLGFMfEJzL3l7TFFsPC5kVTojbWZKSXJCUVV8am5WYnkwIUko'@;
put 'SEhpfkgwPkcqZEc0JEd7a1ohaTxsUnZSNnN8e2xqREUoIik8QEo6eG1XUGFNNilHeVR4T05OOE9rOWc7SDBxbzR1SXAmNjBaenRVeHlya2JbL1ElIU81cXZNTkVvYm0xI29AIyFLUEJvNWRDO3tDRTBLbUNSKlgqQEQmVXU7NEpmbX5ZdyswUkMpQmp4LFdsX0lmLyhbIXc3WEZ2Zj9rSkRMMVJL'@;
put 'Yk57JnQ6NkIzaU5VWHtgdUwwWmRBYipEOzZFTUBBJHx4TnBBVnxvWkJLKXQ1bFplZkJNemUwc0ltdCpCLHVtWSFjW14mMy8/dDZpYypFZHo+d2IpUFRAZnVsWzhGdWtIV2ZEJC8jQklFUH0wMWdbNjdxckd0Ri8xZmdBcU5nY0taMlRGQCJ7dVdTVkpXPC51VVRkP1RYIW88b3FfUmtpclJnSXgu'@;
put 'ZkVjaFohMjAkVXs/QTIjPzZ3bWV9K015RVNhcCg7UjVkMnMvTHhJbzBIekkhZS4jSFNsTktaM2MhIn12XXl2LyVuOmllelBEPCRvdkkufDMmNnQvPEEsKWMsL28rO1I0dTQhS2J5OSMyQSx5KjhfMGl9RElbbSFwN18lZnFSQ04xbCVjbGUpPmluQF00OkUvWSZtKEJ8MGwiJUZ0QiM0aEZLYi9g'@;
put 'XndUaDpLY0ljcVhEenxLbSMoVkVEUFZ2bC8jVHAlU2MqZCVBbFVZIntebV8qRWljM046NzdOcjVdVC9KZzdaZntAT2RZUDlMM0xOLm15P3FkdEJ3V1hTaHlOWnVMXl8hMUs8OmtNQyFaSiFNUC90cj4lL0Q2YFFGMU9oYyNVRiw/I259Y3hyJWdhdXhacUJML3hfJEdwMENQRkBtdF9ecVFzP25W'@;
put 'U2E4KDlzYTh8V31yUzd1e2QwcGA9dl9rNSxEdSokR11vVkJ8KFVgNCo1T0FvOnRVP1swPnV3dVgsSXZVbnx1NlUoPG1pNEJVPUBuJWhkKjFeaEdbSmZSZ218bDs+LzVxckQyfkswcFFAM3RGRyRiP0wrM04wUm1QaS56SDtTUnpgJkRQT2RdaUBXaUE5RyV5UHFZOEBucztVRyVpVHIpP0I1S3Y4'@;
put 'KmJuRzYqfU1iczcxMix1UWxhJi9WLlh1OUYjP1l7WXBrK3FUa3tGLi5SWD8/emhZMT5XQklKOEVOLjtNRTIoSz08Qi5+V2MwO3xiLmN4QkM5bmc0eUkqODJHXW9EbFFZVCNKQHV2d3hETFV1NWxALn1rMFR6NEJJbH5+dHF7aks0REwpcmJKUG5MT3JzW1FPVlh8O3c/a3NIeWs6d0NRemtDZUpO'@;
put 'VlA7elZwdXpUeG5fN316PVBeWiRdV28lPHJVaV9INEIiaWM8PH0lTHxIOlkzRjRqMzpidUU7OVI1blVYSjpuYmxIKjwjKiIuXkZwUmp4N0V9SGckdkM4IlJKaS5MbnwmMiJjRFVnbCklOkxHTGc/PTowMGp+V2tVXXd4fVE9bTE/QUp5fncoQkFtN3p9WmNCdHFvbz9edGZ1RGVPbnskYS8hcjpZ'@;
put 'ZGNZdm9YWmgkbTN6KkZtPiNyb2l2YzpgO3VfaVhpc1ghYE5mNlJAPEBNX2ZMZjQkYj98ODpAdmwzVl14MjBvRmVfLClQS3xyXVFEYn1+NURDW2V9VzR5W01BcjQ4UHNgUll3V2RbfTRvTjVUelQzUyVVeG9fNEIqLGhVVn1pRkpSeGN+Ln1fTGFfUXdNOHxdWEVQM0paLCxMLiEmNG0wT0NGNUw9'@;
put 'e2NmcVo8Ql4zKUowTmhyYiptMkNsJDxfRCtJYHM9TilwWWlfbiE9YEEmLmVhZH1mQzRdOV4kbzZESiVnM05fdX03VmxhTShtfl19fV4hOG9PMSg7eW1JN2xibUN7OW5pNDgmXW4+WzBtfSxZNFUsJjQ/bmVQWkY/YUlLIStyPDR8S0U3KE8meiEwWEE/Rn1aZk1HbkVoa15UJT5IPDFiTEdMcCZF'@;
put 'RWc6WyRhTE9EKS9yMk9uQFFOWDxZLkFfJSUvJCo3M2NzS2ozL2lBUEJ5PUZtekRRcD5CSU4qX0coW15YYzMvfkVBOVdrKXtTb005Mz8uI09SX0JtM1ppP2J3QnJvOyYzK3J5WmZjfW5Hb2BjcEdMRHQ2OytZdEpmXW80e2cyN2MxM3pPVigoTik8Oz52SUFnW0M9MD9KSjkqWC5mdm18Q31ybE1w'@;
put 'MDtOaERpNFlhc3lIX3w2M3czRi9OKDtAJHc/L3UrdUVNeC5YMVB5ST5KTF1DTUNnckRVdCUlK3w1djdsNDB6YXVeKmguTFkqOHlOd1sqPDdudFFAXXFiOSNTKkpJRDVhW1h7SCx2U3h4b30rbz51Skk3S2o0OSF4MzkjeVMoS0JIa19hbVIvTEhQbiR1JUw5NXcwW10rTyJ8SXtpKkVhYUxYR0p4'@;
put 'XUNgcUxCQFRdNzQ2ZiNRbSROb3hvVzVLel00LDMmNGtZYW0rfHUiSVFfaTFzS35QfGg3K3tkdXJmPilqSm01JShVXTojTzMocmNRaGVwcTh8PTUpR2lmfDdsVGl5N112JWFrVWF7UW9VdXNqZVpqMl5XbEVsPDwpTHFrRFJxOkN4UFNuPVhgOnx4YmBeSHo/blprPmVDbDEidnBQY1szNVNfWUpC'@;
put 'a1NHSntaKnRbaGV9Y3U8JjUwcHpZTlRLeGo1fiRecTUmMiM5TDJFXW06LnNjWDIoUEg7QiYlV0I7N1NaZ31TQGBJd0A7L2IiTE99YHUkP2RDSDByNm1oKjExZW1gSEwhNkAueHldQFhCWSVRWS9FIT5sNjdKXllbPEErUl5kQTAoJiF4V3t6Z1V+YDp0aXVkTSF7e0h7MTt9OVMrPDF6PTM5eXpK'@;
put 'MkJSflkiKHQ2S35aS1l9UzxydCJGPHZYLHk9Smppb1toW1FhZHxdJHI0RkpsVFtXajdqUD9DPGgyQlpKKkdUfEJYJTgkPTopTmole11rYEd5aSEsd0YvR0piNDA5MSs6K0RrS1lES2clL1NVSH1zPzFDPWlkeUohTW0jai5EdFVRdXczQTYoOFVhIz94PEFZUC93WTVTcVh2cjx6fE9WayZxIlE0'@;
put 'QS9PUHs6KjwqZXpnMCloekZJcyNoe1okKW1xTGFHTnNEUy9XPz9Qe2RMeipuIVVSJElhc3RNa35Zb0oxaUdoRTBJaEA2aDJXZHp9UW95P28kd3pheXsjdFlYUDNJIz9lfSpmfTZfI19XKD9wJWA6PGttZE4lUHYsMGhgZmRkUGxBWFErfmY8IlhrKiN6K0VfXVZjckdaIzw5MWJxJllsRCMlZUsq'@;
put 'SiRjSXRmcUxIdF9ub1B0WVswdn1scTZDeFtGZGJTTHA7fUxpLlpbUUp8PSxgc0FPNCYwXWBheiRxeXpEXVtKQj9TLlc6dHhxZ3NFamlJcEZrV2VjZnZ3OyN9Nk1fOV4/QzdoTDh9XVVHNDNfMW0rY0M3clJgTjpuXj5hZmt7MWVqdFpsIWl7aVc1Q3khLjdUZk8kcXJbY09zRmNqLHFtTyp3Pjwz'@;
put 'MV5HVEJmfj13PkpfS2EvWTYuQFgye18yc1tTMCg9Jl48PVVQWG5ZTHNgMlgrUVBGIyw3KTBrWDxQLFgzens8e3xwZk15Vyw7X05iaT90Ym07WHc4eSx+U0YwcnMqKj8vSEJnYXJkW0QiP3whVFp+K0R7YEwmW3IyaXxqMS4zKiM9S0I5XVdnalB9fGk+LH47WHtRcHk4YXNfSTZKTiNkaURsaH4k'@;
put 'WX4/Vz56e2YlTnNYbWl0PH1ydnkhR1t5I3gwe25bY24oVG02UCNnLD9ma2gvUVdRO3pLaz4mckU1YHY7MjZ8JjhxL1t1dXExNmYoLmNfPmhsb2RabUM3UmZoVCJ5VF49IV9ePUg+OlFTNHRRbnM3NyFSWFkvM1kwUz9ueE1rKyJ6JD1qM3l7KnlRcVZMTzk0WVRnS29sPiZsS0duWWMkJUc3bWt6'@;
put 'ZnZjN0l7dX1MdVJNemJuLDovenpPKX1tIkdzSjkqdisqW3cyNiovcmhsISJ8YTYpMDUramlvdDZ0QT5TaThRfllkc09ZJUdxW3puc2tISV1xcVl0aFlGaFNJL0ZPPExtKiRFLnNWfjJdKFV8REpNfj9RcyhSPXBKRCt6WldMN1UmK1pCLCgsOWwmYFRNUio7V0l4OXYzKmM4bzowODVWW3RiSFJK'@;
put 'TiUpOCFFdkNJeFpsSj0xeD9pV34hTFV7VHlJOSlbZSorZ2ZNNXw6SWZmdiZJSVtOW1sjVXVAWVQxJTFjSWJ2dWBHXzlLKSI/SVdbV253TzZldSJwb1NEQ0QhIn1FelMhIkR+elpvKFFjdEJaJXkjM0dsKHFDcXMoX3FxK00pY1BYXnYheXxaRVpELldTLHhhM0NkTHl2fCkuP2pVP2tueGRBZnRz'@;
put 'TktqJEpHfSJ1ckFueSFuO21EPzQ3ZH5yYns5RWEoMT1+MDBrQ3Vhbi8/KCFeeyY1QUJ2WEw1cT5ybWJ9dHI0an1WS05eNUxyQ3tjRH50bSY8dXlPXXYuYSlXaCJJei5PKUNbZSk3eSZAPFcxZkcld1FZIU4peVcld1hLSz4/OTUxM1VweXJHdlBSKnpdZ1R9UjFrdjFdJGYqdkt5PDtndkQ0UTM1'@;
put 'c2o2RnAkK3sjPVYlfilpWzdyIm5JPiQheiVxVVsqNGdTT0VSak9BWT9MMzVqVkVKRnNSMnckWWtYWzpbcnEpMVZzIktjayNNOUxJJmBLcj92THU4QVkqMEQlMC94Qmx3b29teS9NSF1ba3xmMig7cG1IeGo7K3lsRGo5WypIe3k+Vk88UWVBV2V3YCY4P1ZycChaIUspcG8yTHV0SCt6UFZOZX5A'@;
put 'T09VIz5AXjI4cXJgQ1JaM01ISC5KMSwoSllpdWJ4MTFATzMjang2Slg8bkQxN30yNyZGOEspPipOKldoTUkkUEhrRmg+PDZJTkN6UHoiMTlQaWx2L3xhfmg6c0M6fC86WXsvdWUzKGxMUkJ6RFozayE7Vlp9aVtraWtLZUB7UytNUENALlZoWHI9TjUiPGZdJEtkT0QmZ2ldOnp1ZDxfMWtjcVB5'@;
put 'IXJKcnkoeTdrV1t2fGZTMnQ4Qm1KTFVsd24vNklAREFnNzsqL3lJd0VIalZQbXFdM2UxcENLM0w5WC5idVZ9dzRtVChnJE49UVJ6TiZuQGthRXN4cExhTzhTRjwmOChefFV2YmI/b0lJa05JYVFAKjNMLjQieCxTcUEpKXlTMyE0UEhtLCNpSD9uPGNROGJdLzFkbTRNND0od0pZazNXU1paLHJz'@;
put 'bVVWV3hTbWd4UipFdClxOTUpKXlaKkg5MiJfdFk+Pj8rM15mZWFlb1cySGpXfD06LyhrQWIubHxVW0M3P2RlVzJKMGJ+Mz47VntZTEJTSUxDUEptSDtbOjFMQFE7bHBFLCNMNSw9I3lASFRheD8+QFI5Q18qPUc9MUhQQ2dKXWY0MFpIPm8xTVNPVFdJQi4oNUVUOVdaMUZYMEFLT3ouMWNzJn5h'@;
put 'UnZGbWFvaXNYNTxQKXwlSVg8QjNhWTFwYUJ5UnB5XX4jfUY4aHNOSFdMVjEsM31AXmh+Wzw9STUmT1NvfU54KX5ENDZbNiZ8UHBpYGxudl8iISw8am1hOTVEYj9WZCpGVVdvNjA2MXx6OkphOCRDPWNEZV1qblV+Lk9TU194KTI8Z0NKJXs/UXUmflkjPWdYO1JYPSR+RT1SNEJ5dDVlTUNTdCNX'@;
put 'N0xoPEJKKVVxMCNEcUJRQ31USDdHPiVBIkA0UHxmYWduWl9DZTJdKnVTPyFkejxYOyZSVl4wU11+Nl0yc29MYmxPWCRlK0A6Qz5QNEZ2VW19fFghUTgyZmk+e307QkU2MktVN15kU31Le3kueFgyQCR+SU17aERvNHdNI3g9TExncD9UajlKcyZnU24vSURAYSY8TEdILFIuTmk1XX05LyN2Vylr'@;
put 'XV1RNDBiYioxYmllMSEvMXReQXUhbXxfIjpZUjc5Li5NPyRNJEQ8Uy8hMCRxR353PDxOP1REeG1EZitoKjBQOSlNOnheVnYkWCxGXTppbTcvcE5xWyFYQDc0QEUqVy5OempRdTJQUVRyQjl9bDNXSSF0ajdBdGk6XjxbdVM9K1p8OUZgdTZOMHtbI2ZJaXFNLEFRPSJJeGxdISwqKnBoR15vbyti'@;
put 'fTVwMiZTa0s0b0ReJCt8emt4aW02Lig0NE5JcGoiQ1chVzdFMDlQXTA9X00kRFtPfD9xJGxIY2txeWR2TWAjN21vXk9bNHdBQ08xY0hvSns/Jj1Vdz0mNjg0NHIoSl5lbnJNS1ZPVV9WUFJFJi5baUQkc1RLST1yR2ovL3dVT1FHcCFYSHBpUmguKXB9Q1JRQ11ubVQmYVJIKiZwRmF5cVpVI0lu'@;
put 'Qit3Mj0vLzVkWCxSQGdbYms7JSNwKE5KeTI3TklhKnM6endjfERxfGx5V3BdUXhBPDJ+Lz5SWjwzRHZ9UDtDMFgxK0pvNnFtXltEUWpCPkAkLEBme25sVDtWbExDW3VgSGpCaCY8VEEkcHtNd2tQXzRLLHpAaSNwaiguUHc3M3ReV0BLJi99P0IhKU0iWG5aVGtBNl4+UE03K08iS2ZbZT01MzQm'@;
put 'aDVMQDdzPTM7byJCfFBBRTVuXl88REtVWm56NkR6Kl0lcD8xaSE+Q2xMSz15OHcvUzt1QUkzWHNkc3VJeWguYFdyfSg7dlRWW2xkO299QFlVNXEvbVtGXUdNS08iPld8RihDP2oxWFZ6a1VMV2R1KmZTc31GTXFkQX4mb2RYcjZqbSVAfWRZQzlZPz9gRCs/Rlh2ais3UFdndzdaVmEmSCpKUyU+'@;
put 'NXRRfWUhT2A1Il1YSTkyUUslbiFEZyJxKz5MVUs8NTNhXVB1NSp5blUxYU04JTZUJGYhXXxwbyldbV9ga1VRQnNAUjZuY0prcSl+PUt1MmMhZXRUI21PNGJ9Qm84fGAjW2VBLyZScC5WQy8jOTQlMWw0az1wdihZPiZGMyVsPEBROTIyKTlLJT8wKldgbl8sTiRMLGFXZDlgYyJgX1lTQkteZEhP'@;
put 'Qj9qYWZfekhZYFZJalpEZj4zc3leI2whU3I+UGRKTzlkST5tWnNAUzhWLjspODBMWlcyQWV9VzcxeypsYykwQzJeNzVqRlJlL3UmLn0/VElEaytjIXxATCllKis7d0Vlc2NrTWQyTlFbMlIxRTlCNVpRIkh0ImJmLil0Z2FbWHhSYUZ5fWVWMWpvWi9ob3lYNzl0N3ZVclEqU29oUz4kPno0XVA4'@;
put 'O3JEc2NMZXQiSHdtI1FLOnVlcDBrXm16NGR5W2BPJGEzQUR+KShqe3ZQZ3UmVzw0RDpiUy9FIzNdb3R5VlMvWzF8bSxzNFkuUD9HPWBbXjwuRSx4e003bCFYMkEjNVhUZ1Z0OFdHQUFIWjB8WWAobU8qbnBwbnVsNHM4cVllOjlrUiImN0xiZ1Nfek9INk9hVT9SRnVyKHxqZzR0WXljVTMvcVYp'@;
put 'MlRVLE95MzdFZkRrY0dCKFtjZnMsanJqbTZ0dkM2cTcjWCovIzlCfmpjdSpydG9IU1dUME4lTE1lLjxCNlkwOHtdQjI0azBKcWM7Y1J6NGVuM31OSShdLnMuPVtjcDpCa3lmOFl0OVJlelBLPHxxQi9eYGV0MjQyVDhGRUpKPjttfTRkWU1aY3htYzd1fmRmMk1bIVgqcE5wQk0kNFBrPCR3Yi82'@;
put 'Z2xJOnVidnhBY21qZU1keX1iY0JVS3RSXXo8Vk0xQjViSnNNV1FoVWMuJXBUdl12WGRqUztJfjooWHZjWzU8KSwpWWRqUyJMbWM/PFNOdktOMz9rfGtXYil1VzYxNUIsdUN0Q1EjK2tkeFs/KnxyQzVSLlgpWlQxPnBKcSJIdDBbNkJTREBeWGhdb2NzZ3hpKSk+PzRDKFRiZHp3RTNRV1JPaCVX'@;
put 'd25aMCZZX1ZsSlZ4Ujh0NEM8X1doKD5vflU+TiJ9TCooYFF6OF9IUnh7SEFsYEZ1MSRCWDwvb2B1RT9BfkFsfS4vSDR4ZFJ3S3dLQjViSkZWLFlhQyVuREg9fEQ8RjBaWF40NERXRn1VMShhQ35jPT9uP1Fnb29yL3N1VTkyM3RDb1VPOn48IzFMSiRYaz97X316OXljQW14RH1GRnRBQzo9W2k6'@;
put 'b0dYOCspdzdVbHNnQXkhZnVXY0JuZ2hTLj0+cFNJNHg0MkpAKF91LFdbaW91cX5gWEpGPlgrXTw5K2pCeXthM30yTVUhVS81UiopZUZnZ29oXndBaGVyei4uOUlqaXVATFVKZW9mfkx4IitTZ0g1fCJJcUB+IVYpP0E4bWdTOCwuQGBSQyYsZlVKVjdGUzpgckt2b1JzTU8yRF5fJDlBJmV1O2Bz'@;
put 'VE5Wc3B2akxFTmliblEjZCNhQl1JYkpyfVI+SkBqQzgpaz4vak0xdGdCOEVNQ3hRSyoqT2doT1NQOzhwXnUkRXE7Z01MTFBsdTYlciM2QjdjYlV0T2ZlaTwxaFUhIWMxMXVWVCFBb1dwQnNTfTk6N0J2I25mXjVee0c2QnApITdhVFEiLEhyTVFzUX1QZFFMZnI7Mi4sJn1OZjg5ZkUoNGdRV103'@;
put 'OjlyKGJfSF0kcV1QdWd5cTUqPiw+KX0uaFVdQ3QyeFM4NGxoYF5GL1R0aHRhPGxFNjVCJl5kNCRxLERKW2l3OUAjIjA6W282I3JoP2pDT25SWCVJQGx+OClqJiphUUFlKEk9aVdvOmlzZ2oibVIjKkR2bk0rX0RnQyp5Ln49Nkx2R1g7PFt7ZlFKI10wRyJWTncyd0xPWzEydV0hIWcwbjFAQXFw'@;
put 'Okw2ZHQ+ZSJyaD97clJ2YkBkUEImNW9nWE1dRDR4T1tTdHlXT3VbYmUwNG1QdzJ6L1lUTDFPW2Y1OWI3X3RxI19kUVFULmNLRjddbDQ+bVlHbTVUd3s9Ti5Cc3IxLHl1MUFXMzVlO3YxdC52TUVVUHYyOy5JIiV6ZnBYLj1RTyl7Uy4wWj48MG04TnMzL2VnR1ZjLzI1KWl7TUtgcDx3Q3ZCazIu'@;
put 'M1RGUj0+TSshMFlSUG9DKy9MWE5fNERnLGg8ciVtQHpvYGBUX0h5M1NjYilfXytfYXhxfFlDTU5VJDw/PDdNSHVALHdnYU5KYlNBOTB0dkR4WSRvVTwiXTVCOyMzZCFZTDBmSlZoaXxhdHNifFBJNyJ2Smo8aTAkbSglWz1LdVYzcGxqMkI9PyUzMi8vUSlsbDVmcWZiP250UmI+KnYufks2M3Yy'@;
put 'W21IWDY4PE9vISJlIyNwQ0BYITF1az9lQ1RnSk9II3pfPC4icFlNWmBHe199fWZ7fHpWR29qO1lafHEjRmtNPlVPdDFXLFF4RVIvUjFZTUthZnpAcXxNYH08IzNkYF5ocE91NDxrVTAzQldDOV9bbXxoQSNbOVE4P29WKnZQJSwpL21UZUFMITgrWkFWPSh9YDV4d109YjBYOiF2QmxmTXJsaSJT'@;
put 'WztSQXNMIlJNK1NqeCFRNGR0eiN+MjFpZC90Sy59QUBmR0Q0ZyFnLyRJeWpgRkFII0ZGNnhCT0UrMGZvZUwzW1E1OmUuIUhCfjJ0aCxBPl0hRjkkQEhANW9gJWcoWzljNyVBYz5ONUtXSyRwfXYzKD1ITWkkWERBUGJlZG44Sz9xakRIYTdVZz5SRSQ4e09ZfTs/PVZWKiZBKkozfF9fLnNIaypn'@;
put 'IU52cClHZW5ePU4pbWhoIUpCZUhlbnFHbHs8WD4yR1krUCY6ZmlVUz9aZWNhRFBOQzJMYkR4dkM4OjJEO0I6amBvcFclamFCOGg7fm16bURdMCJvQHN1OnBOUWwpbzUve2xafnRKRkM4P1BlTzRMdzgpdSFASX5HT19wRjBgZkklbGtGRyVQPkhtND99U2djKCEmVGlBZlhfY0N3XzN2e2QkP1VO'@;
put 'ZU40elkwMjBbdXhaW3RuZl41dkhBVylmYlNDImRyek1aP0owc3VGTjZ1dkdNYUpBQnJ6TSZxQHk5YyhlfWloeD48OG9VdDEzKXxlSCpkdzoqKTVXWzg/bVo1TnsjSSJDWkN+T1BRXWp4W2cvQ3BGMHU5NVR0eHVKV3NUXzRlWmZ1KT1IZVJsajlZMU9EcDYlRWVkL2QjO1BdQzlTJWxVOzp4ZD5n'@;
put 'eChXZmZhJDptT0JYL212VSpKRVZYJWxYY0BiTzg3WzAhajBRR294ZC90bjh2L0YqXntTaTd9OW9vUUJjamJrQkVuJEteWTRpT1oqYmdpZiYzOGx7cF9lTXJCOEFsUE00QClCSW57fDAyOyROOVBoMDQjfHZ4LC5BL3Z4TmVOZSVVT1VUKWVdRTxSeXhKJCRlZlEoTEpxSm1gJTIhfjk9MmQwKTh9'@;
put 'az1nRiV3S0hSP1IvUWwxO2wuWDFjW2ReeWdIKig+YmhAYWk3OmY5R3kzOnwsUGhlcVpHeHtFSl50USUvIlVVaTh9WztaNGVYJEJ4K1s7WVVhSilhbjMuYTFWOmh8WzdOZkJRPDZqbGtAV31PfUoucjsuQEJ+L0FBdHxUaCtDYi49XkNFbGImYnJRPiR9PVpaeXdeKXE/ZT9IZUxOdCRoQn17Kyh4'@;
put 'PWA/JkgyN2pPYEtBSDtWJkNMOH1tY1NTTXdqODRmX2omPihwL0NQSCZ+NDh9S0tjaUVSai52M1JdQS5ybSYlT1BCXS4rI2VNcmtJYjx2ITJYU3ZhY0MyeXxDYE8jVVlIfkEuVkYzW314bGtxIyVCcHxHeDNzej5HeFtSW1MvKjFHUHp3d0JjZTMxcnB5Qi5xbDptSTwxJjo7cXheX2UoLFIoKmFh'@;
put 'LjE+YU5PIztfN3c/TE9kSTx9JWUxM3lMbnNuUjNgfFV4PHY+eXJUX3whWi5WY2RxUDRJV3tpa2RpSFBLdFF6cC4vLyQ3PFRfLCZLfGRUL34yeVleW0pnUDJ7bSV9MXR7ZVM6OURre1hGTSklVGRdOF5nc1s5Tmx0eltVXyJwQTFqTGl1dmxWM3l1NFZ6JGF+XjBMakIyS2RNYWxqfjNCN15lMl47'@;
put 'ZylSLHE2N2lyRjFGQjJwIlJkOXRtYjVwVik/MltBT0RrKVg2TDA/Tzl+YGowXyFkRENEIUZDNTZMdH5pW1s7ImhnVF1STXtgXT47aVg8a3Y9ZjlDJT05cCI2eHNyNj5WU3tOWzs0VjhmPTluQUM1cltrOmAxRmZ3UnlEIT9CLiZle0JWXWszXls0TFhHRUtgezFbWGwuV1U0P3NBY1UpQlM5LiUu'@;
put 'fCJBNF9ZTkJRZS9DfiUwaG1Hc35FPmtqJFtkfCIwWT0rc1lNbXlQRj8vKit9d15gTnhAS3tMQDh+ZWxVVlc4b1Q9QjM8Rm5jTWFqdj0kfjRLPnUpW3BZJTR6Qi5tIjpaJj00RnRfWz03KTZHRUdhX1dNaF4vVTUxJnRXfjsyS2YqZHE1ZnwoND82QUJ3KWp1NyRLdXNxbHJGRWReejdCfixQMW8m'@;
put 'SCZ7PHVoYyhdbUg4VGtGVj1oOUp7ZnM0OV9LRDJZU3g4VV86TEgwNEwqdShOWzZCaz9HdTEyPlZWXS9eOEs3UWoyaH5hKUpmLlp0UDVoe2dhNEMpLDgwNnc3JHxWdnZBNlUvWVhEXWMyQ3sjK3BRd1h6biFMLjhicGx2R31pO2I0cjg+bXpGemtAQClyVEVycVRVK3V+cEBbeilVVUtqX29hMiZb'@;
put 'Uis9W2BfVGVFWmR2aVs1QVA3QXJoOGlROTRmXkpea1lffEYoQjhufkI7d2xraSM5c11JSUchdUBNXXEyTnQxM2d2UmpwOi9gR2RsZD5dXWl6QzlWIT1Lc14pKT5Tel1iK0cvV3YmZ1c6SCF8V2NhVzBzS25iUi4mK0Q0TDtyJlFfJj1bSj87b2MveG9oaWx2biVjN0pwSyZTUVNFTU5xYE1yRFdT'@;
put 'aE4+emVufms7Sk80dGtVYyN5NjJhZFEyaVRubiIrOCQ0LEtfbWRDZDRJM3Z1UCZnfDkldHNBUCgqUS5LMHVkWUVFZnA6e0g5NmZKKTlGJmpbQHhtQnEkO0dbVUdET3RGIUZRTklDOEVSP3JGN0VMM0t+elI+VzF8NiZAeTBoZWVgRURFdEtjUS9UWVBLZzRyfndZJT0qflE7UjdIVj0yTWkmJiFM'@;
put 'KTgxVyVLbEhPYldXMmYmMzpyRGJ2QCY0QH42bTZeUS96PE5wblA+QDJ+MiJuMShRJDhxb3JsUWFCU2BLSE1na3Z0VTE6dF8jQWJZJWtVd0ZHalNqZTNKOnEqNDs6M2FFZHRxPmxDVlA3ZGxbKnZlQilRU1NEa05YRUVoNXhKTGo4XzcmTFZOcX57fHZkc2h5P1Y4NEJDUz9HdnRzXThRfkNjbCZb'@;
put 'OnY8YmZ1fClrbiZHOEJmdDZTLlQ+VF1sUWBgTGwlX0BsdldNWCIocEt6LnlmIXsxU2dxYjF0UC4wVlhdcSZBcGFtO1lZUldHSkE2O1U3dyx5fU5mSz89clhDT1lWWmA8RlNPfTwkcEMwcS83MldkW0ZDdG5ATytnSV94fil3RFRGL0VjVixdWmxjejR9eXlZXWxHKUUzQj9ucFZ8ZUFVZ0Y8fWVX'@;
put 'fSlmPElOenZUKVZ1L0dwKmQ4flBvd240QVZRbjwxLkxBTy5tbVVuKCtNM0IwO2w1YnFhY0lmQ3krQkNRV0FCPjpwcDgoLishcmldQTdUaG55IXpEK3ZYUzU+YGdvcDs0UF5ta2ReQSs2bzRfNCp0W0VvOzxGRiZbW2UzdGlVflQoOlIrZWBUO1l7OERXP0UvUl9BWHJRQj5+K3gublVxdX5WSDZN'@;
put 'JGdnM2dZMHJxcmo/XVpqdCZYPyk2W3siamlfI3ZWQlNRdXU5eTBmSHtHcl9wT2tRZVBUNDI9SSMxWGIkZ2RtaTspQF04MTx4bW9ELns8R1RsaF4mZyowbzpdQ2ZNPmlXeEpLa1ljN2I5WkhybytgcmV9L3pjNEcxWiUhO3ZuVy9TZW09eyJkQWVbPHxnakhnOVQ5fXJiczYvWnpaVTEhb2kzWDt8'@;
put 'W0ZTdHNGdi8kVF9bPjJ4bnZKal4sSG1eSFB+PD1WXzFHUGNZTkI0e0JfWSs1ZzJRKlleZmtvZVhUXiZQbnMzQyJ3MDYpcXB2PEt5OGMrQUs/JCh8VFc8dmIlZk1LI2w+WldlYkN7RTFhTExvPC9uSntndiM9bW80QkJEaWBXOX1wL1Akd198UFA5X3x7SD0uRWxMb0ZzdiNrbHp3KlJVKD0/OGp4'@;
put 'JCNgbkJZbDtmP1VDYGM4KUswSGR5RFdPLzVHVHl8aUh0WzZ6eGNGN15+TDU5Sys8ajFiTmlYaVRDfiU4V3p+dzo9e1I1LGt4MSpaUHpFYCNed0V6eU9SQzw0aUB6QShxVE5SSldgbVBDfCxEayo0diJ0LiV2Ji9YbC4xbypBcT0hMWpiNnQydHpkMnhCbSRGMX1SSndSaEJjZzlEOyJGfXZ8T2pC'@;
put 'I1p7OHVxJT10LkhIN3xqJk4yQi5SM19HczpSZSpxUFR4SFZoTUpwbzQmYioxd2duTHFtPVcsPjEhZENQeipnSWElZTd+dylkRkpIZ1lkfG17PVA2VF8sJnRuW0tsIT94MH48NEoqaysmRyQ4XlFTMG08R2U5ME12S31oezRSMjslVSgraTUpTl55MmNINDE8L2ptYDZXaDUpMSZydDBdQj1PIy5y'@;
put 'ZS9zZGhCLnJVTUJyMXRDbjN+Z1dlJVU8OHVmcXQmXSVkZntmZXAwOUkhWWl5IkFbVU0uL0d0aCIyfE0rdzBIaihLfCVMV1swOSJlcDtrUDBLY0dhRkYuQDgvZXNiIVU7M29TIUpSVCorRk03YWBucC8iX0FaZUAmXTN2TmF+JGYsNDxAb2tvRUYvW20zIytsJCJ3NlM3K2wkViV9RVE8eDgkIiNg'@;
put 'YFA7R1RjRF1hXW4mazdKInYlJmtQeV4sdXZMfSV7QjdTRmpQQUs7byUscnhLfHRfQEdaYDZpVU1XWClbM3RgKW5MdjRWV0xtZU1BL2dVdFIlUlo6dyFLXSN2TmM0fWpwV0AofiFVPjM3UXF1a0VlNSpNV2F+Jm9iej56YHg+fkBwZnZ6a0lrMC9mdnpjZ05lL2spQkNqVUJ5UkA2NWtzPjZRT1N2'@;
put 'OkV9I2Z5Un16QWwoZSo7M20xYExbP3pjTVFjcjheQy8lY3dWVmorRl9hTyxbWj4zVjNWdzJ5U2pWJTQ3cihvPik4NUVqY2xjbFFKRWoqKX4yUT5AI0dLTDlVPlZxWU4mXT92VCZTXXNifWRWUW5jKHMlLERZRW5RSj45Q3M6by9fQ19kcndAcC8ybHlpQn1wW2IzQU9jZG1lXUVOMG8uOzBxNmhw'@;
put 'aSFPWVJVaHBdb2lrWF5qYl0jQj4xL0JURzowYHRmOyhlW0ZlIVglXXp+RHpnNXBDNlNdVyIsalpeNDFDWDI8RkxsaFglPU9AXXBNeFFwVl1iXywmeXxZbUs3PSpbanBqLyVRXS5MLzJCYyZQazx2QXp1JWRqWCorNCMxeG4lKSImKXw/VjNrKmtSaHclb15fI3ExOUtUQ25IMGN6YTRyfUhLI2Ys'@;
put 'QHckKW9FRjZQIl9zQlZ7Vy92ISxVUm40PX1qezVkTjRKLFRTKn1TZDh5PUFjVEglPTROOHJ4Lnw1STRBajMuOnxjb05dYWlJNmhILkB8aU9bJjJaSz5tOltdT11pMVF1SiV2ImMwO0hVOG5zPDtpKX11Ln5BaDkiP1A9aUdNNmNbPHNEMWN8c2U0fUZEQkxIVjRWXitqYVFBTilLWmh8LENmVkFJ'@;
put 'XWBofTZSc2QqKm1pTit1cjYmZjhzMDJnY2dOeUhJXnlLIUxzQ3kjWGNqNWBmP0ZXTywzPlBGInY0VGFINGgxTmN2ZjdPZH5SWWprQyIpN1hDTHY1d09iKCR6N1hXMkF8dS49fm9yWGtTU2s2P256VjI4PS5YYW5YbDNCIzYxb0piM00xVlRKTTFQMSEuPFgoIlI9YF5fZX5sdix1RjxeMzd9PXx4'@;
put 'JG46T1ZDcnYjKVk7fSZiNiN4M1hsQEJvSGd2cmRCeDBALkR6YzJ2KzdYfSUzcUJuS2ZGfEJ7ezclW1tnckNhfkxKRlBET01MVTovSjBPNXUvPHE9Y2V+Ij01LEB+LkVbalt6eV94Plh7O314KVloTVArLkM3KXJkam84Wnlsez9DS0pTd1BGdH4+eDhFdkNAfGQpak5KSms8fmF3dzBjW2NNKVAi'@;
put 'ak5YKlA8bGhCY0YpUHMsZEksM28lOUFPWD8lNT1CSilfPjRrbU9ZWDZXNWszTGtmW2osTCxMQ15pYU1FdXVmI1JkNkM4cEJpPXVYcVIjUChKTyZEW19AMHpOZzZ7OFtteSRgWHtHYWtzOzkpUChHeWVRZVVUXVteJH06Yn4yXXAzT0xEYG4hZCNEJTRmWk9HUUpAIW9FO0NZNT5Fak45QkYybUdT'@;
put 'QHlMekF7V2dOfCpDIVZ1MGRfakJOO154NiQqaExnU1M5eGozVDZTZzNXSWRpNWtYTFVZcU9Zd1ooVzRrJjFuJWhYWm1qPEg8JT9pXjs7VU9xaWRzbyFecU01OTRbfSVEKTZ9fiNrcSImN3U3W2RhP0JpJWw+bnBtaFc6ZS9QO0dVJGBxfjFiIT1EQ1g8V0JXRnlMVGAmVTBVcDpOdjo4eEZbW35o'@;
put 'LGU4RG98X0creCZuUCFZTEBWI3cifUs8c2N2flQhMDwsK28+L21tR3Vfb1ZYL0dJJDRgdVd+RzxEP3Q4YzBuWlQjVmFtSjV0Q1k8SHJ9VjZ0KFIjInYoW0xGVTE/KV1NbigvdkVnNkRlfjk8YEoqSGReKUl8RF0iMDJjKCUpUlhPaFc+bj1hO012bUVdTkVFNm5HQkdXO3xDRU1vIj9pWkskakRy'@;
put 'fWUocF05NX0yTHNWJmUoX2ZwZFYoVl99fV1FdjciWT17L0tYRm8kXXIuTngxXjtjI0FuPmFRKDdYd3VHQ1ZWRzsvOWE3M1dxb2VUZzNFdC4mOW9NY1dnSjtgKlRMKj1WdT9FYmdDTWs3RjQzIzFHbHouSmIrd21XT3JDfnNXQENyN31YVGc0WyZ4UXY6IXAoKVBtXjs6I1plek0wLkwrcE5GXlJS'@;
put 'c1RmKiRkUWIiVixxSCoib19FQTRdWUFjX0xtdVRINkY+Y1NXUix6eTQlRlQ1N0I0Wl44fSwsRF5BcyRlQCtJQHA1OzxvPUtZfWxdU0V9czRrdFJRKGlCcyFVR10iN2BaNiNoWGZvbGdiN2VlQWV0MFhsWHl+YX0/fDVuOkFzV19KYDtPNHFRdVZ2Xnl7KTZDfk8jJEJfIlJDP3VBVWoua1cvUC55'@;
put 'dmw0bzk2PzA0eDh9dXppVEFlVUY4JXVAcVUvMjw5KHdJbztQR3k/JUZHW0BkN05rPGI8N2w/Kit1ZDlvIj57O2ojaWFXQWtjdUQiWCg7akBpIkZjbW14LmpjdUpGPXxqM0AldFRmVUxrbFQqRWVzSVd0JFpQSkNRPVZ9MUJ2UWtlYF04MWdOLzZ3I2lpUTYrKl84cFsoez8lZDQ0WjxwUlRmO2do'@;
put 'a0NZYiJEU14/UVlfWXxdLnFgRVhpYCUyIWElSTZMN3J8LmUlQnx2Kj97KHY8JVlCWlVkeVduJj5AKU9yVlQwanl1VV8mViFYYVs+NV1zbyF+YyMqd0lPP2JnQGtRYD08YVZNPUwqKWAob34yeENNUDZYRUU4PGRzbEtCWWRJK15sfj1VdU0wfiN9TGhvflImOHI8UmRKVDVuJVQuczQifCphfXxq'@;
put 'fSJvcWU4Zkl1YlpbOmFzb15DK3JhTCtRUmFbMDA8VU8ia1p+UC5PfF1AdnhRb2RVMExfc0tXN19ZfnBPaFl+NFlqZCY9KkhKPVY4UmwyNS46b3EzbFVWRF8/bmtXcV0sTHUwLEx0SGw8Ql5sXjBNTTwyYkFLPTVDQHRkakV+RUFyaXAmbDEmPV1bSHwwRXtUMFk8dXRdX3AyZSUjJkc6aytIcVdi'@;
put 'e2skNUJfdH0qb0B8UElHXlF5QGMwfjFbZTQvMzFAdjF6TiIuXUEjc1BjdFtmUj0ufWYmbXkxX0lWaHgsPlJTS1cwXTQ1Z34wREpGJXxPbXl6YSglb2VFXj1mODo3Q0lXXVY2Y1MsfTx2LHphR3orWE5XI3dlIXMrditrUG5vUWpTQ25gQmlmKFgjMnZqaCJFO3x2MG9PXmRyIVt8ZkVnUEVyTT1O'@;
put 'ZE9NQzVFeUEqalBfcDQ3bDlhXj1SM0luVE1xe3A/fUs0SDFCLiQwODQ3fik1bVRBVCJlQURraXx5a1lhWzJmKm84JX5PVCRuZUFIMS53K15KXUAuVW1dcHdVYXIrY3YhLnN+TTY1Vi5UXmw6UGBNL2M9ZjI7ZnZGTnFbPU4rVVc7dXRRV3RhUTtRPE4wdWM5WG4qJHdSZHB8ZGkwKEdofUlpInwy'@;
put 'bnpYP3kuY00hNEhVTFhrNGRFPFU9SkdkaUE5IVtqREQ6RipSMkNEemp6PkdWeGZ2WERod2RFS0o/dDVMamw3M09HU3VHNUE/YllNMF95YD5LN0BBbG5xSHRjOVhUdHYvOFM9KjEoWVgrOnUrY3coWldaWmMxdyJDRWZmTVRIfEJ2Lzt2WVl7fSprYylkQmZ0PT5UcWFTTU15MDU5K2svOHJhcitm'@;
put 'Zm10REcjTH4oem5le1dSTVZJO3BJOFNTQ0ZLTE97V3MieDFXR1BGWmhNJmpefjU1PWZbP3IlWDBLZzlqZmdkZWpCN2wuWkJtMU87RDcpKnVQRy4yLCRgMkB9Nz8jO1ckLHA6RGJHNUJWUnEwe192SjRZJUAsK2NWXTQlX1I4NGo2XXhFfThJS0xxajhdazJOezUsL2RxO2w4aSY4VkNWUl9vM3Il'@;
put 'Kks+UjJRfjJ4W2tJblQ6d2ZCOz16QkxqflVCMFZlJEk6a18mPng7YzBQdEdkKV5lRzU/ZyRyXnIwJn0lVGNPVFlLSzZaRytoZTY6fXNrTS8mYEY6XSM8XkR5UjNwRXVMWGx5PHJ4djRSPlB1NGxCUkdjL0hYWUtUQS8yRVFHQU5jOXYzUCQpcl1uOms0PGszVHcyOnZ4I0BKZkEwclYuVnNIaD9J'@;
put 'Ul13aVg9LkBSYUM8cE9iRjcsSHVqUT54b1RCIzNTe2MyT3xueDNROjw4I3gpWisjRGpYYi4kaX5CPXt+Tl9xNyN7SCxvYi5XMWMmV0RzOkwjQFc3c0hDWD8jSjc8fnEwLyleZFU9emJYOytLcUt4aSkpc1AiKmVLUGZ8OnhgYGhnLFg2K1dCKGQzLGlpRCteS0hwUmgocWFuUjFwL1hLalszZ3pg'@;
put 'cjQrTEAkPDp+JUshbTJJeyRuPGU0Z1RjfVpLWnVVZ1V0ZHxNYkYjb1pKRmtBX1JUS0hPZG5jejFEdyltL0BVZ2dWUislKltsLmNVb2NWfSxKVEJaIkwrOE9NM1NmdjRLVmE7TDdSXz8iV2FkZFkpe0M2XWQrTnxxSVRvVT8kPFlFdzI1I1ksQG5lcGMzSE9kMVBRaFRPUVo7OFJKZU06fUZ3KjMi'@;
put 'fEF7c2dnQyF6enhzT2gmZ1diV1opLmVhTSlxRGpGUGw3YW8oezw4MlNmTnZLSmtnYzxaO0B9a3E7MVFSfWxrQmJLKTQ6WFl7eEY/NTc7N241Qlo+Ol43Ly51NUN3X21eK0heO2ZfWGl6eldlTi8vVTVpZThXZzJoLHFuLkBiMSNZfUY4V0Y7LDNXLGUwbms3Tzc5UWJ0b0Y/QGd2eDQyVzU+cXha'@;
put 'PnIhVi5nfHlBYz9AV25WO0xpU1Vqem5vITdnO2wwRlZ+NTw6cGx9LkFvUzpmSkArPSk+Pz48U2FIS2tFQ1o9TGp0cXFEYj0+OE0zSytJfG9QPzhNcVttP1doJVQ5WmUlVlY/eDN2XkUmKl0/dHNiRityNDcjQk5ocGMyOTsmLlgzPXBoKXhEUTh4OFZTVEJZKi4rWHZjPiRaeys8e3lUZ0xkO0xb'@;
put 'R0JBTmVTbH1vSCVrYENlQjhQWiMrey98ZlprYl0uWG9TQU1ZNDVEeF9dSW0kfEJiZTt1NDoyNGtqKURCZSJYe1VPO3ZTJm4sfkVOTClJakduYlcrdFtwMWJHMUNNWmE1QkpGakNdSEZkUCUvZTM9fXZfY0R+LmUrWkd6fCwhWj9AWWh6R312aTl7cCwiYU4uXiFhZVV7R1R8VTc2PC9TfH4leGlV'@;
put 'W1o1QEBtZFMvbWRvdTRLZVs3PEtHOl4hdWN5NTJIW2csTWY6JGpuYlAwYyZ7MHVSWzAyNnIuL3d7bSp3UUo+NWdgPWtBO293Iil3LiFma1NMNVdSZnhENWMmZDM5P1VZS05+WXc8VlZFKGouSGpQdkBrdSU2a0E7a0AiazIvcWVoMklUa09hekRTRkFaeUdNbUpwVVZQdU5UWW14ZUhlK3lHK2RS'@;
put 'eWtaRllEZHJlK0l9NytrP29JJD9EQWkpSEddYVk3QjRbZHdhOWFPcUdrdntKPHszejAqaXlLNVdSe0V8b1JKZjViVnVrU2UlSmV4W3EpU28sNGx0SEM3QFBreko6ViwmTm54VmU3cX50Q313LzRJdVoiUTNZLmVMZEkzc1VKL0hee094ZGsyM3RkZnBmV2pRR0B4YCwqcWlZPkldPWs8bj5VLCJ0'@;
put 'SFpUZTQlVkZ6JHQrY3YpTX5PJU0iLExdejB9Qi84KlhbfS5lYU1HZXI0PXU8VkgmSWRoJiV+SEd1bF5URntNaT1ZZ3J2bGJGfUYjZHZPKVN7Zk4uMktqVy9PWGEkYmg4WU9+UXFRTEN5UU9wSVlnSWI1JS5XVCZwRTJAcUg9YGluYGQuSUszYzw4aSkxQ1tYSU9CcUBsXXprRm9TUkZrPnlyVF8r'@;
put 'LylVfX17fSJOKFRQXjhrbDd6R3xyOjFGQ2BAc1E6NjAlYjZYZTkpPT1deEUqTFhSQiU6YERXTDcoPHwkP2wlRCU+VmU1Ris6bjpPfXJ+a25OWD50NF04OFYjWzhAUGpaPEFfTX5rckcqdVt+eyVrOlZBJkI+K1IzcF18JWtbUWZSLFdweXVCVWJwe2VvQW5peWh8O3BhZ1NUazY7T24sLmxOYio5'@;
put 'cFc3VFFALy9aTVp4NXRAXXo7My40TTNyd2B4LnNwfUsraEw5REBsR3lvWH18MzxyfSxRL1puaGk7e1p+JkRRZTZgeSpNOldrZnU9SUcpd3RYTDpDeTNqTVR0ejxAUGw7L1FgV1UoYUJ8aWd4I2ptI0FFRVdaRX0iS1I8YV13OUlwKWUhcixSZk4wKmliZShqSTUjI09NcDxlTW88PVBPbyx2KXpQ'@;
put 'VigkaG1hMV1fZzJCLCspSFRBNHAhZ2tgPz9AcSpDMXBDW3cmO2czTEw4SHU5LEFMaip3YkZiPFY1Uy8pckY5bj1LaCNqVnlYfTRLdHteV10jQmlleEs6S2hGalNqJXUoVU5tMF9oS1I+KVcibnBxKy9NPnlRbG9WTitXTH5IdjReXVNvJDhoKSV6V0BYUTNPT2I5OzJRI2wlTSN9c1cvPz13ZX5e'@;
put 'ZV0wc1BwbDtBR1F9VyRuWzxLO05jXU1jX3BIOnZOSk83RCRrJEZZMFo0KTFHZnQwOWJlNypZPVFOPG4lO2Mza0doXm40JG86ZndheXRjb0E3QVouKTpbRkRtdjRSI0tNN3RjeiI+PSokUXk/MlcqeXdqO017SzR0NzNWeywsIW8scDNmUS9DNz4uQDZ3dm9gZ0Vub1dxfG9+eFdHZkhHLDksXWtF'@;
put 'djlpazwrbkhabXlrYyFPaEh+SyVkMyoqOyUqc3M0TzJQfTQhYGFTVjw3SVVnMGBKRjkpdCI0Jk07TmxDYXNCbytFTzd8THFYWm8kPm1vOChdKHxBUnwmTGVnOlY0VEpQOW1+XUFrdTlKRHt4Q2QjcUJgR010ZX1xSjFYYXFRP319b0MwcVBNWChJMyVXVks3dGVtaEFXRmB2Q0VqWHo4KUxbO0Fs'@;
put 'OEg0TX5LNHR7MllWOzF4ZFcpaXlMdX5QJEZ8SHYjW2JOSnk5S1FpSUQ1Jk46aTYqVXRBdTBffVEhZF01Ml9lO3BIfktMKWYrVElrLD5pbyJpb1V0VDVnKjc0KUtWQ0NwQWJ8QG1qJTBsPW1yRWVHSlpKYEMlSih1PTZ+RyVCazQkJTtuPmJdOVEoR0lwRDU5aS5bUzpyeHhrNWRnJFt0JnAlcEt5'@;
put 'JipQODxBOmB8YHA+YCRENHFRPzl8TV89bkdvPnZ7cTErWCtfVGd0bEwycDppc217bWUyfUdFYlQvYkducDVIPl0ldHtnZzQvcygycW1iaU5jaVY0Y0FSTGNWXXw8Nz5CR3RpTk4oelBDaGIrPiJJd3RSLGIvJWdiSDxhN0ZgSGhMTCJwRTxnTHZ1TmU4QWU4RUdDJldFXj9qXnYoRiJgJmxWQEJe'@;
put 'JnEqcyhYUDIzN31faVFTZCYpQGhUdD01dkRURExQfmUuKFVDO1IkQEoxLlcjW0k3aUtdQygiKEYoUzQ6PGNaMVBpK1R7KWpIQGN7UX04K0g0Wy8sNihDQ2VIQlI0Z1IhVT13QGkuPC89aVEwaTZlakdBTVJpXmtoOjtHcFduW1VwUHFJIyt0PUlPREBfLGQuKEpXWWIjbVZQYyQ9VV9zdGV3SnRA'@;
put 'XXhQI3RIL3A6PVteLmd8WzFQRitNJnwvKXQ+QVhBU19seS5Nb0M1RXc8dTVkNWRjO28rPUksQlk3T2gkT0R6Rls7bSVuamZROmNSNUpyW3Rrd0ZUWjMmTlc7M0hzYz5PRiRba0Y7Tj5FcndJOmNpZSx5ZmA5dFZzL3kvUDZQXV1uNDd9SyEqcl1yX0JGeDdQNUt6JjlWaGxQNnE7NnomQi8ka21z'@;
put 'MVh2SklDM35yS3ttIVViVEVzazxyTS84eWhDIXRAc1A+a0JmTUlUUG4uRH1FMkwwe3g4X2F5N0tycTs/S2w3QyRkUSlRKXIuLHFmdT9vdUN6X1pGNEdTVmV1WnEsP3pLXkwxcUpgSUBHaDNMOCNlKSJ8ZGN+V0g2M29TNnQ8U18iWmR0QnxxXzsmYXxWRkQ0dW0zLEAmIT0iKH08SjkyMXErN0R7'@;
put 'YTdbeThlVCRneGg2bG4mKmZKTXU0NHY7XWQyKkZgWSxJZkVXc3RYZnsjITg6Mms7O1k4JSxxPnwqTmRKXWlRXntFJHhNWzlRIkQ6bTR5UThAbU8qNHRUPVVfIzA8UXlTfSQvem06Yk11ZElBNip1UD0iX25CTTchRjtvRlN9eng0c2p2MTY0czRuMyYyInVUTl5jSUlfTDJRTy91PVQodFNTWCs9'@;
put 'KUQ5QHhbK1BWR04lLl1KaXpvN0E/WyJHWjBDL1ovUyRya3Bfbn0zW1lCWGZSVlM/QUMvVUBqSWx7WFovQCxEXlZkfDVuOis0fjE2RytBOnUpSmNzR1ZkV0lJVD4yb0RSV1RoPmdqV2g/fS4mcE1peUUsZjl7InNGaUQuZ2ImUChSJHV2NXV0LmhETURDdTllfTB+MkUwb2olPUxYWikrO3NeMEN2'@;
put 'Rkp2Iy5gYkRMIyxEKThVV0QuMz5ySSEzIVhQPnc+QTg7blMhM2gmJHFQbzxpI3BfUVFwN2ZkVXwvRUpjI3FUdi5CVEM7aFM9fD9DMGd0d3IlTn0/QnxHY3JOLkwwR2BCUjNbWiwyfjtCSFpEbUhLIltWMS5nOTw5XlpzbDVpY0xfcnRxVT9VOipeMSo3ZjRBZGswSFBVOEJTdjRSIUk9L2BSSl0o'@;
put 'fmBQNihVT1M6RDNwPldAYjdmXm1nS1NQZksuXTw0V0h+bFRXVFBQLmt4QV5OVkNtNyYlQFJeRF5EXkRedlBQdkxWT1ZvX0I/VWlFbEZdQWxfMUMkUyQiWWptZFksUCxQWVBaTT1PRWU8d2tZfFFLUnB8YG9dfSRJRUM3R3hIJGlLI21hbGpUJiU9Z2lMWD1OU09IUHVlXTZtIT5HXlRTXWNIL0hd'@;
put 'TzhUb2FvImlAbyJuYDlmeSUzVzljOmRIe3hiKi5vZ0I3YlZAJlZ3dio3LilJc3w9TjFmfDpbb1YjJGV1MUM3PX1tOCF8bWRhaVVRbWBQX2BFL1t8MFRDRV1COEhIWFBVOFhwOGBFcUh1LmkuT296X15oNEdQciZ6V19aPF9iUUNIO2ZETT1VSTc2JUhDXzsqfSNoPTVKSGg5PSsjem5vN2E5dTNS'@;
put 'MEc3YDJbODlaKldaOmV6JlJpc21hVUF+MHkuWTdFX0JHOj1BOUByVCQ0YV1mKl9EPVsxNm5vcmMpc0IwJUciQWdRcnFZcC5dYTclfmxUK05LdyJAPn06T0wybFRCcy51bVhUSy9OZW04aGt4M1tsVFUoZXd0SXd3OlIub0RAZGZMdj59NVRIUUg0PmY/JGY0O3xuc0NnT0o7VzBVNzg4PWcmU3pI'@;
put 'RSxOXzdYbG92P3J+Il9xKVdbU3cqVV99VyJeXXVUfm5DVj02QXtsUGN8RktAe2Y4Pi9oU1luMD1aZG5dUXEvZn03MmxtTldHMz9DZDY5W0xZNmYrPEBYMjF4PkFhQ3pWczh4JS5vRCMyeGpMc0M0SjUvWSRnImYkUEUwSmIvWHEmL0V9JTA8UVIseWVfIXE5YHh4V2pIYmZ9ejp3QV18I3RTUjNp'@;
put 'JTRLbVtuOnVCfG49JHBkPHgoaDQ3fkRdWVtVPU9icjNpdj1xPHJYUTpVViw9PGt5JS5GbzFsfTVoeFMvPkgjZF5UZHkuLCR8ZnZdQE55TUR+M01Gb2syW0k7eFNQYlFgdzokfEZePWlqPU9hZXVRcDVbPy42JUBIO29ae0lVdDsvQEolNUUlN2p+WGhYWVZrYjp2LmJNajtKWT9iLEtBN29yKmcv'@;
put 'TU9jITlBSV1EPWxFOWYvYXIqN2hvc1MyNmlqIk45Mmp4dCEqPG1XVypdUzA/RyN2bX4sR2w+ckw9KSlhM00uMyx4eW9HRWJGYX06fDNgb0RVSzJlNHg2N11JUkFGJlJNMCM2Zjw1VkZeY3lCRF8sRmV5L3V6U0RqdyorSEBJZXI0ZHU2TVdXNlB6djUwc3NFdDZkbVBWe0U7RWRBPTtmRlBVK11x'@;
put 'QzNmbztwdmpAay9oaj8mQmJbS1c+aVNoOldFVVltJk1tbVkqZDIsUVU4WGwwRmE+UUk2e0hMajQ3UiR8X285S1h5RjlWISglWVVFWDNpVmVoI1QjYDp5a0VYaGkmS3tYJXNAS1lZYEQrKiY0XVQyO1NAOlg6Q3ovPk80MFZ3X3wkbzRLVkE1MCZfYCkxRnsmc3RyNTc4MTE0TDROUUleNzh3c3BB'@;
put 'eSwqdX5xSUYqfTNmI3tRIWg6P3wzPG9DdmJ8d2g7YGNYV2Q3fTFRdHRvfFFoeipTNzloXyFnZj0qb2A5UDs/JXFKSUFOWzV+X2gmWCxXREhdWXxRaHAqV0QmWm9+YjFDV1BPfWo8USVxfmJFYUtJbjF4UyJOPFBod3NwYSlBMHZ6XUBpM3U1d3QmUTZpVVE+alI/fkpSRTtyal18Y1RFJVt5UX58'@;
put 'I2thYT59ZlNLNilzMnh8VyVzMUUqWj1RZj9YWFRFeUI4RF98d2hbKj59KlFPZGooPWolIXd3dHtnZlsqWH1TUTUqWH19T2VgRyhAd3NCVD9ZdCFzI2EhaztEIiRpUW5gKSptVWc9NGBLWCFhIWs7RDQrY1MmQHd0fll8PzV1XWdgUj05K24iTkouaFFgO3MjQTBuOzZDfl1EZit1QF9SeXd1an5a'@;
put 'enB8ODRtUEtDfl1aZEZ2Pn14TTtuODR0R3xKQHVzcGxOQU59VWosRUJpVEFhTVU8YTlzV3g+cmYvMUlyKUVCZzV0R3NLS3VKQztoQTBxXSpSPFFWJX5iLzdvJTloOml9MzxvfFEhaHpYfTMxZF12Zig/aiVyZWNUYjxReHR+Ym4leT9mfnFJNnw4NHkvOHMoYX5WIVsid3pfay90SkFOfiVpWiFo'@;
put 'bDVfViFbZ0VtSVc8fmJtVVkqeVhlZntveDVWSyt4ZVRlLzwwVks2eEM2cDRKQyskN0NYKVp4JXwpbH5abC9oKD5ZNXVjUCVhenV4SWVgLzopYyUxaChlQzl1SE8lYSVreElXYC86KEglY2pUbjFuLyZnbjEoMT1QJWE3V2NQJWF8Qzl3aDZ2MVZ4fX12U252dX5YSlBkJXM1RVtXZyhjQ2Y3UTI9'@;
put 'OXxuRG09OWVpbGdfZXk0dFBxUD9hPFBfZWJ0OXZHT25IPWBKOmJIfGBKOlVjd09FKU90TGlmPXp6LHRLfVYufCNON1QsKFVbV1VvaihodjxyZWNaSGU/QTksT2ZvXldmWFUoalchQDU2XWx0Z25Nb35ISldgWGBTIjlmKGFgO1c8OXZHTzBJfj9BOThQbzVpO1IxOlBsfT5dbVNkX2dVOjleUT9Z'@;
put 'Pn1mYDRXbClJJnIlOCRZOktJVkd8KVAoQzJ+VklKVzdpfHlxLCp9UlN1YmM6N1BiSlJXbChCK0ZCYndfWFZIViJQQlZVQkZjdHJCP1lWZTJIY3AqKG1dQz9oTVB+XXtDd0R+fXMyMCsjekdHaHNeaWxFKFpARFdpaigrWUZmUHwoNWgqY3FiWDloTnUyOFNhSCE+KyhVYlloYC5KVmBuPmFBLlFY'@;
put 'T2VfLHF5eG88RXE+dHI1RlJgOzMrQ1FTWGkzOFAiIzM5ZGlNNCMuWjFWdXdEZ0IkfGZrPVskYFp2P31wdldKPUQ1OWRpNj4zYz15NTo5Vl0/OEh8TWhBT3FlJColfmFZWnNUXzQoSjVCWCRzVWNzQSo+OiYpW1MkXyRCO15veyhBM00xIT9IPm1maylCRz8pKiFeNWwmPmxGezs+LmArRXdhemdr'@;
put 'QH1jX1E9c3glNlhvYSUjMktAb11xOz0sKHJpQyF+WnZDRmN+JlJrW2dgMWIybF1wb1JNXWxxPXkiKFgmbDoyI3klbF5sYVsvRXJ0aC9XaHZHaCNtbWldQjovOSkiQThDXXp1b2sqMjZwMVA5SjJlT2IzMlQxUEc8bEc3b3A6PzFbSEdedW0uKUw5JDJdZXBtdjwzQjtVL0xqWE5nT2w3YEpxWTEu'@;
put 'dlVSc3h1YiR+YkE7VzRMcS9dPThGWjNlNCNBQyw2cHkjcDpSfmRDVCgmKH5SPW1LQGg6Om5AeDtxcTs0YnprQjdNXkwoe2J8ckNPOFZKWF0pMShrKzZQNzhBUHFQImB5bC9gWX1COSZzcVFkNixrRSNtMGo7WTJ5Z0MvaDR2bH1gKD9bPUBRKEhHXjpPLzFYXyNbTyN1NEQyO1F0KiI/ayRIYmJu'@;
put 'OT1Rejh9dGJCNGZKITpHQDdTcSZGckBFMWhRPzgjaG4oS2A/YUYjY2AwJGBWb0NOdzhQLF5LL0U8WF1CZEJ1UlNEa3dqWEcoaUMkQWY9MWZRP0RAazpJaC5GWTRCdHh7aHY/c34uYFV9aUkwTWxGaWMyQmwyQCRgRipARFtxUGNsMHAmYyNbbF09aWhwTW42bWsoVXB8NmhJdXNzNylOWzhoIiVS'@;
put 'dT5tdHN9P09lX3teXWg/UzN6LyxTPytOWkxtKylOVTAoJDZ0dXErcHZTKj1gQl1aIkpMMXp7SEc6a3B6fVEoamNnT3RmbFZDbls2Y1JjRUQkQ2hWdytTN3wqc3BZY3xLfGtvVVc9Q00/cH5fIz5KMHBeVWB0XyMxRWw0MnZOOml+KzA0cSRfdXtKK3Q1I1R3dmwuPllwNjREMX5Sbi8jY1AqN1c7'@;
put 'XWN5M3pTMlpyaDZnLDJUP1FBZE11M0x0JDJ2djo0USljPzgzcEhUMytyTy8iMyNqfHJCLEI6Ymkycm54WV5dT04lYjFDYUM3eyZxTlZYIWVLNTIuRGEpQjdvNklOJU4jWlYoNElGaDpwP31Md3tVejJfRzNWQWpGYWdtW0dpKil8LnA6MFJ+KTZvXndZRkxhQXNEWShmQ2YwenlCSkJuZjclQj48'@;
put 'XklDQTQpVkdnZjlDZyVQVitCOjNAR3s9OSEpOm5ySV4uakRGPEBsXkBsfGNXV0ROcUxTKl9NOlpRTFFwI3h5Zjl7VExTX2BMOmVuZ1thJHo3JFopOEkhQzspR2N5K3xMTGF1RjsobWh4REttL0hTVSE6ald+RVM6bC5GcCoiSVhXVmN5N0ZkIyFKJXAwU29wMEBPLDpMUVIpXnkkd1RoeWd2WiFT'@;
put 'JDlUa3c7NiNjO31kQ2slPU1zNHxpT302TypnW2M2VWF6WlZoZnNlOFFfLCYvXndHeC9KNFldMX4hciF9fTg1ajBzMzs9LjtxVSMvPzZDdltrVGNbcHAmJXg5KVlnPlZnYls4YE52V2wyP0JTTntJPTBvdCNaUnFPS1lSRGh6ZWEkSVZYeytdcX04VTkiVkYpa3RsTkpZcDdpbG1HKzUrTXZaRHo3'@;
put 'TH5bQ2B1fHxoP11lZE1hPWloeDwjOGpeL2I4bEhrKlNvQmU2JSojLEtvOHYsVGUvPyUlVWkwZ3VOdTZ0Xk5rUFd7VGBdSWV8ImExOWNicXgqWmcsUEJpRkhyUEIsMjdiWH5AXikiPy5qJXMuRixke0IvM09UV0Qzdkc3O218LlBpZSxzVFNEI11OZTp6OEdeaEEyaXF5LHZvTTgqfDY+fmJwbT8h'@;
put 'NG1aSU1xdlJhelZaTCshZnpHOGxEeER3MSlHZWJCaSVwRXNfSDg7bllQaywvVXxNcG8jdXd9VytCUCw/Yj90dkJlQjhAX1NQRjhBZUY4Q2VCOEh+STgiUVp2MWR3OER4OSY2STVKbm9LbTkrKUYhUWh7Zzh0SD9nRDhBZUEvSjtCXzswT2YlUjFxWHpKd0Z5UVV1bTFDbk5wWCRJIj5wYTdWWUJ9'@;
put 'eCJXWS5DS3c0eHZAP1R5WjxqS1l6SFVCajhSfVtyOGpmezAlZVFHSGBqW21wQiY3bFI6dCI3Vk1DZiYzbHEwU0ZBNH4oWERTaiFuRGQkMiI9Om07S09hSlghYk4sNjUoUkVUUTZgRHwoVCxIWGJrWUgrWklYRWw2dTFld088QG8oWDV7N3BmfF1TSWg4IXtuOVh2R2txLElYbShHN3RYZUhYY0Qm'@;
put 'b29TWVBlK3U/fUlRSyU5Z3BLUCFpaVkrZn1dTzY8OzhKWEgoQmBuK1R5KyZNWyxgNmxuem18Ll9sYH55VX1sMmRVenNaZklyZldsPlJHWU53QD1TJSZ1SmY+Z1VJfUx7cW1fYCVBaXwkJkYrQ2UkQzdnOlY8eEhlXVpRR3VMQzZZMFRfLCY6UD1zeDNPTCg1aU5ZV01zcldmdlRSKUovTyFeSVto'@;
put 'LzouPXolWVA7cjs4diFgPFpncDlIKiQyMzpMd1FeeFpJZVRkcXgqayxtXjBMVkRtUklgciUwc11IU2BaSVZYfF5HNG56LnMzNihfemsuVGQ/aT5tQGVNN1t1QElhLG1eeXBsYU4qKnx9NHpfLk40eU99d3p+dVk9e3B2O1c6cH0oWGd4M11WeCFIOj8udEVCL0BxO3BdbjtpNzsydTdgImFdNHlz'@;
put 'bUpuQCRgfFguSnoxdV4xKjVvV3p6V3k7PF9lbj9nMDApT11gNzBsWyN9SDV2OnlCIkIrTDgpfGdiWzhnRj5kOCYhNEJCMCpaWyZ9cFBCPl5GKk42VzZ5fEU0Z0ZwPU9gSDF1eHl+WUJNTDclO0tOO2poTF5aMEBya0tfM2FGe1RAVCw4eHxWZVheIi49LkFxbXZISHksTDhFeE9mOFR0eURjTCFz'@;
put 'YkFQLj12bEkhLHleZWF0KCxBMCYlRDkrQGgiUylROlQ8Kl1qck9EbUJiKEFjdDI3b3MyND1QMzRvWGA8JjlPbWZ4bVJETzFlYCl2bSVzYmh4biFwXnNiNDguc3R8diJJVUpEME5LUXVTPWtXPjBFUkxnOS5dfD0kS1RqIk5+dVFlbz9kLHsyPzFxdGxyUl0qS2F4KWU3ams/PDVBUCgqbntHb35J'@;
put 'JnFYRnBrYD9HWVEldSRYMEE6N2UseDg8X2V0fT00ayUwe1phfTM4ZTgjU1RxNjNVfXlkVU9yNVNEND1HbDNCLC43eGRTJit1KFt3M0Isa3JDNn5WWnl0OmxEVSNdfFdlJXBxdTt1U3N2Ln1wQU9sbT15P295a2ppZ3FMNjw6QXc/N3ZWKisvdTRVanp9ZGpkZ0YqY3U1WHlxblBdUk1iXX5iPjd6'@;
put 'SjdyMmhzI0UhZFghVWMvczNZcHdhJj1VQDVNMzpsOFZHQjJiPixnKzlvK014SzpkODd1Z291JDNVInkiSV8lfVZ0I3haS014XVFaUyRmUX51c3tJellrPmd2L2RnQVNCMkIuXSxBa0FTUHNba3AvazBPeSIlMXAlNTFwVGp8fV9kQGE4Li56elEveCNdeiMjeiNhSERjYEJfWUc7dndCNlsuT0BW'@;
put 'K0dSKGF0djs3Oj1ESGA7dHhiRnFqdTFkVT4uakdgZ1Q2Xlhpcm5TYUFwRF1DNDRwNXBCeSUwLGQ6ZTI3L04ibyQrfmo1S2xwQUhOZTZjc0VyIS92MzpMMFU7QURZMEkvWi8yIzNFVEViZE98cj5sOXdmVVl8SWB8bHJ7XXNoQVRYRlljbUkuPyZiOzRjQjE6Jjl3SV5SI1tTRW5+JmNVZm1JT1N8'@;
put 'WX1SVCMvZz8pcHYlVUtNOzs9cU1tRmImLCskRUdeQyV6QlNSUS81aUJkRSpFIU0+bS58Pi4/eEZIKzo0V2peTWtqaCUjUj5BYkZ4bExnL0s0JVhkXXNWKl9afjVraE1KPVRVKTd1QkIuQWtBU2ZVJWcqZVp0OnNrSGV7Y1NZZ0VCTnJAZGs/UTdJTi8vQEBpRF9TcjRwS2pKMVU8NEVTfFZwbX5u'@;
put 'fDY0MnJ0U1VoOCRqNDc8VmE2bSVac2dWVWxnOl44LCExRkNLPDJ0a0AqKjs/XSZqLD9pS2cpXnw5OnR2PC89JmE/fkVeMG1dUXI6OT06RFFifTMocCtTIzQscjleXWJYXX40W0hGaTxsezY3UTFHbkdMcm9uRi5xZjxFOUsjZjxbOyZpZChPXSp8Tlt2WVE5RHhyLmJqIj8qfFBydyp2e0o4UX5x'@;
put 'K0NSdjg9c11aTmxEaCwhW1Jrck03Pz1yOXltY14zLj49fC9oUTk0OTt+MkpjNjl8fEF+TFVBTmV5Z2F4NS9DczlrWzMrWS9id0N3V0w3L1V+YVhBYThZUU0yOGVGLDglWkxMP1ZTaEpjSG1LejZdY09mYFdrYSM+JjF9PXdLQCRHS3M8OTs3V3JaNyxWXUM5aW1GdSw6diRgeEIrY2V7cGE3djpV'@;
put 'UU8mREI0U0tpfjZKZyEkNjpmQWJgaiZvTnw7VSpfR2JLNTl7NGx2PW4hSmxCemQuPTd5NV8wazxdQmBDXyxkLl5ifWwrQE5aVDVSJThvKm8/V3BVOEBoZlJ8OzNkTyM4VTgjWk59R1draDJEZjozYUt+JEVePVg5XnVNfFszQTB+VmtoITpPVSR6b05LNVQ6YjUlaU5mUFV3cnwuOXEmR2o8eHxW'@;
put 'Sm9TQHIpIltEPipJZGhhYC9RRFRVJT02WHxlYHVDOGQqNkdJKFhtdWsrTkNOKWJiW1NnMk5RMT16QFQ+N2YyQ3xQY2VwQmVOTUlqbDE9cXFFfnBqbGFUdEJjc1RUUzQrNzBZPU5IZ29Vc2AvTCJLP1VJPE44bzBkYVd7clVsXjA2Qn5DVyQjUUlyaU1EQnRFcG1KezNxbUNTQDpKNSFTQkpTSEQv'@;
put 'S3FWcmo1KmtMVXdLRUo1Y0csdiFUazlSRF9lOzBCdihXRGpWMyxtMnlzaHspM2koKEJ+RXZ8PFRuMWNbK0QxfjNheUQ/eGtvWChTIWxIaFVFYzZpOG14V3ZSemJOXX1RI0BWNS9DZVhwYFhwPlhSfXouQHR8NXtlJixVJSs5R01fUSNAO31MNz92YFc9TUFZMH5JT1huZCJfJjVleG8yTjdMa1BQ'@;
put 'YjE4bXJWNyxjajgucGFlM25SKjFLaHkhc354N2RvTiRDTVVHRDJdSUFxaUV9Wn1YMSxDe2hvPTEsdDNYRmVeRnsqYXtkKCtRKE5kXnhBYC8sZihLMmU0JD1gMV0pXXApZUZ9Rl8yY3lzPiwmTn1zeHQ/bzdFQS9QYkE8VlZjKSxLO11uJmZmQ3ptezNxcXt3eEo2PSxGMlREPDJDWl4raTFkQmdi'@;
put 'Y3tWVypCeSxsdWZ5MzZ6LiYsOmBpQUxuRTclYlJDVSxJO1Eud01AXiJtei4+R1VCIyE4OnZraCxgbXoue0d7cEcueWZ7aG9sdS5zMFhmSyEsWVAwMyszVGNGK2IsWWlETGFqW1V7UDtfYXR3als0UjhZWU14VkF6a1B4eVAjN0IyQ2pzJCZFWyZPUzUwdUVAPUIhNXNgUV82QFJlT3lle0l5WDpT'@;
put 'c1g7UDgvezt0Ky5GMmJqLjFNQiE/dUI7fUozSyx+ekl9fi4+UXwucnhRRkssfDNSRWNmSSplMWpbUG8oPiNwdzgmWTQ2Z3Q8VjtgcyUqU3d2RDhpbSlQS1ozdkc3W3AyZ1lqKWUqQX5WWWptNFlGUGF0YFJdWFN1Tkxpd2pNfEt+dWcmazU8YT9hQmA5O0pnfD8wSDhNVUszXlkwaytlYzd4Qzpt'@;
put 'OUxPVVU3fUxQSk9iN0dGP2gpcT4yQShLUFl+L2d1YVFyRzhTTVEsQGc/SEBGbDFaT3d1Un5yPFt2SnJIY1tTSXhQVXpwVFdITXN7JitiOSRffTVoKj8qIUQ1cUhtYjFDallndn1gJS5WI3cpSVp6Ryo+aFtLQmYhZjg9Rm8kXn1BY3I0akhpPWtiYiJjXktVOWVeS147cCt4VFE7OFphMUZ1R1J7'@;
put 'X1BTczRTWEg+KkpTfE4iSV56NDsmKzNfNDh2L2pDMl1pP2A0N19LcE9NWjM7YDU/ZCR+VGhfOVhYZF0kKGFzOXxOQWYpY0Q9Q19KdmckejF2R1osJmJrY3htSXhFUy93TXV+eSFETldkTDhRL2NSRVI2XjJDYnYsdWk4bVptJkVyalteUD9XMGhrQkhOdTQ+NnR7WHkycCE5fXdmc21UZmQiM1c8'@;
put 'M2BvU2Y0Jj5abU1wbmsyN3JtX2BVKnViaXBeN2l8e1BBT01fRV1wZUBoSTM6Oy53cSZVPWhwY3s3UGtbeF0iWV9gb14+PHYwXiV3SnowWyZpaHpfQEBSRSFGJCgvPDpFT01iazgla1JSaVVobyQ7RXlEVDVBSFJ0S2YzV1tLcz5VJGguaHBlLkFjb34yW2JJLDMoYy55VjoicjxLYyNAcURrMX1z'@;
put 'Pm0vLE9Jc30hTjdRL3k6RCZzbEk/JG84ZVBPMyxbYWV7W284K01UZkRNNG9ITnNdKSI/JGBvYTxfOV02RkVXVzEqdT1GbmE4Znl7MERtOClbJDZqNH5tWz1ocD40IXFPMT90RE59Mz5tP317S31tXyVESWtRJEomUk9dLFBsO1lkQHxlKyopeyYsNHcjQ2M6Tl84PFU7QGcvNCtEN2Q0LDhmcjg7'@;
put 'Y1JlRkVXd1RfRlY0LH5eWG1yXzlbLzNhdSZpZkJmK3VOfUVKZmlGMEdydmBXPmZzY1t0OE4ybld+RmomKF1XQyxtZHR+PSlSOmA2YjVLeW9XTEhgVTRwRlFlTnI+Um40QiNCcDwzMVhDN3FQP2NlNGs/Zj0sLzJoUGdEJlBJMnwxbzJ1W3JUcWNnen1ERzBOWFp8OUNTPm1ma1YoYy92Q1MkcmtM'@;
put 'RXEmKVA6L0lqQl9aY3J+a0ljMDMiMlRENFQud1ZSIWh+biZ9Ri9NcSk0U3NzPy4zUXlFOC4lU3toZmE4ZzwsQmgyRl5IMS9JOWxLOSs8Zk40OFQ/S241XktdWj1fSWh8RG4pUjp0XndxIjNxdEVVd0xXe29KZm54KCNHUU0zMXVjSEdrakl6cXxaci9PUlJuWDJkInVxfGRmTkhGOVZZamZWKiMh'@;
put 'YU83d0NDP3hHKnUpTSE5TzdGMDsiY1FNdE9LSUNCeyp1KUFpI1BBOlhYcz9PRyZJfTRHRnZzNE9QMnc2LmxnKDQoLyVmOGpDQGJ9VSk0fXNPbGN0Pmc4MyU9czt2KTwkdWRoaC80djpdNEdSS0IrdjlSXiN8JndmQywoZWFCMj5oTGVFVUxLbEVULFprY2VgJHdAeS80dXhnQUdPcDEoQipoW3Rz'@;
put 'dkhIUU9BaVdHTXY2JThXQ3RCPEcweWlnZipQJkZtNmx4bVJQdjJXRUF2KFhMM0VDQU9oJWY2U2QjQ3AqWDs7e0VSMj9dJkAxclBQb1cpbXArOkA1W1tuUF17K1heaGQ+bS4kVyRlLH5uQn5GQDdSeTs8RGZValRqcWM+WDxpPC54MyFnQks2JDV4Wl0hcmE7LitIQktePTNkdWVtU2Y1bCNrYDxW'@;
put 'ei9hVGwxRlAiQDpUcDxOc1RDIj0kKixxdi92RXB5REhWYTx2M3xyY20wNj4xKylWNVUwK1c5Iyh1O31Oejc/N3Bhd3s6JnlnRjo2ZnNFeXpdXVtjRz4udzcxKWYqZHcmPyFdVkQ1c0w6Z3Yyej95UXR2MGljVSMsVER+LjExRHpSbDU/cH1gYTo2YSRMUGp6aWt7S093SmBrfEM9WVd9RllSOm1f'@;
put 'Rl9GbnhnYFUqXW4yQm4sK2g4bDVxWCxxIz85UH5RYz5dcGQhNm5AajR7anIhciwrbypWWiU3bm5HTj5WKSI1LCwwWHRZKChqOGxdYTFARy9YRilXTVs8ejc/OD1WVil1ajpxeXdzcHs1Y1JLWSUvYjtOZmlYTXQkJDlMO0o2aGtlNF1EcGNkRjUoYEw3UWUrOTtOdFhxc18wKlhPWE1bfSU+dUhI'@;
put 'O3o1XnAhL3Z+c1AoYCgiKWBARVUxU2pmT3kqWUYwZlB1fls1JU5pSCYsRCp9JixpPz1ua29eOE9jP185X1JwXTx0b0AlLEp3Plo4ZE80OnxgSktgfVNQQDNYKFI4WXcoQnJyTCIpVkY4TH1SYjlAPzk1aixfIyQ4NEJDZiR+MF1malFDNT05NVtIJERmYSFAQ0RRU3Z+Tn5KNH44OEQqbV19eXpf'@;
put 'NUVnY0BISWF+bmdfTnE3SW0uO2hIT3szUkNNVzRfQXNnYy4kZXpMSCx8S2o5MEBVI2hJOmN0NCxMdC5faTY1XlM8OGxqeShZJVIyd3t3UjUuOXRWcl50SWMyXiFSfWVfPltUbW54VyZ9ZUgrSXc6PEtWVFZ1VUVNWixqI15dWmh2REN5MTpicUROdT4hWGdGIV0xMy5aX0lENVtgY2lzKTJEMTAo'@;
put 'XSgudkV6NTtEMllGTyFPSk1GSyFHSzI7QUYoOWpXOC58NFVCT0d3b0cifjx7MzhYYzR9WTEpbispTFZXaEVwS11UZVUicU16NHdyWlJzWmRWYjsjSHo+elJKeyZmMmpKQSo8NlVmWyEqViYrSkMoS0lkYGdIdmkja045O30qIipLNS56akJ4LjtTbEo5fFMhMnVaMn4lKHRzMWYrQmpoLDJ7NnUy'@;
put 'NWZeIX5BTlE1NyhtUT1wLEVucTJxNkFjIzglXW5uOEcuVEtZMGRmUVBIbTN9eUckS29WbUY0Si9lLGhIc14zNnhAb0g1USsuPH1YWmFzTFQxdzBHaF4+IztAPG02RGdAa0wmdEZHPWBnTylWU3dqWFNmPj8kfFgxMWVpVXUhNF53LjN+dl9wVFVsJWs9RkJUQjshRDMhbXssWmE1PjBfKDtiSXln'@;
put 'Izhob3k1VSlVMF9kTzlQMU4uJHBRUXwqK2k7WykuazRQZXhmViliZV1rZiMpO0sqbi57KXpNWEA4bC4yZ013I010PGhRfGtFRVQodFh7SUBhfTNMPCVdMkRMImIiJUU6MCxDKnEiNiZaYDBmNDtLNTxxcmNyZV54eigrVEA2d3w0cXFhSC8rcExLKEtjMyQ6JnF4SiEwekpoTzNLdzlEMjw6fXZV'@;
put 'SntPSGlYYWNbbFY6W2J+SjAwSmBDKF5DTChgfnNAMkddPTQ1Lzh0PyEuOypLfUQxXyUoYVg5WVFCLGtiXilhX0tdU3p8WGt2aV8uUzswOX56bGZ4NmpWTDxQXmdGaCZlUTU4VSZYbTBRRkdQRVJ7dkVDRVojfDNjMnwkRFNuSlhUJVgzR15IcjRlUktsNzJCIyFEP3pGO0J4V1dteTEvRXQwN2A4'@;
put 'OGdgNldQWW1dNT8ydmhRTkF+X0hPMj1JWW0sZ19CRFtiKkFrcjZiPlFRK1B4aEhFRVJ4cnZaWiUlMkBGTmNeclheMSJbSl0jdTldTmlZTFkuTDpeJHpUL1M+ZUNyKjM6PD9XajwkK2ZSfGh2cTZVMTVkOkxKe05JU2hFK2BdP3NYYC5+VTB0dj5JdjxxZWJMVVdKamdqLy9icFd6IiRiZmE6OyRh'@;
put 'Kk5KQiU3Qk05X2xdZV4oezhELGdJaWVGcjZNYFA8cV5Rc3Z9NWgzNTdPQjV4ZDlMNlM9YGNWeU0wQkRbdl9QNXJqUmBTSWY8fGI9eEthIVVgLkRDZThhYFI0ZzovUndKTnpiNHwxZVBOVDkwKTZGQj8hVFZiPTl8bzs0fkt5PlVELj5tQChrJmhlL0w1anZFMH5LRVhPJU1jVjBFbSpFIlJMZiJ9'@;
put 'SENETUk4K3xmW1gxcEpMWnkmNiNKIyx2NXpjPmkmZTNUM0Q4UD9+Ti51LnE9TWRVIzlVT0tFImkqc0lVM1suKld4ZiZqW3lQeytIeWNNayR+Uz9LXiNTYEUuZUc0KnJIP0kqJTxUdG9vT1ZbJUR9QF1Te2dgfk5qJVpwOUkzMCwpXU1bV1AsWzBFbmp1NnF0eiQocHNZJkFPT3REcGwwPGUiQ282'@;
put 'YTlpeyZ7aiIhMGovYiQpRGwid0tYYkh0dmdOaDFmP0E2aTRvNGFpJU8xcmNjLit9MkFCanRrW14jPVBTcXNgeE5IQF9OZ0J1ZVF9RUIhdyI0QWxYPmpwayI3YiJuKmd7RWMoMURXPzVNPTVAb05fWywsW1MxfTRgPC83SD5WdGh4RyZMVUM+WjBEYyhOPzVucWAybHJvNWo/O31UaUwwJGBkSldW'@;
put 'M14mViQockt5N1JfKlpxWD9PLy4xQnl0NWBiWj57WXlFR0w7bC90MXdRdSxOZ1BzTnE8TlZXdy9eUT0odFIsZ1FnUV9aYlciendEfUVoOzIvYiZoRXJGT0RqV0xeb2lENXQuJGR8Yl1sd11lQVMqJH5NallFbU1DTWU6Ljt4QDQkRE9BRTJQSUp1TytiMnxYPk5VO1dpIWdkczckbCY3MiRtMWRY'@;
put 'dDdYSyJbOWdYM0dCWUooNlBtan59W1ZFZXhnYE8rcjV2L1lEbExGKWpCNiZndmZnTTJ1XXZDTl5ETUNlQ2V0aHhON2tpU05xPHBiVVdxdDY8blJEJHdFYmNkfDhqJUJ9dDdCZSN7aUwkUWhNfU5YSU90TDxNJjY/eE1xQ3loRyJfVlB2XVdtVSJ1YGZ1WHxLKDxnRkc9OUUpKCJ7V0dkdl0rWF9W'@;
put 'SEQvXUlvQF4xP3U9SnxuXzE6byRnPnMwIlFVbEwzcGhfPipXWk5TbTFxMk0zclNMYCpNODN3V2lvMHVka1BbYlFacT0oKzZ1Iy8sMmYvPUxlR05CUGFYNz89IXozPkRhZ3N1XXh5cmY/cFpNbSZjPnFicStrbll3dUNvRyYkTitHZytFSD5YemhvZXAzX1tOWD1iZ2YqR0A7W2N9aEVXSVcpeTp8'@;
put 'NiJlW3ZtcCtGSX06bSFPL2ZaK3V4PDh7Z3JjUGEidUlteDI0SCU3bEcqPF9uYXxAZ05wNnV3SFp2a3Q/R348UTQlPWJ6KmVWPkpmRUhfI25VNjJRM00mPTJzLFh8Uk80RCs/dX5WR1MzQDhoKSZmYE1FLnYlTThhWk1kd0t1R2dUcFRfUGQxej1sbXhVbGBDcExwdWJ6X0x0TTtFJXs3UHApSTlS'@;
put 'IUQqTnhNRTJAaHFMakhnfFplR31jWS5xejdWK1h3IUhyRFlxaSFLI1VqUS85eUdGKEptPkwifjU2aGhdRDB7VFN4VEFDcXp8MDUycHZUQztJa3NwPk0/PHNSV0dCWnckfHI/d3lpdSkjLnpgMS50ImFJfHRzQWd0TiMsUEJDZTtyL2N9YCZhdD0yR2hva0xyN0VgVUxkJno9VUFeLjdaP2MxOFZP'@;
put 'Z35HRVB3eilFO2sqNFplQ3duY1E2W2M8e2xzZzJBLlQlTVFta0d3cjcrL1BBPV8+Nl1DcHxUekUuUmxMQEpzI0VtWyQhSmBsJEtWeT9XLEpLeFtyeyxQbmxHeCZsbmBoWXomP2J0JVUvRXckUzQuen0zYDVjMSR1K2Z4fk1wJSsjYDwjTWMpeGY+IUVgRzAmUldLKjRmbTVJTH1UXnVfKlIwdWlr'@;
put 'VUttSzhafH08TSpyJmVMQjVvcTJsXSQqbU9MdT54c1ZpTUR0ND8zdT5+PkkwNUpHNH5oRWlFaWo9W2toQWpnUkk+MUw+JXo6OGMiRGNXT0Q6Nl5LVWdFSnEscXNFTSpwZWVReVpbdSs1OGF2c1VsSkkvMnBgODBsKDZpeSgyMk8hZn18bmA/Wi9UUldbeEZPY35vNUxGXUd7JjB5dXtuN1B5Q0p0'@;
put 'JDtII1RCaXhkWmlncXwmO1F0WjFrX2Nband7YEpkPFZ2ejJMP1Z0PU4zNXF+KEJeXXk0Ymt7NDA0L1d+X11wQzQlWndZVEdza0h5bElYRm1JOkhZaSpGOF9PJnZWcnVoJnBJfnJ8UilnOGNpaV1HRlB7KXlIP05ZKnAidykiTEVLcCQiXSZeKGo7WV53Q1NWV29VZjptLyg/XipFTFFKMWNDY0k2'@;
put 'Q3ssLDFxTCgjcG47IkJZTERmbFQ0aTZgQnpmNmVdO0I9UyFnUmQ/NmNIbjhyd3NqX1NVejxYSWJtOChHJnd7OmVodm1XYDlkPVJmc1hhRnBZdyQ0aUZiSCxuRT5MNjF8V2NTRS9LUGNEYUIrbFAvakR8e2lnVEghRTdASzROeCNpZXwlLCl4PSJ8MzUqbHNzM2JIYHBXXX0zMl0mR0o+KilqZHVu'@;
put 'aSZQdEcrbkpEdmI7dE92dT1uKUhSekVTQFNVRXc/YTZRUXo5flN0b19YclpPJiFdKT9NeT07e3NNJWR9P1JCXW9rOSxnZU0rKmYrdHcsQ1oxOVhGVDMyZFRTVGpfPkU8cXguSzIsTDwkTFNzbF44bipYVDBqUGhAL0dLX3JeZXNqa11nJktrTXBKQFIwKUFvKyl2Kj9xY1J8R2xOeVp9MVNXJjpS'@;
put 'RUE3JChtdFd4Q0ZJYU9yMz82eVB4L15eZXBDZjhgZj1uMWsvNEorLCJmK0o2T3tHImlRN2pbI189W3tZYFMjJFlsMz9xflQyVncyTmc8aUYzdVpmMS8jaXlmaUp9LD84emkjRHNfT3kqMXZYK3dja3pRYnQ3KXhgUmVvbz16OGkpW0pRRkpTNSRvKlFSQGI3IXVsPTF8RHlIa1VhRTQrUHtGPDtV'@;
put 'WUc1eHBETXtOa213MUBlQGI8Z18+KUtEPXswIyMuQCFeKThgb1dDeC9sbFgoVVdzaDR3X312IV9sT25jRT9wRSo/ZE86fTJsZDxyZlVpODF3T0UiJH1LPzs1dC5uOih5Tl8jKnRIYTAuey8vQ1VJTz9HIXNeZkd1ZVdHVXxmZDNZcXE9VSNJWEAlJHRZdC8qSkUrJjA1ME15ZCZvYmdLJE8+R3gv'@;
put 'VVkkKCZuMX1tJHp4VlNLPG5hJD9QRF9UNVRaQTwuenEwSHVebiUiXSU/bXk4XldqJkVsMFI+THdTREhiRXpMcyhPJEAuZ1J8LDBfVEJ6ISNKVzYuSjBnUVZFbXk4Mi5icm9ydzlxIXJhYVBEIlkzSTBqKXI+MS5CIUdxSDp8TiZ3TmhUT1JaW1N2TW9jZ3xGajxwSXJGWHVAVUAsLH5IRn5kVzdi'@;
put 'YiJATitkKWZCaFVPVSJhNyFgUX1ELHBCTHsvR2JVVUFqY0dDNFg/UUgpXTEjP2NLbn5bfSltMU1TRTIxIVFTWCg6R3UqSVZ8MDgjPmRBbWNzWTQwS2xDcFZOZEF3K2RtITF8KCFUUU5KaHZSaTJpIXoxY2ZVUFhtemx1UEY8SyVqSEJrUUF+Vk1sYTlwTS9YZytqWD9sWWBZY29IZCJ9dz4oPWFS'@;
put 'VVE+cmg9YlRzKmcpO25sdnA/R3MxS2hZfHhZNj1EZnc9VjlPTEVHW0ZDOXdkeSkjM0R0cFErKEM2Y2hTPlFXT0EsRTlQbz9VPDVsTWtgKy9QTUh6WHNiWChaUWBZV0hYSnEhSFlYMTokSm91N3FjdUUiUmRjT0sjKHE2Lm9gVEUuSzR3KmV6NlZaR0ZSRl1rNzhsJHJPNnZKeSZKI3d8Y0dvbWdN'@;
put 'RCRHbSJVUUd4bX1mcUh9SCZPbi5pdWlnQmlJKXQ5NW0wN1k8XlYxODZmVFJWLjVCR2J+TjpjaWhxMT9ePm8oKmF3PUEralBhO2hDQXk9MT9me3YsdFo1IVtrbXExdE5nSyY9PVlGNmtXKFRtJFFjKG82Mi41aUwkRDRxPEZpUnxmRX5adj9WbExkcXA6cEohbSxlbihEelRTUCxwVnFOKTcuI2d7'@;
put 'KkdSITVaQElEbjFfQjckYzIxUDlwfD1LKSNLRE0qOk97cEk8TE91JHV3ZkdVQWxINmU6JXQ0d1k5cTFPOmd0dzlkTnM3Mlt2XkdyPUBVbEV5NU42RTM4Nj55NXpJeyp7ZChrL0hFaUtEOjhSX191K3VOLlc3XU4sRjtUJDw4fnghSTk/RmppemI3YERGVlR1IU01bX0vTmxmUSU6Lzt2KCVoa2Uh'@;
put 'LipdU3lyYFBfck9OOk5gK0swVl8wL1FRVWJCeVNsYz0vdn4kN0FtJDVJSH42Z2tAbHMyO1hYMyF+M3cwaSVLUT50Y35BS0J1Y2NDUiE3eEJdO2Zxfl0uYTwpe1JuJjM2V3tEQ1hoKk84aVhBJlhIRUkkY1VyZ0JiTVtOfW11W3VwNnEoKkIscG0/YHlIVT42XU9DYiNFNn1FPjFyQG5QKTc+a0t8'@;
put 'KCU9VCVVX0I1Sjw/ajclPS9DOWkpa0RDc3Zoci5sVixBbX1TLClrK1EyJDZeb1lwZCRtRGFYPXJ9V2lfNFFrYCt5Kj4qV2kzVHF7Vm9AdGRjMTpwI01tUW42TFRbMGR5QFg+Vj1uanhMWj9APk5kK2cpVzw6cV8pX3pFTlR4YDVoeENFXVAzOzklX1lRSi9yUHlRMGR9M0I1azRCO19BYzxLaCNd'@;
put 'KSFNTE03WDc4ZEBoKTZrayFQXmBbOH48NXslKmJfYTkjamprU2ZmcGohfE5HKiFRJi9vT057e3FBU3lBbEx4bHZ4NDxGNHh9flNRLmJGLnV5QHttWS4lKSR5WXRoX1lqU2I2ND9SUks+UUdqJiVxMUMmWyVaUUt6X2xxcGs4Ny53RE42RFp4XzdMMFJyO09UYEdkUGhxeGpHJSg1LmtTOGF0cHMy'@;
put 'QjJWa2UxbkAjU3VQT1ZJPjBYUGMzO2t1UV1DdWBjMk8+ZD1ZYGg/TH44d2g4QmE8S04rdkVjdSsxQkR2IjohNip2PjI2QHRAb3dbflIsa2tLc1QsMVtlY3t6XSs/OG5ORn52TFYvc0Iqb24qQltJJSk5Iy9bLn5eL2xONF9FVmdgbSglKDNqdV1eMlJUQmdDVCpKPHAuYDRedmpBbDIjLll5Sl99'@;
put 'UlIoRVc+cE0pIWo7U11XM1JHTldteiRwI207Skl2TnlkQUhuYUtDeDVVT1ZTTzEyO2BmPVQ5Xj8lNWJjR3k0cHViK2UwaEo4MWw6SWV7ayElSjBxN3xVdlltKGpRdGhmQHx9UnJFLjF0STs0LiMvNV9FWUFNYzYkb3ZxJXpgTVhXKzlEWE1KZF8wJStVPVs4az47ZVpzWDBleTo4ZlcuYE45MVlT'@;
put 'NWVmJiMoUDNpWStFJnlTSmMhN0AiQDlnX1tsd295I19sLlFXdSFNa0V1TmprPzkkKy8uWTpASWhvPElXbl5GJWtjPUEqPnEqYzM3VTxkcntpJD0mLjdKMGc8MH1bO1lMcXlNbTBvVU1DYmJzcT8lKyllaT9aKGo1UUlLdz0zQVpaL1EqdkJxVFA2a0l1NXI3TiQ6eStdPWE0d1tXdmwia3w4d0Au'@;
put 'Z3d2RXZNZjI0Y2xlP1BKJCVuKWpKSW1EWzkwflJyJXkpQnN+dDR6P1E9KHZ1UzxsN2AhbFoveS5TVGg+Ry5JZCN6ZTAzJmhdZ2pkVn1mSVI8e0N4Qj1pbXRXTT13NyxsJDpOKEF6cCsiOzJ8PnUxPkM2KC5PI1s7LHlkOkJ6QWFIYnZmOlNqYDNZZiYsfmxvKmxgekNxMz90ZiVTcypXbUFHNUBH'@;
put 'fikhWUN4ekhNbUt6MFZ6bl9TK0lqYjwyM3QuczZXKEt0OSMrUEUjQ0Zoe2Y3RSsvM0swRWh3fSshMzU7T05Wflt4LiJPfTdfQFtUOUJZUV9mUXc4LkM+W0c1LGBwNmt1bTIhRD8pNG5mUjVubz5fM2ElJDVVdlpbcU4iKHgxdXxJRkNfPWk/NHopU2B+NzcjM3Q6U3JbaWA7ZEM5cmhGKHJfci4m'@;
put 'KzEuN2E2RF9VIWF1VkZQMXNFeUVuQG91QUIoJD4sJiF8XVolNnVySzouSWl6PT5kM2khQWR6RkBMLmk2VDIpUTorbjw5aDAodz1UYHFzbCFjMEJIciQ3WUE+Q15ZUiF8T11lV0RfcSFPP0creE5iXnIlRkM2OVFIfmw4Y0t+NjozLDxUKz1IOys1Yz9pTCp2OEZsNkNkQ11+PDpsWENPZTVQKDhp'@;
put 'fExmdXB4bEdhc0ZLL2RuS08uJChfUXcyKHZ1WmMjV2c8WytnfnNeSSQ1RXUyUVVmN0x8JTg+fHRDc099OHVjQl4/dEE3JllkJlF2fD5fTGl9aDc7UFJtOTRIfW9nND8pYTAze1VMcUB2ITw4SlJ3fj96Pi9JfTpVZVBQTk9fTH57TU9AYGRLaTd6Y2UyeFoqLCMvYW0pKUVhOz13UUQ+ViNUY3hd'@;
put 'JjtUTVlVNEZaSVQ/Zl9fJmVwW2pZWEJyOy5VOk1ue1ZraVNkKUlqKnBFN0F6KzdUfWl7WnRRU3JLOyNTWGRvLkliOSkuNnkuSClETzw0eEIlb3l4WkxTLD1tZnZqN0A6dj15RTZ7RStCcHd5WmpMUzRXeyUsRHM9WiFvfiteWEpyUnUxIS4ifmBtKTQ1aSI1aFFCMXdOdFRoVyZ5UCJiYFVfQHVp'@;
put 'aDxgKHVeIUdnWFgkd2xzfU9RM3JHVXU5RiNlQDo3O3R9Kj9gKnU2YURiaSt0e1BrV0JTUFMldlpeOm53eyVIcSJxUjw3OFdxXiZqJiosPyZfdGdHQiVFI1pjaHwlKSVZWEAwc1E8XVRvQkRSKUQ2bDdqakZvZCZ4ZzYzQH1IYzZ8R3o6KXNXdDMpKjw/Lj9bZmpIcG4pUkd4aGZbSEkxb24/I0Im'@;
put 'bCkqdz40fFdGMSxhMmAsdmQhSSMwIVlGdSlhMyUmeCZEcmJ4JHo3dXI2LzQxajkoM3BCeDp+Yj1UI1JEVWQvSi5hNmpDUUU6cUR7VH0+PCpCPX5sSGhmZTF6VHJkRkcrO0h0ckI2MTFzQl00dyFVKGFSeDl+enFeRSNmbTlueyY/RDc5O2d1fHo3ayVEI3gycF8yUmROX2NsQ19fPzhrSj45On5t'@;
put 'O2AhI1RQdUpxVHtTN1NEQkBdSW86YGxZUG5JNkxENVFuVjV6Mzdbdzh9b3VLNEQjbTlfYUE2LyZtJmxwSVpJd14vP3QjNEd2VyNxNzptZGJzd14uWF5dT01tW2xobVliUzBaUW88LF8jMXJbNnNoNmEzdEQ9O21KOUA9VH0rbHh0ZDQqN1o3Q0swQDMlV3h8e2Z0N3E4dFAxfXxqcEAsbmFPdDVr'@;
put 'MyZAZ08xMWUsYCM5eEs8XnN1Zil6W0Q1ZFhGeGlSdXd0KTpOZWUxMnM/VmErSURWZWxYUEU9UnM+IWJXV3pXInRQeXlqKnpPVHVTZWlMTTZ1cC9rLm86RzI8YUM9PF0kaGxDI18kLClJeWcxOGV5IyNrMGlbQ18qNi5DTnQoZnNjSUlyKTEpJUVML11lbkZzZzY3YnY6IUJfck5mbzorPGM9Pn1V'@;
put 'MEIqR3l5RWMkOkE/aldFdVBgQE9+alVzdER7R2NRSjhwRSFZWiQ1dncleExfTCoxITtPKVZhUmMiP2Q3IVkrW1ZWeEBTZHgwfSNTY2YlfGgxMFRuc1B0bj15ay9MTVNlaDgrJEVkTmdJZ3ckfH1gJkRkJHxLYS8qfEFpZX0+aDc+WCZtQDdMeTR1UU9hIyNhO1NMPVpNR0M+PnJFMS5bOVFWPlh5'@;
put 'V0lyN1Q2WFNzcXNoNEM7WjV+Q044LHR0MjM5dmVVaEZzIXYuYGswS2EqUTsxeXFjak8lOj5KKmJKLFtBI1AoNUJFOj8yYygoR30oe1dmU3BtKzNvSD53QzUsMVZxfXYuM3hjP2dHOGJ+Xjc6JX5GOXtOXTRCWikrYyI1JmU1QFpfUCNtUFZHOWVzb2RGSUZGQnUxJEpHTVJeci9iQCxFfCNgeW0p'@;
put 'XUheeiQmdj9CIlJWViRvRkNjSmkkQiY6eUV2KTB+P3crTio9b3twIXpsWDdnQj1NazRqOVRXZ14wWm1UcCttNThtQTN4fiU1V0N2ayEsUDRdOTY9MDNEQ1UvMzc8RCNgVStlaWA0Q2JrcXRwMnRBWyRrM105XkM4MVgrWHshI3hlOFI2LmhPJktUaEhyPn1CWjEpR1RESUMwRTVvO2Zla2dITX5Z'@;
put 'UjMqLkJqQHxdV0ZHXkZ1Z0d4RlQhMloiaHp3fC8hLjtuW01BUHM3JUwpdXNobzY0P0tGVGo6RywxamF3YVFxZ21dU1NIQjNCWiF6ZmZAdjE5SF9PZEdVJUIvUFU9SStNZzdFaHhAKXhOKXkyVX0rOUVtSy8rLEIzSGd4LHQhNUJ3aW9ATUpaM3c8O0pHPDo6bEk+P3UzYGJuYTA+OStjNC4weFhO'@;
put 'YGw2T3JUUX1xeGJJUig3Oi5DRXdNTj91RU9AK2UrQnYsZ25ucTZDRkZMSmA0RFh1JDRwczRMS0Z7blk7e3JpPVUuKW9IKVB4fkUiMEBGZXRbLi9jOGV9bzdISCs9UXlwKDNbM1dqTVtkRjp6T0IpV1RCa0s7JCF9WTp6b29iaGpfbD89QSJEU1t0WU5EW35dOzY5bkJLTWc7IyFYM0V2fCUqQW0v'@;
put 'eiNVMWJaSE5hUX5AV3UqcV9NYl5VdGZzOk1NaGw6SzQmMlgqJEZteDV6OVpidFIxbnhqWVpiMVBpez1XKkI8K2tTTSl+TGF3MVglXjRQWWw6Y31uZis6XTFxI3xzW1VSek84SEZKLjpaOlYrZERPfVA1eTF+KT96RSY/KW1OQ1ZIOXJPK0ttLiZpKVRwUER1a05ma3NKQE8hUV9aY2wkJjk5OWx5'@;
put 'Qnl4Lno3YmVdKlUmS2huYF9QSXNwfll5cExhcXMvTTBDX3A7O1JRVDxqRlJEVHZOaiZRe0RaN0giVEN8eUZMWis8XjlkTHQ6K1ZvM3BhVGxfOk19fT4pbGwmcVZnUUI/cno6OVdoNURnIURYVjcwYEd6b3V+WTIpLGh3UDExdyssOioxaChBX1pOdWA0cyQ4d1k3OkQqSiZPczAlSTV0NnhaXi43'@;
put 'KDk0NFlCW1JyKFB2YEUqSUlxVXomOCE5PCJ5UFNkaWEoe0RoZWZhfCwsan06RVdjL3thUWZLQnVGNH5gey41eFhIaXtYJS4mPnlUQ11yQywqanosWDNWJmFCKG15XXRiaUppfF9vZUpkOHlfbHI5PCRqQzQ0WSNMWj8vQVFndmlGNnUhWiQ1MHpLKnYxYlcxXU83MGRnP3dwJUJ2Xj5od35iKDNY'@;
put 'KloqWFF4KipnPjpqXz1jYDthR1sqTmRnPFRGQk92T2FeRCM1XkdqO0xaOTQ1MVRiVVBeZGFsNHM5Z2ZCZCF5aTRJfSQsL0xGU3JvbXk0ZDRTeSN8MVUuVSp1IlJwVzwucz5kbmhLM35PdHtbKjVebX1FbSFKaypfO0cjSj1SfH5aanApejUiK0A0UEpTWzswRDR+VVE5eFhUWVBMQ34iMnleYWco'@;
put 'KShFdH5maH5FUDhCaWBCSU1ZY0pOS3UwalsvMyR4Z05rbyk2W0g6eCVCaCNGMWhUdCpTJC85KylCR01IO1pxYShgTFJLc0hjOnttYVNpa2J2fmBvJXdkRHBiM2l+VyxyemtEM0JeP0kkbkwpeSRYa0UkZ1N8MywmOzdOfWc7cDJvMCpZLGZCND4/a3FiK29IXT5ASEovJWc5MVB8U2pEQ3I3SFs2'@;
put 'SWEqM0RkY1BjcXthZ0dVJEh0YkZhbTVXcCJmPjVaTzUpLyVzVTJhMlgqeSlhOVs2L3RbKVhCL1Q4cyQmUGcjLFJVKmtRT0J9alpqMER3dix6UEkmYU0xQCFaZWBoWDwlKjBiUXpuRmhqTTQsJjpRZzFQailxLm12VD1VP298aXJ2fDRWNTxzamsveUxbfF1gWkReJXI/Tl1aJVVebjFFXUh6SV5w'@;
put 'OmxbeElSXTA/SGtTMEwiNm9LYih+aEIlN24saEA4IVNhb3BRfHI2QDdGWlMlWkpbeUtrVypMYlQrPF5IVl4+MjNnPWpFej9uQX5RMSglTDopNnM7STk5UGlxcGZ4VCEwNyl7XWpfO2RSMGUqRH5lPlIqZjcyTEJiXmRpMExFdEt6LDNwZTFJWDV7cngxMkg7bjRsWS59U1E4LiE0SkE3dUFIMGVa'@;
put 'bikha3VQUD9xJiUodFQ9L3M+MzcpTWVlfEpMSkdUI0F+Smg5L2F4Kj9JdiRJUFE/K0Z5UDtnYWNEV18od1FAPylfS0FNUXo6dERYQlNtYD9PV2BVW3Q1JktQZXZvUyh6NXY9aENbPy59KFYjIixFQztnUk1ZMUVHKVddR1M/REVdS3FRSzooMyRFMFdWUHIlWHw3eDtvbXtGNjg4aUV2RDBhekkz'@;
put 'ej8+aHFiZzs0WXBdbUVYJGpURmQ2UyU3VSkkNE9mLCtuUnVQL1csQzs0VzdEYDhuL2VEYGA6fDs5KGZ9JEhrVn4ib0YqZVksdVNXfHtgdzxpPEEhYklWL2FrNlpmSytZXzFgPTllfG8maWdJJmZdOCF4YEcuQ0BTLiFWMXNDb05mckRodk82NDwoWWB1QjZUMWxVYmh7RShSJUVPTU11UHhTXyNv'@;
put 'UGE1TXt0aTBETWJCWmA2YE9XUiNQMGRJL0ZlMF13UX1iZEZ0KSVRQGhARGRfUUsxVWBZOHlZX1dkUm5tNEc2P0BgWV45JDsxXzZrdnFnYDVzLDYyXkdSZ25rRXEpTEt6NkRPQjkraXwwIk1RSnl+QTxOUXJlQ0MiV0R1eSY7O3osX21XPCFLeVloPGhXWko0OXlbOmNGP3tAOGNRTnZoTnk0KENd'@;
put 'cjw9TWt6dWleTVk6amM2azs/UlZmcDtLZXpDNEMlPEdMWDsqUzgsfkEqak13I05vbEVYZVk/PUhYOCs3NzpuIkkhL21fNyleUUpQVT0kIzk+V25aIjBffntfU15ANTldOFpLfnZwSEszenhUa2RkW19YRyhfTSNsI0dyfXw2MDA2V09qb1A1aSEqa1o5IiJbJX5VPE5LTTo8X2JYVkk5c1Upbkss'@;
put 'MHh7TysrL3hETU1VSl5dMXF0QH1ILCVKdnpXLiFkR3M4bnBDd3RmKmhTai9SUERRXT5sQUxFMHVbfG9sNVQ9KmdsXSkmKkloWGlfPTgwLjcrb1N6QzBDakY0dEJOaTptJTpgc3ltezxfLl0mOi5IQ0Fza080TW5UTkIwdE5BWj4iWl1bUj1IQHtxZEF3dXcmZV45OzFbaX5pWTRFWl1IMjt2Qi5u'@;
put 'NU5mRFl6NyZkJEgqUEUmMDw/YjRUOFhYKmBuJDIjMDJkI3tgdWlPKGUuei9OPVRKMmVYbWhOczheVVtjNzBXSVRHaEcsZ0VoTmM+M2tSQn5+VHJ3LCYzd19XMnxVXmp+Vk57IW5mZ35dazlOcSJqbU51Xj9iWDNtc1EsVn12cjdlQkh8Sk13cnl4czNvZ0xdSzZdY25oPzUxMjo5Z15kcn1XYjt6'@;
put 'fSpkT0UkPSNnMXJYc0JQVDdJSHFOUH0xcSg5OWR4OHRkQzB+OmBbYyMwME5TeCFdSjMqRHxecy9CfjR3PX4xb3RwcmxZNGcvd1gpRD1BMCFNMnAiP0tTXWBCTWt3dW8mJCIpU092V2k6YDw0O1QrdTgyJDY4cXM6Lj9kSXppVDROTXpfQTtLYCg3emFtdjYzcEA1Omt+Sk9hanQocn4kLGBRbzNS'@;
put 'b1haNm15VSN+M1dpIWxYeyp6cyV+Sj0mLj1wX1ZbXzFiMEteenMpekYmRkleJDQ2X2x1NFo7S3x2cV5MdjwwTGgsVXF3VjguU0hrTEJOWyRbQCgrV0JDbXRmQSFUO0Z+MWAhKChILFQ9TDdVZDA9SEBDbFA5UStyfFpPXT0xP3U6UiQ3XnUxNFtxUD1IMXU1LEddLkNWNDJ0LmE9SSN9U0dVMCpD'@;
put 'I2pLOEp5S3k+TG4xKUI3ck1iKT9BQnVCfTd3TCN8TlJTYiNEXzJ1TGN9eHU5ZHc2aTtbdT9fbGN5b2JAVHdxLHBDJStRZ2c7TWdEOTt8MHJdLEhEMXAjc25iWXBIVFNKYFhEPDlTVlc8dzFHKzRqK15xKDR3JClZOEY2TzYoNl42L3YzI0ovUHtUbnZsWV1NUFkifT9OP0Z3RH13Q34rWk93NVQ4'@;
put 'ZyEuWyNlLykpajtnZ0VweTw9SEEmd3ReSWA3OlQxVzlOYyttMGdeYzFwN3FXRltCX184PjhrYjM7bD89IzE0fWcxMHFIVSZyKWA9Z1pkUW99JCo8bzxwemwuOlMxKzsmWkIzMl81TzIzRlQvbDwhVGU1T293UWZaRT1oMlRiNzZuWnEvSz1+KCY+UjdfMTxrZSxDKGhvTS9Ka2dHeUVvSCE7SCVd'@;
put 'QSJzTV88MX5FZ01rbFdOSDc4ZzpWUDgjXVB+JEdYNmwwX0t2Z2RoNUg9e2FLRyhRPlg8Xk81VHEsaltjPi5iO1BlMEw5LmwkZTM0P1ovNnhYOHg/RF83ZytdTHRxc0hDND5vbz9zRm0me0xLdV0haWQhR2pbNFNSeE0wS09YPChWMG9qQHZkMEh6cz5HWDA3SHhDRmZfYEU6NFFrKHJgbkVKIyZ2'@;
put 'dWA6dT5TZ1IwZXMlWjtyN3R4WnIobTB8IXk6eVkwNypIaU8xJUd6bHlIQkdOOGp5W19MKjhLayJSfjF9dFRQTUpJWGVwMkdfV0ZTOVA6cTwjNlY2Kl46Miw0W1hmWHQ8RVJ9Xjg6ZHNjIShBMjsvXzA2d0NQLkptY3l7a2I2JThpX2BbMFZwK1h+VVciSyNNfG91UyE2OWFNKk5md257dF9qeTg7'@;
put 'e1suayJYczdafGlJM1k9I3s3dD1BNiRmcmd3P1pQPUcxUWJmM0ZPY3BMNF89c31qUkxSQCRAWVhrdVM8dzRPfWNAI18oYCYrUU8pUUZsISFsVStUUn50Z0cmVUc7YEwucT1sdjhYelA8OD51OWZCfVFzM2QkRkkiX2IvdWo1TX57OHpINlkkcyh7dXNpRmxIZWVDMmAoKExfSkdrPjtMaT9FQi57'@;
put 'PVo/NVkoXnEzSU11UFtOO1RZeyVmUE57eEgkd1pWfWs5VFRxJWQvNmNFZSxyLDJIaDdgJT1vY2dEKSZaQFV6OHJxZSZQb1BnVUdvdExKNDY0VmZsTl9iMDBbSG0sMUdCTi5hKTM5KXAvTCVNclAyL2NyOUlrWXp1MnJ0WkhPdmY1Ln5SWyR9ZjF7PzpkUTVLe3lDVj59KXBFKlhKRkt9VXM8ZT5Z'@;
put 'SCo6M3t2PDpkQnpJT0pOUyE/JGE3OF5SOWt6SnBpPVYhV09UVk4uNyEoMVpkJTo1RVcxPm0+QGlWUVkmdUMpfGNEdWFwWFB+OUZnST5xSlt+LG02V0ZFLmxiNVJrPXZ7O1p6R2U4Km9HIiEzU3QiNmFaTUUyTVhARF1jOGh7fnNZQnp6SEFhdmhNYTI7Kls+Yz11dSw5YVM1VnoxT1cua0kzXXpo'@;
put 'fUZUM3lFTURqdWBRS29YYlNGVUN9O2s3XUtfUWF9Z1NPLmhhJGFNWHZsXT5pVVQpcG1mVjU2ZjAucDRdWjxZZkJ6QyhqMC4kKUxoOUNEYWtkSHtxMXZ3RT8lKSpvcV15KW5WMXNRVTpNVEtTXV9WUSoyeE11YiNEQD1sLHcuLCQ6WUtoI1Fgd0dQLG9yMGgpMj0vNUZ1TkRYKlJBK1I0RHZ2ajY5'@;
put 'Ymc9XiF1YjQyI0YzJHhfU2B4TE1ub0RzSERZfWB6LGAhSzZGZSEsNz9zZDpXR09EdkpzTlYzYXciRzJgUSQmb0dzZEhTcjdxTCs2RjBMK0lSUnZ4KUtmbmRJdXBhTWBXUE4lZ30+V3R2dix3JiJkJjNzfDRQa0B+bUMvaWwkTHxPOjhbQEo1X3VUbWg+b0FISnBecFBfTGhJVj1yPnVQOjI8P0kk'@;
put 'anhvblsyNjRYYGN1bFFGN0J8blA+RF5vJiElaEtlT30vdkI6dFZdVzciXkRaTS9Sc2BOczBvUmZ5fkZMS3lMIU1nVF47XiVQKXxzdy5leVspcF0zWEFNO1c0OVNBY3M3cmQjWm9heyR0PmskR1Y8eFIlN2IjQjlKWWtwfClYWExvZ3dMLmlkQnRhVldPWEc7M3p7TCh4ZE5ZJm9hKkZ2ei9UOmFs'@;
put 'ciMjOj9qKGRFen1AU090aFt0NnpZSl53aHI0ek9aWG0xdFR2aU5ScH1ze1Bwb2dGdH1UJng8MjNASjIlaVN1Nj8zbWNmcD5JSiVdclRzUnVmZFE0UX5nTiN0XlRNNXI5VWFOdHlmUjlRaXhyUXw5dWUycGVQJU8rUixfUTdzITNLa10jZjtoZDl6LCtSKixte2widGFmOnghe30jVCslaTArTz1s'@;
put 'Ji5FZnVOLlokKDhVNGFabS5EcWc8L0M2KEVRfEs9VmpBXlE1cnwiIjZCR0Rkb2B+R2tHc0sqSzNqPkhfMms5Wn10SjckV2xWXzlMLlsicVQ8SyhsTn1vUSlWdF4vXWFoUWB5I2k9dyY0YEduTSNjbHtjZDlCKilmJihaVzRxMCNgd0EiO1BYc3d6dkN0Rkx7KGY5SVNlem4/bitxQXgwNmEkeGQk'@;
put 'WD1eYVBMVWdPNndLaDYkVStXSVF3USE9ZFJaNjptMV4rL31ZJmBYSXBvVFJ+VywsKTE6ZXZaK3FHfHYkWmBWeSs2VXdMRy9FLCFvZUlpQ3c7eyZvNWNneE1uIyViZXJRaywjUClfKF5OQDZ8UXcpKEZnWyhYXTViUyFhSEM5e3dUeDoxQiFWfUQ1OGhtU11ES2BqTC9yOjM4VWwxVl5QfGosITgp'@;
put 'WV1Wem9KM1Q5SDphSn1TdCwpfWtJcmdRcCw4ZyheNi5LYzw9TyJAc0dfRD0lZ1k8ZXVaXUNHRDohZiRSITpDeEc4bGAmJFVeYjcieF5GbUM/cEg8PSFxWjBAL2JmdzdzWiV0elpgbTdQemdPLGQhbD1CKGldOnNVZSM9JFJOYEguSUVZNWdheEt2XjFwbDZdKlsuLiR1OTV1V3QxdDZRanRNSmFV'@;
put 'Sy85Ji5oVVhtTk0hNztLJjYqeyxWY3tjLitWTTkkbE4zdWtHKn1YUFMvUFlVQmNoSmlBay97Pzo1ZDlhe3M5e0F+L1lraGtOMmVyWWpRV0RQMnMpeixvLEwrSlY3ITwpUVpZKm5MTDJWMFd9ez40Xm5edUV8dk1xKEtoXSNtPGBQZ2MlYS5iY2E3Z2dIZD9VM3RAI0V9LnwyZUBFaylXd09wJVF6'@;
put 'KlBRNXV8PHVwKnFWNCwlMi9pOzZ3RWtgK2d6KmN4ak12NT9gen5WRHdbPyo8VEtuaDZvQjdkUDskR15jQlkrLk9DVG1SdXUiRHpXW1d2RTdkN3tfISQpRkpWLkd7O09PIkQuKl4qQCJDfUJrQGNkW1duPT8pR1kpKjJqcUcuMHYlW0NKXzthWHJ+YGFddkZ9VCVnQylqY0NGajkmYU9LVVRjNzsl'@;
put 'MnVEW1A6R2UmLnFVeDdLRCxbPDVRUVZxNUY9WiFjakwxVXBgWF5ZSEg7JilxYEhjNmcydDo+N3ooa21JKGNYTVlEWjkhQW4xRlh5ZVlqQjcmcn0/ZE58Y2ZFSDgufk1gTzhaWT9UTlpQMEJbJWhZenN2NDlWb3hGP104ZEFrZXhvUks7PzI9T3NRMj1lNFVKbV1iRXR2OmpoLHc4M1dXJFo6fS88'@;
put 'ZC90ejhzWmdLYEU5PyY2L0ZMLmJ7UFV6WGVRKzBPdihuPXNIMkdRTyxbUjoze1J1KzsmfXBfLFlCX2BPMFVQW149YmFBQl85WH1pO2RadUZlRU1ULjVlNjFVbVN7XnFkMWJJT1ReIVlVKVFsLGZqdFMwN0FxUHA4XjpVdno+Wz5uOl99dGhzVXxtK0tqUXdWISEmXy4jR1NdOCJaQngsW2ZzakxX'@;
put 'XVMhMzYkQ200ZTt6QWh+OldIJmFISGs9emxLM0omPkprSCMkSVklTiZiLihIYFFDe3orcCRURWsybXtqVyh1c3hwOClZVDdMZFNQOWdnYSxAVyp0Kl4/KV5OfWwwYUMsWGZOMGtsdFZAU0A6UENFTV8sa31fWDMleyZJTU04T09YV0tPZj4xfCErUjFkSFYve2dGL2ZZfjxlWDBMWHlKaEprW30w'@;
put 'U0Y9UmcuRy5PdWYhfVcxPilHIUojcEMwaWkrQnkrZUVieEpyRUk+VWckNVp+K3ttOnkqOSwlL1ciU0cpcTlBZ2xhcmQ0W29zKXJRT3JFQChjPlZYPz9xUXteV2B4c0A/PzNhbTc8W1VPdy5mfmU+YitVYE9qYDBsJkhUXShoYmdxfVAhYnpZOylXTjJ0QVY3WChbNVMkOnx+cUpPenpRLEdSeytS'@;
put 'RlcyWEloKXleMSpDKUt8V0IlbFpdb3FYQGNURlZuW0FKbz1UMDs6ck1ofVVKJUlveCN2OWo1Wjp6NCh1XjFXIyZMaU5XYGlPcVcsJHwiOyo8UTNhfjNPOztZUH1RfEVtLDlIUTY0YzRiLEppUlFpSX4vd3o6Q15FOjR2USZXNTBWdGhOZCRdYHw6OUddOm1UfTgkSlo+X1NKYDV9V1trIzVXN1Ej'@;
put 'O3VVMV9BbnYuLFFiMj42O1NtNyF6N1V3YXRjI35bNVI4Ti4yaD5FfWg0fXp3ejFmcD8lXl14SlJgJUhLODJSUlh3ezwzSnJvMTZpfEkmUTlrTHMre0BOdCxMWWwvJGxyY2xeJD85QzR8TFdkYWh5YWk4ZFFRZmciRlF7WEgsUk52aGVPO1JzU1BiPjQkOjhGYTFTcTx4TndOTGlEe180fDQuWmV0'@;
put 'UXpjQjM6LDpgQFlvZzRPSm1VMGs7ZHB9VWpTd3VRXnNEemZaYXdsRlp1RipkSilbe3NDPypsVHo2dV5oW3R7aWY5OyUkTFQobWFaYiFaYzR0WE88d2M9fj1dVywsNCVpWjJeb1NhTlAqWTZuVSxjOy51VjJUQWtUSjJYMCZMLDFFfXFSbXZKQGVdLHQ6Z2NtdmYveUZbeVJaU15DKDJGcjBWT3Uq'@;
put 'cX45T1dfZDFlOzAyMERWSH45PztpOjQzXWBoKEtRQEIxZXN0YyRZUzxsI01rd08wJSRba2N1OzRGYlBzLEQ9STRKdFQ0TV9DSlgyNVIxXjBXMDhuSDB2S3VHeyNZOmU+Sm00UCM2NFAvI2lHWygmKille2V5c0o0fChmUiNeNF8oMiNKYnxXcmQlaFYxb1QibCtidTF9YzZ+UXR0eC5Pa0s2K3Jo'@;
put 'TEtPVn5hJHttTnt5OGh9XnkpVyt4JHxwUmQ4MFR2P1kjZFZ0P187T01lajA+dnlbMmpdWSJWLlE8PSNOSDFTRnYxNz5FVV9XKXxTPUgzbSZ0MlM2SVNjLGtkcGkxSj1lUmBHfVQ+RmkhST8rSEVFaiI8Vk1yOjdjfndEQ1VWVl5nUWV1Zj4hMDlWPmtCRiFmMClVYjFQaSRycGEpKElvISxmNyYv'@;
put 'aT1xKDYqe25IaGI2PmE7ZCp4bmhNUjB2PGtoTWhLVEN7UyxPc3I7aktidng+NnxBSTFoNEVtaDh2OVBTJnZoI14mQEt5Li5TQFoqJWw1SChaTypRKUVOTHdOKEBPeit2WnVrZXtIT04yK1V9ZHosWChiJiI+LkZmcj48L1BaWXNNVlF0MW9KV0ovNkliY1JkRUE8R3M+N2Q/diE3NzBLRzdJNFZs'@;
put 'azcjLmF8alJaem8/PGQ6VFE0Z2ksOjJUJGZZSkRXV0xoWGxAczE7X1NuUmJndH5gbCg0MUUmdVJdTi5GPTxaVispZ2FqYSFiUzAvXnY9XyhLUT09Lkw4YGpnczBvXll2XzQ5KGtvV0JKfCVHNVo0ejVYTEpFTkMwUnBqPmFqIzdvWnY9R00wI2IiKG5fY0IvZmdxMzpRJitdai89UkR9QmdVdmIq'@;
put 'bW9DVFpUMTF7Q0NFaz5MNztdQWBrbnBMJHc6IUI6Wys7KitMZGpFen1LW2Z6em9RaUwpRlFDR0ZubklmZmx8SlFUZ1l6dipaLyQmdCxbR2cuYypWP0A0UmFaLjF7YE84eFt2fX5IP0lyMDZYOlZTQD97RlFSfURCMUpAfURYYEdmJCpbSi5ze2oveGBdeTxnQi4uWHZ7SS9GeWV2Rz5ObFo/Xkh4'@;
put 'V2s8KiZOJTo4PmJdLFokJmB0Jl5MPHMqeiZZOltIKmApSmFScCEzN1R8Z09JKEZuZUl5SDc1Y2B1bHhoSV9JJV1nWDhDO0RFIio0WiM+YT9AY2QqKHJrZTU+YHZAW0M/fCQvdHc9UmwoMVghVDc+cUlaUD1DYXxNPjY3aSE0QF53Uz5oVW5EJEZmOW90RSNOVUl+YUwpZiE7RVt0WE4xWlApZVlH'@;
put 'JkdRTHk1NWBAIyFZeW8lNyNVJiV0RC5SM19maF4zO28xLGdNN2MzLClFbkVZbmo7dF5uWGxzazBAWnFAXXsvaV4rI3Y0NSw0XXJgUCsuYC5XUlUxWW9BMVczKnBLXzh4KS5ybTxdPzdtPiRaam0kKHRMUnMhPDUjdUJOPjN2a3llT3I3NltaPStiVm82JkMkVXAlISEwVyhhYi5SVDtETCwjJHNF'@;
put 'OSxgLGU9UCokOj18figibEpgPiVKcFV2SjNCYHF8WClCYThPIXA0K2RnN3xabC4/WmRHXU5sUSZMVW1dYWVbPjlxKzE+SjpNVzs2XUNAeVZ4IVNrTiQ/PWdJVU9KSyE6eVt5TiElZSwoX34zW01BSWBhQVZFTjdrSnUuOEk+JnpRKyVrPChlNzFQfUp7JlNSNjghXzRmJUdtLzA8PTh+I0NdRW5R'@;
put 'd1NvX0M0W0QubHhSNTUiMyhuTVpsPGhdUExMO2t7dzlTTVQxZ3NNJj56dUFySmlzZWlLYUN2WX5BKjw4NUdlJUdgXiFaNE53YFJ9PHM3WiRWMUxjV3JMZXhHXj9gdHNmR3piQG5fYUs2ZUxlKVpMWEhBPzIjYCptVkgyRWAyWXY/WmgkNG4lR3tuWXlda2NRSVYwQXRWOmtQLzk1Snc3aEdaI04l'@;
put 'WDVPbyVYKS4lLEhvKiVLY0Y4VUtVOF1IOklVLE5LW0ljL2FIK2g6NXIhfHB8cyRrd1pzMSg9d0Q3fU9fZn5IZWt5dmckZlBWeFBqOTBvTWQubVhLOl1eVjpdb2U0P2pTSTUuKSpYTyhoIz1nb0Q3eDl7PjQmWz17T3xMbCNXckxmMm0oZm47PEBsRGhWWGNCLGg1TkVYLighVnUyMDk5SlBIV0Jt'@;
put 'QVUvOEt2bSJpTWp4SkAsV3tbRlpoaVVxeihTOEpLPHdKTls7WzZANDd3RXclQno1PiYrI0pMaHtvTnlOPG0zfGNbcmd1aTBCcENrZyZeRHpCczRuP107V3dlYEUpdHp4Ul1WaVlUUCojOGNZbStFVCo9YGZBWD0rPmxWeVZEZ147WGxDb0pLS01gQVEmYig8azVxV00wPCg3dHYkfksvV0JCQHx7'@;
put 'TXZtfW5yNmUpWm1LdyNWO3NVZGwlLjxwO2BObzhVfkQ6Uzh5fkVkUDpWMT8jWUBzNnQ2cHF+a20jMXw+enl9XmVkTV1sakE6am5MMCZDJH5FVmd3RjRbZm95KUI5XmE1bixaZ2EyJU5zJVlkfnQpN1o1PV13JUA3dythfWlLLl1+bD5WJGtwNn1CdXg7LFF0N0p8ZzdmNSFyez5Sc2d5ZnVMWkx3'@;
put 'VjhVPzFCcUJ0eixnJUJjWkh4PFtPTTYuT3ZIbWE3N1Upd01RZzFMek5ANXlFY2ZuL0lOPn1jJE9kYnQoPVVbKz1GZm9NZUwxJFJWd29MdyosPXdlYzQrY09EdXV8IXU5TFRSPyh3KEo5PlgpSiNvZDpsN1oxIzYiKUpyel1je14vLDtxS2FlQV9RVTcqcE0mLH1ALyUmdlduOVt5R3smL1FWNSx5'@;
put 'TDFNUm5II3B+NjcsLDZhLiU0X2lHW3RtblFTU2BvYlFpK18xYFZqUCtaLnQwXVNNQVMoRSpWUlUoUV0kPHtyay46MSF7Q1BrKWg1YmxtNCFBUWsycyNzNmZuK0BpRmpdXl1oX2FkOStsLyhkIkJ7PS8jXm5PUSF+PU1DRlsiVD9QeDBLYzJ2UXJJYXtJKG9AVU0/Km1tZUolenFCLzw7OmcmbztJ'@;
put 'Z2VKaEApR05WWXQ4fGUrdyF2OGNHXUg7LnpMNktyamFYXjA/KmFCWEBJcVhEfDVSb0g/KVd1KWZBeFpfOlssPl5gdGdSUypOdikwJkwhS3l6K1tuXVt5R0lQWzJXUnVuMn1XUkY5RUtOZjspUkhhSjh1Y1Uyd0dFV31aLCtwQiU/b0NCJkp4NlA1Qm0wW3N6cTNJdkxwITM4KUxsbVRARl8ud09K'@;
put 'WmUwW107IX5XRkluKEBfNHNqRilLZyR9TnVdS0FPcWF5Jl5DamBCRT4wTHY6eVhHNCskc0BVRGNxPmwqWkVERUVUODxDVVVqYjdLTUZicFZLPktpJn1BOS85QF1wVyYiW1tTUCt2dFZtZGgwIz9zdlV8aH04VGA6QGRmWWVlej45fmNNPT8yVjR5aVEuKnRzOkIqYj9INzZ1VU9IQkg1VGRQJnos'@;
put 'cm4qUFR7QjNre1FDOlYlMHpEaFdgez96U2ZkPlRXcVtjRSJdQE1tNEcxXzc1K3V9e2glYFJ6N0glRWdFRU5qSFgwIW5aTFJEKnZqfWZzeXJKYlZTO3FkRHZ7N1s6d1hOSmxlSUh8SUdUQHBRXzM5XjRJaExjeT0uIT0oRDtdODIrPzczViU/QyNwK0VTSWd0V1JKLzxdQkJXOS84PSg0UVRRNnRD'@;
put 'MGluN1ZARUIqMDgkP3I7OWxeSno+PiZHZGdzV1E5bDFTPEFGTkQ6MDBgXkoiIXlkSXpqVW1HdXB3aj4kN01YdnElUHl0U3Z0LGdAYnBAXiM0aUtCYV9WYjFablpDcDlwLHdUQEZLZ1RnZiM1YzopVkpLOGZrYillKGkpY15jekcqI0daVmYkYkVNfnlsMn04PHY9P25tS1RseVN1VDsqPy5yKmVk'@;
put 'MXJOUVRXUHR3TCtdZ2E6KUJILGBFIihAXzwsOk55XUBBe3lyJDtwKXVFZGxjLDxybTc/MUlUM0kxTS9fPSpQPml7cSU6XltbeXYlWHBOcVIyPFVPYyExQ3AxPWxyRS5wQEV1dUIrPF9rcUY/JU5IPi9TKnw6P3lSP1EuJS93bnlVNV1DSVNmX25jXldJJjc1JHJWJjZyIWpSUT15UzZIckpZSjpy'@;
put 'eV9MVFQrKzhMbmhWPS9FSF4zWDFwQ1JjQ0JhcjBAXkM8RSZmUXBsQ0NnTXdSWiFbbmEmJCpyJlAuPUhyUTZhUWtHRnRWcnZRQUdHR1M2S31rRHF8dF9fck9PeUEzNzdxbi9ZcD9LPnJIOWp9LFQ8JTw3VWRxfnErYlA2Zih5K3RJM25ncDhIbXx3I2hKcDI3VGJIcHpOPUpRd1F0Yk00N21WSSM7'@;
put 'JHY/Uy88JX0kSVN4eEtEemt+OzJFP3QuQyJ9NTBzI255cSU1XlRxJncsfCM4KjVZZTx9JS5ic2tZPHlyTlh2aTkxPSozM0VtKEk4UUpkYip9Nz9LVmxWRGdvc1BKfXlaKHxQV3FTbUQ7eiRrbmtBS0I/K3UqUWhlV3ElPjxXdWJ1eVlUW09bQnY2a2NFXV8sbXpuSEZdWSZfckJ0JnZqVER+aUtT'@;
put 'VmNWel19OUoxMWtNNU09JD8yQUxBV311Oig6OSQ6d1ohXS92QzpAfiZsekN2M10peFsxX0JCOHZKckMiYyxWN2cxczoycEdDcUc/I2BQbStbNVlNYz1nb1t6cjdSJGJ8XWVBUyJqJFhYQlg2NFhtWS9tJGdDXXFDfjM4JWBQZSVSLz9NNn17ckxNJXx0Pz5QdDZ8MUlwSmpeJVRrJmBucXBXcUk+'@;
put 'PjFtUGZNaFtlPWNbW1ozPX02OChQW0ZtO2w3W3J5KXh7a0dEQ0pgLktjUUooTXVVKUs5bFQpLChsZyshPElwel1GSEwjKXRmNjV6TFMsWC9WQ2xQSDVqN2YxUFdxbTNsW2xqbDpJYFJjQiZzQmIyc0xrL1oySXdlOmVELCJLflQ2aTNUKTQ4UCI2UXxHOGBFZSFlSzYsIi9YI241fGZGMldUb05Z'@;
put 'fEguQj5fdiRWXjhqQFpleVpAQnxWP3NUY2koS3VrXyNKb1tnT29CZil4QSwkeilYZSFMLn1Ne1Y5I3lzJC8uUmZOKSQldUBfKCR4a0FTZnhtQEMocnJdbmEwU0cySDYzbkU5KVppZXRVL1A2MT02Uj5FeXNxfFd+QT0wOENqcHVJJnp0JmwqPTFnZW1WPHZXI3ZqejtuXy5jfXspUzY6T30veWlS'@;
put 'NVlQQnFUJVNjP3V+JCNkJDlQSHRJOzVYIiFgXUJMNWQ6TlNHI3MraH1BckVzJGU6a0ZyeTYufmpJTnkzcllGSihwKW8vPGk0TWBaNUBddHRoYWBBey59ZmQsRmIlZGVHWW8iZjBYSUMuUGl3U2NbUzglRi9dOCo9ZXF6UU1ETWtKM3dIeU5FQllJY2dYPkw7Rz8yUmZsY2QvR2JkSjRlbisqMVIu'@;
put 'bH1mPGFXMmMoa0dKdEByenJHXWo1RSU9WTdSWypXTXtST3g8WHE2YXAqXTE5eGg7K3woPjlHaWNtY2pPVGRrRj5ZIUZKZyRDS0NSVHBocEFCQC5LemV8UVgmTUVYJEReKUR2Z0hfUmg/cEZ2YU1rZy4jVD42JFZkS1dbUHJqXm98KExuPUI6Vl5wdTR2Q2ZUW10/YVYkeltCO2c7JkohU1I7dyJr'@;
put 'V25WQHFYZD5xWV9EaSNDPl14QC9sKyNJVHxQdzhgfSpJfmVXaDdTZVpFT15aaVZXZHMoZTdIZTghOCt0VFU6N0VTS2FaW3ZgZjUpJE0hJktPJEE8Im0wTV8iNC5ifVV7SGZrMHg1NnhlOyliKEd9XW86UV0kT0dkQHV0PHFJOmErY1B3XixiNzN6M2w5Ui9HSUElRXxiUytnbyoseXFqJCVFVSlV'@;
put 'aE84PiIiZV4lUipqMko/UWVwVzwsUi5SWFtKRD44I2hiaEF6YiNZQDA+TWIjdz9kJT1DZ18+b1t6Ok55Lk5sdGdZP2BOa3Queml7RXNxNypVNnkjVVFAdDttIUoiSUZUdWpuTGBGOD05OypXMjE7T1pyWX1vUl4jZmRySExGI3dhYTxENUt9KEwqNU5bK2RodTlhKFlSa3FTNi9SQnYhcHsiITM6'@;
put 'dzUsb2hDKG1acDFtU3slQEIpY2dbV1hFWVBjOzpZKztPa0tdS317VXtgTVAkMFVPVnpFeUBZPGpUOHx8IThZLHZKSXI0KkpKZz12bU4rbSl4bEN9b1c8OjV+K1JqdTY3cHw9YSlBRVVvfE5vdj4/TmYva3IqQjFtQzZrSV1PPFJaaWhGNlI0VVVKfW5mdk56Oy81Xit7Mn5OdzNsIzRnPi4mR3xJ'@;
put 'QklzeDoxflgmdzZKVD9iSHJyRXRBNW99LCQ+JEBoRzVPRzJhcCVLVW1xZy9BdG0qeWFfKSQweXQlIjA/QC8ibzg1JGpdIXsvMFApJlsoe1ZyZGhSMjlBTWZqLmskeEFEb0Z2NWdbcUA9eWxaOkk0bHIrQkZXdyo3eFtVNyopc1VwLjE2d21kckdmT0dlLyV+dUVVNmNTazZBQSlOLyJsPUdnLjta'@;
put 'NU9ZZm5BKnZ9dnRQZkdWYyQqfjBKYUp8RWNGRiM4ZVFtQXA9ejtbXSlOMiElL2FjRWV9YzxKV1ZfU2gifDwqZTNdYUBpUG0lZ21PKzlpIU4xbmFsNUxeeX13I0JhS09xfmhHfU5PQ30rQ1s1NmtNa3AyclBFV3c+bS84c1Y9QnlDZUNmJUxyKEs/Yzt1Li46dXB6e21DXWZRKmhbeltfcSlsZ2Is'@;
put 'ZWwzKytvJSZ2K313RG5HKEx7e2F4KVU+VFZNaG1oZzxNSEU2NVVzRV94LltIJipKaUFNKUJEQSZkd01keHdjXV1mNWMsYSQ1UkJXcWkuZGYuVyhNJmU2Xj53QltNX2RCSSlRYXNNbXohfTJUdUw2JU0lOjczaXJNNEVMP0VfTW1NS2QuNn4+JDwpcypHOFRpfl9CKS4kTTNEZW1vbz53X2kmQSgr'@;
put 'aSIsS0tjUShTIz1kLyw+QDtnL2dHR3FHWTMoaGNvQEVjT248aHc0bE9LKzFSYjtlWit4VHFfKSNFQyssejd0THU6W3RJIl9+ayhZeDR6VGgjIUIkeiNFVCRNTntwJk57ek9aeWVTT0k9YXNbTXc1JCpodEJHdSQlVH1dTW1WV0RwZyQkSiViNkl3P3dFPi89UCVxTDB5bH1iOSlCZ2ZWUUwyUChI'@;
put 'PmVRYCE7Pys7cmk/LDFNYmUyVlAucWFscnc2NyZdT0lUNyxVaXElOm4vSFI7QFZEckl8a1QuLixhYyhQP3hDL2FUdy4jKkxZY2wwIllqSHZUbzo7flJae2RDLmVZWVgyVCZWJUNQOVM+cSszJl0hfjsoPjtSIWF4fTszITVESzxddilFdW5VWl9sVTVMKmlgfXQwP2psXyk/WFQlYDJ9OXxBQjl3'@;
put 'JHEyKjdzMSJHJk55ODQ7byMpLCgxY0ZWOVMucmlGWGtYXzJkeFcoZ1NiOXU0RGFHZ09JMmkuaixqTjlsNzApQE1RfjdzNyR4SyVFXjd6ZTdBK3tFK01jaHx6dDc6bHt2SXR6OiZOZHdycGt9KF1hSk1qaTJ+ZGw0aUReNiosKyFTfGZhfEZpMyEhLj58O2VxeTAxWTx3K0JGMnN7MCVQXmp9Wklu'@;
put 'YkNsVkJYQWFSa2MkN2EsQyEmV2RfLlU/Kn4mUk4/STg+K001IlRbQikwPyZ2ZGJ9Q35LOlVNMlUseWs5XTU9bFpSOko8SC52dUN0bGF0NH5KTV5iVWFhbSp4UUJOZSwoIih1PXlKJWkwen5RUlFPIndJeXcvTG9nVDd6aW4oI1MhK1R+b0g2L29gZX1CUU1yYE1XNWdUcVswaVooTl50MTFPNnZe'@;
put 'QHJodlFeUldUPCVmSHUsQGtYPmVNXmR6czZBa05TPz19R1RdYHMvZUM8LG9NalQ0KSJnZWRLUE9hTE9oTXM6SjwhOCNQV1g/PllfLDswOHNHZ28kMT1KOm1sWF5OQ0prODdKak48dGdtOFNjLzp0Ml9GUVFtLCxTVnRTLnloWVpbM2QxezRKOyk8WWE1JWRQbmM3OjdPcyxaVW40S35bWWdwfD1E'@;
put 'N3QmLC49fjx3LmhfSkxKeTBaPSJuVUVAdT51YTZndzpII0NlfUFxUnB8Wj47fEkzLyFyPXg3WDEwMHwjRWJmWmBgOylvMl9uQlp0LHxqeityI1o2YlAsSCZ6RUBVbmRXZX5gN1gkfCRzWWY/e24/b2RIIloodFV7fXAoPmYvYH16Iyw3JE00VkpPVVRPKmdjLC8hTzdgJWNpU3MpTUxFPUUqUjxL'@;
put 'Yj4sZUAvfDF4QzFtbmJme3VfTDslXz9uUnBzQzVaSmZiV090fiEmd3pPWyUlIyZhIzshOClFJXR+Pl1bPU1qTncyNUlvUXhWMzhhVmNHPX1UW0JdYXN5U1BoZSg9NUtTQStMb2I3e00vOFU7dW53NyRjPGliITsyNH19fl8zQF89O3hjW2ZacUJ+MnpXNWYzUFIuITFUQHRnKXVfU2U6ektTXS4m'@;
put 'ey54QGwmPW82LisrYltaI2Jhck1AZkhwKEU6e0VzbUBsRGRPI0tTd0VgR2xhWW5vRTpRdHpDTCwzfGFYSHkjKWs4KWA9IlNgL1hIJGJiOC5XSWZnImFoQHY0cj9NfV0xNjBgXk1PTT5Fbmd4dCgiTGVHenElJmA+WWZvJXM9JCFBR1ZudktbZH5ab2VVKT87ezpMYmZSL2A9USNUN0B1I1h1eHo6'@;
put 'ZlZ4TDJaN1ZOPmVVbjFLSiF4Kng7fG04TWpmR2FuSTdwKXJDQDc1RWBVb14pS2w0OmFBViFbb1U8REd+MVVvazEreVQwbFNsV3dsVi8vT2U1P04yTXI5SiV1a0NQeGwzUltRdysyeUhyMSImVEc5empHXlQmLE9zQSJTY28jMkBkWCUvLEVuVnU6TmpMflhxTWpaR31OZ1UoSlpRJWkleTluaX1j'@;
put 'Mk5yV29OWXBDJlhIK0RBS0lmZ2BlZDArb1VqOU1IblsvVEVRJEJnSTAhMHM+PlpRbk0+Z3Z3ODpPfjtRJWZheVVdQnRoUTYqJXAsb2Y3Jk8zZSVEIlhkc095ey8laHl0VHR2P1QxaTo8VSY5eEhTezg6elEvZmJwc0kpeVpYWV1JS0R0UkpSaz1KKjciUmMlL24xQyRnSVZ2T0IwLixRS3UuVXN+'@;
put 'fTVUV1cyVW9+aiJhdERtbDFsK0dFakNucG9GcElIWDAwdjVRVUpjYGIiZ3RwMXVSMiFQQDxXYDJ0MXtffXpoRXNqY3JuYm0xQkFzXi94JSI7bS9GZnE3cXpBVS81SUUyaWZZandLR21NV1J6NTQxLi42KVklQSRzYUJhek0yTjBVbmgob2VeOmk1SWNrLHltWH1IeSF8N0RTOFFUXX1odUpieUlg'@;
put 'XUxpbS5HUTluWXZFQSFwNU95UVlpYnByKV87VWxYXy41dSJSL3JlSSt+VnxZJWk4XXd8Z34yQSZvd2tpQCFBZEJibGwxYmAxbTUvPC4+PVtPRms2ajJ+N0Ewai9mbVEzXmNvWEs4eGs7Q1BmWXpka1FwKytqdE9WYiM4Zzlffko2NzN8Z1JoNUY1QCU5XVh8Mjt5ezdbW0BHNTU4WVB8NCNzRl8s'@;
put 'PCsvbyFuTHp0ajh8YU9ee3hUMG9Hb2tRVlljPXhBQUlITW5taDNiIlcobWFOOl4pODRmQFc4blgjYTM2VC9xVVE7TSVXSy9QM1kkVl9GXngoLkx1UyNSRGxbOGY1VEt4c1gzMEtVOVgkYV8iYGFvIkQ7YHhkU1VEcU81QXxHSkxkRzE0K3Z8eExnTlBDOVI6Z3JwM3tLPkI5Y35fU0VHSWRKQDss'@;
put 'OzZLdjFRSSZyZFE6ZE5uRT1HQD5nUDxYOX01dSJBK1QoRSNiMjxUSTJOZl4vTVFia3tjbmZzSlQlQXc3W2FiU31RVmV5QyMudFtad3xFa0pzM21fdXVfeks8Xnl8WStwTCsqfFdYNXVvXlR3dHkuajJxL2FwbW1lJGp6Ul4yZ3suMGFRelYsXls4MGNZRDhoeSxPVS9LLHxaZno4X2FgSkFfdnF8'@;
put 'MTBoX1JkPEwka3VZUjArRXhdPytqMUFbdn5UIyNqVC5JfEhzeS88Uy4iNz54Zzt5V0JfKUxBfWt0T2ZFPiRZYW9GTCJYOF5xWDR5WCtgI0p5Yl5lNmxDZVd4VDwjajIxOCF5PXsic3Evc0JtR2BRJD9ONl8jMkYwaV1MOC4ha3d2YXpBKF1zezVRQkp6YjhgOUQwdms6MEJbLD99UGwwUkBFYVMz'@;
put 'UlBvczErRm98Xm07NC9dJD0oOTYwbW13VihyPnRdb0kybkY9PSZ8Ii5ScSgsT3BlO1NVMkFXdUp+JX5EK1dSV19wU1d1X0JKfDQ9dHJnOEdLKkVxfW8+cygpYEEycG18U1BAVXc6WzYiZ2AjMUJpaGV8KHRgfEtTOzU2YWwpYHouezowQjBKQz5DWkoiSHxuTU1rI3Rkc3leOFluUU43bX1iUSRz'@;
put 'IXdXWkZCc3tIU19MMl1xKml1ZTN9PmJ6d3U7SHBPaHYiRmM5NDltWVQ3dywrbEhbJSl8UmkrfF9AMHlfayt1NXY+OXdobilTZzg8fX5LTyVsUSx4YUpxfkdbfmk6RzFZRHJBbGlMXXRfPXQyXTo8elN2bSlGVClReGo+UiFhNE5dKyxCSjpUOEIsS2BmWWx9SHNbeHZpXXBILDFgUSpkJWZQQ3Ng'@;
put 'SGRTbGxoUz5XY2ZKP2ZBam9ifURMK2N+KjZxaFZjfCs+T05pVWdgQ3l5Q2tNMEQ0L356SFdGblN8M1FhVDVPUk5peWZxXTgrOV4mOD5gO30ibnFLSitId1VjeSlyRyhQQSM7ZikqZlZ6W2A/bDpNPzlMWFY9R0dZKmU7ZHxuOEV+Yyo8c1A1KUVzeTxIZVJnOWRtJTtyYn55dykxcSpAKl9ZSWQs'@;
put 'RGAzWjYrcjh9TFQ4OGpicVIsVnliWyxQRGsmZ3JGeUNsdGxET0ZKaTMwcjhdZHRvfWUyV00jMGFNQ0ooPU5QXX5HWD1acGc2TWV7YjxPW2dYPWJnR192P3ZTJmdaWi5YMGUjfCFeejhpPDJyL2olbXBTcTdHOG9MUjNYO2xSYEhRUldQKSY/Wn1lPndzW19HW19rLjFOa151SW5iWCo1YzIoZSVM'@;
put 'SSFITzhtRilxTEQ2U3I8NTV1elFSPE5JRGVwRTc+K3F3Tk59OkVMYDx4aCxmNkRGQ1o1X3h3U3I6NTV7MCkoXVhJOUhyXSlRMUh0WzYzdjQ8cUtQKnc9RjpbXkRLSU15ZWQoLFdzUihHL2hgUDs6bWhweFslKypDUX5BMVJdNjBYOFh6Ny5femlzX21EJmdRV31ARyw9TlllX00lPjo3aXx2M0RJ'@;
put 'XmNKUWEkeGtUQV4oR1U+UWJ0ZzZtbmVJcHN8YipNUXg+QHZIciskcXIwQDVVNHZgezxaOGh6aTUhd3o+Tj51NGYuWz5vMVUzW085aV86Okk2QlpldiFMc1lQPCNdR1VEYWBbZUx0VDFYKlJoP3F2RnE5d21LTEwrWyU9flV4MmJ2ZmlXSDViY1FRUzNNX31vSDRgJSlkKG0zcyRRW1YsU3w6QnJ2'@;
put 'MDpnbjg3SUdiRCJ2XkR2IT9BZjxhZTJuMz9tQ2xzYjVAUzVMQyolOjB1Qil5STp7YSVeQ2w2d0hpQ2p9eihgVi8/fWN4cz1RTV9oMEUjcGRYcCVfU0wrcVImOnAsWmlOeDgjOXg8flckRjRtXzAhP1JXWiMiM1gld3xnKyVmVlMlKSJ6bSRwPFt7Uj1sYz15cVlJYXgudlJUVUBUdEE2Nz52XUQo'@;
put 'OCgofDFlUDJAV2J0O2Bid05oWXtFPHRtRFdWeTBJJClvSDJiU2t6MUY+XUdWSVslOXQoTHFVMD56QkRAIWR9bis5VmN3KTxdL1AkeCIya0JGPzhxK1RYPlh9OTdaezFuazNuWVZaczxXazghTmUwaXRYOTIzSi5SS2owcX4pdH1kOixrSDJRUiRGNDN4fG0iTHRqOiFZeWQ7UjI1QjBMISFeTjxZ'@;
put 'Oz1HKiR4ckNUOzt5Lnl+amZVJSRGeyk+el9PNFRJKmNgUnE0ImhuUSZ3RnJ+NndvaSFqS1g9SEZ7dlNfJiw0YHZHIygiSWhIZF5mOkspfnhieTh7OmZyO1VnK09nPFNlPVFWMX5ON11oZSQ9X3p0Ril5W3chJTZPdHpfeCl1PHN9Unh2VVFoKWt8Y2piQnVKOD1QKF59UCMoK2JaUl5kQF1kKmRh'@;
put 'Iz5ud2tVYkU3OlhlREomYTU7djZzUkluaHhIOGVXZW5WYkBoWmB5ZjFeRnN9MG0zd3NtaGdDIyI+PFVVKHEhTjhuNDFJaSlyTVguIUdfeV09UDYqNVRnVT0/dzJlXVtjRDZzRTgpPDs3RkEkUjpUMlRDOilWXmMzND9+O1V2PTdUcHRbOTRjLkBGNno2aSgzPD93WEUyR2Jxfm5aQE1tZCxtYm1w'@;
put 'VyNTcHNrYDBLKXNgITQ3S2M6d2QyNnkobVNKS0lScSgvU3UvWiN+fVZyMDxRRTIwVUs0YXNVRiV3Tm55LkVpMF1QbUM7IzNfcU0oPUxiZV1TOElqXTl3KUhCJEtTbSwxUkM+cUB+XzlKTktZN3xdNHFNKkpAPj18WlF9K2MjOWA/NUZAeyRzeTBQZUhJOklXNHc6LzR1NG1WYDddL3R4fnxldyxY'@;
put 'eDc7MTRlNXxJJlRDKzAuVU0yQixKZTt1TjN9XmRZQ0UsZnUiVEl0TmRbQClMfXlSRHlaXW84N0E/QXMjcEpVVF5Ha0IzeVZPX0BgZk5ATDQlVC83OSwlX3xoWENRakpTPEg7dmBpbWJ2RTlxMCtMW3dgKWVHdkZ8cmYzZHdZaTw2WXtFeFJmamF8K2hINVg0Iz89L3IjdCpsPyp7Q2tWaV1QQXlK'@;
put 'c1omQj4/NEYpXkE8OyomajFUOXc7Jjp2eDNwOlJ3dXB6I01ETDxaekFMMlJvWV9LdjhoTSQ8WnNHLDV1MHU/dm9Xc3t9Iz9ZUFFXJHJ4bjJqODUiKGRrOlo1OyxORkpEblEpT29XIk1oQUE3VD9qdDtDWkpqbnYkdGc/fXcjRHNxcV51ImVpeUNLS3E6bz84di98bCtJXXt5Uk5qPj8zOVkhZmI+'@;
put 'cGErUW4vczJubFoqfHkrLE8haC8mL29He1ZEVThffGFLPWVfSlJjSHplNSV3Om9tS0E3fUB0UWheRGJXN3ZAX2tzTVExdHxtV1toQ05EPTVDQVReNlMmI1lFPVlZXnBpTlAwXVQsdVBSRSZwIzQ6KTptNilYZnxsKHBqT3VQWit3RylOS20hc1VhKDBBJGB6W0pGcHUrazpgJElLSl0zTyY1LkpO'@;
put 'KmAjc3w3MiY1O1Fvcko2RUIqITdDOXkxZTt+cCQyUiE9IWkudilgT0FtN3QlY3RZa0c8byJGNzU3Y1FNKDI4ZTppSXJiJFRyfmdWTHpgdjgqJkk1OWhoM0oqSGkjZi5lPTRXfVB3WFldKEQmXUB9dz5+NUVITHc2cTgjQiVVUFs6Uzd4aGU2OEUkSjI8X2RQJU5ALzJ7fUBzQjVyYnksYTg1NS5E'@;
put 'SiMmeWZhWiNfQEsyXVRXdnJ9VkxmUU4jQl17JnNkQiojLDReTHJQU2RFZlpxckdwSkFCNk0hUSMmc1JFNSF8WU5KSGVJemo9dXJpLDZXMCwvK0kmb1NYeyxOcVhwLzZ6JVBIKjhJTjs9WVNwen5zOW5RfVpGUDUqbDt2TDlwMiZWISxzRnJqIU0haz5WdCJlcEB1MltFcjxFR19IYDopd3c9Nj5O'@;
put 'bzxOcDNHW2QmW25deCMrJU46W2BUdEtmOT9tJktpJkMwWEs6Vm5BaHVgd3wqVX53XVBTaUgjPSFjJnIjWDsrazZRUUkyYl1ELGwpLEdLRU87XT5obFMvSHRmbDEmKzV5V31wVU49Oj0xN3MocURtNnVNJGAkYzQlRXhfTVB4JUAkfmkpMTouXzJDUUMrU0QrfEU/azYkZFl+Yi9peTg6ey5PWHUk'@;
put 'dDA8Pmh2OTBkSS8oWzdzfiVaP346PXdIbUx4Kz0ifHtSPnsrbDo/QjpaJXl1ampgJnw4YEh5Xig0T3Bsc2Yxb31pW1N1eDUzTnNVOEBmM20xLnBeMChpSUBIQChMdTo7N098XSs1Nnl3SD82c2hWXjtPYStNcjhzSEJKWSlvRDkjbjBWNUBKTkIoSG9FOitFOmVadDRTQ3lTOFo1bEwyO3VmUE4h'@;
put 'bExZWzgsQzJ7MTFBdFZeXjZ8Sl1iW14oUUBHVmVeSjc/ZTUkYWcwJj02P1JtWyRAOS51IiNvVm5QLDJFPGwmNSNgSGt9Ylp9dHdaay51fCFHSzpmWUxYLntTWzA0bVMuUUFjPEJmZlMpWV0rbmNDTTdEezJmXj5+VWtEUUxvQ3p4fkB8d08kWFhdJl8lSnVBb0siODwkO3YhZiljTVZBZiU3TH4j'@;
put 'e05yeS5UNTN6UDtaPlo8NksvISJEfjMxSGVHL1FUbj9TXl5VLER3U2s4e1ZQTyVyKVNkN1t5VDJmIT5EPSNjMFA1YUk/KnA+amMlUlNaMlQmKXdhMV82aik0Ok49U19IQE9jMHRob0d+Sit8fWI+cXZSeFQidFdPcSljX2NzQ102JCw1P0VgbEw4Q2lMQiJ0ZWVgbk1Zc29+JXlgOVoiJWg1TXQp'@;
put 'ZClpRDkxelpjWWRIUHNxUnN0USthSSJifndmd1txKVFnKC4yYHsqYnx5WFBKeHdsWl9mQmIyNCJleGtUMUEwfXoubzdVY0xnZkxrO2IvTio6Rmt9S2JQWzk+WmNYbjpaN2w+ZShXYlNgPGBeTHFLfE1kKXtnR3o7UkZ7K1k3blRvIXlCI2ZYJkJZcC9KVk81aGcwUzhyXjNWLHQuUitUbipkWTxI'@;
put 'fG0uQlZednBaUC9YIXttQyJLWnBiLDt0QTEhNSEuZFhsRjF3RHFRL1lRKGhRdjJdOEM6UiQrc2BufXYpVy9jOW5zaE1gODlyRU5uIiI6RSNSKFdjOWlFJjVgP0FBQmxXKEUre3VpK0I3YmF2SUlaQTxkPnpSKkkuOS8lXUJLNzNAOG55WCJGK3tMVGRAMGZQSGlUSj4+QHQ2an0weDEpc0xAfGkl'@;
put 'cko0Nj8ifXtVWU1hOTozQ1ksbyNxckxNUmglMVl4ZVlvcDhYN00uOVQzcERkWUNXaHx3fT9wZWZfR0liYkg2X0QyPWI/VEFlTUwyQHB0QCxubyQvK3JwSEw1Kig9UWF2LixlVEZMOXdjI2Q+VWw9QztkTClNayhaPTZUWTBKSEFgMTpxN0d4I0RYNEU1RWh9YkFMYEN9ZE1dczlAKihwSmI0LGQp'@;
put 'Wn44MXY1PkB4bF9jNWY/RiVKOWJ5MVlDZkNnaExxaVReImxjYD1sJSsjR0M6JERWWlJbP0xaIW4ydnxwYmV6SlddfmAkK091OiZqWVZfMzBhZ2N4W29AWmBVYVJTQklXRFEpOCthRy4wNj1uNjMrJXxzP2BAPy80Kl8leUJYTDdIU1UwfG0wKXMsRnZVMHpVUzh0OStJeD9eIV5qO1Q+R2NkQH1X'@;
put 'fE9SfEx3SEVjaWBdTTtuL0YsfXk5cGNTS1UyR1thbjdyOSMoZTEsdC42X3shW35nNTpDdyM7Yjx0c202SGlKJHFvOipEPHRbMXs1VD1XImhtbWw6K2M+amlVMCZaa2glZiN3cGp1SSZOdGtlVmJlVHBMeHojfi9JbnBgPTtQWmJbcWxlSkIqK15LUEtTZjo8Vys3RGEuL28hc1pRTmBVZnlIbWhn'@;
put 'WiwqaTw1Qy9fbFVAMGU/a0FKbjFpPkUkPl0pSi5DWHRBbmJCd1J6S3ZoUTsvM2tOMF41YSRJcXdxNSVMVSooUWtUI156LEh9cXFfXlspZClnIipATXI0N2FUYVEoJk8/Qi9fcHRiU2wrUXlVSS5aUGcxd3Ekfk1ZeVtvbmx4dGpsczk7YTxXPmdfVz88K3U4OlMmU0thKSwjUyQkKmw5NnNGe1ZR'@;
put 'KnlQMnFjVHl5WGxyYkU9VWhmfng8Q2pKUVkiND9OUn5DSUc5JD5wUGtJQ3pUWzpHS2FDKV1aXzwkbDZke0x0OXV2LkpONiQ6M0wuKHV9fXg0KysmfW9eaiEoQVV7WkIjbkhkYkF1KVBFcmVPWmFTWTRxSy5PLzdbVUUrKTpPX2MwVEMmcmxBJmpQT2htQG1vN1VZbVE8S1J5QmJidU9INGBKQVgm'@;
put 'XVFvIlN4dSVtTmVXIUJUQS98cmdZSDJHYUUhR0BlV1hHU2ArZDtUQ3hPYjNnWSg0bTFreVQqR1U4RSVsR0skanluXWRUVDtpUD9DXWpBdSxNNGtMbmhgfEVAV1R1UF9sYChXW0QhIS4ibHwibnF7clg0ayFXWzxaM29WVnlAI1UlY0AyNCtwaURnUT9YQW9OLFEzPW90cHMvKChnWVo0V0IjT3FX'@;
put 'ImBkNDxXOmZIOGtPQDN0IVVvaj00aCokaDJDZTQ8MllLViMqOGQmaC5eRjVMRFNSemNuWUZhTCgpTVtJMDV9Y1dobkNta3BNRUNvdV55V0d7IVZOIml2e1AlZUtAfDQhe1FPMVZRPTloc0U0Wm0xZy9eTy4wRGdAd0dUclN7QlRfQzohaEc+KnxFalJpPT9CbVc6eE1nKlVUUjo/L2kzL2xJWVdn'@;
put 'fT8ldSt4WSFjTWN0MiZQImoiNHYrY0w9enRbakxhTWRLRH4ubVFDTkNJclI0a3tFcSkzNDB+SypubXRIciReRVg2SVdEKlZxc2pFVGAyYVdSLzA3bVVofHtRMUkhT2spNTZGeUQ9ZjxLckNpZ0ZyTixZY0whOXZedGlTfmo6SmBkZSlJLnZ1NUVEWVYvLFpheFA+JTY2ejhhZHgxbSE1YCJUND1v'@;
put 'KjhxaV40L0J4dlZFaCNtZkVpNmZeT0w/Vn0rRGRJOE0scFphMHoqSCRbbkU1Nig0NmNYWFRrMW4lWUlEdDdDWmkqdDlVRVRBKmBVNk0qY1RLflJqIWs+U0whR1pOPSxIOlQmWH5IRlJlQGdfbzJFWT1aTEp5JUR9ckIsaGVONlJJbEsmZ1pubCJQTko2SmUsV0tCM04uZFg7cmtdYGFPfksmRDJt'@;
put 'fFh2fU1mKm5MOGYlYVpRNmhuQEN3dWtHaUVEa1pMOGhzLFIrUTBQXyVdWW9CMyViXnZWS0N9M0JiV3YxOnFsQl0uM1E4L0x1LFtEe3FKOUVOXyhdZSgyalpNYFMwLy8vaipfXnBUJGxAcmIlcHI+eVNeOklWZH46QGY0NDgsQzFTUyRNQHd2Lk5OV2cyej5sYGI1en1CKVpweyV8bDxESFopJUo+'@;
put 'OHddRU92NC55dF5WIng6P3N8UlZkVD0sb3h2OWlKPjp4KXUsc1tzPyJ7am8uQ3BXUyZZNUcqNF89WyQ6I3NhfkwzQFEzcjxgPCxvVUhiWHIodls2OW5xNGRHfnxDY0pRXnFvfEAobzJkci44dTMjKzFiYjhIc3gkOCQrSyRFe2kwb1lZU0BQe0A2dzFINTw2dyFQRD9jXmNbOzZRczUhWDZCTHhk'@;
put 'OjRVcVt5REV3Kj14IjJVIjw1ay5APjpaV3V5LCldRl9SVSRLcGw8Ylt2dExqRFZEOzFIbk1kL2QvMyY0LFc4fmhjO01uIVNMOiUmZGBCTyUuIjhqS29pT3hCZGQmZnpqdkJ0TFJJQT9Pa0tAY0A5TT9QdWtabD5LdT0wTWAlcTtOcFgqZjlSWChbb101cH1aRHIrZT1YXzQ4I1gsQXltSmBmdkdY'@;
put 'bTtIIn4jWTJKe1ojOCo1QHNDd3k3dTg1OThMUUdJe2ZxVGF3IXQoTigrZnBUPFt2aVs2KzRQW2k6ZEpidERSQSEvQjQud3tYfnkkX2Y4Zy57XnE0InkjJTUjQCQuaDduKkM0IXFGYDp2MDsuWEp2dCs1ZVQ6Pnw8aG9ISjtwbyZgL0kxSyFZS11fY3ZyMHFkKFtyUVZie3l7NC9bTiFvLz1CVmor'@;
put 'V0lLOSpyZyl0SHU6WzV0VmZzNHFvW1tDVURHaik4VSZVJjtTR3FzLlRkKXp8WDh+QjwhUjNJPDIoRUIoVWtyLzx0VCV1eHNqW2BdZiYhXktLQlR1PCRbXzcvUnFSMFl+eihxU3dafTBkenF3MFt9Ol05VlBrZEs7dUBJdDYxKilDbU5gZ3hCKy5lXjBSbWFwbklbODFJJk1HdVIsUSl8JktEWXNJ'@;
put 'PS90Yl1NPmZvZjU/KSI+VEssRHZxUHgpOk9OJmVoeG4kQCxufk5rcFE/TmZ7TkxKeHV2O2dWTnVrWFo1Sy89JkRZI343NixzLjEsKy9Hb21GM3o6OSpgUCZHMFQ/UG5Ne0xXZ0g2YCNYLyssaFhLI2xTJTQ/eTNAS0Q0IzwlZ3ddMi96TGUibyV3NiVdWHxEMU9RM09TdFg1WXs0fmUqV2hRaCh2'@;
put 'LlFKOmVYdDtoXjMoSE1FTjI2KmM5bzlNKGVYR1AlUTFfZTVwbUJmdUQzPUtWeWx4JjgpdGtjQTleaWhFYF9QJFkiVzxIMV53QmMhI21ka3hTeFJYbWBCNysmS3JaVkwvUX4rfFZdcXBJZWdzWjFqW1ksfSJHOTwiTERWZUhpM1FfTmBKSCZscCZid31DZTxTemU7Vm8+NFNeSTVWL3xuYTwvPUQj'@;
put 'Imh6IWlIKEkiXj0yUXp5eDs3a3hQeisxRXdzdVc1JiV4UVh0eFFtQ3J9aTlqOjJSeSNxQjl4fEwiQV5RVlI6d1NvdjolSitTV1pddkFVcGU3KTR+JWUqV3ldY049WDJwX09zIUpSYTUrWHM5JHVBXXtfbTZETGVmQSolI0QoQ0VYRXlvQnY9cjdSRDBIZjc0Z0lkR2tKcXFWbShxaXN3XUclMnl0'@;
put 'cEB3KHJjQ2RORj8yKGcwY0NXeEN5aiMvdWBpU08pZD9uYyM4T0pxb0V8eEVPVH1Jb1ZOckw9PkpPWHl6WWNUKUQqalBad2E/MVd6JDw5YklHK3U4U25UYi5pJGVIYWlKRTpOPHJdOzxDW3p7KmciUkg5OWZCRUF+RTxjSDo5VSIjcWFCOSxqMGw1MDlnIlhXbS4sTmBwTyZdfjhQSnF0L1A+d29n'@;
put 'X0lzdFc+dSROX1JjKS88VENXTHRlVm0pO1ldLG9KYlBYViU9ZSFmKW9dQ0VRWWxUNmc7b1BvfDlSMmwzQCxkLnEjSWdwY0RxK2dDJHNVNnpPXz50UyxPfShaX3ZwbEtkJnZ6Wi9JQUVeO1JnRXRbVnlpR0ZwezNDOyhMLC8pTWVfYzF9SzRsUmhWJClXSSZ6ZWdMW1lISnh1RShhW19hNnplLy5B'@;
put 'KFojdTZzRG17ZltBYyUoUGBANylrbXkzVDRVUTx0LEc2VzhXKkEvZWgub3hLfUN3JnMmck4/WmdgZGkobllQbzNvNTBNMGV8Y1MkRyZCSjp+VGY9dkhvcz9abClUZmZGZ2B1WyR0ZTpGUXNvQkk/RTo1XjBOTzdgMj5lQUcoVilxQmw7RklfIz1qM1pRbW8xeFQ5JFRzRmJ5ckdGK2Vab1ciYlE5'@;
put 'MWpgO01rYHsle3JETUFIIlJecG8+QGokWDVqYjQ3JDJPQE9wMG9rYUReQEhmZC85VjxsV11hXWw/TldoSjk5alg6O2cybUZGS3deZzJaJWc1YFchMFhwZWoqIVVxaU1iTE9ncmlxOztSXjhXN18pN2VCb2FITFhpMFR7NlVNUDUwZVlVSDMldz0kRXp7VCl+ZGcwViUrZEY/MFtgQHUqc1RPNiNB'@;
put 'PFdMUERfSlZLcWZhVHt4NDVFOyQkcTE1JCgsP2BSW0IlXWtsWjElLntxantXIyw+dWdLTCUqN1hadDxob3BiQGFUbFZyOXB4byljPHx4RD5nUTt0Tll0eVQhPGYhZGxeayJjOExKSHdVZVtVQGNNUm8sWj1OY21ZfkcvTk96QHZKc2o/a3QpNDRWI293ek9PLEFAalBnME9ALlE8fXBLflp0UXFR'@;
put 'Q0olMEMvWl03aDZ7eWhVd1d+bD53ZWBMWUtyOlJrOCFAaWhjb2s0dGYxfmtWfkMoNEBAKHcsYF9WMjUxSkhwflJ8aHtVX1p5YnZRbzsxKFIvS34xfTlhMyRTL3V0ZSw+d216Rl1nOmhLfjFgNGxtM1hWMWovVV8oK0NWbSZhNkdOV3Q8ViVhLDphNTBlOzlXbCUsVDdyenV2UnFZekQke1g3TVkw'@;
put 'ZDgyKEAlMVFjW2YoNCg+czd7VFF2KUY5Pzh5MyZzWXVlREUzSXlOPTRhbkpmYXNSdCFqQXNVZC95P3hfLmpaSUwmdyZAJVl+ekY/e35VMFs9QTlUOGc/UkYiRTNSQzhQSS4+VWQ/RGI3LmdecTEsYSImQlo+THMycDZ3d1ZNNVY+IjdDSmBsQEdCcjBIWHFlVyV2VjRlcWJaL1tJR2ApMzNNZUM+'@;
put 'Im5ibXtFNGFFNzk7dlNHR2N1WUI9Uytfd3dRXiRNNzJ5XSl1YD5XeUwxKnEjeDV2biU+NVYwdGJDXlF6dDh6LnZEd3xKP148Z2lffl9EUi9HbHRdWSJkWjpfIUdzP0Joc19AITBtLzFXeHFMSV5BdnJJQUJ0aSlgRHdzK1U3c0hKdDBiVzFuMkMqZnl7OUFyPE04MHFJZUlje0w0eiF+dDxASzdo'@;
put 'aFoqIXczeiJPQWxjW0R1blthOTBVLEoyWmxRQXwiTT5DM3QyRzQxQW50UUshdV5dRUNsVyxrR11XM1B2S1Q1VHRWNl0/X0hiME5WR2JvTUJnPStvWWwrWyJqTFJZckpfMVRpQjZWMz5xSHx4eFBYJUdNUy5rXWI2JkwpQVdIdUVEckg3Wn5aYWhWbnQ/bXxFMmIodlNfflMmaUpoXlUuLDNGJX0p'@;
put 'aUMsI0M3YXViXjcwVlJvfVpCT0Q7bTIifSRpc2guTE08VGAsakh0Vyh3eTkxOG5ZQDEme1ohKjsxOVFwLkRGSkNPWHErRXUodGlCRlM9IWNhJjtbVTY/YSZTcGt1Z2psRn1AbjVnTW57c0JUMWJVd0kkVTJZM2ZWLyg9PGxbW3pgVDo6MWZPQzJjM1QuUGhuTU0wc0JSTzJ3eHVSVCkzT1M0P3cs'@;
put 'aDwwJF9DS0huQlBCdDE7aTgjKzpjSmZPNUg7QWk6PzBsUTVrMSE4MkwvP3Q4QF53UG8za1A5TjkuKkoxI35gL0RUWVh8dFJnIWxjYz4qR3k5YDB+XjQ6diNsbSsmLnlEPH5zSDYmQ1duWEcxQzkkWTFyN18jXTNCK2VoMzJrR1RhWXpoVXFNNCN3djpUSFtQOVsuSltYUitBQiN6V2IxdUpLQ3BM'@;
put 'ViUzdWNFSWVgXzN+X1IoKFVlKmk/flMkQ2R+YTw6WDpxWGBnK1RbLlskPzolZSZUVGR7fm83fGB2QlQ3dFpgIX0rWkc0JGR+XilsXjsuYU9kYmR5LnkiaS85cmE0V2k9ITlZbkl6O2xtKmtBcVZ8RylJdD1mTkZLOHpGNTZbOV19NFhRWFpxaEJzZlI7dno3PV5mcSN2QkZCKyxZSVNXUD05b01b'@;
put 'W1BoSzZXQldKOiFudGN8IS9nTU9iUnYpR20ifWtJUFhQWEA1VVokMjorW1tFcmRHWEx4ZF1fNXg/RXQzMDkmSTxxais2ZiZoM31aO3RXImpZZ3I1Y0dOUzQkfDguTkxWdEZjQXVQZChTTj1zZUQzUmhTdlVoKl9gNVREQURCZWImX0l+Rn0zY1VHLEpHUXAibiwrQjJeKDtvTiQ6T1Myd11uUk8i'@;
put 'KHIvaEFHNkEjXX4mdmJnZUlLWFhLJWsiUXArJXFPTk8xfEM2NDBnfHhzZSFKNjQwQilrJWVISiQmN0VwPCh9d2c4S0VBPGEsJm80VEBvbTgjYHR7W0R9b2hGLCpAIUV0fWlfUiUlW25FWE82fUN4UDtkRD9ZUyVvUkVTPDZTVSkicHNMNnRvQ0RNOStwOlNqZFlkU2QzTnw0YCpoPi5rMDhsYmBx'@;
put 'elcuJl1EfH5FYDhANkNQQUswelhxVXE+XlBGbCo4cyVOSDRDKzIidVNbRVJWKWooRmxIelQkc09NUj93Xjo4S25iTCIrQ05xU3ZhNG1lRyptKXEzL09LeyxkPFRyJmpPLn5OPUgiVlkzQSgxKm5aRGlOZlkqfE1yMGVyS3JCcEpLMmFnbi9HKTpbRkQ3K1NpU1B2JjF1aik0Kn14d3ZrPXpUWzg7'@;
put 'W2UxXy43ImNda1BFKlA2aT5GOlsleWAsJDphYWp8bmJCcDR2Tnd+a0B6bDQ3TFJ2akI6PCs4KXx1bExqLD5lPShJXWdMVUNDYkxDbDVteVB3KDMqa2A3SkgpbChrVX1ITUdVMURoWGlhM3RQZjEudS8+fWV6cGRtQV9TJlp2em9eXk9gLE5KLkt8XlheYlBQZlNjbjIyP3oqY1YoLm5TMyRBNk0u'@;
put 'QjFOM3J+QSQ1W31KUS9tZFE/a3pzWS8sQ2NOfS5sXz02YVVEZ3ReNVt6OUhnYE5jWGNXcUVybXBNIlkoamo0Sno4bDh5UjgyT0FBZyozNWQoL3BZSGBbJDE7W1d5eng7aWhgJUt6YWV7KmZnRjw0WTVraFpaRGd6a1Z9QVRIRiFfXTF2fndvUHY4fSh0a0AxN0lZblpZIW18THt8JjF4RTIhNF80'@;
put 'b0chKC9gRDBgYXFnQSxsOnsyOCI2Kz4lZ0Rde2szM19KSTd9QmtIeFZrPi5tTnNAOWpqVi4kLzlDZCp7ZWlHbHkzWE5fKG4kOCM2fVZecTEseFFIOUQ4WWp0Q3owSFtOT09XcUlTWllsZmguTilVRTRydDVbZi4hNk1rXi5fXTV0LCtDJlIjLHJoRj9SU19aMmZTSHZRaERHWmV4PD4iVExkNjA1'@;
put 'cV4weW5dI21iIyNzQkJvKFp+Xy8mP1RHQnJJSUJ9PkVHRDRDaEA0ZmlBb3lnczs2QCspP31ITVlhdVZeNGsyQ0p7VVtqWzclJC9+fSsjUE0oIXZhJnw5UCZyZyx1SSFmXjhJPXlfXywleVIyPiFqYzlsSllFOSpYKztEIyh9VStxZ3VWekljJTBSM096PVR5ZW04biFkd1dERC9LMnVLRUFWaGxQ'@;
put 'b3tIfXM6KWUvTE9IIzY3Xlp6eU10a1svejgqX2JHN0tYZFNkQyxzXXYjIyQyZF9pVEdmMWUwRmwqZGNjTHRXKUZjdCNfV0t1aTNvRHxsM2BibX5MSFNQfklSQjlFPTIqcWN1KUkkd0IyL0NsJFViWHhdOT0wdjNrMDQ3OH5JWkgkbGFpWipGPlhkUnBnL2whNUdQXmlIfV4oalJoI1NsKVZoJmZy'@;
put 'STRSX3YsPGphL2lqQmNRTXVeOFYsJndrdDBqRjtWK1g6bWVZU3xKKGgiMjcqJkw/Wno1JnleZ34sKmo2MTQjO1RbMjg2eXJHNSpCVSZTbGxAITo3QFNXRkVFaTc8PHMwOWFwTkxYIW8uXzU7SGA0d1hPQzgmSDlTSjsrbjkzI3dlMjM2aC59Q0AmPW0zUFNqSVchY1dNSUVjJUZ2SlteSmp9L1NA'@;
put 'TUR9e1ElbWJ3bDRbezdmXzdJJWw6NVhnS0U7O2hgIlRrOFlfYSxqfHw+ZD1iVWVedGRKL1dKQUdbKFB6WFZ7MFl1LEt+T1A2aSErLGVjbko1V1gyaVtqdHU4JnJZWGo7S0xbV25damthak1+Sk5KVGloOEFXX19vX3drfGZ+OVg3cmBFLnhuQGZTa1JFYWk6KSYsXTA7NDVtKipPIVtBNjZQPjxk'@;
put 'MHhEM2lwKVVQQCtTcT9hQS8xQlp9dV06R2QjK11kNFAiKyIuOENMM1txRXQzXXhXO3UuSEpeOG92Z25ITHJaejVpcD5GVFE1MUkwVUlDOWxldyEzcUBmajAqX2J7NEVGXzVKJWkpQVpLTDtKY2wpeXRlbn1VSjZLUElPJn54SHVfP0JzRkdBL20sKDU7LjYwND8qMmZrPnU5dVo2cV5HIkBmTls2'@;
put 'WzcxUnhEL05OamFJJEBzVmojPlV1aTd4JD1KT3N1OCEwPEdLPVZ3b0wqSGsiTz53bU1HQHo5fV43Ol0yPzZ1Tn0wfW5OQD9YU3YmVWY/LGVpdj9VeHB2RTdYSCx4ZXRQQHlRSUg8SUc8ayQlR19jYnlCe2ReUmJjbkpdMU5hVyp1dk02MjB6Vj0/U309R1FbVzhXX3pFODojZztGb2N3PDwwPCtE'@;
put 'cnpzPiN7MmdHZkdmJDVSNXd6djl1Jnd7XjNTfmwsRUlWQEoyMURJbXBnQ1YyJSx6ZVkzX1c5NCkwb1F3T01fRCslRHh3QnFYeUR4bWVtakojeGMkUEY2O28mUkQpTlB+RjtyTmBLcnZ2QHV4akFINklsbVRZN0JqVSFnNCtMfiQuWm5uJUtOLFNbVSh7KkcxJDpEO2ZHOix0SSNdT2xFX19yU3Fg'@;
put 'diE+MXluVnI9O3xFVl57Sk1jbHRSV1hVNzUwOGBaNCshTk4jUlEuP1Mhd29NTUFqMCtfejhJOGQuMzNTS3slailfYD5nVG92SWwrMzVWWXlOOHMsOkw6a2A+WjJDXU1sNy4rWXgpVlZGUyRwfGNxdWtUckxhIzA4bVFLJCFfejZaIytTdCE0TnYlWTNGPUpfY29uODcxd3podFBdWi5OVlhjKCFA'@;
put 'U1M9NiVSIiRVYVRkN2BTYVVoVmN4XVc8OU9NMyZSeSJhZHV1KUl7KTx7X1JHXmJXOFEjPVNHZz1oITs4cSNpfjZnOEptZ24sZGhnVz8hfltnel1uWCxeKHt2I1hAW1F3RCR5Pi5GKkpQMnZjN1ZlY2k/QjA3UioyO0NfY35eP3pkcDRPeX01QSVFYV9SaVh0JExsVF5oV1drTUltQk9OV3d9cnNY'@;
put 'SjsqeigvcTVVVVIqK0RSPXM7QSxyK1VfM0ZeZDMuVFZuZ2tNW296U0UhOmw2VnZfdDplejRobzE+SXMmTyxzUlptSyteMTVGVU8mME5aYGlfeDpqeHg5O3BqWEFefWB2OmM5fUk8Zjd8NVI+TWRYRS5mUURBRytdSWBpNjJ0OT55REheVS8mVDYue2d9KXRrIltJVXJeaW5mOVc0bThnZm1fKGRP'@;
put 'K3ZSUFlsfUImUEMmeEo6SER2Pkw6aDwpaTFxQEg5JlJXbTJVbVI+XnBuQE9+LHgmZyQrfjNiNFtaLCRVX1t7NTNRJXUjY0g0O008UF14IXU8JVtVOG1rR3ZreioySXhLUHBSRlpgMmMwQmI+KGFFayk7QHh3bW0qR1tCOGRKPW98ZnssaHpJP0xeST0xNnFUQywoUUYyYyVRbFtmXWFUak00Z1BU'@;
put 'fGVfZU9ZakJkZ3AkLndLamUwdE1JXzhzbmU0bnRkTnRgfiVyRk1LXnZGKXcvUmNaXXBBUEVhZUZHTzQ5V3tkSCl9SUx8NjJWcDhPbSRQZ2okP3RPLzxGQnlJbGY1e31aJlZ8V19Ma2pXNHJlViZRRDFbQTh+Y0khdnNlT3BbRzEwL3JhQVB5VXRLKH1gbD08RUlIOUMhPWN8enhqSkpBOUhiV1M2'@;
put 'cUB2YnwiMkJRM21TT2tPfFc8VG5PP0JrcGtPNVdrdi90fm99UjxuYHR8ek1xRzJfM2ojJVBHVko6NWgvP05YYixCJmdOVGFWTn5YcC9tTkEiRlc4JWNvSUhXKGBie0JLN3N8NEYhdmtNSGFFPTp5V3JWaWQzJllhNSJSO2oiOEBrKFdxalAha0hSVSU0RW1CSH5dZFAxYXsqV192PnE8cFp2aE9E'@;
put 'Z3tBdzJSLF9ZVVVpfFA8Q0hFZz1wellPazQjVTZASmFLenM/WVhEcGpDLnNDNVt8a0pQKjYuP29dPWIyVWN4WVt8ZDBvdTBERHI6PiE1MWs/WG8zZVEjSkh3am0wXmlaaFlGSHhbOkZzbnVsYChrQGQmP1o+ZVAoJkNvOGxQU047NF1SfiFHIktfNmRqeChpblBSaE9dKDh+RHFCc0tCL2xya1o0'@;
put 'ei9GUShfIjBIb1JyQ3p8YTJdcmtKbiE7Ykg1RlV8bnZiQj1VP1pBMWMwTG5vajYoKF1teSx8am9WWEllcytoaS9zTGtqaysub1UybkApOjdIIWxxQmxhd2wqcn1RIms7Lk0pNCFUcyVJMTk+UE5oR31MayxHb1AhWDdNLFVOXUplfnkkMFdGd2VkZ3JqLG1DQWZUQ2d9JEdgVEh2WkpfLjh4b1hL'@;
put 'VWQwfEVoVD1jZlNYZGlIdmdJPH1ZI1Z2UlpZIz9iMExvJHtPOCtMSTFHP1UwV2o0NyxPWHZQV3FYOnpFaDQ4WFpkXjlTUl8yRVFXIlIvRl5UTm4uS15nSlAzNS8/cVBOYkxNWWF3cDJRPS41SXkkRz57dmFaOVdhK1ZINyshdG88OzBUJnFMRFpYNTplTWloNmMmeF4kPG0+OiRqLFhIKEJFTmt6'@;
put 'bG8mXy8uXy5kYHNmaEN9MlhAT25hMkVBdW80M1dackw7O09Jbnh6Ij04QzphV3V3UlokMiM1RGMuWFgjTXtfRXt0eShEU2A0L21UbkpXSVFEMC5iKWh1I10+Sio9aG98eCQlQUk3VWxfclVqOU1EYyRmezROLDcvbUtUJUxpTFFPYz59Tz9rYyVHeFhYKnBTNEJwejVFOlJRdUZEbiZpMExOc1Mk'@;
put 'RjE5SD9ncF83T2FWdVh1MElMcCRIUnRnMWRVeT5FLG1aN1VrN002OTtfXkhkX25SQUhFbDokaytsRWZwW0ZRN0swbUN8O359JSQselA7bnFYMTUxPmc6IUBeOGI9PlB3SnVxdGNNcDVXVEMxMSx6JDV6bmNxfU8mPlskd0g6OCg0MHxLSDo/Sk1kN0B0N0UrWTRxZm1FYTB3LkdBZXhqeU5HUDN+'@;
put 'KkEualg8ZW9yZCoqQ3ZKPF9tOmJAfW1GbGA1K3hdey9HNTZgVCMoaFc1PXVpXnAjLiI/alU+Ikt5RzJoWkgoN3lGdiZNfFYmenJQIV15T3tmQUpgS0J0UmZrUnxfLDQzKG5pNSpZUmpHTkBlT0hEbiFVW24wKHhbaE1ucW1gIz9acnZLN2diUUpXJUEpUk9RPnxZUFpaIW4yRWAlT2VZTys2UC53'@;
put 'U1tKZnpTWiZzc3dNPihoJElNXz5SNFpuTjMhaEx6dUx5KEQiODo0RWZEPE43R2tkUl06b2NuNyF8emBgZzdXMiJkWUZdU08mKHt2KDQ0NSprUjVjaWN0c24zSk43Sk9YOkBuZCoxUiVRcXA7KyROIUF9PzdwRE01e295WFtxbVRFUGwvdm0qRTlnYUZ5OVlmfVVHZSJvYjl3YnFPdnhhcSNITVUv'@;
put 'd1BdUEYsMkFDUVBeLFlxcXU+cihZOjAjKDQmS05xbCV5bGBQfiw/WFV+Y099c013aHBJZjZTaT8+NVJ8Pm9LXjE3dnA2IUxeW3gwQiJ0dSJIdXZDI3xqUnBKIXR7cnNGeChUNkhiPjJ0fS9jWW1tdmNtaGxiYT4mVHlScWMpIUpUZWs4ans7QV59V0t+eyN1bXBIVjEzZT1+aU43aj97ZiVTbVFx'@;
put 'X2lDO3tkIW1WJHE0R0lMaDQocTVxVFI+OCVIND5kci5UamQlYilhbzVsaTlkPHdab0A0aXBzam5ldXxaJnNWfHxeaT9YXVhUO3t4bis/SkJtKUFPPylMSTAuaHBQKmlQRU1eX3g6eDg1VW0oOFE6PkFNeU5icT1zSnU4KD86QWFpWmcqVHBOdmhONyhTYTd0elRoaH5TWVMyXTNma216fUJnUGx4'@;
put 'MTt9IUVBb1NafCw+Mmh1QDp4MWZkZ0xPZjVTP3w2NmFlTjtuTVF3SjhENlh1Um5NdHpTLl17eHwyUXVWNVNzOTI6bn11bTo6MEU0YEshdEI7a2lFXVNyRzl8KDE4WH1zYWomeCg1eSx6Iz5UciZgX1FGNjYwOiUhWE1lby4iW2EyZEpqXUg2KCJiWWBuWXp6cyNxSSFgLH1ORiRLPFJEVm1ZOEJD'@;
put 'flhTXll+NTJMPV9GMD8kYWZHcVp+QiZtKFN7XzpoPU5HNmZyXiRvR0o2RDBHM19jUClwNWgmdWAsSCVtMGE7big6WUZBbik6IiR2VFNpJkIiS0opei5Sant2fkNRRzk8SVpYczBaYFJFTU58TF1ER2xPdUtNdGJzQj19W2UqTEpNW1had25rSnMkX2I1RVJMSX5tc1ksU0l6e3EwNTBUTlJZTDxZ'@;
put 'TFkvVHxALFhVKkV1aHJGaFB4K0ByRmVaXkJnVlErTTpPXWJ+MjltdDJ9aH0sLF8oOSh5YU9AKTpCLHNaOm1MY1UjQCtEdk8uekMidiRQN0hDcCk5RjVOc0MrbHJVWGwjbXB2fD8rK2k8YHxmT2t5VnBWUmxTYX42emdXLGBrZjV7bmlzYShWemUjUU5DQVl5KF9BRj9OcWE3NFBQK1lDW010TiJ7'@;
put 'WnZBQysjdGwxOG1fIzZuW2JFJSthc2B4NCRlbE53I1dbdTAjOngiWyptb0laUlBsXXl9SH0mIjoyWjBRbTc9QVIqdV18amosJitLdGx9U0A4QDhiYGBVQEE+aV07dzJfYiQmcmlhOzwpY0ssJXd6dm1lOGxII2Z1NUo3UShZM1MqcjQ4WHtKaCReJVFuVkVYPVh0ZCgkWnhWUlZ2Tmdvcj1dd0pY'@;
put 'NENWdTddfSlue0hyY0ooWE5ORDo8W1ReIXZ9TU1JM25SRkIuOnQ1LiRhazYhViIzWEQ9IUNTcylSJXtOP3hlfU5dZCxKdWA0fDxFdzhrMTxvYV4waXUqXlNPUCp6LHMrfjMvYzBWPDRifE5uXWxqLypiYW10XkhMX2IkOm4sLj9TWUd3ajxlWHRmbCFCL3IpKDFxMjooKSZXUzZEOmk9ZSM+Uiky'@;
put 'SD9IJiV8Mm9dVzVFQl8hUGssMUw6OG54TFFlK294OXw5PllvS0VkNCx9MkI/ZnZrUC4yTkpGTj81PDMvU3xqa1ldMXFzXjMkRC5vMjdMYmdSXiwmMGpNYWMzMnQvRTVvZ29OWDVkNz0sRktJJTY0PlBlcGNTMXRqdnlQcVhodkVXTW0xUjdfQTZGMzRhbWpWL1VAVj18VCxxT0lmazxaIW9XfD9L'@;
put 'TjR6cS9fK3BEZzBTKTRkclV0Jnghe3pLNUkpWkBLfTBwKFZTNl4pSWFVTGVRVUxRYit+NUZsIk19UnsuRlF6b3ksNF1UVyk8cGZeOnc5X3U2RXEpN1BlXS48K1NPO3MkS21wW08vbml1ZltVcmtpJiVQTXZyMGdmWTd2NVIsMTNMYi59Ui91bnpNRkxLfEVaJFZvdkVZV0c8Ui9bWihRIS9zTCwz'@;
put 'N2d+KFpgaFtzR2BDVVRiTzF2T3U+ezJnKWt+WzMyMWJjW0N5aEIxVX1ZMnsqfWoxbXNKdTtVTzx2Y2lpQntIfnVzRDhaZX1GbTBiODc4OXA7TVg5JWVKNkhyJnR5Jj1FTHRTOCRlWT1CO3RvU1hpa25YKEU/O3E5UjFyS3k/cV0iWVtiQFR6P0BUeGY1JGApdFs/VFdYeVhDWEBzfFghLlZNPlJ8'@;
put 'IWxmfTpFPG5EMVhzTSpFflooaiZAQD57MFg6KGplMmNlbiZXaixseD1FUld2U2Q0IzxpLjwxKTVWYiI1KTUlbEpXUHxkeCl+OkhXUl8oT31hS3hzLEhYQ1IhKUFnejwxZ0lGSz80K3g5QiE1bX1hJHBNTEAwZywzTH02ZDNbXU0mVTwjQyZ8LDlVMX17NXIvRi5pb2A9I2lFMzx8Ol1KLz88N0Jl'@;
put 'eHFBOTAhYmM2JW9GWHBDOCtjX150cXhXNiFyfWBqTi88Z2o3RUM5SU5tWVVtSHRqJT1efXg9ZiR2al47OlJ4NCVkQEZLOFA0fXlFZUQ4dj9NVml1RE1saT41PndZZ0lkcmRhVFMsWnEmQ1NILkRMVXMkUHRyOEVGM0gwJF18Y0s5fjRXP18mNkNXIzdFekdTbmc2N1suRW5YMXBsJjgiO0J6OVYs'@;
put 'VHs3T21WaDAmUX1GcE1ybjpsXU1SbzxKezRVOjo2ZV9yY0shS3kqQG4vN0RSMzY6JT8jWDk9aFF5TElRcFF4bnYkKSpqKz8wbURJdyplJFR1YiROZ08uYmJ0OkdnIWA4ZX5eSigjZS5GNW9LVl5VcV82dXtOeDk7NSl3QE17cEQ4Qzt9N0FxRDhZSSRDVnNZcng9V3N4PVI7a1RVYC9Oem5bN0I7'@;
put 'YjxyNl9JbTZlVVBLIiV2I2BFdH5QcDNydU5SaDRMdmhJanUqSyomZHhdeVsveFd2Om10PTglXTNsPWdqUWpzTDJqTXR9aTteXXZKNGxOZ2ZJdU8hbkZGPSxRVU1vYiYlN1QmP2I2alYoenBaOE9XX1YyQiZgKzMxND9yLF18dXdXe3BCImIzR2F5NiMlWERyIW96ZVA0V3hEKGRyY3VZfUVMZ0s/'@;
put 'K1d+KyZ3MWNyODZben5sejlRMXRHaDNrb3RnMXohfGhhUihOanUlWTliPEFdRCVsMXRpOjgpTjNHVzFQMXAkbyVPaTBbMSRTVURMTzEsUkhWIzNgSldSNTxSaUk0WmAyST5AczVDdX0paWYrTD5AWDxxYnFAdl1YKiFdLjghbzxALC5seFNufXtPS0svd0YrJThMSltpW0pKTU9NWFIxdUcjKn1U'@;
put 'aWc6MTxEJEw8M0MvJHN2Vms5PCVEMzpdUypZO1swaVtncXZbZVl+SiUyUV1IYnNqeD1bUlFvPXowcCMyY05ia3tiNStKeHpDfFg6PH03eG0oO2JdRm0hN1hrUTNWTVBYZUNQNUU1UixVXltjI0Mrd2pwdnhsNjIuaGA0ekRTN3kiaztwcTtuXWZwcCM4SEJbaTN5bihGN2xQZVpUdlE9PC41akZ1'@;
put 'aW1URVB+NzFXcC9dLGgkOTErVGVLfG4uV2t3bEM3cnd4TmJLP2E+c2B2STBAUCJTPXRyMD8xKW0hInsmcTVEdXJNYV9OQCV6NlYmWkVqR0JlcWRfI2VreCFjeCttYGJmIWgoaG9PWCQ3dU9UNVQxb0YzOmMuJXs4Zz9JO2JecjxOJDVzZ2srfiQreXxud0wvKS9xI299emNOL14sUlgxe25fNXsl'@;
put 'T3kySk9iRjIoUk53OG9uVlozaFtWXXVdZT0kLj5sTF5ZbTR8fkl9bzpmPS9VeU51YnReMDF0bVk4aXlVZVcoLmg4USpoL05kQn4wVFFASW5wdE0mKXEkcWROOEhBO1BjUC5wN2ZCRiM/N1UhaVtTTSMzRGMocV5ucWlDamR0NUYkKjx2QlUiRW0rLDYlJChiY1tUUzhXZFpjW0dGeH1OP0d1MU5A'@;
put 'I00sRz9iMl8xITZBTD46XkBOfjRnVlFnbWxyY1hRNmVgPnIoT2ZGZmdkfCJIcFp0YkRhZVQwamhXRyg9cmtAfiZdXmdUa2B9elN8ZVJtOyFIcWBGYF1TITVNLEwzNShVO3AiXk5aKjRXRE0+MEhUZ1oxJEFEe0shNVkrIV9oTH1uRG9mL2RzZC5pPyZXUH5HRUxyNl5kbj9KQX1ee3FiITUqc007'@;
put 'a3IwNGklVCFzN2N7NVhtLjttSTJjLnJkMmZELkNDWH00MWo6RHZHNX4kQGFJelouN3pveUBhSy5NJDU1bUtFZEQjWzIzfnNNWXtkcHYvNGZ1em5GRlNiSkdiP2c2NShUa2B2R2hAeCVXJjZ+JipVQEw9OFJgeSF8InxXIylyaSh2XmtNMipwYURINnlycVREQ2A4VX15N21rOEImczwiQCZ3T0o+'@;
put 'Ll4xbl89XWZoQWhCbHU4dVRnRWh1YyVoLl5aW2U3UkI+PzY2MWw7LzJJQzg9PyRDbkojaClzdyopR3tXNmpGeiY5KylbOCtWYHREXyVuWkIwVkxLfWdoN0AleWlFK21EJUFfLmZiVWJKay50Zz1FP3ttJD54Y0wkJS9xTTxUW2xULkpZJj5nNE4lZFApdUhSSk8mSTpZZmRfa0E5W3tjPk0hSyl3'@;
put 'Zy5YMUpsVSpaJWMpVChWYms5Um4leXJRR14hNEpoR2srVkY9cT1FXyEielYzTCZ8SUNDbEdXYWthcXk1KDZxOk1geH1eQzBLJD5uYDJ7emdXbnU6cEM0aS9tNXVIWlQ9QT5rO0JxckV7QnI6c2dUdkM+Ql9KO2NqYFlkN0AzLGRUeXhYflsxZ2Y0amArdCVyWyQ1NSlxbVdZSWtNVWZLT2M1YT9w'@;
put 'WT5PRzBUMEgrM1h3MVdwa2UpVkEyfnFbKUs0PkJ5OWJNVW1gYH5eMFBlMF9GUDAveFpqTjUpPGNPTWpFM21pPU0qcVUjWX5UKjkwZlJnM3YhbUcrbmBYL21JSkFybWshLiNHZFR0L3xqNzNmLHlbfnhHL3kyJUMoIVFqO0VtdkxAM15XMjJdLjsxMnA3fl1jQz0rQlt4RGBhQmshKX5CeG89aytJ'@;
put 'ZTk+KVZOfHt2emVheFNpZzJodDAvNSNhPHVpU2tGTmhOcW5eT10uVVFWeTVTXiZ1MiFoX1E3W2x+NjpVN15SVHdLbVgvKkZTXzVbR00mLihYJjx4L0Z2UixFaktRWj42dXg3eWxbJVhEL3N+UDFDLyM9bmF1XyRlJnxUWyt2STdRNGMyJC5manpnZTF5Wm5beXdaeywsXVQ6YCJnWU8lUjVnYF1a'@;
put 'YCVSZXRmdFB+TzFldFR+dlhXJUI6NW9CeW4hPCxpcFRfTlUyNHVSKHBZdVYoTDkjYEB6bis9LnM7Um9QVE1qVHsqSG9bNSk9OUwkLCwoJFh8X1pwYFBpVFJrdyN5ISQ5aSQyQWNkUkIwO0YpRDVbKnYzZSpGIklbeWlWclQ6O34xPEVQVy5LdV5OckdiMF4pZTBsOGduRCVGbDxyQGlWPkwqfHdx'@;
put 'Izs9eF9GMHsqOSNfQzRScmg7djo7NkJ8VCZjP0gvbk5iUnl0L0YpU2koSi9LYWcwU3RFTy9lSEN1QnBGXzt5R293WUdVeGNGXkxsQ3hZR3l5NSFoT3JQRVB7fl4jOXJ1LDtKKz5HaDlsfVpHYk1HLjh2IWdoNk5SSTxPJHNwaCp6djdONnlIT3dxUmtBfEp2VXQ5Vlk3aC5xZnlJejkyTUtJTEJH'@;
put 'PHY0SX1MaTVdfklJQy52JEFDcWBzfCg/TmpJdHl+RSZYelhmRkxsN1h7fDpHIX1VKmA9QHBSW20kNTE9RS99YmthUkhIQ11sQEQibCs1TW08QiFNajQ/ajIoMUkpOjokWTdSU3pCLjgqYXBgXTNaN2J5bD1SJUJnc1t9X15ybjgiZi9WPnlyZGl9TFQ0SVt2IU5oR29mRW8wYihiNE1uMGJ7PW5z'@;
put 'InQlMTIzfSZoT0pLU1lTfXNpKl9rQ19HXVZUOEdJMGl4N0k/dlRmWTY8Wyo8cGkqeFpeMktvVV5CLkM6UilbSCxodiM3RVtfQ01hKmZWMyxkPzE5OH1maVM3Mk9HXTd1XmM/SzdXNFVCZWJrfF1JdCF5WVcsYlEkPlhHYUFmOHZzTU8wOUozfn14JnFuMSNvMmFGKUM3IWQ9RXlodn5fM3F0XVEv'@;
put 'Qm90WnhWVSVYXll6LjtYX3JkQzgoOHY4Q1lJQyl7fDQrJmZyOSMmO1k1XyImdCVRImlHWypyLnYuc1s1RmgsdCYoZmVaTChbQGUveURKMilqKF1pY2VVeT4xYyRuJnYlOmppZn1dRWZGTHchP35YPi5jYHh2PX53REl+PFZKQnxKL0VmPzpoR09UQkM3YFp0KzsvP31wRFF0c3BZQ19ZL1ttQjQp'@;
put 'LHpyQnN2VUElRG9ubDhYa2xadlcmKXo5NnNSQng9WE81Xl0iWXxscnhLdH4xJEdMaD85Sk1+bX1jTj1icy5YTFhhbylNfm0xfV1zKDNHNV8lZVo8dnBVd0VHNU43VislJSZSZW9STyZgdkkoeml0ajxjYWZKSzNETHQpZzd0OzQqKVhjOUUzQjZuY09jUytVVztqY2hWS1E0PFNmaFY4VGReYFN1'@;
put 'U000OGpdNS96TGlEOlM2UWlTP3lRXzssJm5mSnxrPnlyPSFKcW8sJWpfJUI+SGkhTkJgciUmL1dBdnN9PS5NcW00Ujxpa1E0UmArNWRaZm55UXU2fW5qd0c5REckZE8oNjM7d144Q0hmJDl9eXo8SVJvKypRKl5ucEM0Mm1MbSJQZS5tdSkuc2hRPyI+JD56bTxdVm5gMnl2a1g6KTZGIi5lLGFa'@;
put 'MFAxQlRYQGsiTTo0PVY0aDNYcGd6c0VZfHMqfE9GMUQrcEwrRkk6WCxeYjFYbTMzRk9xciRKVTp0cSM7Ils6V25nbX5iTm9ramFHbUZYcj52Y15IeWZSbnkwOEV1XzhkUyNCeHhEMmRCJipnWCVsPlhrcDlLfEhyWE05NXZALCYyVHg6JDleazxZRipCOTZfeFpGQCJDR0UldSZHbiRNd05xVDIo'@;
put 'am85bzwkJk5oSllMYDZnI3Eub3srO0p6Slkpb149RDx5ZyVLfXkkaXZ2ZSN5cV46clJ5Mzx4c2oufnleWUJwaFooWGAsO2s0e15SJix2VnJAbHREOlpePikjTldiKzFveyVWdEpxRTRwWXJSPSMqdjl9WzhnQHw/MjE8b2heLCM/cS9OQ0dWKFREOG4+MnRZblhALGBIOUloeW5iJEJATlg8Y0kz'@;
put 'Zjo1I049YiQ8ekxNWDxKRF44MitTO2kmcG1NVnM1PFA0XXVeXVRpWjgwX25GZz5lK0MlaUY8XmRUS0JfKCVhaU4hXXYsUzgqYjJVdG5qXkQ4V3x0YzRPZixHY3BaRUd4M0hFPSN5JGlsKlFJZ1I0VSo0eEM2bTxbNkgvT30/a1lSIUspZkVhRnljSFZeKW5nelpFQjAmZTZiMnsrOjxaMiUhPzRT'@;
put 'cEpmNWMiRipdMkc3WSFLSFMjSCtVfV5da3cmaXQuOz16JXlveUowdFFWMX5Ia150LFBQaWRzUW84cm8oNkBlbXYrOVBteGxEUTliPG1LKkYsLHFRbXhGa3o4KEwxOHolayJOSV5EVE54UT8yXiZPQDMsZGt3IVBIa0RZbFY1VEdUZSxhYT9IMixDZDNQXys4YWwzJmpeOis5fWtuPko1IVtuIWJ3'@;
put 'OEsqU3g+dlU6UTZfR2giWjdCM2xHaGFUJVtmK0o7dHdTRENoc1tCVXF1M0ZbRXYlNDpgRUBXMnZoSS9TUUdQd0sqOj96KkJ9dWI8aXVwYTFSM3BDZDEsb2YxSzBgej16fEZ4Q3BYJmpIfGs2OnJ8Lmw+eXJkVypWNnZDRi9kXmYmcUFjSGFKPiVHeT1ARl9beyU7Uk8qTGl3Sy5Hb3Q8Q1R1e1R1'@;
put 'UFZLfUx7WyxNW3cmW01QN298ezsjVWBaNyNRTEg7SVF6WX1UJHtSTC9XWnwkbX5lJUJ9SXQrQ099Y3hDYS9DSCFkJlgkRjA6aTRHZVZzTXAmUm0zUUVEKXhXWF1dOnJtcVpfZFpAdGlLX0U1TCtIJWY5YFdrVDtANXQ6NHEqajlvbV1wdmVVOXo5b319SENPNXxpKHJIKSVkdWxfOXRYOCxveVJ7'@;
put 'LzIvO34rclVdTiROXUNke1tjVHdfY0UiLyNMaT93PGVUKVg4b1FTRXAiSC9LOXNWMzFmeD1zTG9wSV9DZXNrVDxAYj5lU1t5Zm1HXU93LFM/Qnh1bDhpM1pGK3UuSCF3Rl4zaXg9d0s9YlQ7VzNFMGp1LDclK1lEUXxXM0RIRGtvXUpXIl9iUiUqR0w4ZmpQWU9tOG5Ncm9uRDJmNigvOzhaT0Y4'@;
put 'OXo5Ikk/cTxCZEUwMSwuMEc3MTBKZV9rW3E5cFQ+eXpRaVZLM0M5MylpPCl5RiJjfG1gX2pNWk9KfCNedXZYTnl+YE9FVVN0JlZ2Iy53TXUmWzBdS1Q7N2ckWTVtcjloVWU1PFRseVgrdi45RFEoeGJSeDZ2TUgiPE1LTTNFMDBoUjohP04mYCNJdG17XlBHdUAsK1g8SFUlJTVISWhRVSxxM0Bv'@;
put 'bVoyYntFNF1AOjo8dlVuZzhhP0s3RGR7Pig4QUp3MCgzZjBobDA+KHtdKnR8R005cTNMUDRdRzUsLCZedSYrNU8mdHZ4WVkmPCtjfH1IQk9PbiRxbGF1MUV+cSV1VW5tXjJZRyg0SX5XWXdua1AmI3IhSmRpRHwiNW1ZUCMqMTZkWWw0S2hfWEptV2ghME9yYGgrKmYpKDRoZCNLVDtBVEEqSnxv'@;
put 'NGs4I29CVilFR1I8Z3YsSmF0TitlMnUuT2hGNF1AS2U4ST9QKF5AZnV6ZTlvSUR2L2xHJUo+SjFGd1gxRjtpcFNCIVAmREZVRS5aV3ombk4xeURHaDAmKUJBKClLQm1DUzJKNyxwTWJfeCR6dUpoUEUvVTFOPk4jWjh1fEdRRnFSNTRlMzRXTUUrPUE1MVY+SEtMQ3cpfCtJVzU8M1dWbktgWyt3'@;
put 'ZHgsdn1kWUdCem1hP2BQcmUwdiNvcjAmbEt5cVsvN0pJKEMpZ10yZlt4N1VjPVlxSGgvIVFUXl1KMCZ2IWgmc34mbEc7bCgzbFU3W0o8RGt+eFZVM1RtR2R7M0xzOTBVaUMiPz5scStzOUNWeHVvOVtDREclfXxbKSo7Z0I2L3hzZHczZiJnWThZakJvW1BlKE9Bcys6QHRQaFRLb3ovWihrckBv'@;
put 'dX4ibiNFRG4lQDFjbD16e3w3WiVHaClZRDhec3MxYDs6dVp9ZGVMUTNRaHEyRXhXcXc/YEpkMD51SCQodEBAJUwhazUkdUwuO15KbWBbYnJvI0hWV2B+S3E6VzZ9M1syX21TXmBEO21mdGdJTCI1b3k4L0dgZCpjfC9ZfXtIckJ5fV98cHl8dH1lRyxQLGlJPUNNbjtbaCg2NnV1RkdtQDRAYzA/'@;
put 'Nz5XOStePHFAd2BffXs4U3B2ZVVCTGxPeF9YfSQhZjZ3NXwvQ3Q0Z2FDSnJjM2htbXQrUiR1IiwjSENhez5OPFY3PkhfQipFSCRJY0YlOzhxZ1t3dTErZXhhfn1ASFVHQVFxbnw7NkpabSZiRVtZT2ltUzp0SkY+PlFYY31LZHZwbnNYMDlrUztCWmF8RSE0OnAoPSJ0MV96Kj1QalBMbD10KDJr'@;
put 'Yz9DLi5gdEohPTR3eGQhbj4xOzw9KVZbY2lCKmYweDBDMjxZY2w4WXB6Kj83eiU5LygxRTA8cE1RWGAkZUgrNjdBUUpQMGBtU0N1d2xycUAyKTtSdk8reSozRzRLc2dudz1jPi44WGFxfjA4NVRTaS9fU25rcUFOJj5nXkAlNk4kdF1+N11dQCRbJTlxQ1thPFNgfVRtOHFmIUhwPmJKMWprXyV+'@;
put 'eVQ7R3VXXl1hJTA7YEtnW2QrSmpDZFZOclN5QHghe0dhWD1sLz1uKFA+PzVLbkJJY21YOWZubyZ1Vms4a04uP01nfSFDR2I6MkchaiVMUmg8KlovPV56Tlh+fHQ2O2EzMnNaZ0xZPl1GUCtWZ2N1XmcwTjcxX259YHI0fGYsQ2xkSjpBbiYsSGJybS5wYk9kZ1pxey9RcV1sYHF0U1Zyem5YUj9i'@;
put 'TFlTMm43SXE+SEBGSmR7LF52U0R2cyRsfTo7bWBRMWAsWyZvUG9eOyg9Njdxayh4I1gkPFBWZjVkWmYycHt5RT1VbSVrVSN9JUN5N1V2WDFyO211dWB+cGplOWhUUDQ4ZUlfOyYwcUIlall2OUt8dW1dLFBNM0k4W3Q8cTtiUjdyRVJ6cGh4aktXZmh4KWl5dTpmJVAuZXpRUDN5OkM7L0BAcjU0'@;
put 'Rnc4S3RAUkxyNDsmK1YpdzhLdEBhZ2NqaElUNkAyajlKInR0KE10KyIydzJzUDJxO3pddXxuKF1PVV50L2lwIj1sT3E0VUpKW18sY2xhOnF4M31UTElfQn1PXnZoKn0iVyY/eCZxY2FhWDI6c2dKUClFXnsjTSN4PVBJOmdKQl9BcUt8eWhCJkI+VF8iJUI+UXxvdU5kOVAwSGVDMWRHNS9tK3xC'@;
put 'YnBYfCZyKnlyUnxrPk4meDlLfGs+RiY+Z0liVnJRLD0mK0VMPyYvO2FyXWZ1P3xITGNALENvXVhCJkZkUHp7YFg6djwrWkdTS1cpIVhtcjl3WCMoV2QxPzA6REJAez13W2xndyV6YnBSU05ubHFSOU1ubHIwPHNldGAuJEpVcGZQZHt0WyEyRyQrZVt5VjxVNk12fS5McTh5PHZmTDxKIVM6QE59'@;
put 'P3R8dElEZ0c/N0d6OExqdXdnLnpjQHJfS1JOJmRuSXV3RSIuKFVfejdKTTdTZURFSGFwWF1MMntmW2hYRj5lTiU1dUA7PjwzRXQjYHlpRDg8alRxY0dMUm9aSkUjVzV8Q3o8PT8lZXwsUGpEXmVLfHs8ez1jVlkvPVg0SWdhMClQcyI3KiZKdDp7Nzx9PXoleXRtLilKPXVGLHQyY0Z+JnhUOTJK'@;
put 'Q2F+dF1jVWBAMVVQa0hRUDRKflchezE9akp7Tz0yflk7fUlkPlBqZ1cxPVVXejRZI09MdUx0a3ZvRSx0KltDWSVgXlZnVTFvLGNmVSs/Uz1nJnNzZiZzPyEvfkMobipPSUBSXz1hcFErXTUuViMrOFc0cShjRkkrWS8xRyZkIWIlfTxjcF1OYy9vL1BzPGB8dFZXSmtpJV98dC5+fTtGYilTMzxR'@;
put 'Tk9jL1lWQDtUa011Jk8kb1Yrbm1mOWJAR1E8eCZgQTg9R3hyOXY6OEJLdXg/PHBWRjtbSE84ZSQrcGlKcE4wflFvcFRDdTNaOHBjVGVUXkN3WENYU3JHTj56ekpKNj5ee3wjNCk4WSZXIVpHSXxbQGpdYVhiPSZOazw2djsvdzFFfmR6eX1zW0BnOUZ6VEUuVFtAdFN1VnNwZDhVQVhNWGBlNz8x'@;
put 'RHZMVUZ5JWpiYWJiMkMzJm9ee2htKjdFeG92V1dIXjwuVE9FWzVgTXVUfio2KlYkTWReI3gxVXNxS0VrJlNoNF1eJW9nQGxPO1VlTF9sen1mJlo8cEpFPn5ndX5YXkB7XlR8WElTVkpkNiIzSDQ/RFFdYmZ2PW9zcnQwb29BNVVMJnN8eUQoK3tBfFNjIzNzciRRanZCO0FQPkxiTmZ4MnZvTUd+'@;
put 'fHlGfjcsTXJATHV5V0lKfTpAOilgI31YYnIqTlV8dlQ+I3ooKXYoODNNc2IsZU1BJWovK2haWyVpI2tCXXZET2c8UFldZ34pKTt7SUo2XUxPbz0vQSE7Z0IqUXo2SCg7UTV1TW9TQUZ+QzVbNkFaYWllKUNXMWE8SH4uRzl0Tlg3UUlvPX0rKWxdJXRGXVFjL3xEVDJBKXZSIz0iaTBRWiw7fil3'@;
put 'TC9LfTcjNT41KjslZCVpVW5xW2lLX2hXUlJzJnBhQlNrdGIwVEdHIUhdZnI3IiNjdmFNS11yKUUrYnZ7WXdvNzRGPWwraHk5MH1AcHVVO1RVWEljTVhaYHFCR3wzV1RsQEpqQW5DVTBxL3F5ZWFwSyV5RVhHTW54T257eHd5OTFMfH1YcH19ND5xMmNeTHEub0dAdHB7KylYcVIjaFVyPTx7dn48'@;
put 'a2V5U2dwT15wIyZMKlFtViZJRCk4WTVaV0pbSWdZJFZPMTlrOiF+Sm91KSMiKXBWcE9JREJHMmEqPHRCVzFnYTd+bTlvVS93d3Beb31LZ3p+UT9hTmh5Iyw8TWI0eGcxPTdkO255YUdwLCYmSHpkMDNmdS53bz9QYlJLPHpORn40cVkwQ2t+OClUN098KTZlPjsuI1MqVXtvcFdsL25EIUJFZjAv'@;
put 'czlQamtwYjUpRjswKV9nY0pCMiExQiNpOUIyaiZqSX5SZSVAe2FZMD5LSzdRZSkuYyhOUV1ULkpNdVNJcyY2PFNmSVtjezNzZ01DaG9+dkJneVU6KWQuUDtdK2k6NX12RE9feUNUXmUle284PCFnfHNVVUNEV3BzTWtCPEIhTlA8T2w/MTRTc3slUlMqJTUqRHlfPzEoanAqdk90RXV1SWYqcHhv'@;
put 'KTJIbGttKElyJE5EI01hMWBVRVJ8b0A0PXVmKzZiOV5xPlhgV1ZKTig2LCxtUn5pZTlGLlZVKW1pWjY1MSVBJkFseDxyZU9maDJkJlAxRDNiVD46Q0pzbDUsd0trM2M3VHk8OioqRyNlP34kSW9aUyQ6Qls0YXMlfkg2ZTJqWEpsKDk6OSNHR3hARlB7cW98Tjc5MHo6cF07UjVkSU9MNywsMzAx'@;
put 'bldjVWM/NygkR2EhT3IzPmM8KFtVaFVTeylKNzQ3TSosPV0rJFd1VEV7VS8mdiFHfW44JFN4PH09UiFUa08jfSU7Uz8qOyVSbm1ydn17Z3leNmc4NzlFYDZEPltxe2JAQmF8Ql9DZz9jOzJlVmZQbWNHX2I0QD0mOndIclZJUnBTPTA5WjtGdX4rXlNNYVk4cX5WLkpBYT1yZUkoYCZHX08xXXZ8'@;
put 'IzM5a2cjWzIqS152bXN4dUQ4e287dm15blAmPiZXTEYiNEROSDprJUtFS1lQdWpxMzRISz1eeGpYYjVHQjYwWUQ2MlJtUnxjJUN7dnZCZ25KRzVoTzYxYjJVOjAxYnJxa1h5NVY7JC94PjUvW0d5RTU7NS86ems1SXlbTGg6I3JPNWVpdFd6VHU+ZS9VdX5dQD00NUAyW2JLYDFNYUR5LFlNNDto'@;
put 'Yyw1SXk6SHdUTVp3Z3lYaT1pXkBUU0puZjZpRDZLIiRnOCUmTFklPzVsYEtleWxgRTtHRl1uK0AmeSUscXgpM1dZSXFHaCYzLzJFakl9JG5mcSx0M28sQT56U3lQQWwoQDBycz57dCRmSnZiT053dz1uU2I8O3dWWj5ONz52MFtDSkNHJmsmfHBySHF2RSpAVnR0PF5kZWZEKGV9LHYzKD5CXzNK'@;
put 'WjtuMCY1JHhjcWJpTltkUF86UTsuU2ohb1k8fWpKb2VAL3ZOczJ1eFdKRS4yaSRHPDEyK21pUWtMQn4rO2pJWV1hSm9jQzx2M2tUOztJPSR6YSFkbDhzZDM8L2Z1dTglQ1kvNSlgRiUpQEY2MzgiSHxhQFd8QCJXfEBCMmw6SjE3VWsrX0klSj5hXjZiQlc6WGQleEI6c1o/fnImUDJLT1JPO3Bl'@;
put 'Tnl3L1cjSjU/VV5SdkZSbTVKQ1hxaWdTZVkvejlNRzVSQmdrODYzR1JBczxNczJfI3FwQ3gmcUs4PkNvWzQ/fHZ0fnBNdUR7SjB8NEBzNHppW1tmdWVCcy90TWhpJTJVWVBqNzkqPnR7RSUldWR0YlFsTl1AXlNgKSZyS3laPS4pTHY0RUo2QUQ8XUVYYUBZLG4uTj9xZTNLNDJqcWZzS289UUNK'@;
put 'QWxUMmJuLkAlPzEjfHtJfXRMLmBYSE1WaFYzdlEpdk9KNlJgMCZLP2NrQ1dbR3JWT0VlcEN6TD8/ZlBUNF1BT0kjbTMuWlBgdGl9TkF7WVchTWM2ZmY6ND9XKit3QG5KZGBPRVJMPkRoNS5Mem1YN1B8JTVSeFFXazg9cSZxU2t1SVdPPGx8MXB3TGw/PDciRXw0WTk+JnI5VGNweFZAaUV8bCpa'@;
put 'dmgsKGdxJVUmfFlhblM8QF94W04hRHU0VWE/Rlo1c051aFBiZSJRL3l+YHhbQDYvbVojYnA7ODtnJGRvPWleV2hIMGp1NFU+PT82eFIhXjdoWngsfU5wIXVGOGtOWShJR3cmPi5XYVlgRFtLRmZ0anlnTTBtUFg0NDglIS5GeltaSSl6JDxwNE1SP00xPHI3RkApdnN3Umk0TFZPTGM7UkE5Liwp'@;
put 'X08vTlo5THQuYEVEPHM4NiErUmhuPXEzcX01I3IhQVNWJVdRU3s0RyM8W2o9azA4QnlOZGVPM2FWLGZ6TlJsSFNNZUBsYSp2V3dIdFJqIThyN1EwVDpTZjEwbzB3VCNhVixgLyRbNUEiKDl2TFErLCxzWGByYmYqSlIkLGNWQHpnSGg6e1R8ezlENXE2cVJGUXtjXXhJYWY6P0Mvc2ksS3c2bVdY'@;
put 'KzE7T01JWDFzKnVXUT0xUn1MeCI1fnpvdElPSzhPTCZxbltAVWpIWDVyNk1AZXc2Y2BISV1fNjVeZipEOD46Kip5VjVMUkVGTkt4XSQrXT1QOz1Ka1RVUUk6UklucjFIVUVIVktTeCJIQER2TFtRKiJkRT4iZkdgUjhJamJgUl9RKiIsR3cxWUFqWk1AZXd2JlQ2ZkRWOmgmd1RaSEpuajE7dTR6'@;
put 'N194MUFgOkZXY2BIU3BSSUMofXdjTzQsSntIYWE1VVEsNG0jbjdpTGRFYmlqMTcvI3k5Kkp7aVpIQnVoLllfb2RNWGk6TyFpaUkqNGF4NEBGfWVNZlJaelU3fXd3PThMP0BgJiMsJDE+QGAmQ2VpZmpieilFOn19Nis7Mkp2ZElzOjdxYj5gNihuJDY1MWZOJnIod0deRylHMXhjKCtSa3g9WHtJ'@;
put 'eXBoWGVzb3RjQWBpVlF3WyteYGplW0JSK15iUyZRI2MsX1FKfjdlKURsYDtHTyEjN2NkLlRALnAhU05RYUVmZjRWQitzdjZBQyR3cyp7XlYsI3JwYGZyKn4pSEtdOF5YcnlDZkpCSkZePWZJYj5xamp5MSE7K3k1NmVML1VrWmVHRT45KGtJSnx9KThVRCh0X1FAeCx4LGxyWEolP2hjfFlZR3E4'@;
put 'aFBkWF5VRExkeHNdX1VDV0VxVSI6KVgsS3NZVCJkNGRWcGZgVFchTUI1KU12R2ZGcUU/N2M5W2pzST9sWmRhMGI3QD0vL3xfMmJHfChEfkx2aT1WJnE5L3osLipqVTw1TGo6LFFKNFVXRjVke0RxXSEmUz9xTDFzPiY6Um9XZVRwUV1OQCtvKVpaTC9CWXtoPFdjRXxCO3dmdH54WHA4d3FiczJ3'@;
put 'WihvbUxSbTllRGEhVDdASDglXzgpMCI1JVc6bjYpZGs3QHVfXytlbUdhPFdyOWNrN1U+RS48ZWdaN2V1cDRbaFpwOF8uO1NDVUllZSR0SyhNNGhmcSh0QlsjSz5SLmZlQ1B9PUYuJk5lfSQoVmheRSVvNWp+di9AbD0qfGdjO3ZGQUU8c31Bb3kzRjYlY3gmcXl1Y2ArdzQlPnV5TVBlSXE2TEJ+'@;
put 'JHRLVyphQihMSDNQd1QoYXcrKzI1KmI5amJHdTI5eX17L30lIjJ9bV1UUC96UXUjPWJRbHA4K3piKWV9JFB8JGQxcFlyIWM3JmxnMkIvKHokO1ZTRndRcVpYcnVlOVtgNyYrKnomXk95Z2tyO30/ZVpULyNBJUUoZSRmOiF3eEgxUyklQEh2bSViJmBoRHRDfl0+ITs/aF5yaX1qL2o8NzklPjku'@;
put 'cXhvN0Y6IUR5KikzZixSJXxzSEEzRHArelcvMW18XW5wKzlHRFlbTD5oVnFmZXJBVTIoJSZmVExnVXYjXX1pd1tZdGpoclkiUFZeLix9UjYwK2YqXWM5biF6b2QuRmA4YUtAP0oxTFA0cnRwUWNXRnU8Rm1GT3Z4KUBLfGQ6JTElZiwvL1g9Rm9MYHt9LHBwbSVQMDkjVjEjbm1USD10Ikh7aypM'@;
put 'Rnw3ZlRUazg3fVZJJj9QLl9vXTgvXmJMWjglL2cxP3s/TXE8JFQmXn1kVzZPSTxUaDxpOlZFTnlgbUk/cztdQ1c5TTBbeyFQQVVld3N2Ujg2Um9jNHNbQkg2P3l3LC46NEA8amdPW0I1XTtnU3xdfWdlLzhmWyhsWDVHZHgsKSYqT3liW1J8RVImb2Z6c18kSml4d3tIOW5ANGhNV34ud095QS5e'@;
put 'akR+JXpEU0pvcGkkRGU1bEQxOmB4TSQ8PzJLaTRHaD5qdiV5MUduPk83SE8pTEEvZSZIQ0BLKjVfa3kiNFQ7fmsmOjBaZyhRMjZTVnpqaTJAfSxyUWZBPiV5OFVrQG9XVj5dPSZUMDs1T3hYLDlOQHlndXNaPG0zaFNVZG5ZbXBANS5uOkBVY0txVjRFcjBYQzVAe2FFTGR+MzUlLGYsU1JLOnci'@;
put 'RUZYQXh2NVd4dlZhQWlDez90YnxbSC4mZ1cvSihgSltlMClgPVszb1JNYU1DISJAbnRMOlUiM1FqTltha2E7QWs+I0RxODplLlBdc1k8NUY8K0hEQmQ9WzVjXUt0KkFndS8xPj5sc3crcjxkTG4ue0x3Oj84S1Q4fCg4KHQpeHx+YDoxLF1dYE5MR1tgTFlqKj14bSp2SltqOkl0Uj09KU1iTzxz'@;
put 'YGw0NUcmPHUjOSlDe3BXbzovZSNXW0Q8c25iR3Y0U2B2RSw4V2ljMFlkYHV7OjIuMH5YV0w4VWRqZTdubEBRIjxdJSwjQmw6anpZaGVLPS5uKkB8cD5CbiR3JVAxQT9fXmJ6cmA1YHNbPGMpdEF3eU1Rb2xvNFUkOz9tX0pyJG97RnArWi9Yb2F3Y1EuJGs8VXRgc2lpOmp6LjYwTnFUe25vYnJq'@;
put 'TCR2LDFnOTBwPGRQPSE3ZXZqTCR2LDFnOTBwPGRQPSE3ZUdAMzZCI3xLWTNNUWxPc2o+U1RGNWc5MHFxX1ZYTT5KZywxZ3gkWCNqR1NdeGI8UkdudGssTX1JMkkxbjV2S3ZbSWRHMWpBVW9SZ0t4VFR6c1NZaUFTN3xYX11hQyErb1RmeDAsVmw/Q106NlEzeGtbayQ2QEY5NnNGYDh8RSVoQ109'@;
put 'YE1OWWlSbzs9RE4mR3NOSDVRK1s3Kj1IUjszMjFVL107fUU4JDNyR0dFR2d5KWE9clhzV1dgQC9AYEwoOEhGM25NYWRObmgoOyspVFZnVkpJJXF9LHR4XjJsSD4/fXRPcl53fF9iOEBOX1QxQGkwYkhUO2xZSiNGRm5sfHU/PCYlfkY6d0hIUz9CcH5YWChEdklsdWhvR311OnkrRD9FPD8/T0hd'@;
put 'SjZjOyNISHdQPTRwNlllY01JVDt+aywxe0c0XSRLVEx+JkZMVD4vbk5pQXt4KDJZaTFGV0Rheix+KFcmOkBdaE8mc0tNN3o5eDMyNFUmLEJDQG05fC9ZIno5cU18VzNfWVdaOzQhK2V1enhAMVJdeX4+UmRWKlQmUlJYeCJ1Kig0UXtROHkidSRMeml5YW9ld2I0XU42cyE6ZURFUXVQfUhsPWgl'@;
put 'Km47a1ZqSCkhJTNjbCNqKVEraSJPREQoXSZYSk1RYmJ2cDshaHoqIiZtQ0xvQ1FYQlJpXztsaVAsMSZKNmh1QDssOG5GRW1yNSRZO0hSJC4uKSxZLCZxQng7QzEzZFpdeT9KZWFHIVlBRkF1UG02ZEBbTnZiW0hPNSxrQ2pHSTM4UmY2PCJJaFoyUDVTJFRPK3ssYXQ8Q2BIX1Z4WCZ5a3c4ND11'@;
put 'X2tBNzhrNFI1KT9gbkxnelUjUmZAcSI0R2FeVDxQR0N+d30zWkRZR0FBQyFmZmhaX1YsdC5rKWYhTTh3IStLMjEyezEhNnZlPi5EKlVhVk14RH0zI0x+US9vT2VTanZjbzA4TD1NN1RxQ1lwMVoiRmQqbCtSaV1AczlhNCFZXiwyK15UMkVrOkVJaCF3Qix8IWdIIk0/KHIzSDQ/S1hXb25lLmhs'@;
put 'PXlCZCkxe1JQQn4xcTJIX25haClbRFhuLz5tOyw6R15FNi5HMSpCRVttIi5hJF80JHlaITFUVTRXVnU2PkVvLlc8ZktLa2RMOkZ0d2J2dCZSPFheZG5xakQmfC5dcUooLDEmbyNCbl14JE0sZXJNc3JiYiRfeX1ebz8kUE98I3Q+Ql5NayZkOUFkZ1FzVSpCKFhASH5rZ1ZfWlJxIywoejFWMjw0'@;
put 'S1A0Xz99ITtLbWtheUg9JmJHdE4kdWJwMElNZlpGNF1LUUY7aCQkUWNwVk1XdDVGS250ZSNHaCxQWFQrPGdpKlZCVjMsekBOK0RJUjRdaSpSPzI5eH03OytndWtjMyFvVjMselUvPGxzamNbcHdxVm18c3lYTUg/ND00aSp0JSVyfj1FUERgZEh3RjBzMm5FeVJ7W3hYSGxlRytUV0M3YVtHXihU'@;
put 'aVduaytzWzRpKGYjSXlsJXdhOVBLM11oc3tpSGd3SWR7Xy4kTikzeillNVVuXk1dQFc+N0okLi5hQTYyezN+QlhMbnBdPytFcURZZUYwPDklZCYqOklSLGYmcywjWCwwZk5iLGQxQFgyTFRCbXlEXitfYV5ESW51W3NfJF5bIUZnIUBiOXYsMmc5MFMlKTpVbUMxUSVkUFshN2U5amM5aFszLGtg'@;
put 'dkc1LCVHKnE6OUw2fjoqPDFnSjoiLnpaMmVle1I9PmdtcEw+Ii56WnM4PXJQTmFnNjxSRD92eC5tKXZfTSU+OjBASltCMk9SQi5BMyUyOE5FU0o7Ii46Rm1CfDIiX3NIYEIqKH1lP0R5TDphRWArb29xS2x4M30pdTo7ZlI3ejlXLktpb3FdbGsxU1ZlSixJZixRflQiZzRkQT9AY21te0o/aDhb'@;
put 'S1g5QG9nVGp2M0kxOW9pfENvM0ZYQChMK3VXLlEvVzs5RUZ0JnAsbHxASCE0Lj8lNmRKeTMzUUR5biRUNilMRGZzT3ozbENYaHkqXz1XR3Z2dV9TKWlncipEWzkjRFY3UFVhPzd6PHQsSmF6PnskLGNIZHsxN3ViY01WfD47Syh1OnI/STNEK31fUzBqLyxQKGwxI1llJFFdTzo0SylUbUlmJVFF'@;
put 'a09kaU47Uy5SQixuRlYyU2RpTjtVeSFCdCU2dkorZEZbVCM4WkVbcCYhaW9mQUdJQVJZZ28/V0loTjtBWWdtPykjZXVNQWkwREEweE1aaENTQyN6VkFsVlJCOTVEYEYlfEVvJXlXdWsxY0l1SmFmSUZ0flBsT10qdzMveFIiaDNVWlU1MFdNK2RGakVlQXchamB2Rz8kblp4Ul5vNVszSlFwJHxD'@;
put 'XWIzUit6Jl9WeEZFJlQhK3g+JEJxJjJTPXg1ZDhRSypbalYwNlA4TGh7M0grTEZRRnc9Vi5JK0hgbms/ZHM+amE+MTZ0UzZgLDJTY201My5qJnYkU0cucTVgLEhsLjcyaGw/ND05Oz5sbyp7bXI+ckVgVT9LNW57KXVuQz9tP3JeX00jeC4qWkA2fSokNVc0djJ2SVo8W0NRdHxyTDJjRlNMSkUv'@;
put 'PHlDQzB4fFk7Ki5YPUVSdztpPyxEN3NgdS5PJlZLUG0kVWJ6LD1BazJTe1lLeE5xXlNmW24zP1ZeIT9WbEtbeFZHcy84VX15eExbPzAmKUJ2MjIuTC46eSpYPUdCa0d1a1FPeDtVLmEzT306VTUrMU90NS9wNDdAO3A7e3NrWUVzMl1VQXU6VjF3NWRCSil4Tit2LHFuUk5RdmQvYTRwQiF4LipT'@;
put 'My8kZDpueW4jfU9me281b3lhXy5ySEQ8W2Q9PGBwbjVJcVdzP0pFVF0ubU8+ci41UHZjeTRePzl1IT90Y31fPW1HYTIzZURnKkZKOzEram51K2VSRiNZeUNbWFZHXihwVVBJRilhaHxGLmE0PUJeQWBXLjMsTVJ2WUEwcGJ6WlJbbntiSyRKXjpweXB0P1Z5MStUfiZ9QUowOVtlI2Y4YXglaj9T'@;
put 'fHB7LFhxJTY5OnN2bD8ibmsvanswd34/QylvM1VOelV3IUA8RkVZZjhxcT56ZkMpTXJYKU15RC47V2ZbISZKU09kNmg4byM1RGN9TWZMZC9UdytzSVltOWxhMilYaFQhVkMmQGI+YnU4TVlPJGc4RmdAYUliOlEsbU8+NXd4flovTTU8Y0VuT2UrRCJOJip2RCN8VjNpYyE7eURyRW03JjdWO1dR'@;
put 'eyR8WXc5My8xcSVfQC87OnlgJTVgV1Z9b0YhPDN5NEYlIjtXQFB4eioxU2Y0KkpgUixEOXpyOnVtdy4pQmF+Pj8yQ1BsOFc9c2gwIXF2ZiZ5OCNdYTsqQHZkXUA6aWsmZF9Mb1dXcyZxM0xUNFRRSltTWElqTXhfImREak17NmJCQGNvUSNdTCVXYVU2c1NIdUR1SCpkOkEmRFFsT3JpUltSN3dM'@;
put 'PTFNSztVeGg8bEFKJjpVWypmP29DfD1OdWcpQyUkQFdZZy9eVUwwISVURyp4cklJJk9UQGhYPS8+YjJAT0ZlWjJMdkd0eCMrMWs9dEYlOyZMQGpqXnJKb2FYXmErSXJJQ0I2OWp3UylSLnxNNHpwYyFQTjw9VFJKTFJCLyM3IjI6QHhWdi5+fXo5PlRnYEQwRSwmfnpyVUQycHxbLjcmVDl1NCVK'@;
put 'SD9nY1RZS3Q+dDMjLHIrOkVuOlh2e01meCUyOyI6cylJT2c7VC5sKjZIblRXdGsyeTxGemNnUlMwXSNGY2BMQipyR3hAZzNXU2h0e2pRWzZAV3c9P2h0YTd8OjU0SDU5YkldZGwmKitOZGN1ZnM9eC81UXVvbHc6TEwybm5fV3NraFleckxoeW1yX3IuTSRvOipjMHglMj1ufUxaakdnOE5PbVhP'@;
put 'UC9uV01ROUk3Yyl9U1dROy4kRCx4dTBhLmQyO2pHQHpaNmpGaWlVW09LT0ZRVmdiPDFlS2VbSn4/b0ZydUAjbnlzMGE+N0w0WXNIWnMuWm9UeS9OPHAxdjEsPj04IT1UITtPSmNba3dKNHhSQzBgOnJDW28pY2dLYm9zQzlraU9PYkRaNzJMWDZJVVsiMSx7aSUxQkVMfj9TS0FGJC4vS2QzUFM7'@;
put 'aV9yJmU7LER2c0UoWTdSY1RHYmRPNlIjL05sUGs0bXwxImN0YF8rMWhvbCVXek5ZXXVuQVVfT0F5anp3L3ZCfiRBKUtSQFY/JVtbV1IwSSpqS19jMXA2YiQpciUyRk1fbTdUVUlzUTJtcC9CPH1nYHh7fGpiUEk8WWxCWVpJak5hZkYoa2NXPWNCfl8+fEAzZip0WGB1LyxvRStqeD8xZmZRJi5q'@;
put 'OGVrbWVQSGt4JVNLKSw2bnVDLyYrNCVSQHxeVnIvKXxwYEQsQyY1TVJLc2w+NGRXcDNjXjBgdE4sd1cjQipKLHQ6UzhmPTQ7dm06N0FTczJRO3M+eWMhZDllSHFGWnY0LF80Zyw9bn5XNWhDL0VLVDdKPTI9SEFLa34/Sn56cnJ5KV5EQyN9M2BJdHBqdHhXLmhwTEQpajpEQWBGcDFVLj1yeCpF'@;
put 'QnolNjQ3dERbUkAhdjxjYUM2dkxrYFtZVnNTe1NuSXVKMzIyZ1I9cTI+PVA7ZjpUN3ZQc1Z1fT8uQX5WV0RYLitvSSNAMGchZX0welZmUCldKVQ9Nm19djo6TnNoe11nOEI+Y2hlNzJkLylecUF9S25eNSZzTkE/NVlCK1YzdTNxXTI7YCtkNjlAfCgsVGIuL3JANC8qZ2M2N2QyUkB1VXQ8bzw5'@;
put 'XiVaTGtSOV91TUFBMVtLfH5mP1lqcVBXOG84dSYxaFtybyo2U2tBeVlbLFAoWX14NF4sYnhMdmBmM2BoP0E6WVBENDVnVUkhSmFLakJdXzl5eiZocTwqY3RUYUVAcHRPcituUVc7O2lIWzxHOkZPdlNkP2t9YVt9RCV4MXA1RVNtTHNYRmMoWygvcV0uVVYyYjpxXzZPZlUmWzhncGt9e2Vhaipo'@;
put 'PklxLCZKcX53QXFZJSI9XztiKzxASW5FaGhRJj80RCFjdTFwWl5hJFtuYmVHInV5XzIhdXRkLyVSPEBRQn46PEN5OU9FL0Q0VS9wJXluRGgoMVR6KmlyZ1pkezooTnohfHBGZzNlamo+WWppMjUxW3NXOj1yfio1Rio4OHwsdXZ+ZntbXi5MQXwzRHFeVHl+YGZTZ2BZMDllQylJOGZoclZbXmde'@;
put 'TXZCazxISjVJdDRJMkcqPWhtK0AvT0BpY3FbQmciUEojO0V3QC5wN0xCZzAxMyR8WXcjIX0/fkY7WkR4ZDBqUCF2dV86UmdDP3l8fnwyK1FrbGQ9WmFgNHhQUl59cXBrfnEzYXUmNG0zKm5vPk1zPihuc1ZeJVBEWGV7diFMeV1PRHVwUHA4ZXVsVm5jMXk8SlEhWXUjdDphLnBOfCRWWWh4cytz'@;
put 'c3B3VlJaIWQwO3BJcGMhU1V6VDk7djMlQFEzZTlOJDgzM2E5bzBtZjA8VUtEVkU7OUE7LnJefWRMRXkxQzspYzN+M1BeSkM5LkZ2alJSQHBIcEp9IVA5PzJoajRSdHljfWBdKl5iN2habChpLFhvMnwwM3F3UitDNi9fcW0rSU9edyEvfHguRWp8cVFFQ0BYcSw2X0thJklefmFuREB7OTJ3QEFr'@;
put 'MHZQSm9dJDJGYmNgO057WlNnMV8qPywmW10zRElOcXVlYyhAIjFLMWomYHQocl0hKFY2cU90L0Z8MXh9LlVmanIpTnosczd5KjgvKVJmcW9mW3U8ejt8Uy42fSlZbiFMR1ltc1tGRTpEUUNaVGlzdU5+OnVwQCpYImtvYU5NKWlkYmw9cnNXVThaZEQyamxQOGduW1hTWXVSXS5qMEp1I0NpbS5X'@;
put 'VWh2Ynd3d2ZbOXVlayRqN29MdzBVYkw+R1g2W0x0bHtNVlBXbkw1TFJDMyQ8QiM7enE2fjZQNklfKC4mTzhdV01gci5gfUtZWnRibWwydSp4e3Z0T2A5dU9He2gobjx1b2Yzfmg5S09xRkRJSFJYXmVqTi9eJVg9PG5pTSMrLyx0Qk5UREF1KGs5ZkdvVk02I2lOQj59NHRyd3F1a21zUkYoIi5P'@;
put 'UnRPQyFvbUJZcjhkNEdeOVBEcmRAY1hEfDAhJnxLSylXZFsqaisoTl93VlJwTDhXPTVCKltpUERtYC5CZEo5V0chTT12QislcWs4ZEN7YXgvTl85OG9kbDF4fD4uVHdUbVlHIUxnKjcyUnJIMSJOL31BIlclVjVjdUpQblRhI0Y/UFMzV1I0KWBDcyIhRk5WYkBeUT4oRFNzP1gpaStXUGFxLnJb'@;
put 'KnFuQmJJWU5KTlZfYCRTZ1shbTx4NCMpRncxPFImWztLOkJXaCI9IkwrWjlvSVdUYDFiVDRwcyROYFtiXjhvPEtwMHJCXSVYQFs3V0syeTdEVm5jKnRxcmVtWjB8UFhde3htYiVJV2NJNkldeX4mXVtiMkFabUxAM3RBO2BJfFh0VGc2JnBjQnslPlQrM2NpYVBuL1lJc1tgTWR4PVZBcEIuLj9j'@;
put 'VCF+NiprW3l3RiNKbWlIUmxlY04jMyh7ODNwOF96ZXIrRCIuLEVvPzJdLiMjPCVnQ19kO0AsLEhuRFk6R2lzRDxjcENbaDsqdjtCKnk9c017WFRJKGZURiVkey9NYnUvdipvR2tbXStWRDVkWSlhSXB9MXNJZGtePSZlRWMzIXwmenJSMkVTdz5HJX5lSWJPYHZYJWFnPE47YFI+JWJBRztpS1BK'@;
put 'd1RFNUw3Umk3WUB0X3k9ZkBVS25rIlQ5e3UhT01mQiE4Q3pneWY5Njd5O0FENVRaYVVUR1BueGFrMDxKenpiRWRXVWcwblsiVz0xS3RNQGpwLCNoQi5hWWY4anR3b2p+TWlmWDVfMHQydj9RdzFmLCM0QHNuUSNgejUoeVNmSmBkKXx5cj5VP0s/OzNTdlJSLiIxYEZbMip0ZT5dK0RPODIpbDpb'@;
put 'VFNAYD1nXi5hYiwrZm5OLCtYUj9yfDhFVHlOLmtgZUpbZzhkKXU7Uj43XndPMz4wRTJCa1EzbW88eHRbKD4wfEBzN09KbzR8I3c0LDhjdVpSNWFZQXpxd1BGTlFpOFY2M1ZlTU53d01UOVlEZThgfWY4SGcxO3QvYyx+dCFLU0NtQmB8ITMxb2NRZDIxVmViXjk2cDB3RTlnbV5bSndnLit3ZS55'@;
put 'V19xZzBLLig2OTEzZmRMNFVfWG9OIXV+LEJYX3czUzZ8MkVHfjhoIz50JXZJXnJ6bmd7V3d5U3QpcTBTO3wwVDBYYEYuWj5CW01rX1Z8L2hmJHxDXU4kNTVtOjdlOmxnQEMsfjYvITBaNVtPS1UxeE07YGQ5NW87UndTSDN4SWl6RF4sNSgqKXYiUT9vJV11UkBgME5HUlNQLClYKjxIR1JhSDA8'@;
put 'TFZLcCR1OTgrd1dVPWxgOzJjRTJkWn0oTmRTSzxsPi94ZFBjPzpSLmFsaytvMWlEOV1tXVd1Ok9ubStARjY2YiVXTE4iMmRFKVB+T0F3MDcwTWhmfTp0PTdZZU1+dlYxdXUrKTJBUD97KWtEVXAlYC55LyxRW11OK3lQbm1vMSF+NFE2VHJYc15jJDVUOnczY3dxZkN5WTtmaz9wUUh6S3s0e2M8'@;
put 'eWFhOXRLQn13LDo1PEd0QGA5OF5eb2IqW2dtUHt9WzUvUmY8Lz90WX0+fFlZeTUmRWhkMSZGKV9dTUAhNVhrNzNqVUNLJEYrVGAqJm4kPS4jQjtyXSQpfERUQj8mMnpxdnM/R0hYSiF1VHJ9MUQmLyFWJmshcE13S2ZPQSE8VXx3R0pMJHJnaFVSSW4yI0R0I0VmTzZ7LndmYWV0LGxtSnhlbGhV'@;
put 'UklVZmVsfFNnemQ3PDtoWmcwanAoIU5mVVh9MFQwImdoZEFyTjVIWDw5VFsxZXFgJUJxfShlRjxCPkwvRXFran10PERsN3JIMmIpalgmXng4c2MmdnQ6ZS4sQX5KTiQhQl4oRiw7QTVueHM7OC5SWj86V0NBQUFBcDEuQipoW3RNdmhHUE98aF5MMiVdZzFXQkFuVUI4RFQyaiFTKXkyWG0rJElB'@;
put 'R1FBQUFVRWRaREFwMUhtPG9EPVc5SThEdCsvUSEwSlljIixtKFRZfH5ZcnYxPy4iSGtZSnkyWGk8fDNAKFR4VTAiVnEjOitgc0hPYitSVUIlUiw5LiRZQ3szdXpTNih9eDFRMzsjfEtdTDp5LH1ZMVk+flo2ZmwyRD1LNWp5eCVSI0dBJTVkQXdMRUBgbkVaMEtEVkNufG0+ZiRvX2k9NDVnYHVg'@;
put 'JWpwPzo2Yz1ubT92Ikw/RChEanI7fDslYHxnNyp7IWp8a3NCJm9OeSFQRFhJcGRGQi99NlM2P0wvSV5CImQzOSxeVj1TNiJReWI3YGp9bWBoKXlzcGd4OEFjRWw+R1l0bGFSJmElaW51eHlnbGZzanV9bXomZk9PeypYPE5tJSRrLG9DMVZaekE1ZDpzeUsiQmJAOHxgfFg9NDdhPmt1eS43I0ox'@;
put 'W00/RX5AV3J7Z29KPml+bnltUDk6JDxMakd8IX1IbjFTXWpZNDx2MFpwaiksTH5dKHtadVdZXURvVTUxQyJuR2s+OTRxZSRpciE7bVtxVWQrQnt0PSw8dzFXQHxYY31bTkgjdzZxUmY0PTJ6TVFvdUAsTFhuVFB8XldeQG5hMDd8WS5fOyUoLF41UkUwOk1XRU5NNGt8RT5wei4pez9GOGdZanVp'@;
put 'bWdDPn5EJXomYjlsbnFHdlYuZD4rREBKY3kyKzA4UkF0L28sO2RmNEIsMSwuez91KlFCPyk4bDw5e1kvMVE4VUhuPygjeiVNMTZhRE1Jd0k1IltnX2MiX3pmN10zY1hANzRAUGVPTXQqWWBWfkBqbDBQayVSSngmaVhWa2UmamA5YnNIQFo9WmtbYzY8ajl8U3RGcCQ7TGBJXXxSSmZlWmJYKWtB'@;
put 'Ryx6V1hbRFdSUnA4fVQzNClAYml3bGYkb3Q0Oy58PEZIbi5xaE5+TnREcDxgUntKKzphLyNGIWhzYTRgKnx2akc5bEEvfGVGVUM1YVJhKmJxWT9WaTwvcD4jeEIkelYkaT8+aDxHMzVQS35sSGteTH42JUUvIiVNZUN6Q04rd2BmPEE5XUsxO05yKjpEenpuc3gvTDZPRVg5MzdbPUs1bTt2XWQ5'@;
put 'ZmxIT25SbjIpaWtsV246bjNQa2JmInZVKH0uc0d5JSEqQCR5L3dvdlpicDkiOHx0KlcmKnZlczMwN2VEM0EsPk1YQnllUlJ5SEdEM15LLFM0L2hseGNkaTBLRW8mYl4kJW5dQHBNOixaYitXIk1OZVBeKUBNJHFbQm8/eT9uOE5DWTFoKTZlJTwiRz9LXlU6X0trdHBzP0RNeXYsYEIvJHI8TXQ3'@;
put 'Tkswe2lKW1h0NE5PYmFxflRnSEtQQEFfN3BOdXclOWN1WnIudEhTKkp4WyVMOEZvcWR7RHJYPW5IL0tZSVtxUz5qeyhKQGlbbClXcmpsMDtING9ZVHsrfGNFSEszXnl+PiJxYzx+cXBRIyQoW3dXX249OltfJUBDZ2Vbb3JMTj04U1FTe0Jwam5GUnNlcWBOfG9pfS9LS3N5K0xCITI/L0RZIV1D'@;
put 'KGE7XzloJX4+PWRPVU5hWXRXa2ldW0k7NHgsWX1Pd3x9M3BGZHFXSElRVCwkWkw1a2JhVGRmayhmPSJzZileaUN1InRxLDo2PSpUb15aOm1MSEN9Z2o1a0wmenJ0aUNkI0VdNnxYJj5LS29zK20qRzpUXypPK251PGpuTVZmZCl8Iyg2YlA2N09oNX5dfFsucEl6NU5Jdi5bKUNUQytOSCYhIioj'@;
put 'Vys0aXFGJFZJXWlUYEVzcCRbKnokUzY2dVBKMmI4UD4vVFRnSGUvIitjJWBJMW5sQmhUN196NVAiTG49KkRZW1NocSt3LnYhW3NGK0x4R3NpSkpkKCR4d0pjfCZ1ZWhiXnhqRztbTVI8aU9sa11paVlEIW9XVUdIVj4mVT91fEN8eDxoZUBwNFUjTUFPOCVMTmQqeytGOnQ8KHpWMCkkbyVLTSVM'@;
put 'K0xQTHdYJUd7VSVEZjJmelgzYG51LEFJTG4uKnZmT3A2TXNMTUhHVl15U0lCQSgqbiFabWtlbC5fZ14zTERibU1vYCNdWjIsZDh8Klg5PUxXMW8uXVVyNHljK1UyeXR7QkJMNXVMXl5lcG5jT0Vrd3FkJFV1emwick8+eFUoT0giWWdPQ2Iqa3J9c01xSmw1YTRPSj02RX1SRzYqWjUvIShnI21e'@;
put 'LD42bUtUakY8TnA2YlY3RzJoXm4xc281WVtRSUZ7TFsuPyNbXSI6IV41NC53ZzJBfihAd2o5UEpSTjdrS09yPSN4VUhnLnR0bzVic2tXR1hYZ3JZOn4pYyEuTmQwWHJkJEJfRD1GX0U+akQ+I0ZfJW08cU9DYDcqQDlgMk9XOVBnTkV8Q1Z3OnJqX2BVYzgvfWBQJH5ePW9PLD44WTQlay4iVyov'@;
put 'V2JaVCwvM11fL3NGVCQrQ2l5L3hyUTI1XTt+aXBqOUhnV0YxViU0Um56VVVIPE1AREc6fl5XWXoqUTYvJDBkcilkMip6Rkp9e0o6QyYkPkVhdzVaQWZzQytodzpnYXhxfFFoPC5dJDZFUEF6NlFVczJyeThJZDVAMno4c3NGeFkka09rVHVWUDo0TThVRTY8JHVRJSpWKyt0K35ZemxJZ3pfJnBP'@;
put 'QjtMZl4zY3IxTyMiYTN5fjpJUlpbQWdLZlBGMGVQaVFsYms9cXt7OkxFTS41NHJLfGkpVSFdOHxHSTA+IT9MbDI6e3NfJX02OnZJcGhMeEBeKyY6bHV8RzZEK3RIcj9gKU1IbWlFIVszZVt9SW11e0Z9WWQmIXJSTnt9PktpQGRVKH0rRUVPQUhnYWlUWkZ9LmAxRVFKMFkweFRdX3hbRXsrRSts'@;
put 'P3xmZWVheTF8JVpjWmR5OG12cih3SypxfUh3ZXIqcnlTJClMMnx8cHlRKVRXTzNueHAic1l4aTNLU3ZMZ2s4TipqbFVYP194eGFBaTowOFJQPUgjR0xSOEhiKnU8TmFxKngpW05CMUw9Kjw6QTM5ZloxQUZgRFRnWHZ+MWZmUllFJCVdP0UjdSI6b1kwOGYoaUNULmlHN1V3Ul1AVnc7KnlHblZ6'@;
put 'RWciX3hkWnowN09TP1R6X2lqdjxGcSFbbGJAaXVvQiEiYDFxSXRUfUVZc2pAZjVWYGt1MiRMPzk8Y3R+cmltNVcxVHlCISFOZD43S241dGhgYDd5WyRCXU5wbzlwW0dufTNbPCJmc2VkIWU0cyIyO305Unx1Jkw0al0lTUxzLDZpRklicF9KUlAkSyNgX1s9XVAkRV9NNVdHd2A3a09OZDR9Jl5i'@;
put 'fCVhMEMzYE5NNnpJVCYraD4zciwiLmI5IlMwWFMpVmJAMSo6W0RgV0hyVXJQR3dYTmw/ZUFOJUJvVCpZbDUsVVIxMDZjbDIqen0uenBTRjozcFF5Rj59PiZCQm1fQkI2YVNFRSJ8I2EsYiJiMz5QL08wKkw3InVDLzIvTSkrX15oNDRrflBIXUVXKVd2YH1QemUsMCJEQkcvaEFsYkAyVHNVXXt4'@;
put 'U09eazFkQ0psTD1QW0B4S2dWUV8hdDZqeig1PnsmUzBwWl1gZTBjR3QhUEI0TVMieVIub2gscXh3S1E7XX00OXw5N3hTNVUrTXxXX2hCRGdSSXl1dDFKVXt5RzhrTHoyWTNQNz9RSENHWFNtQ0M8cVg8KzQ8dHIrTVRUISxTIUJHWUI8UkBEPmooUntFN1VRSl1vbzVWPXMhJTo4Jk1LZU98WE19'@;
put 'cDA9WEdTLCNibGVxRDoiQ14zfkBOeUxWVmgzJFpXa10jdlhpNW8iaExbK2BRP016U2pGaT9HPCl+dyUlJmNgI0FlYDRUQEkhWW1kJSZTMnkiREZlUzlrSTM+UERQVk4wVjluIVtvdUJmcHBLbXJuemI0QURBWis1fmVPTHQxUDo+STJBS0dUTVEkTyJoV0syLndfNnhlTDpxRFBCdmA6MHVybGQ+'@;
put 'YFgxUS5Udl4sdHpqLnliOFlNOWZZTVJTP24/a1FjOCYsTTQud3tmLyEzL2s/NygsaUFGe3hvfmZRO3V5aSR2PnY8d0haQGxJIl93PDtrXUZdYDFyfnJrMzZHblNrTWpvfTZDVDhsYltJWm0wNmV4NlhEY2lWZWI8PV5kSFhSXTlsJj1yYG0jaD1oJWdsJjBVOi9GfUZUKTcuKkVtUWxoYzA6U2Ar'@;
put 'MHVCfl5ic183YzlPWj4yWV19Kl9Bc2U6YG16ZHcxSHtgQjxjeThOZz1kZGZOU29uMWI/ZEZkTV9PaW9gX0VbW3pFJnVnNkYsVVgzSiw1d2hfK1s6ZjQySz5HS3IhcDlDeT9fSEJOQClVImw4dFRfTVNxJlM4VkJNczErQz83UVtZamxrTyEuSkNTby5ZdWEjLEJSR2ZwVjBDRFN2NnE6RGxofDNH'@;
put 'Tzg0MnswZlQhLlZqZ01lTXI3JlVqNnQ2ZHUjOXlpPjxPQCl5fUxgIno2LE5ULyRVP2U8U145KmcoMGZxQUlMcGp6M3R7Y3IuWUp+K1ooQ1R9YEI9MntKMGkke112aG14QC4rTGNTUk5HPDFmaE18JTQoMnEmbTA4NWp1KU4rTylFMFpTSCwmTyp5c3Y5X11YLEtsW1ZkV3lVR0dPWCQ8bSFxSCZ8'@;
put 'QC93S3dsQjcueFJmOUA+ZzcoOWUoTHhLZj9VfnUsOSghIldWYisyWkh2SVdiTzJDW2pBPyFWPlJuUi41QDwxYk0/RHdYZykmP05vUU9TTFgjYSNCPm1lVHdiJUpdK0tIXXBEUTdCU24sbW9jNF4uMlQsO017L3Qsdl8iNnQ8Z35DZz5dMGB7emJlImw3Pl9EL0gvKmNOOHAjejouPDRabWw+Ni9v'@;
put 'aWJdSERoKjtiI2F5VEM0NXd1a2RZYn1NTWlDPHVhSnQ6RzBLXzJLJTVYbXRPP0IvY2NIJjdWSlRZfU5AfmhdN1d4PjEocXR5RzFMcWJ3QldhcHBqZ2MlX0cuNE9lUEVJbihaRUszfUh+TnJkMlByPmYrI3c3V0U7Zn0sSHwlbGVlcFltejZdQF5rTGlgKjJ7JCgkUDcvTzQocXh7WHYyTDFSeE1v'@;
put 'NypLRiE+b0hwZlN7ZTZBKlgobUxxU0hJPmkoR0Jbez9samUqK0NeUFtDKVtRViEqRURZUTgvSj05cXVzVTRPI3BZWUBxVnlddkhyIV92P3pxRnUydHh5PC53M0UvZ2JENTJVOUYwfXlkKEJSbWpIO2tVajokOkF3N1EwWjFWNVpDPzBmPWI3V1clWGIubGV1NktKdEVpVj1ZeCx5OEt9XW9qRixn'@;
put 'SF9+SkZIVU9xX0lsNEY8Z0lSRE9sWDMyN3pKUGhUZENXZ2V9d1JRK2tIdGwwezh8dyIjKEl8MDdSTDkqKCt4T241SFFjO0xucyFEeGlkTGFSd2tuTDk2JnhgdE1IO187UHN6S3JvanksfE52ZlgyZ1MqMzgybSNGZWh3bm4/fE1yPEAqa1ZlektzYkhNdkNOcTsoKEU0NSs3flYrYW8yPG9FMTg7'@;
put 'RWF9Oj9PbXlfdV54a0l1fkV+cSlGKCopWEt3NF19RjpsO1pKaSlENnlTb3pKMkt8ZS4sMTovOGE4MTZmIWxIPzBNQH42ZVJvdEQiaHdLUE8sIWheZ0lPM08+JmdTLjNPflEme2B3QGRsNHBhW2M8aj9PaGpzNTdGWXQ9UDhHMl52QkB2QEFna31YeERKNkx9NmchI1J9bEkzc31sNC5Ddi4iS35R'@;
put 'cXpQZU9iUH4kWV0/cCtJWkJ+PzRPbjp2K3hKayw7eDUlc3E6XjVRLzREZl5gUHRtbFssWyw/bm42dEZQdkU9YWJuXUpEP3RjTDhXanNidH4kSG49c092RTk2XX58TT1HPXV4MlpKdU93L0hRKkRob1s1cGEveVpOSVgkdXA5bmZ7OjxxQ1RQcUZLW3x4Q01sT0RGUUtieXtmaGcieXlkQSVBTWM6'@;
put 'ZVFFdHM1Tk9yR1VVKVU8dy9Pe01mZ0wlb04sYGhCaDpPTX5FTkVSJVZXVV8uWVs9PDU6LkV7dnFvLzpQSEtbezJqWnNze103Yzp1MlMmVE9nQk9DOFteWnAsS0Q3VnYpKH0sbyF2UjEkfTF0IkFJflB1dVUsL0xyTUtSUE1EdlhocDBhZlRUWSZodmJVcmxdMVBDdUB5P0B2I3ZrYWB6RFdFKH5I'@;
put 'PDpgb1NZWVIhfSZhSnRyX3ZieH5SQ0dxQyNpcCo8KW5gRTxFSE8uYm1GcnFxdzZnOWAvLnJDMU91YlcwPjxVXlBoWVpQKnVBMHdXa1lofDF7aEZ4TDtTdlZPd0wxO19HaThrVndzcGNhTlBTJW1Qe3ppZH07OEpRIX5Mez41ZSZ3cT1jan0+WnJKJmA4bXFtfDZtRHlXJXpjVnRWUlQlXk9TRDxF'@;
put 'KGJDRVQ3bTskZEJjWTltVGwlUDNFSmR+Rk5+ekVJL35bJE90ZVs0djBIUE48Nk8hXTFscUkia09SdklWKD0pVC5FWDBbfD9gQVJaL3VbNGtgP0wyWkxoZyZROXApa2IhSExsNChHTC5DeHhZIm0jWkBDTH02Ri8+bGNJazZYPzZifjRSfEFVZEpyUl5aWT1FXVNATEFLWzY3JlQ8Ll9wJGcofEom'@;
put 'R3FsRXljUnM2O2wlMkY6NmpULlhzME4/PDM3ISg0bjdaWHteS0pCJDxaVF94RDolOiUyIUR4a0NhImdRImFwIXVkQix+I1shYV91THY3SGFwSntrbmVyV0tdfj5MaD8kX29MPFsmdnkxUjI7bENYSFpYI3dSL2h+Nm9pT1JeVEp0ZD9ddUxwXTA3I1FIMlklSUI5L3ZjdVp9WVFdRyVkZUhYLDMq'@;
put 'ZHY7dFkhNGo1ZCZuS0BEJClNe3JHY1I6ailnI014PWBoLGZxP0FQVFk6VCojWmNYSFBySXhFVUxPaC5dX15fK1d5UU5jNCMyd3dabz1LUVIwJX5pKCh4M0JwOzo1TENLNWYwPmhCdzpCOV8xWGBQYltafHhfKH5YTFFEaW5SOVlbSiQ+Jm1dQGNUYXBMY2tWVD5TZXluNENJWCVGJDIkTXdNQTks'@;
put 'U3NlSFpxJV9pOk5zVjlPJHxfY15xejdiWF9OTS5TUSpmIzJYNV9IJm9WSzAyLElWUi9fWmZFaVJ8VTpzOUhNbzBwJVMxYEJTam96PkB2ZkV9U1N8ZX59b0I9Sn1LenwuOy9VZitoOl1+JihZVlRhVHVbLHwlS2ZkVXIyIn5lKiU/JkloUkI4WGxwPyxPPTZLZSkoPiEpKjtoZWZ6cipiYDxARTAv'@;
put 'QyhWMjpWbjdOX1JMWTt+bjRmNmcofSpLIzdydH5pY0dmUVBySGg1OVZRS09kJVZoWTtCTjQmbTVdJERsbldAYW9SbXg6VGVhR0tkL1hgcU9AUF56eH1SYWNjVG9wcipZUXp4Ljx1dCsySmRuPmxmIXlubzVBYjA2PmZENX5RSVlhVS9EUzpCYjZ2T09CRUF6WjVDdnNsVSgwTW4pai9Gcn40XXk3'@;
put 'T2hMTFptbiZBYTVnRHBfUHs3MjRANTVfZ0dJJGU9ZixtMltqWWIpaWIpI1gwaF5fUzswKHciWWZbdCh6aU0vTjBKKTZKeFZYYTN5JX5SP1B4YkFUIS5kZmt6PGRmMm51ZH5FfCxHdGJqRmY4P2c0XWlkSlpvZG5naCp3TDsoJFhQIzQweV1eZkY6ez0kaiQvUFhIPl02dWtsZGtib1c1UEBROTU/'@;
put 'U30qenxqfStNYnFEYUJ4IzQkYyRKNHpfd1t4Wk5PMXtZUSNSRW9XaFQrTip8RTFMYkg7fmEyRDFjU00rV25QZkQmfmtWb0k3JT9obFU/ZWddejNXOWU+SUgkZ2JOYk87eSROXTNPTC8zaVFZfU13ZUl7bklbUS4mJSs/e1hdQVRVbTxHJiQrUmB2cnJMfWFGW2YudGZJQWA1RyI3ZjZCPU5xJCs5'@;
put 'ekQ2dHEiU2FQU1VTT0hGMDVUaiZgVVpMMnYoWjlKWEA+VlU/ZXlVYT5sMGxHMD16ei93RFY6P1R0VyFbX3owcF4wfjRrZjNUNDJfalUmd3w7Xj9iTF12WzBdKU5SflEveC54VHtwMVoiUz5tIVtbZnB+anNOLmdDYnNvUWxrLHh4SShgN2l8RmshRiRgZVVXIUsxPihhQCwlem5BL0p5ODQrcEF8'@;
put 'WENwYD4zRUhbYzl5bSM4Q3FRT05pPUh+RCxHYnV6alNocG5wKVlIYUEzKyVkOjxEWWNLYG9CemA8aCQpaF53OTIvNTh5ZCNiMns2M2daQUxwdkQrSDV2NF1JZGc0a1tSTCNXaDY4U2pUZiJOQmlCOGNUZURhOFlZR1JffHpWeChlNFBPX2FDd2VycmokcyV4QiQoVzIoKSYrUCxfZXl3a0hlSjZW'@;
put 'cEBedE04PVV7b2RBTiQ+OElAX3MrKWghRFpJSmY0WHx6T3hiIzslcV19WiRTbkIsdHlFY1tmPU1oampDXSR0dWVeXXNZO106JDYoPn1hI3tDfj9+YE9nMGF1TGJ0KilLL0xvPSNGYndDdmkzMX1OUj5tVzxzP0NiKS50QFtffC5xI35MJHlLczUuYjdhRl8sUGUjb2YxUmhvUUZldkc4L15WYVE+'@;
put 'aD5aKmRCMiRBfGdKX19afjlmIjdaMEVyQ01dKXt7SF5VeW9ULHUzT3A2Pl5xYWI6O2lUNVdSakBNKixDRTZNKmswaW5IM2FCdiJwKDNSUlp5ZXEuKVNFM1p8N302Pkc8ZVk5WkUvUDVJSWk6MmYsWCI0d09GLktGT0xvfkZGayMobG15LC9LQyh7d3V6UyU5el1yT0szJSxKNGo/RUxranlDdEpJ'@;
put 'QyZyQXdmemRkU11gKDl8RH15aiR9aXk8T14kNkZgbyJePTRKd1hhLjh5bWNjeGlyXzN0Six6K1hhY2FRa21KLEgrZSlyfHRkU3ZGLm1rTGxwQkpObj4xUXpAJCEhVExPdV91KWJIfVBnXmMmK25oIlJXUn1+PWhzNHN7bzglNmpYNmsmXlMjdl4/UGVbJl9CZS59K306QmgjPEBTSk1CNH0lXVFj'@;
put 'KmBbVlF8Z3ZMRC4pY18yNCxPQls4WG9TTns3TkxpNVYmX2B4XVRYL3o5WjxQeXdGI1YlYV1aKlZrSVsucio2TFc8Nk5mPHpCWj45VFpOOEJmUHdWMnlzd2tNR2VQZ2VfTGtXSXopYk0sL2JjaFlXY2Z+QXx9KFN7PitSZFhwcmx1aFJjbTZ1XlYuUTBAPkgxKXNbVi9JfSt0fihTfnZXKmVfaW91'@;
put 'djFyZmtjMWxiNVhfVXB0dW0hMEBMdXFPS0JlQyJSRzlqe3pOK1JQdEphfW80YVlzJVFhNHNrMjtsTCI3biNzWCYpeGpPS3lDUFFTQU80RysoYTVRR1hsW3QwaCMhQGt5KmBJYDdWNnkwVi89cXQrRCl+LiEyTyV7JWlOI14+UzZIem41fVFMN0VFRWZrZ0NIZiFHIlJAe20qdFBtcXBsb2JlKFc2'@;
put 'Il98fXJkZitDLHBpdXVkPWpna0NsUm11VEdXZkwoPTxBfjZRUW9NTTxqWnBEUklyTGs0RnpkLEB5fG1nflZyOTNMTSJTXylmXld1Z0NvbEduRE4lST9daWhIIU8vJD5ZRztwM2BmQkttKSE1d2wqaWN0O0Mhel0qfSszfjBbRUcsVnpJV314ckRobCp2ZysiTjMmQDR1W1IyUy5RYG92YHl9U2Ei'@;
put 'WSNCJn1LUTJGRWVBcF5vLyhzViN2USZZTyFfJTZIOEpeciJ8YCJQIl1yfHUzfiIxVmIjfSRLTFl6fHlgbVtTekE6M0Zsdl4zTi8weW9oVTlXPSRlWllKZ3wqJnFbfmI7PF1SaG8mYWxIWTVqa1dJfH5XTEFBP1orYWpXX21gajpsbDp4an0xfixYS2BIOFUsYl05Zis0Y3JIYEFEV1ohISRpZlpa'@;
put 'YElrR3F9cks3U2FJJUc1eVh7fVtue1A2VDhOQ25mVzVBZWpOKioiTXY8JHRzXkozYlcxW1shcTh4SzRBPnFYWH51U2RHXzhbTDpKeUk0Snl6YXVaSzx0Mm86VH5pPVJpdHRqL2ZTXlNRYUJGdnNRN0IuOSFMMGY+Rk5uNSFMPmFxPzgyaSFzKTFCeFYvaj9IaXRTJWZzZ302OH47Wih0NUwrckll'@;
put 'fU9fTz1SOEUiNnlvSEhLYiE5STVafHkyMEdTTSxRc2A/ck9IelZMPzVPJU4rZHw1UGcvQXV1SFh8MDQjJFE7dU4kVW9eSk0/MChJYDR8VmN5Xi9GSmo/NHEjP3o8fDJmPk8iYXQjPFFoVyloOWVRVHMjMG9sKT5YdHJ6flloYixFNGdNWmBTSDNFRCFhMkA5aCEqXSsjLzJlTntmOzwmQVprJWdt'@;
put 'T1BUKCp8R0YqMz4lYi8sTnU4cW0iR35ZOUwjbjwwJHApciw9XVImUUomc1YySFpqP2YvOHk9aVg0Vyh4YV9dPldARF40W0QqeE5rcVtJZTJDOHZENWwue3FfeX1LXVklQUpaSWZfNC85JjY8aFpfVkkjOGZ1fDFYISFIVzZvUDx7N2p5dH55dGlBU0haJTAzSGdoSip9Q2xnPCJ6d21UUXtlVUdx'@;
put 'bTxwXjVURilkK1JFOD1GZ3sxO31PYzRKPzRjNHhVMztdcTlCTjMpWDtSOT41Umc5ZClrZXl2IUdVJTlMI0FfdyVyJSVXKW1ialZnWy9WdyJJXTBYKHZAaltbYzpHXWI2P3wmNXI+Xl56JE4vW0BgRUxdQCZ3Z1RPSG19bC88TmZzNi5ONEcmejx+NmtjZzxPVzZLb0coUmRhVntoMlheTC5CUlN1'@;
put 'di5QKF94JXY/b01SbzNpIzpUc0l+MGQ9dSxRYX1pVVMlWm9YSTBCRCZ6KztYMDs9LHN8Z2kpa3MweW9mNmlYWFtoKTNJYlZKZCM1TUFhcypyJjNLLHhudUQySVdLOmdmdW12SEtFekNVdDosc3ZYZHxiXT1EYi5kQjNxRSVFPDcwKUxQfm57NS91QnpSPFYsPGIveEYwJkpPd0FqXnxTVCxvL2dx'@;
put 'LnB7OXdsdk8wXTVwZXx1Q1J3NV8uTHE8bUNQVGpYbDxPQnxGWnE0UTAyUUJdaW53KndVYnRDNlEvZGUqXyR0ViJ8ZkB1S2gyS3JxcS9PPSheW3NnbVZIemE4PmBbKkhjcGxRNWZ6OXFQJllHfX19RXRDYWlmPElxQH1GeV8qK2tsaHk6fil0TmlnfDRRNUhBZmhSbyhANCtXTGtUZigoOWlnWTBZ'@;
put 'SzYuWX03UXZhXXckaCEwaDlkQW5vVkJtN1Y0WT48TDVAP18jLG5hYDNRMChJekIrbD8iUC9ZaG8lZlpQSDhYZDNpZTFwSH19QStwJDVWM354KDROZ1tBUEdYQzZFdlFbW1diNDZZV1VzJkUsW1VlR1BPOGAyaVRYWmhaQXZ7LF5HLz82eSFfNW89I09RUSpaYzUjSWRaLiV0M3N+d3I3VX41cV9V'@;
put 'MTxtUU8jPCVMfV1xSTJbTEUrQGRBeUUze3klaGtjfTVzUnRsNHRdVjg6S3pdT3ZDSDBUWUVXbV1yLzBfNFchPipsZUtuISlHQz9DPDBFfikuY3pJK3lIKXBPIVsqe3YhPjllYFB0K3VgOTMid0A4cClsNVtfSCQ+WWt3a1pgaSQxOD1Aa3MjQE9Db1kuQEY2QT07aztaPl40UihKbjpgPyM2N1Mz'@;
put 'KldLbmN2L0dzdktQK0Z+e0NAWUpyayw8eHYoVGdnQjpUcjFgZi8vYzkuPm9MWT1eVVArT0RSfHBWcGkkXTZ0M3lATlhzMy9UPjpafmEsPEc0b0BublY1XVcral8zcEVTYzdCU1IzRUMxX2xWI09DKCJpbTF9PihXYUJhOStRSVdNJFp+SCRFPmdWdC9RK0J7eCgrfShTdnFiaHd9YTQhYlMzbFZF'@;
put 'SCNbfWY+UW5OU0t0QyhhJm0kPnNaeDkuekN+cilVbUtYWTdqfGM3Pl1eXiV1JENPY2dOSlJwOF8qQGBSVFpAL1VIZGR3VWs4aEh+O2NsUiZyJHc8T0VfTiFbKC9QNSk6WmdGVGA7PWtsVEVZdXwrTSNsKHlde2ltIyRjd1lBfSZuWmw+UixCJWYjTml7JXpWbG9DaDMzSDhKYkgmRyZvcEN+ZGls'@;
put 'WEYjM2c5KVdhUEolNGlLU2NyT2tveSQkbG5nNlc9KjImaDFeVU9wand6dVskNT5Gd2tGe3wjXUUpI1srUUB3elRkfW9aYmI8bl5fZU1rcEI0MmtZMGtpYz5QIkshbnguakA1bC5TeVIpcDMkI2J3Ryo3ZiFDQDxlY35hRD9OOXp7QHk9cHh9d0Y+bX48YDVwW0l7YnFnR2kjSFBNSXdBZnRUMERf'@;
put 'Q1JOd2gyeTpsM0cpXn0qS3t3SzdOVWpvZG1aVDc3SEthQngoaiJARE80L246PnomTVBpPjRbV1Y6Rjtdb2BGJWlaV1gmQ1M2anNVdEA9cS9XQjVzQjokckB1JUFrQEhVPTpMTiFiRntaW0Qkal1iaTVteVN7LGdSIzxjayRWTm9sdy8yVTxGW2guOzA9SHApRGRdJi55dFJvSXdDfSNtW3BHPClA'@;
put 'YmttciJAbjdoViE4OGhIP3sqQHYzKTVMcFB2K25+PH11TzR5RVdVO1NHKWpSajx+PGl1TjtwPHxzL2lJISEoPzpwW1ZvPGxgemhJdHIhdTdOeSxmVktTeVNhcDEjJmwhez5Ldjp3aEowO0wuQFo0RixPbW0hJSpRZjtyVXJKRkxdfUZKYVFaNiZsOkV4ZktPNy9ET09uUD8iUGx5UUZVfEZsaEgv'@;
put 'K29+b1Q8LlM0Sn09d3BDamZePzAjYCZKTU1ySTMuemFlNDtMRiVRSVopYEkwMXR5I0lqYmBVUVdLSSxBSz0pY3FacGElaDw6XnBfOCVVUVc6SHJJaDp3UH5WR1lLWXAvNUc8UVsjQzA5aFB6Wl59P3tSKntfMmU/ZT02a3Y9diZGNko7cyxvS0wjZCROYjx0fFkibVNZU1UzfnpJUX51PSFXZW87'@;
put 'ImV9JHAoT2kwVXIvU0pjMDh4TyRBZCprQndTKlNhJGhdOTVjZlJ0TGR3LnYrT3YhS2g5bTRJTD0ibmlHYjVEajhMbXshaHFkYzg5PEdwX3psfkYpakJxS35JQldVbkJ+dyZhcyE4NUkpd2VYYjBnXyNfWStQLjUpLG8wV2k2bDssSSFDVl5JZyxJTVE0KDFTUDFROmJuQ0J7ZGVYLlBIMHdvIUZr'@;
put 'TktQSm04OyVSRW5OZFVgNyZWcjMjKztZNnBfZDhGU2hiYSgkSTIpfSMheiZhIm0kJGpKXyZidDRFJGxmI1t3MlckVXVoQCVZLDx0Uzc1Z04ofSYjUEpXXk9BUjpiMmxrRkpPeGE2WENbSGw/bj5sQCI4PTU3RkVOK2E6RXk9fEVwImxtP1A3azFWY0ZHPUQ2Rj0/fVU/aVJBUEtTWkYzVkIje35w'@;
put 'eV9kNU0/TDF7ZmxlTlIqKnFlXV9bak14cT49e1VMNTJgQClsYU1jdGhgbHRbP2BEN0NxTHhQM0okdyExQS4qVDhWXXA2SixXJDo8UDFzc0BoYXgzSH5gJTd1dipRWFVAXkNGbXhEZk8iUCJ3PlFoJUw0QkZWWGldK1FeSElnei4jQCpnOVh3UGBsSTQvWUBCMnJ9UTpRZEM0OyQkIipua1lFZUVa'@;
put 'Oz8hJS9pLCx+e0NKLjZHRDQ6REBbcThGWmZTJltnO09LYnNaJD5ASEYwJFNJXThae11sSylIPWJKT3w9W0dobTw6fTBJQ3VbKnNwYj1aem9UPCFWQjhPXV8xV3s+OFoyLyRHKWQ2QkcpY1dlelgmVmcreTkjaVJ6fEQ6Jms2MjtWdE5rTUp1cG9oOnFEe214JU4qQWBSbnspXUFvcSFsOk45ImxN'@;
put 'dT8yRD5BR10jNFlEcXF7dStmaDE1dkVPcF90I1V4TWIhXVVCTX4wL34/S3VRZnBYVGlAcHguM314Mi5lR3UkZEZUSy9UTGNzOnJAa2g8YUB9Y3B7OTU2TmNkRCtQcyZ1TWg6R3dXOFt+TTleQ1dZZTVkP297Xzp3dmdtUC5yUVVjYzYhQXkzZSx1LCZhb1c7I1dJaWBbNShiZFpPZWdHIVQiQjk+'@;
put 'PyZyR1Y9bEB1d0UxOEtLdz1BUjhoYXEzbTpxI2oqKldCdSNfQkU0JiZQOVVOa1FyRjF2LEdYXVp6OHpOUyhmWmYiK01vLipbTUEpYUJ+eWgpenksTm8mUVgjSlhJVy9KYSYmSV9oc0BZT0dWRG0pIz0pfSxTXU91XitwODgkNDtuUWQjMWc8RjhpRDZlK1BnMShfRyVtIWhrcS58SCFxInZdL1kx'@;
put 'TUAvVj0/YytRKiYxR0dHLnFWX3RlTTh7SSt1YURkYnpLWWleSEllYWhgLmJkTitzZilBVXRGKmIkbVFsfURfeCZWPD88VlRhLzJqL0FLRHVtTG1oMiNSfn5pKWJCYH1iTzYrLn5rQitDKUJhQS58ZC57Im40Tl5yQ09gYjN8UFQvalZObjdXfCJHVW0+S0tOelFaWiRNfmN7fntOWWVUSD1HV1Va'@;
put 'Uzd9P0clbzB0SVpgS1FBPVAlY2YyfjhvNUs4PiQwODtgMXAmeGIiX3dyRl4mTTtdX1suUXtQVTNRYUhZfWxXPHdEaXFJfnZtdTc7JG1iUFgpP30wfFN2XnJaVjtTUSZ1fkRhRT57Q2pLaGQhVzpnNSkxYXp+YGojQlcpTmtwajcqVE0jbSxtPHh3ZkUkQTxrVUJpWkw6JTB5a14vYi5WI0I7biRw'@;
put 'YX1tUTJ8TlpkXkBVa1F1Il1PM2olSlQwU01YZjsqa3Q8XX43X1EqeHJdfSk4eTk8VU1bMGFUPDNIKFMmJndQQn5FXms5T1AlclVCYEZgdHwqZEtlPVFHS249TCV7WiltODFmeEEpan1UaXFgS0doSlMwWmRNMkpmYHhLfVMlK3h2bjhfVGpdL09pTCVdQ15rRDRfOz9rYChMU0EzdU5ReytGaloq'@;
put 'QztFfiZeTiRdMW83WlAzMltCdzNFXzoiRURUeTtpI21NMWRnajNPeUN8PkNgISxwbDUiKTppU3xFY3NsXzx9Xj86Jn0vZ20pPDgzb3ZeKVpqblBbalA/Lzd8bjx3PW5XUWN7TllmKSM4SWV0Q1pGU2s5KmlrMjd2ejwrNUAxLDAjX3RFVztkTyFnb0hLeGIyflEjZmI3QVZGYjN5fSsxVldOaFl7'@;
put 'ZU5vPltkV2xKU3cpQT4mPS92aV5Gd3ZMLjBUe0ViJCplfE44TFYlSWo3MjsxQEhLVl9qWjgkfl9YX29eZi5mciM6NS45PlJxRiY8X1RNSzJXfEkvMjJwTyVvK0V5KCZpZnY+NVppQzUhfjQqaGE+JDo7VDl5Nl4vZkN3M0EpImM1LH48Wm0hJTZrPWxwZH0oRS8jP1dvI2Y8LCZRImdfS0hsOVVb'@;
put 'MmdIYHcsIUBJejY5R1IlZFtSdGt4QE9sUV4kVjRGJlBgPkdQfXR6Z3FsKDtdTCMvI3szT3RIalF8d0AvdkRncmJPWkZyUTRseVNsOikpLHE5Lzg7N1l+NmEiXm5mT3ZjSXYyQy5uNCU6NF1JJExZfTpvQTR+XXR7SXt5dG1SdDx2Oj12TnwrRllILzhPVXNHMywjUi5MUEJtUVNidzNHY3pTYFBA'@;
put 'Im05Iy5OUihsRFVdWztGQm58RTg4Ll15eS58cWZZQnd+a2p5dkhKRWw+WE0vP2ZkSHFmTjBDfEc/Iz5iOmpsOUhid2dkUTsuMz40MDdTWDwpV21eIiQyaCl4c15qeHAhWmcoWFE/XzcyOVZRem40IUU5ZCxsWiYqNS9uezw1fV4xV3B3XyJLKCplOkgsTkh8TWtlaEhlIT0lfGJRRk50YCNjN1g4'@;
put 'TU81Qyopd2VJYDBwSUlZKklJZzhbLn4vVllpIS5ydzsyLjNlWiU9aFMwZntAdWRkIUEvNVpNdFhLRCNkL34oI1FpS2RgNjYhdlh0ej9NfHJYMzxGWWh+MyMkeT9DTHclSjVZXUVAQjlfQFZ+SXJGe3IxdCxUXXFMJGg0Ll0mUnNuPD9aI088OlZVR3dLLDpWd3AqWk5UWnZUeDdMfVZDWF9JPHhm'@;
put 'OExdX3AhNHssM2JsdTE/c1o0SFEpWEdwL0NlXWQ4ZFsmTURsS2xbUTg6c0U+d1NhRDgyOWgkRndlWm43JEdoWjR1YUNiYGJ8TjpWNWYsYlNdRXdnIXFyTXxvWComdVBWNyxjWHdmQXIyb3VOdERvLHwzcj1ffDxYYy5aYVtUeylpPlcwXmhjbkpBJTwsUjh2SD1vZD0hU2QxKTk2YituWkImbnIl'@;
put 'NGpDXVY6anAhLFYyPH5nYll5Rz0qKHRPXzh5bXhsQz0uW0lZPiowenRFJHBrKiF2Mk4/YTsuX0YqLiZuKWheL00pVElxMGhxXTBtOisrfnssfEEhbipdRlI2fCxCKkVFfkorOlNFPCtLcWZBLnBoLC90am1ddE8vU340Lk1EOUNPND4mNn5hOlFwJlVXWS9PUnxoJENyK1p1QSYrVTNmZlhQRXhk'@;
put 'ZEtWPFN3cVspM0BANyNbUnhQQFozfDp4Y1hVYTVNRkUjM01eY3BGYSRIOWJkfEpLbTRBPFhgd11MeXguPmI0cUtbeEBJLzRDUkEqOVJvKzFyMWNHOituYTUkMDZuWEhsLnIxVTdGQTxYcyY+KzhJQ0UiX2lsfHFWa19nYSVqenNxSmx1Y0gpaCtbRl0paFRZSj1pUCMjPC4/MmEyaHgiO2p9Kzsr'@;
put 'JCQ9M3NsXVoqQkxZd31NQGA1PGZBZVEwQyJsUV5JLil5V0UuNyFnLnpzLENZdXxiMUpfJDUjOHt7XklFUnRNdElLPF5ge2NIKDQlVVlnTXl5WmUrYlQvT3xHYXsrMStgUyUoYiNBaDtIYkJTM11wNUQkdlhOVyx+fmBYZS5XMC5jQnZLKlk0Ni5IZ0lpI3tsX1IpYl5JRUZedVMsPnozX2IuOFI0'@;
put 'QVFtSXl1JHhiLld7L1R3UVEuZm0+NVZDfH4wa1BEbWs/ZChtS1Q+NFRbTiEjbE5lIzRHaXNfSndtIy8jdVM3UDVMWiNKTWNSbjssRjowbndKfSo/W2dnVzRLKixeOWk6WUAqcnkhZ1IkcUBGTCR4aU49eFIjQmIhMSZ+VFZkIkY9ZHJDKWwrTlRha3gvTHtmXjMkMXw0Pm1ha0diUFNkcGZ9WWs6'@;
put 'REZNQUNhJTZsKFByNSRfX01uMDU3TCRJZmlEI19SNmVwLi8/cm0uI2NEeGM7MCheTkZffU9uei5KZSV7TT1AKzpIZGZrRjt8ND8mRiY7VkVrUllEVC5aY3h+dnMrVDA0aTQ8dD8/XzJTKlBGalFRbGN2Q2x2MChyQi5YUiFGOklLKUFRRENHfEchL2RmTC5JSVJjMCsybUpJM3MsYnxLflBLcHM+'@;
put 'Vz5mcm81eVd3bC4weS53WHI2UHlvOGw9LnllQGlOQ1IlVyolNGJvRTdgfUxnP3J4Y0drJFI/dXpCISFgT0lDaGNeWTVddDRDdX1sT0UvbDc5XWB2QGkzMHpkfUE6bV1sNyQqU3xIcypwUSpiYVV+TUhPSFRAdWUkO149cnJSQ1k9IW8uRSZbIStYbzJ0aF9EK1AiPGVgN3cwa3c/QD9ZZDhiMW1g'@;
put 'Y0s+Y31QVDhLdSNyRjpRXyVJSTd+dSM5bHNxKjlqY3NQVGQvRDRzPTE+QSQuaDp0ODtEbkk/I2h1eTkqdEJkb2EqXU5BKXlFT3FEcmYmYS84K3pwdmFTbmpUMV1COEdaTEcqSzpGZjdJRDY1ZkxaUWcwLl5LW1E8PmJtI3NhRWVKO2tfXitfSixCO3xEcFY7VXkqdjpQVlhaTiUqZyIlYHdGLF1I'@;
put 'cHYpLCx0XUlaUHRNUU5KZHVSbjBqTlkmOX1rbmMsZGQoNTV2NS4zM3szMzdXfmRjR082aWx+bUxUT3tEcHQkJnBQJitnejYiOVB+O1IyRXg5TlImWE1yJHAxbCwpXUlnSlRmTVhEOkVKOkM6Y3RqRDh3ZjpNJDJZS1hAR2NyQEBzPjc2VGIzZE9fbWFUXil6T1FjUyxvcFdWOHMvJUNzbzU0RkZR'@;
put 'KVc+UmJ5VlchdSo8dWB9U18hfjgoezBLbnl4PzB+eUg9Pmd7RXBXbE9Cb1htVkZvdWo4KV5kXWJzWzJMeG47UFBkMjBjWlNNI2x8cnpwQ2AzXiUvfigvd0guaFU2OVY4M0NNKktXXWZAPlJnc1BuLGNmIUciW0owQnUydk1qMFJbLCpxPHkubkpadilwckhQa1hLWEg+JGpbVj5OP0B7RGlyYiRN'@;
put 'KClySHZXXkhffix3Lys7LlNBbVBjUVJFKE84TUlBQjZnPmYsKHFwN0s8YDBzSThbZS9lUCNXMlA6cF1qZ01VeFoxdjVMNW16d3U9XyNELzJgfWxTVFt6P0svaFEvTT5NdGVXbHdrJnd1dk5pSUw9eSolbn5vVmpPaTRrUExyOltnRGZlJj5zKzBPeW5iYHtyeittV2UuU3w8W1JjTUNfYFE2QyUy'@;
put 'NXI2UW16fm92WVBuUSxtV3grfGg/SDw8ZnU4K1B2eCZtJUNIZ05RX1d6YWQpKVFRYSNdUjJAPDxdVUBmXi5QXmQ2OmkkcD9laHdXVVJEbiZ1MUl0ZkI6b1BYN1IrUlJvV2lRfHopN21HYE13SEtxakRyJFZIbyxKbWl7aUY2cFEpezwmbVZ6LzwqVDlLT0s3eX5gfVkidlUlYUwxdGFkOkFbeVgo'@;
put 'QSVxOH18JU00MldqelFQZmN2JS9leixkZnlkfndWbkx6TF5ZQ2d8OVtCVlUxUzJAem5baj5TL1k+e3xJPHdFUmZzPjQ0bCxDfTlMY3VuSntnVUB7SXk+KTUuPjFFPXRvLGcxVz9xR35NTU9NR0w7PGNjTEk7MXhqbSk7elZLNENjbkcwRjdaUHdPbk8mIVE+LyxOOl1TTEM1KUU1ZXpJbkhXPz1n'@;
put 'VV9jKmdUQ09zSj9uUil5SHFQWWNqIll5Qmk7WTt3WiRgQFckaiJJRVMmLFgobmYlJiRCZnlrNExbcXhFVkZNWDdHSTU5TShdM2g/Zjt7eWp7Sj9EcWdjQlJQaTIpckY8I1h9K1doP1J0TEBFaUdpX3RKZHN8LlJvUG58Y0FZP0pJS3dOIWxDN0NsJlN4elhnc2hBUStiOSRJWnFIZSxqMmMyKCYz'@;
put 'JDZUeWFgKWZwNnN0WiMvXiFxQnRpSHE/Z0o7eWE/Ull4WiMwNjYoX3NJXSNyXXNgIUYoWzRCaFRfZnRKL0x+M1lLPXtBakl4M1hEaFlhOWhDUUxUfChDcj99VT0yK1FreDY6OmZJQV5mKEYlQ2MpSzQ5MERVKn1da0d2ODg8LzpANWB6RigyMTcrY31jMWJRX3hOOm5kbGhgfTV+b0NidUZjYTBd'@;
put 'L0RaXlIkWHdfSEhIRVhwd3h2YnJKNVU5Sl1nbUlYbUw7QkVGOip1U3Fub3IyS3ZmPz0jJCMiX0RXaSJROG5yK305VkBiQFpALmslQFFGNmtMPGJ9OjYuTERqbW4wZnIjNDRvMDldVWc7PDQxPXsufXNEckpjN3lqRWpKXndJN3s0IV1fb3toUChlI3RpPkJud1V0SEk0T09NfWokUyxoYUdHR209'@;
put 'P1NRZlB5dG0oOnFWbCFOPWBnQz9peXAoYylvbl07V0JzfXRYTG5xfWhAYyUsVlAlc2UqNlQyZEBmeiQmXXRBMjY+XWp0TWJtMnFmPntJd21zS3N3PyJjfUovaCNddyluQXRSPT86K0RWPl4pVkQxQkRDR00wIyJafiQmL1lHN3dNZT5XTi42ISpSMCVnOV1MW1tJOS8hcy9aMWc2VGAmdjtHRCl4'@;
put 'cHVWWnY3WVVHYVhbZndGO2MmaVVlU3QhJHVOMHt+NzFGTVc6WF9KOkdoYkVreVVZWTpvOyM8VEYwNl5PMnxPU2Nvem55RjBscmI5YDJ6c0B6S1JgcWFhSTx5KSt1MTg9UGtxQFskWDpvTjg6K3ZFS058cjhOWFZVektxXnxiWGlacTh4JWJpTityX0dJTzdSaWcjdUE8bGNpQDVjJD9MPCEmd1hs'@;
put 'aWFZIXJnaW1jPUhWTHdtIT5ORzFhN21CSTZVM31jeXh0ZEFOOTI5Wz0oXUR6ZkprUWB8dV1laUpeUE5mPl4mZCNxaGlCT18zSlNxcCMjJilAVDVoPkRtfD9NPyM2a0w1SS8hIXNmZTddaztKTF5zNU9ZOjxCaVpfTmQqeWJ3PGNXc0BERXhpV1FjKDlDL3BCJkNVSHI5Ml1MPmdPM2xEeztEPWY7'@;
put 'KTk2MStpYHJ0dVBQPXliflkvd349PjBVcypzJCZTZVRXaExAWF8yTTElSyUpaD1qVX12bXg2RWUyUHl4PkUoIl1Hd2c/Uk45XUh5UWFxcUU7UWFEImJ1dj8vXz5RfUBENTgre1skTF52aytuMXdbW3NMVTwoTUR6bjkyRCUyaERAejMrUmc0WHgzUTVDRzZ2N2NXZU1oa3IjKzw1UUMvXXVSPS5Y'@;
put 'Olh8aHhNdGRlbzVZcXliWlRKMWJ3JFhhM2kvSlBHfW10NiJEe0NKTU06O25QeThkcHU3MFZfRX5WWXVgcWVsbVpoPi5FO1FLIU9qfFtCMzpBXyFmZSpIKC52fDU/dT5KKmgpTXY2eztsN1ZdNDBZOmlfR0tOL001MjN6a0M3NF1oRzZ7cG4+XXFXPFVMJn0pWDNNYGBVa1t3LyZKa1BMaDs0dDwm'@;
put 'ZlNmanQ2RE0lTVpZNnpANFlxUFl3M1B3UylgI2FaRWE1WCI7aGt+dUsvX3tQYGQ5NiJsRkBhZUB2YlhMcTAwWjxkQl5lRWElciEuYEtnYlopNG53bk5GSjlxSVd4YVZESDFEeUI9aC9WYG1WTUFCJD5NXWs4ZlptTSFQXWJhOylCRS9pdG5SfmUmOVFXfCskPGBqNUxwVXs+WkM7QyJvMVVJbXll'@;
put 'PWF9dkA1KiV1Xi9bc1Q8ZjFPZmI7a2pvck0zYGFZQjVkZVglU2tNZjNYUi49IUFvdSYpIzh4e01bcVVPdGI7NSkoO0YpU3AiaiR2PHVDYE1gSWVqQ1l9fEF1KGsrXkVEJjpiZ3QxT3ImdT4oKWBRJCNuYCxHWEBGRnB7aHAxT2AyK1RDbW5kcWhnKGplQC8/aD9IUElUKFQ4SlQzeUFbU1Z0PDU5'@;
put 'OkdKT0Rma19Wci9JJi5JaX1rbmZ5VX0iIUk3RlEscnspbk8sTkIoNU5KVVVYbmN3Xz5GVj1FRWxXNF01TjcybzlDISpSW3VRJTpxPDIiJDZ9NT5BeF5oaCRUPmFyb0syQCZgTT9+LiolXlVhcmlZYzI+QiRyfil9SVc5QmZwUzB2fDtPWTFgO319eWJXUlFSRlVCQy48MFtvKDNebl1EQ197fFBj'@;
put 'OyRQRjBvK1h2NWBkZTl2bltVQlRzaDdaWF5TVm5DL1dlXStII31aWjFoQClqN0liYm1WX1FrTWB2X0kpbXB2RztHTjlPam03a346SyQ0SXZYUElvb3s0KyRQYldGJmtQJSEzI1poODkmUlhtfDt8VzNYKXgwVjhlRmdFWHhpKj1jQyswa0V1ZndabUwvZXtFY2VoTjxZSHt+fHFzJkIqYioyTm9Y'@;
put 'TyhmQTBbMEJ5OU43c1l8PT95NXU8VH5UMlJ+VW1rIUJ3R3Zlc2NZPjxrJWVGOHJ9M0IvK1loWj8iaU0obCFVckw0NkJgXX1mRyhsYTc9T3prU0NmdnApL2A7fFkpNm9RU2kkIyQ5UEpAOzYkfGJhXmxdeDgvJV57NGRCKW1iXUBMbStUUE9IPGJlPW9SKX1EMXhKPzU6LyIpaS54R3FLb0lXMHFP'@;
put 'NEZpb0dZVElnWSZfZnBIRV5hY1U2dkhNLn5JenA+KzxkP2BVRnoqNjA5QyV9UkZNMlVRcyE8OU43L2taO003WEw1R0hXbE1sY2llVHxGL2BAVGVjIjJ2dFMxR0YjXz9NM2EzQGo9e0siMVRkJWQ7bEVMLEIrbDpMPGdzOT9fbllUNk0jXTxlQyMoUjpyLGlMUCUjK0pVW2p4TyNhMWw8eSFtUkk+'@;
put 'RTgqN2szQjUwJGlRRT1KXSQ6QmRAOXRKbC44QSl7a0BUJHAsUW5tUUVgJFVtLG4hTFVUe3M3N1shc3B3bWFRfTh0YnFSRnx9WDEpL1JWP0o8Uj9eTlhANjpqTj1jcDdfZFVMIiwpYVljblVPYl8hQz1nMjJGdGlYRFRePmFjcGQjVDJVKik2dTxVMDV3STVCX2x6PitFTWQlMiVhbT4oOHRyeHh3'@;
put 'Z0Y5bGtvWnpZWTV2LkVNb1VBT3JbVXpCRklxPUowIzhSdmR2LzhwZTBdLiI0ZEpXdntoVyw8VCFCSnE4RSQ9YC9oPCZ8QGNLK1p2YF4qc29wZ34kPjk7VU8rRFYlR3UoTkEvUUg3VUFNRyhkeEhLPlsvTjlsfmwlNltMQVB9MklVbmQ6Qyh9SnB9ViRmLEN5bWR7ZnVyQ35LPVJIUGNqVDRyWGc7'@;
put 'QzpoPTJhcDx1KHRKUVlLa3txMU4+WWglSXBQK11pSi5uKldvOi5WfiFgeDB2ciVeO3IjIWFeak5SNFtqSk9Pdil9S3woR0YwNGA9ZF9qaSx8I3ROX2dnYl8uTV5FNSpFN3RZYjtEam8kdXUvPy8leiZPLCg7QGI3OiNTRGI6YFlWO0I9IXtlfntaeVh0fih+RW5SV3NWXVB1QXh7JixRL1RJdjxU'@;
put 'RWt7JHl5cmhRZzNkQUZ0Tm8we2llYV1HZDxAWHhDU2lsISpYYkoqdU43R0kvbURzL2IibXlRZDxXX2xXd0lCaF4jfU4iNHJEb145djBjakokbXpTe1d2KmU8OHtvc05xe2ZiLmQ0fjwqdjVjSTpzO2poIzw8YmIqKmp4bGZLIzZ6e31TQ3hKKzMjeFQxWz5iMzR+LzZtOm5DPW96Kj9ZIXMsU2Uy'@;
put 'b1c+e3BJMG9MaThZO2w3T0g+ISxde3lXaDFWa300eTxuOz5bcUM9JThlLkw9TU0sKWh5OjVaQGc+JktiRFgseSxANkpXIVcjV1dgdDp9NzpKX3lBTWsmXjIwWWVdMjhpKildUVNAUUxjcXpFXUA7OkUjMUdUNSldJmwqR3I5SHZda3kjMk94bHksZCJUIWwiNzFqeWRNP0lHNlpkREQ/dj8xVU0w'@;
put 'dUpQQG1IXy5mMVtHd3VYWiNxKzNxPVYmdmI/PDRIXWwqdkFII047b248VSFMfHdAOm9CWmoqYlN2NF40Vyx3VDB3Mk1WY2VTY2YkZ2UxdjJZI0VxV2JnVyl0PjdCR3VPfXZmR0EsUn5lNDt0YEZDc0Q9Pk8vUm55bDdmMiNPQmxnITRSU3JIKzN6YVNkN0ZPX19HeGZgb1hQWig1WGI4M215MFk/'@;
put 'd30pVWF6Q0E6ND5YfF1gIypUR116eDRma1tyb2d6fX5WaiR9e3Q9UHJ0STBSJWZjVCtbUiY7LEIvR2xyUmxPT2dtcWkoSkNmck9MeCY/TDpQUFM4SSozM0U+Vyh0ZnlBVXJpLCZka11gLj9xOUgrUEMuYCs7O3I/TX4xYStmPyhpWExjeUJ6YzZ+ZStBcDFhJT8hNSRfQDpkZFIhbDxkZ3QyMz9X'@;
put 'OSxSSTVMZTAlWEcpZHNIVz9vUT9lc2Yyb1RQbDFoO0YqZmZZJlRmOnpSeSFZUUlXKiVWZ1hmYCtMJiJEPjFDdykzLzEoeztnXk40dzZMclgmWVRPS05NMDQrITJHVC4vMWRKeHcycn5IeW1YKGIoJCl2SUo4fEwsX2IvT35Canl5LixLUmE5WWBSbzNHKUw9P0AmMTBXRn50OjlsKX49TTl2c2N5'@;
put 'WDIlUXRRJXcjeWNIVEdELE8qWDRSeGJMMUw2MitPTWZUVzU+c1Jrb2Q2YEVXI19zYEJrbXF1Q1dHRTs4bnwhSzpNM3Y1XTBqVihme0hPM2ZUd15JaTkqPTFtPyJ6YUZLKkxEWSYyKy9xPHhsQj9HJlU+cixCS15DZy5yR3E2XS9FZVh5TytFJTQ1UUthfTl7T2o/aXMrPXUzXzpIenVkfVt1N0JS'@;
put 'Okh1REw7ODVPSCVwVDR3PVpiLFA0e1psWm4lZXB1ODd1KlJ0QWdtQ1tpXWdQRHplaFVUUHY/c1R2OmNDPU5PcTFeSn5GKjduT2NdST44c0lhYlBNaUc4LD1nbF1OZ20pdSQ7eSNHJVU4eTZddVAzKThbYyNDSl9Xa3J5aV8mbXxiV2QuYSNaOil+JGd1ZmEpa2I8dyFQUnRhYHIiMTt6dVpOcn5P'@;
put 'Z0pBX1Rdaj1AZn5EJGh5UG8lSj5zLCFoTi4ke05YO0htUHJ2KF1ZWT8ifWM2RzVFPiZdb3xsU24uN15HMSxwcCNkMXNnOkJIRTNiMSFLNnoyV3pqZDFpTlVkI31AZilWVXJ9QSZyUjFkczxwZ2lYXV45TTJteG1EU0preV9GVl9lfEApQ3g+fHxBd1d4NVkiRCFsS0JeR3J7KmNGfVA5RmFVTWd3'@;
put 'WHAmI3Mybk1KJS5OUH1mZkkjUGhwSmFYMFV6VSpjUSNWejNOaGZ3YlJOPyJLcldKYWVyRWtdOD0xY2VbYkBiPWEsOUBLZDFiInAkMyxnL3E/WVhIJjU7KU5UZztrXyZULFs6PGdtL2VucUk+NTR8ZmtqfEB9OEMkYGQ/YCFjQ1VtPnlfJmxwSz4wT0BBRUt5WVp0a058LFRAd0J7Sj4mNjV+Kil2'@;
put 'JDVlTykjYl8/UkBXaSw+ejp8QCJLSl90I1ohfDBLVWlNMH00Oyt2dVpqalRMVTI1WF5fJEMkZj1PUXAjRzI4TWA7XSNlMTVBLmNAaTVGbFksWjBaQ1NpLztUPURzImo7IytxK09VJElaWUs8cWFPY3krN3J2UiRSYFVJLGJKfElLdjpwTTl7XllbfTRINCNDXURAMy92Jnd1XlFhalMxdl5uWlVl'@;
put 'XkM/YTJ3KjM4LElbKjFAQF53U1gwVi4zd3UucU4iazp2XUNoJURkKFZLZyxZR1t0clZYV1dnIy54XmhCQnFgKSw7dE59U3M9IWMpRz90VShWR25PS2JeYk9YZlYieVU3NkQpdXh7MDdkVF0wcGJaPltpSTVDLiExfFhOX2tKdV83V1JWaU1gajljb0YleFttYyR3bTtXYUJvKDhzW0ZCTkpaVkdQ'@;
put 'aSNyVCVzZkhAa2tFMU0sTlt1RkRbW3ByMjx1XnYvcSosTnc1enViOF9qRFV9I1BQZS59a1dBJV1rITdQKEs0RWF1b2lQIXRhVXYwSnNYfWxNXTp7M1gocElWPHBsfk9oIzYobkZlTlIhdXUmRikzSGEuUV4oJTA4YD9hPFRxL0o2MGN8aSNCVl1ZUChlV1smREdZO3x1RXhFTE4+PDhoZlJANW1j'@;
put 'Mnp9WHpeU01BKUd8X2klIi9LS1p3OUoyKyosU2NtZ3pGVVRAVUdRLilidnMrfFlncWNhIzRmOEV7IU0lUj4pPy97XikhPngpbFElQSFrYGI0IkxzVUBIaU9QRlkxSkp3ITsrRzUmVDhUM2RbOm9aM143PC93ZVh9JEkxMzhGVHh4bCR2PUxAJCg9Q1YkbU9US29XISpHdC9JbGlHLEdVdyh0UTts'@;
put 'ZXpEWz8iYDdsM1k3ZCQrOTthaihMYFooUTwyTHNTa01OLl4zajI5LmYlX09vdFtzbDphS08vcWRuO0xIJkphNSVmTCh7SFQ2KzIrL2AjTG5PalBPPTBHVzV+SkR1LmYpUyhKYWdHW3xAQFp+ITF3WmwwM0ZzO18hRVEqdG5oSlpDSyNEYjlrWWd3JlliSDxmMXkoe1ZwSiE4PCRpXUdIP08wfjxm'@;
put 'elkxW30wZ0BZRHFTLm1LYHNSSVlgW1l3NkQ9Wmt1UnpHUWtIYUIkISpkdiJEaCpZZnYoZ3VsRkBnZ2k5PE88OituRkpCQWZtQHExY01HcUgsUkM/OnQhY3ciNyg6Q2EqJSsxcDJ6TkY8InkkZkwpMEslJUJaYGF9WUN9Q1ZmZXgyY3ZyMGszIkA4MTA+Q3Q1fGliVEs2I1tyNmJ3fEVgdkhHVSxp'@;
put 'ZVRFRjFnQV4zeSl1MDlNaE9ob3FpM248c28jeTA8fiFWSDxhdntUZjo7Yzl5RFFpKXZTX2JqQktLTihLQ0NPY0YzQzNKMlE5Y1FtWXlyIlEmSSZwWTs3PCpoaTJMUEN9Sl4pQktOe2dPNXouKUxaQGF7N1BRZyw6OHxEQ1JLfj5iUEVJdGRBR3poMGhjXSZWOU9rPXc5ZGBbdXwyUnxpQ3EiX0ol'@;
put 'VVEveTJRbGdoTGIoX0VYa2QvXn0mSWZTLHFoaDJBSi9JMkl2UjBBIzVhXzNFNEg+aTQ4UExHUzZ7QVJYbysiLmgmUi9TcDUsIXc1W1EjSD9jejlUOCpWd0VPX11tRUdTLEc0SiFrI3RSTWBxKlBjRTBIb0FQSHV7MDY9cDF2Rm0xXzVDT302UjghUXJdcDxXT1o3Y0w1PTU4aStFaDI0Y3sqNS82'@;
put 'UUR4MzRPYjZBUDBMfmM9IUwiPyJ2ZU0ufmMvPU1CVG9VKzhIVzhAR1gvQzZZTUFvck1vNGtoQTlfSilEQHdkKGc2S1JwMDo4YjhIXmdhP2giX21NKXZLd2NITSNGblNob2liQGpSTm8/RFZKVzsqT0kqRyl0IWB4enhjfSx8QjJkUzkiSmh5OkdGZi9INDciWDc5JWpOIXhPa3g7KkI5TTpvWUUp'@;
put 'W1dVUClEbiFwNl1DfGpGSFZ0TyVZVEhrUUU4bm9PVFk8KUFeKGl1c2dMIUskSHFzOyp5KTtMKnxtXjt1WX1iRnFNciN3aml1a20kXjZqU0Bubz8pQEN2O1E/SzRAOD9dSiJqSXQ5QndhWnZwe1YwJmQ8d1dIRVpZXXgiO2BFfjhPXzU+PjNsJlhZeSRucVdpb2cxInVHJWpVYWFueG01NltfeGUw'@;
put 'K0RFREtAZyZzeHU6SiMyMCpESFRiUSReeXxjQkFmPlBEcWNaSkZLcVcwUjw0UG10SlghNnlEQDZbZCN4ZClwRVh1SG5tOUlnN35SajdHaE0iIjZ3M35TblVHSEooT1dtPUE0Yk9eWEZSUiUlMW9tJFVyZC5QaS9TSHVobCk/dnwmeWJAWiFfaW5uejQqSHMibTlYMHw0TTNCUiFeWDdyd0RXYlY+'@;
put 'K1REbSUoN1Nxemg+R0VwXzEhVllfME1SOjcjPHB9PygiXmY0bGtLTUYkOnBJUT59RD9VJkEsXXopMXszNHxpYkwuZTFtY1kuVjZyOV0sNTN8eWUrOkdyIzh2JS5dc1MoOHVGQy8hY2YyIzlhUF1XOHwhSE1ObXk2fjdFODJ+P3VCYmtKfi9QZyxTN0hed35pXjVMQzBleUN8RXRFcEg7TWVRRypn'@;
put 'X1QpflE2USghUFIlMW9xaDF0MjJie3FkKUYiQ1N2c0c6WSxNTTlxIm5zPW1sSVsuQ2RVfiZSe25GZlJFZHNuMyIrWlRQPVhnUXBbcjdvWEcpQnBhdHQmelJ2YmVSYFIqOntqcDQhRGxeKEVpWzAlajhrO3JqcVpQbU9NKGQwbWJPLzRQKmI6ekU6PjBHJXw1YFAlJnldQm4uTW5jN2V5a3wwWWA8'@;
put 'I11kTHhNJl57RilgaFM5YiRdbkxnPkNCU2VFTl5FfER0IVcvR3wkVzg1Znc2NTBUYUk4KDA+SUhsIX52UUVbPXZfWC5hOiIvcWBNaEV0fUdISDpoUlA8U0p0K15+fV9fXk1EVENIOE02MytjQylOSWVPV006LGFPPXRbKU4ua1EyKmxGSTQvKHM5SGxgVkB9aUJQfExLInphYDZJREQoM2dNMi4q'@;
put 'ImowZDo4MF9vNGspYn1OZkVmeCV4SjtfM2gpdCVXV3I1blB0eEIhYTE4OHwhLDJNZCRXUXJrOCpyOyNbKjN2KWRBfXNlJUtkdTNsUytaZzdxXlN4K01rdVhxbGU0V0xobk1JMChIOiFWLytEPkg/OSxyTzZffSJnUWY5fHFCKSUucnosYlpiR2JDQ24wXklIVnYicjFrdTtxJFNTZ09ZXURaWWpd'@;
put 'VHtfU1lVaio5fjhANC9pJk8xJSE9ZDw2cVBGaHhzN2xfY1g4OHZITTo8cEBoYV0oXl4/dmxKdV4yRXtfUltoandLIndMQkg0JTRAUklHcERBZixea3A4THN3L28sRUp8dG9ZKWQ/cUs8M2JddEJORTtWaDR1aiY0SkdIJVZjeWtpbjglY1F4RUtad3pddzlzbldGUUZ5UH5UUiMjQyE8STx9KUh6'@;
put 'YGhwVFo1alU/TEN6R1VWIWJWUTJoczgmNkg9fTdqQTBXfU5AZ1MiWEUuTVhIajQuWkNzcF1JfVlAYFtqNzgwV2lBU2hMVnR0Sj1dS3kxLzd3M1VAQzZfRHZYWjQ9UW54Xl0zKjIvMlEjX3pYIVN8UjciP3JyTG9zL3hlNVNlaWhHTzl1aVZIP3AuLno2TWteWHhGQF9bTXVaK0B4W2s1PnA9Y0dG'@;
put 'eS55d3Q+PyIpe2ttXVU0PG9TVSY7MlJGeVcuQ19JRk1aNUksUCxCYnJCR2BsNSEucGgiTTNDWTg/JEo/Zn5DPlZFIV4qSThkSVlOKW8+e0lReU1yQG0kLGM8ciVJWUhXaEFKfCVXOmExNkJATVB1P0JkOmVJP0d6YiwmZWIkMGxeYnxuei9PUUxVMHosME88P203ZHcsbVlicCFPLmpULktTXm1d'@;
put 'L25ffTo5V1swMzFnaFBOWTspfDhYbFBaUkM9bWxQOE5WbmMuZXc+eHgzRH4+ZX02N2NrdUdNWyJwejs4RCljc3Qzdm1aQGUmUl5oLER7LyI4PGRQI0gocTRbcC5PZWJFWz1VK25+dTt8Nm48bkF9dyxSRlVSTTk4Wi9gTTpeJkhJPkcwd3l4cC94SF9mK1s5djt1d1tXWy4+bGs7P0wwUlJMQ2d8'@;
put 'eVVkdHlUeChIVkIqSC9MNHVQP3RecEpiV2xxPGlgTTBNe341VyxCenJIND1SO3UmO3tKWX1jZ3NKZihCKDhfPXpSOUtBPDRReCZtZjlKQFFMQlZyMGo8aUJkUGQqeSZPVjFeYDg4L3xfLHVhbHx7ZEkpemNKPnlQNWAvIitVOmpEPjE1WC81RSJkIkZ8eXw9USRdeUd2UXdlWnxYXnt8JS9GZzh2'@;
put 'UD5tNFFkI0dNbGFNU3pIKm5xZjh4YHhUdnB8YSVTdEVIOUZkZkxqSGBmfVRuSiIiMyRKKyhGZmxyfUtUSDFZezkwQ1ckN25+OmpEZywvNGFxJHA9NmBtbFEhVDB5eTZBYTBrIUJNYDVIfGZZWlJ1RWM0ViJDT2wze3VBb3g7aUdoS2dnOTUxWikyQzROenZLYEx2UDw1Ky95cDJaQkZVV1JSVTNH'@;
put 'bXN4eTJmYWh6I09bK2w6JEA8QE0kVHNJXUxuWXN2VzVhZ1N5dGhWPkRCXjciezBKMU9iWGhYallPI3tQanU2UGdvXV5iWnNHNlBOTCQ8dFdsVXxHRWNLWFc3Nmh5bzpEVHZbOXd8fj1CKj5XZj4/O0hiKDozSihDOGtCVVo+Om1NKSpVcnhbMyNJPzc5cns8PD1nQTdyZ01OQyFIKU4jSl5jb0l+'@;
put 'SlBiMnB9NzljKklNSUAmQVAyODohQ24qMnlsYSp2WHFtT1NyWk4lRGtJTTlkVFt+JVtFJXF0bStIUEJLMTN8MypGW0ZxMlZVOHtSPDljMC4jRVE2MT9vT21fX00yS10ua2sjKUIwezViRTF9NEA+VDJdT3h5OkxRZTNYSy9ZXUFTSiJrb1AyXyFOWTFgTU1PYktUVCRdbHZMcyxQQjAlKnV9NDlN'@;
put 'SW1oYF1QJjg2LkRHKClscjlnTCpJQHM2dV9XeX15ekNuRG9gJnI+QyN7d3dBZy5SNkYvcmVDVj1KOCtxIyFsd319Wz86ZDg3Wm0/Qlg6L3FCNCZ8WUtQZm4uOm1HQmBCN3wzYUxAdyxVXlZwNjlBaU9yZ1BMMUU/T1ImOCxiIiZwUSVxdkMsfmE8MmFfRXo1aktKKU4uNkZ1R0AqOzZnWmZMT1c5'@;
put 'fksjeWdqPkR0KypZKnUsL2NwdntTVEMpPVNFR3FXU2hTP0Q+XUQid3s5MmVNeCQ1PSp+VUdnY11wcnVjZCJQSklELkgxa3BrYm13QnR4YklCaXxgcihrcHNbbkFrY2wkIS8pOiVlIXJQVG1JRSx8M3wrLmUjMGdNfFZ2P3dXLiV7RjhefTg2S3YoLmdneHNkP1c+RlI7NUYrbjRbZmJIP01hM1NC'@;
put 'RHBgRSE1Y2h6cSJxJktHKTlEYiNGPXVHSTlrRFhhRVZWY0d7W34xTXdDZ2IoLmJSU1BJXyw/QSpJUiRJUEg2ajMoKkB7aWoxVCNaSH08KmtZMCRJR3tSd1hQZFtKMTJPQ3U3R0I7W3goYE8jfX5KNllMOGFNTkZTU0I9Vnk2fGBHMW51eks5TkU5QkYsOFdkW1pBaiw2NlBdeklFWztxd0Zyfncj'@;
put 'W0NvVSMkTUZWOnJAMk87Unc/ZC5mLD9+PTZKZilJW2Z7VTFlUHQ9QiFFJWBALy5ZTSh2MG9sODwxZS57Mm9xRm91JE57KUo8aTs5aX5hQlBPKlZ0UzdKMTtNSH5ENHMkfmk/NmYmMlRlNk95Jl9MRUcsNGBBJmMlYmUqdSk+cj9daiNMbFBISVI/YUZJOzpBclRDUE0oTU5bX0heU1FFSSZecmwo'@;
put 'Y1dhPFkhUnBlTH5TO1ZMKFZQVGpVN1MwLGhQaFlabG9sW3R2fU5WQ1kqSClqVVd1K1doRFRqLitaVUExPndHTShhSi5rOlo7ImJTX3pGdFhAT35tXXV1UjVbTmVEQ1d2UlFYPjAuKXN5ai5ST35TSXxKZU4sUjkofDBRazQye1MlIk5ALExuTXtAI1pfdXN1OzY1eWlzL3NuZ0M1PCFYPzIzck5C'@;
put 'Xm9IXiY0SU5fMWc/WGlvMn0pQytAI1U4UmhJXXtPelZ0bUBdMEZrYyx1VlZbPW9QaixCNz5iOTk5S2ooXTNVLGMkdHdOaXYoeTpUaiokbGBYQHUzNnImOSxsK05iRX49QFp8eyt1Wy9KL11RYyh6aDJldjtzLGp7S1M9NWpLeSNoZ3pwM29fITZtX2h0KltXeio1YHBBN3UjX3VXIWdCbSJMfCpk'@;
put 'QT5VW2FjMkRpbmA8TXFaZS9LTmNhODVzfm9MM3tHNEsxJnM4KkVMR2BfJSRtLCxEcEs2NVElTVN1eGVhZldWWEpAX0Y1Ok5gWmt9bk42QiFKbCYyJGtYdDI1UDRjNSI2eyUhJWhCXlA3XXk9cypLd0x0SUZKRkxNd0t0aE80TzNxWi5ja04qcEB5OHp7KiM2cXhmMUAoSSEwWj1MaE8iKWh2SV5F'@;
put 'b19aZkIzU0NPLHRTZndKc21iPkcjbVckO0RIPy80W2JRXSxRfUpANGRWcyg4XzhVPmZHcjhmJik1VClbeXliVDVhdlNDKEJOPH1oQWYuQlZTZzl9Q0BKTUZ2M3h4R2NXc0F2ViJXYSVPSVpnfEZnPVcsMEM6JltYZzdQSTJEL2N1UlJfemM1SXNfeClSSEkpOjdfJjhtPHZncCw7Q35BTVI7bDRo'@;
put 'MiJEcjZ8W2ZwPSUvfmJPYi5tPzV2aURAb1VhbT9xUUlVS3MuTUxba31rZ0c7eTp5eDFTMXJuWlY6RlVLc2BNU0tFdmx6Nzxna2dEb0lzYksiRHZgSURVKyQqeV1aWHwlPiJtfCZxeS83QXVjeVh2ci9gclFZPyp1XnplcU0iVEwxSmZZL0ouMHhdT0YhWk5+S19+cU1DfDJxaiZ1Lz05aSk7Q2JA'@;
put 'b0p6QkZaKm4/ZnV+KSgwOzJLTDR3I2NaN0ZvJHlPM0xAKFM8c04iUzoiSHpxeD9QQyUhSEwoVkZFb19DSTFdcT1+NEh1Ty5VcWZMPjpmTGooP2wyQlROXVdCYDNDJFkiYWQ8NUtlU3kqeUxhImFXMWBiZC9Zcm59NnpDMHloVXB4ez5uMTB3TV47PDpVUXZtU0l0K30+JlJze2dYRUJFQkJWTWBK'@;
put 'cWNVemxhWEVOPSllJF9mZ2YmakhBRjRmMFA/e0tjaDsmIVt8OiF1Umk0MC85cWRWU0QlZDM3Vz1dRk1ZNENPQzdoVjR6MDpzfntFT3FjJjRTO2p4W3l+ZEIkLj5QenAuRCtWW1cvV1NZRHU4NV4xZlEuImJUWC8jZXV0I1ZCVlgwNHZzIy98JEpLaG4idXMwTkxFRUVIOUJ5UHlYekNFIXs6KkU8'@;
put 'K1kxWW1vfXxDX3J2QmA/YWt7eTE9b3svJix6SEhMWkssc1VsXkspWVR1RDl1ckElYmp2cHdYTGw8QkdZRnp6OVB2IjAsT2hYfE4mZ1UzYWoxKE5PcH5pS2J0PSUjPy9INmkqa1RtTCM3JUc2ZigiRiYvKkVRRWVpYzNiKEg6SWNtZnlZWE8uT1VaWUk1dk5DaVNIMXBEPHUsZmZEJlA0ZyRQKHw6'@;
put 'JHp7RmksNEljaVMoTT9TNm5XSThzNCFbPHVWaFo7cHZNSTg/dFJzNnRXKGMzLH57e29oOWY9WWFuMS57Imk/RjFJLzdvVmxbMW9oaSxSNjowKzB0SF01aVNCdkplMDJkciY5KGkzPD8ocztJcU8rNDllTD9JSGEvelJZcHhQeixFbHFLSDVOMF5jPTB3JW0jQm5OcVZWPnIiXzNYPDwiaEplZk1d'@;
put 'bEFlK1J2XlRFej1TbkR8M3lMMFU3YWkqMWA1YkcuO3B5QjRnTmdmRzB2elMwWT97TG9nTCZqNkNhPExNYSsxZSpYPU1OI2hneCpEKFpPLDpJXTZffmJQYXlAaVpsI3ZndmVmTzptYGRyVGE6L2wiUz1oUSU0U0IlTC5SPkdpRF85NCpVUmtDKFs3eE1UK2YwKThfUEksOEdQN29KUTA4SUtJP3B5'@;
put 'RFYkXkppPXpnQ3U3YSljTF8iMWldSEkzfXxSVCJ8cTZmKDx3UkQ8fklxQCU9I3lGN2kwNnFnMjNzO2UlZGhKQ0speFUwRFs4I3ZPfENkKV5UdnFFR3t8ViowVXJkPHp7XVB1dCE/O0BQb209P3s4LF08Z2w4ZVZTfn5tKSw3PW5wMFRge1V3YkRIKEQ2WUQ6Vmo+ZHc0QE18MUdwfnpIfjUiaXol'@;
put 'dExDPUszYkA1MHdeZEhPQEB8OywiTktGcy9MX3NdajtTe3RIRF54MEV6TztgfVplWWcuNipNY1BDRXB2LFZ0IzE4TnpJWTQxRkhEYkhyUDhiI3s8bWcwWCYscis8WGB4T2dnYDYpdzRvUjJdIl5eeXxOPDNkaURBPiszR2tlZmpDL3UwOExfbkxYJCNVYmk+XmN8e2pKOlR3d0FLZUkoKT96RHJ2'@;
put 'dWU+P2xGRmRSclVjOHw4cVI9MHo2NEFmYnEjTEE5VWMrVz1xMFMpfDF5clhGeURsQH06JFs9WGJXP2JIbi9PbDc4TUcjSWFzcWZnPXtUVXdEISpaIWhwPF10IjYubHF2K0xMdXBQcF0heiZLUUByYHRddUopWT48YDRBVSZIU1RZaTRMUToyTWc/OChASFJuUFc8K0Ike3JNfTQwdTU+IXFXITtT'@;
put 'KFd8QWZOKVlFQip2Y25oSGQpW09ZUnYjLENaUSg0LHZdfUw2b2smfHN+KFpQSjJyPEJnOGwiZn0lY18/YUI6blNJUHxvdlBZISRORWorJHcmXWtePHJHdntqbE9BQ0R6JVVAcyNhMEcpLFh4JnYyZjtHPTU+cWxPKHFZWSlZJiosQHBXKH1dRjlLU1EoMD9PP1NmfV8wUnZCMndkIlY1InpldWRF'@;
put 'M0V8UmEiMFlQSUtxKFdOOltaKjQveDxwWzc7YT05JG9oUUg9elVXU1h1fjxBKGdNTWN6dnAhfXF5MTUjO0IkXUwwZUc2fSM1MWk1b2w6SztKJmcrWzg8PiphZF9VY2UvYEFid3EvQU0+OSo8YXJeW25PX0kpWjB2SVFJVWsjJXsvMSlwIz9vW1NkMT47OXZKLF9QbGNUIjUuRS9xbF0rYy9SISQ2'@;
put 'Ym5KQExUYzlFNiNgRXJ9MmBkaSt0dFBZWFE0U1MvfEAwRU57cm5TVCxmMTVmeXQoa2N+amFzezl9enBdLjk9MD8xIVAxIXhvdXZWV1hUZCU/WVB+TigmYVs5XmJaW09DWHtuc35ASy58MChNbjUrfmx0ZjF8Z1osVnFUbUFpfTIlMFdDMDt2THE0X1dveHQpVG5GdEYvI3RWTCY1I2tOL0pySSJK'@;
put 'STBDL19GbiVAbCZQPktnI1RkS2w4bF81dEcxSW4uZmV8ZlR1TTcieXthZ0IyP3ZGMG59JTlXe3x8LGNleDA4ZlFAUXhJXTMwQnc8ez4pSlJOVFhdc342e1BrMWladyw1PiomT2NVfVtsTlp1SllpWVdlYFBXUChaYkxkUk54cGQ9fipbeG8qSCtgN0dNTFp1cXJIJksqTWNzeiFbOnhuQlBvXWB5'@;
put 'KlAxKXMwO25xYmVuN1AjTzVtOyZnejxsO2VRe3lwNWZOcyMoWEFQP2lvJnEqMkhfSD1gOzR3aCJse0JLeip+cDEyV1RqOzZYT0wkXkZkVlFYLlVkUl1JVUR9d1dxWXY1VSpsTmFtUV5xfV44KWRtZGwkSjR+KyF1Nlg2NSFoTlJDM2x2bWRAIkxWSVc9X0RfcSMmfnRNQy9AOWsicnp2fFhyQzI7'@;
put 'PlYpflNOeG8vL1h5MEBHK1dwOkNxYCIvTW8iKyIzIjIuRjRFQ20xYXdDdXR1c1sodSheb19WO0phN1NCLH1eenIjKyN1REgjS09HdEtNWS43QkA6OU1EQDMjIyVtYjhvVmA3IWJmMmkla1RgdnVXYTV1cD8ifHBkdWVaaEcjMkI8VGp0bW1ofEdDfHoxQik9PlszMWAlOCxwdF9wYkZgRT5NdCl+'@;
put 'OXFwYUo0VzxYKWByIVVANC9dSi9SUHxVJF9dYF1SPnhdPHZlZ2csKj13Ky9NY3pTajttIn1dJjdlWyEzKD1SP0JtUHopX34lNWNGJVNbVTpFdDUxVy4+bHxYKkNFKyFqPCRYdjheJjdAen07Kl9KR1VESzR6IWxRP2hlUlAkTHpYekhCUHUlczRLM0xNLnwhck1EN3tvKFdoK0Y4N3BAbHMhO0lX'@;
put 'cW5TdHxvcUgzST1zRkcqPT14cDMyY1hraSxlZUFeSjNhPj5yQCVXejtZWWM6eVpGUSw7eG54YlVHVilse01RWlg2ZnolUXByXVNJUH1bOlZNSVpCZ0FncTF6PkQ+QC59fF5kZHlmYHlMWDk3WU4hREA3YFMiclNrQltYUG0pfWNvPkxqa2gwLjs8bkRVYDZGUGtqajtKMEUqWXdBcnFTOjcxUlEl'@;
put 'KSUpP1k4eEU6WCN9bisiW1lXIUJSZT9vVlM2QjhAVG4kNz9LUFs+dEFeMmdVRF9ZeDNxIXQmXVQofG5BI15UPzkmUHw8Z1d7Y3lLRV0xVEhSc29jR2V3ZHpqN0lLaCtYd0hNej1ldlJoV30+SihxU2E0RDdWY0NMLChsdmFsMGVRNklfYz1WPTEsIUhNcCNXKTo6S24hTX4zM3FiJmcuRDI0ezha'@;
put 'YiU5JUpOIklCW2x4Z3dpRkBvQUlRfkVAPHRRaVtJISI4el1SN3EwfVMkL2I1b3RNek5uYkdzODRzPzUocjsvI0lbRDlJfHA5bDwqey9jRXhCP3pCRElvMz8/Zn1jTDgwZ0txPCNnMyR9JDNfc0JEWjh6fHxGZnh0XVkyfkxjZEdzbkdSRVV7TVZuXztvTC5OcUMhWDhrfH53IT4jMThaPHVROWZN'@;
put 'OHg8STpbLjhjWDdvNzU9QGFEfGJ+QXl0Wl5MUkFnS3gmUE1IKVljb35scmJ0SC5CWXRJRll6Tmd8MU1KJWhGTnliRX5DcyEqcDVPOjMqenkyPEpXWSM9TVFmK29UfndKW31ncnEvbjdyPHUjPSVbTEp+YWVJYjwiPTt3RnYvWk5YMihUNSF0e0pjZncwSUVGd2ExbEowX0VIUFZsbDNLNjdBITRA'@;
put 'cHIzdV50e2cidX5eRXZPWk0rLHZDakdJXjYlPlRIV3NgTkczM1AuTDJ+bjpEWDM/Y3EwZzU+dldCRyQ8S01iTn1KK2xONUsxcFJpdTIhP01wSFFPPFBUWl10dHV8NyZSVHRjeHpoX11DYFJNaF8wLmlJLkRzQVROfnVOMXx7VlAhQ2lDbjR3aSpqPjtjfn1mY0AzWFJhPmZ+eiY+aSlZZ058YHEw'@;
put 'WEVoRTkial9ebjpDVU4oYzxdQ1pXQ0s9U1c5TWB0L3BLIUlocTQ3e0NTZmNfKFtweHB5PTsjNjUmYDNnT0xAL2VeO1Y7KCtLZHZYeXUqZDRtQEdLR0BHekspcmN9OyhXaE5CbT8qUnVvbWI3a1ZyM3dpRzgkaSJkPVVAVDJfRD88SkBmNnxdKV9EQ0gwcX44YkJ9VHJReG1JSyxJeT8jTH19Xm0u'@;
put 'Qy5WbWgzfXdHU18pOj44YUdVSD1ENDdLMGJfbyNiRVZbdzluKl59KE4zXTYuK011NVBLS0dYblo0PykhTyFBNU54RWw8Vmo6alV0Z2I8YSQhPHd9JkcjeGRnKyhRPUdTWEgkJi9OOFdxKFchdk8+O2VeXj40JEh6VHwkMkFwKGZRKlB+NjpVezE9Si5Ac3EiR2ZaMXomTk5jT1V0OCw/YHVEMWlD'@;
put 'PHlvZjJOZk1hPV11YyZpS0V8bzg5XUtfaXwre2lNT1hSST00VyV3fnQ2VURseERWNUFSOGt1WToxTXxHO0dNQD8/fHZ+fXJEfk9yVDlbJUA8ZW4kUDJxaypINGEuVG9Yez5JUTkkY0p2Rm83djhHVyFkW0JjI1JJYWFBU05jVi5rKzowdXBfV3B5S0MkMUx1NDZwRUBBQ3dFdHk/RWwsRk04SkxC'@;
put 'JUBXSkJqKEpvT1JSVkZvKCtZWHF2JjE1XXE+MkBLVU5mLCJjREUlMD8wb34jeWIvVEZsNDxLTk4xbDVdMWZYO0JqSylOTHpQfHN2aGZwVHF4aG9MWUhSJUE3UzkmSF1EPHZlbDdbQE9OVnlPaC8qZS91UXpiQj9PODhCJHxSY1hOV1cjfSghcEI3MUs/Rl9wSTZmNUc4bzp0PSMrWThSYXgsUT1L'@;
put 'UUlQL1R5TzA6K2E1L3RCL0RCVTRjQk83ZD4kTmZvc01YdHJ3MEYuO2YsNXlkSmYxTkdyX1F0cWdkbDNVVGdqTDk2LCQ5fGZhallyKFVgek4wQGwsallxSnNoJUZqbjUmRnUrP2JSLmtjNG9NOyZuXiVkMUJGUDB1fXtWbGNwSVJMRFZCKC5NQVkuYXtze2tnbnFCakh+WT9TaUdpS3hJdSNrJV94'@;
put 'R0lHImByOTZYeC9jaWtZZUgwKXpscF5QS35bKkM4Q2oiM3smY2hoY2UyTzE0aEFBZWB4M1M0VzRmRGt4b1hrTFpkZWc1OkJ3ZDo4OT9gW2RPe09lR1kyKlZIZyx8MC5ITVI0bDpxYktMXXZrWXk2TXJkfEF+ejkob1p1Zm5CMUBgWlRaIitgdXEoXTZ3enk3OUxNVzZDMjZHRGlXfHIxW3gkVFE4'@;
put 'KSg2WCllTWBYNmZZY0xFSCU/PTV7fi9zRzEuSjEvIl5XNGQlb1lSa2h8OlMjfDVrWTFfNEAoc3J4SzpfeGw5WjxQSF9hP0luVHRnKntodkJoK2YpMDZAM1pDXTc7LltaTDBZUGdhfE5yaFFYbGRTXUxbSVglQ2pmZWApaU5DdHchJn0kbUpzUklPcFdfT2hYSlYlKk4pOFpgcD5+Om17JT9Oa3Mq'@;
put 'UCp9PjVpKmc8PSVJbHt8YUJkcCNHbE9wNi42ZClANjdQc0BuM1NufmxwZm9Dc0hNXzs8bGhWTWshQHZmPzUzWnQ9PzM3KGJvSCwlPWAhSEZOQ14jTlQ1TUR3bjhFZVQyRjc7aTJRe3c4XTxIUiw/Rz47MUkubTxAYFtCPmwxYm9zcWVhXmJOKVNLKDB8JkAldzB3L2w2Tk09dmgqNyJ4RSp+VnZL'@;
put 'WHwpIiQyITVEYW4jQEcrWypvJkUodXU9ZypmNnQ8OzFMaDI+SmIqT08iMDspOnh+Qk5NTys/Y0NKbjZ9TzVyKSkvZmAyal02aStne2lkd0kwRzJVU31iYGF1cDZuRk42ZFJMQ10iO3Z3bDNdfXs4cndMQ3BPenpFPT9PRzttW2t2YVV1NWk8V29+VDNVMDhSVjRhKWpvdFRdP0tVS2JeWClkeG8v'@;
put 'VWVOKV9lJmg/Vz4je2JjfHF6dSYke14ycW80QmRscWR8WEFRUkl+JGMjSnA7S3ZRODhhe0JhdTAkSlV4UnVvWV9fUyRjP1FyZXt0O01fIy49TXpRfiheU2chel0oYz4qbXB6RXpQKTdrTi5sRTtzSUUwaCgjVSZjMH0yWzgpbmslS01+TGNsRnh7UT9rSW44eT5xN1IsZHlXLE93T01Ib1hLbV00'@;
put 'JFIqeHltW0VHTWB9TzBSLEthMjpoPCQ+b3JwWyhgKVkkL2o8eFQ8ZSJ4cUs2a1VNMTNxKEJRaz4sLHhRbCJaS307VS9FTjVPPihXdnAkXnZtfUNuRUcwOSNaJE5CNHF0YC5PY2w9cDA9NWtpS3thOTRTSVFbYXFxXVRnYTh1V2d5c250QnQxey4idGZzIjp0eCF6T2RfTio5KW0vbSVmaj0lUEtY'@;
put 'LlB9TCkxP0A0c1dpY3UuOldZfm9iJSoxLkAkPVZYcTM+PDk3c1gmJiF4bl4oNS44Ji5CQHwxP0ZXc3t3InV4eVF6fFE2QmVdezAvKHREJTEpPDJEXSNxeEB9SWQmYCk8Lmo7NlI/YnRka0trdkp4Ji81TlI8P30xL2RqT3BFRCx7MGJSajJuKXMvbGgxfk8zLD1nfCoiLnVfc05UUERSdHdDcWdA'@;
put 'fmdYYUhEOEdnYk9+PHlhJV47O2BPVjFmOkh3eUllU3F5b1A1KnxRWlU7QzkvVFs/RU9OYGhEZiNfMzJnc34kXlkvZkptKFsoanBIa203NzQ1emdVL0VrSHVMSWoxVSFIWXxUc2tqKUw8fGJ7Z3cmNmJ6MHhXM3BpKVtqcUVDTFpqKldDUWVWIl9kJkM9VjUxVmgjdV9rYjE8KiolRD9DbmQlbmx+'@;
put 'VDQkL21qYio4ZzNEdDtIR0NDT3hBUk9zJklUKzpzV15FYkZlRyN5VTBoaF5SPW00SF02YDhTOTd+ZWpbaStleXVbeTpiNnBTMSp6WGBxdTRoWS9jKWZrLF5waD57OVVyOnowOHlFfWx5dCxfWXhkRGdWNntDdntJeU5AKnZOSGd7Nj4zaDhKcHdlSip3Nk05cjpEdThxaktZNSZZX2kjYnN8c3N7'@;
put 'ZHdJUjJgMiYiRmVYaFomUSFiQCxoYk59aFBbcz1ZPDNqVSJQM2JRY19xOXJNPU04YTN6SDhOYmIpPXVEaCJvSmMkIS8yV0UhMHI2SnRRX2pFdzxjfXNSQ2RobFRHVnYuKG80QGUzZWVmKmc5YndybUt6L0N8WDM7M1ZjOj5HVDZ9P3ddY2pHUjNCV1hhVTk3LmIrQ1BrOk50PihPZWEzOXxlUDRG'@;
put 'V1J+ZXE7OFNTfl5DSUhPT1g4c0VALGFwU0g0SlY1aWt3ZikmYUBWIWEvRGRzLC4jT05GSjo9SmZLRGppels9KT5GOWsvek5CQHlBQkpwMUV1OF5uKHR9ODBlOjpwJkliX0N1aF8pOEB2Z1lbTUd0c0lKaT1qakxtS0lbRFkpZ0d8ViJyezwxSkV0bVJ7a30jWUdYVF1qTi5HMzl3IiYzQGdCbUJI'@;
put 'clQucHg8X2NEb28waUlQP25fSXZ5X3xYNSQ6bmpwX34sclM5Z18kQGhJP3AmUT82XWJOPF5XRkc2KyFyTH0lcSRRSCNbPXM/IS8kQTJCciZMSX4lUl9kUTcyZXBuY1IoW0ZnZEJXLmpTeyQpfjpJIjVMOCF7RXBndzsjNnNbcGk/TWhdTE1jcE54O2wzXURpQ3EobW94eCRJJlV8QkooYGhiI0wq'@;
put 'K1BWLF01WmJVbUEvZThLb0NGUjhOYlA1JXhLW2JtNER9UlJUcFYjUztuXVRCUDJLImw6VS9DKTpOJXZRdTZKbWJObXwpOixncn5EQlglYyk3MGZ4ezVDJGtHekJNVEB3MjlVOF9IV0ozJWY5Vmc4VyVucjdmOS9gY0JFTCl7S049YjwwUU8/dFEsbn0kNnx+TyR3aFhGTjEqPUpCUSlvV2lJaz1M'@;
put 'fWBUMFM/M3UvN1JoMU5EMUBmZH5RKjM2MSxZdiZsNUApLDtGfU4wM0lqLFpaYGVudz88SjtNfCsxR340QStuNSFKQnFaYjhMKj9UZzVsPXt0ZFtJJlBbUFZfQygpP0U+OypRSFpAWDh8YX5YKTBnRHxQUXkhOV5kfmp3NDgoSn1XNDRqIyE0QGM1U2omPEhCVH45KiVjQEFyQiN9aFkjLyo6Ym57'@;
put 'WF5vI3orK3xFWyxBPVckUTYhWS5bMn4wV1RaQiZ8bjR9O2Vgd3ddbE4qMmBCQXNmOXc4UDFDe2dFfj8kfntkYnVKUWp2WU1sO1NzRFh4XmM+VVY6UCRTUThfZmReKFJnRHMrYSZdaUpFX3o4diJdQ2FOWjNVViJaZlElWjVmNTRDRFA3e0JWM2hEX1JYMDRxLipeMltIPVs9Qn5pLDY2JGEhblpA'@;
put 'KV18eUJBTnV4K35vMXhQbVpZeUgmIXgqYS8pRzA4WSk3UWl2SllBYSl5N1t0UlMxRjAlJU92TTROQz9QVl9ofFZ5LDApcH5vOH1CQ21BI2BITkBqLih6InkvPjRbVVojR2x9eV8iRDt5ZD1haHkzM0Q3R1JEJT8/T1RnakYjKVVwVlpPR0R6RGRtK0VrRiMhZXVoPEZgfUhOO3QkcHpfSVdJRiNR'@;
put 'dEQ6Z3c/e0xYVSshYHtgW0d3aV93O2IsfWFYSTkzWGp6JWdTTlphRSF9JCRYeXlAWEdQTmQ2PVNVKWNEPndRNllpO2khRyxFc1IkPihua3FSTDhzd247cjkwfXB7TXp1NnUmQHhKNWMkTTExPWV+a1lLfGxxMClJfSNZJkhZUlUoIWZvditCPFd4KnU4YkV8RkVWdzR6MVclRG1bIjxPd1shQzBh'@;
put 'JmhdLHJTZkxUU2hVPmVLcFFGcko9KiRHPXkvc3xdO1FtO2t8OCskTW1WK1V+Q3tjKD9oSypqNSJ6USRld0FDdF5YY05vVn4kRHB5eC5tRG5xYil9VXsycWdwSDo4OUByTk0+UV0uTShDTl1sVWxWaUU2MShFelptImoxeTtYOXprP2lPQnV8RDBIP2VEVzxmKlczem9UcEhVfW05dDd6L0BoRXxl'@;
put 'XmxgeG1XKlA2bUNkNy9aKF5wWj45Xy5QLmEuOFdAZUlQWTxgdE0+Ino2YDpuTVFTe2opcGldUz9dbyQzbi4hNWR7L1dTbXgjUEVjVGA2Ql4mbHFYPDEsMHglNVd7Z2NdPi5aKVE5VXNqRDRERGQsZ0Q9WVFoNk5bKTF6QEhLLz5ZXyJYb0gwNikzXUJKMFU9RG0jKjg9S0MrendpZiF6Nn55fHl0'@;
put 'Lm17bHBabWRSTDNySSleZ2tCel91VEYiNWttKU51W0AzZWUkTUNdKWZRYFZfN1hdZnBAIWFRbSt6N2NuZWBJTXhRZUR9QCJ6VEJtajI1X0lseFo5XStqczZpfElvImdMN051Jj0jQi9JMENhS1NRMm9qZWFeQEZeRCh0VU9GNTIpPHowbVFWO1FdVz5zRmxpaEd5JiYqLDFYTFBDeiJEeGxSdk8y'@;
put 'PG1YOmBeUSk+L3Y1WVdBbCFMempPOjkpR0xyKHxpUGJhWGp8ZU52KDE4Tj4uOUZhRWg2IV5Ub2c+XTEvbVBMMEdJUSFGZSFKO3BiWWN4MFJjKE8oLzhWQjBVfjdAPjQ4MnhgeXgzaltRNFNdVU5KXX5pRnw0QU85M2o7PDAsRXY6YikpcmJWc19rQnp6VCxpU0IxNUplbCYkIWF2cGtDcXJSfk01'@;
put 'JnJhTWZLZUVNfXdVaFp2LzlFRWVQLipNc3o8d006TG0yJThhdFoybD5PYTNGUjl6RzRjZGxJdTg5ezp0YilnO1Q2SiJseTpJPz5rbVNAQ0JQMUgjTz0uKVJ2KmBaZitoLHoqK1lRTTpGeCRQYVFdI1ElRDMqczlTR15oZEc5KU1JMjphX3chYi5fPm5pemBvUCFUZmw5Y1kldkVQSihqL0txPT9m'@;
put 'TldHREwmN1IpVXFHNDswI2QsaU0vYnpWUS9+bEcrPipATkRleWVBS3lDWztqRml9UX1penJ0eUhiOH1YZWFSdXswIncvIjJjclVEXW51JUZjTUVFdE13O3dScV84KndCQWVaUUNOaFUlcXZMfV5aYiVjRz5VQXxYYlNpRnQiS3R0eWg7SCZSVSRPIV5DNyNNV193amBFSFBjO3BOVz0yZTh1NEsm'@;
put 'UlcpS3EmN1hkXyZQaW1wOmZ1fWRkbmJ7M3lScT9rMlhDPyx8V0RtTT5ZNHsrb1dNYEtFclNYfDUqclsjM01bJFMxIUlMRGVQNFckK2dCeTVpUjJuWl0mQkh6bmwsZ091MWZoX1B5VHx9RygpN1Q7MVRYeiJCXVIjbFI1WTkyYiM5XWYoS1IwXk1ZNU14QU5mdDplSWxpXm0zPHZIJkJ1XSVwVkBk'@;
put 'YEZdeiNZKGl2O0J4P1JUSSh3YEtgQiQyfn02SnRZbSRuUklTTWpGXytPPHVPcThuMXN+ZHZQVyx7IUQ5emE9PFNlOGJEQ3dDXytDZiJVUWMiIjAzdVd7WVlYQCZ5WVU+NyMkfUgzR3JQcDdXKWs/STUvQm1SanYpXz5QdmdLPDhEaURKOXZdT1FqVkpnXTdFeU51K1clQ0M6bzRRYntRMjZpME5C'@;
put 'T1k+YiFyPFZiTEQ9M00oM31ySVpDJiRsMSYkVTFRL0lDSSVVSzZqPkdSZzwoIjQxUlBmaFJVd1ZqMnBqP09lKix0Jj0ocFZobERXVU0yR0F7eSgzMWVvb0x9aG05XU9Sc0VIWnolaiYmWT9xcU55dVFZZWs8WG15bVl9dGYwcFRCcjBURDJLbFJ9LHd6VVZAZTBkNXZlVWliOjMvV3BpMFl+cWkk'@;
put 'YWFlcms7eDRUdkQ6M0tXSG1nNkosNz5bKFBDNCFRPU9+Ozo9aEBlVCpgKi5JQDFORVl9NFlLWjtEIXN4cUQzNjRMYkxDXjM7N0MhU2tRNzgydXFmRHtkO1tlVUkhK2d6LFRhJGZzR3JUIVVKZnJrP3xXXzp0ZjNGVnNLQEdxR118OE8zJSJteHRLYC5zSyFscXs1VywyeX5pL2lIWiVzLEBFZ0Ji'@;
put 'NzFfIz1CXkl2QV8wXXN+Q1VEYz1yIVV6QGEsY2h9Ylo0RTB1ODM5JXxUPjdQaGpSL2p5N2xecEM6dEp+VWk6aXRBSlJrTmFvNlB1OEJyQ1d2QERZXVVxPHppMGFqfDM6Pl1QRl5ZP0VPVlt8V3MpZm1iWjopfF06cG0uTWRxYGEub2whTSRmMj8oZk9HODIySWBZej8yUSNuKmIqcnY6anBkImEx'@;
put 'VFJ5WHJCI0VseEUjfip2U3pyaCwjNHhxelJETCN7aVExRjcke0w/P0cxclZ5Zn5LZTxhTF0pMD43LGdvc2NyRl0uZF5ebkpGWzZLTXI2LjIkWH5NM1dURG9STCMxTSNfWT1vaWMoak0/aGYqIn5JRzRydFUqM1BTSUh2cUhVVEhWcip7WTJ4SCg5akVgb0F4XyspQStbYiNYSjNGUDIqSndzRDs6'@;
put 'V35iN25eY3coQW44Y3czP0VrWjdIbyhPMGxFX1ZgZStPL2FodTkpKFJrOmJPIlRGc0M+QWRNPyZsQGooT08xaDk9Q2x5Zyg6YVBlfFhdYF07T1cvJWROKkRdZi8pSDlQU3svKjs1azRiQVEsJGUqI3RCU2pPelUiTExkeF5zTGwhaklnZkNXJClQYXpWUX0oWFtlaSpdTlJeemoiMD9hajVINkZL'@;
put 'UDdwR0k0JXFuRmJDYiRUSn1JI0R9PCxoWUhQNjgxZzIhVFZwQzBeYGlCQDtmLGhiazkuSyhJflh6W1JFP2VwUDFFPXUiPFQrVyE4TG57diRkZTdJQlEoUDE8azdgXV1PUWZQOE9AKE8/amNNcF1tPm1IXlU2cm9fbTVASlJXIikrQyZfUW9oV1ZKLiVuPl12K3BoWDc/T1JEfDpKRTxdSzJiNmFI'@;
put 'fjZwNEsrKEVKI10uJUFRfjd+M0Y1RnFAITB5dDxQQ0RNYDVLYUtWcDRSY052NVp4I3JpSno7ST9HNT9RY2N8RE5WOl9sXmooSkhSe2ZuaysrallaaSZ+fEJeN10kYmQxL2xLVyZ8fXJYXVpBZlZ3bW41S1NATm9Ge0YkJGpTQiM3I19uUXhgOThgcmBkM3codkZRM2RuXzFYbndEI0QoVD8+RGxS'@;
put 'JmYmbkJJJkImWkQoLnZeLGBwOUIxQ19Ia0lSaWQ+Qj9xM0MwSjZIZGA0MUcoTS5pK0VvPz8rWylGN0htOShbRkpQWkVeQ3FranNTZEIjTHluSDY2WmBlOEZ9SC9RO3pBSV0xZnNsNVVVWlVvYWsublAhWVtMZGElZHBJcV4kJFEsR19iTlBqIn4vb1BCbDE0OmU8a0toYkA7KWIhTi8hSWtWLyl5'@;
put 'YXc5PFdkTG86YTowMz5KLm5rUXlmUzIyY2A6Mj97STRPRHY8ZGp+UzlBaF9Oa1dEJUU7cjVWbGFMRDFqMVV0Mm1felV6PFBJLj0hfSUuKkt6MT5DOV42a0c+U3o4dlpqeyNHfUlycSQzcX1nTXg+ayQwJDZXTD5bJitRRypXUVo4JXZNRjp7LmNoSCtLR3g2VXk+aT0qO3kzW0o+aGlTZSEoKXV3'@;
put 'LD14Jn1GXmNWYFIoWztpQXRMWXVSJHosS35aVnBfYHwhXm1GaH5GSz1uIiIkOmdeK0M6O3BmTmNVcmkhRS49VFc1RVBGd3kyRm40bWg4dlVsVU4pPEhFRl1pJjNYLiZoV0g9ejJfZjYmPUleMn1jcjFfJVZaWzd7PU0yfClsSXxYaX5aYyNoM3lReXIiQGxmVks5UG94e0liWUh5dT5xSSEqQS4p'@;
put 'SE8hdXwudX5MMT42TXc6N1UyQCp7VkckXSIuPWRHZTU3Y1A0Im9END5sQn1GU2UjZ1BTMnddWTtDL3tjfGVUWUtqRCY1dGM8OmphTHhHenJgL0U2Nk1SRjY1ajE5ey89OnxjSXRzK1pvNGEkQmQ8aVBKI01pIntKbFk2Vil6UGteJVcvK0cpWj1pRFYwSk0hajtJPWNpLjshd311RkAqayIwcXB1'@;
put 'eG5kYWhbLGRvTV42MSwybSoyI3M4VGRzcm48V0AuL3tWM1lgcCZiRkkzMjx8RHQzayI2bFYqUyhWVUB0YmdufUpQKm9eWUolcFVOWGghPHo0U1NHe0NOVTE+JUg9aTdlKVNYLnxjPVA/S3NOJCQoS3okVmtTPShDfHlKZ0l9RzFxKD4wcmRgRltzM2p2dV1SOEFlKCIrTVRaUlpaQ04ud3JOM0V2'@;
put 'ZlM5MkBYbiJxIyJzdUJVcXJsfGNFfHdzT2BXaj8kRVN0YW1pa2x2NG4uTkFgNnFbUDc+RWxTJWBLdiZueS4pI2UjXT4mfj8/ZnBldDAmR3MrOHkpLkxQW3RGJj8/a0Q9QChFMk1YdzExRnFYKEpfaVZjNz82QXRuS2ZRL1tqWEJpTW5TI0N3PDVRRkhrSEV5YmJAbFU7TntIUSsjWTspZj8sLEdI'@;
put 'VSxkJSM4L1JMRVYrYnxhW1tNfn06diZWO3dLUmpGVGAwfDlZNXtkQG5QSmNlMXlVTWBNYkViVUpwRCVgIXhdUXJdS1J9Qn5AMnM9WmB0KT9tPyFXcytbSTpWfDBMViMuOHolWkVWODpdI1lRPUJVV2F+R3heNEleb1cjNEA+bnF8M2ZWel9hLEg6V1J4TEV3S2c5UzpoVXYkTl96cDJhakRaTVY1'@;
put 'bHAiRkMyTG4peTFxO3UxMDRzMyFbV3VoLlI/T3lBLyNaPSlUeXlbS0VXYD1GKlMueGxSWEl5WkVETj9YazR1UDAlI3EvcEM+KCxNaXgyLEllTFllPm87a2ZdXWRPeGtQPnYlbCZKWio/K30jVERYLDMrRytOdlBAJH5rS3xkVjNtPnR9VzVqMVs/OGM7UiNRbjlbNXI5MH5iQ1E0JDlHbnxIQz8k'@;
put 'dnYvQnlHUHw9MWRtXyohYHYuc0goflhgWU9uPTRzZmEpQzF3dCN3PV9XbH1sTlV8Pm91LFMifk4uPiNdSEhOX104Rn4mYFdYNG5mZTt4YkspUnMrbWdALCNGKDFpOWt0ZkgyUWl8JHduIjFRcDVvXz1DKFRXOjxOTEdDbzcqcjhiNiJeb3BgaG91PzxXK3U8WFU4IUNUXXdZT3BZMlZKV0cwald6'@;
put 'aVM2eGNxZCpSY3UsWnk3PkhPNy5EPnBQbWNmWE9sMi9QO3UxK0QmX3dYbGZnWnxNKmdYTW5icDxbMyhoZDZYVGU9aVR8Qi54Qj03L2YvVmlKRmExSVVoTDc0LGk6JjNIOjYoSnh8ckE/ZHJ2KWovPmMlPClxWFR2T0lnaUZwbzNaRF13XWEjMyxxTTFuJlBiYSZyLCFSOXtYLkJnYSQ9WXQ9Qjxz'@;
put 'U0NlUUF5Z0YvODJjMnVKKTZWT1I8Y1BjIjNdd2UudCV5Q3p4UUZsWXZPO2NtPWZdYFtmXTVzSHJyJmU2Sk9AWSw/KGVUU0ZmTTdlSHpZJVBtKDI0WzIxfkR2OmVYPl5MYlE2JUFzeDttQkpWcil+USpJPCVOaUFaayxCai9DOX1ycC4kU0grKmVpclhEQlFvW1lHRDRCJH1IR0ZEO3t2TiNmYU43'@;
put 'WzFNQzYhOUpIayZZUipgN3U9MUgvLn0oOnwyIX19WkFzWC4+d1M4N0NvYiRebj9bJVple2h+JGB9b2B3bS9PYmooOVl0JkJYXXdKaytLdy44V09YWjJUST9XbU5MUVNSPVNxRDw+WjdsNzpPakkyTDEzcjZJYjddSmw1eCE6bVhkayxraWRSaHw4MW9OQWE/PldMQHI9P0F+Ql1NKkF5aUw7djJj'@;
put 'MV9jZGkxI3FEJSh0RHM8VFRRNW5SIkYlS0x9RGl+UmlFR30+Xzp5Lz82Unc1VH1HMkV2bV16SChVP0dXTWpRQ1YuJit6SkxKQz02dSMrJWo+TndEJGhtdXx5Jk99ZW9Tb29KOG90Lm0rUjB4UFdMZWowfDNVMmA5Sj5BLnlaQk4iQFM9M10xYmtWUj59cmYkRmRzaEtUZjx2dzgiKCk0a1EuTnFa'@;
put 'VStCbkU9X2FhcEZLaFpoK2IlWklfUHVONDpYd194XzQkd0ZdRls4IkVxRFZOL1F5OiJYQT44eFs5P3p4ZGpnNyw9YjR2JFI0R09xJTREcGZ1YTtTcWczOjckY3kxOD0zX0plWVZaNX5bOjVafmNDb29hOnN5NW9APkhbT1Y/PmRdUHhqTV17VWhtRm1iMU97UyM3MWJhWHdWQHxTP3kwZVQ3Z1VL'@;
put 'eTxELkd5M3gwKDImQVprJn1oeGB6PCJsMXcoYy9+Nz9pR2xGYGA8Mi8xTyhPNUxYI0dMcmZMVCl+MnRBRUZAbz1yPU9NWSpGKHt8W0ZUJFouYjVuSCFBSDxlWnxUMkt6QVQ3NDAoW04rMzx3ZXd6aUgjcnlbUCpnc1ErNlpGfDI8TCZpQSJFUEs6N0c6MEdAdlsjYHghandKRTs6ZnIsOmMhWmZe'@;
put 'L0h2amZdOS8mNDRMT3Y3PVpRXzptM25nLFhRayFeOn1fZCZbdXBTPHB8eFlPe1kzb2U3P3Z7UUM5bTZOdEF1MlI1Qz91WVd5SVsjPF1sWnJIUDJpTF9ubFJbbUE1K3BmUHVXLzdWd0NTWzUoMD42TnpiYVZgXj1YZVVLakZNYyElN1U2WU5xYyQpc0tmVjtKW0xONGczfWZqOHxZbnwlVDJsZWFo'@;
put 'YiwvYjU+PW91OEphaFhEaz0ybUx3czNOKUIyJFhEPS5FUStuKGt5TTMpKyk+OCl4S0chQEZHezwmXmFvQlF2eFBtXj4qbDslTlcmKkorLmVCbmtlKDkpVnhfZG83YEtDKWw1NmFPXXZPMGY7Nkl4PU1PWEJUMUQuQHowajs9LjVYRm1mQm8zTipkOFZwRUt4VCVPO1N3a3JSaVV9O3xEW1s1YlMr'@;
put 'UW5JRCN+eWpDQS86M3BRaj1dKWF6c0dfQyM5Ky4pW0RrVll7aTlZbzd2IU1SMnA5WXUhMDc4MlB5KXU0Z1lzdWJiVFg1ejs/QWp1XV9LWk0rd0NmY1lAX052VUVxbnRjKXRbSUJqJEROPH14Z0U5NSNtfm5kNVVsPmcoISt8W2Y4JWNpWTZnfDVSVH1icCN+VT9zYVJWciF+UWlNSzIsamNRblRu'@;
put 'Yz97O3xULElvPEV5VGQiaVczWkZKUnFueFdwRm0lQ1E9XiJ5XWlnYXJmPlV3Q0BdPmA7Sj9qMzEzM31GTlpEP1BqI00/dyxaNTNUL0FRZTFrQGBHJH4wWVJBLzk9NWIjOGw5fVgyMjlvW1prKjxuMzxUVS5zcjFDIzVLaGhYSlJ+P0ZCNiVqT0l5PFBjTW08fShRWSowWEx1dm8lT3lYW2MiYEJP'@;
put 'NjludU4kMWJ7NjY9fEA7WXE9UiMzMztPUkZdbiFaUzJYc3JvTj8/aEhNJWNQK0hGc1dmPyxIfmApRjkrWE07NTw3ZV1OeUhUSEl5Y2ZYdi5EaHVFQGx9YSNwaSg3Wm49ViF+czlNKHczRnYsLz1yWUBpTGgmQntITmElWElPUXArU2hGXkpXfCYvb2dTTlpMMDJQRE4yVzRIW2lhMkhYQiw3Q3JV'@;
put 'Q3lYcVdWZzgvKVtRRkI6eV9YL0FpIjxCIkJYbFlHPEh1bSEsUVNbQyFlMlN8fSV0OC8zZk0hPXpfIT98dyxTQ0NTJCMuL0pOKk9MUDxNbkJWTXJ7X108Ozg5Y2g1JjkmVnJye19dPDs4OWNoNSZWcnJ7X108Ozg5Y2g1JlZycns4e19dPDs4OWNoNSZWcnJ7X108Ozg5Y2g1JlZycntfXTw7ODlj'@;
put 'aDUmVnJye19dPDs4OWNoNSZWcnJ7X108Ozg5Y2hrW1pAZT49cWFZMD1rNjd2N3EuXiEmW3B2aHtVdWQjSi4razdKTld6YXJBZCJaLnZZPEYmS29RX0BEdiFnMVZAZT57SEJqU24meWFyVF8sJlJkeV15clRfNGo3R2w+YF0sJkt8ZFRCaDx9az55clRfLCZLfGs+eXJUXywmS3xrPnlyVF8sJl0/'@;
put 'UV5PfDg2ND41MnNPenJUXzIqVF8sJkt8az5WU1U9aXN0KzcmbWp6MUx8RSY6Zk5XRUd3O19eJnp9VntyW3wqYHVbQS8iM31We3JbfCpgdVs9cS51ZiRFJFApb2hMIU4rVVohenx8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8i'@;
put 'M31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbV25YQEs6WytnSFZvM0BLJSV7ej1Gcy5eQWMsbUpOMDVtMF9ZTl5BYSJOcj50K109aVBDK0ZMQHkuJXFmQ3lMVylMMHBxdkVVdX1vZ04mdCtdPXQ+'@;
put 'KzNNe3s2d1ZYXUBiR3JzOiszTXt7NndWWF1AYj5iNF9FMSpwWnFvOGVzRGBHYCtaYDNNe3s2d1ZYXUBiR3JzOiszTXt7NndWWF1AYkdyczorM017ezZ3VlhdQGJHcnM6KzNNe3s2d1ZYXUBiR3JzOiszTXt7NndWWF1AYkdyczorM017ezZ3VlhdQGJHcnM6KzNNe3s2d1ZYXUBiR3JzOiszTXt7'@;
put 'NndWWF1AYnpVREtDckwlUTUuXmUmW3BmaHtVKlFzMylPPUVsQCNkeno1K09+YGN1enM6dCtPfiNlQ3lKY3JYTl5TLEtvLnNgSEJqeDpuTDF7IUwxe3dWUF1fNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3Q8cS51ZiRFJFApb2hLUk95cHlTYUJETE97V3dEV2NbdEZIczQqQkxPe1d3RFdj'@;
put 'W3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJeR3Yhb2t7VVQyKGI3YUA2ZU5vZCF6Vl15em5jLl5nWUslREteNC9Cck9GfkNLXjRfdVk8LHVWQFJGJFBDK1VPKUwwcDhFSm8zdktvM3ZGSGV2Y0VYMmV7ZFI7TzJjJXc3ZFI1bEhjN2dZO08y'@;
put 'YyV3N2RSNWxIIWBHYSpUKndRPihxRXFJPHoyKER5fEBDa1pVb1JFOW1leDA9JEBXZ1NpRj8mOS9USStWK0pOZXg3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPMmMldzdkUjVQcEdVRXtVb2ZZMD03cS5eISZbcHZoe1V1ZCNKLitrN0pOV3phcls1RE5jN355YXJsOUNLNDV7dVk8bjBWQDpL'@;
put 'QFBDK2w3ZDxCemdsJnlhciVwJXAlcFhWISk4RTlTR3lnbDd8VlpGVVRaO089RV4kfm19PXdMekw/K1luSE1JPEdgeVJIVCZgcnpySD1iWXkpM3BUJDBHMSo2e2J1QHZxSWhDKGF3VilmR3pnYCFUaV5aS1I4JC9fRD8lUXpMVjFyR2k4JilZWkspeysyMXZMfTU6JEV6JlJJQHVISGB5Ujo2Tyxg'@;
put 'Y25HcCl6JTdiQysqMy5eLmt7VTFRczNmMShiI2FANlJhJVhLJVB7cGhZVnBbWDE3ZFI1ej1DeU9kS31GVTRhPER2ITZEcCtbZ2xmQ3lPZHRYTl5mSlNAb1FranoxNmFLJSNHKk9EPSlqPT1DJmBhWSw3ZTNxNUsoW1ooIUAvZEBkb01NUTpIVzRfXUV5UkAyISJeZGsoWzV0W05IS0NvKV9lMW5V'@;
put 'bEw5P3d2QUs1ZGxvOldySnRdNXRwTkkrX1hTOHRDZTxGb11vOlcmOjoxblVgNyx3NzlTb3ssb3oxTCZWeDExTDNHbjBhN0s2aGk7KTE0NyVgSzs6NG18Nnd7M0xqOVJVcl1WKWxRMEheOlRAWjlXe35GOjtpdnFdVVhsZy59PWNIM1h4fVc4Nn5pJGJMckchTGd6VnlpazdaUHQpek9tJTRtYFBf'@;
put 'W2NPL1M2Ymx3KTsudWpkeFElfnl4VkhCampfWEAxfiFIQmo0RnArT34mUEMrVzRAeWJ9JlgrWWpdWEAwc2dQQytwUChMMXs2akZVN2h9RHYhNGwmeWJ9P3lEXjdVRU5NTEJqZTs/eSxVTSFDS3ghfXVZPFQ2VkBTeTxMQ3lET0JqbGU+eWFyXjVDS1cjW1hOXiElS29fLipIQmpsZUB5YXJ4IyZA'@;
put 'JU0oVW1rVjhjKSUsViNWTmMhIWo0ZnRYTl5tSlNAOzNGUUtzRV5eMHkjbTo0ZiwlOWJDKyI4KlpQcWdQQyt+UChMMHA4aiQsNig7Z21mQ3l9ZnRYTl5uSlNAcDlXOWEzWkpYUkoleyRje1A8dSpoOEdsY1BtZjFdeDtCd31mWU16OVkqZTZHOUp+MHVaOTI5JXF9Zjw/ZG5aOUwhXW43XXRYdU0s'@;
put 'JWsyWFA+YXJgeDsrKCI4T35Nb0RMSU9DK2BMa1hOXiJMVkBHV1NXQytgTHFYTl4pdFZAR1dmZkN5QFgidVk8V2pJJGVANFJpK05zUyZrezB8ezB6JX5DQmpHenNtVllxe0xJeXM/RGhleXNjTXo5Zkt8ZSNiSmhhWEpoNUdiSS9yQERaV01zTUR5Z1VQNVdFR0UxaSZ+QlE8X2hJNV5HVWZHdzBZ'@;
put 'eXtzMWkmfVN1aWksUHh6UExnVGBBR3E7YWp5PkNJcSlOanlJej1oPXcuQFB8ZlReQkQ1Z0tYbjlZNWFpdltwO2NhekJ4Ljc+PCFIVjZvXzt4TW9gZiVicFtuLEMsSCMubFEwSGUlekIvJHpCLyR6Qi8kekIvJDB7TH52OTEmd2gkR107Yj57OWBdM1FLczddV31zUE9hcnBde0NJKmtmYS49cXBw'@;
put 'aEJNdHIsKz0hSyYpJjB7aEt4aCtVXXlEXnpYLj5PRlhOU31VfHhnYVo0MHhNKSVLSXkjZXt3LzU7eXNETVozY1c9UChxfURaV09NZXo4amFaeXskWmdXTWcwP0c5ejgrZkhmIkF6STR1VHFuLDBDMSp+WHJnRmhWOFlRU002IXhNRmgsaVd9X3kyUGIoNEw+TSZIfTtNWilNTWd+QU93YTBRRTZX'@;
put 'THN2YWIoaTxaenxJMWhZdEBEcTtCd0VeQ2c9UFtne2lteiorbEAlIUwhd3RFYitNYjNgNy8yKGJBeyEwWVs/TnJkeSpWc3tpRDAkU3wrWFl6ZTxEezVwYl5vZ1dbNDsoWiV4N1p7RUhfQzl0WHB8Y2FCZDt6K1VDPFdWNkdlLihLLEVkaismRGtKYk06MyFFKDFPcz5FRX5yZGkkQF57YiZyNzYw'@;
put 'JUJEQj5OYD1sWjVPK2Q8UzpDYy9NJkVydyg3OipOKmxtIjdDcWJWTz0jOSt4V102VGg8MTY9Iz9kTihyZEQmODNRPnh3KTdqYmdmYE9fPUw9M2ltTUU/QTh+cF1iOiVENENVfmtFU3hGTl5qNkg7RVErQ1csUz1KKV1LdV1TKV9MLkZWTHhSbHJARER2P3h3WEAzYkR9Mi9OO3owaVpwP11GOTRt'@;
put 'akNXLCV4SHhqbz1IZzs0bnx5PiFuanU8QWA9cklFQFs8RyQlVDZqYml4bz1haWhvPDZrOFM9YDhvNWk5KyNFWWxtcDkzYiZiZWRablpvNiRSbzU1YjdjM31tLnVHaFQ/bT1LZGQkVFkmSn5ITSs9WGJiVV0vZ0A0KFhzdkJvM2U3T1Q7cjNHOWpSVURERTk2dmlaUV0kO2xJdng+WURHKGsvTUVG'@;
put 'SVNOU25+dSxTTStrLzVjJEkjTllKaC9kfXE7Rig8TWloaWhhcTVfTUUiKk1SZWdLRSw2elk+bEp3QEBFZXdWSTN5ZWZMViVDO0Bie1s+dypwWzxeW2dhYTN6JUM7cCRCZSsxITpod1tvRDhkOi5dMUg5UGNUNTJeeEwmY0ttISllPFg+RTdKPCo5OSw9PDdvVG84dj5CZWtCKixaOUZMUTtPTjgl'@;
put 'aWo3NnUscSlne2FjJmpsMk9CdjIubU9kLkRMUUkrXzFgNVhZPStrI1dzKDJWcGFefHBsKSVKYWNVWismb2FuZl1ZN19aVkVtM101XWpSIjxnS2pwY3BeZ01GczkwXVVHIlUmRzRwYV5xJDVeJCZBPiJnMjlLZ3FYYyEoOzw9KmVnb284IW55ZW92L1NWcjNxQ0RLVGhjd3ByKS9TTEBebk1RNF9U'@;
put 'ZngmPkVuRWA3ZGJwdXoyJklAWkM7YWQzXUZeWE5GO34vZXBlcCFffV1lc3U9T2tDKENxL3BwbTxEY3BCeWtKP29NO3RyflNicEBEZ0pnP0hpbThiZ0cxYEt7SHk9cCgiZzVIMGVke2F3JjlGO1Q5U3UxezssYllMaT1lel04XXkwITlYV206LnYpZT8hMCFdXkBPfntAT3FUZjt4YyNdJW4rZTk2'@;
put 'XXVePENzeT0jZWBnRDhXSURtLyFhbEhRODFURns9PGU9SzdHcU5aSiF5dm5CO3dmOVBMaitleCkkOXBiWEN0S0pQJmU8RVtdRVZIamZuVDpRKCxhRjhPZ0AqYWJOJk88Q3ZlZENgWHBWbVgmczk0TkojKDtZMSZ4O0tDbj5lbiloKG05Rmd5fnF7dyM5JDNwVV5lZz5sRHJmSFJVeVUlcCNdLnUu'@;
put 'ZXMqOGFYcFkpa2ZmNnFtNyshMUREO2YhVVhSeyFbWFhCLiYlc1kxMmxUMThUS2wie1UqflV5aWVIWD1fdSI3ZWRTKH5AJklZfjAyOz1TdUAlbS5fQ3lIQiw5N14lcSQ3QFlnOFQxaSpTLGE3VG9wJWBAY2NUPENxR3VRW08zbiwkckNmLnk8N18mOVNlOVRQVX5mMT08dTJsIVZsSmhAVW5WOjg+'@;
put 'WDlBKXRUZEIoNjZeVmZvZG9iP2FDM3QjcUpfW2R8MDt6Mm9tVyxCQDc+Pj04Pm55SHR4PmdkO2l6bTR7ZW4paWdfVishPj56Xj1oUEZ7XzJDVS5uRygrJTwmLm4qfWd8Pk9iOm8+TVRIJihWOUQ1NUxUJG4mL14yR0ttN0hWfTpIQGlUX0liSl9bUmYocDkkZzBnUFVnaC8sXTokeHN5YmssdCRC'@;
put 'OVc/NzBETDJqMj0xam4pcTwlZytaPzBHUUJiTl56WmUmM3BRKD49Vz13bjl9I3FoRThKcillKDoldCQ9ZDgwMHJNfSR8RD9GZkozcSRaezpmVH1nRyhaPWVWK3ksMkQwTmJzUTx4eTk5a2c3NjBEcilOV1piQXB8IWJndj1BPkRlWSVmdzpnLylNIVc/azJvK2FRXSRNZWtKTiRLKGJnZ2ZMVG5q'@;
put 'TDppOGBVd2hzb2loV35HbzE/SilOaW5Xcm1SRXsvVTtQcUtkUipTKEwkPUgxak1xRT8vdWEoNGopej94JFU0YyxUWHkhNyV4ITdocHJDfDR6JUJyRyNLPS5YbnY6QHUwZSZ6MXJwUypdZzU6fmclYSZefDUrdmBwIi9AdlE6YSYoWkdac0wxX1hAXVpdUC9TZDtAWEQlc313Z2BTfHsiKm9pbU06'@;
put 'bDFGRShyY0VeUmJNeFRZc3I8RXtUI245fXN2WyYwRF1eOylPKmxSKG08KlU5Q3FpZSlbbyV0K3EkdEY3NmhzMXBrfnZeekZkJGZzcnxMVzFVSzUqOzlHQShBXUtNOGJdT1g4ell4QD0qazhdTmNxXzpeJHhzPFZLKkFIUUZRRlFGUUZRRmZZblBUV0pzdVZjUDZeWCokUE8qOm5FXldZMV5tZzty'@;
put 'RD1zWUMmO15BaGpwe0c5Nl5iNjIqSENzKjZQZ1klOys8SzVpeyNrPD5sNDhKO0w9aEp8R3M5ZGRSdyk7NW5MTmQhVn0oMSRdRntFJF4uK0koKUUkfXBmN2k/ZjxQXTZDOiR0Yk1WQzlXP0htXiFyOW1mUElVMXE7WVpQbEh7fm5kT2dFeTJhOCxzPTlnLHtnOU0lUDZzMGo4MGZibmYyaShpQnpw'@;
put 'NjdjLFQpOyxNXltTUX5qfW09IWVwT3p2O0RtLD1BPmF3WSgpUzMqIzcuezdRdGJdKnpoVyZTRi9pNE1HP29hNjJfdSFsMF5bTGFoSDNjT0RzOXtBfGpJSW5dOkkpZE8/RXBQSCg8K0Q4ImZiOyJIdnt0WVEocHw5UE16WThgVVg4UmdfO15aVjssXXZwNXsrOTs5P2dbKz5EdCtyKVM5ZGRJc2hF'@;
put 'LDkzPm5ZUGRvMlUsZSo5ZChSVDp4OShSU2RLKVlfcU47RCwkeTl5RF4hJF5gXiYqKHh2KV91TzJ0JGZ6Y2J2MnQkPj07e2o+NWo9I3g+OnV4Pn5OQCVTUVFDIThxSnVqPz1nUlo4aGRCejk2ZH1zaj89LGJDPHdma1hUXSJ6cU5jVjZSdGtkQ14hMzNeTzMsY20+RWRtS1FGZW4pMTJKRDVtKyU0'@;
put 'IXMsPzN4X111LF5AZnklRFl4UDtnSDhvNWRUN3g8M3IyKCoyPHZdaWMyeyg7KUxYIyR4RHxXI1c/bSg6UEFoIjJNK288SnVVOTYhYSk/aVdWUXE/KiEjbDtJQCEuc3FeO21KSFlOIzRLcEAleHA2JGxFbzs4UCtwa1dWKFZ7P1ArPVMsMTNmQ3pUNTFmS1gmeipVIlRPVjNmdGtwU2ZULD17dVQ9'@;
put 'PipKUmhRai5aYig2U24oRComZDgsSkAqV3o4cihnem1kfDo2d204YikvSEtsT1t4czwoSWB1K2JqXTRLSWQxc24pMSxyOUFgMnt+X3J8NEtsJGp5Ym8memlkRCY3fG5OY0Z6PFhuc3JGM0czVGw2JUt+NyVjZkcxVmpWZyZ9Rmo5MmFBInRCeE52VURsT309PVIveyQyQl43bGdKeClIPXo+a20h'@;
put 'JTwmRn1kYm8sS3UiNzkySlR+bTBOJU0ib3tqQyhYOX5wdmVtUUU/dGxHI1NtZXEvbTZQOV5JSygpNXY0S0Q4Xyp7LGYmfG01ZVluWT10fSg+P042cmY+UE5wYnlCRnZHMTheYD9zOTE+KHgmRD1vQCp4PnkwZCQubChyY31QOXM5a3BfSn5QRzxfU0ojektKOG4lYV4hSDM9ZCg0Pnd8PWdUZFtw'@;
put 'VW43R2lqTSgpd0ZfQCtFZUY9JEh0cnBRPWROXkU+Zns1aT5qamFwbVNII1ZWNzc+cD4pTHByYmQ2QE8hUFVLOFA5UmVkeiZKKCl0WFB+bVFgUzFyK100Kzd4JjNdJj9dcGJoRTgyRV49ZyM3X19kPkE+UGFMdD49WypMIUchWTU4JFVKdyRTdjheSyoxNEIzZDdIbWBtQmcqMlhUNWN2OzptWHRg'@;
put 'UmEuQWVUQ31kNXU2LFUkXz9La1o/I3pbZ2kmS3AuJVc/RSY1dihlZlRyXSR5NV94RCw0Q3FwZ1YkQXhQb3ZZbih7Py9UVz1fU0Z2bGdYJkg8Q1JeJUhOO1YwPkkzP1szcDI5bnkoJSF8YzBeMlJ2WXhTanApUV9DVWFScihVXUtdfTorPVUkc30sTSV0MyslNmZ+UGE6Mn11NixBXyE3d15bZWB2'@;
put 'YHdnSlMoIXh4PiooPSohN2lkXSYheGZ+d25hXkc7PD9GPlp9KiZ1bDYlSjxyIVB5TVZqfll+TStCcU9xKD5BVklLIWpGX193b2FgYSU2KmVxKSRQTnF9LG5wS0JgITomTHp9bEV9QCo5figxIjI/OS97P2djXyklKDlnX1ZpWj56amckMyNYUE9xQ1JqR1RpYlB7P0lLP0kmN0cxdzl7dSt4JmJW'@;
put 'ZHdKcTNtSWpoZi5tSTZzIVRFISg+WypzKFM9dFlgc1NIaV9oUTM/W0tSVy90bkQpWypqY10yNGxIdCsrUyhgaWV6VExdSyo4TzxOLD9ZP0AhRGV2QExGczEuXU9fVDpQci50aSsma3ptMCYwZEA8MHxuXldxQFZGYmUsUSZsU1tHeV9wLHkwMDlMOmY6eGpmcWRPUztjPyNxZnNjSHw5KzJURy9m'@;
put 'T3l3bEcpIXg6N2R7OXI0OGArZkpHVkNbTnYzVShdaTp3MyYmSyxsaUtnSF0uKW5tQCNUUS5Ue20xbml3dGZZJXk+Vis1eDh2KyNJM05fcWtMOTxON3o0dWgyL2owTiZOPUdMZT9ZOnA4VjV1NnJoL1dKOzo6NlsreCFeJSk/Ik1bYjFZXVo+N1dKPHo/TVVEfU5WXUx7MWJXMF0ydXFAJT0jdXFu'@;
put 'RWA3RVNCVS9VdDsoK296ITJrS0Q0e1pdJSlOJk5dMk9fWCpaPkI0ZCkzWmBaMm0jT2UzPFlWRF5Ne3lWaSQ3dVojYmQpUWElXnglTVVSRVd5dzlvPGE1S3tYeV4hZ0dAbD0hZXs7WmQpNHw5SG41TGF8eCNdWjtWcDxaZCllZG1KdTchNyV4XmEhKUxRJmUqNW1RJio1Xy41ejRGOktwInQkKjs5'@;
put 'NlQrWmQpfmsvNlA/MmF7YzYuXl5QKlRtO05KcCFxJnAyOVIyO3V1bCRuWk4zZT1GczNsPWt2KyNbTWgkKyVDQDIxYDVQP0pqfWNQKituI3VRIVhmRztSKT1pYnpbNVA/Ziw6aih4RFZDaHh6Pk1OK0xhb0deJUZsMml4el9VfDA3Oit6OUphOGZ7QDZ4UE1oZSorWlFhU1EiMHMmKV0ib3cmO2Eo'@;
put 'VT97V3MpJVR1R3hFcUlzSDk0bSh1TnlmaTpYKzFkOVk1UEZacW1iUjhueVo/VFpWXl00WnB4PF4lMjBHaiFkR2I2am5DNmhiXzAjNj1WM0p4azpMazZeelM0cHEvZGtHYzJqcFE0NTxmPyV8VHZdKWciMnUwR2p3M0JIMC9aOiRlX209TjMjcTxBZWRPTW9ENGVfcWxrNHVLVWw1Nk5dT205N2Fp'@;
put 'IWwsQFtKJilEZUphWysvJEx7L2ZSPnx1Wj9PcktnYnxuVE1XP0osbDw8cWdFUH57aX0hT248UChgNWZwUU5mLHEwWjY5NnIlYikqTiIoLG1XRk07V2deJTEpMkRvPWxmOE9+cG1tL1U7JW5nRzlwcDVddWYoS2E4dWtFJjkueDs/VGxNTztpOCo3bGV7YVslel1VWnVsb3BMfH5kez93NiZIR1FE'@;
put 'Jl4yRXkodUJXantyKVk2W0sqQFNSZks9VFgrOCV0UWxiO1tqXmtGSEBULltQTiZsJDdASzVELzRkWzYmSEdRI25VbERPcmN+TWlvfHh2bm1NaWt1a1JlUixJfDZxMHB7RSlwLm5ddiFuQzt9dUJlRD5WNyVQcTJoPFswMm5wJTxnQ2koZUB7Q3BXc0RGT15pOmdLYkpfSUg/KDYsOGhkPzxqOmh0'@;
put 'XT0kdi8hbEdpP3FifSptPG8/ckNLZjo6VD9dME9xR15DcS8qXVJjaGI4O29fRDQqc0tJPm5hRjgoZV8rYmZXZzwpR1AmZUhgPHImMi8pVFlUZCR2PjtZIWw7Z1BuP1F8Z1A9MT4pWyEyTzMjJDQwMl91LEB6Kz0qSj5UPSlMPylbIW81ZXw4cipKdVEuJVJ2RDhVKllfeTkuKzg2cEZLRCMwKTpt'@;
put 'bU9JYlI8MCVVWyVraC5dcys0Qy8hR14vanR1V049RyhhdSQoeDhSMj0+SVYhKEk6YzJ7fSRVcnA5MyMybE8mfEtoUDskNHBjXzZ2IX4rSyF9P19iP2I8T3ZsdTNJaV88KWhkJHYoNjNLXzIqSFRSS3s8KXN5IXJmUGNRfWQ5Tyk3amVKUER+OFVKPDhiZTt8e0pkakVWZ21jNUtGYDhVfk1+e2lS'@;
put 'YDdMbHssd1BlOyZWbVFEOGc8PiosWCkrPj1QezldRXs4VWYqKFYhLmYhMWI3OGYwY0sjKGU7Xk85YjEhJVhiYkQ6fURRRj0hKXhBO2k4UTo4UEI+YzMlUG52TGtAYlQrZEsuRnM5VD0oZyx1Wl0sK3VoXXs5XThdYX0sem95NjV0VSE9NmMiL3FsRCppODtUcEVFRiZeOWNvdlpwQzNmcGokX3VC'@;
put 'S2J6NV9IZV5LKlMwIUc8Z1BNQFk/XUl1UUxALFNIJj9WQEVvX0V8Y3FxfF91OT5ERUMoMF17SXVLKClFJmpmKVtPX245aFBQX097R25WOmVvfXBlIU4+WDlePU4+YSlrYHV8RHEjMHN6dH1IYF4vYS86bWBfSF97S2RPRHMqQFlnRl4hSTJqU0haYmZ7alAhcW9mcHtqOnZdXUQrJTxWSD04bWRI'@;
put 'PipnOFEhdX1fO3B2IXJiVHdueUosSXxubH0ybXR8PiFGZE47Km1XVmZwOX1XPHA4NzY3QDBeUmJbJT4wOylhPF0lbXMieyFOJFNLc1VJdVEmKW5HeT1KTHkza3kyZWZWeHxnSHR8TkBvZDF5YCF6Pm85ai9vLCw9QUAhT1c/QitVP11LTj5BQG9RV2lTO3lTeWlgUyMpUWxjViVQbnZhZl4lL01N'@;
put 'K0UmZyw7TkpZKStrbTdHcEB6Vk0rY3B3Kzswfm1EZzU7QW9TLlgxSSNaJjZkaT92XUduLDlLbGErZD9+JVcrOSFAPUBWe2cpckdTN19meVdwfm1fOjQ/WTEvb0ZtMH5TVUo8LDZ6WTEicTxUOjBaSF1pOHFFWHNbSzldY3dfRFo5flBMeWk/VCtsPGV7OXJIM25GTTtbRWAhMWgmUEV9ejErME1W'@;
put 'YUV9UTFxZXFAMTgmWD87SngmWD9hRU1oUTtXTjVeUWVWfmQ7RSRCZXIpdX19dUVgX0RyKTAqKzJ+YzY4LD0obV86a2JdMlE+MERqRSYpRD05IW0ldSxIbjVuVWlPK2gxSEBAXUpfN25YNVoxbz1CQiosWVF4K242OTdnaj89ZEs2RilZWmpVJXo/NG03aHMyKzArJSFHc3FsOGNQQSU9QFNaTT9w'@;
put 'KSJqcjxIVDxEeCYvcDskfG0qNEJlSj45dihTYDxGNnFxQ0dgN205ZTo9IzdRfT0+PT9ZcikvbWk/WG5iVHdQbm9gU3dQKm08RE07cXBxcUkzKW1oQFQ9X14hLFV1PFJlYSJtfjo0bSZEUyhzOV1JaC5nPDVVOlJ5UVJlbTlMaGk4IVlfbCRPUmV5PVI2PCRdJGhhaH0mMHNpKT9jXz1qQ1BqZF1n'@;
put 'eis0cGdoQF08JjEsb3libzhuTnxjOi4/eThTVk43c2wwXjY4SEAmMnA4ezUsQGNvJEVOK2k6XWZHMW09T3o2XlFeO2Q9anxeUFV5VTxAIzc1Z2YxSF8qNk5OJVAhRmRUcn17Z1gmdXFBUDhWWUthOEpLbllhOFA9Rnl5OTgqVFl0fUNAVHdrflNVOmNhUUBWMUh0KGNAPn1LVH1KKClDQChZeCwp'@;
put 'O1RedEsuPXt1YXBDcE1RRztvJSFfYi8xNXpzbDk0ZHZxb0kxQ29FWHM1fVtnPC9aV3BIMXk1QGFmUTxlanpdMjphWiNza31PP1F8QnlSNV5ROWJUPyhZZTpyUixdU3N3OyxRU3JnMG0xYGdfUmNofTFOcTVqMD5+YUZeQCZ6U3MkU2lmMEJ9SD0vek05Kz9oZjoydCREfGR8IWU5UlQ6LzFmeCty'@;
put 'eT0zdkYyNHBhcSIsZ3YmdjFLMTpzeVE9aUpCbjk2NypCYlEhekkxO2RkVF18NzskemUhJUUkLkpGeiliLHg5TXtnQjhPWGlUT21WP0ZmNW5fPWVHczkyPjNUVT1GVEhFJFtuNm8pZWB7SUFoRF5DW052bilQbzh4QV8leXdSOytGcjJwMSEuVVlLIj1SXj8jM0ZZS3FkSktsR2xRQnlwJWpRQnls'@;
put 'bEA8XltDPHdxNztnVF1lJFZFeXBTN1o9ZSNlIiV5Yl8vJTAse0AhfVtZcUR6NktgTXUrKHplVUE7fCsvPVJtQDI+azdELls4NF90bWYmI29UVmk2Yk9dNy4/SztyNWkyPFAjVCY2YlcpazNmSFNuPiEzcHlSL04kKz1EImoiMnZ4ZiFKUlBPY2ddR0RpTGs/dFk9VFojYl5Zdll3VjAjV1BeTF4l'@;
put 'dGoqI2JHOmNiSnNlemVPc1E8YGE+KnF5MXdBLE5sMFNiMk5ibilpOnRPWyVEK3s/bjl2XlJiITRoZS9teCksMF5TblZsRTgybEVgN3gsbDxuamhkNWUmSnljTno4MClyWEgyXkZLeTBbYWR1KiFyfG96UXY8eDRLUldJVF4/QUtEczlQSnshT0hjN1ZidGo8NkVaYnZAJWU8RSFIITBdXjVuYlBb'@;
put 'PkN3RkU3fG5UZDBSY2k4fjtQTjgrT1FaIW1sejNdMk5ELCRYQGQpKHhfKik9V0RMUW9KcjA5NjxWN3FdJUs8RWVZPS8pLiNGbyFlV3ZXLDwjPWQ0cDFdYF5PVXF4RjFmaWwyO2dmKWttRW4zKzpwX3hreClqMW08ZFZwcWIuRE5lZnFSPm82aTo4JUo4W0tUQyVTTm4sMntsZlBbJT9WNG14KTBE'@;
put 'OE4qNkFkSlB9PXxaUmxgU25eaDt2KShKQEsmKUFkfGxzUUAlQixVNmczelBLXmBOeT1kZDw/WHdVZ29FWHNgT3UsJXJuKTMzcWd9NjpJRnJnMEdiL21XRns1S1B+cDJPaWI1JTdAVDU5XUIvRGpBbjUpcjJtOjcwOCU4VTYlTl1SKi9SQntPTmBeSlpaRk12X0E3cmlFYWJIQUZOKCg0PmU5UlFt'@;
put 'Qj5KLFs1Pksqe307SnZbYDI1KGlnaTRRKD5yOndraUxMME9YREEpSkwwTyUvI1FOez15LmhvWXklOHckXzxGPiN1cXkhVEhoVy9AMU9oWGh8SVBHInNiQ1QxcTBPWS9BUUk5MyUrZy42dVAxLHBeXjd2dVdVeCtocmNJM3csUmg1QThGTmY8UnpwPGU6WmleLnFVOzQ2aGhGJGdGdnlFT2RTZmxU'@;
put 'YiM1MWBmIUp+VEJ0cTteWiIqRUJoU1YmRUVwL1g/JkEoWH51Ti9XQlFKT29VdUlPRnRTRXt5PTg1eGhUeitMYWJXaS8ydGRTREJGbTBZKFs2Z0AuMTBMdFUzRGd8L3ppJWd5YmpsZ2ZHIlA2KzphTXtULDQzKU5vR2d8RDh8JVQjWEZDLEY8OHNJdFIzUSEmcyk9b10+TDMxKzUuI2tMaUpJfCtG'@;
put 'RXFKOlEpKTJQWU1VSlE7UnZWQGp2U0VSVXlXR3ZCM1c8aHpybHxXJlQhKT5gKVtrKjJCT0VmNkJCW1loWG5+YHh8TCtPeTIxIXsvUWxhT1FCZ2wzKUtveFhldklLay9VR2puT2EsOmB0K21xeSx2bExrLzkhV0s0UTZvMyEwYVdHaVNxfT5KUWo0Ul9ncnZNY29lT0VyMn4yTUVRSEJYM1Eoais2'@;
put 'KT9Ob3RNVFFXdXVnfEREM2BEMStzYiZbbi8rNEo2OD5GfXBCUyJzUSpFMXI5OmpqZXd0XzJmd2spSFZpQSI1KHZ6YU4lKGprZjJfYS5uZ3MjdypPIk1xfEomVUU+MUg1c3Mjd2UwXU8qRUhWVHx3KEJ7ZkFBe2goJXJgalh2UU9CQVVPOmRSRFB8WkNqOTVobVpCfTRYK1p1Xm90eG1galdDPiQu'@;
put 'KkR7TGNkbkIiJjF+SUo6XT9JTkBaQi8waGE0S2xdO2s8NjksIWpRY2s+Lj8iXUBUU0ByP1FqJCtuZ354ZnVQP3dhRF1sNUcpfkUhYm5rRjNeJnkmYHxKT3g+VmcrSE9RTGEmKHQjUksqfX1CSFlvQ2chTF5HRyJWTmdAOXlaWHpPWlpCcmlyUDBtdis2Jkd8MmRfWz8qZClxMktQcUBacUdMXWl6'@;
put 'YCx3L2ZzSl0mR15jKythR04/PjtZZVg5YUZpUWo/VFQjI2FaNWdoVEAxTGRdcmhtLmBaYzcqIShKU09tbTRSIzhpej9aYiF9Pm1jaUpHfUYrZ1g8JUR8ZmpsUndFMGk/REp3YU05STBVP0kwVmBCPVgwMWE0MEp6XmR4N2EyO2Q5WkhGa05IN2JDbCZbJUFPZnpmfDQxXihoUFV6OUVxWiQhNCNp'@;
put 'LzEyXmksRT9QZTJ1JFYle3QmSSliKzx7fko+c29MJE44I19pSXMzYlReTmArZUBxJF47SVF8JH5qT14hMGAqNWU4NyJ7ZEIwJCg7VXNZa1csZE1GdmksOkg4bFIlUTpUQypAWjxWaSs7Z3AsMmZYIm5SZSFIITB4KUxQVnlnOyFAS0ApTExqI3xgcEElM3BxcFY6dmZpdj47M2U0XjclU3BJaEdu'@;
put 'Typ8bjZte3k8PXMkdW0mNCFFdiR1b0ZAKT0palFSSCg+SDopMkQ9b3Y2LD0uKzxvJnpgZ0Y4KDsudXI5bzl3JmtpWGcmcH0jcTlrTjk2ZmxvOWRoblF7UFV9Mm5xN2JlQF9uOT9kd3A/QEY5ZSh3aDpweyw4clpfVysqSkM4UnxLayFAe214Z1h5QkteViEwRl9eZT9JK11uKlYjdk5QXWR6Izhn'@;
put 'LEVTInh4KThVLHtCMy8lTkRKPlQ9MlZzfHc0dChwPzAyeGIyTklqbC5nS15OKyUwRGt4YGc/Z0cxVSgpJSkmfD1YcFRJb0MieiVqPmQ0cHJ7VFo7cG1sJjIxJCllKTs3UUlOV2g5RGRoMypyUCJZfWphYyhOamp4dnx8bmlXTTNocyl0KkJaQkh8MEcoYzZiIUUlbXt4OHNtZEVMZ0U1bFEuXzdG'@;
put 'cmdBdFchd1lHYXVvWzFraHFESFQ+MUQqWCg/USI8fVRfaUFDcyYuMF9hWikpSyNSKVhXfFNbZz1qanB2W0ZDVH5CX0ZedmBYWi8mSzgpejEyUjkqN1NbTCRuQmxIQkswTkUyPzs+ZXhpY11QZHhQPER+RlFOLmp9ektBOVUvd1lxTjVXWFJwWCw4MUJ1JF5lPjElTFljUjFJUnoofn4/fWcxal8/'@;
put 'fmxgZmcoaG9+cSw/UT1+QD5DSF9zI3xxUDV5ZH5lLGBlXUY+MSFMUWFOQl5XbnMmfHprTGMmfjt9ZkA9Mn5zMn55fG9gZCs0RkIiPH0zfURfIyRpbn1zT1k+MU9pRVlBNF0zQ0chNklZY19PNSZHN3IyPjRCIU0vMUgqaTk+OypYTyYzPWRoLnhIej9+Ln4wWn5+IX48flB9eil6bDJ0d3p5Rkxb'@;
put 'UDQ9L1RPQ3VfYVF0ZHNiRW1MVygqe2F8KzdhMDVwRFhlI0Y2YCw+Lz9XOUhJNHw7OEUmSUEkPWtDTl90bylZMT08VzBVby5ZLlZmbEU1KHpNVjI+RkFJYT4xZSJVKDQqYTUsYT4xYyNYKEhBMzhBQXlaQ043emY9SyR2eixXVj8+Ozl4TmMoQTlYeTpxIl5GNlNqO01FWUw5U3BYSkFLJFMiSURG'@;
put 'Qi5ZZUAoWHF2RzwyVz0kM0RYdDxmb082PXxMUHxCfk0pZmJ+QGU0UCgqe1d8NnwxIVJxP35XYEdiInNtfi8rRk9gczJxMX45K1dMeyEmYDNFck16P31zK0pqdyNSMnRafD1AZWZwc11XVmleQFFgKG42Mmx9YVBodHsmKnxfQHVPQi5RdzJ9Zlg7ME02VFh+dUdhVG00NEphVG00NH18W2l2IUE4'@;
put 'IkNAdlpTUHt3TEl6SEcjNDd9fExnWTUvfmkxTE4lXyRrYz4kMW8jW3VQXnQyWF9gMmJ7Ul05NmcsSFlUd2xSM3k8L3xjUn4mfDtwYDlOVVcyPGJma3YrTkRaTlVHMFJoO1Bic2pHUHEiKHZ6fUQ3Wzk+RjU4MSgpVFo1eXBVamoiQSN8RE9iZHRmcElQcT89MEVzUm5ZOiRPSmIjcWA+cVIzQyMl'@;
put 'ODdqLHEwbW8meGpUT3pCcngkUU03MkQlQiNFJVJedj93S1smYEhmcU4uSTM+NzI/LnBTJFpxTlF3Mj4mWEBCX1ZJKnQlLnxhcGAkKXFuVjwvU08hQl5URj5EL3NpWjJMLmxLa3ZpR25Ye18vN1FPdX5BVUZVcXVMLiUyOUJdYHR8eEA5bXFValZlRDtaVj1PZ3x9O0UoVGpWZURgWlt+ZS5YNHNg'@;
put 'fn5abyxnNWcrTl5bcmJWKj5xdF5UMEV9bEUvJiQwJmBaWnhmO3UmYEpKImksRX1gITE2WiZlUTY8LGRpOnlqMEV9XTFDbnhHdG1uVikvO3FuVjAvPSxsSzovWUgpfCJAblcocTZNfDFWVyp8e1o+MVciVFdqM1QmSFZEd3Q4K2ZhI2hwRWdRb2IjZUBMOkNJKyhgI040MHNpYGAjZUBRaDYhPmxf'@;
put 'RC8kJEBHOT4sK2ZQOkwxbVFNIUBuO2FiKGFmKz85SFR0Q2g0R3pJNXV9ZjppWFJJcyNdM0lmKHs1JTZ2cyVXPDJSfWRRenlTUTc1KkJEMDNbdEdpfHRNMEZefE9xcElwaWR0VVJ3ezFDPTl0aUF0fn5ocUcvcT4kTnR8PGRkfihaMj4mRnFXVClVaC59eyJ6eVl8Pjt9fVh9RiFsX3Y4aXNCOVQp'@;
put 'Mnt1UHBzQjl5RjFEa3VLL0VSMV9YRTl9UmRQV1RmeEZ+SFZMTn5ndG9faCJYfCEoWHwhKH19Mig3fTxodX5ZUldMPTBjWitAZXolfEkqcH5xNzhzZ29eKSR9X2o7UXMhL2lyYD4sN31rYTtRPUw2TVd4OFpfKTtNeT9tei5fWHd4czNxZygpZix2fFJWZUx+KHozaCV8Xnc+fWZNbChXeF87az1l'@;
put 'RGFAOEJZfXRrUDQidnhbSUIsYCQ7fVZYfSpDa35gTGlfRFEzfTMsTldvYERjaSZ+SFRgTGMwfjRXUlcjRmdXbV1sIW5JJnovaW9gPWFzc3tCMmhkRWduRUtqQmx7OTI3PHd8Q1slfmxuUShsY0hMeVUvOVZXMUZ0InBpLHNhImxJSDAvaXRgWitmfHcoWHxUWTp2JVRXOzV8VXY8US5+clgpfiwo'@;
put 'PEprMFdySXtiRVVMRUdUeDoqbCE4c24hL1F2RnBQLl49R0d+alhXKFFPQywlKF9SW3xZdHZzI2N6RmhTfV1OXzNJeX5qMzFoRX0jSWcobEouUVVHcFBUeW1iZXt5RHt9QHVDLCtAcjx8fWo0OT5IZix2QX5seXh+Tn4vdnx1L2lKYGd4PVFLVTQqaylRTkR9fTVrc0h6UCgqPylSKHxXdmV+Y0w3'@;
put 'PltoLHYpPTRWS2BGbWx+LEw6UTlMNCoyQFQ8YH18UjVoeC5tYm97end8fSN4QywiQHFmfX1pTGtzQUpPV3Z8LzlDZl4pY0A0MSJ9VTo6UTwhL2koYDJQIX1UYGooRHksdkdFcTg8czU3IWhmRj5RczhUa34/X0pFfnJkJHMsKC92fXYvaTw+VDwxc2Z7L1FqSnBQN3ltYmtAS0hSflMuQzBsLmAh'@;
put 'YHwqVy99WGRjc1NdXztrOXBpUmBiRSV9YX06UXhQNCp+KGtSJF9idzB+RnpKTHtjLzklLClSdF9+YSF9NihsczB0ekYiWH1dTjBwaVdgejglfSRHO1FbUDQqSSlrUiZfLlpwKDE4LHY/SnE4Xz5qPH19KEcjfjJrPTJ6IiZucUA6M19zRlI+fmNSS3Z+KmlIXj5SIjN8JjViKEE4PDIwP2pfbVdr'@;
put 'c19zNkIoaFYuMkxAPlt5L18hVGNzeEdaWmQ4bE8wezFDWHx2V3ZzZXZwUEl8M3dhVzdQPXMkRl5la0hpX1kpZmcrfSohND4rIj9RdyloOnBzcF5fc2F6PVd5KWlIQT9DSFh8XjB7fn1lW3E7dntyOShMOEZ+TnpkfnM5fXNRZkN6al9HNmY0VzpZQ1BxZllMYTw2XiRgI2RGYzFyeCFhPGdWcnoj'@;
put 'a3spRW87Z2osXWA8UzQ6YkNvflRUWklmZ3Z1bGsydl1qXng1bHFCYmQxYHBtQ25iQHZNRVJoQjNNZXNRPj01eDBOcSRCNXlVeDRkemg4I01ReVhKSzN2Xjg2WWdjekwhcjJCK0FMZWIrXV49b2JubTQlKnpgbT0hKz8wLERgT0YiVVReaVlnS0Y7Wz0raWV0OWp3KmJVVkQ1V0FLTmVYJk1bQW98'@;
put 'K0ZlOjkwaShpY0s3RW9VNCNNKzNDUF42eU53Vz1MaTNNI3xte2F5NjtzVlhgUF5CO0VWYmhAT04+aUdreDFNLlRfTH5BTnlfXilMe1UvZjRLRzhrIWJKQG9YWjRVWktyXUp4ND5EZUpddU80Izp7UUlDcnpWNF0wTWpoMjlgNHw9amRyL217WkZgNHolQnJhS0tyV2FqMltiXT1PPXNZYnkiNzZ6'@;
put 'QT4zVjhdO1hST0VvKURzYVcvbUZEZUpLYWVNbjk3X1VHb3lSZXlKcU4+LGVnfGE2ZyFFNCFDPlRvO109T3dGQFRLVElVMUIrLixaOHFIUj4ySy9LWnBfNGdqTWpaS3tVMEwyaVRgSkUvbT9Ta2cjR2ZjND0zPWE8Ujs4dmk6NyM1NX01JW5haC5ta3BRWyFHfFV3YXwrVF01QCgldTN1M1lgXnBG'@;
put 'MVFnVixWYklubGZZW3VnTSt2Q0ZlLCljO1FucypRUTZacFVZIzY7K0socVk4VC5FX1glJkdXSXx1Ono0bVAxIWwvLzdIOzpANFZibWxsUDBwNV0jNypyImVsbFVyLEdzOVk5UWI+dHU5XmNpOTthdyFLZC9YNjV7OEojajYsZTYlaj4yUkgrQnFaNXJUfWdRPDpsMVBPUFtoRk1+a04hdXljZFl+'@;
put 'YD9fVWciPXpoUHIkKjtWWmlKNTZnPFZaaVB1SzxOakM8KnIkP21GcF90W1ZGdnM5dCViXT0kakdBJjd8QG9UJEpwOX1Gdk8oank6el4lcjIkU0MrN09QZDJpUmU2allUIng7bzgoVjBqcXEyKE5bd29UKnNDJWYqLzx1bGBwOiQkUygraSRrOUBtdF0iJS5JLztyN0FgUz1rRFB5MjlIPWx3cDZR'@;
put 'RHMxRXtgVXdkd3AhJUs6VnsjP29bVmJ1MzZeenBXeSQlYmJDPEQyZyYvOnNWRUB2cXhgNjY0WGUxIyVyJDRtSFA2N2JHWGRyJEksRUBQVF42WWohWENAQmBbbCVidE8peH5tNF53U3deczZmIVlpSzkmTGZkNXYoZXU9T3k8ZE0rZVpqRXtsQG04WCQ3WjVGcnF8NiIoN1QmQVU4V1FZeWpBV19s'@;
put 'JWJbQ1pWQm98TFV9dnArOUBNQiEwVn4lKDZeKmE1L3BRLGk8PXY6XUk1NyVIbSYqNzFZRUB4NEJhIUJYS1lWN2w6ZVswZEVlZHA1XiMsSklKJUNVQlhqZFI4eFV0Rz5IJU8xaWhvMjxtOkJZPk16Ynx1KlNTVUlsfCtkazZiSk1uR1ozYiFRVW9EVVYubkBHYm9WZis/OUhUdCxHPkgpbFd4Qypl'@;
put 'eyRQMDRDb1YpNXhseUxJK2F+L1hRezJYQmU4UD1JOGU4Lm01NlklVj97KVAldSEzYlksQyUobl86LEZWMz51KnlOKnIqZ2RXM1ZwemNKSXJiNFVCWGd1aSNBPk1GTj9NIzMlX145Z0Z3Mk9aS21ieHVMKSYyWk5GU114XkYuTFg+W3oyUkE7TW5DJVYhYTZPKC8rOF0sKzxuIkEvR2Bidj1mak9a'@;
put 'd1IjcTVOdylSKE1gQk0iPE88LnIzXURzRjFxQythQzJEYiRtW29BaCQ4anVyOT1VXk9xL29MVTlZOXNuVSlTMmsjaDsrRngxIWVEUzRiVDldYFssLl0oK11wUDM/YjJwZ3A/M31ZInteR3pjbjoyaUNvKiFWXTs3eVVEV2BiVVk6dnBmUkwvakUkMzJXWTkuQXIxcD9LYnlLR0tGIn07NzFicnJi'@;
put 'OzdDcmZROnNsfiJvPFt7VmQrXm4rODZ8YmZ0XWc4YiRjZktHQEE2eGJBS0xabGZmeDM4IjdCV30mZVkpOzlgJXBJbi85cHYmREcofHxOVHQkKzh8VEI4OV1Eak5AJjZgQEIzeVVPZEdlQyVpOEhlcTZJUD44PDZdNSxtaWI3REg5Nz5QTm8vJFBJODcxQ1U6UnwlQjhqUW12NV0lZ1lmMlRqMkU+'@;
put 'QmpvOTtmRFVDUElwQjhxOzVeNHtCMS4zXUk5SiNGOzpfODw2dT1TdVo/bDJMdE9nZyQjSHhmSncsOG1mL21XLCZAXncyT0JuKDZKOlkrIlsjN1VdbEoiZFo2OFVEZWI4dWI5LkA3L2ZtOXYlS2lbRD5IQ1U2JWBQVTd1SCU4Uz0qNkRAMm1tOW9ZU2RXPV1TUVBJRTJnREwiLyw2V0h8PUw9UHFD'@;
put 'O28lZVVGbiRAWFtBK1MxNSw3MV4lPnc9YSxIfUsiLy96XnVuYXRhQFNKaDYhVzkhems4b1pte3g4Mk9AOy5yQlVzckQ4a29Rb2MkVSRfdXdSOWlMaytVb102OHVIQGEsZkVLNUNMZSY4YkpifCQ0Qzh9SkRzfDZCMzRtLjxBcWhaYXVGeHZVL2ZlJjldUEQifXkyaDt1bVRkVVVhZHxPR28+PUU7'@;
put 'XSVrLF02JXZfPzZwe0ZOcFtndmxCPlBOYytJI2o2KDsoaks9Tz9mcXBtM0dzOSpVR1lAU0lVc106cDolJCU9bkw9TkBeKlg6X3RJKl8/Uj1UPSNxR1RreEE7OXc/MFttQCoqbTtnOV1AXX1DVz1fSER5M19WcGE7Omo3QDNhYkchdlR5Z3hTcCxhYT5gInFWN11uKiN4Km1iM0Y7IzI1Yj80L2Y2'@;
put 'Y0VeZnAhbDVVRTkoZXZqIzdIIXFjXjhqRm46Y11PcE5YYDR5VUZvZF0/I0dvTXJ4R3c9MSVeMSNPb3Z0XTVFdjZ4UzdiWmEuPWV7OGlqJFNlOFo1KVlLaT9maihtY3lGamtpIi9SPXljbUomUFdWVkY+TFQ6Uj1mKjA+aVRtPUZzW2JCVTUjaFBNbFhXdnAlc05oMm5BRitmNSs+eXtmQ0xwcSZQ'@;
put 'Umt6OlkrSjxzOXRVKTd9ciIvMHZ0OHtwe0VwQFZiO25wTkxZaER7JTdHUWlSam0pXVJvazRtT1V8XUU+bWFgbypufT0mbH44aXBTO29QYDpaOk9DNVVzdih6U3sra344KjpFTXpnKTZheUd4fkxbU11Ue1tZcU13fVNYVzE4XXpHdUJ5YzBwYytqWT5LPTg3IUo5YmZpOyk8a2pjSjxEV0hxMSVk'@;
put 'PHd8NVUoejVnOF91XmlkKFYwTERgQzgrJVJNSVIjYSthYikhXzclME8ycFZtfSwvdiZUZj9eVEwpNVM4MV9nRjg4OTY7VmJkYk9IUGgzR196Ui5XZypXQ1YjJVl7JmQ7NSg9JndrOm1qJV4udTVeITBoY0UlKjZmcDJ0PjZZcH08aUpWXjI5UzNzTUAlMGFMSXhSemI7ZE19e1p7P1dZa1t8fHhi'@;
put 'IVUsZk5gczFCe11UL1kpJl9dNypbemB6KU4mTW9vU1EvdHlDKHlTXVYkekJ8Mjc3SzZedVIxXk9nKkkyYHpCK1tQPzwsPU1mcEssPE1mcEtSITl6MGlJOEU7VXpAb1JlQE5BalA4ciVie3E8UyR2Xk1HIzZIOVZpU2VQeXdsYDRNKyRqQ3ZZKyFWJGVWa3hSdDtSSjxENGo8N15NVX03MVE4MDkv'@;
put 'NGc4cjlUOTojdUs3USk7UnBEMitpa0k7OkRQTkA0byNdW3shMGBLak1yVFB5dF10QyQ5bylWYlt3QlVCVmJKRW94VTw2XSN4OE5+Pm8rJXRpOk5VKD03dCQhcT1dTSk6alZpNVVVb1VJd1V+ZiQ4bkVPXy8xIyV1dEw9RD5GckRzeUVCRFI+ZXBpMiJVR314KlRsITZzXUt1KFZEbnlAKkp6JSQl'@;
put 'KXEyMi5qZHV3IUZTRCY2cSIsQ1IxSW0yIyV6bDFTM3tJUDhWaDd5IzRqTV5oO1VsKE9nJGcwMTV2I191IVU0ZDQjdUthKFVdTFUmdzFiTDt0cmFkVD0zaTxkYmhqRnIveXorJTojO1RIS2EobHI3djlIOl94Kjs9YVVtOjs2ZHldW2pLbnl6Si5tcil5LHRCPzEjVjFqTzt0bVRkS11tOiNlOTdz'@;
put 'N1ZpWCs1UVhhIURKUU4+P2lHMWBnT1ZqUmA3L2ZtOWl9fmM6YyFES0VKPjhhMmh7Xkd4X3ouJWd7RXcoZT0jVGkwXlRSU0VTO0Vxc2dgU292OyFzJTgqdiReJXQsLi9wSE9fSWZqL0I4ISQ9MGg3cjAhXUFtIVAlYzhiWldIVyswTjQiS2VMfE9AJDklXztiPig7Sy5EajVzWFFfbTgqfWViSkor'@;
put 'aXAoMl1hb3BkdHA/PFZzQGskRm9SIXw4Xm12bDIjQUk3On4lSjkoeHM5KDtjb0ZSVjg4YUVxPWR5JXwhV3A+OndVVXJUN1FmKURZM31dImdhSHYkWXBvcF84NkVLPEVAOF18Xl9aWCtjO21sI1koPVJwVyxEMSFlPEVSYW5sRF5zK0d4cUgydkMrYztjO2M7cCRseVZ5Kkk+ODIjWiFdVWtnayxe'@;
put 'WVQhKjY8NmlqJCVYcHBqZWRQciNbRUdkVFUra3FhTy8vZVZnOEduKj15QFN3cjlUYlslJWpNRkQyRUBqZS9kQUtnOF9Edz07N3UpPlYlREJwKFY7NSozWFZ1Z0JoSyEwO0d4PWVSbGFRU2ZJTTxTK2ZebUN5MzheS1dGYUhUSVNuPiFeJTw2NCFyZGpvWXs6L112am9we3FLaFkuPVdJdjZKJCVq'@;
put 'NGVRKkNZRV56MU9zaGl1TmZLfT1rNlA1fTpBfEUydUt9MC8hMUtTZnksRWU6cERlJXhLXi5teF1nb2Yzci9yZTMkZDNRODZFRVM6TjI5bEdoQz9hTFNIRUNMNGo9bmJgM3B3bnF4cz0/eHIpVDhGeGhha3ZIcW9ZNDtLLjp1TGhGX3h0TW4pPWhgTFFKUmI+aU5nSipAc1k5VXY9VmI5XTAkS2wk'@;
put 'eDM4cjJPaDI4ZUhdX2BVRVNKSWk7K14yeWZWQ2h4I15QTVo9S2VwN3dGQE48UkU1bX1uQW8zYWtZdzxIaWI5dXZDKyNdeyt0JHo7aGN3cFdqQ3YqbUA0R2Y5YmJ9LHprIW95OW8jcHZddDdmOkJgYThKX1dtS10vVHsxPzEvbFpvY0tfJXJ0Rz5oOlB9c3cqOTFjamBdNEtkRThtZjskVjt6P0JN'@;
put 'P3V2UjBucF59K3dVW2giL2VwQnk7dG1mKTtxXnNxUVBfWyldb15JZlNjajJDVVlmLj1GO1NdOFUoT0RPaF1VWXV2LGNeOHZ5RG99Z0FweVVyWnFxbUt0eWJuTnlhelI4ZyxEYExRZTtxNmddOFVKOERsU108PDU4Xm11bDl8cUtoWUI4QjIqU2lSVC83MjM4L204WD5SUm4iZ0MrPUlhPk9scEso'@;
put 'KWdYdjBGPUE+cnlgZnlZRCZLcmpdRl5NK2hdOTc7Zm17eGNlREUoeHpHXT9sNG0lcF8qfStPZyk3OU9gJWQ5IUpHb3U8VCtPe1M9amRVXmk5QCRpODY4cDpIOmJkMVpMKU0xN2JGYVphQHBOYikkTWw1VWh0Q3E1NU55MzxHckg8PHVdXmFuezg5PnQqaUtTI0hsUV1jcXliRyo9VU9CUnNrTUAj'@;
put 'Zkg5Um5RMSZkOl1VLjFkMTRASjtaOlU/fGlWP00jc2lyJEx8dDk+JS85UCtPe0dwUF5AXT82XzVYTilDMzZgNn4sLD1ibSViZ1p9VTFkJHBJVz5TMCYkTktCW281Olo6cCV1PyZ1MkhDdXMkfm04eCguNE5APD9vUF5YI28+fSZCV0NXYmJWXWteP2xVXUgwe2JSanNoJHA4YV40Lzw1UTUkZDoj'@;
put 'ZE5YTWlEPlZiZlUsMkpEcjtJVyhTTCsrSTdyJDhPZCFKPSpCLm8sS1FDNDhhMyFZaCU3eSNfZDR7VlEjISNieVVrZXMpaF1qdztHZ0pDdkYxTSNhNDRteFJCM0M0SCtyP2tZbCtdVXJjW1B0JFZ5WjY6cHgzRzpaOnI/a1lENDY5cHkySFlQTGQvPE5fVytzdkJlWSM9VVMlaWhkU306WjpxLEJA'@;
put 'a1lJbGIzKnp2c2hGflVoMj8lPFN3XntNI3x6ZjE4fS93cyE9anhqXlgkS11RUkJWelJEOGhgQ0lbb2A3OFc9OyJnandCfUJiZyksT1Q6aCRLbDg9fDYxLDVRXk9SaWNxNT1xOXIwb3hGMX0laTByJU55aWxeVURPOiF+LGE5PEJZMWlwUCZ5cyU6KyU/ZD09fDZ7Nns2bHheKyolKnpZPSVlcCR2'@;
put 'PllmIzhFcjc7VilBczU4aXJ9RHhoUUZ7IyxrdCk1TUE6V28wTGRkcTkwczMsQn5ZciIvaUZPVFVyTmhBcC9LJkA/NjBOemhKK0coRigwMn4sKXo2MDklb1J1aFh9IV9nYS9VUS5Bc1lmaWZfOEV2fCNzezFVJHxYWjMvfUQiJWtHKWJvTjVNOls4XWgzWWNNTjN4ZF1wLHBIWmJUMHk5WDojX3to'@;
put 'QUZvUUhmQ3IySFd3cVtlOGAsfTpnOV12VGxQcGVVRD5WYlhwUGVYV0Q4eCs5ZVBTKk18NVJiOjIzWjFkQ0NTVnllWHtJOHwlfTpmOEFlfXBEZXhbTE53c0VlYyljXT8zQmV+NzxtM2c/eTtkZ3pbbXQ+bkBoaF4zQmVJIT1ePnhpJWJmS1gwXlNrQjgkeFBlOXdUR2MzbmMzZ2d2MjIzLHVsVyxW'@;
put 'Zn48bU4vemVVUHBQZW83XXozJDIlfjxtTik7KkxmOHwleGJmQDMkYjNNYHhjM2dkbzMuYGN4emVVSEskamszWD00dnF3RTw7R0RrJlJCMk0zMlM7ZTJnZDk9bmk7KjUrb0R8S2o4Z2xANDs9P0JVWmM9MmoyKyQ2Tk9IUT4kQGQlR1dtOmA0cFRQaU9mQ3o4YWhdTE45Yk4+W3phbFVeQXBUKXt8'@;
put 'fCskbWNVOG5PVWY5XS43ZXFbaGpNKFBlOzYhbls3RVpFZSVteCpJemBnVk04N1FLUSk7VklDJSVKK0hAMnB3dy5bRmp4aTpwOCl7cEhzci9nRk5zXl1ienYwSCFtPzI1NGR2cXYsNGpOIW95UVp6Xy8xMzcpSWJ8fSRqPms6SWY2S0QsLF4qKFJwUmU7JCgxZGJwXihLL3l5MWsrWmI/b3JGPk5e'@;
put 'a2JkOnJgWl0lXm19XmlkN2p2aXw4NkVLZ0taUF54bGRGYnAxOHcuLFZ1XW11MnQqVm49XVo1S1IpN1YrQEV8WkYxfV9zWF59LypHMm5xXVpKOVBLXSQ2V24zJSg2Q29TVXQkfjBqRUkrRSQvKythfSp+d3chR1kkNklrXWc3Xz1LZz86cHdaWyVQaHYySSMydnxaIU8ie31uaTtBfF1MPno3LjFh'@;
put 'QDZOczROLDFjdUY7LjFNQ15KV3N9PV4lNT4icE1dSSRHe0whUDZfcEAuOnA2Xlg9P3VBVlk9dCR+bX09XiVvW0A2Zy8qLiouKi52fD9OQmpEX3N3SmJTX1o9YTFwTz0rNCNuQG9dVG9Ec1NvL08oJjk6NmNDYGE1bEhsQE9veT5MYT8lfnlifSllQ3lHVihMMXteIUNLTnF0WE5eP0VKb3k+SV5A'@;
put 'eEgmRD5CbkYrKUp0VCJtS0tDbm5ALmEoejtyJXdtX1ZpVH1yNm9WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9b'@;
put 'JmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WJjM/Lm9bJmA+cW5WelVqXT5xblYmMz8ub1smYD5xblYmMz8ub1smYD5xblYmMz8ub1smYD5xblYmMz8ub1sm'@;
put 'YD5xblYmMz8ub1smYD5xblYmMz8ub1smYD5xblYmM1txblYmM0A9a1dbSyR+PnFuVkxNMXtvW01IZjoyNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3'@;
put 'YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU99R3R3YVlPNTBjYU9OSDF3YVlPNTBjYU9O'@;
put 'SDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNTBjYU9OSDF3YVlPNXRoMl5PNTBjYU9CajN3eUBQK2R5NUtZVndxRmBJQFArZHk1S1lWd3F2M3pjYm4xaXRLRmApREZxenIwUUZNWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArZHk1S1lWd3FGYElAUCtkeTVLWVZ3cUZg'@;
put 'SUBQK2R5NUtZVndxRmBJQFArZHk1S1lWd3FGYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArZHk1S1lWd3FGYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArZHk1S1lWd3FGYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArZHk1S1lWd3FGYElAUCtkeTVLWVZ3'@;
put 'cUZgSUBQK0hfTW9oW21WTzVGYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArZHk1S1lWd3FGYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArZHk1S1omVit0W1ArZHlYQCQuZHljaDcuPjs4OWNoNSZWcnJ7X108Ozg5Y2g1JlZycnslM1Q/SFF3XnlfPmVtPUVgeiFeTWxr'@;
put 'NSZWcnJ7X108Ozg5Y2g1JlZycntfXTw7ODljaDUmVnJ3M3J7X108Ozg5Y2g1JlZycntfXTw7N1FMSH1oJllbSW42QVJiZVZ6MjVTRlk4aU46MTwoPWw7LipkQ1ZKWDdxcDZbUVl0PFhkIWtOKyRHeFVQSmVrbTxFdjE5b1hFYykmQnc2dk5WT1s2UzJoPiE2bjZ9LEolNXdiS0lNIUo8eXMrI1Zb'@;
put 'Y0d3VzVXNVpjempHd0xRL3lVT1FhUGNuZiosbCx8aDdJXn1Na25UdzxhK2hCRz1Na3peOiw8aCQiVVB9S2VHWk9sKTRLSDVZd11AXlE/MDQoQ01gVkI9KTEhKHxIazlbVUJbQmxELGZjYyJVUHdaXnBfa3UxSD5sI1V6Yjo5MUtEcEAjSiY9ZUFsc1hQW0AkalMweiVycVdIOkR1eCMyImF6Ui50'@;
put 'I08+T3kyckxOWXRmIXFFYW8wSWQpRnt3STYjUC4haGw9JWhFcmE/SG59QmdRMFhpRyRTUm0jNHZXVmJIfVIueXMrOTFzOXVhXipDbTdvXndXZnlTaSRlM3NFLDZRWXlAWTBibyMwX1BlLjM3I21XaV4qNFB4JW9vQzxOdGw4RXExYDhxfEAqMXxvcXolV0B4KTVKUkYrQF9TTS90I0o8eSpCWUQl'@;
put 'QiUxaW9+ZUNWSl9gWyltXyh0bGRedEw4MlJnMT0pQHQxTWd4QFYwdml2eFNoYHdNWWNgOmFvUmRlQXVgSE4qITUqdXg2Nj1dKXBYNUU3fDJrI1h8ITFKRzw1dE1IPWIlWilQRn1DOk9tIiglUGNWb0BqNkFSWyk7YVp3KHoxR0tOX2FKaUJmIkFwZVZgQWciUWZ1VjxoQkg5IjEwQGcwOWRJeURT'@;
put 'Pi5gVj5HVDI8bzpMO1kiN0ZNMUJfQDRXN0Y4NG5EXTFsaSp2V1U8ImAqJW1WanR2c3xPSXdhIzJbbT9uKTZkUVMwaWlKYiVZLm5NWWdKSFI6KlkwZWNkWDlFbD1GQnA7UVlVPUw8blB3NVFFTyFYKEZ7dFBUOE5CQ1JFYTI2OlBvTFpQalFNOV0sem5YXzNOO18kbUM+Yys6VTtCXSombTFvNTJf'@;
put 'RjNeYmMpOCQ8WmM7emF3WD0kPV4qRXt8OXw8KThnJGIlOytKc29AJVA/MVJba1RldGhKdFUhNS5XITByQDhOPS9vWG5EYSVYQ3VzTDMkRyl5LkNmZS5dMkImKz0vNmIiInpTWlJDUUskV3tKUU8sR2lYRXRvZUcpPVkrJkdgYTE/Pi85KExdRVd5aXRgTm18T19IbSROITEuOVE2ezcqJDw0UE49'@;
put 'cWBGbThpVnpbWWFrPXhzYnV1WjdrI2tLTVl+aXwhVGEiaGpCLnhwfnM8cE46JEt0ZFVBSiF5Zi5vbz9tTz5WdnMxVm46aVZLejQhKyg1RmJjJV1CL3JjJG0kUCVSd2hUKUJUaTYyRT05PUZ0MW9DfUI9ZzAkIkpSbURCPVk8LjZPeTxkd3dwblRBOnV2bU5tK2NAdVZ0WChGe1NAaCVObU0pLjBE'@;
put 'QyVSOTVFYkEyKDxUdGtyI1gmenQxXig8SS9lJWRJTiYxMigyQVhLJnFfak48RCpYSF90NUprNi8xZSJCbUEpXkpCWzlKeSQrYjImWV5pTXEzMCNHcCRNVFJxWyRDWlAhTS5ob101M0h5eGJSazZtWlUoYW0lXnU3SzJpUzplTCl2P2FdT2Q+altUSmU6d21+IVksJk1oTWtWMFNrckArdWAxSm03'@;
put 'PzFtT0pIK3BwTk06Rn1qdllVV2RzTl55KGpKLGVDR1FqQ15ZdW9dLD1oSHh0RVUwNEBBLmosNDBRMjsoP2F3UjUpcEJjIVtkUUN6NCMzWV5pTi9UX0hQMT14ODcrLE5SOlsjVkR+RUltVEslUUQjOCVZYyF4Ym92QEVaZFthVyVYImJLcUdLUVhMKXZjRFheRT17YHdeZ0leJVRnR2suMXVkXTho'@;
put 'NWRQNDIiOUFEKEAqWWlDK2FlbSUhWSxqSmd5Z3k3eDlCcDdSLCIxP09wZUd3aDRFI2FHfjNoVmx2LCxMLi5pKytwTkZrJjFSenx0blcyXi48d15dYWglL2tWXlV7VEpfWlJkLGE7aCZELDZyNTRtXitZJUEjdzFdKE1JN0khK0phN1JgMDlkIWMlWVRHNF5bLH1oOFNgMGZkIWNfI2NjY192Jmoz'@;
put 'MTJSMnlEc0MvJmQxTiV1eGowcz9VVzpfbUNWZ0MzSHIxOnBzR1Moek9tdj82RWc6ZyRRJXlGK00sKyNtXmNZdUVLUlttVF1oMzwrKjFTPisjbUY/PUxpMFYpUFZxM1FnM1d6RkpSJTV3WmZvRWBaWGldITUybiNFc1VlWitvZlpiVGdaJDBKNSZHUmAjTVklWV5BU3s6aC5kTFhDNWJfJDlVIl98'@;
put 'P1JrMWpHIVZrWkchbi5BTV14SmE8XTZoeGxOaylrLit5ZSsxRiJeR0tlWi5vZ3h1c0R4JHoqR3VOX3k1KiQ8fVB2LHFgRm08PmVJJSYzNyVtQG5ETlkwV1VKNldhOj0qP2VJN2V9SSZtWmlncVBFY1Y2eXNUQ313XiltQlM6W1IjM19oJEhuSClSNWdoX1lqWltSfENwZ1tTZ0dFUlomRjhYZnVS'@;
put 'PTF6P0ByJEp1V2t5eTtRa2wkd2MhNj95SDdNNHVzRHhEOlJhMk9jN3NJa0FqJnNUWyV3eik1ZDMrMippUERPbUxqKTl0MTYoVyhGe1ROVSl7Zz1QOTZTSFokRk4vOj1sTmRuRWxBfCxrdjBATzBFOGphMlZyO1lYLm1Oa1UuTTYhOmt9a283QHhsdWFPYztaaVIwZyxSLnRdWn1II3xHNlkwQWo/'@;
put 'WlhHMT9DOks6Tk5iPHdXT1JBQypSRTx9MHFhITdBZmJBfm0oR05ZSE0sK0dhJk9DN2xGeGY7ZlZjNGU+YzFHLnw5ME4lIVNjY1IhaD9EWWhJcDVHdVBOS2cwSG9bMGEidz1mcmxDZDZEbyx9T049RGw5cWdDJCNuY1IhRHpLWWFRcXh3bWlsLmNSRy5Gb0ZpNVhKO2ZhLGRPKzVaSG9HbDw4U3Zj'@;
put 'UkdPMWVDIVNoN2VacTk4aVUoWF4sWkUsa2NeWnppekN5Lil6YVtXVTY2MEBSMEVkaGUuIzBhO3J3akhPKzVWRjFAJDhjYE9tdmRsQ0lGSUZ9X29jMjN5djBhemA3I0I7WXttY30iMW9hUU8lIyMkcVY3JThZSDNSKHRDZzZ1akQ7KCNRSENCW0t0OmkxcjVRLmN6MjIxbXp8LDY2ZTwzN3E2ZTx1'@;
put 'TyJSOTczaiwxWmpNPltHXU9iRjZIRDlJMHFkamxTLChPYzU+S2MxZnhkVjRIKnwvRHJlNFFSK0ttMUNVYUBHJXprJFpSUWRxJFZYIUpAaXFyTWFaMChkdzd6IWpDND1pQENtdHgrKlBpdU9HZGpGLy8jUTAqOyxhYjRPYVh6dUV5cGBCQDVOYE1vREElVndETm5HUD9VSGJgTWtOJmJWdHF5PFhi'@;
put 'S21xb3BHVSpNa0Y2U21lTWJPeTx1T3oyVE8+YywxXW8mTHElPkZiYHR4eGF3MmMwMjU0d11PcXciMTltWj13JEVuYTtzQWBjTCxFPVByWSQ5UzQhS1pbUk5tVUdsJiVJNGppMCxSQittd35JbCZDVjtufF9edTxNV2Q7eW8waFosUjkya0w0RGBjcEhHMWskbiVpLzkxX1puTiYxVmQ9YmlWVmQ1'@;
put 'RDdxNmlOLCZPZ2RMVGtjLkpGaVhiOm1Vai54KXE8TUdke2NJamRUM09SKzZtMTQjM0RkdWAvZFpSWmpAJigrXnUqKjZITDkzYmp2aFk2SGEuSixoJWkvXnUqKnBIemVvJEolKCtedT5BRVRtUipXdzdEZEg2XyYjM3hUWXRpMXFkPWJlZDxNJjUiK14xM0AlTWFjfXc8eUtrdHNyPG1Oe1NiPy47'@;
put 'THZLaGpJL19KKHgvan1BRyI8RntdbFI6MzlSRT59eS8/QFY4dWl3R3A7fnR8JWg2cTs5dDdzIXM3NmdOIzhpdUElIUoibnlUQiIwYSYsViFJRysmdXk+aktmUEdXTyFaU2grKyNzcktZYUZOOEw5RU5PRkAyN3UzfEI8USwpZnhbNSRNQ0o1Plg4WURpbCRAYl9GL2JJTigiYVBaS0E1UVVQZGxi'@;
put 'SENkIlJlIWJMMVVBIWk2UDxkWFkyKnx3WFc0IlhgUVZgNipPL1dSaDAydVd3MXJmdmIySGJ7X1ZhcX5GT3kub1s1JCZRWEQ0aj1bajhHUDZ1L1JjP2BXUTBGTm8wXkNFaGcqJE52fExlZm4seGVUdl9xUFpXaFtGYDAzS0A8eDd9Ii9JTFdqSi9tUmV6VyhrTCY+bUJmPXMpWzYpfGVKMTV1UCN8'@;
put 'Kilvc2svOzxiKzBISSY6OkJLV359NCVBbSsheiF9fEwvb2J2KFUqc0gqOW1XPzRGNHNRUmB+RzlrJTd+L3VibipDSG8uPnV5alUlfFFwd1BRP3NgKH5IKXBDcFs9bTV9diEwW3goV0x9X24kVFclOEovcXRraD1gSVo8fSw+Nn0qYyJ+ImBmLjd9djcjLC55RUAyY2Z+OlcvOXNZYXpTKGciKSUh'@;
put 'fHBrXjtDfnw2fV0pQGNoPn42MzgkYnUoVSM/SUZDfjZjLzY9fSljUldBcCIjKn1ISjBbYC9nTnp8QkBvc2svPn5HP1FGcX4kXz1zPkx6WzEoOlB2X3RDZXx4KU1hZn07RzlzS3JKL10qUktkPz1taHNPVTFoQX5gOjs3WmBrPFE9ZXx0U1IyZ3tESWZ+XThSNG0zalU8QGQ+JmhPX2c5PTk6ISMk'@;
put 'OX5uQC4xOHNNbS5DTFApXyhOMnwoRUEiLndSLFJLLH1DKSlzbmxqQiFXOW07YDZ2KH07eD1+Ynd9XXp8UntWcSVvNXZGUUB0ZG5qNEUlY3R8LCNnPn1uYDhzO1pbcS53UyRKL0RdPno6fXhZUUxHTnxscXxXKklVJkA+Xmh+IWoyPmgjRFVufDxsSUxnZz1+Qz9JZGUvXnVYfWhzcCJPR3BPKltB'@;
put 'MTJoeT8iUDZoTVJ+U1R8XVhhKDpNN1Rwe1BJUygzQlE0KCR2UXBbMmJyVzRIfV10fEt4MFt3dyVhY34pY1YoKH00LnF+W1s9cyhNZj1LKUA5Kl91dmR8Wk1hKGFKfn5UYEoiels3P2h5cF9GdXBQbSpQZ1p8NCohc2NXRjddImpVbV9RWnt9V0djc19rY3l0UCJGcSkmT2tzZktURTZ5KFVdc3VX'@;
put 'V1c7NWRfLCVEVXUpWElNZHo2ayVVTHcuZiRdfD9AVihsO1dMd2BSSzdUOTo4NThUUDA0RjY+M1BLOkIzUT8zLk5MZkl9XUB8SkVMTHg0X1A4JER1KWhhYFExS2NHRTltQT9aeSR8NCxqVTRAWCRLL2NQLG9VfkZ6bWkiaUYudSNRQHJzKkl5a01QOW0vYHFQWVcsQEFGLHx4KThoLn5sIWNzUlI2'@;
put 'PlAmO1g4fTx8UTQmXkJLQT9MRTVzJUcsb1N9I287OVgpI0F5KV9SOH05JVAoXnU5VGtiMjg9fkQ/UjpBMVlAZzlqc3l4XjtXfitmcElTfTJgQH5vWnxsbV9VMTFGeG5LaWhXVE0sbzEvOWosb3x+L0Esb0VgK0RTQH5GOW0iPmBlZXwqKV9+SmEoQl9yUzRYdlVUNj9kbnAyKWhXYGl2fn5wdWhI'@;
put 'OD4kQzlUK3RHNyF+InYyPjpVUnFnRStMNl1LVl4rUGdefVh9ZG5lM0Ula25NY2JuVzMpaFYjPFZmPVpbUnlrX212KHM4MXxsNnNBO2Y9WFtoOnt9fD0jPiFDT0BHIiEiTnk4JHAueEt9X0RJZX51Xj1+WD9MXy9oOS5qMEE2ZG5ZQkhvRUF4cGY9LyhCSyt9clI9fk5hOCRsLkA5IXwpSGY9Ultu'@;
put 'SXdfIkFmYCg3IT5nU3UoVls8aGJueDIpaCtzPTomPjtTay5zOFt8MD1lZjU+d1N1KFNAQCo+fj8mOCQmdG1iTyMxOWYkK3xKQ35+el8vQ2d8aVgkdF8ubHU8c0NQOW12YCVhcV8pKTJySEw+SH1zYXxAZE80cVhnKHN3Z05IWyZgdzAhKlhERWZYW1YreT86MzJzR0cpOUg1RzxueDtHS1VYQjRZ'@;
put 'fmxrOFlxTnRXLk9HZk9rS006c1BbRiZnKUQvZHpCKEhWaX1+S3RFMjJiOmJDLj5iK3xFM1A9NihJNXRtKCxuay5fVFIpL2BWK3wyNkUwODJBW15zJCxRaDNdSUd4SFF6WFJZWXVZfFhBWSFYMjAkUFdpZmFrczwhKXluN2xIXWEkNzthK2Z6RihfXktgNEg2PUtidWtobWZtZkVsai5sJmE9aDty'@;
put 'Slhoc2VtZnNlYi5IZE5hYlVeRi8me2MmImg7YntwK01wYntXe1Biclc6ZS4vcT5Me1IrazpBVmprPko+bmxhVWlSV150K0FXQ1RBUHZWTzVZYD52WEZtRUNEOkh5alswNTcsMWxbcVlZdXNMVSliV29xd3JRUjJ5OllBbF89UFFLOz4oUnxvcDZfW3lOKz1KRCR9emgpWzFiRX0oS2slNyguYHNH'@;
put 'YjovclpaPkVDKmZwKj1SaC4scVd5TWQkQT9sZXQlTEtzU3lpIzRMVnpXUCpdLypZN3F0P3k2dzdvQX5vYlFxMzZ6a29jLEVQRE0qY1t9OENYPzY5czRPdWU0YUNhL3Y3dE1HNXI1JT9iby5MRmh3WVkvaFYmMzwlfXcmYClJWkxLJkZ4IzEhOzBFRCIpSDxsLllVJmAvPnE4bVIzcmBTIV5TT3VZ'@;
put 'Ti5mZUpUemthZVEzR1lpQyJyLkBgSDdPSkcybVI0Ul50MHBGWlFPVCIjOjBFV3JiWEhxNGlqNm98UkE5QW1PJilgWTI4ZFg1SXdXT2h3WX4yKUUwKH4/cVI0REI/aktdNHQidlo7V29UN0xXKEVbUE0rfHxmJXlAcklAYXNAT3ZgJW84QStJK3wkVXZgLDJCSCt8UWsrfHhSOVskYG5xXn1ocyhK'@;
put 'WElEPCk/T3JxZ2o4JUZKIkBybFQiMWxlYm5ZMnRrfjNbe0tSQS9PNS5LQnBSRytgLGMwd1k5OWp7KlFnRih0WVsqQiI1dyZXSmZzVzdkbTpMYFFkRVldRGosa0I+L1tKV09MY0dOKDVEIX1zdSsoaXx+MGw/PitHPy9FXVNNeltHamQwe3EkMSVwWlIzeEojfnV7djZzajwuTCxJJCEsQVNjJjZY'@;
put 'UjMla1g6JkUufkFgMkZzWjF0RyxiIyldfUI8KkIzVkk1Nn0oLGozTEUlJHdGVGN7eDFYfio8WGMmVytMRHJuQkpsKnc1KEZEdkA+IloxSj9ncWJQRmJYfls5dHl3bDI9KEEvVzIvcT0kN114OCpVYko4VzlnImQzW1cifGQ0RjI8djQjYz1zV1IlfXZJVEslQ0x9T1d2RWw/az8vPigmI0RpMUx5'@;
put 'JHFgQ1o7MihJIXdrbGA1b00sL2JqQExGRWdBQHJpcyxCQzlGPHxdK2VxTSJ6SFtDPCh0fiphTS5LdjNXYFoudyIkc1oqfD8vRSRHSWZ0aHxhYzBRRUJBTVlucUZBVWwjVW94L1AoRVo/fXRbUERJVVVeYkNoSzouXmhNdFQ9cUNeW3xBcz9JTnF2U0RlL2k6I1RLbzVaZm1UQigoMn5ia0FAOmZq'@;
put 'YWFtUDt3diRnIUBjQGZ9Tm9TckMiIkZmSGxbMzltSD0+TnQleU5aMHZVcU17OE03RTdYKW9wTCtzeS56LilaJV9aWHB6anckfClDSV5MJlU3cC8wWHtockYzR3VnZGo9dGl2RWlQeE9hPFR3QmRFfkNbPj1KUGEmKS4oPzVSQ21SMTNNPk0zV3gqX14iZko8R0E2IXJlL0RWZy95fVhPMnhlQSko'@;
put 'I3IqQWYsPFswOGtPSzU1ZUpreVJCVjomQVNDe0BGTUMzU1F3dz1VQHl7Xm4wOXtEK3V5UmZ2alFQQ2t3NjtYRFlNYEZXVjpUUXtGZEd9c19QXVZpRDpOREg3KTNAUCh2SWx1bj14MVJKbjZZbnZkIkVLIU5vSUc+M3JpKzlDbyt5RTVoN0grQmMlXk1MOnNkQHtWYGBISEE9eUhobF9OLzRCNWlR'@;
put 'NFRYTjM8PCpfPCg4YEcqfUtKSk5CViV9SihGQ0glVHs2VVB4Lj5KKy8oWW9udUEvY3Q6fHZ6MzNSJSg4Qi9PPlFFWDc1LndncU8vSmBwKXlueEYuUV1TSERBPz1Mb3kudD55VVFsQVcpWkNsKztXfkdjV1R0VjFCNlE+TmNJLil0UntCb1UwZUlySX1LJE15d3ZrKl5jWGxAYU1EQj8keW4rS1Ex'@;
put 'L3lfZT1jTElkZis+Qjo5Vn5DWjpiWjlGOlROWjN8dStdeXNsWEpzUUpCVktLT1N9TSFeaiFMOTdMNEg/JkswZHBuQGM3QCZIKEtNR2MpOlQuW3k5JEJPTkgvTkJbXj15bFVuTDUuXkNrMkV0X1dGaGhaOShwKXp8TXxBY0wzPU5ocnw7Vn1Cd0BXQkNpUzwmI1NQLGQ6Uj8uR3dQPEJOcldCXTVx'@;
put 'c1lkaUlqUWAkZEhRRzkybnR+WXhHRHI6ciU5ZHkzSTxzTGE9cyV0RyltN3A9WzNLM0ZJRlp1fXNNOG52P2dnalJROVBldiY0JFYqPFR0JjgwJStIQHl0TGIuMXM0e0dLSzJfd3dxVjVDMHRoZ29uTFBlRC9MNH1zYU4vb3IpNm8vX30iPVN5T0AmdWkzY1hfQCZpN3dabVl5eXZrakFLY1hLJlJj'@;
put 'SEwmVVoiIXMuTy5OU1ciX1YvP1BJRilWNnQ9Z1RMe0M2c2hnaSJ5RDQoIjxbJHxHVURJKER7WSMzUFsyZyNzX3Y/QSsqNmdTJW9YcndbcHBMWltCKkk2dVh5ST4wblFkWHluNm4lWzkrJUdEcSt7VXA0YzF1Y1Q+M1p+M0pWSi9dWE5wZGc0KXYuWVJKYz5DK3JPSXJVbiNqYFNmU0BRSDd5TyRR'@;
put 'VVd5NXQ/fUZrWjFhel5oV2tFQ2Y/Oy8mQVNVVW9iQlpWL1UoVC9JekJwKkJGOmFGb1ZhQSl5TnFHZm5gKCpPXVtFSVdDeXxRSF4xTHc+T0BrfiEkPj92OW5jUj0zS0RiRGJ5X04wPzo0SSRRa1R0Vz5pPSwselNLTzJtMGcuYm5PVF5FaWhWSkNkPzZyZEVGQiR0KTwpWH57KyU8Rj1UUSY5Tkwz'@;
put 'PGpITWpzOHlYYEwhRTo/Nl85QUAyfilDNkt9cWorSD4ydigkVXM4MDozXUdMcDo0Q05pMys3NG12dm5VYW8zPzhjKixUd31JSFY1L1U9YVNGYFsoe3haQ2VYXlZEMllRKlprQDZeeHwqJF92TDxUezo0KzUuQH0uQ0hFbW17QkZSS0VTJS8wQjh3OmZjME53XTJaSUZlMjNha3BbI3cpVUNPdkRq'@;
put 'PXJaLDtGWW91PHNLU3k/aFhkUlJSbGRDT2RafHBsOih2O3lEVXxoWzV4IlRtMTI8SXpUK09EcmdWX18qND1pfktXUiReMltbKm5rMENoQjRFI1Q5V0F7Q1FPe0E6eFEmMysoOkpqVH14dlA1Rlp5aiQ9en45NkM7Rm9xcV9sWHBDOExuaSNiJFFuRTV8TzA3OmNqeUUpQnMpelIjdm98IUIoSFVK'@;
put 'RmxRKyowT35mNDs/cWlQY2xWQ3VxcWkmZz84V2VrR1l5MzQxNWNgVVhKZjM1OGRbajR8OWw4dlo5JFEpTys1T3E/Li8qfkFoanFOM3M8TVgrMXZJZTYhLE9wYjZydlglZGgvdHB5XkNGX2VwZTl1cFsqXnVNZ2t4Xyh2Q3dqcT96QUZ0RFIiYjRDNGkrXk52Xl9TWlcrT1hXMDBlLGZERSE/TUwv'@;
put 'QEJad0I0Zk9DUlc+T2E+QVpnQCY/JGZQPUNENnQ9Y0loaC9KeVZ4TXc6O358KyI2RCUiQjlzTXtSL2B9Wm9SZDJCdCwpXS9RcU5OVCZLJiFXPStUQH5hfEZpMTUvWGh6RDFxek8jP31uIl54ek0qflVgQHsvMWtSQ3kidzVMTVYoTFZaazJ2ZEIuMkdVam4uRUVPaHRAMSpbTiNUXT4ua0spKTZO'@;
put 'RXImJmlDK257eWdfMFc4TX5TUT9mbjZDOCZqTDNyQ3pkKih1ZF5KP3x2I259V3ZzXThLbjtQOkBZWE5hWDQhU1FYSTZNVjttd29xYy51aFhuP0p5NFg/dlB3KG4lUXhEU24/L1J0VkdhfHQpKVRucHVldmcsaEF2SHdyfCsqMCUvUG5MZn5xMWl1MHRga2coSkZ5VEtEQG4+WlIpfkEmX1E0fnZr'@;
put 'ZyxNIStJXmtVNSNiTDJRJnRGKlAmbDYkRnZuJE57Unt4KX1KXy83NWh5SzQubyp7aUZHZHVaQiNKYHElXyNeI0xaMD5EW1ZqRTxMPW1BWWBUcUVIekNEPVdjc0JzXihzakd5W2w3IXlLQnhwXyFnT110ejlSfUNwNWBKU3U9P18ob0dDQkdHfEpVRE0/fWY/SkBLQnZ2LkhVNl9kaTt2R1kyIXZ2'@;
put 'PHZ6KEJ1LjN+WjVpQ0hSWDxLK3Q6KWY2ZjRKQ2clU3Z+VyVOek5yW3QwZy47dVVFXXxdMmxDSlIqNmk9aXErJGZXQSpxQGV9YUk4R3Y1SlZsZj8oKVtIIn5aQFNkW1tRPT98LzRkUE5pWV1dVkVUX3xFRXNuMD9dRyk6bzpNbkJuPWNMejpqQ0NBVGV9QXR+eXE9MiMoby42T15gWCFDUUQwZyp+'@;
put 'XU06UikleT1wYFI5W00/O091IWxCKW1vNiouI2Y3X3dPPGNBS1dkbCRSUXU/bHRvZ0E3Jik6WHZHNWBUelN0ZmNDcGo3VG1zTUBlbCZmNEo/cFhLJn1WUz1ERStVPkQjUjA5I0chXWNkQHAzRlVDX3t7Qm9APDQoTSh1UlYmTnJGWz9HSFZqU0gjblUrU1N7RSRaYylMTXtbPXdIQENqKTBkT3Vp'@;
put 'Xz5FKjUkP2tMcTBFXyR7NVlvTHd3dzlUeD9AYjFrQU8qS358cVMyPE0qfD1gQFZjOld0biR+UWo0P25vWWtCSFVhX0tXa01yaiJKRkhvaFM1dCR0cCQhXzV9NXJyKzA1JE1KY2ZMbT0qSjRLYTI+e1lVR3QyO1JQTlRSRztXJVhTVl8wYXl7RGBoME93L1FRIkJ2cF0xTkUkRjV9X2VKIi9QezRM'@;
put 'JjJKIV01KHpNfUMjNVImTU9peWV6UCI+ZUcyc3F2c2AvQ0RKZ1ZlU2ZNRTxVYnV+YGlnLkZUdTwvNkZaZnVgUzs8RURXQ1NYfHcvI0VZRmdmc3YoS3tgYmhSfSxQe0JWTEokZkc+TXR0KEtCcCNFO2AqQ21aPFhkb09WR2kmdFd7V1lqY2U1O0Y1ZGRgNWU2b14qWGVITWohTmYuQV4oczhpdXVs'@;
put 'OktGbm9UPztPKGFQMTldPSFWXUB0WVMsTjhBdnZXM2UmZ3JbQkl5KXQyZXwpbHk5NTAwWH1sWD90bVAmajVFPGwwWmVvUi41dnZKazRjU29kaFN6W089OTt1KTRmKF9HZykiZmN8bk15OX1UQGlhdHozalNmflNZOWgoNGQvPCZRQyYkIWZ4MiNTMF8qe2V+SkRlQjArZHUiI198L0dqKCJFYDsz'@;
put 'WyhFL3M2Sj05UHU/WUhOVkxmTHkrWSlgaXwmenBleEF4eXQvVm1WVkNubnA6ODk6eF5sOWx5OVtncDdpajorbFtyIWxCNSUoNiEqJiJjemE5THV+U3dfKXBlfkssflFDNmdoZTJsPl1+JH02ViVeQ0lTOFJoX3VlVFE+aH5PIjByKyU/SlZ8R3spKVBGKmNeN0wqOF0rPC8sbmZBKSJmWXxRQmlX'@;
put 'OzdhR0Z7VzwuP0dHTiJiSCxgP1llflN9PXRLaUVXQVNBSnlFL3VzfntNOzMsdXx2cUlALiJmV1lbPWBqLGNBa0IjZU4rUGxbKEVqPWRNdiJ6M2ZSVTAqIzxVfWwuWGdsRTNsZjAudDJffXUqIWhbMiIjcl9NW2R+bko5aElCfWwiP2J4ajs4PD05Wi5BPV19ODchaFoyflMsfD9VaShBU31sNFgu'@;
put 'NiJpYDtfQCJQcH4vKD05JCx0Mj99aXAhaE0xIiM2LzVMdkJ5dHgjPyMqeUAlSCl0RE5iPn1GUWYoO0JgOyUoc0o+fWBnIWgqIn5TIXxYOE4jSS5Ba2lNSk5vKFdAdGF2KStyeDZfejN0NTdBLjR7KXBgbGdye3dETkFrQVMyd0xWP34qP35TX3NlZGA7N35hJX1seWhPSGhSPzlPfm5NJGhYMCIj'@;
put 'W3NtKn5TdHZ9bDw5MEQzTyZlaUU9RmZMX1UkYzc/ciF9WiUkdGdDWitCVVVpQ1JCLH4kdX1sZX5YNn1sYWBoQyVoSDBoQ2RWJjNPKkE9XVQhaDp6flM1fExnaChITlNgaXYxOUhPQiJYQ3pEQjJ1eHA0bXkxfnUpYDtlQHVeNH0ydD45fF1YLixzPWdDdUhSWyZqWExPUVg5RVYramNgVndMMnxG'@;
put 'UzhzTmd9bE9gP1kkcyRYYDtpe0ExeDhYd0B+ejxEd0IuQWtpWEdOMn0vR2goUzgiI3p8WDgjaGA6c0oufWNiPjlqXSJQV2NedzlzfmlgQUlPNHx9bHdKQ14mJE1hI04ya3khazsxfmoocz4iZjtzWCY/c10lflNhMypzdmFxP1V3S0ApeDBwPTlIKylsckY/PSJmVXx1LHk9c0pZJjNOIWAhVEpH'@;
put 'dClVK0AqRT1NVWUvO2E2NztQY0RdIyw2bmZxWFd7XWxWMXtTXkJ9ZTp6JnFNXjcxTV5yIWIjbXclWyIjdXxuTThzTVRgO2A/KXhqfmtDc0ViIVF5KX11KjloViJ+U3J8aXJnKE9JfWxMRzIhKjFfVD1hRmpnKDVIfWwrPldiaX5MZD05RF0oRV1mNzFwKmQrc1h6dyIjbXwhWCNoNl5YLiVoeV5B'@;
put 'OX04Z0NnUTYxW2guWWh0PmIsdTZ6c055ZTxEOCNrZ2YpISNBdFt+fGBfeHQoJX0qRzFpVmNGVj1JIiFzXl9ac1hVUlBiaWx9c0tOeTVoflh3Y1ojfkkqPEo+fnc/dndgfipfMHhzVzp+PFtLdiVGaWBSPms2e3xPNCUqfVNRPy47b1E2RkIiSWh5elc8fll2JX1iQH0iOHYxQV1eVG92WylTfD1+'@;
put 'bj9ScV9zfHlnfjQvem8vN3V2dSghfi5bOW1fc3x8c0pXNFEmLE5lPz5qYH57fCxJVkwhfVRFal85Zl9zYHFVYn5kX0MrPWBOcHMhN0ZoOjdGaHR5cjkrPEAwRjJhVUU6YG8iQFMjPX5XP1ZlYH40X2xPfn5jfD1HdCgheT1+Tz8/U0NGM1lgfmB8fUZ+Zn1oUUxIOVY9VipkX0lQeFQ8Z01kY2o/'@;
put 'NTtOMmwzV29UI081PlU7LGxCPHQ2YWZTQFFnS1JHe0c6QG5vKXtiVDtwRDx9eTF+W1FjQSIqRzQjRnBFJkBoKztQZ3IzZ2YuUWN5eTM6LzhNJHBrXmd1PlhkVDFBU2xTeTF3RUx5cEhmPEhCcFlCYGAvMiEpZFp+Zkp3LDtbYHxlLkduUno3UENWfEdERSFIdiJBb35dcSYsPyh2UVN0YVtfWHMp'@;
put 'RzZOS1hMNTdaNGtoMSIwIURdQVM2YH1+bEsie3x+TH4hOzxKYHNuX2ZnKWglflpAOnZyKE0hQSIsfjN9K0xsdX1zeX50XSR0bDF6Rl1+cF1yVzx+dX5dfEomUnF8fkR+Wjo/USJ+LH14eWpfPn5GYElWKGhrfn57SkN9cyt9Pl5Ib3IoQSJ1fD9BaW4kfns/WWxXUyhockJOeFJmPn4rPlZlfXNA'@;
put 'Pjc1YH5tfDtNRTFDOlNoZls+OzFIKX40SGg4ejc5fjJbRWhBO0VlRmguJSMjL2lbbCVpLjt8bDs7Mn05fjBbY358Iy8raFZdSHFgM2Y4fTxCKj40OWZhNEtCPFlIYWluYCh7O31XPC5uLDIwSkM9L0c3ViloO1E3OXtCdEZqRSgxbX05RCZGKXhCXyIjVzZAUGgkbCxjZD1Sem5YNWxbPmhpJmw9'@;
put 'Sl55MHhEIXlMVVJodV5BZXMyYGgsO29Re340KGxHXy5+XTgzNXl4OV5lPnk3JjlMT2B4cVZMTSZPNG5WPW0rcSM9Kn5rWyFefCNNcGB9YTNYNEB+WEIpfj4oSVY9fl4+TUpgfjp8dVQqPih+T1trRENGQiJeeWhUUE8obTc0bXFjWD1fWlQ0dyp1Pzk0NGZBJVsrRGB8X3Rzc0RHMHk3NEJhPWAu'@;
put 'Qn59YFdXV0JEcyhlLz56c3NLRD1RIVt1XnN+Yy88SjxgVXRffHxpdH4mSU00UUNVTEd1TC93NF9SN1treF98MCh9fWxSKn5mRWVfSXUhJHc0I0E3W3x3X3wlaXNzQFFYKGVFUzRJdXBQYS93PX19V0pMTFBDcldFWGV6N1s5bXNzWnVmPTdbJXFnPGkpbmZ2ayRZe0NvSWE/PVAoZC8ydnpbWTZg'@;
put 'LGMrKzpHZj9qOFFifWpUQWVfQTUkUDxnUHFsX04iZFp8fjgqVU9vajtWT3FOY3l6cU4hKTtzPn5LaH5bV0xeUWpqaXd0XyRoMjYoelcvZF8vQUJOMWFBd05XS0NhIldMOHMofTYvI1pCInVXRTBXQ1dTODFJKn1NOHw4NV5WeTN+SSZYNzMvJjpfX2ZkNSNEd3YkXzFdeGtKIXl3W0I9aFRXXlR0'@;
put 'W2hpV2t9IXEoZTtVaCM/QkleYXx9Kjd9LmNgNGRDSDx2MnJqdiYzeFFDLntPQz8vOl9yPUx4L0x2Xio4fX1MRC9TP3VEaHMlM0lSckRzYG5XQWlbfUlWaXt7M2NCWVJpTkRCaXNUUkIvP2JdcUJeKmAoc3p4VCg3YilvSy5vWyNfZlc1QGpNKUNqdXhWL3xAWFN3Ri9nOl9qPEd2U0xjWipCU0VI'@;
put 'RHZ7Sn5AU242ciRLPC9aI3U4Z18jR00yMT8jM1VOaX5CVV4zOHR1MUtuWndHYlVkQy9BIzNqelprei5WSXtrdnEra0V1L0MjaE45Qn4+XktEMDUoPy5bR3wmY1Bic0tdcCE/RFlSdTw/UUB2Vj5XUi90SGkxUWJzPl8iTmd3JmBiS1txSCxXKH03JS8oTDJyMit+SzVZb1siaDY+IVtCU2pLYkJs'@;
put 'cWFWKWhbdElGbEtJdz41RyskTih8KVlvW2tQTUBtYnlrb252Y3shYXxhQj9WTm09TiZ1KHwrTFRzZTQhYHtTcD9ZZFZ8KVlBSlNoOU1EMDRDbkdYI0hrflFAQnp8akBgMzZQOzAyWjJ9OXguKnRQfnRLaDs4S1prKyhYOj5xSGl8QCkmcVIzI3NfVHRbYmFZdyJOblt4Omp8WkpOQmw0IX5pMywk'@;
put 'fHJIRlVvYFJsWlJ8KnhEa2xOPi4zY1JXP2Ypb1NVSWBHSFc0aFkqYFtSL2hdRXlgdmtXOVVobzlbdXRbInRAcW4xLyYzXz1rLml5RXtxRi91QzY8KDNSdk9JOzkjWkBxZDQlOX1JbnNAST8vSFd+XXliYk1oLENIfl9EaUFlL2h8ajZ9WV19Lkt1N1JVOGh6LlZEKllkbUpLP2l6Vn5aR3hbSmk/'@;
put 'aiJzenF+Lm8iP3h4ST1GLkM5X0tMdmBnVWp+c0h+LktNaEcseDs6W0t2YERpRFJgUkN2KWgvPlsrQlgqQj8lI3MiNz4rc2hVOzJaUnwsekp5fkYqdDMoPVZFbEFSS0NsTU9XNVVza3kiTilxXUgpK0NYVXJzb2AodlV8Xjd2NGJTNkMuXzFDaHxaSk4qZ1VfSk4yOCl7RDdTQHVPMjp8MX1+Liol'@;
put 'KXEoQkN9LzpBNDQoPUh+dHtDT1dAPHN+blBua0l+PDwiLjZgQnQpWC4wTyh0fGNRYSJedlp4SjRuWlgjaXxpS20/OX54TXtWdXZ5fD9Kayl9fWZSKmB9c1UifVZ2VyMzMy45aEFQJD1dR3x9Sm9oVmBPaXNHSVhTPFQiWU13LD5SVzg4dFtUU0wuPm4lc1VBKW8wMSFqOjA4fF9kIjM/Lm9WaSw/'@;
put 'UUFzYUUldH5RREt7Xy9PQFZsZVh4MzlPMkxjZCFDR293W3YjSjZUPGtJYT5eQkZ3IUZ6MURXJVtmVEN6SyxOeG4kdzUobzN1P1NRPExtVWgjdHZPJSp3JnsmIiVfRG4+bihRMi8sTkZbPVMiInMvXUteLDBCN0JPISxIfi5fP2o9RHZnS2VXPmEkNGxSSn1VUWJ8Nms3JTFYcW9iRXZiZkg1VmMp'@;
put 'Qi96OjVrZW0xUk4yYUNDXXZbJTdecSEpMGhXO3B8YlR4aV9KWE8oc2d7dnQ6Rn0uPkRLSUJCVlJnKCksdFs8fEcwKmNESCY+N0lbfCojcl89Sl92W3Fna3hJNThjT3xFPSlrTU5oPEgqblpYdmIuZSRMKG42SikrOTxIaDBTSHkqVDg/cm58KXpTdjRmMjQ3ekF5Umxne3QqZ0QqKlBrS208T1Bd'@;
put 'YFBpfT9+VUZYMygyeSNfMDNPJUMiRUosYktDQlI0TW4qKSprQF5nV1JmUSk9SlNrQVN2KVlZWVVvRlRaWVUwSmlUYixmRkIkTHR6bEZ7VCReZ3BuRCM6dmJwP0wwUHM+dylzKWt0NnE4TGBNWElvQlo3VzR9XkRaI3RjclAoNX4sYWYhcmJ4TWJqRGxST2pTYCZqYUM6VzdbYCgwUlV9cVdvWzVn'@;
put 'SGAzQS5ybEwiV2o0WVI1aC4+aiVrRWV4UncwfGh5fXJXNF18aFdsenZGMG4qU0R5QVFXYUs3QExCL3lgL29KRiZSUyg3UFpqJF5AVGtGSGxabDY2V29YI01GJDNvWGQoczRfdGBkZTZZSlViSSF9QjVmaFIoYltoUmRxPz9oPlYjLF88KytqT3VrYHwwSzwpVVVyKENRRFglMk10Q2YjZ3Q/OmEh'@;
put 'W1BCNCo9KnhDbjZlSnoidXMjRnszTCtYRTlBY3wwQlAjOSpGeD9wcTpkUi8lbWFdVCNNQlo0cnU0IXlqeiEhI31MTX5raExCYjVXM3tBUXR6KFp3QyFyZ3lKJXxVSGloc1UzfEpHX34yRURWbTZTdTRmOU0yL3FjbTVybDFYQmVZeEhGYFBKb00iXUZGRUlRQT8mLjhRLD5XRy9FQFVUXnpyT3Io'@;
put 'T01BLmZUeCJ7KE9UIUc9bGE0RjxrUkpgJUlnQUpSSTQrfC4oQldAKmUrRlVudiJ8a3RhfHZIR3o6cSV9Mj9yYiIiVmkzRSJENns1ISIrKVB8MlJSVkRTJE8hdElMWWdXKUBaNCMyRGt3TT4uckE5fltbNWYpXiltbFRmVy4kZT4zUWVaTTpgdGMoTU5fQURRVDBvYUt5Jjh5YEV1MSJRSTd8UVV6'@;
put 'NGVKNFBpfmZpMlVsP2RpXXVaPGFGfGB9eE1QeD9dSlhiKyQ/OFAkL0k5NCRNdjVPREAuMEptT0s1JX1wd0ppMygxMl8zZmxhZVkoRC50W0AvYnk3WnFIe0xqM207aU5YWDNYU35IdS9WPFY7WXlCKFoqPjN8KVB4L3NWNXomfXw+WE5gP1twYVlofV9RNCFQanYyWFUoQT4/bk9Id1k0TDJXeU12'@;
put 'd0NEP2hIJCVMQiYkR2FmcWQjLnU6WCl3PmdrQ01ebUNoQmtZUDB1MipuOWVbfFtTLmhJZnNfLEFkQVVOPEd6SmlVe2N+MWgvN2VeKUd1dndXZSYhO2IsdCJpKnZpUCVNSm5adFQqZXgoT2JWQmBEaUhTODxbRmZXYTd9Lk1DUFJ2elp9eEBFL2FvYHByWm1COjl8W0gpal5DOjp1UDRWVkxKcUc6'@;
put 'L2MqQWBlO1A4S2xiQyM/OzQlckxTMn4oT2phcylzbiQkOiVEZkEyb2J4I0ZKRndpVFVkWU8xSmsiWm99bzhmdkJEISpOcUJSdUFZLGwjP0RJflpuVUVAPlNPPm9rYzpMTz8qNlV+UlhLWCwxX09NS0Q+TkY0QilDMSJXfFFLTFlMaEllL3N1aiVgaktDN24xSy52bGhvVm9CQi5wWjNSXilPK3JA'@;
put 'ejM0KExiWyI3NEgvY1MmM34panNsPD81Pm53UUU/KHZLSn5GVXdaQ3g1WSJlInBzTCVBL35XZytWaW8rLHY2SWVefEVqeSEoajF5WCFfYmFFd0BjM1I6QGIwInxbUl1gaXk0R2VXQCIyYlgrREs2dHF8e0I/Vm0sa014QjEobEkqS0BxMHB3QTBkN3wxIn5yazJhM241JEYmPnRDNWYqbTBwfUtm'@;
put 'V3c9XjBWbk0sdlgoMCx2Imt4KGs8diE/UlRvbUJ7Ul5MNT9rMywhNilhUnlFb0RWTmhTIl94WVV3JW9LQS5RRkdjWWBYd19YbW04N1NkL2h8KC4rT2ghMEQ1eGkvey9dSXd0RS5OSSRfZnVUWDlTbTBjKDw6MFVaVyw4PE9HOllRVTRNQ0xOWHE4SDxkJS5ifHhCYD88VlMwV1dsbnVrI09Xd2x0'@;
put 'e3cic00zMy5CdFNZWk86WWc9NXQuKnZXLy9gOiR3fUZTKyhzMUVRQWJTMS9VUlRXfEFSUmlOYGpncyJuQi88TERLWXoxXjVLN2M2SVQqSiIiPEEpK25mK2BSKkxaPEZZPTBzdn0kNkFST0NGfTU2dEJWS1pgL1IkamI1IXtaTlBZPkNVfkc2Y2FsO3RfYWExWkRgPXZnfS5+TFhYcEJ9O2gxMCJl'@;
put 'eDhwaVR+PztoMitPdH1JV0hbTm1NO3pydHNoUDJTZExYM0gjVyNyKWU4JVI7L1ZIRTZuSzF0V2I3c2tsNGJTYUNBdGNmdFtHYU1ZWWosLDZ1enZAcTNyMy44UTFFaWZQLzVwYixAMGlmfD9ianJieXh0STt1P2A9PzFMd1pmKS8qVG8zWF9VW2AjbV9DQzFCYTxWT1NpcDdRVyNTXUtJUUJhXWsu'@;
put 'OTFMUF0sXThTUn4uWFN4YzMqPDwrdW07V0RPaTBHe0wsemI/UF1adSF6eCNdWklMcFMjenlWKEtuPjB0Y1BwND0scUNJXlNGSld8Lj9UJEMmNUcvZ3NNMmQvQHduTC8xcmNDQFJHbnVHWEZOcmBIPDxWU3pKZld4UytDTyZeSEVYQ1BvezZvfF53dGs6aCNZSEQ2N3l5KVRqJTNjeSlqNFU9a1J4'@;
put 'Pz9zVHZ5fDFFMj9NQmh9SnBYZ1tMTFtdMyIrTyNQJFNnYywiV28xaixDKigsWX1MXl5RXURXNVBTZ0dvTj5hSzVnd3UvbiMhWmsvQ1Esei9WLGMsa0JaOkJWNG1IcCYxUTcoUCpfRS5DfTVsSjs4dDhAd0BDPjN3OWM3Sz5rS0hbVC9fbngwNm5Day5nV0AwdGtFeUEjZjwuflNXO29ER2I6VThZ'@;
put 'PklmXmowdmUlYHtVb01fcEd7R3BQdGgvKUh2X2pBW3JGRDRgXlhjMFh8TENCNCopT08kVGZ2WHwjNkQvOnRCd21HUmlkc2ZMfjNyIkpaaTREL1VSZnM2RW51VEouKUB+Ii99VlZYal5nNFk0eHF9KXQ+b3dzLnY/OUd8PnZ2RE5UdnNSJXlweiVNd0UmeVlCdGo5NXFYPTlqMjYyNWNYSkFzOEdD'@;
put 'TTBQIUp+fTdvfjNhcG9SWFUkfTk8TjVCJWd0TzBJSTU3Xnl+dlUwODZWdGxmaVFRPyZqU0NBWDdbZkR7O3F1Mnw0OGViRC5zP2AyYmVFKT99MUpDJVJXUzM/UEBBPmByI2BlPz9yfU49dEpoTiN9RkJ+MzJYR3RXUiN2fn1KI1hxKj9iLm41NDpeWHE/M0kpX0V2R2taeHM4N19uLmh8MyM6KEAv'@;
put 'QUEvc0Z0UFlfemt0Y2k1Ii8xRndfSUZiflRzaT9IRzZiaSVrdWo6ZmdBQ1t6Yl90U1BaLFIwZj9AR2JkNi4pOF8+MTRBSmhRVjkiOVtIWTtTTXBYfD8kXl1dXz0jRHI9eHR3X2pBaHRTRmArKm9IXUs8e3h4KH5DdFtpRGl4X0Z7MHx9MSkwRFgjZC9dRnRpfClQTEJBPVovM3siJWQvKHRnUjQ6'@;
put 'WihuTD0wZD5WNix+djNhP0NNNFcvQHE1aW88WiFdfCx1QjQidHh8QERMNVAoSVlXUzp5V1I7dk4hTDQ4UTY8IU0zNT1POklPai98KExwbkJaakxpcyN8fi4sNGVHeGMuRlAoaFZ1az9QUjRTWHlRWVNSTjY8dy5nTWlEKD4mRExKR3RmLCRQIndbcSlATDQoNT1MND9fcyh5NT8wKCU8WyleRl5O'@;
put 'fXV5LmlPJiNReiY6OFhRc2dqUG1hU0FpZjlMSmxsbWxuMDJGX2E3QzgwPkI/JGJ2SkRrVU8jXnRIUShEXW8xPGUwJGJHL2cpPypWejFzJVZ4TzksW2hiST9ORi8hekQsSWx4RFpafEw1MV45XixFUnI/PWJTM1svSVkkV1VIW1haRjY8USxmdmk3KkIvdkdCSyN+M0lEc0I1WXVXOH1vTEUvcEdk'@;
put 'bz0wLzFoYXd1ODFSOXBXUHJBYnNQc01Ydjg/WCw2NixCWnYheCJ0T0NqYDNrRUAlMm1Hbms0X1Eodnx1WypxK3BITn1AelVQPDpWYmNpVmEvdElpKEdGUU1EZ2hOTiQzYjM4QmAkXXBadUF+LmxpTTdpS0pCcnN4PE9wOHMjMWJSbU4oeW5XU3BMTllxUEdESitVWD9yfSsmQmNwTEtMX1gqb2B2'@;
put 'SW9jcUNbbklAfC9KWlglPXlLXT45Mj58Lk06a2ZMRUhFP3NCOClDXW5rZzRKMl1kMWBeRUFXQ0R8Rj92QmR9fSRvb2E3KntKTTBxfV85ISI1eF9JTlNhTXxRUnZ1T0d3XSNieioxXjVhU09pdHpoWmcqdCRZL3gqaWxpdTVQLERJPnFjI1NGdmo7UnhNRCQkMDgpd181Wi4/JC8hYXZUMTYsbj8w'@;
put 'Qk5CP3I+eFV8MlNALmNDLFl4RkdodFtpRDlIYWx1TV4pPXQ/fGZYfFI7Q3IrYXxdKDgxXV11QnkxXXBLQDwibTYwSXAxYFo2Vip3fi5qWGNDcExCfmBNN3JSLE9idFt1YVtYejpGK3RFUlM1IXV7SDxBNH12S0ZQRyw+R2MrQSQ9IWZaRjlBdVAyeWFba2RpSy95VXE+YF53SDRxWyZKL2NsWGQr'@;
put 'WiozUV1LRmdlRyt1XkVZJE51NjxZUThZajVlV3QrY3dvbmxYLCEhJiUqQnRxZUFpS1M3TWRlQHRwN0pZJiNtekVJb2Yya0YqR2l0X0hIJipNTG08aGdRWUcqL05vO2JifnddSWlRRGlQIkpaPWh1ZWpbImpjLnM9fDJtOzZWfjw8RmFAJkhsdHsvZEBaQ2dKfVdTL0NLb2FWRVhCaEdIO1VSQGBb'@;
put 'UCpgZzRgS2hCcHFQTH40ZkRDTytNMkskTCVnZm98KTVGczEoblo9bUhbVkIrR3B4RW0rSC9TVypgKGt9dCJVT31hKl1WeSw4KGZUTGY2aHl+dkhIKj1UbVVRQGo8RFddUERLWXpnfGVXQEM6UHVQW0YiTEBveXksYU0yXSwiQ1UsPikwUkR9WFAwQVlMYnYlXzR0d3xKSnxwckhsOTJyPCl+S25t'@;
put 'KioqL2h8b1smM3pQWEMzM1JzOVpNISRmbE1zb2cpMTI9SiIpTTx+SUt2I2N3RUZMeEVOSSxjXVRRI0IvP1hfQChDQysxTzFSUmM2QFcmYCptJElSb1Z8eFJGLnQxY3BpXmh9WCMsODJOJXFMaVUleWNNRipmQD1+RXlVRXJuR1g8KUMvUilKMCZLVXU1fWY1d1toVXt4W1tsQkk0Mlt9ViRUMUZ5'@;
put 'X09+XShgckVHKnQlRj5+K3pCak1HaisoNihyIzU9ayhxQiNkdHVbM0xASipjaHw9fjA/cFJqfGttQk5BKmQ3T0JPSylfNnRJdWIvamF+X3pJUk1scX0/MkN6LFRjW1dFanwzaCk+cWddUyh1U2NIeTd4RGU2Wzk9RS4vQS8jb2l5XWtZaix2UUI8Q2xoVTZlOSYiQVd5dlR0TVVhQ2N8IWo1KHVD'@;
put 'dCFUcXBOaGY3KEM0KENlMitHXyEzeUJOY3d4biFNYipVdmdpPUYwQFg/VmtXdTMjU2FkIk9PO0chIUFtYnldK1ZVcUxAWU5vPntfMkxDRXBmMlJjU1AzKDx9NkBvUW5pUUhUeVBVJT88JnhaRmkpYnVfVkVEJVRLRW94RDUrQnQvK15GdkZ7QVN6RVtpTlZ0RHR6SG4uOUYmdXBWRk14KEFRdXpx'@;
put 'dSx6YFg2OUxEUEdWRWNjYW1VLEZXSkN7THhRVlpifHBAIlY4KlZPY1chSEJaR1liUnE4WnMoeFo0NHcmKUF+bWEiLjNgTmJqRCF+QFZCLzd3SWhHaXNNMSFyfCFoU3ViPH5gXnN5dVdTM0xVQmtFfSxwQ1FANT5XYVE+PEVhfFYrIlZKRzokYlltSmhXIUQrYHFQPFJCImYvJU5+TEV5Znw2WSNM'@;
put 'PTBAdkRbZ0BhV2Fka1NBTX53VW9QJF9ZdUV9Ln1MPCxUZyUqalUkYG8oQSVbfVQpdWNbQiNnLlVHbCtvUigoSV0waWdtWVU3TkY/NTUqTVkpRHJRaD9LTHxEZUAyV3N8P1lDPDlfQH5dfCt8cT9zISRHMypvbVRwIUwqYE1eRkIreUIkYGVFe0FibTZlSlB5Jn1GQiIzNCooVHY1PVJJJiwyfVY4'@;
put 'WX1gdCVsX2R5KnI+LkdPT016blNMdmBia2pDZUAqWnF8cXYkckZEbz8oS1dsan5+OX0zPF44MH5Xb08+UWkxTFk2RkNtWWlSK3x2JkA+MjNlVipsUntaclNERC4iUmBoI3dFS3d0ayhuX0AvUTs/UzNzfDt6VGlqTis1UEwkXzxsW2NleThwZXBjRUlMKD9AbDFkOWp7dlZKP1cqK2BnNF1IMiZb'@;
put 'dU1vVj1PWHpIVVd4fWxRZXl2Njx9Nmcla04jP3o4UFBmYFFXb00kXmldPGxNb3p2NVpoc0ciQS95R0FaZUAlQStDe0g7OF1KWHo2TDo/KUpvfEVZdD8oSz4leEZpPVgjaExTRjh0UkExRld8WytXK0RLMngofX5pd2tLITFLOi9EUk9AM0chei4+PVZtPm15NyZ9IUMsVUtOdStuXihiLHhqYUVl'@;
put 'dFh1cVM5ZkFZfj5aa110VFh4NUp5QitbZ15PRD1sWF8/MltbbEIwU2ZZQy5nR0BzRnEvVEtvMjJdfS4lXW06b1RWdzhAUCZFRWhPX1UrPnR5NitES3t+bCJKL0cjI2xodiFybERgKHQxPX44SiRfe1pVd0R6aH59RlJ+KTRqWCF+cGlZQFlCUmMqQlI7QlNlTWEpR0hwajpoY15jZmtSajRvPEYu'@;
put 'SSpEQzMpWU9raV1DLk1mK18vNE84KSxgKmtATT9bMHdsMUVOTEo8emArNntiYzxOW3xdYEQ3Z0ZILCs7TzdELCY4cVNudF0wTk5ifk1TYi9hW2dGckZWQCwwb3tYLnNdR3U4fFhlSnQkMXYyViU7ST4+MiwjdDFGPGE/fld2dFtDLE9KdnY1cWducUw2PE5PNExOKkltLnZlK11IVzNBcENPbVdG'@;
put 'RnNrcG5Rb1Y3Myh0KDQ7Lk5ZR2w/Myh5InhxMikuTjNMSHo9L0xbIXoybjpJN2ZaJHZKdzxwansvJjFpZEBpPndnVzFLTG0kNVcvTlBDMnVrZmxATWdPTTclLF5DfH0pMFoqYUwyay5DRHVRSTY8dH43LDc/NywxZVZjTDoqKFgyPzRWS0hzWTEsUDwkcH4qRm11SkEoS1Z9Z3Y3OkMxVj5QTUpe'@;
put 'SEd2YCFETjdwTEdDSFQzaTtVV1NbQ0tMY0F7KVpaZ2d8fShhRzJGPGZ9M1l+Vj5QN2tDS3w1JHM/a30ubml+UTRHLD5PTFdFdGtIUkNmN0xqKTFGJEojZ2FsejNtYzs+IVQvPm5rR0c2ZF5qOl02Mz1xWU98VyJ5LDx+WnYvSUtxU3EyN0k2PEosaltKZjF4eVg9d24/KV4iV0R2Sjc8M3F3dltK'@;
put 'cjopJmslSmg2dSt4WnQwPT5sQTVORV5jLipHX1VKPiRES2BrTlhlXlt0Ni5FRVYxP2koIUNgPk1QKHZgZSpCaWU5SlV0cGFbfFY+JH5HT2RzVlVrJW9fSkYlYyh9W2hCNDd7MGshIkAoN01LQ2RtSV8lO1VJcFA9RWdYRnQkIU51cDBmPmQ0fGpXTzs1aHhFNTssMWhhKU8+YDAsV2JJNmBvakAj'@;
put 'NkpFdis3bkw/dHg2UGowWHlkeV8ranlkciMoK1R6ZVslZTBZT1ROMXt8dUtwWjlweXksfDM2MzpOMGc5MUhnTGk9WUlLY0gyWkRHaGQqdlZJSkIvXz5uUThXcVp5eS5vKW9EZklSQCgoLHt+KG01ZjRiUExPYEYuZVRtNU1KIU1SSXJudkZrdTNHOlBRL2Z0MElzU0Y+SXdPVEBXRHpqcStSSWBq'@;
put 'LFo6Zjs9Uzx+JSE+MjRFeWFQbihIO3lNeiRmWUNiQGQqNGdzVWZpISNXejExOHVhU0k/bEslYzFuJTUkfC82RDQ2KC9yfkAhfm0+XlREL0A/S0w+KFJ9KiYuT14pcFVlQzhbL3Qva3Rtckg8W0NRcCYpdGZEfUxDI31sVHRrN3RbPUkiP24/TDxnZVpyU0YwbyZecnxfZiN6LmhMWGVXXVFCL0ZA'@;
put 'TXZnImcwSmlXQHtuX0VrdTIzIUAqMk5XbUQ4TFMyQyIlfEAoY3xdPixQMGJkTDNGfFVvVnNpITJDaWB4Kj53LjNRdE0uKWtxUlE3TVM6QkRARz5GPyZ+TX5KZFohanpDTnVLVU9ga0F7MDVJcztveiIhR05+VE1LZURKdkQ9fj14ZDsqXlcscW1Vb2l6R21YX2RWOzNLVGJjPEJJV1NfMWxoO2x3'@;
put 'SmBHOlYjdy46dCp3ekA5W0JlT2ZUZmBlQnUmfFV3QVJXIk0rYGVBa0QkZzE8VVJqP21sdFtyVy5McG4heGRHN2p9T0xNcXUsYFdaTXcrbiNmdnpyQVdSZHRRaj9UMyFZOUVXRyw7I3VKWSx3Tng/WysqeE5tPjZtc2s8JD1vYikwVEExfFp7fi5sP0tIekZaekljWDl3TitLMUIsW1N0SG9kfFhQ'@;
put 'PShDPCw7aXNLR1lTeEduTEtgMVI0eXI6XT84VyF1JkZgXzR0TDQwNSU3MDIoPiJMW3xwM1IqYEgjcyhCdWt4Xlt0NldjLmdOYW9IQj4yWHJHPHBSQ0R+QVlraEg1S2dFSjU5L3NzX28jK31rc0hwUndbZ2JVd2ZPSFtSS0pXOHhpY00uYGhoV345Q2cpbyxUZjgvRkUsT3E2NWZwI2tWSitXYik1'@;
put 'XypTMEolZ1d7U2w6TCU1YVpdfVFCNVU9YD1FY0FrUyxMSltqME5pdVZlNl05djJ+K34uImh0bnsiNFdLTFRxdVsrKFdqYT9vK35+OllILi5oZkxyLzVSZz1VdyYzRFlPa1h0S0x0UH0uITVvLlRYQjJwaTB7NFQydXFuWXg/LCFUVGB7WjpDR2F8UkZbNUt9fG4/KSkhfk9qX3dsSFBWPWl6VylD'@;
put 'YElRSkV6YllSS3FiaFp1R0d0VClOd1kpWkVtPENJVzZEQ2F1Qy9JZFFHOVNqRns7MXFZVndCT2Q4bGY1KFspb1Yhcl1TRE5baUg3X3xtPi4hdkhgZGFBV3ksRVV1TTkmY197ZGolcF9yQ3V0Mkp3a34hfiZRRzlqTlZnelJxa31yVG9bPFh5fCQoSC9AUkN5Nis4USJzMUUkPVZ8V3UqKC5FISRW'@;
put 'RXtyaE1mLGFxIU17TDBfeiQreUhVdTwofTBYQy91dD5UfEQuPDl+L1crYHF4YlBPPyh5YStXWFlhSkdKP2wrUCxvNEc8ZktrSW1OTnhIOjtYa1paRnthazRBMloiMyx6YlZCWWF2RTpNT0pxQ3d0clJDOkVVO3ZSRE44NzcqUkFsV04xZGM1LHRlUHIsZGY1RTh9REh6U3RKNWp6eTtMRERsQlc4'@;
put 'TmxOSlAwXythY2hFNTRtMVVKeDhSVHh3Smx8dioiYlJ1OipUdnZYUFlhZTN+UVVwJlllNF5hK2syUlZqYnh3MDFUZjRNSDU7YTQiQTNMYEpxQyxiSGVkLGt3SXQwSHE0UW0pLFsxU0k1ISs8cUVPeDZMd1ZGWz5WeUFedmgqfjkqZkwhRl9nRTt2O0JCQkIzWTRGJU44dCopY2RsREgyZD5SbU5z'@;
put 'ZDwxTWZqbVdGZS54ZFM3bzY0KHZYK1Q4VllhT0hqR2NNdHRKWF5BKnE3ZlFvVml3I0V6T0pTWSRubDB3VWlvfWRwIldlaH1LSWdjeFErIjtSfih6YyNZQVFONkFEbkVuRDI3Y1NSeixiK1NpRHRlRSN3R2JWNExudHhQYk1dRCF1NSh1OGNDTWJAL35qb0hnajFpRGsyd1lhXXpLbEoqL09rMFtO'@;
put 'PXQ2cU5BbmVLPS5MfDVQUEhEOyFDRyo4PE1pPFA4Tmw5QVQ4K09oSmJZRyt+KkQ6RFBIUytXYS91TU90PW5fVmliVEhPancjNl9uYkZCZVpRMiFCLkczPy48bXlIOl50RTBRejkoSjc8LnkiXzlfMk04YD11a0xVOVIwa0IjLFRPbV4mc2t0WTIsQVlVdH5MVFBJQ0JHVUR5NlQ4JGZeOT1baE5t'@;
put 'WF8xNkF8N09YVlgsI2dZRkZafFh4bnQmTTxvKlpOQl5rTTgkZl1HX0wvSHx2O1JqTUlCcSlXUk44Zl1rbiE2ZEUvQXApTyIlLjVCRCV4bFVIXmFrRUVEfVdeQSFufjtoeERBSjs1TDpJPk02Wlg3JWpbMH5uO31JO1VLZkJrIVQ0OTRdSTJuM3RwVSJ0fUhEQ159P3ZgYkVrekpbQldYbENhaXRZ'@;
put 'cnRtQkdCUiptSDo6QUlaKSg2QiFXTUlSNDwuWyp4V1E/KGNRTDNtZSxNb3U7NE1VWXUmWUI/P0V4KjooIncjdGZPa1U5ZDNkLlJPSi52eDRpS1tmSFh1P1VEIzRPLyJ1YDlhaXRSd2l0WSE1Kz4ieSsoOXBCZmIsSndFemRlLjUzITt0LFQxSF1pQ2o2ZF0xNyhhZV5vWjR2W0Z0U0she0NHRkJh'@;
put 'aTNXS2ZMR0VVd3pCLmoiZ1N1JTtDMld9SEg7dWMvVlRCXWpNNUhKTmYmYXZCcmZbZmpEI0QjRDFINmtESUdhRiJ5S0dnNi9eW2JQUHdBSkpOT0kjN15RekZQanRZcWR6dj1qblQiT1NEQG9DQW5ve1AxM3RpYmZqTVIvMDZHdFBDYWFgZkxHc0l6WHY1PE1OSilXPTBSLiJhczgwK1kmPEVqY0VF'@;
put 'PDR5bE12NUZXeywjVnAvWCJXMFdqNEt4ZHQmNkJhM2VbZllVdz92T2pQPzdrTFV1byYoSDE4elowdW1tUUZCZE1iem5aUnNDXywid1pbdmlzY0xJbjNENi9JMyxNbXhsOD9KfiI0ZCFeZHpTdUdCTl9QXXl9SGBFdFpkUCJZODx+LENhNnkzdmwhV006cVBNYHpQanltVk1eUT1oTzY3OEZESXlf'@;
put 'TEsiIy9hJmtIYlMoeX5odFkiaW5hZHRdK2NTKTRdZGtha1EyKCJ3fipXNyRDPkckdW02R0JmTVVNe1B9MmBULFpAQ1EydiMxQk86VkM1KCJ3YnYmc3pOVWNDQE44a3ojTXV0SkdtNndHMCt1UD1oM2R7UE4zdU84TVRdYnZNT2VDKHo6K05mTEd4RVsuOUY6WT8wLEw9QCFyXUt7UGNLUi9ZZEY1'@;
put 'NWsxKT1DZnptUXkhV01nJS9JcHgmTTxQVW95Il1tVUNkZXdCaGddeSNUd3VEbD9eSEwwQ3RrdFkjV1smPit3Zyw3PUR9RE1rcXVKaXRZJm84U0V3UHJ8N3l1NSJjbHpQZmUsTThmfkI4T0JaNFU1Mls+KVFdPlM4VDJeWD9kdXBTQyY0Vl8+SXpCOCp4bFhPYUsyX1lrfSJHUWlSXVdhbXBaeGxU'@;
put 'IjZNe0poMXdXaEdrWGc0RndQLyJ3dHQxMVdIUSZQSnVMaEQyIj5vKmp0WS4oUyw7KHBMTkp7NU5fbVhbaSwjOGtPQEF5UXVXYzJ4eUI3RmthflJ7UHBMRT8xM0xqTzdnZU1PUkJeMXxyLCN1dWl1e2gsTEI1UTJJaiwjPVBSI1g1RlJxSFpCeDcsNzNObUN3TEgkQDhHdzh9cXV0Z1E3S2tfTT5X'@;
put 'ZzJTOFlYSE9ETmRJeWNqYSNMYipDXkpBe1AvRHk/Iyg3dmEvNWpkRUAkMFRlaXRZeCJ9eHgve0tJZzxDcTZ5aU54T2ZNelovWCVDZlBCJWtXTVI3Tys6UVtmfFg7KX1IPUBLNm9udkJWfEoxbmUuNTphVUBVcVpCNz0qKil9d0QyIk44dz97Uns2Lz5URGJiLkRfTGAvc3dBZjVjez4+P2lSfHZs'@;
put 'VCM0NGtjQTwqeGxjdmxCZTJ2Qm4iUVMwV3gxY01MUHpsO3k6Q3ozPzJpdEdRYXV6VyMqO2F7UG1NNF9fZCgsUU1nSlN7UHY2dV05KmZRbituUXYpZGpvaUpLPDwxaGU4WDJNKS5OIi43Uy9FalB9aXl7OSpmPGEiQ3spK1oiOjMqcnF3RG10NDhwOzlmP05EPE1ZYFFCZGpuQD5lK0RsYG47T1R2'@;
put 'L09lI1Y/RkJ5KHNMUWl2Uy4+YHg8RXAleWRoTHE9OmlBezMjKmZdOWdUTEQjRzg8RWlLU1Nid0RlISs8KGt9P3tPMnRGZllAKDxtQ21MWWU9VWwpP31XeWM3Q0NaaiJDeFlsKkRsTzUke0NpYjdLa35KSEdKP1dKTjZ5bCJqXXV5OGtIaWNLOVhvSmxiZTJKWkw3RzExKlcqUTpzISVXWDxpdyN2'@;
put 'dDg7enZSQmNqZXVJT0JneUBzOHpOV1F8d3dMVzcjTilNb0xib05ITjZ7WnhqVlV+SFEkeHYuV35BNUZraXZTVTM6Q1lONVpgUThHY2VNR19XWWFYMERHS1JyYFEvfUB1SVFENjQ7IVhKZ0UzanZDd0VJZk5CaXNpSzZPTzgkYzJKe2hbaVEiRmZwWi5yJElfYU04Nk92VCJHcTFCREJrWlhkaklJ'@;
put 'eXVbOSs8OEJ4TH02M1dySV41YXh6c2VHTjZJYl5PInVGS2FTXVp1TXA/Jld2KERsW2huRDgrKWtIYkltP3FdMVlhWWFXM2h0bi96MTo3TD9bZGkzLyhBISs8UjN5RlFZM0I+KmB0a25BeXA7ZWVWOGlhb1F4UX5XRVQzbz5iKih1eFlhdENVWFZYR0dNdDVqL04rVC8ueD1EUF51Vk5BWmRMSjdE'@;
put 'TmJxKz19TCMjWTJoTGx5YnQ5RjFFWWMpMFhmPGkhdUg6VjdqRU12MCsoRCtISCpETTFuTjg2T1h4ci8+d3U0cEVnY0BEe0leQk42QHZtRHxSL1pRVHhjWjVgKU5KWCpEbEY1SUdqRGByIWl1V31TbCVVY1dQPTdrRHc0JTVXUlYoOkQ+aEVNPD44N2khIkE3NXlQe0MiYUg7fXkrQnBaZE1ydGhj'@;
put 'bzRPMikoTk9XZU9YRGwxR1hlZ0xsQnFpazc0STwhI01uenNpLHZKd1UsSlQjMz8uUkhwdE9NVCY5PERBZDBrMFBda3lSKjc4LmdedkRYY31LSDBNY10/algsYGhWeWRQYzA0TyJSfmo+eV1ZZDBtPEYkNlIwalJHRWRJNiF9S0JpRF9ZdmBwVEwlX3Y6TTwqPmFoT1grekpKVUpsbDYyMWVpa0NM'@;
put 'KmYqL0guPFhidTYyMWg/aFRmdGFONHRCLmBZJkpwU1AiVnVAVXhAYzxwalNEXlo5SkkheUI7WVZ2Qj0+UnYxd2lLd3BRO1k9NVpsZCl1SUBPfjArYVohN3VdZyMzSmxEVGJSRypTTW9HeyoyJCVKdkVwQHwhe0dzaVV1fTUjWEJUe2hudCw4aSY0bWtib1plalkvUTBFcSJAd2FTPUk8VSs0S2Zk'@;
put 'P1pBIz0sblVrM1I2U25MS0A/OVAhV3VCOVglSiE9Q3VJTyxXek92OzNqUzxfVylQa3spRU1tOyVHQk5LczwvK0dUaU86dDwzPDNmTzhWcjcjJnRKPzpbWDlRWF4se0UsZiFrRDhWQnVkcmIlQmQmIWlSTixsRHdtdzFEb25CQH1TZ08kSGk0QlAxRUlDMkB4cVQ9V1dFI1Y/K0Y2YzBPLnIlO3Vy'@;
put 'R3Y7KyxLaXAsOkdibzRpRm0pKD5ZZDRzQVRBQnhhYDtSc21IOVBtIWRWZlZmKkNwSygpaE5bOVV6fCZtRX0wPXZ1R0pyWzFCJXB3eVZvdFolJW1DI1Z3TEslI34/MDtBI1FFaT9YREdhKW4sXzQ6WkhneWtwNj01Xk45bStScGtaS3VvVUh6UENaNT1hZlJITTZ4NVFXbj1IQ1E7eHIxOWlBeVpR'@;
put 'N0lVWVYsWFJ7ZDI4bGxddyhTMUBBSSosdCFEeXc7aTJDaXB2KmlCOURtWGk1R3cqKHFsQyZxOFYvZTxBbzd3MW1vV0hwMkZGeyEqbUI+ZHBWIjIjK3VxPCNtWTQ+Q0ZnM15QXX5sSTJ3b2MxJEw6fCh8KSxISW4kdSEyeClManZtJFIlWEM3TGlqQC9qTFsuOysmYkc2RU1UZ3hXOkkpZ0RIQj4/'@;
put 'Qk9ocUdhLnpiTUVIK2N0NHQ5NWklS0JAODxjI1RiU24pKz9FSW4kIU9nN2g1TzNPZ3klYlUpUGdUSls6Mk1UKG5RQkJ2KlJNbTBjdS5AbjYyQVRxIUlickspPEd6JjJPUVssTiF2ZWIqeFU5NipwOTY1TkZUN1J7JTNDRTEofEhOZDxwI0J3P08+LjlCNjdvYmNZT0I6bXxhYW87YXhSYTUvSl9G'@;
put 'WG1FPSoxQlNsKWZuQT5QI2QkMyEjNiJRfCk7RyVCOiRRRChkKFBrNjI9OygqWWkmZ1RrdEdLYFdCI209IypzQUtEZnozPT90M0c4MjVeP21Cbzl5ejRVWUxnOyR7cF1eK2cwUGIhb0AkR3QxRjIraVIsfEhFZElNa3JGfUI9azAuYzpjN0tSXVhQRj1rcmBJYlQ3eTMqQEVSXUdTYmBubGFqMUtR'@;
put 'fFhoRUN2MS8wRSk2VV5weiNoeiIsT1JEdWxZNUpBVGRSOHRjWDV8RnAmTkFldUk2QndPLFJUYWE3TzVBVXErTVVwdV1jeEcyRHErLGhMdnxFdUlJLCZAO2F6QkRIZFpnSVczP3ZwaDtQd2I0TDJYe0MiRkJBQUFBQUFBTHZLdDV1MzJKaTx9Xk80Lm9HNXNTPmQoLjBpLm5XW0gzLCImeStUOUtq'@;
put 'fGBffn5KZ35gWXRXRSZnQ0dvNSZeVTNAOV5ScmNSeElUUH1EIThWPGRneEpyWGQoKyZ3dixObD0hYSglQFlTXytqOkR8ZyJ+akJBS0AwOlU4eXM7QVFZaDVzdVJ3TklXQCZ5amNXOW5EJTxTQSo1c316OlUxRThoRDZ8WHtyMj59ZX09eWNIWVNgS2hIfEhrPDk5Y0JTOnw9a1M+PTouZTBfP2xR'@;
put 'SStbLC8lN3NmbDEuXltBUFludkpTKFtXIyYuR0M/STlqUiNse1E9TmRwUHB0VG00MDgzS1dmSlZZMjAzUjh2Xn5zL0Z+NCNjdDt6aHlkdU5efF1EKmFRQTVOIUVNT1FYMEBQJXFHaX5zMiFbJlAza2F6XyI9N0BeJmc/Xzgwd2JyYl0qRXFgJlJ9bCNhV2trMmg6TEVDN3E9Sigifjc6JCVIX2pN'@;
put 'JHxUQFNPTDg1cyxbNy9uJjRUM2Q9LnZoXiV9WzwuJSZEcjROOEJxMzx7bHFTNEFqKXJ2PjNOTD58WTlHJF4xaypsbUc6I2Flfj4wb0lfRj8kNEc/WCp9IVgmOjRfbDFhPTZqPmlWWztOWVokJi5gX2N6WXNPLDFGTHxTPi9iQFV3YEEuSV9mOiR8I3J+TT8lWTlTWiUoL3lufWlVVnZhd20+Y3RY'@;
put 'PkBLP2ljVXpaSnV6ZVE7fj4qb01vRlFwLztJRyFecWBRZCYzZj9SY1prbWM3Ml5SU1N9KWsmMDR+XXFzb2JVMS5TKmt+OiNAPTlDKXlLNF1UYFg6QWl1WV9rQEk8dj5dLip4SCVmajZyWHZEdT95JDx5PTpmX1ZKfXhbfTBQOi57Qj1wXSt+bUskLylzcDJhISp+PW46NEcsfWJvQlB8QF8ldThR'@;
put 'I29dbzAwYnYwPyNOR3BXfWZZJnwveldIb1ZbdXZVTkQ8OCRpcDs7TGl8KWB+LndFOk16M29OdGExcXYkbVtUeWhdZklpKzltOnhfbG5rL3p6VX1DRltae0FGd0ZPKChwUV5JUDhtb142KyRxb1EoJjF4NWNMfnl8azlVYCxObVRRR0MrQCQlc0BOXV1bW2ZhTFdYWlNPOCk9RDgucS8reTk0Tnc+'@;
put 'OT46fHRmUUc0UlZFeFkoIVVPO0J9UjVAYiYzY2hoX1QxT3s0Lltzc15bbzlvRkdAdH5XP29kV101aj55fnk6JGEqfXZRVS53JV9UelF9YlBObDtTUnVgdGBLMixHPmpZX3Q7ZV5ffHVUI1oocipuYTgpeF0xJFhAIWdgVVBLajBETzkweXQzWnFhQHMoaGFYeXwiQFBtRlR9NUJUejl9MV9wYz8z'@;
put 'c0h5cjVEVHVNfEQzR2ZhX2IpWGdDJSE0Ui5CX2ZCZyxObVJodDtmJjk9MTl6UGJdOmFoLFZnR1taNU01W3EiPiklJD1tPXk2PlVUdz9zNiQjPXp8JVNfP1RnXjJuYDRLT0BOWUpIL1hAOTJgQT0qNVMwLEsifmZOT2UyK0QvaF5APHo+ejNjP3VvLnBTZWtRIjwwZUJjVE9QcXdSOnJOcSpefipX'@;
put 'cyxZIV8jUyM2eTRsQS5QImkoPDJoMThfVUxeVVA7JXtedjA1YVckUm12d0h9RnFYdkx+ezElPSlvUi47c3d7VE14Uzplal11flVbc2dOZDtmfU5ZTX4oc3BLPkpXMnAmcjVaUmYhYEd3dzZDNEYmZ3gjc15LSlUwYiRAbGAkfiJWJlY2Ok1TOTxUX01pcz16RnZwPy5UP2JwQiJGU31+PyMpeDpU'@;
put 'ITZFP0lCTFEmM3g8UzFFT3RKXTw/ZTliPHFbfWl3ZGpVZWMkLF1Teit2Pz0wWFZuUytlLH5OPjNLaChoRzIxUEN3bi5XMDpyIiNJV3ZkaSt+NFs2Rld3OVJuLG19LHkxQEtoNiJ7MXlfKyg/eVojPmF8WjtgdTQuMWIzbFt6Jmx9T3FwRWlrR3c2V35CSCs5XjJpcCUsdlFNSCRdNCxAOTNnWV94'@;
put 'NSErZ346TD1ATmlbe0lbdj5YfnpqeVJmZykzVixGRT16MSsqY2l+Q0w9eSIsY1pjYUUoNnNgcUNdc2ooLnBXYDNGNHRPWkBaY0IvenM+d08kem1VOilPUjdZdGh0XUQsRi52e1VjdilgcHliJih0TDhbRmI2MmI/VlksXyprfUJoQUgicGEhZF5oN2NfY0BUdH4rflY7XTY8TG1EUHZkJUI1aD5h'@;
put 'IkpBYDhrYlljai9EbFBoZ1ZGaShmWWA7anpWaE9vW1NJL0xbbHUyfE5CdmZxckVUbV5WV29IPioiJFohNipiQFBsTzhzPj1wYVFGfjBNaUh5UylSeXZMLDlATlNGeGdSPzZFJnw0KWBwKFphTSlHVXdTaGhWS1BzdiVELnt7WyU2eDNYK2BkJG0/ViV7T2c6X2pkPTQ0NiU5cCl+Yz5GWVMsU25a'@;
put 'STojbTsqb1UoQT5gfSJ8X3REYi8mfHBxN3RtYHNtTEc9a1NzVzYwPzwrcyQ9KDo8LkooWVZWJDx0cDNrfSRyUzRHaj5vZ24vRyhmPzxFaEJOelkjOUFXPzQiIUF2Z0AkOUFAIT9RcCxSb2A/SllrIXxoYjNgaEl1fnwscyE3UWZlb2BlQCMkQExxW0NzRGtGZGQ3KCYhYDZMazF6eDRNckdiZWwh'@;
put 'MX5zc0RTQnhXIX5IJk1eKndKUDFddUx6YXp3YD9IQ2xiayRhIT4xOHZ3L2BZVEV1I3xiOzMsMX5KNTojKmpQcj5UNkxkZ2ldazBdJSJhej8mQn1dKzI7M3EvfGh4aWhlNCY1XyE7Ik5CKCNrdmgkKls8NDYiMj0rW34pelc7MHtvQDZUJlI5LCg8N3ZhJEU8QHU4XjNZei4wSigrUzVUfnFGWk5w'@;
put 'WGJAOzUpcWt7VipFIzlHWV8hXTY/X3wvSnFMRVdAVGkqNF06eW9+Tkc/c2dYaGZFRnl7UykiWGx+R31lREQmPUBLLzgyUzkxQzBgNTVZZD5+dGJ5T1tfTjUxRmV7LigjJGV7Ln5+cHZ8I0VoKUJMMWR6RWEiS1JnY1p+K2wyQkJFPyhTQmxoYztRe2hiYjlEZHd+ZjQ4dnAuU2VRSSVOM3QxMz9Y'@;
put 'dltkcToyYUtZK3dAXnh+e1dqVDZSTDVgLj1kdUIiRGhnfj1XZ0ErOX5yPGM7fV1IaldjPFIxVHxWQ3I3TXh3UishK1s+akJ0ajF8OEVQaE9OTDZBIlsuPztaVG1RVVFBeiFNTWdtWDhLaml2Sy9zYG1zOkMwfW9JdXdOVX1pYTw7SF9PTnReKEQzcWVtdDBueUhsVEwweklCJXlhRG0zXixMOGl0'@;
put 'Z2tMMDA+PX5xJjtbMyszW0Z7Vm87PHckMD8lWzd6Q1cmNnJMTlVwSEF9eUY3VHglLktybXZ7NXExSy4iW1JDfk5xMGlZW0smOnh1KmpBa3B2MTY4Ri97IVFjdG59SEEpVkl4SWlWJn4kXkNrTCJ5aUo8O1ZFP15pYlskY2J6Q2ZKPT1kW0BOTlcsOWxfIjhTUGghRDVjRnRWTi9jalszTiN4VEc+'@;
put 'QC9tLmUiJng+OXU6O29hPWJZXi5iKEJDREEqPnh8Wl8hZ1dSTUd7LHh5SntaQ10+NH40fm04O0VDLGM7I2todHVWdEtBQE5qXUsmN0dtOCw8cnw6IUV7TGZfRX0+Mz8oKH0qfVlLQmVZPGIwOEEsUzUxTHVSInE6WiVRfjF7eURFfkIqPHhlT3g3YFBRQWApOkN9KTZxeSFzZ1RRWkh3KlN6NnQw'@;
put 'a11SV2h8NiR0aWMlSG1mLnw/MmZCMXBDJGZGYU9JUjssNnk9QmNqPnp1fkRKN1chdjpnUGQ5fiRrMC5rbDtWaDczc2B5aVhBVExQfXkhST4jRitfaDEjOFdrNXMoX1ZPLnU+YV1OOCJaWi5Tb3h5UDBxNW1RS19+Sk4vUzgwbDx7JT0sM2thN0hxRn1QIXkrbSYxczNWeHQpZCg/NkFTPGFHMjVU'@;
put 'cUJWN0o2UGJpSiMoVzhbMVBtNTJOOkprK0UuLyE9fjBHRTdXTXBpJiJEd1tGIVcwNlJURzdXc1A2cUZ7TXJ1fF03YCZwK1AwITF9JWxAKD5jIWxYNWtke3xIWTY5dVMiS3RUKDYheCg3W0dEejRTWFN1L3YqRXpGSFQpc2s8fX18IV98bSpqQz91Sl1TJEUzVmdPU0Ylb34odmpwVWVYflpOVGAs'@;
put 'VV1bV1N4eWI4dXk+OWBWKnJ8WXlzVmk2UElkXmFbaWtka2NaLmtAZFV2IipxdnZfTjlabD9fWSZdUzg1cX4hLjpDW2xDZTkjYUYzciRDeVdbdSFPMEFvb2E8O288fSokITIxI3FpVGdxYn09IVg8NWZQLkdlayl1TyNDLFkuYDkvRUtpa2xQOnFkUnRVSnt7IVJJZFZWNlN1REhKVCxaR2lxLFFe'@;
put 'ZWV2IjNHRlRMYi8oZ3krPHxETkJ9d1ZqcVg9IW8uZmIhZiluXyZQQ11Qa0R7KEVacUV2R0tTIUp5YmdKRUZFMz1SMCFOYiJWbmZeKFt6UDtpe2osNXdCZnxWQilKO3NQQHxSNjY1KDA6aCQwMmJQV0c2JmVbbmcsaDg4ZSFvZWE9dzlxblVOb2p3QjEmQn5QeiEqQDdlbnN5OERwU2N7MTpPSk06'@;
put 'PCVZJHA5TiM8I0cieGB6OD1QbkNtKTJXMitSInUzcnlQX05kUlglKztZJTBaMl9iRVUjZjZUSH1tWU91eDl2KFJ1biZEU3p4QjQ7RVpZZmRXVVM3cGU2U3trNWc/fXo7VFNNaUtdciFgTk1uNCt0QlNycXhvTXBPPnB6JnxheEpyWC9oeixZR1hET2tuUVVBZ3Z8Mi9PUlNFMjhTOSZzNiwsVnQ8'@;
put 'eD1TZikqVU95T2A3MStubTo1fE5CdShqZnZTZW57dk0/SXZzdnZ1S0Z4V01iakdBKGkuViNtLkJHMm1YZ3xbeDBmbXZodzk7MyVLR30rYk08VTohbl5hT1Y7NiUkNk0xME1DLH1GS3UhYD5uUigvIk9HTVJhUjZgZ05nSD9ZaTFTfXxqb0krciQuVVsxTGMlTF83Ny8hSmtPZkNmZHVOcD1FYEd4'@;
put 'OmEqKSoxVXVgQi5RblNieDplZCtjIlRjWCxZMy83Zmt8WTxiLCIzI3pudU8pfF1ZPmozMj5jM1N+Wzp6cVlLZjhyN1pZVCo2MDhRVGJOdS5XVjMzfWJVIWc1ajFYQiZWbDN3XnNubkZ6YzAwQDovdTlafD5vNi4qXU5efHk1KU4rWUF1KSQ2I0BzTVh9RyRjMmE7aG49S2tNUXMoakwjIzJVXi41'@;
put 'YzI9PnU6Y09IIUQyOGIuYGs2OSg1YTphfWB9OzFxbT5aVndrI1tdP3FVMSMiJHlSNGZEJHQmYys6TENgPjt5MlVddjlnLm0oKEZ9aGEpZTFSaXF9XVt3cEZSXmB6UUJDa3laLGF+XShydCJ2VlN6Qyh1JV5mVzwoXjB0bVt7PW17X11xLmRqc1k5ZnFiWlhjfHIqI0YpYShrSl1Ub1BgSjNodGkl'@;
put 'VCxsS2NWYmM6MEhHM09pLkxNT34mb1J4P0Y0antjRVhSZG5hZFNjOCtVO3okOGc6bn5EUHNZTCEmbkZUUCFIRUF7S0NeJX5HMlhDblVeRm9gJFFRO3FLWUhqdEhLUmNMOV80Z3R6ajY4ViN6dTZmQy9VbGBQPTxebmhoU0tAc0x3Qk97RmVERm1FMURNVldhQ1k/fVlBbTtsIVRWaytGVDs+QF54'@;
put 'N1AiO3RUMUBaZm5iUFFLI1o1Ki5vZEUvMGpXX25yOjMoOlhVZnFMaiRteE9JOj0qfXc4M0p+RmNXcC8oVShzRUV8LDZwZFNSRFhzcypvYj5vSmVBPFI1OS55Q1dgPGZCd1k6UkY3YzUpSzs6Nn5mLy5wP051WGViek83SUdxRi84KDgvLG5ROVA3Kl18cXhtVn0xSlB7Jlh+RnBlTGQwU2VyWCQ/'@;
put 'LFZkaXZnfiUrbWJXdzkiS0VENyg2bnk/PUBbIzBYTHk4QnheRz9CLlc4a1k+Y1p+QnFYQGkjSGE2aHo2fV9Ka3hKSVRtI0dJZEBCJnZLYUAiUXNgPndtUiQhSH44Z2JvR3IuTT1Ke2VPdFJlRWlgMVRoLz5XYzUrcjFaWG0jOXA+VH50JC4lWnRtZTA2NXcuJThVXmwvLDtVQCUvIiMlU1kiRX1L'@;
put 'L04xe3JgWCJ7U0JRQm15XkFWaCtUUThWcGN6TGxJXSlMdl01aCRSSjdhRlVPZl5Ial9LNCNFKH1ob2ZefEwweDs6Pzk+JVB1Mz9zbzIoQ1A1OWNnL3ZJQ2dCWCoyRnVsTD47KSwsKUd6eD5uUFFlLjZGV1pOQTAyQEJSZjI/b2k7bFksZ3swNHtaVjJLUjZzZitae15CN1lPSnhPLzg6KVZAVT1p'@;
put 'UjBzS0xtNzl2SDZTViNUcVYkIiU4OmVUez1mUF1RI2FvJX43e3BNN11sNkFzRDc9bn5nSXZqX3BqeWFKS2Z7RD4zb2FUMUc1NUdpdFtnLm9mbjE/YHNAT0BRKCg+ZWRdblkqU1ojP1pxYm5wbExgclhoU1lkWy4uWFJLM2o4Xjh8biNhdW5UOF9zektib0U2YzAwN29deXsyPDk9SDZaQCFZTU9r'@;
put 'Ok5vamk5Vj1QMSk/YzI8aG9kJD99K0dZUml3S3NqT3IhO3MsSXAveERGUDpVbCRVPGBIXSJ9RFpMVVlVIWJhW09TWztbWzQrLyxEQ0JmKD1iTjNZJXc4dmBVe0V1OF9JUG5GNSNXdWpQSVVZSFZ6aj5iPnF1SWlVX0U8bT9SeXA6UiVWWSRsRSY3T0dfPERTa2clWSFxYlk6KWJUKilSS19hYzRG'@;
put 'fFFlKWh5aVhETng3ZG59VyRxWV1oZnluX3NIemp3fUpefWpgO3I7NzprPDxHRX5GfV9tYSF6c1trSlMsWVomYFI+IixsXWojYmIoOXxebFlwZGt1ZmVLaWZTNiRob2k3cF1TXkhkZiR2WFMmfG5DSz9dfmFlT3VXJjlCI0toY3slOk8/fU8jP1JqfFF6JGx6R3Z6QDNaczc8QDBTcXJUUSk+LmMz'@;
put 'QG9dd0t7UTojOV5PKUhATVpCJH0yXjN5XShFfFBIZSNwdXVyYH52dnIiYXU3QTBLbD15UWhVYmVPZmpWME9aMihgeCYlV3B6LEdjODY+JVRybj1ANG1aazZeaU1oIUVjfURqWTNQQFhubjJlJUpmL1gqJTE5Z0Fme3Z0V0k+OT0hJVgmUEZsLFdxd09oRz9ZJXxHOC52IlkuSVBmN3kmPnFtKTFD'@;
put 'RU86TykvNH1kSm55KUxOdjAmWmRWYjY/PXhzLEU5dyh4WUNXREYia2JCJm5HS3JMXT17PG5dZFp6IldNKG1Pb1UyLmRtbXZAb1t6fkFROGdgQ2Y7ODR7PTdCUlZxOEJmej1tb2JvWEBdYFhpSDpxejpgdFAwIU1qfEtWZmZWVWpZNDspITRlMER7eERMVmhlYVohL1RSQiR8dip4NkZwMEN8OlVX'@;
put 'fndlakYvVG0wWTlEbX5HaTR2cTRRTiJnejIsREJjWHxqP2lEPks3aSNyL3Jea3JlP1tpNX07TCpkSWB3P1RqRV9DRFprNG8uZy8xdDAkJVYjOSpebmspK2gsPEYjPjw7WU1KOX14bSpvLClvJit4aCFZWEFRMU18RHY6WzZ8WkRQNUAyYC9MLmFrQ1dyZV1ALERbenE2bWd2WStYI01GaFtZPGVU'@;
put 'ekhudypudEFTdDRTS21DfX0sIkZhX0tfI2NydFZTMDQ/S2YlIXJHTFZjVipHeEUpNjZLbENZbSUhWCwkWCRMdlFyNnVTQFM9ciJXd3I2VUxYWFs2aig8OXVLbyl+WU1JSjUjeH4wbCZuWGJ8P2d0blVabFNJKjBtXjNRSTBAaC88TGIyIUFkR3MydmBCbnQ2KH5acTxXbmxkWS9tVTtTNUJmdkEl'@;
put 'XnZAJXpYIWBlZF0vdTsoYCp2dFpAdnwpTTJ6dWxzUG9bMHFhM3hNJmQhRUA9YVNjYzRxVFlWY1s/ZmJQN2IyO35EJCZ+fCM4Sz81ZnlHdFN5djckJT0xW19RclFpQGgkejE3WjU8Z1UhP2Q6Q2NJcDcvSnc+VVMoUnAmTUZiVDsiJXM9bHc0dUhrLi5QW1tpOXxoeyhBM04oXmQ0PyNHeylrTkdP'@;
put 'OTNxXkBjSXU8Y0tYWkBibWZuPDEuYD9odiJ2PTtRNWRqfC9kfURjU2N5cSxSeyYiPWVYXWZKK0xQUHM+UlZ6QHskYl5JWCpVKytzNV4jWVlNLmxkSSV1WFkzeHtsQG4+aXR9OCthc2F7NldmWzR4Ry5jKERfXjhwX305UEAmT24lTDpmSDxlVEVieDlidXtoR3pSOHtAIzFUUXl7Kmx8Z2BMc0tP'@;
put 'Nko9YnUhY1lZckVdR3JhOyU9ZjJsUztyR2x+dD1eLCpgbVtEL3w7KX5TZk9ebFp0TzJ+bGptLi9lN2NCPDZiMSZFTU5xQC88X3o6fENIbSlCMkVWdjJ8bkZIV24ydywsXTBSeHx5KVtIWmBqbEQofF0xSDtnd1VIVGFiT2VuU2ZtVD1eciZWTEI5cTksTGZXe0M6WTVEZHVZPXIkP2lkU1dWZFVF'@;
put 'LEB+fGJENFBoe3VtWXFCNj1acHpHZzQmTGVwOEdUTD8xMFtDayJaZjVpOER0RE5OSEw3RUpkPnJ6YDhhL2BrRCRPNVBzSlZxcFFXIVt8O3hgZV52PXsvWj10KnR1LGxuczUqN0lrMUlNa1NGVStOYFRRZlI/cWROVm5kaEheKG1hQyYoOCosW3cyVzJ+U1kkcDhVem0ifXk7L0xScXg4PWZBelBY'@;
put 'KG1RKH07ekxgM1NRJEBoIkhBd0QiNVRGL3hMbjNPOylaRXkhUzhHK28vT212Wjk9a2Ukbnt0Sjp1fDo7diEvfD1MKWprMy5EUzdWSnFDQT94TGl0e0QrSndXd2dWTXo2YFk6Nj9oeC58YSUoaGNGbmN2JHAkRmo2Pi5iajA8fik/YDpVIkpHKDkyNipOIV04WEoodCs3UngrSDt3fD9YI01QZ24i'@;
put 'ZVcwQkchQGA5eUlWRnR7RW9YIUh2fXA4X0ZOM3Y+JTJXZn50N1dMT0B3PF1VMCFASjJRbHMlUnQuPm5sKyVWclQ/OSk5VGYiJTpieUUmPS5bRyhGXV5lRitqbzd+NUUwXnNWakVjYElAP3RGKXhCND4rVGkuRzN8Wil4TTNbVVpbZDV7Q097S3s+KXJaZFFBN1NzX1MzZjlybWckbiJFcU16ITNM'@;
put 'RFM7NGwwcktKX0R5eDByUToxSGcwbCJpQlpMKipwOVNROUkzLmVrJDx8XUU+dHxoQ3wve1JpLFM8T3hbKn4vO0V7eCsoaH5afWpYVEdoSFVPOG90PXIkWzxtLl5vUllHTlR4MkQzYXA4PjZGQ2dqdn47N3heYGdVU2BjUEc2T1cpY1A4bSpWLll+ViErKjk7TlBDVGIjb2k9e2h6MitLeDBMWk9G'@;
put 'bG54R0gvP3NKYVhDPCVUQnBNTXkhVGgzMmNmfHU3NF5odU8/NXY9ZGtGKzxreCp6aWREQk4ybFBYcyk5REo5bE04NSsxYTxDaVkqfnBpWkIkQ0pKYS93U0dXK25NRXx2ZFpNWlRvPlNgeEQudyt2QGghU0pUKHIuZisvUjs6L2lKNUUvflJwcF9hRS4mX09SaSUyKmQyX0ZHMW9UZnspYU1vZVR1'@;
put 'S3pVJSljbXgiQjN7dzIyQHhiZlcxTnd1PSFaR0AvJW59Wn5QYko7MTNWV0J+d0lhK3tKN3B0TjxuU3hqVVtpQzFSajBSfCZUWn04RmFGUG05QTxRMVE5P3p5UHAieX5UPSh3QFdEUm0sRzRqdWdnRDRiczIyP0tCcUNCb0IuRXJAR0d2cjF+KitYTiwuSkplNV93czFJK0RTaTI/ZkhdaDFDSV86'@;
put 'ZHxhUTs9UXc4JGtxfD9+UkpORlEyTVNbZWdjUmU7JDo4InsqLHJ9dWgqMDFeXTQlS1NSMT1ZeDM2ant7NGZHUCxdPDpUQm9HejtROGRoOGFbNj07dFNvOm5HLikkOkZNdyx9I1pNIXBvXiRXU018SHM4cnMocTU4NzJ1ZENyQHkuZF8/VW95W20yQHF7Ol9DX296PUB0W3phfW1IWGpPOFNdamQh'@;
put 'N2JpYXQuYiJIWGp2OlNRb3pNK0RyQ0E8Om4qPDR9VGJGO259elZIWWZqLF5IXj01RiVtYz1zYyE9JCFGMz8hPGE1ZVY5YGN3Pk9xZzokTTJwMGdkPytvIUpCI3lMTExsWHxkNjU1cDlKfDM6LF82YUx7N2E/V20uekdVZGZ7M1skelIsKmJaR1cme2pMbnVVMDUqWjRJPjRncU1rZEMjKy8sUzJx'@;
put 'QThaUkdReTlmR0ByOC9CRTxtPFMzb1N1Q2BKQk5FXXZtJkZ1aG0+SzIlWnRRKCtlVVFLXzghQioxZHpnW3tOKzpiO0xPMkh+bnUuIUp1PVhrTT86PjhNI3BXUyovVTAsWn0+ZnxhYXQhKzM6WDYsL3J4P15xO0kwJDZsTVozIVtPfFQoIjBFcW82VEJkWVAxfSNafUEwazZvSVh5Sz01LDoiaX4j'@;
put 'Qn59bCZydShqIXFddkxvIUVNfD07QH5sPmAoYHY7cCNCWjJbV3JoaGl7T0IxR0tpPnY6SmRxeE5eKHBlI21DfStveWVfeTF7d3UjbjVXKDRYVm96K2g/XngrXVo3Y2hoWENmNUtwZzRuMytsXVc7TnZjVVlbd1N2eEx1Qi52bW1fd2M+PXE0elBvRGpuQkdZWnBKN3w8MkU0QG9fSD0kfXxHPmhU'@;
put 'dD1Rbmx6I0p4NXlQMH5XdTBbMHNiKUViaUk4azEsREFsckEkQCZ2WklbXTg4bDR6UU8jRmkxJjF2Py5SdVt2KlZIeGlPTkY0WiJudSgoKGNPS0Q3fixCV3dsdVh6cmkiN05NMUM4bipFPlVNK3YkX0A3XT53RHdMNUlPNnw5cCtJTGtsYGN6aGciUzZPTUQkfXc+S3FLc3FVTV0/VE00ZX1ze3FZ'@;
put 'XU44THZXNn1BWi4+IWtVKlgpIjsxZlZkP0pgeUdGNDlzPl11Y247aDpXImxfYHNFd1BuWmIzOShOaEk6SFpkT1laRDBzfks8ZlNhWnNbS3lGN2BTIitCcUlFXj94V0UvOlJBNStUKSQxLylrV09vL2U+XUc0UFVremkzSmF2NXNManJDTDdeZEd5MTY3STR2O1o+SzdCczs9VHFVX3oxRldNTTNM'@;
put 'MHtZKStgOl9nMkk/azNwMHs6LGIkTWhZcXVXUiQzalZ5KVg9M3lUIWlsVUVRcUYyUXZQPCFFTUl+MmFFNzFNXzRpaG9OIy9bbWBJdVVNQmc9XnNEJVkmW1JOU2FndWd9MHgwaldzW28kWzpWPSxUUm9jVi5rdXtAVkB4dXdQMFQqNzhpNGkwYHhEQSxpWUphQD5uelBfY01aeD1qbG8lK2tKYUIq'@;
put 'QCxAUX4xWDRDdnU8SmpaLDxlKERLIzNkW2FBTD1lVytvdkFKVWBUaDgxL2NzTU09PD51cnE0THpPTXE6RyE4JjJtbEBVJmB5e3RIVGgwP1p1PngqJSskdzx5bGcqeCF5WVNNdWVpeHpwdVtQejl2dUQ2VDw5RVolXnEzTF0lc3UrOTV8eHg1dllHVzJFWnM3e3ReTXFMNmc7akkka1hXckZtKUAu'@;
put 'WSEhMz18fm9SR0NnYTxIOEMxaVI2a3xQVix4VClbMyMzOUVDZGZeVkA2ITFpaVNtQVBII1Z0d21mSFZhQ3R5UmwjMDhgfSllekUwVkVwejBbPnReOSFMXWBsOkI2TUg7SUZpTCxYVDYpMzJAS1R9PGptYT9dMWFgbjJ7fHB7Nl5Zfklkam1WcTBwJVovdzBQTzEmcjQ+I31TYldyfEFtem0vJDMo'@;
put 'OHQ8QyxsdTRzZS9gU2olLnY7PSxwYmU8bCVvNExqJFpZTU1eQX5rVltPXX18Sl9mJUJueyw/dlBpU3ZQZUVjaT4xfndMI1I9L1pjUChHYztyXVpqY0MiSk5RdGNkO1BNTFNRcl88cy5UQyNFfitFRUAkbDE1OGViX0k8QF1FWlgqTUdzMmo0VWd1dEBXLjVDeTReTjdCVmorbGdIe1pfclRCRG9+'@;
put 'UC9sKHg1V1RCdUAiIS5HWixgIyxyTnQ+fE9tcTJDaiwvY2psM21OPHpTOmopbXpzIylZW2lgbTUiSl4jR3tYO0k7eSYyXn5PNGNgKHxXI0hMLkpRI0lya3tmL3J3X31xZktpOWt8Ly9fa0chOmoycVdCSTJxK2dINk1TdUVwVTtKR3FpMHdxXnQvaldRJnhlWFtHOXZVdlokb094Plt5PjBUPjtd'@;
put 'XyI+am9sKCtjXmR7OGFTdGpARW4oTjlnNEo7V00yckBYNF5pNXlOLGprYmtyXkNRIXkvaXpvOChPVFRPM1dVdER3KF0+dXFxZjdDZFNHZXIuT3M4NGtEa0lCayI4dm0qKjYrZFs+MiY2SGtUUmh0aStsflQmW1tyfVtvLyxJIW40TjNCIT1Ie0swNX1PTTs7Zl08fjk4MkcwLHpeO01lYDNuZTxE'@;
put 'ZDNjWHdKMHNHaSYzWmtPKz9IYWBJN1psJSY0I2MmUm9DPS9ie3pKZm5WM0YuNkJZY0lZJl16X3BfY29xOVNoQXY9NjJLRGFAVyVKPFN8VmZlWT9pRUI5cUVhOCErbH5vaFZ5PS5AQCNKKko0UnlMYiZpUkJoQSssRz50dFlIXiREIXBCKTpxV3guUEduY0dpeW5NSmpuZl5xQV1DbFl1T2FwdUUu'@;
put 'SkV3WWRrL0NCMDYkSj9OVV5YdCNjXkM9TlAqfXptVG9bRnhGZHUhV3pfPWpjU3FxSjw8cUZjZFg3V3p3a1RdZEJXfGpEVnAqXn5yS1hFKFFiLjs+JjIwJHxvY1VQOHlSWn5RNltwfn5SQWtob09sPVJWblhUTWVMWCgwN0xmc3VrNHt6Lnplcj9uP0hqWHRjTnJiK0BHbE4xVXFtMztCXV9COzwz'@;
put 'P3RLfEM9RWthamxoM11TYGNJbkQzW35nSTw9WH1tZDVHI25HNChkejBpNjVEbWlwSH4/cVpZa2FCOj1BNiopXUllR05FQjVjOmlSeTZLVzxMYVthPXNHcC4qVHYuZjpjbXR0Vixde0cvPHFkP0UhXUNPPnhCUnY/eUR3ajYsPWJQOGRPfSx3cDtbcChSdllwW1FCaFpNZyhIL34sTixbLmUpOj9H'@;
put 'KDFzPH5hNWNmYiJ4SWNFfmgmVjRZa282PmB6K0piIWE7VXJ5eXQ+RnNuN3lidndhYiM2NUdibj5ULHRIKkRtPjQyPW9vZVIxVCY1Q0xzRTE2ckM9P1hOfk9TK3JQdndvNnp9Nit8ZHtfQ1c6TShDRFRqV30pYiNIcEx8Yk1deWNTWipoaUBHNCRJT0R9OV1xUFB5RDlNVzkjNU9KMGxTXjV0STho'@;
put 'Yj5jSzNYMzpCR1AzY3JHPlIuKVFEcW9+di9XN21xK3RNOiomMDlKQigmVzFFeCkuV0BFISxMe05VMHdwWThgL3gzeUhiI2clMV5mRm9eX2RKYWV1JWw/NW9YRHs0Nz5mVDp9bU0jSkFQMVc7WTx9ZXFFPltVYFZ4I25EaEhIRF5tOn5me1lVIWclRntnL3gkfX1pQjJGQCFPL2pAcGl3NyhRXj0p'@;
put 'YixqIypwa2dwaUFab0k8NSIjbEhocyNXb1hnXmxVTWY4end2fXt4VHNiKT4uJXRoVF0/P0QwJlhyfisqcFs2YHg/P2FSbXJJKk5GdiJZJlVzdl44U2VlayNSc3VjR0s9ZjJ1YkQhZV5tQnBLVm87bmo/JGMqTCw8K2ZQTlV7THVXJit9dzpRdHgvWVhMUiwyLHQpSnZeazdIVU8zT1g5UEN0NCZ+'@;
put 'Ri4vKkNDTHN3JVNQTUIoKDR0bExvdTZtQ3VOc1YpfVlaV1N9ZUhnVFhAKF9NUmFlVEA2MHFaflRCXV9FKiVxa3Y9cjxMITFeb2RKJXs7RS8rKmpDfnlaZEhRaTdgW3JZVT1HcD9YRXkmTVtvfjRFeFs+bFchIkhLZGcwdGxkQ116Wy5UMmZZN2s5aHp8SmQmW2JRLF5ZIU1ga1Q/XXlrM2heSF57'@;
put 'TXA4WF91VGBvb3ovfVp9ai5ueHw9YHo4ITVWUVtiQVoxMHY8bkFyNTp1QDpSQjs2cGQyL14oMk0iZXBuWXpCKDw8VnZJLyZ0eTVyVXpUWlBjZ3xtPXVtYzQ0cSpZWXVNUVltIkxeK3hQUiIpdU9tdmldLDF6PndMOEYyMzBFQFJbPkFqRU4zXSh6MH1pcFZeYD9dcl9YKEN5MDlRIzE9QH1ucV9M'@;
put 'LmM8N2d6cFdbPmhQaTo0Wz9uejxFXiVhQ1ZDMW86ZXZLbz1vVng9bFdBU18od252TitdXT5ee09UQ0tCVTIwaUtxYS9ZN3xjImojImEkJV56PHYxWyVvT2soakE0WjRHdF9vL2dnYU8uJVJ1ZiYkVk4hTFZNO25SK2B9XnAwXzVmb3VLdiN1L24uWWdsbGRXWmdFPlRpU2o+SlNacERrSTxQRWk3'@;
put 'fXU4VkZnQlF9Xn5mWm1KN2hkdDx1Ozd2NERiZzEyckxyRVEuclY6UTw3a1EkbTNtQXhVMUouQFUrSUJeMChkOTo0eVs1SHYlfjNjW3pJOCM1M0doNVt6PkRGKzk3VHx4SzpiL2Y3ZkVNWWkqd0UuV1pRNiZrbytfKHFaMWFqS0s2cTUyWVArV1NUUilMYSE3NmJPUHNTeiQrU1RVNT5VPil6LEw8'@;
put 'dmpiRlZZeGliMHx+JT4yYnhKb1IrTio7Pl0ibkVoQ3ZCej1fQWc5bTJ1T2d4KHdHRk9ienUwTmlTTlRDQ0xEeGUiY2dTQD9vO2M4TlY9MUM6ZUB1YnFvTDQieyZeKmx5X0EkPkMpNSslYmxyP2lyaExAaTNzRCx7WG5jK29Sbm8oNll7Z2A5XSRWMlt9cF1tRlFfajRIMmU2JCUhdlBaPF1ORENz'@;
put 'TzgxIk8+UUhMYUQqZTEmKiIoPWRUUkFkUE40eCFpP11XRkgiOEc0ND8/Qng3RC4oOjh9fHx4fW8xSSQyK0JUUW1UKzpTdzcjQlkuRkNiPFEhdXkoYlF0Uk9gInhjQGlyUUZvT0hNeTIydnI0SHldQX5qdT1eRjp5RWt0USxrfTBafE18QSN4TGZtTGVeRXxlS0RTd3VyW2pXUixsL01PV2pOOzpY'@;
put 'QmhbQms7ajVWS2ksRk5KLnIoR0JCYHNYaGJjJFdTTSR6LDhKbzZ5bnZpITouc0d3Lzs4MXVEVFpyRER0aiNTL204TVg2bzRRcTQoNWhdNnthVmxkLFE0SkZmZEo2VGNVZyp0dlJ3dltaUmpoQUJ9PFhTY0JrKV8kWml+d2gkQEBwPEUpNihDTnVQbjFVJWhKbWxjM0lCL004eUojYWx0el8icjNz'@;
put 'djVMI3g3YmVyLk82dDBLRyRWe0JSY1lfalgjRGs/IUssWX5vNGdjazFJKTpyaldme0dOTksuWTpSd08wKFpWR2V4ZSFQUlRQMSE7O3pMb1UiMVhmd141Sj8xdHZBbUtLWHNIall9ekp2LmBTaTlzbz9MN1N4dTdJK080cSZxbl40ZF1bUz9Malh0Y1I2RVtiQmBMSmZ6TmAhISVVeXxbPXNFeFNT'@;
put 'Y1Q6djJEZl1yIypVJDNqIi4wNGhAIlVXJk58SkM0cHBTYHwueUp4PnBBYFN8RXxJJWFYYTIuNzU6aSU5bX1kaWE2bk9RfVBibHVaZXRIaV44OFNRdkIhPyhhS2liPU5PT11Ee0VhJSZPekVkbklKaEczTHNGUj5XaCxZY0djZG15MDQ0RmgsUEpFfjxhR2BQcHI9OEhWYmpsQFcmXmM3M0NxRF9o'@;
put 'OX5fKTw5KiVZa3FtVCYyK3xbI0BOZ0kzfFMjfTpTW1l8UllObyN6XyUsWihtfTMvIl4oez11ejNKUlRXVDoxTWpSZXZiWSgxUlliNGQ0Wm8xY3JoJEVpcXhuJiorUVc3aFElY2h3I3ghYVpvKV9XekNOfDgsX1pVNDA0dCp8T3hKd2k3MzRrMHlzYGZwW3s6Q3o7QHhKIjd+OSJuIjV1JE9vL1hx'@;
put 'big9fGt3fWJ0JE1HIW09W1RBUyFATUcjRWtLZHNfTiQxQTllNl5YKEg0R2xvbXVxNiM1OSxQeXk9Vz09OzZFYjM1SEE2aFQ2JHRhWX5jKi8vUktTKWVbNnshPG9rQis8KkdoKyZDPkc4Z0I4YG1fcyEiKTM/ayVeMiRXS0RFIWkuME5BallxJTEze3w7KmxmKFl6SHtSdCNXYEBhJWk9TG9uMWNh'@;
put 'QWgjaV9UNWxzIUl8KEQsQlcmZkpbXTo2fWdOP2FkJl1fSGt7T0VabjRFbCU1PzVpQDMxbyNqUGtgQEk0UlZfX0gvbWxzakVTfmFTJnFKR2BRPztldnMhRk1POUx6VHw7cyZSRCwjS1NwJXxXSHEwYmsvY0piSVV8WERpOmtnSjFEWFNROGlIS3o+N0NNTV9keG1JIVleKUZ0U3hGSSNJWFZlIVgr'@;
put 'Ql1pdko3aX5haiNjZ2l6Ym1LKEIvNWoiU2AsSThHUVZgU1RDNi5hYkxQXmJ3TEwpLDpSYEV6cGpSWSR3I0hsPjR6UndKQkNXOyY5JSIkUCRwYiMzY2c4KXB8MFRKTkA3RGRoSDlbTTxwOnlAWHhtTkFiNys2K1tRTTF0fjJ7fiovJT04ImBUX1pxWUtHb3AkOzNpPzBwMjNgPSExZ2cqVFFhMGJY'@;
put 'bWwoPlk6eHRdN0tre0ZaPzZxdUIjUmhpKWBYbWY4KCRoOnx6QmZLU1s/T2ppVXNvWVopYU8vTHBPUDxgZXI3OUl0RzJeLD0rdE5HN1hQMCFSOGVUaEx4OGtqYCtbelJ+PDhCey8xQ2hCa10wVXFUaVchXzAla3FtVzxYbVpAUjZMOk07ZGY9V2VOXzVndS5mZ014KCglQWJgVUM3OGZeQzIrMSFV'@;
put 'OnB+N19eT2U+JUNFTjNaNkNPWz46M0dyQ2s7QypXR05VNV5nV2xPZ3s0aT5iNVt2QSlINlRqejs7SlpfTDZjYEtnXjtXTTAqK0syVzBBU2l8bj1FdE1xWz90L2V7fXB5L0k5fmxpX2FFd0BSRH1YQV0vY3lzfDwoMWw7Tj8sWEZ7dCxrKSZnMVZKWykvdEBvSV1FWkI1LmMpcnZkYnJsL0Z3RkQ6'@;
put 'JHAid0wlb2lAbHNpaH5gOFo7SnB2LiVOfXxxOzlLbFF8ckJqJnxsSCplclA9Y29dKyY+YTxbL3AhZFguMXVXflBmYkwreWIhaU9zNGo5Ln08RTBKK0A9YWJCfSYreVdJSFNxayJJd3ZbLCw7ZnQxN1Q+LlReS0RLfn1WdGpZd2hLe3puPjwufSFSOyRMTTllUmlUanlQJjAkKXEvcCVOKngoSDBV'@;
put 'cEFCfG5XTj9RMkdjT3hnMEtuejFgJVchVSNnYnBzNUs1W2JsaixEYjdANEAxRjVLRmNkJTh9L2tFSmgoc3A0e3xTJH0rN31kXjU4UzMuTWF5TGtuLF97Q3kzQ01peDJ8Ol9eYHE+V05VQn5IS3gwP3VGXnAjUitvKldrJGx4Q3NqTytUIWxfaWR8dlYwK1VDSXtrTV57R21XLiZRTS96KWFzWXgl'@;
put 'ak4qV3c/LF4zWzIsOGx+Vjk6UXt4NSh8X09YMXQ2dkR7Ijl8bjRbdnlXaUQ2VUVEU2FUNzgzVEA4Oj1PNk5EVUB0Vm14SEpafk9QTCNtUzEvLCJHQEpSJi40UEJ4aEB2Z0RUZTxSOWsyLGRZYDt7Yy4jJG1JT0cmPzdbISR6MzY7UT9sJm01WUkhcU80MEd+VTtpLnkkPk1dO2pOJUYqXUEhXXx7'@;
put 'I3c8fG9rdz16OWwzSmVZPzVldzV7emJ4dERkRE1vMGtkW3BJRG02flIrVy9jd1BZP35kbWlXKDVhPXsiQ2VWNHsxQWdDUylvSWUyITI+TipAZWRHQFB+Lkt6e2kyVDlWQjZIKzRhZSYoSz1qUXdDeXh8V1tZaHNRY3BULj4hYj1QeD91PE1LbGB0ODkkSG0sKzs+a0N8LzhJe0hvIXpie0AqW19R'@;
put 'ZnkhOUI0bGUyPVQjWC5LbipvY2Z8SExaaktZR0FqZzYvbWNUVzJbUH40QW1eRjg/S1U4Njc4ekwxOWAoNjZCYkVMcTY4Vz1WNl5tekxVNVR6KEsoPDRJPzYxUVIhOWU2UkZiXypQTCRdaDRPfXA9S3tDR2NZe0J9KTZjdEJUSENCNVUqPXdYJmhMcHxgNHx1c0hXb08iPStrSzt0b2htWjUkT2g1'@;
put 'PDRnQjRqbUtxbDhUOjdhbW1TPXYzISxKP1JjTF5kdjVuN0s/fmdlISQuZ2lXSHBnel1XZStHMkBuWThMYm4kc086bj1uKkM5ailyZilRNypFbEY+YH5oPkNWenRgQVFpZVh+TmNnIys+ITJoUmMjYElKTygsWFY6LFFEIjA6Iiw1WWRPYGo5d181ayojIzskaGVzPlBNWWk+dkZDJkc6YlBHPVdB'@;
put 'NUJTUjU5TShmamM7V1svdHl3O2ZCV3codCV+LmZoM35yeXkjJiFneCkpQTQ6T0sqWzRuUkZoPU4pZXU5WVFsQmk6aCxYTkRhLkZRXmcpMV5DfF9QTzkzb2E9RmNaJFdxWyMlMCkkO0t1Zl8md08sQEJ4cTI+Q3BqP1kjclR0a1AkLkBqdFtCNiNwbHlSfHxhW25XbDlPbzcoZkRhLyM7ZU5gOVZQ'@;
put 'VlNxbSFvT0A4TE4lJXg7Pj1wXiF8NnhtQDJGZjRsRzwhWkE8ZXB6byQoOHR2WWRBcj4xJE5ibD93Sz1DI0VIcDp2LGhaXylWUT1pfXdGRH4ia2BNIy5mRmhqYH5JLj0sTFJ7T3VZJGtWZ3xgMUgxaSkmfk88OyZtTCEjY1lZeSZGXmp0bjpnRnpSKzFNU1JYJjAsX3NtcSxZcjZgV09tX1smYXxr'@;
put 'alNWVyNzWFVkNWg7cUl1Q1JEcDwsV2NKc2RrZlBFNE9BMUBEdmhkaylzb0w0YV9ZWnlIM2hCXTlYdDc3ZlhRek5HP3AzOHkramBfTG91elNWJSxoeUBCWjpUZkxDVFVIfGFUN2d1T3A3MDZNYGYmSFRYXXhVMF5oMmtkdUowRUhFLEZHYjtUL2xmPiFSclQ3N3huQCYiTlFrMGthX2NzVCxoW0Iz'@;
put 'N01YRDYraXAuZDdNNmc+MGBYTyR5Uyo7eXhOcE82fCRBfkhxU3xhZFImUXQ/RHhrZkE8clsiRj0sTXdNRWZHZVBdOHZMWERYKiJlcFhAPE12TXJsPCg0bH13Ul4/R1lvKn1KcyFNY3l4YT5fKlVGRGNlIUJSWmk1Ujl0VEN8cCt4a0xzIVEhJUUiVEphZEk0ImI2dEpWLyRNYDpeUy9vPztgWipv'@;
put 'R0ZDaSxWeC4hVUBuVkIjMG1mYUdAJXFsWEtsdG96PVdwbl1MMWM/a2I5Zz4uSD0sLzBGPGU6NkFoPXFFO2RXcFtBKm9IIS9vTktoI35DYmtTdEV7RCs/cGhTelRTTlcxRXQ2cVRpb1JHLF08Xy9bfiZNLkh6MSs0en4+eW5UYXQ1IUJMe2lfe008dH5qal1NczVgX213KGRzenwjd1pMM3duNGpO'@;
put 'NWNyVks5JUJUYFlpMF9HeyxfU31jYmEvRkxNW1EzdFgsd1ArP2xxPG13PWtmflFBV0dHbF5GJUVTQWRnVXgoLkRqbDwhPEhQQC99eVIhcHpYeG9HQnkkWWVPXyVaSUwlRldQbDVyMn1jNEZbe2NCK3dJSF8vZ1pqO3JaWlc+TTZuR3VWMTA4VSsycT9LIz1CdSFrL251T2kpMHwiaCNAUW9XKUdI'@;
put 'Nz03I2VWbltHflNTRFFkNWx2ZU1xP2ImVCF9I1JPcF58eE9sbS8pcFE1TjQ5UjN+YiF8d0dMUyE8MHdpajJENXsibkNEZFE2VVBaPzxvIkhNNS5hIzJYP35ZMWpsNE59X2kmUE5Vc2ZEX0IuTEExX0FCWGI0SEdOUTRsL2QwRnBAe2BHNzs+RCFbYmsjSGVEZFlfPTVuVXtoRSglZT4sOEh0OzRw'@;
put 'aDpALihbUyFoVnRHbD9hcUxkR0JNRl5+bGRrYjJ7PndHfTlSdHdraV19biZJckRoPHRkLGtUOkIvWkw7OCNFXkx0YCZdN1ZGISJVVmJzXXNDSHllc3Z9Q3RqaiMlaTxZOzN0SytoYjEwKUljV0tIOU4rXSZ9QitwbCw3My5neTBiJnFtcXd0ZDtoTlluVmxpQjAoZ2JZWUF2MUhGIV5eZ2lLUD1D'@;
put 'ezxmR1Y8YzRwVHFMU1EheWVRV091Tkk1MSozJUAqM2NrNHB3Wk8lTmVYVntUWHNVI3p2ZlFqbDlaeGlJLDxNV1hYIjFCRytMeWluKjNIb0JfKDgxaixgdj5VTyF2aHtpYGU6QzBUPmM3dGg0V0ZpY1NjS09YWUxmL1c2amssR3NMLmduQzZTRSF6SkwvKHUiNGs7Wkh6Sj9bQEx0UjxGajFnaj1N'@;
put 'VT01e08mMWg1YSU+MFdyYUN1bDpQNmpMZ3U8ciwxO0s+VzI/Zj5SZGEhIVNoIUZwPl8oRWVCZXt0TjI3fColXmJEZ0o2Inp5aWlyTVNLOE1kZzI8P1JEfD8odk08I2s7TGhnVTs/LF9HQGc6dyNRW1ZuKmRFeXhSOkZzK0x6SCk2UU1gWzVaaXB8VllxdmpUfWw5Kmk7YFhNTz58Y01WamolbiMh'@;
put 'NktUYkJ5b3osQlYpI1d1XmpCMDBzZ3pOV3V5bSJdOXo8bkpVNDp1digsRF5XMEpAOjR5TEIvUVtxLyIzNjFAIShncT1Ib0ZjL3VnZU94SSw+S05lSV43N0ExeS5QMVdgezJJbVUzc05NaCZXfD1kM2NMVjdJV2VpOE9bWVFyYTokPS9VQEJXU2ZadTRGOEFMUH1Cc1gqNkxVaSlOcWVTMV1ITC5D'@;
put 'QDRWO0p+N31EWnp7flExMlNFIVZJUmZ8LEZvdjAjYktyMDdhbUojNiRMOFpuOXV2bV9tP2MiOnEyKyN3SDMjdlViMikyTHlub1BPP0ZIVTJJXnR9KVZEdl1uS0F8QS5uZitHKnMiNzZRKTA/cmErMG5sPVAhcG5ecT1SN1ViUVklTzF8dzFfNkQ7eiJPJXMmNmtJdEdSaWdpcTRkL31iOCo2O35U'@;
put 'bFBWe1BmfjZ5X0A6Xik6dih2IipXM09gdFVffC9+QVdAN0ovLmB8fS5+UklGJT9BW2BRdDZoY1tkSzkiMzVmNDplaF9vdG1jRHUhKVJPNWlqSDpXY2w7KXdqIlRPeWJOTkY6bSwzP2plS0I7KnZzaT93VD95K2k3RWFPZzFndkduUGI5O186OSpbV0JiLlJnLixxRlNKSkU7Skc9eDU5Si5kKktC'@;
put 'OCUwZmUpYj5WflVaTjA1KVZuYj97aktxTV5GeFp8PjtoSlRkOmldK0lOJjQsdU89M287a0R7QjdabW9NM1ZwRl1waEAoLCxvYUwxekRjSW88QCRILG88dlJ6KDdFQis3e1JwSUJxX3dndmw5bUd7aEUiYFJreDxadHJCbyNyMzNlYS5rPSFqOmFJX3AkNEhNKH5pLDJ4aCJjM0NaZSNheSs1R0E4'@;
put 'cDolRnhYVXwzY1YuMHdpQDpPdW9halRtMnEifipSMnJyNyF6OnQuQyVtQUNJMCRaTCp2X3omZXQpUzE2cV5BK2ducSZQMW5uI0tRKUNCJWQ6TVYwayFVazk6fjcieG1xR1tHUUg3aEpgLyhOfjttPUJaSHw8ZTZWfmN5K19nL105c2k1LCwoLmJjL3sxcTZtVHZARVJWTGt5KUFeWWUvNU8yL2R6'@;
put 'IzRKPSkhdXI4QWdsZjtZJXNPKldSQE1KQ0JyVCYuIj80X3cvYTNEYDF9ZSNNLys2dGBXVig9SW5qdH4wbGdYPUsranlffEVXI2JiciRUKG53XWJKVisrUyEzSjVLTVQqbkRnSHgxbV1lITVHY10qbFBJKCYhVUZpXj4wKzooTV9nNjtKUmNZY3xDZC5KS2FrREA3PU5tQEMpU3tJL3FsSWBzbzw1'@;
put 'P3VHRkF+P0QzUERhNnhiN2d1T3BZTlc6L001QF5rVnh+V0YsI3UzbklCdC5UOT1fMz5fYFFPS0kpcE85PmAreEZSMHAzWSU8SH1SJD8yW0Qkdz8qLkl3NERSc2JYL35sLix8U2FWP2ElOSFfcDBObGRgWWFFSUcsXmdFNm5AcE1GcS5rYTEyWkJRbSlidUJaU1VbTkFbbCtDdDUvcWZVYik8ISNf'@;
put 'RXA/OHN4Iy9dRiVzUjtdfFdhWEFLd2xKK0wuOUxAaXdnTSMqfWp0Vn1LPTBzfTpgYXg8V3V9fCk6NiRPJlBfQ0lRJjhFYGV4ckBaLFN7WiQzVyMyLCIxN3tpanxmYXJMczElN35TMVhnX21IWH12JDtEJjJnWjdMMEpzTjJOIWJyaVhPPEQ4eiR4Vl5GIz40OyxYJHpyeUhNSTU1ITlWU2J9Xi5y'@;
put 'UzEpSlclTGV6XXYxLnkrWmNBWDgifU9lOU0iaFJgfUVvbD9AU0J4bkJSSSJ1U1F4VCg5ZF4/cUl7OmY+TTU5aCROcDJlZ3NDJnU1QCtEbUhpaGMkfTYze1cldml3OXF1LztDbUBbfjNeO0AhLGZwTnZKPDFWXW9yaHpeLDRFeGNzVnthIjkkV3tCTSQ9dXFIPVlEOWEoJjA1elR+eD9gLF5afDMu'@;
put 'IlN1PzxSMEl4P2QxJEBNNTt6UzQrMWJpNUglIl1xckdaUFtScGJNdzBkezV6UEclbWtoQFZDekxIdSVve2U/aXN7dkoyZ14hfTc7aXR7XihZXjd1c3d0bCZ4b0lOTDovSG5wVSIuYEF4L0NFVUdpVG1IWUA0NTxiZF83KHpde2BWc2RGRGBxbWZgdDBMRiZqPlk/Jk1FUW11WSglMTg+VWVSPVZe'@;
put 'eTQmKWw5Nn1pSytWWz5vbW12bjt6WzpRWEpkXXIkPiwsfSxhRFBqTyFLY0FCN1VAPUladXh4d0JAJXN3LmxzelNESnZbIWYwUVY4QGNpbUBzdzNGSyQ4ZV0lZCQ0ITRfclNzVWUiKjk4PTZNN1BPPE07aHl1dTExeFQidEIrL01FPDpqOitIbjFtSiE3LzAhT3pfbl9Ja2MsPEljMixHUzFhK3I6'@;
put 'aGtOSTZRZ1Frb1F0Vl8kZlltWkJbXXg0aFpzNVJfVWlpNFQ8PmpVc3dDd2M5MyZYfWl1I3RiQiYuUXwwa34/VkcxampvZi4vU0R5K0gweipfN1IyKHNoJklAb3NLbilANX5aVDA4QiZgWVdpJDNafjJhUSsieG5tY0tLfF5fPmBIRWI0MnF6dCVsdEJ0WEpLPzRrJUx1Y1ltOHkkTD46cVg6NW1t'@;
put 'W18kemhuIVRyJHk9NWI3XUY5YihRTX09JnFsPkZ2VUhCZGdTUVo6UjlGSmhuQ2IkLFE3K31FX3haSVhudmJOJWhAQm5DKn5tfmZgU196M1dLaWAqPW97di5KTzI/RWlAbVQ6PGklQ2BtV1gzZX1jfE0xMFYqRD85Im1UKXBXQXQmV096KTB9a1FwalJAZ30vOkQ5dGN0eGdyW09nY35BRFh9bD4p'@;
put 'fmxjVERPS1l0SUdjWCRzMG1CWilJOUEmUTJbbGhnPj1FbWFXWCRLLGZRLmdQVTYvbTVIdXNiVTtLPms1MGN3Nj1hQFs0c01ZfFd7NU1Fci9raGk5KjcsZzNfPX1KKjdLYCQ4UExvYjsrdHIhW0lkPy5FeVlZU3VTZFhJcnNqPnYyZ318clhsUV5YI1IxXXgvaC51UDRjSG1Mb0koMW0wV012Jixs'@;
put 'WHYrNXpmMn1MbH46Y0VmRU16cVs6bE4pNS9NLCp+PilxS2VaUEg0NCxgUG96SmtfYXlEWigqIjZQe1FrS0F1fnRqXTVzW1R1YGh+VyI0OSF2bjhWeUUlMVIwdyMialJ8ZzdHWyJ0Ojg+Yy8jNE8xVml6MSZiKVBAL2MmXmojNk9STnVsKjd8M20pQnYpY3NAKzNaPzZlOHwmT0kkYENjQmcycVtG'@;
put 'bTxdXzFgQmduLFVKVkBmT3NnVGU5JWM7SXRtaVpfTUBEXXkhTSZFYUReVkxnSyVEMFU7XVcuaFJdNW5YIStlSX1JbnxEMVNLNzBzYkRUKSVaflApLykoK2Q0NnlTdT9teEl4UnZlaTE0UV4wRS9lUip6VEFNM3JnUypoPnc2d1pJIlEmc2ddent8TW5ZZ0VMZG48cUZzWzxDWmBZKTM6TXZ0T1Ux'@;
put 'UU17LjB3Jip9XlB1TGI/TGVsLGlKQkZpW3h7JCIyKS9sIXsycj5XNiEvfEJuSl83Tzs+ajAyM3s/Tzk9REtQSkIsKm5sTkZSPCRmN2UyPTQpOGcyO2d5TkUvQF1reXlwYmdUMlJtdFZ1VXNQNF5ZUFEvVGxFa0UzZWZZSyZ1Yk5PVXluUkUsX25fUDIoS0FMYkN+NyhwP3YibmRraSRjZHJfRGFX'@;
put 'bFo0VGlsODN5Vk5ValIza3xoRXpPPn1AbipjfE02LyIxO3cqdT9pcV5xdiozMjhJTyJlU21RbiZzclF2ZC4jKnlMR3R2YilxMD5yKUNiQmxwUDhKSChfPF1ZWDJ+U0ZQS0tzOTUoUThTOyw8L3hgZ2xVdnxvSWgoTG5FKlpjQCgmIVlSWkwyTz89XSwsPT5QTXROJDIkWHFGQUlBKCU2Qlg0YHVk'@;
put 'SnB3XUd4OCFzR0hLPjpdamBbb3B9Zn1LWjgzQkhjc2AiPisyNH1EajBUXkJfPE9AakxdKiY1JE0pKGR+XWxRVV9wVm1fUDdYY2ZhYUJ9aEVPbyhyWFVjKW9He0shJmxVV3d+L1hmN2A0JClJZUJMPF1HeURkTVoobWN6dFJgOCwjI3o7SSw3d1R9K01JVHttdDpvJU49Vi86ZzY5UHIxWyQ8OT04'@;
put 'JFFIPGA0QHcvbXh1NUNAQmwlan5wfkJAViNNUTVeKHZmbXE2Olh8THVTXVlPP0glInNtX1RxYEFaQ1J6czgwQF41Ylpvc0NbPDxKLHcoZS5dXzJQTHNxNDo4T1BzbGFoOkcyWGFxME1CPzF9SGZKQX1leHYmWF0kOGlkS28rbHFLLFcrd2J+JjVOKCV9c2BkQSRUbUdyNXdVcndgcCM0ODc8IUF3'@;
put 'VCxEWkFfW2YidDVmdXRdYVlOdGY/R11rWE9BOGZFVVBPIVlwfiEqdWZLX0p1UjUyfXNjej1mbXU+djBycDJQSz0kdTB9Qk92JU14RmVDdmElbEdtXVVBMU1MM35zTTVIJkR+Z0tqXWxqTTdjUyVOcyZnNDklWG4/VSlzTHFEc3JUTCxeLk4uSFpBI1FDIkdXUTpbYmgsQlV6Wi9VZUk6eytCNSF3'@;
put 'M11JI0JqeH48MTdnZVVQbHAyMUE6YWRyRCFiUGJuIUo0T05aNkMhUl8lWUp3a3I0Q2E8SkVFLGZKamJuSltTOC9XTVhpLHxnTW4mSG8/enxyKiJFWHhFM3c5dTA6OykuXmxUb2hwUSxLW300NkRzZl02Njo8JDQ1V0J0PEVMOnpYYHtUUj49Rlh4YV1GMGhENzJDM3I+UDU+SnlEakVPaXQrNiRY'@;
put 'dypYYkN5SEp5MmlCW2IjTCZCX31dR1t7fiohPiUvS3slWDxLWFE4O1hwZW4xVHBvN3wvMEtOPCNadilpKkA9QCEjQjpadVVwVEklPnUoezg6PmF3XU0wbkwzaFY7cTc1JDlBW1tLUzEufSpSNyNUdXY5Pk81WkludUN1VGUrb01RTyJROWdudmQmdy8vN114YTpwfT9YM3YmWFRtNlkoKnxAYHoq'@;
put 'UkZSfUMuWDdCZ204S1lEJk1kKnBYVGJPRXNWNnVhazswNSplY1B8fkNFKHN1eHB3cE1zZXd7RkZlPiZldCN8ei9YSikjIVk/SDZpPiRWLypeenpOS0oxdHpMI0huLj9RNnNqPiUmNyojKGB7cWJpZnt9PTt3fH1yez5YQ3pqdXR2O0tFczcyRnQwXjZ1PEo+UkVLd1shUik9WTVlOzh0T2NNVCtp'@;
put 'TFI1R2AhcCt6N2UwYzU7dkYyKzR3KlV3KHBXNipeY0YsV0xffmguNWM+eGxDPl1qdUh+O289WnddNVZ7aHszekxkQztjZHp3dmN9cX1tV0c0fClrYGNWeldDb00oOWB3T0haen4zQyZeej9ga1I7bmtAaD1oKWdJVT1hLld1YH1+QjU/e1NwYiU3KVA0TUhgUTZiYDVZdm17cCZ2bWUlX29DOXcw'@;
put 'a3Q4fEtuVSgwTkF1U3BuLExqPVkyTE56fFA9XzpYeSFOdCxweFEkND4+RWoxbykiMmNhKWxkXVN3fXEwNnt3STUsbz83Q3lzOFpmaXpiWnY6KEckXS5gdCpeWTx7anhEJXpKKTBZKkFgKm5jdk9EN091MDxGY0twczNrQkhzPF9UM3pIKlFzbnFYSTxNL1dQYE1GYislI3xlXiRORnhPQFswXnw0'@;
put 'K09tNHlqe0pAZlkzOVhfLypSODpscyZWYVdkKj1fP2I6QjFGT3c7QnZrViNRMCghMDJ6KHVjKEYqOGpCYWxHUUVCdl8mViptRDFXRGxNc01fT291fH4sXUFpQy40ajhhKkVAajVkdVlNezQ3ezk4VU55PFVrPk5SKVdXbHtlc2VFWHpUWTB3bEpLN3Ihc11IWElFaFVXQjt1ZV1uO0x+Nz18VHdC'@;
put 'QnZNSSM+JHkreGgzZzNAZzI0Kzw7ZWUjKV05UiRbJFtjd1JBYztYUk1EPWptVkd3dyE7bT1aUmRxXTtneitUMWA8K0YhT2NWVDVgdWdKVn5QW204Q1ssaSliPGpFbGlXIWooUD4oKHdme1BsV0hAXXFTUlJWe3pHYmA/NTw7PSQ5c01Teyw8dSwoVmt7MFFRUXMwSyRbSCJ5KyJ3ZmZKUXNKUEVu'@;
put 'V0pYdzZTIUVSdHsmJVAkS2tQTyhGb1ZFbSF9L3hRO1A6VVY6Y0VOZCxmZWtTdCNDMGBASj9TNCp9bF9nKVo3X3Q6fmM5Mio3K1ZBUy5TMkRFN2E3LjQwQHI6fnZQZlRpVUQzPSwmaF8wP0U2dDhROyM/JD9IfiRpNWgkSEZqfE1ZMzBDME5kMFg/R2g2QG5+TUtdMSNsTVZBb190eVAvK2ZyaCgl'@;
put 'JE9VYzRBcl1rWCt9NkV5SiMxQnBFPWY4PltpbGlOLzlIW3RkSip6KFVdQ1N0MkAocyljRG5pWHo5Oiw+WWMoLjo9fn1saTYwWThyMlhISlpTfTBwNVs4YWBedi9LYkxQYk9NQ0dUYnA5S1NuQEYocDk/Pl83UlZQLml9NTw5W0JuKn5ka2xpJFUkKnNdIjBjWnZZQXV9UVREOipiV3RJY3IiQ3tz'@;
put 'cGlQVzksI0ZtJDN9O2B4N0xIInpZSSJBdWp5UT1PcmxNMCR3YihyJU56ZHI3bW10Pm0wWmZyVkY3V3k6OnBIeHNmQ2NCMVtWd2c9OV8yJnAmL05UKXkhb0NEdD4zeUB8Li81Y1pbND47Wzs2VnV1ODE9emxaOF5RSTt3QHgmPlhuVXd+d15ifFg7SClTaGZHYVZec2k1cFZuTEUrV1FOLF9leDl6'@;
put 'PHJzW1VleVFaZStbV2Jga15uLCovRj0xUzcrKCUwfEpAUyt9aU4yclpNS3BdZFFDbEN3dlhxcHxoenVnflZsNjRuK24kTjR9d0c/ayMyVVU9QnEhZFlnT2Y1eHAwSSY8bkBOPlhhPmNneTRPQjVYU29KWzdka0NPNTpJQkJpYDJMPHs9MXUjb3kuY1NxI3cxR3RPNGhrX2ZTQSNxRVRtNHhzZV5z'@;
put 'aHA9KFRDL34pMElrXU1jel9KPF8qVzJjQCgiemB7V1h0WFVrdmRHYzdfKi5qTWgsUktYY3hOYyFNXTpRMjFDaGQ1VFgvOjNMdEk/JSR4VS9DZ35tKV5leE8kdGxXJEYmSVVlXXo+KCZ2QjB5OUJ2PS9DW0Umcl9TaUNVPUFEOm5oTExEYURldyVmREQsTW49X0VbZ058S3VOOnVYV1VvNHYxLntp'@;
put 'anJyc1g4bzp5RHt8SCFvNlB1LnlYfk8jJWQ/aDEwXnJZXiFtPFksM1ZXeTAiW2AseSZTKjhQP3xjWEFrQHg7VyxaOHV3UWtmXUVUK0ZPU1E/MEtGenoqNSJVUF5mbG0+MERzQSVBYz9QRFlpbEtpd21XaSgvOWFsKmRHcDljfWVSN35rP05WJnEwdDhUV3RbQmRWeyF2R34vZlJTbk5GPEY6Vjo6'@;
put 'JW1sM3l5LzJ8dzdKIyY9Yi89Jjxgfl9CJT8/cF4rd35yMkFvbnU9bVtMeytiYn5eJFhlbkBxa25jbTpTKzFXTXApSDBJZCR8cWFLQzAjZTZXWjFxdSo7cztuZVkvLE9uWGZUNkUufT5bSTlHc1Nmdz8relhFO0JaSGN+e31VdmBofUV2U2t6TW5JXThpfllUTmpvTEtXKn1bPVZZNHB3P1E4QE4r'@;
put 'cXdjZG9bZlpPcztpLHIlTCtYOGRvfVBIOko5QyNtYF0+XThQcVdeQ1BKZ3BZXTRfcmxuPkE2YkgpLl9nXXxqe29IMiF9WUA6NkEpTllXQyh3ZHN0XzIoXitTKj9qRz8oXnNbNWU0KHFKe0YyMUU7VE8/cD1XampSfEZlUTNRUThEJEgwSjkjMT8sZDprS2xTd1VMWmBVM3Rzb095YEoyaS5Oelgo'@;
put 'Q01ecyM5M3xZKyYuaD9Heitfc0pzcGEsNF5meipbbjwwKTVobHpIa1Q1PnQ9d2t+PSZpczQrSFdoSFd2dT9OOT4xR1dzbzp9IiM4QCFodDdSYjUzRlksJENOR2Z7N3E2ITQsOXtrcFl9LzY+ezExI3tXZW90S20+MHQ9S0w+eCtYVkNSezNdLiI8WjRoKFl9MFN8JTVTLzNMOXQpeSpDV2hATSpv'@;
put 'RmxvPHJFfmNwV0tKWGJXPWRRK1Y6MzdXZTlWcm4rcDwpPE9Yc29gaCM1NzJ2WzRydUxoYTZmX0VlN21hSDlIPV9YKGImJDtJcXwlcUFbTEwwIThBYDp1MDArUHRXIU0oNC9QYEV7RGhjPVFgeXkqeyI2fkQwO1BwPiIlXVYjMCsvNStkIz9nTDhoKix5YFF3SDhaUl88XjpbcThbQWg6USJJWlBM'@;
put 'UGxlRHMpSUh9VDMvbj5AZj5+Y1JIUlRMemQ8XXZJfGFNO2xZOWZCZ3tzeXUxZjUobEBaeHd1bEx+RnA6KThiKTN8aWdtR21CX31TfDtSKj5xbE1VcEYpJGlMPz8yOEp9YGVBIj8ka35NPDMsSUY8cy43XVc5TyMkJDImcDZENEVIJTpGN3V2OGBKQEZhKHNAT1VkPTo3IzN7dltzX0JFPltQRiZM'@;
put 'ZkIifmpwPiRqalhYUFlgMmJdJnleTGd5czo+cTM1PkgpdCphV21ffC4iJj47OSpOTFV8Rk9eJi5sJH1nb1FgYUpIVzBsQyhvVGEjTkQ6OXZaeDNoJnUhdn56Lng+I29qPFYxVzRhUTxwRUAzZnxvSFZiKnZWTHFJTVlHN0Vtcy5qR1YxUykscFg3czw2enJOTEUyZENVKDNsenJGR2NeSFhkXy9L'@;
put 'ZX01UHd2djspfG4kYl9DZV9ZdDspfFZJUXxwSjRSI1Uofi9QLyZMQFA9dlIlIlkyWV9Bb1hMI0ZifjhgVV9zJEZaSlhKfmpZUHxMXl8scmlzKE1SbD40NS5VMDhCIl9ZfTdifn5FQWptd0djSFF3OXRKTms0Tix+cUowfW91IzM0TllXajBtLnVweXJLNS5DPndeJlcxLG5dT0l+KylXbiVvYS42'@;
put 'VW8+QSp4YEhQSX56fVJMckA+QD06aFJtYWxKcjgzX00oQEwpRz8qLyZDc3FuUSpRaSp9UEBGSFsmVz91Pylje31aa3A+REdWbSZje306PWVnfDskM3pAIWhYb2FzS2JJcWRWM30yRjdQTHFWbHwpLkdfc2dxLC5sYnA8akRmbk83fC45dHwhI0IpPns/MlQlVVk4Pz51KDdEMn0pbX54LHtub219'@;
put 'NUgvK3AsXn4oRE58TTNpVnledHtAQG12bj1abWpfbVRLR3A2XXpII3t6alZUfTJXdjY0VFowYkM8ci99cVg4PngkSU19Sy5zaGJHVjtRJStyRmwoLzhdM2d0SlNKaWZnRkAvMmllL3xsfnxlcT4ucHNuIVg3YFQuS053SztZKUloRyYseC5TI3d6TVRoR2BlcT9XI0EuTlMuX2toRyhMRWU+Xnlg'@;
put 'fklsV31ReUl3YXJAQFRVbnM5eXI8c0FwYHowXSZAKkFbO0sofCQ5ej5adWRyZ0Ioflc7dEoqfktKZUdlO3M4LG9XfUswPytHZ3UxNnY4M1UjbWcoPlJ7Z2Q0Nm8+QykpbllNPH1wJHA+VSNQbT5ZN3x+bVFxK3UjM3p1aChucWxiPSU3bUkwJSJ9KXE+QWpLdy80O35CQkdWWm1qajs0ZChqPixW'@;
put 'XUhYVWRdZWdZP3lyWXR4RXR9cElYTEVoKm5DKmNpUiguOEcmISFrenBFbXw7Z3EmInx5MElQVlMzPyo+UTxaLyRgP0x1ZyRzdzorKmJfX1l5PGlBZG4/WTxwe3klb1JBOSRxLltTdiRNeE4vIShgTFdfR1gqMVFhYXMoajkmdDpsV21WJCVKdC86Vl9uWSoxXkJhcyYrI2xXKGUoIkB3O2dBPCtD'@;
put 'KHNMXnhVPFJ+d009cFB9XTxHU3AhaH1nMzdUYVRYPUpsJSIpMVV4WUoyMXxhTCh5WHo/JG9lYFo8JiFgPH0oJUN0a25WbkJpXztHQmRWb1ZuWFJbVCFBd35UXTRUaDdJVGdCQ30oZW8+K2B3YFhQYiIod1h7RTR9Snh8cllaeU4pdz91Y0w0ey5qa3BNcWZ2YzU+QGEsVm9aVWt2YzU+WEpsPnlN'@;
put 'YlQ4UyUid01PcW4jUndNTnJzWnpLcXlNdk5bTyZgclEzPjU+P1RWYXt9fkgxcmV2KTJUYCtDYWV5cCIrQkN4dEFvL1A6UTpIZiR4UCw4L1BHY1M1M29kPGdVXUhfO2gyOTJ0PCsuclljfmhbIW5QUChMQ2JobkFBc31OcUQvZHJZOXwub1ZIOCxXKys1W2o0LFYsblhmNGlOV1JteGYhKS9KNmAz'@;
put 'Zm5ZLHYvNk4rWSksX1c1VTQwPVMjd29oPEBaIWhdNXwuKm9fcnNPU3w1W3lyanFELzBAKWg0eEZaRChIQHckMlQofnRFeEtDRCw/TTxwV2kjams8KiMhZjokaD19NTwqITptaD4uViF8KmJvKWQkYX43TSxIMz5ZdCpuUiVyfFkiRiNWTXo6YE9UKGtCIkBycTtzQSxIVnN3fC5ZZ1k8LHklLDYv'@;
put 'PzRbWnhmS1gjaFB5NnY5MFUjWGopPkp7Wm1eakV4OTVBdD1fTUlzNlNpOH5wbCoxQ0V3SzJUTmsyKDZ9NSxWbiVPY2FQcTYrTlFCQyUieXMoLkZbZUJBKUpdPHJCeShNMz1AcjEyTDJZOHVzJjNAVHB5K3N1MkQsTitTI2pxayYsbyxfLlBNZUo7VmBaYXU+Ukd9LCZPO305YVhfIlp3cnJOQiJH'@;
put 'K3c+MCx9SmVYN31IeDckMz1JVGFEWH1SLjgkSysmYF9RLzl3VllTQkptfXR6MCpUNjV8ZlF4PkNqV21IZDR+eX47MnMjb1tRYik+dHk/QDxQfCYiTDA/JVZGP1MzRChKIikhLHtPdVc7N3xselUyRitKKS5WdnxbM2leQyVafHprJV1iX0ErJUBFeyUpSCNiYUlefWReJm8zPy5EVlEoQEY+c3Fy'@;
put 'MGhhV2VgK10wbCJ3W3tyVz13ZD0rYXkySjAjJH01TitkeCVvOH4jVXU+NXRhcmJfJSIwdWVnSDcieE98OWhfdThtbGd4ZlZ3JWhpeDNve3hVIyVXKT4jPEUvTytUW0xAdShYTk18Lj8wKipYNyR8IS8sTixnc0w9Y2cyZjJmJXFPQE8/RVFIZmx0ZkJNaUtSSEJGNWxHPWVbdiVOLnYuKHJGd1Jo'@;
put 'LD1kUHQkJkp9UnAkaWovVWhLeHEvYENuQUVdQEgkI0pLdj9aS3tBfk9MMjF0dURQPmgmUTpAQ09Pb05leFNhemp7YD0qbEx9X0prSk9AIVhRd0M3UFdHQ3RhS2hSRFF0LnhkPWsxfUlMYlF7JmVeRTlkXlQ0W3F8LmdOTGY1cnF6JVo+TWh8NDYkU0NKelFKWipeQmoofWNneHpXMGN3JlhnRzx5'@;
put 'Y319aXdKIlQ4VFlSZU1dY1ZfbDUvWWwpOiZ5WlVISEcyOCxEV3NzL1RLXTRkT1lfLk9uWCVNdmNZdXwmO0NTIjt2KHh4M1IqbE52OUAmQndBWU5gMSk6fHBGKF9nTCZGSSt0IXt1eDhSPE58IT1zM09Yb0x3OTNVbWRTUEZ8UlV1TVBvLmk5VDsoPkpYenhRSTFvLDZvaEYwTHIrPjtVLis4cHdz'@;
put 'NU9KSFhRSlRgWVBtZnpdTTdHJnt1d1ByejZ2eTFmRHBPJE43TFFEeVhCKGQ2dyVKeFtyeSxVbUJJYHwvSEEpdFBHfUo/cUMsJHE+bEJiTHZqZD1ycyxgRks1NHpyYmRoMm54JFdBKEN8KzlMcyg0cj5NQGBLbD59fWs+PHt8TnJvRT5MYnw1V0puLithIXVLdCFdNmNeeGhaMUJjfE9ALnBSI15n'@;
put 'Zl5EaDglUjs6RmAmbUhjNzRAeXk4SlBHWVJGSGdgX0w0UjNYcSl7JiNNL3RpKzIjLFZjJWguVXZ2QHQ1TitWUVtudl8jS1EpTVYmQGZVdU1Qb2RKVFAjKy9KUU9nYzNtWllRKEdCO2g1KnlJMn1LaDEqViZ8XUxRWDUkZiUqUihvWDJkPnU1UDpKUmMqQk0iYyk1YU1ZTjB9Zz5bSCZybStsYjRn'@;
put 'X3dWWF03OmJzREFBQUFBNGBHRjsoPkp0W29KSFhkU1heaklaP1NRfi93PkxnfDxaVGQ9dFB+dDpoeTN4I1c2ZF9lSHB0SU8oLDYsZ2U7UmZ+NFQ4MWA1WkskTjtJMytqWH4mNkx+TFkpeUk2JCZUVkIsJFVfe3V3UCVSQV0kaFh9QGVHKD1AMVF6MEtxIU0vdFh8Kj5gLlZHZ0E2Rn5+TXxyPjto'@;
put 'S0NqTHVtNlk7QzpbZGF7Y0s0TEQ5QGlHfSo/eHRSKW5FNyM8d0ZhYXhmdD9kbltTMWVLU25rdD9kbno+RUo3bj1HNTshKGN3UHxQSXA2PnZkVyYhYDxgLl5zd2ArXVhBOE5BS1B5aU9bYGJnO3dzYHt+I08xfXdoTmt1W3I4ZyhLP1tAQHIic1NuJE5mPFRbQH5rQmAsTis/V25xTlR4M0kzPCFe'@;
put 'bS5WWHcpLHQ6aFdfakF3bXNIJFArbDpVX1k4NDxGI10zQVtHfDxATm12W35tLyp0TXN8L200Png1SlRHUCxyPy56YCsma18jSXIpKHRGfkFLSFk1SnR9N2VaX0gjaHo6eFh+JnswcmRec28jOl87Z3hUX3pPYVR9eztRbEdGYDZUbz47LClHP0ArQHhlPSM5UENiPTlhKUUvYFZCMnVOaV9Xfmg/'@;
put 'aD8wMiV9Zz1+aitGS3FbQlVHbGFWV0hpRlZxRDB6LzBxc2NOTnwsI0EyVDY1PjVUbD47ejtFZVs9PnVATHw8TFkmaHtqUWVfO1l5PC84PHBjYHY6JDNTI2VndkNTJm9zIlBneXZyaX1OSTJyNyEyekAzM343OThtc2AhYEA6fV1gX0RvdHFKfCZ7ZW4yRHpkOj9sfUhjUkdOPjxdLGdJKCtCaDxz'@;
put 'JFV9InBzPiVEKnFIMWEoczt7Ylouaz48XWY0YFt5S0hVL3xOVHZrW3UuVnN+KyZKflVYKEl4S21hQStBIVAoekw7MkxeeTJ8IjZ9cmV5M30/PnFFSCY+anchXlVNSSgkKmBUWDFEfjBhOCR8OUhUN1FGfXBtVW5pP2hWOWF3fmN6MX1nc1BuXW58flFGez5PS1tyaCI4ITNHQjtfJVJzcCIzYHZY'@;
put 'Tn1PTlRuRztSXy83ekZPIWxfYiteRklGZl9wYWVmb3BMfFo6TiRPRUVrZygpTlJ3eVNCfDMuPyZtMzpMdzt+PUtQInJEa3UmelNCfHwuMj4pMS8hez87fn1Gfj44TjBXQVVENVpdWj9eWWZOWm1FWWc9dC46fGFrUUt3LzI7Y3M7d2VeYEl1fj1Kd1praGBCQkA6fFUlbHxwZj8hYyxMYyQ/SFFz'@;
put 'KTNmInMkSDFyVV1IMSo+YXZ6enJvWSMwdHwuMFs8am1fPkJAdU1xMkl7SntQe3N9aXBDaTJIIzNKZigpUzFlaFdvWytWUUxSZjhdRG9HJiRve2BibWh2YmFfXnBLK3ImM28zXUJCdD5uWW55Kl5GdF0kfnNRc1Rhbkkyb1RHUER0Yj9KX2R1c1E2ODdmMFsuQEd2TWtoe15gfT1IKCNDR1tlaHV+'@;
put 'Rih2UV0rOF46WyEoRSJiXSRocjBDWXpaKFRtNG1bWFYlRmo/eUZ9O0gpNG57Qm0hIVNDIjBwbSsjek04Z2QlaXI+KFVeeV0qPFFOSj9AKmk0TG96LFtqKDkhdj95R01YaUZjd1tKSX1tdWp0U04lfSw9ZW0yby8kYlpeS1hpVl9APXU9QFV8fnFiRipdYUxUP2lNZGFdcTQxPio0MTJsJlhCKzdR'@;
put 'XzpqSnxAQ09+T2RtPl4hdl5odkd7YCtVKHw0TFR5ZiVmcjhWYEJ1ej1lbnVfUEUucm53MWsvKiZjd2QyQ31KLDJLLl5IVCFhTDR1L0tHIil0JDozUmVxL1ksX3BkZjs9NXxiXnZQVlg8VG5sKjZSTXlPfUxAUnZJY1E3d0AuSE8lQlF7JSJMdSMsblVbUTU7bTRDNn13emVmXls5YWo1Lk91eHx+'@;
put 'Tml4PzBxTDBiVkJ1bz5jV2l5N1o8OjdNM2BTUm08Ult6RVBMU15TcmUjaC5GSkVjfkV4MyYmdyp5e0l4W3JsXVR1Nmt9OiROeXNlYk5UYlVRQ19lJX18XWleUkV3XzlhNj48bixifSgzKGxPVXdDNTx7fVJ1NkpPOE1FPjV8OVp0WiJBLz5GdnBuM3Y0Qi5MNzFBLEgoN2tUX2Z3VUx1IiI/OUFj'@;
put 'cXhCPFF6M1BCfiYlQDdBfHQjfl5MQEwoeUFzZT0sMCYkWCE1dCJ5dTBsYHZrWGZCeWM6SExyTn51XSZ2a1FDQjAoQHh5Mk9yKiQwVTBQbCU0QnFORTZbYlZhYE9EZm57Wn5lfSZFXyt6K3xMSlBKODR7dj1zKCpzKT47Xl5ZO2B4W3N9aEgmUGpVMWF4V346UlluQCtqanZWYyl2UWZgU1I9JEVt'@;
put 'eHxtWDdQU0NUQjVYfW9AY2x4Rl9fQyE+MClYNUhSTjVAQzd2blh0djB3dUAiJj1rU243RnxzKVQ9KnN1Ym5CRjZCYjQpRXZfYCo5WklHQ1EqMH5pK3BRJGp0a1dNIldNTkxYaShHJlpPW0xSNFQ8PnRBX0I5KjdNM3NgQyZCVEtPUmZXanhnZGxNUmwmR2t9NUAqJHhSfSZwa1NpfHY2Uj05eFRU'@;
put 'ayRaO014SUw/ZklrX3NEdmU8SDIjSmldfVM8Rk89OkN3UiM5MkBMMmk1WDV9d0dXXytwb1s3eW1XXW9OVyVwb21eRnp5alpVWzRJeXJiMllTTD9CQzxIXVcleW4oMTM6MmtdOj10fTU0OiZyQEV9QWM5a2xJZ3hINF09XzIwSG1fOzheJnIkLyZCQDNJNz48Omk+RX1HNz0vNyQsOnpmMXtjXkA+'@;
put 'SFQ1Png9RU4mOmt8ejx9cl53LkhTNyZYSER3RFJieH49TE18PyxrYkI4NEY+PmhPIlkkfSNTVHhMXSFuaG84LFAlM34uNyRTb2oqczd9THx2U354UWZdfn1wa2hARU54K0dgfmllLiYlJjg5an1AOV1UbGNgR3I4V35xTUJFNSttX1c0MF5tdjRrVHY9TGcoYUxLcUlpMyQ3NX1GRFtvSiMhQkk4'@;
put 'XVpTQihrdiF7b0NKfj15YV9OMmk+Qz1lX3pHN3NdJC5PUU08fVV6enJuVkFTNDphWm81e2IrNVp3T1M4fjsqJW8hcm0xOl9jdCJZdXV0QnNzKC8xfVEhS3x8c25KTyhWXkNoUChMTzByOmAqWEw8Un5YIVF8TDYzJXp7Vm1fJktEXXpzTyJBaDZDYG5dcF1uMSVhQ2BTUmkjdlkjKHBTVyhGayN7'@;
put 'JXZLfkFnV19WUWc+fGYweTJRejpeLktAJlcuYzhiYy8vYD9uODpdYjYpZnx0TTE/Ok42Tih5Uz00VkleI1cwSzwrL0l0JTRPOXhSNUhCWFUzQip8QUBWaUtgT24mKjcpSV09d3IoNltXVUl9MSQ1TGB3XmQ7UFlrXUZCbDl5V3I3QU50dm9YP1hgRntpIiM0OjlDdkMkckc7OlpAazYzK21RWHJP'@;
put 'OTBTWkx0NC55R1NOWCgqVF0xJDM6Y0w0ZD4zMlN+eWBKSFtkPjJvJU9lY2FDdTxgeHc2O1p8U05JY1lLSyZGcWh1QkFmZUc9O1RedlRhY3JZc001e3YwZSVQe2UwLy9EXilCKGQ+NE1jMEg1dXxTZH06IjdVKiQ7VHIjTmgvRHMyfEJCdG1xc3QmIUt7VDpYT3xsck5qVmtmaFI9MVIsLGo9YWZo'@;
put 'Z2BuQ3ZpKTFdK2FCWjlVe285dzwxOCZaMCtdJlBNe1FWVCE5IXx4RGY1bUwxWiUzMU9pQjdCP2dhTjhyTU1KQGhmLH0jYjQ4SXJnLHVmYDM2aj5Ob0Y2SThIaCkmJT1mMSguUmNHUmBhRmJucUkycHcsR0dnQV0kL0kpdlNZOSMpI1gkQDxlPD13JGpnTWIvIzZTU30jSW5oRipmfVdJJTs8K3ld'@;
put 'MiNeRDEhaUFBR2tTQTJ7aFdFNVl6eDkjcVRjZUN3T3tXNT9Sa21dPnRYJC5NVDg4V1EkbH5GS3VuYmVWcCNhZzQ6RkUqJk1KQmhEMVcoQTg5ZURnVmlTJnMlWGxMOnFnQCU8d2hFYV4ya2ZQayJ0U0MudW9pcnsvXyV4JlV1K3hARGExJXorbD1xUmJtP015dS5MI3U8UzVIY2NbbGllcGRMPiMz'@;
put 'WlEwJG5OUGJfbEV9Z0BlQzZDbWpWUVs4L3pXcT9hYWk6dzRrb0ovdyppW2RlO2BpUno3IXF5ZEsrRSIvZW0heD07cCNPMkJkN09kMChrN29UP0x7VXljTUBHVjdnWjlsVypWUkAsfCMzRVZiWmpZamRmViZqJSY9eTlba3J5bDV9YFljLz9Xbk8jUCY2TXd0dkNhdHI2ZDsqKkEkfFJyKz96dlls'@;
put 'YF9rcmxOKXRpSG1MQVFAfStCKFVDU2Y6KnJJRUBFS11jYSZVcDRTcCV5UkQxLkhZdkdIbmUyTXV4c3FHIilIL3VEREZ8T3lhdGN6Z2d0fTt2PiREXW5VQkYjUC55WyRwWUFXNFVgT29tTW5+Unt3XWpNKUlQJXheYVZIJHpmb2FaKT99SXVjVyhkeC5RMmtDMGc0Y1JNUWlFN19wfHs5Wi5JPmkk'@;
put 'XkhdZm09RmgmTn4rRj9bX0JmbEJyXyxiUmUxRmhIbHU3KXhXU1ZxYldrJjkkd21xYEp+eFFXIzJaTmROc0c6dkRBenJWWjZtInY7KXM/aXJtI21XcEpPQXl2S14mX2VwZy5fISgpeCYlSHBKXkJBPWs/Mm5qeW5kRi80Q2NyUkZjISxBZn5QUyYmKEIlVSMuc3JwYzU6Wz5RcnU0U3JGRCZdUXJM'@;
put 'TGtrN110fjdkWzpyJitLLlhoX0ouIjREYzA3N3JMVV4rcU5RMT1kPF1eelFfPmZTQ29pYlQqP2RpXlFRdXdpSUE3KDheXjJERTZ8WXNrYT4oUDRlcmYlPTl8K0VvUz87QDZyPX1PaCp+eF99Z3gqXT9ZUCVIUHdjKm8/TmAhXkQpX0tsa0JWJF9hP1k4fl49b11Uamg+dWlpRTROWkYvRSFeayg8'@;
put 'bEBqfSRbbm9uM2FXISwwIWIpISpZXndbd1FoJCp4dHxzSkhYfVIzWHdpQV8+P15uWnRUNG89Z2hDQ2FoT1c4diFOLkNiPElbcWs7WG5QaEhSaVhbVG42YTRNTUdaIjZeKW48VFRGI14zZWhkbVd1S0hGNzw/NFYxR0kmRSp1aV47JSNiSkkzPGp7dGg0NmopR3A/PURMNG9kZzI7Pz40JUVXU1or'@;
put 'N3BdSH1bbTtlemVndHhdeiV3fnpUVF13JVteNkdlJnN+dUZdZVlmWzplcGNLfGMwVS5LRWo9UTBHJUIiOC9dcV9aM2tmbTtLcHVWciRSO29WUnlFX15gb24mVEMoaVc3XXJ+ejM6Qi5gbW4mdj1EIzl7KH4+cG5hTFg8bTl4SG9iYTNoWGRCJEZSZSwoRj8kZTglaUlWcWcsa1BhM2tvNF0kZTgl'@;
put 'OCJFSHY7RURUUG04O2cybDIhZHBRUCM0XnJLcGB8QTBHM05US2x3YiFicjBIUE4udms1XzsmXixDeSpMSUFtWTYiRUhqdkFSbjxCbVN0VDVbTkNtMiFIOzJlTnJkMGlhQWRBdURjbGY4fSYxZVA/LnNsalZhdmpWJjMlNX5nZkx5YG1TaTRMI20zQi5Ba2ZjVkR4Snh1SnQ2Q2A+X0VsTmMhe3VW'@;
put 'RVtoYS9GaFd9SXVBZipCKHkkZ3dYbEIsPzd0XlFGQlJjQWdjNEBQbFlLcDxxYTNwOkg6PmRwcjVhJGB8MWtAenpua2VfbGRhOUVWS3BbNjZiKz0kO3FCL1QuLzpXTWdVcjV9O0NyWGJMMnVRTmQlT0ElUH51M11UOlllMzZ5U29iXzdRUXFZImgkRTdqRkI1KDdkMiVNOigqRmh2X0w3bzlIM0Ii'@;
put 'Rzo1QyRuYUU7KDBrbiwzNzF4RSNgOHspU2l+Yyp5JFErPkVINFlzITJjbnt1TU9iKmNHMz81NkZpWXVWUzVkIzdkMmJ1dFI1QzZYciYoQHZFcjNleW5CPEZmcSkkdS4kQjt8WFBtUkJ+ZDtPNlYhamJPeFZfN2BjImN0M207VDVCTmJPJlMwRE1hYzJVOlcwN35BVjdlLm0yZ1IlZm80amwkUEI0'@;
put 'c25WSXh6YD5xOzVRVT8ub1tzMUtuVjhAQF9mT00mNiJiXlE4cEl5Om9uVjhwemxvU2hleVRNcCUzS25rZXM6S1tsY346MFhEUj8/WEAxKCJUY3MvR2omfVZvTEZWSHtbfGFleEZ1a1pXZ0JjfE5WMDxOdX5xTlpIKlVFe0ZQKERtOSR8TERnPnMlclpTbCo1Q2NgTXhnc0tsIz5UR1pTQippSG19'@;
put 'R1hlKCwkJmguNW5JOntneG9ze21aUyoqaUgqX2ZFfHNYWEovdihbS3Q/ST1AfnJ1UTQ2RkY3SyI7Y1Z9RE00fU8hMnJLImRHPHt5WFR8OzRwKDlLPDJRXi95aHx1amB+clU3VDl5IVRsPyJmbCgxWzI+QlJGN3p2VGs2fWA0ZnM9TF9zVEtJJkB8ajhmczB0dSF7eztFZ35kLj9RMCl6RXd+JW4h'@;
put 'fmRIaF9GdlRrb188QlRMZlpUTFV8RjIlPi8+ZEdFQEpDfF51JjpmP3V2UV4rJHZZY1pzYGJlfH1mQ3F8V0RZOUp0aDZWbyxTTyx+UUxLWG5IOUpEfCgmYSlAVzFaN3BMXVN7fUYxTUkhLCl1PmB7M1pLRD1HRDghOiREcldoTHRiLEdgYCpvVF9QaHZXTE9eb0dffEQ8a0AqRWkmMzFBWVVWWSZu'@;
put 'JVRvaTAvRGNrYjYjTEh7ayh7elUyQkNrZX5wUk58eVZKOXMsRWFMYjA9InVOTEZKWUxoTV9gdWRGZT87LzUiOFRWQ1FGTk08I3tGS0lYMlQpd2FzfStOP0ZTIlFjdkVjZlo/WTBGY088W3FuQSh6VS5MYGx3aUU3SkFPZ2M2RzR6PEd3PjhBKHpVZTVpY0pVVFRvL2d5V3NTNipVIyN6L0RjQl1D'@;
put 'STV3cUMoYzR4WzEwaV11RllOV301JCE8NUtCQjs7LF9IZUI/MUEoT1RsTTZHPk9oIypsTko5YzU8SVhnNUg0JlJifD94dGwzS2BbVkt1RnZDYmxLQ1o1SDR+YzhyYFlAajs5YUM5Ulh8dEY1TXduInlddyU5THd9ZlJAKk08VyJGelNyY3oiMzFUaVlfcCFieVdEPFMuQjU5QnJFUl1qbEU4KHZr'@;
put 'blA4enx4aUpfRWZOSHt9eSY6aU1TNUg0XjYqaVQwcClOXTorfThndz5ZTldvajFfbks+cDBqJHN6Yl5UIksyVmJHW29ZNl5gQjBkRW1oLGN3QUJaSGFEUGBvUUssWipQMUoxfSh6VikpcHl7emImQXt3YzVRWm5CK0J9Sn58QixgZD87JDpCXnxRM15pR252NTNHelkwayNBKEVbTEdze0hfV2FT'@;
put 'Nns+bkZHVmgheXdwU0VfKnFWQlh9NGJXUCVRKnJeWFtVSlMkeUtSRV8qcX4iekFaYyJ4M0lgNTxOMmI8TWs9fnJILisjeGIyK2VEZDdka1g4JG9SZy4wVHxnc19rcEJ6NkdIKl9OYjNqYnwweTJzJThteCYpaV1ALk9CJWZIWDFwKWJLYX1jI0JgMD0mez0lODkvRS9zNzwmV0BGZEhKVTE/Q09X'@;
put 'XzZYayZNS1JpO3U+cjBLR31TcjdDfU55KDdHLjZTekxNQ3p6ZEoxfXlHWClpdiI+bW5XaCg1JXcwI1EoTSk4UFhUTnxLTnB1KEVvXkt1bEYoVEdkUVJ6VmBTUFROfEtOTEJVJFVYKVovbXBoSUhSVE58YE14dWhLJDcvV1g7IypUejZrNz43Ym09OTw6W3ZrNkk8JmVAZEw2Lkx0SUx8XT81NWBU'@;
put 'bFlfQFpvT25UPSFzXWF5U3V+b3coKlVzR3BuQSh3TipNP2xYY31IeW98RSU1NzY4UXZYbjZBKExNYjZoQEBHJnxqQDRrYSU9V1B3UHYlOUpVXXgoWi4/JCQlL0Fvelc0d2Q1SDQ5UmJ8NXpMI2JJTGQjTGZad3hGaUdFOSNBKExNc0h+IypOeCpCWU8va1MyWntCJm1nZ1lfbHF4dSJQYDg0Wip3'@;
put 'cm1Hal9YdCouY145aCk6THtdfmdKI3lKbEA+V29vY0NjVmFMIVgqSjdyP3E6QWl0KylvfFFHdFExfXU4cWkiclkqdUhze21dVUVVVUYyX1EuUDtMV3dHUkVfRnF1QldyZDtFUE1nKlJ0WnxEdnBhVnRiInJwJjpMe11PaHVtUWlkNHU2ZypySSJdWUNZc0NfQD5dYnold3c1L01ZJTooPHI5d1pd'@;
put 'TjxZTlcqZThyIlopXXVDPX1NWDlTK2RuMlI+SyY7PERHe116aUR7WGxsVyU5a3BOV1cxbSRtM19GRU1qT1EyTnokVW0qWXVhd0VDOWV2P0lHUWBEUUMwJnZXMUVhYnRFLzc5OiY7cEUmcTFYMHtHO20+QktkNjY+Mi92P1t2a0xlWk44UyE6eUhZelBJQ0ZuM3laaitLJkFkc3ZOWGVSSjhbQFdU'@;
put 'M1kvSCtPdjIzaSJyQjZCUHdZL3E5WkZpWixwLlglWVFdSj1BIVgyQzgoJVhIRDc/UlhSP3RJckZ+O3ApZD4/JV1DcUF1SzZbfWIrSSsrQjlkP0hlMFFvJHlQUyx+UkdIQGlPcEBnLDhTKSlGKUt0JX5MTmtxQ08wUC9bbjlYJlBHdVRoK3VtUzs+Kj1sOXU+T2J4TGBsZSk0RH5eU201RkYzSD1v'@;
put 'aTZZRnhhc3w1eDdWJkp6eHRVPEY8YSYvbjBBbUc0a3woWGV6ZmVmUng3KyRYdHA4RTBrInJBTiJkPztOKkJuT0FJSD1fMVRzekxzdkdLaiJsWV9QTUxHfVMkI0wjYlI4Vk08ZjFtc2RDNT9yQ25fKU9qOTomIUA5ZT1QUzZ3MCZAUmBjWGBrInJpSEE7flAmRSxKLCE1eD9uW0kvV15jdnZqSnlV'@;
put 'SERJa25lTCEwdyNYVEdUNEYpfXxBYUplZCVhMT15Zl1MbyJNfEVweHBOQW0wWlowRlgzQlJKNnVxQEJgIVouP0o7W3RqZ09IVnZebnRMVixYQntFd01XN0EoQHQiT3tnS0gxXSxIInpjW2d4Lmt7dXh1P2dgOEclO3ZpdGNvQEIlb18rQStjO0g+VTdGRH05e2F2L11hSXRmKjoiN1lOV0Ejcjku'@;
put 'SGd7a1pCdD55MnYmcTE3PlMlSm1wJjVBN0BVXkd4eGdLLEY0aWBKVk5rTkp6RlZaIWVzRXBfYHY6X2QvZyVKNms6SXI9MClLLFQjMmVoWm5YeUQrPDlMMVgkbDVFcnEhcSFMaCosRj0iV082dXhsfE5nRn1NREsiZSJydkB+ZD87LjprIW51Yy4uIlNTIzhlciRkfWQ0ay85XlcjX1ZBYTxxImFt'@;
put 'LE1DeWdpRDxrVEx5Rzk9YHEwKlZePjJLRD1+fHRESztiSyFhKn1oalcmSV9ZVFZgR0dEeFFnT0hgdjt5LDVHTXNGP2tMKz1hcVpJP1ZnRmZ5KGVYYjNAKVtJWV9GRiJyTXBGODQ0QmpkeltPTGFgTG9xeS9bOU1HcVQ1XUdVTSozSDtMQ3plUlV3ekNYKUcoJXB8Q1J0UiwoO0ZnSncmL291RF5H'@;
put 'KV0oNGdUdVNOXU13L3c2OF9vNnx8QixKO1QlYXQ1X3FJJkZWM0tXSHVUd0B0P24hKVg/WGUhXyU0Mz01cT5uLlgkUi4kTkdKSWM3V0JnekM3aHdPa1tnQSh7N3cwVUNxQUsqWzRVImFXR2l+ZDx1eVlTOUt4JVtVd1tgb2JPNCR8IUcpL012YWFucSowdCNuOEtVemFtYT5NXVJifCgxcjlmYS8q'@;
put 'bD9uX1JaS01GKiJpam5BKE01YXtKI3sidHFIUlBsK05tLno0ZFo3UEBdXVlZZ3ooWjtQTGBzNUhJYTNMZXZqUVMiI3x0U1A9MHwpWzhNIUVIRzF9el5MPz9VQDIoSV8wV0QkezIlJX5+NDUrPV8vW0M3WjglOU53Uy58X3FJJWJ7T1EvIjswek1efHxYbEh4JTk2WlI9T1g8UUJVZFAhdHg4YXUq'@;
put 'VHhQV3Y8VSVEaGMkRENEPTg8aix0Izh9ZiJlYioqOjlFVTZ+c0AoPFE7WVRFbTdNKG5lWmBDfE4kdn0mPFhzLClYc0NeTShVP00ofD5NKEk7I09INEBpOXNbKV1YeFlmPHVEJF9yYyRXZl9HdUIiYXVkfnl6fXNdUEhdKUJxd0M9ZUR4cyosKT48RFR+QVJ1KFBNLHwodyt+fE0pRzR5ZWB7cH1P'@;
put 'QTNoYEFhb2U0JFchUjpvfEliSkxsUDEhRWdac2FANl8yI2N+QW9SJU5zNzxII30wTXw/Lmh7WXs5SzNkcTZAdjNdZW5UW1Q+JCluNzsyQXl+eC80Y3NOKVp5UlROazs0Y3M2QGNneEIkMzs0Y3MrVkxxUVJSblRPMj5xZjs1dD9jKXopdHZ6Pjc0KG4zUCRzPXxLcV1hSFQyUCRzUmVJJjc6Pi5y'@;
put 'WCEkey4wNXVtOEpMYD0+fXJ8PC8pTkNQNSJmSFl3SyorSF8sfjhITXEhb2ReY3t8ZyhyRGtCL1M7MWVoX0AsVF8rc0EkO0csWmJ+MERBalBsOlFRRnc5USRIIytLMn05ZiMzZTFoc1pkY19RWUErJXlyM1QySCMleSE+Rjt8LlhTRVsxP2I4JnIjUVJuUE4uQ1d5RF1NcWxwR1RzJjk8YyQwJGM9'@;
put 'JWRpVlIwfl47KTcvWkBYPipeTixvdSI1T01oOiFxWStfcWIkIlpWSDpbR2R8cCtucjduI2I9dm1zTl55XyRAKzN1N0NFdDx5O3BpfU1Tfio1ZUlpUTJ7biQhX3FbejF5L3hTREt9VnBRIiMiL0lBLEo+QnRLR3g5bz9sdHdPdFBxNExVOyVxI11vQGNWUnspPSJsUjFbLl45UWh6OygrRD57Y0NI'@;
put 'Tn1AYE5LanF6PnJCRl0xOClkRTRVdzRqPDt4PVVoe00sYGQzN2UiXjEoM2c8eSo6YWZbYSRueiNEakAmenVAVFR4dm93bVBfYUgpdC5oN0JyPHtubGY4OGdTWylHP05BdTFbKXZJMXZdTU8seVJdRVJJRXtgeFJMd1ZOdUUmP3JdMFEiPGlkUCRVZWg9MiUudTNFMVI6cm1IJm9PXjdST3gsWk9q'@;
put 'NWFafU9PX3FQPSFAWkVgNU1ZJVgmT1tObS9SK0tFenUqSWAjQXEkcFYpe2ApMyYjVU54NUFhSkBAWGpNYE46Zlt6d3hHKTxhUzFuRD1ScWpiWFVgcEZNRlY3X2sqOjwofU1WeHcvRUtEUU1VaT5JUFRNYF19NTprPFAoXSVXIXBub2ZLV3RVKWhkeDQ9SVVaTjVIUl9TJjVQVHRPbERAUFokYVo6'@;
put 'MUVLeWAka114UDs0TDpaN1ZiZHxvPS9HSm1oTiEuRHMvPzUpQ1dhWUs/NzJUPkZudCUhYkt8K2Irb3puVVh7ZUBoRTguI3NGWiIuPjQ4bTI+VVQoWilSVk5XTjcrO1ZwSV1XeVoyKHIyJUJCREM2ZUBkVHI3UV88NUJWdFA2elBUMlU3VlhOPHQjSz13bG02O1FvTDNkamIkeUBPYFFlRlRCXVRq'@;
put 'd01iS3YhUGFLNU1NXmlHLEE0Rj9pImVAJnt2L0t5VjlwKXB6QkRQZzdYV29CUzUzQG9QeSxTRFF4UmJTM3wie2k9UEooeF09b29YS0N5V0BYXjVmOTNeWmFqJVcsQjU/ZnpXQGRUcU9hdEw2JiFnPz1aXio2RX4kUEVLU09xP3leTzRaWSFabEkkbUZHMCZjU2V7Mjd6QUJpRjdYTW00YHZfK3Vm'@;
put 'UHBqQWxLIix4V0AlcEouTEhvWnU1SG1jYXtGO1t1YnsuWSFyTF48K3huZT8qeXg2TWVeZUdUUUpofml7MCo9ZG4weVAmXzxBSVI5fnouP2BFLzhMTDMmSTdrPG9nJUNbbT50RGZBfV9uI0FpTWF1MmFtd1N2YFhtK0xMOnAsWjcidFpyQHxDUyp1cHFhZXp+cHFBXy8qZF4lSzcvQlUzc3N7Ok42'@;
put 'LHV5JWl3bjFCZipIcGwqbXZRQ312dUxyJjMkayU8P1UiLl41IlgzeHYwXjcpem5xY1NMK3Q8Z1NERypwekd+RHxiciV9Y0Rvbn1mSl9NJTswPCNhO3JbOG8jYXJETCk6YHZ7XjcrY3VBQ3RCTCsxXlUyPzpALytjIkwmYXphbV4hITRsPnYqeCtxfD9WS1Yzd3p5TTkuTi5POyJgRWVHVXt5YTZv'@;
put 'VFdvcEdOe2I/Yk54eUo8UWpAbXwzKll7T2hOa0pYR01iYkFxXS9IPUQ+ZyI0MGAkSz0hZlYkNEElO0U7YWNmX1NmViwwUk1XVXsqJiZUSVBaXy8iKzZvKipxOT94bHJXLEh0dzkmIUgrO0wmajYlZ2p9YDdLXmJrJm97QUR+fCpSYFlHc2xzSzp2N31oQiQjczxNVTJAelZ5QT0oPStkK3Nzd3lp'@;
put 'US9jQERRRnNXKCpeRjVUOjtJOzR9VGRyXmdpOmAvdz5bRjUxdyVIa2k+TFtOPDE8P1MmKzkhUT9MVSsqVXMpU3drJTBuZ0hgQzZQc0JKYiRZN0ZQe3lfKy5bL21OKloyQWo2eiEpbmV3Rzc2XkshRElEKlk6ZyxaOnVfXWRjeSNOWSFXbiV5Tj5McEBHbVk+MkpRNFFWdDByNTIze1AlWyFlYlIv'@;
put 'eGFjN0xVcG1IKmJtUiE7QXg1WjZyI0RRYkBtISZrYlMyNklUaWAvcm81QjZyPm1fJCVPe3FaeExyRkA+TTk1ZWwlSjRecl0xaXRaVllOam89OmhgWS8lJFd3RXhaSSpPRkRoP0RXcHZjKi5ZNkNGVyp5MS9rLjxGUyhCaEhhNH5XaH1SNHVZJkldZyNjezJdSTtHIWsjQUA7R1kpXXZ4ZmAjUzp1'@;
put 'LD5nfW87YmNHQnQ5c3xgal5YKms2WXdGYHl0d2xRTGtJTVt2PFA4dXx7JXdCQ2VFQSV9aUczWW9SSWJKIjF7ZmA0KCU3aXIvRkpHUzJ4IU99N3tCJG57Km9LPyxYLHRTb08qWn5Baj8mSjg7bGh0TDNaKnY8LHcoVXdvcHE3aWFMbiJZQ31+Vj5ZW2JncWBZd3JKNzNRfnJ1T1QhKHRhJX1pNHhX'@;
put 'Pm00WWx6Ul1OJmM4OSpJViRJO0l3Xi90OnMuZz9pXm5LKlkoc0xecVMvOCY9V21fOSlwQnhFMlVOKCwoXXU1UX56Q31nWkdGTUZkNHs+YV1ieGxALlI8P1VlRV5RT0ZVZiFge3VqIzVgLDtpRSZXeUh0I2FTWCpzUzZDdHtXM00mfnpHTXc+cEF0blhVcntgSzssZSlOLzg8QUtaZXx4eSY2TTxh'@;
put 'NnxlIl88KSFwKno7PTtxI25NYld9KHEldzZ1eDRFODlEVXdDa0FdIzQvYXVlZklsa3JiK2Jsanp4Yk93UjN1N0BRJm0oRXRrZFpWQkpCN2Y6PGpYaUVQe195Jl1kSlMjYSFBSzB3fGtnNyZFR0pqUyt6anJTS0phYyN0by9wcVpUP3pkU0FwMV8yXl87SHQrJkVOVXRTcVg3aW1tQkZ5aSxBUCYm'@;
put 'TUtfRFohY2Bpbk1FRjNUcXBUKHk2W0JgOWsjVDdYfD9MfWc4Un18YCpbYy9aP0VtZz8iW2dSeSl9bktmclRGQ0IjNTlETEh0OTJ8OlVfdXh1UDsjWGNFTGlqblJ5Tk5GIUQrU2pNOy9GKi5BQEExU3VhfGFJQGBhM05iJjRLTzYmbGpNdDJ4aGw2VnVrWyg3P1J+NXpjNFZuMV8rWnJFPmgyYzUl'@;
put 'flBTVihSOHldUXElNG9uKVpkNiZkXiZ7LyRPVVRLNkUiaVlPeSY6OEAmT1g+Qm8jeSN+PWB0eSYvUEk5IXxIMC9rWGkqSD9vWnI0ZlQ3Z3pXalA3Q2Z7V3NkNmg4cG1LL189dz08PCIiKVE+NFZUQzpNUEtoZkRPaHVOb3J2X10mKltkTjh5RzhmTUhfM3NeOjMwNHcoV3hLLHx7YDUvX0p+e050'@;
put 'WU5aUjpGMTwkdVZ+KWEoPHtyYWgpOklIenwpTWE+RyFoYjgyOVlxZSIueU9aVWtdX1UoR0lHU1BOJkcwWTxHZ0xpUUF9MSRtNW5VbXZaSSFCclBnMiMsNSYjQ3QrK190OHY1VGJrX3QwX11EZWo7dloicUYlPGFZbzhZSHJOUW00Lnp5XlN0Nyg+KFRGKTpPbipNImloQSxNZnUyNDlSPFNye2Ri'@;
put 'LFRpTUl3OVJ4IyFHNDFiXTEkcVA2T00mP0JfZk1AZWw1Rjw7VnlWPF1bQEErUiZQNXdYJWRoRXhPMSNaNk82ejxqJnE+ZllyN211amR4VS8zQmhEKXhZTTN8MSQ5Ok1JW0Q+S2ppbStKQWUrOzsqaSUzYHZSUjFxbVNhQiJ8XjtCcCtNVyl2PDIrZ00vRVBNbCVWYkpRenRqRy9NWVFqUSMrT0t9'@;
put 'Z2Ngcz8zNCFNaHp2NlN1JiIpdDU2fTA+MCFbc0YiLixYfUp5ND07WEhBVFZUKzIjK3hgPmNeNDI6Y2RWdkczanU5RkYzT28rOnIjdDIkVyF1aU5XYmVmQTNSbDtofGwjUiRMPjV8MjUrRyN5SkJbfTk1NmM0ZmNGIXZTdTx0SmN4ZDVzMmhqQ1kkcT5ATiVRSCY1YGlgJTJALFBySHxKSEdEQzxj'@;
put 'enVuTEdoRWRGUnhpSlMlWCkyOjYpRTA2NTZjQHVWXlhSJjQ+Zl4xY1ozKCU2LmdLIksjIWRmMURjJUdBPDt9LDx5MS9WcVJqTzZeYFhiR2hJZHpicl9MbDQrfF5iS1RWJTtnUDc2cmhqWzxIeEpxLjJJOXR4OS5aIXNZPWw2NStoI3kyN0R8PmdQJSk0OGR0aitkPypaRWYmal9dWEp5Tmk0dkwy'@;
put 'QCFPK09rP1EoIUA7fT1Kai9dYUIzM1Jue2QoUTYjSVtGckg0NFFVI198THZbbzkvSmldOFM/TWhmUkhZanluMXBnLCR0Yk53UU0wYmtvSVUzMSs+Z24rV09NY2hEdDYvZUVhOXh4OUhdbUtxIXt0OlJIaXNIfldrPUZRIkJzb1l4OENtcClncTc7dnsjRCspaThwd3FhOXhXRVZ1UF1nam9wdTdE'@;
put 'KU1fT1Z5fG9DeDtodG1SSUxATGkjTGhAOHRVeUBbMiFMZ0l5YEBEbmNFXSZqUXFpdEMkJlk2Wk9IVDd2OWovL0psImVRcnZhW19ZdVhHbkpycSxbfGBGL3k5SF1wbkpkbS9SQCg3Z11gZDpna2BaQ3RfLENLLHM6TCF4K2A6RlFMX0RDSW1gYi5LZjM8dDhdKlFzamFYWyU8STBmfWd4SU9tTHNw'@;
put 'UTF0MzAyWkZ8PXhVQzpIV31ybCx5Vmt3JExgdGpVdiVjUV5qMVpSa3N9V01OdGByQ0BRO2t5OVUlYXJMdFhMJDAoQyVEO0xKJEcoNkc0cURHRGtyRls0L1k5KjZnb2BrXSJZVkNJTVYhbCNVOFg3S3NvVCQpQENTPC5yKyt4e1ZvYjkxT3dJdFsjKHEwQUQ/WUwhfkAqUVMlQUY6VSZXUUd3al9K'@;
put 'LFgzOVZVOkIyZCltdFpENUxJYTtYO2BpSW15WHRTKGJGTGUuLEc5ZjtsVW9HdXY/MyVHekM3X0I6WWxecVIyWDR7bFIjfSxeQitTMm1DNzk+WnNEcG1uREV6eGtiOS89c18oMWx1VSw5PChGMXN4ailSOFEqO1dtPGxVIWV7ZmplejtqSUhXLnFSTTdUL1VfOTwqTlBCSTdhJlQlbzYlK0hEVGxx'@;
put 'RkBHZCspenoqKTswdSJSQ2BmWTorW29mI3srTF1uS1VePiZfLlRvJX4ySl8ydnpzOVtrJDxnWTskalpXNEMpP01bZnVeW1ZKNzpCTiExUkYlKTVxO3VeI3JvY3JSKCNsRVlRZylqbHdnWkdycUJWYmtXT1EvUSFWSn50fTw6RkJDUzlUKllAbCVQNWJ3IXtVeVpEfU5LNXA0Old5UnFid3NhWitE'@;
put 'P0pgPnRCWEJAYih1VHo8O2VqMG1Aa1ZPKlJ2eFA7YEY8THw4fGQpVigxIkxfLDNkUXcsdXMhKzkjdHxReEFieSFxamtFdmQuYnZjRnkpbUUiWDRxQGEhdTc6YUM3LzpYMmQ9QmVFRGF+My8va0JOYCoxS0s5UyRiT3twY35JN2MxZj4xOXtwdmVDWnsuMWZEPEYyUjVuQlhtJjAld0xLcX19MWVH'@;
put 'N3V7Kk9jZEd9eSMjflJ7VjlOVWB+ODdyfDVTXjM5diVhQF9NLyFMYkgqfW5vZTw9fTd3MyEqfGZDKX5VcnIrYGVHQi59fjplJjdQcHMwXnZ1VH4kKCF+S3AwXV0yNWBAcTNLV1N2XVkjMGsrJUIiaSw+N1RHfUBIVD9hJDxVMCIhTTZUYHB0Il97WDFsV0MpZT0oISNQZTgzUTAoWFVVXmk4bXV6'@;
put 'NzFpRjs2KGIwXzk1SEhxUntobHkkJS9nJDVlRTxJVndLXWtsaDZkaSRALHFZbTZsczk2NTFPLlFWWXBgIyN+R195V0NUbUEobD1uMFNNZ01jejh4XktEZnMxPWp7XnVjSiR3c2x6Q2ZmZyxSdmFjKF5ENFg+LzNtJUk0fV5EKWs2RGNHRk59cV5CRzokcmVlWkxGUWYkfGc1SSJjNzRfSVZPR1k5'@;
put 'a0hNMHNkKnNeIyNPTShXM2pBQyJvREcrbDgqKkRAKnJLL1ZhTVFLZmE6Vk1nS3c9NSghZVJ7W0E1S3BRPz85dkRvPjNhQV1ITGtJeElmUHB7bm1JQ3ZnLiMuNUJNTUkwOis6KEJoW21VaV06WHpTcDFwMl50eUhrYyg/W3NRI05IaXgqOjtyUGs5RlFFPGxVLndXMTozdEtidUJKMlY6djFnYHE5'@;
put 'PmFPIy8wMGVlbmtiXi5iTyxbWDdCSCRyYWd6SytNQ3U/L3gvQTBSd0VIdi9LKFlQT00yIW83LDpob25OI1hNcnM5MU9BRTlYTE5yI2VWdTpjRiJaJDxaU1tNRCZlWUhPW24zJWdjKVJgJVliRjcoO0ZzQEVFaTNjdEc7fkcwMFdAPVlwc3NDeXl7YE5weyhuY00mbz9LL0VCTl5vLzo+I1FGQltJ'@;
put 'ejUyRV9gYjIxfU80ZlRuOVopNDNWRXEwT097VzJVU1d5anR1WT01MjVOXntaWjQuM29wUnk1dCs7ZFVeU2JmPkMqZj48LipTWjBXTE5tWVdtJGV7VyRSb30hRDFYZmFtYXshQVc2aV9QNSRvUFJpLGJWYjdDTTV4JD8mYDAqdHFaWUI9VmlRITVGWHRIakRXS0JZaHVwP1JJUUZDVipnUldodDs1'@;
put 'd1EmYXFHemdFKnF0TkEobjk1U0REY09bSypXMnNgQHl0NUZfRlpAXWkhPHZnWWVVNEBsdEdmWGU/YyRoOjkpKnNVeUsrRkwoaSVWaj57RiVVen41RHp6Y2E0T1BObF0mUl86dHxlZDg0U1RPWko/djVTQ0dkZGZsa0xMYk1QPXFrZ2haTUwqa25jZU9HYD5VQz5QMj8kW0xiKyFtPnEmTmxMckcs'@;
put 'X3pONVBGSzB5UT1pIy5FN2VkdGhEdSs9LCtbRE1SRkREdFNdY1U7K0ZoU2pDXjxCd0RKakNkI1ZKfmFZengrdmMjcCI+KjQ8VD0qQ3A8ZFZEcHYja1smLF1+d3xMPURTMjAyWzd8Y0taQTwqTT43M2VoZiZAPToiRmEvIzolSG1NbFNGOzVHU1Y5QSl6JUooJG03Um9mYnNLfG9rUCU4bkI/eF9V'@;
put 'NGt7YzhnbVtUQnkjKS5GcEJHdWFGYkh7UGVKVjYvSktxdD5rZmx1RFY/SVFjQ3FkbUhhMVEvRFN1X2syKUgsbzN5WDJKMiokdjhJRHJrP3ViN3pqP1pTVCsyNytDU1soIjBDfXhaYk45YTRpSlZpMXFNRjRGVGghcjdYeXxiN1pybSk9cHREb3c0Nm86dXZtZnkuPmImblRqPTl1W2pYTVQ+QkRm'@;
put 'MGBrYDVpN3IkdkpXezNIZC48U3I6RlNodjVMa25udys0WmVmeDcjTGswSVMvWWU2XytHLEpbX0k0SWh8X19hSXBLNl1xMSVSbF13YCVyNUZkek5CPEFjKnl7fUoqMDhgbXFHLHR4Sig8VEtbVkFPWishOUBbdWIzcW5IKzo4TVo7VCUlX1V5PXcoREEmSGQ0Rk8mcWRPPT9VKW1oUXh1cWdXKmtt'@;
put 'XnZbNCI8MG4qWzdTREpyJSFEQVAjMmZoSG80fUk4W0luTVdFUm1vd3J7QHA6cVNCflFBcyNMKDM5RTc5RFU6bj5EVGc2W1IpO282e2Zycis2Y2F5T08+My8zXzh7eDsvcko6WUVAeiwwS0dWRFZRPHQ2aXY7TDdrSEV1Rm5wJnV2V1o3JjsoOl5sYzRhRzxQP28xZFtMR2g4Uk8sMGN5by80VTdH'@;
put 'V2E4az1XTix1VVdVKTVJNj4sdlNER2xebDsiTGJ+VUJrdzxxYTd2NDdBMWdNODxpLm5KMzJpMT8+eXc2OWs1ZEp5Wi93Zmx5Ij01V3dGYVNkfWU0W3B+MnNnZVFDVnJaSWpWQ0JoYXJfLytjc29IQzp5c3FZQT9JSDtNQGpPRTQzYSkxR15eUk9rTzwmKjN6aDxfYEYmME17fWxIVn1kazo2UW1x'@;
put 'K1lWYyw0JWBhfGlvXnMqMkY+Qn1mYTd0ay9nJTdyaVllX0VTNlFHcURETGNbfUxXO2wjPjlATCZXPkdKS3FVfiliUXEpflBOSiZzI09FdzNtdEZPc2huXm1HRyZ9b3lYaGtlfEZMd3w1bWdfe19ZPVgoKFlTcjgjdVB6cjx8Ymxia20+WzBMJStQOV97XmxITUVuS1c/Y3QoUSVwNkN3OWFZPCZq'@;
put 'WXpoJl18RGczWSkqMl9jLDQ5bzhybndMKG47VGlzajRyeSo8RWF0RlVdeXdUUHQlNi5Ic3xoNmFPfiVoYDlzaXRNRVhLIXRtWHd0QiJUKG4ldEF1fn4reFA/KCFUYEUzUnFXM1VgbGd+SWxKRGp9UjY3N2BzbWo+O3FAcTEqJl1RPEw2PjE0dzl9fVRCTy98fTxHSiYsYDZeNT53P0N8ZihfVkY+'@;
put 'QHxSa0omKGBqLn0lcVhNTFlXSWR4WENaMF9paHwyWGZuPkk/Rl9iL200ZlRkSX5UYkA6LkN8PV5FIWVXO3JNcjJ4dVBHJjtvT0VBM1cpQVZeUDJXPToja0g/OyYiKFM+ImgkKHJfeEQ/bzhzNmQwaFQ/VERHJnIwWGg4RVFERGg+fDA7YFVXKFBVTSNkSSEpWSlMRVN2IiZkSnlFRyZiLCImNmlV'@;
put 'RCtJPVBNRWJlXz55bUpPQyZCSHEhWFFNRS5IWWBmfDFiTnFecz16UENdRWRxL0U8XWZHWVNUP19qOmJVJnssZnRhKHc0VUJ6fCFCWWxdfU5OfX1mNiJZJDVhdV8hUFEpXm9ve1VXezc8T1Qva2Y8eHslc1VdTjJ5PTFjM0liRi5iVSFQfn5jSnhoKURrJHY0XmFha04wfGgvQmFtVypAaUdOdT18'@;
put 'OE43aykzNSkkTmt8PGQ8WDgwS2JrKSp8WUReUHhtc193JmE6MypsaHFtdHVDNU90OlBlfjtPM1YmXX0xJXM2KHM6PEBRPXNkeTpefT89T3FNfkZJMj43MjpqVU5gJlEkJExHJjBgUmU1PmIydlFdfXsuT3FCa0ZoSj0sRENuW308K09xZXx0SzU+ITFDbkB9QylPcWN8KG0sNG9NcV8jciI5W117'@;
put 'c3JpLDR7P1YvT2xwSiV0KmVrZm8iT0VxSlg/cHs8ZER+UkI5UXRsZER3OShVdDlDcGpINCVPcS9AQiZVKHtQRj4jfCxpOTA4Jnw3b0xHJjtvV3xGQ2dfTC82UXRsPnUrO2UoV1BGPjl8T2RkMFJxekBMRXFoLDReaXJfemVuMmNbbV1mUyghOiZHUGJvb2Qyezl0amNObFh8cXMsXlFhdS9BRW5Q'@;
put 'QzlkOkppXTt4cklIfH5hJXoxeFQuKFpTd0tEdHFXfTVQOEkrXlg0Kn19bUhRV3Ayam1jX0ZoM0ldcmNLImZdfU5QMz4reXtMMF83PEsoXlR8Zz45ISt9bEx9cVtUUndxQUlPZCp8eHtYbFhvRlEkPjghKXg2OWZeXSgqdndeclgyaGJEaFhfVE9wJnVTb1ZYb0QlQCRNW0deViF+XjtpOUorNnJA'@;
put 'bnpSZnFnJjc1cF87MCV9TT16Kig/UWErZW0yeVBufjhMak0wRnAuYWZ+X09Qan5HXXprdF8yKiYsRH4/WV9zNWpiWkQrakUlfUlbSGEuckNObVhLcU98WHM0Pm4idlE3c3U7U243UWpqN0JEaGF+aDNPcXJAKUpsXWcjKnhVX0ArdVRlKGNORWg0fCFOZF8kK1hJZShGJnpVZU0yezlmSVFWOlsx'@;
put 'dSg/OiRbTDM0cklkNVtRNjApLDZ4WFJDel96ZUomeH4uXUkmUWBgU1ZuSXZmeD8oNWFUKF1MRXJrSDVPVV9vK3VUaiN4WDgqejY9X0V3T0UyMTR0Kk8yPWpjczw4fXUhO1o1UX5oQnZETzI4IX1RTjN3K1UiPDdpO2UlfnFEMFE2dXUpKUoubkxFfmtmfWtbYWhYRGBDdlFAJCw0JTU8JnclRF9x'@;
put 'MnhYP0AwXzt7VmM+Y21dPmBEfW0+RUxIcVhZNW9LclB7cVllV1FIbjVJfUp2OGE2XzVAdkZmZFVpSXZQeEo/Vyw6LyZ7VnosaWtyeVd9KCNrO2tuPjN5dzksfX4/SSZHYDtAMz5YeXc5TW1JdjUsLigqMlMofUpGPnV8fjwmOiNrRns7Jm9KemhOJTZHRGh0fCouYTpSTyZQNXI8UmF7RixOb3pY'@;
put 'R2tNVjVfNTIsPj1vPkgwM31zQnN2YV5QOHk/cEE3U0I+QllJYFBnVj9QNUdrZkJ2KClUJSw0PlJzX3sqY19MdEE9TGhlIVREVippbio/WlM8aj9+VG85REtSdTtgV0AoSVY0bDlEN09eOEh2YWNfPkI+ez9CX2p1W3toW2N7QkRCQyw0fCl2RXg6U3RKdiJRbDRYeGlaOHJ3cGhfI2s3IzI+YVsj'@;
put 'a0VfOiY7JERfM3MsUUkmNy9IQnhYczFwX14hPmVefFBKWk5VX0B1akk1KHYidnV1VGhzZE9Je2B8ZllLcVhrbXVTfnZBWypfQFE5Q3NTfGhhQygxfWg2dWg3fGg2dj4kfEJxNVRzfnUzRGhAfkA2YT9yKGw6R2pnMHlYbFl9PlB+d2Q/ZkIiInVGRDl+PmQjfiRCWkVNL2I3RmAqM28xbTA8b3JX'@;
put 'bylBIlowYyNWTDEjIn5IOHc8YU9YND1KQF9QMiN8ImZCeztjV1VJQDRGeUNndH1+PT1fczFWMUJVflZlI0JWM0A5YDNHNyNKQm1QbiJzPGFoYFBKd3ZVX1AqWTFnc3pNSSYrX29wZl8xXilKUigpRjYsMjpZbHZfZElnT291dVRXZ1RtO3VOWFZHQjlEbkFmdU9FNHNlezgyYTVEa1pBSG5EbmxG'@;
put 'Zyo0VCw0SHhPLDRqWDhyM0FuP1k9UShFRlRyZ15xTEtxaT9qOFEodkVFaGZ8aWhFYzhTPD5MRW8xZzJ6STU+THsvOiRCUXFdfj9nSz1ZMWJXWXhbYEIma1dLZzJfIzA0eXU8KztlczVJdk0sNFhvYnxoYyJGcUEzZSw0QWRifFQ6IX4jSXAoQ0dvTGZtPVhLJSJfL2N1fUM1aXNpfnBNLEVWTW1X'@;
put 'OlpZU0Y1ekU3fDRsNH0qRip+I2NOalArcjgpc35jWF05Mip9eUdKNGh9TUJxfnRsSjRPVVtYTy9+Q0t9YiR9SFVXYCRfZWQpa1JhfklSW3M3RmtJUntTZj19ajJwRDRRO3IzNUhiLDRHJmZ+czRVNG5oJVQrdTdNaj9hdmJ3SXZyRnpfUmlpPWpjRlNbd3MsLGh9QGJoXzhmQkQ4b0U0JWhyOCM7'@;
put 'WlVUJWhQTXRoe3tkREdiRGBFaEVyJj1YTVJGSTY1UXJyaFN5Nmsvbmk5WXdDMVR7OXxGS3Vybm9eMmRmd2xNcSh6WiImcV1ARFg4NVFMcnJ1bCF3d2phT1dWajxdMmR4YUZCKVcvLEIxZmhiM0JGYUd7X3lePlJWb0l2cXdKaSowYjo2V186cFI1bDJ+TUU7R1YpKnU1VjlffmphaT5GLDR3XilF'@;
put 'WjQsNH4uaTZjOiNrLFBbPWkwNll6U2x7RixqekFnMmojRkRkUEUpejJ0flM+fE9rdGhbMV5EIWE8P3w0SXtGLEFzbSF7e1B2aiFrLyZPZXNjOiNrTXtjczBncStQdkFrbXVZfFZPZ2h4YENxIXNPJlYuQjMpWTVsI2BjIUl2PCs1X05paX46RldFW31xdXxhSGtxTUh2ZERKP2lYMX4yNzVRV2Fk'@;
put 'RH1GdD9PRDB8aXRjNCw0SDU4cnJrUlB8cy5uSXYuKy8oQD51UWpHSHYsWiYoaFNkc3xndmxJdlZEJXpVRUZWWVtKdikrQk47Jilka100clM/TChNTS5MbHx4d3BCaUchJFYmPCZsaiw7b18pW1FFS2gqd3F5dz88KGNzVTMsNClKQE1nSTlgMzpTMGZCK2JFSiYuel9RM1dzOCNvaFA/fVp2Klc/'@;
put 'Mzw2UlVUNHJ1N0wobWVCZTdySkdENldFdGRfckQ2YWN9PkJ5SnJdSzIuRS8lKWJXPzs3YCpvOkQsLn1kWnNmZGV8fS9CO3dbYEQ6fGYuaTx2SG4xKFo/bV4zLno/alhKRChINGpAanpUREY3SFhIOkM3PElCXitLYVJac3B6Sml+YUg0VUhvVHA7ZH55ZytudTMjNXl9LzVWPzVdNiwiJShddWRG'@;
put 'cUMycF9VcGFzL3phUV8zR3lYQkVoUkJGc2lYOEs8UUxHcVd4RUZWKEd6X2YwVlp+QW9gclZaczsvJSgreihnPCZTTTlAZH5aPlpLS3hSe2V+JUp+ZHl9bE5SP0lsR1JoQyYwZ3dhfFB+V10rYCx4fmE3clExN15lUTREeCZVaFtELC50PjNRXnVrW2RmeUU8UTNHel9qPiRealtTQF1ITSZINCw6'@;
put 'JV44QmVVXUd4JmxlW0REXyRVbDFPX15oMkd0NlY8cWRDYlhlVm01eD0vSHA6JUFsKHlOVkd2THohTWpLcSJEZSZMUTwzRG0jOUwiJEhIXk4obSNETEJqJk9FJjdDNH0oWEJuYzMwVzZ0OGBiRyNXY35eSUV2eD92cHVidSpQTXc7UlNHb00+WUVyOCF9a1NkW2VUVCE/alsye1A4Z3hJRXZCanIm'@;
put 'dHAqVUshWGlHUkhNInlPYUAybmRSJnRzWHAvYjM4Q2RjTilYRSFwKXJ7VSJlNTR3Ujp1bTUuTEE4IytAJDp0KWsudj94NTRnMltLOGNsU3ZPdDE8Q1B7altBImlGOSh2RCtdNWFQKHw4Q25qKDkiQ255c1NmRj4ocz1lNzB+fWE4SSZNfSliUHFUe0B4ZV8jPyo6WXNkemR8VG9hcytjYGhGflkx'@;
put 'TmpIenc5eWdvOT9zcEA0RTQ+V34+RFBUVXhIK0J+JXpANUppM2BJSlhXZT5PcXpgMXVtfmhYekZ3U0pQZl9CWz5ENn1fcmlXNWpIVl1bX0I2fFcqJWg2UnkzP317ZFYofDAqPnZ8LzhKL0spK2JufnI0UyhVPTtjTX1RMz05XTgsLmBzOG5PcVRgcUgzc2pNKWhPL0BOJHNuUmVfTUAqIV98S3Ay'@;
put 'eWsoLC5qfmxKZ18/P3I4aH5OVHpGMVQwaUd8W1lxKW9kaVNbNkxmQSIicnVqeFpLcTg1WmBEL3l9aDUhdHVEeXJNWlpzIWNNP0B4cHtAWkYmSjpONE1uQXFNPEdiM3J8fjVoRnM/cEZXc1l6fVo1WT9OXSpvJChoJVNpdXspQnIod1pac01HSj9BL018aFkzdXdOdD5xSH1ESl11ZC99OHNZKDdR'@;
put 'QCF5fUo1O0cyL3U9alZOV3grJTN2dWF8aDNINFYmN3JjaFN7bWIpPlA+RS87T2Z+UjNINFAwV3xFfXg2endwNUMleX0sPyooRikxS0ZbWDkzSWMpPk41cCJuYT5iS1Zkdn5PKjdoJmwpSnVMRnsyejl9e2M8OShEKUpZTkA5T0pIWEo+bnReaiRZMXV+MU8mfiloPiFBeVhKVykpOE5iWGFxU3ly'@;
put 'cTBGeSprYmBqK0NJPGV7bHJuekU6cFBnXjFHOX11VTw5IiE2XndeS05INm1iO2BObSI5aXs5dXdzWTc8czpPQ095TkIiN00qfExZOX47eTY+NHZUeHh0Q25Ce0xZO31CIns7d0tlSkxOfmlXSl16d3hGUzJxIWIiZEx6WnRYKXBSaXxuXyYiODludSlCcEV4OGBqeTl9VW9NPS9KVVdVUHl7NWlK'@;
put 'cTsoPDVkMXo6d19ZMyU7SUk6WF42VjUkMl87bCM9SmlVOkZCXmkwbTkhNz9wP2dPRnxfLilhcGQmekRMaTZ1SW9PRjE2KTdrXkQ1a31jemVlRTt2VWEvZ2poN0xHQmoxM3NLZ1hOITBBIWQ/end1IUNzPSlKYWZDP296PmpKKmNENV98QmpESltFJlBpbFg6U1AyTk5MajFjPVNeMFhMaCtCJFJ9'@;
put 'IlcsZi9XXl09YTZTbE4uSyg7Uyl6NkhqMU89eXVNUy5MdzMueFtYTk1EWCF6bXkqWFJSJmwmR1FuRnRKaGoxTHIzTj8sSDZFZHBLSFhpTVI3UlVXfnMpJC8ib29nJWNKJDNCdmE2PChQfFUjTGt6OkBgSlA6ZDdvZi5RbGMjZ14jSH0uRlZ2RFlJZ1JuaXpmeCt4Kzo8eFVZM3ldaykqVGUiYFhE'@;
put 'OnUyVSVPR21tVEQxXVVVJD0qcGc1JHdYJHhwakpnTW09R1M+fHBiezAhMFF1e2xtJDc2Wml6XWltWUNRJG1LdUVaZm9xKC9HeWM+Z09zfWtlZE82UE5kbSttMHVsZ0wiPyVJZWp0O2d0KW0sdWkyXVJMXV9pXXZwJGcoXWZ7ZGxVYTxOPkJoOWFjLjRuPHdKZGl+UV9jZVVycUNHTj8/b0c9SnxQ'@;
put 'eVtOQjA8VGtFMGcrZyMhYUR+USpaLld5b1RuTmZwdFBOT0ZfVCMhQX1ScD9+RHZjTDdPTSU9K1V3c3BkTD8ieHR+Y1IyL3JRU05DJlNEZGMzY2NsQDZHUSxJPihsfjdVMEBOUTU5fVlBUSw3bWlsdUchen0rXVdHTXBVdmYuUkc0PCI2ZHMjREYsbmVvN0lQYSRWK3M1aj01RDA3TyZ6U2lnMkJq'@;
put 'cDJfb1JJc11mMlMmdnFHdEhOeX5lLmNZOEg8MGJIMVc2dGI+V286enhOc3oqZHcvPnl9QzRNOF5GXz9IQmEjMDAlNGk/Wyp5Yj1JPlBPUTIwbiVGT3lheHVvdFp3U312fkxCRmZPMmR3R1lIVzxWUl5YUkRUQGlpXVdMUkNWb05WeHZqc2JdQX1PUnZCdy5NIkM7T09VaVpMRmMoXWBXdWFyIyhV'@;
put 'SDxUQiRmVHFrUURwNmRsJltoZkdiJGZwUnd9ZH5EQFFKZ3Y/PGhwcTJ0SUBaWypkTVs9QzlLa3NrQC9IP0szRFkhem06fmdSfll7NHw5OEAvdVZ3e1hBI0tyeHJSKGh2SllHWHFmQEB7NS9HS2cjNjMkIzM7OkJVUFA6MXZVTTwyKnsmOlZMdDojTD1yY08zaEdZTmhrWHUobytZKEZoMWNlRClh'@;
put 'LHVINncqbnVaS3gocWJDS0lZPlpAZTtATXdldEkoRVBASSMkQnY/fjk+Klh8ZTE1O3phcjAyeyRuJE9lOUgyO0Z5Tjgjb0JLeD5eOVdmaT8+Myk2VCEzdzwodCFfe2w0PH5QYCtuSTMhTXFbcnZNSkJ8Y0lVPmRHIVswP01VX1RRVntUU3chblMoM1ojbGAyTUl9a3tHQmpDT3B3aDNbW082NVpX'@;
put 'UD0+KjBQPG8xdF1DW1F9eW8iJjEhaFtuZk9yRHBSLHx0b2Ixcy8+V0dRTDFgTHRTXyEzJXBneVhWJk49QG9qUykrPXJ2d1lxQD0ofCZiMmQjRnI+OCtLInspNVJpKldlI3YwdnRDdWk9Si9EbllpIVQwTlZDKUxhJjkqdjdTfjI2XjRHdlJFMFMpVDs6UjV1ezwoYEB3UiZaQmclaUlUXU9je05k'@;
put 'ZTI6ZDR5RFRCV14/U19GNGwvZSR3fTYiI19DS1U9OH5FP0JkXXR+Qk9BPSZwMiRsNTZRW1BdUUVVKnN4aEVqLlUyTzQla0M7XzJ9VUxSVDlfOGg4MSZ1OW1fejl3ZTxLMW49MylzPkt4Z2A7LnR5W253YH0kQlJDdj1OR3k/e3h8KSEvamlBXXRgSHApJFBwRTRjS05aOWJ8Mz02XkVGamJOWkdM'@;
put 'OEhpQT1UaDJuemMzQGVAUGA7NWQmNFtmPnguJT5dYGFxR2VGSGhzZ29zVHRPYXUpYyklXi9PMnU2V2lnUXt2d0k8Z2NQY3VObSI6W3tbUnxETEpUbkZvWGdXPiFxMiF6UmskaUVFUl4sMVVjQ2JvOnp1JFNxbV53TjtkWU5mcm4xR3xOKG5nUyQ3XTZSMnEqY15RbSlkU1JnNU1YIy5dZV8+Vntp'@;
put 'WylfM1doWmdVaUJ8MV05UjFwLzdkcjsrOnljN2lxc3FEdTkwXTs0cTdwYUg3T3t9ezRvcW93aTY/WnFTNiR5fChebk1wITAmTyh0cElGRkNLciUkSmpwTHBBR1pqRTh0NUdxc0VQLmJNTyVsYnU+aUNhYWlzQyVlR25Zc2hSIX4kL0leUmVvOyxMQUMqTzhFUmM4eWRjdncrO1pTYVBISHYsMXpt'@;
put 'QEFzWzU+XW1AVnpXSDpGfHlkVlVpRWwyPyRnalg8b2lYbFRQIm5yc0ZwZEIodjtjQDsvWXhtbH5yNC5NTzZaL1JaTE1zOlppamZndiJlVigrNlZJfixoRGI1MGF4Vld2RlEjfCosNiNNJiFhbm9Lcy5SO1JWRmc3ZnRAbC4kc2F+XlBvTERrcFl9USM/NERNZHFYJkU1fCY1Uko2SEprVXY7VDtA'@;
put 'JXQudHNpKEY/V3N2XilfUTs2JmRrKnkpX1spRElkJVpXaDVgMFEuZmltUFRgJTRkQyR3L0FPQTNTJSk3R2dMI0xCOW4iRl1CYylFYi8/Qk0pVDZPKHJadjB5Lk10dmU2eitJdCtdPGkkcjo5SGw5eSYpQHFRMSxAMSViRGBjSTpXXjUxeko+cCI6JjJnX1NIYF13MSxXTWFgUXEkK3ZRPjhhIm9t'@;
put 'KThNYTxITW5ob3p1WWRgdzJeVWM2OX1VWF9nKGFnTmo2fEtuaitXaT5zTWtJXlYsQFJUfEhkc0BPMVZORkRVaVJ1NVVzdmVlXX1zUk0sSyM4KltnYVcjYVY4KmJjLzBVSG8+KEx0UX5fVCx6cSo0aWppbzssSiRSXSZiUDRRXiN9RkMiLGU4LGhEQlBHeGAlbmdXXjtEUFQ+TEVNJilMWHFfM1o3'@;
put 'SEhaNi90fDM9RVQ/W2VXPUptN1QsZ0Z9VlNuKF18MXlDSjM1QGElfiZrd0R2Vmp3WyUxIUlTb110cjtnbWpUQiNvKiNaa0lmLlNxUjxdJkc6PzJSST1YNylPVmZPTjVUfl1hZUJzXz59I0VAbkZmR1ssT3E1SUN7d2N3LGhCU1JaZFY8cVt9KWFiU05zXjlAQXJAPlZQQFBNTjtkK2ExJTtnNW1Y'@;
put 'ZG4zOnJJdlF8MnhSXlZiZGRxSkNIWzxsQnJNcEIhKjxeei5gKC9Tbz07WDNLPn11U1JpKX46ZiYpeWZ2Mzt6Z1I0a3h2XjdSLkNRS25jKXUieDVOSk4uRiUwa0ExQ2dnSjJrO0IhIz4uJC4+KFZOQiV+KjI1MFNyVSxkfTNMSX5QZmNmPSV+Sys3O19TVn42IWA5TDBld0UpaG1BK0F+RSxfd294'@;
put 'fCRfXz5GKVNvWFpTbT5NdE4ublh4NWw2ZnNzOCIjS28sMG1od0djR3hkUGY4WSkycmpNY3hPYHp2dVNLPl9GQGk7I0ghQ1VsYWpLN11XaEZ9Z25iZkVDSUA+Z3JUM11mVkRONFlQLltNfFBIMH1wSjZOI3RUVGE0PU0sIWc1LiMlbTNGMEA/Q2s5ZVhrYSoqSHduUHB7NFBmSTVxLjgpZy9+Kjo3'@;
put 'TzdzZXNlOiQ7fD1MIz8/WmU8WzhTaSZrIzQ1Z3wmc2BhMn1sSl1RN3kxeCZtLmFEYmZNfXd8R0xzLG1oXzpPVFFvOkUjSW86Uk5kXm9RMCYpUDF6fm1KJTw4JUxMd2k5amFPdCFeaU10flIiMlhYXkZDZEU5RlF1MD81Nn1Tfj5aYmtRMSpUZCh5b28lbVJPXmQrbWFPP05VNH0/L1BJVzhHSmY3'@;
put 'VGN6a04veDEkfXVvXzQ1Lm9kfW1TeDAwP0o/LCw2eSQ4RGtqbDcvKWY3MyNrdVQwT0JDOTNWOjFgXyI/UWtLKCtqKENiISUoeERVMWxVVigiVmQxTS4rWERYMGRtR0c9fUNnR0VbeUJ+eT5pMSU7cXd5O2hHP34xNCpqXlBLI1daZUA2MEo3cHd6L1lBY1ssOVlydyxjejN3S3IlIkJfQl41Ki8w'@;
put 'LFl1c2ZhTF1VX2lbR2BOaF1gUjskOHlrZ2dKMCsvW3BGbWpPZ2tTdHhNJExZYFU9MnY7fCtlczd+bTR3PWlFMU42X3BwMGY/I11pNjxoYltAb1F8aSw5am5MfSU0RVpzbzRXT102c3IjI3F1Njl4ZjZSTntEXlZMTzQ4KWNmb3RdX1o8NzNiUVlhZ0I5dTUyYVl5Jlo9NWskLDE5SjJBPV4kVUN8'@;
put 'OHZIdSRbXW8xJV80Yn58UylBSjBoVlVeSD4vV2ledGZQYU4lJTBUZkcyIXAxWjVlLzBpfTRYaGxaRzROaSVRfklyKkhTZUB8PHM7PS5ybDZrRX4yejFpOmdofmIsfWpaPkcmQ1d2cDYuKn4pVzN+VlFdfUZYck98cVJ6Vit9PXFQTVZ1fT9gZmcxI2dqbntZbzBUWVk9KU9ibmc5O0B+YDhWW09I'@;
put 'WCJpXTJQNGJUW2pJLndVRVN0TT8vX1VeWDVsMyxMT3hEciteRyg8WTAhKEsqS2o1RXNST1IzUms0SFJDXUs6VmF3fC9NNklnNy8xRFhTVnxfcklgYyw+RCg5V1FGbVhda0Y6QWB3Zntda2tjMF86Yz9SY3BiWzU2T3RnR21qTkt8akdWbV1aakc7S2g7XyRlcXR+e0pROCk+JkJ+dWh6KXp2UlVe'@;
put 'KiIwNnQldixuaCYjSStLYF1eQSx+N1ZQcEdkLGAmTDMjUGAsJGprWzoxaE4oPTFIJV5+LDU+YDs+bUdKWmtvJDZiO3dfKChybDEoaHdXWnVlOHA9diVJQ0VMb2ZKVDYlIlFZPjV+Ol9sdSRVai9iKlRgTT1DKmZwJT4kMzMzaGUhb2h1cnEkS09xbT9mRyg4UVs/PFdNIk98Y3R2ZkQuYFlmW0xg'@;
put 'KitoRnVvVTtkYH5mQzw/eSldLjlZSzVNM3ImMmBhPDsrO3BfeDJSanJ5V3JVWEIkNTtePm1vZ1ZtTGNSPi44dStjcDwmfldLLEt8JEQiJC9KMj95QDlILk5oTEhvMj9BIklZVDRILyllQn46MyQ0Km5MYCx8W3sjPFtUXlsmLHk9Qjt1P2s5alUjK2t2IWM3alMrensieFUkYHdUOiVobSlGVFVq'@;
put 'U2ZaTzg7R1lnKUx1UXBbRFNALHBiUEtIdClgezlYJF18ZTFGMXNDWEkkdn1zMlgxc2kjaFV7LDAjdVMoSmRCWE8/JEZRYT1+dEJLLjR5bioxdG9RMURHLkhfUUthJlhJXzdOOnt+TlgjeEwiamU0aSllVXlmV09mQV9JKGV9RF9+dWV9cjBBWnBDV25ZXzNLRDBjdDpwbmNJYE8sTmZdfmdfblZo'@;
put 'cTBwVTFffWRUbU9oP25nUF9ydTJCfWRFPi9uTGhxKC9fIy5RckJMIXksXlRXc0tvNjovVjROVWpTcz0hem1OMV1eIyMhXzRTTDlpSSQsOGdOZUVPfTRUaWopWGpXam9PbVNmek15YlV7MWJZLGVUaU9rOVZeVnZhYmdfbngyXzliJD1GemJxakglUjMpY2tVUWBzJEt3KkBeYWxSa1UkO21pezR4'@;
put 'WExdVTBDaUkmemhwV1cvOCpebS4xSyVWKDVDa1h4YX1pX2hBVyhiJmNyMVtPUE9teCxpSlJCTik8UCM+Nm55SWxYaSZNMEpFNFM9V1JMU2oyUW5kRVttNnk2MStIYUl7aDtmSz0pZ1FjSDRTdn5PbiZrU0gifH1BI0YoPEorKztyczMjPCNDdU90aEp+czc2bl5VT3U1RVYmXSR1PyRmUG9NP0pD'@;
put 'KTEsK0IwZ3ltOVlSSzlsclszUUpsJCxVfmh9OFkqcXEucWI2bSIsTGMiWTMpNE99cUVLQCZNJkxJeWo5Z0E4P1ckYDElbEB+LjRlLDZzSXArJTp8NDF0UTFUa1suMj87dHdldWJNSUR7K143fXVWKnJrdSxQfCQvNWcoYyp9QmROaEhJKyQ+Q20zeWlhdzFRQHI7WHJHIUZaNkU6bFo5OUR1Zi8v'@;
put 'fik0Q21gNGdOfn5KLnRjYENDJHN0LmRHZ25ScXRAJSxsSVViKzNna2Y+UVZFU31TL3wxdklPOV9JX0xVdW8hbHZyfT1MeiteWF1yV3MhX2JlMVI6Kzh3KzsqN3RWLlVjSnNIZEFxUV9kemBdKHxXVkBnRSRPekJxSWMkPS99bVdOfFt+MXNeKURPM3xTdDRgRFdRSUd+cHA5Ii4vS1p3OTE9eCEv'@;
put 'fGVwYzQqKHc1dGQ2e0IhNDw/S2NXKWdVW3l8a3VSZXh4e3J+c2FzY1dAPTkoXVt6NSplL15zS1Q0fiYxcms+b2t6JjckWX5jc3J7ZCs6fHM+TTtbaUF0SkV8RjoofXt4fUhWKGd2fTJIPEBvXXpCZDlAZFpHfmwkSSVqJlBORD83Pyl4fiw/SSo/JC9WRHQ4MTVAS3Q2dldANE1mejp5UiptYmcm'@;
put 'QTZhZipHaTMkXXc9dSg3WTQ6Z0h4MCJGc246UHgpdW4xNlNzVltxJTFoLn5nUUEnKSkpLGpBfHwoakE9ZnVuY3Rpb24gVEV0KCl7cmV0dXJuIHp0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHt3YXNtQmluYXJ5OlV0ZSxsb2NhdGVGaWxlOmM9PiJzZngtd3JhcHBlciBub3AifSkpLGpBfWZ1'@;
put 'bmN0aW9uIE9FdChjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFw'@;
put 'aGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19ZnVuY3Rpb24gUEV0KGMpe3JldHVybiBjLm1hcChPRXQpfXZhciBfN2U9Y2xhc3MgRnd7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9'@;
put 'c3RhdGljIGxvYWQoKXtyZXR1cm4gUkV0KCkudGhlbihsPT5uZXcgRncobCkpfXN0YXRpYyB1bmxvYWQoKXshZnVuY3Rpb24gTEV0KCl7akEmJihqQT12b2lkIDApfSgpfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGws'@;
put 'YT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKSx2PSIiLE09IiI7dHJ5eyFmdW5jdGlvbiBGRXQoYyxsKXtsZXQgYT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmx9O1su'@;
put 'Li5hLmZpbGVzLC4uLlBFdChhLmltYWdlcyldLmZvckVhY2goZD0+Yy5jcmVhdGVGaWxlKGQucGF0aCxkLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goSSl7TT1JLm1lc3NhZ2V9TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3ko'@;
put 'Zil9aWYoIXYmJk0pdGhyb3cgRncudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybiB2fWFjeWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9ITEsdj0wLE09IiIs'@;
put 'ST0iIjt0cnl7dHJ5e2Y9aC5hY3ljbGljKGwsYSxkKSx2PWguYWN5Y2xpY19udW1fcmV2LE09aC5hY3ljbGljX291dEZpbGV9Y2F0Y2goRyl7ST1HLm1lc3NhZ2V9ST1oLmxhc3RFcnJvcigpfHxJfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koaCl9aWYoSSl0aHJvdyBGdy51bmxvYWQo'@;
put 'KSxuZXcgRXJyb3IoSSk7cmV0dXJue2FjeWNsaWM6ZixudW1fcmV2OnYsb3V0RmlsZTpNfX10cmVkKGwsYT0hMSxkPSExKXtpZighbClyZXR1cm57b3V0OiIiLGVycjoiIn07bGV0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeixmPSIiLHY9IiIsTT0iIjt0cnl7dHJ5e2gudHJlZChsLGEs'@;
put 'ZCksZj1oLnRyZWRfb3V0LHY9aC50cmVkX2Vycn1jYXRjaChJKXtNPUkubWVzc2FnZX1NPWgubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZighZiYmTSl0aHJvdyBGdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJue291dDpmLGVycjp2fX11bmZs'@;
put 'YXR0ZW4obCxhPTAsZD0hMSxoPTApe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosdj0iIixNPSIiO3RyeXt0cnl7dj1mLnVuZmxhdHRlbihsLGEsZCxoKX1jYXRjaChJKXtNPUkubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9t'@;
put 'b2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0aHJvdyBGdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIs'@;
put 'ZCl9ZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQpfXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxh'@;
put 'PSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdvcmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX1ub3AobCl7'@;
put 'cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcCIpfW5vcDIobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcDIiKX19O2Z1bmN0aW9uIHpOKGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGMpfWZ1bmN0aW9uIFM2KGMpe3JldHVybiBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9'@;
put 'ZnVuY3Rpb24gdzdlKGMsbCl7aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9ek4oYykpLnRhZz0icGF0aCI7dmFyIGg9ek4oZD1jLmF0dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7KHY9Yy5iYm94KS5jeD12Lngrdi53aWR0aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7'@;
put 'Zm9yKHZhciBJPWQucG9pbnRzLnNwbGl0KCIgIiksRz1JLm1hcChmdW5jdGlvbihQbil7dmFyIFVyPVBuLnNwbGl0KCIsIik7cmV0dXJuW1VyWzBdLXYuY3gsVXJbMV0tdi5jeV19KSxyZT1HW0cubGVuZ3RoLTFdWzBdLHVlPUdbRy5sZW5ndGgtMV1bMV0seWU9MDt5ZTxHLmxlbmd0aDt5ZSsr'@;
put 'LHJlPUVlLHVlPUJlKXt2YXIgR2U9KEVlPUdbeWVdWzBdKS1yZTtpZigwIT0oc3Q9KEJlPUdbeWVdWzFdKS11ZSkmJjA8PShwdD1yZS11ZSpHZS9zdCkmJnB0PDEvMCYmKHJlPD1wdCYmcHQ8PUVlfHxFZTw9cHQmJnB0PD1yZSkpYnJlYWt9dmFyIGR0PVtbdi5jeCtwdCx2LmN5KzBdLmpvaW4o'@;
put 'IiwiKV07Zj0oZHQ9KGR0PWR0LmNvbmNhdChJLnNsaWNlKHllKSkpLmNvbmNhdChJLnNsaWNlKDAseWUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9ek4oYykpLnRhZz0icGF0aCIsaD16TihkPWMuYXR0cmli'@;
put 'dXRlcyk7dmFyIGQsRWUsQmUscHQscXQ9ZC5jeCxtbj1kLmN5LHduPWQucngsaG49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjt2YXIgTW49bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIp'@;
put 'WzBdLnNwbGl0KCIsIiksc3Q9KEdlPU1uWzBdLXYuY3gsTW5bMV0tdi5jeSkscW49TWF0aC5zcXJ0KE1hdGgucG93KEdlLDIpK01hdGgucG93KHN0LDIpKSxncj1HZS9xbixxcj0tc3QvcW59ZWxzZSBncj0xLHFyPTA7aC5kPSJNICIrcXQrIiAiK21uKyIgbSAiKyhFZT13bipncikrIiwiKyhC'@;
put 'ZT0taG4qcXIpKyIgYSAiK3duKyIsIitobisiIDAgMSwwICIrKEdlPShwdD13biotZ3IpLUVlKSsiLCIrKHN0PS1obiotcXItQmUpKyIgYSAiK3duKyIsIitobisiIDAgMSwwICIrLUdlKyIsIistc3QrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5'@;
put 'LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIFZFdCgpe3RyeXtfN2UubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImlu'@;
put 'aXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2wuX3dvcmtlckNhbGxiYWNrcy5z'@;
put 'aGlmdCgpLmNhbGwobCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLFp0ZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rp'@;
put 'b24oYSl7fSksWnRlLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBadGUoYyxs'@;
put 'KXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQb3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIHpFdChjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7'@;
put 'aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsdj10aGlzLl9vcHRpb25zLnR3'@;
put 'ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24sdj0hMTt2YXIgTT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEk9e30sRz10aGlzLl9kaWN0aW9uYXJ5fHx7fSxyZT17fSx1ZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8'@;
put 'e307ZnVuY3Rpb24gcHQoZ3IscXI9MCxfaSl7KGZ1bmN0aW9uIHllKGdyLHFyKXt2YXIgX2k9Z3IudGFnO2lmKCJpbmRleCI9PWEpZ3Iua2V5PXFyO2Vsc2UgaWYoIiMiIT1faVswXSlpZigiaWQiPT1hKWdyLmtleT1nci5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIFBu'@;
put 'PWdyLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oVXIpe3JldHVybiJ0aXRsZSI9PVVyLnRhZ30pO1BuJiYoZ3Iua2V5PVBuLmNoaWxkcmVuLmxlbmd0aD4wP1BuLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PWdyLmtleSYmKGgmJigiZWxsaXBzZSI9PV9pfHwicG9seWdvbiI9PV9pKSYmKF9p'@;
put 'PSJwYXRoIiksZ3Iua2V5PV9pKyItIitxcil9KShncixxciksZnVuY3Rpb24gRWUoZ3IscXIpe2dyLmlkPShxcj9xci5pZCsiLiI6IiIpK2dyLmtleX0oZ3IsX2kpO3ZhciBVcj1HW2dyLmlkXTsoZnVuY3Rpb24gQmUoZ3Ipe0lbZ3IuaWRdPWdyfSkoZ3IpLGZ1bmN0aW9uIEdlKGdyLHFyKXto'@;
put 'JiZnci5pZCBpbiBHJiYoInBvbHlnb24iPT1xci50YWd8fCJlbGxpcHNlIj09cXIudGFnfHwicGF0aCI9PXFyLnRhZykmJihxci50YWchPWdyLnRhZ3x8InBvbHlnb24iPT1nci50YWcpJiYoInBhdGgiIT1xci50YWcmJihnci5hbHRlcm5hdGl2ZU9sZD13N2UocXIsZ3IpKSwicGF0aCIhPWdy'@;
put 'LnRhZyYmKGdyLmFsdGVybmF0aXZlTmV3PXc3ZShncixxcikpKX0oZ3IsVXIpLGZ1bmN0aW9uIHN0KGdyLHFyKXtpZihkJiZxciYmKCJwYXRoIj09cXIudGFnfHxnci5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1nci5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2YXIgX2k9KGdyLmFsdGVybmF0aXZl'@;
put 'TmV3fHxncikuYXR0cmlidXRlcy5kO2lmKGdyLmFsdGVybmF0aXZlT2xkKXZhciBQbj1QdGUoZ3IuYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgUG49UHRlKHFyKTsoZ3IuYWx0ZXJuYXRpdmVPbGR8fChnci5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiBhRXQoYyxsLGEsZCl7Y29u'@;
put 'c3QgaD1jLGY9aC5jbG9uZU5vZGUoKSx2PWguZ2V0VG90YWxMZW5ndGgoKSxNPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxJPVswXTtsZXQgRz0wO2NvbnN0IHJlPWQ/YTphL01hdGgubWF4KHYsTSk7Zm9yKDsoRys9cmUpPDE7KUkucHVzaChHKTtyZXR1cm4g'@;
put 'SS5wdXNoKDEpLEkubWFwKGZ1bmN0aW9uKHllKXtjb25zdCBFZT1oLmdldFBvaW50QXRMZW5ndGgoeWUqdiksQmU9Zi5nZXRQb2ludEF0TGVuZ3RoKHllKk0pO3JldHVybltbRWUueCxFZS55XSxbQmUueCxCZS55XV19KX0oUG4sX2ksZix2KX19KGdyLFVyKTt2YXIgdHI9e307Z3IuY2hpbGRy'@;
put 'ZW4uZm9yRWFjaChmdW5jdGlvbihCcil7dmFyIFlyPUJyLnRhZzsoImVsbGlwc2UiPT1Zcnx8InBvbHlnb24iPT1ZcikmJihZcj0icGF0aCIpLG51bGw9PXRyW1lyXSYmKHRyW1lyXT0wKSxwdChCcix0cltZcl0rKyxncil9KX1mdW5jdGlvbiBtbihncil7KGZ1bmN0aW9uIGR0KGdyKXtpZihN'@;
put 'JiZnci5wYXJlbnQmJiJub2RlIj09Z3IucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PWdyLnRhZyl7aWYoZ3IuY2hpbGRyZW4ubGVuZ3RoPjApdmFyIFBuPWdyLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBQbj0iIjtyZVtQbl09Z3IucGFyZW50fX0pKGdyKSxmdW5jdGlvbiBxdChn'@;
put 'cil7dmFyIF9pPWdyLnRhZztpZihNJiYhR1tnci5pZF0mJmdyLnBhcmVudCYmbTdlKGdyKSYmKCJwYXRoIj09X2l8fCJwb2x5Z29uIj09X2kpKXtpZigicG9seWdvbiI9PV9pKXt2YXIgVXI9Z3IucGFyZW50LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oYXIpe3JldHVybiJwYXRoIj09YXIudGFn'@;
put 'fSk7VXImJihnci50b3RhbExlbmd0aD1Vci50b3RhbExlbmd0aCl9dmFyIHRyPWZ1bmN0aW9uIGxFdChjKXtyZXR1cm4gZnVuY3Rpb24gb0V0KGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcz9jLnBhcmVudDpjLnBhcmVudC5wYXJlbnQucGFyZW50fShjKS5jaGls'@;
put 'ZHJlbi5maW5kKGZ1bmN0aW9uKGwpe3JldHVybiJ0aXRsZSI9PWwudGFnfSl9KGdyKSxCcj10ci5jaGlsZHJlblswXSxZcj1Cci50ZXh0LnNwbGl0KCItPiIpOzIhPVlyLmxlbmd0aCYmKFlyPUJyLnRleHQuc3BsaXQoIi0tIikpO3ZhciB3aT1ZclswXSxCaT1yZVt3aV07aWYoT2JqZWN0Lmhh'@;
put 'c093bih1ZSx3aSkpe3ZhciBoYT11ZVt3aV07aWYoKHZ0PUJpLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihhcixHcil7cmV0dXJuImciPT1hci50YWd9KSk+PTApe3ZhciBtYT1CaS5jaGlsZHJlblt2dF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKGFyLEdyKXtyZXR1cm4iYSI9'@;
put 'PWFyLnRhZ30pO0JpPUJpLmNoaWxkcmVuW3Z0XS5jaGlsZHJlblttYV19KHZ0PWhhLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihhcixHcil7cmV0dXJuImciPT1hci50YWd9KSk+PTAmJihtYT1oYS5jaGlsZHJlblt2dF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEdyLEd0KXty'@;
put 'ZXR1cm4iYSI9PUdyLnRhZ30pLGhhPWhhLmNoaWxkcmVuW3Z0XS5jaGlsZHJlblttYV0pO2Zvcih2YXIgeHQ9QmkuY2hpbGRyZW4sdnQ9MDt2dDx4dC5sZW5ndGg7dnQrKylpZigicG9seWdvbiI9PXh0W3Z0XS50YWd8fCJlbGxpcHNlIj09eHRbdnRdLnRhZ3x8InBhdGgiPT14dFt2dF0udGFn'@;
put 'fHwidGV4dCI9PXh0W3Z0XS50YWcpe3ZhciAkdD14dFt2dF07YnJlYWt9dmFyIFluPWhhLmNoaWxkcmVuO2Zvcih2dD0wO3Z0PFluLmxlbmd0aDt2dCsrKWlmKCJwb2x5Z29uIj09WW5bdnRdLnRhZ3x8ImVsbGlwc2UiPT1Zblt2dF0udGFnfHwicGF0aCI9PVluW3Z0XS50YWd8fCJ0ZXh0Ij09'@;
put 'WW5bdnRdLnRhZyl7dmFyICRuPVluW3Z0XTticmVha31nci5vZmZzZXQ9JG4mJiR0P3t4OiRuLmNlbnRlci54LSR0LmNlbnRlci54LHk6JG4uY2VudGVyLnktJHQuY2VudGVyLnl9Ont4OjAseTowfX19fShnciksZ3IuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihxcil7bW4ocXIpfSl9dGhp'@;
put 'cy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgd249X28oZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLE1uPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTt3bi5hcHBlbmQo'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gTW4uZG9jdW1lbnRFbGVtZW50fSk7dmFyIGtyPWV2KHduLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxwdChrciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyks'@;
put 'bW4oa3IpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9a3IsdGhpcy5fZGljdGlvbmFyeT1JLHRoaXMuX25vZGVEaWN0aW9uYXJ5PXJlLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKGdyLHFyLF9pKXt2YXIgUG49ZXYoZ3IpO3Jl'@;
put 'dHVybiBwdChQbixxcixfaSksbW4oUG4pLFBufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBV'@;
put 'TihjLGwpe2lmKChhPShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgQzdl'@;
put 'LGZUdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBXdGUoYyl7aWYoIShsPWZUdC5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVy'@;
put 'biBuZXcgWXRlKHtmaWxsOmxbMV0sYWxpZ246bFsyXSxzaWduOmxbM10sc3ltYm9sOmxbNF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVjaXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1bmN0aW9uIFl0ZShjKXt0aGlzLmZpbGw9'@;
put 'dm9pZCAwPT09Yy5maWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnpl'@;
put 'cm89ISFjLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9p'@;
put 'ZCAwPT09Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5jdGlvbiBTN2UoYyxsKXt2YXIgYT1VTihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsi'@;
put 'LiIrZC5zbGljZShoKzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIpfVd0ZS5wcm90b3R5cGU9WXRlLnByb3RvdHlwZSxZdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCso'@;
put 'dGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6'@;
put 'IiIpK3RoaXMudHlwZX07Y29uc3QgTTdlPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gY1R0KGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVT'@;
put 'dHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5TN2Uo'@;
put 'MTAwKmMsbCkscjpTN2UsczpmdW5jdGlvbiBnVHQoYyxsKXt2YXIgYT1VTihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0oQzdlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSx2PWQubGVuZ3RoO3JldHVybiBmPT09dj9k'@;
put 'OmY+dj9kK25ldyBBcnJheShmLXYrMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrVU4oYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNh'@;
put 'c2UoKSx4OmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiB4N2UoYyl7cmV0dXJuIGN9dmFyIFpOLGRmLEU3ZT1BcnJheS5wcm90b3R5cGUubWFwLFQ3ZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwi'@;
put 'WiIsIlkiXTshZnVuY3Rpb24geVR0KGMpe1pOPWZ1bmN0aW9uIG1UdChjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz94N2U6ZnVuY3Rpb24gZFR0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sdj0wLE09'@;
put 'Y1swXSxJPTA7aD4wJiZNPjAmJihJK00rMT5kJiYoTT1NYXRoLm1heCgxLGQtSSkpLGYucHVzaChhLnN1YnN0cmluZyhoLT1NLGgrTSkpLCEoKEkrPU0rMSk+ZCkpOylNPWNbdj0odisxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShFN2UuY2FsbChjLmdyb3VwaW5n'@;
put 'LE51bWJlciksYy50aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVy'@;
put 'YWxzP3g3ZTpmdW5jdGlvbiBoVHQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShFN2UuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLHY9dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIs'@;
put 'TT12b2lkIDA9PT1jLm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsST12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBHKHVlKXt2YXIgeWU9KHVlPVd0ZSh1ZSkpLmZpbGwsRWU9dWUuYWxpZ24sQmU9dWUuc2lnbixHZT11ZS5zeW1ib2wsc3Q9dWUuemVybyxwdD11ZS53'@;
put 'aWR0aCxkdD11ZS5jb21tYSxxdD11ZS5wcmVjaXNpb24sbW49dWUudHJpbSx3bj11ZS50eXBlOyJuIj09PXduPyhkdD0hMCx3bj0iZyIpOk03ZVt3bl18fCh2b2lkIDA9PT1xdCYmKHF0PTEyKSxtbj0hMCx3bj0iZyIpLChzdHx8IjAiPT09eWUmJiI9Ij09PUVlKSYmKHN0PSEwLHllPSIwIixF'@;
put 'ZT0iPSIpO3ZhciBobj0iJCI9PT1HZT9hOiIjIj09PUdlJiYvW2JveFhdLy50ZXN0KHduKT8iMCIrd24udG9Mb3dlckNhc2UoKToiIixNbj0iJCI9PT1HZT9kOi9bJXBdLy50ZXN0KHduKT92OiIiLE1yPU03ZVt3bl0sa3I9L1tkZWZncHJzJV0vLnRlc3Qod24pO2Z1bmN0aW9uIHFuKGdyKXt2'@;
put 'YXIgUG4sVXIsdHIscXI9aG4sX2k9TW47aWYoImMiPT09d24pX2k9TXIoZ3IpK19pLGdyPSIiO2Vsc2V7dmFyIEJyPShncj0rZ3IpPDB8fDEvZ3I8MDtpZihncj1pc05hTihncik/STpNcihNYXRoLmFicyhncikscXQpLG1uJiYoZ3I9ZnVuY3Rpb24gcFR0KGMpe2U6Zm9yKHZhciBoLGw9Yy5s'@;
put 'ZW5ndGgsYT0xLGQ9LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShn'@;
put 'cikpLEJyJiYwPT0rZ3ImJiIrIiE9PUJlJiYoQnI9ITEpLHFyPShCcj8iKCI9PT1CZT9CZTpNOiItIj09PUJlfHwiKCI9PT1CZT8iIjpCZSkrcXIsX2k9KCJzIj09PXduP1Q3ZVs4K0M3ZS8zXToiIikrX2krKEJyJiYiKCI9PT1CZT8iKSI6IiIpLGtyKWZvcihQbj0tMSxVcj1nci5sZW5ndGg7'@;
put 'KytQbjxVcjspaWYoNDg+KHRyPWdyLmNoYXJDb2RlQXQoUG4pKXx8dHI+NTcpe19pPSg0Nj09PXRyP2grZ3Iuc2xpY2UoUG4rMSk6Z3Iuc2xpY2UoUG4pKStfaSxncj1nci5zbGljZSgwLFBuKTticmVha319ZHQmJiFzdCYmKGdyPWwoZ3IsMS8wKSk7dmFyIFlyPXFyLmxlbmd0aCtnci5sZW5n'@;
put 'dGgrX2kubGVuZ3RoLHdpPVlyPHB0P25ldyBBcnJheShwdC1ZcisxKS5qb2luKHllKToiIjtzd2l0Y2goZHQmJnN0JiYoZ3I9bCh3aStncix3aS5sZW5ndGg/cHQtX2kubGVuZ3RoOjEvMCksd2k9IiIpLEVlKXtjYXNlIjwiOmdyPXFyK2dyK19pK3dpO2JyZWFrO2Nhc2UiPSI6Z3I9cXIrd2kr'@;
put 'Z3IrX2k7YnJlYWs7Y2FzZSJeIjpncj13aS5zbGljZSgwLFlyPXdpLmxlbmd0aD4+MSkrcXIrZ3IrX2krd2kuc2xpY2UoWXIpO2JyZWFrO2RlZmF1bHQ6Z3I9d2krcXIrZ3IrX2l9cmV0dXJuIGYoZ3IpfXJldHVybiBxdD12b2lkIDA9PT1xdD82Oi9bZ3Byc10vLnRlc3Qod24pP01hdGgubWF4'@;
put 'KDEsTWF0aC5taW4oMjEscXQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLHF0KSkscW4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdWUrIiJ9LHFufXJldHVybntmb3JtYXQ6Ryxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gcmUodWUseWUpe3ZhciBFZT1HKCgodWU9V3RlKHVlKSkudHlwZT0i'@;
put 'ZiIsdWUpKSxCZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihmdW5jdGlvbiB1VHQoYyl7cmV0dXJuKGM9VU4oTWF0aC5hYnMoYykpKT9jWzFdOk5hTn0oeWUpLzMpKSksR2U9TWF0aC5wb3coMTAsLUJlKSxzdD1UN2VbOCtCZS8zXTtyZXR1cm4gZnVuY3Rpb24ocHQpe3Jl'@;
put 'dHVybiBFZShHZSpwdCkrc3R9fX19KGMpLGRmPVpOLmZvcm1hdH0oe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3QgR3RlPU1hdGguUEksJHRlPTIqR3RlLG52PTFlLTYsd1R0PSR0ZS1udjtmdW5jdGlvbiBBN2UoYyl7dGhpcy5fKz1jWzBdO2Zv'@;
put 'cihsZXQgbD0xLGE9Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIEt0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD9BN2U6ZnVuY3Rpb24g'@;
put 'Q1R0KGMpe2xldCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gQTdlO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3Ro'@;
put 'O2g8ZjsrK2gpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlz'@;
put 'Ll94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMu'@;
put 'X3gxPStkfSwke3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsdil7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2fWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStm'@;
put 'KTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IHY9dGhpcy5feDEsTT10aGlzLl95MSxJPWQtbCxHPWgtYSxyZT12LWwsdWU9TS1hLHllPXJlKnJlK3VlKnVlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlz'@;
put 'Ll95MT1hfWA7ZWxzZSBpZih5ZT5udilpZihNYXRoLmFicyh1ZSpJLUcqcmUpPm52JiZmKXtsZXQgRWU9ZC12LEJlPWgtTSxHZT1JKkkrRypHLHN0PUVlKkVlK0JlKkJlLHB0PU1hdGguc3FydChHZSksZHQ9TWF0aC5zcXJ0KHllKSxxdD1mKk1hdGgudGFuKChHdGUtTWF0aC5hY29zKChHZSt5'@;
put 'ZS1zdCkvKDIqcHQqZHQpKSkvMiksbW49cXQvZHQsd249cXQvcHQ7TWF0aC5hYnMobW4tMSk+bnYmJnRoaXMuX2FwcGVuZGBMJHtsK21uKnJlfSwke2ErbW4qdWV9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKHVlKkVlPnJlKkJlKX0sJHt0aGlzLl94MT1sK3duKkl9LCR7dGhp'@;
put 'cy5feTE9YSt3bipHfWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZix2KXtpZihsPStsLGE9K2Esdj0hIXYsKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgTT1kKk1hdGguY29z'@;
put 'KGgpLEk9ZCpNYXRoLnNpbihoKSxHPWwrTSxyZT1hK0ksdWU9MV52LHllPXY/aC1mOmYtaDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke0d9LCR7cmV9YDooTWF0aC5hYnModGhpcy5feDEtRyk+bnZ8fE1hdGguYWJzKHRoaXMuX3kxLXJlKT5udikmJnRoaXMuX2FwcGVuZGBMJHtH'@;
put 'fSwke3JlfWAsZCYmKHllPDAmJih5ZT15ZSUkdGUrJHRlKSx5ZT53VHQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7dWV9LCR7bC1NfSwke2EtSX1BJHtkfSwke2R9LDAsMSwke3VlfSwke3RoaXMuX3gxPUd9LCR7dGhpcy5feTE9cmV9YDp5ZT5udiYmdGhpcy5fYXBwZW5kYEEke2R9'@;
put 'LCR7ZH0sMCwkeysoeWU+PUd0ZSl9LCR7dWV9LCR7dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtk'@;
put 'PStkfXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gazdlKCl7cmV0dXJuIG5ldyBLdGV9ZnVuY3Rpb24gU1R0KGMsbCxhLGQpe3JldHVybiBsPS1sLGQ9LWQsW2MsbF09W2MqYS1sKmQsYypkK2wqYV0sW2MsbD0tbF19ZnVuY3Rpb24gRDdlKGMsbCxh'@;
put 'LGQsaCxmLHYpe3ZhciBJPWV2KE83ZS5jYWxsKHRoaXMsZikpO2MuZGF0YShbSV0pLEhBLmNhbGwoYy5ub2RlKCksSSksSTdlKGMsbCxhLGQsaCxmLHYpfWZ1bmN0aW9uIEk3ZShjLGwsYSxkLGgsZix2KXt2YXIgTT12LnNob3J0ZW5pbmd8fDAsdWU9W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVd'@;
put 'LFswLC0zLjVdXSx5ZT1kLWwsRWU9aC1hLEJlPU1hdGguc3FydCh5ZSp5ZStFZSpFZSk7aWYoMD09QmUpdmFyIEdlPTEsc3Q9MDtlbHNlIEdlPXllL0JlLHN0PUVlL0JlO2lmKGQ9bCsoQmUtTS0xMC0uMSkqR2UsaD1hKyhCZS1NLTEwLS4xKSpzdCxmLlVSTHx8Zi50b29sdGlwKXZhciBwdD1j'@;
put 'LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksZHQ9cHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLHF0PXB0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTtlbHNlIGR0'@;
put 'PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLHF0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciBtbj1rN2UoKTttbi5tb3ZlVG8obCxhKSxtbi5saW5lVG8oZCxoKSxkdC5hdHRyKCJkIixtbiksZD1sKyhCZS1NLTEwKSpHZSxoPWEr'@;
put 'KEJlLU0tMTApKnN0O2Zvcih2YXIgd249MDt3bjx1ZS5sZW5ndGg7d24rKyl1ZVt3bl09U1R0KChobj11ZVt3bl0pWzBdLGhuWzFdLEdlLHN0KTtmb3Iod249MDt3bjx1ZS5sZW5ndGg7d24rKyl1ZVt3bl09W2QrKGhuPXVlW3duXSlbMF0saCtoblsxXV07dmFyIE1uPVtdO2Zvcih3bj0wO3du'@;
put 'PHVlLmxlbmd0aDt3bisrKXt2YXIgaG47TW4ucHVzaCgoaG49dWVbd25dKS5qb2luKCIsIikpfXZhciBNcj1Nbi5qb2luKCIgIik7cmV0dXJuIHF0LmF0dHIoInBvaW50cyIsTXIpLHRoaXN9ZnVuY3Rpb24gUjdlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT8odGhpcy5fZHJhd25FZGdlLmcu'@;
put 'cmVtb3ZlKCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpcyk6dGhpc31mdW5jdGlvbiBMN2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRnZS5nOl9vKG51bGwpfWZ1bmN0aW9uIE83ZShjKXt2YXIgbD0iIjtmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9'@;
put 'Y1thXSYmKGwrPScgIicrYSsnIj0iJytjW2FdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3QiKSx2PShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGgsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gX28o'@;
put 'ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gdi5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdlIil9ZnVuY3Rpb24gUDdlKGMsbCxhLGQsaCxmKXt2YXIgTT1ldihWN2UuY2FsbCh0aGlzLGQsaCkpO3JldHVybiBjLmRhdGEo'@;
put 'W01dKSxIQS5jYWxsKGMubm9kZSgpLE0pLEY3ZShjLGwsYSxoKSx0aGlzfWZ1bmN0aW9uIEY3ZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vs'@;
put 'c2UgZj1jO3ZhciB2PWYuc2VsZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLE09Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7aWYoMCE9di5zaXplKCkpe3ZhciBJPXYubm9kZSgpLmdldEJCb3goKTtJLmN4PUkueCtJLndpZHRoLzIsSS5jeT1J'@;
put 'LnkrSS5oZWlnaHQvMn1lbHNlIDAhPU0uc2l6ZSgpJiYoST17eDorTS5hdHRyKCJ4IikseTorTS5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorTS5hdHRyKCJ4IiksY3k6K00uYXR0cigieSIpfSk7cmV0dXJuIHYuZWFjaChmdW5jdGlvbihHLHJlKXt2YXIgdWU9X28odGhpcyk7aWYo'@;
put 'dWUuYXR0cigiY3giKSl1ZS5hdHRyKCJjeCIsUzYobCkpLmF0dHIoImN5IixTNihhKSk7ZWxzZSBpZih1ZS5hdHRyKCJwb2ludHMiKSl7dmFyIHllPXVlLmF0dHIoInBvaW50cyIpLnRyaW0oKTt1ZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIEhFdChmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0'@;
put 'KCIgIikpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW1M2KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxTNigrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9p'@;
put 'bigiLCIpfSkpLmpvaW4oIiAiKX0oeWUsbC1JLmN4LGEtSS5jeSkpfWVsc2V7dmFyIEVlPXVlLmF0dHIoImQiKTt1ZS5hdHRyKCJkIixmdW5jdGlvbiBORXQoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1'@;
put 'bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bUzYoK2wrICt2LnNwbGl0KCIsIilbMF0pLFM2KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShm'@;
put 'dW5jdGlvbih2LE0sSSl7cmV0dXJuIHYuY29uY2F0KE0sZltJXSl9LFtdKS5qb2luKCIiKX0oRWUsbC1JLmN4LGEtSS5jeSkpfX0pLDAhPU0uc2l6ZSgpJiZNLmF0dHIoIngiLFM2KCtNLmF0dHIoIngiKStsLUkuY3gpKS5hdHRyKCJ5IixTNigrTS5hdHRyKCJ5IikrYS1JLmN5KSksdGhpc31m'@;
put 'dW5jdGlvbiBIN2UoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiBON2UoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3Ro'@;
put 'aXMuX2RyYXduTm9kZS5nOl9vKG51bGwpfWZ1bmN0aW9uIFY3ZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19'@;
put 'Iiwic3ZnIiwiZG90IiksTT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIF9vKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIE0uZG9jdW1lbnRFbGVtZW50fSku'@;
put 'c2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIFdOKGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZp'@;
put 'elVSTCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlw'@;
put 'ZToiZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBl'@;
put 'OiJ2ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIFJUdCgpe1dOKHNlbGYpfWZ1bmN0aW9uIExUdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtXTihsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIFh0ZShjLGwpe2lmKHRoaXMu'@;
put 'X29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmlu'@;
put 'Z0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxsIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qu'@;
put 'a2V5cyhsKSl0aGlzLl9vcHRpb25zW2FdPWxbYV07ZWxzZSJib29sZWFuIj09dHlwZW9mIGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixoPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUi'@;
put 'JiYoZD0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihoPSExKSxkfHxoKXt2YXIgdj1ndGUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PV9vKHRoaXMpLmF0dHIoInR5cGUiKXx8X28odGhpcykuYXR0cigic3JjIikmJl9vKHRoaXMp'@;
put 'LmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PXYuc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3Jr'@;
put 'ZXIuJyksZD0hMSxoPSExKToodGhpcy5fdml6VVJMPXYuYXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRy'@;
put 'dWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0IEc9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKFdOLnRvU3RyaW5nKCkrIigiK0xUdC50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5l'@;
put 'dyBTaGFyZWRXb3JrZXIoRyksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxi'@;
put 'YWNrcz1bXX1lbHNlIGlmKGQpe3ZhciBNPW5ldyBCbG9iKFtXTi50b1N0cmluZygpKyIoIitSVHQudG9TdHJpbmcoKSsiKSgpIl0pLEk9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTSk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoSSksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIs'@;
put 'dGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIF83ZS5sb2FkKCkudGhlbigoRz0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1HLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3Ro'@;
put 'aXMuX3NlbGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRp'@;
put 'b249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NF'@;
put 'bmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPW10ZSguLi50aGlzLl9ldmVudFR5cGVzKSxWRXQuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6'@;
put 'X189dGhpc31mdW5jdGlvbiBZTihjLGwpe3JldHVybiBfbyhjKS5ncmFwaHZpeihsKX1rN2UucHJvdG90eXBlPUt0ZS5wcm90b3R5cGUsWHRlLnByb3RvdHlwZT1ZTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlh0ZSxlbmdpbmU6ZnVuY3Rpb24gSkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25z'@;
put 'LmVuZ2luZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIFFFdChjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gZVR0KGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3Io'@;
put 'IklsbGVnYWwga2V5TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gdFR0'@;
put 'KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIG5UdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gclR0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVz'@;
put 'PWMsYyYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBpVHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIGFU'@;
put 'dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIHNUdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gSnh0KGMpe3JldHVybiB0aGlzLl9v'@;
put 'cHRpb25zLnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/cDdlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlv'@;
put 'cj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gUXh0KGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpv'@;
put 'b21CZWhhdmlvcjpmdW5jdGlvbiBuRXQoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIHJFdCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gZUV0KGMpe3JldHVybiB0aGlz'@;
put 'Ll9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gdEV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gY0V0KGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlz'@;
put 'Ll9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9NTihmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249RHRlKHRoaXMuX3RyYW5zaXRpb25GYWN0'@;
put 'b3J5KCkpLHY3ZS5jYWxsKHRoaXMsYyl9LmJpbmQodGhpcyksMCk6djdlLmNhbGwodGhpcyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIEJFdChjLGwsYSxkKXtpZih0aGlzLl93b3JrZXIpWnRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1'@;
put 'bmN0aW9uKGYpe2QuY2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxk'@;
put 'b3Q6ZnVuY3Rpb24gakV0KGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyks'@;
put 'dGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKE0pe3N3aXRjaChNLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IE0uZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKE0uZXJyb3IpO2JyZWFr'@;
put 'O2Nhc2UiZG9uZSI6ekV0LmNhbGwodGhpcyxNLnN2ZyxsKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIHNFdCgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gVUV0KGMsbCl7'@;
put 'dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIFpFdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1EdGUo'@;
put 'YyksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIFdFdChjKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIEl4dChjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGlu'@;
put 'IGw9bnVsbD09bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgZDQoW1tjXV0sRHh0LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIFlFdChjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9i'@;
put 'amVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gR0V0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9u'@;
put 'ICRFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBLRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gWEV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6'@;
put 'ZnVuY3Rpb24gcUV0KGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246ZnVuY3Rpb24gb1R0KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBsVHQoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVu'@;
put 'dHM6ZnVuY3Rpb24gYlR0KGMpe3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChJPT5JLmxlbmd0aCkpO2ZvcihsZXQgST0wO0k8ZC5sZW5ndGg7SSsrKXtsZXQgRz1kW0ldO2FbR109W107dmFyIHYsTSxmPXRoaXM7dGhpcy5vbihH'@;
put 'KyIubG9nIixjP2Z1bmN0aW9uKCl7dmFyIHJlPURhdGUubm93KCksdWU9YVtHXS5sZW5ndGg7YVtHXS5wdXNoKHJlKTt2YXIgeWU9IiI7aWYoeWUrPSJFdmVudCAiLHllKz1kZigiID4yIikoSSkrIiAiLHllKz1HKyIgIi5yZXBlYXQoaC1HLmxlbmd0aCkseWUrPWRmKCIgPjUiKShyZS1sKSsi'@;
put 'ICIsImluaXRFbmQiIT1HJiYoeWUrPWRmKCIgPjUiKShyZS1hLnN0YXJ0W3VlXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PUcmJih5ZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK2RmKCIgPjUiKShyZS1hLmxheW91dEVuZFt1ZV0pKSwicmVuZGVyRW5kIj09RyYmZi5fdHJhbnNpdGlvbiYm'@;
put 'KHllKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrZGYoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0ocmUtYS5yZW5kZXJTdGFydFt1ZV0pKSx2PWYuX3RyYW5zaXRpb24uZGVsYXkoKSxNPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PUcpe3Zh'@;
put 'ciBFZT1yZS1hLnJlbmRlclN0YXJ0W3VlXTt5ZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK2RmKCIgPjUiKShyZS1hLnJlbmRlclN0YXJ0W3VlXSkseWUrPSIgZXhwZWN0ZWQgIitkZigiID41IikodikseWUrPSIgZGlmZiAiK2RmKCIgPjUiKShFZS12KX1pZigidHJhbnNpdGlvbkVu'@;
put 'ZCI9PUcpe3ZhciBCZT1yZS1hLnRyYW5zaXRpb25TdGFydFt1ZV07eWUrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIitkZigiID41IikoQmUpLHllKz0iIGV4cGVjdGVkICIrZGYoIiA+NSIpKE0pLHllKz0iIGRpZmYgIitkZigiID41IikoQmUtTSl9Y29uc29sZS5sb2coeWUpLGw9cmV9'@;
put 'Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIF9UdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBNVHQoYyxsLGEs'@;
put 'ZCxoLGY9e30pe2lmKChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PV9vKG51bGwpO2Vsc2V7dmFyIEc9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRh'@;
put 'UHJvcGFnYXRpb24oImciKSx1ZT1ldihPN2UuY2FsbCh0aGlzLGgpKTt2PUcuYXBwZW5kKCJnIikuZGF0YShbdWVdKSxIQS5jYWxsKHYubm9kZSgpLHVlKSxEN2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6dix4MTpjLHkxOmwseDI6YSx5Mjpk'@;
put 'LGF0dHJpYnV0ZXM6aH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIHhUdChjLGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciB2PXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBoPU9iamVj'@;
put 'dC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaCksdGhpcy5fZHJhd25FZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWQsIXYuZW1wdHkoKXx8aC5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52'@;
put 'aXMiKXx8KHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz12KSx2LmVtcHR5KCl8fEQ3ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgs'@;
put 'ZiksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIEVUdChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduRWRnZS5nLGg9dGhpcy5fZHJhd25FZGdlLngxLGY9dGhpcy5f'@;
put 'ZHJhd25FZGdlLnkxLHY9dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRnZS55Mj1sLEk3ZShkLGgsZixjLGwsdixhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gVFR0KGMpe2lmKCF0aGlzLl9kcmF3bkVk'@;
put 'Z2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgbD10aGlzLl9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFyIHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVj'@;
put 'dFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxNPXYuZGF0dW0oKSxJPXRoaXMuX2V4dHJhY3REYXRhKGwsTS5jaGlsZHJlbi5sZW5ndGgsdi5kYXR1bSgpKTtyZXR1cm4gTS5jaGlsZHJlbi5wdXNoKEkpLEZ0ZShsLEkpLHRo'@;
put 'aXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpSN2UscmVtb3ZlRHJhd25FZGdlOlI3ZSxkcmF3bkVkZ2VTZWxlY3Rpb246TDdlLGRyYXduRWRnZVNlbGVjdGlvbjpMN2UsZHJhd05vZGU6ZnVuY3Rpb24gQVR0KGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFz'@;
put 'c2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9X28obnVsbCk7ZWxzZXt2YXIgST10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLHJlPWV2KFY3'@;
put 'ZS5jYWxsKHRoaXMsYSxkKSk7Zj1JLmFwcGVuZCgiZyIpLmRhdGEoW3JlXSksSEEuY2FsbChmLm5vZGUoKSxyZSksUDdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVE'@;
put 'cmF3bk5vZGU6ZnVuY3Rpb24ga1R0KGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxk'@;
put 'PU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlz'@;
put 'Ll9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8UDdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURy'@;
put 'YXduTm9kZTpmdW5jdGlvbiBEVHQoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUu'@;
put 'eD1jLHRoaXMuX2RyYXduTm9kZS55PWwsZC5lbXB0eSgpfHxGN2UoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIElUdChjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJh'@;
put 'd25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXAp'@;
put 'dmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLE09KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJv'@;
put 'cGFnYXRpb24oInRleHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtNLnRleHQoYS5sYWJlbHx8Yyk7dmFyIHJlPXRoaXMuX3NlbGVj'@;
put 'dGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksdWU9cmUuZGF0dW0oKSx5ZT10aGlzLl9leHRyYWN0RGF0YShsLHVlLmNoaWxkcmVuLmxlbmd0aCxyZS5kYXR1bSgpKTtyZXR1cm4gdWUuY2hpbGRyZW4ucHVz'@;
put 'aCh5ZSksRnRlKGwseWUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTpIN2UscmVtb3ZlRHJhd25Ob2RlOkg3ZSxkcmF3bk5vZGVTZWxlY3Rpb246TjdlLGRyYXduTm9kZVNlbGVjdGlvbjpON2UsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIHVFdCgpe3JldHVy'@;
put 'biB0aGlzLl9ncmFwaHZpelZlcnNpb259fSwkOS5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gT1R0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLE1OKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9'@;
put 'LmJpbmQodGhpcyksMCkpOmw9bmV3IFh0ZSh0aGlzLGMpLGx9LCQ5LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIFBUdChjKXtyZXR1cm4gX28odGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGMpOm51bGwpfTt2YXIgRlR0PWIo'@;
put 'OTgwODMpO2Z1bmN0aW9uIEhUdChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBOVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmxpYnJh'@;
put 'cmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIFZUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMjYsMikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZ2koZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsSFR0LDEs'@;
put 'MCwiY2xyLWljb24iLDI3KSg1LE5UdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1kYSgzKSxkPUxlKCk7ZmUoMiksZmkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIs'@;
put 'YS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEJUdChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBqVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9ZGEo'@;
put 'MyksZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiB6VHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJl'@;
put 'ZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM2LDMpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gZ2koZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1'@;
put 'cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCksZ3QoNCxCVHQsMSwwLCJjbHItaWNvbiIsMjcpKDUsalR0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYo'@;
put 'MiZjKXtjb25zdCBhPWRhKDMpLGQ9TGUoMikuJGltcGxpY2l0O2ZlKDIpLGZpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBVVHQoYyxsKXsxJmMmJld0'@;
put 'KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gWlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksTGUoKTtjb25zdCBoPWRhKDMpLGY9TGUoKS4kaW1wbGljaXQsdj1MZSgzKTtyZXR1cm4gaC52YWx1ZT0i'@;
put 'IixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBXVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM5LDMpLHBpKCJu'@;
put 'Z01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0O3JldHVybiBnaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0'@;
put 'dXJuIEN0KExlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsVVR0LDEsMCwiY2xyLWljb24iLDI3KSg1LFpUdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1kYSgzKSxkPUxlKCkuJGltcGxpY2l0O2ZlKDIpLGZpKCJu'@;
put 'Z01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBZVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0'@;
put 'MCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9TGUoKS4kaW1wbGljaXQsdj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksV3QoMiwiY2xyLWljb24iLDQxKSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoNCk7ZmUoKSxUcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxMcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIEdUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5v'@;
put 'ZGUiLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLHBpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13'@;
put 'dChhKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50YWJsZU9uQ2xp'@;
put 'Y2soaC5UQUJMRVVSSSxoLGYpKX0pLFd0KDIsImNsci1pY29uIiwzOCksT2UoMyksaGUoKSxndCg0LFdUdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsWVR0LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIs'@;
put 'YS5leHBhbmRlZCksZmkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxNZSgiaWQiLGEuVEFCTEVVUkkpLGZlKDIpLExyKCIgIixhLlRBQkxFTkFNRSwiICIpLGZlKCksTWUoIm5nSWYiLGEuY29sdW1u'@;
put 'cyksZmUoKSxNZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gJFR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIEN0'@;
put 'KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxwaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzMp'@;
put 'LEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0LGY9TGUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsQ3QoZi5saWJyYXJ5T25DbGljayhmLmxpYnx8IiIsaCkpfSksV3QoMiwiY2xyLWljb24iLDM0KSxPZSgzKSxoZSgpLGd0KDQselR0LDYsMywi'@;
put 'Y2xyLXRyZWUtbm9kZSIsNSkoNSxHVHQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksZmkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2Fk'@;
put 'aW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLExyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gS1R0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSwkVHQsNiw3LCJjbHItdHJlZS1u'@;
put 'b2RlIiwzMSksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBYVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1m'@;
put 'dW5jdGlvbiBxVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxXdCgxLCJjbHItaWNvbiIsNDUpLGRlKDIsInAiLDQ2KSxPZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIEpUdChjLGwpe2lmKDEmYyYmKGRlKDAsImgzIiw1NSksT2Uo'@;
put 'MSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksTHIoIiAiLGEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVu'@;
put 'Y3Rpb24gUVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MyksZ3QoMSxKVHQsMiwxLCJoMyIsNTQpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVu'@;
put 'Y3Rpb24gZUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLE9lKDEpLGRlKDIsImEiLDU2KSxPZSgzKSxoZSgpLE9lKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLExyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLGZlKCksTWUoInJvdXRlckxp'@;
put 'bmsiLCIvdmlldy9kYXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxmZSgpLFNyKGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxmZSgpLExyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gdEF0'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5kb3dubG9hZFBORygpKX0pLE9lKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gbkF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUo'@;
put 'MCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5kb3dubG9hZENTVigpKX0pLE9lKDEsIiBDU1YgIiksaGUoKX19ZnVuY3Rpb24gckF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJk'@;
put 'aXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLmRvd25sb2FkU1ZHKCkpfSksT2UoMiwiU1ZHIiksaGUoKSxndCgzLHRBdCwyLDAsImRpdiIsNjcpLGRlKDQsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUo'@;
put 'MykuZG93bmxvYWREb3QoKSl9KSxPZSg1LCJEb3QiKSxoZSgpLGd0KDYsbkF0LDIsMCwiZGl2Iiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMyksTWUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLGZlKDMpLE1lKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVu'@;
put 'Y3Rpb24gaUF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSxwaSgibmdNb2RlbENoYW5nZSIs'@;
put 'ZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKTtyZXR1cm4gZ2koZi5yZWZyZXNoQ2FjaGUsaCl8fChmLnJlZnJlc2hDYWNoZT1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiKSxPZSgzLCJSZWZyZXNoIENhY2hlIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLGZp'@;
put 'KCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIGFBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikubGltaXREb3REZXB0aD0hMCl9KSxPZSgy'@;
put 'LCIgTGltaXQgZGVwdGggIiksaGUoKSxkZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMSxDdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0'@;
put 'ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksV3QoNSwiaW5wdXQiLDYxKSxkZSg2LCJsYWJlbCIpLE9lKDcsIkJhY2t3YXJkIiksaGUoKSgpLGRlKDgsImRpdiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmZv'@;
put 'cndhcmRMaW5lYWdlPSEwLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxXdCg5LCJpbnB1dCIsNjEpLGRlKDEwLCJsYWJlbCIpLE9lKDExLCJGb3J3YXJkIiksaGUoKSgpKCksZGUo'@;
put 'MTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxPZSgxNCwiIERvd25sb2FkICIpLFd0KDE1LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoMTYsckF0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxoZSgpLGd0KDE3LGlBdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2'@;
put 'NCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNSksTWUoImNoZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSxNZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksZmUoNCksTWUoImRpc2FibGVkIiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxmZSg0KSxNZSgibmdJZiIsYS5j'@;
put 'b2x1bW4pfX1mdW5jdGlvbiBzQXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3MyksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gb0F0KGMsbCl7MSZjJiZXdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24gbEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3'@;
put 'NSksZ3QoMixvQXQsMSwwLCJzcGFuIiw3NiksaGUoKSxXdCgzLCJkaXYiLDc3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMiksTWUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiBjQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxndCgyLHNB'@;
put 'dCwyLDAsInNwYW4iLDcxKSgzLGxBdCw0LDEsImRpdiIsNzIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO1RyKCJtdC0yIixhLnRhYmxlRmxhZyksZmUoMiksTWUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiB1QXQo'@;
put 'YyxsKXtpZigxJmMmJihhaSgwKSxndCgxLFFUdCwyLDEsImRpdiIsNDcpLGRlKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxndCg1LGVBdCw1LDQsInNwYW4iLDExKSxoZSgpLGd0KDYsYUF0LDE4LDQsImRpdiIsNTEpLGhlKCksZ3QoNyxjQXQsNCw0LCJkaXYiLDUy'@;
put 'KSxoZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmdyYXBoQ29udGFpbmVyKSxmZSg0KSxNZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxmZSgpLE1lKCJuZ0lmIixhLmdyYXBo'@;
put 'Q29udGFpbmVyKX19ZnVuY3Rpb24gZEF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5yZW5kZXJUb0Rvd25sb2FkKCJQTkciKSl9KSxPZSgxLCIgUE5HICIpLGhlKCl9fWZ1bmN0aW9u'@;
put 'IGhBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnJlbmRlclRvRG93bmxvYWQoIlNWRyIpKX0pLE9lKDIsIlNWRyIpLGhlKCksZ3QoMyxk'@;
put 'QXQsMiwwLCJkaXYiLDY3KSxkZSg0LCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLE9lKDUsIiBEb3QgIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1M'@;
put 'ZSgpO2ZlKDMpLE1lKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KX19Y29uc3QgZkF0PWIoOTc1ODYpO2xldCBHTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMu'@;
put 'cm91dGU9aCx0aGlzLnJvdXRlcj1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1JLHRoaXMuaGVscGVyU2VydmljZT1HLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMu'@;
put 'ZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNo'@;
put 'PSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJs'@;
put 'ZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9'@;
put 'MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKHYsTSxJLEc9ITEpe00uY29sdW1ucz8oTS5leHBhbmRlZD0hTS5leHBhbmRlZCwhMD09PU0uZXhwYW5kZWQm'@;
put 'JihmLnRhYmxlPXYsR3x8Zi5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpKTooTS5leHBhbmRlZD0hTS5leHBhbmRlZCxNLmxvYWRpbmdDb2x1bW5zPSEwLGYudGFibGU9dixmLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPU0uTElCTkFNRSsiLiIrTS5UQUJMRU5BTUUseWllbGQgZi5z'@;
put 'ZWxlY3RUYWJsZSh2LE0pLEd8fGYub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKEkudGFibGVzLE0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLmNvbHVtbnNM'@;
put 'aXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3t0YWJsZXVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGFjb2xzIixmKS50aGVuKHY9PntoLmNvbHVtbnNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGFjb2xzLGguY29sdW1uc0xpc3QmJmgu'@;
put 'Y29sdW1uc0xpc3QubGVuZ3RoPjAmJihkLmNvbHVtbnM9aC5jb2x1bW5zTGlzdCxkLmV4cGFuZGVkPSEwLGQubG9hZGluZ0NvbHVtbnM9ITEpfSkuY2F0Y2godj0+diksaC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlz'@;
put 'LmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5z'@;
put 'dHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXt2YXIgaD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2Qu'@;
put 'aW5Gb3JlZ3JvdW5kPSEwLGQudGFibGVzP2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQ6KGQubG9hZGluZ1RhYmxlcz0hMCx5aWVsZCBoLnNlbGVjdExpYnJhcnkoYSxkKSksaC5jb2xsYXBzZVRyZWVJdGVtcyhoLmxpYnJhcnlMaXN0LGQpfSkoKX1zZWxlY3RMaWJyYXJ5KGEsZCl7dmFyIGg9dGhp'@;
put 'cztyZXR1cm4gUShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7bGlidXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbih2PT57aC50YWJsZXNM'@;
put 'aXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRhYmxlc0xpc3QubGVuZ3RoPjAmJihkLnRhYmxlcz1oLnRhYmxlc0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNv'@;
put 'bHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50'@;
put 'cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksSm4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNT'@;
put 'ZWFyY2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe0puLmxpbmVhZ2UubGlicmFy'@;
put 'eUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxKbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LEpuLmxpbmVhZ2UuY29sdW1uc0xpc3Q9dGhpcy5jb2x1bW5zTGlzdCxKbi5saW5lYWdlLmxpYj10aGlzLmxpYixKbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsSm4ubGluZWFnZS5j'@;
put 'b2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PUpuLmxpbmVhZ2UubGlicmFyeUxpc3QsdGhpcy50YWJsZXNMaXN0PUpuLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PUpuLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJp'@;
put 'ZXNTZWFyY2g9Sm4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgoYSl7bGV0IGQ7dGhpcy5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVl'@;
put 'cnlQYXJhbXM6ZH0pfW5nT25Jbml0KCl7Sm4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFnZSI7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9y'@;
put 'YWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiksdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0'@;
put 'aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtKbi5saW5lYWdl'@;
put 'LmxpYnJhcnlMaXN0JiYoSm4ubGluZWFnZS5saWJyYXJ5TGlzdC5sZW5ndGg+MD9hLmxvYWRHbG9iYWxEYXRhKCk6eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkudGhlbih2PT57YS5saWJyYXJ5TGlzdD12LmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJz'@;
put 'LGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyeUxpc3QpLGEubGlicmFyeUxpc3QmJmEubGlicmFyeUxpc3QubGVuZ3RoPjAmJihhLmxpYj1hLmxpYnJhcnlMaXN0WzBdLkxJQlJBUllJRCksYS5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxhLnJvdXRlLnF1'@;
put 'ZXJ5UGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRlQ2hhbmdlKCl9KSxhLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25Sb3V0ZUNoYW5nZSgpfSkpfSkoKX1vblJvdXRlQ2hhbmdlKCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGlt'@;
put 'ZW91dD1zZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5jb2x1cmksZD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5kaXJlY3Rpb24saD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZWlkLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVy'@;
put 'eVBhcmFtcy5tYXhfZGVwdGg7YSYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLmNvbHVtbj1hLHRoaXMuZ2VuZXJhdGVHcmFwaChhLGQsZikpLCF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpJiZoJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0i'@;
put 'Rk9SV0FSRCI9PT1kLHRoaXMudGFibGU9aCx0aGlzLmdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKGgsZCxmKSl9LHRoaXMuZGVib3VuY2VUaW1lKX1uZ0FmdGVyQ29udGVudEluaXQoKXt9ZGlyZWN0aW9uVGV4dCgpe3JldHVybiB0aGlzLmZvcndhcmRMaW5lYWdlPyJGT1JXQVJEIjoiUkVWRVJT'@;
put 'RSJ9b25HZW5lcmF0ZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLmNvbHVtbj90aGlzLmNvbHVtbi5zdWJzdHJpbmcodGhpcy5jb2x1bW4uaW5kZXhPZigiXFwiKSsxKTpudWxsO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvY29sdW1u'@;
put 'LyIrZCsiLyIrYSl9b25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy50YWJsZS5pbmNsdWRlcygiXFwiKT90aGlzLnRhYmxlLnNwbGl0KCJcXCIpWzFdOnRoaXMudGFibGU7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcv'@;
put 'bGluZWFnZS8iK2QrIi8iK2EpfWdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCB2PXtTQVNDb250cm9sVGFibGU6W3t0YWJsZV9pZDphLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKX1dfTtyZXR1cm4idW5kZWZp'@;
put 'bmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLnRhYmxlX2lkJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoKSIsInRhYmxlX2lkIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFi'@;
put 'bGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKE0sSSk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaHRhYmxlbGlu'@;
put 'ZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBHPVEoZnVuY3Rpb24qKHJlKXtpZihyZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90'@;
put 'aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv'@;
put 'dmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiByZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK3JlLmFkYXB0'@;
put 'ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgdWU9cmUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwseWU9IiI7Zm9yKGxldCBFZT0wO0VlPHVlLmxlbmd0aDtFZSsrKXllKz11bmVzY2FwZSh1ZVtFZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPXJlLmFkYXB0ZXJSZXNwb25z'@;
put 'ZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgRWU9Zi5saWJyYXJ5TGlzdC5maW5kKEJlPT5yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhCZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKEVlKXtsZXQgQmU7aWYoeWllbGQg'@;
put 'Zi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKEJlPUVlLnRhYmxlcy5maW5kKEdlPT5HZS5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLEJlKSl7aWYoZi50'@;
put 'YWJsZT1CZS5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBHZT1mLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO3NldFRpbWVvdXQoKCk9PntsZXQgc3Q9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke0dlfSddYCk7c3QmJnN0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9u'@;
put 'Q2xpY2soQmUuVEFCTEVVUkksQmUsRWUsdm9pZCAwIT09ZCl9RWUmJihFZS5leHBhbmRlZD0hMCksQmUmJihCZS5leHBhbmRlZD0hMCl9fWYudml6SW5wdXQ9eWV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6'@;
put 'L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9cmUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwLHJlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9cmUuYWRhcHRlclJlc3Bv'@;
put 'bnNlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlvbihyZSl7cmV0dXJuIEcuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goRz0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1jYW5jZWxSZW5k'@;
put 'ZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlz'@;
put 'LmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe3N3aXRjaCh0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9hZFNWRygpfXRoaXMucGVuZGlu'@;
put 'Z1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMuYnVpbGRHcmFwaCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iUE5HIix0'@;
put 'aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlNWRyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNn'@;
put 'cmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgTSxmPWgucXVlcnlTZWxlY3RvcigidGl0bGUiKS5pbm5lckhUTUwsdj1hLmZpbmQoST0+SS5NRVRBSUQ9PT1mKTt2JiYoTT0iVEFCTEUiPT09di5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK3YuTUVUQU5BTUU6Ii92aWV3L21ldGFkYXRh'@;
put 'L29iamVjdC8iK3YuTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIiKSxoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixJPT57dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlv'@;
put 'biooKXtsZXQgdj17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOmF8fGYuY29sdW1uLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKSxyZWZyZXNoOmYucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLmNvbHVyaSYmZi5ldmVu'@;
put 'dFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKHYuU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFw'@;
put 'aENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChNLEkpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIEc9UShmdW5jdGlvbioocmUpe2lmKHJlLmFkYXB0'@;
put 'ZXJSZXNwb25zZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJl'@;
put 'bmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHJlLmFkYXB0ZXJSZXNwb25zZSlyZXR1'@;
put 'cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK3JlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQk5BTUUsZi5saW5lYWdlQ29sdW1u'@;
put 'TmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9cmUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwO2xldCB1ZT1yZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcyx5ZT0iIjtmb3IobGV0IEVlPTA7RWU8dWUubGVuZ3RoO0VlKyspeWUrPXVuZXNjYXBlKHVl'@;
put 'W0VlXS5TVFJJTkcpKyJcbiI7aWYoZi52aXpJbnB1dD15ZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5mbGF0ZGF0YT1yZS5hZGFwdGVyUmVz'@;
put 'cG9uc2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IEJlLEVlPWYubGlicmFyeUxpc3QuZmluZChHZT0+cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoR2U/LkxJQlJBUllJRD8udG9VcHBlckNhc2UoKSkpO0VlJiYoeWllbGQg'@;
put 'Zi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKEJlPUVlLnRhYmxlcy5maW5kKEdlPT5HZS5UQUJMRVVSST09PXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQlVSSSksQmUmJmYudGFibGVPbkNsaWNrKEJlLlRBQkxFVVJJLEJlLEVlLCEwKS50aGVuKCgp'@;
put 'PT57bGV0IEdlPUJlLlRBQkxFVVJJO2lmKEdlKXtjb25zdCBzdD1HZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtsZXQgcHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3N0fSddYCk7c2V0VGltZW91dCgoKT0+e3B0JiYoZi5sb2dnZXJTZXJ2aWNlLmxvZygibGlicmFyeVRvU2VsZWN0'@;
put 'IixFZSkscHQuc2Nyb2xsSW50b1ZpZXcoKSl9LDFlMyl9fSkpLEVlJiYoRWUuZXhwYW5kZWQ9ITApLEJlJiYoQmUuZXhwYW5kZWQ9ITApKX1yZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcy5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPXJlLmFkYXB0ZXJS'@;
put 'ZXNwb25zZS5mcm9tc2FzLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBHLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKEc9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Z2V0U1ZHVVJM'@;
put 'KCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcixoPW5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChoKX1nZXRTVkdCbG9iKCl7'@;
put 'bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcjtyZXR1cm4gbmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pfWRvd25sb2FkU1ZHKCl7aWYoWU4oIiNncmFwaCIpLnJlc2V0Wm9vbSgp'@;
put 'LG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0U1ZHQmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgic3ZnIikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2Eu'@;
put 'aHJlZj10aGlzLmdldFNWR1VSTCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1kb3dubG9hZFBORygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVu'@;
put 'Y3Rpb24qKCl7WU4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLEZUdC5zYXZlU3ZnQXNQbmcoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2dyYXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0ocmUsdWUp'@;
put 'PT5udWxsPT09dWU/IiI6dWUsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcChyZT0+aC5tYXAodWU9PkpTT04uc3RyaW5naWZ5KHJlW3VlXSxkKSkuam9pbigiLCIpKTtmLnVuc2hpZnQoaC5qb2luKCIsIikpO2xldCB2PWYuam9pbigiXHJcbiIpO3ZhciBNPWRvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnQoImEiKSxJPW5ldyBCbG9iKFt2XSx7dHlwZToidGV4dC9jc3YifSk7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoSSx0aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpKTtlbHNle3Zh'@;
put 'ciBHPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKEkpO00uaHJlZj1HLE0uZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSxNLmNsaWNrKCksd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoRyksTS5yZW1vdmUoKX19Z2V0RG90VXJsKCl7bGV0IGQ9bmV3IEJsb2IoW3RoaXMu'@;
put 'dml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO3JldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChkKX1nZXREb3RCbG9iKCl7cmV0dXJuIG5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KX1kb3dubG9hZERvdCgpe2lmKG5hdmlnYXRvci5hcHBW'@;
put 'ZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0RG90QmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgidHh0IikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERv'@;
put 'dFVybCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1zaG93U3ZnKCl7d2luZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVp'@;
put 'bGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9PntZTigiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3At'@;
put 'Y29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEw'@;
put 'MCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsdj1mQXQoKS5mb3JtYXQoIllZTU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBNPXRoaXMubGlicmFyeUxpc3QuZmluZChJPT5JLkxJQlJBUllJRD09dGhpcy5s'@;
put 'aWIpO00mJihkPWBfJHtNLkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy50YWJsZXNMaXN0LmZpbmQoST0+SS5UQUJMRVVSST09dGhpcy50YWJsZSk7TSYmKGg9YF8ke00uVEFCTEVOQU1FfWApfWlmKHRoaXMuY29s'@;
put 'dW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmNvbHVtbnNMaXN0LmZpbmQoST0+SS5DT0xVUkk9PXRoaXMuY29sdW1uKTtNJiYoZj1gXyR7TS5DT0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9uVGV4dCgpfSR7ZH0ke2h9JHtmfV8ke3Z9LiR7YX1g'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKGMxKSwkZShWbyksJGUoeXUpLCRlKExvKSwkZShwaCksJGUobWMpLCRlKFNkKSwkZShidSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVh'@;
put 'Z2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjU4LHZhcnM6MTEsY29uc3RzOltbIm1heERlcHRoRG90IiwiIl0sWyJtYXhEZXB0aCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbMywic2Nyb2xsZWRUb0Jv'@;
put 'dHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5n'@;
put 'SWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlw'@;
put 'ZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRlciIsIk1heCBkZXB0aCB2YWx1ZSIsMSwiY2xyLWlucHV0IiwibWF4LWRlcHRoLWlucHV0Il0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFy'@;
put 'eSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4i'@;
put 'XSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1'@;
put 'cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBh'@;
put 'bmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxb'@;
put 'MywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIs'@;
put 'ImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIi'@;
put 'LCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxb'@;
put 'MSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdy'@;
put 'YXkiLCJtdC0xMCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRl'@;
put 'bXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVu'@;
put 'dC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEw'@;
put 'Il0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtci01IiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkaXJlY3Rp'@;
put 'b24iLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5l'@;
put 'IiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lm'@;
put 'Il0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwicmVmcmVzaENhY2hlIiwzLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlu'@;
put 'bmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIs'@;
put 'ImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7ZGUoMCwiYXBwLXNpZGViYXIiLDQpLEZ0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZGUoMSwiY2xyLXRyZWUi'@;
put 'KSxndCgyLFZUdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDMsS1R0LDIsMSwibmctY29udGFpbmVyIiw2KSxoZSgpLGd0KDQsWFR0LDMsMCwiZGl2Iiw3KSxoZSgpLGRlKDUsImRpdiIsOCkoNiwiZGl2Iiw5KSxndCg3LHFUdCw0LDAsImRpdiIsMTApKDgsdUF0LDgsNCwibmctY29udGFpbmVy'@;
put 'IiwxMSksaGUoKSgpLGRlKDksImNsci1tb2RhbCIsMTIpKDEwLCJoMyIsMTMpLE9lKDExLCJMaW1pdCBEZXB0aCIpLGhlKCksZGUoMTIsImRpdiIsMTQpKDEzLCJwIiksT2UoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0'@;
put 'bzoiKSxoZSgpKCksZGUoMTUsImRpdiIsMTUpKDE2LCJkaXYiLDE2KSxXdCgxNywiaW5wdXQiLDE3LDApLGhlKCksZGUoMTksImNsci1jb250cm9sLWhlbHBlciIsMTgpLE9lKDIwLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1dCBlbXB0eSIpLGhlKCks'@;
put 'ZGUoMjEsImRpdiIsMTkpKDIyLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubGltaXREb3REZXB0aD0hMSl9KSxPZSgyMywiIENhbmNlbCAiKSxoZSgpLGRlKDI0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29u'@;
put 'c3QgTT1kYSgxOCk7cmV0dXJuIGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1ZSksQ3QoaC5saW1pdERvdERlcHRoPSExKX0pLE9lKDI1LCIgUmVzdWJtaXQgIiksaGUoKSgpKCkoKSxkZSgyNiwiY2xyLW1vZGFsIiwxMikoMjcsImgzIiwxMyksT2UoMjgsIldhcm5pbmciKSxoZSgpLGRl'@;
put 'KDI5LCJkaXYiLDE0KSgzMCwicCIpLE9lKDMxKSxoZSgpKCksZGUoMzIsImRpdiIsMTUpKDMzLCJkaXYiLDE5KSgzNCwicCIpLE9lKDM1LCJSZW5kZXIgYW55d2F5ICh0aGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lKSIpLGhlKCksZGUoMzYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCkpfSksT2UoMzcsIiBSZW5kZXIgIiksaGUoKSgpLGRlKDM4LCJkaXYiLDE5KSgzOSwicCIpLE9lKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIiksaGUoKSxk'@;
put 'ZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMjEpLE9lKDQzLCIgRG93bmxvYWQgIiksV3QoNDQsImNsci1pY29uIiwyMiksaGUoKSxndCg0NSxoQXQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCkoKSxkZSg0NiwiZGl2IiwxOSkoNDcsInAiKSxPZSg0OCwiUmVzdWJt'@;
put 'aXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSxoZSgpLFd0KDQ5LCJpbnB1dCIsMTcsMSksZGUoNTEsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWRhKDUwKTtyZXR1cm4gQ3QoaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVl'@;
put 'KSl9KSxPZSg1MiwiIFJlc3VibWl0ICIpLGhlKCkoKSxkZSg1MywiZGl2IiwxOSkoNTQsInAiKSxPZSg1NSwiQ2FuY2VsIHRoaXMgc3VibWlzc2lvbiIpLGhlKCksZGUoNTYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jYW5jZWxSZW5kZXJp'@;
put 'bmdHcmFwaCgpKX0pLE9lKDU3LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCl9MiZkJiYoZmUoMiksTWUoIm5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgzKSxNZSgibmdJZiIsIWgu'@;
put 'Y29sdW1uJiYhaC50YWJsZSksZmUoKSxNZSgibmdJZiIsaC5jb2x1bW58fGgudGFibGUpLGZlKCksTWUoImNsck1vZGFsT3BlbiIsaC5saW1pdERvdERlcHRoKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDE3KSxNZSgiY2xyTW9kYWxPcGVuIixudWxsIT09aC5sYXJnZURvdEZpbGVMaW5l'@;
put 'cykoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg1KSxMcigiIFRoZSBnZW5lcmF0ZWQgZG90IGZpbGUgaGFzICIsaC5sYXJnZURvdEZpbGVMaW5lcywiIGxpbmVzLiBSZW5kZXJpbmcgbWF5IHRha2UgYSBsb25nIHRpbWUsIGhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPyAiKSxmZSgx'@;
put 'MSksTWUoImRpc2FibGVkIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSl9LGRlcGVuZGVuY2llczpbUXMsYmEsbDEsR2wsTWQsdGwsV28sQWgsUGQsaGcsT2wscnUsWXUsVjAsUDIsY28sV0wsSWQseGgsWTEsc2csZzcsbTcsUGIsYTQsaTRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7'@;
put 'Y29uc3QgcEF0PSgpPT5bMTAsMjAsNTAsMTAwXTtmdW5jdGlvbiBnQXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDE0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eU0oInZhbHVlIixhKSxmZSgpLExyKCIgIixhLCIgIil9fWZ1bmN0aW9uIG1BdChjLGwpezEm'@;
put 'YyYmV3QoMCwiY2xyLWljb24iLDIwKX1mdW5jdGlvbiB2QXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLEN0KGgubWV0YUxpc3RP'@;
put 'bkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIHlBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSgxLCJkaXYiLDE2KSgyLCJpbnB1dCIsMTcsMCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1'@;
put 'cm4gZ2koZi5tZXRhRGF0YVNlYXJjaCxoKXx8KGYubWV0YURhdGFTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxtQXQsMSwwLCJjbHItaWNvbiIsMTgpKDUsdkF0LDEsMCwi'@;
put 'Y2xyLWljb24iLDE5KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWRhKDMpLGQ9TGUoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5tZXRhRGF0YVNlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBi'@;
put 'QXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMyksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubWV0YURhdGFMaXN0KSl9KSxw'@;
put 'aSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCku'@;
put 'JGltcGxpY2l0LGY9TGUoKTtyZXR1cm4gZi5tZXRhRGF0YUlkPWguSUQsQ3QoZi5tZXRhRGF0YU9uQ2xpY2soZi5tZXRhRGF0YUlkLGgpKX0pLFd0KDIsImNsci1pY29uIiwyNSksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmaSgiY2xyRXhwYW5kZWQiLGEu'@;
put 'ZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksTHIoIiAiLGEuSUQsIiAiKX19ZnVuY3Rpb24gX0F0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxiQXQsNCwzLCJjbHItdHJlZS1ub2RlIiwyMiksc2koKSksMiZjKXtjb25zdCBhPWwu'@;
put 'JGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHdBdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjYpLFd0KDEsImNsci1pY29uIiwyNyksZGUoMiwicCIsMjgpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdHlwZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIENBdChjLGwp'@;
put 'ezEmYyYmKGRlKDAsImg0IiksT2UoMSwiTG9hZGluZyBtZXRhZGF0YSB0eXBlcyIpLGhlKCkpfWZ1bmN0aW9uIFNBdChjLGwpezEmYyYmKGRlKDAsImg0IiksT2UoMSwiTG9hZGluZyBtZXRhZGF0YSBvYmplY3RzIiksaGUoKSl9ZnVuY3Rpb24gTUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2'@;
put 'IiksZ3QoMSxDQXQsMiwwLCJoNCIsMzEpKDIsU0F0LDIsMCwiaDQiLDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdJZiIsYS5tZXRhdHlwZXNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rpb24geEF0KGMsbCl7aWYoMSZj'@;
put 'JiYoZGUoMCwiZGl2IiwyOSkoMSwic3BhbiIsMzApLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoMyxNQXQsMywyLCJkaXYiLDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxNZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24gRUF0KGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PU9uKCk7ZGUoMCwiZGl2IiwzOCkoMSwiaW5wdXQiLDM5LDEpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBnaShmLm1ldGFPYmplY3RTZWFyY2gsaCl8fChmLm1ldGFPYmplY3RTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm1ldGFPYmplY3RPbkZpbHRlcigpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxmaSgibmdNb2RlbCIsYS5tZXRhT2JqZWN0U2VhcmNoKX19ZnVuY3Rpb24gVEF0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsNDMp'@;
put 'fWZ1bmN0aW9uIEFBdChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBrQXQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiw1NCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCksTHIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIERBdChjLGwp'@;
put 'e2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiKSxndCgzLFRBdCwxLDAsImNsci1pY29uIiw1MSkoNCxBQXQsMSwwLCJjbHItaWNvbiIsNTIpLE9lKDUpLGhlKCksZ3QoNixrQXQsMiwxLCJwIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4k'@;
put 'aW1wbGljaXQ7TWUoImNsckV4cGFuZGFibGUiLCEwKSxmZSgpLFRyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksZmUoMiksTWUoIm5nSWYiLCFhLmNvdW50KSxmZSgpLE1lKCJuZ0lmIixhLmNvdW50KSxmZSgpLExyKCIgIixhLmRpc3BsYXksIiAiKSxmZSgpLE1lKCJuZ0lmIiwhYS5jb3Vu'@;
put 'dCl9fWZ1bmN0aW9uIElBdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlIiw0NyksZ3QoMSxEQXQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksUW8oMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNik7TWUoImNsckxhenkiLCEwKSxmZSgpLE1lKCJjbHJSZWN1cnNpdmVGb3JP'@;
put 'ZiIsQWMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBSQXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiKSxndCgxLElBdCwzLDUsImNsci10cmVlIiw0NiksaGUoKSksMiZjKXtjb25z'@;
put 'dCBhPUxlKDUpO2ZlKCksTWUoIm5nSWYiLGEuc2hvd0FjYyl9fWZ1bmN0aW9uIExBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQyKSxGdCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBm'@;
put 'PUxlKCkuJGltcGxpY2l0LHY9TGUoMyk7cmV0dXJuIEN0KGg/di5wYW5lbENoYW5nZShoLGYpOiIiKX0pLGRlKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSxXdCgyLCJjbHItaWNvbiIsNDMpLE9lKDMpLGRlKDQsInAiLDQ0KSxPZSg1KSxoZSgpKCksZ3QoNixSQXQsMiwxLCJjbHItYWNjb3Jk'@;
put 'aW9uLWNvbnRlbnQiLDQ1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgzKSxMcigiICIsYS5OQU1FLCIgIiksZmUoMiksU3IoYS5JRCl9fWZ1bmN0aW9uIE9BdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsTEF0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDEp'@;
put 'LHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBQQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQwKSgxLCJjbHItYWNjb3JkaW9uIiksZ3QoMixPQXQsMiwxLCJuZy1jb250YWluZXIiLDcpLGhlKCkoKSksMiZjKXtj'@;
put 'b25zdCBhPUxlKDIpO2ZlKDIpLE1lKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIEZBdChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBIQXQoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24gTkF0KGMsbCl7aWYoMSZj'@;
put 'JiYoZGUoMCwicCIsNTQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgpLExyKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiBWQXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksZ3QoMyxGQXQsMSww'@;
put 'LCJjbHItaWNvbiIsNTEpKDQsSEF0LDEsMCwiY2xyLWljb24iLDUyKSxPZSg1KSxoZSgpLGd0KDYsTkF0LDIsMSwicCIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSxUcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLGZl'@;
put 'KDIpLE1lKCJuZ0lmIiwhYS5jb3VudCksZmUoKSxNZSgibmdJZiIsYS5jb3VudCksZmUoKSxMcigiICIsYS5kaXNwbGF5LCIgIiksZmUoKSxNZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBCQXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLGd0KDEsVkF0LDcsNywiY2xy'@;
put 'LXRyZWUtbm9kZSIsNDgpLFFvKDIsImFzeW5jIiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDQpO01lKCJjbHJMYXp5IiwhMCksZmUoKSxNZSgiY2xyUmVjdXJzaXZlRm9yT2YiLEFjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVu'@;
put 'Y3Rpb24gakF0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwiZGl2Iiw1NSksV3QoMiwiY2xyLWljb24iLDQzKSxkZSgzLCJkaXYiLDU2KSg0LCJwIiw1NyksT2UoNSksaGUoKSxkZSg2LCJwIiw1OCksT2UoNyksaGUoKSgpKCksZ3QoOCxCQXQsMyw1LCJjbHItdHJlZSIsNDYpLHNpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDMpO2ZlKDUpLExyKCIgIixhLk5BTUUsIiAiKSxmZSgyKSxMcigiICIsYS5JRCwiICIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIHpBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDApLGd0KDEsakF0LDksMywibmct'@;
put 'Y29udGFpbmVyIiw3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxNZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiBVQXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxPZSgyKSxoZSgpLGRlKDMsImNsci1k'@;
put 'Zy1jZWxsIiksT2UoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLE9lKDYpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLFNyKGEuVFlQRSksZmUoMiksU3IoYS5OQU1FKSxmZSgyKSxTcihhLlZBTFVFKX19ZnVuY3Rpb24gWkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwi'@;
put 'Y2xyLWRhdGFncmlkIiw1OSkoMSwiY2xyLWRnLWNvbHVtbiIpLE9lKDIsIiBUWVBFICIpLFd0KDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiksT2UoNSwiIE5BTUUgIiksV3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGRl'@;
put 'KDcsImNsci1kZy1jb2x1bW4iKSxPZSg4LCIgVkFMVUUgIiksV3QoOSwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGd0KDEwLFVBdCw3LDMsImNsci1kZy1yb3ciLDYxKSxkZSgxMSwiY2xyLWRnLWZvb3RlciIpKDEyLCJjbHItZGctcGFnaW5hdGlvbiIsNjIsMikoMTQsImNsci1k'@;
put 'Zy1wYWdlLXNpemUiLDYzKSxPZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLGhlKCksT2UoMTYpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9ZGEoMTMpLGQ9TGUoMik7ZmUoMyksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLGZlKDMpLE1lKCJjbHJEZ1N0cmluZ0ZpbHRl'@;
put 'ciIsZC5uYW1lRmlsdGVyKSxmZSgzKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudmFsdWVGaWx0ZXIpLGZlKCksTWUoImNsckRnSXRlbXNPZiIsZC5tZXRhT2JqZWN0QXR0cmlidXRlcyksZmUoMiksTWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxNZSgiY2xyUGFnZVNpemVPcHRpb25z'@;
put 'Iixabyg5LHBBdCkpLGZlKDIpLFpmKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgQXR0cmlidXRlcyAiKX19ZnVuY3Rpb24gV0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMikoMSwiZGl2IiwzMyksZ3QoMixFQXQsMywxLCJk'@;
put 'aXYiLDM0KSxXdCgzLCJiciIpLGd0KDQsUEF0LDMsMSwiZGl2IiwzNSkoNSx6QXQsMiwxLCJkaXYiLDM1KSxoZSgpLGRlKDYsImRpdiIsMzYpKDcsImgzIiksT2UoOCksaGUoKSxndCg5LFpBdCwxNywxMCwiY2xyLWRhdGFncmlkIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgy'@;
put 'KSxNZSgibmdJZiIsYS5tZXRhT2JqZWN0TGlzdCYmIWEub2JqZWN0Um91dGUpLGZlKDIpLE1lKCJuZ0lmIiwhYS5vYmplY3RWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLm9iamVjdFZpZXcpLGZlKDMpLFNyKGEuYXNzb09iamVjdFNlbGVjdGVkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dUYWJsZSl9'@;
put 'fWNsYXNzIFlBdHthY2NlcHRzKGwsYSl7cmV0dXJuIiIrbC5OQU1FPT09YXx8bC5OQU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MH19Y2xhc3MgR0F0e2FjY2VwdHMobCxhKXtyZXR1cm4iIitsLlRZUEU9PT1hfHxsLlRZUEUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0wfX1jbGFz'@;
put 'cyAkQXR7YWNjZXB0cyhsLGEpe3JldHVybiIiK2wuVkFMVUU9PT1hfHxsLlZBTFVFLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MH19bGV0IHF0ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRo'@;
put 'aXMuaGVscGVyU2VydmljZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12LHRoaXMucm91dGU9TSx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRl'@;
put 'cz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlkPSIiLHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNl'@;
put 'bGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49ST0+SS5jb3VudD9kcyhJLmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFk'@;
put 'ZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOkkuQVNTT0NVUkl9XX0pLnRoZW4ocmU9Pnt0aGlzLnNob3dUYWJsZT0hMCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXJlLmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPUkuTkFN'@;
put 'RTtsZXQgdWU9dGhpcy5yb3V0ZXIudXJsO3JldHVybiB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLm9iamVjdFJvdXRlP3VlLnNsaWNlKDAsdWUubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrSS5BU1NPQ1VSSS5zbGljZSgxK0kuQVNTT0NVUkkuaW5kZXhPZigiXFwi'@;
put 'KSk6dWUrIi9vYmplY3QvIitJLkFTU09DVVJJLnNsaWNlKDErSS5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKSksdGhpcy5nZXRBc3Nvc2lhdGlvbnNDb3VudChyZS5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKX0pLHRoaXMuZGVib3VuY2U9ITF9bmdPbkluaXQoKXtKbi52aWV3ZXIuY3Vy'@;
put 'cmVudFNlbGVjdGlvbj0idmlldy9tZXRhZGF0YSIsdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvdmlldy9tZXRhZGF0YS9vYmplY3QvIikmJih0aGlzLm9iamVjdFJvdXRlPSEwLHRoaXMub2JqZWN0Vmlldz0hMCksdGhpcy5wYWdlU2l6ZT01LHRoaXMudHlwZUZpbHRlcj1uZXcgR0F0LHRo'@;
put 'aXMubmFtZUZpbHRlcj1uZXcgWUF0LHRoaXMudmFsdWVGaWx0ZXI9bmV3ICRBdCxKbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QmJkpuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Kbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Qs'@;
put 'dGhpcy5yZXBvc2l0b3JpZXM9Sm4ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyx0aGlzLnJlcG9zaXRvcnk9Sm4ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Kbi5tZXRhZGF0'@;
put 'YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGF0eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudHlwZXMsSm4ubWV0YWRhdGEubWV0YURhdGFMaXN0PXRoaXMubWV0YURhdGFMaXN0LHRo'@;
put 'aXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITF9KSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhcmVwb3MiLG51bGwpLnRoZW4oYT0+e2xldCBkPSExO3RoaXMucmVwb3NpdG9yaWVzPVtdO2ZvcihsZXQgaD0wO2g8YS5hZGFwdGVyUmVzcG9uc2Uub3V0'@;
put 'cmVwb3MubGVuZ3RoO2grKyl0aGlzLnJlcG9zaXRvcmllcy5wdXNoKGEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUmJihkPSEwKTtpZih0aGlzLnJlcG9zaXRvcnk9ZD8iRm91bmRhdGlv'@;
put 'biI6YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbMF0uTkFNRSxKbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzPXRoaXMucmVwb3NpdG9yaWVzLEpuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnksdGhpcy5vYmplY3RSb3V0ZSl7dGhpcy5ldmVudFNlcnZp'@;
put 'Y2UuY2xvc2VTaWRlYmFyKCksdGhpcy5zaG93RGF0YT0hMDtsZXQgaD0iIixmPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLm9iamVjdElEO3RoaXMubWV0YU9iamVjdExpc3Q9W10sdGhpcy5tZXRhT2JqZWN0TGlzdC5wdXNoKHtJRDpmLE5BTUU6aH0pLHRoaXMubWV0YU9iamVjdFNob3dM'@;
put 'aXN0PXRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0T25DbGljayh0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXS5JRCx0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXSl9fSkpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlz'@;
put 'LmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfW1ldGFEYXRhT25DbGljayhhLGQpe3RoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmxv'@;
put 'Y2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvbWV0YWRhdGEiKSx0aGlzLnNob3dEYXRhPSExLHRoaXMubG9hZGluZz0hMCx0aGlzLnNlbGVjdG1ldGFEYXRhKGEsZCl9bWV0YU9iamVjdE9uQ2xpY2soYSxkKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLnNob3dBY2M9ITEs'@;
put 'dGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNlbGVjdG1ldGFPYmplY3QoYSxkKX1zZWxlY3RtZXRhRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFi'@;
put 'bGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm9iamVjdHMsaC5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhoLm1ldGFPYmplY3RTaXplKSxoLmxvYWRpbmc9ITEsaC5hc3NvVHlwZVNlbGVjdGVk'@;
put 'PWEsaC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksaC5zaG93RGF0YT0hMH0pfSkoKX1zZWxlY3RtZXRhT2JqZWN0KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJs'@;
put 'ZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9di5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zLGgucm9vdCQ9ZHMoaC5nZXRBc3Nvc2lhdGlvbnNDb3VudCh2LmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAs'@;
put 'aC5zaG93VGFibGU9ITA7bGV0IE09di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcy5maW5kKEc9PiJOYW1lIj09PUcuTkFNRSkuVkFMVUU7aC5hc3NvT2JqZWN0U2VsZWN0ZWQ9TSxkLk5BTUU9TTtsZXQgST1oLnJvdXRlci51cmw7aC5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaC5vYmplY3RS'@;
put 'b3V0ZT9JLnNsaWNlKDAsSS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKTpJKyIvb2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSkpLGgubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmli'@;
put 'dXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1l'@;
put 'dGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMsaC5zaG93VGFibGU9ITB9KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0'@;
put 'YWlsczpbXX0pO2xldCB2PWQuZ2V0KGYuQVNTT0MpO3YuY291bnQrKyx2LmRldGFpbHMucHVzaCh7QVNTT0NVUkk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3Jl'@;
put 'dHVybiBkLmZvckVhY2goZnVuY3Rpb24oZix2KXtoLnB1c2goe0FTU09DOnYsY291bnQ6Zi5jb3VudCxkZXRhaWxzOmYuZGV0YWlscyxkaXNwbGF5OnYrIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0'@;
put 'YU9iamVjdEFzc29jaWF0aW9ucyloLkFTU09DPT09YSYmZC5wdXNoKGgpO3JldHVybiB0aGlzLmFzc29zaWF0aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlz'@;
put 'LnNob3dUYWJsZT0hMSx0aGlzLnNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSl9bWV0YUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxKbi5tZXRhZGF0YS5tZXRhRGF0'@;
put 'YVNlYXJjaD10aGlzLm1ldGFEYXRhU2VhcmNofW1ldGFPYmplY3RPbkZpbHRlcigpe3RoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIp'@;
put 'LHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXModGhpcy5tZXRhT2JqZWN0U2l6ZSksSm4ubWV0YWRhdGEubWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhp'@;
put 'cy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+YSl7bGV0IGQ9MCxoPS0xO2ZvcihsZXQgZj0wO2Y8dGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikm'@;
put 'JmQrKyxkPT09YSl7aD1mO2JyZWFrfXRoaXMubWV0YU9iamVjdFNob3dMaXN0PS0xIT09aD90aGlzLm1ldGFPYmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2Uo'@;
put 'YSxkKXt0aGlzLmRlYm91bmNlfHwodGhpcy5tZXRhT2JqZWN0T25DbGljayhkLklELGQpLHRoaXMuZGVib3VuY2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe0puLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9y'@;
put 'eT10aGlzLnJlcG9zaXRvcnl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoJGUobWMpLCRlKFZvKSwkZShidSksJGUocGgpLCRlKExvKSwkZSh5dSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1l'@;
put 'dGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNyx2YXJzOjgsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNl'@;
put 'bGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1h'@;
put 'cmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdy'@;
put 'b3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCBTQVMgVHlwZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxl'@;
put 'dGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNs'@;
put 'ckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBl'@;
put 'IiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsx'@;
put 'LCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzQsIm5nSWYiXSxbMSwiY2xyLXJvdyIsImNsci1mbGV4LWdyb3ctMSJdLFsxLCJjbHItY29sLTYiXSxbImNsYXNzIiwic2VhcmNoLWlucHV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9iamVjdHMtY29sIiw0LCJuZ0lmIl0sWzEsImNs'@;
put 'ci1jb2wtNiIsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJu'@;
put 'Z01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm9iamVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmln'@;
put 'aHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRh'@;
put 'YmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxvYXQtcmlnaHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29s'@;
put 'cy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndvcmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09m'@;
put 'Il0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDMpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxPZSg0LCJNZXRhZGF0YSBSZXBv'@;
put 'c2l0b3J5IiksaGUoKSxkZSg1LCJzZWxlY3QiLDQpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZ2koaC5yZXBvc2l0b3J5LHYpfHwoaC5yZXBvc2l0b3J5PXYpLHZ9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9y'@;
put 'eSgpfSksZ3QoNixnQXQsMiwyLCJvcHRpb24iLDUpLGhlKCkoKSgpLGRlKDcsImNsci10cmVlIiksZ3QoOCx5QXQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSg5LF9BdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaGUoKSgpLGRlKDEwLCJkaXYiLDgpKDExLCJkaXYiLDkpKDEyLCJoMyIsMTApLE9l'@;
put 'KDEzKSxoZSgpLGd0KDE0LHdBdCw0LDAsImRpdiIsMTEpKDE1LHhBdCw0LDEsImRpdiIsMTIpKDE2LFdBdCwxMCw1LCJkaXYiLDEzKSxoZSgpKCkpLDImZCYmKGZlKDUpLGZpKCJuZ01vZGVsIixoLnJlcG9zaXRvcnkpLGZlKCksTWUoIm5nRm9yT2YiLGgucmVwb3NpdG9yaWVzKSxmZSgyKSxN'@;
put 'ZSgibmdJZiIsaC5tZXRhRGF0YUxpc3QpLGZlKCksTWUoIm5nRm9yT2YiLGgubWV0YURhdGFMaXN0KSxmZSg0KSxTcihoLmFzc29UeXBlU2VsZWN0ZWQpLGZlKCksTWUoIm5nSWYiLCFoLmxvYWRpbmcmJiFoLm1ldGFPYmplY3RMaXN0KSxmZSgpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCks'@;
put 'TWUoIm5nSWYiLGguc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOltRcyxiYSxEMixJMixHbCxrMix0bCxXbyx4bSxyMyxSNyxmTyxLYixuRSxwTyxTbSxHZGUseHAsTDcsSmIsTW0sazcsQ20sRDcsV2IsQWgsUGQsZWhlLE9sLFYwLFgxZSxjbyxZMSxFNyxaYixGMWUsQkwsTjFlLEgxZSxWMWUs'@;
put 'T1ksYTQsaTQsSU1dLGVuY2Fwc3VsYXRpb246Mn0pfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9cm4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gS0F0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMTIpfWZ1'@;
put 'bmN0aW9uIFhBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgucm9sZVNlYXJjaD0iIixDdChoLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBx'@;
put 'QXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYucm9sZVNlYXJjaCxoKXx8KGYucm9sZVNl'@;
put 'YXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LEtBdCwxLDAsImNsci1pY29uIiwxMCkoNSxYQXQsMSwwLCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZGEo'@;
put 'MyksZD1MZSgpO2ZlKDIpLGZpKCJuZ01vZGVsIixkLnJvbGVTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSkF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUt'@;
put 'bm9kZSIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnJvbGVPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxXdCgyLCJjbHItaWNvbiIsMTcpLE9lKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1w'@;
put 'bGljaXQsZD1MZSgpO1RyKCJhY3RpdmUiLGEuUk9MRVVSST09PWQucm9sZVVyaSksZmUoMyksTHIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gUUF0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxKQXQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksc2koKSksMiZjKXtjb25zdCBhPWwu'@;
put 'JGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGVrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHRrdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gTWVt'@;
put 'YmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gbmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLE9lKDIpLGhlKCksZGUoMywidGQiLDMwKSxPZSg0KSxoZSgpLGRlKDUsInRkIiwzMCksT2UoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLE9lKDgpLGhlKCkoKSksMiZj'@;
put 'KXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuVVJJTUVNKSxmZSgyKSxTcihhLk1FTUJFUk5BTUUpLGZlKDIpLFNyKGEuRU1BSUwpLGZlKDIpLFNyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksU3IoYS5NRU1CRVJVUERBVEVEKX19'@;
put 'ZnVuY3Rpb24gcmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksT2UoNSwiTkFNRSIpLGhlKCkoKSxkZSg2LCJ0ZCIsMjkpKDcsImIiKSxPZSg4LCJFTUFJTCIpLGhlKCkoKSxkZSg5LCJ0ZCIsMjkpKDEwLCJiIiks'@;
put 'T2UoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwzMCkoMTMsImIiKSxPZSgxNCwiVVBEQVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksZ3QoMTYsbmt0LDksNSwidHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgxNiksTWUoIm5nRm9yT2YiLGEucm9s'@;
put 'ZU1lbWJlcnMpfX1mdW5jdGlvbiBpa3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLE9lKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSxoZSgpKX1mdW5jdGlvbiBha3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsMzApLE9lKDQpLGhl'@;
put 'KCksZGUoNSwidGQiLDMwKSxPZSg2KSxoZSgpLGRlKDcsInRkIiwzMCksT2UoOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJTUVNKSxmZSgyKSxTcihhLk1FTUJFUk5BTUUpLGZlKDIpLFNyKGEu'@;
put 'RU1BSUwpLGZlKDIpLFNyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksU3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gc2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksT2UoNSwiTkFNRSIpLGhlKCkoKSxkZSg2'@;
put 'LCJ0ZCIsMjkpKDcsImIiKSxPZSg4LCJFTUFJTCIpLGhlKCkoKSxkZSg5LCJ0ZCIsMjkpKDEwLCJiIiksT2UoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwzMCkoMTMsImIiKSxPZSgxNCwiVVBEQVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksZ3QoMTYsYWt0LDksNSwi'@;
put 'dHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgxNiksTWUoIm5nRm9yT2YiLGEucm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIG9rdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInRhYmxlIiwyMikoNCwidGJvZHkiKSg1LCJ0ciIp'@;
put 'KDYsInRkIiwyMykoNywicCIsMjQpKDgsImIiKSxPZSg5KSxoZSgpKCkoKSgpLGRlKDEwLCJ0ciIpKDExLCJ0ZCIsMjMpKDEyLCJpIiksT2UoMTMpLGhlKCkoKSgpKCkoKSgpKCksZGUoMTQsImRpdiIsMjApKDE1LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSkoMTcsImRpdiIpKDE4LCJoMyIpLE9l'@;
put 'KDE5KSxoZSgpLGd0KDIwLHRrdCwyLDAsImg1Iiw2KSxkZSgyMSwiZGl2IiwyNiksZ3QoMjIscmt0LDE3LDEsInRhYmxlIiwyNyksaGUoKSgpLFd0KDIzLCJociIpLGRlKDI0LCJkaXYiKSgyNSwiaDMiKSxPZSgyNiksaGUoKSxndCgyNyxpa3QsMiwwLCJoNSIsNiksZGUoMjgsImRpdiIsMjYp'@;
put 'LGd0KDI5LHNrdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxXdCgzMCwiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg5KSxTcihhLnJvbGVOYW1lKSxmZSg0KSxTcihhLnJvbGVEZXNjKSxmZSg2KSxMcigiTUVNQkVSUyAoIixhLnJvbGVNZW1iZXJzQ291bnQsIikiKSxm'@;
put 'ZSgpLE1lKCJuZ0lmIiwwPT1hLnJvbGVNZW1iZXJzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnJvbGVNZW1iZXJzQ291bnQpLGZlKDQpLExyKCJHcm91cHMgKCIsYS5yb2xlR3JvdXBzQ291bnQsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnJvbGVHcm91cHNDb3VudCksZmUoMiksTWUo'@;
put 'Im5nSWYiLDAhPWEucm9sZUdyb3Vwc0NvdW50KX19bGV0IEI3ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT12LHRoaXMucm9s'@;
put 'ZVNlYXJjaD0iIix0aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xlTmFtZT0iIix0aGlzLnJvbGVEZXNjPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5sb2FkaW5nPSExfW5nT25Jbml0KCl7Sm4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5h'@;
put 'di9yb2xlcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEpuLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5y'@;
put 'b2xlcz1Kbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Kbi51c2VybmF2LnJvbGVTZWFyY2gpOnZvaWQgMD09PUpuLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4o'@;
put 'YT0+e2lmKHRoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVzPWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLEpuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhp'@;
put 'cy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5y'@;
put 'b2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYu'@;
put 'YWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKToodGhpcy5yb2xlcz1Kbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Kbi51'@;
put 'c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLnJvbGVzPWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLEpuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5w'@;
put 'YXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpb'@;
put 'e3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVH'@;
put 'cm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkp'@;
put 'fX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxKbi51c2VybmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0h'@;
put 'MDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpOmQrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpKSx0aGlzLnNhc1NlcnZp'@;
put 'Y2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOmEuUk9MRVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5h'@;
put 'ZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1hLlJPTEVVUkksdGhpcy5yb2xl'@;
put 'TmFtZT1hLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9YS5ST0xFREVTQ30pfWZpbmRSb2xlKGEsZCl7bGV0IGg9ITE7cmV0dXJuIGEuZm9yRWFjaChmPT57Zi5ST0xFVVJJPT09ZCYmKGg9Zil9KSxofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRl'@;
put 'KFZvKSwkZShidSksJGUoTG8pLCRlKHBoKSwkZSh5dSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJvbGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVl'@;
put 'SW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1u'@;
put 'b2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFJvbGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01v'@;
put 'ZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJt'@;
put 'LTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEs'@;
put 'InJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGlu'@;
put 'ayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxndCgyLHFBdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsUUF0LDIsMSwibmctY29udGFpbmVyIiwz'@;
put 'KSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxndCg1LGVrdCwzLDAsImRpdiIsNSkoNixva3QsMzEsOCwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsaC5yb2xlcyksZmUoKSxNZSgibmdGb3JPZiIsaC5yb2xlcyksZmUoMiksTWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxNZSgi'@;
put 'bmdJZiIsaC5yb2xlTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W1FzLGJhLGwxLEdsLHRsLFdvLEFoLFBkLE9sLFkxLGE0LGk0XSxzdHlsZXM6WyI6Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGV7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1j'@;
put 'b2xvcjojMzE0MzUxfTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1kYXJrXSAucm9sZS1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiMyOTQwNGJ9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAucm9sZS1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1s'@;
put 'aWdodF0gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1j'@;
put 'b2xvcjojZTZlNmU2fS5zaWRlYmFyLWhlaWdodHtoZWlnaHQ6MTAwJX0ucm9sZS1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnJvbGUtaW5mb3tib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWluZm8gdGR7dGV4dC1hbGlnbjpjZW50ZXJ9'@;
put 'LnJvbGUtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWRhdGF7bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhIGgzLC5yb2xlLWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfS5tZW1iZXItdGFibGUgdGJvZHkg'@;
put 'dHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX1cbiJdLGVuY2Fwc3Vs'@;
put 'YXRpb246Mn0pfX1yZXR1cm4gY30pKCksbGt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpb'@;
put 'WyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJld0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltuZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVy'@;
put 'biBjfSkoKSxja3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmV3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W25nXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9'@;
put 'KSgpO2Z1bmN0aW9uIHVrdChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBka3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLnVzZXJTZWFy'@;
put 'Y2g9IiIsQ3QoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gaGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7'@;
put 'Y29uc3QgZj1MZSgpO3JldHVybiBnaShmLnVzZXJTZWFyY2gsaCl8fChmLnVzZXJTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx1a3QsMSwwLCJjbHItaWNvbiIsMTApKDUs'@;
put 'ZGt0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWRhKDMpLGQ9TGUoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC51c2VyU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0'@;
put 'aW9uIGZrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS51c2VyT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksV3QoMiwiY2xy'@;
put 'LWljb24iLDE3KSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0LGQ9TGUoKTtUcigiYWN0aXZlIiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSxmZSgzKSxMcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIHBrdChjLGwp'@;
put 'e2lmKDEmYyYmKGFpKDApLGd0KDEsZmt0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBna3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksT2UoMiwi'@;
put 'IExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBta3QoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJ0ciIpKDIsInRkIiwyNyksT2UoMywiIE1ldGFkYXRhIENyZWF0ZWQ6ICIpLGRlKDQsImIiKSxPZSg1KSxoZSgpKCkoKSxkZSg2LCJ0ciIpKDcsInRkIiwyNyksT2UoOCwiIE1ldGFk'@;
put 'YXRhIFVwZGF0ZWQ6ICIpLGRlKDksImIiKSxPZSgxMCksaGUoKSgpKCksc2koKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDUpLFNyKGEudXNlckluZm8uTUVUQURBVEFDUkVBVEVEKSxmZSg1KSxTcihhLnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIHZrdChjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxPZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNykoMTEsInAiLDI4KSgxMiwiYiIpLE9lKDEzKSxoZSgpKCko'@;
put 'KSgpLGd0KDE0LG1rdCwxMSwyLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSg4KSxTcihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLFNyKGEudXNlckluZm8uRElTUExBWU5BTUUpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVy'@;
put 'VHlwZS5TYXM5KX19ZnVuY3Rpb24geWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLE9lKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI3'@;
put 'KSxPZSgxMSwiIFVzZXIgSUQ6ICIpLGRlKDEyLCJiIiksT2UoMTMpLGhlKCkoKSgpLGRlKDE0LCJ0ciIpKDE1LCJ0ZCIsMjcpLE9lKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksZGUoMTcsImIiKSxPZSgxOCksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDgpLFNy'@;
put 'KGEudXNlckluZm8uTkFNRSksZmUoNSksU3IoYS51c2VySW5mby5VUkkpLGZlKDUpLFNyKGEudXNlckluZm8uUFJPVklERVIpfX1mdW5jdGlvbiBia3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLE9lKDEsIk5vIEVtYWlscyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gX2t0KGMsbCl7aWYoMSZj'@;
put 'JiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLE9lKDIpLGhlKCksZGUoMywidGQiLDMxKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxTcihhLkVNQUlMKSxmZSgyKSxTcihhLlRZUEUpfX1mdW5jdGlvbiB3a3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIs'@;
put 'MjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxPZSg1LCJFTUFJTCIpLGhlKCkoKSxkZSg2LCJ0ZCIsMzEpKDcsImIiKSxPZSg4LCJUWVBFIiksaGUoKSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLF9rdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1M'@;
put 'ZSgzKTtmZSgxMCksTWUoIm5nRm9yT2YiLGEudXNlckVtYWlscyl9fWZ1bmN0aW9uIENrdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxndCgzLGJrdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LHdrdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCko'@;
put 'KSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLExyKCJFTUFJTFMgKCIsYS51c2VyRW1haWxzQ291bnR8fCIwIiwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiBTa3QoYyxsKXsx'@;
put 'JmMmJld0KDAsImhyIil9ZnVuY3Rpb24gTWt0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxPZSgxLCJObyBHcm91cHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIHhrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwzMyksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O01l'@;
put 'KCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSSksZmUoKSxMcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gRWt0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwidGQiLDMzKSxPZSgyKSxoZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNp'@;
put 'dDtmZSgpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIisoYS5HUk9VUFVSSXx8YS5VUkkpKSxmZSgpLExyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBUa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpLGd0KDEseGt0LDIsMiwidGQiLDMyKSgyLEVrdCwz'@;
put 'LDIsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWZ1bmN0aW9uIEFrdChj'@;
put 'LGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxndCgyLFRrdCwzLDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxNZSgibmdGb3JPZiIsYS51c2VyR3JvdXBzKX19ZnVuY3Rpb24ga2t0KGMsbCl7MSZjJiZXdCgwLCJociIpfWZ1bmN0aW9u'@;
put 'IERrdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gUm9sZXMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIElrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDM0KSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDQpO2ZlKCksTWUoInJv'@;
put 'dXRlckxpbmsiLCIvdmlldy91c2VybmF2L3JvbGVzLyIrZC5nZXRSb2xlVVJJKGEuUk9MRVVSSSkpLGZlKCksTHIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gUmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLGd0KDIsSWt0LDMsMiwidHIiLDMpLGhl'@;
put 'KCkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDIpLE1lKCJuZ0Zvck9mIixhLnVzZXJSb2xlcyl9fWZ1bmN0aW9uIExrdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxndCgzLERrdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LFJrdCwzLDEs'@;
put 'InRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMiksTHIoIlJPTEVTICgiLGEudXNlclJvbGVzQ291bnR8fCIwIiwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEudXNlclJvbGVzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnVzZXJSb2xlc0NvdW50KX19ZnVuY3Rp'@;
put 'b24gT2t0KGMsbCl7MSZjJiZXdCgwLCJociIpfWZ1bmN0aW9uIFBrdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gTG9naW5zIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBGa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzMSksT2UoMiksaGUoKSxkZSgzLCJ0ZCIs'@;
put 'MzEpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLFNyKGEuRE9NQUlOKSxmZSgyKSxTcihhLlVTRVJJRCl9fWZ1bmN0aW9uIEhrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLE9l'@;
put 'KDUsIkRPTUFJTiIpLGhlKCkoKSxkZSg2LCJ0ZCIpKDcsImIiKSxPZSg4LCJVU0VSIElEIiksaGUoKSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLEZrdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgxMCksTWUoIm5nRm9yT2YiLGEudXNlckxvZ2lucyl9fWZ1'@;
put 'bmN0aW9uIE5rdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxndCgzLFBrdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LEhrdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLExyKCJMT0dJTlMgKCIs'@;
put 'YS51c2VyTG9naW5zQ291bnR8fCIwIiwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEudXNlckxvZ2luc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiBWa3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLHZrdCwxNSwzLCJkaXYiLDIw'@;
put 'KSgyLHlrdCwxOSwzLCJkaXYiLDIwKSxkZSgzLCJkaXYiLDIxKSg0LCJkaXYiLDIyKSg1LCJkaXYiLDIzKSxndCg2LENrdCw2LDMsImRpdiIsNikoNyxTa3QsMSwwLCJociIsNiksZGUoOCwiZGl2IikoOSwiaDMiKSxPZSgxMCksaGUoKSxndCgxMSxNa3QsMiwwLCJoNSIsNiksZGUoMTIsImRp'@;
put 'diIsMjQpLGd0KDEzLEFrdCwzLDEsInRhYmxlIiwyNSksaGUoKSgpLGd0KDE0LGtrdCwxLDAsImhyIiw2KSgxNSxMa3QsNiwzLCJkaXYiLDYpKDE2LE9rdCwxLDAsImhyIiw2KSgxNyxOa3QsNiwzLCJkaXYiLDYpLFd0KDE4LCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2Zl'@;
put 'KCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSYmYS51c2VySW5mbyksZmUoNCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxm'@;
put 'ZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoMyksTHIoIkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS51c2VyR3JvdXBzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnVzZXJHcm91cHND'@;
put 'b3VudCksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJ'@;
put 'ZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgajdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYs'@;
put 'dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlclNlYXJjaD0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtTmFtZT0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyB5aC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLnNlcnZlclR5cGU9IiIsdGhpcy5TZXJ2ZXJUeXBlPU4wLlks'@;
put 'dGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQo'@;
put 'KXtpZihKbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3VzZXJzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtTmFtZT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEpu'@;
put 'LnVzZXJuYXYudXNlckxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudCl0aGlzLnVzZXJzPUpuLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUpuLnVzZXJuYXYudXNlclNlYXJjaDtlbHNlIGlmKHZvaWQgMD09PUpuLnVzZXJuYXYudXNlckxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlz'@;
put 'LmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5t'@;
put 'YXAoZj0+KHtOQU1FOmYubmFtZSxVUkk6Zi5pZCxQUk9WSURFUjpmLnByb3ZpZGVySWR9KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9aCxKbi51c2VybmF2LnVzZXJMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVycyIsbnVsbCkudGhlbihh'@;
put 'PT57dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9YS5hZGFwdGVyUmVzcG9uc2UudXNlcnMsSm4udXNlcm5hdi51c2VyTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS51c2Vyc30pKToodGhpcy51c2Vycz1Kbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Kbi51c2VybmF2LnVzZXJT'@;
put 'ZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50KWlmKHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YSl7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2ErIi9tZW1iZXJzaGlwcz9s'@;
put 'aW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGQ9PmQudGV4dCgpKS50aGVuKGQ9PntsZXQgaD1KU09OLnBhcnNlKGQpO3RoaXMudXNlckRhdGE9aCx0aGlzLmxvYWRpbmc9ITE7bGV0IGY9aC5pdGVtcy5tYXAodj0+KHtHUk9VUE5BTUU6di5u'@;
put 'YW1lLFVSSTp2LmlkfSkpO3RoaXMudXNlckdyb3Vwcz1mLHRoaXMudXNlckdyb3Vwc0NvdW50PWYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZCh2PT52LlVSST09PWEpKX0pfWVsc2V7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51'@;
put 'cmk7dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YX1dfSkudGhlbihoPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgTjAuWS5TYXM5OnRoaXMudXNlckluZm89aC5hZGFwdGVyUmVz'@;
put 'cG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9aC5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51c2VyUm9sZXNDb3Vu'@;
put 'dD1oLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWguYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgTjAuWS5TYXNqczppZih0aGlzLnVzZXJzKXRo'@;
put 'aXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKGY9PmYuVVJJPT09YSk7ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6Zi5JRCxOQU1FOmYuTkFNRSxESVNQTEFZTkFNRTpmLk5BTUV9fX10aGlzLnVzZXJEYXRhPWguYWRhcHRlclJl'@;
put 'c3BvbnNlLHRoaXMudXNlckdyb3Vwcz1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLmxlbmd0aH0pfX11c2VyTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnVz'@;
put 'ZXJzLHRoaXMudXNlclNlYXJjaCwiTkFNRSIpLEpuLnVzZXJuYXYudXNlclNlYXJjaD10aGlzLnVzZXJTZWFyY2h9dXNlck9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9k'@;
put 'LnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5VUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithLlVSSSsiL21lbWJlcnNoaXBzP2xpbWl0'@;
put 'PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy51c2VyRGF0YT1mLHRoaXMubG9hZGluZz0hMTtsZXQgdj1mLml0ZW1zLm1hcChNPT4oe0dST1VQTkFNRTpNLm5hbWUs'@;
put 'VVJJOk0uaWR9KSk7dGhpcy51c2VyR3JvdXBzPXYsdGhpcy51c2VyR3JvdXBzQ291bnQ9di5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKE09Pk0uVVJJPT09YS5VUkkpKX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91'@;
put 'cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmEuVVJJfV19KS50aGVuKGY9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBOMC5ZLlNhczk6dGhpcy51c2VySW5mbz1mLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1mLmFkYXB0ZXJS'@;
put 'ZXNwb25zZS5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVz'@;
put 'ZXJMb2dpbnM9Zi5hZGFwdGVyUmVzcG9uc2UubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBOMC5ZLlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQodj0+di5VUkk9PT1h'@;
put 'LlVSSSk7ZWxzZXtjb25zdCB2PWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6di5JRCxOQU1FOnYuTkFNRSxESVNQTEFZTkFNRTp2Lk5BTUV9fX10aGlzLnVzZXJEYXRhPWYuYWRhcHRlclJlc3BvbnNlLHRoaXMudXNlckdyb3Vwcz1mLmFkYXB0ZXJSZXNw'@;
put 'b25zZS5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLmxlbmd0aH0pfWdldFJvbGVVUkkoYSl7cmV0dXJuIGEuc3BsaXQoIk9NU09CSjpJZGVudGl0eUdyb3VwIilbMV0uc2xpY2UoMSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8YykoJGUoYnUpLCRlKFZvKSwkZSh5dSksJGUocGgpLCRlKExvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29u'@;
put 'c3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQs'@;
put 'Im5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNlcnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxD'@;
put 'aGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lm'@;
put 'Il0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04'@;
put 'Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8iXSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8tdGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUi'@;
put 'XSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwiY2xhc3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGluayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksZ3QoMixoa3QsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLHBrdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxna3QsMywwLCJkaXYiLDUpKDYsVmt0'@;
put 'LDE5LDExLCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIixoLnVzZXJzKSxmZSgpLE1lKCJuZ0Zvck9mIixoLnVzZXJzKSxmZSgyKSxNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLnVzZXJEYXRhJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbUXMs'@;
put 'YmEsbDEsdWIsR2wsdGwsV28sQWgsUGQsT2wsWTEsYTQsaTRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQmt0PWM9Plsic2VnbWVudCIsY10samt0PShjLGwpPT4oeyJzZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfSk7ZnVuY3Rpb24gemt0'@;
put 'KGMsbCl7MSZjJiZXdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIFVrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsInNwYW4iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5vblZhbHVlQ2xpY2soaCkpfSks'@;
put 'T2UoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoKSxTcihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24gWmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLEZ0KCJzZWdtZW50TGlua0Ns'@;
put 'aWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS5vblNlZ21lbnRMaW5rQ2xpY2soaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSxNZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgi'@;
put 'LGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVwdGgrMSl9fWZ1bmN0aW9uIFdrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDty'@;
put 'ZXR1cm4gQ3QoTGUoKS50b2dnbGUoaCkpfSksZ3QoMix6a3QsMSwwLCJkaXYiLDQpLGRlKDMsInNwYW4iLDUpLE9lKDQpLGhlKCksZGUoNSwic3BhbiIsNiksT2UoNiwiOiAiKSxoZSgpLGd0KDcsVWt0LDIsMSwic3BhbiIsNyksaGUoKSxndCg4LFprdCwyLDQsInNlY3Rpb24iLDgpLGhlKCl9'@;
put 'aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTtNZSgibmdDbGFzcyIsbHAoNixCa3QsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLGZlKCksTWUoIm5nQ2xhc3MiLGNwKDgsamt0LGQuaXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5kZWQpKSxmZSgpLE1lKCJuZ0lmIixkLmlzRXhwYW5k'@;
put 'YWJsZShhKSksZmUoMiksU3IoYS5rZXkpLGZlKDMpLE1lKCJuZ0lmIiwhYS5leHBhbmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSxmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShhKSl9fWxldCBZa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhw'@;
put 'YW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgS3IsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3Qi'@;
put 'PT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFjaChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMu'@;
put 'anNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVjdCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlw'@;
put 'ZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21lbnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitk'@;
put 'LGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFsdWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nh'@;
put 'c2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5rIjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmlu'@;
put 'ZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJudWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3Ry'@;
put 'aW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJz'@;
put 'dHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtN'@;
put 'YXA7cmV0dXJuIGZ1bmN0aW9uIGgoZix2KXtsZXQgTSxJO3JldHVybiJvYmplY3QiIT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9m'@;
put 'IFN0cmluZz9mOihNPWQuZ2V0KGYpLHZvaWQgMCE9PU0/eyRyZWY6TX06KGQuc2V0KGYsdiksQXJyYXkuaXNBcnJheShmKT8oST1bXSxmLmZvckVhY2goZnVuY3Rpb24oRyxyZSl7SVtyZV09aChHLHYrIlsiK3JlKyJdIil9KSk6KEk9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlv'@;
put 'bihHKXtJW0ddPWgoZltHXSx2KyJbIitKU09OLnN0cmluZ2lmeShHKSsiXSIpfSkpLEkpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1d'@;
put 'LGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOltibF0sZGVjbHM6Mix2YXJzOjEs'@;
put 'Y29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJh'@;
put 'dG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwi'@;
put 'anNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwic2VjdGlvbiIsMCksZ3QoMSxXa3QsOSwxMSwic2VjdGlvbiIsMSksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBl'@;
put 'bmRlbmNpZXM6W3Z1LFFzLGJhLGNdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQt'@;
put 'c2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHgg'@;
put 'MTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1o'@;
put 'ZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21l'@;
put 'bnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1u'@;
put 'dW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpz'@;
put 'b24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRl'@;
put 'LCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6'@;
put 'dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAu'@;
put 'c2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25n'@;
put 'Y29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+'@;
put 'IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRb'@;
put 'X25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29u'@;
put 'LXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5k'@;
put 'ZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09N'@;
put 'UCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2Vn'@;
put 'bWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4'@;
put 'LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhw'@;
put 'YW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksR2t0PSgoKT0+e2Ns'@;
put 'YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1BaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xhXX0pLGN9KSgpLCRrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygi'@;
put 'LyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxpdCgiLyIpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3Qgdj1oW2ZdO2QrPSIvIit2LGhbZl09YDxhIGhyZWY9JHtkfT4ke3Z9PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLEtrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdp'@;
put 'ZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJwcmV0dHlqc29uIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWGt0KGMsbCl7aWYoMSZj'@;
put 'JiYoZGUoMCwib3B0aW9uIiwyNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3lNKCJ2YWx1ZSIsYS52YWx1ZSksZmUoKSxMcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gcWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0Z3JvdXAiLDIyKSxndCgxLFhrdCwyLDIsIm9w'@;
put 'dGlvbiIsMjMpLFFvKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTtNZSgibGFiZWwiLGEua2V5KSxmZSgpLE1lKCJuZ0Zvck9mIixBYygyLDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gSmt0KGMsbCl7MSZjJiYoZGUoMCwicCIs'@;
put 'MjUpLE9lKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAiKSxoZSgpKX1mdW5jdGlvbiBRa3QoYyxsKXsxJmMmJld0KDAsImNsci1zcGlubmVyIiwyNil9ZnVuY3Rpb24gZUR0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIHREdChjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwzMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIsQ3QoaC5saW5rc0xpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIG5EdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1P'@;
put 'bigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYiLDI4KSgyLCJpbnB1dCIsMjksMCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZ2koZi5saW5rc1NlYXJjaCxoKXx8KGYubGlua3NTZWFyY2g9aCksQ3QoaCl9KSxGdCgi'@;
put 'a2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsZUR0LDEsMCwiY2xyLWljb24iLDMwKSg1LHREdCwxLDAsImNsci1pY29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1kYSgzKSxkPUxlKCk7ZmUoMiksZmko'@;
put 'Im5nTW9kZWwiLGQubGlua3NTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gckR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEZ0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50TGlua3MpKX0pLHBpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNp'@;
put 'dDtyZXR1cm4gZ2koZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkubGlua09uQ2xpY2soaCkpfSksV3QoMiwiY2xyLWljb24iLDM3'@;
put 'KSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLEJ1KCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rp'@;
put 'b24gaUR0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxyRHQsNCw0LCJjbHItdHJlZS1ub2RlIiwzNCksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGFEdChjLGwpezEmYyYmV3QoMCwiY2xyLWljb24iLDMyKX1mdW5j'@;
put 'dGlvbiBzRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLml0ZW1zU2VhcmNoPSIiLEN0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBv'@;
put 'RHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDM4LDEpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYuaXRlbXNTZWFyY2gsaCl8fChmLml0'@;
put 'ZW1zU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LGFEdCwxLDAsImNsci1pY29uIiwzMCkoNSxzRHQsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9ZGEoMyksZD1MZSgpO2ZlKDIpLGZpKCJuZ01vZGVsIixkLml0ZW1zU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGxEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNs'@;
put 'ci10cmVlLW5vZGUiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRwb2ludEl0ZW1zKSl9KSxwaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0'@;
put 'KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLml0ZW1PbkNsaWNr'@;
put 'KGgpKX0pLFd0KDIsImNsci1pY29uIiwzNyksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxMcigiICIsYS5uYW1l'@;
put 'fHxhLmlkLCIgIil9fWZ1bmN0aW9uIGNEdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsbER0LDQsMywiY2xyLXRyZWUtbm9kZSIsMzQpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiB1RHQoYyxsKXsxJmMmJld0KDAs'@;
put 'ImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gZER0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwibmd4LWpzb24tdmlld2VyIiw0OSksRnQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSxo'@;
put 'ZSgpfTImYyYmTWUoImpzb24iLExlKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gaER0KGMsbCl7aWYoMSZjJiYoYWkoMCksT2UoMSksUW8oMiwicHJldHR5anNvbiIpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLExyKCJcbiAgICAgICAgICAgICIsQWMo'@;
put 'MiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1bmN0aW9uIGZEdChjLGwpe2lmKDEmYyYmKGFpKDApLE9lKDEsIlxuICAgICAgICAgICIpLGd0KDIsZER0LDEsMiwibmd4LWpzb24tdmlld2VyIiw0OCksT2UoMywiXG4gICAgICAgICAgIiksZ3QoNCxoRHQsMywzLCJuZy1j'@;
put 'b250YWluZXIiLDIxKSxPZSg1LCJcbiAgICAgICAgIiksc2koKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLE1lKCJuZ0lmIiwhYS5yYXdKc29uKSxmZSgyKSxNZSgibmdJZiIsYS5yYXdKc29uKX19ZnVuY3Rpb24gcER0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7YWkoMCksZGUoMSwi'@;
put 'ZGl2Iiw0MCkoMiwic3BhbiIsNDEpLE9lKDMsIiBHRVQgIiksZGUoNCwicCIsNDIpLFFvKDUsImxpbmtpbnplIiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGhlKCksZGUoNiwiYnV0dG9uIiwxNiksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmNvcHlCcmVhZGNydW1zKCkpfSksV3QoNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTQpKDEwLCJsYWJlbCIpLE9lKDExLCJTdGFydCIpLGhlKCksZGUoMTIsImlu'@;
put 'cHV0Iiw0NCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZ2koZi5lbmRwb2ludC5zdGFydCxoKXx8KGYuZW5kcG9pbnQuc3RhcnQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxNCwibGFi'@;
put 'ZWwiKSxPZSgxNSwiTGltaXQiKSxoZSgpLGRlKDE2LCJpbnB1dCIsNDQpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIGdpKGYuZW5kcG9pbnQubGltaXQsaCl8fChmLmVuZHBvaW50LmxpbWl0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDE3'@;
put 'LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLFd0KDE4LCJjbHItaWNvbiIsNDYpLGhlKCkoKSgpLGRlKDE5LCJwcmUiLDQ3KSxPZSgyMCwiICAgICAgICAiKSxndCgyMSxmRHQsNiwyLCJuZy1jb250'@;
put 'YWluZXIiLDIxKSxPZSgyMiwiXG4gICAgICAiKSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoNCksTWUoImlubmVySFRNTCIsQWMoNSw3LGEuZW5kcG9pbnQudXJsKSxWNCksZmUoOCksZmkoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpLE1lKCJkaXNhYmxlZCIsdm9pZCAw'@;
put 'PT09YS5lbmRwb2ludC5zdGFydCksZmUoNCksZmkoIm5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQpLE1lKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksZmUoKSxNZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQu'@;
put 'c3RhcnQpLGZlKDQpLE1lKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9fWxldCBnRHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0'@;
put 'aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0aGlzLmVuZHBvaW50TGlua3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9h'@;
put 'ZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJjaD0iIix0aGlzLml0ZW1zU2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHloLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlz'@;
put 'LmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnMoKX1saW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLEpuLnZpeWFBcGkubGlu'@;
put 'a3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1zU2VhcmNoLCJuYW1lIiksSm4udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNo'@;
put 'fWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0ZW1PbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29s'@;
put 'bGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpe0puLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0'@;
put 'aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2lu'@;
put 'dEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9'@;
put 'IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7YS5tZXNzYWdlJiYoZD1hLm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVzc2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1g'@;
put 'KSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxkLG51bGwsIkhUVFAgRXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtj'@;
put 'b25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5z'@;
put 'cGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfWNvcHlKc29uKCl7dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhp'@;
put 'cy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlzLmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1h'@;
put 'PyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9IitkOiIifWAsZj1gJHt0aGlzLmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1sb2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlV'@;
put 'cmwoYSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlua3M9ZC5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQsdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0'@;
put 'YXJ0PWQuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxpbWl0fSxkPT57dGhpcy5lbmRwb2ludExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2Um'@;
put 'JihoPWQuZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlhdGlvbiYmKGg9YCR7aH1cbiR7ZC5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKCRlKGJ1KSwkZShJVyksJGUoVm8pLCRlKG1jKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xz'@;
put 'OjMzLHZhcnM6MTMsY29uc3RzOltbInNlYXJjaExpbmtzVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsxLCJhcGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdl'@;
put 'IiwibmdNb2RlbCJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2Vh'@;
put 'cmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1q'@;
put 'dXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwi'@;
put 'XSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwi'@;
put 'XSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0Iiwi'@;
put 'IiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJ'@;
put 'ZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwi'@;
put 'Y2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2Ui'@;
put 'LCJrZXl1cCIsIm5nTW9kZWwiXSxbImNsclNtYWxsIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBv'@;
put 'aW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsi'@;
put 'dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwicGxheSJdLFsxLCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lm'@;
put 'Il0sWzEsImQtYmxvY2siLDMsInNlZ21lbnRMaW5rQ2xpY2tlZCIsImpzb24iLCJleHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwyKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksT2UoNCwiQVBJ'@;
put 'IENvbGxlY3Rpb24iKSxoZSgpLGRlKDUsInNlbGVjdCIsMykscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBnaShoLmNvbGxlY3Rpb24sdil8fChoLmNvbGxlY3Rpb249diksdn0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRDb2xs'@;
put 'ZWN0aW9uKCl9KSxndCg2LHFrdCwzLDQsIm9wdGdyb3VwIiw0KSxRbyg3LCJrZXl2YWx1ZSIpLGhlKCkoKSgpLGd0KDgsSmt0LDIsMCwicCIsNSksZGUoOSwiZGl2Iiw2KSxndCgxMCxRa3QsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSxkZSgxMSwiY2xyLXRyZWUiKSxndCgxMixuRHQsNiwz'@;
put 'LCJjbHItdHJlZS1ub2RlIiw4KSgxMyxpRHQsMiwxLCJuZy1jb250YWluZXIiLDkpLGhlKCksZGUoMTQsImNsci10cmVlIiksZ3QoMTUsb0R0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTYsY0R0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTcsImRpdiIsMTApKDE4LCJkaXYi'@;
put 'LDExKSgxOSwiZGl2IiwxMikoMjAsImRpdiIsMTMpKDIxLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTQpKDIyLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMywiaW5wdXQiLDE1KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGdpKGgucmF3SnNvbix2KXx8KGgucmF3SnNv'@;
put 'bj12KSx2fSksaGUoKSxkZSgyNCwibGFiZWwiKSxPZSgyNSwiUkFXIEpzb24iKSxoZSgpKCkoKSxkZSgyNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmNvcHlKc29uKCl9KSxXdCgyNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoMjgsImg0IiwxOCksT2Uo'@;
put 'MjksIiBBUEkgRXhwbG9yZXIgIiksZ3QoMzAsdUR0LDEsMCwiY2xyLXNwaW5uZXIiLDE5KSxoZSgpKCksV3QoMzEsImhyIiwyMCksZ3QoMzIscER0LDIzLDksIm5nLWNvbnRhaW5lciIsMjEpLGhlKCkoKSksMiZkJiYoZmUoNSksZmkoIm5nTW9kZWwiLGguY29sbGVjdGlvbiksZmUoKSxNZSgi'@;
put 'bmdGb3JPZiIsQWMoNywxMSxoLmNvbGxlY3Rpb25zKSksZmUoMiksTWUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWguY29sbGVjdGlvbkxvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5lbmRwb2ludExpbmtz'@;
put 'Lmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmVuZHBvaW50TGlua3MpLGZlKDIpLE1lKCJuZ0lmIixoLmVuZHBvaW50SXRlbXMubGVuZ3RoPjApLGZlKCksTWUoIm5nRm9yT2YiLGguZW5kcG9pbnRJdGVtcyksZmUoNyksZmkoIm5nTW9kZWwiLGgucmF3SnNvbiksZmUoNyksTWUoIm5n'@;
put 'SWYiLGguZW5kcG9pbnRMb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbUXMsYmEsRDIsSTIsR2wsd0wsTWQsazIsdGwsV28sQWgsUGQsT2wsVjAsY28sSWQsRmIseGgsWTEscUwsRTcsWmIsUmQsYTQsaTQsWWt0LHhSLCRrdCxL'@;
put 'a3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgbUR0PW5ldyBTdCgiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rv'@;
put 'cnk6KCk9Pnt9fSk7bGV0IHZEdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IEduLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2'@;
put 'YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50'@;
put 'KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5x'@;
put 'dWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cg'@;
put 'bmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJv'@;
put 'bUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4h'@;
put 'MX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFk'@;
put 'LmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMu'@;
put 'd2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQo'@;
put 'dGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYo'@;
put 'YS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0'@;
put 'aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0'@;
put 'dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0'@;
put 'ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3Vi'@;
put 'amVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'KENyKEdhKSxDcihtbyksQ3IobUR0LDgpKX0sYy5cdTAyNzVwcm92PXJuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx5RHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRo'@;
put 'aXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IEtyLHRoaXMuY2JPbkVycm9yPW5ldyBLcix0aGlzLm9uQ2xpY2s9dj0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1Rh'@;
put 'cmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsdik6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xp'@;
put 'cGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsdik6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLHYpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xp'@;
put 'c3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29u'@;
put 'dGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNz'@;
put 'LmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpKCRlKEdhKSwkZShRaSksJGUoRXMpLCRlKHZEdCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06W1ZuLk5vbmUsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFp'@;
put 'bmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNnOiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxjfSkoKSxiRHQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTGFdfSksY30pKCk7dmFyIF9EdD1iKDI1MDAxKTtsZXQgd0R0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsLi4uZCl7Y29uc3QgaD1wYXJzZUludChkWzBd'@;
put 'KXx8MixmPSJudW1iZXIiIT10eXBlb2YgYT9wYXJzZUludChhKTphO3JldHVybigwLF9EdC5DKShmLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJjb252ZXJ0U2l6ZSIsdHlwZTpj'@;
put 'LHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IENEdD1bImhvdEluc3RhbmNlIl0sU0R0PVsicXVlcnlGaWx0ZXIiXSxNRHQ9KCk9PlsiIiwiICJdO2Z1bmN0aW9uIHhEdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNTUpLFd0KDEsImNsci1zcGlubmVyIiw1NiksaGUoKSl9ZnVuY3Rpb24g'@;
put 'RUR0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsNjIpfWZ1bmN0aW9uIFREdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiw2MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0'@;
put 'KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gQUR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNTcpKDEsImRpdiIsNTgpKDIsImlucHV0Iiw1OSwxKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3Qg'@;
put 'Zj1MZSgpO3JldHVybiBnaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxFRHQsMSwwLCJjbHItaWNvbiIsNjAp'@;
put 'KDUsVER0LDEsMCwiY2xyLWljb24iLDYxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWRhKDMpLGQ9TGUoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4w'@;
put 'KX19ZnVuY3Rpb24ga0R0KGMsbCl7MSZjJiZXdCgwLCJjbHItaWNvbiIsNjIpfWZ1bmN0aW9uIEREdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiw2MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLExlKCk7Y29uc3QgaD1kYSgzKSxmPUxlKDIpLiRpbXBs'@;
put 'aWNpdCx2PUxlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSksaGUoKX19ZnVuY3Rpb24gSUR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNTcpKDEsImRpdiIsNTgpKDIs'@;
put 'ImlucHV0Iiw2OCwyKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3Qg'@;
put 'aD1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGhlKCksZ3QoNCxrRHQsMSwwLCJjbHItaWNvbiIsNjApKDUsRER0LDEsMCwiY2xyLWljb24iLDYxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWRhKDMpLGQ9TGUoMikuJGltcGxpY2l0'@;
put 'O2ZlKDIpLE1lKCJpZCIsInNlYXJjaF8iK2QuTElCUkFSWVJFRiksZmkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFJEdChjLGwpezEmYyYmV3QoMCwi'@;
put 'Y2xyLWljb24iLDc1KX1mdW5jdGlvbiBMRHQoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiw3Nil9ZnVuY3Rpb24gT0R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw3MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS5uZ1ZhcixmPUxl'@;
put 'KCkuJGltcGxpY2l0LHY9TGUoMikuJGltcGxpY2l0LE09TGUoKTtyZXR1cm4gQ3QoaD8iIjpNLm9uVGFibGVDbGljayhmLHYpKX0pLGFpKDEsNzIpLGd0KDIsUkR0LDEsMCwiY2xyLWljb24iLDczKSgzLExEdCwxLDAsImNsci1pY29uIiw3NCksc2koKSxPZSg0KSxoZSgpfWlmKDImYyl7Y29u'@;
put 'c3QgYT1MZSgpLm5nVmFyLGQ9TGUoKS4kaW1wbGljaXQsaD1MZSgyKS4kaW1wbGljaXQsZj1MZSgpO1RyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLE1lKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZl'@;
put 'KCksTWUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksTHIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gUER0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsNzgpKDEsInNwYW4iKSxPZSgyLCIgVG8g'@;
put 'dW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0aW9uIEZEdChjLGwpezEmYyYmKGFpKDApLGd0KDEsUER0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsNzcpLHNpKCkpfWZ1bmN0aW9uIEhEdChjLGwpe2lmKDEmYyYm'@;
put 'KGRlKDAsImNsci10b29sdGlwIiksZ3QoMSxPRHQsNSw4LCJidXR0b24iLDcwKSgyLEZEdCwyLDAsIm5nLWNvbnRhaW5lciIsNDMpLGhlKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9TGUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsZC5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsYSl9'@;
put 'fWZ1bmN0aW9uIE5EdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiKSxndCgxLEhEdCwzLDIsImNsci10b29sdGlwIiw2OSksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1MZSgzKTtmZSgpLE1lKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19p'@;
put 'bl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gVkR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNjUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50cmVlTm9kZUNsaWNrZWQo'@;
put 'aCxmKSl9KSxwaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIGdpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25z'@;
put 'dCBoPUxlKCkuJGltcGxpY2l0LGY9TGUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLEN0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLFd0KDIsImNsci1pY29uIiw2NyksT2UoMyksaGUoKSxndCg0LElEdCw2LDQsImNsci10cmVlLW5vZGUiLDgpKDUsTkR0LDIsMSwi'@;
put 'Y2xyLXRyZWUtbm9kZSIsOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksZmkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLExy'@;
put 'KCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gQkR0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxWRHQsNiw3LCJjbHItdHJlZS1ub2RlIiw2NCksc2koKSksMiZjKXtjb25zdCBhPWwu'@;
put 'JGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBqRHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc5KSgxLCJzcGFuIiw4MCksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiB6RHQoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9T24oKTtkZSgwLCJkaXYiLDgxKSgxLCJkaXYiLDgyKSgyLCJkaXYiLDgzKSgzLCJkaXYiLDg0KSg0LCJidXR0b24iLDg1KSxXdCg1LCJjbHItaWNvbiIsODYpLGhlKCksZGUoNiwiaDMiLDQ4KSxPZSg3LCJFcnJvciIpLGhlKCkoKSxkZSg4LCJkaXYiLDE2KSg5LCJwIiksT2UoMTAsIllv'@;
put 'dSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSxoZSgpKCksZGUoMTEsImRpdiIsMjcpKDEyLCJidXR0b24iLDg3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxPZSgxMywiIE9rICIpLGhlKCkoKSgpKCkoKX19ZnVu'@;
put 'Y3Rpb24gVUR0KGMsbCl7MSZjJiZXdCgwLCJkaXYiLDg4KX1mdW5jdGlvbiBaRHQoYyxsKXsxJmMmJld0KDAsImFwcC1xdWVyeSIsbnVsbCwzKX1mdW5jdGlvbiBXRHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDg5KSgxLCJzcGFuIiw5MCksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgz'@;
put 'LCJkaXYiLDkxKSg0LCJwIiw5MiksT2UoNSwiTG9hZGluZyBUYWJsZSBWaWV3ZXIiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gWUR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDExNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLExlKCk7Y29uc3QgaD1kYSg1'@;
put 'KTtyZXR1cm4gQ3QoTGUoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKX19ZnVuY3Rpb24gR0R0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTE3KSxPZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiAkRHQoYyxsKXsxJmMmJld0KDAsImNsci1pY29uIiwxMTgpfWZ1bmN0aW9uIEtE'@;
put 'dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDExOSksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksTHIoIiAiLG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBYRHQoYyxsKXtpZigxJmMmJihk'@;
put 'ZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMjEpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgpLExyKCIgIixhLmRzTm90ZSwiICIpfX1mdW5jdGlvbiBxRHQoYyxsKXsxJmMmJihhaSgwKSxndCgxLFhEdCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDEyMCksc2koKSl9'@;
put 'ZnVuY3Rpb24gSkR0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLE9lKDEpLFFvKDIsInRob3VzYW5kU2VwYXJhdG9yIiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDQpO2ZlKCksSkkoIiAoIix6OCgyLDQsYS5udW1iZXJPZlJvd3MsIiwiKSwiICIsMT09PWEubnVtYmVyT2ZSb3dzPyJyb3ci'@;
put 'OiJyb3dzIiwiLCAiLGEuZmlsdGVyQ29scy5sZW5ndGgsIiIsMT09PWEuZmlsdGVyQ29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uIFFEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2FpKDApLGd0KDEsSkR0LDMsNywic3BhbiIsNDMpLGRlKDIsImNsci1pY29u'@;
put 'IiwxMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykucmVsb2FkVGFibGVEYXRhKCkpfSksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5udW1iZXJPZlJvd3MpfX1mdW5jdGlvbiBlSXQoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDEyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg1KS5lZGl0VGFibGUoKSl9KSxXdCgxLCJjbHItaWNvbiIsMTM0KSxkZSgyLCJzcGFuIiksT2UoMywiRWRpdCIpLGhlKCkoKX19ZnVuY3Rpb24gdEl0KGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNSkuZ29Ub0xpbmVhZ2UoKSl9KSxXdCgxLCJjbHItaWNvbiIsMTM1KSxkZSgyLCJzcGFuIiksT2UoMywiTGluZWFnZSIpLGhlKCkoKX19ZnVuY3Rpb24g'@;
put 'bkl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyNykoMSwiZGl2IiwxMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkubmV3Vmlld2JveCgpKX0pLFd0KDIsImNsci1pY29uIiwxMjkpLGRlKDMsInNwYW4i'@;
put 'KSxPZSg0LCJWaWV3Ym94ZXMiKSxoZSgpKCksZ3QoNSxlSXQsNCwwLCJkaXYiLDEzMCkoNix0SXQsNCwwLCJkaXYiLDEzMCksZGUoNywiZGl2IiwxMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkub3BlblFiKCkpfSksV3QoOCwiY2xyLWljb24iLDEzMSks'@;
put 'ZGUoOSwic3BhbiIpLE9lKDEwLCJGaWx0ZXIiKSxoZSgpKCksZGUoMTEsImRpdiIsMTI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLm9wZW5Eb3dubG9hZD0hMCl9KSxXdCgxMiwiY2xyLWljb24iLDEzMiksZGUoMTMsInNwYW4iKSxPZSgxNCwiRG93bmxv'@;
put 'YWQiKSxoZSgpKCksZGUoMTUsImRpdiIsMTI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLnNob3dXZWJRdWVyeSgpKX0pLFd0KDE2LCJjbHItaWNvbiIsMTMzKSxkZSgxNywic3BhbiIpLE9lKDE4LCJXZWIgUXVlcnkgVVJMIiksaGUoKSgpKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPUxlKDQpO2ZlKDUpLE1lKCJuZ0lmIixhLnRhYmxlRWRpdEV4aXN0cygpKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxldXJpKX19ZnVuY3Rpb24gckl0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duIiwxMjMpKDEsImJ1dHRvbiIsMTI0KSxXdCgyLCJjbHItaWNvbiIsMTI1'@;
put 'KSxPZSgzLCIgb3B0aW9ucyAiKSxoZSgpLGd0KDQsbkl0LDE5LDIsImNsci1kcm9wZG93bi1tZW51IiwxMjYpLGhlKCkpLDImYyYmTWUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCl9ZnVuY3Rpb24gaUl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMzYpKDEsInNwYW4iKSxPZSgy'@;
put 'LCJGSUxURVIgOiAiKSxkZSgzLCJiIiksT2UoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSg0KSxTcihhLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIGFJdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsOTkpKDEsInNlY3Rpb24iLDEwMCkoMiwiZm9ybSIsMTAx'@;
put 'KSgzLCJkaXYiLDEwMikoNCwiaW5wdXQiLDEwMyw0KSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1kYSg1KTtyZXR1cm4gQ3QoTGUoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKSxndCg2LFlEdCwxLDAsImNsci1pY29uIiwxMDQpKDcsR0R0LDIsMCwic3BhbiIs'@;
put 'MTA1KSxoZSgpLGRlKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIsMTA2KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKTtyZXR1cm4gZ2koZi5zZWFyY2hOdW1lcmljLGgpfHwo'@;
put 'Zi5zZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgxMSwibGFiZWwiKSxPZSgxMiwiTnVtZXJpYyIpLGhlKCkoKSgpKCkoKSxkZSgxMywiZGl2IiwxMDcpKDE0LCJwIiwxMDgpKDE1LCJjbHItdG9vbHRpcCIsMTA5KSgxNiwiY2xyLWljb24iLDExMCksRnQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChhKSxDdChMZSgyKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDE3LCREdCwxLDAsImNsci1pY29uIiwxMTEpKDE4LEtEdCwyLDEsInNwYW4iLDExMikoMTkscUR0LDIsMCwibmctY29udGFpbmVyIiw0MyksaGUoKSxndCgyMCxRRHQsMywxLCJuZy1jb250YWluZXIi'@;
put 'LDQzKSxoZSgpKCksZGUoMjEsImRpdiIsMTEzKSxndCgyMixySXQsNSwxLCJjbHItZHJvcGRvd24iLDExNCksaGUoKSxndCgyMyxpSXQsNSwxLCJkaXYiLDExNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNCksTWUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4'@;
put 'dCIpLGZlKDIpLE1lKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLGZlKDMpLGZpKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLGZlKDcpLE1lKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVk'@;
put 'ZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsYS5kc05vdGUmJmEuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoMiks'@;
put 'TWUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLGZlKCksTWUoIm5nSWYiLCIxPTEiIT09YS5xdWVyeVRleHQmJiFabygxMCxNRHQpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBzSXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEz'@;
put 'NyksV3QoMSwiaW1nIiwxMzgpLGRlKDIsImgzIiwxMzkpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEgbGlicmFyeSAiKSxoZSgpKCkpfWZ1bmN0aW9uIG9JdChjLGwpezEmYyYmV3QoMCwiY2xyLXNwaW5uZXIiLDU2KX1mdW5jdGlvbiBsSXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE0NiksV3Qo'@;
put 'MSwiaW1nIiwxNDcpLGRlKDIsInAiLDEzOSksT2UoMywiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIGNJdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsInAiLDE1MCksT2UoMSwiIE5vIGxpYnJhcnkgaW5mbyBmb3VuZC4gQ2xpY2sgIiksZGUoMiwi'@;
put 'Y2xyLWljb24iLDE1MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSxPZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLGhlKCl9fWZ1bmN0aW9uIHVJdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1'@;
put 'MiksT2UoMiwiRU5HSU5FOiIpLGhlKCksZGUoMywidGQiLDE1MyksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksTHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9uIGRJdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiko'@;
put 'MSwidGQiLDE1MiksT2UoMiwiTElCSUQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUzKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxMcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBoSXQoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJ0ciIpKDEsInRkIiwxNTIpLE9lKDIsIkxJQk5BTUU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUzKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxMcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1FOiIiLCIgIil9fWZ1bmN0aW9uIGZJdChjLGwpe2lm'@;
put 'KDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksT2UoMiwiTElCU0laRToiKSxoZSgpLGRlKDMsInRkIiwxNTMpLE9lKDQpLFFvKDUsImNvbnZlcnRTaXplIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksTHIoIiAiLGEubGliaW5mb1swXT9BYyg1LDEsYS5saWJpbmZvWzBd'@;
put 'LkxJQlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9uIHBJdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksT2UoMiwiT1dORVJTOiIpLGhlKCksZGUoMywidGQiLDE1MyksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksTHIoIiAiLGEubGliaW5mb1swXT9h'@;
put 'LmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIGdJdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksT2UoMiwiUEFUSFM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUzKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxMcigiICIsYS5saWJp'@;
put 'bmZvWzBdP2EubGliaW5mb1swXS5QQVRIUzoiIiwiICIpfX1mdW5jdGlvbiBtSXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLE9lKDIsIlBFUk1TOiIpLGhlKCksZGUoMywidGQiLDE1MyksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksTHIoIiAi'@;
put 'LGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24gdkl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxPZSgyLCJTQ0hFTUFTOiIpLGhlKCksZGUoMywidGQiLDE1MyksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUo'@;
put 'NCksTHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5jdGlvbiB5SXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLE9lKDIsIlRBQkxFX0NOVDoiKSxoZSgpLGRlKDMsInRkIiwxNTMpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25z'@;
put 'dCBhPUxlKDUpO2ZlKDQpLExyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NOVDoiIiwiICIpfX1mdW5jdGlvbiBiSXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLE9lKDIsIkNBVEFMT0dfQ05UOiIpLGhlKCksZGUoMywidGQiLDE1MyksT2UoNCks'@;
put 'aGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksTHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uQ0FUQUxPR19DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gX0l0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwidGFibGUiKSxndCgyLHVJdCw1LDEsInRyIiw0MykoMyxkSXQsNSwx'@;
put 'LCJ0ciIsNDMpKDQsaEl0LDUsMSwidHIiLDQzKSg1LGZJdCw2LDMsInRyIiw0MykoNixwSXQsNSwxLCJ0ciIsNDMpKDcsZ0l0LDUsMSwidHIiLDQzKSg4LG1JdCw1LDEsInRyIiw0MykoOSx2SXQsNSwxLCJ0ciIsNDMpKDEwLHlJdCw1LDEsInRyIiw0MykoMTEsYkl0LDUsMSwidHIiLDQzKSxo'@;
put 'ZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgyKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uRU5HSU5FKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJJRCksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksZmUoKSxNZSgibmdJ'@;
put 'ZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5PV05FUlMpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QRVJNUyksZmUoKSxNZSgibmdJ'@;
put 'ZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1BUyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5UQUJMRV9DTlQpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uQ0FUQUxPR19DTlQpfX1mdW5jdGlvbiB3SXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE0'@;
put 'OCksZ3QoMSxjSXQsNCwwLCJwIiwxNDkpKDIsX0l0LDEyLDEwLCJuZy1jb250YWluZXIiLDQzKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxNZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiBDSXQo'@;
put 'YyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTthaSgwKSxkZSgxLCJkaXYiLDE0MCksV3QoMiwic2VjdGlvbiIsMTAwKSxkZSgzLCJkaXYiLDE0MSkoNCwicCIsOTIpLE9lKDUpLGhlKCksZGUoNiwiY2xyLWljb24iLDEyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChM'@;
put 'ZSgyKS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSgpLFd0KDcsImRpdiIsMTEzKSxoZSgpLGRlKDgsImRpdiIsMTQyKSxndCg5LG9JdCwxLDAsImNsci1zcGlubmVyIiwxNDMpLGhlKCksZ3QoMTAsbEl0LDQsMCwiZGl2IiwxNDQpKDExLHdJdCwzLDIsImRpdiIsMTQ1KSxzaSgpfWlmKDImYyl7'@;
put 'Y29uc3QgYT1MZSgyKTtmZSg1KSxMcigiICIsYS5saWIsIiAiKSxmZSg0KSxNZSgibmdJZiIsbnVsbD09PWEubGliaW5mbyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyl9fWZ1bmN0aW9uIFNJdChjLGwpezEmYyYmKGRl'@;
put 'KDAsImgzIiwxNTcpLE9lKDEsIiBObyBkYXRhIGZvdW5kIHdpdGggZ2l2ZW4gY29uZGl0aW9ucyAiKSxoZSgpKX1mdW5jdGlvbiBNSXQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTU3KSxPZSgxLCIgTm8gZGF0YSBmb3VuZCBkdWUgdG8gc2FzIHJlcXVlc3QgZXJyb3IgIiksaGUoKSl9ZnVuY3Rp'@;
put 'b24geEl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNTQpLFd0KDEsImNsci1pY29uIiwxNTUpLGd0KDIsU0l0LDIsMCwiaDMiLDE1NikoMyxNSXQsMiwwLCJoMyIsMTU2KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMiksTWUoIm5nSWYiLGEubm9EYXRhKSxmZSgpLE1lKCJuZ0lm'@;
put 'IixhLm5vRGF0YVJlcUVycil9fWZ1bmN0aW9uIEVJdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTU4KSgxLCJkaXYiLDE1OSksV3QoMiwiaG90LXRhYmxlIiwxNjAsNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMiksTWUoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoInNldHRp'@;
put 'bmdzIixhLmhvdFRhYmxlU2V0dGluZ3MpfX1mdW5jdGlvbiBUSXQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNjEpLE9lKDEpLFd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLExyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0'@;
put 'ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gQUl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MyksZ3QoMSxhSXQsMjQsMTEsImRpdiIsOTQpKDIsc0l0LDQsMCwiZGl2Iiw5NSkoMyxDSXQsMTIsNCwibmctY29udGFpbmVyIiw0Myko'@;
put 'NCx4SXQsNCwyLCJkaXYiLDk2KSg1LEVJdCw0LDIsImRpdiIsOTcpLGRlKDYsImRpdiIpLGd0KDcsVEl0LDMsMSwicCIsOTgpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxNZSgibmdJZiIsYS50YWJsZSksZmUoKSxNZSgibmdJZiIsIShhLmxpYnx8YS50YWJsZXx8YS5ub0RhdGFS'@;
put 'ZXFFcnJ8fGEubm9EYXRhKSksZmUoKSxNZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJiFhLnRhYmxlJiZhLmxpYiksZmUoKSxNZSgibmdJZiIsYS5ub0RhdGF8fGEubm9EYXRhUmVxRXJyKSxmZSgpLE1lKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmYS50'@;
put 'YWJsZSksZmUoMiksTWUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5JiZhLmhvdFRhYmxlLmRhdGEmJmEuaG90VGFibGUuZGF0YS5sZW5ndGg+YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWxldCAk'@;
put 'Tj0oKCk9PntjbGFzcyBje3VwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKXt0aGlzLmhvdFRhYmxlU2V0dGluZ3M9e211bHRpQ29sdW1uU29ydGluZzohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDozMCxjb2xIZWFkZXJzOnRoaXMuaG90VGFibGUuY29sSGVhZGVycyxjb2x1bW5zOnRoaXMu'@;
put 'aG90VGFibGUuY29sdW1ucyxjb3B5UGFzdGU6dGhpcy5ob3RUYWJsZS5jb3B5UGFzdGUsY29udGV4dE1lbnU6dGhpcy5ob3RUYWJsZS5jb250ZXh0TWVudSxmaWx0ZXJzOiEwLGRyb3Bkb3duTWVudTp0aGlzLmhvdFRhYmxlLmRyb3Bkb3duTWVudSxoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWln'@;
put 'aHQsc3RyZXRjaEg6ImFsbCIsbW9kaWZ5Q29sV2lkdGg6dGhpcy5tYXhXaWR0aENoZWtlcixjZWxsczp0aGlzLmhvdFRhYmxlLmNlbGxzLG1heFJvd3M6dGhpcy5ob3RUYWJsZS5tYXhSb3dzLG1hbnVhbENvbHVtblJlc2l6ZTohMCxhZnRlckdldENvbEhlYWRlcjp0aGlzLmhvdFRhYmxlLmFm'@;
put 'dGVyR2V0Q29sSGVhZGVyLHJvd0hlYWRlcnM6dGhpcy5ob3RUYWJsZS5yb3dIZWFkZXJzLHJvd0hlYWRlcldpZHRoOnRoaXMuaG90VGFibGUucm93SGVhZGVyV2lkdGgscm93SGVpZ2h0czp0aGlzLmhvdFRhYmxlLnJvd0hlaWdodHMsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlLmxpY2Vuc2VL'@;
put 'ZXksY2xhc3NOYW1lOiJodERhcmsifX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcscmUsdWUpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT12LHRoaXMuZXZlbnRTZXJ2aWNl'@;
put 'PU0sdGhpcy5sb2dnZXJTZXJ2aWNlPUksdGhpcy5oZWxwZXJTZXJ2aWNlPUcsdGhpcy5sb2NhdGlvbj1yZSx0aGlzLmNkZj11ZSx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGxoLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFy'@;
put 'eVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJpPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJs'@;
put 'RmlsdGVyUGs9bnVsbCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9E'@;
put 'YXRhPSExLHRoaXMubm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pz'@;
put 'Q29uZmlnPW5ldyB5aC5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMuaG90VGFibGVTZXR0aW5ncz17fSx0aGlzLm51bWJlck9mUm93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5k'@;
put 'YXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpb'@;
put 'XSxjb2x1bW5zOltdLGhlaWdodDoiY2FsYygxMDB2aCAtIDE4MnB4KSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAscm93SGVhZGVyczp5ZT0+IiAiLGFmdGVyR2V0Q29sSGVhZGVy'@;
put 'Oih5ZSxFZSxCZSk9Pntjb25zdCBHZT10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoeWUpO0dlJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKEdlKT4tMSYmRWUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksRWUuY2xhc3NMaXN0LmFkZChKbi5oYW5kc29udGFibGUu'@;
put 'ZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjIwLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1u'@;
put 'SGVhZGVyc09ubHk6ITB9LGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOih5ZSxF'@;
put 'ZSxCZSxHZSxzdCxwdCk9Pntjb25zdCBkdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IHF0LG1uPSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCB3bj10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLGhuPXduP3duWzBdWzFdOi0x'@;
put 'LE1uPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChobik7cXQ9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbTW5dLHF0JiYobW49YExBQkVMOiAke3F0Py5sYWJlbH08YnI+VFlQRTogJHtxdD8udHlwZX08YnI+TEVOR1RIOiAke3F0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHtxdD8uZm9ybWF0'@;
put 'fWApfXJldHVybiBkdC5pbm5lckhUTUw9bW4sZHR9fX19fSx0aGlzLmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy52aWV3Ym94T3Blbj0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfW5nT25J'@;
put 'bml0KCl7IiIhPT1Kbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbiYmMD09PU9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zKS5sZW5ndGgmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtKbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InBy'@;
put 'ZXNlcnZlIn0pLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSYmKEpuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2RhdGEiKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGUubGljZW5z'@;
put 'ZUtleT1hLHRoaXMudXBkYXRlSG90VGFibGVTZXR0aW5ncygpfSl9bmV3Vmlld2JveCgpe3RoaXMudmlld2JveE9wZW49ITB9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfXNl'@;
put 'YXJjaFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBoPWEudmFsdWUsZj1kLmxpYisiLiIrZC50YWJsZSx2PXBhcnNlSW50KGQucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKXx8MDt5aWVsZCBkLnNhc1N0b3JlU2Vy'@;
put 'dmljZS52aWV3RGF0YVNlYXJjaChoLGQuc2VhcmNoTnVtZXJpYyxmLHYpLnRoZW4oTT0+e00uc2FzcGFyYW1zfHxNLnZpZXdEYXRhPyhkLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVy'@;
put 'c2lvbnN8fFtdLGQuc2V0RFNOb3RlKCksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwwPT09ZC5ob3RUYWJsZS5kYXRh'@;
put 'Lmxlbmd0aD9kLm5vRGF0YT0hMDooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEsZC5zZXR1cEhvdCgpKSk6ZC5zZWFyY2hMb2FkaW5nPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGQuc2VhcmNoTG9hZGluZz0hMX0pKCl9cmVsb2FkVGFibGVEYXRhKCl7dGhp'@;
put 'cy52aWV3RGF0YSh0aGlzLnVybEZpbHRlclBrfHwwKX1yZWxvYWRMaWJJbmZvKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLmxpYmluZm89bnVsbCxhLnNhc1N0b3JlU2VydmljZS5yZWZyZXNoTGliSW5mbyhhLmxpYikudGhlbihmdW5jdGlvbigpe3ZhciBkPVEoZnVuY3Rp'@;
put 'b24qKGgpe2EubGliaW5mbz1oLmxpYmluZm8sSm4udmlld2VyLmxpYmluZm89YS5saWJpbmZvO2NvbnN0IGY9YS5saWJyYXJpZXMuZmluZCh2PT52LkxJQlJBUllSRUY9PT1hLmxpYik7ZiYmKGYubGliaW5mbz1hLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBkLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKX19KCksZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxudWxsPT09YS5saWJpbmZvJiYoYS5saWJpbmZvPVtdKX0pfSkoKX1maWx0ZXJGbihhKXt0aGlzLmxpYnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIoaD0+LTEhPT1oLkxJQlJBUllOQU1FLnRvTG93'@;
put 'ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG9jYWxlTG93ZXJDYXNlKCkpKX1kb3dubG9hZERhdGEoKXtsZXQgYT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxkPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgSSxm'@;
put 'PSImdHlwZT0iK3RoaXMuZG93bmxvYWRGb3JtYXQsdj0iJnRhYmxlPSIrdGhpcy50YWJsZVRpdGxlLE09IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO0k9dHlwZW9mIHRoaXMu'@;
put 'cm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKSx3aW5kb3cub3BlbihhK2grIi8/X3Byb2dyYW09IitkKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2YrditNKyImZmlsdGVyPSIrSSks'@;
put 'dGhpcy5vcGVuRG93bmxvYWQ9ITF9ZG93bmxvYWREREwoKXtsZXQgYT10aGlzLmxpYixkPXRoaXMudGFibGUsaD10aGlzLmRvd25sb2FkRm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxmPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHY9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3Qg'@;
put 'TT10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGYrTSsiLz9fcHJvZ3JhbT0iK3YrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7ZH0mbGlicmVmPSR7YX0mZmxhdm91cj0ke2h9JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZl'@;
put 'clR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9b25DbGlDb21tYW5kRm9jdXMoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5h'@;
put 'dmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYlRhYil9dGFibGVFZGl0RXhpc3RzKCl7bGV0IGE9e307YT1Kbi5lZGl0b3IubGlic0FuZFRhYmxlcztsZXQgZD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzFdLGg9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIWFbaF0mJmFb'@;
put 'aF0uaW5jbHVkZXMoZCl9Z29Ub0xpbmVhZ2UoKXtsZXQgZD1gL3ZpZXcvbGluZWFnZS8ke3RoaXMudGFibGV1cmkuc3BsaXQoIlxcIilbMV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZCl9c2hvd1dlYlF1ZXJ5KCl7bGV0IGE7dGhpcy53ZWJRdWVyeT0hMCxhPXR5cGVv'@;
put 'ZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCk7bGV0IGQ9d2luZG93LmxvY2F0aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IGg9dGhp'@;
put 'cy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgdj1gJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0ke2R9LyR7aH0vP19wcm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdk'@;
put 'YXRhJnR5cGU9V0VCJHt0aGlzLndlYlF1ZXJ5VGFiPyJUQUIiOiJDU1YifSZ0YWJsZT0ke3RoaXMudGFibGVUaXRsZX0keyImZmlsdGVyPSIrYX1gO3RoaXMud2ViUXVlcnlUZXh0PXYucmVwbGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVt'@;
put 'ZW50KCJ0ZXh0YXJlYSIpO2Euc3R5bGUucG9zaXRpb249ImZpeGVkIixhLnN0eWxlLmxlZnQ9IjAiLGEuc3R5bGUudG9wPSIwIixhLnN0eWxlLm9wYWNpdHk9IjAiLGEudmFsdWU9dGhpcy53ZWJRdWVyeVRleHQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmZvY3VzKCksYS5zZWxl'@;
put 'Y3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9'@;
put 'Y2hlY2tFeHBhbmQoYSl7fWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllSRUYhPT1kLkxJQlJBUllSRUYmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2lu'@;
put 'Zz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcmllcywhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlz'@;
put 'LmxpYnJhcmllcyxkKX1saWJyYXJ5RXhwYW5kZWRDaGFuZ2UoYSxkKXthJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2lmKGQudGFibGVzP2QuZXhwYW5kZWQ9'@;
put 'ISFofHwhZC5leHBhbmRlZDp5aWVsZCBmLnNlbGVjdFRhYmxlKGEsITEsZCksZC5leHBhbmRlZCl7Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpO2xldCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNzZWFyY2hfJHtkLkxJQlJBUllSRUZ9YCk7diYmdi5mb2N1cygpLGQmJmQubGliaW5mbyYmKGYu'@;
put 'bGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2Rh'@;
put 'dGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGlicmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1vblRhYmxlQ2xpY2so'@;
put 'YSxkKXt0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSksdGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRh'@;
put 'YmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/Sm4udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Kbi52aWV3ZXIudGFibGVzLGYubGliaW5mbz1Kbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5m'@;
put 'bz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbih2PT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgTT12Lm1wdGFibGVzLm1hcChmdW5jdGlvbihJKXtyZXR1cm4gSS5NRU1OQU1FfSk7Zi5saWJpbmZvPXYubGliaW5mb3x8W10s'@;
put 'Zi50YWJsZXM9TSxoJiYoaC50YWJsZXM9TSxoLmxpYmluZm89Zi5saWJpbmZvKSxKbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEpuLnZpZXdlci5saWJyYXJ5PWYubGliLEpuLnZpZXdlci50YWJsZXM9Zi50YWJsZXMsSm4udmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEpuLnZpZXdl'@;
put 'ci50YWJsZXNTZXQ9ITB9KS5jYXRjaCh2PT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKHYpLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFibGVEaXNhYmxlPSEwLEpuLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYu'@;
put 'Y2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlz'@;
put 'LnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsSm4udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtKbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEpuLnZp'@;
put 'ZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsSm4udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEpuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxKbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sSm4udmlld2VyLmZpbHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhp'@;
put 'cy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJh'@;
put 'cmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxKbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10'@;
put 'aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCBoO2lmKGQubG9hZGluZ1RhYmxlVmlldz0hMCx0eXBlb2YgZC5saWJEYXRhc2V0PiJ1IiloPWQubGliKyIuIitkLnRhYmxlO2Vsc2UgaWYodHlwZW9mIGQubGliPiJ1IiYmdHlwZW9mIGQudGFibGU+InUiKXtsZXQgTT1bXTtpZihNPWQubGli'@;
put 'RGF0YXNldC5zcGxpdCgiLiIpLEpuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUpuLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKEk9PntkLmxpYnJhcmllcz1JLnNhc2xpYnN9KS5jYXRjaChJPT57ZC5sb2dnZXJTZXJ2aWNl'@;
put 'LmVycm9yKEkpfSksZC5saWI9TVswXSxKbi52aWV3ZXIuc3RhcnR1cFNldClkLnRhYmxlcz1Kbi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0IEk9ZC5saWJyYXJpZXMuZmluZChHPT5HLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3lpZWxkIGQuc2FzU3Rv'@;
put 'cmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oRz0+e2QudGFibGVzPUcubXB0YWJsZXMubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUuTUVNTkFNRX0pLEkudGFibGVzPWQudGFibGVzLEpuLnZpZXdlci5saWJyYXJpZXM9ZC5saWJyYXJpZXMsSm4udmlld2VyLnRhYmxlcz1kLnRh'@;
put 'YmxlcyxKbi52aWV3ZXIuc3RhcnR1cFNldD0hMH0pLmNhdGNoKEc9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoRyl9KX1kLnRhYmxlPU1bMV0sZC50YWJsZUZsYWc9ITEsaD1kLmxpYkRhdGFzZXQsZC5saWJUYWI9aH1lbHNlIEpuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUpuLnZp'@;
put 'ZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKE09PntkLmxpYnJhcmllcz1NLnNhc2xpYnN9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksdHlwZW9mIGQudGFibGU8InUiJiYoSm4udmlld2VyLnN0YXJ0dXBTZXQ/ZC50'@;
put 'YWJsZXM9Sm4udmlld2VyLnRhYmxlczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKE09PntkLnRhYmxlcz1NLm1wdGFibGVzLm1hcChmdW5jdGlvbihJKXtyZXR1cm4gSS5NRU1OQU1FfSl9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0p'@;
put 'LGQucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pLGQudGFibGVGbGFnPSExLGg9ZC5saWIrIi4iK2QudGFibGUsZC50YWJsZVRpdGxlPWgsZC5saWJUYWI9aCk7ZC5yb3V0ZXIudXJsLnNwbGl0KCIvIikubGVuZ3RoPjMm'@;
put 'JmgmJih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShoLGEpLnRoZW4oTT0+e2lmKE0ucXVlcnkubGVuZ3RoPjAmJiJ2aWV3Ij09PUpuLnJvb3RQYXJhbSYmMD09PUpuLnZpZXdlci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihKbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PWQuaGVscGVy'@;
put 'U2VydmljZS5kZWVwQ2xvbmUoTS5xdWVyeSksSm4udmlld2VyLmZpbHRlci5saWJkcz1kLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sZC5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZSgidmlld2VyIixNLmNvbHMpKSxkLmFib3J0QWN0aXZlPSExLGQu'@;
put 'ZmlsdGVyQ29scz1NLmNvbHMsR2VlKGQuZmlsdGVyQ29scyxbXSxNLiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwiU0FTOSI9PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5'@;
put 'cGUpe2xldCBHPU0uc2FzcGFyYW1zWzBdLlRBQkxFVVJJO0cmJkcubGVuZ3RoPjAmJihkLnRhYmxldXJpPUcpfWlmKGQuaG90VGFibGUuZGF0YT1NLnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPU0uJHZpZXdkYXRhLGQuZHNtZXRhPU0uZHNtZXRhLGQudmVyc2lvbnM9TS52ZXJzaW9uc3x8W10s'@;
put 'ZC5zZXREU05vdGUoKSxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxNLnZpZXdkYXRhJiZNLnZpZXdkYXRhLmxlbmd0aD4wKXtsZXQgRz1bXSxyZT1bXTtmb3IobGV0IHVlIGluIE0udmlld2RhdGFbMF0pdWUmJnJlLnB1c2godWUpO2ZvcihsZXQgdWU9MDt1ZTxyZS5s'@;
put 'ZW5ndGg7dWUrKylHLnB1c2goe2RhdGE6cmVbdWVdfSk7ZC5ob3RUYWJsZS5jb2xIZWFkZXJzPXJlLGQuaG90VGFibGUuY29sdW1ucz1HfWVsc2UgZC5ob3RUYWJsZS5jb2xIZWFkZXJzPVtdLGQuaG90VGFibGUuY29sdW1ucz1bXTtkLmhvdFRhYmxlLmNlbGxzPSgpPT4oe3JlYWRPbmx5OiEw'@;
put 'fSksZC51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCksZC50YWJsZUZsYWc9ITE7bGV0IEk9W107ST1oLnNwbGl0KCIuIiksZC5saWI9SVswXSxkLnRhYmxlPUlbMV0sMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50'@;
put 'YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLmFib3J0QWN0aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/'@;
put 'WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFibGUsdj1kLmxpYnJhcmllcy5maW5kKE09Pk0uTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7dj8o'@;
put 'Sm4udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUpuLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9Sm4udmlld2VyLmxpYnJhcmllc1NlYXJjaCksZC5saWJyYXJ5T25DbGljayhkLmxpYix2LCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50'@;
put 'YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYmIWQubm9E'@;
put 'YXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksc2V0VGltZW91dCgoKT0+e2QuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMTUwMCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgTT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90SW5zdGFuY2UiKTtN'@;
put 'JiYoTS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEk9PntzZXRUaW1lb3V0KCgpPT57bGV0IEc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtHJiZHLmNsaWNrKCl9LDEwMCl9KSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMCl9'@;
put 'LDJlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYisiLiIrdGhpcy50YWJsZSx0aGlz'@;
put 'LmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEp'@;
put 'O3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Kbi5yb290UGFyYW0mJihKbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sSm4udmlld2VyLmZpbHRlci5xdWVyeT1bXSxKbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9'@;
put 'IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl0uZWxlbWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihJKXtyZXR1cm4g'@;
put 'bnVsbD09PUkudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2Eu'@;
put 'Y2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBJPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goRz0+e0kuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRykpfSksSS5jbGF1c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYuZmls'@;
put 'dGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShJKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdikudGhlbihNPT57YS5xdWVyeVRleHQ9'@;
put 'TS5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IEk9TS5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK0ldLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxhLnZpZXdEYXRhKEkpLGEuZmlsdGVyPSExfSkuY2F0'@;
put 'Y2goTT0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoYSl7dm9pZCAwIT09YS5MT0FEX1JFRiYmdGhpcy5y'@;
put 'b3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHthLkxPQURfUkVGfWBdKX1zZXREU05vdGUoKXtjb25zdCBhPXRoaXMuZHNtZXRhLmZpbmQoZj0+Ik5PVEVTIj09PWYuTkFNRSksZD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9MT05HREVTQyI9PT1mLk5BTUUpLGg9dGhpcy5kc21ldGEuZmluZChm'@;
put 'PT4iRERfU0hPUlRERVNDIj09PWYuTkFNRSk7dGhpcy5kc05vdGU9YSYmYS5WQUxVRT9hLlZBTFVFOmQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6IiJ9c2V0dXBIb3QoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubG9hZGluZ1RhYmxlVmlldyYmdGhpcy5saWJEYXRhc2V0'@;
put 'JiYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlQ29tcG9uZW50Py5ob3RJbnN0YW5jZSx0aGlzLmhvdEluc3RhbmNlJiYodGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1vZGlmeUNvbFdpZHRoOihhLGQpPT5hPjUwMD81'@;
put 'MDA6YSxhZnRlckdldENvbEhlYWRlcjooYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKGEpO2gmJnRoaXMuaGVhZGVyUGtzLmluZGV4T2YoaCk+LTEmJmQuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksZC5jbGFzc0xpc3QuYWRkKEpuLmhh'@;
put 'bmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSksdGhpcy5ob3RJbnN0YW5jZS5hZGRIb29rKCJhZnRlclJlbmRlciIsKCk9Pnt0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9KSx0aGlzLmhvdEluc3RhbmNlLmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoKT0+e3NldFRpbWVvdXQo'@;
put 'KCk9Pnt0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9LDUwKX0pKSksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTAwKX0sMWUzKX1sb2FkV2l0aFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0h'@;
put 'MCxhLnRhYmxlVGl0bGU9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFyc2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNldD1oLGgu'@;
put 'aW5jbHVkZXMoIi4iKXx8KGEubGliPWgpLHlpZWxkIGEudmlld0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBhcmFtZXRl'@;
put 'cnMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsSm4udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUpuLnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9Sm4u'@;
put 'dmlld2VyLmxpYnJhcmllc1NlYXJjaCxhLmxpYj1Kbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0h'@;
put 'MSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxKbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEpuLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlz'@;
put 'cGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2li'@;
put 'aWxpdHkoKX0sMWUzKX1uZ09uRGVzdHJveSgpe3RoaXMuYXJpYU9ic2VydmVyJiYodGhpcy5hcmlhT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuYXJpYU9ic2VydmVyPXZvaWQgMCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodGhpcy5hcmlhQ2hlY2tJbnRlcnZh'@;
put 'bCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD12b2lkIDApfWZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl7Y29uc3QgYT0oKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5odC13cmFwcGVyLCAud3RIb2xkZXIsIFtpZF49Imh0XyJdJykuZm9yRWFjaChHPT57Ry5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'InJvbGUiKSxHLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpLEcucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IiksRy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9KTtjb25zdCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPSJ0'@;
put 'cmVlZ3JpZCJdJyksZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0icHJlc2VudGF0aW9uIl0nKTtoLmZvckVhY2goRz0+e0cucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksRy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxHLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1j'@;
put 'b2xjb3VudCIpLEcucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSksZi5mb3JFYWNoKEc9PntHLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0sIFtvbmNsaWNrXSwgW2NvbnRlbnRlZGl0YWJsZV0iKS5s'@;
put 'ZW5ndGg+MCYmRy5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLXJvd2NvdW50PSItMSJdJykuZm9yRWFjaChHPT57Ry5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRh'@;
put 'YmxlIikuZm9yRWFjaChHPT57Ry5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8Ry5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0YWJsZSIpLEcucXVlcnlTZWxlY3RvckFsbCgidGgiKS5mb3JFYWNoKHVlPT57dWUuZ2V0QXR0cmlidXRlKCJzY29wZSIpfHx1ZS5zZXRBdHRyaWJ1dGUoInNjb3BlIiwiY29s'@;
put 'Iil9KX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtjb250ZW50ZWRpdGFibGVdIikuZm9yRWFjaChHPT57aWYoIUcuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIikmJiFHLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5'@;
put 'Iikpe2NvbnN0IHJlPUcudGV4dENvbnRlbnQ/LnRyaW0oKTtyZSYmRy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHJlKX19KX07YSgpLHNldFRpbWVvdXQoYSwxMDApLHNldFRpbWVvdXQoYSw1MDApLHNldFRpbWVvdXQoYSwxZTMpLHNldFRpbWVvdXQoYSwyZTMpLHRoaXMuYXJpYUNoZWNr'@;
put 'SW50ZXJ2YWx8fCh0aGlzLmFyaWFDaGVja0ludGVydmFsPXNldEludGVydmFsKGEsM2UzKSksdGhpcy5hcmlhT2JzZXJ2ZXJ8fCh0aGlzLmFyaWFPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihkPT57bGV0IGg9ITE7ZC5mb3JFYWNoKGY9PnsiYXR0cmlidXRlcyI9PT1mLnR5cGUmJigi'@;
put 'cm9sZSI9PT1mLmF0dHJpYnV0ZU5hbWV8fCJhcmlhLXJvd2NvdW50Ij09PWYuYXR0cmlidXRlTmFtZSkmJihoPSEwKSwiY2hpbGRMaXN0Ij09PWYudHlwZSYmZi5hZGRlZE5vZGVzLmZvckVhY2godj0+e2lmKHYubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7Y29uc3QgTT12OyhNLmhh'@;
put 'c0F0dHJpYnV0ZSgicm9sZSIpfHxNLmhhc0F0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpKSYmKGg9ITApfX0pfSksaCYmc2V0VGltZW91dChhLDUwKX0pLHRoaXMuYXJpYU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsYXR0cmlidXRlczoh'@;
put 'MCxhdHRyaWJ1dGVGaWx0ZXI6WyJyb2xlIiwiYXJpYS1yb3djb3VudCIsImFyaWEtY29sY291bnQiLCJhcmlhLW11bHRpc2VsZWN0YWJsZSJdfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS5ob3RUYWJsZS5kYXRhLmxlbmd0aD4wJiYo'@;
put 'YS50YWJsZUZsYWc9ITApLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57YS53aGVyZVN0cmluZz1kLnN0cmluZyxhLmNsYXVzZXM9ZC5vYmosYS5saWJkcz1kLmxpYmRzfSksdHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSI/YS5s'@;
put 'b2FkV2l0aFBhcmFtZXRlcnMoKTphLmxvYWRXaXRob3V0UGFyYW1ldGVycygpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSgkZShjMSksJGUoSWgpLCRlKFZvKSwkZShMbyksJGUoeXUpLCRlKG1jKSwkZShTZCksJGUoYnUpLCRlKHBoKSwk'@;
put 'ZSh4bykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihGYShDRHQsNSksRmEoJGcsNSksRmEoU0R0LDUpKSwyJmQpe2xldCBmO3lpKGY9YmkoKSkmJihoLmhvdEluc3Rh'@;
put 'bmNlVmlld0NoaWxkPWYuZmlyc3QpLHlpKGY9YmkoKSkmJihoLmhvdFRhYmxlQ29tcG9uZW50PWYuZmlyc3QpLHlpKGY9YmkoKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OTUsdmFyczozMCxjb25zdHM6W1si'@;
put 'Y2xpQ29tbWFuZElucHV0IiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJob3RJbnN0YW5jZSIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsIm15LTEwLW14'@;
put 'LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4'@;
put 'LWhpZ2hlc3QiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1j'@;
put 'ZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImNsci1jb2wtbWQtNiJdLFsxLCJkb3dubG9hZC1zZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInZhbHVlIiwiQ1NWIl0sWyJ2YWx1ZSIsIlNBUyJdLFsi'@;
put 'dmFsdWUiLCJQR1NRTF9EREwiXSxbInZhbHVlIiwiU0FTX0RETCJdLFsidmFsdWUiLCJUU1FMX0RETCJdLFsidmFsdWUiLCJFWENFTCJdLFsidmFsdWUiLCJNQVJLRE9XTiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5l'@;
put 'IiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJpZCJdLFsxLCJtb2RhbC1ib2R5Iiwid2ViLXF1ZXJ5Il0sWzEsInJvdyJdLFsxLCJjbHItY29sLWxnLTEyIiwiY2xyLWNvbC1tZC0xMiIsImNsci1j'@;
put 'b2wtc20tMTIiLCJjbHItY29sLXhzLTEyIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwi'@;
put 'bmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid2ViLXF1ZXJ5LXdyYXBwZXIiLCJ3b3JkLWJyZWFrLWFsbCJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dzIiwiNCIsImNvbHMiLCI1MCIsInR5cGUiLCJ0ZXh0IiwicmVhZG9ubHkiLCIi'@;
put 'LDEsIndlYi1xdWVyeS10ZXh0IiwzLCJmb2N1cyIsInZhbHVlIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayIsIm5neENsaXBib2FyZCJdLFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVu'@;
put 'Q2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwi'@;
put 'YnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIs'@;
put 'ImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBuby1ib3JkZXJzIGgtMTAwIGQtZmxl'@;
put 'eCBjbHItZmxleC1jb2x1bW4iLDQsIm5nSWYiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNtZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xy'@;
put 'TWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hh'@;
put 'bmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmci'@;
put 'LCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2st'@;
put 'c2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwiaWQiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29s'@;
put 'dGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxb'@;
put 'InNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsi'@;
put 'Y2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIs'@;
put 'MSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwi'@;
put 'YnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJjYXJkIiwibm8t'@;
put 'Ym9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsImhlYWRlci1yb3cgY2xyLXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUt'@;
put 'c2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayBub0RhdGEiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWZsZXgtMSIsNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJq'@;
put 'dXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwiZm9ybS1ibG9jayIsInRhYmxlLXNlYXJjaC13cmFwcGVyIiwic3ciLCJjbHItY29sLW1kIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1j'@;
put 'ZW50ZXIiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVyIiwidHlwZSJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5u'@;
put 'ZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsImNsci1mbGV4LWNvbHVtbiIs'@;
put 'ImNsci1mbGV4LXNtLXJvdyJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWdu'@;
put 'LWl0ZW1zLWNlbnRlciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUi'@;
put 'LCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3cgbXItNSIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDQsIm5nSWYiXSxbMSwib3B0aW9ucy1jb2wiLCJjbHItY29sLW1kIl0sWyJjbGFzcyIsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNr'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciLCJtci01Il0sWyJjbHJUb29s'@;
put 'dGlwVHJpZ2dlciIsIiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMsImNsaWNr'@;
put 'Il0sWzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6ZSIsIjE1'@;
put 'Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNr'@;
put 'Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBlIiwic3dpdGNoIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVj'@;
put 'dGVkIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL2ltYWdlcy9zZWxlY3QtbGlicmFyeS5wbmciLCJhbHQiLCJzZWxlY3QgYSBsaWJyYXJ5IGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjZHMtdGV4'@;
put 'dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29s'@;
put 'LWF1dG8iLCJtdC0xNSIsIm1iLTE1Il0sWzEsInRleHQtY2VudGVyIiwibXQtMTAiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibGliaW5mbyBtLTAgY2xy'@;
put 'LXJvdyIsNCwibmdJZiJdLFsxLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kY3BsYWNlaG9sZGVyL3NlcnZpY2VzL3dlYi9pbWFnZXMvc2VsZWN0LXRhYmxlLnBuZyIsImFs'@;
put 'dCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3LTEwMCJdLFsic2hhcGUiLCJyZWZy'@;
put 'ZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1ib2xkIl0sWzEsImNhcmQtYmxvY2siLCJub0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsiY2xhc3MiLCJ0ZXh0'@;
put 'LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjbHItZmxleC0xIl0sWzEsImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaWQiLCJob3RUYWJsZSIsMSwidmlldy1ob3QiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFsxLCJt'@;
put 'dC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7ZGUoMCwiYXBwLXNpZGViYXIiLDYpLEZ0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVz'@;
put 'KCkpfSksZ3QoMSx4RHQsMiwwLCJkaXYiLDcpLGRlKDIsImNsci10cmVlIiksZ3QoMyxBRHQsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSg0LEJEdCwyLDEsIm5nLWNvbnRhaW5lciIsOSksaGUoKSxndCg1LGpEdCwzLDAsImRpdiIsMTApLGhlKCksZGUoNiwiZGl2IiwxMSksZ3QoNyx6RHQsMTQs'@;
put 'MCwiZGl2IiwxMikoOCxVRHQsMSwwLCJkaXYiLDEzKSxkZSg5LCJjbHItbW9kYWwiLDE0KSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5vcGVuRG93bmxvYWQsTSl8fChoLm9wZW5Eb3dubG9hZD1NKSxDdChNKX0pLGRlKDEwLCJoMyIsMTUp'@;
put 'LE9lKDExLCJEb3dubG9hZCIpLGhlKCksZGUoMTIsImRpdiIsMTYpKDEzLCJkaXYiLDE3KSgxNCwiY2xyLXNlbGVjdC1jb250YWluZXIiLDE4KSgxNSwibGFiZWwiKSxPZSgxNiwiUGxlYXNlIGNob29zZSBkb3dubG9hZCBmb3JtYXQiKSxoZSgpLGRlKDE3LCJzZWxlY3QiLDE5KSxwaSgibmdN'@;
put 'b2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGdpKGguZG93bmxvYWRGb3JtYXQsTSl8fChoLmRvd25sb2FkRm9ybWF0PU0pLEN0KE0pfSksZGUoMTgsIm9wdGlvbiIsMjApLE9lKDE5LCJDU1YiKSxoZSgpLGRlKDIwLCJvcHRpb24iLDIxKSxPZSgyMSwiRGF0YWxpbmVzIChj'@;
put 'YXJkcyBmaWxlKSIpLGhlKCksZGUoMjIsIm9wdGlvbiIsMjIpLE9lKDIzLCJEREwgKFBHU1FMIEZsYXZvdXIpIiksaGUoKSxkZSgyNCwib3B0aW9uIiwyMyksT2UoMjUsIkRETCAoU0FTIEZsYXZvdXIpIiksaGUoKSxkZSgyNiwib3B0aW9uIiwyNCksT2UoMjcsIkRETCAoVFNRTCBGbGF2b3Vy'@;
put 'KSIpLGhlKCksZGUoMjgsIm9wdGlvbiIsMjUpLE9lKDI5LCJFeGNlbCAoLnhsc3gpIiksaGUoKSxkZSgzMCwib3B0aW9uIiwyNiksT2UoMzEsIk1hcmtkb3duICgubWQpIiksaGUoKSgpKCkoKSgpLGRlKDMyLCJkaXYiLDI3KSgzMywiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiB3dChmKSxDdChoLm9wZW5Eb3dubG9hZD0hMSl9KSxPZSgzNCwiIENhbmNlbCAiKSxoZSgpLGRlKDM1LCJidXR0b24iLDI5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZG93bmxvYWRGb3JtYXQuaW5jbHVkZXMoIkRETCIpP2guZG93bmxvYWREREwo'@;
put 'KTpoLmRvd25sb2FkRGF0YSgpKX0pLE9lKDM2LCIgT2sgIiksaGUoKSgpKCksZGUoMzcsImNsci1tb2RhbCIsMTQpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLndlYlF1ZXJ5LE0pfHwoaC53ZWJRdWVyeT1NKSxDdChNKX0pLGRlKDM4LCJo'@;
put 'MyIsMTUpLE9lKDM5LCIgV2ViIFF1ZXJ5IFVSTCAiKSxoZSgpLGRlKDQwLCJkaXYiLDMwKSg0MSwiZGl2IiwzMSkoNDIsImRpdiIsMzIpKDQzLCJkaXYiLDMzKSg0NCwiZGl2IiwzNCkoNDUsInNwYW4iKSxPZSg0NiwiQ29weSB0aGUgYmVsb3cgaW50byB5b3VyIHByZWZlcnJlZCBjbGllbnQg'@;
put 'dG9vbDoiKSxoZSgpLGRlKDQ3LCJkaXYiLDM1KSg0OCwiZGl2IiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLndlYlF1ZXJ5VGFiPSEwLEN0KGguc2hvd1dlYlF1ZXJ5KCkpfSksV3QoNDksImlucHV0IiwzNyksZGUoNTAsImxhYmVsIiksT2UoNTEsIlRBQiIpLGhl'@;
put 'KCkoKSxkZSg1MiwiZGl2IiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLndlYlF1ZXJ5VGFiPSExLEN0KGguc2hvd1dlYlF1ZXJ5KCkpfSksV3QoNTMsImlucHV0IiwzNyksZGUoNTQsImxhYmVsIiksT2UoNTUsIkNTViIpLGhlKCkoKSgpKCksZGUoNTYsImRpdiIs'@;
put 'MzgpKDU3LCJ0ZXh0YXJlYSIsMzksMCksRnQoImZvY3VzIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkNsaUNvbW1hbmRGb2N1cyhNKSl9KSxPZSg1OSwiICAgICAgICAgICAgICAiKSxoZSgpKCksZGUoNjAsImRpdiIsNDApKDYxLCJidXR0b24iLDQxKSxGdCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29weVRvQ2xpcCgpKX0pLE9lKDYyLCIgY29weSB0byBjbGlwYm9hcmQgIiksaGUoKSgpKCkoKSgpKCksZGUoNjMsImRpdiIsMjcpKDY0LCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgud2ViUXVl'@;
put 'cnk9ITEpfSksT2UoNjUsIiBjbG9zZSAiKSxoZSgpKCkoKSxkZSg2NiwiY2xyLW1vZGFsIiw0MikscGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGdpKGguZmlsdGVyLE0pfHwoaC5maWx0ZXI9TSksQ3QoTSl9KSxkZSg2NywiaDMiLDE1KSxPZSg2OCwi'@;
put 'IEZpbHRlciBmb3IgdGFibGU6IiksZGUoNjksInNwYW4iKSxPZSg3MCksaGUoKSgpLGRlKDcxLCJkaXYiLDE2KSxndCg3MixaRHQsMiwwLCJhcHAtcXVlcnkiLDQzKSxoZSgpLGRlKDczLCJkaXYiLDI3KSg3NCwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChm'@;
put 'KSxDdChoLnJlc2V0RmlsdGVyKCkpfSksT2UoNzUsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSg3NiwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmZpbHRlcj0hMSxDdChoLnJlbW92ZVF1ZXJ5KCkpfSksT2UoNzcsIiBDYW5jZWwgIiksaGUoKSxk'@;
put 'ZSg3OCwiYnV0dG9uIiw0NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNlbmRDbGF1c2UoKSl9KSxPZSg3OSwiIE9rICIpLGhlKCkoKSgpLGRlKDgwLCJjbHItbW9kYWwiLDQ3KSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3Qo'@;
put 'ZiksZ2koaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSg4MSwiaDMiLDQ4KSxPZSg4MiwiRXJyb3IiKSxoZSgpLGRlKDgzLCJkaXYiLDE2KSg4NCwicCIpLE9lKDg1KSxoZSgpKCksZGUoODYsImRpdiIsMjcpKDg3LCJidXR0b24iLDQ5KSxGdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksT2UoODgsIiBDYW5jZWwgIiksaGUoKSxkZSg4OSwiYnV0dG9uIiw1MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLE9lKDkwLCIgT2sgIiksaGUoKSgpKCksZ3QoOTEs'@;
put 'V0R0LDYsMCwiZGl2Iiw1MSkoOTIsQUl0LDgsNiwiZGl2Iiw1MiksaGUoKSxkZSg5MywiYXBwLWRhdGFzZXQtaW5mbyIsNTMpLHBpKCJvcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZ2koaC5kYXRhc2V0SW5mbyxNKXx8KGguZGF0YXNldEluZm89TSksQ3QoTSl9KSxGdCgi'@;
put 'cm93Q2xpY2tlZCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoTSkpfSksaGUoKSxkZSg5NCwiYXBwLXZpZXdib3hlcyIsNTQpLHBpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxnaShoLnZpZXdi'@;
put 'b3hPcGVuLE0pfHwoaC52aWV3Ym94T3Blbj1NKSxDdChNKX0pLGhlKCl9aWYoMiZkKXtjb25zdCBmPWRhKDU4KTtmZSgpLE1lKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmxpYnJhcmllcyksZmUoKSxNZSgibmdGb3JPZiIsaC5saWJyYXJpZXMpLGZlKCks'@;
put 'TWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLE1lKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCksZmkoImNsck1vZGFsT3BlbiIsaC5vcGVuRG93bmxvYWQpLE1lKCJjbHJNb2RhbFNpemUiLCJtZCIpLGZlKDgpLGZp'@;
put 'KCJuZ01vZGVsIixoLmRvd25sb2FkRm9ybWF0KSxmZSgxOCksTWUoImlkIixoLnRhYmxlVGl0bGUpLGZlKDIpLGZpKCJjbHJNb2RhbE9wZW4iLGgud2ViUXVlcnkpLE1lKCJjbHJNb2RhbFNpemUiLCJsZyIpLGZlKDEyKSxNZSgiY2hlY2tlZCIsaC53ZWJRdWVyeVRhYiksZmUoNCksTWUoImNo'@;
put 'ZWNrZWQiLCFoLndlYlF1ZXJ5VGFiKSxmZSg0KSxNZSgidmFsdWUiLGgud2ViUXVlcnlUZXh0KSxmZSg0KSxNZSgibmd4Q2xpcGJvYXJkIixmKSxmZSg1KSxmaSgiY2xyTW9kYWxPcGVuIixoLmZpbHRlciksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxm'@;
put 'ZSg0KSxMcigiICIsaC5saWJUYWIsIiAiKSxmZSgyKSxNZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLGZpKCJjbHJNb2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLFNyKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxNZSgi'@;
put 'bmdJZiIsaC5sb2FkaW5nVGFibGVWaWV3KSxmZSgpLE1lKCJuZ0lmIiwhaC5sb2FkaW5nVGFibGVWaWV3KSxmZSgpLGZpKCJvcGVuIixoLmRhdGFzZXRJbmZvKSxNZSgiZHNtZXRhIixoLmRzbWV0YSkoInZlcnNpb25zIixoLnZlcnNpb25zKSxmZSgpLGZpKCJ2aWV3Ym94TW9kYWwiLGgudmll'@;
put 'd2JveE9wZW4pfX0sZGVwZW5kZW5jaWVzOlskNmUsUXMsYmEseDIsZHAseUR0LGw3LEQyLEkyLEdsLE1kLGsyLHRsLHM3LFdvLHdwLEFoLFBkLGhnLE9sLHJ1LFl1LFYwLFAyLEgyLGNvLGNkZSxJZCxGYix4aCxZMSxFNyxaYixyTyxzZyxnNyxtNyxQYix2NyxiNyx5NyxSZCwkZyxhNCxxNmUs'@;
put 'eU8sbnRlLEV3LGk0LFE2ZSx3RHRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qga0l0PVt7cGF0aDoiIixjb21wb25lbnQ6Y2t0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86ImRhdGEifSx7cGF0aDoiZGF0YSIsY29tcG9uZW50'@;
put 'OiROfSx7cGF0aDoiZGF0YSIsY29tcG9uZW50OiROfSx7cGF0aDoiZGF0YS86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OiROfSx7cGF0aDoiZGF0YS86bGliTWVtIixjb21wb25lbnQ6JE59LHtwYXRoOiJsaW5lYWdlIixjb21wb25lbnQ6R059LHtwYXRoOiJsaW5lYWdlLzp0YWJsZWlk'@;
put 'LzpkaXJlY3Rpb24iLGNvbXBvbmVudDpHTn0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbiIsY29tcG9uZW50OkdOfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uLzpyZWxvYWQiLGNvbXBvbmVudDpHTn0se3BhdGg6InZpeWEtYXBpLWV4'@;
put 'cGxvcmVyIixjb21wb25lbnQ6Z0R0fSx7cGF0aDoibWV0YWRhdGEiLGNvbXBvbmVudDpxdGV9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6cXRlfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRC86b2JqZWN0TmFtZSIsY29tcG9uZW50OnF0ZX0s'@;
put 'e3BhdGg6InVzZXJuYXYiLGNvbXBvbmVudDpsa3QsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZ3JvdXBzIn0se3BhdGg6InVzZXJzIixjb21wb25lbnQ6ajdlfSx7cGF0aDoidXNlcnMvOnVyaSIsY29tcG9uZW50Omo3ZX0se3BhdGg6Imdyb3VwcyIs'@;
put 'Y29tcG9uZW50Onk4ZX0se3BhdGg6Imdyb3Vwcy86dXJpIixjb21wb25lbnQ6eThlfSx7cGF0aDoicm9sZXMiLGNvbXBvbmVudDpCN2V9LHtwYXRoOiJyb2xlcy86dXJpIixjb21wb25lbnQ6QjdlfV19XX1dO2xldCBESXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0JjLmZvckNoaWxkKGtJdCksQmNdfSl9fXJldHVybiBjfSkoKSxJSXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUFpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3Q4ZSxMYSxESXQsYkR0LGtjLEIwLFo5LFc5LHh3LFRBLGl0ZSxjZl19KX19cmV0dXJuIGN9KSgp'@;
put 'O2NvbnN0IExJdD1CYy5mb3JSb290KFt7cGF0aDoiIixyZWRpcmVjdFRvOiJob21lIixwYXRoTWF0Y2g6ImZ1bGwifSx7cGF0aDoidmlldyIsbG9hZENoaWxkcmVuOigpPT5JSXR9LHtwYXRoOiJyZXZpZXciLGNvbXBvbmVudDpBd3QsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVs'@;
put 'bCIscmVkaXJlY3RUbzoidG9hcHByb3ZlIn0se3BhdGg6IiIsbG9hZENoaWxkcmVuOigpPT5Ud3R9XX0se3BhdGg6ImxpY2Vuc2luZyIsbG9hZENoaWxkcmVuOigpPT5PYnR9LHtwYXRoOiJob21lIixsb2FkQ2hpbGRyZW46KCk9Pkt5dH0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigp'@;
put 'PT5WOXR9LHtwYXRoOiJzdGFnZSIsbG9hZENoaWxkcmVuOigpPT5Od3R9LHtwYXRoOiJzeXN0ZW0iLGxvYWRDaGlsZHJlbjooKT0+cXd0fSx7cGF0aDoiZGVwbG95Iixsb2FkQ2hpbGRyZW46KCk9PlNYZX0se3BhdGg6IioqIixjb21wb25lbnQ6bktlfV0se3VzZUhhc2g6ITB9KTtsZXQgT0l0'@;
put 'PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1BaSh7dHlwZTpjLGJvb3RzdHJhcDpbaEdlXX0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlt1TCxJaCxvdGUs'@;
put 'SlJdLGltcG9ydHM6W3RLZSxIc2Usa2MsWU9lLHdBZSxMSXQseHcsQjAsVzksVEEsY2YsR2t0XX0pfX1yZXR1cm4gY30pKCk7WkNlKCkuYm9vdHN0cmFwTW9kdWxlKE9JdCl9LDM3MzQ6KG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9Pnt2YXIg'@;
put 'X2FzeW5jVG9HZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXygyOTI5MykuZGVmYXVsdCxfd3JhcEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNDI5NTgpLmRlZmF1bHQsX2F3YWl0QXN5bmNHZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg1MzM0NCkuZGVmYXVsdCxf'@;
put 'YXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZT1fX3dlYnBhY2tfcmVxdWlyZV9fKDkzNTEzKS5kZWZhdWx0LF9hc3luY0l0ZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oODI4ODEpLmRlZmF1bHQsYjtzZWxmLGI9KCk9PigoKT0+e3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXszMDYyOihjZSxKLGIp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODc2NCkuQnVmZmVyO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgXz1iKDI4MzApLHA9Yig5OTQ3KTtKLkNzdkZvcm1hdHRlclN0cmVhbT1jbGFz'@;
put 'cyBOIGV4dGVuZHMgXy5UcmFuc2Zvcm17Y29uc3RydWN0b3IoRil7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTpGLm9iamVjdE1vZGV9KSx0aGlzLmhhc1dyaXR0ZW5CT009ITEsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPUYsdGhpcy5yb3dGb3JtYXR0ZXI9bmV3IHAuUm93Rm9ybWF0dGVyKEYp'@;
put 'LHRoaXMuaGFzV3JpdHRlbkJPTT0hRi53cml0ZUJPTX10cmFuc2Zvcm0oRil7cmV0dXJuIHRoaXMucm93Rm9ybWF0dGVyLnJvd1RyYW5zZm9ybT1GLHRoaXN9X3RyYW5zZm9ybShGLEgsUil7bGV0IGo9ITE7dHJ5e3RoaXMuaGFzV3JpdHRlbkJPTXx8KHRoaXMucHVzaCh0aGlzLmZvcm1hdHRl'@;
put 'ck9wdGlvbnMuQk9NKSx0aGlzLmhhc1dyaXR0ZW5CT009ITApLHRoaXMucm93Rm9ybWF0dGVyLmZvcm1hdChGLChQLEwpPT5QPyhqPSEwLFIoUCkpOihMJiZMLmZvckVhY2goWT0+e3RoaXMucHVzaChELmZyb20oWSwidXRmOCIpKX0pLGo9ITAsUigpKSl9Y2F0Y2goUCl7aWYoail0aHJvdyBQ'@;
put 'O1IoUCl9fV9mbHVzaChGKXt0aGlzLnJvd0Zvcm1hdHRlci5maW5pc2goKEgsUik9Pkg/RihIKTooUiYmUi5mb3JFYWNoKGo9Pnt0aGlzLnB1c2goRC5mcm9tKGosInV0ZjgiKSl9KSxGKCkpKX19fSw2NzYzOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5Gb3JtYXR0ZXJPcHRpb25zPXZvaWQgMCxKLkZvcm1hdHRlck9wdGlvbnM9Y2xhc3MgYntjb25zdHJ1Y3RvcihfPXt9KXt2YXIgcDt0aGlzLm9iamVjdE1vZGU9ITAsdGhpcy5kZWxpbWl0ZXI9IiwiLHRoaXMucm93RGVsaW1pdGVyPSJcbiIsdGhp'@;
put 'cy5xdW90ZT0nIicsdGhpcy5lc2NhcGU9dGhpcy5xdW90ZSx0aGlzLnF1b3RlQ29sdW1ucz0hMSx0aGlzLnF1b3RlSGVhZGVycz10aGlzLnF1b3RlQ29sdW1ucyx0aGlzLmhlYWRlcnM9bnVsbCx0aGlzLmluY2x1ZGVFbmRSb3dEZWxpbWl0ZXI9ITEsdGhpcy53cml0ZUJPTT0hMSx0aGlzLkJP'@;
put 'TT0iXHVmZWZmIix0aGlzLmFsd2F5c1dyaXRlSGVhZGVycz0hMSxPYmplY3QuYXNzaWduKHRoaXMsX3x8e30pLHR5cGVvZiBfPy5xdW90ZUhlYWRlcnM+InUiJiYodGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMpLCEwPT09Xz8ucXVvdGU/dGhpcy5xdW90ZT0nIic6ITE9PT1f'@;
put 'Py5xdW90ZSYmKHRoaXMucXVvdGU9IiIpLCJzdHJpbmciIT10eXBlb2YgXz8uZXNjYXBlJiYodGhpcy5lc2NhcGU9dGhpcy5xdW90ZSksdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9ISF0aGlzLmhlYWRlcnMmJihudWxsPT09KHA9Xy53cml0ZUhlYWRlcnMpfHx2b2lkIDA9PT1wfHxwKSx0aGlz'@;
put 'LmhlYWRlcnM9QXJyYXkuaXNBcnJheSh0aGlzLmhlYWRlcnMpP3RoaXMuaGVhZGVyczpudWxsLHRoaXMuZXNjYXBlZFF1b3RlPWAke3RoaXMuZXNjYXBlfSR7dGhpcy5xdW90ZX1gfX19LDUxODY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9y'@;
put 'dERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouRmllbGRGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IF89RChiKDgwOTQpKSxwPUQoYig5NzIyKSks'@;
put 'Tj1EKGIoMTY1OCkpO0ouRmllbGRGb3JtYXR0ZXI9Y2xhc3Mgd3tjb25zdHJ1Y3RvcihIKXt0aGlzLl9oZWFkZXJzPW51bGwsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPUgsbnVsbCE9PUguaGVhZGVycyYmKHRoaXMuaGVhZGVycz1ILmhlYWRlcnMpLHRoaXMuUkVQTEFDRV9SRUdFWFA9bmV3IFJl'@;
put 'Z0V4cChILnF1b3RlLCJnIik7Y29uc3QgUj1gWyR7SC5kZWxpbWl0ZXJ9JHtOLmRlZmF1bHQoSC5yb3dEZWxpbWl0ZXIpfXxccnxcbl1gO3RoaXMuRVNDQVBFX1JFR0VYUD1uZXcgUmVnRXhwKFIpfXNldCBoZWFkZXJzKEgpe3RoaXMuX2hlYWRlcnM9SH1zaG91bGRRdW90ZShILFIpe2NvbnN0'@;
put 'IGo9Uj90aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVIZWFkZXJzOnRoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUNvbHVtbnM7cmV0dXJuIF8uZGVmYXVsdChqKT9qOkFycmF5LmlzQXJyYXkoaik/altIXTpudWxsIT09dGhpcy5faGVhZGVycyYmalt0aGlzLl9oZWFkZXJzW0hdXX1mb3Jt'@;
put 'YXQoSCxSLGope2NvbnN0IFA9YCR7cC5kZWZhdWx0KEgpPyIiOkh9YC5yZXBsYWNlKC9cMC9nLCIiKSx7Zm9ybWF0dGVyT3B0aW9uczpMfT10aGlzO3JldHVybiIiIT09TC5xdW90ZSYmLTEhPT1QLmluZGV4T2YoTC5xdW90ZSk/dGhpcy5xdW90ZUZpZWxkKFAucmVwbGFjZSh0aGlzLlJFUExB'@;
put 'Q0VfUkVHRVhQLEwuZXNjYXBlZFF1b3RlKSk6LTEhPT1QLnNlYXJjaCh0aGlzLkVTQ0FQRV9SRUdFWFApfHx0aGlzLnNob3VsZFF1b3RlKFIsaik/dGhpcy5xdW90ZUZpZWxkKFApOlB9cXVvdGVGaWVsZChIKXtjb25zdHtxdW90ZTpSfT10aGlzLmZvcm1hdHRlck9wdGlvbnM7cmV0dXJuYCR7'@;
put 'Un0ke0h9JHtSfWB9fX0sNzE4MTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oSCl7cmV0dXJuIEgmJkguX19lc01vZHVsZT9IOntkZWZhdWx0Okh9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksSi5Sb3dGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IF89RChiKDg0MjMpKSxwPUQoYigyMzA3KSksTj1iKDUxODYpLHc9Yig0NjkyKTtjbGFzcyBGe2NvbnN0cnVjdG9yKFIpe3RoaXMucm93Q291bnQ9MCx0aGlzLmZvcm1hdHRlck9wdGlvbnM9Uix0aGlzLmZpZWxk'@;
put 'Rm9ybWF0dGVyPW5ldyBOLkZpZWxkRm9ybWF0dGVyKFIpLHRoaXMuaGVhZGVycz1SLmhlYWRlcnMsdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9Ui5zaG91bGRXcml0ZUhlYWRlcnMsdGhpcy5oYXNXcml0dGVuSGVhZGVycz0hMSxudWxsIT09dGhpcy5oZWFkZXJzJiYodGhpcy5maWVsZEZvcm1h'@;
put 'dHRlci5oZWFkZXJzPXRoaXMuaGVhZGVycyksUi50cmFuc2Zvcm0mJih0aGlzLnJvd1RyYW5zZm9ybT1SLnRyYW5zZm9ybSl9c3RhdGljIGlzUm93SGFzaEFycmF5KFIpe3JldHVybiEhQXJyYXkuaXNBcnJheShSKSYmQXJyYXkuaXNBcnJheShSWzBdKSYmMj09PVJbMF0ubGVuZ3RofXN0YXRp'@;
put 'YyBpc1Jvd0FycmF5KFIpe3JldHVybiBBcnJheS5pc0FycmF5KFIpJiYhdGhpcy5pc1Jvd0hhc2hBcnJheShSKX1zdGF0aWMgZ2F0aGVySGVhZGVycyhSKXtyZXR1cm4gRi5pc1Jvd0hhc2hBcnJheShSKT9SLm1hcChqPT5qWzBdKTpBcnJheS5pc0FycmF5KFIpP1I6T2JqZWN0LmtleXMoUil9'@;
put 'c3RhdGljIGNyZWF0ZVRyYW5zZm9ybShSKXtyZXR1cm4gdy5pc1N5bmNUcmFuc2Zvcm0oUik/KGosUCk9PntsZXQgTD1udWxsO3RyeXtMPVIoail9Y2F0Y2goWSl7cmV0dXJuIFAoWSl9cmV0dXJuIFAobnVsbCxMKX06KGosUCk9PntSKGosUCl9fXNldCByb3dUcmFuc2Zvcm0oUil7aWYoIV8u'@;
put 'ZGVmYXVsdChSKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdHJhbnNmb3JtIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5fcm93VHJhbnNmb3JtPUYuY3JlYXRlVHJhbnNmb3JtKFIpfWZvcm1hdChSLGope3RoaXMuY2FsbFRyYW5zZm9ybWVyKFIsKFAsTCk9PntpZihQKXJldHVybiBq'@;
put 'KFApO2lmKCFSKXJldHVybiBqKG51bGwpO2NvbnN0IFk9W107aWYoTCl7Y29uc3R7c2hvdWxkRm9ybWF0Q29sdW1uczpCLGhlYWRlcnM6V309dGhpcy5jaGVja0hlYWRlcnMoTCk7aWYodGhpcy5zaG91bGRXcml0ZUhlYWRlcnMmJlcmJiF0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzJiYoWS5wdXNo'@;
put 'KHRoaXMuZm9ybWF0Q29sdW1ucyhXLCEwKSksdGhpcy5oYXNXcml0dGVuSGVhZGVycz0hMCksQil7Y29uc3QgWj10aGlzLmdhdGhlckNvbHVtbnMoTCk7WS5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyhaLCExKSl9fXJldHVybiBqKG51bGwsWSl9KX1maW5pc2goUil7Y29uc3Qgaj1bXTtpZih0'@;
put 'aGlzLmZvcm1hdHRlck9wdGlvbnMuYWx3YXlzV3JpdGVIZWFkZXJzJiYwPT09dGhpcy5yb3dDb3VudCl7aWYoIXRoaXMuaGVhZGVycylyZXR1cm4gUihuZXcgRXJyb3IoImBhbHdheXNXcml0ZUhlYWRlcnNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBidXQgYGhlYWRlcnNgIG9wdGlvbiBub3Qg'@;
put 'cHJvdmlkZWQuIikpO2oucHVzaCh0aGlzLmZvcm1hdENvbHVtbnModGhpcy5oZWFkZXJzLCEwKSl9cmV0dXJuIHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyJiZqLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLnJvd0RlbGltaXRlciksUihudWxsLGopfWNo'@;
put 'ZWNrSGVhZGVycyhSKXtpZih0aGlzLmhlYWRlcnMpcmV0dXJue3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczp0aGlzLmhlYWRlcnN9O2NvbnN0IGo9Ri5nYXRoZXJIZWFkZXJzKFIpO3JldHVybiB0aGlzLmhlYWRlcnM9aix0aGlzLmZpZWxkRm9ybWF0dGVyLmhlYWRlcnM9aix0aGlz'@;
put 'LnNob3VsZFdyaXRlSGVhZGVycz97c2hvdWxkRm9ybWF0Q29sdW1uczohcC5kZWZhdWx0KGosUiksaGVhZGVyczpqfTp7c2hvdWxkRm9ybWF0Q29sdW1uczohMCxoZWFkZXJzOm51bGx9fWdhdGhlckNvbHVtbnMoUil7aWYobnVsbD09PXRoaXMuaGVhZGVycyl0aHJvdyBuZXcgRXJyb3IoIkhl'@;
put 'YWRlcnMgaXMgY3VycmVudGx5IG51bGwiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShSKT9GLmlzUm93SGFzaEFycmF5KFIpP3RoaXMuaGVhZGVycy5tYXAoKGosUCk9Pntjb25zdCBMPVJbUF07cmV0dXJuIEw/TFsxXToiIn0pOkYuaXNSb3dBcnJheShSKSYmIXRoaXMuc2hvdWxkV3JpdGVIZWFk'@;
put 'ZXJzP1I6dGhpcy5oZWFkZXJzLm1hcCgoaixQKT0+UltQXSk6dGhpcy5oZWFkZXJzLm1hcChqPT5SW2pdKX1jYWxsVHJhbnNmb3JtZXIoUixqKXtyZXR1cm4gdGhpcy5fcm93VHJhbnNmb3JtP3RoaXMuX3Jvd1RyYW5zZm9ybShSLGopOmoobnVsbCxSKX1mb3JtYXRDb2x1bW5zKFIsail7Y29u'@;
put 'c3QgUD1SLm1hcCgoWSxCKT0+dGhpcy5maWVsZEZvcm1hdHRlci5mb3JtYXQoWSxCLGopKS5qb2luKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5kZWxpbWl0ZXIpLHtyb3dDb3VudDpMfT10aGlzO3JldHVybiB0aGlzLnJvd0NvdW50Kz0xLEw/W3RoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxp'@;
put 'bWl0ZXIsUF0uam9pbigiIik6UH19Si5Sb3dGb3JtYXR0ZXI9Rn0sOTk0NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5GaWVsZEZvcm1hdHRlcj1KLlJvd0Zvcm1hdHRlcj12b2lkIDA7dmFyIEQ9Yig3'@;
put 'MTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiUm93Rm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5Sb3dGb3JtYXR0ZXJ9fSk7dmFyIF89Yig1MTg2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiRmllbGRGb3JtYXR0ZXIiLHtlbnVtZXJhYmxl'@;
put 'OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLkZpZWxkRm9ybWF0dGVyfX0pfSw3MjAxOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEIsVyxaLFgp'@;
put 'e3ZvaWQgMD09PVgmJihYPVopLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLFgse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFdbWl19fSl9OmZ1bmN0aW9uKEIsVyxaLFgpe3ZvaWQgMD09PVgmJihYPVopLEJbWF09V1taXX0pLHA9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURl'@;
put 'ZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEIsVyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOld9KX06ZnVuY3Rpb24oQixXKXtCLmRlZmF1bHQ9V30pLE49dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEIpe2lm'@;
put 'KEImJkIuX19lc01vZHVsZSlyZXR1cm4gQjt2YXIgVz17fTtpZihudWxsIT1CKWZvcih2YXIgWiBpbiBCKSJkZWZhdWx0IiE9PVomJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLFopJiZfKFcsQixaKTtyZXR1cm4gcChXLEIpLFd9LHc9dGhpcyYmdGhpcy5fX2V4cG9y'@;
put 'dFN0YXJ8fGZ1bmN0aW9uKEIsVyl7Zm9yKHZhciBaIGluIEIpImRlZmF1bHQiIT09WiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChXLFopJiZfKFcsQixaKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoud3JpdGVUb1Bh'@;
put 'dGg9Si53cml0ZVRvU3RyaW5nPUoud3JpdGVUb0J1ZmZlcj1KLndyaXRlVG9TdHJlYW09Si53cml0ZT1KLmZvcm1hdD1KLkZvcm1hdHRlck9wdGlvbnM9Si5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9pZCAwO2NvbnN0IEY9Yig5NTM5KSxIPWIoMjgzMCksUj1OKGIoODY0NikpLGo9Yig2NzYzKSxQ'@;
put 'PWIoMzA2Mik7dyhiKDQ2OTIpLEopO3ZhciBMPWIoMzA2Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIkNzdkZvcm1hdHRlclN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuQ3N2Rm9ybWF0dGVyU3RyZWFtfX0pO3ZhciBZPWIoNjc2Myk7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEosIkZvcm1hdHRlck9wdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBZLkZvcm1hdHRlck9wdGlvbnN9fSksSi5mb3JtYXQ9Qj0+bmV3IFAuQ3N2Rm9ybWF0dGVyU3RyZWFtKG5ldyBqLkZvcm1hdHRlck9wdGlvbnMoQikpLEoud3JpdGU9'@;
put 'KEIsVyk9Pntjb25zdCBaPUouZm9ybWF0KFcpLFg9Ri5wcm9taXNpZnkoKFEscSk9PntaLndyaXRlKFEsdm9pZCAwLHEpfSk7cmV0dXJuIEIucmVkdWNlKChRLHEpPT5RLnRoZW4oKCk9PlgocSkpLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5aLmVuZCgpKS5jYXRjaChRPT57Wi5lbWl0'@;
put 'KCJlcnJvciIsUSl9KSxafSxKLndyaXRlVG9TdHJlYW09KEIsVyxaKT0+Si53cml0ZShXLFopLnBpcGUoQiksSi53cml0ZVRvQnVmZmVyPShCLFc9e30pPT57Y29uc3QgWj1bXSxYPW5ldyBILldyaXRhYmxlKHt3cml0ZShRLHEsdGUpe1oucHVzaChRKSx0ZSgpfX0pO3JldHVybiBuZXcgUHJv'@;
put 'bWlzZSgoUSxxKT0+e1gub24oImVycm9yIixxKS5vbigiZmluaXNoIiwoKT0+UShELmNvbmNhdChaKSkpLEoud3JpdGUoQixXKS5waXBlKFgpfSl9LEoud3JpdGVUb1N0cmluZz0oQixXKT0+Si53cml0ZVRvQnVmZmVyKEIsVykudGhlbihaPT5aLnRvU3RyaW5nKCkpLEoud3JpdGVUb1BhdGg9'@;
put 'KEIsVyxaKT0+e2NvbnN0IFg9Ui5jcmVhdGVXcml0ZVN0cmVhbShCLHtlbmNvZGluZzoidXRmOCJ9KTtyZXR1cm4gSi53cml0ZShXLFopLnBpcGUoWCl9fSw0NjkyOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Si5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLEouaXNTeW5jVHJhbnNmb3JtPWI9PjE9PT1iLmxlbmd0aH0sMjY1NjpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oUil7cmV0dXJuIFImJlIuX19lc01vZHVsZT9S'@;
put 'OntkZWZhdWx0OlJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5kZWNvZGVUb2tlbj1KLmhhc1Rva2VuRXhwaXJlZD1KLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9Si5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9dm9pZCAwO2NvbnN0IF89RChiKDYy'@;
put 'NDUpKTtmdW5jdGlvbiBGKFIsail7cmV0dXJuKDAsXy5kZWZhdWx0KShSKS5leHAtKG5ldyBEYXRlKS52YWx1ZU9mKCkvMWUzPD1qfUouaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIHAoUixqPTM2MDApe3JldHVybiFSfHxGKFIsail9LEouaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1m'@;
put 'dW5jdGlvbiBOKFIsaj0zMCl7cmV0dXJuIVJ8fEYoUixqKX0sSi5oYXNUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24gdyhSKXtyZXR1cm4hUnx8RihSLDApfSxKLmRlY29kZVRva2VuPWZ1bmN0aW9uIEgoUil7bGV0IGo7dHJ5e2o9KDAsXy5kZWZhdWx0KShSKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkludmFsaWQgdG9rZW4gc3VwcGxpZWQuIil9cmV0dXJuIGp9fSw2Nzk5OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkocCxGLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOW3ddfX0pfTpmdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxwW0ZdPU5bd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLE4pe2Zvcih2YXIgdyBp'@;
put 'biBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTix3KSYmRChOLHAsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoMjY1NiksSil9LDMyNTk6KGNlLEopPT57InVzZSBzdHJpY3QiO09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnByZWZpeE1lc3NhZ2U9dm9pZCAwLEoucHJlZml4TWVzc2FnZT0oRCxfKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgRClpZihELmhhc093blByb3BlcnR5KCJtZXNzYWdlIikpRC5tZXNzYWdlPV8rRC5tZXNz'@;
put 'YWdlO2Vsc2V7aWYoIUQuaGFzT3duUHJvcGVydHkoImJvZHkiKSlyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEQpLHttZXNzYWdlOl99KTtpZigib2JqZWN0Ij09dHlwZW9mIEQuYm9keSYmKEQubWVzc2FnZT1ELmJvZHkubWVzc2FnZT9fK0QuYm9keS5tZXNzYWdlOl8p'@;
put 'LCJzdHJpbmciPT10eXBlb2YgRC5ib2R5KXtsZXQgcDt0cnl7cD1KU09OLnBhcnNlKEQuYm9keSl9Y2F0Y2h7cmV0dXJuIEQubWVzc2FnZT1fLER9cmV0dXJuIHAubWVzc2FnZT1wLm1lc3NhZ2U/XytwLm1lc3NhZ2U6XyxELmJvZHk9cCxEfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIEQmJihE'@;
put 'PV8rRCksRH19LDk3Nzg6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLEYse2VudW1lcmFi'@;
put 'bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5bd119fSl9OmZ1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpLHBbRl09Tlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsTil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5w'@;
put 'cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLHcpJiZEKE4scCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigzMjU5KSxKKSxfKGIoMTA2NCksSil9LDEwNjQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouU2VydmVyVHlwZUVycm9yPXZvaWQgMDtjb25zdCBEPWIoMzkwMCk7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKE49W10pe2xldCB3PShOPVsuLi5uZXcgU2V0KE4pXSkubGVuZ3RoP04uam9pbigiLCAiKS50cmlt'@;
put 'KCk6W0QuU2VydmVyVHlwZS5TYXNWaXlhLEQuU2VydmVyVHlwZS5TYXM5LEQuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7dz13LnJlcGxhY2UoLyxccyhbXixdKikkLywiIGFuZCAkMSIpLHN1cGVyKGBJbnZhbGlkIHNlcnZlciB0eXBlOiB2YWxpZCBvcHRpb24kezEhPT1O'@;
put 'Lmxlbmd0aD8icyI6IiJ9ICR7MSE9PU4ubGVuZ3RoPyJhcmUiOiJpcyJ9ICR7d31gKSx0aGlzLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1KLlNlcnZlclR5cGVFcnJvcj1ffSwzOTA2OmZ1bmN0aW9uKGNlLEosYil7InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihSLGosUCxMKXtyZXR1cm4gbmV3KFB8fChQPVByb21pc2UpKShmdW5jdGlvbihCLFcpe2Z1bmN0aW9uIFoocSl7dHJ5e1EoTC5uZXh0KHEpKX1jYXRjaCh0ZSl7Vyh0ZSl9fWZ1bmN0aW9uIFgocSl7dHJ5e1Eo'@;
put 'TC50aHJvdyhxKSl9Y2F0Y2godGUpe1codGUpfX1mdW5jdGlvbiBRKHEpe3EuZG9uZT9CKHEudmFsdWUpOmZ1bmN0aW9uIFkoQil7cmV0dXJuIEIgaW5zdGFuY2VvZiBQP0I6bmV3IFAoZnVuY3Rpb24oVyl7VyhCKX0pfShxLnZhbHVlKS50aGVuKFosWCl9USgoTD1MLmFwcGx5KFIsanx8W10p'@;
put 'KS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnVwZGF0ZUNzdj1KLmNyZWF0ZUNzdj1KLnJlYWRDc3Y9dm9pZCAwO2NvbnN0IF89YigxNTU5KSxwPWIoNzIwMSk7Si5yZWFkQ3N2PVI9PkQodm9pZCAwLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkKDAsXy5yZWFkRmlsZSkoUikpLnNwbGl0KCJcbiIpLmZpbHRlcihQPT5QLmxlbmd0aCkubWFwKFA9PlAuc3BsaXQoIiwiKSl9KSxKLmNyZWF0ZUNzdj0oUixqLFApPT5EKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEw9eWll'@;
put 'bGQoMCxwLndyaXRlVG9TdHJpbmcpKGose2hlYWRlcnM6UH0pO3lpZWxkKDAsXy5jcmVhdGVGaWxlKShSLEwpfSksSi51cGRhdGVDc3Y9KFIsaixQLEwpPT5EKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9eWllbGQgSChSLGosUCxMKTtpZihMKXtjb25zdCBCPTA9'@;
put 'PT1ZLmxlbmd0aD8xOlkubGVuZ3RoLFc9UC5maW5kSW5kZXgoWj0+Wj09PUwpO1c+LTE/ai5zcGxpY2UoVywwLEIpOihQLnNwbGljZSgwLDAsTCksai5zcGxpY2UoMCwwLEIpKX1ZLnB1c2goaikseWllbGQoMCxKLmNyZWF0ZUNzdikoUixZLFApfSk7Y29uc3QgSD0oUixqLFAsTCk9PkQodm9p'@;
put 'ZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoai5sZW5ndGghPT1QLmxlbmd0aCl7aWYoai5sZW5ndGg+UC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIUx8fGoubGVuZ3Ro'@;
put 'KzEhPT1QLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlmKEwmJlAuaW5jbHVkZXMoTCkpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMg'@;
put 'dGhhbiBwcm92aWRlZCBjb2x1bW5zIik7Y29uc3QgWT15aWVsZCgwLEoucmVhZENzdikoUikuY2F0Y2goVz0+W10pLEI9WVswXTtpZihCKXtpZihQLmxlbmd0aD5CLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVt'@;
put 'YmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihQLmxlbmd0aDxCLmxlbmd0aCl7aWYoIUx8fFAubGVuZ3RoKzEhPT1CLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtj'@;
put 'b25zdCBXPUIuZmluZEluZGV4KFg9Plg9PT1MKSxaPVsuLi5QXTtpZighKFc+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoWi5zcGxpY2UoVywwLEwpLEpTT04uc3RyaW5naWZ5KFApIT09SlNPTi5zdHJp'@;
put 'bmdpZnkoWikpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5naWZ5KFApIT09SlNPTi5zdHJpbmdpZnkoQikpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90'@;
put 'IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihMJiYhUC5pbmNsdWRlcyhMKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGluZyBkYXRhIil9fXJldHVybiBZfSl9LDE1NTk6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhp'@;
put 'cy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSxhZSxuZSl7dm9pZCAwPT09bmUmJihuZT1hZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sbmUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbYWVdfX0pfTpmdW5jdGlvbihtLEEsYWUs'@;
put 'bmUpe3ZvaWQgMD09PW5lJiYobmU9YWUpLG1bbmVdPUFbYWVdfSksXz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obSxBKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6QX0pfTpmdW5j'@;
put 'dGlvbihtLEEpe20uZGVmYXVsdD1BfSkscD10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVybiBtO3ZhciBBPXt9O2lmKG51bGwhPW0pZm9yKHZhciBhZSBpbiBtKSJkZWZhdWx0IiE9PWFlJiZPYmplY3QucHJvdG90eXBlLmhhc093'@;
put 'blByb3BlcnR5LmNhbGwobSxhZSkmJkQoQSxtLGFlKTtyZXR1cm4gXyhBLG0pLEF9LE49dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG0sQSxhZSxuZSl7cmV0dXJuIG5ldyhhZXx8KGFlPVByb21pc2UpKShmdW5jdGlvbih3ZSxaZSl7ZnVuY3Rpb24gUWUodmUpe3RyeXt4ZShuZS5u'@;
put 'ZXh0KHZlKSl9Y2F0Y2gocWUpe1plKHFlKX19ZnVuY3Rpb24gYXQodmUpe3RyeXt4ZShuZS50aHJvdyh2ZSkpfWNhdGNoKHFlKXtaZShxZSl9fWZ1bmN0aW9uIHhlKHZlKXt2ZS5kb25lP3dlKHZlLnZhbHVlKTpmdW5jdGlvbiBsZSh3ZSl7cmV0dXJuIHdlIGluc3RhbmNlb2YgYWU/d2U6bmV3'@;
put 'IGFlKGZ1bmN0aW9uKFplKXtaZSh3ZSl9KX0odmUudmFsdWUpLnRoZW4oUWUsYXQpfXhlKChuZT1uZS5hcHBseShtLEF8fFtdKSkubmV4dCgpKX0pfSx3PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX19'@;
put 'O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmdldExpbmVFbmRpbmc9Si5pc1Rlc3RGaWxlPUoudGVzdEZpbGVSZWdFeHA9Si5jcmVhdGVSZWFkU3RyZWFtPUouY3JlYXRlV3JpdGVTdHJlYW09Si5nZXRSZWFsUGF0aD1KLmJhc2U2NEVuY29kZUZp'@;
put 'bGU9Si5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9Si5wYXRoU2VwRXNjYXBlZD1KLmNvcHk9Si5tb3ZlRmlsZT1KLmdldFJlbGF0aXZlUGF0aD1KLnVuaWZ5RmlsZVBhdGg9Si5kZWxldGVGb2xkZXI9Si5kZWxldGVGaWxlPUouY3JlYXRlRmlsZT1KLmNyZWF0ZUZvbGRlcj1KLmxpc3RGaWxlc0Fu'@;
put 'ZFN1YkZvbGRlcnNJbkZvbGRlcj1KLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9Si5saXN0U2FzRmlsZXNJbkZvbGRlcj1KLmxpc3RJbmlGaWxlc0luRm9sZGVyPUoubGlzdEZpbGVzSW5Gb2xkZXI9Si5yZWFkRmlsZUJpbmFyeT1KLnJlYWRGaWxlPUouaXNGb2xkZXI9Si5mb2xkZXJFeGlzdHM9'@;
put 'Si5maWxlRXhpc3RzPXZvaWQgMDtjb25zdCBGPXcoYig1Njc0KSksSD13KGIoMjUyMCkpLFI9Yig2MjY2KSxqPXAoYigyOTc1KSksUD1iKDM5MDApO2Z1bmN0aW9uIFkobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMu'@;
put 'YWNjZXNzKG0sRi5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIFoobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSl9KX1mdW5jdGlv'@;
put 'biBYKG0pe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gRi5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PiFhZS5pc0RpcmVjdG9yeSgpKS5tYXAoYWU9PmFlLm5hbWUpKX0pfWZ1'@;
put 'bmN0aW9uIGllKG0sQT0hMCxhZT1bXSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihuZT0+Tih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYo'@;
put 'QSYmbmUuZmlsdGVyKHdlPT53ZS5pc0RpcmVjdG9yeSgpKS5sZW5ndGgpe2xldCB3ZT1bXTtyZXR1cm4geWllbGQoMCxSLmFzeW5jRm9yRWFjaCkobmUuZmlsdGVyKFplPT5aZS5pc0RpcmVjdG9yeSgpKSxaZT0+Tih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgUWU9WmUu'@;
put 'bmFtZTtpZighYWUuaW5jbHVkZXMoUWUpKXtjb25zdCBhdD1ILmRlZmF1bHQuam9pbihtLFFlKTt3ZT1bLi4ud2UsLi4uKHlpZWxkIGllKGF0LEEsYWUpKS5tYXAoeGU9PkguZGVmYXVsdC5qb2luKFFlLHhlKSldfX0pKSxbLi4ubmUuZmlsdGVyKFplPT4hWmUuaXNEaXJlY3RvcnkoKSkubWFw'@;
put 'KFplPT5aZS5uYW1lKSwuLi53ZV19cmV0dXJuIG5lLm1hcChsZT0+bGUubmFtZSl9KSl9KX1mdW5jdGlvbiBzZShtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihtLHtyZWN1cnNpdmU6ITB9KX0pfWZ1bmN0'@;
put 'aW9uIFNlKG0sQT1ILmRlZmF1bHQuc2VwLGFlPSIvIil7Y29uc3QgbmU9e3VuaXg6Ii8iLHdpbjoiXFwifTtsZXQgbGU9T2JqZWN0LmtleXMobmUpLmZpbmQod2U9Pm5lW3dlXT09PUEpO2lmKGxlKXtjb25zdCB3ZT1uZVtPYmplY3Qua2V5cyhuZSkuZmluZChaZT0+WmUhPT1sZSldO3JldHVy'@;
put 'biBsZT1uZVtsZV0sbS5zcGxpdCh3ZSkuam9pbihsZSl9cmV0dXJuIG0uc3BsaXQoYWUpLmpvaW4oQSl9Si5maWxlRXhpc3RzPWZ1bmN0aW9uIEwobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sRi5k'@;
put 'ZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfSxKLmZvbGRlckV4aXN0cz1ZLEouaXNGb2xkZXI9ZnVuY3Rpb24gQihtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5wcm9taXNlcy5sc3Rh'@;
put 'dChtKS50aGVuKEE9PkEuaXNEaXJlY3RvcnkoKSkuY2F0Y2goKCk9PiExKX0pfSxKLnJlYWRGaWxlPWZ1bmN0aW9uIFcobSxBPSJ1dGY4Iil7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSxBKX0pfSxK'@;
put 'LnJlYWRGaWxlQmluYXJ5PVosSi5saXN0RmlsZXNJbkZvbGRlcj1YLEoubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gUShtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIFgobSkpLmZpbHRlcihBPT5BLmVuZHNXaXRoKCIuaW5pIikp'@;
put 'fSl9LEoubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gcShtLEE9ITEsYWU9W10pe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgaWUobSxBLGFlKSkuZmlsdGVyKHdlPT53ZS5lbmRzV2l0aCgiLnNhcyIpKX0pfSxKLmxpc3RTdWJGb2xk'@;
put 'ZXJzSW5Gb2xkZXI9ZnVuY3Rpb24gdGUobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihBPT5BLmZpbHRlcihhZT0+YWUuaXNEaXJlY3RvcnkoKSkubWFw'@;
put 'KGFlPT5hZS5uYW1lKSl9KX0sSi5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9aWUsSi5jcmVhdGVGb2xkZXI9c2UsSi5jcmVhdGVGaWxlPWZ1bmN0aW9uIGdlKG0sQSxhZSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKChtPVNlKG0pKS5zcGxpdChI'@;
put 'LmRlZmF1bHQuc2VwKS5sZW5ndGg+MSl7bGV0IG5lPW0uc3BsaXQoSC5kZWZhdWx0LnNlcCk7bmUucG9wKCk7Y29uc3QgbGU9bmUuam9pbihILmRlZmF1bHQuc2VwKTsoeWllbGQgWShsZSkpfHwoeWllbGQgc2UobGUpKX1yZXR1cm4gRi5kZWZhdWx0LnByb21pc2VzLndyaXRlRmlsZShtLEEs'@;
put 'YWUpfSl9LEouZGVsZXRlRmlsZT1mdW5jdGlvbiBfZShtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5yZW1vdmUobSl9KX0sSi5kZWxldGVGb2xkZXI9ZnVuY3Rpb24gVGUobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucm0obSx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9KX0sSi51bmlmeUZpbGVQYXRoPVNlLEouZ2V0UmVsYXRpdmVQYXRoPWZ1bmN0aW9uIHplKG0sQSl7Y29uc3QgYWU9bS5zcGxpdChILmRlZmF1bHQuc2VwKSxuZT1BLnNwbGl0KEguZGVmYXVs'@;
put 'dC5zZXApO2xldCBsZT1bXSx3ZT1bXTthZS5mb3JFYWNoKCh2ZSxxZSk9Pnt2b2lkIDAhPT1uZVtxZV0mJmFlW3FlXT09PW5lW3FlXT9sZS5wdXNoKHZlKTp2ZSYmd2UucHVzaCh2ZSl9KTtjb25zdCBaZT1sZS5qb2luKEguZGVmYXVsdC5zZXApLFFlPW5ldyBSZWdFeHAoYF4ke0guZGVmYXVs'@;
put 'dC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfWApLGF0PW5ldyBSZWdFeHAoYCR7SC5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIil9JGApO3JldHVybih3ZS5sZW5ndGg/YC4uJHtILmRlZmF1bHQuc2VwfWAucmVwZWF0KHdlLmxlbmd0aCk6YC4ke0guZGVmYXVsdC5zZXB9YCkr'@;
put 'QS5yZXBsYWNlKFplLCIiKS5yZXBsYWNlKFFlLCIiKS5yZXBsYWNlKGF0LCIiKX0sSi5tb3ZlRmlsZT1mdW5jdGlvbiB6KG0sQSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKG0sQSl9KX0sSi5jb3B5PWZ1'@;
put 'bmN0aW9uIGcobSxBKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5jb3B5KG0sQSl9KX0sSi5wYXRoU2VwRXNjYXBlZD1ILmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSxKLmJhc2U2NEVuY29kZUltYWdlRmlsZT1mdW5j'@;
put 'dGlvbiB5KG0pe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gWihtKS50aGVuKEE9PntsZXQgYWU9SC5kZWZhdWx0LmV4dG5hbWUobSkuc3Vic3RyKDEpfHwicG5nIjtyZXR1cm4ic3ZnIj09PWFlJiYoYWU9InN2Zyt4bWwiKSwiZGF0YTppbWFnZS8iK2Fl'@;
put 'KyI7YmFzZTY0LCIrQS50b1N0cmluZygiYmFzZTY0Iil9KX0pfSxKLmJhc2U2NEVuY29kZUZpbGU9ZnVuY3Rpb24geChtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShtLHtlbmNvZGluZzoiYmFzZTY0'@;
put 'In0pfSl9LEouZ2V0UmVhbFBhdGg9ZnVuY3Rpb24gQyhtKXtyZXR1cm4gRi5kZWZhdWx0LnJlYWxwYXRoU3luYyhtKX0sSi5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbiBUKG0pe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgai5maWxlRXhp'@;
put 'c3RzKG0pKXx8KHlpZWxkIGouY3JlYXRlRmlsZShtLCIiKSksRi5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKG0se2ZsYWdzOiJhIn0pfSl9LEouY3JlYXRlUmVhZFN0cmVhbT1tPT5OKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQuY3JlYXRlUmVh'@;
put 'ZFN0cmVhbShtKX0pLEoudGVzdEZpbGVSZWdFeHA9L1wudGVzdFwuKFxkK1wuKT9zYXMkL2ksSi5pc1Rlc3RGaWxlPW09PkoudGVzdEZpbGVSZWdFeHAudGVzdChtKSxKLmdldExpbmVFbmRpbmc9bT0+bmV3IFJlZ0V4cChQLkxpbmVFbmRpbmdzLkNSTEYpLnRlc3QobSk/UC5MaW5lRW5kaW5n'@;
put 'cy5DUkxGOlAuTGluZUVuZGluZ3MuTEZ9LDU2MjY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0QWJzb2x1dGVQYXRoPXZvaWQgMDtjb25zdCBfPUQoYigyNTIwKSkscD1EKGIoNzQzNSkpO0ouZ2V0QWJzb2x1dGVQYXRoPSh3LEYpPT5fLmRlZmF1bHQuaXNBYnNvbHV0ZSh3KXx8L15+Ly5leGVjKHcpP18uZGVmYXVsdC5ub3JtYWxp'@;
put 'emUody5yZXBsYWNlKC9efi8scC5kZWZhdWx0LmhvbWVkaXIoKSkpOl8uZGVmYXVsdC5qb2luKEYsdyl9LDI5NzU6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHcsRixILFIpe3Zv'@;
put 'aWQgMD09PVImJihSPUgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LFIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEZbSF19fSl9OmZ1bmN0aW9uKHcsRixILFIpe3ZvaWQgMD09PVImJihSPUgpLHdbUl09RltIXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1'@;
put 'bmN0aW9uKHcsRil7Zm9yKHZhciBIIGluIHcpImRlZmF1bHQiIT09SCYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChGLEgpJiZEKEYsdyxIKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoucmVhZENzdj1KLmNyZWF0ZUNz'@;
put 'dj1KLnVwZGF0ZUNzdj1KLmdldExpbmVFbmRpbmc9Si50ZXN0RmlsZVJlZ0V4cD1KLmlzVGVzdEZpbGU9Si5nZXRSZWFsUGF0aD1KLmJhc2U2NEVuY29kZUZpbGU9Si5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9Si5jb3B5PUoucGF0aFNlcEVzY2FwZWQ9Si5tb3ZlRmlsZT1KLnVuaWZ5RmlsZVBh'@;
put 'dGg9Si5nZXRSZWxhdGl2ZVBhdGg9Si5kZWxldGVGb2xkZXI9Si5kZWxldGVGaWxlPUouY3JlYXRlV3JpdGVTdHJlYW09Si5jcmVhdGVSZWFkU3RyZWFtPUouY3JlYXRlRm9sZGVyPUouY3JlYXRlRmlsZT1KLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1KLmxpc3RTdWJGb2xkZXJz'@;
put 'SW5Gb2xkZXI9Si5saXN0U2FzRmlsZXNJbkZvbGRlcj1KLmxpc3RJbmlGaWxlc0luRm9sZGVyPUoubGlzdEZpbGVzSW5Gb2xkZXI9Si5yZWFkRmlsZUJpbmFyeT1KLnJlYWRGaWxlPUouaXNGb2xkZXI9Si5mb2xkZXJFeGlzdHM9Si5maWxlRXhpc3RzPXZvaWQgMDt2YXIgcD1iKDE1NTkpO09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShKLCJmaWxlRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5maWxlRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJmb2xkZXJFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBw'@;
put 'LmZvbGRlckV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiaXNGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmlzRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJyZWFkRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHAucmVhZEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosInJlYWRGaWxlQmluYXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5yZWFkRmlsZUJpbmFyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwibGlzdEZpbGVzSW5Gb2xkZXIi'@;
put 'LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmxpc3RGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJsaXN0SW5pRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlzdEluaUZpbGVzSW5Gb2xk'@;
put 'ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImxpc3RTYXNGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5saXN0U2FzRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwibGlzdFN1YkZvbGRlcnNJbkZvbGRlciIs'@;
put 'e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlzdFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwibGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5saXN0'@;
put 'RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImNyZWF0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNyZWF0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImNyZWF0ZUZvbGRlciIse2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuY3JlYXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJjcmVhdGVSZWFkU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5jcmVhdGVSZWFkU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShKLCJjcmVhdGVXcml0ZVN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuY3JlYXRlV3JpdGVTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImRlbGV0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBw'@;
put 'LmRlbGV0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImRlbGV0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVsZXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJnZXRSZWxhdGl2ZVBhdGgiLHtlbnVtZXJhYmxlOiEw'@;
put 'LGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldFJlbGF0aXZlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwidW5pZnlGaWxlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAudW5pZnlGaWxlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwi'@;
put 'bW92ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLm1vdmVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJwYXRoU2VwRXNjYXBlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAucGF0aFNlcEVzY2FwZWR9fSksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KEosImNvcHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNvcHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImJhc2U2NEVuY29kZUltYWdlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuYmFzZTY0'@;
put 'RW5jb2RlSW1hZ2VGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJiYXNlNjRFbmNvZGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5iYXNlNjRFbmNvZGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJnZXRSZWFsUGF0aCIse2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0UmVhbFBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImlzVGVzdEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmlzVGVzdEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosInRl'@;
put 'c3RGaWxlUmVnRXhwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC50ZXN0RmlsZVJlZ0V4cH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiZ2V0TGluZUVuZGluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0TGluZUVuZGluZ319'@;
put 'KTt2YXIgTj1iKDM5MDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ1cGRhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOLnVwZGF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiY3JlYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gTi5jcmVhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosInJlYWRDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOLnJlYWRDc3Z9fSksXyhiKDU2MjYpLEopfSwyNzc3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLm5ld0xpbmU9Si5jYXBpdGFsaXplRmlyc3RDaGFyPUouc2FuaXRpemVTcGVjaWFsQ2hhcnM9Si5wYWRXaXRoTnVtYmVyPXZvaWQgMDt2YXIgRD1iKDUzMDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJwYWRXaXRoTnVt'@;
put 'YmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5wYWRXaXRoTnVtYmVyfX0pO3ZhciBfPWIoOTI3NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosInNhbml0aXplU3BlY2lhbENoYXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zYW5p'@;
put 'dGl6ZVNwZWNpYWxDaGFyc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiY2FwaXRhbGl6ZUZpcnN0Q2hhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uY2FwaXRhbGl6ZUZpcnN0Q2hhcn19KTt2YXIgcD1iKDE2MjgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShK'@;
put 'LCJuZXdMaW5lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5uZXdMaW5lfX0pfSw1MzA2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5wYWRXaXRoTnVtYmVyPXZvaWQgMCxKLnBh'@;
put 'ZFdpdGhOdW1iZXI9KEQsXz0wKT0+RD45P0Q6YCR7X30ke0R9YH0sMTYyODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLm5ld0xpbmU9dm9pZCAwLEoubmV3TGluZT0oKT0+Indp'@;
put 'bjMyIj09PUQucGxhdGZvcm0/IlxcclxcbiI6IlxcbiJ9LDkyNzU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmNhcGl0YWxpemVGaXJzdENoYXI9Si5zYW5pdGl6ZVNwZWNpYWxDaGFycz12b2lkIDAsSi5z'@;
put 'YW5pdGl6ZVNwZWNpYWxDaGFycz1fPT5fLnJlcGxhY2UoL1tcdTAwMWJcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csIiIpLEouY2FwaXRhbGl6ZUZpcnN0Q2hhcj1fPT5fLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgp'@;
put 'K18uc2xpY2UoMSl9LDY0Njc6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEgpe3JldHVybiBIJiZILl9fZXNNb2R1bGU/SDp7ZGVmYXVsdDpIfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLEouaXNTcGVjaWFsTWlzc2luZz1KLmNob2ljZVZhbGlkYXRvcj1KLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1KLnVybFZhbGlkYXRvcj12b2lkIDA7Y29uc3QgXz1EKGIoNDgxKSk7Si51cmxWYWxpZGF0b3I9KEgsUik9PiEhXy5kZWZhdWx0LmlzSHR0cFVyaShIKXx8'@;
put 'ISFfLmRlZmF1bHQuaXNIdHRwc1VyaShIKXx8IiI9PT1IfHxSLEouY29uZmlybWF0aW9uVmFsaWRhdG9yPUg9PiEwPT09SHx8ITE9PT1ILEouY2hvaWNlVmFsaWRhdG9yPShILFIsaik9Pkg+MCYmSDw9Unx8aixKLmlzU3BlY2lhbE1pc3Npbmc9SD0+KCJzdHJpbmciIT10eXBlb2YgSHx8IUgu'@;
put 'aW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChIKX0sNzc1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZW5lcmF0ZVRpbWVzdGFtcD1KLnRp'@;
put 'bWVzdGFtcFRvWVlZWU1NRERISE1NU1M9Si5jb252ZXJ0U2Vjb25kc1RvSG1zPXZvaWQgMDt2YXIgRD1iKDEzMDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJjb252ZXJ0U2Vjb25kc1RvSG1zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5jb252ZXJ0U2Vjb25k'@;
put 'c1RvSG1zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ0aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJnZW5lcmF0ZVRp'@;
put 'bWVzdGFtcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuZ2VuZXJhdGVUaW1lc3RhbXB9fSl9LDEzMDI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouY29udmVydFNlY29uZHNU'@;
put 'b0htcz1KLmdlbmVyYXRlVGltZXN0YW1wPUoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7Y29uc3QgRD1iKDI3NzcpO0oudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz0odz1EYXRlLm5vdygpKT0+e2NvbnN0IEY9bmV3IERhdGUodyk7cmV0dXJuW0YuZ2V0RnVsbFllYXIoKSwo'@;
put 'MCxELnBhZFdpdGhOdW1iZXIpKEYuZ2V0TW9udGgoKSsxKSwoMCxELnBhZFdpdGhOdW1iZXIpKEYuZ2V0RGF0ZSgpKV0uam9pbigiLyIpKyIgIitbKDAsRC5wYWRXaXRoTnVtYmVyKShGLmdldEhvdXJzKCkpLCgwLEQucGFkV2l0aE51bWJlcikoRi5nZXRNaW51dGVzKCkpLCgwLEQucGFkV2l0'@;
put 'aE51bWJlcikoRi5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iil9LEouZ2VuZXJhdGVUaW1lc3RhbXA9KHc9IiIsRik9Pntjb25zdCBIPW5ldyBEYXRlO2xldCBSPVtILmdldFVUQ0Z1bGxZZWFyKCksSC5nZXRVVENNb250aCgpKzEsSC5nZXRVVENEYXRlKCksSC5nZXRVVENIb3VycygpLEguZ2V0'@;
put 'VVRDTWludXRlcygpLEguZ2V0VVRDU2Vjb25kcygpXTtyZXR1cm4gUj1SLm1hcChqPT4oMCxELnBhZFdpdGhOdW1iZXIpKGopKSxGJiZ3JiZGPFIubGVuZ3RoJiZGPj0wJiZSLnNwbGljZShGLDAsdyksUj1SLmpvaW4oRj8iIjp3KSxSfSxKLmNvbnZlcnRTZWNvbmRzVG9IbXM9dz0+e2lmKCF3'@;
put 'KXJldHVybiIwIHNlY29uZCI7Y29uc3QgRj1NYXRoLmZsb29yKHcvNjApLEg9TWF0aC5mbG9vcihGLzYwKSxSPUYlNjAsaj13JTYwO2xldCBQPSIiO3JldHVybiBIPjAmJihQPUgrIiBob3VyIisoSD4xPyJzIjoiIikpLFI+MCYmKFArPWAke1A/IiwgIjoiIn0ke1J9IG1pbnV0ZSR7Uj4xPyJz'@;
put 'IjoiIn1gKSxqPjAmJihQKz1gJHtQPyIsICI6IiJ9JHtqfSBzZWNvbmQke2o+MT8icyI6IiJ9YCksUH19LDgyMzk6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBEO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkNvbmZpZ1R5cGVzPXZvaWQgMCwo'@;
put 'RD1KLkNvbmZpZ1R5cGVzfHwoSi5Db25maWdUeXBlcz17fSkpLkJ1aWxkPSJidWlsZENvbmZpZyIsRC5TZXJ2aWNlPSJzZXJ2aWNlQ29uZmlnIixELkpvYj0iam9iQ29uZmlnIixELlRlc3Q9InRlc3RDb25maWciLEQuRG9jPSJkb2NDb25maWciLEQuRGVwbG95PSJkZXBsb3lDb25maWciLEQu'@;
put 'U3RyZWFtPSJzdHJlYW1Db25maWciLEQuQXV0aD0iYXV0aENvbmZpZyJ9LDI0Mjc6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTg5OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM2OTI6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDcyOTooY2UsSik9PnsidXNlIHN0cmljdCI7dmFyIEQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KEos'@;
put 'Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouTGluZUVuZGluZ3M9dm9pZCAwLChEPUouTGluZUVuZGluZ3N8fChKLkxpbmVFbmRpbmdzPXt9KSkuQ1JMRj0iXHJcbiIsRC5MRj0iXG4ifSw2OTM5OihjZSxKKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5NZW1iZXJUeXBlPXZvaWQgMCwoRD1KLk1lbWJlclR5cGV8fChKLk1lbWJlclR5cGU9e30pKS5zZXJ2aWNlPSJzZXJ2aWNlIixELmZpbGU9ImZpbGUiLEQuZm9sZGVyPSJmb2xkZXIifSwzMzI3OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDUxNjU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzkwMDpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlz'@;
put 'JiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsRix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTlt3XX19KX06ZnVuY3Rpb24ocCxOLHcsRil7'@;
put 'dm9pZCAwPT09RiYmKEY9dykscFtGXT1OW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocCxOKXtmb3IodmFyIHcgaW4gcCkiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE4sdykmJkQoTixwLHcpfTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyhiKDgyMzkpLEopLF8oYigyNDI3KSxKKSxfKGIoMTg5KSxKKSxfKGIoMzY5MiksSiksXyhiKDY5MzkpLEopLF8oYigzMzI3KSxKKSxfKGIoNTE2NSksSiksXyhiKDQwNjkpLEopLF8oYig4OTMyKSxKKSxfKGIoNCksSiks'@;
put 'XyhiKDIwMTUpLEopLF8oYig4NTE1KSxKKSxfKGIoNTMxMyksSiksXyhiKDg5NzkpLEopLF8oYig0NzI5KSxKKX0sNDA2OTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouaXNNYWNyb1ZhcnM9dm9pZCAwLEou'@;
put 'aXNNYWNyb1ZhcnM9RD0+RCYmIm9iamVjdCI9PXR5cGVvZiBELm1hY3JvVmFycyYmIUFycmF5LmlzQXJyYXkoRC5tYWNyb1ZhcnMpfSw4OTMyOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ6KGNlLEopPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciBEO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLlNBU0pzRmlsZVR5cGU9dm9pZCAwLChEPUouU0FTSnNGaWxlVHlwZXx8KEouU0FTSnNGaWxlVHlwZT17fSkpLnNlcnZpY2U9IlNlcnZpY2UiLEQuam9iPSJKb2IiLEQu'@;
put 'dGVzdD0iVGVzdCIsRC5maWxlPSJGaWxlIn0sMjAxNTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE1OihjZSxKKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksSi5TZXJ2ZXJUeXBlPXZvaWQgMCwoRD1KLlNlcnZlclR5cGV8fChKLlNlcnZlclR5cGU9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixELlNhczk9IlNBUzkiLEQuU2FzanM9IlNBU0pTIn0sNTMxMzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4OTc5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLlRhcmdldD12b2lkIDA7Y29uc3QgRD1iKDgyMzkpLF89Yig4NTE1KSxwPWIoNjc4'@;
put 'MSk7Si5UYXJnZXQ9Y2xhc3MgTntjb25zdHJ1Y3RvcihGLEg9e30pe3RoaXMuX3NlcnZlclR5cGU9Xy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsdGhpcy5nZXRDb25maWc9KFIsaik9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jb25maWdbUl18fHt9KSxqW1JdKTt0cnl7aWYo'@;
put 'IUYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldDogSW5wdXQgSlNPTiBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTt0aGlzLl9jb25maWc9SCx0aGlzLl9uYW1lPSgwLHAudmFsaWRhdGVUYXJnZXROYW1lKShGLm5hbWUpLHRoaXMuX3NlcnZlclVybD0oMCxwLnZhbGlkYXRlU2VydmVy'@;
put 'VXJsKShGLnNlcnZlclVybCksdGhpcy5fc2VydmVyVHlwZT0oMCxwLnZhbGlkYXRlU2VydmVyVHlwZSkoRi5zZXJ2ZXJUeXBlKSx0aGlzLl9odHRwc0FnZW50T3B0aW9ucz0oMCxwLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnMpKEYuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuX2FwcExvYz0o'@;
put 'MCxwLnZhbGlkYXRlQXBwTG9jKShGLmFwcExvYyksdGhpcy5fY29udGV4dE5hbWU9KDAscC52YWxpZGF0ZUNvbnRleHROYW1lKShGLmNvbnRleHROYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3NlcnZlck5hbWU9KDAscC52YWxpZGF0ZVNlcnZlck5hbWUpKEYuc2VydmVyTmFtZSx0aGlz'@;
put 'Ll9zZXJ2ZXJUeXBlKSx0aGlzLl9zeW5jRm9sZGVyPSgwLHAudmFsaWRhdGVTeW5jRm9sZGVyKShGLnN5bmNGb2xkZXIpLHRoaXMuX3JlcG9zaXRvcnlOYW1lPSgwLHAudmFsaWRhdGVSZXBvc2l0b3J5TmFtZSkoRi5yZXBvc2l0b3J5TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSxGLmRvY0NvbmZp'@;
put 'ZyYmKHRoaXMuX2RvY0NvbmZpZz0oMCxwLnZhbGlkYXRlRG9jQ29uZmlnKSh0aGlzLmdldENvbmZpZyhELkNvbmZpZ1R5cGVzLkRvYyxGKSkpLEYuYXV0aENvbmZpZyYmKHRoaXMuX2F1dGhDb25maWc9KDAscC52YWxpZGF0ZUF1dGhDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEQuQ29uZmlnVHlw'@;
put 'ZXMuQXV0aCxGKSkpLEYuYXV0aENvbmZpZ1NhczkmJih0aGlzLl9hdXRoQ29uZmlnU2FzOT0oMCxwLnZhbGlkYXRlQXV0aENvbmZpZ1NhczkpKEYuYXV0aENvbmZpZ1NhczkpKSxGLmJ1aWxkQ29uZmlnJiYodGhpcy5fYnVpbGRDb25maWc9KDAscC52YWxpZGF0ZUJ1aWxkQ29uZmlnKSh0aGlz'@;
put 'LmdldENvbmZpZyhELkNvbmZpZ1R5cGVzLkJ1aWxkLEYpLHRoaXMuX25hbWUpKSx0aGlzLl9kZXBsb3lDb25maWc9KDAscC52YWxpZGF0ZURlcGxveUNvbmZpZykoRi5kZXBsb3lDb25maWc/dGhpcy5nZXRDb25maWcoRC5Db25maWdUeXBlcy5EZXBsb3ksRik6e2RlcGxveVNlcnZpY2VQYWNr'@;
put 'OiEwLGRlcGxveVNjcmlwdHM6W119KSxGLnNlcnZpY2VDb25maWcmJih0aGlzLl9zZXJ2aWNlQ29uZmlnPSgwLHAudmFsaWRhdGVTZXJ2aWNlQ29uZmlnKSh0aGlzLmdldENvbmZpZyhELkNvbmZpZ1R5cGVzLlNlcnZpY2UsRikpKSxGLmpvYkNvbmZpZyYmKHRoaXMuX2pvYkNvbmZpZz0oMCxw'@;
put 'LnZhbGlkYXRlSm9iQ29uZmlnKSh0aGlzLmdldENvbmZpZyhELkNvbmZpZ1R5cGVzLkpvYixGKSkpLEYuc3RyZWFtQ29uZmlnJiYodGhpcy5fc3RyZWFtQ29uZmlnPSgwLHAudmFsaWRhdGVTdHJlYW1Db25maWcpKHRoaXMuZ2V0Q29uZmlnKEQuQ29uZmlnVHlwZXMuU3RyZWFtLEYpKSksRi50'@;
put 'ZXN0Q29uZmlnJiYodGhpcy5fdGVzdENvbmZpZz0oMCxwLnZhbGlkYXRlVGVzdENvbmZpZykodGhpcy5nZXRDb25maWcoRC5Db25maWdUeXBlcy5UZXN0LEYpKSksRi5tYWNyb0ZvbGRlcnMmJkYubWFjcm9Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX21hY3JvRm9sZGVycz1GLm1hY3JvRm9sZGVy'@;
put 'cyksRi5wcm9ncmFtRm9sZGVycyYmRi5wcm9ncmFtRm9sZGVycy5sZW5ndGgmJih0aGlzLl9wcm9ncmFtRm9sZGVycz1GLnByb2dyYW1Gb2xkZXJzKSxGLmJpbmFyeUZvbGRlcnMmJkYuYmluYXJ5Rm9sZGVycy5sZW5ndGgmJih0aGlzLl9iaW5hcnlGb2xkZXJzPUYuYmluYXJ5Rm9sZGVycyks'@;
put 'Ri5zeW5jRGlyZWN0b3JpZXMmJkYuc3luY0RpcmVjdG9yaWVzLmxlbmd0aCYmKHRoaXMuX3N5bmNEaXJlY3Rvcmllcz0oMCxwLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzKShGLnN5bmNEaXJlY3RvcmllcykpLEYuc2FzanNCdWlsZEZvbGRlciYmKHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXI9KDAs'@;
put 'cC52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXIpKEYuc2FzanNCdWlsZEZvbGRlcikpLEYuc2FzanNSZXN1bHRzRm9sZGVyJiYodGhpcy5fc2FzanNSZXN1bHRzRm9sZGVyPSgwLHAudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXIpKEYuc2FzanNSZXN1bHRzRm9sZGVyKSl9Y2F0Y2goUil7dGhy'@;
put 'b3cgbmV3IEVycm9yKGBFcnJvciBwYXJzaW5nIHRhcmdldDogJHtSLm1lc3NhZ2V9YCl9fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9Z2V0IHNlcnZlclVybCgpe3JldHVybiB0aGlzLl9zZXJ2ZXJVcmx9Z2V0IHNlcnZlclR5cGUoKXtyZXR1cm4gdGhpcy5fc2VydmVyVHlwZX1nZXQg'@;
put 'aHR0cHNBZ2VudE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5faHR0cHNBZ2VudE9wdGlvbnN9Z2V0IGFwcExvYygpe3JldHVybiB0aGlzLl9hcHBMb2N9Z2V0IGRvY0NvbmZpZygpe3JldHVybiB0aGlzLl9kb2NDb25maWd9Z2V0IGF1dGhDb25maWcoKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ31n'@;
put 'ZXQgYXV0aENvbmZpZ1NhczkoKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ1Nhczl9Z2V0IGJ1aWxkQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2J1aWxkQ29uZmlnfWdldCBkZXBsb3lDb25maWcoKXtyZXR1cm4gdGhpcy5fZGVwbG95Q29uZmlnfWdldCBzZXJ2aWNlQ29uZmlnKCl7cmV0dXJuIHRo'@;
put 'aXMuX3NlcnZpY2VDb25maWd9Z2V0IGpvYkNvbmZpZygpe3JldHVybiB0aGlzLl9qb2JDb25maWd9Z2V0IHN0cmVhbUNvbmZpZygpe3JldHVybiB0aGlzLl9zdHJlYW1Db25maWd9Z2V0IG1hY3JvRm9sZGVycygpe3JldHVybiB0aGlzLl9tYWNyb0ZvbGRlcnN9Z2V0IHByb2dyYW1Gb2xkZXJz'@;
put 'KCl7cmV0dXJuIHRoaXMuX3Byb2dyYW1Gb2xkZXJzfWdldCBiaW5hcnlGb2xkZXJzKCl7cmV0dXJuIHRoaXMuX2JpbmFyeUZvbGRlcnN9Z2V0IGNvbnRleHROYW1lKCl7cmV0dXJuIHRoaXMuX2NvbnRleHROYW1lfWdldCBzZXJ2ZXJOYW1lKCl7cmV0dXJuIHRoaXMuX3NlcnZlck5hbWV9Z2V0'@;
put 'IHJlcG9zaXRvcnlOYW1lKCl7cmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlOYW1lfWdldCB0ZXN0Q29uZmlnKCl7cmV0dXJuIHRoaXMuX3Rlc3RDb25maWd9Z2V0IHN5bmNGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc3luY0ZvbGRlcn1nZXQgc3luY0RpcmVjdG9yaWVzKCl7cmV0dXJuIHRoaXMuX3N5'@;
put 'bmNEaXJlY3Rvcmllc31nZXQgc2FzanNCdWlsZEZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc0J1aWxkRm9sZGVyfWdldCBzYXNqc1Jlc3VsdHNGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2FzanNSZXN1bHRzRm9sZGVyfXRvSnNvbihGPSEwKXt2YXIgSCxSLGo7Y29uc3QgUD17bmFtZTp0aGlz'@;
put 'Lm5hbWUsc2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHNlcnZlclR5cGU6dGhpcy5zZXJ2ZXJUeXBlLGh0dHBzQWdlbnRPcHRpb25zOnRoaXMuaHR0cHNBZ2VudE9wdGlvbnMsYXBwTG9jOnRoaXMuYXBwTG9jLGRvY0NvbmZpZzp0aGlzLmRvY0NvbmZpZyxkZXBsb3lDb25maWc6dGhpcy5kZXBs'@;
put 'b3lDb25maWd9O3JldHVybiEobnVsbD09PShIPXRoaXMubWFjcm9Gb2xkZXJzKXx8dm9pZCAwPT09SCkmJkgubGVuZ3RoJiYoUC5tYWNyb0ZvbGRlcnM9dGhpcy5tYWNyb0ZvbGRlcnMpLCEobnVsbD09PShSPXRoaXMucHJvZ3JhbUZvbGRlcnMpfHx2b2lkIDA9PT1SKSYmUi5sZW5ndGgmJihQ'@;
put 'LnByb2dyYW1Gb2xkZXJzPXRoaXMucHJvZ3JhbUZvbGRlcnMpLCEobnVsbD09PShqPXRoaXMuYmluYXJ5Rm9sZGVycyl8fHZvaWQgMD09PWopJiZqLmxlbmd0aCYmKFAuYmluYXJ5Rm9sZGVycz10aGlzLmJpbmFyeUZvbGRlcnMpLHRoaXMuYXV0aENvbmZpZyYmKFAuYXV0aENvbmZpZz10aGlz'@;
put 'LmF1dGhDb25maWcpLHRoaXMuYXV0aENvbmZpZ1NhczkmJihQLmF1dGhDb25maWdTYXM5PXRoaXMuYXV0aENvbmZpZ1NhczkpLHRoaXMuc2FzanNCdWlsZEZvbGRlcj9QLnNhc2pzQnVpbGRGb2xkZXI9dGhpcy5zYXNqc0J1aWxkRm9sZGVyOkYmJihQLnNhc2pzQnVpbGRGb2xkZXI9cC5ERUZB'@;
put 'VUxUX1NBU0pTX0JVSUxEX0ZPTERFUiksdGhpcy5zYXNqc1Jlc3VsdHNGb2xkZXI/UC5zYXNqc1Jlc3VsdHNGb2xkZXI9dGhpcy5zYXNqc1Jlc3VsdHNGb2xkZXI6RiYmKFAuc2FzanNSZXN1bHRzRm9sZGVyPXAuREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUiksdGhpcy5zeW5jRGlyZWN0'@;
put 'b3JpZXM/UC5zeW5jRGlyZWN0b3JpZXM9dGhpcy5zeW5jRGlyZWN0b3JpZXM6RiYmKFAuc3luY0RpcmVjdG9yaWVzPVtdKSx0aGlzLmJ1aWxkQ29uZmlnP1AuYnVpbGRDb25maWc9dGhpcy5idWlsZENvbmZpZzpGJiYoUC5idWlsZENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06'@;
put 'IiIsYnVpbGRPdXRwdXRGaWxlTmFtZTpgJHt0aGlzLm5hbWV9LnNhc2AsbWFjcm9WYXJzOnt9fSksdGhpcy5qb2JDb25maWc/UC5qb2JDb25maWc9dGhpcy5qb2JDb25maWc6RiYmKFAuam9iQ29uZmlnPXtqb2JGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3Jv'@;
put 'VmFyczp7fX0pLHRoaXMuc2VydmljZUNvbmZpZz9QLnNlcnZpY2VDb25maWc9dGhpcy5zZXJ2aWNlQ29uZmlnOkYmJihQLnNlcnZpY2VDb25maWc9e3NlcnZpY2VGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc3RyZWFtQ29uZmln'@;
put 'P1Auc3RyZWFtQ29uZmlnPXRoaXMuc3RyZWFtQ29uZmlnOkYmJihQLnN0cmVhbUNvbmZpZz17c3RyZWFtV2ViRm9sZGVyOiIiLHN0cmVhbVdlYjohMSx3ZWJTb3VyY2VQYXRoOiIiLHN0cmVhbVNlcnZpY2VOYW1lOiIiLGFzc2V0UGF0aHM6W119KSx0aGlzLnRlc3RDb25maWc/UC50ZXN0Q29u'@;
put 'ZmlnPXRoaXMudGVzdENvbmZpZzpGJiYoUC50ZXN0Q29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e30sdGVzdFNldFVwOiIiLHRlc3RUZWFyRG93bjoiIn0pLHRoaXMuc2VydmVyVHlwZT09PV8uU2VydmVyVHlwZS5TYXNWaXlhP1AuY29udGV4dE5hbWU9'@;
put 'dGhpcy5jb250ZXh0TmFtZTp0aGlzLnNlcnZlclR5cGU9PT1fLlNlcnZlclR5cGUuU2FzOSYmKFAuc2VydmVyTmFtZT10aGlzLnNlcnZlck5hbWUsUC5yZXBvc2l0b3J5TmFtZT10aGlzLnJlcG9zaXRvcnlOYW1lKSxQfX19LDY3ODE6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFy'@;
put 'IEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGcpe3JldHVybiBnJiZnLl9fZXNNb2R1bGU/Zzp7ZGVmYXVsdDpnfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9Si52YWxp'@;
put 'ZGF0ZVNhc2pzQnVpbGRGb2xkZXI9Si52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1KLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9Si52YWxpZGF0ZVN5bmNGb2xkZXI9Si52YWxpZGF0ZVNlcnZlck5hbWU9Si52YWxpZGF0ZUNvbnRleHROYW1lPUoudmFsaWRhdGVTdHJlYW1Db25maWc9Si52YWxp'@;
put 'ZGF0ZURlcGxveUNvbmZpZz1KLnZhbGlkYXRlSm9iQ29uZmlnPUoudmFsaWRhdGVUZXN0Q29uZmlnPUoudmFsaWRhdGVTZXJ2aWNlQ29uZmlnPUoudmFsaWRhdGVCdWlsZENvbmZpZz1KLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9Si52YWxpZGF0ZUF1dGhDb25maWc9Si52YWxpZGF0ZURvY0Nv'@;
put 'bmZpZz1KLnZhbGlkYXRlQXBwTG9jPUoudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1KLnZhbGlkYXRlU2VydmVyVXJsPUoudmFsaWRhdGVUYXJnZXROYW1lPUoudmFsaWRhdGVTZXJ2ZXJUeXBlPUouREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUj1KLkRFRkFVTFRfU0FTSlNfQlVJTERf'@;
put 'Rk9MREVSPXZvaWQgMDtjb25zdCBfPUQoYig0ODEpKSxwPWIoMzkwMCk7Si5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj0ic2FzanNidWlsZCIsSi5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSPSJzYXNqc3Jlc3VsdHMiLEoudmFsaWRhdGVTZXJ2ZXJUeXBlPWc9PntpZighZyl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIHR5cGU6IGBzZXJ2ZXJUeXBlYCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoZyE9PXAuU2VydmVyVHlwZS5TYXM5JiZnIT09cC5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmchPT1wLlNlcnZlclR5cGUuU2FzanMpdGhyb3cgbmV3IEVy'@;
put 'cm9yKGBJbnZhbGlkIHNlcnZlciB0eXBlOiBTdXBwb3J0ZWQgdmFsdWVzIGZvciAgXGBzZXJ2ZXJUeXBlXGAgYXJlICR7cC5TZXJ2ZXJUeXBlLlNhc1ZpeWF9LCAke3AuU2VydmVyVHlwZS5TYXM5fSBhbmQgJHtwLlNlcnZlclR5cGUuU2FzanN9LmApO3JldHVybiBnfSxKLnZhbGlkYXRlVGFy'@;
put 'Z2V0TmFtZT1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihnLnRyaW0oKS5pbmNsdWRlcygiICIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTog'@;
put 'YG5hbWVgIGNhbm5vdCBpbmNsdWRlIHNwYWNlcy4iKTtpZighL15bYS16QS1aMC05XC1dKyQvaS50ZXN0KGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGRhc2hlcy4iKTty'@;
put 'ZXR1cm4gZ30sSi52YWxpZGF0ZVNlcnZlclVybD1nPT57aWYobnVsbD09ZyYmKGc9IiIpLCIiIT09ZyYmIV8uZGVmYXVsdC5pc0h0dHBVcmkoZykmJiFfLmRlZmF1bHQuaXNIdHRwc1VyaShnKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIFVSTDogYHNlcnZlclVybGAgc2hvdWxk'@;
put 'IGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIik7cmV0dXJuIGd9LEoudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1nPT57aWYoZyl7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXRocm93'@;
put 'IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGFuIG9iamVjdCBvZiBgSHR0cHNBZ2VudE9wdGlvbnNgIik7aWYobnVsbD09Zy5hbGxvd0luc2VjdXJlUmVxdWVzdHMpZy5hbGxvd0luc2VjdXJlUmVxdWVz'@;
put 'dHM9ITE7ZWxzZSBpZigiYm9vbGVhbiIhPXR5cGVvZiBnLmFsbG93SW5zZWN1cmVSZXF1ZXN0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9ucy5hbGxvd0luc2VjdXJlUmVxdWVzdHNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYSBib29s'@;
put 'ZWFuIik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBnLmNhUGF0aCYmKGcuY2FQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBnLmtleVBhdGgmJihnLmtleVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGcuY2VydFBhdGgmJihnLmNlcnRQYXRoPXZvaWQgMCksZ319LEoudmFsaWRh'@;
put 'dGVBcHBMb2M9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIWcuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246'@;
put 'IGBhcHBMb2NgIG11c3Qgc3RhcnQgd2l0aCBhIGAvYC4iKTtyZXR1cm4gZ30sSi52YWxpZGF0ZURvY0NvbmZpZz1nPT57aWYoZ3x8KGc9e30pLCJib29sZWFuIiE9dHlwZW9mIGcuZGlzcGxheU1hY3JvQ29yZSYmKGcuZGlzcGxheU1hY3JvQ29yZT12b2lkIDApLCJib29sZWFuIiE9dHlwZW9m'@;
put 'IGcuZW5hYmxlTGluZWFnZSYmKGcuZW5hYmxlTGluZWFnZT12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgZy5vdXREaXJlY3RvcnkmJihnLm91dERpcmVjdG9yeT12b2lkIDApLCJzdHJpbmciPT10eXBlb2YgZy5kYXRhQ29udHJvbGxlclVybCl7aWYoIiIhPT1nLmRhdGFDb250cm9sbGVyVXJs'@;
put 'JiYhXy5kZWZhdWx0LmlzSHR0cFVyaShnLmRhdGFDb250cm9sbGVyVXJsKSYmIV8uZGVmYXVsdC5pc0h0dHBzVXJpKGcuZGF0YUNvbnRyb2xsZXJVcmwpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBEYXRhIENvbnRyb2xsZXIgVXJsOiBgZGF0YUNvbnRyb2xsZXJVcmxgIHNob3VsZCBlaXRo'@;
put 'ZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpfWVsc2UgZy5kYXRhQ29udHJvbGxlclVybD12b2lkIDA7cmV0dXJuIGd9LEoudmFsaWRhdGVBdXRoQ29uZmlnPWc9PntpZighZyl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnfSxKLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogSlNPTiBj'@;
put 'YW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIWcudXNlck5hbWV8fCFnLnBhc3N3b3JkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogdXNlck5hbWUgYW5kIHBhc3N3b3JkIGNhbiBub3QgYmUgZW1wdHkiKTtyZXR1cm4gZ30sSi52YWxpZGF0'@;
put 'ZUJ1aWxkQ29uZmlnPShnLHkpPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJ1aWxkIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuYnVpbGRPdXRwdXRGaWxlTmFtZXx8KGcuYnVpbGRPdXRwdXRGaWxlTmFtZT1gJHt5fS5zYXNg'@;
put 'KSxnLmluaXRQcm9ncmFtfHwoZy5pbml0UHJvZ3JhbT0iIiksZy50ZXJtUHJvZ3JhbXx8KGcudGVybVByb2dyYW09IiIpLGcubWFjcm9WYXJzfHwoZy5tYWNyb1ZhcnM9e30pLGd9LEoudmFsaWRhdGVTZXJ2aWNlQ29uZmlnPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2Vy'@;
put 'dmljZSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnLmluaXRQcm9ncmFtfHwoZy5pbml0UHJvZ3JhbT0iIiksZy50ZXJtUHJvZ3JhbXx8KGcudGVybVByb2dyYW09IiIpLGcuc2VydmljZUZvbGRlcnN8fChnLnNlcnZpY2VGb2xkZXJzPVtdKSxn'@;
put 'Lm1hY3JvVmFyc3x8KGcubWFjcm9WYXJzPXt9KSxnfSxKLnZhbGlkYXRlVGVzdENvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRlc3QgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZy5pbml0UHJvZ3JhbXx8KGcuaW5p'@;
put 'dFByb2dyYW09IiIpLGcudGVybVByb2dyYW18fChnLnRlcm1Qcm9ncmFtPSIiKSxnLm1hY3JvVmFyc3x8KGcubWFjcm9WYXJzPXt9KSxnLnRlc3RTZXRVcHx8KGcudGVzdFNldFVwPSIiKSxnLnRlc3RUZWFyRG93bnx8KGcudGVzdFRlYXJEb3duPSIiKSxnfSxKLnZhbGlkYXRlSm9iQ29uZmln'@;
put 'PWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgam9iIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuaW5pdFByb2dyYW18fChnLmluaXRQcm9ncmFtPSIiKSxnLnRlcm1Qcm9ncmFtfHwoZy50ZXJtUHJvZ3JhbT0iIiksZy5qb2JG'@;
put 'b2xkZXJzfHwoZy5qb2JGb2xkZXJzPVtdKSxnLm1hY3JvVmFyc3x8KGcubWFjcm9WYXJzPXt9KSxnfSxKLnZhbGlkYXRlRGVwbG95Q29uZmlnPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVwbG95IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQu'@;
put 'Iik7cmV0dXJuIGcuZGVwbG95U2VydmljZVBhY2s9ISFnLmRlcGxveVNlcnZpY2VQYWNrLGcuZGVwbG95U2NyaXB0c3x8KGcuZGVwbG95U2NyaXB0cz1bXSksZ30sSi52YWxpZGF0ZVN0cmVhbUNvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6'@;
put 'IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCEwIT09Zy5zdHJlYW1XZWImJiExIT09Zy5zdHJlYW1XZWIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJgIGNhbm5vdCBiZSBhIG5vbi1ib29sZWFuIHZhbHVlLiIpO2lmKGcu'@;
put 'c3RyZWFtV2ViJiYhZy5zdHJlYW1XZWJGb2xkZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJGb2xkZXJgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBgc3RyZWFtV2ViYCBpcyB0cnVlLiIpO2lmKGcuc3RyZWFtV2Vi'@;
put 'JiYhZy53ZWJTb3VyY2VQYXRoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgd2ViU291cmNlUGF0aGAgc2hvdWxkIGNvbnRhaW4gdGhlIHBhdGggdG8geW91ciBmcm9udGVuZCBhcHBsaWNhdGlvbiBlZyBidWlsZCwgZGlzdCwgb3Igc3JjLiIpO3JldHVybiBnLnN0'@;
put 'cmVhbUxvZ28mJiJzdHJpbmciIT10eXBlb2YgZy5zdHJlYW1Mb2dvJiYoZy5zdHJlYW1Mb2dvPXZvaWQgMCksZy5hc3NldFBhdGhzfHwoZy5hc3NldFBhdGhzPVtdKSxnLnN0cmVhbVNlcnZpY2VOYW1lfHwoZy5zdHJlYW1TZXJ2aWNlTmFtZT0iY2xpY2ttZSIpLGd9LEoudmFsaWRhdGVDb250'@;
put 'ZXh0TmFtZT0oZyx5KT0+eSE9PXAuU2VydmVyVHlwZS5TYXNWaXlhfHxnP2c6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsSi52YWxpZGF0ZVNlcnZlck5hbWU9KGcseSk9PnkhPT1wLlNlcnZlclR5cGUuU2FzOXx8Zz9nOiJTQVNBcHAiLEoudmFsaWRhdGVTeW5jRm9sZGVy'@;
put 'PWc9PntpZigic3RyaW5nIj09dHlwZW9mIGcmJmcpcmV0dXJuIGd9LEoudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT0oZyx5KT0+eSE9PXAuU2VydmVyVHlwZS5TYXM5fHxnP2c6IkZvdW5kYXRpb24iLEoudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigi'@;
put 'SW52YWxpZCBzeW5jRGlyZWN0b3JpZXMgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZy5mb3JFYWNoKHk9PntpZigheS5sb2NhbHx8IXkucmVtb3RlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3J5IGNvbmZpZzogdmFsdWVz'@;
put 'IG9mIHByb3BlcnR5ICdsb2NhbCcgYW5kICdyZW1vdGUgY2FuIG5vdCBiZSBlbXB0eSBvciB1bmRlZmluZWQiKX0pLGd9LEoudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPWc9PntpZigic3RyaW5nIiE9dHlwZW9mIGcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2YgdmFsdWUgKCR7'@;
put 'dHlwZW9mIGd9KSBpcyBwcm92aWRlZCBmb3IgcHJvcGVydHkgJ3Nhc2pzQnVpbGRGb2xkZXInIGluIGNvbmZpZy4gUmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBnfHxKLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSfSxKLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPWc9PntpZigi'@;
put 'c3RyaW5nIiE9dHlwZW9mIGcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2YgdmFsdWUgKCR7dHlwZW9mIGd9KSBpcyBwcm92aWRlZCBmb3IgcHJvcGVydHkgJ3Nhc2pzUmVzdWx0c0ZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIGd8fEouREVG'@;
put 'QVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUn19LDI5Mjc6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oSCl7cmV0dXJuIEgmJkguX19lc01vZHVsZT9IOntkZWZhdWx0Okh9fTtP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5kZWNvZGVGcm9tQmFzZTY0PUouZW5jb2RlVG9CYXNlNjQ9dm9pZCAwO2NvbnN0IHA9XyhiKDU4MzUpKSxOPSJ7c2FzanNfZW5jb2RlZH0iO0ouZW5jb2RlVG9CYXNlNjQ9SD0+e2NvbnN0IFI9cC5kZWZh'@;
put 'dWx0LnJhbmRvbUJ5dGVzKDEwMCkudG9TdHJpbmcoImhleCIpLGo9RC5mcm9tKFIrSCkudG9TdHJpbmcoImJhc2U2NCIpO3JldHVybiBOK2p9LEouZGVjb2RlRnJvbUJhc2U2ND1IPT5ILnN0YXJ0c1dpdGgoTik/KEg9SC5yZXBsYWNlKC9ee3Nhc2pzX2VuY29kZWR9LywiIiksRC5mcm9tKEgs'@;
put 'ImJhc2U2NCIpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIwMCkpOkh9LDU4MTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouYnl0ZXNUb1NpemU9dm9pZCAwLEouYnl0ZXNUb1NpemU9KEQsXz0xLHA9MTA5OTUx'@;
put 'MTYyNzc3Nik9PntpZigwPT09RClyZXR1cm4iMCBCIjtEPUQ+cD9wOkQ7Y29uc3QgRj1fPDA/MDpfLEg9TWF0aC5mbG9vcihNYXRoLmxvZyhEKS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKEQvTWF0aC5wb3coMTAyNCxIKSkudG9GaXhlZChGKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIi'@;
put 'XVtIXX19LDg2NTM6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmNodW5rPXZvaWQgMCxKLmNodW5rPWZ1bmN0aW9uIGIoRCxfPTIyMCl7cmV0dXJuIEQubGVuZ3RoPD1fP1tEXTooRC5tYXRjaChuZXcgUmVn'@;
put 'RXhwKCIuezEsIitfKyJ9IiwiZyIpKXx8W10pLmZpbHRlcihwPT4hIXApfX0sNjQ1NzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZGlmZj12b2lkIDAsSi5kaWZmPWZ1bmN0aW9uIGIoRCxfKXtyZXR1cm5b'@;
put 'Li4uRC5maWx0ZXIodz0+Im9iamVjdCI9PXR5cGVvZiB3PyFKU09OLnN0cmluZ2lmeShfKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeSh3KSk6IV8uaW5jbHVkZXModykpLC4uLl8uZmlsdGVyKHc9PiJvYmplY3QiPT10eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoRCkuaW5jbHVkZXMoSlNPTi5z'@;
put 'dHJpbmdpZnkodykpOiFELmluY2x1ZGVzKHcpKV19fSwxNTI5OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZXRFeGVjdXRvclBhdGg9dm9pZCAwO2NvbnN0IGI9e1NBU1ZJWUE6Ii9TQVNKb2JFeGVjdXRp'@;
put 'b24iLFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIn07Si5nZXRFeGVjdXRvclBhdGg9Xz0+Xz8oXz1fLnRvVXBwZXJDYXNlKCksYltfXXx8IiIpOiIifSwzMzE2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KSxKLmdldFRyZWVFeGFtcGxlPUouaXNGaWxlVHJlZT12b2lkIDA7Y29uc3QgRD1iKDM5MDApO0ouaXNGaWxlVHJlZT1IPT5IJiZILm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoSC5tZW1iZXJzKSYmMD09PUgubWVtYmVycy5maWx0ZXIoUj0+IXAoUikmJiFOKFIpJiYhdyhSKSkubGVuZ3RoO2Nv'@;
put 'bnN0IHA9SD0+SCYmInN0cmluZyI9PXR5cGVvZiBILm5hbWUmJkgudHlwZT09PUQuTWVtYmVyVHlwZS5zZXJ2aWNlJiYic3RyaW5nIj09dHlwZW9mIEguY29kZSxOPUg9PkgmJiJzdHJpbmciPT10eXBlb2YgSC5uYW1lJiZILnR5cGU9PT1ELk1lbWJlclR5cGUuZmlsZSYmInN0cmluZyI9PXR5'@;
put 'cGVvZiBILmNvZGUsdz1IPT5IJiYic3RyaW5nIj09dHlwZW9mIEgubmFtZSYmSC50eXBlPT09RC5NZW1iZXJUeXBlLmZvbGRlciYmSC5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEgubWVtYmVycykmJjA9PT1ILm1lbWJlcnMuZmlsdGVyKFI9PiFwKFIpJiYhTihSKSYmIXcoUikpLmxlbmd0aDtK'@;
put 'LmdldFRyZWVFeGFtcGxlPSgpPT4oe21lbWJlcnM6W3tuYW1lOiJqb2JzIix0eXBlOkQuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6ImV4dHJhY3QiLHR5cGU6RC5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToibWFrZWRhdGExIix0eXBlOkQuTWVtYmVyVHlwZS5z'@;
put 'ZXJ2aWNlLGNvZGU6IiVwdXQgSGVsbG8gV29ybGQhOyJ9XX1dfV19KX0sNjI2NjpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oUCxMLFksQil7dm9pZCAwPT09QiYmKEI9WSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KFAsQix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTFtZXX19KX06ZnVuY3Rpb24oUCxMLFksQil7dm9pZCAwPT09QiYmKEI9WSksUFtCXT1MW1ldfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oUCxMKXtmb3IodmFy'@;
put 'IFkgaW4gUCkiZGVmYXVsdCIhPT1ZJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEwsWSkmJkQoTCxQLFkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5jaHVuaz1KLmRpZmY9Si5ieXRlc1RvU2l6ZT1KLmdldEV4ZWN1'@;
put 'dG9yUGF0aD1KLmRlY29kZUZyb21CYXNlNjQ9Si5lbmNvZGVUb0Jhc2U2ND1KLnVybE9yaWdpbj1KLmdlbmVyYXRlUGF0aEZvclNhcz1KLmdldE1hY3Jvc1BhdGg9Si5lc2NhcGVXaW5TbGFzaGVzPUouaXNMaW51eD1KLmlzV2luZG93cz1KLnVuaXFBcnJheT1KLmFzeW5jRm9yRWFjaD1KLnV1'@;
put 'aWR2ND12b2lkIDA7dmFyIHA9YigxMTMxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwidXVpZHY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC51dWlkdjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImFzeW5jRm9yRWFjaCIse2VudW1lcmFibGU6ITAsZ2V0'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIHAuYXN5bmNGb3JFYWNofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ1bmlxQXJyYXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLnVuaXFBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiaXNXaW5kb3dzIix7ZW51'@;
put 'bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc1dpbmRvd3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImlzTGludXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmlzTGludXh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImVzY2FwZVdp'@;
put 'blNsYXNoZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmVzY2FwZVdpblNsYXNoZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImdldE1hY3Jvc1BhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldE1hY3Jvc1BhdGh9fSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KEosImdlbmVyYXRlUGF0aEZvclNhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2VuZXJhdGVQYXRoRm9yU2FzfX0pLF8oYigzMzE2KSxKKTt2YXIgTj1iKDk2NTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ1cmxPcmln'@;
put 'aW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOLnVybE9yaWdpbn19KTt2YXIgdz1iKDI5MjcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJlbmNvZGVUb0Jhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuZW5jb2RlVG9CYXNlNjR9'@;
put 'fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImRlY29kZUZyb21CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmRlY29kZUZyb21CYXNlNjR9fSk7dmFyIEY9YigxNTI5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiZ2V0RXhlY3V0b3JQYXRoIix7ZW51'@;
put 'bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRi5nZXRFeGVjdXRvclBhdGh9fSk7dmFyIEg9Yig1ODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJieXRlc1RvU2l6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEguYnl0ZXNUb1NpemV9fSk7dmFyIFI9'@;
put 'Yig2NDU3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiZGlmZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZGlmZn19KTt2YXIgaj1iKDg2NTMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJjaHVuayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGouY2h1bmt9fSl9LDk2NTI6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnVybE9yaWdpbj12b2lkIDAsSi51cmxPcmlnaW49RD0+e2lmKCIiPT09RClyZXR1cm4gRDtsZXQgXzt0cnl7Xz1uZXcgVVJM'@;
put 'KEQpLm9yaWdpbn1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVVJMLiIpfXJldHVybiBffX0sMTEzMTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1iKDQxNTUpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWixYLFEpe3JldHVybiBuZXcoWHx8'@;
put 'KFg9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLGllKXtmdW5jdGlvbiBzZShUZSl7dHJ5e19lKFEubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIGdlKFRlKXt0cnl7X2UoUS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3RlKFRl'@;
put 'LnZhbHVlKTpmdW5jdGlvbiBxKHRlKXtyZXR1cm4gdGUgaW5zdGFuY2VvZiBYP3RlOm5ldyBYKGZ1bmN0aW9uKGllKXtpZSh0ZSl9KX0oVGUudmFsdWUpLnRoZW4oc2UsZ2UpfV9lKChRPVEuYXBwbHkoVyxafHxbXSkpLm5leHQoKSl9KX0sTj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8'@;
put 'ZnVuY3Rpb24oVyl7cmV0dXJuIFcmJlcuX19lc01vZHVsZT9XOntkZWZhdWx0Old9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZW5lcmF0ZVBhdGhGb3JTYXM9Si5nZXRNYWNyb3NQYXRoPUouZXNjYXBlV2luU2xhc2hlcz1KLmlzTGludXg9'@;
put 'Si5pc1dpbmRvd3M9Si51bmlxQXJyYXk9Si51dWlkdjQ9Si5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IHc9TihiKDI1MjApKTtKLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBGKFcsWil7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgWD0wO1g8Vy5sZW5n'@;
put 'dGg7WCsrKXlpZWxkIFooV1tYXSxYLFcpfSl9LEoudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csVz0+e2NvbnN0IFo9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PVc/WjozJlp8OCkudG9TdHJpbmcoMTYpfSks'@;
put 'Si51bmlxQXJyYXk9Vz0+QXJyYXkuZnJvbShuZXcgU2V0KFcpKSxKLmlzV2luZG93cz0oKT0+IndpbjMyIj09PV8ucGxhdGZvcm0sSi5pc0xpbnV4PSgpPT4ibGludXgiPT09Xy5wbGF0Zm9ybSxKLmVzY2FwZVdpblNsYXNoZXM9Vz0+KDAsSi5pc1dpbmRvd3MpKCk/Vy5yZXBsYWNlKC9cXC9n'@;
put 'LCJcXFxcIik6VyxKLmdldE1hY3Jvc1BhdGg9KCk9PncuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxKLmdlbmVyYXRlUGF0aEZvclNhcz1XPT5XLnJlcGxhY2UoL1xcL2csIi8iKX0sOTgwOTooY2UsSixiKT0+e3ZhciBEPUo7RC5iaWdudW09Yig0NTkwKSxELmRlZmluZT1iKDI1'@;
put 'MDApLmRlZmluZSxELmJhc2U9YigxOTc5KSxELmNvbnN0YW50cz1iKDY4MjYpLEQuZGVjb2RlcnM9Yig4MzA3KSxELmVuY29kZXJzPWIoNjU3OSl9LDI1MDA6KGNlLEosYik9Pnt2YXIgRD1iKDk4MDkpLF89Yig1NzE3KTtmdW5jdGlvbiBOKHcsRil7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PUYs'@;
put 'dGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fUouZGVmaW5lPWZ1bmN0aW9uKEYsSCl7cmV0dXJuIG5ldyBOKEYsSCl9LE4ucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihGKXt2YXIgSDt0cnl7SD1iKDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3Ro'@;
put 'aXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7SD1mdW5jdGlvbihqKXt0aGlzLl9pbml0TmFtZWQoail9fXJldHVybiBfKEgsRiksSC5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihqKXtGLmNhbGwodGhpcyxqKX0sbmV3IEgo'@;
put 'dGhpcyl9LE4ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KEY9Rnx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tGXT10aGlzLl9jcmVhdGVOYW1lZChELmRlY29kZXJzW0ZdKSksdGhpcy5kZWNvZGVyc1tGXX0sTi5w'@;
put 'cm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEYsSCxSKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihIKS5kZWNvZGUoRixSKX0sTi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoRj1GfHwiZGVyIil8fCh0aGlzLmVu'@;
put 'Y29kZXJzW0ZdPXRoaXMuX2NyZWF0ZU5hbWVkKEQuZW5jb2RlcnNbRl0pKSx0aGlzLmVuY29kZXJzW0ZdfSxOLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oRixILFIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEgpLmVuY29kZShGLFIpfX0sNjYyNTooY2UsSixiKT0+e3ZhciBEPWIoNTcx'@;
put 'NyksXz1iKDE5NzkpLlJlcG9ydGVyLHA9Yig4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gTihGLEgpe18uY2FsbCh0aGlzLEgpLHAuaXNCdWZmZXIoRik/KHRoaXMuYmFzZT1GLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9Ri5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1m'@;
put 'dW5jdGlvbiB3KEYsSCl7aWYoQXJyYXkuaXNBcnJheShGKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9Ri5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3fHwoUj1uZXcgdyhSLEgpKSx0aGlzLmxlbmd0aCs9Ui5sZW5ndGgsUn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09'@;
put 'dHlwZW9mIEYpe2lmKCEoMDw9RiYmRjw9MjU1KSlyZXR1cm4gSC5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9Rix0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBGKXRoaXMudmFsdWU9Rix0aGlzLmxlbmd0aD1wLmJ5dGVMZW5n'@;
put 'dGgoRik7ZWxzZXtpZighcC5pc0J1ZmZlcihGKSlyZXR1cm4gSC5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgRik7dGhpcy52YWx1ZT1GLHRoaXMubGVuZ3RoPUYubGVuZ3RofX1EKE4sXyksSi5DPU4sTi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6'@;
put 'dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sTi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihIKXt2YXIgUj1uZXcgTih0aGlzLmJhc2UpO3JldHVybiBSLm9mZnNldD1ILm9mZnNldCxSLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1I'@;
put 'Lm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxILnJlcG9ydGVyKSxSfSxOLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LE4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihIKXtyZXR1cm4gdGhpcy5v'@;
put 'ZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEh8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sTi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihILFIpe2lmKCEodGhpcy5vZmZzZXQrSDw9dGhpcy5sZW5ndGgpKXJl'@;
put 'dHVybiB0aGlzLmVycm9yKFJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgaj1uZXcgTih0aGlzLmJhc2UpO3JldHVybiBqLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsai5vZmZzZXQ9dGhpcy5vZmZzZXQsai5sZW5ndGg9dGhpcy5vZmZzZXQrSCx0aGlzLm9mZnNl'@;
put 'dCs9SCxqfSxOLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShIP0gub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sSi5SPXcsdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihILFIpe3JldHVybiBIfHwoSD1uZXcgcCh0aGlzLmxlbmd0aCkp'@;
put 'LFJ8fChSPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKGope2ouam9pbihILFIpLFIrPWoubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9IW1JdPXRoaXMudmFsdWU6InN0cmluZyI9'@;
put 'PXR5cGVvZiB0aGlzLnZhbHVlP0gud3JpdGUodGhpcy52YWx1ZSxSKTpwLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoSCxSKSxSKz10aGlzLmxlbmd0aCkpLEh9fSwxOTc5OihjZSxKLGIpPT57dmFyIEQ9SjtELlJlcG9ydGVyPWIoODQ2NSkuYixELkRlY29kZXJCdWZm'@;
put 'ZXI9Yig2NjI1KS5DLEQuRW5jb2RlckJ1ZmZlcj1iKDY2MjUpLlIsRC5Ob2RlPWIoMTk0OSl9LDE5NDk6KGNlLEosYik9Pnt2YXIgRD1iKDE5NzkpLlJlcG9ydGVyLF89YigxOTc5KS5FbmNvZGVyQnVmZmVyLHA9YigxOTc5KS5EZWNvZGVyQnVmZmVyLE49Yig5NzQ2KSx3PVsic2VxIiwic2Vx'@;
put 'b2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9j'@;
put 'dHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sRj1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIFIo'@;
put 'UCxMKXt2YXIgWT17fTt0aGlzLl9iYXNlU3RhdGU9WSxZLmVuYz1QLFkucGFyZW50PUx8fG51bGwsWS5jaGlsZHJlbj1udWxsLFkudGFnPW51bGwsWS5hcmdzPW51bGwsWS5yZXZlcnNlQXJncz1udWxsLFkuY2hvaWNlPW51bGwsWS5vcHRpb25hbD0hMSxZLmFueT0hMSxZLm9iaj0hMSxZLnVz'@;
put 'ZT1udWxsLFkudXNlRGVjb2Rlcj1udWxsLFkua2V5PW51bGwsWS5kZWZhdWx0PW51bGwsWS5leHBsaWNpdD1udWxsLFkuaW1wbGljaXQ9bnVsbCxZLmNvbnRhaW5zPW51bGwsWS5wYXJlbnR8fChZLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9Y2UuZXhwb3J0cz1SO3ZhciBqPVsiZW5jIiwi'@;
put 'cGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ui5wcm90b3R5cGUuY2xvbmU9'@;
put 'ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGUsWT17fTtqLmZvckVhY2goZnVuY3Rpb24oVyl7WVtXXT1MW1ddfSk7dmFyIEI9bmV3IHRoaXMuY29uc3RydWN0b3IoWS5wYXJlbnQpO3JldHVybiBCLl9iYXNlU3RhdGU9WSxCfSxSLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3Zh'@;
put 'ciBMPXRoaXMuX2Jhc2VTdGF0ZTtGLmZvckVhY2goZnVuY3Rpb24oWSl7dGhpc1tZXT1mdW5jdGlvbigpe3ZhciBXPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBMLmNoaWxkcmVuLnB1c2goVyksV1tZXS5hcHBseShXLGFyZ3VtZW50cyl9fSx0aGlzKX0sUi5wcm90b3R5cGUu'@;
put 'X2luaXQ9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO04obnVsbD09PVkucGFyZW50KSxMLmNhbGwodGhpcyksWS5jaGlsZHJlbj1ZLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihCKXtyZXR1cm4gQi5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLE4uZXF1YWwoWS5j'@;
put 'aGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFIucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKEwpe3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZSxCPUwuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1'@;
put 'Y3Rvcn0sdGhpcyk7TD1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4hKFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PUIubGVuZ3RoJiYoTihudWxsPT09WS5jaGlsZHJlbiksWS5jaGlsZHJlbj1CLEIuZm9yRWFjaChmdW5jdGlvbihXKXtXLl9iYXNlU3RhdGUu'@;
put 'cGFyZW50PXRoaXN9LHRoaXMpKSwwIT09TC5sZW5ndGgmJihOKG51bGw9PT1ZLmFyZ3MpLFkuYXJncz1MLFkucmV2ZXJzZUFyZ3M9TC5tYXAoZnVuY3Rpb24oVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXfHxXLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBXO3ZhciBaPXt9O3JldHVybiBP'@;
put 'YmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKFgpe1g9PSgwfFgpJiYoWHw9MCksWltXW1hdXT1YfSksWn0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2Rl'@;
put 'SW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oUCl7Ui5wcm90b3R5'@;
put 'cGVbUF09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoUCsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksdy5mb3JFYWNoKGZ1bmN0aW9uKFApe1IucHJvdG90eXBlW1BdPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlLEI9'@;
put 'QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gTihudWxsPT09WS50YWcpLFkudGFnPVAsdGhpcy5fdXNlQXJncyhCKSx0aGlzfX0pLFIucHJvdG90eXBlLnVzZT1mdW5jdGlvbihMKXtOKEwpO3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gTihudWxsPT09'@;
put 'WS51c2UpLFkudXNlPUwsdGhpc30sUi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LFIucHJvdG90eXBlLmRlZj1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09PVkuZGVm'@;
put 'YXVsdCksWS5kZWZhdWx0PUwsWS5vcHRpb25hbD0hMCx0aGlzfSxSLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09PVkuZXhwbGljaXQmJm51bGw9PT1ZLmltcGxpY2l0KSxZLmV4cGxpY2l0PUwsdGhpc30sUi5wcm90'@;
put 'b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBOKG51bGw9PT1ZLmV4cGxpY2l0JiZudWxsPT09WS5pbXBsaWNpdCksWS5pbXBsaWNpdD1MLHRoaXN9LFIucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxZ'@;
put 'PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEwub2JqPSEwLDAhPT1ZLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhZKSx0aGlzfSxSLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBOKG51bGw9PT1ZLmtleSks'@;
put 'WS5rZXk9TCx0aGlzfSxSLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxSLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBOKG51bGw9PT1ZLmNob2ljZSksWS5jaG9pY2U9'@;
put 'TCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKEwpLm1hcChmdW5jdGlvbihCKXtyZXR1cm4gTFtCXX0pKSx0aGlzfSxSLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09PVkudXNlKSxZLmNvbnRhaW5zPUwsdGhpc30s'@;
put 'Ui5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihMLFkpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Qi5wYXJlbnQpcmV0dXJuIEwud3JhcFJlc3VsdChCLmNoaWxkcmVuWzBdLl9kZWNvZGUoTCxZKSk7dmFyIHRlLFc9Qi5kZWZhdWx0LFo9ITAsWD1udWxsO2lmKG51bGwhPT1C'@;
put 'LmtleSYmKFg9TC5lbnRlcktleShCLmtleSkpLEIub3B0aW9uYWwpe3ZhciBRPW51bGw7aWYobnVsbCE9PUIuZXhwbGljaXQ/UT1CLmV4cGxpY2l0Om51bGwhPT1CLmltcGxpY2l0P1E9Qi5pbXBsaWNpdDpudWxsIT09Qi50YWcmJihRPUIudGFnKSxudWxsIT09UXx8Qi5hbnkpe2lmKFo9dGhp'@;
put 'cy5fcGVla1RhZyhMLFEsQi5hbnkpLEwuaXNFcnJvcihaKSlyZXR1cm4gWn1lbHNle3ZhciBxPUwuc2F2ZSgpO3RyeXtudWxsPT09Qi5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhCLnRhZyxMLFkpOnRoaXMuX2RlY29kZUNob2ljZShMLFkpLFo9ITB9Y2F0Y2h7Wj0hMX1MLnJlc3RvcmUo'@;
put 'cSl9fWlmKEIub2JqJiZaJiYodGU9TC5lbnRlck9iamVjdCgpKSxaKXtpZihudWxsIT09Qi5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRhZyhMLEIuZXhwbGljaXQpO2lmKEwuaXNFcnJvcihpZSkpcmV0dXJuIGllO0w9aWV9dmFyIHNlPUwub2Zmc2V0O2lmKG51bGw9PT1CLnVzZSYm'@;
put 'bnVsbD09PUIuY2hvaWNlKXtCLmFueSYmKHE9TC5zYXZlKCkpO3ZhciBnZT10aGlzLl9kZWNvZGVUYWcoTCxudWxsIT09Qi5pbXBsaWNpdD9CLmltcGxpY2l0OkIudGFnLEIuYW55KTtpZihMLmlzRXJyb3IoZ2UpKXJldHVybiBnZTtCLmFueT9XPUwucmF3KHEpOkw9Z2V9aWYoWSYmWS50cmFj'@;
put 'ayYmbnVsbCE9PUIudGFnJiZZLnRyYWNrKEwucGF0aCgpLHNlLEwubGVuZ3RoLCJ0YWdnZWQiKSxZJiZZLnRyYWNrJiZudWxsIT09Qi50YWcmJlkudHJhY2soTC5wYXRoKCksTC5vZmZzZXQsTC5sZW5ndGgsImNvbnRlbnQiKSxCLmFueXx8KFc9bnVsbD09PUIuY2hvaWNlP3RoaXMuX2RlY29k'@;
put 'ZUdlbmVyaWMoQi50YWcsTCxZKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxZKSksTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFCLmFueSYmbnVsbD09PUIuY2hvaWNlJiZudWxsIT09Qi5jaGlsZHJlbiYmQi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKFNlKXtTZS5fZGVjb2RlKEwsWSl9KSxC'@;
put 'LmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1CLnRhZ3x8ImJpdHN0ciI9PT1CLnRhZykpe3ZhciBfZT1uZXcgcChXKTtXPXRoaXMuX2dldFVzZShCLmNvbnRhaW5zLEwuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKF9lLFkpfX1yZXR1cm4gQi5vYmomJlomJihXPUwubGVhdmVPYmplY3QodGUp'@;
put 'KSxudWxsPT09Qi5rZXl8fG51bGw9PT1XJiYhMCE9PVo/bnVsbCE9PVgmJkwuZXhpdEtleShYKTpMLmxlYXZlS2V5KFgsQi5rZXksVyksV30sUi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oTCxZLEIpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PUx8fCJz'@;
put 'ZXQiPT09TD9udWxsOiJzZXFvZiI9PT1MfHwic2V0b2YiPT09TD90aGlzLl9kZWNvZGVMaXN0KFksTCxXLmFyZ3NbMF0sQik6L3N0ciQvLnRlc3QoTCk/dGhpcy5fZGVjb2RlU3RyKFksTCxCKToib2JqaWQiPT09TCYmVy5hcmdzP3RoaXMuX2RlY29kZU9iamlkKFksVy5hcmdzWzBdLFcuYXJn'@;
put 'c1sxXSxCKToib2JqaWQiPT09TD90aGlzLl9kZWNvZGVPYmppZChZLG51bGwsbnVsbCxCKToiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MP3RoaXMuX2RlY29kZVRpbWUoWSxMLEIpOiJudWxsXyI9PT1MP3RoaXMuX2RlY29kZU51bGwoWSxCKToiYm9vbCI9PT1MP3RoaXMuX2RlY29kZUJv'@;
put 'b2woWSxCKToib2JqRGVzYyI9PT1MP3RoaXMuX2RlY29kZVN0cihZLEwsQik6ImludCI9PT1MfHwiZW51bSI9PT1MP3RoaXMuX2RlY29kZUludChZLFcuYXJncyYmVy5hcmdzWzBdLEIpOm51bGwhPT1XLnVzZT90aGlzLl9nZXRVc2UoVy51c2UsWS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNv'@;
put 'ZGUoWSxCKTpZLmVycm9yKCJ1bmtub3duIHRhZzogIitMKX0sUi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihMLFkpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQi51c2VEZWNvZGVyPXRoaXMuX3VzZShMLFkpLE4obnVsbD09PUIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVu'@;
put 'dCksQi51c2VEZWNvZGVyPUIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLEIuaW1wbGljaXQhPT1CLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKEIudXNlRGVjb2Rlcj1CLnVzZURlY29kZXIuY2xvbmUoKSxCLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNp'@;
put 'dD1CLmltcGxpY2l0KSxCLnVzZURlY29kZXJ9LFIucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxZKXt2YXIgQj10aGlzLl9iYXNlU3RhdGUsVz1udWxsLFo9ITE7cmV0dXJuIE9iamVjdC5rZXlzKEIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKFgpe3ZhciBRPUwuc2F2ZSgpLHE9'@;
put 'Qi5jaG9pY2VbWF07dHJ5e3ZhciB0ZT1xLl9kZWNvZGUoTCxZKTtpZihMLmlzRXJyb3IodGUpKXJldHVybiExO1c9e3R5cGU6WCx2YWx1ZTp0ZX0sWj0hMH1jYXRjaHtyZXR1cm4gTC5yZXN0b3JlKFEpLCExfXJldHVybiEwfSx0aGlzKSxaP1c6TC5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVk'@;
put 'Iil9LFIucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgXyhMLHRoaXMucmVwb3J0ZXIpfSxSLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEwsWSxCKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdHx8Vy5kZWZh'@;
put 'dWx0IT09TCl7dmFyIFo9dGhpcy5fZW5jb2RlVmFsdWUoTCxZLEIpO2lmKHZvaWQgMCE9PVomJiF0aGlzLl9za2lwRGVmYXVsdChaLFksQikpcmV0dXJuIFp9fSxSLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oTCxZLEIpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09'@;
put 'Vy5wYXJlbnQpcmV0dXJuIFcuY2hpbGRyZW5bMF0uX2VuY29kZShMLFl8fG5ldyBEKTt2YXIgcT1udWxsO2lmKHRoaXMucmVwb3J0ZXI9WSxXLm9wdGlvbmFsJiZ2b2lkIDA9PT1MKXtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybjtMPVcuZGVmYXVsdH12YXIgWj1udWxsLFg9ITE7aWYoVy5h'@;
put 'bnkpcT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2Vsc2UgaWYoVy5jaG9pY2UpcT10aGlzLl9lbmNvZGVDaG9pY2UoTCxZKTtlbHNlIGlmKFcuY29udGFpbnMpWj10aGlzLl9nZXRVc2UoVy5jb250YWlucyxCKS5fZW5jb2RlKEwsWSksWD0hMDtlbHNlIGlmKFcuY2hpbGRyZW4pWj1X'@;
put 'LmNoaWxkcmVuLm1hcChmdW5jdGlvbihzZSl7aWYoIm51bGxfIj09PXNlLl9iYXNlU3RhdGUudGFnKXJldHVybiBzZS5fZW5jb2RlKG51bGwsWSxMKTtpZihudWxsPT09c2UuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIFkuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7dmFyIGdlPVku'@;
put 'ZW50ZXJLZXkoc2UuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgTClyZXR1cm4gWS5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7dmFyIF9lPXNlLl9lbmNvZGUoTFtzZS5fYmFzZVN0YXRlLmtleV0sWSxMKTtyZXR1cm4gWS5sZWF2'@;
put 'ZUtleShnZSksX2V9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihzZSl7cmV0dXJuIHNlfSksWj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFopO2Vsc2UgaWYoInNlcW9mIj09PVcudGFnfHwic2V0b2YiPT09Vy50YWcpe2lmKCFXLmFyZ3N8fDEhPT1XLmFyZ3MubGVuZ3RoKXJldHVybiBZLmVy'@;
put 'cm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrVy50YWcpO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiBZLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7dmFyIFE9dGhpcy5jbG9uZSgpO1EuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFo9dGhpcy5fY3Jl'@;
put 'YXRlRW5jb2RlckJ1ZmZlcihMLm1hcChmdW5jdGlvbihzZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxMKS5fZW5jb2RlKHNlLFkpfSxRKSl9ZWxzZSBudWxsIT09Vy51c2U/cT10aGlzLl9nZXRVc2UoVy51c2UsQikuX2VuY29kZShMLFkpOihaPXRoaXMu'@;
put 'X2VuY29kZVByaW1pdGl2ZShXLnRhZyxMKSxYPSEwKTtpZighVy5hbnkmJm51bGw9PT1XLmNob2ljZSl7dmFyIHRlPW51bGwhPT1XLmltcGxpY2l0P1cuaW1wbGljaXQ6Vy50YWcsaWU9bnVsbD09PVcuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT10ZT9udWxsPT09Vy51'@;
put 'c2UmJlkuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1XLnVzZSYmKHE9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHRlLFgsaWUsWikpfXJldHVybiBudWxsIT09Vy5leHBsaWNpdCYmKHE9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFcuZXhwbGljaXQs'@;
put 'ITEsImNvbnRleHQiLHEpKSxxfSxSLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsWSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlLFc9Qi5jaG9pY2VbTC50eXBlXTtyZXR1cm4gV3x8TighMSxMLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5'@;
put 'cyhCLmNob2ljZSkpKSxXLl9lbmNvZGUoTC52YWx1ZSxZKX0sUi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihMLFkpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChMKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKFksTCk7aWYoIm9iamlkIj09PUwmJkIu'@;
put 'YXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWSxCLnJldmVyc2VBcmdzWzBdLEIuYXJnc1sxXSk7aWYoIm9iamlkIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKFksbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVU'@;
put 'aW1lKFksTCk7aWYoIm51bGxfIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PUx8fCJlbnVtIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUludChZLEIuYXJncyYmQi5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChZ'@;
put 'KTtpZigib2JqRGVzYyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoWSxMKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitMKX0sUi5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoTCl9LFIucHJvdG90eXBlLl9pc1By'@;
put 'aW50c3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoTCl9fSw4NDY1OihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KTtmdW5jdGlvbiBfKE4pe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpOfHx7'@;
put 'fSxlcnJvcnM6W119fWZ1bmN0aW9uIHAoTix3KXt0aGlzLnBhdGg9Tix0aGlzLnJldGhyb3codyl9Si5iPV8sXy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIHB9LF8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRl'@;
put 'clN0YXRlO3JldHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgubGVuZ3RofX0sXy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgRj10aGlzLl9yZXBvcnRlclN0YXRlO0Yub2JqPXcub2JqLEYucGF0aD1GLnBhdGguc2xpY2UoMCx3LnBhdGhMZW4pfSxfLnByb3RvdHlwZS5l'@;
put 'bnRlcktleT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godyl9LF8ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtGLnBhdGg9Ri5wYXRoLnNsaWNlKDAsdy0xKX0sXy5wcm90b3R5cGUubGVhdmVL'@;
put 'ZXk9ZnVuY3Rpb24odyxGLEgpe3ZhciBSPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHcpLG51bGwhPT1SLm9iaiYmKFIub2JqW0ZdPUgpfSxfLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LF8ucHJv'@;
put 'dG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxGPXcub2JqO3JldHVybiB3Lm9iaj17fSxGfSxfLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih3KXt2YXIgRj10aGlzLl9yZXBvcnRlclN0YXRlLEg9Ri5vYmo7cmV0dXJuIEYub2Jq'@;
put 'PXcsSH0sXy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFyIEYsSD10aGlzLl9yZXBvcnRlclN0YXRlLFI9dyBpbnN0YW5jZW9mIHA7aWYoRj1SP3c6bmV3IHAoSC5wYXRoLm1hcChmdW5jdGlvbihqKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoaikrIl0ifSkuam9pbigiIiksdy5t'@;
put 'ZXNzYWdlfHx3LHcuc3RhY2spLCFILm9wdGlvbnMucGFydGlhbCl0aHJvdyBGO3JldHVybiBSfHxILmVycm9ycy5wdXNoKEYpLEZ9LF8ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odyl7dmFyIEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gRi5vcHRpb25zLnBhcnRpYWw/e3Jl'@;
put 'c3VsdDp0aGlzLmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpGLmVycm9yc306d30sRChwLEVycm9yKSxwLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13KyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNl'@;
put 'JiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHApLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChGKXt0aGlzLnN0YWNrPUYuc3RhY2t9cmV0dXJuIHRoaXN9fSwxNjA6KGNlLEosYik9Pnt2YXIgRD1iKDY4MjYpO0oudGFnQ2xhc3M9ezA6'@;
put 'InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxKLnRhZ0NsYXNzQnlOYW1lPUQuX3JldmVyc2UoSi50YWdDbGFzcyksSi50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlk'@;
put 'Iiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVz'@;
put 'dHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LEoudGFnQnlOYW1lPUQuX3JldmVyc2UoSi50YWcpfSw2ODI2OihjZSxKLGIpPT57dmFyIEQ9SjtE'@;
put 'Ll9yZXZlcnNlPWZ1bmN0aW9uKHApe3ZhciBOPXt9O3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksTltwW3ddXT13fSksTn0sRC5kZXI9YigxNjApfSwxNjcxOihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoOTgwOSkscD1fLmJh'@;
put 'c2UsTj1fLmJpZ251bSx3PV8uY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBGKFApe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1QLm5hbWUsdGhpcy5lbnRpdHk9UCx0aGlzLnRyZWU9bmV3IEgsdGhpcy50cmVlLl9pbml0KFAuYm9keSl9ZnVuY3Rpb24gSChQKXtwLk5vZGUuY2FsbCh0aGlzLCJk'@;
put 'ZXIiLFApfWZ1bmN0aW9uIFIoUCxMKXt2YXIgWT1QLnJlYWRVSW50OChMKTtpZihQLmlzRXJyb3IoWSkpcmV0dXJuIFk7dmFyIEI9dy50YWdDbGFzc1tZPj42XSxXPSEoMzImWSk7aWYoMzEmflkpWSY9MzE7ZWxzZXt2YXIgWj1ZO2ZvcihZPTA7ISgxMjgmflopOyl7aWYoWj1QLnJlYWRVSW50'@;
put 'OChMKSxQLmlzRXJyb3IoWikpcmV0dXJuIFo7WTw8PTcsWXw9MTI3Jlp9fXJldHVybntjbHM6QixwcmltaXRpdmU6Vyx0YWc6WSx0YWdTdHI6dy50YWdbWV19fWZ1bmN0aW9uIGooUCxMLFkpe3ZhciBCPVAucmVhZFVJbnQ4KFkpO2lmKFAuaXNFcnJvcihCKSlyZXR1cm4gQjtpZighTCYmMTI4'@;
put 'PT09QilyZXR1cm4gbnVsbDtpZighKDEyOCZCKSlyZXR1cm4gQjt2YXIgVz0xMjcmQjtpZihXPjQpcmV0dXJuIFAuZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtCPTA7Zm9yKHZhciBaPTA7WjxXO1orKyl7Qjw8PTg7dmFyIFg9UC5yZWFkVUludDgoWSk7aWYoUC5pc0Vycm9y'@;
put 'KFgpKXJldHVybiBYO0J8PVh9cmV0dXJuIEJ9Y2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihMLFkpe3JldHVybiBMIGluc3RhbmNlb2YgcC5EZWNvZGVyQnVmZmVyfHwoTD1uZXcgcC5EZWNvZGVyQnVmZmVyKEwsWSkpLHRoaXMudHJlZS5fZGVjb2RlKEwsWSl9LEQo'@;
put 'SCxwLk5vZGUpLEgucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEwsWSxCKXtpZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxaPVIoTCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytZKyciJyk7cmV0dXJuIEwuaXNFcnJvcihaKT9aOihMLnJlc3RvcmUoVyksWi50YWc9'@;
put 'PT1ZfHxaLnRhZ1N0cj09PVl8fFoudGFnU3RyKyJvZiI9PT1ZfHxCKX0sSC5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLFksQil7dmFyIFc9UihMLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytZKyciJyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO3ZhciBaPWooTCxXLnBy'@;
put 'aW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrWSsnIicpO2lmKEwuaXNFcnJvcihaKSlyZXR1cm4gWjtpZighQiYmVy50YWchPT1ZJiZXLnRhZ1N0ciE9PVkmJlcudGFnU3RyKyJvZiIhPT1ZKXJldHVybiBMLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytZKyciJyk7'@;
put 'aWYoVy5wcmltaXRpdmV8fG51bGwhPT1aKXJldHVybiBMLnNraXAoWiwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK1krJyInKTt2YXIgWD1MLnNhdmUoKSxRPXRoaXMuX3NraXBVbnRpbEVuZChMLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRh'@;
put 'ZysnIicpO3JldHVybiBMLmlzRXJyb3IoUSk/UTooWj1MLm9mZnNldC1YLm9mZnNldCxMLnJlc3RvcmUoWCksTC5za2lwKFosJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytZKyciJykpfSxILnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEwsWSl7Zm9yKDs7KXt2YXIgQj1S'@;
put 'KEwsWSk7aWYoTC5pc0Vycm9yKEIpKXJldHVybiBCO3ZhciBaLFc9aihMLEIucHJpbWl0aXZlLFkpO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihaPUIucHJpbWl0aXZlfHxudWxsIT09Vz9MLnNraXAoVyk6dGhpcy5fc2tpcFVudGlsRW5kKEwsWSksTC5pc0Vycm9yKFopKXJldHVybiBa'@;
put 'O2lmKCJlbmQiPT09Qi50YWdTdHIpYnJlYWt9fSxILnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihMLFksQixXKXtmb3IodmFyIFo9W107IUwuaXNFbXB0eSgpOyl7dmFyIFg9dGhpcy5fcGVla1RhZyhMLCJlbmQiKTtpZihMLmlzRXJyb3IoWCkpcmV0dXJuIFg7dmFyIFE9Qi5kZWNv'@;
put 'ZGUoTCwiZGVyIixXKTtpZihMLmlzRXJyb3IoUSkmJlgpYnJlYWs7Wi5wdXNoKFEpfXJldHVybiBafSxILnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsWSl7aWYoImJpdHN0ciI9PT1ZKXt2YXIgQj1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoQik/Qjp7dW51c2VkOkIs'@;
put 'ZGF0YTpMLnJhdygpfX1pZigiYm1wc3RyIj09PVkpe3ZhciBXPUwucmF3KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFo9IiIsWD0wO1g8Vy5sZW5ndGgvMjtYKyspWis9'@;
put 'U3RyaW5nLmZyb21DaGFyQ29kZShXLnJlYWRVSW50MTZCRSgyKlgpKTtyZXR1cm4gWn1pZigibnVtc3RyIj09PVkpe3ZhciBRPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKFEpP1E6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0'@;
put 'ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1ZKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PVkpcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PVkpe3ZhciBxPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIo'@;
put 'cSk/cTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KFkpP0wucmF3KCkudG9TdHJpbmcoKTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitZKyIgdW5zdXBwb3J0ZWQi'@;
put 'KX0sSC5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEwsWSxCKXtmb3IodmFyIFcsWj1bXSxYPTA7IUwuaXNFbXB0eSgpOyl7dmFyIFE9TC5yZWFkVUludDgoKTtYPDw9NyxYfD0xMjcmUSwxMjgmUXx8KFoucHVzaChYKSxYPTApfWlmKDEyOCZRJiZaLnB1c2goWCksVz1CP1o6W1pb'@;
put 'MF0vNDB8MCxaWzBdJTQwXS5jb25jYXQoWi5zbGljZSgxKSksWSl7dmFyIGllPVlbVy5qb2luKCIgIildO3ZvaWQgMD09PWllJiYoaWU9WVtXLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWllJiYoVz1pZSl9cmV0dXJuIFd9LEgucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKEwsWSl7dmFy'@;
put 'IEI9TC5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PVkpdmFyIFc9MHxCLnNsaWNlKDAsNCksWj0wfEIuc2xpY2UoNCw2KSxYPTB8Qi5zbGljZSg2LDgpLFE9MHxCLnNsaWNlKDgsMTApLHE9MHxCLnNsaWNlKDEwLDEyKSx0ZT0wfEIuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3Rp'@;
put 'bWUiIT09WSlyZXR1cm4gTC5lcnJvcigiRGVjb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO1c9MHxCLnNsaWNlKDAsMiksWj0wfEIuc2xpY2UoMiw0KSxYPTB8Qi5zbGljZSg0LDYpLFE9MHxCLnNsaWNlKDYsOCkscT0wfEIuc2xpY2UoOCwxMCksdGU9MHxCLnNsaWNl'@;
put 'KDEwLDEyKSxXPVc8NzA/MmUzK1c6MTkwMCtXfXJldHVybiBEYXRlLlVUQyhXLFotMSxYLFEscSx0ZSwwKX0sSC5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oTCl7cmV0dXJuIG51bGx9LEgucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKEwpe3ZhciBZPUwucmVhZFVJbnQ4'@;
put 'KCk7cmV0dXJuIEwuaXNFcnJvcihZKT9ZOjAhPT1ZfSxILnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKEwsWSl7dmFyIEI9TC5yYXcoKSxXPW5ldyBOKEIpO3JldHVybiBZJiYoVz1ZW1cudG9TdHJpbmcoMTApXXx8VyksV30sSC5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihMLFkpe3Jl'@;
put 'dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKFkpKSxMLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sODMwNzooY2UsSixiKT0+e3ZhciBEPUo7RC5kZXI9YigxNjcxKSxELnBlbT1iKDk2MzEpfSw5NjMxOihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoODc2NCkuQnVmZmVyLHA9'@;
put 'YigxNjcxKTtmdW5jdGlvbiBOKHcpe3AuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUQoTixwKSxjZS5leHBvcnRzPU4sTi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEYsSCl7Zm9yKHZhciBSPUYudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxqPUgubGFiZWwudG9VcHBlckNh'@;
put 'c2UoKSxQPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxMPS0xLFk9LTEsQj0wO0I8Ui5sZW5ndGg7QisrKXt2YXIgVz1SW0JdLm1hdGNoKFApO2lmKG51bGwhPT1XJiZXWzJdPT09ail7aWYoLTEhPT1MKXtpZigiRU5EIiE9PVdbMV0pYnJlYWs7WT1CO2JyZWFrfWlmKCJCRUdJ'@;
put 'TiIhPT1XWzFdKWJyZWFrO0w9Qn19aWYoLTE9PT1MfHwtMT09PVkpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK2opO3ZhciBaPVIuc2xpY2UoTCsxLFkpLmpvaW4oIiIpO1oucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgWD1uZXcgXyha'@;
put 'LCJiYXNlNjQiKTtyZXR1cm4gcC5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxYLEgpfX0sNjk4NDooY2UsSixiKT0+e3ZhciBEPWIoNTcxNyksXz1iKDg3NjQpLkJ1ZmZlcixwPWIoOTgwOSksTj1wLmJhc2Usdz1wLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gRihQKXt0aGlzLmVuYz0iZGVy'@;
put 'Iix0aGlzLm5hbWU9UC5uYW1lLHRoaXMuZW50aXR5PVAsdGhpcy50cmVlPW5ldyBILHRoaXMudHJlZS5faW5pdChQLmJvZHkpfWZ1bmN0aW9uIEgoUCl7Ti5Ob2RlLmNhbGwodGhpcywiZGVyIixQKX1mdW5jdGlvbiBSKFApe3JldHVybiBQPDEwPyIwIitQOlB9Y2UuZXhwb3J0cz1GLEYucHJv'@;
put 'dG90eXBlLmVuY29kZT1mdW5jdGlvbihMLFkpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLFkpLmpvaW4oKX0sRChILE4uTm9kZSksSC5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihMLFksQixXKXt2YXIgcSxaPWZ1bmN0aW9uIGooUCxMLFksQil7dmFyIFc7aWYoInNl'@;
put 'cW9mIj09PVA/UD0ic2VxIjoic2V0b2YiPT09UCYmKFA9InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KFApKVc9dy50YWdCeU5hbWVbUF07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIFB8fCgwfFApIT09UClyZXR1cm4gQi5lcnJvcigiVW5rbm93biB0YWc6ICIrUCk7Vz1QfXJl'@;
put 'dHVybiBXPj0zMT9CLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW1l8fCJ1bml2ZXJzYWwiXTw8Nil9KEwsWSxCLHRoaXMucmVwb3J0ZXIpO2lmKFcubGVuZ3RoPDEyOClyZXR1cm4ocT1uZXcgXygy'@;
put 'KSlbMF09WixxWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW3EsV10pO2Zvcih2YXIgWD0xLFE9Vy5sZW5ndGg7UT49MjU2O1E+Pj04KVgrKzsocT1uZXcgXygyK1gpKVswXT1aLHFbMV09MTI4fFgsUT0xK1g7Zm9yKHZhciB0ZT1XLmxlbmd0aDt0ZT4wO1EtLSx0ZT4+'@;
put 'PTgpcVtRXT0yNTUmdGU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW3EsV10pfSxILnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsWSl7aWYoImJpdHN0ciI9PT1ZKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lm'@;
put 'KCJibXBzdHIiPT09WSl7Zm9yKHZhciBCPW5ldyBfKDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylCLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQil9cmV0dXJuIm51bXN0ciI9PT1ZP3RoaXMuX2lzTnVt'@;
put 'c3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09WT90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMuX2Ny'@;
put 'ZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmln'@;
put 'dGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChZKXx8Im9iakRlc2MiPT09WT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJy'@;
put 'b3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1krIiB1bnN1cHBvcnRlZCIpfSxILnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxZLEIpe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIVkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZl'@;
put 'biwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighWS5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPVlbTF0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtXKysp'@;
put 'TFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5n'@;
put 'LCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFCKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9dmFyIFo9MDtmb3IoVz0wO1c8TC5sZW5ndGg7VysrKXt2'@;
put 'YXIgWD1MW1ddO2ZvcihaKys7WD49MTI4O1g+Pj03KVorK312YXIgUT1uZXcgXyhaKSxxPVEubGVuZ3RoLTE7Zm9yKFc9TC5sZW5ndGgtMTtXPj0wO1ctLSlmb3IoUVtxLS1dPTEyNyYoWD1MW1ddKTsoWD4+PTcpPjA7KVFbcS0tXT0xMjh8MTI3Jlg7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29k'@;
put 'ZXJCdWZmZXIoUSl9LEgucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsWSl7dmFyIEIsVz1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1ZP0I9W1IoVy5nZXRGdWxsWWVhcigpKSxSKFcuZ2V0VVRDTW9udGgoKSsxKSxSKFcuZ2V0VVRDRGF0ZSgpKSxSKFcuZ2V0VVRDSG91'@;
put 'cnMoKSksUihXLmdldFVUQ01pbnV0ZXMoKSksUihXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1ZP0I9W1IoVy5nZXRGdWxsWWVhcigpJTEwMCksUihXLmdldFVUQ01vbnRoKCkrMSksUihXLmdldFVUQ0RhdGUoKSksUihXLmdldFVUQ0hvdXJzKCkpLFIoVy5n'@;
put 'ZXRVVENNaW51dGVzKCkpLFIoVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihCLCJvY3RzdHIiKX0sSC5wcm90b3R5cGUuX2VuY29kZU51'@;
put 'bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEgucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxZKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFZKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0g'@;
put 'Z2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIVkuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEwpKTtMPVlbTF19aWYoIm51bWJlciIhPXR5cGVvZiBMJiYhXy5pc0J1'@;
put 'ZmZlcihMKSl7dmFyIEI9TC50b0FycmF5KCk7IUwuc2lnbiYmMTI4JkJbMF0mJkIudW5zaGlmdCgwKSxMPW5ldyBfKEIpfWlmKF8uaXNCdWZmZXIoTCkpe3ZhciBXPUwubGVuZ3RoOzA9PT1MLmxlbmd0aCYmVysrO3ZhciBYPW5ldyBfKFcpO3JldHVybiBMLmNvcHkoWCksMD09PUwubGVuZ3Ro'@;
put 'JiYoWFswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFgpfWlmKEw8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2lmKEw8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLExdKTtXPTE7Zm9yKHZhciBaPUw7Wj49MjU2O1o+Pj04KVcr'@;
put 'Kztmb3IoWj0oWD1uZXcgQXJyYXkoVykpLmxlbmd0aC0xO1o+PTA7Wi0tKVhbWl09MjU1JkwsTD4+PTg7cmV0dXJuIDEyOCZYWzBdJiZYLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgXyhYKSl9LEgucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEwpe3Jl'@;
put 'dHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEw/MjU1OjApfSxILnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEwsWSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoWSkpLEwuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LEgucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5j'@;
put 'dGlvbihMLFksQil7dmFyIFosVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm4hMTt2YXIgWD1MLmpvaW4oKTtpZih2b2lkIDA9PT1XLmRlZmF1bHRCdWZmZXImJihXLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoVy5kZWZhdWx0LFksQikuam9pbigp'@;
put 'KSxYLmxlbmd0aCE9PVcuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFo9MDtaPFgubGVuZ3RoO1orKylpZihYW1pdIT09Vy5kZWZhdWx0QnVmZmVyW1pdKXJldHVybiExO3JldHVybiEwfX0sNjU3OTooY2UsSixiKT0+e3ZhciBEPUo7RC5kZXI9Yig2OTg0KSxELnBlbT1iKDI4'@;
put 'ODMpfSwyODgzOihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoNjk4NCk7ZnVuY3Rpb24gcChOKXtfLmNhbGwodGhpcyxOKSx0aGlzLmVuYz0icGVtIn1EKHAsXyksY2UuZXhwb3J0cz1wLHAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih3LEYpe2Zvcih2YXIgUj1fLnByb3RvdHlwZS5l'@;
put 'bmNvZGUuY2FsbCh0aGlzLHcpLnRvU3RyaW5nKCJiYXNlNjQiKSxqPVsiLS0tLS1CRUdJTiAiK0YubGFiZWwrIi0tLS0tIl0sUD0wO1A8Ui5sZW5ndGg7UCs9NjQpai5wdXNoKFIuc2xpY2UoUCxQKzY0KSk7cmV0dXJuIGoucHVzaCgiLS0tLS1FTkQgIitGLmxhYmVsKyItLS0tLSIpLGouam9p'@;
put 'bigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lmKCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeixnKXt6LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7'@;
put 'fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9uIHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4gejt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9'@;
put 'bnVsbCxudWxsIT09eiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoenx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93'@;
put 'PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gSCh6LGcpe3ZhciB5PXouY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9ZnVuY3Rpb24g'@;
put 'Uih6LGcseSl7dmFyIHg9SCh6LHkpO3JldHVybiB5LTE+PWcmJih4fD1IKHoseS0xKTw8NCkseH1mdW5jdGlvbiBqKHosZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oei5sZW5ndGgseSksVj1nO1Y8VDtWKyspe3ZhciBVPXouY2hhckNvZGVBdChWKS00ODtDKj14LEMrPVU+PTQ5P1Ut'@;
put 'NDkrMTA6VT49MTc/VS0xNysxMDpVfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSx3'@;
put 'Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIo'@;
put 'Zyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhp'@;
put 'cy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5'@;
put 'LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAo'@;
put 'Zzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4'@;
put 'KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9'@;
put 'MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsVixVPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1W'@;
put 'Pj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4y'@;
put 'Ni1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n'@;
put 'dGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVSxUPTAsVj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jk'@;
put 'c1tWKz0xXXw9VT4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O3RoaXMuc3Ry'@;
put 'aXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBWPWcubGVuZ3RoLXgsVT1WJUMsRT1NYXRoLm1pbihWLFYt'@;
put 'VSkreCxtPTAsQT14O0E8RTtBKz1DKW09aihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PVUpe3ZhciBhZT0xO2ZvcihtPWooZyxBLGcubGVuZ3RoLHkpLEE9MDtBPFU7QSsrKWFl'@;
put 'Kj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0'@;
put 'aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5'@;
put 'KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0'@;
put 'aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBl'@;
put 'Lmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFA9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCww'@;
put 'LDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxZPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3'@;
put 'MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2'@;
put 'MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlO3ZhciB4PXoubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8ei53b3Jkc1sw'@;
put 'XSxUPTB8Zy53b3Jkc1swXSxWPUMqVCxFPVYvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJlY7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksbGU9TWF0aC5tYXgoMCxtLXoubGVuZ3RoKzEp'@;
put 'O2xlPD1uZTtsZSsrKUErPShWPShDPTB8ei53b3Jkc1ttLWxlfDBdKSooVD0wfGcud29yZHNbbGVdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZWO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90'@;
put 'b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxWPTA7Vjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPXRoaXMud29yZHNbVl0sRT0oMTY3NzcyMTUmKFU8PEN8VCkpLnRvU3Ry'@;
put 'aW5nKDE2KTtUPVU+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixWLS0pLHg9MCE9PVR8fFYhPT10aGlzLmxlbmd0aC0xP1BbNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1MW2ddLEE9WVtnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJpbmcoZyk7eD0o'@;
put 'YWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6UFttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3'@;
put 'ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3'@;
put 'MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9T'@;
put 'dHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBGPCJ1IiksdGhpcy50b0FycmF5TGlrZShGLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLHkpfSx3'@;
put 'LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAi'@;
put 'KSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxWPSJsZSI9PT15LFU9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoVil7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVttXT1FO2Zvcig7bTxUO20rKylVW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20r'@;
put 'KylVW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVtULW0tMV09RX1yZXR1cm4gVX0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2'@;
put 'YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFy'@;
put 'IHk9Zyx4PTA7cmV0dXJuIDgxOTEmeXx8KHgrPTEzLHk+Pj49MTMpLDEyNyZ5fHwoeCs9Nyx5Pj4+PTcpLDE1Jnl8fCh4Kz00LHk+Pj49NCksMyZ5fHwoeCs9Mix5Pj4+PTIpLDEmeXx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0'@;
put 'cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3pl'@;
put 'cm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3Rv'@;
put 'dHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRp'@;
put 'dmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3Jl'@;
put 'dHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUo'@;
put 'KS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7'@;
put 'eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBl'@;
put 'LnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5'@;
put 'PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5z'@;
put 'dHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihn'@;
put 'KTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVy'@;
put 'Ij09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlz'@;
put 'LndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1n'@;
put 'LzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxn'@;
put 'Lm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLFY9MDtWPEMubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pKygwfEMud29yZHNbVl0pK1QpLFQ9'@;
put 'eT4+PjI2O2Zvcig7MCE9PVQmJlY8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYo'@;
put 'eCE9PXRoaXMpZm9yKDtWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPXgud29yZHNbVl07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1'@;
put 'YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRo'@;
put 'aXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo'@;
put 'aXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zv'@;
put 'cih2YXIgVj0wLFU9MDtVPFQubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pLSgwfFQud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7Zm9yKDswIT09ViYmVTxDLmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02'@;
put 'NzEwODg2MyZ5O2lmKDA9PT1WJiZVPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO1U8Qy5sZW5ndGg7VSsrKXRoaXMud29yZHNbVV09Qy53b3Jkc1tVXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVSksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3Ry'@;
put 'aXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFo9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLFY9eC53b3JkcyxVPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsbGU9YWU+Pj4xMyx3ZT0w'@;
put 'fENbMV0sWmU9ODE5MSZ3ZSxRZT13ZT4+PjEzLGF0PTB8Q1syXSx4ZT04MTkxJmF0LHZlPWF0Pj4+MTMscWU9MHxDWzNdLGplPTgxOTEmcWUsQWU9cWU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLEhlPTB8Q1s1XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxDWzZd'@;
put 'LG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxvbj0wfENbN10seXQ9ODE5MSZvbixNdD1vbj4+PjEzLEl0PTB8Q1s4XSxydD04MTkxJkl0LEtlPUl0Pj4+MTMsdHQ9MHxDWzldLE5lPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxKdD0wfFRbMF0sTHQ9ODE5MSZKdCxQdD1KdD4+PjEzLG9pPTB8VFsxXSxlbj04'@;
put 'MTkxJm9pLHNuPW9pPj4+MTMsSWk9MHxUWzJdLGRuPTgxOTEmSWksZnQ9SWk+Pj4xMyxGcj0wfFRbM10sWnQ9ODE5MSZGcixrdD1Gcj4+PjEzLExuPTB8VFs0XSxvdD04MTkxJkxuLHp0PUxuPj4+MTMsbmk9MHxUWzVdLFdlPTgxOTEmbmksQXQ9bmk+Pj4xMyxpcj0wfFRbNl0saHQ9ODE5MSZp'@;
put 'cixFdD1pcj4+PjEzLHpuPTB8VFs3XSxhbj04MTkxJnpuLGp0PXpuPj4+MTMsZGk9MHxUWzhdLGNuPTgxOTEmZGksZm49ZGk+Pj4xMyxEaT0wfFRbOV0sUXQ9ODE5MSZEaSx0bj1EaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBjYT0oVSso'@;
put 'RT1NYXRoLmltdWwobmUsTHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFB0KSkrTWF0aC5pbXVsKGxlLEx0KXwwKSk8PDEzKXwwO1U9KChBPU1hdGguaW11bChsZSxQdCkpKyhtPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxFPU1hdGguaW11bChaZSxMdCksbT0o'@;
put 'bT1NYXRoLmltdWwoWmUsUHQpKStNYXRoLmltdWwoUWUsTHQpfDAsQT1NYXRoLmltdWwoUWUsUHQpO3ZhciB4aT0oVSsoRT1FK01hdGguaW11bChuZSxlbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwobGUsZW4pfDApKTw8MTMpfDA7VT0oKEE9'@;
put 'QStNYXRoLmltdWwobGUsc24pfDApKyhtPj4+MTMpfDApKyh4aT4+PjI2KXwwLHhpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxMdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsTHQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoWmUsZW4pfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChaZSxzbil8MCkrTWF0aC5pbXVsKFFlLGVuKXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDA7dmFyIHlyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGRuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChsZSxkbil8MCkpPDwxMyl8'@;
put 'MDtVPSgoQT1BK01hdGguaW11bChsZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEx0KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChBZSxMdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bCh4ZSxl'@;
put 'bil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsZW4pfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFplLGRuKXwwLG09KG09bStNYXRoLmltdWwoWmUsZnQpfDApK01hdGguaW11bChRZSxkbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXww'@;
put 'O3ZhciBHbj0oVSsoRT1FK01hdGguaW11bChuZSxadCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGt0KXwwKStNYXRoLmltdWwobGUsWnQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsa3QpfDApKyhtPj4+MTMpfDApKyhHbj4+PjI2KXwwLEduJj02NzEwODg2'@;
put 'MyxFPU1hdGguaW11bChSZSxMdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsTHQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsZW4pfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKEFlLGVuKXwwLEE9QStNYXRoLmltdWwo'@;
put 'QWUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsZG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFplLFp0KXwwLG09KG09bStNYXRoLmltdWwoWmUsa3QpfDApK01hdGguaW11bChRZSxa'@;
put 'dCl8MCxBPUErTWF0aC5pbXVsKFFlLGt0KXwwO3ZhciBLaT0oVSsoRT1FK01hdGguaW11bChuZSxvdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwobGUsb3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsenQpfDApKyhtPj4+MTMp'@;
put 'fDApKyhLaT4+PjI2KXwwLEtpJj02NzEwODg2MyxFPU1hdGguaW11bChEZSxMdCksbT0obT1NYXRoLmltdWwoRGUsUHQpKStNYXRoLmltdWwoa2UsTHQpfDAsQT1NYXRoLmltdWwoa2UsUHQpLEU9RStNYXRoLmltdWwoUmUsZW4pfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5p'@;
put 'bXVsKEllLGVuKXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoQWUsZG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFp0KXwwLG09KG09bStNYXRoLmlt'@;
put 'dWwoeGUsa3QpfDApK01hdGguaW11bCh2ZSxadCl8MCxBPUErTWF0aC5pbXVsKHZlLGt0KXwwLEU9RStNYXRoLmltdWwoWmUsb3QpfDAsbT0obT1tK01hdGguaW11bChaZSx6dCl8MCkrTWF0aC5pbXVsKFFlLG90KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDA7dmFyIEpyPShVKyhFPUUrTWF0'@;
put 'aC5pbXVsKG5lLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChsZSxXZSl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LEx0'@;
put 'KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChKZSxMdCl8MCxBPU1hdGguaW11bChKZSxQdCksRT1FK01hdGguaW11bChEZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLHNuKXwwKStNYXRoLmltdWwoa2UsZW4pfDAsQT1BK01hdGguaW11bChrZSxzbil8MCxFPUUrTWF0aC5p'@;
put 'bXVsKFJlLGRuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxkbil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsWnQpfDAsbT0obT1tK01hdGguaW11bChqZSxrdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLEE9QStNYXRoLmltdWwo'@;
put 'QWUsa3QpfDAsRT1FK01hdGguaW11bCh4ZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUsb3QpfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFplLFdlKXwwLG09KG09bStNYXRoLmltdWwoWmUsQXQpfDApK01hdGguaW11bChRZSxX'@;
put 'ZSl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwO3ZhciBRcj0oVSsoRT1FK01hdGguaW11bChuZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEV0KXwwKStNYXRoLmltdWwobGUsaHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsRXQpfDApKyhtPj4+MTMp'@;
put 'fDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxMdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsTHQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsZW4pfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5p'@;
put 'bXVsKEplLGVuKXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDAsRT1FK01hdGguaW11bChEZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZ0KXwwKStNYXRoLmltdWwoa2UsZG4pfDAsQT1BK01hdGguaW11bChrZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFp0KXwwLG09KG09bStNYXRoLmlt'@;
put 'dWwoUmUsa3QpfDApK01hdGguaW11bChJZSxadCl8MCxBPUErTWF0aC5pbXVsKEllLGt0KXwwLEU9RStNYXRoLmltdWwoamUsb3QpfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKEFlLG90KXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxX'@;
put 'ZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFplLGh0KXwwLG09KG09bStNYXRoLmltdWwoWmUsRXQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLEV0KXww'@;
put 'O3ZhciBOaT0oVSsoRT1FK01hdGguaW11bChuZSxhbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGp0KXwwKStNYXRoLmltdWwobGUsYW4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsanQpfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2'@;
put 'MyxFPU1hdGguaW11bChydCxMdCksbT0obT1NYXRoLmltdWwocnQsUHQpKStNYXRoLmltdWwoS2UsTHQpfDAsQT1NYXRoLmltdWwoS2UsUHQpLEU9RStNYXRoLmltdWwoeXQsZW4pfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LGVuKXwwLEE9QStNYXRoLmltdWwo'@;
put 'TXQsc24pfDAsRT1FK01hdGguaW11bChudCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoSmUsZG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MCxFPUUrTWF0aC5pbXVsKERlLFp0KXwwLG09KG09bStNYXRoLmltdWwoRGUsa3QpfDApK01hdGguaW11bChrZSxa'@;
put 'dCl8MCxBPUErTWF0aC5pbXVsKGtlLGt0KXwwLEU9RStNYXRoLmltdWwoUmUsb3QpfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLG90KXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0'@;
put 'KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUsRXQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLEV0KXwwLEU9RStNYXRoLmltdWwoWmUsYW4pfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChaZSxqdCl8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsanQpfDA7dmFyIEhpPShVKyhFPUUrTWF0aC5pbXVsKG5lLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZm4pfDApK01hdGguaW11bChsZSxjbil8MCkpPDwxMyl8'@;
put 'MDtVPSgoQT1BK01hdGguaW11bChsZSxmbil8MCkrKG0+Pj4xMyl8MCkrKEhpPj4+MjYpfDAsSGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLEx0KSxtPShtPU1hdGguaW11bChOZSxQdCkpK01hdGguaW11bCh1dCxMdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChydCxl'@;
put 'bil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmltdWwoS2UsZW4pfDAsQT1BK01hdGguaW11bChLZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGRuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxkbil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXww'@;
put 'LEU9RStNYXRoLmltdWwobnQsWnQpfDAsbT0obT1tK01hdGguaW11bChudCxrdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwLEE9QStNYXRoLmltdWwoSmUsa3QpfDAsRT1FK01hdGguaW11bChEZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHp0KXwwKStNYXRoLmltdWwoa2Usb3QpfDAsQT1B'@;
put 'K01hdGguaW11bChrZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSxFdCl8MCkrTWF0'@;
put 'aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUsRXQpfDAsRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGp0KXwwKStNYXRoLmltdWwodmUsYW4pfDAsQT1BK01hdGguaW11bCh2ZSxqdCl8MCxFPUUrTWF0aC5pbXVsKFplLGNuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoWmUsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBJYT0oVSsoRT1FK01hdGguaW11bChuZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHRuKXwwKStNYXRoLmltdWwobGUsUXQpfDApKTw8MTMpfDA7VT0oKEE9'@;
put 'QStNYXRoLmltdWwobGUsdG4pfDApKyhtPj4+MTMpfDApKyhJYT4+PjI2KXwwLElhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxlbiksbT0obT1NYXRoLmltdWwoTmUsc24pKStNYXRoLmltdWwodXQsZW4pfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChydCxmdCl8MCkrTWF0aC5pbXVsKEtlLGRuKXwwLEE9QStNYXRoLmltdWwoS2UsZnQpfDAsRT1FK01hdGguaW11bCh5dCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGt0KXwwKStNYXRoLmltdWwoTXQsWnQpfDAsQT1BK01hdGguaW11bChNdCxrdCl8MCxFPUUrTWF0'@;
put 'aC5pbXVsKG50LG90KXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChKZSxvdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwLEU9RStNYXRoLmltdWwoRGUsV2UpfDAsbT0obT1tK01hdGguaW11bChEZSxBdCl8MCkrTWF0aC5pbXVsKGtlLFdlKXwwLEE9QStNYXRoLmlt'@;
put 'dWwoa2UsQXQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEV0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSxFdCl8MCxFPUUrTWF0aC5pbXVsKGplLGFuKXwwLG09KG09bStNYXRoLmltdWwoamUsanQpfDApK01hdGguaW11bChB'@;
put 'ZSxhbil8MCxBPUErTWF0aC5pbXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIFByPShVKyhFPUUrTWF0aC5pbXVsKFplLFF0KXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwoWmUsdG4pfDApK01hdGguaW11bChRZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChRZSx0bil8MCkrKG0+Pj4xMyl8MCkrKFByPj4+MjYpfDAsUHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGRuKSxtPShtPU1hdGguaW11bChOZSxmdCkp'@;
put 'K01hdGguaW11bCh1dCxkbil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChydCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGt0KXwwKStNYXRoLmltdWwoS2UsWnQpfDAsQT1BK01hdGguaW11bChLZSxrdCl8MCxFPUUrTWF0aC5pbXVsKHl0LG90KXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxvdCl8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDAsRT1FK01hdGguaW11bChE'@;
put 'ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLEV0KXwwKStNYXRoLmltdWwoa2UsaHQpfDAsQT1BK01hdGguaW11bChrZSxFdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGFuKXwwLG09KG09bStNYXRoLmltdWwoUmUsanQpfDApK01hdGguaW11bChJZSxhbil8MCxBPUErTWF0aC5pbXVsKEllLGp0'@;
put 'KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFlpPShVKyhFPUUrTWF0aC5pbXVsKHhlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsdG4p'@;
put 'fDApK01hdGguaW11bCh2ZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCh2ZSx0bil8MCkrKG0+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFp0KSxtPShtPU1hdGguaW11bChOZSxrdCkpK01hdGguaW11bCh1dCxadCl8MCxBPU1hdGgu'@;
put 'aW11bCh1dCxrdCksRT1FK01hdGguaW11bChydCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHp0KXwwKStNYXRoLmltdWwoS2Usb3QpfDAsQT1BK01hdGguaW11bChLZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChN'@;
put 'dCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCxFdCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUsRXQpfDAsRT1FK01hdGguaW11bChEZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKERl'@;
put 'LGp0KXwwKStNYXRoLmltdWwoa2UsYW4pfDAsQT1BK01hdGguaW11bChrZSxqdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBmYT0oVSsoRT1FK01hdGguaW11'@;
put 'bChqZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoQWUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoQWUsdG4pfDApKyhtPj4+MTMpfDApKyhmYT4+PjI2KXwwLGZhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxvdCksbT0o'@;
put 'bT1NYXRoLmltdWwoTmUsenQpKStNYXRoLmltdWwodXQsb3QpfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwocnQsV2UpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKEtlLFdlKXwwLEE9QStNYXRoLmltdWwoS2UsQXQpfDAsRT1FK01hdGguaW11bCh5'@;
put 'dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEV0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCxFdCl8MCxFPUUrTWF0aC5pbXVsKG50LGFuKXwwLG09KG09bStNYXRoLmltdWwobnQsanQpfDApK01hdGguaW11bChKZSxhbil8MCxBPUErTWF0aC5pbXVsKEplLGp0'@;
put 'KXwwLEU9RStNYXRoLmltdWwoRGUsY24pfDAsbT0obT1tK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKGtlLGNuKXwwLEE9QStNYXRoLmltdWwoa2UsZm4pfDA7dmFyIG5yPShVKyhFPUUrTWF0aC5pbXVsKFJlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsdG4p'@;
put 'fDApK01hdGguaW11bChJZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChJZSx0bil8MCkrKG0+Pj4xMyl8MCkrKG5yPj4+MjYpfDAsbnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFdlKSxtPShtPU1hdGguaW11bChOZSxBdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGgu'@;
put 'aW11bCh1dCxBdCksRT1FK01hdGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEV0KXwwKStNYXRoLmltdWwoS2UsaHQpfDAsQT1BK01hdGguaW11bChLZSxFdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGFuKXwwLG09KG09bStNYXRoLmltdWwoeXQsanQpfDApK01hdGguaW11bChN'@;
put 'dCxhbil8MCxBPUErTWF0aC5pbXVsKE10LGp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIG9hPShVKyhFPUUrTWF0aC5pbXVsKERlLFF0KXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwoRGUsdG4pfDApK01hdGguaW11bChrZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChrZSx0bil8MCkrKG0+Pj4xMyl8MCkrKG9hPj4+MjYpfDAsb2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGh0KSxtPShtPU1hdGguaW11bChOZSxFdCkp'@;
put 'K01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCxFdCksRT1FK01hdGguaW11bChydCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGp0KXwwKStNYXRoLmltdWwoS2UsYW4pfDAsQT1BK01hdGguaW11bChLZSxqdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciBfYT0oVSsoRT1FK01hdGguaW11bChudCxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LHRuKXwwKStNYXRoLmltdWwoSmUsUXQpfDApKTw8MTMpfDA7VT0oKEE9'@;
put 'QStNYXRoLmltdWwoSmUsdG4pfDApKyhtPj4+MTMpfDApKyhfYT4+PjI2KXwwLF9hJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxhbiksbT0obT1NYXRoLmltdWwoTmUsanQpKStNYXRoLmltdWwodXQsYW4pfDAsQT1NYXRoLmltdWwodXQsanQpLEU9RStNYXRoLmltdWwocnQsY24pfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChydCxmbil8MCkrTWF0aC5pbXVsKEtlLGNuKXwwLEE9QStNYXRoLmltdWwoS2UsZm4pfDA7dmFyIE9hPShVKyhFPUUrTWF0aC5pbXVsKHl0LFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsdG4pfDApK01hdGguaW11bChNdCxRdCl8MCkpPDwxMyl8'@;
put 'MDtVPSgoQT1BK01hdGguaW11bChNdCx0bil8MCkrKG0+Pj4xMyl8MCkrKE9hPj4+MjYpfDAsT2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGNuKSxtPShtPU1hdGguaW11bChOZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIE5hPShVKyhFPUUrTWF0'@;
put 'aC5pbXVsKHJ0LFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsdG4pfDApK01hdGguaW11bChLZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChLZSx0bil8MCkrKG0+Pj4xMyl8MCkrKE5hPj4+MjYpfDAsTmEmPTY3MTA4ODYzO3ZhciBlaT0oVSsoRT1NYXRo'@;
put 'LmltdWwoTmUsUXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKE5lLHRuKSkrTWF0aC5pbXVsKHV0LFF0KXwwKSk8PDEzKXwwO3JldHVybiBVPSgoQT1NYXRoLmltdWwodXQsdG4pKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsVlswXT1jYSxWWzFdPXhpLFZbMl09'@;
put 'eXIsVlszXT1HbixWWzRdPUtpLFZbNV09SnIsVls2XT1RcixWWzddPU5pLFZbOF09SGksVls5XT1JYSxWWzEwXT1QcixWWzExXT1ZaSxWWzEyXT1mYSxWWzEzXT1ucixWWzE0XT1vYSxWWzE1XT1fYSxWWzE2XT1PYSxWWzE3XT1OYSxWWzE4XT1laSwwIT09VSYmKFZbMTldPVUseC5sZW5ndGgr'@;
put 'KykseH07ZnVuY3Rpb24gUSh6LGcseSl7cmV0dXJuKG5ldyBxKS5tdWxwKHosZyx5KX1mdW5jdGlvbiBxKHosZyl7dGhpcy54PXosdGhpcy55PWd9TWF0aC5pbXVsfHwoWj1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0'@;
put 'dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9aKHRoaXMsZyx5KTpDPDYzP1codGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBYKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2ZSx5Lmxlbmd0aD16Lmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxD'@;
put 'PTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBWPUM7Qz0wO2Zvcih2YXIgVT02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC16Lmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIGxlPSgwfHoud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksd2U9Njcx'@;
put 'MDg4NjMmbGU7VT02NzEwODg2MyYod2U9d2UrVXwwKSxDKz0oVj0oVj1WKyhsZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixWJj02NzEwODg2M315LndvcmRzW1RdPVUseD1WLFY9Q31yZXR1cm4gMCE9PXg/eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlz'@;
put 'LGcseSk6USh0aGlzLGcseSkseH0scS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxxLnByb3RvdHlwZS5y'@;
put 'ZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30scS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsVil7Zm9yKHZhciBVPTA7VTxWO1Ur'@;
put 'KylDW1VdPXlbZ1tVXV0sVFtVXT14W2dbVV1dfSxxLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULFYpe3RoaXMucGVybXV0ZShWLGcseSx4LEMsVCk7Zm9yKHZhciBVPTE7VTxUO1U8PD0xKWZvcih2YXIgRT1VPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0'@;
put 'aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sbGU9QSx3ZT0wO3dlPFU7d2UrKyl7dmFyIFplPXhbYWUrd2VdLFFlPUNbYWUrd2VdLGF0PXhbYWUrd2UrVV0seGU9Q1thZSt3ZStVXSx2ZT1uZSphdC1sZSp4ZTt4ZT1uZSp4ZStsZSphdCx4W2FlK3dlXT1a'@;
put 'ZSsoYXQ9dmUpLENbYWUrd2VdPVFlK3hlLHhbYWUrd2UrVV09WmUtYXQsQ1thZSt3ZStVXT1RZS14ZSx3ZSE9PUUmJih2ZT1tKm5lLUEqbGUsbGU9bSpsZStBKm5lLG5lPXZlKX19LHEucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9'@;
put 'MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxxLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10s'@;
put 'eVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxxLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYz'@;
put 'JlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxxLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLFY9MDtWPHk7VisrKXhbMipWXT04MTkxJihUKz0wfGdbVl0pLHhbMipWKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9y'@;
put 'KFY9Mip5O1Y8QzsrK1YpeFtWXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LHEucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LHEucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBD'@;
put 'PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksVj10aGlzLnN0dWIoQyksVT1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxs'@;
put 'ZT14LndvcmRzO2xlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFUsQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShVLFYsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxWLGFlLG5lLEMsVCk7Zm9yKHZhciB3'@;
put 'ZT0wO3dlPEM7d2UrKyl7dmFyIFplPUVbd2VdKmFlW3dlXS1tW3dlXSpuZVt3ZV07bVt3ZV09RVt3ZV0qbmVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1aZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxsZSxWLEMsVCksdGhpcy5jb25qdWdhdGUobGUs'@;
put 'VixDKSx0aGlzLm5vcm1hbGl6ZTEzYihsZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcg'@;
put 'QXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLFEodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5p'@;
put 'bXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlz'@;
put 'LndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11'@;
put 'bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlw'@;
put 'ZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gQih6KXtmb3IodmFyIGc9bmV3IEFycmF5KHouYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPSh6LndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgp'@;
put 'cmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcu'@;
put 'cHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBWPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFU9dGhpcy53b3Jk'@;
put 'c1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktVTw8eXxWLFY9VT4+PjI2LXl9ViYmKHRoaXMud29yZHNbVF09Vix0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3Io'@;
put 'VD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9u'@;
put 'KGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixWPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxVPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09VixDPU1hdGgubWF4KDAsQyksRSl7Zm9y'@;
put 'KHZhciBtPTA7bTxWO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9Vn1pZigwIT09VilpZih0aGlzLmxlbmd0aD5WKWZvcih0aGlzLmxlbmd0aC09VixtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rVl07ZWxzZSB0aGlzLndvcmRz'@;
put 'WzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJlV9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0'@;
put 'aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUu'@;
put 'c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcp'@;
put 'fSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14'@;
put 'fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2'@;
put 'ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5'@;
put 'cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09'@;
put 'PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJv'@;
put 'dG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndv'@;
put 'cmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10'@;
put 'aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2'@;
put 'ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgVixVPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7Vj0oMHx0aGlzLndvcmRzW1QreF0pK1U7dmFyIEU9KDB8Zy53b3Jk'@;
put 'c1tUXSkqeTtVPSgoVi09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVn1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspVT0oVj0oMHx0aGlzLndvcmRzW1QreF0pK1UpPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVjtpZigwPT09'@;
put 'VSlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09VSksVT0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylVPShWPS0oMHx0aGlzLndvcmRzW1RdKStVKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZWO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw'@;
put 'ZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoVikpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMu'@;
put 'bGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09'@;
put 'PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIGxlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3IobGU9TWF0aC5taW4obGUvVnwwLDY3MTA4ODYz'@;
put 'KSxDLl9pc2hsbnN1Ym11bChULGxlLG5lKTswIT09Qy5uZWdhdGl2ZTspbGUtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPWxlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2'@;
put 'IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'MD09PWcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5u'@;
put 'ZWdhdGl2ZT8oVj10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6Vi5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgm'@;
put 'JjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6Vi5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxs'@;
put 'fToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsVn0sdy5wcm90b3R5cGUuZGl2PWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2Qi'@;
put 'LCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEp'@;
put 'LFY9eC5jbXAoQyk7cmV0dXJuIFY8MHx8MT09PVQmJjA9PT1WP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRo'@;
put 'aXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0p'@;
put 'KzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSks'@;
put 'cCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj1uZXcgdygwKSxVPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigx'@;
put 'KSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8'@;
put 'VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgbGU9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJmxlPDI2OysrbGUsd2U8PD0xKTtpZihsZT4wKWZvcih4Lml1c2hybihsZSk7bGUtLSA+MDspKFYuaXNPZGQoKXx8VS5pc09k'@;
put 'ZCgpKSYmKFYuaWFkZChtKSxVLmlzdWIoQSkpLFYuaXVzaHJuKDEpLFUuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFYpLFQuaXN1YihVKSk6KHguaXN1Yih5KSxWLmlzdWIoQyksVS5pc3ViKFQpKX1yZXR1cm57YTpWLGI6VSxnY2Q6eC5pdXNobG4oRSl9fSx3LnBy'@;
put 'b3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj14LmNsb25lKCk7'@;
put 'eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBVPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmVTwyNjsrK1UsRTw8PTEpO2lmKFU+MClmb3IoeS5pdXNocm4oVSk7VS0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChWKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRz'@;
put 'WzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKFYpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4o'@;
put 'MSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRp'@;
put 'dmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYo'@;
put 'VDwwKXt2YXIgVj15O3k9eCx4PVZ9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249'@;
put 'ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxWPXg7MCE9PVQmJlY8dGhpcy5sZW5ndGg7'@;
put 'VisrKXt2YXIgVT0wfHRoaXMud29yZHNbVl07VD0oVSs9VCk+Pj4yNix0aGlzLndvcmRzW1ZdPVUmPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbVl09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMu'@;
put 'bGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEp'@;
put 'eD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRo'@;
put 'aXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtp'@;
put 'Zih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYo'@;
put 'eT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhp'@;
put 'cy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAo'@;
put 'Zyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnBy'@;
put 'b3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFNlKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNv'@;
put 'bnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0'@;
put 'aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhp'@;
put 'cy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRk'@;
put 'KHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhp'@;
put 'cy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5p'@;
put 'c3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhp'@;
put 'cy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm'@;
put 'eTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5w'@;
put 'cm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks'@;
put 'dGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciB0ZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKHosZyl7dGhpcy5uYW1lPXosdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1'@;
put 'c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBzZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24g'@;
put 'Z2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2Uoeil7aWYoInN0cmluZyI9PXR5cGVvZiB6KXt2YXIg'@;
put 'Zz13Ll9wcmltZSh6KTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoei5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT16LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZSh6KXtTZS5jYWxsKHRoaXMseiksdGhpcy5zaGlmdD10aGlzLm0uYml0'@;
put 'TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWlu'@;
put 'dj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBn'@;
put 'LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hp'@;
put 'bGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LGllLnByb3RvdHlwZS5zcGxpdD1m'@;
put 'dW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxOKHNlLGllKSxzZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVu'@;
put 'Z3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgVj1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPVYmeCxUPTEwO1Q8Zy5sZW5ndGg7'@;
put 'VCsrKXt2YXIgVT0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oVSZ4KTw8NHxWPj4+MjIsVj1VfWcud29yZHNbVC0xMF09Vj4+Pj0yMixnLmxlbmd0aC09MD09PVYmJmcubGVuZ3RoPjEwPzEwOjl9LHNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0w'@;
put 'LGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0'@;
put 'aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LE4oZ2UsaWUpLE4oX2UsaWUpLE4oVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29y'@;
put 'ZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHRlW2ddKXJldHVybiB0ZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IHNlO2Vsc2Ug'@;
put 'aWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHRlW2ddPXkseX0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9u'@;
put 'KGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVk'@;
put 'IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VS'@;
put 'ZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMu'@;
put 'X3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5j'@;
put 'bXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUu'@;
put 'aXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4o'@;
put 'eSkpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LFNl'@;
put 'LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNs'@;
put 'b25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylU'@;
put 'KyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIFY9bmV3IHcoMSkudG9SZWQodGhpcyksVT1WLnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxF'@;
put 'KS5jbXAoVSk7KW0ucmVkSUFkZChVKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksbGU9VDswIT09bmUuY21wKFYpOyl7Zm9yKHZhciB3ZT1uZSxaZT0wOzAhPT13ZS5jbXAoVik7WmUrKyl3ZT13ZS5y'@;
put 'ZWRTcXIoKTtwKFplPGxlKTt2YXIgUWU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4obGUtWmUtMSkpO2FlPWFlLnJlZE11bChRZSksQT1RZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksbGU9WmV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9p'@;
put 'bnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09'@;
put 'PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIFY9Q1swXSxVPTAsRT0wLG09eS5iaXRMZW5ndGgo'@;
put 'KSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtWIT09Q1swXSYmKFY9dGhpcy5zcXIoVikpLDAhPT1uZXx8MCE9PVU/KFU8PD0xLFV8PW5lLCg0PT0rK0V8fDA9'@;
put 'PT1UJiYwPT09YWUpJiYoVj10aGlzLm11bChWLENbVV0pLEU9MCxVPTApKTpFPTB9bT0yNn1yZXR1cm4gVn0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LFNlLnByb3RvdHlwZS5jb252ZXJ0'@;
put 'RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgemUoZyl9LE4oemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMu'@;
put 'c2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJu'@;
put 'IGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5t'@;
put 'KT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFy'@;
put 'IHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDAp'@;
put 'PDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw5MjgyOihj'@;
put 'ZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpO2Z1bmN0aW9uIHAoSGUpe3JldHVybihwPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKERlKXtyZXR1cm4gdHlwZW9mIERlfTpmdW5j'@;
put 'dGlvbihEZSl7cmV0dXJuIERlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZEZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBEZX0pKEhlKX1mdW5jdGlvbiBOKEhlLERlKXtmb3IodmFyIGtlPTA7a2U8RGUubGVuZ3RoO2tl'@;
put 'Kyspe3ZhciBfdD1EZVtrZV07X3QuZW51bWVyYWJsZT1fdC5lbnVtZXJhYmxlfHwhMSxfdC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIF90JiYoX3Qud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZSxGKF90LmtleSksX3QpfX1mdW5jdGlvbiB3KEhlLERlLGtlKXtyZXR1'@;
put 'cm4gRGUmJk4oSGUucHJvdG90eXBlLERlKSxrZSYmTihIZSxrZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEhlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLEhlfWZ1bmN0aW9uIEYoSGUpe3ZhciBEZT1mdW5jdGlvbiBIKEhlLERlKXtpZigib2JqZWN0IiE9PXAoSGUpfHxudWxsPT09SGUp'@;
put 'cmV0dXJuIEhlO3ZhciBrZT1IZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWtlKXt2YXIgX3Q9a2UuY2FsbChIZSxEZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXAoX3QpKXJldHVybiBfdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PURlP1N0cmluZzpOdW1iZXIpKEhlKX0oSGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cChEZSk/RGU6U3RyaW5nKERlKX12YXIgemUseixQPWIoMjEzNikuY29kZXMsTD1QLkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQs'@;
put 'WT1QLkVSUl9JTlZBTElEX0FSR19UWVBFLEI9UC5FUlJfSU5WQUxJRF9BUkdfVkFMVUUsVz1QLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxaPVAuRVJSX01JU1NJTkdfQVJHUyxYPWIoNTk2MSkscT1iKDk1MzkpLmluc3BlY3QsdGU9Yig5NTM5KS50eXBlcyxpZT10ZS5pc1Byb21pc2Usc2U9'@;
put 'dGUuaXNSZWdFeHAsZ2U9Yig4MTYyKSgpLF9lPWIoNTYyNCkoKSxUZT1iKDE5MjQpKCJSZWdFeHAucHJvdG90eXBlLnRlc3QiKTtmdW5jdGlvbiBDKCl7dmFyIEhlPWIoOTE1OCk7emU9SGUuaXNEZWVwRXF1YWwsej1IZS5pc0RlZXBTdHJpY3RFcXVhbH12YXIgRT0hMSxtPWNlLmV4cG9ydHM9'@;
put 'd2UsQT17fTtmdW5jdGlvbiBhZShIZSl7dGhyb3cgSGUubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yP0hlLm1lc3NhZ2U6bmV3IFgoSGUpfWZ1bmN0aW9uIGxlKEhlLERlLGtlLF90KXtpZigha2Upe3ZhciBudD0hMTtpZigwPT09RGUpbnQ9ITAsX3Q9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3Nl'@;
put 'ZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKF90IGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgX3Q7dmFyIEplPW5ldyBYKHthY3R1YWw6a2UsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpfdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpIZX0pO3Rocm93IEplLmdlbmVyYXRlZE1lc3NhZ2U9bnQs'@;
put 'SmV9fWZ1bmN0aW9uIHdlKCl7Zm9yKHZhciBIZT1hcmd1bWVudHMubGVuZ3RoLERlPW5ldyBBcnJheShIZSksa2U9MDtrZTxIZTtrZSsrKURlW2tlXT1hcmd1bWVudHNba2VdO2xlLmFwcGx5KHZvaWQgMCxbd2UsRGUubGVuZ3RoXS5jb25jYXQoRGUpKX1tLmZhaWw9ZnVuY3Rpb24gbmUoSGUs'@;
put 'RGUsa2UsX3QsbnQpe3ZhciBvbixKZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1KZT9vbj0iRmFpbGVkIjoxPT09SmU/KGtlPUhlLEhlPXZvaWQgMCk6KCExPT09RSYmKEU9ITAsKEQuZW1pdFdhcm5pbmc/RC5lbWl0V2FybmluZzpfLndhcm4uYmluZChfKSkoImFzc2VydC5mYWlsKCkgd2l0'@;
put 'aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRlcHJlY2F0aW9uV2FybmluZyIsIkRFUDAwOTQiKSksMj09PUplJiYoX3Q9IiE9IikpLGtlIGluc3Rh'@;
put 'bmNlb2YgRXJyb3IpdGhyb3cga2U7dmFyIE10PXthY3R1YWw6SGUsZXhwZWN0ZWQ6RGUsb3BlcmF0b3I6dm9pZCAwPT09X3Q/ImZhaWwiOl90LHN0YWNrU3RhcnRGbjpudHx8bmV9O3ZvaWQgMCE9PWtlJiYoTXQubWVzc2FnZT1rZSk7dmFyIEl0PW5ldyBYKE10KTt0aHJvdyBvbiYmKEl0Lm1l'@;
put 'c3NhZ2U9b24sSXQuZ2VuZXJhdGVkTWVzc2FnZT0hMCksSXR9LG0uQXNzZXJ0aW9uRXJyb3I9WCxtLm9rPXdlLG0uZXF1YWw9ZnVuY3Rpb24gSGUoRGUsa2UsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWigiYWN0dWFsIiwiZXhwZWN0ZWQiKTtEZSE9a2UmJmFlKHthY3R1'@;
put 'YWw6RGUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpfdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpIZX0pfSxtLm5vdEVxdWFsPWZ1bmN0aW9uIEhlKERlLGtlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFooImFjdHVhbCIsImV4cGVjdGVkIik7RGU9PWtlJiZhZSh7YWN0'@;
put 'dWFsOkRlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46SGV9KX0sbS5kZWVwRXF1YWw9ZnVuY3Rpb24gSGUoRGUsa2UsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWigiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT16ZSYm'@;
put 'QygpLHplKERlLGtlKXx8YWUoe2FjdHVhbDpEZSxleHBlY3RlZDprZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpIZX0pfSxtLm5vdERlZXBFcXVhbD1mdW5jdGlvbiBIZShEZSxrZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBaKCJh'@;
put 'Y3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PXplJiZDKCksemUoRGUsa2UpJiZhZSh7YWN0dWFsOkRlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdERlZXBFcXVhbCIsc3RhY2tTdGFydEZuOkhlfSl9LG0uZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIEhlKERlLGtlLF90'@;
put 'KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFooImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09emUmJkMoKSx6KERlLGtlKXx8YWUoe2FjdHVhbDpEZSxleHBlY3RlZDprZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpIZX0p'@;
put 'fSxtLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBaZShIZSxEZSxrZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBaKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PXplJiZDKCkseihIZSxEZSkmJmFlKHthY3R1YWw6SGUsZXhwZWN0ZWQ6RGUsbWVzc2FnZTprZSxv'@;
put 'cGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46WmV9KX0sbS5zdHJpY3RFcXVhbD1mdW5jdGlvbiBIZShEZSxrZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBaKCJhY3R1YWwiLCJleHBlY3RlZCIpO19lKERlLGtlKXx8YWUoe2FjdHVhbDpEZSxl'@;
put 'eHBlY3RlZDprZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOkhlfSl9LG0ubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gSGUoRGUsa2UsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWigiYWN0dWFsIiwiZXhwZWN0ZWQiKTtfZShEZSxr'@;
put 'ZSkmJmFlKHthY3R1YWw6RGUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpfdCxvcGVyYXRvcjoibm90U3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpIZX0pfTt2YXIgUWU9dyhmdW5jdGlvbiBIZShEZSxrZSxfdCl7dmFyIG50PXRoaXM7KGZ1bmN0aW9uIFIoSGUsRGUpe2lmKCEoSGUgaW5zdGFuY2Vv'@;
put 'ZiBEZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLEhlKSxrZS5mb3JFYWNoKGZ1bmN0aW9uKEplKXtKZSBpbiBEZSYmKG50W0plXT12b2lkIDAhPT1fdCYmInN0cmluZyI9PXR5cGVvZiBfdFtKZV0mJnNlKERlW0plXSkm'@;
put 'JlRlKERlW0plXSxfdFtKZV0pP190W0plXTpEZVtKZV0pfSl9KTtmdW5jdGlvbiB4ZShIZSxEZSxrZSxfdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIERlKXtpZihzZShEZSkpcmV0dXJuIFRlKERlLEhlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgWSgiZXhwZWN0ZWQiLFsi'@;
put 'RnVuY3Rpb24iLCJSZWdFeHAiXSxEZSk7aWYoIm9iamVjdCIhPT1wKEhlKXx8bnVsbD09PUhlKXt2YXIgbnQ9bmV3IFgoe2FjdHVhbDpIZSxleHBlY3RlZDpEZSxtZXNzYWdlOmtlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IG50Lm9wZXJhdG9y'@;
put 'PV90Lm5hbWUsbnR9dmFyIEplPU9iamVjdC5rZXlzKERlKTtpZihEZSBpbnN0YW5jZW9mIEVycm9yKUplLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09SmUubGVuZ3RoKXRocm93IG5ldyBCKCJlcnJvciIsRGUsIm1heSBub3QgYmUgYW4gZW1wdHkgb2JqZWN0Iik7cmV0dXJu'@;
put 'IHZvaWQgMD09PXplJiZDKCksSmUuZm9yRWFjaChmdW5jdGlvbihvbil7InN0cmluZyI9PXR5cGVvZiBIZVtvbl0mJnNlKERlW29uXSkmJlRlKERlW29uXSxIZVtvbl0pfHxmdW5jdGlvbiBhdChIZSxEZSxrZSxfdCxudCxKZSl7aWYoIShrZSBpbiBIZSl8fCF6KEhlW2tlXSxEZVtrZV0pKXtp'@;
put 'ZighX3Qpe3ZhciBvbj1uZXcgUWUoSGUsbnQpLHl0PW5ldyBRZShEZSxudCxIZSksTXQ9bmV3IFgoe2FjdHVhbDpvbixleHBlY3RlZDp5dCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46SmV9KTt0aHJvdyBNdC5hY3R1YWw9SGUsTXQuZXhwZWN0ZWQ9RGUsTXQub3Bl'@;
put 'cmF0b3I9SmUubmFtZSxNdH1hZSh7YWN0dWFsOkhlLGV4cGVjdGVkOkRlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6SmUubmFtZSxzdGFja1N0YXJ0Rm46SmV9KX19KEhlLERlLG9uLGtlLEplLF90KX0pLCEwfXJldHVybiB2b2lkIDAhPT1EZS5wcm90b3R5cGUmJkhlIGluc3RhbmNlb2YgRGV8fCFF'@;
put 'cnJvci5pc1Byb3RvdHlwZU9mKERlKSYmITA9PT1EZS5jYWxsKHt9LEhlKX1mdW5jdGlvbiB2ZShIZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEhlKXRocm93IG5ldyBZKCJmbiIsIkZ1bmN0aW9uIixIZSk7dHJ5e0hlKCl9Y2F0Y2goRGUpe3JldHVybiBEZX1yZXR1cm4gQX1mdW5jdGlvbiBx'@;
put 'ZShIZSl7cmV0dXJuIGllKEhlKXx8bnVsbCE9PUhlJiYib2JqZWN0Ij09PXAoSGUpJiYiZnVuY3Rpb24iPT10eXBlb2YgSGUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIEhlLmNhdGNofWZ1bmN0aW9uIGplKEhlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3Zh'@;
put 'ciBEZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgSGUpe2lmKCFxZShEZT1IZSgpKSl0aHJvdyBuZXcgVygiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIsRGUpfWVsc2V7aWYoIXFlKEhlKSl0aHJvdyBuZXcgWSgicHJvbWlzZUZuIixbIkZ1bmN0aW9uIiwiUHJvbWlzZSJdLEhlKTtE'@;
put 'ZT1IZX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBEZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQX0pLmNhdGNoKGZ1bmN0aW9uKGtlKXtyZXR1cm4ga2V9KX0pfWZ1bmN0aW9uIEFlKEhlLERlLGtlLF90KXtpZigic3RyaW5nIj09dHlwZW9mIGtl'@;
put 'KXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgWSgiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLGtlKTtpZigib2JqZWN0Ij09PXAoRGUpJiZudWxsIT09RGUpe2lmKERlLm1lc3NhZ2U9PT1rZSl0aHJvdyBuZXcgTCgiZXJyb3IvbWVzc2Fn'@;
put 'ZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdChEZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBpZihEZT09PWtlKXRocm93IG5ldyBMKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNhdChEZSwnIiBpcyBpZGVudGljYWwgdG8g'@;
put 'dGhlIG1lc3NhZ2UuJykpO190PWtlLGtlPXZvaWQgMH1lbHNlIGlmKG51bGwhPWtlJiYib2JqZWN0IiE9PXAoa2UpJiYiZnVuY3Rpb24iIT10eXBlb2Yga2UpdGhyb3cgbmV3IFkoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxrZSk7aWYoRGU9PT1BKXt2'@;
put 'YXIgbnQ9IiI7a2UmJmtlLm5hbWUmJihudCs9IiAoIi5jb25jYXQoa2UubmFtZSwiKSIpKSxudCs9X3Q/IjogIi5jb25jYXQoX3QpOiIuIixhZSh7YWN0dWFsOnZvaWQgMCxleHBlY3RlZDprZSxvcGVyYXRvcjpIZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0ZWQgIi5jb25jYXQoInJl'@;
put 'amVjdHMiPT09SGUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KG50KSxzdGFja1N0YXJ0Rm46SGV9KX1pZihrZSYmIXhlKERlLGtlLF90LEhlKSl0aHJvdyBEZX1mdW5jdGlvbiBGZShIZSxEZSxrZSxfdCl7aWYoRGUhPT1BKXtpZigic3RyaW5nIj09dHlwZW9mIGtlJiYo'@;
put 'X3Q9a2Usa2U9dm9pZCAwKSwha2V8fHhlKERlLGtlKSl7dmFyIG50PV90PyI6ICIuY29uY2F0KF90KToiLiI7YWUoe2FjdHVhbDpEZSxleHBlY3RlZDprZSxvcGVyYXRvcjpIZS5uYW1lLG1lc3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9PT1IZS5uYW1lPyJy'@;
put 'ZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQobnQsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoRGUmJkRlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46SGV9KX10aHJvdyBEZX19ZnVuY3Rpb24gUmUoSGUsRGUsa2UsX3QsbnQpe2lmKCFzZShEZSkpdGhyb3cgbmV3IFko'@;
put 'InJlZ2V4cCIsIlJlZ0V4cCIsRGUpO3ZhciBKZT0ibWF0Y2giPT09bnQ7aWYoInN0cmluZyIhPXR5cGVvZiBIZXx8VGUoRGUsSGUpIT09SmUpe2lmKGtlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cga2U7dmFyIG9uPSFrZTtrZT1rZXx8KCJzdHJpbmciIT10eXBlb2YgSGU/J1RoZSAic3RyaW5n'@;
put 'IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcrIiIuY29uY2F0KHAoSGUpLCIgKCIpLmNvbmNhdChxKEhlKSwiKSIpOihKZT8iVGhlIGlucHV0IGRpZCBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAiOiJUaGUgaW5wdXQgd2FzIGV4cGVj'@;
put 'dGVkIHRvIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICIpKyIiLmNvbmNhdChxKERlKSwiLiBJbnB1dDpcblxuIikuY29uY2F0KHEoSGUpLCJcbiIpKTt2YXIgeXQ9bmV3IFgoe2FjdHVhbDpIZSxleHBlY3RlZDpEZSxtZXNzYWdlOmtlLG9wZXJhdG9yOm50LHN0YWNrU3RhcnRG'@;
put 'bjpfdH0pO3Rocm93IHl0LmdlbmVyYXRlZE1lc3NhZ2U9b24seXR9fWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBIZT1hcmd1bWVudHMubGVuZ3RoLERlPW5ldyBBcnJheShIZSksa2U9MDtrZTxIZTtrZSsrKURlW2tlXT1hcmd1bWVudHNba2VdO2xlLmFwcGx5KHZvaWQgMCxbSWUsRGUubGVuZ3Ro'@;
put 'XS5jb25jYXQoRGUpKX1tLnRocm93cz1mdW5jdGlvbiBIZShEZSl7Zm9yKHZhciBrZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShrZT4xP2tlLTE6MCksbnQ9MTtudDxrZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07QWUuYXBwbHkodm9pZCAwLFtIZSx2ZShEZSldLmNvbmNh'@;
put 'dChfdCkpfSxtLnJlamVjdHM9ZnVuY3Rpb24gSGUoRGUpe2Zvcih2YXIga2U9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoa2U+MT9rZS0xOjApLG50PTE7bnQ8a2U7bnQrKylfdFtudC0xXT1hcmd1bWVudHNbbnRdO3JldHVybiBqZShEZSkudGhlbihmdW5jdGlvbihKZSl7cmV0dXJu'@;
put 'IEFlLmFwcGx5KHZvaWQgMCxbSGUsSmVdLmNvbmNhdChfdCkpfSl9LG0uZG9lc05vdFRocm93PWZ1bmN0aW9uIEhlKERlKXtmb3IodmFyIGtlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KGtlPjE/a2UtMTowKSxudD0xO250PGtlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtG'@;
put 'ZS5hcHBseSh2b2lkIDAsW0hlLHZlKERlKV0uY29uY2F0KF90KSl9LG0uZG9lc05vdFJlamVjdD1mdW5jdGlvbiBIZShEZSl7Zm9yKHZhciBrZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShrZT4xP2tlLTE6MCksbnQ9MTtudDxrZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07'@;
put 'cmV0dXJuIGplKERlKS50aGVuKGZ1bmN0aW9uKEplKXtyZXR1cm4gRmUuYXBwbHkodm9pZCAwLFtIZSxKZV0uY29uY2F0KF90KSl9KX0sbS5pZkVycm9yPWZ1bmN0aW9uIEhlKERlKXtpZihudWxsIT1EZSl7dmFyIGtlPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVj'@;
put 'dCI9PT1wKERlKSYmInN0cmluZyI9PXR5cGVvZiBEZS5tZXNzYWdlP2tlKz0wPT09RGUubWVzc2FnZS5sZW5ndGgmJkRlLmNvbnN0cnVjdG9yP0RlLmNvbnN0cnVjdG9yLm5hbWU6RGUubWVzc2FnZTprZSs9cShEZSk7dmFyIF90PW5ldyBYKHthY3R1YWw6RGUsZXhwZWN0ZWQ6bnVsbCxvcGVy'@;
put 'YXRvcjoiaWZFcnJvciIsbWVzc2FnZTprZSxzdGFja1N0YXJ0Rm46SGV9KSxudD1EZS5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIG50KXt2YXIgSmU9bnQuc3BsaXQoIlxuIik7SmUuc2hpZnQoKTtmb3IodmFyIG9uPV90LnN0YWNrLnNwbGl0KCJcbiIpLHl0PTA7eXQ8SmUubGVuZ3RoO3l0'@;
put 'Kyspe3ZhciBNdD1vbi5pbmRleE9mKEplW3l0XSk7aWYoLTEhPT1NdCl7b249b24uc2xpY2UoMCxNdCk7YnJlYWt9fV90LnN0YWNrPSIiLmNvbmNhdChvbi5qb2luKCJcbiIpLCJcbiIpLmNvbmNhdChKZS5qb2luKCJcbiIpKX10aHJvdyBfdH19LG0ubWF0Y2g9ZnVuY3Rpb24gSGUoRGUsa2Us'@;
put 'X3Qpe1JlKERlLGtlLF90LEhlLCJtYXRjaCIpfSxtLmRvZXNOb3RNYXRjaD1mdW5jdGlvbiBIZShEZSxrZSxfdCl7UmUoRGUsa2UsX3QsSGUsImRvZXNOb3RNYXRjaCIpfSxtLnN0cmljdD1nZShJZSxtLHtlcXVhbDptLnN0cmljdEVxdWFsLGRlZXBFcXVhbDptLmRlZXBTdHJpY3RFcXVhbCxu'@;
put 'b3RFcXVhbDptLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVhbDptLm5vdERlZXBTdHJpY3RFcXVhbH0pLG0uc3RyaWN0LnN0cmljdD1tLnN0cmljdH0sNTk2MTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO2Z1bmN0aW9uIF8oQSxhZSl7dmFyIG5lPU9iamVjdC5rZXlz'@;
put 'KEEpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBsZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEEpO2FlJiYobGU9bGUuZmlsdGVyKGZ1bmN0aW9uKHdlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBLHdlKS5lbnVtZXJhYmxlfSkp'@;
put 'LG5lLnB1c2guYXBwbHkobmUsbGUpfXJldHVybiBuZX1mdW5jdGlvbiBwKEEpe2Zvcih2YXIgYWU9MTthZTxhcmd1bWVudHMubGVuZ3RoO2FlKyspe3ZhciBuZT1udWxsIT1hcmd1bWVudHNbYWVdP2FyZ3VtZW50c1thZV06e307YWUlMj9fKE9iamVjdChuZSksITApLmZvckVhY2goZnVuY3Rp'@;
put 'b24obGUpe04oQSxsZSxuZVtsZV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuZSkpOl8oT2JqZWN0KG5lKSkuZm9yRWFjaChmdW5jdGlvbihsZSl7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEEsbGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuZSxsZSkpfSl9cmV0dXJuIEF9ZnVuY3Rpb24gTihBLGFlLG5lKXtyZXR1cm4oYWU9UihhZSkpaW4gQT9PYmplY3QuZGVmaW5lUHJvcGVydHkoQSxhZSx7dmFsdWU6bmUsZW51bWVyYWJsZTohMCxjb25m'@;
put 'aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpBW2FlXT1uZSxBfWZ1bmN0aW9uIEYoQSxhZSl7Zm9yKHZhciBuZT0wO25lPGFlLmxlbmd0aDtuZSsrKXt2YXIgbGU9YWVbbmVdO2xlLmVudW1lcmFibGU9bGUuZW51bWVyYWJsZXx8ITEsbGUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBsZSYm'@;
put 'KGxlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxSKGxlLmtleSksbGUpfX1mdW5jdGlvbiBSKEEpe3ZhciBhZT1mdW5jdGlvbiBqKEEsYWUpe2lmKCJvYmplY3QiIT09aWUoQSl8fG51bGw9PT1BKXJldHVybiBBO3ZhciBuZT1BW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo'@;
put 'dm9pZCAwIT09bmUpe3ZhciBsZT1uZS5jYWxsKEEsYWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1pZShsZSkpcmV0dXJuIGxlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09YWU/'@;
put 'U3RyaW5nOk51bWJlcikoQSl9KEEsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aWUoYWUpP2FlOlN0cmluZyhhZSl9ZnVuY3Rpb24gWShBLGFlKXtpZihhZSYmKCJvYmplY3QiPT09aWUoYWUpfHwiZnVuY3Rpb24iPT10eXBlb2YgYWUpKXJldHVybiBhZTtpZih2b2lkIDAhPT1hZSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBCKEEpfWZ1bmN0aW9uIEIoQSl7aWYodm9pZCAwPT09QSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlh'@;
put 'bGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBBfWZ1bmN0aW9uIFcoQSl7dmFyIGFlPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIFc9ZnVuY3Rpb24obGUpe2lmKG51bGw9PT1sZXx8IWZ1bmN0aW9uIFEoQSl7cmV0dXJuLTEh'@;
put 'PT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKEEpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX0obGUpKXJldHVybiBsZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24i'@;
put 'KTtpZih0eXBlb2YgYWU8InUiKXtpZihhZS5oYXMobGUpKXJldHVybiBhZS5nZXQobGUpO2FlLnNldChsZSx3ZSl9ZnVuY3Rpb24gd2UoKXtyZXR1cm4gWihsZSxhcmd1bWVudHMsdGUodGhpcykuY29uc3RydWN0b3IpfXJldHVybiB3ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsZS5wcm90'@;
put 'b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp3ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxxKHdlLGxlKX0sVyhBKX1mdW5jdGlvbiBaKEEsYWUsbmUpe3JldHVybihaPVgoKT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5kKCk6ZnVuY3Rpb24od2UsWmUsUWUp'@;
put 'e3ZhciBhdD1bbnVsbF07YXQucHVzaC5hcHBseShhdCxaZSk7dmFyIHZlPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KHdlLGF0KSk7cmV0dXJuIFFlJiZxKHZlLFFlLnByb3RvdHlwZSksdmV9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1'@;
put 'Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1'@;
put 'bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBxKEEsYWUpe3JldHVybihxPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGxlLHdlKXtyZXR1cm4gbGUuX19wcm90b19fPXdlLGxlfSkoQSxhZSl9ZnVuY3Rp'@;
put 'b24gdGUoQSl7cmV0dXJuKHRlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKG5lKXtyZXR1cm4gbmUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmUpfSkoQSl9ZnVuY3Rpb24gaWUoQSl7cmV0dXJuKGllPSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGFlKXtyZXR1cm4gdHlwZW9mIGFlfTpmdW5jdGlvbihhZSl7cmV0dXJuIGFlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYWUh'@;
put 'PT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhZX0pKEEpfXZhciBnZT1iKDk1MzkpLmluc3BlY3QsVGU9YigyMTM2KS5jb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5jdGlvbiBTZShBLGFlLG5lKXtyZXR1cm4odm9pZCAwPT09bmV8fG5lPkEubGVuZ3RoKSYmKG5lPUEu'@;
put 'bGVuZ3RoKSxBLnN1YnN0cmluZyhuZS1hZS5sZW5ndGgsbmUpPT09YWV9dmFyIHo9IiIsZz0iIix5PSIiLHg9IiIsQz17ZGVlcFN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUg'@;
put 'c3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6IixlcXVhbDoiRXhwZWN0ZWQgdmFs'@;
put 'dWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86Jyxub3RT'@;
put 'dHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOicsbm90RXF1YWw6J0V4cGVjdGVkICJh'@;
put 'Y3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElkZW50aWNhbDoiVmFsdWVzIGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5jZS1lcXVhbDoifTtmdW5jdGlvbiBWKEEpe3ZhciBhZT1PYmplY3Qua2V5cyhBKSxuZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVP'@;
put 'ZihBKSk7cmV0dXJuIGFlLmZvckVhY2goZnVuY3Rpb24obGUpe25lW2xlXT1BW2xlXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSwibWVzc2FnZSIse3ZhbHVlOkEubWVzc2FnZX0pLG5lfWZ1bmN0aW9uIFUoQSl7cmV0dXJuIGdlKEEse2NvbXBhY3Q6ITEsY3VzdG9tSW5zcGVjdDohMSxk'@;
put 'ZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBtPWZ1bmN0aW9uKEEsYWUpeyFmdW5jdGlvbiBQKEEsYWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhZSYmbnVsbCE9'@;
put 'PWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhZSYmYWUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSx3cml0YWJsZTohMCxjb25maWd1cmFi'@;
put 'bGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYWUmJnEoQSxhZSl9KGxlLEEpO3ZhciBuZT1mdW5jdGlvbiBMKEEpe3ZhciBhZT1YKCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHdlLGxlPXRlKEEpO2lmKGFlKXt2YXIgWmU9dGUodGhp'@;
put 'cykuY29uc3RydWN0b3I7d2U9UmVmbGVjdC5jb25zdHJ1Y3QobGUsYXJndW1lbnRzLFplKX1lbHNlIHdlPWxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gWSh0aGlzLHdlKX19KGxlKTtmdW5jdGlvbiBsZSh3ZSl7dmFyIFplO2lmKGZ1bmN0aW9uIHcoQSxhZSl7aWYoIShBIGluc3Rh'@;
put 'bmNlb2YgYWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGxlKSwib2JqZWN0IiE9PWllKHdlKXx8bnVsbD09PXdlKXRocm93IG5ldyBUZSgib3B0aW9ucyIsIk9iamVjdCIsd2UpO3ZhciBRZT13ZS5tZXNzYWdlLGF0PXdl'@;
put 'Lm9wZXJhdG9yLHhlPXdlLnN0YWNrU3RhcnRGbix2ZT13ZS5hY3R1YWwscWU9d2UuZXhwZWN0ZWQsamU9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0O2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD0wLG51bGwhPVFlKVplPW5lLmNhbGwodGhpcyxTdHJpbmcoUWUpKTtlbHNlIGlmKEQuc3RkZXJyJiZE'@;
put 'LnN0ZGVyci5pc1RUWSYmKEQuc3RkZXJyJiZELnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09RC5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyh6PSJceDFiWzM0bSIsZz0iXHgxYlszMm0iLHg9Ilx4MWJbMzltIix5PSJceDFiWzMxbSIpOih6PSIiLGc9IiIseD0iIix5PSIiKSksIm9iamVjdCI9'@;
put 'PT1pZSh2ZSkmJm51bGwhPT12ZSYmIm9iamVjdCI9PT1pZShxZSkmJm51bGwhPT1xZSYmInN0YWNrImluIHZlJiZ2ZSBpbnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4gcWUmJnFlIGluc3RhbmNlb2YgRXJyb3ImJih2ZT1WKHZlKSxxZT1WKHFlKSksImRlZXBTdHJpY3RFcXVhbCI9PT1hdHx8'@;
put 'InN0cmljdEVxdWFsIj09PWF0KVplPW5lLmNhbGwodGhpcyxmdW5jdGlvbiBFKEEsYWUsbmUpe3ZhciBsZT0iIix3ZT0iIixaZT0wLFFlPSIiLGF0PSExLHhlPVUoQSksdmU9eGUuc3BsaXQoIlxuIikscWU9VShhZSkuc3BsaXQoIlxuIiksamU9MCxBZT0iIjtpZigic3RyaWN0RXF1YWwiPT09'@;
put 'bmUmJiJvYmplY3QiPT09aWUoQSkmJiJvYmplY3QiPT09aWUoYWUpJiZudWxsIT09QSYmbnVsbCE9PWFlJiYobmU9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PXZlLmxlbmd0aCYmMT09PXFlLmxlbmd0aCYmdmVbMF0hPT1xZVswXSl7dmFyIEZlPXZlWzBdLmxlbmd0aCtxZVswXS5sZW5ndGg7'@;
put 'aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09aWUoQSkmJm51bGwhPT1BfHwib2JqZWN0Ij09PWllKGFlKSYmbnVsbCE9PWFlfHwwPT09QSYmMD09PWFlKSlyZXR1cm4iIi5jb25jYXQoQ1tuZV0sIlxuXG4iKSsiIi5jb25jYXQodmVbMF0sIiAhPT0gIikuY29uY2F0KHFlWzBdLCJcbiIpfWVs'@;
put 'c2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PW5lJiZGZTwoRC5zdGRlcnImJkQuc3RkZXJyLmlzVFRZP0Quc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO3ZlWzBdW2plXT09PXFlWzBdW2plXTspamUrKztqZT4yJiYoQWU9IlxuICAiLmNvbmNhdChmdW5jdGlvbiB6ZShBLGFlKXtpZihhZT1N'@;
put 'YXRoLmZsb29yKGFlKSwwPT1BLmxlbmd0aHx8MD09YWUpcmV0dXJuIiI7dmFyIG5lPUEubGVuZ3RoKmFlO2ZvcihhZT1NYXRoLmZsb29yKE1hdGgubG9nKGFlKS9NYXRoLmxvZygyKSk7YWU7KUErPUEsYWUtLTtyZXR1cm4gQStBLnN1YnN0cmluZygwLG5lLUEubGVuZ3RoKX0oIiAiLGplKSwi'@;
put 'XiIpLGplPTApfX1mb3IodmFyIEllPXZlW3ZlLmxlbmd0aC0xXSxIZT1xZVtxZS5sZW5ndGgtMV07SWU9PT1IZSYmKGplKys8Mj9RZT0iXG4gICIuY29uY2F0KEllKS5jb25jYXQoUWUpOmxlPUllLHZlLnBvcCgpLHFlLnBvcCgpLDAhPT12ZS5sZW5ndGgmJjAhPT1xZS5sZW5ndGgpOylJZT12'@;
put 'ZVt2ZS5sZW5ndGgtMV0sSGU9cWVbcWUubGVuZ3RoLTFdO3ZhciBEZT1NYXRoLm1heCh2ZS5sZW5ndGgscWUubGVuZ3RoKTtpZigwPT09RGUpe3ZhciBrZT14ZS5zcGxpdCgiXG4iKTtpZihrZS5sZW5ndGg+MzApZm9yKGtlWzI2XT0iIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpO2tlLmxl'@;
put 'bmd0aD4yNzspa2UucG9wKCk7cmV0dXJuIiIuY29uY2F0KEMubm90SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KGtlLmpvaW4oIlxuIiksIlxuIil9amU+MyYmKFFlPSJcbiIuY29uY2F0KHosIi4uLiIpLmNvbmNhdCh4KS5jb25jYXQoUWUpLGF0PSEwKSwiIiE9PWxlJiYoUWU9IlxuICAiLmNv'@;
put 'bmNhdChsZSkuY29uY2F0KFFlKSxsZT0iIik7dmFyIF90PTAsbnQ9Q1tuZV0rIlxuIi5jb25jYXQoZywiKyBhY3R1YWwiKS5jb25jYXQoeCwiICIpLmNvbmNhdCh5LCItIGV4cGVjdGVkIikuY29uY2F0KHgpLEplPSIgIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgsIiBMaW5lcyBza2lwcGVk'@;
put 'Iik7Zm9yKGplPTA7amU8RGU7amUrKyl7dmFyIG9uPWplLVplO2lmKHZlLmxlbmd0aDxqZSsxKW9uPjEmJmplPjImJihvbj40Pyh3ZSs9IlxuIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpLGF0PSEwKTpvbj4zJiYod2UrPSJcbiAgIi5jb25jYXQocWVbamUtMl0pLF90KyspLHdlKz0iXG4g'@;
put 'ICIuY29uY2F0KHFlW2plLTFdKSxfdCsrKSxaZT1qZSxsZSs9IlxuIi5jb25jYXQoeSwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHFlW2plXSksX3QrKztlbHNlIGlmKHFlLmxlbmd0aDxqZSsxKW9uPjEmJmplPjImJihvbj40Pyh3ZSs9IlxuIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgp'@;
put 'LGF0PSEwKTpvbj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbamUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW2plLTFdKSxfdCsrKSxaZT1qZSx3ZSs9IlxuIi5jb25jYXQoZywiKyIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHZlW2plXSksX3QrKztlbHNle3ZhciB5dD1xZVtqZV0s'@;
put 'TXQ9dmVbamVdLEl0PU10IT09eXQmJighU2UoTXQsIiwiKXx8TXQuc2xpY2UoMCwtMSkhPT15dCk7SXQmJlNlKHl0LCIsIikmJnl0LnNsaWNlKDAsLTEpPT09TXQmJihJdD0hMSxNdCs9IiwiKSxJdD8ob24+MSYmamU+MiYmKG9uPjQ/KHdlKz0iXG4iLmNvbmNhdCh6LCIuLi4iKS5jb25jYXQo'@;
put 'eCksYXQ9ITApOm9uPjMmJih3ZSs9IlxuICAiLmNvbmNhdCh2ZVtqZS0yXSksX3QrKyksd2UrPSJcbiAgIi5jb25jYXQodmVbamUtMV0pLF90KyspLFplPWplLHdlKz0iXG4iLmNvbmNhdChnLCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQoTXQpLGxlKz0iXG4iLmNvbmNhdCh5LCItIikuY29u'@;
put 'Y2F0KHgsIiAiKS5jb25jYXQoeXQpLF90Kz0yKTood2UrPWxlLGxlPSIiLCgxPT09b258fDA9PT1qZSkmJih3ZSs9IlxuICAiLmNvbmNhdChNdCksX3QrKykpfWlmKF90PjIwJiZqZTxEZS0yKXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KEplLCJcbiIpLmNvbmNhdCh3ZSwiXG4iKS5jb25j'@;
put 'YXQoeiwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChsZSwiXG4iKSsiIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpfXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KGF0P0plOiIiLCJcbiIpLmNvbmNhdCh3ZSkuY29uY2F0KGxlKS5jb25jYXQoUWUpLmNvbmNhdChBZSl9KHZlLHFlLGF0KSk7'@;
put 'ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PWF0fHwibm90U3RyaWN0RXF1YWwiPT09YXQpe3ZhciBBZT1DW2F0XSxGZT1VKHZlKS5zcGxpdCgiXG4iKTtpZigibm90U3RyaWN0RXF1YWwiPT09YXQmJiJvYmplY3QiPT09aWUodmUpJiZudWxsIT09dmUmJihBZT1DLm5vdFN0cmljdEVx'@;
put 'dWFsT2JqZWN0KSxGZS5sZW5ndGg+MzApZm9yKEZlWzI2XT0iIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpO0ZlLmxlbmd0aD4yNzspRmUucG9wKCk7WmU9bmUuY2FsbCh0aGlzLDE9PT1GZS5sZW5ndGg/IiIuY29uY2F0KEFlLCIgIikuY29uY2F0KEZlWzBdKToiIi5jb25jYXQoQWUsIlxu'@;
put 'XG4iKS5jb25jYXQoRmUuam9pbigiXG4iKSwiXG4iKSl9ZWxzZXt2YXIgUmU9VSh2ZSksSWU9IiIsSGU9Q1thdF07Im5vdERlZXBFcXVhbCI9PT1hdHx8Im5vdEVxdWFsIj09PWF0PyhSZT0iIi5jb25jYXQoQ1thdF0sIlxuXG4iKS5jb25jYXQoUmUpKS5sZW5ndGg+MTAyNCYmKFJlPSIiLmNv'@;
put 'bmNhdChSZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KEllPSIiLmNvbmNhdChVKHFlKSksUmUubGVuZ3RoPjUxMiYmKFJlPSIiLmNvbmNhdChSZS5zbGljZSgwLDUwOSksIi4uLiIpKSxJZS5sZW5ndGg+NTEyJiYoSWU9IiIuY29uY2F0KEllLnNsaWNlKDAsNTA5KSwiLi4uIikpLCJkZWVwRXF1'@;
put 'YWwiPT09YXR8fCJlcXVhbCI9PT1hdD9SZT0iIi5jb25jYXQoSGUsIlxuXG4iKS5jb25jYXQoUmUsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6SWU9IiAiLmNvbmNhdChhdCwiICIpLmNvbmNhdChJZSkpLFplPW5lLmNhbGwodGhpcywiIi5jb25jYXQoUmUpLmNvbmNhdChJZSkpfXJldHVybiBF'@;
put 'cnJvci5zdGFja1RyYWNlTGltaXQ9amUsWmUuZ2VuZXJhdGVkTWVzc2FnZT0hUWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KEIoWmUpLCJuYW1lIix7dmFsdWU6IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9'@;
put 'KSxaZS5jb2RlPSJFUlJfQVNTRVJUSU9OIixaZS5hY3R1YWw9dmUsWmUuZXhwZWN0ZWQ9cWUsWmUub3BlcmF0b3I9YXQsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKEIoWmUpLHhlKSxaZS5uYW1lPSJBc3NlcnRpb25FcnJvciIsWShaZSl9cmV0dXJu'@;
put 'IGZ1bmN0aW9uIEgoQSxhZSxuZSl7YWUmJkYoQS5wcm90b3R5cGUsYWUpLG5lJiZGKEEsbmUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsZSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMu'@;
put 'bmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6YWUsdmFsdWU6ZnVuY3Rpb24oWmUsUWUpe3JldHVybiBnZSh0aGlzLHAocCh7fSxRZSkse30se2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0pKX19XSksbGV9KFcoRXJyb3IpLGdl'@;
put 'LmN1c3RvbSk7Y2UuZXhwb3J0cz1tfSwyMTM2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQoZ2Upe3JldHVybihEPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKF9lKXtyZXR1cm4gdHlwZW9mIF9l'@;
put 'fTpmdW5jdGlvbihfZSl7cmV0dXJuIF9lJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZfZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmX2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBfZX0pKGdlKX1mdW5jdGlvbiBfKGdlLF9lKXtmb3IodmFyIFRlPTA7VGU8X2UubGVu'@;
put 'Z3RoO1RlKyspe3ZhciBTZT1fZVtUZV07U2UuZW51bWVyYWJsZT1TZS5lbnVtZXJhYmxlfHwhMSxTZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFNlJiYoU2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZSxOKFNlLmtleSksU2UpfX1mdW5jdGlvbiBOKGdlKXt2YXIg'@;
put 'X2U9ZnVuY3Rpb24gdyhnZSxfZSl7aWYoIm9iamVjdCIhPT1EKGdlKXx8bnVsbD09PWdlKXJldHVybiBnZTt2YXIgVGU9Z2VbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1UZSl7dmFyIFNlPVRlLmNhbGwoZ2UsX2V8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1EKFNlKSlyZXR1'@;
put 'cm4gU2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1fZT9TdHJpbmc6TnVtYmVyKShnZSl9KGdlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUQoX2UpP19lOlN0cmluZyhfZSl9'@;
put 'ZnVuY3Rpb24gUihnZSxfZSl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oU2UsemUpe3JldHVybiBTZS5fX3Byb3RvX189emUsU2V9KShnZSxfZSl9ZnVuY3Rpb24gQihnZSl7cmV0dXJuKEI9T2JqZWN0LnNldFBy'@;
put 'b3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oVGUpe3JldHVybiBUZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihUZSl9KShnZSl9dmFyIFosWCxXPXt9O2Z1bmN0aW9uIFEoZ2UsX2UsVGUpe1RlfHwoVGU9RXJyb3IpO3ZhciB6ZT1mdW5j'@;
put 'dGlvbih6KXshZnVuY3Rpb24gSChnZSxfZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lJiZudWxsIT09X2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtnZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShf'@;
put 'ZSYmX2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6Z2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxfZSYmUihnZSxfZSl9KHkseik7dmFyIGc9ZnVuY3Rpb24gaihnZSl7dmFy'@;
put 'IF9lPWZ1bmN0aW9uIFkoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9m'@;
put 'LmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHplLFNlPUIoZ2UpO2lmKF9lKXt2YXIgej1CKHRoaXMpLmNvbnN0cnVjdG9yO3plPVJlZmxlY3QuY29uc3RydWN0KFNlLGFy'@;
put 'Z3VtZW50cyx6KX1lbHNlIHplPVNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gUChnZSxfZSl7aWYoX2UmJigib2JqZWN0Ij09PUQoX2UpfHwiZnVuY3Rpb24iPT10eXBlb2YgX2UpKXJldHVybiBfZTtpZih2b2lkIDAhPT1fZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJE'@;
put 'ZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBMKGdlKXtpZih2b2lkIDA9PT1nZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24n'@;
put 'dCBiZWVuIGNhbGxlZCIpO3JldHVybiBnZX0oZ2UpfSh0aGlzLHplKX19KHkpO2Z1bmN0aW9uIHkoeCxDLFQpe3ZhciBWO3JldHVybiBmdW5jdGlvbiBGKGdlLF9lKXtpZighKGdlIGluc3RhbmNlb2YgX2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBm'@;
put 'dW5jdGlvbiIpfSh0aGlzLHkpLFY9Zy5jYWxsKHRoaXMsZnVuY3Rpb24gU2UoeixnLHkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgX2U/X2U6X2UoeixnLHkpfSh4LEMsVCkpLFYuY29kZT1nZSxWfXJldHVybiBmdW5jdGlvbiBwKGdlLF9lLFRlKXtyZXR1cm4gX2UmJl8oZ2UucHJvdG90eXBl'@;
put 'LF9lKSxUZSYmXyhnZSxUZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGdlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGdlfSh5KX0oVGUpO1dbZ2VdPXplfWZ1bmN0aW9uIHEoZ2UsX2Upe2lmKEFycmF5LmlzQXJyYXkoZ2UpKXt2YXIgVGU9Z2UubGVuZ3RoO3JldHVybiBnZT1nZS5tYXAo'@;
put 'ZnVuY3Rpb24oU2Upe3JldHVybiBTdHJpbmcoU2UpfSksVGU+Mj8ib25lIG9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KGdlLnNsaWNlKDAsVGUtMSkuam9pbigiLCAiKSwiLCBvciAiKStnZVtUZS0xXToyPT09VGU/Im9uZSBvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChnZVswXSwiIG9y'@;
put 'ICIpLmNvbmNhdChnZVsxXSk6Im9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KGdlWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQoU3RyaW5nKGdlKSl9USgiRVJSX0FNQklHVU9VU19BUkdVTUVOVCIsJ1RoZSAiJXMiIGFyZ3VtZW50IGlzIGFtYmlndW91cy4gJXMnLFR5'@;
put 'cGVFcnJvciksUSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKGdlLF9lLFRlKXt2YXIgU2UsemU7aWYodm9pZCAwPT09WiYmKFo9Yig5MjgyKSksWigic3RyaW5nIj09dHlwZW9mIGdlLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgX2UmJmZ1bmN0'@;
put 'aW9uIHRlKGdlLF9lLFRlKXtyZXR1cm4gZ2Uuc3Vic3RyKCFUZXx8VGU8MD8wOitUZSxfZS5sZW5ndGgpPT09X2V9KF9lLCJub3QgIik/KFNlPSJtdXN0IG5vdCBiZSIsX2U9X2UucmVwbGFjZSgvXm5vdCAvLCIiKSk6U2U9Im11c3QgYmUiLGZ1bmN0aW9uIGllKGdlLF9lLFRlKXtyZXR1cm4o'@;
put 'dm9pZCAwPT09VGV8fFRlPmdlLmxlbmd0aCkmJihUZT1nZS5sZW5ndGgpLGdlLnN1YnN0cmluZyhUZS1fZS5sZW5ndGgsVGUpPT09X2V9KGdlLCIgYXJndW1lbnQiKSl6ZT0iVGhlICIuY29uY2F0KGdlLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KHEoX2UsInR5cGUiKSk7ZWxzZXt2YXIg'@;
put 'ej1mdW5jdGlvbiBzZShnZSxfZSxUZSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBUZSYmKFRlPTApLCEoVGUrX2UubGVuZ3RoPmdlLmxlbmd0aCkmJi0xIT09Z2UuaW5kZXhPZihfZSxUZSl9KGdlLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO3plPSdUaGUgIicuY29uY2F0KGdlLCciICcp'@;
put 'LmNvbmNhdCh6LCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KHEoX2UsInR5cGUiKSl9cmV0dXJuIHplKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoRChUZSkpfSxUeXBlRXJyb3IpLFEoIkVSUl9JTlZBTElEX0FSR19WQUxVRSIsZnVuY3Rpb24oZ2UsX2Upe3ZhciBUZT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PVgmJihYPWIoOTUzOSkpO3ZhciBTZT1YLmluc3BlY3QoX2UpO3JldHVybiBTZS5sZW5ndGg+MTI4JiYoU2U9IiIuY29uY2F0KFNlLnNsaWNlKDAsMTI4KSwiLi4uIikpLCJU'@;
put 'aGUgYXJndW1lbnQgJyIuY29uY2F0KGdlLCInICIpLmNvbmNhdChUZSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoU2UpfSxUeXBlRXJyb3IsUmFuZ2VFcnJvciksUSgiRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFIixmdW5jdGlvbihnZSxfZSxUZSl7dmFyIFNlO3JldHVybiBTZT1UZSYmVGUuY29u'@;
put 'c3RydWN0b3ImJlRlLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KFRlLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29uY2F0KEQoVGUpKSwiRXhwZWN0ZWQgIi5jb25jYXQoZ2UsJyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJykuY29uY2F0KF9lLCciJykrIiBm'@;
put 'dW5jdGlvbiBidXQgZ290ICIuY29uY2F0KFNlLCIuIil9LFR5cGVFcnJvciksUSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIGdlPWFyZ3VtZW50cy5sZW5ndGgsX2U9bmV3IEFycmF5KGdlKSxUZT0wO1RlPGdlO1RlKyspX2VbVGVdPWFyZ3VtZW50c1tUZV07dm9pZCAw'@;
put 'PT09WiYmKFo9Yig5MjgyKSksWihfZS5sZW5ndGg+MCwiQXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQiKTt2YXIgU2U9IlRoZSAiLHplPV9lLmxlbmd0aDtzd2l0Y2goX2U9X2UubWFwKGZ1bmN0aW9uKHope3JldHVybiciJy5jb25jYXQoeiwnIicpfSksemUpe2Nhc2Ug'@;
put 'MTpTZSs9IiIuY29uY2F0KF9lWzBdLCIgYXJndW1lbnQiKTticmVhaztjYXNlIDI6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFuZCAiKS5jb25jYXQoX2VbMV0sIiBhcmd1bWVudHMiKTticmVhaztkZWZhdWx0OlNlKz1fZS5zbGljZSgwLHplLTEpLmpvaW4oIiwgIiksU2UrPSIsIGFuZCAiLmNv'@;
put 'bmNhdChfZVt6ZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVybiIiLmNvbmNhdChTZSwiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVFcnJvciksY2UuZXhwb3J0cy5jb2Rlcz1XfSw5MTU4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQoSXQscnQpe3JldHVybiBmdW5jdGlvbiBG'@;
put 'KEl0KXtpZihBcnJheS5pc0FycmF5KEl0KSlyZXR1cm4gSXR9KEl0KXx8ZnVuY3Rpb24gdyhJdCxydCl7dmFyIEtlPW51bGw9PUl0P251bGw6dHlwZW9mIFN5bWJvbDwidSImJkl0W1N5bWJvbC5pdGVyYXRvcl18fEl0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9S2Upe3ZhciB0dCxOZSx1dCxK'@;
put 'dCxMdD1bXSxQdD0hMCxvaT0hMTt0cnl7aWYodXQ9KEtlPUtlLmNhbGwoSXQpKS5uZXh0LDA9PT1ydCl7aWYoT2JqZWN0KEtlKSE9PUtlKXJldHVybjtQdD0hMX1lbHNlIGZvcig7IShQdD0odHQ9dXQuY2FsbChLZSkpLmRvbmUpJiYoTHQucHVzaCh0dC52YWx1ZSksTHQubGVuZ3RoIT09cnQp'@;
put 'O1B0PSEwKTt9Y2F0Y2goZW4pe29pPSEwLE5lPWVufWZpbmFsbHl7dHJ5e2lmKCFQdCYmbnVsbCE9S2UucmV0dXJuJiYoSnQ9S2UucmV0dXJuKCksT2JqZWN0KEp0KSE9PUp0KSlyZXR1cm59ZmluYWxseXtpZihvaSl0aHJvdyBOZX19cmV0dXJuIEx0fX0oSXQscnQpfHxmdW5jdGlvbiBwKEl0'@;
put 'LHJ0KXtpZihJdCl7aWYoInN0cmluZyI9PXR5cGVvZiBJdClyZXR1cm4gTihJdCxydCk7dmFyIEtlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJdCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1LZSYmSXQuY29uc3RydWN0b3ImJihLZT1JdC5jb25zdHJ1Y3Rvci5uYW1lKSwi'@;
put 'TWFwIj09PUtlfHwiU2V0Ij09PUtlKXJldHVybiBBcnJheS5mcm9tKEl0KTtpZigiQXJndW1lbnRzIj09PUtlfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChLZSkpcmV0dXJuIE4oSXQscnQpfX0oSXQscnQpfHxmdW5jdGlvbiBfKCl7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBO'@;
put 'KEl0LHJ0KXsobnVsbD09cnR8fHJ0Pkl0Lmxlbmd0aCkmJihydD1JdC5sZW5ndGgpO2Zvcih2YXIgS2U9MCx0dD1uZXcgQXJyYXkocnQpO0tlPHJ0O0tlKyspdHRbS2VdPUl0W0tlXTtyZXR1cm4gdHR9ZnVuY3Rpb24gSChJdCl7cmV0dXJuKEg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm'@;
put 'InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocnQpe3JldHVybiB0eXBlb2YgcnR9OmZ1bmN0aW9uKHJ0KXtyZXR1cm4gcnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnJ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZydCE9PVN5bWJvbC5wcm90b3R5cGU/InN5'@;
put 'bWJvbCI6dHlwZW9mIHJ0fSkoSXQpfXZhciBSPXZvaWQgMCE9PS9hL2cuZmxhZ3Msaj1mdW5jdGlvbihydCl7dmFyIEtlPVtdO3JldHVybiBydC5mb3JFYWNoKGZ1bmN0aW9uKHR0KXtyZXR1cm4gS2UucHVzaCh0dCl9KSxLZX0sUD1mdW5jdGlvbihydCl7dmFyIEtlPVtdO3JldHVybiBydC5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gS2UucHVzaChbTmUsdHRdKX0pLEtlfSxMPU9iamVjdC5pcz9PYmplY3QuaXM6Yig2MDkpLFk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKCl7cmV0dXJuW119LEI9'@;
put 'TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjpiKDM2MCk7ZnVuY3Rpb24gVyhJdCl7cmV0dXJuIEl0LmNhbGwuYmluZChJdCl9dmFyIFo9VyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxYPVcoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSksUT1XKE9iamVj'@;
put 'dC5wcm90b3R5cGUudG9TdHJpbmcpLHE9Yig5NTM5KS50eXBlcyx0ZT1xLmlzQW55QXJyYXlCdWZmZXIsaWU9cS5pc0FycmF5QnVmZmVyVmlldyxzZT1xLmlzRGF0ZSxnZT1xLmlzTWFwLF9lPXEuaXNSZWdFeHAsVGU9cS5pc1NldCxTZT1xLmlzTmF0aXZlRXJyb3IsemU9cS5pc0JveGVkUHJp'@;
put 'bWl0aXZlLHo9cS5pc051bWJlck9iamVjdCxnPXEuaXNTdHJpbmdPYmplY3QseT1xLmlzQm9vbGVhbk9iamVjdCx4PXEuaXNCaWdJbnRPYmplY3QsQz1xLmlzU3ltYm9sT2JqZWN0LFQ9cS5pc0Zsb2F0MzJBcnJheSxWPXEuaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gVShJdCl7aWYoMD09PUl0'@;
put 'Lmxlbmd0aHx8SXQubGVuZ3RoPjEwKXJldHVybiEwO2Zvcih2YXIgcnQ9MDtydDxJdC5sZW5ndGg7cnQrKyl7dmFyIEtlPUl0LmNoYXJDb2RlQXQocnQpO2lmKEtlPDQ4fHxLZT41NylyZXR1cm4hMH1yZXR1cm4gMTA9PT1JdC5sZW5ndGgmJkl0Pj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBF'@;
put 'KEl0KXtyZXR1cm4gT2JqZWN0LmtleXMoSXQpLmZpbHRlcihVKS5jb25jYXQoWShJdCkuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChJdCkpKX1mdW5jdGlvbiBtKEl0LHJ0KXtpZihJdD09PXJ0KXJldHVybiAwO2Zvcih2YXIgS2U9SXQubGVuZ3Ro'@;
put 'LHR0PXJ0Lmxlbmd0aCxOZT0wLHV0PU1hdGgubWluKEtlLHR0KTtOZTx1dDsrK05lKWlmKEl0W05lXSE9PXJ0W05lXSl7S2U9SXRbTmVdLHR0PXJ0W05lXTticmVha31yZXR1cm4gS2U8dHQ/LTE6dHQ8S2U/MTowfXZhciBsZT0wLHdlPTEsWmU9MixRZT0zO2Z1bmN0aW9uIEFlKEl0LHJ0LEtl'@;
put 'LHR0KXtpZihJdD09PXJ0KXJldHVybiAwIT09SXR8fCFLZXx8TChJdCxydCk7aWYoS2Upe2lmKCJvYmplY3QiIT09SChJdCkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBJdCYmQihJdCkmJkIocnQpO2lmKCJvYmplY3QiIT09SChydCl8fG51bGw9PT1JdHx8bnVsbD09PXJ0fHxPYmplY3QuZ2V0'@;
put 'UHJvdG90eXBlT2YoSXQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHJ0KSlyZXR1cm4hMX1lbHNle2lmKG51bGw9PT1JdHx8Im9iamVjdCIhPT1IKEl0KSlyZXR1cm4obnVsbD09PXJ0fHwib2JqZWN0IiE9PUgocnQpKSYmSXQ9PXJ0O2lmKG51bGw9PT1ydHx8Im9iamVjdCIhPT1IKHJ0KSly'@;
put 'ZXR1cm4hMX12YXIgTmU9UShJdCk7aWYoTmUhPT1RKHJ0KSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KEl0KSl7aWYoSXQubGVuZ3RoIT09cnQubGVuZ3RoKXJldHVybiExO3ZhciBKdD1FKEl0KSxMdD1FKHJ0KTtyZXR1cm4gSnQubGVuZ3RoPT09THQubGVuZ3RoJiZSZShJdCxydCxLZSx0'@;
put 'dCx3ZSxKdCl9aWYoIltvYmplY3QgT2JqZWN0XSI9PT1OZSYmKCFnZShJdCkmJmdlKHJ0KXx8IVRlKEl0KSYmVGUocnQpKSlyZXR1cm4hMTtpZihzZShJdCkpe2lmKCFzZShydCl8fERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChJdCkhPT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwo'@;
put 'cnQpKXJldHVybiExfWVsc2UgaWYoX2UoSXQpKXtpZighX2UocnQpfHwhZnVuY3Rpb24gYXQoSXQscnQpe3JldHVybiBSP0l0LnNvdXJjZT09PXJ0LnNvdXJjZSYmSXQuZmxhZ3M9PT1ydC5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSXQpPT09UmVnRXhwLnByb3RvdHlw'@;
put 'ZS50b1N0cmluZy5jYWxsKHJ0KX0oSXQscnQpKXJldHVybiExfWVsc2UgaWYoU2UoSXQpfHxJdCBpbnN0YW5jZW9mIEVycm9yKXtpZihJdC5tZXNzYWdlIT09cnQubWVzc2FnZXx8SXQubmFtZSE9PXJ0Lm5hbWUpcmV0dXJuITF9ZWxzZXtpZihpZShJdCkpe2lmKEtlfHwhVChJdCkmJiFWKEl0'@;
put 'KSl7aWYoIWZ1bmN0aW9uIHZlKEl0LHJ0KXtyZXR1cm4gSXQuYnl0ZUxlbmd0aD09PXJ0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KEl0LmJ1ZmZlcixJdC5ieXRlT2Zmc2V0LEl0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFycmF5KHJ0LmJ1ZmZlcixydC5ieXRlT2Zmc2V0LHJ0'@;
put 'LmJ5dGVMZW5ndGgpKX0oSXQscnQpKXJldHVybiExfWVsc2UgaWYoIWZ1bmN0aW9uIHhlKEl0LHJ0KXtpZihJdC5ieXRlTGVuZ3RoIT09cnQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFyIEtlPTA7S2U8SXQuYnl0ZUxlbmd0aDtLZSsrKWlmKEl0W0tlXSE9PXJ0W0tlXSlyZXR1cm4hMTty'@;
put 'ZXR1cm4hMH0oSXQscnQpKXJldHVybiExO3ZhciBQdD1FKEl0KSxvaT1FKHJ0KTtyZXR1cm4gUHQubGVuZ3RoPT09b2kubGVuZ3RoJiZSZShJdCxydCxLZSx0dCxsZSxQdCl9aWYoVGUoSXQpKXJldHVybiEoIVRlKHJ0KXx8SXQuc2l6ZSE9PXJ0LnNpemUpJiZSZShJdCxydCxLZSx0dCxaZSk7'@;
put 'aWYoZ2UoSXQpKXJldHVybiEoIWdlKHJ0KXx8SXQuc2l6ZSE9PXJ0LnNpemUpJiZSZShJdCxydCxLZSx0dCxRZSk7aWYodGUoSXQpKXtpZighZnVuY3Rpb24gcWUoSXQscnQpe3JldHVybiBJdC5ieXRlTGVuZ3RoPT09cnQuYnl0ZUxlbmd0aCYmMD09PW0obmV3IFVpbnQ4QXJyYXkoSXQpLG5l'@;
put 'dyBVaW50OEFycmF5KHJ0KSl9KEl0LHJ0KSlyZXR1cm4hMX1lbHNlIGlmKHplKEl0KSYmIWZ1bmN0aW9uIGplKEl0LHJ0KXtyZXR1cm4geihJdCk/eihydCkmJkwoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSXQpLE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHJ0KSk6ZyhJ'@;
put 'dCk/ZyhydCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEl0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHJ0KTp5KEl0KT95KHJ0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEl0KT09PUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChydCk6'@;
put 'eChJdCk/eChydCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEl0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHJ0KTpDKHJ0KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSXQpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwocnQpfShJdCxy'@;
put 'dCkpcmV0dXJuITF9cmV0dXJuIFJlKEl0LHJ0LEtlLHR0LGxlKX1mdW5jdGlvbiBGZShJdCxydCl7cmV0dXJuIHJ0LmZpbHRlcihmdW5jdGlvbihLZSl7cmV0dXJuIFgoSXQsS2UpfSl9ZnVuY3Rpb24gUmUoSXQscnQsS2UsdHQsTmUsdXQpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXt1dD1P'@;
put 'YmplY3Qua2V5cyhJdCk7dmFyIEp0PU9iamVjdC5rZXlzKHJ0KTtpZih1dC5sZW5ndGghPT1KdC5sZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBMdD0wO0x0PHV0Lmxlbmd0aDtMdCsrKWlmKCFaKHJ0LHV0W0x0XSkpcmV0dXJuITE7aWYoS2UmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgUHQ9'@;
put 'WShJdCk7aWYoMCE9PVB0Lmxlbmd0aCl7dmFyIG9pPTA7Zm9yKEx0PTA7THQ8UHQubGVuZ3RoO0x0Kyspe3ZhciBlbj1QdFtMdF07aWYoWChJdCxlbikpe2lmKCFYKHJ0LGVuKSlyZXR1cm4hMTt1dC5wdXNoKGVuKSxvaSsrfWVsc2UgaWYoWChydCxlbikpcmV0dXJuITF9dmFyIHNuPVkocnQp'@;
put 'O2lmKFB0Lmxlbmd0aCE9PXNuLmxlbmd0aCYmRmUocnQsc24pLmxlbmd0aCE9PW9pKXJldHVybiExfWVsc2V7dmFyIElpPVkocnQpO2lmKDAhPT1JaS5sZW5ndGgmJjAhPT1GZShydCxJaSkubGVuZ3RoKXJldHVybiExfX1pZigwPT09dXQubGVuZ3RoJiYoTmU9PT1sZXx8TmU9PT13ZSYmMD09'@;
put 'PUl0Lmxlbmd0aHx8MD09PUl0LnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PXR0KXR0PXt2YWwxOm5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIGRuPXR0LnZhbDEuZ2V0KEl0KTtpZih2b2lkIDAhPT1kbil7dmFyIGZ0PXR0LnZhbDIuZ2V0KHJ0KTtpZih2b2lk'@;
put 'IDAhPT1mdClyZXR1cm4gZG49PT1mdH10dC5wb3NpdGlvbisrfXR0LnZhbDEuc2V0KEl0LHR0LnBvc2l0aW9uKSx0dC52YWwyLnNldChydCx0dC5wb3NpdGlvbik7dmFyIEZyPWZ1bmN0aW9uIG9uKEl0LHJ0LEtlLHR0LE5lLHV0KXt2YXIgSnQ9MDtpZih1dD09PVplKXtpZighZnVuY3Rpb24g'@;
put 'X3QoSXQscnQsS2UsdHQpe2Zvcih2YXIgTmU9bnVsbCx1dD1qKEl0KSxKdD0wO0p0PHV0Lmxlbmd0aDtKdCsrKXt2YXIgTHQ9dXRbSnRdO2lmKCJvYmplY3QiPT09SChMdCkmJm51bGwhPT1MdCludWxsPT09TmUmJihOZT1uZXcgU2V0KSxOZS5hZGQoTHQpO2Vsc2UgaWYoIXJ0LmhhcyhMdCkp'@;
put 'e2lmKEtlfHwhRGUoSXQscnQsTHQpKXJldHVybiExO251bGw9PT1OZSYmKE5lPW5ldyBTZXQpLE5lLmFkZChMdCl9fWlmKG51bGwhPT1OZSl7Zm9yKHZhciBQdD1qKHJ0KSxvaT0wO29pPFB0Lmxlbmd0aDtvaSsrKXt2YXIgZW49UHRbb2ldO2lmKCJvYmplY3QiPT09SChlbikmJm51bGwhPT1l'@;
put 'bil7aWYoIUllKE5lLGVuLEtlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCFLZSYmIUl0LmhhcyhlbikmJiFJZShOZSxlbixLZSx0dCkpcmV0dXJuITF9cmV0dXJuIDA9PT1OZS5zaXplfXJldHVybiEwfShJdCxydCxLZSxOZSkpcmV0dXJuITF9ZWxzZSBpZih1dD09PVFlKXtpZighZnVuY3Rpb24g'@;
put 'SmUoSXQscnQsS2UsdHQpe2Zvcih2YXIgTmU9bnVsbCx1dD1QKEl0KSxKdD0wO0p0PHV0Lmxlbmd0aDtKdCsrKXt2YXIgTHQ9RCh1dFtKdF0sMiksUHQ9THRbMF0sb2k9THRbMV07aWYoIm9iamVjdCI9PT1IKFB0KSYmbnVsbCE9PVB0KW51bGw9PT1OZSYmKE5lPW5ldyBTZXQpLE5lLmFkZChQ'@;
put 'dCk7ZWxzZXt2YXIgZW49cnQuZ2V0KFB0KTtpZih2b2lkIDA9PT1lbiYmIXJ0LmhhcyhQdCl8fCFBZShvaSxlbixLZSx0dCkpe2lmKEtlfHwha2UoSXQscnQsUHQsb2ksdHQpKXJldHVybiExO251bGw9PT1OZSYmKE5lPW5ldyBTZXQpLE5lLmFkZChQdCl9fX1pZihudWxsIT09TmUpe2Zvcih2'@;
put 'YXIgc249UChydCksSWk9MDtJaTxzbi5sZW5ndGg7SWkrKyl7dmFyIGRuPUQoc25bSWldLDIpLGZ0PWRuWzBdLEZyPWRuWzFdO2lmKCJvYmplY3QiPT09SChmdCkmJm51bGwhPT1mdCl7aWYoIW50KE5lLEl0LGZ0LEZyLEtlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCEoS2V8fEl0LmhhcyhmdCkm'@;
put 'JkFlKEl0LmdldChmdCksRnIsITEsdHQpfHxudChOZSxJdCxmdCxGciwhMSx0dCkpKXJldHVybiExfXJldHVybiAwPT09TmUuc2l6ZX1yZXR1cm4hMH0oSXQscnQsS2UsTmUpKXJldHVybiExfWVsc2UgaWYodXQ9PT13ZSlmb3IoO0p0PEl0Lmxlbmd0aDtKdCsrKXtpZighWihJdCxKdCkpe2lm'@;
put 'KFoocnQsSnQpKXJldHVybiExO2Zvcih2YXIgTHQ9T2JqZWN0LmtleXMoSXQpO0p0PEx0Lmxlbmd0aDtKdCsrKXt2YXIgUHQ9THRbSnRdO2lmKCFaKHJ0LFB0KXx8IUFlKEl0W1B0XSxydFtQdF0sS2UsTmUpKXJldHVybiExfXJldHVybiBMdC5sZW5ndGg9PT1PYmplY3Qua2V5cyhydCkubGVu'@;
put 'Z3RofWlmKCFaKHJ0LEp0KXx8IUFlKEl0W0p0XSxydFtKdF0sS2UsTmUpKXJldHVybiExfWZvcihKdD0wO0p0PHR0Lmxlbmd0aDtKdCsrKXt2YXIgb2k9dHRbSnRdO2lmKCFBZShJdFtvaV0scnRbb2ldLEtlLE5lKSlyZXR1cm4hMX1yZXR1cm4hMH0oSXQscnQsS2UsdXQsdHQsTmUpO3JldHVy'@;
put 'biB0dC52YWwxLmRlbGV0ZShJdCksdHQudmFsMi5kZWxldGUocnQpLEZyfWZ1bmN0aW9uIEllKEl0LHJ0LEtlLHR0KXtmb3IodmFyIE5lPWooSXQpLHV0PTA7dXQ8TmUubGVuZ3RoO3V0Kyspe3ZhciBKdD1OZVt1dF07aWYoQWUocnQsSnQsS2UsdHQpKXJldHVybiBJdC5kZWxldGUoSnQpLCEw'@;
put 'fXJldHVybiExfWZ1bmN0aW9uIEhlKEl0KXtzd2l0Y2goSChJdCkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6SXQ9K0l0O2Nhc2UibnVtYmVyIjppZihCKEl0KSlyZXR1cm4hMX1yZXR1'@;
put 'cm4hMH1mdW5jdGlvbiBEZShJdCxydCxLZSl7dmFyIHR0PUhlKEtlKTtyZXR1cm4gdHQ/PyhydC5oYXModHQpJiYhSXQuaGFzKHR0KSl9ZnVuY3Rpb24ga2UoSXQscnQsS2UsdHQsTmUpe3ZhciB1dD1IZShLZSk7aWYobnVsbCE9dXQpcmV0dXJuIHV0O3ZhciBKdD1ydC5nZXQodXQpO3JldHVy'@;
put 'biEodm9pZCAwPT09SnQmJiFydC5oYXModXQpfHwhQWUodHQsSnQsITEsTmUpKSYmIUl0Lmhhcyh1dCkmJkFlKHR0LEp0LCExLE5lKX1mdW5jdGlvbiBudChJdCxydCxLZSx0dCxOZSx1dCl7Zm9yKHZhciBKdD1qKEl0KSxMdD0wO0x0PEp0Lmxlbmd0aDtMdCsrKXt2YXIgUHQ9SnRbTHRdO2lm'@;
put 'KEFlKEtlLFB0LE5lLHV0KSYmQWUodHQscnQuZ2V0KFB0KSxOZSx1dCkpcmV0dXJuIEl0LmRlbGV0ZShQdCksITB9cmV0dXJuITF9Y2UuZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24geXQoSXQscnQpe3JldHVybiBBZShJdCxydCwhMSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9u'@;
put 'IE10KEl0LHJ0KXtyZXR1cm4gQWUoSXQscnQsITApfX19LDgyMjQ6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLndyYXBwZXI9ZnVuY3Rpb24gYihEKXtyZXR1cm4gRH19LDk3NDI6KGNlLEopPT57InVzZSBz'@;
put 'dHJpY3QiO0ouYnl0ZUxlbmd0aD1mdW5jdGlvbiBIKEIpe3ZhciBXPUYoQiksWD1XWzFdO3JldHVybiAzKihXWzBdK1gpLzQtWH0sSi50b0J5dGVBcnJheT1mdW5jdGlvbiBqKEIpe3ZhciBXLHNlLFo9RihCKSxYPVpbMF0sUT1aWzFdLHE9bmV3IF8oZnVuY3Rpb24gUihCLFcsWil7cmV0dXJu'@;
put 'IDMqKFcrWikvNC1afSgwLFgsUSkpLHRlPTAsaWU9UT4wP1gtNDpYO2ZvcihzZT0wO3NlPGllO3NlKz00KVc9RFtCLmNoYXJDb2RlQXQoc2UpXTw8MTh8RFtCLmNoYXJDb2RlQXQoc2UrMSldPDwxMnxEW0IuY2hhckNvZGVBdChzZSsyKV08PDZ8RFtCLmNoYXJDb2RlQXQoc2UrMyldLHFbdGUr'@;
put 'K109Vz4+MTYmMjU1LHFbdGUrK109Vz4+OCYyNTUscVt0ZSsrXT0yNTUmVztyZXR1cm4gMj09PVEmJihXPURbQi5jaGFyQ29kZUF0KHNlKV08PDJ8RFtCLmNoYXJDb2RlQXQoc2UrMSldPj40LHFbdGUrK109MjU1JlcpLDE9PT1RJiYoVz1EW0IuY2hhckNvZGVBdChzZSldPDwxMHxEW0IuY2hh'@;
put 'ckNvZGVBdChzZSsxKV08PDR8RFtCLmNoYXJDb2RlQXQoc2UrMildPj4yLHFbdGUrK109Vz4+OCYyNTUscVt0ZSsrXT0yNTUmVykscX0sSi5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIFkoQil7Zm9yKHZhciBXLFo9Qi5sZW5ndGgsWD1aJTMsUT1bXSxxPTE2MzgzLHRlPTAsaWU9Wi1YO3RlPGll'@;
put 'O3RlKz1xKVEucHVzaChMKEIsdGUsdGUrcT5pZT9pZTp0ZStxKSk7cmV0dXJuIDE9PT1YP1EucHVzaChiWyhXPUJbWi0xXSk+PjJdK2JbVzw8NCY2M10rIj09Iik6Mj09PVgmJlEucHVzaChiWyhXPShCW1otMl08PDgpK0JbWi0xXSk+PjEwXStiW1c+PjQmNjNdK2JbVzw8MiY2M10rIj0iKSxR'@;
put 'LmpvaW4oIiIpfTtmb3IodmFyIGI9W10sRD1bXSxfPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LHA9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLE49MDtOPDY0OysrTiliW05dPXBbTl0sRFtw'@;
put 'LmNoYXJDb2RlQXQoTildPU47ZnVuY3Rpb24gRihCKXt2YXIgVz1CLmxlbmd0aDtpZihXJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgWj1CLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PVomJihaPVcpLFta'@;
put 'LFo9PT1XPzA6NC1aJTRdfWZ1bmN0aW9uIFAoQil7cmV0dXJuIGJbQj4+MTgmNjNdK2JbQj4+MTImNjNdK2JbQj4+NiY2M10rYls2MyZCXX1mdW5jdGlvbiBMKEIsVyxaKXtmb3IodmFyIFE9W10scT1XO3E8WjtxKz0zKVEucHVzaChQKChCW3FdPDwxNiYxNjcxMTY4MCkrKEJbcSsxXTw8OCY2'@;
put 'NTI4MCkrKDI1NSZCW3ErMl0pKSk7cmV0dXJuIFEuam9pbigiIil9RFs0NV09NjIsRFs5NV09NjN9LDM1NTA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh4LEMpe2lmKCF4KXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxl'@;
put 'ZCIpfWZ1bmN0aW9uIE4oeCxDKXt4LnN1cGVyXz1DO3ZhciBUPWZ1bmN0aW9uKCl7fTtULnByb3RvdHlwZT1DLnByb3RvdHlwZSx4LnByb3RvdHlwZT1uZXcgVCx4LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj14fWZ1bmN0aW9uIHcoeCxDLFQpe2lmKHcuaXNCTih4KSlyZXR1cm4geDt0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eCYmKCgibGUiPT09Q3x8ImJlIj09PUMpJiYoVD1DLEM9MTApLHRoaXMuX2luaXQoeHx8MCxDfHwxMCxUfHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13'@;
put 'Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig2NjAxKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeCxDKXt2YXIgVD14LmNoYXJDb2RlQXQoQyk7cmV0dXJuIFQ+PTQ4'@;
put 'JiZUPD01Nz9ULTQ4OlQ+PTY1JiZUPD03MD9ULTU1OlQ+PTk3JiZUPD0xMDI/VC04Nzp2b2lkIHAoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIreCl9ZnVuY3Rpb24gUih4LEMsVCl7dmFyIFY9SCh4LFQpO3JldHVybiBULTE+PUMmJihWfD1IKHgsVC0xKTw8NCksVn1mdW5jdGlvbiBqKHgs'@;
put 'QyxULFYpe2Zvcih2YXIgVT0wLEU9MCxtPU1hdGgubWluKHgubGVuZ3RoLFQpLEE9QztBPG07QSsrKXt2YXIgYWU9eC5jaGFyQ29kZUF0KEEpLTQ4O1UqPVYsRT1hZT49NDk/YWUtNDkrMTA6YWU+PTE3P2FlLTE3KzEwOmFlLHAoYWU+PTAmJkU8ViwiSW52YWxpZCBjaGFyYWN0ZXIiKSxVKz1F'@;
put 'fXJldHVybiBVfWZ1bmN0aW9uIFAoeCxDKXt4LndvcmRzPUMud29yZHMseC5sZW5ndGg9Qy5sZW5ndGgseC5uZWdhdGl2ZT1DLm5lZ2F0aXZlLHgucmVkPUMucmVkfWlmKHcuaXNCTj1mdW5jdGlvbihDKXtyZXR1cm4gQyBpbnN0YW5jZW9mIHd8fG51bGwhPT1DJiYib2JqZWN0Ij09dHlwZW9m'@;
put 'IEMmJkMuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KEMud29yZHMpfSx3Lm1heD1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKT4wP0M6VH0sdy5taW49ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk8MD9DOlR9LHcucHJvdG90eXBlLl9p'@;
put 'bml0PWZ1bmN0aW9uKEMsVCxWKXtpZigibnVtYmVyIj09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoQyxULFYpO2lmKCJvYmplY3QiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdEFycmF5KEMsVCxWKTsiaGV4Ij09PVQmJihUPTE2KSxwKFQ9PT0oMHxUKSYmVD49MiYmVDw9'@;
put 'MzYpO3ZhciBVPTA7Ii0iPT09KEM9Qy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihVKyssdGhpcy5uZWdhdGl2ZT0xKSxVPEMubGVuZ3RoJiYoMTY9PT1UP3RoaXMuX3BhcnNlSGV4KEMsVSxWKToodGhpcy5fcGFyc2VCYXNlKEMsVCxVKSwibGUiPT09ViYmdGhpcy5faW5p'@;
put 'dEFycmF5KHRoaXMudG9BcnJheSgpLFQsVikpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oQyxULFYpe0M8MCYmKHRoaXMubmVnYXRpdmU9MSxDPS1DKSxDPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDXSx0aGlzLmxlbmd0aD0xKTpDPDQ1MDM1OTk2MjczNzA0'@;
put 'OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoQzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVYmJnRoaXMuX2lu'@;
put 'aXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULFYpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKEMsVCxWKXtpZihwKCJudW1iZXIiPT10eXBlb2YgQy5sZW5ndGgpLEMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9'@;
put 'TWF0aC5jZWlsKEMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFU9MDtVPHRoaXMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPTA7dmFyIEUsbSxBPTA7aWYoImJlIj09PVYpZm9yKFU9Qy5sZW5ndGgtMSxFPTA7VT49MDtVLT0zKXRoaXMud29y'@;
put 'ZHNbRV18PShtPUNbVV18Q1tVLTFdPDw4fENbVS0yXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7ZWxzZSBpZigibGUiPT09Vilmb3IoVT0wLEU9MDtVPEMubGVuZ3RoO1UrPTMpdGhpcy53b3Jkc1tF'@;
put 'XXw9KG09Q1tVXXxDW1UrMV08PDh8Q1tVKzJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKEMsVCxWKXt0'@;
put 'aGlzLmxlbmd0aD1NYXRoLmNlaWwoKEMubGVuZ3RoLVQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFU9MDtVPHRoaXMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPTA7dmFyIEEsRT0wLG09MDtpZigiYmUiPT09Vilmb3IoVT1DLmxlbmd0aC0xO1U+PVQ7'@;
put 'VS09MilBPVIoQyxULFUpPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODtlbHNlIGZvcihVPShDLmxlbmd0aC1UKSUyPT0wP1QrMTpUO1U8Qy5sZW5ndGg7VSs9MilBPVIoQyxULFUpPDxFLHRoaXMud29yZHNb'@;
put 'bV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODt0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKEMsVCxWKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgVT0wLEU9MTtFPD02NzEw'@;
put 'ODg2MztFKj1UKVUrKztVLS0sRT1FL1R8MDtmb3IodmFyIG09Qy5sZW5ndGgtVixBPW0lVSxhZT1NYXRoLm1pbihtLG0tQSkrVixuZT0wLGxlPVY7bGU8YWU7bGUrPVUpbmU9aihDLGxlLGxlK1UsVCksdGhpcy5pbXVsbihFKSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNb'@;
put 'MF0rPW5lOnRoaXMuX2lhZGRuKG5lKTtpZigwIT09QSl7dmFyIHdlPTE7Zm9yKG5lPWooQyxsZSxDLmxlbmd0aCxUKSxsZT0wO2xlPEE7bGUrKyl3ZSo9VDt0aGlzLmltdWxuKHdlKSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKX10'@;
put 'aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKEMpe0Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylDLndvcmRzW1RdPXRoaXMud29yZHNbVF07Qy5sZW5ndGg9dGhpcy5sZW5ndGgsQy5uZWdhdGl2ZT10aGlz'@;
put 'Lm5lZ2F0aXZlLEMucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihDKXtQKEMsdGhpcyl9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShDKSxDfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9u'@;
put 'KEMpe2Zvcig7dGhpcy5sZW5ndGg8QzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVy'@;
put 'biB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wu'@;
put 'Zm9yKXRyeXt3LnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1MfWNhdGNoe3cucHJvdG90eXBlLmluc3BlY3Q9TH1lbHNlIHcucHJvdG90eXBlLmluc3BlY3Q9TDtmdW5jdGlvbiBMKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAi'@;
put 'KSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIFk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sQj1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUs'@;
put 'NSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxXPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1'@;
put 'NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1'@;
put 'bmN0aW9uIFEoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBWPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9VixWPVYtMXwwO3ZhciBVPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPVUqRSxhZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEw'@;
put 'ODg2MyZtO2Zvcih2YXIgbmU9MTtuZTxWO25lKyspe2Zvcih2YXIgbGU9YWU+Pj4yNix3ZT02NzEwODg2MyZhZSxaZT1NYXRoLm1pbihuZSxDLmxlbmd0aC0xKSxRZT1NYXRoLm1heCgwLG5lLXgubGVuZ3RoKzEpO1FlPD1aZTtRZSsrKWxlKz0obT0oVT0wfHgud29yZHNbbmUtUWV8MF0pKihF'@;
put 'PTB8Qy53b3Jkc1tRZV0pK3dlKS82NzEwODg2NHwwLHdlPTY3MTA4ODYzJm07VC53b3Jkc1tuZV09MHx3ZSxhZT0wfGxlfXJldHVybiAwIT09YWU/VC53b3Jkc1tuZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgVjtp'@;
put 'ZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtWPSIiO2Zvcih2YXIgVT0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxVfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtVSYxNjc3NzIxNSwoVSs9Mik+'@;
put 'PTI2JiYoVS09MjYsbS0tKSxWPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9ZWzYtYWUubGVuZ3RoXSthZStWOmFlK1Z9Zm9yKDAhPT1FJiYoVj1FLnRvU3RyaW5nKDE2KStWKTtWLmxlbmd0aCVUIT0wOylWPSIwIitWO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFY9Ii0iK1YpLFZ9aWYo'@;
put 'Qz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIG5lPUJbQ10sbGU9V1tDXTtWPSIiO3ZhciB3ZT10aGlzLmNsb25lKCk7Zm9yKHdlLm5lZ2F0aXZlPTA7IXdlLmlzWmVybygpOyl7dmFyIFplPXdlLm1vZHJuKGxlKS50b1N0cmluZyhDKTtWPSh3ZT13ZS5pZGl2bihsZSkpLmlzWmVybygpP1pl'@;
put 'K1Y6WVtuZS1aZS5sZW5ndGhdK1plK1Z9Zm9yKHRoaXMuaXNaZXJvKCkmJihWPSIwIitWKTtWLmxlbmd0aCVUIT0wOylWPSIwIitWO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFY9Ii0iK1YpLFZ9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlw'@;
put 'ZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRz'@;
put 'WzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxGJiYody5wcm90b3R5'@;
put 'cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShGLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxU'@;
put 'LFYpe3RoaXMuX3N0cmlwKCk7dmFyIFU9dGhpcy5ieXRlTGVuZ3RoKCksRT1WfHxNYXRoLm1heCgxLFUpO3AoVTw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQp'@;
put 'e3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0sVSksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIFY9MCxV'@;
put 'PTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxVO0NbVisrXT0yNTUmQSxWPEMubGVuZ3RoJiYoQ1tWKytdPUE+PjgmMjU1KSxWPEMubGVuZ3RoJiYoQ1tWKytdPUE+PjE2JjI1NSksNj09PW0/KFY8Qy5sZW5ndGgmJihDW1YrK109QT4+MjQmMjU1'@;
put 'KSxVPTAsbT0wKTooVT1BPj4+MjQsbSs9Mil9aWYoVjxDLmxlbmd0aClmb3IoQ1tWKytdPVU7VjxDLmxlbmd0aDspQ1tWKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBWPUMubGVuZ3RoLTEsVT0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtF'@;
put 'Kyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18VTtDW1YtLV09MjU1JkEsVj49MCYmKENbVi0tXT1BPj44JjI1NSksVj49MCYmKENbVi0tXT1BPj4xNiYyNTUpLDY9PT1tPyhWPj0wJiYoQ1tWLS1dPUE+PjI0JjI1NSksVT0wLG09MCk6KFU9QT4+PjI0LG0rPTIpfWlmKFY+PTApZm9yKENbVi0t'@;
put 'XT1VO1Y+PTA7KUNbVi0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsVj0wO3JldHVybiBUPj00MDk2JiYoVis9MTMsVD4+Pj0xMyksVD49NjQmJihWKz03LFQ+Pj49'@;
put 'NyksVD49OCYmKFYrPTQsVD4+Pj00KSxUPj0yJiYoVis9MixUPj4+PTIpLFYrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLFY9MDtyZXR1cm4gODE5MSZUfHwoVis9MTMsVD4+Pj0xMyksMTI3JlR8fChWKz03LFQ+Pj49Nyks'@;
put 'MTUmVHx8KFYrPTQsVD4+Pj00KSwzJlR8fChWKz0yLFQ+Pj49MiksMSZUfHxWKyssVn0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrVH0sdy5w'@;
put 'cm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgQz0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFY9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tUXSk7aWYoQys9ViwyNiE9PVYpYnJlYWt9cmV0dXJuIEN9LHcucHJvdG90'@;
put 'eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihDKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcu'@;
put 'cHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnRlc3RuKEMtMSk/dGhpcy5ub3RuKEMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5u'@;
put 'ZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEMu'@;
put 'bGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBUPTA7VDxDLmxlbmd0aDtUKyspdGhpcy53b3Jkc1tUXT10aGlzLndvcmRzW1RdfEMud29yZHNbVF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRo'@;
put 'aXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihDKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoQyk6Qy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEMpe3Jl'@;
put 'dHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihDKTpDLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oQyl7dmFyIFQ7VD10aGlzLmxlbmd0aD5DLmxlbmd0aD9DOnRoaXM7Zm9yKHZhciBWPTA7VjxULmxlbmd0aDtWKyspdGhp'@;
put 'cy53b3Jkc1tWXT10aGlzLndvcmRzW1ZdJkMud29yZHNbVl07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1YW5kKEMpfSx3LnBy'@;
put 'b3RvdHlwZS5hbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKEMpOkMuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCku'@;
put 'aXVhbmQoQyk6Qy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihDKXt2YXIgVCxWO3RoaXMubGVuZ3RoPkMubGVuZ3RoPyhUPXRoaXMsVj1DKTooVD1DLFY9dGhpcyk7Zm9yKHZhciBVPTA7VTxWLmxlbmd0aDtVKyspdGhpcy53b3Jkc1tVXT1ULndvcmRz'@;
put 'W1VdXlYud29yZHNbVV07aWYodGhpcyE9PVQpZm9yKDtVPFQubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPVQud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0'@;
put 'aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1eG9yKEMpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKEMpOkMuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKEMpe3JldHVy'@;
put 'biB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoQyk6Qy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihDKXtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9MHxNYXRoLmNlaWwoQy8yNiksVj1DJTI2O3RoaXMuX2V4'@;
put 'cGFuZChUKSxWPjAmJlQtLTtmb3IodmFyIFU9MDtVPFQ7VSsrKXRoaXMud29yZHNbVV09NjcxMDg4NjMmfnRoaXMud29yZHNbVV07cmV0dXJuIFY+MCYmKHRoaXMud29yZHNbVV09fnRoaXMud29yZHNbVV0mNjcxMDg4NjM+PjI2LVYpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49'@;
put 'ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihDKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihDLFQpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVj1DLzI2fDAsVT1DJTI2O3JldHVybiB0aGlzLl9leHBhbmQoVisxKSx0aGlzLndvcmRzW1ZdPVQ/dGhp'@;
put 'cy53b3Jkc1tWXXwxPDxVOnRoaXMud29yZHNbVl0mfigxPDxVKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMpe3ZhciBULFYsVTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihD'@;
put 'KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiBDLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyksQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFY9dGhpcyxV'@;
put 'PUMpOihWPUMsVT10aGlzKTtmb3IodmFyIEU9MCxtPTA7bTxVLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxWLndvcmRzW21dKSsoMHxVLndvcmRzW21dKStFKSxFPVQ+Pj4yNjtmb3IoOzAhPT1FJiZtPFYubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYz'@;
put 'JihUPSgwfFYud29yZHNbbV0pK0UpLEU9VD4+PjI2O2lmKHRoaXMubGVuZ3RoPVYubGVuZ3RoLDAhPT1FKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUUsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFYhPT10aGlzKWZvcig7bTxWLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT1WLndvcmRzW21dO3Jl'@;
put 'dHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7dmFyIFQ7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLFQ9dGhpcy5zdWIoQyksQy5uZWdhdGl2ZV49MSxUKTowPT09Qy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/'@;
put 'KHRoaXMubmVnYXRpdmU9MCxUPUMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxUKTp0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChDKTpDLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDKXtpZigwIT09Qy5uZWdhdGl2ZSl7Qy5u'@;
put 'ZWdhdGl2ZT0wO3ZhciBUPXRoaXMuaWFkZChDKTtyZXR1cm4gQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFUsRSxWPXRo'@;
put 'aXMuY21wKEMpO2lmKDA9PT1WKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztWPjA/KFU9dGhpcyxFPUMpOihVPUMsRT10aGlzKTtmb3IodmFyIG09MCxBPTA7QTxFLmxlbmd0aDtBKyspbT0oVD0oMHxVLndvcmRzW0FdKS0oMHxFLndv'@;
put 'cmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2Zvcig7MCE9PW0mJkE8VS5sZW5ndGg7QSsrKW09KFQ9KDB8VS53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtpZigwPT09bSYmQTxVLmxlbmd0aCYmVSE9PXRoaXMpZm9yKDtBPFUubGVuZ3Ro'@;
put 'O0ErKyl0aGlzLndvcmRzW0FdPVUud29yZHNbQV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEEpLFUhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p'@;
put 'c3ViKEMpfTt2YXIgcT1mdW5jdGlvbihDLFQsVil7dmFyIGFlLG5lLGxlLFU9Qy53b3JkcyxFPVQud29yZHMsbT1WLndvcmRzLEE9MCx3ZT0wfFVbMF0sWmU9ODE5MSZ3ZSxRZT13ZT4+PjEzLGF0PTB8VVsxXSx4ZT04MTkxJmF0LHZlPWF0Pj4+MTMscWU9MHxVWzJdLGplPTgxOTEmcWUsQWU9'@;
put 'cWU+Pj4xMyxGZT0wfFVbM10sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLEhlPTB8VVs0XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxVWzVdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxvbj0wfFVbNl0seXQ9ODE5MSZvbixNdD1vbj4+PjEzLEl0PTB8VVs3XSxydD04MTkxJkl0LEtlPUl0Pj4+'@;
put 'MTMsdHQ9MHxVWzhdLE5lPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxKdD0wfFVbOV0sTHQ9ODE5MSZKdCxQdD1KdD4+PjEzLG9pPTB8RVswXSxlbj04MTkxJm9pLHNuPW9pPj4+MTMsSWk9MHxFWzFdLGRuPTgxOTEmSWksZnQ9SWk+Pj4xMyxGcj0wfEVbMl0sWnQ9ODE5MSZGcixrdD1Gcj4+PjEzLExu'@;
put 'PTB8RVszXSxvdD04MTkxJkxuLHp0PUxuPj4+MTMsbmk9MHxFWzRdLFdlPTgxOTEmbmksQXQ9bmk+Pj4xMyxpcj0wfEVbNV0saHQ9ODE5MSZpcixFdD1pcj4+PjEzLHpuPTB8RVs2XSxhbj04MTkxJnpuLGp0PXpuPj4+MTMsZGk9MHxFWzddLGNuPTgxOTEmZGksZm49ZGk+Pj4xMyxEaT0wfEVb'@;
put 'OF0sUXQ9ODE5MSZEaSx0bj1EaT4+PjEzLGNhPTB8RVs5XSx4aT04MTkxJmNhLHlyPWNhPj4+MTM7Vi5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsVi5sZW5ndGg9MTk7dmFyIEduPShBKyhhZT1NYXRoLmltdWwoWmUsZW4pKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoWmUs'@;
put 'c24pKStNYXRoLmltdWwoUWUsZW4pfDApKTw8MTMpfDA7QT0oKGxlPU1hdGguaW11bChRZSxzbikpKyhuZT4+PjEzKXwwKSsoR24+Pj4yNil8MCxHbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHhlLGVuKSxuZT0obmU9TWF0aC5pbXVsKHhlLHNuKSkrTWF0aC5pbXVsKHZlLGVuKXwwLGxlPU1h'@;
put 'dGguaW11bCh2ZSxzbik7dmFyIEtpPShBKyhhZT1hZStNYXRoLmltdWwoWmUsZG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGRuKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsZnQpfDApKyhuZT4+PjEzKXwwKSso'@;
put 'S2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGplLGVuKSxuZT0obmU9TWF0aC5pbXVsKGplLHNuKSkrTWF0aC5pbXVsKEFlLGVuKXwwLGxlPU1hdGguaW11bChBZSxzbiksYWU9YWUrTWF0aC5pbXVsKHhlLGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeGUsZnQpfDApK01h'@;
put 'dGguaW11bCh2ZSxkbil8MCxsZT1sZStNYXRoLmltdWwodmUsZnQpfDA7dmFyIEpyPShBKyhhZT1hZStNYXRoLmltdWwoWmUsWnQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSxrdCl8MCkrTWF0aC5pbXVsKFFlLFp0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmlt'@;
put 'dWwoUWUsa3QpfDApKyhuZT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJlLGVuKSxuZT0obmU9TWF0aC5pbXVsKFJlLHNuKSkrTWF0aC5pbXVsKEllLGVuKXwwLGxlPU1hdGguaW11bChJZSxzbiksYWU9YWUrTWF0aC5pbXVsKGplLGRuKXwwLG5lPShu'@;
put 'ZT1uZStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChBZSxkbil8MCxsZT1sZStNYXRoLmltdWwoQWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeGUsa3QpfDApK01hdGguaW11bCh2ZSxadCl8MCxsZT1sZStNYXRoLmltdWwodmUsa3Qp'@;
put 'fDA7dmFyIFFyPShBKyhhZT1hZStNYXRoLmltdWwoWmUsb3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSx6dCl8MCkrTWF0aC5pbXVsKFFlLG90KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsenQpfDApKyhuZT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxR'@;
put 'ciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKERlLGVuKSxuZT0obmU9TWF0aC5pbXVsKERlLHNuKSkrTWF0aC5pbXVsKGtlLGVuKXwwLGxlPU1hdGguaW11bChrZSxzbiksYWU9YWUrTWF0aC5pbXVsKFJlLGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxk'@;
put 'bil8MCxsZT1sZStNYXRoLmltdWwoSWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGplLFp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsa3QpfDApK01hdGguaW11bChBZSxadCl8MCxsZT1sZStNYXRoLmltdWwoQWUsa3QpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLG90KXwwLG5lPShuZT1uZStN'@;
put 'YXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxvdCl8MCxsZT1sZStNYXRoLmltdWwodmUsenQpfDA7dmFyIE5pPShBKyhhZT1hZStNYXRoLmltdWwoWmUsV2UpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwKSk8PDEz'@;
put 'KXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsQXQpfDApKyhuZT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKG50LGVuKSxuZT0obmU9TWF0aC5pbXVsKG50LHNuKSkrTWF0aC5pbXVsKEplLGVuKXwwLGxlPU1hdGguaW11bChKZSxzbiksYWU9YWUrTWF0'@;
put 'aC5pbXVsKERlLGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZnQpfDApK01hdGguaW11bChrZSxkbil8MCxsZT1sZStNYXRoLmltdWwoa2UsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsa3QpfDApK01hdGguaW11bChJZSxadCl8MCxs'@;
put 'ZT1sZStNYXRoLmltdWwoSWUsa3QpfDAsYWU9YWUrTWF0aC5pbXVsKGplLG90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChBZSxvdCl8MCxsZT1sZStNYXRoLmltdWwoQWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFdlKXwwLG5lPShuZT1uZStNYXRoLmlt'@;
put 'dWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxsZT1sZStNYXRoLmltdWwodmUsQXQpfDA7dmFyIEhpPShBKyhhZT1hZStNYXRoLmltdWwoWmUsaHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSxFdCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwKSk8PDEzKXwwO0E9'@;
put 'KChsZT1sZStNYXRoLmltdWwoUWUsRXQpfDApKyhuZT4+PjEzKXwwKSsoSGk+Pj4yNil8MCxIaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHl0LGVuKSxuZT0obmU9TWF0aC5pbXVsKHl0LHNuKSkrTWF0aC5pbXVsKE10LGVuKXwwLGxlPU1hdGguaW11bChNdCxzbiksYWU9YWUrTWF0aC5pbXVs'@;
put 'KG50LGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxkbil8MCxsZT1sZStNYXRoLmltdWwoSmUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLFp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsa3QpfDApK01hdGguaW11bChrZSxadCl8MCxsZT1sZStN'@;
put 'YXRoLmltdWwoa2Usa3QpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLG90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxvdCl8MCxsZT1sZStNYXRoLmltdWwoSWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGplLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUs'@;
put 'QXQpfDApK01hdGguaW11bChBZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoQWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeGUsRXQpfDApK01hdGguaW11bCh2ZSxodCl8MCxsZT1sZStNYXRoLmltdWwodmUsRXQpfDA7dmFyIElhPShBKyhhZT1h'@;
put 'ZStNYXRoLmltdWwoWmUsYW4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSxqdCl8MCkrTWF0aC5pbXVsKFFlLGFuKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsanQpfDApKyhuZT4+PjEzKXwwKSsoSWE+Pj4yNil8MCxJYSY9NjcxMDg4NjMsYWU9TWF0'@;
put 'aC5pbXVsKHJ0LGVuKSxuZT0obmU9TWF0aC5pbXVsKHJ0LHNuKSkrTWF0aC5pbXVsKEtlLGVuKXwwLGxlPU1hdGguaW11bChLZSxzbiksYWU9YWUrTWF0aC5pbXVsKHl0LGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxkbil8MCxsZT1sZStNYXRoLmlt'@;
put 'dWwoTXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsa3QpfDApK01hdGguaW11bChKZSxadCl8MCxsZT1sZStNYXRoLmltdWwoSmUsa3QpfDAsYWU9YWUrTWF0aC5pbXVsKERlLG90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsenQpfDAp'@;
put 'K01hdGguaW11bChrZSxvdCl8MCxsZT1sZStNYXRoLmltdWwoa2UsenQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoSWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGplLGh0'@;
put 'KXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsRXQpfDApK01hdGguaW11bChBZSxodCl8MCxsZT1sZStNYXRoLmltdWwoQWUsRXQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGFuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeGUsanQpfDApK01hdGguaW11bCh2ZSxhbil8MCxsZT1sZStNYXRoLmlt'@;
put 'dWwodmUsanQpfDA7dmFyIFByPShBKyhhZT1hZStNYXRoLmltdWwoWmUsY24pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsZm4pfDApKyhuZT4+PjEzKXwwKSsoUHI+'@;
put 'Pj4yNil8MCxQciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKE5lLGVuKSxuZT0obmU9TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LGVuKXwwLGxlPU1hdGguaW11bCh1dCxzbiksYWU9YWUrTWF0aC5pbXVsKHJ0LGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwocnQsZnQpfDApK01hdGgu'@;
put 'aW11bChLZSxkbil8MCxsZT1sZStNYXRoLmltdWwoS2UsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsa3QpfDApK01hdGguaW11bChNdCxadCl8MCxsZT1sZStNYXRoLmltdWwoTXQsa3QpfDAsYWU9YWUrTWF0aC5pbXVsKG50LG90KXwwLG5l'@;
put 'PShuZT1uZStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChKZSxvdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsQXQpfDApK01hdGguaW11bChrZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoa2Us'@;
put 'QXQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsRXQpfDApK01hdGguaW11bChJZSxodCl8MCxsZT1sZStNYXRoLmltdWwoSWUsRXQpfDAsYWU9YWUrTWF0aC5pbXVsKGplLGFuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsanQpfDApK01hdGgu'@;
put 'aW11bChBZSxhbil8MCxsZT1sZStNYXRoLmltdWwoQWUsanQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxsZT1sZStNYXRoLmltdWwodmUsZm4pfDA7dmFyIFlpPShBKyhhZT1hZStNYXRoLmltdWwo'@;
put 'WmUsUXQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSx0bil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsdG4pfDApKyhuZT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEx0LGVu'@;
put 'KSxuZT0obmU9TWF0aC5pbXVsKEx0LHNuKSkrTWF0aC5pbXVsKFB0LGVuKXwwLGxlPU1hdGguaW11bChQdCxzbiksYWU9YWUrTWF0aC5pbXVsKE5lLGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsZnQpfDApK01hdGguaW11bCh1dCxkbil8MCxsZT1sZStNYXRoLmltdWwodXQsZnQpfDAs'@;
put 'YWU9YWUrTWF0aC5pbXVsKHJ0LFp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwocnQsa3QpfDApK01hdGguaW11bChLZSxadCl8MCxsZT1sZStNYXRoLmltdWwoS2Usa3QpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LG90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChN'@;
put 'dCxvdCl8MCxsZT1sZStNYXRoLmltdWwoTXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoSmUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLGh0KXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoRGUsRXQpfDApK01hdGguaW11bChrZSxodCl8MCxsZT1sZStNYXRoLmltdWwoa2UsRXQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLGFuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsanQpfDApK01hdGguaW11bChJZSxhbil8MCxsZT1sZStNYXRoLmltdWwoSWUsanQpfDAs'@;
put 'YWU9YWUrTWF0aC5pbXVsKGplLGNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxsZT1sZStNYXRoLmltdWwoQWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh2'@;
put 'ZSxRdCl8MCxsZT1sZStNYXRoLmltdWwodmUsdG4pfDA7dmFyIGZhPShBKyhhZT1hZStNYXRoLmltdWwoWmUseGkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChaZSx5cil8MCkrTWF0aC5pbXVsKFFlLHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUseXIp'@;
put 'fDApKyhuZT4+PjEzKXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEx0LGRuKSxuZT0obmU9TWF0aC5pbXVsKEx0LGZ0KSkrTWF0aC5pbXVsKFB0LGRuKXwwLGxlPU1hdGguaW11bChQdCxmdCksYWU9YWUrTWF0aC5pbXVsKE5lLFp0KXwwLG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoTmUsa3QpfDApK01hdGguaW11bCh1dCxadCl8MCxsZT1sZStNYXRoLmltdWwodXQsa3QpfDAsYWU9YWUrTWF0aC5pbXVsKHJ0LG90KXwwLG5lPShuZT1uZStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChLZSxvdCl8MCxsZT1sZStNYXRoLmltdWwoS2UsenQpfDAsYWU9YWUr'@;
put 'TWF0aC5pbXVsKHl0LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXZSl8MCxsZT1sZStNYXRoLmltdWwoTXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsRXQpfDApK01hdGguaW11bChKZSxodCl8'@;
put 'MCxsZT1sZStNYXRoLmltdWwoSmUsRXQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLGFuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsanQpfDApK01hdGguaW11bChrZSxhbil8MCxsZT1sZStNYXRoLmltdWwoa2UsanQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLGNuKXwwLG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxsZT1sZStNYXRoLmltdWwoSWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGplLFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsdG4pfDApK01hdGguaW11bChBZSxRdCl8MCxsZT1sZStNYXRoLmltdWwoQWUsdG4pfDA7dmFyIG5y'@;
put 'PShBKyhhZT1hZStNYXRoLmltdWwoeGUseGkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSx5cil8MCkrTWF0aC5pbXVsKHZlLHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwodmUseXIpfDApKyhuZT4+PjEzKXwwKSsobnI+Pj4yNil8MCxuciY9NjcxMDg4'@;
put 'NjMsYWU9TWF0aC5pbXVsKEx0LFp0KSxuZT0obmU9TWF0aC5pbXVsKEx0LGt0KSkrTWF0aC5pbXVsKFB0LFp0KXwwLGxlPU1hdGguaW11bChQdCxrdCksYWU9YWUrTWF0aC5pbXVsKE5lLG90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsenQpfDApK01hdGguaW11bCh1dCxvdCl8MCxsZT1s'@;
put 'ZStNYXRoLmltdWwodXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHJ0LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChLZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoS2UsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'eXQsRXQpfDApK01hdGguaW11bChNdCxodCl8MCxsZT1sZStNYXRoLmltdWwoTXQsRXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGFuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsanQpfDApK01hdGguaW11bChKZSxhbil8MCxsZT1sZStNYXRoLmltdWwoSmUsanQpfDAsYWU9YWUrTWF0aC5p'@;
put 'bXVsKERlLGNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSxjbil8MCxsZT1sZStNYXRoLmltdWwoa2UsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsdG4pfDApK01hdGguaW11bChJZSxRdCl8MCxsZT1s'@;
put 'ZStNYXRoLmltdWwoSWUsdG4pfDA7dmFyIG9hPShBKyhhZT1hZStNYXRoLmltdWwoamUseGkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSx5cil8MCkrTWF0aC5pbXVsKEFlLHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoQWUseXIpfDApKyhuZT4+PjEz'@;
put 'KXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEx0LG90KSxuZT0obmU9TWF0aC5pbXVsKEx0LHp0KSkrTWF0aC5pbXVsKFB0LG90KXwwLGxlPU1hdGguaW11bChQdCx6dCksYWU9YWUrTWF0aC5pbXVsKE5lLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsQXQp'@;
put 'fDApK01hdGguaW11bCh1dCxXZSl8MCxsZT1sZStNYXRoLmltdWwodXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHJ0LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwocnQsRXQpfDApK01hdGguaW11bChLZSxodCl8MCxsZT1sZStNYXRoLmltdWwoS2UsRXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0'@;
put 'LGFuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsanQpfDApK01hdGguaW11bChNdCxhbil8MCxsZT1sZStNYXRoLmltdWwoTXQsanQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxsZT1sZStNYXRo'@;
put 'LmltdWwoSmUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKERlLFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsdG4pfDApK01hdGguaW11bChrZSxRdCl8MCxsZT1sZStNYXRoLmltdWwoa2UsdG4pfDA7dmFyIF9hPShBKyhhZT1hZStNYXRoLmltdWwoUmUseGkpfDApfDApKygoODE5MSYobmU9'@;
put 'KG5lPW5lK01hdGguaW11bChSZSx5cil8MCkrTWF0aC5pbXVsKEllLHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoSWUseXIpfDApKyhuZT4+PjEzKXwwKSsoX2E+Pj4yNil8MCxfYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEx0LFdlKSxuZT0obmU9TWF0aC5pbXVsKEx0LEF0'@;
put 'KSkrTWF0aC5pbXVsKFB0LFdlKXwwLGxlPU1hdGguaW11bChQdCxBdCksYWU9YWUrTWF0aC5pbXVsKE5lLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsRXQpfDApK01hdGguaW11bCh1dCxodCl8MCxsZT1sZStNYXRoLmltdWwodXQsRXQpfDAsYWU9YWUrTWF0aC5pbXVsKHJ0LGFuKXww'@;
put 'LG5lPShuZT1uZStNYXRoLmltdWwocnQsanQpfDApK01hdGguaW11bChLZSxhbil8MCxsZT1sZStNYXRoLmltdWwoS2UsanQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LGNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxsZT1sZStNYXRoLmltdWwo'@;
put 'TXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKG50LFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsdG4pfDApK01hdGguaW11bChKZSxRdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsdG4pfDA7dmFyIE9hPShBKyhhZT1hZStNYXRoLmltdWwoRGUseGkpfDApfDApKygoODE5MSYobmU9KG5lPW5l'@;
put 'K01hdGguaW11bChEZSx5cil8MCkrTWF0aC5pbXVsKGtlLHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoa2UseXIpfDApKyhuZT4+PjEzKXwwKSsoT2E+Pj4yNil8MCxPYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEx0LGh0KSxuZT0obmU9TWF0aC5pbXVsKEx0LEV0KSkrTWF0'@;
put 'aC5pbXVsKFB0LGh0KXwwLGxlPU1hdGguaW11bChQdCxFdCksYWU9YWUrTWF0aC5pbXVsKE5lLGFuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsanQpfDApK01hdGguaW11bCh1dCxhbil8MCxsZT1sZStNYXRoLmltdWwodXQsanQpfDAsYWU9YWUrTWF0aC5pbXVsKHJ0LGNuKXwwLG5lPShu'@;
put 'ZT1uZStNYXRoLmltdWwocnQsZm4pfDApK01hdGguaW11bChLZSxjbil8MCxsZT1sZStNYXRoLmltdWwoS2UsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsdG4pfDApK01hdGguaW11bChNdCxRdCl8MCxsZT1sZStNYXRoLmltdWwoTXQsdG4p'@;
put 'fDA7dmFyIE5hPShBKyhhZT1hZStNYXRoLmltdWwobnQseGkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChudCx5cil8MCkrTWF0aC5pbXVsKEplLHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoSmUseXIpfDApKyhuZT4+PjEzKXwwKSsoTmE+Pj4yNil8MCxO'@;
put 'YSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEx0LGFuKSxuZT0obmU9TWF0aC5pbXVsKEx0LGp0KSkrTWF0aC5pbXVsKFB0LGFuKXwwLGxlPU1hdGguaW11bChQdCxqdCksYWU9YWUrTWF0aC5pbXVsKE5lLGNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsZm4pfDApK01hdGguaW11bCh1dCxj'@;
put 'bil8MCxsZT1sZStNYXRoLmltdWwodXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHJ0LFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwocnQsdG4pfDApK01hdGguaW11bChLZSxRdCl8MCxsZT1sZStNYXRoLmltdWwoS2UsdG4pfDA7dmFyIGVpPShBKyhhZT1hZStNYXRoLmltdWwoeXQseGkpfDAp'@;
put 'fDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh5dCx5cil8MCkrTWF0aC5pbXVsKE10LHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoTXQseXIpfDApKyhuZT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEx0LGNuKSxuZT0obmU9'@;
put 'TWF0aC5pbXVsKEx0LGZuKSkrTWF0aC5pbXVsKFB0LGNuKXwwLGxlPU1hdGguaW11bChQdCxmbiksYWU9YWUrTWF0aC5pbXVsKE5lLFF0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsdG4pfDApK01hdGguaW11bCh1dCxRdCl8MCxsZT1sZStNYXRoLmltdWwodXQsdG4pfDA7dmFyIGZzPShB'@;
put 'KyhhZT1hZStNYXRoLmltdWwocnQseGkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChydCx5cil8MCkrTWF0aC5pbXVsKEtlLHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoS2UseXIpfDApKyhuZT4+PjEzKXwwKSsoZnM+Pj4yNil8MCxmcyY9NjcxMDg4NjMs'@;
put 'YWU9TWF0aC5pbXVsKEx0LFF0KSxuZT0obmU9TWF0aC5pbXVsKEx0LHRuKSkrTWF0aC5pbXVsKFB0LFF0KXwwLGxlPU1hdGguaW11bChQdCx0bik7dmFyIEhvPShBKyhhZT1hZStNYXRoLmltdWwoTmUseGkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChOZSx5cil8MCkrTWF0'@;
put 'aC5pbXVsKHV0LHhpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwodXQseXIpfDApKyhuZT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIG1sPShBKyhhZT1NYXRoLmltdWwoTHQseGkpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoTHQseXIpKStNYXRo'@;
put 'LmltdWwoUHQseGkpfDApKTw8MTMpfDA7cmV0dXJuIEE9KChsZT1NYXRoLmltdWwoUHQseXIpKSsobmU+Pj4xMyl8MCkrKG1sPj4+MjYpfDAsbWwmPTY3MTA4ODYzLG1bMF09R24sbVsxXT1LaSxtWzJdPUpyLG1bM109UXIsbVs0XT1OaSxtWzVdPUhpLG1bNl09SWEsbVs3XT1QcixtWzhdPVlp'@;
put 'LG1bOV09ZmEsbVsxMF09bnIsbVsxMV09b2EsbVsxMl09X2EsbVsxM109T2EsbVsxNF09TmEsbVsxNV09ZWksbVsxNl09ZnMsbVsxN109SG8sbVsxOF09bWwsMCE9PUEmJihtWzE5XT1BLFYubGVuZ3RoKyspLFZ9O2Z1bmN0aW9uIHRlKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5u'@;
put 'ZWdhdGl2ZSxULmxlbmd0aD14Lmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIFY9MCxVPTAsRT0wO0U8VC5sZW5ndGgtMTtFKyspe3ZhciBtPVU7VT0wO2Zvcih2YXIgQT02NzEwODg2MyZWLGFlPU1hdGgubWluKEUsQy5sZW5ndGgtMSksbmU9TWF0aC5tYXgoMCxFLXgubGVuZ3RoKzEpO25lPD1h'@;
put 'ZTtuZSsrKXt2YXIgUWU9KDB8eC53b3Jkc1tFLW5lXSkqKDB8Qy53b3Jkc1tuZV0pLGF0PTY3MTA4ODYzJlFlO0E9NjcxMDg4NjMmKGF0PWF0K0F8MCksVSs9KG09KG09bSsoUWUvNjcxMDg4NjR8MCl8MCkrKGF0Pj4+MjYpfDApPj4+MjYsbSY9NjcxMDg4NjN9VC53b3Jkc1tFXT1BLFY9bSxt'@;
put 'PVV9cmV0dXJuIDAhPT1WP1Qud29yZHNbRV09VjpULmxlbmd0aC0tLFQuX3N0cmlwKCl9ZnVuY3Rpb24gaWUoeCxDLFQpe3JldHVybiB0ZSh4LEMsVCl9ZnVuY3Rpb24gc2UoeCxDKXt0aGlzLng9eCx0aGlzLnk9Q31NYXRoLmltdWx8fChxPVEpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9u'@;
put 'KEMsVCl7dmFyIFU9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/cSh0aGlzLEMsVCk6VTw2Mz9RKHRoaXMsQyxUKTpVPDEwMjQ/dGUodGhpcyxDLFQpOmllKHRoaXMsQyxUKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24o'@;
put 'Qyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxWPXcucHJvdG90eXBlLl9jb3VudEJpdHMoQyktMSxVPTA7VTxDO1UrKylUW1VdPXRoaXMucmV2QmluKFUsVixDKTtyZXR1cm4gVH0sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihDLFQsVil7aWYoMD09PUN8fEM9PT1WLTEpcmV0dXJuIEM7'@;
put 'Zm9yKHZhciBVPTAsRT0wO0U8VDtFKyspVXw9KDEmQyk8PFQtRS0xLEM+Pj0xO3JldHVybiBVfSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihDLFQsVixVLEUsbSl7Zm9yKHZhciBBPTA7QTxtO0ErKylVW0FdPVRbQ1tBXV0sRVtBXT1WW0NbQV1dfSxzZS5wcm90b3R5cGUudHJhbnNm'@;
put 'b3JtPWZ1bmN0aW9uKEMsVCxWLFUsRSxtKXt0aGlzLnBlcm11dGUobSxDLFQsVixVLEUpO2Zvcih2YXIgQT0xO0E8RTtBPDw9MSlmb3IodmFyIGFlPUE8PDEsbmU9TWF0aC5jb3MoMipNYXRoLlBJL2FlKSxsZT1NYXRoLnNpbigyKk1hdGguUEkvYWUpLHdlPTA7d2U8RTt3ZSs9YWUpZm9yKHZh'@;
put 'ciBaZT1uZSxRZT1sZSxhdD0wO2F0PEE7YXQrKyl7dmFyIHhlPVZbd2UrYXRdLHZlPVVbd2UrYXRdLHFlPVZbd2UrYXQrQV0samU9VVt3ZSthdCtBXSxBZT1aZSpxZS1RZSpqZTtqZT1aZSpqZStRZSpxZSxWW3dlK2F0XT14ZSsocWU9QWUpLFVbd2UrYXRdPXZlK2plLFZbd2UrYXQrQV09eGUt'@;
put 'cWUsVVt3ZSthdCtBXT12ZS1qZSxhdCE9PWFlJiYoQWU9bmUqWmUtbGUqUWUsUWU9bmUqUWUrbGUqWmUsWmU9QWUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKEMsVCl7dmFyIFY9MXxNYXRoLm1heChULEMpLFU9MSZWLEU9MDtmb3IoVj1WLzJ8MDtWO1Y+Pj49MSlFKys7'@;
put 'cmV0dXJuIDE8PEUrMStVfSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKEMsVCxWKXtpZighKFY8PTEpKWZvcih2YXIgVT0wO1U8Vi8yO1UrKyl7dmFyIEU9Q1tVXTtDW1VdPUNbVi1VLTFdLENbVi1VLTFdPUUsRT1UW1VdLFRbVV09LVRbVi1VLTFdLFRbVi1VLTFdPS1FfX0sc2Uu'@;
put 'cHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihDLFQpe2Zvcih2YXIgVj0wLFU9MDtVPFQvMjtVKyspe3ZhciBFPTgxOTIqTWF0aC5yb3VuZChDWzIqVSsxXS9UKStNYXRoLnJvdW5kKENbMipVXS9UKStWO0NbVV09NjcxMDg4NjMmRSxWPUU8NjcxMDg4NjQ/MDpFLzY3MTA4ODY0fDB9'@;
put 'cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKEMsVCxWLFUpe2Zvcih2YXIgRT0wLG09MDttPFQ7bSsrKVZbMiptXT04MTkxJihFKz0wfENbbV0pLFZbMiptKzFdPTgxOTEmKEU+Pj49MTMpLEU+Pj49MTM7Zm9yKG09MipUO208VTsrK20pVlttXT0wO3AoMD09PUUp'@;
put 'LHAoISgtODE5MiZFKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksVj0wO1Y8QztWKyspVFtWXT0wO3JldHVybiBUfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihDLFQsVil7dmFyIFU9Mip0aGlzLmd1ZXNzTGVuMTNiKEMubGVuZ3Ro'@;
put 'LFQubGVuZ3RoKSxFPXRoaXMubWFrZVJCVChVKSxtPXRoaXMuc3R1YihVKSxBPW5ldyBBcnJheShVKSxhZT1uZXcgQXJyYXkoVSksbmU9bmV3IEFycmF5KFUpLGxlPW5ldyBBcnJheShVKSx3ZT1uZXcgQXJyYXkoVSksWmU9bmV3IEFycmF5KFUpLFFlPVYud29yZHM7UWUubGVuZ3RoPVUsdGhp'@;
put 'cy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsQSxVKSx0aGlzLmNvbnZlcnQxM2IoVC53b3JkcyxULmxlbmd0aCxsZSxVKSx0aGlzLnRyYW5zZm9ybShBLG0sYWUsbmUsVSxFKSx0aGlzLnRyYW5zZm9ybShsZSxtLHdlLFplLFUsRSk7Zm9yKHZhciBhdD0wO2F0PFU7YXQrKyl7dmFyIHhl'@;
put 'PWFlW2F0XSp3ZVthdF0tbmVbYXRdKlplW2F0XTtuZVthdF09YWVbYXRdKlplW2F0XStuZVthdF0qd2VbYXRdLGFlW2F0XT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoYWUsbmUsVSksdGhpcy50cmFuc2Zvcm0oYWUsbmUsUWUsbSxVLEUpLHRoaXMuY29uanVnYXRlKFFlLG0sVSksdGhpcy5u'@;
put 'b3JtYWxpemUxM2IoUWUsVSksVi5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsVi5sZW5ndGg9Qy5sZW5ndGgrVC5sZW5ndGgsVi5fc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlz'@;
put 'Lmxlbmd0aCtDLmxlbmd0aCksdGhpcy5tdWxUbyhDLFQpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCksaWUodGhpcyxDLFQpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0'@;
put 'aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oQyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxwKCJudW1iZXIiPT10eXBlb2YgQykscChDPDY3MTA4ODY0KTtmb3IodmFyIFY9MCxVPTA7VTx0aGlzLmxlbmd0aDtVKyspe3Zh'@;
put 'ciBFPSgwfHRoaXMud29yZHNbVV0pKkMsbT0oNjcxMDg4NjMmRSkrKDY3MTA4ODYzJlYpO1Y+Pj0yNixWKz1FLzY3MTA4ODY0fDAsVis9bT4+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmbX1yZXR1cm4gMCE9PVYmJih0aGlzLndvcmRzW1VdPVYsdGhpcy5sZW5ndGgrKyksVD90aGlzLmlu'@;
put 'ZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oQyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwo'@;
put 'dGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMpe3ZhciBUPWZ1bmN0aW9uIFgoeCl7Zm9yKHZhciBDPW5ldyBBcnJheSh4LmJpdExlbmd0aCgpKSxUPTA7VDxDLmxlbmd0aDtUKyspQ1tUXT14LndvcmRzW1QvMjZ8MF0+Pj5UJTI2JjE7cmV0dXJuIEN9KEMpO2lmKDA9'@;
put 'PT1ULmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciBWPXRoaXMsVT0wO1U8VC5sZW5ndGgmJjA9PT1UW1VdO1UrKyxWPVYuc3FyKCkpO2lmKCsrVTxULmxlbmd0aClmb3IodmFyIEU9Vi5zcXIoKTtVPFQubGVuZ3RoO1UrKyxFPUUuc3FyKCkpMCE9PVRbVV0mJihWPVYubXVsKEUpKTty'@;
put 'ZXR1cm4gVn0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgRSxUPUMlMjYsVj0oQy1UKS8yNixVPTY3MTA4ODYzPj4+MjYtVDw8MjYtVDtpZigwIT09VCl7dmFyIG09MDtmb3IoRT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIg'@;
put 'QT10aGlzLndvcmRzW0VdJlU7dGhpcy53b3Jkc1tFXT0oMHx0aGlzLndvcmRzW0VdKS1BPDxUfG0sbT1BPj4+MjYtVH1tJiYodGhpcy53b3Jkc1tFXT1tLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1WKXtmb3IoRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKXRoaXMud29yZHNbRStWXT10aGlzLndv'@;
put 'cmRzW0VdO2ZvcihFPTA7RTxWO0UrKyl0aGlzLndvcmRzW0VdPTA7dGhpcy5sZW5ndGgrPVZ9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKEMpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihDKX0sdy5wcm90b3R5cGUuaXVz'@;
put 'aHJuPWZ1bmN0aW9uKEMsVCxWKXt2YXIgVTtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCksVT1UPyhULVQlMjYpLzI2OjA7dmFyIEU9QyUyNixtPU1hdGgubWluKChDLUUpLzI2LHRoaXMubGVuZ3RoKSxBPTY3MTA4ODYzXjY3MTA4ODYzPj4+RTw8RSxhZT1WO2lmKFUtPW0sVT1NYXRoLm1h'@;
put 'eCgwLFUpLGFlKXtmb3IodmFyIG5lPTA7bmU8bTtuZSsrKWFlLndvcmRzW25lXT10aGlzLndvcmRzW25lXTthZS5sZW5ndGg9bX1pZigwIT09bSlpZih0aGlzLmxlbmd0aD5tKWZvcih0aGlzLmxlbmd0aC09bSxuZT0wO25lPHRoaXMubGVuZ3RoO25lKyspdGhpcy53b3Jkc1tuZV09dGhpcy53'@;
put 'b3Jkc1tuZSttXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBsZT0wO2ZvcihuZT10aGlzLmxlbmd0aC0xO25lPj0wJiYoMCE9PWxlfHxuZT49VSk7bmUtLSl7dmFyIHdlPTB8dGhpcy53b3Jkc1tuZV07dGhpcy53b3Jkc1tuZV09bGU8PDI2LUV8d2U+Pj5FLGxlPXdl'@;
put 'JkF9cmV0dXJuIGFlJiYwIT09bGUmJihhZS53b3Jkc1thZS5sZW5ndGgrK109bGUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihDLFQsVil7cmV0dXJuIHAoMD09PXRoaXMu'@;
put 'bmVnYXRpdmUpLHRoaXMuaXVzaHJuKEMsVCxWKX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKEMpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihDKX0sdy5wcm90b3R5cGUuc2hy'@;
put 'bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKEMpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihDKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oQyl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3Zh'@;
put 'ciBUPUMlMjYsVj0oQy1UKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1WfHwhKHRoaXMud29yZHNbVl0mMTw8VCkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oQyl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsVj0oQy1UKS8yNjtyZXR1cm4gcCgwPT09dGhp'@;
put 'cy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVY/dGhpczooMCE9PVQmJlYrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihWLHRoaXMubGVuZ3RoKSwwIT09VCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYz'@;
put 'XjY3MTA4ODYzPj4+VDw8VCksdGhpcy5fc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKEMpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2'@;
put 'NCksQzwwP3RoaXMuaXN1Ym4oLUMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PUM/KHRoaXMud29yZHNbMF09Qy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKEMp'@;
put 'LHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihDKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKEMpe3RoaXMud29yZHNbMF0rPUM7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXT49NjcxMDg4NjQ7VCsrKXRoaXMud29yZHNbVF0tPTY3MTA4ODY0'@;
put 'LFQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbVCsxXT0xOnRoaXMud29yZHNbVCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxUKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKEMpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDKSxwKEM8'@;
put 'NjcxMDg4NjQpLEM8MClyZXR1cm4gdGhpcy5pYWRkbigtQyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPUMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBd'@;
put 'PDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPDA7VCsrKXRoaXMud29yZHNbVF0rPTY3MTA4ODY0LHRoaXMud29yZHNbVCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0s'@;
put 'dy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKEMpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oQyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2'@;
put 'ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oQyxULFYpe3ZhciBFO3RoaXMuX2V4cGFuZChDLmxlbmd0aCtWKTt2YXIgbSxBPTA7Zm9yKEU9MDtFPEMubGVuZ3Ro'@;
put 'O0UrKyl7bT0oMHx0aGlzLndvcmRzW0UrVl0pK0E7dmFyIGFlPSgwfEMud29yZHNbRV0pKlQ7QT0oKG0tPTY3MTA4ODYzJmFlKT4+MjYpLShhZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW0UrVl09NjcxMDg4NjMmbX1mb3IoO0U8dGhpcy5sZW5ndGgtVjtFKyspQT0obT0oMHx0aGlzLndvcmRz'@;
put 'W0UrVl0pK0EpPj4yNix0aGlzLndvcmRzW0UrVl09NjcxMDg4NjMmbTtpZigwPT09QSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IocCgtMT09PUEpLEE9MCxFPTA7RTx0aGlzLmxlbmd0aDtFKyspQT0obT0tKDB8dGhpcy53b3Jkc1tFXSkrQSk+PjI2LHRoaXMud29yZHNbRV09NjcxMDg4NjMm'@;
put 'bTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKEMsVCl7dmFyIFYsVT10aGlzLmNsb25lKCksRT1DLG09MHxFLndvcmRzW0UubGVuZ3RoLTFdOzAhPShWPTI2LXRoaXMuX2NvdW50Qml0cyhtKSkmJihFPUUudXNobG4o'@;
put 'ViksVS5pdXNobG4oViksbT0wfEUud29yZHNbRS5sZW5ndGgtMV0pO3ZhciBuZSxhZT1VLmxlbmd0aC1FLmxlbmd0aDtpZigibW9kIiE9PVQpeyhuZT1uZXcgdyhudWxsKSkubGVuZ3RoPWFlKzEsbmUud29yZHM9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZhciBsZT0wO2xlPG5lLmxlbmd0'@;
put 'aDtsZSsrKW5lLndvcmRzW2xlXT0wfXZhciB3ZT1VLmNsb25lKCkuX2lzaGxuc3VibXVsKEUsMSxhZSk7MD09PXdlLm5lZ2F0aXZlJiYoVT13ZSxuZSYmKG5lLndvcmRzW2FlXT0xKSk7Zm9yKHZhciBaZT1hZS0xO1plPj0wO1plLS0pe3ZhciBRZT02NzEwODg2NCooMHxVLndvcmRzW0UubGVu'@;
put 'Z3RoK1plXSkrKDB8VS53b3Jkc1tFLmxlbmd0aCtaZS0xXSk7Zm9yKFFlPU1hdGgubWluKFFlL218MCw2NzEwODg2MyksVS5faXNobG5zdWJtdWwoRSxRZSxaZSk7MCE9PVUubmVnYXRpdmU7KVFlLS0sVS5uZWdhdGl2ZT0wLFUuX2lzaGxuc3VibXVsKEUsMSxaZSksVS5pc1plcm8oKXx8KFUu'@;
put 'bmVnYXRpdmVePTEpO25lJiYobmUud29yZHNbWmVdPVFlKX1yZXR1cm4gbmUmJm5lLl9zdHJpcCgpLFUuX3N0cmlwKCksImRpdiIhPT1UJiYwIT09ViYmVS5pdXNocm4oVikse2RpdjpuZXx8bnVsbCxtb2Q6VX19LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihDLFQsVil7cmV0dXJuIHAo'@;
put 'IUMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLFQpLCJtb2QiIT09VCYmKFU9bS5kaXYubmVnKCkpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVn'@;
put 'KCksViYmMCE9PUUubmVnYXRpdmUmJkUuaWFkZChDKSkse2RpdjpVLG1vZDpFfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlPyhtPXRoaXMuZGl2bW9kKEMubmVnKCksVCksIm1vZCIhPT1UJiYoVT1tLmRpdi5uZWcoKSkse2RpdjpVLG1vZDptLm1vZH0pOnRoaXMubmVnYXRp'@;
put 'dmUmQy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLm5lZygpLFQpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksViYmMCE9PUUubmVnYXRpdmUmJkUuaXN1YihDKSkse2RpdjptLmRpdixtb2Q6RX0pOkMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChDKTwwP3tkaXY6bmV3'@;
put 'IHcoMCksbW9kOnRoaXN9OjE9PT1DLmxlbmd0aD8iZGl2Ij09PVQ/e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09VD97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bmV3'@;
put 'IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoQyxUKTt2YXIgVSxFLG19LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2'@;
put 'bW9kKEMsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihDKXt2YXIgVD10aGlzLmRpdm1vZChDKTtpZihULm1vZC5pc1plcm8oKSlyZXR1cm4g'@;
put 'VC5kaXY7dmFyIFY9MCE9PVQuZGl2Lm5lZ2F0aXZlP1QubW9kLmlzdWIoQyk6VC5tb2QsVT1DLnVzaHJuKDEpLEU9Qy5hbmRsbigxKSxtPVYuY21wKFUpO3JldHVybiBtPDB8fDE9PT1FJiYwPT09bT9ULmRpdjowIT09VC5kaXYubmVnYXRpdmU/VC5kaXYuaXN1Ym4oMSk6VC5kaXYuaWFkZG4o'@;
put 'MSl9LHcucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscChDPD02NzEwODg2Myk7Zm9yKHZhciBWPSgxPDwyNiklQyxVPTAsRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKVU9KFYqVSsoMHx0aGlzLndvcmRzW0VdKSklQztyZXR1cm4gVD8tVTpVfSx3LnBy'@;
put 'b3RvdHlwZS5tb2RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm1vZHJuKEMpfSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLHAoQzw9NjcxMDg4NjMpO2Zvcih2YXIgVj0wLFU9dGhpcy5sZW5ndGgtMTtVPj0wO1UtLSl7dmFyIEU9KDB8dGhpcy53'@;
put 'b3Jkc1tVXSkrNjcxMDg4NjQqVjt0aGlzLndvcmRzW1VdPUUvQ3wwLFY9RSVDfXJldHVybiB0aGlzLl9zdHJpcCgpLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKEMpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1'@;
put 'bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3ZhciBUPXRoaXMsVj1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgVT1uZXcgdygxKSxFPW5ldyB3KDApLG09bmV3IHcoMCksQT1uZXcgdygxKSxhZT0wO1QuaXNF'@;
put 'dmVuKCkmJlYuaXNFdmVuKCk7KVQuaXVzaHJuKDEpLFYuaXVzaHJuKDEpLCsrYWU7Zm9yKHZhciBuZT1WLmNsb25lKCksbGU9VC5jbG9uZSgpOyFULmlzWmVybygpOyl7Zm9yKHZhciB3ZT0wLFplPTE7IShULndvcmRzWzBdJlplKSYmd2U8MjY7Kyt3ZSxaZTw8PTEpO2lmKHdlPjApZm9yKFQu'@;
put 'aXVzaHJuKHdlKTt3ZS0tID4wOykoVS5pc09kZCgpfHxFLmlzT2RkKCkpJiYoVS5pYWRkKG5lKSxFLmlzdWIobGUpKSxVLml1c2hybigxKSxFLml1c2hybigxKTtmb3IodmFyIFFlPTAsYXQ9MTshKFYud29yZHNbMF0mYXQpJiZRZTwyNjsrK1FlLGF0PDw9MSk7aWYoUWU+MClmb3IoVi5pdXNo'@;
put 'cm4oUWUpO1FlLS0gPjA7KShtLmlzT2RkKCl8fEEuaXNPZGQoKSkmJihtLmlhZGQobmUpLEEuaXN1YihsZSkpLG0uaXVzaHJuKDEpLEEuaXVzaHJuKDEpO1QuY21wKFYpPj0wPyhULmlzdWIoViksVS5pc3ViKG0pLEUuaXN1YihBKSk6KFYuaXN1YihUKSxtLmlzdWIoVSksQS5pc3ViKEUpKX1y'@;
put 'ZXR1cm57YTptLGI6QSxnY2Q6Vi5pdXNobG4oYWUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3ZhciB3ZSxUPXRoaXMsVj1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2'@;
put 'YXIgVT1uZXcgdygxKSxFPW5ldyB3KDApLG09Vi5jbG9uZSgpO1QuY21wbigxKT4wJiZWLmNtcG4oMSk+MDspe2Zvcih2YXIgQT0wLGFlPTE7IShULndvcmRzWzBdJmFlKSYmQTwyNjsrK0EsYWU8PD0xKTtpZihBPjApZm9yKFQuaXVzaHJuKEEpO0EtLSA+MDspVS5pc09kZCgpJiZVLmlhZGQo'@;
put 'bSksVS5pdXNocm4oMSk7Zm9yKHZhciBuZT0wLGxlPTE7IShWLndvcmRzWzBdJmxlKSYmbmU8MjY7KytuZSxsZTw8PTEpO2lmKG5lPjApZm9yKFYuaXVzaHJuKG5lKTtuZS0tID4wOylFLmlzT2RkKCkmJkUuaWFkZChtKSxFLml1c2hybigxKTtULmNtcChWKT49MD8oVC5pc3ViKFYpLFUuaXN1'@;
put 'YihFKSk6KFYuaXN1YihUKSxFLmlzdWIoVSkpfXJldHVybih3ZT0wPT09VC5jbXBuKDEpP1U6RSkuY21wbigwKTwwJiZ3ZS5pYWRkKEMpLHdlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oQyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gQy5hYnMoKTtpZihDLmlzWmVybygpKXJldHVybiB0'@;
put 'aGlzLmFicygpO3ZhciBUPXRoaXMuY2xvbmUoKSxWPUMuY2xvbmUoKTtULm5lZ2F0aXZlPTAsVi5uZWdhdGl2ZT0wO2Zvcih2YXIgVT0wO1QuaXNFdmVuKCkmJlYuaXNFdmVuKCk7VSsrKVQuaXVzaHJuKDEpLFYuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtULmlzRXZlbigpOylULml1c2hybigx'@;
put 'KTtmb3IoO1YuaXNFdmVuKCk7KVYuaXVzaHJuKDEpO3ZhciBFPVQuY21wKFYpO2lmKEU8MCl7dmFyIG09VDtUPVYsVj1tfWVsc2UgaWYoMD09PUV8fDA9PT1WLmNtcG4oMSkpYnJlYWs7VC5pc3ViKFYpfXJldHVybiBWLml1c2hsbihVKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXty'@;
put 'ZXR1cm4gdGhpcy5lZ2NkKEMpLmEudW1vZChDKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0'@;
put 'aW9uKEMpe3JldHVybiB0aGlzLndvcmRzWzBdJkN9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDKTt2YXIgVD1DJTI2LFY9KEMtVCkvMjYsVT0xPDxUO2lmKHRoaXMubGVuZ3RoPD1WKXJldHVybiB0aGlzLl9leHBhbmQoVisxKSx0aGlzLndvcmRz'@;
put 'W1ZdfD1VLHRoaXM7Zm9yKHZhciBFPVUsbT1WOzAhPT1FJiZtPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9MHx0aGlzLndvcmRzW21dO0U9KEErPUUpPj4+MjYsdGhpcy53b3Jkc1ttXT1BJj02NzEwODg2M31yZXR1cm4gMCE9PUUmJih0aGlzLndvcmRzW21dPUUsdGhpcy5sZW5ndGgrKyksdGhp'@;
put 'c30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oQyl7dmFyIFYsVD1DPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFUKXJldHVybi0xO2lmKDA9PT10aGlzLm5l'@;
put 'Z2F0aXZlJiZUKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlWPTE7ZWxzZXtUJiYoQz0tQykscChDPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgVT0wfHRoaXMud29yZHNbMF07Vj1VPT09Qz8wOlU8Qz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdh'@;
put 'dGl2ZT8wfC1WOlZ9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihDKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBUPXRoaXMudWNtcChDKTtyZXR1cm4gMCE9PXRo'@;
put 'aXMubmVnYXRpdmU/MHwtVDpUfSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKEMpe2lmKHRoaXMubGVuZ3RoPkMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPEMubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgVD0wLFY9dGhpcy5sZW5ndGgtMTtWPj0wO1YtLSl7dmFyIFU9MHx0aGlz'@;
put 'LndvcmRzW1ZdLEU9MHxDLndvcmRzW1ZdO2lmKFUhPT1FKXtVPEU/VD0tMTpVPkUmJihUPTEpO2JyZWFrfX1yZXR1cm4gVH0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRo'@;
put 'aXMuY21wKEMpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wbihD'@;
put 'KX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPD0wfSx3LnByb3Rv'@;
put 'dHlwZS5lcW49ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXAoQyl9LHcucmVkPWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgZyhDKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oQyl7cmV0'@;
put 'dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxDLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucmVkPUMsdGhp'@;
put 'c30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwi'@;
put 'cmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhp'@;
put 'cyxDKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQs'@;
put 'InJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhp'@;
put 'cyxDKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxDKSx0aGlzLnJlZC5tdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5j'@;
put 'dGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQuaW11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVk'@;
put 'U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVn'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCYmIUMu'@;
put 'cmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLEMpfTt2YXIgZ2U9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBfZSh4LEMpe3RoaXMubmFtZT14LHRoaXMucD1uZXcgdyhD'@;
put 'LDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gVGUoKXtfZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFNlKCl7X2UuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiB6ZSgpe19lLmNhbGwodGhp'@;
put 'cywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24geigpe19lLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm'@;
put 'ZmVkIil9ZnVuY3Rpb24gZyh4KXtpZigic3RyaW5nIj09dHlwZW9mIHgpe3ZhciBDPXcuX3ByaW1lKHgpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgcCh4Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXgsdGhpcy5wcmltZT1udWxsfWZ1bmN0'@;
put 'aW9uIHkoeCl7Zy5jYWxsKHRoaXMseCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNx'@;
put 'cigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1fZS5wcm90b3R5'@;
put 'cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksQ30sX2UucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oQyl7dmFyIFYsVD1DO2Rve3RoaXMuc3BsaXQoVCx0aGlzLnRtcCksVj0oVD0oVD10'@;
put 'aGlzLmltdWxLKFQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoVj50aGlzLm4pO3ZhciBVPVY8dGhpcy5uPy0xOlQudWNtcCh0aGlzLnApO3JldHVybiAwPT09VT8oVC53b3Jkc1swXT0wLFQubGVuZ3RoPTEpOlU+MD9ULmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ULnN0cmlw'@;
put 'P1Quc3RyaXAoKTpULl9zdHJpcCgpLFR9LF9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe0MuaXVzaHJuKHRoaXMubiwwLFQpfSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaW11bCh0aGlzLmspfSxOKFRlLF9lKSxUZS5wcm90b3R5cGUuc3BsaXQ9ZnVu'@;
put 'Y3Rpb24oQyxUKXtmb3IodmFyIFY9NDE5NDMwMyxVPU1hdGgubWluKEMubGVuZ3RoLDkpLEU9MDtFPFU7RSsrKVQud29yZHNbRV09Qy53b3Jkc1tFXTtpZihULmxlbmd0aD1VLEMubGVuZ3RoPD05KXJldHVybiBDLndvcmRzWzBdPTAsdm9pZChDLmxlbmd0aD0xKTt2YXIgbT1DLndvcmRzWzld'@;
put 'O2ZvcihULndvcmRzW1QubGVuZ3RoKytdPW0mVixFPTEwO0U8Qy5sZW5ndGg7RSsrKXt2YXIgQT0wfEMud29yZHNbRV07Qy53b3Jkc1tFLTEwXT0oQSZWKTw8NHxtPj4+MjIsbT1BfUMud29yZHNbRS0xMF09bT4+Pj0yMixDLmxlbmd0aC09MD09PW0mJkMubGVuZ3RoPjEwPzEwOjl9LFRlLnBy'@;
put 'b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtDLndvcmRzW0MubGVuZ3RoXT0wLEMud29yZHNbQy5sZW5ndGgrMV09MCxDLmxlbmd0aCs9Mjtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtWKyspe3ZhciBVPTB8Qy53b3Jkc1tWXTtDLndvcmRzW1ZdPTY3MTA4ODYzJihUKz05NzcqVSksVD02'@;
put 'NCpVKyhULzY3MTA4ODY0fDApfXJldHVybiAwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmKEMubGVuZ3RoLS0sMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJkMubGVuZ3RoLS0pLEN9LE4oU2UsX2UpLE4oemUsX2UpLE4oeixfZSksei5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Zm9yKHZh'@;
put 'ciBUPTAsVj0wO1Y8Qy5sZW5ndGg7VisrKXt2YXIgVT0xOSooMHxDLndvcmRzW1ZdKStULEU9NjcxMDg4NjMmVTtVPj4+PTI2LEMud29yZHNbVl09RSxUPVV9cmV0dXJuIDAhPT1UJiYoQy53b3Jkc1tDLmxlbmd0aCsrXT1UKSxDfSx3Ll9wcmltZT1mdW5jdGlvbihDKXtpZihnZVtDXSlyZXR1'@;
put 'cm4gZ2VbQ107dmFyIFQ7aWYoImsyNTYiPT09QylUPW5ldyBUZTtlbHNlIGlmKCJwMjI0Ij09PUMpVD1uZXcgU2U7ZWxzZSBpZigicDE5MiI9PT1DKVQ9bmV3IHplO2Vsc2V7aWYoInAyNTUxOSIhPT1DKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK0MpO1Q9bmV3IHp9cmV0dXJu'@;
put 'IGdlW0NdPVQsVH0sZy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oQyl7cCgwPT09Qy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKEMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0'@;
put 'aW9uKEMsVCl7cCghKEMubmVnYXRpdmV8VC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChDLnJlZCYmQy5yZWQ9PT1ULnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxnLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0'@;
put 'aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShDKS5fZm9yY2VSZWQodGhpcyk6KFAoQyxDLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLEMpfSxnLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaXNaZXJvKCk/Qy5jbG9uZSgpOnRoaXMubS5zdWIoQykuX2ZvcmNl'@;
put 'UmVkKHRoaXMpfSxnLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIFY9Qy5hZGQoVCk7cmV0dXJuIFYuY21wKHRoaXMubSk+PTAmJlYuaXN1Yih0aGlzLm0pLFYuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMsVCl7'@;
put 'dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBWPUMuaWFkZChUKTtyZXR1cm4gVi5jbXAodGhpcy5tKT49MCYmVi5pc3ViKHRoaXMubSksVn0sZy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBWPUMuc3ViKFQpO3JldHVybiBWLmNtcG4oMCk8MCYmVi5p'@;
put 'YWRkKHRoaXMubSksVi5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIFY9Qy5pc3ViKFQpO3JldHVybiBWLmNtcG4oMCk8MCYmVi5pYWRkKHRoaXMubSksVn0sZy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKEMsVCl7'@;
put 'cmV0dXJuIHRoaXMuX3ZlcmlmeTEoQyksdGhpcy5pbW9kKEMudXNobG4oVCkpfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5pbXVsKFQpKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRo'@;
put 'aXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5tdWwoVCkpfSxnLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltdWwoQyxDLmNsb25lKCkpfSxnLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubXVsKEMsQyl9LGcucHJvdG90eXBlLnNxcnQ9'@;
put 'ZnVuY3Rpb24oQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBUPXRoaXMubS5hbmRsbigzKTtpZihwKFQlMj09MSksMz09PVQpe3ZhciBWPXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coQyxWKX1mb3IodmFyIFU9dGhpcy5tLnN1Ym4o'@;
put 'MSksRT0wOyFVLmlzWmVybygpJiYwPT09VS5hbmRsbigxKTspRSsrLFUuaXVzaHJuKDEpO3AoIVUuaXNaZXJvKCkpO3ZhciBtPW5ldyB3KDEpLnRvUmVkKHRoaXMpLEE9bS5yZWROZWcoKSxhZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbmU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihuZT1u'@;
put 'ZXcgdygyKm5lKm5lKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobmUsYWUpLmNtcChBKTspbmUucmVkSUFkZChBKTtmb3IodmFyIGxlPXRoaXMucG93KG5lLFUpLHdlPXRoaXMucG93KEMsVS5hZGRuKDEpLml1c2hybigxKSksWmU9dGhpcy5wb3coQyxVKSxRZT1FOzAhPT1aZS5jbXAobSk7'@;
put 'KXtmb3IodmFyIGF0PVplLHhlPTA7MCE9PWF0LmNtcChtKTt4ZSsrKWF0PWF0LnJlZFNxcigpO3AoeGU8UWUpO3ZhciB2ZT10aGlzLnBvdyhsZSxuZXcgdygxKS5pdXNobG4oUWUteGUtMSkpO3dlPXdlLnJlZE11bCh2ZSksbGU9dmUucmVkU3FyKCksWmU9WmUucmVkTXVsKGxlKSxRZT14ZX1y'@;
put 'ZXR1cm4gd2V9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PVQubmVnYXRpdmU/KFQubmVnYXRpdmU9MCx0aGlzLmltb2QoVCkucmVkTmVnKCkpOnRoaXMuaW1vZChUKX0sZy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMsVCl7'@;
put 'aWYoVC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PVQuY21wbigxKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBVPW5ldyBBcnJheSgxNik7VVswXT1uZXcgdygxKS50b1JlZCh0aGlzKSxVWzFdPUM7Zm9yKHZhciBFPTI7RTxVLmxlbmd0aDtFKyspVVtFXT10aGlz'@;
put 'Lm11bChVW0UtMV0sQyk7dmFyIG09VVswXSxBPTAsYWU9MCxuZT1ULmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksRT1ULmxlbmd0aC0xO0U+PTA7RS0tKXtmb3IodmFyIGxlPVQud29yZHNbRV0sd2U9bmUtMTt3ZT49MDt3ZS0tKXt2YXIgWmU9bGU+PndlJjE7bSE9PVVbMF0m'@;
put 'JihtPXRoaXMuc3FyKG0pKSwwIT09WmV8fDAhPT1BPyhBPDw9MSxBfD1aZSwoND09KythZXx8MD09PUUmJjA9PT13ZSkmJihtPXRoaXMubXVsKG0sVVtBXSksYWU9MCxBPTApKTphZT0wfW5lPTI2fXJldHVybiBtfSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7dmFyIFQ9Qy51'@;
put 'bW9kKHRoaXMubSk7cmV0dXJuIFQ9PT1DP1QuY2xvbmUoKTpUfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD1DLmNsb25lKCk7cmV0dXJuIFQucmVkPW51bGwsVH0sdy5tb250PWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgeShDKX0sTih5LGcpLHkucHJvdG90eXBl'@;
put 'LmNvbnZlcnRUbz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMudXNobG4odGhpcy5zaGlmdCkpfSx5LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD10aGlzLmltb2QoQy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIFQucmVkPW51bGwsVH0seS5wcm90b3R5cGUu'@;
put 'aW11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIEMud29yZHNbMF09MCxDLmxlbmd0aD0xLEM7dmFyIFY9Qy5pbXVsKFQpLFU9Vi5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1W'@;
put 'LmlzdWIoVSkuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJv'@;
put 'KCl8fFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgVj1DLm11bChUKSxVPVYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9Vi5pc3ViKFUpLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7'@;
put 'cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSx5LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5y'@;
put 'MikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sOTkzMTooY2UsSixiKT0+e3ZhciBEO2Z1bmN0aW9uIF8oTil7dGhpcy5yYW5kPU59aWYoY2UuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1cm4gRHx8KEQ9bmV3IF8obnVsbCkpLEQuZ2VuZXJhdGUodyl9LGNlLmV4cG9y'@;
put 'dHMuUmFuZD1fLF8ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yYW5kKHcpfSxfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyh3KTtmb3IodmFyIEY9bmV3IFVpbnQ4'@;
put 'QXJyYXkodyksSD0wO0g8Ri5sZW5ndGg7SCsrKUZbSF09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gRn0sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIEY9bmV3'@;
put 'IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhGKSxGfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgRj1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2Vs'@;
put 'Zi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoRiksRn06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIHA9Yig5MjE0KTtpZigiZnVuY3Rpb24i'@;
put 'IT10eXBlb2YgcC5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtyZXR1cm4gcC5yYW5kb21CeXRlcyh3KX19Y2F0Y2h7fX0sNDQ5NzooY2UsSixiKT0+e3ZhciBEPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9u'@;
put 'IF8oUil7RC5pc0J1ZmZlcihSKXx8KFI9RC5mcm9tKFIpKTtmb3IodmFyIGo9Ui5sZW5ndGgvNHwwLFA9bmV3IEFycmF5KGopLEw9MDtMPGo7TCsrKVBbTF09Ui5yZWFkVUludDMyQkUoNCpMKTtyZXR1cm4gUH1mdW5jdGlvbiBwKFIpe2Zvcig7MDxSLmxlbmd0aDtSKyspUlswXT0wfWZ1bmN0'@;
put 'aW9uIE4oUixqLFAsTCxZKXtmb3IodmFyIHNlLGdlLF9lLFRlLEI9UFswXSxXPVBbMV0sWj1QWzJdLFg9UFszXSxRPVJbMF1ealswXSxxPVJbMV1ealsxXSx0ZT1SWzJdXmpbMl0saWU9UlszXV5qWzNdLFNlPTQsemU9MTt6ZTxZO3plKyspc2U9QltRPj4+MjRdXldbcT4+PjE2JjI1NV1eWlt0'@;
put 'ZT4+PjgmMjU1XV5YWzI1NSZpZV1ealtTZSsrXSxnZT1CW3E+Pj4yNF1eV1t0ZT4+PjE2JjI1NV1eWltpZT4+PjgmMjU1XV5YWzI1NSZRXV5qW1NlKytdLF9lPUJbdGU+Pj4yNF1eV1tpZT4+PjE2JjI1NV1eWltRPj4+OCYyNTVdXlhbMjU1JnFdXmpbU2UrK10sVGU9QltpZT4+PjI0XV5XW1E+'@;
put 'Pj4xNiYyNTVdXlpbcT4+PjgmMjU1XV5YWzI1NSZ0ZV1ealtTZSsrXSxRPXNlLHE9Z2UsdGU9X2UsaWU9VGU7cmV0dXJuIHNlPShMW1E+Pj4yNF08PDI0fExbcT4+PjE2JjI1NV08PDE2fExbdGU+Pj44JjI1NV08PDh8TFsyNTUmaWVdKV5qW1NlKytdLGdlPShMW3E+Pj4yNF08PDI0fExbdGU+'@;
put 'Pj4xNiYyNTVdPDwxNnxMW2llPj4+OCYyNTVdPDw4fExbMjU1JlFdKV5qW1NlKytdLF9lPShMW3RlPj4+MjRdPDwyNHxMW2llPj4+MTYmMjU1XTw8MTZ8TFtRPj4+OCYyNTVdPDw4fExbMjU1JnFdKV5qW1NlKytdLFRlPShMW2llPj4+MjRdPDwyNHxMW1E+Pj4xNiYyNTVdPDwxNnxMW3E+Pj44'@;
put 'JjI1NV08PDh8TFsyNTUmdGVdKV5qW1NlKytdLFtzZT4+Pj0wLGdlPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIgdz1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sRj1mdW5jdGlvbigpe2Zvcih2YXIgUj1uZXcgQXJyYXkoMjU2KSxqPTA7ajwyNTY7aisrKVJbal09ajwxMjg/ajw8'@;
put 'MTpqPDwxXjI4Mztmb3IodmFyIFA9W10sTD1bXSxZPVtbXSxbXSxbXSxbXV0sQj1bW10sW10sW10sW11dLFc9MCxaPTAsWD0wO1g8MjU2OysrWCl7dmFyIFE9Wl5aPDwxXlo8PDJeWjw8M15aPDw0O1BbV109UT1RPj4+OF4yNTUmUV45OSxMW1FdPVc7dmFyIHE9UltXXSx0ZT1SW3FdLGllPVJb'@;
put 'dGVdLHNlPTI1NypSW1FdXjE2ODQzMDA4KlE7WVswXVtXXT1zZTw8MjR8c2U+Pj44LFlbMV1bV109c2U8PDE2fHNlPj4+MTYsWVsyXVtXXT1zZTw8OHxzZT4+PjI0LFlbM11bV109c2UsQlswXVtRXT0oc2U9MTY4NDMwMDkqaWVeNjU1MzcqdGVeMjU3KnFeMTY4NDMwMDgqVyk8PDI0fHNlPj4+'@;
put 'OCxCWzFdW1FdPXNlPDwxNnxzZT4+PjE2LEJbMl1bUV09c2U8PDh8c2U+Pj4yNCxCWzNdW1FdPXNlLDA9PT1XP1c9Wj0xOihXPXFeUltSW1JbaWVecV1dXSxaXj1SW1JbWl1dKX1yZXR1cm57U0JPWDpQLElOVl9TQk9YOkwsU1VCX01JWDpZLElOVl9TVUJfTUlYOkJ9fSgpO2Z1bmN0aW9uIEgo'@;
put 'Uil7dGhpcy5fa2V5PV8oUiksdGhpcy5fcmVzZXQoKX1ILmJsb2NrU2l6ZT0xNixILmtleVNpemU9MzIsSC5wcm90b3R5cGUuYmxvY2tTaXplPUguYmxvY2tTaXplLEgucHJvdG90eXBlLmtleVNpemU9SC5rZXlTaXplLEgucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgUj10'@;
put 'aGlzLl9rZXksaj1SLmxlbmd0aCxQPWorNixMPTQqKFArMSksWT1bXSxCPTA7QjxqO0IrKylZW0JdPVJbQl07Zm9yKEI9ajtCPEw7QisrKXt2YXIgVz1ZW0ItMV07QiVqPT0wPyhXPUYuU0JPWFsoVz1XPDw4fFc+Pj4yNCk+Pj4yNF08PDI0fEYuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8Ri5TQk9Y'@;
put 'W1c+Pj44JjI1NV08PDh8Ri5TQk9YWzI1NSZXXSxXXj13W0IvanwwXTw8MjQpOmo+NiYmQiVqPT00JiYoVz1GLlNCT1hbVz4+PjI0XTw8MjR8Ri5TQk9YW1c+Pj4xNiYyNTVdPDwxNnxGLlNCT1hbVz4+PjgmMjU1XTw8OHxGLlNCT1hbMjU1JlddKSxZW0JdPVlbQi1qXV5XfWZvcih2YXIgWj1b'@;
put 'XSxYPTA7WDxMO1grKyl7dmFyIFE9TC1YLHE9WVtRLShYJTQ/MDo0KV07WltYXT1YPDR8fFE8PTQ/cTpGLklOVl9TVUJfTUlYWzBdW0YuU0JPWFtxPj4+MjRdXV5GLklOVl9TVUJfTUlYWzFdW0YuU0JPWFtxPj4+MTYmMjU1XV1eRi5JTlZfU1VCX01JWFsyXVtGLlNCT1hbcT4+PjgmMjU1XV1e'@;
put 'Ri5JTlZfU1VCX01JWFszXVtGLlNCT1hbMjU1JnFdXX10aGlzLl9uUm91bmRzPVAsdGhpcy5fa2V5U2NoZWR1bGU9WSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1afSxILnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oUil7cmV0dXJuIE4oUj1fKFIpLHRoaXMuX2tleVNjaGVkdWxl'@;
put 'LEYuU1VCX01JWCxGLlNCT1gsdGhpcy5fblJvdW5kcyl9LEgucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihSKXt2YXIgaj10aGlzLmVuY3J5cHRCbG9ja1JhdyhSKSxQPUQuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBQLndyaXRlVUludDMyQkUoalswXSwwKSxQLndyaXRlVUludDMy'@;
put 'QkUoalsxXSw0KSxQLndyaXRlVUludDMyQkUoalsyXSw4KSxQLndyaXRlVUludDMyQkUoalszXSwxMiksUH0sSC5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKFIpe3ZhciBqPShSPV8oUikpWzFdO1JbMV09UlszXSxSWzNdPWo7dmFyIFA9TihSLHRoaXMuX2ludktleVNjaGVkdWxl'@;
put 'LEYuSU5WX1NVQl9NSVgsRi5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxMPUQuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlVUludDMyQkUoUFswXSwwKSxMLndyaXRlVUludDMyQkUoUFszXSw0KSxMLndyaXRlVUludDMyQkUoUFsyXSw4KSxMLndyaXRlVUludDMyQkUoUFsxXSwxMiks'@;
put 'TH0sSC5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtwKHRoaXMuX2tleVNjaGVkdWxlKSxwKHRoaXMuX2ludktleVNjaGVkdWxlKSxwKHRoaXMuX2tleSl9LGNlLmV4cG9ydHMuQUVTPUh9LDQ4NDg6KGNlLEosYik9Pnt2YXIgRD1iKDQ0OTcpLF89Yig5NTA5KS5CdWZmZXIscD1iKDEwMjcp'@;
put 'LE49Yig1NzE3KSx3PWIoMzI4OCksRj1iKDcyOTUpLEg9Yig2ODUpO2Z1bmN0aW9uIFAoTCxZLEIsVyl7cC5jYWxsKHRoaXMpO3ZhciBaPV8uYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3IEQuQUVTKFkpO3ZhciBYPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soWik7dGhpcy5fZ2hhc2g9'@;
put 'bmV3IHcoWCksQj1mdW5jdGlvbiBqKEwsWSxCKXtpZigxMj09PVkubGVuZ3RoKXJldHVybiBMLl9maW5JRD1fLmNvbmNhdChbWSxfLmZyb20oWzAsMCwwLDFdKV0pLF8uY29uY2F0KFtZLF8uZnJvbShbMCwwLDAsMl0pXSk7dmFyIFc9bmV3IHcoQiksWj1ZLmxlbmd0aCxYPVolMTY7Vy51cGRh'@;
put 'dGUoWSksWCYmVy51cGRhdGUoXy5hbGxvYyhYPTE2LVgsMCkpLFcudXBkYXRlKF8uYWxsb2MoOCwwKSk7dmFyIFE9OCpaLHE9Xy5hbGxvYyg4KTtxLndyaXRlVUludEJFKFEsMCw4KSxXLnVwZGF0ZShxKSxMLl9maW5JRD1XLnN0YXRlO3ZhciB0ZT1fLmZyb20oTC5fZmluSUQpO3JldHVybiBI'@;
put 'KHRlKSx0ZX0odGhpcyxCLFgpLHRoaXMuX3ByZXY9Xy5mcm9tKEIpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVcsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9TCx0aGlzLl9hdXRo'@;
put 'VGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfU4oUCxwKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBZPTE2LXRoaXMuX2FsZW4lMTY7WTwxNiYmKFk9Xy5hbGxvYyhZLDApLHRoaXMuX2doYXNoLnVwZGF0ZShZKSl9dGhp'@;
put 'cy5fY2FsbGVkPSEwO3ZhciBCPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEwpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9MOkIpLHRoaXMuX2xlbis9TC5sZW5ndGgsQn0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRo'@;
put 'aXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTD1GKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9m'@;
put 'aW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIFIoTCxZKXt2YXIgQj0wO0wubGVuZ3RoIT09WS5sZW5ndGgmJkIrKztmb3IodmFyIFc9TWF0aC5taW4oTC5sZW5ndGgsWS5sZW5ndGgpLFo9MDtaPFc7KytaKUIrPUxbWl1eWVtaXTtyZXR1cm4gQn0oTCx0aGlzLl9hdXRoVGFnKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9TCx0aGlzLl9jaXBoZXIuc2NydWIoKX0sUC5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVm'@;
put 'ZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sUC5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihZKXtpZighdGhpcy5fZGVjcnlwdCl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1ZfSxQLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFE'@;
put 'IGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKFkpLHRoaXMuX2FsZW4rPVkubGVuZ3RofSxjZS5leHBvcnRzPVB9LDQ2OTY6KGNlLEosYik9Pnt2YXIgRD1iKDE0OTQpLF89Yig2MTkzKSxwPWIoNDk0Nik7Si5jcmVhdGVDaXBoZXI9Si5DaXBoZXI9RC5jcmVhdGVD'@;
put 'aXBoZXIsSi5jcmVhdGVDaXBoZXJpdj1KLkNpcGhlcml2PUQuY3JlYXRlQ2lwaGVyaXYsSi5jcmVhdGVEZWNpcGhlcj1KLkRlY2lwaGVyPV8uY3JlYXRlRGVjaXBoZXIsSi5jcmVhdGVEZWNpcGhlcml2PUouRGVjaXBoZXJpdj1fLmNyZWF0ZURlY2lwaGVyaXYsSi5saXN0Q2lwaGVycz1KLmdl'@;
put 'dENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhwKX19LDYxOTM6KGNlLEosYik9Pnt2YXIgRD1iKDQ4NDgpLF89Yig5NTA5KS5CdWZmZXIscD1iKDQ1KSxOPWIoNTk2OSksdz1iKDEwMjcpLEY9Yig0NDk3KSxIPWIoMzA0OCk7ZnVuY3Rpb24gaihXLFosWCl7dy5jYWxs'@;
put 'KHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBQLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgRi5BRVMoWiksdGhpcy5fcHJldj1fLmZyb20oWCksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIFAoKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9'@;
put 'ZnVuY3Rpb24gWShXLFosWCl7dmFyIFE9cFtXLnRvTG93ZXJDYXNlKCldO2lmKCFRKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWCYmKFg9Xy5mcm9tKFgpKSwiR0NNIiE9PVEubW9kZSYmWC5sZW5ndGghPT1RLml2KXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrWC5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgWiYmKFo9Xy5mcm9tKFopKSxaLmxlbmd0aCE9PVEua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWi5sZW5ndGgpO3JldHVybiJzdHJl'@;
put 'YW0iPT09US50eXBlP25ldyBOKFEubW9kdWxlLFosWCwhMCk6ImF1dGgiPT09US50eXBlP25ldyBEKFEubW9kdWxlLFosWCwhMCk6bmV3IGooUS5tb2R1bGUsWixYKX1iKDU3MTcpKGosdyksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZh'@;
put 'ciBaLFgsUT1bXTtaPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KVg9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsWiksUS5wdXNoKFgpO3JldHVybiBfLmNvbmNhdChRKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtp'@;
put 'Zih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gTChXKXt2YXIgWj1XWzE1XTtpZihaPDF8fFo+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciBYPS0xOysrWDxaOylpZihXW1grKDE2LVopXSE9PVopdGhyb3cgbmV3IEVycm9yKCJ1'@;
put 'bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1aKXJldHVybiBXLnNsaWNlKDAsMTYtWil9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFcpKTtpZihXKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LGoucHJvdG90eXBlLnNldEF1dG9Q'@;
put 'YWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcpe3RoaXMuY2FjaGU9Xy5jb25jYXQoW3RoaXMuY2FjaGUsV10pfSxQLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVyl7dmFyIFo7aWYoVyl7aWYodGhp'@;
put 'cy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIFo9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFp9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIFo9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2Fj'@;
put 'aGUuc2xpY2UoMTYpLFo7cmV0dXJuIG51bGx9LFAucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LEouY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24gQihXLFope3ZhciBYPXBbVy50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgUT1IKFosITEsWC5rZXksWC5pdik7cmV0dXJuIFkoVyxRLmtleSxRLml2KX0sSi5jcmVhdGVEZWNpcGhlcml2PVl9LDE0OTQ6KGNlLEosYik9Pnt2YXIgRD1iKDQ1KSxfPWIoNDg0OCkscD1iKDk1MDkpLkJ1ZmZlcixO'@;
put 'PWIoNTk2OSksdz1iKDEwMjcpLEY9Yig0NDk3KSxIPWIoMzA0OCk7ZnVuY3Rpb24gaihXLFosWCl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBMLHRoaXMuX2NpcGhlcj1uZXcgRi5BRVMoWiksdGhpcy5fcHJldj1wLmZyb20oWCksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5n'@;
put 'PSEwfWIoNTcxNykoaix3KSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFosWCxRPVtdO1o9dGhpcy5fY2FjaGUuZ2V0KCk7KVg9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWiksUS5wdXNoKFgpO3JldHVybiBwLmNvbmNhdChRKX07'@;
put 'dmFyIFA9cC5hbGxvYygxNiwxNik7ZnVuY3Rpb24gTCgpe3RoaXMuY2FjaGU9cC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBZKFcsWixYKXt2YXIgUT1EW1cudG9Mb3dlckNhc2UoKV07aWYoIVEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBaJiYoWj1wLmZyb20oWikpLFoubGVuZ3RoIT09US5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitaLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBYJiYoWD1wLmZyb20oWCkpLCJHQ00iIT09US5tb2RlJiZYLmxlbmd0aCE9PVEuaXYp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitYLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1RLnR5cGU/bmV3IE4oUS5tb2R1bGUsWixYKToiYXV0aCI9PT1RLnR5cGU/bmV3IF8oUS5tb2R1bGUsWixYKTpuZXcgaihRLm1vZHVsZSxaLFgpfWoucHJvdG90eXBlLl9m'@;
put 'aW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFc9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVyksdGhpcy5fY2lwaGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoUCkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCks'@;
put 'bmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sai5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1wLmNv'@;
put 'bmNhdChbdGhpcy5jYWNoZSxXXSl9LEwucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90'@;
put 'eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTE2LXRoaXMuY2FjaGUubGVuZ3RoLFo9cC5hbGxvY1Vuc2FmZShXKSxYPS0xOysrWDxXOylaLndyaXRlVUludDgoVyxYKTtyZXR1cm4gcC5jb25jYXQoW3RoaXMuY2FjaGUsWl0pfSxKLmNyZWF0ZUNpcGhlcml2PVksSi5jcmVhdGVDaXBo'@;
put 'ZXI9ZnVuY3Rpb24gQihXLFope3ZhciBYPURbVy50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgUT1IKFosITEsWC5rZXksWC5pdik7cmV0dXJuIFkoVyxRLmtleSxRLml2KX19LDMyODg6KGNlLEosYik9Pnt2YXIgRD1i'@;
put 'KDk1MDkpLkJ1ZmZlcixfPUQuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gTihGKXt2YXIgSD1ELmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gSC53cml0ZVVJbnQzMkJFKEZbMF0+Pj4wLDApLEgud3JpdGVVSW50MzJCRShGWzFdPj4+MCw0KSxILndyaXRlVUludDMyQkUoRlsyXT4+PjAsOCksSC53cml0'@;
put 'ZVVJbnQzMkJFKEZbM10+Pj4wLDEyKSxIfWZ1bmN0aW9uIHcoRil7dGhpcy5oPUYsdGhpcy5zdGF0ZT1ELmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9RC5hbGxvY1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihGKXtmb3IodmFyIEg9LTE7KytIPEYubGVuZ3RoOyl0aGlzLnN0'@;
put 'YXRlW0hdXj1GW0hdO3RoaXMuX211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgUixQLEY9ZnVuY3Rpb24gcChGKXtyZXR1cm5bRi5yZWFkVUludDMyQkUoMCksRi5yZWFkVUludDMyQkUoNCksRi5yZWFkVUludDMyQkUoOCksRi5yZWFkVUludDMy'@;
put 'QkUoMTIpXX0odGhpcy5oKSxIPVswLDAsMCwwXSxMPS0xOysrTDwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihMLzgpXSYxPDw3LUwlOCkmJihIWzBdXj1GWzBdLEhbMV1ePUZbMV0sSFsyXV49RlsyXSxIWzNdXj1GWzNdKSxQPSEhKDEmRlszXSksUj0zO1I+MDtSLS0pRltSXT1GW1JdPj4+'@;
put 'MXwoMSZGW1ItMV0pPDwzMTtGWzBdPUZbMF0+Pj4xLFAmJihGWzBdPS01MjAwOTM2OTZeRlswXSl9dGhpcy5zdGF0ZT1OKEgpfSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5jYWNoZT1ELmNvbmNhdChbdGhpcy5jYWNoZSxGXSk7Zm9yKHZhciBIO3RoaXMuY2FjaGUubGVu'@;
put 'Z3RoPj0xNjspSD10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChIKX0sdy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oRixIKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goRC5jb25jYXQoW3RoaXMu'@;
put 'Y2FjaGUsX10sMTYpKSx0aGlzLmdoYXNoKE4oWzAsRiwwLEhdKSksdGhpcy5zdGF0ZX0sY2UuZXhwb3J0cz13fSw2ODU6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uIEooYil7Zm9yKHZhciBfLEQ9Yi5sZW5ndGg7RC0tOyl7aWYoMjU1IT09KF89Yi5yZWFkVUludDgoRCkpKXtfKyssYi53cml0'@;
put 'ZVVJbnQ4KF8sRCk7YnJlYWt9Yi53cml0ZVVJbnQ4KDAsRCl9fX0sNTI5MjooY2UsSixiKT0+e3ZhciBEPWIoNzI5NSk7Si5lbmNyeXB0PWZ1bmN0aW9uKF8scCl7dmFyIE49RChwLF8uX3ByZXYpO3JldHVybiBfLl9wcmV2PV8uX2NpcGhlci5lbmNyeXB0QmxvY2soTiksXy5fcHJldn0sSi5k'@;
put 'ZWNyeXB0PWZ1bmN0aW9uKF8scCl7dmFyIE49Xy5fcHJldjtfLl9wcmV2PXA7dmFyIHc9Xy5fY2lwaGVyLmRlY3J5cHRCbG9jayhwKTtyZXR1cm4gRCh3LE4pfX0sNjMxMTooY2UsSixiKT0+e3ZhciBEPWIoOTUwOSkuQnVmZmVyLF89Yig3Mjk1KTtmdW5jdGlvbiBwKE4sdyxGKXt2YXIgSD13'@;
put 'Lmxlbmd0aCxSPV8odyxOLl9jYWNoZSk7cmV0dXJuIE4uX2NhY2hlPU4uX2NhY2hlLnNsaWNlKEgpLE4uX3ByZXY9RC5jb25jYXQoW04uX3ByZXYsRj93OlJdKSxSfUouZW5jcnlwdD1mdW5jdGlvbihOLHcsRil7Zm9yKHZhciBSLEg9RC5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9'@;
put 'PT1OLl9jYWNoZS5sZW5ndGgmJihOLl9jYWNoZT1OLl9jaXBoZXIuZW5jcnlwdEJsb2NrKE4uX3ByZXYpLE4uX3ByZXY9RC5hbGxvY1Vuc2FmZSgwKSksIShOLl9jYWNoZS5sZW5ndGg8PXcubGVuZ3RoKSl7SD1ELmNvbmNhdChbSCxwKE4sdyxGKV0pO2JyZWFrfUg9RC5jb25jYXQoW0gscChO'@;
put 'LHcuc2xpY2UoMCxSPU4uX2NhY2hlLmxlbmd0aCksRildKSx3PXcuc2xpY2UoUil9cmV0dXJuIEh9fSwxNTEwOihjZSxKLGIpPT57dmFyIEQ9Yig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhOLHcsRil7Zm9yKHZhciBMLFksUj0tMSxQPTA7KytSPDg7KVArPSgxMjgmKFk9Ti5fY2lwaGVyLmVu'@;
put 'Y3J5cHRCbG9jayhOLl9wcmV2KVswXV4oTD13JjE8PDctUj8xMjg6MCkpKT4+UiU4LE4uX3ByZXY9cChOLl9wcmV2LEY/TDpZKTtyZXR1cm4gUH1mdW5jdGlvbiBwKE4sdyl7dmFyIEY9Ti5sZW5ndGgsSD0tMSxSPUQuYWxsb2NVbnNhZmUoTi5sZW5ndGgpO2ZvcihOPUQuY29uY2F0KFtOLEQu'@;
put 'ZnJvbShbd10pXSk7KytIPEY7KVJbSF09TltIXTw8MXxOW0grMV0+Pjc7cmV0dXJuIFJ9Si5lbmNyeXB0PWZ1bmN0aW9uKE4sdyxGKXtmb3IodmFyIEg9dy5sZW5ndGgsUj1ELmFsbG9jVW5zYWZlKEgpLGo9LTE7KytqPEg7KVJbal09XyhOLHdbal0sRik7cmV0dXJuIFJ9fSwxOTY0OihjZSxK'@;
put 'LGIpPT57dmFyIEQ9Yig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhwLE4sdyl7dmFyIEg9cC5fY2lwaGVyLmVuY3J5cHRCbG9jayhwLl9wcmV2KVswXV5OO3JldHVybiBwLl9wcmV2PUQuY29uY2F0KFtwLl9wcmV2LnNsaWNlKDEpLEQuZnJvbShbdz9OOkhdKV0pLEh9Si5lbmNyeXB0PWZ1bmN0'@;
put 'aW9uKHAsTix3KXtmb3IodmFyIEY9Ti5sZW5ndGgsSD1ELmFsbG9jVW5zYWZlKEYpLFI9LTE7KytSPEY7KUhbUl09XyhwLE5bUl0sdyk7cmV0dXJuIEh9fSw2MDA5OihjZSxKLGIpPT57dmFyIEQ9Yig3Mjk1KSxfPWIoOTUwOSkuQnVmZmVyLHA9Yig2ODUpO2Z1bmN0aW9uIE4oRil7dmFyIEg9'@;
put 'Ri5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhGLl9wcmV2KTtyZXR1cm4gcChGLl9wcmV2KSxIfUouZW5jcnlwdD1mdW5jdGlvbihGLEgpe3ZhciBSPU1hdGguY2VpbChILmxlbmd0aC8xNiksaj1GLl9jYWNoZS5sZW5ndGg7Ri5fY2FjaGU9Xy5jb25jYXQoW0YuX2NhY2hlLF8uYWxsb2NVbnNh'@;
put 'ZmUoMTYqUildKTtmb3IodmFyIFA9MDtQPFI7UCsrKXt2YXIgTD1OKEYpLFk9aisxNipQO0YuX2NhY2hlLndyaXRlVUludDMyQkUoTFswXSxZKzApLEYuX2NhY2hlLndyaXRlVUludDMyQkUoTFsxXSxZKzQpLEYuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxZKzgpLEYuX2NhY2hlLndyaXRl'@;
put 'VUludDMyQkUoTFszXSxZKzEyKX12YXIgQj1GLl9jYWNoZS5zbGljZSgwLEgubGVuZ3RoKTtyZXR1cm4gRi5fY2FjaGU9Ri5fY2FjaGUuc2xpY2UoSC5sZW5ndGgpLEQoSCxCKX19LDEwODQ6KGNlLEopPT57Si5lbmNyeXB0PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuX2NpcGhlci5lbmNyeXB0'@;
put 'QmxvY2soRCl9LEouZGVjcnlwdD1mdW5jdGlvbihiLEQpe3JldHVybiBiLl9jaXBoZXIuZGVjcnlwdEJsb2NrKEQpfX0sNDU6KGNlLEosYik9Pnt2YXIgRD17RUNCOmIoMTA4NCksQ0JDOmIoNTI5MiksQ0ZCOmIoNjMxMSksQ0ZCODpiKDE5NjQpLENGQjE6YigxNTEwKSxPRkI6Yig4ODYxKSxD'@;
put 'VFI6Yig2MDA5KSxHQ006Yig2MDA5KX0sXz1iKDQ5NDYpO2Zvcih2YXIgcCBpbiBfKV9bcF0ubW9kdWxlPURbX1twXS5tb2RlXTtjZS5leHBvcnRzPV99LDg4NjE6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLkJ1ZmZlcixfPWIoNzI5NSk7ZnVuY3Rpb24gcChOKXtyZXR1cm4gTi5fcHJldj1O'@;
put 'Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKE4uX3ByZXYpLE4uX3ByZXZ9Si5lbmNyeXB0PWZ1bmN0aW9uKE4sdyl7Zm9yKDtOLl9jYWNoZS5sZW5ndGg8dy5sZW5ndGg7KU4uX2NhY2hlPUQuY29uY2F0KFtOLl9jYWNoZSxwKE4pXSk7dmFyIEY9Ti5fY2FjaGUuc2xpY2UoMCx3Lmxlbmd0aCk7cmV0'@;
put 'dXJuIE4uX2NhY2hlPU4uX2NhY2hlLnNsaWNlKHcubGVuZ3RoKSxfKHcsRil9fSw1OTY5OihjZSxKLGIpPT57dmFyIEQ9Yig0NDk3KSxfPWIoOTUwOSkuQnVmZmVyLHA9YigxMDI3KTtmdW5jdGlvbiB3KEYsSCxSLGope3AuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IEQuQUVTKEgpLHRo'@;
put 'aXMuX3ByZXY9Xy5mcm9tKFIpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PWosdGhpcy5fbW9kZT1GfWIoNTcxNykodyxwKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlz'@;
put 'Ll9tb2RlLmVuY3J5cHQodGhpcyxGLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sY2UuZXhwb3J0cz13fSwzNjE0OihjZSxKLGIpPT57dmFyIEQ9Yig3NjY3KSxfPWIoNDY5NikscD1iKDQ1KSxOPWIoOTcxNSksdz1i'@;
put 'KDMwNDgpO2Z1bmN0aW9uIFIoTCxZLEIpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLHBbTF0pcmV0dXJuIF8uY3JlYXRlQ2lwaGVyaXYoTCxZLEIpO2lmKE5bTF0pcmV0dXJuIG5ldyBEKHtrZXk6WSxpdjpCLG1vZGU6TH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIp'@;
put 'fWZ1bmN0aW9uIGooTCxZLEIpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLHBbTF0pcmV0dXJuIF8uY3JlYXRlRGVjaXBoZXJpdihMLFksQik7aWYoTltMXSlyZXR1cm4gbmV3IEQoe2tleTpZLGl2OkIsbW9kZTpMLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRl'@;
put 'IHR5cGUiKX1KLmNyZWF0ZUNpcGhlcj1KLkNpcGhlcj1mdW5jdGlvbiBGKEwsWSl7dmFyIEIsVztpZihMPUwudG9Mb3dlckNhc2UoKSxwW0xdKUI9cFtMXS5rZXksVz1wW0xdLml2O2Vsc2V7aWYoIU5bTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Qj04Kk5b'@;
put 'TF0ua2V5LFc9TltMXS5pdn12YXIgWj13KFksITEsQixXKTtyZXR1cm4gUihMLFoua2V5LFouaXYpfSxKLmNyZWF0ZUNpcGhlcml2PUouQ2lwaGVyaXY9UixKLmNyZWF0ZURlY2lwaGVyPUouRGVjaXBoZXI9ZnVuY3Rpb24gSChMLFkpe3ZhciBCLFc7aWYoTD1MLnRvTG93ZXJDYXNlKCkscFtM'@;
put 'XSlCPXBbTF0ua2V5LFc9cFtMXS5pdjtlbHNle2lmKCFOW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO0I9OCpOW0xdLmtleSxXPU5bTF0uaXZ9dmFyIFo9dyhZLCExLEIsVyk7cmV0dXJuIGooTCxaLmtleSxaLml2KX0sSi5jcmVhdGVEZWNpcGhlcml2PUou'@;
put 'RGVjaXBoZXJpdj1qLEoubGlzdENpcGhlcnM9Si5nZXRDaXBoZXJzPWZ1bmN0aW9uIFAoKXtyZXR1cm4gT2JqZWN0LmtleXMoTikuY29uY2F0KF8uZ2V0Q2lwaGVycygpKX19LDc2Njc6KGNlLEosYik9Pnt2YXIgRD1iKDEwMjcpLF89Yig1MjUxKSxwPWIoNTcxNyksTj1iKDk1MDkpLkJ1ZmZl'@;
put 'cix3PXsiZGVzLWVkZTMtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkVERSksImRlcy1lZGUzIjpfLkVERSwiZGVzLWVkZS1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZSI6Xy5FREUsImRlcy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uREVTKSwiZGVzLWVjYiI6Xy5E'@;
put 'RVN9O2Z1bmN0aW9uIEYoSCl7RC5jYWxsKHRoaXMpO3ZhciBQLFI9SC5tb2RlLnRvTG93ZXJDYXNlKCksaj13W1JdO1A9SC5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9SC5rZXk7Ti5pc0J1ZmZlcihMKXx8KEw9Ti5mcm9tKEwpKSwoImRlcy1lZGUiPT09Unx8ImRlcy1lZGUt'@;
put 'Y2JjIj09PVIpJiYoTD1OLmNvbmNhdChbTCxMLnNsaWNlKDAsOCldKSk7dmFyIFk9SC5pdjtOLmlzQnVmZmVyKFkpfHwoWT1OLmZyb20oWSkpLHRoaXMuX2Rlcz1qLmNyZWF0ZSh7a2V5OkwsaXY6WSx0eXBlOlB9KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJd'@;
put 'LGNlLmV4cG9ydHM9RixwKEYsRCksRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihIKXtyZXR1cm4gTi5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoSCkpfSxGLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDk3MTU6KGNlLEop'@;
put 'PT57SlsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxKWyJkZXMtY2JjIl09Si5kZXM9e2tleTo4LGl2Ojh9LEpbImRlcy1lZGUzLWNiYyJdPUouZGVzMz17a2V5OjI0LGl2Ojh9LEpbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxKWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sSlsiZGVz'@;
put 'LWVkZSJdPXtrZXk6MTYsaXY6MH19LDM2NjM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNTUwKSxfPWIoMTc5OCkscD1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBOKEgpe3ZhciBqLFI9SC5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3tqPW5ldyBEKF8oUikpfXdoaWxlKGouY21w'@;
put 'KEgubW9kdWx1cyk+PTB8fCFqLnVtb2QoSC5wcmltZTEpfHwhai51bW9kKEgucHJpbWUyKSk7cmV0dXJuIGp9ZnVuY3Rpb24gRihILFIpe3ZhciBqPWZ1bmN0aW9uIHcoSCl7dmFyIFI9TihIKTtyZXR1cm57YmxpbmRlcjpSLnRvUmVkKEQubW9udChILm1vZHVsdXMpKS5yZWRQb3cobmV3IEQo'@;
put 'SC5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6Ui5pbnZtKEgubW9kdWx1cyl9fShSKSxQPVIubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcgRChIKS5tdWwoai5ibGluZGVyKS51bW9kKFIubW9kdWx1cyksWT1MLnRvUmVkKEQubW9udChSLnByaW1lMSkpLEI9TC50b1Jl'@;
put 'ZChELm1vbnQoUi5wcmltZTIpKSxXPVIuY29lZmZpY2llbnQsWj1SLnByaW1lMSxYPVIucHJpbWUyLFE9WS5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQoKSxxPUIucmVkUG93KFIuZXhwb25lbnQyKS5mcm9tUmVkKCksdGU9US5pc3ViKHEpLmltdWwoVykudW1vZChaKS5pbXVsKFgpO3Jl'@;
put 'dHVybiBxLmlhZGQodGUpLmltdWwoai51bmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKS50b0FycmF5TGlrZShwLCJiZSIsUCl9Ri5nZXRyPU4sY2UuZXhwb3J0cz1GfSw2MDQyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Yig1MjA3KX0sNDc0MzooY2UsSixiKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPWIoMzQ4MikscD1iKDM4NzIpLE49Yig1NzE3KSx3PWIoMjk1NyksRj1iKDc3NTMpLEg9Yig1MjA3KTtmdW5jdGlvbiBSKFkpe3AuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgQj1IW1ldO2lmKCFCKXRocm93IG5ldyBFcnJvcigiVW5rbm93'@;
put 'biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPUIuaGFzaCx0aGlzLl9oYXNoPV8oQi5oYXNoKSx0aGlzLl90YWc9Qi5pZCx0aGlzLl9zaWduVHlwZT1CLnNpZ259ZnVuY3Rpb24gaihZKXtwLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIEI9SFtZXTtpZighQil0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPV8oQi5oYXNoKSx0aGlzLl90YWc9Qi5pZCx0aGlzLl9zaWduVHlwZT1CLnNpZ259ZnVuY3Rpb24gUChZKXtyZXR1cm4gbmV3IFIoWSl9ZnVuY3Rpb24gTChZKXtyZXR1cm4gbmV3IGooWSl9T2JqZWN0LmtleXMoSCkuZm9y'@;
put 'RWFjaChmdW5jdGlvbihZKXtIW1ldLmlkPUQuZnJvbShIW1ldLmlkLCJoZXgiKSxIW1kudG9Mb3dlckNhc2UoKV09SFtZXX0pLE4oUixwLldyaXRhYmxlKSxSLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oQixXLFope3RoaXMuX2hhc2gudXBkYXRlKEIpLFooKX0sUi5wcm90b3R5cGUudXBk'@;
put 'YXRlPWZ1bmN0aW9uKEIsVyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2YgQj9ELmZyb20oQixXKTpCKSx0aGlzfSxSLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEIsVyl7dGhpcy5lbmQoKTt2YXIgWj10aGlzLl9oYXNoLmRpZ2VzdCgpLFg9dyhaLEIsdGhpcy5f'@;
put 'aGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gVz9YLnRvU3RyaW5nKFcpOlh9LE4oaixwLldyaXRhYmxlKSxqLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oQixXLFope3RoaXMuX2hhc2gudXBkYXRlKEIpLFooKX0sai5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9u'@;
put 'KEIsVyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2YgQj9ELmZyb20oQixXKTpCKSx0aGlzfSxqLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oQixXLFope3ZhciBYPSJzdHJpbmciPT10eXBlb2YgVz9ELmZyb20oVyxaKTpXO3RoaXMuZW5kKCk7dmFyIFE9dGhp'@;
put 'cy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gRihYLFEsQix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxjZS5leHBvcnRzPXtTaWduOlAsVmVyaWZ5OkwsY3JlYXRlU2lnbjpQLGNyZWF0ZVZlcmlmeTpMfX0sMjk1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZl'@;
put 'cixfPWIoODM1NSkscD1iKDM2NjMpLE49Yig2OTQ4KS5lYyx3PWIoMzU1MCksRj1iKDk4MCksSD1iKDEzMDgpO2Z1bmN0aW9uIEIocSx0ZSxpZSxzZSl7aWYoKHE9RC5mcm9tKHEudG9BcnJheSgpKSkubGVuZ3RoPHRlLmJ5dGVMZW5ndGgoKSl7dmFyIGdlPUQuYWxsb2ModGUuYnl0ZUxlbmd0'@;
put 'aCgpLXEubGVuZ3RoKTtxPUQuY29uY2F0KFtnZSxxXSl9dmFyIF9lPWllLmxlbmd0aCxUZT1mdW5jdGlvbiBaKHEsdGUpe3E9KHE9VyhxLHRlKSkubW9kKHRlKTt2YXIgaWU9RC5mcm9tKHEudG9BcnJheSgpKTtpZihpZS5sZW5ndGg8dGUuYnl0ZUxlbmd0aCgpKXt2YXIgc2U9RC5hbGxvYyh0'@;
put 'ZS5ieXRlTGVuZ3RoKCktaWUubGVuZ3RoKTtpZT1ELmNvbmNhdChbc2UsaWVdKX1yZXR1cm4gaWV9KGllLHRlKSxTZT1ELmFsbG9jKF9lKTtTZS5maWxsKDEpO3ZhciB6ZT1ELmFsbG9jKF9lKTtyZXR1cm4gemU9XyhzZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoRC5mcm9tKFswXSkpLnVwZGF0'@;
put 'ZShxKS51cGRhdGUoVGUpLmRpZ2VzdCgpLFNlPV8oc2UsemUpLnVwZGF0ZShTZSkuZGlnZXN0KCkse2s6emU9XyhzZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoRC5mcm9tKFsxXSkpLnVwZGF0ZShxKS51cGRhdGUoVGUpLmRpZ2VzdCgpLHY6U2U9XyhzZSx6ZSkudXBkYXRlKFNlKS5kaWdlc3Qo'@;
put 'KX19ZnVuY3Rpb24gVyhxLHRlKXt2YXIgaWU9bmV3IHcocSksc2U9KHEubGVuZ3RoPDwzKS10ZS5iaXRMZW5ndGgoKTtyZXR1cm4gc2U+MCYmaWUuaXNocm4oc2UpLGllfWZ1bmN0aW9uIFgocSx0ZSxpZSl7dmFyIHNlLGdlO2Rve2ZvcihzZT1ELmFsbG9jKDApOzgqc2UubGVuZ3RoPHEuYml0'@;
put 'TGVuZ3RoKCk7KXRlLnY9XyhpZSx0ZS5rKS51cGRhdGUodGUudikuZGlnZXN0KCksc2U9RC5jb25jYXQoW3NlLHRlLnZdKTtnZT1XKHNlLHEpLHRlLms9XyhpZSx0ZS5rKS51cGRhdGUodGUudikudXBkYXRlKEQuZnJvbShbMF0pKS5kaWdlc3QoKSx0ZS52PV8oaWUsdGUuaykudXBkYXRlKHRl'@;
put 'LnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09Z2UuY21wKHEpKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gUShxLHRlLGllLHNlKXtyZXR1cm4gcS50b1JlZCh3Lm1vbnQoaWUpKS5yZWRQb3codGUpLmZyb21SZWQoKS5tb2Qoc2UpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gaihxLHRlLGllLHNlLGdlKXt2YXIg'@;
put 'X2U9Rih0ZSk7aWYoX2UuY3VydmUpe2lmKCJlY2RzYSIhPT1zZSYmImVjZHNhL3JzYSIhPT1zZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUChxLHRlKXt2YXIgaWU9SFt0ZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFpZSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoInVua25vd24gY3VydmUgIit0ZS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBfZT1uZXcgTihpZSkua2V5RnJvbVByaXZhdGUodGUucHJpdmF0ZUtleSkuc2lnbihxKTtyZXR1cm4gRC5mcm9tKF9lLnRvREVSKCkpfShxLF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09'@;
put 'c2UpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEwocSx0ZSxpZSl7Zm9yKHZhciB6ZSxzZT10ZS5wYXJhbXMucHJpdl9rZXksZ2U9dGUucGFyYW1zLnAsX2U9dGUucGFyYW1zLnEsVGU9dGUucGFyYW1zLmcsU2U9bmV3IHcoMCksej1X'@;
put 'KHEsX2UpLm1vZChfZSksZz0hMSx5PUIoc2UsX2UscSxpZSk7ITE9PT1nOylTZT1RKFRlLHplPVgoX2UseSxpZSksZ2UsX2UpLDA9PT0oZz16ZS5pbnZtKF9lKS5pbXVsKHouYWRkKHNlLm11bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYoZz0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0'@;
put 'aW9uIFkocSx0ZSl7cT1xLnRvQXJyYXkoKSx0ZT10ZS50b0FycmF5KCksMTI4JnFbMF0mJihxPVswXS5jb25jYXQocSkpLDEyOCZ0ZVswXSYmKHRlPVswXS5jb25jYXQodGUpKTt2YXIgc2U9WzQ4LHEubGVuZ3RoK3RlLmxlbmd0aCs0LDIscS5sZW5ndGhdO3JldHVybiBzZT1zZS5jb25jYXQo'@;
put 'cSxbMix0ZS5sZW5ndGhdLHRlKSxELmZyb20oc2UpfShTZSxnKX0ocSxfZSxpZSl9aWYoInJzYSIhPT1zZSYmImVjZHNhL3JzYSIhPT1zZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT10ZS5wYWRkaW5nJiYxIT09dGUucGFkZGluZyl0aHJv'@;
put 'dyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7cT1ELmNvbmNhdChbZ2UscV0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9WzAsMV07cS5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zv'@;
put 'cih2YXIgemU9LTE7Kyt6ZTxxLmxlbmd0aDspU2UucHVzaChxW3plXSk7cmV0dXJuIHAoU2UsX2UpfSxjZS5leHBvcnRzLmdldEtleT1CLGNlLmV4cG9ydHMubWFrZUtleT1YfSw3NzUzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTUwOSkuQnVmZmVyLF89YigzNTUwKSxwPWIo'@;
put 'Njk0OCkuZWMsTj1iKDk4MCksdz1iKDEzMDgpO2Z1bmN0aW9uIGooUCxMKXtpZihQLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKFAuY21wKEwpPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEYoUCxMLFks'@;
put 'QixXKXt2YXIgWj1OKFkpO2lmKCJlYyI9PT1aLnR5cGUpe2lmKCJlY2RzYSIhPT1CJiYiZWNkc2EvcnNhIiE9PUIpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gSChQLEwsWSl7dmFyIEI9d1tZLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpv'@;
put 'aW4oIi4iKV07aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrWS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgcChCKS52ZXJpZnkoTCxQLFkuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oUCxMLFopfWlmKCJkc2EiPT09Wi50eXBl'@;
put 'KXtpZigiZHNhIiE9PUIpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUihQLEwsWSl7dmFyIEI9WS5kYXRhLnAsVz1ZLmRhdGEucSxaPVkuZGF0YS5nLFg9WS5kYXRhLnB1Yl9rZXksUT1OLnNpZ25hdHVyZS5kZWNvZGUoUCwiZGVyIiks'@;
put 'cT1RLnMsdGU9US5yO2oocSxXKSxqKHRlLFcpO3ZhciBpZT1fLm1vbnQoQiksc2U9cS5pbnZtKFcpO3JldHVybiAwPT09Wi50b1JlZChpZSkucmVkUG93KG5ldyBfKEwpLm11bChzZSkubW9kKFcpKS5mcm9tUmVkKCkubXVsKFgudG9SZWQoaWUpLnJlZFBvdyh0ZS5tdWwoc2UpLm1vZChXKSku'@;
put 'ZnJvbVJlZCgpKS5tb2QoQikubW9kKFcpLmNtcCh0ZSl9KFAsTCxaKX1pZigicnNhIiE9PUImJiJlY2RzYS9yc2EiIT09Qil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO0w9RC5jb25jYXQoW1csTF0pO2Zvcih2YXIgWD1aLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFE9'@;
put 'WzFdLHE9MDtMLmxlbmd0aCtRLmxlbmd0aCsyPFg7KVEucHVzaCgyNTUpLHErPTE7US5wdXNoKDApO2Zvcih2YXIgdGU9LTE7Kyt0ZTxMLmxlbmd0aDspUS5wdXNoKExbdGVdKTtRPUQuZnJvbShRKTt2YXIgaWU9Xy5tb250KFoubW9kdWx1cyk7UD0oUD1uZXcgXyhQKS50b1JlZChpZSkpLnJl'@;
put 'ZFBvdyhuZXcgXyhaLnB1YmxpY0V4cG9uZW50KSksUD1ELmZyb20oUC5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgc2U9cTw4PzE6MDtmb3IoWD1NYXRoLm1pbihQLmxlbmd0aCxRLmxlbmd0aCksUC5sZW5ndGghPT1RLmxlbmd0aCYmKHNlPTEpLHRlPS0xOysrdGU8WDspc2V8PVBbdGVdXlFb'@;
put 'dGVdO3JldHVybiAwPT09c2V9fSw0MzkwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODIxMiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oWSl7dmFyIEI9W107Zm9yKHZhciBXIGluIFkpQi5wdXNoKFcpO3JldHVybiBCfTtjZS5leHBvcnRzPWo7dmFyIHA9T2JqZWN0LmNyZWF0'@;
put 'ZShiKDY0OTcpKTtwLmluaGVyaXRzPWIoNTcxNyk7dmFyIE49Yig0OTYwKSx3PWIoMjAxMCk7cC5pbmhlcml0cyhqLE4pO2Zvcih2YXIgRj1fKHcucHJvdG90eXBlKSxIPTA7SDxGLmxlbmd0aDtIKyspe3ZhciBSPUZbSF07ai5wcm90b3R5cGVbUl18fChqLnByb3RvdHlwZVtSXT13LnByb3Rv'@;
put 'dHlwZVtSXSl9ZnVuY3Rpb24gaihZKXtpZighKHRoaXMgaW5zdGFuY2VvZiBqKSlyZXR1cm4gbmV3IGooWSk7Ti5jYWxsKHRoaXMsWSksdy5jYWxsKHRoaXMsWSksWSYmITE9PT1ZLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksWSYmITE9PT1ZLndyaXRhYmxlJiYodGhpcy53cml0YWJs'@;
put 'ZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLFkmJiExPT09WS5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsUCl9ZnVuY3Rpb24gUCgpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8RC5uZXh0VGlj'@;
put 'ayhMLHRoaXMpfWZ1bmN0aW9uIEwoWSl7WS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5f'@;
put 'd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihZKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9WSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1Z'@;
put 'KX19KSxqLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihZLEIpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEQubmV4dFRpY2soQixZKX19LDEyOTQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1wO3ZhciBEPWIoMzkxMiksXz1PYmplY3QuY3JlYXRlKGIoNjQ5Nykp'@;
put 'O2Z1bmN0aW9uIHAoTil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKE4pO0QuY2FsbCh0aGlzLE4pfV8uaW5oZXJpdHM9Yig1NzE3KSxfLmluaGVyaXRzKHAsRCkscC5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihOLHcsRil7RihudWxsLE4pfX0sNDk2MDooY2Us'@;
put 'SixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89Yig4MjEyKTtjZS5leHBvcnRzPXNlO3ZhciBOLHA9Yig1ODI2KTtzZS5SZWFkYWJsZVN0YXRlPWllLGIoNzE4Nyk7dmFyIEY9ZnVuY3Rpb24odmUscWUpe3JldHVybiB2ZS5saXN0ZW5lcnMocWUpLmxlbmd0aH0sSD1iKDk4MTkp'@;
put 'LFI9YigxNTcyKS5CdWZmZXIsaj0odHlwZW9mIGIuZzwidSI/Yi5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFk9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtZLmluaGVyaXRzPWIoNTcxNyk7dmFyIEI9'@;
put 'Yig2MzUzKSxXPXZvaWQgMDtXPUImJkIuZGVidWdsb2c/Qi5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBRLFo9YigyMjY3KSxYPWIoNTk5Nyk7WS5pbmhlcml0cyhzZSxIKTt2YXIgcT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5j'@;
put 'dGlvbiBpZSh2ZSxxZSl7dmFyIGplPXFlIGluc3RhbmNlb2YoTj1OfHxiKDQzOTApKTt0aGlzLm9iamVjdE1vZGU9ISEodmU9dmV8fHt9KS5vYmplY3RNb2RlLGplJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF2ZS5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBBZT12ZS5o'@;
put 'aWdoV2F0ZXJNYXJrLEZlPXZlLnJlYWRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9QWV8fDA9PT1BZT9BZTpqZSYmKEZlfHwwPT09RmUpP0ZlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1h'@;
put 'cmspLHRoaXMuYnVmZmVyPW5ldyBaLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFi'@;
put 'bGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz12ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0'@;
put 'aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCx2ZS5lbmNvZGluZyYmKFF8fChRPWIoMjIyMSkucyksdGhpcy5kZWNvZGVyPW5ldyBRKHZlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXZlLmVuY29kaW5nKX1mdW5jdGlvbiBzZSh2ZSl7aWYo'@;
put 'Tj1OfHxiKDQzOTApLCEodGhpcyBpbnN0YW5jZW9mIHNlKSlyZXR1cm4gbmV3IHNlKHZlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBpZSh2ZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLHZlJiYoImZ1bmN0aW9uIj09dHlwZW9mIHZlLnJlYWQmJih0aGlzLl9yZWFkPXZlLnJlYWQpLCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiB2ZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT12ZS5kZXN0cm95KSksSC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGdlKHZlLHFlLGplLEFlLEZlKXt2YXIgSWUsUmU9dmUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIG51bGw9PT1xZT8oUmUucmVhZGluZz0hMSxmdW5jdGlvbiB5'@;
put 'KHZlLHFlKXtpZighcWUuZW5kZWQpe2lmKHFlLmRlY29kZXIpe3ZhciBqZT1xZS5kZWNvZGVyLmVuZCgpO2plJiZqZS5sZW5ndGgmJihxZS5idWZmZXIucHVzaChqZSkscWUubGVuZ3RoKz1xZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoKX1xZS5lbmRlZD0hMCx4KHZlKX19KHZlLFJlKSk6KEZl'@;
put 'fHwoSWU9ZnVuY3Rpb24gVGUodmUscWUpe3ZhciBqZTtyZXR1cm4hZnVuY3Rpb24gTCh2ZSl7cmV0dXJuIFIuaXNCdWZmZXIodmUpfHx2ZSBpbnN0YW5jZW9mIGp9KHFlKSYmInN0cmluZyIhPXR5cGVvZiBxZSYmdm9pZCAwIT09cWUmJiF2ZS5vYmplY3RNb2RlJiYoamU9bmV3IFR5cGVFcnJv'@;
put 'cigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxqZX0oUmUscWUpKSxJZT92ZS5lbWl0KCJlcnJvciIsSWUpOlJlLm9iamVjdE1vZGV8fHFlJiZxZS5sZW5ndGg+MD8oInN0cmluZyIhPXR5cGVvZiBxZSYmIVJlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihx'@;
put 'ZSkhPT1SLnByb3RvdHlwZSYmKHFlPWZ1bmN0aW9uIFAodmUpe3JldHVybiBSLmZyb20odmUpfShxZSkpLEFlP1JlLmVuZEVtaXR0ZWQ/dmUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSk6X2UodmUsUmUscWUsITApOlJlLmVuZGVk'@;
put 'P3ZlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihSZS5yZWFkaW5nPSExLFJlLmRlY29kZXImJiFqZT8ocWU9UmUuZGVjb2Rlci53cml0ZShxZSksUmUub2JqZWN0TW9kZXx8MCE9PXFlLmxlbmd0aD9fZSh2ZSxSZSxxZSwhMSk6VCh2ZSxSZSkp'@;
put 'Ol9lKHZlLFJlLHFlLCExKSkpOkFlfHwoUmUucmVhZGluZz0hMSkpLGZ1bmN0aW9uIFNlKHZlKXtyZXR1cm4hdmUuZW5kZWQmJih2ZS5uZWVkUmVhZGFibGV8fHZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrfHwwPT09dmUubGVuZ3RoKX0oUmUpfWZ1bmN0aW9uIF9lKHZlLHFlLGplLEFlKXtx'@;
put 'ZS5mbG93aW5nJiYwPT09cWUubGVuZ3RoJiYhcWUuc3luYz8odmUuZW1pdCgiZGF0YSIsamUpLHZlLnJlYWQoMCkpOihxZS5sZW5ndGgrPXFlLm9iamVjdE1vZGU/MTpqZS5sZW5ndGgsQWU/cWUuYnVmZmVyLnVuc2hpZnQoamUpOnFlLmJ1ZmZlci5wdXNoKGplKSxxZS5uZWVkUmVhZGFibGUm'@;
put 'JngodmUpKSxUKHZlLHFlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoc2UucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih2ZSl7'@;
put 'dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXZlKX19KSxzZS5wcm90b3R5cGUuZGVzdHJveT1YLmRlc3Ryb3ksc2UucHJvdG90eXBlLl91bmRlc3Ryb3k9WC51bmRlc3Ryb3ksc2UucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHZlLHFlKXt0'@;
put 'aGlzLnB1c2gobnVsbCkscWUodmUpfSxzZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih2ZSxxZSl7dmFyIEFlLGplPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGplLm9iamVjdE1vZGU/QWU9ITA6InN0cmluZyI9PXR5cGVvZiB2ZSYmKChxZT1xZXx8amUuZGVmYXVsdEVuY29kaW5nKSE9'@;
put 'PWplLmVuY29kaW5nJiYodmU9Ui5mcm9tKHZlLHFlKSxxZT0iIiksQWU9ITApLGdlKHRoaXMsdmUscWUsITEsQWUpfSxzZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih2ZSl7cmV0dXJuIGdlKHRoaXMsdmUsbnVsbCwhMCwhMSl9LHNlLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigp'@;
put 'e3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe3JldHVybiBRfHwoUT1iKDIyMjEpLnMpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgUSh2ZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNv'@;
put 'ZGluZz12ZSx0aGlzfTtmdW5jdGlvbiBnKHZlLHFlKXtyZXR1cm4gdmU8PTB8fDA9PT1xZS5sZW5ndGgmJnFlLmVuZGVkPzA6cWUub2JqZWN0TW9kZT8xOnZlIT12ZT9xZS5mbG93aW5nJiZxZS5sZW5ndGg/cWUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6cWUubGVuZ3RoOih2ZT5xZS5oaWdo'@;
put 'V2F0ZXJNYXJrJiYocWUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiB6KHZlKXtyZXR1cm4gdmU+PTgzODg2MDg/dmU9ODM4ODYwODoodmUtLSx2ZXw9dmU+Pj4xLHZlfD12ZT4+PjIsdmV8PXZlPj4+NCx2ZXw9dmU+Pj44LHZlfD12ZT4+PjE2LHZlKyspLHZlfSh2ZSkpLHZlPD1xZS5sZW5ndGg/'@;
put 'dmU6cWUuZW5kZWQ/cWUubGVuZ3RoOihxZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIHgodmUpe3ZhciBxZT12ZS5fcmVhZGFibGVTdGF0ZTtxZS5uZWVkUmVhZGFibGU9ITEscWUuZW1pdHRlZFJlYWRhYmxlfHwoVygiZW1pdFJlYWRhYmxlIixxZS5mbG93aW5nKSxxZS5lbWl0dGVk'@;
put 'UmVhZGFibGU9ITAscWUuc3luYz9fLm5leHRUaWNrKEMsdmUpOkModmUpKX1mdW5jdGlvbiBDKHZlKXtXKCJlbWl0IHJlYWRhYmxlIiksdmUuZW1pdCgicmVhZGFibGUiKSxhZSh2ZSl9ZnVuY3Rpb24gVCh2ZSxxZSl7cWUucmVhZGluZ01vcmV8fChxZS5yZWFkaW5nTW9yZT0hMCxfLm5leHRU'@;
put 'aWNrKFYsdmUscWUpKX1mdW5jdGlvbiBWKHZlLHFlKXtmb3IodmFyIGplPXFlLmxlbmd0aDshcWUucmVhZGluZyYmIXFlLmZsb3dpbmcmJiFxZS5lbmRlZCYmcWUubGVuZ3RoPHFlLmhpZ2hXYXRlck1hcmsmJihXKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLHZlLnJlYWQoMCksamUhPT1xZS5s'@;
put 'ZW5ndGgpOylqZT1xZS5sZW5ndGg7cWUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gRSh2ZSl7VygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksdmUucmVhZCgwKX1mdW5jdGlvbiBBKHZlLHFlKXtxZS5yZWFkaW5nfHwoVygicmVzdW1lIHJlYWQgMCIpLHZlLnJlYWQoMCkpLHFlLnJlc3Vt'@;
put 'ZVNjaGVkdWxlZD0hMSxxZS5hd2FpdERyYWluPTAsdmUuZW1pdCgicmVzdW1lIiksYWUodmUpLHFlLmZsb3dpbmcmJiFxZS5yZWFkaW5nJiZ2ZS5yZWFkKDApfWZ1bmN0aW9uIGFlKHZlKXt2YXIgcWU9dmUuX3JlYWRhYmxlU3RhdGU7Zm9yKFcoImZsb3ciLHFlLmZsb3dpbmcpO3FlLmZsb3dp'@;
put 'bmcmJm51bGwhPT12ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gbmUodmUscWUpe3JldHVybiAwPT09cWUubGVuZ3RoP251bGw6KHFlLm9iamVjdE1vZGU/amU9cWUuYnVmZmVyLnNoaWZ0KCk6IXZlfHx2ZT49cWUubGVuZ3RoPyhqZT1xZS5kZWNvZGVyP3FlLmJ1ZmZlci5qb2luKCIiKToxPT09cWUu'@;
put 'YnVmZmVyLmxlbmd0aD9xZS5idWZmZXIuaGVhZC5kYXRhOnFlLmJ1ZmZlci5jb25jYXQocWUubGVuZ3RoKSxxZS5idWZmZXIuY2xlYXIoKSk6amU9ZnVuY3Rpb24gbGUodmUscWUsamUpe3ZhciBBZTtyZXR1cm4gdmU8cWUuaGVhZC5kYXRhLmxlbmd0aD8oQWU9cWUuaGVhZC5kYXRhLnNsaWNl'@;
put 'KDAsdmUpLHFlLmhlYWQuZGF0YT1xZS5oZWFkLmRhdGEuc2xpY2UodmUpKTpBZT12ZT09PXFlLmhlYWQuZGF0YS5sZW5ndGg/cWUuc2hpZnQoKTpqZT9mdW5jdGlvbiB3ZSh2ZSxxZSl7dmFyIGplPXFlLmhlYWQsQWU9MSxGZT1qZS5kYXRhO2Zvcih2ZS09RmUubGVuZ3RoO2plPWplLm5leHQ7'@;
put 'KXt2YXIgUmU9amUuZGF0YSxJZT12ZT5SZS5sZW5ndGg/UmUubGVuZ3RoOnZlO2lmKEZlKz1JZT09PVJlLmxlbmd0aD9SZTpSZS5zbGljZSgwLHZlKSwwPT0odmUtPUllKSl7SWU9PT1SZS5sZW5ndGg/KCsrQWUscWUuaGVhZD1qZS5uZXh0P2plLm5leHQ6cWUudGFpbD1udWxsKToocWUuaGVh'@;
put 'ZD1qZSxqZS5kYXRhPVJlLnNsaWNlKEllKSk7YnJlYWt9KytBZX1yZXR1cm4gcWUubGVuZ3RoLT1BZSxGZX0odmUscWUpOmZ1bmN0aW9uIFplKHZlLHFlKXt2YXIgamU9Ui5hbGxvY1Vuc2FmZSh2ZSksQWU9cWUuaGVhZCxGZT0xO2ZvcihBZS5kYXRhLmNvcHkoamUpLHZlLT1BZS5kYXRhLmxl'@;
put 'bmd0aDtBZT1BZS5uZXh0Oyl7dmFyIFJlPUFlLmRhdGEsSWU9dmU+UmUubGVuZ3RoP1JlLmxlbmd0aDp2ZTtpZihSZS5jb3B5KGplLGplLmxlbmd0aC12ZSwwLEllKSwwPT0odmUtPUllKSl7SWU9PT1SZS5sZW5ndGg/KCsrRmUscWUuaGVhZD1BZS5uZXh0P0FlLm5leHQ6cWUudGFpbD1udWxs'@;
put 'KToocWUuaGVhZD1BZSxBZS5kYXRhPVJlLnNsaWNlKEllKSk7YnJlYWt9KytGZX1yZXR1cm4gcWUubGVuZ3RoLT1GZSxqZX0odmUscWUpLEFlfSh2ZSxxZS5idWZmZXIscWUuZGVjb2RlciksamUpO3ZhciBqZX1mdW5jdGlvbiBRZSh2ZSl7dmFyIHFlPXZlLl9yZWFkYWJsZVN0YXRlO2lmKHFl'@;
put 'Lmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7cWUuZW5kRW1pdHRlZHx8KHFlLmVuZGVkPSEwLF8ubmV4dFRpY2soYXQscWUsdmUpKX1mdW5jdGlvbiBhdCh2ZSxxZSl7IXZlLmVuZEVtaXR0ZWQmJjA9PT12ZS5s'@;
put 'ZW5ndGgmJih2ZS5lbmRFbWl0dGVkPSEwLHFlLnJlYWRhYmxlPSExLHFlLmVtaXQoImVuZCIpKX1mdW5jdGlvbiB4ZSh2ZSxxZSl7Zm9yKHZhciBqZT0wLEFlPXZlLmxlbmd0aDtqZTxBZTtqZSsrKWlmKHZlW2plXT09PXFlKXJldHVybiBqZTtyZXR1cm4tMX1zZS5wcm90b3R5cGUucmVhZD1m'@;
put 'dW5jdGlvbih2ZSl7VygicmVhZCIsdmUpLHZlPXBhcnNlSW50KHZlLDEwKTt2YXIgcWU9dGhpcy5fcmVhZGFibGVTdGF0ZSxqZT12ZTtpZigwIT09dmUmJihxZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT12ZSYmcWUubmVlZFJlYWRhYmxlJiYocWUubGVuZ3RoPj1xZS5oaWdoV2F0ZXJNYXJr'@;
put 'fHxxZS5lbmRlZCkpcmV0dXJuIFcoInJlYWQ6IGVtaXRSZWFkYWJsZSIscWUubGVuZ3RoLHFlLmVuZGVkKSwwPT09cWUubGVuZ3RoJiZxZS5lbmRlZD9RZSh0aGlzKTp4KHRoaXMpLG51bGw7aWYoMD09PSh2ZT1nKHZlLHFlKSkmJnFlLmVuZGVkKXJldHVybiAwPT09cWUubGVuZ3RoJiZRZSh0'@;
put 'aGlzKSxudWxsO3ZhciBGZSxBZT1xZS5uZWVkUmVhZGFibGU7cmV0dXJuIFcoIm5lZWQgcmVhZGFibGUiLEFlKSwoMD09PXFlLmxlbmd0aHx8cWUubGVuZ3RoLXZlPHFlLmhpZ2hXYXRlck1hcmspJiZXKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsQWU9ITApLHFlLmVuZGVkfHxxZS5y'@;
put 'ZWFkaW5nP1coInJlYWRpbmcgb3IgZW5kZWQiLEFlPSExKTpBZSYmKFcoImRvIHJlYWQiKSxxZS5yZWFkaW5nPSEwLHFlLnN5bmM9ITAsMD09PXFlLmxlbmd0aCYmKHFlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChxZS5oaWdoV2F0ZXJNYXJrKSxxZS5zeW5jPSExLHFlLnJlYWRpbmd8'@;
put 'fCh2ZT1nKGplLHFlKSkpLG51bGw9PT0oRmU9dmU+MD9uZSh2ZSxxZSk6bnVsbCk/KHFlLm5lZWRSZWFkYWJsZT0hMCx2ZT0wKTpxZS5sZW5ndGgtPXZlLDA9PT1xZS5sZW5ndGgmJihxZS5lbmRlZHx8KHFlLm5lZWRSZWFkYWJsZT0hMCksamUhPT12ZSYmcWUuZW5kZWQmJlFlKHRoaXMpKSxu'@;
put 'dWxsIT09RmUmJnRoaXMuZW1pdCgiZGF0YSIsRmUpLEZlfSxzZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odmUpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LHNlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHZlLHFlKXt2YXIg'@;
put 'amU9dGhpcyxBZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChBZS5waXBlc0NvdW50KXtjYXNlIDA6QWUucGlwZXM9dmU7YnJlYWs7Y2FzZSAxOkFlLnBpcGVzPVtBZS5waXBlcyx2ZV07YnJlYWs7ZGVmYXVsdDpBZS5waXBlcy5wdXNoKHZlKX1BZS5waXBlc0NvdW50Kz0xLFcoInBpcGUg'@;
put 'Y291bnQ9JWQgb3B0cz0laiIsQWUucGlwZXNDb3VudCxxZSk7dmFyIFJlPXFlJiYhMT09PXFlLmVuZHx8dmU9PT1ELnN0ZG91dHx8dmU9PT1ELnN0ZGVycj9JdDpIZTtmdW5jdGlvbiBIZSgpe1coIm9uZW5kIiksdmUuZW5kKCl9QWUuZW5kRW1pdHRlZD9fLm5leHRUaWNrKFJlKTpqZS5vbmNl'@;
put 'KCJlbmQiLFJlKSx2ZS5vbigidW5waXBlIixmdW5jdGlvbiBJZShydCxLZSl7Vygib251bnBpcGUiKSxydD09PWplJiZLZSYmITE9PT1LZS5oYXNVbnBpcGVkJiYoS2UuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBfdCgpe1coImNsZWFudXAiKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHl0'@;
put 'KSx2ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixNdCksdmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixEZSksdmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixvbiksdmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsSWUpLGplLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEhlKSxqZS5yZW1vdmVMaXN0'@;
put 'ZW5lcigiZW5kIixJdCksamUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEplKSxrZT0hMCxBZS5hd2FpdERyYWluJiYoIXZlLl93cml0YWJsZVN0YXRlfHx2ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZEZSgpfSgpKX0pO3ZhciBEZT1mdW5jdGlvbiBVKHZlKXtyZXR1cm4gZnVuY3Rpb24o'@;
put 'KXt2YXIgcWU9dmUuX3JlYWRhYmxlU3RhdGU7VygicGlwZU9uRHJhaW4iLHFlLmF3YWl0RHJhaW4pLHFlLmF3YWl0RHJhaW4mJnFlLmF3YWl0RHJhaW4tLSwwPT09cWUuYXdhaXREcmFpbiYmRih2ZSwiZGF0YSIpJiYocWUuZmxvd2luZz0hMCxhZSh2ZSkpfX0oamUpO3ZlLm9uKCJkcmFpbiIs'@;
put 'RGUpO3ZhciBrZT0hMSxudD0hMTtmdW5jdGlvbiBKZShydCl7Vygib25kYXRhIiksbnQ9ITEsITE9PT12ZS53cml0ZShydCkmJiFudCYmKCgxPT09QWUucGlwZXNDb3VudCYmQWUucGlwZXM9PT12ZXx8QWUucGlwZXNDb3VudD4xJiYtMSE9PXhlKEFlLnBpcGVzLHZlKSkmJiFrZSYmKFcoImZh'@;
put 'bHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsQWUuYXdhaXREcmFpbiksQWUuYXdhaXREcmFpbisrLG50PSEwKSxqZS5wYXVzZSgpKX1mdW5jdGlvbiBvbihydCl7Vygib25lcnJvciIscnQpLEl0KCksdmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixvbiksMD09PUYodmUsImVycm9yIikmJnZl'@;
put 'LmVtaXQoImVycm9yIixydCl9ZnVuY3Rpb24geXQoKXt2ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixNdCksSXQoKX1mdW5jdGlvbiBNdCgpe1coIm9uZmluaXNoIiksdmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix5dCksSXQoKX1mdW5jdGlvbiBJdCgpe1coInVucGlwZSIpLGplLnVucGlw'@;
put 'ZSh2ZSl9cmV0dXJuIGplLm9uKCJkYXRhIixKZSksZnVuY3Rpb24gdGUodmUscWUsamUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIHZlLnByZXBlbmRMaXN0ZW5lcihxZSxqZSk7dmUuX2V2ZW50cyYmdmUuX2V2ZW50c1txZV0/cCh2ZS5fZXZlbnRz'@;
put 'W3FlXSk/dmUuX2V2ZW50c1txZV0udW5zaGlmdChqZSk6dmUuX2V2ZW50c1txZV09W2plLHZlLl9ldmVudHNbcWVdXTp2ZS5vbihxZSxqZSl9KHZlLCJlcnJvciIsb24pLHZlLm9uY2UoImNsb3NlIix5dCksdmUub25jZSgiZmluaXNoIixNdCksdmUuZW1pdCgicGlwZSIsamUpLEFlLmZsb3dp'@;
put 'bmd8fChXKCJwaXBlIHJlc3VtZSIpLGplLnJlc3VtZSgpKSx2ZX0sc2UucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih2ZSl7dmFyIHFlPXRoaXMuX3JlYWRhYmxlU3RhdGUsamU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1xZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1xZS5waXBl'@;
put 'c0NvdW50KXJldHVybiB2ZSYmdmUhPT1xZS5waXBlc3x8KHZlfHwodmU9cWUucGlwZXMpLHFlLnBpcGVzPW51bGwscWUucGlwZXNDb3VudD0wLHFlLmZsb3dpbmc9ITEsdmUmJnZlLmVtaXQoInVucGlwZSIsdGhpcyxqZSkpLHRoaXM7aWYoIXZlKXt2YXIgQWU9cWUucGlwZXMsRmU9cWUucGlw'@;
put 'ZXNDb3VudDtxZS5waXBlcz1udWxsLHFlLnBpcGVzQ291bnQ9MCxxZS5mbG93aW5nPSExO2Zvcih2YXIgUmU9MDtSZTxGZTtSZSsrKUFlW1JlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgSWU9eGUocWUucGlwZXMsdmUpO3JldHVybi0xPT09'@;
put 'SWV8fChxZS5waXBlcy5zcGxpY2UoSWUsMSkscWUucGlwZXNDb3VudC09MSwxPT09cWUucGlwZXNDb3VudCYmKHFlLnBpcGVzPXFlLnBpcGVzWzBdKSx2ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsamUpKSx0aGlzfSxzZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9c2UucHJvdG90eXBlLm9uPWZ1bmN0'@;
put 'aW9uKHZlLHFlKXt2YXIgamU9SC5wcm90b3R5cGUub24uY2FsbCh0aGlzLHZlLHFlKTtpZigiZGF0YSI9PT12ZSkhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKTtlbHNlIGlmKCJyZWFkYWJsZSI9PT12ZSl7dmFyIEFlPXRoaXMuX3JlYWRhYmxlU3RhdGU7'@;
put 'IUFlLmVuZEVtaXR0ZWQmJiFBZS5yZWFkYWJsZUxpc3RlbmluZyYmKEFlLnJlYWRhYmxlTGlzdGVuaW5nPUFlLm5lZWRSZWFkYWJsZT0hMCxBZS5lbWl0dGVkUmVhZGFibGU9ITEsQWUucmVhZGluZz9BZS5sZW5ndGgmJngodGhpcyk6Xy5uZXh0VGljayhFLHRoaXMpKX1yZXR1cm4gamV9LHNl'@;
put 'LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdmUuZmxvd2luZ3x8KFcoInJlc3VtZSIpLHZlLmZsb3dpbmc9ITAsZnVuY3Rpb24gbSh2ZSxxZSl7cWUucmVzdW1lU2NoZWR1bGVkfHwocWUucmVzdW1lU2NoZWR1bGVkPSEwLF8u'@;
put 'bmV4dFRpY2soQSx2ZSxxZSkpfSh0aGlzLHZlKSksdGhpc30sc2UucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFcoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFco'@;
put 'InBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30sc2UucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24odmUpe3ZhciBxZT10aGlzLGplPXRoaXMuX3JlYWRhYmxlU3RhdGUsQWU9ITE7Zm9yKHZhciBGZSBpbiB2ZS5vbigiZW5kIixm'@;
put 'dW5jdGlvbigpe2lmKFcoIndyYXBwZWQgZW5kIiksamUuZGVjb2RlciYmIWplLmVuZGVkKXt2YXIgSWU9amUuZGVjb2Rlci5lbmQoKTtJZSYmSWUubGVuZ3RoJiZxZS5wdXNoKEllKX1xZS5wdXNoKG51bGwpfSksdmUub24oImRhdGEiLGZ1bmN0aW9uKEllKXtXKCJ3cmFwcGVkIGRhdGEiKSxq'@;
put 'ZS5kZWNvZGVyJiYoSWU9amUuZGVjb2Rlci53cml0ZShJZSkpLGplLm9iamVjdE1vZGUmJm51bGw9PUllfHwhKGplLm9iamVjdE1vZGV8fEllJiZJZS5sZW5ndGgpfHxxZS5wdXNoKEllKXx8KEFlPSEwLHZlLnBhdXNlKCkpfSksdmUpdm9pZCAwPT09dGhpc1tGZV0mJiJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiB2ZVtGZV0mJih0aGlzW0ZlXT1mdW5jdGlvbihJZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZlW0llXS5hcHBseSh2ZSxhcmd1bWVudHMpfX0oRmUpKTtmb3IodmFyIFJlPTA7UmU8cS5sZW5ndGg7UmUrKyl2ZS5vbihxW1JlXSx0aGlzLmVtaXQuYmluZCh0aGlzLHFbUmVdKSk7'@;
put 'cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oSWUpe1coIndyYXBwZWQgX3JlYWQiLEllKSxBZSYmKEFlPSExLHZlLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHNlLl9mcm9tTGlzdD1uZX0sMzkxMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU47dmFyIEQ9Yig0MzkwKSxfPU9iamVjdC5jcmVhdGUoYig2NDk3KSk7ZnVuY3Rpb24gcChILFIp'@;
put 'e3ZhciBqPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2oudHJhbnNmb3JtaW5nPSExO3ZhciBQPWoud3JpdGVjYjtpZighUClyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7ai53cml0ZWNodW5rPW51bGwsai53'@;
put 'cml0ZWNiPW51bGwsbnVsbCE9UiYmdGhpcy5wdXNoKFIpLFAoSCk7dmFyIEw9dGhpcy5fcmVhZGFibGVTdGF0ZTtMLnJlYWRpbmc9ITEsKEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gTihIKXtp'@;
put 'ZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE4oSCk7RC5jYWxsKHRoaXMsSCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOnAuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxs'@;
put 'LHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEgmJigiZnVuY3Rpb24iPT10eXBlb2YgSC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09SC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBILmZsdXNoJiYodGhpcy5fZmx1c2g9SC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsdyl9ZnVuY3Rpb24gdygpe3ZhciBIPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKFIsail7RihILFIsail9KTpGKHRoaXMsbnVsbCxu'@;
put 'dWxsKX1mdW5jdGlvbiBGKEgsUixqKXtpZihSKXJldHVybiBILmVtaXQoImVycm9yIixSKTtpZihudWxsIT1qJiZILnB1c2goaiksSC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihI'@;
put 'Ll90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEgucHVzaChudWxsKX1fLmluaGVyaXRzPWIoNTcxNyksXy5pbmhlcml0cyhOLEQpLE4ucHJvdG90eXBlLnB1'@;
put 'c2g9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxELnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxILFIpfSxOLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEgsUixqKXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBp'@;
put 'cyBub3QgaW1wbGVtZW50ZWQiKX0sTi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEgsUixqKXt2YXIgUD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihQLndyaXRlY2I9aixQLndyaXRlY2h1bms9SCxQLndyaXRlZW5jb2Rpbmc9UiwhUC50cmFuc2Zvcm1pbmcpe3ZhciBMPXRoaXMuX3JlYWRh'@;
put 'YmxlU3RhdGU7KFAubmVlZFRyYW5zZm9ybXx8TC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX19LE4ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEgpe3ZhciBSPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1S'@;
put 'LndyaXRlY2h1bmsmJlIud3JpdGVjYiYmIVIudHJhbnNmb3JtaW5nPyhSLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oUi53cml0ZWNodW5rLFIud3JpdGVlbmNvZGluZyxSLmFmdGVyVHJhbnNmb3JtKSk6Ui5uZWVkVHJhbnNmb3JtPSEwfSxOLnByb3RvdHlwZS5fZGVzdHJveT1m'@;
put 'dW5jdGlvbihILFIpe3ZhciBqPXRoaXM7RC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEgsZnVuY3Rpb24oUCl7UihQKSxqLmVtaXQoImNsb3NlIil9KX19LDIwMTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPWIoODIxMik7ZnVuY3Rpb24gTihtKXt2YXIg'@;
put 'QT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBFKG0sQSxhZSl7dmFyIG5lPW0uZW50cnk7Zm9yKG0uZW50cnk9bnVsbDtuZTspe3ZhciBsZT1uZS5jYWxsYmFjaztBLnBlbmRpbmdjYi0tLGxlKGFlKSxuZT1uZS5u'@;
put 'ZXh0fUEuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9bX0oQSxtKX19Y2UuZXhwb3J0cz1xO3ZhciBGLHc9IUQuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZihELnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/c2V0SW1tZWRpYXRlOl8ubmV4dFRpY2s7cS5Xcml0YWJsZVN0YXRlPVg7'@;
put 'dmFyIEg9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtILmluaGVyaXRzPWIoNTcxNyk7dmFyIFEsUj17ZGVwcmVjYXRlOmIoNDkyNyl9LGo9Yig5ODE5KSxQPWIoMTU3MikuQnVmZmVyLEw9KHR5cGVvZiBiLmc8InUiP2IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUi'@;
put 'P3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxXPWIoNTk5Nyk7ZnVuY3Rpb24gWigpe31mdW5jdGlvbiBYKG0sQSl7Rj1GfHxiKDQzOTApO3ZhciBhZT1BIGluc3RhbmNlb2YgRjt0aGlzLm9iamVjdE1vZGU9ISEobT1tfHx7fSkub2JqZWN0TW9kZSxhZSYmKHRoaXMub2JqZWN0'@;
put 'TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhbS53cml0YWJsZU9iamVjdE1vZGUpO3ZhciBuZT1tLmhpZ2hXYXRlck1hcmssbGU9bS53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPW5lfHwwPT09bmU/bmU6YWUmJihsZXx8MD09PWxlKT9sZTp0aGlzLm9iamVjdE1vZGU/'@;
put 'MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlz'@;
put 'LmRlY29kZVN0cmluZ3M9ISghMT09PW0uZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9bS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9'@;
put 'ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKFFlKXshZnVuY3Rpb24gemUobSxBKXt2YXIgYWU9bS5fd3JpdGFibGVTdGF0ZSxuZT1hZS5zeW5jLGxlPWFlLndyaXRlY2I7aWYoZnVuY3Rpb24gU2UobSl7bS53cml0aW5nPSExLG0ud3JpdGVjYj1udWxsLG0ubGVuZ3RoLT1tLndyaXRlbGVuLG0u'@;
put 'd3JpdGVsZW49MH0oYWUpLEEpIWZ1bmN0aW9uIFRlKG0sQSxhZSxuZSxsZSl7LS1BLnBlbmRpbmdjYixhZT8oXy5uZXh0VGljayhsZSxuZSksXy5uZXh0VGljayhWLG0sQSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsbmUpKToobGUobmUpLG0uX3dy'@;
put 'aXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG0uZW1pdCgiZXJyb3IiLG5lKSxWKG0sQSkpfShtLGFlLG5lLEEsbGUpO2Vsc2V7dmFyIHdlPXgoYWUpOyF3ZSYmIWFlLmNvcmtlZCYmIWFlLmJ1ZmZlclByb2Nlc3NpbmcmJmFlLmJ1ZmZlcmVkUmVxdWVzdCYmeShtLGFlKSxuZT93KHosbSxh'@;
put 'ZSx3ZSxsZSk6eihtLGFlLHdlLGxlKX19KEEsUWUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5l'@;
put 'cnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBOKHRoaXMpfWZ1bmN0aW9uIHEobSl7aWYoRj1GfHxiKDQzOTApLCEoUS5jYWxsKHEsdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBGKSlyZXR1cm4gbmV3IHEobSk7dGhp'@;
put 'cy5fd3JpdGFibGVTdGF0ZT1uZXcgWChtLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsbSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRlJiYodGhpcy5fd3JpdGU9bS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIG0ud3JpdGV2JiYodGhpcy5fd3JpdGV2PW0ud3JpdGV2KSwiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgbS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1tLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmZpbmFsJiYodGhpcy5fZmluYWw9bS5maW5hbCkpLGouY2FsbCh0aGlzKX1mdW5jdGlvbiBfZShtLEEsYWUsbmUsbGUsd2UsWmUpe0Eud3JpdGVsZW49bmUsQS53cml0ZWNi'@;
put 'PVplLEEud3JpdGluZz0hMCxBLnN5bmM9ITAsYWU/bS5fd3JpdGV2KGxlLEEub253cml0ZSk6bS5fd3JpdGUobGUsd2UsQS5vbndyaXRlKSxBLnN5bmM9ITF9ZnVuY3Rpb24geihtLEEsYWUsbmUpe2FlfHxmdW5jdGlvbiBnKG0sQSl7MD09PUEubGVuZ3RoJiZBLm5lZWREcmFpbiYmKEEubmVl'@;
put 'ZERyYWluPSExLG0uZW1pdCgiZHJhaW4iKSl9KG0sQSksQS5wZW5kaW5nY2ItLSxuZSgpLFYobSxBKX1mdW5jdGlvbiB5KG0sQSl7QS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBhZT1BLmJ1ZmZlcmVkUmVxdWVzdDtpZihtLl93cml0ZXYmJmFlJiZhZS5uZXh0KXt2YXIgbGU9bmV3IEFycmF5'@;
put 'KEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHdlPUEuY29ya2VkUmVxdWVzdHNGcmVlO3dlLmVudHJ5PWFlO2Zvcih2YXIgWmU9MCxRZT0hMDthZTspbGVbWmVdPWFlLGFlLmlzQnVmfHwoUWU9ITEpLGFlPWFlLm5leHQsWmUrPTE7bGUuYWxsQnVmZmVycz1RZSxfZShtLEEsITAsQS5sZW5ndGgs'@;
put 'bGUsIiIsd2UuZmluaXNoKSxBLnBlbmRpbmdjYisrLEEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHdlLm5leHQ/KEEuY29ya2VkUmVxdWVzdHNGcmVlPXdlLm5leHQsd2UubmV4dD1udWxsKTpBLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgTihBKSxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9'@;
put 'ZWxzZXtmb3IoO2FlOyl7dmFyIGF0PWFlLmNodW5rO2lmKF9lKG0sQSwhMSxBLm9iamVjdE1vZGU/MTphdC5sZW5ndGgsYXQsYWUuZW5jb2RpbmcsYWUuY2FsbGJhY2spLGFlPWFlLm5leHQsQS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEEud3JpdGluZylicmVha31udWxsPT09YWUmJihBLmxh'@;
put 'c3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9QS5idWZmZXJlZFJlcXVlc3Q9YWUsQS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgobSl7cmV0dXJuIG0uZW5kaW5nJiYwPT09bS5sZW5ndGgmJm51bGw9PT1tLmJ1ZmZlcmVkUmVxdWVzdCYmIW0uZmluaXNoZWQmJiFtLndyaXRpbmd9ZnVu'@;
put 'Y3Rpb24gQyhtLEEpe20uX2ZpbmFsKGZ1bmN0aW9uKGFlKXtBLnBlbmRpbmdjYi0tLGFlJiZtLmVtaXQoImVycm9yIixhZSksQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlzaCIpLFYobSxBKX0pfWZ1bmN0aW9uIFYobSxBKXt2YXIgYWU9eChBKTtyZXR1cm4gYWUmJihmdW5jdGlv'@;
put 'biBUKG0sQSl7IUEucHJlZmluaXNoZWQmJiFBLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0uX2ZpbmFsPyhBLnBlbmRpbmdjYisrLEEuZmluYWxDYWxsZWQ9ITAsXy5uZXh0VGljayhDLG0sQSkpOihBLnByZWZpbmlzaGVkPSEwLG0uZW1pdCgicHJlZmluaXNoIikpKX0obSxB'@;
put 'KSwwPT09QS5wZW5kaW5nY2ImJihBLmZpbmlzaGVkPSEwLG0uZW1pdCgiZmluaXNoIikpKSxhZX1ILmluaGVyaXRzKHEsaiksWC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBBPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGFlPVtdO0E7KWFlLnB1c2goQSksQT1BLm5leHQ7'@;
put 'cmV0dXJuIGFlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpSLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBf'@;
put 'd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhR'@;
put 'PUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24obSl7cmV0dXJuISFRLmNhbGwodGhpcyxtKXx8dGhpcz09PXEmJm0mJm0uX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2Vv'@;
put 'ZiBYfX0pKTpRPWZ1bmN0aW9uKG0pe3JldHVybiBtIGluc3RhbmNlb2YgdGhpc30scS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0scS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSxB'@;
put 'LGFlKXt2YXIgbmU9dGhpcy5fd3JpdGFibGVTdGF0ZSxsZT0hMSx3ZT0hbmUub2JqZWN0TW9kZSYmZnVuY3Rpb24gQihtKXtyZXR1cm4gUC5pc0J1ZmZlcihtKXx8bSBpbnN0YW5jZW9mIEx9KG0pO3JldHVybiB3ZSYmIVAuaXNCdWZmZXIobSkmJihtPWZ1bmN0aW9uIFkobSl7cmV0dXJuIFAu'@;
put 'ZnJvbShtKX0obSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLHdlP0E9ImJ1ZmZlciI6QXx8KEE9bmUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgYWUmJihhZT1aKSxuZS5lbmRlZD9mdW5jdGlvbiB0ZShtLEEpe3ZhciBhZT1uZXcgRXJyb3IoIndy'@;
put 'aXRlIGFmdGVyIGVuZCIpO20uZW1pdCgiZXJyb3IiLGFlKSxfLm5leHRUaWNrKEEsYWUpfSh0aGlzLGFlKTood2V8fGZ1bmN0aW9uIGllKG0sQSxhZSxuZSl7dmFyIGxlPSEwLHdlPSExO3JldHVybiBudWxsPT09YWU/d2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVl'@;
put 'cyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIGFlJiZ2b2lkIDAhPT1hZSYmIUEub2JqZWN0TW9kZSYmKHdlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksd2UmJihtLmVtaXQoImVycm9yIix3ZSksXy5uZXh0VGljayhuZSx3ZSksbGU9ITEp'@;
put 'LGxlfSh0aGlzLG5lLG0sYWUpKSYmKG5lLnBlbmRpbmdjYisrLGxlPWZ1bmN0aW9uIGdlKG0sQSxhZSxuZSxsZSx3ZSl7aWYoIWFlKXt2YXIgWmU9ZnVuY3Rpb24gc2UobSxBLGFlKXtyZXR1cm4hbS5vYmplY3RNb2RlJiYhMSE9PW0uZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBB'@;
put 'JiYoQT1QLmZyb20oQSxhZSkpLEF9KEEsbmUsbGUpO25lIT09WmUmJihhZT0hMCxsZT0iYnVmZmVyIixuZT1aZSl9dmFyIFFlPUEub2JqZWN0TW9kZT8xOm5lLmxlbmd0aDtBLmxlbmd0aCs9UWU7dmFyIGF0PUEubGVuZ3RoPEEuaGlnaFdhdGVyTWFyaztpZihhdHx8KEEubmVlZERyYWluPSEw'@;
put 'KSxBLndyaXRpbmd8fEEuY29ya2VkKXt2YXIgeGU9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0EubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bmUsZW5jb2Rpbmc6bGUsaXNCdWY6YWUsY2FsbGJhY2s6d2UsbmV4dDpudWxsfSx4ZT94ZS5uZXh0PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDpBLmJ1'@;
put 'ZmZlcmVkUmVxdWVzdD1BLmxhc3RCdWZmZXJlZFJlcXVlc3QsQS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF9lKG0sQSwhMSxRZSxuZSxsZSx3ZSk7cmV0dXJuIGF0fSh0aGlzLG5lLHdlLG0sQSxhZSkpLGxlfSxxLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFi'@;
put 'bGVTdGF0ZS5jb3JrZWQrK30scS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fd3JpdGFibGVTdGF0ZTttLmNvcmtlZCYmKG0uY29ya2VkLS0sIW0ud3JpdGluZyYmIW0uY29ya2VkJiYhbS5idWZmZXJQcm9jZXNzaW5nJiZtLmJ1ZmZlcmVkUmVxdWVzdCYmeSh0aGlz'@;
put 'LG0pKX0scS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKEEpe2lmKCJzdHJpbmciPT10eXBlb2YgQSYmKEE9QS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxl'@;
put 'IiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChBKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9QSx0aGlzfSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkocS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxxLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24obSxBLGFlKXthZShuZXcgRXJyb3Io'@;
put 'Il93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0scS5wcm90b3R5cGUuX3dyaXRldj1udWxsLHEucHJvdG90eXBlLmVuZD1mdW5jdGlvbihtLEEsYWUpe3ZhciBuZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBtPyhhZT1tLG09bnVsbCxBPW51bGwpOiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLG51bGwhPW0mJnRoaXMud3JpdGUobSxBKSxuZS5jb3JrZWQmJihuZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuZS5lbmRpbmd8fGZ1bmN0aW9uIFUobSxBLGFlKXtBLmVuZGluZz0hMCxWKG0sQSksYWUmJihBLmZpbmlzaGVkP18ubmV4'@;
put 'dFRpY2soYWUpOm0ub25jZSgiZmluaXNoIixhZSkpLEEuZW5kZWQ9ITAsbS53cml0YWJsZT0hMX0odGhpcyxuZSxhZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3Rh'@;
put 'dGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24obSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPW0pfX0pLHEucHJvdG90eXBlLmRlc3Ryb3k9Vy5kZXN0cm95LHEucHJvdG90eXBlLl91bmRlc3Ryb3k9Vy51'@;
put 'bmRlc3Ryb3kscS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24obSxBKXt0aGlzLmVuZCgpLEEobSl9fSwyMjY3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfPWIoMTU3MikuQnVmZmVyLHA9Yig2NDE5KTtmdW5jdGlvbiBOKHcsRixIKXt3LmNvcHkoRixIKX1jZS5leHBvcnRzPWZ1'@;
put 'bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlvbiBEKHcsRil7aWYoISh3IGluc3RhbmNlb2YgRikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVu'@;
put 'Z3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oSCl7dmFyIFI9e2RhdGE6SCxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Ujp0aGlzLmhlYWQ9Uix0aGlzLnRhaWw9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9u'@;
put 'KEgpe3ZhciBSPXtkYXRhOkgsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1SKSx0aGlzLmhlYWQ9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEg9dGhpcy5oZWFkLmRhdGE7cmV0'@;
put 'dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxIfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1m'@;
put 'dW5jdGlvbihIKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPXRoaXMuaGVhZCxqPSIiK1IuZGF0YTtSPVIubmV4dDspais9SCtSLmRhdGE7cmV0dXJuIGp9LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihIKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIF8uYWxs'@;
put 'b2MoMCk7Zm9yKHZhciBSPV8uYWxsb2NVbnNhZmUoSD4+PjApLGo9dGhpcy5oZWFkLFA9MDtqOylOKGouZGF0YSxSLFApLFArPWouZGF0YS5sZW5ndGgsaj1qLm5leHQ7cmV0dXJuIFJ9LHd9KCkscCYmcC5pbnNwZWN0JiZwLmluc3BlY3QuY3VzdG9tJiYoY2UuZXhwb3J0cy5wcm90b3R5cGVb'@;
put 'cC5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdz1wLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9KX0sNTk5NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDgyMTIpO2Z1bmN0aW9uIE4odyxGKXt3'@;
put 'LmVtaXQoImVycm9yIixGKX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8odyxGKXt2YXIgSD10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5k'@;
put 'ZXN0cm95ZWQ/KEY/Rih3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEQubmV4dFRpY2soTix0aGlzLHcpKTpELm5leHRUaWNrKE4sdGhpcyx3KSksdGhpcyk6KHRo'@;
put 'aXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oUCl7IUYmJlA/SC5fd3JpdGFibGVTdGF0'@;
put 'ZT9ILl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEguX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEQubmV4dFRpY2soTixILFApKTpELm5leHRUaWNrKE4sSCxQKTpGJiZGKFApfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBwKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYm'@;
put 'KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxl'@;
put 'U3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3Rh'@;
put 'dGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KGNlLEosYik9PntjZS5leHBvcnRzPWIoNzE4NykuRXZlbnRFbWl0dGVyfSwxNTcyOihjZSxKLGIpPT57dmFyIEQ9Yig4NzY0KSxfPUQuQnVmZmVyO2Z1bmN0aW9uIHAodyxGKXtmb3Io'@;
put 'dmFyIEggaW4gdylGW0hdPXdbSF19ZnVuY3Rpb24gTih3LEYsSCl7cmV0dXJuIF8odyxGLEgpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/Y2UuZXhwb3J0cz1EOihwKEQsSiksSi5CdWZmZXI9TikscChfLE4pLE4uZnJvbT1mdW5jdGlvbih3LEYs'@;
put 'SCl7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxGLEgpfSxOLmFsbG9jPWZ1bmN0aW9uKHcsRixIKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJn'@;
put 'dW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PUY/InN0cmluZyI9PXR5cGVvZiBIP1IuZmlsbChGLEgpOlIuZmlsbChGKTpSLmZpbGwoMCksUn0sTi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxOLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBELlNs'@;
put 'b3dCdWZmZXIodyl9fSwzODcyOihjZSxKLGIpPT57KEo9Y2UuZXhwb3J0cz1iKDQ5NjApKS5TdHJlYW09SixKLlJlYWRhYmxlPUosSi5Xcml0YWJsZT1iKDIwMTApLEouRHVwbGV4PWIoNDM5MCksSi5UcmFuc2Zvcm09YigzOTEyKSxKLlBhc3NUaHJvdWdoPWIoMTI5NCl9LDIyMjE6KGNlLEos'@;
put 'Yik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMzY0KS5CdWZmZXIsXz1ELmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHEpe3N3aXRjaCgocT0iIitxKSYmcS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJi'@;
put 'YXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcocSl7dmFyIHRlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIE4ocSl7dmFyIHRlPWZ1bmN0'@;
put 'aW9uIHAocSl7aWYoIXEpcmV0dXJuInV0ZjgiO2Zvcih2YXIgdGU7Oylzd2l0Y2gocSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGlu'@;
put 'MSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIHE7ZGVmYXVsdDppZih0ZSlyZXR1cm47cT0oIiIrcSkudG9Mb3dlckNhc2UoKSx0ZT0hMH19KHEpO2lmKCJzdHJpbmciIT10eXBlb2YgdGUmJihELmlzRW5jb2Rp'@;
put 'bmc9PT1ffHwhXyhxKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3EpO3JldHVybiB0ZXx8cX0ocSksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9WSx0aGlzLmVuZD1CLHRlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PWosdGU9'@;
put 'NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9Wix0ZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9WCx2b2lkKHRoaXMuZW5kPVEpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9RC5hbGxvY1Vuc2FmZSh0ZSl9'@;
put 'ZnVuY3Rpb24gRihxKXtyZXR1cm4gcTw9MTI3PzA6cT4+NT09Nj8yOnE+PjQ9PTE0PzM6cT4+Mz09MzA/NDpxPj42PT0yPy0xOi0yfWZ1bmN0aW9uIGoocSl7dmFyIHRlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gUihxLHRlLGllKXtpZigxMjghPSgxOTImdGVb'@;
put 'MF0pKXJldHVybiBxLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYocS5sYXN0TmVlZD4xJiZ0ZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnRlWzFdKSlyZXR1cm4gcS5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKHEubGFzdE5lZWQ+MiYmdGUubGVuZ3RoPjImJjEyOCE9KDE5MiZ0ZVsyXSkpcmV0dXJu'@;
put 'IHEubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMscSk7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PXEubGVuZ3RoPyhxLmNvcHkodGhpcy5sYXN0Q2hhcix0ZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMu'@;
put 'bGFzdFRvdGFsKSk6KHEuY29weSh0aGlzLmxhc3RDaGFyLHRlLDAscS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09cS5sZW5ndGgpKX1mdW5jdGlvbiBZKHEsdGUpe2lmKChxLmxlbmd0aC10ZSklMj09MCl7dmFyIGllPXEudG9TdHJpbmcoInV0ZjE2bGUiLHRlKTtpZihpZSl7dmFyIHNl'@;
put 'PWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKHNlPj01NTI5NiYmc2U8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdLGllLnNsaWNlKDAs'@;
put 'LTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdLHEudG9TdHJpbmcoInV0ZjE2bGUiLHRlLHEubGVuZ3RoLTEpfWZ1bmN0aW9uIEIocSl7dmFyIHRlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUo'@;
put 'cSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dGUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTp0ZX1mdW5jdGlvbiBXKHEsdGUpe3ZhciBpZT0ocS5sZW5ndGgtdGUpJTM7cmV0dXJuIDA9PT1pZT9xLnRvU3RyaW5nKCJi'@;
put 'YXNlNjQiLHRlKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09cVtxLmxlbmd0aC0xXSkscS50b1N0cmluZygiYmFz'@;
put 'ZTY0Iix0ZSxxLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFoocSl7dmFyIHRlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dGUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6dGV9ZnVuY3Rpb24gWChxKXty'@;
put 'ZXR1cm4gcS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBRKHEpe3JldHVybiBxJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIifUoucz13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4iIjt2YXIgdGUsaWU7aWYodGhpcy5sYXN0'@;
put 'TmVlZCl7aWYodm9pZCAwPT09KHRlPXRoaXMuZmlsbExhc3QocSkpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8cS5sZW5ndGg/dGU/dGUrdGhpcy50ZXh0KHEsaWUpOnRoaXMudGV4dChxLGllKTp0ZXx8IiJ9LHcucHJvdG90'@;
put 'eXBlLmVuZD1mdW5jdGlvbiBMKHEpe3ZhciB0ZT1xJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3RlKyJcdWZmZmQiOnRlfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIFAocSx0ZSl7dmFyIGllPWZ1bmN0aW9uIEgocSx0ZSxpZSl7dmFyIHNlPXRl'@;
put 'Lmxlbmd0aC0xO2lmKHNlPGllKXJldHVybiAwO3ZhciBnZT1GKHRlW3NlXSk7cmV0dXJuIGdlPj0wPyhnZT4wJiYocS5sYXN0TmVlZD1nZS0xKSxnZSk6LS1zZTxpZXx8LTI9PT1nZT8wOihnZT1GKHRlW3NlXSkpPj0wPyhnZT4wJiYocS5sYXN0TmVlZD1nZS0yKSxnZSk6LS1zZTxpZXx8LTI9'@;
put 'PT1nZT8wOihnZT1GKHRlW3NlXSkpPj0wPyhnZT4wJiYoMj09PWdlP2dlPTA6cS5sYXN0TmVlZD1nZS0zKSxnZSk6MH0odGhpcyxxLHRlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gcS50b1N0cmluZygidXRmOCIsdGUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBzZT1xLmxlbmd0aC0oaWUt'@;
put 'dGhpcy5sYXN0TmVlZCk7cmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLDAsc2UpLHEudG9TdHJpbmcoInV0ZjgiLHRlLHNlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24ocSl7aWYodGhpcy5sYXN0TmVlZDw9cS5sZW5ndGgpcmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLHRo'@;
put 'aXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7cS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHEubGVuZ3RoKSx0aGlz'@;
put 'Lmxhc3ROZWVkLT1xLmxlbmd0aH19LDMzNjQ6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLF89RC5CdWZmZXI7ZnVuY3Rpb24gcCh3LEYpe2Zvcih2YXIgSCBpbiB3KUZbSF09d1tIXX1mdW5jdGlvbiBOKHcsRixIKXtyZXR1cm4gXyh3LEYsSCl9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5z'@;
put 'YWZlJiZfLmFsbG9jVW5zYWZlU2xvdz9jZS5leHBvcnRzPUQ6KHAoRCxKKSxKLkJ1ZmZlcj1OKSxwKF8sTiksTi5mcm9tPWZ1bmN0aW9uKHcsRixIKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1'@;
put 'cm4gXyh3LEYsSCl9LE4uYWxsb2M9ZnVuY3Rpb24odyxGLEgpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFI9Xyh3KTtyZXR1cm4gdm9pZCAwIT09Rj8ic3RyaW5nIj09dHlwZW9mIEg/Ui5maWxsKEYs'@;
put 'SCk6Ui5maWxsKEYpOlIuZmlsbCgwKSxSfSxOLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LE4uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcp'@;
put 'e2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEQuU2xvd0J1ZmZlcih3KX19LDcyOTU6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLkJ1ZmZlcjtjZS5leHBvcnRzPWZ1bmN0aW9uKHAsTil7Zm9yKHZh'@;
put 'ciB3PU1hdGgubWluKHAubGVuZ3RoLE4ubGVuZ3RoKSxGPW5ldyBEKHcpLEg9MDtIPHc7KytIKUZbSF09cFtIXV5OW0hdO3JldHVybiBGfX0sODc2NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDUxMDgpO2NvbnN0IF89Yig5NzQyKSxwPWIoNjQ1KSxOPSJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtKLkJ1ZmZlcj1SLEouU2xvd0J1ZmZlcj1mdW5jdGlvbiB0ZShLZSl7cmV0dXJuK0tlIT1LZSYmKEtlPTApLFIuYWxsb2MoK0tlKX0s'@;
put 'Si5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCB3PTIxNDc0ODM2NDc7ZnVuY3Rpb24gSChLZSl7aWYoS2U+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0tlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCB0dD1uZXcgVWludDhBcnJheShLZSk7'@;
put 'cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0dCxSLnByb3RvdHlwZSksdHR9ZnVuY3Rpb24gUihLZSx0dCxOZSl7aWYoIm51bWJlciI9PXR5cGVvZiBLZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBi'@;
put 'ZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gWShLZSl9cmV0dXJuIGooS2UsdHQsTmUpfWZ1bmN0aW9uIGooS2UsdHQsTmUpe2lmKCJzdHJpbmciPT10eXBlb2YgS2UpcmV0dXJuIGZ1bmN0aW9uIEIoS2UsdHQpe2lmKCgic3RyaW5nIiE9dHlwZW9mIHR0'@;
put 'fHwiIj09PXR0KSYmKHR0PSJ1dGY4IiksIVIuaXNFbmNvZGluZyh0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0dCk7Y29uc3QgTmU9MHxpZShLZSx0dCk7bGV0IHV0PUgoTmUpO2NvbnN0IEp0PXV0LndyaXRlKEtlLHR0KTtyZXR1cm4gSnQhPT1OZSYmKHV0'@;
put 'PXV0LnNsaWNlKDAsSnQpKSx1dH0oS2UsdHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhLZSkpcmV0dXJuIGZ1bmN0aW9uIFooS2Upe2lmKG9uKEtlLFVpbnQ4QXJyYXkpKXtjb25zdCB0dD1uZXcgVWludDhBcnJheShLZSk7cmV0dXJuIFgodHQuYnVmZmVyLHR0LmJ5dGVPZmZzZXQsdHQuYnl0'@;
put 'ZUxlbmd0aCl9cmV0dXJuIFcoS2UpfShLZSk7aWYobnVsbD09S2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVk'@;
put 'IHR5cGUgIit0eXBlb2YgS2UpO2lmKG9uKEtlLEFycmF5QnVmZmVyKXx8S2UmJm9uKEtlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihvbihLZSxTaGFyZWRBcnJheUJ1ZmZlcil8fEtlJiZvbihLZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIp'@;
put 'KSlyZXR1cm4gWChLZSx0dCxOZSk7aWYoIm51bWJlciI9PXR5cGVvZiBLZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCB1dD1LZS52YWx1ZU9mJiZLZS52YWx1'@;
put 'ZU9mKCk7aWYobnVsbCE9dXQmJnV0IT09S2UpcmV0dXJuIFIuZnJvbSh1dCx0dCxOZSk7Y29uc3QgSnQ9ZnVuY3Rpb24gUShLZSl7aWYoUi5pc0J1ZmZlcihLZSkpe2NvbnN0IHR0PTB8cShLZS5sZW5ndGgpLE5lPUgodHQpO3JldHVybiAwPT09TmUubGVuZ3RofHxLZS5jb3B5KE5lLDAsMCx0'@;
put 'dCksTmV9cmV0dXJuIHZvaWQgMCE9PUtlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIEtlLmxlbmd0aHx8eXQoS2UubGVuZ3RoKT9IKDApOlcoS2UpOiJCdWZmZXIiPT09S2UudHlwZSYmQXJyYXkuaXNBcnJheShLZS5kYXRhKT9XKEtlLmRhdGEpOnZvaWQgMH0oS2UpO2lmKEp0KXJldHVybiBK'@;
put 'dDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgS2VbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gUi5mcm9tKEtlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHR0LE5lKTt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBLZSl9ZnVuY3Rpb24gUChLZSl7aWYoIm51bWJlciIhPXR5cGVvZiBLZSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKEtlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytLZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gWShLZSl7cmV0dXJuIFAo'@;
put 'S2UpLEgoS2U8MD8wOjB8cShLZSkpfWZ1bmN0aW9uIFcoS2Upe2NvbnN0IHR0PUtlLmxlbmd0aDwwPzA6MHxxKEtlLmxlbmd0aCksTmU9SCh0dCk7Zm9yKGxldCB1dD0wO3V0PHR0O3V0Kz0xKU5lW3V0XT0yNTUmS2VbdXRdO3JldHVybiBOZX1mdW5jdGlvbiBYKEtlLHR0LE5lKXtpZih0dDww'@;
put 'fHxLZS5ieXRlTGVuZ3RoPHR0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihLZS5ieXRlTGVuZ3RoPHR0KyhOZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5k'@;
put 'cycpO2xldCB1dDtyZXR1cm4gdXQ9dm9pZCAwPT09dHQmJnZvaWQgMD09PU5lP25ldyBVaW50OEFycmF5KEtlKTp2b2lkIDA9PT1OZT9uZXcgVWludDhBcnJheShLZSx0dCk6bmV3IFVpbnQ4QXJyYXkoS2UsdHQsTmUpLE9iamVjdC5zZXRQcm90b3R5cGVPZih1dCxSLnByb3RvdHlwZSksdXR9'@;
put 'ZnVuY3Rpb24gcShLZSl7aWYoS2U+PXcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK3cudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxLZX1mdW5jdGlvbiBpZShLZSx0dCl7aWYoUi5p'@;
put 'c0J1ZmZlcihLZSkpcmV0dXJuIEtlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoS2UpfHxvbihLZSxBcnJheUJ1ZmZlcikpcmV0dXJuIEtlLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBLZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVz'@;
put 'dCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgS2UpO2NvbnN0IE5lPUtlLmxlbmd0aCx1dD1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF1dCYmMD09PU5lKXJldHVybiAwO2xldCBK'@;
put 'dD0hMTtmb3IoOzspc3dpdGNoKHR0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBOZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBEZShLZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxl'@;
put 'IjpyZXR1cm4gMipOZTtjYXNlImhleCI6cmV0dXJuIE5lPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG50KEtlKS5sZW5ndGg7ZGVmYXVsdDppZihKdClyZXR1cm4gdXQ/LTE6RGUoS2UpLmxlbmd0aDt0dD0oIiIrdHQpLnRvTG93ZXJDYXNlKCksSnQ9ITB9fWZ1bmN0aW9uIHNlKEtlLHR0LE5l'@;
put 'KXtsZXQgdXQ9ITE7aWYoKHZvaWQgMD09PXR0fHx0dDwwKSYmKHR0PTApLHR0PnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PU5lfHxOZT50aGlzLmxlbmd0aCkmJihOZT10aGlzLmxlbmd0aCksTmU8PTApfHwoTmU+Pj49MCk8PSh0dD4+Pj0wKSlyZXR1cm4iIjtmb3IoS2V8fChLZT0idXRmOCIp'@;
put 'Ozspc3dpdGNoKEtlKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0dCxOZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHR0LE5lKTtjYXNlImFzY2lpIjpyZXR1cm4gVSh0aGlzLHR0LE5lKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdHQs'@;
put 'TmUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geCh0aGlzLHR0LE5lKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEEodGhpcyx0dCxOZSk7ZGVmYXVsdDppZih1dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAi'@;
put 'K0tlKTtLZT0oS2UrIiIpLnRvTG93ZXJDYXNlKCksdXQ9ITB9fWZ1bmN0aW9uIGdlKEtlLHR0LE5lKXtjb25zdCB1dD1LZVt0dF07S2VbdHRdPUtlW05lXSxLZVtOZV09dXR9ZnVuY3Rpb24gX2UoS2UsdHQsTmUsdXQsSnQpe2lmKDA9PT1LZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBOZT8odXQ9TmUsTmU9MCk6TmU+MjE0NzQ4MzY0Nz9OZT0yMTQ3NDgzNjQ3Ok5lPC0yMTQ3NDgzNjQ4JiYoTmU9LTIxNDc0ODM2NDgpLHl0KE5lPStOZSkmJihOZT1KdD8wOktlLmxlbmd0aC0xKSxOZTwwJiYoTmU9S2UubGVuZ3RoK05lKSxOZT49S2UubGVuZ3RoKXtpZihKdCly'@;
put 'ZXR1cm4tMTtOZT1LZS5sZW5ndGgtMX1lbHNlIGlmKE5lPDApe2lmKCFKdClyZXR1cm4tMTtOZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgdHQmJih0dD1SLmZyb20odHQsdXQpKSxSLmlzQnVmZmVyKHR0KSlyZXR1cm4gMD09PXR0Lmxlbmd0aD8tMTpUZShLZSx0dCxOZSx1dCxKdCk7aWYoIm51'@;
put 'bWJlciI9PXR5cGVvZiB0dClyZXR1cm4gdHQmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9KdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoS2UsdHQsTmUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwo'@;
put 'S2UsdHQsTmUpOlRlKEtlLFt0dF0sTmUsdXQsSnQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFRlKEtlLHR0LE5lLHV0LEp0KXtsZXQgc24sTHQ9MSxQdD1LZS5sZW5ndGgsb2k9dHQubGVuZ3RoO2lmKHZvaWQg'@;
put 'MCE9PXV0JiYoInVjczIiPT09KHV0PVN0cmluZyh1dCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT11dHx8InV0ZjE2bGUiPT09dXR8fCJ1dGYtMTZsZSI9PT11dCkpe2lmKEtlLmxlbmd0aDwyfHx0dC5sZW5ndGg8MilyZXR1cm4tMTtMdD0yLFB0Lz0yLG9pLz0yLE5lLz0yfWZ1bmN0aW9u'@;
put 'IGVuKElpLGRuKXtyZXR1cm4gMT09PUx0P0lpW2RuXTpJaS5yZWFkVUludDE2QkUoZG4qTHQpfWlmKEp0KXtsZXQgSWk9LTE7Zm9yKHNuPU5lO3NuPFB0O3NuKyspaWYoZW4oS2Usc24pPT09ZW4odHQsLTE9PT1JaT8wOnNuLUlpKSl7aWYoLTE9PT1JaSYmKElpPXNuKSxzbi1JaSsxPT09b2kp'@;
put 'cmV0dXJuIElpKkx0fWVsc2UtMSE9PUlpJiYoc24tPXNuLUlpKSxJaT0tMX1lbHNlIGZvcihOZStvaT5QdCYmKE5lPVB0LW9pKSxzbj1OZTtzbj49MDtzbi0tKXtsZXQgSWk9ITA7Zm9yKGxldCBkbj0wO2RuPG9pO2RuKyspaWYoZW4oS2Usc24rZG4pIT09ZW4odHQsZG4pKXtJaT0hMTticmVh'@;
put 'a31pZihJaSlyZXR1cm4gc259cmV0dXJuLTF9ZnVuY3Rpb24gU2UoS2UsdHQsTmUsdXQpe05lPU51bWJlcihOZSl8fDA7Y29uc3QgSnQ9S2UubGVuZ3RoLU5lO3V0Pyh1dD1OdW1iZXIodXQpKT5KdCYmKHV0PUp0KTp1dD1KdDtjb25zdCBMdD10dC5sZW5ndGg7bGV0IFB0O2Zvcih1dD5MdC8y'@;
put 'JiYodXQ9THQvMiksUHQ9MDtQdDx1dDsrK1B0KXtjb25zdCBvaT1wYXJzZUludCh0dC5zdWJzdHIoMipQdCwyKSwxNik7aWYoeXQob2kpKXJldHVybiBQdDtLZVtOZStQdF09b2l9cmV0dXJuIFB0fWZ1bmN0aW9uIHplKEtlLHR0LE5lLHV0KXtyZXR1cm4gSmUoRGUodHQsS2UubGVuZ3RoLU5l'@;
put 'KSxLZSxOZSx1dCl9ZnVuY3Rpb24geihLZSx0dCxOZSx1dCl7cmV0dXJuIEplKGZ1bmN0aW9uIGtlKEtlKXtjb25zdCB0dD1bXTtmb3IobGV0IE5lPTA7TmU8S2UubGVuZ3RoOysrTmUpdHQucHVzaCgyNTUmS2UuY2hhckNvZGVBdChOZSkpO3JldHVybiB0dH0odHQpLEtlLE5lLHV0KX1mdW5j'@;
put 'dGlvbiBnKEtlLHR0LE5lLHV0KXtyZXR1cm4gSmUobnQodHQpLEtlLE5lLHV0KX1mdW5jdGlvbiB5KEtlLHR0LE5lLHV0KXtyZXR1cm4gSmUoZnVuY3Rpb24gX3QoS2UsdHQpe2xldCBOZSx1dCxKdDtjb25zdCBMdD1bXTtmb3IobGV0IFB0PTA7UHQ8S2UubGVuZ3RoJiYhKCh0dC09Mik8MCk7'@;
put 'KytQdClOZT1LZS5jaGFyQ29kZUF0KFB0KSx1dD1OZT4+OCxKdD1OZSUyNTYsTHQucHVzaChKdCksTHQucHVzaCh1dCk7cmV0dXJuIEx0fSh0dCxLZS5sZW5ndGgtTmUpLEtlLE5lLHV0KX1mdW5jdGlvbiB4KEtlLHR0LE5lKXtyZXR1cm4gXy5mcm9tQnl0ZUFycmF5KDA9PT10dCYmTmU9PT1L'@;
put 'ZS5sZW5ndGg/S2U6S2Uuc2xpY2UodHQsTmUpKX1mdW5jdGlvbiBDKEtlLHR0LE5lKXtOZT1NYXRoLm1pbihLZS5sZW5ndGgsTmUpO2NvbnN0IHV0PVtdO2xldCBKdD10dDtmb3IoO0p0PE5lOyl7Y29uc3QgTHQ9S2VbSnRdO2xldCBQdD1udWxsLG9pPUx0PjIzOT80Okx0PjIyMz8zOkx0PjE5'@;
put 'MT8yOjE7aWYoSnQrb2k8PU5lKXtsZXQgZW4sc24sSWksZG47c3dpdGNoKG9pKXtjYXNlIDE6THQ8MTI4JiYoUHQ9THQpO2JyZWFrO2Nhc2UgMjplbj1LZVtKdCsxXSwxMjg9PSgxOTImZW4pJiYoZG49KDMxJkx0KTw8Nnw2MyZlbixkbj4xMjcmJihQdD1kbikpO2JyZWFrO2Nhc2UgMzplbj1L'@;
put 'ZVtKdCsxXSxzbj1LZVtKdCsyXSwxMjg9PSgxOTImZW4pJiYxMjg9PSgxOTImc24pJiYoZG49KDE1Jkx0KTw8MTJ8KDYzJmVuKTw8Nnw2MyZzbixkbj4yMDQ3JiYoZG48NTUyOTZ8fGRuPjU3MzQzKSYmKFB0PWRuKSk7YnJlYWs7Y2FzZSA0OmVuPUtlW0p0KzFdLHNuPUtlW0p0KzJdLElpPUtl'@;
put 'W0p0KzNdLDEyOD09KDE5MiZlbikmJjEyOD09KDE5MiZzbikmJjEyOD09KDE5MiZJaSkmJihkbj0oMTUmTHQpPDwxOHwoNjMmZW4pPDwxMnwoNjMmc24pPDw2fDYzJklpLGRuPjY1NTM1JiZkbjwxMTE0MTEyJiYoUHQ9ZG4pKX19bnVsbD09PVB0PyhQdD02NTUzMyxvaT0xKTpQdD42NTUzNSYm'@;
put 'KFB0LT02NTUzNix1dC5wdXNoKFB0Pj4+MTAmMTAyM3w1NTI5NiksUHQ9NTYzMjB8MTAyMyZQdCksdXQucHVzaChQdCksSnQrPW9pfXJldHVybiBmdW5jdGlvbiBWKEtlKXtjb25zdCB0dD1LZS5sZW5ndGg7aWYodHQ8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5n'@;
put 'LEtlKTtsZXQgTmU9IiIsdXQ9MDtmb3IoO3V0PHR0OylOZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsS2Uuc2xpY2UodXQsdXQrPVQpKTtyZXR1cm4gTmV9KHV0KX1KLmtNYXhMZW5ndGg9dywhKFIuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBGKCl7dHJ5e2NvbnN0'@;
put 'IEtlPW5ldyBVaW50OEFycmF5KDEpLHR0PXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoS2UsdHQpLDQyPT09S2UuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9'@;
put 'fSgpKSYmdHlwZW9mIEQ8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgRC5lcnJvciYmRC5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlm'@;
put 'IHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShSLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksUi5wb29sU2l6ZT04MTkyLFIuZnJvbT1mdW5jdGlvbihLZSx0dCxOZSl7cmV0dXJuIGooS2UsdHQsTmUp'@;
put 'fSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihSLFVpbnQ4QXJyYXkpLFIuYWxsb2M9ZnVuY3Rpb24oS2UsdHQsTmUpe3JldHVybiBmdW5jdGlvbiBMKEtlLHR0LE5lKXtyZXR1cm4gUChLZSksS2U8'@;
put 'PTA/SChLZSk6dm9pZCAwIT09dHQ/InN0cmluZyI9PXR5cGVvZiBOZT9IKEtlKS5maWxsKHR0LE5lKTpIKEtlKS5maWxsKHR0KTpIKEtlKX0oS2UsdHQsTmUpfSxSLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEtlKXtyZXR1cm4gWShLZSl9LFIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKEtlKXty'@;
put 'ZXR1cm4gWShLZSl9LFIuaXNCdWZmZXI9ZnVuY3Rpb24odHQpe3JldHVybiBudWxsIT10dCYmITA9PT10dC5faXNCdWZmZXImJnR0IT09Ui5wcm90b3R5cGV9LFIuY29tcGFyZT1mdW5jdGlvbih0dCxOZSl7aWYob24odHQsVWludDhBcnJheSkmJih0dD1SLmZyb20odHQsdHQub2Zmc2V0LHR0'@;
put 'LmJ5dGVMZW5ndGgpKSxvbihOZSxVaW50OEFycmF5KSYmKE5lPVIuZnJvbShOZSxOZS5vZmZzZXQsTmUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKHR0KXx8IVIuaXNCdWZmZXIoTmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBv'@;
put 'bmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHR0PT09TmUpcmV0dXJuIDA7bGV0IHV0PXR0Lmxlbmd0aCxKdD1OZS5sZW5ndGg7Zm9yKGxldCBMdD0wLFB0PU1hdGgubWluKHV0LEp0KTtMdDxQdDsrK0x0KWlmKHR0W0x0XSE9PU5lW0x0XSl7dXQ9dHRbTHRdLEp0PU5lW0x0'@;
put 'XTticmVha31yZXR1cm4gdXQ8SnQ/LTE6SnQ8dXQ/MTowfSxSLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odHQpe3N3aXRjaChTdHJpbmcodHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6'@;
put 'Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sUi5jb25jYXQ9ZnVuY3Rpb24odHQsTmUpe2lmKCFBcnJheS5pc0FycmF5KHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlz'@;
put 'dCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXR0Lmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTtsZXQgdXQ7aWYodm9pZCAwPT09TmUpZm9yKE5lPTAsdXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dClOZSs9dHRbdXRdLmxlbmd0aDtjb25zdCBKdD1SLmFsbG9j'@;
put 'VW5zYWZlKE5lKTtsZXQgTHQ9MDtmb3IodXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dCl7bGV0IFB0PXR0W3V0XTtpZihvbihQdCxVaW50OEFycmF5KSlMdCtQdC5sZW5ndGg+SnQubGVuZ3RoPyhSLmlzQnVmZmVyKFB0KXx8KFB0PVIuZnJvbShQdCkpLFB0LmNvcHkoSnQsTHQpKTpVaW50OEFycmF5'@;
put 'LnByb3RvdHlwZS5zZXQuY2FsbChKdCxQdCxMdCk7ZWxzZXtpZighUi5pc0J1ZmZlcihQdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1B0LmNvcHkoSnQsTHQpfUx0Kz1QdC5sZW5ndGh9cmV0dXJuIEp0fSxSLmJ5'@;
put 'dGVMZW5ndGg9aWUsUi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7'@;
put 'Zm9yKGxldCBOZT0wO05lPHR0O05lKz0yKWdlKHRoaXMsTmUsTmUrMSk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0'@;
put 'aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBOZT0wO05lPHR0O05lKz00KWdlKHRoaXMsTmUsTmUrMyksZ2UodGhpcyxOZSsxLE5lKzIpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU4IT0wKXRocm93IG5ldyBS'@;
put 'YW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgTmU9MDtOZTx0dDtOZSs9OClnZSh0aGlzLE5lLE5lKzcpLGdlKHRoaXMsTmUrMSxOZSs2KSxnZSh0aGlzLE5lKzIsTmUrNSksZ2UodGhpcyxOZSszLE5lKzQpO3JldHVybiB0aGlz'@;
put 'fSxSLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dHQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAsdHQpOnNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUi5wcm90'@;
put 'b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHR0KXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dHR8fDA9PT1SLmNvbXBhcmUodGhpcyx0dCl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24o'@;
put 'KXtsZXQgdHQ9IiI7Y29uc3QgTmU9Si5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLE5lKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPk5lJiYodHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdHQrIj4ifSxOJiYoUi5w'@;
put 'cm90b3R5cGVbTl09Ui5wcm90b3R5cGUuaW5zcGVjdCksUi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0dCxOZSx1dCxKdCxMdCl7aWYob24odHQsVWludDhBcnJheSkmJih0dD1SLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSwhUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdHQpO2lmKHZvaWQgMD09PU5lJiYoTmU9MCksdm9pZCAwPT09dXQmJih1dD10dD90dC5sZW5ndGg6MCksdm9pZCAw'@;
put 'PT09SnQmJihKdD0wKSx2b2lkIDA9PT1MdCYmKEx0PXRoaXMubGVuZ3RoKSxOZTwwfHx1dD50dC5sZW5ndGh8fEp0PDB8fEx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihKdD49THQmJk5lPj11dClyZXR1cm4gMDtpZihKdD49THQp'@;
put 'cmV0dXJuLTE7aWYoTmU+PXV0KXJldHVybiAxO2lmKHRoaXM9PT10dClyZXR1cm4gMDtsZXQgUHQ9KEx0Pj4+PTApLShKdD4+Pj0wKSxvaT0odXQ+Pj49MCktKE5lPj4+PTApO2NvbnN0IGVuPU1hdGgubWluKFB0LG9pKSxzbj10aGlzLnNsaWNlKEp0LEx0KSxJaT10dC5zbGljZShOZSx1dCk7'@;
put 'Zm9yKGxldCBkbj0wO2RuPGVuOysrZG4paWYoc25bZG5dIT09SWlbZG5dKXtQdD1zbltkbl0sb2k9SWlbZG5dO2JyZWFrfXJldHVybiBQdDxvaT8tMTpvaTxQdD8xOjB9LFIucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0dCxO'@;
put 'ZSx1dCl9LFIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiBfZSh0aGlzLHR0LE5lLHV0LCEwKX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiBfZSh0aGlzLHR0LE5lLHV0LCExKX0sUi5wcm90b3R5cGUud3JpdGU9'@;
put 'ZnVuY3Rpb24odHQsTmUsdXQsSnQpe2lmKHZvaWQgMD09PU5lKUp0PSJ1dGY4Iix1dD10aGlzLmxlbmd0aCxOZT0wO2Vsc2UgaWYodm9pZCAwPT09dXQmJiJzdHJpbmciPT10eXBlb2YgTmUpSnQ9TmUsdXQ9dGhpcy5sZW5ndGgsTmU9MDtlbHNle2lmKCFpc0Zpbml0ZShOZSkpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO05lPj4+PTAsaXNGaW5pdGUodXQpPyh1dD4+Pj0wLHZvaWQgMD09PUp0JiYoSnQ9InV0ZjgiKSk6KEp0PXV0LHV0PXZvaWQgMCl9Y29uc3QgTHQ9'@;
put 'dGhpcy5sZW5ndGgtTmU7aWYoKHZvaWQgMD09PXV0fHx1dD5MdCkmJih1dD1MdCksdHQubGVuZ3RoPjAmJih1dDwwfHxOZTwwKXx8TmU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7SnR8fChKdD0idXRm'@;
put 'OCIpO2xldCBQdD0hMTtmb3IoOzspc3dpdGNoKEp0KXtjYXNlImhleCI6cmV0dXJuIFNlKHRoaXMsdHQsTmUsdXQpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHplKHRoaXMsdHQsTmUsdXQpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHoodGhp'@;
put 'cyx0dCxOZSx1dCk7Y2FzZSJiYXNlNjQiOnJldHVybiBnKHRoaXMsdHQsTmUsdXQpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4geSh0aGlzLHR0LE5lLHV0KTtkZWZhdWx0OmlmKFB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25v'@;
put 'd24gZW5jb2Rpbmc6ICIrSnQpO0p0PSgiIitKdCkudG9Mb3dlckNhc2UoKSxQdD0hMH19LFIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgVD00'@;
put 'MDk2O2Z1bmN0aW9uIFUoS2UsdHQsTmUpe2xldCB1dD0iIjtOZT1NYXRoLm1pbihLZS5sZW5ndGgsTmUpO2ZvcihsZXQgSnQ9dHQ7SnQ8TmU7KytKdCl1dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmS2VbSnRdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gRShLZSx0dCxOZSl7bGV0IHV0PSIiO05l'@;
put 'PU1hdGgubWluKEtlLmxlbmd0aCxOZSk7Zm9yKGxldCBKdD10dDtKdDxOZTsrK0p0KXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEtlW0p0XSk7cmV0dXJuIHV0fWZ1bmN0aW9uIG0oS2UsdHQsTmUpe2NvbnN0IHV0PUtlLmxlbmd0aDsoIXR0fHx0dDwwKSYmKHR0PTApLCghTmV8fE5lPDB8fE5l'@;
put 'PnV0KSYmKE5lPXV0KTtsZXQgSnQ9IiI7Zm9yKGxldCBMdD10dDtMdDxOZTsrK0x0KUp0Kz1NdFtLZVtMdF1dO3JldHVybiBKdH1mdW5jdGlvbiBBKEtlLHR0LE5lKXtjb25zdCB1dD1LZS5zbGljZSh0dCxOZSk7bGV0IEp0PSIiO2ZvcihsZXQgTHQ9MDtMdDx1dC5sZW5ndGgtMTtMdCs9MilK'@;
put 'dCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1dFtMdF0rMjU2KnV0W0x0KzFdKTtyZXR1cm4gSnR9ZnVuY3Rpb24gYWUoS2UsdHQsTmUpe2lmKEtlJTEhPTB8fEtlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKEtlK3R0Pk5lKXRocm93IG5ldyBSYW5nZUVy'@;
put 'cm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gbmUoS2UsdHQsTmUsdXQsSnQsTHQpe2lmKCFSLmlzQnVmZmVyKEtlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYo'@;
put 'dHQ+SnR8fHR0PEx0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihOZSt1dD5LZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGxlKEtlLHR0LE5lLHV0LEp0KXtBZSh0'@;
put 'dCx1dCxKdCxLZSxOZSw3KTtsZXQgTHQ9TnVtYmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7S2VbTmUrK109THQsTHQ+Pj04LEtlW05lKytdPUx0LEx0Pj49OCxLZVtOZSsrXT1MdCxMdD4+PTgsS2VbTmUrK109THQ7bGV0IFB0PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2'@;
put 'NzI5NSkpO3JldHVybiBLZVtOZSsrXT1QdCxQdD4+PTgsS2VbTmUrK109UHQsUHQ+Pj04LEtlW05lKytdPVB0LFB0Pj49OCxLZVtOZSsrXT1QdCxOZX1mdW5jdGlvbiB3ZShLZSx0dCxOZSx1dCxKdCl7QWUodHQsdXQsSnQsS2UsTmUsNyk7bGV0IEx0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2'@;
put 'NzI5NSkpO0tlW05lKzddPUx0LEx0Pj49OCxLZVtOZSs2XT1MdCxMdD4+PTgsS2VbTmUrNV09THQsTHQ+Pj04LEtlW05lKzRdPUx0O2xldCBQdD1OdW1iZXIodHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gS2VbTmUrM109UHQsUHQ+Pj04LEtlW05lKzJdPVB0LFB0'@;
put 'Pj49OCxLZVtOZSsxXT1QdCxQdD4+PTgsS2VbTmVdPVB0LE5lKzh9ZnVuY3Rpb24gWmUoS2UsdHQsTmUsdXQsSnQsTHQpe2lmKE5lK3V0PktlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoTmU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5k'@;
put 'ZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUWUoS2UsdHQsTmUsdXQsSnQpe3JldHVybiB0dD0rdHQsTmU+Pj49MCxKdHx8WmUoS2UsMCxOZSw0KSxwLndyaXRlKEtlLHR0LE5lLHV0LDIzLDQpLE5lKzR9ZnVuY3Rpb24gYXQoS2UsdHQsTmUsdXQsSnQpe3JldHVybiB0dD0rdHQsTmU+Pj49'@;
put 'MCxKdHx8WmUoS2UsMCxOZSw4KSxwLndyaXRlKEtlLHR0LE5lLHV0LDUyLDgpLE5lKzh9Ui5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odHQsTmUpe2NvbnN0IHV0PXRoaXMubGVuZ3RoOyh0dD1+fnR0KTwwPyh0dCs9dXQpPDAmJih0dD0wKTp0dD51dCYmKHR0PXV0KSwoTmU9dm9pZCAwPT09'@;
put 'TmU/dXQ6fn5OZSk8MD8oTmUrPXV0KTwwJiYoTmU9MCk6TmU+dXQmJihOZT11dCksTmU8dHQmJihOZT10dCk7Y29uc3QgSnQ9dGhpcy5zdWJhcnJheSh0dCxOZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihKdCxSLnByb3RvdHlwZSksSnR9LFIucHJvdG90eXBlLnJlYWRVaW50TEU9'@;
put 'Ui5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0dCxOZSx1dCl7dHQ+Pj49MCxOZT4+Pj0wLHV0fHxhZSh0dCxOZSx0aGlzLmxlbmd0aCk7bGV0IEp0PXRoaXNbdHRdLEx0PTEsUHQ9MDtmb3IoOysrUHQ8TmUmJihMdCo9MjU2KTspSnQrPXRoaXNbdHQrUHRdKkx0O3JldHVybiBKdH0s'@;
put 'Ui5wcm90b3R5cGUucmVhZFVpbnRCRT1SLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHR0LE5lLHV0KXt0dD4+Pj0wLE5lPj4+PTAsdXR8fGFlKHR0LE5lLHRoaXMubGVuZ3RoKTtsZXQgSnQ9dGhpc1t0dCstLU5lXSxMdD0xO2Zvcig7TmU+MCYmKEx0Kj0yNTYpOylKdCs9dGhpc1t0'@;
put 'dCstLU5lXSpMdDtyZXR1cm4gSnR9LFIucHJvdG90eXBlLnJlYWRVaW50OD1SLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCwxLHRoaXMubGVuZ3RoKSx0aGlzW3R0XX0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVIucHJvdG90'@;
put 'eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNbdHQrMV08PDh9LFIucHJvdG90eXBlLnJlYWRVaW50MTZCRT1SLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odHQsTmUpe3Jl'@;
put 'dHVybiB0dD4+Pj0wLE5lfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8OHx0aGlzW3R0KzFdfSxSLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ui5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gdHQ+Pj49MCxOZXx8YWUodHQsNCx0aGlzLmxlbmd0'@;
put 'aCksKHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8dGhpc1t0dCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdHQrM119LFIucHJvdG90eXBlLnJlYWRVaW50MzJCRT1SLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCw0LHRoaXMubGVu'@;
put 'Z3RoKSwxNjc3NzIxNip0aGlzW3R0XSsodGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdKX0sUi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUl0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBOZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2'@;
put 'b2lkIDA9PT1OZXx8dm9pZCAwPT09dXQpJiZSZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBKdD1OZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3RoaXNbKyt0dF0qMioqMjQsTHQ9dGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3V0KjIqKjI0O3Jl'@;
put 'dHVybiBCaWdJbnQoSnQpKyhCaWdJbnQoTHQpPDxCaWdJbnQoMzIpKX0pLFIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1JdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgTmU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09TmV8fHZvaWQgMD09PXV0'@;
put 'KSYmUmUodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgSnQ9TmUqMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdLEx0PXRoaXNbKyt0dF0qMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dDtyZXR1cm4oQmlnSW50KEp0KTw8QmlnSW50'@;
put 'KDMyKSkrQmlnSW50KEx0KX0pLFIucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0dCxOZSx1dCl7dHQ+Pj49MCxOZT4+Pj0wLHV0fHxhZSh0dCxOZSx0aGlzLmxlbmd0aCk7bGV0IEp0PXRoaXNbdHRdLEx0PTEsUHQ9MDtmb3IoOysrUHQ8TmUmJihMdCo9MjU2KTspSnQrPXRoaXNbdHQr'@;
put 'UHRdKkx0O3JldHVybiBMdCo9MTI4LEp0Pj1MdCYmKEp0LT1NYXRoLnBvdygyLDgqTmUpKSxKdH0sUi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHR0LE5lLHV0KXt0dD4+Pj0wLE5lPj4+PTAsdXR8fGFlKHR0LE5lLHRoaXMubGVuZ3RoKTtsZXQgSnQ9TmUsTHQ9MSxQdD10aGlzW3R0'@;
put 'Ky0tSnRdO2Zvcig7SnQ+MCYmKEx0Kj0yNTYpOylQdCs9dGhpc1t0dCstLUp0XSpMdDtyZXR1cm4gTHQqPTEyOCxQdD49THQmJihQdC09TWF0aC5wb3coMiw4Kk5lKSksUHR9LFIucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gdHQ+Pj49MCxOZXx8YWUodHQsMSx0'@;
put 'aGlzLmxlbmd0aCksMTI4JnRoaXNbdHRdPy0xKigyNTUtdGhpc1t0dF0rMSk6dGhpc1t0dF19LFIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHR0LE5lKXt0dD4+Pj0wLE5lfHxhZSh0dCwyLHRoaXMubGVuZ3RoKTtjb25zdCB1dD10aGlzW3R0XXx0aGlzW3R0KzFdPDw4O3JldHVy'@;
put 'biAzMjc2OCZ1dD80Mjk0OTAxNzYwfHV0OnV0fSxSLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0dCxOZSl7dHQ+Pj49MCxOZXx8YWUodHQsMix0aGlzLmxlbmd0aCk7Y29uc3QgdXQ9dGhpc1t0dCsxXXx0aGlzW3R0XTw8ODtyZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1'@;
put 'dH0sUi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fHRoaXNbdHQrMl08PDE2fHRoaXNbdHQrM108PDI0fSxSLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5j'@;
put 'dGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdPDwyNHx0aGlzW3R0KzFdPDwxNnx0aGlzW3R0KzJdPDw4fHRoaXNbdHQrM119LFIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPUl0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZz'@;
put 'ZXQiKTtjb25zdCBOZT10aGlzW3R0XSx1dD10aGlzW3R0KzddO3JldHVybih2b2lkIDA9PT1OZXx8dm9pZCAwPT09dXQpJiZSZSh0dCx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRoaXNbdHQrNF0rMjU2KnRoaXNbdHQrNV0rNjU1MzYqdGhpc1t0dCs2XSsodXQ8PDI0KSk8PEJpZ0ludCgzMikp'@;
put 'K0JpZ0ludChOZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdKzE2Nzc3MjE2KnRoaXNbKyt0dF0pfSksUi5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9SXQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IE5lPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZv'@;
put 'aWQgMD09PU5lfHx2b2lkIDA9PT11dCkmJlJlKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IEp0PShOZTw8MjQpKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1srK3R0XTtyZXR1cm4oQmlnSW50KEp0KTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyt0dF0r'@;
put 'NjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dCl9KSxSLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCEwLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRC'@;
put 'RT1mdW5jdGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCExLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCw4LHRoaXMubGVuZ3RoKSxw'@;
put 'LnJlYWQodGhpcyx0dCwhMCw1Miw4KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gdHQ+Pj49MCxOZXx8YWUodHQsOCx0aGlzLmxlbmd0aCkscC5yZWFkKHRoaXMsdHQsITEsNTIsOCl9LFIucHJvdG90eXBlLndyaXRlVWludExFPVIucHJvdG90eXBl'@;
put 'LndyaXRlVUludExFPWZ1bmN0aW9uKHR0LE5lLHV0LEp0KXt0dD0rdHQsTmU+Pj49MCx1dD4+Pj0wLEp0fHxuZSh0aGlzLHR0LE5lLHV0LE1hdGgucG93KDIsOCp1dCktMSwwKTtsZXQgTHQ9MSxQdD0wO2Zvcih0aGlzW05lXT0yNTUmdHQ7KytQdDx1dCYmKEx0Kj0yNTYpOyl0aGlzW05lK1B0'@;
put 'XT10dC9MdCYyNTU7cmV0dXJuIE5lK3V0fSxSLnByb3RvdHlwZS53cml0ZVVpbnRCRT1SLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0dCxOZSx1dCxKdCl7dHQ9K3R0LE5lPj4+PTAsdXQ+Pj49MCxKdHx8bmUodGhpcyx0dCxOZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0'@;
put 'IEx0PXV0LTEsUHQ9MTtmb3IodGhpc1tOZStMdF09MjU1JnR0Oy0tTHQ+PTAmJihQdCo9MjU2KTspdGhpc1tOZStMdF09dHQvUHQmMjU1O3JldHVybiBOZSt1dH0sUi5wcm90b3R5cGUud3JpdGVVaW50OD1SLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4g'@;
put 'dHQ9K3R0LE5lPj4+PTAsdXR8fG5lKHRoaXMsdHQsTmUsMSwyNTUsMCksdGhpc1tOZV09MjU1JnR0LE5lKzF9LFIucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ui5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0'@;
put 'aGlzLHR0LE5lLDIsNjU1MzUsMCksdGhpc1tOZV09MjU1JnR0LHRoaXNbTmUrMV09dHQ+Pj44LE5lKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ui5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0aGlz'@;
put 'LHR0LE5lLDIsNjU1MzUsMCksdGhpc1tOZV09dHQ+Pj44LHRoaXNbTmUrMV09MjU1JnR0LE5lKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ui5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0aGlzLHR0'@;
put 'LE5lLDQsNDI5NDk2NzI5NSwwKSx0aGlzW05lKzNdPXR0Pj4+MjQsdGhpc1tOZSsyXT10dD4+PjE2LHRoaXNbTmUrMV09dHQ+Pj44LHRoaXNbTmVdPTI1NSZ0dCxOZSs0fSxSLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPVIucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odHQsTmUs'@;
put 'dXQpe3JldHVybiB0dD0rdHQsTmU+Pj49MCx1dHx8bmUodGhpcyx0dCxOZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tOZV09dHQ+Pj4yNCx0aGlzW05lKzFdPXR0Pj4+MTYsdGhpc1tOZSsyXT10dD4+PjgsdGhpc1tOZSszXT0yNTUmdHQsTmUrNH0sUi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRM'@;
put 'RT1JdChmdW5jdGlvbih0dCxOZT0wKXtyZXR1cm4gbGUodGhpcyx0dCxOZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPUl0KGZ1bmN0aW9uKHR0LE5lPTApe3JldHVybiB3ZSh0aGlzLHR0LE5lLEJpZ0ludCgw'@;
put 'KSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFIucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odHQsTmUsdXQsSnQpe2lmKHR0PSt0dCxOZT4+Pj0wLCFKdCl7Y29uc3QgZW49TWF0aC5wb3coMiw4KnV0LTEpO25lKHRoaXMsdHQsTmUsdXQsZW4tMSwtZW4pfWxldCBMdD0w'@;
put 'LFB0PTEsb2k9MDtmb3IodGhpc1tOZV09MjU1JnR0OysrTHQ8dXQmJihQdCo9MjU2KTspdHQ8MCYmMD09PW9pJiYwIT09dGhpc1tOZStMdC0xXSYmKG9pPTEpLHRoaXNbTmUrTHRdPSh0dC9QdHwwKS1vaSYyNTU7cmV0dXJuIE5lK3V0fSxSLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9u'@;
put 'KHR0LE5lLHV0LEp0KXtpZih0dD0rdHQsTmU+Pj49MCwhSnQpe2NvbnN0IGVuPU1hdGgucG93KDIsOCp1dC0xKTtuZSh0aGlzLHR0LE5lLHV0LGVuLTEsLWVuKX1sZXQgTHQ9dXQtMSxQdD0xLG9pPTA7Zm9yKHRoaXNbTmUrTHRdPTI1NSZ0dDstLUx0Pj0wJiYoUHQqPTI1Nik7KXR0PDAmJjA9'@;
put 'PT1vaSYmMCE9PXRoaXNbTmUrTHQrMV0mJihvaT0xKSx0aGlzW05lK0x0XT0odHQvUHR8MCktb2kmMjU1O3JldHVybiBOZSt1dH0sUi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4gdHQ9K3R0LE5lPj4+PTAsdXR8fG5lKHRoaXMsdHQsTmUsMSwxMjcsLTEy'@;
put 'OCksdHQ8MCYmKHR0PTI1NSt0dCsxKSx0aGlzW05lXT0yNTUmdHQsTmUrMX0sUi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4gdHQ9K3R0LE5lPj4+PTAsdXR8fG5lKHRoaXMsdHQsTmUsMiwzMjc2NywtMzI3NjgpLHRoaXNbTmVdPTI1NSZ0dCx0aGlz'@;
put 'W05lKzFdPXR0Pj4+OCxOZSsyfSxSLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiB0dD0rdHQsTmU+Pj49MCx1dHx8bmUodGhpcyx0dCxOZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tOZV09dHQ+Pj44LHRoaXNbTmUrMV09MjU1JnR0LE5lKzJ9LFIucHJv'@;
put 'dG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LE5lLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tOZV09MjU1JnR0LHRoaXNbTmUrMV09dHQ+Pj44LHRoaXNbTmUrMl09dHQ+Pj4xNix0aGlzW05l'@;
put 'KzNdPXR0Pj4+MjQsTmUrNH0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4gdHQ9K3R0LE5lPj4+PTAsdXR8fG5lKHRoaXMsdHQsTmUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0dDwwJiYodHQ9NDI5NDk2NzI5NSt0dCsxKSx0aGlzW05lXT10'@;
put 'dD4+PjI0LHRoaXNbTmUrMV09dHQ+Pj4xNix0aGlzW05lKzJdPXR0Pj4+OCx0aGlzW05lKzNdPTI1NSZ0dCxOZSs0fSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9SXQoZnVuY3Rpb24odHQsTmU9MCl7cmV0dXJuIGxlKHRoaXMsdHQsTmUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAw'@;
put 'IiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9SXQoZnVuY3Rpb24odHQsTmU9MCl7cmV0dXJuIHdlKHRoaXMsdHQsTmUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9'@;
put 'KSxSLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiBRZSh0aGlzLHR0LE5lLCEwLHV0KX0sUi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4gUWUodGhpcyx0dCxOZSwhMSx1dCl9LFIucHJvdG90eXBlLndyaXRl'@;
put 'RG91YmxlTEU9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiBhdCh0aGlzLHR0LE5lLCEwLHV0KX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIGF0KHRoaXMsdHQsTmUsITEsdXQpfSxSLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHR0LE5lLHV0'@;
put 'LEp0KXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYodXR8fCh1dD0wKSwhSnQmJjAhPT1KdCYmKEp0PXRoaXMubGVuZ3RoKSxOZT49dHQubGVuZ3RoJiYoTmU9dHQubGVuZ3RoKSxOZXx8KE5lPTApLEp0PjAm'@;
put 'Jkp0PHV0JiYoSnQ9dXQpLEp0PT09dXR8fDA9PT10dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihOZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYodXQ8MHx8dXQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVy'@;
put 'cm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihKdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO0p0PnRoaXMubGVuZ3RoJiYoSnQ9dGhpcy5sZW5ndGgpLHR0Lmxlbmd0aC1OZTxKdC11dCYmKEp0PXR0Lmxlbmd0aC1OZSt1dCk7Y29uc3QgTHQ9'@;
put 'SnQtdXQ7cmV0dXJuIHRoaXM9PT10dCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKE5lLHV0LEp0KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0dCx0aGlzLnN1YmFycmF5KHV0LEp0KSxOZSksTHR9LFIu'@;
put 'cHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odHQsTmUsdXQsSnQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpe2lmKCJzdHJpbmciPT10eXBlb2YgTmU/KEp0PU5lLE5lPTAsdXQ9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgdXQmJihKdD11dCx1dD10aGlzLmxlbmd0aCksdm9pZCAwIT09'@;
put 'SnQmJiJzdHJpbmciIT10eXBlb2YgSnQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgSnQmJiFSLmlzRW5jb2RpbmcoSnQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSnQpO2lmKDE9'@;
put 'PT10dC5sZW5ndGgpe2NvbnN0IFB0PXR0LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PUp0JiZQdDwxMjh8fCJsYXRpbjEiPT09SnQpJiYodHQ9UHQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiB0dD90dCY9MjU1OiJib29sZWFuIj09dHlwZW9mIHR0JiYodHQ9TnVtYmVyKHR0KSk7aWYoTmU8MHx8'@;
put 'dGhpcy5sZW5ndGg8TmV8fHRoaXMubGVuZ3RoPHV0KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih1dDw9TmUpcmV0dXJuIHRoaXM7bGV0IEx0O2lmKE5lPj4+PTAsdXQ9dm9pZCAwPT09dXQ/dGhpcy5sZW5ndGg6dXQ+Pj4wLHR0fHwodHQ9MCksIm51bWJl'@;
put 'ciI9PXR5cGVvZiB0dClmb3IoTHQ9TmU7THQ8dXQ7KytMdCl0aGlzW0x0XT10dDtlbHNle2NvbnN0IFB0PVIuaXNCdWZmZXIodHQpP3R0OlIuZnJvbSh0dCxKdCksb2k9UHQubGVuZ3RoO2lmKDA9PT1vaSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdHQrJyIgaXMgaW52YWxp'@;
put 'ZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihMdD0wO0x0PHV0LU5lOysrTHQpdGhpc1tMdCtOZV09UHRbTHQlb2ldfXJldHVybiB0aGlzfTtjb25zdCB4ZT17fTtmdW5jdGlvbiB2ZShLZSx0dCxOZSl7eGVbS2VdPWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6dHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT1gJHt0aGlzLm5hbWV9IFske0tlfV1gLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4g'@;
put 'S2V9c2V0IGNvZGUoSnQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6SnQsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7S2V9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1'@;
put 'bmN0aW9uIHFlKEtlKXtsZXQgdHQ9IiIsTmU9S2UubGVuZ3RoO2NvbnN0IHV0PSItIj09PUtlWzBdPzE6MDtmb3IoO05lPj11dCs0O05lLT0zKXR0PWBfJHtLZS5zbGljZShOZS0zLE5lKX0ke3R0fWA7cmV0dXJuYCR7S2Uuc2xpY2UoMCxOZSl9JHt0dH1gfWZ1bmN0aW9uIEFlKEtlLHR0LE5l'@;
put 'LHV0LEp0LEx0KXtpZihLZT5OZXx8S2U8dHQpe2NvbnN0IFB0PSJiaWdpbnQiPT10eXBlb2YgdHQ/Im4iOiIiO2xldCBvaTt0aHJvdyBvaT1MdD4zPzA9PT10dHx8dHQ9PT1CaWdJbnQoMCk/YD49IDAke1B0fSBhbmQgPCAyJHtQdH0gKiogJHs4KihMdCsxKX0ke1B0fWA6YD49IC0oMiR7UHR9'@;
put 'ICoqICR7OCooTHQrMSktMX0ke1B0fSkgYW5kIDwgMiAqKiAkezgqKEx0KzEpLTF9JHtQdH1gOmA+PSAke3R0fSR7UHR9IGFuZCA8PSAke05lfSR7UHR9YCxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLG9pLEtlKX0hZnVuY3Rpb24gamUoS2UsdHQsTmUpe0ZlKHR0LCJvZmZzZXQi'@;
put 'KSwodm9pZCAwPT09S2VbdHRdfHx2b2lkIDA9PT1LZVt0dCtOZV0pJiZSZSh0dCxLZS5sZW5ndGgtKE5lKzEpKX0odXQsSnQsTHQpfWZ1bmN0aW9uIEZlKEtlLHR0KXtpZigibnVtYmVyIiE9dHlwZW9mIEtlKXRocm93IG5ldyB4ZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0dCwibnVtYmVyIixL'@;
put 'ZSl9ZnVuY3Rpb24gUmUoS2UsdHQsTmUpe3Rocm93IE1hdGguZmxvb3IoS2UpIT09S2U/KEZlKEtlLE5lKSxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRShOZXx8Im9mZnNldCIsImFuIGludGVnZXIiLEtlKSk6dHQ8MD9uZXcgeGUuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyB4ZS5FUlJf'@;
put 'T1VUX09GX1JBTkdFKE5lfHwib2Zmc2V0IixgPj0gJHtOZT8xOjB9IGFuZCA8PSAke3R0fWAsS2UpfXZlKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKEtlKXtyZXR1cm4gS2U/YCR7S2V9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNz'@;
put 'IG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSx2ZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKEtlLHR0KXtyZXR1cm5gVGhlICIke0tlfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB0dH1g'@;
put 'fSxUeXBlRXJyb3IpLHZlKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbihLZSx0dCxOZSl7bGV0IHV0PWBUaGUgdmFsdWUgb2YgIiR7S2V9IiBpcyBvdXQgb2YgcmFuZ2UuYCxKdD1OZTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihOZSkmJk1hdGguYWJzKE5lKT40Mjk0OTY3Mjk2P0p0PXFl'@;
put 'KFN0cmluZyhOZSkpOiJiaWdpbnQiPT10eXBlb2YgTmUmJihKdD1TdHJpbmcoTmUpLChOZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fE5lPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJihKdD1xZShKdCkpLEp0Kz0ibiIpLHV0Kz1gIEl0IG11c3QgYmUgJHt0dH0uIFJlY2VpdmVkICR7SnR9'@;
put 'YCx1dH0sUmFuZ2VFcnJvcik7Y29uc3QgSWU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBEZShLZSx0dCl7bGV0IE5lO3R0PXR0fHwxLzA7Y29uc3QgdXQ9S2UubGVuZ3RoO2xldCBKdD1udWxsO2NvbnN0IEx0PVtdO2ZvcihsZXQgUHQ9MDtQdDx1dDsrK1B0KXtpZihOZT1LZS5jaGFy'@;
put 'Q29kZUF0KFB0KSxOZT41NTI5NSYmTmU8NTczNDQpe2lmKCFKdCl7aWYoTmU+NTYzMTkpeyh0dC09Myk+LTEmJkx0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFB0KzE9PT11dCl7KHR0LT0zKT4tMSYmTHQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9SnQ9TmU7Y29udGludWV9'@;
put 'aWYoTmU8NTYzMjApeyh0dC09Myk+LTEmJkx0LnB1c2goMjM5LDE5MSwxODkpLEp0PU5lO2NvbnRpbnVlfU5lPTY1NTM2KyhKdC01NTI5Njw8MTB8TmUtNTYzMjApfWVsc2UgSnQmJih0dC09Myk+LTEmJkx0LnB1c2goMjM5LDE5MSwxODkpO2lmKEp0PW51bGwsTmU8MTI4KXtpZigodHQtPTEp'@;
put 'PDApYnJlYWs7THQucHVzaChOZSl9ZWxzZSBpZihOZTwyMDQ4KXtpZigodHQtPTIpPDApYnJlYWs7THQucHVzaChOZT4+NnwxOTIsNjMmTmV8MTI4KX1lbHNlIGlmKE5lPDY1NTM2KXtpZigodHQtPTMpPDApYnJlYWs7THQucHVzaChOZT4+MTJ8MjI0LE5lPj42JjYzfDEyOCw2MyZOZXwxMjgp'@;
put 'fWVsc2V7aWYoIShOZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0dC09NCk8MClicmVhaztMdC5wdXNoKE5lPj4xOHwyNDAsTmU+PjEyJjYzfDEyOCxOZT4+NiY2M3wxMjgsNjMmTmV8MTI4KX19cmV0dXJuIEx0fWZ1bmN0aW9uIG50KEtlKXty'@;
put 'ZXR1cm4gXy50b0J5dGVBcnJheShmdW5jdGlvbiBIZShLZSl7aWYoKEtlPShLZT1LZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShJZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7S2UubGVuZ3RoJTQhPTA7KUtlKz0iPSI7cmV0dXJuIEtlfShLZSkpfWZ1bmN0aW9uIEplKEtl'@;
put 'LHR0LE5lLHV0KXtsZXQgSnQ7Zm9yKEp0PTA7SnQ8dXQmJiEoSnQrTmU+PXR0Lmxlbmd0aHx8SnQ+PUtlLmxlbmd0aCk7KytKdCl0dFtKdCtOZV09S2VbSnRdO3JldHVybiBKdH1mdW5jdGlvbiBvbihLZSx0dCl7cmV0dXJuIEtlIGluc3RhbmNlb2YgdHR8fG51bGwhPUtlJiZudWxsIT1LZS5j'@;
put 'b25zdHJ1Y3RvciYmbnVsbCE9S2UuY29uc3RydWN0b3IubmFtZSYmS2UuY29uc3RydWN0b3IubmFtZT09PXR0Lm5hbWV9ZnVuY3Rpb24geXQoS2Upe3JldHVybiBLZSE9S2V9Y29uc3QgTXQ9ZnVuY3Rpb24oKXtjb25zdCBLZT0iMDEyMzQ1Njc4OWFiY2RlZiIsdHQ9bmV3IEFycmF5KDI1Nik7'@;
put 'Zm9yKGxldCBOZT0wO05lPDE2OysrTmUpe2NvbnN0IHV0PTE2Kk5lO2ZvcihsZXQgSnQ9MDtKdDwxNjsrK0p0KXR0W3V0K0p0XT1LZVtOZV0rS2VbSnRdfXJldHVybiB0dH0oKTtmdW5jdGlvbiBJdChLZSl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+InUiP3J0OktlfWZ1bmN0aW9uIHJ0KCl7dGhy'@;
put 'b3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sNTExNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDg2MTIpLF89YigxNzY4KSxwPWIoODkyOCksTj1iKDk3NzApO2NlLmV4cG9ydHM9Tnx8RC5jYWxsKHAsXyl9LDMxOTI6KGNlLEosYik9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIEQ9Yig4NjEyKSxfPWIoMTc2OCkscD1iKDUxMTYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcChELF8sYXJndW1lbnRzKX19LDE3Njg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LDg5Mjg6Y2U9PnsidXNlIHN0cmlj'@;
put 'dCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sMzE5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODYxMiksXz1iKDQ0NTMpLHA9Yig4OTI4KSxOPWIoNTExNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXtpZihGLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBl'@;
put 'b2YgRlswXSl0aHJvdyBuZXcgXygiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBOKEQscCxGKX19LDk3NzA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LDE5MjQ6KGNlLEosYik9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIEQ9YigyMTApLF89Yig1NTU5KSxwPV8oRCgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxGKXt2YXIgSD1EKHcsISFGKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSCYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oSCk6SH19LDU1'@;
put 'NTk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3NzcxKSxfPWIoNDQyOSkscD1iKDMxOSksTj1iKDMxOTIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oRil7dmFyIEg9cChhcmd1bWVudHMpLFI9Ri5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIEQoSCwxKyhSPjA/Ujow'@;
put 'KSwhMCl9LF8/XyhjZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOk59KTpjZS5leHBvcnRzLmFwcGx5PU59LDczNzk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyMTApLF89YigzMTkpLHA9XyhbRCgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO2NlLmV4cG9ydHM9ZnVu'@;
put 'Y3Rpb24odyxGKXt2YXIgSD1EKHcsISFGKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSCYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oW0hdKTpIfX0sMTAyNzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPWIoMjgzMCkuVHJhbnNmb3JtLHA9YigyNTUz'@;
put 'KS5zO2Z1bmN0aW9uIHcoail7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiBqLHRoaXMuaGFzaE1vZGU/dGhpc1tqXT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10'@;
put 'aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1iKDU3MTcpKHcsXyk7dmFyIEY9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLEg9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1'@;
put 'ZmZlci5pc1ZpZXcmJihELnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEQuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGosUCxMKXt2YXIgWT1mdW5jdGlvbiBSKGosUCl7aWYoaiBpbnN0YW5jZW9mIEQpcmV0dXJuIGo7aWYoInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBqKXJldHVybiBELmZyb20oaixQKTtpZihIJiZBcnJheUJ1ZmZlci5pc1ZpZXcoaikpe2lmKDA9PT1qLmJ5dGVMZW5ndGgpcmV0dXJuIEQuYWxsb2MoMCk7dmFyIEw9RC5mcm9tKGouYnVmZmVyLGouYnl0ZU9mZnNldCxqLmJ5dGVMZW5ndGgpO2lmKEwuYnl0ZUxlbmd0aD09'@;
put 'PWouYnl0ZUxlbmd0aClyZXR1cm4gTH1pZihGJiZqIGluc3RhbmNlb2YgVWludDhBcnJheXx8RC5pc0J1ZmZlcihqKSYmai5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGouY29uc3RydWN0b3IuaXNCdWZmZXImJmouY29uc3RydWN0b3IuaXNCdWZmZXIoaikpcmV0dXJuIEQuZnJv'@;
put 'bShqKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oaixQKSxCPXRoaXMuX3VwZGF0ZShZKTtyZXR1cm4gdGhpcy5oYXNoTW9k'@;
put 'ZT90aGlzOihMJiYoQj10aGlzLl90b1N0cmluZyhCLEwpKSxCKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0'@;
put 'ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0'@;
put 'byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oaixQLEwpe3ZhciBZO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZShqKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKGopKX1jYXRjaChCKXtZPUJ9ZmluYWxseXtMKFkp'@;
put 'fX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGope3ZhciBQO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKEwpe1A9TH1qKFApfSx3LnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbihqKXt2YXIgUD10aGlzLl9fZmluYWwoKXx8RC5hbGxvYygwKTtyZXR1'@;
put 'cm4gaiYmKFA9dGhpcy5fdG9TdHJpbmcoUCxqLCEwKSksUH0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKGosUCxMKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgcChQKSx0aGlzLl9lbmNvZGluZz1QKSx0aGlzLl9lbmNvZGluZyE9PVApdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgWT10aGlzLl9kZWNvZGVyLndyaXRlKGopO3JldHVybiBMJiYoWSs9dGhpcy5fZGVjb2Rlci5lbmQoKSksWX0sY2UuZXhwb3J0cz13fSw1MTA4OihjZSxKLGIpPT57dmFyIEQ9Yig5NTM5KSxfPWIoOTI4Mik7ZnVuY3Rpb24g'@;
put 'cCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciB3LE49QXJyYXkucHJvdG90eXBlLnNsaWNlLEY9e307dz10eXBlb2YgYi5nPCJ1IiYmYi5nLmNvbnNvbGU/Yi5nLmNvbnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2'@;
put 'YXIgSD1bW2Z1bmN0aW9uIFkoKXt9LCJsb2ciXSxbZnVuY3Rpb24gQigpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24gVygpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24gWigpe3cud2Fybi5hcHBseSh3LGFyZ3VtZW50cyl9'@;
put 'LCJlcnJvciJdLFtmdW5jdGlvbiBYKHNlKXtGW3NlXT1wKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uIFEoc2Upe3ZhciBnZT1GW3NlXTtpZighZ2UpdGhyb3cgbmV3IEVycm9yKCJObyBzdWNoIGxhYmVsOiAiK3NlKTtkZWxldGUgRltzZV07dmFyIF9lPXAoKS1nZTt3LmxvZyhzZSsiOiAiK19lKyJt'@;
put 'cyIpfSwidGltZUVuZCJdLFtmdW5jdGlvbiBxKCl7dmFyIHNlPW5ldyBFcnJvcjtzZS5uYW1lPSJUcmFjZSIsc2UubWVzc2FnZT1ELmZvcm1hdC5hcHBseShudWxsLGFyZ3VtZW50cyksdy5lcnJvcihzZS5zdGFjayl9LCJ0cmFjZSJdLFtmdW5jdGlvbiB0ZShzZSl7dy5sb2coRC5pbnNwZWN0'@;
put 'KHNlKSsiXG4iKX0sImRpciJdLFtmdW5jdGlvbiBpZShzZSl7aWYoIXNlKXt2YXIgZ2U9Ti5jYWxsKGFyZ3VtZW50cywxKTtfLm9rKCExLEQuZm9ybWF0LmFwcGx5KG51bGwsZ2UpKX19LCJhc3NlcnQiXV0sUj0wO1I8SC5sZW5ndGg7UisrKXt2YXIgaj1IW1JdLEw9alsxXTt3W0xdfHwod1tM'@;
put 'XT1qWzBdKX1jZS5leHBvcnRzPXd9LDY0OTc6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLkJ1ZmZlcjtmdW5jdGlvbiBYKFEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUSl9Si5pc0FycmF5PWZ1bmN0aW9uIF8oUSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXku'@;
put 'aXNBcnJheShRKToiW29iamVjdCBBcnJheV0iPT09WChRKX0sSi5pc0Jvb2xlYW49ZnVuY3Rpb24gcChRKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBRfSxKLmlzTnVsbD1mdW5jdGlvbiBOKFEpe3JldHVybiBudWxsPT09UX0sSi5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiB3KFEpe3Jl'@;
put 'dHVybiBudWxsPT1RfSxKLmlzTnVtYmVyPWZ1bmN0aW9uIEYoUSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBRfSxKLmlzU3RyaW5nPWZ1bmN0aW9uIEgoUSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBRfSxKLmlzU3ltYm9sPWZ1bmN0aW9uIFIoUSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBR'@;
put 'fSxKLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIGooUSl7cmV0dXJuIHZvaWQgMD09PVF9LEouaXNSZWdFeHA9ZnVuY3Rpb24gUChRKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PVgoUSl9LEouaXNPYmplY3Q9ZnVuY3Rpb24gTChRKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIFEmJm51bGwhPT1R'@;
put 'fSxKLmlzRGF0ZT1mdW5jdGlvbiBZKFEpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PVgoUSl9LEouaXNFcnJvcj1mdW5jdGlvbiBCKFEpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1YKFEpfHxRIGluc3RhbmNlb2YgRXJyb3J9LEouaXNGdW5jdGlvbj1mdW5jdGlvbiBXKFEpe3JldHVybiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBRfSxKLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFooUSl7cmV0dXJuIG51bGw9PT1RfHwiYm9vbGVhbiI9PXR5cGVvZiBRfHwibnVtYmVyIj09dHlwZW9mIFF8fCJzdHJpbmciPT10eXBlb2YgUXx8InN5bWJvbCI9PXR5cGVvZiBRfHx0eXBlb2YgUT4idSJ9LEouaXNC'@;
put 'dWZmZXI9RC5pc0J1ZmZlcn0sNjM5MzooY2UsSixiKT0+e3ZhciBEPWIoODc2NCkuQnVmZmVyLF89Yig2OTQ4KSxwPWIoNjQyNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IHcoUil9O3ZhciBOPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0s'@;
put 'c2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6'@;
put 'e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIHcoSCl7dGhpcy5jdXJ2ZVR5cGU9TltIXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkh9KSx0aGlzLmN1cnZlPW5ldyBfLmVjKHRo'@;
put 'aXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gRihILFIsail7QXJyYXkuaXNBcnJheShIKXx8KEg9SC50b0FycmF5KCkpO3ZhciBQPW5ldyBEKEgpO2lmKGomJlAubGVuZ3RoPGope3ZhciBMPW5ldyBEKGotUC5sZW5ndGgpO0wuZmlsbCgwKSxQPUQuY29uY2F0'@;
put 'KFtMLFBdKX1yZXR1cm4gUj9QLnRvU3RyaW5nKFIpOlB9Ti5wMjI0PU4uc2VjcDIyNHIxLE4ucDI1Nj1OLnNlY3AyNTZyMT1OLnByaW1lMjU2djEsTi5wMTkyPU4uc2VjcDE5MnIxPU4ucHJpbWUxOTJ2MSxOLnAzODQ9Ti5zZWNwMzg0cjEsTi5wNTIxPU4uc2VjcDUyMXIxLHcucHJvdG90eXBl'@;
put 'LmdlbmVyYXRlS2V5cz1mdW5jdGlvbihILFIpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoSCxSKX0sdy5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihILFIsail7cmV0dXJuIFI9Unx8InV0ZjgiLEQuaXNCdWZmZXIo'@;
put 'SCl8fChIPW5ldyBEKEgsUikpLEYodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEgpLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksaix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKEgsUil7'@;
put 'dmFyIGo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1SLCEwKTtyZXR1cm4iaHlicmlkIj09PVImJihqWzBdPWpbai5sZW5ndGgtMV0lMj83OjYpLEYoaixIKX0sdy5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihIKXtyZXR1cm4gRih0aGlzLmtleXMuZ2V0UHJp'@;
put 'dmF0ZSgpLEgpfSx3LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gUj1SfHwidXRmOCIsRC5pc0J1ZmZlcihIKXx8KEg9bmV3IEQoSCxSKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoSCksdGhpc30sdy5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlv'@;
put 'bihILFIpe1I9Unx8InV0ZjgiLEQuaXNCdWZmZXIoSCl8fChIPW5ldyBEKEgsUikpO3ZhciBqPW5ldyBwKEgpO3JldHVybiBqPWoudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoaiksdGhpc319LDY0MjY6ZnVu'@;
put 'Y3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lmKCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeixnKXt6LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnBy'@;
put 'b3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9uIHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4gejt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eiYmKCgi'@;
put 'bGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoenx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRv'@;
put 'dy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeixnKXt2YXIgeT16LmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoeixnLHkpe3ZhciB4PUgo'@;
put 'eix5KTtyZXR1cm4geS0xPj1nJiYoeHw9SCh6LHktMSk8PDQpLHh9ZnVuY3Rpb24gaih6LGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKHoubGVuZ3RoLHkpLFY9ZztWPFQ7VisrKXt2YXIgVT16LmNoYXJDb2RlQXQoViktNDg7Qyo9eCxDKz1VPj00OT9VLTQ5KzEwOlU+PTE3P1UtMTcr'@;
put 'MTA6VX1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5'@;
put 'KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0'@;
put 'Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxn'@;
put 'Lmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5l'@;
put 'Z2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5'@;
put 'MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09'@;
put 'dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtD'@;
put 'KyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULFYsVT0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMs'@;
put 'KFUrPTI0KT49MjYmJihVLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9'@;
put 'MjQpPj0yNiYmKFUtPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtD'@;
put 'PHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFUsVD0wLFY9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6'@;
put 'VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl'@;
put 'Ll9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgVj1nLmxlbmd0aC14LFU9ViVDLEU9TWF0aC5taW4oVixWLVUpK3gsbT0wLEE9eDtBPEU7'@;
put 'QSs9QyltPWooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1VKXt2YXIgYWU9MTtmb3IobT1qKGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxVO0ErKylhZSo9eTt0aGlzLmltdWxuKGFl'@;
put 'KSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcu'@;
put 'd29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlw'@;
put 'ZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo'@;
put 'aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBQPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5'@;
put 'LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sWT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0'@;
put 'ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5'@;
put 'MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2ZTt2YXIgeD16Lmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfHoud29yZHNbMF0sVD0wfGcud29yZHNbMF0s'@;
put 'Vj1DKlQsRT1WLzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZWO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLGxlPU1hdGgubWF4KDAsbS16Lmxlbmd0aCsxKTtsZTw9bmU7bGUrKylBKz0o'@;
put 'Vj0oQz0wfHoud29yZHNbbS1sZXwwXSkqKFQ9MHxnLndvcmRzW2xlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmVjt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1'@;
put 'bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsVj0wO1Y8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT10aGlzLndvcmRzW1ZdLEU9KDE2Nzc3MjE1JihVPDxDfFQpKS50b1N0cmluZygxNik7VD1VPj4+MjQt'@;
put 'QyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsVi0tKSx4PTAhPT1UfHxWIT09dGhpcy5sZW5ndGgtMT9QWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'KHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09TFtnXSxBPVlbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5p'@;
put 'c1plcm8oKT9uZSt4OlBbbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3'@;
put 'LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0'@;
put 'aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90'@;
put 'b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgRjwidSIpLHRoaXMudG9BcnJheUxpa2UoRixnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJh'@;
put 'eUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3Zh'@;
put 'ciBFLG0sVj0ibGUiPT09eSxVPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKFYpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbbV09RTtmb3IoO208VDttKyspVVttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspVVttXT0wO2ZvcihtPTA7'@;
put 'IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbVC1tLTFdPUV9cmV0dXJuIFV9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJu'@;
put 'IHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiA4'@;
put 'MTkxJnl8fCh4Kz0xMyx5Pj4+PTEzKSwxMjcmeXx8KHgrPTcseT4+Pj03KSwxNSZ5fHwoeCs9NCx5Pj4+PTQpLDMmeXx8KHgrPTIseT4+Pj0yKSwxJnl8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRz'@;
put 'W3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90'@;
put 'aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnBy'@;
put 'b3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgp'@;
put 'fSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUo'@;
put 'KS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5s'@;
put 'ZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlz'@;
put 'Lm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZh'@;
put 'ciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5'@;
put 'cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3Io'@;
put 'dGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0w'@;
put 'KTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2'@;
put 'Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1'@;
put 'cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRp'@;
put 'dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25v'@;
put 'cm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKSsoMHxDLndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1U'@;
put 'JiZWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Vjx4'@;
put 'Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT14LndvcmRzW1ZdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49'@;
put 'MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUu'@;
put 'aXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIFY9MCxVPTA7VTxU'@;
put 'Lmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKS0oMHxULndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2Zvcig7MCE9PVYmJlU8Qy5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtpZigwPT09'@;
put 'ViYmVTxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtVPEMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPUMud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFUpLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl'@;
put 'LnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBaPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxWPXgud29yZHMsVT0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLGxlPWFlPj4+MTMsd2U9MHxDWzFdLFplPTgxOTEmd2Us'@;
put 'UWU9d2U+Pj4xMyxhdD0wfENbMl0seGU9ODE5MSZhdCx2ZT1hdD4+PjEzLHFlPTB8Q1szXSxqZT04MTkxJnFlLEFlPXFlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxIZT0wfENbNV0sRGU9ODE5MSZIZSxrZT1IZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LEplPV90'@;
put 'Pj4+MTMsb249MHxDWzddLHl0PTgxOTEmb24sTXQ9b24+Pj4xMyxJdD0wfENbOF0scnQ9ODE5MSZJdCxLZT1JdD4+PjEzLHR0PTB8Q1s5XSxOZT04MTkxJnR0LHV0PXR0Pj4+MTMsSnQ9MHxUWzBdLEx0PTgxOTEmSnQsUHQ9SnQ+Pj4xMyxvaT0wfFRbMV0sZW49ODE5MSZvaSxzbj1vaT4+PjEz'@;
put 'LElpPTB8VFsyXSxkbj04MTkxJklpLGZ0PUlpPj4+MTMsRnI9MHxUWzNdLFp0PTgxOTEmRnIsa3Q9RnI+Pj4xMyxMbj0wfFRbNF0sb3Q9ODE5MSZMbix6dD1Mbj4+PjEzLG5pPTB8VFs1XSxXZT04MTkxJm5pLEF0PW5pPj4+MTMsaXI9MHxUWzZdLGh0PTgxOTEmaXIsRXQ9aXI+Pj4xMyx6bj0w'@;
put 'fFRbN10sYW49ODE5MSZ6bixqdD16bj4+PjEzLGRpPTB8VFs4XSxjbj04MTkxJmRpLGZuPWRpPj4+MTMsRGk9MHxUWzldLFF0PTgxOTEmRGksdG49RGk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgY2E9KFUrKEU9TWF0aC5pbXVsKG5lLEx0'@;
put 'KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxQdCkpK01hdGguaW11bChsZSxMdCl8MCkpPDwxMyl8MDtVPSgoQT1NYXRoLmltdWwobGUsUHQpKSsobT4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoWmUsTHQpLG09KG09TWF0aC5pbXVsKFplLFB0'@;
put 'KSkrTWF0aC5pbXVsKFFlLEx0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KTt2YXIgeGk9KFUrKEU9RStNYXRoLmltdWwobmUsZW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGxlLGVuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHNu'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoeGk+Pj4yNil8MCx4aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsTHQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLEx0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFplLGVuKXwwLG09KG09bStNYXRoLmltdWwoWmUs'@;
put 'c24pfDApK01hdGguaW11bChRZSxlbil8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwO3ZhciB5cj0oVSsoRT1FK01hdGguaW11bChuZSxkbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwobGUsZG4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmlt'@;
put 'dWwobGUsZnQpfDApKyhtPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxMdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoQWUsTHQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoeGUsZW4pfDAsbT0obT1tK01hdGgu'@;
put 'aW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLGVuKXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChaZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKFplLGZ0KXwwKStNYXRoLmltdWwoUWUsZG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MDt2YXIgR249KFUrKEU9RStN'@;
put 'YXRoLmltdWwobmUsWnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxrdCl8MCkrTWF0aC5pbXVsKGxlLFp0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGt0KXwwKSsobT4+PjEzKXwwKSsoR24+Pj4yNil8MCxHbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUs'@;
put 'THQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLEx0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLGVuKXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChBZSxlbil8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRo'@;
put 'LmltdWwoeGUsZG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGRuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChaZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKFplLGt0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11'@;
put 'bChRZSxrdCl8MDt2YXIgS2k9KFUrKEU9RStNYXRoLmltdWwobmUsb3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGxlLG90KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHp0KXwwKSsobT4+PjEzKXwwKSsoS2k+Pj4yNil8MCxL'@;
put 'aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoRGUsTHQpLG09KG09TWF0aC5pbXVsKERlLFB0KSkrTWF0aC5pbXVsKGtlLEx0KXwwLEE9TWF0aC5pbXVsKGtlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLGVuKXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxlbil8MCxBPUEr'@;
put 'TWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsZG4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGRuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGt0KXwwKStNYXRo'@;
put 'LmltdWwodmUsWnQpfDAsQT1BK01hdGguaW11bCh2ZSxrdCl8MCxFPUUrTWF0aC5pbXVsKFplLG90KXwwLG09KG09bStNYXRoLmltdWwoWmUsenQpfDApK01hdGguaW11bChRZSxvdCl8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwO3ZhciBKcj0oVSsoRT1FK01hdGguaW11bChuZSxXZSl8MCl8'@;
put 'MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwobGUsV2UpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsQXQpfDApKyhtPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2MyxFPU1hdGguaW11bChudCxMdCksbT0obT1NYXRoLmltdWwo'@;
put 'bnQsUHQpKStNYXRoLmltdWwoSmUsTHQpfDAsQT1NYXRoLmltdWwoSmUsUHQpLEU9RStNYXRoLmltdWwoRGUsZW4pfDAsbT0obT1tK01hdGguaW11bChEZSxzbil8MCkrTWF0aC5pbXVsKGtlLGVuKXwwLEE9QStNYXRoLmltdWwoa2Usc24pfDAsRT1FK01hdGguaW11bChSZSxkbil8MCxtPSht'@;
put 'PW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsZG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFp0KXwwLG09KG09bStNYXRoLmltdWwoamUsa3QpfDApK01hdGguaW11bChBZSxadCl8MCxBPUErTWF0aC5pbXVsKEFlLGt0KXwwLEU9RStNYXRo'@;
put 'LmltdWwoeGUsb3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLG90KXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChaZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFplLEF0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11'@;
put 'bChRZSxBdCl8MDt2YXIgUXI9KFUrKEU9RStNYXRoLmltdWwobmUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxFdCl8MCkrTWF0aC5pbXVsKGxlLGh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEV0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxR'@;
put 'ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsTHQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LEx0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LGVuKXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChKZSxlbil8MCxBPUEr'@;
put 'TWF0aC5pbXVsKEplLHNuKXwwLEU9RStNYXRoLmltdWwoRGUsZG4pfDAsbT0obT1tK01hdGguaW11bChEZSxmdCl8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLEE9QStNYXRoLmltdWwoa2UsZnQpfDAsRT1FK01hdGguaW11bChSZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGt0KXwwKStNYXRo'@;
put 'LmltdWwoSWUsWnQpfDAsQT1BK01hdGguaW11bChJZSxrdCl8MCxFPUUrTWF0aC5pbXVsKGplLG90KXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChBZSxvdCl8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGgu'@;
put 'aW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChaZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFplLEV0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSxFdCl8MDt2YXIgTmk9KFUrKEU9RStN'@;
put 'YXRoLmltdWwobmUsYW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxqdCl8MCkrTWF0aC5pbXVsKGxlLGFuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGp0KXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQs'@;
put 'THQpLG09KG09TWF0aC5pbXVsKHJ0LFB0KSkrTWF0aC5pbXVsKEtlLEx0KXwwLEE9TWF0aC5pbXVsKEtlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LGVuKXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxlbil8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRo'@;
put 'LmltdWwobnQsZG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKEplLGRuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDAsRT1FK01hdGguaW11bChEZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLGt0KXwwKStNYXRoLmltdWwoa2UsWnQpfDAsQT1BK01hdGguaW11'@;
put 'bChrZSxrdCl8MCxFPUUrTWF0aC5pbXVsKFJlLG90KXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxvdCl8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKEFl'@;
put 'LFdlKXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEV0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSxFdCl8MCxFPUUrTWF0aC5pbXVsKFplLGFuKXwwLG09KG09bStNYXRoLmltdWwoWmUs'@;
put 'anQpfDApK01hdGguaW11bChRZSxhbil8MCxBPUErTWF0aC5pbXVsKFFlLGp0KXwwO3ZhciBIaT0oVSsoRT1FK01hdGguaW11bChuZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZuKXwwKStNYXRoLmltdWwobGUsY24pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmlt'@;
put 'dWwobGUsZm4pfDApKyhtPj4+MTMpfDApKyhIaT4+PjI2KXwwLEhpJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxMdCksbT0obT1NYXRoLmltdWwoTmUsUHQpKStNYXRoLmltdWwodXQsTHQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwocnQsZW4pfDAsbT0obT1tK01hdGgu'@;
put 'aW11bChydCxzbil8MCkrTWF0aC5pbXVsKEtlLGVuKXwwLEE9QStNYXRoLmltdWwoS2Usc24pfDAsRT1FK01hdGguaW11bCh5dCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsZG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50'@;
put 'LFp0KXwwLG09KG09bStNYXRoLmltdWwobnQsa3QpfDApK01hdGguaW11bChKZSxadCl8MCxBPUErTWF0aC5pbXVsKEplLGt0KXwwLEU9RStNYXRoLmltdWwoRGUsb3QpfDAsbT0obT1tK01hdGguaW11bChEZSx6dCl8MCkrTWF0aC5pbXVsKGtlLG90KXwwLEE9QStNYXRoLmltdWwoa2UsenQp'@;
put 'fDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUsRXQpfDApK01hdGguaW11bChBZSxodCl8MCxB'@;
put 'PUErTWF0aC5pbXVsKEFlLEV0KXwwLEU9RStNYXRoLmltdWwoeGUsYW4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxqdCl8MCkrTWF0aC5pbXVsKHZlLGFuKXwwLEE9QStNYXRoLmltdWwodmUsanQpfDAsRT1FK01hdGguaW11bChaZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFplLGZuKXwwKStN'@;
put 'YXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgSWE9KFUrKEU9RStNYXRoLmltdWwobmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5pbXVsKGxlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHRu'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoSWE+Pj4yNil8MCxJYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsZW4pLG09KG09TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LGVuKXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKHJ0LGRuKXwwLG09KG09bStNYXRoLmltdWwocnQs'@;
put 'ZnQpfDApK01hdGguaW11bChLZSxkbil8MCxBPUErTWF0aC5pbXVsKEtlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsWnQpfDAsbT0obT1tK01hdGguaW11bCh5dCxrdCl8MCkrTWF0aC5pbXVsKE10LFp0KXwwLEE9QStNYXRoLmltdWwoTXQsa3QpfDAsRT1FK01hdGguaW11bChudCxvdCl8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoSmUsb3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8MCxFPUUrTWF0aC5pbXVsKERlLFdlKXwwLG09KG09bStNYXRoLmltdWwoRGUsQXQpfDApK01hdGguaW11bChrZSxXZSl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStN'@;
put 'YXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSxFdCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUsRXQpfDAsRT1FK01hdGguaW11bChqZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGp0KXwwKStNYXRoLmltdWwoQWUsYW4pfDAsQT1BK01hdGgu'@;
put 'aW11bChBZSxqdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBQcj0oVSsoRT1FK01hdGguaW11bChaZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p'@;
put 'bXVsKFplLHRuKXwwKStNYXRoLmltdWwoUWUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoUWUsdG4pfDApKyhtPj4+MTMpfDApKyhQcj4+PjI2KXwwLFByJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxkbiksbT0obT1NYXRoLmltdWwoTmUsZnQpKStNYXRoLmltdWwodXQsZG4p'@;
put 'fDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwocnQsWnQpfDAsbT0obT1tK01hdGguaW11bChydCxrdCl8MCkrTWF0aC5pbXVsKEtlLFp0KXwwLEE9QStNYXRoLmltdWwoS2Usa3QpfDAsRT1FK01hdGguaW11bCh5dCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStN'@;
put 'YXRoLmltdWwoTXQsb3QpfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwLEU9RStNYXRoLmltdWwoRGUsaHQpfDAsbT0obT1tK01h'@;
put 'dGguaW11bChEZSxFdCl8MCkrTWF0aC5pbXVsKGtlLGh0KXwwLEE9QStNYXRoLmltdWwoa2UsRXQpfDAsRT1FK01hdGguaW11bChSZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGp0KXwwKStNYXRoLmltdWwoSWUsYW4pfDAsQT1BK01hdGguaW11bChJZSxqdCl8MCxFPUUrTWF0aC5pbXVs'@;
put 'KGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBZaT0oVSsoRT1FK01hdGguaW11bCh4ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLHRuKXwwKStNYXRoLmltdWwodmUs'@;
put 'UXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwodmUsdG4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxadCksbT0obT1NYXRoLmltdWwoTmUsa3QpKStNYXRoLmltdWwodXQsWnQpfDAsQT1NYXRoLmltdWwodXQsa3QpLEU9RStN'@;
put 'YXRoLmltdWwocnQsb3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKEtlLG90KXwwLEE9QStNYXRoLmltdWwoS2UsenQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGgu'@;
put 'aW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQsRXQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLEV0KXwwLEU9RStNYXRoLmltdWwoRGUsYW4pfDAsbT0obT1tK01hdGguaW11bChEZSxqdCl8MCkrTWF0aC5pbXVs'@;
put 'KGtlLGFuKXwwLEE9QStNYXRoLmltdWwoa2UsanQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgZmE9KFUrKEU9RStNYXRoLmltdWwoamUsUXQpfDApfDApKygo'@;
put 'ODE5MSYobT0obT1tK01hdGguaW11bChqZSx0bil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEFlLHRuKXwwKSsobT4+PjEzKXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsb3QpLG09KG09TWF0aC5pbXVsKE5lLHp0'@;
put 'KSkrTWF0aC5pbXVsKHV0LG90KXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKHJ0LFdlKXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChLZSxXZSl8MCxBPUErTWF0aC5pbXVsKEtlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01h'@;
put 'dGguaW11bCh5dCxFdCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQsRXQpfDAsRT1FK01hdGguaW11bChudCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGp0KXwwKStNYXRoLmltdWwoSmUsYW4pfDAsQT1BK01hdGguaW11bChKZSxqdCl8MCxFPUUrTWF0aC5pbXVs'@;
put 'KERlLGNuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSxjbil8MCxBPUErTWF0aC5pbXVsKGtlLGZuKXwwO3ZhciBucj0oVSsoRT1FK01hdGguaW11bChSZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLHRuKXwwKStNYXRoLmltdWwoSWUs'@;
put 'UXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSWUsdG4pfDApKyhtPj4+MTMpfDApKyhucj4+PjI2KXwwLG5yJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXZSksbT0obT1NYXRoLmltdWwoTmUsQXQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStN'@;
put 'YXRoLmltdWwocnQsaHQpfDAsbT0obT1tK01hdGguaW11bChydCxFdCl8MCkrTWF0aC5pbXVsKEtlLGh0KXwwLEE9QStNYXRoLmltdWwoS2UsRXQpfDAsRT1FK01hdGguaW11bCh5dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGp0KXwwKStNYXRoLmltdWwoTXQsYW4pfDAsQT1BK01hdGgu'@;
put 'aW11bChNdCxqdCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBvYT0oVSsoRT1FK01hdGguaW11bChEZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p'@;
put 'bXVsKERlLHRuKXwwKStNYXRoLmltdWwoa2UsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoa2UsdG4pfDApKyhtPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxodCksbT0obT1NYXRoLmltdWwoTmUsRXQpKStNYXRoLmltdWwodXQsaHQp'@;
put 'fDAsQT1NYXRoLmltdWwodXQsRXQpLEU9RStNYXRoLmltdWwocnQsYW4pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKEtlLGFuKXwwLEE9QStNYXRoLmltdWwoS2UsanQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStN'@;
put 'YXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgX2E9KFUrKEU9RStNYXRoLmltdWwobnQsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCx0bil8MCkrTWF0aC5pbXVsKEplLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEplLHRu'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoX2E+Pj4yNil8MCxfYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsYW4pLG09KG09TWF0aC5pbXVsKE5lLGp0KSkrTWF0aC5pbXVsKHV0LGFuKXwwLEE9TWF0aC5pbXVsKHV0LGp0KSxFPUUrTWF0aC5pbXVsKHJ0LGNuKXwwLG09KG09bStNYXRoLmltdWwocnQs'@;
put 'Zm4pfDApK01hdGguaW11bChLZSxjbil8MCxBPUErTWF0aC5pbXVsKEtlLGZuKXwwO3ZhciBPYT0oVSsoRT1FK01hdGguaW11bCh5dCxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LHRuKXwwKStNYXRoLmltdWwoTXQsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmlt'@;
put 'dWwoTXQsdG4pfDApKyhtPj4+MTMpfDApKyhPYT4+PjI2KXwwLE9hJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxjbiksbT0obT1NYXRoLmltdWwoTmUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBOYT0oVSsoRT1FK01hdGguaW11bChydCxRdCl8MCl8'@;
put 'MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LHRuKXwwKStNYXRoLmltdWwoS2UsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoS2UsdG4pfDApKyhtPj4+MTMpfDApKyhOYT4+PjI2KXwwLE5hJj02NzEwODg2Mzt2YXIgZWk9KFUrKEU9TWF0aC5pbXVsKE5lLFF0KSl8MCkr'@;
put 'KCg4MTkxJihtPShtPU1hdGguaW11bChOZSx0bikpK01hdGguaW11bCh1dCxRdCl8MCkpPDwxMyl8MDtyZXR1cm4gVT0oKEE9TWF0aC5pbXVsKHV0LHRuKSkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLFZbMF09Y2EsVlsxXT14aSxWWzJdPXlyLFZbM109R24sVls0XT1L'@;
put 'aSxWWzVdPUpyLFZbNl09UXIsVls3XT1OaSxWWzhdPUhpLFZbOV09SWEsVlsxMF09UHIsVlsxMV09WWksVlsxMl09ZmEsVlsxM109bnIsVlsxNF09b2EsVlsxNV09X2EsVlsxNl09T2EsVlsxN109TmEsVlsxOF09ZWksMCE9PVUmJihWWzE5XT1VLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIFEo'@;
put 'eixnLHkpe3JldHVybihuZXcgcSkubXVscCh6LGcseSl9ZnVuY3Rpb24gcSh6LGcpe3RoaXMueD16LHRoaXMueT1nfU1hdGguaW11bHx8KFo9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5s'@;
put 'ZW5ndGgmJjEwPT09Zy5sZW5ndGg/Wih0aGlzLGcseSk6Qzw2Mz9XKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gWCh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmUseS5sZW5ndGg9ei5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3Ro'@;
put 'LTE7VCsrKXt2YXIgVj1DO0M9MDtmb3IodmFyIFU9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtei5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBsZT0oMHx6LndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLHdlPTY3MTA4ODYzJmxlO1U9NjcxMDg4'@;
put 'NjMmKHdlPXdlK1V8MCksQys9KFY9KFY9VisobGUvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsViY9NjcxMDg4NjN9eS53b3Jkc1tUXT1VLHg9VixWPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOlEodGhpcyxnLHkp'@;
put 'LHh9LHEucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRoaXMucmV2QmluKEMseCxnKTtyZXR1cm4geX0scS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcs'@;
put 'eSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LHEucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyx5LHgsQyxULFYpe2Zvcih2YXIgVT0wO1U8VjtVKyspQ1tVXT15W2dbVV1dLFRb'@;
put 'VV09eFtnW1VdXX0scS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXt0aGlzLnBlcm11dGUoVixnLHkseCxDLFQpO2Zvcih2YXIgVT0xO1U8VDtVPDw9MSlmb3IodmFyIEU9VTw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9F'@;
put 'KSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLGxlPUEsd2U9MDt3ZTxVO3dlKyspe3ZhciBaZT14W2FlK3dlXSxRZT1DW2FlK3dlXSxhdD14W2FlK3dlK1VdLHhlPUNbYWUrd2UrVV0sdmU9bmUqYXQtbGUqeGU7eGU9bmUqeGUrbGUqYXQseFthZSt3ZV09WmUrKGF0PXZlKSxDW2FlK3dl'@;
put 'XT1RZSt4ZSx4W2FlK3dlK1VdPVplLWF0LENbYWUrd2UrVV09UWUteGUsd2UhPT1FJiYodmU9bSpuZS1BKmxlLGxlPW0qbGUrQSpuZSxuZT12ZSl9fSxxLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8y'@;
put 'fDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30scS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9Z1tDXTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlb'@;
put 'eC1DLTFdPS1UfX0scS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFdL3kpK01hdGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8w'@;
put 'OlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30scS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxWPTA7Vjx5O1YrKyl4WzIqVl09ODE5MSYoVCs9MHxnW1ZdKSx4WzIqVisxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihWPTIqeTtWPEM7KytWKXhb'@;
put 'Vl09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxxLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5fSxxLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4x'@;
put 'M2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLFY9dGhpcy5zdHViKEMpLFU9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksbGU9eC53b3JkcztsZS5sZW5n'@;
put 'dGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxVLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oVSxWLEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsVixhZSxuZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3Zh'@;
put 'ciBaZT1FW3dlXSphZVt3ZV0tbVt3ZV0qbmVbd2VdO21bd2VdPUVbd2VdKm5lW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09WmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sbGUsVixDLFQpLHRoaXMuY29uanVnYXRlKGxlLFYsQyksdGhpcy5ub3JtYWxp'@;
put 'emUxM2IobGUsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro'@;
put 'K2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxRKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2'@;
put 'NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcp'@;
put 'e3ZhciB5PWZ1bmN0aW9uIEIoeil7Zm9yKHZhciBnPW5ldyBBcnJheSh6LmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oei53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtm'@;
put 'b3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49'@;
put 'ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgVj0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBVPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRz'@;
put 'W1RdPSgwfHRoaXMud29yZHNbVF0pLVU8PHl8VixWPVU+Pj4yNi15fVYmJih0aGlzLndvcmRzW1RdPVYsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMu'@;
put 'd29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgi'@;
put 'bnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsVj1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksVT02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPVYsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208VjttKysp'@;
put 'RS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPVZ9aWYoMCE9PVYpaWYodGhpcy5sZW5ndGg+Vilmb3IodGhpcy5sZW5ndGgtPVYsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK1ZdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3Ro'@;
put 'PTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZVfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMu'@;
put 'bGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNo'@;
put 'cm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hd'@;
put 'JjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMu'@;
put 'bGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8'@;
put 'dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVu'@;
put 'Y3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1'@;
put 'cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIg'@;
put 'eT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5w'@;
put 'cm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMo'@;
put 'KX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIFYsVT0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe1Y9KDB8dGhpcy53b3Jkc1tUK3hdKStVO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7VT0oKFYtPTY3'@;
put 'MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlZ9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKVU9KFY9KDB8dGhpcy53b3Jkc1tUK3hdKStVKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlY7aWYoMD09PVUpcmV0dXJuIHRoaXMuc3Ry'@;
put 'aXAoKTtmb3IocCgtMT09PVUpLFU9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspVT0oVj0tKDB8dGhpcy53b3Jkc1tUXSkrVSk+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmVjtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rp'@;
put 'b24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsVj0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKFYpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtp'@;
put 'ZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9'@;
put 'YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBsZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKGxlPU1hdGgubWluKGxlL1Z8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwo'@;
put 'VCxsZSxuZSk7MCE9PUMubmVnYXRpdmU7KWxlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1sZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5p'@;
put 'dXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhW'@;
put 'PXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KFY9dGhpcy5k'@;
put 'aXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOlYubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYm'@;
put 'VC5pc3ViKGcpKSx7ZGl2OlYuZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6'@;
put 'bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULFZ9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'dGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3Rv'@;
put 'dHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxWPXguY21wKEMpO3JldHVy'@;
put 'biBWPDB8fDE9PT1UJiYwPT09Vj95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7'@;
put 'Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMu'@;
put 'd29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3Zh'@;
put 'ciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9bmV3IHcoMCksVT1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytF'@;
put 'O2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlh'@;
put 'ZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIGxlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZsZTwyNjsrK2xlLHdlPDw9MSk7aWYobGU+MClmb3IoeC5pdXNocm4obGUpO2xlLS0gPjA7KShWLmlzT2RkKCl8fFUuaXNPZGQoKSkmJihWLmlhZGQobSks'@;
put 'VS5pc3ViKEEpKSxWLml1c2hybigxKSxVLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihWKSxULmlzdWIoVSkpOih4LmlzdWIoeSksVi5pc3ViKEMpLFUuaXN1YihUKSl9cmV0dXJue2E6VixiOlUsZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1'@;
put 'bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNt'@;
put 'cG4oMSk+MDspe2Zvcih2YXIgVT0wLEU9MTshKHkud29yZHNbMF0mRSkmJlU8MjY7KytVLEU8PD0xKTtpZihVPjApZm9yKHkuaXVzaHJuKFUpO1UtLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoViksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20s'@;
put 'QTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChWKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTww'@;
put 'JiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0w'@;
put 'O2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIFY9eTt5PXgs'@;
put 'eD1WfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'ISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51'@;
put 'bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsVj14OzAhPT1UJiZWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9MHx0aGlz'@;
put 'LndvcmRzW1ZdO1Q9KFUrPVQpPj4+MjYsdGhpcy53b3Jkc1tWXT1VJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW1ZdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMu'@;
put 'd29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1n'@;
put 'KSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09'@;
put 'Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5s'@;
put 'ZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVy'@;
put 'biB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5w'@;
put 'cm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5s'@;
put 'dGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBTZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhp'@;
put 'cy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1'@;
put 'Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEg'@;
put 'bnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3Rv'@;
put 'dHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29y'@;
put 'a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnBy'@;
put 'b3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29y'@;
put 'a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo'@;
put 'aXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk'@;
put 'LnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJl'@;
put 'ZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi'@;
put 'KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlz'@;
put 'LGcpfTt2YXIgdGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZSh6LGcpe3RoaXMubmFtZT16LHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3Vi'@;
put 'KHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gc2UoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlz'@;
put 'LCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9'@;
put 'ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKHope2lmKCJzdHJpbmciPT10eXBlb2Ygeil7dmFyIGc9dy5fcHJpbWUoeik7dGhp'@;
put 'cy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKHouZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoeil7U2UuY2FsbCh0aGlzLHopLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hp'@;
put 'ZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0'@;
put 'aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXko'@;
put 'TWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIg'@;
put 'Qz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1'@;
put 'c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sTihzZSxpZSksc2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1Qr'@;
put 'Kyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFY9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1WJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIFU9MHxnLndv'@;
put 'cmRzW1RdO2cud29yZHNbVC0xMF09KFUmeCk8PDR8Vj4+PjIyLFY9VX1nLndvcmRzW1QtMTBdPVY+Pj49MjIsZy5sZW5ndGgtPTA9PT1WJiZnLmxlbmd0aD4xMD8xMDo5fSxzZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3Ro'@;
put 'KzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0t'@;
put 'LDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxOKGdlLGllKSxOKF9lLGllKSxOKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4'@;
put 'NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZih0ZVtnXSlyZXR1cm4gdGVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyBzZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1u'@;
put 'ZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiB0ZVtnXT15LHl9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0'@;
put 'aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0'@;
put 'aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFy'@;
put 'IHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJngu'@;
put 'aXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5'@;
put 'KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sU2UucHJvdG90eXBl'@;
put 'LmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxTZS5wcm90b3R5cGUuaXNxcj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMu'@;
put 'bS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3Ao'@;
put 'IUMuaXNaZXJvKCkpO3ZhciBWPW5ldyB3KDEpLnRvUmVkKHRoaXMpLFU9Vi5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKFUpOyltLnJlZElB'@;
put 'ZGQoVSk7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLGxlPVQ7MCE9PW5lLmNtcChWKTspe2Zvcih2YXIgd2U9bmUsWmU9MDswIT09d2UuY21wKFYpO1plKyspd2U9d2UucmVkU3FyKCk7cChaZTxsZSk7'@;
put 'dmFyIFFlPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKGxlLVplLTEpKTthZT1hZS5yZWRNdWwoUWUpLEE9UWUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLGxlPVplfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1'@;
put 'cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJu'@;
put 'IGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBWPUNbMF0sVT0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYo'@;
put 'bT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7ViE9PUNbMF0mJihWPXRoaXMuc3FyKFYpKSwwIT09bmV8fDAhPT1VPyhVPDw9MSxVfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKFY9'@;
put 'dGhpcy5tdWwoVixDW1VdKSxFPTAsVT0wKSk6RT0wfW09MjZ9cmV0dXJuIFZ9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7'@;
put 'dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IHplKGcpfSxOKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3Rv'@;
put 'dHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5s'@;
put 'ZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhp'@;
put 'cy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5t'@;
put 'YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhp'@;
put 'cy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sMzQ4MjooY2UsSixiKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgRD1iKDU3MTcpLF89YigyMzE4KSxwPWIoOTc4NSksTj1iKDkwNzIpLHc9YigxMDI3KTtmdW5jdGlvbiBGKEgpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUh9RChGLHcpLEYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSCl7dGhpcy5faGFzaC51cGRhdGUo'@;
put 'SCl9LEYucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxjZS5leHBvcnRzPWZ1bmN0aW9uKFIpe3JldHVybiJtZDUiPT09KFI9Ui50b0xvd2VyQ2FzZSgpKT9uZXcgXzoicm1kMTYwIj09PVJ8fCJyaXBlbWQxNjAiPT09Uj9uZXcgcDpuZXcg'@;
put 'RihOKFIpKX19LDgwMjg6KGNlLEosYik9Pnt2YXIgRD1iKDIzMTgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuKG5ldyBEKS51cGRhdGUoXykuZGlnZXN0KCl9fSw4MzU1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTcxNyksXz1iKDEwMzEpLHA9YigxMDI3KSxOPWIo'@;
put 'OTUwOSkuQnVmZmVyLHc9Yig4MDI4KSxGPWIoOTc4NSksSD1iKDkwNzIpLFI9Ti5hbGxvYygxMjgpO2Z1bmN0aW9uIGooUCxMKXtwLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBMJiYoTD1OLmZyb20oTCkpO3ZhciBZPSJzaGE1MTIiPT09UHx8InNoYTM4NCI9PT1QPzEy'@;
put 'ODo2NDt0aGlzLl9hbGc9UCx0aGlzLl9rZXk9TCxMLmxlbmd0aD5ZP0w9KCJybWQxNjAiPT09UD9uZXcgRjpIKFApKS51cGRhdGUoTCkuZGlnZXN0KCk6TC5sZW5ndGg8WSYmKEw9Ti5jb25jYXQoW0wsUl0sWSkpO2Zvcih2YXIgVz10aGlzLl9pcGFkPU4uYWxsb2NVbnNhZmUoWSksWj10aGlz'@;
put 'Ll9vcGFkPU4uYWxsb2NVbnNhZmUoWSksWD0wO1g8WTtYKyspV1tYXT01NF5MW1hdLFpbWF09OTJeTFtYXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09UD9uZXcgRjpIKFApLHRoaXMuX2hhc2gudXBkYXRlKFcpfUQoaixwKSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3RoaXMuX2hh'@;
put 'c2gudXBkYXRlKFApfSxqLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgRjpIKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoUCkuZGlnZXN0KCl9LGNlLmV4cG9y'@;
put 'dHM9ZnVuY3Rpb24oTCxZKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgaigicm1kMTYwIixZKToibWQ1Ij09PUw/bmV3IF8odyxZKTpuZXcgaihMLFkpfX0sMTAzMTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU3MTcp'@;
put 'LF89Yig5NTA5KS5CdWZmZXIscD1iKDEwMjcpLE49Xy5hbGxvYygxMjgpLHc9NjQ7ZnVuY3Rpb24gRihILFIpe3AuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIFImJihSPV8uZnJvbShSKSksdGhpcy5fYWxnPUgsdGhpcy5fa2V5PVIsUi5sZW5ndGg+dz9SPUgoUik6Ui5s'@;
put 'ZW5ndGg8dyYmKFI9Xy5jb25jYXQoW1IsTl0sdykpO2Zvcih2YXIgaj10aGlzLl9pcGFkPV8uYWxsb2NVbnNhZmUodyksUD10aGlzLl9vcGFkPV8uYWxsb2NVbnNhZmUodyksTD0wO0w8dztMKyspaltMXT01NF5SW0xdLFBbTF09OTJeUltMXTt0aGlzLl9oYXNoPVtqXX1EKEYscCksRi5wcm90'@;
put 'b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihIKXt0aGlzLl9oYXNoLnB1c2goSCl9LEYucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBIPXRoaXMuX2FsZyhfLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhfLmNvbmNhdChbdGhpcy5fb3BhZCxIXSkpfSxjZS5leHBv'@;
put 'cnRzPUZ9LDU4MzU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Si5yYW5kb21CeXRlcz1KLnJuZz1KLnBzZXVkb1JhbmRvbUJ5dGVzPUoucHJuZz1iKDE3OTgpLEouY3JlYXRlSGFzaD1KLkhhc2g9YigzNDgyKSxKLmNyZWF0ZUhtYWM9Si5IbWFjPWIoODM1NSk7dmFyIEQ9Yig2MDQyKSxfPU9i'@;
put 'amVjdC5rZXlzKEQpLHA9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KF8pO0ouZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHB9O3ZhciBOPWIoNTYzMik7Si5wYmtkZjI9Ti5wYmtkZjIsSi5wYmtkZjJTeW5jPU4u'@;
put 'cGJrZGYyU3luYzt2YXIgdz1iKDM2MTQpO0ouQ2lwaGVyPXcuQ2lwaGVyLEouY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLEouQ2lwaGVyaXY9dy5DaXBoZXJpdixKLmNyZWF0ZUNpcGhlcml2PXcuY3JlYXRlQ2lwaGVyaXYsSi5EZWNpcGhlcj13LkRlY2lwaGVyLEouY3JlYXRlRGVjaXBo'@;
put 'ZXI9dy5jcmVhdGVEZWNpcGhlcixKLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LEouY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsSi5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxKLmxpc3RDaXBoZXJzPXcubGlzdENpcGhlcnM7dmFyIEY9YigyNjA3KTtKLkRpZmZpZUhlbGxt'@;
put 'YW5Hcm91cD1GLkRpZmZpZUhlbGxtYW5Hcm91cCxKLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1GLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxKLmdldERpZmZpZUhlbGxtYW49Ri5nZXREaWZmaWVIZWxsbWFuLEouY3JlYXRlRGlmZmllSGVsbG1hbj1GLmNyZWF0ZURpZmZpZUhlbGxtYW4s'@;
put 'Si5EaWZmaWVIZWxsbWFuPUYuRGlmZmllSGVsbG1hbjt2YXIgSD1iKDQ3NDMpO0ouY3JlYXRlU2lnbj1ILmNyZWF0ZVNpZ24sSi5TaWduPUguU2lnbixKLmNyZWF0ZVZlcmlmeT1ILmNyZWF0ZVZlcmlmeSxKLlZlcmlmeT1ILlZlcmlmeSxKLmNyZWF0ZUVDREg9Yig2MzkzKTt2YXIgUj1iKDc5'@;
put 'MDApO0oucHVibGljRW5jcnlwdD1SLnB1YmxpY0VuY3J5cHQsSi5wcml2YXRlRW5jcnlwdD1SLnByaXZhdGVFbmNyeXB0LEoucHVibGljRGVjcnlwdD1SLnB1YmxpY0RlY3J5cHQsSi5wcml2YXRlRGVjcnlwdD1SLnByaXZhdGVEZWNyeXB0O3ZhciBqPWIoNzk2Myk7Si5yYW5kb21GaWxsPWou'@;
put 'cmFuZG9tRmlsbCxKLnJhbmRvbUZpbGxTeW5jPWoucmFuZG9tRmlsbFN5bmMsSi5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3Rz'@;
put 'XG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxKLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9H'@;
put 'RU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2'@;
put 'LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDIyOTY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NDI5KSxfPWIoMzQ2NCkscD1iKDQ0NTMpLE49Yig3Mjk2KTtj'@;
put 'ZS5leHBvcnRzPWZ1bmN0aW9uKEYsSCxSKXtpZighRnx8Im9iamVjdCIhPXR5cGVvZiBGJiYiZnVuY3Rpb24iIT10eXBlb2YgRil0aHJvdyBuZXcgcCgiYG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAiKTtpZigic3RyaW5nIiE9dHlwZW9mIEgmJiJzeW1ib2wiIT10eXBl'@;
put 'b2YgSCl0aHJvdyBuZXcgcCgiYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MyYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzNdJiZudWxsIT09YXJndW1lbnRzWzNdKXRocm93IG5ldyBwKCJgbm9uRW51bWVyYWJsZWAs'@;
put 'IGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD40JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNF0mJm51bGwhPT1hcmd1bWVudHNbNF0pdGhyb3cgbmV3IHAoImBub25Xcml0YWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJl'@;
put 'IGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD41JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNV0mJm51bGwhPT1hcmd1bWVudHNbNV0pdGhyb3cgbmV3IHAoImBub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVs'@;
put 'bCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NiYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzZdKXRocm93IG5ldyBwKCJgbG9vc2VgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4iKTt2YXIgaj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOm51bGwsUD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOm51bGwsTD1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOm51bGwsWT1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSxCPSEhTiYmTihGLEgpO2lmKEQpRChGLEgse2NvbmZpZ3VyYWJsZTpudWxsPT09TCYmQj9CLmNvbmZpZ3Vy'@;
put 'YWJsZTohTCxlbnVtZXJhYmxlOm51bGw9PT1qJiZCP0IuZW51bWVyYWJsZTohaix2YWx1ZTpSLHdyaXRhYmxlOm51bGw9PT1QJiZCP0Iud3JpdGFibGU6IVB9KTtlbHNle2lmKCFZJiYoanx8UHx8TCkpdGhyb3cgbmV3IF8oIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZp'@;
put 'bmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuIik7RltIXT1SfX19LDQyODk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyMjE1KSxfPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10'@;
put 'eXBlb2YgU3ltYm9sKCJmb28iKSxwPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsTj1BcnJheS5wcm90b3R5cGUuY29uY2F0LHc9YigyMjk2KSxIPWIoMTA0NCkoKSxSPWZ1bmN0aW9uKFAsTCxZLEIpe2lmKEwgaW4gUClpZighMD09PUIpe2lmKFBbTF09PT1ZKXJldHVybn1lbHNlIGlmKCFm'@;
put 'dW5jdGlvbihQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUCYmIltvYmplY3QgRnVuY3Rpb25dIj09PXAuY2FsbChQKX0oQil8fCFCKCkpcmV0dXJuO0g/dyhQLEwsWSwhMCk6dyhQLEwsWSl9LGo9ZnVuY3Rpb24oUCxMKXt2YXIgWT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJd'@;
put 'Ont9LEI9RChMKTtfJiYoQj1OLmNhbGwoQixPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEwpKSk7Zm9yKHZhciBXPTA7VzxCLmxlbmd0aDtXKz0xKVIoUCxCW1ddLExbQltXXV0sWVtCW1ddXSl9O2ouc3VwcG9ydHNEZXNjcmlwdG9ycz0hIUgsY2UuZXhwb3J0cz1qfSw1MjUxOihjZSxK'@;
put 'LGIpPT57InVzZSBzdHJpY3QiO0oudXRpbHM9YigxMjc4KSxKLkNpcGhlcj1iKDU3NTYpLEouREVTPWIoNzc4KSxKLkNCQz1iKDkwNTEpLEouRURFPWIoNjUxKX0sOTA1MTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk3NDYpLF89Yig1NzE3KSxwPXt9O2Z1bmN0aW9uIE4oRil7'@;
put 'RC5lcXVhbChGLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgSD0wO0g8dGhpcy5pdi5sZW5ndGg7SCsrKXRoaXMuaXZbSF09RltIXX1KLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoRil7ZnVuY3Rpb24gSChMKXtGLmNhbGwodGhpcyxM'@;
put 'KSx0aGlzLl9jYmNJbml0KCl9XyhILEYpO2Zvcih2YXIgUj1PYmplY3Qua2V5cyhwKSxqPTA7ajxSLmxlbmd0aDtqKyspe3ZhciBQPVJbal07SC5wcm90b3R5cGVbUF09cFtQXX1yZXR1cm4gSC5jcmVhdGU9ZnVuY3Rpb24oWSl7cmV0dXJuIG5ldyBIKFkpfSxIfSxwLl9jYmNJbml0PWZ1bmN0'@;
put 'aW9uKCl7dmFyIEg9bmV3IE4odGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1IfSxwLl91cGRhdGU9ZnVuY3Rpb24oSCxSLGosUCl7dmFyIFk9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLEI9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBl'@;
put 'KXtmb3IodmFyIFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylCW1ddXj1IW1IrV107Zm9yKFkuX3VwZGF0ZS5jYWxsKHRoaXMsQiwwLGosUCksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKUJbV109altQK1ddfWVsc2V7Zm9yKFkuX3VwZGF0ZS5jYWxsKHRoaXMsSCxSLGosUCksVz0wO1c8dGhp'@;
put 'cy5ibG9ja1NpemU7VysrKWpbUCtXXV49QltXXTtmb3IoVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKUJbV109SFtSK1ddfX19LDU3NTY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5NzQ2KTtmdW5jdGlvbiBfKHApe3RoaXMub3B0aW9ucz1wLHRoaXMudHlwZT10aGlzLm9wdGlv'@;
put 'bnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09cC5wYWRkaW5nfWNlLmV4cG9ydHM9XyxfLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30s'@;
put 'Xy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE4pe3JldHVybiAwPT09Ti5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoTik6dGhpcy5fdXBkYXRlRW5jcnlwdChOKX0sXy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihOLHcpe2Zvcih2YXIg'@;
put 'Rj1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsTi5sZW5ndGgtdyksSD0wO0g8RjtIKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrSF09Tlt3K0hdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9RixGfSxfLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rp'@;
put 'b24oTix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsTix3KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxfLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihOKXt2YXIgdz0wLEY9MCxSPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK04ubGVu'@;
put 'Z3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKE4sdyksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihGKz10aGlzLl9mbHVzaEJ1ZmZlcihSLEYpKSk7Zm9yKHZhciBqPU4ubGVuZ3Ro'@;
put 'LShOLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PGo7dys9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKE4sdyxSLEYpLEYrPXRoaXMuYmxvY2tTaXplO2Zvcig7dzxOLmxlbmd0aDt3KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09Tlt3XTtyZXR1'@;
put 'cm4gUn0sXy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oTil7Zm9yKHZhciB3PTAsRj0wLEg9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitOLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsUj1uZXcgQXJyYXkoSCp0aGlzLmJsb2NrU2l6ZSk7SD4wO0gtLSl3Kz10aGlzLl9i'@;
put 'dWZmZXIoTix3KSxGKz10aGlzLl9mbHVzaEJ1ZmZlcihSLEYpO3JldHVybiB3Kz10aGlzLl9idWZmZXIoTix3KSxSfSxfLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihOKXt2YXIgdyxGO3JldHVybiBOJiYodz10aGlzLnVwZGF0ZShOKSksRj0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5f'@;
put 'ZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93LmNvbmNhdChGKTpGfSxfLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKE4sdyl7aWYoMD09PXcpcmV0dXJuITE7Zm9yKDt3PE4ubGVuZ3RoOylOW3crK109MDtyZXR1cm4hMH0sXy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1m'@;
put 'dW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBOPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLE4sMCksTn0sXy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKE4p'@;
put 'e3JldHVybiBOfSxfLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7RC5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgTj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVz'@;
put 'aEJ1ZmZlcihOLDApLHRoaXMuX3VucGFkKE4pfX0sNzc4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTc0NiksXz1iKDU3MTcpLHA9YigxMjc4KSxOPWIoNTc1Nik7ZnVuY3Rpb24gdygpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBGKFIp'@;
put 'e04uY2FsbCh0aGlzLFIpO3ZhciBqPW5ldyB3O3RoaXMuX2Rlc1N0YXRlPWosdGhpcy5kZXJpdmVLZXlzKGosUi5rZXkpfV8oRixOKSxjZS5leHBvcnRzPUYsRi5jcmVhdGU9ZnVuY3Rpb24oail7cmV0dXJuIG5ldyBGKGopfTt2YXIgSD1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIs'@;
put 'MV07Ri5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihqLFApe2oua2V5cz1uZXcgQXJyYXkoMzIpLEQuZXF1YWwoUC5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBMPXAucmVhZFVJbnQzMkJFKFAsMCksWT1wLnJlYWRVSW50MzJCRShQLDQpO3Au'@;
put 'cGMxKEwsWSxqLnRtcCwwKSxMPWoudG1wWzBdLFk9ai50bXBbMV07Zm9yKHZhciBCPTA7QjxqLmtleXMubGVuZ3RoO0IrPTIpe3ZhciBXPUhbQj4+PjFdO0w9cC5yMjhzaGwoTCxXKSxZPXAucjI4c2hsKFksVykscC5wYzIoTCxZLGoua2V5cyxCKX19LEYucHJvdG90eXBlLl91cGRhdGU9ZnVu'@;
put 'Y3Rpb24oaixQLEwsWSl7dmFyIEI9dGhpcy5fZGVzU3RhdGUsVz1wLnJlYWRVSW50MzJCRShqLFApLFo9cC5yZWFkVUludDMyQkUoaixQKzQpO3AuaXAoVyxaLEIudG1wLDApLFc9Qi50bXBbMF0sWj1CLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChCLFcsWixC'@;
put 'LnRtcCwwKTp0aGlzLl9kZWNyeXB0KEIsVyxaLEIudG1wLDApLFo9Qi50bXBbMV0scC53cml0ZVVJbnQzMkJFKEwsVz1CLnRtcFswXSxZKSxwLndyaXRlVUludDMyQkUoTCxaLFkrNCl9LEYucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oaixQKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4h'@;
put 'MTtmb3IodmFyIEw9ai5sZW5ndGgtUCxZPVA7WTxqLmxlbmd0aDtZKyspaltZXT1MO3JldHVybiEwfSxGLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oail7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIGo7Zm9yKHZhciBQPWpbai5sZW5ndGgtMV0sTD1qLmxlbmd0aC1QO0w8ai5sZW5n'@;
put 'dGg7TCsrKUQuZXF1YWwoaltMXSxQKTtyZXR1cm4gai5zbGljZSgwLGoubGVuZ3RoLVApfSxGLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihqLFAsTCxZLEIpe2Zvcih2YXIgVz1QLFo9TCxYPTA7WDxqLmtleXMubGVuZ3RoO1grPTIpe3ZhciBRPWoua2V5c1tYXSxxPWoua2V5c1tYKzFd'@;
put 'O3AuZXhwYW5kKFosai50bXAsMCk7dmFyIHRlPXAuc3Vic3RpdHV0ZShRXj1qLnRtcFswXSxxXj1qLnRtcFsxXSksc2U9WjtaPShXXnAucGVybXV0ZSh0ZSkpPj4+MCxXPXNlfXAucmlwKFosVyxZLEIpfSxGLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihqLFAsTCxZLEIpe2Zvcih2YXIg'@;
put 'Vz1MLFo9UCxYPWoua2V5cy5sZW5ndGgtMjtYPj0wO1gtPTIpe3ZhciBRPWoua2V5c1tYXSxxPWoua2V5c1tYKzFdO3AuZXhwYW5kKFcsai50bXAsMCk7dmFyIHRlPXAuc3Vic3RpdHV0ZShRXj1qLnRtcFswXSxxXj1qLnRtcFsxXSksc2U9VztXPShaXnAucGVybXV0ZSh0ZSkpPj4+MCxaPXNl'@;
put 'fXAucmlwKFcsWixZLEIpfX0sNjUxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTc0NiksXz1iKDU3MTcpLHA9Yig1NzU2KSxOPWIoNzc4KTtmdW5jdGlvbiB3KEgsUil7RC5lcXVhbChSLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIGo9Ui5zbGljZSgwLDgp'@;
put 'LFA9Ui5zbGljZSg4LDE2KSxMPVIuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1IP1tOLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Omp9KSxOLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OlB9KSxOLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okx9KV06W04u'@;
put 'Y3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pLE4uY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6UH0pLE4uY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6an0pXX1mdW5jdGlvbiBGKEgpe3AuY2FsbCh0aGlzLEgpO3ZhciBSPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5'@;
put 'KTt0aGlzLl9lZGVTdGF0ZT1SfV8oRixwKSxjZS5leHBvcnRzPUYsRi5jcmVhdGU9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBGKFIpfSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIsaixQLEwpe3ZhciBZPXRoaXMuX2VkZVN0YXRlO1kuY2lwaGVyc1swXS5fdXBkYXRlKFIsaixQLEwp'@;
put 'LFkuY2lwaGVyc1sxXS5fdXBkYXRlKFAsTCxQLEwpLFkuY2lwaGVyc1syXS5fdXBkYXRlKFAsTCxQLEwpfSxGLnByb3RvdHlwZS5fcGFkPU4ucHJvdG90eXBlLl9wYWQsRi5wcm90b3R5cGUuX3VucGFkPU4ucHJvdG90eXBlLl91bnBhZH0sMTI3ODooY2UsSik9PnsidXNlIHN0cmljdCI7Si5y'@;
put 'ZWFkVUludDMyQkU9ZnVuY3Rpb24oTix3KXtyZXR1cm4oTlswK3ddPDwyNHxOWzErd108PDE2fE5bMit3XTw8OHxOWzMrd10pPj4+MH0sSi53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKE4sdyxGKXtOWzArRl09dz4+PjI0LE5bMStGXT13Pj4+MTYmMjU1LE5bMitGXT13Pj4+OCYyNTUsTlszK0Zd'@;
put 'PTI1NSZ3fSxKLmlwPWZ1bmN0aW9uKE4sdyxGLEgpe2Zvcih2YXIgUj0wLGo9MCxQPTY7UD49MDtQLT0yKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KVI8PD0xLFJ8PXc+Pj5MK1AmMTtmb3IoTD0wO0w8PTI0O0wrPTgpUjw8PTEsUnw9Tj4+PkwrUCYxfWZvcihQPTY7UD49MDtQLT0yKXtmb3Io'@;
put 'TD0xO0w8PTI1O0wrPTgpajw8PTEsanw9dz4+PkwrUCYxO2ZvcihMPTE7TDw9MjU7TCs9OClqPDw9MSxqfD1OPj4+TCtQJjF9RltIKzBdPVI+Pj4wLEZbSCsxXT1qPj4+MH0sSi5yaXA9ZnVuY3Rpb24oTix3LEYsSCl7Zm9yKHZhciBSPTAsaj0wLFA9MDtQPDQ7UCsrKWZvcih2YXIgTD0yNDtM'@;
put 'Pj0wO0wtPTgpUjw8PTEsUnw9dz4+PkwrUCYxLFI8PD0xLFJ8PU4+Pj5MK1AmMTtmb3IoUD00O1A8ODtQKyspZm9yKEw9MjQ7TD49MDtMLT04KWo8PD0xLGp8PXc+Pj5MK1AmMSxqPDw9MSxqfD1OPj4+TCtQJjE7RltIKzBdPVI+Pj4wLEZbSCsxXT1qPj4+MH0sSi5wYzE9ZnVuY3Rpb24oTix3'@;
put 'LEYsSCl7Zm9yKHZhciBSPTAsaj0wLFA9NztQPj01O1AtLSl7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClSPDw9MSxSfD13Pj5MK1AmMTtmb3IoTD0wO0w8PTI0O0wrPTgpUjw8PTEsUnw9Tj4+TCtQJjF9Zm9yKEw9MDtMPD0yNDtMKz04KVI8PD0xLFJ8PXc+PkwrUCYxO2ZvcihQPTE7UDw9MztQ'@;
put 'Kyspe2ZvcihMPTA7TDw9MjQ7TCs9OClqPDw9MSxqfD13Pj5MK1AmMTtmb3IoTD0wO0w8PTI0O0wrPTgpajw8PTEsanw9Tj4+TCtQJjF9Zm9yKEw9MDtMPD0yNDtMKz04KWo8PD0xLGp8PU4+PkwrUCYxO0ZbSCswXT1SPj4+MCxGW0grMV09aj4+PjB9LEoucjI4c2hsPWZ1bmN0aW9uKE4sdyl7'@;
put 'cmV0dXJuIE48PHcmMjY4NDM1NDU1fE4+Pj4yOC13fTt2YXIgYj1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0'@;
put 'XTtKLnBjMj1mdW5jdGlvbihOLHcsRixIKXtmb3IodmFyIFI9MCxqPTAsUD1iLmxlbmd0aD4+PjEsTD0wO0w8UDtMKyspUjw8PTEsUnw9Tj4+PmJbTF0mMTtmb3IoTD1QO0w8Yi5sZW5ndGg7TCsrKWo8PD0xLGp8PXc+Pj5iW0xdJjE7RltIKzBdPVI+Pj4wLEZbSCsxXT1qPj4+MH0sSi5leHBh'@;
put 'bmQ9ZnVuY3Rpb24oTix3LEYpe3ZhciBIPTAsUj0wO0g9KDEmTik8PDV8Tj4+PjI3O2Zvcih2YXIgaj0yMztqPj0xNTtqLT00KUg8PD02LEh8PU4+Pj5qJjYzO2ZvcihqPTExO2o+PTM7ai09NClSfD1OPj4+aiY2MyxSPDw9NjtSfD0oMzEmTik8PDF8Tj4+PjMxLHdbRiswXT1IPj4+MCx3W0Yr'@;
put 'MV09Uj4+PjB9O3ZhciBEPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiww'@;
put 'LDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3'@;
put 'LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAs'@;
put 'Niw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMs'@;
put 'NiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwz'@;
put 'LDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwy'@;
put 'LDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcs'@;
put 'Miw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO0ouc3Vic3RpdHV0ZT1mdW5jdGlvbihOLHcpe2Zvcih2YXIgRj0wLEg9MDtIPDQ7SCsrKUY8PD00LEZ8PURbNjQqSCsoTj4+PjE4LTYqSCY2MyldO2Zv'@;
put 'cihIPTA7SDw0O0grKylGPDw9NCxGfD1EWzI1Nis2NCpIKyh3Pj4+MTgtNipIJjYzKV07cmV0dXJuIEY+Pj4wfTt2YXIgXz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107Si5wZXJt'@;
put 'dXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgdz0wLEY9MDtGPF8ubGVuZ3RoO0YrKyl3PDw9MSx3fD1OPj4+X1tGXSYxO3JldHVybiB3Pj4+MH0sSi5wYWRTcGxpdD1mdW5jdGlvbihOLHcsRil7Zm9yKHZhciBIPU4udG9TdHJpbmcoMik7SC5sZW5ndGg8dzspSD0iMCIrSDtmb3IodmFyIFI9W10s'@;
put 'aj0wO2o8dztqKz1GKVIucHVzaChILnNsaWNlKGosaitGKSk7cmV0dXJuIFIuam9pbigiICIpfX0sMjYwNzooY2UsSixiKT0+e3ZhciBEPWIoODc2NCkuQnVmZmVyLF89YigzNTkwKSxwPWIoOTc5OSksTj1iKDc0MjYpLEY9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtKLkRpZmZpZUhl'@;
put 'bGxtYW5Hcm91cD1KLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1KLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gdyhSKXt2YXIgaj1uZXcgRChwW1JdLnByaW1lLCJoZXgiKSxQPW5ldyBEKHBbUl0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IE4oaixQKX0sSi5jcmVhdGVEaWZmaWVIZWxsbWFu'@;
put 'PUouRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBIKFIsaixQLEwpe3JldHVybiBELmlzQnVmZmVyKGopfHx2b2lkIDA9PT1GW2pdP0goUiwiYmluYXJ5IixqLFApOihqPWp8fCJiaW5hcnkiLEw9THx8ImJpbmFyeSIsUD1QfHxuZXcgRChbMl0pLEQuaXNCdWZmZXIoUCl8fChQPW5ldyBEKFAsTCkp'@;
put 'LCJudW1iZXIiPT10eXBlb2YgUj9uZXcgTihfKFIsUCksUCwhMCk6KEQuaXNCdWZmZXIoUil8fChSPW5ldyBEKFIsaikpLG5ldyBOKFIsUCwhMCkpKX19LDc0MjY6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLkJ1ZmZlcixfPWIoMzYyMCksTj1uZXcoYigzMDQ3KSksdz1uZXcgXygyNCksRj1u'@;
put 'ZXcgXygxMSksSD1uZXcgXygxMCksUj1uZXcgXygzKSxqPW5ldyBfKDcpLFA9YigzNTkwKSxMPWIoMTc5OCk7ZnVuY3Rpb24gWShxLHRlKXtyZXR1cm4gdGU9dGV8fCJ1dGY4IixELmlzQnVmZmVyKHEpfHwocT1uZXcgRChxLHRlKSksdGhpcy5fcHViPW5ldyBfKHEpLHRoaXN9ZnVuY3Rpb24g'@;
put 'QihxLHRlKXtyZXR1cm4gdGU9dGV8fCJ1dGY4IixELmlzQnVmZmVyKHEpfHwocT1uZXcgRChxLHRlKSksdGhpcy5fcHJpdj1uZXcgXyhxKSx0aGlzfWNlLmV4cG9ydHM9WDt2YXIgVz17fTtmdW5jdGlvbiBYKHEsdGUsaWUpe3RoaXMuc2V0R2VuZXJhdG9yKHRlKSx0aGlzLl9fcHJpbWU9bmV3'@;
put 'IF8ocSksdGhpcy5fcHJpbWU9Xy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49cS5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLGllPyh0aGlzLnNldFB1YmxpY0tleT1ZLHRoaXMuc2V0UHJpdmF0ZUtleT1C'@;
put 'KTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBRKHEsdGUpe3ZhciBpZT1uZXcgRChxLnRvQXJyYXkoKSk7cmV0dXJuIHRlP2llLnRvU3RyaW5nKHRlKTppZX1PYmplY3QuZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBaKHEsdGUpe3ZhciBpZT10ZS50b1N0cmluZygiaGV4Iiksc2U9W2llLHEudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYoc2UgaW4gVylyZXR1cm4gV1tzZV07dmFy'@;
put 'IF9lLGdlPTA7aWYocS5pc0V2ZW4oKXx8IVAuc2ltcGxlU2lldmV8fCFQLmZlcm1hdFRlc3QocSl8fCFOLnRlc3QocSkpcmV0dXJuIGdlKz0xLFdbc2VdPWdlKz0iMDIiPT09aWV8fCIwNSI9PT1pZT84OjQsZ2U7c3dpdGNoKE4udGVzdChxLnNocm4oMSkpfHwoZ2UrPTIpLGllKXtjYXNlIjAy'@;
put 'IjpxLm1vZCh3KS5jbXAoRikmJihnZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KF9lPXEubW9kKEgpKS5jbXAoUikmJl9lLmNtcChqKSYmKGdlKz04KTticmVhaztkZWZhdWx0OmdlKz00fXJldHVybiBXW3NlXT1nZSxnZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9'@;
put 'fSksWC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBfKEwodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0'@;
put 'aGlzLmdldFB1YmxpY0tleSgpfSxYLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKHEpe3ZhciB0ZT0ocT0ocT1uZXcgXyhxKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLGllPW5ldyBEKHRlLnRvQXJyYXkoKSksc2U9dGhpcy5nZXRQ'@;
put 'cmltZSgpO2lmKGllLmxlbmd0aDxzZS5sZW5ndGgpe3ZhciBnZT1uZXcgRChzZS5sZW5ndGgtaWUubGVuZ3RoKTtnZS5maWxsKDApLGllPUQuY29uY2F0KFtnZSxpZV0pfXJldHVybiBpZX0sWC5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHRlKXtyZXR1cm4gUSh0aGlzLl9wdWIs'@;
put 'dGUpfSxYLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHRlKXtyZXR1cm4gUSh0aGlzLl9wcml2LHRlKX0sWC5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24ocSl7cmV0dXJuIFEodGhpcy5fX3ByaW1lLHEpfSxYLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24ocSl7'@;
put 'cmV0dXJuIFEodGhpcy5fZ2VuLHEpfSxYLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24ocSx0ZSl7cmV0dXJuIHRlPXRlfHwidXRmOCIsRC5pc0J1ZmZlcihxKXx8KHE9bmV3IEQocSx0ZSkpLHRoaXMuX19nZW49cSx0aGlzLl9nZW49bmV3IF8ocSksdGhpc319LDM1OTA6KGNlLEos'@;
put 'Yik9Pnt2YXIgRD1iKDE3OTgpO2NlLmV4cG9ydHM9c2Usc2Uuc2ltcGxlU2lldmU9dGUsc2UuZmVybWF0VGVzdD1pZTt2YXIgXz1iKDM2MjApLHA9bmV3IF8oMjQpLHc9bmV3KGIoMzA0NykpLEY9bmV3IF8oMSksSD1uZXcgXygyKSxSPW5ldyBfKDUpLEw9KG5ldyBfKDE2KSxuZXcgXyg4KSxu'@;
put 'ZXcgXygxMCkpLFk9bmV3IF8oMyksVz0obmV3IF8oNyksbmV3IF8oMTEpKSxaPW5ldyBfKDQpLFE9KG5ldyBfKDEyKSxudWxsKTtmdW5jdGlvbiB0ZShnZSl7Zm9yKHZhciBfZT1mdW5jdGlvbiBxKCl7aWYobnVsbCE9PVEpcmV0dXJuIFE7dmFyIF9lPVtdO19lWzBdPTI7Zm9yKHZhciBUZT0x'@;
put 'LFNlPTM7U2U8MTA0ODU3NjtTZSs9Mil7Zm9yKHZhciB6ZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KFNlKSksej0wO3o8VGUmJl9lW3pdPD16ZSYmU2UlX2Vbel0hPTA7eisrKTtUZSE9PXomJl9lW3pdPD16ZXx8KF9lW1RlKytdPVNlKX1yZXR1cm4gUT1fZSxfZX0oKSxUZT0wO1RlPF9lLmxlbmd0'@;
put 'aDtUZSsrKWlmKDA9PT1nZS5tb2RuKF9lW1RlXSkpcmV0dXJuIDA9PT1nZS5jbXBuKF9lW1RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gaWUoZ2Upe3ZhciBfZT1fLm1vbnQoZ2UpO3JldHVybiAwPT09SC50b1JlZChfZSkucmVkUG93KGdlLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0'@;
put 'aW9uIHNlKGdlLF9lKXtpZihnZTwxNilyZXR1cm4gbmV3IF8oMj09PV9lfHw1PT09X2U/WzE0MCwxMjNdOlsxNDAsMzldKTtfZT1uZXcgXyhfZSk7Zm9yKHZhciBUZSxTZTs7KXtmb3IoVGU9bmV3IF8oRChNYXRoLmNlaWwoZ2UvOCkpKTtUZS5iaXRMZW5ndGgoKT5nZTspVGUuaXNocm4oMSk7'@;
put 'aWYoVGUuaXNFdmVuKCkmJlRlLmlhZGQoRiksVGUudGVzdG4oMSl8fFRlLmlhZGQoSCksX2UuY21wKEgpKXtpZighX2UuY21wKFIpKWZvcig7VGUubW9kKEwpLmNtcChZKTspVGUuaWFkZChaKX1lbHNlIGZvcig7VGUubW9kKHApLmNtcChXKTspVGUuaWFkZChaKTtpZih0ZShTZT1UZS5zaHJu'@;
put 'KDEpKSYmdGUoVGUpJiZpZShTZSkmJmllKFRlKSYmdy50ZXN0KFNlKSYmdy50ZXN0KFRlKSlyZXR1cm4gVGV9fX0sMzYyMDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihELF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKHosZyl7aWYoIXopdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRp'@;
put 'b24gZmFpbGVkIil9ZnVuY3Rpb24gTih6LGcpe3ouc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLHoucHJvdG90eXBlPW5ldyB5LHoucHJvdG90eXBlLmNvbnN0cnVjdG9yPXp9ZnVuY3Rpb24gdyh6LGcseSl7aWYody5pc0JOKHopKXJldHVybiB6'@;
put 'O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT16JiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdCh6fHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgRjsib2JqZWN0Ij09dHlwZW9mIEQ/RC5l'@;
put 'eHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtGPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gSCh6LGcpe3ZhciB5PXouY2hhckNvZGVBdChnKTtyZXR1'@;
put 'cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUih6LGcseSl7dmFyIHg9SCh6LHkpO3JldHVybiB5LTE+PWcmJih4fD1IKHoseS0xKTw8NCkseH1mdW5jdGlvbiBqKHosZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oei5sZW5ndGgs'@;
put 'eSksVj1nO1Y8VDtWKyspe3ZhciBVPXouY2hhckNvZGVBdChWKS00ODtDKj14LEMrPVU+PTQ5P1UtNDkrMTA6VT49MTc/VS0xNysxMDpVfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29u'@;
put 'c3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0'@;
put 'aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBD'@;
put 'PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRo'@;
put 'aXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMu'@;
put 'd29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0'@;
put 'aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWls'@;
put 'KGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsVixVPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShW'@;
put 'PWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tD'@;
put 'XXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3Ro'@;
put 'PU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVSxUPTAsVj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKVU9Uihn'@;
put 'LHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4'@;
put 'NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlD'@;
put 'Kys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBWPWcubGVuZ3RoLXgsVT1WJUMsRT1NYXRoLm1pbihWLFYtVSkreCxtPTAsQT14O0E8RTtBKz1DKW09aihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7'@;
put 'aWYoMCE9PVUpe3ZhciBhZT0xO2ZvcihtPWooZyxBLGcubGVuZ3RoLHkpLEE9MDtBPFU7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1m'@;
put 'dW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90'@;
put 'b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90'@;
put 'eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0'@;
put 'aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFA9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAw'@;
put 'IiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxZPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3Nzcy'@;
put 'MTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYy'@;
put 'NjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlO3ZhciB4'@;
put 'PXoubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8ei53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxWPUMqVCxFPVYvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJlY7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2'@;
put 'MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksbGU9TWF0aC5tYXgoMCxtLXoubGVuZ3RoKzEpO2xlPD1uZTtsZSsrKUErPShWPShDPTB8ei53b3Jkc1ttLWxlfDBdKSooVD0wfGcud29yZHNbbGVdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZWO3kud29yZHNbbV09MHxhZSxFPTB8'@;
put 'QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxWPTA7Vjx0aGlzLmxl'@;
put 'bmd0aDtWKyspe3ZhciBVPXRoaXMud29yZHNbVl0sRT0oMTY3NzcyMTUmKFU8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPVU+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixWLS0pLHg9MCE9PVR8fFYhPT10aGlzLmxlbmd0aC0xP1BbNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9'@;
put 'PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1MW2ddLEE9WVtnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5l'@;
put 'Z2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6UFttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJu'@;
put 'IDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMu'@;
put 'd29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVn'@;
put 'YXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBGPCJ1IiksdGhpcy50b0FycmF5TGlrZShGLGcseSl9LHcucHJvdG90eXBlLnRv'@;
put 'QXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIg'@;
put 'dGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxWPSJsZSI9PT15LFU9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoVil7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5p'@;
put 'dXNocm4oOCksVVttXT1FO2Zvcig7bTxUO20rKylVW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylVW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVtULW0tMV09RX1yZXR1cm4gVX0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRo'@;
put 'LmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9'@;
put 'LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuIDgxOTEmeXx8KHgrPTEzLHk+Pj49MTMpLDEyNyZ5fHwoeCs9Nyx5Pj4+PTcpLDE1Jnl8fCh4Kz00LHk+Pj49NCksMyZ5fHwoeCs9Mix5Pj4+PTIpLDEmeXx8eCsr'@;
put 'LHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSly'@;
put 'ZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlz'@;
put 'LmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0'@;
put 'bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJv'@;
put 'dG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0w'@;
put 'O3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5'@;
put 'cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpn'@;
put 'LmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMu'@;
put 'bGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n'@;
put 'dGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9y'@;
put 'PWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRo'@;
put 'aXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xv'@;
put 'bmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0Nd'@;
put 'PTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5'@;
put 'cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9'@;
put 'LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLFY9MDtWPEMubGVuZ3RoO1YrKyl0aGlz'@;
put 'LndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pKygwfEMud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJlY8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5n'@;
put 'dGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPXgud29yZHNbVl07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4g'@;
put 'MCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRo'@;
put 'aXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5f'@;
put 'bm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0'@;
put 'aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgVj0wLFU9MDtVPFQubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pLSgwfFQud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7Zm9yKDswIT09ViYm'@;
put 'VTxDLmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2lmKDA9PT1WJiZVPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO1U8Qy5sZW5ndGg7VSsrKXRoaXMud29yZHNbVV09Qy53b3Jkc1tVXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0'@;
put 'aC5tYXgodGhpcy5sZW5ndGgsVSksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFo9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15'@;
put 'LndvcmRzLFY9eC53b3JkcyxVPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsbGU9YWU+Pj4xMyx3ZT0wfENbMV0sWmU9ODE5MSZ3ZSxRZT13ZT4+PjEzLGF0PTB8Q1syXSx4ZT04MTkxJmF0LHZlPWF0Pj4+MTMscWU9MHxDWzNdLGplPTgxOTEmcWUsQWU9cWU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5'@;
put 'MSZGZSxJZT1GZT4+PjEzLEhlPTB8Q1s1XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxvbj0wfENbN10seXQ9ODE5MSZvbixNdD1vbj4+PjEzLEl0PTB8Q1s4XSxydD04MTkxJkl0LEtlPUl0Pj4+MTMsdHQ9MHxDWzldLE5lPTgxOTEmdHQs'@;
put 'dXQ9dHQ+Pj4xMyxKdD0wfFRbMF0sTHQ9ODE5MSZKdCxQdD1KdD4+PjEzLG9pPTB8VFsxXSxlbj04MTkxJm9pLHNuPW9pPj4+MTMsSWk9MHxUWzJdLGRuPTgxOTEmSWksZnQ9SWk+Pj4xMyxGcj0wfFRbM10sWnQ9ODE5MSZGcixrdD1Gcj4+PjEzLExuPTB8VFs0XSxvdD04MTkxJkxuLHp0PUxu'@;
put 'Pj4+MTMsbmk9MHxUWzVdLFdlPTgxOTEmbmksQXQ9bmk+Pj4xMyxpcj0wfFRbNl0saHQ9ODE5MSZpcixFdD1pcj4+PjEzLHpuPTB8VFs3XSxhbj04MTkxJnpuLGp0PXpuPj4+MTMsZGk9MHxUWzhdLGNuPTgxOTEmZGksZm49ZGk+Pj4xMyxEaT0wfFRbOV0sUXQ9ODE5MSZEaSx0bj1EaT4+PjEz'@;
put 'O3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBjYT0oVSsoRT1NYXRoLmltdWwobmUsTHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFB0KSkrTWF0aC5pbXVsKGxlLEx0KXwwKSk8PDEzKXwwO1U9KChBPU1hdGguaW11bChsZSxQdCkpKyht'@;
put 'Pj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxFPU1hdGguaW11bChaZSxMdCksbT0obT1NYXRoLmltdWwoWmUsUHQpKStNYXRoLmltdWwoUWUsTHQpfDAsQT1NYXRoLmltdWwoUWUsUHQpO3ZhciB4aT0oVSsoRT1FK01hdGguaW11bChuZSxlbil8MCl8MCkrKCg4MTkxJihtPSht'@;
put 'PW0rTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwobGUsZW4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsc24pfDApKyhtPj4+MTMpfDApKyh4aT4+PjI2KXwwLHhpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxMdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmlt'@;
put 'dWwodmUsTHQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoWmUsZW4pfDAsbT0obT1tK01hdGguaW11bChaZSxzbil8MCkrTWF0aC5pbXVsKFFlLGVuKXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDA7dmFyIHlyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGRuKXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChsZSxkbil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEx0KSxtPShtPU1hdGguaW11bChqZSxQdCkp'@;
put 'K01hdGguaW11bChBZSxMdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bCh4ZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsZW4pfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFplLGRuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoWmUsZnQpfDApK01hdGguaW11bChRZSxkbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwO3ZhciBHbj0oVSsoRT1FK01hdGguaW11bChuZSxadCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGt0KXwwKStNYXRoLmltdWwobGUsWnQpfDApKTw8MTMpfDA7VT0oKEE9'@;
put 'QStNYXRoLmltdWwobGUsa3QpfDApKyhtPj4+MTMpfDApKyhHbj4+PjI2KXwwLEduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxMdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsTHQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsZW4pfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKEFlLGVuKXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsZG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0'@;
put 'aC5pbXVsKFplLFp0KXwwLG09KG09bStNYXRoLmltdWwoWmUsa3QpfDApK01hdGguaW11bChRZSxadCl8MCxBPUErTWF0aC5pbXVsKFFlLGt0KXwwO3ZhciBLaT0oVSsoRT1FK01hdGguaW11bChuZSxvdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmlt'@;
put 'dWwobGUsb3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsenQpfDApKyhtPj4+MTMpfDApKyhLaT4+PjI2KXwwLEtpJj02NzEwODg2MyxFPU1hdGguaW11bChEZSxMdCksbT0obT1NYXRoLmltdWwoRGUsUHQpKStNYXRoLmltdWwoa2UsTHQpfDAsQT1NYXRoLmltdWwoa2UsUHQp'@;
put 'LEU9RStNYXRoLmltdWwoUmUsZW4pfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLGVuKXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoQWUsZG4pfDAsQT1B'@;
put 'K01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFp0KXwwLG09KG09bStNYXRoLmltdWwoeGUsa3QpfDApK01hdGguaW11bCh2ZSxadCl8MCxBPUErTWF0aC5pbXVsKHZlLGt0KXwwLEU9RStNYXRoLmltdWwoWmUsb3QpfDAsbT0obT1tK01hdGguaW11bChaZSx6dCl8MCkrTWF0'@;
put 'aC5pbXVsKFFlLG90KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDA7dmFyIEpyPShVKyhFPUUrTWF0aC5pbXVsKG5lLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChsZSxXZSl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxBdCl8'@;
put 'MCkrKG0+Pj4xMyl8MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LEx0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChKZSxMdCl8MCxBPU1hdGguaW11bChKZSxQdCksRT1FK01hdGguaW11bChEZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLHNu'@;
put 'KXwwKStNYXRoLmltdWwoa2UsZW4pfDAsQT1BK01hdGguaW11bChrZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGRuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxkbil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsWnQpfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChqZSxrdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLEE9QStNYXRoLmltdWwoQWUsa3QpfDAsRT1FK01hdGguaW11bCh4ZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUsb3QpfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0'@;
put 'aC5pbXVsKFplLFdlKXwwLG09KG09bStNYXRoLmltdWwoWmUsQXQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwO3ZhciBRcj0oVSsoRT1FK01hdGguaW11bChuZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEV0KXwwKStNYXRoLmlt'@;
put 'dWwobGUsaHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsRXQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxMdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsTHQpfDAsQT1NYXRoLmltdWwoTXQsUHQp'@;
put 'LEU9RStNYXRoLmltdWwobnQsZW4pfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKEplLGVuKXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDAsRT1FK01hdGguaW11bChEZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZ0KXwwKStNYXRoLmltdWwoa2UsZG4pfDAsQT1B'@;
put 'K01hdGguaW11bChrZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFp0KXwwLG09KG09bStNYXRoLmltdWwoUmUsa3QpfDApK01hdGguaW11bChJZSxadCl8MCxBPUErTWF0aC5pbXVsKEllLGt0KXwwLEU9RStNYXRoLmltdWwoamUsb3QpfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0'@;
put 'aC5pbXVsKEFlLG90KXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFplLGh0KXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoWmUsRXQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLEV0KXwwO3ZhciBOaT0oVSsoRT1FK01hdGguaW11bChuZSxhbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGp0KXwwKStNYXRoLmltdWwobGUsYW4pfDApKTw8MTMpfDA7VT0oKEE9'@;
put 'QStNYXRoLmltdWwobGUsanQpfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChydCxMdCksbT0obT1NYXRoLmltdWwocnQsUHQpKStNYXRoLmltdWwoS2UsTHQpfDAsQT1NYXRoLmltdWwoS2UsUHQpLEU9RStNYXRoLmltdWwoeXQsZW4pfDAsbT0o'@;
put 'bT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LGVuKXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoSmUsZG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MCxFPUUrTWF0'@;
put 'aC5pbXVsKERlLFp0KXwwLG09KG09bStNYXRoLmltdWwoRGUsa3QpfDApK01hdGguaW11bChrZSxadCl8MCxBPUErTWF0aC5pbXVsKGtlLGt0KXwwLEU9RStNYXRoLmltdWwoUmUsb3QpfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLG90KXwwLEE9QStNYXRoLmlt'@;
put 'dWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUsRXQpfDApK01hdGguaW11bCh2'@;
put 'ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLEV0KXwwLEU9RStNYXRoLmltdWwoWmUsYW4pfDAsbT0obT1tK01hdGguaW11bChaZSxqdCl8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsanQpfDA7dmFyIEhpPShVKyhFPUUrTWF0aC5pbXVsKG5lLGNuKXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwobmUsZm4pfDApK01hdGguaW11bChsZSxjbil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmbil8MCkrKG0+Pj4xMyl8MCkrKEhpPj4+MjYpfDAsSGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLEx0KSxtPShtPU1hdGguaW11bChOZSxQdCkp'@;
put 'K01hdGguaW11bCh1dCxMdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChydCxlbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmltdWwoS2UsZW4pfDAsQT1BK01hdGguaW11bChLZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGRuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxkbil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsWnQpfDAsbT0obT1tK01hdGguaW11bChudCxrdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwLEE9QStNYXRoLmltdWwoSmUsa3QpfDAsRT1FK01hdGguaW11bChE'@;
put 'ZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHp0KXwwKStNYXRoLmltdWwoa2Usb3QpfDAsQT1BK01hdGguaW11bChrZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLEF0'@;
put 'KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSxFdCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUsRXQpfDAsRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGp0KXwwKStNYXRoLmltdWwodmUsYW4pfDAs'@;
put 'QT1BK01hdGguaW11bCh2ZSxqdCl8MCxFPUUrTWF0aC5pbXVsKFplLGNuKXwwLG09KG09bStNYXRoLmltdWwoWmUsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBJYT0oVSsoRT1FK01hdGguaW11bChuZSxRdCl8MCl8MCkrKCg4MTkxJihtPSht'@;
put 'PW0rTWF0aC5pbXVsKG5lLHRuKXwwKStNYXRoLmltdWwobGUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsdG4pfDApKyhtPj4+MTMpfDApKyhJYT4+PjI2KXwwLElhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxlbiksbT0obT1NYXRoLmltdWwoTmUsc24pKStNYXRoLmlt'@;
put 'dWwodXQsZW4pfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0obT1tK01hdGguaW11bChydCxmdCl8MCkrTWF0aC5pbXVsKEtlLGRuKXwwLEE9QStNYXRoLmltdWwoS2UsZnQpfDAsRT1FK01hdGguaW11bCh5dCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0'@;
put 'LGt0KXwwKStNYXRoLmltdWwoTXQsWnQpfDAsQT1BK01hdGguaW11bChNdCxrdCl8MCxFPUUrTWF0aC5pbXVsKG50LG90KXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChKZSxvdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwLEU9RStNYXRoLmltdWwoRGUsV2UpfDAs'@;
put 'bT0obT1tK01hdGguaW11bChEZSxBdCl8MCkrTWF0aC5pbXVsKGtlLFdlKXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEV0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSxFdCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKGplLGFuKXwwLG09KG09bStNYXRoLmltdWwoamUsanQpfDApK01hdGguaW11bChBZSxhbil8MCxBPUErTWF0aC5pbXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRo'@;
put 'LmltdWwodmUsZm4pfDA7dmFyIFByPShVKyhFPUUrTWF0aC5pbXVsKFplLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoWmUsdG4pfDApK01hdGguaW11bChRZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChRZSx0bil8MCkrKG0+Pj4xMyl8MCkrKFByPj4+MjYp'@;
put 'fDAsUHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGRuKSxtPShtPU1hdGguaW11bChOZSxmdCkpK01hdGguaW11bCh1dCxkbil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChydCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGt0KXwwKStNYXRoLmltdWwoS2UsWnQpfDAs'@;
put 'QT1BK01hdGguaW11bChLZSxrdCl8MCxFPUUrTWF0aC5pbXVsKHl0LG90KXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxvdCl8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkr'@;
put 'TWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDAsRT1FK01hdGguaW11bChEZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLEV0KXwwKStNYXRoLmltdWwoa2UsaHQpfDAsQT1BK01hdGguaW11bChrZSxFdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGFuKXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoUmUsanQpfDApK01hdGguaW11bChJZSxhbil8MCxBPUErTWF0aC5pbXVsKEllLGp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFlpPShVKyhF'@;
put 'PUUrTWF0aC5pbXVsKHhlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh2ZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCh2ZSx0bil8MCkrKG0+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVs'@;
put 'KE5lLFp0KSxtPShtPU1hdGguaW11bChOZSxrdCkpK01hdGguaW11bCh1dCxadCl8MCxBPU1hdGguaW11bCh1dCxrdCksRT1FK01hdGguaW11bChydCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHp0KXwwKStNYXRoLmltdWwoS2Usb3QpfDAsQT1BK01hdGguaW11bChLZSx6dCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCxFdCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRo'@;
put 'LmltdWwoSmUsRXQpfDAsRT1FK01hdGguaW11bChEZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGp0KXwwKStNYXRoLmltdWwoa2UsYW4pfDAsQT1BK01hdGguaW11bChrZSxqdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11'@;
put 'bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBmYT0oVSsoRT1FK01hdGguaW11bChqZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoQWUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoQWUsdG4pfDApKyht'@;
put 'Pj4+MTMpfDApKyhmYT4+PjI2KXwwLGZhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxvdCksbT0obT1NYXRoLmltdWwoTmUsenQpKStNYXRoLmltdWwodXQsb3QpfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwocnQsV2UpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkr'@;
put 'TWF0aC5pbXVsKEtlLFdlKXwwLEE9QStNYXRoLmltdWwoS2UsQXQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEV0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCxFdCl8MCxFPUUrTWF0aC5pbXVsKG50LGFuKXwwLG09KG09bStN'@;
put 'YXRoLmltdWwobnQsanQpfDApK01hdGguaW11bChKZSxhbil8MCxBPUErTWF0aC5pbXVsKEplLGp0KXwwLEU9RStNYXRoLmltdWwoRGUsY24pfDAsbT0obT1tK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKGtlLGNuKXwwLEE9QStNYXRoLmltdWwoa2UsZm4pfDA7dmFyIG5yPShVKyhF'@;
put 'PUUrTWF0aC5pbXVsKFJlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsdG4pfDApK01hdGguaW11bChJZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChJZSx0bil8MCkrKG0+Pj4xMyl8MCkrKG5yPj4+MjYpfDAsbnImPTY3MTA4ODYzLEU9TWF0aC5pbXVs'@;
put 'KE5lLFdlKSxtPShtPU1hdGguaW11bChOZSxBdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEV0KXwwKStNYXRoLmltdWwoS2UsaHQpfDAsQT1BK01hdGguaW11bChLZSxFdCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKHl0LGFuKXwwLG09KG09bStNYXRoLmltdWwoeXQsanQpfDApK01hdGguaW11bChNdCxhbil8MCxBPUErTWF0aC5pbXVsKE10LGp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRo'@;
put 'LmltdWwoSmUsZm4pfDA7dmFyIG9hPShVKyhFPUUrTWF0aC5pbXVsKERlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoRGUsdG4pfDApK01hdGguaW11bChrZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChrZSx0bil8MCkrKG0+Pj4xMyl8MCkrKG9hPj4+MjYp'@;
put 'fDAsb2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGh0KSxtPShtPU1hdGguaW11bChOZSxFdCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCxFdCksRT1FK01hdGguaW11bChydCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGp0KXwwKStNYXRoLmltdWwoS2UsYW4pfDAs'@;
put 'QT1BK01hdGguaW11bChLZSxqdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciBfYT0oVSsoRT1FK01hdGguaW11bChudCxRdCl8MCl8MCkrKCg4MTkxJihtPSht'@;
put 'PW0rTWF0aC5pbXVsKG50LHRuKXwwKStNYXRoLmltdWwoSmUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSmUsdG4pfDApKyhtPj4+MTMpfDApKyhfYT4+PjI2KXwwLF9hJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxhbiksbT0obT1NYXRoLmltdWwoTmUsanQpKStNYXRoLmlt'@;
put 'dWwodXQsYW4pfDAsQT1NYXRoLmltdWwodXQsanQpLEU9RStNYXRoLmltdWwocnQsY24pfDAsbT0obT1tK01hdGguaW11bChydCxmbil8MCkrTWF0aC5pbXVsKEtlLGNuKXwwLEE9QStNYXRoLmltdWwoS2UsZm4pfDA7dmFyIE9hPShVKyhFPUUrTWF0aC5pbXVsKHl0LFF0KXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwoeXQsdG4pfDApK01hdGguaW11bChNdCxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChNdCx0bil8MCkrKG0+Pj4xMyl8MCkrKE9hPj4+MjYpfDAsT2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGNuKSxtPShtPU1hdGguaW11bChOZSxmbikp'@;
put 'K01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIE5hPShVKyhFPUUrTWF0aC5pbXVsKHJ0LFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsdG4pfDApK01hdGguaW11bChLZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChLZSx0bil8'@;
put 'MCkrKG0+Pj4xMyl8MCkrKE5hPj4+MjYpfDAsTmEmPTY3MTA4ODYzO3ZhciBlaT0oVSsoRT1NYXRoLmltdWwoTmUsUXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKE5lLHRuKSkrTWF0aC5pbXVsKHV0LFF0KXwwKSk8PDEzKXwwO3JldHVybiBVPSgoQT1NYXRoLmltdWwodXQsdG4pKSso'@;
put 'bT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsVlswXT1jYSxWWzFdPXhpLFZbMl09eXIsVlszXT1HbixWWzRdPUtpLFZbNV09SnIsVls2XT1RcixWWzddPU5pLFZbOF09SGksVls5XT1JYSxWWzEwXT1QcixWWzExXT1ZaSxWWzEyXT1mYSxWWzEzXT1ucixWWzE0XT1vYSxWWzE1'@;
put 'XT1fYSxWWzE2XT1PYSxWWzE3XT1OYSxWWzE4XT1laSwwIT09VSYmKFZbMTldPVUseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gUSh6LGcseSl7cmV0dXJuKG5ldyBxKS5tdWxwKHosZyx5KX1mdW5jdGlvbiBxKHosZyl7dGhpcy54PXosdGhpcy55PWd9TWF0aC5pbXVsfHwoWj1XKSx3LnByb3Rv'@;
put 'dHlwZS5tdWxUbz1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9aKHRoaXMsZyx5KTpDPDYzP1codGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBYKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVn'@;
put 'YXRpdmVeei5uZWdhdGl2ZSx5Lmxlbmd0aD16Lmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBWPUM7Qz0wO2Zvcih2YXIgVT02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC16Lmxlbmd0aCsx'@;
put 'KTttPD1FO20rKyl7dmFyIGxlPSgwfHoud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksd2U9NjcxMDg4NjMmbGU7VT02NzEwODg2MyYod2U9d2UrVXwwKSxDKz0oVj0oVj1WKyhsZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixWJj02NzEwODg2M315LndvcmRzW1RdPVUseD1W'@;
put 'LFY9Q31yZXR1cm4gMCE9PXg/eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6USh0aGlzLGcseSkseH0scS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9'@;
put 'MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxxLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30scS5w'@;
put 'cm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsVil7Zm9yKHZhciBVPTA7VTxWO1UrKylDW1VdPXlbZ1tVXV0sVFtVXT14W2dbVV1dfSxxLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULFYpe3RoaXMucGVybXV0ZShWLGcseSx4LEMsVCk7Zm9yKHZhciBV'@;
put 'PTE7VTxUO1U8PD0xKWZvcih2YXIgRT1VPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sbGU9QSx3ZT0wO3dlPFU7d2UrKyl7dmFyIFplPXhbYWUrd2VdLFFlPUNbYWUrd2VdLGF0PXhbYWUrd2Ur'@;
put 'VV0seGU9Q1thZSt3ZStVXSx2ZT1uZSphdC1sZSp4ZTt4ZT1uZSp4ZStsZSphdCx4W2FlK3dlXT1aZSsoYXQ9dmUpLENbYWUrd2VdPVFlK3hlLHhbYWUrd2UrVV09WmUtYXQsQ1thZSt3ZStVXT1RZS14ZSx3ZSE9PUUmJih2ZT1tKm5lLUEqbGUsbGU9bSpsZStBKm5lLG5lPXZlKX19LHEucHJv'@;
put 'dG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxxLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBD'@;
put 'PTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxxLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1h'@;
put 'dGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxxLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLFY9MDtWPHk7VisrKXhb'@;
put 'MipWXT04MTkxJihUKz0wfGdbVl0pLHhbMipWKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKFY9Mip5O1Y8QzsrK1YpeFtWXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LHEucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3gr'@;
put 'Kyl5W3hdPTA7cmV0dXJuIHl9LHEucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksVj10aGlzLnN0dWIoQyksVT1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcg'@;
put 'QXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxsZT14LndvcmRzO2xlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFUsQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5z'@;
put 'Zm9ybShVLFYsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxWLGFlLG5lLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFplPUVbd2VdKmFlW3dlXS1tW3dlXSpuZVt3ZV07bVt3ZV09RVt3ZV0qbmVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1aZX1yZXR1cm4gdGhpcy5jb25qdWdh'@;
put 'dGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxsZSxWLEMsVCksdGhpcy5jb25qdWdhdGUobGUsVixDKSx0aGlzLm5vcm1hbGl6ZTEzYihsZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90'@;
put 'eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1u'@;
put 'ZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLFEodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2'@;
put 'NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAh'@;
put 'PT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5p'@;
put 'c3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gQih6KXtmb3IodmFyIGc9bmV3IEFycmF5KHouYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ld'@;
put 'PSh6LndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5'@;
put 'Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYo'@;
put 'MCE9PXkpe3ZhciBWPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFU9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktVTw8eXxWLFY9VT4+PjI2LXl9ViYmKHRoaXMud29yZHNbVF09Vix0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9'@;
put 'dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10'@;
put 'aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixWPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxVPTY3'@;
put 'MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09VixDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxWO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9Vn1pZigwIT09VilpZih0aGlzLmxlbmd0aD5WKWZvcih0aGlzLmxlbmd0aC09VixtPTA7bTx0aGlz'@;
put 'Lmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rVl07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1tt'@;
put 'XT1BPDwyNi1UfGFlPj4+VCxBPWFlJlV9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0'@;
put 'dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0s'@;
put 'dy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlw'@;
put 'ZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjty'@;
put 'ZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5n'@;
put 'dGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2Yg'@;
put 'ZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAs'@;
put 'dGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRz'@;
put 'W3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10'@;
put 'eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYm'@;
put 'dGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRo'@;
put 'aXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgVixVPTA7Zm9yKFQ9'@;
put 'MDtUPGcubGVuZ3RoO1QrKyl7Vj0oMHx0aGlzLndvcmRzW1QreF0pK1U7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtVPSgoVi09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVn1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspVT0oVj0oMHx0'@;
put 'aGlzLndvcmRzW1QreF0pK1UpPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVjtpZigwPT09VSlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09VSksVT0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylVPShWPS0oMHx0aGlzLndvcmRzW1RdKStVKT4+MjYsdGhpcy53b3Jkc1tUXT02'@;
put 'NzEwODg2MyZWO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoVikpJiYoVD1U'@;
put 'LnVzaGxuKHgpLEMuaXVzaGxuKHgpLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7'@;
put 'QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIGxlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSso'@;
put 'MHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3IobGU9TWF0aC5taW4obGUvVnwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULGxlLG5lKTswIT09Qy5uZWdhdGl2ZTspbGUtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49'@;
put 'MSk7bSYmKG0ud29yZHNbbmVdPWxlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlz'@;
put 'LmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0'@;
put 'aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oVj10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6Vi5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFY9'@;
put 'dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6Vi5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfTox'@;
put 'PT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29y'@;
put 'ZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsVn0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9k'@;
put 'fSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5k'@;
put 'aXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLFY9eC5jbXAoQyk7cmV0dXJuIFY8MHx8MT09PVQmJjA9PT1WP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9k'@;
put 'bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3Io'@;
put 'dmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj1u'@;
put 'ZXcgdygwKSxVPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2Oysr'@;
put 'YWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgbGU9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJmxlPDI2OysrbGUsd2U8'@;
put 'PD0xKTtpZihsZT4wKWZvcih4Lml1c2hybihsZSk7bGUtLSA+MDspKFYuaXNPZGQoKXx8VS5pc09kZCgpKSYmKFYuaWFkZChtKSxVLmlzdWIoQSkpLFYuaXVzaHJuKDEpLFUuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFYpLFQuaXN1YihVKSk6KHguaXN1Yih5KSxW'@;
put 'LmlzdWIoQyksVS5pc3ViKFQpKX1yZXR1cm57YTpWLGI6VSxnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1v'@;
put 'ZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBVPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmVTwyNjsrK1UsRTw8PTEpO2lmKFU+MClmb3IoeS5pdXNocm4oVSk7VS0tID4wOylD'@;
put 'LmlzT2RkKCkmJkMuaWFkZChWKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKFYpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIo'@;
put 'eCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkp'@;
put 'cmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXku'@;
put 'aXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgVj15O3k9eCx4PVZ9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5k'@;
put 'bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRo'@;
put 'aXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxWPXg7MCE9PVQmJlY8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT0wfHRoaXMud29yZHNbVl07VD0oVSs9VCk+Pj4yNix0aGlzLndvcmRzW1ZdPVUmPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbVl09VCx0aGlzLmxlbmd0'@;
put 'aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09'@;
put 'PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRo'@;
put 'aXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJu'@;
put 'IDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBD'@;
put 'PTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlz'@;
put 'LmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0s'@;
put 'dy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFNlKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJv'@;
put 'bVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5y'@;
put 'ZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRo'@;
put 'aXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'aWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0'@;
put 'aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk'@;
put 'LnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJ'@;
put 'TXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMu'@;
put 'cmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBu'@;
put 'dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMp'@;
put 'LHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlw'@;
put 'ZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMu'@;
put 'cmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciB0ZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKHosZyl7dGhpcy5uYW1lPXosdGhpcy5w'@;
put 'PW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBzZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUu'@;
put 'Y2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2Uoeil7aWYoInN0cmluZyI9PXR5cGVvZiB6KXt2YXIgZz13Ll9wcmltZSh6KTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoei5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT16LHRoaXMucHJpbWU9'@;
put 'bnVsbH1mdW5jdGlvbiB6ZSh6KXtTZS5jYWxsKHRoaXMseiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmlt'@;
put 'b2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52'@;
put 'KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRt'@;
put 'cCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lk'@;
put 'IDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxOKHNlLGllKSxzZS5wcm90b3R5'@;
put 'cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIg'@;
put 'Vj1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPVYmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgVT0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oVSZ4KTw8NHxWPj4+MjIsVj1VfWcud29yZHNbVC0xMF09Vj4+Pj0yMixnLmxlbmd0aC09MD09PVYmJmcubGVuZ3RoPjEw'@;
put 'PzEwOjl9LHNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5'@;
put 'Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LE4oZ2UsaWUpLE4oX2UsaWUpLE4oVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5j'@;
put 'dGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcp'@;
put 'e2lmKHRlW2ddKXJldHVybiB0ZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IHNlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7'@;
put 'eT1uZXcgVGV9cmV0dXJuIHRlW2ddPXkseX0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5'@;
put 'cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3Vi'@;
put 'KGcpLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1'@;
put 'bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5j'@;
put 'bXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hs'@;
put 'PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rp'@;
put 'b24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcp'@;
put 'fSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZv'@;
put 'cih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIFY9bmV3IHcoMSkudG9SZWQodGhpcyksVT1WLnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJp'@;
put 'dExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoVSk7KW0ucmVkSUFkZChVKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksbGU9VDswIT09'@;
put 'bmUuY21wKFYpOyl7Zm9yKHZhciB3ZT1uZSxaZT0wOzAhPT13ZS5jbXAoVik7WmUrKyl3ZT13ZS5yZWRTcXIoKTtwKFplPGxlKTt2YXIgUWU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4obGUtWmUtMSkpO2FlPWFlLnJlZE11bChRZSksQT1RZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSks'@;
put 'bGU9WmV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0'@;
put 'aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKysp'@;
put 'Q1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIFY9Q1swXSxVPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtWIT09Q1sw'@;
put 'XSYmKFY9dGhpcy5zcXIoVikpLDAhPT1uZXx8MCE9PVU/KFU8PD0xLFV8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoVj10aGlzLm11bChWLENbVV0pLEU9MCxVPTApKTpFPTB9bT0yNn1yZXR1cm4gVn0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVt'@;
put 'b2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgemUoZyl9LE4oemUsU2UpLHplLnByb3Rv'@;
put 'dHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx6ZS5wcm90'@;
put 'b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMu'@;
put 'bSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihn'@;
put 'LmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlm'@;
put 'dCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11'@;
put 'bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw2NTA0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBwLEQ9YigzMTkpLF89Yig3Mjk2KTt0cnl7cD1bXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGV9Y2F0Y2goSCl7aWYoIUh8fCJvYmplY3Qi'@;
put 'IT10eXBlb2YgSHx8ISgiY29kZSJpbiBIKXx8IkVSUl9QUk9UT19BQ0NFU1MiIT09SC5jb2RlKXRocm93IEh9dmFyIE49ISFwJiZfJiZfKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLHc9T2JqZWN0LEY9dy5nZXRQcm90b3R5cGVPZjtjZS5leHBvcnRzPU4mJiJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBOLmdldD9EKFtOLmdldF0pOiJmdW5jdGlvbiI9PXR5cGVvZiBGJiZmdW5jdGlvbihSKXtyZXR1cm4gRihudWxsPT1SP1I6dyhSKSl9fSw2OTQ4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPUo7RC52ZXJzaW9uPWIoODU5NykuaTgsRC51dGlscz1iKDk1MyksRC5yYW5kPWIo'@;
put 'OTkzMSksRC5jdXJ2ZT1iKDgyNTQpLEQuY3VydmVzPWIoNTQyNyksRC5lYz1iKDc5NTQpLEQuZWRkc2E9Yig1OTgwKX0sNDkxODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3ODUpLF89Yig5NTMpLHA9Xy5nZXROQUYsTj1fLmdldEpTRix3PV8uYXNzZXJ0O2Z1bmN0aW9uIEYo'@;
put 'UixqKXt0aGlzLnR5cGU9Uix0aGlzLnA9bmV3IEQoai5wLDE2KSx0aGlzLnJlZD1qLnByaW1lP0QucmVkKGoucHJpbWUpOkQubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgRCgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IEQoMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5l'@;
put 'dyBEKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ai5uJiZuZXcgRChqLm4sMTYpLHRoaXMuZz1qLmcmJnRoaXMucG9pbnRGcm9tSlNPTihqLmcsai5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJh'@;
put 'eSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIFA9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IVB8fFAuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0'@;
put 'aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gSChSLGope3RoaXMuY3VydmU9Uix0aGlzLnR5cGU9aix0aGlzLnByZWNvbXB1dGVkPW51bGx9Y2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVt'@;
put 'ZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxGLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oaixQKXt3KGoucHJlY29tcHV0ZWQpO3ZhciBMPWouX2dldERvdWJsZXMoKSxZPXAoUCwxLHRo'@;
put 'aXMuX2JpdExlbmd0aCksQj0oMTw8TC5zdGVwKzEpLShMLnN0ZXAlMj09MD8yOjEpO0IvPTM7dmFyIFosWCxXPVtdO2ZvcihaPTA7WjxZLmxlbmd0aDtaKz1MLnN0ZXApe1g9MDtmb3IodmFyIFE9WitMLnN0ZXAtMTtRPj1aO1EtLSlYPShYPDwxKStZW1FdO1cucHVzaChYKX1mb3IodmFyIHE9'@;
put 'dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHRlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpZT1CO2llPjA7aWUtLSl7Zm9yKFo9MDtaPFcubGVuZ3RoO1orKykoWD1XW1pdKT09PWllP3RlPXRlLm1peGVkQWRkKEwucG9pbnRzW1pdKTpYPT09LWllJiYodGU9dGUubWl4ZWRBZGQo'@;
put 'TC5wb2ludHNbWl0ubmVnKCkpKTtxPXEuYWRkKHRlKX1yZXR1cm4gcS50b1AoKX0sRi5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oaixQKXtmb3IodmFyIEw9NCxZPWouX2dldE5BRlBvaW50cyhMKSxCPVkucG9pbnRzLFc9cChQLEw9WS53bmQsdGhpcy5fYml0TGVuZ3RoKSxaPXRoaXMu'@;
put 'anBvaW50KG51bGwsbnVsbCxudWxsKSxYPVcubGVuZ3RoLTE7WD49MDtYLS0pe2Zvcih2YXIgUT0wO1g+PTAmJjA9PT1XW1hdO1gtLSlRKys7aWYoWD49MCYmUSsrLFo9Wi5kYmxwKFEpLFg8MClicmVhazt2YXIgcT1XW1hdO3coMCE9PXEpLFo9ImFmZmluZSI9PT1qLnR5cGU/Wi5taXhlZEFk'@;
put 'ZChxPjA/QltxLTE+PjFdOkJbLXEtMT4+MV0ubmVnKCkpOlouYWRkKHE+MD9CW3EtMT4+MV06QlstcS0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT1qLnR5cGU/Wi50b1AoKTpafSxGLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihqLFAsTCxZLEIpe3ZhciBxLHRlLGllLFc9'@;
put 'dGhpcy5fd25hZlQxLFo9dGhpcy5fd25hZlQyLFg9dGhpcy5fd25hZlQzLFE9MDtmb3IocT0wO3E8WTtxKyspe3ZhciBzZT0oaWU9UFtxXSkuX2dldE5BRlBvaW50cyhqKTtXW3FdPXNlLnduZCxaW3FdPXNlLnBvaW50c31mb3IocT1ZLTE7cT49MTtxLT0yKXt2YXIgZ2U9cS0xLF9lPXE7aWYo'@;
put 'MT09PVdbZ2VdJiYxPT09V1tfZV0pe3ZhciBUZT1bUFtnZV0sbnVsbCxudWxsLFBbX2VdXTswPT09UFtnZV0ueS5jbXAoUFtfZV0ueSk/KFRlWzFdPVBbZ2VdLmFkZChQW19lXSksVGVbMl09UFtnZV0udG9KKCkubWl4ZWRBZGQoUFtfZV0ubmVnKCkpKTowPT09UFtnZV0ueS5jbXAoUFtfZV0u'@;
put 'eS5yZWROZWcoKSk/KFRlWzFdPVBbZ2VdLnRvSigpLm1peGVkQWRkKFBbX2VdKSxUZVsyXT1QW2dlXS5hZGQoUFtfZV0ubmVnKCkpKTooVGVbMV09UFtnZV0udG9KKCkubWl4ZWRBZGQoUFtfZV0pLFRlWzJdPVBbZ2VdLnRvSigpLm1peGVkQWRkKFBbX2VdLm5lZygpKSk7dmFyIFNlPVstMywt'@;
put 'MSwtNSwtNywwLDcsNSwxLDNdLHplPU4oTFtnZV0sTFtfZV0pO2ZvcihRPU1hdGgubWF4KHplWzBdLmxlbmd0aCxRKSxYW2dlXT1uZXcgQXJyYXkoUSksWFtfZV09bmV3IEFycmF5KFEpLHRlPTA7dGU8UTt0ZSsrKVhbZ2VdW3RlXT1TZVszKigxKygwfHplWzBdW3RlXSkpKygxKygwfHplWzFd'@;
put 'W3RlXSkpXSxYW19lXVt0ZV09MCxaW2dlXT1UZX1lbHNlIFhbZ2VdPXAoTFtnZV0sV1tnZV0sdGhpcy5fYml0TGVuZ3RoKSxYW19lXT1wKExbX2VdLFdbX2VdLHRoaXMuX2JpdExlbmd0aCksUT1NYXRoLm1heChYW2dlXS5sZW5ndGgsUSksUT1NYXRoLm1heChYW19lXS5sZW5ndGgsUSl9dmFy'@;
put 'IHk9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHg9dGhpcy5fd25hZlQ0O2ZvcihxPVE7cT49MDtxLS0pe2Zvcih2YXIgQz0wO3E+PTA7KXt2YXIgVD0hMDtmb3IodGU9MDt0ZTxZO3RlKyspeFt0ZV09MHxYW3RlXVtxXSwwIT09eFt0ZV0mJihUPSExKTtpZighVClicmVhaztDKysscS0t'@;
put 'fWlmKHE+PTAmJkMrKyx5PXkuZGJscChDKSxxPDApYnJlYWs7Zm9yKHRlPTA7dGU8WTt0ZSsrKXt2YXIgVj14W3RlXTswIT09ViYmKFY+MD9pZT1aW3RlXVtWLTE+PjFdOlY8MCYmKGllPVpbdGVdWy1WLTE+PjFdLm5lZygpKSx5PSJhZmZpbmUiPT09aWUudHlwZT95Lm1peGVkQWRkKGllKTp5'@;
put 'LmFkZChpZSkpfX1mb3IocT0wO3E8WTtxKyspWltxXT1udWxsO3JldHVybiBCP3k6eS50b1AoKX0sRi5CYXNlUG9pbnQ9SCxILnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEgucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LEYucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGosUCl7aj1fLnRvQXJyYXkoaixQKTt2YXIgTD10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09alswXXx8Nj09PWpbMF18fDc9PT1qWzBdKSYmai5sZW5ndGgtMT09MipM'@;
put 'KXJldHVybiA2PT09alswXT93KGpbai5sZW5ndGgtMV0lMj09MCk6Nz09PWpbMF0mJncoaltqLmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KGouc2xpY2UoMSwxK0wpLGouc2xpY2UoMStMLDErMipMKSk7aWYoKDI9PT1qWzBdfHwzPT09alswXSkmJmoubGVuZ3RoLTE9PT1MKXJldHVybiB0'@;
put 'aGlzLnBvaW50RnJvbVgoai5zbGljZSgxLDErTCksMz09PWpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sSC5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5lbmNvZGUoaiwhMCl9LEgucHJvdG90eXBlLl9lbmNv'@;
put 'ZGU9ZnVuY3Rpb24oail7dmFyIFA9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxMPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixQKTtyZXR1cm4gaj9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoTCk6WzRdLmNvbmNhdChMLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixQKSl9'@;
put 'LEgucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihqLFApe3JldHVybiBfLmVuY29kZSh0aGlzLl9lbmNvZGUoUCksail9LEgucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oail7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgUD17ZG91YmxlczpudWxsLG5hZjpudWxs'@;
put 'LGJldGE6bnVsbH07cmV0dXJuIFAubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxQLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LGopLFAuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1QLHRoaXN9LEgucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKGope2lm'@;
put 'KCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBQPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIVAmJlAucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKChqLmJpdExlbmd0aCgpKzEpL1Auc3RlcCl9LEgucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKGosUCl7aWYo'@;
put 'dGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBMPVt0aGlzXSxZPXRoaXMsQj0wO0I8UDtCKz1qKXtmb3IodmFyIFc9MDtXPGo7VysrKVk9WS5kYmwoKTtMLnB1c2goWSl9cmV0dXJue3N0ZXA6'@;
put 'aixwb2ludHM6TH19LEgucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oail7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgUD1bdGhpc10sTD0oMTw8aiktMSxZPTE9PT1MP251bGw6dGhp'@;
put 'cy5kYmwoKSxCPTE7QjxMO0IrKylQW0JdPVBbQi0xXS5hZGQoWSk7cmV0dXJue3duZDpqLHBvaW50czpQfX0sSC5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sSC5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihqKXtmb3IodmFyIFA9dGhpcyxMPTA7TDxqO0wrKylQ'@;
put 'PVAuZGJsKCk7cmV0dXJuIFB9fSwxMTM4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTUzKSxfPWIoMzc4NSkscD1iKDU3MTcpLE49Yig0OTE4KSx3PUQuYXNzZXJ0O2Z1bmN0aW9uIEYoUil7dGhpcy50d2lzdGVkPTEhPSgwfFIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQm'@;
put 'Ji0xPT0oMHxSLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxOLmNhbGwodGhpcywiZWR3YXJkcyIsUiksdGhpcy5hPW5ldyBfKFIuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oUi5jLDE2KS50b1JlZCh0aGlzLnJl'@;
put 'ZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKFIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfFIuYyl9ZnVu'@;
put 'Y3Rpb24gSChSLGosUCxMLFkpe04uQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVsbD09PWomJm51bGw9PT1QJiZudWxsPT09TD8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlz'@;
put 'LmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKGosMTYpLHRoaXMueT1uZXcgXyhQLDE2KSx0aGlzLno9TD9uZXcgXyhMLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9WSYmbmV3IF8oWSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2'@;
put 'ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQp'@;
put 'KSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9cChGLE4pLGNlLmV4cG9y'@;
put 'dHM9RixGLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5tT25lQT9qLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoail9LEYucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLm9uZUM/ajp0aGlzLmMucmVkTXVsKGopfSxGLnByb3RvdHlwZS5qcG9p'@;
put 'bnQ9ZnVuY3Rpb24oaixQLEwsWSl7cmV0dXJuIHRoaXMucG9pbnQoaixQLEwsWSl9LEYucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oaixQKXsoaj1uZXcgXyhqLDE2KSkucmVkfHwoaj1qLnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ai5yZWRTcXIoKSxZPXRoaXMuYzIucmVkU3ViKHRo'@;
put 'aXMuYS5yZWRNdWwoTCkpLEI9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEwpKSxXPVkucmVkTXVsKEIucmVkSW52bSgpKSxaPVcucmVkU3FydCgpO2lmKDAhPT1aLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'ImludmFsaWQgcG9pbnQiKTt2YXIgWD1aLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihQJiYhWHx8IVAmJlgpJiYoWj1aLnJlZE5lZygpKSx0aGlzLnBvaW50KGosWil9LEYucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oaixQKXsoaj1uZXcgXyhqLDE2KSkucmVkfHwoaj1qLnRvUmVk'@;
put 'KHRoaXMucmVkKSk7dmFyIEw9ai5yZWRTcXIoKSxZPUwucmVkU3ViKHRoaXMuYzIpLEI9TC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVz1ZLnJlZE11bChCLnJlZEludm0oKSk7aWYoMD09PVcuY21wKHRoaXMuemVybykpe2lmKFApdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLGopfXZhciBaPVcucmVkU3FydCgpO2lmKDAhPT1aLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gWi5mcm9tUmVkKCku'@;
put 'aXNPZGQoKSE9PVAmJihaPVoucmVkTmVnKCkpLHRoaXMucG9pbnQoWixqKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oail7aWYoai5pc0luZmluaXR5KCkpcmV0dXJuITA7ai5ub3JtYWxpemUoKTt2YXIgUD1qLngucmVkU3FyKCksTD1qLnkucmVkU3FyKCksWT1QLnJlZE11bCh0'@;
put 'aGlzLmEpLnJlZEFkZChMKSxCPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKFApLnJlZE11bChMKSkpO3JldHVybiAwPT09WS5jbXAoQil9LHAoSCxOLkJhc2VQb2ludCksRi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihqKXtyZXR1cm4gSC5m'@;
put 'cm9tSlNPTih0aGlzLGopfSxGLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihqLFAsTCxZKXtyZXR1cm4gbmV3IEgodGhpcyxqLFAsTCxZKX0sSC5mcm9tSlNPTj1mdW5jdGlvbihqLFApe3JldHVybiBuZXcgSChqLFBbMF0sUFsxXSxQWzJdKX0sSC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9T'@;
put 'dHJpbmcoMTYsMikrIj4ifSxILnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEgucHJvdG90eXBlLl9leHREYmw9'@;
put 'ZnVuY3Rpb24oKXt2YXIgaj10aGlzLngucmVkU3FyKCksUD10aGlzLnkucmVkU3FyKCksTD10aGlzLnoucmVkU3FyKCk7TD1MLnJlZElBZGQoTCk7dmFyIFk9dGhpcy5jdXJ2ZS5fbXVsQShqKSxCPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKGopLnJlZElTdWIoUCks'@;
put 'Vz1ZLnJlZEFkZChQKSxaPVcucmVkU3ViKEwpLFg9WS5yZWRTdWIoUCksUT1CLnJlZE11bChaKSxxPVcucmVkTXVsKFgpLHRlPUIucmVkTXVsKFgpLGllPVoucmVkTXVsKFcpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFEscSxpZSx0ZSl9LEgucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9u'@;
put 'KCl7dmFyIFksQixXLFosWCxRLGo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLFA9dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIHE9KFo9dGhpcy5jdXJ2ZS5fbXVsQShQKSkucmVkQWRkKEwpO3RoaXMuek9uZT8oWT1q'@;
put 'LnJlZFN1YihQKS5yZWRTdWIoTCkucmVkTXVsKHEucmVkU3ViKHRoaXMuY3VydmUudHdvKSksQj1xLnJlZE11bChaLnJlZFN1YihMKSksVz1xLnJlZFNxcigpLnJlZFN1YihxKS5yZWRTdWIocSkpOihYPXRoaXMuei5yZWRTcXIoKSxRPXEucmVkU3ViKFgpLnJlZElTdWIoWCksWT1qLnJlZFN1'@;
put 'YihQKS5yZWRJU3ViKEwpLnJlZE11bChRKSxCPXEucmVkTXVsKFoucmVkU3ViKEwpKSxXPXEucmVkTXVsKFEpKX1lbHNlIFo9UC5yZWRBZGQoTCksWD10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksUT1aLnJlZFN1YihYKS5yZWRTdWIoWCksWT10aGlzLmN1cnZlLl9tdWxDKGou'@;
put 'cmVkSVN1YihaKSkucmVkTXVsKFEpLEI9dGhpcy5jdXJ2ZS5fbXVsQyhaKS5yZWRNdWwoUC5yZWRJU3ViKEwpKSxXPVoucmVkTXVsKFEpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksQixXKX0sSC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3Ro'@;
put 'aXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEgucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oail7dmFyIFA9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChqLnkucmVkU3ViKGoueCkpLEw9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJl'@;
put 'ZE11bChqLnkucmVkQWRkKGoueCkpLFk9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoai50KSxCPXRoaXMuei5yZWRNdWwoai56LnJlZEFkZChqLnopKSxXPUwucmVkU3ViKFApLFo9Qi5yZWRTdWIoWSksWD1CLnJlZEFkZChZKSxRPUwucmVkQWRkKFApLHE9Vy5yZWRNdWwo'@;
put 'WiksdGU9WC5yZWRNdWwoUSksaWU9Vy5yZWRNdWwoUSksc2U9Wi5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocSx0ZSxzZSxpZSl9LEgucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKGope3ZhciB0ZSxpZSxQPXRoaXMuei5yZWRNdWwoai56KSxMPVAucmVkU3FyKCksWT10'@;
put 'aGlzLngucmVkTXVsKGoueCksQj10aGlzLnkucmVkTXVsKGoueSksVz10aGlzLmN1cnZlLmQucmVkTXVsKFkpLnJlZE11bChCKSxaPUwucmVkU3ViKFcpLFg9TC5yZWRBZGQoVyksUT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKGoueC5yZWRBZGQoai55KSkucmVkSVN1YihZKS5yZWRJ'@;
put 'U3ViKEIpLHE9UC5yZWRNdWwoWikucmVkTXVsKFEpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KHRlPVAucmVkTXVsKFgpLnJlZE11bChCLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKFkpKSksaWU9Wi5yZWRNdWwoWCkpOih0ZT1QLnJlZE11bChYKS5yZWRNdWwoQi5yZWRTdWIoWSkpLGll'@;
put 'PXRoaXMuY3VydmUuX211bEMoWikucmVkTXVsKFgpKSx0aGlzLmN1cnZlLnBvaW50KHEsdGUsaWUpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP2o6ai5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFk'@;
put 'ZChqKTp0aGlzLl9wcm9qQWRkKGopfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoaik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxqKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsail9LEgucHJvdG90eXBlLm11bEFkZD1mdW5jdGlv'@;
put 'bihqLFAsTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxQXSxbaixMXSwyLCExKX0sSC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihqLFAsTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxQXSxbaixMXSwyLCEwKX0sSC5wcm90b3R5cGUu'@;
put 'bm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBqPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKGopLHRoaXMueT10aGlzLnkucmVkTXVsKGopLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKGopKSx0aGlzLno9'@;
put 'dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sSC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LEgucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxILnByb3RvdHlwZS5lcT1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcz09PWp8fDA9PT10'@;
put 'aGlzLmdldFgoKS5jbXAoai5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKGouZ2V0WSgpKX0sSC5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGope3ZhciBQPWoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKFApKXJldHVybiEwO2Zv'@;
put 'cih2YXIgTD1qLmNsb25lKCksWT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoTC5pYWRkKHRoaXMuY3VydmUubiksTC5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihQLnJlZElBZGQoWSksMD09PXRoaXMueC5jbXAoUCkpcmV0dXJuITB9fSxILnByb3RvdHlw'@;
put 'ZS50b1A9SC5wcm90b3R5cGUubm9ybWFsaXplLEgucHJvdG90eXBlLm1peGVkQWRkPUgucHJvdG90eXBlLmFkZH0sODI1NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1KO0QuYmFzZT1iKDQ5MTgpLEQuc2hvcnQ9Yig2NjczKSxELm1vbnQ9YigyODgxKSxELmVkd2FyZHM9YigxMTM4'@;
put 'KX0sMjg4MTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3ODUpLF89Yig1NzE3KSxwPWIoNDkxOCksTj1iKDk1Myk7ZnVuY3Rpb24gdyhIKXtwLmNhbGwodGhpcywibW9udCIsSCksdGhpcy5hPW5ldyBEKEguYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgRChILmIs'@;
put 'MTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBEKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IEQoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBGKEgsUixqKXtw'@;
put 'LkJhc2VQb2ludC5jYWxsKHRoaXMsSCwicHJvamVjdGl2ZSIpLG51bGw9PT1SJiZudWxsPT09aj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IEQoUiwxNiksdGhpcy56PW5ldyBEKGosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhp'@;
put 'cy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9Xyh3LHApLGNlLmV4cG9ydHM9dyx3LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihSKXt2YXIgaj1SLm5vcm1hbGl6ZSgpLngsUD1qLnJlZFNxcigp'@;
put 'LEw9UC5yZWRNdWwoaikucmVkQWRkKFAucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChqKTtyZXR1cm4gMD09PUwucmVkU3FydCgpLnJlZFNxcigpLmNtcChMKX0sXyhGLHAuQmFzZVBvaW50KSx3LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihSLGope3JldHVybiB0aGlzLnBvaW50KE4u'@;
put 'dG9BcnJheShSLGopLDEpfSx3LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihSLGope3JldHVybiBuZXcgRih0aGlzLFIsail9LHcucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oUil7cmV0dXJuIEYuZnJvbUpTT04odGhpcyxSKX0sRi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5j'@;
put 'dGlvbigpe30sRi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LEYuZnJvbUpTT049ZnVuY3Rpb24oUixqKXtyZXR1cm4gbmV3IEYoUixqWzBdLGpbMV18fFIub25lKX0sRi5wcm90'@;
put 'b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxG'@;
put 'LnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIGo9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLFk9ai5yZWRT'@;
put 'dWIoTCksQj1qLnJlZE11bChMKSxXPVkucmVkTXVsKEwucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChZKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsVyl9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29t'@;
put 'ZXJ5IGN1cnZlIil9LEYucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oUixqKXt2YXIgUD10aGlzLngucmVkQWRkKHRoaXMueiksTD10aGlzLngucmVkU3ViKHRoaXMueiksWT1SLngucmVkQWRkKFIueiksVz1SLngucmVkU3ViKFIueikucmVkTXVsKFApLFo9WS5yZWRNdWwoTCksWD1qLnou'@;
put 'cmVkTXVsKFcucmVkQWRkKFopLnJlZFNxcigpKSxRPWoueC5yZWRNdWwoVy5yZWRJU3ViKFopLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChYLFEpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oUil7Zm9yKHZhciBqPVIuY2xvbmUoKSxQPXRoaXMsTD10aGlzLmN1cnZlLnBv'@;
put 'aW50KG51bGwsbnVsbCksQj1bXTswIT09ai5jbXBuKDApO2ouaXVzaHJuKDEpKUIucHVzaChqLmFuZGxuKDEpKTtmb3IodmFyIFc9Qi5sZW5ndGgtMTtXPj0wO1ctLSkwPT09QltXXT8oUD1QLmRpZmZBZGQoTCx0aGlzKSxMPUwuZGJsKCkpOihMPVAuZGlmZkFkZChMLHRoaXMpLFA9UC5kYmwo'@;
put 'KSk7cmV0dXJuIEx9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LEYucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9u'@;
put 'dGdvbWVyeSBjdXJ2ZSIpfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbihSKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChSLmdldFgoKSl9LEYucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlz'@;
put 'Lno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NjczOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTUzKSxfPWIoMzc4NSkscD1iKDU3MTcpLE49Yig0OTE4'@;
put 'KSx3PUQuYXNzZXJ0O2Z1bmN0aW9uIEYoail7Ti5jYWxsKHRoaXMsInNob3J0IixqKSx0aGlzLmE9bmV3IF8oai5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBfKGouYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0w'@;
put 'PT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oaiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1u'@;
put 'ZXcgQXJyYXkoNCl9ZnVuY3Rpb24gSChqLFAsTCxZKXtOLkJhc2VQb2ludC5jYWxsKHRoaXMsaiwiYWZmaW5lIiksbnVsbD09PVAmJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgXyhQLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksWSYm'@;
put 'KHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkp'@;
put 'LHRoaXMuaW5mPSExKX1mdW5jdGlvbiBSKGosUCxMLFkpe04uQmFzZVBvaW50LmNhbGwodGhpcyxqLCJqYWNvYmlhbiIpLG51bGw9PT1QJiZudWxsPT09TCYmbnVsbD09PVk/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBfKDApKToodGhp'@;
put 'cy54PW5ldyBfKFAsMTYpLHRoaXMueT1uZXcgXyhMLDE2KSx0aGlzLno9bmV3IF8oWSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVk'@;
put 'fHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1wKEYsTiksY2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oUCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4m'@;
put 'JjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsWTtpZihQLmJldGEpTD1uZXcgXyhQLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBCPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO0w9KEw9QlswXS5jbXAoQlsxXSk8MD9CWzBdOkJbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihQ'@;
put 'LmxhbWJkYSlZPW5ldyBfKFAubGFtYmRhLDE2KTtlbHNle3ZhciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChMKSk/WT1XWzBdOncoMD09PXRoaXMuZy5tdWwoWT1XWzFdKS54LmNtcCh0aGlzLmcueC5yZWRN'@;
put 'dWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpZLGJhc2lzOlAuYmFzaXM/UC5iYXNpcy5tYXAoZnVuY3Rpb24oWCl7cmV0dXJue2E6bmV3IF8oWC5hLDE2KSxiOm5ldyBfKFguYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKFkpfX19LEYucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVu'@;
put 'Y3Rpb24oUCl7dmFyIEw9UD09PXRoaXMucD90aGlzLnJlZDpfLm1vbnQoUCksWT1uZXcgXygyKS50b1JlZChMKS5yZWRJbnZtKCksQj1ZLnJlZE5lZygpLFc9bmV3IF8oMykudG9SZWQoTCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChZKTtyZXR1cm5bQi5yZWRBZGQoVykuZnJvbVJlZCgp'@;
put 'LEIucmVkU3ViKFcpLmZyb21SZWQoKV19LEYucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oUCl7Zm9yKHZhciBxLHRlLGllLHNlLGdlLF9lLFRlLHplLHosTD10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLFk9UCxCPXRoaXMubi5jbG9uZSgp'@;
put 'LFc9bmV3IF8oMSksWj1uZXcgXygwKSxYPW5ldyBfKDApLFE9bmV3IF8oMSksU2U9MDswIT09WS5jbXBuKDApOyl7dmFyIGc9Qi5kaXYoWSk7emU9Qi5zdWIoZy5tdWwoWSkpLHo9WC5zdWIoZy5tdWwoVykpO3ZhciB5PVEuc3ViKGcubXVsKFopKTtpZighaWUmJnplLmNtcChMKTwwKXE9VGUu'@;
put 'bmVnKCksdGU9VyxpZT16ZS5uZWcoKSxzZT16O2Vsc2UgaWYoaWUmJjI9PSsrU2UpYnJlYWs7VGU9emUsQj1ZLFk9emUsWD1XLFc9eixRPVosWj15fWdlPXplLm5lZygpLF9lPXo7dmFyIHg9aWUuc3FyKCkuYWRkKHNlLnNxcigpKTtyZXR1cm4gZ2Uuc3FyKCkuYWRkKF9lLnNxcigpKS5jbXAo'@;
put 'eCk+PTAmJihnZT1xLF9lPXRlKSxpZS5uZWdhdGl2ZSYmKGllPWllLm5lZygpLHNlPXNlLm5lZygpKSxnZS5uZWdhdGl2ZSYmKGdlPWdlLm5lZygpLF9lPV9lLm5lZygpKSxbe2E6aWUsYjpzZX0se2E6Z2UsYjpfZX1dfSxGLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKFApe3ZhciBM'@;
put 'PXRoaXMuZW5kby5iYXNpcyxZPUxbMF0sQj1MWzFdLFc9Qi5iLm11bChQKS5kaXZSb3VuZCh0aGlzLm4pLFo9WS5iLm5lZygpLm11bChQKS5kaXZSb3VuZCh0aGlzLm4pLFg9Vy5tdWwoWS5hKSxRPVoubXVsKEIuYSkscT1XLm11bChZLmIpLHRlPVoubXVsKEIuYik7cmV0dXJue2sxOlAuc3Vi'@;
put 'KFgpLnN1YihRKSxrMjpxLmFkZCh0ZSkubmVnKCl9fSxGLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFAsTCl7KFA9bmV3IF8oUCwxNikpLnJlZHx8KFA9UC50b1JlZCh0aGlzLnJlZCkpO3ZhciBZPVAucmVkU3FyKCkucmVkTXVsKFApLnJlZElBZGQoUC5yZWRNdWwodGhpcy5hKSku'@;
put 'cmVkSUFkZCh0aGlzLmIpLEI9WS5yZWRTcXJ0KCk7aWYoMCE9PUIucmVkU3FyKCkucmVkU3ViKFkpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBXPUIuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihCPUIucmVkTmVn'@;
put 'KCkpLHRoaXMucG9pbnQoUCxCKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oUCl7aWYoUC5pbmYpcmV0dXJuITA7dmFyIEw9UC54LFk9UC55LEI9dGhpcy5hLnJlZE11bChMKSxXPUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoQikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAw'@;
put 'PT09WS5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9LEYucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihQLEwsWSl7Zm9yKHZhciBCPXRoaXMuX2VuZG9XbmFmVDEsVz10aGlzLl9lbmRvV25hZlQyLFo9MDtaPFAubGVuZ3RoO1orKyl7dmFyIFg9dGhpcy5fZW5kb1NwbGl0'@;
put 'KExbWl0pLFE9UFtaXSxxPVEuX2dldEJldGEoKTtYLmsxLm5lZ2F0aXZlJiYoWC5rMS5pbmVnKCksUT1RLm5lZyghMCkpLFguazIubmVnYXRpdmUmJihYLmsyLmluZWcoKSxxPXEubmVnKCEwKSksQlsyKlpdPVEsQlsyKlorMV09cSxXWzIqWl09WC5rMSxXWzIqWisxXT1YLmsyfWZvcih2YXIg'@;
put 'dGU9dGhpcy5fd25hZk11bEFkZCgxLEIsVywyKlosWSksaWU9MDtpZTwyKlo7aWUrKylCW2llXT1udWxsLFdbaWVdPW51bGw7cmV0dXJuIHRlfSxwKEgsTi5CYXNlUG9pbnQpLEYucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFAsTCxZKXtyZXR1cm4gbmV3IEgodGhpcyxQLEwsWSl9LEYucHJv'@;
put 'dG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oUCxMKXtyZXR1cm4gSC5mcm9tSlNPTih0aGlzLFAsTCl9LEgucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgUD10aGlzLnByZWNvbXB1dGVkO2lmKFAmJlAuYmV0YSlyZXR1cm4gUC5iZXRh'@;
put 'O3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihQKXt2YXIgWT10aGlzLmN1cnZlLEI9ZnVuY3Rpb24oVyl7cmV0dXJuIFkucG9pbnQoVy54LnJlZE11bChZLmVuZG8uYmV0YSksVy55KX07UC5iZXRhPUwsTC5wcmVj'@;
put 'b21wdXRlZD17YmV0YTpudWxsLG5hZjpQLm5hZiYme3duZDpQLm5hZi53bmQscG9pbnRzOlAubmFmLnBvaW50cy5tYXAoQil9LGRvdWJsZXM6UC5kb3VibGVzJiZ7c3RlcDpQLmRvdWJsZXMuc3RlcCxwb2ludHM6UC5kb3VibGVzLnBvaW50cy5tYXAoQil9fX1yZXR1cm4gTH19LEgucHJvdG90'@;
put 'eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJl'@;
put 'Y29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LEguZnJvbUpTT049'@;
put 'ZnVuY3Rpb24oUCxMLFkpeyJzdHJpbmciPT10eXBlb2YgTCYmKEw9SlNPTi5wYXJzZShMKSk7dmFyIEI9UC5wb2ludChMWzBdLExbMV0sWSk7aWYoIUxbMl0pcmV0dXJuIEI7ZnVuY3Rpb24gVyhYKXtyZXR1cm4gUC5wb2ludChYWzBdLFhbMV0sWSl9dmFyIFo9TFsyXTtyZXR1cm4gQi5wcmVj'@;
put 'b21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6Wi5kb3VibGVzJiZ7c3RlcDpaLmRvdWJsZXMuc3RlcCxwb2ludHM6W0JdLmNvbmNhdChaLmRvdWJsZXMucG9pbnRzLm1hcChXKSl9LG5hZjpaLm5hZiYme3duZDpaLm5hZi53bmQscG9pbnRzOltCXS5jb25jYXQoWi5uYWYucG9pbnRzLm1hcChX'@;
put 'KSl9fSxCfSxILnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmlu'@;
put 'ZygxNiwyKSsiPiJ9LEgucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihQKXtpZih0aGlzLmluZilyZXR1cm4gUDtpZihQLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKFApKXJldHVybiB0aGlzLmRibCgp'@;
put 'O2lmKHRoaXMubmVnKCkuZXEoUCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChQLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy55LnJlZFN1YihQLnkpOzAhPT1MLmNtcG4oMCkmJihMPUwucmVkTXVs'@;
put 'KHRoaXMueC5yZWRTdWIoUC54KS5yZWRJbnZtKCkpKTt2YXIgWT1MLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKFAueCksQj1MLnJlZE11bCh0aGlzLngucmVkU3ViKFkpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxCKX0sSC5wcm90b3R5cGUu'@;
put 'ZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFA9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1QLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLmN1cnZlLmEsWT10aGlzLngucmVkU3FyKCksQj1QLnJlZElu'@;
put 'dm0oKSxXPVkucmVkQWRkKFkpLnJlZElBZGQoWSkucmVkSUFkZChMKS5yZWRNdWwoQiksWj1XLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxYPVcucmVkTXVsKHRoaXMueC5yZWRTdWIoWikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCha'@;
put 'LFgpfSxILnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LEgucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFApe3JldHVybiBQPW5ldyBfKFAsMTYpLHRoaXMu'@;
put 'aXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhQKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLFApOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW1BdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsUCl9LEgucHJvdG90eXBl'@;
put 'Lm11bEFkZD1mdW5jdGlvbihQLEwsWSl7dmFyIEI9W3RoaXMsTF0sVz1bUCxZXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKEIsVyk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLEIsVywyKX0sSC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihQ'@;
put 'LEwsWSl7dmFyIEI9W3RoaXMsTF0sVz1bUCxZXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKEIsVywhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLEIsVywyLCEwKX0sSC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXM9PT1Q'@;
put 'fHx0aGlzLmluZj09PVAuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKFAueCkmJjA9PT10aGlzLnkuY21wKFAueSkpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oUCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJl'@;
put 'ZE5lZygpKTtpZihQJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgWT10aGlzLnByZWNvbXB1dGVkLEI9ZnVuY3Rpb24oVyl7cmV0dXJuIFcubmVnKCl9O0wucHJlY29tcHV0ZWQ9e25hZjpZLm5hZiYme3duZDpZLm5hZi53bmQscG9pbnRzOlkubmFmLnBvaW50cy5tYXAoQil9LGRvdWJsZXM6WS5k'@;
put 'b3VibGVzJiZ7c3RlcDpZLmRvdWJsZXMuc3RlcCxwb2ludHM6WS5kb3VibGVzLnBvaW50cy5tYXAoQil9fX1yZXR1cm4gTH0sSC5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2lu'@;
put 'dCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0scChSLE4uQmFzZVBvaW50KSxGLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oUCxMLFkpe3JldHVybiBuZXcgUih0aGlzLFAsTCxZKX0sUi5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJu'@;
put 'IHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgUD10aGlzLnoucmVkSW52bSgpLEw9UC5yZWRTcXIoKSxZPXRoaXMueC5yZWRNdWwoTCksQj10aGlzLnkucmVkTXVsKEwpLnJlZE11bChQKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChZLEIpfSxSLnByb3RvdHlwZS5uZWc9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxSLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oUCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIFA7aWYoUC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEw9UC56LnJlZFNx'@;
put 'cigpLFk9dGhpcy56LnJlZFNxcigpLEI9dGhpcy54LnJlZE11bChMKSxXPVAueC5yZWRNdWwoWSksWj10aGlzLnkucmVkTXVsKEwucmVkTXVsKFAueikpLFg9UC55LnJlZE11bChZLnJlZE11bCh0aGlzLnopKSxRPUIucmVkU3ViKFcpLHE9Wi5yZWRTdWIoWCk7aWYoMD09PVEuY21wbigwKSly'@;
put 'ZXR1cm4gMCE9PXEuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdGU9US5yZWRTcXIoKSxpZT10ZS5yZWRNdWwoUSksc2U9Qi5yZWRNdWwodGUpLGdlPXEucmVkU3FyKCkucmVkSUFkZChpZSkucmVkSVN1YihzZSkucmVkSVN1YihzZSks'@;
put 'X2U9cS5yZWRNdWwoc2UucmVkSVN1YihnZSkpLnJlZElTdWIoWi5yZWRNdWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKFAueikucmVkTXVsKFEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChnZSxfZSxUZSl9LFIucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKFApe2lmKHRoaXMuaXNJbmZp'@;
put 'bml0eSgpKXJldHVybiBQLnRvSigpO2lmKFAuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxZPXRoaXMueCxCPVAueC5yZWRNdWwoTCksVz10aGlzLnksWj1QLnkucmVkTXVsKEwpLnJlZE11bCh0aGlzLnopLFg9WS5yZWRTdWIoQiksUT1XLnJlZFN1Yiha'@;
put 'KTtpZigwPT09WC5jbXBuKDApKXJldHVybiAwIT09US5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBxPVgucmVkU3FyKCksdGU9cS5yZWRNdWwoWCksaWU9WS5yZWRNdWwocSksc2U9US5yZWRTcXIoKS5yZWRJQWRkKHRlKS5yZWRJU3Vi'@;
put 'KGllKS5yZWRJU3ViKGllKSxnZT1RLnJlZE11bChpZS5yZWRJU3ViKHNlKSkucmVkSVN1YihXLnJlZE11bCh0ZSkpLF9lPXRoaXMuei5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHNlLGdlLF9lKX0sUi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihQKXtpZigwPT09UClyZXR1'@;
put 'cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighUClyZXR1cm4gdGhpcy5kYmwoKTt2YXIgTDtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIFk9dGhpcztmb3IoTD0wO0w8UDtMKyspWT1ZLmRibCgpO3JldHVybiBZfXZhciBCPXRo'@;
put 'aXMuY3VydmUuYSxXPXRoaXMuY3VydmUudGludixaPXRoaXMueCxYPXRoaXMueSxRPXRoaXMueixxPVEucmVkU3FyKCkucmVkU3FyKCksdGU9WC5yZWRBZGQoWCk7Zm9yKEw9MDtMPFA7TCsrKXt2YXIgaWU9Wi5yZWRTcXIoKSxzZT10ZS5yZWRTcXIoKSxnZT1zZS5yZWRTcXIoKSxfZT1pZS5y'@;
put 'ZWRBZGQoaWUpLnJlZElBZGQoaWUpLnJlZElBZGQoQi5yZWRNdWwocSkpLFRlPVoucmVkTXVsKHNlKSxTZT1fZS5yZWRTcXIoKS5yZWRJU3ViKFRlLnJlZEFkZChUZSkpLHplPVRlLnJlZElTdWIoU2UpLHo9X2UucmVkTXVsKHplKTt6PXoucmVkSUFkZCh6KS5yZWRJU3ViKGdlKTt2YXIgZz10'@;
put 'ZS5yZWRNdWwoUSk7TCsxPFAmJihxPXEucmVkTXVsKGdlKSksWj1TZSxRPWcsdGU9en1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWix0ZS5yZWRNdWwoVyksUSl9LFIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVy'@;
put 'b0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LFIucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIFAsTCxZO2lmKHRoaXMuek9uZSl7dmFyIEI9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFo9'@;
put 'Vy5yZWRTcXIoKSxYPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFopO1g9WC5yZWRJQWRkKFgpO3ZhciBRPUIucmVkQWRkKEIpLnJlZElBZGQoQikscT1RLnJlZFNxcigpLnJlZElTdWIoWCkucmVkSVN1YihYKSx0ZT1aLnJlZElBZGQoWik7dGU9KHRlPXRl'@;
put 'LnJlZElBZGQodGUpKS5yZWRJQWRkKHRlKSxQPXEsTD1RLnJlZE11bChYLnJlZElTdWIocSkpLnJlZElTdWIodGUpLFk9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMueC5yZWRTcXIoKSxzZT10aGlzLnkucmVkU3FyKCksZ2U9c2UucmVkU3FyKCksX2U9dGhpcy54LnJl'@;
put 'ZEFkZChzZSkucmVkU3FyKCkucmVkSVN1YihpZSkucmVkSVN1YihnZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPWllLnJlZEFkZChpZSkucmVkSUFkZChpZSksU2U9VGUucmVkU3FyKCksemU9Z2UucmVkSUFkZChnZSk7emU9KHplPXplLnJlZElBZGQoemUpKS5yZWRJQWRkKHplKSxQPVNl'@;
put 'LnJlZElTdWIoX2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoUCkpLnJlZElTdWIoemUpLFk9KFk9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKFkpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChQLEwsWSl9LFIucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlv'@;
put 'bigpe3ZhciBQLEwsWTtpZih0aGlzLnpPbmUpe3ZhciBCPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxaPVcucmVkU3FyKCksWD10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoQikucmVkSVN1YihaKTtYPVgucmVkSUFkZChYKTt2YXIgUT1CLnJlZEFkZChCKS5y'@;
put 'ZWRJQWRkKEIpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxxPVEucmVkU3FyKCkucmVkSVN1YihYKS5yZWRJU3ViKFgpO1A9cTt2YXIgdGU9Wi5yZWRJQWRkKFopO3RlPSh0ZT10ZS5yZWRJQWRkKHRlKSkucmVkSUFkZCh0ZSksTD1RLnJlZE11bChYLnJlZElTdWIocSkpLnJlZElTdWIodGUpLFk9'@;
put 'dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMuei5yZWRTcXIoKSxzZT10aGlzLnkucmVkU3FyKCksZ2U9dGhpcy54LnJlZE11bChzZSksX2U9dGhpcy54LnJlZFN1YihpZSkucmVkTXVsKHRoaXMueC5yZWRBZGQoaWUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2Up'@;
put 'O3ZhciBUZT1nZS5yZWRJQWRkKGdlKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7UD1fZS5yZWRTcXIoKS5yZWRJU3ViKFNlKSxZPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKHNlKS5yZWRJU3ViKGllKTt2YXIgemU9c2UucmVkU3FyKCk7emU9KHpl'@;
put 'PSh6ZT16ZS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSkpLnJlZElBZGQoemUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIoUCkpLnJlZElTdWIoemUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChQLEwsWSl9LFIucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmN1cnZlLmEs'@;
put 'TD10aGlzLngsWT10aGlzLnksQj10aGlzLnosVz1CLnJlZFNxcigpLnJlZFNxcigpLFo9TC5yZWRTcXIoKSxYPVkucmVkU3FyKCksUT1aLnJlZEFkZChaKS5yZWRJQWRkKFopLnJlZElBZGQoUC5yZWRNdWwoVykpLHE9TC5yZWRBZGQoTCksdGU9KHE9cS5yZWRJQWRkKHEpKS5yZWRNdWwoWCks'@;
put 'aWU9US5yZWRTcXIoKS5yZWRJU3ViKHRlLnJlZEFkZCh0ZSkpLHNlPXRlLnJlZElTdWIoaWUpLGdlPVgucmVkU3FyKCk7Z2U9KGdlPShnZT1nZS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSkpLnJlZElBZGQoZ2UpO3ZhciBfZT1RLnJlZE11bChzZSkucmVkSVN1YihnZSksVGU9WS5yZWRBZGQo'@;
put 'WSkucmVkTXVsKEIpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChpZSxfZSxUZSl9LFIucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIFA9dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigp'@;
put 'LFk9dGhpcy56LnJlZFNxcigpLEI9TC5yZWRTcXIoKSxXPVAucmVkQWRkKFApLnJlZElBZGQoUCksWj1XLnJlZFNxcigpLFg9dGhpcy54LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKFApLnJlZElTdWIoQiksUT0oWD0oWD0oWD1YLnJlZElBZGQoWCkpLnJlZEFkZChYKS5yZWRJQWRkKFgp'@;
put 'KS5yZWRJU3ViKFopKS5yZWRTcXIoKSxxPUIucmVkSUFkZChCKTtxPShxPShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSkucmVkSUFkZChxKTt2YXIgdGU9Vy5yZWRJQWRkKFgpLnJlZFNxcigpLnJlZElTdWIoWikucmVkSVN1YihRKS5yZWRJU3ViKHEpLGllPUwucmVkTXVsKHRlKTtpZT0o'@;
put 'aWU9aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3ZhciBzZT10aGlzLngucmVkTXVsKFEpLnJlZElTdWIoaWUpO3NlPShzZT1zZS5yZWRJQWRkKHNlKSkucmVkSUFkZChzZSk7dmFyIGdlPXRoaXMueS5yZWRNdWwodGUucmVkTXVsKHEucmVkSVN1Yih0ZSkpLnJlZElTdWIoWC5yZWRNdWwo'@;
put 'USkpKTtnZT0oZ2U9KGdlPWdlLnJlZElBZGQoZ2UpKS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSk7dmFyIF9lPXRoaXMuei5yZWRBZGQoWCkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKFEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChzZSxnZSxfZSl9LFIucHJvdG90eXBlLm11bD1m'@;
put 'dW5jdGlvbihQLEwpe3JldHVybiBQPW5ldyBfKFAsTCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLFApfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihQKXtpZigiYWZmaW5lIj09PVAudHlwZSlyZXR1cm4gdGhpcy5lcShQLnRvSigpKTtpZih0aGlzPT09UClyZXR1cm4hMDt2YXIgTD10aGlz'@;
put 'LnoucmVkU3FyKCksWT1QLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoWSkucmVkSVN1YihQLngucmVkTXVsKEwpKS5jbXBuKDApKXJldHVybiExO3ZhciBCPUwucmVkTXVsKHRoaXMueiksVz1ZLnJlZE11bChQLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3Vi'@;
put 'KFAueS5yZWRNdWwoQikpLmNtcG4oMCl9LFIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihQKXt2YXIgTD10aGlzLnoucmVkU3FyKCksWT1QLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoTCk7aWYoMD09PXRoaXMueC5jbXAoWSkpcmV0dXJuITA7Zm9yKHZhciBCPVAuY2xvbmUoKSxX'@;
put 'PXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTCk7Oyl7aWYoQi5pYWRkKHRoaXMuY3VydmUubiksQi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihZLnJlZElBZGQoVyksMD09PXRoaXMueC5jbXAoWSkpcmV0dXJuITB9fSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZp'@;
put 'bml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBSLEQ9SixfPWIoMzcxNSkscD1iKDgyNTQpLHc9Yig5NTMpLmFzc2VydDtmdW5jdGlvbiBGKGope3RoaXMuY3VydmU9InNob3J0Ij09PWoudHlwZT9uZXcg'@;
put 'cC5zaG9ydChqKToiZWR3YXJkcyI9PT1qLnR5cGU/bmV3IHAuZWR3YXJkcyhqKTpuZXcgcC5tb250KGopLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ai5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5t'@;
put 'dWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gSChqLFApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShELGose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBGKFApO3JldHVybiBPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoRCxqLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpMfSksTH19KX1ELlByZXNldEN1cnZlPUYsSCgicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4'@;
put 'MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksSCgi'@;
put 'cDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZl'@;
put 'IixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiYjcw'@;
put 'ZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksSCgicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6'@;
put 'ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEz'@;
put 'YTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjZi'@;
put 'MTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEgoInAzODQiLHt0eXBlOiJz'@;
put 'aG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVk'@;
put 'MTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3'@;
put 'Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEz'@;
put 'MTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxIKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBl'@;
put 'YzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIg'@;
put 'N2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6Xy5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0'@;
put 'YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0'@;
put 'MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksSCgiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEgoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmlt'@;
put 'ZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5Nzhh'@;
put 'MyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFh'@;
put 'IiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e1I9YigxMDM3KX1jYXRjaHtSPXZvaWQgMH1IKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRh'@;
put 'OiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0'@;
put 'NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2Ji'@;
put 'YWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixSXX0pfSw3OTU0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzc4'@;
put 'NSksXz1iKDIxNTYpLHA9Yig5NTMpLE49Yig1NDI3KSx3PWIoOTkzMSksRj1wLmFzc2VydCxIPWIoMTI1MSksUj1iKDYxMSk7ZnVuY3Rpb24gaihQKXtpZighKHRoaXMgaW5zdGFuY2VvZiBqKSlyZXR1cm4gbmV3IGooUCk7InN0cmluZyI9PXR5cGVvZiBQJiYoRihPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5LmNhbGwoTixQKSwiVW5rbm93biBjdXJ2ZSAiK1ApLFA9TltQXSksUCBpbnN0YW5jZW9mIE4uUHJlc2V0Q3VydmUmJihQPXtjdXJ2ZTpQfSksdGhpcy5jdXJ2ZT1QLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSks'@;
put 'dGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9UC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKFAuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9UC5oYXNofHxQLmN1cnZlLmhhc2h9Y2UuZXhwb3J0cz1qLGoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5l'@;
put 'dyBIKHRoaXMsTCl9LGoucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKEwsWSl7cmV0dXJuIEguZnJvbVByaXZhdGUodGhpcyxMLFkpfSxqLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEwsWSl7cmV0dXJuIEguZnJvbVB1YmxpYyh0aGlzLEwsWSl9LGoucHJvdG90'@;
put 'eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oTCl7THx8KEw9e30pO2Zvcih2YXIgWT1uZXcgXyh7aGFzaDp0aGlzLmhhc2gscGVyczpMLnBlcnMscGVyc0VuYzpMLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OkwuZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkwu'@;
put 'ZW50cm9weSYmTC5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLEI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxXPXRoaXMubi5zdWIobmV3IEQoMikpOzspe3ZhciBaPW5ldyBEKFkuZ2VuZXJhdGUoQikpO2lmKCEoWi5jbXAoVyk+MCkpcmV0dXJuIFouaWFkZG4oMSks'@;
put 'dGhpcy5rZXlGcm9tUHJpdmF0ZShaKX19LGoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihMLFksQil7dmFyIFc7aWYoRC5pc0JOKEwpfHwibnVtYmVyIj09dHlwZW9mIEwpVz0oTD1uZXcgRChMLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBMKVc9'@;
put 'TC5sZW5ndGgsTD1uZXcgRChMLDE2KTtlbHNle3ZhciBaPUwudG9TdHJpbmcoKTtXPVoubGVuZ3RoKzE+Pj4xLEw9bmV3IEQoWiwxNil9Im51bWJlciIhPXR5cGVvZiBCJiYoQj04KlcpO3ZhciBYPUItdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBYPjAmJihMPUwudXNocm4oWCkpLCFZJiZM'@;
put 'LmNtcCh0aGlzLm4pPj0wP0wuc3ViKHRoaXMubik6TH0sai5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihMLFksQixXKXtpZigib2JqZWN0Ij09dHlwZW9mIEImJihXPUIsQj1udWxsKSxXfHwoVz17fSksInN0cmluZyIhPXR5cGVvZiBMJiYibnVtYmVyIiE9dHlwZW9mIEwmJiFELmlzQk4oTCkp'@;
put 'e0YoIm9iamVjdCI9PXR5cGVvZiBMJiZMJiYibnVtYmVyIj09dHlwZW9mIEwubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3IgYSBCTiBpbnN0YW5jZSIpLEYoTC5sZW5ndGg+Pj4wPT09TC5sZW5ndGgpO2Zvcih2YXIgWj0wO1o8'@;
put 'TC5sZW5ndGg7WisrKUYoKDI1NSZMW1pdKT09PUxbWl0pfVk9dGhpcy5rZXlGcm9tUHJpdmF0ZShZLEIpLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxXLm1zZ0JpdExlbmd0aCksRighTC5pc05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIFg9dGhpcy5uLmJ5'@;
put 'dGVMZW5ndGgoKSxRPVkuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixYKSxxPUwudG9BcnJheSgiYmUiLFgpO0YobmV3IEQocSkuZXEoTCksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZhciB0ZT1uZXcgXyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpRLG5vbmNlOnEscGVyczpXLnBl'@;
put 'cnMscGVyc0VuYzpXLnBlcnNFbmN8fCJ1dGY4In0pLGllPXRoaXMubi5zdWIobmV3IEQoMSkpLHNlPTA7O3NlKyspe3ZhciBnZT1XLms/Vy5rKHNlKTpuZXcgRCh0ZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoZ2U9dGhpcy5fdHJ1bmNhdGVUb04oZ2UsITApKS5jbXBu'@;
put 'KDEpPD0wfHxnZS5jbXAoaWUpPj0wKSl7dmFyIF9lPXRoaXMuZy5tdWwoZ2UpO2lmKCFfZS5pc0luZmluaXR5KCkpe3ZhciBUZT1fZS5nZXRYKCksU2U9VGUudW1vZCh0aGlzLm4pO2lmKDAhPT1TZS5jbXBuKDApKXt2YXIgemU9Z2UuaW52bSh0aGlzLm4pLm11bChTZS5tdWwoWS5nZXRQcml2'@;
put 'YXRlKCkpLmlhZGQoTCkpO2lmKDAhPT0oemU9emUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgej0oX2UuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PVRlLmNtcChTZSk/MjowKTtyZXR1cm4gVy5jYW5vbmljYWwmJnplLmNtcCh0aGlzLm5oKT4wJiYoemU9dGhpcy5uLnN1Yih6ZSksel49'@;
put 'MSksbmV3IFIoe3I6U2Usczp6ZSxyZWNvdmVyeVBhcmFtOnp9KX19fX19fSxqLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oTCxZLEIsVyxaKXtafHwoWj17fSksTD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFoubXNnQml0TGVuZ3RoKSxCPXRoaXMua2V5RnJvbVB1YmxpYyhCLFcpO3ZhciBY'@;
put 'PShZPW5ldyBSKFksImhleCIpKS5yLFE9WS5zO2lmKFguY21wbigxKTwwfHxYLmNtcCh0aGlzLm4pPj0wfHxRLmNtcG4oMSk8MHx8US5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgc2UscT1RLmludm0odGhpcy5uKSx0ZT1xLm11bChMKS51bW9kKHRoaXMubiksaWU9cS5tdWwoWCkudW1v'@;
put 'ZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShzZT10aGlzLmcuam11bEFkZCh0ZSxCLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiZzZS5lcVhUb1AoWCk6IShzZT10aGlzLmcubXVsQWRkKHRlLEIuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkm'@;
put 'JjA9PT1zZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChYKX0sai5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihQLEwsWSxCKXtGKCgzJlkpPT09WSwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLEw9bmV3IFIoTCxCKTt2YXIgVz10aGlzLm4sWj1u'@;
put 'ZXcgRChQKSxYPUwucixRPUwucyxxPTEmWSx0ZT1ZPj4xO2lmKFguY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZ0ZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO1g9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHRl'@;
put 'P1guYWRkKHRoaXMuY3VydmUubik6WCxxKTt2YXIgaWU9TC5yLmludm0oVyksc2U9Vy5zdWIoWikubXVsKGllKS51bW9kKFcpLGdlPVEubXVsKGllKS51bW9kKFcpO3JldHVybiB0aGlzLmcubXVsQWRkKHNlLFgsZ2UpfSxqLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9u'@;
put 'KFAsTCxZLEIpe2lmKG51bGwhPT0oTD1uZXcgUihMLEIpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBMLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBXPTA7Vzw0O1crKyl7dmFyIFo7dHJ5e1o9dGhpcy5yZWNvdmVyUHViS2V5KFAsTCxXKX1jYXRjaHtjb250aW51ZX1pZihaLmVxKFkpKXJldHVybiBX'@;
put 'fXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSwxMjUxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzc4NSkscD1iKDk1MykuYXNzZXJ0O2Z1bmN0aW9uIE4odyxGKXt0aGlzLmVjPXcsdGhpcy5wcml2PW51bGwsdGhpcy5w'@;
put 'dWI9bnVsbCxGLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoRi5wcml2LEYucHJpdkVuYyksRi5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhGLnB1YixGLnB1YkVuYyl9Y2UuZXhwb3J0cz1OLE4uZnJvbVB1YmxpYz1mdW5jdGlvbihGLEgsUil7cmV0dXJuIEggaW5zdGFuY2VvZiBOP0g6bmV3'@;
put 'IE4oRix7cHViOkgscHViRW5jOlJ9KX0sTi5mcm9tUHJpdmF0ZT1mdW5jdGlvbihGLEgsUil7cmV0dXJuIEggaW5zdGFuY2VvZiBOP0g6bmV3IE4oRix7cHJpdjpILHByaXZFbmM6Un0pfSxOLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBGPXRoaXMuZ2V0UHVibGljKCk7cmV0'@;
put 'dXJuIEYuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpGLnZhbGlkYXRlKCk/Ri5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBO'@;
put 'ICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxOLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRixIKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEYmJihIPUYsRj1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwo'@;
put 'dGhpcy5wcml2KSksSD90aGlzLnB1Yi5lbmNvZGUoSCxGKTp0aGlzLnB1Yn0sTi5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihGKXtyZXR1cm4iaGV4Ij09PUY/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sTi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rp'@;
put 'b24oRixIKXt0aGlzLnByaXY9bmV3IEQoRixIfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LE4ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oRixIKXtpZihGLnh8fEYueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/cChG'@;
put 'LngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJnAoRi54JiZGLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQo'@;
put 'Ri54LEYueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoRixIKX0sTi5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKEYpe3JldHVybiBGLnZhbGlkYXRlKCl8fHAoRi52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLEYubXVsKHRoaXMucHJpdiku'@;
put 'Z2V0WCgpfSxOLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEYsSCxSKXtyZXR1cm4gdGhpcy5lYy5zaWduKEYsdGhpcyxILFIpfSxOLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixILFIpe3JldHVybiB0aGlzLmVjLnZlcmlmeShGLEgsdGhpcyx2b2lkIDAsUil9LE4ucHJvdG90eXBlLmlu'@;
put 'c3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpKyIgPiJ9fSw2MTE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNzg1KSxf'@;
put 'PWIoOTUzKSxwPV8uYXNzZXJ0O2Z1bmN0aW9uIE4oaixQKXtpZihqIGluc3RhbmNlb2YgTilyZXR1cm4gajt0aGlzLl9pbXBvcnRERVIoaixQKXx8KHAoai5yJiZqLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgRChqLnIsMTYpLHRoaXMucz1uZXcgRChqLnMsMTYp'@;
put 'LHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1qLnJlY292ZXJ5UGFyYW0/bnVsbDpqLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIHcoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gRihqLFApe3ZhciBMPWpbUC5wbGFjZSsrXTtpZighKDEyOCZMKSlyZXR1cm4gTDt2YXIgWT0xNSZMO2lmKDA9'@;
put 'PT1ZfHxZPjR8fDA9PT1qW1AucGxhY2VdKXJldHVybiExO2Zvcih2YXIgQj0wLFc9MCxaPVAucGxhY2U7VzxZO1crKyxaKyspQjw8PTgsQnw9altaXSxCPj4+PTA7cmV0dXJuIShCPD0xMjcpJiYoUC5wbGFjZT1aLEIpfWZ1bmN0aW9uIEgoail7Zm9yKHZhciBQPTAsTD1qLmxlbmd0aC0xOyFq'@;
put 'W1BdJiYhKDEyOCZqW1ArMV0pJiZQPEw7KVArKztyZXR1cm4gMD09PVA/ajpqLnNsaWNlKFApfWZ1bmN0aW9uIFIoaixQKXtpZihQPDEyOClqLnB1c2goUCk7ZWxzZXt2YXIgTD0xKyhNYXRoLmxvZyhQKS9NYXRoLkxOMj4+PjMpO2ZvcihqLnB1c2goMTI4fEwpOy0tTDspai5wdXNoKFA+Pj4o'@;
put 'TDw8MykmMjU1KTtqLnB1c2goUCl9fWNlLmV4cG9ydHM9TixOLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKFAsTCl7UD1fLnRvQXJyYXkoUCxMKTt2YXIgWT1uZXcgdztpZig0OCE9PVBbWS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgQj1GKFAsWSk7aWYoITE9PT1CfHxCK1kucGxhY2Uh'@;
put 'PT1QLmxlbmd0aHx8MiE9PVBbWS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVz1GKFAsWSk7aWYoITE9PT1XfHwxMjgmUFtZLnBsYWNlXSlyZXR1cm4hMTt2YXIgWj1QLnNsaWNlKFkucGxhY2UsVytZLnBsYWNlKTtpZihZLnBsYWNlKz1XLDIhPT1QW1kucGxhY2UrK10pcmV0dXJuITE7dmFyIFg9'@;
put 'RihQLFkpO2lmKCExPT09WHx8UC5sZW5ndGghPT1YK1kucGxhY2V8fDEyOCZQW1kucGxhY2VdKXJldHVybiExO3ZhciBRPVAuc2xpY2UoWS5wbGFjZSxYK1kucGxhY2UpO2lmKDA9PT1aWzBdKXtpZighKDEyOCZaWzFdKSlyZXR1cm4hMTtaPVouc2xpY2UoMSl9aWYoMD09PVFbMF0pe2lmKCEo'@;
put 'MTI4JlFbMV0pKXJldHVybiExO1E9US5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBEKFopLHRoaXMucz1uZXcgRChRKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sTi5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oUCl7dmFyIEw9dGhpcy5yLnRvQXJyYXkoKSxZPXRoaXMucy50b0Fy'@;
put 'cmF5KCk7Zm9yKDEyOCZMWzBdJiYoTD1bMF0uY29uY2F0KEwpKSwxMjgmWVswXSYmKFk9WzBdLmNvbmNhdChZKSksTD1IKEwpLFk9SChZKTshKFlbMF18fDEyOCZZWzFdKTspWT1ZLnNsaWNlKDEpO3ZhciBCPVsyXTtSKEIsTC5sZW5ndGgpLChCPUIuY29uY2F0KEwpKS5wdXNoKDIpLFIoQixZ'@;
put 'Lmxlbmd0aCk7dmFyIFc9Qi5jb25jYXQoWSksWj1bNDhdO3JldHVybiBSKFosVy5sZW5ndGgpLFo9Wi5jb25jYXQoVyksXy5lbmNvZGUoWixQKX19LDU5ODA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNzE1KSxfPWIoNTQyNykscD1iKDk1MyksTj1wLmFzc2VydCx3PXAucGFy'@;
put 'c2VCeXRlcyxGPWIoOTA4NyksSD1iKDM2MjIpO2Z1bmN0aW9uIFIoail7aWYoTigiZWQyNTUxOSI9PT1qLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgUikpcmV0dXJuIG5ldyBSKGopO3RoaXMuY3VydmU9aj1fW2pdLmN1cnZlLHRoaXMuZz1q'@;
put 'LmcsdGhpcy5nLnByZWNvbXB1dGUoai5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1qLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoai5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1ELnNoYTUxMn1jZS5leHBvcnRzPVIsUi5wcm90'@;
put 'b3R5cGUuc2lnbj1mdW5jdGlvbihQLEwpe1A9dyhQKTt2YXIgWT10aGlzLmtleUZyb21TZWNyZXQoTCksQj10aGlzLmhhc2hJbnQoWS5tZXNzYWdlUHJlZml4KCksUCksVz10aGlzLmcubXVsKEIpLFo9dGhpcy5lbmNvZGVQb2ludChXKSxYPXRoaXMuaGFzaEludChaLFkucHViQnl0ZXMoKSxQ'@;
put 'KS5tdWwoWS5wcml2KCkpLFE9Qi5hZGQoWCkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6VyxTOlEsUmVuY29kZWQ6Wn0pfSxSLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oUCxMLFkpe2lmKFA9dyhQKSwoTD10aGlzLm1ha2VTaWduYXR1cmUoTCkp'@;
put 'LlMoKS5ndGUoTC5lZGRzYS5jdXJ2ZS5uKXx8TC5TKCkuaXNOZWcoKSlyZXR1cm4hMTt2YXIgQj10aGlzLmtleUZyb21QdWJsaWMoWSksVz10aGlzLmhhc2hJbnQoTC5SZW5jb2RlZCgpLEIucHViQnl0ZXMoKSxQKSxaPXRoaXMuZy5tdWwoTC5TKCkpO3JldHVybiBMLlIoKS5hZGQoQi5wdWIo'@;
put 'KS5tdWwoVykpLmVxKFopfSxSLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBQPXRoaXMuaGFzaCgpLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKVAudXBkYXRlKGFyZ3VtZW50c1tMXSk7cmV0dXJuIHAuaW50RnJvbUxFKFAuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2'@;
put 'ZS5uKX0sUi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihQKXtyZXR1cm4gRi5mcm9tUHVibGljKHRoaXMsUCl9LFIucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oUCl7cmV0dXJuIEYuZnJvbVNlY3JldCh0aGlzLFApfSxSLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJl'@;
put 'PWZ1bmN0aW9uKFApe3JldHVybiBQIGluc3RhbmNlb2YgSD9QOm5ldyBIKHRoaXMsUCl9LFIucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKFApe3ZhciBMPVAuZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTFt0aGlzLmVuY29kaW5nTGVuZ3Ro'@;
put 'LTFdfD1QLmdldFgoKS5pc09kZCgpPzEyODowLEx9LFIucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFApe3ZhciBMPShQPXAucGFyc2VCeXRlcyhQKSkubGVuZ3RoLTEsWT1QLnNsaWNlKDAsTCkuY29uY2F0KC0xMjkmUFtMXSksQj0hISgxMjgmUFtMXSksVz1wLmludEZyb21MRShZ'@;
put 'KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFcsQil9LFIucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihQKXtyZXR1cm4gUC50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LFIucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihQKXtyZXR1cm4gcC5pbnRGcm9t'@;
put 'TEUoUCl9LFIucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw5MDg3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTUzKSxfPUQuYXNzZXJ0LHA9RC5wYXJzZUJ5dGVzLE49RC5jYWNoZWRQcm9wZXJ0eTtm'@;
put 'dW5jdGlvbiB3KEYsSCl7dGhpcy5lZGRzYT1GLHRoaXMuX3NlY3JldD1wKEguc2VjcmV0KSxGLmlzUG9pbnQoSC5wdWIpP3RoaXMuX3B1Yj1ILnB1Yjp0aGlzLl9wdWJCeXRlcz1wKEgucHViKX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIHc/UjpuZXcg'@;
put 'dyhILHtwdWI6Un0pfSx3LmZyb21TZWNyZXQ9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIHc/UjpuZXcgdyhILHtzZWNyZXQ6Un0pfSx3LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxOKHcsInB1YkJ5dGVzIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksTih3LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksTih3LCJwcml2'@;
put 'Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcy5lZGRzYSxSPXRoaXMuaGFzaCgpLGo9SC5lbmNvZGluZ0xlbmd0aC0xLFA9Ui5zbGljZSgwLEguZW5jb2RpbmdMZW5ndGgpO3JldHVybiBQWzBdJj0yNDgsUFtqXSY9MTI3LFBbal18PTY0LFB9KSxOKHcsInByaXYiLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksTih3LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxOKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksdy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihIKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEgsdGhpcyl9LHcucHJvdG90eXBlLnZlcmlm'@;
put 'eT1mdW5jdGlvbihILFIpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShILFIsdGhpcyl9LHcucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihIKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxELmVuY29kZSh0aGlzLnNlY3JldCgpLEgpfSx3LnBy'@;
put 'b3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oSCl7cmV0dXJuIEQuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxIKX0sY2UuZXhwb3J0cz13fSwzNjIyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzc4NSksXz1iKDk1MykscD1fLmFzc2VydCxOPV8uY2FjaGVkUHJvcGVydHksdz1f'@;
put 'LnBhcnNlQnl0ZXM7ZnVuY3Rpb24gRihILFIpe3RoaXMuZWRkc2E9SCwib2JqZWN0IiE9dHlwZW9mIFImJihSPXcoUikpLEFycmF5LmlzQXJyYXkoUikmJihwKFIubGVuZ3RoPT09MipILmVuY29kaW5nTGVuZ3RoLCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLFI9e1I6Ui5zbGljZSgw'@;
put 'LEguZW5jb2RpbmdMZW5ndGgpLFM6Ui5zbGljZShILmVuY29kaW5nTGVuZ3RoKX0pLHAoUi5SJiZSLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEguaXNQb2ludChSLlIpJiYodGhpcy5fUj1SLlIpLFIuUyBpbnN0YW5jZW9mIEQmJih0aGlzLl9TPVIuUyksdGhpcy5fUmVuY29kZWQ9'@;
put 'QXJyYXkuaXNBcnJheShSLlIpP1IuUjpSLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoUi5TKT9SLlM6Ui5TZW5jb2RlZH1OKEYsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxOKEYsIlIiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLE4oRiwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksTihGLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5l'@;
put 'bmNvZGVJbnQodGhpcy5TKCkpfSksRi5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LEYucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIF8uZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgi'@;
put 'KS50b1VwcGVyQ2FzZSgpfSxjZS5leHBvcnRzPUZ9LDEwMzc6Y2U9PntjZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRi'@;
put 'OTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2Jl'@;
put 'ZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0'@;
put 'NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3'@;
put 'ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwi'@;
put 'OTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgw'@;
put 'ODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJi'@;
put 'YzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBh'@;
put 'YzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNk'@;
put 'ZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBi'@;
put 'YzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhl'@;
put 'MmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0s'@;
put 'WyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRk'@;
put 'NmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4'@;
put 'MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZi'@;
put 'NzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThj'@;
put 'MWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBm'@;
put 'NGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBi'@;
put 'ZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwi'@;
put 'MTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZh'@;
put 'ZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5'@;
put 'MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUy'@;
put 'NjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVk'@;
put 'ZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2'@;
put 'MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRi'@;
put 'ZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxb'@;
put 'IjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThj'@;
put 'MzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUy'@;
put 'MGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcx'@;
put 'YjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZm'@;
put 'MzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2Rm'@;
put 'NjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0'@;
put 'M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRk'@;
put 'Yjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2'@;
put 'MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIy'@;
put 'OGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5'@;
put 'ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3'@;
put 'YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0'@;
put 'YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4'@;
put 'NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJl'@;
put 'NGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJi'@;
put 'NmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2'@;
put 'NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNk'@;
put 'Mjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1'@;
put 'NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5'@;
put 'YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTcz'@;
put 'MGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJl'@;
put 'ODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5'@;
put 'YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3'@;
put 'OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFl'@;
put 'ZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5'@;
put 'NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVl'@;
put 'Mjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgy'@;
put 'ODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxu'@;
put 'YWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQx'@;
put 'YTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTli'@;
put 'N2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwi'@;
put 'Y2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3Yjdi'@;
put 'MzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIw'@;
put 'M2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQy'@;
put 'MGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3'@;
put 'NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUz'@;
put 'NDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVj'@;
put 'ZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsi'@;
put 'ZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5'@;
put 'ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQy'@;
put 'NjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2'@;
put 'MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNi'@;
put 'MDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0'@;
put 'MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5'@;
put 'NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVl'@;
put 'Y2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJh'@;
put 'NTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2'@;
put 'MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJl'@;
put 'OGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEz'@;
put 'MjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1'@;
put 'ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRh'@;
put 'YjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1'@;
put 'NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYw'@;
put 'MzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFh'@;
put 'NmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3'@;
put 'ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3'@;
put 'MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5'@;
put 'ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2'@;
put 'ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUz'@;
put 'NGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMy'@;
put 'Njk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2'@;
put 'M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5Yzdi'@;
put 'NDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIw'@;
put 'ZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3'@;
put 'Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUy'@;
put 'ODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIx'@;
put 'NWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBk'@;
put 'MjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNi'@;
put 'MzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYw'@;
put 'NDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMy'@;
put 'MTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4'@;
put 'ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJh'@;
put 'YmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVj'@;
put 'MGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2'@;
put 'YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2'@;
put 'NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUx'@;
put 'OTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2'@;
put 'NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIy'@;
put 'YzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYz'@;
put 'NGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1'@;
put 'YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1'@;
put 'ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5Zjcy'@;
put 'NiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVm'@;
put 'NjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2Qy'@;
put 'MDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1'@;
put 'MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3Njgx'@;
put 'MDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDEx'@;
put 'OGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5'@;
put 'OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJd'@;
put 'LFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBm'@;
put 'YjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2Vk'@;
put 'Mzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5'@;
put 'ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2'@;
put 'NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3'@;
put 'ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThj'@;
put 'MzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwi'@;
put 'MjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJm'@;
put 'MDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdk'@;
put 'YzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2Nm'@;
put 'M2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMy'@;
put 'ODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMw'@;
put 'NmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFj'@;
put 'MDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxb'@;
put 'IjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFm'@;
put 'ZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNi'@;
put 'OGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBi'@;
put 'OWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFj'@;
put 'ZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2'@;
put 'ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2'@;
put 'ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIs'@;
put 'IjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRl'@;
put 'YTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0'@;
put 'YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1'@;
put 'NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5'@;
put 'YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEz'@;
put 'ZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTll'@;
put 'MzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxb'@;
put 'IjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNm'@;
put 'NTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFl'@;
put 'YjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5'@;
put 'OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRj'@;
put 'Njk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNh'@;
put 'Y2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4Mjky'@;
put 'MDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwi'@;
put 'NGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdj'@;
put 'NmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFl'@;
put 'ZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIy'@;
put 'ZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2'@;
put 'M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFi'@;
put 'OTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMx'@;
put 'ZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxb'@;
put 'IjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3'@;
put 'MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw5NTM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9SixfPWIoMzc4NSkscD1iKDk3NDYp'@;
put 'LE49Yig0NTA0KTtELmFzc2VydD1wLEQudG9BcnJheT1OLnRvQXJyYXksRC56ZXJvMj1OLnplcm8yLEQudG9IZXg9Ti50b0hleCxELmVuY29kZT1OLmVuY29kZSxELmdldE5BRj1mdW5jdGlvbiB3KFAsTCxZKXt2YXIgVyxCPW5ldyBBcnJheShNYXRoLm1heChQLmJpdExlbmd0aCgpLFkpKzEp'@;
put 'O2ZvcihXPTA7VzxCLmxlbmd0aDtXKz0xKUJbV109MDt2YXIgWj0xPDxMKzEsWD1QLmNsb25lKCk7Zm9yKFc9MDtXPEIubGVuZ3RoO1crKyl7dmFyIFEscT1YLmFuZGxuKFotMSk7WC5pc09kZCgpP1guaXN1Ym4oUT1xPihaPj4xKS0xPyhaPj4xKS1xOnEpOlE9MCxCW1ddPVEsWC5pdXNocm4o'@;
put 'MSl9cmV0dXJuIEJ9LEQuZ2V0SlNGPWZ1bmN0aW9uIEYoUCxMKXt2YXIgWT1bW10sW11dO1A9UC5jbG9uZSgpLEw9TC5jbG9uZSgpO2Zvcih2YXIgWixCPTAsVz0wO1AuY21wbigtQik+MHx8TC5jbXBuKC1XKT4wOyl7dmFyIHEsdGUsWD1QLmFuZGxuKDMpK0ImMyxRPUwuYW5kbG4oMykrVyYz'@;
put 'OzM9PT1YJiYoWD0tMSksMz09PVEmJihRPS0xKSxxPTEmWD8zIT0oWj1QLmFuZGxuKDcpK0ImNykmJjUhPT1afHwyIT09UT9YOi1YOjAsWVswXS5wdXNoKHEpLHRlPTEmUT8zIT0oWj1MLmFuZGxuKDcpK1cmNykmJjUhPT1afHwyIT09WD9ROi1ROjAsWVsxXS5wdXNoKHRlKSwyKkI9PT1xKzEm'@;
put 'JihCPTEtQiksMipXPT09dGUrMSYmKFc9MS1XKSxQLml1c2hybigxKSxMLml1c2hybigxKX1yZXR1cm4gWX0sRC5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBIKFAsTCxZKXt2YXIgQj0iXyIrTDtQLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW0JdP3RoaXNb'@;
put 'Ql06dGhpc1tCXT1ZLmNhbGwodGhpcyl9fSxELnBhcnNlQnl0ZXM9ZnVuY3Rpb24gUihQKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFA/RC50b0FycmF5KFAsImhleCIpOlB9LEQuaW50RnJvbUxFPWZ1bmN0aW9uIGooUCl7cmV0dXJuIG5ldyBfKFAsImhleCIsImxlIil9fSwzNzg1OmZ1bmN0'@;
put 'aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQsXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeixnKXtpZigheil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBOKHosZyl7ei5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90'@;
put 'b3R5cGUsei5wcm90b3R5cGU9bmV3IHksei5wcm90b3R5cGUuY29uc3RydWN0b3I9en1mdW5jdGlvbiB3KHosZyx5KXtpZih3LmlzQk4oeikpcmV0dXJuIHo7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXomJigoImxl'@;
put 'Ij09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KHp8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBGOyJvYmplY3QiPT10eXBlb2YgRD9ELmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e0Y9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cu'@;
put 'QnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBIKHosZyl7dmFyIHk9ei5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKHosZyx5KXt2YXIgeD1IKHos'@;
put 'eSk7cmV0dXJuIHktMT49ZyYmKHh8PUgoeix5LTEpPDw0KSx4fWZ1bmN0aW9uIGooeixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbih6Lmxlbmd0aCx5KSxWPWc7VjxUO1YrKyl7dmFyIFU9ei5jaGFyQ29kZUF0KFYpLTQ4O0MqPXgsQys9VT49NDk/VS00OSsxMDpVPj0xNz9VLTE3KzEw'@;
put 'OlV9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7'@;
put 'cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9'@;
put 'PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5s'@;
put 'ZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdh'@;
put 'dGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIp'@;
put 'LHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5'@;
put 'cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7Qysr'@;
put 'KXRoaXMud29yZHNbQ109MDt2YXIgVCxWLFU9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChV'@;
put 'Kz0yNCk+PTI2JiYoVS09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0'@;
put 'KT49MjYmJihVLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0'@;
put 'aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBVLFQ9MCxWPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQr'@;
put 'PTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5f'@;
put 'cGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIFY9Zy5sZW5ndGgteCxVPVYlQyxFPU1hdGgubWluKFYsVi1VKSt4LG09MCxBPXg7QTxFO0Er'@;
put 'PUMpbT1qKGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09VSl7dmFyIGFlPTE7Zm9yKG09aihnLEEsZy5sZW5ndGgseSksQT0wO0E8VTtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSks'@;
put 'dGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndv'@;
put 'cmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUu'@;
put 'X2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlz'@;
put 'Lmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigp'@;
put 'e3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgUD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4'@;
put 'LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1'@;
put 'MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEz'@;
put 'NTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmU7dmFyIHg9ei5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHx6LndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLFY9'@;
put 'QypULEU9Vi82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmVjtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxsZT1NYXRoLm1heCgwLG0tei5sZW5ndGgrMSk7bGU8PW5lO2xlKyspQSs9KFY9'@;
put 'KEM9MHx6LndvcmRzW20tbGV8MF0pKihUPTB8Zy53b3Jkc1tsZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJlY7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5j'@;
put 'dGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLFY9MDtWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9dGhpcy53b3Jkc1tWXSxFPSgxNjc3NzIxNSYoVTw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9VT4+PjI0LUMm'@;
put 'MTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LFYtLSkseD0wIT09VHx8ViE9PXRoaXMubGVuZ3RoLTE/UFs2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4'@;
put 'PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPUxbZ10sQT1ZW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNa'@;
put 'ZXJvKCk/bmUreDpQW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5w'@;
put 'cm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhp'@;
put 'cy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90'@;
put 'eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIEY8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEYsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlM'@;
put 'aWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIg'@;
put 'RSxtLFY9ImxlIj09PXksVT1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihWKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW21dPUU7Zm9yKDttPFQ7bSsrKVVbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKVVbbV09MDtmb3IobT0wOyFB'@;
put 'LmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW1QtbS0xXT1FfXJldHVybiBVfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5'@;
put 'Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4gODE5'@;
put 'MSZ5fHwoeCs9MTMseT4+Pj0xMyksMTI3Jnl8fCh4Kz03LHk+Pj49NyksMTUmeXx8KHgrPTQseT4+Pj00KSwzJnl8fCh4Kz0yLHk+Pj49MiksMSZ5fHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5s'@;
put 'ZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5'@;
put 'XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhp'@;
put 'cy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90'@;
put 'b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT10aGlzLndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0s'@;
put 'dy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCku'@;
put 'aW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVu'@;
put 'Z3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5u'@;
put 'ZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHkseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIg'@;
put 'Qz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl'@;
put 'Lml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRo'@;
put 'aXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7'@;
put 'dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+'@;
put 'PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcseSl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJu'@;
put 'IHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgeSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZl'@;
put 'KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3Jt'@;
put 'U2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsVj0wO1Y8Qy5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrKDB8Qy53b3Jkc1tWXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYm'@;
put 'Vjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO1Y8eC5s'@;
put 'ZW5ndGg7VisrKXRoaXMud29yZHNbVl09eC53b3Jkc1tWXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEs'@;
put 'eSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlz'@;
put 'dWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVn'@;
put 'YXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBWPTAsVT0wO1U8VC5s'@;
put 'ZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSktKDB8VC53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtmb3IoOzAhPT1WJiZVPEMubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7aWYoMD09PVYm'@;
put 'JlU8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7VTxDLmxlbmd0aDtVKyspdGhpcy53b3Jkc1tVXT1DLndvcmRzW1VdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxVKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5z'@;
put 'dWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgWj1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsVj14LndvcmRzLFU9MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxsZT1hZT4+PjEzLHdlPTB8Q1sxXSxaZT04MTkxJndlLFFl'@;
put 'PXdlPj4+MTMsYXQ9MHxDWzJdLHhlPTgxOTEmYXQsdmU9YXQ+Pj4xMyxxZT0wfENbM10samU9ODE5MSZxZSxBZT1xZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsSGU9MHxDWzVdLERlPTgxOTEmSGUsa2U9SGU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxKZT1fdD4+'@;
put 'PjEzLG9uPTB8Q1s3XSx5dD04MTkxJm9uLE10PW9uPj4+MTMsSXQ9MHxDWzhdLHJ0PTgxOTEmSXQsS2U9SXQ+Pj4xMyx0dD0wfENbOV0sTmU9ODE5MSZ0dCx1dD10dD4+PjEzLEp0PTB8VFswXSxMdD04MTkxJkp0LFB0PUp0Pj4+MTMsb2k9MHxUWzFdLGVuPTgxOTEmb2ksc249b2k+Pj4xMyxJ'@;
put 'aT0wfFRbMl0sZG49ODE5MSZJaSxmdD1JaT4+PjEzLEZyPTB8VFszXSxadD04MTkxJkZyLGt0PUZyPj4+MTMsTG49MHxUWzRdLG90PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxBdD1uaT4+PjEzLGlyPTB8VFs2XSxodD04MTkxJmlyLEV0PWlyPj4+MTMsem49MHxU'@;
put 'WzddLGFuPTgxOTEmem4sanQ9em4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxmbj1kaT4+PjEzLERpPTB8VFs5XSxRdD04MTkxJkRpLHRuPURpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGNhPShVKyhFPU1hdGguaW11bChuZSxMdCkp'@;
put 'fDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUHQpKStNYXRoLmltdWwobGUsTHQpfDApKTw8MTMpfDA7VT0oKEE9TWF0aC5pbXVsKGxlLFB0KSkrKG0+Pj4xMyl8MCkrKGNhPj4+MjYpfDAsY2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFplLEx0KSxtPShtPU1hdGguaW11bChaZSxQdCkp'@;
put 'K01hdGguaW11bChRZSxMdCl8MCxBPU1hdGguaW11bChRZSxQdCk7dmFyIHhpPShVKyhFPUUrTWF0aC5pbXVsKG5lLGVuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChsZSxlbil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxzbil8'@;
put 'MCkrKG0+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEx0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxMdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChaZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKFplLHNu'@;
put 'KXwwKStNYXRoLmltdWwoUWUsZW4pfDAsQT1BK01hdGguaW11bChRZSxzbil8MDt2YXIgeXI9KFUrKEU9RStNYXRoLmltdWwobmUsZG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGxlLGRuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVs'@;
put 'KGxlLGZ0KXwwKSsobT4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsTHQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKEFlLEx0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLGVuKXwwLG09KG09bStNYXRoLmlt'@;
put 'dWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxlbil8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoWmUsZG4pfDAsbT0obT1tK01hdGguaW11bChaZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDA7dmFyIEduPShVKyhFPUUrTWF0'@;
put 'aC5pbXVsKG5lLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsa3QpfDApK01hdGguaW11bChsZSxadCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxrdCl8MCkrKG0+Pj4xMyl8MCkrKEduPj4+MjYpfDAsR24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLEx0'@;
put 'KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxMdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoQWUsZW4pfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5p'@;
put 'bXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxkbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoWmUsWnQpfDAsbT0obT1tK01hdGguaW11bChaZSxrdCl8MCkrTWF0aC5pbXVsKFFlLFp0KXwwLEE9QStNYXRoLmltdWwo'@;
put 'UWUsa3QpfDA7dmFyIEtpPShVKyhFPUUrTWF0aC5pbXVsKG5lLG90KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChsZSxvdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2km'@;
put 'PTY3MTA4ODYzLEU9TWF0aC5pbXVsKERlLEx0KSxtPShtPU1hdGguaW11bChEZSxQdCkpK01hdGguaW11bChrZSxMdCl8MCxBPU1hdGguaW11bChrZSxQdCksRT1FK01hdGguaW11bChSZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsZW4pfDAsQT1BK01h'@;
put 'dGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChBZSxkbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsWnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxrdCl8MCkrTWF0aC5p'@;
put 'bXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsa3QpfDAsRT1FK01hdGguaW11bChaZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFplLHp0KXwwKStNYXRoLmltdWwoUWUsb3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MDt2YXIgSnI9KFUrKEU9RStNYXRoLmltdWwobmUsV2UpfDApfDAp'@;
put 'KygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFdlKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEF0KXwwKSsobT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsTHQpLG09KG09TWF0aC5pbXVsKG50'@;
put 'LFB0KSkrTWF0aC5pbXVsKEplLEx0KXwwLEE9TWF0aC5pbXVsKEplLFB0KSxFPUUrTWF0aC5pbXVsKERlLGVuKXwwLG09KG09bStNYXRoLmltdWwoRGUsc24pfDApK01hdGguaW11bChrZSxlbil8MCxBPUErTWF0aC5pbXVsKGtlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZG4pfDAsbT0obT1t'@;
put 'K01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGRuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLGt0KXwwKStNYXRoLmltdWwoQWUsWnQpfDAsQT1BK01hdGguaW11bChBZSxrdCl8MCxFPUUrTWF0aC5p'@;
put 'bXVsKHhlLG90KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxvdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoWmUsV2UpfDAsbT0obT1tK01hdGguaW11bChaZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwo'@;
put 'UWUsQXQpfDA7dmFyIFFyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsRXQpfDApK01hdGguaW11bChsZSxodCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxFdCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXIm'@;
put 'PTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LEx0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxMdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxlbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoSmUsZW4pfDAsQT1BK01h'@;
put 'dGguaW11bChKZSxzbil8MCxFPUUrTWF0aC5pbXVsKERlLGRuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZnQpfDApK01hdGguaW11bChrZSxkbil8MCxBPUErTWF0aC5pbXVsKGtlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxrdCl8MCkrTWF0aC5p'@;
put 'bXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsa3QpfDAsRT1FK01hdGguaW11bChqZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoQWUsb3QpfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmlt'@;
put 'dWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoWmUsaHQpfDAsbT0obT1tK01hdGguaW11bChaZSxFdCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUsRXQpfDA7dmFyIE5pPShVKyhFPUUrTWF0'@;
put 'aC5pbXVsKG5lLGFuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsanQpfDApK01hdGguaW11bChsZSxhbil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEx0'@;
put 'KSxtPShtPU1hdGguaW11bChydCxQdCkpK01hdGguaW11bChLZSxMdCl8MCxBPU1hdGguaW11bChLZSxQdCksRT1FK01hdGguaW11bCh5dCxlbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsZW4pfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5p'@;
put 'bXVsKG50LGRuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwLEU9RStNYXRoLmltdWwoRGUsWnQpfDAsbT0obT1tK01hdGguaW11bChEZSxrdCl8MCkrTWF0aC5pbXVsKGtlLFp0KXwwLEE9QStNYXRoLmltdWwo'@;
put 'a2Usa3QpfDAsRT1FK01hdGguaW11bChSZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsb3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChBZSxX'@;
put 'ZSl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxFdCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUsRXQpfDAsRT1FK01hdGguaW11bChaZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKFplLGp0'@;
put 'KXwwKStNYXRoLmltdWwoUWUsYW4pfDAsQT1BK01hdGguaW11bChRZSxqdCl8MDt2YXIgSGk9KFUrKEU9RStNYXRoLmltdWwobmUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmbil8MCkrTWF0aC5pbXVsKGxlLGNuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVs'@;
put 'KGxlLGZuKXwwKSsobT4+PjEzKXwwKSsoSGk+Pj4yNil8MCxIaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsTHQpLG09KG09TWF0aC5pbXVsKE5lLFB0KSkrTWF0aC5pbXVsKHV0LEx0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKHJ0LGVuKXwwLG09KG09bStNYXRoLmlt'@;
put 'dWwocnQsc24pfDApK01hdGguaW11bChLZSxlbil8MCxBPUErTWF0aC5pbXVsKEtlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGRuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxa'@;
put 'dCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LGt0KXwwKStNYXRoLmltdWwoSmUsWnQpfDAsQT1BK01hdGguaW11bChKZSxrdCl8MCxFPUUrTWF0aC5pbXVsKERlLG90KXwwLG09KG09bStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxvdCl8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXww'@;
put 'LEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEV0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1B'@;
put 'K01hdGguaW11bChBZSxFdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGFuKXwwLG09KG09bStNYXRoLmltdWwoeGUsanQpfDApK01hdGguaW11bCh2ZSxhbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoWmUsY24pfDAsbT0obT1tK01hdGguaW11bChaZSxmbil8MCkrTWF0'@;
put 'aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIElhPShVKyhFPUUrTWF0aC5pbXVsKG5lLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsdG4pfDApK01hdGguaW11bChsZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx0bil8'@;
put 'MCkrKG0+Pj4xMyl8MCkrKElhPj4+MjYpfDAsSWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGVuKSxtPShtPU1hdGguaW11bChOZSxzbikpK01hdGguaW11bCh1dCxlbil8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChydCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGZ0'@;
put 'KXwwKStNYXRoLmltdWwoS2UsZG4pfDAsQT1BK01hdGguaW11bChLZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsa3QpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LGt0KXwwLEU9RStNYXRoLmltdWwobnQsb3QpfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKEplLG90KXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDAsRT1FK01hdGguaW11bChEZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV2UpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0'@;
put 'aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUsRXQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLEV0KXwwLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKEFlLGFuKXwwLEE9QStNYXRoLmlt'@;
put 'dWwoQWUsanQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgUHI9KFUrKEU9RStNYXRoLmltdWwoWmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11'@;
put 'bChaZSx0bil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+PjEzKXwwKSsoUHI+Pj4yNil8MCxQciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsZG4pLG09KG09TWF0aC5pbXVsKE5lLGZ0KSkrTWF0aC5pbXVsKHV0LGRuKXww'@;
put 'LEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKHJ0LFp0KXwwLG09KG09bStNYXRoLmltdWwocnQsa3QpfDApK01hdGguaW11bChLZSxadCl8MCxBPUErTWF0aC5pbXVsKEtlLGt0KXwwLEU9RStNYXRoLmltdWwoeXQsb3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0'@;
put 'aC5pbXVsKE10LG90KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MCxFPUUrTWF0aC5pbXVsKERlLGh0KXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoRGUsRXQpfDApK01hdGguaW11bChrZSxodCl8MCxBPUErTWF0aC5pbXVsKGtlLEV0KXwwLEU9RStNYXRoLmltdWwoUmUsYW4pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLGFuKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11bChq'@;
put 'ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgWWk9KFUrKEU9RStNYXRoLmltdWwoeGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSx0bil8MCkrTWF0aC5pbXVsKHZlLFF0'@;
put 'KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKHZlLHRuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsWnQpLG09KG09TWF0aC5pbXVsKE5lLGt0KSkrTWF0aC5pbXVsKHV0LFp0KXwwLEE9TWF0aC5pbXVsKHV0LGt0KSxFPUUrTWF0'@;
put 'aC5pbXVsKHJ0LG90KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChLZSxvdCl8MCxBPUErTWF0aC5pbXVsKEtlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmlt'@;
put 'dWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEV0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSxFdCl8MCxFPUUrTWF0aC5pbXVsKERlLGFuKXwwLG09KG09bStNYXRoLmltdWwoRGUsanQpfDApK01hdGguaW11bChr'@;
put 'ZSxhbil8MCxBPUErTWF0aC5pbXVsKGtlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIGZhPShVKyhFPUUrTWF0aC5pbXVsKGplLFF0KXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwoamUsdG4pfDApK01hdGguaW11bChBZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChBZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGZhPj4+MjYpfDAsZmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLG90KSxtPShtPU1hdGguaW11bChOZSx6dCkp'@;
put 'K01hdGguaW11bCh1dCxvdCl8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoS2UsV2UpfDAsQT1BK01hdGguaW11bChLZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeXQsRXQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LEV0KXwwLEU9RStNYXRoLmltdWwobnQsYW4pfDAsbT0obT1tK01hdGguaW11bChudCxqdCl8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsanQpfDAsRT1FK01hdGguaW11bChE'@;
put 'ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoa2UsY24pfDAsQT1BK01hdGguaW11bChrZSxmbil8MDt2YXIgbnI9KFUrKEU9RStNYXRoLmltdWwoUmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSx0bil8MCkrTWF0aC5pbXVsKEllLFF0'@;
put 'KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEllLHRuKXwwKSsobT4+PjEzKXwwKSsobnI+Pj4yNil8MCxuciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV2UpLG09KG09TWF0aC5pbXVsKE5lLEF0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0'@;
put 'aC5pbXVsKHJ0LGh0KXwwLG09KG09bStNYXRoLmltdWwocnQsRXQpfDApK01hdGguaW11bChLZSxodCl8MCxBPUErTWF0aC5pbXVsKEtlLEV0KXwwLEU9RStNYXRoLmltdWwoeXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LGFuKXwwLEE9QStNYXRoLmlt'@;
put 'dWwoTXQsanQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgb2E9KFUrKEU9RStNYXRoLmltdWwoRGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11'@;
put 'bChEZSx0bil8MCkrTWF0aC5pbXVsKGtlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsaHQpLG09KG09TWF0aC5pbXVsKE5lLEV0KSkrTWF0aC5pbXVsKHV0LGh0KXww'@;
put 'LEE9TWF0aC5pbXVsKHV0LEV0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09bStNYXRoLmltdWwocnQsanQpfDApK01hdGguaW11bChLZSxhbil8MCxBPUErTWF0aC5pbXVsKEtlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0'@;
put 'aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIF9hPShVKyhFPUUrTWF0aC5pbXVsKG50LFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsdG4pfDApK01hdGguaW11bChKZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChKZSx0bil8'@;
put 'MCkrKG0+Pj4xMyl8MCkrKF9hPj4+MjYpfDAsX2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGFuKSxtPShtPU1hdGguaW11bChOZSxqdCkpK01hdGguaW11bCh1dCxhbil8MCxBPU1hdGguaW11bCh1dCxqdCksRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGZu'@;
put 'KXwwKStNYXRoLmltdWwoS2UsY24pfDAsQT1BK01hdGguaW11bChLZSxmbil8MDt2YXIgT2E9KFUrKEU9RStNYXRoLmltdWwoeXQsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCx0bil8MCkrTWF0aC5pbXVsKE10LFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVs'@;
put 'KE10LHRuKXwwKSsobT4+PjEzKXwwKSsoT2E+Pj4yNil8MCxPYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsY24pLG09KG09TWF0aC5pbXVsKE5lLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgTmE9KFUrKEU9RStNYXRoLmltdWwocnQsUXQpfDApfDAp'@;
put 'KygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKEtlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEtlLHRuKXwwKSsobT4+PjEzKXwwKSsoTmE+Pj4yNil8MCxOYSY9NjcxMDg4NjM7dmFyIGVpPShVKyhFPU1hdGguaW11bChOZSxRdCkpfDApKygo'@;
put 'ODE5MSYobT0obT1NYXRoLmltdWwoTmUsdG4pKStNYXRoLmltdWwodXQsUXQpfDApKTw8MTMpfDA7cmV0dXJuIFU9KChBPU1hdGguaW11bCh1dCx0bikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxWWzBdPWNhLFZbMV09eGksVlsyXT15cixWWzNdPUduLFZbNF09S2ks'@;
put 'Vls1XT1KcixWWzZdPVFyLFZbN109TmksVls4XT1IaSxWWzldPUlhLFZbMTBdPVByLFZbMTFdPVlpLFZbMTJdPWZhLFZbMTNdPW5yLFZbMTRdPW9hLFZbMTVdPV9hLFZbMTZdPU9hLFZbMTddPU5hLFZbMThdPWVpLDAhPT1VJiYoVlsxOV09VSx4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBRKHos'@;
put 'Zyx5KXtyZXR1cm4obmV3IHEpLm11bHAoeixnLHkpfWZ1bmN0aW9uIHEoeixnKXt0aGlzLng9eix0aGlzLnk9Z31NYXRoLmltdWx8fChaPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVu'@;
put 'Z3RoJiYxMD09PWcubGVuZ3RoP1oodGhpcyxnLHkpOkM8NjM/Vyh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIFgoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlLHkubGVuZ3RoPXoubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0x'@;
put 'O1QrKyl7dmFyIFY9QztDPTA7Zm9yKHZhciBVPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULXoubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgbGU9KDB8ei53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSx3ZT02NzEwODg2MyZsZTtVPTY3MTA4ODYz'@;
put 'Jih3ZT13ZStVfDApLEMrPShWPShWPVYrKGxlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LFYmPTY3MTA4ODYzfXkud29yZHNbVF09VSx4PVYsVj1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTpRKHRoaXMsZyx5KSx4'@;
put 'fSxxLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LHEucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHks'@;
put 'eCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxxLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXtmb3IodmFyIFU9MDtVPFY7VSsrKUNbVV09eVtnW1VdXSxUW1Vd'@;
put 'PXhbZ1tVXV19LHEucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsVil7dGhpcy5wZXJtdXRlKFYsZyx5LHgsQyxUKTtmb3IodmFyIFU9MTtVPFQ7VTw8PTEpZm9yKHZhciBFPVU8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSks'@;
put 'YWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxsZT1BLHdlPTA7d2U8VTt3ZSsrKXt2YXIgWmU9eFthZSt3ZV0sUWU9Q1thZSt3ZV0sYXQ9eFthZSt3ZStVXSx4ZT1DW2FlK3dlK1VdLHZlPW5lKmF0LWxlKnhlO3hlPW5lKnhlK2xlKmF0LHhbYWUrd2VdPVplKyhhdD12ZSksQ1thZSt3ZV09'@;
put 'UWUreGUseFthZSt3ZStVXT1aZS1hdCxDW2FlK3dlK1VdPVFlLXhlLHdlIT09RSYmKHZlPW0qbmUtQSpsZSxsZT1tKmxlK0EqbmUsbmU9dmUpfX0scS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnww'@;
put 'O3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LHEucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gt'@;
put 'Qy0xXT0tVH19LHEucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpU'@;
put 'LzY3MTA4ODY0fDB9cmV0dXJuIGd9LHEucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsVj0wO1Y8eTtWKyspeFsyKlZdPTgxOTEmKFQrPTB8Z1tWXSkseFsyKlYrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoVj0yKnk7VjxDOysrVil4W1Zd'@;
put 'PTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0scS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0scS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNi'@;
put 'KGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxWPXRoaXMuc3R1YihDKSxVPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLGxlPXgud29yZHM7bGUubGVuZ3Ro'@;
put 'PUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsVSxDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKFUsVixFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLFYsYWUsbmUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIg'@;
put 'WmU9RVt3ZV0qYWVbd2VdLW1bd2VdKm5lW3dlXTttW3dlXT1FW3dlXSpuZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLGxlLFYsQyxUKSx0aGlzLmNvbmp1Z2F0ZShsZSxWLEMpLHRoaXMubm9ybWFsaXpl'@;
put 'MTNiKGxlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtn'@;
put 'Lmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksUSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcx'@;
put 'MDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hdPXksdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2'@;
put 'YXIgeT1mdW5jdGlvbiBCKHope2Zvcih2YXIgZz1uZXcgQXJyYXkoei5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KHoud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9y'@;
put 'KHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1'@;
put 'bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIFY9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgVT10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tU'@;
put 'XT0oMHx0aGlzLndvcmRzW1RdKS1VPDx5fFYsVj1VPj4+MjYteX1WJiYodGhpcy53b3Jkc1tUXT1WLHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndv'@;
put 'cmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51'@;
put 'bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LFY9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLFU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1WLEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPFY7bSsrKUUu'@;
put 'd29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1WfWlmKDAhPT1WKWlmKHRoaXMubGVuZ3RoPlYpZm9yKHRoaXMubGVuZ3RoLT1WLG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStWXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0x'@;
put 'O3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUmVX1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxl'@;
put 'bmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJu'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYx'@;
put 'PDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxl'@;
put 'bmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRo'@;
put 'aXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0'@;
put 'aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0'@;
put 'aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJu'@;
put 'IHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9'@;
put 'MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJv'@;
put 'dG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9'@;
put 'LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBWLFU9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtWPSgwfHRoaXMud29yZHNbVCt4XSkrVTt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O1U9KChWLT02NzEw'@;
put 'ODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylVPShWPSgwfHRoaXMud29yZHNbVCt4XSkrVSk+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWO2lmKDA9PT1VKXJldHVybiB0aGlzLnN0cmlw'@;
put 'KCk7Zm9yKHAoLTE9PT1VKSxVPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKVU9KFY9LSgwfHRoaXMud29yZHNbVF0pK1UpPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJlY7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9u'@;
put 'KGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhWKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksVj0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYo'@;
put 'Im1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFl'@;
put 'LG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgbGU9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihsZT1NYXRoLm1pbihsZS9WfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQs'@;
put 'bGUsbmUpOzAhPT1DLm5lZ2F0aXZlOylsZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09bGUpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVz'@;
put 'aHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oVj10'@;
put 'aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhWPXRoaXMuZGl2'@;
put 'bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSkse2RpdjpDLG1vZDpWLm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQu'@;
put 'aXN1YihnKSkse2RpdjpWLmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51'@;
put 'bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxWfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo'@;
put 'aXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5'@;
put 'cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksVj14LmNtcChDKTtyZXR1cm4g'@;
put 'VjwwfHwxPT09VCYmMD09PVY/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0Mt'@;
put 'LSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndv'@;
put 'cmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIg'@;
put 'eT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPW5ldyB3KDApLFU9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtm'@;
put 'b3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRk'@;
put 'KG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBsZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmbGU8MjY7KytsZSx3ZTw8PTEpO2lmKGxlPjApZm9yKHguaXVzaHJuKGxlKTtsZS0tID4wOykoVi5pc09kZCgpfHxVLmlzT2RkKCkpJiYoVi5pYWRkKG0pLFUu'@;
put 'aXN1YihBKSksVi5pdXNocm4oMSksVS5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoViksVC5pc3ViKFUpKTooeC5pc3ViKHkpLFYuaXN1YihDKSxVLmlzdWIoVCkpfXJldHVybnthOlYsYjpVLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5j'@;
put 'dGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBu'@;
put 'KDEpPjA7KXtmb3IodmFyIFU9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZVPDI2OysrVSxFPDw9MSk7aWYoVT4wKWZvcih5Lml1c2hybihVKTtVLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKFYpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8'@;
put 'PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoViksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYm'@;
put 'YWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtm'@;
put 'b3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBWPXk7eT14LHg9'@;
put 'Vn1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEo'@;
put 'MSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLFY9eDswIT09VCYmVjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPTB8dGhpcy53'@;
put 'b3Jkc1tWXTtUPShVKz1UKT4+PjI2LHRoaXMud29yZHNbVl09VSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tWXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndv'@;
put 'cmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZyks'@;
put 'cChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcu'@;
put 'bmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVu'@;
put 'Z3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4g'@;
put 'eX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJv'@;
put 'dG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRl'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgU2UoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMu'@;
put 'bmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0'@;
put 'aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51'@;
put 'bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5'@;
put 'cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90'@;
put 'b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5z'@;
put 'cXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJ'@;
put 'bnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxn'@;
put 'KX07dmFyIHRlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoeixnKXt0aGlzLm5hbWU9eix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0'@;
put 'aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHNlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywi'@;
put 'cDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1'@;
put 'bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZSh6KXtpZigic3RyaW5nIj09dHlwZW9mIHope3ZhciBnPXcuX3ByaW1lKHopO3RoaXMu'@;
put 'bT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcCh6Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXosdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKHope1NlLmNhbGwodGhpcyx6KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0'@;
put 'JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhp'@;
put 'cy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1h'@;
put 'dGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9'@;
put 'eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNo'@;
put 'cm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LE4oc2UsaWUpLHNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKysp'@;
put 'eS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBWPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109ViZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBVPTB8Zy53b3Jk'@;
put 'c1tUXTtnLndvcmRzW1QtMTBdPShVJngpPDw0fFY+Pj4yMixWPVV9Zy53b3Jkc1tULTEwXT1WPj4+PTIyLGcubGVuZ3RoLT0wPT09ViYmZy5sZW5ndGg+MTA/MTA6OX0sc2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsx'@;
put 'XT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSww'@;
put 'PT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sTihnZSxpZSksTihfZSxpZSksTihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYz'@;
put 'JkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYodGVbZ10pcmV0dXJuIHRlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgc2U7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3'@;
put 'IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gdGVbZ109eSx5fSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2'@;
put 'ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBv'@;
put 'c2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhp'@;
put 'cy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4'@;
put 'PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4Lmlz'@;
put 'dWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7'@;
put 'dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LFNlLnByb3RvdHlwZS5p'@;
put 'bXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0u'@;
put 'YW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFD'@;
put 'LmlzWmVybygpKTt2YXIgVj1uZXcgdygxKS50b1JlZCh0aGlzKSxVPVYucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChVKTspbS5yZWRJQWRk'@;
put 'KFUpO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxsZT1UOzAhPT1uZS5jbXAoVik7KXtmb3IodmFyIHdlPW5lLFplPTA7MCE9PXdlLmNtcChWKTtaZSsrKXdlPXdlLnJlZFNxcigpO3AoWmU8bGUpO3Zh'@;
put 'ciBRZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihsZS1aZS0xKSk7YWU9YWUucmVkTXVsKFFlKSxBPVFlLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxsZT1aZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJu'@;
put 'IDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBn'@;
put 'LmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgVj1DWzBdLFU9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09'@;
put 'MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO1YhPT1DWzBdJiYoVj10aGlzLnNxcihWKSksMCE9PW5lfHwwIT09VT8oVTw8PTEsVXw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihWPXRo'@;
put 'aXMubXVsKFYsQ1tVXSksRT0wLFU9MCkpOkU9MH1tPTI2fXJldHVybiBWfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3Zh'@;
put 'ciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyB6ZShnKX0sTih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5'@;
put 'cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVu'@;
put 'Z3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMu'@;
put 'bSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFz'@;
put 'a24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMu'@;
put 'bSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDQ0Mjk6Y2U9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IEo9T2JqZWN0LmRlZmluZVByb3BlcnR5fHwhMTtpZihKKXRyeXtKKHt9LCJhIix7dmFsdWU6MX0pfWNhdGNoe0o9ITF9Y2UuZXhwb3J0cz1KfSwzOTgxOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9RXZhbEVycm9yfSwxNjQ4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9RXJy'@;
put 'b3J9LDQ3MjY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1SYW5nZUVycm9yfSw2NzEyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9UmVmZXJlbmNlRXJyb3J9LDM0NjQ6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1TeW50YXhFcnJvcn0sNDQ1MzpjZT0+eyJ1c2Ugc3Ry'@;
put 'aWN0IjtjZS5leHBvcnRzPVR5cGVFcnJvcn0sMzkxNTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVVSSUVycm9yfSw4ODkyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9T2JqZWN0fSw3MTg3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBOLEQ9Yig1MTA4KSxfPSJvYmpl'@;
put 'Y3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwscD1fJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5hcHBseT9fLmFwcGx5OmZ1bmN0aW9uKF9lLFRlLFNlKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoX2UsVGUsU2UpfTtOPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBf'@;
put 'Lm93bktleXM/Xy5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oX2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoX2UpKX06ZnVuY3Rpb24oX2Upe3JldHVybiBPYmpl'@;
put 'Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSl9O3ZhciBGPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oX2Upe3JldHVybiBfZSE9X2V9O2Z1bmN0aW9uIEgoKXtILmluaXQuY2FsbCh0aGlzKX1jZS5leHBvcnRzPUgsY2UuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHRlKGdlLF9lKXtyZXR1cm4gbmV3'@;
put 'IFByb21pc2UoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIHplKGcpe2dlLnJlbW92ZUxpc3RlbmVyKF9lLHopLFNlKGcpfWZ1bmN0aW9uIHooKXsiZnVuY3Rpb24iPT10eXBlb2YgZ2UucmVtb3ZlTGlzdGVuZXImJmdlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsemUpLFRlKFtdLnNsaWNlLmNh'@;
put 'bGwoYXJndW1lbnRzKSl9c2UoZ2UsX2Useix7b25jZTohMH0pLCJlcnJvciIhPT1fZSYmZnVuY3Rpb24gaWUoZ2UsX2UsVGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBnZS5vbiYmc2UoZ2UsImVycm9yIixfZSxUZSl9KGdlLHplLHtvbmNlOiEwfSl9KX0sSC5FdmVudEVtaXR0ZXI9SCxILnByb3Rv'@;
put 'dHlwZS5fZXZlbnRzPXZvaWQgMCxILnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxILnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgUj0xMDtmdW5jdGlvbiBqKGdlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZ2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIg'@;
put 'YXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGdlKX1mdW5jdGlvbiBQKGdlKXtyZXR1cm4gdm9pZCAwPT09Z2UuX21heExpc3RlbmVycz9ILmRlZmF1bHRNYXhMaXN0ZW5lcnM6Z2UuX21heExpc3RlbmVyc31mdW5jdGlvbiBMKGdlLF9l'@;
put 'LFRlLFNlKXt2YXIgemUseixnO2lmKGooVGUpLHZvaWQgMD09PSh6PWdlLl9ldmVudHMpPyh6PWdlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxnZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PXoubmV3TGlzdGVuZXImJihnZS5lbWl0KCJuZXdMaXN0ZW5lciIsX2UsVGUubGlzdGVu'@;
put 'ZXI/VGUubGlzdGVuZXI6VGUpLHo9Z2UuX2V2ZW50cyksZz16W19lXSksdm9pZCAwPT09ZylnPXpbX2VdPVRlLCsrZ2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGc/Zz16W19lXT1TZT9bVGUsZ106W2csVGVdOlNlP2cudW5zaGlmdChUZSk6Zy5wdXNoKFRlKSwo'@;
put 'emU9UChnZSkpPjAmJmcubGVuZ3RoPnplJiYhZy53YXJuZWQpe2cud2FybmVkPSEwO3ZhciB5PW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK2cubGVuZ3RoKyIgIitTdHJpbmcoX2UpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRl'@;
put 'ci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO3kubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIix5LmVtaXR0ZXI9Z2UseS50eXBlPV9lLHkuY291bnQ9Zy5sZW5ndGgsZnVuY3Rpb24gdyhnZSl7RCYmRC53YXJuJiZELndhcm4oZ2UpfSh5KX1yZXR1cm4g'@;
put 'Z2V9ZnVuY3Rpb24gWSgpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3Rl'@;
put 'bmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gQihnZSxfZSxUZSl7dmFyIFNlPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpnZSx0eXBlOl9lLGxpc3RlbmVyOlRlfSx6ZT1ZLmJpbmQoU2UpO3JldHVybiB6ZS5saXN0ZW5lcj1UZSxTZS53cmFwRm49emUs'@;
put 'emV9ZnVuY3Rpb24gVyhnZSxfZSxUZSl7dmFyIFNlPWdlLl9ldmVudHM7aWYodm9pZCAwPT09U2UpcmV0dXJuW107dmFyIHplPVNlW19lXTtyZXR1cm4gdm9pZCAwPT09emU/W106ImZ1bmN0aW9uIj09dHlwZW9mIHplP1RlP1t6ZS5saXN0ZW5lcnx8emVdOlt6ZV06VGU/ZnVuY3Rpb24gcShn'@;
put 'ZSl7Zm9yKHZhciBfZT1uZXcgQXJyYXkoZ2UubGVuZ3RoKSxUZT0wO1RlPF9lLmxlbmd0aDsrK1RlKV9lW1RlXT1nZVtUZV0ubGlzdGVuZXJ8fGdlW1RlXTtyZXR1cm4gX2V9KHplKTpYKHplLHplLmxlbmd0aCl9ZnVuY3Rpb24gWihnZSl7dmFyIF9lPXRoaXMuX2V2ZW50cztpZih2b2lkIDAh'@;
put 'PT1fZSl7dmFyIFRlPV9lW2dlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVGUpcmV0dXJuIDE7aWYodm9pZCAwIT09VGUpcmV0dXJuIFRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBYKGdlLF9lKXtmb3IodmFyIFRlPW5ldyBBcnJheShfZSksU2U9MDtTZTxfZTsrK1NlKVRlW1NlXT1nZVtT'@;
put 'ZV07cmV0dXJuIFRlfWZ1bmN0aW9uIHNlKGdlLF9lLFRlLFNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZ2Uub24pU2Uub25jZT9nZS5vbmNlKF9lLFRlKTpnZS5vbihfZSxUZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZ2UuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZ2UpO2dlLmFkZEV2ZW50TGlzdGVuZXIoX2UsZnVuY3Rpb24gemUoeil7U2Uub25jZSYmZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihfZSx6ZSksVGUo'@;
put 'eil9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEgsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSfSxzZXQ6ZnVuY3Rpb24oZ2Upe2lmKCJudW1iZXIiIT10eXBlb2YgZ2V8fGdlPDB8fEYoZ2UpKXRocm93IG5ldyBSYW5nZUVycm9y'@;
put 'KCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZ2UrIi4iKTtSPWdlfX0pLEguaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2'@;
put 'ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sSC5wcm90b3R5cGUuc2V0TWF4'@;
put 'TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtpZigibnVtYmVyIiE9dHlwZW9mIF9lfHxfZTwwfHxGKF9lKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK19lKyIu'@;
put 'Iik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1fZSx0aGlzfSxILnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gUCh0aGlzKX0sSC5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihfZSl7Zm9yKHZhciBUZT1bXSxTZT0xO1NlPGFyZ3VtZW50cy5sZW5ndGg7U2Ur'@;
put 'KylUZS5wdXNoKGFyZ3VtZW50c1tTZV0pO3ZhciB6ZT0iZXJyb3IiPT09X2Usej10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09eil6ZT16ZSYmdm9pZCAwPT09ei5lcnJvcjtlbHNlIGlmKCF6ZSlyZXR1cm4hMTtpZih6ZSl7dmFyIGc7aWYoVGUubGVuZ3RoPjAmJihnPVRlWzBdKSxnIGluc3Rh'@;
put 'bmNlb2YgRXJyb3IpdGhyb3cgZzt2YXIgeT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhnPyIgKCIrZy5tZXNzYWdlKyIpIjoiIikpO3Rocm93IHkuY29udGV4dD1nLHl9dmFyIHg9eltfZV07aWYodm9pZCAwPT09eClyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgeClwKHgs'@;
put 'dGhpcyxUZSk7ZWxzZXt2YXIgQz14Lmxlbmd0aCxUPVgoeCxDKTtmb3IoU2U9MDtTZTxDOysrU2UpcChUW1NlXSx0aGlzLFRlKX1yZXR1cm4hMH0sSC5wcm90b3R5cGUub249SC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITEpfSxI'@;
put 'LnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITApfSxILnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4gaihUZSksdGhpcy5vbihfZSxCKHRoaXMsX2UsVGUpKSx0aGlzfSxILnByb3RvdHlwZS5wcmVwZW5k'@;
put 'T25jZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4gaihUZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoX2UsQih0aGlzLF9lLFRlKSksdGhpc30sSC5wcm90b3R5cGUub2ZmPUgucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXt2YXIgU2UsemUseixnLHk7aWYo'@;
put 'aihUZSksdm9pZCAwPT09KHplPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KFNlPXplW19lXSkpcmV0dXJuIHRoaXM7aWYoU2U9PT1UZXx8U2UubGlzdGVuZXI9PT1UZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwp'@;
put 'OihkZWxldGUgemVbX2VdLHplLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixfZSxTZS5saXN0ZW5lcnx8VGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBTZSl7Zm9yKHo9LTEsZz1TZS5sZW5ndGgtMTtnPj0wO2ctLSlpZihTZVtnXT09PVRlfHxTZVtn'@;
put 'XS5saXN0ZW5lcj09PVRlKXt5PVNlW2ddLmxpc3RlbmVyLHo9ZzticmVha31pZih6PDApcmV0dXJuIHRoaXM7MD09PXo/U2Uuc2hpZnQoKTpmdW5jdGlvbiBRKGdlLF9lKXtmb3IoO19lKzE8Z2UubGVuZ3RoO19lKyspZ2VbX2VdPWdlW19lKzFdO2dlLnBvcCgpfShTZSx6KSwxPT09U2UubGVu'@;
put 'Z3RoJiYoemVbX2VdPVNlWzBdKSx2b2lkIDAhPT16ZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsX2UseXx8VGUpfXJldHVybiB0aGlzfSxILnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3ZhciBUZSxTZSx6ZTtpZih2b2lkIDA9'@;
put 'PT0oU2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1TZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PVNlW19lXSYmKDA9'@;
put 'PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIFNlW19lXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGcsej1PYmplY3Qua2V5cyhTZSk7Zm9yKHplPTA7emU8ei5sZW5ndGg7Kyt6ZSkicmVtb3ZlTGlzdGVuZXIi'@;
put 'IT09KGc9elt6ZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhnKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZihUZT1TZVtfZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGUpO2Vsc2UgaWYodm9pZCAwIT09VGUpZm9yKHplPVRlLmxlbmd0aC0xO3plPj0wO3plLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihfZSxUZVt6ZV0pO3JldHVybiB0aGlzfSxILnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rp'@;
put 'b24oX2Upe3JldHVybiBXKHRoaXMsX2UsITApfSxILnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITEpfSxILmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZ2UsX2Upe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBnZS5saXN0ZW5lckNvdW50P2dl'@;
put 'Lmxpc3RlbmVyQ291bnQoX2UpOlouY2FsbChnZSxfZSl9LEgucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9WixILnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/Tih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODooY2UsSixiKT0+e3ZhciBE'@;
put 'PWIoOTUwOSkuQnVmZmVyLF89YigyMzE4KTtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoTix3LEYsSCl7aWYoRC5pc0J1ZmZlcihOKXx8KE49RC5mcm9tKE4sImJpbmFyeSIpKSx3JiYoRC5pc0J1ZmZlcih3KXx8KHc9RC5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBS'@;
put 'YW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBSPUYvOCxqPUQuYWxsb2MoUiksUD1ELmFsbG9jKEh8fDApLEw9RC5hbGxvYygwKTtSPjB8fEg+MDspe3ZhciBZPW5ldyBfO1kudXBkYXRlKEwpLFkudXBkYXRlKE4pLHcmJlkudXBk'@;
put 'YXRlKHcpLEw9WS5kaWdlc3QoKTt2YXIgQj0wO2lmKFI+MCl7dmFyIFc9ai5sZW5ndGgtUjtCPU1hdGgubWluKFIsTC5sZW5ndGgpLEwuY29weShqLFcsMCxCKSxSLT1CfWlmKEI8TC5sZW5ndGgmJkg+MCl7dmFyIFo9UC5sZW5ndGgtSCxYPU1hdGgubWluKEgsTC5sZW5ndGgtQik7TC5jb3B5'@;
put 'KFAsWixCLEIrWCksSC09WH19cmV0dXJuIEwuZmlsbCgwKSx7a2V5OmosaXY6UH19fSw0MDI5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTMyMCksXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjZS5leHBvcnRz'@;
put 'PWZ1bmN0aW9uKGosUCxMKXtpZighRChQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgWTthcmd1bWVudHMubGVuZ3RoPj0zJiYoWT1MKSxmdW5jdGlvbiBIKFIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1fLmNhbGwoUil9KGopP2Z1'@;
put 'bmN0aW9uKGosUCxMKXtmb3IodmFyIFk9MCxCPWoubGVuZ3RoO1k8QjtZKyspcC5jYWxsKGosWSkmJihudWxsPT1MP1AoaltZXSxZLGopOlAuY2FsbChMLGpbWV0sWSxqKSl9KGosUCxZKToic3RyaW5nIj09dHlwZW9mIGo/ZnVuY3Rpb24oaixQLEwpe2Zvcih2YXIgWT0wLEI9ai5sZW5ndGg7'@;
put 'WTxCO1krKyludWxsPT1MP1Aoai5jaGFyQXQoWSksWSxqKTpQLmNhbGwoTCxqLmNoYXJBdChZKSxZLGopfShqLFAsWSk6ZnVuY3Rpb24oaixQLEwpe2Zvcih2YXIgWSBpbiBqKXAuY2FsbChqLFkpJiYobnVsbD09TD9QKGpbWV0sWSxqKTpQLmNhbGwoTCxqW1ldLFksaikpfShqLFAsWSl9fSw2'@;
put 'MjMwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93LkZvcm1EYXRhfSwzODczOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSk7Y29uc3QgXz1iKDc3KSxwPWIoMjUyMCksTj1iKDEzODEpLm1r'@;
put 'ZGlyc1N5bmMsdz1iKDMxOCkudXRpbWVzTWlsbGlzU3luYyxGPWIoMjczMyk7ZnVuY3Rpb24gUihfZSxUZSxTZSx6ZSl7Y29uc3QgZz0oemUuZGVyZWZlcmVuY2U/Xy5zdGF0U3luYzpfLmxzdGF0U3luYykoVGUpO2lmKGcuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gUShfZSxUZSxT'@;
put 'ZSx6ZSx6KXtyZXR1cm4gVGU/dGUoU2UsemUseik6ZnVuY3Rpb24gcShfZSxUZSxTZSx6ZSl7cmV0dXJuIF8ubWtkaXJTeW5jKFNlKSx0ZShUZSxTZSx6ZSksWihTZSxfZSl9KF9lLm1vZGUsU2UsemUseil9KGcsX2UsVGUsU2UsemUpO2lmKGcuaXNGaWxlKCl8fGcuaXNDaGFyYWN0ZXJEZXZp'@;
put 'Y2UoKXx8Zy5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIGooX2UsVGUsU2UsemUseil7cmV0dXJuIFRlP2Z1bmN0aW9uIFAoX2UsVGUsU2UsemUpe2lmKHplLm92ZXJ3cml0ZSlyZXR1cm4gXy51bmxpbmtTeW5jKFNlKSxMKF9lLFRlLFNlLHplKTtpZih6ZS5lcnJvck9uRXhpc3Qp'@;
put 'dGhyb3cgbmV3IEVycm9yKGAnJHtTZX0nIGFscmVhZHkgZXhpc3RzYCl9KF9lLFNlLHplLHopOkwoX2UsU2UsemUseil9KGcsX2UsVGUsU2UsemUpO2lmKGcuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24gc2UoX2UsVGUsU2UsemUpe2xldCB6PV8ucmVhZGxpbmtTeW5jKFRlKTtp'@;
put 'Zih6ZS5kZXJlZmVyZW5jZSYmKHo9cC5yZXNvbHZlKEQuY3dkKCkseikpLF9lKXtsZXQgZzt0cnl7Zz1fLnJlYWRsaW5rU3luYyhTZSl9Y2F0Y2goeSl7aWYoIkVJTlZBTCI9PT15LmNvZGV8fCJVTktOT1dOIj09PXkuY29kZSlyZXR1cm4gXy5zeW1saW5rU3luYyh6LFNlKTt0aHJvdyB5fWlm'@;
put 'KHplLmRlcmVmZXJlbmNlJiYoZz1wLnJlc29sdmUoRC5jd2QoKSxnKSksRi5pc1NyY1N1YmRpcih6LGcpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7en0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7Z30nLmApO2lmKEYuaXNTcmNTdWJkaXIoZyx6KSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7Z30nIHdpdGggJyR7en0nLmApO3JldHVybiBmdW5jdGlvbiBnZShfZSxUZSl7cmV0dXJuIF8udW5saW5rU3luYyhUZSksXy5zeW1saW5rU3luYyhfZSxUZSl9KHosU2UpfXJldHVybiBfLnN5bWxpbmtTeW5jKHosU2UpfShfZSxUZSxTZSx6'@;
put 'ZSk7dGhyb3cgZy5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtUZX1gKTpnLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7VGV9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7VGV9YCl9ZnVuY3Rpb24g'@;
put 'TChfZSxUZSxTZSx6ZSl7cmV0dXJuIF8uY29weUZpbGVTeW5jKFRlLFNlKSx6ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJmZ1bmN0aW9uIFkoX2UsVGUsU2UpeyhmdW5jdGlvbiBCKF9lKXtyZXR1cm4hKDEyOCZfZSl9KShfZSkmJmZ1bmN0aW9uIFcoX2UsVGUpe1ooX2UsMTI4fFRlKX0oU2UsX2Up'@;
put 'LGZ1bmN0aW9uIFgoX2UsVGUpe2NvbnN0IFNlPV8uc3RhdFN5bmMoX2UpO3coVGUsU2UuYXRpbWUsU2UubXRpbWUpfShUZSxTZSl9KF9lLm1vZGUsVGUsU2UpLFooU2UsX2UubW9kZSl9ZnVuY3Rpb24gWihfZSxUZSl7cmV0dXJuIF8uY2htb2RTeW5jKF9lLFRlKX1mdW5jdGlvbiB0ZShfZSxU'@;
put 'ZSxTZSl7Y29uc3QgemU9Xy5vcGVuZGlyU3luYyhfZSk7dHJ5e2xldCB6O2Zvcig7bnVsbCE9PSh6PXplLnJlYWRTeW5jKCkpOylpZSh6Lm5hbWUsX2UsVGUsU2UpfWZpbmFsbHl7emUuY2xvc2VTeW5jKCl9fWZ1bmN0aW9uIGllKF9lLFRlLFNlLHplKXtjb25zdCB6PXAuam9pbihUZSxfZSks'@;
put 'Zz1wLmpvaW4oU2UsX2UpO2lmKHplLmZpbHRlciYmIXplLmZpbHRlcih6LGcpKXJldHVybjtjb25zdHtkZXN0U3RhdDp5fT1GLmNoZWNrUGF0aHNTeW5jKHosZywiY29weSIsemUpO3JldHVybiBSKHkseixnLHplKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEgoX2UsVGUsU2UpeyJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTZSYmKFNlPXtmaWx0ZXI6U2V9KSwoU2U9U2V8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gU2UpfHwhIVNlLmNsb2JiZXIsU2Uub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gU2U/ISFTZS5vdmVyd3JpdGU6U2UuY2xvYmJlcixTZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMy'@;
put 'Ij09PUQuYXJjaCYmRC5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIs'@;
put 'Ildhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMiIpO2NvbnN0e3NyY1N0YXQ6emUsZGVzdFN0YXQ6en09Ri5jaGVja1BhdGhzU3luYyhfZSxUZSwiY29weSIsU2UpO2lmKEYuY2hlY2tQYXJlbnRQYXRoc1N5bmMoX2UsemUsVGUsImNvcHkiKSxTZS5maWx0ZXImJiFTZS5maWx0ZXIoX2UsVGUp'@;
put 'KXJldHVybjtjb25zdCBnPXAuZGlybmFtZShUZSk7cmV0dXJuIF8uZXhpc3RzU3luYyhnKXx8TihnKSxSKHosX2UsVGUsU2UpfX0sNzE4OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO2NvbnN0IF89Yig3NzQ5KSxwPWIoMjUyMCkse21rZGlyczpOfT1iKDEzODEpLHtw'@;
put 'YXRoRXhpc3RzOnd9PWIoOTI1Nykse3V0aW1lc01pbGxpczpGfT1iKDMxOCksSD1iKDI3MzMpO2Z1bmN0aW9uIGooKXtyZXR1cm4oaj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemU9e30peyJmdW5jdGlvbiI9PXR5cGVvZiB6ZSYmKHplPXtmaWx0ZXI6emV9KSx6ZS5jbG9i'@;
put 'YmVyPSEoImNsb2JiZXIiaW4gemUpfHwhIXplLmNsb2JiZXIsemUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gemU/ISF6ZS5vdmVyd3JpdGU6emUuY2xvYmJlcix6ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUQuYXJjaCYmRC5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZl'@;
put 'VGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMSIpO2NvbnN0e3NyY1N0YXQ6'@;
put 'eixkZXN0U3RhdDpnfT15aWVsZCBILmNoZWNrUGF0aHMoVGUsU2UsImNvcHkiLHplKTtpZih5aWVsZCBILmNoZWNrUGFyZW50UGF0aHMoVGUseixTZSwiY29weSIpLCEoeWllbGQgUChUZSxTZSx6ZSkpKXJldHVybjtjb25zdCB4PXAuZGlybmFtZShTZSk7KHlpZWxkIHcoeCkpfHwoeWllbGQg'@;
put 'Tih4KSkseWllbGQgWShnLFRlLFNlLHplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUChUZSxTZSx6ZSl7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEwoKXtyZXR1cm4oTD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUpe3Jl'@;
put 'dHVybiF6ZS5maWx0ZXJ8fHplLmZpbHRlcihUZSxTZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFkoVGUsU2UsemUseil7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEIoKXtyZXR1cm4gQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUs'@;
put 'U2UsemUseil7Y29uc3QgeT15aWVsZCh6LmRlcmVmZXJlbmNlP18uc3RhdDpfLmxzdGF0KShTZSk7aWYoeS5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBpZShUZSxTZSx6ZSx6LGcpe3JldHVybiBzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHksVGUsU2UsemUseik7aWYoeS5pc0Zp'@;
put 'bGUoKXx8eS5pc0NoYXJhY3RlckRldmljZSgpfHx5LmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24gVyhUZSxTZSx6ZSx6LGcpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oeSxUZSxTZSx6ZSx6KTtpZih5LmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIGdl'@;
put 'KFRlLFNlLHplLHope3JldHVybiBfZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFRlLFNlLHplLHopO3Rocm93IHkuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7U2V9YCk6eS5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBw'@;
put 'aXBlOiAke1NlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1NlfWApfSksQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWigpe3JldHVybihaPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSx6LGcpe2lmKCFTZSlyZXR1cm4gWChUZSx6ZSx6LGcpO2lm'@;
put 'KGcub3ZlcndyaXRlKXJldHVybiB5aWVsZCBfLnVubGluayh6KSxYKFRlLHplLHosZyk7aWYoZy5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHt6fScgYWxyZWFkeSBleGlzdHNgKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWChUZSxTZSx6ZSx6KXtyZXR1cm4g'@;
put 'US5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUSgpe3JldHVybihRPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSx6KXtpZih5aWVsZCBfLmNvcHlGaWxlKFNlLHplKSx6LnByZXNlcnZlVGltZXN0YW1wcyl7KGZ1bmN0aW9uIHEoVGUpe3JldHVybiEoMTI4JlRl'@;
put 'KX0pKFRlLm1vZGUpJiYoeWllbGQgZnVuY3Rpb24gdGUoVGUsU2Upe3JldHVybiBfLmNobW9kKFRlLDEyOHxTZSl9KHplLFRlLm1vZGUpKTtjb25zdCBnPXlpZWxkIF8uc3RhdChTZSk7eWllbGQgRih6ZSxnLmF0aW1lLGcubXRpbWUpfXJldHVybiBfLmNobW9kKHplLFRlLm1vZGUpfSkpLmFw'@;
put 'cGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBzZSgpe3JldHVybihzZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUseixnKXtTZXx8KHlpZWxkIF8ubWtkaXIoeikpO2NvbnN0IHk9W107dmFyIFQseD0hMSxDPSExO3RyeXtmb3IodmFyIFUsVj1fYXN5bmNJdGVyYXRv'@;
put 'cih5aWVsZCBfLm9wZW5kaXIoemUpKTt4PSEoVT15aWVsZCBWLm5leHQoKSkuZG9uZTt4PSExKXtjb25zdCBFPVUudmFsdWU7e2NvbnN0IG09cC5qb2luKHplLEUubmFtZSksQT1wLmpvaW4oeixFLm5hbWUpO3kucHVzaChQKG0sQSxnKS50aGVuKGFlPT57aWYoYWUpcmV0dXJuIEguY2hlY2tQ'@;
put 'YXRocyhtLEEsImNvcHkiLGcpLnRoZW4oKHtkZXN0U3RhdDpuZX0pPT5ZKG5lLG0sQSxnKSl9KSl9fX1jYXRjaChFKXtDPSEwLFQ9RX1maW5hbGx5e3RyeXt4JiZudWxsIT1WLnJldHVybiYmKHlpZWxkIFYucmV0dXJuKCkpfWZpbmFsbHl7aWYoQyl0aHJvdyBUfX15aWVsZCBQcm9taXNlLmFs'@;
put 'bCh5KSxTZXx8KHlpZWxkIF8uY2htb2QoeixUZS5tb2RlKSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9lKCl7cmV0dXJuKF9lPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSx6KXtsZXQgZz15aWVsZCBfLnJlYWRsaW5rKFNlKTtpZih6LmRlcmVmZXJl'@;
put 'bmNlJiYoZz1wLnJlc29sdmUoRC5jd2QoKSxnKSksIVRlKXJldHVybiBfLnN5bWxpbmsoZyx6ZSk7bGV0IHk9bnVsbDt0cnl7eT15aWVsZCBfLnJlYWRsaW5rKHplKX1jYXRjaCh4KXtpZigiRUlOVkFMIj09PXguY29kZXx8IlVOS05PV04iPT09eC5jb2RlKXJldHVybiBfLnN5bWxpbmsoZyx6'@;
put 'ZSk7dGhyb3cgeH1pZih6LmRlcmVmZXJlbmNlJiYoeT1wLnJlc29sdmUoRC5jd2QoKSx5KSksSC5pc1NyY1N1YmRpcihnLHkpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Z30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7eX0nLmApO2lmKEguaXNTcmNTdWJkaXIo'@;
put 'eSxnKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7eX0nIHdpdGggJyR7Z30nLmApO3JldHVybiB5aWVsZCBfLnVubGluayh6ZSksXy5zeW1saW5rKGcsemUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPWZ1bmN0aW9uIFIoVGUsU2Upe3JldHVybiBq'@;
put 'LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDY0NjQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDg5ODEpLmZyb21Qcm9taXNlO2NlLmV4cG9ydHM9e2NvcHk6RChiKDcxODkpKSxjb3B5U3luYzpiKDM4NzMpfX0sNTU5MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBE'@;
put 'PWIoODk4MSkuZnJvbVByb21pc2UsXz1iKDc3NDkpLHA9YigyNTIwKSxOPWIoMTM4MSksdz1iKDQ1NDIpLEY9RChmdW5jdGlvbigpe3ZhciBSPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQKXtsZXQgTDt0cnl7TD15aWVsZCBfLnJlYWRkaXIoUCl9Y2F0Y2h7cmV0dXJuIE4ubWtkaXJz'@;
put 'KFApfXJldHVybiBQcm9taXNlLmFsbChMLm1hcChZPT53LnJlbW92ZShwLmpvaW4oUCxZKSkpKX0pO3JldHVybiBmdW5jdGlvbiBqKFApe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpO2Z1bmN0aW9uIEgoUil7bGV0IGo7dHJ5e2o9Xy5yZWFkZGlyU3luYyhSKX1jYXRjaHty'@;
put 'ZXR1cm4gTi5ta2RpcnNTeW5jKFIpfWouZm9yRWFjaChQPT57UD1wLmpvaW4oUixQKSx3LnJlbW92ZVN5bmMoUCl9KX1jZS5leHBvcnRzPXtlbXB0eURpclN5bmM6SCxlbXB0eWRpclN5bmM6SCxlbXB0eURpcjpGLGVtcHR5ZGlyOkZ9fSw2NTMwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2Nv'@;
put 'bnN0IEQ9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoMjUyMCkscD1iKDc3NDkpLE49YigxMzgxKTtmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFIpe2xldCBqO3RyeXtqPXlpZWxkIHAuc3RhdChSKX1jYXRjaHt9aWYoaiYmai5pc0ZpbGUoKSlyZXR1'@;
put 'cm47Y29uc3QgUD1fLmRpcm5hbWUoUik7bGV0IEw9bnVsbDt0cnl7TD15aWVsZCBwLnN0YXQoUCl9Y2F0Y2goWSl7aWYoIkVOT0VOVCI9PT1ZLmNvZGUpcmV0dXJuIHlpZWxkIE4ubWtkaXJzKFApLHZvaWQoeWllbGQgcC53cml0ZUZpbGUoUiwiIikpO3Rocm93IFl9TC5pc0RpcmVjdG9yeSgp'@;
put 'P3lpZWxkIHAud3JpdGVGaWxlKFIsIiIpOnlpZWxkIHAucmVhZGRpcihQKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17Y3JlYXRlRmlsZTpEKGZ1bmN0aW9uIHcoUil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlRmlsZVN5bmM6ZnVuY3Rpb24g'@;
put 'SChSKXtsZXQgajt0cnl7aj1wLnN0YXRTeW5jKFIpfWNhdGNoe31pZihqJiZqLmlzRmlsZSgpKXJldHVybjtjb25zdCBQPV8uZGlybmFtZShSKTt0cnl7cC5zdGF0U3luYyhQKS5pc0RpcmVjdG9yeSgpfHxwLnJlYWRkaXJTeW5jKFApfWNhdGNoKEwpe2lmKCFMfHwiRU5PRU5UIiE9PUwuY29k'@;
put 'ZSl0aHJvdyBMO04ubWtkaXJzU3luYyhQKX1wLndyaXRlRmlsZVN5bmMoUiwiIil9fX0sMTcyMDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtjcmVhdGVGaWxlOkQsY3JlYXRlRmlsZVN5bmM6X309Yig2NTMwKSx7Y3JlYXRlTGluazpwLGNyZWF0ZUxpbmtTeW5jOk59PWIoNDE0Nyks'@;
put 'e2NyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1saW5rU3luYzpGfT1iKDM2MzUpO2NlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6RCxjcmVhdGVGaWxlU3luYzpfLGVuc3VyZUZpbGU6RCxlbnN1cmVGaWxlU3luYzpfLGNyZWF0ZUxpbms6cCxjcmVhdGVMaW5rU3luYzpOLGVuc3VyZUxpbms6cCxlbnN1'@;
put 'cmVMaW5rU3luYzpOLGNyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1saW5rU3luYzpGLGVuc3VyZVN5bWxpbms6dyxlbnN1cmVTeW1saW5rU3luYzpGfX0sNDE0NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoODk4MSkuZnJvbVByb21pc2UsXz1iKDI1MjApLHA9Yig3NzQ5KSxO'@;
put 'PWIoMTM4MSkse3BhdGhFeGlzdHM6d309Yig5MjU3KSx7YXJlSWRlbnRpY2FsOkZ9PWIoMjczMyk7ZnVuY3Rpb24gUigpe3JldHVybihSPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEwpe2xldCBZLEI7dHJ5e1k9eWllbGQgcC5sc3RhdChMKX1jYXRjaHt9dHJ5e0I9eWllbGQgcC5s'@;
put 'c3RhdChQKX1jYXRjaChYKXt0aHJvdyBYLm1lc3NhZ2U9WC5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFh9aWYoWSYmRihCLFkpKXJldHVybjtjb25zdCBXPV8uZGlybmFtZShMKTsoeWllbGQgdyhXKSl8fCh5aWVsZCBOLm1rZGlycyhXKSkseWllbGQgcC5saW5rKFAs'@;
put 'TCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9e2NyZWF0ZUxpbms6RChmdW5jdGlvbiBIKFAsTCl7cmV0dXJuIFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rpb24gaihQLEwpe2xldCBZO3RyeXtZPXAubHN0YXRTeW5jKEwpfWNhdGNo'@;
put 'e310cnl7Y29uc3QgWj1wLmxzdGF0U3luYyhQKTtpZihZJiZGKFosWSkpcmV0dXJufWNhdGNoKFope3Rocm93IFoubWVzc2FnZT1aLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksWn1jb25zdCBCPV8uZGlybmFtZShMKTtyZXR1cm4gcC5leGlzdHNTeW5jKEIpfHxOLm1r'@;
put 'ZGlyc1N5bmMoQikscC5saW5rU3luYyhQLEwpfX19LDYwNzI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDI1MjApLF89Yig3NzQ5KSx7cGF0aEV4aXN0czpwfT1iKDkyNTcpLE49Yig4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5l'@;
put 'cmF0b3IoZnVuY3Rpb24qKFIsail7aWYoRC5pc0Fic29sdXRlKFIpKXt0cnl7eWllbGQgXy5sc3RhdChSKX1jYXRjaChCKXt0aHJvdyBCLm1lc3NhZ2U9Qi5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLEJ9cmV0dXJue3RvQ3dkOlIsdG9Ec3Q6Un19Y29uc3QgUD1E'@;
put 'LmRpcm5hbWUoaiksTD1ELmpvaW4oUCxSKTtpZih5aWVsZCBwKEwpKXJldHVybnt0b0N3ZDpMLHRvRHN0OlJ9O3RyeXt5aWVsZCBfLmxzdGF0KFIpfWNhdGNoKEIpe3Rocm93IEIubWVzc2FnZT1CLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksQn1yZXR1cm57dG9D'@;
put 'd2Q6Uix0b0RzdDpELnJlbGF0aXZlKFAsUil9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPXtzeW1saW5rUGF0aHM6TihmdW5jdGlvbiB3KFIsail7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksc3ltbGlua1BhdGhzU3luYzpmdW5jdGlvbiBIKFIsail7aWYo'@;
put 'RC5pc0Fic29sdXRlKFIpKXtpZighXy5leGlzdHNTeW5jKFIpKXRocm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpSLHRvRHN0OlJ9fWNvbnN0IFA9RC5kaXJuYW1lKGopLEw9RC5qb2luKFAsUik7aWYoXy5leGlzdHNTeW5jKEwp'@;
put 'KXJldHVybnt0b0N3ZDpMLHRvRHN0OlJ9O2lmKCFfLmV4aXN0c1N5bmMoUikpdGhyb3cgbmV3IEVycm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOlIsdG9Ec3Q6RC5yZWxhdGl2ZShQLFIpfX19fSw5MjU5OihjZSxKLGIpPT57InVzZSBzdHJpY3Qi'@;
put 'O2NvbnN0IEQ9Yig3NzQ5KSxfPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gTigpe3JldHVybihOPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihGLEgpe2lmKEgpcmV0dXJuIEg7bGV0IFI7dHJ5e1I9eWllbGQgRC5sc3RhdChGKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIFIm'@;
put 'JlIuaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9e3N5bWxpbmtUeXBlOl8oZnVuY3Rpb24gcChGLEgpe3JldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtUeXBlU3luYzpmdW5jdGlvbiB3KEYsSCl7aWYo'@;
put 'SClyZXR1cm4gSDtsZXQgUjt0cnl7Uj1ELmxzdGF0U3luYyhGKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIFImJlIuaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0sMzYzNTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoODk4MSkuZnJvbVByb21pc2UsXz1iKDI1MjAp'@;
put 'LHA9Yig3NzQ5KSx7bWtkaXJzOk4sbWtkaXJzU3luYzp3fT1iKDEzODEpLHtzeW1saW5rUGF0aHM6RixzeW1saW5rUGF0aHNTeW5jOkh9PWIoNjA3Mikse3N5bWxpbmtUeXBlOlIsc3ltbGlua1R5cGVTeW5jOmp9PWIoOTI1OSkse3BhdGhFeGlzdHM6UH09Yig5MjU3KSx7YXJlSWRlbnRpY2Fs'@;
put 'Okx9PWIoMjczMyk7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihaLFgsUSl7bGV0IHE7dHJ5e3E9eWllbGQgcC5sc3RhdChYKX1jYXRjaHt9aWYocSYmcS5pc1N5bWJvbGljTGluaygpKXtjb25zdFtnZSxfZV09eWllbGQgUHJvbWlzZS5hbGwoW3Au'@;
put 'c3RhdChaKSxwLnN0YXQoWCldKTtpZihMKGdlLF9lKSlyZXR1cm59Y29uc3QgdGU9eWllbGQgRihaLFgpO1o9dGUudG9Ec3Q7Y29uc3QgaWU9eWllbGQgUih0ZS50b0N3ZCxRKSxzZT1fLmRpcm5hbWUoWCk7cmV0dXJuKHlpZWxkIFAoc2UpKXx8KHlpZWxkIE4oc2UpKSxwLnN5bWxpbmsoWixY'@;
put 'LGllKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17Y3JlYXRlU3ltbGluazpEKGZ1bmN0aW9uIFkoWixYLFEpe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZVN5bWxpbmtTeW5jOmZ1bmN0aW9uIFcoWixYLFEpe2xldCBxO3RyeXtxPXAubHN0YXRT'@;
put 'eW5jKFgpfWNhdGNoe31pZihxJiZxLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0IGdlPXAuc3RhdFN5bmMoWiksX2U9cC5zdGF0U3luYyhYKTtpZihMKGdlLF9lKSlyZXR1cm59Y29uc3QgdGU9SChaLFgpO1o9dGUudG9Ec3QsUT1qKHRlLnRvQ3dkLFEpO2NvbnN0IGllPV8uZGlybmFtZShYKTty'@;
put 'ZXR1cm4gcC5leGlzdHNTeW5jKGllKXx8dyhpZSkscC5zeW1saW5rU3luYyhaLFgsUSl9fX0sNzc0OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO2NvbnN0IF89Yig4OTgxKS5mcm9tQ2FsbGJhY2sscD1iKDc3KSxOPVsiYWNjZXNzIiwiYXBwZW5kRmlsZSIsImNobW9k'@;
put 'IiwiY2hvd24iLCJjbG9zZSIsImNvcHlGaWxlIiwiY3AiLCJmY2htb2QiLCJmY2hvd24iLCJmZGF0YXN5bmMiLCJmc3RhdCIsImZzeW5jIiwiZnRydW5jYXRlIiwiZnV0aW1lcyIsImdsb2IiLCJsY2htb2QiLCJsY2hvd24iLCJsdXRpbWVzIiwibGluayIsImxzdGF0IiwibWtkaXIiLCJta2R0'@;
put 'ZW1wIiwib3BlbiIsIm9wZW5kaXIiLCJyZWFkZGlyIiwicmVhZEZpbGUiLCJyZWFkbGluayIsInJlYWxwYXRoIiwicmVuYW1lIiwicm0iLCJybWRpciIsInN0YXQiLCJzdGF0ZnMiLCJzeW1saW5rIiwidHJ1bmNhdGUiLCJ1bmxpbmsiLCJ1dGltZXMiLCJ3cml0ZUZpbGUiXS5maWx0ZXIodz0+'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIHBbd10pO09iamVjdC5hc3NpZ24oSixwKSxOLmZvckVhY2godz0+e0pbd109XyhwW3ddKX0pLEouZXhpc3RzPWZ1bmN0aW9uKHcsRil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEY/cC5leGlzdHModyxGKTpuZXcgUHJvbWlzZShIPT5wLmV4aXN0cyh3LEgp'@;
put 'KX0sSi5yZWFkPWZ1bmN0aW9uKHcsRixILFIsaixQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUD9wLnJlYWQodyxGLEgsUixqLFApOm5ldyBQcm9taXNlKChMLFkpPT57cC5yZWFkKHcsRixILFIsaiwoQixXLFopPT57aWYoQilyZXR1cm4gWShCKTtMKHtieXRlc1JlYWQ6VyxidWZmZXI6'@;
put 'Wn0pfSl9KX0sSi53cml0ZT1mdW5jdGlvbih3LEYsLi4uSCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEhbSC5sZW5ndGgtMV0/cC53cml0ZSh3LEYsLi4uSCk6bmV3IFByb21pc2UoKFIsaik9PntwLndyaXRlKHcsRiwuLi5ILChQLEwsWSk9PntpZihQKXJldHVybiBqKFApO1Ioe2J5dGVz'@;
put 'V3JpdHRlbjpMLGJ1ZmZlcjpZfSl9KX0pfSxKLnJlYWR2PWZ1bmN0aW9uKHcsRiwuLi5IKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSFtILmxlbmd0aC0xXT9wLnJlYWR2KHcsRiwuLi5IKTpuZXcgUHJvbWlzZSgoUixqKT0+e3AucmVhZHYodyxGLC4uLkgsKFAsTCxZKT0+e2lmKFApcmV0'@;
put 'dXJuIGooUCk7Uih7Ynl0ZXNSZWFkOkwsYnVmZmVyczpZfSl9KX0pfSxKLndyaXRldj1mdW5jdGlvbih3LEYsLi4uSCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEhbSC5sZW5ndGgtMV0/cC53cml0ZXYodyxGLC4uLkgpOm5ldyBQcm9taXNlKChSLGopPT57cC53cml0ZXYodyxGLC4uLkgs'@;
put 'KFAsTCxZKT0+e2lmKFApcmV0dXJuIGooUCk7Uih7Ynl0ZXNXcml0dGVuOkwsYnVmZmVyczpZfSl9KX0pfSwiZnVuY3Rpb24iPT10eXBlb2YgcC5yZWFscGF0aC5uYXRpdmU/Si5yZWFscGF0aC5uYXRpdmU9XyhwLnJlYWxwYXRoLm5hdGl2ZSk6RC5lbWl0V2FybmluZygiZnMucmVhbHBhdGgu'@;
put 'bmF0aXZlIGlzIG5vdCBhIGZ1bmN0aW9uLiBJcyBmcyBiZWluZyBtb25rZXktcGF0Y2hlZD8iLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDMiKX0sNTY3NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXsuLi5iKDc3NDkpLC4uLmIoNjQ2NCksLi4uYig1NTkwKSwuLi5i'@;
put 'KDE3MjApLC4uLmIoNjU3MyksLi4uYigxMzgxKSwuLi5iKDUzMCksLi4uYig0NjcwKSwuLi5iKDkyNTcpLC4uLmIoNDU0Mil9fSw2NTczOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoNzE4Myk7Xy5vdXRwdXRKc29uPUQoYigzNTA4KSks'@;
put 'Xy5vdXRwdXRKc29uU3luYz1iKDk1NzgpLF8ub3V0cHV0SlNPTj1fLm91dHB1dEpzb24sXy5vdXRwdXRKU09OU3luYz1fLm91dHB1dEpzb25TeW5jLF8ud3JpdGVKU09OPV8ud3JpdGVKc29uLF8ud3JpdGVKU09OU3luYz1fLndyaXRlSnNvblN5bmMsXy5yZWFkSlNPTj1fLnJlYWRKc29uLF8u'@;
put 'cmVhZEpTT05TeW5jPV8ucmVhZEpzb25TeW5jLGNlLmV4cG9ydHM9X30sNzE4MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoNjgxMyk7Y2UuZXhwb3J0cz17cmVhZEpzb246RC5yZWFkRmlsZSxyZWFkSnNvblN5bmM6RC5yZWFkRmlsZVN5bmMsd3JpdGVKc29uOkQud3JpdGVG'@;
put 'aWxlLHdyaXRlSnNvblN5bmM6RC53cml0ZUZpbGVTeW5jfX0sOTU3ODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtzdHJpbmdpZnk6RH09Yig2NzgwKSx7b3V0cHV0RmlsZVN5bmM6X309Yig0NjcwKTtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoTix3LEYpe2NvbnN0IEg9RCh3LEYpO18o'@;
put 'TixILEYpfX0sMzUwODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtzdHJpbmdpZnk6RH09Yig2NzgwKSx7b3V0cHV0RmlsZTpffT1iKDQ2NzApO2Z1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioodyxGLEg9e30pe2NvbnN0IFI9RChGLEgpO3lp'@;
put 'ZWxkIF8odyxSLEgpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPWZ1bmN0aW9uIHAodyxGKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSwxMzgxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig4OTgxKS5mcm9tUHJvbWlzZSx7bWFrZURpcjpf'@;
put 'LG1ha2VEaXJTeW5jOnB9PWIoODIzMyksTj1EKF8pO2NlLmV4cG9ydHM9e21rZGlyczpOLG1rZGlyc1N5bmM6cCxta2RpcnA6Tixta2RpcnBTeW5jOnAsZW5zdXJlRGlyOk4sZW5zdXJlRGlyU3luYzpwfX0sODIzMzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoNzc0OSkse2No'@;
put 'ZWNrUGF0aDpffT1iKDM0NjgpLHA9Tj0+Im51bWJlciI9PXR5cGVvZiBOP046e21vZGU6NTExLC4uLk59Lm1vZGU7Y2UuZXhwb3J0cy5tYWtlRGlyPWZ1bmN0aW9uKCl7dmFyIE49X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHcsRil7cmV0dXJuIF8odyksRC5ta2Rpcih3LHttb2RlOnAo'@;
put 'RikscmVjdXJzaXZlOiEwfSl9KTtyZXR1cm4gZnVuY3Rpb24odyxGKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGNlLmV4cG9ydHMubWFrZURpclN5bmM9KE4sdyk9PihfKE4pLEQubWtkaXJTeW5jKE4se21vZGU6cCh3KSxyZWN1cnNpdmU6ITB9KSl9LDM0Njg6KGNlLEos'@;
put 'Yik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KTtjb25zdCBfPWIoMjUyMCk7Y2UuZXhwb3J0cy5jaGVja1BhdGg9ZnVuY3Rpb24oTil7aWYoIndpbjMyIj09PUQucGxhdGZvcm0mJi9bPD46Inw/Kl0vLnRlc3QoTi5yZXBsYWNlKF8ucGFyc2UoTikucm9vdCwiIikpKXtjb25zdCBGPW5l'@;
put 'dyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7Tn1gKTt0aHJvdyBGLmNvZGU9IkVJTlZBTCIsRn19fSw1MzA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDg5ODEpLmZyb21Qcm9taXNlO2NlLmV4cG9ydHM9e21vdmU6RChiKDQzNikpLG1vdmVT'@;
put 'eW5jOmIoMzczNil9fSwzNzM2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig3NyksXz1iKDI1MjApLHA9Yig2NDY0KS5jb3B5U3luYyxOPWIoNDU0MikucmVtb3ZlU3luYyx3PWIoMTM4MSkubWtkaXJwU3luYyxGPWIoMjczMyk7ZnVuY3Rpb24gUChZLEIsVyl7dHJ5e0QucmVu'@;
put 'YW1lU3luYyhZLEIpfWNhdGNoKFope2lmKCJFWERFViIhPT1aLmNvZGUpdGhyb3cgWjtyZXR1cm4gZnVuY3Rpb24gTChZLEIsVyl7cmV0dXJuIHAoWSxCLHtvdmVyd3JpdGU6VyxlcnJvck9uRXhpc3Q6ITAscHJlc2VydmVUaW1lc3RhbXBzOiEwfSksTihZKX0oWSxCLFcpfX1jZS5leHBvcnRz'@;
put 'PWZ1bmN0aW9uIEgoWSxCLFcpe2NvbnN0IFo9KFc9V3x8e30pLm92ZXJ3cml0ZXx8Vy5jbG9iYmVyfHwhMSx7c3JjU3RhdDpYLGlzQ2hhbmdpbmdDYXNlOlE9ITF9PUYuY2hlY2tQYXRoc1N5bmMoWSxCLCJtb3ZlIixXKTtyZXR1cm4gRi5jaGVja1BhcmVudFBhdGhzU3luYyhZLFgsQiwibW92'@;
put 'ZSIpLGZ1bmN0aW9uIFIoWSl7Y29uc3QgQj1fLmRpcm5hbWUoWSk7cmV0dXJuIF8ucGFyc2UoQikucm9vdD09PUJ9KEIpfHx3KF8uZGlybmFtZShCKSksZnVuY3Rpb24gaihZLEIsVyxaKXtpZihaKXJldHVybiBQKFksQixXKTtpZihXKXJldHVybiBOKEIpLFAoWSxCLFcpO2lmKEQuZXhpc3Rz'@;
put 'U3luYyhCKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0dXJuIFAoWSxCLFcpfShZLEIsWixRKX19LDQzNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoNzc0OSksXz1iKDI1MjApLHtjb3B5OnB9PWIoNjQ2NCkse3JlbW92ZTpOfT1iKDQ1NDIp'@;
put 'LHtta2RpcnA6d309YigxMzgxKSx7cGF0aEV4aXN0czpGfT1iKDkyNTcpLEg9YigyNzMzKTtmdW5jdGlvbiBqKCl7cmV0dXJuIGo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWixYPXt9KXtjb25zdCBRPVgub3ZlcndyaXRlfHxYLmNsb2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFu'@;
put 'Z2luZ0Nhc2U6dGU9ITF9PXlpZWxkIEguY2hlY2tQYXRocyhXLFosIm1vdmUiLFgpO3lpZWxkIEguY2hlY2tQYXJlbnRQYXRocyhXLHEsWiwibW92ZSIpO2NvbnN0IGllPV8uZGlybmFtZShaKTtyZXR1cm4gXy5wYXJzZShpZSkucm9vdCE9PWllJiYoeWllbGQgdyhpZSkpLGZ1bmN0aW9uIFAo'@;
put 'VyxaLFgsUSl7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfShXLFosUSx0ZSl9KSxqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMKCl7cmV0dXJuIEw9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWixYLFEpe2lmKCFRKWlmKFgpeWllbGQgTihaKTtlbHNlIGlm'@;
put 'KHlpZWxkIEYoWikpdGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpO3RyeXt5aWVsZCBELnJlbmFtZShXLFopfWNhdGNoKHEpe2lmKCJFWERFViIhPT1xLmNvZGUpdGhyb3cgcTt5aWVsZCBmdW5jdGlvbiBZKFcsWixYKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyl9KFcsWixYKX19KSxMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWixYKXtyZXR1cm4geWllbGQgcChXLFose292ZXJ3cml0ZTpYLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9'@;
put 'KSxOKFcpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPWZ1bmN0aW9uIFIoVyxaKXtyZXR1cm4gai5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw0NjcwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoNzc0OSkscD1iKDI1'@;
put 'MjApLE49YigxMzgxKSx3PWIoOTI1NykucGF0aEV4aXN0cztmdW5jdGlvbiBIKCl7cmV0dXJuKEg9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKGosUCxMPSJ1dGYtOCIpe2NvbnN0IFk9cC5kaXJuYW1lKGopO3JldHVybih5aWVsZCB3KFkpKXx8KHlpZWxkIE4ubWtkaXJzKFkpKSxfLndy'@;
put 'aXRlRmlsZShqLFAsTCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9e291dHB1dEZpbGU6RChmdW5jdGlvbiBGKGosUCl7cmV0dXJuIEguYXBwbHkodGhpcyxhcmd1bWVudHMpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24gUihqLC4uLlApe2NvbnN0IEw9cC5kaXJuYW1l'@;
put 'KGopO18uZXhpc3RzU3luYyhMKXx8Ti5ta2RpcnNTeW5jKEwpLF8ud3JpdGVGaWxlU3luYyhqLC4uLlApfX19LDkyNTc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3NzQ5KTtjZS5leHBvcnRzPXtwYXRoRXhpc3RzOkQoZnVuY3Rpb24g'@;
put 'cChOKXtyZXR1cm4gXy5hY2Nlc3MoTikudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KSxwYXRoRXhpc3RzU3luYzpfLmV4aXN0c1N5bmN9fSw0NTQyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig3NyksXz1iKDg5ODEpLmZyb21DYWxsYmFjaztjZS5leHBvcnRzPXtyZW1v'@;
put 'dmU6XyhmdW5jdGlvbiBwKHcsRil7RC5ybSh3LHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9LEYpfSkscmVtb3ZlU3luYzpmdW5jdGlvbiBOKHcpe0Qucm1TeW5jKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfX19LDI3MzM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDc3NDkp'@;
put 'LF89YigyNTIwKSxwPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gSCgpe3JldHVybihIPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihaLFgsUSxxKXtjb25zdHtzcmNTdGF0OnRlLGRlc3RTdGF0OmllfT15aWVsZCBmdW5jdGlvbiBOKFosWCxRKXtjb25zdCBxPVEuZGVyZWZlcmVu'@;
put 'Y2U/dGU9PkQuc3RhdCh0ZSx7YmlnaW50OiEwfSk6dGU9PkQubHN0YXQodGUse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbcShaKSxxKFgpLmNhdGNoKHRlPT57aWYoIkVOT0VOVCI9PT10ZS5jb2RlKXJldHVybiBudWxsO3Rocm93IHRlfSldKS50aGVuKChbdGUsaWVdKT0+KHtz'@;
put 'cmNTdGF0OnRlLGRlc3RTdGF0OmllfSkpfShaLFgscSk7aWYoaWUpe2lmKFkodGUsaWUpKXtjb25zdCBzZT1fLmJhc2VuYW1lKFopLGdlPV8uYmFzZW5hbWUoWCk7aWYoIm1vdmUiPT09USYmc2UhPT1nZSYmc2UudG9Mb3dlckNhc2UoKT09PWdlLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0'@;
put 'YXQ6dGUsZGVzdFN0YXQ6aWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZih0ZS5pc0RpcmVjdG9yeSgpJiYhaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBv'@;
put 'dmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtYfScgd2l0aCBkaXJlY3RvcnkgJyR7Wn0nLmApO2lmKCF0ZS5pc0RpcmVjdG9yeSgpJiZpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WH0nIHdpdGggbm9uLWRpcmVjdG9yeSAn'@;
put 'JHtafScuYCl9aWYodGUuaXNEaXJlY3RvcnkoKSYmQihaLFgpKXRocm93IG5ldyBFcnJvcihXKFosWCxRKSk7cmV0dXJue3NyY1N0YXQ6dGUsZGVzdFN0YXQ6aWV9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqKFosWCxRLHEpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX1mdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFosWCxRLHEpe2NvbnN0IHRlPV8ucmVzb2x2ZShfLmRpcm5hbWUoWikpLGllPV8ucmVzb2x2ZShfLmRpcm5hbWUoUSkpO2lmKGllPT09dGV8fGllPT09Xy5wYXJzZShpZSkucm9vdClyZXR1cm47'@;
put 'bGV0IHNlO3RyeXtzZT15aWVsZCBELnN0YXQoaWUse2JpZ2ludDohMH0pfWNhdGNoKGdlKXtpZigiRU5PRU5UIj09PWdlLmNvZGUpcmV0dXJuO3Rocm93IGdlfWlmKFkoWCxzZSkpdGhyb3cgbmV3IEVycm9yKFcoWixRLHEpKTtyZXR1cm4gaihaLFgsaWUscSl9KSkuYXBwbHkodGhpcyxhcmd1'@;
put 'bWVudHMpfWZ1bmN0aW9uIFkoWixYKXtyZXR1cm4gWC5pbm8mJlguZGV2JiZYLmlubz09PVouaW5vJiZYLmRldj09PVouZGV2fWZ1bmN0aW9uIEIoWixYKXtjb25zdCBRPV8ucmVzb2x2ZShaKS5zcGxpdChfLnNlcCkuZmlsdGVyKHRlPT50ZSkscT1fLnJlc29sdmUoWCkuc3BsaXQoXy5zZXAp'@;
put 'LmZpbHRlcih0ZT0+dGUpO3JldHVybiBRLmV2ZXJ5KCh0ZSxpZSk9PnFbaWVdPT09dGUpfWZ1bmN0aW9uIFcoWixYLFEpe3JldHVybmBDYW5ub3QgJHtRfSAnJHtafScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtYfScuYH1jZS5leHBvcnRzPXtjaGVja1BhdGhzOnAoZnVuY3Rp'@;
put 'b24gRihaLFgsUSxxKXtyZXR1cm4gSC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjaGVja1BhdGhzU3luYzpmdW5jdGlvbiBSKFosWCxRLHEpe2NvbnN0e3NyY1N0YXQ6dGUsZGVzdFN0YXQ6aWV9PWZ1bmN0aW9uIHcoWixYLFEpe2xldCBxO2NvbnN0IHRlPVEuZGVyZWZlcmVuY2U/c2U9PkQu'@;
put 'c3RhdFN5bmMoc2Use2JpZ2ludDohMH0pOnNlPT5ELmxzdGF0U3luYyhzZSx7YmlnaW50OiEwfSksaWU9dGUoWik7dHJ5e3E9dGUoWCl9Y2F0Y2goc2Upe2lmKCJFTk9FTlQiPT09c2UuY29kZSlyZXR1cm57c3JjU3RhdDppZSxkZXN0U3RhdDpudWxsfTt0aHJvdyBzZX1yZXR1cm57c3JjU3Rh'@;
put 'dDppZSxkZXN0U3RhdDpxfX0oWixYLHEpO2lmKGllKXtpZihZKHRlLGllKSl7Y29uc3Qgc2U9Xy5iYXNlbmFtZShaKSxnZT1fLmJhc2VuYW1lKFgpO2lmKCJtb3ZlIj09PVEmJnNlIT09Z2UmJnNlLnRvTG93ZXJDYXNlKCk9PT1nZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnRlLGRl'@;
put 'c3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYodGUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRl'@;
put 'IG5vbi1kaXJlY3RvcnkgJyR7WH0nIHdpdGggZGlyZWN0b3J5ICcke1p9Jy5gKTtpZighdGUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke1h9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7Wn0nLmAp'@;
put 'fWlmKHRlLmlzRGlyZWN0b3J5KCkmJkIoWixYKSl0aHJvdyBuZXcgRXJyb3IoVyhaLFgsUSkpO3JldHVybntzcmNTdGF0OnRlLGRlc3RTdGF0OmllfX0sY2hlY2tQYXJlbnRQYXRoczpwKGopLGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIEwoWixYLFEscSl7Y29uc3QgdGU9Xy5yZXNv'@;
put 'bHZlKF8uZGlybmFtZShaKSksaWU9Xy5yZXNvbHZlKF8uZGlybmFtZShRKSk7aWYoaWU9PT10ZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgc2U7dHJ5e3NlPUQuc3RhdFN5bmMoaWUse2JpZ2ludDohMH0pfWNhdGNoKGdlKXtpZigiRU5PRU5UIj09PWdlLmNvZGUpcmV0dXJu'@;
put 'O3Rocm93IGdlfWlmKFkoWCxzZSkpdGhyb3cgbmV3IEVycm9yKFcoWixRLHEpKTtyZXR1cm4gTChaLFgsaWUscSl9LGlzU3JjU3ViZGlyOkIsYXJlSWRlbnRpY2FsOll9fSwzMTg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDc3NDkpLF89Yig4OTgxKS5mcm9tUHJvbWlzZTtm'@;
put 'dW5jdGlvbiBOKCl7cmV0dXJuKE49X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEYsSCxSKXtjb25zdCBqPXlpZWxkIEQub3BlbihGLCJyKyIpO2xldCBQPW51bGw7dHJ5e3lpZWxkIEQuZnV0aW1lcyhqLEgsUil9ZmluYWxseXt0cnl7eWllbGQgRC5jbG9zZShqKX1jYXRjaChMKXtQPUx9'@;
put 'fWlmKFApdGhyb3cgUH0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17dXRpbWVzTWlsbGlzOl8oZnVuY3Rpb24gcChGLEgsUil7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksdXRpbWVzTWlsbGlzU3luYzpmdW5jdGlvbiB3KEYsSCxSKXtjb25zdCBqPUQub3Bl'@;
put 'blN5bmMoRiwicisiKTtyZXR1cm4gRC5mdXRpbWVzU3luYyhqLEgsUiksRC5jbG9zZVN5bmMoail9fX0sNzY0ODpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEQ9TWF0aC5tYXgscD1mdW5jdGlvbihILFIpe2Zvcih2YXIgaj1bXSxQPTA7UDxILmxl'@;
put 'bmd0aDtQKz0xKWpbUF09SFtQXTtmb3IodmFyIEw9MDtMPFIubGVuZ3RoO0wrPTEpaltMK0gubGVuZ3RoXT1SW0xdO3JldHVybiBqfTtjZS5leHBvcnRzPWZ1bmN0aW9uKEgpe3ZhciBSPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFJ8fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1iLmFwcGx5'@;
put 'KFIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitSKTtmb3IodmFyIFAsaj1mdW5jdGlvbihILFIpe2Zvcih2YXIgaj1bXSxQPTEsTD0wO1A8SC5sZW5ndGg7UCs9MSxMKz0xKWpbTF09SFtQXTtyZXR1cm4gan0o'@;
put 'YXJndW1lbnRzKSxZPUQoMCxSLmxlbmd0aC1qLmxlbmd0aCksQj1bXSxXPTA7VzxZO1crKylCW1ddPSIkIitXO2lmKFA9RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitmdW5jdGlvbihGLEgpe2Zvcih2YXIgUj0iIixqPTA7ajxGLmxlbmd0aDtqKz0xKVIrPUZbal0saisx'@;
put 'PEYubGVuZ3RoJiYoUis9IiwiKTtyZXR1cm4gUn0oQikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgUCl7dmFyIFg9Ui5hcHBseSh0aGlzLHAoaixhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KFgpPT09'@;
put 'WD9YOnRoaXN9cmV0dXJuIFIuYXBwbHkoSCxwKGosYXJndW1lbnRzKSl9KSxSLnByb3RvdHlwZSl7dmFyIFo9ZnVuY3Rpb24oKXt9O1oucHJvdG90eXBlPVIucHJvdG90eXBlLFAucHJvdG90eXBlPW5ldyBaLFoucHJvdG90eXBlPW51bGx9cmV0dXJuIFB9fSw4NjEyOihjZSxKLGIpPT57InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBEPWIoNzY0OCk7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8RH0sMjEwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBELF89Yig4ODkyKSxwPWIoMTY0OCksTj1iKDM5ODEpLHc9Yig0NzI2KSxGPWIoNjcxMiksSD1iKDM0NjQpLFI9Yig0NDUz'@;
put 'KSxqPWIoMzkxNSksUD1iKDk3MzgpLEw9Yig2MzI5KSxZPWIoMjI2NCksQj1iKDU3MzApLFc9Yig3MDcpLFo9YigzODYyKSxYPWIoOTU1MCksUT1GdW5jdGlvbixxPWZ1bmN0aW9uKHZlKXt0cnl7cmV0dXJuIFEoJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgnK3ZlKyIpLmNvbnN0cnVjdG9yOyIp'@;
put 'KCl9Y2F0Y2h7fX0sdGU9Yig3Mjk2KSxpZT1iKDQ0MjkpLHNlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFJ9LGdlPXRlP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBzZX1jYXRjaHt0cnl7cmV0dXJuIHRlKGFyZ3VtZW50cywiY2FsbGVlIikuZ2V0fWNhdGNoe3JldHVybiBzZX19fSgpOnNlLF9lPWIo'@;
put 'MTQwNSkoKSxUZT1iKDE2MTgpLFNlPWIoODg5OSksemU9Yig0NDMpLHo9YigxNzY4KSxnPWIoODkyOCkseT17fSx4PXR5cGVvZiBVaW50OEFycmF5PiJ1Inx8IVRlP0Q6VGUoVWludDhBcnJheSksQz17X19wcm90b19fOm51bGwsIiVBZ2dyZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dyZWdhdGVF'@;
put 'cnJvcj4idSI/RDpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/RDpBcnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTpELCIlQXN5bmNG'@;
put 'cm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6RCwiJUFzeW5jRnVuY3Rpb24lIjp5LCIlQXN5bmNHZW5lcmF0b3IlIjp5LCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiOnksIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6eSwiJUF0b21pY3MlIjp0eXBlb2YgQXRvbWljcz4idSI/RDpBdG9t'@;
put 'aWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/RDpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUiP0Q6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ1VpbnQ2NEFycmF5PiJ1Ij9EOkJpZ1VpbnQ2NEFycmF5LCIl'@;
put 'Qm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/RDpEYXRhVmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2RlVVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6ZGVjb2RlVVJJQ29tcG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJ'@;
put 'LCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpwLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpOLCIlRmxvYXQxNkFycmF5JSI6dHlwZW9mIEZsb2F0MTZBcnJheT4idSI/RDpGbG9hdDE2QXJyYXksIiVGbG9hdDMyQXJyYXklIjp0eXBlb2Yg'@;
put 'RmxvYXQzMkFycmF5PiJ1Ij9EOkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP0Q6RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjp0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk+InUiP0Q6RmluYWxpemF0aW9uUmVnaXN0'@;
put 'cnksIiVGdW5jdGlvbiUiOlEsIiVHZW5lcmF0b3JGdW5jdGlvbiUiOnksIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij9EOkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/RDpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQz'@;
put 'MkFycmF5PiJ1Ij9EOkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkQsIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046RCwiJU1h'@;
put 'cCUiOnR5cGVvZiBNYXA+InUiP0Q6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IV9lfHwhVGU/RDpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6XywiJU9iamVjdC5n'@;
put 'ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIjp0ZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/RDpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP0Q6UHJveHksIiVSYW5nZUVycm9y'@;
put 'JSI6dywiJVJlZmVyZW5jZUVycm9yJSI6RiwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/RDpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/RDpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9E'@;
put 'OlRlKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0Q6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltT'@;
put 'eW1ib2wuaXRlcmF0b3JdKCkpOkQsIiVTeW1ib2wlIjpfZT9TeW1ib2w6RCwiJVN5bnRheEVycm9yJSI6SCwiJVRocm93VHlwZUVycm9yJSI6Z2UsIiVUeXBlZEFycmF5JSI6eCwiJVR5cGVFcnJvciUiOlIsIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0Q6VWludDhBcnJh'@;
put 'eSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9EOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP0Q6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/'@;
put 'RDpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6aiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/RDpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9EOldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUiP0Q6V2Vha1NldCwiJUZ1bmN0aW9uLnBy'@;
put 'b3RvdHlwZS5jYWxsJSI6ZywiJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUiOnosIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjppZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOlNlLCIlTWF0aC5hYnMlIjpQLCIlTWF0aC5mbG9vciUiOkwsIiVNYXRoLm1heCUiOlksIiVNYXRoLm1pbiUi'@;
put 'OkIsIiVNYXRoLnBvdyUiOlcsIiVNYXRoLnJvdW5kJSI6WiwiJU1hdGguc2lnbiUiOlgsIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6emV9O2lmKFRlKXRyeXtudWxsLmVycm9yfWNhdGNoKHZlKXt2YXIgVD1UZShUZSh2ZSkpO0NbIiVFcnJvci5wcm90b3R5cGUlIl09VH12YXIgVj1mdW5j'@;
put 'dGlvbiB2ZShxZSl7dmFyIGplO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09cWUpamU9cSgiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PXFlKWplPXEoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9u'@;
put 'JSI9PT1xZSlqZT1xKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PXFlKXt2YXIgQWU9dmUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO0FlJiYoamU9QWUucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUi'@;
put 'PT09cWUpe3ZhciBGZT12ZSgiJUFzeW5jR2VuZXJhdG9yJSIpO0ZlJiZUZSYmKGplPVRlKEZlLnByb3RvdHlwZSkpfXJldHVybiBDW3FlXT1qZSxqZX0sVT17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5'@;
put 'UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpb'@;
put 'IkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNH'@;
put 'ZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3'@;
put 'UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJd'@;
put 'LCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVy'@;
put 'YXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQx'@;
put 'NkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJd'@;
put 'LCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlw'@;
put 'ZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4i'@;
put 'XSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlw'@;
put 'ZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJv'@;
put 'dG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJy'@;
put 'b3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBl'@;
put 'Il0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJv'@;
put 'dG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRT1iKDg2MTIpLG09Yig4ODI0'@;
put 'KSxBPUUuY2FsbChnLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLGFlPUUuY2FsbCh6LEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLG5lPUUuY2FsbChnLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksbGU9RS5jYWxsKGcsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksd2U9RS5jYWxsKGcsUmVnRXhw'@;
put 'LnByb3RvdHlwZS5leGVjKSxaZT0vW14lLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLFFlPS9cXChcXCk/L2cseGU9ZnVuY3Rpb24ocWUsamUpe3ZhciBGZSxBZT1x'@;
put 'ZTtpZihtKFUsQWUpJiYoQWU9IiUiKyhGZT1VW0FlXSlbMF0rIiUiKSxtKEMsQWUpKXt2YXIgUmU9Q1tBZV07aWYoUmU9PT15JiYoUmU9VihBZSkpLHR5cGVvZiBSZT4idSImJiFqZSl0aHJvdyBuZXcgUigiaW50cmluc2ljICIrcWUrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQ'@;
put 'bGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTtyZXR1cm57YWxpYXM6RmUsbmFtZTpBZSx2YWx1ZTpSZX19dGhyb3cgbmV3IEgoImludHJpbnNpYyAiK3FlKyIgZG9lcyBub3QgZXhpc3QhIil9O2NlLmV4cG9ydHM9ZnVuY3Rpb24ocWUsamUpe2lmKCJzdHJpbmciIT10eXBlb2YgcWV8fDA9PT1xZS5s'@;
put 'ZW5ndGgpdGhyb3cgbmV3IFIoImludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcgUignImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtp'@;
put 'ZihudWxsPT09d2UoL14lP1teJV0qJT8kLyxxZSkpdGhyb3cgbmV3IEgoImAlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIgQWU9ZnVuY3Rpb24ocWUpe3ZhciBqZT1sZShxZSwwLDEp'@;
put 'LEFlPWxlKHFlLC0xKTtpZigiJSI9PT1qZSYmIiUiIT09QWUpdGhyb3cgbmV3IEgoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigiJSI9PT1BZSYmIiUiIT09amUpdGhyb3cgbmV3IEgoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0'@;
put 'ZWQgb3BlbmluZyBgJWAiKTt2YXIgRmU9W107cmV0dXJuIG5lKHFlLFplLGZ1bmN0aW9uKFJlLEllLEhlLERlKXtGZVtGZS5sZW5ndGhdPUhlP25lKERlLFFlLCIkMSIpOkllfHxSZX0pLEZlfShxZSksRmU9QWUubGVuZ3RoPjA/QWVbMF06IiIsUmU9eGUoIiUiK0ZlKyIlIixqZSksSWU9UmUu'@;
put 'bmFtZSxIZT1SZS52YWx1ZSxEZT0hMSxrZT1SZS5hbGlhcztrZSYmKEZlPWtlWzBdLGFlKEFlLEEoWzAsMV0sa2UpKSk7Zm9yKHZhciBfdD0xLG50PSEwO190PEFlLmxlbmd0aDtfdCs9MSl7dmFyIEplPUFlW190XSxvbj1sZShKZSwwLDEpLHl0PWxlKEplLC0xKTtpZigoJyInPT09b258fCIn'@;
put 'Ij09PW9ufHwiYCI9PT1vbnx8JyInPT09eXR8fCInIj09PXl0fHwiYCI9PT15dCkmJm9uIT09eXQpdGhyb3cgbmV3IEgoInByb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigoImNvbnN0cnVjdG9yIj09PUplfHwhbnQpJiYoRGU9ITApLG0o'@;
put 'QyxJZT0iJSIrKEZlKz0iLiIrSmUpKyIlIikpSGU9Q1tJZV07ZWxzZSBpZihudWxsIT1IZSl7aWYoIShKZSBpbiBIZSkpe2lmKCFqZSl0aHJvdyBuZXcgUigiYmFzZSBpbnRyaW5zaWMgZm9yICIrcWUrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1'@;
put 'cm59aWYodGUmJl90KzE+PUFlLmxlbmd0aCl7dmFyIE10PXRlKEhlLEplKTtIZT0obnQ9ISFNdCkmJiJnZXQiaW4gTXQmJiEoIm9yaWdpbmFsVmFsdWUiaW4gTXQuZ2V0KT9NdC5nZXQ6SGVbSmVdfWVsc2UgbnQ9bShIZSxKZSksSGU9SGVbSmVdO250JiYhRGUmJihDW0llXT1IZSl9fXJldHVy'@;
put 'biBIZX19LDg4OTk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4ODkyKTtjZS5leHBvcnRzPUQuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDQ0MzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVs'@;
put 'bH0sMTYxODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ0MyksXz1iKDg4OTkpLHA9Yig2NTA0KTtjZS5leHBvcnRzPUQ/ZnVuY3Rpb24odyl7cmV0dXJuIEQodyl9Ol8/ZnVuY3Rpb24odyl7aWYoIXd8fCJvYmplY3QiIT10eXBlb2YgdyYmImZ1bmN0aW9uIiE9dHlwZW9mIHcp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0UHJvdG86IG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gXyh3KX06cD9mdW5jdGlvbih3KXtyZXR1cm4gcCh3KX06bnVsbH0sNjkwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sNzI5Njoo'@;
put 'Y2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY5MCk7aWYoRCl0cnl7RChbXSwibGVuZ3RoIil9Y2F0Y2h7RD1udWxsfWNlLmV4cG9ydHM9RH0sNjQ1ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uIGIoRCl7aWYobnVsbD09PUR8fCJvYmplY3QiIT10eXBlb2Yg'@;
put 'RClyZXR1cm4gRDtpZihEIGluc3RhbmNlb2YgT2JqZWN0KXZhciBfPXtfX3Byb3RvX186SihEKX07ZWxzZSBfPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEQpLmZvckVhY2goZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8s'@;
put 'cCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEQscCkpfSksX307dmFyIEo9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihEKXtyZXR1cm4gRC5fX3Byb3RvX199fSw3NzooY2UsSixiKT0+e3ZhciBSLGosRD1iKDQxNTUpLF89Yig1MTA4KSxwPWIoNTQ0MyksTj1iKDIx'@;
put 'NjEpLHc9Yig4NTIwKSxGPWIoNjQ1OCksSD1iKDk1MzkpO2Z1bmN0aW9uIEwodGUsaWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaWV9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/'@;
put 'KFI9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucXVldWUiKSxqPVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnByZXZpb3VzIikpOihSPSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsaj0iX19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgWCxZPWZ1bmN0aW9uIFAoKXt9O2Z1bmN0aW9uIFcodGUp'@;
put 'e04odGUpLHRlLmdyYWNlZnVsaWZ5PVcsdGUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbiBsZShhdCx4ZSl7cmV0dXJuIG5ldyB0ZS5SZWFkU3RyZWFtKGF0LHhlKX0sdGUuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gd2UoYXQseGUpe3JldHVybiBuZXcgdGUuV3JpdGVTdHJlYW0oYXQs'@;
put 'eGUpfTt2YXIgaWU9dGUucmVhZEZpbGU7dGUucmVhZEZpbGU9ZnVuY3Rpb24gc2UoYXQseGUsdmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKHZlPXhlLHhlPW51bGwpLGZ1bmN0aW9uIHFlKGplLEFlLEZlLFJlKXtyZXR1cm4gaWUoamUsQWUsZnVuY3Rpb24oSWUpeyFJZXx8IkVN'@;
put 'RklMRSIhPT1JZS5jb2RlJiYiRU5GSUxFIiE9PUllLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEZlJiZGZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WihbcWUsW2plLEFlLEZlXSxJZSxSZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oYXQseGUsdmUpfTt2YXIgZ2U9dGUud3JpdGVGaWxl'@;
put 'O3RlLndyaXRlRmlsZT1mdW5jdGlvbiBfZShhdCx4ZSx2ZSxxZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYocWU9dmUsdmU9bnVsbCksZnVuY3Rpb24gamUoQWUsRmUsUmUsSWUsSGUpe3JldHVybiBnZShBZSxGZSxSZSxmdW5jdGlvbihEZSl7IURlfHwiRU1GSUxFIiE9PURlLmNv'@;
put 'ZGUmJiJFTkZJTEUiIT09RGUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpaKFtqZSxbQWUsRmUsUmUsSWVdLERlLEhlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShhdCx4ZSx2ZSxxZSl9O3ZhciBUZT10ZS5hcHBlbmRGaWxlO1RlJiYo'@;
put 'dGUuYXBwZW5kRmlsZT1mdW5jdGlvbiBTZShhdCx4ZSx2ZSxxZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYocWU9dmUsdmU9bnVsbCksZnVuY3Rpb24gamUoQWUsRmUsUmUsSWUsSGUpe3JldHVybiBUZShBZSxGZSxSZSxmdW5jdGlvbihEZSl7IURlfHwiRU1GSUxFIiE9PURlLmNv'@;
put 'ZGUmJiJFTkZJTEUiIT09RGUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpaKFtqZSxbQWUsRmUsUmUsSWVdLERlLEhlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShhdCx4ZSx2ZSxxZSl9KTt2YXIgemU9dGUuY29weUZpbGU7emUmJih0'@;
put 'ZS5jb3B5RmlsZT1mdW5jdGlvbiB6KGF0LHhlLHZlLHFlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihxZT12ZSx2ZT0wKSxmdW5jdGlvbiBqZShBZSxGZSxSZSxJZSxIZSl7cmV0dXJuIHplKEFlLEZlLFJlLGZ1bmN0aW9uKERlKXshRGV8fCJFTUZJTEUiIT09RGUuY29kZSYmIkVO'@;
put 'RklMRSIhPT1EZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlooW2plLFtBZSxGZSxSZSxJZV0sRGUsSGV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGF0LHhlLHZlLHFlKX0pO3ZhciBnPXRlLnJlYWRkaXI7dGUucmVhZGRpcj1mdW5j'@;
put 'dGlvbiB4KGF0LHhlLHZlKXsiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKTt2YXIgcWU9eS50ZXN0KEQudmVyc2lvbik/ZnVuY3Rpb24oRmUsUmUsSWUsSGUpe3JldHVybiBnKEZlLGplKEZlLFJlLEllLEhlKSl9OmZ1bmN0aW9uKEZlLFJlLEllLEhlKXtyZXR1cm4gZyhG'@;
put 'ZSxSZSxqZShGZSxSZSxJZSxIZSkpfTtyZXR1cm4gcWUoYXQseGUsdmUpO2Z1bmN0aW9uIGplKEFlLEZlLFJlLEllKXtyZXR1cm4gZnVuY3Rpb24oSGUsRGUpeyFIZXx8IkVNRklMRSIhPT1IZS5jb2RlJiYiRU5GSUxFIiE9PUhlLmNvZGU/KERlJiZEZS5zb3J0JiZEZS5zb3J0KCksImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFJlJiZSZS5jYWxsKHRoaXMsSGUsRGUpKTpaKFtxZSxbQWUsRmUsUmVdLEhlLEllfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgeT0vXnZbMC01XVwuLztpZigidjAuOCI9PT1ELnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBDPXcodGUpO209Qy5SZWFkU3Ry'@;
put 'ZWFtLGFlPUMuV3JpdGVTdHJlYW19dmFyIFQ9dGUuUmVhZFN0cmVhbTtUJiYobS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSksbS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiBBKCl7dmFyIGF0PXRoaXM7UWUoYXQucGF0aCxhdC5mbGFncyxhdC5tb2RlLGZ1bmN0aW9uKHhl'@;
put 'LHZlKXt4ZT8oYXQuYXV0b0Nsb3NlJiZhdC5kZXN0cm95KCksYXQuZW1pdCgiZXJyb3IiLHhlKSk6KGF0LmZkPXZlLGF0LmVtaXQoIm9wZW4iLHZlKSxhdC5yZWFkKCkpfSl9KTt2YXIgVj10ZS5Xcml0ZVN0cmVhbTtWJiYoYWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVi5wcm90b3R5cGUp'@;
put 'LGFlLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uIG5lKCl7dmFyIGF0PXRoaXM7UWUoYXQucGF0aCxhdC5mbGFncyxhdC5tb2RlLGZ1bmN0aW9uKHhlLHZlKXt4ZT8oYXQuZGVzdHJveSgpLGF0LmVtaXQoImVycm9yIix4ZSkpOihhdC5mZD12ZSxhdC5lbWl0KCJvcGVuIix2ZSkpfSl9KSxPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkodGUsIlJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sc2V0OmZ1bmN0aW9uKGF0KXttPWF0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gYWV9LHNldDpmdW5jdGlvbihhdCl7YWU9YXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIFU9bTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFV9LHNldDpmdW5jdGlvbihhdCl7'@;
put 'VT1hdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgRT1hZTtmdW5jdGlvbiBtKGF0LHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/KFQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOm0uYXBwbHkoT2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksYXJndW1lbnRz'@;
put 'KX1mdW5jdGlvbiBhZShhdCx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhZT8oVi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6YWUuYXBwbHkoT2JqZWN0LmNyZWF0ZShhZS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHRlLCJGaWxlV3JpdGVTdHJl'@;
put 'YW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sc2V0OmZ1bmN0aW9uKGF0KXtFPWF0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBaZT10ZS5vcGVuO2Z1bmN0aW9uIFFlKGF0LHhlLHZlLHFlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihxZT12ZSx2ZT1u'@;
put 'dWxsKSxmdW5jdGlvbiBqZShBZSxGZSxSZSxJZSxIZSl7cmV0dXJuIFplKEFlLEZlLFJlLGZ1bmN0aW9uKERlLGtlKXshRGV8fCJFTUZJTEUiIT09RGUuY29kZSYmIkVORklMRSIhPT1EZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlooW2pl'@;
put 'LFtBZSxGZSxSZSxJZV0sRGUsSGV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGF0LHhlLHZlLHFlKX1yZXR1cm4gdGUub3Blbj1RZSx0ZX1mdW5jdGlvbiBaKHRlKXtZKCJFTlFVRVVFIix0ZVswXS5uYW1lLHRlWzFdKSxwW1JdLnB1c2godGUpLHEoKX1mdW5jdGlvbiBRKCl7Zm9yKHZh'@;
put 'ciB0ZT1EYXRlLm5vdygpLGllPTA7aWU8cFtSXS5sZW5ndGg7KytpZSlwW1JdW2llXS5sZW5ndGg+MiYmKHBbUl1baWVdWzNdPXRlLHBbUl1baWVdWzRdPXRlKTtxKCl9ZnVuY3Rpb24gcSgpe2lmKGNsZWFyVGltZW91dChYKSxYPXZvaWQgMCwwIT09cFtSXS5sZW5ndGgpe3ZhciB0ZT1wW1Jd'@;
put 'LnNoaWZ0KCksaWU9dGVbMF0sc2U9dGVbMV0sZ2U9dGVbMl0sX2U9dGVbM10sVGU9dGVbNF07aWYodm9pZCAwPT09X2UpWSgiUkVUUlkiLGllLm5hbWUsc2UpLGllLmFwcGx5KG51bGwsc2UpO2Vsc2UgaWYoRGF0ZS5ub3coKS1fZT49NmU0KXtZKCJUSU1FT1VUIixpZS5uYW1lLHNlKTt2YXIg'@;
put 'U2U9c2UucG9wKCk7ImZ1bmN0aW9uIj09dHlwZW9mIFNlJiZTZS5jYWxsKG51bGwsZ2UpfWVsc2V7dmFyIHplPURhdGUubm93KCktVGUsej1NYXRoLm1heChUZS1fZSwxKTt6ZT49TWF0aC5taW4oMS4yKnosMTAwKT8oWSgiUkVUUlkiLGllLm5hbWUsc2UpLGllLmFwcGx5KG51bGwsc2UuY29u'@;
put 'Y2F0KFtfZV0pKSk6cFtSXS5wdXNoKHRlKX12b2lkIDA9PT1YJiYoWD1zZXRUaW1lb3V0KHEsMCkpfX1ILmRlYnVnbG9nP1k9SC5kZWJ1Z2xvZygiZ2ZzNCIpOi9cYmdmczRcYi9pLnRlc3QoRC5lbnYuTk9ERV9ERUJVR3x8IiIpJiYoWT1mdW5jdGlvbigpe3ZhciB0ZT1ILmZvcm1hdC5hcHBs'@;
put 'eShILGFyZ3VtZW50cyk7dGU9IkdGUzQ6ICIrdGUuc3BsaXQoL1xuLykuam9pbigiXG5HRlM0OiAiKSxfLmVycm9yKHRlKX0pLHBbUl18fChMKHAsYi5nW1JdfHxbXSkscC5jbG9zZT1mdW5jdGlvbih0ZSl7ZnVuY3Rpb24gaWUoc2UsZ2Upe3JldHVybiB0ZS5jYWxsKHAsc2UsZnVuY3Rpb24o'@;
put 'X2Upe19lfHxRKCksImZ1bmN0aW9uIj09dHlwZW9mIGdlJiZnZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLGose3ZhbHVlOnRlfSksaWV9KHAuY2xvc2UpLHAuY2xvc2VTeW5jPWZ1bmN0aW9uKHRlKXtmdW5jdGlvbiBpZShzZSl7dGUu'@;
put 'YXBwbHkocCxhcmd1bWVudHMpLFEoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLGose3ZhbHVlOnRlfSksaWV9KHAuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEQuZW52Lk5PREVfREVCVUd8fCIiKSYmRC5vbigiZXhpdCIsZnVuY3Rpb24oKXtZKHBbUl0pLGIoOTI4Miku'@;
put 'ZXF1YWwocFtSXS5sZW5ndGgsMCl9KSksYi5nW1JdfHxMKGIuZyxwW1JdKSxjZS5leHBvcnRzPVcoRihwKSksRC5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFwLl9fcGF0Y2hlZCYmKGNlLmV4cG9ydHM9VyhwKSxwLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KGNlLEosYik9Pnt2'@;
put 'YXIgRD1iKDQxNTUpLF89YigyODMwKS5TdHJlYW07Y2UuZXhwb3J0cz1mdW5jdGlvbiBwKE4pe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIHcoSCxSKXtpZighKHRoaXMgaW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IHcoSCxSKTtfLmNhbGwodGhpcyk7dmFyIGo9dGhpczt0aGlzLnBhdGg9'@;
put 'SCx0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixSPVJ8fHt9O2Zvcih2YXIgUD1PYmplY3Qua2V5cyhSKSxMPTAsWT1QLmxlbmd0aDtMPFk7TCsrKXt2YXIgQj1QW0xd'@;
put 'O3RoaXNbQl09UltCXX1pZih0aGlzLmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lk'@;
put 'IDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0'@;
put 'aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10aGlzLmZkP04ub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oVyxaKXtpZihXKXJldHVybiBqLmVtaXQoImVycm9yIixXKSx2b2lkKGoucmVhZGFibGU9ITEpO2ouZmQ9WixqLmVtaXQoIm9wZW4iLFopLGouX3Jl'@;
put 'YWQoKX0pOkQubmV4dFRpY2soZnVuY3Rpb24oKXtqLl9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gRihILFIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEYpKXJldHVybiBuZXcgRihILFIpO18uY2FsbCh0aGlzKSx0aGlzLnBhdGg9SCx0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0h'@;
put 'MCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxSPVJ8fHt9O2Zvcih2YXIgaj1PYmplY3Qua2V5cyhSKSxQPTAsTD1qLmxlbmd0aDtQPEw7UCsrKXt2YXIgWT1qW1BdO3RoaXNbWV09UltZXX1pZih2b2lkIDAh'@;
put 'PT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10'@;
put 'aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPU4ub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOihjZSxKLGIpPT57'@;
put 'dmFyIEQ9Yig0MTU1KSxfPWIoMzIwOCkscD1ELmN3ZCxOPW51bGwsdz1ELmVudi5HUkFDRUZVTF9GU19QTEFURk9STXx8RC5wbGF0Zm9ybTtELmN3ZD1mdW5jdGlvbigpe3JldHVybiBOfHwoTj1wLmNhbGwoRCkpLE59O3RyeXtELmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'RC5jaGRpcil7dmFyIEY9RC5jaGRpcjtELmNoZGlyPWZ1bmN0aW9uKFIpe049bnVsbCxGLmNhbGwoRCxSKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoRC5jaGRpcixGKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEgoUil7ZnVuY3Rpb24gTChxKXtyZXR1cm4g'@;
put 'cSYmZnVuY3Rpb24odGUsaWUsc2Upe3JldHVybiBxLmNhbGwoUix0ZSxpZSxmdW5jdGlvbihnZSl7UShnZSkmJihnZT1udWxsKSxzZSYmc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFkocSl7cmV0dXJuIHEmJmZ1bmN0aW9uKHRlLGllKXt0cnl7cmV0dXJuIHEuY2FsbChS'@;
put 'LHRlLGllKX1jYXRjaChzZSl7aWYoIVEoc2UpKXRocm93IHNlfX19ZnVuY3Rpb24gQihxKXtyZXR1cm4gcSYmZnVuY3Rpb24odGUsaWUsc2UsZ2Upe3JldHVybiBxLmNhbGwoUix0ZSxpZSxzZSxmdW5jdGlvbihfZSl7UShfZSkmJihfZT1udWxsKSxnZSYmZ2UuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfSl9fWZ1bmN0aW9uIFcocSl7cmV0dXJuIHEmJmZ1bmN0aW9uKHRlLGllLHNlKXt0cnl7cmV0dXJuIHEuY2FsbChSLHRlLGllLHNlKX1jYXRjaChnZSl7aWYoIVEoZ2UpKXRocm93IGdlfX19ZnVuY3Rpb24gWihxKXtyZXR1cm4gcSYmZnVuY3Rpb24odGUsaWUsc2Upe2Z1bmN0aW9uIGdl'@;
put 'KF9lLFRlKXtUZSYmKFRlLnVpZDwwJiYoVGUudWlkKz00Mjk0OTY3Mjk2KSxUZS5naWQ8MCYmKFRlLmdpZCs9NDI5NDk2NzI5NikpLHNlJiZzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGllJiYoc2U9aWUsaWU9bnVsbCksaWU/cS5jYWxsKFIsdGUs'@;
put 'aWUsZ2UpOnEuY2FsbChSLHRlLGdlKX19ZnVuY3Rpb24gWChxKXtyZXR1cm4gcSYmZnVuY3Rpb24odGUsaWUpe3ZhciBzZT1pZT9xLmNhbGwoUix0ZSxpZSk6cS5jYWxsKFIsdGUpO3JldHVybiBzZSYmKHNlLnVpZDwwJiYoc2UudWlkKz00Mjk0OTY3Mjk2KSxzZS5naWQ8MCYmKHNlLmdpZCs9'@;
put 'NDI5NDk2NzI5NikpLHNlfX1mdW5jdGlvbiBRKHEpe3JldHVybiFxfHwiRU5PU1lTIj09PXEuY29kZXx8IShELmdldHVpZCYmMD09PUQuZ2V0dWlkKCl8fCJFSU5WQUwiIT09cS5jb2RlJiYiRVBFUk0iIT09cS5jb2RlKX1fLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmRC52ZXJzaW9u'@;
put 'Lm1hdGNoKC9edjBcLjZcLlswLTJdfF52MFwuNVwuLykmJmZ1bmN0aW9uIGoocSl7cS5sY2htb2Q9ZnVuY3Rpb24odGUsaWUsc2Upe3Eub3Blbih0ZSxfLk9fV1JPTkxZfF8uT19TWU1MSU5LLGllLGZ1bmN0aW9uKGdlLF9lKXtnZT9zZSYmc2UoZ2UpOnEuZmNobW9kKF9lLGllLGZ1bmN0aW9u'@;
put 'KFRlKXtxLmNsb3NlKF9lLGZ1bmN0aW9uKFNlKXtzZSYmc2UoVGV8fFNlKX0pfSl9KX0scS5sY2htb2RTeW5jPWZ1bmN0aW9uKHRlLGllKXt2YXIgX2Usc2U9cS5vcGVuU3luYyh0ZSxfLk9fV1JPTkxZfF8uT19TWU1MSU5LLGllKSxnZT0hMDt0cnl7X2U9cS5mY2htb2RTeW5jKHNlLGllKSxn'@;
put 'ZT0hMX1maW5hbGx5e2lmKGdlKXRyeXtxLmNsb3NlU3luYyhzZSl9Y2F0Y2h7fWVsc2UgcS5jbG9zZVN5bmMoc2UpfXJldHVybiBfZX19KFIpLFIubHV0aW1lc3x8ZnVuY3Rpb24gUChxKXtfLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmcS5mdXRpbWVzPyhxLmx1dGltZXM9ZnVuY3Rp'@;
put 'b24odGUsaWUsc2UsZ2Upe3Eub3Blbih0ZSxfLk9fU1lNTElOSyxmdW5jdGlvbihfZSxUZSl7X2U/Z2UmJmdlKF9lKTpxLmZ1dGltZXMoVGUsaWUsc2UsZnVuY3Rpb24oU2Upe3EuY2xvc2UoVGUsZnVuY3Rpb24oemUpe2dlJiZnZShTZXx8emUpfSl9KX0pfSxxLmx1dGltZXNTeW5jPWZ1bmN0'@;
put 'aW9uKHRlLGllLHNlKXt2YXIgX2UsZ2U9cS5vcGVuU3luYyh0ZSxfLk9fU1lNTElOSyksVGU9ITA7dHJ5e19lPXEuZnV0aW1lc1N5bmMoZ2UsaWUsc2UpLFRlPSExfWZpbmFsbHl7aWYoVGUpdHJ5e3EuY2xvc2VTeW5jKGdlKX1jYXRjaHt9ZWxzZSBxLmNsb3NlU3luYyhnZSl9cmV0dXJuIF9l'@;
put 'fSk6cS5mdXRpbWVzJiYocS5sdXRpbWVzPWZ1bmN0aW9uKHRlLGllLHNlLGdlKXtnZSYmRC5uZXh0VGljayhnZSl9LHEubHV0aW1lc1N5bmM9ZnVuY3Rpb24oKXt9KX0oUiksUi5jaG93bj1CKFIuY2hvd24pLFIuZmNob3duPUIoUi5mY2hvd24pLFIubGNob3duPUIoUi5sY2hvd24pLFIuY2ht'@;
put 'b2Q9TChSLmNobW9kKSxSLmZjaG1vZD1MKFIuZmNobW9kKSxSLmxjaG1vZD1MKFIubGNobW9kKSxSLmNob3duU3luYz1XKFIuY2hvd25TeW5jKSxSLmZjaG93blN5bmM9VyhSLmZjaG93blN5bmMpLFIubGNob3duU3luYz1XKFIubGNob3duU3luYyksUi5jaG1vZFN5bmM9WShSLmNobW9kU3lu'@;
put 'YyksUi5mY2htb2RTeW5jPVkoUi5mY2htb2RTeW5jKSxSLmxjaG1vZFN5bmM9WShSLmxjaG1vZFN5bmMpLFIuc3RhdD1aKFIuc3RhdCksUi5mc3RhdD1aKFIuZnN0YXQpLFIubHN0YXQ9WihSLmxzdGF0KSxSLnN0YXRTeW5jPVgoUi5zdGF0U3luYyksUi5mc3RhdFN5bmM9WChSLmZzdGF0U3lu'@;
put 'YyksUi5sc3RhdFN5bmM9WChSLmxzdGF0U3luYyksUi5jaG1vZCYmIVIubGNobW9kJiYoUi5sY2htb2Q9ZnVuY3Rpb24ocSx0ZSxpZSl7aWUmJkQubmV4dFRpY2soaWUpfSxSLmxjaG1vZFN5bmM9ZnVuY3Rpb24oKXt9KSxSLmNob3duJiYhUi5sY2hvd24mJihSLmxjaG93bj1mdW5jdGlvbihx'@;
put 'LHRlLGllLHNlKXtzZSYmRC5uZXh0VGljayhzZSl9LFIubGNob3duU3luYz1mdW5jdGlvbigpe30pLCJ3aW4zMiI9PT13JiYoUi5yZW5hbWU9ImZ1bmN0aW9uIiE9dHlwZW9mIFIucmVuYW1lP1IucmVuYW1lOmZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHRlKGllLHNlLGdlKXt2YXIgX2U9RGF0ZS5u'@;
put 'b3coKSxUZT0wO3EoaWUsc2UsZnVuY3Rpb24gU2UoemUpe2lmKHplJiYoIkVBQ0NFUyI9PT16ZS5jb2RlfHwiRVBFUk0iPT09emUuY29kZXx8IkVCVVNZIj09PXplLmNvZGUpJiZEYXRlLm5vdygpLV9lPDZlNClyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1Iuc3RhdChzZSxmdW5jdGlv'@;
put 'bih6LGcpe3omJiJFTk9FTlQiPT09ei5jb2RlP3EoaWUsc2UsU2UpOmdlKHplKX0pfSxUZSksdm9pZChUZTwxMDAmJihUZSs9MTApKTtnZSYmZ2UoemUpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKHRlLHEpLHRlfShSLnJlbmFtZSkpLFIu'@;
put 'cmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgUi5yZWFkP1IucmVhZDpmdW5jdGlvbihxKXtmdW5jdGlvbiB0ZShpZSxzZSxnZSxfZSxUZSxTZSl7dmFyIHplO2lmKFNlJiYiZnVuY3Rpb24iPT10eXBlb2YgU2Upe3ZhciB6PTA7emU9ZnVuY3Rpb24oZyx5LHgpe2lmKGcmJiJFQUdBSU4iPT09Zy5j'@;
put 'b2RlJiZ6PDEwKXJldHVybiB6KysscS5jYWxsKFIsaWUsc2UsZ2UsX2UsVGUsemUpO1NlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIHEuY2FsbChSLGllLHNlLGdlLF9lLFRlLHplKX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YodGUs'@;
put 'cSksdGV9KFIucmVhZCksUi5yZWFkU3luYz0iZnVuY3Rpb24iIT10eXBlb2YgUi5yZWFkU3luYz9SLnJlYWRTeW5jOmZ1bmN0aW9uKHEpe3JldHVybiBmdW5jdGlvbih0ZSxpZSxzZSxnZSxfZSl7Zm9yKHZhciBUZT0wOzspdHJ5e3JldHVybiBxLmNhbGwoUix0ZSxpZSxzZSxnZSxfZSl9Y2F0'@;
put 'Y2goU2Upe2lmKCJFQUdBSU4iPT09U2UuY29kZSYmVGU8MTApe1RlKys7Y29udGludWV9dGhyb3cgU2V9fX0oUi5yZWFkU3luYyl9fSwxMDQ0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDQyOSksXz1mdW5jdGlvbigpe3JldHVybiEhRH07Xy5oYXNBcnJheUxlbmd0aERlZmlu'@;
put 'ZUJ1Zz1mdW5jdGlvbigpe2lmKCFEKXJldHVybiBudWxsO3RyeXtyZXR1cm4gMSE9PUQoW10sImxlbmd0aCIse3ZhbHVlOjF9KS5sZW5ndGh9Y2F0Y2h7cmV0dXJuITB9fSxjZS5leHBvcnRzPV99LDE0MDU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9dHlwZW9mIFN5bWJvbDwidSIm'@;
put 'JlN5bWJvbCxfPWIoNTQxOSk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBEJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIEQoImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJl8oKX19LDU0MTk6'@;
put 'Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJl'@;
put 'dHVybiEwO3ZhciBiPXt9LEQ9U3ltYm9sKCJ0ZXN0IiksXz1PYmplY3QoRCk7aWYoInN0cmluZyI9PXR5cGVvZiBEfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChEKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3Ry'@;
put 'aW5nLmNhbGwoXykpcmV0dXJuITE7Zm9yKHZhciBOIGluIGJbRF09NDIsYilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyhiKS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9'@;
put 'PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmxlbmd0aClyZXR1cm4hMTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGIpO2lmKDEhPT13Lmxlbmd0aHx8d1swXSE9PUR8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYixEKSlyZXR1'@;
put 'cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiLEQpO2lmKDQyIT09Ri52YWx1ZXx8ITAhPT1GLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw2NDEwOihj'@;
put 'ZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTQxOSk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBEKCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFnfX0sMzM0OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPWIoMjgzMCkuVHJhbnNmb3JtO2Z1'@;
put 'bmN0aW9uIE4oUil7Xy5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPUQuYWxsb2NVbnNhZmUoUiksdGhpcy5fYmxvY2tTaXplPVIsdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1iKDU3MTcpKE4sXyksTi5wcm90b3R5cGUuX3RyYW5z'@;
put 'Zm9ybT1mdW5jdGlvbihSLGosUCl7dmFyIEw9bnVsbDt0cnl7dGhpcy51cGRhdGUoUixqKX1jYXRjaChZKXtMPVl9UChMKX0sTi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKFIpe3ZhciBqPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChQKXtqPVB9UihqKX07dmFy'@;
put 'IHc9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihELnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEQuVFlQRURfQVJSQVlfU1VQUE9SVCk7Ti5wcm90b3R5cGUu'@;
put 'dXBkYXRlPWZ1bmN0aW9uKFIsail7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Uj1mdW5jdGlvbiBIKFIsail7aWYoUiBpbnN0YW5jZW9mIEQpcmV0dXJuIFI7aWYoInN0cmluZyI9PXR5cGVvZiBSKXJldHVybiBELmZyb20oUixq'@;
put 'KTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoUikpe2lmKDA9PT1SLmJ5dGVMZW5ndGgpcmV0dXJuIEQuYWxsb2MoMCk7dmFyIFA9RC5mcm9tKFIuYnVmZmVyLFIuYnl0ZU9mZnNldCxSLmJ5dGVMZW5ndGgpO2lmKFAuYnl0ZUxlbmd0aD09PVIuYnl0ZUxlbmd0aClyZXR1cm4gUH1pZih3JiZS'@;
put 'IGluc3RhbmNlb2YgVWludDhBcnJheXx8RC5pc0J1ZmZlcihSKSYmUi5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIFIuY29uc3RydWN0b3IuaXNCdWZmZXImJlIuY29uc3RydWN0b3IuaXNCdWZmZXIoUikpcmV0dXJuIEQuZnJvbShSKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUg'@;
put 'ImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oUixqKTtmb3IodmFyIFA9dGhpcy5fYmxvY2ssTD0wO3RoaXMuX2Jsb2NrT2Zmc2V0K1IubGVuZ3RoLUw+PXRoaXMuX2Jsb2Nr'@;
put 'U2l6ZTspe2Zvcih2YXIgWT10aGlzLl9ibG9ja09mZnNldDtZPHRoaXMuX2Jsb2NrU2l6ZTspUFtZKytdPVJbTCsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7TDxSLmxlbmd0aDspUFt0aGlzLl9ibG9ja09mZnNldCsrXT1SW0wrK107Zm9yKHZhciBCPTAsVz04'@;
put 'KlIubGVuZ3RoO1c+MDsrK0IpdGhpcy5fbGVuZ3RoW0JdKz1XLChXPXRoaXMuX2xlbmd0aFtCXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbQl0tPTQyOTQ5NjcyOTYqVyk7cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3Io'@;
put 'Il91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LE4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihSKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIGo9dGhpcy5fZGlnZXN0KCk7dm9p'@;
put 'ZCAwIT09UiYmKGo9ai50b1N0cmluZyhSKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgUD0wO1A8NDsrK1ApdGhpcy5fbGVuZ3RoW1BdPTA7cmV0dXJuIGp9LE4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9k'@;
put 'aWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LGNlLmV4cG9ydHM9Tn0sMzcxNTooY2UsSixiKT0+e3ZhciBEPUo7RC51dGlscz1iKDY0MzYpLEQuY29tbW9uPWIoNTc3MiksRC5zaGE9Yig5MDQxKSxELnJpcGVtZD1iKDI5NDkpLEQuaG1hYz1iKDIzNDQpLEQuc2hhMT1ELnNoYS5zaGExLEQu'@;
put 'c2hhMjU2PUQuc2hhLnNoYTI1NixELnNoYTIyND1ELnNoYS5zaGEyMjQsRC5zaGEzODQ9RC5zaGEuc2hhMzg0LEQuc2hhNTEyPUQuc2hhLnNoYTUxMixELnJpcGVtZDE2MD1ELnJpcGVtZC5yaXBlbWQxNjB9LDU3NzI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDM2KSxfPWIo'@;
put 'OTc0Nik7ZnVuY3Rpb24gcCgpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0'@;
put 'cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9Si5CbG9ja0hhc2g9cCxwLnByb3Rv'@;
put 'dHlwZS51cGRhdGU9ZnVuY3Rpb24odyxGKXtpZih3PUQudG9BcnJheSh3LEYpLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdCh3KTp3LHRoaXMucGVuZGluZ1RvdGFsKz13Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBI'@;
put 'PSh3PXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dy5zbGljZSh3Lmxlbmd0aC1ILHcubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx3PUQuam9pbjMyKHcsMCx3Lmxlbmd0aC1ILHRoaXMuZW5kaWFuKTtm'@;
put 'b3IodmFyIFI9MDtSPHcubGVuZ3RoO1IrPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHcsUixSK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxwLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxfKG51bGw9PT10aGlzLnBl'@;
put 'bmRpbmcpLHRoaXMuX2RpZ2VzdCh3KX0scC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB3PXRoaXMucGVuZGluZ1RvdGFsLEY9dGhpcy5fZGVsdGE4LEg9Ri0odyt0aGlzLnBhZExlbmd0aCklRixSPW5ldyBBcnJheShIK3RoaXMucGFkTGVuZ3RoKTtSWzBdPTEyODtmb3IodmFyIGo9'@;
put 'MTtqPEg7aisrKVJbal09MDtpZih3PDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIFA9ODtQPHRoaXMucGFkTGVuZ3RoO1ArKylSW2orK109MDtSW2orK109MCxSW2orK109MCxSW2orK109MCxSW2orK109MCxSW2orK109dz4+PjI0JjI1NSxSW2orK109dz4+PjE2JjI1NSxSW2or'@;
put 'K109dz4+PjgmMjU1LFJbaisrXT0yNTUmd31lbHNlIGZvcihSW2orK109MjU1JncsUltqKytdPXc+Pj44JjI1NSxSW2orK109dz4+PjE2JjI1NSxSW2orK109dz4+PjI0JjI1NSxSW2orK109MCxSW2orK109MCxSW2orK109MCxSW2orK109MCxQPTg7UDx0aGlzLnBhZExlbmd0aDtQKyspUltq'@;
put 'KytdPTA7cmV0dXJuIFJ9fSwyMzQ0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjQzNiksXz1iKDk3NDYpO2Z1bmN0aW9uIHAoTix3LEYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcChOLHcsRik7dGhpcy5IYXNoPU4sdGhpcy5ibG9ja1NpemU9Ti5ibG9j'@;
put 'a1NpemUvOCx0aGlzLm91dFNpemU9Ti5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KEQudG9BcnJheSh3LEYpKX1jZS5leHBvcnRzPXAscC5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odyl7dy5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih3PShu'@;
put 'ZXcgdGhpcy5IYXNoKS51cGRhdGUodykuZGlnZXN0KCkpLF8ody5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIEY9dy5sZW5ndGg7Rjx0aGlzLmJsb2NrU2l6ZTtGKyspdy5wdXNoKDApO2ZvcihGPTA7Rjx3Lmxlbmd0aDtGKyspd1tGXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0'@;
put 'aGlzLkhhc2gpLnVwZGF0ZSh3KSxGPTA7Rjx3Lmxlbmd0aDtGKyspd1tGXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KX0scC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsRil7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHcsRiksdGhpc30scC5wcm90b3R5'@;
put 'cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh3KX19LDI5NDk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDM2KSxfPWIoNTc3MikscD1ELnJvdGwzMixOPUQuc3VtMzIs'@;
put 'dz1ELnN1bTMyXzMsRj1ELnN1bTMyXzQsSD1fLkJsb2NrSGFzaDtmdW5jdGlvbiBSKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUikpcmV0dXJuIG5ldyBSO0guY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0'@;
put 'aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiBqKFgsUSxxLHRlKXtyZXR1cm4gWDw9MTU/UV5xXnRlOlg8PTMxP1EmcXx+USZ0ZTpYPD00Nz8oUXx+cSledGU6WDw9NjM/USZ0ZXxxJn50ZTpRXihxfH50ZSl9ZnVuY3Rpb24gTChYKXtyZXR1cm4gWDw9MTU/MTM1MjgyOTkyNjpYPD0zMT8x'@;
put 'NTQ4NjAzNjg0Olg8PTQ3PzE4MzYwNzI2OTE6WDw9NjM/MjA1Mzk5NDIxNzowfUQuaW5oZXJpdHMoUixIKSxKLnJpcGVtZDE2MD1SLFIuYmxvY2tTaXplPTUxMixSLm91dFNpemU9MTYwLFIuaG1hY1N0cmVuZ3RoPTE5MixSLnBhZExlbmd0aD02NCxSLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0'@;
put 'aW9uKFEscSl7Zm9yKHZhciB0ZT10aGlzLmhbMF0saWU9dGhpcy5oWzFdLHNlPXRoaXMuaFsyXSxnZT10aGlzLmhbM10sX2U9dGhpcy5oWzRdLFRlPXRlLFNlPWllLHplPXNlLHo9Z2UsZz1fZSx5PTA7eTw4MDt5Kyspe3ZhciB4PU4ocChGKHRlLGooeSxpZSxzZSxnZSksUVtZW3ldK3FdLChY'@;
put 'PXkpPD0xNT8wOlg8PTMxPzE1MTg1MDAyNDk6WDw9NDc/MTg1OTc3NTM5MzpYPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFdbeV0pLF9lKTt0ZT1fZSxfZT1nZSxnZT1wKHNlLDEwKSxzZT1pZSxpZT14LHg9TihwKEYoVGUsaig3OS15LFNlLHplLHopLFFbQlt5XStxXSxMKHkpKSxaW3ld'@;
put 'KSxnKSxUZT1nLGc9eix6PXAoemUsMTApLHplPVNlLFNlPXh9dmFyIFg7eD13KHRoaXMuaFsxXSxzZSx6KSx0aGlzLmhbMV09dyh0aGlzLmhbMl0sZ2UsZyksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0sdGUsU2UpLHRoaXMuaFs0XT13KHRoaXMu'@;
put 'aFswXSxpZSx6ZSksdGhpcy5oWzBdPXh9LFIucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oUSl7cmV0dXJuImhleCI9PT1RP0QudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOkQuc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgWT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwx'@;
put 'MywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxCPVs1'@;
put 'LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1'@;
put 'LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLFc9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1'@;
put 'LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFo9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0'@;
put 'LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw5MDQxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO0ouc2hhMT1iKDQ3NjEpLEouc2hhMjI0PWIoNzk5KSxK'@;
put 'LnNoYTI1Nj1iKDkzNDQpLEouc2hhMzg0PWIoNzcyKSxKLnNoYTUxMj1iKDU5MDApfSw0NzYxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjQzNiksXz1iKDU3NzIpLHA9Yig3MDM4KSxOPUQucm90bDMyLHc9RC5zdW0zMixGPUQuc3VtMzJfNSxIPXAuZnRfMSxSPV8uQmxvY2tI'@;
put 'YXNoLGo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIFAoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IFA7Ui5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4'@;
put 'LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfUQuaW5oZXJpdHMoUCxSKSxjZS5leHBvcnRzPVAsUC5ibG9ja1NpemU9NTEyLFAub3V0U2l6ZT0xNjAsUC5obWFjU3RyZW5ndGg9ODAsUC5wYWRMZW5ndGg9NjQsUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihZLEIpe2Zvcih2'@;
put 'YXIgVz10aGlzLlcsWj0wO1o8MTY7WisrKVdbWl09WVtCK1pdO2Zvcig7WjxXLmxlbmd0aDtaKyspV1taXT1OKFdbWi0zXV5XW1otOF1eV1taLTE0XV5XW1otMTZdLDEpO3ZhciBYPXRoaXMuaFswXSxRPXRoaXMuaFsxXSxxPXRoaXMuaFsyXSx0ZT10aGlzLmhbM10saWU9dGhpcy5oWzRdO2Zv'@;
put 'cihaPTA7WjxXLmxlbmd0aDtaKyspe3ZhciBzZT1+fihaLzIwKSxnZT1GKE4oWCw1KSxIKHNlLFEscSx0ZSksaWUsV1taXSxqW3NlXSk7aWU9dGUsdGU9cSxxPU4oUSwzMCksUT1YLFg9Z2V9dGhpcy5oWzBdPXcodGhpcy5oWzBdLFgpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxRKSx0aGlzLmhb'@;
put 'Ml09dyh0aGlzLmhbMl0scSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLHRlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0saWUpfSxQLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFkpe3JldHVybiJoZXgiPT09WT9ELnRvSGV4MzIodGhpcy5oLCJiaWciKTpELnNwbGl0MzIodGhpcy5oLCJiaWci'@;
put 'KX19LDc5OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY0MzYpLF89Yig5MzQ0KTtmdW5jdGlvbiBwKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwO18uY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEy'@;
put 'Njk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfUQuaW5oZXJpdHMocCxfKSxjZS5leHBvcnRzPXAscC5ibG9ja1NpemU9NTEyLHAub3V0U2l6ZT0yMjQscC5obWFjU3RyZW5ndGg9MTkyLHAucGFkTGVuZ3RoPTY0LHAucHJvdG90eXBlLl9kaWdlc3Q9ZnVu'@;
put 'Y3Rpb24odyl7cmV0dXJuImhleCI9PT13P0QudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6RC5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LDkzNDQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDM2KSxfPWIoNTc3MikscD1iKDcwMzgpLE49Yig5'@;
put 'NzQ2KSx3PUQuc3VtMzIsRj1ELnN1bTMyXzQsSD1ELnN1bTMyXzUsUj1wLmNoMzIsaj1wLm1hajMyLFA9cC5zMF8yNTYsTD1wLnMxXzI1NixZPXAuZzBfMjU2LEI9cC5nMV8yNTYsVz1fLkJsb2NrSGFzaCxaPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2'@;
put 'MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3'@;
put 'NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3Miwx'@;
put 'Mzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkw'@;
put 'NjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIFgoKXtpZigh'@;
put 'KHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFg7Vy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1aLHRoaXMuVz1uZXcgQXJy'@;
put 'YXkoNjQpfUQuaW5oZXJpdHMoWCxXKSxjZS5leHBvcnRzPVgsWC5ibG9ja1NpemU9NTEyLFgub3V0U2l6ZT0yNTYsWC5obWFjU3RyZW5ndGg9MTkyLFgucGFkTGVuZ3RoPTY0LFgucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSx0ZSl7Zm9yKHZhciBpZT10aGlzLlcsc2U9MDtzZTwxNjtz'@;
put 'ZSsrKWllW3NlXT1xW3RlK3NlXTtmb3IoO3NlPGllLmxlbmd0aDtzZSsrKWllW3NlXT1GKEIoaWVbc2UtMl0pLGllW3NlLTddLFkoaWVbc2UtMTVdKSxpZVtzZS0xNl0pO3ZhciBnZT10aGlzLmhbMF0sX2U9dGhpcy5oWzFdLFRlPXRoaXMuaFsyXSxTZT10aGlzLmhbM10semU9dGhpcy5oWzRd'@;
put 'LHo9dGhpcy5oWzVdLGc9dGhpcy5oWzZdLHk9dGhpcy5oWzddO2ZvcihOKHRoaXMuay5sZW5ndGg9PT1pZS5sZW5ndGgpLHNlPTA7c2U8aWUubGVuZ3RoO3NlKyspe3ZhciB4PUgoeSxMKHplKSxSKHplLHosZyksdGhpcy5rW3NlXSxpZVtzZV0pLEM9dyhQKGdlKSxqKGdlLF9lLFRlKSk7eT1n'@;
put 'LGc9eix6PXplLHplPXcoU2UseCksU2U9VGUsVGU9X2UsX2U9Z2UsZ2U9dyh4LEMpfXRoaXMuaFswXT13KHRoaXMuaFswXSxnZSksdGhpcy5oWzFdPXcodGhpcy5oWzFdLF9lKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sVGUpLHRoaXMuaFszXT13KHRoaXMuaFszXSxTZSksdGhpcy5oWzRdPXco'@;
put 'dGhpcy5oWzRdLHplKSx0aGlzLmhbNV09dyh0aGlzLmhbNV0seiksdGhpcy5oWzZdPXcodGhpcy5oWzZdLGcpLHRoaXMuaFs3XT13KHRoaXMuaFs3XSx5KX0sWC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihxKXtyZXR1cm4iaGV4Ij09PXE/RC50b0hleDMyKHRoaXMuaCwiYmlnIik6RC5z'@;
put 'cGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3NzI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDM2KSxfPWIoNTkwMCk7ZnVuY3Rpb24gcCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcDtfLmNhbGwodGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEw'@;
put 'MzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XX1ELmluaGVyaXRz'@;
put 'KHAsXyksY2UuZXhwb3J0cz1wLHAuYmxvY2tTaXplPTEwMjQscC5vdXRTaXplPTM4NCxwLmhtYWNTdHJlbmd0aD0xOTIscC5wYWRMZW5ndGg9MTI4LHAucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P0QudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJp'@;
put 'ZyIpOkQuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sNTkwMDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY0MzYpLF89Yig1NzcyKSxwPWIoOTc0NiksTj1ELnJvdHI2NF9oaSx3PUQucm90cjY0X2xvLEY9RC5zaHI2NF9oaSxIPUQuc2hyNjRfbG8sUj1ELnN1'@;
put 'bTY0LGo9RC5zdW02NF9oaSxQPUQuc3VtNjRfbG8sTD1ELnN1bTY0XzRfaGksWT1ELnN1bTY0XzRfbG8sQj1ELnN1bTY0XzVfaGksVz1ELnN1bTY0XzVfbG8sWj1fLkJsb2NrSGFzaCxYPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0'@;
put 'NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1'@;
put 'Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5'@;
put 'LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2'@;
put 'Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5'@;
put 'MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2'@;
put 'MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMx'@;
put 'MDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2'@;
put 'MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0'@;
put 'MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMy'@;
put 'MDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIz'@;
put 'MTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gUSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFEpKXJldHVybiBuZXcgUTtaLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1'@;
put 'OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9WCx0aGlzLlc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gcSh4LEMsVCxWLFUpe3ZhciBFPXgmVF5+eCZVO3Jl'@;
put 'dHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHRlKHgsQyxULFYsVSxFKXt2YXIgbT1DJlZefkMmRTtyZXR1cm4gbTwwJiYobSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBpZSh4LEMsVCxWLFUpe3ZhciBFPXgmVF54JlVeVCZVO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2'@;
put 'KSxFfWZ1bmN0aW9uIHNlKHgsQyxULFYsVSxFKXt2YXIgbT1DJlZeQyZFXlYmRTtyZXR1cm4gbTwwJiYobSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBnZSh4LEMpe3ZhciBFPU4oeCxDLDI4KV5OKEMseCwyKV5OKEMseCw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlv'@;
put 'biBfZSh4LEMpe3ZhciBFPXcoeCxDLDI4KV53KEMseCwyKV53KEMseCw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBUZSh4LEMpe3ZhciBFPU4oeCxDLDE0KV5OKHgsQywxOCleTihDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24g'@;
put 'U2UoeCxDKXt2YXIgRT13KHgsQywxNCledyh4LEMsMTgpXncoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHplKHgsQyl7dmFyIEU9Tih4LEMsMSleTih4LEMsOCleRih4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24geih4'@;
put 'LEMpe3ZhciBFPXcoeCxDLDEpXncoeCxDLDgpXkgoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIGcoeCxDKXt2YXIgRT1OKHgsQywxOSleTihDLHgsMjkpXkYoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHkoeCxDKXt2'@;
put 'YXIgRT13KHgsQywxOSledyhDLHgsMjkpXkgoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfUQuaW5oZXJpdHMoUSxaKSxjZS5leHBvcnRzPVEsUS5ibG9ja1NpemU9MTAyNCxRLm91dFNpemU9NTEyLFEuaG1hY1N0cmVuZ3RoPTE5MixRLnBhZExlbmd0aD0xMjgsUS5wcm90'@;
put 'b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihDLFQpe2Zvcih2YXIgVj10aGlzLlcsVT0wO1U8MzI7VSsrKVZbVV09Q1tUK1VdO2Zvcig7VTxWLmxlbmd0aDtVKz0yKXt2YXIgRT1nKFZbVS00XSxWW1UtM10pLG09eShWW1UtNF0sVltVLTNdKSxBPVZbVS0xNF0sYWU9VltVLTEzXSxuZT16'@;
put 'ZShWW1UtMzBdLFZbVS0yOV0pLGxlPXooVltVLTMwXSxWW1UtMjldKSx3ZT1WW1UtMzJdLFplPVZbVS0zMV07VltVXT1MKEUsbSxBLGFlLG5lLGxlLHdlLFplKSxWW1UrMV09WShFLG0sQSxhZSxuZSxsZSx3ZSxaZSl9fSxRLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEMsVCl7dGhpcy5f'@;
put 'cHJlcGFyZUJsb2NrKEMsVCk7dmFyIFY9dGhpcy5XLFU9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSxuZT10aGlzLmhbNV0sbGU9dGhpcy5oWzZdLHdlPXRoaXMuaFs3XSxaZT10aGlzLmhbOF0sUWU9dGhpcy5oWzldLGF0PXRoaXMu'@;
put 'aFsxMF0seGU9dGhpcy5oWzExXSx2ZT10aGlzLmhbMTJdLHFlPXRoaXMuaFsxM10samU9dGhpcy5oWzE0XSxBZT10aGlzLmhbMTVdO3AodGhpcy5rLmxlbmd0aD09PVYubGVuZ3RoKTtmb3IodmFyIEZlPTA7RmU8Vi5sZW5ndGg7RmUrPTIpe3ZhciBSZT1qZSxJZT1BZSxIZT1UZShaZSxRZSks'@;
put 'RGU9U2UoWmUsUWUpLGtlPXEoWmUsMCxhdCwwLHZlKSxfdD10ZSgwLFFlLDAseGUsMCxxZSksbnQ9dGhpcy5rW0ZlXSxKZT10aGlzLmtbRmUrMV0sb249VltGZV0seXQ9VltGZSsxXSxNdD1CKFJlLEllLEhlLERlLGtlLF90LG50LEplLG9uLHl0KSxJdD1XKFJlLEllLEhlLERlLGtlLF90LG50'@;
put 'LEplLG9uLHl0KTtSZT1nZShVLEUpLEllPV9lKFUsRSksSGU9aWUoVSwwLG0sMCxhZSksRGU9c2UoMCxFLDAsQSwwLG5lKTt2YXIgcnQ9aihSZSxJZSxIZSxEZSksS2U9UChSZSxJZSxIZSxEZSk7amU9dmUsQWU9cWUsdmU9YXQscWU9eGUsYXQ9WmUseGU9UWUsWmU9aihsZSx3ZSxNdCxJdCks'@;
put 'UWU9UCh3ZSx3ZSxNdCxJdCksbGU9YWUsd2U9bmUsYWU9bSxuZT1BLG09VSxBPUUsVT1qKE10LEl0LHJ0LEtlKSxFPVAoTXQsSXQscnQsS2UpfVIodGhpcy5oLDAsVSxFKSxSKHRoaXMuaCwyLG0sQSksUih0aGlzLmgsNCxhZSxuZSksUih0aGlzLmgsNixsZSx3ZSksUih0aGlzLmgsOCxaZSxR'@;
put 'ZSksUih0aGlzLmgsMTAsYXQseGUpLFIodGhpcy5oLDEyLHZlLHFlKSxSKHRoaXMuaCwxNCxqZSxBZSl9LFEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oQyl7cmV0dXJuImhleCI9PT1DP0QudG9IZXgzMih0aGlzLmgsImJpZyIpOkQuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzAzODoo'@;
put 'Y2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz1iKDY0MzYpLnJvdHIzMjtmdW5jdGlvbiBOKEwsWSxCKXtyZXR1cm4gTCZZXn5MJkJ9ZnVuY3Rpb24gdyhMLFksQil7cmV0dXJuIEwmWV5MJkJeWSZCfWZ1bmN0aW9uIEYoTCxZLEIpe3JldHVybiBMXlleQn1KLmZ0XzE9ZnVuY3Rpb24gcChM'@;
put 'LFksQixXKXtyZXR1cm4gMD09PUw/TihZLEIsVyk6MT09PUx8fDM9PT1MP0YoWSxCLFcpOjI9PT1MP3coWSxCLFcpOnZvaWQgMH0sSi5jaDMyPU4sSi5tYWozMj13LEoucDMyPUYsSi5zMF8yNTY9ZnVuY3Rpb24gSChMKXtyZXR1cm4gXyhMLDIpXl8oTCwxMyleXyhMLDIyKX0sSi5zMV8yNTY9'@;
put 'ZnVuY3Rpb24gUihMKXtyZXR1cm4gXyhMLDYpXl8oTCwxMSleXyhMLDI1KX0sSi5nMF8yNTY9ZnVuY3Rpb24gaihMKXtyZXR1cm4gXyhMLDcpXl8oTCwxOCleTD4+PjN9LEouZzFfMjU2PWZ1bmN0aW9uIFAoTCl7cmV0dXJuIF8oTCwxNyleXyhMLDE5KV5MPj4+MTB9fSw2NDM2OihjZSxKLGIp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTc0NiksXz1iKDU3MTcpO2Z1bmN0aW9uIHAoeSx4KXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImeS5jaGFyQ29kZUF0KHgpKXx8eDwwfHx4KzE+PXkubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZ5LmNoYXJDb2RlQXQoeCsxKSl9ZnVuY3Rpb24gRih5KXty'@;
put 'ZXR1cm4oeT4+PjI0fHk+Pj44JjY1MjgwfHk8PDgmMTY3MTE2ODB8KDI1NSZ5KTw8MjQpPj4+MH1mdW5jdGlvbiBSKHkpe3JldHVybiAxPT09eS5sZW5ndGg/IjAiK3k6eX1mdW5jdGlvbiBqKHkpe3JldHVybiA3PT09eS5sZW5ndGg/IjAiK3k6Nj09PXkubGVuZ3RoPyIwMCIreTo1PT09eS5s'@;
put 'ZW5ndGg/IjAwMCIreTo0PT09eS5sZW5ndGg/IjAwMDAiK3k6Mz09PXkubGVuZ3RoPyIwMDAwMCIreToyPT09eS5sZW5ndGg/IjAwMDAwMCIreToxPT09eS5sZW5ndGg/IjAwMDAwMDAiK3k6eX1KLmluaGVyaXRzPV8sSi50b0FycmF5PWZ1bmN0aW9uIE4oeSx4KXtpZihBcnJheS5pc0FycmF5'@;
put 'KHkpKXJldHVybiB5LnNsaWNlKCk7aWYoIXkpcmV0dXJuW107dmFyIEM9W107aWYoInN0cmluZyI9PXR5cGVvZiB5KWlmKHgpe2lmKCJoZXgiPT09eClmb3IoKHk9eS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJih5PSIwIit5KSxWPTA7Vjx5Lmxlbmd0aDtWKz0y'@;
put 'KUMucHVzaChwYXJzZUludCh5W1ZdK3lbVisxXSwxNikpfWVsc2UgZm9yKHZhciBUPTAsVj0wO1Y8eS5sZW5ndGg7VisrKXt2YXIgVT15LmNoYXJDb2RlQXQoVik7VTwxMjg/Q1tUKytdPVU6VTwyMDQ4PyhDW1QrK109VT4+NnwxOTIsQ1tUKytdPTYzJlV8MTI4KTpwKHksVik/KFU9NjU1MzYr'@;
put 'KCgxMDIzJlUpPDwxMCkrKDEwMjMmeS5jaGFyQ29kZUF0KCsrVikpLENbVCsrXT1VPj4xOHwyNDAsQ1tUKytdPVU+PjEyJjYzfDEyOCxDW1QrK109VT4+NiY2M3wxMjgsQ1tUKytdPTYzJlV8MTI4KTooQ1tUKytdPVU+PjEyfDIyNCxDW1QrK109VT4+NiY2M3wxMjgsQ1tUKytdPTYzJlV8MTI4'@;
put 'KX1lbHNlIGZvcihWPTA7Vjx5Lmxlbmd0aDtWKyspQ1tWXT0wfHlbVl07cmV0dXJuIEN9LEoudG9IZXg9ZnVuY3Rpb24gdyh5KXtmb3IodmFyIHg9IiIsQz0wO0M8eS5sZW5ndGg7QysrKXgrPVIoeVtDXS50b1N0cmluZygxNikpO3JldHVybiB4fSxKLmh0b25sPUYsSi50b0hleDMyPWZ1bmN0'@;
put 'aW9uIEgoeSx4KXtmb3IodmFyIEM9IiIsVD0wO1Q8eS5sZW5ndGg7VCsrKXt2YXIgVj15W1RdOyJsaXR0bGUiPT09eCYmKFY9RihWKSksQys9aihWLnRvU3RyaW5nKDE2KSl9cmV0dXJuIEN9LEouemVybzI9UixKLnplcm84PWosSi5qb2luMzI9ZnVuY3Rpb24gUCh5LHgsQyxUKXt2YXIgVj1D'@;
put 'LXg7RChWJTQ9PTApO2Zvcih2YXIgVT1uZXcgQXJyYXkoVi80KSxFPTAsbT14O0U8VS5sZW5ndGg7RSsrLG0rPTQpVVtFXT0oImJpZyI9PT1UP3lbbV08PDI0fHlbbSsxXTw8MTZ8eVttKzJdPDw4fHlbbSszXTp5W20rM108PDI0fHlbbSsyXTw8MTZ8eVttKzFdPDw4fHlbbV0pPj4+MDtyZXR1'@;
put 'cm4gVX0sSi5zcGxpdDMyPWZ1bmN0aW9uIEwoeSx4KXtmb3IodmFyIEM9bmV3IEFycmF5KDQqeS5sZW5ndGgpLFQ9MCxWPTA7VDx5Lmxlbmd0aDtUKyssVis9NCl7dmFyIFU9eVtUXTsiYmlnIj09PXg/KENbVl09VT4+PjI0LENbVisxXT1VPj4+MTYmMjU1LENbVisyXT1VPj4+OCYyNTUsQ1tW'@;
put 'KzNdPTI1NSZVKTooQ1tWKzNdPVU+Pj4yNCxDW1YrMl09VT4+PjE2JjI1NSxDW1YrMV09VT4+PjgmMjU1LENbVl09MjU1JlUpfXJldHVybiBDfSxKLnJvdHIzMj1mdW5jdGlvbiBZKHkseCl7cmV0dXJuIHk+Pj54fHk8PDMyLXh9LEoucm90bDMyPWZ1bmN0aW9uIEIoeSx4KXtyZXR1cm4geTw8'@;
put 'eHx5Pj4+MzIteH0sSi5zdW0zMj1mdW5jdGlvbiBXKHkseCl7cmV0dXJuIHkreD4+PjB9LEouc3VtMzJfMz1mdW5jdGlvbiBaKHkseCxDKXtyZXR1cm4geSt4K0M+Pj4wfSxKLnN1bTMyXzQ9ZnVuY3Rpb24gWCh5LHgsQyxUKXtyZXR1cm4geSt4K0MrVD4+PjB9LEouc3VtMzJfNT1mdW5jdGlv'@;
put 'biBRKHkseCxDLFQsVil7cmV0dXJuIHkreCtDK1QrVj4+PjB9LEouc3VtNjQ9ZnVuY3Rpb24gcSh5LHgsQyxUKXt2YXIgRT1UK3lbeCsxXT4+PjA7eVt4XT0oRTxUPzE6MCkrQyt5W3hdPj4+MCx5W3grMV09RX0sSi5zdW02NF9oaT1mdW5jdGlvbiB0ZSh5LHgsQyxUKXtyZXR1cm4oeCtUPj4+'@;
put 'MDx4PzE6MCkreStDPj4+MH0sSi5zdW02NF9sbz1mdW5jdGlvbiBpZSh5LHgsQyxUKXtyZXR1cm4geCtUPj4+MH0sSi5zdW02NF80X2hpPWZ1bmN0aW9uIHNlKHkseCxDLFQsVixVLEUsbSl7dmFyIEE9MCxhZT14O3JldHVybiBBKz0oYWU9YWUrVD4+PjApPHg/MTowLEErPShhZT1hZStVPj4+'@;
put 'MCk8VT8xOjAseStDK1YrRSsoQSs9KGFlPWFlK20+Pj4wKTxtPzE6MCk+Pj4wfSxKLnN1bTY0XzRfbG89ZnVuY3Rpb24gZ2UoeSx4LEMsVCxWLFUsRSxtKXtyZXR1cm4geCtUK1UrbT4+PjB9LEouc3VtNjRfNV9oaT1mdW5jdGlvbiBfZSh5LHgsQyxULFYsVSxFLG0sQSxhZSl7dmFyIG5lPTAs'@;
put 'bGU9eDtyZXR1cm4gbmUrPShsZT1sZStUPj4+MCk8eD8xOjAsbmUrPShsZT1sZStVPj4+MCk8VT8xOjAsbmUrPShsZT1sZSttPj4+MCk8bT8xOjAseStDK1YrRStBKyhuZSs9KGxlPWxlK2FlPj4+MCk8YWU/MTowKT4+PjB9LEouc3VtNjRfNV9sbz1mdW5jdGlvbiBUZSh5LHgsQyxULFYsVSxF'@;
put 'LG0sQSxhZSl7cmV0dXJuIHgrVCtVK20rYWU+Pj4wfSxKLnJvdHI2NF9oaT1mdW5jdGlvbiBTZSh5LHgsQyl7cmV0dXJuKHg8PDMyLUN8eT4+PkMpPj4+MH0sSi5yb3RyNjRfbG89ZnVuY3Rpb24gemUoeSx4LEMpe3JldHVybih5PDwzMi1DfHg+Pj5DKT4+PjB9LEouc2hyNjRfaGk9ZnVuY3Rp'@;
put 'b24geih5LHgsQyl7cmV0dXJuIHk+Pj5DfSxKLnNocjY0X2xvPWZ1bmN0aW9uIGcoeSx4LEMpe3JldHVybih5PDwzMi1DfHg+Pj5DKT4+PjB9fSw4ODI0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLF89T2JqZWN0LnByb3RvdHlwZS5oYXNP'@;
put 'd25Qcm9wZXJ0eSxwPWIoODYxMik7Y2UuZXhwb3J0cz1wLmNhbGwoRCxfKX0sMjE1NjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3MTUpLF89Yig0NTA0KSxwPWIoOTc0Nik7ZnVuY3Rpb24gTih3KXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE4odyk7dGhp'@;
put 'cy5oYXNoPXcuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF3LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXcubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFs'@;
put 'PW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIEY9Xy50b0FycmF5KHcuZW50cm9weSx3LmVudHJvcHlFbmN8fCJoZXgiKSxIPV8udG9BcnJheSh3Lm5vbmNlLHcubm9uY2VFbmN8fCJoZXgiKSxSPV8udG9BcnJheSh3LnBlcnMsdy5wZXJzRW5jfHwiaGV4Iik7cChGLmxlbmd0aD49'@;
put 'dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChGLEgsUil9Y2UuZXhwb3J0cz1OLE4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEYsSCxSKXt2YXIgaj1GLmNvbmNhdChIKS5jb25j'@;
put 'YXQoUik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgUD0wO1A8dGhpcy5WLmxlbmd0aDtQKyspdGhpcy5LW1BdPTAsdGhpcy5WW1BdPTE7dGhpcy5fdXBkYXRlKGopLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVz'@;
put 'ZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxOLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRC5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3ZhciBIPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRh'@;
put 'dGUoWzBdKTtGJiYoSD1ILnVwZGF0ZShGKSksdGhpcy5LPUguZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxGJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoRikuZGlnZXN0KCksdGhpcy5W'@;
put 'PXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LE4ucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihGLEgsUixqKXsic3RyaW5nIiE9dHlwZW9mIEgmJihqPVIsUj1ILEg9bnVsbCksRj1fLnRvQXJyYXkoRixIKSxSPV8udG9BcnJheShSLGopLHAoRi5sZW5ndGg+PXRoaXMu'@;
put 'bWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShGLmNvbmNhdChSfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxOLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihGLEgsUixqKXtpZih0aGlz'@;
put 'Ll9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgSCYmKGo9UixSPUgsSD1udWxsKSxSJiYoUj1fLnRvQXJyYXkoUixqfHwiaGV4IiksdGhpcy5fdXBkYXRlKFIpKTtmb3IodmFyIFA9W107UC5s'@;
put 'ZW5ndGg8RjspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxQPVAuY29uY2F0KHRoaXMuVik7dmFyIEw9UC5zbGljZSgwLEYpO3JldHVybiB0aGlzLl91cGRhdGUoUiksdGhpcy5fcmVzZWVkKyssXy5lbmNvZGUoTCxIKX19LDY0NTooY2UsSik9PntKLnJlYWQ9'@;
put 'ZnVuY3Rpb24oYixELF8scCxOKXt2YXIgdyxGLEg9OCpOLXAtMSxSPSgxPDxIKS0xLGo9Uj4+MSxQPS03LEw9Xz9OLTE6MCxZPV8/LTE6MSxCPWJbRCtMXTtmb3IoTCs9WSx3PUImKDE8PC1QKS0xLEI+Pj0tUCxQKz1IO1A+MDt3PTI1Nip3K2JbRCtMXSxMKz1ZLFAtPTgpO2ZvcihGPXcmKDE8'@;
put 'PC1QKS0xLHc+Pj0tUCxQKz1wO1A+MDtGPTI1NipGK2JbRCtMXSxMKz1ZLFAtPTgpO2lmKDA9PT13KXc9MS1qO2Vsc2V7aWYodz09PVIpcmV0dXJuIEY/TmFOOjEvMCooQj8tMToxKTtGKz1NYXRoLnBvdygyLHApLHctPWp9cmV0dXJuKEI/LTE6MSkqRipNYXRoLnBvdygyLHctcCl9LEoud3Jp'@;
put 'dGU9ZnVuY3Rpb24oYixELF8scCxOLHcpe3ZhciBGLEgsUixqPTgqdy1OLTEsUD0oMTw8aiktMSxMPVA+PjEsWT0yMz09PU4/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLEI9cD8wOnctMSxXPXA/MTotMSxaPUQ8MHx8MD09PUQmJjEvRDwwPzE6MDtmb3IoRD1NYXRoLmFicyhE'@;
put 'KSxpc05hTihEKXx8RD09PTEvMD8oSD1pc05hTihEKT8xOjAsRj1QKTooRj1NYXRoLmZsb29yKE1hdGgubG9nKEQpL01hdGguTE4yKSxEKihSPU1hdGgucG93KDIsLUYpKTwxJiYoRi0tLFIqPTIpLChEKz1GK0w+PTE/WS9SOlkqTWF0aC5wb3coMiwxLUwpKSpSPj0yJiYoRisrLFIvPTIpLEYr'@;
put 'TD49UD8oSD0wLEY9UCk6RitMPj0xPyhIPShEKlItMSkqTWF0aC5wb3coMixOKSxGKz1MKTooSD1EKk1hdGgucG93KDIsTC0xKSpNYXRoLnBvdygyLE4pLEY9MCkpO04+PTg7YltfK0JdPTI1NSZILEIrPVcsSC89MjU2LE4tPTgpO2ZvcihGPUY8PE58SCxqKz1OO2o+MDtiW18rQl09MjU1JkYs'@;
put 'Qis9VyxGLz0yNTYsai09OCk7YltfK0ItV118PTEyOCpafX0sNTcxNzpjZT0+e2NlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oYixEKXtEJiYoYi5zdXBlcl89RCxiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEQucHJvdG90eXBlLHtjb25zdHJ1'@;
put 'Y3Rvcjp7dmFsdWU6YixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKGIsRCl7aWYoRCl7Yi5zdXBlcl89RDt2YXIgXz1mdW5jdGlvbigpe307Xy5wcm90b3R5cGU9RC5wcm90b3R5cGUsYi5wcm90b3R5cGU9bmV3IF8sYi5wcm90b3R5cGUu'@;
put 'Y29uc3RydWN0b3I9Yn19fSwyNTg0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjQxMCkoKSxwPWIoNzM3OSkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxOPWZ1bmN0aW9uKFIpe3JldHVybiEoRCYmUiYmIm9iamVjdCI9PXR5cGVvZiBSJiZTeW1ib2wudG9TdHJpbmdU'@;
put 'YWcgaW4gUikmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09cChSKX0sdz1mdW5jdGlvbihSKXtyZXR1cm4hIU4oUil8fG51bGwhPT1SJiYib2JqZWN0Ij09dHlwZW9mIFImJiJsZW5ndGgiaW4gUiYmIm51bWJlciI9PXR5cGVvZiBSLmxlbmd0aCYmUi5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5'@;
put 'XSIhPT1wKFIpJiYiY2FsbGVlImluIFImJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1wKFIuY2FsbGVlKX0sRj1mdW5jdGlvbigpe3JldHVybiBOKGFyZ3VtZW50cyl9KCk7Ti5pc0xlZ2FjeUFyZ3VtZW50cz13LGNlLmV4cG9ydHM9Rj9OOnd9LDUzMjA6Y2U9PnsidXNlIHN0cmljdCI7dmFyIEQs'@;
put 'XyxKPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxiPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGImJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e0Q9T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBffX0pLF89e30sYihmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLEQpfWNhdGNoKFEpe1EhPT1fJiYoYj1udWxsKX1lbHNlIGI9bnVsbDt2YXIgcD0vXlxzKmNsYXNzXGIvLE49ZnVuY3Rpb24ocSl7'@;
put 'dHJ5e3ZhciB0ZT1KLmNhbGwocSk7cmV0dXJuIHAudGVzdCh0ZSl9Y2F0Y2h7cmV0dXJuITF9fSx3PWZ1bmN0aW9uKHEpe3RyeXtyZXR1cm4hTihxKSYmKEouY2FsbChxKSwhMCl9Y2F0Y2h7cmV0dXJuITF9fSxGPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQj0iZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgU3ltYm9sJiYhIVN5bWJvbC50b1N0cmluZ1RhZyxXPSEoMCBpblssXSksWj1mdW5jdGlvbigpe3JldHVybiExfTtpZigib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50KXt2YXIgWD1kb2N1bWVudC5hbGw7Ri5jYWxsKFgpPT09Ri5jYWxsKGRvY3VtZW50LmFsbCkmJihaPWZ1bmN0aW9uKHEp'@;
put 'e2lmKChXfHwhcSkmJih0eXBlb2YgcT4idSJ8fCJvYmplY3QiPT10eXBlb2YgcSkpdHJ5e3ZhciB0ZT1GLmNhbGwocSk7cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT10ZXx8IltvYmplY3QgSFRNTCBkb2N1bWVudC5hbGwgY2xhc3NdIj09PXRlfHwiW29iamVjdCBIVE1M'@;
put 'Q29sbGVjdGlvbl0iPT09dGV8fCJbb2JqZWN0IE9iamVjdF0iPT09dGUpJiZudWxsPT1xKCIiKX1jYXRjaHt9cmV0dXJuITF9KX1jZS5leHBvcnRzPWI/ZnVuY3Rpb24ocSl7aWYoWihxKSlyZXR1cm4hMDtpZighcXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHEmJiJvYmplY3QiIT10eXBlb2YgcSly'@;
put 'ZXR1cm4hMTt0cnl7YihxLG51bGwsRCl9Y2F0Y2godGUpe2lmKHRlIT09XylyZXR1cm4hMX1yZXR1cm4hTihxKSYmdyhxKX06ZnVuY3Rpb24ocSl7aWYoWihxKSlyZXR1cm4hMDtpZighcXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHEmJiJvYmplY3QiIT10eXBlb2YgcSlyZXR1cm4hMTtpZihCKXJl'@;
put 'dHVybiB3KHEpO2lmKE4ocSkpcmV0dXJuITE7dmFyIHRlPUYuY2FsbChxKTtyZXR1cm4hKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT10ZSYmIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiE9PXRlJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KHRlKSkmJncocSl9fSw4NjYyOihjZSxKLGIpPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciBqLEQ9Yig3Mzc5KSxwPWIoOTI0NikoL15ccyooPzpmdW5jdGlvbik/XCovKSxOPWIoNjQxMCkoKSx3PWIoMTYxOCksRj1EKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksSD1EKCJGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmciKTtjZS5leHBvcnRzPWZ1'@;
put 'bmN0aW9uKEwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBMKXJldHVybiExO2lmKHAoSChMKSkpcmV0dXJuITA7aWYoIU4pcmV0dXJuIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09PUYoTCk7aWYoIXcpcmV0dXJuITE7aWYodHlwZW9mIGo+InUiKXt2YXIgQj1mdW5jdGlvbigpe2lmKCFO'@;
put 'KXJldHVybiExO3RyeXtyZXR1cm4gRnVuY3Rpb24oInJldHVybiBmdW5jdGlvbiooKSB7fSIpKCl9Y2F0Y2h7fX0oKTtqPSEhQiYmdyhCKX1yZXR1cm4gdyhMKT09PWp9fSw4NjExOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oYil7cmV0dXJuIGIhPWJ9fSwzNjA6KGNl'@;
put 'LEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1NTU5KSxfPWIoNDI4OSkscD1iKDg2MTEpLE49Yig5NDE1KSx3PWIoMzE5NCksRj1EKE4oKSxOdW1iZXIpO18oRix7Z2V0UG9seWZpbGw6TixpbXBsZW1lbnRhdGlvbjpwLHNoaW06d30pLGNlLmV4cG9ydHM9Rn0sOTQxNTooY2UsSixiKT0+'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDg2MTEpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOJiZOdW1iZXIuaXNOYU4oTmFOKSYmIU51bWJlci5pc05hTigiYSIpP051bWJlci5pc05hTjpEfX0sMzE5NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQy'@;
put 'ODkpLF89Yig5NDE1KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIE49XygpO3JldHVybiBEKE51bWJlcix7aXNOYU46Tn0se2lzTmFOOmZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiE9PU59fSksTn19LDg0MjA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIHcsRD1iKDczNzkp'@;
put 'LF89Yig2NDEwKSgpLHA9Yig4ODI0KSxOPWIoNzI5Nik7aWYoXyl7dmFyIEY9RCgiUmVnRXhwLnByb3RvdHlwZS5leGVjIiksSD17fSxSPWZ1bmN0aW9uKCl7dGhyb3cgSH0saj17dG9TdHJpbmc6Uix2YWx1ZU9mOlJ9OyJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlJiYoaltT'@;
put 'eW1ib2wudG9QcmltaXRpdmVdPVIpLHc9ZnVuY3Rpb24oQil7aWYoIUJ8fCJvYmplY3QiIT10eXBlb2YgQilyZXR1cm4hMTt2YXIgVz1OKEIsImxhc3RJbmRleCIpO2lmKCFXfHwhcChXLCJ2YWx1ZSIpKXJldHVybiExO3RyeXtGKEIsail9Y2F0Y2goWCl7cmV0dXJuIFg9PT1IfX19ZWxzZXt2'@;
put 'YXIgUD1EKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIik7dz1mdW5jdGlvbihCKXtyZXR1cm4hKCFCfHwib2JqZWN0IiE9dHlwZW9mIEImJiJmdW5jdGlvbiIhPXR5cGVvZiBCKSYmIltvYmplY3QgUmVnRXhwXSI9PT1QKEIpfX1jZS5leHBvcnRzPXd9LDU2OTI6KGNlLEosYik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIEQ9Yig2NDMwKTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3JldHVybiEhRChwKX19LDU4MjY6Y2U9Pnt2YXIgSj17fS50b1N0cmluZztjZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PUouY2FsbChiKX19LDY4'@;
put 'MTM6KGNlLEosYik9PntsZXQgRDt0cnl7RD1iKDc3KX1jYXRjaHtEPWIoNDEyOSl9Y29uc3QgXz1iKDg5ODEpLHtzdHJpbmdpZnk6cCxzdHJpcEJvbTpOfT1iKDY3ODApO2Z1bmN0aW9uIEYoKXtyZXR1cm4oRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxaPXt9KXsic3RyaW5nIj09'@;
put 'dHlwZW9mIFomJihaPXtlbmNvZGluZzpafSk7Y29uc3QgWD1aLmZzfHxELFE9ISgidGhyb3dzImluIFopfHxaLnRocm93cztsZXQgdGUscT15aWVsZCBfLmZyb21DYWxsYmFjayhYLnJlYWRGaWxlKShXLFopO3E9TihxKTt0cnl7dGU9SlNPTi5wYXJzZShxLFo/Wi5yZXZpdmVyOm51bGwpfWNh'@;
put 'dGNoKGllKXtpZihRKXRocm93IGllLm1lc3NhZ2U9YCR7V306ICR7aWUubWVzc2FnZX1gLGllO3JldHVybiBudWxsfXJldHVybiB0ZX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgSD1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHcoVyl7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfSk7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFosWD17fSl7Y29uc3QgUT1YLmZzfHxELHE9cChaLFgpO3lpZWxkIF8uZnJvbUNhbGxiYWNrKFEud3JpdGVGaWxlKShXLHEsWCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEw9'@;
put 'Xy5mcm9tUHJvbWlzZShmdW5jdGlvbiBqKFcsWil7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7Y2UuZXhwb3J0cz17cmVhZEZpbGU6SCxyZWFkRmlsZVN5bmM6ZnVuY3Rpb24gUihXLFo9e30peyJzdHJpbmciPT10eXBlb2YgWiYmKFo9e2VuY29kaW5nOlp9KTtjb25zdCBYPVou'@;
put 'ZnN8fEQsUT0hKCJ0aHJvd3MiaW4gWil8fFoudGhyb3dzO3RyeXtsZXQgcT1YLnJlYWRGaWxlU3luYyhXLFopO3JldHVybiBxPU4ocSksSlNPTi5wYXJzZShxLFoucmV2aXZlcil9Y2F0Y2gocSl7aWYoUSl0aHJvdyBxLm1lc3NhZ2U9YCR7V306ICR7cS5tZXNzYWdlfWAscTtyZXR1cm4gbnVs'@;
put 'bH19LHdyaXRlRmlsZTpMLHdyaXRlRmlsZVN5bmM6ZnVuY3Rpb24gWShXLFosWD17fSl7Y29uc3QgUT1YLmZzfHxELHE9cChaLFgpO3JldHVybiBRLndyaXRlRmlsZVN5bmMoVyxxLFgpfX19LDY3ODA6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLkJ1ZmZlcjtjZS5leHBvcnRzPXtzdHJpbmdp'@;
put 'Znk6ZnVuY3Rpb24gXyhOLHtFT0w6dz0iXG4iLGZpbmFsRU9MOkY9ITAscmVwbGFjZXI6SD1udWxsLHNwYWNlczpSfT17fSl7Y29uc3Qgaj1GP3c6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KE4sSCxSKS5yZXBsYWNlKC9cbi9nLHcpK2p9LHN0cmlwQm9tOmZ1bmN0aW9uIHAoTil7cmV0dXJu'@;
put 'IEQuaXNCdWZmZXIoTikmJihOPU4udG9TdHJpbmcoInV0ZjgiKSksTi5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBEKEgpe3RoaXMubWVzc2FnZT1IfWIucihKKSxiLmQoSix7SW52YWxpZFRva2VuRXJyb3I6KCk9Pk4sZGVm'@;
put 'YXVsdDooKT0+Rn0pLChELnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIF89dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKEgpe3ZhciBSPVN0cmluZyhIKS5yZXBsYWNl'@;
put 'KC89KyQvLCIiKTtpZihSLmxlbmd0aCU0PT0xKXRocm93IG5ldyBEKCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIgaixQLEw9MCxZPTAsQj0iIjtQPVIuY2hhckF0KFkrKyk7flAmJihqPUwlND82NCpq'@;
put 'K1A6UCxMKyslNCk/Qis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmaj4+KC0yKkwmNikpOjApUD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLmluZGV4T2YoUCk7cmV0dXJuIEJ9O2Z1bmN0aW9uIE4oSCl7dGhpcy5t'@;
put 'ZXNzYWdlPUh9KE4ucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO2NvbnN0IEY9ZnVuY3Rpb24gdyhILFIpe2lmKCJzdHJpbmciIT10eXBlb2YgSCl0aHJvdyBuZXcgTigiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgaj0hMD09PShSPVJ8fHt9KS5o'@;
put 'ZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBwKEgpe3ZhciBSPUgucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKFIubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6Uis9Ij09IjticmVhaztjYXNlIDM6Uis9Ij0iO2JyZWFrO2Rl'@;
put 'ZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoXyhSKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihQLEwpe3ZhciBZPUwuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gWS5sZW5n'@;
put 'dGg8MiYmKFk9IjAiK1kpLCIlIitZfSkpfWNhdGNoe3JldHVybiBfKFIpfX0oSC5zcGxpdCgiLiIpW2pdKSl9Y2F0Y2goUCl7dGhyb3cgbmV3IE4oIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK1AubWVzc2FnZSl9fX0sMTY1ODooY2UsSixiKT0+e3ZhciBwPS9bXFxeJC4qKz8oKVtcXXt9'@;
put 'fF0vZyxOPVJlZ0V4cChwLnNvdXJjZSksRj0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEg9Im9iamVjdCI9PXR5cGVvZiBiLmcmJmIuZyYmYi5nLk9iamVjdD09PU9iamVjdCYmYi5nfHxGfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgp'@;
put 'LGo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxQPUguU3ltYm9sLEw9UD9QLnByb3RvdHlwZTp2b2lkIDAsWT1MP0wudG9TdHJpbmc6dm9pZCAwO2NlLmV4cG9ydHM9ZnVuY3Rpb24gUShxKXtyZXR1cm4ocT1mdW5jdGlvbiBYKHEpe3JldHVybiBudWxsPT1xPyIiOmZ1bmN0aW9uIEIocSl7'@;
put 'aWYoInN0cmluZyI9PXR5cGVvZiBxKXJldHVybiBxO2lmKGZ1bmN0aW9uIFoocSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxfHxmdW5jdGlvbiBXKHEpe3JldHVybiEhcSYmIm9iamVjdCI9PXR5cGVvZiBxfShxKSYmIltvYmplY3QgU3ltYm9sXSI9PWouY2FsbChxKX0ocSkpcmV0dXJuIFk/'@;
put 'WS5jYWxsKHEpOiIiO3ZhciB0ZT1xKyIiO3JldHVybiIwIj09dGUmJjEvcT09LTEvMD8iLTAiOnRlfShxKX0ocSkpJiZOLnRlc3QocSk/cS5yZXBsYWNlKHAsIlxcJCYiKTpxfX0sODA5NDpjZT0+e3ZhciBEPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Y2UuZXhwb3J0cz1mdW5jdGlvbiBf'@;
put 'KE4pe3JldHVybiEwPT09Tnx8ITE9PT1OfHxmdW5jdGlvbiBwKE4pe3JldHVybiEhTiYmIm9iamVjdCI9PXR5cGVvZiBOfShOKSYmIltvYmplY3QgQm9vbGVhbl0iPT1ELmNhbGwoTil9fSwyMzA3OihjZSxKLGIpPT57Y2U9Yi5ubWQoY2UpO3ZhciBfPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5l'@;
put 'ZF9fIixwPTEsTj0yLHc9OTAwNzE5OTI1NDc0MDk5MSxGPSJbb2JqZWN0IEFyZ3VtZW50c10iLEg9IltvYmplY3QgQXJyYXldIixSPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixqPSJbb2JqZWN0IEJvb2xlYW5dIixQPSJbb2JqZWN0IERhdGVdIixMPSJbb2JqZWN0IEVycm9yXSIsWT0iW29i'@;
put 'amVjdCBGdW5jdGlvbl0iLEI9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixXPSJbb2JqZWN0IE1hcF0iLFo9IltvYmplY3QgTnVtYmVyXSIsWD0iW29iamVjdCBOdWxsXSIsUT0iW29iamVjdCBPYmplY3RdIixxPSJbb2JqZWN0IFByb21pc2VdIix0ZT0iW29iamVjdCBQcm94eV0iLGll'@;
put 'PSJbb2JqZWN0IFJlZ0V4cF0iLHNlPSJbb2JqZWN0IFNldF0iLGdlPSJbb2JqZWN0IFN0cmluZ10iLFRlPSJbb2JqZWN0IFVuZGVmaW5lZF0iLFNlPSJbb2JqZWN0IFdlYWtNYXBdIix6ZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLHo9IltvYmplY3QgRGF0YVZpZXddIixhZT0vXlxbb2JqZWN0'@;
put 'IC4rP0NvbnN0cnVjdG9yXF0kLyxuZT0vXig/OjB8WzEtOV1cZCopJC8sbGU9e307bGVbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPWxlWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1sZVsiW29iamVjdCBJbnQ4QXJyYXldIl09bGVbIltvYmplY3QgSW50MTZBcnJheV0iXT1sZVsiW29iamVj'@;
put 'dCBJbnQzMkFycmF5XSJdPWxlWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09bGVbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09bGVbIltvYmplY3QgVWludDE2QXJyYXldIl09bGVbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsbGVbRl09bGVbSF09bGVbemVdPWxlW2pdPWxlW3pdPWxl'@;
put 'W1BdPWxlW0xdPWxlW1ldPWxlW1ddPWxlW1pdPWxlW1FdPWxlW2llXT1sZVtzZV09bGVbZ2VdPWxlW1NlXT0hMTt2YXIgd2U9Im9iamVjdCI9PXR5cGVvZiBiLmcmJmIuZyYmYi5nLk9iamVjdD09PU9iamVjdCYmYi5nLFplPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmpl'@;
put 'Y3Q9PT1PYmplY3QmJnNlbGYsUWU9d2V8fFplfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGF0PUomJiFKLm5vZGVUeXBlJiZKLHhlPWF0JiZjZSYmIWNlLm5vZGVUeXBlJiZjZSx2ZT14ZSYmeGUuZXhwb3J0cz09PWF0LHFlPXZlJiZ3ZS5wcm9jZXNzLGplPWZ1bmN0aW9uKCl7dHJ5e3Jl'@;
put 'dHVybiBxZSYmcWUuYmluZGluZyYmcWUuYmluZGluZygidXRpbCIpfWNhdGNoe319KCksQWU9amUmJmplLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBJZShBbixybil7Zm9yKHZhciBtaT0tMSxBcj1udWxsPT1Bbj8wOkFuLmxlbmd0aDsrK21pPEFyOylpZihybihBblttaV0sbWksQW4pKXJldHVy'@;
put 'biEwO3JldHVybiExfWZ1bmN0aW9uIGtlKEFuLHJuKXtyZXR1cm4gQW4uaGFzKHJuKX1mdW5jdGlvbiBudChBbil7dmFyIHJuPS0xLG1pPUFycmF5KEFuLnNpemUpO3JldHVybiBBbi5mb3JFYWNoKGZ1bmN0aW9uKEFyLEZzKXttaVsrK3JuXT1bRnMsQXJdfSksbWl9ZnVuY3Rpb24gb24oQW4p'@;
put 'e3ZhciBybj0tMSxtaT1BcnJheShBbi5zaXplKTtyZXR1cm4gQW4uZm9yRWFjaChmdW5jdGlvbihBcil7bWlbKytybl09QXJ9KSxtaX12YXIgQW4seXQ9QXJyYXkucHJvdG90eXBlLEl0PU9iamVjdC5wcm90b3R5cGUscnQ9UWVbIl9fY29yZS1qc19zaGFyZWRfXyJdLEtlPUZ1bmN0aW9uLnBy'@;
put 'b3RvdHlwZS50b1N0cmluZyx0dD1JdC5oYXNPd25Qcm9wZXJ0eSxOZT0oQW49L1teLl0rJC8uZXhlYyhydCYmcnQua2V5cyYmcnQua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0FuOiIiLHV0PUl0LnRvU3RyaW5nLEp0PVJlZ0V4cCgiXiIrS2UuY2FsbCh0dCkucmVwbGFj'@;
put 'ZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksTHQ9dmU/UWUuQnVmZmVyOnZvaWQgMCxQdD1RZS5TeW1ib2wsb2k9UWUuVWludDhBcnJheSxl'@;
put 'bj1JdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxzbj15dC5zcGxpY2UsSWk9UHQ/UHQudG9TdHJpbmdUYWc6dm9pZCAwLGRuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZnQ9THQ/THQuaXNCdWZmZXI6dm9pZCAwLEZyPWZ1bmN0aW9uIEplKEFuLHJuKXtyZXR1cm4gZnVuY3Rpb24obWkp'@;
put 'e3JldHVybiBBbihybihtaSkpfX0oT2JqZWN0LmtleXMsT2JqZWN0KSxadD0kaChRZSwiRGF0YVZpZXciKSxrdD0kaChRZSwiTWFwIiksTG49JGgoUWUsIlByb21pc2UiKSxvdD0kaChRZSwiU2V0IiksenQ9JGgoUWUsIldlYWtNYXAiKSxuaT0kaChPYmplY3QsImNyZWF0ZSIpLFdlPUlsKFp0'@;
put 'KSxBdD1JbChrdCksaXI9SWwoTG4pLGh0PUlsKG90KSxFdD1JbCh6dCksem49UHQ/UHQucHJvdG90eXBlOnZvaWQgMCxhbj16bj96bi52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBqdChBbil7dmFyIHJuPS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kytybjxt'@;
put 'aTspe3ZhciBBcj1Bbltybl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiB0bihBbil7dmFyIHJuPS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytybjxtaTspe3ZhciBBcj1Bbltybl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBK'@;
put 'cihBbil7dmFyIHJuPS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytybjxtaTspe3ZhciBBcj1Bbltybl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBZaShBbil7dmFyIHJuPS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLl9f'@;
put 'ZGF0YV9fPW5ldyBKcjsrK3JuPG1pOyl0aGlzLmFkZChBbltybl0pfWZ1bmN0aW9uIG9hKEFuKXt2YXIgcm49dGhpcy5fX2RhdGFfXz1uZXcgdG4oQW4pO3RoaXMuc2l6ZT1ybi5zaXplfWZ1bmN0aW9uIG1sKEFuLHJuKXtmb3IodmFyIG1pPUFuLmxlbmd0aDttaS0tOylpZihnZihBblttaV1b'@;
put 'MF0scm4pKXJldHVybiBtaTtyZXR1cm4tMX1mdW5jdGlvbiBJYyhBbil7cmV0dXJuIG51bGw9PUFuP3ZvaWQgMD09PUFuP1RlOlg6SWkmJklpIGluIE9iamVjdChBbik/ZnVuY3Rpb24gcGYoQW4pe3ZhciBybj10dC5jYWxsKEFuLElpKSxtaT1BbltJaV07dHJ5e0FuW0lpXT12b2lkIDA7dmFy'@;
put 'IEFyPSEwfWNhdGNoe312YXIgRnM9dXQuY2FsbChBbik7cmV0dXJuIEFyJiYocm4/QW5bSWldPW1pOmRlbGV0ZSBBbltJaV0pLEZzfShBbik6ZnVuY3Rpb24gZTUoQW4pe3JldHVybiB1dC5jYWxsKEFuKX0oQW4pfWZ1bmN0aW9uIEEwKEFuKXtyZXR1cm4gQmEoQW4pJiZJYyhBbik9PUZ9ZnVu'@;
put 'Y3Rpb24gb3IoQW4scm4sbWksQXIsRnMpe3JldHVybiBBbj09PXJufHwobnVsbD09QW58fG51bGw9PXJufHwhQmEoQW4pJiYhQmEocm4pP0FuIT1BbiYmcm4hPXJuOmZ1bmN0aW9uIFRhKEFuLHJuLG1pLEFyLEZzLFFhKXt2YXIgcmw9bWYoQW4pLHpzPW1mKHJuKSxObz1ybD9IOkdpKEFuKSxD'@;
put 'bz16cz9IOkdpKHJuKSxObD0oTm89Tm89PUY/UTpObyk9PVEsTnM9KENvPUNvPT1GP1E6Q28pPT1RLElzPU5vPT1DbztpZihJcyYmdmYoQW4pKXtpZighdmYocm4pKXJldHVybiExO3JsPSEwLE5sPSExfWlmKElzJiYhTmwpcmV0dXJuIFFhfHwoUWE9bmV3IG9hKSxybHx8STMoQW4pP2cwKEFu'@;
put 'LHJuLG1pLEFyLEZzLFFhKTpmdW5jdGlvbiBWYShBbixybixtaSxBcixGcyxRYSxybCl7c3dpdGNoKG1pKXtjYXNlIHo6aWYoQW4uYnl0ZUxlbmd0aCE9cm4uYnl0ZUxlbmd0aHx8QW4uYnl0ZU9mZnNldCE9cm4uYnl0ZU9mZnNldClyZXR1cm4hMTtBbj1Bbi5idWZmZXIscm49cm4uYnVmZmVy'@;
put 'O2Nhc2UgemU6cmV0dXJuIShBbi5ieXRlTGVuZ3RoIT1ybi5ieXRlTGVuZ3RofHwhUWEobmV3IG9pKEFuKSxuZXcgb2kocm4pKSk7Y2FzZSBqOmNhc2UgUDpjYXNlIFo6cmV0dXJuIGdmKCtBbiwrcm4pO2Nhc2UgTDpyZXR1cm4gQW4ubmFtZT09cm4ubmFtZSYmQW4ubWVzc2FnZT09cm4ubWVz'@;
put 'c2FnZTtjYXNlIGllOmNhc2UgZ2U6cmV0dXJuIEFuPT1ybisiIjtjYXNlIFc6dmFyIHpzPW50O2Nhc2Ugc2U6aWYoenN8fCh6cz1vbiksQW4uc2l6ZSE9cm4uc2l6ZSYmIShBciZwKSlyZXR1cm4hMTt2YXIgQ289cmwuZ2V0KEFuKTtpZihDbylyZXR1cm4gQ289PXJuO0FyfD1OLHJsLnNldChB'@;
put 'bixybik7dmFyIE5sPWcwKHpzKEFuKSx6cyhybiksQXIsRnMsUWEscmwpO3JldHVybiBybC5kZWxldGUoQW4pLE5sO2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZihhbilyZXR1cm4gYW4uY2FsbChBbik9PWFuLmNhbGwocm4pfXJldHVybiExfShBbixybixObyxtaSxBcixGcyxRYSk7aWYoISht'@;
put 'aSZwKSl7dmFyIFN0PU5sJiZ0dC5jYWxsKEFuLCJfX3dyYXBwZWRfXyIpLFZ0PU5zJiZ0dC5jYWxsKHJuLCJfX3dyYXBwZWRfXyIpO2lmKFN0fHxWdCl7dmFyIHluPVN0P0FuLnZhbHVlKCk6QW4sZ249VnQ/cm4udmFsdWUoKTpybjtyZXR1cm4gUWF8fChRYT1uZXcgb2EpLEZzKHluLGduLG1p'@;
put 'LEFyLFFhKX19cmV0dXJuISFJcyYmKFFhfHwoUWE9bmV3IG9hKSxmdW5jdGlvbiBEdShBbixybixtaSxBcixGcyxRYSl7dmFyIHJsPW1pJnAsenM9SHIoQW4pLE5vPXpzLmxlbmd0aDtpZihObyE9SHIocm4pLmxlbmd0aCYmIXJsKXJldHVybiExO2Zvcih2YXIgTnM9Tm87TnMtLTspe3ZhciBJ'@;
put 'cz16c1tOc107aWYoIShybD9JcyBpbiBybjp0dC5jYWxsKHJuLElzKSkpcmV0dXJuITF9dmFyIFN0PVFhLmdldChBbik7aWYoU3QmJlFhLmdldChybikpcmV0dXJuIFN0PT1ybjt2YXIgVnQ9ITA7UWEuc2V0KEFuLHJuKSxRYS5zZXQocm4sQW4pO2Zvcih2YXIgeW49cmw7KytOczxObzspe3Zh'@;
put 'ciBnbj1BbltJcz16c1tOc11dLFJuPXJuW0lzXTtpZihBcil2YXIgdm49cmw/QXIoUm4sZ24sSXMscm4sQW4sUWEpOkFyKGduLFJuLElzLEFuLHJuLFFhKTtpZighKHZvaWQgMD09PXZuP2duPT09Um58fEZzKGduLFJuLG1pLEFyLFFhKTp2bikpe1Z0PSExO2JyZWFrfXlufHwoeW49ImNvbnN0'@;
put 'cnVjdG9yIj09SXMpfWlmKFZ0JiYheW4pe3ZhciBkcj1Bbi5jb25zdHJ1Y3Rvcix2aT1ybi5jb25zdHJ1Y3RvcjtkciE9dmkmJiJjb25zdHJ1Y3RvciJpbiBBbiYmImNvbnN0cnVjdG9yImluIHJuJiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBkciYmZHIgaW5zdGFuY2VvZiBkciYmImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIHZpJiZ2aSBpbnN0YW5jZW9mIHZpKSYmKFZ0PSExKX1yZXR1cm4gUWEuZGVsZXRlKEFuKSxRYS5kZWxldGUocm4pLFZ0fShBbixybixtaSxBcixGcyxRYSkpfShBbixybixtaSxBcixvcixGcykpfWZ1bmN0aW9uIGcwKEFuLHJuLG1pLEFyLEZzLFFhKXt2YXIgcmw9bWkmcCx6'@;
put 'cz1Bbi5sZW5ndGgsTm89cm4ubGVuZ3RoO2lmKHpzIT1ObyYmIShybCYmTm8+enMpKXJldHVybiExO3ZhciBDbz1RYS5nZXQoQW4pO2lmKENvJiZRYS5nZXQocm4pKXJldHVybiBDbz09cm47dmFyIE5sPS0xLE5zPSEwLElzPW1pJk4/bmV3IFlpOnZvaWQgMDtmb3IoUWEuc2V0KEFuLHJuKSxR'@;
put 'YS5zZXQocm4sQW4pOysrTmw8enM7KXt2YXIgU3Q9QW5bTmxdLFZ0PXJuW05sXTtpZihBcil2YXIgeW49cmw/QXIoVnQsU3QsTmwscm4sQW4sUWEpOkFyKFN0LFZ0LE5sLEFuLHJuLFFhKTtpZih2b2lkIDAhPT15bil7aWYoeW4pY29udGludWU7TnM9ITE7YnJlYWt9aWYoSXMpe2lmKCFJZShy'@;
put 'bixmdW5jdGlvbihnbixSbil7aWYoIWtlKElzLFJuKSYmKFN0PT09Z258fEZzKFN0LGduLG1pLEFyLFFhKSkpcmV0dXJuIElzLnB1c2goUm4pfSkpe05zPSExO2JyZWFrfX1lbHNlIGlmKFN0IT09VnQmJiFGcyhTdCxWdCxtaSxBcixRYSkpe05zPSExO2JyZWFrfX1yZXR1cm4gUWEuZGVsZXRl'@;
put 'KEFuKSxRYS5kZWxldGUocm4pLE5zfWZ1bmN0aW9uIEhyKEFuKXtyZXR1cm4gZnVuY3Rpb24gdXUoQW4scm4sbWkpe3ZhciBBcj1ybihBbik7cmV0dXJuIG1mKEFuKT9BcjpmdW5jdGlvbiBSZShBbixybil7Zm9yKHZhciBtaT0tMSxBcj1ybi5sZW5ndGgsRnM9QW4ubGVuZ3RoOysrbWk8QXI7'@;
put 'KUFuW0ZzK21pXT1yblttaV07cmV0dXJuIEFufShBcixtaShBbikpfShBbixYaCx3byl9ZnVuY3Rpb24gbGQoQW4scm4pe3ZhciBtaT1Bbi5fX2RhdGFfXztyZXR1cm4gZnVuY3Rpb24gWGMoQW4pe3ZhciBybj10eXBlb2YgQW47cmV0dXJuInN0cmluZyI9PXJufHwibnVtYmVyIj09cm58fCJz'@;
put 'eW1ib2wiPT1ybnx8ImJvb2xlYW4iPT1ybj8iX19wcm90b19fIiE9PUFuOm51bGw9PT1Bbn0ocm4pP21pWyJzdHJpbmciPT10eXBlb2Ygcm4/InN0cmluZyI6Imhhc2giXTptaS5tYXB9ZnVuY3Rpb24gJGgoQW4scm4pe3ZhciBtaT1mdW5jdGlvbiBfdChBbixybil7cmV0dXJuIEFuPy5bcm5d'@;
put 'fShBbixybik7cmV0dXJuIGZ1bmN0aW9uIGxpKEFuKXtyZXR1cm4hKCFSYyhBbil8fGZ1bmN0aW9uIFFnKEFuKXtyZXR1cm4hIU5lJiZOZSBpbiBBbn0oQW4pKSYmKHlmKEFuKT9KdDphZSkudGVzdChJbChBbikpfShtaSk/bWk6dm9pZCAwfWp0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBk'@;
put 'aSgpe3RoaXMuX19kYXRhX189bmk/bmkobnVsbCk6e30sdGhpcy5zaXplPTB9LGp0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gY24oQW4pe3ZhciBybj10aGlzLmhhcyhBbikmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW0FuXTtyZXR1cm4gdGhpcy5zaXplLT1ybj8xOjAscm59LGp0LnByb3Rv'@;
put 'dHlwZS5nZXQ9ZnVuY3Rpb24gZm4oQW4pe3ZhciBybj10aGlzLl9fZGF0YV9fO2lmKG5pKXt2YXIgbWk9cm5bQW5dO3JldHVybiBtaT09PV8/dm9pZCAwOm1pfXJldHVybiB0dC5jYWxsKHJuLEFuKT9ybltBbl06dm9pZCAwfSxqdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIERpKEFuKXt2YXIg'@;
put 'cm49dGhpcy5fX2RhdGFfXztyZXR1cm4gbmk/dm9pZCAwIT09cm5bQW5dOnR0LmNhbGwocm4sQW4pfSxqdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFF0KEFuLHJuKXt2YXIgbWk9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhBbik/MDoxLG1pW0FuXT1uaSYmdm9p'@;
put 'ZCAwPT09cm4/Xzpybix0aGlzfSx0bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gY2EoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSx0bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIHhpKEFuKXt2YXIgcm49dGhpcy5fX2RhdGFfXyxtaT1tbChybixBbik7cmV0dXJuIShtaTww'@;
put 'fHwobWk9PXJuLmxlbmd0aC0xP3JuLnBvcCgpOnNuLmNhbGwocm4sbWksMSksLS10aGlzLnNpemUsMCkpfSx0bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHlyKEFuKXt2YXIgcm49dGhpcy5fX2RhdGFfXyxtaT1tbChybixBbik7cmV0dXJuIG1pPDA/dm9pZCAwOnJuW21pXVsxXX0sdG4ucHJv'@;
put 'dG90eXBlLmhhcz1mdW5jdGlvbiBHbihBbil7cmV0dXJuIG1sKHRoaXMuX19kYXRhX18sQW4pPi0xfSx0bi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIEtpKEFuLHJuKXt2YXIgbWk9dGhpcy5fX2RhdGFfXyxBcj1tbChtaSxBbik7cmV0dXJuIEFyPDA/KCsrdGhpcy5zaXplLG1pLnB1c2goW0Fu'@;
put 'LHJuXSkpOm1pW0FyXVsxXT1ybix0aGlzfSxKci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gUXIoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBqdCxtYXA6bmV3KGt0fHx0biksc3RyaW5nOm5ldyBqdH19LEpyLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gTmkoQW4p'@;
put 'e3ZhciBybj1sZCh0aGlzLEFuKS5kZWxldGUoQW4pO3JldHVybiB0aGlzLnNpemUtPXJuPzE6MCxybn0sSnIucHJvdG90eXBlLmdldD1mdW5jdGlvbiBIaShBbil7cmV0dXJuIGxkKHRoaXMsQW4pLmdldChBbil9LEpyLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSWEoQW4pe3JldHVybiBsZCh0'@;
put 'aGlzLEFuKS5oYXMoQW4pfSxKci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFByKEFuLHJuKXt2YXIgbWk9bGQodGhpcyxBbiksQXI9bWkuc2l6ZTtyZXR1cm4gbWkuc2V0KEFuLHJuKSx0aGlzLnNpemUrPW1pLnNpemU9PUFyPzA6MSx0aGlzfSxZaS5wcm90b3R5cGUuYWRkPVlpLnByb3RvdHlw'@;
put 'ZS5wdXNoPWZ1bmN0aW9uIGZhKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoQW4sXyksdGhpc30sWWkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBucihBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKEFuKX0sb2EucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIF9hKCl7dGhpcy5fX2Rh'@;
put 'dGFfXz1uZXcgdG4sdGhpcy5zaXplPTB9LG9hLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gT2EoQW4pe3ZhciBybj10aGlzLl9fZGF0YV9fLG1pPXJuLmRlbGV0ZShBbik7cmV0dXJuIHRoaXMuc2l6ZT1ybi5zaXplLG1pfSxvYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIE5hKEFuKXtyZXR1'@;
put 'cm4gdGhpcy5fX2RhdGFfXy5nZXQoQW4pfSxvYS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGVpKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoQW4pfSxvYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGZzKEFuLHJuKXt2YXIgbWk9dGhpcy5fX2RhdGFfXztpZihtaSBpbnN0YW5jZW9mIHRu'@;
put 'KXt2YXIgQXI9bWkuX19kYXRhX187aWYoIWt0fHxBci5sZW5ndGg8MTk5KXJldHVybiBBci5wdXNoKFtBbixybl0pLHRoaXMuc2l6ZT0rK21pLnNpemUsdGhpczttaT10aGlzLl9fZGF0YV9fPW5ldyBKcihBcil9cmV0dXJuIG1pLnNldChBbixybiksdGhpcy5zaXplPW1pLnNpemUsdGhpc307'@;
put 'dmFyIHdvPWRuP2Z1bmN0aW9uKEFuKXtyZXR1cm4gbnVsbD09QW4/W106KEFuPU9iamVjdChBbiksZnVuY3Rpb24gRmUoQW4scm4pe2Zvcih2YXIgbWk9LTEsQXI9bnVsbD09QW4/MDpBbi5sZW5ndGgsRnM9MCxRYT1bXTsrK21pPEFyOyl7dmFyIHJsPUFuW21pXTtybihybCxtaSxBbikmJihR'@;
put 'YVtGcysrXT1ybCl9cmV0dXJuIFFhfShkbihBbiksZnVuY3Rpb24ocm4pe3JldHVybiBlbi5jYWxsKEFuLHJuKX0pKX06ZnVuY3Rpb24gcWgoKXtyZXR1cm5bXX0sR2k9SWM7ZnVuY3Rpb24gdmwoQW4scm4pe3JldHVybiEhKHJuPXJuPz93KSYmKCJudW1iZXIiPT10eXBlb2YgQW58fG5lLnRl'@;
put 'c3QoQW4pKSYmQW4+LTEmJkFuJTE9PTAmJkFuPHJufWZ1bmN0aW9uIElsKEFuKXtpZihudWxsIT1Bbil7dHJ5e3JldHVybiBLZS5jYWxsKEFuKX1jYXRjaHt9dHJ5e3JldHVybiBBbisiIn1jYXRjaHt9fXJldHVybiIifWZ1bmN0aW9uIGdmKEFuLHJuKXtyZXR1cm4gQW49PT1ybnx8QW4hPUFu'@;
put 'JiZybiE9cm59KFp0JiZHaShuZXcgWnQobmV3IEFycmF5QnVmZmVyKDEpKSkhPXp8fGt0JiZHaShuZXcga3QpIT1XfHxMbiYmR2koTG4ucmVzb2x2ZSgpKSE9cXx8b3QmJkdpKG5ldyBvdCkhPXNlfHx6dCYmR2kobmV3IHp0KSE9U2UpJiYoR2k9ZnVuY3Rpb24oQW4pe3ZhciBybj1JYyhBbiks'@;
put 'bWk9cm49PVE/QW4uY29uc3RydWN0b3I6dm9pZCAwLEFyPW1pP0lsKG1pKToiIjtpZihBcilzd2l0Y2goQXIpe2Nhc2UgV2U6cmV0dXJuIHo7Y2FzZSBBdDpyZXR1cm4gVztjYXNlIGlyOnJldHVybiBxO2Nhc2UgaHQ6cmV0dXJuIHNlO2Nhc2UgRXQ6cmV0dXJuIFNlfXJldHVybiBybn0pO3Zh'@;
put 'ciBjZD1BMChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0EwOmZ1bmN0aW9uKEFuKXtyZXR1cm4gQmEoQW4pJiZ0dC5jYWxsKEFuLCJjYWxsZWUiKSYmIWVuLmNhbGwoQW4sImNhbGxlZSIpfSxtZj1BcnJheS5pc0FycmF5LHZmPWZ0fHxmdW5jdGlvbiBKaCgpe3JldHVybiExfTtm'@;
put 'dW5jdGlvbiB5ZihBbil7aWYoIVJjKEFuKSlyZXR1cm4hMTt2YXIgcm49SWMoQW4pO3JldHVybiBybj09WXx8cm49PUJ8fHJuPT1SfHxybj09dGV9ZnVuY3Rpb24gS2goQW4pe3JldHVybiJudW1iZXIiPT10eXBlb2YgQW4mJkFuPi0xJiZBbiUxPT0wJiZBbjw9d31mdW5jdGlvbiBSYyhBbil7'@;
put 'dmFyIHJuPXR5cGVvZiBBbjtyZXR1cm4gbnVsbCE9QW4mJigib2JqZWN0Ij09cm58fCJmdW5jdGlvbiI9PXJuKX1mdW5jdGlvbiBCYShBbil7cmV0dXJuIG51bGwhPUFuJiYib2JqZWN0Ij09dHlwZW9mIEFufXZhciBJMz1BZT9mdW5jdGlvbiBEZShBbil7cmV0dXJuIGZ1bmN0aW9uKHJuKXty'@;
put 'ZXR1cm4gQW4ocm4pfX0oQWUpOmZ1bmN0aW9uIE50KEFuKXtyZXR1cm4gQmEoQW4pJiZLaChBbi5sZW5ndGgpJiYhIWxlW0ljKEFuKV19O2Z1bmN0aW9uIFhoKEFuKXtyZXR1cm4gZnVuY3Rpb24gRDEoQW4pe3JldHVybiBudWxsIT1BbiYmS2goQW4ubGVuZ3RoKSYmIXlmKEFuKX0oQW4pP2Z1'@;
put 'bmN0aW9uIEhvKEFuLHJuKXt2YXIgbWk9bWYoQW4pLEFyPSFtaSYmY2QoQW4pLEZzPSFtaSYmIUFyJiZ2ZihBbiksUWE9IW1pJiYhQXImJiFGcyYmSTMoQW4pLHJsPW1pfHxBcnx8RnN8fFFhLHpzPXJsP2Z1bmN0aW9uIEhlKEFuLHJuKXtmb3IodmFyIG1pPS0xLEFyPUFycmF5KEFuKTsrK21p'@;
put 'PEFuOylBclttaV09cm4obWkpO3JldHVybiBBcn0oQW4ubGVuZ3RoLFN0cmluZyk6W10sTm89enMubGVuZ3RoO2Zvcih2YXIgQ28gaW4gQW4pKHJufHx0dC5jYWxsKEFuLENvKSkmJighcmx8fCEoImxlbmd0aCI9PUNvfHxGcyYmKCJvZmZzZXQiPT1Db3x8InBhcmVudCI9PUNvKXx8UWEmJigi'@;
put 'YnVmZmVyIj09Q298fCJieXRlTGVuZ3RoIj09Q298fCJieXRlT2Zmc2V0Ij09Q28pfHx2bChDbyxObykpKSYmenMucHVzaChDbyk7cmV0dXJuIHpzfShBbik6ZnVuY3Rpb24gWHIoQW4pe2lmKCFmdW5jdGlvbiBtMChBbil7dmFyIHJuPUFuJiZBbi5jb25zdHJ1Y3RvcjtyZXR1cm4gQW49PT0o'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIHJuJiZybi5wcm90b3R5cGV8fEl0KX0oQW4pKXJldHVybiBGcihBbik7dmFyIHJuPVtdO2Zvcih2YXIgbWkgaW4gT2JqZWN0KEFuKSl0dC5jYWxsKEFuLG1pKSYmImNvbnN0cnVjdG9yIiE9bWkmJnJuLnB1c2gobWkpO3JldHVybiBybn0oQW4pfWNlLmV4cG9y'@;
put 'dHM9ZnVuY3Rpb24gZWgoQW4scm4pe3JldHVybiBvcihBbixybil9fSw4NDIzOihjZSxKLGIpPT57dmFyIFI9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixqPSJvYmplY3QiPT10eXBlb2YgYi5nJiZiLmcmJmIuZy5PYmplY3Q9PT1PYmpl'@;
put 'Y3QmJmIuZ3x8Unx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxQPU9iamVjdC5wcm90b3R5cGUsTD1QLmhhc093blByb3BlcnR5LFk9UC50b1N0cmluZyxCPWouU3ltYm9sLFc9Qj9CLnRvU3RyaW5nVGFnOnZvaWQgMDtjZS5leHBvcnRzPWZ1bmN0aW9uIHEoaWUpe2lmKCFmdW5jdGlvbiB0'@;
put 'ZShpZSl7dmFyIHNlPXR5cGVvZiBpZTtyZXR1cm4gbnVsbCE9aWUmJigib2JqZWN0Ij09c2V8fCJmdW5jdGlvbiI9PXNlKX0oaWUpKXJldHVybiExO3ZhciBzZT1mdW5jdGlvbiBaKGllKXtyZXR1cm4gbnVsbD09aWU/dm9pZCAwPT09aWU/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3Qg'@;
put 'TnVsbF0iOlcmJlcgaW4gT2JqZWN0KGllKT9mdW5jdGlvbiBYKGllKXt2YXIgc2U9TC5jYWxsKGllLFcpLGdlPWllW1ddO3RyeXtpZVtXXT12b2lkIDA7dmFyIF9lPSEwfWNhdGNoe312YXIgVGU9WS5jYWxsKGllKTtyZXR1cm4gX2UmJihzZT9pZVtXXT1nZTpkZWxldGUgaWVbV10pLFRlfShp'@;
put 'ZSk6ZnVuY3Rpb24gUShpZSl7cmV0dXJuIFkuY2FsbChpZSl9KGllKX0oaWUpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PXNlfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1zZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1zZXx8IltvYmplY3QgUHJveHldIj09c2V9fSw5'@;
put 'NzIyOmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbiBKKGIpe3JldHVybiBudWxsPT1ifX0sOTczODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGguYWJzfSw2MzI5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5mbG9vcn0sMzY3ODpjZT0+eyJ1c2Ugc3RyaWN0Ijtj'@;
put 'ZS5leHBvcnRzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oYil7cmV0dXJuIGIhPWJ9fSwyMjY0OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5tYXh9LDU3MzA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLm1pbn0sNzA3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4'@;
put 'cG9ydHM9TWF0aC5wb3d9LDM4NjI6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLnJvdW5kfSw5NTUwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzY3OCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtyZXR1cm4gRChwKXx8MD09PXA/cDpwPDA/LTE6MX19LDIzMTg6'@;
put 'KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1NzE3KSxfPWIoMzM0OSkscD1iKDk1MDkpLkJ1ZmZlcixOPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gdygpe18uY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEw'@;
put 'Mix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBGKEwsWSl7cmV0dXJuIEw8PFl8TD4+PjMyLVl9ZnVuY3Rpb24gSChMLFksQixXLFosWCxRKXtyZXR1cm4gRihMKyhZJkJ8flkmVykrWitYfDAsUSkrWXwwfWZ1bmN0aW9uIFIoTCxZLEIsVyxaLFgsUSl7cmV0dXJuIEYoTCsoWSZXfEImflcp'@;
put 'K1orWHwwLFEpK1l8MH1mdW5jdGlvbiBqKEwsWSxCLFcsWixYLFEpe3JldHVybiBGKEwrKFleQl5XKStaK1h8MCxRKStZfDB9ZnVuY3Rpb24gUChMLFksQixXLFosWCxRKXtyZXR1cm4gRihMKyhCXihZfH5XKSkrWitYfDAsUSkrWXwwfUQodyxfKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0'@;
put 'aW9uKCl7Zm9yKHZhciBMPU4sWT0wO1k8MTY7KytZKUxbWV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpZKTt2YXIgQj10aGlzLl9hLFc9dGhpcy5fYixaPXRoaXMuX2MsWD10aGlzLl9kO0I9SChCLFcsWixYLExbMF0sMzYxNDA5MDM2MCw3KSxYPUgoWCxCLFcsWixMWzFdLDM5MDU0MDI3'@;
put 'MTAsMTIpLFo9SChaLFgsQixXLExbMl0sNjA2MTA1ODE5LDE3KSxXPUgoVyxaLFgsQixMWzNdLDMyNTA0NDE5NjYsMjIpLEI9SChCLFcsWixYLExbNF0sNDExODU0ODM5OSw3KSxYPUgoWCxCLFcsWixMWzVdLDEyMDAwODA0MjYsMTIpLFo9SChaLFgsQixXLExbNl0sMjgyMTczNTk1NSwxNyks'@;
put 'Vz1IKFcsWixYLEIsTFs3XSw0MjQ5MjYxMzEzLDIyKSxCPUgoQixXLFosWCxMWzhdLDE3NzAwMzU0MTYsNyksWD1IKFgsQixXLFosTFs5XSwyMzM2NTUyODc5LDEyKSxaPUgoWixYLEIsVyxMWzEwXSw0Mjk0OTI1MjMzLDE3KSxXPUgoVyxaLFgsQixMWzExXSwyMzA0NTYzMTM0LDIyKSxCPUgo'@;
put 'QixXLFosWCxMWzEyXSwxODA0NjAzNjgyLDcpLFg9SChYLEIsVyxaLExbMTNdLDQyNTQ2MjYxOTUsMTIpLFo9SChaLFgsQixXLExbMTRdLDI3OTI5NjUwMDYsMTcpLEI9UihCLFc9SChXLFosWCxCLExbMTVdLDEyMzY1MzUzMjksMjIpLFosWCxMWzFdLDQxMjkxNzA3ODYsNSksWD1SKFgsQixX'@;
put 'LFosTFs2XSwzMjI1NDY1NjY0LDkpLFo9UihaLFgsQixXLExbMTFdLDY0MzcxNzcxMywxNCksVz1SKFcsWixYLEIsTFswXSwzOTIxMDY5OTk0LDIwKSxCPVIoQixXLFosWCxMWzVdLDM1OTM0MDg2MDUsNSksWD1SKFgsQixXLFosTFsxMF0sMzgwMTYwODMsOSksWj1SKFosWCxCLFcsTFsxNV0s'@;
put 'MzYzNDQ4ODk2MSwxNCksVz1SKFcsWixYLEIsTFs0XSwzODg5NDI5NDQ4LDIwKSxCPVIoQixXLFosWCxMWzldLDU2ODQ0NjQzOCw1KSxYPVIoWCxCLFcsWixMWzE0XSwzMjc1MTYzNjA2LDkpLFo9UihaLFgsQixXLExbM10sNDEwNzYwMzMzNSwxNCksVz1SKFcsWixYLEIsTFs4XSwxMTYzNTMx'@;
put 'NTAxLDIwKSxCPVIoQixXLFosWCxMWzEzXSwyODUwMjg1ODI5LDUpLFg9UihYLEIsVyxaLExbMl0sNDI0MzU2MzUxMiw5KSxaPVIoWixYLEIsVyxMWzddLDE3MzUzMjg0NzMsMTQpLEI9aihCLFc9UihXLFosWCxCLExbMTJdLDIzNjgzNTk1NjIsMjApLFosWCxMWzVdLDQyOTQ1ODg3MzgsNCks'@;
put 'WD1qKFgsQixXLFosTFs4XSwyMjcyMzkyODMzLDExKSxaPWooWixYLEIsVyxMWzExXSwxODM5MDMwNTYyLDE2KSxXPWooVyxaLFgsQixMWzE0XSw0MjU5NjU3NzQwLDIzKSxCPWooQixXLFosWCxMWzFdLDI3NjM5NzUyMzYsNCksWD1qKFgsQixXLFosTFs0XSwxMjcyODkzMzUzLDExKSxaPWoo'@;
put 'WixYLEIsVyxMWzddLDQxMzk0Njk2NjQsMTYpLFc9aihXLFosWCxCLExbMTBdLDMyMDAyMzY2NTYsMjMpLEI9aihCLFcsWixYLExbMTNdLDY4MTI3OTE3NCw0KSxYPWooWCxCLFcsWixMWzBdLDM5MzY0MzAwNzQsMTEpLFo9aihaLFgsQixXLExbM10sMzU3MjQ0NTMxNywxNiksVz1qKFcsWixY'@;
put 'LEIsTFs2XSw3NjAyOTE4OSwyMyksQj1qKEIsVyxaLFgsTFs5XSwzNjU0NjAyODA5LDQpLFg9aihYLEIsVyxaLExbMTJdLDM4NzMxNTE0NjEsMTEpLFo9aihaLFgsQixXLExbMTVdLDUzMDc0MjUyMCwxNiksQj1QKEIsVz1qKFcsWixYLEIsTFsyXSwzMjk5NjI4NjQ1LDIzKSxaLFgsTFswXSw0'@;
put 'MDk2MzM2NDUyLDYpLFg9UChYLEIsVyxaLExbN10sMTEyNjg5MTQxNSwxMCksWj1QKFosWCxCLFcsTFsxNF0sMjg3ODYxMjM5MSwxNSksVz1QKFcsWixYLEIsTFs1XSw0MjM3NTMzMjQxLDIxKSxCPVAoQixXLFosWCxMWzEyXSwxNzAwNDg1NTcxLDYpLFg9UChYLEIsVyxaLExbM10sMjM5OTk4'@;
put 'MDY5MCwxMCksWj1QKFosWCxCLFcsTFsxMF0sNDI5MzkxNTc3MywxNSksVz1QKFcsWixYLEIsTFsxXSwyMjQwMDQ0NDk3LDIxKSxCPVAoQixXLFosWCxMWzhdLDE4NzMzMTMzNTksNiksWD1QKFgsQixXLFosTFsxNV0sNDI2NDM1NTU1MiwxMCksWj1QKFosWCxCLFcsTFs2XSwyNzM0NzY4OTE2'@;
put 'LDE1KSxXPVAoVyxaLFgsQixMWzEzXSwxMzA5MTUxNjQ5LDIxKSxCPVAoQixXLFosWCxMWzRdLDQxNDk0NDQyMjYsNiksWD1QKFgsQixXLFosTFsxMV0sMzE3NDc1NjkxNywxMCksWj1QKFosWCxCLFcsTFsyXSw3MTg3ODcyNTksMTUpLFc9UChXLFosWCxCLExbOV0sMzk1MTQ4MTc0NSwyMSks'@;
put 'dGhpcy5fYT10aGlzLl9hK0J8MCx0aGlzLl9iPXRoaXMuX2IrV3wwLHRoaXMuX2M9dGhpcy5fYytafDAsdGhpcy5fZD10aGlzLl9kK1h8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNl'@;
put 'dD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsw'@;
put 'XSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBMPXAuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEwud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTC53cml0ZUludDMyTEUo'@;
put 'dGhpcy5fYyw4KSxMLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxMfSxjZS5leHBvcnRzPXd9LDMwNDc6KGNlLEosYik9Pnt2YXIgRD1iKDYyNDApLF89Yig5OTMxKTtmdW5jdGlvbiBwKE4pe3RoaXMucmFuZD1OfHxuZXcgXy5SYW5kfWNlLmV4cG9ydHM9cCxwLmNyZWF0ZT1mdW5jdGlvbih3'@;
put 'KXtyZXR1cm4gbmV3IHAodyl9LHAucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24odyl7dmFyIEY9dy5iaXRMZW5ndGgoKSxIPU1hdGguY2VpbChGLzgpO2Rve3ZhciBSPW5ldyBEKHRoaXMucmFuZC5nZW5lcmF0ZShIKSl9d2hpbGUoUi5jbXAodyk+PTApO3JldHVybiBSfSxwLnByb3Rv'@;
put 'dHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKHcsRil7dmFyIEg9Ri5zdWIodyk7cmV0dXJuIHcuYWRkKHRoaXMuX3JhbmRiZWxvdyhIKSl9LHAucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odyxGLEgpe3ZhciBSPXcuYml0TGVuZ3RoKCksaj1ELm1vbnQodyksUD1uZXcgRCgxKS50b1JlZChqKTtG'@;
put 'fHwoRj1NYXRoLm1heCgxLFIvNDh8MCkpO2Zvcih2YXIgTD13LnN1Ym4oMSksWT0wOyFMLnRlc3RuKFkpO1krKyk7Zm9yKHZhciBCPXcuc2hybihZKSxXPUwudG9SZWQoaik7Rj4wO0YtLSl7dmFyIFg9dGhpcy5fcmFuZHJhbmdlKG5ldyBEKDIpLEwpO0gmJkgoWCk7dmFyIFE9WC50b1JlZChq'@;
put 'KS5yZWRQb3coQik7aWYoMCE9PVEuY21wKFApJiYwIT09US5jbXAoVykpe2Zvcih2YXIgcT0xO3E8WTtxKyspe2lmKDA9PT0oUT1RLnJlZFNxcigpKS5jbXAoUCkpcmV0dXJuITE7aWYoMD09PVEuY21wKFcpKWJyZWFrfWlmKHE9PT1ZKXJldHVybiExfX1yZXR1cm4hMH0scC5wcm90b3R5cGUu'@;
put 'Z2V0RGl2aXNvcj1mdW5jdGlvbih3LEYpe3ZhciBIPXcuYml0TGVuZ3RoKCksUj1ELm1vbnQodyksaj1uZXcgRCgxKS50b1JlZChSKTtGfHwoRj1NYXRoLm1heCgxLEgvNDh8MCkpO2Zvcih2YXIgUD13LnN1Ym4oMSksTD0wOyFQLnRlc3RuKEwpO0wrKyk7Zm9yKHZhciBZPXcuc2hybihMKSxC'@;
put 'PVAudG9SZWQoUik7Rj4wO0YtLSl7dmFyIFc9dGhpcy5fcmFuZHJhbmdlKG5ldyBEKDIpLFApLFo9dy5nY2QoVyk7aWYoMCE9PVouY21wbigxKSlyZXR1cm4gWjt2YXIgWD1XLnRvUmVkKFIpLnJlZFBvdyhZKTtpZigwIT09WC5jbXAoaikmJjAhPT1YLmNtcChCKSl7Zm9yKHZhciBRPTE7UTxM'@;
put 'O1ErKyl7aWYoMD09PShYPVgucmVkU3FyKCkpLmNtcChqKSlyZXR1cm4gWC5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyk7aWYoMD09PVguY21wKEIpKWJyZWFrfWlmKFE9PT1MKXJldHVybihYPVgucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KX19cmV0dXJuITF9fSw2MjQwOmZ1'@;
put 'bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQsXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeixnKXtpZigheil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBOKHosZyl7ei5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5w'@;
put 'cm90b3R5cGUsei5wcm90b3R5cGU9bmV3IHksei5wcm90b3R5cGUuY29uc3RydWN0b3I9en1mdW5jdGlvbiB3KHosZyx5KXtpZih3LmlzQk4oeikpcmV0dXJuIHo7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXomJigo'@;
put 'ImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KHp8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBGOyJvYmplY3QiPT10eXBlb2YgRD9ELmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e0Y9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5k'@;
put 'b3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBIKHosZyl7dmFyIHk9ei5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKHosZyx5KXt2YXIgeD1I'@;
put 'KHoseSk7cmV0dXJuIHktMT49ZyYmKHh8PUgoeix5LTEpPDw0KSx4fWZ1bmN0aW9uIGooeixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbih6Lmxlbmd0aCx5KSxWPWc7VjxUO1YrKyl7dmFyIFU9ei5jaGFyQ29kZUF0KFYpLTQ4O0MqPXgsQys9VT49NDk/VS00OSsxMDpVPj0xNz9VLTE3'@;
put 'KzEwOlV9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcs'@;
put 'eSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVj'@;
put 'dCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8'@;
put 'Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5u'@;
put 'ZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5'@;
put 'OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9'@;
put 'PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7'@;
put 'QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxWLFU9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYz'@;
put 'LChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUr'@;
put 'PTI0KT49MjYmJihVLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7'@;
put 'Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBVLFQ9MCxWPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYp'@;
put 'OlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw'@;
put 'ZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIFY9Zy5sZW5ndGgteCxVPVYlQyxFPU1hdGgubWluKFYsVi1VKSt4LG09MCxBPXg7QTxF'@;
put 'O0ErPUMpbT1qKGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09VSl7dmFyIGFlPTE7Zm9yKG09aihnLEEsZy5sZW5ndGgseSksQT0wO0E8VTtBKyspYWUqPXk7dGhpcy5pbXVsbihh'@;
put 'ZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKyln'@;
put 'LndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5'@;
put 'cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0'@;
put 'aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlv'@;
put 'bigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgUD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAs'@;
put 'OSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3'@;
put 'NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwz'@;
put 'OTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmU7dmFyIHg9ei5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHx6LndvcmRzWzBdLFQ9MHxnLndvcmRzWzBd'@;
put 'LFY9QypULEU9Vi82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmVjtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxsZT1NYXRoLm1heCgwLG0tei5sZW5ndGgrMSk7bGU8PW5lO2xlKyspQSs9'@;
put 'KFY9KEM9MHx6LndvcmRzW20tbGV8MF0pKihUPTB8Zy53b3Jkc1tsZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJlY7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1m'@;
put 'dW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLFY9MDtWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9dGhpcy53b3Jkc1tWXSxFPSgxNjc3NzIxNSYoVTw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9VT4+PjI0'@;
put 'LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LFYtLSkseD0wIT09VHx8ViE9PXRoaXMubGVuZ3RoLTE/UFs2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUm'@;
put 'Jih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPUxbZ10sQT1ZW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSku'@;
put 'aXNaZXJvKCk/bmUreDpQW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0s'@;
put 'dy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQq'@;
put 'dGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJv'@;
put 'dG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIEY8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEYsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJy'@;
put 'YXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2'@;
put 'YXIgRSxtLFY9ImxlIj09PXksVT1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihWKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW21dPUU7Zm9yKDttPFQ7bSsrKVVbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKVVbbV09MDtmb3IobT0w'@;
put 'OyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW1QtbS0xXT1FfXJldHVybiBVfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVy'@;
put 'biB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4g'@;
put 'ODE5MSZ5fHwoeCs9MTMseT4+Pj0xMyksMTI3Jnl8fCh4Kz03LHk+Pj49NyksMTUmeXx8KHgrPTQseT4+Pj00KSwzJnl8fCh4Kz0yLHk+Pj49MiksMSZ5fHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhp'@;
put 'cy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jk'@;
put 'c1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/'@;
put 'dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5w'@;
put 'cm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT10aGlzLndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAo'@;
put 'KX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25l'@;
put 'KCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcu'@;
put 'bGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhp'@;
put 'cy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHkseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2'@;
put 'YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90'@;
put 'eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9y'@;
put 'KHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49'@;
put 'MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4'@;
put 'NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcseSl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0'@;
put 'dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgeSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0'@;
put 'aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9u'@;
put 'b3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsVj0wO1Y8Qy5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrKDB8Qy53b3Jkc1tWXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09'@;
put 'VCYmVjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO1Y8'@;
put 'eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09eC53b3Jkc1tWXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVe'@;
put 'PTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBl'@;
put 'LmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMu'@;
put 'bmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBWPTAsVT0wO1U8'@;
put 'VC5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSktKDB8VC53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtmb3IoOzAhPT1WJiZVPEMubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7aWYoMD09'@;
put 'PVYmJlU8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7VTxDLmxlbmd0aDtVKyspdGhpcy53b3Jkc1tVXT1DLndvcmRzW1VdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxVKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw'@;
put 'ZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgWj1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsVj14LndvcmRzLFU9MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxsZT1hZT4+PjEzLHdlPTB8Q1sxXSxaZT04MTkxJndl'@;
put 'LFFlPXdlPj4+MTMsYXQ9MHxDWzJdLHhlPTgxOTEmYXQsdmU9YXQ+Pj4xMyxxZT0wfENbM10samU9ODE5MSZxZSxBZT1xZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsSGU9MHxDWzVdLERlPTgxOTEmSGUsa2U9SGU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxKZT1f'@;
put 'dD4+PjEzLG9uPTB8Q1s3XSx5dD04MTkxJm9uLE10PW9uPj4+MTMsSXQ9MHxDWzhdLHJ0PTgxOTEmSXQsS2U9SXQ+Pj4xMyx0dD0wfENbOV0sTmU9ODE5MSZ0dCx1dD10dD4+PjEzLEp0PTB8VFswXSxMdD04MTkxJkp0LFB0PUp0Pj4+MTMsb2k9MHxUWzFdLGVuPTgxOTEmb2ksc249b2k+Pj4x'@;
put 'MyxJaT0wfFRbMl0sZG49ODE5MSZJaSxmdD1JaT4+PjEzLEZyPTB8VFszXSxadD04MTkxJkZyLGt0PUZyPj4+MTMsTG49MHxUWzRdLG90PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxBdD1uaT4+PjEzLGlyPTB8VFs2XSxodD04MTkxJmlyLEV0PWlyPj4+MTMsem49'@;
put 'MHxUWzddLGFuPTgxOTEmem4sanQ9em4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxmbj1kaT4+PjEzLERpPTB8VFs5XSxRdD04MTkxJkRpLHRuPURpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGNhPShVKyhFPU1hdGguaW11bChuZSxM'@;
put 'dCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUHQpKStNYXRoLmltdWwobGUsTHQpfDApKTw8MTMpfDA7VT0oKEE9TWF0aC5pbXVsKGxlLFB0KSkrKG0+Pj4xMyl8MCkrKGNhPj4+MjYpfDAsY2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFplLEx0KSxtPShtPU1hdGguaW11bChaZSxQ'@;
put 'dCkpK01hdGguaW11bChRZSxMdCl8MCxBPU1hdGguaW11bChRZSxQdCk7dmFyIHhpPShVKyhFPUUrTWF0aC5pbXVsKG5lLGVuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChsZSxlbil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxz'@;
put 'bil8MCkrKG0+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEx0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxMdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChaZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKFpl'@;
put 'LHNuKXwwKStNYXRoLmltdWwoUWUsZW4pfDAsQT1BK01hdGguaW11bChRZSxzbil8MDt2YXIgeXI9KFUrKEU9RStNYXRoLmltdWwobmUsZG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGxlLGRuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5p'@;
put 'bXVsKGxlLGZ0KXwwKSsobT4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsTHQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKEFlLEx0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLGVuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxlbil8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoWmUsZG4pfDAsbT0obT1tK01hdGguaW11bChaZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDA7dmFyIEduPShVKyhFPUUr'@;
put 'TWF0aC5pbXVsKG5lLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsa3QpfDApK01hdGguaW11bChsZSxadCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxrdCl8MCkrKG0+Pj4xMyl8MCkrKEduPj4+MjYpfDAsR24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJl'@;
put 'LEx0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxMdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoQWUsZW4pfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0'@;
put 'aC5pbXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxkbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoWmUsWnQpfDAsbT0obT1tK01hdGguaW11bChaZSxrdCl8MCkrTWF0aC5pbXVsKFFlLFp0KXwwLEE9QStNYXRoLmlt'@;
put 'dWwoUWUsa3QpfDA7dmFyIEtpPShVKyhFPUUrTWF0aC5pbXVsKG5lLG90KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChsZSxvdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAs'@;
put 'S2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKERlLEx0KSxtPShtPU1hdGguaW11bChEZSxQdCkpK01hdGguaW11bChrZSxMdCl8MCxBPU1hdGguaW11bChrZSxQdCksRT1FK01hdGguaW11bChSZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsZW4pfDAsQT1B'@;
put 'K01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChBZSxkbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsWnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxrdCl8MCkrTWF0'@;
put 'aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsa3QpfDAsRT1FK01hdGguaW11bChaZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFplLHp0KXwwKStNYXRoLmltdWwoUWUsb3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MDt2YXIgSnI9KFUrKEU9RStNYXRoLmltdWwobmUsV2UpfDAp'@;
put 'fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFdlKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEF0KXwwKSsobT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsTHQpLG09KG09TWF0aC5pbXVs'@;
put 'KG50LFB0KSkrTWF0aC5pbXVsKEplLEx0KXwwLEE9TWF0aC5pbXVsKEplLFB0KSxFPUUrTWF0aC5pbXVsKERlLGVuKXwwLG09KG09bStNYXRoLmltdWwoRGUsc24pfDApK01hdGguaW11bChrZSxlbil8MCxBPUErTWF0aC5pbXVsKGtlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZG4pfDAsbT0o'@;
put 'bT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGRuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLGt0KXwwKStNYXRoLmltdWwoQWUsWnQpfDAsQT1BK01hdGguaW11bChBZSxrdCl8MCxFPUUrTWF0'@;
put 'aC5pbXVsKHhlLG90KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxvdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoWmUsV2UpfDAsbT0obT1tK01hdGguaW11bChaZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmlt'@;
put 'dWwoUWUsQXQpfDA7dmFyIFFyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsRXQpfDApK01hdGguaW11bChsZSxodCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxFdCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAs'@;
put 'UXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LEx0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxMdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxlbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoSmUsZW4pfDAsQT1B'@;
put 'K01hdGguaW11bChKZSxzbil8MCxFPUUrTWF0aC5pbXVsKERlLGRuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZnQpfDApK01hdGguaW11bChrZSxkbil8MCxBPUErTWF0aC5pbXVsKGtlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxrdCl8MCkrTWF0'@;
put 'aC5pbXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsa3QpfDAsRT1FK01hdGguaW11bChqZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoQWUsb3QpfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoWmUsaHQpfDAsbT0obT1tK01hdGguaW11bChaZSxFdCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUsRXQpfDA7dmFyIE5pPShVKyhFPUUr'@;
put 'TWF0aC5pbXVsKG5lLGFuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsanQpfDApK01hdGguaW11bChsZSxhbil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0'@;
put 'LEx0KSxtPShtPU1hdGguaW11bChydCxQdCkpK01hdGguaW11bChLZSxMdCl8MCxBPU1hdGguaW11bChLZSxQdCksRT1FK01hdGguaW11bCh5dCxlbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsZW4pfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0'@;
put 'aC5pbXVsKG50LGRuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwLEU9RStNYXRoLmltdWwoRGUsWnQpfDAsbT0obT1tK01hdGguaW11bChEZSxrdCl8MCkrTWF0aC5pbXVsKGtlLFp0KXwwLEE9QStNYXRoLmlt'@;
put 'dWwoa2Usa3QpfDAsRT1FK01hdGguaW11bChSZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsb3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChB'@;
put 'ZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxFdCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUsRXQpfDAsRT1FK01hdGguaW11bChaZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKFpl'@;
put 'LGp0KXwwKStNYXRoLmltdWwoUWUsYW4pfDAsQT1BK01hdGguaW11bChRZSxqdCl8MDt2YXIgSGk9KFUrKEU9RStNYXRoLmltdWwobmUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmbil8MCkrTWF0aC5pbXVsKGxlLGNuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5p'@;
put 'bXVsKGxlLGZuKXwwKSsobT4+PjEzKXwwKSsoSGk+Pj4yNil8MCxIaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsTHQpLG09KG09TWF0aC5pbXVsKE5lLFB0KSkrTWF0aC5pbXVsKHV0LEx0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKHJ0LGVuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwocnQsc24pfDApK01hdGguaW11bChLZSxlbil8MCxBPUErTWF0aC5pbXVsKEtlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGRuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChu'@;
put 'dCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LGt0KXwwKStNYXRoLmltdWwoSmUsWnQpfDAsQT1BK01hdGguaW11bChKZSxrdCl8MCxFPUUrTWF0aC5pbXVsKERlLG90KXwwLG09KG09bStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxvdCl8MCxBPUErTWF0aC5pbXVsKGtlLHp0'@;
put 'KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEV0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAs'@;
put 'QT1BK01hdGguaW11bChBZSxFdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGFuKXwwLG09KG09bStNYXRoLmltdWwoeGUsanQpfDApK01hdGguaW11bCh2ZSxhbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoWmUsY24pfDAsbT0obT1tK01hdGguaW11bChaZSxmbil8MCkr'@;
put 'TWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIElhPShVKyhFPUUrTWF0aC5pbXVsKG5lLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsdG4pfDApK01hdGguaW11bChsZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx0'@;
put 'bil8MCkrKG0+Pj4xMyl8MCkrKElhPj4+MjYpfDAsSWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGVuKSxtPShtPU1hdGguaW11bChOZSxzbikpK01hdGguaW11bCh1dCxlbil8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChydCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0'@;
put 'LGZ0KXwwKStNYXRoLmltdWwoS2UsZG4pfDAsQT1BK01hdGguaW11bChLZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsa3QpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LGt0KXwwLEU9RStNYXRoLmltdWwobnQsb3QpfDAs'@;
put 'bT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKEplLG90KXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDAsRT1FK01hdGguaW11bChEZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV2UpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUsRXQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLEV0KXwwLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKEFlLGFuKXwwLEE9QStNYXRo'@;
put 'LmltdWwoQWUsanQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgUHI9KFUrKEU9RStNYXRoLmltdWwoWmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu'@;
put 'aW11bChaZSx0bil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+PjEzKXwwKSsoUHI+Pj4yNil8MCxQciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsZG4pLG09KG09TWF0aC5pbXVsKE5lLGZ0KSkrTWF0aC5pbXVsKHV0LGRu'@;
put 'KXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKHJ0LFp0KXwwLG09KG09bStNYXRoLmltdWwocnQsa3QpfDApK01hdGguaW11bChLZSxadCl8MCxBPUErTWF0aC5pbXVsKEtlLGt0KXwwLEU9RStNYXRoLmltdWwoeXQsb3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkr'@;
put 'TWF0aC5pbXVsKE10LG90KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MCxFPUUrTWF0aC5pbXVsKERlLGh0KXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoRGUsRXQpfDApK01hdGguaW11bChrZSxodCl8MCxBPUErTWF0aC5pbXVsKGtlLEV0KXwwLEU9RStNYXRoLmltdWwoUmUsYW4pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLGFuKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11'@;
put 'bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgWWk9KFUrKEU9RStNYXRoLmltdWwoeGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSx0bil8MCkrTWF0aC5pbXVsKHZl'@;
put 'LFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKHZlLHRuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsWnQpLG09KG09TWF0aC5pbXVsKE5lLGt0KSkrTWF0aC5pbXVsKHV0LFp0KXwwLEE9TWF0aC5pbXVsKHV0LGt0KSxFPUUr'@;
put 'TWF0aC5pbXVsKHJ0LG90KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChLZSxvdCl8MCxBPUErTWF0aC5pbXVsKEtlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRo'@;
put 'LmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEV0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSxFdCl8MCxFPUUrTWF0aC5pbXVsKERlLGFuKXwwLG09KG09bStNYXRoLmltdWwoRGUsanQpfDApK01hdGguaW11'@;
put 'bChrZSxhbil8MCxBPUErTWF0aC5pbXVsKGtlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIGZhPShVKyhFPUUrTWF0aC5pbXVsKGplLFF0KXwwKXwwKSso'@;
put 'KDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsdG4pfDApK01hdGguaW11bChBZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChBZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGZhPj4+MjYpfDAsZmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLG90KSxtPShtPU1hdGguaW11bChOZSx6'@;
put 'dCkpK01hdGguaW11bCh1dCxvdCl8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoS2UsV2UpfDAsQT1BK01hdGguaW11bChLZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoeXQsRXQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LEV0KXwwLEU9RStNYXRoLmltdWwobnQsYW4pfDAsbT0obT1tK01hdGguaW11bChudCxqdCl8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsanQpfDAsRT1FK01hdGguaW11'@;
put 'bChEZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoa2UsY24pfDAsQT1BK01hdGguaW11bChrZSxmbil8MDt2YXIgbnI9KFUrKEU9RStNYXRoLmltdWwoUmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSx0bil8MCkrTWF0aC5pbXVsKEll'@;
put 'LFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEllLHRuKXwwKSsobT4+PjEzKXwwKSsobnI+Pj4yNil8MCxuciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV2UpLG09KG09TWF0aC5pbXVsKE5lLEF0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUr'@;
put 'TWF0aC5pbXVsKHJ0LGh0KXwwLG09KG09bStNYXRoLmltdWwocnQsRXQpfDApK01hdGguaW11bChLZSxodCl8MCxBPUErTWF0aC5pbXVsKEtlLEV0KXwwLEU9RStNYXRoLmltdWwoeXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LGFuKXwwLEE9QStNYXRo'@;
put 'LmltdWwoTXQsanQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgb2E9KFUrKEU9RStNYXRoLmltdWwoRGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu'@;
put 'aW11bChEZSx0bil8MCkrTWF0aC5pbXVsKGtlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsaHQpLG09KG09TWF0aC5pbXVsKE5lLEV0KSkrTWF0aC5pbXVsKHV0LGh0'@;
put 'KXwwLEE9TWF0aC5pbXVsKHV0LEV0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09bStNYXRoLmltdWwocnQsanQpfDApK01hdGguaW11bChLZSxhbil8MCxBPUErTWF0aC5pbXVsKEtlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkr'@;
put 'TWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIF9hPShVKyhFPUUrTWF0aC5pbXVsKG50LFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsdG4pfDApK01hdGguaW11bChKZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChKZSx0'@;
put 'bil8MCkrKG0+Pj4xMyl8MCkrKF9hPj4+MjYpfDAsX2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGFuKSxtPShtPU1hdGguaW11bChOZSxqdCkpK01hdGguaW11bCh1dCxhbil8MCxBPU1hdGguaW11bCh1dCxqdCksRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0'@;
put 'LGZuKXwwKStNYXRoLmltdWwoS2UsY24pfDAsQT1BK01hdGguaW11bChLZSxmbil8MDt2YXIgT2E9KFUrKEU9RStNYXRoLmltdWwoeXQsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCx0bil8MCkrTWF0aC5pbXVsKE10LFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5p'@;
put 'bXVsKE10LHRuKXwwKSsobT4+PjEzKXwwKSsoT2E+Pj4yNil8MCxPYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsY24pLG09KG09TWF0aC5pbXVsKE5lLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgTmE9KFUrKEU9RStNYXRoLmltdWwocnQsUXQpfDAp'@;
put 'fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKEtlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEtlLHRuKXwwKSsobT4+PjEzKXwwKSsoTmE+Pj4yNil8MCxOYSY9NjcxMDg4NjM7dmFyIGVpPShVKyhFPU1hdGguaW11bChOZSxRdCkpfDAp'@;
put 'KygoODE5MSYobT0obT1NYXRoLmltdWwoTmUsdG4pKStNYXRoLmltdWwodXQsUXQpfDApKTw8MTMpfDA7cmV0dXJuIFU9KChBPU1hdGguaW11bCh1dCx0bikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxWWzBdPWNhLFZbMV09eGksVlsyXT15cixWWzNdPUduLFZbNF09'@;
put 'S2ksVls1XT1KcixWWzZdPVFyLFZbN109TmksVls4XT1IaSxWWzldPUlhLFZbMTBdPVByLFZbMTFdPVlpLFZbMTJdPWZhLFZbMTNdPW5yLFZbMTRdPW9hLFZbMTVdPV9hLFZbMTZdPU9hLFZbMTddPU5hLFZbMThdPWVpLDAhPT1VJiYoVlsxOV09VSx4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBR'@;
put 'KHosZyx5KXtyZXR1cm4obmV3IHEpLm11bHAoeixnLHkpfWZ1bmN0aW9uIHEoeixnKXt0aGlzLng9eix0aGlzLnk9Z31NYXRoLmltdWx8fChaPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMu'@;
put 'bGVuZ3RoJiYxMD09PWcubGVuZ3RoP1oodGhpcyxnLHkpOkM8NjM/Vyh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIFgoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlLHkubGVuZ3RoPXoubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0'@;
put 'aC0xO1QrKyl7dmFyIFY9QztDPTA7Zm9yKHZhciBVPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULXoubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgbGU9KDB8ei53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSx3ZT02NzEwODg2MyZsZTtVPTY3MTA4'@;
put 'ODYzJih3ZT13ZStVfDApLEMrPShWPShWPVYrKGxlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LFYmPTY3MTA4ODYzfXkud29yZHNbVF09VSx4PVYsVj1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTpRKHRoaXMsZyx5'@;
put 'KSx4fSxxLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LHEucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihn'@;
put 'LHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxxLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXtmb3IodmFyIFU9MDtVPFY7VSsrKUNbVV09eVtnW1VdXSxU'@;
put 'W1VdPXhbZ1tVXV19LHEucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsVil7dGhpcy5wZXJtdXRlKFYsZyx5LHgsQyxUKTtmb3IodmFyIFU9MTtVPFQ7VTw8PTEpZm9yKHZhciBFPVU8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkv'@;
put 'RSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxsZT1BLHdlPTA7d2U8VTt3ZSsrKXt2YXIgWmU9eFthZSt3ZV0sUWU9Q1thZSt3ZV0sYXQ9eFthZSt3ZStVXSx4ZT1DW2FlK3dlK1VdLHZlPW5lKmF0LWxlKnhlO3hlPW5lKnhlK2xlKmF0LHhbYWUrd2VdPVplKyhhdD12ZSksQ1thZSt3'@;
put 'ZV09UWUreGUseFthZSt3ZStVXT1aZS1hdCxDW2FlK3dlK1VdPVFlLXhlLHdlIT09RSYmKHZlPW0qbmUtQSpsZSxsZT1tKmxlK0EqbmUsbmU9dmUpfX0scS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgv'@;
put 'MnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LHEucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5'@;
put 'W3gtQy0xXT0tVH19LHEucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/'@;
put 'MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LHEucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsVj0wO1Y8eTtWKyspeFsyKlZdPTgxOTEmKFQrPTB8Z1tWXSkseFsyKlYrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoVj0yKnk7VjxDOysrVil4'@;
put 'W1ZdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0scS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0scS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVu'@;
put 'MTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxWPXRoaXMuc3R1YihDKSxVPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLGxlPXgud29yZHM7bGUubGVu'@;
put 'Z3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsVSxDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKFUsVixFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLFYsYWUsbmUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2'@;
put 'YXIgWmU9RVt3ZV0qYWVbd2VdLW1bd2VdKm5lW3dlXTttW3dlXT1FW3dlXSpuZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLGxlLFYsQyxUKSx0aGlzLmNvbmp1Z2F0ZShsZSxWLEMpLHRoaXMubm9ybWFs'@;
put 'aXplMTNiKGxlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0'@;
put 'aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksUSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0o'@;
put 'NjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hdPXksdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihn'@;
put 'KXt2YXIgeT1mdW5jdGlvbiBCKHope2Zvcih2YXIgZz1uZXcgQXJyYXkoei5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KHoud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7'@;
put 'Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxu'@;
put 'PWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIFY9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgVT10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jk'@;
put 'c1tUXT0oMHx0aGlzLndvcmRzW1RdKS1VPDx5fFYsVj1VPj4+MjYteX1WJiYodGhpcy53b3Jkc1tUXT1WLHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlz'@;
put 'LndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3Ao'@;
put 'Im51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LFY9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLFU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1WLEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPFY7bSsr'@;
put 'KUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1WfWlmKDAhPT1WKWlmKHRoaXMubGVuZ3RoPlYpZm9yKHRoaXMubGVuZ3RoLT1WLG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStWXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0'@;
put 'aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUmVX1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlz'@;
put 'Lmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVz'@;
put 'aHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4'@;
put 'XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlz'@;
put 'Lmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigw'@;
put 'fHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1'@;
put 'bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVy'@;
put 'biB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0'@;
put 'dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFy'@;
put 'IHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcu'@;
put 'cHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJz'@;
put 'KCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBWLFU9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtWPSgwfHRoaXMud29yZHNbVCt4XSkrVTt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O1U9KChWLT02'@;
put 'NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylVPShWPSgwfHRoaXMud29yZHNbVCt4XSkrVSk+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWO2lmKDA9PT1VKXJldHVybiB0aGlzLnN0'@;
put 'cmlwKCk7Zm9yKHAoLTE9PT1VKSxVPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKVU9KFY9LSgwfHRoaXMud29yZHNbVF0pK1UpPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJlY7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0'@;
put 'aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhWKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksVj0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7'@;
put 'aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihD'@;
put 'PWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgbGU9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihsZT1NYXRoLm1pbihsZS9WfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVs'@;
put 'KFQsbGUsbmUpOzAhPT1DLm5lZ2F0aXZlOylsZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09bGUpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMu'@;
put 'aXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8o'@;
put 'Vj10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhWPXRoaXMu'@;
put 'ZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSkse2RpdjpDLG1vZDpWLm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUm'@;
put 'JlQuaXN1YihnKSkse2RpdjpWLmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2'@;
put 'Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxWfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90'@;
put 'b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksVj14LmNtcChDKTtyZXR1'@;
put 'cm4gVjwwfHwxPT09VCYmMD09PVY/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0w'@;
put 'O0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlz'@;
put 'LndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2'@;
put 'YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPW5ldyB3KDApLFU9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsr'@;
put 'RTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5p'@;
put 'YWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBsZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmbGU8MjY7KytsZSx3ZTw8PTEpO2lmKGxlPjApZm9yKHguaXVzaHJuKGxlKTtsZS0tID4wOykoVi5pc09kZCgpfHxVLmlzT2RkKCkpJiYoVi5pYWRkKG0p'@;
put 'LFUuaXN1YihBKSksVi5pdXNocm4oMSksVS5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoViksVC5pc3ViKFUpKTooeC5pc3ViKHkpLFYuaXN1YihDKSxVLmlzdWIoVCkpfXJldHVybnthOlYsYjpVLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1m'@;
put 'dW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5j'@;
put 'bXBuKDEpPjA7KXtmb3IodmFyIFU9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZVPDI2OysrVSxFPDw9MSk7aWYoVT4wKWZvcih5Lml1c2hybihVKTtVLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKFYpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7Kytt'@;
put 'LEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoViksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8'@;
put 'MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9'@;
put 'MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBWPXk7eT14'@;
put 'LHg9Vn1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVy'@;
put 'biEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJu'@;
put 'dW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLFY9eDswIT09VCYmVjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPTB8dGhp'@;
put 'cy53b3Jkc1tWXTtUPShVKz1UKT4+PjI2LHRoaXMud29yZHNbVl09VSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tWXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlz'@;
put 'LndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0t'@;
put 'ZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09'@;
put 'PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcu'@;
put 'bGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1'@;
put 'cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcu'@;
put 'cHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUu'@;
put 'bHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgU2UoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRo'@;
put 'aXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVk'@;
put 'dWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBh'@;
put 'IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90'@;
put 'b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5w'@;
put 'cm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJy'@;
put 'ZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhp'@;
put 'cyxnKX07dmFyIHRlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoeixnKXt0aGlzLm5hbWU9eix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1'@;
put 'Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHNlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhp'@;
put 'cywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIp'@;
put 'fWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZSh6KXtpZigic3RyaW5nIj09dHlwZW9mIHope3ZhciBnPXcuX3ByaW1lKHopO3Ro'@;
put 'aXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcCh6Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXosdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKHope1NlLmNhbGwodGhpcyx6KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNo'@;
put 'aWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwo'@;
put 'dGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5'@;
put 'KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFy'@;
put 'IEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5p'@;
put 'dXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LE4oc2UsaWUpLHNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztU'@;
put 'KyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBWPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109ViZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBVPTB8Zy53'@;
put 'b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShVJngpPDw0fFY+Pj4yMixWPVV9Zy53b3Jkc1tULTEwXT1WPj4+PTIyLGcubGVuZ3RoLT0wPT09ViYmZy5sZW5ndGg+MTA/MTA6OX0sc2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0'@;
put 'aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgt'@;
put 'LSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sTihnZSxpZSksTihfZSxpZSksTihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4'@;
put 'ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYodGVbZ10pcmV0dXJuIHRlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgc2U7ZWxzZSBpZigicDIyNCI9PT1nKXk9'@;
put 'bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gdGVbZ109eSx5fSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdh'@;
put 'dGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRo'@;
put 'IHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2Qo'@;
put 'dGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3Zh'@;
put 'ciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4'@;
put 'LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcs'@;
put 'eSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LFNlLnByb3RvdHlw'@;
put 'ZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sU2UucHJvdG90eXBlLmlzcXI9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlz'@;
put 'Lm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtw'@;
put 'KCFDLmlzWmVybygpKTt2YXIgVj1uZXcgdygxKS50b1JlZCh0aGlzKSxVPVYucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChVKTspbS5yZWRJ'@;
put 'QWRkKFUpO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxsZT1UOzAhPT1uZS5jbXAoVik7KXtmb3IodmFyIHdlPW5lLFplPTA7MCE9PXdlLmNtcChWKTtaZSsrKXdlPXdlLnJlZFNxcigpO3AoWmU8bGUp'@;
put 'O3ZhciBRZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihsZS1aZS0xKSk7YWU9YWUucmVkTXVsKFFlKSxBPVFlLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxsZT1aZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0'@;
put 'dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVy'@;
put 'biBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgVj1DWzBdLFU9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYm'@;
put 'KG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO1YhPT1DWzBdJiYoVj10aGlzLnNxcihWKSksMCE9PW5lfHwwIT09VT8oVTw8PTEsVXw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihW'@;
put 'PXRoaXMubXVsKFYsQ1tVXSksRT0wLFU9MCkpOkU9MH1tPTI2fXJldHVybiBWfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcp'@;
put 'e3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyB6ZShnKX0sTih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90'@;
put 'b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcu'@;
put 'bGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRo'@;
put 'aXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgu'@;
put 'bWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRo'@;
put 'aXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDk3NDY6Y2U9PntmdW5jdGlvbiBKKGIs'@;
put 'RCl7aWYoIWIpdGhyb3cgbmV3IEVycm9yKER8fCJBc3NlcnRpb24gZmFpbGVkIil9Y2UuZXhwb3J0cz1KLEouZXF1YWw9ZnVuY3Rpb24oRCxfLHApe2lmKEQhPV8pdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkOiAiK0QrIiAhPSAiK18pfX0sNDUwNDooY2UsSik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIGI9SjtmdW5jdGlvbiBfKE4pe3JldHVybiAxPT09Ti5sZW5ndGg/IjAiK046Tn1mdW5jdGlvbiBwKE4pe2Zvcih2YXIgdz0iIixGPTA7RjxOLmxlbmd0aDtGKyspdys9XyhOW0ZdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9Yi50b0FycmF5PWZ1bmN0aW9uIEQoTix3KXtp'@;
put 'ZihBcnJheS5pc0FycmF5KE4pKXJldHVybiBOLnNsaWNlKCk7aWYoIU4pcmV0dXJuW107dmFyIEY9W107aWYoInN0cmluZyIhPXR5cGVvZiBOKXtmb3IodmFyIEg9MDtIPE4ubGVuZ3RoO0grKylGW0hdPTB8TltIXTtyZXR1cm4gRn1pZigiaGV4Ij09PXcpZm9yKChOPU4ucmVwbGFjZSgvW15h'@;
put 'LXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoTj0iMCIrTiksSD0wO0g8Ti5sZW5ndGg7SCs9MilGLnB1c2gocGFyc2VJbnQoTltIXStOW0grMV0sMTYpKTtlbHNlIGZvcihIPTA7SDxOLmxlbmd0aDtIKyspe3ZhciBSPU4uY2hhckNvZGVBdChIKSxqPVI+PjgsUD0yNTUmUjtqP0YucHVz'@;
put 'aChqLFApOkYucHVzaChQKX1yZXR1cm4gRn0sYi56ZXJvMj1fLGIudG9IZXg9cCxiLmVuY29kZT1mdW5jdGlvbih3LEYpe3JldHVybiJoZXgiPT09Rj9wKHcpOnd9fSw0MjQ0OmNlPT57InVzZSBzdHJpY3QiO3ZhciBKPWZ1bmN0aW9uKGIpe3JldHVybiBiIT1ifTtjZS5leHBvcnRzPWZ1bmN0'@;
put 'aW9uKEQsXyl7cmV0dXJuIDA9PT1EJiYwPT09Xz8xL0Q9PTEvXzohIShEPT09X3x8SihEKSYmSihfKSl9fSw2MDk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0Mjg5KSxfPWIoNTU1OSkscD1iKDQyNDQpLE49Yig1NjI0KSx3PWIoMjI4MSksRj1fKE4oKSxPYmplY3QpO0QoRix7'@;
put 'Z2V0UG9seWZpbGw6TixpbXBsZW1lbnRhdGlvbjpwLHNoaW06d30pLGNlLmV4cG9ydHM9Rn0sNTYyNDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQyNDQpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpE'@;
put 'fX0sMjI4MTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU2MjQpLF89Yig0Mjg5KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIE49RCgpO3JldHVybiBfKE9iamVjdCx7aXM6Tn0se2lzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pcyE9PU59fSksTn19LDg5ODc6KGNlLEos'@;
put 'Yik9PnsidXNlIHN0cmljdCI7dmFyIEQ7aWYoIU9iamVjdC5rZXlzKXt2YXIgXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxOPWIoMTQxNCksdz1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEY9IXcuY2Fs'@;
put 'bCh7dG9TdHJpbmc6bnVsbH0sInRvU3RyaW5nIiksSD13LmNhbGwoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiKSxSPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNv'@;
put 'bnN0cnVjdG9yIl0saj1mdW5jdGlvbihCKXt2YXIgVz1CLmNvbnN0cnVjdG9yO3JldHVybiBXJiZXLnByb3RvdHlwZT09PUJ9LFA9eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDohMCwkZnJhbWVzOiEwLCRpbm5l'@;
put 'ckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50OiEwLCRzY3JvbGxMZWZ0OiEw'@;
put 'LCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAsJHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0sTD1mdW5jdGlvbigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2Zvcih2YXIgQiBpbiB3aW5kb3cp'@;
put 'dHJ5e2lmKCFQWyIkIitCXSYmXy5jYWxsKHdpbmRvdyxCKSYmbnVsbCE9PXdpbmRvd1tCXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dbQl0pdHJ5e2ood2luZG93W0JdKX1jYXRjaHtyZXR1cm4hMH19Y2F0Y2h7cmV0dXJuITB9cmV0dXJuITF9KCk7RD1mdW5jdGlvbihXKXt2YXIgWj1udWxs'@;
put 'IT09VyYmIm9iamVjdCI9PXR5cGVvZiBXLFg9IltvYmplY3QgRnVuY3Rpb25dIj09PXAuY2FsbChXKSxRPU4oVykscT1aJiYiW29iamVjdCBTdHJpbmddIj09PXAuY2FsbChXKSx0ZT1bXTtpZighWiYmIVgmJiFRKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBh'@;
put 'IG5vbi1vYmplY3QiKTt2YXIgaWU9SCYmWDtpZihxJiZXLmxlbmd0aD4wJiYhXy5jYWxsKFcsMCkpZm9yKHZhciBzZT0wO3NlPFcubGVuZ3RoOysrc2UpdGUucHVzaChTdHJpbmcoc2UpKTtpZihRJiZXLmxlbmd0aD4wKWZvcih2YXIgZ2U9MDtnZTxXLmxlbmd0aDsrK2dlKXRlLnB1c2goU3Ry'@;
put 'aW5nKGdlKSk7ZWxzZSBmb3IodmFyIF9lIGluIFcpKCFpZXx8InByb3RvdHlwZSIhPT1fZSkmJl8uY2FsbChXLF9lKSYmdGUucHVzaChTdHJpbmcoX2UpKTtpZihGKWZvcih2YXIgVGU9ZnVuY3Rpb24oQil7aWYodHlwZW9mIHdpbmRvdz4idSJ8fCFMKXJldHVybiBqKEIpO3RyeXtyZXR1cm4g'@;
put 'aihCKX1jYXRjaHtyZXR1cm4hMX19KFcpLFNlPTA7U2U8Ui5sZW5ndGg7KytTZSkoIVRlfHwiY29uc3RydWN0b3IiIT09UltTZV0pJiZfLmNhbGwoVyxSW1NlXSkmJnRlLnB1c2goUltTZV0pO3JldHVybiB0ZX19Y2UuZXhwb3J0cz1EfSwyMjE1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3Zh'@;
put 'ciBEPUFycmF5LnByb3RvdHlwZS5zbGljZSxfPWIoMTQxNCkscD1PYmplY3Qua2V5cyxOPXA/ZnVuY3Rpb24oSCl7cmV0dXJuIHAoSCl9OmIoODk4Nyksdz1PYmplY3Qua2V5cztOLnNoaW09ZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyl7dmFyIEg9ZnVuY3Rpb24oKXt2YXIgUj1PYmplY3Qu'@;
put 'a2V5cyhhcmd1bWVudHMpO3JldHVybiBSJiZSLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5ndGh9KDEsMik7SHx8KE9iamVjdC5rZXlzPWZ1bmN0aW9uKGope3JldHVybiBfKGopP3coRC5jYWxsKGopKTp3KGopfSl9ZWxzZSBPYmplY3Qua2V5cz1OO3JldHVybiBPYmplY3Qua2V5c3x8Tn0sY2Uu'@;
put 'ZXhwb3J0cz1OfSwxNDE0OmNlPT57InVzZSBzdHJpY3QiO3ZhciBKPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Y2UuZXhwb3J0cz1mdW5jdGlvbihEKXt2YXIgXz1KLmNhbGwoRCkscD0iW29iamVjdCBBcmd1bWVudHNdIj09PV87cmV0dXJuIHB8fChwPSJbb2JqZWN0IEFycmF5XSIhPT1f'@;
put 'JiZudWxsIT09RCYmIm9iamVjdCI9PXR5cGVvZiBEJiYibnVtYmVyIj09dHlwZW9mIEQubGVuZ3RoJiZELmxlbmd0aD49MCYmIltvYmplY3QgRnVuY3Rpb25dIj09PUouY2FsbChELmNhbGxlZSkpLHB9fSwyODM3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjIxNSksXz1iKDU0'@;
put 'MTkpKCkscD1iKDczNzkpLE49Yig4ODkyKSx3PXAoIkFycmF5LnByb3RvdHlwZS5wdXNoIiksRj1wKCJPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlIiksSD1fP04uZ2V0T3duUHJvcGVydHlTeW1ib2xzOm51bGw7Y2UuZXhwb3J0cz1mdW5jdGlvbihqLFApe2lmKG51bGw9'@;
put 'PWopdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dmFyIEw9TihqKTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTDtmb3IodmFyIFk9MTtZPGFyZ3VtZW50cy5sZW5ndGg7KytZKXt2YXIgQj1OKGFyZ3VtZW50c1tZXSksVz1EKEIpLFo9XyYm'@;
put 'KE4uZ2V0T3duUHJvcGVydHlTeW1ib2xzfHxIKTtpZihaKWZvcih2YXIgWD1aKEIpLFE9MDtRPFgubGVuZ3RoOysrUSl7dmFyIHE9WFtRXTtGKEIscSkmJncoVyxxKX1mb3IodmFyIHRlPTA7dGU8Vy5sZW5ndGg7Kyt0ZSl7dmFyIGllPVdbdGVdO0YoQixpZSkmJihMW2llXT1CW2llXSl9fXJl'@;
put 'dHVybiBMfX0sODE2MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzcpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTtmb3IodmFyIE49ImFiY2RlZmdoaWprbG1ub3BxcnN0'@;
put 'Iix3PU4uc3BsaXQoIiIpLEY9e30sSD0wO0g8dy5sZW5ndGg7KytIKUZbd1tIXV09d1tIXTt2YXIgUj1PYmplY3QuYXNzaWduKHt9LEYpLGo9IiI7Zm9yKHZhciBQIGluIFIpais9UDtyZXR1cm4gTiE9PWp9KCl8fGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ258fCFPYmplY3QucHJldmVu'@;
put 'dEV4dGVuc2lvbnMpcmV0dXJuITE7dmFyIE49T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHsxOjJ9KTt0cnl7T2JqZWN0LmFzc2lnbihOLCJ4eSIpfWNhdGNoe3JldHVybiJ5Ij09PU5bMV19cmV0dXJuITF9KCk/RDpPYmplY3QuYXNzaWdufX0sNzQzNTooY2UsSik9PntKLmVuZGlhbm5lc3M9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxKLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBsb2NhdGlvbjwidSI/bG9jYXRpb24uaG9zdG5hbWU6IiJ9LEoubG9hZGF2Zz1mdW5jdGlvbigpe3JldHVybltdfSxKLnVwdGltZT1mdW5jdGlvbigpe3JldHVybiAwfSxKLmZyZWVtZW09'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sSi50b3RhbG1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxKLmNwdXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sSi50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIkJyb3dzZXIifSxKLnJlbGVhc2U9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yLmFwcFZlcnNpb246IiJ9LEoubmV0d29ya0ludGVyZmFjZXM9Si5nZXROZXR3b3JrSW50ZXJmYWNlcz1mdW5jdGlvbigpe3JldHVybnt9fSxKLmFyY2g9ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LEoucGxhdGZv'@;
put 'cm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LEoudG1wZGlyPUoudG1wRGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi90bXAifSxKLkVPTD0iXG4iLEouaG9tZWRpcj1mdW5jdGlvbigpe3JldHVybiIvIn19LDI4MTg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5ODA5KTtKLmNl'@;
put 'cnRpZmljYXRlPWIoMTkzNCk7dmFyIF89RC5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMu'@;
put 'a2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkp'@;
put 'fSk7Si5SU0FQcml2YXRlS2V5PV87dmFyIHA9RC5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO0ouUlNBUHVibGljS2V5PXA7dmFyIE49RC5k'@;
put 'ZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5'@;
put 'KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksdz1ELmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXko'@;
put 'ImFsZ29yaXRobSIpLnVzZShOKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO0ouUHVibGljS2V5PXc7dmFyIEY9RC5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5r'@;
put 'ZXkoImFsZ29yaXRobSIpLnVzZShOKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtKLlByaXZhdGVLZXk9Rjt2YXIgSD1ELmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRo'@;
put 'bSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iiku'@;
put 'b2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtKLkVuY3J5'@;
put 'cHRlZFByaXZhdGVLZXk9SDt2YXIgUj1ELmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMu'@;
put 'a2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7Si5EU0FQcml2YXRlS2V5PVIsSi5EU0FwYXJhbT1ELmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBqPUQuZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7'@;
put 'dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KSxQPUQuZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJh'@;
put 'bWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoaiksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7Si5FQ1ByaXZhdGVLZXk9UCxKLnNpZ25hdHVyZT1ELmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2Vx'@;
put 'KCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sMTkzNDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk4MDkpLF89RC5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJh'@;
put 'bFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLHA9RC5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksTj1ELmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmll'@;
put 'ciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLHc9RC5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZv'@;
put 'IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoTiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxGPUQuZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YocCl9KSxI'@;
put 'PUQuZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKEYpfSksUj1ELmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoSCl9KX0pLGo9RC5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCku'@;
put 'b2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoXyksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKF8pKX0pLFA9RC5kZWZpbmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29s'@;
put 'KCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksTD1ELmRlZmluZSgiVEJTQ2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxO'@;
put 'dW1iZXIiKS5pbnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKE4pLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoUiksdGhpcy5rZXkoInZhbGlkaXR5IikudXNlKGopLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKFIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZSh3KSx0'@;
put 'aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoUCkub3B0'@;
put 'aW9uYWwoKSl9KSxZPUQuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInRic0NlcnRpZmljYXRlIikudXNlKEwpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoTiksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIiku'@;
put 'Yml0c3RyKCkpfSk7Y2UuZXhwb3J0cz1ZfSw3NjMxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxy'@;
put 'Ky89XSspW1xuXHJdKy9tLF89L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLS9tLHA9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20sTj1iKDMwNDgpLHc9Yig0Njk2'@;
put 'KSxGPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSCxSKXt2YXIgTCxqPUgudG9TdHJpbmcoKSxQPWoubWF0Y2goRCk7aWYoUCl7dmFyIEI9ImFlcyIrUFsxXSxXPUYuZnJvbShQWzJdLCJoZXgiKSxaPUYuZnJvbShQWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0'@;
put 'IiksWD1OKFIsVy5zbGljZSgwLDgpLHBhcnNlSW50KFBbMV0sMTApKS5rZXksUT1bXSxxPXcuY3JlYXRlRGVjaXBoZXJpdihCLFgsVyk7US5wdXNoKHEudXBkYXRlKFopKSxRLnB1c2gocS5maW5hbCgpKSxMPUYuY29uY2F0KFEpfWVsc2V7dmFyIFk9ai5tYXRjaChwKTtMPUYuZnJvbShZWzJd'@;
put 'LnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzpqLm1hdGNoKF8pWzFdLGRhdGE6TH19fSw5ODA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODE4KSxfPWIoMjU2MikscD1iKDc2MzEpLE49Yig0Njk2KSx3PWIoNTYzMiksRj1iKDk1MDkpLkJ1ZmZl'@;
put 'cjtmdW5jdGlvbiBSKGope3ZhciBQOyJvYmplY3QiPT10eXBlb2YgaiYmIUYuaXNCdWZmZXIoaikmJihQPWoucGFzc3BocmFzZSxqPWoua2V5KSwic3RyaW5nIj09dHlwZW9mIGomJihqPUYuZnJvbShqKSk7dmFyIFcsWixMPXAoaixQKSxZPUwudGFnLEI9TC5kYXRhO3N3aXRjaChZKXtjYXNl'@;
put 'IkNFUlRJRklDQVRFIjpaPUQuY2VydGlmaWNhdGUuZGVjb2RlKEIsImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFp8fChaPUQuUHVibGljS2V5LmRlY29kZShCLCJkZXIiKSksVz1aLmFsZ29yaXRobS5hbGdvcml0aG0u'@;
put 'am9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gRC5SU0FQdWJsaWNLZXkuZGVjb2RlKFouc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gWi5zdWJqZWN0UHJpdmF0ZUtleT1aLnN1YmplY3RQdWJsaWNL'@;
put 'ZXkse3R5cGU6ImVjIixkYXRhOlp9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBaLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1ELkRTQXBhcmFtLmRlY29kZShaLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpaLmFsZ29yaXRobS5wYXJhbXN9'@;
put 'O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpCPWZ1bmN0aW9uIEgoaixQKXt2YXIgTD1qLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxZPXBhcnNlSW50KGouYWxnb3JpdGhtLmRlY3J5'@;
put 'cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxCPV9bai5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFc9ai5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsWj1qLnN1YmplY3RQcml2YXRlS2V5LFg9cGFyc2VJbnQoQi5zcGxpdCgiLSIpWzFd'@;
put 'LDEwKS84LFE9dy5wYmtkZjJTeW5jKFAsTCxZLFgsInNoYTEiKSxxPU4uY3JlYXRlRGVjaXBoZXJpdihCLFEsVyksdGU9W107cmV0dXJuIHRlLnB1c2gocS51cGRhdGUoWikpLHRlLnB1c2gocS5maW5hbCgpKSxGLmNvbmNhdCh0ZSl9KEI9RC5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShC'@;
put 'LCJkZXIiKSxQKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goVz0oWj1ELlByaXZhdGVLZXkuZGVjb2RlKEIsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEQuUlNBUHJpdmF0ZUtleS5kZWNvZGUoWi5zdWJq'@;
put 'ZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOlouYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6RC5FQ1ByaXZhdGVLZXkuZGVjb2RlKFouc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0'@;
put 'MC40LjEiOnJldHVybiBaLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9RC5EU0FwYXJhbS5kZWNvZGUoWi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlouYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlk'@;
put 'ICIrVyl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIEQuUlNBUHVibGljS2V5LmRlY29kZShCLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIEQuUlNBUHJpdmF0ZUtleS5kZWNvZGUoQiwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2Ei'@;
put 'LHBhcmFtczpELkRTQVByaXZhdGVLZXkuZGVjb2RlKEIsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KEI9RC5FQ1ByaXZhdGVLZXkuZGVjb2RlKEIsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6Qi5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93'@;
put 'IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK1kpfX1SLnNpZ25hdHVyZT1ELnNpZ25hdHVyZSxjZS5leHBvcnRzPVJ9LDE3MjU6Y2U9PntjZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGIsRCl7Yi5zdXBlcl89RCxiLnByb3RvdHlwZT1P'@;
put 'YmplY3QuY3JlYXRlKEQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6YixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oYixEKXtiLnN1cGVyXz1EO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1ELnByb3RvdHlwZSxiLnBy'@;
put 'b3RvdHlwZT1uZXcgXyxiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ifX0sMjk3NDpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24oYil7cmV0dXJuIGImJiJvYmplY3QiPT10eXBlb2YgYiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZmlsbCYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIGIucmVhZFVJbnQ4fX0sODA1OTooY2UsSixiKT0+e3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpLHA9LyVbc2RqJV0vZztKLmZvcm1hdD1mdW5jdGlvbihFKXtpZighc2UoRSkpe2Zvcih2YXIgbT1bXSxBPTA7QTxhcmd1bWVudHMubGVuZ3RoO0ErKyltLnB1c2goRihhcmd1'@;
put 'bWVudHNbQV0pKTtyZXR1cm4gbS5qb2luKCIgIil9QT0xO2Zvcih2YXIgYWU9YXJndW1lbnRzLG5lPWFlLmxlbmd0aCxsZT1TdHJpbmcoRSkucmVwbGFjZShwLGZ1bmN0aW9uKFplKXtpZigiJSUiPT09WmUpcmV0dXJuIiUiO2lmKEE+PW5lKXJldHVybiBaZTtzd2l0Y2goWmUpe2Nhc2UiJXMi'@;
put 'OnJldHVybiBTdHJpbmcoYWVbQSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihhZVtBKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFlW0ErK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBaZX19KSx3ZT1hZVtBXTtBPG5lO3dlPWFl'@;
put 'WysrQV0pcSh3ZSl8fCFTZSh3ZSk/bGUrPSIgIit3ZTpsZSs9IiAiK0Yod2UpO3JldHVybiBsZX0sSi5kZXByZWNhdGU9ZnVuY3Rpb24oRSxtKXtpZihfZShiLmcucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEouZGVwcmVjYXRlKEUsbSkuYXBwbHkodGhpcyxhcmd1bWVudHMp'@;
put 'fTtpZighMD09PUQubm9EZXByZWNhdGlvbilyZXR1cm4gRTt2YXIgQT0hMTtyZXR1cm4gZnVuY3Rpb24gYWUoKXtpZighQSl7aWYoRC50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihtKTtELnRyYWNlRGVwcmVjYXRpb24/Xy50cmFjZShtKTpfLmVycm9yKG0pLEE9ITB9cmV0dXJu'@;
put 'IEUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIHcsTj17fTtmdW5jdGlvbiBGKEUsbSl7dmFyIEE9e3NlZW46W10sc3R5bGl6ZTpSfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKEEuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoQS5jb2xvcnM9YXJn'@;
put 'dW1lbnRzWzNdKSxRKG0pP0Euc2hvd0hpZGRlbj1tOm0mJkouX2V4dGVuZChBLG0pLF9lKEEuc2hvd0hpZGRlbikmJihBLnNob3dIaWRkZW49ITEpLF9lKEEuZGVwdGgpJiYoQS5kZXB0aD0yKSxfZShBLmNvbG9ycykmJihBLmNvbG9ycz0hMSksX2UoQS5jdXN0b21JbnNwZWN0KSYmKEEuY3Vz'@;
put 'dG9tSW5zcGVjdD0hMCksQS5jb2xvcnMmJihBLnN0eWxpemU9SCksUChBLEUsQS5kZXB0aCl9ZnVuY3Rpb24gSChFLG0pe3ZhciBBPUYuc3R5bGVzW21dO3JldHVybiBBPyJceDFiWyIrRi5jb2xvcnNbQV1bMF0rIm0iK0UrIlx4MWJbIitGLmNvbG9yc1tBXVsxXSsibSI6RX1mdW5jdGlvbiBS'@;
put 'KEUsbSl7cmV0dXJuIEV9ZnVuY3Rpb24gUChFLG0sQSl7aWYoRS5jdXN0b21JbnNwZWN0JiZtJiZnKG0uaW5zcGVjdCkmJm0uaW5zcGVjdCE9PUouaW5zcGVjdCYmKCFtLmNvbnN0cnVjdG9yfHxtLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW0pKXt2YXIgYWU9bS5pbnNwZWN0KEEsRSk7cmV0'@;
put 'dXJuIHNlKGFlKXx8KGFlPVAoRSxhZSxBKSksYWV9dmFyIG5lPWZ1bmN0aW9uIEwoRSxtKXtpZihfZShtKSlyZXR1cm4gRS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihzZShtKSl7dmFyIEE9IiciK0pTT04uc3RyaW5naWZ5KG0pLnJlcGxhY2UoL14ifCIkL2csIiIpLnJl'@;
put 'cGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIEUuc3R5bGl6ZShBLCJzdHJpbmciKX1yZXR1cm4gaWUobSk/RS5zdHlsaXplKCIiK20sIm51bWJlciIpOlEobSk/RS5zdHlsaXplKCIiK20sImJvb2xlYW4iKTpxKG0pP0Uuc3R5bGl6ZSgibnVsbCIsIm51'@;
put 'bGwiKTp2b2lkIDB9KEUsbSk7aWYobmUpcmV0dXJuIG5lO3ZhciBsZT1PYmplY3Qua2V5cyhtKSx3ZT1mdW5jdGlvbiBqKEUpe3ZhciBtPXt9O3JldHVybiBFLmZvckVhY2goZnVuY3Rpb24oQSxhZSl7bVtBXT0hMH0pLG19KGxlKTtpZihFLnNob3dIaWRkZW4mJihsZT1PYmplY3QuZ2V0T3du'@;
put 'UHJvcGVydHlOYW1lcyhtKSkseihtKSYmKGxlLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8bGUuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIFkobSk7aWYoMD09PWxlLmxlbmd0aCl7aWYoZyhtKSlyZXR1cm4gRS5zdHlsaXplKCJbRnVuY3Rpb24iKyhtLm5hbWU/IjogIittLm5h'@;
put 'bWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKFRlKG0pKXJldHVybiBFLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJyZWdleHAiKTtpZih6ZShtKSlyZXR1cm4gRS5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSksImRhdGUiKTtpZih6KG0p'@;
put 'KXJldHVybiBZKG0pfXZhciBxZSxRZT0iIixhdD0hMSx4ZT1bInsiLCJ9Il07cmV0dXJuIFgobSkmJihhdD0hMCx4ZT1bIlsiLCJdIl0pLGcobSkmJihRZT0iIFtGdW5jdGlvbiIrKG0ubmFtZT8iOiAiK20ubmFtZToiIikrIl0iKSxUZShtKSYmKFFlPSIgIitSZWdFeHAucHJvdG90eXBlLnRv'@;
put 'U3RyaW5nLmNhbGwobSkpLHplKG0pJiYoUWU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwobSkpLHoobSkmJihRZT0iICIrWShtKSksMCE9PWxlLmxlbmd0aHx8YXQmJjAhPW0ubGVuZ3RoP0E8MD9UZShtKT9FLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5j'@;
put 'YWxsKG0pLCJyZWdleHAiKTpFLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihFLnNlZW4ucHVzaChtKSxxZT1hdD9mdW5jdGlvbiBCKEUsbSxBLGFlLG5lKXtmb3IodmFyIGxlPVtdLHdlPTAsWmU9bS5sZW5ndGg7d2U8WmU7Kyt3ZSlVKG0sU3RyaW5nKHdlKSk/bGUucHVzaChXKEUs'@;
put 'bSxBLGFlLFN0cmluZyh3ZSksITApKTpsZS5wdXNoKCIiKTtyZXR1cm4gbmUuZm9yRWFjaChmdW5jdGlvbihRZSl7UWUubWF0Y2goL15cZCskLyl8fGxlLnB1c2goVyhFLG0sQSxhZSxRZSwhMCkpfSksbGV9KEUsbSxBLHdlLGxlKTpsZS5tYXAoZnVuY3Rpb24oamUpe3JldHVybiBXKEUsbSxB'@;
put 'LHdlLGplLGF0KX0pLEUuc2Vlbi5wb3AoKSxmdW5jdGlvbiBaKEUsbSxBKXt2YXIgbmU9RS5yZWR1Y2UoZnVuY3Rpb24obGUsd2Upe3JldHVybiB3ZS5pbmRleE9mKCJcbiIpLGxlK3dlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gbmU+NjA/QVsw'@;
put 'XSsoIiI9PT1tPyIiOm0rIlxuICIpKyIgIitFLmpvaW4oIixcbiAgIikrIiAiK0FbMV06QVswXSttKyIgIitFLmpvaW4oIiwgIikrIiAiK0FbMV19KHFlLFFlLHhlKSk6eGVbMF0rUWUreGVbMV19ZnVuY3Rpb24gWShFKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo'@;
put 'RSkrIl0ifWZ1bmN0aW9uIFcoRSxtLEEsYWUsbmUsbGUpe3ZhciB3ZSxaZSxRZTtpZigoUWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLG5lKXx8e3ZhbHVlOm1bbmVdfSkuZ2V0P1plPUUuc3R5bGl6ZShRZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3Bl'@;
put 'Y2lhbCIpOlFlLnNldCYmKFplPUUuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLFUoYWUsbmUpfHwod2U9IlsiK25lKyJdIiksWmV8fChFLnNlZW4uaW5kZXhPZihRZS52YWx1ZSk8MD8oWmU9cShBKT9QKEUsUWUudmFsdWUsbnVsbCk6UChFLFFlLnZhbHVlLEEtMSkpLmluZGV4T2Yo'@;
put 'IlxuIik+LTEmJihaZT1sZT9aZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiIgICIrYXR9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK1plLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIiAgICIrYXR9KS5qb2luKCJcbiIpKTpaZT1FLnN0eWxpemUo'@;
put 'IltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLF9lKHdlKSl7aWYobGUmJm5lLm1hdGNoKC9eXGQrJC8pKXJldHVybiBaZTsod2U9SlNPTi5zdHJpbmdpZnkoIiIrbmUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh3ZT13ZS5zdWJzdHIoMSx3ZS5sZW5ndGgtMiksd2U9'@;
put 'RS5zdHlsaXplKHdlLCJuYW1lIikpOih3ZT13ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksd2U9RS5zdHlsaXplKHdlLCJzdHJpbmciKSl9cmV0dXJuIHdlKyI6ICIrWmV9ZnVuY3Rpb24gWChFKXtyZXR1cm4gQXJyYXku'@;
put 'aXNBcnJheShFKX1mdW5jdGlvbiBRKEUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIEV9ZnVuY3Rpb24gcShFKXtyZXR1cm4gbnVsbD09PUV9ZnVuY3Rpb24gaWUoRSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFfWZ1bmN0aW9uIHNlKEUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgRX1mdW5j'@;
put 'dGlvbiBfZShFKXtyZXR1cm4gdm9pZCAwPT09RX1mdW5jdGlvbiBUZShFKXtyZXR1cm4gU2UoRSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09eChFKX1mdW5jdGlvbiBTZShFKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEUmJm51bGwhPT1FfWZ1bmN0aW9uIHplKEUpe3JldHVybiBTZShFKSYmIltv'@;
put 'YmplY3QgRGF0ZV0iPT09eChFKX1mdW5jdGlvbiB6KEUpe3JldHVybiBTZShFKSYmKCJbb2JqZWN0IEVycm9yXSI9PT14KEUpfHxFIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGcoRSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEV9ZnVuY3Rpb24geChFKXtyZXR1cm4gT2JqZWN0LnBy'@;
put 'b3RvdHlwZS50b1N0cmluZy5jYWxsKEUpfWZ1bmN0aW9uIEMoRSl7cmV0dXJuIEU8MTA/IjAiK0UudG9TdHJpbmcoMTApOkUudG9TdHJpbmcoMTApfUouZGVidWdsb2c9ZnVuY3Rpb24oRSl7aWYoX2UodykmJih3PUQuZW52Lk5PREVfREVCVUd8fCIiKSxFPUUudG9VcHBlckNhc2UoKSwhTltF'@;
put 'XSlpZihuZXcgUmVnRXhwKCJcXGIiK0UrIlxcYiIsImkiKS50ZXN0KHcpKXt2YXIgbT1ELnBpZDtOW0VdPWZ1bmN0aW9uKCl7dmFyIEE9Si5mb3JtYXQuYXBwbHkoSixhcmd1bWVudHMpO18uZXJyb3IoIiVzICVkOiAlcyIsRSxtLEEpfX1lbHNlIE5bRV09ZnVuY3Rpb24oKXt9O3JldHVybiBO'@;
put 'W0VdfSxKLmluc3BlY3Q9RixGLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzld'@;
put 'LG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sRi5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVn'@;
put 'ZXhwOiJyZWQifSxKLmlzQXJyYXk9WCxKLmlzQm9vbGVhbj1RLEouaXNOdWxsPXEsSi5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiB0ZShFKXtyZXR1cm4gbnVsbD09RX0sSi5pc051bWJlcj1pZSxKLmlzU3RyaW5nPXNlLEouaXNTeW1ib2w9ZnVuY3Rpb24gZ2UoRSl7cmV0dXJuInN5bWJv'@;
put 'bCI9PXR5cGVvZiBFfSxKLmlzVW5kZWZpbmVkPV9lLEouaXNSZWdFeHA9VGUsSi5pc09iamVjdD1TZSxKLmlzRGF0ZT16ZSxKLmlzRXJyb3I9eixKLmlzRnVuY3Rpb249ZyxKLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIHkoRSl7cmV0dXJuIG51bGw9PT1FfHwiYm9vbGVhbiI9PXR5cGVvZiBFfHwi'@;
put 'bnVtYmVyIj09dHlwZW9mIEV8fCJzdHJpbmciPT10eXBlb2YgRXx8InN5bWJvbCI9PXR5cGVvZiBFfHx0eXBlb2YgRT4idSJ9LEouaXNCdWZmZXI9YigyOTc0KTt2YXIgVD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIs'@;
put 'IkRlYyJdO2Z1bmN0aW9uIFUoRSxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsbSl9Si5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gVigpe3ZhciBFPW5ldyBEYXRlLG09W0MoRS5nZXRIb3VycygpKSxDKEUuZ2V0TWludXRl'@;
put 'cygpKSxDKEUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltFLmdldERhdGUoKSxUW0UuZ2V0TW9udGgoKV0sbV0uam9pbigiICIpfSgpLEouZm9ybWF0LmFwcGx5KEosYXJndW1lbnRzKSl9LEouaW5oZXJpdHM9YigxNzI1KSxKLl9leHRlbmQ9ZnVuY3Rpb24oRSxtKXtpZighbXx8'@;
put 'IVNlKG0pKXJldHVybiBFO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhtKSxhZT1BLmxlbmd0aDthZS0tOylFW0FbYWVdXT1tW0FbYWVdXTtyZXR1cm4gRX19LDI1MjA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPSJ3aW4zMiI9PT1ELnBsYXRmb3JtLHA9Yig4MDU5KTtm'@;
put 'dW5jdGlvbiBOKFosWCl7Zm9yKHZhciBRPVtdLHE9MDtxPFoubGVuZ3RoO3ErKyl7dmFyIHRlPVpbcV07IXRlfHwiLiI9PT10ZXx8KCIuLiI9PT10ZT9RLmxlbmd0aCYmIi4uIiE9PVFbUS5sZW5ndGgtMV0/US5wb3AoKTpYJiZRLnB1c2goIi4uIik6US5wdXNoKHRlKSl9cmV0dXJuIFF9ZnVu'@;
put 'Y3Rpb24gdyhaKXtmb3IodmFyIFg9Wi5sZW5ndGgtMSxRPTA7UTw9WCYmIVpbUV07USsrKTtmb3IodmFyIHE9WDtxPj0wJiYhWltxXTtxLS0pO3JldHVybiAwPT09USYmcT09PVg/WjpRPnE/W106Wi5zbGljZShRLHErMSl9dmFyIEY9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xc'@;
put 'XC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sSD0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9dKz98KShcLlteLlwvXFxdKnwpKSg/OltcXFwvXSopJC8sUj17fTtmdW5jdGlvbiBqKFope3ZhciBYPUYuZXhlYyhaKSxRPShYWzFdfHwiIikrKFhbMl18fCIiKSx0ZT1I'@;
put 'LmV4ZWMoWFszXXx8IiIpO3JldHVybltRLHRlWzFdLHRlWzJdLHRlWzNdXX1mdW5jdGlvbiBQKFope3ZhciBYPUYuZXhlYyhaKSxRPVhbMV18fCIiLHE9ISFRJiYiOiIhPT1RWzFdO3JldHVybntkZXZpY2U6USxpc1VuYzpxLGlzQWJzb2x1dGU6cXx8ISFYWzJdLHRhaWw6WFszXX19ZnVuY3Rp'@;
put 'b24gTChaKXtyZXR1cm4iXFxcXCIrWi5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1SLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFo9IiIsWD0iIixRPSExLHE9YXJndW1lbnRzLmxlbmd0aC0xO3E+PS0xO3EtLSl7dmFyIHRlO2lmKHE+PTA/dGU9'@;
put 'YXJndW1lbnRzW3FdOlo/KCEodGU9RC5lbnZbIj0iK1pdKXx8dGUuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKSE9PVoudG9Mb3dlckNhc2UoKSsiXFwiKSYmKHRlPVorIlxcIik6dGU9RC5jd2QoKSwhcC5pc1N0cmluZyh0ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBh'@;
put 'dGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZih0ZSl7dmFyIGllPVAodGUpLHNlPWllLmRldmljZSxnZT1pZS5pc1VuYyxfZT1pZS5pc0Fic29sdXRlLFRlPWllLnRhaWw7aWYoKCFzZXx8IVp8fHNlLnRvTG93ZXJDYXNlKCk9PT1aLnRvTG93ZXJDYXNlKCkpJiYoWnx8KFo9c2UpLFF8'@;
put 'fChYPVRlKyJcXCIrWCxRPV9lKSxaJiZRKSlicmVha319cmV0dXJuIGdlJiYoWj1MKFopKSxaKyhRPyJcXCI6IiIpKyhYPU4oWC5zcGxpdCgvW1xcXC9dKy8pLCFRKS5qb2luKCJcXCIpKXx8Ii4ifSxSLm5vcm1hbGl6ZT1mdW5jdGlvbihaKXt2YXIgWD1QKFopLFE9WC5kZXZpY2UscT1YLmlz'@;
put 'VW5jLHRlPVguaXNBYnNvbHV0ZSxpZT1YLnRhaWwsc2U9L1tcXFwvXSQvLnRlc3QoaWUpO3JldHVybiEoaWU9TihpZS5zcGxpdCgvW1xcXC9dKy8pLCF0ZSkuam9pbigiXFwiKSkmJiF0ZSYmKGllPSIuIiksaWUmJnNlJiYoaWUrPSJcXCIpLHEmJihRPUwoUSkpLFErKHRlPyJcXCI6IiIpK2ll'@;
put 'fSxSLmlzQWJzb2x1dGU9ZnVuY3Rpb24oWil7cmV0dXJuIFAoWikuaXNBYnNvbHV0ZX0sUi5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBaPVtdLFg9MDtYPGFyZ3VtZW50cy5sZW5ndGg7WCsrKXt2YXIgUT1hcmd1bWVudHNbWF07aWYoIXAuaXNTdHJpbmcoUSkpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtRJiZaLnB1c2goUSl9dmFyIHE9Wi5qb2luKCJcXCIpO3JldHVybi9eW1xcXC9dezJ9W15cXFwvXS8udGVzdChaWzBdKXx8KHE9cS5yZXBsYWNlKC9eW1xcXC9dezIsfS8sIlxcIikpLFIubm9ybWFsaXplKHEpfSxS'@;
put 'LnJlbGF0aXZlPWZ1bmN0aW9uKFosWCl7Wj1SLnJlc29sdmUoWiksWD1SLnJlc29sdmUoWCk7Zm9yKHZhciBRPVoudG9Mb3dlckNhc2UoKSxxPVgudG9Mb3dlckNhc2UoKSx0ZT13KFguc3BsaXQoIlxcIikpLGllPXcoUS5zcGxpdCgiXFwiKSksc2U9dyhxLnNwbGl0KCJcXCIpKSxnZT1NYXRo'@;
put 'Lm1pbihpZS5sZW5ndGgsc2UubGVuZ3RoKSxfZT1nZSxUZT0wO1RlPGdlO1RlKyspaWYoaWVbVGVdIT09c2VbVGVdKXtfZT1UZTticmVha31pZigwPT1fZSlyZXR1cm4gWDt2YXIgU2U9W107Zm9yKFRlPV9lO1RlPGllLmxlbmd0aDtUZSsrKVNlLnB1c2goIi4uIik7cmV0dXJuKFNlPVNlLmNv'@;
put 'bmNhdCh0ZS5zbGljZShfZSkpKS5qb2luKCJcXCIpfSxSLl9tYWtlTG9uZz1mdW5jdGlvbihaKXtpZighcC5pc1N0cmluZyhaKSlyZXR1cm4gWjtpZighWilyZXR1cm4iIjt2YXIgWD1SLnJlc29sdmUoWik7cmV0dXJuL15bYS16QS1aXVw6XFwvLnRlc3QoWCk/IlxcXFw/XFwiK1g6L15cXFxc'@;
put 'W14/Ll0vLnRlc3QoWCk/IlxcXFw/XFxVTkNcXCIrWC5zdWJzdHJpbmcoMik6Wn0sUi5kaXJuYW1lPWZ1bmN0aW9uKFope3ZhciBYPWooWiksUT1YWzBdLHE9WFsxXTtyZXR1cm4gUXx8cT8ocSYmKHE9cS5zdWJzdHIoMCxxLmxlbmd0aC0xKSksUStxKToiLiJ9LFIuYmFzZW5hbWU9ZnVuY3Rp'@;
put 'b24oWixYKXt2YXIgUT1qKFopWzJdO3JldHVybiBYJiZRLnN1YnN0cigtMSpYLmxlbmd0aCk9PT1YJiYoUT1RLnN1YnN0cigwLFEubGVuZ3RoLVgubGVuZ3RoKSksUX0sUi5leHRuYW1lPWZ1bmN0aW9uKFope3JldHVybiBqKFopWzNdfSxSLmZvcm1hdD1mdW5jdGlvbihaKXtpZighcC5pc09i'@;
put 'amVjdChaKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgWik7aWYoIXAuaXNTdHJpbmcoWi5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0'@;
put 'cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBaLnJvb3QpO3ZhciBRPVouZGlyLHE9Wi5iYXNlfHwiIjtyZXR1cm4gUT9RW1EubGVuZ3RoLTFdPT09Ui5zZXA/UStxOlErUi5zZXArcTpxfSxSLnBhcnNlPWZ1bmN0aW9uKFope2lmKCFwLmlzU3RyaW5nKFopKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFopO3ZhciBYPWooWik7aWYoIVh8fDQhPT1YLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrWisiJyIpO3JldHVybntyb290OlhbMF0sZGlyOlhbMF0r'@;
put 'WFsxXS5zbGljZSgwLC0xKSxiYXNlOlhbMl0sZXh0OlhbM10sbmFtZTpYWzJdLnNsaWNlKDAsWFsyXS5sZW5ndGgtWFszXS5sZW5ndGgpfX0sUi5zZXA9IlxcIixSLmRlbGltaXRlcj0iOyI7dmFyIFk9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwp'@;
put 'KSg/OltcL10qKSQvLEI9e307ZnVuY3Rpb24gVyhaKXtyZXR1cm4gWS5leGVjKFopLnNsaWNlKDEpfUIucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWj0iIixYPSExLFE9YXJndW1lbnRzLmxlbmd0aC0xO1E+PS0xJiYhWDtRLS0pe3ZhciBxPVE+PTA/YXJndW1lbnRzW1FdOkQuY3dkKCk7'@;
put 'aWYoIXAuaXNTdHJpbmcocSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtxJiYoWj1xKyIvIitaLFg9Ii8iPT09cVswXSl9cmV0dXJuKFg/Ii8iOiIiKSsoWj1OKFouc3BsaXQoIi8iKSwhWCkuam9pbigiLyIpKXx8Ii4i'@;
put 'fSxCLm5vcm1hbGl6ZT1mdW5jdGlvbihaKXt2YXIgWD1CLmlzQWJzb2x1dGUoWiksUT1aJiYiLyI9PT1aW1oubGVuZ3RoLTFdO3JldHVybiEoWj1OKFouc3BsaXQoIi8iKSwhWCkuam9pbigiLyIpKSYmIVgmJihaPSIuIiksWiYmUSYmKForPSIvIiksKFg/Ii8iOiIiKStafSxCLmlzQWJzb2x1'@;
put 'dGU9ZnVuY3Rpb24oWil7cmV0dXJuIi8iPT09Wi5jaGFyQXQoMCl9LEIuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgWj0iIixYPTA7WDxhcmd1bWVudHMubGVuZ3RoO1grKyl7dmFyIFE9YXJndW1lbnRzW1hdO2lmKCFwLmlzU3RyaW5nKFEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50'@;
put 'cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7USYmKForPVo/Ii8iK1E6USl9cmV0dXJuIEIubm9ybWFsaXplKFopfSxCLnJlbGF0aXZlPWZ1bmN0aW9uKFosWCl7Wj1CLnJlc29sdmUoWikuc3Vic3RyKDEpLFg9Qi5yZXNvbHZlKFgpLnN1YnN0cigxKTtmb3IodmFyIFE9dyhaLnNw'@;
put 'bGl0KCIvIikpLHE9dyhYLnNwbGl0KCIvIikpLHRlPU1hdGgubWluKFEubGVuZ3RoLHEubGVuZ3RoKSxpZT10ZSxzZT0wO3NlPHRlO3NlKyspaWYoUVtzZV0hPT1xW3NlXSl7aWU9c2U7YnJlYWt9dmFyIGdlPVtdO2ZvcihzZT1pZTtzZTxRLmxlbmd0aDtzZSsrKWdlLnB1c2goIi4uIik7cmV0'@;
put 'dXJuKGdlPWdlLmNvbmNhdChxLnNsaWNlKGllKSkpLmpvaW4oIi8iKX0sQi5fbWFrZUxvbmc9ZnVuY3Rpb24oWil7cmV0dXJuIFp9LEIuZGlybmFtZT1mdW5jdGlvbihaKXt2YXIgWD1XKFopLFE9WFswXSxxPVhbMV07cmV0dXJuIFF8fHE/KHEmJihxPXEuc3Vic3RyKDAscS5sZW5ndGgtMSkp'@;
put 'LFErcSk6Ii4ifSxCLmJhc2VuYW1lPWZ1bmN0aW9uKFosWCl7dmFyIFE9VyhaKVsyXTtyZXR1cm4gWCYmUS5zdWJzdHIoLTEqWC5sZW5ndGgpPT09WCYmKFE9US5zdWJzdHIoMCxRLmxlbmd0aC1YLmxlbmd0aCkpLFF9LEIuZXh0bmFtZT1mdW5jdGlvbihaKXtyZXR1cm4gVyhaKVszXX0sQi5m'@;
put 'b3JtYXQ9ZnVuY3Rpb24oWil7aWYoIXAuaXNPYmplY3QoWikpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIFopO2lmKCFwLmlzU3RyaW5nKFoucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidw'@;
put 'YXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgWi5yb290KTtyZXR1cm4oWi5kaXI/Wi5kaXIrQi5zZXA6IiIpKyhaLmJhc2V8fCIiKX0sQi5wYXJzZT1mdW5jdGlvbihaKXtpZighcC5pc1N0cmluZyhaKSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBaKTt2YXIgWD1XKFopO2lmKCFYfHw0IT09WC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK1orIiciKTtyZXR1cm4gWFsxXT1YWzFdfHwiIixYWzJdPVhb'@;
put 'Ml18fCIiLFhbM109WFszXXx8IiIse3Jvb3Q6WFswXSxkaXI6WFswXStYWzFdLnNsaWNlKDAsLTEpLGJhc2U6WFsyXSxleHQ6WFszXSxuYW1lOlhbMl0uc2xpY2UoMCxYWzJdLmxlbmd0aC1YWzNdLmxlbmd0aCl9fSxCLnNlcD0iLyIsQi5kZWxpbWl0ZXI9IjoiLGNlLmV4cG9ydHM9Xz9SOkIs'@;
put 'Y2UuZXhwb3J0cy5wb3NpeD1CLGNlLmV4cG9ydHMud2luMzI9Un0sNTYzMjooY2UsSixiKT0+e0oucGJrZGYyPWIoODYzOCksSi5wYmtkZjJTeW5jPWIoMTI1Nyl9LDg2Mzg6KGNlLEosYik9Pnt2YXIgRixMLEQ9Yig5NTA5KS5CdWZmZXIsXz1iKDczNTcpLHA9YigyMzY4KSxOPWIoMTI1Nyks'@;
put 'dz1iKDc3NzcpLEg9Yi5nLmNyeXB0byYmYi5nLmNyeXB0by5zdWJ0bGUsUj17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEt'@;
put 'NTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0saj1bXTtmdW5jdGlvbiBZKCl7cmV0dXJuIEx8fChMPWIuZy5wcm9jZXNzJiZiLmcucHJvY2Vzcy5uZXh0VGljaz9iLmcucHJvY2Vzcy5uZXh0VGljazpiLmcucXVldWVNaWNyb3Rhc2s/Yi5nLnF1ZXVlTWljcm90YXNrOmIuZy5zZXRJ'@;
put 'bW1lZGlhdGU/Yi5nLnNldEltbWVkaWF0ZTpiLmcuc2V0VGltZW91dCl9ZnVuY3Rpb24gQihaLFgsUSxxLHRlKXtyZXR1cm4gSC5pbXBvcnRLZXkoInJhdyIsWix7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBILmRlcml2ZUJpdHMo'@;
put 'e25hbWU6IlBCS0RGMiIsc2FsdDpYLGl0ZXJhdGlvbnM6USxoYXNoOntuYW1lOnRlfX0saWUscTw8Myl9KS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gRC5mcm9tKGllKX0pfWNlLmV4cG9ydHM9ZnVuY3Rpb24oWixYLFEscSx0ZSxpZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHRlJiYoaWU9dGUs'@;
put 'dGU9dm9pZCAwKTt2YXIgc2U9UlsodGU9dGV8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYoc2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmcuUHJvbWlzZSl7aWYoXyhRLHEpLFo9dyhaLHAsIlBhc3N3b3JkIiksWD13KFgscCwiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBXKFosWCl7Wi50aGVuKGZ1bmN0aW9uKFEpe1koKShmdW5jdGlvbigpe1gobnVsbCxRKX0pfSxmdW5jdGlvbihRKXtZKCkoZnVuY3Rpb24oKXtYKFEpfSl9KX0oZnVuY3Rpb24gUChaKXtpZihiLmcu'@;
put 'cHJvY2VzcyYmIWIuZy5wcm9jZXNzLmJyb3dzZXJ8fCFIfHwhSC5pbXBvcnRLZXl8fCFILmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09altaXSlyZXR1cm4galtaXTt2YXIgWD1CKEY9Rnx8RC5hbGxvYyg4KSxGLDEwLDEyOCxaKS50aGVuKGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIGpbWl09WCxYfShzZSkudGhlbihmdW5jdGlvbihnZSl7cmV0dXJuIGdlP0IoWixYLFEscSxzZSk6TihaLFgsUSxxLHRlKX0pLGllKX1lbHNlIFkoKShmdW5jdGlvbigpe3ZhciBnZTt0cnl7Z2U9Tiha'@;
put 'LFgsUSxxLHRlKX1jYXRjaChfZSl7cmV0dXJuIGllKF9lKX1pZShudWxsLGdlKX0pfX0sMjM2ODooY2UsSixiKT0+e3ZhciBfLEQ9Yig0MTU1KTtfPWIuZy5wcm9jZXNzJiZiLmcucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Yi5nLnByb2Nlc3MmJmIuZy5wcm9jZXNzLnZlcnNpb24/cGFyc2VJ'@;
put 'bnQoRC52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04IixjZS5leHBvcnRzPV99LDczNTc6Y2U9Pnt2YXIgSj1NYXRoLnBvdygyLDMwKS0xO2NlLmV4cG9ydHM9ZnVuY3Rpb24oYixEKXtpZigibnVtYmVyIiE9dHlwZW9mIGIpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihiPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIEQpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihEPDB8'@;
put 'fEQ+Snx8RCE9RCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sMTI1NzooY2UsSixiKT0+e3ZhciBEPWIoODAyOCksXz1iKDk3ODUpLHA9Yig5MDcyKSxOPWIoOTUwOSkuQnVmZmVyLHc9Yig3MzU3KSxGPWIoMjM2OCksSD1iKDc3NzcpLFI9Ti5hbGxvYygxMjgpLGo9'@;
put 'e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBQKEIsVyxaKXt2YXIgWD1mdW5jdGlvbiBMKEIpe3JldHVybiJybWQxNjAiPT09Qnx8InJpcGVtZDE2MCI9PT1CP2Z1bmN0aW9uIFoo'@;
put 'WCl7cmV0dXJuKG5ldyBfKS51cGRhdGUoWCkuZGlnZXN0KCl9OiJtZDUiPT09Qj9EOmZ1bmN0aW9uIFcoWCl7cmV0dXJuIHAoQikudXBkYXRlKFgpLmRpZ2VzdCgpfX0oQiksUT0ic2hhNTEyIj09PUJ8fCJzaGEzODQiPT09Qj8xMjg6NjQ7Vy5sZW5ndGg+UT9XPVgoVyk6Vy5sZW5ndGg8USYm'@;
put 'KFc9Ti5jb25jYXQoW1csUl0sUSkpO2Zvcih2YXIgcT1OLmFsbG9jVW5zYWZlKFEraltCXSksdGU9Ti5hbGxvY1Vuc2FmZShRK2pbQl0pLGllPTA7aWU8UTtpZSsrKXFbaWVdPTU0XldbaWVdLHRlW2llXT05Ml5XW2llXTt2YXIgc2U9Ti5hbGxvY1Vuc2FmZShRK1orNCk7cS5jb3B5KHNlLDAs'@;
put 'MCxRKSx0aGlzLmlwYWQxPXNlLHRoaXMuaXBhZDI9cSx0aGlzLm9wYWQ9dGUsdGhpcy5hbGc9Qix0aGlzLmJsb2Nrc2l6ZT1RLHRoaXMuaGFzaD1YLHRoaXMuc2l6ZT1qW0JdfVAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihCLFcpe3JldHVybiBCLmNvcHkoVyx0aGlzLmJsb2Nrc2l6ZSksdGhp'@;
put 'cy5oYXNoKFcpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sY2UuZXhwb3J0cz1mdW5jdGlvbiBZKEIsVyxaLFgsUSl7dyhaLFgpO3ZhciBxPW5ldyBQKFE9UXx8InNoYTEiLEI9SChCLEYsIlBhc3N3b3JkIiksKFc9SChXLEYsIlNhbHQiKSku'@;
put 'bGVuZ3RoKSx0ZT1OLmFsbG9jVW5zYWZlKFgpLGllPU4uYWxsb2NVbnNhZmUoVy5sZW5ndGgrNCk7Vy5jb3B5KGllLDAsMCxXLmxlbmd0aCk7Zm9yKHZhciBzZT0wLGdlPWpbUV0sX2U9TWF0aC5jZWlsKFgvZ2UpLFRlPTE7VGU8PV9lO1RlKyspe2llLndyaXRlVUludDMyQkUoVGUsVy5sZW5n'@;
put 'dGgpO2Zvcih2YXIgU2U9cS5ydW4oaWUscS5pcGFkMSksemU9U2Usej0xO3o8Wjt6Kyspe3plPXEucnVuKHplLHEuaXBhZDIpO2Zvcih2YXIgZz0wO2c8Z2U7ZysrKVNlW2ddXj16ZVtnXX1TZS5jb3B5KHRlLHNlKSxzZSs9Z2V9cmV0dXJuIHRlfX0sNzc3NzooY2UsSixiKT0+e3ZhciBEPWIo'@;
put 'OTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwLE4pe2lmKEQuaXNCdWZmZXIoXykpcmV0dXJuIF87aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBELmZyb20oXyxwKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoXykpcmV0dXJuIEQuZnJvbShfLmJ1ZmZlcik7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcihOKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTkwODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5'@;
put 'IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDgyMTI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1'@;
put 'KTtjZS5leHBvcnRzPXR5cGVvZiBEPiJ1Inx8IUQudmVyc2lvbnx8MD09PUQudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PUQudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PUQudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlvbiBfKHAsTix3LEYpe2lmKCJm'@;
put 'dW5jdGlvbiIhPXR5cGVvZiBwKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIFIsaixIPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKEgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIEQubmV4dFRpY2socCk7Y2FzZSAyOnJldHVy'@;
put 'biBELm5leHRUaWNrKGZ1bmN0aW9uKCl7cC5jYWxsKG51bGwsTil9KTtjYXNlIDM6cmV0dXJuIEQubmV4dFRpY2soZnVuY3Rpb24oKXtwLmNhbGwobnVsbCxOLHcpfSk7Y2FzZSA0OnJldHVybiBELm5leHRUaWNrKGZ1bmN0aW9uKCl7cC5jYWxsKG51bGwsTix3LEYpfSk7ZGVmYXVsdDpmb3Io'@;
put 'Uj1uZXcgQXJyYXkoSC0xKSxqPTA7ajxSLmxlbmd0aDspUltqKytdPWFyZ3VtZW50c1tqXTtyZXR1cm4gRC5uZXh0VGljayhmdW5jdGlvbigpe3AuYXBwbHkobnVsbCxSKX0pfX19OkR9LDQxNTU6Y2U9Pnt2YXIgYixELEo9Y2UuZXhwb3J0cz17fTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcCgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gTihXKXtpZihiPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChXLDApO2lmKChi'@;
put 'PT09X3x8IWIpJiZzZXRUaW1lb3V0KXJldHVybiBiPXNldFRpbWVvdXQsc2V0VGltZW91dChXLDApO3RyeXtyZXR1cm4gYihXLDApfWNhdGNoe3RyeXtyZXR1cm4gYi5jYWxsKG51bGwsVywwKX1jYXRjaHtyZXR1cm4gYi5jYWxsKHRoaXMsVywwKX19fSFmdW5jdGlvbigpe3RyeXtiPSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6X31jYXRjaHtiPV99dHJ5e0Q9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6cH1jYXRjaHtEPXB9fSgpO3ZhciBSLEY9W10sSD0hMSxqPS0xO2Z1bmN0aW9uIFAoKXshSHx8IVJ8fChIPSExLFIu'@;
put 'bGVuZ3RoP0Y9Ui5jb25jYXQoRik6aj0tMSxGLmxlbmd0aCYmTCgpKX1mdW5jdGlvbiBMKCl7aWYoIUgpe3ZhciBXPU4oUCk7SD0hMDtmb3IodmFyIFo9Ri5sZW5ndGg7Wjspe2ZvcihSPUYsRj1bXTsrK2o8WjspUiYmUltqXS5ydW4oKTtqPS0xLFo9Ri5sZW5ndGh9Uj1udWxsLEg9ITEsZnVu'@;
put 'Y3Rpb24gdyhXKXtpZihEPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoVyk7aWYoKEQ9PT1wfHwhRCkmJmNsZWFyVGltZW91dClyZXR1cm4gRD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KFcpO3RyeXtyZXR1cm4gRChXKX1jYXRjaHt0cnl7cmV0dXJuIEQuY2FsbChudWxs'@;
put 'LFcpfWNhdGNoe3JldHVybiBELmNhbGwodGhpcyxXKX19fShXKX19ZnVuY3Rpb24gWShXLFope3RoaXMuZnVuPVcsdGhpcy5hcnJheT1afWZ1bmN0aW9uIEIoKXt9Si5uZXh0VGljaz1mdW5jdGlvbihXKXt2YXIgWj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEpZm9yKHZhciBYPTE7WDxhcmd1bWVudHMubGVuZ3RoO1grKylaW1gtMV09YXJndW1lbnRzW1hdO0YucHVzaChuZXcgWShXLFopKSwxPT09Ri5sZW5ndGgmJiFIJiZOKEwpfSxZLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkp'@;
put 'fSxKLnRpdGxlPSJicm93c2VyIixKLmJyb3dzZXI9ITAsSi5lbnY9e30sSi5hcmd2PVtdLEoudmVyc2lvbj0iIixKLnZlcnNpb25zPXt9LEoub249QixKLmFkZExpc3RlbmVyPUIsSi5vbmNlPUIsSi5vZmY9QixKLnJlbW92ZUxpc3RlbmVyPUIsSi5yZW1vdmVBbGxMaXN0ZW5lcnM9QixKLmVt'@;
put 'aXQ9QixKLnByZXBlbmRMaXN0ZW5lcj1CLEoucHJlcGVuZE9uY2VMaXN0ZW5lcj1CLEoubGlzdGVuZXJzPWZ1bmN0aW9uKFcpe3JldHVybltdfSxKLmJpbmRpbmc9ZnVuY3Rpb24oVyl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxKLmN3ZD1m'@;
put 'dW5jdGlvbigpe3JldHVybiIvIn0sSi5jaGRpcj1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxKLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSw3OTAwOihjZSxKLGIpPT57Si5wdWJsaWNFbmNyeXB0PWIoNjU1OSksSi5w'@;
put 'cml2YXRlRGVjcnlwdD1iKDYxMzgpLEoucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gSi5wdWJsaWNFbmNyeXB0KF8scCwhMCl9LEoucHVibGljRGVjcnlwdD1mdW5jdGlvbihfLHApe3JldHVybiBKLnByaXZhdGVEZWNyeXB0KF8scCwhMCl9fSw5MTk5OihjZSxKLGIpPT57'@;
put 'dmFyIEQ9YigzNDgyKSxfPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIHAoTil7dmFyIHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKE4sMCksd31jZS5leHBvcnRzPWZ1bmN0aW9uKE4sdyl7Zm9yKHZhciBSLEY9Xy5hbGxvYygwKSxIPTA7Ri5sZW5ndGg8dzspUj1w'@;
put 'KEgrKyksRj1fLmNvbmNhdChbRixEKCJzaGExIikudXBkYXRlKE4pLnVwZGF0ZShSKS5kaWdlc3QoKV0pO3JldHVybiBGLnNsaWNlKDAsdyl9fSwyMTQ0OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQsXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeixnKXtpZigheil0aHJvdyBuZXcg'@;
put 'RXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBOKHosZyl7ei5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsei5wcm90b3R5cGU9bmV3IHksei5wcm90b3R5cGUuY29uc3RydWN0b3I9en1mdW5jdGlvbiB3KHosZyx5KXtpZih3'@;
put 'LmlzQk4oeikpcmV0dXJuIHo7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXomJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KHp8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBGOyJvYmpl'@;
put 'Y3QiPT10eXBlb2YgRD9ELmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e0Y9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNzEwOCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBIKHosZyl7dmFyIHk9ei5j'@;
put 'aGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKHosZyx5KXt2YXIgeD1IKHoseSk7cmV0dXJuIHktMT49ZyYmKHh8PUgoeix5LTEpPDw0KSx4fWZ1bmN0aW9uIGooeixnLHkseCl7Zm9yKHZhciBDPTAsVD1N'@;
put 'YXRoLm1pbih6Lmxlbmd0aCx5KSxWPWc7VjxUO1YrKyl7dmFyIFU9ei5jaGFyQ29kZUF0KFYpLTQ4O0MqPXgsQys9VT49NDk/VS00OSsxMDpVPj0xNz9VLTE3KzEwOlV9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3Qi'@;
put 'PT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90'@;
put 'b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5'@;
put 'Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0'@;
put 'aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5'@;
put 'OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYm'@;
put 'dGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlz'@;
put 'Lmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxWLFU9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMp'@;
put 'dGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlz'@;
put 'LndvcmRzW1RdfD0oVj1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihn'@;
put 'LHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBVLFQ9MCxWPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgt'@;
put 'MTtDPj15O0MtPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpVT1SKGcseSxDKTw8VCx0aGlz'@;
put 'LndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtU'@;
put 'PD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIFY9Zy5sZW5ndGgteCxVPVYlQyxFPU1hdGgubWluKFYsVi1VKSt4LG09MCxBPXg7QTxFO0ErPUMpbT1qKGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9'@;
put 'bTp0aGlzLl9pYWRkbihtKTtpZigwIT09VSl7dmFyIGFlPTE7Zm9yKG09aihnLEEsZy5sZW5ndGgseSksQT0wO0E8VTtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3'@;
put 'LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVk'@;
put 'PXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1'@;
put 'cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgUD1bIiIsIjAi'@;
put 'LCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQz'@;
put 'Miw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1'@;
put 'MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZl'@;
put 'XnoubmVnYXRpdmU7dmFyIHg9ei5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHx6LndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLFY9QypULEU9Vi82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmVjtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9'@;
put 'RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxsZT1NYXRoLm1heCgwLG0tei5sZW5ndGgrMSk7bGU8PW5lO2xlKyspQSs9KFY9KEM9MHx6LndvcmRzW20tbGV8MF0pKihUPTB8Zy53b3Jkc1tsZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJlY7eS53'@;
put 'b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAs'@;
put 'VD0wLFY9MDtWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9dGhpcy53b3Jkc1tWXSxFPSgxNjc3NzIxNSYoVTw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9VT4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LFYtLSkseD0wIT09VHx8ViE9PXRoaXMubGVuZ3RoLTE/UFs2LUUubGVuZ3Ro'@;
put 'XStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPUxbZ10sQT1ZW2ddO3g9IiI7dmFyIGFlPXRoaXMu'@;
put 'Y2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpQW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9'@;
put 'MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/'@;
put 'Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJp'@;
put 'dHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIEY8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEYsZyx5'@;
put 'KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJi'@;
put 'eXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLFY9ImxlIj09PXksVT1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihWKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylF'@;
put 'PUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW21dPUU7Zm9yKDttPFQ7bSsrKVVbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKVVbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW1QtbS0xXT1FfXJldHVybiBVfSx3LnByb3RvdHlw'@;
put 'ZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYo'@;
put 'eCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4gODE5MSZ5fHwoeCs9MTMseT4+Pj0xMyksMTI3Jnl8fCh4Kz03LHk+Pj49NyksMTUmeXx8KHgrPTQseT4+Pj00KSwzJnl8fCh4Kz0y'@;
put 'LHk+Pj49MiksMSZ5fHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtp'@;
put 'Zih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3Ro'@;
put 'KytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT10aGlzLndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5p'@;
put 'dW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMu'@;
put 'Y2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jk'@;
put 'c1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0s'@;
put 'dy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHkseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7'@;
put 'Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3'@;
put 'LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25l'@;
put 'KCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7'@;
put 'QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlu'@;
put 'b3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcseSl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8'@;
put 'PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgeSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigp'@;
put 'O2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsVj0wO1Y8'@;
put 'Qy5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrKDB8Qy53b3Jkc1tWXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmVjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtpZih0'@;
put 'aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO1Y8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09eC53b3Jkc1tWXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9u'@;
put 'KGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlz'@;
put 'Lm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJu'@;
put 'IGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdh'@;
put 'dGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBWPTAsVT0wO1U8VC5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSktKDB8VC53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4'@;
put 'NjMmeTtmb3IoOzAhPT1WJiZVPEMubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7aWYoMD09PVYmJlU8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7VTxDLmxlbmd0aDtVKyspdGhpcy53b3Jkc1tVXT1DLndvcmRzW1VdO3JldHVy'@;
put 'biB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxVKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgWj1mdW5jdGlvbihnLHkseCl7dmFyIEUs'@;
put 'bSxBLEM9Zy53b3JkcyxUPXkud29yZHMsVj14LndvcmRzLFU9MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxsZT1hZT4+PjEzLHdlPTB8Q1sxXSxaZT04MTkxJndlLFFlPXdlPj4+MTMsYXQ9MHxDWzJdLHhlPTgxOTEmYXQsdmU9YXQ+Pj4xMyxxZT0wfENbM10samU9ODE5MSZxZSxBZT1xZT4+PjEz'@;
put 'LEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsSGU9MHxDWzVdLERlPTgxOTEmSGUsa2U9SGU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxKZT1fdD4+PjEzLG9uPTB8Q1s3XSx5dD04MTkxJm9uLE10PW9uPj4+MTMsSXQ9MHxDWzhdLHJ0PTgxOTEmSXQsS2U9SXQ+Pj4xMyx0dD0w'@;
put 'fENbOV0sTmU9ODE5MSZ0dCx1dD10dD4+PjEzLEp0PTB8VFswXSxMdD04MTkxJkp0LFB0PUp0Pj4+MTMsb2k9MHxUWzFdLGVuPTgxOTEmb2ksc249b2k+Pj4xMyxJaT0wfFRbMl0sZG49ODE5MSZJaSxmdD1JaT4+PjEzLEZyPTB8VFszXSxadD04MTkxJkZyLGt0PUZyPj4+MTMsTG49MHxUWzRd'@;
put 'LG90PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxBdD1uaT4+PjEzLGlyPTB8VFs2XSxodD04MTkxJmlyLEV0PWlyPj4+MTMsem49MHxUWzddLGFuPTgxOTEmem4sanQ9em4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxmbj1kaT4+PjEzLERpPTB8VFs5XSxRdD04'@;
put 'MTkxJkRpLHRuPURpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGNhPShVKyhFPU1hdGguaW11bChuZSxMdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUHQpKStNYXRoLmltdWwobGUsTHQpfDApKTw8MTMpfDA7VT0oKEE9TWF0'@;
put 'aC5pbXVsKGxlLFB0KSkrKG0+Pj4xMyl8MCkrKGNhPj4+MjYpfDAsY2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFplLEx0KSxtPShtPU1hdGguaW11bChaZSxQdCkpK01hdGguaW11bChRZSxMdCl8MCxBPU1hdGguaW11bChRZSxQdCk7dmFyIHhpPShVKyhFPUUrTWF0aC5pbXVsKG5lLGVuKXww'@;
put 'KXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChsZSxlbil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxzbil8MCkrKG0+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEx0KSxtPShtPU1hdGguaW11'@;
put 'bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxMdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChaZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKFplLHNuKXwwKStNYXRoLmltdWwoUWUsZW4pfDAsQT1BK01hdGguaW11bChRZSxzbil8MDt2YXIgeXI9KFUrKEU9RStNYXRoLmltdWwo'@;
put 'bmUsZG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGxlLGRuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZ0KXwwKSsobT4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsTHQpLG09KG09'@;
put 'TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKEFlLEx0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLGVuKXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxlbil8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoWmUs'@;
put 'ZG4pfDAsbT0obT1tK01hdGguaW11bChaZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDA7dmFyIEduPShVKyhFPUUrTWF0aC5pbXVsKG5lLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsa3QpfDApK01hdGguaW11bChsZSxadCl8'@;
put 'MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxrdCl8MCkrKG0+Pj4xMyl8MCkrKEduPj4+MjYpfDAsR24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLEx0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxMdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGgu'@;
put 'aW11bChqZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoQWUsZW4pfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxkbil8MCxBPUErTWF0aC5pbXVs'@;
put 'KHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoWmUsWnQpfDAsbT0obT1tK01hdGguaW11bChaZSxrdCl8MCkrTWF0aC5pbXVsKFFlLFp0KXwwLEE9QStNYXRoLmltdWwoUWUsa3QpfDA7dmFyIEtpPShVKyhFPUUrTWF0aC5pbXVsKG5lLG90KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo'@;
put 'bmUsenQpfDApK01hdGguaW11bChsZSxvdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKERlLEx0KSxtPShtPU1hdGguaW11bChEZSxQdCkpK01hdGguaW11bChrZSxMdCl8MCxB'@;
put 'PU1hdGguaW11bChrZSxQdCksRT1FK01hdGguaW11bChSZSxlbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsZW4pfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGgu'@;
put 'aW11bChBZSxkbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsWnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxrdCl8MCkrTWF0aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsa3QpfDAsRT1FK01hdGguaW11bChaZSxvdCl8MCxtPShtPW0rTWF0aC5p'@;
put 'bXVsKFplLHp0KXwwKStNYXRoLmltdWwoUWUsb3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MDt2YXIgSnI9KFUrKEU9RStNYXRoLmltdWwobmUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFdlKXwwKSk8PDEzKXwwO1U9KChBPUEr'@;
put 'TWF0aC5pbXVsKGxlLEF0KXwwKSsobT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsTHQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKEplLEx0KXwwLEE9TWF0aC5pbXVsKEplLFB0KSxFPUUrTWF0aC5pbXVsKERlLGVuKXwwLG09KG09'@;
put 'bStNYXRoLmltdWwoRGUsc24pfDApK01hdGguaW11bChrZSxlbil8MCxBPUErTWF0aC5pbXVsKGtlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGRuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGgu'@;
put 'aW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLGt0KXwwKStNYXRoLmltdWwoQWUsWnQpfDAsQT1BK01hdGguaW11bChBZSxrdCl8MCxFPUUrTWF0aC5pbXVsKHhlLG90KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxvdCl8MCxBPUErTWF0aC5pbXVs'@;
put 'KHZlLHp0KXwwLEU9RStNYXRoLmltdWwoWmUsV2UpfDAsbT0obT1tK01hdGguaW11bChaZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDA7dmFyIFFyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo'@;
put 'bmUsRXQpfDApK01hdGguaW11bChsZSxodCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxFdCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LEx0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxMdCl8MCxB'@;
put 'PU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxlbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoSmUsZW4pfDAsQT1BK01hdGguaW11bChKZSxzbil8MCxFPUUrTWF0aC5pbXVsKERlLGRuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZnQpfDApK01hdGgu'@;
put 'aW11bChrZSxkbil8MCxBPUErTWF0aC5pbXVsKGtlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxrdCl8MCkrTWF0aC5pbXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsa3QpfDAsRT1FK01hdGguaW11bChqZSxvdCl8MCxtPShtPW0rTWF0aC5p'@;
put 'bXVsKGplLHp0KXwwKStNYXRoLmltdWwoQWUsb3QpfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoWmUs'@;
put 'aHQpfDAsbT0obT1tK01hdGguaW11bChaZSxFdCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUsRXQpfDA7dmFyIE5pPShVKyhFPUUrTWF0aC5pbXVsKG5lLGFuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsanQpfDApK01hdGguaW11bChsZSxhbil8'@;
put 'MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEx0KSxtPShtPU1hdGguaW11bChydCxQdCkpK01hdGguaW11bChLZSxMdCl8MCxBPU1hdGguaW11bChLZSxQdCksRT1FK01hdGgu'@;
put 'aW11bCh5dCxlbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsZW4pfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGRuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVs'@;
put 'KEplLGZ0KXwwLEU9RStNYXRoLmltdWwoRGUsWnQpfDAsbT0obT1tK01hdGguaW11bChEZSxrdCl8MCkrTWF0aC5pbXVsKGtlLFp0KXwwLEE9QStNYXRoLmltdWwoa2Usa3QpfDAsRT1FK01hdGguaW11bChSZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUs'@;
put 'b3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxF'@;
put 'dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUsRXQpfDAsRT1FK01hdGguaW11bChaZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKFplLGp0KXwwKStNYXRoLmltdWwoUWUsYW4pfDAsQT1BK01hdGguaW11bChRZSxqdCl8MDt2YXIgSGk9KFUrKEU9RStNYXRoLmltdWwo'@;
put 'bmUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmbil8MCkrTWF0aC5pbXVsKGxlLGNuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZuKXwwKSsobT4+PjEzKXwwKSsoSGk+Pj4yNil8MCxIaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsTHQpLG09KG09'@;
put 'TWF0aC5pbXVsKE5lLFB0KSkrTWF0aC5pbXVsKHV0LEx0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKHJ0LGVuKXwwLG09KG09bStNYXRoLmltdWwocnQsc24pfDApK01hdGguaW11bChLZSxlbil8MCxBPUErTWF0aC5pbXVsKEtlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQs'@;
put 'ZG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGRuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LGt0KXwwKStNYXRoLmltdWwoSmUsWnQpfDAsQT1BK01hdGguaW11bChKZSxrdCl8'@;
put 'MCxFPUUrTWF0aC5pbXVsKERlLG90KXwwLG09KG09bStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxvdCl8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9'@;
put 'QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEV0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSxFdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGFuKXwwLG09KG09bStNYXRoLmltdWwoeGUsanQpfDApK01h'@;
put 'dGguaW11bCh2ZSxhbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoWmUsY24pfDAsbT0obT1tK01hdGguaW11bChaZSxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIElhPShVKyhFPUUrTWF0aC5pbXVsKG5lLFF0KXww'@;
put 'KXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsdG4pfDApK01hdGguaW11bChsZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx0bil8MCkrKG0+Pj4xMyl8MCkrKElhPj4+MjYpfDAsSWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGVuKSxtPShtPU1hdGguaW11'@;
put 'bChOZSxzbikpK01hdGguaW11bCh1dCxlbil8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChydCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGZ0KXwwKStNYXRoLmltdWwoS2UsZG4pfDAsQT1BK01hdGguaW11bChLZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoeXQsa3QpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LGt0KXwwLEU9RStNYXRoLmltdWwobnQsb3QpfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKEplLG90KXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDAsRT1FK01h'@;
put 'dGguaW11bChEZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV2UpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUsRXQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKEllLEV0KXwwLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKEFlLGFuKXwwLEE9QStNYXRoLmltdWwoQWUsanQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwo'@;
put 'dmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgUHI9KFUrKEU9RStNYXRoLmltdWwoWmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChaZSx0bil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+'@;
put 'PjEzKXwwKSsoUHI+Pj4yNil8MCxQciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsZG4pLG09KG09TWF0aC5pbXVsKE5lLGZ0KSkrTWF0aC5pbXVsKHV0LGRuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKHJ0LFp0KXwwLG09KG09bStNYXRoLmltdWwocnQsa3QpfDApK01h'@;
put 'dGguaW11bChLZSxadCl8MCxBPUErTWF0aC5pbXVsKEtlLGt0KXwwLEU9RStNYXRoLmltdWwoeXQsb3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LG90KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MCxFPUUrTWF0aC5pbXVsKERlLGh0KXwwLG09KG09bStNYXRoLmltdWwoRGUsRXQpfDApK01hdGguaW11bChrZSxodCl8MCxBPUErTWF0aC5pbXVsKGtlLEV0KXwwLEU9RStNYXRoLmltdWwo'@;
put 'UmUsYW4pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLGFuKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxm'@;
put 'bil8MDt2YXIgWWk9KFUrKEU9RStNYXRoLmltdWwoeGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSx0bil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKHZlLHRuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9Njcx'@;
put 'MDg4NjMsRT1NYXRoLmltdWwoTmUsWnQpLG09KG09TWF0aC5pbXVsKE5lLGt0KSkrTWF0aC5pbXVsKHV0LFp0KXwwLEE9TWF0aC5pbXVsKHV0LGt0KSxFPUUrTWF0aC5pbXVsKHJ0LG90KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChLZSxvdCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKEtlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEV0KXwwKStNYXRoLmltdWwo'@;
put 'SmUsaHQpfDAsQT1BK01hdGguaW11bChKZSxFdCl8MCxFPUUrTWF0aC5pbXVsKERlLGFuKXwwLG09KG09bStNYXRoLmltdWwoRGUsanQpfDApK01hdGguaW11bChrZSxhbil8MCxBPUErTWF0aC5pbXVsKGtlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChS'@;
put 'ZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIGZhPShVKyhFPUUrTWF0aC5pbXVsKGplLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsdG4pfDApK01hdGguaW11bChBZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGgu'@;
put 'aW11bChBZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGZhPj4+MjYpfDAsZmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLG90KSxtPShtPU1hdGguaW11bChOZSx6dCkpK01hdGguaW11bCh1dCxvdCl8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoS2UsV2UpfDAsQT1BK01hdGguaW11bChLZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQsRXQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LEV0KXwwLEU9RStNYXRoLmltdWwo'@;
put 'bnQsYW4pfDAsbT0obT1tK01hdGguaW11bChudCxqdCl8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsanQpfDAsRT1FK01hdGguaW11bChEZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoa2UsY24pfDAsQT1BK01hdGguaW11bChrZSxm'@;
put 'bil8MDt2YXIgbnI9KFUrKEU9RStNYXRoLmltdWwoUmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSx0bil8MCkrTWF0aC5pbXVsKEllLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEllLHRuKXwwKSsobT4+PjEzKXwwKSsobnI+Pj4yNil8MCxuciY9Njcx'@;
put 'MDg4NjMsRT1NYXRoLmltdWwoTmUsV2UpLG09KG09TWF0aC5pbXVsKE5lLEF0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKHJ0LGh0KXwwLG09KG09bStNYXRoLmltdWwocnQsRXQpfDApK01hdGguaW11bChLZSxodCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKEtlLEV0KXwwLEU9RStNYXRoLmltdWwoeXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LGFuKXwwLEE9QStNYXRoLmltdWwoTXQsanQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwo'@;
put 'SmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgb2E9KFUrKEU9RStNYXRoLmltdWwoRGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChEZSx0bil8MCkrTWF0aC5pbXVsKGtlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+'@;
put 'PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsaHQpLG09KG09TWF0aC5pbXVsKE5lLEV0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LEV0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09bStNYXRoLmltdWwocnQsanQpfDApK01h'@;
put 'dGguaW11bChLZSxhbil8MCxBPUErTWF0aC5pbXVsKEtlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIF9hPShVKyhFPUUrTWF0aC5pbXVsKG50LFF0KXww'@;
put 'KXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsdG4pfDApK01hdGguaW11bChKZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChKZSx0bil8MCkrKG0+Pj4xMyl8MCkrKF9hPj4+MjYpfDAsX2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGFuKSxtPShtPU1hdGguaW11'@;
put 'bChOZSxqdCkpK01hdGguaW11bCh1dCxhbil8MCxBPU1hdGguaW11bCh1dCxqdCksRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGZuKXwwKStNYXRoLmltdWwoS2UsY24pfDAsQT1BK01hdGguaW11bChLZSxmbil8MDt2YXIgT2E9KFUrKEU9RStNYXRoLmltdWwo'@;
put 'eXQsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCx0bil8MCkrTWF0aC5pbXVsKE10LFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKE10LHRuKXwwKSsobT4+PjEzKXwwKSsoT2E+Pj4yNil8MCxPYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsY24pLG09KG09'@;
put 'TWF0aC5pbXVsKE5lLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgTmE9KFUrKEU9RStNYXRoLmltdWwocnQsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKEtlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUEr'@;
put 'TWF0aC5pbXVsKEtlLHRuKXwwKSsobT4+PjEzKXwwKSsoTmE+Pj4yNil8MCxOYSY9NjcxMDg4NjM7dmFyIGVpPShVKyhFPU1hdGguaW11bChOZSxRdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoTmUsdG4pKStNYXRoLmltdWwodXQsUXQpfDApKTw8MTMpfDA7cmV0dXJuIFU9KChBPU1h'@;
put 'dGguaW11bCh1dCx0bikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxWWzBdPWNhLFZbMV09eGksVlsyXT15cixWWzNdPUduLFZbNF09S2ksVls1XT1KcixWWzZdPVFyLFZbN109TmksVls4XT1IaSxWWzldPUlhLFZbMTBdPVByLFZbMTFdPVlpLFZbMTJdPWZhLFZbMTNd'@;
put 'PW5yLFZbMTRdPW9hLFZbMTVdPV9hLFZbMTZdPU9hLFZbMTddPU5hLFZbMThdPWVpLDAhPT1VJiYoVlsxOV09VSx4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBRKHosZyx5KXtyZXR1cm4obmV3IHEpLm11bHAoeixnLHkpfWZ1bmN0aW9uIHEoeixnKXt0aGlzLng9eix0aGlzLnk9Z31NYXRoLmlt'@;
put 'dWx8fChaPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1oodGhpcyxnLHkpOkM8NjM/Vyh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIFgoeixnLHkp'@;
put 'e3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlLHkubGVuZ3RoPXoubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIFY9QztDPTA7Zm9yKHZhciBVPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5t'@;
put 'YXgoMCxULXoubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgbGU9KDB8ei53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSx3ZT02NzEwODg2MyZsZTtVPTY3MTA4ODYzJih3ZT13ZStVfDApLEMrPShWPShWPVYrKGxlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LFYmPTY3MTA4ODYz'@;
put 'fXkud29yZHNbVF09VSx4PVYsVj1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTpRKHRoaXMsZyx5KSx4fSxxLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5f'@;
put 'Y291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LHEucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+'@;
put 'Pj0xO3JldHVybiBDfSxxLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXtmb3IodmFyIFU9MDtVPFY7VSsrKUNbVV09eVtnW1VdXSxUW1VdPXhbZ1tVXV19LHEucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsVil7dGhpcy5wZXJtdXRlKFYsZyx5'@;
put 'LHgsQyxUKTtmb3IodmFyIFU9MTtVPFQ7VTw8PTEpZm9yKHZhciBFPVU8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxsZT1BLHdlPTA7d2U8VTt3ZSsrKXt2YXIgWmU9eFthZSt3ZV0sUWU9Q1th'@;
put 'ZSt3ZV0sYXQ9eFthZSt3ZStVXSx4ZT1DW2FlK3dlK1VdLHZlPW5lKmF0LWxlKnhlO3hlPW5lKnhlK2xlKmF0LHhbYWUrd2VdPVplKyhhdD12ZSksQ1thZSt3ZV09UWUreGUseFthZSt3ZStVXT1aZS1hdCxDW2FlK3dlK1VdPVFlLXhlLHdlIT09RSYmKHZlPW0qbmUtQSpsZSxsZT1tKmxlK0Eq'@;
put 'bmUsbmU9dmUpfX0scS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LHEucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYo'@;
put 'ISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LHEucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtD'@;
put 'Kyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LHEucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBU'@;
put 'PTAsVj0wO1Y8eTtWKyspeFsyKlZdPTgxOTEmKFQrPTB8Z1tWXSkseFsyKlYrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoVj0yKnk7VjxDOysrVil4W1ZdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0scS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFy'@;
put 'cmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0scS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxWPXRoaXMuc3R1YihDKSxVPW5ldyBBcnJheShDKSxFPW5l'@;
put 'dyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLGxlPXgud29yZHM7bGUubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsVSxDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0'@;
put 'aCxBLEMpLHRoaXMudHJhbnNmb3JtKFUsVixFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLFYsYWUsbmUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgWmU9RVt3ZV0qYWVbd2VdLW1bd2VdKm5lW3dlXTttW3dlXT1FW3dlXSpuZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVplfXJl'@;
put 'dHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLGxlLFYsQyxUKSx0aGlzLmNvbmp1Z2F0ZShsZSxWLEMpLHRoaXMubm9ybWFsaXplMTNiKGxlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHgu'@;
put 'c3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwp'@;
put 'O3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksUSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIi'@;
put 'PT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09Njcx'@;
put 'MDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hdPXksdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhp'@;
put 'cyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBCKHope2Zvcih2YXIgZz1uZXcgQXJyYXkoei5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsr'@;
put 'KXt2YXIgQz15JTI2O2dbeV09KHoud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3Io'@;
put 'dmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYz'@;
put 'Pj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIFY9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgVT10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1VPDx5fFYsVj1VPj4+MjYteX1WJiYodGhpcy53b3Jkc1tUXT1WLHRoaXMubGVuZ3RoKysp'@;
put 'fWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LFY9TWF0aC5taW4oKGctVCkvMjYs'@;
put 'dGhpcy5sZW5ndGgpLFU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1WLEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPFY7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1WfWlmKDAhPT1WKWlmKHRoaXMubGVuZ3RoPlYpZm9yKHRoaXMubGVu'@;
put 'Z3RoLT1WLG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStWXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jk'@;
put 'c1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUmVX1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1'@;
put 'bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihn'@;
put 'KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9'@;
put 'ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhp'@;
put 'cy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAo'@;
put 'Im51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6'@;
put 'KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4'@;
put 'NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcp'@;
put 'e2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcs'@;
put 'MT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNb'@;
put 'eSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gp'@;
put 'O3ZhciBWLFU9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtWPSgwfHRoaXMud29yZHNbVCt4XSkrVTt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O1U9KChWLT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWfWZvcig7VDx0aGlzLmxlbmd0'@;
put 'aC14O1QrKylVPShWPSgwfHRoaXMud29yZHNbVCt4XSkrVSk+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWO2lmKDA9PT1VKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1VKSxVPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKVU9KFY9LSgwfHRoaXMud29yZHNbVF0pK1UpPj4y'@;
put 'Nix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJlY7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2Nv'@;
put 'dW50Qml0cyhWKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksVj0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZh'@;
put 'ciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgbGU9NjcxMDg4NjQqKDB8Qy53b3Jk'@;
put 'c1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihsZT1NYXRoLm1pbihsZS9WfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsbGUsbmUpOzAhPT1DLm5lZ2F0aXZlOylsZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJv'@;
put 'KCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09bGUpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAo'@;
put 'IWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVn'@;
put 'KCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhWPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSkse2RpdjpDLG1vZDpWLm1vZH0pOnRoaXMubmVnYXRp'@;
put 'dmUmZy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpWLmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3'@;
put 'IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcg'@;
put 'dyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxWfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1v'@;
put 'ZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHku'@;
put 'ZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksVj14LmNtcChDKTtyZXR1cm4gVjwwfHwxPT09VCYmMD09PVY/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEp'@;
put 'fSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3Ao'@;
put 'Zzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHco'@;
put 'MSksVD1uZXcgdygwKSxWPW5ldyB3KDApLFU9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRz'@;
put 'WzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBsZT0wLHdlPTE7ISh4LndvcmRzWzBdJndl'@;
put 'KSYmbGU8MjY7KytsZSx3ZTw8PTEpO2lmKGxlPjApZm9yKHguaXVzaHJuKGxlKTtsZS0tID4wOykoVi5pc09kZCgpfHxVLmlzT2RkKCkpJiYoVi5pYWRkKG0pLFUuaXN1YihBKSksVi5pdXNocm4oMSksVS5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoViksVC5pc3Vi'@;
put 'KFUpKTooeC5pc3ViKHkpLFYuaXN1YihDKSxVLmlzdWIoVCkpfXJldHVybnthOlYsYjpVLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9'@;
put 'PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIFU9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZVPDI2OysrVSxFPDw9MSk7aWYoVT4wKWZvcih5Lml1'@;
put 'c2hybihVKTtVLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKFYpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoViksVC5pdXNocm4oMSk7eS5j'@;
put 'bXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJz'@;
put 'KCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zv'@;
put 'cig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBWPXk7eT14LHg9Vn1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJv'@;
put 'dG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0p'@;
put 'fSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhp'@;
put 'cy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLFY9eDswIT09VCYmVjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPTB8dGhpcy53b3Jkc1tWXTtUPShVKz1UKT4+PjI2LHRoaXMud29yZHNbVl09VSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jk'@;
put 'c1tWXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYh'@;
put 'eSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8t'@;
put 'MToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRo'@;
put 'aXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgt'@;
put 'MTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgU2UoZyl9LHcucHJvdG90'@;
put 'eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcp'@;
put 'fSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBu'@;
put 'dW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9'@;
put 'LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0o'@;
put 'dGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHRlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoeixnKXt0'@;
put 'aGlzLm5hbWU9eix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHNlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9'@;
put 'ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZSh6KXtpZigic3RyaW5nIj09dHlwZW9mIHope3ZhciBnPXcuX3ByaW1lKHopO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcCh6Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhp'@;
put 'cy5tPXosdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKHope1NlLmNhbGwodGhpcyx6KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0'@;
put 'KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhp'@;
put 'cy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhp'@;
put 'cy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3ku'@;
put 'aXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LE4o'@;
put 'c2UsaWUpLHNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lk'@;
put 'KGcubGVuZ3RoPTEpO3ZhciBWPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109ViZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBVPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShVJngpPDw0fFY+Pj4yMixWPVV9Zy53b3Jkc1tULTEwXT1WPj4+PTIyLGcubGVuZ3RoLT0w'@;
put 'PT09ViYmZy5sZW5ndGg+MTA/MTA6OX0sc2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29y'@;
put 'ZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sTihnZSxpZSksTihfZSxpZSksTihUZSxpZSksVGUucHJv'@;
put 'dG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5f'@;
put 'cHJpbWU9ZnVuY3Rpb24oZyl7aWYodGVbZ10pcmV0dXJuIHRlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgc2U7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'a25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gdGVbZ109eSx5fSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i'@;
put 'ZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2Uu'@;
put 'cHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5j'@;
put 'bG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2Uu'@;
put 'cHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcu'@;
put 'c3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9'@;
put 'LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sU2UucHJv'@;
put 'dG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMubXVsKGcsZyl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJu'@;
put 'IHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgVj1uZXcgdygxKS50b1JlZCh0aGlzKSxVPVYucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNo'@;
put 'cm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChVKTspbS5yZWRJQWRkKFUpO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5w'@;
put 'b3coZyxDKSxsZT1UOzAhPT1uZS5jbXAoVik7KXtmb3IodmFyIHdlPW5lLFplPTA7MCE9PXdlLmNtcChWKTtaZSsrKXdlPXdlLnJlZFNxcigpO3AoWmU8bGUpO3ZhciBRZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihsZS1aZS0xKSk7YWU9YWUucmVkTXVsKFFlKSxBPVFlLnJlZFNxcigp'@;
put 'LG5lPW5lLnJlZE11bChBKSxsZT1aZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LFNlLnBy'@;
put 'b3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9'@;
put 'MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgVj1DWzBdLFU9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBu'@;
put 'ZT1BPj5hZSYxO1YhPT1DWzBdJiYoVj10aGlzLnNxcihWKSksMCE9PW5lfHwwIT09VT8oVTw8PTEsVXw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihWPXRoaXMubXVsKFYsQ1tVXSksRT0wLFU9MCkpOkU9MH1tPTI2fXJldHVybiBWfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0'@;
put 'aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyB6ZShnKX0s'@;
put 'Tih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJl'@;
put 'ZD1udWxsLHl9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlz'@;
put 'LnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1m'@;
put 'dW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMp'@;
put 'Lml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcu'@;
put 'X2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDYxMzg6KGNlLEosYik9Pnt2YXIgRD1iKDk4MCksXz1iKDkxOTkpLHA9Yig3ODU5KSxOPWIoMjE0NCksdz1iKDM2NjMpLEY9YigzNDgyKSxIPWIoNDgxOCksUj1iKDk1MDkp'@;
put 'LkJ1ZmZlcjtjZS5leHBvcnRzPWZ1bmN0aW9uKEIsVyxaKXt2YXIgWDtYPUIucGFkZGluZz9CLnBhZGRpbmc6Wj8xOjQ7dmFyIHRlLFE9RChCKSxxPVEubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoVy5sZW5ndGg+cXx8bmV3IE4oVykuY21wKFEubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9y'@;
put 'KCJkZWNyeXB0aW9uIGVycm9yIik7dGU9Wj9IKG5ldyBOKFcpLFEpOncoVyxRKTt2YXIgaWU9Ui5hbGxvYyhxLXRlLmxlbmd0aCk7aWYodGU9Ui5jb25jYXQoW2llLHRlXSxxKSw0PT09WClyZXR1cm4gZnVuY3Rpb24gaihZLEIpe3ZhciBXPVkubW9kdWx1cy5ieXRlTGVuZ3RoKCksWj1GKCJz'@;
put 'aGExIikudXBkYXRlKFIuYWxsb2MoMCkpLmRpZ2VzdCgpLFg9Wi5sZW5ndGg7aWYoMCE9PUJbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIFE9Qi5zbGljZSgxLFgrMSkscT1CLnNsaWNlKFgrMSksdGU9cChRLF8ocSxYKSksaWU9cChxLF8odGUsVy1YLTEpKTtp'@;
put 'ZihmdW5jdGlvbiBMKFksQil7WT1SLmZyb20oWSksQj1SLmZyb20oQik7dmFyIFc9MCxaPVkubGVuZ3RoO1kubGVuZ3RoIT09Qi5sZW5ndGgmJihXKyssWj1NYXRoLm1pbihZLmxlbmd0aCxCLmxlbmd0aCkpO2Zvcih2YXIgWD0tMTsrK1g8WjspVys9WVtYXV5CW1hdO3JldHVybiBXfShaLGll'@;
put 'LnNsaWNlKDAsWCkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgc2U9WDswPT09aWVbc2VdOylzZSsrO2lmKDEhPT1pZVtzZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gaWUuc2xpY2Uoc2UpfShRLHRlKTtpZigxPT09'@;
put 'WClyZXR1cm4gZnVuY3Rpb24gUChZLEIsVyl7Zm9yKHZhciBaPUIuc2xpY2UoMCwyKSxYPTIsUT0wOzAhPT1CW1grK107KWlmKFg+PUIubGVuZ3RoKXtRKys7YnJlYWt9dmFyIHE9Qi5zbGljZSgyLFgtMSk7aWYoKCIwMDAyIiE9PVoudG9TdHJpbmcoImhleCIpJiYhV3x8IjAwMDEiIT09Wi50'@;
put 'b1N0cmluZygiaGV4IikmJlcpJiZRKysscS5sZW5ndGg8OCYmUSsrLFEpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIEIuc2xpY2UoWCl9KDAsdGUsWik7aWYoMz09PVgpcmV0dXJuIHRlO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSw2NTU5'@;
put 'OihjZSxKLGIpPT57dmFyIEQ9Yig5ODApLF89YigxNzk4KSxwPWIoMzQ4MiksTj1iKDkxOTkpLHc9Yig3ODU5KSxGPWIoMjE0NCksSD1iKDQ4MTgpLFI9YigzNjYzKSxqPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oVyxaLFgpe3ZhciBRO1E9Vy5wYWRkaW5nP1cucGFkZGlu'@;
put 'ZzpYPzE6NDt2YXIgdGUscT1EKFcpO2lmKDQ9PT1RKXRlPWZ1bmN0aW9uIFAoQixXKXt2YXIgWj1CLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFg9Vy5sZW5ndGgsUT1wKCJzaGExIikudXBkYXRlKGouYWxsb2MoMCkpLmRpZ2VzdCgpLHE9US5sZW5ndGgsdGU9MipxO2lmKFg+Wi10ZS0yKXRocm93'@;
put 'IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3ZhciBpZT1qLmFsbG9jKFotWC10ZS0yKSxzZT1aLXEtMSxnZT1fKHEpLF9lPXcoai5jb25jYXQoW1EsaWUsai5hbGxvYygxLDEpLFddLHNlKSxOKGdlLHNlKSksVGU9dyhnZSxOKF9lLHEpKTtyZXR1cm4gbmV3IEYoai5jb25jYXQoW2ou'@;
put 'YWxsb2MoMSksVGUsX2VdLFopKX0ocSxaKTtlbHNlIGlmKDE9PT1RKXRlPWZ1bmN0aW9uIEwoQixXLFope3ZhciBxLFg9Vy5sZW5ndGgsUT1CLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFg+US0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gcT1aP2ouYWxs'@;
put 'b2MoUS1YLTMsMjU1KTpmdW5jdGlvbiBZKEIpe2Zvcih2YXIgcSxXPWouYWxsb2NVbnNhZmUoQiksWj0wLFg9XygyKkIpLFE9MDtaPEI7KVE9PT1YLmxlbmd0aCYmKFg9XygyKkIpLFE9MCksKHE9WFtRKytdKSYmKFdbWisrXT1xKTtyZXR1cm4gV30oUS1YLTMpLG5ldyBGKGouY29uY2F0KFtq'@;
put 'LmZyb20oWzAsWj8xOjJdKSxxLGouYWxsb2MoMSksV10sUSkpfShxLFosWCk7ZWxzZXtpZigzIT09USl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKCh0ZT1uZXcgRihaKSkuY21wKHEubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBt'@;
put 'b2R1bHVzIil9cmV0dXJuIFg/Uih0ZSxxKTpIKHRlLHEpfX0sNDgxODooY2UsSixiKT0+e3ZhciBEPWIoMjE0NCksXz1iKDk1MDkpLkJ1ZmZlcjtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoTix3KXtyZXR1cm4gXy5mcm9tKE4udG9SZWQoRC5tb250KHcubW9kdWx1cykpLnJlZFBvdyhuZXcgRCh3'@;
put 'LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSw3ODU5OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbihiLEQpe2Zvcih2YXIgXz1iLmxlbmd0aCxwPS0xOysrcDxfOyliW3BdXj1EW3BdO3JldHVybiBifX0sMzY4OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtiLnIoSiks'@;
put 'Yi5kKEose2RlY29kZTooKT0+U2UsZGVmYXVsdDooKT0+eCxlbmNvZGU6KCk9PnplLHRvQVNDSUk6KCk9PmcsdG9Vbmljb2RlOigpPT56LHVjczJkZWNvZGU6KCk9PmllLHVjczJlbmNvZGU6KCk9PnNlfSk7Y29uc3QgRD0yMTQ3NDgzNjQ3LF89MzYsUD0vXnhuLS0vLEw9L1teXDAtXHg3Rl0v'@;
put 'LFk9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLEI9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlu'@;
put 'cHV0IjoiSW52YWxpZCBpbnB1dCJ9LFo9TWF0aC5mbG9vcixYPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gUShDKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihCW0NdKX1mdW5jdGlvbiB0ZShDLFQpe2NvbnN0IFY9Qy5zcGxpdCgiQCIpO2xldCBVPSIiO1YubGVuZ3RoPjEmJihVPVZbMF0r'@;
put 'IkAiLEM9VlsxXSk7Y29uc3QgbT1mdW5jdGlvbiBxKEMsVCl7Y29uc3QgVj1bXTtsZXQgVT1DLmxlbmd0aDtmb3IoO1UtLTspVltVXT1UKENbVV0pO3JldHVybiBWfSgoQz1DLnJlcGxhY2UoWSwiLiIpKS5zcGxpdCgiLiIpLFQpLmpvaW4oIi4iKTtyZXR1cm4gVSttfWZ1bmN0aW9uIGllKEMp'@;
put 'e2NvbnN0IFQ9W107bGV0IFY9MDtjb25zdCBVPUMubGVuZ3RoO2Zvcig7VjxVOyl7Y29uc3QgRT1DLmNoYXJDb2RlQXQoVisrKTtpZihFPj01NTI5NiYmRTw9NTYzMTkmJlY8VSl7Y29uc3QgbT1DLmNoYXJDb2RlQXQoVisrKTs1NjMyMD09KDY0NTEyJm0pP1QucHVzaCgoKDEwMjMmRSk8PDEw'@;
put 'KSsoMTAyMyZtKSs2NTUzNik6KFQucHVzaChFKSxWLS0pfWVsc2UgVC5wdXNoKEUpfXJldHVybiBUfWNvbnN0IHNlPUM9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkMpLGdlPWZ1bmN0aW9uKEMpe3JldHVybiBDPj00OCYmQzw1OD9DLTQ4KzI2OkM+PTY1JiZDPDkxP0MtNjU6Qz49OTcmJkM8'@;
put 'MTIzP0MtOTc6X30sX2U9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQysyMis3NSooQzwyNiktKCgwIT1UKTw8NSl9LFRlPWZ1bmN0aW9uKEMsVCxWKXtsZXQgVT0wO2ZvcihDPVY/WihDLzcwMCk6Qz4+MSxDKz1aKEMvVCk7Qz40NTU7VSs9XylDPVooQy8zNSk7cmV0dXJuIFooVSszNipDLyhDKzM4'@;
put 'KSl9LFNlPWZ1bmN0aW9uKEMpe2NvbnN0IFQ9W10sVj1DLmxlbmd0aDtsZXQgVT0wLEU9MTI4LG09NzIsQT1DLmxhc3RJbmRleE9mKCItIik7QTwwJiYoQT0wKTtmb3IobGV0IGFlPTA7YWU8QTsrK2FlKUMuY2hhckNvZGVBdChhZSk+PTEyOCYmUSgibm90LWJhc2ljIiksVC5wdXNoKEMuY2hh'@;
put 'ckNvZGVBdChhZSkpO2ZvcihsZXQgYWU9QT4wP0ErMTowO2FlPFY7KXtjb25zdCBuZT1VO2ZvcihsZXQgd2U9MSxaZT1fOztaZSs9Xyl7YWU+PVYmJlEoImludmFsaWQtaW5wdXQiKTtjb25zdCBRZT1nZShDLmNoYXJDb2RlQXQoYWUrKykpO1FlPj1fJiZRKCJpbnZhbGlkLWlucHV0IiksUWU+'@;
put 'WigoRC1VKS93ZSkmJlEoIm92ZXJmbG93IiksVSs9UWUqd2U7Y29uc3QgYXQ9WmU8PW0/MTpaZT49bSsyNj8yNjpaZS1tO2lmKFFlPGF0KWJyZWFrO2NvbnN0IHhlPV8tYXQ7d2U+WihEL3hlKSYmUSgib3ZlcmZsb3ciKSx3ZSo9eGV9Y29uc3QgbGU9VC5sZW5ndGgrMTttPVRlKFUtbmUsbGUs'@;
put 'MD09bmUpLFooVS9sZSk+RC1FJiZRKCJvdmVyZmxvdyIpLEUrPVooVS9sZSksVSU9bGUsVC5zcGxpY2UoVSsrLDAsRSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlQpfSx6ZT1mdW5jdGlvbihDKXtjb25zdCBUPVtdLFY9KEM9aWUoQykpLmxlbmd0aDtsZXQgVT0xMjgsRT0wLG09'@;
put 'NzI7Zm9yKGNvbnN0IG5lIG9mIEMpbmU8MTI4JiZULnB1c2goWChuZSkpO2NvbnN0IEE9VC5sZW5ndGg7bGV0IGFlPUE7Zm9yKEEmJlQucHVzaCgiLSIpO2FlPFY7KXtsZXQgbmU9RDtmb3IoY29uc3Qgd2Ugb2YgQyl3ZT49VSYmd2U8bmUmJihuZT13ZSk7Y29uc3QgbGU9YWUrMTtuZS1VPloo'@;
put 'KEQtRSkvbGUpJiZRKCJvdmVyZmxvdyIpLEUrPShuZS1VKSpsZSxVPW5lO2Zvcihjb25zdCB3ZSBvZiBDKWlmKHdlPFUmJisrRT5EJiZRKCJvdmVyZmxvdyIpLHdlPT09VSl7bGV0IFplPUU7Zm9yKGxldCBRZT1fOztRZSs9Xyl7Y29uc3QgYXQ9UWU8PW0/MTpRZT49bSsyNj8yNjpRZS1tO2lm'@;
put 'KFplPGF0KWJyZWFrO2NvbnN0IHhlPVplLWF0LHZlPV8tYXQ7VC5wdXNoKFgoX2UoYXQreGUldmUsMCkpKSxaZT1aKHhlL3ZlKX1ULnB1c2goWChfZShaZSwwKSkpLG09VGUoRSxsZSxhZT09PUEpLEU9MCwrK2FlfSsrRSwrK1V9cmV0dXJuIFQuam9pbigiIil9LHo9ZnVuY3Rpb24oQyl7cmV0'@;
put 'dXJuIHRlKEMsZnVuY3Rpb24oVCl7cmV0dXJuIFAudGVzdChUKT9TZShULnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlR9KX0sZz1mdW5jdGlvbihDKXtyZXR1cm4gdGUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTC50ZXN0KFQpPyJ4bi0tIit6ZShUKTpUfSl9LHg9e3ZlcnNpb246IjIuMy4xIix1'@;
put 'Y3MyOntkZWNvZGU6aWUsZW5jb2RlOnNlfSxkZWNvZGU6U2UsZW5jb2RlOnplLHRvQVNDSUk6Zyx0b1VuaWNvZGU6en19LDcxMjk6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBiPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gXyhGKXt0cnl7cmV0dXJuIGRlY29k'@;
put 'ZVVSSUNvbXBvbmVudChGLnJlcGxhY2UoL1wrL2csIiAiKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHAoRil7dHJ5e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoRil9Y2F0Y2h7cmV0dXJuIG51bGx9fUouc3RyaW5naWZ5PWZ1bmN0aW9uIHcoRixIKXtIPUh8fCIiO3ZhciBqLFAs'@;
put 'Uj1bXTtmb3IoUCBpbiJzdHJpbmciIT10eXBlb2YgSCYmKEg9Ij8iKSxGKWlmKGIuY2FsbChGLFApKXtpZighKGo9RltQXSkmJihudWxsPT1qfHxpc05hTihqKSkmJihqPSIiKSxQPXAoUCksaj1wKGopLG51bGw9PT1QfHxudWxsPT09ailjb250aW51ZTtSLnB1c2goUCsiPSIrail9cmV0dXJu'@;
put 'IFIubGVuZ3RoP0grUi5qb2luKCImIik6IiJ9LEoucGFyc2U9ZnVuY3Rpb24gTihGKXtmb3IodmFyIGosSD0vKFtePT8jJl0rKT0/KFteJl0qKS9nLFI9e307aj1ILmV4ZWMoRik7KXt2YXIgUD1fKGpbMV0pLEw9XyhqWzJdKTtudWxsPT09UHx8bnVsbD09PUx8fFAgaW4gUnx8KFJbUF09TCl9'@;
put 'cmV0dXJuIFJ9fSwxNzk4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz02NTUzNix3PWIoOTUwOSkuQnVmZmVyLEY9Yi5nLmNyeXB0b3x8Yi5nLm1zQ3J5cHRvO2NlLmV4cG9ydHM9RiYmRi5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24gSChSLGope2lmKFI+NDI5NDk2'@;
put 'NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBQPXcuYWxsb2NVbnNhZmUoUik7aWYoUj4wKWlmKFI+Xylmb3IodmFyIEw9MDtMPFI7TCs9XylGLmdldFJhbmRvbVZhbHVlcyhQLnNsaWNlKEwsTCtfKSk7ZWxzZSBGLmdldFJh'@;
put 'bmRvbVZhbHVlcyhQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygaj9ELm5leHRUaWNrKGZ1bmN0aW9uKCl7aihudWxsLFApfSk6UH06ZnVuY3Rpb24gTigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMg'@;
put 'YnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDc5NjM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5v'@;
put 'dCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIHA9Yig5NTA5KSxOPWIoMTc5OCksdz1wLkJ1ZmZlcixGPXAua01heExlbmd0aCxIPWIuZy5jcnlwdG98fGIuZy5tc0NyeXB0byxSPU1hdGgucG93KDIs'@;
put 'MzIpLTE7ZnVuY3Rpb24gaihXLFope2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKFc+Unx8VzwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoVz5GfHxX'@;
put 'PlopdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKFcsWixYKXtpZigibnVtYmVyIiE9dHlwZW9mIFd8fFchPVcpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVz5SfHxXPDApdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoVytaPlh8fFc+Ril0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIFkoVyxaLFgsUSl7aWYoRC5icm93c2VyKXt2YXIgdGU9bmV3IFVpbnQ4QXJyYXkoVy5idWZmZXIsWixYKTtyZXR1cm4gSC5n'@;
put 'ZXRSYW5kb21WYWx1ZXModGUpLFE/dm9pZCBELm5leHRUaWNrKGZ1bmN0aW9uKCl7UShudWxsLFcpfSk6V31pZighUSlyZXR1cm4gTihYKS5jb3B5KFcsWiksVztOKFgsZnVuY3Rpb24oc2UsZ2Upe2lmKHNlKXJldHVybiBRKHNlKTtnZS5jb3B5KFcsWiksUShudWxsLFcpfSl9SCYmSC5nZXRS'@;
put 'YW5kb21WYWx1ZXN8fCFELmJyb3dzZXI/KEoucmFuZG9tRmlsbD1mdW5jdGlvbiBMKFcsWixYLFEpe2lmKCEody5pc0J1ZmZlcihXKXx8VyBpbnN0YW5jZW9mIGIuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVp'@;
put 'bnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgWilRPVosWj0wLFg9Vy5sZW5ndGg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgWClRPVgsWD1XLmxlbmd0aC1aO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIFEpdGhyb3cgbmV3IFR5cGVFcnJvcignImNiIiBhcmd1bWVudCBt'@;
put 'dXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gaihaLFcubGVuZ3RoKSxQKFgsWixXLmxlbmd0aCksWShXLFosWCxRKX0sSi5yYW5kb21GaWxsU3luYz1mdW5jdGlvbiBCKFcsWixYKXtpZih0eXBlb2YgWj4idSImJihaPTApLCEody5pc0J1ZmZlcihXKXx8VyBpbnN0YW5jZW9mIGIuZy5VaW50'@;
put 'OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1cm4gaihaLFcubGVuZ3RoKSx2b2lkIDA9PT1YJiYoWD1XLmxlbmd0aC1aKSxQKFgsWixXLmxlbmd0aCksWShXLFosWCl9KTooSi5yYW5kb21GaWxs'@;
put 'PV8sSi5yYW5kb21GaWxsU3luYz1fKX0sNDI4MTpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYj17fTtmdW5jdGlvbiBEKEYsSCxSKXtSfHwoUj1FcnJvcik7dmFyIFA9ZnVuY3Rpb24oTCl7ZnVuY3Rpb24gWShCLFcsWil7cmV0dXJuIEwuY2FsbCh0aGlzLGZ1bmN0aW9uIGooTCxZLEIpe3JldHVy'@;
put 'biJzdHJpbmciPT10eXBlb2YgSD9IOkgoTCxZLEIpfShCLFcsWikpfHx0aGlzfXJldHVybiBmdW5jdGlvbiBKKEYsSCl7Ri5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShILnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixGLl9fcHJvdG9fXz1IfShZLEwpLFl9KFIpO1AucHJv'@;
put 'dG90eXBlLm5hbWU9Ui5uYW1lLFAucHJvdG90eXBlLmNvZGU9RixiW0ZdPVB9ZnVuY3Rpb24gXyhGLEgpe2lmKEFycmF5LmlzQXJyYXkoRikpe3ZhciBSPUYubGVuZ3RoO3JldHVybiBGPUYubWFwKGZ1bmN0aW9uKGope3JldHVybiBTdHJpbmcoail9KSxSPjI/Im9uZSBvZiAiLmNvbmNhdChI'@;
put 'LCIgIikuY29uY2F0KEYuc2xpY2UoMCxSLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrRltSLTFdOjI9PT1SPyJvbmUgb2YgIi5jb25jYXQoSCwiICIpLmNvbmNhdChGWzBdLCIgb3IgIikuY29uY2F0KEZbMV0pOiJvZiAiLmNvbmNhdChILCIgIikuY29uY2F0KEZbMF0pfXJldHVybiJvZiAiLmNv'@;
put 'bmNhdChILCIgIikuY29uY2F0KFN0cmluZyhGKSl9RCgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihGLEgpe3JldHVybidUaGUgdmFsdWUgIicrSCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrRisnIid9LFR5cGVFcnJvciksRCgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1'@;
put 'bmN0aW9uKEYsSCxSKXt2YXIgaixQO2lmKCJzdHJpbmciPT10eXBlb2YgSCYmZnVuY3Rpb24gcChGLEgsUil7cmV0dXJuIEYuc3Vic3RyKCFSfHxSPDA/MDorUixILmxlbmd0aCk9PT1IfShILCJub3QgIik/KGo9Im11c3Qgbm90IGJlIixIPUgucmVwbGFjZSgvXm5vdCAvLCIiKSk6aj0ibXVz'@;
put 'dCBiZSIsZnVuY3Rpb24gTihGLEgsUil7cmV0dXJuKHZvaWQgMD09PVJ8fFI+Ri5sZW5ndGgpJiYoUj1GLmxlbmd0aCksRi5zdWJzdHJpbmcoUi1ILmxlbmd0aCxSKT09PUh9KEYsIiBhcmd1bWVudCIpKVA9IlRoZSAiLmNvbmNhdChGLCIgIikuY29uY2F0KGosIiAiKS5jb25jYXQoXyhILCJ0'@;
put 'eXBlIikpO2Vsc2V7dmFyIEw9ZnVuY3Rpb24gdyhGLEgsUil7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBSJiYoUj0wKSwhKFIrSC5sZW5ndGg+Ri5sZW5ndGgpJiYtMSE9PUYuaW5kZXhPZihILFIpfShGLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO1A9J1RoZSAiJy5jb25jYXQoRiwnIiAn'@;
put 'KS5jb25jYXQoTCwiICIpLmNvbmNhdChqLCIgIikuY29uY2F0KF8oSCwidHlwZSIpKX1yZXR1cm4gUCsiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KHR5cGVvZiBSKX0sVHlwZUVycm9yKSxEKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxE'@;
put 'KCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oRil7cmV0dXJuIlRoZSAiK0YrIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pLEQoIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIiksRCgiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLGZ1'@;
put 'bmN0aW9uKEYpe3JldHVybiJDYW5ub3QgY2FsbCAiK0YrIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLEQoIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLEQoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlw'@;
put 'ZSwgbm90IHJlYWRhYmxlIiksRCgiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxEKCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvciksRCgiRVJSX1VOS05PV05fRU5DT0RJ'@;
put 'TkciLGZ1bmN0aW9uKEYpe3JldHVybiJVbmtub3duIGVuY29kaW5nOiAiK0Z9LFR5cGVFcnJvciksRCgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksY2UuZXhwb3J0cy5xPWJ9LDY3NTM6KGNlLEosYik9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPU9iamVjdC5rZXlzfHxmdW5jdGlvbihMKXt2YXIgWT1bXTtmb3IodmFyIEIgaW4gTClZLnB1c2goQik7cmV0dXJuIFl9O2NlLmV4cG9ydHM9Ujt2YXIgcD1iKDk0ODEpLE49Yig0MjI5KTtiKDU3MTcpKFIscCk7Zm9yKHZhciB3PV8oTi5wcm90'@;
put 'b3R5cGUpLEY9MDtGPHcubGVuZ3RoO0YrKyl7dmFyIEg9d1tGXTtSLnByb3RvdHlwZVtIXXx8KFIucHJvdG90eXBlW0hdPU4ucHJvdG90eXBlW0hdKX1mdW5jdGlvbiBSKEwpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFIpKXJldHVybiBuZXcgUihMKTtwLmNhbGwodGhpcyxMKSxOLmNhbGwodGhp'@;
put 'cyxMKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsTCYmKCExPT09TC5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09TC53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09TC5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixq'@;
put 'KSkpfWZ1bmN0aW9uIGooKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxELm5leHRUaWNrKFAsdGhpcyl9ZnVuY3Rpb24gUChMKXtMLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlz'@;
put 'Ll93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoUi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93'@;
put 'cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFkpe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1ZLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVkp'@;
put 'fX0pfSwyNzI1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Xzt2YXIgRD1iKDQ2MDUpO2Z1bmN0aW9uIF8ocCl7aWYoISh0aGlzIGluc3RhbmNlb2YgXykpcmV0dXJuIG5ldyBfKHApO0QuY2FsbCh0aGlzLHApfWIoNTcxNykoXyxEKSxfLnByb3RvdHlwZS5fdHJhbnNmb3Jt'@;
put 'PWZ1bmN0aW9uKHAsTix3KXt3KG51bGwscCl9fSw5NDgxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfLEQ9Yig0MTU1KTtjZS5leHBvcnRzPWcsZy5SZWFkYWJsZVN0YXRlPXosYig3MTg3KTt2YXIgTCxOPWZ1bmN0aW9uKFJlLEllKXtyZXR1cm4gUmUubGlzdGVuZXJzKEllKS5sZW5n'@;
put 'dGh9LHc9YigyNTAzKSxGPWIoODc2NCkuQnVmZmVyLEg9KHR5cGVvZiBiLmc8InUiP2IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxQPWIoNDYxNik7TD1QJiZQLmRlYnVnbG9nP1AuZGVidWdsb2co'@;
put 'InN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgc2UsZ2UsX2UsWT1iKDczMjcpLEI9YigxMTk1KSxaPWIoMjQ1NykuZ2V0SGlnaFdhdGVyTWFyayxYPWIoNDI4MSkucSxRPVguRVJSX0lOVkFMSURfQVJHX1RZUEUscT1YLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsdGU9WC5FUlJfTUVUSE9E'@;
put 'X05PVF9JTVBMRU1FTlRFRCxpZT1YLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7Yig1NzE3KShnLHcpO3ZhciBUZT1CLmVycm9yT3JEZXN0cm95LFNlPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIHooRmUsUmUsSWUpe189'@;
put 'X3x8Yig2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBJZSYmKEllPVJlIGluc3RhbmNlb2YgXyksdGhpcy5vYmplY3RNb2RlPSEhKEZlPUZlfHx7fSkub2JqZWN0TW9kZSxJZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRmUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhp'@;
put 'Z2hXYXRlck1hcms9Wih0aGlzLEZlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLEllKSx0aGlzLmJ1ZmZlcj1uZXcgWSx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0h'@;
put 'MSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1GZS5l'@;
put 'bWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIUZlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPUZlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGws'@;
put 'dGhpcy5lbmNvZGluZz1udWxsLEZlLmVuY29kaW5nJiYoc2V8fChzZT1iKDI1NTMpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgc2UoRmUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9RmUuZW5jb2RpbmcpfWZ1bmN0aW9uIGcoRmUpe2lmKF89X3x8Yig2NzUzKSwhKHRoaXMgaW5zdGFuY2VvZiBnKSly'@;
put 'ZXR1cm4gbmV3IGcoRmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IHooRmUsdGhpcyx0aGlzIGluc3RhbmNlb2YgXyksdGhpcy5yZWFkYWJsZT0hMCxGZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZWFkJiYodGhpcy5fcmVhZD1GZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgRmUuZGVz'@;
put 'dHJveSYmKHRoaXMuX2Rlc3Ryb3k9RmUuZGVzdHJveSkpLHcuY2FsbCh0aGlzKX1mdW5jdGlvbiB5KEZlLFJlLEllLEhlLERlKXtMKCJyZWFkYWJsZUFkZENodW5rIixSZSk7dmFyIF90LGtlPUZlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1SZSlrZS5yZWFkaW5nPSExLGZ1bmN0aW9uIEUo'@;
put 'RmUsUmUpe2lmKEwoIm9uRW9mQ2h1bmsiKSwhUmUuZW5kZWQpe2lmKFJlLmRlY29kZXIpe3ZhciBJZT1SZS5kZWNvZGVyLmVuZCgpO0llJiZJZS5sZW5ndGgmJihSZS5idWZmZXIucHVzaChJZSksUmUubGVuZ3RoKz1SZS5vYmplY3RNb2RlPzE6SWUubGVuZ3RoKX1SZS5lbmRlZD0hMCxSZS5z'@;
put 'eW5jP20oRmUpOihSZS5uZWVkUmVhZGFibGU9ITEsUmUuZW1pdHRlZFJlYWRhYmxlfHwoUmUuZW1pdHRlZFJlYWRhYmxlPSEwLEEoRmUpKSl9fShGZSxrZSk7ZWxzZSBpZihEZXx8KF90PWZ1bmN0aW9uIEMoRmUsUmUpe3ZhciBJZTtyZXR1cm4hZnVuY3Rpb24gaihGZSl7cmV0dXJuIEYuaXNC'@;
put 'dWZmZXIoRmUpfHxGZSBpbnN0YW5jZW9mIEh9KFJlKSYmInN0cmluZyIhPXR5cGVvZiBSZSYmdm9pZCAwIT09UmUmJiFGZS5vYmplY3RNb2RlJiYoSWU9bmV3IFEoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxSZSkpLEllfShrZSxSZSkpLF90KVRlKEZlLF90KTtl'@;
put 'bHNlIGlmKGtlLm9iamVjdE1vZGV8fFJlJiZSZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIFJlJiYha2Uub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKFJlKSE9PUYucHJvdG90eXBlJiYoUmU9ZnVuY3Rpb24gUihGZSl7cmV0dXJuIEYuZnJvbShGZSl9KFJlKSksSGUp'@;
put 'a2UuZW5kRW1pdHRlZD9UZShGZSxuZXcgaWUpOngoRmUsa2UsUmUsITApO2Vsc2UgaWYoa2UuZW5kZWQpVGUoRmUsbmV3IHEpO2Vsc2V7aWYoa2UuZGVzdHJveWVkKXJldHVybiExO2tlLnJlYWRpbmc9ITEsa2UuZGVjb2RlciYmIUllPyhSZT1rZS5kZWNvZGVyLndyaXRlKFJlKSxrZS5vYmpl'@;
put 'Y3RNb2RlfHwwIT09UmUubGVuZ3RoP3goRmUsa2UsUmUsITEpOmFlKEZlLGtlKSk6eChGZSxrZSxSZSwhMSl9ZWxzZSBIZXx8KGtlLnJlYWRpbmc9ITEsYWUoRmUsa2UpKTtyZXR1cm4ha2UuZW5kZWQmJihrZS5sZW5ndGg8a2UuaGlnaFdhdGVyTWFya3x8MD09PWtlLmxlbmd0aCl9ZnVuY3Rp'@;
put 'b24geChGZSxSZSxJZSxIZSl7UmUuZmxvd2luZyYmMD09PVJlLmxlbmd0aCYmIVJlLnN5bmM/KFJlLmF3YWl0RHJhaW49MCxGZS5lbWl0KCJkYXRhIixJZSkpOihSZS5sZW5ndGgrPVJlLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgsSGU/UmUuYnVmZmVyLnVuc2hpZnQoSWUpOlJlLmJ1ZmZlci5w'@;
put 'dXNoKEllKSxSZS5uZWVkUmVhZGFibGUmJm0oRmUpKSxhZShGZSxSZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFk'@;
put 'YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFJlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9UmUpfX0pLGcucHJvdG90eXBlLmRlc3Ryb3k9Qi5kZXN0cm95LGcucHJvdG90eXBlLl91bmRlc3Ryb3k9Qi51bmRlc3Ryb3ksZy5w'@;
put 'cm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRmUsUmUpe1JlKEZlKX0sZy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihGZSxSZSl7dmFyIEhlLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEllLm9iamVjdE1vZGU/SGU9ITA6InN0cmluZyI9PXR5cGVvZiBGZSYmKChSZT1SZXx8SWUu'@;
put 'ZGVmYXVsdEVuY29kaW5nKSE9PUllLmVuY29kaW5nJiYoRmU9Ri5mcm9tKEZlLFJlKSxSZT0iIiksSGU9ITApLHkodGhpcyxGZSxSZSwhMSxIZSl9LGcucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRmUpe3JldHVybiB5KHRoaXMsRmUsbnVsbCwhMCwhMSl9LGcucHJvdG90eXBlLmlzUGF1'@;
put 'c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LGcucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKEZlKXtzZXx8KHNlPWIoMjU1Mykucyk7dmFyIFJlPW5ldyBzZShGZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPVJlLHRoaXMu'@;
put 'X3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgSWU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxIZT0iIjtudWxsIT09SWU7KUhlKz1SZS53cml0ZShJZS5kYXRhKSxJZT1JZS5uZXh0O3JldHVybiB0aGlz'@;
put 'Ll9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09SGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goSGUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPUhlLmxlbmd0aCx0aGlzfTt2YXIgVD0xMDczNzQxODI0O2Z1bmN0aW9uIFUoRmUsUmUpe3JldHVybiBGZTw9'@;
put 'MHx8MD09PVJlLmxlbmd0aCYmUmUuZW5kZWQ/MDpSZS5vYmplY3RNb2RlPzE6RmUhPUZlP1JlLmZsb3dpbmcmJlJlLmxlbmd0aD9SZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpSZS5sZW5ndGg6KEZlPlJlLmhpZ2hXYXRlck1hcmsmJihSZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIFYoRmUp'@;
put 'e3JldHVybiBGZT49VD9GZT1UOihGZS0tLEZlfD1GZT4+PjEsRmV8PUZlPj4+MixGZXw9RmU+Pj40LEZlfD1GZT4+PjgsRmV8PUZlPj4+MTYsRmUrKyksRmV9KEZlKSksRmU8PVJlLmxlbmd0aD9GZTpSZS5lbmRlZD9SZS5sZW5ndGg6KFJlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24g'@;
put 'bShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO0woImVtaXRSZWFkYWJsZSIsUmUubmVlZFJlYWRhYmxlLFJlLmVtaXR0ZWRSZWFkYWJsZSksUmUubmVlZFJlYWRhYmxlPSExLFJlLmVtaXR0ZWRSZWFkYWJsZXx8KEwoImVtaXRSZWFkYWJsZSIsUmUuZmxvd2luZyksUmUuZW1pdHRlZFJl'@;
put 'YWRhYmxlPSEwLEQubmV4dFRpY2soQSxGZSkpfWZ1bmN0aW9uIEEoRmUpe3ZhciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbWl0UmVhZGFibGVfIixSZS5kZXN0cm95ZWQsUmUubGVuZ3RoLFJlLmVuZGVkKSwhUmUuZGVzdHJveWVkJiYoUmUubGVuZ3RofHxSZS5lbmRlZCkmJihGZS5lbWl0'@;
put 'KCJyZWFkYWJsZSIpLFJlLmVtaXR0ZWRSZWFkYWJsZT0hMSksUmUubmVlZFJlYWRhYmxlPSFSZS5mbG93aW5nJiYhUmUuZW5kZWQmJlJlLmxlbmd0aDw9UmUuaGlnaFdhdGVyTWFyayx4ZShGZSl9ZnVuY3Rpb24gYWUoRmUsUmUpe1JlLnJlYWRpbmdNb3JlfHwoUmUucmVhZGluZ01vcmU9ITAs'@;
put 'RC5uZXh0VGljayhuZSxGZSxSZSkpfWZ1bmN0aW9uIG5lKEZlLFJlKXtmb3IoOyFSZS5yZWFkaW5nJiYhUmUuZW5kZWQmJihSZS5sZW5ndGg8UmUuaGlnaFdhdGVyTWFya3x8UmUuZmxvd2luZyYmMD09PVJlLmxlbmd0aCk7KXt2YXIgSWU9UmUubGVuZ3RoO2lmKEwoIm1heWJlUmVhZE1vcmUg'@;
put 'cmVhZCAwIiksRmUucmVhZCgwKSxJZT09PVJlLmxlbmd0aClicmVha31SZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiB3ZShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO1JlLnJlYWRhYmxlTGlzdGVuaW5nPUZlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxSZS5yZXN1bWVTY2hl'@;
put 'ZHVsZWQmJiFSZS5wYXVzZWQ/UmUuZmxvd2luZz0hMDpGZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmRmUucmVzdW1lKCl9ZnVuY3Rpb24gWmUoRmUpe0woInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLEZlLnJlYWQoMCl9ZnVuY3Rpb24gYXQoRmUsUmUpe0woInJlc3VtZSIsUmUucmVh'@;
put 'ZGluZyksUmUucmVhZGluZ3x8RmUucmVhZCgwKSxSZS5yZXN1bWVTY2hlZHVsZWQ9ITEsRmUuZW1pdCgicmVzdW1lIikseGUoRmUpLFJlLmZsb3dpbmcmJiFSZS5yZWFkaW5nJiZGZS5yZWFkKDApfWZ1bmN0aW9uIHhlKEZlKXt2YXIgUmU9RmUuX3JlYWRhYmxlU3RhdGU7Zm9yKEwoImZsb3ci'@;
put 'LFJlLmZsb3dpbmcpO1JlLmZsb3dpbmcmJm51bGwhPT1GZS5yZWFkKCk7KTt9ZnVuY3Rpb24gdmUoRmUsUmUpe3JldHVybiAwPT09UmUubGVuZ3RoP251bGw6KFJlLm9iamVjdE1vZGU/SWU9UmUuYnVmZmVyLnNoaWZ0KCk6IUZlfHxGZT49UmUubGVuZ3RoPyhJZT1SZS5kZWNvZGVyP1JlLmJ1'@;
put 'ZmZlci5qb2luKCIiKToxPT09UmUuYnVmZmVyLmxlbmd0aD9SZS5idWZmZXIuZmlyc3QoKTpSZS5idWZmZXIuY29uY2F0KFJlLmxlbmd0aCksUmUuYnVmZmVyLmNsZWFyKCkpOkllPVJlLmJ1ZmZlci5jb25zdW1lKEZlLFJlLmRlY29kZXIpLEllKTt2YXIgSWV9ZnVuY3Rpb24gcWUoRmUpe3Zh'@;
put 'ciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbmRSZWFkYWJsZSIsUmUuZW5kRW1pdHRlZCksUmUuZW5kRW1pdHRlZHx8KFJlLmVuZGVkPSEwLEQubmV4dFRpY2soamUsUmUsRmUpKX1mdW5jdGlvbiBqZShGZSxSZSl7aWYoTCgiZW5kUmVhZGFibGVOVCIsRmUuZW5kRW1pdHRlZCxGZS5sZW5n'@;
put 'dGgpLCFGZS5lbmRFbWl0dGVkJiYwPT09RmUubGVuZ3RoJiYoRmUuZW5kRW1pdHRlZD0hMCxSZS5yZWFkYWJsZT0hMSxSZS5lbWl0KCJlbmQiKSxGZS5hdXRvRGVzdHJveSkpe3ZhciBJZT1SZS5fd3JpdGFibGVTdGF0ZTsoIUllfHxJZS5hdXRvRGVzdHJveSYmSWUuZmluaXNoZWQpJiZSZS5k'@;
put 'ZXN0cm95KCl9fWZ1bmN0aW9uIEFlKEZlLFJlKXtmb3IodmFyIEllPTAsSGU9RmUubGVuZ3RoO0llPEhlO0llKyspaWYoRmVbSWVdPT09UmUpcmV0dXJuIEllO3JldHVybi0xfWcucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oRmUpe0woInJlYWQiLEZlKSxGZT1wYXJzZUludChGZSwxMCk7dmFy'@;
put 'IFJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsSWU9RmU7aWYoMCE9PUZlJiYoUmUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09RmUmJlJlLm5lZWRSZWFkYWJsZSYmKCgwIT09UmUuaGlnaFdhdGVyTWFyaz9SZS5sZW5ndGg+PVJlLmhpZ2hXYXRlck1hcms6UmUubGVuZ3RoPjApfHxSZS5lbmRlZCkp'@;
put 'cmV0dXJuIEwoInJlYWQ6IGVtaXRSZWFkYWJsZSIsUmUubGVuZ3RoLFJlLmVuZGVkKSwwPT09UmUubGVuZ3RoJiZSZS5lbmRlZD9xZSh0aGlzKTptKHRoaXMpLG51bGw7aWYoMD09PShGZT1VKEZlLFJlKSkmJlJlLmVuZGVkKXJldHVybiAwPT09UmUubGVuZ3RoJiZxZSh0aGlzKSxudWxsO3Zh'@;
put 'ciBEZSxIZT1SZS5uZWVkUmVhZGFibGU7cmV0dXJuIEwoIm5lZWQgcmVhZGFibGUiLEhlKSwoMD09PVJlLmxlbmd0aHx8UmUubGVuZ3RoLUZlPFJlLmhpZ2hXYXRlck1hcmspJiZMKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsSGU9ITApLFJlLmVuZGVkfHxSZS5yZWFkaW5nP0woInJl'@;
put 'YWRpbmcgb3IgZW5kZWQiLEhlPSExKTpIZSYmKEwoImRvIHJlYWQiKSxSZS5yZWFkaW5nPSEwLFJlLnN5bmM9ITAsMD09PVJlLmxlbmd0aCYmKFJlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChSZS5oaWdoV2F0ZXJNYXJrKSxSZS5zeW5jPSExLFJlLnJlYWRpbmd8fChGZT1VKEllLFJl'@;
put 'KSkpLG51bGw9PT0oRGU9RmU+MD92ZShGZSxSZSk6bnVsbCk/KFJlLm5lZWRSZWFkYWJsZT1SZS5sZW5ndGg8PVJlLmhpZ2hXYXRlck1hcmssRmU9MCk6KFJlLmxlbmd0aC09RmUsUmUuYXdhaXREcmFpbj0wKSwwPT09UmUubGVuZ3RoJiYoUmUuZW5kZWR8fChSZS5uZWVkUmVhZGFibGU9ITAp'@;
put 'LEllIT09RmUmJlJlLmVuZGVkJiZxZSh0aGlzKSksbnVsbCE9PURlJiZ0aGlzLmVtaXQoImRhdGEiLERlKSxEZX0sZy5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRmUpe1RlKHRoaXMsbmV3IHRlKCJfcmVhZCgpIikpfSxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEZlLFJlKXt2YXIgSWU9'@;
put 'dGhpcyxIZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChIZS5waXBlc0NvdW50KXtjYXNlIDA6SGUucGlwZXM9RmU7YnJlYWs7Y2FzZSAxOkhlLnBpcGVzPVtIZS5waXBlcyxGZV07YnJlYWs7ZGVmYXVsdDpIZS5waXBlcy5wdXNoKEZlKX1IZS5waXBlc0NvdW50Kz0xLEwoInBpcGUgY291'@;
put 'bnQ9JWQgb3B0cz0laiIsSGUucGlwZXNDb3VudCxSZSk7dmFyIGtlPVJlJiYhMT09PVJlLmVuZHx8RmU9PT1ELnN0ZG91dHx8RmU9PT1ELnN0ZGVycj90dDpudDtmdW5jdGlvbiBudCgpe0woIm9uZW5kIiksRmUuZW5kKCl9SGUuZW5kRW1pdHRlZD9ELm5leHRUaWNrKGtlKTpJZS5vbmNlKCJl'@;
put 'bmQiLGtlKSxGZS5vbigidW5waXBlIixmdW5jdGlvbiBfdChOZSx1dCl7TCgib251bnBpcGUiKSxOZT09PUllJiZ1dCYmITE9PT11dC5oYXNVbnBpcGVkJiYodXQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiB5dCgpe0woImNsZWFudXAiKSxGZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHJ0KSxG'@;
put 'ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixLZSksRmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixKZSksRmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixJdCksRmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsX3QpLEllLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG50KSxJZS5yZW1vdmVMaXN0ZW5l'@;
put 'cigiZW5kIix0dCksSWUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLE10KSxvbj0hMCxIZS5hd2FpdERyYWluJiYoIUZlLl93cml0YWJsZVN0YXRlfHxGZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZKZSgpfSgpKX0pO3ZhciBKZT1mdW5jdGlvbiBsZShGZSl7cmV0dXJuIGZ1bmN0aW9uKCl7'@;
put 'dmFyIEllPUZlLl9yZWFkYWJsZVN0YXRlO0woInBpcGVPbkRyYWluIixJZS5hd2FpdERyYWluKSxJZS5hd2FpdERyYWluJiZJZS5hd2FpdERyYWluLS0sMD09PUllLmF3YWl0RHJhaW4mJk4oRmUsImRhdGEiKSYmKEllLmZsb3dpbmc9ITAseGUoRmUpKX19KEllKTtGZS5vbigiZHJhaW4iLEpl'@;
put 'KTt2YXIgb249ITE7ZnVuY3Rpb24gTXQoTmUpe0woIm9uZGF0YSIpO3ZhciB1dD1GZS53cml0ZShOZSk7TCgiZGVzdC53cml0ZSIsdXQpLCExPT09dXQmJigoMT09PUhlLnBpcGVzQ291bnQmJkhlLnBpcGVzPT09RmV8fEhlLnBpcGVzQ291bnQ+MSYmLTEhPT1BZShIZS5waXBlcyxGZSkpJiYh'@;
put 'b24mJihMKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLEhlLmF3YWl0RHJhaW4pLEhlLmF3YWl0RHJhaW4rKyksSWUucGF1c2UoKSl9ZnVuY3Rpb24gSXQoTmUpe0woIm9uZXJyb3IiLE5lKSx0dCgpLEZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSXQpLDA9PT1OKEZlLCJlcnJvciIp'@;
put 'JiZUZShGZSxOZSl9ZnVuY3Rpb24gcnQoKXtGZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixLZSksdHQoKX1mdW5jdGlvbiBLZSgpe0woIm9uZmluaXNoIiksRmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixydCksdHQoKX1mdW5jdGlvbiB0dCgpe0woInVucGlwZSIpLEllLnVucGlwZShGZSl9'@;
put 'cmV0dXJuIEllLm9uKCJkYXRhIixNdCksZnVuY3Rpb24gemUoRmUsUmUsSWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIEZlLnByZXBlbmRMaXN0ZW5lcihSZSxJZSk7RmUuX2V2ZW50cyYmRmUuX2V2ZW50c1tSZV0/QXJyYXkuaXNBcnJheShGZS5f'@;
put 'ZXZlbnRzW1JlXSk/RmUuX2V2ZW50c1tSZV0udW5zaGlmdChJZSk6RmUuX2V2ZW50c1tSZV09W0llLEZlLl9ldmVudHNbUmVdXTpGZS5vbihSZSxJZSl9KEZlLCJlcnJvciIsSXQpLEZlLm9uY2UoImNsb3NlIixydCksRmUub25jZSgiZmluaXNoIixLZSksRmUuZW1pdCgicGlwZSIsSWUpLEhl'@;
put 'LmZsb3dpbmd8fChMKCJwaXBlIHJlc3VtZSIpLEllLnJlc3VtZSgpKSxGZX0sZy5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKEZlKXt2YXIgUmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT17aGFzVW5waXBlZDohMX07aWYoMD09PVJlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PVJl'@;
put 'LnBpcGVzQ291bnQpcmV0dXJuIEZlJiZGZSE9PVJlLnBpcGVzfHwoRmV8fChGZT1SZS5waXBlcyksUmUucGlwZXM9bnVsbCxSZS5waXBlc0NvdW50PTAsUmUuZmxvd2luZz0hMSxGZSYmRmUuZW1pdCgidW5waXBlIix0aGlzLEllKSksdGhpcztpZighRmUpe3ZhciBIZT1SZS5waXBlcyxEZT1S'@;
put 'ZS5waXBlc0NvdW50O1JlLnBpcGVzPW51bGwsUmUucGlwZXNDb3VudD0wLFJlLmZsb3dpbmc9ITE7Zm9yKHZhciBrZT0wO2tlPERlO2tlKyspSGVba2VdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBfdD1BZShSZS5waXBlcyxGZSk7cmV0dXJu'@;
put 'LTE9PT1fdHx8KFJlLnBpcGVzLnNwbGljZShfdCwxKSxSZS5waXBlc0NvdW50LT0xLDE9PT1SZS5waXBlc0NvdW50JiYoUmUucGlwZXM9UmUucGlwZXNbMF0pLEZlLmVtaXQoInVucGlwZSIsdGhpcyxJZSkpLHRoaXN9LGcucHJvdG90eXBlLmFkZExpc3RlbmVyPWcucHJvdG90eXBlLm9uPWZ1'@;
put 'bmN0aW9uKEZlLFJlKXt2YXIgSWU9dy5wcm90b3R5cGUub24uY2FsbCh0aGlzLEZlLFJlKSxIZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PUZlPyhIZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PUhlLmZsb3dpbmcm'@;
put 'JnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1GZSYmIUhlLmVuZEVtaXR0ZWQmJiFIZS5yZWFkYWJsZUxpc3RlbmluZyYmKEhlLnJlYWRhYmxlTGlzdGVuaW5nPUhlLm5lZWRSZWFkYWJsZT0hMCxIZS5mbG93aW5nPSExLEhlLmVtaXR0ZWRSZWFkYWJsZT0hMSxMKCJvbiByZWFkYWJsZSIs'@;
put 'SGUubGVuZ3RoLEhlLnJlYWRpbmcpLEhlLmxlbmd0aD9tKHRoaXMpOkhlLnJlYWRpbmd8fEQubmV4dFRpY2soWmUsdGhpcykpLEllfSxnLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihGZSxSZSl7dmFyIEllPXcucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxG'@;
put 'ZSxSZSk7cmV0dXJuInJlYWRhYmxlIj09PUZlJiZELm5leHRUaWNrKHdlLHRoaXMpLEllfSxnLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oRmUpe3ZhciBSZT13LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigi'@;
put 'cmVhZGFibGUiPT09RmV8fHZvaWQgMD09PUZlKSYmRC5uZXh0VGljayh3ZSx0aGlzKSxSZX0sZy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEZlLmZsb3dpbmd8fChMKCJyZXN1bWUiKSxGZS5mbG93aW5nPSFGZS5yZWFkYWJs'@;
put 'ZUxpc3RlbmluZyxmdW5jdGlvbiBRZShGZSxSZSl7UmUucmVzdW1lU2NoZWR1bGVkfHwoUmUucmVzdW1lU2NoZWR1bGVkPSEwLEQubmV4dFRpY2soYXQsRmUsUmUpKX0odGhpcyxGZSkpLEZlLnBhdXNlZD0hMSx0aGlzfSxnLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBMKCJj'@;
put 'YWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihMKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3Rh'@;
put 'dGUucGF1c2VkPSEwLHRoaXN9LGcucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oRmUpe3ZhciBSZT10aGlzLEllPXRoaXMuX3JlYWRhYmxlU3RhdGUsSGU9ITE7Zm9yKHZhciBEZSBpbiBGZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKEwoIndyYXBwZWQgZW5kIiksSWUuZGVjb2RlciYmIUllLmVu'@;
put 'ZGVkKXt2YXIgX3Q9SWUuZGVjb2Rlci5lbmQoKTtfdCYmX3QubGVuZ3RoJiZSZS5wdXNoKF90KX1SZS5wdXNoKG51bGwpfSksRmUub24oImRhdGEiLGZ1bmN0aW9uKF90KXtMKCJ3cmFwcGVkIGRhdGEiKSxJZS5kZWNvZGVyJiYoX3Q9SWUuZGVjb2Rlci53cml0ZShfdCkpLEllLm9iamVjdE1v'@;
put 'ZGUmJm51bGw9PV90fHwhKEllLm9iamVjdE1vZGV8fF90JiZfdC5sZW5ndGgpfHxSZS5wdXNoKF90KXx8KEhlPSEwLEZlLnBhdXNlKCkpfSksRmUpdm9pZCAwPT09dGhpc1tEZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBGZVtEZV0mJih0aGlzW0RlXT1mdW5jdGlvbihudCl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEZlW250XS5hcHBseShGZSxhcmd1bWVudHMpfX0oRGUpKTtmb3IodmFyIGtlPTA7a2U8U2UubGVuZ3RoO2tlKyspRmUub24oU2Vba2VdLHRoaXMuZW1pdC5iaW5kKHRoaXMsU2Vba2VdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oX3Qpe0woIndyYXBwZWQgX3Jl'@;
put 'YWQiLF90KSxIZSYmKEhlPSExLEZlLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGcucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1nZSYmKGdlPWIoNTg1MCkpLGdlKHRoaXMpfSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJyZWFkYWJs'@;
put 'ZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxn'@;
put 'ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oUmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9UmUpfX0pLGcuX2Zyb21MaXN0PXZlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnBy'@;
put 'b3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZy5mcm9tPWZ1bmN0aW9uKEZlLFJlKXtyZXR1cm4gdm9pZCAwPT09X2UmJihf'@;
put 'ZT1iKDUxNjcpKSxfZShnLEZlLFJlKX0pfSw0NjA1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Ujt2YXIgRD1iKDQyODEpLnEsXz1ELkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHA9RC5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssTj1ELkVSUl9UUkFOU0ZPUk1fQUxSRUFE'@;
put 'WV9UUkFOU0ZPUk1JTkcsdz1ELkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxGPWIoNjc1Myk7ZnVuY3Rpb24gSChMLFkpe3ZhciBCPXRoaXMuX3RyYW5zZm9ybVN0YXRlO0IudHJhbnNmb3JtaW5nPSExO3ZhciBXPUIud3JpdGVjYjtpZihudWxsPT09VylyZXR1cm4gdGhpcy5lbWl0KCJl'@;
put 'cnJvciIsbmV3IHApO0Iud3JpdGVjaHVuaz1udWxsLEIud3JpdGVjYj1udWxsLG51bGwhPVkmJnRoaXMucHVzaChZKSxXKEwpO3ZhciBaPXRoaXMuX3JlYWRhYmxlU3RhdGU7Wi5yZWFkaW5nPSExLChaLm5lZWRSZWFkYWJsZXx8Wi5sZW5ndGg8Wi5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVh'@;
put 'ZChaLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIFIoTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUikpcmV0dXJuIG5ldyBSKEwpO0YuY2FsbCh0aGlzLEwpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpILmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1p'@;
put 'bmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxMJiYoImZ1bmN0aW9uIj09dHlwZW9mIEwudHJhbnNmb3JtJiYodGhpcy5fdHJh'@;
put 'bnNmb3JtPUwudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgTC5mbHVzaCYmKHRoaXMuX2ZsdXNoPUwuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLGopfWZ1bmN0aW9uIGooKXt2YXIgTD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVT'@;
put 'dGF0ZS5kZXN0cm95ZWQ/UCh0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oWSxCKXtQKEwsWSxCKX0pfWZ1bmN0aW9uIFAoTCxZLEIpe2lmKFkpcmV0dXJuIEwuZW1pdCgiZXJyb3IiLFkpO2lmKG51bGwhPUImJkwucHVzaChCKSxMLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0'@;
put 'aHJvdyBuZXcgdztpZihMLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IE47cmV0dXJuIEwucHVzaChudWxsKX1iKDU3MTcpKFIsRiksUi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihMLFkpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSEx'@;
put 'LEYucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEwsWSl9LFIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTCxZLEIpe0IobmV3IF8oIl90cmFuc2Zvcm0oKSIpKX0sUi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEwsWSxCKXt2YXIgVz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihX'@;
put 'LndyaXRlY2I9QixXLndyaXRlY2h1bms9TCxXLndyaXRlZW5jb2Rpbmc9WSwhVy50cmFuc2Zvcm1pbmcpe3ZhciBaPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFcubmVlZFRyYW5zZm9ybXx8Wi5uZWVkUmVhZGFibGV8fFoubGVuZ3RoPFouaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWi5oaWdo'@;
put 'V2F0ZXJNYXJrKX19LFIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEwpe3ZhciBZPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1ZLndyaXRlY2h1bmt8fFkudHJhbnNmb3JtaW5nP1kubmVlZFRyYW5zZm9ybT0hMDooWS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFkud3Jp'@;
put 'dGVjaHVuayxZLndyaXRlZW5jb2RpbmcsWS5hZnRlclRyYW5zZm9ybSkpfSxSLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihMLFkpe0YucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxMLGZ1bmN0aW9uKEIpe1koQil9KX19LDQyMjk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IE4sRD1iKDQxNTUpO2Z1bmN0aW9uIHAoeGUpe3ZhciB2ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBhdCh4ZSx2ZSxxZSl7dmFyIGplPXhlLmVudHJ5O2Zvcih4ZS5lbnRyeT1udWxsO2plOyl7dmFyIEFlPWpl'@;
put 'LmNhbGxiYWNrO3ZlLnBlbmRpbmdjYi0tLEFlKHFlKSxqZT1qZS5uZXh0fXZlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXhlfSh2ZSx4ZSl9fWNlLmV4cG9ydHM9eix6LldyaXRhYmxlU3RhdGU9U2U7dmFyIHplLHc9e2RlcHJlY2F0ZTpiKDQ5MjcpfSxGPWIoMjUwMyksSD1iKDg3NjQpLkJ1'@;
put 'ZmZlcixSPSh0eXBlb2YgYi5nPCJ1Ij9iLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTD1iKDExOTUpLEI9YigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFc9Yig0MjgxKS5xLFo9Vy5FUlJfSU5WQUxJ'@;
put 'RF9BUkdfVFlQRSxYPVcuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsUT1XLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxxPVcuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSx0ZT1XLkVSUl9TVFJFQU1fREVTVFJPWUVELGllPVcuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxzZT1XLkVSUl9TVFJFQU1f'@;
put 'V1JJVEVfQUZURVJfRU5ELGdlPVcuRVJSX1VOS05PV05fRU5DT0RJTkcsX2U9TC5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBUZSgpe31mdW5jdGlvbiBTZSh4ZSx2ZSxxZSl7Tj1OfHxiKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIHFlJiYocWU9dmUgaW5zdGFuY2VvZiBOKSx0aGlzLm9iamVj'@;
put 'dE1vZGU9ISEoeGU9eGV8fHt9KS5vYmplY3RNb2RlLHFlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF4ZS53cml0YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1CKHRoaXMseGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIscWUpLHRoaXMuZmluYWxDYWxs'@;
put 'ZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09eGUuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9eGUuZGVmYXVsdEVu'@;
put 'Y29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihBZSl7IWZ1bmN0aW9uIEUoeGUsdmUpe3ZhciBxZT14ZS5fd3JpdGFibGVTdGF0'@;
put 'ZSxqZT1xZS5zeW5jLEFlPXFlLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEFlKXRocm93IG5ldyBRO2lmKGZ1bmN0aW9uIFUoeGUpe3hlLndyaXRpbmc9ITEseGUud3JpdGVjYj1udWxsLHhlLmxlbmd0aC09eGUud3JpdGVsZW4seGUud3JpdGVsZW49MH0ocWUpLHZlKSFmdW5jdGlv'@;
put 'biBWKHhlLHZlLHFlLGplLEFlKXstLXZlLnBlbmRpbmdjYixxZT8oRC5uZXh0VGljayhBZSxqZSksRC5uZXh0VGljayhaZSx4ZSx2ZSkseGUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLF9lKHhlLGplKSk6KEFlKGplKSx4ZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAs'@;
put 'X2UoeGUsamUpLFplKHhlLHZlKSl9KHhlLHFlLGplLHZlLEFlKTtlbHNle3ZhciBGZT1uZShxZSl8fHhlLmRlc3Ryb3llZDshRmUmJiFxZS5jb3JrZWQmJiFxZS5idWZmZXJQcm9jZXNzaW5nJiZxZS5idWZmZXJlZFJlcXVlc3QmJmFlKHhlLHFlKSxqZT9ELm5leHRUaWNrKG0seGUscWUsRmUs'@;
put 'QWUpOm0oeGUscWUsRmUsQWUpfX0odmUsQWUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJv'@;
put 'ckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT14ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIXhlLmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgcCh0aGlzKX1mdW5jdGlvbiB6KHhlKXt2YXIgdmU9'@;
put 'dGhpcyBpbnN0YW5jZW9mKE49Tnx8Yig2NzUzKSk7aWYoIXZlJiYhemUuY2FsbCh6LHRoaXMpKXJldHVybiBuZXcgeih4ZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgU2UoeGUsdGhpcyx2ZSksdGhpcy53cml0YWJsZT0hMCx4ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS53cml0ZSYmKHRo'@;
put 'aXMuX3dyaXRlPXhlLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUud3JpdGV2JiYodGhpcy5fd3JpdGV2PXhlLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIHhlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXhlLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5maW5hbCYmKHRo'@;
put 'aXMuX2ZpbmFsPXhlLmZpbmFsKSksRi5jYWxsKHRoaXMpfWZ1bmN0aW9uIFQoeGUsdmUscWUsamUsQWUsRmUsUmUpe3ZlLndyaXRlbGVuPWplLHZlLndyaXRlY2I9UmUsdmUud3JpdGluZz0hMCx2ZS5zeW5jPSEwLHZlLmRlc3Ryb3llZD92ZS5vbndyaXRlKG5ldyB0ZSgid3JpdGUiKSk6cWU/'@;
put 'eGUuX3dyaXRldihBZSx2ZS5vbndyaXRlKTp4ZS5fd3JpdGUoQWUsRmUsdmUub253cml0ZSksdmUuc3luYz0hMX1mdW5jdGlvbiBtKHhlLHZlLHFlLGplKXtxZXx8ZnVuY3Rpb24gQSh4ZSx2ZSl7MD09PXZlLmxlbmd0aCYmdmUubmVlZERyYWluJiYodmUubmVlZERyYWluPSExLHhlLmVtaXQo'@;
put 'ImRyYWluIikpfSh4ZSx2ZSksdmUucGVuZGluZ2NiLS0samUoKSxaZSh4ZSx2ZSl9ZnVuY3Rpb24gYWUoeGUsdmUpe3ZlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHFlPXZlLmJ1ZmZlcmVkUmVxdWVzdDtpZih4ZS5fd3JpdGV2JiZxZSYmcWUubmV4dCl7dmFyIEFlPW5ldyBBcnJheSh2ZS5i'@;
put 'dWZmZXJlZFJlcXVlc3RDb3VudCksRmU9dmUuY29ya2VkUmVxdWVzdHNGcmVlO0ZlLmVudHJ5PXFlO2Zvcih2YXIgUmU9MCxJZT0hMDtxZTspQWVbUmVdPXFlLHFlLmlzQnVmfHwoSWU9ITEpLHFlPXFlLm5leHQsUmUrPTE7QWUuYWxsQnVmZmVycz1JZSxUKHhlLHZlLCEwLHZlLmxlbmd0aCxB'@;
put 'ZSwiIixGZS5maW5pc2gpLHZlLnBlbmRpbmdjYisrLHZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxGZS5uZXh0Pyh2ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9RmUubmV4dCxGZS5uZXh0PW51bGwpOnZlLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgcCh2ZSksdmUuYnVmZmVyZWRSZXF1ZXN0Q291'@;
put 'bnQ9MH1lbHNle2Zvcig7cWU7KXt2YXIgSGU9cWUuY2h1bms7aWYoVCh4ZSx2ZSwhMSx2ZS5vYmplY3RNb2RlPzE6SGUubGVuZ3RoLEhlLHFlLmVuY29kaW5nLHFlLmNhbGxiYWNrKSxxZT1xZS5uZXh0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdmUud3JpdGluZylicmVha31udWxsPT09'@;
put 'cWUmJih2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXZlLmJ1ZmZlcmVkUmVxdWVzdD1xZSx2ZS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIG5lKHhlKXtyZXR1cm4geGUuZW5kaW5nJiYwPT09eGUubGVuZ3RoJiZudWxsPT09eGUuYnVmZmVyZWRSZXF1ZXN0JiYheGUuZmluaXNo'@;
put 'ZWQmJiF4ZS53cml0aW5nfWZ1bmN0aW9uIGxlKHhlLHZlKXt4ZS5fZmluYWwoZnVuY3Rpb24ocWUpe3ZlLnBlbmRpbmdjYi0tLHFlJiZfZSh4ZSxxZSksdmUucHJlZmluaXNoZWQ9ITAseGUuZW1pdCgicHJlZmluaXNoIiksWmUoeGUsdmUpfSl9ZnVuY3Rpb24gWmUoeGUsdmUpe3ZhciBxZT1u'@;
put 'ZSh2ZSk7aWYocWUmJihmdW5jdGlvbiB3ZSh4ZSx2ZSl7IXZlLnByZWZpbmlzaGVkJiYhdmUuZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iIT10eXBlb2YgeGUuX2ZpbmFsfHx2ZS5kZXN0cm95ZWQ/KHZlLnByZWZpbmlzaGVkPSEwLHhlLmVtaXQoInByZWZpbmlzaCIpKToodmUucGVuZGluZ2Ni'@;
put 'KyssdmUuZmluYWxDYWxsZWQ9ITAsRC5uZXh0VGljayhsZSx4ZSx2ZSkpKX0oeGUsdmUpLDA9PT12ZS5wZW5kaW5nY2ImJih2ZS5maW5pc2hlZD0hMCx4ZS5lbWl0KCJmaW5pc2giKSx2ZS5hdXRvRGVzdHJveSkpKXt2YXIgamU9eGUuX3JlYWRhYmxlU3RhdGU7KCFqZXx8amUuYXV0b0Rlc3Ry'@;
put 'b3kmJmplLmVuZEVtaXR0ZWQpJiZ4ZS5kZXN0cm95KCl9cmV0dXJuIHFlfWIoNTcxNykoeixGKSxTZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB2ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxxZT1bXTt2ZTspcWUucHVzaCh2ZSksdmU9dmUubmV4dDtyZXR1cm4gcWV9'@;
put 'LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShTZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDp3LmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVT'@;
put 'dGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyh6ZT1GdW5jdGlv'@;
put 'bi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKHZlKXtyZXR1cm4hIXplLmNhbGwodGhpcyx2ZSl8fHRoaXM9PT16JiZ2ZSYmdmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBT'@;
put 'ZX19KSk6emU9ZnVuY3Rpb24odmUpe3JldHVybiB2ZSBpbnN0YW5jZW9mIHRoaXN9LHoucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtfZSh0aGlzLG5ldyBxKX0sei5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeGUsdmUscWUpe3ZhciBqZT10aGlzLl93cml0YWJsZVN0YXRlLEFlPSExLEZl'@;
put 'PSFqZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBQKHhlKXtyZXR1cm4gSC5pc0J1ZmZlcih4ZSl8fHhlIGluc3RhbmNlb2YgUn0oeGUpO3JldHVybiBGZSYmIUguaXNCdWZmZXIoeGUpJiYoeGU9ZnVuY3Rpb24gaih4ZSl7cmV0dXJuIEguZnJvbSh4ZSl9KHhlKSksImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IHZlJiYocWU9dmUsdmU9bnVsbCksRmU/dmU9ImJ1ZmZlciI6dmV8fCh2ZT1qZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBxZSYmKHFlPVRlKSxqZS5lbmRpbmc/ZnVuY3Rpb24gZyh4ZSx2ZSl7dmFyIHFlPW5ldyBzZTtfZSh4ZSxxZSksRC5uZXh0VGljayh2ZSxxZSl9'@;
put 'KHRoaXMscWUpOihGZXx8ZnVuY3Rpb24geSh4ZSx2ZSxxZSxqZSl7dmFyIEFlO3JldHVybiBudWxsPT09cWU/QWU9bmV3IGllOiJzdHJpbmciIT10eXBlb2YgcWUmJiF2ZS5vYmplY3RNb2RlJiYoQWU9bmV3IFooImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLHFlKSksIUFlfHwoX2UoeGUs'@;
put 'QWUpLEQubmV4dFRpY2soamUsQWUpLCExKX0odGhpcyxqZSx4ZSxxZSkpJiYoamUucGVuZGluZ2NiKyssQWU9ZnVuY3Rpb24gQyh4ZSx2ZSxxZSxqZSxBZSxGZSl7aWYoIXFlKXt2YXIgUmU9ZnVuY3Rpb24geCh4ZSx2ZSxxZSl7cmV0dXJuIXhlLm9iamVjdE1vZGUmJiExIT09eGUuZGVjb2Rl'@;
put 'U3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB2ZSYmKHZlPUguZnJvbSh2ZSxxZSkpLHZlfSh2ZSxqZSxBZSk7amUhPT1SZSYmKHFlPSEwLEFlPSJidWZmZXIiLGplPVJlKX12YXIgSWU9dmUub2JqZWN0TW9kZT8xOmplLmxlbmd0aDt2ZS5sZW5ndGgrPUllO3ZhciBIZT12ZS5sZW5ndGg8dmUu'@;
put 'aGlnaFdhdGVyTWFyaztpZihIZXx8KHZlLm5lZWREcmFpbj0hMCksdmUud3JpdGluZ3x8dmUuY29ya2VkKXt2YXIgRGU9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDt2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpqZSxlbmNvZGluZzpBZSxpc0J1ZjpxZSxjYWxsYmFjazpGZSxuZXh0Om51'@;
put 'bGx9LERlP0RlLm5leHQ9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDp2ZS5idWZmZXJlZFJlcXVlc3Q9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdCx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIFQoeGUsdmUsITEsSWUsamUsQWUsRmUpO3JldHVybiBIZX0odGhpcyxqZSxGZSx4ZSx2ZSxx'@;
put 'ZSkpLEFlfSx6LnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sei5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX3dyaXRhYmxlU3RhdGU7eGUuY29ya2VkJiYoeGUuY29ya2VkLS0sIXhlLndyaXRpbmcmJiF4ZS5j'@;
put 'b3JrZWQmJiF4ZS5idWZmZXJQcm9jZXNzaW5nJiZ4ZS5idWZmZXJlZFJlcXVlc3QmJmFlKHRoaXMseGUpKX0sei5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHZlKXtpZigic3RyaW5nIj09dHlwZW9mIHZlJiYodmU9dmUudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0'@;
put 'ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigodmUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgZ2UodmUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1'@;
put 'bHRFbmNvZGluZz12ZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSx6LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oeGUsdmUs'@;
put 'cWUpe3FlKG5ldyBYKCJfd3JpdGUoKSIpKX0sei5wcm90b3R5cGUuX3dyaXRldj1udWxsLHoucHJvdG90eXBlLmVuZD1mdW5jdGlvbih4ZSx2ZSxxZSl7dmFyIGplPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHhlPyhxZT14ZSx4ZT1udWxsLHZlPW51bGwp'@;
put 'OiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKHFlPXZlLHZlPW51bGwpLG51bGwhPXhlJiZ0aGlzLndyaXRlKHhlLHZlKSxqZS5jb3JrZWQmJihqZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxqZS5lbmRpbmd8fGZ1bmN0aW9uIFFlKHhlLHZlLHFlKXt2ZS5lbmRpbmc9ITAsWmUoeGUsdmUpLHFl'@;
put 'JiYodmUuZmluaXNoZWQ/RC5uZXh0VGljayhxZSk6eGUub25jZSgiZmluaXNoIixxZSkpLHZlLmVuZGVkPSEwLHhlLndyaXRhYmxlPSExfSh0aGlzLGplLHFlKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxn'@;
put 'ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0'@;
put 'aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHZlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLHoucHJvdG90eXBlLmRlc3Ryb3k9TC5kZXN0cm95LHoucHJvdG90eXBlLl91bmRlc3Ryb3k9TC51bmRl'@;
put 'c3Ryb3ksei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeGUsdmUpe3ZlKHhlKX19LDU4NTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIF8sRD1iKDQxNTUpO2Z1bmN0aW9uIHAoc2UsZ2UsX2Upe3JldHVybiBnZT1mdW5jdGlvbiBOKHNlKXt2YXIgZ2U9ZnVuY3Rpb24gdyhzZSxn'@;
put 'ZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBzZXx8bnVsbD09PXNlKXJldHVybiBzZTt2YXIgX2U9c2VbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1fZSl7dmFyIFRlPV9lLmNhbGwoc2UsZ2V8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBUZSlyZXR1cm4gVGU7dGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1nZT9TdHJpbmc6TnVtYmVyKShzZSl9KHNlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGdlP2dlOlN0cmluZyhnZSl9KGdlKSxnZSBp'@;
put 'biBzZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoc2UsZ2Use3ZhbHVlOl9lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6c2VbZ2VdPV9lLHNlfXZhciBGPWIoODYxMCksSD1TeW1ib2woImxhc3RSZXNvbHZlIiksUj1TeW1ib2woImxhc3RSZWplY3QiKSxqPVN5'@;
put 'bWJvbCgiZXJyb3IiKSxQPVN5bWJvbCgiZW5kZWQiKSxMPVN5bWJvbCgibGFzdFByb21pc2UiKSxZPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLEI9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBXKHNlLGdlKXtyZXR1cm57dmFsdWU6c2UsZG9uZTpnZX19ZnVuY3Rpb24gWihzZSl7dmFyIGdl'@;
put 'PXNlW0hdO2lmKG51bGwhPT1nZSl7dmFyIF9lPXNlW0JdLnJlYWQoKTtudWxsIT09X2UmJihzZVtMXT1udWxsLHNlW0hdPW51bGwsc2VbUl09bnVsbCxnZShXKF9lLCExKSkpfX1mdW5jdGlvbiBYKHNlKXtELm5leHRUaWNrKFosc2UpfXZhciBxPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5j'@;
put 'dGlvbigpe30pLHRlPU9iamVjdC5zZXRQcm90b3R5cGVPZigocChfPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbQl19LG5leHQ6ZnVuY3Rpb24oKXt2YXIgZ2U9dGhpcyxfZT10aGlzW2pdO2lmKG51bGwhPT1fZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoX2UpO2lmKHRoaXNbUF0pcmV0dXJu'@;
put 'IFByb21pc2UucmVzb2x2ZShXKHZvaWQgMCwhMCkpO2lmKHRoaXNbQl0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih6LGcpe0QubmV4dFRpY2soZnVuY3Rpb24oKXtnZVtqXT9nKGdlW2pdKTp6KFcodm9pZCAwLCEwKSl9KX0pO3ZhciBTZSxUZT10aGlzW0xdO2lmKFRl'@;
put 'KVNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIFEoc2UsZ2Upe3JldHVybiBmdW5jdGlvbihfZSxUZSl7c2UudGhlbihmdW5jdGlvbigpe2dlW1BdP19lKFcodm9pZCAwLCEwKSk6Z2VbWV0oX2UsVGUpfSxUZSl9fShUZSx0aGlzKSk7ZWxzZXt2YXIgemU9dGhpc1tCXS5yZWFkKCk7aWYobnVsbCE9'@;
put 'PXplKXJldHVybiBQcm9taXNlLnJlc29sdmUoVyh6ZSwhMSkpO1NlPW5ldyBQcm9taXNlKHRoaXNbWV0pfXJldHVybiB0aGlzW0xdPVNlLFNlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHAoXywicmV0dXJuIixmdW5jdGlvbigpe3ZhciBnZT10aGlz'@;
put 'O3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfZSxUZSl7Z2VbQl0uZGVzdHJveShudWxsLGZ1bmN0aW9uKFNlKXtTZT9UZShTZSk6X2UoVyh2b2lkIDAsITApKX0pfSl9KSxfKSxxKTtjZS5leHBvcnRzPWZ1bmN0aW9uKGdlKXt2YXIgX2UsVGU9T2JqZWN0LmNyZWF0ZSh0ZSwocChfZT17'@;
put 'fSxCLHt2YWx1ZTpnZSx3cml0YWJsZTohMH0pLHAoX2UsSCx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2UsUix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2Usaix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2UsUCx7dmFsdWU6Z2UuX3JlYWRhYmxlU3RhdGUuZW5kRW1p'@;
put 'dHRlZCx3cml0YWJsZTohMH0pLHAoX2UsWSx7dmFsdWU6ZnVuY3Rpb24oemUseil7dmFyIGc9VGVbQl0ucmVhZCgpO2c/KFRlW0xdPW51bGwsVGVbSF09bnVsbCxUZVtSXT1udWxsLHplKFcoZywhMSkpKTooVGVbSF09emUsVGVbUl09eil9LHdyaXRhYmxlOiEwfSksX2UpKTtyZXR1cm4gVGVb'@;
put 'TF09bnVsbCxGKGdlLGZ1bmN0aW9uKFNlKXtpZihTZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PVNlLmNvZGUpe3ZhciB6ZT1UZVtSXTtyZXR1cm4gbnVsbCE9PXplJiYoVGVbTF09bnVsbCxUZVtIXT1udWxsLFRlW1JdPW51bGwsemUoU2UpKSx2b2lkKFRlW2pdPVNlKX12YXIg'@;
put 'ej1UZVtIXTtudWxsIT09eiYmKFRlW0xdPW51bGwsVGVbSF09bnVsbCxUZVtSXT1udWxsLHooVyh2b2lkIDAsITApKSksVGVbUF09ITB9KSxnZS5vbigicmVhZGFibGUiLFguYmluZChudWxsLFRlKSksVGV9fSw3MzI3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQoWixYKXt2'@;
put 'YXIgUT1PYmplY3Qua2V5cyhaKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFopO1gmJihxPXEuZmlsdGVyKGZ1bmN0aW9uKHRlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihaLHRlKS5l'@;
put 'bnVtZXJhYmxlfSkpLFEucHVzaC5hcHBseShRLHEpfXJldHVybiBRfWZ1bmN0aW9uIF8oWil7Zm9yKHZhciBYPTE7WDxhcmd1bWVudHMubGVuZ3RoO1grKyl7dmFyIFE9bnVsbCE9YXJndW1lbnRzW1hdP2FyZ3VtZW50c1tYXTp7fTtYJTI/RChPYmplY3QoUSksITApLmZvckVhY2goZnVuY3Rp'@;
put 'b24ocSl7cChaLHEsUVtxXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhaLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFEpKTpEKE9iamVjdChRKSkuZm9yRWFjaChmdW5jdGlvbihxKXtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoWixxLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUSxxKSl9KX1yZXR1cm4gWn1mdW5jdGlvbiBwKFosWCxRKXtyZXR1cm4oWD1IKFgpKWluIFo/T2JqZWN0LmRlZmluZVByb3BlcnR5KFosWCx7dmFsdWU6USxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0'@;
put 'YWJsZTohMH0pOlpbWF09USxafWZ1bmN0aW9uIHcoWixYKXtmb3IodmFyIFE9MDtRPFgubGVuZ3RoO1ErKyl7dmFyIHE9WFtRXTtxLmVudW1lcmFibGU9cS5lbnVtZXJhYmxlfHwhMSxxLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gcSYmKHEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShaLEgocS5rZXkpLHEpfX1mdW5jdGlvbiBIKFope3ZhciBYPWZ1bmN0aW9uIFIoWixYKXtpZigib2JqZWN0IiE9dHlwZW9mIFp8fG51bGw9PT1aKXJldHVybiBaO3ZhciBRPVpbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1RKXt2YXIgcT1RLmNhbGwoWixYfHwiZGVm'@;
put 'YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcSlyZXR1cm4gcTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PVg/U3RyaW5nOk51bWJlcikoWil9KFosInN0cmluZyIpO3JldHVybiJz'@;
put 'eW1ib2wiPT10eXBlb2YgWD9YOlN0cmluZyhYKX12YXIgUD1iKDg3NjQpLkJ1ZmZlcixZPWIoMjM2MSkuaW5zcGVjdCxCPVkmJlkuY3VzdG9tfHwiaW5zcGVjdCI7ZnVuY3Rpb24gVyhaLFgsUSl7UC5wcm90b3R5cGUuY29weS5jYWxsKFosWCxRKX1jZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVu'@;
put 'Y3Rpb24gWigpeyhmdW5jdGlvbiBOKFosWCl7aWYoIShaIGluc3RhbmNlb2YgWCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFopLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJu'@;
put 'IGZ1bmN0aW9uIEYoWixYLFEpe1gmJncoWi5wcm90b3R5cGUsWCksUSYmdyhaLFEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShaLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShaLFt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihRKXt2YXIgcT17ZGF0YTpRLG5leHQ6bnVsbH07dGhpcy5s'@;
put 'ZW5ndGg+MD90aGlzLnRhaWwubmV4dD1xOnRoaXMuaGVhZD1xLHRoaXMudGFpbD1xLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihRKXt2YXIgcT17ZGF0YTpRLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9cSksdGhpcy5o'@;
put 'ZWFkPXEsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIFE9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxl'@;
put 'bmd0aCxRfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24oUSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgcT10aGlzLmhlYWQsdGU9IiIr'@;
put 'cS5kYXRhO3E9cS5uZXh0Oyl0ZSs9UStxLmRhdGE7cmV0dXJuIHRlfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihRKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIFAuYWxsb2MoMCk7Zm9yKHZhciBxPVAuYWxsb2NVbnNhZmUoUT4+PjApLHRlPXRoaXMuaGVhZCxpZT0wO3RlOylX'@;
put 'KHRlLmRhdGEscSxpZSksaWUrPXRlLmRhdGEubGVuZ3RoLHRlPXRlLm5leHQ7cmV0dXJuIHF9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbihRLHEpe3ZhciB0ZTtyZXR1cm4gUTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KHRlPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsUSksdGhpcy5o'@;
put 'ZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoUSkpOnRlPVE9PT10aGlzLmhlYWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOnE/dGhpcy5fZ2V0U3RyaW5nKFEpOnRoaXMuX2dldEJ1ZmZlcihRKSx0ZX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhl'@;
put 'YWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKFEpe3ZhciBxPXRoaXMuaGVhZCx0ZT0xLGllPXEuZGF0YTtmb3IoUS09aWUubGVuZ3RoO3E9cS5uZXh0Oyl7dmFyIHNlPXEuZGF0YSxnZT1RPnNlLmxlbmd0aD9zZS5sZW5ndGg6UTtpZihpZSs9Z2U9PT1zZS5sZW5n'@;
put 'dGg/c2U6c2Uuc2xpY2UoMCxRKSwwPT0oUS09Z2UpKXtnZT09PXNlLmxlbmd0aD8oKyt0ZSx0aGlzLmhlYWQ9cS5uZXh0P3EubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1xLHEuZGF0YT1zZS5zbGljZShnZSkpO2JyZWFrfSsrdGV9cmV0dXJuIHRoaXMubGVuZ3RoLT10ZSxpZX19'@;
put 'LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKFEpe3ZhciBxPVAuYWxsb2NVbnNhZmUoUSksdGU9dGhpcy5oZWFkLGllPTE7Zm9yKHRlLmRhdGEuY29weShxKSxRLT10ZS5kYXRhLmxlbmd0aDt0ZT10ZS5uZXh0Oyl7dmFyIHNlPXRlLmRhdGEsZ2U9UT5zZS5sZW5ndGg/c2UubGVu'@;
put 'Z3RoOlE7aWYoc2UuY29weShxLHEubGVuZ3RoLVEsMCxnZSksMD09KFEtPWdlKSl7Z2U9PT1zZS5sZW5ndGg/KCsraWUsdGhpcy5oZWFkPXRlLm5leHQ/dGUubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD10ZSx0ZS5kYXRhPXNlLnNsaWNlKGdlKSk7YnJlYWt9KytpZX1yZXR1cm4g'@;
put 'dGhpcy5sZW5ndGgtPWllLHF9fSx7a2V5OkIsdmFsdWU6ZnVuY3Rpb24oUSxxKXtyZXR1cm4gWSh0aGlzLF8oXyh7fSxxKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxafSgpfSwxMTk1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSk7ZnVuY3Rpb24g'@;
put 'cChSLGope0YoUixqKSxOKFIpfWZ1bmN0aW9uIE4oUil7Ui5fd3JpdGFibGVTdGF0ZSYmIVIuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxSLl9yZWFkYWJsZVN0YXRlJiYhUi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fFIuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBGKFIsail7Ui5lbWl0'@;
put 'KCJlcnJvciIsail9Y2UuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKFIsail7dmFyIFA9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJv'@;
put 'eWVkPyhqP2ooUik6UiYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxELm5leHRUaWNrKEYsdGhpcyxSKSk6RC5uZXh0VGljayhGLHRoaXMsUikpLHRoaXMpOih0aGlzLl9y'@;
put 'ZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShSfHxudWxsLGZ1bmN0aW9uKEIpeyFqJiZCP1AuX3dyaXRhYmxlU3RhdGU/UC5f'@;
put 'd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/RC5uZXh0VGljayhOLFApOihQLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxELm5leHRUaWNrKHAsUCxCKSk6RC5uZXh0VGljayhwLFAsQik6aj8oRC5uZXh0VGljayhOLFApLGooQikpOkQubmV4dFRpY2soTixQKX0pLHRoaXMpfSx1'@;
put 'bmRlc3Ryb3k6ZnVuY3Rpb24gdygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0'@;
put 'ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3Jp'@;
put 'dGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gSChSLGope3ZhciBQPVIuX3JlYWRhYmxlU3RhdGUsTD1SLl93cml0YWJsZVN0'@;
put 'YXRlO1AmJlAuYXV0b0Rlc3Ryb3l8fEwmJkwuYXV0b0Rlc3Ryb3k/Ui5kZXN0cm95KGopOlIuZW1pdCgiZXJyb3IiLGopfX19LDg2MTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MjgxKS5xLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIHAoKXt9Y2UuZXhw'@;
put 'b3J0cz1mdW5jdGlvbiB3KEYsSCxSKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgSClyZXR1cm4gdyhGLG51bGwsSCk7SHx8KEg9e30pLFI9ZnVuY3Rpb24gXyhGKXt2YXIgSD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighSCl7SD0hMDtmb3IodmFyIFI9YXJndW1lbnRzLmxlbmd0aCxqPW5ldyBB'@;
put 'cnJheShSKSxQPTA7UDxSO1ArKylqW1BdPWFyZ3VtZW50c1tQXTtGLmFwcGx5KHRoaXMsail9fX0oUnx8cCk7dmFyIGo9SC5yZWFkYWJsZXx8ITEhPT1ILnJlYWRhYmxlJiZGLnJlYWRhYmxlLFA9SC53cml0YWJsZXx8ITEhPT1ILndyaXRhYmxlJiZGLndyaXRhYmxlLEw9ZnVuY3Rpb24oKXtG'@;
put 'LndyaXRhYmxlfHxCKCl9LFk9Ri5fd3JpdGFibGVTdGF0ZSYmRi5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxCPWZ1bmN0aW9uKCl7UD0hMSxZPSEwLGp8fFIuY2FsbChGKX0sVz1GLl9yZWFkYWJsZVN0YXRlJiZGLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsWj1mdW5jdGlvbigpe2o9ITEs'@;
put 'Vz0hMCxQfHxSLmNhbGwoRil9LFg9ZnVuY3Rpb24oaWUpe1IuY2FsbChGLGllKX0sUT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4gaiYmIVc/KCghRi5fcmVhZGFibGVTdGF0ZXx8IUYuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEQpLFIuY2FsbChGLGllKSk6UCYmIVk/KCghRi5f'@;
put 'd3JpdGFibGVTdGF0ZXx8IUYuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEQpLFIuY2FsbChGLGllKSk6dm9pZCAwfSxxPWZ1bmN0aW9uKCl7Ri5yZXEub24oImZpbmlzaCIsQil9O3JldHVybiBmdW5jdGlvbiBOKEYpe3JldHVybiBGLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIEYuYWJvcnR9KEYpPyhGLm9uKCJjb21wbGV0ZSIsQiksRi5vbigiYWJvcnQiLFEpLEYucmVxP3EoKTpGLm9uKCJyZXF1ZXN0IixxKSk6UCYmIUYuX3dyaXRhYmxlU3RhdGUmJihGLm9uKCJlbmQiLEwpLEYub24oImNsb3NlIixMKSksRi5vbigiZW5kIixaKSxGLm9uKCJmaW5pc2giLEIp'@;
put 'LCExIT09SC5lcnJvciYmRi5vbigiZXJyb3IiLFgpLEYub24oImNsb3NlIixRKSxmdW5jdGlvbigpe0YucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixCKSxGLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsUSksRi5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIscSksRi5yZXEmJkYucmVxLnJlbW92'@;
put 'ZUxpc3RlbmVyKCJmaW5pc2giLEIpLEYucmVtb3ZlTGlzdGVuZXIoImVuZCIsTCksRi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwpLEYucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsQiksRi5yZW1vdmVMaXN0ZW5lcigiZW5kIixaKSxGLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWCksRi5yZW1v'@;
put 'dmVMaXN0ZW5lcigiY2xvc2UiLFEpfX19LDUxNjc6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LDk5NDY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQscD1iKDQy'@;
put 'ODEpLnEsTj1wLkVSUl9NSVNTSU5HX0FSR1Msdz1wLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIEYoQil7aWYoQil0aHJvdyBCfWZ1bmN0aW9uIGooQil7QigpfWZ1bmN0aW9uIFAoQixXKXtyZXR1cm4gQi5waXBlKFcpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gWSgpe2Zvcih2YXIgQj1h'@;
put 'cmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KEIpLFo9MDtaPEI7WisrKVdbWl09YXJndW1lbnRzW1pdO3ZhciBYPWZ1bmN0aW9uIEwoQil7cmV0dXJuIEIubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgQltCLmxlbmd0aC0xXT9CLnBvcCgpOkZ9KFcpO2lmKEFycmF5LmlzQXJyYXkoV1sw'@;
put 'XSkmJihXPVdbMF0pLFcubGVuZ3RoPDIpdGhyb3cgbmV3IE4oInN0cmVhbXMiKTt2YXIgUSxxPVcubWFwKGZ1bmN0aW9uKHRlLGllKXt2YXIgc2U9aWU8Vy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gUihCLFcsWixYKXtYPWZ1bmN0aW9uIF8oQil7dmFyIFc9ITE7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KCl7V3x8KFc9ITAsQi5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShYKTt2YXIgUT0hMTtCLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtRPSEwfSksdm9pZCAwPT09RCYmKEQ9Yig4NjEwKSksRChCLHtyZWFkYWJsZTpXLHdyaXRhYmxlOlp9LGZ1bmN0aW9uKHRlKXtpZih0ZSlyZXR1cm4gWCh0'@;
put 'ZSk7UT0hMCxYKCl9KTt2YXIgcT0hMTtyZXR1cm4gZnVuY3Rpb24odGUpe2lmKCFRJiYhcSl7aWYocT0hMCxmdW5jdGlvbiBIKEIpe3JldHVybiBCLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIEIuYWJvcnR9KEIpKXJldHVybiBCLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IEIuZGVzdHJveSlyZXR1cm4gQi5kZXN0cm95KCk7WCh0ZXx8bmV3IHcoInBpcGUiKSl9fX0odGUsc2UsaWU+MCxmdW5jdGlvbihfZSl7UXx8KFE9X2UpLF9lJiZxLmZvckVhY2goaiksIXNlJiYocS5mb3JFYWNoKGopLFgoUSkpfSl9KTtyZXR1cm4gVy5yZWR1Y2UoUCl9fSwyNDU3OihjZSxK'@;
put 'LGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDI4MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7Y2UuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBwKE4sdyxGLEgpe3ZhciBSPWZ1bmN0aW9uIF8oTix3LEYpe3JldHVybiBudWxsIT1OLmhpZ2hXYXRlck1hcms/Ti5oaWdo'@;
put 'V2F0ZXJNYXJrOnc/TltGXTpudWxsfSh3LEgsRik7aWYobnVsbCE9Uil7aWYoIWlzRmluaXRlKFIpfHxNYXRoLmZsb29yKFIpIT09Unx8UjwwKXRocm93IG5ldyBEKEg/RjoiaGlnaFdhdGVyTWFyayIsUik7cmV0dXJuIE1hdGguZmxvb3IoUil9cmV0dXJuIE4ub2JqZWN0TW9kZT8xNjoxNjM4'@;
put 'NH19fSwyNTAzOihjZSxKLGIpPT57Y2UuZXhwb3J0cz1iKDcxODcpLkV2ZW50RW1pdHRlcn0sNzQxODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKGIsRCl7aWYoRD1ELnNwbGl0KCI6IilbMF0sIShiPStiKSlyZXR1cm4hMTtzd2l0Y2goRCl7Y2FzZSJodHRwIjpjYXNl'@;
put 'IndzIjpyZXR1cm4gODAhPT1iO2Nhc2UiaHR0cHMiOmNhc2Uid3NzIjpyZXR1cm4gNDQzIT09YjtjYXNlImZ0cCI6cmV0dXJuIDIxIT09YjtjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09YjtjYXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09Yn19LDk3ODU6KGNlLEosYik9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIEQ9Yig4NzY0KS5CdWZmZXIsXz1iKDU3MTcpLHA9YigzMzQ5KSxOPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcs'@;
put 'MCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxGPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQs'@;
put 'OSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEg9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3'@;
put 'LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFI9Wzgs'@;
put 'OSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIs'@;
put 'OSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLGo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sUD1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBMKCl7cC5jYWxsKHRoaXMsNjQpLHRo'@;
put 'aXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBZKHEsdGUpe3JldHVybiBxPDx0ZXxxPj4+MzItdGV9ZnVuY3Rpb24gQihxLHRlLGllLHNlLGdlLF9lLFRlLFNl'@;
put 'KXtyZXR1cm4gWShxKyh0ZV5pZV5zZSkrX2UrVGV8MCxTZSkrZ2V8MH1mdW5jdGlvbiBXKHEsdGUsaWUsc2UsZ2UsX2UsVGUsU2Upe3JldHVybiBZKHErKHRlJmllfH50ZSZzZSkrX2UrVGV8MCxTZSkrZ2V8MH1mdW5jdGlvbiBaKHEsdGUsaWUsc2UsZ2UsX2UsVGUsU2Upe3JldHVybiBZKHEr'@;
put 'KCh0ZXx+aWUpXnNlKStfZStUZXwwLFNlKStnZXwwfWZ1bmN0aW9uIFgocSx0ZSxpZSxzZSxnZSxfZSxUZSxTZSl7cmV0dXJuIFkocSsodGUmc2V8aWUmfnNlKStfZStUZXwwLFNlKStnZXwwfWZ1bmN0aW9uIFEocSx0ZSxpZSxzZSxnZSxfZSxUZSxTZSl7cmV0dXJuIFkocSsodGVeKGllfH5z'@;
put 'ZSkpK19lK1RlfDAsU2UpK2dlfDB9XyhMLHApLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHE9Tix0ZT0wO3RlPDE2OysrdGUpcVt0ZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCp0ZSk7Zm9yKHZhciBpZT0wfHRoaXMuX2Esc2U9MHx0aGlzLl9iLGdlPTB8dGhp'@;
put 'cy5fYyxfZT0wfHRoaXMuX2QsVGU9MHx0aGlzLl9lLFNlPTB8dGhpcy5fYSx6ZT0wfHRoaXMuX2Isej0wfHRoaXMuX2MsZz0wfHRoaXMuX2QseT0wfHRoaXMuX2UseD0wO3g8ODA7eCs9MSl7dmFyIEMsVDt4PDE2PyhDPUIoaWUsc2UsZ2UsX2UsVGUscVt3W3hdXSxqWzBdLEhbeF0pLFQ9UShT'@;
put 'ZSx6ZSx6LGcseSxxW0ZbeF1dLFBbMF0sUlt4XSkpOng8MzI/KEM9VyhpZSxzZSxnZSxfZSxUZSxxW3dbeF1dLGpbMV0sSFt4XSksVD1YKFNlLHplLHosZyx5LHFbRlt4XV0sUFsxXSxSW3hdKSk6eDw0OD8oQz1aKGllLHNlLGdlLF9lLFRlLHFbd1t4XV0salsyXSxIW3hdKSxUPVooU2UsemUs'@;
put 'eixnLHkscVtGW3hdXSxQWzJdLFJbeF0pKTp4PDY0PyhDPVgoaWUsc2UsZ2UsX2UsVGUscVt3W3hdXSxqWzNdLEhbeF0pLFQ9VyhTZSx6ZSx6LGcseSxxW0ZbeF1dLFBbM10sUlt4XSkpOihDPVEoaWUsc2UsZ2UsX2UsVGUscVt3W3hdXSxqWzRdLEhbeF0pLFQ9QihTZSx6ZSx6LGcseSxxW0Zb'@;
put 'eF1dLFBbNF0sUlt4XSkpLGllPVRlLFRlPV9lLF9lPVkoZ2UsMTApLGdlPXNlLHNlPUMsU2U9eSx5PWcsZz1ZKHosMTApLHo9emUsemU9VH12YXIgVj10aGlzLl9iK2dlK2d8MDt0aGlzLl9iPXRoaXMuX2MrX2UreXwwLHRoaXMuX2M9dGhpcy5fZCtUZStTZXwwLHRoaXMuX2Q9dGhpcy5fZStp'@;
put 'ZSt6ZXwwLHRoaXMuX2U9dGhpcy5fYStzZSt6fDAsdGhpcy5fYT1WfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zm'@;
put 'c2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xl'@;
put 'bmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIHE9RC5hbGxvYz9ELmFsbG9jKDIwKTpuZXcgRCgyMCk7cmV0dXJuIHEud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCkscS53cml0ZUludDMyTEUodGhpcy5fYiw0KSxxLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLHEud3JpdGVJbnQzMkxFKHRo'@;
put 'aXMuX2QsMTIpLHEud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLHF9LGNlLmV4cG9ydHM9TH0sOTUwOTooY2UsSixiKT0+e3ZhciBEPWIoODc2NCksXz1ELkJ1ZmZlcjtmdW5jdGlvbiBwKHcsRil7Zm9yKHZhciBIIGluIHcpRltIXT13W0hdfWZ1bmN0aW9uIE4odyxGLEgpe3JldHVybiBfKHcs'@;
put 'RixIKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P2NlLmV4cG9ydHM9RDoocChELEopLEouQnVmZmVyPU4pLE4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXy5wcm90b3R5cGUpLHAoXyxOKSxOLmZyb209ZnVuY3Rpb24odyxGLEgpe2lmKCJudW1i'@;
put 'ZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsRixIKX0sTi5hbGxvYz1mdW5jdGlvbih3LEYsSCl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qg'@;
put 'YmUgYSBudW1iZXIiKTt2YXIgUj1fKHcpO3JldHVybiB2b2lkIDAhPT1GPyJzdHJpbmciPT10eXBlb2YgSD9SLmZpbGwoRixIKTpSLmZpbGwoRik6Ui5maWxsKDApLFJ9LE4uYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sTi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gRC5TbG93QnVmZmVyKHcp'@;
put 'fX0sOTI0NjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDczNzkpLF89Yig4NDIwKSxwPUQoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLE49Yig0NDUzKTtjZS5leHBvcnRzPWZ1bmN0aW9uKEYpe2lmKCFfKEYpKXRocm93IG5ldyBOKCJgcmVnZXhgIG11c3QgYmUgYSBSZWdFeHAi'@;
put 'KTtyZXR1cm4gZnVuY3Rpb24oUil7cmV0dXJuIG51bGwhPT1wKEYsUil9fX0sNzc3MTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDIxMCksXz1iKDIyOTYpLHA9YigxMDQ0KSgpLE49Yig3Mjk2KSx3PWIoNDQ1MyksRj1EKCIlTWF0aC5mbG9vciUiKTtjZS5leHBvcnRzPWZ1bmN0'@;
put 'aW9uKFIsail7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFIpdGhyb3cgbmV3IHcoImBmbmAgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigibnVtYmVyIiE9dHlwZW9mIGp8fGo8MHx8aj40Mjk0OTY3Mjk1fHxGKGopIT09ail0aHJvdyBuZXcgdygiYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMy'@;
put 'LWJpdCBpbnRlZ2VyIik7dmFyIFA9YXJndW1lbnRzLmxlbmd0aD4yJiYhIWFyZ3VtZW50c1syXSxMPSEwLFk9ITA7aWYoImxlbmd0aCJpbiBSJiZOKXt2YXIgQj1OKFIsImxlbmd0aCIpO0ImJiFCLmNvbmZpZ3VyYWJsZSYmKEw9ITEpLEImJiFCLndyaXRhYmxlJiYoWT0hMSl9cmV0dXJuKEx8'@;
put 'fFl8fCFQKSYmKHA/XyhSLCJsZW5ndGgiLGosITAsITApOl8oUiwibGVuZ3RoIixqKSksUn19LDQxODk6KGNlLEosYik9Pnt2YXIgRD1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKHAsTil7dGhpcy5fYmxvY2s9RC5hbGxvYyhwKSx0aGlzLl9maW5hbFNpemU9Tix0aGlzLl9ibG9ja1NpemU9'@;
put 'cCx0aGlzLl9sZW49MH1fLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24ocCxOKXsic3RyaW5nIj09dHlwZW9mIHAmJihwPUQuZnJvbShwLE49Tnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRoaXMuX2Jsb2NrLEY9dGhpcy5fYmxvY2tTaXplLEg9cC5sZW5ndGgsUj10aGlzLl9sZW4saj0wO2o8SDsp'@;
put 'e2Zvcih2YXIgUD1SJUYsTD1NYXRoLm1pbihILWosRi1QKSxZPTA7WTxMO1krKyl3W1ArWV09cFtqK1ldO2orPUwsKFIrPUwpJUY9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhpcy5fbGVuKz1ILHRoaXN9LF8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihwKXt2YXIgTj10aGlzLl9s'@;
put 'ZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW05dPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsTisxKSxOPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8PTQyOTQ5NjcyOTUp'@;
put 'dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSh3LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBGPSg0Mjk0OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3LUYpLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUo'@;
put 'Rix0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgUj10aGlzLl9oYXNoKCk7cmV0dXJuIHA/Ui50b1N0cmluZyhwKTpSfSxfLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50'@;
put 'ZWQgYnkgc3ViY2xhc3MiKX0sY2UuZXhwb3J0cz1ffSw5MDcyOihjZSxKLGIpPT57dmFyIEQ9Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtwPXAudG9Mb3dlckNhc2UoKTt2YXIgTj1EW3BdO2lmKCFOKXRocm93IG5ldyBFcnJvcihwKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwg'@;
put 'cmVxdWVzdHMpIik7cmV0dXJuIG5ldyBOfTtELnNoYT1iKDQ0NDgpLEQuc2hhMT1iKDgzMzYpLEQuc2hhMjI0PWIoODQzMiksRC5zaGEyNTY9Yig3NDk5KSxELnNoYTM4ND1iKDE2ODYpLEQuc2hhNTEyPWIoNzgxNil9LDQ0NDg6KGNlLEosYik9Pnt2YXIgRD1iKDU3MTcpLF89Yig0MTg5KSxw'@;
put 'PWIoOTUwOSkuQnVmZmVyLE49WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gRigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gSChQKXtyZXR1cm4gUDw8NXxQPj4+'@;
put 'Mjd9ZnVuY3Rpb24gUihQKXtyZXR1cm4gUDw8MzB8UD4+PjJ9ZnVuY3Rpb24gaihQLEwsWSxCKXtyZXR1cm4gMD09PVA/TCZZfH5MJkI6Mj09PVA/TCZZfEwmQnxZJkI6TF5ZXkJ9RChGLF8pLEYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRo'@;
put 'aXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LEYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7Zm9yKHZhciBMPXRoaXMuX3csWT0wfHRoaXMuX2EsQj0wfHRoaXMuX2IsVz0wfHRoaXMuX2Ms'@;
put 'Wj0wfHRoaXMuX2QsWD0wfHRoaXMuX2UsUT0wO1E8MTY7KytRKUxbUV09UC5yZWFkSW50MzJCRSg0KlEpO2Zvcig7UTw4MDsrK1EpTFtRXT1MW1EtM11eTFtRLThdXkxbUS0xNF1eTFtRLTE2XTtmb3IodmFyIHE9MDtxPDgwOysrcSl7dmFyIHRlPX5+KHEvMjApLGllPUgoWSkraih0ZSxCLFcs'@;
put 'WikrWCtMW3FdK05bdGVdfDA7WD1aLFo9VyxXPVIoQiksQj1ZLFk9aWV9dGhpcy5fYT1ZK3RoaXMuX2F8MCx0aGlzLl9iPUIrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1aK3RoaXMuX2R8MCx0aGlzLl9lPVgrdGhpcy5fZXwwfSxGLnByb3RvdHlwZS5faGFzaD1mdW5j'@;
put 'dGlvbigpe3ZhciBQPXAuYWxsb2NVbnNhZmUoMjApO3JldHVybiBQLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksUC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLFAud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxQLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLFAud3JpdGVJbnQzMkJF'@;
put 'KDB8dGhpcy5fZSwxNiksUH0sY2UuZXhwb3J0cz1GfSw4MzM2OihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoNDE4OSkscD1iKDk1MDkpLkJ1ZmZlcixOPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIEYo'@;
put 'KXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEgoTCl7cmV0dXJuIEw8PDF8TD4+PjMxfWZ1bmN0aW9uIFIoTCl7cmV0dXJuIEw8PDV8TD4+PjI3fWZ1bmN0aW9uIGooTCl7cmV0dXJuIEw8PDMwfEw+Pj4yfWZ1bmN0aW9uIFAoTCxZLEIsVyl7cmV0'@;
put 'dXJuIDA9PT1MP1kmQnx+WSZXOjI9PT1MP1kmQnxZJld8QiZXOlleQl5XfUQoRixfKSxGLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMu'@;
put 'X2U9MzI4NTM3NzUyMCx0aGlzfSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgWT10aGlzLl93LEI9MHx0aGlzLl9hLFc9MHx0aGlzLl9iLFo9MHx0aGlzLl9jLFg9MHx0aGlzLl9kLFE9MHx0aGlzLl9lLHE9MDtxPDE2OysrcSlZW3FdPUwucmVhZEludDMyQkUoNCpx'@;
put 'KTtmb3IoO3E8ODA7KytxKVlbcV09SChZW3EtM11eWVtxLThdXllbcS0xNF1eWVtxLTE2XSk7Zm9yKHZhciB0ZT0wO3RlPDgwOysrdGUpe3ZhciBpZT1+fih0ZS8yMCksc2U9UihCKStQKGllLFcsWixYKStRK1lbdGVdK05baWVdfDA7UT1YLFg9WixaPWooVyksVz1CLEI9c2V9dGhpcy5fYT1C'@;
put 'K3RoaXMuX2F8MCx0aGlzLl9iPVcrdGhpcy5fYnwwLHRoaXMuX2M9Wit0aGlzLl9jfDAsdGhpcy5fZD1YK3RoaXMuX2R8MCx0aGlzLl9lPVErdGhpcy5fZXwwfSxGLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBMPXAuYWxsb2NVbnNhZmUoMjApO3JldHVybiBMLndyaXRlSW50MzJC'@;
put 'RSgwfHRoaXMuX2EsMCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTH0sY2UuZXhwb3J0cz1GfSw4NDMyOihjZSxKLGIpPT57dmFy'@;
put 'IEQ9Yig1NzE3KSxfPWIoNzQ5OSkscD1iKDQxODkpLE49Yig5NTA5KS5CdWZmZXIsdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIEYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcscC5jYWxsKHRoaXMsNjQsNTYpfUQoRixfKSxGLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'X2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LEYucHJvdG90eXBlLl9o'@;
put 'YXNoPWZ1bmN0aW9uKCl7dmFyIEg9Ti5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJuIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksSC53cml0ZUludDMyQkUodGhpcy5fYiw0KSxILndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLEgud3JpdGVJbnQzMkJF'@;
put 'KHRoaXMuX2UsMTYpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLEgud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLEh9LGNlLmV4cG9ydHM9Rn0sNzQ5OTooY2UsSixiKT0+e3ZhciBEPWIoNTcxNyksXz1iKDQxODkpLHA9Yig5NTA5KS5CdWZmZXIsTj1bMTExNjM1MjQwOCwxODk5NDQ3NDQx'@;
put 'LDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQw'@;
put 'MjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcy'@;
put 'MDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0'@;
put 'LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5'@;
put 'MzI1Mjk4XSx3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gRigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gSChCLFcsWil7cmV0dXJuIFpeQiYoV15aKX1mdW5jdGlvbiBSKEIsVyxaKXtyZXR1cm4gQiZXfFomKEJ8Vyl9ZnVuY3Rpb24gaihCKXty'@;
put 'ZXR1cm4oQj4+PjJ8Qjw8MzApXihCPj4+MTN8Qjw8MTkpXihCPj4+MjJ8Qjw8MTApfWZ1bmN0aW9uIFAoQil7cmV0dXJuKEI+Pj42fEI8PDI2KV4oQj4+PjExfEI8PDIxKV4oQj4+PjI1fEI8PDcpfWZ1bmN0aW9uIEwoQil7cmV0dXJuKEI+Pj43fEI8PDI1KV4oQj4+PjE4fEI8PDE0KV5CPj4+'@;
put 'M31mdW5jdGlvbiBZKEIpe3JldHVybihCPj4+MTd8Qjw8MTUpXihCPj4+MTl8Qjw8MTMpXkI+Pj4xMH1EKEYsXyksRi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9k'@;
put 'PTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihCKXtmb3IodmFyIFc9dGhpcy5fdyxaPTB8dGhpcy5fYSxYPTB8dGhpcy5f'@;
put 'YixRPTB8dGhpcy5fYyxxPTB8dGhpcy5fZCx0ZT0wfHRoaXMuX2UsaWU9MHx0aGlzLl9mLHNlPTB8dGhpcy5fZyxnZT0wfHRoaXMuX2gsX2U9MDtfZTwxNjsrK19lKVdbX2VdPUIucmVhZEludDMyQkUoNCpfZSk7Zm9yKDtfZTw2NDsrK19lKVdbX2VdPVkoV1tfZS0yXSkrV1tfZS03XStMKFdb'@;
put 'X2UtMTVdKStXW19lLTE2XXwwO2Zvcih2YXIgVGU9MDtUZTw2NDsrK1RlKXt2YXIgU2U9Z2UrUCh0ZSkrSCh0ZSxpZSxzZSkrTltUZV0rV1tUZV18MCx6ZT1qKFopK1IoWixYLFEpfDA7Z2U9c2Usc2U9aWUsaWU9dGUsdGU9cStTZXwwLHE9USxRPVgsWD1aLFo9U2UremV8MH10aGlzLl9hPVor'@;
put 'dGhpcy5fYXwwLHRoaXMuX2I9WCt0aGlzLl9ifDAsdGhpcy5fYz1RK3RoaXMuX2N8MCx0aGlzLl9kPXErdGhpcy5fZHwwLHRoaXMuX2U9dGUrdGhpcy5fZXwwLHRoaXMuX2Y9aWUrdGhpcy5fZnwwLHRoaXMuX2c9c2UrdGhpcy5fZ3wwLHRoaXMuX2g9Z2UrdGhpcy5faHwwfSxGLnByb3RvdHlw'@;
put 'ZS5faGFzaD1mdW5jdGlvbigpe3ZhciBCPXAuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBCLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEIud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksQi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxCLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxCLndyaXRlSW50'@;
put 'MzJCRSh0aGlzLl9lLDE2KSxCLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxCLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxCLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxCfSxjZS5leHBvcnRzPUZ9LDE2ODY6KGNlLEosYik9Pnt2YXIgRD1iKDU3MTcpLF89Yig3ODE2KSxwPWIoNDE4OSks'@;
put 'Tj1iKDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIEYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcscC5jYWxsKHRoaXMsMTI4LDExMil9RChGLF8pLEYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0'@;
put 'MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMs'@;
put 'dGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxGLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBIPU4uYWxs'@;
put 'b2NVbnNhZmUoNDgpO2Z1bmN0aW9uIFIoaixQLEwpe0gud3JpdGVJbnQzMkJFKGosTCksSC53cml0ZUludDMyQkUoUCxMKzQpfXJldHVybiBSKHRoaXMuX2FoLHRoaXMuX2FsLDApLFIodGhpcy5fYmgsdGhpcy5fYmwsOCksUih0aGlzLl9jaCx0aGlzLl9jbCwxNiksUih0aGlzLl9kaCx0aGlz'@;
put 'Ll9kbCwyNCksUih0aGlzLl9laCx0aGlzLl9lbCwzMiksUih0aGlzLl9maCx0aGlzLl9mbCw0MCksSH0sY2UuZXhwb3J0cz1GfSw3ODE2OihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoNDE4OSkscD1iKDk1MDkpLkJ1ZmZlcixOPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0'@;
put 'MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQs'@;
put 'MzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2'@;
put 'NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4'@;
put 'ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2'@;
put 'NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0'@;
put 'MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQy'@;
put 'MzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwx'@;
put 'NzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5'@;
put 'OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5Mzgw'@;
put 'MzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2'@;
put 'MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBGKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEgoWCxRLHEpe3JldHVybiBxXlgmKFFecSl9ZnVuY3Rpb24gUihYLFEs'@;
put 'cSl7cmV0dXJuIFgmUXxxJihYfFEpfWZ1bmN0aW9uIGooWCxRKXtyZXR1cm4oWD4+PjI4fFE8PDQpXihRPj4+MnxYPDwzMCleKFE+Pj43fFg8PDI1KX1mdW5jdGlvbiBQKFgsUSl7cmV0dXJuKFg+Pj4xNHxRPDwxOCleKFg+Pj4xOHxRPDwxNCleKFE+Pj45fFg8PDIzKX1mdW5jdGlvbiBMKFgs'@;
put 'USl7cmV0dXJuKFg+Pj4xfFE8PDMxKV4oWD4+Pjh8UTw8MjQpXlg+Pj43fWZ1bmN0aW9uIFkoWCxRKXtyZXR1cm4oWD4+PjF8UTw8MzEpXihYPj4+OHxRPDwyNCleKFg+Pj43fFE8PDI1KX1mdW5jdGlvbiBCKFgsUSl7cmV0dXJuKFg+Pj4xOXxRPDwxMyleKFE+Pj4yOXxYPDwzKV5YPj4+Nn1m'@;
put 'dW5jdGlvbiBXKFgsUSl7cmV0dXJuKFg+Pj4xOXxRPDwxMyleKFE+Pj4yOXxYPDwzKV4oWD4+PjZ8UTw8MjYpfWZ1bmN0aW9uIFooWCxRKXtyZXR1cm4gWD4+PjA8UT4+PjA/MTowfUQoRixfKSxGLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMs'@;
put 'dGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5f'@;
put 'Ymw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv'@;
put 'bihYKXtmb3IodmFyIFE9dGhpcy5fdyxxPTB8dGhpcy5fYWgsdGU9MHx0aGlzLl9iaCxpZT0wfHRoaXMuX2NoLHNlPTB8dGhpcy5fZGgsZ2U9MHx0aGlzLl9laCxfZT0wfHRoaXMuX2ZoLFRlPTB8dGhpcy5fZ2gsU2U9MHx0aGlzLl9oaCx6ZT0wfHRoaXMuX2FsLHo9MHx0aGlzLl9ibCxnPTB8'@;
put 'dGhpcy5fY2wseT0wfHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRoaXMuX2dsLFY9MHx0aGlzLl9obCxVPTA7VTwzMjtVKz0yKVFbVV09WC5yZWFkSW50MzJCRSg0KlUpLFFbVSsxXT1YLnJlYWRJbnQzMkJFKDQqVSs0KTtmb3IoO1U8MTYwO1UrPTIpe3ZhciBFPVFb'@;
put 'VS0zMF0sbT1RW1UtMzArMV0sQT1MKEUsbSksYWU9WShtLEUpLG5lPUIoRT1RW1UtNF0sbT1RW1UtNCsxXSksbGU9VyhtLEUpLFFlPVFbVS0zMl0sYXQ9UVtVLTMyKzFdLHhlPWFlK1FbVS0xNCsxXXwwLHZlPUErUVtVLTE0XStaKHhlLGFlKXwwO3ZlPSh2ZT12ZStuZStaKHhlPXhlK2xlfDAs'@;
put 'bGUpfDApK1FlK1ooeGU9eGUrYXR8MCxhdCl8MCxRW1VdPXZlLFFbVSsxXT14ZX1mb3IodmFyIHFlPTA7cWU8MTYwO3FlKz0yKXt2ZT1RW3FlXSx4ZT1RW3FlKzFdO3ZhciBqZT1SKHEsdGUsaWUpLEFlPVIoemUseixnKSxGZT1qKHEsemUpLFJlPWooemUscSksSWU9UChnZSx4KSxIZT1QKHgs'@;
put 'Z2UpLERlPU5bcWVdLGtlPU5bcWUrMV0sX3Q9SChnZSxfZSxUZSksbnQ9SCh4LEMsVCksSmU9VitIZXwwLG9uPVNlK0llK1ooSmUsVil8MDtvbj0ob249KG9uPW9uK190K1ooSmU9SmUrbnR8MCxudCl8MCkrRGUrWihKZT1KZStrZXwwLGtlKXwwKSt2ZStaKEplPUplK3hlfDAseGUpfDA7dmFy'@;
put 'IHl0PVJlK0FlfDAsTXQ9RmUramUrWih5dCxSZSl8MDtTZT1UZSxWPVQsVGU9X2UsVD1DLF9lPWdlLEM9eCxnZT1zZStvbitaKHg9eStKZXwwLHkpfDAsc2U9aWUseT1nLGllPXRlLGc9eix0ZT1xLHo9emUscT1vbitNdCtaKHplPUplK3l0fDAsSmUpfDB9dGhpcy5fYWw9dGhpcy5fYWwremV8'@;
put 'MCx0aGlzLl9ibD10aGlzLl9ibCt6fDAsdGhpcy5fY2w9dGhpcy5fY2wrZ3wwLHRoaXMuX2RsPXRoaXMuX2RsK3l8MCx0aGlzLl9lbD10aGlzLl9lbCt4fDAsdGhpcy5fZmw9dGhpcy5fZmwrQ3wwLHRoaXMuX2dsPXRoaXMuX2dsK1R8MCx0aGlzLl9obD10aGlzLl9obCtWfDAsdGhpcy5fYWg9'@;
put 'dGhpcy5fYWgrcStaKHRoaXMuX2FsLHplKXwwLHRoaXMuX2JoPXRoaXMuX2JoK3RlK1oodGhpcy5fYmwseil8MCx0aGlzLl9jaD10aGlzLl9jaCtpZStaKHRoaXMuX2NsLGcpfDAsdGhpcy5fZGg9dGhpcy5fZGgrc2UrWih0aGlzLl9kbCx5KXwwLHRoaXMuX2VoPXRoaXMuX2VoK2dlK1oodGhp'@;
put 'cy5fZWwseCl8MCx0aGlzLl9maD10aGlzLl9maCtfZStaKHRoaXMuX2ZsLEMpfDAsdGhpcy5fZ2g9dGhpcy5fZ2grVGUrWih0aGlzLl9nbCxUKXwwLHRoaXMuX2hoPXRoaXMuX2hoK1NlK1oodGhpcy5faGwsVil8MH0sRi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgWD1wLmFsbG9j'@;
put 'VW5zYWZlKDY0KTtmdW5jdGlvbiBRKHEsdGUsaWUpe1gud3JpdGVJbnQzMkJFKHEsaWUpLFgud3JpdGVJbnQzMkJFKHRlLGllKzQpfXJldHVybiBRKHRoaXMuX2FoLHRoaXMuX2FsLDApLFEodGhpcy5fYmgsdGhpcy5fYmwsOCksUSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksUSh0aGlzLl9kaCx0'@;
put 'aGlzLl9kbCwyNCksUSh0aGlzLl9laCx0aGlzLl9lbCwzMiksUSh0aGlzLl9maCx0aGlzLl9mbCw0MCksUSh0aGlzLl9naCx0aGlzLl9nbCw0OCksUSh0aGlzLl9oaCx0aGlzLl9obCw1NiksWH0sY2UuZXhwb3J0cz1GfSwyODMwOihjZSxKLGIpPT57Y2UuZXhwb3J0cz1wO3ZhciBEPWIoNzE4'@;
put 'NykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIHAoKXtELmNhbGwodGhpcyl9Yig1NzE3KShwLEQpLHAuUmVhZGFibGU9Yig5NDgxKSxwLldyaXRhYmxlPWIoNDIyOSkscC5EdXBsZXg9Yig2NzUzKSxwLlRyYW5zZm9ybT1iKDQ2MDUpLHAuUGFzc1Rocm91Z2g9YigyNzI1KSxwLmZpbmlzaGVkPWIo'@;
put 'ODYxMCkscC5waXBlbGluZT1iKDk5NDYpLHAuU3RyZWFtPXAscC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihOLHcpe3ZhciBGPXRoaXM7ZnVuY3Rpb24gSChXKXtOLndyaXRhYmxlJiYhMT09PU4ud3JpdGUoVykmJkYucGF1c2UmJkYucGF1c2UoKX1mdW5jdGlvbiBSKCl7Ri5yZWFkYWJsZSYm'@;
put 'Ri5yZXN1bWUmJkYucmVzdW1lKCl9Ri5vbigiZGF0YSIsSCksTi5vbigiZHJhaW4iLFIpLCFOLl9pc1N0ZGlvJiYoIXd8fCExIT09dy5lbmQpJiYoRi5vbigiZW5kIixQKSxGLm9uKCJjbG9zZSIsTCkpO3ZhciBqPSExO2Z1bmN0aW9uIFAoKXtqfHwoaj0hMCxOLmVuZCgpKX1mdW5jdGlvbiBM'@;
put 'KCl7anx8KGo9ITAsImZ1bmN0aW9uIj09dHlwZW9mIE4uZGVzdHJveSYmTi5kZXN0cm95KCkpfWZ1bmN0aW9uIFkoVyl7aWYoQigpLDA9PT1ELmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBXfWZ1bmN0aW9uIEIoKXtGLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixIKSxOLnJlbW92'@;
put 'ZUxpc3RlbmVyKCJkcmFpbiIsUiksRi5yZW1vdmVMaXN0ZW5lcigiZW5kIixQKSxGLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksRi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFkpLE4ucmVtb3ZlTGlzdGVuZXIoImVycm9yIixZKSxGLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEIpLEYucmVtb3Zl'@;
put 'TGlzdGVuZXIoImNsb3NlIixCKSxOLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsQil9cmV0dXJuIEYub24oImVycm9yIixZKSxOLm9uKCJlcnJvciIsWSksRi5vbigiZW5kIixCKSxGLm9uKCJjbG9zZSIsQiksTi5vbigiY2xvc2UiLEIpLE4uZW1pdCgicGlwZSIsRiksTn19LDI1NTM6KGNlLEos'@;
put 'Yik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5NTA5KS5CdWZmZXIsXz1ELmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHEpe3N3aXRjaCgocT0iIitxKSYmcS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJi'@;
put 'YXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcocSl7dmFyIHRlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIE4ocSl7dmFyIHRlPWZ1bmN0'@;
put 'aW9uIHAocSl7aWYoIXEpcmV0dXJuInV0ZjgiO2Zvcih2YXIgdGU7Oylzd2l0Y2gocSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGlu'@;
put 'MSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIHE7ZGVmYXVsdDppZih0ZSlyZXR1cm47cT0oIiIrcSkudG9Mb3dlckNhc2UoKSx0ZT0hMH19KHEpO2lmKCJzdHJpbmciIT10eXBlb2YgdGUmJihELmlzRW5jb2Rp'@;
put 'bmc9PT1ffHwhXyhxKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3EpO3JldHVybiB0ZXx8cX0ocSksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9WSx0aGlzLmVuZD1CLHRlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PWosdGU9'@;
put 'NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9Wix0ZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9WCx2b2lkKHRoaXMuZW5kPVEpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9RC5hbGxvY1Vuc2FmZSh0ZSl9'@;
put 'ZnVuY3Rpb24gRihxKXtyZXR1cm4gcTw9MTI3PzA6cT4+NT09Nj8yOnE+PjQ9PTE0PzM6cT4+Mz09MzA/NDpxPj42PT0yPy0xOi0yfWZ1bmN0aW9uIGoocSl7dmFyIHRlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gUihxLHRlLGllKXtpZigxMjghPSgxOTImdGVb'@;
put 'MF0pKXJldHVybiBxLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYocS5sYXN0TmVlZD4xJiZ0ZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnRlWzFdKSlyZXR1cm4gcS5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKHEubGFzdE5lZWQ+MiYmdGUubGVuZ3RoPjImJjEyOCE9KDE5MiZ0ZVsyXSkpcmV0dXJu'@;
put 'IHEubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMscSk7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PXEubGVuZ3RoPyhxLmNvcHkodGhpcy5sYXN0Q2hhcix0ZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMu'@;
put 'bGFzdFRvdGFsKSk6KHEuY29weSh0aGlzLmxhc3RDaGFyLHRlLDAscS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09cS5sZW5ndGgpKX1mdW5jdGlvbiBZKHEsdGUpe2lmKChxLmxlbmd0aC10ZSklMj09MCl7dmFyIGllPXEudG9TdHJpbmcoInV0ZjE2bGUiLHRlKTtpZihpZSl7dmFyIHNl'@;
put 'PWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKHNlPj01NTI5NiYmc2U8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdLGllLnNsaWNlKDAs'@;
put 'LTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdLHEudG9TdHJpbmcoInV0ZjE2bGUiLHRlLHEubGVuZ3RoLTEpfWZ1bmN0aW9uIEIocSl7dmFyIHRlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUo'@;
put 'cSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dGUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTp0ZX1mdW5jdGlvbiBXKHEsdGUpe3ZhciBpZT0ocS5sZW5ndGgtdGUpJTM7cmV0dXJuIDA9PT1pZT9xLnRvU3RyaW5nKCJi'@;
put 'YXNlNjQiLHRlKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09cVtxLmxlbmd0aC0xXSkscS50b1N0cmluZygiYmFz'@;
put 'ZTY0Iix0ZSxxLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFoocSl7dmFyIHRlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dGUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6dGV9ZnVuY3Rpb24gWChxKXty'@;
put 'ZXR1cm4gcS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBRKHEpe3JldHVybiBxJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIifUoucz13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4iIjt2YXIgdGUsaWU7aWYodGhpcy5sYXN0'@;
put 'TmVlZCl7aWYodm9pZCAwPT09KHRlPXRoaXMuZmlsbExhc3QocSkpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8cS5sZW5ndGg/dGU/dGUrdGhpcy50ZXh0KHEsaWUpOnRoaXMudGV4dChxLGllKTp0ZXx8IiJ9LHcucHJvdG90'@;
put 'eXBlLmVuZD1mdW5jdGlvbiBMKHEpe3ZhciB0ZT1xJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3RlKyJcdWZmZmQiOnRlfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIFAocSx0ZSl7dmFyIGllPWZ1bmN0aW9uIEgocSx0ZSxpZSl7dmFyIHNlPXRl'@;
put 'Lmxlbmd0aC0xO2lmKHNlPGllKXJldHVybiAwO3ZhciBnZT1GKHRlW3NlXSk7cmV0dXJuIGdlPj0wPyhnZT4wJiYocS5sYXN0TmVlZD1nZS0xKSxnZSk6LS1zZTxpZXx8LTI9PT1nZT8wOihnZT1GKHRlW3NlXSkpPj0wPyhnZT4wJiYocS5sYXN0TmVlZD1nZS0yKSxnZSk6LS1zZTxpZXx8LTI9'@;
put 'PT1nZT8wOihnZT1GKHRlW3NlXSkpPj0wPyhnZT4wJiYoMj09PWdlP2dlPTA6cS5sYXN0TmVlZD1nZS0zKSxnZSk6MH0odGhpcyxxLHRlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gcS50b1N0cmluZygidXRmOCIsdGUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBzZT1xLmxlbmd0aC0oaWUt'@;
put 'dGhpcy5sYXN0TmVlZCk7cmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLDAsc2UpLHEudG9TdHJpbmcoInV0ZjgiLHRlLHNlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24ocSl7aWYodGhpcy5sYXN0TmVlZDw9cS5sZW5ndGgpcmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLHRo'@;
put 'aXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7cS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHEubGVuZ3RoKSx0aGlz'@;
put 'Lmxhc3ROZWVkLT1xLmxlbmd0aH19LDc4NTc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDM2ODkpLF89Yig0NTY0KSxwPWIoNzUyKSxOPWIoMjIyNCkueSx3PWIoNTc2MSkubSxGPWIoODk3MSkuVSxIPWIoNzY1MiksUj1iKDQ1Nikse2Zyb21DYWxsYmFjazpqfT1iKDcwNDEp'@;
put 'LHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOlB9PWIoMTI2OSksTD0vXltceDIxXHgyMy1ceDJCXHgyRC1ceDNBXHgzQy1ceDVCXHg1RC1ceDdFXSskLyxZPS9bXHgwMC1ceDFGXS8sQj1bIlxuIiwiXHIiLCJcMCJdLFc9L1tceDIwLVx4M0FceDNDLVx4N0VdKy8sWj0vW1x4MDlceDIwLVx4MkZc'@;
put 'eDNCLVx4NDBceDVCLVx4NjBceDdCLVx4N0VdLyxYPXtqYW46MCxmZWI6MSxtYXI6MixhcHI6MyxtYXk6NCxqdW46NSxqdWw6NixhdWc6NyxzZXA6OCxvY3Q6OSxub3Y6MTAsZGVjOjExfSxRPTIxNDc0ODM2NDdlMyx0ZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRD'@;
put 'b29raWVzKCk7IGV4cGVjdGVkIG9uZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJub25lIic7ZnVuY3Rpb24gaWUoamUpe0gudmFsaWRhdGUoSC5pc05vbkVtcHR5U3RyaW5nKGplKSxqZSk7Y29uc3QgQWU9U3RyaW5nKGplKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PUFlfHwibGF4'@;
put 'Ij09PUFlfHwic3RyaWN0Ij09PUFlP0FlOm51bGx9Y29uc3Qgc2U9T2JqZWN0LmZyZWV6ZSh7U0lMRU5UOiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNBQkxFRDoidW5zYWZlLWRpc2FibGVkIn0pLGdlPS8oPzpeKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/Olwu'@;
put 'KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M30kKXwoPzpeKD86KD86W2EtZlxkXXsxLDR9Oil7N30oPzpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVd'@;
put 'fDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXw6W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1m'@;
put 'XGRdezEsNH0pezEsMn18Oil8KD86W2EtZlxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0p'@;
put 'ezEsM318Oil8KD86W2EtZlxkXXsxLDR9Oil7M30oPzooPzo6W2EtZlxkXXsxLDR9KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNH18Oil8'@;
put 'KD86W2EtZlxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNX18Oil8KD86W2EtZlxk'@;
put 'XXsxLDR9Oil7MX0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNn18Oil8KD86Oig/Oig/OjpbYS1mXGRd'@;
put 'ezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw3fXw6KSkpJCkvLF9lPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3'@;
put 'fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9'@;
put 'fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpb'@;
put 'YS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9'@;
put 'KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6'@;
put 'W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1c'@;
put 'XGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxc'@;
put 'ZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDZ9fDopfFxuKD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFc'@;
put 'XGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318OikpXG4pKD86JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksVGU9bmV3IFJlZ0V4cChgXiR7X2V9JGApO2Z1'@;
put 'bmN0aW9uIFNlKGplLEFlLEZlLFJlKXtsZXQgSWU9MDtmb3IoO0llPGplLmxlbmd0aDspe2NvbnN0IEhlPWplLmNoYXJDb2RlQXQoSWUpO2lmKEhlPD00N3x8SGU+PTU4KWJyZWFrO0llKyt9cmV0dXJuIEllPEFlfHxJZT5GZXx8IVJlJiZJZSE9amUubGVuZ3RoP251bGw6cGFyc2VJbnQoamUu'@;
put 'c3Vic3RyKDAsSWUpLDEwKX1mdW5jdGlvbiB6ZShqZSl7Y29uc3QgQWU9amUuc3BsaXQoIjoiKSxGZT1bMCwwLDBdO2lmKDMhPT1BZS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBSZT0wO1JlPDM7UmUrKyl7Y29uc3QgSGU9U2UoQWVbUmVdLDEsMiwyPT1SZSk7aWYobnVsbD09PUhlKXJl'@;
put 'dHVybiBudWxsO0ZlW1JlXT1IZX1yZXR1cm4gRmV9ZnVuY3Rpb24geihqZSl7amU9U3RyaW5nKGplKS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpO2NvbnN0IEFlPVhbamVdO3JldHVybiBBZT49MD9BZTpudWxsfWZ1bmN0aW9uIGcoamUpe2lmKCFqZSlyZXR1cm47Y29uc3QgQWU9amUuc3Bs'@;
put 'aXQoWik7aWYoIUFlKXJldHVybjtsZXQgRmU9bnVsbCxSZT1udWxsLEllPW51bGwsSGU9bnVsbCxEZT1udWxsLGtlPW51bGw7Zm9yKGxldCBfdD0wO190PEFlLmxlbmd0aDtfdCsrKXtjb25zdCBudD1BZVtfdF0udHJpbSgpO2lmKCFudC5sZW5ndGgpY29udGludWU7bGV0IEplO251bGw9PT1J'@;
put 'ZSYmKEplPXplKG50KSxKZSk/KEZlPUplWzBdLFJlPUplWzFdLEllPUplWzJdKTpudWxsIT09SGV8fChKZT1TZShudCwxLDIsITApLG51bGw9PT1KZSk/bnVsbCE9PURlfHwoSmU9eihudCksbnVsbD09PUplKT9udWxsPT09a2UmJihKZT1TZShudCwyLDQsITApLG51bGwhPT1KZSYmKGtlPUpl'@;
put 'LGtlPj03MCYma2U8PTk5P2tlKz0xOTAwOmtlPj0wJiZrZTw9NjkmJihrZSs9MmUzKSkpOkRlPUplOkhlPUplfXJldHVybiBudWxsPT09SGV8fG51bGw9PT1EZXx8bnVsbD09PWtlfHxudWxsPT09SWV8fEhlPDF8fEhlPjMxfHxrZTwxNjAxfHxGZT4yM3x8UmU+NTl8fEllPjU5P3ZvaWQgMDpu'@;
put 'ZXcgRGF0ZShEYXRlLlVUQyhrZSxEZSxIZSxGZSxSZSxJZSkpfWZ1bmN0aW9uIHkoamUpe3JldHVybiBILnZhbGlkYXRlKEguaXNEYXRlKGplKSxqZSksamUudG9VVENTdHJpbmcoKX1mdW5jdGlvbiB4KGplKXtyZXR1cm4gbnVsbD09amU/bnVsbDooamU9amUudHJpbSgpLnJlcGxhY2UoL15c'@;
put 'Li8sIiIpLFRlLnRlc3QoamUpJiYoamU9amUucmVwbGFjZSgiWyIsIiIpLnJlcGxhY2UoIl0iLCIiKSksRCYmL1teXHUwMDAxLVx1MDA3Zl0vLnRlc3QoamUpJiYoamU9RC50b0FTQ0lJKGplKSksamUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gQyhqZSxBZSxGZSl7aWYobnVsbD09amV8fG51'@;
put 'bGw9PUFlKXJldHVybiBudWxsO2lmKCExIT09RmUmJihqZT14KGplKSxBZT14KEFlKSksamU9PUFlKXJldHVybiEwO2NvbnN0IFJlPWplLmxhc3RJbmRleE9mKEFlKTtyZXR1cm4hKFJlPD0wfHxqZS5sZW5ndGghPT1BZS5sZW5ndGgrUmV8fCIuIiE9PWplLnN1YnN0cihSZS0xLDEpfHxnZS50'@;
put 'ZXN0KGplKSl9ZnVuY3Rpb24gVChqZSl7aWYoIWplfHwiLyIhPT1qZS5zdWJzdHIoMCwxKSlyZXR1cm4iLyI7aWYoIi8iPT09amUpcmV0dXJuIGplO2NvbnN0IEFlPWplLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA9PT1BZT8iLyI6amUuc2xpY2UoMCxBZSl9ZnVuY3Rpb24gRShqZSxBZSl7'@;
put 'aWYoKCFBZXx8Im9iamVjdCIhPXR5cGVvZiBBZSkmJihBZT17fSksSC5pc0VtcHR5U3RyaW5nKGplKXx8IUguaXNTdHJpbmcoamUpKXJldHVybiBudWxsO2NvbnN0IEZlPShqZT1qZS50cmltKCkpLmluZGV4T2YoIjsiKSxJZT1mdW5jdGlvbiBVKGplLEFlKXtqZT1mdW5jdGlvbiBWKGplKXtp'@;
put 'ZihILmlzRW1wdHlTdHJpbmcoamUpKXJldHVybiBqZTtmb3IobGV0IEFlPTA7QWU8Qi5sZW5ndGg7QWUrKyl7Y29uc3QgRmU9amUuaW5kZXhPZihCW0FlXSk7LTEhPT1GZSYmKGplPWplLnN1YnN0cigwLEZlKSl9cmV0dXJuIGplfShqZSksSC52YWxpZGF0ZShILmlzU3RyaW5nKGplKSxqZSk7'@;
put 'bGV0IFJlLEllLEZlPWplLmluZGV4T2YoIj0iKTtpZihBZSkwPT09RmUmJihGZT0oamU9amUuc3Vic3RyKDEpKS5pbmRleE9mKCI9IikpO2Vsc2UgaWYoRmU8PTApcmV0dXJuO2lmKEZlPD0wPyhSZT0iIixJZT1qZS50cmltKCkpOihSZT1qZS5zdWJzdHIoMCxGZSkudHJpbSgpLEllPWplLnN1'@;
put 'YnN0cihGZSsxKS50cmltKCkpLFkudGVzdChSZSl8fFkudGVzdChJZSkpcmV0dXJuO2NvbnN0IEhlPW5ldyBhdDtyZXR1cm4gSGUua2V5PVJlLEhlLnZhbHVlPUllLEhlfSgtMT09PUZlP2plOmplLnN1YnN0cigwLEZlKSwhIUFlLmxvb3NlKTtpZighSWUpcmV0dXJuO2lmKC0xPT09RmUpcmV0'@;
put 'dXJuIEllO2NvbnN0IEhlPWplLnNsaWNlKEZlKzEpLnRyaW0oKTtpZigwPT09SGUubGVuZ3RoKXJldHVybiBJZTtjb25zdCBEZT1IZS5zcGxpdCgiOyIpO2Zvcig7RGUubGVuZ3RoOyl7Y29uc3Qga2U9RGUuc2hpZnQoKS50cmltKCk7aWYoMD09PWtlLmxlbmd0aCljb250aW51ZTtjb25zdCBf'@;
put 'dD1rZS5pbmRleE9mKCI9Iik7bGV0IG50LEplO3N3aXRjaCgtMT09PV90PyhudD1rZSxKZT1udWxsKToobnQ9a2Uuc3Vic3RyKDAsX3QpLEplPWtlLnN1YnN0cihfdCsxKSksbnQ9bnQudHJpbSgpLnRvTG93ZXJDYXNlKCksSmUmJihKZT1KZS50cmltKCkpLG50KXtjYXNlImV4cGlyZXMiOmlm'@;
put 'KEplKXtjb25zdCB5dD1nKEplKTt5dCYmKEllLmV4cGlyZXM9eXQpfWJyZWFrO2Nhc2UibWF4LWFnZSI6aWYoSmUmJi9eLT9bMC05XSskLy50ZXN0KEplKSl7Y29uc3QgeXQ9cGFyc2VJbnQoSmUsMTApO0llLnNldE1heEFnZSh5dCl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKEplKXtjb25zdCB5'@;
put 'dD1KZS50cmltKCkucmVwbGFjZSgvXlwuLywiIik7eXQmJihJZS5kb21haW49eXQudG9Mb3dlckNhc2UoKSl9YnJlYWs7Y2FzZSJwYXRoIjpJZS5wYXRoPUplJiYiLyI9PT1KZVswXT9KZTpudWxsO2JyZWFrO2Nhc2Uic2VjdXJlIjpJZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6'@;
put 'SWUuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKEplP0plLnRvTG93ZXJDYXNlKCk6IiIpe2Nhc2Uic3RyaWN0IjpJZS5zYW1lU2l0ZT0ic3RyaWN0IjticmVhaztjYXNlImxheCI6SWUuc2FtZVNpdGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpJZS5zYW1lU2l0ZT0i'@;
put 'bm9uZSI7YnJlYWs7ZGVmYXVsdDpJZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVmYXVsdDpJZS5leHRlbnNpb25zPUllLmV4dGVuc2lvbnN8fFtdLEllLmV4dGVuc2lvbnMucHVzaChrZSl9fXJldHVybiBJZX1mdW5jdGlvbiBhZShqZSl7bGV0IEFlO3RyeXtBZT1KU09OLnBhcnNlKGplKX1j'@;
put 'YXRjaChGZSl7cmV0dXJuIEZlfXJldHVybiBBZX1mdW5jdGlvbiBuZShqZSl7aWYoIWplfHxILmlzRW1wdHlTdHJpbmcoamUpKXJldHVybiBudWxsO2xldCBBZTtpZigic3RyaW5nIj09dHlwZW9mIGplKXtpZihBZT1hZShqZSksQWUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNl'@;
put 'IEFlPWplO2NvbnN0IEZlPW5ldyBhdDtmb3IobGV0IFJlPTA7UmU8YXQuc2VyaWFsaXphYmxlUHJvcGVydGllcy5sZW5ndGg7UmUrKyl7Y29uc3QgSWU9YXQuc2VyaWFsaXphYmxlUHJvcGVydGllc1tSZV07dm9pZCAwPT09QWVbSWVdfHxBZVtJZV09PT1RZVtJZV18fChGZVtJZV09ImV4cGly'@;
put 'ZXMiPT09SWV8fCJjcmVhdGlvbiI9PT1JZXx8Imxhc3RBY2Nlc3NlZCI9PT1JZT9udWxsPT09QWVbSWVdP251bGw6IkluZmluaXR5Ij09QWVbSWVdPyJJbmZpbml0eSI6bmV3IERhdGUoQWVbSWVdKTpBZVtJZV0pfXJldHVybiBGZX1mdW5jdGlvbiBsZShqZSxBZSl7SC52YWxpZGF0ZShILmlz'@;
put 'T2JqZWN0KGplKSxqZSksSC52YWxpZGF0ZShILmlzT2JqZWN0KEFlKSxBZSk7bGV0IEZlPTA7cmV0dXJuIEZlPShBZS5wYXRoP0FlLnBhdGgubGVuZ3RoOjApLShqZS5wYXRoP2plLnBhdGgubGVuZ3RoOjApLDAhPT1GZXx8KEZlPShqZS5jcmVhdGlvbj9qZS5jcmVhdGlvbi5nZXRUaW1lKCk6'@;
put 'USktKEFlLmNyZWF0aW9uP0FlLmNyZWF0aW9uLmdldFRpbWUoKTpRKSwwIT09RmV8fChGZT1qZS5jcmVhdGlvbkluZGV4LUFlLmNyZWF0aW9uSW5kZXgpKSxGZX1mdW5jdGlvbiBaZShqZSl7aWYoamUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGplO3RyeXtqZT1kZWNvZGVVUkkoamUpfWNh'@;
put 'dGNoe31yZXR1cm4gXyhqZSl9Y29uc3QgUWU9e2tleToiIix2YWx1ZToiIixleHBpcmVzOiJJbmZpbml0eSIsbWF4QWdlOm51bGwsZG9tYWluOm51bGwscGF0aDpudWxsLHNlY3VyZTohMSxodHRwT25seTohMSxleHRlbnNpb25zOm51bGwsaG9zdE9ubHk6bnVsbCxwYXRoSXNEZWZhdWx0Om51'@;
put 'bGwsY3JlYXRpb246bnVsbCxsYXN0QWNjZXNzZWQ6bnVsbCxzYW1lU2l0ZTp2b2lkIDB9O2NsYXNzIGF0e2NvbnN0cnVjdG9yKEFlPXt9KXtjb25zdCBGZT1QKCk7RmUmJih0aGlzW0ZlXT10aGlzLmluc3BlY3QpLE9iamVjdC5hc3NpZ24odGhpcyxRZSxBZSksdGhpcy5jcmVhdGlvbj10aGlz'@;
put 'LmNyZWF0aW9ufHxuZXcgRGF0ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY3JlYXRpb25JbmRleCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOisrYXQuY29va2llc0NyZWF0ZWR9KX1pbnNwZWN0KCl7Y29uc3QgQWU9RGF0ZS5ub3coKSxG'@;
put 'ZT1udWxsIT10aGlzLmhvc3RPbmx5P3RoaXMuaG9zdE9ubHk6Ij8iLFJlPXRoaXMuY3JlYXRpb24/QWUtdGhpcy5jcmVhdGlvbi5nZXRUaW1lKCkrIm1zIjoiPyIsSWU9dGhpcy5sYXN0QWNjZXNzZWQ/QWUtdGhpcy5sYXN0QWNjZXNzZWQuZ2V0VGltZSgpKyJtcyI6Ij8iO3JldHVybmBDb29r'@;
put 'aWU9IiR7dGhpcy50b1N0cmluZygpfTsgaG9zdE9ubHk9JHtGZX07IGFBZ2U9JHtJZX07IGNBZ2U9JHtSZX0iYH10b0pTT04oKXtjb25zdCBBZT17fTtmb3IoY29uc3QgRmUgb2YgYXQuc2VyaWFsaXphYmxlUHJvcGVydGllcyl0aGlzW0ZlXSE9PVFlW0ZlXSYmKCJleHBpcmVzIj09PUZlfHwi'@;
put 'Y3JlYXRpb24iPT09RmV8fCJsYXN0QWNjZXNzZWQiPT09RmU/QWVbRmVdPW51bGw9PT10aGlzW0ZlXT9udWxsOiJJbmZpbml0eSI9PXRoaXNbRmVdPyJJbmZpbml0eSI6dGhpc1tGZV0udG9JU09TdHJpbmcoKToibWF4QWdlIj09PUZlP251bGwhPT10aGlzW0ZlXSYmKEFlW0ZlXT10aGlzW0Zl'@;
put 'XT09MS8wfHx0aGlzW0ZlXT09LTEvMD90aGlzW0ZlXS50b1N0cmluZygpOnRoaXNbRmVdKTp0aGlzW0ZlXSE9PVFlW0ZlXSYmKEFlW0ZlXT10aGlzW0ZlXSkpO3JldHVybiBBZX1jbG9uZSgpe3JldHVybiBuZSh0aGlzLnRvSlNPTigpKX12YWxpZGF0ZSgpe2lmKCFMLnRlc3QodGhpcy52YWx1'@;
put 'ZSl8fHRoaXMuZXhwaXJlcyE9MS8wJiYhKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGUpJiYhZyh0aGlzLmV4cGlyZXMpfHxudWxsIT10aGlzLm1heEFnZSYmdGhpcy5tYXhBZ2U8PTB8fG51bGwhPXRoaXMucGF0aCYmIVcudGVzdCh0aGlzLnBhdGgpKXJldHVybiExO2NvbnN0IEFlPXRo'@;
put 'aXMuY2RvbWFpbigpO3JldHVybiEoQWUmJihBZS5tYXRjaCgvXC4kLyl8fG51bGw9PXAuZ2V0UHVibGljU3VmZml4KEFlKSkpfXNldEV4cGlyZXMoQWUpe3RoaXMuZXhwaXJlcz1BZSBpbnN0YW5jZW9mIERhdGU/QWU6ZyhBZSl8fCJJbmZpbml0eSJ9c2V0TWF4QWdlKEFlKXt0aGlzLm1heEFn'@;
put 'ZT1BZT09PTEvMHx8QWU9PT0tMS8wP0FlLnRvU3RyaW5nKCk6QWV9Y29va2llU3RyaW5nKCl7bGV0IEFlPXRoaXMudmFsdWU7cmV0dXJuIG51bGw9PUFlJiYoQWU9IiIpLCIiPT09dGhpcy5rZXk/QWU6YCR7dGhpcy5rZXl9PSR7QWV9YH10b1N0cmluZygpe2xldCBBZT10aGlzLmNvb2tpZVN0'@;
put 'cmluZygpO2lmKHRoaXMuZXhwaXJlcyE9MS8wJiYodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZT9BZSs9YDsgRXhwaXJlcz0ke3kodGhpcy5leHBpcmVzKX1gOkFlKz1gOyBFeHBpcmVzPSR7dGhpcy5leHBpcmVzfWApLG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZSE9MS8wJiYo'@;
put 'QWUrPWA7IE1heC1BZ2U9JHt0aGlzLm1heEFnZX1gKSx0aGlzLmRvbWFpbiYmIXRoaXMuaG9zdE9ubHkmJihBZSs9YDsgRG9tYWluPSR7dGhpcy5kb21haW59YCksdGhpcy5wYXRoJiYoQWUrPWA7IFBhdGg9JHt0aGlzLnBhdGh9YCksdGhpcy5zZWN1cmUmJihBZSs9IjsgU2VjdXJlIiksdGhp'@;
put 'cy5odHRwT25seSYmKEFlKz0iOyBIdHRwT25seSIpLHRoaXMuc2FtZVNpdGUmJiJub25lIiE9PXRoaXMuc2FtZVNpdGUpe2NvbnN0IEZlPWF0LnNhbWVTaXRlQ2Fub25pY2FsW3RoaXMuc2FtZVNpdGUudG9Mb3dlckNhc2UoKV07QWUrPWA7IFNhbWVTaXRlPSR7RmV8fHRoaXMuc2FtZVNpdGV9'@;
put 'YH1yZXR1cm4gdGhpcy5leHRlbnNpb25zJiZ0aGlzLmV4dGVuc2lvbnMuZm9yRWFjaChGZT0+e0FlKz1gOyAke0ZlfWB9KSxBZX1UVEwoQWUpe2lmKG51bGwhPXRoaXMubWF4QWdlKXJldHVybiB0aGlzLm1heEFnZTw9MD8wOjFlMyp0aGlzLm1heEFnZTtsZXQgRmU9dGhpcy5leHBpcmVzO3Jl'@;
put 'dHVybiBGZSE9MS8wPyhGZSBpbnN0YW5jZW9mIERhdGV8fChGZT1nKEZlKXx8MS8wKSxGZT09MS8wPzEvMDpGZS5nZXRUaW1lKCktKEFlfHxEYXRlLm5vdygpKSk6MS8wfWV4cGlyeVRpbWUoQWUpe2lmKG51bGwhPXRoaXMubWF4QWdlKXtjb25zdCBSZT10aGlzLm1heEFnZTw9MD8tMS8wOjFl'@;
put 'Myp0aGlzLm1heEFnZTtyZXR1cm4oQWV8fHRoaXMuY3JlYXRpb258fG5ldyBEYXRlKS5nZXRUaW1lKCkrUmV9cmV0dXJuIHRoaXMuZXhwaXJlcz09MS8wPzEvMDp0aGlzLmV4cGlyZXMuZ2V0VGltZSgpfWV4cGlyeURhdGUoQWUpe2NvbnN0IEZlPXRoaXMuZXhwaXJ5VGltZShBZSk7cmV0dXJu'@;
put 'IEZlPT0xLzA/bmV3IERhdGUoUSk6RmU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUoRmUpfWlzUGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxs'@;
put 'OngodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVkRG9tYWluKCl9fWZ1bmN0aW9uIHhlKGplKXtpZihudWxsIT1qZSl7Y29uc3QgQWU9amUudG9Mb3dlckNhc2UoKTtzd2l0Y2goQWUpe2Nhc2Ugc2UuU1RSSUNUOmNhc2Ugc2UuU0lMRU5UOmNhc2Ugc2Uu'@;
put 'RElTQUJMRUQ6cmV0dXJuIEFlfX1yZXR1cm4gc2UuU0lMRU5UfWF0LmNvb2tpZXNDcmVhdGVkPTAsYXQucGFyc2U9RSxhdC5mcm9tSlNPTj1uZSxhdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKFFlKSxhdC5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9'@;
put 'LGF0LnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtjbGFzcyB2ZXtjb25zdHJ1Y3RvcihBZSxGZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBGZSYmKEZlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpGZX0pLEgudmFsaWRh'@;
put 'dGUoSC5pc09iamVjdChGZSksRmUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9RmUucmVqZWN0UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29zZU1vZGU9ISFGZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgRmUuYWxsb3dTcGVj'@;
put 'aWFsVXNlRG9tYWlufHxGZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1BZXx8bmV3IHcsdGhpcy5wcmVmaXhTZWN1cml0eT14ZShGZS5wcmVmaXhTZWN1cml0eSksdGhpcy5fY2xvbmVTeW5jPXFlKCJjbG9uZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPXFlKCJfaW1wb3J0'@;
put 'Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9cWUoImdldENvb2tpZXMiKSx0aGlzLmdldENvb2tpZVN0cmluZ1N5bmM9cWUoImdldENvb2tpZVN0cmluZyIpLHRoaXMuZ2V0U2V0Q29va2llU3RyaW5nc1N5bmM9cWUoImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENv'@;
put 'b2tpZXNTeW5jPXFlKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29raWVTeW5jPXFlKCJzZXRDb29raWUiKSx0aGlzLnNlcmlhbGl6ZVN5bmM9cWUoInNlcmlhbGl6ZSIpfXNldENvb2tpZShBZSxGZSxSZSxJZSl7bGV0IEhlO2lmKEgudmFsaWRhdGUoSC5pc05vbkVtcHR5U3RyaW5n'@;
put 'KEZlKSxJZSxSZSksSC5pc0Z1bmN0aW9uKEZlKSlyZXR1cm4oSWU9RmUpKG5ldyBFcnJvcigiTm8gVVJMIHdhcyBzcGVjaWZpZWQiKSk7Y29uc3QgRGU9WmUoRmUpO2lmKEguaXNGdW5jdGlvbihSZSkmJihJZT1SZSxSZT17fSksSC52YWxpZGF0ZShILmlzRnVuY3Rpb24oSWUpLEllKSwhSC5p'@;
put 'c05vbkVtcHR5U3RyaW5nKEFlKSYmIUguaXNPYmplY3QoQWUpJiZBZSBpbnN0YW5jZW9mIFN0cmluZyYmMD09QWUubGVuZ3RoKXJldHVybiBJZShudWxsKTtjb25zdCBrZT14KERlLmhvc3RuYW1lKSxfdD1SZS5sb29zZXx8dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IG50PW51bGw7aWYoUmUu'@;
put 'c2FtZVNpdGVDb250ZXh0JiYobnQ9aWUoUmUuc2FtZVNpdGVDb250ZXh0KSwhbnQpKXJldHVybiBJZShuZXcgRXJyb3IodGUpKTtpZigic3RyaW5nIj09dHlwZW9mIEFlfHxBZSBpbnN0YW5jZW9mIFN0cmluZyl7aWYoIShBZT1hdC5wYXJzZShBZSx7bG9vc2U6X3R9KSkpcmV0dXJuIEhlPW5l'@;
put 'dyBFcnJvcigiQ29va2llIGZhaWxlZCB0byBwYXJzZSIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6SGUpfWVsc2UgaWYoIShBZSBpbnN0YW5jZW9mIGF0KSlyZXR1cm4gSGU9bmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBzZXRDb29raWUgbXVzdCBiZSBhIENvb2tpZSBvYmplY3Qgb3Ig'@;
put 'c3RyaW5nIiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpIZSk7Y29uc3QgSmU9UmUubm93fHxuZXcgRGF0ZTtpZih0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzJiZBZS5kb21haW4mJm51bGw9PXAuZ2V0UHVibGljU3VmZml4KEFlLmNkb21haW4oKSx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRo'@;
put 'aXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLGlnbm9yZUVycm9yOlJlLmlnbm9yZUVycm9yfSkmJiFUZS50ZXN0KEFlLmRvbWFpbikpcmV0dXJuIEhlPW5ldyBFcnJvcigiQ29va2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeCIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6SGUp'@;
put 'O2lmKEFlLmRvbWFpbil7aWYoIUMoa2UsQWUuY2RvbWFpbigpLCExKSlyZXR1cm4gSGU9bmV3IEVycm9yKGBDb29raWUgbm90IGluIHRoaXMgaG9zdCdzIGRvbWFpbi4gQ29va2llOiR7QWUuY2RvbWFpbigpfSBSZXF1ZXN0OiR7a2V9YCksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpIZSk7bnVs'@;
put 'bD09QWUuaG9zdE9ubHkmJihBZS5ob3N0T25seT0hMSl9ZWxzZSBBZS5ob3N0T25seT0hMCxBZS5kb21haW49a2U7aWYoKCFBZS5wYXRofHwiLyIhPT1BZS5wYXRoWzBdKSYmKEFlLnBhdGg9VChEZS5wYXRobmFtZSksQWUucGF0aElzRGVmYXVsdD0hMCksITE9PT1SZS5odHRwJiZBZS5odHRw'@;
put 'T25seSlyZXR1cm4gSGU9bmV3IEVycm9yKCJDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOkhlKTtpZigibm9uZSIhPT1BZS5zYW1lU2l0ZSYmdm9pZCAwIT09QWUuc2FtZVNpdGUmJm50JiYibm9uZSI9PT1udCly'@;
put 'ZXR1cm4gSGU9bmV3IEVycm9yKCJDb29raWUgaXMgU2FtZVNpdGUgYnV0IHRoaXMgaXMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6SGUpO2NvbnN0IG9uPXRoaXMucHJlZml4U2VjdXJpdHk9PT1zZS5TSUxFTlQ7aWYodGhpcy5wcmVmaXhTZWN1cml0'@;
put 'eSE9PXNlLkRJU0FCTEVEKXtsZXQgS2UscnQ9ITE7aWYoZnVuY3Rpb24gbShqZSl7cmV0dXJuIEgudmFsaWRhdGUoSC5pc09iamVjdChqZSksamUpLCFqZS5rZXkuc3RhcnRzV2l0aCgiX19TZWN1cmUtIil8fGplLnNlY3VyZX0oQWUpP2Z1bmN0aW9uIEEoamUpe3JldHVybiBILnZhbGlkYXRl'@;
put 'KEguaXNPYmplY3QoamUpKSwhamUua2V5LnN0YXJ0c1dpdGgoIl9fSG9zdC0iKXx8amUuc2VjdXJlJiZqZS5ob3N0T25seSYmbnVsbCE9amUucGF0aCYmIi8iPT09amUucGF0aH0oQWUpfHwocnQ9ITAsS2U9IkNvb2tpZSBoYXMgX19Ib3N0IHByZWZpeCBidXQgZWl0aGVyIFNlY3VyZSBvciBI'@;
put 'b3N0T25seSBhdHRyaWJ1dGUgaXMgbm90IHNldCBvciBQYXRoIGlzIG5vdCAnLyciKToocnQ9ITAsS2U9IkNvb2tpZSBoYXMgX19TZWN1cmUgcHJlZml4IGJ1dCBTZWN1cmUgYXR0cmlidXRlIGlzIG5vdCBzZXQiKSxydClyZXR1cm4gSWUoUmUuaWdub3JlRXJyb3J8fG9uP251bGw6bmV3IEVy'@;
put 'cm9yKEtlKSl9Y29uc3QgTXQ9dGhpcy5zdG9yZTtNdC51cGRhdGVDb29raWV8fChNdC51cGRhdGVDb29raWU9ZnVuY3Rpb24ocnQsS2UsdHQpe3RoaXMucHV0Q29va2llKEtlLHR0KX0pLE10LmZpbmRDb29raWUoQWUuZG9tYWluLEFlLnBhdGgsQWUua2V5LGZ1bmN0aW9uIEl0KHJ0LEtlKXtp'@;
put 'ZihydClyZXR1cm4gSWUocnQpO2NvbnN0IHR0PWZ1bmN0aW9uKE5lKXtpZihOZSlyZXR1cm4gSWUoTmUpO0llKG51bGwsQWUpfTtpZihLZSl7aWYoITE9PT1SZS5odHRwJiZLZS5odHRwT25seSlyZXR1cm4gcnQ9bmV3IEVycm9yKCJvbGQgQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlz'@;
put 'bid0IGFuIEhUVFAgQVBJIiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpydCk7QWUuY3JlYXRpb249S2UuY3JlYXRpb24sQWUuY3JlYXRpb25JbmRleD1LZS5jcmVhdGlvbkluZGV4LEFlLmxhc3RBY2Nlc3NlZD1KZSxNdC51cGRhdGVDb29raWUoS2UsQWUsdHQpfWVsc2UgQWUuY3JlYXRpb249'@;
put 'QWUubGFzdEFjY2Vzc2VkPUplLE10LnB1dENvb2tpZShBZSx0dCl9KX1nZXRDb29raWVzKEFlLEZlLFJlKXtILnZhbGlkYXRlKEguaXNOb25FbXB0eVN0cmluZyhBZSksUmUsQWUpO2NvbnN0IEllPVplKEFlKTtILmlzRnVuY3Rpb24oRmUpJiYoUmU9RmUsRmU9e30pLEgudmFsaWRhdGUoSC5p'@;
put 'c09iamVjdChGZSksUmUsRmUpLEgudmFsaWRhdGUoSC5pc0Z1bmN0aW9uKFJlKSxSZSk7Y29uc3QgSGU9eChJZS5ob3N0bmFtZSksRGU9SWUucGF0aG5hbWV8fCIvIjtsZXQga2U9RmUuc2VjdXJlO251bGw9PWtlJiZJZS5wcm90b2NvbCYmKCJodHRwczoiPT1JZS5wcm90b2NvbHx8Indzczoi'@;
put 'PT1JZS5wcm90b2NvbCkmJihrZT0hMCk7bGV0IF90PTA7aWYoRmUuc2FtZVNpdGVDb250ZXh0KXtjb25zdCBydD1pZShGZS5zYW1lU2l0ZUNvbnRleHQpO2lmKF90PWF0LnNhbWVTaXRlTGV2ZWxbcnRdLCFfdClyZXR1cm4gUmUobmV3IEVycm9yKHRlKSl9bGV0IG50PUZlLmh0dHA7bnVsbD09'@;
put 'bnQmJihudD0hMCk7Y29uc3QgSmU9RmUubm93fHxEYXRlLm5vdygpLG9uPSExIT09RmUuZXhwaXJlLHl0PSEhRmUuYWxsUGF0aHMsTXQ9dGhpcy5zdG9yZTtmdW5jdGlvbiBJdChydCl7aWYocnQuaG9zdE9ubHkpe2lmKHJ0LmRvbWFpbiE9SGUpcmV0dXJuITF9ZWxzZSBpZighQyhIZSxydC5k'@;
put 'b21haW4sITEpKXJldHVybiExO3JldHVybiEoIXl0JiYhRihEZSxydC5wYXRoKXx8cnQuc2VjdXJlJiYha2V8fHJ0Lmh0dHBPbmx5JiYhbnR8fF90JiZhdC5zYW1lU2l0ZUxldmVsW3J0LnNhbWVTaXRlfHwibm9uZSJdPl90fHxvbiYmcnQuZXhwaXJ5VGltZSgpPD1KZSYmKE10LnJlbW92ZUNv'@;
put 'b2tpZShydC5kb21haW4scnQucGF0aCxydC5rZXksKCk9Pnt9KSwxKSl9TXQuZmluZENvb2tpZXMoSGUseXQ/bnVsbDpEZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbiwocnQsS2UpPT57aWYocnQpcmV0dXJuIFJlKHJ0KTtLZT1LZS5maWx0ZXIoSXQpLCExIT09RmUuc29ydCYmKEtlPUtl'@;
put 'LnNvcnQobGUpKTtjb25zdCB0dD1uZXcgRGF0ZTtmb3IoY29uc3QgTmUgb2YgS2UpTmUubGFzdEFjY2Vzc2VkPXR0O1JlKG51bGwsS2UpfSl9Z2V0Q29va2llU3RyaW5nKC4uLkFlKXtjb25zdCBGZT1BZS5wb3AoKTtILnZhbGlkYXRlKEguaXNGdW5jdGlvbihGZSksRmUpLEFlLnB1c2goZnVu'@;
put 'Y3Rpb24oSWUsSGUpe0llP0ZlKEllKTpGZShudWxsLEhlLnNvcnQobGUpLm1hcChEZT0+RGUuY29va2llU3RyaW5nKCkpLmpvaW4oIjsgIikpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsQWUpfWdldFNldENvb2tpZVN0cmluZ3MoLi4uQWUpe2NvbnN0IEZlPUFlLnBvcCgpO0gudmFs'@;
put 'aWRhdGUoSC5pc0Z1bmN0aW9uKEZlKSxGZSksQWUucHVzaChmdW5jdGlvbihJZSxIZSl7SWU/RmUoSWUpOkZlKG51bGwsSGUubWFwKERlPT5EZS50b1N0cmluZygpKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxBZSl9c2VyaWFsaXplKEFlKXtILnZhbGlkYXRlKEguaXNGdW5jdGlv'@;
put 'bihBZSksQWUpO2xldCBGZT10aGlzLnN0b3JlLmNvbnN0cnVjdG9yLm5hbWU7SC5pc09iamVjdChGZSkmJihGZT1udWxsKTtjb25zdCBSZT17dmVyc2lvbjpgdG91Z2gtY29va2llQCR7Un1gLHN0b3JlVHlwZTpGZSxyZWplY3RQdWJsaWNTdWZmaXhlczohIXRoaXMucmVqZWN0UHVibGljU3Vm'@;
put 'Zml4ZXMsZW5hYmxlTG9vc2VNb2RlOiEhdGhpcy5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOiEhdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6eGUodGhpcy5wcmVmaXhTZWN1cml0eSksY29va2llczpbXX07aWYoIXRoaXMuc3RvcmUuZ2V0'@;
put 'QWxsQ29va2llc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuc3RvcmUuZ2V0QWxsQ29va2llcylyZXR1cm4gQWUobmV3IEVycm9yKCJzdG9yZSBkb2VzIG5vdCBzdXBwb3J0IGdldEFsbENvb2tpZXMgYW5kIGNhbm5vdCBiZSBzZXJpYWxpemVkIikpO3RoaXMuc3RvcmUuZ2V0QWxsQ29va2ll'@;
put 'cygoSWUsSGUpPT5JZT9BZShJZSk6KFJlLmNvb2tpZXM9SGUubWFwKERlPT4oZGVsZXRlKERlPURlIGluc3RhbmNlb2YgYXQ/RGUudG9KU09OKCk6RGUpLmNyZWF0aW9uSW5kZXgsRGUpKSxBZShudWxsLFJlKSkpfXRvSlNPTigpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVN5bmMoKX1faW1wb3J0'@;
put 'Q29va2llcyhBZSxGZSl7bGV0IFJlPUFlLmNvb2tpZXM7aWYoIVJlfHwhQXJyYXkuaXNBcnJheShSZSkpcmV0dXJuIEZlKG5ldyBFcnJvcigic2VyaWFsaXplZCBqYXIgaGFzIG5vIGNvb2tpZXMgYXJyYXkiKSk7UmU9UmUuc2xpY2UoKTtjb25zdCBJZT1IZT0+e2lmKEhlKXJldHVybiBGZShI'@;
put 'ZSk7aWYoIVJlLmxlbmd0aClyZXR1cm4gRmUoSGUsdGhpcyk7bGV0IERlO3RyeXtEZT1uZShSZS5zaGlmdCgpKX1jYXRjaChrZSl7cmV0dXJuIEZlKGtlKX1pZihudWxsPT09RGUpcmV0dXJuIEllKG51bGwpO3RoaXMuc3RvcmUucHV0Q29va2llKERlLEllKX07SWUoKX1jbG9uZShBZSxGZSl7'@;
put 'MT09PWFyZ3VtZW50cy5sZW5ndGgmJihGZT1BZSxBZT1udWxsKSx0aGlzLnNlcmlhbGl6ZSgoUmUsSWUpPT57aWYoUmUpcmV0dXJuIEZlKFJlKTt2ZS5kZXNlcmlhbGl6ZShJZSxBZSxGZSl9KX1jbG9uZVN5bmMoQWUpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jbG9u'@;
put 'ZVN5bmMoKTtpZighQWUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgY2xvbmUgZGVzdGluYXRpb24gc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuX2Nsb25lU3luYyhBZSl9cmVtb3ZlQWxsQ29va2ll'@;
put 'cyhBZSl7SC52YWxpZGF0ZShILmlzRnVuY3Rpb24oQWUpLEFlKTtjb25zdCBGZT10aGlzLnN0b3JlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZW1vdmVBbGxDb29raWVzJiZGZS5yZW1vdmVBbGxDb29raWVzIT09Ti5wcm90b3R5cGUucmVtb3ZlQWxsQ29va2llcylyZXR1cm4gRmUucmVt'@;
put 'b3ZlQWxsQ29va2llcyhBZSk7RmUuZ2V0QWxsQ29va2llcygoUmUsSWUpPT57aWYoUmUpcmV0dXJuIEFlKFJlKTtpZigwPT09SWUubGVuZ3RoKXJldHVybiBBZShudWxsKTtsZXQgSGU9MDtjb25zdCBEZT1bXTtmdW5jdGlvbiBrZShfdCl7aWYoX3QmJkRlLnB1c2goX3QpLEhlKyssSGU9PT1J'@;
put 'ZS5sZW5ndGgpcmV0dXJuIEFlKERlLmxlbmd0aD9EZVswXTpudWxsKX1JZS5mb3JFYWNoKF90PT57RmUucmVtb3ZlQ29va2llKF90LmRvbWFpbixfdC5wYXRoLF90LmtleSxrZSl9KX0pfXN0YXRpYyBkZXNlcmlhbGl6ZShBZSxGZSxSZSl7bGV0IEllO2lmKDMhPT1hcmd1bWVudHMubGVuZ3Ro'@;
put 'JiYoUmU9RmUsRmU9bnVsbCksSC52YWxpZGF0ZShILmlzRnVuY3Rpb24oUmUpLFJlKSwic3RyaW5nIj09dHlwZW9mIEFlKXtpZihJZT1hZShBZSksSWUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gUmUoSWUpfWVsc2UgSWU9QWU7Y29uc3QgSGU9bmV3IHZlKEZlLHtyZWplY3RQdWJsaWNTdWZm'@;
put 'aXhlczpJZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6SWUuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjpJZS5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6SWUucHJlZml4U2VjdXJpdHl9KTtIZS5faW1wb3J0Q29va2llcyhJZSxEZT0+'@;
put 'e2lmKERlKXJldHVybiBSZShEZSk7UmUobnVsbCxIZSl9KX1zdGF0aWMgZGVzZXJpYWxpemVTeW5jKEFlLEZlKXtjb25zdCBSZT0ic3RyaW5nIj09dHlwZW9mIEFlP0pTT04ucGFyc2UoQWUpOkFlLEllPW5ldyB2ZShGZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6UmUucmVqZWN0UHVibGljU3Vm'@;
put 'Zml4ZXMsbG9vc2VNb2RlOlJlLmVuYWJsZUxvb3NlTW9kZX0pO2lmKCFJZS5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gSWUuX2ltcG9ydENvb2tpZXNT'@;
put 'eW5jKFJlKSxJZX19ZnVuY3Rpb24gcWUoamUpe3JldHVybiBmdW5jdGlvbiguLi5BZSl7aWYoIXRoaXMuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7bGV0IEZlLFJl'@;
put 'O2lmKHRoaXNbamVdKC4uLkFlLChJZSxIZSk9PntGZT1JZSxSZT1IZX0pLEZlKXRocm93IEZlO3JldHVybiBSZX19dmUuZnJvbUpTT049dmUuZGVzZXJpYWxpemVTeW5jLFsiX2ltcG9ydENvb2tpZXMiLCJjbG9uZSIsImdldENvb2tpZXMiLCJnZXRDb29raWVTdHJpbmciLCJnZXRTZXRDb29r'@;
put 'aWVTdHJpbmdzIiwicmVtb3ZlQWxsQ29va2llcyIsInNlcmlhbGl6ZSIsInNldENvb2tpZSJdLmZvckVhY2goamU9Pnt2ZS5wcm90b3R5cGVbamVdPWoodmUucHJvdG90eXBlW2plXSl9KSx2ZS5kZXNlcmlhbGl6ZT1qKHZlLmRlc2VyaWFsaXplKSxKLnZlcnNpb249UixKLkNvb2tpZUphcj12'@;
put 'ZSxKLkNvb2tpZT1hdCxKLlN0b3JlPU4sSi5NZW1vcnlDb29raWVTdG9yZT13LEoucGFyc2VEYXRlPWcsSi5mb3JtYXREYXRlPXksSi5wYXJzZT1FLEouZnJvbUpTT049bmUsSi5kb21haW5NYXRjaD1DLEouZGVmYXVsdFBhdGg9VCxKLnBhdGhNYXRjaD1GLEouZ2V0UHVibGljU3VmZml4PXAu'@;
put 'Z2V0UHVibGljU3VmZml4LEouY29va2llQ29tcGFyZT1sZSxKLnBlcm11dGVEb21haW49Yig3MzI0KS5wZXJtdXRlRG9tYWluLEoucGVybXV0ZVBhdGg9ZnVuY3Rpb24gd2UoamUpe2lmKEgudmFsaWRhdGUoSC5pc1N0cmluZyhqZSkpLCIvIj09PWplKXJldHVyblsiLyJdO2NvbnN0IEFlPVtq'@;
put 'ZV07Zm9yKDtqZS5sZW5ndGg+MTspe2NvbnN0IEZlPWplLmxhc3RJbmRleE9mKCIvIik7aWYoMD09PUZlKWJyZWFrO2plPWplLnN1YnN0cigwLEZlKSxBZS5wdXNoKGplKX1yZXR1cm4gQWUucHVzaCgiLyIpLEFlfSxKLmNhbm9uaWNhbERvbWFpbj14LEouUHJlZml4U2VjdXJpdHlFbnVtPXNl'@;
put 'LEouUGFyYW1ldGVyRXJyb3I9SC5QYXJhbWV0ZXJFcnJvcn0sNTc2MTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6X309Yig3MDQxKSxwPWIoMjIyNCkueSxOPWIoNzMyNCkucGVybXV0ZURvbWFpbix3PWIoODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJv'@;
put 'bDpGLGdldFV0aWxJbnNwZWN0Okh9PWIoMTI2OSk7Y2xhc3MgUiBleHRlbmRzIHB7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBCPUYoKTtCJiYodGhpc1tCXT10aGlzLmluc3BlY3QpfWluc3BlY3Qo'@;
put 'KXtyZXR1cm5geyBpZHg6ICR7SChqKSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tpZShCLFcsWixYKXtyZXR1cm4gWChudWxsLHRoaXMuaWR4W0JdJiZ0aGlzLmlkeFtCXVtXXT90aGlzLmlkeFtCXVtXXVtaXXx8bnVsbDp2b2lkIDApfWZpbmRDb29raWVzKEIsVyxaLFgpe2NvbnN0IFE9'@;
put 'W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIFomJihYPVosWj0hMCksIUIpcmV0dXJuIFgobnVsbCxbXSk7bGV0IHE7cT1XP2Z1bmN0aW9uKGdlKXtPYmplY3Qua2V5cyhnZSkuZm9yRWFjaChfZT0+e2lmKHcoVyxfZSkpe2NvbnN0IFRlPWdlW19lXTtmb3IoY29uc3QgU2UgaW4gVGUpUS5wdXNo'@;
put 'KFRlW1NlXSl9fSl9OmZ1bmN0aW9uKGdlKXtmb3IoY29uc3QgX2UgaW4gZ2Upe2NvbnN0IFRlPWdlW19lXTtmb3IoY29uc3QgU2UgaW4gVGUpUS5wdXNoKFRlW1NlXSl9fTtjb25zdCB0ZT1OKEIsWil8fFtCXSxpZT10aGlzLmlkeDt0ZS5mb3JFYWNoKHNlPT57Y29uc3QgZ2U9aWVbc2VdO2dl'@;
put 'JiZxKGdlKX0pLFgobnVsbCxRKX1wdXRDb29raWUoQixXKXt0aGlzLmlkeFtCLmRvbWFpbl18fCh0aGlzLmlkeFtCLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbQi5kb21haW5dW0IucGF0aF18fCh0aGlzLmlkeFtCLmRvbWFpbl1bQi5wYXRoXT1PYmplY3QuY3JlYXRl'@;
put 'KG51bGwpKSx0aGlzLmlkeFtCLmRvbWFpbl1bQi5wYXRoXVtCLmtleV09QixXKG51bGwpfXVwZGF0ZUNvb2tpZShCLFcsWil7dGhpcy5wdXRDb29raWUoVyxaKX1yZW1vdmVDb29raWUoQixXLFosWCl7dGhpcy5pZHhbQl0mJnRoaXMuaWR4W0JdW1ddJiZ0aGlzLmlkeFtCXVtXXVtaXSYmZGVs'@;
put 'ZXRlIHRoaXMuaWR4W0JdW1ddW1pdLFgobnVsbCl9cmVtb3ZlQ29va2llcyhCLFcsWil7cmV0dXJuIHRoaXMuaWR4W0JdJiYoVz9kZWxldGUgdGhpcy5pZHhbQl1bV106ZGVsZXRlIHRoaXMuaWR4W0JdKSxaKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoQil7cmV0dXJuIHRoaXMuaWR4PU9iamVj'@;
put 'dC5jcmVhdGUobnVsbCksQihudWxsKX1nZXRBbGxDb29raWVzKEIpe2NvbnN0IFc9W10sWj10aGlzLmlkeDtPYmplY3Qua2V5cyhaKS5mb3JFYWNoKFE9PntPYmplY3Qua2V5cyhaW1FdKS5mb3JFYWNoKHRlPT57T2JqZWN0LmtleXMoWltRXVt0ZV0pLmZvckVhY2goc2U9PntudWxsIT09c2Um'@;
put 'JlcucHVzaChaW1FdW3RlXVtzZV0pfSl9KX0pLFcuc29ydCgoUSxxKT0+KFEuY3JlYXRpb25JbmRleHx8MCktKHEuY3JlYXRpb25JbmRleHx8MCkpLEIobnVsbCxXKX19ZnVuY3Rpb24gaihZKXtjb25zdCBCPU9iamVjdC5rZXlzKFkpO2lmKDA9PT1CLmxlbmd0aClyZXR1cm4iW09iamVjdDog'@;
put 'bnVsbCBwcm90b3R5cGVdIHt9IjtsZXQgVz0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9iamVjdC5rZXlzKFkpLmZvckVhY2goKFosWCk9PntXKz1mdW5jdGlvbiBQKFksQil7bGV0IFo9YCAgJyR7WX0nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1'@;
put 'cm4gT2JqZWN0LmtleXMoQikuZm9yRWFjaCgoWCxRLHEpPT57Wis9ZnVuY3Rpb24gTChZLEIpe2NvbnN0IFc9IiAgICAiO2xldCBaPWAke1d9JyR7WX0nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoQikuZm9yRWFjaCgoWCxRLHEpPT57Wis9YCAg'@;
put 'ICAgICR7WH06ICR7QltYXS5pbnNwZWN0KCl9YCxRPHEubGVuZ3RoLTEmJihaKz0iLCIpLForPSJcbiJ9KSxaKz1gJHtXfX1gLFp9KFgsQltYXSksUTxxLmxlbmd0aC0xJiYoWis9IiwiKSxaKz0iXG4ifSksWis9IiAgfSIsWn0oWixZW1pdKSxYPEIubGVuZ3RoLTEmJihXKz0iLCIpLFcrPSJc'@;
put 'biJ9KSxXKz0ifSIsV31bImZpbmRDb29raWUiLCJmaW5kQ29va2llcyIsInB1dENvb2tpZSIsInVwZGF0ZUNvb2tpZSIsInJlbW92ZUNvb2tpZSIsInJlbW92ZUNvb2tpZXMiLCJyZW1vdmVBbGxDb29raWVzIiwiZ2V0QWxsQ29va2llcyJdLmZvckVhY2goWT0+e1IucHJvdG90eXBlW1ldPV8o'@;
put 'Ui5wcm90b3R5cGVbWV0pfSksSi5tPVJ9LDg5NzE6KGNlLEopPT57InVzZSBzdHJpY3QiO0ouVT1mdW5jdGlvbiBiKEQsXyl7cmV0dXJuIF89PT1EfHwwPT09RC5pbmRleE9mKF8pJiYoIi8iPT09Xy5zdWJzdHIoLTEpfHwiLyI9PT1ELnN1YnN0cihfLmxlbmd0aCwxKSl9fSw3MzI0OihjZSxK'@;
put 'LGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig3NTIpO0oucGVybXV0ZURvbWFpbj1mdW5jdGlvbiBfKHAsTil7Y29uc3Qgdz1ELmdldFB1YmxpY1N1ZmZpeChwLHthbGxvd1NwZWNpYWxVc2VEb21haW46Tn0pO2lmKCF3KXJldHVybiBudWxsO2lmKHc9PXApcmV0dXJuW3BdOyIuIj09cC5z'@;
put 'bGljZSgtMSkmJihwPXAuc2xpY2UoMCwtMSkpO2NvbnN0IEg9cC5zbGljZSgwLC0ody5sZW5ndGgrMSkpLnNwbGl0KCIuIikucmV2ZXJzZSgpO2xldCBSPXc7Y29uc3Qgaj1bUl07Zm9yKDtILmxlbmd0aDspUj1gJHtILnNoaWZ0KCl9LiR7Un1gLGoucHVzaChSKTtyZXR1cm4gan19LDc1Mjoo'@;
put 'Y2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoODU2NiksXz1bImxvY2FsIiwiZXhhbXBsZSIsImludmFsaWQiLCJsb2NhbGhvc3QiLCJ0ZXN0Il0scD1bImxvY2FsaG9zdCIsImludmFsaWQiXTtKLmdldFB1YmxpY1N1ZmZpeD1mdW5jdGlvbiBOKHcsRj17fSl7Y29uc3QgSD13LnNw'@;
put 'bGl0KCIuIiksUj1IW0gubGVuZ3RoLTFdLFA9ISFGLmlnbm9yZUVycm9yO2lmKEYuYWxsb3dTcGVjaWFsVXNlRG9tYWluJiZfLmluY2x1ZGVzKFIpKXtpZihILmxlbmd0aD4xKXJldHVybmAke0hbSC5sZW5ndGgtMl19LiR7Un1gO2lmKHAuaW5jbHVkZXMoUikpcmV0dXJuYCR7Un1gfWlmKCFQ'@;
put 'JiZfLmluY2x1ZGVzKFIpKXRocm93IG5ldyBFcnJvcihgQ29va2llIGhhcyBkb21haW4gc2V0IHRvIHRoZSBwdWJsaWMgc3VmZml4ICIke1J9IiB3aGljaCBpcyBhIHNwZWNpYWwgdXNlIGRvbWFpbi4gVG8gYWxsb3cgdGhpcywgY29uZmlndXJlIHlvdXIgQ29va2llSmFyIHdpdGgge2FsbG93'@;
put 'U3BlY2lhbFVzZURvbWFpbjp0cnVlLCByZWplY3RQdWJsaWNTdWZmaXhlczogZmFsc2V9LmApO3JldHVybiBELmdldCh3KX19LDIyMjQ6KGNlLEopPT57InVzZSBzdHJpY3QiO0oueT1jbGFzcyBie2NvbnN0cnVjdG9yKCl7dGhpcy5zeW5jaHJvbm91cz0hMX1maW5kQ29va2llKF8scCxOLHcp'@;
put 'e3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1maW5kQ29va2llcyhfLHAsTix3KXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXB1dENvb2tpZShfLHApe3Rocm93IG5ldyBFcnJvcigicHV0Q29va2llIGlz'@;
put 'IG5vdCBpbXBsZW1lbnRlZCIpfXVwZGF0ZUNvb2tpZShfLHAsTil7dGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llKF8scCxOLHcpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJl'@;
put 'bW92ZUNvb2tpZXMoXyxwLE4pe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVBbGxDb29raWVzKF8pe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1nZXRBbGxDb29raWVzKF8pe3Ro'@;
put 'cm93IG5ldyBFcnJvcigiZ2V0QWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQgKHRoZXJlZm9yZSBqYXIgY2Fubm90IGJlIHNlcmlhbGl6ZWQpIil9fX0sMTI2OTooY2UsSixiKT0+e2Z1bmN0aW9uIEQoKXt0cnl7cmV0dXJuIGIoOTUzOSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9u'@;
put 'IF8oKXtyZXR1cm4gU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKX1KLmdldFV0aWxJbnNwZWN0PWZ1bmN0aW9uKHcsRj17fSl7Y29uc3QgUj0oRi5yZXF1aXJlVXRpbHx8RCkoKTtyZXR1cm4gZnVuY3Rpb24oUCxMLFkpe3JldHVybiBSP1IuaW5zcGVjdChQLEwsWSk6'@;
put 'dyhQKX19LEouZ2V0Q3VzdG9tSW5zcGVjdFN5bWJvbD1mdW5jdGlvbih3PXt9KXtyZXR1cm4ody5sb29rdXBDdXN0b21JbnNwZWN0U3ltYm9sfHxfKSgpfHxmdW5jdGlvbiBwKE4pe2NvbnN0IEY9KE4ucmVxdWlyZVV0aWx8fEQpKCk7cmV0dXJuIEY/Ri5pbnNwZWN0LmN1c3RvbTpudWxsfSh3'@;
put 'KX19LDc2NTI6KGNlLEopPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoUCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFB9ZnVuY3Rpb24gTihQKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFB8fFAgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gdyhQKXtyZXR1cm4iW29iamVjdCBPYmpl'@;
put 'Y3RdIj09PXRvU3RyaW5nLmNhbGwoUCl9Y2xhc3MgaiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKC4uLkwpe3N1cGVyKC4uLkwpfX1KLlBhcmFtZXRlckVycm9yPWosSi5pc0Z1bmN0aW9uPWIsSi5pc05vbkVtcHR5U3RyaW5nPWZ1bmN0aW9uIEQoUCl7cmV0dXJuIE4oUCkmJiIiIT09UH0s'@;
put 'Si5pc0RhdGU9ZnVuY3Rpb24gXyhQKXtyZXR1cm4gZnVuY3Rpb24gRihQLEwpe3RyeXtyZXR1cm4gUCBpbnN0YW5jZW9mIEx9Y2F0Y2h7cmV0dXJuITF9fShQLERhdGUpJiZmdW5jdGlvbiBIKFApe3JldHVybiJudW1iZXIiPT10eXBlb2YgUCYmUCUxPT0wfShQLmdldFRpbWUoKSl9LEouaXNF'@;
put 'bXB0eVN0cmluZz1mdW5jdGlvbiBwKFApe3JldHVybiIiPT09UHx8UCBpbnN0YW5jZW9mIFN0cmluZyYmIiI9PT1QLnRvU3RyaW5nKCl9LEouaXNTdHJpbmc9TixKLmlzT2JqZWN0PXcsSi52YWxpZGF0ZT1mdW5jdGlvbiBSKFAsTCxZKXtpZihiKEwpfHwoWT1MLEw9bnVsbCksdyhZKXx8KFk9'@;
put 'e0Vycm9yOiJGYWlsZWQgQ2hlY2sifSksIVApe2lmKCFMKXRocm93IG5ldyBqKFkpO0wobmV3IGooWSkpfX19LDQ1NjpjZT0+e2NlLmV4cG9ydHM9IjQuMS4zIn0sNzA0MTooY2UsSik9PnsidXNlIHN0cmljdCI7Si5mcm9tQ2FsbGJhY2s9ZnVuY3Rpb24oYil7cmV0dXJuIE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSlyZXR1cm4gbmV3IFByb21pc2UoKEQsXyk9Pnthcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aF09KHAsTik9PntpZihwKXJldHVybiBfKHApO0QoTil9LGFyZ3Vt'@;
put 'ZW50cy5sZW5ndGgrKyxiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO2IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwibmFtZSIse3ZhbHVlOmIubmFtZX0pfSxKLmZyb21Qcm9taXNlPWZ1bmN0aW9uKGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtjb25zdCBEPWFy'@;
put 'Z3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEKXJldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtkZWxldGUgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYXJndW1lbnRzLmxlbmd0aC0tLGIuYXBwbHkodGhpcyxhcmd1bWVudHMpLnRo'@;
put 'ZW4oXz0+RChudWxsLF8pLEQpfSwibmFtZSIse3ZhbHVlOmIubmFtZX0pfX0sNjcyOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LEYsSCxSKXtyZXR1cm4gbmV3KEh8fChIPVByb21pc2UpKShmdW5jdGlvbihQLEwp'@;
put 'e2Z1bmN0aW9uIFkoWil7dHJ5e1coUi5uZXh0KFopKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBCKFope3RyeXtXKFIudGhyb3coWikpfWNhdGNoKFgpe0woWCl9fWZ1bmN0aW9uIFcoWil7Wi5kb25lP1AoWi52YWx1ZSk6ZnVuY3Rpb24gaihQKXtyZXR1cm4gUCBpbnN0YW5jZW9mIEg/UDpu'@;
put 'ZXcgSChmdW5jdGlvbihMKXtMKFApfSl9KFoudmFsdWUpLnRoZW4oWSxCKX1XKChSPVIuYXBwbHkodyxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouQ29udGV4dE1hbmFnZXI9dm9pZCAwO2NvbnN0IF89Yig1OTI4'@;
put 'KSxwPWIoOTc3OCk7Si5Db250ZXh0TWFuYWdlcj1jbGFzcyBOe2dldCBnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0c31nZXQgZ2V0RGVmYXVsdExhdW5jaGVyQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5kZWZhdWx0TGF1bmNoZXJD'@;
put 'b250ZXh0c31jb25zdHJ1Y3RvcihGLEgpe3RoaXMuc2VydmVyVXJsPUYsdGhpcy5yZXF1ZXN0Q2xpZW50PUgsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJEYXRhIE1pbmluZyBjb21wdXRlIGNvbnRleHQiLCJJbXBv'@;
put 'cnQgOSBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGNvbXB1dGUgY29udGV4dCIsIlNBUyBTdHVkaW8gY29tcHV0ZSBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBjb21wdXRlIGNv'@;
put 'bnRleHQiXSx0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiRGF0YSBNaW5pbmcgbGF1bmNoZXIgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkpvYiBGbG93IEV4ZWN1dGlvbiBs'@;
put 'YXVuY2hlciBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGxhdW5jaGVyIGNvbnRleHQiXSxG'@;
put 'JiYoMCxfLmlzVXJsKShGKX1nZXRDb21wdXRlQ29udGV4dHMoRil7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpIfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0'@;
put 'PTEwMDAwYCxGKS5jYXRjaChqPT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKGosIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0cy4gIil9KTtyZXR1cm4oSCYmSC5pdGVtcz9ILml0ZW1zOltdKS5tYXAoaj0+KHtjcmVhdGVkQnk6ai5jcmVhdGVkQnksaWQ6ai5pZCxuYW1l'@;
put 'OmoubmFtZSx2ZXJzaW9uOmoudmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkpfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhGKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Okh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2'@;
put 'ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxGKS5jYXRjaChqPT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKGosIkVycm9yIHdoaWxlIGdldHRpbmcgbGF1bmNoZXIgY29udGV4dHMuICIpfSk7cmV0dXJuKEgmJkguaXRlbXM/SC5pdGVtczpbXSkubWFwKGo9Pih7Y3Jl'@;
put 'YXRlZEJ5OmouY3JlYXRlZEJ5LGlkOmouaWQsbmFtZTpqLm5hbWUsdmVyc2lvbjpqLnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KEYsSCxSLGosUCxMKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy52YWxpZGF0'@;
put 'ZUNvbnRleHROYW1lKEYpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChGLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cyxgQ29tcHV0ZSBjb250ZXh0ICcke0Z9JyBhbHJlYWR5IGV4aXN0cy5gKSwoeWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dHMoUCkpLmZpbmQoUT0+US5uYW1lPT09Rikp'@;
put 'dGhyb3cgbmV3IEVycm9yKGBDb21wdXRlIGNvbnRleHQgJyR7Rn0nIGFscmVhZHkgZXhpc3RzLmApO2lmKEgmJiF0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLmluY2x1ZGVzKEgpJiYhKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhQKSkuZmluZChxPT5xLm5hbWU9PT1IKSl7'@;
put 'Y29uc3QgcT1gVGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICR7SH1gLGllPXlpZWxkIHRoaXMuY3JlYXRlTGF1bmNoZXJDb250ZXh0KEgscSwiZGlyZWN0IixQKS5jYXRjaChzZT0+e3Rocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gJHtzZX1g'@;
put 'KX0pO2lmKCFpZXx8IWllLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO0g9aWUubmFtZX1sZXQgVz17cmV1c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9O1ImJihXPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxXKSx7cnVu'@;
put 'U2VydmVyQXM6Un0pKTtjb25zdCBaPXtuYW1lOkYsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6SHx8IiJ9LGF0dHJpYnV0ZXM6V307TCYmTC5sZW5ndGg/Wi5hdXRob3JpemVkVXNlcnM9TDpaLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCxqJiYoWi5lbnZpcm9ubWVudD17'@;
put 'YXV0b0V4ZWNMaW5lczpqfSk7Y29uc3R7cmVzdWx0Olh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzYCxaLFApLmNhdGNoKFE9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoUSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcg'@;
put 'Y29tcHV0ZSBjb250ZXh0LiAiKX0pO3JldHVybiBYfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KEYsSCxSPSJkaXJlY3QiLGope3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighRil0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtp'@;
put 'Zih0aGlzLmlzRGVmYXVsdENvbnRleHQoRix0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLGBMYXVuY2hlciBjb250ZXh0ICcke0Z9JyBhbHJlYWR5IGV4aXN0cy5gKSwoeWllbGQgdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKGopKS5maW5kKFc9PlcubmFtZT09PUYpKXRocm93IG5ldyBF'@;
put 'cnJvcihgTGF1bmNoZXIgY29udGV4dCAnJHtGfScgYWxyZWFkeSBleGlzdHMuYCk7Y29uc3QgWT17bmFtZTpGLGRlc2NyaXB0aW9uOkgsbGF1bmNoVHlwZTpSfSx7cmVzdWx0OkJ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250'@;
put 'ZXh0c2AsWSxqKS5jYXRjaChXPT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKFcsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIpfSk7cmV0dXJuIEJ9KX1lZGl0Q29tcHV0ZUNvbnRleHQoRixILFIpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'biooKXtsZXQgajt0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoRiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEYsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJFZGl0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFsbG93ZWQuIiwhMCksaj15aWVsZCB0aGlzLmdl'@;
put 'dENvbXB1dGVDb250ZXh0QnlOYW1lKEYsUiksanx8KGo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5SWQoSC5pZCxSKSk7Y29uc3R7cmVzdWx0OlAsZXRhZzpMfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7'@;
put 'ai5pZH1gLFIpLmNhdGNoKFk9Pnt0aHJvdyBZJiY0MDQ9PT1ZLnN0YXR1cz9uZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke0Z9JyB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLmApOll9KTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgL2NvbXB1dGUvY29udGV4dHMv'@;
put 'JHtQLmlkfWAsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sUCksSCkse2F0dHJpYnV0ZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFAuYXR0cmlidXRlcyksSC5hdHRyaWJ1dGVzKX0pLFIseyJJZi1NYXRjaCI6TH0pfSl9Z2V0Q29tcHV0ZUNv'@;
put 'bnRleHRCeU5hbWUoRixIKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OlJ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/ZmlsdGVyPWVxKG5hbWUsICIke0Z9IilgLEgp'@;
put 'LmNhdGNoKGo9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoaiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgbmFtZS4gIil9KTtpZighUnx8IVIuaXRlbXN8fCFSLml0ZW1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke0Z9JyB3YXMgbm90'@;
put 'IGZvdW5kIGF0ICcke3RoaXMuc2VydmVyVXJsfScuYCk7cmV0dXJuIFIuaXRlbXNbMF19KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoRixIKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OlJ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQo'@;
put 'YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHtGfWAsSCkuY2F0Y2goaj0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKShqLCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBpZC4gIil9KTtyZXR1cm4gUn0pfWdldEV4ZWN1dGFibGVDb250ZXh0cyhG'@;
put 'LEgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Un09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsSD8uYWNjZXNzX3Rva2VuKS5jYXRjaChCPT57'@;
put 'dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKEIsIkVycm9yIHdoaWxlIGZldGNoaW5nIGNvbXB1dGUgY29udGV4dHMuIil9KSxqPVIuaXRlbXN8fFtdLFA9W10sTD1qLm1hcChCPT57Y29uc3QgVz1bIiVwdXQgJj1zeXN1c2VyaWQ7Il07cmV0dXJuKCk9PkYoYHRlc3QtJHtCLm5hbWV9YCxXLEIu'@;
put 'bmFtZSxILG51bGwsITEsITAsITApLmNhdGNoKFo9PlopfSk7bGV0IFk9W107Zm9yKGNvbnN0IEIgb2YgTClZLnB1c2goeWllbGQgQigpKTtyZXR1cm4gWS5mb3JFYWNoKChCLFcpPT57aWYoQiYmQi5sb2cpdHJ5e2xldCBYPSIiO2NvbnN0IFE9Qi5sb2cuc3BsaXQoIlxuIikuZmluZChxPT5x'@;
put 'LnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKSk7USYmKFg9US5yZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIiksUC5wdXNoKHtjcmVhdGVkQnk6altXXS5jcmVhdGVkQnksaWQ6altXXS5pZCxuYW1lOmpbV10ubmFtZSx2ZXJzaW9uOmpbV10udmVyc2lvbixhdHRyaWJ1dGVzOntzeXNVc2VySWQ6WH19'@;
put 'KSl9Y2F0Y2goWil7dGhyb3cgWn19KSxQfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoRixIKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKEYpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChGLHRoaXMuZGVmYXVsdENvbXB1dGVD'@;
put 'b250ZXh0cywiRGVsZXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKTtjb25zdCBqPXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoRixIKTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShgJHt0aGlzLnNl'@;
put 'cnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke2ouaWR9YCxIKX0pfXZhbGlkYXRlQ29udGV4dE5hbWUoRil7aWYoIUYpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIil9aXNEZWZhdWx0Q29udGV4dChGLEg9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLFI9'@;
put 'IiIsaj0hMSl7aWYoSC5pbmNsdWRlcyhGKSl0aHJvdyBuZXcgRXJyb3IoYCR7Un0ke2o/IlxuRGVmYXVsdCBjb250ZXh0czoiK0gubWFwKChQLEwpPT5gXG4ke0wrMX0uICR7UH1gKToiIn1gKX19fSw4MzA2OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMu'@;
put 'X19hd2FpdGVyfHxmdW5jdGlvbihqLFAsTCxZKXtyZXR1cm4gbmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihXLFope2Z1bmN0aW9uIFgodGUpe3RyeXtxKFkubmV4dCh0ZSkpfWNhdGNoKGllKXtaKGllKX19ZnVuY3Rpb24gUSh0ZSl7dHJ5e3EoWS50aHJvdyh0ZSkpfWNhdGNoKGllKXta'@;
put 'KGllKX19ZnVuY3Rpb24gcSh0ZSl7dGUuZG9uZT9XKHRlLnZhbHVlKTpmdW5jdGlvbiBCKFcpe3JldHVybiBXIGluc3RhbmNlb2YgTD9XOm5ldyBMKGZ1bmN0aW9uKFope1ooVyl9KX0odGUudmFsdWUpLnRoZW4oWCxRKX1xKChZPVkuYXBwbHkoaixQfHxbXSkpLm5leHQoKSl9KX0sXz10aGlz'@;
put 'JiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oail7cmV0dXJuIGomJmouX19lc01vZHVsZT9qOntkZWZhdWx0Omp9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TQVM5QXBpQ2xpZW50PXZvaWQgMDtjb25zdCBwPWIoNzc1NyksTj1f'@;
put 'KGIoNjIzMCkpLHc9Yig3OTUpLEY9Yig1OTI4KTtKLlNBUzlBcGlDbGllbnQ9Y2xhc3MgSHtjb25zdHJ1Y3RvcihQLEwsWSl7dGhpcy5zZXJ2ZXJVcmw9UCx0aGlzLmpvYnNQYXRoPUwsUCYmKDAsRi5pc1VybCkoUCksdGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyB3LlNhczlSZXF1ZXN0Q2xpZW50'@;
put 'KFAsWSl9Z2V0Q29uZmlnKCl7cmV0dXJue3NlcnZlclVybDp0aGlzLnNlcnZlclVybH19c2V0Q29uZmlnKFApe1AmJih0aGlzLnNlcnZlclVybD1QKX1leGVjdXRlU2NyaXB0KFAsTCxZKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LmxvZ2luKEwsWSx0aGlzLmpvYnNQYXRoKTtjb25zdCBXPVIoWy4uLlAsImRhdGEgX251bGxfOyIsImZpbGUgX3dlYm91dDsiLCJwdXQgJ0V4ZWN1dGVkIHNhc2pzIHJ1bic7IiwicnVuOyJdLmpvaW4oIlxuIikpLFo9YC9Vc2VyIEZvbGRlcnMvJHtMfS9NeSBGb2xkZXIvc2FzanMv'@;
put 'cnVubmVyYCxYPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK1cuZ2V0Qm91bmRhcnkoKSxxPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6WCwiQ29udGVudC1MZW5ndGgiOlcuZ2V0TGVuZ3RoU3luYygpLENvbm5lY3Rpb246'@;
put 'ImtlZXAtYWxpdmUifSx0ZT1gJHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitaKyImX2RlYnVnPWxvZyJ9YDtyZXR1cm4oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGUsVyx2b2lkIDAsWCxxKSkucmVzdWx0fSl9fTtjb25zdCBSPWo9Pntjb25zdCBQPW5ldyBOLmRlZmF1'@;
put 'bHQsTD1gc2FzanMtZXhlY3V0ZS1zYXM5LSR7KDAscC5nZW5lcmF0ZVRpbWVzdGFtcCkoIiIpfS5zYXNgO3JldHVybiBQLmFwcGVuZChMLGose2ZpbGVuYW1lOkwsY29udGVudFR5cGU6InRleHQvcGxhaW4ifSksUH19LDk4MjE6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9'@;
put 'Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odGUsaWUsc2UsZ2Upe3JldHVybiBuZXcoc2V8fChzZT1Qcm9taXNlKSkoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIHplKHkpe3RyeXtnKGdlLm5leHQoeSkpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlv'@;
put 'biB6KHkpe3RyeXtnKGdlLnRocm93KHkpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gZyh5KXt5LmRvbmU/VGUoeS52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBpbnN0YW5jZW9mIHNlP1RlOm5ldyBzZShmdW5jdGlvbihTZSl7U2UoVGUpfSl9KHkudmFsdWUpLnRoZW4oemUs'@;
put 'eil9ZygoZ2U9Z2UuYXBwbHkodGUsaWV8fFtdKSkubmV4dCgpKX0pfSxOPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0ZSl7cmV0dXJuIHRlJiZ0ZS5fX2VzTW9kdWxlP3RlOntkZWZhdWx0OnRlfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLEouU0FTVml5YUFwaUNsaWVudD12b2lkIDA7Y29uc3Qgdz1iKDU5MjgpLEY9TihiKDYyMzApKSxIPWIoMTM5NSksUj1iKDY5MDMpLGo9Yig2NzIpLFA9Yig5MDk3KSxMPWIoOTc3OCksWT1iKDEzNDMpLEI9Yig3MDQpLFc9Yig2NDk2KSxaPWIoMTYyMiksWD1iKDM1NjkpLFE9'@;
put 'YigzNjYpO0ouU0FTVml5YUFwaUNsaWVudD1jbGFzcyBxe2NvbnN0cnVjdG9yKGllLHNlLGdlLF9lKXt0aGlzLnNlcnZlclVybD1pZSx0aGlzLnJvb3RGb2xkZXJOYW1lPXNlLHRoaXMuY29udGV4dE5hbWU9Z2UsdGhpcy5yZXF1ZXN0Q2xpZW50PV9lLHRoaXMuX2RlYnVnPSExLHRoaXMuc2Vz'@;
put 'c2lvbk1hbmFnZXI9bmV3IFIuU2Vzc2lvbk1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuY29udGV4dE1hbmFnZXI9bmV3IGouQ29udGV4dE1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlz'@;
put 'LmZvbGRlck1hcD1uZXcgTWFwLGllJiYoMCx3LmlzVXJsKShpZSl9YXBwZW5kUmVxdWVzdChpZSxzZSxnZSl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoaWUsc2UsZ2UpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoaWUpe3RoaXMuX2RlYnVnPWll'@;
put 'LHRoaXMuc2Vzc2lvbk1hbmFnZXImJih0aGlzLnNlc3Npb25NYW5hZ2VyLmRlYnVnPWllKX1nZXRKb2JzSW5Gb2xkZXIoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBzZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVy'@;
put 'TmFtZX0vJHtpZX1gOmllO3JldHVybiB0aGlzLmZvbGRlck1hcC5nZXQoc2UpfHwoeWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChzZSkpLHRoaXMuZm9sZGVyTWFwLmdldChzZSl9KX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1l'@;
put 'OnRoaXMucm9vdEZvbGRlck5hbWV9fXNldENvbmZpZyhpZSxzZSl7aWUmJih0aGlzLnNlcnZlclVybD1pZSksc2UmJih0aGlzLnJvb3RGb2xkZXJOYW1lPXNlKX1nZXRDb21wdXRlQ29udGV4dHMoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWll'@;
put 'bGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dHMoaWUpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhpZSl7cmV0dXJuIHAodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29udGV4dHMoaWUpfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKGllKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qgc2U9dGhp'@;
put 'cy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyk7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKHNlLGllKX0pfWNyZWF0ZVNlc3Npb24oaWUsc2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6'@;
put 'X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIixzZSksVGU9X2UuaXRlbXMmJl9lLml0ZW1zLmxlbmd0aD9fZS5pdGVtcy5maW5kKHplPT56ZS5uYW1lPT09aWUpOm51bGw7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgRXhlY3V0'@;
put 'aW9uIGNvbnRleHQgJHtpZX0gbm90IGZvdW5kLmApO2NvbnN0e3Jlc3VsdDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9jb21wdXRlL2NvbnRleHRzLyR7VGUuaWR9L3Nlc3Npb25zYCx7fSxzZSk7cmV0dXJuIFNlfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoaWUsc2UsZ2Us'@;
put 'X2UsVGUsU2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVDb21wdXRlQ29udGV4dChpZSxzZSxnZSxfZSxUZSxTZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsc2UsZ2U9ImRpcmVjdCIs'@;
put 'X2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsc2UsZ2UsX2UpfSl9ZWRpdENvbXB1dGVDb250ZXh0KGllLHNlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KGllLHNlLGdlKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KGllLHNlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRo'@;
put 'aXMuY29udGV4dE1hbmFnZXIuZGVsZXRlQ29tcHV0ZUNvbnRleHQoaWUsc2UpfSl9ZXhlY3V0ZVNjcmlwdChpZSxzZSxnZSxfZSxUZT1udWxsLFNlPSExLHplPSExLHo9ITAsZyx5PSExLHgpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxaLmV4ZWN1'@;
put 'dGVPbkNvbXB1dGVBcGkpKHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNlc3Npb25NYW5hZ2VyLHRoaXMucm9vdEZvbGRlck5hbWUsaWUsc2UsZ2UsX2UsVGUsU2UsemUseixnLHkseCl9KX1nZXRGaWxlQ29udGVudChpZSxzZSxnZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKigpe2NvbnN0IF9lPXlpZWxkIHRoaXMuZ2V0RmlsZVVyaShpZSxzZSxnZSkuY2F0Y2goVGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoVGUsYEVycm9yIHdoaWxlIGdldHRpbmcgZmlsZSBVUkkgZm9yOiAke3NlfSBpbiBmb2xkZXI6ICR7aWV9LiBgKX0pO3JldHVybiB5aWVsZCB0'@;
put 'aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7X2V9L2NvbnRlbnRgLGdlKS50aGVuKFRlPT5UZS5yZXN1bHQpfSl9dXBkYXRlRmlsZUNvbnRlbnQoaWUsc2UsZ2UsX2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT15aWVs'@;
put 'ZCB0aGlzLmdldEZpbGVVcmkoaWUsc2UsX2UpLmNhdGNoKHo9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoeixgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7c2V9IGluIGZvbGRlcjogJHtpZX0uIGApfSkse3Jlc3VsdDpTZSxldGFnOnplfT15aWVsZCB0aGlzLnJlcXVl'@;
put 'c3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7VGV9YCxfZSk7aWYoIVNlfHwhemUpdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7c2V9IGRvZXMgbm90IGhhdmUgYW4gRVRhZywgb3IgcmVxdWVzdCBmYWlsZWQuYCk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wdXQoYCR7'@;
put 'dGhpcy5zZXJ2ZXJVcmx9JHtUZX0vY29udGVudGAsZ2UsX2UseyJJZi1NYXRjaCI6emUsIkNvbnRlbnQtVHlwZSI6U2UuY29udGVudFR5cGV9KS50aGVuKHo9PnoucmVzdWx0KX0pfWdldEZvbGRlcihpZSxzZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVy'@;
put 'biB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1gLHNlKS50aGVuKGdlPT5nZS5yZXN1bHQpfSl9Y3JlYXRlRmlsZShpZSxzZSxnZSxfZSxUZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFn'@;
put 'ZSYmIV9lKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7IV9lJiZnZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGdlLFRlKSk7Y29uc3QgU2U9e0FjY2VwdDoiYXBwbGljYXRpb24vdm5kLnNhcy5maWxlK2pzb24i'@;
put 'LCJDb250ZW50LURpc3Bvc2l0aW9uIjpgZmlsZW5hbWU9IiR7aWV9IjtgfSx6ZT1uZXcgRi5kZWZhdWx0O3JldHVybiB6ZS5hcHBlbmQoImZpbGUiLHNlLGllKSwoeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9maWxlcy9maWxlcz9wYXJlbnRGb2xkZXJVcmk9JHtfZX0mdHlwZURl'@;
put 'Zk5hbWU9ZmlsZSNyYXdVcGxvYWRgLHplLFRlLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK3plLl9ib3VuZGFyeSxTZSkpLnJlc3VsdH0pfWNyZWF0ZUZvbGRlcihpZSxzZSxnZSxfZSxUZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFNl'@;
put 'PUQubG9nZ2VyfHxfO2lmKCFzZSYmIWdlKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7aWYoIWdlJiZzZSlpZihnZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShzZSxfZSkpe2lmKFRlKXtjb25zdCB6PXNlKyIvIitpZTso'@;
put 'eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoeixfZSkpJiYoeWllbGQgdGhpcy5kZWxldGVGb2xkZXIoc2UrIi8iK2llLF9lKSl9fWVsc2V7U2UuaW5mbyhgUGFyZW50IGZvbGRlciBhdCBwYXRoICcke3NlfScgaXMgbm90IHByZXNlbnQuYCk7Y29uc3Qgej1zZS5zdWJzdHJpbmcoMCxzZS5sYXN0'@;
put 'SW5kZXhPZigiLyIpKSxnPWAke3NlLnNwbGl0KCIvIikucG9wKCl9YDtpZigiIj09PXopdGhyb3cgbmV3IEguUm9vdEZvbGRlck5vdEZvdW5kRXJyb3Ioc2UsdGhpcy5zZXJ2ZXJVcmwsX2UpO1NlLmluZm8oYENyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nJHtnfScgaW4gJyR7en0nYCk7Y29u'@;
put 'c3QgeT15aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihnLHosdm9pZCAwLF9lKTtTZS5pbmZvKGBQYXJlbnQgZm9sZGVyICcke2d9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSxnZT1gL2ZvbGRlcnMvZm9sZGVycy8ke3kuaWR9YH1jb25zdHtyZXN1bHQ6emV9PXlpZWxkIHRoaXMu'@;
put 'cmVxdWVzdENsaWVudC5wb3N0KGAvZm9sZGVycy9mb2xkZXJzP3BhcmVudEZvbGRlclVyaT0ke2dlfWAse25hbWU6aWUsdHlwZToiZm9sZGVyIn0sX2UpLmNhdGNoKHo9Pntjb25zdHttZXNzYWdlOmcscmVzcG9uc2U6eX09ejtpZihnJiZ5JiZ5LmRhdGEmJnkuZGF0YS5tZXNzYWdlKXtjb25z'@;
put 'dHtzdGF0dXM6eH09eSx7bWVzc2FnZTpDfT15LmRhdGEsVD1bZyxDXS5tYXAoVT0+L1wuJC8udGVzdChVKT9VOmAke1V9LmApO3Rocm93IVRlJiY0MDk9PT14JiZULnB1c2goJ1RvIG92ZXJyaWRlLCBwbGVhc2Ugc2V0ICJpc0ZvcmNlZCIgdG8gInRydWUiLicpLFQuam9pbigiICIpfXRocm93'@;
put 'IHp9KTtyZXR1cm4geWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChgJHtzZX0vJHtpZX1gLF9lKSx6ZX0pfWNyZWF0ZUpvYkRlZmluaXRpb24oaWUsc2UsZ2UsX2UsVGUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighZ2UmJiFfZSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiFfZSYmZ2UmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShnZSxUZSkpLHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JEZWZpbml0'@;
put 'aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9JHtfZX1gLHtuYW1lOmllLHBhcmFtZXRlcnM6W3tuYW1lOiJfYWRkamVzYmVnaW5lbmRtYWNyb3MiLHR5cGU6IkNIQVJBQ1RFUiIsZGVmYXVsdFZhbHVlOiJmYWxzZSJ9XSx0eXBlOiJDb21wdXRlIixjb2RlOnNlfSxUZSl9KX1nZXRB'@;
put 'dXRoQ29kZShpZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHNlPWAke3RoaXMuc2VydmVyVXJsfS9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSR7aWV9JnJlc3BvbnNlX3R5cGU9Y29kZWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVz'@;
put 'dENsaWVudC5nZXQoc2Usdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihfZT0+X2UucmVzdWx0KS50aGVuKF9lPT5wKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVGU9IiI7aWYoKDAsUC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoX2UpKXtjb25zdCB6ZT0oeWllbGQgdGhp'@;
put 'cy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShfZSkpLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHouaW5uZXJIVE1MPXplLFRlPXoucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRl'@;
put 'eHQsVGV9e2NvbnN0IFNlPV9lLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLHplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB6ZS5pbm5lckhUTUw9U2UsemUmJihUZT16ZS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCks'@;
put 'VGV9fSkpLmNhdGNoKCgpPT5udWxsKX0pfWdldEFjY2Vzc1Rva2VuKGllLHNlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsWC5nZXRBY2Nlc3NUb2tlbkZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSxzZSxnZSl9KX1yZWZyZXNoVG9r'@;
put 'ZW5zKGllLHNlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsUS5yZWZyZXNoVG9rZW5zRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLHNlLGdlKX0pfWRlbGV0ZUNsaWVudChpZSxzZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKigpe2NvbnN0IGdlPXRoaXMuc2VydmVyVXJsK2Avb2F1dGgvY2xpZW50cy8ke2llfWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoZ2Usc2UpKS5yZXN1bHR9KX1leGVjdXRlQ29tcHV0ZUpvYihpZSxzZSxnZSxfZSxUZSxTZT0hMCx6ZT0hMSx6LGc9'@;
put 'ITEseSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB4PShUZXx8e30pLmFjY2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46eH09eWllbGQoMCxCLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCko'@;
put 'aWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUiKTtjb25zdCBDPWllLnNwbGl0KCIvIiksVD1DLnBvcCgpLFY9Qy5qb2luKCIvIiksVT0oMCx3'@;
put 'LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtWfWA6Vjt5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKFUseCkuY2F0Y2gobmU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkobmUsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9'@;
put 'KTtjb25zdCBFPXRoaXMuZm9sZGVyTWFwLmdldChVKTtpZighRSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJyR7VX0nIHdhcyBub3QgZm91bmQgb24gJyR7dGhpcy5zZXJ2ZXJVcmx9J2ApO2NvbnN0IG09RT8uZmluZChuZT0+bmUubmFtZT09PVQpO2lmKCFtKXRocm93IG5ldyBFcnJv'@;
put 'cigiSm9iIHdhcyBub3QgZm91bmQuIik7bGV0IEE9bT8uY29kZTtpZighQSl7Y29uc3QgbmU9bT8ubGlua3MuZmluZCh3ZT0+ImdldFJlc291cmNlIj09PXdlLnJlbCk7aWYoIW5lKXRocm93IG5ldyBFcnJvcigiVVJJIG9mIGpvYiBkZWZpbml0aW9uIHdhcyBub3QgZm91bmQuIik7Y29uc3R7'@;
put 'cmVzdWx0OmxlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7bmUuaHJlZn1gLHgpLmNhdGNoKHdlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHdlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYiBkZWZpbml0aW9uLiAiKX0pO0E9bGUuY29kZSxt'@;
put 'LmNvZGU9QX1BfHwoQT0iIik7Y29uc3QgYWU9QS5yZXBsYWNlKC9cclxuL2csIlxuIikuc3BsaXQoIlxuIik7cmV0dXJuIHlpZWxkIHRoaXMuZXhlY3V0ZVNjcmlwdChpZSxhZSxzZSxUZSxfZSxnZSx6ZSxTZSx6LGcseSl9KX1leGVjdXRlSm9iKGllLHNlLGdlLF9lLFRlKXt2YXIgU2UsemUs'@;
put 'ejtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IGc9KFRlfHx7fSkuYWNjZXNzX3Rva2VuO2lmKFRlJiYoe2FjY2Vzc190b2tlbjpnfT15aWVsZCgwLEIuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsVGUpKSwoMCx3LmlzUmVsYXRpdmVQYXRoKShpZSkm'@;
put 'JiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZS4iKTtjb25zdCB5PWllLnNwbGl0KCIvIikseD15LnBvcCgpLEM9eS5qb2luKCIvIiksVD0oMCx3Lmlz'@;
put 'UmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtDfWA6Qzt5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKFQsZyk7Y29uc3QgVj10aGlzLmZvbGRlck1hcC5nZXQoVCk7aWYoIVYpdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke1R9JyB3YXMgbm90IGZv'@;
put 'dW5kIG9uICcke3RoaXMuc2VydmVyVXJsfScuYCk7Y29uc3QgVT1WPy5maW5kKEFlPT5BZS5uYW1lPT09eCk7bGV0IEU9W107aWYoX2UmJk9iamVjdC5rZXlzKF9lKS5sZW5ndGgmJihFPXlpZWxkIHRoaXMudXBsb2FkVGFibGVzKF9lLGcpKSwhVSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMg'@;
put 'bm90IGZvdW5kLiIpO2NvbnN0IG09bnVsbD09PShTZT1VPy5saW5rcy5maW5kKEFlPT4iZ2V0UmVzb3VyY2UiPT09QWUucmVsKSl8fHZvaWQgMD09PVNlP3ZvaWQgMDpTZS5ocmVmLHtyZXN1bHQ6QX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke219'@;
put 'YCxnKSxhZT17X2NvbnRleHROYW1lOnNlLF9wcm9ncmFtOmAke1R9LyR7eH1gLF93ZWJpbl9maWxlX2NvdW50OkUubGVuZ3RoLF9PTUlUSlNPTkxJU1RJTkc6ITAsX09NSVRKU09OTE9HOiEwLF9vbWl0U2Vzc2lvblJlc3VsdHM6ITEsX09NSVRURVhUTElTVElORzohMCxfT01JVFRFWFRMT0c6'@;
put 'ITB9O2dlJiYoYWUuX09NSVRURVhUTE9HPSJmYWxzZSIsYWUuX29taXRTZXNzaW9uUmVzdWx0cz0iZmFsc2UiLGFlLl9ERUJVRz0xMzEpLEUuZm9yRWFjaCgoQWUsRmUpPT57YWVbYF93ZWJpbl9maWxldXJpJHtGZSsxfWBdPWAvZmlsZXMvZmlsZXMvJHtBZS5maWxlLmlkfWAsYWVbYF93ZWJp'@;
put 'bl9uYW1lJHtGZSsxfWBdPUFlLnRhYmxlTmFtZX0pO2NvbnN0IG5lPXtuYW1lOmBleGVjLSR7eH1gLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixqb2JEZWZpbml0aW9uOkEsYXJndW1lbnRzOmFlfSx7cmVzdWx0OmxlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0'@;
put 'aGlzLnNlcnZlclVybH0vam9iRXhlY3V0aW9uL2pvYnM/X2FjdGlvbj13YWl0YCxuZSxnKSx3ZT15aWVsZCB0aGlzLnBvbGxKb2JTdGF0ZShsZSxUZSkuY2F0Y2goQWU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoQWUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KSx7'@;
put 'cmVzdWx0OlplfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JFeGVjdXRpb24vam9icy8ke2xlLmlkfWAsZyk7bGV0IFFlLGF0O2NvbnN0IHhlPVplLnJlc3VsdHNbIl93ZWJvdXQuanNvbiJdLHZlPVplLmxpbmtzLmZpbmQoQWU9PiJsb2ciPT09'@;
put 'QWUucmVsKTtpZih4ZSYmKFFlPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt4ZX0vY29udGVudGAsZywidGV4dC9wbGFpbiIpKSxnZSYmdmUmJihhdD15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7dmUuaHJl'@;
put 'Zn0vY29udGVudGAsZykudGhlbihBZT0+QWUucmVzdWx0Lml0ZW1zLm1hcChGZT0+RmUubGluZSkuam9pbigiXG4iKSkpLCJmYWlsZWQiPT09d2UpdGhyb3cgbmV3IEguSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09PSh6ZT1aZS5lcnJvcil8fHZvaWQgMD09PXplP3ZvaWQgMDp6ZS5lcnJvckNv'@;
put 'ZGUsbnVsbD09PSh6PVplLmVycm9yKXx8dm9pZCAwPT09ej92b2lkIDA6ei5tZXNzYWdlLGF0KTtjb25zdCBxZT17cmVzdWx0OlFlPy5yZXN1bHQsbG9nOmF0fSx7ZXJyb3I6amV9PVplO3JldHVybiBqZSYmKHFlLmVycm9yPWplKSxxZX0pfXBvcHVsYXRlRm9sZGVyTWFwKGllLHNlKXtyZXR1'@;
put 'cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7aWV9YDppZTtpZih0aGlzLmZvbGRlck1hcC5nZXQoZ2UpKXJldHVybjtjb25zdCBfZT0iL2ZvbGRlcnMvZm9sZGVycy9A'@;
put 'aXRlbT9wYXRoPSIrZ2Use3Jlc3VsdDpUZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHtfZX1gLHNlKS5jYXRjaCh6PT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdldHRpbmcgZm9sZGVyLiAiKX0pO2lmKCFUZSl0aHJvdyBuZXcgRXJyb3IoYFRo'@;
put 'ZSBwYXRoICR7Z2V9IGRvZXMgbm90IGV4aXN0IG9uICR7dGhpcy5zZXJ2ZXJVcmx9YCk7Y29uc3R7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzLyR7VGUuaWR9L21lbWJlcnM/bGltaXQ9JHtUZS5tZW1iZXJDb3VudDw1MDA/NTAwOlRl'@;
put 'Lm1lbWJlckNvdW50fWAsc2UpLmNhdGNoKHo9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBtZW1iZXJzLiAiKX0pO3RoaXMuZm9sZGVyTWFwLnNldChnZSxTZS5pdGVtcyl9KX1wb2xsSm9iU3RhdGUoaWUsc2UsZ2Upe3JldHVybiBwKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxZLnBvbGxKb2JTdGF0ZSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLHRoaXMuZGVidWcsc2UsZ2UpfSl9dXBsb2FkVGFibGVzKGllLHNlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsVy51cGxv'@;
put 'YWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxpZSxzZSl9KX1nZXRGb2xkZXJEZXRhaWxzKGllLHNlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9KDAsdy5pc1VyaSkoaWUpP2llOmAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1g'@;
put 'LHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtnZX1gLHNlKS5jYXRjaChUZT0+e2lmKFRlIGluc3RhbmNlb2YgSC5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IFRlO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihfZSlyZXR1cm4gX2V9'@;
put 'KX1nZXRGb2xkZXJVcmkoaWUsc2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBnZT15aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMoaWUsc2UpO2lmKGdlKXJldHVybmAvZm9sZGVycy9mb2xkZXJzLyR7Z2UuaWR9YH0pfWdldEZpbGVVcmkoaWUsc2Us'@;
put 'Z2Upe3ZhciBfZTtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9eWllbGQgdGhpcy5saXN0Rm9sZGVyKGllLGdlLDFlMyx7cmV0dXJuRGV0YWlsczohMH0pLmNhdGNoKHplPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHplLGBFcnJvciB3aGlsZSBs'@;
put 'aXN0aW5nIGZvbGRlcjogJHtpZX0uIGApfSk7aWYoIVRlfHwhVGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTm8gbWVtYmVycyBmb3VuZCBpbiBmb2xkZXI6ICR7aWV9YCk7Y29uc3QgU2U9bnVsbD09PShfZT1UZS5maW5kKHplPT56ZS5uYW1lPT09c2UpKXx8dm9pZCAwPT09X2U/dm9pZCAw'@;
put 'Ol9lLnVyaTtpZighU2UpdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7c2V9IG5vdCBmb3VuZCBpbiBmb2xkZXI6ICR7aWV9YCk7cmV0dXJuIFNlfSl9Z2V0UmVjeWNsZUJpblVyaShpZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpnZX09eWll'@;
put 'bGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BteVJlY3ljbGVCaW5gLGllKS5jYXRjaChfZT0+e2lmKF9lIGluc3RhbmNlb2YgSC5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IF9lO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihnZSly'@;
put 'ZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke2dlLmlkfWB9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSxzZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKGll'@;
put 'LHNlKX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChpZSxzZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlJZChpZSxzZSl9KX1saXN0Rm9sZGVyKGllLHNlLGdlPTIwLF9l'@;
put 'KXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9KDAsdy5pc1VyaSkoaWUpP2llOnlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLHNlKSx7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7VGV9'@;
put 'L21lbWJlcnM/bGltaXQ9JHtnZX1gLHNlKTtsZXQgemU9W107cmV0dXJuIFNlJiZTZS5pdGVtcyYmKHplPV9lPy5yZXR1cm5EZXRhaWxzP1NlLml0ZW1zOlNlLml0ZW1zLm1hcCh6PT56Lm5hbWUpKSx6ZX0pfW1vdmVGb2xkZXIoaWUsc2UsZ2UsX2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT1pZS5zcGxpdCgiLyIpLnBvcCgpO2lmKHlpZWxkIHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhzZSxfZSkpZ2U9VGU7ZWxzZXtsZXQgeD1zZS5zcGxpdCgiLyIpO3guc3BsaWNlKHgubGVuZ3RoLTEsMSksc2U9eC5qb2luKCIvIil9Y29uc3QgemU9eWll'@;
put 'bGQgdGhpcy5nZXRGb2xkZXJVcmkoaWUsX2UpLHo9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoc2UsX2UpO2lmKCF6ZSlyZXR1cm47Y29uc3QgZz16ZT8uc3BsaXQoIi8iKS5wb3AoKSx7cmVzdWx0Onl9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wYXRjaChgJHt0aGlzLnNlcnZlclVybH0k'@;
put 'e3plfWAse2lkOmcsbmFtZTpnZSxwYXJlbnRGb2xkZXJVcmk6en0sX2UpLmNhdGNoKHg9Pnt0aHJvdyB4LmNvZGUmJiJFTk9URk9VTkQiPT09eC5jb2RlP3tib2R5OnttZXNzYWdlOmBGb2xkZXIgJyR7aWUuc3BsaXQoIi8iKS5wb3AoKX0nIHdhcyBub3QgZm91bmQuYH19Onh9KTtyZXR1cm4g'@;
put 'eXx8dm9pZCAwfSl9ZGVsZXRlRm9sZGVyKGllLHNlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9eWllbGQgdGhpcy5nZXRSZWN5Y2xlQmluVXJpKHNlKSxfZT1pZS5zcGxpdCgiLyIpLnBvcCgpfHwiIixUZT1uZXcgRGF0ZSx6ZT1fZSsiICIrVGUu'@;
put 'dG9Mb2NhbGVEYXRlU3RyaW5nKCkrIiAiK1RlLnRvTG9jYWxlVGltZVN0cmluZygpO3JldHVybiB5aWVsZCB0aGlzLm1vdmVGb2xkZXIoaWUsZ2UsemUsc2UpfSl9fX0sNTk1NjpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp'@;
put 'b24oVyxaLFgsUSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24odGUsaWUpe2Z1bmN0aW9uIHNlKFRlKXt0cnl7X2UoUS5uZXh0KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gZ2UoVGUpe3RyeXtfZShRLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVu'@;
put 'Y3Rpb24gX2UoVGUpe1RlLmRvbmU/dGUoVGUudmFsdWUpOmZ1bmN0aW9uIHEodGUpe3JldHVybiB0ZSBpbnN0YW5jZW9mIFg/dGU6bmV3IFgoZnVuY3Rpb24oaWUpe2llKHRlKX0pfShUZS52YWx1ZSkudGhlbihzZSxnZSl9X2UoKFE9US5hcHBseShXLFp8fFtdKSkubmV4dCgpKX0pfTtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgXz1iKDU5MjgpLHA9YigxMjMwKSxOPWIoOTgyMSksdz1iKDgzMDYpLEY9YigzNDY3KSxIPWIoMTUyNyksUj1iKDM5MDApLGo9Yig0NTg4KSxQPWIoMzYwMiksTD1iKDgyMTcpLFk9e3NlcnZlclVybDoi'@;
put 'IixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEs'@;
put 'Y29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOnAuTG9naW5NZWNoYW5pc20uRGVmYXVsdH07Si5kZWZhdWx0PWNsYXNzIEJ7Y29uc3RydWN0b3IoWil7dGhpcy5zYXNqc0NvbmZpZz1uZXcgcC5T'@;
put 'QVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0'@;
put 'cz0oKT0+RCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFgsUSxxLHRlLGllO3lpZWxkIG51bGw9PT0oWD10aGlzLndlYkpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09WD92b2lkIDA6WC5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KFE9dGhpcy5jb21wdXRl'@;
put 'Sm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1RP3ZvaWQgMDpRLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0ocT10aGlzLmplc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09cT92b2lkIDA6cS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KHRlPXRoaXMuZmls'@;
put 'ZVVwbG9hZGVyKXx8dm9pZCAwPT09dGU/dm9pZCAwOnRlLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oaWU9dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpfSksdGhpcy5zZXRWZXJib3NlTW9k'@;
put 'ZT1YPT57dmFyIFE7bnVsbD09PShRPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVF8fFEuc2V0VmVyYm9zZU1vZGUoWCl9LHRoaXMuc2FzanNDb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFkpLFopLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9Z2V0Q3NyZlRv'@;
put 'a2VuKFo9ImdlbmVyYWwiKXt2YXIgWDtyZXR1cm4gbnVsbD09PShYPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVg/dm9pZCAwOlguZ2V0Q3NyZlRva2VuKFopfWV4ZWN1dGVTY3JpcHQoe2xpbmVzT2ZDb2RlOlosZmlsZU5hbWU6WCxjb250ZXh0TmFtZTpRLHJ1blRpbWU6cSxhdXRo'@;
put 'Q29uZmlnOnRlLGF1dGhDb25maWdTYXM5OmllLGRlYnVnOnNlfSl7dmFyIGdlLF9lO3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbUi5TZXJ2ZXJUeXBlLlNhczksUi5TZXJ2ZXJUeXBlLlNh'@;
put 'c2pzLFIuU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhczkpe2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5vdCBwcm92aWRlZCIpO3JldHVybiB5aWVsZCBudWxsPT09KGdlPXRo'@;
put 'aXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09PWdlP3ZvaWQgMDpnZS5leGVjdXRlU2NyaXB0KFosaWUudXNlck5hbWUsaWUucGFzc3dvcmQpfWlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNqcylyZXR1cm4geWllbGQgbnVsbD09PShfZT10aGlzLnNh'@;
put 'c0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09X2U/dm9pZCAwOl9lLmV4ZWN1dGVTY3JpcHQoWi5qb2luKCJcbiIpLHEsdGUpO2lmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhKXtpZighKFE9UXx8dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtpZighWCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgbmFtZSBpcyByZXF1aXJlZCBpbiBjYXNlIG9mIFNB'@;
put 'UyBWSVlBLiBQbGVhc2UgcHJvdmlkZSBhIGBmaWxlTmFtZWAuIik7cmV0dXJuIHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5leGVjdXRlU2NyaXB0KFgsWixRLHRlLG51bGwsc2V8fHRoaXMuc2FzanNDb25maWcuZGVidWcpfX0pfWV4ZWN1dGVKb2IoWixYLFEpe3ZhciBxO3JldHVybiBE'@;
put 'KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW1IuU2VydmVyVHlwZS5TYXNqc10pLHlpZWxkIG51bGw9PT0ocT10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09cT92b2lkIDA6cS5leGVjdXRl'@;
put 'Sm9iKFosWCxRKX0pfWdldENvbXB1dGVDb250ZXh0cyhaKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0cyIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNW'@;
put 'aXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0cyhaKX0pfWdldExhdW5jaGVyQ29udGV4dHMoWil7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRMYXVuY2hlckNvbnRleHRzIixbUi5TZXJ2ZXJUeXBl'@;
put 'LlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0TGF1bmNoZXJDb250ZXh0cyhaKX0pfWdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cyIsW1IuU2VydmVyVHlwZS5T'@;
put 'YXNWaXlhXSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKX1nZXRFeGVjdXRhYmxlQ29udGV4dHMoWil7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRFeGVjdXRh'@;
put 'YmxlQ29udGV4dHMiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRFeGVjdXRhYmxlQ29udGV4dHMoWil9KX1jcmVhdGVDb21wdXRlQ29udGV4dChaLFgsUSxxLHRlLGllKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q'@;
put 'KCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUNvbXB1dGVDb250ZXh0IixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlQ29tcHV0ZUNvbnRleHQoWixYLFEscSx0ZSxpZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRl'@;
put 'eHQoWixYLFEscSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVMYXVuY2hlckNvbnRleHQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVM'@;
put 'YXVuY2hlckNvbnRleHQoWixYLFEscSl9KX1lZGl0Q29tcHV0ZUNvbnRleHQoWixYLFEpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0IixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFd'@;
put 'KSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZWRpdENvbXB1dGVDb250ZXh0KFosWCxRKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KFosWCl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDb21w'@;
put 'dXRlQ29udGV4dCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNvbXB1dGVDb250ZXh0KFosWCl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShaLFgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1'@;
put 'cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShaLFgpfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKFosWCl7cmV0'@;
put 'dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5SWQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5SWQo'@;
put 'WixYKX0pfWNyZWF0ZVNlc3Npb24oWixYKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZVNlc3Npb24iLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5j'@;
put 'cmVhdGVTZXNzaW9uKFosWCl9KX1jcmVhdGVGb2xkZXIoWixYLFEscSx0ZSxpZSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0ZT95aWVsZCB0ZS5jcmVhdGVGb2xkZXIoWixYLFEscSxpZSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0'@;
put 'ZUZvbGRlcihaLFgsUSxxLGllKX0pfWNyZWF0ZUZpbGUoWixYLFEscSx0ZSxpZSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBpZT95aWVsZCBpZS5jcmVhdGVGaWxlKFosWCxRLHEsdGUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVG'@;
put 'aWxlKFosWCxRLHEsdGUpfSl9Z2V0RmlsZUNvbnRlbnQoWixYLFEpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RmlsZUNvbnRlbnQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2Fz'@;
put 'Vml5YUFwaUNsaWVudC5nZXRGaWxlQ29udGVudChaLFgsUSl9KX11cGRhdGVGaWxlQ29udGVudChaLFgsUSxxKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInVwZGF0ZUZpbGVDb250ZW50IixbUi5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQudXBkYXRlRmlsZUNvbnRlbnQoWixYLFEscSl9KX1nZXRGb2xkZXIoWixYKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZvbGRl'@;
put 'ciIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcihaLFgpfSl9ZGVsZXRlRm9sZGVyKFosWCl7dmFyIFE7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVk'@;
put 'KCJkZWxldGVGb2xkZXIiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oUT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1RP3ZvaWQgMDpRLmRlbGV0ZUZvbGRlcihaLFgpfSl9bGlzdEZvbGRlcihaLFgsUSxxPSExKXt2YXIgdGU7cmV0dXJuIEQodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJsaXN0Rm9sZGVyIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KHRlPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PXRlP3ZvaWQgMDp0ZS5saXN0Rm9sZGVy'@;
put 'KFosWCxRLHtyZXR1cm5EZXRhaWxzOnF9KX0pfW1vdmVGb2xkZXIoWixYLFEscSl7dmFyIHRlO3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibW92ZUZvbGRlciIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWll'@;
put 'bGQgbnVsbD09PSh0ZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT10ZT92b2lkIDA6dGUubW92ZUZvbGRlcihaLFgsUSxxKX0pfWNyZWF0ZUpvYkRlZmluaXRpb24oWixYLFEscSx0ZSxpZSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0'@;
put 'aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVKb2JEZWZpbml0aW9uIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxpZT95aWVsZCBpZS5jcmVhdGVKb2JEZWZpbml0aW9uKFosWCxRLHEsdGUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKFosWCxR'@;
put 'LHEsdGUpfSl9Z2V0QXV0aENvZGUoWil7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBdXRoQ29kZSIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEF1'@;
put 'dGhDb2RlKFopfSl9Z2V0QWNjZXNzVG9rZW4oWixYLFEpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtSLlNlcnZlclR5cGUuU2FzVml5YSxSLlNlcnZlclR5cGUuU2FzanNdKSx0'@;
put 'aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihaLFEpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihaLFgsUSl9KX1yZWZyZXNoVG9rZW5zKFosWCxR'@;
put 'KXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtSLlNlcnZlclR5cGUuU2FzVml5YSxSLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNl'@;
put 'cnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKFEpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKFosWCxRKX0pfWRlbGV0ZUNsaWVudChaLFgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo'@;
put 'KXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlQ2xpZW50IixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ2xpZW50KFosWCl9KX1nZXRTYXNqc0NvbmZpZygpe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnfWdldFVz'@;
put 'ZXJOYW1lKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIudXNlck5hbWV9c2V0U0FTanNDb25maWcoWil7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuc2FzanNDb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcp'@;
put 'LFopLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9KX1zZXREZWJ1Z1N0YXRlKFope3RoaXMuc2FzanNDb25maWcuZGVidWc9Wix0aGlzLnNhc1ZpeWFBcGlDbGllbnQmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVidWc9Wil9Y2hlY2tTZXNzaW9uKCl7cmV0dXJuIEQodGhpcyx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmNoZWNrU2Vzc2lvbigpfSl9bG9nSW4oWixYLFEscT17fSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5NZWNoYW5pc209PT1wLkxvZ2luTWVj'@;
put 'aGFuaXNtLkRlZmF1bHQpe2lmKCFafHwhWCl0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dJbihaLFgpfWlmKHR5cGVv'@;
put 'ZiB3aW5kb3c+InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKHEpfSl9bG9nT3V0KCl7cmV0dXJu'@;
put 'IHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9dXBsb2FkRmlsZShaLFgsUSxxPXt9LHRlKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZykscSk7Y29uc3QgaWU9e2ZpbGVzOlgs'@;
put 'cGFyYW1zOlF9O3JldHVybiB5aWVsZCB0aGlzLmZpbGVVcGxvYWRlci5leGVjdXRlKFosaWUscSx0ZSl9KX1yZXF1ZXN0KFosWCxRPXt9LHEsdGUsaWU9W10pe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtRPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0'@;
put 'aGlzLnNhc2pzQ29uZmlnKSxRKTtjb25zdCBzZT0oMCxfLnZhbGlkYXRlSW5wdXQpKFgpO3JldHVybiBzZS5zdGF0dXM/US5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKFosWCxRLHEsdGUsaWUpOlEuc2VydmVyVHlw'@;
put 'ZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhJiZudWxsIT1RLnVzZUNvbXB1dGVBcGk/US51c2VDb21wdXRlQXBpP3lpZWxkIHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yLmV4ZWN1dGUoWixYLFEscSx0ZSk6KFEuY29udGV4dE5hbWV8fChRPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxR'@;
put 'KSx7Y29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9KSkseWllbGQgdGhpcy5qZXNKb2JFeGVjdXRvci5leGVjdXRlKFosWCxRLHEsdGUsaWUpKTpRLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzOSYmUS51c2VybmFtZSYmUS5wYXNzd29yZD95aWVs'@;
put 'ZCB0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKFosWCxRKTp5aWVsZCB0aGlzLndlYkpvYkV4ZWN1dG9yLmV4ZWN1dGUoWixYLFEscSx0ZSxpZSk6UHJvbWlzZS5yZWplY3QobmV3IHAuRXJyb3JSZXNwb25zZShzZS5tc2cpKX0pfWRlcGxveVNlcnZpY2VQYWNrKFosWCxRLHEsdGU9ITEp'@;
put 'e3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSk7bGV0IGllPW51bGw7aWYoUXx8WClRfHwoUT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCksWHx8'@;
put 'KFg9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhPyhpZT1uZXcgTi5TQVNWaXlhQXBpQ2xpZW50KFEsWCx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksaWUuZGVi'@;
put 'dWc9dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhczkmJihpZT1uZXcgdy5TQVM5QXBpQ2xpZW50KFEsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSk7ZWxzZXtsZXQgZ2U9'@;
put 'bnVsbDt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzVml5YT9nZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29uZmlnKCk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhczkmJihnZT10aGlzLnNhczlBcGlDbGllbnQu'@;
put 'Z2V0Q29uZmlnKCkpLFE9Z2Uuc2VydmVyVXJsLFg9Z2Uucm9vdEZvbGRlck5hbWV9Wi5tZW1iZXJzWzBdLm1lbWJlcnMmJloubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQoZ2U9PiJmb2xkZXIiPT09Z2UudHlwZT8tMToxKTtjb25zdCBzZT1aLm1lbWJlcnM7eWllbGQgdGhpcy5jcmVhdGVGb2xk'@;
put 'ZXJzQW5kU2VydmljZXMoWCxzZSxxLGllLHRlKX0pfXN0YXJ0Q29tcHV0ZUpvYihaLFgsUT17fSxxLHRlLGllLHNlPSExLGdlLF9lKXt2YXIgVGUsU2UsemUsejtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoUT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24o'@;
put 'e30sdGhpcy5zYXNqc0NvbmZpZyksUSksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhUS5jb250ZXh0TmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29u'@;
put 'dGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO3JldHVybiBfZT8obnVsbD09PShUZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1UZXx8VGUuc2V0VmVyYm9zZU1vZGUoX2UpLG51bGw9PT0oU2U9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09'@;
put 'U2V8fFNlLmVuYWJsZVZlcmJvc2VNb2RlKCkpOiExPT09X2UmJihudWxsPT09KHplPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PXplfHx6ZS5kaXNhYmxlVmVyYm9zZU1vZGUoKSksbnVsbD09PSh6PXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PXo/dm9pZCAwOnouZXhl'@;
put 'Y3V0ZUNvbXB1dGVKb2IoWixRLmNvbnRleHROYW1lLFEuZGVidWcsWCxxLCEhdGUsITEsaWUsc2UsZ2UpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChaLFgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCha'@;
put 'LFgpLnRoZW4oUT0+e2lmKCFRKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgcC5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFJlc3BvbnNlIHdhcyBub3QgcHJvdmlkZWQuIikpO3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoUS5yZXN1bHQpfWNhdGNoKHEpe3Jl'@;
put 'dHVybiBQcm9taXNlLnJlamVjdChuZXcgcC5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIscSkpfX0pfSl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm5bLi4udGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCldLnNv'@;
put 'cnQoXy5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2'@;
put 'ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IFo9YCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKFo9YCR7Wn06JHtsb2NhdGlvbi5wb3J0fWApLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPVp9ZWxzZSB0aGlzLnNh'@;
put 'c2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVz'@;
put 'dENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/UC5TYXNqc1JlcXVl'@;
put 'c3RDbGllbnQ6ai5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3RvcnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9'@;
put 'dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanND'@;
put 'b25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IEguQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0Nv'@;
put 'bmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xp'@;
put 'ZW50PW5ldyBOLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pz'@;
put 'Q29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IHcu'@;
put 'U0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwo'@;
put 'dGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgRi5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IEwuRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQ'@;
put 'YXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgTC5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlh'@;
put 'QXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IEwuU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IEwuU2FzOUpvYkV4ZWN1dG9yKHRoaXMu'@;
put 'c2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgTC5Db21wdXRlSm9iRXhlY3V0'@;
put 'b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyBMLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9Y3JlYXRlRm9sZGVyc0FuZFNlcnZp'@;
put 'Y2VzKFosWCxRLHEsdGUpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLF8uYXN5bmNGb3JFYWNoKShYLGllPT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtzd2l0Y2goaWUudHlwZSl7Y2FzZSJmb2xkZXIiOnlpZWxkIHRoaXMuY3JlYXRl'@;
put 'Rm9sZGVyKGllLm5hbWUsWix2b2lkIDAsUSxxLHRlKTticmVhaztjYXNlImZpbGUiOnlpZWxkIHRoaXMuY3JlYXRlRmlsZShpZS5uYW1lLGllLmNvZGUsWix2b2lkIDAsUSxxKTticmVhaztjYXNlInNlcnZpY2UiOnlpZWxkIHRoaXMuY3JlYXRlSm9iRGVmaW5pdGlvbihpZS5uYW1lLGllLmNv'@;
put 'ZGUsWix2b2lkIDAsUSxxKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5pZGVudGlmaWVkIG1lbWJlciAnJHtpZS5uYW1lfScgcHJvdmlkZWQuYCl9ImZvbGRlciI9PT1pZS50eXBlJiZpZS5tZW1iZXJzJiZpZS5tZW1iZXJzLmxlbmd0aCYmKHlpZWxkIHRoaXMuY3JlYXRlRm9s'@;
put 'ZGVyc0FuZFNlcnZpY2VzKGAke1p9LyR7aWUubmFtZX1gLGllLm1lbWJlcnMsUSxxLHRlKSl9KSl9KX1pc01ldGhvZFN1cHBvcnRlZChaLFgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGV8fCFYLmluY2x1ZGVzKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSkpdGhyb3cgbmV3'@;
put 'IEVycm9yKGBNZXRob2QgJyR7Wn0nIGlzIG9ubHkgc3VwcG9ydGVkIG9uICR7WC5qb2luKCIsICIpfSBzZXJ2ZXJzLmApfWVuYWJsZVZlcmJvc2VNb2RlKFosWCl7dmFyIFE7bnVsbD09PShRPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVF8fFEuZW5hYmxlVmVyYm9zZU1vZGUoWixY'@;
put 'KX1kaXNhYmxlVmVyYm9zZU1vZGUoKXt2YXIgWjtudWxsPT09KFo9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09Wnx8Wi5kaXNhYmxlVmVyYm9zZU1vZGUoKX19fSwzNDY3OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5j'@;
put 'dGlvbihQLEwsWSxCKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihaLFgpe2Z1bmN0aW9uIFEoaWUpe3RyeXt0ZShCLm5leHQoaWUpKX1jYXRjaChzZSl7WChzZSl9fWZ1bmN0aW9uIHEoaWUpe3RyeXt0ZShCLnRocm93KGllKSl9Y2F0Y2goc2Upe1goc2UpfX1mdW5jdGlv'@;
put 'biB0ZShpZSl7aWUuZG9uZT9aKGllLnZhbHVlKTpmdW5jdGlvbiBXKFope3JldHVybiBaIGluc3RhbmNlb2YgWT9aOm5ldyBZKGZ1bmN0aW9uKFgpe1goWil9KX0oaWUudmFsdWUpLnRoZW4oUSxxKX10ZSgoQj1CLmFwcGx5KFAsTHx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2lt'@;
put 'cG9ydERlZmF1bHR8fGZ1bmN0aW9uKFApe3JldHVybiBQJiZQLl9fZXNNb2R1bGU/UDp7ZGVmYXVsdDpQfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouU0FTanNBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHA9XyhiKDYyMzApKSxOPWIoMzkwMCks'@;
put 'dz1iKDk3NzgpLEY9Yig1NyksSD1iKDI0OSksUj1iKDcwNCk7Si5TQVNqc0FwaUNsaWVudD1jbGFzcyBqe2NvbnN0cnVjdG9yKEwpe3RoaXMucmVxdWVzdENsaWVudD1MfWdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChMKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7'@;
put 'aWYoTCl7Y29uc3R7YWNjZXNzX3Rva2VuOll9PXlpZWxkKDAsUi5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxMLE4uU2VydmVyVHlwZS5TYXNqcyk7cmV0dXJuIFl9fSl9ZGVwbG95KEwsWSxCKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz15'@;
put 'aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChCKTtMLmFwcExvYz1MLmFwcExvY3x8WTtjb25zdHtyZXN1bHQ6Wn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIsTCxXLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAs'@;
put 'bWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFopfSl9ZGVwbG95WmlwRmlsZShMLFkpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVSZWFkU3RyZWFtOkJ9PWIoMjk3NSksVz15aWVsZCB0aGlzLmdldEFjY2Vzc1Rv'@;
put 'a2VuRm9yUmVxdWVzdChZKSxaPXlpZWxkIEIoTCksWD1uZXcgcC5kZWZhdWx0O1guYXBwZW5kKCJmaWxlIixaKTtjb25zdCBRPWBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke1guZ2V0Qm91bmRhcnkoKX1gLHtyZXN1bHQ6cX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3Qo'@;
put 'IlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLFgsVyxRLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUocSl9KX1leGVjdXRlSm9iKEwsWSxCKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q'@;
put 'KCl7Y29uc3QgVz1CP0IuYWNjZXNzX3Rva2VuOnZvaWQgMDtsZXQgWjtaPUwuX3Byb2dyYW0uc3RhcnRzV2l0aCgiLyIpP0wuX3Byb2dyYW06YCR7WX0vJHtMLl9wcm9ncmFtfWA7Y29uc3QgWD15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLE9i'@;
put 'amVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7X2RlYnVnOjEzMX0sTCkse19wcm9ncmFtOlp9KSxXKTtyZXR1cm57cmVzdWx0OlgucmVzdWx0LGxvZzpYLmxvZ319KX1leGVjdXRlU2NyaXB0KEwsWT0ic2FzIixCKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29u'@;
put 'c3QgVz15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChCKSxaPXtsb2c6IiJ9O3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29kZTpMLHJ1blRpbWU6WX0sVykudGhlbihYPT57Y29uc3R7bG9nOlEscHJpbnRP'@;
put 'dXRwdXQ6cSxyZXN1bHQ6dGV9PVg7Wi5sb2c9USxxJiYoWi5wcmludE91dHB1dD1xKSx0ZSYmKFoud2Vib3V0PXRlKX0pLmNhdGNoKFg9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoWCwiRXJyb3Igd2hpbGUgc2VuZGluZyBQT1NUIHJlcXVlc3QgdG8gZXhlY3V0ZSBjb2RlLiAiKX0pLFp9'@;
put 'KX1nZXRBY2Nlc3NUb2tlbihMLFkpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxGLmdldEFjY2Vzc1Rva2VuRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxMLFkpfSl9cmVmcmVzaFRva2VucyhMKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsSC5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxMKX0pfX19LDY5MDM6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp'@;
put 'b24oUCxMLFksQil7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oWixYKXtmdW5jdGlvbiBRKGllKXt0cnl7dGUoQi5uZXh0KGllKSl9Y2F0Y2goc2Upe1goc2UpfX1mdW5jdGlvbiBxKGllKXt0cnl7dGUoQi50aHJvdyhpZSkpfWNhdGNoKHNlKXtYKHNlKX19ZnVuY3Rpb24g'@;
put 'dGUoaWUpe2llLmRvbmU/WihpZS52YWx1ZSk6ZnVuY3Rpb24gVyhaKXtyZXR1cm4gWiBpbnN0YW5jZW9mIFk/WjpuZXcgWShmdW5jdGlvbihYKXtYKFopfSl9KGllLnZhbHVlKS50aGVuKFEscSl9dGUoKEI9Qi5hcHBseShQLEx8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TZXNzaW9uTWFuYWdlcj12b2lkIDA7Y29uc3QgTj1iKDEyMzApLHc9YigxMzk1KSxGPWIoNTkyOCksSD1iKDk3NzgpO0ouU2Vzc2lvbk1hbmFnZXI9Y2xhc3Mgantjb25zdHJ1Y3RvcihMLFksQil7dGhpcy5zZXJ2ZXJVcmw9TCx0aGlz'@;
put 'LmNvbnRleHROYW1lPVksdGhpcy5yZXF1ZXN0Q2xpZW50PUIsdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vzc2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1u'@;
put 'dWxsLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlPXtwcmludGVkOiExLHN0YXRlOk4uU2Vzc2lvblN0YXRlLk5vU3RhdGV9LEwmJigwLEYuaXNVcmwpKEwpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVi'@;
put 'dWcoTCl7dGhpcy5fZGVidWc9TH1pc1Nlc3Npb25WYWxpZChMKXtpZighTClyZXR1cm4hMTtjb25zdCBZPSgobmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShMLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4hKCFMLmF0dHJpYnV0ZXN8fFk+PUwuYXR0cmlidXRl'@;
put 'cy5zZXNzaW9uSW5hY3RpdmVUaW1lb3V0KX1yZW1vdmVTZXNzaW9uRnJvbVBvb2woTCl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihZPT5ZLmlkIT09TC5pZCl9cmVtb3ZlRXhwaXJlZFNlc3Npb25zKCl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihMPT50'@;
put 'aGlzLmlzU2Vzc2lvblZhbGlkKEwpKX10aHJvd0Vycm9ycyhMLFkpe3Rocm93IFk/KDAsSC5wcmVmaXhNZXNzYWdlKShuZXcgRXJyb3IoTC5qb2luKCIuICIpKSxZKTpuZXcgRXJyb3IoTC5tYXAoQj0+Qi5tZXNzYWdlP0IubWVzc2FnZTpCKS5qb2luKCIuICIpKX1nZXRTZXNzaW9uKEwpe3Jl'@;
put 'dHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPVtdO2xldCBCPSExO2NvbnN0IFc9KCk9PntZLmxlbmd0aCYmIUImJihCPSEwLHRoaXMudGhyb3dFcnJvcnMoWSkpfTtpZih0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLHRoaXMuc2Vzc2lvbnMubGVuZ3Ro'@;
put 'KXtjb25zdCBaPXRoaXMuc2Vzc2lvbnNbMF07cmV0dXJuIHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKFopLHRoaXMuY3JlYXRlU2Vzc2lvbnMoTCkuY2F0Y2goWD0+e1kucHVzaChYKX0pLHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCkuY2F0Y2goWD0+e1kucHVzaChYKX0pLFco'@;
put 'KSxafXt0aGlzLmNyZWF0ZVNlc3Npb25zKEwpLmNhdGNoKFg9PntZLnB1c2goWCl9KSx5aWVsZCB0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEwpLmNhdGNoKFg9PntZLnB1c2goWCl9KSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpO2NvbnN0IFo9dGhpcy5zZXNzaW9ucy5wb3Ao'@;
put 'KTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woWiksVygpLFp9fSl9Z2V0RXJyb3JNZXNzYWdlKEwsWSxCKXtyZXR1cm5gJHtCfSByZXF1ZXN0IHRvICR7WX0gZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJHtMLnJlc3BvbnNlLnN0YXR1c3x8InVua25vd24ifS4gYCtMLnJlc3Bv'@;
put 'bnNlLmRhdGEubWVzc2FnZXx8IiJ9Y2xlYXJTZXNzaW9uKEwsWSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEI9YC9jb21wdXRlL3Nlc3Npb25zLyR7TH1gO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKEIsWSkudGhlbigoKT0+'@;
put 'e3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoVz0+Vy5pZCE9PUwpfSkuY2F0Y2goVz0+e3Rocm93KDAsSC5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShXLEIsIkRFTEVURSIpLCJFcnJvciB3aGlsZSBkZWxldGluZyBzZXNzaW9uLiAiKX0pfSl9Y3JlYXRl'@;
put 'U2Vzc2lvbnMoTCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9W107dGhpcy5zZXNzaW9ucy5sZW5ndGh8fCh5aWVsZCgwLEYuYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksKCk9PnAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxk'@;
put 'IHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCkuY2F0Y2goQj0+e1kucHVzaChCKX0pfSkpKSxZLmxlbmd0aCYmdGhpcy50aHJvd0Vycm9ycyhZLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pfXdhaXRGb3JDdXJyZW50Q29udGV4dCgpe3JldHVybiBwKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoTD0+e2NvbnN0IFk9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLmN1cnJlbnRDb250ZXh0JiYodGhpcy5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKFkpLEwoKSl9LDEwMCl9KX0pfWNyZWF0ZUFuZFdhaXRGb3JT'@;
put 'ZXNzaW9uKEwpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmN1cnJlbnRDb250ZXh0fHwodGhpcy5zZXR0aW5nQ29udGV4dD95aWVsZCB0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpOnlpZWxkIHRoaXMuc2V0Q3VycmVudENvbnRleHQoTCkpO2NvbnN0'@;
put 'IFk9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt0aGlzLmN1cnJlbnRDb250ZXh0LmlkfS9zZXNzaW9uc2Ase3Jlc3VsdDpCLGV0YWc6V309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoWSx7fSxMKS5jYXRjaChYPT57dGhyb3coMCxILnByZWZpeE1lc3NhZ2Up'@;
put 'KHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFgsWSwiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pO0IuZXRhZz1XO2NvbnN0IFo9Qi5saW5rcy5maW5kKFg9PiJzdGF0ZSI9PT1YLnJlbCk7aWYoIVopdGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJu'@;
put 'IEIuc3RhdGVVcmw9Wi5ocmVmLHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oQixXLEwpLHRoaXMuc2Vzc2lvbnMucHVzaChCKSxCfSl9c2V0Q3VycmVudENvbnRleHQoTCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLmN1cnJlbnRDb250ZXh0KXtj'@;
put 'b25zdCBZPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYDt0aGlzLnNldHRpbmdDb250ZXh0PSEwO2NvbnN0e3Jlc3VsdDpCfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFksTCkuY2F0Y2goWD0+e3Rocm93KDAsSC5wcmVmaXhNZXNzYWdlKSh0'@;
put 'aGlzLmdldEVycm9yTWVzc2FnZShYLFksIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxpc3Qgb2YgY29udGV4dHMuICIpfSksWj0oQiYmQi5pdGVtcyYmQi5pdGVtcy5sZW5ndGg/Qi5pdGVtczpbXSkuZmluZChYPT5YLm5hbWU9PT10aGlzLmNvbnRleHROYW1lKTtpZighWil0aHJvdyBu'@;
put 'ZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke3RoaXMuY29udGV4dE5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2ZXIgJHt0aGlzLnNlcnZlclVybH0uYCk7dGhpcy5jdXJyZW50Q29udGV4dD1aLFByb21pc2UucmVzb2x2ZSgpfX0pfXdhaXRGb3JTZXNzaW9uKEwsWSxCKXt2YXIgVzty'@;
put 'ZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0e3N0YXRlOlp9PUw7Y29uc3R7c3RhdGVVcmw6WH09TCxRPUQubG9nZ2VyfHxfO2lmKFo9PT1OLlNlc3Npb25TdGF0ZS5QZW5kaW5nfHxaPT09Ti5TZXNzaW9uU3RhdGUuUnVubmluZ3x8Wj09PU4uU2Vzc2lvblN0YXRl'@;
put 'Lk5vU3RhdGUpe2lmKFgpe3RoaXMuZGVidWcmJiF0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZCYmKFEuaW5mbyhgUG9sbGluZzogJHt0aGlzLnNlcnZlclVybCtYfWApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSEwKTtjb25zdCBxPWAke3RoaXMuc2VydmVyVXJs'@;
put 'fSR7WH0/d2FpdD0zMGAse3Jlc3VsdDp0ZSxyZXNwb25zZVN0YXR1czppZX09eWllbGQgdGhpcy5nZXRTZXNzaW9uU3RhdGUocSxZLEIpLmNhdGNoKHNlPT57dGhyb3coMCxILnByZWZpeE1lc3NhZ2UpKHNlLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pO2lmKFo9dGUu'@;
put 'dHJpbSgpLHRoaXMuZGVidWcmJnRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZSE9PVomJihRLmluZm8oYEN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBpcyAnJHtafSdgKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGU9Wix0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0h'@;
put 'MSksIVope2NvbnN0IHNlPW5ldyB3Lk5vU2Vzc2lvblN0YXRlRXJyb3IoaWUsdGhpcy5zZXJ2ZXJVcmwrWCxudWxsPT09KFc9TC5saW5rcy5maW5kKGdlPT4ibG9nIj09PWdlLnJlbCkpfHx2b2lkIDA9PT1XP3ZvaWQgMDpXLmhyZWYpO3JldHVybiB0aGlzLmxvZ2dlZEVycm9ycy5maW5kKGdl'@;
put 'PT5nZS5zZXJ2ZXJSZXNwb25zZVN0YXR1cz09PXNlLnNlcnZlclJlc3BvbnNlU3RhdHVzKXx8KHRoaXMubG9nZ2VkRXJyb3JzLnB1c2goc2UpLFEuaW5mbyhzZS5tZXNzYWdlKSkseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihMLFksQil9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFp9'@;
put 'dGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3J9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFp9KX1nZXRTZXNzaW9uU3RhdGUoTCxZLEIpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChM'@;
put 'LEIsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6WX0pLnRoZW4oVz0+KHtyZXN1bHQ6Vy5yZXN1bHQscmVzcG9uc2VTdGF0dXM6Vy5zdGF0dXN9KSkuY2F0Y2goVz0+e3Rocm93KDAsSC5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShXLEwsIkdFVCIpLCJFcnJvciB3'@;
put 'aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUuICIpfSl9KX1nZXRWYXJpYWJsZShMLFksQil7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvc2Vzc2lvbnMvJHtMfS92YXJpYWJsZXMvJHtZfWA7cmV0dXJu'@;
put 'IHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoVyxCKS5jYXRjaChaPT57dGhyb3coMCxILnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFosVywiR0VUIiksYEVycm9yIHdoaWxlIGZldGNoaW5nIHNlc3Npb24gdmFyaWFibGUgJyR7WX0nLiBgKX0pfSl9fX0sMTYyMjpm'@;
put 'dW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLFcsWixYKXtyZXR1cm4gbmV3KFp8fChaPVByb21pc2UpKShmdW5jdGlvbihxLHRlKXtmdW5jdGlvbiBpZShfZSl7dHJ5e2dlKFgubmV4'@;
put 'dChfZSkpfWNhdGNoKFRlKXt0ZShUZSl9fWZ1bmN0aW9uIHNlKF9lKXt0cnl7Z2UoWC50aHJvdyhfZSkpfWNhdGNoKFRlKXt0ZShUZSl9fWZ1bmN0aW9uIGdlKF9lKXtfZS5kb25lP3EoX2UudmFsdWUpOmZ1bmN0aW9uIFEocSl7cmV0dXJuIHEgaW5zdGFuY2VvZiBaP3E6bmV3IFooZnVuY3Rp'@;
put 'b24odGUpe3RlKHEpfSl9KF9lLnZhbHVlKS50aGVuKGllLHNlKX1nZSgoWD1YLmFwcGx5KEIsV3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmV4ZWN1dGVPbkNvbXB1dGVBcGk9dm9pZCAwO2NvbnN0IE49Yig3NzU3'@;
put 'KSx3PWIoOTc3OCksRj1iKDM2MDcpLEg9Yig3MDQpLFI9Yig1OTI4KSxqPWIoNzE0KSxQPWIoMTM0MyksTD1iKDY0OTYpO0ouZXhlY3V0ZU9uQ29tcHV0ZUFwaT1mdW5jdGlvbiBZKEIsVyxaLFgsUSxxLHRlLGllPW51bGwsc2U9ITEsZ2U9ITEsX2U9ITAsVGUsU2U9ITEsemUpe3ZhciB6LGc7'@;
put 'cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB5PSh0ZXx8e30pLmFjY2Vzc190b2tlbjt0ZSYmKHthY2Nlc3NfdG9rZW46eX09eWllbGQoMCxILmdldFRva2VucykoQix0ZSkpO2NvbnN0IHg9RC5sb2dnZXJ8fF87dHJ5e2xldCBDO2NvbnN0IFQ9eWllbGQgVy5n'@;
put 'ZXRTZXNzaW9uKHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24uICIpfSk7aWYoQz1ULmlkLFNlKXtjb25zdHtyZXN1bHQ6eGV9PXlpZWxkIFcuZ2V0VmFyaWFibGUoQywiU1lTSk9CSUQiLHkpLmNhdGNoKHZlPT57'@;
put 'dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHZlLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gdmFyaWFibGUuICIpfSk7aWYoeGUmJnhlLnZhbHVlKXtjb25zdCB2ZT1aP1guc3BsaXQoWikuam9pbigiIikucmVwbGFjZSgvXlwvLywiIik6WDsoRC5sb2dnZXJ8fF8pLmluZm8oYFRyaWdn'@;
put 'ZXJpbmcgJyR7dmV9JyB3aXRoIFBJRCAke3hlLnZhbHVlfSBhdCAkeygwLE4udGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUykoKX1gKX19bGV0IFY7Vj0oMCxSLmlzUmVsYXRpdmVQYXRoKShYKT9gZXhlYy0ke1guaW5jbHVkZXMoIi8iKT9YLnNwbGl0KCIvIilbMV06WH1gOlguc3BsaXQoIi8i'@;
put 'KS5wb3AoKTtsZXQgVT17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLFIuaXNSZWxhdGl2ZVBhdGgpKFgpP1orIi8iK1g6WH07emUmJihVPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxVKSx6ZSkpLHNlJiYoVT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVSks'@;
put 'e19ERUJVRzoxMzF9KSk7bGV0IEU9W107aWUmJihKU09OLnN0cmluZ2lmeShpZSkuaW5jbHVkZXMoIjsiKT8oRT15aWVsZCgwLEwudXBsb2FkVGFibGVzKShCLGllLHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgdGFibGVz'@;
put 'LiAiKX0pLFUuX3dlYmluX2ZpbGVfY291bnQ9RS5sZW5ndGgsRS5mb3JFYWNoKCh4ZSx2ZSk9PntVW2Bfd2ViaW5fZmlsZXVyaSR7dmUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7eGUuZmlsZS5pZH1gLFVbYF93ZWJpbl9uYW1lJHt2ZSsxfWBdPXhlLnRhYmxlTmFtZX0pKTpVPU9iamVjdC5hc3Np'@;
put 'Z24oT2JqZWN0LmFzc2lnbih7fSxVKSwoMCxqLmZvcm1hdERhdGFGb3JSZXF1ZXN0KShpZSkpKTtjb25zdCBtPXtuYW1lOlZ8fCJEZWZhdWx0IEpvYiBOYW1lIixkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsY29kZTpRLHZhcmlhYmxlczpVLHZlcnNpb246Mn0se3Jlc3VsdDpBfT15'@;
put 'aWVsZCBCLnBvc3QoYC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vam9ic2AsbSx5KS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSk7aWYoIV9lKXJldHVybiBUO3NlJiYoeC5pbmZvKGBKb2IgaGFzIGJlZW4gc3VibWl0'@;
put 'dGVkIGZvciAnJHtWfScuYCkseC5pbmZvKGBZb3UgY2FuIG1vbml0b3IgdGhlIGpvYiBwcm9ncmVzcyBhdCAnJHtCLmdldEJhc2VVcmwoKX0ke0EubGlua3MuZmluZCh4ZT0+InN0YXRlIj09PXhlLnJlbCkuaHJlZn0nLmApKTtjb25zdCBuZT15aWVsZCgwLFAucG9sbEpvYlN0YXRlKShCLEEs'@;
put 'c2UsdGUsVGUse3Nlc3Npb246VCxzZXNzaW9uTWFuYWdlcjpXfSkuY2F0Y2goeGU9PnAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciB2ZSxxZTtjb25zdCBqZT1udWxsPT09KHZlPXhlPy5yZXNwb25zZSl8fHZvaWQgMD09PXZlP3ZvaWQgMDp2ZS5kYXRhLEFlPS9lcnI9WzAt'@;
put 'OV0qLC8uZXhlYyhqZSk7aWYoIjUxMTMiPT09KG51bGw9PT0ocWU9QWU/LlswXSl8fHZvaWQgMD09PXFlP3ZvaWQgMDpxZS5zbGljZSg0LC0xKSkpe2NvbnN0IEllPUEubGlua3MuZmluZChIZT0+InVwIj09PUhlLnJlbCkuaHJlZisiL2xvZyI7eGUubG9nPXlpZWxkKDAsUi5mZXRjaExvZ0J5'@;
put 'Q2h1bmtzKShCLHksSWUsMWU2KX10aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KSk7dGUmJih7YWNjZXNzX3Rva2VuOnl9PXlpZWxkKDAsSC5nZXRUb2tlbnMpKEIsdGUpKTtjb25zdHtyZXN1bHQ6bGV9PXlpZWxkIEIuZ2V0'@;
put 'KGAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2pvYnMvJHtBLmlkfWAseSkuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iLiAiKX0pO2xldCB3ZSxaZT0iIjtjb25zdCBRZT1sZS5saW5rcy5maW5kKHhlPT4ibG9nIj09PXhlLnJl'@;
put 'bCk7aWYoc2UmJlFlKXtjb25zdCB4ZT1gJHtRZS5ocmVmfS9jb250ZW50YCx2ZT1udWxsIT09KGc9bnVsbD09PSh6PWxlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT16P3ZvaWQgMDp6LmxpbmVDb3VudCkmJnZvaWQgMCE9PWc/ZzoxZTY7WmU9eWllbGQoMCxSLmZldGNoTG9nQnlDaHVua3Mp'@;
put 'KEIseSx4ZSx2ZSl9aWYobmU9PT1QLkpvYlN0YXRlLkZhaWxlZHx8bmU9PT1QLkpvYlN0YXRlLkVycm9yKXRocm93IG5ldyBGLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcihsZSxaZSk7aWYoIWdlKXJldHVybntqb2I6bGUsbG9nOlplfTtjb25zdCBhdD1gL2NvbXB1dGUvc2Vzc2lvbnMvJHtD'@;
put 'fS9maWxlcmVmcy9fd2Vib3V0L2NvbnRlbnRgO3JldHVybiB3ZT15aWVsZCBCLmdldChhdCx5LCJ0ZXh0L3BsYWluIikuY2F0Y2goeGU9PnAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciB2ZSxxZTtpZih4ZSBpbnN0YW5jZW9mIEYuTm90Rm91bmRFcnJvciYmUWUpe2NvbnN0'@;
put 'IGplPWAke1FlLmhyZWZ9L2NvbnRlbnRgLEFlPW51bGwhPT0ocWU9bnVsbD09PSh2ZT1sZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09dmU/dm9pZCAwOnZlLmxpbmVDb3VudCkmJnZvaWQgMCE9PXFlP3FlOjFlNjtyZXR1cm4gWmU9eWllbGQoMCxSLmZldGNoTG9nQnlDaHVua3MpKEIseSxq'@;
put 'ZSxBZSksUHJvbWlzZS5yZWplY3Qoe3N0YXR1czo1MDAsbG9nOlplfSl9cmV0dXJue3Jlc3VsdDpKU09OLnN0cmluZ2lmeSh4ZSl9fSkpLHlpZWxkIFcuY2xlYXJTZXNzaW9uKEMseSkuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIGNsZWFyaW5n'@;
put 'IHNlc3Npb24uICIpfSkse3Jlc3VsdDp3ZT8ucmVzdWx0LGxvZzpaZX19Y2F0Y2goQyl7aWYoNDA0PT09Qy5zdGF0dXMpcmV0dXJuIFkoQixXLFosWCxRLHEsdGUsaWUsc2UsITEsITApO3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgc2NyaXB0LiAi'@;
put 'KX19KX19LDc0NTg6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLEgsUixqKXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbihMLFkpe2Z1bmN0aW9uIEIoWCl7dHJ5e1ooai5uZXh0'@;
put 'KFgpKX1jYXRjaChRKXtZKFEpfX1mdW5jdGlvbiBXKFgpe3RyeXtaKGoudGhyb3coWCkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFooWCl7WC5kb25lP0woWC52YWx1ZSk6ZnVuY3Rpb24gUChMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIFI/TDpuZXcgUihmdW5jdGlvbihZKXtZKEwpfSl9KFgu'@;
put 'dmFsdWUpLnRoZW4oQixXKX1aKChqPWouYXBwbHkoRixIfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0RmlsZVN0cmVhbT12b2lkIDA7Y29uc3QgcD1iKDI5NzUpLE49Yig3NzU3KTtKLmdldEZpbGVTdHJlYW09'@;
put 'KEYsSCk9Pl8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7Y3JlYXRlV3JpdGVTdHJlYW06Un09YigyOTc1KSxqPUh8fEQuY3dkKCk7aWYoeWllbGQoMCxwLmlzRm9sZGVyKShqKSl7Y29uc3QgTD1gJHtGLm5hbWV8fCJqb2IifS0keygwLE4uZ2VuZXJhdGVUaW1lc3Rh'@;
put 'bXApKCl9LmxvZ2AsQj1iKDI1MjApLmpvaW4oSHx8RC5jd2QoKSxMKTtyZXR1cm4geWllbGQgUihCKX1yZXR1cm4geWllbGQgUihqKX0pfSwxMzQzOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1'@;
put 'bmN0aW9uKFcsWixYLFEpe3JldHVybiBuZXcoWHx8KFg9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLGllKXtmdW5jdGlvbiBzZShUZSl7dHJ5e19lKFEubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIGdlKFRlKXt0cnl7X2UoUS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9'@;
put 'fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3RlKFRlLnZhbHVlKTpmdW5jdGlvbiBxKHRlKXtyZXR1cm4gdGUgaW5zdGFuY2VvZiBYP3RlOm5ldyBYKGZ1bmN0aW9uKGllKXtpZSh0ZSl9KX0oVGUudmFsdWUpLnRoZW4oc2UsZ2UpfV9lKChRPVEuYXBwbHkoVyxafHxbXSkpLm5leHQoKSl9KX07'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZG9Qb2xsPUoucG9sbEpvYlN0YXRlPUouSm9iU3RhdGU9dm9pZCAwO2NvbnN0IE49Yig3MDQpLHc9YigxMzk1KSxGPWIoMTIzMCksSD1iKDU5MjgpO3ZhciBSLFc7KFc9Uj1KLkpvYlN0YXRlfHwoSi5K'@;
put 'b2JTdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixXLlJ1bm5pbmc9InJ1bm5pbmciLFcuUGVuZGluZz0icGVuZGluZyIsVy5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLFcuTm9TdGF0ZT0iIixXLkZhaWxlZD0iZmFpbGVkIixXLkVycm9yPSJlcnJvciIsSi5wb2xsSm9iU3RhdGU9'@;
put 'ZnVuY3Rpb24gaihXLFosWCxRLHEsdGUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBpZT1ELmxvZ2dlcnx8XyxzZT1xPy5zdHJlYW1Mb2d8fCExLGdlPVt7bWF4UG9sbENvdW50OjIwMCxwb2xsSW50ZXJ2YWw6MzAwfSx7bWF4UG9sbENvdW50OjMwMCxw'@;
put 'b2xsSW50ZXJ2YWw6M2UzfSx7bWF4UG9sbENvdW50OjUwMCxwb2xsSW50ZXJ2YWw6M2U0fSx7bWF4UG9sbENvdW50OjM0MDAscG9sbEludGVydmFsOjZlNH1dO2xldCBfZTtpZih2b2lkIDAhPT1xKXtfZT1bcV07bGV0e3BvbGxTdHJhdGVneTp4fT1xO3ZvaWQgMCE9PXg/KEIoeCkseD14LnNv'@;
put 'cnQoKEMsVCk9PkMubWF4UG9sbENvdW50LVQubWF4UG9sbENvdW50KSxfZT1bLi4uX2UsLi4ueF0pOl9lPVsuLi5fZSwuLi5nZV19ZWxzZSBfZT1nZTtsZXQgVGU9X2Uuc3BsaWNlKDAsMSlbMF07cT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVGUpLHF8fHt9KTtjb25zdCBTZT1a'@;
put 'LmxpbmtzLmZpbmQoeD0+InN0YXRlIj09PXgucmVsKTtpZighU2UpdGhyb3cgbmV3IEVycm9yKCJKb2Igc3RhdGUgbGluayB3YXMgbm90IGZvdW5kLiIpO2xldCBnLHplPXlpZWxkIFAoVyxaLFIuTm9TdGF0ZSxYLFEpLmNhdGNoKHg9PihpZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0'@;
put 'YXRlIGZyb20gJHtTZS5ocmVmfS4gU3RhcnRpbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCx4KSxSLlVuYXZhaWxhYmxlKSksej0wO2lmKHplPT09Ui5Db21wbGV0ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6ZSk7aWYoc2UmJigwLEguaXNOb2RlKSgpKXtjb25zdHtn'@;
put 'ZXRGaWxlU3RyZWFtOnh9PWIoNzQ1OCk7Zz15aWVsZCB4KFoscS5sb2dGb2xkZXJQYXRoKX1sZXQgeT15aWVsZCgwLEouZG9Qb2xsKShXLFosemUsWCx6LHEsUSxzZSxnLHRlKTtpZih6ZT15LnN0YXRlLHo9eS5wb2xsQ291bnQsIUwoemUpfHx6Pj1xLm1heFBvbGxDb3VudCYmIV9lLmxlbmd0'@;
put 'aClyZXR1cm4gemU7Zm9yKDtfZS5sZW5ndGgmJkwoemUpOylUZT1fZS5zcGxpY2UoMCwxKVswXSxxJiYoVGUubG9nRm9sZGVyUGF0aD1xLmxvZ0ZvbGRlclBhdGgpLHk9eWllbGQoMCxKLmRvUG9sbCkoVyxaLHplLFgseixUZSxRLHNlLGcsdGUpLHplPXkuc3RhdGUsej15LnBvbGxDb3VudDty'@;
put 'ZXR1cm4gZyYmZy5lbmQoKSx6ZX0pfTtjb25zdCBQPShXLFosWCxRLHEpPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHRlPVoubGlua3MuZmluZChpZT0+InN0YXRlIj09PWllLnJlbCk7aWYoTChYKSl7bGV0IGllO3EmJihpZT15aWVsZCgwLE4uZ2V0VG9rZW5z'@;
put 'KShXLHEpKTtjb25zdHtyZXN1bHQ6c2V9PXlpZWxkIFcuZ2V0KGAke3RlLmhyZWZ9P19hY3Rpb249d2FpdCZ3YWl0PTMwMGAsaWU/LmFjY2Vzc190b2tlbiwidGV4dC9wbGFpbiIse30sUSkuY2F0Y2goZ2U9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihaLmlkLGdlKX0pO3JldHVy'@;
put 'biBzZS50cmltKCl9cmV0dXJuIFh9KSxMPVc9Plc9PT1SLlJ1bm5pbmd8fFc9PT1SLk5vU3RhdGV8fFc9PT1SLlBlbmRpbmd8fFc9PT1SLlVuYXZhaWxhYmxlO0ouZG9Qb2xsPShXLFosWCxRLHEsdGUsaWUsc2UsZ2UsX2UpPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3Zh'@;
put 'ciBUZSxTZTtjb25zdHttYXhQb2xsQ291bnQ6emUscG9sbEludGVydmFsOnp9PXRlLGc9RC5sb2dnZXJ8fF8seT1aLmxpbmtzLmZpbmQoRT0+InN0YXRlIj09PUUucmVsKTtsZXQgQz0wLFQ9WCxWPVIuTm9TdGF0ZSxVPTA7Zm9yKDtMKFQpJiZxPD16ZTspe2lmKF9lJiZxJiZxJTEwPT0wJiZp'@;
put 'ZSl7Y29uc3R7c2Vzc2lvbjptLHNlc3Npb25NYW5hZ2VyOkF9PV9lLHtzdGF0ZVVybDphZSxldGFnOm5lLGlkOmxlfT1tLHthY2Nlc3NfdG9rZW46d2V9PWllLHtpZDpaZX09Wix7cmVzdWx0OlFlLHJlc3BvbnNlU3RhdHVzOmF0fT15aWVsZCBBLmdldFNlc3Npb25TdGF0ZShhZSxuZSx3ZSku'@;
put 'Y2F0Y2godmU9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihaZSx2ZSl9KSx4ZT12ZT0+W0YuU2Vzc2lvblN0YXRlLlJ1bm5pbmcsRi5TZXNzaW9uU3RhdGUuSWRsZV0uaW5jbHVkZXModmUpO2lmKCF4ZShRZSl8fDIwMCE9PWF0KXtBLmNsZWFyU2Vzc2lvbihsZSx3ZSk7Y29uc3Qg'@;
put 'dmU9eGUoUWUpP2BTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyBub3QgMjAwLiBTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyAke2F0fS5gOmBTZXNzaW9uIHN0YXRlIG9mIHRoZSBqb2IgaXMgbm90ICdydW5uaW5nJyBvciAnaWRsZScuIFNlc3Npb24gc3RhdGUgaXMgJyR7UWV9J2A7dGhy'@;
put 'b3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoWmUsbmV3IEVycm9yKHZlKSl9fVQ9eWllbGQgUChXLFosVCxRLGllKS5jYXRjaChtPT57aWYoQysrLHE+PXplfHxDPj01KXRocm93IG07cmV0dXJuIGcuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7eS5ocmVmfS4gUmVz'@;
put 'dW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCxtKSxSLlVuYXZhaWxhYmxlfSkscSsrO2NvbnN0IEU9Wi5saW5rcy5maW5kKG09PiJzZWxmIj09PW0ucmVsKS5ocmVmO2lmKHNlKXtjb25zdHtyZXN1bHQ6bX09eWllbGQgVy5nZXQoRSxpZT8uYWNjZXNzX3Rva2VuKSxB'@;
put 'PW51bGwhPT0oU2U9bnVsbD09PShUZT1tLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1UZT92b2lkIDA6VGUubGluZUNvdW50KSYmdm9pZCAwIT09U2U/U2U6MWU2LHtzYXZlTG9nOmFlfT0oMCxILmlzTm9kZSkoKT9iKDIwODApOntzYXZlTG9nOm51bGx9O2FlJiYoeWllbGQgYWUoWixXLFUs'@;
put 'QSxnZSxpZT8uYWNjZXNzX3Rva2VuKSksVSs9QX1RJiZWIT09VCYmKGcuaW5mbyhgUG9sbGluZzogJHtXLmdldEJhc2VVcmwoKStFfS9zdGF0ZWApLGcuaW5mbyhgQ3VycmVudCBqb2Igc3RhdGU6ICR7VH1gKSxWPVQpLFQhPT1SLlVuYXZhaWxhYmxlJiZDPjAmJihDPTApLFQhPT1SLkNvbXBs'@;
put 'ZXRlZCYmKHlpZWxkKDAsSC5kZWxheSkoeikpfXJldHVybntzdGF0ZTpULHBvbGxDb3VudDpxfX0pO2NvbnN0IEI9Vz0+e2NvbnN0IFo9KFgsUSk9Pnt0aHJvdyBuZXcgRXJyb3IoYFBvbGwgc3RyYXRlZ2llcyBhcmUgbm90IHZhbGlkLiR7WD9gICR7WH1gOiIifSR7UT9gIEludmFsaWQgcG9s'@;
put 'bCBzdHJhdGVneTogXG4ke0pTT04uc3RyaW5naWZ5KFEsbnVsbCwyKX1gOiIifWApfTtXLmZvckVhY2goKFgsUSk9Pntjb25zdHttYXhQb2xsQ291bnQ6cSxwb2xsSW50ZXJ2YWw6dGV9PVg7cTwxP1ooIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLFgpOjAhPT1R'@;
put 'P3E8PVdbUS0xXS5tYXhQb2xsQ291bnQmJlooIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLFgpOnRlPDEmJlooIidwb2xsSW50ZXJ2YWwnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLFgp'@;
put 'fSl9fSwyMDgwOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEgsUixqLFApe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKFksQil7ZnVuY3Rpb24gVyhRKXt0cnl7'@;
put 'WChQLm5leHQoUSkpfWNhdGNoKHEpe0IocSl9fWZ1bmN0aW9uIFooUSl7dHJ5e1goUC50aHJvdyhRKSl9Y2F0Y2gocSl7QihxKX19ZnVuY3Rpb24gWChRKXtRLmRvbmU/WShRLnZhbHVlKTpmdW5jdGlvbiBMKFkpe3JldHVybiBZIGluc3RhbmNlb2Ygaj9ZOm5ldyBqKGZ1bmN0aW9uKEIpe0Io'@;
put 'WSl9KX0oUS52YWx1ZSkudGhlbihXLFopfVgoKFA9UC5hcHBseShILFJ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5zYXZlTG9nPXZvaWQgMDtjb25zdCBOPWIoNTkyOCksdz1iKDYxMzEpO0ouc2F2ZUxvZz1mdW5j'@;
put 'dGlvbiBGKEgsUixqLFAsTCxZKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIVkpdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZvciBqb2IgJHtILmlkfSBjYW5ub3QgYmUgZmV0Y2hlZCB3aXRob3V0IGEgdmFsaWQgYWNjZXNzIHRva2VuLmApO2lmKCFMKXRocm93'@;
put 'IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7SC5pZH0gY2Fubm90IGJlIHdyaXR0ZW4gd2l0aG91dCBhIHZhbGlkIHdyaXRlIHN0cmVhbS5gKTtjb25zdCBCPUQubG9nZ2VyfHxfLFc9SC5saW5rcy5maW5kKFg9PiJsb2ciPT09WC5yZWwpO2lmKCFXKXRocm93IG5ldyBFcnJvcihgTG9nIFVS'@;
put 'TCBmb3Igam9iICR7SC5pZH0gd2FzIG5vdCBmb3VuZC5gKTtjb25zdCBaPXlpZWxkKDAsTi5mZXRjaExvZykoUixZLGAke1cuaHJlZn0vY29udGVudGAsaixQKTtCLmluZm8oYFdyaXRpbmcgbG9ncyB0byAke0wucGF0aH1gKSx5aWVsZCgwLHcud3JpdGVTdHJlYW0pKEwsWnx8IiIpfSl9fSw2'@;
put 'NDk2OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LEYsSCxSKXtyZXR1cm4gbmV3KEh8fChIPVByb21pc2UpKShmdW5jdGlvbihQLEwpe2Z1bmN0aW9uIFkoWil7dHJ5e1coUi5uZXh0KFopKX1jYXRjaChYKXtMKFgp'@;
put 'fX1mdW5jdGlvbiBCKFope3RyeXtXKFIudGhyb3coWikpfWNhdGNoKFgpe0woWCl9fWZ1bmN0aW9uIFcoWil7Wi5kb25lP1AoWi52YWx1ZSk6ZnVuY3Rpb24gaihQKXtyZXR1cm4gUCBpbnN0YW5jZW9mIEg/UDpuZXcgSChmdW5jdGlvbihMKXtMKFApfSl9KFoudmFsdWUpLnRoZW4oWSxCKX1X'@;
put 'KChSPVIuYXBwbHkodyxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoudXBsb2FkVGFibGVzPXZvaWQgMDtjb25zdCBfPWIoOTc3OCkscD1iKDI0MDIpO0oudXBsb2FkVGFibGVzPWZ1bmN0aW9uIE4odyxGLEgpe3Jl'@;
put 'dHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBSPVtdO2Zvcihjb25zdCBqIGluIEYpe2NvbnN0IFA9KDAscC5jb252ZXJ0VG9DU1YpKEYsaik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVApdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0'@;
put 'aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2NvbnN0IEw9eWllbGQgdy51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBsb2FkIixQLEgpLmNhdGNoKFk9Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoWSwiRXJyb3Igd2hpbGUgdXBsb2Fk'@;
put 'aW5nIGZpbGUuICIpfSk7Ui5wdXNoKHt0YWJsZU5hbWU6aixmaWxlOkwucmVzdWx0fSl9cmV0dXJuIFJ9KX19LDYxMzE6ZnVuY3Rpb24oY2UsSil7InVzZSBzdHJpY3QiO3ZhciBiPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihfLHAsTix3KXtyZXR1cm4gbmV3KE58fChOPVByb21p'@;
put 'c2UpKShmdW5jdGlvbihILFIpe2Z1bmN0aW9uIGooWSl7dHJ5e0wody5uZXh0KFkpKX1jYXRjaChCKXtSKEIpfX1mdW5jdGlvbiBQKFkpe3RyeXtMKHcudGhyb3coWSkpfWNhdGNoKEIpe1IoQil9fWZ1bmN0aW9uIEwoWSl7WS5kb25lP0goWS52YWx1ZSk6ZnVuY3Rpb24gRihIKXtyZXR1cm4g'@;
put 'SCBpbnN0YW5jZW9mIE4/SDpuZXcgTihmdW5jdGlvbihSKXtSKEgpfSl9KFkudmFsdWUpLnRoZW4oaixQKX1MKCh3PXcuYXBwbHkoXyxwfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoud3JpdGVTdHJlYW09dm9pZCAw'@;
put 'LEoud3JpdGVTdHJlYW09KF8scCk9PmIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChOLHcpPT57Xy53cml0ZShwKyJcbiIsRj0+e0Y/dyhGKTpOKCEwKX0pfSl9KX0sMjg1MTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD1i'@;
put 'KDUxMDgpLF89Yig0MTU1KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFosWCxRKXtyZXR1cm4gbmV3KFh8fChYPVByb21pc2UpKShmdW5jdGlvbih0ZSxpZSl7ZnVuY3Rpb24gc2UoVGUpe3RyeXtfZShRLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBn'@;
put 'ZShUZSl7dHJ5e19lKFEudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT90ZShUZS52YWx1ZSk6ZnVuY3Rpb24gcSh0ZSl7cmV0dXJuIHRlIGluc3RhbmNlb2YgWD90ZTpuZXcgWChmdW5jdGlvbihpZSl7aWUodGUpfSl9KFRlLnZhbHVlKS50aGVu'@;
put 'KHNlLGdlKX1fZSgoUT1RLmFwcGx5KFcsWnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkF1dGhNYW5hZ2VyPXZvaWQgMDtjb25zdCBOPWIoMzkwMCksdz1iKDEzOTUpLEY9Yig1OTI4KSxIPWIoMTE3MCksUj1iKDU0'@;
put 'MTgpLGo9Yig0NTgyKSxQPWIoNjU0NyksTD1iKDE1MjcpO0ouQXV0aE1hbmFnZXI9Y2xhc3MgWXtjb25zdHJ1Y3RvcihaLFgsUSxxKXt0aGlzLnNlcnZlclVybD1aLHRoaXMuc2VydmVyVHlwZT1YLHRoaXMucmVxdWVzdENsaWVudD1RLHRoaXMubG9naW5DYWxsYmFjaz1xLHRoaXMudXNlck5h'@;
put 'bWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9dGU9Pntzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIE4uU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiB0ZT8uaWQ7Y2FzZSBOLlNlcnZl'@;
put 'clR5cGUuU2FzOTpyZXR1cm4iIjtjYXNlIE4uU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gdGU/LnVzZXJuYW1lO2RlZmF1bHQ6cmV0dXJuIEQuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuZXh0cmFjdFVzZXJMb25n'@;
put 'TmFtZT10ZT0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIHRlPy5uYW1lO2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuKDAsSC5leHRyYWN0VXNlckxvbmdOYW1lU2FzOSkodGUpO2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc2pzOnJl'@;
put 'dHVybiB0ZT8uZGlzcGxheU5hbWU7ZGVmYXVsdDpyZXR1cm4gRC5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5zZXRMb2dpblVybD10ZT0+e2xldCBpZT10ZVsxXS5yZXBsYWNlKC9cPy4qLywiIik7aWYoIi8iPT09'@;
put 'aWVbMF0pe2llPWllLnN1YnN0cigxKTtjb25zdCBzZT10aGlzLnNlcnZlclVybD9gJHt0aGlzLnNlcnZlclVybH0vJHtpZX1gOmAke2llfWA7dGhpcy5sb2dpblVybD10aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzVml5YT9zZTpzZS5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4u'@;
put 'ZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09Ti5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzVml5'@;
put 'YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0Iix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD10aGlzLnNlcnZlclVybCt0aGlzLnJlZGlyZWN0ZWRMb2dpblVybH1yZWRpcmVjdGVkTG9nSW4oe29uTG9nZ2VkT3V0Olp9KXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24qKCl7Y29uc3R7aXNMb2dnZWRJbjpYLHVzZXJOYW1lOlEsdXNlckxvbmdOYW1lOnF9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2lmKFgpcmV0dXJuKF8ubG9nZ2VyfHxEKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJl'@;
put 'YWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOlEsdXNlckxvbmdOYW1lOnF9O2NvbnN0IHRlPXlpZWxkKDAsUi5vcGVuV2ViUGFnZSkodGhpcy5yZWRpcmVjdGVkTG9naW5VcmwsIlNBU0xvZ29uIix7d2lkdGg6NTAwLGhlaWdo'@;
put 'dDo2MDB9LFopO2lmKCF0ZSlyZXR1cm57aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9O2NvbnN0e2lzTG9nZ2VkSW46aWV9PXRoaXMuc2VydmVyVHlwZT09PU4uU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsUC52ZXJpZnlTYXNWaXlhTG9naW4pKHRlKTp5aWVs'@;
put 'ZCgwLGoudmVyaWZ5U2FzOUxvZ2luKSh0ZSk7aWYodGUuY2xvc2UoKSxpZSl7dGhpcy5zZXJ2ZXJUeXBlPT09Ti5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCkpO2NvbnN0e3VzZXJOYW1lOnNlLHVzZXJMb25nTmFtZTpnZX09eWllbGQgdGhp'@;
put 'cy5mZXRjaFVzZXJOYW1lKCk7cmV0dXJuIHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnNlLHVzZXJMb25nTmFtZTpnZX19cmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifX0pfWxvZ0luKFosWCl7cmV0dXJu'@;
put 'IHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFE9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpaLHBhc3N3b3JkOlh9O3RoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiI7bGV0e2lzTG9nZ2VkSW46cSxsb2dpbkZvcm06dGUsdXNlckxvbmdOYW1l'@;
put 'OmllfT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO2lmKHEpcmV0dXJuKF8ubG9nZ2VyfHxEKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9US51'@;
put 'c2VybmFtZSx0aGlzLnVzZXJMb25nTmFtZT1pZSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX07bGV0IHNlPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVzdCh0ZSxRKSxnZT0oMCxMLmlzTG9nSW5TdWNjZXNzSGVh'@;
put 'ZGVyUHJlc2VudCkodGhpcy5zZXJ2ZXJUeXBlLHNlKTtpZighZ2Upe2lmKEIoc2UpKXtjb25zdCBUZT15aWVsZCB0aGlzLmdldExvZ2luRm9ybShzZSk7c2U9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KFRlLFEpfWNvbnN0IF9lPXlpZWxkIHRoaXMuY2hlY2tTZXNzaW9uKCk7Z2U9X2Uu'@;
put 'aXNMb2dnZWRJbix0aGlzLnVzZXJMb25nTmFtZT1fZS51c2VyTG9uZ05hbWV9cmV0dXJuIGdlJiYodGhpcy5zZXJ2ZXJUeXBlPT09Ti5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCkpLHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5h'@;
put 'bWU9US51c2VybmFtZSkse2lzTG9nZ2VkSW46Z2UsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9fSl9cGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWj1gJHt0'@;
put 'aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2tgO3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9TQVNMb2dvbi9sb2dpbj9zZXJ2aWNlPSR7Wn1gLHZvaWQgMCkuY2F0Y2goWD0+e2lmKCEoWCBpbnN0YW5jZW9mIHcuTm90Rm91'@;
put 'bmRFcnJvcikpdGhyb3cgWH0pfSl9c2VuZExvZ2luUmVxdWVzdChaLFgpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzanMpe2NvbnN0e3VzZXJuYW1lOnRlLHBhc3N3b3JkOmllfT1YLHtyZXN1bHQ6'@;
put 'c2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOnRlLHBhc3N3b3JkOmllfSx2b2lkIDApO3JldHVybiBzZX1mb3IoY29uc3QgdGUgaW4gWilYW3RlXT1aW3RlXTtjb25zdCBRPSgwLEYuc2VyaWFsaXplKShYKSx7cmVzdWx0OnF9PXlpZWxk'@;
put 'IHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwsUSx2b2lkIDAsInRleHQvcGxhaW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9KTtyZXR1cm4gcX0pfWNoZWNrU2Vzc2lvbigpe3JldHVybiBwKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOlosdXNlck5hbWU6WCx1c2VyTG9uZ05hbWU6UX09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7bGV0IHE9bnVsbDtyZXR1cm4gWnx8KHlpZWxkIHRoaXMubG9nT3V0KCkscT15aWVsZCB0aGlzLmdldE5ld0xv'@;
put 'Z2luRm9ybSgpKSxQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46Wix1c2VyTmFtZTpYLHVzZXJMb25nTmFtZTpRLGxvZ2luRm9ybTpxfSl9KX1nZXROZXdMb2dpbkZvcm0oKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09Ti5T'@;
put 'ZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4oKHtyZXN1bHQ6WH0pPT57dmFyIFE7Y29uc3QgcT1udWxsPT09KFE9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1l'@;
put 'U2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKFgpKXx8dm9pZCAwPT09UT92b2lkIDA6UVsxXTtxJiYoZG9jdW1lbnQuY29va2llPXEpfSk7Y29uc3R7cmVzdWx0Olp9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dpblVybC5yZXBsYWNlKCIvU0FT'@;
put 'TG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKSx2b2lkIDAsInRleHQvcGxhaW4iKTtyZXR1cm4geWllbGQgdGhpcy5nZXRMb2dpbkZvcm0oWil9KX1mZXRjaFVzZXJOYW1lKCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFo9dGhpcy5zZXJ2'@;
put 'ZXJUeXBlPT09Ti5TZXJ2ZXJUeXBlLlNhc1ZpeWE/YCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyYDp0aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzOT9gJHt0aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzc2A6YCR7dGhpcy5zZXJ2'@;
put 'ZXJVcmx9L1NBU2pzQXBpL3Nlc3Npb25gLHtyZXN1bHQ6WH09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChaLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKHE9Pih7cmVzdWx0OiJhdXRoRXJyIn0pKSxRPSJhdXRoRXJyIiE9PVg7cmV0dXJuIFE/e2lzTG9nZ2VkSW46USx1c2VyTmFt'@;
put 'ZTp0aGlzLmV4dHJhY3RVc2VyTmFtZShYKSx1c2VyTG9uZ05hbWU6dGhpcy5leHRyYWN0VXNlckxvbmdOYW1lKFgpfTooeWllbGQgdGhpcy5sb2dPdXQoKSx7aXNMb2dnZWRJbjpRLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn0pfSl9Z2V0TG9naW5Gb3JtKFope2NvbnN0IFE9Lzxmb3Jt'@;
put 'LithY3Rpb249IiguKihMb2dvbnxsb2dpbilbXiJdKikuKj4vLmV4ZWMoWikscT17fTtpZihRJiZRLmxlbmd0aCl7dGhpcy5zZXRMb2dpblVybChRKTtjb25zdCB0ZT0oWj1aLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTt0'@;
put 'ZSYmdGUuZm9yRWFjaChpZT0+e2NvbnN0IHNlPWllLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikvKTtzZSYmc2UubGVuZ3RoJiYocVtzZVsxXV09c2VbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKHEpLmxlbmd0aD9xOm51bGx9bG9nT3V0KCl7cmV0dXJuIHAodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCksdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oKCk9PiEwKX0pfX07Y29uc3QgQj1XPT4vQW4gZXJyb3Igb2NjdXJyZWQgd2hp'@;
put 'bGUgdGhlIHN5c3RlbSB3YXMgdmVyaWZ5aW5nIHlvdXIgY3JlZGVudGlhbHMuIFBsZWFzZSBlbnRlciB5b3VyIGNyZWRlbnRpYWxzIGFnYWluLi9nbS50ZXN0KFcpfSw1NzpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24o'@;
put 'RixILFIsail7cmV0dXJuIG5ldyhSfHwoUj1Qcm9taXNlKSkoZnVuY3Rpb24oTCxZKXtmdW5jdGlvbiBCKFgpe3RyeXtaKGoubmV4dChYKSl9Y2F0Y2goUSl7WShRKX19ZnVuY3Rpb24gVyhYKXt0cnl7WihqLnRocm93KFgpKX1jYXRjaChRKXtZKFEpfX1mdW5jdGlvbiBaKFgpe1guZG9uZT9M'@;
put 'KFgudmFsdWUpOmZ1bmN0aW9uIFAoTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBSP0w6bmV3IFIoZnVuY3Rpb24oWSl7WShMKX0pfShYLnZhbHVlKS50aGVuKEIsVyl9Wigoaj1qLmFwcGx5KEYsSHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxKLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9dm9pZCAwO2NvbnN0IF89Yig5Nzc4KSxwPWIoOTAxNyksTj1iKDM5MDApO0ouZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz1mdW5jdGlvbiB3KEYsSCxSKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29u'@;
put 'c3Qgaj0iL1NBU2pzQXBpL2F1dGgvdG9rZW4iLFA9e2NsaWVudElkOkgsY29kZTpSfTtyZXR1cm4geWllbGQgRi5wb3N0KGosUCx2b2lkIDApLnRoZW4oTD0+e2NvbnN0IFk9TC5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpZLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46WS5yZWZyZXNo'@;
put 'VG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAsXy5wcmVmaXhNZXNzYWdlKShMLCgwLHAuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclNhc2pzIixOLlNlcnZlclR5cGUuU2FzanMsaixQLEgpKX0pfSl9fSwzNTY5'@;
put 'OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFIsaixQLEwpe3JldHVybiBuZXcoUHx8KFA9UHJvbWlzZSkpKGZ1bmN0aW9uKEIsVyl7ZnVuY3Rpb24gWihxKXt0cnl7UShMLm5leHQocSkp'@;
put 'fWNhdGNoKHRlKXtXKHRlKX19ZnVuY3Rpb24gWChxKXt0cnl7UShMLnRocm93KHEpKX1jYXRjaCh0ZSl7Vyh0ZSl9fWZ1bmN0aW9uIFEocSl7cS5kb25lP0IocS52YWx1ZSk6ZnVuY3Rpb24gWShCKXtyZXR1cm4gQiBpbnN0YW5jZW9mIFA/QjpuZXcgUChmdW5jdGlvbihXKXtXKEIpfSl9KHEu'@;
put 'dmFsdWUpLnRoZW4oWixYKX1RKChMPUwuYXBwbHkoUixqfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPXZvaWQgMDtjb25zdCBwPWIoMzkwMCksTj1iKDk3NzgpLHc9YigxMzk1'@;
put 'KSxGPWIoOTAxNyk7Si5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24gSChSLGosUCxMKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFk7WT10eXBlb2YgRD4idSI/YnRvYShqKyI6IitQKTpELmZyb20oaisiOiIrUCkudG9TdHJpbmcoImJhc2U2NCIp'@;
put 'O2NvbnN0IEI9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsVz17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitZLEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LFo9bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOkx9KSxYPW5ldyBVUkxTZWFy'@;
put 'Y2hQYXJhbXMoWik7cmV0dXJuIHlpZWxkIFIucG9zdChCLFgsdm9pZCAwLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLFcpLnRoZW4ocT0+cS5yZXN1bHQpLmNhdGNoKHE9Pnt0aHJvdyBxIGluc3RhbmNlb2Ygdy5DZXJ0aWZpY2F0ZUVycm9yP3E6KDAsTi5wcmVmaXhNZXNz'@;
put 'YWdlKShxLCgwLEYuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLHAuU2VydmVyVHlwZS5TYXNWaXlhLEIsWixXLGosUCkpfSl9KX19LDkwMTc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1KLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDtjb25zdCBEPWIoMzkwMCkscD1GPT5gUmVzcG9uc2UgZnJvbSAkeyhGPT5GPT09RC5TZXJ2'@;
put 'ZXJUeXBlLlNhc1ZpeWE/IlZpeWEiOiJTYXNqcyIpKEYpfSBpcyBiZWxvdy5gO0ouZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9KEYsSCxSLGosUCxMLFksQik9Pntjb25zdCBXPVg9PkpTT04uc3RyaW5naWZ5KFgsbnVsbCwyKSxaPVtgRXJyb3Igd2hpbGUgJHtGfSBmcm9tICR7an1gLGBU'@;
put 'aHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICR7SH0gZnVuY3Rpb24uYF07cmV0dXJuIFAmJihaLnB1c2goIlBheWxvYWQ6IiksWi5wdXNoKFcoUCkpKSxMJiYoWi5wdXNoKCJIZWFkZXJzOiIpLFoucHVzaChXKEwpKSksWSYmWi5wdXNoKGBDbGllbnRJZDogJHtZfWApLEImJloucHVzaChg'@;
put 'Q2xpZW50U2VjcmV0OiAke0J9YCksWi5wdXNoKCIiKSxaLnB1c2goYCR7cChSKX1gKSxaLnB1c2goIiIpLFouam9pbigiXG4iKX0sSi5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPShGLEgpPT5GLnNwbGl0KGAke3AoSCl9XG5gKS5wb3AoKX0sNzA0OmZ1bmN0aW9uKGNlLEos'@;
put 'Yil7InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosUCxMLFkpe3JldHVybiBuZXcoTHx8KEw9UHJvbWlzZSkpKGZ1bmN0aW9uKFcsWil7ZnVuY3Rpb24gWCh0ZSl7dHJ5e3EoWS5uZXh0KHRlKSl9Y2F0Y2goaWUp'@;
put 'e1ooaWUpfX1mdW5jdGlvbiBRKHRlKXt0cnl7cShZLnRocm93KHRlKSl9Y2F0Y2goaWUpe1ooaWUpfX1mdW5jdGlvbiBxKHRlKXt0ZS5kb25lP1codGUudmFsdWUpOmZ1bmN0aW9uIEIoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBMP1c6bmV3IEwoZnVuY3Rpb24oWil7WihXKX0pfSh0ZS52YWx1'@;
put 'ZSkudGhlbihYLFEpfXEoKFk9WS5hcHBseShqLFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZXRUb2tlbnM9dm9pZCAwO2NvbnN0IE49Yig2Nzk5KSx3PWIoMzkwMCksRj1iKDM2NiksSD1iKDI0OSk7Si5nZXRU'@;
put 'b2tlbnM9ZnVuY3Rpb24gUihqLFAsTD13LlNlcnZlclR5cGUuU2FzVml5YSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9RC5sb2dnZXJ8fF87bGV0e2FjY2Vzc190b2tlbjpCLHJlZnJlc2hfdG9rZW46VyxjbGllbnQ6WixzZWNyZXQ6WH09UDtpZigo'@;
put 'MCxOLmlzQWNjZXNzVG9rZW5FeHBpcmluZykoQil8fCgwLE4uaXNSZWZyZXNoVG9rZW5FeHBpcmluZykoVykpe2lmKCgwLE4uaGFzVG9rZW5FeHBpcmVkKShXKSl7Y29uc3QgcT0iVW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGly'@;
put 'ZWQuIjt0aHJvdyBZLmVycm9yKHEpLG5ldyBFcnJvcihxKX1ZLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZyZXNoIHRva2Vucy4iKSwoe2FjY2Vzc190b2tlbjpCLHJlZnJlc2hfdG9rZW46V309TD09PXcuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsRi5yZWZyZXNoVG9rZW5z'@;
put 'Rm9yVml5YSkoaixaLFgsVyk6eWllbGQoMCxILnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoaixXKSl9cmV0dXJue2FjY2Vzc190b2tlbjpCLHJlZnJlc2hfdG9rZW46VyxjbGllbnQ6WixzZWNyZXQ6WH19KX19LDE1Mjc6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYm'@;
put 'dGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpO3ZhciBIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTix3KTsoIUh8fCgiZ2V0ImluIEg/IU4uX19lc01vZHVsZTpILndyaXRhYmxlfHxILmNvbmZp'@;
put 'Z3VyYWJsZSkpJiYoSD17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxGLEgpfTpmdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxwW0ZdPU5bd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxm'@;
put 'dW5jdGlvbihwLE4pe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTix3KSYmRChOLHAsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoMjg1MSksSiksXyhiKDkw'@;
put 'OTcpLEopLF8oYig5MTY2KSxKKSxfKGIoNjY0MyksSil9LDkwOTc6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPXZvaWQgMCxKLmlzQXV0aG9yaXplRm9ybVJlcXVp'@;
put 'cmVkPUQ9Pi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblwvb2F1dGhcL2F1dGhvcml6ZVteIl0qKS4qPi9nbS50ZXN0KEQpfSw5MTY2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5pc0xvZ0luUmVxdWlyZWQ9'@;
put 'dm9pZCAwLEouaXNMb2dJblJlcXVpcmVkPUQ9Pi88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb24pfChsb2dpbilbXiJdKikuKj4vZ20udGVzdChEKX0sNjY0MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5p'@;
put 'c0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQ9Si5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj1KLmxvZ2luU3VjY2Vzc0hlYWRlcnM9Si5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleT12b2lkIDA7Y29uc3QgRD1iKDM5MDApLF89Yig1OTI4KSxwPSJZb3UgaGF2ZSBzaWduZWQgaW4uIjtK'@;
put 'LmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PSJkZWZhdWx0IixKLmxvZ2luU3VjY2Vzc0hlYWRlcnM9e2VzOiJZYSBzZSBoYSBpbmljaWFkbyBsYSBzZXNpXHhmM24uIix0aDoiXHUwZTA0XHUwZTM4XHUwZTEzXHUwZTI1XHUwZTA3XHUwZTBhXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTQwXHUwZTAy'@;
put 'XHUwZTQ5XHUwZTMyXHUwZTQzXHUwZTBhXHUwZTQ5XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IixqYToiXHUzMGI1XHUzMGE0XHUzMGYzXHUzMGE0XHUzMGYzXHUzMDU3XHUzMDdlXHUzMDU3XHUzMDVmXHUzMDAyIixuYjoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixzbDoiUHJpamF2aWxp'@;
put 'IHN0ZSBzZS4iLGFyOiJcdTA2NDRcdTA2NDJcdTA2MmYgXHUwNjQyXHUwNjQ1XHUwNjJhICIsc2s6IlByaWhsXHhlMXNpbGkgc3RlIHNhLiIsemhfSEs6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsemhfQ046Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NWY1NVx1MzAwMiIsaXQ6Ikwn'@;
put 'dXRlbnRlIHNpIFx4ZTggY29ubmVzc28uIixzdjoiRHUgaGFyIGxvZ2dhdCBpbi4iLGhlOiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixubDoiVSBoZWJ0IHppY2ggYWFuZ2VtZWxkLiIscGw6Ilpvc3RhXHUwMTQyZVx1MDE1YiB6YWxvZ293YW55LiIsa286Ilx1Yjg1Y1x1YWRm'@;
put 'OFx1Yzc3OFx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4iLHpoX1RXOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHRyOiJPdHVydW0gYVx4ZTd0XHUwMTMxblx1MDEzMXouIixpdzoiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsZnI6IlZvdXMgXHhlYXRlcyBjb25u'@;
put 'ZWN0XHhlOS4iLHVrOiJcdTA0MTJcdTA0MzggXHUwNDMyXHUwNDMyXHUwNDU2XHUwNDM5XHUwNDQ4XHUwNDNiXHUwNDM4IFx1MDQzMiBcdTA0M2VcdTA0MzFcdTA0M2JcdTA0NTZcdTA0M2FcdTA0M2VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDM3XHUwNDMwXHUwNDNmXHUwNDM4XHUwNDQxLiIs'@;
put 'cHRfQlI6IlZvY1x4ZWEgc2UgY29uZWN0b3UuIixubzoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixjczoiSnN0ZSBwXHUwMTU5aWhsXHhlMVx1MDE2MWVuaS4iLGZpOiJPbGV0IGtpcmphdXR1bnV0IHNpc1x4ZTRceGU0bi4iLHJ1OiJcdTA0MTJcdTA0NGIgXHUwNDMyXHUwNDRiXHUwNDNm'@;
put 'XHUwNDNlXHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNiXHUwNDM4IFx1MDQzMlx1MDQ0NVx1MDQzZVx1MDQzNCBcdTA0MzIgXHUwNDQxXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDQzLiIsZWw6Ilx1MDM4OFx1MDNjN1x1MDNiNVx1MDNjNFx1MDNiNSBcdTAzYzNcdTAzYzVcdTAz'@;
put 'YmRcdTAzYjRcdTAzYjVcdTAzYjhcdTAzYjVcdTAzYWYuIixocjoiUHJpamF2aWxpIHN0ZSBzZS4iLGRhOiJEdSBlciBsb2dnZXQgcFx4ZTUuIixkZToiU2llIHNpbmQgamV0enQgYW5nZW1lbGRldC4iLHNoOiJQcmlqYXZsamVuaSBzdGUuIixwdDoiSW5pY2lvdSBzZXNzXHhlM28uIixodToi'@;
put 'QmVqZWxlbnRrZXpldHQuIixzcjoiUHJpamF2bGplbmkgc3RlLiIsZW46cCxbSi5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV06cH0sSi5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj0oKT0+e2xldCBGPUoubG9naW5TdWNjZXNzSGVhZGVyc1tKLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5'@;
put 'XTtjb25zdCBIPSgwLF8uZ2V0VXNlckxhbmd1YWdlKSgpO2lmKEgpe2xldCBSPUoubG9naW5TdWNjZXNzSGVhZGVyc1tIXTtpZihSKUY9UjtlbHNle2NvbnN0IFA9T2JqZWN0LmtleXMoSi5sb2dpblN1Y2Nlc3NIZWFkZXJzKS5maW5kKEw9Pm5ldyBSZWdFeHAoTCwiaSIpLnRlc3QoSCkpO1Am'@;
put 'JihGPUoubG9naW5TdWNjZXNzSGVhZGVyc1tQXSl9fXJldHVybiBGfSxKLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD0oRixIKT0+Rj09PUQuU2VydmVyVHlwZS5TYXNqcz9IPy5sb2dnZWRJbjpuZXcgUmVnRXhwKCgwLEouZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCksImdt'@;
put 'IikudGVzdChIKX0sNTQxODpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxGLEgsUil7cmV0dXJuIG5ldyhIfHwoSD1Qcm9taXNlKSkoZnVuY3Rpb24oUCxMKXtmdW5jdGlvbiBZKFope3RyeXtXKFIubmV4dChaKSl9'@;
put 'Y2F0Y2goWCl7TChYKX19ZnVuY3Rpb24gQihaKXt0cnl7VyhSLnRocm93KFopKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBXKFope1ouZG9uZT9QKFoudmFsdWUpOmZ1bmN0aW9uIGooUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiBIP1A6bmV3IEgoZnVuY3Rpb24oTCl7TChQKX0pfShaLnZhbHVl'@;
put 'KS50aGVuKFksQil9VygoUj1SLmFwcGx5KHcsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLm9wZW5XZWJQYWdlPXZvaWQgMDtjb25zdCBfPWIoMTIxMCkscD17d2lkdGg6NTAwLGhlaWdodDo2MDB9O0oub3Blbldl'@;
put 'YlBhZ2U9ZnVuY3Rpb24gTih3LEY9IiIsSD1wLFIpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHt3aWR0aDpqLGhlaWdodDpQfT1ILEw9c2NyZWVuLndpZHRoLzItai8yLFk9c2NyZWVuLmhlaWdodC8yLVAvMjtyZXR1cm4gd2luZG93Lm9wZW4odyxGLGB0'@;
put 'b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHtqfSxoZWlnaHQ9JHtQfSxsZWZ0PSR7TH0sdG9wPSR7WX1gKXx8KCh5aWVsZChSPz9fLm9wZW5Mb2dpblByb21wdCkoKSk/d2luZG93Lm9wZW4odyxGLGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHtq'@;
put 'fSxoZWlnaHQ9JHtQfSxsZWZ0PSR7TH0sdG9wPSR7WX1gKTpudWxsKX0pfX0sMjQ5OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLEgsUixqKXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbihMLFkp'@;
put 'e2Z1bmN0aW9uIEIoWCl7dHJ5e1ooai5uZXh0KFgpKX1jYXRjaChRKXtZKFEpfX1mdW5jdGlvbiBXKFgpe3RyeXtaKGoudGhyb3coWCkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFooWCl7WC5kb25lP0woWC52YWx1ZSk6ZnVuY3Rpb24gUChMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIFI/TDpu'@;
put 'ZXcgUihmdW5jdGlvbihZKXtZKEwpfSl9KFgudmFsdWUpLnRoZW4oQixXKX1aKChqPWouYXBwbHkoRixIfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoucmVmcmVzaFRva2Vuc0ZvclNhc2pzPXZvaWQgMDtjb25zdCBf'@;
put 'PWIoOTc3OCkscD1iKDkwMTcpLE49YigzOTAwKTtKLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz1mdW5jdGlvbiB3KEYsSCl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFI9Ii9TQVNqc0FwaS9hdXRoL3JlZnJlc2giLGo9e0F1dGhvcml6YXRpb246IkJlYXJl'@;
put 'ciAiK0h9O3JldHVybiB5aWVsZCBGLnBvc3QoUix2b2lkIDAsdm9pZCAwLHZvaWQgMCxqKS50aGVuKEw9Pntjb25zdCBZPUwucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46WS5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOlkucmVmcmVzaFRva2VufX0pLmNhdGNoKEw9Pnt0aHJvdygwLF8u'@;
put 'cHJlZml4TWVzc2FnZSkoTCwoMCxwLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yU2FzanMiLE4uU2VydmVyVHlwZS5TYXNqcyxSKSl9KX0pfX0sMzY2OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIo'@;
put 'ODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsTCxZLEIpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKFosWCl7ZnVuY3Rpb24gUShpZSl7dHJ5e3RlKEIubmV4dChpZSkpfWNhdGNoKHNlKXtYKHNlKX19ZnVuY3Rpb24gcShpZSl7dHJ5'@;
put 'e3RlKEIudGhyb3coaWUpKX1jYXRjaChzZSl7WChzZSl9fWZ1bmN0aW9uIHRlKGllKXtpZS5kb25lP1ooaWUudmFsdWUpOmZ1bmN0aW9uIFcoWil7cmV0dXJuIFogaW5zdGFuY2VvZiBZP1o6bmV3IFkoZnVuY3Rpb24oWCl7WChaKX0pfShpZS52YWx1ZSkudGhlbihRLHEpfXRlKChCPUIuYXBw'@;
put 'bHkoUCxMfHxbXSkpLm5leHQoKSl9KX0scD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oUCl7cmV0dXJuIFAmJlAuX19lc01vZHVsZT9QOntkZWZhdWx0OlB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5yZWZyZXNoVG9r'@;
put 'ZW5zRm9yVml5YT12b2lkIDA7Y29uc3QgTj1iKDM5MDApLHc9Yig5Nzc4KSxGPXAoYig2MjMwKSksSD1iKDU5MjgpLFI9Yig5MDE3KTtKLnJlZnJlc2hUb2tlbnNGb3JWaXlhPWZ1bmN0aW9uIGooUCxMLFksQil7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCEo'@;
put 'MCxILmlzTm9kZSkoKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAncmVmcmVzaFRva2Vuc0ZvclZpeWEnIGNhbiBvbmx5IGJlIHVzZWQgYnkgTm9kZS4iKTtjb25zdCBXPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLFg9e0F1dGhvcml6YXRpb246IkJhc2ljICIrKHR5cGVvZiBEPiJ1Ij9idG9h'@;
put 'KEwrIjoiK1kpOkQuZnJvbShMKyI6IitZKS50b1N0cmluZygiYmFzZTY0IikpfSxRPW5ldyBGLmRlZmF1bHQ7cmV0dXJuIFEuYXBwZW5kKCJncmFudF90eXBlIiwicmVmcmVzaF90b2tlbiIpLFEuYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixCKSx5aWVsZCBQLnBvc3QoVyxRLHZvaWQgMCwibXVs'@;
put 'dGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitRLl9ib3VuZGFyeSxYKS50aGVuKHRlPT50ZS5yZXN1bHQpLmNhdGNoKHRlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHRlLCgwLFIuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hU'@;
put 'b2tlbnNGb3JWaXlhIixOLlNlcnZlclR5cGUuU2FzVml5YSxXLFEsWCxMLFkpKX0pfSl9fSw0NTgyOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LEYsSCxSKXtyZXR1cm4gbmV3KEh8fChIPVByb21pc2UpKShmdW5j'@;
put 'dGlvbihQLEwpe2Z1bmN0aW9uIFkoWil7dHJ5e1coUi5uZXh0KFopKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBCKFope3RyeXtXKFIudGhyb3coWikpfWNhdGNoKFgpe0woWCl9fWZ1bmN0aW9uIFcoWil7Wi5kb25lP1AoWi52YWx1ZSk6ZnVuY3Rpb24gaihQKXtyZXR1cm4gUCBpbnN0YW5j'@;
put 'ZW9mIEg/UDpuZXcgSChmdW5jdGlvbihMKXtMKFApfSl9KFoudmFsdWUpLnRoZW4oWSxCKX1XKChSPVIuYXBwbHkodyxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoudmVyaWZ5U2FzOUxvZ2luPXZvaWQgMDtjb25z'@;
put 'dCBfPWIoNTkyOCkscD1iKDE1MjcpO0oudmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uIE4odyl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBGPSExLEg9bmV3IERhdGUsUj0wO2Rve2lmKHlpZWxkKDAsXy5kZWxheSkoMWUzKSx3LmNsb3NlZClicmVhaztGPXcu'@;
put 'd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJncud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0LmluY2x1ZGVzKCgwLHAuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpLFI9KChuZXcgRGF0ZSkudmFsdWVPZigpLUgudmFsdWVPZigpKS8xZTN9'@;
put 'd2hpbGUoIUYmJlI8MzAwKTtyZXR1cm57aXNMb2dnZWRJbjpGfX0pfX0sNjU0NzpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixILFIsail7cmV0dXJuIG5ldyhSfHwoUj1Qcm9taXNlKSkoZnVuY3Rpb24oTCxZKXtm'@;
put 'dW5jdGlvbiBCKFgpe3RyeXtaKGoubmV4dChYKSl9Y2F0Y2goUSl7WShRKX19ZnVuY3Rpb24gVyhYKXt0cnl7WihqLnRocm93KFgpKX1jYXRjaChRKXtZKFEpfX1mdW5jdGlvbiBaKFgpe1guZG9uZT9MKFgudmFsdWUpOmZ1bmN0aW9uIFAoTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBSP0w6bmV3'@;
put 'IFIoZnVuY3Rpb24oWSl7WShMKX0pfShYLnZhbHVlKS50aGVuKEIsVyl9Wigoaj1qLmFwcGx5KEYsSHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmlzTG9nZ2VkSW5TQVNWSVlBPUoudmVyaWZ5U2FzVml5YUxvZ2lu'@;
put 'PXZvaWQgMDtjb25zdCBfPWIoNTkyOCkscD1iKDE1MjcpO0oudmVyaWZ5U2FzVml5YUxvZ2luPWZ1bmN0aW9uIE4oRil7dmFyIEgsUjtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IGo9ITEsUD1uZXcgRGF0ZSxMPTA7ZG97aWYoeWllbGQoMCxfLmRlbGF5KSgx'@;
put 'ZTMpLEYuY2xvc2VkKWJyZWFrO2o9KDAsSi5pc0xvZ2dlZEluU0FTVklZQSkoKSxMPSgobmV3IERhdGUpLnZhbHVlT2YoKS1QLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCFqJiZMPDMwMCk7bGV0IFk9ITE7UD1uZXcgRGF0ZTtkb3tpZih5aWVsZCgwLF8uZGVsYXkpKDFlMyksRi5jbG9zZWQpYnJl'@;
put 'YWs7WT1GLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpfHwobnVsbD09PShSPW51bGw9PT0oSD1GLndpbmRvdy5kb2N1bWVudC5ib2R5KXx8dm9pZCAwPT09SD92b2lkIDA6SC5pbm5lclRleHQpfHx2b2lkIDA9PT1SP3ZvaWQgMDpSLmluY2x1ZGVzKCgwLHAuZ2V0'@;
put 'RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpKSxMPSgobmV3IERhdGUpLnZhbHVlT2YoKS1QLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCFZJiZMPDMwMCk7cmV0dXJue2lzTG9nZ2VkSW46aiYmWX19KX0sSi5pc0xvZ2dlZEluU0FTVklZQT0oKT0+ZG9jdW1lbnQuY29va2llLmluY2x1ZGVz'@;
put 'KCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX0sNDAzNzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDtj'@;
put 'b25zdCBEPWIoMjQwMiksXz1iKDU5MjgpO0ouZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT0oTix3KT0+e2Zvcihjb25zdCBGIGluIHcpe2lmKCFBcnJheS5pc0FycmF5KHdbRl0pKWNvbnRpbnVlO2NvbnN0IEg9RixSPSgwLEQuY29udmVydFRvQ1NWKSh3LEYpO2lmKCJFUlJPUjogTEFSR0UgU1RS'@;
put 'SU5HIExFTkdUSCI9PT1SKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZigoMCxfLmlzTm9kZSkoKSlOLmFwcGVuZChILFIse2ZpbGVuYW1lOmAke0h9LmNzdmAsY29udGVudFR5cGU6ImFw'@;
put 'cGxpY2F0aW9uL2NzdiJ9KTtlbHNle2NvbnN0IGo9bmV3IEJsb2IoW1JdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7Ti5hcHBlbmQoSCxqLGAke0h9LmNzdmApfX1yZXR1cm4gTn19LDIxNzA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pLEouZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IEQ9YigyNDAyKSxfPWIoNDc5OSk7Si5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT0oTix3KT0+e2NvbnN0IEY9W10sSD17fTtsZXQgUj0wO2Zvcihjb25zdCBqIGluIHcpe1IrKywoMCxELmlz'@;
put 'Rm9ybWF0c1RhYmxlKShqKXx8Ri5wdXNoKGopO2NvbnN0IFA9KDAsRC5jb252ZXJ0VG9DU1YpKHcsaik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVApdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBj'@;
put 'aGFyYWN0ZXJzLiIpO1AubGVuZ3RoPjE2ZTM/KDAsXy5zcGxpdENodW5rcykoUCkubWFwKFk9PntOLmFwcGVuZChgc2FzanMke1J9ZGF0YWAsWSl9KTpIW2BzYXNqcyR7Un1kYXRhYF09UH1yZXR1cm4gSC5zYXNqc190YWJsZXM9Ri5qb2luKCIgIikse2Zvcm1EYXRhOk4scmVxdWVzdFBhcmFt'@;
put 'czpIfX19LDM2MDc6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHcsRixILFIpe3ZvaWQgMD09PVImJihSPUgpO3ZhciBqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io'@;
put 'RixIKTsoIWp8fCgiZ2V0ImluIGo/IUYuX19lc01vZHVsZTpqLndyaXRhYmxlfHxqLmNvbmZpZ3VyYWJsZSkpJiYoaj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRltIXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxSLGopfTpmdW5jdGlvbih3LEYsSCxSKXt2b2lk'@;
put 'IDA9PT1SJiYoUj1IKSx3W1JdPUZbSF19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LEYpe2Zvcih2YXIgSCBpbiB3KSJkZWZhdWx0IiE9PUgmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRixIKSYmRChGLHcsSCl9LHA9dGhpcyYmdGhpcy5f'@;
put 'X2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IE49cChiKDU5NTYpKTtfKGIoMTIzMCksSiksXyhiKDEzOTUpLEopLF8oYig5'@;
put 'ODIxKSxKKSxfKGIoODMwNiksSiksXyhiKDM0NjcpLEopLF8oYigzNjAyKSxKKSxKLmRlZmF1bHQ9Ti5kZWZhdWx0fSwxNTcwOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLEgsUixqKXtyZXR1cm4gbmV3KFJ8fChS'@;
put 'PVByb21pc2UpKShmdW5jdGlvbihMLFkpe2Z1bmN0aW9uIEIoWCl7dHJ5e1ooai5uZXh0KFgpKX1jYXRjaChRKXtZKFEpfX1mdW5jdGlvbiBXKFgpe3RyeXtaKGoudGhyb3coWCkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFooWCl7WC5kb25lP0woWC52YWx1ZSk6ZnVuY3Rpb24gUChMKXty'@;
put 'ZXR1cm4gTCBpbnN0YW5jZW9mIFI/TDpuZXcgUihmdW5jdGlvbihZKXtZKEwpfSl9KFgudmFsdWUpLnRoZW4oQixXKX1aKChqPWouYXBwbHkoRixIfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouQ29tcHV0ZUpvYkV4'@;
put 'ZWN1dG9yPXZvaWQgMDtjb25zdCBfPWIoMzkwMCkscD1iKDEzOTUpLE49Yig2MTE4KTtKLkNvbXB1dGVKb2JFeGVjdXRvcj1jbGFzcyB3IGV4dGVuZHMgTi5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSCxSKXtzdXBlcihILF8uU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlzLnNhc1ZpeWFB'@;
put 'cGlDbGllbnQ9Un1leGVjdXRlKEgsUixqLFAsTCl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9UHx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuIG5ldyBQcm9taXNlKChYLFEpPT57dmFyIHE7bnVsbD09PShxPXRoaXMuc2FzVml5YUFwaUNs'@;
put 'aWVudCl8fHZvaWQgMD09PXF8fHEuZXhlY3V0ZUNvbXB1dGVKb2IoSCxqLmNvbnRleHROYW1lLGouZGVidWcsUixMLCEwLCEwKS50aGVuKHRlPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QodGUsSCxqLmRlYnVnKSxYKHRlLnJlc3VsdCl9KS5jYXRjaCh0ZT0+RCh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGUgaW5zdGFuY2VvZiBwLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHRlLEgsai5kZWJ1ZyksUShuZXcgcC5FcnJvclJlc3BvbnNlKHRlPy5tZXNzYWdlLHRlKSkpLHRlIGlu'@;
put 'c3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShILFIsaixQKS50aGVuKGllPT57WChpZSl9LGllPT57UShpZSl9KSkseWllbGQgWSgpKTpRKG5ldyBwLkVycm9yUmVzcG9uc2UodGU/Lm1lc3NhZ2UsdGUpKX0p'@;
put 'KX0pfSl9fX0sMzQ5MTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSCxSLGosUCl7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxCKXtmdW5jdGlvbiBXKFEpe3RyeXtYKFAubmV4dChRKSl9Y2F0'@;
put 'Y2gocSl7QihxKX19ZnVuY3Rpb24gWihRKXt0cnl7WChQLnRocm93KFEpKX1jYXRjaChxKXtCKHEpfX1mdW5jdGlvbiBYKFEpe1EuZG9uZT9ZKFEudmFsdWUpOmZ1bmN0aW9uIEwoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBqP1k6bmV3IGooZnVuY3Rpb24oQil7QihZKX0pfShRLnZhbHVlKS50'@;
put 'aGVuKFcsWil9WCgoUD1QLmFwcGx5KEgsUnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkZpbGVVcGxvYWRlcj12b2lkIDA7Y29uc3QgXz1iKDU5MjgpLHA9YigxMzk1KSxOPWIoMzkwMCksdz1iKDYxMTgpO0ouRmls'@;
put 'ZVVwbG9hZGVyPWNsYXNzIEYgZXh0ZW5kcyB3LkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihSLGosUCxMKXtzdXBlcihSLGopLHRoaXMuam9ic1BhdGg9UCx0aGlzLnJlcXVlc3RDbGllbnQ9TH1leGVjdXRlKFIsaixQLEwpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'biooKXtjb25zdHtmaWxlczpZLHBhcmFtczpCfT1qLFc9THx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7aWYoIVk/Lmxlbmd0aCl0aHJvdyBuZXcgcC5FcnJvclJlc3BvbnNlKCJBdCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFSfHwiIj09PVIpdGhyb3cgbmV3IHAu'@;
put 'RXJyb3JSZXNwb25zZSgic2FzSm9iIG11c3QgYmUgcHJvdmlkZWQuIik7bGV0IFo9IiI7Zm9yKGxldCBnZSBpbiBCKUIuaGFzT3duUHJvcGVydHkoZ2UpJiYoWis9YCYke2dlfT0ke0JbZ2VdfWApO2NvbnN0IFg9UC5hcHBMb2M/UC5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStSLnJlcGxh'@;
put 'Y2UoL15cLy8sIiIpOlIsUT1gJHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitYfSR7Wn1gLHE9bmV3IEZvcm1EYXRhO2ZvcihsZXQgZ2Ugb2YgWSlxLmFwcGVuZCgiZmlsZSIsZ2UuZmlsZSxnZS5maWxlTmFtZSk7Y29uc3QgdGU9dGhpcy5yZXF1ZXN0Q2xpZW50LmdldENzcmZUb2tl'@;
put 'bigiZmlsZSIpO3RlJiZxLmFwcGVuZCgiX2NzcmYiLHRlLnZhbHVlKSxQLmRlYnVnJiZxLmFwcGVuZCgiX2RlYnVnIiwiMTMxIiksUC5zZXJ2ZXJUeXBlPT09Ti5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJlAuY29udGV4dE5hbWUmJnEuYXBwZW5kKCJfY29udGV4dG5hbWUiLFAuY29udGV4dE5hbWUp'@;
put 'O2NvbnN0IGllPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifTtyZXR1cm4gbmV3IFByb21pc2UoKGdlLF9lKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KFEscSx2b2lkIDAsImFwcGxpY2F0aW9uL2pzb24iLGll'@;
put 'KS50aGVuKFRlPT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChUZSxSLFAuZGVidWcpO2xldCBTZT1UZS5yZXN1bHQ7aWYoUC5kZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIE4uU2VydmVyVHlwZS5TYXNW'@;
put 'aXlhOlNlPXlpZWxkKDAsXy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShUZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LFAuc2VydmVyVXJsKTticmVhaztjYXNlIE4uU2VydmVyVHlwZS5TYXM5OlNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8ucGFyc2VXZWJvdXRSZXNw'@;
put 'b25zZSkoVGUucmVzdWx0LFEpOlRlLnJlc3VsdDticmVhaztjYXNlIE4uU2VydmVyVHlwZS5TYXNqczpTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCxfLmdldFZhbGlkSnNvbikoVGUucmVzdWx0KTpUZS5yZXN1bHR9ZWxzZSBTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8o'@;
put 'MCxfLmdldFZhbGlkSnNvbikoVGUucmVzdWx0KTpUZS5yZXN1bHQ7Z2UoU2UpfSkpLmNhdGNoKFRlPT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtUZSBpbnN0YW5jZW9mIHAuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChUZSxS'@;
put 'LFAuZGVidWcpLF9lKG5ldyBwLkVycm9yUmVzcG9uc2UoVGU/Lm1lc3NhZ2UsVGUpKSksVGUgaW5zdGFuY2VvZiBwLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKFIsaixQLEwpLnRoZW4oU2U9PntnZShTZSl9LFNlPT57X2Uo'@;
put 'U2UpfSkpLHlpZWxkIFcoKSk6X2UobmV3IHAuRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixUZSkpfSkpfSl9KX19fSw0NDQ2OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihILFIsaixQ'@;
put 'KXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihZLEIpe2Z1bmN0aW9uIFcoUSl7dHJ5e1goUC5uZXh0KFEpKX1jYXRjaChxKXtCKHEpfX1mdW5jdGlvbiBaKFEpe3RyeXtYKFAudGhyb3coUSkpfWNhdGNoKHEpe0IocSl9fWZ1bmN0aW9uIFgoUSl7US5kb25lP1koUS52YWx1'@;
put 'ZSk6ZnVuY3Rpb24gTChZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIGo/WTpuZXcgaihmdW5jdGlvbihCKXtCKFkpfSl9KFEudmFsdWUpLnRoZW4oVyxaKX1YKChQPVAuYXBwbHkoSCxSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLEouSmVzSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89YigzOTAwKSxwPWIoMTM5NSksTj1iKDYxMTgpLHc9Yig1OTI4KTtKLkplc0pvYkV4ZWN1dG9yPWNsYXNzIEYgZXh0ZW5kcyBOLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihSLGope3N1cGVyKFIsXy5TZXJ2ZXJUeXBlLlNh'@;
put 'c1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD1qfWV4ZWN1dGUoUixqLFAsTCxZLEI9W10pe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPUx8fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgoWCxRKT0+e3ZhciBxO251'@;
put 'bGw9PT0ocT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1xfHxxLmV4ZWN1dGVKb2IoUixQLmNvbnRleHROYW1lLFAuZGVidWcsaixZKS50aGVuKHRlPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QodGUsUixQLmRlYnVnKTtjb25zdCBpZT0oMCx3LmFwcGVu'@;
put 'ZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKSh0ZSxCKTtYKGllKX0pLmNhdGNoKHRlPT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0ZSBpbnN0YW5jZW9mIHAuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdCh0ZSxSLFAuZGVi'@;
put 'dWcpLFEobmV3IHAuRXJyb3JSZXNwb25zZSh0ZT8ubWVzc2FnZSx0ZSkpKSx0ZSBpbnN0YW5jZW9mIHAuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoUixqLFAsTCxZLEIpLnRoZW4oaWU9PntYKGllKX0saWU9PntRKGllKX0p'@;
put 'KSx5aWVsZCBXKCkpOlEobmV3IHAuRXJyb3JSZXNwb25zZSh0ZT8ubWVzc2FnZSx0ZSkpfSkpfSl9KX19fSw2MTE4OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLHcsRixIKXtyZXR1cm4gbmV3KEZ8fChGPVByb21p'@;
put 'c2UpKShmdW5jdGlvbihqLFApe2Z1bmN0aW9uIEwoVyl7dHJ5e0IoSC5uZXh0KFcpKX1jYXRjaChaKXtQKFopfX1mdW5jdGlvbiBZKFcpe3RyeXtCKEgudGhyb3coVykpfWNhdGNoKFope1AoWil9fWZ1bmN0aW9uIEIoVyl7Vy5kb25lP2ooVy52YWx1ZSk6ZnVuY3Rpb24gUihqKXtyZXR1cm4g'@;
put 'aiBpbnN0YW5jZW9mIEY/ajpuZXcgRihmdW5jdGlvbihQKXtQKGopfSl9KFcudmFsdWUpLnRoZW4oTCxZKX1CKChIPUguYXBwbHkoTix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouQmFzZUpvYkV4ZWN1dG9yPXZv'@;
put 'aWQgMDtjb25zdCBfPWIoNTkyOCk7Si5CYXNlSm9iRXhlY3V0b3I9Y2xhc3MgcHtjb25zdHJ1Y3Rvcih3LEYpe3RoaXMuc2VydmVyVXJsPXcsdGhpcy5zZXJ2ZXJUeXBlPUYsdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9KCk9PkQodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkKDAsXy5hc3luY0ZvckVhY2gpKHRoaXMud2FpdGluZ1JlcXVlc3RzLEg9PkQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIEgoKX0pKSx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXX0pfWFwcGVuZFdhaXRpbmdSZXF1ZXN0KHcp'@;
put 'e3RoaXMud2FpdGluZ1JlcXVlc3RzLnB1c2godyl9Z2V0UmVxdWVzdFBhcmFtcyh3KXtjb25zdCBGPXt9O3JldHVybiB3LmRlYnVnJiYoRi5fb21pdHRleHRsb2c9ImZhbHNlIixGLl9vbWl0U2Vzc2lvblJlc3VsdHM9ImZhbHNlIixGLl9kZWJ1Zz0xMzEpLEZ9fX0sMjY5MzpmdW5jdGlvbihj'@;
put 'ZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxMLFksQil7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oWixYKXtmdW5jdGlvbiBRKGllKXt0cnl7dGUoQi5uZXh0KGllKSl9Y2F0Y2goc2Upe1goc2UpfX1mdW5jdGlv'@;
put 'biBxKGllKXt0cnl7dGUoQi50aHJvdyhpZSkpfWNhdGNoKHNlKXtYKHNlKX19ZnVuY3Rpb24gdGUoaWUpe2llLmRvbmU/WihpZS52YWx1ZSk6ZnVuY3Rpb24gVyhaKXtyZXR1cm4gWiBpbnN0YW5jZW9mIFk/WjpuZXcgWShmdW5jdGlvbihYKXtYKFopfSl9KGllLnZhbHVlKS50aGVuKFEscSl9'@;
put 'dGUoKEI9Qi5hcHBseShQLEx8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihQKXtyZXR1cm4gUCYmUC5fX2VzTW9kdWxlP1A6e2RlZmF1bHQ6UH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxK'@;
put 'LlNhczlKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLE49YigxMzk1KSx3PWIoNTkyOCksRj1iKDYxMTgpLEg9Yig3OTUpO0ouU2FzOUpvYkV4ZWN1dG9yPWNsYXNzIFIgZXh0ZW5kcyBGLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihMLFksQixXLFope3N1cGVyKEws'@;
put 'WSksdGhpcy5qb2JzUGF0aD1CLHRoaXMucmVxdWVzdENsaWVudD1XLHRoaXMuc2FzOVJlcXVlc3RDbGllbnQ9bmV3IEguU2FzOVJlcXVlc3RDbGllbnQoTCxaKX1leGVjdXRlKEwsWSxCKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz0oMCx3LmlzUmVs'@;
put 'YXRpdmVQYXRoKShMKSYmQi5hcHBMb2M/Qi5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStMLnJlcGxhY2UoL15cLy8sIiIpOkw7bGV0IFo9YCR7Qi5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofT8keyJfcHJvZ3JhbT0iK1d9YDtaPWAke1p9JHtCLnVzZXJuYW1lJiZCLnBhc3N3b3JkPyIm'@;
put 'X3VzZXJuYW1lPSIrQi51c2VybmFtZSsiJl9wYXNzd29yZD0iK0IucGFzc3dvcmQ6IiJ9YCxaPWAke1p9JHtCLmRlYnVnPyImX2RlYnVnPTEzMSI6IiJ9YDtsZXQgWD1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhCKSksUT1uZXcgcC5kZWZhdWx0O2lmKFkpdHJ5e1E9'@;
put 'aihRLFkpfWNhdGNoKGllKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE4uRXJyb3JSZXNwb25zZShpZT8ubWVzc2FnZSxpZSkpfWVsc2UgWT0iIjtmb3IoY29uc3QgaWUgaW4gWClYLmhhc093blByb3BlcnR5KGllKSYmUS5hcHBlbmQoaWUsWFtpZV0pO3lpZWxkIHRoaXMuc2FzOVJlcXVl'@;
put 'c3RDbGllbnQubG9naW4oQi51c2VybmFtZSxCLnBhc3N3b3JkLHRoaXMuam9ic1BhdGgpO2NvbnN0IHE9WSYmT2JqZWN0LmtleXMoWSkubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK1EuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIjtyZXR1cm4gbmV3IFByb21pc2UoKGll'@;
put 'LHNlKT0+dGhpcy5zYXM5UmVxdWVzdENsaWVudC5wb3N0KFosUSx2b2lkIDAscSx7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihnZT0+e3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGdlLEwsQi5kZWJ1ZyksaWUoZ2UpfSkuY2F0Y2goZ2U9Pnts'@;
put 'ZXQgX2U9Z2U7Z2UucmVzdWx0JiYiIiE9PWdlLnJlc3VsdD9fZT1nZS5yZXN1bHQ6Z2UubWVzc2FnZSYmKF9lPWdlLm1lc3NhZ2UpLHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KF9lLEwsQi5kZWJ1Zyksc2UobmV3IE4uRXJyb3JSZXNwb25zZShnZT8ubWVzc2FnZSxnZSkpfSkp'@;
put 'fSl9Z2V0UmVxdWVzdFBhcmFtcyhMKXtjb25zdCBZPXt9O3JldHVybiBMLmRlYnVnJiYoWS5fZGVidWc9MTMxKSxZfX07Y29uc3Qgaj0oUCxMKT0+e2Zvcihjb25zdCBZIGluIEwpe2NvbnN0IEI9WSxXPSgwLHcuY29udmVydFRvQ1NWKShMLFkpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExF'@;
put 'TkdUSCI9PT1XKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtQLmFwcGVuZChCLFcse2ZpbGVuYW1lOmAke0J9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1yZXR1cm4g'@;
put 'UH19LDEwNjU6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsWSxCLFcpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsUSl7ZnVuY3Rpb24gcShzZSl7dHJ5e2llKFcubmV4dChzZSkpfWNhdGNo'@;
put 'KGdlKXtRKGdlKX19ZnVuY3Rpb24gdGUoc2Upe3RyeXtpZShXLnRocm93KHNlKSl9Y2F0Y2goZ2Upe1EoZ2UpfX1mdW5jdGlvbiBpZShzZSl7c2UuZG9uZT9YKHNlLnZhbHVlKTpmdW5jdGlvbiBaKFgpe3JldHVybiBYIGluc3RhbmNlb2YgQj9YOm5ldyBCKGZ1bmN0aW9uKFEpe1EoWCl9KX0o'@;
put 'c2UudmFsdWUpLnRoZW4ocSx0ZSl9aWUoKFc9Vy5hcHBseShMLFl8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihMKXtyZXR1cm4gTCYmTC5fX2VzTW9kdWxlP0w6e2RlZmF1bHQ6TH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxKLlNhc2pzSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IHA9XyhiKDYyMzApKSxOPWIoMzkwMCksdz1iKDEzOTUpLEY9Yig0MDM3KSxIPWIoNTkyOCksUj1iKDU5MjgpLGo9Yig2MTE4KTtKLlNhc2pzSm9iRXhlY3V0b3I9Y2xhc3MgUCBleHRlbmRzIGouQmFz'@;
put 'ZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKFksQixXKXtzdXBlcihZLE4uU2VydmVyVHlwZS5TYXNqcyksdGhpcy5qb2JzUGF0aD1CLHRoaXMucmVxdWVzdENsaWVudD1XfWV4ZWN1dGUoWSxCLFcsWixYLFE9W10pe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25z'@;
put 'dCBxPVosdGU9KDAsUi5pc1JlbGF0aXZlUGF0aCkoWSkmJlcuYXBwTG9jP1cuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrWS5yZXBsYWNlKC9eXC8vLCIiKTpZO2xldCBpZT1gJHtXLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3RlfWAsc2U9T2JqZWN0LmFz'@;
put 'c2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVykpLGdlPSgwLEguZ2V0Rm9ybURhdGEpKCk7aWYoQil0cnl7Z2U9KDAsRi5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShnZSxCKX1jYXRjaChTZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoU2U/Lm1lc3Nh'@;
put 'Z2UsU2UpKX1mb3IoY29uc3QgU2UgaW4gc2Upc2UuaGFzT3duUHJvcGVydHkoU2UpJiZnZS5hcHBlbmQoU2Usc2VbU2VdKTtjb25zdCBfZT1nZSBpbnN0YW5jZW9mIHAuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtnZS5nZXRI'@;
put 'ZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoU2UsemUpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoaWUsZ2UsWD8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKHo9PkQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'Kigpe2lmKE9iamVjdC5lbnRyaWVzKHoucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgdy5Kb2JFeGVjdXRpb25FcnJvcigwLGBObyB3ZWJvdXQgd2FzIHJldHVybmVkIGJ5IGpvYiAke3RlfS4gIFBsZWFzZSBjaGVjayB0aGUgU0FTIGxvZyBmb3IgbW9yZSBpbmZvLmAsei5sb2cpO2NvbnN0'@;
put 'e3Jlc3VsdDpnfT16O2cmJiJzdHJpbmciPT10eXBlb2YgZyYmZy50cmltKCkmJih6LnJlc3VsdD0oMCxSLmdldFZhbGlkSnNvbikoZykpLHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHosWSxXLmRlYnVnKTtjb25zdCB5PSgwLFIuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0'@;
put 'ZXMpKHosUSk7U2UoeSl9KSkuY2F0Y2goej0+RCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eiBpbnN0YW5jZW9mIHcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdCh6LFksVy5kZWJ1ZyksemUobmV3IHcuRXJyb3JSZXNwb25zZSh6'@;
put 'Py5tZXNzYWdlLHopKSkseiBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9yPyhafHx6ZShuZXcgdy5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIseikpLHRo'@;
put 'aXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShZLEIsVyxaLFgsUSkudGhlbihnPT57U2UoZyl9LGc9Pnt6ZShnKX0pKSxxJiYoeWllbGQgcSgpKSk6emUobmV3IHcuRXJyb3JSZXNwb25zZSh6Py5tZXNzYWdlLHopKX0pKX0pfSl9fX0sNjA4NDpmdW5jdGlvbihjZSxK'@;
put 'LGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTCxZLEIsVyl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oWCxRKXtmdW5jdGlvbiBxKHNlKXt0cnl7aWUoVy5uZXh0KHNlKSl9Y2F0Y2goZ2Upe1EoZ2UpfX1mdW5jdGlvbiB0'@;
put 'ZShzZSl7dHJ5e2llKFcudGhyb3coc2UpKX1jYXRjaChnZSl7UShnZSl9fWZ1bmN0aW9uIGllKHNlKXtzZS5kb25lP1goc2UudmFsdWUpOmZ1bmN0aW9uIFooWCl7cmV0dXJuIFggaW5zdGFuY2VvZiBCP1g6bmV3IEIoZnVuY3Rpb24oUSl7UShYKX0pfShzZS52YWx1ZSkudGhlbihxLHRlKX1p'@;
put 'ZSgoVz1XLmFwcGx5KEwsWXx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEwpe3JldHVybiBMJiZMLl9fZXNNb2R1bGU/TDp7ZGVmYXVsdDpMfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEou'@;
put 'V2ViSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IHA9XyhiKDYyMzApKSxOPWIoMzkwMCksdz1iKDEzOTUpLEY9Yig0MDM3KSxIPWIoMjE3MCksUj1iKDU5MjgpLGo9Yig2MTE4KTtKLldlYkpvYkV4ZWN1dG9yPWNsYXNzIFAgZXh0ZW5kcyBqLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihZ'@;
put 'LEIsVyxaLFgpe3N1cGVyKFksQiksdGhpcy5qb2JzUGF0aD1XLHRoaXMucmVxdWVzdENsaWVudD1aLHRoaXMuc2FzVml5YUFwaUNsaWVudD1YfWV4ZWN1dGUoWSxCLFcsWixYLFE9W10pe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBxPVosdGU9KDAsUi5p'@;
put 'c1JlbGF0aXZlUGF0aCkoWSkmJlcuYXBwTG9jP1cuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrWS5yZXBsYWNlKC9eXC8vLCIiKTpZO2xldCBpZT1gJHtXLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3RlfWA7aWYoVy5zZXJ2ZXJUeXBlPT09Ti5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWEpe2xldCBTZTt0cnl7U2U9eWllbGQgdGhpcy5nZXRKb2JVcmkoWSl9Y2F0Y2goemUpe3JldHVybiBuZXcgUHJvbWlzZSgoeixnKT0+RCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7emUgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBl'@;
put 'bmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKFksQixXLFosWCxRKS50aGVuKHk9Pnt6KHkpfSx5PT57Zyh5KX0pKSxxJiYoeWllbGQgcSgpKSk6ZyhuZXcgdy5FcnJvclJlc3BvbnNlKHplPy5tZXNzYWdlLHplKSl9KSl9aWUrPVNlLmxlbmd0aD4wPyImX2pvYj0iK1NlOiIiLFNl'@;
put 'Lmxlbmd0aD4wJiYoaWUrPSImX2pvYj0iK1NlLGllPWllLnJlcGxhY2UoIl9wcm9ncmFtPSIsIl9fcHJvZ3JhbT0iKSksaWUrPVcuY29udGV4dE5hbWUmJiEvXHMvLnRlc3QoVy5jb250ZXh0TmFtZSk/YCZfY29udGV4dG5hbWU9JHtXLmNvbnRleHROYW1lfWA6IiJ9bGV0IHNlPU9iamVjdC5h'@;
put 'c3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKFcpKSxnZT0oMCxSLmdldEZvcm1EYXRhKSgpO2lmKEIpe2NvbnN0IFNlPUpTT04uc3RyaW5naWZ5KEIpO2lmKFcuc2VydmVyVHlwZT09PU4uU2VydmVyVHlwZS5TYXM5fHxTZS5sZW5ndGg+NWU1fHxTZS5pbmNsdWRlcygiOyIpKXRyeXtn'@;
put 'ZT0oMCxGLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKGdlLEIpfWNhdGNoKHplKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZSh6ZT8ubWVzc2FnZSx6ZSkpfWVsc2UgdHJ5e2NvbnN0e2Zvcm1EYXRhOnplLHJlcXVlc3RQYXJhbXM6en09KDAsSC5nZW5lcmF0ZVRh'@;
put 'YmxlVXBsb2FkRm9ybSkoZ2UsQik7Z2U9emUsc2U9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHNlKSx6KX1jYXRjaCh6ZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoemU/Lm1lc3NhZ2UsemUpKX19Zm9yKGNvbnN0IFNlIGluIHNlKXNlLmhhc093'@;
put 'blByb3BlcnR5KFNlKSYmZ2UuYXBwZW5kKFNlLHNlW1NlXSk7Y29uc3QgX2U9Z2UgaW5zdGFuY2VvZiBwLmRlZmF1bHQmJnR5cGVvZiBGb3JtRGF0YT4idSI/YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7Z2UuZ2V0SGVhZGVycygpWyJjb250ZW50LXR5cGUiXX1gOiJtdWx0aXBh'@;
put 'cnQvZm9ybS1kYXRhIjtyZXR1cm4gbmV3IFByb21pc2UoKFNlLHplKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KGllLGdlLFg/LmFjY2Vzc190b2tlbixfZSkudGhlbih6PT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVz'@;
put 'dCh6LFksVy5kZWJ1Zyk7bGV0IGc9ei5yZXN1bHQ7aWYoVy5kZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIE4uU2VydmVyVHlwZS5TYXNWaXlhOmc9eWllbGQoMCxSLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKHoucmVzdWx0LHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNl'@;
put 'cnZlclVybCk7YnJlYWs7Y2FzZSBOLlNlcnZlclR5cGUuU2FzOTpnPSJzdHJpbmciPT10eXBlb2Ygei5yZXN1bHQ/KDAsUi5wYXJzZVdlYm91dFJlc3BvbnNlKSh6LnJlc3VsdCxpZSk6ei5yZXN1bHR9Y29uc3QgeT0oMCxSLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKSh7cmVzdWx0'@;
put 'OmcsbG9nOnoubG9nfSxRKTtTZSh5KX0pKS5jYXRjaCh6PT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt6IGluc3RhbmNlb2Ygdy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHosWSxXLmRlYnVnKSx6ZShuZXcgdy5FcnJvclJl'@;
put 'c3BvbnNlKHo/Lm1lc3NhZ2UseikpKSx6IGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KFp8fHplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMu'@;
put 'Iix6KSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKFksQixXLFosWCxRKS50aGVuKGc9PntTZShnKX0sZz0+e3plKGcpfSkpLHEmJih5aWVsZCBxKCkpKTp6ZShuZXcgdy5FcnJvclJlc3BvbnNlKHo/Lm1lc3NhZ2UseikpfSkpfSl9KX1nZXRKb2JVcmkoWSl7'@;
put 'cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLnNhc1ZpeWFBcGlDbGllbnQpcmV0dXJuIiI7bGV0IFcsWixCPSIiO2lmKCgwLFIuaXNSZWxhdGl2ZVBhdGgpKFkpKXtjb25zdCBRPVkuc3BsaXQoIi8iKTtXPVEubGVuZ3RoPjE/UVswXToiIixaPVEubGVu'@;
put 'Z3RoPjE/UVsxXToiIn1lbHNle2NvbnN0IFE9WS5zcGxpdCgiLyIpO1o9US5wb3AoKXx8IiIsVz1RLmpvaW4oIi8iKX1pZighWil0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtjb25zdCBYPXlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVu'@;
put 'dC5nZXRKb2JzSW5Gb2xkZXIoVyk7aWYoWCl7Y29uc3QgUT1YLmZpbmQocT0+cS5uYW1lPT09WiYmImpvYkRlZmluaXRpb24iPT09cS5jb250ZW50VHlwZSk7USYmKEI9US51cmkpfXJldHVybiBCfSl9fX0sODIxNzpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0'@;
put 'aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dyk7dmFyIEg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOLHcpOyghSHx8KCJnZXQiaW4gSD8hTi5fX2VzTW9kdWxlOkgud3JpdGFibGV8fEguY29uZmln'@;
put 'dXJhYmxlKSkmJihIPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLEYsSCl9OmZ1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpLHBbRl09Tlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1'@;
put 'bmN0aW9uKHAsTil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLHcpJiZEKE4scCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigxNTcwKSxKKSxfKGIoMzQ5'@;
put 'MSksSiksXyhiKDQ0NDYpLEopLF8oYig2MTE4KSxKKSxfKGIoMjY5MyksSiksXyhiKDYwODQpLEopLF8oYigxMDY1KSxKKX0sNDU4ODpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2Jq'@;
put 'ZWN0LmNyZWF0ZT9mdW5jdGlvbih0ZSxpZSxzZSxnZSl7dm9pZCAwPT09Z2UmJihnZT1zZSk7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaWUsc2UpOyghX2V8fCgiZ2V0ImluIF9lPyFpZS5fX2VzTW9kdWxlOl9lLndyaXRhYmxlfHxfZS5jb25maWd1cmFibGUpKSYm'@;
put 'KF9lPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpZVtzZV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRlLGdlLF9lKX06ZnVuY3Rpb24odGUsaWUsc2UsZ2Upe3ZvaWQgMD09PWdlJiYoZ2U9c2UpLHRlW2dlXT1pZVtzZV19KSxOPXRoaXMmJnRoaXMuX19zZXRNb2R1'@;
put 'bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih0ZSxpZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRlLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppZX0pfTpmdW5jdGlvbih0ZSxpZSl7dGUuZGVmYXVsdD1pZX0pLHc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1'@;
put 'bmN0aW9uKHRlKXtpZih0ZSYmdGUuX19lc01vZHVsZSlyZXR1cm4gdGU7dmFyIGllPXt9O2lmKG51bGwhPXRlKWZvcih2YXIgc2UgaW4gdGUpImRlZmF1bHQiIT09c2UmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxzZSkmJnAoaWUsdGUsc2UpO3JldHVybiBOKGll'@;
put 'LHRlKSxpZX0sRj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odGUsaWUsc2UsZ2Upe3JldHVybiBuZXcoc2V8fChzZT1Qcm9taXNlKSkoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIHplKHkpe3RyeXtnKGdlLm5leHQoeSkpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiB6KHkpe3Ry'@;
put 'eXtnKGdlLnRocm93KHkpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gZyh5KXt5LmRvbmU/VGUoeS52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBpbnN0YW5jZW9mIHNlP1RlOm5ldyBzZShmdW5jdGlvbihTZSl7U2UoVGUpfSl9KHkudmFsdWUpLnRoZW4oemUseil9ZygoZ2U9'@;
put 'Z2UuYXBwbHkodGUsaWV8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi50aHJvd0lmRXJyb3I9Si5SZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBIPXcoYig4MzczKSksUj1iKDE1MjcpLGo9YigxMzk1KSxQPWIoMjgx'@;
put 'MyksTD1iKDk3NzgpLFk9Yig5NTI2KSxCPWIoNTkyOCksVz1iKDEwMDUpLFo9Yig5NTM5KTtKLlJlcXVlc3RDbGllbnQ9Y2xhc3MgWHtjb25zdHJ1Y3RvcihpZSxzZSxnZSxfZSl7dGhpcy5iYXNlVXJsPWllLHRoaXMucmVxdWVzdHM9W10sdGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVy'@;
put 'Ym9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZ2V0UmVxdWVzdHM9KCk9PnRoaXMucmVxdWVzdHMsdGhpcy5jbGVhclJlcXVlc3RzPSgpPT57dGhpcy5yZXF1ZXN0cz1bXX0sdGhpcy5hdXRob3JpemU9VGU9PkYodGhpcyx2b2lkIDAsdm9p'@;
put 'ZCAwLGZ1bmN0aW9uKigpe2xldCBTZT1udWxsO2NvbnN0IHplPXt9LHo9VGUuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD16O2NvbnN0IHk9Zy5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRp'@;
put 'b25fYXV0aG9yaXphdGlvbiIpO1NlPXk/dGhpcy5iYXNlVXJsK3kuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKTpudWxsO2NvbnN0IHg9eT8ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKTtmb3IoY29uc3QgViBvZiB4KSJ1c2VyX29hdXRoX2FwcHJvdmFsIj09PVYubmFtZSYmKFYudmFsdWU9InRy'@;
put 'dWUiKSx6ZVtWLm5hbWVdPVYudmFsdWU7Y29uc3QgQz1PYmplY3Qua2V5cyh6ZSkuZmluZChWPT5WPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIikpO0MmJih0aGlzLmNzcmZUb2tlbi52YWx1ZT16ZVtDXSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhl'@;
put 'YWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKTtjb25zdCBUPW5ldyBGb3JtRGF0YTtmb3IoY29uc3QgViBpbiB6ZSl6ZS5oYXNPd25Qcm9wZXJ0eShWKSYmVC5hcHBlbmQoVix6ZVtWXSk7aWYoIVNlKXRocm93IG5ldyBFcnJvcigiQXV0aCBGb3JtIFVSTCBpcyBudWxsIG9yIHVuZGVmaW5lZC4i'@;
put 'KTtyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoU2UsVCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oVj0+Vi5kYXRhKS5jYXRjaChWPT57KEQubG9nZ2VyfHxfKS5lcnJvcihWKX0p'@;
put 'fSksdGhpcy5wcmV0dGlmeVN0cmluZz1UZT0+KDAsWi5pbnNwZWN0KShUZSx7Y29sb3JzOiJibGVhY2hlZCIhPT10aGlzLnZlcmJvc2VNb2RlfSksdGhpcy5wYXJzZUludGVyY2VwdGVkQm9keT1UZT0+e2lmKCFUZSlyZXR1cm4iIjtsZXQgU2U7aWYoInN0cmluZyI9PXR5cGVvZiBUZSl0cnl7'@;
put 'U2U9SlNPTi5wYXJzZShUZSl9Y2F0Y2h7U2U9VGV9ZWxzZSBTZT1UZTtjb25zdCB6ZT10aGlzLnByZXR0aWZ5U3RyaW5nKFNlKS5zcGxpdCgiXG4iKTtyZXR1cm4gemUubGVuZ3RoPjUxJiYoemUuc3BsaWNlKDUwKSx6ZS5wdXNoKCIuLi4iKSksemUuam9pbigiXG4iKX0sdGhpcy5oYW5kbGVB'@;
put 'eGlvc1Jlc3BvbnNlPVRlPT57dmFyIFNlLHplLHosZztjb25zdHtzdGF0dXM6eSxjb25maWc6eCxyZXF1ZXN0OkMsZGF0YTpUfT1UZSxWPW51bGwhPT0oU2U9Qz8uX2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOiJOb3QgcHJvdmlkZWRcbiIsVT1udWxsIT09KHo9bnVsbD09PSh6ZT1DPy5yZXMp'@;
put 'fHx2b2lkIDA9PT16ZT92b2lkIDA6emUucmF3SGVhZGVycykmJnZvaWQgMCE9PXo/ejpbIk5vdCBwcm92aWRlZCJdLEU9dGhpcy5mb3JtYXRIZWFkZXJzKFUpLG09dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShUKTtyZXR1cm4gbnVsbD09PShnPUQubG9nZ2VyKXx8dm9pZCAwPT09Z3x8Zy5p'@;
put 'bmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiR7Vn0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoeC5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoeSl9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7'@;
put 'RX0ke20/YFxuXG4ke219YDoiIn1cbmApLFRlfSx0aGlzLmhhbmRsZUF4aW9zRXJyb3I9VGU9Pnt2YXIgU2UsemUseixnLHkseDtjb25zdCBDPSJOb3QgcHJvdmlkZWQiLHtyZXNwb25zZTpULHJlcXVlc3Q6Vixjb25maWc6VX09VGU7bGV0IEU9e19oZWFkZXI6YCR7Q31cbmAscmVzOntyYXdI'@;
put 'ZWFkZXJzOltDXX19O1YmJihFPXtfaGVhZGVyOm51bGwhPT0oej1udWxsIT09KFNlPVYuX2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOm51bGw9PT0oemU9Vi5fY3VycmVudFJlcXVlc3QpfHx2b2lkIDA9PT16ZT92b2lkIDA6emUuX2hlYWRlcikmJnZvaWQgMCE9PXo/ejpDLHJlczp7cmF3SGVh'@;
put 'ZGVyczpudWxsIT09KHk9bnVsbD09PShnPVYucmVzKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy5yYXdIZWFkZXJzKSYmdm9pZCAwIT09eT95OltDXX19KTtsZXQgbT1UfHx7c3RhdHVzOkMscmVxdWVzdDpFLGNvbmZpZzpVfHx7ZGF0YTpDLGhlYWRlcnM6e319LGRhdGE6Q307Y29uc3R7c3RhdHVz'@;
put 'OkEscmVxdWVzdDphZSxkYXRhOm5lfT1tLHtfaGVhZGVyOmxlLHJlczp3ZX09YWUsWmU9dGhpcy5mb3JtYXRIZWFkZXJzKHdlLnJhd0hlYWRlcnMpLFFlPXRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkobmUpO3JldHVybiBudWxsPT09KHg9RC5sb2dnZXIpfHx2b2lkIDA9PT14fHx4LmluZm8o'@;
put 'YEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtsZX0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoVT8uZGF0YSl9XG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKEEpfVxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4ke1pl'@;
put 'fSR7UWU/YFxuXG4ke1FlfWA6IiJ9XG5gKSxUZX0sdGhpcy5mb3JtYXRIZWFkZXJzPVRlPT5UZS5yZWR1Y2UoKFNlLHplLHopPT5TZSsoeiUyPT0wP2AkezA9PT16PyIiOiJcbiJ9JHt6ZX1gOmA6ICR7emV9YCksIiIpLHRoaXMuc2V0VmVyYm9zZU1vZGU9VGU9Pnt0aGlzLnZlcmJvc2VNb2Rl'@;
put 'PVRlLHRoaXMudmVyYm9zZU1vZGU/dGhpcy5lbmFibGVWZXJib3NlTW9kZSgpOnRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1vZGU9KFRlPXRoaXMuaGFuZGxlQXhpb3NSZXNwb25zZSxTZT10aGlzLmhhbmRsZUF4aW9zRXJyb3IpPT57dGhpcy5odHRwSW50'@;
put 'ZXJjZXB0b3I9dGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoVGUsU2UpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT0oKT0+e3RoaXMuaHR0cEludGVyY2VwdG9yJiZ0aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KHRoaXMuaHR0cElu'@;
put 'dGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPShUZSxTZSk9Pntjb25zdCB6ZT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PVNlJiYoemVbIkNvbnRlbnQtVHlwZSJdPVNlKSx6ZS5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09U2U/ImFwcGxpY2F0'@;
put 'aW9uL2pzb24iOiIqLyoiLFRlJiYoemUuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7VGV9YCksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUmJih6ZVt0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmNzcmZUb2tlbi52YWx1ZSksemV9LHRoaXMu'@;
put 'cGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPVRlPT57Y29uc3QgU2U9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7U2UmJih0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49U2UpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPVRlPT57Y29uc3QgU2U9dGhpcy5wYXJzZUNzcmZUb2tlbihU'@;
put 'ZSk7U2UmJih0aGlzLmNzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VDc3JmVG9rZW49VGU9Pnt2YXIgU2U7Y29uc3QgemU9bnVsbD09PShTZT1UZS5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UudG9Mb3dlckNhc2UoKTtpZih6ZSlyZXR1cm57aGVhZGVy'@;
put 'TmFtZTp6ZSx2YWx1ZTpUZS5oZWFkZXJzW3plXXx8IiJ9fSx0aGlzLmhhbmRsZUVycm9yPShUZSxTZSx6ZT0hMSk9PkYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHo9VGUucmVzcG9uc2U7aWYoVGUgaW5zdGFuY2VvZiBqLkF1dGhvcml6ZUVycm9yKXtjb25zdCBnPXlp'@;
put 'ZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoVGUuY29uZmlybVVybCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0OiIqLyoifX0pLmNhdGNoKHk9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoeSwiRXJyb3Igd2hpbGUgZ2V0'@;
put 'dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pO3JldHVybigwLFIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKGc/LmRhdGEpJiYoeWllbGQgdGhpcy5hdXRob3JpemUoZy5kYXRhKS5jYXRjaCh5PT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHksIkVycm9yIHdoaWxlIGF1dGhvcml6aW5n'@;
put 'IHJlcXVlc3QuICIpfSkpLHlpZWxkIFNlKCkuY2F0Y2goeT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh5LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSl9aWYoVGUgaW5zdGFuY2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlz'@;
put 'LmNsZWFyQ3NyZlRva2VucygpLFRlO2lmKFRlIGluc3RhbmNlb2YgVy5JbnZhbGlkU0FTanNDc3JmRXJyb3IpcmV0dXJuIHlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkudGhlbihnPT57dmFyIHk7Y29uc3QgeD1udWxsPT09KHk9LzxzY3JpcHQ+ZG9j'@;
put 'dW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKGcuZGF0YSkpfHx2b2lkIDA9PT15P3ZvaWQgMDp5WzFdO3gmJihkb2N1bWVudC5jb29raWU9eCl9KS5jYXRjaChnPT57dGhyb3co'@;
put 'MCxMLnByZWZpeE1lc3NhZ2UpKGcsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5nIENTUkYgdG9rZW4uIil9KSx5aWVsZCBTZSgpLmNhdGNoKGc9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoZywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO2lm'@;
put 'KDQwMz09PXo/LnN0YXR1c3x8NDQ5PT09ej8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuKHopLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlKXJldHVybiB5aWVsZCBTZSgpLmNhdGNoKGc9Pnt0aHJvdygwLEwucHJlZml4TWVzc2Fn'@;
put 'ZSkoZywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO3Rocm93IFRlfWlmKDQwND09PXo/LnN0YXR1cyl0aHJvdyBuZXcgai5Ob3RGb3VuZEVycm9yKHouY29uZmlnLnVybCk7aWYoNTAyIT09ej8uc3RhdHVzKXRocm93IFRlLmlzQXhpb3NFcnJv'@;
put 'ciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09VGUuY29kZT9uZXcgai5DZXJ0aWZpY2F0ZUVycm9yKFRlLm1lc3NhZ2UpOlRlLm1lc3NhZ2U/VGU6KDAsTC5wcmVmaXhNZXNzYWdlKShUZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpO2lmKHplKXRocm93IG5l'@;
put 'dyBqLkludGVybmFsU2VydmVyRXJyb3J9KSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsc2UpLGdlJiYodGhpcy5yZXF1ZXN0c0xpbWl0PWdlKSxfZSYmKHRoaXMuc2V0VmVyYm9zZU1vZGUoX2UpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9c2V0Q29uZmlnKGllLHNlKXt0aGlzLmNyZWF0'@;
put 'ZUh0dHBDbGllbnQoaWUsc2UpfXNhdmVMb2NhbFN0b3JhZ2VUb2tlbihpZSxzZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIixpZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsc2UpfWdldENzcmZUb2tlbihpZT0iZ2VuZXJhbCIpe3JldHVybiJmaWxl'@;
put 'Ij09PWllP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tlbn1jbGVhckNzcmZUb2tlbnMoKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX1jbGVhckxvY2Fs'@;
put 'U3RvcmFnZVRva2Vucygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsIiIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLCIiKX1nZXRCYXNlVXJsKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5iYXNlVVJMfHwiIn1hcHBlbmRSZXF1ZXN0'@;
put 'KGllLHNlLGdlKXtsZXQgX2U9IiIsVGU9IiIsU2U9bnVsbDtnZSYmKGllPy5sb2c/KF9lPSgwLEIucGFyc2VTb3VyY2VDb2RlKShpZS5sb2cpLFRlPSgwLEIucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5sb2cpLFNlPWllPy5yZXN1bHQ/aWUucmVzdWx0LldPUks6aWUubG9nKTppZT8ucmVzdWx0'@;
put 'JiYoInN0cmluZyI9PXR5cGVvZiBpZS5yZXN1bHQmJihfZT0oMCxCLnBhcnNlU291cmNlQ29kZSkoaWUucmVzdWx0KSxUZT0oMCxCLnBhcnNlR2VuZXJhdGVkQ29kZSkoaWUucmVzdWx0KSksU2U9aWUucmVzdWx0LldPUkspKTtjb25zdCB6ZT0ic3RyaW5nIj09dHlwZW9mIGllPy5yZXN1bHQ/'@;
put 'aWU/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShpZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmllPy5sb2d8fHplfHxpZSxzZXJ2aWNlTGluazpzZSx0aW1lc3RhbXA6bmV3IERhdGUsc291cmNlQ29kZTpfZSxnZW5lcmF0ZWRDb2RlOlRlLFNBU1dPUks6U2V9'@;
put 'KSx0aGlzLnJlcXVlc3RzLmxlbmd0aD50aGlzLnJlcXVlc3RzTGltaXQmJnRoaXMucmVxdWVzdHMuc3BsaWNlKDAsMSl9Z2V0KGllLHNlLGdlPSJhcHBsaWNhdGlvbi9qc29uIixfZT17fSxUZT0hMSl7cmV0dXJuIEYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHplPXto'@;
put 'ZWFkZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoc2UsZ2UpKSxfZSkscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PWdlPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09Z2UmJih6ZS50cmFuc2Zv'@;
put 'cm1SZXNwb25zZT12b2lkIDApLHRoaXMuaHR0cENsaWVudC5nZXQoaWUsemUpLnRoZW4oej0+KCgwLEoudGhyb3dJZkVycm9yKSh6KSx0aGlzLnBhcnNlUmVzcG9uc2UoeikpKS5jYXRjaCh6PT5GKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5k'@;
put 'bGVFcnJvcih6LCgpPT50aGlzLmdldChpZSxzZSxnZSxfZSkuY2F0Y2goZz0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShnLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLFRlKX0pKX0pfXBvc3QoaWUsc2UsZ2UsX2U9ImFwcGxpY2F0aW9uL2pz'@;
put 'b24iLFRlPXt9LFNlPXt9KXtyZXR1cm4gRih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgemU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhnZSxfZSkpLFRlKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsc2UsT2JqZWN0'@;
put 'LmFzc2lnbih7aGVhZGVyczp6ZSx3aXRoWFNSRlRva2VuOiEwfSxTZSkpLnRoZW4oej0+KCgwLEoudGhyb3dJZkVycm9yKSh6KSx0aGlzLnBhcnNlUmVzcG9uc2UoeikpKS5jYXRjaCh6PT5GKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVF'@;
put 'cnJvcih6LCgpPT50aGlzLnBvc3QoaWUsc2UsZ2UsX2UsVGUpKX0pKX0pfXB1dChpZSxzZSxnZSxfZT17fSl7cmV0dXJuIEYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoZ2UsImFw'@;
put 'cGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucHV0KGllLHNlLHtoZWFkZXJzOlRlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKFNlPT4oKDAsSi50aHJvd0lmRXJyb3IpKFNlKSx0aGlzLnBhcnNlUmVzcG9uc2UoU2UpKSkuY2F0Y2goU2U9PkYodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFNlLCgpPT50aGlzLnB1dChpZSxzZSxnZSxfZSkpfSkpfSl9ZGVsZXRlKGllLHNlKXtyZXR1cm4gRih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9dGhpcy5nZXRIZWFkZXJz'@;
put 'KHNlLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGUoaWUse2hlYWRlcnM6Z2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oX2U9PigoMCxKLnRocm93SWZFcnJvcikoX2UpLHRoaXMucGFyc2VSZXNwb25zZShfZSkpKS5jYXRjaChfZT0+Rih0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoX2UsKCk9PnRoaXMuZGVsZXRlKGllLHNlKSl9KSl9KX1wYXRjaChpZSxzZT17fSxnZSl7cmV0dXJuIEYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXRoaXMuZ2V0SGVh'@;
put 'ZGVycyhnZSwiYXBwbGljYXRpb24vanNvbiIpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucGF0Y2goaWUsc2Use2hlYWRlcnM6X2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oVGU9PigoMCxKLnRocm93SWZFcnJvcikoVGUpLHRoaXMucGFyc2VSZXNwb25zZShUZSkpKS5jYXRjaChUZT0+Rih0'@;
put 'aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoVGUsKCk9PnRoaXMucGF0Y2goaWUsc2UsZ2UpKX0pKX0pfXVwbG9hZEZpbGUoaWUsc2UsZ2Upe3ZhciBfZTtyZXR1cm4gRih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29u'@;
put 'c3QgVGU9dGhpcy5nZXRIZWFkZXJzKGdlLCJhcHBsaWNhdGlvbi9qc29uIik7bnVsbCE9PShfZT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pJiZ2b2lkIDAhPT1fZSYmX2UudmFsdWUmJihUZVt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5maWxlVXBsb2FkQ3Ny'@;
put 'ZlRva2VuLnZhbHVlKTt0cnl7Y29uc3QgU2U9eWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsc2Use2hlYWRlcnM6VGUsdHJhbnNmb3JtUmVxdWVzdDp6ZT0+emV9KTtyZXR1cm57cmVzdWx0OlNlLmRhdGEsZXRhZzpTZS5oZWFkZXJzLmV0YWd9fWNhdGNoKFNlKXtjb25zdCB6ZT1TZS5y'@;
put 'ZXNwb25zZTtpZig0MDM9PT16ZT8uc3RhdHVzfHw0NDk9PT16ZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbih6ZSksdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0aGlzLnVwbG9hZEZpbGUoaWUsc2UsZ2UpO3Rocm93IFNlfXRocm93IFNl'@;
put 'fX0pfXBhcnNlUmVzcG9uc2UoaWUpe2NvbnN0IHNlPWllPy5oZWFkZXJzP2llLmhlYWRlcnMuZXRhZzoiIjtsZXQgZ2UsX2U9ITE7dHJ5e2dlPSJzdHJpbmciPT10eXBlb2YgaWUuZGF0YT9KU09OLnBhcnNlKGllLmRhdGEpOmllLmRhdGF9Y2F0Y2h7dHJ5e2dlPUpTT04ucGFyc2UoKDAsUC5w'@;
put 'YXJzZVdlYm91dFJlc3BvbnNlKShpZS5kYXRhKSl9Y2F0Y2h7Z2U9aWUuZGF0YX1fZT0hMH1sZXQgVGU9e3Jlc3VsdDpnZSxldGFnOnNlLHN0YXR1czppZS5zdGF0dXN9O3JldHVybiBfZSYmKFRlLmxvZz1pZS5kYXRhKSxUZX1jcmVhdGVIdHRwQ2xpZW50KGllLHNlKXtjb25zdCBnZT1zZT9u'@;
put 'ZXcgSC5BZ2VudChzZSk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxCLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGllLGdlKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9X2U9Pl9lPj0yMDAmJl9lPD00MDF9fSxKLnRocm93SWZFcnJvcj10ZT0+e3ZhciBpZSxzZSxn'@;
put 'ZSxfZSxUZSxTZSx6ZTtzd2l0Y2godGUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIHRlLmRhdGEmJiJpbnZhbGlkX2dyYW50Ij09PXRlLmRhdGEuZXJyb3IpdGhyb3cgbmV3IGouTG9naW5SZXF1aXJlZEVycm9yKHRlLmRhdGEpO2lmKCJzdHJpbmciPT10eXBlb2YgdGUu'@;
put 'ZGF0YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09dGUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBXLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgdGUuZGF0YT9uZXcgai5Mb2dpblJlcXVpcmVkRXJyb3IodGUuZGF0YSk6'@;
put 'bmV3IGouTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0oc2U9bnVsbD09PShpZT10ZS5kYXRhKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLmVudGl0eUlEKSYmdm9pZCAwIT09c2UmJnNlLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyBqLkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIHRlLmRhdGEmJigwLFIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHRlLmRhdGEpKXRocm93IG5ldyBqLkF1dGhvcml6ZUVycm9yKCJBdXRob3JpemF0aW9uIHJlcXVpcmVkIix0ZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIHRlLmRhdGEm'@;
put 'JigwLFIuaXNMb2dJblJlcXVpcmVkKSh0ZS5kYXRhKSYmKG51bGw9PT0oX2U9bnVsbD09PShnZT10ZS5jb25maWcpfHx2b2lkIDA9PT1nZT92b2lkIDA6Z2UudXJsKXx8dm9pZCAwPT09X2V8fCFfZS5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyBqLkxvZ2luUmVxdWly'@;
put 'ZWRFcnJvcjtpZihudWxsIT09KFRlPXRlLmRhdGEpJiZ2b2lkIDAhPT1UZSYmVGUuYXV0aF9yZXF1ZXN0KXRocm93IG5ldyBqLkF1dGhvcml6ZUVycm9yKHRlLmRhdGEubWVzc2FnZSx0ZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KHplPW51bGw9PT0oU2U9dGUuY29uZmlnKXx8'@;
put 'dm9pZCAwPT09U2U/dm9pZCAwOlNlLnVybCkmJnZvaWQgMCE9PXplJiZ6ZS5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IFkuU0FTOUF1dGhFcnJvcjtjb25zdCB6PXEodGUuZGF0YSk7aWYoeil0aHJvdyB6fTtjb25zdCBxPXRlPT57aWYoIXRlKXJldHVybiBudWxsO3RyeXtj'@;
put 'b25zdCBpZT1KU09OLnBhcnNlKHRlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihpZS5lcnJvckNvZGUmJmllLm1lc3NhZ2UpcmV0dXJuIG5ldyBqLkpvYkV4ZWN1dGlvbkVycm9yKGllLmVycm9yQ29kZSxpZS5tZXNzYWdlLHRlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9'@;
put 'dHJ5e2lmKHRlPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3Qgc2U9dGUuc3BsaXQoJ3siZXJyb3JDb2RlJyk7aWYoc2UubGVuZ3RoPjEpe2NvbnN0IGdlPSd7ImVycm9yQ29kZScrc2VbMV0uc3BsaXQoJyJ9JylbMF0rJyJ9JyxfZT1KU09OLnBhcnNlKGdlLnJlcGxhY2UoL1tcblxy'@;
put 'XS9nLCIgIikpO3JldHVybiBuZXcgai5Kb2JFeGVjdXRpb25FcnJvcihfZS5lcnJvckNvZGUsX2UubWVzc2FnZSx0ZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX19Y2F0Y2h7fXRyeXtpZih0ZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKXtjb25zdCBzZT10ZS5z'@;
put 'cGxpdCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSk7aWYoc2UubGVuZ3RoPjEpe2NvbnN0IGdlPXNlWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLF9lPWdlLmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMgcnVubmVyIG5vdCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5r'@;
put 'IChodHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6YFN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogJHtnZX1gO3JldHVybiBuZXcgai5Kb2JFeGVjdXRpb25FcnJvcig1MDAsX2Us'@;
put 'IiIpfX19Y2F0Y2h7fXRyeXtpZighdGU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmdGU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmdGU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLi9pKSl7Y29uc3Qgc2U9dGUuc3BsaXQoIjxoMj5TQVMg'@;
put 'TG9nPC9oMj4iKTtpZihzZS5sZW5ndGg+MSl7Y29uc3QgZ2U9c2VbMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgai5Kb2JFeGVjdXRpb25FcnJvcig1MDAsIlRoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuIixnZSl9fX1jYXRjaHt9'@;
put 'cmV0dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsWSxCLFcpe3ZvaWQgMD09PVcmJihXPUIpO3ZhciBaPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny'@;
put 'aXB0b3IoWSxCKTsoIVp8fCgiZ2V0ImluIFo/IVkuX19lc01vZHVsZTpaLndyaXRhYmxlfHxaLmNvbmZpZ3VyYWJsZSkpJiYoWj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWVtCXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTCxXLFopfTpmdW5jdGlvbihMLFksQixX'@;
put 'KXt2b2lkIDA9PT1XJiYoVz1CKSxMW1ddPVlbQl19KSxfPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihMLFkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShMLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpZfSl9OmZ1bmN0aW9uKEws'@;
put 'WSl7TC5kZWZhdWx0PVl9KSxwPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihMKXtpZihMJiZMLl9fZXNNb2R1bGUpcmV0dXJuIEw7dmFyIFk9e307aWYobnVsbCE9TClmb3IodmFyIEIgaW4gTCkiZGVmYXVsdCIhPT1CJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'LmNhbGwoTCxCKSYmRChZLEwsQik7cmV0dXJuIF8oWSxMKSxZfSxOPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLFksQixXKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFEpe2Z1bmN0aW9uIHEoc2Upe3RyeXtpZShXLm5leHQoc2UpKX1jYXRjaChnZSl7'@;
put 'UShnZSl9fWZ1bmN0aW9uIHRlKHNlKXt0cnl7aWUoVy50aHJvdyhzZSkpfWNhdGNoKGdlKXtRKGdlKX19ZnVuY3Rpb24gaWUoc2Upe3NlLmRvbmU/WChzZS52YWx1ZSk6ZnVuY3Rpb24gWihYKXtyZXR1cm4gWCBpbnN0YW5jZW9mIEI/WDpuZXcgQihmdW5jdGlvbihRKXtRKFgpfSl9KHNlLnZh'@;
put 'bHVlKS50aGVuKHEsdGUpfWllKChXPVcuYXBwbHkoTCxZfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouU2FzOVJlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IHc9Yig4MjI0KSxGPXAoYig3ODU3KSksSD1iKDk3Nzgp'@;
put 'LFI9Yig0NTg4KSxqPWIoMTM5NSk7Si5TYXM5UmVxdWVzdENsaWVudD1jbGFzcyBQIGV4dGVuZHMgUi5SZXF1ZXN0Q2xpZW50e2NvbnN0cnVjdG9yKFksQil7c3VwZXIoWSxCKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMubWF4UmVkaXJlY3RzPTAsdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRz'@;
put 'LnZhbGlkYXRlU3RhdHVzPVc9Plc+PTIwMCYmVzwzMDMsdy53cmFwcGVyJiYoKDAsdy53cmFwcGVyKSh0aGlzLmh0dHBDbGllbnQpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXI9bmV3IEYuQ29va2llSmFyKX1sb2dpbihZLEIsVyl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKigpe2NvbnN0IFo9YC9Vc2VyIEZvbGRlcnMvJHtZfS9NeSBGb2xkZXIvc2FzanMvcnVubmVyYDt0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyJiYodGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphci5yZW1vdmVBbGxDb29raWVzKCkseWllbGQgdGhpcy5nZXQoYCR7V30/X3By'@;
put 'b2dyYW09JHtafSZfdXNlcm5hbWU9JHtZfSZfcGFzc3dvcmQ9JHtCfWAsdm9pZCAwLCJ0ZXh0L3BsYWluIikpfSl9Z2V0KFksQixXPSJhcHBsaWNhdGlvbi9qc29uIixaPXt9LFg9ITEpe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBxPXtoZWFkZXJzOk9i'@;
put 'amVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoQixXKSksWikscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PVc/InRleHQiOiJqc29uIix3aXRoWFNSRlRva2VuOiEwfTtyZXR1cm4idGV4dC9wbGFpbiI9PT1XJiYocS50cmFuc2Zvcm1SZXNwb25zZT12b2lk'@;
put 'IDApLHRoaXMuaHR0cENsaWVudC5nZXQoWSxxKS50aGVuKHRlPT4zMDI9PT10ZS5zdGF0dXM/dGhpcy5nZXQodGUuaGVhZGVycy5sb2NhdGlvbixCLFcpOigoMCxSLnRocm93SWZFcnJvcikodGUpLHRoaXMucGFyc2VSZXNwb25zZSh0ZSkpKS5jYXRjaCh0ZT0+Tih0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24qKCl7aWYodGUgaW5zdGFuY2VvZiBqLkpvYkV4ZWN1dGlvbkVycm9yKXRocm93IHRlO3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKHRlLCgpPT50aGlzLmdldChZLEIsVyxaKS5jYXRjaChpZT0+e3Rocm93KDAsSC5wcmVmaXhNZXNzYWdlKShpZSwiRXJyb3Igd2hp'@;
put 'bGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KSxYKS5jYXRjaChpZT0+e3Rocm93KDAsSC5wcmVmaXhNZXNzYWdlKShpZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfSl9KSl9KX1wb3N0KFksQixXLFo9ImFwcGxpY2F0aW9uL2pzb24iLFg9e30pe3JldHVy'@;
put 'biBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBRPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoVyxaKSksWCk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFksQix7aGVhZGVyczpRLHdpdGhYU1JGVG9rZW46ITB9KS50aGVu'@;
put 'KHE9Pk4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiAzMDI9PT1xLnN0YXR1cz95aWVsZCB0aGlzLmdldChxLmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLFosWCk6KCgwLFIudGhyb3dJZkVycm9yKShxKSx0aGlzLnBhcnNlUmVzcG9uc2UocSkpfSkpLmNhdGNoKHE9Pk4o'@;
put 'dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKHEsKCk9PnRoaXMucG9zdChZLEIsVyxaLFgpKX0pKX0pfX19LDM2MDI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLEouU0FTSlNfTE9HU19TRVBBUkFUT1I9Si5TYXNqc1JlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IEQ9Yig0NTg4KTtKLlNhc2pzUmVxdWVzdENsaWVudD1jbGFzcyBfIGV4dGVuZHMgRC5SZXF1ZXN0Q2xpZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0'@;
put 'aGlzLmdldEhlYWRlcnM9KE4sdyk9Pnt2YXIgRjtjb25zdCBIPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09dyYmKEhbIkNvbnRlbnQtVHlwZSJdPXcpLEguQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PXc/dzoiKi8qIiwhTiYmdHlwZW9mIHdpbmRv'@;
put 'dzwidSImJihOPW51bGwhPT0oRj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4iKSkmJnZvaWQgMCE9PUY/Rjp2b2lkIDApLE4mJihILkF1dGhvcml6YXRpb249YEJlYXJlciAke059YCksSH19cGFyc2VSZXNwb25zZShOKXtjb25zdCB3PU4/LmhlYWRlcnM/Ti5oZWFkZXJzLmV0'@;
put 'YWc6IiI7bGV0IEgsUixqLEY9e307dHJ5e0Y9InN0cmluZyI9PXR5cGVvZiBOLmRhdGE/SlNPTi5wYXJzZShOLmRhdGEpOk4uZGF0YX1jYXRjaHtpZihOLmRhdGEuaW5jbHVkZXMoSi5TQVNKU19MT0dTX1NFUEFSQVRPUikpe2NvbnN0e2RhdGE6WX09TixCPVkuc3BsaXQoSi5TQVNKU19MT0dT'@;
put 'X1NFUEFSQVRPUik7SD1CLnNwbGljZSgwLDEpWzBdLHZvaWQgMCE9PUgmJihGPUgpO2NvbnN0IFc9Qi5zcGxpY2UoMCxCLmxlbmd0aC0xKSxaPW5ldyBSZWdFeHAoYCR7Si5TQVNKU19MT0dTX1NFUEFSQVRPUn0kYCksWD1CWzBdO1gmJihaLnRlc3QoWSk/Vy5sZW5ndGg+MSYmVy5wdXNoKFgp'@;
put 'Omo9WCksUj1XLmpvaW4oSi5TQVNKU19MT0dTX1NFUEFSQVRPUil9ZWxzZSBGPU4uZGF0YX1jb25zdCBQPXtyZXN1bHQ6Rixsb2c6Unx8IiIsZXRhZzp3LHN0YXR1czpOLnN0YXR1c307cmV0dXJuIGomJihQLnByaW50T3V0cHV0PWopLFB9fSxKLlNBU0pTX0xPR1NfU0VQQVJBVE9SPSJTQVNK'@;
put 'U19MT0dTX1NFUEFSQVRPUl8xNjNlZTE3YjZmZjI0ZjAyODkyODk3MmQ4MGEyNjc4NCJ9LDQ3MDooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NjY2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTc2NjooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OTc1OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pfSw0NzgyOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQxNjg6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KX0sODUxNjooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzODQwOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDMxNTM6'@;
put 'KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTQyODooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOihjZSxKKT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgRCxfO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkxvZ2luTWVjaGFuaXNtPUouU0FTanNDb25maWc9dm9pZCAwLEouU0FTanNDb25maWc9Y2xhc3MgYntjb25zdHJ1Y3Rvcigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMu'@;
put 'cGF0aFNBU0pTPSIiLHRoaXMucGF0aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMudmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRoaXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMu'@;
put 'bG9naW5NZWNoYW5pc209RC5EZWZhdWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMH19LChfPUQ9Si5Mb2dpbk1lY2hhbmlzbXx8KEouTG9naW5NZWNoYW5pc209e30pKS5EZWZhdWx0PSJEZWZhdWx0IixfLlJlZGlyZWN0ZWQ9IlJlZGlyZWN0ZWQifSw2MDM4OihjZSxKKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TZXNzaW9uU3RhdGU9dm9pZCAwLChEPUouU2Vzc2lvblN0YXRlfHwoSi5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsRC5SdW5uaW5nPSJydW5uaW5n'@;
put 'IixELlBlbmRpbmc9InBlbmRpbmciLEQuSWRsZT0iaWRsZSIsRC5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLEQuTm9TdGF0ZT0iIixELkZhaWxlZD0iZmFpbGVkIixELkVycm9yPSJlcnJvciJ9LDk0OTM6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJf'@;
put 'X2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODY1MDooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxMjQ6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxKLkF1dGhvcml6ZUVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxwKXtzdXBlcihfKSx0aGlzLm1lc3NhZ2U9Xyx0aGlzLmNvbmZpcm1Vcmw9cCx0aGlzLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2Yo'@;
put 'dGhpcyxiLnByb3RvdHlwZSl9fUouQXV0aG9yaXplRXJyb3I9Yn0sOTQ2NTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouQ2VydGlmaWNhdGVFcnJvcj12b2lkIDA7Y2xhc3MgRCBleHRlbmRzIEVycm9ye2Nv'@;
put 'bnN0cnVjdG9yKHApe3N1cGVyKGAke3B9XG5QbGVhc2UgdmlzaXQgdGhlIGxpbmsgYmVsb3cgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcyBpc3N1ZTpcbi0gaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NFxuYCks'@;
put 'dGhpcy5uYW1lPSJDZXJ0aWZpY2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxELnByb3RvdHlwZSl9fUouQ2VydGlmaWNhdGVFcnJvcj1EfSw1MjY3OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSksSi5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHApe3N1cGVyKCJFcnJvcjogSm9iIGV4ZWN1dGlvbiBmYWlsZWQiKSx0aGlzLmpvYj1fLHRoaXMubG9nPXAsdGhpcy5uYW1lPSJDb21wdXRlSm9iRXhlY3V0aW9u'@;
put 'RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9Yn0sOTIzMjooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouRXJyb3JSZXNw'@;
put 'b25zZT12b2lkIDAsSi5FcnJvclJlc3BvbnNlPWNsYXNzIGJ7Y29uc3RydWN0b3IoXyxwLE4pe2xldCB3PXA7aWYoIm9iamVjdCIhPXR5cGVvZiBwKXRyeXt3PUpTT04ucGFyc2UocCl9Y2F0Y2h7Tj1wLHc9IiJ9dGhpcy5lcnJvcj17bWVzc2FnZTpfLGRldGFpbHM6dyxyYXc6Tn19fX0sNTEw'@;
put 'OTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBJbnRlcm5hbCBzZXJ2'@;
put 'ZXIgZXJyb3IuIiksdGhpcy5uYW1lPSJJbnRlcm5hbFNlcnZlckVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fUouSW50ZXJuYWxTZXJ2ZXJFcnJvcj1ifSw1NTE4OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksSi5JbnZhbGlkSnNvbkVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IGludmFsaWQgSnNvbiBzdHJpbmciKSx0aGlzLm5hbWU9IkludmFsaWRKc29uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5'@;
put 'cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5JbnZhbGlkSnNvbkVycm9yPWJ9LDEwMDU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkludmFsaWRTQVNqc0NzcmZFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRl'@;
put 'bmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkF1dGggZXJyb3I6IEludmFsaWQgQ1NSRiB0b2tlbiEiKSx0aGlzLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1KLkludmFsaWRTQVNqc0NzcmZFcnJvcj1i'@;
put 'fSw4NTMxOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5Kb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8scCxOKXtzdXBlcihgRXJyb3IgQ29kZSAk'@;
put 'e199OiAke3B9YCksdGhpcy5lcnJvckNvZGU9Xyx0aGlzLmVycm9yTWVzc2FnZT1wLHRoaXMucmVzdWx0PU4sdGhpcy5uYW1lPSJKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1KLkpvYkV4ZWN1dGlvbkVycm9yPWJ9LDkwNzk6KGNl'@;
put 'LEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkpvYlN0YXRlUG9sbEVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxwKXtzdXBlcihgRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Ig'@;
put 'c3RhdGUgZm9yIGpvYiAke199OiAke3AubWVzc2FnZXx8cH1gKSx0aGlzLm9yaWdpbmFsRXJyb3I9cCx0aGlzLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fUouSm9iU3RhdGVQb2xsRXJyb3I9Yn0sMzA5NjooY2UsSik9'@;
put 'PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouSnNvblBhcnNlQXJyYXlFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRv'@;
put 'IGpzb24uIiksdGhpcy5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fUouSnNvblBhcnNlQXJyYXlFcnJvcj1ifSw2NzQzOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksSi5Mb2dpblJlcXVpcmVkRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgQXV0aCBlcnJvcjogJHtfP0pTT04uc3RyaW5naWZ5KF8sbnVsbCwyKToiWW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0'@;
put 'aGlzIHJlc291cmNlIn1gKSx0aGlzLm5hbWU9IkxvZ2luUmVxdWlyZWRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1KLkxvZ2luUmVxdWlyZWRFcnJvcj1ifSw3ODY0OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5Ob1Nlc3Npb25TdGF0ZUVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxwLE4pe3N1cGVyKGBDb3VsZCBub3QgZ2V0IHNlc3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAke199IHdoaWxzdCBj'@;
put 'aGVja2luZyBzdGF0ZTogJHtwfWApLHRoaXMuc2VydmVyUmVzcG9uc2VTdGF0dXM9Xyx0aGlzLnNlc3Npb25TdGF0ZVVybD1wLHRoaXMubG9nVXJsPU4sdGhpcy5uYW1lPSJOb1Nlc3Npb25TdGF0dXMiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5Ob1Nlc3Np'@;
put 'b25TdGF0ZUVycm9yPWJ9LDk1Nzc6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLk5vdEZvdW5kRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgRXJyb3I6'@;
put 'IFJlc291cmNlIGF0ICR7X30gd2FzIG5vdCBmb3VuZGApLHRoaXMudXJsPV8sdGhpcy5uYW1lPSJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fUouTm90Rm91bmRFcnJvcj1ifSw5Mjc5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPXZvaWQgMDtjb25zdCBEPWIoNjc5OSk7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKE4sdyxGKXtsZXQgSD1gUm9vdCBmb2xkZXIgJHtOfSB3YXMgbm90'@;
put 'IGZvdW5kLlxuUGxlYXNlIGNoZWNrICR7d30vU0FTRHJpdmUuXG5JZiB0aGUgZm9sZGVyIERPRVMgZXhpc3QgdGhlbiBpdCBpcyBsaWtlbHkgYSBwZXJtaXNzaW9uIHByb2JsZW0uXG5gO2lmKEYpe2xldCBqPSgwLEQuZGVjb2RlVG9rZW4pKEYpLnNjb3BlO2o9ai5tYXAoUD0+IiogIitQKSxI'@;
put 'Kz0iWW91ciBhY2Nlc3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzY29wZXM6XG4iK2ouam9pbigiXG4iKX1zdXBlcihIKSx0aGlzLm5hbWU9IlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fUouUm9vdEZvbGRl'@;
put 'ck5vdEZvdW5kRXJyb3I9X30sOTUyNjooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouU0FTOUF1dGhFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRoZSBj'@;
put 'cmVkZW50aWFscyB5b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2V0IG9mIGNyZWRlbnRpYWxzLiIpLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5T'@;
put 'QVM5QXV0aEVycm9yPWJ9LDg4NzU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLldlYm91dFJlc3BvbnNlRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihg'@;
put 'RXJyb3I6IGVycm9yIHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAke199YCksdGhpcy51cmw9Xyx0aGlzLm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5XZWJvdXRSZXNwb25zZUVycm9yPWJ9LDEzOTU6ZnVu'@;
put 'Y3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpO3ZhciBIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTix3KTsoIUh8fCgiZ2V0'@;
put 'ImluIEg/IU4uX19lc01vZHVsZTpILndyaXRhYmxlfHxILmNvbmZpZ3VyYWJsZSkpJiYoSD17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxGLEgpfTpmdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxw'@;
put 'W0ZdPU5bd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLE4pe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTix3KSYmRChOLHAsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoMTI0KSxKKSxfKGIoOTQ2NSksSiksXyhiKDUyNjcpLEopLF8oYig5MjMyKSxKKSxfKGIoNTEwOSksSiksXyhiKDU1MTgpLEopLF8oYig4NTMxKSxKKSxfKGIoOTA3OSksSiksXyhiKDMwOTYpLEopLF8oYig2NzQzKSxKKSxfKGIoNzg2NCksSiksXyhi'@;
put 'KDk1NzcpLEopLF8oYig5Mjc5KSxKKSxfKGIoODg3NSksSil9LDEyMzA6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpO3ZhciBIPU9i'@;
put 'amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTix3KTsoIUh8fCgiZ2V0ImluIEg/IU4uX19lc01vZHVsZTpILndyaXRhYmxlfHxILmNvbmZpZ3VyYWJsZSkpJiYoSD17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'cCxGLEgpfTpmdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxwW0ZdPU5bd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLE4pe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo'@;
put 'Tix3KSYmRChOLHAsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoNDcwKSxKKSxfKGIoNDY2NiksSiksXyhiKDQ5NzUpLEopLF8oYig1NzY2KSxKKSxfKGIoMjE1KSxKKSxfKGIoNDc4MiksSiksXyhiKDQxNjgpLEopLF8oYig4NTE2KSxK'@;
put 'KSxfKGIoMzg0MCksSiksXyhiKDU4NDEpLEopLF8oYigxNDI4KSxKKSxfKGIoNjAzOCksSiksXyhiKDk0OTMpLEopLF8oYigzMTUzKSxKKSxfKGIoODY1MCksSiksXyhiKDYxNzcpLEopLF8oYigxMzk1KSxKKX0sMzMwMjpmdW5jdGlvbihjZSxKKXsidXNlIHN0cmljdCI7dmFyIGI9dGhpcyYm'@;
put 'dGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKF8scCxOLHcpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKEgsUil7ZnVuY3Rpb24gaihZKXt0cnl7TCh3Lm5leHQoWSkpfWNhdGNoKEIpe1IoQil9fWZ1bmN0aW9uIFAoWSl7dHJ5e0wody50aHJvdyhZKSl9Y2F0Y2goQil7UihC'@;
put 'KX19ZnVuY3Rpb24gTChZKXtZLmRvbmU/SChZLnZhbHVlKTpmdW5jdGlvbiBGKEgpe3JldHVybiBIIGluc3RhbmNlb2YgTj9IOm5ldyBOKGZ1bmN0aW9uKFIpe1IoSCl9KX0oWS52YWx1ZSkudGhlbihqLFApfUwoKHc9dy5hcHBseShfLHB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz12b2lkIDAsSi5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbiBEKF8scCl7cmV0dXJuIGIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xl'@;
put 'dCBOPXt9O2lmKHA/Lmxlbmd0aCl7Y29uc3Qgdz1wLnJlZHVjZSgoRixIKT0+KEZbSF09X1tIXSxGKSx7fSk7Tj1PYmplY3QuYXNzaWduKHtyZXN1bHQ6Xy5yZXN1bHR9LHcpfWVsc2UgTj1fLnJlc3VsdDtyZXR1cm4gTn0pfX0sNzkyMjpmdW5jdGlvbihjZSxKKXsidXNlIHN0cmljdCI7dmFy'@;
put 'IGI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKF8scCxOLHcpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKEgsUil7ZnVuY3Rpb24gaihZKXt0cnl7TCh3Lm5leHQoWSkpfWNhdGNoKEIpe1IoQil9fWZ1bmN0aW9uIFAoWSl7dHJ5e0wody50aHJvdyhZKSl9Y2F0'@;
put 'Y2goQil7UihCKX19ZnVuY3Rpb24gTChZKXtZLmRvbmU/SChZLnZhbHVlKTpmdW5jdGlvbiBGKEgpe3JldHVybiBIIGluc3RhbmNlb2YgTj9IOm5ldyBOKGZ1bmN0aW9uKFIpe1IoSCl9KX0oWS52YWx1ZSkudGhlbihqLFApfUwoKHc9dy5hcHBseShfLHB8fFtdKSkubmV4dCgpKX0pfTtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5hc3luY0ZvckVhY2g9dm9pZCAwLEouYXN5bmNGb3JFYWNoPWZ1bmN0aW9uIEQoXyxwKXtyZXR1cm4gYih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Zm9yKGxldCBOPTA7TjxfLmxlbmd0aDtOKysp'@;
put 'eWllbGQgcChfW05dLE4sXyl9KX19LDM3OTM6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmNvbXBhcmVUaW1lc3RhbXBzPXZvaWQgMCxKLmNvbXBhcmVUaW1lc3RhbXBzPShELF8pPT5fLnRpbWVzdGFtcC5n'@;
put 'ZXRUaW1lKCktRC50aW1lc3RhbXAuZ2V0VGltZSgpfSwyNDAyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouaXNGb3JtYXRzVGFibGU9Si5jb252ZXJ0VG9DU1Y9dm9pZCAwO2Nv'@;
put 'bnN0IF89Yig2NDY3KSxwPWIoOTc3OCk7Si5jb252ZXJ0VG9DU1Y9KEgsUik9Pnt2YXIgajtpZighSFtSXSl7Y29uc3QgUT0oMCxwLnByZWZpeE1lc3NhZ2UpKCJObyB0YWJsZSBwcm92aWRlZCB0byBiZSBjb252ZXJ0ZWQgdG8gQ1NWLiIsIkVycm9yIHdoaWxlIGNvbnZlcnRpbmcgdG8gQ1NW'@;
put 'LiAiKTt0aHJvdyJzdHJpbmciPT10eXBlb2YgUT9uZXcgRXJyb3IoUSk6UX1jb25zdCBQPUhbUl07aWYoIUFycmF5LmlzQXJyYXkoUCkpcmV0dXJuIiI7bGV0IEIsTD1udWxsPT09KGo9SFtgJCR7Un1gXSl8fHZvaWQgMD09PWo/dm9pZCAwOmouZm9ybWF0cyxZPVtdLFc9ITE7TCYmKFk9T2Jq'@;
put 'ZWN0LmtleXMoTCkubWFwKFE9PmAke1F9OiR7TFtRXX1gKSk7Y29uc3QgWj1PYmplY3Qua2V5cyhQWzBdKTtyZXR1cm4gWi5mb3JFYWNoKFE9PntpZighTHx8IU9iamVjdC5rZXlzKEwpLmluY2x1ZGVzKFEpKXtsZXQgcT0hMSx0ZT0hMTtpZihQLmZvckVhY2goaWU9PntudWxsPT09aWVbUV18'@;
put 'fCJudW1iZXIiPT10eXBlb2YgaWVbUV0/cT0hMDoic3RyaW5nIj09dHlwZW9mIGllW1FdJiYoMCxfLmlzU3BlY2lhbE1pc3NpbmcpKGllW1FdKSYmKHRlPSEwKX0pLHEmJnRlKVkucHVzaChgJHtRfTpiZXN0LmApLEx8fChMPXt9KSxMW1FdPSJiZXN0LiI7ZWxzZXtsZXQgaWU9bnVsbCxzZT0h'@;
put 'MSxnZT0tMTtjb25zdCBfZT1QLm1hcCgoVGUsU2UpPT57aWYoVGVbUV18fCIiPT09VGVbUV0pe2xldCB6ZTtyZXR1cm4gaWU/c2V8fChzZT0oIiI9PT1UZVtRXXx8InN0cmluZyI9PXR5cGVvZiBUZVtRXT8iY2hhcnMiOiJudW1iZXIiKSE9PWllLGdlPXNlP1NlKzE6LTEpOmllPSIiPT09VGVb'@;
put 'UV18fCJzdHJpbmciPT10eXBlb2YgVGVbUV0/ImNoYXJzIjoibnVtYmVyIiwic3RyaW5nIj09dHlwZW9mIFRlW1FdJiYoemU9RihUZVtRXSkpLHplfX0pLnNvcnQoKFRlLFNlKT0+U2UtVGUpWzBdO19lJiZfZT4zMjc2NSYmKFc9ITApLHNlJiZELmVycm9yKGBSb3cgKCR7Z2V9KSwgQ29sdW1u'@;
put 'ICgke1F9KSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9SYCksWS5wdXNoKGAke1F9OiR7ImNoYXJzIj09PWllPyIkY2hhciI6IiJ9JHtfZXx8KCJjaGFycyI9PT1pZT8iMSI6ImJlc3QiKX0uYCl9fX0pLEwmJihZPVkuc29ydCgoUSxxKT0+Wi5pbmRleE9mKFEucmVwbGFjZSgvOi4qLywiIikpLVou'@;
put 'aW5kZXhPZihxLnJlcGxhY2UoLzouKi8sIiIpKSkpLFc/IkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIjooQj1QLm1hcChRPT5PYmplY3Qua2V5cyhRKS5tYXAoKHRlLGllKT0+e2xldCBzZTtjb25zdCBnZT1RW3RlXTtpZigibnVtYmVyIj09dHlwZW9mIGdlKXJldHVybiBnZTtpZihzZT1u'@;
put 'dWxsPT09Z2U/IiI6Z2UsTCYmImJlc3QuIj09PUxbdGVdKXtpZihzZSYmISgwLF8uaXNTcGVjaWFsTWlzc2luZykoc2UpKXRocm93IG5ldyBFcnJvcigiQSBTcGVjaWFsIG1pc3NpbmcgdmFsdWUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gJ0EnIHRvICdaJywgJ18nLCAn'@;
put 'LlthLXpdJywgJy5fJyIpO3JldHVybmAke3NlLmluY2x1ZGVzKCIuIik/IiI6Ii4ifSR7c2UudG9Mb3dlckNhc2UoKX1gfXJldHVybiBzZT1zZS5yZXBsYWNlKC8iL2csJyIiJyksc2U9YCIke3NlfSJgLHNlLnN1YnN0cmluZygxLHNlLmxlbmd0aC0xKS5zZWFyY2goLyhcdHxcbnxccnwsfFwn'@;
put 'fFwiKS9nbSk8MCYmKHNlPXNlLnN1YnN0cmluZygxLHNlLmxlbmd0aC0xKSksc2U9c2UucmVwbGFjZSgvXHJcbi9nbSwiXG4iKSwiIj09PXNlJiZZW2llXS5pbmNsdWRlcygiYmVzdCIpJiYoc2U9Ii4iKSxzZX0pLmpvaW4oIiwiKSksWS5qb2luKCIsIikucmVwbGFjZSgvLC9nLCIgIikrIlxy'@;
put 'XG4iK0Iuam9pbigiXHJcbiIpKX0sSi5pc0Zvcm1hdHNUYWJsZT1IPT4vXlwkLiovLnRlc3QoSCk7Y29uc3QgRj1IPT57bGV0IFI9SC5sZW5ndGg7Zm9yKGxldCBqPUgubGVuZ3RoLTE7aj49MDtqLS0pe2NvbnN0IFA9SC5jaGFyQ29kZUF0KGopO1A+MTI3JiZQPD0yMDQ3P1IrKzpQPjIwNDcm'@;
put 'JlA8PTY1NTM1JiYoUis9MiksUD49NTYzMjAmJlA8PTU3MzQzJiZqLS19cmV0dXJuIFJ9fSw2MTE2OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1'@;
put 'bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmNyZWF0ZUF4aW9zSW5zdGFuY2U9dm9pZCAwO2NvbnN0IF89RChiKDcyMTgpKTtKLmNyZWF0ZUF4aW9zSW5zdGFuY2U9KE4sdyk9Pl8uZGVmYXVsdC5jcmVhdGUoe2Jhc2VVUkw6TixodHRw'@;
put 'c0FnZW50Ond9KX0sOTgyNTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZGVsYXk9dm9pZCAwLEouZGVsYXk9RD0+bmV3IFByb21pc2UoXz0+c2V0VGltZW91dChfLEQpKX0sOTkwOmZ1bmN0aW9uKGNlLEos'@;
put 'Yil7InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEgsUixqLFApe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKFksQil7ZnVuY3Rpb24gVyhRKXt0cnl7WChQLm5leHQoUSkpfWNhdGNoKHEpe0Io'@;
put 'cSl9fWZ1bmN0aW9uIFooUSl7dHJ5e1goUC50aHJvdyhRKSl9Y2F0Y2gocSl7QihxKX19ZnVuY3Rpb24gWChRKXtRLmRvbmU/WShRLnZhbHVlKTpmdW5jdGlvbiBMKFkpe3JldHVybiBZIGluc3RhbmNlb2Ygaj9ZOm5ldyBqKGZ1bmN0aW9uKEIpe0IoWSl9KX0oUS52YWx1ZSkudGhlbihXLFop'@;
put 'fVgoKFA9UC5hcHBseShILFJ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5mZXRjaExvZz1KLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO2NvbnN0IE49Yig5Nzc4KTtKLmZldGNoTG9nQnlDaHVua3M9KEgsUixqLFAp'@;
put 'PT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCgwLEouZmV0Y2hMb2cpKEgsUixqLDAsUCl9KSxKLmZldGNoTG9nPShILFIsaixQLEwpPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9RC5sb2dnZXJ8fF87bGV0IEI9IiI7'@;
put 'Y29uc3QgVz1MPDFlND9MOjFlNDtkb3tZLmluZm8oYEZldGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAke1ArMX0gdG8gJHtQK1d9IG9mICR7TH0uYCk7Y29uc3QgWj15aWVsZCBILmdldChgJHtqfT9zdGFydD0ke1B9JmxpbWl0PSR7V31gLFIpLnRoZW4oUT0+US5yZXN1bHQpLmNhdGNoKFE9'@;
put 'Pnt0aHJvdygwLE4ucHJlZml4TWVzc2FnZSkoUSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsb2cuICIpfSk7aWYoMD09PVouaXRlbXMubGVuZ3RoKWJyZWFrO0IrPVouaXRlbXMubWFwKFE9PlEubGluZSkuam9pbigiXG4iKSxQKz1XfXdoaWxlKFA8TCk7cmV0dXJuIEJ9KX0sNzE0OihjZSxKLGIp'@;
put 'PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDtjb25zdCBEPWIoMjQwMiksXz1iKDQ3OTkpO0ouZm9ybWF0RGF0YUZvclJlcXVlc3Q9Tj0+e2NvbnN0IHc9W107bGV0IEY9'@;
put 'MDtjb25zdCBIPXt9O2Zvcihjb25zdCBSIGluIE4pe2lmKCgwLEQuaXNGb3JtYXRzVGFibGUpKFIpJiZPYmplY3Qua2V5cyhOKS5pbmNsdWRlcyhSLnJlcGxhY2UoL15cJC8sIiIpKSljb250aW51ZTtGKyssKDAsRC5pc0Zvcm1hdHNUYWJsZSkoUil8fHcucHVzaChSKTtjb25zdCBqPSgwLEQu'@;
put 'Y29udmVydFRvQ1NWKShOLFIpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1qKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZihqLmxlbmd0aD4xNmUzKXtjb25zdCBQPSgw'@;
put 'LF8uc3BsaXRDaHVua3MpKGopO0hbYHNhc2pzJHtGfWRhdGEwYF09UC5sZW5ndGgsUC5mb3JFYWNoKChMLFkpPT57SFtgc2FzanMke0Z9ZGF0YSR7WSsxfWBdPUx9KX1lbHNlIEhbYHNhc2pzJHtGfWRhdGFgXT1qfXJldHVybiBILnNhc2pzX3RhYmxlcz13LmpvaW4oIiAiKSxIfX0sODQ1ODpm'@;
put 'dW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5n'@;
put 'ZXRGb3JtRGF0YT12b2lkIDA7Y29uc3QgXz1iKDU5MjgpLHA9RChiKDYyMzApKTtKLmdldEZvcm1EYXRhPSgpPT4oMCxfLmlzTm9kZSkoKT9uZXcgcC5kZWZhdWx0Om5ldyBGb3JtRGF0YX0sMzI2MDooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0VXNlckxhbmd1YWdlPXZvaWQgMCxKLmdldFVzZXJMYW5ndWFnZT0oKT0+d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXx8d2luZG93Lm5hdmlnYXRvci51c2VyTGFuZ3VhZ2V9LDE4ODQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0VmFsaWRKc29uPXZvaWQgMDtjb25zdCBEPWIoMTM5NSk7Si5nZXRWYWxpZEpzb249cD0+e3RyeXtpZihudWxsPT1wKXRocm93IG5ldyBELkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNBcnJheShwKSl0aHJvdyBu'@;
put 'ZXcgRC5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgcD9wOiIiPT09cD97fTpKU09OLnBhcnNlKHApfWNhdGNoKE4pe3Rocm93IE4gaW5zdGFuY2VvZiBELkpzb25QYXJzZUFycmF5RXJyb3I/TjpuZXcgRC5JbnZhbGlkSnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rp'@;
put 'b24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpO3ZhciBIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTix3KTsoIUh8fCgiZ2V0Imlu'@;
put 'IEg/IU4uX19lc01vZHVsZTpILndyaXRhYmxlfHxILmNvbmZpZ3VyYWJsZSkpJiYoSD17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxGLEgpfTpmdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxwW0Zd'@;
put 'PU5bd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLE4pe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTix3KSYmRChOLHAsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxfKGIoMzMwMiksSiksXyhiKDc5MjIpLEopLF8oYigzNzkzKSxKKSxfKGIoMjQwMiksSiksXyhiKDYxMTYpLEopLF8oYig5ODI1KSxKKSxfKGIoOTkwKSxKKSxfKGIoMTg4NCksSiksXyhiKDQyNDMpLEopLF8oYigyNTcpLEopLF8oYigyKSxKKSxfKGIoMjYxNSks'@;
put 'SiksXyhiKDI5MjApLEopLF8oYigyNDIyKSxKKSxfKGIoMzEpLEopLF8oYig2NTE1KSxKKSxfKGIoNjQxNiksSiksXyhiKDI4MTMpLEopLF8oYig5ODk2KSxKKSxfKGIoNDc5OSksSiksXyhiKDQ1MTYpLEopLF8oYig4NDU4KSxKKSxfKGIoMzI2MCksSil9LDQyNDM6KGNlLEosYik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIEQ9Yig0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5pc05vZGU9dm9pZCAwLEouaXNOb2RlPSgpPT50eXBlb2YgRDwidSImJm51bGwhPUQudmVyc2lvbnMmJm51bGwhPUQudmVyc2lvbnMubm9kZX0sMjU3OihjZSxK'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5pc1JlbGF0aXZlUGF0aD12b2lkIDAsSi5pc1JlbGF0aXZlUGF0aD1EPT4hIUQmJiFELnN0YXJ0c1dpdGgoIi8iKX0sMjooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouaXNVcmk9dm9pZCAwLEouaXNVcmk9RD0+L15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChEKX0sMjYxNTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLEouaXNVcmw9dm9pZCAwLEouaXNVcmw9RD0+e2NvbnN0IF89WyJodHRwOiIsImh0dHBzOiJdO3RyeXtjb25zdCBwPW5ldyBVUkwoRCk7aWYoIV8uaW5jbHVkZXMocC5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9u'@;
put 'KGNlLEopeyJ1c2Ugc3RyaWN0Ijt2YXIgYj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSCxSLGosUCl7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxCKXtmdW5jdGlvbiBXKFEpe3RyeXtYKFAubmV4dChRKSl9Y2F0Y2gocSl7QihxKX19ZnVuY3Rpb24gWihR'@;
put 'KXt0cnl7WChQLnRocm93KFEpKX1jYXRjaChxKXtCKHEpfX1mdW5jdGlvbiBYKFEpe1EuZG9uZT9ZKFEudmFsdWUpOmZ1bmN0aW9uIEwoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBqP1k6bmV3IGooZnVuY3Rpb24oQil7QihZKX0pfShRLnZhbHVlKS50aGVuKFcsWil9WCgoUD1QLmFwcGx5KEgs'@;
put 'Unx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLm9wZW5Mb2dpblByb21wdD12b2lkIDA7dmFyIEQ9ZnVuY3Rpb24oSCl7cmV0dXJuIEguc3R5bGVzPSJzYXNqc0FkYXB0ZXJTdHlsZXMiLEgub3ZlcmxheT0ic2FzanNB'@;
put 'ZGFwdGVyTG9naW5Qcm9tcHRCRyIsSC5kaWFsb2c9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0IixIfShEfHx7fSk7Y29uc3QgXz0ic2FzanMtYWRhcHRlciIscD17cG9wVXA6YCR7X31wb3BVcGAscG9wVXBCRzpgJHtffXBvcFVwQkdgfTtKLm9wZW5Mb2dpblByb21wdD0oKT0+bmV3IFByb21p'@;
put 'c2UoSD0+Yih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Ui5pZD1ELnN0eWxlcyxSLmlubmVyVGV4dD1GO2NvbnN0IGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ai5pZD1ELm92ZXJsYXksai5j'@;
put 'bGFzc0xpc3QuYWRkKHAucG9wVXBCRyk7Y29uc3QgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtQLmlkPUQuZGlhbG9nLFAuY2xhc3NMaXN0LmFkZChwLnBvcFVwKTtjb25zdCBMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIik7TC5pbm5lclRleHQ9IlNlc3Npb24gRXhwaXJl'@;
put 'ZCEiLFAuYXBwZW5kQ2hpbGQoTCk7Y29uc3QgWT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtCLmlubmVyVGV4dD0iWW91IG5lZWQgdG8gcmVsb2dpbiwgY2xpY2sgT0sgdG8gbG9naW4uIixZLmFwcGVuZENoaWxkKEIpLFAu'@;
put 'YXBwZW5kQ2hpbGQoWSk7Y29uc3QgVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtXLmNsYXNzTGlzdC5hZGQoImNhbmNlbCIpLFcuaW5uZXJUZXh0PSJDYW5jZWwiLFcub25jbGljaz0oKT0+e3coKSxIKCExKX0sUC5hcHBlbmRDaGlsZChXKTtjb25zdCBaPWRvY3VtZW50LmNy'@;
put 'ZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1ouY2xhc3NMaXN0LmFkZCgiY29uZmlybSIpLFouaW5uZXJUZXh0PSJPayIsWi5vbmNsaWNrPSgpPT57dygpLEgoITApfSxQLmFwcGVuZENoaWxkKFopLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZG9jdW1lbnQuYm9keS5hcHBl'@;
put 'bmRDaGlsZChSKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGopLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUCl9KSk7Y29uc3Qgdz0oKT0+e09iamVjdC52YWx1ZXMoRCkuZm9yRWFjaChIPT57dmFyIFI7Y29uc3Qgaj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChIKTtudWxsPT09KFI9'@;
put 'aj8ucGFyZW50Tm9kZSl8fHZvaWQgMD09PVJ8fFIucmVtb3ZlQ2hpbGQoail9KSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJhdXRvIn0sRj1gXG4uJHtwLnBvcFVwQkd9ICxcbi4ke3AucG9wVXB9IHtcbiAgei1pbmRleDogMTAwMDA7XG59XG4uJHtwLnBvcFVwfSB7XG4gIGJveC1z'@;
put 'aXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDQwJTtcbiAgbGVmdDogNTAlO1xuICBwYWRkaW5nOiAw'@;
put 'O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtZmFtaWx5OiAnUFQgU2FucycsIHNhbnMtc2VyaWY7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIHotaW5kZXg6IDk5OTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAw'@;
put 'LCAwLjIpO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC1oZWlnaHQ6IDMwMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cbi4ke3AucG9wVXB9ID4gaDEge1xuICBib3gt'@;
put 'c2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogNXB4O1xuICBtaW4taGVpZ2h0OiA0MHB4O1xuICBmb250LXNpemU6IDEuMmVtO1xuICBmb250LXdlaWdodDogYm9s'@;
put 'ZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgYm9yZGVyLXdpZHRoOiA1cHg7XG4gIGJvcmRlci1jb2xvcjogYmxhY2s7XG59XG4uJHtwLnBvcFVwfSA+IGRp'@;
put 'diB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtMTA4cHgpO1xuICBtYXJnaW46IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzog'@;
put 'Ym9yZGVyLWJveDtcbiAgcGFkZGluZzogNSU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbiAgYm9yZGVyLXN0eWxlOiBub25lIG5vbmUgc29saWQgbm9uZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uJHtwLnBv'@;
put 'cFVwfSA+IGRpdiA+IHNwYW4ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAw'@;
put 'O1xuICB3aWR0aDogMzAwcHg7XG4gIGhlaWdodDogMTA4cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cbi4ke3AucG9wVXB9IC5jYW5jZWwge1xuICBmbG9hdDogbGVmdDtcbn1cbi4ke3AucG9wVXB9IC5jb25maXJtIHtcbiAgZmxvYXQ6'@;
put 'IHJpZ2h0O1xufVxuLiR7cC5wb3BVcH0gPiBidXR0b24ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxMHB4O1xuICB3'@;
put 'aWR0aDogNTAlO1xuICBib3JkZXI6IDFweCBub25lICNjY2M7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMSwgMSwgMSwgMC4yKTtcbn1cbi4ke3AucG9wVXB9'@;
put 'ID4gYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuLiR7cC5wb3BVcEJHfSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAw'@;
put 'JTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvcGFjaXR5OiAwLjk1O1xuICB6LWluZGV4OiA1MDtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KCMwMzc4Y2QsICMwMTIwMzYpO1xufVxuYH0sMjkyMDooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoubmVlZHNSZXRyeT12b2lkIDAsSi5uZWVkc1JldHJ5PUQ9PiEhRCYmKEQuaW5jbHVkZXMoJyJlcnJvckNvZGUiOjQwMycpJiZELmluY2x1ZGVzKCJfY3NyZiIpJiZELmluY2x1ZGVzKCJYLUNTUkYtVE9LRU4iKXx8RC5p'@;
put 'bmNsdWRlcygnInN0YXR1cyI6NDAzJykmJkQuaW5jbHVkZXMoJyJlcnJvciI6IkZvcmJpZGRlbiInKXx8RC5pbmNsdWRlcygnInN0YXR1cyI6NDQ5JykmJkQuaW5jbHVkZXMoIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MsIHJldHJ5IG9yaWdpbmFsIHJlcXVlc3QiKSl9LDI0MjI6KGNlLEopPT57'@;
put 'InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnBhcnNlR2VuZXJhdGVkQ29kZT12b2lkIDAsSi5wYXJzZUdlbmVyYXRlZENvZGU9RD0+RC5zcGxpdCgiXG4iKS5maWx0ZXIodz0+dy50cmltKCkuc3RhcnRzV2l0aCgiTVBSSU5U'@;
put 'IikpLmpvaW4oIlxyXG4iKX0sMzE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5wYXJzZVNhc1ZpeWFMb2c9dm9pZCAwLEoucGFyc2VTYXNWaXlhTG9nPXA9PntsZXQgTjt0cnl7'@;
put 'Tj1wLml0ZW1zP3AuaXRlbXMubWFwKHc9PncubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShwKX1jYXRjaCh3KXtELmVycm9yKCJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgbG9nIHJlc3BvbnNlIix3KSxOPXB9cmV0dXJuIE59fSw2NTE1OihjZSxKKT0+'@;
put 'eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5wYXJzZVNvdXJjZUNvZGU9dm9pZCAwLEoucGFyc2VTb3VyY2VDb2RlPUQ9PkQuc3BsaXQoIlxuIikuZmlsdGVyKE49Pk4udHJpbSgpLnN1YnN0cmluZygwLDEwKS50cmltU3Rh'@;
put 'cnQoKS5tYXRjaCgvXlxkLykpLmpvaW4oIlxyXG4iKX0sNjQxNjpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTix3LEYsSCl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oaixQKXtmdW5jdGlvbiBM'@;
put 'KFcpe3RyeXtCKEgubmV4dChXKSl9Y2F0Y2goWil7UChaKX19ZnVuY3Rpb24gWShXKXt0cnl7QihILnRocm93KFcpKX1jYXRjaChaKXtQKFopfX1mdW5jdGlvbiBCKFcpe1cuZG9uZT9qKFcudmFsdWUpOmZ1bmN0aW9uIFIoail7cmV0dXJuIGogaW5zdGFuY2VvZiBGP2o6bmV3IEYoZnVuY3Rp'@;
put 'b24oUCl7UChqKX0pfShXLnZhbHVlKS50aGVuKEwsWSl9QigoSD1ILmFwcGx5KE4sd3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2U9dm9pZCAwO2NvbnN0IF89Yig1OTI4'@;
put 'KTtKLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2U9KE4sdyxGKT0+RCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBIPU4uc3BsaXQoLzxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAwcHgiIHNyYz0ifDxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7'@;
put 'IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQtY29sb3I6Q2FudmFzOyIgc3JjPS8pWzFdLFI9SD9ILnNwbGl0KC8iPjxcL2lmcmFtZT58PjxcL2lmcmFtZT4vKVswXTpudWxsO2lmKCFSKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgd2Vib3V0IGZpbGUgVVJMLiIpO3JldHVybiB3'@;
put 'LmdldChGK1Isdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihqPT4oMCxfLmdldFZhbGlkSnNvbikoai5yZXN1bHQpKX0pfSwyODEzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEou'@;
put 'cGFyc2VXZWJvdXRSZXNwb25zZT12b2lkIDA7Y29uc3QgXz1iKDEzOTUpO0oucGFyc2VXZWJvdXRSZXNwb25zZT0oTix3KT0+e2xldCBGPSIiO2lmKE4uaW5jbHVkZXMoIj4+d2Vib3V0QkVHSU48PCIpKXRyeXtGPU4uc3BsaXQoIj4+d2Vib3V0QkVHSU48PCIpWzFdLnNwbGl0KCI+PndlYm91'@;
put 'dEVORDw8IilbMF19Y2F0Y2goSCl7aWYodyl0aHJvdyBuZXcgXy5XZWJvdXRSZXNwb25zZUVycm9yKHcpO0Y9IiIsRC5lcnJvcihIKX1yZXR1cm4gRn19LDExNzA6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxK'@;
put 'LmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PXZvaWQgMDtjb25zdCBiPVsiTG9nIE9mZiJdO0ouZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9Xz0+e2NvbnN0IE49Xz8ubWF0Y2goLyJ0aXRsZSI6XHM/Ii4qPyIvKTtsZXQgdz1OPy5bMF0uc3BsaXQoIjoiKVsxXS50cmltKCksRj13Py5pbmRleE9m'@;
put 'KCIgIik7cmV0dXJuIHc/KGIubWFwKEg9Pntjb25zdCBSPXc/LmluZGV4T2YoSCl8fC0xO1I+LTEmJihGPVIrSC5sZW5ndGgpfSksdy5zbGljZShGLC0xKS50cmltKCkpOiJ1bmtub3duIn19LDk4OTY6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxKLnNlcmlhbGl6ZT12b2lkIDAsSi5zZXJpYWxpemU9RD0+e2NvbnN0IF89W107Zm9yKGNvbnN0IHAgaW4gRClpZihELmhhc093blByb3BlcnR5KHApKWlmKERbcF1pbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgTj0wLHc9RFtwXS5sZW5ndGg7Tjx3O04rKylf'@;
put 'LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHApKyI9IitlbmNvZGVVUklDb21wb25lbnQoRFtwXVtOXSkpO2Vsc2UgXy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChwKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KERbcF0pKTtyZXR1cm4gXy5qb2luKCImIil9fSw0Nzk5OihjZSxKKT0+eyJ1c2Ug'@;
put 'c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5zcGxpdENodW5rcz12b2lkIDAsSi5zcGxpdENodW5rcz1EPT57Y29uc3QgcD1NYXRoLmNlaWwoRC5sZW5ndGgvMTZlMyksTj1uZXcgQXJyYXkocCk7Zm9yKGxldCB3PTAsRj0wO3c8cDsr'@;
put 'K3csRis9MTZlMylOW3ddPUQuc3Vic3RyKEYsMTZlMyk7cmV0dXJuIE59fSw0NTE2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi52YWxpZGF0ZUlucHV0PUouSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkU9Si5N'@;
put 'T1JFX0lORk89dm9pZCAwLEouTU9SRV9JTkZPPSJGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL3Nhc2pzLmlvL3Nhc2pzLWFkYXB0ZXIvI3JlcXVlc3QtcmVzcG9uc2UiLEouSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkU9YFBhcmFtZXRlciBkYXRhIGNvbnRhaW5zIGludmFsaWQgdGFibGUgc3Ry'@;
put 'dWN0dXJlLiAke0ouTU9SRV9JTkZPfWAsSi52YWxpZGF0ZUlucHV0PV89PntpZihudWxsPT09XylyZXR1cm57c3RhdHVzOiEwLG1zZzoiIn07aWYoIm9iamVjdCIhPT1EKF8pKXJldHVybntzdGF0dXM6ITEsbXNnOkouSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkV9O2NvbnN0IHA9Tj0+Ti5tYXRj'@;
put 'aCgvXlwkLiovKSYmT2JqZWN0LmtleXMoXykuaW5jbHVkZXMoTi5yZXBsYWNlKC9eXCQvLCIiKSk7Zm9yKGNvbnN0IE4gaW4gXyl7aWYoIU4ubWF0Y2goL15bYS16QS1aX10vKSYmIXAoTikpcmV0dXJue3N0YXR1czohMSxtc2c6IkZpcnN0IGxldHRlciBvZiB0YWJsZSBzaG91bGQgYmUgYWxw'@;
put 'aGFiZXQgb3IgdW5kZXJzY29yZS4ifTtpZighTi5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLykmJiFwKE4pKXJldHVybntzdGF0dXM6ITEsbXNnOiJUYWJsZSBuYW1lIHNob3VsZCBiZSBhbHBoYW51bWVyaWMuIn07aWYoTi5sZW5ndGg+MzIpcmV0dXJue3N0YXR1czohMSxtc2c6'@;
put 'Ik1heGltdW0gbGVuZ3RoIGZvciB0YWJsZSBuYW1lIGNvdWxkIGJlIDMyIGNoYXJhY3RlcnMuIn07aWYoIkFycmF5IiE9PUQoX1tOXSkmJiFwKE4pKXJldHVybntzdGF0dXM6ITEsbXNnOkouSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkV9O2lmKEFycmF5LmlzQXJyYXkoX1tOXSkpZm9yKGNvbnN0'@;
put 'IHcgb2YgX1tOXSl7aWYoIm9iamVjdCIhPT1EKHcpKXJldHVybntzdGF0dXM6ITEsbXNnOmBUYWJsZSAke059IGNvbnRhaW5zIGludmFsaWQgc3RydWN0dXJlLiAke0ouTU9SRV9JTkZPfWB9O3tjb25zdCBGPU9iamVjdC5rZXlzKHcpO2Zvcihjb25zdCBIIG9mIEYpaWYodm9pZCAwPT09d1tI'@;
put 'XSlyZXR1cm57c3RhdHVzOiExLG1zZzpgQSByb3cgaW4gdGFibGUgJHtOfSBjb250YWlucyBpbnZhbGlkIHZhbHVlLiBDYW4ndCBhc3NpZ24gdW5kZWZpbmVkIHRvICR7SH0uYH19fX1yZXR1cm57c3RhdHVzOiEwLG1zZzoiIn19O2NvbnN0IEQ9Xz0+QXJyYXkuaXNBcnJheShfKT8iQXJyYXki'@;
put 'OnR5cGVvZiBffSw4OTgxOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtKLmZyb21DYWxsYmFjaz1mdW5jdGlvbihiKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLkQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEW0QubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgo'@;
put 'XyxwKT0+e0QucHVzaCgoTix3KT0+bnVsbCE9Tj9wKE4pOl8odykpLGIuYXBwbHkodGhpcyxEKX0pO2IuYXBwbHkodGhpcyxEKX0sIm5hbWUiLHt2YWx1ZTpiLm5hbWV9KX0sSi5mcm9tUHJvbWlzZT1mdW5jdGlvbihiKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4u'@;
put 'LkQpe2NvbnN0IF89RFtELmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgXylyZXR1cm4gYi5hcHBseSh0aGlzLEQpO0QucG9wKCksYi5hcHBseSh0aGlzLEQpLnRoZW4ocD0+XyhudWxsLHApLF8pfSwibmFtZSIse3ZhbHVlOmIubmFtZX0pfX0sNDU2NDooY2UsSixiKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgRD1iKDc0MTgpLF89Yig3MTI5KSxwPS9eW1x4MDAtXHgyMFx1MDBhMFx1MTY4MFx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmZdKy8sTj0vW1xuXHJcdF0vZyx3PS9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XC9cLy8sRj0vOlxk'@;
put 'KyQvLEg9L14oW2Etel1bYS16MC05ListXSo6KT8oXC9cLyk/KFtcXC9dKyk/KFtcU1xzXSopL2ksUj0vXlthLXpBLVpdOi87ZnVuY3Rpb24gaih0ZSl7cmV0dXJuKHRlfHwiIikudG9TdHJpbmcoKS5yZXBsYWNlKHAsIiIpfXZhciBQPVtbIiMiLCJoYXNoIl0sWyI/IiwicXVlcnkiXSxmdW5j'@;
put 'dGlvbihpZSxzZSl7cmV0dXJuIEIoc2UucHJvdG9jb2wpP2llLnJlcGxhY2UoL1xcL2csIi8iKTppZX0sWyIvIiwicGF0aG5hbWUiXSxbIkAiLCJhdXRoIiwxXSxbTmFOLCJob3N0Iix2b2lkIDAsMSwxXSxbLzooXGQqKSQvLCJwb3J0Iix2b2lkIDAsMV0sW05hTiwiaG9zdG5hbWUiLHZvaWQg'@;
put 'MCwxLDFdXSxMPXtoYXNoOjEscXVlcnk6MX07ZnVuY3Rpb24gWSh0ZSl7dmFyIGllO2llPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgYi5nPCJ1Ij9iLmc6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307dmFyIFRlLGdlPXt9LF9lPXR5cGVvZih0ZT10ZXx8aWUubG9jYXRpb258fHt9'@;
put 'KTtpZigiYmxvYjoiPT09dGUucHJvdG9jb2wpZ2U9bmV3IFgodW5lc2NhcGUodGUucGF0aG5hbWUpLHt9KTtlbHNlIGlmKCJzdHJpbmciPT09X2UpZm9yKFRlIGluIGdlPW5ldyBYKHRlLHt9KSxMKWRlbGV0ZSBnZVtUZV07ZWxzZSBpZigib2JqZWN0Ij09PV9lKXtmb3IoVGUgaW4gdGUpVGUg'@;
put 'aW4gTHx8KGdlW1RlXT10ZVtUZV0pO3ZvaWQgMD09PWdlLnNsYXNoZXMmJihnZS5zbGFzaGVzPXcudGVzdCh0ZS5ocmVmKSl9cmV0dXJuIGdlfWZ1bmN0aW9uIEIodGUpe3JldHVybiJmaWxlOiI9PT10ZXx8ImZ0cDoiPT09dGV8fCJodHRwOiI9PT10ZXx8Imh0dHBzOiI9PT10ZXx8IndzOiI9'@;
put 'PT10ZXx8IndzczoiPT09dGV9ZnVuY3Rpb24gVyh0ZSxpZSl7dGU9KHRlPWoodGUpKS5yZXBsYWNlKE4sIiIpLGllPWllfHx7fTt2YXIgemUsc2U9SC5leGVjKHRlKSxnZT1zZVsxXT9zZVsxXS50b0xvd2VyQ2FzZSgpOiIiLF9lPSEhc2VbMl0sVGU9ISFzZVszXSxTZT0wO3JldHVybiBfZT9U'@;
put 'ZT8oemU9c2VbMl0rc2VbM10rc2VbNF0sU2U9c2VbMl0ubGVuZ3RoK3NlWzNdLmxlbmd0aCk6KHplPXNlWzJdK3NlWzRdLFNlPXNlWzJdLmxlbmd0aCk6VGU/KHplPXNlWzNdK3NlWzRdLFNlPXNlWzNdLmxlbmd0aCk6emU9c2VbNF0sImZpbGU6Ij09PWdlP1NlPj0yJiYoemU9emUuc2xpY2Uo'@;
put 'MikpOkIoZ2UpP3plPXNlWzRdOmdlP19lJiYoemU9emUuc2xpY2UoMikpOlNlPj0yJiZCKGllLnByb3RvY29sKSYmKHplPXNlWzRdKSx7cHJvdG9jb2w6Z2Usc2xhc2hlczpfZXx8QihnZSksc2xhc2hlc0NvdW50OlNlLHJlc3Q6emV9fWZ1bmN0aW9uIFgodGUsaWUsc2Upe2lmKHRlPSh0ZT1q'@;
put 'KHRlKSkucmVwbGFjZShOLCIiKSwhKHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFgodGUsaWUsc2UpO3ZhciBnZSxfZSxUZSxTZSx6ZSx6LGc9UC5zbGljZSgpLHk9dHlwZW9mIGllLHg9dGhpcyxDPTA7Zm9yKCJvYmplY3QiIT09eSYmInN0cmluZyIhPT15JiYoc2U9aWUsaWU9bnVs'@;
put 'bCksc2UmJiJmdW5jdGlvbiIhPXR5cGVvZiBzZSYmKHNlPV8ucGFyc2UpLGdlPSEoX2U9Vyh0ZXx8IiIsaWU9WShpZSkpKS5wcm90b2NvbCYmIV9lLnNsYXNoZXMseC5zbGFzaGVzPV9lLnNsYXNoZXN8fGdlJiZpZS5zbGFzaGVzLHgucHJvdG9jb2w9X2UucHJvdG9jb2x8fGllLnByb3RvY29s'@;
put 'fHwiIix0ZT1fZS5yZXN0LCgiZmlsZToiPT09X2UucHJvdG9jb2wmJigyIT09X2Uuc2xhc2hlc0NvdW50fHxSLnRlc3QodGUpKXx8IV9lLnNsYXNoZXMmJihfZS5wcm90b2NvbHx8X2Uuc2xhc2hlc0NvdW50PDJ8fCFCKHgucHJvdG9jb2wpKSkmJihnWzNdPVsvKC4qKS8sInBhdGhuYW1lIl0p'@;
put 'O0M8Zy5sZW5ndGg7QysrKSJmdW5jdGlvbiIhPXR5cGVvZihTZT1nW0NdKT8oej1TZVsxXSwoVGU9U2VbMF0pIT1UZT94W3pdPXRlOiJzdHJpbmciPT10eXBlb2YgVGU/fih6ZT0iQCI9PT1UZT90ZS5sYXN0SW5kZXhPZihUZSk6dGUuaW5kZXhPZihUZSkpJiYoIm51bWJlciI9PXR5cGVvZiBT'@;
put 'ZVsyXT8oeFt6XT10ZS5zbGljZSgwLHplKSx0ZT10ZS5zbGljZSh6ZStTZVsyXSkpOih4W3pdPXRlLnNsaWNlKHplKSx0ZT10ZS5zbGljZSgwLHplKSkpOih6ZT1UZS5leGVjKHRlKSkmJih4W3pdPXplWzFdLHRlPXRlLnNsaWNlKDAsemUuaW5kZXgpKSx4W3pdPXhbel18fGdlJiZTZVszXSYm'@;
put 'aWVbel18fCIiLFNlWzRdJiYoeFt6XT14W3pdLnRvTG93ZXJDYXNlKCkpKTp0ZT1TZSh0ZSx4KTtzZSYmKHgucXVlcnk9c2UoeC5xdWVyeSkpLGdlJiZpZS5zbGFzaGVzJiYiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYmKCIiIT09eC5wYXRobmFtZXx8IiIhPT1pZS5wYXRobmFtZSkmJih4'@;
put 'LnBhdGhuYW1lPWZ1bmN0aW9uIFoodGUsaWUpe2lmKCIiPT09dGUpcmV0dXJuIGllO2Zvcih2YXIgc2U9KGllfHwiLyIpLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuY29uY2F0KHRlLnNwbGl0KCIvIikpLGdlPXNlLmxlbmd0aCxfZT1zZVtnZS0xXSxUZT0hMSxTZT0wO2dlLS07KSIuIj09PXNl'@;
put 'W2dlXT9zZS5zcGxpY2UoZ2UsMSk6Ii4uIj09PXNlW2dlXT8oc2Uuc3BsaWNlKGdlLDEpLFNlKyspOlNlJiYoMD09PWdlJiYoVGU9ITApLHNlLnNwbGljZShnZSwxKSxTZS0tKTtyZXR1cm4gVGUmJnNlLnVuc2hpZnQoIiIpLCgiLiI9PT1fZXx8Ii4uIj09PV9lKSYmc2UucHVzaCgiIiksc2Uu'@;
put 'am9pbigiLyIpfSh4LnBhdGhuYW1lLGllLnBhdGhuYW1lKSksIi8iIT09eC5wYXRobmFtZS5jaGFyQXQoMCkmJkIoeC5wcm90b2NvbCkmJih4LnBhdGhuYW1lPSIvIit4LnBhdGhuYW1lKSxEKHgucG9ydCx4LnByb3RvY29sKXx8KHguaG9zdD14Lmhvc3RuYW1lLHgucG9ydD0iIikseC51c2Vy'@;
put 'bmFtZT14LnBhc3N3b3JkPSIiLHguYXV0aCYmKH4oemU9eC5hdXRoLmluZGV4T2YoIjoiKSk/KHgudXNlcm5hbWU9eC5hdXRoLnNsaWNlKDAsemUpLHgudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh4LnVzZXJuYW1lKSkseC5wYXNzd29yZD14LmF1dGgu'@;
put 'c2xpY2UoemUrMSkseC5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHgucGFzc3dvcmQpKSk6eC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHguYXV0aCkpLHguYXV0aD14LnBhc3N3b3JkP3gudXNlcm5hbWUrIjoi'@;
put 'K3gucGFzc3dvcmQ6eC51c2VybmFtZSkseC5vcmlnaW49ImZpbGU6IiE9PXgucHJvdG9jb2wmJkIoeC5wcm90b2NvbCkmJnguaG9zdD94LnByb3RvY29sKyIvLyIreC5ob3N0OiJudWxsIix4LmhyZWY9eC50b1N0cmluZygpfVgucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24gUSh0ZSxpZSxzZSl7'@;
put 'dmFyIGdlPXRoaXM7c3dpdGNoKHRlKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIGllJiZpZS5sZW5ndGgmJihpZT0oc2V8fF8ucGFyc2UpKGllKSksZ2VbdGVdPWllO2JyZWFrO2Nhc2UicG9ydCI6Z2VbdGVdPWllLEQoaWUsZ2UucHJvdG9jb2wpP2llJiYoZ2UuaG9zdD1nZS5ob3N0'@;
put 'bmFtZSsiOiIraWUpOihnZS5ob3N0PWdlLmhvc3RuYW1lLGdlW3RlXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6Z2VbdGVdPWllLGdlLnBvcnQmJihpZSs9IjoiK2dlLnBvcnQpLGdlLmhvc3Q9aWU7YnJlYWs7Y2FzZSJob3N0IjpnZVt0ZV09aWUsRi50ZXN0KGllKT8oaWU9aWUuc3BsaXQo'@;
put 'IjoiKSxnZS5wb3J0PWllLnBvcCgpLGdlLmhvc3RuYW1lPWllLmpvaW4oIjoiKSk6KGdlLmhvc3RuYW1lPWllLGdlLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOmdlLnByb3RvY29sPWllLnRvTG93ZXJDYXNlKCksZ2Uuc2xhc2hlcz0hc2U7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2Fz'@;
put 'ZSJoYXNoIjppZihpZSl7dmFyIF9lPSJwYXRobmFtZSI9PT10ZT8iLyI6IiMiO2dlW3RlXT1pZS5jaGFyQXQoMCkhPT1fZT9fZStpZTppZX1lbHNlIGdlW3RlXT1pZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjpnZVt0ZV09ZW5jb2RlVVJJQ29tcG9uZW50KGllKTticmVh'@;
put 'aztjYXNlImF1dGgiOnZhciBUZT1pZS5pbmRleE9mKCI6Iik7flRlPyhnZS51c2VybmFtZT1pZS5zbGljZSgwLFRlKSxnZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGdlLnVzZXJuYW1lKSksZ2UucGFzc3dvcmQ9aWUuc2xpY2UoVGUrMSksZ2UucGFz'@;
put 'c3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChnZS5wYXNzd29yZCkpKTpnZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGllKSl9Zm9yKHZhciBTZT0wO1NlPFAubGVuZ3RoO1NlKyspe3ZhciB6ZT1QW1NlXTt6ZVs0XSYm'@;
put 'KGdlW3plWzFdXT1nZVt6ZVsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIGdlLmF1dGg9Z2UucGFzc3dvcmQ/Z2UudXNlcm5hbWUrIjoiK2dlLnBhc3N3b3JkOmdlLnVzZXJuYW1lLGdlLm9yaWdpbj0iZmlsZToiIT09Z2UucHJvdG9jb2wmJkIoZ2UucHJvdG9jb2wpJiZnZS5ob3N0P2dlLnBy'@;
put 'b3RvY29sKyIvLyIrZ2UuaG9zdDoibnVsbCIsZ2UuaHJlZj1nZS50b1N0cmluZygpLGdlfSx0b1N0cmluZzpmdW5jdGlvbiBxKHRlKXsoIXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgdGUpJiYodGU9Xy5zdHJpbmdpZnkpO3ZhciBpZSxzZT10aGlzLGdlPXNlLmhvc3QsX2U9c2UucHJvdG9jb2w7'@;
put 'X2UmJiI6IiE9PV9lLmNoYXJBdChfZS5sZW5ndGgtMSkmJihfZSs9IjoiKTt2YXIgVGU9X2UrKHNlLnByb3RvY29sJiZzZS5zbGFzaGVzfHxCKHNlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4gc2UudXNlcm5hbWU/KFRlKz1zZS51c2VybmFtZSxzZS5wYXNzd29yZCYmKFRlKz0iOiIrc2Uu'@;
put 'cGFzc3dvcmQpLFRlKz0iQCIpOnNlLnBhc3N3b3JkPyhUZSs9IjoiK3NlLnBhc3N3b3JkLFRlKz0iQCIpOiJmaWxlOiIhPT1zZS5wcm90b2NvbCYmQihzZS5wcm90b2NvbCkmJiFnZSYmIi8iIT09c2UucGF0aG5hbWUmJihUZSs9IkAiKSwoIjoiPT09Z2VbZ2UubGVuZ3RoLTFdfHxGLnRlc3Qo'@;
put 'c2UuaG9zdG5hbWUpJiYhc2UucG9ydCkmJihnZSs9IjoiKSxUZSs9Z2Urc2UucGF0aG5hbWUsKGllPSJvYmplY3QiPT10eXBlb2Ygc2UucXVlcnk/dGUoc2UucXVlcnkpOnNlLnF1ZXJ5KSYmKFRlKz0iPyIhPT1pZS5jaGFyQXQoMCk/Ij8iK2llOmllKSxzZS5oYXNoJiYoVGUrPXNlLmhhc2gp'@;
put 'LFRlfX0sWC5leHRyYWN0UHJvdG9jb2w9VyxYLmxvY2F0aW9uPVksWC50cmltTGVmdD1qLFgucXM9XyxjZS5leHBvcnRzPVh9LDQ5Mjc6KGNlLEosYik9Pnt2YXIgRD1iKDUxMDgpO2Z1bmN0aW9uIHAoTil7dHJ5e2lmKCFiLmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiEx'@;
put 'fXZhciB3PWIuZy5sb2NhbFN0b3JhZ2VbTl07cmV0dXJuIG51bGwhPXcmJiJ0cnVlIj09PVN0cmluZyh3KS50b0xvd2VyQ2FzZSgpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gXyhOLHcpe2lmKHAoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gTjt2YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24gSCgpe2lm'@;
put 'KCFGKXtpZihwKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHcpO3AoInRyYWNlRGVwcmVjYXRpb24iKT9ELnRyYWNlKHcpOkQud2Fybih3KSxGPSEwfXJldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwzODQ6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiBiJiYib2JqZWN0Ij09dHlwZW9mIGImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLnJlYWRVSW50OH19LDU5NTU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyNTg0KSxfPWIoODY2'@;
put 'MikscD1iKDY0MzApLE49Yig1NjkyKTtmdW5jdGlvbiB3KGtlKXtyZXR1cm4ga2UuY2FsbC5iaW5kKGtlKX12YXIgRj10eXBlb2YgQmlnSW50PCJ1IixIPXR5cGVvZiBTeW1ib2w8InUiLFI9dyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxqPXcoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9m'@;
put 'KSxQPXcoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSxMPXcoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7aWYoRil2YXIgWT13KEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZik7aWYoSCl2YXIgQj13KFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gVyhrZSxfdCl7aWYoIm9i'@;
put 'amVjdCIhPXR5cGVvZiBrZSlyZXR1cm4hMTt0cnl7cmV0dXJuIF90KGtlKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZyhrZSl7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1SKGtlKX1mdW5jdGlvbiB4KGtlKXtyZXR1cm4iW29iamVjdCBTZXRdIj09PVIoa2UpfWZ1bmN0aW9uIFQoa2Up'@;
put 'e3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PVIoa2UpfWZ1bmN0aW9uIFUoa2Upe3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PVIoa2UpfWZ1bmN0aW9uIG0oa2Upe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1SKGtlKX1mdW5jdGlvbiBBKGtlKXtyZXR1cm4hKHR5cGVvZiBB'@;
put 'cnJheUJ1ZmZlcj4idSIpJiYobS53b3JraW5nP20oa2UpOmtlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpfWZ1bmN0aW9uIGFlKGtlKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09UihrZSl9ZnVuY3Rpb24gbmUoa2Upe3JldHVybiEodHlwZW9mIERhdGFWaWV3PiJ1IikmJihhZS53b3Jr'@;
put 'aW5nP2FlKGtlKTprZSBpbnN0YW5jZW9mIERhdGFWaWV3KX1KLmlzQXJndW1lbnRzT2JqZWN0PUQsSi5pc0dlbmVyYXRvckZ1bmN0aW9uPV8sSi5pc1R5cGVkQXJyYXk9TixKLmlzUHJvbWlzZT1mdW5jdGlvbiBaKGtlKXtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUiJiZrZSBpbnN0YW5jZW9m'@;
put 'IFByb21pc2V8fG51bGwhPT1rZSYmIm9iamVjdCI9PXR5cGVvZiBrZSYmImZ1bmN0aW9uIj09dHlwZW9mIGtlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBrZS5jYXRjaH0sSi5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbiBYKGtlKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYm'@;
put 'QXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhrZSk6TihrZSl8fG5lKGtlKX0sSi5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24gUShrZSl7cmV0dXJuIlVpbnQ4QXJyYXkiPT09cChrZSl9LEouaXNVaW50OENsYW1wZWRBcnJheT1mdW5jdGlvbiBxKGtlKXtyZXR1cm4iVWludDhD'@;
put 'bGFtcGVkQXJyYXkiPT09cChrZSl9LEouaXNVaW50MTZBcnJheT1mdW5jdGlvbiB0ZShrZSl7cmV0dXJuIlVpbnQxNkFycmF5Ij09PXAoa2UpfSxKLmlzVWludDMyQXJyYXk9ZnVuY3Rpb24gaWUoa2Upe3JldHVybiJVaW50MzJBcnJheSI9PT1wKGtlKX0sSi5pc0ludDhBcnJheT1mdW5jdGlv'@;
put 'biBzZShrZSl7cmV0dXJuIkludDhBcnJheSI9PT1wKGtlKX0sSi5pc0ludDE2QXJyYXk9ZnVuY3Rpb24gZ2Uoa2Upe3JldHVybiJJbnQxNkFycmF5Ij09PXAoa2UpfSxKLmlzSW50MzJBcnJheT1mdW5jdGlvbiBfZShrZSl7cmV0dXJuIkludDMyQXJyYXkiPT09cChrZSl9LEouaXNGbG9hdDMy'@;
put 'QXJyYXk9ZnVuY3Rpb24gVGUoa2Upe3JldHVybiJGbG9hdDMyQXJyYXkiPT09cChrZSl9LEouaXNGbG9hdDY0QXJyYXk9ZnVuY3Rpb24gU2Uoa2Upe3JldHVybiJGbG9hdDY0QXJyYXkiPT09cChrZSl9LEouaXNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uIHplKGtlKXtyZXR1cm4iQmlnSW50NjRB'@;
put 'cnJheSI9PT1wKGtlKX0sSi5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uIHooa2Upe3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1wKGtlKX0sZy53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZnKG5ldyBNYXApLEouaXNNYXA9ZnVuY3Rpb24geShrZSl7cmV0dXJuISh0eXBlb2YgTWFwPiJ1Iikm'@;
put 'JihnLndvcmtpbmc/ZyhrZSk6a2UgaW5zdGFuY2VvZiBNYXApfSx4Lndvcmtpbmc9dHlwZW9mIFNldDwidSImJngobmV3IFNldCksSi5pc1NldD1mdW5jdGlvbiBDKGtlKXtyZXR1cm4hKHR5cGVvZiBTZXQ+InUiKSYmKHgud29ya2luZz94KGtlKTprZSBpbnN0YW5jZW9mIFNldCl9LFQud29y'@;
put 'a2luZz10eXBlb2YgV2Vha01hcDwidSImJlQobmV3IFdlYWtNYXApLEouaXNXZWFrTWFwPWZ1bmN0aW9uIFYoa2Upe3JldHVybiEodHlwZW9mIFdlYWtNYXA+InUiKSYmKFQud29ya2luZz9UKGtlKTprZSBpbnN0YW5jZW9mIFdlYWtNYXApfSxVLndvcmtpbmc9dHlwZW9mIFdlYWtTZXQ8InUi'@;
put 'JiZVKG5ldyBXZWFrU2V0KSxKLmlzV2Vha1NldD1mdW5jdGlvbiBFKGtlKXtyZXR1cm4gVShrZSl9LG0ud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZtKG5ldyBBcnJheUJ1ZmZlciksSi5pc0FycmF5QnVmZmVyPUEsYWUud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0'@;
put 'eXBlb2YgRGF0YVZpZXc8InUiJiZhZShuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLEouaXNEYXRhVmlldz1uZTt2YXIgbGU9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRBcnJheUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gd2Uoa2Upe3JldHVybiJbb2Jq'@;
put 'ZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1SKGtlKX1mdW5jdGlvbiBaZShrZSl7cmV0dXJuISh0eXBlb2YgbGU+InUiKSYmKHR5cGVvZiB3ZS53b3JraW5nPiJ1IiYmKHdlLndvcmtpbmc9d2UobmV3IGxlKSksd2Uud29ya2luZz93ZShrZSk6a2UgaW5zdGFuY2VvZiBsZSl9ZnVuY3Rpb24g'@;
put 'amUoa2Upe3JldHVybiBXKGtlLGopfWZ1bmN0aW9uIEFlKGtlKXtyZXR1cm4gVyhrZSxQKX1mdW5jdGlvbiBGZShrZSl7cmV0dXJuIFcoa2UsTCl9ZnVuY3Rpb24gUmUoa2Upe3JldHVybiBGJiZXKGtlLFkpfWZ1bmN0aW9uIEllKGtlKXtyZXR1cm4gSCYmVyhrZSxCKX1KLmlzU2hhcmVkQXJy'@;
put 'YXlCdWZmZXI9WmUsSi5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24gUWUoa2Upe3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09PVIoa2UpfSxKLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24gYXQoa2Upe3JldHVybiJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09UihrZSl9LEouaXNTZXRJ'@;
put 'dGVyYXRvcj1mdW5jdGlvbiB4ZShrZSl7cmV0dXJuIltvYmplY3QgU2V0IEl0ZXJhdG9yXSI9PT1SKGtlKX0sSi5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbiB2ZShrZSl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSI9PT1SKGtlKX0sSi5pc1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGU9'@;
put 'ZnVuY3Rpb24gcWUoa2Upe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09UihrZSl9LEouaXNOdW1iZXJPYmplY3Q9amUsSi5pc1N0cmluZ09iamVjdD1BZSxKLmlzQm9vbGVhbk9iamVjdD1GZSxKLmlzQmlnSW50T2JqZWN0PVJlLEouaXNTeW1ib2xPYmplY3Q9SWUsSi5p'@;
put 'c0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uIEhlKGtlKXtyZXR1cm4gamUoa2UpfHxBZShrZSl8fEZlKGtlKXx8UmUoa2UpfHxJZShrZSl9LEouaXNBbnlBcnJheUJ1ZmZlcj1mdW5jdGlvbiBEZShrZSl7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmKEEoa2UpfHxaZShrZSkpfSxbImlz'@;
put 'UHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKGtlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSixrZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihrZSsiIGlzIG5vdCBzdXBwb3J0ZWQg'@;
put 'aW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5OihjZSxKLGIpPT57dmFyIEQ9Yig0MTU1KSxfPWIoNTEwOCkscD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24od2Upe2Zvcih2YXIgWmU9T2JqZWN0LmtleXMod2UpLFFlPXt9LGF0PTA7YXQ8WmUubGVuZ3RoO2F0Kysp'@;
put 'UWVbWmVbYXRdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLFplW2F0XSk7cmV0dXJuIFFlfSxOPS8lW3NkaiVdL2c7Si5mb3JtYXQ9ZnVuY3Rpb24obGUpe2lmKCFfZShsZSkpe2Zvcih2YXIgd2U9W10sWmU9MDtaZTxhcmd1bWVudHMubGVuZ3RoO1plKyspd2UucHVzaChS'@;
put 'KGFyZ3VtZW50c1taZV0pKTtyZXR1cm4gd2Uuam9pbigiICIpfVplPTE7Zm9yKHZhciBRZT1hcmd1bWVudHMsYXQ9UWUubGVuZ3RoLHhlPVN0cmluZyhsZSkucmVwbGFjZShOLGZ1bmN0aW9uKHFlKXtpZigiJSUiPT09cWUpcmV0dXJuIiUiO2lmKFplPj1hdClyZXR1cm4gcWU7c3dpdGNoKHFl'@;
put 'KXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKFFlW1plKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKFFlW1plKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFFlW1plKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gcWV9fSksdmU9UWVb'@;
put 'WmVdO1plPGF0O3ZlPVFlWysrWmVdKWllKHZlKXx8IXoodmUpP3hlKz0iICIrdmU6eGUrPSIgIitSKHZlKTtyZXR1cm4geGV9LEouZGVwcmVjYXRlPWZ1bmN0aW9uKGxlLHdlKXtpZih0eXBlb2YgRDwidSImJiEwPT09RC5ub0RlcHJlY2F0aW9uKXJldHVybiBsZTtpZih0eXBlb2YgRD4idSIp'@;
put 'cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEouZGVwcmVjYXRlKGxlLHdlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBaZT0hMTtyZXR1cm4gZnVuY3Rpb24gUWUoKXtpZighWmUpe2lmKEQudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3Iod2UpO0QudHJhY2VEZXByZWNhdGlv'@;
put 'bj9fLnRyYWNlKHdlKTpfLmVycm9yKHdlKSxaZT0hMH1yZXR1cm4gbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIHc9e30sRj0vXiQvO2lmKEQuZW52Lk5PREVfREVCVUcpe3ZhciBIPUQuZW52Lk5PREVfREVCVUc7SD1ILnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYi'@;
put 'KS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxGPW5ldyBSZWdFeHAoIl4iK0grIiQiLCJpIil9ZnVuY3Rpb24gUihsZSx3ZSl7dmFyIFplPXtzZWVuOltdLHN0eWxpemU6UH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihaZS5kZXB0'@;
put 'aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihaZS5jb2xvcnM9YXJndW1lbnRzWzNdKSx0ZSh3ZSk/WmUuc2hvd0hpZGRlbj13ZTp3ZSYmSi5fZXh0ZW5kKFplLHdlKSxTZShaZS5zaG93SGlkZGVuKSYmKFplLnNob3dIaWRkZW49ITEpLFNlKFplLmRlcHRoKSYmKFplLmRl'@;
put 'cHRoPTIpLFNlKFplLmNvbG9ycykmJihaZS5jb2xvcnM9ITEpLFNlKFplLmN1c3RvbUluc3BlY3QpJiYoWmUuY3VzdG9tSW5zcGVjdD0hMCksWmUuY29sb3JzJiYoWmUuc3R5bGl6ZT1qKSxZKFplLGxlLFplLmRlcHRoKX1mdW5jdGlvbiBqKGxlLHdlKXt2YXIgWmU9Ui5zdHlsZXNbd2VdO3Jl'@;
put 'dHVybiBaZT8iXHgxYlsiK1IuY29sb3JzW1plXVswXSsibSIrbGUrIlx4MWJbIitSLmNvbG9yc1taZV1bMV0rIm0iOmxlfWZ1bmN0aW9uIFAobGUsd2Upe3JldHVybiBsZX1mdW5jdGlvbiBZKGxlLHdlLFplKXtpZihsZS5jdXN0b21JbnNwZWN0JiZ3ZSYmeCh3ZS5pbnNwZWN0KSYmd2UuaW5z'@;
put 'cGVjdCE9PUouaW5zcGVjdCYmKCF3ZS5jb25zdHJ1Y3Rvcnx8d2UuY29uc3RydWN0b3IucHJvdG90eXBlIT09d2UpKXt2YXIgUWU9d2UuaW5zcGVjdChaZSxsZSk7cmV0dXJuIF9lKFFlKXx8KFFlPVkobGUsUWUsWmUpKSxRZX12YXIgYXQ9ZnVuY3Rpb24gQihsZSx3ZSl7aWYoU2Uod2UpKXJl'@;
put 'dHVybiBsZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihfZSh3ZSkpe3ZhciBaZT0iJyIrSlNPTi5zdHJpbmdpZnkod2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIGxlLnN0eWxpemUo'@;
put 'WmUsInN0cmluZyIpfXJldHVybiBnZSh3ZSk/bGUuc3R5bGl6ZSgiIit3ZSwibnVtYmVyIik6dGUod2UpP2xlLnN0eWxpemUoIiIrd2UsImJvb2xlYW4iKTppZSh3ZSk/bGUuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KGxlLHdlKTtpZihhdClyZXR1cm4gYXQ7dmFyIHhlPU9iamVj'@;
put 'dC5rZXlzKHdlKSx2ZT1mdW5jdGlvbiBMKGxlKXt2YXIgd2U9e307cmV0dXJuIGxlLmZvckVhY2goZnVuY3Rpb24oWmUsUWUpe3dlW1plXT0hMH0pLHdlfSh4ZSk7aWYobGUuc2hvd0hpZGRlbiYmKHhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdlKSkseSh3ZSkmJih4ZS5pbmRleE9m'@;
put 'KCJtZXNzYWdlIik+PTB8fHhlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBXKHdlKTtpZigwPT09eGUubGVuZ3RoKXtpZih4KHdlKSlyZXR1cm4gbGUuc3R5bGl6ZSgiW0Z1bmN0aW9uIisod2UubmFtZT8iOiAiK3dlLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKHplKHdl'@;
put 'KSlyZXR1cm4gbGUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJyZWdleHAiKTtpZihnKHdlKSlyZXR1cm4gbGUuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSwiZGF0ZSIpO2lmKHkod2UpKXJldHVybiBXKHdlKX12YXIgSWUsamU9'@;
put 'IiIsQWU9ITEsRmU9WyJ7IiwifSJdO3JldHVybiBxKHdlKSYmKEFlPSEwLEZlPVsiWyIsIl0iXSkseCh3ZSkmJihqZT0iIFtGdW5jdGlvbiIrKHdlLm5hbWU/IjogIit3ZS5uYW1lOiIiKSsiXSIpLHplKHdlKSYmKGplPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpKSxn'@;
put 'KHdlKSYmKGplPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHdlKSkseSh3ZSkmJihqZT0iICIrVyh3ZSkpLDAhPT14ZS5sZW5ndGh8fEFlJiYwIT13ZS5sZW5ndGg/WmU8MD96ZSh3ZSk/bGUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJy'@;
put 'ZWdleHAiKTpsZS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKToobGUuc2Vlbi5wdXNoKHdlKSxJZT1BZT9mdW5jdGlvbiBaKGxlLHdlLFplLFFlLGF0KXtmb3IodmFyIHhlPVtdLHZlPTAscWU9d2UubGVuZ3RoO3ZlPHFlOysrdmUpbSh3ZSxTdHJpbmcodmUpKT94ZS5wdXNoKFgobGUs'@;
put 'd2UsWmUsUWUsU3RyaW5nKHZlKSwhMCkpOnhlLnB1c2goIiIpO3JldHVybiBhdC5mb3JFYWNoKGZ1bmN0aW9uKGplKXtqZS5tYXRjaCgvXlxkKyQvKXx8eGUucHVzaChYKGxlLHdlLFplLFFlLGplLCEwKSl9KSx4ZX0obGUsd2UsWmUsdmUseGUpOnhlLm1hcChmdW5jdGlvbihIZSl7cmV0dXJu'@;
put 'IFgobGUsd2UsWmUsdmUsSGUsQWUpfSksbGUuc2Vlbi5wb3AoKSxmdW5jdGlvbiBRKGxlLHdlLFplKXt2YXIgYXQ9bGUucmVkdWNlKGZ1bmN0aW9uKHhlLHZlKXtyZXR1cm4gdmUuaW5kZXhPZigiXG4iKSx4ZSt2ZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7'@;
put 'cmV0dXJuIGF0PjYwP1plWzBdKygiIj09PXdlPyIiOndlKyJcbiAiKSsiICIrbGUuam9pbigiLFxuICAiKSsiICIrWmVbMV06WmVbMF0rd2UrIiAiK2xlLmpvaW4oIiwgIikrIiAiK1plWzFdfShJZSxqZSxGZSkpOkZlWzBdK2plK0ZlWzFdfWZ1bmN0aW9uIFcobGUpe3JldHVybiJbIitFcnJv'@;
put 'ci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsZSkrIl0ifWZ1bmN0aW9uIFgobGUsd2UsWmUsUWUsYXQseGUpe3ZhciB2ZSxxZSxqZTtpZigoamU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3ZSxhdCl8fHt2YWx1ZTp3ZVthdF19KS5nZXQ/cWU9bGUuc3R5bGl6ZShqZS5zZXQ/'@;
put 'IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOmplLnNldCYmKHFlPWxlLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxtKFFlLGF0KXx8KHZlPSJbIithdCsiXSIpLHFlfHwobGUuc2Vlbi5pbmRleE9mKGplLnZhbHVlKTwwPyhxZT1pZShaZSk/WShsZSxqZS52'@;
put 'YWx1ZSxudWxsKTpZKGxlLGplLnZhbHVlLFplLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYocWU9eGU/cWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKEFlKXtyZXR1cm4iICAiK0FlfSkuam9pbigiXG4iKS5zbGljZSgyKToiXG4iK3FlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihBZSl7cmV0'@;
put 'dXJuIiAgICIrQWV9KS5qb2luKCJcbiIpKTpxZT1sZS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxTZSh2ZSkpe2lmKHhlJiZhdC5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gcWU7KHZlPUpTT04uc3RyaW5naWZ5KCIiK2F0KSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05'@;
put 'XSopIiQvKT8odmU9dmUuc2xpY2UoMSwtMSksdmU9bGUuc3R5bGl6ZSh2ZSwibmFtZSIpKToodmU9dmUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLHZlPWxlLnN0eWxpemUodmUsInN0cmluZyIpKX1yZXR1cm4gdmUrIjog'@;
put 'IitxZX1mdW5jdGlvbiBxKGxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShsZSl9ZnVuY3Rpb24gdGUobGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGxlfWZ1bmN0aW9uIGllKGxlKXtyZXR1cm4gbnVsbD09PWxlfWZ1bmN0aW9uIGdlKGxlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGxlfWZ1'@;
put 'bmN0aW9uIF9lKGxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGxlfWZ1bmN0aW9uIFNlKGxlKXtyZXR1cm4gdm9pZCAwPT09bGV9ZnVuY3Rpb24gemUobGUpe3JldHVybiB6KGxlKSYmIltvYmplY3QgUmVnRXhwXSI9PT1UKGxlKX1mdW5jdGlvbiB6KGxlKXtyZXR1cm4ib2JqZWN0Ij09dHlw'@;
put 'ZW9mIGxlJiZudWxsIT09bGV9ZnVuY3Rpb24gZyhsZSl7cmV0dXJuIHoobGUpJiYiW29iamVjdCBEYXRlXSI9PT1UKGxlKX1mdW5jdGlvbiB5KGxlKXtyZXR1cm4geihsZSkmJigiW29iamVjdCBFcnJvcl0iPT09VChsZSl8fGxlIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIHgobGUpe3Jl'@;
put 'dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsZX1mdW5jdGlvbiBUKGxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxlKX1mdW5jdGlvbiBWKGxlKXtyZXR1cm4gbGU8MTA/IjAiK2xlLnRvU3RyaW5nKDEwKTpsZS50b1N0cmluZygxMCl9Si5kZWJ1Z2xvZz1mdW5jdGlv'@;
put 'bihsZSl7aWYobGU9bGUudG9VcHBlckNhc2UoKSwhd1tsZV0paWYoRi50ZXN0KGxlKSl7dmFyIHdlPUQucGlkO3dbbGVdPWZ1bmN0aW9uKCl7dmFyIFplPUouZm9ybWF0LmFwcGx5KEosYXJndW1lbnRzKTtfLmVycm9yKCIlcyAlZDogJXMiLGxlLHdlLFplKX19ZWxzZSB3W2xlXT1mdW5jdGlv'@;
put 'bigpe307cmV0dXJuIHdbbGVdfSxKLmluc3BlY3Q9UixSLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5'@;
put 'XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sUi5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0'@;
put 'ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxKLnR5cGVzPWIoNTk1NSksSi5pc0FycmF5PXEsSi5pc0Jvb2xlYW49dGUsSi5pc051bGw9aWUsSi5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBzZShsZSl7cmV0dXJuIG51bGw9PWxlfSxKLmlzTnVtYmVyPWdlLEouaXNTdHJpbmc9X2UsSi5p'@;
put 'c1N5bWJvbD1mdW5jdGlvbiBUZShsZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsZX0sSi5pc1VuZGVmaW5lZD1TZSxKLmlzUmVnRXhwPXplLEoudHlwZXMuaXNSZWdFeHA9emUsSi5pc09iamVjdD16LEouaXNEYXRlPWcsSi50eXBlcy5pc0RhdGU9ZyxKLmlzRXJyb3I9eSxKLnR5cGVzLmlz'@;
put 'TmF0aXZlRXJyb3I9eSxKLmlzRnVuY3Rpb249eCxKLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIEMobGUpe3JldHVybiBudWxsPT09bGV8fCJib29sZWFuIj09dHlwZW9mIGxlfHwibnVtYmVyIj09dHlwZW9mIGxlfHwic3RyaW5nIj09dHlwZW9mIGxlfHwic3ltYm9sIj09dHlwZW9mIGxlfHx0eXBl'@;
put 'b2YgbGU+InUifSxKLmlzQnVmZmVyPWIoMzg0KTt2YXIgVT1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIG0obGUsd2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'LmNhbGwobGUsd2UpfUoubG9nPWZ1bmN0aW9uKCl7Xy5sb2coIiVzIC0gJXMiLGZ1bmN0aW9uIEUoKXt2YXIgbGU9bmV3IERhdGUsd2U9W1YobGUuZ2V0SG91cnMoKSksVihsZS5nZXRNaW51dGVzKCkpLFYobGUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltsZS5nZXREYXRlKCks'@;
put 'VVtsZS5nZXRNb250aCgpXSx3ZV0uam9pbigiICIpfSgpLEouZm9ybWF0LmFwcGx5KEosYXJndW1lbnRzKSl9LEouaW5oZXJpdHM9Yig1NzE3KSxKLl9leHRlbmQ9ZnVuY3Rpb24obGUsd2Upe2lmKCF3ZXx8IXood2UpKXJldHVybiBsZTtmb3IodmFyIFplPU9iamVjdC5rZXlzKHdlKSxRZT1a'@;
put 'ZS5sZW5ndGg7UWUtLTspbGVbWmVbUWVdXT13ZVtaZVtRZV1dO3JldHVybiBsZX07dmFyIEE9dHlwZW9mIFN5bWJvbDwidSI/U3ltYm9sKCJ1dGlsLnByb21pc2lmeS5jdXN0b20iKTp2b2lkIDA7ZnVuY3Rpb24gYWUobGUsd2Upe2lmKCFsZSl7dmFyIFplPW5ldyBFcnJvcigiUHJvbWlzZSB3'@;
put 'YXMgcmVqZWN0ZWQgd2l0aCBhIGZhbHN5IHZhbHVlIik7WmUucmVhc29uPWxlLGxlPVplfXJldHVybiB3ZShsZSl9Si5wcm9taXNpZnk9ZnVuY3Rpb24od2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB3ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0'@;
put 'IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtpZihBJiZ3ZVtBXSl7dmFyIFplO2lmKCJmdW5jdGlvbiIhPXR5cGVvZihaZT13ZVtBXSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ1dGlsLnByb21pc2lmeS5jdXN0b20iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO3JldHVy'@;
put 'biBPYmplY3QuZGVmaW5lUHJvcGVydHkoWmUsQSx7dmFsdWU6WmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxaZX1mdW5jdGlvbiBaZSgpe2Zvcih2YXIgUWUsYXQseGU9bmV3IFByb21pc2UoZnVuY3Rpb24oamUsQWUpe1FlPWplLGF0PUFlfSksdmU9W10s'@;
put 'cWU9MDtxZTxhcmd1bWVudHMubGVuZ3RoO3FlKyspdmUucHVzaChhcmd1bWVudHNbcWVdKTt2ZS5wdXNoKGZ1bmN0aW9uKGplLEFlKXtqZT9hdChqZSk6UWUoQWUpfSk7dHJ5e3dlLmFwcGx5KHRoaXMsdmUpfWNhdGNoKGplKXthdChqZSl9cmV0dXJuIHhlfXJldHVybiBPYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2YoWmUsT2JqZWN0LmdldFByb3RvdHlwZU9mKHdlKSksQSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFplLEEse3ZhbHVlOlplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWmUscCh3ZSkpfSxKLnByb21p'@;
put 'c2lmeS5jdXN0b209QSxKLmNhbGxiYWNraWZ5PWZ1bmN0aW9uIG5lKGxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7ZnVuY3Rpb24gd2UoKXtmb3IodmFyIFpl'@;
put 'PVtdLFFlPTA7UWU8YXJndW1lbnRzLmxlbmd0aDtRZSsrKVplLnB1c2goYXJndW1lbnRzW1FlXSk7dmFyIGF0PVplLnBvcCgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24iKTt2'@;
put 'YXIgeGU9dGhpcyx2ZT1mdW5jdGlvbigpe3JldHVybiBhdC5hcHBseSh4ZSxhcmd1bWVudHMpfTtsZS5hcHBseSh0aGlzLFplKS50aGVuKGZ1bmN0aW9uKHFlKXtELm5leHRUaWNrKHZlLmJpbmQobnVsbCxudWxsLHFlKSl9LGZ1bmN0aW9uKHFlKXtELm5leHRUaWNrKGFlLmJpbmQobnVsbCxx'@;
put 'ZSx2ZSkpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih3ZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YobGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3ZSxwKGxlKSksd2V9fSw0ODE6KGNlLEosYik9PnshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZXhwb3J0cy5pc191cmk9'@;
put 'cCxELmV4cG9ydHMuaXNfaHR0cF91cmk9TixELmV4cG9ydHMuaXNfaHR0cHNfdXJpPXcsRC5leHBvcnRzLmlzX3dlYl91cmk9RixELmV4cG9ydHMuaXNVcmk9cCxELmV4cG9ydHMuaXNIdHRwVXJpPU4sRC5leHBvcnRzLmlzSHR0cHNVcmk9dyxELmV4cG9ydHMuaXNXZWJVcmk9Rjt2YXIgXz1m'@;
put 'dW5jdGlvbihIKXtyZXR1cm4gSC5tYXRjaCgvKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKFteXC8/I10qKSk/KFtePyNdKikoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8vKX07ZnVuY3Rpb24gcChIKXtpZihIJiYhL1teYS16MC05XDpcL1w/XCNcW1xdXEBcIVwkXCZcJ1woXClcKlwrXCxcO1w9'@;
put 'XC5cLVxfXH5cJV0vaS50ZXN0KEgpJiYhLyVbXjAtOWEtZl0vaS50ZXN0KEgpJiYhLyVbMC05YS1mXSg6P1teMC05YS1mXXwkKS9pLnRlc3QoSCkpe3ZhciBSLFAsTCxZLEIsaj0iIixXPSIiO2lmKFA9KFI9XyhIKSlbMl0sTD1SWzNdLFk9Uls0XSxCPVJbNV0sKGo9UlsxXSkmJmoubGVuZ3Ro'@;
put 'JiZMLmxlbmd0aD49MCl7aWYoUCYmUC5sZW5ndGgpe2lmKDAhPT1MLmxlbmd0aCYmIS9eXC8vLnRlc3QoTCkpcmV0dXJufWVsc2UgaWYoL15cL1wvLy50ZXN0KEwpKXJldHVybjtpZigvXlthLXpdW2EtejAtOVwrXC1cLl0qJC8udGVzdChqLnRvTG93ZXJDYXNlKCkpKXJldHVybiBXKz1qKyI6'@;
put 'IixQJiZQLmxlbmd0aCYmKFcrPSIvLyIrUCksVys9TCxZJiZZLmxlbmd0aCYmKFcrPSI/IitZKSxCJiZCLmxlbmd0aCYmKFcrPSIjIitCKSxXfX19ZnVuY3Rpb24gTihILFIpe2lmKHAoSCkpe3ZhciBqLFksVyxaLFA9IiIsTD0iIixCPSIiLFg9IiI7aWYoTD0oaj1fKEgpKVsyXSxZPWpbM10s'@;
put 'Vz1qWzRdLFo9als1XSxQPWpbMV0pe2lmKFIpe2lmKCJodHRwcyIhPVAudG9Mb3dlckNhc2UoKSlyZXR1cm59ZWxzZSBpZigiaHR0cCIhPVAudG9Mb3dlckNhc2UoKSlyZXR1cm47aWYoTClyZXR1cm4vOihcZCspJC8udGVzdChMKSYmKEI9TC5tYXRjaCgvOihcZCspJC8pWzBdLEw9TC5yZXBs'@;
put 'YWNlKC86XGQrJC8sIiIpKSxYKz1QKyI6IixYKz0iLy8iK0wsQiYmKFgrPUIpLFgrPVksVyYmVy5sZW5ndGgmJihYKz0iPyIrVyksWiYmWi5sZW5ndGgmJihYKz0iIyIrWiksWH19fWZ1bmN0aW9uIHcoSCl7cmV0dXJuIE4oSCwhMCl9ZnVuY3Rpb24gRihIKXtyZXR1cm4gTihIKXx8dyhIKX19'@;
put 'KGNlPWIubm1kKGNlKSl9LDUxNDA6KF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpPT57dmFyIGluZGV4T2Y9ZnVuY3Rpb24oY2UsSil7aWYoY2UuaW5kZXhPZilyZXR1cm4gY2UuaW5kZXhPZihKKTtmb3IodmFyIGI9MDtiPGNlLmxlbmd0aDtiKyspaWYoY2VbYl09PT1KKXJldHVy'@;
put 'biBiO3JldHVybi0xfSxPYmplY3Rfa2V5cz1mdW5jdGlvbihjZSl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKGNlKTt2YXIgSj1bXTtmb3IodmFyIGIgaW4gY2UpSi5wdXNoKGIpO3JldHVybiBKfSxmb3JFYWNoPWZ1bmN0aW9uKGNlLEope2lmKGNlLmZvckVhY2gpcmV0dXJu'@;
put 'IGNlLmZvckVhY2goSik7Zm9yKHZhciBiPTA7YjxjZS5sZW5ndGg7YisrKUooY2VbYl0sYixjZSl9LGRlZmluZVByb3A9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiXyIse30pLGZ1bmN0aW9uKGNlLEosYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGNl'@;
put 'LEose3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHZhbHVlOmJ9KX19Y2F0Y2h7cmV0dXJuIGZ1bmN0aW9uKEosYixEKXtKW2JdPUR9fX0oKSxnbG9iYWxzPVsiQXJyYXkiLCJCb29sZWFuIiwiRGF0ZSIsIkVycm9yIiwiRXZhbEVycm9yIiwiRnVuY3Rpb24iLCJJ'@;
put 'bmZpbml0eSIsIkpTT04iLCJNYXRoIiwiTmFOIiwiTnVtYmVyIiwiT2JqZWN0IiwiUmFuZ2VFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwiUmVnRXhwIiwiU3RyaW5nIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJVUklFcnJvciIsImRlY29kZVVSSSIsImRlY29kZVVSSUNvbXBvbmVudCIs'@;
put 'ImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImV2YWwiLCJpc0Zpbml0ZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwidW5lc2NhcGUiXTtmdW5jdGlvbiBDb250ZXh0KCl7fUNvbnRleHQucHJvdG90eXBlPXt9O3ZhciBTY3Jp'@;
put 'cHQ9ZXhwb3J0cy5TY3JpcHQ9ZnVuY3Rpb24oSil7aWYoISh0aGlzIGluc3RhbmNlb2YgU2NyaXB0KSlyZXR1cm4gbmV3IFNjcmlwdChKKTt0aGlzLmNvZGU9Sn07U2NyaXB0LnByb3RvdHlwZS5ydW5JbkNvbnRleHQ9ZnVuY3Rpb24oY2Upe2lmKCEoY2UgaW5zdGFuY2VvZiBDb250ZXh0KSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC4iKTt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtKLnN0eWxlfHwoSi5zdHlsZT17fSksSi5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEopO3Zh'@;
put 'ciBiPUouY29udGVudFdpbmRvdyxEPWIuZXZhbCxfPWIuZXhlY1NjcmlwdDshRCYmXyYmKF8uY2FsbChiLCJudWxsIiksRD1iLmV2YWwpLGZvckVhY2goT2JqZWN0X2tleXMoY2UpLGZ1bmN0aW9uKHcpe2Jbd109Y2Vbd119KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odyl7Y2Vbd10mJihi'@;
put 'W3ddPWNlW3ddKX0pO3ZhciBwPU9iamVjdF9rZXlzKGIpLE49RC5jYWxsKGIsdGhpcy5jb2RlKTtyZXR1cm4gZm9yRWFjaChPYmplY3Rfa2V5cyhiKSxmdW5jdGlvbih3KXsodyBpbiBjZXx8LTE9PT1pbmRleE9mKHAsdykpJiYoY2Vbd109Ylt3XSl9KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rp'@;
put 'b24odyl7dyBpbiBjZXx8ZGVmaW5lUHJvcChjZSx3LGJbd10pfSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChKKSxOfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluVGhpc0NvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXZhbCh0aGlzLmNvZGUpfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3'@;
put 'Q29udGV4dD1mdW5jdGlvbihjZSl7dmFyIEo9U2NyaXB0LmNyZWF0ZUNvbnRleHQoY2UpLGI9dGhpcy5ydW5JbkNvbnRleHQoSik7cmV0dXJuIGNlJiZmb3JFYWNoKE9iamVjdF9rZXlzKEopLGZ1bmN0aW9uKEQpe2NlW0RdPUpbRF19KSxifSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5w'@;
put 'cm90b3R5cGUpLGZ1bmN0aW9uKGNlKXtleHBvcnRzW2NlXT1TY3JpcHRbY2VdPWZ1bmN0aW9uKEope3ZhciBiPVNjcmlwdChKKTtyZXR1cm4gYltjZV0uYXBwbHkoYixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fSksZXhwb3J0cy5pc0NvbnRleHQ9ZnVuY3Rpb24oY2Upe3JldHVybiBj'@;
put 'ZSBpbnN0YW5jZW9mIENvbnRleHR9LGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGNlKXtyZXR1cm4gZXhwb3J0cy5TY3JpcHQoY2UpfSxleHBvcnRzLmNyZWF0ZUNvbnRleHQ9U2NyaXB0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oY2Upe3ZhciBKPW5ldyBDb250ZXh0O3JldHVybiJv'@;
put 'YmplY3QiPT10eXBlb2YgY2UmJmZvckVhY2goT2JqZWN0X2tleXMoY2UpLGZ1bmN0aW9uKGIpe0pbYl09Y2VbYl19KSxKfX0sNjQzMDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQwMjkpLF89YigzMDgzKSxwPWIoNTU1OSksTj1iKDczNzkpLHc9Yig3Mjk2KSxGPU4oIk9iamVj'@;
put 'dC5wcm90b3R5cGUudG9TdHJpbmciKSxIPWIoNjQxMCkoKSxSPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9iLmc6Z2xvYmFsVGhpcyxqPV8oKSxQPU4oIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxMPU9iamVjdC5nZXRQcm90b3R5cGVPZixZPU4oIkFycmF5LnByb3RvdHlwZS5pbmRleE9mIiwh'@;
put 'MCl8fGZ1bmN0aW9uKFEscSl7Zm9yKHZhciB0ZT0wO3RlPFEubGVuZ3RoO3RlKz0xKWlmKFFbdGVdPT09cSlyZXR1cm4gdGU7cmV0dXJuLTF9LEI9e19fcHJvdG9fXzpudWxsfTtEKGosSCYmdyYmTD9mdW5jdGlvbihYKXt2YXIgUT1uZXcgUltYXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4g'@;
put 'USl7dmFyIHE9TChRKSx0ZT13KHEsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighdGUpe3ZhciBpZT1MKHEpO3RlPXcoaWUsU3ltYm9sLnRvU3RyaW5nVGFnKX1CWyIkIitYXT1wKHRlLmdldCl9fTpmdW5jdGlvbihYKXt2YXIgUT1uZXcgUltYXSxxPVEuc2xpY2V8fFEuc2V0O3EmJihCWyIkIitY'@;
put 'XT1wKHEpKX0pLGNlLmV4cG9ydHM9ZnVuY3Rpb24oUSl7aWYoIVF8fCJvYmplY3QiIT10eXBlb2YgUSlyZXR1cm4hMTtpZighSCl7dmFyIHE9UChGKFEpLDgsLTEpO3JldHVybiBZKGoscSk+LTE/cToiT2JqZWN0Ij09PXEmJmZ1bmN0aW9uKFEpe3ZhciBxPSExO3JldHVybiBEKEIsZnVuY3Rp'@;
put 'b24odGUsaWUpe2lmKCFxKXRyeXt0ZShRKSxxPVAoaWUsMSl9Y2F0Y2h7fX0pLHF9KFEpfXJldHVybiB3P2Z1bmN0aW9uKFEpe3ZhciBxPSExO3JldHVybiBEKEIsZnVuY3Rpb24odGUsaWUpe2lmKCFxKXRyeXsiJCIrdGUoUSk9PT1pZSYmKHE9UChpZSwxKSl9Y2F0Y2h7fX0pLHF9KFEpOm51'@;
put 'bGx9fSw4NjQ2OigpPT57fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDkyMTQ6KCk9Pnt9LDY0MTk6KCk9Pnt9LDYzNTM6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6'@;
put 'KCk9Pnt9LDQ2MTY6KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5OTA4KSxfPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9iLmc6Z2xvYmFsVGhpcztjZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBOPVtdLHc9MDt3PEQubGVuZ3RoO3cr'@;
put 'KykiZnVuY3Rpb24iPT10eXBlb2YgX1tEW3ddXSYmKE5bTi5sZW5ndGhdPURbd10pO3JldHVybiBOfX0sNzIxODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89Yig4NzY0KS5CdWZmZXIscD1iKDUxMDgpO2Z1bmN0aW9uIE4oU3QsVnQpe3JldHVybiBmdW5jdGlvbigp'@;
put 'e3JldHVybiBTdC5hcHBseShWdCxhcmd1bWVudHMpfX1jb25zdHt0b1N0cmluZzp3fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpGfT1PYmplY3QsSD0oU3Q9PlZ0PT57Y29uc3QgeW49dy5jYWxsKFZ0KTtyZXR1cm4gU3RbeW5dfHwoU3RbeW5dPXluLnNsaWNlKDgsLTEpLnRv'@;
put 'TG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksUj1TdD0+KFN0PVN0LnRvTG93ZXJDYXNlKCksVnQ9PkgoVnQpPT09U3QpLGo9U3Q9PlZ0PT50eXBlb2YgVnQ9PT1TdCx7aXNBcnJheTpQfT1BcnJheSxMPWooInVuZGVmaW5lZCIpLEI9UigiQXJyYXlCdWZmZXIiKSxaPWooInN0'@;
put 'cmluZyIpLFg9aigiZnVuY3Rpb24iKSxRPWooIm51bWJlciIpLHE9U3Q9Pm51bGwhPT1TdCYmIm9iamVjdCI9PXR5cGVvZiBTdCxpZT1TdD0+e2lmKCJvYmplY3QiIT09SChTdCkpcmV0dXJuITE7Y29uc3QgVnQ9RihTdCk7cmV0dXJuIShudWxsIT09VnQmJlZ0IT09T2JqZWN0LnByb3RvdHlw'@;
put 'ZSYmbnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihWdCl8fFN5bWJvbC50b1N0cmluZ1RhZyBpbiBTdHx8U3ltYm9sLml0ZXJhdG9yIGluIFN0KX0sc2U9UigiRGF0ZSIpLGdlPVIoIkZpbGUiKSxfZT1SKCJCbG9iIiksVGU9UigiRmlsZUxpc3QiKSx6PVIoIlVSTFNlYXJjaFBhcmFtcyIp'@;
put 'LFtnLHkseCxDXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChSKTtmdW5jdGlvbiBWKFN0LFZ0LHthbGxPd25LZXlzOnluPSExfT17fSl7aWYobnVsbD09PVN0fHx0eXBlb2YgU3Q+InUiKXJldHVybjtsZXQgZ24sUm47aWYoIm9iamVjdCIh'@;
put 'PXR5cGVvZiBTdCYmKFN0PVtTdF0pLFAoU3QpKWZvcihnbj0wLFJuPVN0Lmxlbmd0aDtnbjxSbjtnbisrKVZ0LmNhbGwobnVsbCxTdFtnbl0sZ24sU3QpO2Vsc2V7Y29uc3Qgdm49eW4/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpOk9iamVjdC5rZXlzKFN0KSxkcj12bi5sZW5ndGg7'@;
put 'bGV0IHZpO2Zvcihnbj0wO2duPGRyO2duKyspdmk9dm5bZ25dLFZ0LmNhbGwobnVsbCxTdFt2aV0sdmksU3QpfX1mdW5jdGlvbiBVKFN0LFZ0KXtWdD1WdC50b0xvd2VyQ2FzZSgpO2NvbnN0IHluPU9iamVjdC5rZXlzKFN0KTtsZXQgUm4sZ249eW4ubGVuZ3RoO2Zvcig7Z24tLSA+MDspaWYo'@;
put 'Um49eW5bZ25dLFZ0PT09Um4udG9Mb3dlckNhc2UoKSlyZXR1cm4gUm47cmV0dXJuIG51bGx9Y29uc3QgRT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Yi5nLG09U3Q9PiFMKFN0KSYmU3QhPT1F'@;
put 'LGF0PShTdD0+VnQ9PlN0JiZWdCBpbnN0YW5jZW9mIFN0KSh0eXBlb2YgVWludDhBcnJheTwidSImJkYoVWludDhBcnJheSkpLHFlPVIoIkhUTUxGb3JtRWxlbWVudCIpLEFlPSgoe2hhc093blByb3BlcnR5OlN0fSk9PihWdCx5bik9PlN0LmNhbGwoVnQseW4pKShPYmplY3QucHJvdG90eXBl'@;
put 'KSxGZT1SKCJSZWdFeHAiKSxSZT0oU3QsVnQpPT57Y29uc3QgeW49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoU3QpLGduPXt9O1YoeW4sKFJuLHZuKT0+e2xldCBkcjshMSE9PShkcj1WdChSbix2bixTdCkpJiYoZ25bdm5dPWRyfHxSbil9KSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dGllcyhTdCxnbil9LEplPVIoIkFzeW5jRnVuY3Rpb24iKSx5dD0oU3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHNldEltbWVkaWF0ZSxWdD1YKEUucG9zdE1lc3NhZ2UpLFN0P3NldEltbWVkaWF0ZTpWdD8oeW49YGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLGduPVtdLEUuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cigibWVzc2FnZSIsKHtzb3VyY2U6Um4sZGF0YTp2bn0pPT57Um49PT1FJiZ2bj09PXluJiZnbi5sZW5ndGgmJmduLnNoaWZ0KCkoKX0sITEpLFJuPT57Z24ucHVzaChSbiksRS5wb3N0TWVzc2FnZSh5biwiKiIpfSk6eW49PnNldFRpbWVvdXQoeW4pKSxNdD10eXBlb2YgcXVldWVNaWNyb3Rh'@;
put 'c2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoRSk6dHlwZW9mIEQ8InUiJiZELm5leHRUaWNrfHx5dDt2YXIgU3QsVnQseW4sZ24sSXQ9e2lzQXJyYXk6UCxpc0FycmF5QnVmZmVyOkIsaXNCdWZmZXI6ZnVuY3Rpb24gWShTdCl7cmV0dXJuIG51bGwhPT1TdCYmIUwoU3QpJiZudWxsIT09U3Qu'@;
put 'Y29uc3RydWN0b3ImJiFMKFN0LmNvbnN0cnVjdG9yKSYmWChTdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJlN0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKFN0KX0saXNGb3JtRGF0YTpTdD0+e2xldCBWdDtyZXR1cm4gU3QmJigiZnVuY3Rpb24iPT10eXBlb2YgRm9ybURhdGEmJlN0IGluc3RhbmNl'@;
put 'b2YgRm9ybURhdGF8fFgoU3QuYXBwZW5kKSYmKCJmb3JtZGF0YSI9PT0oVnQ9SChTdCkpfHwib2JqZWN0Ij09PVZ0JiZYKFN0LnRvU3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFdIj09PVN0LnRvU3RyaW5nKCkpKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24gVyhTdCl7bGV0IFZ0O3Jl'@;
put 'dHVybiBWdD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KFN0KTpTdCYmU3QuYnVmZmVyJiZCKFN0LmJ1ZmZlciksVnR9LGlzU3RyaW5nOlosaXNOdW1iZXI6USxpc0Jvb2xlYW46U3Q9PiEwPT09U3R8fCExPT09U3QsaXNPYmpl'@;
put 'Y3Q6cSxpc1BsYWluT2JqZWN0OmllLGlzUmVhZGFibGVTdHJlYW06Zyxpc1JlcXVlc3Q6eSxpc1Jlc3BvbnNlOngsaXNIZWFkZXJzOkMsaXNVbmRlZmluZWQ6TCxpc0RhdGU6c2UsaXNGaWxlOmdlLGlzQmxvYjpfZSxpc1JlZ0V4cDpGZSxpc0Z1bmN0aW9uOlgsaXNTdHJlYW06U3Q9PnEoU3Qp'@;
put 'JiZYKFN0LnBpcGUpLGlzVVJMU2VhcmNoUGFyYW1zOnosaXNUeXBlZEFycmF5OmF0LGlzRmlsZUxpc3Q6VGUsZm9yRWFjaDpWLG1lcmdlOmZ1bmN0aW9uIEEoKXtjb25zdHtjYXNlbGVzczpTdH09bSh0aGlzKSYmdGhpc3x8e30sVnQ9e30seW49KGduLFJuKT0+e2NvbnN0IHZuPVN0JiZVKFZ0'@;
put 'LFJuKXx8Um47VnRbdm5dPWllKFZ0W3ZuXSkmJmllKGduKT9BKFZ0W3ZuXSxnbik6aWUoZ24pP0Eoe30sZ24pOlAoZ24pP2duLnNsaWNlKCk6Z259O2ZvcihsZXQgZ249MCxSbj1hcmd1bWVudHMubGVuZ3RoO2duPFJuO2duKyspYXJndW1lbnRzW2duXSYmVihhcmd1bWVudHNbZ25dLHluKTty'@;
put 'ZXR1cm4gVnR9LGV4dGVuZDooU3QsVnQseW4se2FsbE93bktleXM6Z259PXt9KT0+KFYoVnQsKFJuLHZuKT0+e1N0W3ZuXT15biYmWChSbik/TihSbix5bik6Um59LHthbGxPd25LZXlzOmdufSksU3QpLHRyaW06U3Q9PlN0LnRyaW0/U3QudHJpbSgpOlN0LnJlcGxhY2UoL15bXHNcdUZFRkZc'@;
put 'eEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSxzdHJpcEJPTTpTdD0+KDY1Mjc5PT09U3QuY2hhckNvZGVBdCgwKSYmKFN0PVN0LnNsaWNlKDEpKSxTdCksaW5oZXJpdHM6KFN0LFZ0LHluLGduKT0+e1N0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFZ0LnByb3RvdHlwZSxnbiksU3QucHJv'@;
put 'dG90eXBlLmNvbnN0cnVjdG9yPVN0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdCwic3VwZXIiLHt2YWx1ZTpWdC5wcm90b3R5cGV9KSx5biYmT2JqZWN0LmFzc2lnbihTdC5wcm90b3R5cGUseW4pfSx0b0ZsYXRPYmplY3Q6KFN0LFZ0LHluLGduKT0+e2xldCBSbix2bixkcjtjb25zdCB2aT17'@;
put 'fTtpZihWdD1WdHx8e30sbnVsbD09U3QpcmV0dXJuIFZ0O2Rve2ZvcihSbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTdCksdm49Um4ubGVuZ3RoO3ZuLS0gPjA7KWRyPVJuW3ZuXSwoIWdufHxnbihkcixTdCxWdCkpJiYhdmlbZHJdJiYoVnRbZHJdPVN0W2RyXSx2aVtkcl09ITApO1N0'@;
put 'PSExIT09eW4mJkYoU3QpfXdoaWxlKFN0JiYoIXlufHx5bihTdCxWdCkpJiZTdCE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBWdH0sa2luZE9mOkgsa2luZE9mVGVzdDpSLGVuZHNXaXRoOihTdCxWdCx5bik9PntTdD1TdHJpbmcoU3QpLCh2b2lkIDA9PT15bnx8eW4+U3QubGVuZ3RoKSYm'@;
put 'KHluPVN0Lmxlbmd0aCk7Y29uc3QgZ249U3QuaW5kZXhPZihWdCx5bi09VnQubGVuZ3RoKTtyZXR1cm4tMSE9PWduJiZnbj09PXlufSx0b0FycmF5OlN0PT57aWYoIVN0KXJldHVybiBudWxsO2lmKFAoU3QpKXJldHVybiBTdDtsZXQgVnQ9U3QubGVuZ3RoO2lmKCFRKFZ0KSlyZXR1cm4gbnVs'@;
put 'bDtjb25zdCB5bj1uZXcgQXJyYXkoVnQpO2Zvcig7VnQtLSA+MDspeW5bVnRdPVN0W1Z0XTtyZXR1cm4geW59LGZvckVhY2hFbnRyeTooU3QsVnQpPT57Y29uc3QgZ249KFN0JiZTdFtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKFN0KTtsZXQgUm47Zm9yKDsoUm49Z24ubmV4dCgpKSYmIVJuLmRv'@;
put 'bmU7KXtjb25zdCB2bj1Sbi52YWx1ZTtWdC5jYWxsKFN0LHZuWzBdLHZuWzFdKX19LG1hdGNoQWxsOihTdCxWdCk9PntsZXQgeW47Y29uc3QgZ249W107Zm9yKDtudWxsIT09KHluPVN0LmV4ZWMoVnQpKTspZ24ucHVzaCh5bik7cmV0dXJuIGdufSxpc0hUTUxGb3JtOnFlLGhhc093blByb3Bl'@;
put 'cnR5OkFlLGhhc093blByb3A6QWUscmVkdWNlRGVzY3JpcHRvcnM6UmUsZnJlZXplTWV0aG9kczpTdD0+e1JlKFN0LChWdCx5bik9PntpZihYKFN0KSYmLTEhPT1bImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoeW4pKXJldHVybiExO2lmKFgoU3RbeW5dKSl7aWYoVnQu'@;
put 'ZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gVnQpcmV0dXJuIHZvaWQoVnQud3JpdGFibGU9ITEpO1Z0LnNldHx8KFZ0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit5bisiJyIpfSl9fSl9LHRvT2JqZWN0U2V0OihTdCxWdCk9Pntj'@;
put 'b25zdCB5bj17fSxnbj1Sbj0+e1JuLmZvckVhY2godm49Pnt5blt2bl09ITB9KX07cmV0dXJuIFAoU3QpP2duKFN0KTpnbihTdHJpbmcoU3QpLnNwbGl0KFZ0KSkseW59LHRvQ2FtZWxDYXNlOlN0PT5TdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVu'@;
put 'Y3Rpb24oeW4sZ24sUm4pe3JldHVybiBnbi50b1VwcGVyQ2FzZSgpK1JufSksbm9vcDooKT0+e30sdG9GaW5pdGVOdW1iZXI6KFN0LFZ0KT0+bnVsbCE9U3QmJk51bWJlci5pc0Zpbml0ZShTdD0rU3QpP1N0OlZ0LGZpbmRLZXk6VSxnbG9iYWw6RSxpc0NvbnRleHREZWZpbmVkOm0saXNTcGVj'@;
put 'Q29tcGxpYW50Rm9ybTpmdW5jdGlvbiBfdChTdCl7cmV0dXJuISEoU3QmJlgoU3QuYXBwZW5kKSYmIkZvcm1EYXRhIj09PVN0W1N5bWJvbC50b1N0cmluZ1RhZ10mJlN0W1N5bWJvbC5pdGVyYXRvcl0pfSx0b0pTT05PYmplY3Q6U3Q9Pntjb25zdCBWdD1uZXcgQXJyYXkoMTApLHluPShnbixS'@;
put 'bik9PntpZihxKGduKSl7aWYoVnQuaW5kZXhPZihnbik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBnbikpe1Z0W1JuXT1nbjtjb25zdCB2bj1QKGduKT9bXTp7fTtyZXR1cm4gVihnbiwoZHIsdmkpPT57Y29uc3QgVnI9eW4oZHIsUm4rMSk7IUwoVnIpJiYodm5bdmldPVZyKX0pLFZ0W1Ju'@;
put 'XT12b2lkIDAsdm59fXJldHVybiBnbn07cmV0dXJuIHluKFN0LDApfSxpc0FzeW5jRm46SmUsaXNUaGVuYWJsZTpTdD0+U3QmJihxKFN0KXx8WChTdCkpJiZYKFN0LnRoZW4pJiZYKFN0LmNhdGNoKSxzZXRJbW1lZGlhdGU6eXQsYXNhcDpNdH07ZnVuY3Rpb24gcnQoU3QsVnQseW4sZ24sUm4p'@;
put 'e0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrLHRoaXMubWVzc2FnZT1TdCx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLFZ0JiYodGhp'@;
put 'cy5jb2RlPVZ0KSx5biYmKHRoaXMuY29uZmlnPXluKSxnbiYmKHRoaXMucmVxdWVzdD1nbiksUm4mJih0aGlzLnJlc3BvbnNlPVJuLHRoaXMuc3RhdHVzPVJuLnN0YXR1cz9Sbi5zdGF0dXM6bnVsbCl9SXQuaW5oZXJpdHMocnQsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNz'@;
put 'YWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFj'@;
put 'azp0aGlzLnN0YWNrLGNvbmZpZzpJdC50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnN0YXR1c319fSk7Y29uc3QgS2U9cnQucHJvdG90eXBlLHR0PXt9O2Z1bmN0aW9uIHV0KFN0KXtyZXR1cm4gSXQuaXNQbGFpbk9iamVjdChTdCl8fEl0Lmlz'@;
put 'QXJyYXkoU3QpfWZ1bmN0aW9uIEp0KFN0KXtyZXR1cm4gSXQuZW5kc1dpdGgoU3QsIltdIik/U3Quc2xpY2UoMCwtMik6U3R9ZnVuY3Rpb24gTHQoU3QsVnQseW4pe3JldHVybiBTdD9TdC5jb25jYXQoVnQpLm1hcChmdW5jdGlvbihSbix2bil7cmV0dXJuIFJuPUp0KFJuKSwheW4mJnZuPyJb'@;
put 'IitSbisiXSI6Um59KS5qb2luKHluPyIuIjoiIik6VnR9WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJf'@;
put 'QkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChTdD0+e3R0W1N0XT17dmFsdWU6U3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocnQsdHQpLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShLZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxydC5mcm9tPShTdCxWdCx5bixnbixSbix2bik9Pntjb25zdCBkcj1PYmplY3QuY3JlYXRlKEtlKTtyZXR1cm4gSXQudG9GbGF0T2JqZWN0KFN0LGRyLGZ1bmN0aW9uKFZyKXtyZXR1cm4gVnIhPT1FcnJvci5wcm90b3R5cGV9LHZp'@;
put 'PT4iaXNBeGlvc0Vycm9yIiE9PXZpKSxydC5jYWxsKGRyLFN0Lm1lc3NhZ2UsVnQseW4sZ24sUm4pLGRyLmNhdXNlPVN0LGRyLm5hbWU9U3QubmFtZSx2biYmT2JqZWN0LmFzc2lnbihkcix2biksZHJ9O2NvbnN0IG9pPUl0LnRvRmxhdE9iamVjdChJdCx7fSxudWxsLGZ1bmN0aW9uKFZ0KXty'@;
put 'ZXR1cm4vXmlzW0EtWl0vLnRlc3QoVnQpfSk7ZnVuY3Rpb24gZW4oU3QsVnQseW4pe2lmKCFJdC5pc09iamVjdChTdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7VnQ9VnR8fG5ldyBGb3JtRGF0YTtjb25zdCBnbj0oeW49SXQudG9GbGF0T2JqZWN0'@;
put 'KHluLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYnMsamkpe3JldHVybiFJdC5pc1VuZGVmaW5lZChqaVtic10pfSkpLm1ldGFUb2tlbnMsUm49eW4udmlzaXRvcnx8YWEsdm49eW4uZG90cyxkcj15bi5pbmRleGVzLFZyPSh5bi5CbG9ifHx0eXBlb2Yg'@;
put 'QmxvYjwidSImJkJsb2IpJiZJdC5pc1NwZWNDb21wbGlhbnRGb3JtKFZ0KTtpZighSXQuaXNGdW5jdGlvbihSbikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiB0YShlcyl7aWYobnVsbD09PWVzKXJldHVybiIiO2lmKEl0LmlzRGF0'@;
put 'ZShlcykpcmV0dXJuIGVzLnRvSVNPU3RyaW5nKCk7aWYoIVZyJiZJdC5pc0Jsb2IoZXMpKXRocm93IG5ldyBydCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gSXQuaXNBcnJheUJ1ZmZlcihlcyl8fEl0LmlzVHlwZWRBcnJheShlcyk/VnIm'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBCbG9iP25ldyBCbG9iKFtlc10pOl8uZnJvbShlcyk6ZXN9ZnVuY3Rpb24gYWEoZXMsYnMsamkpe2xldCBMYz1lcztpZihlcyYmIWppJiYib2JqZWN0Ij09dHlwZW9mIGVzKWlmKEl0LmVuZHNXaXRoKGJzLCJ7fSIpKWJzPWduP2JzOmJzLnNsaWNlKDAsLTIp'@;
put 'LGVzPUpTT04uc3RyaW5naWZ5KGVzKTtlbHNlIGlmKEl0LmlzQXJyYXkoZXMpJiZmdW5jdGlvbiBQdChTdCl7cmV0dXJuIEl0LmlzQXJyYXkoU3QpJiYhU3Quc29tZSh1dCl9KGVzKXx8KEl0LmlzRmlsZUxpc3QoZXMpfHxJdC5lbmRzV2l0aChicywiW10iKSkmJihMYz1JdC50b0FycmF5KGVz'@;
put 'KSkpcmV0dXJuIGJzPUp0KGJzKSxMYy5mb3JFYWNoKGZ1bmN0aW9uKFNhLGthKXshSXQuaXNVbmRlZmluZWQoU2EpJiZudWxsIT09U2EmJlZ0LmFwcGVuZCghMD09PWRyP0x0KFtic10sa2Esdm4pOm51bGw9PT1kcj9iczpicysiW10iLHRhKFNhKSl9KSwhMTtyZXR1cm4hIXV0KGVzKXx8KFZ0'@;
put 'LmFwcGVuZChMdChqaSxicyx2biksdGEoZXMpKSwhMSl9Y29uc3QgamE9W10sJHM9T2JqZWN0LmFzc2lnbihvaSx7ZGVmYXVsdFZpc2l0b3I6YWEsY29udmVydFZhbHVlOnRhLGlzVmlzaXRhYmxlOnV0fSk7aWYoIUl0LmlzT2JqZWN0KFN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11'@;
put 'c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGZ1bmN0aW9uIEtsKGVzLGJzKXtpZighSXQuaXNVbmRlZmluZWQoZXMpKXtpZigtMSE9PWphLmluZGV4T2YoZXMpKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIiticy5qb2luKCIuIikpO2phLnB1c2goZXMpLEl0'@;
put 'LmZvckVhY2goZXMsZnVuY3Rpb24oTGMsVmwpeyEwPT09KCEoSXQuaXNVbmRlZmluZWQoTGMpfHxudWxsPT09TGMpJiZSbi5jYWxsKFZ0LExjLEl0LmlzU3RyaW5nKFZsKT9WbC50cmltKCk6VmwsYnMsJHMpKSYmS2woTGMsYnM/YnMuY29uY2F0KFZsKTpbVmxdKX0pLGphLnBvcCgpfX0oU3Qp'@;
put 'LFZ0fWZ1bmN0aW9uIHNuKFN0KXtjb25zdCBWdD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rp'@;
put 'b24oZ24pe3JldHVybiBWdFtnbl19KX1mdW5jdGlvbiBJaShTdCxWdCl7dGhpcy5fcGFpcnM9W10sU3QmJmVuKFN0LHRoaXMsVnQpfWNvbnN0IGRuPUlpLnByb3RvdHlwZTtmdW5jdGlvbiBmdChTdCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvJTNBL2dpLCI6Iiku'@;
put 'cmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEZyKFN0LFZ0LHluKXtpZighVnQpcmV0dXJuIFN0O2NvbnN0IGduPXluJiZ5bi5lbmNvZGV8'@;
put 'fGZ0O0l0LmlzRnVuY3Rpb24oeW4pJiYoeW49e3NlcmlhbGl6ZTp5bn0pO2NvbnN0IFJuPXluJiZ5bi5zZXJpYWxpemU7bGV0IHZuO2lmKHZuPVJuP1JuKFZ0LHluKTpJdC5pc1VSTFNlYXJjaFBhcmFtcyhWdCk/VnQudG9TdHJpbmcoKTpuZXcgSWkoVnQseW4pLnRvU3RyaW5nKGduKSx2bil7'@;
put 'Y29uc3QgZHI9U3QuaW5kZXhPZigiIyIpOy0xIT09ZHImJihTdD1TdC5zbGljZSgwLGRyKSksU3QrPSgtMT09PVN0LmluZGV4T2YoIj8iKT8iPyI6IiYiKSt2bn1yZXR1cm4gU3R9ZG4uYXBwZW5kPWZ1bmN0aW9uKFZ0LHluKXt0aGlzLl9wYWlycy5wdXNoKFtWdCx5bl0pfSxkbi50b1N0cmlu'@;
put 'Zz1mdW5jdGlvbihWdCl7Y29uc3QgeW49VnQ/ZnVuY3Rpb24oZ24pe3JldHVybiBWdC5jYWxsKHRoaXMsZ24sc24pfTpzbjtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKFJuKXtyZXR1cm4geW4oUm5bMF0pKyI9Iit5bihSblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBrdD1jbGFz'@;
put 'cyBadHtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKFZ0LHluLGduKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6VnQscmVqZWN0ZWQ6eW4sc3luY2hyb25vdXM6ISFnbiYmZ24uc3luY2hyb25vdXMscnVuV2hlbjpnbj9nbi5ydW5XaGVuOm51bGx9KSx0'@;
put 'aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KFZ0KXt0aGlzLmhhbmRsZXJzW1Z0XSYmKHRoaXMuaGFuZGxlcnNbVnRdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goVnQpe0l0LmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihn'@;
put 'bil7bnVsbCE9PWduJiZWdChnbil9KX19LExuPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxXZT17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczp0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9V'@;
put 'UkxTZWFyY2hQYXJhbXM6SWksRm9ybURhdGE6dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsLEJsb2I6dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O2NvbnN0IEF0PXR5cGVvZiB3'@;
put 'aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLGlyPSJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3J8fHZvaWQgMCxodD1BdCYmKCFpcnx8WyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihpci5wcm9kdWN0KTwwKSxFdD10eXBlb2YgV29y'@;
put 'a2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMsem49QXQmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIGp0PXsuLi5PYmplY3QuZnJlZXpl'@;
put 'KHtfX3Byb3RvX186bnVsbCxoYXNCcm93c2VyRW52OkF0LGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjpFdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6aHQsbmF2aWdhdG9yOmlyLG9yaWdpbjp6bn0pLC4uLldlfTtmdW5jdGlvbiBEaShTdCl7ZnVuY3Rpb24gVnQoeW4sZ24sUm4sdm4p'@;
put 'e2xldCBkcj15blt2bisrXTtpZigiX19wcm90b19fIj09PWRyKXJldHVybiEwO2NvbnN0IHZpPU51bWJlci5pc0Zpbml0ZSgrZHIpLFZyPXZuPj15bi5sZW5ndGg7cmV0dXJuIGRyPSFkciYmSXQuaXNBcnJheShSbik/Um4ubGVuZ3RoOmRyLFZyPyhSbltkcl09SXQuaGFzT3duUHJvcChSbixk'@;
put 'cik/W1JuW2RyXSxnbl06Z24sIXZpKTooKCFSbltkcl18fCFJdC5pc09iamVjdChSbltkcl0pKSYmKFJuW2RyXT1bXSksVnQoeW4sZ24sUm5bZHJdLHZuKSYmSXQuaXNBcnJheShSbltkcl0pJiYoUm5bZHJdPWZ1bmN0aW9uIGZuKFN0KXtjb25zdCBWdD17fSx5bj1PYmplY3Qua2V5cyhTdCk7'@;
put 'bGV0IGduO2NvbnN0IFJuPXluLmxlbmd0aDtsZXQgdm47Zm9yKGduPTA7Z248Um47Z24rKyl2bj15bltnbl0sVnRbdm5dPVN0W3ZuXTtyZXR1cm4gVnR9KFJuW2RyXSkpLCF2aSl9aWYoSXQuaXNGb3JtRGF0YShTdCkmJkl0LmlzRnVuY3Rpb24oU3QuZW50cmllcykpe2NvbnN0IHluPXt9O3Jl'@;
put 'dHVybiBJdC5mb3JFYWNoRW50cnkoU3QsKGduLFJuKT0+e1Z0KGZ1bmN0aW9uIGNuKFN0KXtyZXR1cm4gSXQubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLFN0KS5tYXAoVnQ9PiJbXSI9PT1WdFswXT8iIjpWdFsxXXx8VnRbMF0pfShnbiksUm4seW4sMCl9KSx5bn1yZXR1cm4gbnVsbH1jb25z'@;
put 'dCB0bj17dHJhbnNpdGlvbmFsOkxuLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihWdCx5bil7Y29uc3QgZ249eW4uZ2V0Q29udGVudFR5cGUoKXx8IiIsUm49Z24uaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHZuPUl0Lmlz'@;
put 'T2JqZWN0KFZ0KTtpZih2biYmSXQuaXNIVE1MRm9ybShWdCkmJihWdD1uZXcgRm9ybURhdGEoVnQpKSxJdC5pc0Zvcm1EYXRhKFZ0KSlyZXR1cm4gUm4/SlNPTi5zdHJpbmdpZnkoRGkoVnQpKTpWdDtpZihJdC5pc0FycmF5QnVmZmVyKFZ0KXx8SXQuaXNCdWZmZXIoVnQpfHxJdC5pc1N0cmVh'@;
put 'bShWdCl8fEl0LmlzRmlsZShWdCl8fEl0LmlzQmxvYihWdCl8fEl0LmlzUmVhZGFibGVTdHJlYW0oVnQpKXJldHVybiBWdDtpZihJdC5pc0FycmF5QnVmZmVyVmlldyhWdCkpcmV0dXJuIFZ0LmJ1ZmZlcjtpZihJdC5pc1VSTFNlYXJjaFBhcmFtcyhWdCkpcmV0dXJuIHluLnNldENvbnRlbnRU'@;
put 'eXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLFZ0LnRvU3RyaW5nKCk7bGV0IHZpO2lmKHZuKXtpZihnbi5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gZnVuY3Rpb24gZGkoU3QsVnQp'@;
put 'e3JldHVybiBlbihTdCxuZXcganQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih5bixnbixSbix2bil7cmV0dXJuIGp0LmlzTm9kZSYmSXQuaXNCdWZmZXIoeW4pPyh0aGlzLmFwcGVuZChnbix5bi50b1N0cmluZygiYmFzZTY0IikpLCEx'@;
put 'KTp2bi5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxWdCkpfShWdCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKCh2aT1JdC5pc0ZpbGVMaXN0KFZ0KSl8fGduLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7Y29uc3QgVnI9dGhpcy5l'@;
put 'bnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBlbih2aT97ImZpbGVzW10iOlZ0fTpWdCxWciYmbmV3IFZyLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gdm58fFJuPyh5bi5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGZ1bmN0aW9uIFF0KFN0LFZ0LHluKXtp'@;
put 'ZihJdC5pc1N0cmluZyhTdCkpdHJ5e3JldHVybihWdHx8SlNPTi5wYXJzZSkoU3QpLEl0LnRyaW0oU3QpfWNhdGNoKGduKXtpZigiU3ludGF4RXJyb3IiIT09Z24ubmFtZSl0aHJvdyBnbn1yZXR1cm4oeW58fEpTT04uc3RyaW5naWZ5KShTdCl9KFZ0KSk6VnR9XSx0cmFuc2Zvcm1SZXNwb25z'@;
put 'ZTpbZnVuY3Rpb24oVnQpe2NvbnN0IHluPXRoaXMudHJhbnNpdGlvbmFsfHx0bi50cmFuc2l0aW9uYWwsZ249eW4mJnluLmZvcmNlZEpTT05QYXJzaW5nLFJuPSJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKEl0LmlzUmVzcG9uc2UoVnQpfHxJdC5pc1JlYWRhYmxlU3RyZWFtKFZ0KSly'@;
put 'ZXR1cm4gVnQ7aWYoVnQmJkl0LmlzU3RyaW5nKFZ0KSYmKGduJiYhdGhpcy5yZXNwb25zZVR5cGV8fFJuKSl7Y29uc3QgZHI9ISh5biYmeW4uc2lsZW50SlNPTlBhcnNpbmcpJiZSbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoVnQpfWNhdGNoKHZpKXtpZihkcil0aHJvdyJTeW50YXhFcnJvciI9'@;
put 'PT12aS5uYW1lP3J0LmZyb20odmkscnQuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6dml9fXJldHVybiBWdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0'@;
put 'aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6anQuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOmp0LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oVnQpe3JldHVybiBWdD49MjAwJiZWdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlv'@;
put 'bi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtJdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLFN0PT57dG4uaGVhZGVyc1tTdF09e319KTt2YXIgY2E9dG47Y29uc3QgeGk9SXQudG9PYmplY3RTZXQo'@;
put 'WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndh'@;
put 'cmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksR249U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBLaShTdCl7cmV0dXJuIFN0JiZTdHJpbmcoU3QpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEpyKFN0KXty'@;
put 'ZXR1cm4hMT09PVN0fHxudWxsPT1TdD9TdDpJdC5pc0FycmF5KFN0KT9TdC5tYXAoSnIpOlN0cmluZyhTdCl9ZnVuY3Rpb24gSGkoU3QsVnQseW4sZ24sUm4pe2lmKEl0LmlzRnVuY3Rpb24oZ24pKXJldHVybiBnbi5jYWxsKHRoaXMsVnQseW4pO2lmKFJuJiYoVnQ9eW4pLEl0LmlzU3RyaW5n'@;
put 'KFZ0KSl7aWYoSXQuaXNTdHJpbmcoZ24pKXJldHVybi0xIT09VnQuaW5kZXhPZihnbik7aWYoSXQuaXNSZWdFeHAoZ24pKXJldHVybiBnbi50ZXN0KFZ0KX19Y2xhc3MgWWl7Y29uc3RydWN0b3IoVnQpe1Z0JiZ0aGlzLnNldChWdCl9c2V0KFZ0LHluLGduKXtjb25zdCBSbj10aGlzO2Z1bmN0'@;
put 'aW9uIHZuKHZpLFZyLHRhKXtjb25zdCBhYT1LaShWcik7aWYoIWFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtjb25zdCBqYT1JdC5maW5kS2V5KFJuLGFhKTsoIWphfHx2b2lkIDA9PT1SbltqYV18fCEwPT09dGF8fHZvaWQgMD09'@;
put 'PXRhJiYhMSE9PVJuW2phXSkmJihSbltqYXx8VnJdPUpyKHZpKSl9Y29uc3QgZHI9KHZpLFZyKT0+SXQuZm9yRWFjaCh2aSwodGEsYWEpPT52bih0YSxhYSxWcikpO2lmKEl0LmlzUGxhaW5PYmplY3QoVnQpfHxWdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpZHIoVnQseW4pO2Vsc2Ug'@;
put 'aWYoSXQuaXNTdHJpbmcoVnQpJiYoVnQ9VnQudHJpbSgpKSYmIShTdD0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChTdC50cmltKCkpKShWdCkpZHIoKFN0PT57Y29uc3QgVnQ9e307bGV0IHluLGduLFJuO3JldHVybiBTdCYmU3Quc3BsaXQoIlxuIikuZm9yRWFjaChm'@;
put 'dW5jdGlvbihkcil7Um49ZHIuaW5kZXhPZigiOiIpLHluPWRyLnN1YnN0cmluZygwLFJuKS50cmltKCkudG9Mb3dlckNhc2UoKSxnbj1kci5zdWJzdHJpbmcoUm4rMSkudHJpbSgpLCEoIXlufHxWdFt5bl0mJnhpW3luXSkmJigic2V0LWNvb2tpZSI9PT15bj9WdFt5bl0/VnRbeW5dLnB1c2go'@;
put 'Z24pOlZ0W3luXT1bZ25dOlZ0W3luXT1WdFt5bl0/VnRbeW5dKyIsICIrZ246Z24pfSksVnR9KShWdCkseW4pO2Vsc2UgaWYoSXQuaXNIZWFkZXJzKFZ0KSlmb3IoY29uc3RbdmksVnJdb2YgVnQuZW50cmllcygpKXZuKFZyLHZpLGduKTtlbHNlIG51bGwhPVZ0JiZ2bih5bixWdCxnbik7cmV0'@;
put 'dXJuIHRoaXN9Z2V0KFZ0LHluKXtpZihWdD1LaShWdCkpe2NvbnN0IGduPUl0LmZpbmRLZXkodGhpcyxWdCk7aWYoZ24pe2NvbnN0IFJuPXRoaXNbZ25dO2lmKCF5bilyZXR1cm4gUm47aWYoITA9PT15bilyZXR1cm4gZnVuY3Rpb24gUXIoU3Qpe2NvbnN0IFZ0PU9iamVjdC5jcmVhdGUobnVs'@;
put 'bCkseW49LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZztsZXQgZ247Zm9yKDtnbj15bi5leGVjKFN0KTspVnRbZ25bMV1dPWduWzJdO3JldHVybiBWdH0oUm4pO2lmKEl0LmlzRnVuY3Rpb24oeW4pKXJldHVybiB5bi5jYWxsKHRoaXMsUm4sZ24pO2lmKEl0LmlzUmVnRXhwKHlu'@;
put 'KSlyZXR1cm4geW4uZXhlYyhSbik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhWdCx5bil7aWYoVnQ9S2koVnQpKXtjb25zdCBnbj1JdC5maW5kS2V5KHRoaXMsVnQpO3JldHVybiEoIWdufHx2b2lkIDA9PT10aGlz'@;
put 'W2duXXx8eW4mJiFIaSgwLHRoaXNbZ25dLGduLHluKSl9cmV0dXJuITF9ZGVsZXRlKFZ0LHluKXtjb25zdCBnbj10aGlzO2xldCBSbj0hMTtmdW5jdGlvbiB2bihkcil7aWYoZHI9S2koZHIpKXtjb25zdCB2aT1JdC5maW5kS2V5KGduLGRyKTt2aSYmKCF5bnx8SGkoMCxnblt2aV0sdmkseW4p'@;
put 'KSYmKGRlbGV0ZSBnblt2aV0sUm49ITApfX1yZXR1cm4gSXQuaXNBcnJheShWdCk/VnQuZm9yRWFjaCh2bik6dm4oVnQpLFJufWNsZWFyKFZ0KXtjb25zdCB5bj1PYmplY3Qua2V5cyh0aGlzKTtsZXQgZ249eW4ubGVuZ3RoLFJuPSExO2Zvcig7Z24tLTspe2NvbnN0IHZuPXluW2duXTsoIVZ0'@;
put 'fHxIaSgwLHRoaXNbdm5dLHZuLFZ0LCEwKSkmJihkZWxldGUgdGhpc1t2bl0sUm49ITApfXJldHVybiBSbn1ub3JtYWxpemUoVnQpe2NvbnN0IHluPXRoaXMsZ249e307cmV0dXJuIEl0LmZvckVhY2godGhpcywoUm4sdm4pPT57Y29uc3QgZHI9SXQuZmluZEtleShnbix2bik7aWYoZHIpcmV0'@;
put 'dXJuIHluW2RyXT1KcihSbiksdm9pZCBkZWxldGUgeW5bdm5dO2NvbnN0IHZpPVZ0P2Z1bmN0aW9uIElhKFN0KXtyZXR1cm4gU3QudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoVnQseW4sZ24pPT55bi50b1VwcGVyQ2FzZSgpK2duKX0odm4pOlN0cmlu'@;
put 'Zyh2bikudHJpbSgpO3ZpIT09dm4mJmRlbGV0ZSB5blt2bl0seW5bdmldPUpyKFJuKSxnblt2aV09ITB9KSx0aGlzfWNvbmNhdCguLi5WdCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uVnQpfXRvSlNPTihWdCl7Y29uc3QgeW49T2JqZWN0LmNyZWF0ZShudWxsKTty'@;
put 'ZXR1cm4gSXQuZm9yRWFjaCh0aGlzLChnbixSbik9PntudWxsIT1nbiYmITEhPT1nbiYmKHluW1JuXT1WdCYmSXQuaXNBcnJheShnbik/Z24uam9pbigiLCAiKTpnbil9KSx5bn1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wu'@;
put 'aXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbVnQseW5dKT0+VnQrIjogIit5bikuam9pbigiXG4iKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKFZ0KXtyZXR1'@;
put 'cm4gVnQgaW5zdGFuY2VvZiB0aGlzP1Z0Om5ldyB0aGlzKFZ0KX1zdGF0aWMgY29uY2F0KFZ0LC4uLnluKXtjb25zdCBnbj1uZXcgdGhpcyhWdCk7cmV0dXJuIHluLmZvckVhY2goUm49PmduLnNldChSbikpLGdufXN0YXRpYyBhY2Nlc3NvcihWdCl7Y29uc3QgZ249KHRoaXNbR25dPXRoaXNb'@;
put 'R25dPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsUm49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gdm4oZHIpe2NvbnN0IHZpPUtpKGRyKTtnblt2aV18fChmdW5jdGlvbiBQcihTdCxWdCl7Y29uc3QgeW49SXQudG9DYW1lbENhc2UoIiAiK1Z0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVh'@;
put 'Y2goZ249PntPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsZ24reW4se3ZhbHVlOmZ1bmN0aW9uKFJuLHZuLGRyKXtyZXR1cm4gdGhpc1tnbl0uY2FsbCh0aGlzLFZ0LFJuLHZuLGRyKX0sY29uZmlndXJhYmxlOiEwfSl9KX0oUm4sZHIpLGduW3ZpXT0hMCl9cmV0dXJuIEl0LmlzQXJyYXkoVnQp'@;
put 'P1Z0LmZvckVhY2godm4pOnZuKFZ0KSx0aGlzfX1ZaS5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSksSXQucmVkdWNlRGVzY3JpcHRvcnMoWWkucHJvdG90eXBl'@;
put 'LCh7dmFsdWU6U3R9LFZ0KT0+e2xldCB5bj1WdFswXS50b1VwcGVyQ2FzZSgpK1Z0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PlN0LHNldChnbil7dGhpc1t5bl09Z259fX0pLEl0LmZyZWV6ZU1ldGhvZHMoWWkpO3ZhciBmYT1ZaTtmdW5jdGlvbiBucihTdCxWdCl7Y29uc3QgeW49dGhpc3x8'@;
put 'Y2EsZ249VnR8fHluLFJuPWZhLmZyb20oZ24uaGVhZGVycyk7bGV0IHZuPWduLmRhdGE7cmV0dXJuIEl0LmZvckVhY2goU3QsZnVuY3Rpb24odmkpe3ZuPXZpLmNhbGwoeW4sdm4sUm4ubm9ybWFsaXplKCksVnQ/VnQuc3RhdHVzOnZvaWQgMCl9KSxSbi5ub3JtYWxpemUoKSx2bn1mdW5jdGlv'@;
put 'biBvYShTdCl7cmV0dXJuISghU3R8fCFTdC5fX0NBTkNFTF9fKX1mdW5jdGlvbiBfYShTdCxWdCx5bil7cnQuY2FsbCh0aGlzLFN0Pz8iY2FuY2VsZWQiLHJ0LkVSUl9DQU5DRUxFRCxWdCx5biksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1mdW5jdGlvbiBPYShTdCxWdCx5bil7Y29uc3Qg'@;
put 'Z249eW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO3luLnN0YXR1cyYmZ24mJiFnbih5bi5zdGF0dXMpP1Z0KG5ldyBydCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3luLnN0YXR1cyxbcnQuRVJSX0JBRF9SRVFVRVNULHJ0LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Io'@;
put 'eW4uc3RhdHVzLzEwMCktNF0seW4uY29uZmlnLHluLnJlcXVlc3QseW4pKTpTdCh5bil9SXQuaW5oZXJpdHMoX2EscnQse19fQ0FOQ0VMX186ITB9KTtjb25zdCBIbz0oU3QsVnQseW49Myk9PntsZXQgZ249MDtjb25zdCBSbj1mdW5jdGlvbiBlaShTdCxWdCl7U3Q9U3R8fDEwO2NvbnN0IHlu'@;
put 'PW5ldyBBcnJheShTdCksZ249bmV3IEFycmF5KFN0KTtsZXQgZHIsUm49MCx2bj0wO3JldHVybiBWdD12b2lkIDAhPT1WdD9WdDoxZTMsZnVuY3Rpb24oVnIpe2NvbnN0IHRhPURhdGUubm93KCksYWE9Z25bdm5dO2RyfHwoZHI9dGEpLHluW1JuXT1WcixnbltSbl09dGE7bGV0IGphPXZuLCRz'@;
put 'PTA7Zm9yKDtqYSE9PVJuOykkcys9eW5bamErK10samElPVN0O2lmKFJuPShSbisxKSVTdCxSbj09PXZuJiYodm49KHZuKzEpJVN0KSx0YS1kcjxWdClyZXR1cm47Y29uc3QgS2w9YWEmJnRhLWFhO3JldHVybiBLbD9NYXRoLnJvdW5kKDFlMyokcy9LbCk6dm9pZCAwfX0oNTAsMjUwKTtyZXR1'@;
put 'cm4gZnVuY3Rpb24gZnMoU3QsVnQpe2xldCBSbix2bix5bj0wLGduPTFlMy9WdDtjb25zdCBkcj0odGEsYWE9RGF0ZS5ub3coKSk9Pnt5bj1hYSxSbj1udWxsLHZuJiYoY2xlYXJUaW1lb3V0KHZuKSx2bj1udWxsKSxTdC5hcHBseShudWxsLHRhKX07cmV0dXJuWyguLi50YSk9Pntjb25zdCBh'@;
put 'YT1EYXRlLm5vdygpLGphPWFhLXluO2phPj1nbj9kcih0YSxhYSk6KFJuPXRhLHZufHwodm49c2V0VGltZW91dCgoKT0+e3ZuPW51bGwsZHIoUm4pfSxnbi1qYSkpKX0sKCk9PlJuJiZkcihSbildfSh2bj0+e2NvbnN0IGRyPXZuLmxvYWRlZCx2aT12bi5sZW5ndGhDb21wdXRhYmxlP3ZuLnRv'@;
put 'dGFsOnZvaWQgMCxWcj1kci1nbix0YT1SbihWcik7Z249ZHIsU3Qoe2xvYWRlZDpkcix0b3RhbDp2aSxwcm9ncmVzczp2aT9kci92aTp2b2lkIDAsYnl0ZXM6VnIscmF0ZTp0YXx8dm9pZCAwLGVzdGltYXRlZDp0YSYmdmkmJmRyPD12aT8odmktZHIpL3RhOnZvaWQgMCxldmVudDp2bixsZW5n'@;
put 'dGhDb21wdXRhYmxlOm51bGwhPXZpLFtWdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH0pfSx5bil9LG1sPShTdCxWdCk9Pntjb25zdCB5bj1udWxsIT1TdDtyZXR1cm5bZ249PlZ0WzBdKHtsZW5ndGhDb21wdXRhYmxlOnluLHRvdGFsOlN0LGxvYWRlZDpnbn0pLFZ0WzFdXX0sdXU9U3Q9Pigu'@;
put 'Li5WdCk9Pkl0LmFzYXAoKCk9PlN0KC4uLlZ0KSk7dmFyIEljPWp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj8oKFN0LFZ0KT0+eW49Pih5bj1uZXcgVVJMKHluLGp0Lm9yaWdpbiksU3QucHJvdG9jb2w9PT15bi5wcm90b2NvbCYmU3QuaG9zdD09PXluLmhvc3QmJihWdHx8U3QucG9ydD09PXlu'@;
put 'LnBvcnQpKSkobmV3IFVSTChqdC5vcmlnaW4pLGp0Lm5hdmlnYXRvciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChqdC5uYXZpZ2F0b3IudXNlckFnZW50KSk6KCk9PiEwLEEwPWp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoU3QsVnQseW4sZ24sUm4sdm4pe2NvbnN0IGRyPVtTdCsi'@;
put 'PSIrZW5jb2RlVVJJQ29tcG9uZW50KFZ0KV07SXQuaXNOdW1iZXIoeW4pJiZkci5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoeW4pLnRvR01UU3RyaW5nKCkpLEl0LmlzU3RyaW5nKGduKSYmZHIucHVzaCgicGF0aD0iK2duKSxJdC5pc1N0cmluZyhSbikmJmRyLnB1c2goImRvbWFpbj0iK1Ju'@;
put 'KSwhMD09PXZuJiZkci5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9ZHIuam9pbigiOyAiKX0scmVhZChTdCl7Y29uc3QgVnQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK1N0KyIpPShbXjtdKikiKSk7cmV0dXJuIFZ0P2RlY29kZVVSSUNvbXBv'@;
put 'bmVudChWdFszXSk6bnVsbH0scmVtb3ZlKFN0KXt0aGlzLndyaXRlKFN0LCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkOigpPT5udWxsLHJlbW92ZSgpe319O2Z1bmN0aW9uIGxpKFN0LFZ0LHluKXtsZXQgZ249IWZ1bmN0aW9uIG9yKFN0KXtyZXR1cm4vXihbYS16XVth'@;
put 'LXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KFN0KX0oVnQpO3JldHVybiBTdCYmZ258fDA9PXluP2Z1bmN0aW9uIFRhKFN0LFZ0KXtyZXR1cm4gVnQ/U3QucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK1Z0LnJlcGxhY2UoL15cLysvLCIiKTpTdH0oU3QsVnQpOlZ0fWNvbnN0IE50PVN0PT5TdCBp'@;
put 'bnN0YW5jZW9mIGZhP3suLi5TdH06U3Q7ZnVuY3Rpb24gWHIoU3QsVnQpe1Z0PVZ0fHx7fTtjb25zdCB5bj17fTtmdW5jdGlvbiBnbih0YSxhYSxqYSwkcyl7cmV0dXJuIEl0LmlzUGxhaW5PYmplY3QodGEpJiZJdC5pc1BsYWluT2JqZWN0KGFhKT9JdC5tZXJnZS5jYWxsKHtjYXNlbGVzczok'@;
put 'c30sdGEsYWEpOkl0LmlzUGxhaW5PYmplY3QoYWEpP0l0Lm1lcmdlKHt9LGFhKTpJdC5pc0FycmF5KGFhKT9hYS5zbGljZSgpOmFhfWZ1bmN0aW9uIFJuKHRhLGFhLGphLCRzKXtyZXR1cm4gSXQuaXNVbmRlZmluZWQoYWEpP0l0LmlzVW5kZWZpbmVkKHRhKT92b2lkIDA6Z24odm9pZCAwLHRh'@;
put 'LDAsJHMpOmduKHRhLGFhLDAsJHMpfWZ1bmN0aW9uIHZuKHRhLGFhKXtpZighSXQuaXNVbmRlZmluZWQoYWEpKXJldHVybiBnbih2b2lkIDAsYWEpfWZ1bmN0aW9uIGRyKHRhLGFhKXtyZXR1cm4gSXQuaXNVbmRlZmluZWQoYWEpP0l0LmlzVW5kZWZpbmVkKHRhKT92b2lkIDA6Z24odm9pZCAw'@;
put 'LHRhKTpnbih2b2lkIDAsYWEpfWZ1bmN0aW9uIHZpKHRhLGFhLGphKXtyZXR1cm4gamEgaW4gVnQ/Z24odGEsYWEpOmphIGluIFN0P2duKHZvaWQgMCx0YSk6dm9pZCAwfWNvbnN0IFZyPXt1cmw6dm4sbWV0aG9kOnZuLGRhdGE6dm4sYmFzZVVSTDpkcix0cmFuc2Zvcm1SZXF1ZXN0OmRyLHRy'@;
put 'YW5zZm9ybVJlc3BvbnNlOmRyLHBhcmFtc1NlcmlhbGl6ZXI6ZHIsdGltZW91dDpkcix0aW1lb3V0TWVzc2FnZTpkcix3aXRoQ3JlZGVudGlhbHM6ZHIsd2l0aFhTUkZUb2tlbjpkcixhZGFwdGVyOmRyLHJlc3BvbnNlVHlwZTpkcix4c3JmQ29va2llTmFtZTpkcix4c3JmSGVhZGVyTmFtZTpk'@;
put 'cixvblVwbG9hZFByb2dyZXNzOmRyLG9uRG93bmxvYWRQcm9ncmVzczpkcixkZWNvbXByZXNzOmRyLG1heENvbnRlbnRMZW5ndGg6ZHIsbWF4Qm9keUxlbmd0aDpkcixiZWZvcmVSZWRpcmVjdDpkcix0cmFuc3BvcnQ6ZHIsaHR0cEFnZW50OmRyLGh0dHBzQWdlbnQ6ZHIsY2FuY2VsVG9rZW46'@;
put 'ZHIsc29ja2V0UGF0aDpkcixyZXNwb25zZUVuY29kaW5nOmRyLHZhbGlkYXRlU3RhdHVzOnZpLGhlYWRlcnM6KHRhLGFhLGphKT0+Um4oTnQodGEpLE50KGFhKSwwLCEwKX07cmV0dXJuIEl0LmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxTdCxWdCkpLGZ1bmN0aW9uKGFh'@;
put 'KXtjb25zdCBqYT1WclthYV18fFJuLCRzPWphKFN0W2FhXSxWdFthYV0sYWEpO0l0LmlzVW5kZWZpbmVkKCRzKSYmamEhPT12aXx8KHluW2FhXT0kcyl9KSx5bn12YXIgZzA9U3Q9Pntjb25zdCBWdD1Ycih7fSxTdCk7bGV0IFZyLHtkYXRhOnluLHdpdGhYU1JGVG9rZW46Z24seHNyZkhlYWRl'@;
put 'ck5hbWU6Um4seHNyZkNvb2tpZU5hbWU6dm4saGVhZGVyczpkcixhdXRoOnZpfT1WdDtpZihWdC5oZWFkZXJzPWRyPWZhLmZyb20oZHIpLFZ0LnVybD1GcihsaShWdC5iYXNlVVJMLFZ0LnVybCksU3QucGFyYW1zLFN0LnBhcmFtc1NlcmlhbGl6ZXIpLHZpJiZkci5zZXQoIkF1dGhvcml6YXRp'@;
put 'b24iLCJCYXNpYyAiK2J0b2EoKHZpLnVzZXJuYW1lfHwiIikrIjoiKyh2aS5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodmkucGFzc3dvcmQpKToiIikpKSxJdC5pc0Zvcm1EYXRhKHluKSlpZihqdC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fGp0Lmhhc1N0YW5kYXJkQnJv'@;
put 'd3NlcldlYldvcmtlckVudilkci5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoITEhPT0oVnI9ZHIuZ2V0Q29udGVudFR5cGUoKSkpe2NvbnN0W3RhLC4uLmFhXT1Wcj9Wci5zcGxpdCgiOyIpLm1hcChqYT0+amEudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ZHIuc2V0Q29udGVu'@;
put 'dFR5cGUoW3RhfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uYWFdLmpvaW4oIjsgIikpfWlmKGp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKGduJiZJdC5pc0Z1bmN0aW9uKGduKSYmKGduPWduKFZ0KSksZ258fCExIT09Z24mJkljKFZ0LnVybCkpKXtjb25zdCB0YT1SbiYmdm4mJkEwLnJl'@;
put 'YWQodm4pO3RhJiZkci5zZXQoUm4sdGEpfXJldHVybiBWdH0sRHU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IiYmZnVuY3Rpb24oU3Qpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih5bixnbil7Y29uc3QgUm49ZzAoU3QpO2xldCB2bj1Sbi5kYXRhO2NvbnN0IGRyPWZhLmZyb20oUm4u'@;
put 'aGVhZGVycykubm9ybWFsaXplKCk7bGV0IGFhLGphLCRzLEtsLGVzLHtyZXNwb25zZVR5cGU6dmksb25VcGxvYWRQcm9ncmVzczpWcixvbkRvd25sb2FkUHJvZ3Jlc3M6dGF9PVJuO2Z1bmN0aW9uIGJzKCl7S2wmJktsKCksZXMmJmVzKCksUm4uY2FuY2VsVG9rZW4mJlJuLmNhbmNlbFRva2Vu'@;
put 'LnVuc3Vic2NyaWJlKGFhKSxSbi5zaWduYWwmJlJuLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYWEpfWxldCBqaT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gTGMoKXtpZighamkpcmV0dXJuO2NvbnN0IFNhPWZhLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJp'@;
put 'biBqaSYmamkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO09hKGZ1bmN0aW9uKEcwKXt5bihHMCksYnMoKX0sZnVuY3Rpb24oRzApe2duKEcwKSxicygpfSx7ZGF0YTp2aSYmInRleHQiIT09dmkmJiJqc29uIiE9PXZpP2ppLnJlc3BvbnNlOmppLnJlc3BvbnNlVGV4dCxzdGF0dXM6amkuc3Rh'@;
put 'dHVzLHN0YXR1c1RleHQ6amkuc3RhdHVzVGV4dCxoZWFkZXJzOlNhLGNvbmZpZzpTdCxyZXF1ZXN0OmppfSksamk9bnVsbH1qaS5vcGVuKFJuLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFJuLnVybCwhMCksamkudGltZW91dD1Sbi50aW1lb3V0LCJvbmxvYWRlbmQiaW4gamk/amkub25sb2FkZW5k'@;
put 'PUxjOmppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFqaXx8NCE9PWppLnJlYWR5U3RhdGV8fDA9PT1qaS5zdGF0dXMmJighamkucmVzcG9uc2VVUkx8fDAhPT1qaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKXx8c2V0VGltZW91dChMYyl9LGppLm9uYWJvcnQ9ZnVuY3Rp'@;
put 'b24oKXtqaSYmKGduKG5ldyBydCgiUmVxdWVzdCBhYm9ydGVkIixydC5FQ09OTkFCT1JURUQsU3QsamkpKSxqaT1udWxsKX0samkub25lcnJvcj1mdW5jdGlvbigpe2duKG5ldyBydCgiTmV0d29yayBFcnJvciIscnQuRVJSX05FVFdPUkssU3QsamkpKSxqaT1udWxsfSxqaS5vbnRpbWVvdXQ9'@;
put 'ZnVuY3Rpb24oKXtsZXQga2E9Um4udGltZW91dD8idGltZW91dCBvZiAiK1JuLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCI7Um4udGltZW91dEVycm9yTWVzc2FnZSYmKGthPVJuLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGduKG5ldyBydChrYSwoUm4udHJhbnNpdGlv'@;
put 'bmFsfHxMbikuY2xhcmlmeVRpbWVvdXRFcnJvcj9ydC5FVElNRURPVVQ6cnQuRUNPTk5BQk9SVEVELFN0LGppKSksamk9bnVsbH0sdm9pZCAwPT09dm4mJmRyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGppJiZJdC5mb3JFYWNoKGRyLnRvSlNPTigpLGZ1bmN0'@;
put 'aW9uKGthLFFoKXtqaS5zZXRSZXF1ZXN0SGVhZGVyKFFoLGthKX0pLEl0LmlzVW5kZWZpbmVkKFJuLndpdGhDcmVkZW50aWFscyl8fChqaS53aXRoQ3JlZGVudGlhbHM9ISFSbi53aXRoQ3JlZGVudGlhbHMpLHZpJiYianNvbiIhPT12aSYmKGppLnJlc3BvbnNlVHlwZT1Sbi5yZXNwb25zZVR5'@;
put 'cGUpLHRhJiYoWyRzLGVzXT1Ibyh0YSwhMCksamkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLCRzKSksVnImJmppLnVwbG9hZCYmKFtqYSxLbF09SG8oVnIpLGppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsamEpLGppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJs'@;
put 'b2FkZW5kIixLbCkpLChSbi5jYW5jZWxUb2tlbnx8Um4uc2lnbmFsKSYmKGFhPVNhPT57amkmJihnbighU2F8fFNhLnR5cGU/bmV3IF9hKG51bGwsU3QsamkpOlNhKSxqaS5hYm9ydCgpLGppPW51bGwpfSxSbi5jYW5jZWxUb2tlbiYmUm4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGFhKSxSbi5z'@;
put 'aWduYWwmJihSbi5zaWduYWwuYWJvcnRlZD9hYSgpOlJuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYWEpKSk7Y29uc3QgVmw9ZnVuY3Rpb24gTmEoU3Qpe2NvbnN0IFZ0PS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKFN0KTtyZXR1cm4gVnQmJlZ0WzFdfHwiIn0o'@;
put 'Um4udXJsKTtWbCYmLTE9PT1qdC5wcm90b2NvbHMuaW5kZXhPZihWbCk/Z24obmV3IHJ0KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK1ZsKyI6IixydC5FUlJfQkFEX1JFUVVFU1QsU3QpKTpqaS5zZW5kKHZufHxudWxsKX0pfSxsZD0oU3QsVnQpPT57Y29uc3R7bGVuZ3RoOnlufT1TdD1TdD9T'@;
put 'dC5maWx0ZXIoQm9vbGVhbik6W107aWYoVnR8fHluKXtsZXQgUm4sZ249bmV3IEFib3J0Q29udHJvbGxlcjtjb25zdCB2bj1mdW5jdGlvbih0YSl7aWYoIVJuKXtSbj0hMCx2aSgpO2NvbnN0IGFhPXRhIGluc3RhbmNlb2YgRXJyb3I/dGE6dGhpcy5yZWFzb247Z24uYWJvcnQoYWEgaW5zdGFu'@;
put 'Y2VvZiBydD9hYTpuZXcgX2EoYWEgaW5zdGFuY2VvZiBFcnJvcj9hYS5tZXNzYWdlOmFhKSl9fTtsZXQgZHI9VnQmJnNldFRpbWVvdXQoKCk9Pntkcj1udWxsLHZuKG5ldyBydChgdGltZW91dCAke1Z0fSBvZiBtcyBleGNlZWRlZGAscnQuRVRJTUVET1VUKSl9LFZ0KTtjb25zdCB2aT0oKT0+'@;
put 'e1N0JiYoZHImJmNsZWFyVGltZW91dChkciksZHI9bnVsbCxTdC5mb3JFYWNoKHRhPT57dGEudW5zdWJzY3JpYmU/dGEudW5zdWJzY3JpYmUodm4pOnRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix2bil9KSxTdD1udWxsKX07U3QuZm9yRWFjaCh0YT0+dGEuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cigiYWJvcnQiLHZuKSk7Y29uc3R7c2lnbmFsOlZyfT1nbjtyZXR1cm4gVnIudW5zdWJzY3JpYmU9KCk9Pkl0LmFzYXAodmkpLFZyfX07Y29uc3QgJGg9ZnVuY3Rpb24qKFN0LFZ0KXtsZXQgeW49U3QuYnl0ZUxlbmd0aDtpZighVnR8fHluPFZ0KXJldHVybiB2b2lkKHlpZWxkIFN0KTtsZXQg'@;
put 'Um4sZ249MDtmb3IoO2duPHluOylSbj1nbitWdCx5aWVsZCBTdC5zbGljZShnbixSbiksZ249Um59LHBmPWZ1bmN0aW9uKCl7dmFyIFN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKFZ0LHluKXt2YXIgdm4sZ249ITEsUm49ITE7dHJ5e2Zvcih2YXIgdmksZHI9X2FzeW5jSXRlcmF0'@;
put 'b3Iod28oVnQpKTtnbj0hKHZpPXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKGRyLm5leHQoKSkpLmRvbmU7Z249ITEpe2NvbnN0IFZyPXZpLnZhbHVlO3lpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKCRoKFZyLHluKSksX2F3YWl0QXN5bmNHZW5lcmF0b3Ip'@;
put 'fX1jYXRjaChWcil7Um49ITAsdm49VnJ9ZmluYWxseXt0cnl7Z24mJm51bGwhPWRyLnJldHVybiYmKHlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKGRyLnJldHVybigpKSl9ZmluYWxseXtpZihSbil0aHJvdyB2bn19fSk7cmV0dXJuIGZ1bmN0aW9uKHluLGduKXtyZXR1cm4gU3QuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfX0oKSx3bz1mdW5jdGlvbigpe3ZhciBTdD1fd3JhcEFzeW5jR2VuZXJhdG9yKGZ1bmN0aW9uKihWdCl7aWYoVnRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiB2b2lkKHlpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKFZ0KSxf'@;
put 'YXdhaXRBc3luY0dlbmVyYXRvcikpO2NvbnN0IHluPVZ0LmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2NvbnN0e2RvbmU6Z24sdmFsdWU6Um59PXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKHluLnJlYWQoKSk7aWYoZ24pYnJlYWs7eWllbGQgUm59fWZpbmFsbHl7eWllbGQgX2F3YWl0QXN5'@;
put 'bmNHZW5lcmF0b3IoeW4uY2FuY2VsKCkpfX0pO3JldHVybiBmdW5jdGlvbih5bil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksR2k9KFN0LFZ0LHluLGduKT0+e2NvbnN0IFJuPXBmKFN0LFZ0KTtsZXQgZHIsdm49MCx2aT1Wcj0+e2RyfHwoZHI9ITAsZ24mJmduKFZyKSl9'@;
put 'O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3B1bGw6VnI9Pl9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtjb25zdHtkb25lOnRhLHZhbHVlOmFhfT15aWVsZCBSbi5uZXh0KCk7aWYodGEpcmV0dXJuIHZpKCksdm9pZCBWci5jbG9zZSgpO2lmKHluKXtsZXQgJHM9dm4rPWFh'@;
put 'LmJ5dGVMZW5ndGg7eW4oJHMpfVZyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYWEpKX1jYXRjaCh0YSl7dGhyb3cgdmkodGEpLHRhfX0pKCksY2FuY2VsOlZyPT4odmkoVnIpLFJuLnJldHVybigpKX0se2hpZ2hXYXRlck1hcms6Mn0pfSx2bD0iZnVuY3Rpb24iPT10eXBlb2YgZmV0Y2gmJiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBSZXF1ZXN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UsWGM9dmwmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWFkYWJsZVN0cmVhbSxRZz12bCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZXh0RW5jb2Rlcj8oU3Q9PlZ0PT5TdC5lbmNvZGUoVnQpKShuZXcgVGV4'@;
put 'dEVuY29kZXIpOmZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihWdCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIG5ldyBSZXNwb25zZShWdCkuYXJyYXlCdWZmZXIoKSl9KTtyZXR1cm4gZnVuY3Rpb24oVnQpe3JldHVybiBTdC5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9fSgpKSxtMD0oU3QsLi4uVnQpPT57dHJ5e3JldHVybiEhU3QoLi4uVnQpfWNhdGNoe3JldHVybiExfX0sZTU9WGMmJm0wKCgpPT57bGV0IFN0PSExO2NvbnN0IFZ0PW5ldyBSZXF1ZXN0KGp0Lm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixn'@;
put 'ZXQgZHVwbGV4KCl7cmV0dXJuIFN0PSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIFN0JiYhVnR9KSxnZj1YYyYmbTAoKCk9Pkl0LmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksY2Q9e3N0cmVhbTpnZiYmKFN0PT5TdC5ib2R5'@;
put 'KX07dmwmJihTdD0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaChWdD0+eyFjZFtWdF0mJihjZFtWdF09SXQuaXNGdW5jdGlvbihTdFtWdF0pP3luPT55bltWdF0oKTooeW4sZ24pPT57dGhyb3cgbmV3IHJ0KGBSZXNwb25zZSB0eXBl'@;
put 'ICcke1Z0fScgaXMgbm90IHN1cHBvcnRlZGAscnQuRVJSX05PVF9TVVBQT1JULGduKX0pfSl9KShuZXcgUmVzcG9uc2UpO2NvbnN0IG1mPWZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihWdCl7cmV0dXJuIG51bGw9PVZ0PzA6SXQuaXNCbG9iKFZ0KT9WdC5z'@;
put 'aXplOkl0LmlzU3BlY0NvbXBsaWFudEZvcm0oVnQpPyh5aWVsZCBuZXcgUmVxdWVzdChqdC5vcmlnaW4se21ldGhvZDoiUE9TVCIsYm9keTpWdH0pLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg6SXQuaXNBcnJheUJ1ZmZlclZpZXcoVnQpfHxJdC5pc0FycmF5QnVmZmVyKFZ0KT9WdC5ieXRl'@;
put 'TGVuZ3RoOihJdC5pc1VSTFNlYXJjaFBhcmFtcyhWdCkmJihWdCs9IiIpLEl0LmlzU3RyaW5nKFZ0KT8oeWllbGQgUWcoVnQpKS5ieXRlTGVuZ3RoOnZvaWQgMCl9KTtyZXR1cm4gZnVuY3Rpb24oeW4pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLEQxPWZ1bmN0aW9uKCl7'@;
put 'dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihWdCx5bil7cmV0dXJuIEl0LnRvRmluaXRlTnVtYmVyKFZ0LmdldENvbnRlbnRMZW5ndGgoKSk/P21mKHluKX0pO3JldHVybiBmdW5jdGlvbih5bixnbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7dmFyIHZm'@;
put 'PXZsJiZmdW5jdGlvbigpe3ZhciBTdD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVnQpe2xldHt1cmw6eW4sbWV0aG9kOmduLGRhdGE6Um4sc2lnbmFsOnZuLGNhbmNlbFRva2VuOmRyLHRpbWVvdXQ6dmksb25Eb3dubG9hZFByb2dyZXNzOlZyLG9uVXBsb2FkUHJvZ3Jlc3M6dGEscmVz'@;
put 'cG9uc2VUeXBlOmFhLGhlYWRlcnM6amEsd2l0aENyZWRlbnRpYWxzOiRzPSJzYW1lLW9yaWdpbiIsZmV0Y2hPcHRpb25zOktsfT1nMChWdCk7YWE9YWE/KGFhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXQgYnMsZXM9bGQoW3ZuLGRyJiZkci50b0Fib3J0U2lnbmFsKCldLHZpKTtjb25z'@;
put 'dCBqaT1lcyYmZXMudW5zdWJzY3JpYmUmJigoKT0+e2VzLnVuc3Vic2NyaWJlKCl9KTtsZXQgTGM7dHJ5e2lmKHRhJiZlNSYmImdldCIhPT1nbiYmImhlYWQiIT09Z24mJjAhPT0oTGM9eWllbGQgRDEoamEsUm4pKSl7bGV0IEcwLFkwPW5ldyBSZXF1ZXN0KHluLHttZXRob2Q6IlBPU1QiLGJv'@;
put 'ZHk6Um4sZHVwbGV4OiJoYWxmIn0pO2lmKEl0LmlzRm9ybURhdGEoUm4pJiYoRzA9WTAuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmamEuc2V0Q29udGVudFR5cGUoRzApLFkwLmJvZHkpe2NvbnN0W1ZzLHFpXT1tbChMYyxIbyh1dSh0YSkpKTtSbj1HaShZMC5ib2R5LDY1NTM2LFZz'@;
put 'LHFpKX19SXQuaXNTdHJpbmcoJHMpfHwoJHM9JHM/ImluY2x1ZGUiOiJvbWl0Iik7Y29uc3QgVmw9ImNyZWRlbnRpYWxzImluIFJlcXVlc3QucHJvdG90eXBlO2JzPW5ldyBSZXF1ZXN0KHluLHsuLi5LbCxzaWduYWw6ZXMsbWV0aG9kOmduLnRvVXBwZXJDYXNlKCksaGVhZGVyczpqYS5ub3Jt'@;
put 'YWxpemUoKS50b0pTT04oKSxib2R5OlJuLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6Vmw/JHM6dm9pZCAwfSk7bGV0IFNhPXlpZWxkIGZldGNoKGJzKTtjb25zdCBrYT1nZiYmKCJzdHJlYW0iPT09YWF8fCJyZXNwb25zZSI9PT1hYSk7aWYoZ2YmJihWcnx8a2EmJmppKSl7Y29uc3QgWTA9'@;
put 'e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goU289PntZMFtTb109U2FbU29dfSk7Y29uc3QgRzA9SXQudG9GaW5pdGVOdW1iZXIoU2EuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtWcyxxaV09VnImJm1sKEcwLEhvKHV1KFZyKSwhMCkpfHxbXTtT'@;
put 'YT1uZXcgUmVzcG9uc2UoR2koU2EuYm9keSw2NTUzNixWcywoKT0+e3FpJiZxaSgpLGppJiZqaSgpfSksWTApfWFhPWFhfHwidGV4dCI7bGV0IFFoPXlpZWxkIGNkW0l0LmZpbmRLZXkoY2QsYWEpfHwidGV4dCJdKFNhLFZ0KTtyZXR1cm4ha2EmJmppJiZqaSgpLHlpZWxkIG5ldyBQcm9taXNl'@;
put 'KChZMCxHMCk9PntPYShZMCxHMCx7ZGF0YTpRaCxoZWFkZXJzOmZhLmZyb20oU2EuaGVhZGVycyksc3RhdHVzOlNhLnN0YXR1cyxzdGF0dXNUZXh0OlNhLnN0YXR1c1RleHQsY29uZmlnOlZ0LHJlcXVlc3Q6YnN9KX0pfWNhdGNoKFZsKXt0aHJvdyBqaSYmamkoKSxWbCYmIlR5cGVFcnJvciI9'@;
put 'PT1WbC5uYW1lJiYvZmV0Y2gvaS50ZXN0KFZsLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHJ0KCJOZXR3b3JrIEVycm9yIixydC5FUlJfTkVUV09SSyxWdCxicykse2NhdXNlOlZsLmNhdXNlfHxWbH0pOnJ0LmZyb20oVmwsVmwmJlZsLmNvZGUsVnQsYnMpfX0pO3JldHVybiBmdW5jdGlv'@;
put 'bihWdCl7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7Y29uc3QgZWg9e2h0dHA6bnVsbCx4aHI6RHUsZmV0Y2g6dmZ9O0l0LmZvckVhY2goZWgsKFN0LFZ0KT0+e2lmKFN0KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJuYW1lIix7dmFsdWU6VnR9KX1jYXRjaHt9'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJhZGFwdGVyTmFtZSIse3ZhbHVlOlZ0fSl9fSk7Y29uc3QgeWY9U3Q9PmAtICR7U3R9YCxLaD1TdD0+SXQuaXNGdW5jdGlvbihTdCl8fG51bGw9PT1TdHx8ITE9PT1TdDt2YXIgUmNfZ2V0QWRhcHRlcj1TdD0+e1N0PUl0LmlzQXJyYXkoU3QpP1N0'@;
put 'OltTdF07Y29uc3R7bGVuZ3RoOlZ0fT1TdDtsZXQgeW4sZ247Y29uc3QgUm49e307Zm9yKGxldCB2bj0wO3ZuPFZ0O3ZuKyspe2xldCBkcjtpZih5bj1TdFt2bl0sZ249eW4sIUtoKHluKSYmKGduPWVoWyhkcj1TdHJpbmcoeW4pKS50b0xvd2VyQ2FzZSgpXSx2b2lkIDA9PT1nbikpdGhyb3cg'@;
put 'bmV3IHJ0KGBVbmtub3duIGFkYXB0ZXIgJyR7ZHJ9J2ApO2lmKGduKWJyZWFrO1JuW2RyfHwiIyIrdm5dPWdufWlmKCFnbil7Y29uc3Qgdm49T2JqZWN0LmVudHJpZXMoUm4pLm1hcCgoW3ZpLFZyXSk9PmBhZGFwdGVyICR7dml9IGArKCExPT09VnI/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhl'@;
put 'IGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSk7dGhyb3cgbmV3IHJ0KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrKFZ0P3ZuLmxlbmd0aD4xPyJzaW5jZSA6XG4iK3ZuLm1hcCh5Zikuam9pbigiXG4i'@;
put 'KToiICIreWYodm5bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCIpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZ259O2Z1bmN0aW9uIEJhKFN0KXtpZihTdC5jYW5jZWxUb2tlbiYmU3QuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLFN0LnNpZ25hbCYmU3Quc2lnbmFsLmFi'@;
put 'b3J0ZWQpdGhyb3cgbmV3IF9hKG51bGwsU3QpfWZ1bmN0aW9uIEkzKFN0KXtyZXR1cm4gQmEoU3QpLFN0LmhlYWRlcnM9ZmEuZnJvbShTdC5oZWFkZXJzKSxTdC5kYXRhPW5yLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVxdWVzdCksLTEhPT1bInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2Yo'@;
put 'U3QubWV0aG9kKSYmU3QuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksUmNfZ2V0QWRhcHRlcihTdC5hZGFwdGVyfHxjYS5hZGFwdGVyKShTdCkudGhlbihmdW5jdGlvbihnbil7cmV0dXJuIEJhKFN0KSxnbi5kYXRhPW5yLmNh'@;
put 'bGwoU3QsU3QudHJhbnNmb3JtUmVzcG9uc2UsZ24pLGduLmhlYWRlcnM9ZmEuZnJvbShnbi5oZWFkZXJzKSxnbn0sZnVuY3Rpb24oZ24pe3JldHVybiBvYShnbil8fChCYShTdCksZ24mJmduLnJlc3BvbnNlJiYoZ24ucmVzcG9uc2UuZGF0YT1uci5jYWxsKFN0LFN0LnRyYW5zZm9ybVJlc3Bv'@;
put 'bnNlLGduLnJlc3BvbnNlKSxnbi5yZXNwb25zZS5oZWFkZXJzPWZhLmZyb20oZ24ucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChnbil9KX1jb25zdCBxaD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVh'@;
put 'Y2goKFN0LFZ0KT0+e3FoW1N0XT1mdW5jdGlvbihnbil7cmV0dXJuIHR5cGVvZiBnbj09PVN0fHwiYSIrKFZ0PDE/Im4gIjoiICIpK1N0fX0pO2NvbnN0IEpoPXt9O3FoLnRyYW5zaXRpb25hbD1mdW5jdGlvbihWdCx5bixnbil7ZnVuY3Rpb24gUm4odm4sZHIpe3JldHVybiJbQXhpb3MgdjEu'@;
put 'OC4yXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK3ZuKyInIitkcisoZ24/Ii4gIitnbjoiIil9cmV0dXJuKHZuLGRyLHZpKT0+e2lmKCExPT09VnQpdGhyb3cgbmV3IHJ0KFJuKGRyLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHluPyIgaW4gIit5bjoiIikpLHJ0LkVSUl9ERVBSRUNBVEVEKTtyZXR1'@;
put 'cm4geW4mJiFKaFtkcl0mJihKaFtkcl09ITAscC53YXJuKFJuKGRyLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit5bisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhVnR8fFZ0KHZuLGRyLHZpKX19LHFoLnNwZWxsaW5nPWZ1bmN0aW9uKFZ0KXty'@;
put 'ZXR1cm4oeW4sZ24pPT4ocC53YXJuKGAke2dufSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke1Z0fWApLCEwKX07dmFyIHJuPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uIEFuKFN0LFZ0LHluKXtpZigib2JqZWN0IiE9dHlwZW9mIFN0KXRocm93IG5ldyBydCgib3B0aW9ucyBtdXN0IGJl'@;
put 'IGFuIG9iamVjdCIscnQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnN0IGduPU9iamVjdC5rZXlzKFN0KTtsZXQgUm49Z24ubGVuZ3RoO2Zvcig7Um4tLSA+MDspe2NvbnN0IHZuPWduW1JuXSxkcj1WdFt2bl07aWYoZHIpe2NvbnN0IHZpPVN0W3ZuXSxWcj12b2lkIDA9PT12aXx8ZHIodmks'@;
put 'dm4sU3QpO2lmKCEwIT09VnIpdGhyb3cgbmV3IHJ0KCJvcHRpb24gIit2bisiIG11c3QgYmUgIitWcixydC5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBpZighMCE9PXluKXRocm93IG5ldyBydCgiVW5rbm93biBvcHRpb24gIit2bixydC5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3Jz'@;
put 'OnFofTtjb25zdCBtaT1ybi52YWxpZGF0b3JzO2NsYXNzIEFye2NvbnN0cnVjdG9yKFZ0KXt0aGlzLmRlZmF1bHRzPVZ0LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBrdCxyZXNwb25zZTpuZXcga3R9fXJlcXVlc3QoVnQseW4pe3ZhciBnbj10aGlzO3JldHVybiBfYXN5bmNUb0dl'@;
put 'bmVyYXRvcihmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIGduLl9yZXF1ZXN0KFZ0LHluKX1jYXRjaChSbil7aWYoUm4gaW5zdGFuY2VvZiBFcnJvcil7bGV0IHZuPXt9O0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHZuKTp2bj1uZXcgRXJyb3I7'@;
put 'Y29uc3QgZHI9dm4uc3RhY2s/dm4uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0cnl7Um4uc3RhY2s/ZHImJiFTdHJpbmcoUm4uc3RhY2spLmVuZHNXaXRoKGRyLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKFJuLnN0YWNrKz0iXG4iK2RyKTpSbi5zdGFjaz1kcn1jYXRjaHt9fXRo'@;
put 'cm93IFJufX0pKCl9X3JlcXVlc3QoVnQseW4peyJzdHJpbmciPT10eXBlb2YgVnQ/KHluPXlufHx7fSkudXJsPVZ0OnluPVZ0fHx7fSx5bj1Ycih0aGlzLmRlZmF1bHRzLHluKTtjb25zdHt0cmFuc2l0aW9uYWw6Z24scGFyYW1zU2VyaWFsaXplcjpSbixoZWFkZXJzOnZufT15bjt2b2lkIDAh'@;
put 'PT1nbiYmcm4uYXNzZXJ0T3B0aW9ucyhnbix7c2lsZW50SlNPTlBhcnNpbmc6bWkudHJhbnNpdGlvbmFsKG1pLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOm1pLnRyYW5zaXRpb25hbChtaS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOm1pLnRyYW5zaXRpb25hbChtaS5ib29sZWFu'@;
put 'KX0sITEpLG51bGwhPVJuJiYoSXQuaXNGdW5jdGlvbihSbik/eW4ucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOlJufTpybi5hc3NlcnRPcHRpb25zKFJuLHtlbmNvZGU6bWkuZnVuY3Rpb24sc2VyaWFsaXplOm1pLmZ1bmN0aW9ufSwhMCkpLHZvaWQgMCE9PXluLmFsbG93QWJzb2x1dGVV'@;
put 'cmxzfHwoeW4uYWxsb3dBYnNvbHV0ZVVybHM9dm9pZCAwPT09dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJsc3x8dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscykscm4uYXNzZXJ0T3B0aW9ucyh5bix7YmFzZVVybDptaS5zcGVsbGluZygiYmFzZVVSTCIpLHdpdGhYc3JmVG9r'@;
put 'ZW46bWkuc3BlbGxpbmcoIndpdGhYU1JGVG9rZW4iKX0sITApLHluLm1ldGhvZD0oeW4ubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGRyPXZuJiZJdC5tZXJnZSh2bi5jb21tb24sdm5beW4ubWV0aG9kXSk7dm4mJkl0LmZvckVhY2goWyJk'@;
put 'ZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sZXM9PntkZWxldGUgdm5bZXNdfSkseW4uaGVhZGVycz1mYS5jb25jYXQoZHIsdm4pO2NvbnN0IHZpPVtdO2xldCBWcj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24o'@;
put 'YnMpeyJmdW5jdGlvbiI9PXR5cGVvZiBicy5ydW5XaGVuJiYhMT09PWJzLnJ1bldoZW4oeW4pfHwoVnI9VnImJmJzLnN5bmNocm9ub3VzLHZpLnVuc2hpZnQoYnMuZnVsZmlsbGVkLGJzLnJlamVjdGVkKSl9KTtjb25zdCB0YT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKGJzKXt0YS5wdXNoKGJzLmZ1bGZpbGxlZCxicy5yZWplY3RlZCl9KTtsZXQgYWEsJHMsamE9MDtpZighVnIpe2NvbnN0IGVzPVtJMy5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKGVzLnVuc2hpZnQuYXBwbHkoZXMsdmkpLGVzLnB1c2guYXBwbHkoZXMsdGEpLCRzPWVzLmxlbmd0'@;
put 'aCxhYT1Qcm9taXNlLnJlc29sdmUoeW4pO2phPCRzOylhYT1hYS50aGVuKGVzW2phKytdLGVzW2phKytdKTtyZXR1cm4gYWF9JHM9dmkubGVuZ3RoO2xldCBLbD15bjtmb3IoamE9MDtqYTwkczspe2NvbnN0IGVzPXZpW2phKytdLGJzPXZpW2phKytdO3RyeXtLbD1lcyhLbCl9Y2F0Y2goamkp'@;
put 'e2JzLmNhbGwodGhpcyxqaSk7YnJlYWt9fXRyeXthYT1JMy5jYWxsKHRoaXMsS2wpfWNhdGNoKGVzKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXMpfWZvcihqYT0wLCRzPXRhLmxlbmd0aDtqYTwkczspYWE9YWEudGhlbih0YVtqYSsrXSx0YVtqYSsrXSk7cmV0dXJuIGFhfWdldFVyaShWdCl7'@;
put 'cmV0dXJuIEZyKGxpKChWdD1Ycih0aGlzLmRlZmF1bHRzLFZ0KSkuYmFzZVVSTCxWdC51cmwsVnQuYWxsb3dBYnNvbHV0ZVVybHMpLFZ0LnBhcmFtcyxWdC5wYXJhbXNTZXJpYWxpemVyKX19SXQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oVnQp'@;
put 'e0FyLnByb3RvdHlwZVtWdF09ZnVuY3Rpb24oeW4sZ24pe3JldHVybiB0aGlzLnJlcXVlc3QoWHIoZ258fHt9LHttZXRob2Q6VnQsdXJsOnluLGRhdGE6KGdufHx7fSkuZGF0YX0pKX19KSxJdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oVnQpe2Z1bmN0aW9uIHlu'@;
put 'KGduKXtyZXR1cm4gZnVuY3Rpb24odm4sZHIsdmkpe3JldHVybiB0aGlzLnJlcXVlc3QoWHIodml8fHt9LHttZXRob2Q6VnQsaGVhZGVyczpnbj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6dm4sZGF0YTpkcn0pKX19QXIucHJvdG90eXBlW1Z0XT15bigp'@;
put 'LEFyLnByb3RvdHlwZVtWdCsiRm9ybSJdPXluKCEwKX0pO3ZhciBGcz1BcjtjbGFzcyBRYXtjb25zdHJ1Y3RvcihWdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFZ0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgeW47dGhpcy5wcm9taXNl'@;
put 'PW5ldyBQcm9taXNlKGZ1bmN0aW9uKHZuKXt5bj12bn0pO2NvbnN0IGduPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oUm49PntpZighZ24uX2xpc3RlbmVycylyZXR1cm47bGV0IHZuPWduLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7dm4tLSA+MDspZ24uX2xpc3RlbmVyc1t2bl0oUm4pO2duLl9s'@;
put 'aXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPVJuPT57bGV0IHZuO2NvbnN0IGRyPW5ldyBQcm9taXNlKHZpPT57Z24uc3Vic2NyaWJlKHZpKSx2bj12aX0pLnRoZW4oUm4pO3JldHVybiBkci5jYW5jZWw9ZnVuY3Rpb24oKXtnbi51bnN1YnNjcmliZSh2bil9LGRyfSxWdChmdW5j'@;
put 'dGlvbih2bixkcix2aSl7Z24ucmVhc29ufHwoZ24ucmVhc29uPW5ldyBfYSh2bixkcix2aSkseW4oZ24ucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKFZ0KXt0aGlzLnJlYXNvbj9WdCh0aGlzLnJlYXNvbik6'@;
put 'dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKFZ0KTp0aGlzLl9saXN0ZW5lcnM9W1Z0XX11bnN1YnNjcmliZShWdCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgeW49dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoVnQpOy0xIT09eW4mJnRoaXMuX2xpc3RlbmVy'@;
put 'cy5zcGxpY2UoeW4sMSl9dG9BYm9ydFNpZ25hbCgpe2NvbnN0IFZ0PW5ldyBBYm9ydENvbnRyb2xsZXIseW49Z249PntWdC5hYm9ydChnbil9O3JldHVybiB0aGlzLnN1YnNjcmliZSh5biksVnQuc2lnbmFsLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKHluKSxWdC5zaWduYWx9'@;
put 'c3RhdGljIHNvdXJjZSgpe2xldCBWdDtyZXR1cm57dG9rZW46bmV3IFFhKGZ1bmN0aW9uKFJuKXtWdD1Sbn0pLGNhbmNlbDpWdH19fXZhciBybD1RYTtjb25zdCBDbz17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6'@;
put 'MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBs'@;
put 'ZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3Jp'@;
put 'emVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQx'@;
put 'MCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxN'@;
put 'aXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhl'@;
put 'YWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9u'@;
put 'Tm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQ28pLmZvckVhY2goKFtT'@;
put 'dCxWdF0pPT57Q29bVnRdPVN0fSk7dmFyIE5sPUNvO2NvbnN0IElzPWZ1bmN0aW9uIE5zKFN0KXtjb25zdCBWdD1uZXcgRnMoU3QpLHluPU4oRnMucHJvdG90eXBlLnJlcXVlc3QsVnQpO3JldHVybiBJdC5leHRlbmQoeW4sRnMucHJvdG90eXBlLFZ0LHthbGxPd25LZXlzOiEwfSksSXQuZXh0'@;
put 'ZW5kKHluLFZ0LG51bGwse2FsbE93bktleXM6ITB9KSx5bi5jcmVhdGU9ZnVuY3Rpb24oUm4pe3JldHVybiBOcyhYcihTdCxSbikpfSx5bn0oY2EpO0lzLkF4aW9zPUZzLElzLkNhbmNlbGVkRXJyb3I9X2EsSXMuQ2FuY2VsVG9rZW49cmwsSXMuaXNDYW5jZWw9b2EsSXMuVkVSU0lPTj0iMS44'@;
put 'LjIiLElzLnRvRm9ybURhdGE9ZW4sSXMuQXhpb3NFcnJvcj1ydCxJcy5DYW5jZWw9SXMuQ2FuY2VsZWRFcnJvcixJcy5hbGw9ZnVuY3Rpb24oVnQpe3JldHVybiBQcm9taXNlLmFsbChWdCl9LElzLnNwcmVhZD1mdW5jdGlvbiB6cyhTdCl7cmV0dXJuIGZ1bmN0aW9uKHluKXtyZXR1cm4gU3Qu'@;
put 'YXBwbHkobnVsbCx5bil9fSxJcy5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24gTm8oU3Qpe3JldHVybiBJdC5pc09iamVjdChTdCkmJiEwPT09U3QuaXNBeGlvc0Vycm9yfSxJcy5tZXJnZUNvbmZpZz1YcixJcy5BeGlvc0hlYWRlcnM9ZmEsSXMuZm9ybVRvSlNPTj1TdD0+RGkoSXQuaXNIVE1MRm9y'@;
put 'bShTdCk/bmV3IEZvcm1EYXRhKFN0KTpTdCksSXMuZ2V0QWRhcHRlcj1SY19nZXRBZGFwdGVyLElzLkh0dHBTdGF0dXNDb2RlPU5sLElzLmRlZmF1bHQ9SXMsY2UuZXhwb3J0cz1Jc30sODU2NjooY2UsSik9PnsidXNlIHN0cmljdCI7dmFyIEQsXztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhK'@;
put 'LHtfX2VzTW9kdWxlOnt2YWx1ZTohMH0sW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOiJNb2R1bGUifX0pO2NvbnN0IHc9ZnVuY3Rpb24gYihaKXtyZXR1cm4gWiYmWi5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWiwiZGVmYXVsdCIpP1ouZGVm'@;
put 'YXVsdDpafShmdW5jdGlvbiBwKCl7aWYoXylyZXR1cm4gRDtfPTE7Y29uc3QgWj0yMTQ3NDgzNjQ3LFg9MzYsVGU9L154bi0tLyxTZT0vW15cMC1ceDdGXS8semU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLHo9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50'@;
put 'ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LHk9TWF0aC5mbG9vcix4PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gQyh3ZSl7dGhy'@;
put 'b3cgbmV3IFJhbmdlRXJyb3Ioelt3ZV0pfWZ1bmN0aW9uIFYod2UsWmUpe2NvbnN0IFFlPXdlLnNwbGl0KCJAIik7bGV0IGF0PSIiO1FlLmxlbmd0aD4xJiYoYXQ9UWVbMF0rIkAiLHdlPVFlWzFdKTtjb25zdCB2ZT1mdW5jdGlvbiBUKHdlLFplKXtjb25zdCBRZT1bXTtsZXQgYXQ9d2UubGVu'@;
put 'Z3RoO2Zvcig7YXQtLTspUWVbYXRdPVplKHdlW2F0XSk7cmV0dXJuIFFlfSgod2U9d2UucmVwbGFjZSh6ZSwiLiIpKS5zcGxpdCgiLiIpLFplKS5qb2luKCIuIik7cmV0dXJuIGF0K3ZlfWZ1bmN0aW9uIFUod2Upe2NvbnN0IFplPVtdO2xldCBRZT0wO2NvbnN0IGF0PXdlLmxlbmd0aDtmb3Io'@;
put 'O1FlPGF0Oyl7Y29uc3QgeGU9d2UuY2hhckNvZGVBdChRZSsrKTtpZih4ZT49NTUyOTYmJnhlPD01NjMxOSYmUWU8YXQpe2NvbnN0IHZlPXdlLmNoYXJDb2RlQXQoUWUrKyk7NTYzMjA9PSg2NDUxMiZ2ZSk/WmUucHVzaCgoKDEwMjMmeGUpPDwxMCkrKDEwMjMmdmUpKzY1NTM2KTooWmUucHVz'@;
put 'aCh4ZSksUWUtLSl9ZWxzZSBaZS5wdXNoKHhlKX1yZXR1cm4gWmV9Y29uc3QgbT1mdW5jdGlvbih3ZSl7cmV0dXJuIHdlPj00OCYmd2U8NTg/d2UtNDgrMjY6d2U+PTY1JiZ3ZTw5MT93ZS02NTp3ZT49OTcmJndlPDEyMz93ZS05NzpYfSxBPWZ1bmN0aW9uKHdlLFplKXtyZXR1cm4gd2UrMjIr'@;
put 'NzUqKHdlPDI2KS0oKDAhPVplKTw8NSl9LGFlPWZ1bmN0aW9uKHdlLFplLFFlKXtsZXQgYXQ9MDtmb3Iod2U9UWU/eSh3ZS83MDApOndlPj4xLHdlKz15KHdlL1plKTt3ZT40NTU7YXQrPVgpd2U9eSh3ZS8zNSk7cmV0dXJuIHkoYXQrMzYqd2UvKHdlKzM4KSl9LG5lPWZ1bmN0aW9uKHdlKXtj'@;
put 'b25zdCBaZT1bXSxRZT13ZS5sZW5ndGg7bGV0IGF0PTAseGU9MTI4LHZlPTcyLHFlPXdlLmxhc3RJbmRleE9mKCItIik7cWU8MCYmKHFlPTApO2ZvcihsZXQgamU9MDtqZTxxZTsrK2plKXdlLmNoYXJDb2RlQXQoamUpPj0xMjgmJkMoIm5vdC1iYXNpYyIpLFplLnB1c2god2UuY2hhckNvZGVB'@;
put 'dChqZSkpO2ZvcihsZXQgamU9cWU+MD9xZSsxOjA7amU8UWU7KXtjb25zdCBBZT1hdDtmb3IobGV0IFJlPTEsSWU9WDs7SWUrPVgpe2plPj1RZSYmQygiaW52YWxpZC1pbnB1dCIpO2NvbnN0IEhlPW0od2UuY2hhckNvZGVBdChqZSsrKSk7SGU+PVgmJkMoImludmFsaWQtaW5wdXQiKSxIZT55'@;
put 'KChaLWF0KS9SZSkmJkMoIm92ZXJmbG93IiksYXQrPUhlKlJlO2NvbnN0IERlPUllPD12ZT8xOkllPj12ZSsyNj8yNjpJZS12ZTtpZihIZTxEZSlicmVhaztjb25zdCBrZT1YLURlO1JlPnkoWi9rZSkmJkMoIm92ZXJmbG93IiksUmUqPWtlfWNvbnN0IEZlPVplLmxlbmd0aCsxO3ZlPWFlKGF0'@;
put 'LUFlLEZlLDA9PUFlKSx5KGF0L0ZlKT5aLXhlJiZDKCJvdmVyZmxvdyIpLHhlKz15KGF0L0ZlKSxhdCU9RmUsWmUuc3BsaWNlKGF0KyssMCx4ZSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlplKX0sbGU9ZnVuY3Rpb24od2Upe2NvbnN0IFplPVtdLFFlPSh3ZT1VKHdlKSkubGVu'@;
put 'Z3RoO2xldCBhdD0xMjgseGU9MCx2ZT03Mjtmb3IoY29uc3QgQWUgb2Ygd2UpQWU8MTI4JiZaZS5wdXNoKHgoQWUpKTtjb25zdCBxZT1aZS5sZW5ndGg7bGV0IGplPXFlO2ZvcihxZSYmWmUucHVzaCgiLSIpO2plPFFlOyl7bGV0IEFlPVo7Zm9yKGNvbnN0IFJlIG9mIHdlKVJlPj1hdCYmUmU8'@;
put 'QWUmJihBZT1SZSk7Y29uc3QgRmU9amUrMTtBZS1hdD55KChaLXhlKS9GZSkmJkMoIm92ZXJmbG93IikseGUrPShBZS1hdCkqRmUsYXQ9QWU7Zm9yKGNvbnN0IFJlIG9mIHdlKWlmKFJlPGF0JiYrK3hlPlomJkMoIm92ZXJmbG93IiksUmU9PT1hdCl7bGV0IEllPXhlO2ZvcihsZXQgSGU9WDs7'@;
put 'SGUrPVgpe2NvbnN0IERlPUhlPD12ZT8xOkhlPj12ZSsyNj8yNjpIZS12ZTtpZihJZTxEZSlicmVhaztjb25zdCBrZT1JZS1EZSxfdD1YLURlO1plLnB1c2goeChBKERlK2tlJV90LDApKSksSWU9eShrZS9fdCl9WmUucHVzaCh4KEEoSWUsMCkpKSx2ZT1hZSh4ZSxGZSxqZT09PXFlKSx4ZT0w'@;
put 'LCsramV9Kyt4ZSwrK2F0fXJldHVybiBaZS5qb2luKCIiKX07cmV0dXJuIEQ9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6VSxlbmNvZGU6d2U9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLndlKX0sZGVjb2RlOm5lLGVuY29kZTpsZSx0b0FTQ0lJOmZ1bmN0aW9uKHdlKXtyZXR1cm4g'@;
put 'Vih3ZSxmdW5jdGlvbihaZSl7cmV0dXJuIFNlLnRlc3QoWmUpPyJ4bi0tIitsZShaZSk6WmV9KX0sdG9Vbmljb2RlOmZ1bmN0aW9uKHdlKXtyZXR1cm4gVih3ZSxmdW5jdGlvbihaZSl7cmV0dXJuIFRlLnRlc3QoWmUpP25lKFplLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlplfSl9fX0oKSks'@;
put 'SD1bImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibWlsLmFjIiwibmV0LmFjIiwib3JnLmFjIiwiYWQiLCJhZSIsImFjLmFlIiwiY28uYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJuZXQuYWUiLCJvcmcuYWUiLCJzY2guYWUiLCJhZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5h'@;
put 'ZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpci10cmFmZmljLWNv'@;
put 'bnRyb2wuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5hZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVy'@;
put 'byIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5hZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5hZXJvIiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291'@;
put 'bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVjYXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5tZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8i'@;
put 'LCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZyZWlnaHQuYWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5nLmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhv'@;
put 'bWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5jZS5hZXJvIiwibWFya2V0cGxhY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJt'@;
put 'aWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmlnYXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFlcm8iLCJwaWxvdC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJl'@;
put 'Y3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJvIiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNlcy5hZXJvIiwic2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJv'@;
put 'Iiwic3R1ZGVudC5hZXJvIiwidGF4aS5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5nLmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYiLCJjb20uYWYiLCJlZHUuYWYiLCJnb3YuYWYiLCJuZXQuYWYiLCJvcmcu'@;
put 'YWYiLCJhZyIsImNvLmFnIiwiY29tLmFnIiwibmV0LmFnIiwibm9tLmFnIiwib3JnLmFnIiwiYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvZmYuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5hbCIsIm1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0i'@;
put 'LCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJjby5hbyIsImVkLmFvIiwiZWR1LmFvIiwiZ292LmFvIiwiZ3YuYW8iLCJpdC5hbyIsIm9nLmFvIiwib3JnLmFvIiwicGIuYW8iLCJhcSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5h'@;
put 'ciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJob21lLmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMu'@;
put 'YXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFjLmF0Iiwic3RoLmFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0IiwiYXUiLCJhc24uYXUiLCJjb20uYXUiLCJlZHUuYXUiLCJnb3YuYXUiLCJpZC5hdSIsIm5ldC5hdSIsIm9yZy5hdSIs'@;
put 'ImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2EuYXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cuZWR1LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5h'@;
put 'dSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNhLmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1IiwiYXciLCJjb20uYXciLCJheCIsImF6IiwiYml6LmF6IiwiY29tLmF6'@;
put 'IiwiZWR1LmF6IiwiZ292LmF6IiwiaW5mby5heiIsImludC5heiIsIm1pbC5heiIsIm5hbWUuYXoiLCJuZXQuYXoiLCJvcmcuYXoiLCJwcC5heiIsInByby5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJhIiwibWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIi'@;
put 'LCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJvcmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwiMC5iZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwi'@;
put 'Ni5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJlLmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJnIiwiby5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJn'@;
put 'IiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiYmgiLCJjb20uYmgiLCJlZHUuYmgiLCJnb3YuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJpIiwib3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFmcmljYS5iaiIs'@;
put 'ImFncm8uYmoiLCJhcmNoaXRlY3Rlcy5iaiIsImFzc3VyLmJqIiwiYXZvY2F0cy5iaiIsImNvLmJqIiwiY29tLmJqIiwiZWNvLmJqIiwiZWNvbm8uYmoiLCJlZHUuYmoiLCJpbmZvLmJqIiwibG9pc2lycy5iaiIsIm1vbmV5LmJqIiwibmV0LmJqIiwib3JnLmJqIiwib3RlLmJqIiwicmVzdGF1'@;
put 'cmFudC5iaiIsInJlc3RvLmJqIiwidG91cmlzbS5iaiIsInVuaXYuYmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwiZWR1LmJuIiwiZ292LmJuIiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8i'@;
put 'LCJnb2IuYm8iLCJpbnQuYm8iLCJtaWwuYm8iLCJuZXQuYm8iLCJvcmcuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwiYm9saXZpYS5ibyIsImNpZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8i'@;
put 'LCJkZXBvcnRlLmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIsIm1vdmltaWVudG8uYm8iLCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90'@;
put 'aWNpYXMuYm8iLCJwYXRyaWEuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIsInRlY25vbG9naWEuYm8iLCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIi'@;
put 'LCI5Z3VhY3UuYnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJyIiwiYXJ0LmJyIiwiYXRvLmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJldC5i'@;
put 'ciIsImJoei5iciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlhcy5iciIsImNpbS5iciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJy'@;
put 'IiwiY29vcC5iciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwiZWR1LmJyIiwiZW1wLmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwi'@;
put 'ZXRpLmJyIiwiZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEyLmJyIiwiZ2VvLmJyIiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5i'@;
put 'ciIsImFsLmdvdi5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIsIm1nLmdvdi5iciIsIm1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdv'@;
put 'di5iciIsInBlLmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5iciIsInNlLmdvdi5iciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5i'@;
put 'ciIsImluZC5iciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVpbGFvLmJyIiwibGVsLmJyIiwibG9nLmJyIiwibG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5h'@;
put 'dXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwibWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5vdC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIs'@;
put 'Im9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5iciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVwLmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIi'@;
put 'LCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIiLCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJzbGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRh'@;
put 'eGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5iciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIiLCJ6bGcuYnIiLCJicyIsImNvbS5icyIsImVkdS5icyIsImdvdi5icyIs'@;
put 'Im5ldC5icyIsIm9yZy5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20uYnkiLCJvZi5ieSIsImJ6IiwiY28uYnoiLCJjb20uYnoiLCJlZHUuYnoi'@;
put 'LCJnb3YuYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9uLmNhIiwicGUuY2EiLCJxYy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwi'@;
put 'Y2QiLCJnb3YuY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImFjLmNpIiwiYVx4ZTlyb3BvcnQuY2kiLCJhc3NvLmNpIiwiY28uY2kiLCJjb20uY2kiLCJlZC5jaSIsImVkdS5jaSIsImdvLmNpIiwiZ291di5jaSIsImludC5jaSIsIm5ldC5jaSIsIm9yLmNpIiwib3JnLmNpIiwiKi5jayIsIiF3'@;
put 'd3cuY2siLCJjbCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJlZHUuY24iLCJnb3YuY24iLCJtaWwuY24iLCJuZXQuY24iLCJvcmcuY24iLCJcdTUxNmNcdTUz'@;
put 'ZjguY24iLCJcdTdkYjJcdTdkNjEuY24iLCJcdTdmNTFcdTdlZGMuY24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJneC5jbiIsImd6LmNuIiwiaGEuY24iLCJoYi5jbiIsImhlLmNuIiwiaGkuY24iLCJoay5jbiIsImhsLmNuIiwiaG4uY24iLCJq'@;
put 'bC5jbiIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm1vLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwidHcuY24iLCJ4ai5jbiIsInh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImNvIiwiY29tLmNvIiwi'@;
put 'ZWR1LmNvIiwiZ292LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwiY29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2EuY3IiLCJjdSIsImNvbS5jdSIsImVkdS5jdSIsImdvYi5jdSIsImluZi5j'@;
put 'dSIsIm5hdC5jdSIsIm5ldC5jdSIsIm9yZy5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaWQuY3YiLCJpbnQuY3YiLCJuZXQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwicHVibC5jdiIsImN3IiwiY29tLmN3IiwiZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJj'@;
put 'eSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiY28uZG0iLCJjb20uZG0iLCJlZHUuZG0i'@;
put 'LCJnb3YuZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIsImR6IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIs'@;
put 'Imdvdi5keiIsIm5ldC5keiIsIm9yZy5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJlZHUuZWMiLCJmaW4uZWMiLCJnb2IuZWMiLCJnb3YuZWMiLCJpbmZvLmVjIiwiazEyLmVjIiwibWVkLmVjIiwibWlsLmVjIiwibmV0LmVjIiwib3JnLmVjIiwicHJvLmVj'@;
put 'IiwiZWR1IiwiZWUiLCJhaXAuZWUiLCJjb20uZWUiLCJlZHUuZWUiLCJmaWUuZWUiLCJnb3YuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJvcmcuZWUiLCJwcmkuZWUiLCJyaWlrLmVlIiwiZWciLCJhYy5lZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsImluZm8uZWciLCJt'@;
put 'ZS5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCJzcG9ydC5lZyIsInR2LmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwiZWR1LmVzIiwiZ29iLmVzIiwibm9tLmVzIiwib3JnLmVzIiwiZXQiLCJiaXouZXQiLCJjb20uZXQiLCJlZHUuZXQiLCJnb3Yu'@;
put 'ZXQiLCJpbmZvLmV0IiwibmFtZS5ldCIsIm5ldC5ldCIsIm9yZy5ldCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZqIiwibmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsi'@;
put 'LCJmbSIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYXZvdWVzLmZyIiwiY2NpLmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwiZ2Ei'@;
put 'LCJnYiIsImdkIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJuZXQuZ2UiLCJvcmcuZ2UiLCJwdnQuZ2UiLCJzY2hvb2wuZ2UiLCJnZiIsImdnIiwiY28uZ2ciLCJuZXQuZ2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5n'@;
put 'aCIsIm1pbC5naCIsIm9yZy5naCIsImdpIiwiY29tLmdpIiwiZWR1LmdpIiwiZ292LmdpIiwibHRkLmdpIiwibW9kLmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5nbCIsIm5ldC5nbCIsIm9yZy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIs'@;
put 'Imdvdi5nbiIsIm5ldC5nbiIsIm9yZy5nbiIsImdvdiIsImdwIiwiYXNzby5ncCIsImNvbS5ncCIsImVkdS5ncCIsIm1vYmkuZ3AiLCJuZXQuZ3AiLCJvcmcuZ3AiLCJncSIsImdyIiwiY29tLmdyIiwiZWR1LmdyIiwiZ292LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ3MiLCJndCIsImNvbS5n'@;
put 'dCIsImVkdS5ndCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3UiLCJuZXQuZ3UiLCJvcmcuZ3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJl'@;
put 'ZHUuZ3kiLCJnb3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NGUyYVx1NGViYS5oayIsIlx1NTAwYlx1NGViYS5oayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjUzZlx1NWU5Yy5oayIs'@;
put 'Ilx1NjU0ZVx1ODBiMi5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2RiMlx1N2VkYy5oayIsIlx1N2VjNFx1N2U1NC5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1'@;
put 'N2Y1MVx1N2Q2MS5oayIsIlx1N2Y1MVx1N2VkYy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUuaG4iLCJnb2IuaG4iLCJtaWwuaG4iLCJuZXQuaG4iLCJvcmcuaG4iLCJociIsImNvbS5ociIsImZyb20uaHIiLCJpei5ociIsIm5hbWUuaHIiLCJodCIsImFkdWx0Lmh0IiwiYXJ0Lmh0Iiwi'@;
put 'YXNzby5odCIsImNvbS5odCIsImNvb3AuaHQiLCJlZHUuaHQiLCJmaXJtLmh0IiwiZ291di5odCIsImluZm8uaHQiLCJtZWQuaHQiLCJuZXQuaHQiLCJvcmcuaHQiLCJwZXJzby5odCIsInBvbC5odCIsInByby5odCIsInJlbC5odCIsInNob3AuaHQiLCJodSIsIjIwMDAuaHUiLCJhZ3Jhci5o'@;
put 'dSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiY28uaHUiLCJlcm90aWNhLmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmZvLmh1IiwiaW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxh'@;
put 'a2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzcG9ydC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG0uaHUiLCJ0b3pzZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQi'@;
put 'LCJiaXouaWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdvdi5pZSIsImlsIiwiYWMuaWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11'@;
put 'bmkuaWwiLCJuZXQuaWwiLCJvcmcuaWwiLCJcdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDBcdTA1ZTdcdTA1ZDNcdTA1ZGVcdTA1ZDlcdTA1ZDQuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWQ5XHUwNWU5XHUwNWQ1XHUwNWQxLlx1MDVkOVx1MDVl'@;
put 'OVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVlNlx1MDVkNFx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZGVcdTA1ZGVcdTA1ZTlcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiaW0iLCJhYy5pbSIsImNvLmltIiwibHRkLmNvLmltIiwi'@;
put 'cGxjLmNvLmltIiwiY29tLmltIiwibmV0LmltIiwib3JnLmltIiwidHQuaW0iLCJ0di5pbSIsImluIiwiNWcuaW4iLCI2Zy5pbiIsImFjLmluIiwiYWkuaW4iLCJhbS5pbiIsImJpaGFyLmluIiwiYml6LmluIiwiYnVzaW5lc3MuaW4iLCJjYS5pbiIsImNuLmluIiwiY28uaW4iLCJjb20uaW4i'@;
put 'LCJjb29wLmluIiwiY3MuaW4iLCJkZWxoaS5pbiIsImRyLmluIiwiZWR1LmluIiwiZXIuaW4iLCJmaXJtLmluIiwiZ2VuLmluIiwiZ292LmluIiwiZ3VqYXJhdC5pbiIsImluZC5pbiIsImluZm8uaW4iLCJpbnQuaW4iLCJpbnRlcm5ldC5pbiIsImlvLmluIiwibWUuaW4iLCJtaWwuaW4iLCJu'@;
put 'ZXQuaW4iLCJuaWMuaW4iLCJvcmcuaW4iLCJwZy5pbiIsInBvc3QuaW4iLCJwcm8uaW4iLCJyZXMuaW4iLCJ0cmF2ZWwuaW4iLCJ0di5pbiIsInVrLmluIiwidXAuaW4iLCJ1cy5pbiIsImluZm8iLCJpbnQiLCJldS5pbnQiLCJpbyIsImNvLmlvIiwiY29tLmlvIiwiZWR1LmlvIiwiZ292Lmlv'@;
put 'IiwibWlsLmlvIiwibmV0LmlvIiwibm9tLmlvIiwib3JnLmlvIiwiaXEiLCJjb20uaXEiLCJlZHUuaXEiLCJnb3YuaXEiLCJtaWwuaXEiLCJuZXQuaXEiLCJvcmcuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1'@;
put 'MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwiaXQiLCJlZHUuaXQiLCJnb3YuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJi'@;
put 'YXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVs'@;
put 'aWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0'@;
put 'IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUu'@;
put 'aXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0'@;
put 'b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0'@;
put 'cmVudGluby5pdCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJlbnRpbm8tcy10aXJvbC5pdCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJv'@;
put 'bC5pdCIsInRyZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VlZHRpcm9sLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRp'@;
put 'Z2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQi'@;
put 'LCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIs'@;
put 'InRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxs'@;
put 'ZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIs'@;
put 'InZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJh'@;
put 'bHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9z'@;
put 'dGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4uaXQiLCJi'@;
put 'YWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5p'@;
put 'dCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm96ZW4uaXQiLCJib3plbi1zdWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4t'@;
put 'c3VlZHRpcm9sLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWds'@;
put 'aWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0'@;
put 'IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJj'@;
put 'bC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5u'@;
put 'YS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIs'@;
put 'ImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImlt'@;
put 'Lml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5p'@;
put 'dCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVk'@;
put 'aW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS5pdCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJt'@;
put 'b256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8u'@;
put 'aXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJi'@;
put 'aW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJw'@;
put 'dS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIs'@;
put 'InJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQi'@;
put 'LCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdWVkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIs'@;
put 'InRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJl'@;
put 'bnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVu'@;
put 'ZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0Iiwi'@;
put 'amUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImFncmkuam8iLCJhaS5qbyIsImNvbS5qbyIsImVkdS5qbyIsImVuZy5qbyIsImZtLmpvIiwiZ292LmpvIiwibWlsLmpvIiwibmV0LmpvIiwib3JnLmpvIiwicGVyLmpvIiwicGhkLmpvIiwic2NoLmpvIiwidHYuam8i'@;
put 'LCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIs'@;
put 'ImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAi'@;
put 'LCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpw'@;
put 'Iiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1h'@;
put 'bmFzaGkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTU3ZmNcdTczODkuanAi'@;
put 'LCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJc'@;
put 'dTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTY3'@;
put 'NzFcdTRlYWMuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJc'@;
put 'dTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlh'@;
put 'ZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIhY2l0eS5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiIWNpdHkua29iZS5qcCIsIioubmFn'@;
put 'b3lhLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiouc2VuZGFpLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpv'@;
put 'LmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFp'@;
put 'Y2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJh'@;
put 'LmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGku'@;
put 'anAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5h'@;
put 'aWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9r'@;
put 'YXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFj'@;
put 'aGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5h'@;
put 'a2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGly'@;
put 'by5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5v'@;
put 'aGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9t'@;
put 'YXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21v'@;
put 'cmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJh'@;
put 'LmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImth'@;
put 'bWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGli'@;
put 'YS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJl'@;
put 'eWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAi'@;
put 'LCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5q'@;
put 'cCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEu'@;
put 'anAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1l'@;
put 'LmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5l'@;
put 'aGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVr'@;
put 'dWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVr'@;
put 'dWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2th'@;
put 'LmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vv'@;
put 'a2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIs'@;
put 'Imt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwi'@;
put 'bXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tp'@;
put 'LmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5m'@;
put 'dWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2Eu'@;
put 'anAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6'@;
put 'dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAi'@;
put 'LCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2Fz'@;
put 'aGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJr'@;
put 'aXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5h'@;
put 'bWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGlt'@;
put 'YS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAi'@;
put 'LCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1'@;
put 'Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJo'@;
put 'aWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdp'@;
put 'ZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAi'@;
put 'LCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwi'@;
put 'eWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEu'@;
put 'anAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5t'@;
put 'YS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEu'@;
put 'Z3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5q'@;
put 'cCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3No'@;
put 'aW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5o'@;
put 'aXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hp'@;
put 'bWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAi'@;
put 'LCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5o'@;
put 'b2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJj'@;
put 'aGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1'@;
put 'a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFr'@;
put 'YS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFp'@;
put 'Lmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2Fp'@;
put 'ZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2Fp'@;
put 'ZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2th'@;
put 'aWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIs'@;
put 'Im1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNh'@;
put 'dHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2th'@;
put 'aWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwi'@;
put 'b3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpw'@;
put 'IiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNo'@;
put 'YXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5o'@;
put 'b2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5o'@;
put 'b2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIs'@;
put 'InRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5o'@;
put 'b2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwi'@;
put 'eW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1'@;
put 'c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAi'@;
put 'LCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8u'@;
put 'aHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5'@;
put 'b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5o'@;
put 'eW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhp'@;
put 'dGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJh'@;
put 'a2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAi'@;
put 'LCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2Fr'@;
put 'YWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5q'@;
put 'cCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFr'@;
put 'aS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3'@;
put 'YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlz'@;
put 'aGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamlt'@;
put 'YS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3'@;
put 'YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUu'@;
put 'aXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGku'@;
put 'aXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIs'@;
put 'ImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAi'@;
put 'LCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJh'@;
put 'bWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGlt'@;
put 'YS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUu'@;
put 'a2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2Eu'@;
put 'anAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNl'@;
put 'aS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2Fu'@;
put 'YWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1h'@;
put 'dG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5v'@;
put 'LmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2No'@;
put 'aS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5r'@;
put 'b2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29j'@;
put 'aGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3Rv'@;
put 'Lmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90'@;
put 'by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90'@;
put 'by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAi'@;
put 'LCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1p'@;
put 'eWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1'@;
put 'amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUu'@;
put 'anAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpw'@;
put 'IiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpw'@;
put 'IiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIs'@;
put 'Imtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIs'@;
put 'Im5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1'@;
put 'Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpw'@;
put 'Iiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdh'@;
put 'bWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1p'@;
put 'eWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6'@;
put 'YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNo'@;
put 'aS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAi'@;
put 'LCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpw'@;
put 'IiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAi'@;
put 'LCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdh'@;
put 'bm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwi'@;
put 'bm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8u'@;
put 'anAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJz'@;
put 'dXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3Vy'@;
put 'YS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2ku'@;
put 'anAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2Fz'@;
put 'YWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5h'@;
put 'Z2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmku'@;
put 'bmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpw'@;
put 'Iiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamku'@;
put 'bmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEu'@;
put 'anAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2Eubmlp'@;
put 'Z2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5p'@;
put 'aWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlh'@;
put 'Lm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEu'@;
put 'anAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpw'@;
put 'IiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIs'@;
put 'Imtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5'@;
put 'dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmlj'@;
put 'aHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJv'@;
put 'a2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1'@;
put 'eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2Fz'@;
put 'aGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tp'@;
put 'bmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpw'@;
put 'IiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIs'@;
put 'InNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2Eu'@;
put 'anAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpw'@;
put 'IiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0'@;
put 'YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2Fz'@;
put 'aGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9z'@;
put 'YWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFu'@;
put 'Lm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIs'@;
put 'InRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpw'@;
put 'IiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwi'@;
put 'a2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdh'@;
put 'LmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVr'@;
put 'YXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpw'@;
put 'IiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5z'@;
put 'YWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtv'@;
put 'dW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAi'@;
put 'LCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwi'@;
put 'b21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2ku'@;
put 'c2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVy'@;
put 'YXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1p'@;
put 'LnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGln'@;
put 'YS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5'@;
put 'dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpw'@;
put 'IiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUu'@;
put 'anAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5z'@;
put 'aGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9r'@;
put 'YS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2Eu'@;
put 'anAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6'@;
put 'dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9r'@;
put 'YS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1'@;
put 'c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1p'@;
put 'bm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFz'@;
put 'dS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1'@;
put 'cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1'@;
put 'bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNo'@;
put 'aW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIs'@;
put 'InNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEu'@;
put 'dG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5'@;
put 'by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEu'@;
put 'dG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtv'@;
put 'bWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwi'@;
put 'bXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5'@;
put 'by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRh'@;
put 'bWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmku'@;
put 'anAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAi'@;
put 'LCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlp'@;
put 'a2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1h'@;
put 'LmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhh'@;
put 'c2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWth'@;
put 'eWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNo'@;
put 'aW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2Fr'@;
put 'YXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1'@;
put 'LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFt'@;
put 'YWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hp'@;
put 'ZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEu'@;
put 'anAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1h'@;
put 'Z3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJv'@;
put 'c2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1h'@;
put 'Z3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdh'@;
put 'LnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFt'@;
put 'YW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlh'@;
put 'bWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1h'@;
put 'bmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIm5ldC5rZyIsIm9yZy5rZyIsIioua2giLCJraSIsImJp'@;
put 'ei5raSIsImNvbS5raSIsImVkdS5raSIsImdvdi5raSIsImluZm8ua2kiLCJuZXQua2kiLCJvcmcua2kiLCJrbSIsImFzcy5rbSIsImNvbS5rbSIsImVkdS5rbSIsImdvdi5rbSIsIm1pbC5rbSIsIm5vbS5rbSIsIm9yZy5rbSIsInByZC5rbSIsInRtLmttIiwiYXNzby5rbSIsImNvb3Aua20i'@;
put 'LCJnb3V2LmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwicGhhcm1hY2llbnMua20iLCJwcmVzc2Uua20iLCJ2ZXRlcmluYWlyZS5rbSIsImtuIiwiZWR1LmtuIiwiZ292LmtuIiwibmV0LmtuIiwib3JnLmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3Ai'@;
put 'LCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5r'@;
put 'ciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5r'@;
put 'ciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsImNvbS5reiIsImVkdS5reiIsImdvdi5reiIsIm1pbC5reiIsIm5ldC5reiIsIm9y'@;
put 'Zy5reiIsImxhIiwiY29tLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwiaW5mby5sYSIsImludC5sYSIsIm5ldC5sYSIsIm9yZy5sYSIsInBlci5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjby5sYyIsImNvbS5sYyIsImVkdS5sYyIs'@;
put 'Imdvdi5sYyIsIm5ldC5sYyIsIm9yZy5sYyIsImxpIiwibGsiLCJhYy5sayIsImFzc24ubGsiLCJjb20ubGsiLCJlZHUubGsiLCJnb3YubGsiLCJncnAubGsiLCJob3RlbC5sayIsImludC5sayIsImx0ZC5sayIsIm5ldC5sayIsIm5nby5sayIsIm9yZy5sayIsInNjaC5sayIsInNvYy5sayIs'@;
put 'IndlYi5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwibmV0LmxyIiwib3JnLmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2'@;
put 'IiwiYXNuLmx2IiwiY29tLmx2IiwiY29uZi5sdiIsImVkdS5sdiIsImdvdi5sdiIsImlkLmx2IiwibWlsLmx2IiwibmV0Lmx2Iiwib3JnLmx2IiwibHkiLCJjb20ubHkiLCJlZHUubHkiLCJnb3YubHkiLCJpZC5seSIsIm1lZC5seSIsIm5ldC5seSIsIm9yZy5seSIsInBsYy5seSIsInNjaC5s'@;
put 'eSIsIm1hIiwiYWMubWEiLCJjby5tYSIsImdvdi5tYSIsIm5ldC5tYSIsIm9yZy5tYSIsInByZXNzLm1hIiwibWMiLCJhc3NvLm1jIiwidG0ubWMiLCJtZCIsIm1lIiwiYWMubWUiLCJjby5tZSIsImVkdS5tZSIsImdvdi5tZSIsIml0cy5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsInByaXYubWUi'@;
put 'LCJtZyIsImNvLm1nIiwiY29tLm1nIiwiZWR1Lm1nIiwiZ292Lm1nIiwibWlsLm1nIiwibm9tLm1nIiwib3JnLm1nIiwicHJkLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsImVkdS5tayIsImdvdi5tayIsImluZi5tayIsIm5hbWUubWsiLCJuZXQubWsiLCJvcmcubWsiLCJtbCIsImNv'@;
put 'bS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJlZHUubW4iLCJnb3YubW4iLCJvcmcubW4iLCJtbyIsImNvbS5tbyIsImVkdS5tbyIsImdvdi5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsIm1vYmkiLCJtcCIs'@;
put 'Im1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10IiwibXUiLCJhYy5tdSIsImNvLm11IiwiY29tLm11IiwiZ292Lm11IiwibmV0Lm11Iiwib3IubXUi'@;
put 'LCJvcmcubXUiLCJtdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFj'@;
put 'Lm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJlZHUubXgiLCJnb2IubXgiLCJuZXQubXgiLCJvcmcubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5t'@;
put 'eSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJuYSIsImFsdC5uYSIsImNvLm5hIiwiY29tLm5hIiwiZ292Lm5hIiwi'@;
put 'bmV0Lm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJhcnRzLm5mIiwiY29tLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJuZXQubmYiLCJvdGhlci5uZiIsInBlci5uZiIsInJlYy5uZiIsInN0b3JlLm5mIiwid2ViLm5mIiwibmci'@;
put 'LCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmki'@;
put 'LCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwiZm9sa2ViaWJsLm5vIiwiZnlsa2VzYmlibC5ubyIsImlkcmV0dC5ubyIsIm11c2V1bS5ubyIsInByaXYubm8iLCJ2Z3Mubm8iLCJkZXAubm8iLCJoZXJhZC5u'@;
put 'byIsImtvbW11bmUubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwi'@;
put 'c3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50'@;
put 'Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIs'@;
put 'ImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxv'@;
put 'cm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0'@;
put 'YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwi'@;
put 'b3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5u'@;
put 'byIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhYXJib3J0ZS5ubyIsImFlanJpZS5ubyIsImFmam9yZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJuZXMuYWtl'@;
put 'cnNodXMubm8iLCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4'@;
put 'ZTEubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5u'@;
put 'byIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc2t2b2xsLm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1'@;
put 'cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFkYWRkamEubm8iLCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJceGU2cnVtLm5vIiwiYmFo'@;
put 'Y2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbGVz'@;
put 'dHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxzZmpvcmQubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJhcnVtLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmVhcmFsdmFoa2kubm8iLCJiZWFyYWx2XHhlMWhraS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5u'@;
put 'byIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwiYmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwi'@;
put 'Ym9kby5ubyIsImJvZFx4Zjgubm8iLCJib2tuLm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIsImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnVkZWpqdS5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImNhaGNl'@;
put 'c3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwiZGF2dmVzaWlkYS5ubyIsImRlYXRudS5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJkaXZ0YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwiZG9ubmEubm8i'@;
put 'LCJkXHhmOG5uYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5nZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1'@;
put 'bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmVuZXMubm8iLCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZmVkamUubm8i'@;
put 'LCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVsbC5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwiZmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwi'@;
put 'Zm9sbGRhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJmb3JzYW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJceGU2bmEubm8iLCJmcmFuYS5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVvaXNr'@;
put 'dS5ubyIsImZ1b3Nza28ubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5u'@;
put 'byIsImdhdXNkYWwubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdqZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9w'@;
put 'cGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJndW92ZGFnZWFpZG51Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImhhYm1lci5ubyIsImhc'@;
put 'eGUxYm1lci5ubyIsImhhZHNlbC5ubyIsImhceGU2Z2Vib3N0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYW1tYXJmZWFzdGEubm8iLCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYW1tZXJmZXN0Lm5vIiwi'@;
put 'aGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiaGF1Z2VzdW5kLm5vIiwib3MuaGVkbWFyay5ubyIsInZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwi'@;
put 'aGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwubm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhvbGUubm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9s'@;
put 'dFx4ZTVsZW4ubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0'@;
put 'YWQubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiaXZndS5ubyIsImpldm5ha2VyLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJqb25kYWwubm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImthcmFzam9o'@;
put 'a2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJhc2pvay5ubyIsImthcmxzb3kubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZidS5ubyIsImtsZXBwLm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5n'@;
put 'ZXIubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJrdlx4ZTZu'@;
put 'YW5nZW4ubm8iLCJrdmFmam9yZC5ubyIsImt2YWxzdW5kLm5vIiwia3ZhbS5ubyIsImt2YW5hbmdlbi5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsImxceGU2cmRh'@;
put 'bC5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImxhcmRhbC5ubyIsImxhcnZpay5ubyIsImxhdmFnaXMubm8iLCJsYXZhbmdlbi5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlYmVzYnkubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8i'@;
put 'LCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlcmRhbC5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsaW5kZXNuZXMu'@;
put 'bm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5ubyIsImxceGY4dGVuLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1'@;
put 'cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsdmlrLm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFy'@;
put 'bmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtYXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsIm1lbGFuZC5ubyIsIm1lbGRhbC5ubyIsIm1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJh'@;
put 'a2VyLm5vIiwibWVyXHhlNWtlci5ubyIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIsIm1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUubm8iLCJoZXJveS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tb3JlLW9nLXJv'@;
put 'bXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhl'@;
put 'NW1lc2pldnVlbWllLm5vIiwiblx4ZTZyXHhmOHkubm8iLCJuYW1kYWxzZWlkLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcm95Lm5vIiwibmFydmlpa2Eubm8iLCJuYXJ2aWsubm8iLCJuYXVzdGRhbC5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2'@;
put 'dW90bmEubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwibm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIs'@;
put 'Im5vcmRrYXBwLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5ubyIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5vdHRl'@;
put 'cm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib21hc3Z1b3RuYS5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8iLCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJv'@;
put 'cnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVu'@;
put 'Lm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8iLCJveXN0cmUtc2xpZHJlLm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIs'@;
put 'InBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBvcnNncnVubi5ubyIsInJhZGUubm8iLCJyXHhlNWRlLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJceGU2bGluZ2VuLm5vIiwicmFoa2tlcmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsInJhaXNhLm5v'@;
put 'Iiwiclx4ZTFpc2Eubm8iLCJyYWtrZXN0YWQubm8iLCJyYWxpbmdlbi5ubyIsInJhbmEubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295Lm5vIiwicmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwi'@;
put 'cmluZ2VyaWtlLm5vIiwicmluZ3Nha2VyLm5vIiwicmlzb3Iubm8iLCJyaXNceGY4ci5ubyIsInJpc3NhLm5vIiwicm9hbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb2xsYWcubm8iLCJyb21zYS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8i'@;
put 'LCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJydW92YXQubm8iLCJyeWdnZS5ubyIsInNhbGFuZ2VuLm5vIiwic2FsYXQubm8iLCJzXHhlMWxhdC5ubyIsInNceGUxbFx4'@;
put 'ZTF0Lm5vIiwic2FsdGRhbC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJz'@;
put 'ZWxqb3JkLm5vIiwic2llbGxhay5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5ubyIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2F1bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNr'@;
put 'aWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tpcHR2ZXQubm8iLCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNrb2RqZS5ubyIsInNtb2xhLm5vIiwic21ceGY4bGEubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzbmFz'@;
put 'YS5ubyIsInNuXHhlNXNhLm5vIiwic25pbGxmam9yZC5ubyIsInNub2FzYS5ubyIsInNvZ25kYWwubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJzb21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJz'@;
put 'XHhmOG5kcmUtbGFuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9kYWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIu'@;
put 'bm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVpc2Eubm8iLCJzb3J0bGFuZC5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5r'@;
put 'amVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwic3RyYW5kLm5vIiwic3RyYW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIs'@;
put 'InN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2ZW4ubm8iLCJ0YW5hLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIsInRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1'@;
put 'bmQubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRvbnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ0b3Jza2VuLm5vIiwidHJceGU2bmEubm8iLCJ0cmFuYS5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb2FuZGluLm5vIiwi'@;
put 'dHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInRyb21zYS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb25kaGVpbS5ubyIsInRyeXNpbC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsInR5c25lcy5ubyIsInR5'@;
put 'c3ZceGU2ci5ubyIsInR5c3Zhci5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsInV0c2lyYS5ubyIsInZhYXBzdGUubm8iLCJ2YWRzby5ubyIsInZhZHNceGY4Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2'@;
put 'YWdhLm5vIiwidlx4ZTVnXHhlNS5ubyIsInZhZ2FuLm5vIiwidlx4ZTVnYW4ubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5nLm5vIiwidmFueWx2ZW4ubm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIs'@;
put 'InZceGUxcmdnXHhlMXQubm8iLCJ2YXJveS5ubyIsInZlZnNuLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJ2ZXN0bmVzLm5v'@;
put 'IiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdveS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5ubyIsInZvYWdhdC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsIioubnAi'@;
put 'LCJuciIsImJpei5uciIsImNvbS5uciIsImVkdS5uciIsImdvdi5uciIsImluZm8ubnIiLCJuZXQubnIiLCJvcmcubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIs'@;
put 'Im1hb3JpLm56IiwibVx1MDEwMW9yaS5ueiIsIm1pbC5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJv'@;
put 'Lm9tIiwib25pb24iLCJvcmciLCJwYSIsImFiby5wYSIsImFjLnBhIiwiY29tLnBhIiwiZWR1LnBhIiwiZ29iLnBhIiwiaW5nLnBhIiwibWVkLnBhIiwibmV0LnBhIiwibm9tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwicGUiLCJjb20ucGUiLCJlZHUucGUiLCJnb2IucGUiLCJtaWwucGUiLCJu'@;
put 'ZXQucGUiLCJub20ucGUiLCJvcmcucGUiLCJwZiIsImNvbS5wZiIsImVkdS5wZiIsIm9yZy5wZiIsIioucGciLCJwaCIsImNvbS5waCIsImVkdS5waCIsImdvdi5waCIsImkucGgiLCJtaWwucGgiLCJuZXQucGgiLCJuZ28ucGgiLCJvcmcucGgiLCJwayIsImFjLnBrIiwiYml6LnBrIiwiY29t'@;
put 'LnBrIiwiZWR1LnBrIiwiZmFtLnBrIiwiZ2twLnBrIiwiZ29iLnBrIiwiZ29nLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiZ292LnBrIiwibmV0LnBrIiwib3JnLnBrIiwid2ViLnBrIiwicGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhZ3JvLnBsIiwi'@;
put 'YWlkLnBsIiwiYXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtZWRpYS5wbCIsIm1pYXN0YS5wbCIsIm1pbC5wbCIsIm5pZXJ1Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIs'@;
put 'InByaXYucGwiLCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwi'@;
put 'LCJncml3Lmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJtdXAuZ292LnBsIiwibXcuZ292LnBsIiwib2lhLmdvdi5wbCIsIm9pcm0uZ292LnBs'@;
put 'Iiwib2tlLmdvdi5wbCIsIm9vdy5nb3YucGwiLCJvc2Noci5nb3YucGwiLCJvdW0uZ292LnBsIiwicGEuZ292LnBsIiwicGluYi5nb3YucGwiLCJwaXcuZ292LnBsIiwicG8uZ292LnBsIiwicHIuZ292LnBsIiwicHNwLmdvdi5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cu'@;
put 'Z292LnBsIiwic2EuZ292LnBsIiwic2RuLmdvdi5wbCIsInNrby5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwidWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXBwby5nb3Yu'@;
put 'cGwiLCJ1cy5nb3YucGwiLCJ1dy5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lmLmdvdi5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid2l3Lmdvdi5wbCIsIndrei5nb3YucGwiLCJ3c2EuZ292LnBsIiwid3Nrci5nb3YucGwiLCJ3'@;
put 'c3NlLmdvdi5wbCIsInd1b3ouZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInpwLmdvdi5wbCIsInpwaXNkbi5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBsIiwiYmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2Eu'@;
put 'cGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJieXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcucGwiLCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29y'@;
put 'bGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5pYS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1YnkucGwiLCJrYXRvd2ljZS5wbCIsImthemltaWVyei1kb2xueS5wbCIsImtl'@;
put 'cG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29sb2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBsIiwibGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIs'@;
put 'ImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsucGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwiLCJtcmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55'@;
put 'c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwiLCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwib3N0cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFs'@;
put 'ZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3Jza2llLnBsIiwicG9tb3J6ZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJhZG9tLnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93'@;
put 'LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNrb2N6b3cucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJkLnBsIiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHpp'@;
put 'bi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRhcm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5wbCIsIndhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vn'@;
put 'cm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNsYXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwiLCJ6Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJjby5w'@;
put 'biIsImVkdS5wbiIsImdvdi5wbiIsIm5ldC5wbiIsIm9yZy5wbiIsInBvc3QiLCJwciIsImJpei5wciIsImNvbS5wciIsImVkdS5wciIsImdvdi5wciIsImluZm8ucHIiLCJpc2xhLnByIiwibmFtZS5wciIsIm5ldC5wciIsIm9yZy5wciIsInByby5wciIsImFjLnByIiwiZXN0LnByIiwicHJv'@;
put 'Zi5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJvIiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQucHJvIiwicHMiLCJjb20ucHMiLCJlZHUucHMiLCJnb3YucHMiLCJuZXQu'@;
put 'cHMiLCJvcmcucHMiLCJwbG8ucHMiLCJzZWMucHMiLCJwdCIsImNvbS5wdCIsImVkdS5wdCIsImdvdi5wdCIsImludC5wdCIsIm5ldC5wdCIsIm5vbWUucHQiLCJvcmcucHQiLCJwdWJsLnB0IiwicHciLCJiZWxhdS5wdyIsImNvLnB3IiwiZWQucHciLCJnby5wdyIsIm9yLnB3IiwicHkiLCJj'@;
put 'b20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwi'@;
put 'cm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1'@;
put 'IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwiZWR1LnNhIiwiZ292LnNhIiwibWVkLnNhIiwibmV0LnNhIiwib3JnLnNhIiwicHViLnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUu'@;
put 'c2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImVkdS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsInNkIiwiY29tLnNkIiwiZWR1LnNkIiwiZ292LnNkIiwiaW5mby5zZCIsIm1lZC5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsInR2LnNkIiwic2UiLCJh'@;
put 'LnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5z'@;
put 'ZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2Ui'@;
put 'LCJ6LnNlIiwic2ciLCJjb20uc2ciLCJlZHUuc2ciLCJnb3Yuc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJzaCIsImNvbS5zaCIsImdvdi5zaCIsIm1pbC5zaCIsIm5ldC5zaCIsIm9yZy5zaCIsInNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwiZWR1LnNsIiwiZ292LnNsIiwibmV0LnNsIiwi'@;
put 'b3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNv'@;
put 'LnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3MiLCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRhLnN0IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUu'@;
put 'c3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2IiwiY29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImNvbS5zeSIsImVkdS5zeSIsImdvdi5zeSIsIm1pbC5zeSIsIm5ldC5zeSIsIm9yZy5zeSIsInN6IiwiYWMu'@;
put 'c3oiLCJjby5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwiYml6LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIs'@;
put 'Imdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJuZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY28udG0iLCJjb20udG0iLCJlZHUudG0iLCJnb3YudG0iLCJtaWwudG0iLCJuZXQudG0iLCJub20u'@;
put 'dG0iLCJvcmcudG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZpbi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwicGVyc28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJlZHUu'@;
put 'dG8iLCJnb3YudG8iLCJtaWwudG8iLCJuZXQudG8iLCJvcmcudG8iLCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIiLCJpbmZvLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibWlsLnRyIiwibmFt'@;
put 'ZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImJpei50dCIsImNvLnR0IiwiY29tLnR0IiwiZWR1LnR0IiwiZ292LnR0IiwiaW5mby50dCIsIm1pbC50dCIsIm5hbWUudHQi'@;
put 'LCJuZXQudHQiLCJvcmcudHQiLCJwcm8udHQiLCJ0diIsInR3IiwiY2x1Yi50dyIsImNvbS50dyIsImViaXoudHciLCJlZHUudHciLCJnYW1lLnR3IiwiZ292LnR3IiwiaWR2LnR3IiwibWlsLnR3IiwibmV0LnR3Iiwib3JnLnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3Rl'@;
put 'bC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEiLCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNo'@;
put 'ZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVhIiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJvdnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwi'@;
put 'ZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIsImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2lldi51YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3Jv'@;
put 'cHl2bnl0c2t5aS51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHVoYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEi'@;
put 'LCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1'@;
put 'emhnb3JvZC51YSIsInV6aGhvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIsInZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInpha2FycGF0dGlhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6YXBvcml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwi'@;
put 'enAudWEiLCJ6dC51YSIsInVnIiwiYWMudWciLCJjby51ZyIsImNvbS51ZyIsImdvLnVnIiwibmUudWciLCJvci51ZyIsIm9yZy51ZyIsInNjLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRkLnVrIiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMu'@;
put 'dWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVzIiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJjYS51cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMi'@;
put 'LCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMiLCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMiLCJtby51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUu'@;
put 'dXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gudXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgudXMiLCJ1dC51cyIsInZhLnVzIiwidmkudXMiLCJ2dC51cyIsIndhLnVzIiwi'@;
put 'd2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwiazEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwiazEyLmRjLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVz'@;
put 'IiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwiazEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVzIiwiazEyLm1lLnVzIiwiazEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1z'@;
put 'LnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVzIiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9oLnVzIiwiazEyLm9rLnVzIiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEy'@;
put 'LnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0LnVzIiwiazEyLnZhLnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiY2MuYWsudXMiLCJsaWIuYWsudXMiLCJjYy5hbC51cyIsImxpYi5hbC51cyIsImNjLmFyLnVzIiwibGli'@;
put 'LmFyLnVzIiwiY2MuYXMudXMiLCJsaWIuYXMudXMiLCJjYy5hei51cyIsImxpYi5hei51cyIsImNjLmNhLnVzIiwibGliLmNhLnVzIiwiY2MuY28udXMiLCJsaWIuY28udXMiLCJjYy5jdC51cyIsImxpYi5jdC51cyIsImNjLmRjLnVzIiwibGliLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51'@;
put 'cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNjLmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMiLCJjYy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51'@;
put 'cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNjLm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMiLCJjYy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51'@;
put 'cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNjLnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmEudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2Mud2EudXMiLCJjYy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJrMTIud3ku'@;
put 'dXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMiLCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3MudXMiLCJsaWIua3kudXMiLCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIu'@;
put 'bWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8udXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIubmgudXMiLCJsaWIubmoudXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJs'@;
put 'aWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIucGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJsaWIudHgudXMiLCJsaWIudXQudXMiLCJsaWIudmEudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMi'@;
put 'LCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJwdnQuazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwiY29nLm1pLnVzIiwiZHN0Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWku'@;
put 'dXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIsImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJjb20udXoiLCJuZXQudXoiLCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwiZWR1LnZjIiwiZ292'@;
put 'LnZjIiwibWlsLnZjIiwibmV0LnZjIiwib3JnLnZjIiwidmUiLCJhcnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZlIiwiZ292LnZlIiwiaW5mby52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIs'@;
put 'Im9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwidGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZpIiwidm4iLCJhYy52biIsImFpLnZuIiwiYml6LnZuIiwiY29tLnZuIiwiZWR1LnZuIiwiZ292LnZu'@;
put 'IiwiaGVhbHRoLnZuIiwiaWQudm4iLCJpbmZvLnZuIiwiaW50LnZuIiwiaW8udm4iLCJuYW1lLnZuIiwibmV0LnZuIiwib3JnLnZuIiwicHJvLnZuIiwiYW5naWFuZy52biIsImJhY2dpYW5nLnZuIiwiYmFja2FuLnZuIiwiYmFjbGlldS52biIsImJhY25pbmgudm4iLCJiYXJpYS12dW5ndGF1'@;
put 'LnZuIiwiYmVudHJlLnZuIiwiYmluaGRpbmgudm4iLCJiaW5oZHVvbmcudm4iLCJiaW5ocGh1b2Mudm4iLCJiaW5odGh1YW4udm4iLCJjYW1hdS52biIsImNhbnRoby52biIsImNhb2Jhbmcudm4iLCJkYWtsYWsudm4iLCJkYWtub25nLnZuIiwiZGFuYW5nLnZuIiwiZGllbmJpZW4udm4iLCJk'@;
put 'b25nbmFpLnZuIiwiZG9uZ3RoYXAudm4iLCJnaWFsYWkudm4iLCJoYWdpYW5nLnZuIiwiaGFpZHVvbmcudm4iLCJoYWlwaG9uZy52biIsImhhbmFtLnZuIiwiaGFub2kudm4iLCJoYXRpbmgudm4iLCJoYXVnaWFuZy52biIsImhvYWJpbmgudm4iLCJodW5neWVuLnZuIiwia2hhbmhob2Eudm4i'@;
put 'LCJraWVuZ2lhbmcudm4iLCJrb250dW0udm4iLCJsYWljaGF1LnZuIiwibGFtZG9uZy52biIsImxhbmdzb24udm4iLCJsYW9jYWkudm4iLCJsb25nYW4udm4iLCJuYW1kaW5oLnZuIiwibmdoZWFuLnZuIiwibmluaGJpbmgudm4iLCJuaW5odGh1YW4udm4iLCJwaHV0aG8udm4iLCJwaHV5ZW4u'@;
put 'dm4iLCJxdWFuZ2Jpbmgudm4iLCJxdWFuZ25hbS52biIsInF1YW5nbmdhaS52biIsInF1YW5nbmluaC52biIsInF1YW5ndHJpLnZuIiwic29jdHJhbmcudm4iLCJzb25sYS52biIsInRheW5pbmgudm4iLCJ0aGFpYmluaC52biIsInRoYWluZ3V5ZW4udm4iLCJ0aGFuaGhvYS52biIsInRoYW5o'@;
put 'cGhvaG9jaGltaW5oLnZuIiwidGh1YXRoaWVuaHVlLnZuIiwidGllbmdpYW5nLnZuIiwidHJhdmluaC52biIsInR1eWVucXVhbmcudm4iLCJ2aW5obG9uZy52biIsInZpbmhwaHVjLnZuIiwieWVuYmFpLnZuIiwidnUiLCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIs'@;
put 'IndzIiwiY29tLndzIiwiZWR1LndzIiwiZ292LndzIiwibmV0LndzIiwib3JnLndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNcdTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJc'@;
put 'dTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0'@;
put 'MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZlMmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1'@;
put 'M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlcdTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRc'@;
put 'dTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBc'@;
put 'dTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBjMjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBh'@;
put 'MmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2'@;
put 'MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBkYmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlc'@;
put 'dTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNcdTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2'@;
put 'MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0'@;
put 'NDFcdTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwi'@;
put 'XHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2'@;
put 'MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2'@;
put 'MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFc'@;
put 'dTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRc'@;
put 'dTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBl'@;
put 'NDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVk'@;
put 'dS55ZSIsImdvdi55ZSIsIm1pbC55ZSIsIm5ldC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwuemEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJu'@;
put 'b20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJuZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28u'@;
put 'enciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUiLCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIs'@;
put 'ImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFs'@;
put 'c3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxl'@;
put 'IiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF3cyIsImF4'@;
put 'YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwi'@;
put 'YmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJi'@;
put 'bG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRp'@;
put 'cXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6aCIsImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4i'@;
put 'LCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJj'@;
put 'YXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIs'@;
put 'ImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjbGFpbXMiLCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIsImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVn'@;
put 'ZSIsImNvbG9nbmUiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2wiLCJjb3JzaWNhIiwi'@;
put 'Y291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwiY3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIsImN1aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWQiLCJkYW5jZSIs'@;
put 'ImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwiLCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJkZW1vY3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWdu'@;
put 'IiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVjdG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRvZyIsImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2'@;
put 'IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgiLCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5lZXIiLCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJl'@;
put 'cXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5'@;
put 'IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJmaW5hbmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZp'@;
put 'cm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNzIiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJm'@;
put 'b3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJk'@;
put 'ZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdv'@;
put 'bGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMi'@;
put 'LCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIs'@;
put 'ImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwi'@;
put 'aHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJpZXMiLCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImlu'@;
put 'c3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFyIiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJq'@;
put 'aW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3RpY3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwi'@;
put 'a2ltIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdoaW5pIiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5kIiwibGFuZHJvdmVy'@;
put 'IiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0IiwibGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxl'@;
put 'IiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92'@;
put 'ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5kYmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1h'@;
put 'cnJpb3R0IiwibWFyc2hhbGxzIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2siLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJt'@;
put 'aXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2Qi'@;
put 'LCJtdG4iLCJtdHIiLCJtdXNpYyIsIm5hYiIsIm5hZ295YSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlr'@;
put 'ZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGxv'@;
put 'Iiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xlIiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2UiLCJwYW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBh'@;
put 'cnRzIiwicGFydHkiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhhcm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIsInBpY3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBp'@;
put 'bmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3RhdGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJheGkiLCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwi'@;
put 'cHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJhY2luZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9y'@;
put 'IiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1icmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBhaXIiLCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJh'@;
put 'bnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNoYXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5IiwicnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwi'@;
put 'c2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIsInNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIsInNheG8iLCJzYmkiLCJzYnMiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2No'@;
put 'bWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJzZW5lciIsInNlcnZpY2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwi'@;
put 'c2ZyIiwic2hhbmdyaWxhIiwic2hhcnAiLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2lsayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIsInNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQi'@;
put 'LCJzbWlsZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJz'@;
put 'dGF0ZWJhbmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwic3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtp'@;
put 'Iiwic3dhdGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1h'@;
put 'c2VrIiwidGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRtYWxsIiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXki'@;
put 'LCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1Iiwi'@;
put 'dHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2'@;
put 'aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95YWdlIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndh'@;
put 'bmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5uZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWQiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndpZW4iLCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwi'@;
put 'd2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3JrIiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhpaHVhbiIsInhpbiIsIlx1MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1'@;
put 'NGY1Ylx1NWM3MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIs'@;
put 'Ilx1OTk5OVx1NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQzYVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1'@;
put 'MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1'@;
put 'MzBjM1x1MzBiN1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0'@;
put 'Nlx1NTdjZSIsIlx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIs'@;
put 'Ilx1OGMzN1x1NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1'@;
put 'N2Y1MVx1N2VkYyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYyN1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1'@;
put 'MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYy'@;
put 'N1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1NjczYVx1Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1'@;
put 'NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIsIlx1NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIs'@;
put 'Ilx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1NjA2ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYw'@;
put 'OVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlvdXR1YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpv'@;
put 'bmUiLCJ6dWVyaWNoIiwiY28ua3JkIiwiZWR1LmtyZCIsImFydC5wbCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJsaWIuZGUudXMiLCIxMmNoYXJzLmRldiIsIjEyY2hhcnMuaXQiLCIxMmNoYXJzLnBybyIsImNjLnVhIiwi'@;
put 'aW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiYTJob3N0ZWQuY29tIiwiY3BzZXJ2ZXIuY29tIiwiYWFhLnZvZGthIiwiKi5vbi1hY29ybi5pbyIsImFjdGl2ZXRyYWlsLmJpeiIsImFkYXB0YWJsZS5hcHAiLCJhZG9iZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwi'@;
put 'YWVtLmxpdmUiLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiYWVtLnBhZ2UiLCJobHgucGFnZSIsImhseDMucGFnZSIsImFkb2JlaW8tc3RhdGljLm5ldCIsImFkb2JlaW9ydW50aW1lLm5ldCIsImFmcmljYS5jb20iLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRh'@;
put 'cHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImFrYWRucy5uZXQiLCJha2FtYWkubmV0IiwiYWthbWFpLXN0YWdpbmcubmV0IiwiYWthbWFpZWRnZS5uZXQiLCJha2FtYWllZGdlLXN0YWdpbmcubmV0IiwiYWthbWFpaGQubmV0IiwiYWthbWFpaGQtc3RhZ2lu'@;
put 'Zy5uZXQiLCJha2FtYWlvcmlnaW4ubmV0IiwiYWthbWFpb3JpZ2luLXN0YWdpbmcubmV0IiwiYWthbWFpemVkLm5ldCIsImFrYW1haXplZC1zdGFnaW5nLm5ldCIsImVkZ2VrZXkubmV0IiwiZWRnZWtleS1zdGFnaW5nLm5ldCIsImVkZ2VzdWl0ZS5uZXQiLCJlZGdlc3VpdGUtc3RhZ2luZy5u'@;
put 'ZXQiLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdvcmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsIm15YW1hemUubmV0IiwiZXhlY3V0ZS1hcGkuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0'@;
put 'ZS1hcGkuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImV4ZWN1dGUtYXBpLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1'@;
put 'dGUtYXBpLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0'@;
put 'ZS1hcGkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIs'@;
put 'ImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJl'@;
put 'eGVjdXRlLWFwaS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUt'@;
put 'YXBpLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtY2Vu'@;
put 'dHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpv'@;
put 'bmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3Mu'@;
put 'Y29tIiwiY2xvdWRmcm9udC5uZXQiLCJhdXRoLmFmLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmNvZ25p'@;
put 'dG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRo'@;
put 'LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTQuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmNhLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2Etd2Vz'@;
put 'dC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtbm9ydGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMS5hbWF6b25jb2duaXRv'@;
put 'LmNvbSIsImF1dGguZXUtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguaWwtY2VudHJhbC0x'@;
put 'LmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnNhLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwi'@;
put 'YXV0aC1maXBzLnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51'@;
put 'cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5j'@;
put 'b20uY24iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGgtMS5hbWF6'@;
put 'b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0'@;
put 'dWRpby1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdz'@;
put 'LmNvbSIsImVtcmFwcHVpLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6'@;
put 'b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3Mt'@;
put 'cHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpv'@;
put 'bmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0'@;
put 'aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAt'@;
put 'c291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29t'@;
put 'IiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1z'@;
put 'b3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20i'@;
put 'LCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2EtY2VudHJhbC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJh'@;
put 'bC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29r'@;
put 'cy1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIs'@;
put 'ImVtcnN0dWRpby1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3Mu'@;
put 'Y29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTIuYW1h'@;
put 'em9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0zLmFt'@;
put 'YXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUt'@;
put 'Y2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3Rl'@;
put 'Ym9va3MtcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJl'@;
put 'bXJzdHVkaW8tcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwi'@;
put 'ZW1yYXBwdWktcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNv'@;
put 'bSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292'@;
put 'LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXBy'@;
put 'b2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIiouY24tbm9ydGgt'@;
put 'MS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmNuLW5vcnRod2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouYWYtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0xLmFp'@;
put 'cmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0yLmFpcmZsb3cuYW1h'@;
put 'em9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTQuYWlyZmxvdy5hbWF6'@;
put 'b25hd3MuY29tIiwiKi5jYS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwi'@;
put 'Ki5ldS1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTIuYWlyZmxv'@;
put 'dy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5pbC1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNv'@;
put 'bSIsIiouc2EtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0yLmFpcmZs'@;
put 'b3cuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNu'@;
put 'IiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtZGVwcmVjYXRlZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNv'@;
put 'bS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRo'@;
put 'd2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29t'@;
put 'LmNuIiwiczMuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hZi1zb3V0aC0xLmFtYXpv'@;
put 'bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtZWFzdC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy13ZWJzaXRlLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNr'@;
put 'LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdl'@;
put 'YnNpdGUuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0'@;
put 'aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFw'@;
put 'LW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVh'@;
put 'c3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5h'@;
put 'cC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFw'@;
put 'LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nw'@;
put 'b2ludC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl'@;
put 'c3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTEu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu'@;
put 'ZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFj'@;
put 'ay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwi'@;
put 'czMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291'@;
put 'dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLW9iamVj'@;
put 'dC1sYW1iZGEuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01'@;
put 'LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmFw'@;
put 'LXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1h'@;
put 'Y2Nlc3Nwb2ludC5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0'@;
put 'ZS5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIs'@;
put 'InMzLWZpcHMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMz'@;
put 'LWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxz'@;
put 'dGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS13ZXN0LTEu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1'@;
put 'LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxh'@;
put 'bWJkYS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMi5hbWF6'@;
put 'b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtbm9ydGgtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMS5h'@;
put 'bWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUt'@;
put 'c291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1z'@;
put 'b3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVh'@;
put 'bHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdl'@;
put 'c3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6'@;
put 'b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdz'@;
put 'LmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTMuYW1hem9u'@;
put 'YXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmlsLWNlbnRy'@;
put 'YWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5p'@;
put 'bC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJz'@;
put 'My13ZWJzaXRlLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLWNlbnRyYWwtMS5hbWF6b25hd3Mu'@;
put 'Y29tIiwiczMtd2Vic2l0ZS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMubWUtc291dGgtMS5hbWF6b25hd3MuY29t'@;
put 'IiwiczMtYWNjZXNzcG9pbnQubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy0xLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy1hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMz'@;
put 'LWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1'@;
put 'LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Yt'@;
put 'd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJtcmFwLmFjY2Vzc3BvaW50LnMzLWdsb2JhbC5hbWF6b25hd3MuY29tIiwiczMtbWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi1l'@;
put 'YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRl'@;
put 'LWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFz'@;
put 'dC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnNhLWVhc3QtMS5hbWF6'@;
put 'b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJz'@;
put 'My51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVz'@;
put 'LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3Rh'@;
put 'Y2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpv'@;
put 'bmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNj'@;
put 'ZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdv'@;
put 'di1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmpl'@;
put 'Y3QtbGFtYmRhLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFt'@;
put 'YXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nw'@;
put 'b2ludC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy13ZWJzaXRlLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNr'@;
put 'LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMt'@;
put 'd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3Qt'@;
put 'MS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJz'@;
put 'My1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFj'@;
put 'Y2Vzc3BvaW50LWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJz'@;
put 'aXRlLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVh'@;
put 'c3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTEuc2FnZW1ha2Vy'@;
put 'LmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYWYtc291dGgt'@;
put 'MS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtl'@;
put 'ci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVi'@;
put 'b29rLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtNC5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2su'@;
put 'Y2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LW5vcnRoLTEuc2Fn'@;
put 'ZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5l'@;
put 'dS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2subWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5zYS1lYXN0LTEuc2FnZW1ha2Vy'@;
put 'LmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29r'@;
put 'LnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9v'@;
put 'ay51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jbi1ub3J0aC0xLnNh'@;
put 'Z2VtYWtlci5jb20uY24iLCJub3RlYm9vay5jbi1ub3J0aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwi'@;
put 'c3R1ZGlvLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVh'@;
put 'c3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwi'@;
put 'c3R1ZGlvLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3Mi'@;
put 'LCJzdHVkaW8uaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMS5zYWdlbWFr'@;
put 'ZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8t'@;
put 'Zmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY24tbm9ydGgtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmNuLW5vcnRod2VzdC0xLnNhZ2Vt'@;
put 'YWtlci5jb20uY24iLCIqLmV4cGVyaW1lbnRzLnNhZ2VtYWtlci5hd3MiLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNv'@;
put 'dXRoLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20i'@;
put 'LCJhbmFseXRpY3MtZ2F0ZXdheS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy13ZXN0LTIuYW1h'@;
put 'em9uYXdzLmNvbSIsImFtcGxpZnlhcHAuY29tIiwiKi5hd3NhcHBydW5uZXIuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5h'@;
put 'Zi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndl'@;
put 'YnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMu'@;
put 'YXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFw'@;
put 'LW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGgtMS5hbWF6'@;
put 'b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3Vk'@;
put 'OS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFz'@;
put 'dC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29t'@;
put 'Iiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5j'@;
put 'bG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9u'@;
put 'YXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMu'@;
put 'YXdzLWNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25h'@;
put 'd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3Qt'@;
put 'My5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2'@;
put 'aWV3LWFzc2V0cy5hd3MtY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuc2Et'@;
put 'ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5j'@;
put 'bG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNv'@;
put 'bSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVz'@;
put 'LXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhd3Nh'@;
put 'cHBzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFmLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5j'@;
put 'b20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0'@;
put 'LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3Rh'@;
put 'bGsuY29tIiwiZXUtbm9ydGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5z'@;
put 'dGFsay5jb20iLCJpbC1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJtZS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNi'@;
put 'ZWFuc3RhbGsuY29tIiwidXMtZ292LWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6'@;
put 'b25hd3MuY29tLmNuIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsIioucHJpdmF0ZS5yZXBvc3QuYXdzIiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImFwaWdlZS5pbyIsInBhbmVsLmRldiIsInNpaWl0ZXMuY29tIiwiYXBwc3Bh'@;
put 'Y2Vob3N0ZWQuY29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJmNS5zaSIsImFydmFuZWRnZS5pciIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwi'@;
put 'cG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubGluayIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2Ei'@;
put 'LCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNh'@;
put 'bGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCJiZWFnbGVib2FyZC5pbyIsIiouYmVnZXQuYXBwIiwicGFnZXMuZ2F5IiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEu'@;
put 'bmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCIqLnMuYnJhdmUuaW8iLCJzaG9wLmJyZW5kbHkuaHIiLCJzaG9wLmJyZW5kbHkucnMiLCJi'@;
put 'cm93c2Vyc2FmZXR5bWFyay5pbyIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20iLCJjYW52YS1hcHBzLmNuIiwiKi5teS5jYW52YXNpdGUuY24iLCJjYW52YS1hcHBzLmNvbSIsIiou'@;
put 'bXkuY2FudmEuc2l0ZSIsImRyci5hYyIsInV3dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUubXAiLCJhcGkuZ292LnVrIiwiY2RuNzctc3RvcmFnZS5jb20iLCJyc2MuY29udGVudHByb3h5OS5jeiIsInIuY2RuNzcubmV0IiwiY2RuNzctc3NsLm5ldCIsImMuY2RuNzcub3JnIiwicnNj'@;
put 'LmNkbjc3Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsInphLmJ6IiwiYnIuY29tIiwiY24uY29tIiwiZGUuY29tIiwiZXUuY29tIiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJ1ay5jb20iLCJ1cy5jb20iLCJ6YS5jb20iLCJjb20uZGUiLCJnYi5u'@;
put 'ZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJzZS5uZXQiLCJ1ay5uZXQiLCJhZS5vcmciLCJjb20uc2UiLCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xlcmsuYXBwIiwiY2xlcmtzdGFnZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3Rn'@;
put 'LmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xldmVyYXBwcy5jYyIsIiouc2VydmljZXMuY2xldmVyLWNsb3VkLmNvbSIsImNsZXZlcmFwcHMuaW8iLCJjbGV2ZXJhcHBzLnRlY2giLCJjbGlja3Jpc2luZy5uZXQiLCJjbG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJlIiwiY2xvdWQtaXAuYml6Iiwi'@;
put 'Y2xvdWRucy5iaXoiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5jaCIsImNsb3VkbnMuY2wiLCJjbG91ZG5zLmNsdWIiLCJkbnNhYnIuY29tIiwiaXAtZGRucy5jb20iLCJjbG91ZG5zLmN4IiwiY2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJkZG5zLWlwLm5ldCIsImRu'@;
put 'cy1jbG91ZC5uZXQiLCJkbnMtZHluYW1pYy5uZXQiLCJjbG91ZG5zLm56IiwiY2xvdWRucy5vcmciLCJpcC1keW5hbWljLm9yZyIsImNsb3VkbnMucGgiLCJjbG91ZG5zLnBybyIsImNsb3VkbnMucHciLCJjbG91ZG5zLnVzIiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIs'@;
put 'ImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiKi5jbG91ZGVyYS5zaXRlIiwiY2YtaXBmcy5jb20iLCJjbG91ZGZsYXJlLWlwZnMuY29tIiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJwYWdl'@;
put 'cy5kZXYiLCJyMi5kZXYiLCJ3b3JrZXJzLmRldiIsImNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmVhbnljYXN0Lm5ldCIsImNkbi5jbG91ZGZsYXJlY24ubmV0IiwiY2RuLmNsb3VkZmxhcmVnbG9iYWwubmV0IiwiY3VzdC5jbG91ZHNjYWxlLmNo'@;
put 'Iiwib2JqZWN0cy5scGcuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMucm1hLmNsb3Vkc2NhbGUuY2giLCJ3bmV4dC5hcHAiLCJjbnB5LmdkbiIsIioub3RhcC5jbyIsImNvLmNhIiwiY28uY29tIiwiY29kZWJlcmcucGFnZSIsImNzYi5hcHAiLCJwcmV2aWV3LmNzYi5hcHAiLCJjby5ubCIsImNv'@;
put 'Lm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImN0ZmNsb3VkLm5ldCIsImNvbnZleC5zaXRlIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1IiwiZHluLmNvc2lkbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiZHluYW1p'@;
put 'c2NoZXMtZG5zLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJjcmFmdC5tZSIsInJlYWxtLmN6Iiwib24uY3Jpc3AuZW1haWwiLCIqLmNyeXB0'@;
put 'b25vbWljLm5ldCIsImN1cnYuZGV2IiwiY2ZvbGtzLnBsIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwiYml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFw'@;
put 'cG5vZGUuaW8iLCJidWlsdHdpdGhkYXJrLmNvbSIsImRhcmtsYW5nLmlvIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwiZGF0dG9sb2NhbC5jb20iLCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8u'@;
put 'Y29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImRkbnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluLWlwMjQuZGUiLCJkeW5kbnMxLmRlIiwiaG9tZS13ZWJzZXJ2ZXIuZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVy'@;
put 'LmRlIiwiZGRuc3Mub3JnIiwiZGViaWFuLm5ldCIsImRlZmluaW1hLmlvIiwiZGVmaW5pbWEubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2IiwiZGZpcm1hLnBsIiwiZGtvbnRvLnBsIiwieW91Mi5wbCIsIm9uZGlnaXRh'@;
put 'bG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsInVzLmtnIiwicnNzLm15LmlkIiwiZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRk'@;
put 'bnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsImR1cnVtaXMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiZHkuZmkiLCJ0dW5rLm9yZyIsImR5bmRucy5iaXoiLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJp'@;
put 'eiIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6Iiwic2VsZmlwLmJpeiIsIndlYmhvcC5iaXoiLCJmdHBhY2Nlc3MuY2MiLCJnYW1lLXNlcnZlci5jYyIsIm15cGhvdG9zLmNjIiwic2NyYXBwaW5nLmNjIiwiYmxvZ2Rucy5jb20iLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRu'@;
put 'c2Rvam8uY29tIiwiZG9lc250ZXhpc3QuY29tIiwiZG9udGV4aXN0LmNvbSIsImRvb21kbnMuY29tIiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQtd29yay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5j'@;
put 'b20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1zZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5j'@;
put 'b20iLCJkeW5kbnMtd29yay5jb20iLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmcm9tLWFrLmNvbSIsImZyb20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWNhLmNvbSIs'@;
put 'ImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNvbSIsImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNv'@;
put 'bSIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5q'@;
put 'LmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJvbS1yaS5jb20iLCJmcm9tLXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9t'@;
put 'LXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJmcm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwiZ2V0bXlpcC5jb20iLCJnb3RkbnMuY29tIiwiaG9iYnktc2l0ZS5jb20iLCJob21lbGludXguY29t'@;
put 'IiwiaG9tZXVuaXguY29tIiwiaWFtYWxsYW1hLmNvbSIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1jYXRlcmVyLmNvbSIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNvbnNlcnZh'@;
put 'dGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1ncmVlbi5j'@;
put 'b20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlzLWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1h'@;
put 'LW11c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJp'@;
put 'cy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1h'@;
put 'Y3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtY2VydGlmaWVkLmNvbSIsImlzLWdvbmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMu'@;
put 'Y29tIiwiaXMtaW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zbGljay5jb20iLCJpcy11YmVybGVldC5jb20iLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWhvY2tl'@;
put 'eW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2NhbmR5LmNvbSIsIm5lYXQtdXJsLmNvbSIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2VsZmlwLmNvbSIsInNlbGxzLWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlcnZlYmJz'@;
put 'LmNvbSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJ0ZWFjaGVzLXlvZ2EuY29tIiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiYXRoLmN4IiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiaXN0ZWluZ2Vlay5kZSIsImlzdG1laW4uZGUiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVu'@;
put 'Z3Nlbi5kZSIsInRyYWV1bXRnZXJhZGUuZGUiLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiZHluZG5zLmluZm8iLCJmb3Itb3VyLmluZm8iLCJncm9rcy10aGUuaW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhlcmUtZm9yLW1vcmUuaW5m'@;
put 'byIsImtub3dzaXRhbGwuaW5mbyIsInNlbGZpcC5pbmZvIiwid2ViaG9wLmluZm8iLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJhdC1iYW5kLWNhbXAubmV0IiwiYmxvZ2Rucy5uZXQiLCJicm9rZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImRuc2FsaWFzLm5ldCIs'@;
put 'ImRuc2Rvam8ubmV0IiwiZG9lcy1pdC5uZXQiLCJkb250ZXhpc3QubmV0IiwiZHluYWxpYXMubmV0IiwiZHluYXRob21lLm5ldCIsImVuZG9maW50ZXJuZXQubmV0IiwiZnJvbS1hei5uZXQiLCJmcm9tLWNvLm5ldCIsImZyb20tbGEubmV0IiwiZnJvbS1ueS5uZXQiLCJnZXRzLWl0Lm5ldCIs'@;
put 'ImhhbS1yYWRpby1vcC5uZXQiLCJob21lZnRwLm5ldCIsImhvbWVpcC5uZXQiLCJob21lbGludXgubmV0IiwiaG9tZXVuaXgubmV0IiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtZ2Vlay5uZXQiLCJpc2EtZ2Vlay5uZXQiLCJraWNrcy1hc3MubmV0Iiwib2ZmaWNl'@;
put 'LW9uLXRoZS5uZXQiLCJwb2R6b25lLm5ldCIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2VsZmlwLm5ldCIsInNlbGxzLWl0Lm5ldCIsInNlcnZlYmJzLm5ldCIsInNlcnZlZnRwLm5ldCIsInRocnVoZXJlLm5ldCIsIndlYmhvcC5uZXQiLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJzaGFja25l'@;
put 'dC5udSIsImJsb2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9yZyIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8ub3JnIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0Lm9yZyIsImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bmFsaWFzLm9yZyIs'@;
put 'ImR5bmRucy5vcmciLCJnby5keW5kbnMub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiZW5kb2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImZyb20tbWUub3JnIiwiZ2FtZS1ob3N0Lm9yZyIsImdvdGRucy5vcmciLCJob2JieS1zaXRlLm9yZyIsImhvbWVkbnMub3JnIiwi'@;
put 'aG9tZWZ0cC5vcmciLCJob21lbGludXgub3JnIiwiaG9tZXVuaXgub3JnIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5vcmciLCJpcy1hLWdlZWsub3JnIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1s'@;
put 'aW51eC11c2VyLm9yZyIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1hLXNveGZhbi5vcmciLCJpcy1mb3VuZC5vcmciLCJpcy1sb3N0Lm9yZyIsImlzLXNhdmVkLm9yZyIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnktZXZpbC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNl'@;
put 'Lm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXNhLWdlZWsub3JnIiwia2lja3MtYXNzLm9yZyIsIm1pc2NvbmZ1c2VkLm9yZyIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzZWxmaXAub3JnIiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5v'@;
put 'cmciLCJzZXJ2ZWdhbWUub3JnIiwic3R1ZmYtNC1zYWxlLm9yZyIsIndlYmhvcC5vcmciLCJiZXR0ZXItdGhhbi50diIsImR5bmRucy50diIsIm9uLXRoZS13ZWIudHYiLCJ3b3JzZS10aGFuLnR2IiwiaXMtYnkudXMiLCJsYW5kLTQtc2FsZS51cyIsInN0dWZmLTQtc2FsZS51cyIsImR5bmRu'@;
put 'cy53cyIsIm15cGV0cy53cyIsImRkbnNmcmVlLmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5LmNvbSIsInRoZXdvcmtwYy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2Ft'@;
put 'Lm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiZHludjYubmV0IiwiZTQuY3oiLCJlYXN5cGFuZWwuYXBwIiwiZWFzeXBhbmVsLmhvc3QiLCIqLmV3cC5saXZlIiwidHdtYWlsLmNjIiwidHdtYWls'@;
put 'Lm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJhdC5lbWYuY2FtcCIsInJ0Lmh0IiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290LmZyIiwibXl0dWxlYXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwi'@;
put 'ZW5jb3JlYXBpLmNvbSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIs'@;
put 'ImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5v'@;
put 'cmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0'@;
put 'LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9yZyIsInNpLmV1Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIs'@;
put 'InVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2RlLmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZlbm5vZGUuY29tIiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIs'@;
put 'InVzLTQuZXZlbm5vZGUuY29tIiwicmVsYXkuZXZlcnZhdWx0LmFwcCIsInJlbGF5LmV2ZXJ2YXVsdC5kZXYiLCJleHBvLmFwcCIsInN0YWdpbmcuZXhwby5hcHAiLCJvbmZhYnJpY2EuY29tIiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIs'@;
put 'ImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2'@;
put 'a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1'@;
put 'IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwi'@;
put 'a2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZv'@;
put 'aS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3Ui'@;
put 'LCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0bHktZWRnZS5jb20iLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZy'@;
put 'ZWV0bHMuZmFzdGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9iYWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFz'@;
put 'dGx5bGIubmV0IiwiKi51c2VyLmZtIiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJjb25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFw'@;
put 'ZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZsZHJ2'@;
put 'LmNvbSIsImZsdXR0ZXJmbG93LmFwcCIsImZseS5kZXYiLCJzaHcuaW8iLCJlZGdlYXBwLm5ldCIsImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5haSIsImZyYW1lci5hcHAiLCJmcmFtZXJjYW52YXMuY29tIiwiZnJhbWVyLm1lZGlhIiwiZnJhbWVyLnBob3Rv'@;
put 'cyIsImZyYW1lci53ZWJzaXRlIiwiZnJhbWVyLndpa2kiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIiou'@;
put 'ZnJ1c2t5LmRlIiwid2llbi5mdW5rZmV1ZXIuYXQiLCJkYWVtb24uYXNpYSIsImRpeC5hc2lhIiwibXlkbnMuYnoiLCIwYW0uanAiLCIwZzAuanAiLCIwajAuanAiLCIwdDAuanAiLCJteWRucy5qcCIsInBndy5qcCIsIndqZy5qcCIsImtleXdvcmQtb24ubmV0IiwibGl2ZS1vbi5uZXQiLCJz'@;
put 'ZXJ2ZXItb24ubmV0IiwibXlkbnMudHciLCJteWRucy52YyIsIiouZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVtYWlsaW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNp'@;
put 'bmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwiYWxpYXNlczEyMS5jb20iLCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJpbmRlcGVuZGVudC1pbnF1ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5k'@;
put 'ZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5jb20iLCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2Vz'@;
put 'Lm5ldCIsImxvY2FsY2VydC5uZXQiLCJsb2NhbGhvc3RjZXJ0Lm5ldCIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21t'@;
put 'dW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQu'@;
put 'anAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJj'@;
put 'dXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJn'@;
put 'bG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxs'@;
put 'LmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwi'@;
put 'bmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5q'@;
put 'cCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0'@;
put 'aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJncmFwaGlj'@;
put 'LmRlc2lnbiIsImdvaXAuZGUiLCJibG9nc3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCIqLmhvc3RlZC5hcHAiLCIqLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nwb3QuY28uYXQiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5iYSIs'@;
put 'ImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJsb2dzcG90LmNsIiwiYmxvZ3Nwb3QuY29tLmNvIiwiKi4wZW1tLmNvbSIs'@;
put 'ImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiYmxvZ3Nwb3QuY29tIiwiY29kZXNwb3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJ3aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsImJsb2dzcG90'@;
put 'LmN2IiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsIiouZ2F0ZXdheS5kZXYiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJj'@;
put 'bG91ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJsb2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90Lmlu'@;
put 'IiwiYmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dzcG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5jb20ubXQiLCJi'@;
put 'bG9nc3BvdC5teCIsImJsb2dzcG90Lm15IiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QucGUiLCJibG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUi'@;
put 'LCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5zZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3QudGQiLCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC50dyIsImJsb2dz'@;
put 'cG90LnVnIiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC52biIsImJsb2dzcG90LmNvLnphIiwiZ291cGlsZS5mciIsInB5bW50LnVrIiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25kb24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJnb3YubmwiLCJncmFmYW5hLWRl'@;
put 'di5uZXQiLCJncmF5amF5bGVhZ3Vlcy5jb20iLCJnXHhmY25zdGlnYmVzdGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwiaFx4ZTRra2luZW4uZmkiLCJocnNuLmRldiIsImhhc2hiYW5nLnNoIiwi'@;
put 'aGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJoYXRlbmFibG9nLmNvbSIsImhhdGVuYWRpYXJ5LmNvbSIsImhhdGVibG8uanAiLCJoYXRlbmFibG9nLmpwIiwiaGF0ZW5hZGlhcnkuanAiLCJoYXRlbmFkaWFyeS5vcmciLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJwYWdlcy1yZXNl'@;
put 'YXJjaC5pdC5ocy1oZWlsYnJvbm4uZGUiLCJoZWl5dS5zcGFjZSIsImhlbGlvaG8uc3QiLCJoZWxpb2hvc3QudXMiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsImhleWZsb3cucGFnZSIsImhleWZsb3cuc2l0ZSIsInJhdmVuZGIuY2xvdWQiLCJyYXZl'@;
put 'bmRiLmNvbW11bml0eSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwiKi5raW4ub25lIiwiKi5pZC5wdWIiLCIqLmtpbi5wdWIiLCJzZWNhYXMuaGsiLCJob3BsaXguc2hvcCIsIm9yeC5iaXoiLCJiaXouZ2wiLCJiaXoubmciLCJjby5iaXoubmciLCJk'@;
put 'bC5iaXoubmciLCJnby5iaXoubmciLCJsZy5iaXoubmciLCJvbi5iaXoubmciLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwicGxjLm5nIiwiaWUudWEiLCJob3N0eWhvc3RpbmcuaW8iLCJoZi5zcGFjZSIsInN0YXRpYy5oZi5zcGFjZSIsImh5cGVybm9k'@;
put 'ZS5pbyIsImlvYmIubmV0IiwiY28uY3oiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQiLCJnci5jb20iLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3Qi'@;
put 'LCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tdnBuLmRlIiwiaW4tZHNsLm5ldCIsImluLXZwbi5uZXQiLCJpbi1kc2wub3JnIiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8u'@;
put 'YXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVn'@;
put 'LmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8u'@;
put 'bGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImFwcHMtMWFuZDEuY29tIiwibGl2ZS13ZWJzaXRlLmNvbSIsImFwcHMtMWFuZDEubmV0Iiwid2Vic2l0ZWJ1aWxkZXIub25saW5lIiwiYXBwLWlvbm9zLnNwYWNlIiwiaW9wc3lzLnNlIiwiKi5kd2ViLmxpbmsiLCJpcGlmb255Lm5l'@;
put 'dCIsImlyLm1kIiwiaXMtYS1nb29kLmRldiIsImlzLWEuZGV2IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3Vk'@;
put 'LmludGVyaG9zdHNvbHV0aW9ucy5iZSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVsZS5jbG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIs'@;
put 'Iml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQiLCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnByaW1ldGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xh'@;
put 'aW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUudHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiZG9wYWFzLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZpZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91'@;
put 'ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMuaWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxl'@;
put 'Zm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlv'@;
put 'IiwiamVsZS5pbyIsImpjLm5lZW4uaXQiLCJqY2xvdWQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZyYTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5uZXQiLCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4'@;
put 'Lm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2'@;
put 'ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGlj'@;
put 'LnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15'@;
put 'amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwid2ViYWRvcnNpdGUuY29tIiwiam91d3dlYi5zaXRlIiwiKi5jbnMuam95ZW50LmNvbSIsIioudHJpdG9uLnpvbmUiLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia2Fwc2kuZmkiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwia3VsZXV2'@;
put 'ZW4uY2xvdWQiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIndlYnRoaW5ncy5pbyIsImtyZWxsaWFuLm5ldCIsIm95YS50byIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2'@;
put 'bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXguc2l0ZSIsImxpYnAycC5kaXJlY3QiLCJydW5jb250YWluZXJzLmRldiIsImNvLmJ1c2luZXNzIiwiY28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwi'@;
put 'Y28ubmV0d29yayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIsImxpbmt5YXJkLWNsb3VkLmNoIiwibGlua3lhcmQuY2xvdWQiLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29tIiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250'@;
put 'ZW50LmNvbSIsIndlLmJzIiwiZmlsZWdlYXItc2cubWUiLCJnZ2ZmLm5ldCIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9kei5wbCIsInBhYmlhbmljZS5wbCIsInBsb2NrLnBsIiwic2llcmFkei5wbCIsInNraWVybmlld2ljZS5wbCIsInpnaWVyei5wbCIsImxvZ2lubGluZS5hcHAiLCJs'@;
put 'b2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJsb2htdXMubWUiLCJzZXJ2ZXJzLnJ1biIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRu'@;
put 'aWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY2x1YiIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmRlIiwiYmFyc3kuZGV2IiwiYmFyc3kuZXUiLCJiYXJzeS5nciIsImJhcnN5LmluIiwi'@;
put 'YmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3lvbmxpbmUubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJzeS5vcmciLCJiYXJzeS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnJzIiwi'@;
put 'YmFyc3kuc2hvcCIsImJhcnN5b25saW5lLnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3kuc3RvcmUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiKi5tYWdlbnRvc2l0ZS5jbG91ZCIsImhiLmNsZG1haWwucnUiLCJtYXRsYWIu'@;
put 'Y2xvdWQiLCJtb2RlbHNjYXBlLmNvbSIsIm13Y2xvdWRub25wcm9kLmNvbSIsInBvbHlzcGFjZS5jb20iLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwibWF6ZXBsYXkuY29tIiwibWNkaXIubWUiLCJtY2Rpci5ydSIsInZwcy5tY2Rpci5ydSIsIm1jcHJlLnJ1IiwibWVkaWF0ZWNo'@;
put 'LmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtZWR1c2Fqcy5hcHAiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCJhdG1ldGEuY29tIiwiYXBwcy5mYnNieC5jb20iLCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50'@;
put 'cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmUtYXBpLm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJhenVyZWVkZ2UubmV0Iiwi'@;
put 'YXp1cmVmZC5uZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0IiwiMi5henVyZXN0YXRpY2FwcHMubmV0IiwiMy5henVyZXN0YXRpY2FwcHMubmV0IiwiNC5henVyZXN0YXRpY2FwcHMubmV0IiwiNS5henVyZXN0YXRpY2FwcHMubmV0IiwiNi5henVyZXN0'@;
put 'YXRpY2FwcHMubmV0IiwiNy5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwi'@;
put 'd2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiYXp1cmV3ZWJzaXRlcy5uZXQiLCJjbG91ZGFwcC5uZXQiLCJ0cmFmZmljbWFuYWdlci5uZXQiLCJibG9iLmNvcmUud2luZG93cy5uZXQiLCJzZXJ2aWNlYnVzLndpbmRvd3MubmV0Iiwicm91dGluZ3RoZWNsb3VkLmNvbSIsInNuLm15bmV0'@;
put 'bmFtZS5uZXQiLCJyb3V0aW5ndGhlY2xvdWQubmV0Iiwicm91dGluZ3RoZWNsb3VkLm9yZyIsImNzeC5jYyIsIm15ZGJzZXJ2ZXIuY29tIiwid2Vic3BhY2Vjb25maWcuZGUiLCJtaXR0d2FsZC5pbmZvIiwibWl0dHdhbGRzZXJ2ZXIuaW5mbyIsInR5cG8zc2VydmVyLmluZm8iLCJwcm9qZWN0'@;
put 'LnNwYWNlIiwibW9keC5kZXYiLCJibW9hdHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0b21lci5teXRoaWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29t'@;
put 'IiwibHlueC5teXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1iZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhp'@;
put 'Yy1iZWFzdHMuY29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0ZnkuYXBwIiwibmV0bGlmeS5hcHAiLCI0dS5jb20iLCJuZnNob3N0LmNvbSIsImlwZnMubmZ0c3RvcmFn'@;
put 'ZS5saW5rIiwibmdvLnVzIiwibmdyb2suYXBwIiwibmdyb2stZnJlZS5hcHAiLCJuZ3Jvay5kZXYiLCJuZ3Jvay1mcmVlLmRldiIsIm5ncm9rLmlvIiwiYXAubmdyb2suaW8iLCJhdS5uZ3Jvay5pbyIsImV1Lm5ncm9rLmlvIiwiaW4ubmdyb2suaW8iLCJqcC5uZ3Jvay5pbyIsInNhLm5ncm9r'@;
put 'LmlvIiwidXMubmdyb2suaW8iLCJuZ3Jvay5waXp6YSIsIm5ncm9rLnBybyIsInRvcnVuLnBsIiwibmgtc2Vydi5jby51ayIsIm5pbXNpdGUudWsiLCJtbWFmYW4uYml6IiwibXlmdHAuYml6Iiwibm8taXAuYml6Iiwibm8taXAuY2EiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ290ZG5zLmNoIiwi'@;
put 'M3V0aWxpdGllcy5jb20iLCJibG9nc3l0ZS5jb20iLCJjaXNjb2ZyZWFrLmNvbSIsImRhbW5zZXJ2ZXIuY29tIiwiZGRuc2tpbmcuY29tIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zaXNraW5reS5jb20iLCJkeW5ucy5jb20iLCJnZWVrZ2FsYXh5LmNvbSIsImhlYWx0aC1jYXJlcmVmb3JtLmNv'@;
put 'bSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15dm5jLmNvbSIsIm5ldC1mcmVha3MuY29tIiwib250aGV3aWZpLmNvbSIsInBvaW50MnRoaXMuY29tIiwicXVpY2tzeXRl'@;
put 'cy5jb20iLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmViZWVyLmNvbSIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJzZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWh1'@;
put 'bW91ci5jb20iLCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwi'@;
put 'ZHZyY2FtLmluZm8iLCJpbG92ZWNvbGxlZ2UuaW5mbyIsIm5vLWlwLmluZm8iLCJicmFzaWxpYS5tZSIsImRkbnMubWUiLCJkbnNmb3IubWUiLCJob3B0by5tZSIsImxvZ2ludG8ubWUiLCJub2lwLm1lIiwid2ViaG9wLm1lIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJlYXRpbmctb3Jn'@;
put 'YW5pYy5uZXQiLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibmhsZmFuLm5ldCIsIm5vLWlwLm5ldCIsInBnYWZhbi5uZXQiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicmVk'@;
put 'aXJlY3RtZS5uZXQiLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVtaW5lY3JhZnQubmV0Iiwic3l0ZXMubmV0IiwiY2FibGUtbW9kZW0ub3JnIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImhvcHRvLm9yZyIsIm1sYmZhbi5vcmciLCJteWZ0cC5vcmciLCJteXNlY3Vy'@;
put 'aXR5Y2FtZXJhLm9yZyIsIm5mbGZhbi5vcmciLCJuby1pcC5vcmciLCJyZWFkLWJvb2tzLm9yZyIsInVmY2Zhbi5vcmciLCJ6YXB0by5vcmciLCJuby1pcC5jby51ayIsImdvbGZmYW4udXMiLCJub2lwLnVzIiwicG9pbnR0by51cyIsInN0YWdlLm5vZGVhcnQuaW8iLCIqLmRldmVsb3Blci5h'@;
put 'cHAiLCJub29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsIm5vdGlvbi5zaXRlIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3'@;
put 'd3cuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCJzb3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5kbnMubmV0IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJu'@;
put 'b3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwibnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwibnljLm1uIiwicHJ2Y3kucGFnZSIsIm9ibC5vbmciLCJvYnNlcnZhYmxlaHEuY2xvdWQiLCJzdGF0aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsIm9tZy5sb2wi'@;
put 'LCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwiMTIzd2Vic2VpdGUuYXQiLCIxMjN3ZWJzaXRlLmJlIiwic2ltcGxlc2l0ZS5jb20uYnIiLCIxMjN3ZWJzaXRlLmNoIiwic2ltcGxlc2l0ZS5jb20iLCIxMjN3ZWJzZWl0ZS5kZSIsIjEyM2hqZW1tZXNpZGUuZGsiLCIxMjNtaXdl'@;
put 'Yi5lcyIsIjEyM2tvdGlzaXZ1LmZpIiwiMTIzc2l0ZXdlYi5mciIsInNpbXBsZXNpdGUuZ3IiLCIxMjNob21lcGFnZS5pdCIsIjEyM3dlYnNpdGUubHUiLCIxMjN3ZWJzaXRlLm5sIiwiMTIzaGplbW1lc2lkZS5ubyIsInNlcnZpY2Uub25lIiwic2ltcGxlc2l0ZS5wbCIsIjEyM3BhZ2luYXdl'@;
put 'Yi5wdCIsIjEyM21pbnNpZGEuc2UiLCJpcy1hLWZ1bGxzdGFjay5kZXYiLCJpcy1jb29sLmRldiIsImlzLW5vdC1hLmRldiIsImxvY2FscGxheWVyLmRldiIsImlzLWxvY2FsLm9yZyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2'@;
put 'NC1iLml0Iiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsIioub3JhY2xlY2xvdWRhcHBzLmNvbSIsIioub3Jh'@;
put 'Y2xlZ292Y2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLnVrIiwidGVjaC5vcmFuZ2UiLCJjYW4ucmUiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBwLmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLmhvc3Rpbmcub3Zo'@;
put 'Lm5ldCIsIioud2VicGFhcy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZXhsLmNvbSIsImdvdHBhbnRoZW9uLmNvbSIsInBhbnRoZW9uc2l0ZS5pbyIsIioucGF5d2hpcmwuY29tIiwiKi54'@;
put 'bWl0LmNvIiwieG1pdC5kZXYiLCJtYWRldGhpcy5zaXRlIiwic3J2LnVzIiwiZ2guc3J2LnVzIiwiZ2wuc3J2LnVzIiwibGszLnJ1IiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsIm9uLXdlYi5mciIsIioudXBzdW4uYXBwIiwidXBzdW5hcHAuY29tIiwiZW50LnBsYXRmb3JtLnNo'@;
put 'IiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGxleS5nYW1lcyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1l'@;
put 'Y2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0'@;
put 'bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29tIiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsIm15cW5hcGNsb3VkLmNuIiwiYWxwaGEtbXlxbmFwY2xvdWQuY29tIiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsIm15Y2xvdWRuYXMuY29t'@;
put 'IiwibXluYXNjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwibGFkZXNrLmNvbSIsInFidXNlci5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6'@;
put 'ZS5uZXQiLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJteXJhZHdlYi5uZXQiLCJzZXJ2ZXJuYW1lLnVzIiwid2ViLmluIiwiaW4ubmV0IiwibXlyZGJ4LmlvIiwic2l0ZS5yYi1ob3N0aW5nLmlvIiwiKi5vbi1yYW5jaGVyLmNsb3VkIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJpby5pbyIsInJhdnBh'@;
put 'Z2UuY28uaWwiLCJyZWFkdGhlZG9jcy1ob3N0ZWQuY29tIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImluc3RhbmNlcy5zcGF3bi5jYyIsIm9ucmVuZGVyLmNvbSIsImFwcC5yZW5kZXIuY29tIiwicmVwbGl0LmFwcCIsImlkLnJlcGxpdC5hcHAiLCJmaXJld2FsbGVkcmVwbGl0'@;
put 'LmNvIiwiaWQuZmlyZXdhbGxlZHJlcGxpdC5jbyIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbGl0LmRldiIsImFyY2hlci5yZXBsaXQuZGV2IiwiYm9uZXMucmVwbGl0LmRldiIsImNhbmFyeS5yZXBsaXQuZGV2IiwiZ2xvYmFsLnJlcGxpdC5kZXYiLCJoYWNrZXIucmVwbGl0LmRldiIs'@;
put 'ImlkLnJlcGxpdC5kZXYiLCJqYW5ld2F5LnJlcGxpdC5kZXYiLCJraW0ucmVwbGl0LmRldiIsImtpcmEucmVwbGl0LmRldiIsImtpcmsucmVwbGl0LmRldiIsIm9kby5yZXBsaXQuZGV2IiwicGFyaXMucmVwbGl0LmRldiIsInBpY2FyZC5yZXBsaXQuZGV2IiwicGlrZS5yZXBsaXQuZGV2Iiwi'@;
put 'cHJlcmVsZWFzZS5yZXBsaXQuZGV2IiwicmVlZC5yZXBsaXQuZGV2IiwicmlrZXIucmVwbGl0LmRldiIsInNpc2tvLnJlcGxpdC5kZXYiLCJzcG9jay5yZXBsaXQuZGV2Iiwic3RhZ2luZy5yZXBsaXQuZGV2Iiwic3VsdS5yZXBsaXQuZGV2IiwidGFycGl0LnJlcGxpdC5kZXYiLCJ0ZWFtcy5y'@;
put 'ZXBsaXQuZGV2IiwidHVja2VyLnJlcGxpdC5kZXYiLCJ3ZXNsZXkucmVwbGl0LmRldiIsIndvcmYucmVwbGl0LmRldiIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIsImh6Yy5pbyIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwi'@;
put 'YXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwicnViLmRlIiwicnVoci11bmktYm9jaHVtLmRlIiwiaW8ubm9jLnJ1aHItdW5pLWJvY2h1bS5kZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJc'@;
put 'dTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwi'@;
put 'XHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1'@;
put 'MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCJyYXMucnUiLCJueWF0LmFwcCIsIjE4MHIuY29tIiwiZG9qaW4uY29tIiwic2FrdXJhdGFuLmNvbSIsInNha3VyYXdlYi5jb20iLCJ4MC5jb20iLCIyLWQuanAiLCJib25hLmpwIiwiY3JhcC5qcCIsImRheW5p'@;
put 'Z2h0LmpwIiwiZWVrLmpwIiwiZmxvcC5qcCIsImhhbGZtb29uLmpwIiwiamVlei5qcCIsIm1hdHJpeC5qcCIsIm1pbW96YS5qcCIsIml2b3J5Lm5lLmpwIiwibWFpbC1ib3gubmUuanAiLCJtaW50cy5uZS5qcCIsIm1va3VyZW4ubmUuanAiLCJvcGFsLm5lLmpwIiwic2FrdXJhLm5lLmpwIiwi'@;
put 'c3Vtb21vLm5lLmpwIiwidG9wYXoubmUuanAiLCJuZXRnYW1lcnMuanAiLCJueWFudGEuanAiLCJvMG8wLmpwIiwicmR5LmpwIiwicmdyLmpwIiwicnVsZXouanAiLCJzMy5pc2swMS5zYWt1cmFzdG9yYWdlLmpwIiwiczMuaXNrMDIuc2FrdXJhc3RvcmFnZS5qcCIsInNhbG9vbi5qcCIsInNi'@;
put 'bG8uanAiLCJza3IuanAiLCJ0YW5rLmpwIiwidWgtb2guanAiLCJ1bmRvLmpwIiwicnMud2ViYWNjZWwuanAiLCJ1c2VyLndlYmFjY2VsLmpwIiwid2Vic296YWkuanAiLCJ4aWkuanAiLCJzcXVhcmVzLm5ldCIsImpwbi5vcmciLCJraXJhcmEuc3QiLCJ4MC50byIsImZyb20udHYiLCJzYWt1'@;
put 'cmEudHYiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsIiouMDAxLnRlc3QuY29kZS1idWlsZGVyLXN0Zy5wbGF0Zm9ybS5zYWxlc2ZvcmNlLmNvbSIsIiouZC5jcm0uZGV2IiwiKi53LmNybS5kZXYiLCIqLndh'@;
put 'LmNybS5kZXYiLCIqLndiLmNybS5kZXYiLCIqLndjLmNybS5kZXYiLCIqLndkLmNybS5kZXYiLCIqLndlLmNybS5kZXYiLCIqLndmLmNybS5kZXYiLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5jb20iLCJsb2dvaXAuZGUiLCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIu'@;
put 'YmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJjb2NrcGl0LmZyLXBhci5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFyLnNjdy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMu'@;
put 'azhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQiLCJwdWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQi'@;
put 'LCJjb2NrcGl0Lm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNjdy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiY29ja3BpdC5w'@;
put 'bC13YXcuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdhdy5zY3cuY2xvdWQiLCJzY2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xv'@;
put 'dWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImNsaWVudC5zY3J5cHRlZC5pbyIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1y'@;
put 'b3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQiLCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnkuc3RvcmUiLCJtaW5pc2l0ZS5tcyIsInNlbnNlZXJpbmcubmV0Iiwic2Vy'@;
put 'dmVib2x0LmNsb3VkIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsImFzLnNoLmNuIiwic2hlZXp5LmdhbWVzIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRzaXRlLmNvbSIsInNob3B3YXJlLnNob3AiLCJzaG9wd2FyZS5zdG9yZSIs'@;
put 'Im1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0Iiwic21hbGwtd2ViLm9yZyIsImFlcm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hp'@;
put 'cnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsInZwNC5tZSIsIiouc25vd2ZsYWtlLmFwcCIsIioucHJpdmF0ZWxpbmsuc25vd2Zs'@;
put 'YWtlLmFwcCIsInN0cmVhbWxpdC5hcHAiLCJzdHJlYW1saXRhcHAuY29tIiwidHJ5LXNub3dwbG93LmNvbSIsIm1hZmVsby5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJzcmh0LnNpdGUiLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiaW5kLm1vbSIs'@;
put 'ImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIsIm15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3AuY2giLCJteXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJl'@;
put 'YWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZpIiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5ldCIsIm15c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFk'@;
put 'c2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51ayIsInctY29ycC1zdGF0aWNibGl0ei5jb20iLCJ3LWNyZWRlbnRpYWxsZXNzLXN0YXRpY2JsaXR6LmNvbSIsInctc3RhdGljYmxpdHouY29tIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwicnVucy5vbnN0YWNr'@;
put 'aXQuY2xvdWQiLCJzdGFja2l0LmdnIiwic3RhY2tpdC5yb2NrcyIsInN0YWNraXQucnVuIiwic3RhY2tpdC56b25lIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwiYXBpLnN0ZGxpYi5jb20iLCJmZWVkYmFjay5hYyIsImZvcm1zLmFjIiwiYXNzZXNzbWVudHMuY3giLCJjYWxjdWxh'@;
put 'dG9ycy5jeCIsImZ1bm5lbHMuY3giLCJwYXlub3cuY3giLCJxdWl6emVzLmN4IiwicmVzZWFyY2hlZC5jeCIsInRlc3RzLmN4Iiwic3VydmV5cy5zbyIsInN0b3JlYmFzZS5zdG9yZSIsInN0b3JpcHJlc3MuYXBwIiwic3RvcmouZmFybSIsInN0cmFwaWFwcC5jb20iLCJtZWRpYS5zdHJhcGlh'@;
put 'cHAuY29tIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5qcy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0Iiwic3RyZWFrLWxpbmsuY29tIiwic3RyZWFrbGlua3MuY29tIiwic3RyZWFrdXNlcmNvbnRlbnQuY29t'@;
put 'Iiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInV0d2VudGUuaW8iLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3luY2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFz'@;
put 'LmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwiZGlyZWN0'@;
put 'LnF1aWNrY29ubmVjdC50byIsInZwbnBsdXMudG8iLCJteXRhYml0LmNvbSIsIm15dGFiaXQuY28uaWwiLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsInRzLm5ldCIsIiouYy50cy5uZXQiLCJnZGEucGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3Bv'@;
put 'dC5wbCIsInRhdmV1c2VyY29udGVudC5jb20iLCJwLnRhd2suZW1haWwiLCJwLnRhd2t0by5lbWFpbCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBwIiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCIqLmZpcmVuZXQu'@;
put 'Y2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIs'@;
put 'ImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBh'@;
put 'Z2VzLnRvcnByb2plY3QubmV0IiwidG93bm5ld3Mtc3RhZ2luZy5jb20iLCIxMmhwLmF0IiwiMml4LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1hLWNpdHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIx'@;
put 'MmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVzIiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJhbnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1Iiwic2l0ZS50cmFuc2lwLm1l'@;
put 'IiwiKi50cmFuc3VybC5ubCIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRp'@;
put 'c2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJkaXNrc3RhdGlvbi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwiKi51YmVyc3BhY2UuZGUiLCJ1YmVyLnNwYWNlIiwiaGsuY29tIiwiaW5jLmhrIiwibHRkLmhrIiwiaGsub3Jn'@;
put 'IiwiaXQuY29tIiwidW5pc29uLXNlcnZpY2VzLmNsb3VkIiwidmlydHVhbC11c2VyLmRlIiwidmlydHVhbHVzZXIuZGUiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwib3JnLnl0IiwicnMuYmEiLCJiaWVsc2tvLnBsIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5z'@;
put 'dXBkYXRlLmluZm8iLCJ1cy5vcmciLCJ2LnVhIiwiZXhwcmVzcy52YWwucnVuIiwid2ViLnZhbC5ydW4iLCJ2ZXJjZWwuYXBwIiwidjAuYnVpbGQiLCJ2ZXJjZWwuZGV2IiwidnVzZXJjb250ZW50Lm5ldCIsIm5vdy5zaCIsIjIwMzguaW8iLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5p'@;
put 'bmZvIiwidm9vcmxvcGVyLmNsb3VkIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5jb20iLCJ3ZWJmbG93LmlvIiwid2ViZmxvd3Rlc3QuaW8iLCIqLndlYmhhcmUuZGV2IiwiYm9va29ubGluZS5hcHAiLCJob3RlbHdpdGhmbGlnaHQuY29tIiwicmVzZXJ2ZS1vbmxpbmUuY29t'@;
put 'IiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwiY3ByYXBpZC5jb20iLCJwbGVza25zLmNvbSIsIndwMi5ob3N0IiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsIndwc3F1YXJlZC5zaXRlIiwiKi53YWRsLnRvcCIsInJlbW90ZXdkLmNvbSIsImJveC5jYSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsInRv'@;
put 'b2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsIndtZmxhYnMub3JnIiwid2RoLmFwcCIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwid2l4c2l0ZS5jb20iLCJ3aXhzdHVkaW8uY29tIiwiZWRpdG9yeC5pbyIsIndpeHN0dWRpby5pbyIsIndpeC5ydW4iLCJtZXNzd2l0aGRucy5jb20i'@;
put 'LCJ3b2x0bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZmaW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIs'@;
put 'IndlZWtseWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJheS5jb20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3Bh'@;
put 'Y2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInlvbWJvLm1lIiwieW5oLmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9y'@;
put 'ZyIsInphcC5jbG91ZCIsInplYWJ1ci5hcHAiLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0ucmVkdWNlKChaLFgpPT57Y29uc3QgUT1YLnJlcGxhY2UoL14oXCpcLnxcISkvLCIiKSxxPXcudG9BU0NJSShRKSx0'@;
put 'ZT1YLmNoYXJBdCgwKTtpZihaLmhhcyhxKSl0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlIHJ1bGVzIGZvdW5kIGZvciAke1h9ICgke3F9KWApO3JldHVybiBaLnNldChxLHtydWxlOlgsc3VmZml4OlEscHVueVN1ZmZpeDpxLHdpbGRjYXJkOiIqIj09PXRlLGV4Y2VwdGlvbjoiISI9PT10ZX0p'@;
put 'LFp9LG5ldyBNYXApLGo9e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWlu'@;
put 'IG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVMX1RPT19MT05HOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFy'@;
put 'cyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3Ig'@;
put 'ZGFzaGVzLiJ9LEw9Wj0+e2lmKCJzdHJpbmciIT10eXBlb2YgWil0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO2xldCBYPVouc2xpY2UoMCkudG9Mb3dlckNhc2UoKTsiLiI9PT1YLmNoYXJBdChYLmxlbmd0aC0xKSYmKFg9WC5zbGljZSgwLFgu'@;
put 'bGVuZ3RoLTEpKTtjb25zdCBRPShaPT57Y29uc3QgWD13LnRvQVNDSUkoWik7aWYoWC5sZW5ndGg8MSlyZXR1cm4iRE9NQUlOX1RPT19TSE9SVCI7aWYoWC5sZW5ndGg+MjU1KXJldHVybiJET01BSU5fVE9PX0xPTkciO2NvbnN0IFE9WC5zcGxpdCgiLiIpO2xldCBxO2ZvcihsZXQgdGU9MDt0'@;
put 'ZTxRLmxlbmd0aDsrK3RlKXtpZihxPVFbdGVdLCFxLmxlbmd0aClyZXR1cm4iTEFCRUxfVE9PX1NIT1JUIjtpZihxLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9PX0xPTkciO2lmKCItIj09PXEuY2hhckF0KDApKXJldHVybiJMQUJFTF9TVEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9PT1xLmNo'@;
put 'YXJBdChxLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5EU19XSVRIX0RBU0giO2lmKCEvXlthLXowLTlcLV9dKyQvLnRlc3QocSkpcmV0dXJuIkxBQkVMX0lOVkFMSURfQ0hBUlMifX0pKFgpO2lmKFEpcmV0dXJue2lucHV0OlosZXJyb3I6e21lc3NhZ2U6altRXSxjb2RlOlF9fTtjb25zdCBx'@;
put 'PXtpbnB1dDpaLHRsZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0sdGU9WC5zcGxpdCgiLiIpO2lmKCJsb2NhbCI9PT10ZVt0ZS5sZW5ndGgtMV0pcmV0dXJuIHE7Y29uc3QgaWU9KCk9PigveG4tLS8udGVzdChYKSYmKHEuZG9tYWluJiYocS5k'@;
put 'b21haW49dy50b0FTQ0lJKHEuZG9tYWluKSkscS5zdWJkb21haW4mJihxLnN1YmRvbWFpbj13LnRvQVNDSUkocS5zdWJkb21haW4pKSkscSksc2U9KFo9Pntjb25zdCBYPXcudG9BU0NJSShaKS5zcGxpdCgiLiIpO2ZvcihsZXQgUT0wO1E8WC5sZW5ndGg7USsrKXtjb25zdCBxPVguc2xpY2Uo'@;
put 'USkuam9pbigiLiIpLHRlPUguZ2V0KHEpO2lmKHRlKXJldHVybiB0ZX1yZXR1cm4gbnVsbH0pKFgpO2lmKCFzZSlyZXR1cm4gdGUubGVuZ3RoPDI/cToocS50bGQ9dGUucG9wKCkscS5zbGQ9dGUucG9wKCkscS5kb21haW49W3Euc2xkLHEudGxkXS5qb2luKCIuIiksdGUubGVuZ3RoJiYocS5z'@;
put 'dWJkb21haW49dGUucG9wKCkpLGllKCkpO3EubGlzdGVkPSEwO2NvbnN0IGdlPXNlLnN1ZmZpeC5zcGxpdCgiLiIpLF9lPXRlLnNsaWNlKDAsdGUubGVuZ3RoLWdlLmxlbmd0aCk7cmV0dXJuIHNlLmV4Y2VwdGlvbiYmX2UucHVzaChnZS5zaGlmdCgpKSxxLnRsZD1nZS5qb2luKCIuIiksIV9l'@;
put 'Lmxlbmd0aHx8KHNlLndpbGRjYXJkJiYoZ2UudW5zaGlmdChfZS5wb3AoKSkscS50bGQ9Z2Uuam9pbigiLiIpKSwhX2UubGVuZ3RoKXx8KHEuc2xkPV9lLnBvcCgpLHEuZG9tYWluPVtxLnNsZCxxLnRsZF0uam9pbigiLiIpLF9lLmxlbmd0aCYmKHEuc3ViZG9tYWluPV9lLmpvaW4oIi4iKSkp'@;
put 'LGllKCl9LFk9Wj0+WiYmTChaKS5kb21haW58fG51bGwsQj1aPT57Y29uc3QgWD1MKFopO3JldHVybiEoIVguZG9tYWlufHwhWC5saXN0ZWQpfTtKLmRlZmF1bHQ9e3BhcnNlOkwsZ2V0OlksaXNWYWxpZDpCfSxKLmVycm9yQ29kZXM9aixKLmdldD1ZLEouaXNWYWxpZD1CLEoucGFyc2U9TH0s'@;
put 'NDk0NjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJp'@;
put 'diI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6'@;
put 'IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBl'@;
put 'IjoiYmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTkyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7'@;
put 'ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoi'@;
put 'QUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtl'@;
put 'eSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1'@;
put 'NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2'@;
put 'IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwi'@;
put 'bW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9G'@;
put 'QiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUi'@;
put 'OiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0s'@;
put 'ImFlcy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sNTIwNzpjZT0+'@;
put 'eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVj'@;
put 'ZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEw'@;
put 'NTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlk'@;
put 'IjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24i'@;
put 'Onsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1'@;
put 'MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNk'@;
put 'c2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hh'@;
put 'NTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hB'@;
put 'MjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYi'@;
put 'Onsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEy'@;
put 'Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNB'@;
put 'Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhS'@;
put 'U0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEw'@;
put 'In19Jyl9LDEzMDg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4z'@;
put 'LjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwzMjA4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJPX1JET05MWSI6MCwiT19XUk9OTFkiOjEsIk9fUkRXUiI6MiwiU19JRk1UIjo2MTQ0MCwiU19JRlJFRyI6MzI3NjgsIlNfSUZE'@;
put 'SVIiOjE2Mzg0LCJTX0lGQ0hSIjo4MTkyLCJTX0lGQkxLIjoyNDU3NiwiU19JRklGTyI6NDA5NiwiU19JRkxOSyI6NDA5NjAsIlNfSUZTT0NLIjo0OTE1MiwiT19DUkVBVCI6NTEyLCJPX0VYQ0wiOjIwNDgsIk9fTk9DVFRZIjoxMzEwNzIsIk9fVFJVTkMiOjEwMjQsIk9fQVBQRU5EIjo4LCJP'@;
put 'X0RJUkVDVE9SWSI6MTA0ODU3NiwiT19OT0ZPTExPVyI6MjU2LCJPX1NZTkMiOjEyOCwiT19TWU1MSU5LIjoyMDk3MTUyLCJPX05PTkJMT0NLIjo0LCJTX0lSV1hVIjo0NDgsIlNfSVJVU1IiOjI1NiwiU19JV1VTUiI6MTI4LCJTX0lYVVNSIjo2NCwiU19JUldYRyI6NTYsIlNfSVJHUlAiOjMy'@;
put 'LCJTX0lXR1JQIjoxNiwiU19JWEdSUCI6OCwiU19JUldYTyI6NywiU19JUk9USCI6NCwiU19JV09USCI6MiwiU19JWE9USCI6MSwiRTJCSUciOjcsIkVBQ0NFUyI6MTMsIkVBRERSSU5VU0UiOjQ4LCJFQUREUk5PVEFWQUlMIjo0OSwiRUFGTk9TVVBQT1JUIjo0NywiRUFHQUlOIjozNSwiRUFM'@;
put 'UkVBRFkiOjM3LCJFQkFERiI6OSwiRUJBRE1TRyI6OTQsIkVCVVNZIjoxNiwiRUNBTkNFTEVEIjo4OSwiRUNISUxEIjoxMCwiRUNPTk5BQk9SVEVEIjo1MywiRUNPTk5SRUZVU0VEIjo2MSwiRUNPTk5SRVNFVCI6NTQsIkVERUFETEsiOjExLCJFREVTVEFERFJSRVEiOjM5LCJFRE9NIjozMywi'@;
put 'RURRVU9UIjo2OSwiRUVYSVNUIjoxNywiRUZBVUxUIjoxNCwiRUZCSUciOjI3LCJFSE9TVFVOUkVBQ0giOjY1LCJFSURSTSI6OTAsIkVJTFNFUSI6OTIsIkVJTlBST0dSRVNTIjozNiwiRUlOVFIiOjQsIkVJTlZBTCI6MjIsIkVJTyI6NSwiRUlTQ09OTiI6NTYsIkVJU0RJUiI6MjEsIkVMT09Q'@;
put 'Ijo2MiwiRU1GSUxFIjoyNCwiRU1MSU5LIjozMSwiRU1TR1NJWkUiOjQwLCJFTVVMVElIT1AiOjk1LCJFTkFNRVRPT0xPTkciOjYzLCJFTkVURE9XTiI6NTAsIkVORVRSRVNFVCI6NTIsIkVORVRVTlJFQUNIIjo1MSwiRU5GSUxFIjoyMywiRU5PQlVGUyI6NTUsIkVOT0RBVEEiOjk2LCJFTk9E'@;
put 'RVYiOjE5LCJFTk9FTlQiOjIsIkVOT0VYRUMiOjgsIkVOT0xDSyI6NzcsIkVOT0xJTksiOjk3LCJFTk9NRU0iOjEyLCJFTk9NU0ciOjkxLCJFTk9QUk9UT09QVCI6NDIsIkVOT1NQQyI6MjgsIkVOT1NSIjo5OCwiRU5PU1RSIjo5OSwiRU5PU1lTIjo3OCwiRU5PVENPTk4iOjU3LCJFTk9URElS'@;
put 'IjoyMCwiRU5PVEVNUFRZIjo2NiwiRU5PVFNPQ0siOjM4LCJFTk9UU1VQIjo0NSwiRU5PVFRZIjoyNSwiRU5YSU8iOjYsIkVPUE5PVFNVUFAiOjEwMiwiRU9WRVJGTE9XIjo4NCwiRVBFUk0iOjEsIkVQSVBFIjozMiwiRVBST1RPIjoxMDAsIkVQUk9UT05PU1VQUE9SVCI6NDMsIkVQUk9UT1RZ'@;
put 'UEUiOjQxLCJFUkFOR0UiOjM0LCJFUk9GUyI6MzAsIkVTUElQRSI6MjksIkVTUkNIIjozLCJFU1RBTEUiOjcwLCJFVElNRSI6MTAxLCJFVElNRURPVVQiOjYwLCJFVFhUQlNZIjoyNiwiRVdPVUxEQkxPQ0siOjM1LCJFWERFViI6MTgsIlNJR0hVUCI6MSwiU0lHSU5UIjoyLCJTSUdRVUlUIjoz'@;
put 'LCJTSUdJTEwiOjQsIlNJR1RSQVAiOjUsIlNJR0FCUlQiOjYsIlNJR0lPVCI6NiwiU0lHQlVTIjoxMCwiU0lHRlBFIjo4LCJTSUdLSUxMIjo5LCJTSUdVU1IxIjozMCwiU0lHU0VHViI6MTEsIlNJR1VTUjIiOjMxLCJTSUdQSVBFIjoxMywiU0lHQUxSTSI6MTQsIlNJR1RFUk0iOjE1LCJTSUdD'@;
put 'SExEIjoyMCwiU0lHQ09OVCI6MTksIlNJR1NUT1AiOjE3LCJTSUdUU1RQIjoxOCwiU0lHVFRJTiI6MjEsIlNJR1RUT1UiOjIyLCJTSUdVUkciOjE2LCJTSUdYQ1BVIjoyNCwiU0lHWEZTWiI6MjUsIlNJR1ZUQUxSTSI6MjYsIlNJR1BST0YiOjI3LCJTSUdXSU5DSCI6MjgsIlNJR0lPIjoyMywi'@;
put 'U0lHU1lTIjoxMiwiU1NMX09QX0FMTCI6MjE0NzQ4NjcxOSwiU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTiI6MjYyMTQ0LCJTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIjo0MTk0MzA0LCJTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVCI6MzI3NjgsIlNTTF9P'@;
put 'UF9DT09LSUVfRVhDSEFOR0UiOjgxOTIsIlNTTF9PUF9DUllQVE9QUk9fVExTRVhUX0JVRyI6MjE0NzQ4MzY0OCwiU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyI6MjA0OCwiU1NMX09QX0VQSEVNRVJBTF9SU0EiOjAsIlNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1QiOjQs'@;
put 'IlNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUiI6MzIsIlNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUciOjEsIlNTTF9PUF9NU0lFX1NTTFYyX1JTQV9QQURESU5HIjowLCJTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHIjo1MzY4NzA5MTIsIlNTTF9PUF9ORVRTQ0FQRV9DSEFM'@;
put 'TEVOR0VfQlVHIjoyLCJTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRyI6MTA3Mzc0MTgyNCwiU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHIjo4LCJTU0xfT1BfTk9fQ09NUFJFU1NJT04iOjEzMTA3MiwiU1NMX09QX05PX1FVRVJZX01UVSI6NDA5'@;
put 'NiwiU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OIjo2NTUzNiwiU1NMX09QX05PX1NTTHYyIjoxNjc3NzIxNiwiU1NMX09QX05PX1NTTHYzIjozMzU1NDQzMiwiU1NMX09QX05PX1RJQ0tFVCI6MTYzODQsIlNTTF9PUF9OT19UTFN2MSI6NjcxMDg4NjQsIlNT'@;
put 'TF9PUF9OT19UTFN2MV8xIjoyNjg0MzU0NTYsIlNTTF9PUF9OT19UTFN2MV8yIjoxMzQyMTc3MjgsIlNTTF9PUF9QS0NTMV9DSEVDS18xIjowLCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMiI6MCwiU1NMX09QX1NJTkdMRV9ESF9VU0UiOjEwNDg1NzYsIlNTTF9PUF9TSU5HTEVfRUNESF9VU0UiOjUy'@;
put 'NDI4OCwiU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRyI6MTI4LCJTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHIjowLCJTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHIjo1MTIsIlNTTF9PUF9UTFNfRDVfQlVHIjoyNTYsIlNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVH'@;
put 'Ijo4Mzg4NjA4LCJFTkdJTkVfTUVUSE9EX0RTQSI6MiwiRU5HSU5FX01FVEhPRF9ESCI6NCwiRU5HSU5FX01FVEhPRF9SQU5EIjo4LCJFTkdJTkVfTUVUSE9EX0VDREgiOjE2LCJFTkdJTkVfTUVUSE9EX0VDRFNBIjozMiwiRU5HSU5FX01FVEhPRF9DSVBIRVJTIjo2NCwiRU5HSU5FX01FVEhP'@;
put 'RF9ESUdFU1RTIjoxMjgsIkVOR0lORV9NRVRIT0RfU1RPUkUiOjI1NiwiRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTIjo1MTIsIkVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTIjoxMDI0LCJFTkdJTkVfTUVUSE9EX0FMTCI6NjU1MzUsIkVOR0lORV9NRVRIT0RfTk9ORSI6MCwiREhfQ0hF'@;
put 'Q0tfUF9OT1RfU0FGRV9QUklNRSI6MiwiREhfQ0hFQ0tfUF9OT1RfUFJJTUUiOjEsIkRIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1IiOjQsIkRIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1IiOjgsIk5QTl9FTkFCTEVEIjoxLCJSU0FfUEtDUzFfUEFERElORyI6MSwiUlNBX1NTTFYyM19QQURE'@;
put 'SU5HIjoyLCJSU0FfTk9fUEFERElORyI6MywiUlNBX1BLQ1MxX09BRVBfUEFERElORyI6NCwiUlNBX1g5MzFfUEFERElORyI6NSwiUlNBX1BLQ1MxX1BTU19QQURESU5HIjo2LCJQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQiOjIsIlBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEIjo0'@;
put 'LCJQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCI6NiwiRl9PSyI6MCwiUl9PSyI6NCwiV19PSyI6MiwiWF9PSyI6MSwiVVZfVURQX1JFVVNFQUREUiI6NH0nKX0sOTc5OTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoiMDIiLCJwcmltZSI6'@;
put 'ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRj'@;
put 'NDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNj'@;
put 'ZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwNSI6eyJn'@;
put 'ZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4'@;
put 'NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2'@;
put 'MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3'@;
put 'Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0'@;
put 'OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3'@;
put 'MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZm'@;
put 'ZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2'@;
put 'YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBj'@;
put 'MzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQw'@;
put 'NDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIw'@;
put 'MGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0'@;
put 'YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJm'@;
put 'YjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4'@;
put 'MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRl'@;
put 'Y2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4'@;
put 'YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZi'@;
put 'ZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZm'@;
put 'In0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUx'@;
put 'MzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNk'@;
put 'Y2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZh'@;
put 'ZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEy'@;
put 'ZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4'@;
put 'NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1'@;
put 'YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRh'@;
put 'M2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3'@;
put 'ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYy'@;
put 'OTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2Qx'@;
put 'MjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYy'@;
put 'NDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJl'@;
put 'MzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYw'@;
put 'YThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUy'@;
put 'NGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0'@;
put 'ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2'@;
put 'ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4'@;
put 'M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQy'@;
put 'MGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVl'@;
put 'NWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEz'@;
put 'ZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgx'@;
put 'OTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVk'@;
put 'ZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sODU5NzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXtpODoiNi42LjEifX0sMjU2MjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMi4xNi44NDAuMS4xMDEuMy40LjEuMSI6ImFlcy0xMjgtZWNiIiwiMi4x'@;
put 'Ni44NDAuMS4xMDEuMy40LjEuMiI6ImFlcy0xMjgtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMyI6ImFlcy0xMjgtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNCI6ImFlcy0xMjgtY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjEiOiJhZXMtMTkyLWVjYiIsIjIuMTYuODQwLjEu'@;
put 'MTAxLjMuNC4xLjIyIjoiYWVzLTE5Mi1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMyI6ImFlcy0xOTItb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjQiOiJhZXMtMTkyLWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxIjoiYWVzLTI1Ni1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4z'@;
put 'LjQuMS40MiI6ImFlcy0yNTYtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDMiOiJhZXMtMjU2LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0IjoiYWVzLTI1Ni1jZmIifScpfX0sX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fPXt9O2Z1bmN0aW9uIF9fbmVzdGVkX3dlYnBhY2tfcmVx'@;
put 'dWlyZV8yODk0OTI2X18oY2Upe3ZhciBKPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1tjZV07aWYodm9pZCAwIT09SilyZXR1cm4gSi5leHBvcnRzO3ZhciBiPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1tjZV09e2lkOmNlLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNr'@;
put 'X21vZHVsZXNfX1tjZV0uY2FsbChiLmV4cG9ydHMsYixiLmV4cG9ydHMsX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MjZfXyksYi5sb2FkZWQ9ITAsYi5leHBvcnRzfV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTI2X18uZD0oY2UsSik9Pntmb3IodmFyIGIgaW4gSilfX25l'@;
put 'c3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkyNl9fLm8oSixiKSYmIV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTI2X18ubyhjZSxiKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLGIse2VudW1lcmFibGU6ITAsZ2V0OkpbYl19KX0sX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4'@;
put 'OTQ5MjZfXy5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2h7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319'@;
put 'KCksX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MjZfXy5vPShjZSxKKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNlLEopLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTI2X18ucj1jZT0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJp'@;
put 'bmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MjZfXy5ubWQ9Y2U9Pihj'@;
put 'ZS5wYXRocz1bXSxjZS5jaGlsZHJlbnx8KGNlLmNoaWxkcmVuPVtdKSxjZSk7dmFyIF9fbmVzdGVkX3dlYnBhY2tfZXhwb3J0c19fPV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTI2X18oMzYwNyk7cmV0dXJuIF9fbmVzdGVkX3dlYnBhY2tfZXhwb3J0c19ffSkoKSxtb2R1bGUuZXhw'@;
put 'b3J0cz1iKCl9LDU5NDg6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEgpe3JldHVybiBIJiZILl9fZXNNb2R1bGU/SDp7ZGVmYXVsdDpIfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLEouaXNTcGVjaWFsTWlzc2luZz1KLmNob2ljZVZhbGlkYXRvcj1KLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1KLnVybFZhbGlkYXRvcj12b2lkIDA7Y29uc3QgXz1EKGIoMTI5NTQpKTtKLnVybFZhbGlkYXRvcj0oSCxSKT0+ISFfLmRlZmF1bHQuaXNIdHRwVXJpKEgpfHwh'@;
put 'IV8uZGVmYXVsdC5pc0h0dHBzVXJpKEgpfHwiIj09PUh8fFIsSi5jb25maXJtYXRpb25WYWxpZGF0b3I9SD0+ITA9PT1IfHwhMT09PUgsSi5jaG9pY2VWYWxpZGF0b3I9KEgsUixqKT0+SD4wJiZIPD1SfHxqLEouaXNTcGVjaWFsTWlzc2luZz1IPT4oInN0cmluZyIhPXR5cGVvZiBIfHwhSC5p'@;
put 'bmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEgpfSwxMzI0NzooY2UsSik9PnsidXNlIHN0cmljdCI7dmFyIF87Si5ZPXZvaWQgMCwoXz1KLll8fChKLlk9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixfLlNhczk9IlNBUzkiLF8uU2FzanM9'@;
put 'IlNBU0pTIn0sMjUwMDE6KGNlLEopPT57InVzZSBzdHJpY3QiO0ouQz12b2lkIDAsSi5DPShfLHA9MSxOPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PV8pcmV0dXJuIjAgQiI7Xz1fPk4/TjpfO2NvbnN0IEg9cDwwPzA6cCxSPU1hdGguZmxvb3IoTWF0aC5sb2coXykvTWF0aC5sb2coMTAyNCkp'@;
put 'O3JldHVybihfL01hdGgucG93KDEwMjQsUikpLnRvRml4ZWQoSCkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bUl19fSw0MjkyNDpmdW5jdGlvbihjZSl7dmFyIEo9e3ZlcnNpb246IjEuMTUuMCJ9O0pbNDM3XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0'@;
put 'XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFi'@;
put 'Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJc'@;
put 'eGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1'@;
put 'MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhc'@;
put 'dTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1'@;
put 'MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbNjIwXT1mdW5jdGlvbigpe2Zv'@;
put 'cih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI'@;
put 'SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBcdTAxMDVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMDdceGM0XHUwMTA0XHUwMTE4XHUwMTE5XHUwMTQyXHhmNFx4ZjZcdTAxMDZceGZi'@;
put 'XHhmOVx1MDE1YVx4ZDZceGRjXHhhMlx1MDE0MVx4YTVcdTAxNWJcdTAxOTJcdTAxNzlcdTAxN2JceGYzXHhkM1x1MDE0NFx1MDE0M1x1MDE3YVx1MDE3Y1x4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJc'@;
put 'dTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1'@;
put 'NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNi'@;
put 'NVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtw'@;
put 'XT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbNzM3XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJc'@;
put 'eDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThc'@;
put 'dTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAz'@;
put 'YmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJc'@;
put 'dTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1'@;
put 'MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRcdTAzYWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhm'@;
put 'N1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzg1MF09'@;
put 'ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7'@;
put 'PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJc'@;
put 'eGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3'@;
put 'XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4'@;
put 'OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixEPVtdLF89e30s'@;
put 'cD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSls4NTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5c'@;
put 'dlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1'@;
put 'dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQx'@;
put 'XHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1'@;
put 'ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1'@;
put 'MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBc'@;
put 'eGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbODU3XT1mdW5jdGlvbigp'@;
put 'e2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RF'@;
put 'RkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTMxXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx1MDEz'@;
put 'MFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUwMTVlXHUwMTVmXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHUwMTFlXHUwMTFmXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3'@;
put 'XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGJhXHhhYVx4Y2FceGNiXHhjOFx1ZmZmZFx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4'@;
put 'OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx1ZmZmZFx4ZDdceGRhXHhkYlx4ZDlceGVjXHhmZlx4YWZceGI0XHhhZFx4YjFcdWZmZmRceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLEQ9W10sXz17'@;
put 'fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzg2MV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRc'@;
put 'blx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJz'@;
put 'dHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4'@;
put 'YzFceGNkXHhkM1x4ZGFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUy'@;
put 'NTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkw'@;
put 'XHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUy'@;
put 'MDdmXHhiMlx1MjVhMFx4YTAiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzg2NV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4'@;
put 'MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ'@;
put 'WltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUy'@;
put 'MGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTVi'@;
put 'XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUy'@;
put 'NTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1'@;
put 'MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzg2Nl09ZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+'@;
put 'P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFm'@;
put 'XHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUw'@;
put 'NDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVl'@;
put 'XHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUw'@;
put 'NDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEw'@;
put 'XHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbODc0XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgw'@;
put 'NVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2Rl'@;
put 'ZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIw'@;
put 'MTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUw'@;
put 'ZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJk'@;
put 'XHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUw'@;
put 'ZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1'@;
put 'MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSls4OTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc'@;
put 'eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDEw'@;
put 'Y1x4ZmNceGU5XHUwMTBmXHhlNFx1MDEwZVx1MDE2NFx1MDEwZFx1MDExYlx1MDExYVx1MDEzOVx4Y2RcdTAxM2VcdTAxZWFceGM0XHhjMVx4YzlcdTAxN2VcdTAxN2RceGY0XHhmNlx4ZDNcdTAxNmZceGRhXHhmZFx4ZDZceGRjXHUwMTYwXHUwMTNkXHhkZFx1MDE1OFx1MDE2NVx4ZTFceGVk'@;
put 'XHhmM1x4ZmFcdTAxNDhcdTAxNDdcdTAxNmVceGQ0XHUwMTYxXHUwMTU5XHUwMTU1XHUwMTU0XHhiY1x4YTdceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUx'@;
put 'MFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1'@;
put 'MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhc'@;
put 'eGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSls5MzJdPWZ1bmN0aW9u'@;
put 'KCl7dmFyIHAsYj1bXSxEPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4v'@;
put 'MDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjYxXHVmZjYyXHVmZjYzXHVmZjY0XHVmZjY1XHVmZjY2XHVmZjY3XHVmZjY4'@;
put 'XHVmZjY5XHVmZjZhXHVmZjZiXHVmZjZjXHVmZjZkXHVmZjZlXHVmZjZmXHVmZjcwXHVmZjcxXHVmZjcyXHVmZjczXHVmZjc0XHVmZjc1XHVmZjc2XHVmZjc3XHVmZjc4XHVmZjc5XHVmZjdhXHVmZjdiXHVmZjdjXHVmZjdkXHVmZjdlXHVmZjdmXHVmZjgwXHVmZjgxXHVmZjgyXHVmZjgzXHVm'@;
put 'Zjg0XHVmZjg1XHVmZjg2XHVmZjg3XHVmZjg4XHVmZjg5XHVmZjhhXHVmZjhiXHVmZjhjXHVmZjhkXHVmZjhlXHVmZjhmXHVmZjkwXHVmZjkxXHVmZjkyXHVmZjkzXHVmZjk0XHVmZjk1XHVmZjk2XHVmZjk3XHVmZjk4XHVmZjk5XHVmZjlhXHVmZjliXHVmZjljXHVmZjlkXHVmZjllXHVmZjlm'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1swXVtwXV09MCtwLGJbMCtwXT1fWzBdW3BdKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVk'@;
put 'ZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOFx1MzAwOVx1'@;
put 'MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxMFx1MzAxMVx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHVmZmZkXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVc'@;
put 'dWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkz'@;
put 'XHUzMDEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZi'@;
put 'XHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjVlZlx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTI5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEyOV1bcF1dPTMzMDI0K3AsYlszMzAyNCtwXT1fWzEyOV1bcF0pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYx'@;
put 'OFx1ZmYxOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1'@;
put 'ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0'@;
put 'ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1'@;
put 'MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2'@;
put 'N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1'@;
put 'MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzMF1bcF1dPTMzMjgwK3AsYlszMzI4MCtwXT1fWzEzMF1bcF0pO2ZvcihfWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBi'@;
put 'Nlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1'@;
put 'MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1ZmZmZFx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBl'@;
put 'Y1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1'@;
put 'MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNi'@;
put 'NVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzMV1bcF1dPTMzNTM2K3AsYlszMzUzNitwXT1fWzEzMV1bcF0pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQy'@;
put 'Mlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1ZmZmZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0'@;
put 'OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1'@;
put 'MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzMl1bcF1dPTMzNzkyK3AsYlszMzc5MitwXT1fWzEzMl1bcF0pO2ZvcihfWzEz'@;
put 'NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx1MjQ2Zlx1MjQ3MFx1MjQ3'@;
put 'MVx1MjQ3Mlx1MjQ3M1x1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZmZFx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1'@;
put 'MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzM3Ylx1ZmZmZFx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNFx1MzJhNVx1MzJhNlx1MzJh'@;
put 'N1x1MzJhOFx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzNV1bcF1dPTM0NTYwK3AsYlszNDU2MCtwXT1fWzEzNV1b'@;
put 'cF0pO2ZvcihfWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU5Y1x1NTUxNlx1NWEwM1x1'@;
put 'OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIx'@;
put 'Nlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1'@;
put 'NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRi'@;
put 'ZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzNl1bcF1dPTM0ODE2K3AsYlszNDgx'@;
put 'NitwXT1fWzEzNl1bcF0pO2ZvcihfWzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2Fi'@;
put 'YVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1'@;
put 'NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1ZmZmZFx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVm'@;
put 'Nlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1'@;
put 'NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMx'@;
put 'Nlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1'@;
put 'ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0'@;
put 'YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzN11bcF1dPTM1'@;
put 'MDcyK3AsYlszNTA3MitwXT1fWzEzN11bcF0pO2ZvcihfWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4'@;
put 'ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1'@;
put 'NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYlx1ZmZmZFx1NmE3Zlx1NjhiNlx1OWMw'@;
put 'ZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1'@;
put 'ODQzMVx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1Njdk'@;
put 'MVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1'@;
put 'OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIw'@;
put 'OVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtf'@;
put 'WzEzOF1bcF1dPTM1MzI4K3AsYlszNTMyOCtwXT1fWzEzOF1bcF0pO2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2Qw'@;
put 'MFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1'@;
put 'ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1ZmZmZFx1Njcz'@;
put 'ZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1'@;
put 'NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJl'@;
put 'ZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1'@;
put 'NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlk'@;
put 'Mlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM5XVtwXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoRFtfWzEzOV1bcF1dPTM1NTg0K3AsYlszNTU4NCtwXT1fWzEzOV1bcF0pO2ZvcihfWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4'@;
put 'OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1'@;
put 'NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJl'@;
put 'OFx1ZmZmZFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1'@;
put 'NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNi'@;
put 'M1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1'@;
put 'ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3'@;
put 'N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQw'@;
put 'XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0MF1bcF1dPTM1ODQwK3AsYlszNTg0MCtwXT1fWzE0MF1bcF0pO2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1'@;
put 'NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1'@;
put 'NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJm'@;
put 'Y1x1OTVhNFx1OTY0ZFx1ZmZmZFx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1'@;
put 'ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiY1x1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNj'@;
put 'OVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1'@;
put 'NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5'@;
put 'NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMxOVx1NTE4YVx1NTIzN1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0MV0ubGVuZ3RoOysrcCk2'@;
put 'NTUzMyE9PV9bMTQxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0MV1bcF1dPTM2MDk2K3AsYlszNjA5NitwXT1fWzE0MV1bcF0pO2ZvcihfWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJkZlx1NjJmNlx1NjRhZVx1NjRl'@;
put 'Nlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1'@;
put 'OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVh'@;
put 'Zlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1ZmZmZFx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1'@;
put 'NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0Mlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2Fm'@;
put 'YVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1'@;
put 'OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0'@;
put 'Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0Ml0u'@;
put 'bGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0Ml1bcF1dPTM2MzUyK3AsYlszNjM1MitwXT1fWzE0Ml1bcF0pO2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI5N1x1NWMz'@;
put 'MVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1'@;
put 'NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlm'@;
put 'Zlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1ZmZmZFx1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1'@;
put 'OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4'@;
put 'NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1'@;
put 'Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1'@;
put 'N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9'@;
put 'MDtwIT1fWzE0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0M11bcF1dPTM2NjA4K3AsYlszNjYwOCtwXT1fWzE0M11bcF0pO2ZvcihfWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1'@;
put 'NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZj'@;
put 'NVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOFx1ZmZmZFx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1'@;
put 'NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZVx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUz'@;
put 'Zlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1'@;
put 'NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0'@;
put 'OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYVx1ZmZmZFx1ZmZmZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLHA9MDtwIT1fWzE0NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0NF1bcF1dPTM2ODY0K3AsYlszNjg2NCtwXT1fWzE0NF1bcF0pO2ZvcihfWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1'@;
put 'NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0'@;
put 'Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYlx1ZmZmZFx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1'@;
put 'ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRi'@;
put 'M1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1'@;
put 'ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJk'@;
put 'Ylx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0NV1bcF1dPTM3MTIwK3AsYlszNzEyMCtwXT1fWzE0NV1bcF0pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1'@;
put 'NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2'@;
put 'MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1ZmZmZFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1'@;
put 'ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1Njcx'@;
put 'ZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1'@;
put 'NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVh'@;
put 'ZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1'@;
put 'OTAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0Nl1bcF1dPTM3Mzc2K3AsYlszNzM3NitwXT1fWzE0Nl1bcF0pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1'@;
put 'NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNk'@;
put 'Zlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhY1x1ZmZmZFx1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1'@;
put 'Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMFx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAw'@;
put 'Zlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1'@;
put 'NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0'@;
put 'OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1'@;
put 'NjVlNVx1NGU3M1x1NTE2NVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0N11bcF1dPTM3NjMyK3AsYlszNzYzMitwXT1fWzE0N11bcF0pO2ZvcihfWzE0OF09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1'@;
put 'N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlh'@;
put 'Y1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NVx1ZmZmZFx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1'@;
put 'NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFl'@;
put 'OFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1'@;
put 'NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4'@;
put 'M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1'@;
put 'Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0OF1bcF1dPTM3ODg4K3AsYlszNzg4OCtwXT1fWzE0OF1bcF0pO2Zvcihf'@;
put 'WzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1'@;
put 'NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1'@;
put 'Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1ZmZmZFx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1'@;
put 'OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRm'@;
put 'NVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1'@;
put 'NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdh'@;
put 'ZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1'@;
put 'NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0OV1bcF1dPTM4MTQ0K3AsYlszODE0NCtwXT1fWzE0'@;
put 'OV1bcF0pO2ZvcihfWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1'@;
put 'OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgy'@;
put 'Y1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNlx1ZmZmZFx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1'@;
put 'NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MFx1NmYyYlx1ODUxM1x1NTQ3'@;
put 'M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1'@;
put 'NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1Njcy'@;
put 'OFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1'@;
put 'OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1MF1bcF1dPTM4NDAwK3AsYlsz'@;
put 'ODQwMCtwXT1fWzE1MF1bcF0pO2ZvcihfWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1'@;
put 'NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNm'@;
put 'YVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1ZmZmZFx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1'@;
put 'NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4M1x1NzVl'@;
put 'Mlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1'@;
put 'NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYy'@;
put 'YVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1'@;
put 'NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1MV1bcF1d'@;
put 'PTM4NjU2K3AsYlszODY1NitwXT1fWzE1MV1bcF0pO2ZvcihfWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1'@;
put 'NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBk'@;
put 'MVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1'@;
put 'NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTEx'@;
put 'OFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1'@;
put 'NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUyXVtwXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'RFtfWzE1Ml1bcF1dPTM4OTEyK3AsYlszODkxMitwXT1fWzE1Ml1bcF0pO2ZvcihfWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1'@;
put 'NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZk'@;
put 'OFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1ZmZmZFx1'@;
put 'NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3'@;
put 'MVx1NTI4OFx1NTI5MVx1OGZhOFx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1'@;
put 'NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNj'@;
put 'M1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1'@;
put 'NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUzXVtwXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoRFtfWzE1M11bcF1dPTM5MTY4K3AsYlszOTE2OCtwXT1fWzE1M11bcF0pO2ZvcihfWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1'@;
put 'NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5'@;
put 'OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1'@;
put 'NTYzOFx1ZmZmZFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZl'@;
put 'ZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1'@;
put 'NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5'@;
put 'Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1'@;
put 'NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b'@;
put 'MTU0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1NF1bcF1dPTM5NDI0K3AsYlszOTQyNCtwXT1fWzE1NF1bcF0pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1'@;
put 'NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFl'@;
put 'M1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1'@;
put 'NjU4OFx1NWI3YVx1NWI4MFx1ZmZmZFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMy'@;
put 'Mlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1'@;
put 'NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4'@;
put 'NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1'@;
put 'NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NV0ubGVuZ3RoOysr'@;
put 'cCk2NTUzMyE9PV9bMTU1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1NV1bcF1dPTM5NjgwK3AsYlszOTY4MCtwXT1fWzE1NV1bcF0pO2ZvcihfWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVkNlx1NWVlM1x1NWVkZFx1'@;
put 'NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYy'@;
put 'Zlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1'@;
put 'NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MFx1ZmZmZFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2'@;
put 'NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YVx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1'@;
put 'NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1'@;
put 'OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1'@;
put 'NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1'@;
put 'Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1Nl1bcF1dPTM5OTM2K3AsYlszOTkzNitwXT1fWzE1Nl1bcF0pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIxZVx1'@;
put 'NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJm'@;
put 'Zlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1'@;
put 'NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1ZmZmZFx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQw'@;
put 'Zlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1'@;
put 'NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4'@;
put 'Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1'@;
put 'NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LHA9MDtwIT1fWzE1N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1N11bcF1dPTQwMTkyK3AsYls0MDE5MitwXT1fWzE1N11bcF0pO2ZvcihfWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1'@;
put 'OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1'@;
put 'NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1ZmZmZFx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1Njhh'@;
put 'MFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1'@;
put 'NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1Njlk'@;
put 'M1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1'@;
put 'NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhM1x1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1OF1bcF1dPTQwNDQ4K3AsYls0MDQ0OCtwXT1fWzE1OF1bcF0pO2ZvcihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZk'@;
put 'Y1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1'@;
put 'NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZlx1ZmZmZFx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5'@;
put 'Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZVx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1'@;
put 'NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRj'@;
put 'NVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1'@;
put 'NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjY1x1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1OV1bcF1dPTQwNzA0K3AsYls0MDcwNCtwXT1fWzE1OV1bcF0pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZh'@;
put 'NFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1'@;
put 'NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1ZmZmZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4'@;
put 'Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1'@;
put 'NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJm'@;
put 'N1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1'@;
put 'NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRk'@;
put 'NFx1NzNmMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNF1bcF1dPTU3MzQ0K3AsYls1NzM0NCtwXT1fWzIyNF1bcF0pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUy'@;
put 'Y1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1'@;
put 'NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZlx1ZmZmZFx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYy'@;
put 'MFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1'@;
put 'NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1Nzcy'@;
put 'NVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1'@;
put 'NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1Nzhi'@;
put 'Y1x1NzhjNVx1NzhjYVx1NzhlY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNV1bcF1dPTU3NjAwK3AsYls1NzYwMCtwXT1fWzIyNV1bcF0pO2ZvcihfWzIyNl09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3'@;
put 'Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1'@;
put 'N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2FiMFx1ZmZmZFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2Fk'@;
put 'NVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MFx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1'@;
put 'N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2Mx'@;
put 'MVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1'@;
put 'N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2Nl'@;
put 'Zlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNl1bcF1dPTU3ODU2K3AsYls1Nzg1NitwXT1fWzIyNl1bcF0pO2Zv'@;
put 'cihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2'@;
put 'ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1'@;
put 'N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1ZmZmZFx1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1'@;
put 'YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1'@;
put 'N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2Zi'@;
put 'OFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1'@;
put 'ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEw'@;
put 'OVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyN11bcF1dPTU4MTEyK3AsYls1ODExMitwXT1f'@;
put 'WzIyN11bcF0pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4'@;
put 'MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1'@;
put 'ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ZmZmZFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3'@;
put 'MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1'@;
put 'ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNh'@;
put 'OFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1'@;
put 'ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUx'@;
put 'OFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyOF1bcF1dPTU4MzY4K3As'@;
put 'Yls1ODM2OCtwXT1fWzIyOF1bcF0pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5'@;
put 'Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1'@;
put 'NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ZmZmZFx1ODZkZlx1ODZkYlx1ODZlZlx1ODcx'@;
put 'Mlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OVx1'@;
put 'ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgw'@;
put 'ZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1'@;
put 'ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODky'@;
put 'NVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyOV1b'@;
put 'cF1dPTU4NjI0K3AsYls1ODYyNCtwXT1fWzIyOV1bcF0pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4'@;
put 'YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1'@;
put 'OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1ZmZmZFx1OGFlNFx1OGFm'@;
put 'MVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1'@;
put 'OGI1YVx1OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4'@;
put 'Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1'@;
put 'OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRl'@;
put 'M1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMwXVtwXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoRFtfWzIzMF1bcF1dPTU4ODgwK3AsYls1ODg4MCtwXT1fWzIzMF1bcF0pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUy'@;
put 'YVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1'@;
put 'OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1ZmZm'@;
put 'ZFx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1'@;
put 'OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBh'@;
put 'Zlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1'@;
put 'OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIz'@;
put 'Zlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMxXVtwXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoRFtfWzIzMV1bcF1dPTU5MTM2K3AsYls1OTEzNitwXT1fWzIzMV1bcF0pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMz'@;
put 'Ylx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1'@;
put 'OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5'@;
put 'OFx1OTU5OVx1ZmZmZFx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1'@;
put 'OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZVx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZj'@;
put 'ZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1'@;
put 'OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0'@;
put 'Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMl0ubGVuZ3RoOysrcCk2NTUzMyE9'@;
put 'PV9bMjMyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzMl1bcF1dPTU5MzkyK3AsYls1OTM5MitwXT1fWzIzMl1bcF0pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThh'@;
put 'Zlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1'@;
put 'OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0'@;
put 'NVx1OWE0Mlx1OWE0MFx1OWE0M1x1ZmZmZFx1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1'@;
put 'OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmN1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0'@;
put 'ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1'@;
put 'OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNl'@;
put 'Y1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzM10ubGVuZ3Ro'@;
put 'OysrcCk2NTUzMyE9PV9bMjMzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzM11bcF1dPTU5NjQ4K3AsYls1OTY0OCtwXT1fWzIzM11bcF0pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ1ZFx1OWQ1ZVx1OWQ2'@;
put 'NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1'@;
put 'OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVk'@;
put 'ZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1ZmZmZFx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1'@;
put 'OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f'@;
put 'WzIzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzNF1bcF1dPTU5OTA0K3AsYls1OTkwNCtwXT1fWzIzNF1bcF0pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4'@;
put 'YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1'@;
put 'NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRm'@;
put 'Zlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmZmZFx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1'@;
put 'NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2'@;
put 'MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1'@;
put 'Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRm'@;
put 'Mlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLHA9MDtwIT1fWzIzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzN11bcF1dPTYwNjcyK3AsYls2MDY3MitwXT1fWzIzN11bcF0pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1'@;
put 'Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmEx'@;
put 'ZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ZmZmZFx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1'@;
put 'OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1'@;
put 'OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1'@;
put 'OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3'@;
put 'Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzOF1bcF1dPTYwOTI4K3AsYls2MDkyOCtwXT1fWzIzOF1bcF0pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1'@;
put 'MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZj'@;
put 'ZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1ZmZmZFx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1'@;
put 'NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJl'@;
put 'Y1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1'@;
put 'NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2'@;
put 'Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI1MF1bcF1dPTY0ZTMrcCxiWzY0ZTMrcF09X1syNTBdW3BdKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcx'@;
put 'NDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNc'@;
put 'dTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZmZmRcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdk'@;
put 'YTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZc'@;
put 'dWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTky'@;
put 'M2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBc'@;
put 'dTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlh'@;
put 'NGVcdTlhZDlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTFdW3BdXT02NDI1NitwLGJbNjQyNTYrcF09X1syNTFdW3BdKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTJdW3BdXT02NDUxMitwLGJbNjQ1MTIrcF09X1syNTJdW3BdKTtyZXR1cm57ZW5jOkQs'@;
put 'ZGVjOmJ9fSgpLEpbOTM2XT1mdW5jdGlvbigpe3ZhciBwLGI9W10sRD17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFk'@;
put 'XHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMF1bcF1dPTArcCxiWzArcF09X1swXVtwXSk7Zm9yKF9bMTI5XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTA2XHU0ZTBmXHU0ZTEyXHU0ZTE3XHU0ZTFmXHU0ZTIwXHU0ZTIxXHU0ZTIzXHU0ZTI2XHU0ZTI5XHU0ZTJlXHU0ZTJmXHU0ZTMxXHU0ZTMzXHU0ZTM1XHU0ZTM3'@;
put 'XHU0ZTNjXHU0ZTQwXHU0ZTQxXHU0ZTQyXHU0ZTQ0XHU0ZTQ2XHU0ZTRhXHU0ZTUxXHU0ZTU1XHU0ZTU3XHU0ZTVhXHU0ZTViXHU0ZTYyXHU0ZTYzXHU0ZTY0XHU0ZTY1XHU0ZTY3XHU0ZTY4XHU0ZTZhXHU0ZTZiXHU0ZTZjXHU0ZTZkXHU0ZTZlXHU0ZTZmXHU0ZTcyXHU0ZTc0XHU0ZTc1XHU0'@;
put 'ZTc2XHU0ZTc3XHU0ZTc4XHU0ZTc5XHU0ZTdhXHU0ZTdiXHU0ZTdjXHU0ZTdkXHU0ZTdmXHU0ZTgwXHU0ZTgxXHU0ZTgyXHU0ZTgzXHU0ZTg0XHU0ZTg1XHU0ZTg3XHU0ZThhXHVmZmZkXHU0ZTkwXHU0ZTk2XHU0ZTk3XHU0ZTk5XHU0ZTljXHU0ZTlkXHU0ZTllXHU0ZWEzXHU0ZWFhXHU0ZWFm'@;
put 'XHU0ZWIwXHU0ZWIxXHU0ZWI0XHU0ZWI2XHU0ZWI3XHU0ZWI4XHU0ZWI5XHU0ZWJjXHU0ZWJkXHU0ZWJlXHU0ZWM4XHU0ZWNjXHU0ZWNmXHU0ZWQwXHU0ZWQyXHU0ZWRhXHU0ZWRiXHU0ZWRjXHU0ZWUwXHU0ZWUyXHU0ZWU2XHU0ZWU3XHU0ZWU5XHU0ZWVkXHU0ZWVlXHU0ZWVmXHU0ZWYxXHU0'@;
put 'ZWY0XHU0ZWY4XHU0ZWY5XHU0ZWZhXHU0ZWZjXHU0ZWZlXHU0ZjAwXHU0ZjAyXHU0ZjAzXHU0ZjA0XHU0ZjA1XHU0ZjA2XHU0ZjA3XHU0ZjA4XHU0ZjBiXHU0ZjBjXHU0ZjEyXHU0ZjEzXHU0ZjE0XHU0ZjE1XHU0ZjE2XHU0ZjFjXHU0ZjFkXHU0ZjIxXHU0ZjIzXHU0ZjI4XHU0ZjI5XHU0ZjJj'@;
put 'XHU0ZjJkXHU0ZjJlXHU0ZjMxXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlXHU0ZjNmXHU0ZjQwXHU0ZjQxXHU0ZjQyXHU0ZjQ0XHU0ZjQ1XHU0ZjQ3XHU0ZjQ4XHU0ZjQ5XHU0ZjRhXHU0ZjRiXHU0ZjRjXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjYxXHU0ZjYyXHU0ZjY2XHU0'@;
put 'ZjY4XHU0ZjZhXHU0ZjZiXHU0ZjZkXHU0ZjZlXHU0ZjcxXHU0ZjcyXHU0Zjc1XHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjgwXHU0ZjgxXHU0ZjgyXHU0Zjg1XHU0Zjg2XHU0Zjg3XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk1XHU0Zjk2XHU0Zjk4'@;
put 'XHU0Zjk5XHU0ZjlhXHU0ZjljXHU0ZjllXHU0ZjlmXHU0ZmExXHU0ZmEyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTI5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTI5XVtwXV09MzMwMjQrcCxiWzMzMDI0K3BdPV9bMTI5XVtwXSk7Zm9y'@;
put 'KF9bMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwXHU0ZmIxXHU0ZmIyXHU0ZmIzXHU0ZmI0XHU0ZmI2XHU0ZmI3XHU0ZmI4XHU0ZmI5XHU0ZmJhXHU0ZmJiXHU0ZmJjXHU0ZmJkXHU0ZmJl'@;
put 'XHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyXHU0ZmQzXHU0ZmQ0XHU0ZmQ1XHU0ZmQ2XHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0'@;
put 'ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDAyXHU1MDAzXHU1MDA0XHU1MDA1XHU1MDA2XHU1MDA3XHU1MDA4XHU1MDA5XHU1MDBhXHVmZmZkXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1MDE3'@;
put 'XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmXHU1MDMwXHU1MDMxXHU1MDMyXHU1MDMzXHU1MDM0XHU1MDM1XHU1MDM2XHU1MDM3XHU1MDM4XHU1MDM5XHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1'@;
put 'MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU0XHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1MDViXHU1MDVkXHU1MDVlXHU1MDVmXHU1MDYwXHU1MDYxXHU1MDYyXHU1MDYzXHU1MDY0XHU1MDY2XHU1MDY3XHU1MDY4XHU1MDY5'@;
put 'XHU1MDZhXHU1MDZiXHU1MDZkXHU1MDZlXHU1MDZmXHU1MDcwXHU1MDcxXHU1MDcyXHU1MDczXHU1MDc0XHU1MDc1XHU1MDc4XHU1MDc5XHU1MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlXHU1'@;
put 'MDhmXHU1MDkwXHU1MDkxXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk1XHU1MDk2XHU1MDk3XHU1MDk4XHU1MDk5XHU1MDlhXHU1MDliXHU1MDljXHU1MDlkXHU1MDllXHU1MDlmXHU1MGEwXHU1MGExXHU1MGEyXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkXHU1MGFlXHU1MGFmXHU1MGIw'@;
put 'XHU1MGIxXHU1MGIzXHU1MGI0XHU1MGI1XHU1MGI2XHU1MGI3XHU1MGI4XHU1MGI5XHU1MGJjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMwXVtwXV09MzMyODArcCxiWzMzMjgwK3BdPV9b'@;
put 'MTMwXVtwXSk7Zm9yKF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGJkXHU1MGJlXHU1MGJmXHU1MGMwXHU1MGMxXHU1MGMyXHU1MGMzXHU1MGM0XHU1MGM1XHU1MGM2XHU1MGM3XHU1MGM4XHU1MGM5XHU1MGNhXHU1MGNi'@;
put 'XHU1MGNjXHU1MGNkXHU1MGNlXHU1MGQwXHU1MGQxXHU1MGQyXHU1MGQzXHU1MGQ0XHU1MGQ1XHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiXHU1MGRjXHU1MGRkXHU1MGRlXHU1MGRmXHU1MGUwXHU1MGUxXHU1MGUyXHU1MGUzXHU1MGU0XHU1MGU1XHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1'@;
put 'MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2XHU1MGY3XHU1MGY4XHU1MGY5XHU1MGZhXHU1MGZjXHU1MGZkXHU1MGZlXHU1MGZmXHU1MTAwXHU1MTAxXHU1MTAyXHU1MTAzXHU1MTA0XHU1MTA1XHU1MTA4XHVmZmZkXHU1MTA5XHU1MTBhXHU1MTBjXHU1MTBkXHU1MTBlXHU1MTBm'@;
put 'XHU1MTEwXHU1MTExXHU1MTEzXHU1MTE0XHU1MTE1XHU1MTE2XHU1MTE3XHU1MTE4XHU1MTE5XHU1MTFhXHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTFmXHU1MTIwXHU1MTIyXHU1MTIzXHU1MTI0XHU1MTI1XHU1MTI2XHU1MTI3XHU1MTI4XHU1MTI5XHU1MTJhXHU1MTJiXHU1MTJjXHU1'@;
put 'MTJkXHU1MTJlXHU1MTJmXHU1MTMwXHU1MTMxXHU1MTMyXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM2XHU1MTM3XHU1MTM4XHU1MTM5XHU1MTNhXHU1MTNiXHU1MTNjXHU1MTNkXHU1MTNlXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3'@;
put 'XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU1MTVmXHU1MTYwXHU1MTYxXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1'@;
put 'MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlmXHU1MWExXHU1MWEzXHU1MWE2XHU1MWE3XHU1MWE4XHU1MWE5XHU1MWFhXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1'@;
put 'XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyXHU1MWQzXHU1MWQ0XHU1MWQ1XHU1MWQ2XHU1MWQ3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMxXVtwXV09MzM1MzYrcCxi'@;
put 'WzMzNTM2K3BdPV9bMTMxXVtwXSk7Zm9yKF9bMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWQ4XHU1MWQ5XHU1MWRhXHU1MWRjXHU1MWRlXHU1MWRmXHU1MWUyXHU1MWUzXHU1MWU1XHU1MWU2XHU1MWU3XHU1MWU4XHU1MWU5'@;
put 'XHU1MWVhXHU1MWVjXHU1MWVlXHU1MWYxXHU1MWYyXHU1MWY0XHU1MWY3XHU1MWZlXHU1MjA0XHU1MjA1XHU1MjA5XHU1MjBiXHU1MjBjXHU1MjBmXHU1MjEwXHU1MjEzXHU1MjE0XHU1MjE1XHU1MjFjXHU1MjFlXHU1MjFmXHU1MjIxXHU1MjIyXHU1MjIzXHU1MjI1XHU1MjI2XHU1MjI3XHU1'@;
put 'MjJhXHU1MjJjXHU1MjJmXHU1MjMxXHU1MjMyXHU1MjM0XHU1MjM1XHU1MjNjXHU1MjNlXHU1MjQ0XHU1MjQ1XHU1MjQ2XHU1MjQ3XHU1MjQ4XHU1MjQ5XHU1MjRiXHU1MjRlXHU1MjRmXHU1MjUyXHU1MjUzXHU1MjU1XHU1MjU3XHU1MjU4XHVmZmZkXHU1MjU5XHU1MjVhXHU1MjViXHU1MjVk'@;
put 'XHU1MjVmXHU1MjYwXHU1MjYyXHU1MjYzXHU1MjY0XHU1MjY2XHU1MjY4XHU1MjZiXHU1MjZjXHU1MjZkXHU1MjZlXHU1MjcwXHU1MjcxXHU1MjczXHU1Mjc0XHU1Mjc1XHU1Mjc2XHU1Mjc3XHU1Mjc4XHU1Mjc5XHU1MjdhXHU1MjdiXHU1MjdjXHU1MjdlXHU1MjgwXHU1MjgzXHU1Mjg0XHU1'@;
put 'Mjg1XHU1Mjg2XHU1Mjg3XHU1Mjg5XHU1MjhhXHU1MjhiXHU1MjhjXHU1MjhkXHU1MjhlXHU1MjhmXHU1MjkxXHU1MjkyXHU1Mjk0XHU1Mjk1XHU1Mjk2XHU1Mjk3XHU1Mjk4XHU1Mjk5XHU1MjlhXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFlXHU1MmFmXHU1MmIwXHU1MmI0'@;
put 'XHU1MmI1XHU1MmI2XHU1MmI3XHU1MmI4XHU1MmI5XHU1MmJhXHU1MmJiXHU1MmJjXHU1MmJkXHU1MmMwXHU1MmMxXHU1MmMyXHU1MmM0XHU1MmM1XHU1MmM2XHU1MmM4XHU1MmNhXHU1MmNjXHU1MmNkXHU1MmNlXHU1MmNmXHU1MmQxXHU1MmQzXHU1MmQ0XHU1MmQ1XHU1MmQ3XHU1MmQ5XHU1'@;
put 'MmRhXHU1MmRiXHU1MmRjXHU1MmRkXHU1MmRlXHU1MmUwXHU1MmUxXHU1MmUyXHU1MmUzXHU1MmU1XHU1MmU2XHU1MmU3XHU1MmU4XHU1MmU5XHU1MmVhXHU1MmViXHU1MmVjXHU1MmVkXHU1MmVlXHU1MmVmXHU1MmYxXHU1MmYyXHU1MmYzXHU1MmY0XHU1MmY1XHU1MmY2XHU1MmY3XHU1MmY4'@;
put 'XHU1MmZiXHU1MmZjXHU1MmZkXHU1MzAxXHU1MzAyXHU1MzAzXHU1MzA0XHU1MzA3XHU1MzA5XHU1MzBhXHU1MzBiXHU1MzBjXHU1MzBlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMyXVtw'@;
put 'XV09MzM3OTIrcCxiWzMzNzkyK3BdPV9bMTMyXVtwXSk7Zm9yKF9bMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0'@;
put 'XHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmXHU1MzMwXHU1MzMxXHU1MzMyXHU1MzMzXHU1MzM0XHU1MzM1XHU1MzM2XHU1MzM3XHU1MzM4XHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1'@;
put 'MzU0XHU1MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmXHVmZmZkXHU1MzkwXHU1Mzkx'@;
put 'XHU1MzkyXHU1MzkzXHU1Mzk0XHU1Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2FmXHU1M2IwXHU1M2IxXHU1M2IyXHU1M2IzXHU1M2I0XHU1M2I1XHU1M2I3XHU1M2I4XHU1M2I5XHU1'@;
put 'M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzXHU1M2M0XHU1M2M1XHU1M2M2XHU1M2M3XHU1M2NlXHU1M2NmXHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAw'@;
put 'XHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1'@;
put 'NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkXHU1NDVlXHU1NDVmXHU1NDYwXHU1NDYxXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5XHU1NDZhXHU1NDZiXHU1NDZjXHU1NDZkXHU1NDZlXHU1NDZmXHU1NDcwXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgz'@;
put 'XHU1NDg1XHU1NDg3XHU1NDg4XHU1NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzNdW3BdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihEW19bMTMzXVtwXV09MzQwNDgrcCxiWzM0MDQ4K3BdPV9bMTMzXVtwXSk7Zm9yKF9bMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5'@;
put 'XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwXHU1NGUxXHU1NGUyXHU1NGUzXHU1NGU0XHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0XHU1NGY1XHU1NGY2XHU1NGY3XHU1NGY4XHU1NGY5XHU1NGZiXHU1'@;
put 'NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhXHU1NTBiXHU1NTBjXHU1NTBkXHU1NTBlXHU1NTEyXHU1NTEzXHU1NTE1XHU1NTE2XHU1NTE3XHU1NTE4XHU1NTE5XHU1NTFhXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2XHVmZmZk'@;
put 'XHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiXHU1NTRjXHU1NTRkXHU1NTRlXHU1NTRmXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1'@;
put 'NTU3XHU1NTU4XHU1NTU5XHU1NTVhXHU1NTViXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmXHU1NTcwXHU1NTcxXHU1NTcyXHU1NTczXHU1NTc0XHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThk'@;
put 'XHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwXHU1NWExXHU1NWEyXHU1NWEzXHU1NWE0XHU1NWE1XHU1NWE2XHU1NWE4XHU1NWE5XHU1NWFhXHU1NWFiXHU1NWFjXHU1NWFkXHU1NWFlXHU1NWFmXHU1NWIwXHU1NWIyXHU1'@;
put 'NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmXHU1NWMwXHU1NWMxXHU1NWMyXHU1NWMzXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3XHU1NWQ4XHU1NWQ5XHU1NWRhXHU1NWRiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3'@;
put 'XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4XHU1NWY5XHU1NWZhXHU1NWZiXHU1NWZjXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzRdW3BdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihEW19bMTM0XVtwXV09MzQzMDQrcCxiWzM0MzA0K3BdPV9bMTM0XVtwXSk7Zm9yKF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjA2XHU1NjA3XHU1NjBhXHU1NjBiXHU1NjBkXHU1NjEwXHU1NjEx'@;
put 'XHU1NjEyXHU1NjEzXHU1NjE0XHU1NjE1XHU1NjE2XHU1NjE3XHU1NjE5XHU1NjFhXHU1NjFjXHU1NjFkXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1NjI2XHU1NjI4XHU1NjI5XHU1NjJhXHU1NjJiXHU1NjJlXHU1NjJmXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNhXHU1'@;
put 'NjNjXHU1NjNkXHU1NjNlXHU1NjQwXHU1NjQxXHU1NjQyXHU1NjQzXHU1NjQ0XHU1NjQ1XHU1NjQ2XHU1NjQ3XHU1NjQ4XHU1NjQ5XHU1NjRhXHU1NjRiXHU1NjRmXHU1NjUwXHU1NjUxXHU1NjUyXHU1NjUzXHU1NjU1XHU1NjU2XHU1NjVhXHU1NjViXHU1NjVkXHU1NjVlXHU1NjVmXHU1NjYw'@;
put 'XHU1NjYxXHVmZmZkXHU1NjYzXHU1NjY1XHU1NjY2XHU1NjY3XHU1NjZkXHU1NjZlXHU1NjZmXHU1NjcwXHU1NjcyXHU1NjczXHU1Njc0XHU1Njc1XHU1Njc3XHU1Njc4XHU1Njc5XHU1NjdhXHU1NjdkXHU1NjdlXHU1NjdmXHU1NjgwXHU1NjgxXHU1NjgyXHU1NjgzXHU1Njg0XHU1Njg3XHU1'@;
put 'Njg4XHU1Njg5XHU1NjhhXHU1NjhiXHU1NjhjXHU1NjhkXHU1NjkwXHU1NjkxXHU1NjkyXHU1Njk0XHU1Njk1XHU1Njk2XHU1Njk3XHU1Njk4XHU1Njk5XHU1NjlhXHU1NjliXHU1NjljXHU1NjlkXHU1NjllXHU1NjlmXHU1NmEwXHU1NmExXHU1NmEyXHU1NmE0XHU1NmE1XHU1NmE2XHU1NmE3'@;
put 'XHU1NmE4XHU1NmE5XHU1NmFhXHU1NmFiXHU1NmFjXHU1NmFkXHU1NmFlXHU1NmIwXHU1NmIxXHU1NmIyXHU1NmIzXHU1NmI0XHU1NmI1XHU1NmI2XHU1NmI4XHU1NmI5XHU1NmJhXHU1NmJiXHU1NmJkXHU1NmJlXHU1NmJmXHU1NmMwXHU1NmMxXHU1NmMyXHU1NmMzXHU1NmM0XHU1NmM1XHU1'@;
put 'NmM2XHU1NmM3XHU1NmM4XHU1NmM5XHU1NmNiXHU1NmNjXHU1NmNkXHU1NmNlXHU1NmNmXHU1NmQwXHU1NmQxXHU1NmQyXHU1NmQzXHU1NmQ1XHU1NmQ2XHU1NmQ4XHU1NmQ5XHU1NmRjXHU1NmUzXHU1NmU1XHU1NmU2XHU1NmU3XHU1NmU4XHU1NmU5XHU1NmVhXHU1NmVjXHU1NmVlXHU1NmVm'@;
put 'XHU1NmYyXHU1NmYzXHU1NmY2XHU1NmY3XHU1NmY4XHU1NmZiXHU1NmZjXHU1NzAwXHU1NzAxXHU1NzAyXHU1NzA1XHU1NzA3XHU1NzBiXHU1NzBjXHU1NzBkXHU1NzBlXHU1NzBmXHU1NzEwXHU1NzExXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM1XS5sZW5ndGg7KytwKTY1NTMzIT09'@;
put 'X1sxMzVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM1XVtwXV09MzQ1NjArcCxiWzM0NTYwK3BdPV9bMTM1XVtwXSk7Zm9yKF9bMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzEyXHU1NzEzXHU1NzE0XHU1NzE1XHU1NzE2'@;
put 'XHU1NzE3XHU1NzE4XHU1NzE5XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0XHU1NzM1XHU1NzM2XHU1NzM3XHU1NzM4XHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1'@;
put 'NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyXHU1NzUzXHU1NzU0XHU1NzU1XHU1NzU2XHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZlXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdhXHU1Nzdk'@;
put 'XHU1NzdlXHU1NzdmXHU1NzgwXHVmZmZkXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkXHU1NzhlXHU1NzhmXHU1NzkwXHU1NzkxXHU1Nzk0XHU1Nzk1XHU1Nzk2XHU1Nzk3XHU1Nzk4XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4XHU1'@;
put 'N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5XHU1N2JhXHU1N2JiXHU1N2JjXHU1N2JkXHU1N2JlXHU1N2JmXHU1N2MwXHU1N2MxXHU1N2M0XHU1N2M1XHU1N2M2XHU1N2M3XHU1N2M4XHU1N2M5XHU1N2NhXHU1N2NjXHU1N2NkXHU1N2Qw'@;
put 'XHU1N2QxXHU1N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1XHU1N2U2XHU1N2U3XHU1N2U4XHU1N2U5XHU1N2VhXHU1N2ViXHU1N2VjXHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1'@;
put 'N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1'@;
put 'XHU1ODI2XHU1ODI3XHU1ODI4XHU1ODI5XHU1ODJiXHU1ODJjXHU1ODJkXHU1ODJlXHU1ODJmXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2XHU1ODM3XHU1ODM4XHU1ODM5XHU1ODNhXHU1ODNiXHU1ODNjXHU1ODNkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM2XS5sZW5ndGg7'@;
put 'KytwKTY1NTMzIT09X1sxMzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM2XVtwXV09MzQ4MTYrcCxiWzM0ODE2K3BdPV9bMTM2XVtwXSk7Zm9yKF9bMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODNlXHU1ODNmXHU1ODQw'@;
put 'XHU1ODQxXHU1ODQyXHU1ODQzXHU1ODQ1XHU1ODQ2XHU1ODQ3XHU1ODQ4XHU1ODQ5XHU1ODRhXHU1ODRiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5XHU1ODVhXHU1ODViXHU1ODVjXHU1ODVkXHU1ODVmXHU1ODYwXHU1ODYxXHU1ODYyXHU1'@;
put 'ODYzXHU1ODY0XHU1ODY2XHU1ODY3XHU1ODY4XHU1ODY5XHU1ODZhXHU1ODZkXHU1ODZlXHU1ODZmXHU1ODcwXHU1ODcxXHU1ODcyXHU1ODczXHU1ODc0XHU1ODc1XHU1ODc2XHU1ODc3XHU1ODc4XHU1ODc5XHU1ODdhXHU1ODdiXHU1ODdjXHU1ODdkXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2'@;
put 'XHU1ODg3XHU1ODg4XHU1ODhhXHU1ODhiXHU1ODhjXHVmZmZkXHU1ODhkXHU1ODhlXHU1ODhmXHU1ODkwXHU1ODkxXHU1ODk0XHU1ODk1XHU1ODk2XHU1ODk3XHU1ODk4XHU1ODliXHU1ODljXHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGEzXHU1OGE0XHU1OGE1XHU1OGE2XHU1OGE3XHU1'@;
put 'OGFhXHU1OGFiXHU1OGFjXHU1OGFkXHU1OGFlXHU1OGFmXHU1OGIwXHU1OGIxXHU1OGIyXHU1OGIzXHU1OGI0XHU1OGI1XHU1OGI2XHU1OGI3XHU1OGI4XHU1OGI5XHU1OGJhXHU1OGJiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2XHU1OGM3XHU1OGM4'@;
put 'XHU1OGM5XHU1OGNhXHU1OGNiXHU1OGNjXHU1OGNkXHU1OGNlXHU1OGNmXHU1OGQwXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2XHU1OGQ3XHU1OGQ4XHU1OGQ5XHU1OGRhXHU1OGRiXHU1OGRjXHU1OGRkXHU1OGRlXHU1OGRmXHU1OGUwXHU1OGUxXHU1OGUyXHU1OGUzXHU1OGU1XHU1OGU2XHU1'@;
put 'OGU3XHU1OGU4XHU1OGU5XHU1OGVhXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhXHU1OGZiXHU1OGZjXHU1OGZkXHU1OGZlXHU1OGZmXHU1OTAwXHU1OTAxXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4XHU1OTA5XHU1OTBhXHU1OTBiXHU1OTBj'@;
put 'XHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b'@;
put 'MTM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM3XVtwXV09MzUwNzIrcCxiWzM1MDcyK3BdPV9bMTM3XVtwXSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTNk'@;
put 'XHU1OTNlXHU1OTNmXHU1OTQwXHU1OTQzXHU1OTQ1XHU1OTQ2XHU1OTRhXHU1OTRjXHU1OTRkXHU1OTUwXHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1OTVjXHU1OTVkXHU1OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTY0XHU1OTY2XHU1OTY3XHU1OTY4XHU1OTY5XHU1OTZhXHU1OTZiXHU1'@;
put 'OTZjXHU1OTZkXHU1OTZlXHU1OTZmXHU1OTcwXHU1OTcxXHU1OTcyXHU1OTc1XHU1OTc3XHU1OTdhXHU1OTdiXHU1OTdjXHU1OTdlXHU1OTdmXHU1OTgwXHU1OTg1XHU1OTg5XHU1OThiXHU1OThjXHU1OThlXHU1OThmXHU1OTkwXHU1OTkxXHU1OTk0XHU1OTk1XHU1OTk4XHU1OTlhXHU1OTli'@;
put 'XHU1OTljXHU1OTlkXHU1OTlmXHU1OWEwXHU1OWExXHU1OWEyXHU1OWE2XHVmZmZkXHU1OWE3XHU1OWFjXHU1OWFkXHU1OWIwXHU1OWIxXHU1OWIzXHU1OWI0XHU1OWI1XHU1OWI2XHU1OWI3XHU1OWI4XHU1OWJhXHU1OWJjXHU1OWJkXHU1OWJmXHU1OWMwXHU1OWMxXHU1OWMyXHU1OWMzXHU1'@;
put 'OWM0XHU1OWM1XHU1OWM3XHU1OWM4XHU1OWM5XHU1OWNjXHU1OWNkXHU1OWNlXHU1OWNmXHU1OWQ1XHU1OWQ2XHU1OWQ5XHU1OWRiXHU1OWRlXHU1OWRmXHU1OWUwXHU1OWUxXHU1OWUyXHU1OWU0XHU1OWU2XHU1OWU3XHU1OWU5XHU1OWVhXHU1OWViXHU1OWVkXHU1OWVlXHU1OWVmXHU1OWYw'@;
put 'XHU1OWYxXHU1OWYyXHU1OWYzXHU1OWY0XHU1OWY1XHU1OWY2XHU1OWY3XHU1OWY4XHU1OWZhXHU1OWZjXHU1OWZkXHU1OWZlXHU1YTAwXHU1YTAyXHU1YTBhXHU1YTBiXHU1YTBkXHU1YTBlXHU1YTBmXHU1YTEwXHU1YTEyXHU1YTE0XHU1YTE1XHU1YTE2XHU1YTE3XHU1YTE5XHU1YTFhXHU1'@;
put 'YTFiXHU1YTFkXHU1YTFlXHU1YTIxXHU1YTIyXHU1YTI0XHU1YTI2XHU1YTI3XHU1YTI4XHU1YTJhXHU1YTJiXHU1YTJjXHU1YTJkXHU1YTJlXHU1YTJmXHU1YTMwXHU1YTMzXHU1YTM1XHU1YTM3XHU1YTM4XHU1YTM5XHU1YTNhXHU1YTNiXHU1YTNkXHU1YTNlXHU1YTNmXHU1YTQxXHU1YTQy'@;
put 'XHU1YTQzXHU1YTQ0XHU1YTQ1XHU1YTQ3XHU1YTQ4XHU1YTRiXHU1YTRjXHU1YTRkXHU1YTRlXHU1YTRmXHU1YTUwXHU1YTUxXHU1YTUyXHU1YTUzXHU1YTU0XHU1YTU2XHU1YTU3XHU1YTU4XHU1YTU5XHU1YTViXHU1YTVjXHU1YTVkXHU1YTVlXHU1YTVmXHU1YTYwXHVmZmZkIi5zcGxpdCgi'@;
put 'IikscD0wO3AhPV9bMTM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM4XVtwXV09MzUzMjgrcCxiWzM1MzI4K3BdPV9bMTM4XVtwXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiXHU1YTZjXHU1YTZkXHU1YTZlXHU1YTZmXHU1YTcwXHU1YTcxXHU1YTcyXHU1YTczXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwXHU1YTgxXHU1YTgyXHU1YTgzXHU1'@;
put 'YTg0XHU1YTg1XHU1YTg2XHU1YTg3XHU1YTg4XHU1YTg5XHU1YThhXHU1YThiXHU1YThjXHU1YThkXHU1YThlXHU1YThmXHU1YTkwXHU1YTkxXHU1YTkzXHU1YTk0XHU1YTk1XHU1YTk2XHU1YTk3XHU1YTk4XHU1YTk5XHU1YTljXHU1YTlkXHU1YTllXHU1YTlmXHU1YWEwXHU1YWExXHU1YWEy'@;
put 'XHU1YWEzXHU1YWE0XHU1YWE1XHU1YWE2XHU1YWE3XHU1YWE4XHU1YWE5XHU1YWFiXHU1YWFjXHVmZmZkXHU1YWFkXHU1YWFlXHU1YWFmXHU1YWIwXHU1YWIxXHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5XHU1YWJhXHU1YWJiXHU1YWJjXHU1YWJkXHU1YWJmXHU1YWMwXHU1YWMzXHU1YWM0XHU1'@;
put 'YWM1XHU1YWM2XHU1YWM3XHU1YWM4XHU1YWNhXHU1YWNiXHU1YWNkXHU1YWNlXHU1YWNmXHU1YWQwXHU1YWQxXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVhXHU1YWVjXHU1YWVk'@;
put 'XHU1YWVlXHU1YWVmXHU1YWYwXHU1YWYyXHU1YWYzXHU1YWY0XHU1YWY1XHU1YWY2XHU1YWY3XHU1YWY4XHU1YWY5XHU1YWZhXHU1YWZiXHU1YWZjXHU1YWZkXHU1YWZlXHU1YWZmXHU1YjAwXHU1YjAxXHU1YjAyXHU1YjAzXHU1YjA0XHU1YjA1XHU1YjA2XHU1YjA3XHU1YjA4XHU1YjBhXHU1'@;
put 'YjBiXHU1YjBjXHU1YjBkXHU1YjBlXHU1YjBmXHU1YjEwXHU1YjExXHU1YjEyXHU1YjEzXHU1YjE0XHU1YjE1XHU1YjE4XHU1YjE5XHU1YjFhXHU1YjFiXHU1YjFjXHU1YjFkXHU1YjFlXHU1YjFmXHU1YjIwXHU1YjIxXHU1YjIyXHU1YjIzXHU1YjI0XHU1YjI1XHU1YjI2XHU1YjI3XHU1YjI4'@;
put 'XHU1YjI5XHU1YjJhXHU1YjJiXHU1YjJjXHU1YjJkXHU1YjJlXHU1YjJmXHU1YjMwXHU1YjMxXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4XHU1YjM5XHU1YjNhXHU1YjNiXHU1YjNjXHU1YjNkXHU1YjNlXHU1YjNmXHU1YjQxXHU1YjQyXHU1YjQzXHU1YjQ0XHU1YjQ1XHU1YjQ2XHU1YjQ3XHVm'@;
put 'ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM5XVtwXV09MzU1ODQrcCxiWzM1NTg0K3BdPV9bMTM5XVtwXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU1YjQ4XHU1YjQ5XHU1YjRhXHU1YjRiXHU1YjRjXHU1YjRkXHU1YjRlXHU1YjRmXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1'@;
put 'Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJi'@;
put 'XHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmXHVmZmZkXHU1YmQxXHU1YmQ0XHU1YmQ1XHU1YmQ2XHU1YmQ3XHU1YmQ4XHU1YmQ5XHU1YmRhXHU1YmRiXHU1YmRjXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1'@;
put 'YmU5XHU1YmVhXHU1YmViXHU1YmVjXHU1YmVkXHU1YmVmXHU1YmYxXHU1YmYyXHU1YmYzXHU1YmY0XHU1YmY1XHU1YmY2XHU1YmY3XHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEz'@;
put 'XHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1'@;
put 'YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3XHU1YzY4XHU1YzY5XHU1YzZhXHU1YzZiXHU1YzZjXHU1YzZkXHU1YzcwXHU1YzcyXHU1YzczXHU1Yzc0XHU1Yzc1XHU1Yzc2XHU1Yzc3'@;
put 'XHU1Yzc4XHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzXHU1Yzg0XHU1Yzg1XHU1Yzg2XHU1Yzg3XHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkXHU1YzllXHU1YzlmXHU1Y2EwXHU1Y2ExXHU1Y2E0XHU1Y2E1XHU1Y2E2XHU1'@;
put 'Y2E3XHU1Y2E4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQwXVtwXV09MzU4NDArcCxiWzM1ODQwK3BdPV9bMTQwXVtwXSk7Zm9yKF9bMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Y2FhXHU1Y2FlXHU1Y2FmXHU1Y2IwXHU1Y2IyXHU1Y2I0XHU1Y2I2XHU1Y2I5XHU1Y2JhXHU1Y2JiXHU1Y2JjXHU1Y2JlXHU1Y2MwXHU1Y2MyXHU1Y2MzXHU1Y2M1XHU1Y2M2XHU1Y2M3XHU1Y2M4XHU1Y2M5XHU1Y2NhXHU1Y2NjXHU1'@;
put 'Y2NkXHU1Y2NlXHU1Y2NmXHU1Y2QwXHU1Y2QxXHU1Y2QzXHU1Y2Q0XHU1Y2Q1XHU1Y2Q2XHU1Y2Q3XHU1Y2Q4XHU1Y2RhXHU1Y2RiXHU1Y2RjXHU1Y2RkXHU1Y2RlXHU1Y2RmXHU1Y2UwXHU1Y2UyXHU1Y2UzXHU1Y2U3XHU1Y2U5XHU1Y2ViXHU1Y2VjXHU1Y2VlXHU1Y2VmXHU1Y2YxXHU1Y2Yy'@;
put 'XHU1Y2YzXHU1Y2Y0XHU1Y2Y1XHU1Y2Y2XHU1Y2Y3XHU1Y2Y4XHU1Y2Y5XHU1Y2ZhXHU1Y2ZjXHU1Y2ZkXHU1Y2ZlXHU1Y2ZmXHU1ZDAwXHVmZmZkXHU1ZDAxXHU1ZDA0XHU1ZDA1XHU1ZDA4XHU1ZDA5XHU1ZDBhXHU1ZDBiXHU1ZDBjXHU1ZDBkXHU1ZDBmXHU1ZDEwXHU1ZDExXHU1ZDEyXHU1'@;
put 'ZDEzXHU1ZDE1XHU1ZDE3XHU1ZDE4XHU1ZDE5XHU1ZDFhXHU1ZDFjXHU1ZDFkXHU1ZDFmXHU1ZDIwXHU1ZDIxXHU1ZDIyXHU1ZDIzXHU1ZDI1XHU1ZDI4XHU1ZDJhXHU1ZDJiXHU1ZDJjXHU1ZDJmXHU1ZDMwXHU1ZDMxXHU1ZDMyXHU1ZDMzXHU1ZDM1XHU1ZDM2XHU1ZDM3XHU1ZDM4XHU1ZDM5'@;
put 'XHU1ZDNhXHU1ZDNiXHU1ZDNjXHU1ZDNmXHU1ZDQwXHU1ZDQxXHU1ZDQyXHU1ZDQzXHU1ZDQ0XHU1ZDQ1XHU1ZDQ2XHU1ZDQ4XHU1ZDQ5XHU1ZDRkXHU1ZDRlXHU1ZDRmXHU1ZDUwXHU1ZDUxXHU1ZDUyXHU1ZDUzXHU1ZDU0XHU1ZDU1XHU1ZDU2XHU1ZDU3XHU1ZDU5XHU1ZDVhXHU1ZDVjXHU1'@;
put 'ZDVlXHU1ZDVmXHU1ZDYwXHU1ZDYxXHU1ZDYyXHU1ZDYzXHU1ZDY0XHU1ZDY1XHU1ZDY2XHU1ZDY3XHU1ZDY4XHU1ZDZhXHU1ZDZkXHU1ZDZlXHU1ZDcwXHU1ZDcxXHU1ZDcyXHU1ZDczXHU1ZDc1XHU1ZDc2XHU1ZDc3XHU1ZDc4XHU1ZDc5XHU1ZDdhXHU1ZDdiXHU1ZDdjXHU1ZDdkXHU1ZDdl'@;
put 'XHU1ZDdmXHU1ZDgwXHU1ZDgxXHU1ZDgzXHU1ZDg0XHU1ZDg1XHU1ZDg2XHU1ZDg3XHU1ZDg4XHU1ZDg5XHU1ZDhhXHU1ZDhiXHU1ZDhjXHU1ZDhkXHU1ZDhlXHU1ZDhmXHU1ZDkwXHU1ZDkxXHU1ZDkyXHU1ZDkzXHU1ZDk0XHU1ZDk1XHU1ZDk2XHU1ZDk3XHU1ZDk4XHU1ZDlhXHU1ZDliXHU1'@;
put 'ZDljXHU1ZDllXHU1ZDlmXHU1ZGEwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQxXVtwXV09MzYwOTYrcCxiWzM2MDk2K3BdPV9bMTQxXVtwXSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGExXHU1ZGEyXHU1ZGEzXHU1ZGE0XHU1ZGE1XHU1ZGE2XHU1ZGE3XHU1ZGE4XHU1ZGE5XHU1ZGFhXHU1ZGFiXHU1ZGFjXHU1ZGFkXHU1ZGFlXHU1ZGFmXHU1ZGIwXHU1ZGIxXHU1ZGIyXHU1ZGIzXHU1ZGI0XHU1'@;
put 'ZGI1XHU1ZGI2XHU1ZGI4XHU1ZGI5XHU1ZGJhXHU1ZGJiXHU1ZGJjXHU1ZGJkXHU1ZGJlXHU1ZGJmXHU1ZGMwXHU1ZGMxXHU1ZGMyXHU1ZGMzXHU1ZGM0XHU1ZGM2XHU1ZGM3XHU1ZGM4XHU1ZGM5XHU1ZGNhXHU1ZGNiXHU1ZGNjXHU1ZGNlXHU1ZGNmXHU1ZGQwXHU1ZGQxXHU1ZGQyXHU1ZGQz'@;
put 'XHU1ZGQ0XHU1ZGQ1XHU1ZGQ2XHU1ZGQ3XHU1ZGQ4XHU1ZGQ5XHU1ZGRhXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkXHVmZmZkXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4XHU1ZGY5XHU1ZGZhXHU1ZGZiXHU1ZGZjXHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1'@;
put 'ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlXHU1ZTFmXHU1ZTIwXHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTI0XHU1ZTI1XHU1ZTI4XHU1ZTI5XHU1ZTJhXHU1ZTJiXHU1ZTJjXHU1ZTJmXHU1ZTMwXHU1ZTMyXHU1ZTMzXHU1ZTM0XHU1ZTM1'@;
put 'XHU1ZTM2XHU1ZTM5XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2XHU1ZTQ3XHU1ZTQ4XHU1ZTQ5XHU1ZTRhXHU1ZTRiXHU1ZTRkXHU1ZTRlXHU1ZTRmXHU1ZTUwXHU1ZTUxXHU1ZTUyXHU1ZTUzXHU1ZTU2XHU1ZTU3XHU1ZTU4XHU1ZTU5XHU1ZTVhXHU1ZTVjXHU1'@;
put 'ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzXHU1ZTY0XHU1ZTY1XHU1ZTY2XHU1ZTY3XHU1ZTY4XHU1ZTY5XHU1ZTZhXHU1ZTZiXHU1ZTZjXHU1ZTZkXHU1ZTZlXHU1ZTZmXHU1ZTcwXHU1ZTcxXHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5'@;
put 'XHU1ZThjXHU1ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4XHU1ZWE5XHU1ZWFhXHU1ZWFiXHU1ZWFjXHU1ZWFlXHU1ZWFmXHU1ZWIwXHU1ZWIxXHU1ZWIyXHU1ZWI0XHU1ZWJhXHU1ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmXHU1'@;
put 'ZWMwXHU1ZWMxXHU1ZWMyXHU1ZWMzXHU1ZWM0XHU1ZWM1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQyXVtwXV09MzYzNTIrcCxiWzM2MzUyK3BdPV9bMTQyXVtwXSk7Zm9yKF9bMTQzXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiXHU1ZWNjXHU1ZWNkXHU1ZWNlXHU1ZWNmXHU1ZWQwXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjXHU1ZWRkXHU1ZWRlXHU1'@;
put 'ZWRmXHU1ZWUwXHU1ZWUxXHU1ZWUyXHU1ZWUzXHU1ZWU0XHU1ZWU1XHU1ZWU2XHU1ZWU3XHU1ZWU5XHU1ZWViXHU1ZWVjXHU1ZWVkXHU1ZWVlXHU1ZWVmXHU1ZWYwXHU1ZWYxXHU1ZWYyXHU1ZWYzXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3'@;
put 'XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHVmZmZkXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyXHU1ZjMzXHU1ZjM0XHU1ZjM1XHU1'@;
put 'ZjM2XHU1ZjM3XHU1ZjM4XHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxXHU1ZjQyXHU1ZjQzXHU1ZjQ0XHU1ZjQ1XHU1ZjQ2XHU1ZjQ3XHU1ZjQ4XHU1ZjQ5XHU1ZjRhXHU1ZjRiXHU1ZjRjXHU1ZjRkXHU1ZjRlXHU1ZjRmXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVj'@;
put 'XHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1'@;
put 'Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyXHU1ZmEzXHU1ZmE0XHU1ZmE1XHU1ZmE2XHU1ZmE3XHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmIyXHU1ZmIzXHU1ZmI0XHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJl'@;
put 'XHU1ZmJmXHU1ZmMwXHU1ZmMxXHU1ZmMyXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1'@;
put 'ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQzXVtwXV09MzY2MDgrcCxiWzM2NjA4K3BdPV9bMTQzXVtwXSk7'@;
put 'Zm9yKF9bMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDA4XHU2MDA5XHU2MDBiXHU2MDBjXHU2MDEwXHU2MDExXHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFlXHU2MDFmXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJjXHU2'@;
put 'MDJkXHU2MDJlXHU2MDMwXHU2MDMxXHU2MDMyXHU2MDMzXHU2MDM0XHU2MDM2XHU2MDM3XHU2MDM4XHU2MDM5XHU2MDNhXHU2MDNkXHU2MDNlXHU2MDQwXHU2MDQ0XHU2MDQ1XHU2MDQ2XHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRhXHU2MDRjXHU2MDRlXHU2MDRmXHU2MDUxXHU2MDUzXHU2MDU0'@;
put 'XHU2MDU2XHU2MDU3XHU2MDU4XHU2MDViXHU2MDVjXHU2MDVlXHU2MDVmXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZlXHU2MDcxXHU2MDcyXHU2MDc0XHU2MDc1XHU2MDc3XHU2MDdlXHU2MDgwXHVmZmZkXHU2MDgxXHU2MDgyXHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhhXHU2'@;
put 'MDhiXHU2MDhlXHU2MDhmXHU2MDkwXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDljXHU2MDllXHU2MGExXHU2MGEyXHU2MGE0XHU2MGE1XHU2MGE3XHU2MGE5XHU2MGFhXHU2MGFlXHU2MGIwXHU2MGIzXHU2MGI1XHU2MGI2XHU2MGI3XHU2MGI5XHU2MGJhXHU2MGJk'@;
put 'XHU2MGJlXHU2MGJmXHU2MGMwXHU2MGMxXHU2MGMyXHU2MGMzXHU2MGM0XHU2MGM3XHU2MGM4XHU2MGM5XHU2MGNjXHU2MGNkXHU2MGNlXHU2MGNmXHU2MGQwXHU2MGQyXHU2MGQzXHU2MGQ0XHU2MGQ2XHU2MGQ3XHU2MGQ5XHU2MGRiXHU2MGRlXHU2MGUxXHU2MGUyXHU2MGUzXHU2MGU0XHU2'@;
put 'MGU1XHU2MGVhXHU2MGYxXHU2MGYyXHU2MGY1XHU2MGY3XHU2MGY4XHU2MGZiXHU2MGZjXHU2MGZkXHU2MGZlXHU2MGZmXHU2MTAyXHU2MTAzXHU2MTA0XHU2MTA1XHU2MTA3XHU2MTBhXHU2MTBiXHU2MTBjXHU2MTEwXHU2MTExXHU2MTEyXHU2MTEzXHU2MTE0XHU2MTE2XHU2MTE3XHU2MTE4'@;
put 'XHU2MTE5XHU2MTFiXHU2MTFjXHU2MTFkXHU2MTFlXHU2MTIxXHU2MTIyXHU2MTI1XHU2MTI4XHU2MTI5XHU2MTJhXHU2MTJjXHU2MTJkXHU2MTJlXHU2MTJmXHU2MTMwXHU2MTMxXHU2MTMyXHU2MTMzXHU2MTM0XHU2MTM1XHU2MTM2XHU2MTM3XHU2MTM4XHU2MTM5XHU2MTNhXHU2MTNiXHU2'@;
put 'MTNjXHU2MTNkXHU2MTNlXHU2MTQwXHU2MTQxXHU2MTQyXHU2MTQzXHU2MTQ0XHU2MTQ1XHU2MTQ2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ0XVtwXV09MzY4NjQrcCxiWzM2ODY0K3Bd'@;
put 'PV9bMTQ0XVtwXSk7Zm9yKF9bMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTQ3XHU2MTQ5XHU2MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2XHU2MTU3XHU2MTU4XHU2MTU5XHU2MTVhXHU2'@;
put 'MTViXHU2MTVjXHU2MTVlXHU2MTVmXHU2MTYwXHU2MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5XHU2MTZhXHU2MTZiXHU2MTZjXHU2MTZkXHU2MTZlXHU2MTZmXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4XHU2MTc5XHU2MTdhXHU2MTdiXHU2MTdjXHU2MTdk'@;
put 'XHU2MTdlXHU2MTdmXHU2MTgwXHU2MTgxXHU2MTgyXHU2MTgzXHU2MTg0XHU2MTg1XHU2MTg2XHU2MTg3XHU2MTg4XHU2MTg5XHU2MThhXHU2MThjXHU2MThkXHU2MThmXHU2MTkwXHU2MTkxXHU2MTkyXHU2MTkzXHU2MTk1XHVmZmZkXHU2MTk2XHU2MTk3XHU2MTk4XHU2MTk5XHU2MTlhXHU2'@;
put 'MTliXHU2MTljXHU2MTllXHU2MTlmXHU2MWEwXHU2MWExXHU2MWEyXHU2MWEzXHU2MWE0XHU2MWE1XHU2MWE2XHU2MWFhXHU2MWFiXHU2MWFkXHU2MWFlXHU2MWFmXHU2MWIwXHU2MWIxXHU2MWIyXHU2MWIzXHU2MWI0XHU2MWI1XHU2MWI2XHU2MWI4XHU2MWI5XHU2MWJhXHU2MWJiXHU2MWJj'@;
put 'XHU2MWJkXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzXHU2MWM0XHU2MWM1XHU2MWM2XHU2MWM3XHU2MWM5XHU2MWNjXHU2MWNkXHU2MWNlXHU2MWNmXHU2MWQwXHU2MWQzXHU2MWQ1XHU2MWQ2XHU2MWQ3XHU2MWQ4XHU2MWQ5XHU2MWRhXHU2MWRiXHU2MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2'@;
put 'MWUwXHU2MWUxXHU2MWUyXHU2MWUzXHU2MWU0XHU2MWU1XHU2MWU3XHU2MWU4XHU2MWU5XHU2MWVhXHU2MWViXHU2MWVjXHU2MWVkXHU2MWVlXHU2MWVmXHU2MWYwXHU2MWYxXHU2MWYyXHU2MWYzXHU2MWY0XHU2MWY2XHU2MWY3XHU2MWY4XHU2MWY5XHU2MWZhXHU2MWZiXHU2MWZjXHU2MWZk'@;
put 'XHU2MWZlXHU2MjAwXHU2MjAxXHU2MjAyXHU2MjAzXHU2MjA0XHU2MjA1XHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2'@;
put 'MjM1XHU2MjM2XHU2MjM4XHU2MjM5XHU2MjNhXHU2MjNiXHU2MjNjXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ1XVtwXV09MzcxMjAr'@;
put 'cCxiWzM3MTIwK3BdPV9bMTQ1XVtwXSk7Zm9yKF9bMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjXHU2MjVkXHU2MjVlXHU2MjVmXHU2MjYwXHU2'@;
put 'MjYxXHU2MjYyXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiXHU2MjhjXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2Mjk0'@;
put 'XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxXHVmZmZkXHU2MmMzXHU2MmNiXHU2MmNmXHU2'@;
put 'MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEy'@;
put 'XHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzXHU2MzM0XHU2MzM1XHU2MzM2XHU2MzM3XHU2MzM4XHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2'@;
put 'MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2XHU2MzU3XHU2MzU4XHU2MzU5XHU2MzVhXHU2MzViXHU2MzVjXHU2MzVkXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2Mzcz'@;
put 'XHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5XHU2MzlhXHU2MzliXHU2MzljXHU2MzlkXHU2MzllXHU2MzlmXHU2'@;
put 'M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ2'@;
put 'XVtwXV09MzczNzYrcCxiWzM3Mzc2K3BdPV9bMTQ2XVtwXSk7Zm9yKF9bMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2M2MxXHU2M2MyXHU2M2MzXHU2M2M1XHU2M2M3XHU2M2M4XHU2M2NhXHU2M2NiXHU2M2NjXHU2M2QxXHU2'@;
put 'M2QzXHU2M2Q0XHU2M2Q1XHU2M2Q3XHU2M2Q4XHU2M2Q5XHU2M2RhXHU2M2RiXHU2M2RjXHU2M2RkXHU2M2RmXHU2M2UyXHU2M2U0XHU2M2U1XHU2M2U2XHU2M2U3XHU2M2U4XHU2M2ViXHU2M2VjXHU2M2VlXHU2M2VmXHU2M2YwXHU2M2YxXHU2M2YzXHU2M2Y1XHU2M2Y3XHU2M2Y5XHU2M2Zh'@;
put 'XHU2M2ZiXHU2M2ZjXHU2M2ZlXHU2NDAzXHU2NDA0XHU2NDA2XHU2NDA3XHU2NDA4XHU2NDA5XHU2NDBhXHU2NDBkXHU2NDBlXHU2NDExXHU2NDEyXHU2NDE1XHU2NDE2XHU2NDE3XHU2NDE4XHU2NDE5XHU2NDFhXHU2NDFkXHU2NDFmXHU2NDIyXHU2NDIzXHU2NDI0XHVmZmZkXHU2NDI1XHU2'@;
put 'NDI3XHU2NDI4XHU2NDI5XHU2NDJiXHU2NDJlXHU2NDJmXHU2NDMwXHU2NDMxXHU2NDMyXHU2NDMzXHU2NDM1XHU2NDM2XHU2NDM3XHU2NDM4XHU2NDM5XHU2NDNiXHU2NDNjXHU2NDNlXHU2NDQwXHU2NDQyXHU2NDQzXHU2NDQ5XHU2NDRiXHU2NDRjXHU2NDRkXHU2NDRlXHU2NDRmXHU2NDUw'@;
put 'XHU2NDUxXHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2NDU5XHU2NDVhXHU2NDViXHU2NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYyXHU2NDYzXHU2NDY0XHU2NDY1XHU2NDY2XHU2NDY4XHU2NDZhXHU2NDZiXHU2NDZjXHU2NDZlXHU2NDZmXHU2NDcwXHU2NDcxXHU2NDcyXHU2'@;
put 'NDczXHU2NDc0XHU2NDc1XHU2NDc2XHU2NDc3XHU2NDdiXHU2NDdjXHU2NDdkXHU2NDdlXHU2NDdmXHU2NDgwXHU2NDgxXHU2NDgzXHU2NDg2XHU2NDg4XHU2NDg5XHU2NDhhXHU2NDhiXHU2NDhjXHU2NDhkXHU2NDhlXHU2NDhmXHU2NDkwXHU2NDkzXHU2NDk0XHU2NDk3XHU2NDk4XHU2NDlh'@;
put 'XHU2NDliXHU2NDljXHU2NDlkXHU2NDlmXHU2NGEwXHU2NGExXHU2NGEyXHU2NGEzXHU2NGE1XHU2NGE2XHU2NGE3XHU2NGE4XHU2NGFhXHU2NGFiXHU2NGFmXHU2NGIxXHU2NGIyXHU2NGIzXHU2NGI0XHU2NGI2XHU2NGI5XHU2NGJiXHU2NGJkXHU2NGJlXHU2NGJmXHU2NGMxXHU2NGMzXHU2'@;
put 'NGM0XHU2NGM2XHU2NGM3XHU2NGM4XHU2NGM5XHU2NGNhXHU2NGNiXHU2NGNjXHU2NGNmXHU2NGQxXHU2NGQzXHU2NGQ0XHU2NGQ1XHU2NGQ2XHU2NGQ5XHU2NGRhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDddW3BdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihEW19bMTQ3XVtwXV09Mzc2MzIrcCxiWzM3NjMyK3BdPV9bMTQ3XVtwXSk7Zm9yKF9bMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2'@;
put 'NGU3XHU2NGU4XHU2NGU5XHU2NGVhXHU2NGViXHU2NGVjXHU2NGVkXHU2NGVlXHU2NGVmXHU2NGYwXHU2NGYxXHU2NGYyXHU2NGYzXHU2NGY0XHU2NGY1XHU2NGY2XHU2NGY3XHU2NGY4XHU2NGY5XHU2NGZhXHU2NGZiXHU2NGZjXHU2NGZkXHU2NGZlXHU2NGZmXHU2NTAxXHU2NTAyXHU2NTAz'@;
put 'XHU2NTA0XHU2NTA1XHU2NTA2XHU2NTA3XHU2NTA4XHU2NTBhXHU2NTBiXHU2NTBjXHU2NTBkXHU2NTBlXHU2NTBmXHU2NTEwXHU2NTExXHU2NTEzXHU2NTE0XHU2NTE1XHU2NTE2XHU2NTE3XHU2NTE5XHU2NTFhXHU2NTFiXHU2NTFjXHU2NTFkXHU2NTFlXHU2NTFmXHU2NTIwXHU2NTIxXHVm'@;
put 'ZmZkXHU2NTIyXHU2NTIzXHU2NTI0XHU2NTI2XHU2NTI3XHU2NTI4XHU2NTI5XHU2NTJhXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwXHU2NTQxXHU2NTQyXHU2NTQzXHU2NTQ0XHU2NTQ2XHU2NTQ3XHU2NTRhXHU2NTRi'@;
put 'XHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4XHU2'@;
put 'NTc5XHU2NTdhXHU2NTdiXHU2NTdjXHU2NTdkXHU2NTdlXHU2NTdmXHU2NTgwXHU2NTgxXHU2NTgyXHU2NTgzXHU2NTg0XHU2NTg1XHU2NTg2XHU2NTg4XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTll'@;
put 'XHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWI1XHU2NWI2XHU2NWI3XHU2NWI4XHU2NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2'@;
put 'NWQwXHU2NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4XHU2NWQ5XHU2NWRhXHU2NWRiXHU2NWRjXHU2NWRkXHU2NWRlXHU2NWRmXHU2NWUxXHU2NWUzXHU2NWU0XHU2NWVhXHU2NWViXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDhdW3Bd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihEW19bMTQ4XVtwXV09Mzc4ODgrcCxiWzM3ODg4K3BdPV9bMTQ4XVtwXSk7Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2'@;
put 'NWZiXHU2NWZjXHU2NWZkXHU2NWZlXHU2NWZmXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2'@;
put 'XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3XHU2NjM4XHU2NjM5XHU2NjNhXHU2NjNiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQyXHU2NjQ0XHU2NjQ1XHU2NjQ2XHU2NjQ3XHU2NjQ4XHU2NjQ5XHU2NjRhXHU2NjRkXHU2NjRlXHU2NjUwXHU2'@;
put 'NjUxXHU2NjU4XHVmZmZkXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5XHU2NjZhXHU2NjZiXHU2NjZjXHU2NjZkXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2Njdm'@;
put 'XHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4XHU2Njk5XHU2NjlhXHU2NjliXHU2NjljXHU2NjllXHU2NjlmXHU2NmEwXHU2NmExXHU2NmEyXHU2'@;
put 'NmEzXHU2NmE0XHU2NmE1XHU2NmE2XHU2NmE5XHU2NmFhXHU2NmFiXHU2NmFjXHU2NmFkXHU2NmFmXHU2NmIwXHU2NmIxXHU2NmIyXHU2NmIzXHU2NmI1XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmXHU2NmMwXHU2NmMxXHU2NmMyXHU2NmMzXHU2NmM0'@;
put 'XHU2NmM1XHU2NmM2XHU2NmM3XHU2NmM4XHU2NmM5XHU2NmNhXHU2NmNiXHU2NmNjXHU2NmNkXHU2NmNlXHU2NmNmXHU2NmQwXHU2NmQxXHU2NmQyXHU2NmQzXHU2NmQ0XHU2NmQ1XHU2NmQ2XHU2NmQ3XHU2NmQ4XHU2NmRhXHU2NmRlXHU2NmRmXHU2NmUwXHU2NmUxXHU2NmUyXHU2NmUzXHU2'@;
put 'NmU0XHU2NmU1XHU2NmU3XHU2NmU4XHU2NmVhXHU2NmViXHU2NmVjXHU2NmVkXHU2NmVlXHU2NmVmXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ5XS5sZW5ndGg7KytwKTY1NTMz'@;
put 'IT09X1sxNDldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ5XVtwXV09MzgxNDQrcCxiWzM4MTQ0K3BdPV9bMTQ5XVtwXSk7Zm9yKF9bMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzA0XHU2NzA1XHU2NzA2XHU2NzA3XHU2'@;
put 'NzBjXHU2NzBlXHU2NzBmXHU2NzExXHU2NzEyXHU2NzEzXHU2NzE2XHU2NzE4XHU2NzE5XHU2NzFhXHU2NzFjXHU2NzFlXHU2NzIwXHU2NzIxXHU2NzIyXHU2NzIzXHU2NzI0XHU2NzI1XHU2NzI3XHU2NzI5XHU2NzJlXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2XHU2NzM3XHU2NzM4XHU2NzM5'@;
put 'XHU2NzNiXHU2NzNjXHU2NzNlXHU2NzNmXHU2NzQxXHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRhXHU2NzRiXHU2NzRkXHU2NzUyXHU2NzU0XHU2NzU1XHU2NzU3XHU2NzU4XHU2NzU5XHU2NzVhXHU2NzViXHU2NzVkXHU2NzYyXHU2NzYzXHU2NzY0XHU2NzY2XHU2NzY3XHU2NzZiXHU2NzZjXHU2'@;
put 'NzZlXHU2NzcxXHU2Nzc0XHU2Nzc2XHVmZmZkXHU2Nzc4XHU2Nzc5XHU2NzdhXHU2NzdiXHU2NzdkXHU2NzgwXHU2NzgyXHU2NzgzXHU2Nzg1XHU2Nzg2XHU2Nzg4XHU2NzhhXHU2NzhjXHU2NzhkXHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkyXHU2NzkzXHU2Nzk0XHU2Nzk2XHU2Nzk5XHU2Nzli'@;
put 'XHU2NzlmXHU2N2EwXHU2N2ExXHU2N2E0XHU2N2E2XHU2N2E5XHU2N2FjXHU2N2FlXHU2N2IxXHU2N2IyXHU2N2I0XHU2N2I5XHU2N2JhXHU2N2JiXHU2N2JjXHU2N2JkXHU2N2JlXHU2N2JmXHU2N2MwXHU2N2MyXHU2N2M1XHU2N2M2XHU2N2M3XHU2N2M4XHU2N2M5XHU2N2NhXHU2N2NiXHU2'@;
put 'N2NjXHU2N2NkXHU2N2NlXHU2N2Q1XHU2N2Q2XHU2N2Q3XHU2N2RiXHU2N2RmXHU2N2UxXHU2N2UzXHU2N2U0XHU2N2U2XHU2N2U3XHU2N2U4XHU2N2VhXHU2N2ViXHU2N2VkXHU2N2VlXHU2N2YyXHU2N2Y1XHU2N2Y2XHU2N2Y3XHU2N2Y4XHU2N2Y5XHU2N2ZhXHU2N2ZiXHU2N2ZjXHU2N2Zl'@;
put 'XHU2ODAxXHU2ODAyXHU2ODAzXHU2ODA0XHU2ODA2XHU2ODBkXHU2ODEwXHU2ODEyXHU2ODE0XHU2ODE1XHU2ODE4XHU2ODE5XHU2ODFhXHU2ODFiXHU2ODFjXHU2ODFlXHU2ODFmXHU2ODIwXHU2ODIyXHU2ODIzXHU2ODI0XHU2ODI1XHU2ODI2XHU2ODI3XHU2ODI4XHU2ODJiXHU2ODJjXHU2'@;
put 'ODJkXHU2ODJlXHU2ODJmXHU2ODMwXHU2ODMxXHU2ODM0XHU2ODM1XHU2ODM2XHU2ODNhXHU2ODNiXHU2ODNmXHU2ODQ3XHU2ODRiXHU2ODRkXHU2ODRmXHU2ODUyXHU2ODU2XHU2ODU3XHU2ODU4XHU2ODU5XHU2ODVhXHU2ODViXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUwXS5sZW5n'@;
put 'dGg7KytwKTY1NTMzIT09X1sxNTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUwXVtwXV09Mzg0MDArcCxiWzM4NDAwK3BdPV9bMTUwXVtwXSk7Zm9yKF9bMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ODVjXHU2ODVkXHU2'@;
put 'ODVlXHU2ODVmXHU2ODZhXHU2ODZjXHU2ODZkXHU2ODZlXHU2ODZmXHU2ODcwXHU2ODcxXHU2ODcyXHU2ODczXHU2ODc1XHU2ODc4XHU2ODc5XHU2ODdhXHU2ODdiXHU2ODdjXHU2ODdkXHU2ODdlXHU2ODdmXHU2ODgwXHU2ODgyXHU2ODg0XHU2ODg3XHU2ODg4XHU2ODg5XHU2ODhhXHU2ODhi'@;
put 'XHU2ODhjXHU2ODhkXHU2ODhlXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4XHU2ODk5XHU2ODlhXHU2ODliXHU2ODljXHU2ODlkXHU2ODllXHU2ODlmXHU2OGEwXHU2OGExXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2'@;
put 'OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4XHVmZmZkXHU2OGI5XHU2OGJhXHU2OGJiXHU2OGJjXHU2OGJkXHU2OGJlXHU2OGJmXHU2OGMxXHU2OGMzXHU2OGM0XHU2OGM1XHU2OGM2XHU2OGM3XHU2OGM4XHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQz'@;
put 'XHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiXHU2OGRjXHU2OGRkXHU2OGRlXHU2OGRmXHU2OGUxXHU2OGUyXHU2OGU0XHU2OGU1XHU2OGU2XHU2OGU3XHU2OGU4XHU2OGU5XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGVmXHU2OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2'@;
put 'OGY4XHU2OGZiXHU2OGZkXHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2XHU2OTA3XHU2OTA4XHU2OTA5XHU2OTBhXHU2OTBjXHU2OTBmXHU2OTExXHU2OTEzXHU2OTE0XHU2OTE1XHU2OTE2XHU2OTE3XHU2OTE4XHU2OTE5XHU2OTFhXHU2OTFiXHU2OTFjXHU2OTFk'@;
put 'XHU2OTFlXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1XHU2OTI2XHU2OTI3XHU2OTI4XHU2OTI5XHU2OTJhXHU2OTJiXHU2OTJjXHU2OTJlXHU2OTJmXHU2OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2'@;
put 'OTQzXHU2OTQ0XHU2OTQ1XHU2OTQ2XHU2OTQ3XHU2OTQ4XHU2OTQ5XHU2OTRhXHU2OTRiXHU2OTRjXHU2OTRkXHU2OTRlXHU2OTRmXHU2OTUwXHU2OTUxXHU2OTUyXHU2OTUzXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah'@;
put 'PV9bMTUxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUxXVtwXV09Mzg2NTYrcCxiWzM4NjU2K3BdPV9bMTUxXVtwXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2'@;
put 'OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyXHU2OTczXHU2OTc0XHU2OTc1XHU2OTc2XHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThj'@;
put 'XHU2OThlXHU2OThmXHU2OTkwXHU2OTkxXHU2OTkyXHU2OTkzXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkXHU2OTllXHU2OTlmXHU2OWEwXHU2OWExXHU2OWEyXHU2OWEzXHU2OWE0XHU2OWE1XHU2OWE2XHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2'@;
put 'OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkXHVmZmZkXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyXHU2OWMzXHU2OWM0XHU2OWM1XHU2OWM2XHU2OWM3XHU2OWM4XHU2OWM5XHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1XHU2OWQ2'@;
put 'XHU2OWQ3XHU2OWQ4XHU2OWQ5XHU2OWRhXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxXHU2OWUyXHU2OWUzXHU2OWU0XHU2OWU1XHU2OWU2XHU2OWU3XHU2OWU4XHU2OWU5XHU2OWVhXHU2OWViXHU2OWVjXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzXHU2OWY0XHU2OWY1XHU2OWY2XHU2'@;
put 'OWY3XHU2OWY4XHU2OWY5XHU2OWZhXHU2OWZiXHU2OWZjXHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAyXHU2YTAzXHU2YTA0XHU2YTA1XHU2YTA2XHU2YTA3XHU2YTA4XHU2YTA5XHU2YTBiXHU2YTBjXHU2YTBkXHU2YTBlXHU2YTBmXHU2YTEwXHU2YTExXHU2YTEyXHU2YTEzXHU2YTE0XHU2YTE1'@;
put 'XHU2YTE2XHU2YTE5XHU2YTFhXHU2YTFiXHU2YTFjXHU2YTFkXHU2YTFlXHU2YTIwXHU2YTIyXHU2YTIzXHU2YTI0XHU2YTI1XHU2YTI2XHU2YTI3XHU2YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2XHU2YTM3XHU2YTM4XHU2YTM5XHU2'@;
put 'YTNhXHU2YTNiXHU2YTNjXHU2YTNmXHU2YTQwXHU2YTQxXHU2YTQyXHU2YTQzXHU2YTQ1XHU2YTQ2XHU2YTQ4XHU2YTQ5XHU2YTRhXHU2YTRiXHU2YTRjXHU2YTRkXHU2YTRlXHU2YTRmXHU2YTUxXHU2YTUyXHU2YTUzXHU2YTU0XHU2YTU1XHU2YTU2XHU2YTU3XHU2YTVhXHVmZmZkIi5zcGxp'@;
put 'dCgiIikscD0wO3AhPV9bMTUyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUyXVtwXV09Mzg5MTIrcCxiWzM4OTEyK3BdPV9bMTUyXVtwXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU2YTVjXHU2YTVkXHU2YTVlXHU2YTVmXHU2YTYwXHU2YTYyXHU2YTYzXHU2YTY0XHU2YTY2XHU2YTY3XHU2YTY4XHU2YTY5XHU2YTZhXHU2YTZiXHU2YTZjXHU2YTZkXHU2YTZlXHU2YTZmXHU2YTcwXHU2YTcyXHU2YTczXHU2YTc0XHU2YTc1XHU2YTc2XHU2YTc3XHU2YTc4'@;
put 'XHU2YTdhXHU2YTdiXHU2YTdkXHU2YTdlXHU2YTdmXHU2YTgxXHU2YTgyXHU2YTgzXHU2YTg1XHU2YTg2XHU2YTg3XHU2YTg4XHU2YTg5XHU2YThhXHU2YThiXHU2YThjXHU2YThkXHU2YThmXHU2YTkyXHU2YTkzXHU2YTk0XHU2YTk1XHU2YTk2XHU2YTk4XHU2YTk5XHU2YTlhXHU2YTliXHU2'@;
put 'YTljXHU2YTlkXHU2YTllXHU2YTlmXHU2YWExXHU2YWEyXHU2YWEzXHU2YWE0XHU2YWE1XHU2YWE2XHVmZmZkXHU2YWE3XHU2YWE4XHU2YWFhXHU2YWFkXHU2YWFlXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWIyXHU2YWIzXHU2YWI0XHU2YWI1XHU2YWI2XHU2YWI3XHU2YWI4XHU2YWI5XHU2YWJh'@;
put 'XHU2YWJiXHU2YWJjXHU2YWJkXHU2YWJlXHU2YWJmXHU2YWMwXHU2YWMxXHU2YWMyXHU2YWMzXHU2YWM0XHU2YWM1XHU2YWM2XHU2YWM3XHU2YWM4XHU2YWM5XHU2YWNhXHU2YWNiXHU2YWNjXHU2YWNkXHU2YWNlXHU2YWNmXHU2YWQwXHU2YWQxXHU2YWQyXHU2YWQzXHU2YWQ0XHU2YWQ1XHU2'@;
put 'YWQ2XHU2YWQ3XHU2YWQ4XHU2YWQ5XHU2YWRhXHU2YWRiXHU2YWRjXHU2YWRkXHU2YWRlXHU2YWRmXHU2YWUwXHU2YWUxXHU2YWUyXHU2YWUzXHU2YWU0XHU2YWU1XHU2YWU2XHU2YWU3XHU2YWU4XHU2YWU5XHU2YWVhXHU2YWViXHU2YWVjXHU2YWVkXHU2YWVlXHU2YWVmXHU2YWYwXHU2YWYx'@;
put 'XHU2YWYyXHU2YWYzXHU2YWY0XHU2YWY1XHU2YWY2XHU2YWY3XHU2YWY4XHU2YWY5XHU2YWZhXHU2YWZiXHU2YWZjXHU2YWZkXHU2YWZlXHU2YWZmXHU2YjAwXHU2YjAxXHU2YjAyXHU2YjAzXHU2YjA0XHU2YjA1XHU2YjA2XHU2YjA3XHU2YjA4XHU2YjA5XHU2YjBhXHU2YjBiXHU2YjBjXHU2'@;
put 'YjBkXHU2YjBlXHU2YjBmXHU2YjEwXHU2YjExXHU2YjEyXHU2YjEzXHU2YjE0XHU2YjE1XHU2YjE2XHU2YjE3XHU2YjE4XHU2YjE5XHU2YjFhXHU2YjFiXHU2YjFjXHU2YjFkXHU2YjFlXHU2YjFmXHU2YjI1XHU2YjI2XHU2YjI4XHU2YjI5XHU2YjJhXHU2YjJiXHU2YjJjXHU2YjJkXHU2YjJl'@;
put 'XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUzXVtwXV09MzkxNjgrcCxiWzM5MTY4K3BdPV9bMTUzXVtwXSk7Zm9yKF9bMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2YjNjXHU2YjNkXHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkXHU2YjRlXHU2YjRmXHU2YjUw'@;
put 'XHU2YjUxXHU2YjUyXHU2YjUzXHU2YjU0XHU2YjU1XHU2YjU2XHU2YjU3XHU2YjU4XHU2YjVhXHU2YjViXHU2YjVjXHU2YjVkXHU2YjVlXHU2YjVmXHU2YjYwXHU2YjYxXHU2YjY4XHU2YjY5XHU2YjZiXHU2YjZjXHU2YjZkXHU2YjZlXHU2YjZmXHU2YjcwXHU2YjcxXHU2YjcyXHU2YjczXHU2'@;
put 'Yjc0XHU2Yjc1XHU2Yjc2XHU2Yjc3XHU2Yjc4XHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4XHVmZmZkXHU2YjhjXHU2YjhlXHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljXHU2YjlkXHU2YjllXHU2YjlmXHU2YmEw'@;
put 'XHU2YmEyXHU2YmEzXHU2YmE0XHU2YmE1XHU2YmE2XHU2YmE3XHU2YmE4XHU2YmE5XHU2YmFiXHU2YmFjXHU2YmFkXHU2YmFlXHU2YmFmXHU2YmIwXHU2YmIxXHU2YmIyXHU2YmI2XHU2YmI4XHU2YmI5XHU2YmJhXHU2YmJiXHU2YmJjXHU2YmJkXHU2YmJlXHU2YmMwXHU2YmMzXHU2YmM0XHU2'@;
put 'YmM2XHU2YmM3XHU2YmM4XHU2YmM5XHU2YmNhXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjXHU2YmRkXHU2YmRlXHU2YmRmXHU2YmUwXHU2YmUyXHU2YmUzXHU2YmU0XHU2YmU1XHU2YmU2XHU2YmU3XHU2YmU4XHU2YmU5XHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYw'@;
put 'XHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlXHU2YmZmXHU2YzAwXHU2YzAxXHU2YzAyXHU2YzAzXHU2YzA0XHU2YzA4XHU2YzA5XHU2YzBhXHU2YzBiXHU2YzBjXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2'@;
put 'YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNmXHU2YzQzXHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiXHU2YzRjXHU2YzRkXHU2YzRlXHU2YzRmXHU2YzUxXHU2YzUyXHU2YzUz'@;
put 'XHU2YzU2XHU2YzU4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU0XVtwXV09Mzk0MjQrcCxiWzM5NDI0K3BdPV9bMTU0XVtwXSk7Zm9yKF9bMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiXHU2YzZjXHU2YzZkXHU2YzZlXHU2YzZmXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2Yzgw'@;
put 'XHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2'@;
put 'Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4XHVmZmZkXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0'@;
put 'XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmXHU2ZDIwXHU2ZDIxXHU2ZDIyXHU2ZDIzXHU2ZDI0XHU2'@;
put 'ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYy'@;
put 'XHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkXHU2ZDdlXHU2ZDdmXHU2ZDgwXHU2ZDgxXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2'@;
put 'ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZDk5XHU2ZDlhXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5XHU2ZGJhXHU2ZGJiXHU2ZGJjXHU2ZGJkXHU2ZGJlXHU2ZGMxXHU2ZGMy'@;
put 'XHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU1XVtwXV09Mzk2ODArcCxiWzM5NjgwK3BdPV9bMTU1XVtwXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZGNkXHU2ZGNlXHU2ZGNmXHU2ZGQwXHU2ZGQyXHU2ZGQzXHU2ZGQ0XHU2ZGQ1XHU2ZGQ3XHU2ZGRhXHU2ZGRiXHU2ZGRjXHU2ZGRmXHU2ZGUyXHU2ZGUzXHU2ZGU1XHU2ZGU3XHU2ZGU4XHU2ZGU5XHU2ZGVh'@;
put 'XHU2ZGVkXHU2ZGVmXHU2ZGYwXHU2ZGYyXHU2ZGY0XHU2ZGY1XHU2ZGY2XHU2ZGY4XHU2ZGZhXHU2ZGZkXHU2ZGZlXHU2ZGZmXHU2ZTAwXHU2ZTAxXHU2ZTAyXHU2ZTAzXHU2ZTA0XHU2ZTA2XHU2ZTA3XHU2ZTA4XHU2ZTA5XHU2ZTBiXHU2ZTBmXHU2ZTEyXHU2ZTEzXHU2ZTE1XHU2ZTE4XHU2'@;
put 'ZTE5XHU2ZTFiXHU2ZTFjXHU2ZTFlXHU2ZTFmXHU2ZTIyXHU2ZTI2XHU2ZTI3XHU2ZTI4XHU2ZTJhXHU2ZTJjXHU2ZTJlXHU2ZTMwXHU2ZTMxXHU2ZTMzXHU2ZTM1XHVmZmZkXHU2ZTM2XHU2ZTM3XHU2ZTM5XHU2ZTNiXHU2ZTNjXHU2ZTNkXHU2ZTNlXHU2ZTNmXHU2ZTQwXHU2ZTQxXHU2ZTQy'@;
put 'XHU2ZTQ1XHU2ZTQ2XHU2ZTQ3XHU2ZTQ4XHU2ZTQ5XHU2ZTRhXHU2ZTRiXHU2ZTRjXHU2ZTRmXHU2ZTUwXHU2ZTUxXHU2ZTUyXHU2ZTU1XHU2ZTU3XHU2ZTU5XHU2ZTVhXHU2ZTVjXHU2ZTVkXHU2ZTVlXHU2ZTYwXHU2ZTYxXHU2ZTYyXHU2ZTYzXHU2ZTY0XHU2ZTY1XHU2ZTY2XHU2ZTY3XHU2'@;
put 'ZTY4XHU2ZTY5XHU2ZTZhXHU2ZTZjXHU2ZTZkXHU2ZTZmXHU2ZTcwXHU2ZTcxXHU2ZTcyXHU2ZTczXHU2ZTc0XHU2ZTc1XHU2ZTc2XHU2ZTc3XHU2ZTc4XHU2ZTc5XHU2ZTdhXHU2ZTdiXHU2ZTdjXHU2ZTdkXHU2ZTgwXHU2ZTgxXHU2ZTgyXHU2ZTg0XHU2ZTg3XHU2ZTg4XHU2ZThhXHU2ZThi'@;
put 'XHU2ZThjXHU2ZThkXHU2ZThlXHU2ZTkxXHU2ZTkyXHU2ZTkzXHU2ZTk0XHU2ZTk1XHU2ZTk2XHU2ZTk3XHU2ZTk5XHU2ZTlhXHU2ZTliXHU2ZTlkXHU2ZTllXHU2ZWEwXHU2ZWExXHU2ZWEzXHU2ZWE0XHU2ZWE2XHU2ZWE4XHU2ZWE5XHU2ZWFiXHU2ZWFjXHU2ZWFkXHU2ZWFlXHU2ZWIwXHU2'@;
put 'ZWIzXHU2ZWI1XHU2ZWI4XHU2ZWI5XHU2ZWJjXHU2ZWJlXHU2ZWJmXHU2ZWMwXHU2ZWMzXHU2ZWM0XHU2ZWM1XHU2ZWM2XHU2ZWM4XHU2ZWM5XHU2ZWNhXHU2ZWNjXHU2ZWNkXHU2ZWNlXHU2ZWQwXHU2ZWQyXHU2ZWQ2XHU2ZWQ4XHU2ZWQ5XHU2ZWRiXHU2ZWRjXHU2ZWRkXHU2ZWUzXHU2ZWU3'@;
put 'XHU2ZWVhXHU2ZWViXHU2ZWVjXHU2ZWVkXHU2ZWVlXHU2ZWVmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU2XVtwXV09Mzk5MzYrcCxiWzM5OTM2K3BdPV9bMTU2XVtwXSk7Zm9yKF9bMTU3'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWYwXHU2ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhXHU2ZWZiXHU2ZWZjXHU2ZWZkXHU2ZWZlXHU2ZWZmXHU2ZjAwXHU2ZjAxXHU2ZjAzXHU2ZjA0'@;
put 'XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhXHU2ZjBiXHU2ZjBjXHU2ZjBkXHU2ZjBlXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2XHU2ZjE3XHU2ZjE4XHU2ZjE5XHU2ZjFhXHU2ZjFiXHU2ZjFjXHU2ZjFkXHU2ZjFlXHU2ZjFmXHU2ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2'@;
put 'ZjI4XHU2ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3XHU2ZjM4XHU2ZjM5XHU2ZjNhXHU2ZjNiXHU2ZjNjXHU2ZjNkXHU2ZjNmXHU2ZjQwXHU2ZjQxXHU2ZjQyXHVmZmZkXHU2ZjQzXHU2ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlXHU2ZjRm'@;
put 'XHU2ZjUwXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU0XHU2ZjU1XHU2ZjU2XHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYxXHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3XHU2ZjY4XHU2ZjY5XHU2ZjZhXHU2ZjZiXHU2ZjZjXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2'@;
put 'ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkXHU2ZjdlXHU2ZjdmXHU2ZjgwXHU2ZjgxXHU2ZjgyXHU2ZjgzXHU2Zjg1XHU2Zjg2XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmXHU2ZjkwXHU2ZjkxXHU2ZjkyXHU2ZjkzXHU2Zjk0XHU2Zjk1XHU2Zjk2XHU2Zjk3XHU2Zjk4'@;
put 'XHU2Zjk5XHU2ZjlhXHU2ZjliXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyXHU2ZmEzXHU2ZmE0XHU2ZmE1XHU2ZmE2XHU2ZmE4XHU2ZmE5XHU2ZmFhXHU2ZmFiXHU2ZmFjXHU2ZmFkXHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmIxXHU2ZmIyXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4XHU2'@;
put 'ZmJhXHU2ZmJiXHU2ZmJjXHU2ZmJkXHU2ZmJlXHU2ZmJmXHU2ZmMxXHU2ZmMzXHU2ZmM0XHU2ZmM1XHU2ZmM2XHU2ZmM3XHU2ZmM4XHU2ZmNhXHU2ZmNiXHU2ZmNjXHU2ZmNkXHU2ZmNlXHU2ZmNmXHU2ZmQwXHU2ZmQzXHU2ZmQ0XHU2ZmQ1XHU2ZmQ2XHU2ZmQ3XHU2ZmQ4XHU2ZmQ5XHU2ZmRh'@;
put 'XHU2ZmRiXHU2ZmRjXHU2ZmRkXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU3XVtwXV09NDAxOTIrcCxiWzQwMTkyK3BdPV9bMTU3XVtw'@;
put 'XSk7Zm9yKF9bMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmU2XHU2ZmU3XHU2ZmU4XHU2ZmU5XHU2ZmVhXHU2ZmViXHU2ZmVjXHU2ZmVkXHU2ZmYwXHU2ZmYxXHU2ZmYyXHU2ZmYzXHU2ZmY0XHU2ZmY1XHU2ZmY2XHU2ZmY3'@;
put 'XHU2ZmY4XHU2ZmY5XHU2ZmZhXHU2ZmZiXHU2ZmZjXHU2ZmZkXHU2ZmZlXHU2ZmZmXHU3MDAwXHU3MDAxXHU3MDAyXHU3MDAzXHU3MDA0XHU3MDA1XHU3MDA2XHU3MDA3XHU3MDA4XHU3MDA5XHU3MDBhXHU3MDBiXHU3MDBjXHU3MDBkXHU3MDBlXHU3MDBmXHU3MDEwXHU3MDEyXHU3MDEzXHU3'@;
put 'MDE0XHU3MDE1XHU3MDE2XHU3MDE3XHU3MDE4XHU3MDE5XHU3MDFjXHU3MDFkXHU3MDFlXHU3MDFmXHU3MDIwXHU3MDIxXHU3MDIyXHU3MDI0XHU3MDI1XHU3MDI2XHU3MDI3XHU3MDI4XHU3MDI5XHU3MDJhXHVmZmZkXHU3MDJiXHU3MDJjXHU3MDJkXHU3MDJlXHU3MDJmXHU3MDMwXHU3MDMx'@;
put 'XHU3MDMyXHU3MDMzXHU3MDM0XHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhXHU3MDNiXHU3MDNjXHU3MDNkXHU3MDNlXHU3MDNmXHU3MDQwXHU3MDQxXHU3MDQyXHU3MDQzXHU3MDQ0XHU3MDQ1XHU3MDQ2XHU3MDQ3XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDRkXHU3MDRlXHU3MDUwXHU3'@;
put 'MDUxXHU3MDUyXHU3MDUzXHU3MDU0XHU3MDU1XHU3MDU2XHU3MDU3XHU3MDU4XHU3MDU5XHU3MDVhXHU3MDViXHU3MDVjXHU3MDVkXHU3MDVmXHU3MDYwXHU3MDYxXHU3MDYyXHU3MDYzXHU3MDY0XHU3MDY1XHU3MDY2XHU3MDY3XHU3MDY4XHU3MDY5XHU3MDZhXHU3MDZlXHU3MDcxXHU3MDcy'@;
put 'XHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllXHU3MDlmXHU3'@;
put 'MGEwXHU3MGExXHU3MGEyXHU3MGEzXHU3MGE0XHU3MGE1XHU3MGE2XHU3MGE3XHU3MGE4XHU3MGE5XHU3MGFhXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiXHU3MGNjXHU3MGNkXHU3MGNl'@;
put 'XHU3MGNmXHU3MGQwXHU3MGQxXHU3MGQyXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ3XHU3MGRhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNThdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU4XVtwXV09NDA0NDgrcCxiWzQwNDQ4'@;
put 'K3BdPV9bMTU4XVtwXSk7Zm9yKF9bMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MGRjXHU3MGRkXHU3MGRlXHU3MGUwXHU3MGUxXHU3MGUyXHU3MGUzXHU3MGU1XHU3MGVhXHU3MGVlXHU3MGYwXHU3MGYxXHU3MGYyXHU3MGYz'@;
put 'XHU3MGY0XHU3MGY1XHU3MGY2XHU3MGY4XHU3MGZhXHU3MGZiXHU3MGZjXHU3MGZlXHU3MGZmXHU3MTAwXHU3MTAxXHU3MTAyXHU3MTAzXHU3MTA0XHU3MTA1XHU3MTA2XHU3MTA3XHU3MTA4XHU3MTBiXHU3MTBjXHU3MTBkXHU3MTBlXHU3MTBmXHU3MTExXHU3MTEyXHU3MTE0XHU3MTE3XHU3'@;
put 'MTFiXHU3MTFjXHU3MTFkXHU3MTFlXHU3MTFmXHU3MTIwXHU3MTIxXHU3MTIyXHU3MTIzXHU3MTI0XHU3MTI1XHU3MTI3XHU3MTI4XHU3MTI5XHU3MTJhXHU3MTJiXHU3MTJjXHU3MTJkXHU3MTJlXHU3MTMyXHU3MTMzXHU3MTM0XHVmZmZkXHU3MTM1XHU3MTM3XHU3MTM4XHU3MTM5XHU3MTNh'@;
put 'XHU3MTNiXHU3MTNjXHU3MTNkXHU3MTNlXHU3MTNmXHU3MTQwXHU3MTQxXHU3MTQyXHU3MTQzXHU3MTQ0XHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3MTRiXHU3MTRkXHU3MTRmXHU3MTUwXHU3MTUxXHU3MTUyXHU3MTUzXHU3MTU0XHU3MTU1XHU3MTU2XHU3MTU3XHU3MTU4XHU3MTU5XHU3'@;
put 'MTVhXHU3MTViXHU3MTVkXHU3MTVmXHU3MTYwXHU3MTYxXHU3MTYyXHU3MTYzXHU3MTY1XHU3MTY5XHU3MTZhXHU3MTZiXHU3MTZjXHU3MTZkXHU3MTZmXHU3MTcwXHU3MTcxXHU3MTc0XHU3MTc1XHU3MTc2XHU3MTc3XHU3MTc5XHU3MTdiXHU3MTdjXHU3MTdlXHU3MTdmXHU3MTgwXHU3MTgx'@;
put 'XHU3MTgyXHU3MTgzXHU3MTg1XHU3MTg2XHU3MTg3XHU3MTg4XHU3MTg5XHU3MThiXHU3MThjXHU3MThkXHU3MThlXHU3MTkwXHU3MTkxXHU3MTkyXHU3MTkzXHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlhXHU3MTliXHU3MTljXHU3MTlkXHU3MTllXHU3MWExXHU3MWEyXHU3MWEzXHU3MWE0XHU3'@;
put 'MWE1XHU3MWE2XHU3MWE3XHU3MWE5XHU3MWFhXHU3MWFiXHU3MWFkXHU3MWFlXHU3MWFmXHU3MWIwXHU3MWIxXHU3MWIyXHU3MWI0XHU3MWI2XHU3MWI3XHU3MWI4XHU3MWJhXHU3MWJiXHU3MWJjXHU3MWJkXHU3MWJlXHU3MWJmXHU3MWMwXHU3MWMxXHU3MWMyXHU3MWM0XHU3MWM1XHU3MWM2'@;
put 'XHU3MWM3XHU3MWM4XHU3MWM5XHU3MWNhXHU3MWNiXHU3MWNjXHU3MWNkXHU3MWNmXHU3MWQwXHU3MWQxXHU3MWQyXHU3MWQzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU5XVtwXV09NDA3'@;
put 'MDQrcCxiWzQwNzA0K3BdPV9bMTU5XVtwXSk7Zm9yKF9bMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MWQ2XHU3MWQ3XHU3MWQ4XHU3MWQ5XHU3MWRhXHU3MWRiXHU3MWRjXHU3MWRkXHU3MWRlXHU3MWRmXHU3MWUxXHU3MWUy'@;
put 'XHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4XHU3MWU5XHU3MWVhXHU3MWViXHU3MWVjXHU3MWVkXHU3MWVmXHU3MWYwXHU3MWYxXHU3MWYyXHU3MWYzXHU3MWY0XHU3MWY1XHU3MWY2XHU3MWY3XHU3MWY4XHU3MWZhXHU3MWZiXHU3MWZjXHU3MWZkXHU3MWZlXHU3MWZmXHU3MjAwXHU3MjAxXHU3'@;
put 'MjAyXHU3MjAzXHU3MjA0XHU3MjA1XHU3MjA3XHU3MjA4XHU3MjA5XHU3MjBhXHU3MjBiXHU3MjBjXHU3MjBkXHU3MjBlXHU3MjBmXHU3MjEwXHU3MjExXHU3MjEyXHU3MjEzXHU3MjE0XHU3MjE1XHU3MjE2XHU3MjE3XHU3MjE4XHU3MjE5XHU3MjFhXHVmZmZkXHU3MjFiXHU3MjFjXHU3MjFl'@;
put 'XHU3MjFmXHU3MjIwXHU3MjIxXHU3MjIyXHU3MjIzXHU3MjI0XHU3MjI1XHU3MjI2XHU3MjI3XHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNlXHU3MjQwXHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ0XHU3MjQ1XHU3MjQ2XHU3'@;
put 'MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0'@;
put 'XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1XHU3Mjg2XHU3Mjg3XHU3Mjg4XHU3Mjg5XHU3MjhjXHU3MjhlXHU3MjkwXHU3MjkxXHU3MjkzXHU3Mjk0XHU3Mjk1XHU3Mjk2XHU3Mjk3XHU3Mjk4XHU3Mjk5XHU3MjlhXHU3MjliXHU3MjljXHU3'@;
put 'MjlkXHU3MjllXHU3MmEwXHU3MmExXHU3MmEyXHU3MmEzXHU3MmE0XHU3MmE1XHU3MmE2XHU3MmE3XHU3MmE4XHU3MmE5XHU3MmFhXHU3MmFiXHU3MmFlXHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhXHU3MmJiXHU3MmJjXHU3MmJkXHU3MmJlXHU3MmJmXHU3MmMwXHU3MmM1XHU3MmM2'@;
put 'XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19b'@;
put 'MTYwXVtwXV09NDA5NjArcCxiWzQwOTYwK3BdPV9bMTYwXVtwXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZmNWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMw'@;
put 'MGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFc'@;
put 'dTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1'@;
put 'Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjFd'@;
put 'W3BdXT00MTIxNitwLGJbNDEyMTYrcF09X1sxNjFdW3BdKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0'@;
put 'OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJc'@;
put 'dTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZm'@;
put 'ZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Ml1bcF0uY2hhckNvZGVBdCgw'@;
put 'KSYmKERbX1sxNjJdW3BdXT00MTQ3MitwLGJbNDE0NzIrcF09X1sxNjJdW3BdKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZm'@;
put 'MTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFc'@;
put 'dWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZm'@;
put 'NGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2M11bcF0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKERbX1sxNjNdW3BdXT00MTcyOCtwLGJbNDE3MjgrcF09X1sxNjNdW3BdKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMw'@;
put 'NTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZc'@;
put 'dTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMw'@;
put 'OGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjRdLmxlbmd0aDsrK3ApNjU1MzMh'@;
put 'PT1fWzE2NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjRdW3BdXT00MTk4NCtwLGJbNDE5ODQrcF09X1sxNjRdW3BdKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMw'@;
put 'YjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2Rc'@;
put 'dTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMw'@;
put 'ZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjVdLmxlbmd0'@;
put 'aDsrK3ApNjU1MzMhPT1fWzE2NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjVdW3BdXT00MjI0MCtwLGJbNDIyNDArcF09X1sxNjVdW3BdKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAz'@;
put 'YTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJc'@;
put 'dTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZl'@;
put 'M2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDRcdWZmZmRcdWZmZmRcdWZlM2JcdWZlM2NcdWZlMzdcdWZlMzhcdWZlMzFcdWZmZmRcdWZlMzNcdWZlMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9'@;
put 'X1sxNjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjZdW3BdXT00MjQ5NitwLGJbNDI0OTYrcF09X1sxNjZdW3BdKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0'@;
put 'MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0'@;
put 'NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxwPTA7cCE9X1sxNjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjddW3BdXT00Mjc1MitwLGJbNDI3NTIrcF09X1sxNjddW3BdKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTAyY2FcdTAyY2JcdTAyZDlcdTIwMTNcdTIwMTVcdTIwMjVcdTIwMzVcdTIxMDVcdTIxMDlcdTIxOTZcdTIxOTdcdTIxOThcdTIxOTlcdTIyMTVcdTIyMWZcdTIyMjNcdTIyNTJcdTIyNjZcdTIyNjdcdTIyYmZcdTI1NTBcdTI1NTFcdTI1NTJcdTI1NTNcdTI1NTRcdTI1NTVc'@;
put 'dTI1NTZcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTI1NWNcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTI1NjJcdTI1NjNcdTI1NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTI1NmJcdTI1NmNcdTI1NmRcdTI1NmVcdTI1NmZcdTI1NzBcdTI1'@;
put 'NzFcdTI1NzJcdTI1NzNcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdWZmZmRcdTI1ODhcdTI1ODlcdTI1OGFcdTI1OGJcdTI1OGNcdTI1OGRcdTI1OGVcdTI1OGZcdTI1OTNcdTI1OTRcdTI1OTVcdTI1YmNcdTI1YmRcdTI1ZTJcdTI1ZTNcdTI1ZTRcdTI1ZTVc'@;
put 'dTI2MDlcdTIyOTVcdTMwMTJcdTMwMWRcdTMwMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYz'@;
put 'XHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdTAyNTFcdWZmZmRcdTAxNDRcdTAxNDhcdWZmZmRcdTAyNjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJc'@;
put 'dTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMx'@;
put 'MjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9'@;
put 'X1sxNjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjhdW3BdXT00MzAwOCtwLGJbNDMwMDgrcF09X1sxNjhdW3BdKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMw'@;
put 'MjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTRcdWZmZmRcdTIxMjFcdTMyMzFcdWZmZmRc'@;
put 'dTIwMTBcdWZmZmRcdWZmZmRcdWZmZmRcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDlcdWZlNGFcdWZlNGJcdWZlNGNcdWZlNGRcdWZlNGVcdWZlNGZcdWZlNTBcdWZlNTFcdWZlNTJcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZlNTlcdWZl'@;
put 'NWFcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdWZlNWZcdWZlNjBcdWZlNjFcdWZmZmRcdWZlNjJcdWZlNjNcdWZlNjRcdWZlNjVcdWZlNjZcdWZlNjhcdWZlNjlcdWZlNmFcdWZlNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTMwMDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1'@;
put 'MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVc'@;
put 'dTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1'@;
put 'NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxwPTA7cCE9X1sxNjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjldW3BdXT00MzI2NCtwLGJbNDMyNjQrcF09X1sxNjldW3BdKTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTJcdTcyZTNcdTcyZTRcdTcyZTVcdTcyZTZcdTcyZTdcdTcyZWFcdTcyZWJcdTcyZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDRcdTczMDVcdTczMDZcdTczMDdcdTczMDhcdTczMDlcdTczMGJc'@;
put 'dTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTcz'@;
put 'M2RcdTczNDBcdTczNDFcdTczNDJcdTczNDNcdTczNDRcdTczNDVcdTczNDZcdTczNDdcdTczNDhcdWZmZmRcdTczNDlcdTczNGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNThcdTczNTlcdTczNWFcdTczNWJcdTczNWNcdTczNWRc'@;
put 'dTczNWVcdTczNWZcdTczNjFcdTczNjJcdTczNjNcdTczNjRcdTczNjVcdTczNjZcdTczNjdcdTczNjhcdTczNjlcdTczNmFcdTczNmJcdTczNmVcdTczNzBcdTczNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzBdW3BdXT00MzUyMCtwLGJbNDM1MjArcF09X1sxNzBdW3BdKTtmb3IoX1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNzJcdTczNzNcdTczNzRcdTczNzVcdTczNzZcdTczNzdcdTczNzhcdTczNzlcdTczN2FcdTczN2JcdTczN2NcdTczN2RcdTczN2ZcdTczODBcdTczODFcdTczODJcdTczODNcdTczODVcdTczODZcdTczODhcdTczOGFcdTczOGNcdTczOGRcdTczOGZc'@;
put 'dTczOTBcdTczOTJcdTczOTNcdTczOTRcdTczOTVcdTczOTdcdTczOThcdTczOTlcdTczOWFcdTczOWNcdTczOWRcdTczOWVcdTczYTBcdTczYTFcdTczYTNcdTczYTRcdTczYTVcdTczYTZcdTczYTdcdTczYThcdTczYWFcdTczYWNcdTczYWRcdTczYjFcdTczYjRcdTczYjVcdTczYjZcdTcz'@;
put 'YjhcdTczYjlcdTczYmNcdTczYmRcdTczYmVcdTczYmZcdTczYzFcdTczYzNcdTczYzRcdTczYzVcdTczYzZcdTczYzdcdWZmZmRcdTczY2JcdTczY2NcdTczY2VcdTczZDJcdTczZDNcdTczZDRcdTczZDVcdTczZDZcdTczZDdcdTczZDhcdTczZGFcdTczZGJcdTczZGNcdTczZGRcdTczZGZc'@;
put 'dTczZTFcdTczZTJcdTczZTNcdTczZTRcdTczZTZcdTczZThcdTczZWFcdTczZWJcdTczZWNcdTczZWVcdTczZWZcdTczZjBcdTczZjFcdTczZjNcdTczZjRcdTczZjVcdTczZjZcdTczZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzFdW3BdXT00Mzc3NitwLGJbNDM3NzYrcF09X1sxNzFdW3BdKTtmb3IoX1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczZjhcdTczZjlcdTczZmFcdTczZmJcdTczZmNcdTczZmRcdTczZmVcdTczZmZcdTc0MDBcdTc0MDFcdTc0MDJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTFcdTc0MTJcdTc0MTNcdTc0MTRc'@;
put 'dTc0MTVcdTc0MTZcdTc0MTdcdTc0MThcdTc0MTlcdTc0MWNcdTc0MWRcdTc0MWVcdTc0MWZcdTc0MjBcdTc0MjFcdTc0MjNcdTc0MjRcdTc0MjdcdTc0MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFcdTc0MzJcdTc0MzdcdTc0MzhcdTc0MzlcdTc0M2FcdTc0M2JcdTc0M2RcdTc0M2VcdTc0'@;
put 'M2ZcdTc0NDBcdTc0NDJcdTc0NDNcdTc0NDRcdTc0NDVcdTc0NDZcdTc0NDdcdTc0NDhcdTc0NDlcdTc0NGFcdTc0NGJcdTc0NGNcdTc0NGRcdWZmZmRcdTc0NGVcdTc0NGZcdTc0NTBcdTc0NTFcdTc0NTJcdTc0NTNcdTc0NTRcdTc0NTZcdTc0NThcdTc0NWRcdTc0NjBcdTc0NjFcdTc0NjJc'@;
put 'dTc0NjNcdTc0NjRcdTc0NjVcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NjlcdTc0NmFcdTc0NmJcdTc0NmNcdTc0NmVcdTc0NmZcdTc0NzFcdTc0NzJcdTc0NzNcdTc0NzRcdTc0NzVcdTc0NzhcdTc0NzlcdTc0N2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzJdW3BdXT00NDAzMitwLGJbNDQwMzIrcF09X1sxNzJdW3BdKTtmb3IoX1sxNzNdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTFcdTc0OTJcdTc0OTNcdTc0OTRcdTc0OTVcdTc0OTZc'@;
put 'dTc0OTdcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWJcdTc0OWRcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTJcdTc0YTNcdTc0YTRcdTc0YTVcdTc0YTZcdTc0YWFcdTc0YWJcdTc0YWNcdTc0YWRcdTc0YWVcdTc0YWZcdTc0YjBcdTc0YjFcdTc0YjJcdTc0YjNcdTc0YjRcdTc0YjVcdTc0YjZcdTc0'@;
put 'YjdcdTc0YjhcdTc0YjlcdTc0YmJcdTc0YmNcdTc0YmRcdTc0YmVcdTc0YmZcdTc0YzBcdTc0YzFcdTc0YzJcdTc0YzNcdTc0YzRcdTc0YzVcdTc0YzZcdTc0YzdcdWZmZmRcdTc0YzhcdTc0YzlcdTc0Y2FcdTc0Y2JcdTc0Y2NcdTc0Y2RcdTc0Y2VcdTc0Y2ZcdTc0ZDBcdTc0ZDFcdTc0ZDNc'@;
put 'dTc0ZDRcdTc0ZDVcdTc0ZDZcdTc0ZDdcdTc0ZDhcdTc0ZDlcdTc0ZGFcdTc0ZGJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTdcdTc0ZThcdTc0ZTlcdTc0ZWFcdTc0ZWJcdTc0ZWNcdTc0ZWRcdTc0ZjBcdTc0ZjFcdTc0ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzNdW3BdXT00NDI4OCtwLGJbNDQyODgrcF09X1sxNzNdW3BdKTtmb3IoX1sxNzRd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjNcdTc0ZjVcdTc0ZjhcdTc0ZjlcdTc0ZmFcdTc0ZmJcdTc0ZmNcdTc0ZmRcdTc0ZmVcdTc1MDBcdTc1MDFcdTc1MDJcdTc1MDNcdTc1MDVcdTc1MDZcdTc1MDdcdTc1MDhcdTc1MDlc'@;
put 'dTc1MGFcdTc1MGJcdTc1MGNcdTc1MGVcdTc1MTBcdTc1MTJcdTc1MTRcdTc1MTVcdTc1MTZcdTc1MTdcdTc1MWJcdTc1MWRcdTc1MWVcdTc1MjBcdTc1MjFcdTc1MjJcdTc1MjNcdTc1MjRcdTc1MjZcdTc1MjdcdTc1MmFcdTc1MmVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M2NcdTc1M2RcdTc1'@;
put 'M2ZcdTc1NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1NGFcdTc1NGRcdTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVcdTc1NTZcdTc1NTdcdTc1NThcdWZmZmRcdTc1NWRcdTc1NWVcdTc1NWZcdTc1NjBcdTc1NjFcdTc1NjJcdTc1NjNcdTc1NjRcdTc1Njdc'@;
put 'dTc1NjhcdTc1NjlcdTc1NmJcdTc1NmNcdTc1NmRcdTc1NmVcdTc1NmZcdTc1NzBcdTc1NzFcdTc1NzNcdTc1NzVcdTc1NzZcdTc1NzdcdTc1N2FcdTc1N2JcdTc1N2NcdTc1N2RcdTc1N2VcdTc1ODBcdTc1ODFcdTc1ODJcdTc1ODRcdTc1ODVcdTc1ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzRdW3BdXT00NDU0NCtwLGJbNDQ1NDQrcF09X1sxNzRdW3Bd'@;
put 'KTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ODhcdTc1ODlcdTc1OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTZcdTc1YTdc'@;
put 'dTc1YThcdTc1YTlcdTc1YWFcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZcdTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1'@;
put 'ZTVcdTc1ZTlcdTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDdcdWZmZmRcdTc2MDhcdTc2MDlcdTc2MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFc'@;
put 'dTc2MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2MjhcdTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFcdTc2NDJcdTc2NDRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzVdW3BdXT00NDgwMCtwLGJbNDQ4MDAr'@;
put 'cF09X1sxNzVdW3BdKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NDVcdTc2NDZcdTc2NDdcdTc2NDhcdTc2NDlcdTc2NGFcdTc2NGJcdTc2NGVcdTc2NGZcdTc2NTBcdTc2NTFcdTc2NTJcdTc2NTNcdTc2NTVc'@;
put 'dTc2NTdcdTc2NThcdTc2NTlcdTc2NWFcdTc2NWJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjRcdTc2NjVcdTc2NjZcdTc2NjdcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzBcdTc2NzFcdTc2NzJcdTc2NzNcdTc2NzRcdTc2NzVcdTc2NzZcdTc2'@;
put 'NzdcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWJcdWZmZmRcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWZcdTc2YTBc'@;
put 'dTc2YTFcdTc2YTJcdTc2YTNcdTc2YTVcdTc2YTZcdTc2YTdcdTc2YThcdTc2YTlcdTc2YWFcdTc2YWJcdTc2YWNcdTc2YWRcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjVcdTc2YjZcdTc2YjdcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YmJcdTc2YmNcdTc2YmRcdTc2YmVcdTc2YzBcdTc2YzFcdTc2'@;
put 'YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2Vc'@;
put 'dTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2'@;
put 'N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBc'@;
put 'dTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzZdW3BdXT00NTA1'@;
put 'NitwLGJbNDUwNTYrcF09X1sxNzZdW3BdKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2YzRcdTc2YzdcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2ZDNcdTc2ZDVcdTc2ZDlcdTc2ZGFcdTc2ZGNcdTc2ZGRcdTc2ZGVc'@;
put 'dTc2ZTBcdTc2ZTFcdTc2ZTJcdTc2ZTNcdTc2ZTRcdTc2ZTZcdTc2ZTdcdTc2ZThcdTc2ZTlcdTc2ZWFcdTc2ZWJcdTc2ZWNcdTc2ZWRcdTc2ZjBcdTc2ZjNcdTc2ZjVcdTc2ZjZcdTc2ZjdcdTc2ZmFcdTc2ZmJcdTc2ZmRcdTc2ZmZcdTc3MDBcdTc3MDJcdTc3MDNcdTc3MDVcdTc3MDZcdTc3'@;
put 'MGFcdTc3MGNcdTc3MGVcdTc3MGZcdTc3MTBcdTc3MTFcdTc3MTJcdTc3MTNcdTc3MTRcdTc3MTVcdTc3MTZcdTc3MTdcdTc3MThcdTc3MWJcdTc3MWNcdTc3MWRcdTc3MWVcdTc3MjFcdTc3MjNcdTc3MjRcdTc3MjVcdTc3MjdcdTc3MmFcdTc3MmJcdWZmZmRcdTc3MmNcdTc3MmVcdTc3MzBc'@;
put 'dTc3MzFcdTc3MzJcdTc3MzNcdTc3MzRcdTc3MzlcdTc3M2JcdTc3M2RcdTc3M2VcdTc3M2ZcdTc3NDJcdTc3NDRcdTc3NDVcdTc3NDZcdTc3NDhcdTc3NDlcdTc3NGFcdTc3NGJcdTc3NGNcdTc3NGRcdTc3NGVcdTc3NGZcdTc3NTJcdTc3NTNcdTc3NTRcdTc3NTVcdTc3NTZcdTc3NTdcdTc3'@;
put 'NThcdTc3NTlcdTc3NWNcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJc'@;
put 'dTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1'@;
put 'ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJc'@;
put 'dTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sx'@;
put 'NzddW3BdXT00NTMxMitwLGJbNDUzMTIrcF09X1sxNzddW3BdKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3NmRcdTc3NmVc'@;
put 'dTc3NmZcdTc3NzBcdTc3NzFcdTc3NzJcdTc3NzNcdTc3NzRcdTc3NzVcdTc3NzZcdTc3NzdcdTc3NzhcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODZcdTc3ODdcdTc3ODhcdTc3ODlcdTc3OGFcdTc3OGJcdTc3OGZcdTc3OTBcdTc3OTNcdTc3OTRcdTc3OTVcdTc3'@;
put 'OTZcdTc3OTdcdTc3OThcdTc3OTlcdTc3OWFcdTc3OWJcdTc3OWNcdTc3OWRcdTc3OWVcdTc3YTFcdTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjJcdTc3YjRcdTc3YjZcdTc3YjdcdTc3YjhcdTc3YjlcdTc3YmFcdWZmZmRcdTc3YmNc'@;
put 'dTc3YmVcdTc3YzBcdTc3YzFcdTc3YzJcdTc3YzNcdTc3YzRcdTc3YzVcdTc3YzZcdTc3YzdcdTc3YzhcdTc3YzlcdTc3Y2FcdTc3Y2JcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3ZDBcdTc3ZDFcdTc3ZDJcdTc3ZDNcdTc3ZDRcdTc3ZDVcdTc3ZDZcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGRcdTc3'@;
put 'ZGVcdTc3ZGZcdTc3ZTBcdTc3ZTFcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNc'@;
put 'dTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcw'@;
put 'N2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVc'@;
put 'dThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OF1bcF0uY2hhckNvZGVB'@;
put 'dCgwKSYmKERbX1sxNzhdW3BdXT00NTU2OCtwLGJbNDU1NjgrcF09X1sxNzhdW3BdKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRc'@;
put 'dTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDNcdTc4MDRcdTc4MDVcdTc4MDZcdTc4MDdcdTc4MDhcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4'@;
put 'MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWFc'@;
put 'dWZmZmRcdTc4NWJcdTc4NWNcdTc4NWVcdTc4NWZcdTc4NjBcdTc4NjFcdTc4NjJcdTc4NjNcdTc4NjRcdTc4NjVcdTc4NjZcdTc4NjdcdTc4NjhcdTc4NjlcdTc4NmZcdTc4NzBcdTc4NzFcdTc4NzJcdTc4NzNcdTc4NzRcdTc4NzVcdTc4NzZcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4'@;
put 'N2RcdTc4N2VcdTc4N2ZcdTc4ODBcdTc4ODFcdTc4ODJcdTc4ODNcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZc'@;
put 'dTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkw'@;
put 'MWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNc'@;
put 'dTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OV1b'@;
put 'cF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzldW3BdXT00NTgyNCtwLGJbNDU4MjQrcF09X1sxNzldW3BdKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ODRcdTc4ODVcdTc4ODZcdTc4ODhcdTc4OGFcdTc4OGJc'@;
put 'dTc4OGZcdTc4OTBcdTc4OTJcdTc4OTRcdTc4OTVcdTc4OTZcdTc4OTlcdTc4OWRcdTc4OWVcdTc4YTBcdTc4YTJcdTc4YTRcdTc4YTZcdTc4YThcdTc4YTlcdTc4YWFcdTc4YWJcdTc4YWNcdTc4YWRcdTc4YWVcdTc4YWZcdTc4YjVcdTc4YjZcdTc4YjdcdTc4YjhcdTc4YmFcdTc4YmJcdTc4'@;
put 'YmNcdTc4YmRcdTc4YmZcdTc4YzBcdTc4YzJcdTc4YzNcdTc4YzRcdTc4YzZcdTc4YzdcdTc4YzhcdTc4Y2NcdTc4Y2RcdTc4Y2VcdTc4Y2ZcdTc4ZDFcdTc4ZDJcdTc4ZDNcdTc4ZDZcdTc4ZDdcdTc4ZDhcdTc4ZGFcdTc4ZGJcdTc4ZGNcdTc4ZGRcdTc4ZGVcdTc4ZGZcdTc4ZTBcdTc4ZTFc'@;
put 'dTc4ZTJcdTc4ZTNcdWZmZmRcdTc4ZTRcdTc4ZTVcdTc4ZTZcdTc4ZTdcdTc4ZTlcdTc4ZWFcdTc4ZWJcdTc4ZWRcdTc4ZWVcdTc4ZWZcdTc4ZjBcdTc4ZjFcdTc4ZjNcdTc4ZjVcdTc4ZjZcdTc4ZjhcdTc4ZjlcdTc4ZmJcdTc4ZmNcdTc4ZmRcdTc4ZmVcdTc4ZmZcdTc5MDBcdTc5MDJcdTc5'@;
put 'MDNcdTc5MDRcdTc5MDZcdTc5MDdcdTc5MDhcdTc5MDlcdTc5MGFcdTc5MGJcdTc5MGNcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZc'@;
put 'dTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgw'@;
put 'NmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNc'@;
put 'dTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODBdLmxlbmd0aDsrK3ApNjU1'@;
put 'MzMhPT1fWzE4MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODBdW3BdXT00NjA4MCtwLGJbNDYwODArcF09X1sxODBdW3BdKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MGRcdTc5MGVcdTc5MGZcdTc5MTBc'@;
put 'dTc5MTFcdTc5MTJcdTc5MTRcdTc5MTVcdTc5MTZcdTc5MTdcdTc5MThcdTc5MTlcdTc5MWFcdTc5MWJcdTc5MWNcdTc5MWRcdTc5MWZcdTc5MjBcdTc5MjFcdTc5MjJcdTc5MjNcdTc5MjVcdTc5MjZcdTc5MjdcdTc5MjhcdTc5MjlcdTc5MmFcdTc5MmJcdTc5MmNcdTc5MmRcdTc5MmVcdTc5'@;
put 'MmZcdTc5MzBcdTc5MzFcdTc5MzJcdTc5MzNcdTc5MzVcdTc5MzZcdTc5MzdcdTc5MzhcdTc5MzlcdTc5M2RcdTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGFcdTc5NGJcdTc5NGNcdTc5NGRcdTc5NGVcdTc5NGZcdTc5NTBcdTc5NTFcdTc5NTJcdTc5NTRcdTc5NTVc'@;
put 'dTc5NThcdTc5NTlcdTc5NjFcdTc5NjNcdWZmZmRcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNcdTc5NmVcdTc5NzBcdTc5NzFcdTc5NzJcdTc5NzNcdTc5NzRcdTc5NzVcdTc5NzZcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2RcdTc5N2VcdTc5N2ZcdTc5ODJcdTc5ODNcdTc5'@;
put 'ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNc'@;
put 'dTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRm'@;
put 'NGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNc'@;
put 'dTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODFdLmxl'@;
put 'bmd0aDsrK3ApNjU1MzMhPT1fWzE4MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODFdW3BdXT00NjMzNitwLGJbNDYzMzYrcF09X1sxODFdW3BdKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTNcdTc5OTRc'@;
put 'dTc5OTVcdTc5OTZcdTc5OTdcdTc5OThcdTc5OTlcdTc5OWJcdTc5OWNcdTc5OWRcdTc5OWVcdTc5OWZcdTc5YTBcdTc5YTFcdTc5YTJcdTc5YTNcdTc5YTRcdTc5YTVcdTc5YTZcdTc5YThcdTc5YTlcdTc5YWFcdTc5YWJcdTc5YWNcdTc5YWRcdTc5YWVcdTc5YWZcdTc5YjBcdTc5YjFcdTc5'@;
put 'YjJcdTc5YjRcdTc5YjVcdTc5YjZcdTc5YjdcdTc5YjhcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDlcdTc5ZGFcdTc5ZGJcdTc5ZGNcdTc5ZGRcdTc5ZGVc'@;
put 'dTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWFcdWZmZmRcdTc5ZWNcdTc5ZWVcdTc5ZjFcdTc5ZjJcdTc5ZjNcdTc5ZjRcdTc5ZjVcdTc5ZjZcdTc5ZjdcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdh'@;
put 'MGFcdTdhMGNcdTdhMGZcdTdhMTBcdTdhMTFcdTdhMTJcdTdhMTNcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThc'@;
put 'dTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdh'@;
put 'ZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVc'@;
put 'dTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7'@;
put 'cCE9X1sxODJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODJdW3BdXT00NjU5MitwLGJbNDY1OTIrcF09X1sxODJdW3BdKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTdhMWRcdTdhMWZcdTdhMjFcdTdhMjJcdTdhMjRcdTdhMjVcdTdhMjZcdTdhMjdcdTdhMjhcdTdhMjlcdTdhMmFcdTdhMmJcdTdhMmNcdTdhMmRcdTdhMmVcdTdhMmZcdTdhMzBcdTdhMzFcdTdhMzJcdTdhMzRcdTdhMzVcdTdhMzZcdTdhMzhcdTdhM2FcdTdhM2VcdTdhNDBcdTdhNDFcdTdh'@;
put 'NDJcdTdhNDNcdTdhNDRcdTdhNDVcdTdhNDdcdTdhNDhcdTdhNDlcdTdhNGFcdTdhNGJcdTdhNGNcdTdhNGRcdTdhNGVcdTdhNGZcdTdhNTBcdTdhNTJcdTdhNTNcdTdhNTRcdTdhNTVcdTdhNTZcdTdhNThcdTdhNTlcdTdhNWFcdTdhNWJcdTdhNWNcdTdhNWRcdTdhNWVcdTdhNWZcdTdhNjBc'@;
put 'dTdhNjFcdTdhNjJcdTdhNjNcdTdhNjRcdTdhNjVcdTdhNjZcdTdhNjdcdTdhNjhcdWZmZmRcdTdhNjlcdTdhNmFcdTdhNmJcdTdhNmNcdTdhNmRcdTdhNmVcdTdhNmZcdTdhNzFcdTdhNzJcdTdhNzNcdTdhNzVcdTdhN2JcdTdhN2NcdTdhN2RcdTdhN2VcdTdhODJcdTdhODVcdTdhODdcdTdh'@;
put 'ODlcdTdhOGFcdTdhOGJcdTdhOGNcdTdhOGVcdTdhOGZcdTdhOTBcdTdhOTNcdTdhOTRcdTdhOTlcdTdhOWFcdTdhOWJcdTdhOWVcdTdhYTFcdTdhYTJcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJc'@;
put 'dTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4'@;
put 'ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJc'@;
put 'dTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxwPTA7cCE9X1sxODNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODNdW3BdXT00Njg0OCtwLGJbNDY4NDgrcF09X1sxODNdW3BdKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWVcdTdhYWZcdTdhYjBcdTdhYjFcdTdhYjJcdTdhYjRcdTdhYjVcdTdhYjZcdTdhYjdcdTdhYjhcdTdhYjlcdTdhYmFcdTdhYmJcdTdhYmNcdTdhYmRcdTdhYmVcdTdhYzBcdTdhYzFcdTdhYzJcdTdh'@;
put 'YzNcdTdhYzRcdTdhYzVcdTdhYzZcdTdhYzdcdTdhYzhcdTdhYzlcdTdhY2FcdTdhY2NcdTdhY2RcdTdhY2VcdTdhY2ZcdTdhZDBcdTdhZDFcdTdhZDJcdTdhZDNcdTdhZDRcdTdhZDVcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTdc'@;
put 'dTdhZThcdTdhZTlcdTdhZWFcdTdhZWJcdTdhZWNcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjNcdWZmZmRcdTdhZjRcdTdhZjVcdTdhZjZcdTdhZjdcdTdhZjhcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdi'@;
put 'MGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdc'@;
put 'dTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2'@;
put 'ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVc'@;
put 'dTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdm'@;
put 'YjlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODRdW3BdXT00NzEwNCtwLGJbNDcxMDQrcF09X1sxODRdW3BdKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDJcdTdiNDNcdTdiNDRcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdi'@;
put 'NTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjNcdTdiNjRcdTdiNjVcdTdiNjZcdTdiNjdcdTdiNjhcdTdiNjlcdTdiNmFcdTdiNmJcdTdiNmNcdTdiNmRcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFc'@;
put 'dTdiODJcdTdiODNcdTdiODRcdTdiODZcdTdiODdcdTdiODhcdTdiODlcdTdiOGFcdTdiOGJcdTdiOGNcdTdiOGVcdTdiOGZcdWZmZmRcdTdiOTFcdTdiOTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdi'@;
put 'YWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjlcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYmVcdTdiYmZcdTdiYzBcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJc'@;
put 'dThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUz'@;
put 'ZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNc'@;
put 'dThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4'@;
put 'ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODVdW3BdXT00NzM2MCtwLGJbNDczNjArcF09X1sxODVdW3BdKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiYzVcdTdiYzhcdTdiYzlcdTdiY2FcdTdiY2JcdTdiY2RcdTdiY2VcdTdiY2ZcdTdiZDBcdTdiZDJcdTdiZDRcdTdiZDVcdTdiZDZcdTdiZDdcdTdiZDhcdTdiZGJcdTdiZGNcdTdiZGVcdTdiZGZcdTdiZTBcdTdiZTJcdTdi'@;
put 'ZTNcdTdiZTRcdTdiZTdcdTdiZThcdTdiZTlcdTdiZWJcdTdiZWNcdTdiZWRcdTdiZWZcdTdiZjBcdTdiZjJcdTdiZjNcdTdiZjRcdTdiZjVcdTdiZjZcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmJcdTdiZmRcdTdiZmZcdTdjMDBcdTdjMDFcdTdjMDJcdTdjMDNcdTdjMDRcdTdjMDVcdTdjMDZc'@;
put 'dTdjMDhcdTdjMDlcdTdjMGFcdTdjMGRcdTdjMGVcdTdjMTBcdTdjMTFcdTdjMTJcdTdjMTNcdTdjMTRcdTdjMTVcdTdjMTdcdTdjMThcdTdjMTlcdWZmZmRcdTdjMWFcdTdjMWJcdTdjMWNcdTdjMWRcdTdjMWVcdTdjMjBcdTdjMjFcdTdjMjJcdTdjMjNcdTdjMjRcdTdjMjVcdTdjMjhcdTdj'@;
put 'MjlcdTdjMmJcdTdjMmNcdTdjMmRcdTdjMmVcdTdjMmZcdTdjMzBcdTdjMzFcdTdjMzJcdTdjMzNcdTdjMzRcdTdjMzVcdTdjMzZcdTdjMzdcdTdjMzlcdTdjM2FcdTdjM2JcdTdjM2NcdTdjM2RcdTdjM2VcdTdjNDJcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdc'@;
put 'dTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5'@;
put 'N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhc'@;
put 'dTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgw'@;
put 'ZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODZdW3BdXT00NzYxNitwLGJbNDc2MTYrcF09X1sxODZdW3BdKTtmb3IoX1sxODddPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjNDNcdTdjNDRcdTdjNDVcdTdjNDZcdTdjNDdcdTdjNDhcdTdjNDlcdTdjNGFcdTdjNGJcdTdjNGNcdTdjNGVcdTdjNGZcdTdjNTBcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTRcdTdjNTVcdTdjNTZcdTdj'@;
put 'NTdcdTdjNThcdTdjNTlcdTdjNWFcdTdjNWJcdTdjNWNcdTdjNWRcdTdjNWVcdTdjNWZcdTdjNjBcdTdjNjFcdTdjNjJcdTdjNjNcdTdjNjRcdTdjNjVcdTdjNjZcdTdjNjdcdTdjNjhcdTdjNjlcdTdjNmFcdTdjNmJcdTdjNmNcdTdjNmRcdTdjNmVcdTdjNmZcdTdjNzBcdTdjNzFcdTdjNzJc'@;
put 'dTdjNzVcdTdjNzZcdTdjNzdcdTdjNzhcdTdjNzlcdTdjN2FcdTdjN2VcdTdjN2ZcdTdjODBcdTdjODFcdTdjODJcdTdjODNcdTdjODRcdTdjODVcdTdjODZcdTdjODdcdWZmZmRcdTdjODhcdTdjOGFcdTdjOGJcdTdjOGNcdTdjOGRcdTdjOGVcdTdjOGZcdTdjOTBcdTdjOTNcdTdjOTRcdTdj'@;
put 'OTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlcdTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjRcdTdjYjVcdTdjYjZcdTdjYjdcdTdjYjhcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJc'@;
put 'dTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZk'@;
put 'YTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlc'@;
put 'dTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3'@;
put 'M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODddW3BdXT00Nzg3MitwLGJbNDc4NzIrcF09X1sxODddW3BdKTtmb3IoX1sx'@;
put 'ODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2VcdTdjY2ZcdTdjZDBcdTdjZDFcdTdjZDJcdTdjZDNcdTdjZDRcdTdjZDhcdTdjZGFcdTdj'@;
put 'ZGJcdTdjZGRcdTdjZGVcdTdjZTFcdTdjZTJcdTdjZTNcdTdjZTRcdTdjZTVcdTdjZTZcdTdjZTdcdTdjZTlcdTdjZWFcdTdjZWJcdTdjZWNcdTdjZWRcdTdjZWVcdTdjZjBcdTdjZjFcdTdjZjJcdTdjZjNcdTdjZjRcdTdjZjVcdTdjZjZcdTdjZjdcdTdjZjlcdTdjZmFcdTdjZmNcdTdjZmRc'@;
put 'dTdjZmVcdTdjZmZcdTdkMDBcdTdkMDFcdTdkMDJcdTdkMDNcdTdkMDRcdTdkMDVcdTdkMDZcdTdkMDdcdTdkMDhcdTdkMDlcdTdkMGJcdTdkMGNcdTdkMGRcdTdkMGVcdTdkMGZcdTdkMTBcdWZmZmRcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTRcdTdkMTVcdTdkMTZcdTdkMTdcdTdkMThcdTdk'@;
put 'MTlcdTdkMWFcdTdkMWJcdTdkMWNcdTdkMWRcdTdkMWVcdTdkMWZcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRcdTdkMmVcdTdkMzBcdTdkMzFcdTdkMzJcdTdkMzNcdTdkMzRcdTdkMzVcdTdkMzZcdTgwOGNcdTk5NjVcdThmZjlc'@;
put 'dTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRm'@;
put 'MGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2Nc'@;
put 'dTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgz'@;
put 'NTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODhdW3BdXT00ODEyOCtwLGJbNDgxMjgrcF09X1sxODhd'@;
put 'W3BdKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMzdcdTdkMzhcdTdkMzlcdTdkM2FcdTdkM2JcdTdkM2NcdTdkM2RcdTdkM2VcdTdkM2ZcdTdkNDBcdTdkNDFcdTdkNDJcdTdkNDNcdTdkNDRcdTdkNDVcdTdk'@;
put 'NDZcdTdkNDdcdTdkNDhcdTdkNDlcdTdkNGFcdTdkNGJcdTdkNGNcdTdkNGRcdTdkNGVcdTdkNGZcdTdkNTBcdTdkNTFcdTdkNTJcdTdkNTNcdTdkNTRcdTdkNTVcdTdkNTZcdTdkNTdcdTdkNThcdTdkNTlcdTdkNWFcdTdkNWJcdTdkNWNcdTdkNWRcdTdkNWVcdTdkNWZcdTdkNjBcdTdkNjFc'@;
put 'dTdkNjJcdTdkNjNcdTdkNjRcdTdkNjVcdTdkNjZcdTdkNjdcdTdkNjhcdTdkNjlcdTdkNmFcdTdkNmJcdTdkNmNcdTdkNmRcdTdkNmZcdTdkNzBcdTdkNzFcdTdkNzJcdTdkNzNcdTdkNzRcdTdkNzVcdTdkNzZcdWZmZmRcdTdkNzhcdTdkNzlcdTdkN2FcdTdkN2JcdTdkN2NcdTdkN2RcdTdk'@;
put 'N2VcdTdkN2ZcdTdkODBcdTdkODFcdTdkODJcdTdkODNcdTdkODRcdTdkODVcdTdkODZcdTdkODdcdTdkODhcdTdkODlcdTdkOGFcdTdkOGJcdTdkOGNcdTdkOGRcdTdkOGVcdTdkOGZcdTdkOTBcdTdkOTFcdTdkOTJcdTdkOTNcdTdkOTRcdTdkOTVcdTdkOTZcdTdkOTdcdTdkOThcdTUwNjVc'@;
put 'dTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZk'@;
put 'NDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFc'@;
put 'dTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdk'@;
put 'MjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODldW3BdXT00ODM4NCtwLGJbNDgz'@;
put 'ODQrcF09X1sxODldW3BdKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkOTlcdTdkOWFcdTdkOWJcdTdkOWNcdTdkOWRcdTdkOWVcdTdkOWZcdTdkYTBcdTdkYTFcdTdkYTJcdTdkYTNcdTdkYTRcdTdkYTVcdTdk'@;
put 'YTdcdTdkYThcdTdkYTlcdTdkYWFcdTdkYWJcdTdkYWNcdTdkYWRcdTdkYWZcdTdkYjBcdTdkYjFcdTdkYjJcdTdkYjNcdTdkYjRcdTdkYjVcdTdkYjZcdTdkYjdcdTdkYjhcdTdkYjlcdTdkYmFcdTdkYmJcdTdkYmNcdTdkYmRcdTdkYmVcdTdkYmZcdTdkYzBcdTdkYzFcdTdkYzJcdTdkYzNc'@;
put 'dTdkYzRcdTdkYzVcdTdkYzZcdTdkYzdcdTdkYzhcdTdkYzlcdTdkY2FcdTdkY2JcdTdkY2NcdTdkY2RcdTdkY2VcdTdkY2ZcdTdkZDBcdTdkZDFcdTdkZDJcdTdkZDNcdTdkZDRcdTdkZDVcdTdkZDZcdTdkZDdcdTdkZDhcdTdkZDlcdWZmZmRcdTdkZGFcdTdkZGJcdTdkZGNcdTdkZGRcdTdk'@;
put 'ZGVcdTdkZGZcdTdkZTBcdTdkZTFcdTdkZTJcdTdkZTNcdTdkZTRcdTdkZTVcdTdkZTZcdTdkZTdcdTdkZThcdTdkZTlcdTdkZWFcdTdkZWJcdTdkZWNcdTdkZWRcdTdkZWVcdTdkZWZcdTdkZjBcdTdkZjFcdTdkZjJcdTdkZjNcdTdkZjRcdTdkZjVcdTdkZjZcdTdkZjdcdTdkZjhcdTdkZjlc'@;
put 'dTdkZmFcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUx'@;
put 'YzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBc'@;
put 'dTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYz'@;
put 'OThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTBdW3BdXT00'@;
put 'ODY0MCtwLGJbNDg2NDArcF09X1sxOTBdW3BdKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkZmJcdTdkZmNcdTdkZmRcdTdkZmVcdTdkZmZcdTdlMDBcdTdlMDFcdTdlMDJcdTdlMDNcdTdlMDRcdTdlMDVcdTdl'@;
put 'MDZcdTdlMDdcdTdlMDhcdTdlMDlcdTdlMGFcdTdlMGJcdTdlMGNcdTdlMGRcdTdlMGVcdTdlMGZcdTdlMTBcdTdlMTFcdTdlMTJcdTdlMTNcdTdlMTRcdTdlMTVcdTdlMTZcdTdlMTdcdTdlMThcdTdlMTlcdTdlMWFcdTdlMWJcdTdlMWNcdTdlMWRcdTdlMWVcdTdlMWZcdTdlMjBcdTdlMjFc'@;
put 'dTdlMjJcdTdlMjNcdTdlMjRcdTdlMjVcdTdlMjZcdTdlMjdcdTdlMjhcdTdlMjlcdTdlMmFcdTdlMmJcdTdlMmNcdTdlMmRcdTdlMmVcdTdlMmZcdTdlMzBcdTdlMzFcdTdlMzJcdTdlMzNcdTdlMzRcdTdlMzVcdTdlMzZcdTdlMzdcdTdlMzhcdTdlMzlcdWZmZmRcdTdlM2FcdTdlM2NcdTdl'@;
put 'M2RcdTdlM2VcdTdlM2ZcdTdlNDBcdTdlNDJcdTdlNDNcdTdlNDRcdTdlNDVcdTdlNDZcdTdlNDhcdTdlNDlcdTdlNGFcdTdlNGJcdTdlNGNcdTdlNGRcdTdlNGVcdTdlNGZcdTdlNTBcdTdlNTFcdTdlNTJcdTdlNTNcdTdlNTRcdTdlNTVcdTdlNTZcdTdlNTdcdTdlNThcdTdlNTlcdTdlNWFc'@;
put 'dTdlNWJcdTdlNWNcdTdlNWRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYy'@;
put 'OTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRc'@;
put 'dTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdi'@;
put 'NTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MV1bcF0uY2hhckNvZGVBdCgwKSYmKERb'@;
put 'X1sxOTFdW3BdXT00ODg5NitwLGJbNDg4OTYrcF09X1sxOTFdW3BdKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNWVcdTdlNWZcdTdlNjBcdTdlNjFcdTdlNjJcdTdlNjNcdTdlNjRcdTdlNjVcdTdlNjZcdTdl'@;
put 'NjdcdTdlNjhcdTdlNjlcdTdlNmFcdTdlNmJcdTdlNmNcdTdlNmRcdTdlNmVcdTdlNmZcdTdlNzBcdTdlNzFcdTdlNzJcdTdlNzNcdTdlNzRcdTdlNzVcdTdlNzZcdTdlNzdcdTdlNzhcdTdlNzlcdTdlN2FcdTdlN2JcdTdlN2NcdTdlN2RcdTdlN2VcdTdlN2ZcdTdlODBcdTdlODFcdTdlODNc'@;
put 'dTdlODRcdTdlODVcdTdlODZcdTdlODdcdTdlODhcdTdlODlcdTdlOGFcdTdlOGJcdTdlOGNcdTdlOGRcdTdlOGVcdTdlOGZcdTdlOTBcdTdlOTFcdTdlOTJcdTdlOTNcdTdlOTRcdTdlOTVcdTdlOTZcdTdlOTdcdTdlOThcdTdlOTlcdTdlOWFcdTdlOWNcdTdlOWRcdTdlOWVcdWZmZmRcdTdl'@;
put 'YWVcdTdlYjRcdTdlYmJcdTdlYmNcdTdlZDZcdTdlZTRcdTdlZWNcdTdlZjlcdTdmMGFcdTdmMTBcdTdmMWVcdTdmMzdcdTdmMzlcdTdmM2JcdTdmM2NcdTdmM2RcdTdmM2VcdTdmM2ZcdTdmNDBcdTdmNDFcdTdmNDNcdTdmNDZcdTdmNDdcdTdmNDhcdTdmNDlcdTdmNGFcdTdmNGJcdTdmNGNc'@;
put 'dTdmNGRcdTdmNGVcdTdmNGZcdTdmNTJcdTdmNTNcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVh'@;
put 'NmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFc'@;
put 'dTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3'@;
put 'NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Ml1bcF0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKERbX1sxOTJdW3BdXT00OTE1MitwLGJbNDkxNTIrcF09X1sxOTJdW3BdKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdm'@;
put 'NjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNjdcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2FcdTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdmODJcdTdmODNcdTdmODRcdTdmODVcdTdmODZcdTdmODdcdTdmODhc'@;
put 'dTdmODlcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdmOTJcdTdmOTNcdTdmOTVcdTdmOTZcdTdmOTdcdTdmOThcdTdmOTlcdTdmOWJcdTdmOWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYThcdTdmYTlcdTdmYWFcdTdmYWJcdTdmYWNcdTdmYWRcdTdmYWVcdTdm'@;
put 'YjFcdWZmZmRcdTdmYjNcdTdmYjRcdTdmYjVcdTdmYjZcdTdmYjdcdTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJcdTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2ZcdTdmZDBcdTdmZDFcdTdmZDJcdTdmZDNcdTdmZDZcdTdmZDdcdTdmZDlc'@;
put 'dTdmZGFcdTdmZGJcdTdmZGNcdTdmZGRcdTdmZGVcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYw'@;
put 'NGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdc'@;
put 'dTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4'@;
put 'ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5'@;
put 'M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTNdW3BdXT00OTQwOCtwLGJbNDk0MDgrcF09X1sxOTNdW3BdKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdm'@;
put 'ZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjRcdTdmZjVcdTdmZjZcdTdmZjdcdTdmZjhcdTdmZjlcdTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRcdTgwMWVcdTgwMWZc'@;
put 'dTgwMjFcdTgwMjNcdTgwMjRcdTgwMmJcdTgwMmNcdTgwMmRcdTgwMmVcdTgwMmZcdTgwMzBcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgw'@;
put 'NTVcdTgwNTZcdTgwNTdcdWZmZmRcdTgwNTlcdTgwNWJcdTgwNWNcdTgwNWRcdTgwNWVcdTgwNWZcdTgwNjBcdTgwNjFcdTgwNjJcdTgwNjNcdTgwNjRcdTgwNjVcdTgwNjZcdTgwNjdcdTgwNjhcdTgwNmJcdTgwNmNcdTgwNmRcdTgwNmVcdTgwNmZcdTgwNzBcdTgwNzJcdTgwNzNcdTgwNzRc'@;
put 'dTgwNzVcdTgwNzZcdTgwNzdcdTgwNzhcdTgwNzlcdTgwN2FcdTgwN2JcdTgwN2NcdTgwN2RcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTlj'@;
put 'ODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJc'@;
put 'dTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTcz'@;
put 'OWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTRdLmxlbmd0aDsrK3Ap'@;
put 'NjU1MzMhPT1fWzE5NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTRdW3BdXT00OTY2NCtwLGJbNDk2NjQrcF09X1sxOTRdW3BdKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwN2VcdTgwODFcdTgwODJcdTgw'@;
put 'ODVcdTgwODhcdTgwOGFcdTgwOGRcdTgwOGVcdTgwOGZcdTgwOTBcdTgwOTFcdTgwOTJcdTgwOTRcdTgwOTVcdTgwOTdcdTgwOTlcdTgwOWVcdTgwYTNcdTgwYTZcdTgwYTdcdTgwYThcdTgwYWNcdTgwYjBcdTgwYjNcdTgwYjVcdTgwYjZcdTgwYjhcdTgwYjlcdTgwYmJcdTgwYzVcdTgwYzdc'@;
put 'dTgwYzhcdTgwYzlcdTgwY2FcdTgwY2JcdTgwY2ZcdTgwZDBcdTgwZDFcdTgwZDJcdTgwZDNcdTgwZDRcdTgwZDVcdTgwZDhcdTgwZGZcdTgwZTBcdTgwZTJcdTgwZTNcdTgwZTZcdTgwZWVcdTgwZjVcdTgwZjdcdTgwZjlcdTgwZmJcdTgwZmVcdTgwZmZcdTgxMDBcdTgxMDFcdTgxMDNcdTgx'@;
put 'MDRcdTgxMDVcdTgxMDdcdTgxMDhcdTgxMGJcdWZmZmRcdTgxMGNcdTgxMTVcdTgxMTdcdTgxMTlcdTgxMWJcdTgxMWNcdTgxMWRcdTgxMWZcdTgxMjBcdTgxMjFcdTgxMjJcdTgxMjNcdTgxMjRcdTgxMjVcdTgxMjZcdTgxMjdcdTgxMjhcdTgxMjlcdTgxMmFcdTgxMmJcdTgxMmRcdTgxMmVc'@;
put 'dTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdcdTgxMzlcdTgxM2FcdTgxM2JcdTgxM2NcdTgxM2RcdTgxM2ZcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVl'@;
put 'M2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBc'@;
put 'dTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYz'@;
put 'Y2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTVd'@;
put 'Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTVdW3BdXT00OTkyMCtwLGJbNDk5MjArcF09X1sxOTVdW3BdKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDBcdTgx'@;
put 'NDFcdTgxNDJcdTgxNDNcdTgxNDRcdTgxNDVcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWJcdTgxNWNcdTgxNWRcdTgxNWVcdTgxNWZcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNc'@;
put 'dTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODNcdTgxODRcdTgxODVcdTgxODZcdTgxODdcdTgxODlcdTgxOGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTJcdTgxOTNcdTgxOTRcdTgxOTVcdTgxOTZcdTgxOTdcdTgxOTlcdTgxOWFcdTgx'@;
put 'OWVcdTgxOWZcdTgxYTBcdTgxYTFcdTgxYTJcdTgxYTRcdTgxYTVcdWZmZmRcdTgxYTdcdTgxYTlcdTgxYWJcdTgxYWNcdTgxYWRcdTgxYWVcdTgxYWZcdTgxYjBcdTgxYjFcdTgxYjJcdTgxYjRcdTgxYjVcdTgxYjZcdTgxYjdcdTgxYjhcdTgxYjlcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZc'@;
put 'dTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2RcdTgxY2VcdTgxY2ZcdTgxZDBcdTgxZDFcdTgxZDJcdTgxZDNcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTVi'@;
put 'ZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZc'@;
put 'dTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkw'@;
put 'MDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxw'@;
put 'PTA7cCE9X1sxOTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTZdW3BdXT01MDE3NitwLGJbNTAxNzYrcF09X1sxOTZdW3BdKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTgxZDRcdTgxZDVcdTgxZDZcdTgxZDdcdTgxZDhcdTgxZDlcdTgxZGFcdTgxZGJcdTgxZGNcdTgxZGRcdTgxZGVcdTgxZGZcdTgxZTBcdTgxZTFcdTgxZTJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWVcdTgxZWZcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVc'@;
put 'dTgxZjZcdTgxZjdcdTgxZjhcdTgxZjlcdTgxZmFcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDdcdTgyMDhcdTgyMDlcdTgyMGFcdTgyMGJcdTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTVcdTgyMTZcdTgyMTdcdTgyMThcdTgyMTlcdTgyMWFcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgy'@;
put 'MjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2ZcdWZmZmRcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTBcdTgyNTFcdTgyNTJcdTgyNTNcdTgyNTRcdTgyNTVcdTgyNTZc'@;
put 'dTgyNTdcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjBcdTgyNjFcdTgyNjJcdTgyNjNcdTgyNjRcdTgyNjVcdTgyNjZcdTgyNjdcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYw'@;
put 'MTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNc'@;
put 'dTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkx'@;
put 'NGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxwPTA7cCE9X1sxOTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTddW3BdXT01MDQzMitwLGJbNTA0MzIrcF09X1sxOTddW3BdKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTgyNmFcdTgyNmJcdTgyNmNcdTgyNmRcdTgyNzFcdTgyNzVcdTgyNzZcdTgyNzdcdTgyNzhcdTgyN2JcdTgyN2NcdTgyODBcdTgyODFcdTgyODNcdTgyODVcdTgyODZcdTgyODdcdTgyODlcdTgyOGNcdTgyOTBcdTgyOTNcdTgyOTRcdTgyOTVcdTgyOTZcdTgyOWFc'@;
put 'dTgyOWJcdTgyOWVcdTgyYTBcdTgyYTJcdTgyYTNcdTgyYTdcdTgyYjJcdTgyYjVcdTgyYjZcdTgyYmFcdTgyYmJcdTgyYmNcdTgyYmZcdTgyYzBcdTgyYzJcdTgyYzNcdTgyYzVcdTgyYzZcdTgyYzlcdTgyZDBcdTgyZDZcdTgyZDlcdTgyZGFcdTgyZGRcdTgyZTJcdTgyZTdcdTgyZThcdTgy'@;
put 'ZTlcdTgyZWFcdTgyZWNcdTgyZWRcdTgyZWVcdTgyZjBcdTgyZjJcdTgyZjNcdTgyZjVcdTgyZjZcdTgyZjhcdWZmZmRcdTgyZmFcdTgyZmNcdTgyZmRcdTgyZmVcdTgyZmZcdTgzMDBcdTgzMGFcdTgzMGJcdTgzMGRcdTgzMTBcdTgzMTJcdTgzMTNcdTgzMTZcdTgzMThcdTgzMTlcdTgzMWRc'@;
put 'dTgzMWVcdTgzMWZcdTgzMjBcdTgzMjFcdTgzMjJcdTgzMjNcdTgzMjRcdTgzMjVcdTgzMjZcdTgzMjlcdTgzMmFcdTgzMmVcdTgzMzBcdTgzMzJcdTgzMzdcdTgzM2JcdTgzM2RcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUw'@;
put 'NGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRc'@;
put 'dTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3'@;
put 'ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJc'@;
put 'dTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOThdW3BdXT01MDY4OCtwLGJbNTA2ODgrcF09X1sxOThdW3BdKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzM2VcdTgzM2ZcdTgzNDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGFcdTgzNGJcdTgzNGNcdTgzNGRcdTgzNGVcdTgzNTNcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNThcdTgzNTlcdTgzNWRcdTgzNjJcdTgzNzBcdTgzNzFcdTgzNzJc'@;
put 'dTgzNzNcdTgzNzRcdTgzNzVcdTgzNzZcdTgzNzlcdTgzN2FcdTgzN2VcdTgzN2ZcdTgzODBcdTgzODFcdTgzODJcdTgzODNcdTgzODRcdTgzODdcdTgzODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgz'@;
put 'OWFcdTgzOWRcdTgzOWZcdTgzYTFcdTgzYTJcdTgzYTNcdTgzYTRcdTgzYTVcdTgzYTZcdTgzYTdcdTgzYWNcdTgzYWRcdTgzYWVcdWZmZmRcdTgzYWZcdTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2JcdTgzY2RcdTgzY2Vc'@;
put 'dTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgzZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdi'@;
put 'N2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRc'@;
put 'dTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3'@;
put 'NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZc'@;
put 'dTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTldW3BdXT01MDk0NCtwLGJbNTA5NDQrcF09X1sxOTldW3BdKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZWVcdTgzZWZcdTgzZjNcdTgzZjRcdTgzZjVcdTgzZjZcdTgzZjdcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTJc'@;
put 'dTg0MTNcdTg0MTRcdTg0MTVcdTg0MTZcdTg0MTdcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWVcdTg0MWZcdTg0MjBcdTg0MjFcdTg0MjJcdTg0MjNcdTg0MjlcdTg0MmFcdTg0MmJcdTg0MmNcdTg0MmRcdTg0MmVcdTg0MmZcdTg0MzBcdTg0MzJcdTg0MzNcdTg0MzRcdTg0MzVcdTg0MzZcdTg0'@;
put 'MzdcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2VcdTg0M2ZcdTg0NDBcdTg0NDFcdTg0NDJcdTg0NDNcdTg0NDRcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NDlcdWZmZmRcdTg0NGFcdTg0NGJcdTg0NGNcdTg0NGRcdTg0NGVcdTg0NGZcdTg0NTBcdTg0NTJcdTg0NTNcdTg0NTRcdTg0NTVcdTg0NTZc'@;
put 'dTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjRcdTg0NjVcdTg0NjZcdTg0NjdcdTg0NjhcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4'@;
put 'YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2Yjdc'@;
put 'dThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdl'@;
put 'ZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVc'@;
put 'dTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDBdW3BdXT01MTIwMCtwLGJbNTEyMDArcF09X1syMDBdW3BdKTtmb3IoX1syMDFdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0N2RcdTg0N2VcdTg0N2ZcdTg0ODBcdTg0ODFcdTg0ODNcdTg0ODRcdTg0ODVcdTg0ODZcdTg0OGFcdTg0OGRcdTg0OGZcdTg0OTBcdTg0OTFcdTg0OTJcdTg0OTNcdTg0OTRcdTg0OTVcdTg0OTZc'@;
put 'dTg0OThcdTg0OWFcdTg0OWJcdTg0OWRcdTg0OWVcdTg0OWZcdTg0YTBcdTg0YTJcdTg0YTNcdTg0YTRcdTg0YTVcdTg0YTZcdTg0YTdcdTg0YThcdTg0YTlcdTg0YWFcdTg0YWJcdTg0YWNcdTg0YWRcdTg0YWVcdTg0YjBcdTg0YjFcdTg0YjNcdTg0YjVcdTg0YjZcdTg0YjdcdTg0YmJcdTg0'@;
put 'YmNcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzNcdTg0YzVcdTg0YzZcdTg0YzdcdTg0YzhcdTg0Y2JcdTg0Y2NcdTg0Y2VcdTg0Y2ZcdTg0ZDJcdTg0ZDRcdTg0ZDVcdTg0ZDdcdWZmZmRcdTg0ZDhcdTg0ZDlcdTg0ZGFcdTg0ZGJcdTg0ZGNcdTg0ZGVcdTg0ZTFcdTg0ZTJcdTg0ZTRcdTg0ZTdc'@;
put 'dTg0ZThcdTg0ZTlcdTg0ZWFcdTg0ZWJcdTg0ZWRcdTg0ZWVcdTg0ZWZcdTg0ZjFcdTg0ZjJcdTg0ZjNcdTg0ZjRcdTg0ZjVcdTg0ZjZcdTg0ZjdcdTg0ZjhcdTg0ZjlcdTg0ZmFcdTg0ZmJcdTg0ZmRcdTg0ZmVcdTg1MDBcdTg1MDFcdTg1MDJcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRl'@;
put 'MjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJc'@;
put 'dTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdl'@;
put 'Y2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVc'@;
put 'dTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDFdW3BdXT01MTQ1NitwLGJbNTE0NTYrcF09X1syMDFdW3BdKTtmb3Io'@;
put 'X1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MDNcdTg1MDRcdTg1MDVcdTg1MDZcdTg1MDdcdTg1MDhcdTg1MDlcdTg1MGFcdTg1MGJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZc'@;
put 'dTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjZcdTg1MjdcdTg1MjhcdTg1MjlcdTg1MmFcdTg1MmRcdTg1MmVcdTg1MmZcdTg1MzBcdTg1MzFcdTg1MzJcdTg1MzNcdTg1MzRcdTg1MzVcdTg1MzZcdTg1M2VcdTg1'@;
put 'M2ZcdTg1NDBcdTg1NDFcdTg1NDJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NGJcdTg1NGNcdTg1NGRcdTg1NGVcdTg1NGZcdTg1NTBcdTg1NTFcdTg1NTJcdTg1NTNcdTg1NTRcdTg1NTVcdWZmZmRcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWZcdTg1NjBc'@;
put 'dTg1NjFcdTg1NjJcdTg1NjNcdTg1NjVcdTg1NjZcdTg1NjdcdTg1NjlcdTg1NmFcdTg1NmJcdTg1NmNcdTg1NmRcdTg1NmVcdTg1NmZcdTg1NzBcdTg1NzFcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUy'@;
put 'NjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2Fc'@;
put 'dTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYz'@;
put 'ODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZc'@;
put 'dThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDJdW3BdXT01MTcxMitwLGJbNTE3MTIrcF09X1sy'@;
put 'MDJdW3BdKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODhcdTg1ODlcdTg1OGFcdTg1OGJcdTg1OGNcdTg1OGRcdTg1OGVcdTg1OTBcdTg1OTFcdTg1OTJcdTg1OTNcdTg1OTRc'@;
put 'dTg1OTVcdTg1OTZcdTg1OTdcdTg1OThcdTg1OTlcdTg1OWFcdTg1OWRcdTg1OWVcdTg1OWZcdTg1YTBcdTg1YTFcdTg1YTJcdTg1YTNcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjFcdTg1YjJcdTg1YjNcdTg1YjRcdTg1YjVcdTg1YjZcdTg1YjhcdTg1'@;
put 'YmFcdTg1YmJcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzBcdTg1YzJcdTg1YzNcdTg1YzRcdTg1YzVcdTg1YzZcdTg1YzdcdTg1YzhcdTg1Y2FcdTg1Y2JcdTg1Y2NcdTg1Y2RcdTg1Y2VcdTg1ZDFcdTg1ZDJcdWZmZmRcdTg1ZDRcdTg1ZDZcdTg1ZDdcdTg1ZDhcdTg1ZDlcdTg1ZGFc'@;
put 'dTg1ZGJcdTg1ZGRcdTg1ZGVcdTg1ZGZcdTg1ZTBcdTg1ZTFcdTg1ZTJcdTg1ZTNcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWFcdTg1ZWJcdTg1ZWNcdTg1ZWRcdTg1ZWVcdTg1ZWZcdTg1ZjBcdTg1ZjFcdTg1ZjJcdTg1ZjNcdTg1ZjRcdTg1ZjVcdTg1ZjZcdTg1ZjdcdTg1ZjhcdTYw'@;
put 'NTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRc'@;
put 'dTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdk'@;
put 'MjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRc'@;
put 'dTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDNdW3BdXT01MTk2OCtwLGJb'@;
put 'NTE5NjgrcF09X1syMDNdW3BdKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ZjlcdTg1ZmFcdTg1ZmNcdTg1ZmRcdTg1ZmVcdTg2MDBcdTg2MDFcdTg2MDJcdTg2MDNcdTg2MDRcdTg2MDZcdTg2MDdcdTg2MDhc'@;
put 'dTg2MDlcdTg2MGFcdTg2MGJcdTg2MGNcdTg2MGRcdTg2MGVcdTg2MGZcdTg2MTBcdTg2MTJcdTg2MTNcdTg2MTRcdTg2MTVcdTg2MTdcdTg2MThcdTg2MTlcdTg2MWFcdTg2MWJcdTg2MWNcdTg2MWRcdTg2MWVcdTg2MWZcdTg2MjBcdTg2MjFcdTg2MjJcdTg2MjNcdTg2MjRcdTg2MjVcdTg2'@;
put 'MjZcdTg2MjhcdTg2MmFcdTg2MmJcdTg2MmNcdTg2MmRcdTg2MmVcdTg2MmZcdTg2MzBcdTg2MzFcdTg2MzJcdTg2MzNcdTg2MzRcdTg2MzVcdTg2MzZcdTg2MzdcdTg2MzlcdTg2M2FcdTg2M2JcdTg2M2RcdTg2M2VcdTg2M2ZcdTg2NDBcdWZmZmRcdTg2NDFcdTg2NDJcdTg2NDNcdTg2NDRc'@;
put 'dTg2NDVcdTg2NDZcdTg2NDdcdTg2NDhcdTg2NDlcdTg2NGFcdTg2NGJcdTg2NGNcdTg2NTJcdTg2NTNcdTg2NTVcdTg2NTZcdTg2NTdcdTg2NThcdTg2NTlcdTg2NWJcdTg2NWNcdTg2NWRcdTg2NWZcdTg2NjBcdTg2NjFcdTg2NjNcdTg2NjRcdTg2NjVcdTg2NjZcdTg2NjdcdTg2NjhcdTg2'@;
put 'NjlcdTg2NmFcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZc'@;
put 'dTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThi'@;
put 'YThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNc'@;
put 'dTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDRdW3Bd'@;
put 'XT01MjIyNCtwLGJbNTIyMjQrcF09X1syMDRdW3BdKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NmRcdTg2NmZcdTg2NzBcdTg2NzJcdTg2NzNcdTg2NzRcdTg2NzVcdTg2NzZcdTg2NzdcdTg2NzhcdTg2ODNc'@;
put 'dTg2ODRcdTg2ODVcdTg2ODZcdTg2ODdcdTg2ODhcdTg2ODlcdTg2OGVcdTg2OGZcdTg2OTBcdTg2OTFcdTg2OTJcdTg2OTRcdTg2OTZcdTg2OTdcdTg2OThcdTg2OTlcdTg2OWFcdTg2OWJcdTg2OWVcdTg2OWZcdTg2YTBcdTg2YTFcdTg2YTJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2'@;
put 'YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmJcdTg2YmNcdTg2YmRcdTg2YmVcdTg2YmZcdTg2YzFcdTg2YzJcdTg2YzNcdTg2YzVcdTg2YzhcdTg2Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGNcdWZmZmRcdTg2ZGRcdTg2ZTBc'@;
put 'dTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2ZmFcdTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3'@;
put 'MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZc'@;
put 'dTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlh'@;
put 'NmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2Jc'@;
put 'dTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNV1bcF0uY2hhckNvZGVBdCgwKSYm'@;
put 'KERbX1syMDVdW3BdXT01MjQ4MCtwLGJbNTI0ODArcF09X1syMDVdW3BdKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3Mjhc'@;
put 'dTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDBcdTg3NDFcdTg3NDJcdTg3NDNcdTg3NDRcdTg3NDVcdTg3NDZcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3'@;
put 'NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWFcdTg3NWJcdTg3NWNcdTg3NWRcdTg3NWVcdTg3NWZcdTg3NjFcdTg3NjJcdTg3NjZcdTg3NjdcdTg3NjhcdTg3NjlcdTg3NmFcdTg3NmJcdTg3NmNcdTg3NmRcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzVcdWZmZmRc'@;
put 'dTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGVcdTg3OGZcdTg3OTBcdTg3OTFcdTg3OTJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OThcdTg3OTlcdTg3OWFcdTg3OWJcdTg3OWNcdTg3OWRcdTg3'@;
put 'OWVcdTg3YTBcdTg3YTFcdTg3YTJcdTg3YTNcdTg3YTRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNc'@;
put 'dTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYy'@;
put 'MTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVc'@;
put 'dTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNl1bcF0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKERbX1syMDZdW3BdXT01MjczNitwLGJbNTI3MzYrcF09X1syMDZdW3BdKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YTVcdTg3YTZcdTg3YTdcdTg3YTlcdTg3YWFcdTg3YWVcdTg3YjBc'@;
put 'dTg3YjFcdTg3YjJcdTg3YjRcdTg3YjZcdTg3YjdcdTg3YjhcdTg3YjlcdTg3YmJcdTg3YmNcdTg3YmVcdTg3YmZcdTg3YzFcdTg3YzJcdTg3YzNcdTg3YzRcdTg3YzVcdTg3YzdcdTg3YzhcdTg3YzlcdTg3Y2NcdTg3Y2RcdTg3Y2VcdTg3Y2ZcdTg3ZDBcdTg3ZDRcdTg3ZDVcdTg3ZDZcdTg3'@;
put 'ZDdcdTg3ZDhcdTg3ZDlcdTg3ZGFcdTg3ZGNcdTg3ZGRcdTg3ZGVcdTg3ZGZcdTg3ZTFcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZTZcdTg3ZTdcdTg3ZThcdTg3ZTlcdTg3ZWJcdTg3ZWNcdTg3ZWRcdTg3ZWZcdTg3ZjBcdTg3ZjFcdTg3ZjJcdTg3ZjNcdTg3ZjRcdTg3ZjVcdTg3ZjZcdTg3Zjdc'@;
put 'dTg3ZjhcdWZmZmRcdTg3ZmFcdTg3ZmJcdTg3ZmNcdTg3ZmRcdTg3ZmZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4MDRcdTg4MDVcdTg4MDZcdTg4MDdcdTg4MDhcdTg4MDlcdTg4MGJcdTg4MGNcdTg4MGRcdTg4MGVcdTg4MGZcdTg4MTBcdTg4MTFcdTg4MTJcdTg4MTRcdTg4MTdcdTg4MThcdTg4'@;
put 'MTlcdTg4MWFcdTg4MWNcdTg4MWRcdTg4MWVcdTg4MWZcdTg4MjBcdTg4MjNcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdc'@;
put 'dTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1'@;
put 'ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNc'@;
put 'dTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDddLmxlbmd0aDsrK3ApNjU1MzMhPT1f'@;
put 'WzIwN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDddW3BdXT01Mjk5MitwLGJbNTI5OTIrcF09X1syMDddW3BdKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjRcdTg4MjVcdTg4MjZcdTg4MjdcdTg4Mjhc'@;
put 'dTg4MjlcdTg4MmFcdTg4MmJcdTg4MmNcdTg4MmRcdTg4MmVcdTg4MmZcdTg4MzBcdTg4MzFcdTg4MzNcdTg4MzRcdTg4MzVcdTg4MzZcdTg4MzdcdTg4MzhcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDZcdTg4NDdcdTg4NDhcdTg4NDlcdTg4'@;
put 'NGFcdTg4NGJcdTg4NGVcdTg4NGZcdTg4NTBcdTg4NTFcdTg4NTJcdTg4NTNcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWJcdTg4NWNcdTg4NWRcdTg4NWVcdTg4NWZcdTg4NjBcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZc'@;
put 'dTg4NzhcdTg4NzlcdTg4N2FcdWZmZmRcdTg4N2JcdTg4N2NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNcdTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTdcdTg4OThcdTg4OTlcdTg4OWFcdTg4OWJcdTg4OWRcdTg4OWVcdTg4'@;
put 'OWZcdTg4YTBcdTg4YTFcdTg4YTNcdTg4YTVcdTg4YTZcdTg4YTdcdTg4YThcdTg4YTlcdTg4YWFcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFc'@;
put 'dThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVm'@;
put 'NjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFc'@;
put 'dTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDhdLmxlbmd0aDsr'@;
put 'K3ApNjU1MzMhPT1fWzIwOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDhdW3BdXT01MzI0OCtwLGJbNTMyNDgrcF09X1syMDhdW3BdKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4YWNcdTg4YWVcdTg4YWZc'@;
put 'dTg4YjBcdTg4YjJcdTg4YjNcdTg4YjRcdTg4YjVcdTg4YjZcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVcdTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4'@;
put 'ZDdcdTg4ZGFcdTg4ZGJcdTg4ZGNcdTg4ZGRcdTg4ZGVcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTlcdTg4ZWFcdTg4ZWJcdTg4ZWNcdTg4ZWRcdTg4ZWVcdTg4ZWZcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDNc'@;
put 'dTg5MDRcdTg5MDVcdTg5MDZcdTg5MDdcdTg5MDhcdWZmZmRcdTg5MDlcdTg5MGJcdTg5MGNcdTg5MGRcdTg5MGVcdTg5MGZcdTg5MTFcdTg5MTRcdTg5MTVcdTg5MTZcdTg5MTdcdTg5MThcdTg5MWNcdTg5MWRcdTg5MWVcdTg5MWZcdTg5MjBcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5'@;
put 'MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJc'@;
put 'dTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcw'@;
put 'ZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRc'@;
put 'dThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sy'@;
put 'MDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDldW3BdXT01MzUwNCtwLGJbNTM1MDQrcF09X1syMDldW3BdKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5Mzhc'@;
put 'dTg5MzlcdTg5M2FcdTg5M2JcdTg5M2NcdTg5M2RcdTg5M2VcdTg5M2ZcdTg5NDBcdTg5NDJcdTg5NDNcdTg5NDVcdTg5NDZcdTg5NDdcdTg5NDhcdTg5NDlcdTg5NGFcdTg5NGJcdTg5NGNcdTg5NGRcdTg5NGVcdTg5NGZcdTg5NTBcdTg5NTFcdTg5NTJcdTg5NTNcdTg5NTRcdTg5NTVcdTg5'@;
put 'NTZcdTg5NTdcdTg5NThcdTg5NTlcdTg5NWFcdTg5NWJcdTg5NWNcdTg5NWRcdTg5NjBcdTg5NjFcdTg5NjJcdTg5NjNcdTg5NjRcdTg5NjVcdTg5NjdcdTg5NjhcdTg5NjlcdTg5NmFcdTg5NmJcdTg5NmNcdTg5NmRcdTg5NmVcdTg5NmZcdTg5NzBcdTg5NzFcdTg5NzJcdTg5NzNcdTg5NzRc'@;
put 'dTg5NzVcdTg5NzZcdTg5NzdcdTg5NzhcdTg5NzlcdTg5N2FcdTg5N2NcdWZmZmRcdTg5N2RcdTg5N2VcdTg5ODBcdTg5ODJcdTg5ODRcdTg5ODVcdTg5ODdcdTg5ODhcdTg5ODlcdTg5OGFcdTg5OGJcdTg5OGNcdTg5OGRcdTg5OGVcdTg5OGZcdTg5OTBcdTg5OTFcdTg5OTJcdTg5OTNcdTg5'@;
put 'OTRcdTg5OTVcdTg5OTZcdTg5OTdcdTg5OThcdTg5OTlcdTg5OWFcdTg5OWJcdTg5OWNcdTg5OWRcdTg5OWVcdTg5OWZcdTg5YTBcdTg5YTFcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZc'@;
put 'dTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZj'@;
put 'ODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlc'@;
put 'dTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxwPTA7cCE9X1syMTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTBdW3BdXT01Mzc2MCtwLGJbNTM3NjArcF09X1syMTBdW3BdKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTg5YTJcdTg5YTNcdTg5YTRcdTg5YTVcdTg5YTZcdTg5YTdcdTg5YThcdTg5YTlcdTg5YWFcdTg5YWJcdTg5YWNcdTg5YWRcdTg5YWVcdTg5YWZcdTg5YjBcdTg5YjFcdTg5YjJcdTg5YjNcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YjhcdTg5YjlcdTg5YmFcdTg5YmJcdTg5'@;
put 'YmNcdTg5YmRcdTg5YmVcdTg5YmZcdTg5YzBcdTg5YzNcdTg5Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5ZGJcdTg5ZGRcdTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBc'@;
put 'dTg5ZjFcdTg5ZjJcdTg5ZjRcdTg5ZjVcdTg5ZjZcdTg5ZjdcdTg5ZjhcdTg5ZjlcdTg5ZmFcdWZmZmRcdTg5ZmJcdTg5ZmNcdTg5ZmRcdTg5ZmVcdTg5ZmZcdThhMDFcdThhMDJcdThhMDNcdThhMDRcdThhMDVcdThhMDZcdThhMDhcdThhMDlcdThhMGFcdThhMGJcdThhMGNcdThhMGRcdThh'@;
put 'MGVcdThhMGZcdThhMTBcdThhMTFcdThhMTJcdThhMTNcdThhMTRcdThhMTVcdThhMTZcdThhMTdcdThhMThcdThhMTlcdThhMWFcdThhMWJcdThhMWNcdThhMWRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdc'@;
put 'dThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVj'@;
put 'MjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2Nc'@;
put 'dTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTFdW3BdXT01NDAxNitwLGJbNTQwMTYrcF09X1syMTFdW3BdKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdThhMWVcdThhMWZcdThhMjBcdThhMjFcdThhMjJcdThhMjNcdThhMjRcdThhMjVcdThhMjZcdThhMjdcdThhMjhcdThhMjlcdThhMmFcdThhMmJcdThhMmNcdThhMmRcdThhMmVcdThhMmZcdThhMzBcdThhMzFcdThhMzJcdThhMzNcdThhMzRcdThhMzVcdThh'@;
put 'MzZcdThhMzdcdThhMzhcdThhMzlcdThhM2FcdThhM2JcdThhM2NcdThhM2RcdThhM2ZcdThhNDBcdThhNDFcdThhNDJcdThhNDNcdThhNDRcdThhNDVcdThhNDZcdThhNDdcdThhNDlcdThhNGFcdThhNGJcdThhNGNcdThhNGRcdThhNGVcdThhNGZcdThhNTBcdThhNTFcdThhNTJcdThhNTNc'@;
put 'dThhNTRcdThhNTVcdThhNTZcdThhNTdcdThhNThcdThhNTlcdThhNWFcdThhNWJcdThhNWNcdThhNWRcdThhNWVcdWZmZmRcdThhNWZcdThhNjBcdThhNjFcdThhNjJcdThhNjNcdThhNjRcdThhNjVcdThhNjZcdThhNjdcdThhNjhcdThhNjlcdThhNmFcdThhNmJcdThhNmNcdThhNmRcdThh'@;
put 'NmVcdThhNmZcdThhNzBcdThhNzFcdThhNzJcdThhNzNcdThhNzRcdThhNzVcdThhNzZcdThhNzdcdThhNzhcdThhN2FcdThhN2JcdThhN2NcdThhN2RcdThhN2VcdThhN2ZcdThhODBcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNc'@;
put 'dTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRl'@;
put 'OTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNc'@;
put 'dTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3'@;
put 'MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTJdW3BdXT01NDI3MitwLGJbNTQyNzIrcF09X1syMTJdW3BdKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhODFcdThhODJcdThhODNcdThhODRcdThhODVcdThhODZcdThhODdcdThhODhcdThhOGJcdThhOGNcdThhOGRcdThhOGVcdThhOGZcdThhOTBcdThhOTFcdThhOTJcdThhOTRcdThhOTVcdThhOTZcdThhOTdcdThhOThcdThhOTlcdThh'@;
put 'OWFcdThhOWJcdThhOWNcdThhOWRcdThhOWVcdThhOWZcdThhYTBcdThhYTFcdThhYTJcdThhYTNcdThhYTRcdThhYTVcdThhYTZcdThhYTdcdThhYThcdThhYTlcdThhYWFcdThhYWJcdThhYWNcdThhYWRcdThhYWVcdThhYWZcdThhYjBcdThhYjFcdThhYjJcdThhYjNcdThhYjRcdThhYjVc'@;
put 'dThhYjZcdThhYjdcdThhYjhcdThhYjlcdThhYmFcdThhYmJcdThhYmNcdThhYmRcdThhYmVcdThhYmZcdThhYzBcdThhYzFcdThhYzJcdWZmZmRcdThhYzNcdThhYzRcdThhYzVcdThhYzZcdThhYzdcdThhYzhcdThhYzlcdThhY2FcdThhY2JcdThhY2NcdThhY2RcdThhY2VcdThhY2ZcdThh'@;
put 'ZDBcdThhZDFcdThhZDJcdThhZDNcdThhZDRcdThhZDVcdThhZDZcdThhZDdcdThhZDhcdThhZDlcdThhZGFcdThhZGJcdThhZGNcdThhZGRcdThhZGVcdThhZGZcdThhZTBcdThhZTFcdThhZTJcdThhZTNcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhc'@;
put 'dThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZm'@;
put 'MzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVc'@;
put 'dTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1'@;
put 'NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTNdW3BdXT01NDUyOCtwLGJbNTQ1MjgrcF09X1syMTNdW3BdKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTRcdThhZTVcdThhZTZcdThhZTdcdThhZThcdThhZTlcdThhZWFcdThhZWJcdThhZWNcdThhZWRcdThhZWVcdThhZWZcdThhZjBcdThhZjFcdThhZjJcdThhZjNcdThhZjRcdThhZjVcdThhZjZcdThhZjdcdThh'@;
put 'ZjhcdThhZjlcdThhZmFcdThhZmJcdThhZmNcdThhZmRcdThhZmVcdThhZmZcdThiMDBcdThiMDFcdThiMDJcdThiMDNcdThiMDRcdThiMDVcdThiMDZcdThiMDhcdThiMDlcdThiMGFcdThiMGJcdThiMGNcdThiMGRcdThiMGVcdThiMGZcdThiMTBcdThiMTFcdThiMTJcdThiMTNcdThiMTRc'@;
put 'dThiMTVcdThiMTZcdThiMTdcdThiMThcdThiMTlcdThiMWFcdThiMWJcdThiMWNcdThiMWRcdThiMWVcdThiMWZcdThiMjBcdThiMjFcdThiMjJcdThiMjNcdWZmZmRcdThiMjRcdThiMjVcdThiMjdcdThiMjhcdThiMjlcdThiMmFcdThiMmJcdThiMmNcdThiMmRcdThiMmVcdThiMmZcdThi'@;
put 'MzBcdThiMzFcdThiMzJcdThiMzNcdThiMzRcdThiMzVcdThiMzZcdThiMzdcdThiMzhcdThiMzlcdThiM2FcdThiM2JcdThiM2NcdThiM2RcdThiM2VcdThiM2ZcdThiNDBcdThiNDFcdThiNDJcdThiNDNcdThiNDRcdThiNDVcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRc'@;
put 'dTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgx'@;
put 'ZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVc'@;
put 'dTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3'@;
put 'ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTRdW3BdXT01NDc4NCtwLGJbNTQ3ODQrcF09X1syMTRdW3BdKTtmb3IoX1syMTVdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNDZcdThiNDdcdThiNDhcdThiNDlcdThiNGFcdThiNGJcdThiNGNcdThiNGRcdThiNGVcdThiNGZcdThiNTBcdThiNTFcdThiNTJcdThiNTNcdThiNTRcdThiNTVcdThiNTZcdThiNTdcdThi'@;
put 'NThcdThiNTlcdThiNWFcdThiNWJcdThiNWNcdThiNWRcdThiNWVcdThiNWZcdThiNjBcdThiNjFcdThiNjJcdThiNjNcdThiNjRcdThiNjVcdThiNjdcdThiNjhcdThiNjlcdThiNmFcdThiNmJcdThiNmRcdThiNmVcdThiNmZcdThiNzBcdThiNzFcdThiNzJcdThiNzNcdThiNzRcdThiNzVc'@;
put 'dThiNzZcdThiNzdcdThiNzhcdThiNzlcdThiN2FcdThiN2JcdThiN2NcdThiN2RcdThiN2VcdThiN2ZcdThiODBcdThiODFcdThiODJcdThiODNcdThiODRcdThiODVcdThiODZcdWZmZmRcdThiODdcdThiODhcdThiODlcdThiOGFcdThiOGJcdThiOGNcdThiOGRcdThiOGVcdThiOGZcdThi'@;
put 'OTBcdThiOTFcdThiOTJcdThiOTNcdThiOTRcdThiOTVcdThiOTZcdThiOTdcdThiOThcdThiOTlcdThiOWFcdThiOWJcdThiOWNcdThiOWRcdThiOWVcdThiOWZcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2Jc'@;
put 'dTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4'@;
put 'NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNc'@;
put 'dTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRm'@;
put 'NWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTVdW3BdXT01NTA0MCtwLGJbNTUwNDArcF09X1syMTVdW3BdKTtm'@;
put 'b3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMzhcdThjMzlcdThjM2FcdThjM2JcdThjM2NcdThjM2RcdThjM2VcdThjM2ZcdThjNDBcdThjNDJcdThjNDNcdThjNDRcdThjNDVcdThjNDhcdThjNGFcdThjNGJcdThj'@;
put 'NGRcdThjNGVcdThjNGZcdThjNTBcdThjNTFcdThjNTJcdThjNTNcdThjNTRcdThjNTZcdThjNTdcdThjNThcdThjNTlcdThjNWJcdThjNWNcdThjNWRcdThjNWVcdThjNWZcdThjNjBcdThjNjNcdThjNjRcdThjNjVcdThjNjZcdThjNjdcdThjNjhcdThjNjlcdThjNmNcdThjNmRcdThjNmVc'@;
put 'dThjNmZcdThjNzBcdThjNzFcdThjNzJcdThjNzRcdThjNzVcdThjNzZcdThjNzdcdThjN2JcdThjN2NcdThjN2RcdThjN2VcdThjN2ZcdThjODBcdThjODFcdThjODNcdThjODRcdThjODZcdThjODdcdWZmZmRcdThjODhcdThjOGJcdThjOGRcdThjOGVcdThjOGZcdThjOTBcdThjOTFcdThj'@;
put 'OTJcdThjOTNcdThjOTVcdThjOTZcdThjOTdcdThjOTlcdThjOWFcdThjOWJcdThjOWNcdThjOWRcdThjOWVcdThjOWZcdThjYTBcdThjYTFcdThjYTJcdThjYTNcdThjYTRcdThjYTVcdThjYTZcdThjYTdcdThjYThcdThjYTlcdThjYWFcdThjYWJcdThjYWNcdThjYWRcdTRlOGRcdTRlMGNc'@;
put 'dTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlm'@;
put 'MTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRc'@;
put 'dTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRl'@;
put 'ZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTZdW3BdXT01NTI5NitwLGJbNTUyOTYrcF09'@;
put 'X1syMTZdW3BdKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWVcdThjYWZcdThjYjBcdThjYjFcdThjYjJcdThjYjNcdThjYjRcdThjYjVcdThjYjZcdThjYjdcdThjYjhcdThjYjlcdThjYmFcdThjYmJcdThj'@;
put 'YmNcdThjYmRcdThjYmVcdThjYmZcdThjYzBcdThjYzFcdThjYzJcdThjYzNcdThjYzRcdThjYzVcdThjYzZcdThjYzdcdThjYzhcdThjYzlcdThjY2FcdThjY2JcdThjY2NcdThjY2RcdThjY2VcdThjY2ZcdThjZDBcdThjZDFcdThjZDJcdThjZDNcdThjZDRcdThjZDVcdThjZDZcdThjZDdc'@;
put 'dThjZDhcdThjZDlcdThjZGFcdThjZGJcdThjZGNcdThjZGRcdThjZGVcdThjZGZcdThjZTBcdThjZTFcdThjZTJcdThjZTNcdThjZTRcdThjZTVcdThjZTZcdThjZTdcdThjZThcdThjZTlcdThjZWFcdThjZWJcdThjZWNcdWZmZmRcdThjZWRcdThjZWVcdThjZWZcdThjZjBcdThjZjFcdThj'@;
put 'ZjJcdThjZjNcdThjZjRcdThjZjVcdThjZjZcdThjZjdcdThjZjhcdThjZjlcdThjZmFcdThjZmJcdThjZmNcdThjZmRcdThjZmVcdThjZmZcdThkMDBcdThkMDFcdThkMDJcdThkMDNcdThkMDRcdThkMDVcdThkMDZcdThkMDdcdThkMDhcdThkMDlcdThkMGFcdThkMGJcdThkMGNcdThkMGRc'@;
put 'dTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUw'@;
put 'NGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVc'@;
put 'dTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4'@;
put 'YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTddW3BdXT01NTU1Mitw'@;
put 'LGJbNTU1NTIrcF09X1syMTddW3BdKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMGVcdThkMGZcdThkMTBcdThkMTFcdThkMTJcdThkMTNcdThkMTRcdThkMTVcdThkMTZcdThkMTdcdThkMThcdThkMTlcdThk'@;
put 'MWFcdThkMWJcdThkMWNcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzhcdThkNzlcdThkN2FcdThkN2JcdThkN2NcdThkN2RcdThkN2VcdThkN2ZcdThkODBcdThkODJcdThkODNc'@;
put 'dThkODZcdThkODdcdThkODhcdThkODlcdThkOGNcdThkOGRcdThkOGVcdThkOGZcdThkOTBcdThkOTJcdThkOTNcdThkOTVcdThkOTZcdThkOTdcdThkOThcdThkOTlcdThkOWFcdThkOWJcdThkOWNcdThkOWRcdThkOWVcdThkYTBcdThkYTFcdWZmZmRcdThkYTJcdThkYTRcdThkYTVcdThk'@;
put 'YTZcdThkYTdcdThkYThcdThkYTlcdThkYWFcdThkYWJcdThkYWNcdThkYWRcdThkYWVcdThkYWZcdThkYjBcdThkYjJcdThkYjZcdThkYjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJc'@;
put 'dThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThi'@;
put 'ZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFc'@;
put 'dThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2'@;
put 'ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMThd'@;
put 'W3BdXT01NTgwOCtwLGJbNTU4MDgrcF09X1syMThdW3BdKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkZDVcdThkZDhcdThkZDlcdThkZGNcdThkZTBcdThkZTFcdThkZTJcdThkZTVcdThkZTZcdThkZTdcdThk'@;
put 'ZTlcdThkZWRcdThkZWVcdThkZjBcdThkZjFcdThkZjJcdThkZjRcdThkZjZcdThkZmNcdThkZmVcdThkZmZcdThlMDBcdThlMDFcdThlMDJcdThlMDNcdThlMDRcdThlMDZcdThlMDdcdThlMDhcdThlMGJcdThlMGRcdThlMGVcdThlMTBcdThlMTFcdThlMTJcdThlMTNcdThlMTVcdThlMTZc'@;
put 'dThlMTdcdThlMThcdThlMTlcdThlMWFcdThlMWJcdThlMWNcdThlMjBcdThlMjFcdThlMjRcdThlMjVcdThlMjZcdThlMjdcdThlMjhcdThlMmJcdThlMmRcdThlMzBcdThlMzJcdThlMzNcdThlMzRcdThlMzZcdThlMzdcdThlMzhcdThlM2JcdThlM2NcdThlM2VcdWZmZmRcdThlM2ZcdThl'@;
put 'NDNcdThlNDVcdThlNDZcdThlNGNcdThlNGRcdThlNGVcdThlNGZcdThlNTBcdThlNTNcdThlNTRcdThlNTVcdThlNTZcdThlNTdcdThlNThcdThlNWFcdThlNWJcdThlNWNcdThlNWRcdThlNWVcdThlNWZcdThlNjBcdThlNjFcdThlNjJcdThlNjNcdThlNjRcdThlNjVcdThlNjdcdThlNjhc'@;
put 'dThlNmFcdThlNmJcdThlNmVcdThlNzFcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkx'@;
put 'MzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2Vc'@;
put 'dTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3'@;
put 'Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOV1bcF0uY2hhckNvZGVBdCgw'@;
put 'KSYmKERbX1syMTldW3BdXT01NjA2NCtwLGJbNTYwNjQrcF09X1syMTldW3BdKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNzNcdThlNzVcdThlNzdcdThlNzhcdThlNzlcdThlN2FcdThlN2JcdThlN2RcdThl'@;
put 'N2VcdThlODBcdThlODJcdThlODNcdThlODRcdThlODZcdThlODhcdThlODlcdThlOGFcdThlOGJcdThlOGNcdThlOGRcdThlOGVcdThlOTFcdThlOTJcdThlOTNcdThlOTVcdThlOTZcdThlOTdcdThlOThcdThlOTlcdThlOWFcdThlOWJcdThlOWRcdThlOWZcdThlYTBcdThlYTFcdThlYTJc'@;
put 'dThlYTNcdThlYTRcdThlYTVcdThlYTZcdThlYTdcdThlYThcdThlYTlcdThlYWFcdThlYWRcdThlYWVcdThlYjBcdThlYjFcdThlYjNcdThlYjRcdThlYjVcdThlYjZcdThlYjdcdThlYjhcdThlYjlcdThlYmJcdThlYmNcdThlYmRcdThlYmVcdThlYmZcdThlYzBcdThlYzFcdThlYzJcdWZm'@;
put 'ZmRcdThlYzNcdThlYzRcdThlYzVcdThlYzZcdThlYzdcdThlYzhcdThlYzlcdThlY2FcdThlY2JcdThlY2NcdThlY2RcdThlY2ZcdThlZDBcdThlZDFcdThlZDJcdThlZDNcdThlZDRcdThlZDVcdThlZDZcdThlZDdcdThlZDhcdThlZDlcdThlZGFcdThlZGJcdThlZGNcdThlZGRcdThlZGVc'@;
put 'dThlZGZcdThlZTBcdThlZTFcdThlZTJcdThlZTNcdThlZTRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgy'@;
put 'OGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2Vc'@;
put 'dTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgz'@;
put 'M2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMF1bcF0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKERbX1syMjBdW3BdXT01NjMyMCtwLGJbNTYzMjArcF09X1syMjBdW3BdKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZTVcdThlZTZcdThlZTdcdThlZThcdThlZTlcdThlZWFcdThl'@;
put 'ZWJcdThlZWNcdThlZWRcdThlZWVcdThlZWZcdThlZjBcdThlZjFcdThlZjJcdThlZjNcdThlZjRcdThlZjVcdThlZjZcdThlZjdcdThlZjhcdThlZjlcdThlZmFcdThlZmJcdThlZmNcdThlZmRcdThlZmVcdThlZmZcdThmMDBcdThmMDFcdThmMDJcdThmMDNcdThmMDRcdThmMDVcdThmMDZc'@;
put 'dThmMDdcdThmMDhcdThmMDlcdThmMGFcdThmMGJcdThmMGNcdThmMGRcdThmMGVcdThmMGZcdThmMTBcdThmMTFcdThmMTJcdThmMTNcdThmMTRcdThmMTVcdThmMTZcdThmMTdcdThmMThcdThmMTlcdThmMWFcdThmMWJcdThmMWNcdThmMWRcdThmMWVcdThmMWZcdThmMjBcdThmMjFcdThm'@;
put 'MjJcdThmMjNcdWZmZmRcdThmMjRcdThmMjVcdThmMjZcdThmMjdcdThmMjhcdThmMjlcdThmMmFcdThmMmJcdThmMmNcdThmMmRcdThmMmVcdThmMmZcdThmMzBcdThmMzFcdThmMzJcdThmMzNcdThmMzRcdThmMzVcdThmMzZcdThmMzdcdThmMzhcdThmMzlcdThmM2FcdThmM2JcdThmM2Nc'@;
put 'dThmM2RcdThmM2VcdThmM2ZcdThmNDBcdThmNDFcdThmNDJcdThmNDNcdThmNDRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgz'@;
put 'N2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlc'@;
put 'dTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0'@;
put 'ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjFdLmxlbmd0aDsrK3ApNjU1MzMh'@;
put 'PT1fWzIyMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjFdW3BdXT01NjU3NitwLGJbNTY1NzYrcF09X1syMjFdW3BdKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmNDVcdThmNDZcdThmNDdcdThmNDhcdThm'@;
put 'NDlcdThmNGFcdThmNGJcdThmNGNcdThmNGRcdThmNGVcdThmNGZcdThmNTBcdThmNTFcdThmNTJcdThmNTNcdThmNTRcdThmNTVcdThmNTZcdThmNTdcdThmNThcdThmNTlcdThmNWFcdThmNWJcdThmNWNcdThmNWRcdThmNWVcdThmNWZcdThmNjBcdThmNjFcdThmNjJcdThmNjNcdThmNjRc'@;
put 'dThmNjVcdThmNmFcdThmODBcdThmOGNcdThmOTJcdThmOWRcdThmYTBcdThmYTFcdThmYTJcdThmYTRcdThmYTVcdThmYTZcdThmYTdcdThmYWFcdThmYWNcdThmYWRcdThmYWVcdThmYWZcdThmYjJcdThmYjNcdThmYjRcdThmYjVcdThmYjdcdThmYjhcdThmYmFcdThmYmJcdThmYmNcdThm'@;
put 'YmZcdThmYzBcdThmYzNcdThmYzZcdWZmZmRcdThmYzlcdThmY2FcdThmY2JcdThmY2NcdThmY2RcdThmY2ZcdThmZDJcdThmZDZcdThmZDdcdThmZGFcdThmZTBcdThmZTFcdThmZTNcdThmZTdcdThmZWNcdThmZWZcdThmZjFcdThmZjJcdThmZjRcdThmZjVcdThmZjZcdThmZmFcdThmZmJc'@;
put 'dThmZmNcdThmZmVcdThmZmZcdTkwMDdcdTkwMDhcdTkwMGNcdTkwMGVcdTkwMTNcdTkwMTVcdTkwMThcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1'@;
put 'OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVc'@;
put 'dTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYz'@;
put 'ZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjJdLmxlbmd0'@;
put 'aDsrK3ApNjU1MzMhPT1fWzIyMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjJdW3BdXT01NjgzMitwLGJbNTY4MzIrcF09X1syMjJdW3BdKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMTlcdTkwMWNcdTkw'@;
put 'MjNcdTkwMjRcdTkwMjVcdTkwMjdcdTkwMjhcdTkwMjlcdTkwMmFcdTkwMmJcdTkwMmNcdTkwMzBcdTkwMzFcdTkwMzJcdTkwMzNcdTkwMzRcdTkwMzdcdTkwMzlcdTkwM2FcdTkwM2RcdTkwM2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDhcdTkwNDlcdTkwNGFcdTkwNGJcdTkwNGNc'@;
put 'dTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZcdTkwNTlcdTkwNWFcdTkwNWNcdTkwNWRcdTkwNWVcdTkwNWZcdTkwNjBcdTkwNjFcdTkwNjRcdTkwNjZcdTkwNjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmZcdTkwNzBcdTkwNzFcdTkwNzJcdTkwNzNcdTkwNzZcdTkwNzdcdTkwNzhcdTkw'@;
put 'NzlcdTkwN2FcdTkwN2JcdTkwN2NcdTkwN2VcdTkwODFcdWZmZmRcdTkwODRcdTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGNcdTkwOGRcdTkwOGVcdTkwOGZcdTkwOTBcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRc'@;
put 'dTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1'@;
put 'MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFc'@;
put 'dTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0'@;
put 'Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9'@;
put 'X1syMjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjNdW3BdXT01NzA4OCtwLGJbNTcwODgrcF09X1syMjNdW3BdKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkw'@;
put 'YzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJc'@;
put 'dTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDVcdTkxMDZcdTkxMDdcdTkxMDhcdTkxMDlcdTkxMGFcdTkxMGJcdTkxMGNcdTkxMGRcdTkxMGVcdTkxMGZcdTkxMTBcdTkxMTFcdTkxMTJcdTkxMTNcdTkx'@;
put 'MTRcdTkxMTVcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWJcdTkxMWNcdWZmZmRcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjRcdTkxMjVcdTkxMjZcdTkxMjdcdTkxMjhcdTkxMjlcdTkxMmFcdTkxMmJcdTkxMmNcdTkxMmRcdTkxMmVcdTkxMzBcdTkxMzJcdTkxMzNcdTkxMzRc'@;
put 'dTkxMzVcdTkxMzZcdTkxMzdcdTkxMzhcdTkxM2FcdTkxM2JcdTkxM2NcdTkxM2RcdTkxM2VcdTkxM2ZcdTkxNDBcdTkxNDFcdTkxNDJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1'@;
put 'ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2Nc'@;
put 'dTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2'@;
put 'NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxwPTA7cCE9X1syMjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjRdW3BdXT01NzM0NCtwLGJbNTczNDQrcF09X1syMjRdW3BdKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTkxNDVcdTkxNDdcdTkxNDhcdTkxNTFcdTkxNTNcdTkxNTRcdTkxNTVcdTkxNTZcdTkxNThcdTkxNTlcdTkxNWJcdTkxNWNcdTkxNWZcdTkxNjBcdTkxNjZcdTkxNjdcdTkxNjhcdTkxNmJcdTkxNmRcdTkxNzNcdTkxN2FcdTkxN2JcdTkxN2NcdTkxODBcdTkxODFcdTkxODJc'@;
put 'dTkxODNcdTkxODRcdTkxODZcdTkxODhcdTkxOGFcdTkxOGVcdTkxOGZcdTkxOTNcdTkxOTRcdTkxOTVcdTkxOTZcdTkxOTdcdTkxOThcdTkxOTlcdTkxOWNcdTkxOWRcdTkxOWVcdTkxOWZcdTkxYTBcdTkxYTFcdTkxYTRcdTkxYTVcdTkxYTZcdTkxYTdcdTkxYThcdTkxYTlcdTkxYWJcdTkx'@;
put 'YWNcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYjdcdTkxYjhcdTkxYjlcdTkxYmJcdWZmZmRcdTkxYmNcdTkxYmRcdTkxYmVcdTkxYmZcdTkxYzBcdTkxYzFcdTkxYzJcdTkxYzNcdTkxYzRcdTkxYzVcdTkxYzZcdTkxYzhcdTkxY2JcdTkxZDBcdTkxZDJcdTkxZDNcdTkxZDRc'@;
put 'dTkxZDVcdTkxZDZcdTkxZDdcdTkxZDhcdTkxZDlcdTkxZGFcdTkxZGJcdTkxZGRcdTkxZGVcdTkxZGZcdTkxZTBcdTkxZTFcdTkxZTJcdTkxZTNcdTkxZTRcdTkxZTVcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVj'@;
put 'ODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZc'@;
put 'dTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVm'@;
put 'OTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjVdW3BdXT01NzYwMCtwLGJbNTc2MDArcF09X1syMjVdW3BdKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZTZcdTkxZTdcdTkxZThcdTkxZTlcdTkxZWFcdTkxZWJcdTkxZWNcdTkxZWRcdTkxZWVcdTkxZWZcdTkxZjBcdTkxZjFcdTkxZjJcdTkxZjNcdTkxZjRcdTkxZjVcdTkxZjZcdTkxZjdcdTkxZjhcdTkxZjlcdTkxZmFcdTkxZmJcdTkxZmNcdTkxZmRc'@;
put 'dTkxZmVcdTkxZmZcdTkyMDBcdTkyMDFcdTkyMDJcdTkyMDNcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDhcdTkyMDlcdTkyMGFcdTkyMGJcdTkyMGNcdTkyMGRcdTkyMGVcdTkyMGZcdTkyMTBcdTkyMTFcdTkyMTJcdTkyMTNcdTkyMTRcdTkyMTVcdTkyMTZcdTkyMTdcdTkyMThcdTky'@;
put 'MTlcdTkyMWFcdTkyMWJcdTkyMWNcdTkyMWRcdTkyMWVcdTkyMWZcdTkyMjBcdTkyMjFcdTkyMjJcdTkyMjNcdTkyMjRcdWZmZmRcdTkyMjVcdTkyMjZcdTkyMjdcdTkyMjhcdTkyMjlcdTkyMmFcdTkyMmJcdTkyMmNcdTkyMmRcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzFcdTkyMzJcdTkyMzNc'@;
put 'dTkyMzRcdTkyMzVcdTkyMzZcdTkyMzdcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2JcdTkyM2NcdTkyM2RcdTkyM2VcdTkyM2ZcdTkyNDBcdTkyNDFcdTkyNDJcdTkyNDNcdTkyNDRcdTkyNDVcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTcz'@;
put 'MzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBc'@;
put 'dTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVm'@;
put 'YzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2Jc'@;
put 'dTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjZdW3BdXT01Nzg1NitwLGJbNTc4NTYrcF09X1syMjZdW3BdKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyNDZcdTkyNDdcdTkyNDhcdTkyNDlcdTkyNGFcdTkyNGJcdTkyNGNcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTBcdTkyNTFcdTkyNTJcdTkyNTNcdTkyNTRcdTkyNTVcdTkyNTZcdTkyNTdcdTkyNThcdTkyNTlcdTkyNWFcdTkyNWJc'@;
put 'dTkyNWNcdTkyNWRcdTkyNWVcdTkyNWZcdTkyNjBcdTkyNjFcdTkyNjJcdTkyNjNcdTkyNjRcdTkyNjVcdTkyNjZcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmFcdTkyNmJcdTkyNmNcdTkyNmRcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzFcdTkyNzJcdTkyNzNcdTkyNzVcdTkyNzZcdTkyNzdcdTky'@;
put 'NzhcdTkyNzlcdTkyN2FcdTkyN2JcdTkyN2NcdTkyN2RcdTkyN2VcdTkyN2ZcdTkyODBcdTkyODFcdTkyODJcdTkyODNcdTkyODRcdTkyODVcdWZmZmRcdTkyODZcdTkyODdcdTkyODhcdTkyODlcdTkyOGFcdTkyOGJcdTkyOGNcdTkyOGRcdTkyOGZcdTkyOTBcdTkyOTFcdTkyOTJcdTkyOTNc'@;
put 'dTkyOTRcdTkyOTVcdTkyOTZcdTkyOTdcdTkyOThcdTkyOTlcdTkyOWFcdTkyOWJcdTkyOWNcdTkyOWRcdTkyOWVcdTkyOWZcdTkyYTBcdTkyYTFcdTkyYTJcdTkyYTNcdTkyYTRcdTkyYTVcdTkyYTZcdTkyYTdcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYw'@;
put 'OTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRc'@;
put 'dTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZj'@;
put 'MzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVc'@;
put 'dTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjddW3BdXT01ODExMitwLGJbNTgxMTIrcF09X1syMjddW3BdKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYThcdTkyYTlcdTkyYWFcdTkyYWJcdTkyYWNcdTkyYWRcdTkyYWZcdTkyYjBcdTkyYjFcdTkyYjJcdTkyYjNcdTkyYjRcdTkyYjVcdTkyYjZcdTkyYjdcdTkyYjhcdTkyYjlcdTkyYmFcdTkyYmJcdTkyYmNc'@;
put 'dTkyYmRcdTkyYmVcdTkyYmZcdTkyYzBcdTkyYzFcdTkyYzJcdTkyYzNcdTkyYzRcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzlcdTkyY2FcdTkyY2JcdTkyY2NcdTkyY2RcdTkyY2VcdTkyY2ZcdTkyZDBcdTkyZDFcdTkyZDJcdTkyZDNcdTkyZDRcdTkyZDVcdTkyZDZcdTkyZDdcdTkyZDhcdTky'@;
put 'ZDlcdTkyZGFcdTkyZGJcdTkyZGNcdTkyZGRcdTkyZGVcdTkyZGZcdTkyZTBcdTkyZTFcdTkyZTJcdTkyZTNcdTkyZTRcdTkyZTVcdTkyZTZcdTkyZTdcdTkyZThcdWZmZmRcdTkyZTlcdTkyZWFcdTkyZWJcdTkyZWNcdTkyZWRcdTkyZWVcdTkyZWZcdTkyZjBcdTkyZjFcdTkyZjJcdTkyZjNc'@;
put 'dTkyZjRcdTkyZjVcdTkyZjZcdTkyZjdcdTkyZjhcdTkyZjlcdTkyZmFcdTkyZmJcdTkyZmNcdTkyZmRcdTkyZmVcdTkyZmZcdTkzMDBcdTkzMDFcdTkzMDJcdTkzMDNcdTkzMDRcdTkzMDVcdTkzMDZcdTkzMDdcdTkzMDhcdTkzMDlcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZk'@;
put 'MDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVc'@;
put 'dTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZm'@;
put 'MmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRc'@;
put 'dTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjhdW3BdXT01ODM2OCtwLGJbNTgzNjgrcF09X1syMjhdW3BdKTtmb3IoX1syMjld'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGFcdTkzMGJcdTkzMGNcdTkzMGRcdTkzMGVcdTkzMGZcdTkzMTBcdTkzMTFcdTkzMTJcdTkzMTNcdTkzMTRcdTkzMTVcdTkzMTZcdTkzMTdcdTkzMThcdTkzMTlcdTkzMWFcdTkzMWJc'@;
put 'dTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjBcdTkzMjFcdTkzMjJcdTkzMjNcdTkzMjRcdTkzMjVcdTkzMjZcdTkzMjdcdTkzMjhcdTkzMjlcdTkzMmFcdTkzMmJcdTkzMmNcdTkzMmRcdTkzMmVcdTkzMmZcdTkzMzBcdTkzMzFcdTkzMzJcdTkzMzNcdTkzMzRcdTkzMzVcdTkzMzZcdTkz'@;
put 'MzdcdTkzMzhcdTkzMzlcdTkzM2FcdTkzM2JcdTkzM2NcdTkzM2RcdTkzM2ZcdTkzNDBcdTkzNDFcdTkzNDJcdTkzNDNcdTkzNDRcdTkzNDVcdTkzNDZcdTkzNDdcdTkzNDhcdTkzNDlcdWZmZmRcdTkzNGFcdTkzNGJcdTkzNGNcdTkzNGRcdTkzNGVcdTkzNGZcdTkzNTBcdTkzNTFcdTkzNTJc'@;
put 'dTkzNTNcdTkzNTRcdTkzNTVcdTkzNTZcdTkzNTdcdTkzNThcdTkzNTlcdTkzNWFcdTkzNWJcdTkzNWNcdTkzNWRcdTkzNWVcdTkzNWZcdTkzNjBcdTkzNjFcdTkzNjJcdTkzNjNcdTkzNjRcdTkzNjVcdTkzNjZcdTkzNjdcdTkzNjhcdTkzNjlcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZm'@;
put 'YjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdc'@;
put 'dThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkw'@;
put 'NjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2Nc'@;
put 'dTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjldW3BdXT01ODYyNCtwLGJbNTg2MjQrcF09X1syMjldW3Bd'@;
put 'KTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzNmNcdTkzNmRcdTkzNmVcdTkzNmZcdTkzNzBcdTkzNzFcdTkzNzJcdTkzNzNcdTkzNzRcdTkzNzVcdTkzNzZcdTkzNzdcdTkzNzhcdTkzNzlcdTkzN2FcdTkzN2Jc'@;
put 'dTkzN2NcdTkzN2RcdTkzN2VcdTkzN2ZcdTkzODBcdTkzODFcdTkzODJcdTkzODNcdTkzODRcdTkzODVcdTkzODZcdTkzODdcdTkzODhcdTkzODlcdTkzOGFcdTkzOGJcdTkzOGNcdTkzOGRcdTkzOGVcdTkzOTBcdTkzOTFcdTkzOTJcdTkzOTNcdTkzOTRcdTkzOTVcdTkzOTZcdTkzOTdcdTkz'@;
put 'OThcdTkzOTlcdTkzOWFcdTkzOWJcdTkzOWNcdTkzOWRcdTkzOWVcdTkzOWZcdTkzYTBcdTkzYTFcdTkzYTJcdTkzYTNcdTkzYTRcdTkzYTVcdTkzYTZcdTkzYTdcdTkzYThcdTkzYTlcdTkzYWFcdTkzYWJcdWZmZmRcdTkzYWNcdTkzYWRcdTkzYWVcdTkzYWZcdTkzYjBcdTkzYjFcdTkzYjJc'@;
put 'dTkzYjNcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYjdcdTkzYjhcdTkzYjlcdTkzYmFcdTkzYmJcdTkzYmNcdTkzYmRcdTkzYmVcdTkzYmZcdTkzYzBcdTkzYzFcdTkzYzJcdTkzYzNcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzhcdTkzYzlcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5'@;
put 'Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2Nc'@;
put 'dTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVj'@;
put 'MWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBc'@;
put 'dTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzBdW3BdXT01ODg4MCtwLGJbNTg4ODAr'@;
put 'cF09X1syMzBdW3BdKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzY2VcdTkzY2ZcdTkzZDBcdTkzZDFcdTkzZDJcdTkzZDNcdTkzZDRcdTkzZDVcdTkzZDdcdTkzZDhcdTkzZDlcdTkzZGFcdTkzZGJcdTkzZGNc'@;
put 'dTkzZGRcdTkzZGVcdTkzZGZcdTkzZTBcdTkzZTFcdTkzZTJcdTkzZTNcdTkzZTRcdTkzZTVcdTkzZTZcdTkzZTdcdTkzZThcdTkzZTlcdTkzZWFcdTkzZWJcdTkzZWNcdTkzZWRcdTkzZWVcdTkzZWZcdTkzZjBcdTkzZjFcdTkzZjJcdTkzZjNcdTkzZjRcdTkzZjVcdTkzZjZcdTkzZjdcdTkz'@;
put 'ZjhcdTkzZjlcdTkzZmFcdTkzZmJcdTkzZmNcdTkzZmRcdTkzZmVcdTkzZmZcdTk0MDBcdTk0MDFcdTk0MDJcdTk0MDNcdTk0MDRcdTk0MDVcdTk0MDZcdTk0MDdcdTk0MDhcdTk0MDlcdTk0MGFcdTk0MGJcdTk0MGNcdTk0MGRcdWZmZmRcdTk0MGVcdTk0MGZcdTk0MTBcdTk0MTFcdTk0MTJc'@;
put 'dTk0MTNcdTk0MTRcdTk0MTVcdTk0MTZcdTk0MTdcdTk0MThcdTk0MTlcdTk0MWFcdTk0MWJcdTk0MWNcdTk0MWRcdTk0MWVcdTk0MWZcdTk0MjBcdTk0MjFcdTk0MjJcdTk0MjNcdTk0MjRcdTk0MjVcdTk0MjZcdTk0MjdcdTk0MjhcdTk0MjlcdTk0MmFcdTk0MmJcdTk0MmNcdTk0MmRcdTk0'@;
put 'MmVcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFc'@;
put 'dTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdm'@;
put 'MzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdc'@;
put 'dTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzFdW3BdXT01OTEz'@;
put 'NitwLGJbNTkxMzYrcF09X1syMzFdW3BdKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MmZcdTk0MzBcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0MzVcdTk0MzZcdTk0MzdcdTk0MzhcdTk0MzlcdTk0M2Fc'@;
put 'dTk0M2JcdTk0M2NcdTk0M2RcdTk0M2ZcdTk0NDBcdTk0NDFcdTk0NDJcdTk0NDNcdTk0NDRcdTk0NDVcdTk0NDZcdTk0NDdcdTk0NDhcdTk0NDlcdTk0NGFcdTk0NGJcdTk0NGNcdTk0NGRcdTk0NGVcdTk0NGZcdTk0NTBcdTk0NTFcdTk0NTJcdTk0NTNcdTk0NTRcdTk0NTVcdTk0NTZcdTk0'@;
put 'NTdcdTk0NThcdTk0NTlcdTk0NWFcdTk0NWJcdTk0NWNcdTk0NWRcdTk0NWVcdTk0NWZcdTk0NjBcdTk0NjFcdTk0NjJcdTk0NjNcdTk0NjRcdTk0NjVcdTk0NjZcdTk0NjdcdTk0NjhcdTk0NjlcdTk0NmFcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmZcdWZmZmRcdTk0NzBcdTk0NzFcdTk0NzJc'@;
put 'dTk0NzNcdTk0NzRcdTk0NzVcdTk0NzZcdTk0NzdcdTk0NzhcdTk0NzlcdTk0N2FcdTk0N2JcdTk0N2NcdTk0N2RcdTk0N2VcdTk0N2ZcdTk0ODBcdTk0ODFcdTk0ODJcdTk0ODNcdTk0ODRcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0'@;
put 'ZmJcdTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJc'@;
put 'dTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3'@;
put 'YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFc'@;
put 'dTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sy'@;
put 'MzJdW3BdXT01OTM5MitwLGJbNTkzOTIrcF09X1syMzJdW3BdKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVc'@;
put 'dTk1NzRcdTk1NzVcdTk1NzdcdTk1NzhcdTk1NzlcdTk1N2FcdTk1N2JcdTk1N2NcdTk1N2RcdTk1N2VcdTk1ODBcdTk1ODFcdTk1ODJcdTk1ODNcdTk1ODRcdTk1ODVcdTk1ODZcdTk1ODdcdTk1ODhcdTk1ODlcdTk1OGFcdTk1OGJcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OGZcdTk1OTBcdTk1'@;
put 'OTFcdTk1OTJcdTk1OTNcdTk1OTRcdTk1OTVcdTk1OTZcdTk1OTdcdTk1OThcdTk1OTlcdTk1OWFcdTk1OWJcdTk1OWNcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTBcdTk1YTFcdTk1YTJcdTk1YTNcdTk1YTRcdTk1YTVcdTk1YTZcdTk1YTdcdTk1YThcdTk1YTlcdTk1YWFcdWZmZmRcdTk1YWJc'@;
put 'dTk1YWNcdTk1YWRcdTk1YWVcdTk1YWZcdTk1YjBcdTk1YjFcdTk1YjJcdTk1YjNcdTk1YjRcdTk1YjVcdTk1YjZcdTk1YjdcdTk1YjhcdTk1YjlcdTk1YmFcdTk1YmJcdTk1YmNcdTk1YmRcdTk1YmVcdTk1YmZcdTk1YzBcdTk1YzFcdTk1YzJcdTk1YzNcdTk1YzRcdTk1YzVcdTk1YzZcdTk1'@;
put 'YzdcdTk1YzhcdTk1YzlcdTk1Y2FcdTk1Y2JcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlc'@;
put 'dTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZh'@;
put 'NWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRc'@;
put 'dThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzM11bcF0uY2hhckNvZGVB'@;
put 'dCgwKSYmKERbX1syMzNdW3BdXT01OTY0OCtwLGJbNTk2NDgrcF09X1syMzNdW3BdKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1Y2NcdTk1Y2RcdTk1Y2VcdTk1Y2ZcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNc'@;
put 'dTk1ZDRcdTk1ZDVcdTk1ZDZcdTk1ZDdcdTk1ZDhcdTk1ZDlcdTk1ZGFcdTk1ZGJcdTk1ZGNcdTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTFcdTk1ZTJcdTk1ZTNcdTk1ZTRcdTk1ZTVcdTk1ZTZcdTk1ZTdcdTk1ZWNcdTk1ZmZcdTk2MDdcdTk2MTNcdTk2MThcdTk2MWJcdTk2MWVcdTk2'@;
put 'MjBcdTk2MjNcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MjdcdTk2MjhcdTk2MjlcdTk2MmJcdTk2MmNcdTk2MmRcdTk2MmZcdTk2MzBcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2VcdTk2NDFcdTk2NDNcdTk2NGFcdTk2NGVcdTk2NGZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZcdTk2NTdc'@;
put 'dWZmZmRcdTk2NThcdTk2NTlcdTk2NWFcdTk2NWNcdTk2NWRcdTk2NWVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NmJcdTk2NmRcdTk2NmVcdTk2NmZcdTk2NzBcdTk2NzFcdTk2NzNcdTk2NzhcdTk2NzlcdTk2N2FcdTk2N2JcdTk2N2NcdTk2N2RcdTk2N2VcdTk2N2ZcdTk2ODBcdTk2'@;
put 'ODFcdTk2ODJcdTk2ODNcdTk2ODRcdTk2ODdcdTk2ODlcdTk2OGFcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFc'@;
put 'dTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2'@;
put 'ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2Vc'@;
put 'dTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNF1b'@;
put 'cF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzRdW3BdXT01OTkwNCtwLGJbNTk5MDQrcF09X1syMzRdW3BdKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVc'@;
put 'dTk2OTZcdTk2OWFcdTk2OWJcdTk2OWRcdTk2OWVcdTk2OWZcdTk2YTBcdTk2YTFcdTk2YTJcdTk2YTNcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YThcdTk2YTlcdTk2YWFcdTk2YWJcdTk2YWNcdTk2YWRcdTk2YWVcdTk2YWZcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2'@;
put 'YmFcdTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2YzhcdTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDZcdTk2ZDdcdTk2ZDhcdTk2ZDlcdTk2ZGFcdTk2ZGJcdTk2ZGNcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTFcdTk2ZTJcdTk2ZTNcdTk2ZTRcdTk2ZTVcdTk2ZTZc'@;
put 'dTk2ZTdcdTk2ZWJcdWZmZmRcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3'@;
put 'MTVcdTk3MTdcdTk3MThcdTk3MTlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRc'@;
put 'dTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgw'@;
put 'YzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlc'@;
put 'dTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzVdLmxlbmd0aDsrK3ApNjU1'@;
put 'MzMhPT1fWzIzNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzVdW3BdXT02MDE2MCtwLGJbNjAxNjArcF09X1syMzVdW3BdKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjRc'@;
put 'dTk3MjVcdTk3MjZcdTk3MjdcdTk3MjhcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzNcdTk3MzRcdTk3MzVcdTk3MzZcdTk3MzdcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2ZcdTk3NDBcdTk3NDFcdTk3NDJcdTk3NDNcdTk3NDRcdTk3NDVcdTk3NDZcdTk3'@;
put 'NDdcdTk3NDhcdTk3NDlcdTk3NGFcdTk3NGJcdTk3NGNcdTk3NGRcdTk3NGVcdTk3NGZcdTk3NTBcdTk3NTFcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmFcdTk3NmJcdTk3NmNcdTk3NmRc'@;
put 'dTk3NmVcdTk3NmZcdTk3NzBcdTk3NzFcdWZmZmRcdTk3NzJcdTk3NzVcdTk3NzdcdTk3NzhcdTk3NzlcdTk3N2FcdTk3N2JcdTk3N2RcdTk3N2VcdTk3N2ZcdTk3ODBcdTk3ODFcdTk3ODJcdTk3ODNcdTk3ODRcdTk3ODZcdTk3ODdcdTk3ODhcdTk3ODlcdTk3OGFcdTk3OGNcdTk3OGVcdTk3'@;
put 'OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWJcdTk3OWNcdTk3OWRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJc'@;
put 'dTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcx'@;
put 'MzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhc'@;
put 'dTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzZdLmxl'@;
put 'bmd0aDsrK3ApNjU1MzMhPT1fWzIzNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzZdW3BdXT02MDQxNitwLGJbNjA0MTYrcF09X1syMzZdW3BdKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWZc'@;
put 'dTk3YTFcdTk3YTJcdTk3YTRcdTk3YTVcdTk3YTZcdTk3YTdcdTk3YThcdTk3YTlcdTk3YWFcdTk3YWNcdTk3YWVcdTk3YjBcdTk3YjFcdTk3YjNcdTk3YjVcdTk3YjZcdTk3YjdcdTk3YjhcdTk3YjlcdTk3YmFcdTk3YmJcdTk3YmNcdTk3YmRcdTk3YmVcdTk3YmZcdTk3YzBcdTk3YzFcdTk3'@;
put 'YzJcdTk3YzNcdTk3YzRcdTk3YzVcdTk3YzZcdTk3YzdcdTk3YzhcdTk3YzlcdTk3Y2FcdTk3Y2JcdTk3Y2NcdTk3Y2RcdTk3Y2VcdTk3Y2ZcdTk3ZDBcdTk3ZDFcdTk3ZDJcdTk3ZDNcdTk3ZDRcdTk3ZDVcdTk3ZDZcdTk3ZDdcdTk3ZDhcdTk3ZDlcdTk3ZGFcdTk3ZGJcdTk3ZGNcdTk3ZGRc'@;
put 'dTk3ZGVcdTk3ZGZcdTk3ZTBcdTk3ZTFcdTk3ZTJcdTk3ZTNcdWZmZmRcdTk3ZTRcdTk3ZTVcdTk3ZThcdTk3ZWVcdTk3ZWZcdTk3ZjBcdTk3ZjFcdTk3ZjJcdTk3ZjRcdTk3ZjdcdTk3ZjhcdTk3ZjlcdTk3ZmFcdTk3ZmJcdTk3ZmNcdTk3ZmRcdTk3ZmVcdTk3ZmZcdTk4MDBcdTk4MDFcdTk4'@;
put 'MDJcdTk4MDNcdTk4MDRcdTk4MDVcdTk4MDZcdTk4MDdcdTk4MDhcdTk4MDlcdTk4MGFcdTk4MGJcdTk4MGNcdTk4MGRcdTk4MGVcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFc'@;
put 'dTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4'@;
put 'NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVc'@;
put 'dTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7'@;
put 'cCE9X1syMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzddW3BdXT02MDY3MitwLGJbNjA2NzIrcF09X1syMzddW3BdKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTk4MGZcdTk4MTBcdTk4MTFcdTk4MTJcdTk4MTNcdTk4MTRcdTk4MTVcdTk4MTZcdTk4MTdcdTk4MThcdTk4MTlcdTk4MWFcdTk4MWJcdTk4MWNcdTk4MWRcdTk4MWVcdTk4MWZcdTk4MjBcdTk4MjFcdTk4MjJcdTk4MjNcdTk4MjRcdTk4MjVcdTk4MjZcdTk4MjdcdTk4MjhcdTk4MjlcdTk4'@;
put 'MmFcdTk4MmJcdTk4MmNcdTk4MmRcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzFcdTk4MzJcdTk4MzNcdTk4MzRcdTk4MzVcdTk4MzZcdTk4MzdcdTk4MzhcdTk4MzlcdTk4M2FcdTk4M2JcdTk4M2NcdTk4M2RcdTk4M2VcdTk4M2ZcdTk4NDBcdTk4NDFcdTk4NDJcdTk4NDNcdTk4NDRcdTk4NDVc'@;
put 'dTk4NDZcdTk4NDdcdTk4NDhcdTk4NDlcdTk4NGFcdTk4NGJcdTk4NGNcdTk4NGRcdWZmZmRcdTk4NGVcdTk4NGZcdTk4NTBcdTk4NTFcdTk4NTJcdTk4NTNcdTk4NTRcdTk4NTVcdTk4NTZcdTk4NTdcdTk4NThcdTk4NTlcdTk4NWFcdTk4NWJcdTk4NWNcdTk4NWRcdTk4NWVcdTk4NWZcdTk4'@;
put 'NjBcdTk4NjFcdTk4NjJcdTk4NjNcdTk4NjRcdTk4NjVcdTk4NjZcdTk4NjdcdTk4NjhcdTk4NjlcdTk4NmFcdTk4NmJcdTk4NmNcdTk4NmRcdTk4NmVcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRc'@;
put 'dTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0'@;
put 'OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZc'@;
put 'dTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxwPTA7cCE9X1syMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzhdW3BdXT02MDkyOCtwLGJbNjA5MjgrcF09X1syMzhdW3BdKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTk4NmZcdTk4NzBcdTk4NzFcdTk4NzJcdTk4NzNcdTk4NzRcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YThcdTk4YTlcdTk4YWFcdTk4YWJcdTk4YWNcdTk4YWRcdTk4YWVcdTk4YWZcdTk4YjBcdTk4YjFcdTk4YjJcdTk4YjNcdTk4YjRcdTk4'@;
put 'YjVcdTk4YjZcdTk4YjdcdTk4YjhcdTk4YjlcdTk4YmFcdTk4YmJcdTk4YmNcdTk4YmRcdTk4YmVcdTk4YmZcdTk4YzBcdTk4YzFcdTk4YzJcdTk4YzNcdTk4YzRcdTk4YzVcdTk4YzZcdTk4YzdcdTk4YzhcdTk4YzlcdTk4Y2FcdTk4Y2JcdTk4Y2NcdTk4Y2RcdTk4Y2ZcdTk4ZDBcdTk4ZDRc'@;
put 'dTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTBcdTk4ZTFcdTk4ZTJcdTk4ZTNcdTk4ZTRcdWZmZmRcdTk4ZTVcdTk4ZTZcdTk4ZTlcdTk4ZWFcdTk4ZWJcdTk4ZWNcdTk4ZWRcdTk4ZWVcdTk4ZWZcdTk4ZjBcdTk4ZjFcdTk4ZjJcdTk4ZjNcdTk4ZjRcdTk4ZjVcdTk4ZjZcdTk4'@;
put 'ZjdcdTk4ZjhcdTk4ZjlcdTk4ZmFcdTk4ZmJcdTk4ZmNcdTk4ZmRcdTk4ZmVcdTk4ZmZcdTk5MDBcdTk5MDFcdTk5MDJcdTk5MDNcdTk5MDRcdTk5MDVcdTk5MDZcdTk5MDdcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRc'@;
put 'dTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1'@;
put 'MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFc'@;
put 'dTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdh'@;
put 'MTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzldW3BdXT02MTE4NCtwLGJbNjExODQrcF09X1syMzldW3BdKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5MDhcdTk5MDlcdTk5MGFcdTk5MGJcdTk5MGNcdTk5MGVcdTk5MGZcdTk5MTFcdTk5MTJcdTk5MTNcdTk5MTRcdTk5MTVcdTk5MTZcdTk5MTdcdTk5MThcdTk5MTlcdTk5MWFcdTk5MWJcdTk5MWNcdTk5MWRcdTk5MWVcdTk5MWZcdTk5MjBcdTk5'@;
put 'MjFcdTk5MjJcdTk5MjNcdTk5MjRcdTk5MjVcdTk5MjZcdTk5MjdcdTk5MjhcdTk5MjlcdTk5MmFcdTk5MmJcdTk5MmNcdTk5MmRcdTk5MmZcdTk5MzBcdTk5MzFcdTk5MzJcdTk5MzNcdTk5MzRcdTk5MzVcdTk5MzZcdTk5MzdcdTk5MzhcdTk5MzlcdTk5M2FcdTk5M2JcdTk5M2NcdTk5M2Rc'@;
put 'dTk5M2VcdTk5M2ZcdTk5NDBcdTk5NDFcdTk5NDJcdTk5NDNcdTk5NDRcdTk5NDVcdTk5NDZcdTk5NDdcdTk5NDhcdTk5NDlcdWZmZmRcdTk5NGFcdTk5NGJcdTk5NGNcdTk5NGRcdTk5NGVcdTk5NGZcdTk5NTBcdTk5NTFcdTk5NTJcdTk5NTNcdTk5NTZcdTk5NTdcdTk5NThcdTk5NTlcdTk5'@;
put 'NWFcdTk5NWJcdTk5NWNcdTk5NWRcdTk5NWVcdTk5NWZcdTk5NjBcdTk5NjFcdTk5NjJcdTk5NjRcdTk5NjZcdTk5NzNcdTk5NzhcdTk5NzlcdTk5N2JcdTk5N2VcdTk5ODJcdTk5ODNcdTk5ODlcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNc'@;
put 'dTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTll'@;
put 'NGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNc'@;
put 'dTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2'@;
put 'MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDBdW3BdXT02MTQ0MCtwLGJbNjE0NDArcF09X1syNDBdW3BdKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5OGNcdTk5OGVcdTk5OWFcdTk5OWJcdTk5OWNcdTk5OWRcdTk5OWVcdTk5OWZcdTk5YTBcdTk5YTFcdTk5YTJcdTk5YTNcdTk5YTRcdTk5YTZcdTk5YTdcdTk5YTlcdTk5YWFcdTk5YWJcdTk5YWNcdTk5YWRcdTk5YWVcdTk5'@;
put 'YWZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjNcdTk5YjRcdTk5YjVcdTk5YjZcdTk5YjdcdTk5YjhcdTk5YjlcdTk5YmFcdTk5YmJcdTk5YmNcdTk5YmRcdTk5YmVcdTk5YmZcdTk5YzBcdTk5YzFcdTk5YzJcdTk5YzNcdTk5YzRcdTk5YzVcdTk5YzZcdTk5YzdcdTk5YzhcdTk5YzlcdTk5Y2Fc'@;
put 'dTk5Y2JcdTk5Y2NcdTk5Y2RcdTk5Y2VcdTk5Y2ZcdTk5ZDBcdTk5ZDFcdTk5ZDJcdTk5ZDNcdTk5ZDRcdTk5ZDVcdTk5ZDZcdTk5ZDdcdTk5ZDhcdWZmZmRcdTk5ZDlcdTk5ZGFcdTk5ZGJcdTk5ZGNcdTk5ZGRcdTk5ZGVcdTk5ZGZcdTk5ZTBcdTk5ZTFcdTk5ZTJcdTk5ZTNcdTk5ZTRcdTk5'@;
put 'ZTVcdTk5ZTZcdTk5ZTdcdTk5ZThcdTk5ZTlcdTk5ZWFcdTk5ZWJcdTk5ZWNcdTk5ZWRcdTk5ZWVcdTk5ZWZcdTk5ZjBcdTk5ZjFcdTk5ZjJcdTk5ZjNcdTk5ZjRcdTk5ZjVcdTk5ZjZcdTk5ZjdcdTk5ZjhcdTk5ZjlcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBc'@;
put 'dTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4'@;
put 'NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZc'@;
put 'dTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgw'@;
put 'NzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDFdW3BdXT02MTY5NitwLGJbNjE2OTYrcF09X1syNDFdW3BdKTtmb3IoX1syNDJdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmFcdTk5ZmJcdTk5ZmNcdTk5ZmRcdTk5ZmVcdTk5ZmZcdTlhMDBcdTlhMDFcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMDVcdTlhMDZcdTlhMDdcdTlhMDhcdTlhMDlcdTlhMGFcdTlhMGJcdTlhMGNcdTlh'@;
put 'MGRcdTlhMGVcdTlhMGZcdTlhMTBcdTlhMTFcdTlhMTJcdTlhMTNcdTlhMTRcdTlhMTVcdTlhMTZcdTlhMTdcdTlhMThcdTlhMTlcdTlhMWFcdTlhMWJcdTlhMWNcdTlhMWRcdTlhMWVcdTlhMWZcdTlhMjBcdTlhMjFcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjVcdTlhMjZcdTlhMjdcdTlhMjhc'@;
put 'dTlhMjlcdTlhMmFcdTlhMmJcdTlhMmNcdTlhMmRcdTlhMmVcdTlhMmZcdTlhMzBcdTlhMzFcdTlhMzJcdTlhMzNcdTlhMzRcdTlhMzVcdTlhMzZcdTlhMzdcdTlhMzhcdWZmZmRcdTlhMzlcdTlhM2FcdTlhM2JcdTlhM2NcdTlhM2RcdTlhM2VcdTlhM2ZcdTlhNDBcdTlhNDFcdTlhNDJcdTlh'@;
put 'NDNcdTlhNDRcdTlhNDVcdTlhNDZcdTlhNDdcdTlhNDhcdTlhNDlcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGRcdTlhNGVcdTlhNGZcdTlhNTBcdTlhNTFcdTlhNTJcdTlhNTNcdTlhNTRcdTlhNTVcdTlhNTZcdTlhNTdcdTlhNThcdTlhNTlcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRc'@;
put 'dTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2'@;
put 'YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRc'@;
put 'dTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3'@;
put 'NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDJdW3BdXT02MTk1MitwLGJbNjE5NTIrcF09X1syNDJdW3BdKTtmb3IoX1sy'@;
put 'NDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNWFcdTlhNWJcdTlhNWNcdTlhNWRcdTlhNWVcdTlhNWZcdTlhNjBcdTlhNjFcdTlhNjJcdTlhNjNcdTlhNjRcdTlhNjVcdTlhNjZcdTlhNjdcdTlhNjhcdTlhNjlcdTlhNmFcdTlh'@;
put 'NmJcdTlhNzJcdTlhODNcdTlhODlcdTlhOGRcdTlhOGVcdTlhOTRcdTlhOTVcdTlhOTlcdTlhYTZcdTlhYTlcdTlhYWFcdTlhYWJcdTlhYWNcdTlhYWRcdTlhYWVcdTlhYWZcdTlhYjJcdTlhYjNcdTlhYjRcdTlhYjVcdTlhYjlcdTlhYmJcdTlhYmRcdTlhYmVcdTlhYmZcdTlhYzNcdTlhYzRc'@;
put 'dTlhYzZcdTlhYzdcdTlhYzhcdTlhYzlcdTlhY2FcdTlhY2RcdTlhY2VcdTlhY2ZcdTlhZDBcdTlhZDJcdTlhZDRcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZDlcdTlhZGFcdTlhZGJcdTlhZGNcdWZmZmRcdTlhZGRcdTlhZGVcdTlhZTBcdTlhZTJcdTlhZTNcdTlhZTRcdTlhZTVcdTlhZTdcdTlh'@;
put 'ZThcdTlhZTlcdTlhZWFcdTlhZWNcdTlhZWVcdTlhZjBcdTlhZjFcdTlhZjJcdTlhZjNcdTlhZjRcdTlhZjVcdTlhZjZcdTlhZjdcdTlhZjhcdTlhZmFcdTlhZmNcdTlhZmRcdTlhZmVcdTlhZmZcdTliMDBcdTliMDFcdTliMDJcdTliMDRcdTliMDVcdTliMDZcdTg3YzZcdTg3ODhcdTg3ODVc'@;
put 'dTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdm'@;
put 'NDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVc'@;
put 'dTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdi'@;
put 'ZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDNdW3BdXT02MjIwOCtwLGJbNjIyMDgrcF09X1syNDNd'@;
put 'W3BdKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliMDdcdTliMDlcdTliMGFcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTFcdTliMTJcdTliMTRcdTliMTVcdTliMTZcdTliMTdcdTliMThcdTli'@;
put 'MTlcdTliMWFcdTliMWJcdTliMWNcdTliMWRcdTliMWVcdTliMjBcdTliMjFcdTliMjJcdTliMjRcdTliMjVcdTliMjZcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmJcdTliMmNcdTliMmRcdTliMmVcdTliMzBcdTliMzFcdTliMzNcdTliMzRcdTliMzVcdTliMzZcdTliMzdcdTliMzhc'@;
put 'dTliMzlcdTliM2FcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTliNTNcdTliNTVcdTliNTZcdTliNTdcdTliNThcdTliNTlcdTliNWFcdWZmZmRcdTliNWJcdTliNWNcdTliNWRcdTliNWVcdTliNWZcdTliNjBcdTli'@;
put 'NjFcdTliNjJcdTliNjNcdTliNjRcdTliNjVcdTliNjZcdTliNjdcdTliNjhcdTliNjlcdTliNmFcdTliNmJcdTliNmNcdTliNmRcdTliNmVcdTliNmZcdTliNzBcdTliNzFcdTliNzJcdTliNzNcdTliNzRcdTliNzVcdTliNzZcdTliNzdcdTliNzhcdTliNzlcdTliN2FcdTliN2JcdTdjMWZc'@;
put 'dTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgy'@;
put 'NWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2Nc'@;
put 'dTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThk'@;
put 'OTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDRdW3BdXT02MjQ2NCtwLGJbNjI0'@;
put 'NjQrcF09X1syNDRdW3BdKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2NcdTliN2RcdTliN2VcdTliN2ZcdTliODBcdTliODFcdTliODJcdTliODNcdTliODRcdTliODVcdTliODZcdTliODdcdTliODhcdTli'@;
put 'ODlcdTliOGFcdTliOGJcdTliOGNcdTliOGRcdTliOGVcdTliOGZcdTliOTBcdTliOTFcdTliOTJcdTliOTNcdTliOTRcdTliOTVcdTliOTZcdTliOTdcdTliOThcdTliOTlcdTliOWFcdTliOWJcdTliOWNcdTliOWRcdTliOWVcdTliOWZcdTliYTBcdTliYTFcdTliYTJcdTliYTNcdTliYTRc'@;
put 'dTliYTVcdTliYTZcdTliYTdcdTliYThcdTliYTlcdTliYWFcdTliYWJcdTliYWNcdTliYWRcdTliYWVcdTliYWZcdTliYjBcdTliYjFcdTliYjJcdTliYjNcdTliYjRcdTliYjVcdTliYjZcdTliYjdcdTliYjhcdTliYjlcdTliYmFcdWZmZmRcdTliYmJcdTliYmNcdTliYmRcdTliYmVcdTli'@;
put 'YmZcdTliYzBcdTliYzFcdTliYzJcdTliYzNcdTliYzRcdTliYzVcdTliYzZcdTliYzdcdTliYzhcdTliYzlcdTliY2FcdTliY2JcdTliY2NcdTliY2RcdTliY2VcdTliY2ZcdTliZDBcdTliZDFcdTliZDJcdTliZDNcdTliZDRcdTliZDVcdTliZDZcdTliZDdcdTliZDhcdTliZDlcdTliZGFc'@;
put 'dTliZGJcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThk'@;
put 'YjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRc'@;
put 'dThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThl'@;
put 'OWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDVdW3BdXT02'@;
put 'MjcyMCtwLGJbNjI3MjArcF09X1syNDVdW3BdKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliZGNcdTliZGRcdTliZGVcdTliZGZcdTliZTBcdTliZTFcdTliZTJcdTliZTNcdTliZTRcdTliZTVcdTliZTZcdTli'@;
put 'ZTdcdTliZThcdTliZTlcdTliZWFcdTliZWJcdTliZWNcdTliZWRcdTliZWVcdTliZWZcdTliZjBcdTliZjFcdTliZjJcdTliZjNcdTliZjRcdTliZjVcdTliZjZcdTliZjdcdTliZjhcdTliZjlcdTliZmFcdTliZmJcdTliZmNcdTliZmRcdTliZmVcdTliZmZcdTljMDBcdTljMDFcdTljMDJc'@;
put 'dTljMDNcdTljMDRcdTljMDVcdTljMDZcdTljMDdcdTljMDhcdTljMDlcdTljMGFcdTljMGJcdTljMGNcdTljMGRcdTljMGVcdTljMGZcdTljMTBcdTljMTFcdTljMTJcdTljMTNcdTljMTRcdTljMTVcdTljMTZcdTljMTdcdTljMThcdTljMTlcdTljMWFcdWZmZmRcdTljMWJcdTljMWNcdTlj'@;
put 'MWRcdTljMWVcdTljMWZcdTljMjBcdTljMjFcdTljMjJcdTljMjNcdTljMjRcdTljMjVcdTljMjZcdTljMjdcdTljMjhcdTljMjlcdTljMmFcdTljMmJcdTljMmNcdTljMmRcdTljMmVcdTljMmZcdTljMzBcdTljMzFcdTljMzJcdTljMzNcdTljMzRcdTljMzVcdTljMzZcdTljMzdcdTljMzhc'@;
put 'dTljMzlcdTljM2FcdTljM2JcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlm'@;
put 'ODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhc'@;
put 'dTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTlj'@;
put 'YjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERb'@;
put 'X1syNDZdW3BdXT02Mjk3NitwLGJbNjI5NzYrcF09X1syNDZdW3BdKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljM2NcdTljM2RcdTljM2VcdTljM2ZcdTljNDBcdTljNDFcdTljNDJcdTljNDNcdTljNDRcdTlj'@;
put 'NDVcdTljNDZcdTljNDdcdTljNDhcdTljNDlcdTljNGFcdTljNGJcdTljNGNcdTljNGRcdTljNGVcdTljNGZcdTljNTBcdTljNTFcdTljNTJcdTljNTNcdTljNTRcdTljNTVcdTljNTZcdTljNTdcdTljNThcdTljNTlcdTljNWFcdTljNWJcdTljNWNcdTljNWRcdTljNWVcdTljNWZcdTljNjBc'@;
put 'dTljNjFcdTljNjJcdTljNjNcdTljNjRcdTljNjVcdTljNjZcdTljNjdcdTljNjhcdTljNjlcdTljNmFcdTljNmJcdTljNmNcdTljNmRcdTljNmVcdTljNmZcdTljNzBcdTljNzFcdTljNzJcdTljNzNcdTljNzRcdTljNzVcdTljNzZcdTljNzdcdTljNzhcdTljNzlcdTljN2FcdWZmZmRcdTlj'@;
put 'N2JcdTljN2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTljOTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmVcdTljYmZcdTljYzBcdTljYzFcdTljYzJcdTljYzhcdTljYzlcdTljZDFc'@;
put 'dTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3'@;
put 'YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVc'@;
put 'dTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTll'@;
put 'ZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0N11bcF0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKERbX1syNDddW3BdXT02MzIzMitwLGJbNjMyMzIrcF09X1syNDddW3BdKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljZTNcdTljZTRcdTljZTVcdTljZTZcdTljZTdcdTljZThcdTljZTlcdTlj'@;
put 'ZWFcdTljZWJcdTljZWNcdTljZWRcdTljZWVcdTljZWZcdTljZjBcdTljZjFcdTljZjJcdTljZjNcdTljZjRcdTljZjVcdTljZjZcdTljZjdcdTljZjhcdTljZjlcdTljZmFcdTljZmJcdTljZmNcdTljZmRcdTljZmVcdTljZmZcdTlkMDBcdTlkMDFcdTlkMDJcdTlkMDNcdTlkMDRcdTlkMDVc'@;
put 'dTlkMDZcdTlkMDdcdTlkMDhcdTlkMDlcdTlkMGFcdTlkMGJcdTlkMGNcdTlkMGRcdTlkMGVcdTlkMGZcdTlkMTBcdTlkMTFcdTlkMTJcdTlkMTNcdTlkMTRcdTlkMTVcdTlkMTZcdTlkMTdcdTlkMThcdTlkMTlcdTlkMWFcdTlkMWJcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMWZcdTlkMjBcdTlk'@;
put 'MjFcdWZmZmRcdTlkMjJcdTlkMjNcdTlkMjRcdTlkMjVcdTlkMjZcdTlkMjdcdTlkMjhcdTlkMjlcdTlkMmFcdTlkMmJcdTlkMmNcdTlkMmRcdTlkMmVcdTlkMmZcdTlkMzBcdTlkMzFcdTlkMzJcdTlkMzNcdTlkMzRcdTlkMzVcdTlkMzZcdTlkMzdcdTlkMzhcdTlkMzlcdTlkM2FcdTlkM2Jc'@;
put 'dTlkM2NcdTlkM2RcdTlkM2VcdTlkM2ZcdTlkNDBcdTlkNDFcdTlkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0'@;
put 'OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDhdW3BdXT02MzQ4OCtwLGJbNjM0ODgrcF09X1syNDhdW3BdKTtmb3IoX1syNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDNcdTlkNDRcdTlkNDVcdTlkNDZcdTlkNDdcdTlk'@;
put 'NDhcdTlkNDlcdTlkNGFcdTlkNGJcdTlkNGNcdTlkNGRcdTlkNGVcdTlkNGZcdTlkNTBcdTlkNTFcdTlkNTJcdTlkNTNcdTlkNTRcdTlkNTVcdTlkNTZcdTlkNTdcdTlkNThcdTlkNTlcdTlkNWFcdTlkNWJcdTlkNWNcdTlkNWRcdTlkNWVcdTlkNWZcdTlkNjBcdTlkNjFcdTlkNjJcdTlkNjNc'@;
put 'dTlkNjRcdTlkNjVcdTlkNjZcdTlkNjdcdTlkNjhcdTlkNjlcdTlkNmFcdTlkNmJcdTlkNmNcdTlkNmRcdTlkNmVcdTlkNmZcdTlkNzBcdTlkNzFcdTlkNzJcdTlkNzNcdTlkNzRcdTlkNzVcdTlkNzZcdTlkNzdcdTlkNzhcdTlkNzlcdTlkN2FcdTlkN2JcdTlkN2NcdTlkN2RcdTlkN2VcdTlk'@;
put 'N2ZcdTlkODBcdTlkODFcdWZmZmRcdTlkODJcdTlkODNcdTlkODRcdTlkODVcdTlkODZcdTlkODdcdTlkODhcdTlkODlcdTlkOGFcdTlkOGJcdTlkOGNcdTlkOGRcdTlkOGVcdTlkOGZcdTlkOTBcdTlkOTFcdTlkOTJcdTlkOTNcdTlkOTRcdTlkOTVcdTlkOTZcdTlkOTdcdTlkOThcdTlkOTlc'@;
put 'dTlkOWFcdTlkOWJcdTlkOWNcdTlkOWRcdTlkOWVcdTlkOWZcdTlkYTBcdTlkYTFcdTlkYTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDldLmxlbmd0aDsrK3Ap'@;
put 'NjU1MzMhPT1fWzI0OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDldW3BdXT02Mzc0NCtwLGJbNjM3NDQrcF09X1syNDldW3BdKTtmb3IoX1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTNcdTlkYTRcdTlkYTVcdTlk'@;
put 'YTZcdTlkYTdcdTlkYThcdTlkYTlcdTlkYWFcdTlkYWJcdTlkYWNcdTlkYWRcdTlkYWVcdTlkYWZcdTlkYjBcdTlkYjFcdTlkYjJcdTlkYjNcdTlkYjRcdTlkYjVcdTlkYjZcdTlkYjdcdTlkYjhcdTlkYjlcdTlkYmFcdTlkYmJcdTlkYmNcdTlkYmRcdTlkYmVcdTlkYmZcdTlkYzBcdTlkYzFc'@;
put 'dTlkYzJcdTlkYzNcdTlkYzRcdTlkYzVcdTlkYzZcdTlkYzdcdTlkYzhcdTlkYzlcdTlkY2FcdTlkY2JcdTlkY2NcdTlkY2RcdTlkY2VcdTlkY2ZcdTlkZDBcdTlkZDFcdTlkZDJcdTlkZDNcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZDhcdTlkZDlcdTlkZGFcdTlkZGJcdTlkZGNcdTlk'@;
put 'ZGRcdTlkZGVcdTlkZGZcdTlkZTBcdTlkZTFcdWZmZmRcdTlkZTJcdTlkZTNcdTlkZTRcdTlkZTVcdTlkZTZcdTlkZTdcdTlkZThcdTlkZTlcdTlkZWFcdTlkZWJcdTlkZWNcdTlkZWRcdTlkZWVcdTlkZWZcdTlkZjBcdTlkZjFcdTlkZjJcdTlkZjNcdTlkZjRcdTlkZjVcdTlkZjZcdTlkZjdc'@;
put 'dTlkZjhcdTlkZjlcdTlkZmFcdTlkZmJcdTlkZmNcdTlkZmRcdTlkZmVcdTlkZmZcdTllMDBcdTllMDFcdTllMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTBd'@;
put 'Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTBdW3BdXT02NGUzK3AsYls2NGUzK3BdPV9bMjUwXVtwXSk7Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZTAzXHU5ZTA0'@;
put 'XHU5ZTA1XHU5ZTA2XHU5ZTA3XHU5ZTA4XHU5ZTA5XHU5ZTBhXHU5ZTBiXHU5ZTBjXHU5ZTBkXHU5ZTBlXHU5ZTBmXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5ZTEzXHU5ZTE0XHU5ZTE1XHU5ZTE2XHU5ZTE3XHU5ZTE4XHU5ZTE5XHU5ZTFhXHU5ZTFiXHU5ZTFjXHU5ZTFkXHU5ZTFlXHU5ZTI0XHU5'@;
put 'ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0XHU5ZTc1XHU5ZTc2XHU5ZTc3XHU5ZTc4'@;
put 'XHU5ZTc5XHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTdkXHU5ZTgwXHVmZmZkXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5ZThjXHU5ZThkXHU5ZThlXHU5ZThmXHU5ZTkwXHU5ZTkxXHU5ZTk0XHU5ZTk1XHU5ZTk2XHU5ZTk3XHU5ZTk4XHU5ZTk5XHU5ZTlhXHU5'@;
put 'ZTliXHU5ZTljXHU5ZTllXHU5ZWEwXHU5ZWExXHU5ZWEyXHU5ZWEzXHU5ZWE0XHU5ZWE1XHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0w'@;
put 'O3AhPV9bMjUxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUxXVtwXV09NjQyNTYrcCxiWzY0MjU2K3BdPV9bMjUxXVtwXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU5ZWFiXHU5ZWFjXHU5ZWFkXHU5ZWFlXHU5ZWFmXHU5ZWIwXHU5ZWIxXHU5ZWIyXHU5ZWIzXHU5ZWI1XHU5ZWI2XHU5ZWI3XHU5ZWI5XHU5ZWJhXHU5ZWJjXHU5ZWJmXHU5ZWMwXHU5ZWMxXHU5ZWMyXHU5ZWMzXHU5ZWM1XHU5ZWM2XHU5ZWM3XHU5ZWM4XHU5ZWNhXHU5ZWNiXHU5ZWNjXHU5'@;
put 'ZWQwXHU5ZWQyXHU5ZWQzXHU5ZWQ1XHU5ZWQ2XHU5ZWQ3XHU5ZWQ5XHU5ZWRhXHU5ZWRlXHU5ZWUxXHU5ZWUzXHU5ZWU0XHU5ZWU2XHU5ZWU4XHU5ZWViXHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwXHU5ZWYxXHU5ZWYyXHU5ZWYzXHU5ZWY0XHU5ZWY1XHU5ZWY2XHU5ZWY3XHU5ZWY4XHU5ZWZh'@;
put 'XHU5ZWZkXHU5ZWZmXHU5ZjAwXHU5ZjAxXHU5ZjAyXHU5ZjAzXHU5ZjA0XHU5ZjA1XHVmZmZkXHU5ZjA2XHU5ZjA3XHU5ZjA4XHU5ZjA5XHU5ZjBhXHU5ZjBjXHU5ZjBmXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE1XHU5ZjE2XHU5ZjE4XHU5ZjFhXHU5ZjFiXHU5ZjFjXHU5ZjFkXHU5ZjFlXHU5'@;
put 'ZjFmXHU5ZjIxXHU5ZjIzXHU5ZjI0XHU5ZjI1XHU5ZjI2XHU5ZjI3XHU5ZjI4XHU5ZjI5XHU5ZjJhXHU5ZjJiXHU5ZjJkXHU5ZjJlXHU5ZjMwXHU5ZjMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5z'@;
put 'cGxpdCgiIikscD0wO3AhPV9bMjUyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUyXVtwXV09NjQ1MTIrcCxiWzY0NTEyK3BdPV9bMjUyXVtwXSk7Zm9yKF9bMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU5ZjMyXHU5ZjMzXHU5ZjM0XHU5ZjM1XHU5ZjM2XHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNmXHU5ZjQwXHU5ZjQxXHU5ZjQyXHU5ZjQzXHU5ZjQ1XHU5ZjQ2XHU5ZjQ3XHU5ZjQ4XHU5ZjQ5XHU5ZjRhXHU5ZjRiXHU5ZjRjXHU5ZjRkXHU5ZjRlXHU5ZjRmXHU5ZjUyXHU5'@;
put 'ZjUzXHU5ZjU0XHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5ZjU4XHU5ZjU5XHU5ZjVhXHU5ZjViXHU5ZjVjXHU5ZjVkXHU5ZjVlXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjYyXHU5ZjYzXHU5ZjY0XHU5ZjY1XHU5ZjY2XHU5ZjY3XHU5ZjY4XHU5ZjY5XHU5ZjZhXHU5ZjZiXHU5ZjZjXHU5ZjZkXHU5ZjZl'@;
put 'XHU5ZjZmXHU5ZjcwXHU5ZjcxXHU5ZjcyXHU5ZjczXHU5Zjc0XHU5Zjc1XHU5Zjc2XHU5Zjc3XHU5Zjc4XHVmZmZkXHU5Zjc5XHU5ZjdhXHU5ZjdiXHU5ZjdjXHU5ZjdkXHU5ZjdlXHU5ZjgxXHU5ZjgyXHU5ZjhkXHU5ZjhlXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5ZjkzXHU5Zjk0XHU5'@;
put 'Zjk1XHU5Zjk2XHU5Zjk3XHU5Zjk4XHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE0XHU5ZmE1XHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUzXVtwXV09NjQ3NjgrcCxiWzY0NzY4K3BdPV9bMjUzXVtwXSk7Zm9yKF9bMjU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjU0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjU0XVtwXV09NjUwMjQrcCxiWzY1MDI0K3BdPV9bMjU0XVtwXSk7cmV0dXJue2VuYzpELGRlYzpifX0oKSxKWzk0OV09'@;
put 'ZnVuY3Rpb24oKXt2YXIgcCxiPVtdLEQ9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYn'@;
put 'KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1swXS5sZW5ndGg7KytwKTY1NTMzIT09X1swXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzBdW3BdXT0wK3AsYlswK3BdPV9bMF1bcF0pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMwMlx1YWMwM1x1YWMwNVx1YWMwNlx1YWMwYlx1YWMwY1x1YWMwZFx1YWMwZVx1YWMwZlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNVx1YWMyNlx1YWMyN1x1YWMyOFx1YWMyOVx1YWMy'@;
put 'YVx1YWMyYlx1YWMyZVx1YWMzMlx1YWMzM1x1YWMzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MVx1YWM0Mlx1YWM0M1x1YWM0NFx1YWM0NVx1YWM0Nlx1YWM0N1x1YWM0OFx1'@;
put 'YWM0OVx1YWM0YVx1YWM0Y1x1YWM0ZVx1YWM0Zlx1YWM1MFx1YWM1MVx1YWM1Mlx1YWM1M1x1YWM1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZFx1YWM1ZVx1YWM1Zlx1YWM2MFx1YWM2MVx1YWM2Mlx1YWM2'@;
put 'M1x1YWM2NFx1YWM2NVx1YWM2Nlx1YWM2N1x1YWM2OFx1YWM2OVx1YWM2YVx1YWM2Ylx1YWM2Y1x1YWM2ZFx1YWM2ZVx1YWM2Zlx1YWM3Mlx1YWM3M1x1YWM3NVx1YWM3Nlx1YWM3OVx1YWM3Ylx1YWM3Y1x1YWM3ZFx1YWM3ZVx1YWM3Zlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1'@;
put 'YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NVx1YWM5Nlx1YWM5N1x1YWM5OFx1YWM5OVx1YWM5YVx1YWM5Ylx1YWM5ZVx1YWNhMlx1YWNhM1x1YWNhNFx1YWNhNVx1YWNhNlx1YWNhN1x1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMVx1YWNiMlx1YWNiM1x1YWNiNFx1YWNiNVx1YWNiNlx1YWNi'@;
put 'N1x1YWNiYVx1YWNiZVx1YWNiZlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZFx1YWNjZVx1YWNjZlx1YWNkMFx1YWNkMVx1YWNkMlx1YWNkM1x1YWNkNFx1YWNkNlx1YWNkOFx1YWNkOVx1YWNkYVx1YWNkYlx1YWNkY1x1YWNkZFx1'@;
put 'YWNkZVx1YWNkZlx1YWNlMlx1YWNlM1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmN1x1YWNmOFx1YWNmOVx1YWNmYVx1YWNmYlx1YWNmZVx1YWNmZlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwN1x1YWQwOFx1YWQwOVx1YWQwYVx1YWQw'@;
put 'Ylx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTI5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEyOV1bcF1dPTMzMDI0K3AsYlszMzAyNCtwXT1fWzEyOV1bcF0pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMVx1YWQyMlx1YWQyM1x1YWQyNFx1YWQyNVx1YWQyNlx1YWQyN1x1YWQyOFx1YWQy'@;
put 'YVx1YWQyYlx1YWQyZVx1YWQyZlx1YWQzMFx1YWQzMVx1YWQzMlx1YWQzM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZFx1YWQzZVx1YWQzZlx1YWQ0MFx1YWQ0MVx1YWQ0Mlx1YWQ0M1x1YWQ0Nlx1YWQ0OFx1'@;
put 'YWQ0YVx1YWQ0Ylx1YWQ0Y1x1YWQ0ZFx1YWQ0ZVx1YWQ0Zlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQ1OVx1YWQ1YVx1YWQ1Ylx1YWQ1Y1x1YWQ1ZFx1YWQ1ZVx1YWQ1Zlx1YWQ2MFx1YWQ2Mlx1YWQ2'@;
put 'NFx1YWQ2NVx1YWQ2Nlx1YWQ2N1x1YWQ2OFx1YWQ2OVx1YWQ2YVx1YWQ2Ylx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4M1x1YWQ4NFx1YWQ4NVx1YWQ4Nlx1YWQ4N1x1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1'@;
put 'YWQ5MVx1YWQ5Mlx1YWQ5M1x1YWQ5NFx1YWQ5NVx1YWQ5Nlx1YWQ5N1x1YWQ5OFx1YWQ5OVx1YWQ5YVx1YWQ5Ylx1YWQ5ZVx1YWQ5Zlx1YWRhMFx1YWRhMVx1YWRhMlx1YWRhM1x1YWRhNVx1YWRhNlx1YWRhN1x1YWRhOFx1YWRhOVx1YWRhYVx1YWRhYlx1YWRhY1x1YWRhZFx1YWRhZVx1YWRh'@;
put 'Zlx1YWRiMFx1YWRiMVx1YWRiMlx1YWRiM1x1YWRiNFx1YWRiNVx1YWRiNlx1YWRiOFx1YWRiOVx1YWRiYVx1YWRiYlx1YWRiY1x1YWRiZFx1YWRiZVx1YWRiZlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOVx1YWRjYVx1YWRjYlx1YWRjY1x1YWRjZFx1YWRjZVx1YWRjZlx1'@;
put 'YWRkMlx1YWRkNFx1YWRkNVx1YWRkNlx1YWRkN1x1YWRkOFx1YWRkOVx1YWRkYVx1YWRkYlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNVx1YWRlNlx1YWRlN1x1YWRlOFx1YWRlOVx1YWRlYVx1YWRlYlx1YWRlY1x1YWRlZFx1YWRlZVx1YWRlZlx1YWRmMFx1YWRm'@;
put 'MVx1YWRmMlx1YWRmM1x1YWRmNFx1YWRmNVx1YWRmNlx1YWRmN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzMF1bcF1dPTMzMjgwK3AsYlszMzI4MCtwXT1fWzEzMF1bcF0pO2ZvcihfWzEz'@;
put 'MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWRmYVx1YWRmYlx1YWRmZFx1YWRmZVx1YWUwMlx1YWUwM1x1YWUwNFx1YWUwNVx1YWUwNlx1YWUwN1x1YWUwYVx1YWUwY1x1YWUwZVx1YWUwZlx1YWUxMFx1YWUxMVx1YWUx'@;
put 'Mlx1YWUxM1x1YWUxNVx1YWUxNlx1YWUxN1x1YWUxOFx1YWUxOVx1YWUxYVx1YWUxYlx1YWUxY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWUxZFx1YWUxZVx1YWUxZlx1YWUyMFx1YWUyMVx1YWUyMlx1YWUyM1x1YWUyNFx1YWUyNVx1YWUyNlx1YWUyN1x1YWUyOFx1'@;
put 'YWUyOVx1YWUyYVx1YWUyYlx1YWUyY1x1YWUyZFx1YWUyZVx1YWUyZlx1YWUzMlx1YWUzM1x1YWUzNVx1YWUzNlx1YWUzOVx1YWUzYlx1YWUzY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWUzZFx1YWUzZVx1YWUzZlx1YWU0Mlx1YWU0NFx1YWU0N1x1YWU0OFx1YWU0'@;
put 'OVx1YWU0Ylx1YWU0Zlx1YWU1MVx1YWU1Mlx1YWU1M1x1YWU1NVx1YWU1N1x1YWU1OFx1YWU1OVx1YWU1YVx1YWU1Ylx1YWU1ZVx1YWU2Mlx1YWU2M1x1YWU2NFx1YWU2Nlx1YWU2N1x1YWU2YVx1YWU2Ylx1YWU2ZFx1YWU2ZVx1YWU2Zlx1YWU3MVx1YWU3Mlx1YWU3M1x1YWU3NFx1YWU3NVx1'@;
put 'YWU3Nlx1YWU3N1x1YWU3YVx1YWU3ZVx1YWU3Zlx1YWU4MFx1YWU4MVx1YWU4Mlx1YWU4M1x1YWU4Nlx1YWU4N1x1YWU4OFx1YWU4OVx1YWU4YVx1YWU4Ylx1YWU4ZFx1YWU4ZVx1YWU4Zlx1YWU5MFx1YWU5MVx1YWU5Mlx1YWU5M1x1YWU5NFx1YWU5NVx1YWU5Nlx1YWU5N1x1YWU5OFx1YWU5'@;
put 'OVx1YWU5YVx1YWU5Ylx1YWU5Y1x1YWU5ZFx1YWU5ZVx1YWU5Zlx1YWVhMFx1YWVhMVx1YWVhMlx1YWVhM1x1YWVhNFx1YWVhNVx1YWVhNlx1YWVhN1x1YWVhOFx1YWVhOVx1YWVhYVx1YWVhYlx1YWVhY1x1YWVhZFx1YWVhZVx1YWVhZlx1YWViMFx1YWViMVx1YWViMlx1YWViM1x1YWViNFx1'@;
put 'YWViNVx1YWViNlx1YWViN1x1YWViOFx1YWViOVx1YWViYVx1YWViYlx1YWViZlx1YWVjMVx1YWVjMlx1YWVjM1x1YWVjNVx1YWVjNlx1YWVjN1x1YWVjOFx1YWVjOVx1YWVjYVx1YWVjYlx1YWVjZVx1YWVkMlx1YWVkM1x1YWVkNFx1YWVkNVx1YWVkNlx1YWVkN1x1YWVkYVx1YWVkYlx1YWVk'@;
put 'ZFx1YWVkZVx1YWVkZlx1YWVlMFx1YWVlMVx1YWVlMlx1YWVlM1x1YWVlNFx1YWVlNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzMV1bcF1dPTMzNTM2K3AsYlszMzUzNitwXT1fWzEzMV1b'@;
put 'cF0pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVlZVx1YWVlZlx1YWVmMFx1YWVmMVx1YWVmMlx1YWVmM1x1YWVmNVx1YWVmNlx1YWVmN1x1YWVm'@;
put 'OVx1YWVmYVx1YWVmYlx1YWVmZFx1YWVmZVx1YWVmZlx1YWYwMFx1YWYwMVx1YWYwMlx1YWYwM1x1YWYwNFx1YWYwNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYwZlx1YWYxMVx1YWYxMlx1YWYxM1x1'@;
put 'YWYxNFx1YWYxNVx1YWYxNlx1YWYxN1x1YWYxOFx1YWYxOVx1YWYxYVx1YWYxYlx1YWYxY1x1YWYxZFx1YWYxZVx1YWYxZlx1YWYyMFx1YWYyMVx1YWYyMlx1YWYyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYyNFx1YWYyNVx1YWYyNlx1YWYyN1x1YWYyOFx1YWYy'@;
put 'OVx1YWYyYVx1YWYyYlx1YWYyZVx1YWYyZlx1YWYzMVx1YWYzM1x1YWYzNVx1YWYzNlx1YWYzN1x1YWYzOFx1YWYzOVx1YWYzYVx1YWYzYlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YVx1YWY0Ylx1YWY0Y1x1YWY0ZFx1YWY0ZVx1YWY0Zlx1YWY1MVx1YWY1Mlx1'@;
put 'YWY1M1x1YWY1NFx1YWY1NVx1YWY1Nlx1YWY1N1x1YWY1OFx1YWY1OVx1YWY1YVx1YWY1Ylx1YWY1ZVx1YWY1Zlx1YWY2MFx1YWY2MVx1YWY2Mlx1YWY2M1x1YWY2Nlx1YWY2N1x1YWY2OFx1YWY2OVx1YWY2YVx1YWY2Ylx1YWY2Y1x1YWY2ZFx1YWY2ZVx1YWY2Zlx1YWY3MFx1YWY3MVx1YWY3'@;
put 'Mlx1YWY3M1x1YWY3NFx1YWY3NVx1YWY3Nlx1YWY3N1x1YWY3OFx1YWY3YVx1YWY3Ylx1YWY3Y1x1YWY3ZFx1YWY3ZVx1YWY3Zlx1YWY4MVx1YWY4Mlx1YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OVx1YWY4YVx1YWY4Ylx1YWY4Y1x1YWY4ZFx1YWY4ZVx1YWY4Zlx1YWY5Mlx1YWY5M1x1'@;
put 'YWY5NFx1YWY5Nlx1YWY5N1x1YWY5OFx1YWY5OVx1YWY5YVx1YWY5Ylx1YWY5ZFx1YWY5ZVx1YWY5Zlx1YWZhMFx1YWZhMVx1YWZhMlx1YWZhM1x1YWZhNFx1YWZhNVx1YWZhNlx1YWZhN1x1YWZhOFx1YWZhOVx1YWZhYVx1YWZhYlx1YWZhY1x1YWZhZFx1YWZhZVx1YWZhZlx1YWZiMFx1YWZi'@;
put 'MVx1YWZiMlx1YWZiM1x1YWZiNFx1YWZiNVx1YWZiNlx1YWZiN1x1YWZiYVx1YWZiYlx1YWZiZFx1YWZiZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzMl1bcF1dPTMzNzkyK3AsYlszMzc5'@;
put 'MitwXT1fWzEzMl1bcF0pO2ZvcihfWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZiZlx1YWZjMVx1YWZjMlx1YWZjM1x1YWZjNFx1YWZjNVx1YWZjNlx1YWZjYVx1YWZjY1x1YWZjZlx1YWZkMFx1YWZkMVx1YWZk'@;
put 'Mlx1YWZkM1x1YWZkNVx1YWZkNlx1YWZkN1x1YWZkOFx1YWZkOVx1YWZkYVx1YWZkYlx1YWZkZFx1YWZkZVx1YWZkZlx1YWZlMFx1YWZlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZlMlx1YWZlM1x1YWZlNFx1YWZlNVx1YWZlNlx1YWZlN1x1YWZlYVx1YWZlYlx1'@;
put 'YWZlY1x1YWZlZFx1YWZlZVx1YWZlZlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOVx1YWZmYVx1YWZmYlx1YWZmY1x1YWZmZFx1YWZmZVx1YWZmZlx1YjAwMlx1YjAwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjAwNVx1YjAwNlx1YjAwN1x1YjAw'@;
put 'OFx1YjAwOVx1YjAwYVx1YjAwYlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAxNVx1YjAxNlx1YjAxN1x1YjAxOFx1YjAxOVx1YjAxYVx1YjAxYlx1YjAxZVx1YjAxZlx1YjAyMFx1YjAyMVx1YjAyMlx1YjAyM1x1YjAyNFx1YjAyNVx1YjAyNlx1YjAyN1x1YjAyOVx1'@;
put 'YjAyYVx1YjAyYlx1YjAyY1x1YjAyZFx1YjAyZVx1YjAyZlx1YjAzMFx1YjAzMVx1YjAzMlx1YjAzM1x1YjAzNFx1YjAzNVx1YjAzNlx1YjAzN1x1YjAzOFx1YjAzOVx1YjAzYVx1YjAzYlx1YjAzY1x1YjAzZFx1YjAzZVx1YjAzZlx1YjA0MFx1YjA0MVx1YjA0Mlx1YjA0M1x1YjA0Nlx1YjA0'@;
put 'N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZVx1YjA1Zlx1YjA2MFx1YjA2MVx1YjA2Mlx1YjA2M1x1YjA2NFx1YjA2NVx1YjA2Nlx1YjA2N1x1YjA2OFx1YjA2OVx1YjA2YVx1YjA2Ylx1YjA2Y1x1'@;
put 'YjA2ZFx1YjA2ZVx1YjA2Zlx1YjA3MFx1YjA3MVx1YjA3Mlx1YjA3M1x1YjA3NFx1YjA3NVx1YjA3Nlx1YjA3N1x1YjA3OFx1YjA3OVx1YjA3YVx1YjA3Ylx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NVx1YjA4Nlx1YjA4N1x1YjA4OFx1YjA4OVx1YjA4YVx1YjA4Ylx1YjA4'@;
put 'ZVx1YjA5MFx1YjA5Mlx1YjA5M1x1YjA5NFx1YjA5NVx1YjA5Nlx1YjA5N1x1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzM11bcF1dPTM0'@;
put 'MDQ4K3AsYlszNDA0OCtwXT1fWzEzM11bcF0pO2ZvcihfWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBhNVx1YjBhNlx1YjBhN1x1YjBhYVx1YjBiMFx1YjBiMlx1YjBiNlx1YjBiN1x1YjBiOVx1YjBiYVx1YjBi'@;
put 'Ylx1YjBiZFx1YjBiZVx1YjBiZlx1YjBjMFx1YjBjMVx1YjBjMlx1YjBjM1x1YjBjNlx1YjBjYVx1YjBjYlx1YjBjY1x1YjBjZFx1YjBjZVx1YjBjZlx1YjBkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBkM1x1YjBkNVx1YjBkNlx1YjBkN1x1YjBkOVx1YjBkYVx1'@;
put 'YjBkYlx1YjBkY1x1YjBkZFx1YjBkZVx1YjBkZlx1YjBlMVx1YjBlMlx1YjBlM1x1YjBlNFx1YjBlNlx1YjBlN1x1YjBlOFx1YjBlOVx1YjBlYVx1YjBlYlx1YjBlY1x1YjBlZFx1YjBlZVx1YjBlZlx1YjBmMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBmMVx1YjBm'@;
put 'Mlx1YjBmM1x1YjBmNFx1YjBmNVx1YjBmNlx1YjBmN1x1YjBmOFx1YjBmOVx1YjBmYVx1YjBmYlx1YjBmY1x1YjBmZFx1YjBmZVx1YjBmZlx1YjEwMFx1YjEwMVx1YjEwMlx1YjEwM1x1YjEwNFx1YjEwNVx1YjEwNlx1YjEwN1x1YjEwYVx1YjEwZFx1YjEwZVx1YjEwZlx1YjExMVx1YjExNFx1'@;
put 'YjExNVx1YjExNlx1YjExN1x1YjExYVx1YjExZVx1YjExZlx1YjEyMFx1YjEyMVx1YjEyMlx1YjEyNlx1YjEyN1x1YjEyOVx1YjEyYVx1YjEyYlx1YjEyZFx1YjEyZVx1YjEyZlx1YjEzMFx1YjEzMVx1YjEzMlx1YjEzM1x1YjEzNlx1YjEzYVx1YjEzYlx1YjEzY1x1YjEzZFx1YjEzZVx1YjEz'@;
put 'Zlx1YjE0Mlx1YjE0M1x1YjE0NVx1YjE0Nlx1YjE0N1x1YjE0OVx1YjE0YVx1YjE0Ylx1YjE0Y1x1YjE0ZFx1YjE0ZVx1YjE0Zlx1YjE1Mlx1YjE1M1x1YjE1Nlx1YjE1N1x1YjE1OVx1YjE1YVx1YjE1Ylx1YjE1ZFx1YjE1ZVx1YjE1Zlx1YjE2MVx1YjE2Mlx1YjE2M1x1YjE2NFx1YjE2NVx1'@;
put 'YjE2Nlx1YjE2N1x1YjE2OFx1YjE2OVx1YjE2YVx1YjE2Ylx1YjE2Y1x1YjE2ZFx1YjE2ZVx1YjE2Zlx1YjE3MFx1YjE3MVx1YjE3Mlx1YjE3M1x1YjE3NFx1YjE3NVx1YjE3Nlx1YjE3N1x1YjE3YVx1YjE3Ylx1YjE3ZFx1YjE3ZVx1YjE3Zlx1YjE4MVx1YjE4M1x1YjE4NFx1YjE4NVx1YjE4'@;
put 'Nlx1YjE4N1x1YjE4YVx1YjE4Y1x1YjE4ZVx1YjE4Zlx1YjE5MFx1YjE5MVx1YjE5NVx1YjE5Nlx1YjE5N1x1YjE5OVx1YjE5YVx1YjE5Ylx1YjE5ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtf'@;
put 'WzEzNF1bcF1dPTM0MzA0K3AsYlszNDMwNCtwXT1fWzEzNF1bcF0pO2ZvcihfWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjE5ZVx1YjE5Zlx1YjFhMFx1YjFhMVx1YjFhMlx1YjFhM1x1YjFhNFx1YjFhNVx1YjFh'@;
put 'Nlx1YjFhN1x1YjFhOVx1YjFhYVx1YjFhYlx1YjFhY1x1YjFhZFx1YjFhZVx1YjFhZlx1YjFiMFx1YjFiMVx1YjFiMlx1YjFiM1x1YjFiNFx1YjFiNVx1YjFiNlx1YjFiN1x1YjFiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFiOVx1YjFiYVx1YjFiYlx1YjFiY1x1'@;
put 'YjFiZFx1YjFiZVx1YjFiZlx1YjFjMFx1YjFjMVx1YjFjMlx1YjFjM1x1YjFjNFx1YjFjNVx1YjFjNlx1YjFjN1x1YjFjOFx1YjFjOVx1YjFjYVx1YjFjYlx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFkMlx1YjFkM1x1YjFkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1YjFkNlx1YjFkN1x1YjFkOFx1YjFkOVx1YjFkYVx1YjFkYlx1YjFkZVx1YjFlMFx1YjFlMVx1YjFlMlx1YjFlM1x1YjFlNFx1YjFlNVx1YjFlNlx1YjFlN1x1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMVx1YjFmMlx1YjFmM1x1YjFmNFx1YjFmNVx1YjFmNlx1YjFmN1x1'@;
put 'YjFmOFx1YjFmYVx1YjFmY1x1YjFmZVx1YjFmZlx1YjIwMFx1YjIwMVx1YjIwMlx1YjIwM1x1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZFx1YjIwZVx1YjIwZlx1YjIxMFx1YjIxMVx1YjIxMlx1YjIxM1x1YjIxNlx1YjIxOFx1YjIxYVx1YjIxYlx1YjIxY1x1YjIxZFx1YjIxZVx1YjIx'@;
put 'Zlx1YjIyMVx1YjIyMlx1YjIyM1x1YjIyNFx1YjIyNVx1YjIyNlx1YjIyN1x1YjIyOFx1YjIyOVx1YjIyYVx1YjIyYlx1YjIyY1x1YjIyZFx1YjIyZVx1YjIyZlx1YjIzMFx1YjIzMVx1YjIzMlx1YjIzM1x1YjIzNVx1YjIzNlx1YjIzN1x1YjIzOFx1YjIzOVx1YjIzYVx1YjIzYlx1YjIzZFx1'@;
put 'YjIzZVx1YjIzZlx1YjI0MFx1YjI0MVx1YjI0Mlx1YjI0M1x1YjI0NFx1YjI0NVx1YjI0Nlx1YjI0N1x1YjI0OFx1YjI0OVx1YjI0YVx1YjI0Ylx1YjI0Y1x1YjI0ZFx1YjI0ZVx1YjI0Zlx1YjI1MFx1YjI1MVx1YjI1Mlx1YjI1M1x1YjI1NFx1YjI1NVx1YjI1Nlx1YjI1N1x1YjI1OVx1YjI1'@;
put 'YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MVx1YjI2Mlx1YjI2M1x1YjI2NFx1YjI2NVx1YjI2Nlx1YjI2N1x1YjI2YVx1YjI2Ylx1YjI2Y1x1YjI2ZFx1YjI2ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM1XVtwXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoRFtfWzEzNV1bcF1dPTM0NTYwK3AsYlszNDU2MCtwXT1fWzEzNV1bcF0pO2ZvcihfWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI2Zlx1YjI3MFx1YjI3MVx1YjI3Mlx1YjI3M1x1YjI3Nlx1YjI3'@;
put 'N1x1YjI3OFx1YjI3OVx1YjI3YVx1YjI3Ylx1YjI3ZFx1YjI3ZVx1YjI3Zlx1YjI4MFx1YjI4MVx1YjI4Mlx1YjI4M1x1YjI4Nlx1YjI4N1x1YjI4OFx1YjI4YVx1YjI4Ylx1YjI4Y1x1YjI4ZFx1YjI4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI4Zlx1YjI5Mlx1'@;
put 'YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5Ylx1YjI5Y1x1YjI5ZFx1YjI5ZVx1YjI5Zlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJhYlx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1YjJiOFx1YjJiOVx1YjJiYVx1YjJiYlx1YjJiY1x1YjJiZFx1YjJiZVx1YjJiZlx1YjJjMFx1YjJjMVx1YjJjMlx1YjJjM1x1YjJjNFx1YjJjNVx1YjJjNlx1YjJjN1x1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkM1x1YjJkNFx1YjJkNVx1'@;
put 'YjJkNlx1YjJkN1x1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOVx1YjMwYVx1YjMwYlx1YjMw'@;
put 'Y1x1YjMwZFx1YjMwZVx1YjMwZlx1YjMxMlx1YjMxNlx1YjMxN1x1YjMxOFx1YjMxOVx1YjMxYVx1YjMxYlx1YjMxZFx1YjMxZVx1YjMxZlx1YjMyMFx1YjMyMVx1YjMyMlx1YjMyM1x1YjMyNFx1YjMyNVx1YjMyNlx1YjMyN1x1YjMyOFx1YjMyOVx1YjMyYVx1YjMyYlx1YjMyY1x1YjMyZFx1'@;
put 'YjMyZVx1YjMyZlx1YjMzMFx1YjMzMVx1YjMzMlx1YjMzM1x1YjMzNFx1YjMzNVx1YjMzNlx1YjMzN1x1YjMzOFx1YjMzOVx1YjMzYVx1YjMzYlx1YjMzY1x1YjMzZFx1YjMzZVx1YjMzZlx1YjM0MFx1YjM0MVx1YjM0Mlx1YjM0M1x1YjM0NFx1YjM0NVx1YjM0Nlx1YjM0N1x1YjM0OFx1YjM0'@;
put 'OVx1YjM0YVx1YjM0Ylx1YjM0Y1x1YjM0ZFx1YjM0ZVx1YjM0Zlx1YjM1MFx1YjM1MVx1YjM1Mlx1YjM1M1x1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1YjM2MVx1YjM2Mlx1YjM2M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM2'@;
put 'XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzNl1bcF1dPTM0ODE2K3AsYlszNDgxNitwXT1fWzEzNl1bcF0pO2ZvcihfWzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjM2Nlx1YjM2OFx1YjM2YVx1YjM2Y1x1YjM2'@;
put 'ZFx1YjM2Zlx1YjM3Mlx1YjM3M1x1YjM3NVx1YjM3Nlx1YjM3N1x1YjM3OVx1YjM3YVx1YjM3Ylx1YjM3Y1x1YjM3ZFx1YjM3ZVx1YjM3Zlx1YjM4Mlx1YjM4Nlx1YjM4N1x1YjM4OFx1YjM4OVx1YjM4YVx1YjM4Ylx1YjM4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'YjM4ZVx1YjM4Zlx1YjM5MVx1YjM5Mlx1YjM5M1x1YjM5NVx1YjM5Nlx1YjM5N1x1YjM5OFx1YjM5OVx1YjM5YVx1YjM5Ylx1YjM5Y1x1YjM5ZFx1YjM5ZVx1YjM5Zlx1YjNhMlx1YjNhM1x1YjNhNFx1YjNhNVx1YjNhNlx1YjNhN1x1YjNhOVx1YjNhYVx1YjNhYlx1YjNhZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjNhZVx1YjNhZlx1YjNiMFx1YjNiMVx1YjNiMlx1YjNiM1x1YjNiNFx1YjNiNVx1YjNiNlx1YjNiN1x1YjNiOFx1YjNiOVx1YjNiYVx1YjNiYlx1YjNiY1x1YjNiZFx1YjNiZVx1YjNiZlx1YjNjMFx1YjNjMVx1YjNjMlx1YjNjM1x1YjNjNlx1'@;
put 'YjNjN1x1YjNjOVx1YjNjYVx1YjNjZFx1YjNjZlx1YjNkMVx1YjNkMlx1YjNkM1x1YjNkNlx1YjNkOFx1YjNkYVx1YjNkY1x1YjNkZVx1YjNkZlx1YjNlMVx1YjNlMlx1YjNlM1x1YjNlNVx1YjNlNlx1YjNlN1x1YjNlOVx1YjNlYVx1YjNlYlx1YjNlY1x1YjNlZFx1YjNlZVx1YjNlZlx1YjNm'@;
put 'MFx1YjNmMVx1YjNmMlx1YjNmM1x1YjNmNFx1YjNmNVx1YjNmNlx1YjNmN1x1YjNmOFx1YjNmOVx1YjNmYVx1YjNmYlx1YjNmZFx1YjNmZVx1YjNmZlx1YjQwMFx1YjQwMVx1YjQwMlx1YjQwM1x1YjQwNFx1YjQwNVx1YjQwNlx1YjQwN1x1YjQwOFx1YjQwOVx1YjQwYVx1YjQwYlx1YjQwY1x1'@;
put 'YjQwZFx1YjQwZVx1YjQwZlx1YjQxMVx1YjQxMlx1YjQxM1x1YjQxNFx1YjQxNVx1YjQxNlx1YjQxN1x1YjQxOVx1YjQxYVx1YjQxYlx1YjQxZFx1YjQxZVx1YjQxZlx1YjQyMVx1YjQyMlx1YjQyM1x1YjQyNFx1YjQyNVx1YjQyNlx1YjQyN1x1YjQyYVx1YjQyY1x1YjQyZFx1YjQyZVx1YjQy'@;
put 'Zlx1YjQzMFx1YjQzMVx1YjQzMlx1YjQzM1x1YjQzNVx1YjQzNlx1YjQzN1x1YjQzOFx1YjQzOVx1YjQzYVx1YjQzYlx1YjQzY1x1YjQzZFx1YjQzZVx1YjQzZlx1YjQ0MFx1YjQ0MVx1YjQ0Mlx1YjQ0M1x1YjQ0NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzN10ubGVuZ3RoOysrcCk2'@;
put 'NTUzMyE9PV9bMTM3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzN11bcF1dPTM1MDcyK3AsYlszNTA3MitwXT1fWzEzN11bcF0pO2ZvcihfWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ0NVx1YjQ0Nlx1YjQ0'@;
put 'N1x1YjQ0OFx1YjQ0OVx1YjQ0YVx1YjQ0Ylx1YjQ0Y1x1YjQ0ZFx1YjQ0ZVx1YjQ0Zlx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OVx1YjQ1YVx1YjQ1Ylx1YjQ1Y1x1YjQ1ZFx1YjQ1ZVx1YjQ1Zlx1YjQ2Mlx1YjQ2NFx1YjQ2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1YjQ2N1x1YjQ2OFx1YjQ2OVx1YjQ2YVx1YjQ2Ylx1YjQ2ZFx1YjQ2ZVx1YjQ2Zlx1YjQ3MFx1YjQ3MVx1YjQ3Mlx1YjQ3M1x1YjQ3NFx1YjQ3NVx1YjQ3Nlx1YjQ3N1x1YjQ3OFx1YjQ3OVx1YjQ3YVx1YjQ3Ylx1YjQ3Y1x1YjQ3ZFx1YjQ3ZVx1YjQ3Zlx1YjQ4MVx1YjQ4'@;
put 'Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ4M1x1YjQ4NFx1YjQ4NVx1YjQ4Nlx1YjQ4N1x1YjQ4OVx1YjQ4YVx1YjQ4Ylx1YjQ4Y1x1YjQ4ZFx1YjQ4ZVx1YjQ4Zlx1YjQ5MFx1YjQ5MVx1YjQ5Mlx1YjQ5M1x1YjQ5NFx1YjQ5NVx1YjQ5Nlx1YjQ5N1x1YjQ5OFx1'@;
put 'YjQ5OVx1YjQ5YVx1YjQ5Ylx1YjQ5Y1x1YjQ5ZVx1YjQ5Zlx1YjRhMFx1YjRhMVx1YjRhMlx1YjRhM1x1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRhYVx1YjRhYlx1YjRhZFx1YjRhZVx1YjRhZlx1YjRiMFx1YjRiMVx1YjRiMlx1YjRiM1x1YjRiNFx1YjRiNlx1YjRiOFx1YjRiYVx1YjRi'@;
put 'Ylx1YjRiY1x1YjRiZFx1YjRiZVx1YjRiZlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOVx1YjRjYVx1YjRjYlx1YjRjY1x1YjRjZFx1YjRjZVx1YjRjZlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNlx1YjRkN1x1YjRkOFx1YjRkOVx1YjRkYVx1YjRkYlx1'@;
put 'YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRlN1x1YjRlOFx1YjRlOVx1YjRlYVx1YjRlYlx1YjRlZVx1YjRmMFx1YjRmMlx1YjRmM1x1YjRmNFx1YjRmNVx1YjRmNlx1YjRmN1x1YjRmOVx1YjRmYVx1YjRmYlx1YjRmY1x1YjRmZFx1YjRmZVx1YjRmZlx1YjUwMFx1YjUwMVx1YjUw'@;
put 'Mlx1YjUwM1x1YjUwNFx1YjUwNVx1YjUwNlx1YjUwN1x1YjUwOFx1YjUwOVx1YjUwYVx1YjUwYlx1YjUwY1x1YjUwZFx1YjUwZVx1YjUwZlx1YjUxMFx1YjUxMVx1YjUxMlx1YjUxM1x1YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzOF0u'@;
put 'bGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzOF1bcF1dPTM1MzI4K3AsYlszNTMyOCtwXT1fWzEzOF1bcF0pO2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjUx'@;
put 'ZVx1YjUxZlx1YjUyMFx1YjUyMVx1YjUyMlx1YjUyM1x1YjUyNlx1YjUyYlx1YjUyY1x1YjUyZFx1YjUyZVx1YjUyZlx1YjUzMlx1YjUzM1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOVx1YjUzYVx1YjUzYlx1YjUzY1x1YjUzZFx1YjUzZVx1YjUzZlx1YjU0Mlx1YjU0Nlx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NVx1YjU1Nlx1YjU1N1x1YjU1OFx1YjU1OVx1YjU1YVx1YjU1Ylx1YjU1ZVx1YjU2Mlx1YjU2M1x1YjU2NFx1YjU2NVx1YjU2Nlx1YjU2N1x1YjU2'@;
put 'OFx1YjU2OVx1YjU2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU2Ylx1YjU2Y1x1YjU2ZFx1YjU2ZVx1YjU2Zlx1YjU3MFx1YjU3MVx1YjU3Mlx1YjU3M1x1YjU3NFx1YjU3NVx1YjU3Nlx1YjU3N1x1YjU3OFx1YjU3OVx1YjU3YVx1YjU3Ylx1YjU3Y1x1YjU3ZFx1'@;
put 'YjU3ZVx1YjU3Zlx1YjU4MFx1YjU4MVx1YjU4Mlx1YjU4M1x1YjU4NFx1YjU4NVx1YjU4Nlx1YjU4N1x1YjU4OFx1YjU4OVx1YjU4YVx1YjU4Ylx1YjU4Y1x1YjU4ZFx1YjU4ZVx1YjU4Zlx1YjU5MFx1YjU5MVx1YjU5Mlx1YjU5M1x1YjU5NFx1YjU5NVx1YjU5Nlx1YjU5N1x1YjU5OFx1YjU5'@;
put 'OVx1YjU5YVx1YjU5Ylx1YjU5Y1x1YjU5ZFx1YjU5ZVx1YjU5Zlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVhY1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNlx1YjViN1x1YjViOFx1YjViOVx1YjViYVx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1YjVjM1x1'@;
put 'YjVjNVx1YjVjNlx1YjVjN1x1YjVjOFx1YjVjOVx1YjVjYVx1YjVjYlx1YjVjZVx1YjVkMlx1YjVkM1x1YjVkNFx1YjVkNVx1YjVkNlx1YjVkN1x1YjVkOVx1YjVkYVx1YjVkYlx1YjVkY1x1YjVkZFx1YjVkZVx1YjVkZlx1YjVlMFx1YjVlMVx1YjVlMlx1YjVlM1x1YjVlNFx1YjVlNVx1YjVl'@;
put 'Nlx1YjVlN1x1YjVlOFx1YjVlOVx1YjVlYVx1YjVlYlx1YjVlZFx1YjVlZVx1YjVlZlx1YjVmMFx1YjVmMVx1YjVmMlx1YjVmM1x1YjVmNFx1YjVmNVx1YjVmNlx1YjVmN1x1YjVmOFx1YjVmOVx1YjVmYVx1YjVmYlx1YjVmY1x1YjVmZFx1YjVmZVx1YjVmZlx1ZmZmZCIuc3BsaXQoIiIpLHA9'@;
put 'MDtwIT1fWzEzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzEzOV1bcF1dPTM1NTg0K3AsYlszNTU4NCtwXT1fWzEzOV1bcF0pO2ZvcihfWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1YjYwMFx1YjYwMVx1YjYwMlx1YjYwM1x1YjYwNFx1YjYwNVx1YjYwNlx1YjYwN1x1YjYwOFx1YjYwOVx1YjYwYVx1YjYwYlx1YjYwY1x1YjYwZFx1YjYwZVx1YjYwZlx1YjYxMlx1YjYxM1x1YjYxNVx1YjYxNlx1YjYxN1x1YjYxOVx1YjYxYVx1YjYxYlx1YjYxY1x1YjYxZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYxZVx1YjYxZlx1YjYyMFx1YjYyMVx1YjYyMlx1YjYyM1x1YjYyNFx1YjYyNlx1YjYyN1x1YjYyOFx1YjYyOVx1YjYyYVx1YjYyYlx1YjYyZFx1YjYyZVx1YjYyZlx1YjYzMFx1YjYzMVx1YjYzMlx1YjYzM1x1YjYzNVx1YjYz'@;
put 'Nlx1YjYzN1x1YjYzOFx1YjYzOVx1YjYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYzYlx1YjYzY1x1YjYzZFx1YjYzZVx1YjYzZlx1YjY0MFx1YjY0MVx1YjY0Mlx1YjY0M1x1YjY0NFx1YjY0NVx1YjY0Nlx1YjY0N1x1YjY0OVx1YjY0YVx1YjY0Ylx1YjY0Y1x1'@;
put 'YjY0ZFx1YjY0ZVx1YjY0Zlx1YjY1MFx1YjY1MVx1YjY1Mlx1YjY1M1x1YjY1NFx1YjY1NVx1YjY1Nlx1YjY1N1x1YjY1OFx1YjY1OVx1YjY1YVx1YjY1Ylx1YjY1Y1x1YjY1ZFx1YjY1ZVx1YjY1Zlx1YjY2MFx1YjY2MVx1YjY2Mlx1YjY2M1x1YjY2NVx1YjY2Nlx1YjY2N1x1YjY2OVx1YjY2'@;
put 'YVx1YjY2Ylx1YjY2Y1x1YjY2ZFx1YjY2ZVx1YjY2Zlx1YjY3MFx1YjY3MVx1YjY3Mlx1YjY3M1x1YjY3NFx1YjY3NVx1YjY3Nlx1YjY3N1x1YjY3OFx1YjY3OVx1YjY3YVx1YjY3Ylx1YjY3Y1x1YjY3ZFx1YjY3ZVx1YjY3Zlx1YjY4MFx1YjY4MVx1YjY4Mlx1YjY4M1x1YjY4NFx1YjY4NVx1'@;
put 'YjY4Nlx1YjY4N1x1YjY4OFx1YjY4OVx1YjY4YVx1YjY4Ylx1YjY4Y1x1YjY4ZFx1YjY4ZVx1YjY4Zlx1YjY5MFx1YjY5MVx1YjY5Mlx1YjY5M1x1YjY5NFx1YjY5NVx1YjY5Nlx1YjY5N1x1YjY5OFx1YjY5OVx1YjY5YVx1YjY5Ylx1YjY5ZVx1YjY5Zlx1YjZhMVx1YjZhMlx1YjZhM1x1YjZh'@;
put 'NVx1YjZhNlx1YjZhN1x1YjZhOFx1YjZhOVx1YjZhYVx1YjZhZFx1YjZhZVx1YjZhZlx1YjZiMFx1YjZiMlx1YjZiM1x1YjZiNFx1YjZiNVx1YjZiNlx1YjZiN1x1YjZiOFx1YjZiOVx1YjZiYVx1YjZiYlx1YjZiY1x1YjZiZFx1YjZiZVx1YjZiZlx1YjZjMFx1YjZjMVx1YjZjMlx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLHA9MDtwIT1fWzE0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0MF1bcF1dPTM1ODQwK3AsYlszNTg0MCtwXT1fWzE0MF1bcF0pO2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZjM1x1YjZjNFx1YjZjNVx1YjZjNlx1YjZjN1x1YjZjOFx1YjZjOVx1YjZjYVx1YjZjYlx1YjZjY1x1YjZjZFx1YjZjZVx1YjZjZlx1YjZkMFx1YjZkMVx1YjZkMlx1YjZkM1x1YjZkNVx1YjZkNlx1YjZkN1x1YjZkOFx1YjZkOVx1YjZkYVx1YjZkYlx1'@;
put 'YjZkY1x1YjZkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZkZVx1YjZkZlx1YjZlMFx1YjZlMVx1YjZlMlx1YjZlM1x1YjZlNFx1YjZlNVx1YjZlNlx1YjZlN1x1YjZlOFx1YjZlOVx1YjZlYVx1YjZlYlx1YjZlY1x1YjZlZFx1YjZlZVx1YjZlZlx1YjZmMVx1YjZm'@;
put 'Mlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZmYlx1YjZmY1x1YjZmZFx1YjZmZVx1YjZmZlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNlx1YjcwN1x1YjcwOFx1YjcwOVx1YjcwYVx1YjcwYlx1YjcwY1x1'@;
put 'YjcwZFx1YjcwZVx1YjcwZlx1YjcxMFx1YjcxMVx1YjcxMlx1YjcxM1x1YjcxNFx1YjcxNVx1YjcxNlx1YjcxN1x1YjcxOFx1YjcxOVx1YjcxYVx1YjcxYlx1YjcxY1x1YjcxZFx1YjcxZVx1YjcxZlx1YjcyMFx1YjcyMVx1YjcyMlx1YjcyM1x1YjcyNFx1YjcyNVx1YjcyNlx1YjcyN1x1Yjcy'@;
put 'YVx1YjcyYlx1YjcyZFx1YjcyZVx1YjczMVx1YjczMlx1YjczM1x1YjczNFx1YjczNVx1YjczNlx1YjczN1x1YjczYVx1YjczY1x1YjczZFx1YjczZVx1YjczZlx1Yjc0MFx1Yjc0MVx1Yjc0Mlx1Yjc0M1x1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZFx1Yjc0ZVx1'@;
put 'Yjc0Zlx1Yjc1MFx1Yjc1MVx1Yjc1Mlx1Yjc1M1x1Yjc1Nlx1Yjc1N1x1Yjc1OFx1Yjc1OVx1Yjc1YVx1Yjc1Ylx1Yjc1Y1x1Yjc1ZFx1Yjc1ZVx1Yjc1Zlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2NVx1Yjc2Nlx1Yjc2N1x1Yjc2OVx1Yjc2YVx1Yjc2Ylx1Yjc2Y1x1Yjc2ZFx1Yjc2ZVx1Yjc2'@;
put 'Zlx1Yjc3Mlx1Yjc3NFx1Yjc3Nlx1Yjc3N1x1Yjc3OFx1Yjc3OVx1Yjc3YVx1Yjc3Ylx1Yjc3ZVx1Yjc3Zlx1Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NVx1Yjc4Nlx1Yjc4N1x1Yjc4OFx1Yjc4OVx1Yjc4YVx1Yjc4Ylx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1'@;
put 'Yjc5ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0MV1bcF1dPTM2MDk2K3AsYlszNjA5NitwXT1fWzE0MV1bcF0pO2ZvcihfWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjc5Zlx1YjdhMVx1YjdhMlx1YjdhM1x1YjdhNFx1YjdhNVx1YjdhNlx1YjdhN1x1YjdhYVx1YjdhZVx1YjdhZlx1YjdiMFx1YjdiMVx1YjdiMlx1YjdiM1x1YjdiNlx1YjdiN1x1YjdiOVx1YjdiYVx1YjdiYlx1YjdiY1x1YjdiZFx1'@;
put 'YjdiZVx1YjdiZlx1YjdjMFx1YjdjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdjMlx1YjdjM1x1YjdjNFx1YjdjNVx1YjdjNlx1YjdjOFx1YjdjYVx1YjdjYlx1YjdjY1x1YjdjZFx1YjdjZVx1YjdjZlx1YjdkMFx1YjdkMVx1YjdkMlx1YjdkM1x1YjdkNFx1Yjdk'@;
put 'NVx1YjdkNlx1YjdkN1x1YjdkOFx1YjdkOVx1YjdkYVx1YjdkYlx1YjdkY1x1YjdkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdkZVx1YjdkZlx1YjdlMFx1YjdlMVx1YjdlMlx1YjdlM1x1YjdlNFx1YjdlNVx1YjdlNlx1YjdlN1x1YjdlOFx1YjdlOVx1YjdlYVx1'@;
put 'YjdlYlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNVx1YjdmNlx1YjdmN1x1YjdmOFx1YjdmOVx1YjdmYVx1YjdmYlx1YjdmZVx1YjgwMlx1YjgwM1x1YjgwNFx1YjgwNVx1YjgwNlx1YjgwYVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMVx1YjgxMlx1YjgxM1x1Yjgx'@;
put 'NFx1YjgxNVx1YjgxNlx1YjgxN1x1YjgxYVx1YjgxY1x1YjgxZVx1YjgxZlx1YjgyMFx1YjgyMVx1YjgyMlx1YjgyM1x1YjgyNlx1YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZFx1YjgyZVx1YjgyZlx1YjgzMFx1YjgzMVx1YjgzMlx1YjgzM1x1YjgzNlx1YjgzYVx1YjgzYlx1YjgzY1x1'@;
put 'YjgzZFx1YjgzZVx1YjgzZlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NVx1Yjg0Nlx1Yjg0N1x1Yjg0OFx1Yjg0OVx1Yjg0YVx1Yjg0Ylx1Yjg0Y1x1Yjg0ZFx1Yjg0ZVx1Yjg0Zlx1Yjg1MFx1Yjg1Mlx1Yjg1NFx1Yjg1NVx1Yjg1Nlx1Yjg1N1x1Yjg1OFx1Yjg1OVx1Yjg1YVx1Yjg1Ylx1Yjg1'@;
put 'ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NVx1Yjg2Nlx1Yjg2N1x1Yjg2OFx1Yjg2OVx1Yjg2YVx1Yjg2Ylx1Yjg2ZVx1Yjg3MFx1Yjg3Mlx1Yjg3M1x1Yjg3NFx1Yjg3NVx1Yjg3Nlx1Yjg3N1x1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZFx1Yjg3ZVx1Yjg3Zlx1Yjg4MFx1Yjg4MVx1'@;
put 'Yjg4Mlx1Yjg4M1x1Yjg4NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0Ml1bcF1dPTM2MzUyK3AsYlszNjM1MitwXT1fWzE0Ml1bcF0pO2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjg4NVx1Yjg4Nlx1Yjg4N1x1Yjg4OFx1Yjg4OVx1Yjg4YVx1Yjg4Ylx1Yjg4Y1x1Yjg4ZVx1Yjg4Zlx1Yjg5MFx1Yjg5MVx1Yjg5Mlx1Yjg5M1x1Yjg5NFx1Yjg5NVx1Yjg5Nlx1Yjg5N1x1Yjg5OFx1Yjg5OVx1'@;
put 'Yjg5YVx1Yjg5Ylx1Yjg5Y1x1Yjg5ZFx1Yjg5ZVx1Yjg5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjhhMFx1YjhhMVx1YjhhMlx1YjhhM1x1YjhhNFx1YjhhNVx1YjhhNlx1YjhhN1x1YjhhOVx1YjhhYVx1YjhhYlx1YjhhY1x1YjhhZFx1YjhhZVx1YjhhZlx1Yjhi'@;
put 'MVx1YjhiMlx1YjhiM1x1YjhiNVx1YjhiNlx1YjhiN1x1YjhiOVx1YjhiYVx1YjhiYlx1YjhiY1x1YjhiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjhiZVx1YjhiZlx1YjhjMlx1YjhjNFx1YjhjNlx1YjhjN1x1YjhjOFx1YjhjOVx1YjhjYVx1YjhjYlx1YjhjZFx1'@;
put 'YjhjZVx1YjhjZlx1YjhkMVx1YjhkMlx1YjhkM1x1YjhkNVx1YjhkNlx1YjhkN1x1YjhkOFx1YjhkOVx1YjhkYVx1YjhkYlx1YjhkY1x1YjhkZVx1YjhlMFx1YjhlMlx1YjhlM1x1YjhlNFx1YjhlNVx1YjhlNlx1YjhlN1x1YjhlYVx1YjhlYlx1YjhlZFx1YjhlZVx1YjhlZlx1YjhmMVx1Yjhm'@;
put 'Mlx1YjhmM1x1YjhmNFx1YjhmNVx1YjhmNlx1YjhmN1x1YjhmYVx1YjhmY1x1YjhmZVx1YjhmZlx1YjkwMFx1YjkwMVx1YjkwMlx1YjkwM1x1YjkwNVx1YjkwNlx1YjkwN1x1YjkwOFx1YjkwOVx1YjkwYVx1YjkwYlx1YjkwY1x1YjkwZFx1YjkwZVx1YjkwZlx1YjkxMFx1YjkxMVx1YjkxMlx1'@;
put 'YjkxM1x1YjkxNFx1YjkxNVx1YjkxNlx1YjkxN1x1YjkxOVx1YjkxYVx1YjkxYlx1YjkxY1x1YjkxZFx1YjkxZVx1YjkxZlx1YjkyMVx1YjkyMlx1YjkyM1x1YjkyNFx1YjkyNVx1YjkyNlx1YjkyN1x1YjkyOFx1YjkyOVx1YjkyYVx1YjkyYlx1YjkyY1x1YjkyZFx1YjkyZVx1YjkyZlx1Yjkz'@;
put 'MFx1YjkzMVx1YjkzMlx1YjkzM1x1YjkzNFx1YjkzNVx1YjkzNlx1YjkzN1x1YjkzOFx1YjkzOVx1YjkzYVx1YjkzYlx1YjkzZVx1YjkzZlx1Yjk0MVx1Yjk0Mlx1Yjk0M1x1Yjk0NVx1Yjk0Nlx1Yjk0N1x1Yjk0OFx1Yjk0OVx1Yjk0YVx1Yjk0Ylx1Yjk0ZFx1Yjk0ZVx1Yjk1MFx1Yjk1Mlx1'@;
put 'Yjk1M1x1Yjk1NFx1Yjk1NVx1Yjk1Nlx1Yjk1N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0M11bcF1dPTM2NjA4K3AsYlszNjYwOCtwXT1fWzE0M11bcF0pO2ZvcihfWzE0NF09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MVx1Yjk2Mlx1Yjk2M1x1Yjk2NFx1Yjk2NVx1Yjk2Nlx1Yjk2N1x1Yjk2YVx1Yjk2Y1x1Yjk2ZVx1Yjk2Zlx1Yjk3MFx1Yjk3MVx1'@;
put 'Yjk3Mlx1Yjk3M1x1Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk3ZVx1Yjk3Zlx1Yjk4MFx1Yjk4MVx1Yjk4Mlx1Yjk4M1x1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4Zlx1Yjk5MFx1Yjk5MVx1Yjk5'@;
put 'Mlx1Yjk5M1x1Yjk5NFx1Yjk5NVx1Yjk5Nlx1Yjk5N1x1Yjk5OFx1Yjk5OVx1Yjk5YVx1Yjk5Ylx1Yjk5Y1x1Yjk5ZFx1Yjk5ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk5Zlx1YjlhMFx1YjlhMVx1YjlhMlx1YjlhM1x1YjlhNFx1YjlhNVx1YjlhNlx1YjlhN1x1'@;
put 'YjlhOFx1YjlhOVx1YjlhYVx1YjlhYlx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNVx1YjliNlx1YjliN1x1YjliOFx1YjliOVx1YjliYVx1YjliYlx1YjliZVx1YjljMFx1YjljMlx1YjljM1x1YjljNFx1YjljNVx1YjljNlx1YjljN1x1YjljYVx1YjljYlx1YjljZFx1Yjlk'@;
put 'M1x1YjlkNFx1YjlkNVx1YjlkNlx1YjlkN1x1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZFx1YjllZVx1YjllZlx1YjlmMFx1YjlmMVx1YjlmMlx1YjlmM1x1YjlmNlx1YjlmYlx1YjlmY1x1YjlmZFx1YjlmZVx1YjlmZlx1'@;
put 'YmEwMlx1YmEwM1x1YmEwNFx1YmEwNVx1YmEwNlx1YmEwN1x1YmEwOVx1YmEwYVx1YmEwYlx1YmEwY1x1YmEwZFx1YmEwZVx1YmEwZlx1YmExMFx1YmExMVx1YmExMlx1YmExM1x1YmExNFx1YmExNlx1YmExN1x1YmExOFx1YmExOVx1YmExYVx1YmExYlx1YmExY1x1YmExZFx1YmExZVx1YmEx'@;
put 'Zlx1YmEyMFx1YmEyMVx1YmEyMlx1YmEyM1x1YmEyNFx1YmEyNVx1YmEyNlx1YmEyN1x1YmEyOFx1YmEyOVx1YmEyYVx1YmEyYlx1YmEyY1x1YmEyZFx1YmEyZVx1YmEyZlx1YmEzMFx1YmEzMVx1YmEzMlx1YmEzM1x1YmEzNFx1YmEzNVx1YmEzNlx1YmEzN1x1YmEzYVx1YmEzYlx1YmEzZFx1'@;
put 'YmEzZVx1YmEzZlx1YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0NF1bcF1dPTM2ODY0K3AsYlszNjg2NCtwXT1fWzE0NF1bcF0pO2Zvcihf'@;
put 'WzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZFx1YmE1ZVx1YmE1Zlx1YmE2MFx1'@;
put 'YmE2MVx1YmE2Mlx1YmE2M1x1YmE2Nlx1YmE2YVx1YmE2Ylx1YmE2Y1x1YmE2ZFx1YmE2ZVx1YmE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OVx1YmE3YVx1YmE3Ylx1YmE3Y1x1YmE3ZFx1YmE3ZVx1YmE3'@;
put 'Zlx1YmE4MFx1YmE4MVx1YmE4Mlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZFx1YmE4ZVx1YmE4Zlx1YmE5MFx1YmE5MVx1YmE5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE5M1x1YmE5NFx1YmE5NVx1YmE5Nlx1YmE5N1x1YmE5OFx1YmE5OVx1'@;
put 'YmE5YVx1YmE5Ylx1YmE5Y1x1YmE5ZFx1YmE5ZVx1YmE5Zlx1YmFhMFx1YmFhMVx1YmFhMlx1YmFhM1x1YmFhNFx1YmFhNVx1YmFhNlx1YmFhN1x1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiM1x1YmFiNFx1YmFiNVx1YmFiNlx1YmFiN1x1YmFiYVx1YmFiY1x1YmFiZVx1YmFi'@;
put 'Zlx1YmFjMFx1YmFjMVx1YmFjMlx1YmFjM1x1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOVx1YmFjYVx1YmFjYlx1YmFjY1x1YmFjZFx1YmFjZVx1YmFjZlx1YmFkMFx1YmFkMVx1YmFkMlx1YmFkM1x1YmFkNFx1YmFkNVx1YmFkNlx1YmFkN1x1YmFkYVx1YmFkYlx1YmFkY1x1YmFkZFx1YmFkZVx1'@;
put 'YmFkZlx1YmFlMFx1YmFlMVx1YmFlMlx1YmFlM1x1YmFlNFx1YmFlNVx1YmFlNlx1YmFlN1x1YmFlOFx1YmFlOVx1YmFlYVx1YmFlYlx1YmFlY1x1YmFlZFx1YmFlZVx1YmFlZlx1YmFmMFx1YmFmMVx1YmFmMlx1YmFmM1x1YmFmNFx1YmFmNVx1YmFmNlx1YmFmN1x1YmFmOFx1YmFmOVx1YmFm'@;
put 'YVx1YmFmYlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNVx1YmIwNlx1YmIwN1x1YmIwOFx1YmIwOVx1YmIwYVx1YmIwYlx1YmIwY1x1YmIwZVx1YmIxMFx1YmIxMlx1YmIxM1x1YmIxNFx1YmIxNVx1YmIxNlx1YmIxN1x1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1'@;
put 'YmIxZVx1YmIxZlx1YmIyMVx1YmIyMlx1YmIyM1x1YmIyNFx1YmIyNVx1YmIyNlx1YmIyN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0NV1bcF1dPTM3MTIwK3AsYlszNzEyMCtwXT1fWzE0'@;
put 'NV1bcF0pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmIyOFx1YmIyYVx1YmIyY1x1YmIyZFx1YmIyZVx1YmIyZlx1YmIzMFx1YmIzMVx1YmIzMlx1YmIzM1x1YmIzN1x1YmIzOVx1YmIzYVx1YmIzZlx1'@;
put 'YmI0MFx1YmI0MVx1YmI0Mlx1YmI0M1x1YmI0Nlx1YmI0OFx1YmI0YVx1YmI0Ylx1YmI0Y1x1YmI0ZVx1YmI1MVx1YmI1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmI1M1x1YmI1NVx1YmI1Nlx1YmI1N1x1YmI1OVx1YmI1YVx1YmI1Ylx1YmI1Y1x1YmI1ZFx1YmI1'@;
put 'ZVx1YmI1Zlx1YmI2MFx1YmI2Mlx1YmI2NFx1YmI2NVx1YmI2Nlx1YmI2N1x1YmI2OFx1YmI2OVx1YmI2YVx1YmI2Ylx1YmI2ZFx1YmI2ZVx1YmI2Zlx1YmI3MFx1YmI3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmI3Mlx1YmI3M1x1YmI3NFx1YmI3NVx1YmI3Nlx1'@;
put 'YmI3N1x1YmI3OFx1YmI3OVx1YmI3YVx1YmI3Ylx1YmI3Y1x1YmI3ZFx1YmI3ZVx1YmI3Zlx1YmI4MFx1YmI4MVx1YmI4Mlx1YmI4M1x1YmI4NFx1YmI4NVx1YmI4Nlx1YmI4N1x1YmI4OVx1YmI4YVx1YmI4Ylx1YmI4ZFx1YmI4ZVx1YmI4Zlx1YmI5MVx1YmI5Mlx1YmI5M1x1YmI5NFx1YmI5'@;
put 'NVx1YmI5Nlx1YmI5N1x1YmI5OFx1YmI5OVx1YmI5YVx1YmI5Ylx1YmI5Y1x1YmI5ZFx1YmI5ZVx1YmI5Zlx1YmJhMFx1YmJhMVx1YmJhMlx1YmJhM1x1YmJhNVx1YmJhNlx1YmJhN1x1YmJhOVx1YmJhYVx1YmJhYlx1YmJhZFx1YmJhZVx1YmJhZlx1YmJiMFx1YmJiMVx1YmJiMlx1YmJiM1x1'@;
put 'YmJiNVx1YmJiNlx1YmJiOFx1YmJiOVx1YmJiYVx1YmJiYlx1YmJiY1x1YmJiZFx1YmJiZVx1YmJiZlx1YmJjMVx1YmJjMlx1YmJjM1x1YmJjNVx1YmJjNlx1YmJjN1x1YmJjOVx1YmJjYVx1YmJjYlx1YmJjY1x1YmJjZFx1YmJjZVx1YmJjZlx1YmJkMVx1YmJkMlx1YmJkNFx1YmJkNVx1YmJk'@;
put 'Nlx1YmJkN1x1YmJkOFx1YmJkOVx1YmJkYVx1YmJkYlx1YmJkY1x1YmJkZFx1YmJkZVx1YmJkZlx1YmJlMFx1YmJlMVx1YmJlMlx1YmJlM1x1YmJlNFx1YmJlNVx1YmJlNlx1YmJlN1x1YmJlOFx1YmJlOVx1YmJlYVx1YmJlYlx1YmJlY1x1YmJlZFx1YmJlZVx1YmJlZlx1YmJmMFx1YmJmMVx1'@;
put 'YmJmMlx1YmJmM1x1YmJmNFx1YmJmNVx1YmJmNlx1YmJmN1x1YmJmYVx1YmJmYlx1YmJmZFx1YmJmZVx1YmMwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0Nl1bcF1dPTM3Mzc2K3AsYlsz'@;
put 'NzM3NitwXT1fWzE0Nl1bcF0pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMwM1x1YmMwNFx1YmMwNVx1YmMwNlx1YmMwN1x1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1YmMxYVx1'@;
put 'YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMzNlx1YmMzN1x1YmMzOVx1YmMzYVx1YmMzYlx1YmMzY1x1YmMzZFx1YmMz'@;
put 'ZVx1YmMzZlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MVx1YmM1Mlx1YmM1M1x1YmM1NFx1YmM1NVx1YmM1Nlx1YmM1N1x1YmM1OFx1YmM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmM1YVx1YmM1Ylx1YmM1Y1x1'@;
put 'YmM1ZVx1YmM1Zlx1YmM2MFx1YmM2MVx1YmM2Mlx1YmM2M1x1YmM2NFx1YmM2NVx1YmM2Nlx1YmM2N1x1YmM2OFx1YmM2OVx1YmM2YVx1YmM2Ylx1YmM2Y1x1YmM2ZFx1YmM2ZVx1YmM2Zlx1YmM3MFx1YmM3MVx1YmM3Mlx1YmM3M1x1YmM3NFx1YmM3NVx1YmM3Nlx1YmM3N1x1YmM3OFx1YmM3'@;
put 'OVx1YmM3YVx1YmM3Ylx1YmM3Y1x1YmM3ZFx1YmM3ZVx1YmM3Zlx1YmM4MFx1YmM4MVx1YmM4Mlx1YmM4M1x1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4Zlx1YmM5MFx1YmM5MVx1YmM5Mlx1YmM5M1x1YmM5Nlx1YmM5OFx1YmM5Ylx1YmM5Y1x1YmM5ZFx1YmM5ZVx1YmM5Zlx1'@;
put 'YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOVx1YmNhYVx1YmNhYlx1YmNhY1x1YmNhZFx1YmNhZVx1YmNhZlx1YmNiMlx1YmNiNlx1YmNiN1x1YmNiOFx1YmNiOVx1YmNiYVx1YmNiYlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNjM1x1YmNjNVx1YmNjNlx1YmNjN1x1YmNjOFx1YmNj'@;
put 'OVx1YmNjYVx1YmNjYlx1YmNjY1x1YmNjZVx1YmNkMlx1YmNkM1x1YmNkNFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNkYlx1YmNkZFx1YmNkZVx1YmNkZlx1YmNlMFx1YmNlMVx1YmNlMlx1YmNlM1x1YmNlNFx1YmNlNVx1YmNlNlx1YmNlN1x1YmNlOFx1YmNlOVx1YmNlYVx1YmNlYlx1'@;
put 'YmNlY1x1YmNlZFx1YmNlZVx1YmNlZlx1YmNmMFx1YmNmMVx1YmNmMlx1YmNmM1x1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE0N11bcF1d'@;
put 'PTM3NjMyK3AsYlszNzYzMitwXT1fWzE0N11bcF0pO2ZvcihfWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmNmZVx1YmNmZlx1YmQwMFx1YmQwMVx1YmQwMlx1YmQwM1x1YmQwNlx1YmQwOFx1YmQwYVx1YmQwYlx1'@;
put 'YmQwY1x1YmQwZFx1YmQwZVx1YmQwZlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNVx1YmQxNlx1YmQxN1x1YmQxOFx1YmQxOVx1YmQxYVx1YmQxYlx1YmQxY1x1YmQxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQxZVx1YmQxZlx1YmQyMFx1YmQyMVx1YmQyMlx1YmQy'@;
put 'M1x1YmQyNVx1YmQyNlx1YmQyN1x1YmQyOFx1YmQyOVx1YmQyYVx1YmQyYlx1YmQyZFx1YmQyZVx1YmQyZlx1YmQzMFx1YmQzMVx1YmQzMlx1YmQzM1x1YmQzNFx1YmQzNVx1YmQzNlx1YmQzN1x1YmQzOFx1YmQzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQzYVx1'@;
put 'YmQzYlx1YmQzY1x1YmQzZFx1YmQzZVx1YmQzZlx1YmQ0MVx1YmQ0Mlx1YmQ0M1x1YmQ0NFx1YmQ0NVx1YmQ0Nlx1YmQ0N1x1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MVx1YmQ1Mlx1YmQ1M1x1YmQ1NFx1YmQ1NVx1YmQ1Nlx1YmQ1N1x1YmQ1YVx1YmQ1Ylx1YmQ1Y1x1YmQ1'@;
put 'ZFx1YmQ1ZVx1YmQ1Zlx1YmQ2MFx1YmQ2MVx1YmQ2Mlx1YmQ2M1x1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OVx1YmQ2YVx1YmQ2Ylx1YmQ2Y1x1YmQ2ZFx1YmQ2ZVx1YmQ2Zlx1YmQ3MFx1YmQ3MVx1YmQ3Mlx1YmQ3M1x1YmQ3NFx1YmQ3NVx1YmQ3Nlx1YmQ3N1x1YmQ3OFx1YmQ3OVx1YmQ3YVx1'@;
put 'YmQ3Ylx1YmQ3Y1x1YmQ3ZFx1YmQ3ZVx1YmQ3Zlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4Ylx1YmQ4Y1x1YmQ4ZFx1YmQ4ZVx1YmQ4Zlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZFx1YmQ5ZVx1YmQ5Zlx1YmRhMFx1YmRhMVx1YmRhMlx1YmRhM1x1YmRh'@;
put 'NVx1YmRhNlx1YmRhN1x1YmRhOFx1YmRhOVx1YmRhYVx1YmRhYlx1YmRhY1x1YmRhZFx1YmRhZVx1YmRhZlx1YmRiMVx1YmRiMlx1YmRiM1x1YmRiNFx1YmRiNVx1YmRiNlx1YmRiN1x1YmRiOVx1YmRiYVx1YmRiYlx1YmRiY1x1YmRiZFx1YmRiZVx1YmRiZlx1YmRjMFx1YmRjMVx1YmRjMlx1'@;
put 'YmRjM1x1YmRjNFx1YmRjNVx1YmRjNlx1YmRjN1x1YmRjOFx1YmRjOVx1YmRjYVx1YmRjYlx1YmRjY1x1YmRjZFx1YmRjZVx1YmRjZlx1YmRkMFx1YmRkMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ4XVtwXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'RFtfWzE0OF1bcF1dPTM3ODg4K3AsYlszNzg4OCtwXT1fWzE0OF1bcF0pO2ZvcihfWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmRkMlx1YmRkM1x1YmRkNlx1YmRkN1x1YmRkOVx1YmRkYVx1YmRkYlx1YmRkZFx1'@;
put 'YmRkZVx1YmRkZlx1YmRlMFx1YmRlMVx1YmRlMlx1YmRlM1x1YmRlNFx1YmRlNVx1YmRlNlx1YmRlN1x1YmRlOFx1YmRlYVx1YmRlYlx1YmRlY1x1YmRlZFx1YmRlZVx1YmRlZlx1YmRmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmRmMlx1YmRmM1x1YmRmNVx1YmRm'@;
put 'Nlx1YmRmN1x1YmRmOVx1YmRmYVx1YmRmYlx1YmRmY1x1YmRmZFx1YmRmZVx1YmRmZlx1YmUwMVx1YmUwMlx1YmUwNFx1YmUwNlx1YmUwN1x1YmUwOFx1YmUwOVx1YmUwYVx1YmUwYlx1YmUwZVx1YmUwZlx1YmUxMVx1YmUxMlx1YmUxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1YmUxNVx1YmUxNlx1YmUxN1x1YmUxOFx1YmUxOVx1YmUxYVx1YmUxYlx1YmUxZVx1YmUyMFx1YmUyMVx1YmUyMlx1YmUyM1x1YmUyNFx1YmUyNVx1YmUyNlx1YmUyN1x1YmUyOFx1YmUyOVx1YmUyYVx1YmUyYlx1YmUyY1x1YmUyZFx1YmUyZVx1YmUyZlx1YmUzMFx1YmUzMVx1YmUz'@;
put 'Mlx1YmUzM1x1YmUzNFx1YmUzNVx1YmUzNlx1YmUzN1x1YmUzOFx1YmUzOVx1YmUzYVx1YmUzYlx1YmUzY1x1YmUzZFx1YmUzZVx1YmUzZlx1YmU0MFx1YmU0MVx1YmU0Mlx1YmU0M1x1YmU0Nlx1YmU0N1x1YmU0OVx1YmU0YVx1YmU0Ylx1YmU0ZFx1YmU0Zlx1YmU1MFx1YmU1MVx1YmU1Mlx1'@;
put 'YmU1M1x1YmU1Nlx1YmU1OFx1YmU1Y1x1YmU1ZFx1YmU1ZVx1YmU1Zlx1YmU2Mlx1YmU2M1x1YmU2NVx1YmU2Nlx1YmU2N1x1YmU2OVx1YmU2Ylx1YmU2Y1x1YmU2ZFx1YmU2ZVx1YmU2Zlx1YmU3Mlx1YmU3Nlx1YmU3N1x1YmU3OFx1YmU3OVx1YmU3YVx1YmU3ZVx1YmU3Zlx1YmU4MVx1YmU4'@;
put 'Mlx1YmU4M1x1YmU4NVx1YmU4Nlx1YmU4N1x1YmU4OFx1YmU4OVx1YmU4YVx1YmU4Ylx1YmU4ZVx1YmU5Mlx1YmU5M1x1YmU5NFx1YmU5NVx1YmU5Nlx1YmU5N1x1YmU5YVx1YmU5Ylx1YmU5Y1x1YmU5ZFx1YmU5ZVx1YmU5Zlx1YmVhMFx1YmVhMVx1YmVhMlx1YmVhM1x1YmVhNFx1YmVhNVx1'@;
put 'YmVhNlx1YmVhN1x1YmVhOVx1YmVhYVx1YmVhYlx1YmVhY1x1YmVhZFx1YmVhZVx1YmVhZlx1YmViMFx1YmViMVx1YmViMlx1YmViM1x1YmViNFx1YmViNVx1YmViNlx1YmViN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ5XVtwXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoRFtfWzE0OV1bcF1dPTM4MTQ0K3AsYlszODE0NCtwXT1fWzE0OV1bcF0pO2ZvcihfWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmViOFx1YmViOVx1YmViYVx1YmViYlx1YmViY1x1YmViZFx1'@;
put 'YmViZVx1YmViZlx1YmVjMFx1YmVjMVx1YmVjMlx1YmVjM1x1YmVjNFx1YmVjNVx1YmVjNlx1YmVjN1x1YmVjOFx1YmVjOVx1YmVjYVx1YmVjYlx1YmVjY1x1YmVjZFx1YmVjZVx1YmVjZlx1YmVkMlx1YmVkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVkNVx1YmVk'@;
put 'Nlx1YmVkOVx1YmVkYVx1YmVkYlx1YmVkY1x1YmVkZFx1YmVkZVx1YmVkZlx1YmVlMVx1YmVlMlx1YmVlNlx1YmVlN1x1YmVlOFx1YmVlOVx1YmVlYVx1YmVlYlx1YmVlZFx1YmVlZVx1YmVlZlx1YmVmMFx1YmVmMVx1YmVmMlx1YmVmM1x1YmVmNFx1YmVmNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVmNlx1YmVmN1x1YmVmOFx1YmVmOVx1YmVmYVx1YmVmYlx1YmVmY1x1YmVmZFx1YmVmZVx1YmVmZlx1YmYwMFx1YmYwMlx1YmYwM1x1YmYwNFx1YmYwNVx1YmYwNlx1YmYwN1x1YmYwYVx1YmYwYlx1YmYwY1x1YmYwZFx1YmYwZVx1YmYwZlx1YmYxMFx1YmYx'@;
put 'MVx1YmYxMlx1YmYxM1x1YmYxNFx1YmYxNVx1YmYxNlx1YmYxN1x1YmYxYVx1YmYxZVx1YmYxZlx1YmYyMFx1YmYyMVx1YmYyMlx1YmYyM1x1YmYyNFx1YmYyNVx1YmYyNlx1YmYyN1x1YmYyOFx1YmYyOVx1YmYyYVx1YmYyYlx1YmYyY1x1YmYyZFx1YmYyZVx1YmYyZlx1YmYzMFx1YmYzMVx1'@;
put 'YmYzMlx1YmYzM1x1YmYzNFx1YmYzNVx1YmYzNlx1YmYzN1x1YmYzOFx1YmYzOVx1YmYzYVx1YmYzYlx1YmYzY1x1YmYzZFx1YmYzZVx1YmYzZlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0OVx1YmY0YVx1YmY0Ylx1YmY0Y1x1YmY0ZFx1YmY0ZVx1YmY0Zlx1YmY1Mlx1YmY1'@;
put 'M1x1YmY1NFx1YmY1Nlx1YmY1N1x1YmY1OFx1YmY1OVx1YmY1YVx1YmY1Ylx1YmY1Y1x1YmY1ZFx1YmY1ZVx1YmY1Zlx1YmY2MFx1YmY2MVx1YmY2Mlx1YmY2M1x1YmY2NFx1YmY2NVx1YmY2Nlx1YmY2N1x1YmY2OFx1YmY2OVx1YmY2YVx1YmY2Ylx1YmY2Y1x1YmY2ZFx1YmY2ZVx1YmY2Zlx1'@;
put 'YmY3MFx1YmY3MVx1YmY3Mlx1YmY3M1x1YmY3NFx1YmY3NVx1YmY3Nlx1YmY3N1x1YmY3OFx1YmY3OVx1YmY3YVx1YmY3Ylx1YmY3Y1x1YmY3ZFx1YmY3ZVx1YmY3Zlx1YmY4MFx1YmY4MVx1YmY4Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b'@;
put 'MTUwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1MF1bcF1dPTM4NDAwK3AsYlszODQwMCtwXT1fWzE1MF1bcF0pO2ZvcihfWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY4M1x1YmY4NFx1YmY4NVx1YmY4Nlx1'@;
put 'YmY4N1x1YmY4OFx1YmY4OVx1YmY4YVx1YmY4Ylx1YmY4Y1x1YmY4ZFx1YmY4ZVx1YmY4Zlx1YmY5MFx1YmY5MVx1YmY5Mlx1YmY5M1x1YmY5NVx1YmY5Nlx1YmY5N1x1YmY5OFx1YmY5OVx1YmY5YVx1YmY5Ylx1YmY5Y1x1YmY5ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1YmY5ZVx1YmY5Zlx1YmZhMFx1YmZhMVx1YmZhMlx1YmZhM1x1YmZhNFx1YmZhNVx1YmZhNlx1YmZhN1x1YmZhOFx1YmZhOVx1YmZhYVx1YmZhYlx1YmZhY1x1YmZhZFx1YmZhZVx1YmZhZlx1YmZiMVx1YmZiMlx1YmZiM1x1YmZiNFx1YmZiNVx1YmZiNlx1YmZiN1x1YmZiOFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmZiOVx1YmZiYVx1YmZiYlx1YmZiY1x1YmZiZFx1YmZiZVx1YmZiZlx1YmZjMFx1YmZjMVx1YmZjMlx1YmZjM1x1YmZjNFx1YmZjNlx1YmZjN1x1YmZjOFx1YmZjOVx1YmZjYVx1YmZjYlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZk'@;
put 'M1x1YmZkNVx1YmZkNlx1YmZkN1x1YmZkOFx1YmZkOVx1YmZkYVx1YmZkYlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMlx1YmZlM1x1YmZlNFx1YmZlNVx1YmZlNlx1YmZlN1x1YmZlOFx1YmZlOVx1YmZlYVx1YmZlYlx1YmZlY1x1YmZlZFx1YmZlZVx1YmZlZlx1YmZmMFx1YmZmMVx1YmZmMlx1'@;
put 'YmZmM1x1YmZmNFx1YmZmNVx1YmZmNlx1YmZmN1x1YmZmOFx1YmZmOVx1YmZmYVx1YmZmYlx1YmZmY1x1YmZmZFx1YmZmZVx1YmZmZlx1YzAwMFx1YzAwMVx1YzAwMlx1YzAwM1x1YzAwNFx1YzAwNVx1YzAwNlx1YzAwN1x1YzAwOFx1YzAwOVx1YzAwYVx1YzAwYlx1YzAwY1x1YzAwZFx1YzAw'@;
put 'ZVx1YzAwZlx1YzAxMFx1YzAxMVx1YzAxMlx1YzAxM1x1YzAxNFx1YzAxNVx1YzAxNlx1YzAxN1x1YzAxOFx1YzAxOVx1YzAxYVx1YzAxYlx1YzAxY1x1YzAxZFx1YzAxZVx1YzAxZlx1YzAyMFx1YzAyMVx1YzAyMlx1YzAyM1x1YzAyNFx1YzAyNVx1YzAyNlx1YzAyN1x1YzAyOFx1YzAyOVx1'@;
put 'YzAyYVx1YzAyYlx1YzAyY1x1YzAyZFx1YzAyZVx1YzAyZlx1YzAzMFx1YzAzMVx1YzAzMlx1YzAzM1x1YzAzNFx1YzAzNVx1YzAzNlx1YzAzN1x1YzAzOFx1YzAzOVx1YzAzYVx1YzAzYlx1YzAzZFx1YzAzZVx1YzAzZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MV0ubGVuZ3RoOysr'@;
put 'cCk2NTUzMyE9PV9bMTUxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1MV1bcF1dPTM4NjU2K3AsYlszODY1NitwXT1fWzE1MV1bcF0pO2ZvcihfWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA0MFx1YzA0MVx1'@;
put 'YzA0Mlx1YzA0M1x1YzA0NFx1YzA0NVx1YzA0Nlx1YzA0N1x1YzA0OFx1YzA0OVx1YzA0YVx1YzA0Ylx1YzA0Y1x1YzA0ZFx1YzA0ZVx1YzA0Zlx1YzA1MFx1YzA1Mlx1YzA1M1x1YzA1NFx1YzA1NVx1YzA1Nlx1YzA1N1x1YzA1OVx1YzA1YVx1YzA1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1YzA1ZFx1YzA1ZVx1YzA1Zlx1YzA2MVx1YzA2Mlx1YzA2M1x1YzA2NFx1YzA2NVx1YzA2Nlx1YzA2N1x1YzA2YVx1YzA2Ylx1YzA2Y1x1YzA2ZFx1YzA2ZVx1YzA2Zlx1YzA3MFx1YzA3MVx1YzA3Mlx1YzA3M1x1YzA3NFx1YzA3NVx1YzA3Nlx1YzA3N1x1YzA3OFx1'@;
put 'YzA3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA3YVx1YzA3Ylx1YzA3Y1x1YzA3ZFx1YzA3ZVx1YzA3Zlx1YzA4MFx1YzA4MVx1YzA4Mlx1YzA4M1x1YzA4NFx1YzA4NVx1YzA4Nlx1YzA4N1x1YzA4OFx1YzA4OVx1YzA4YVx1YzA4Ylx1YzA4Y1x1YzA4ZFx1YzA4'@;
put 'ZVx1YzA4Zlx1YzA5Mlx1YzA5M1x1YzA5NVx1YzA5Nlx1YzA5N1x1YzA5OVx1YzA5YVx1YzA5Ylx1YzA5Y1x1YzA5ZFx1YzA5ZVx1YzA5Zlx1YzBhMlx1YzBhNFx1YzBhNlx1YzBhN1x1YzBhOFx1YzBhOVx1YzBhYVx1YzBhYlx1YzBhZVx1YzBiMVx1YzBiMlx1YzBiN1x1YzBiOFx1YzBiOVx1'@;
put 'YzBiYVx1YzBiYlx1YzBiZVx1YzBjMlx1YzBjM1x1YzBjNFx1YzBjNlx1YzBjN1x1YzBjYVx1YzBjYlx1YzBjZFx1YzBjZVx1YzBjZlx1YzBkMVx1YzBkMlx1YzBkM1x1YzBkNFx1YzBkNVx1YzBkNlx1YzBkN1x1YzBkYVx1YzBkZVx1YzBkZlx1YzBlMFx1YzBlMVx1YzBlMlx1YzBlM1x1YzBl'@;
put 'Nlx1YzBlN1x1YzBlOVx1YzBlYVx1YzBlYlx1YzBlZFx1YzBlZVx1YzBlZlx1YzBmMFx1YzBmMVx1YzBmMlx1YzBmM1x1YzBmNlx1YzBmOFx1YzBmYVx1YzBmYlx1YzBmY1x1YzBmZFx1YzBmZVx1YzBmZlx1YzEwMVx1YzEwMlx1YzEwM1x1YzEwNVx1YzEwNlx1YzEwN1x1YzEwOVx1YzEwYVx1'@;
put 'YzEwYlx1YzEwY1x1YzEwZFx1YzEwZVx1YzEwZlx1YzExMVx1YzExMlx1YzExM1x1YzExNFx1YzExNlx1YzExN1x1YzExOFx1YzExOVx1YzExYVx1YzExYlx1YzEyMVx1YzEyMlx1YzEyNVx1YzEyOFx1YzEyOVx1YzEyYVx1YzEyYlx1YzEyZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1'@;
put 'Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1Ml1bcF1dPTM4OTEyK3AsYlszODkxMitwXT1fWzE1Ml1bcF0pO2ZvcihfWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MVx1YzE0Mlx1YzE0M1x1YzE0NFx1YzE0NVx1YzE0Nlx1YzE0N1x1YzE0YVx1YzE0ZVx1YzE0Zlx1YzE1MFx1YzE1MVx1YzE1Mlx1YzE1M1x1YzE1Nlx1YzE1N1x1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZFx1YzE1ZVx1YzE1Zlx1YzE2MFx1YzE2MVx1YzE2Mlx1YzE2M1x1YzE2Nlx1YzE2YVx1YzE2Ylx1YzE2Y1x1YzE2ZFx1YzE2ZVx1YzE2Zlx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3Nlx1YzE3N1x1'@;
put 'YzE3OVx1YzE3YVx1YzE3Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE3Y1x1YzE3ZFx1YzE3ZVx1YzE3Zlx1YzE4MFx1YzE4MVx1YzE4Mlx1YzE4M1x1YzE4NFx1YzE4Nlx1YzE4N1x1YzE4OFx1YzE4OVx1YzE4YVx1YzE4Ylx1YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5'@;
put 'M1x1YzE5NVx1YzE5N1x1YzE5OFx1YzE5OVx1YzE5YVx1YzE5Ylx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1YzFhZVx1YzFhZlx1YzFiMVx1YzFiMlx1YzFiM1x1YzFiNFx1YzFiNVx1YzFiNlx1YzFiN1x1YzFiOFx1YzFiOVx1'@;
put 'YzFiYVx1YzFiYlx1YzFiY1x1YzFiZVx1YzFiZlx1YzFjMFx1YzFjMVx1YzFjMlx1YzFjM1x1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1YzFjYlx1YzFjZFx1YzFjZVx1YzFjZlx1YzFkMFx1YzFkMVx1YzFkMlx1YzFkM1x1YzFkNVx1YzFkNlx1YzFkOVx1YzFkYVx1YzFkYlx1YzFk'@;
put 'Y1x1YzFkZFx1YzFkZVx1YzFkZlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOVx1YzFlYVx1YzFlYlx1YzFlY1x1YzFlZFx1YzFlZVx1YzFlZlx1YzFmMlx1YzFmNFx1YzFmNVx1YzFmNlx1YzFmN1x1YzFmOFx1YzFmOVx1YzFmYVx1YzFmYlx1YzFmZVx1YzFmZlx1'@;
put 'YzIwMVx1YzIwMlx1YzIwM1x1YzIwNVx1YzIwNlx1YzIwN1x1YzIwOFx1YzIwOVx1YzIwYVx1YzIwYlx1YzIwZVx1YzIxMFx1YzIxMlx1YzIxM1x1YzIxNFx1YzIxNVx1YzIxNlx1YzIxN1x1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1YzIyMVx1YzIyMlx1YzIyM1x1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LHA9MDtwIT1fWzE1M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1M11bcF1dPTM5MTY4K3AsYlszOTE2OCtwXT1fWzE1M11bcF0pO2ZvcihfWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNVx1YzIzNlx1YzIzN1x1YzIzOFx1YzIzOVx1YzIzYVx1YzIzYlx1YzIzY1x1YzIzZFx1YzIzZVx1YzIzZlx1YzI0MFx1YzI0MVx1YzI0Mlx1YzI0M1x1YzI0NFx1YzI0'@;
put 'NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI0Nlx1YzI0N1x1YzI0OVx1YzI0YVx1YzI0Ylx1YzI0Y1x1YzI0ZFx1YzI0ZVx1YzI0Zlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OVx1YzI1YVx1YzI1Ylx1YzI1Y1x1YzI1ZFx1YzI1ZVx1YzI1Zlx1'@;
put 'YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI2N1x1YzI2OFx1YzI2OVx1YzI2YVx1YzI2Ylx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NVx1YzI3Nlx1YzI3N1x1YzI3OFx1YzI3OVx1YzI3YVx1YzI3'@;
put 'Ylx1YzI3ZVx1YzI4MFx1YzI4Mlx1YzI4M1x1YzI4NFx1YzI4NVx1YzI4Nlx1YzI4N1x1YzI4YVx1YzI4Ylx1YzI4Y1x1YzI4ZFx1YzI4ZVx1YzI4Zlx1YzI5MVx1YzI5Mlx1YzI5M1x1YzI5NFx1YzI5NVx1YzI5Nlx1YzI5N1x1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZVx1YzI5Zlx1YzJhMFx1'@;
put 'YzJhMVx1YzJhMlx1YzJhM1x1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZVx1YzJhZlx1YzJiMFx1YzJiMVx1YzJiMlx1YzJiM1x1YzJiNlx1YzJiOFx1YzJiYVx1YzJiYlx1YzJiY1x1YzJiZFx1YzJiZVx1YzJiZlx1YzJjMFx1YzJjMVx1YzJjMlx1YzJjM1x1YzJjNFx1YzJj'@;
put 'NVx1YzJjNlx1YzJjN1x1YzJjOFx1YzJjOVx1YzJjYVx1YzJjYlx1YzJjY1x1YzJjZFx1YzJjZVx1YzJjZlx1YzJkMFx1YzJkMVx1YzJkMlx1YzJkM1x1YzJkNFx1YzJkNVx1YzJkNlx1YzJkN1x1YzJkOFx1YzJkOVx1YzJkYVx1YzJkYlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNVx1'@;
put 'YzJlNlx1YzJlN1x1YzJlOFx1YzJlOVx1YzJlYVx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMVx1YzMwMlx1YzMwM1x1YzMwNFx1YzMwNVx1YzMwNlx1YzMwN1x1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1NF1bcF1dPTM5NDI0K3AsYlszOTQyNCtwXT1fWzE1NF1bcF0pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzMxMFx1YzMxMVx1YzMxMlx1YzMxNlx1YzMxN1x1YzMxOVx1YzMxYVx1YzMxYlx1YzMxZFx1YzMxZVx1YzMxZlx1YzMyMFx1YzMyMVx1YzMyMlx1YzMyM1x1YzMyNlx1YzMyN1x1YzMyYVx1YzMyYlx1YzMyY1x1YzMyZFx1YzMyZVx1YzMyZlx1YzMz'@;
put 'MFx1YzMzMVx1YzMzMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzMzM1x1YzMzNFx1YzMzNVx1YzMzNlx1YzMzN1x1YzMzOFx1YzMzOVx1YzMzYVx1YzMzYlx1YzMzY1x1YzMzZFx1YzMzZVx1YzMzZlx1YzM0MFx1YzM0MVx1YzM0Mlx1YzM0M1x1YzM0NFx1YzM0Nlx1'@;
put 'YzM0N1x1YzM0OFx1YzM0OVx1YzM0YVx1YzM0Ylx1YzM0Y1x1YzM0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzM0ZVx1YzM0Zlx1YzM1MFx1YzM1MVx1YzM1Mlx1YzM1M1x1YzM1NFx1YzM1NVx1YzM1Nlx1YzM1N1x1YzM1OFx1YzM1OVx1YzM1YVx1YzM1Ylx1YzM1'@;
put 'Y1x1YzM1ZFx1YzM1ZVx1YzM1Zlx1YzM2MFx1YzM2MVx1YzM2Mlx1YzM2M1x1YzM2NFx1YzM2NVx1YzM2Nlx1YzM2N1x1YzM2YVx1YzM2Ylx1YzM2ZFx1YzM2ZVx1YzM2Zlx1YzM3MVx1YzM3M1x1YzM3NFx1YzM3NVx1YzM3Nlx1YzM3N1x1YzM3YVx1YzM3Ylx1YzM3ZVx1YzM3Zlx1YzM4MFx1'@;
put 'YzM4MVx1YzM4Mlx1YzM4M1x1YzM4NVx1YzM4Nlx1YzM4N1x1YzM4OVx1YzM4YVx1YzM4Ylx1YzM4ZFx1YzM4ZVx1YzM4Zlx1YzM5MFx1YzM5MVx1YzM5Mlx1YzM5M1x1YzM5NFx1YzM5NVx1YzM5Nlx1YzM5N1x1YzM5OFx1YzM5OVx1YzM5YVx1YzM5Ylx1YzM5Y1x1YzM5ZFx1YzM5ZVx1YzM5'@;
put 'Zlx1YzNhMFx1YzNhMVx1YzNhMlx1YzNhM1x1YzNhNFx1YzNhNVx1YzNhNlx1YzNhN1x1YzNhOFx1YzNhOVx1YzNhYVx1YzNhYlx1YzNhY1x1YzNhZFx1YzNhZVx1YzNhZlx1YzNiMFx1YzNiMVx1YzNiMlx1YzNiM1x1YzNiNFx1YzNiNVx1YzNiNlx1YzNiN1x1YzNiOFx1YzNiOVx1YzNiYVx1'@;
put 'YzNiYlx1YzNiY1x1YzNiZFx1YzNiZVx1YzNiZlx1YzNjMVx1YzNjMlx1YzNjM1x1YzNjNFx1YzNjNVx1YzNjNlx1YzNjN1x1YzNjOFx1YzNjOVx1YzNjYVx1YzNjYlx1YzNjY1x1YzNjZFx1YzNjZVx1YzNjZlx1YzNkMFx1YzNkMVx1YzNkMlx1YzNkM1x1YzNkNFx1YzNkNVx1YzNkNlx1YzNk'@;
put 'N1x1YzNkYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1NV1bcF1dPTM5NjgwK3AsYlszOTY4MCtwXT1fWzE1NV1bcF0pO2ZvcihfWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlM1x1YzNlNFx1YzNlNVx1YzNlNlx1YzNlN1x1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZVx1YzNlZlx1YzNmMFx1YzNmMVx1YzNmMlx1YzNmM1x1YzNmNlx1YzNmN1x1YzNmOVx1YzNm'@;
put 'YVx1YzNmYlx1YzNmY1x1YzNmZFx1YzNmZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNmZlx1YzQwMFx1YzQwMVx1YzQwMlx1YzQwM1x1YzQwNFx1YzQwNVx1YzQwNlx1YzQwN1x1YzQwOVx1YzQwYVx1YzQwYlx1YzQwY1x1YzQwZFx1YzQwZVx1YzQwZlx1YzQxMVx1'@;
put 'YzQxMlx1YzQxM1x1YzQxNFx1YzQxNVx1YzQxNlx1YzQxN1x1YzQxOFx1YzQxOVx1YzQxYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzQxYlx1YzQxY1x1YzQxZFx1YzQxZVx1YzQxZlx1YzQyMFx1YzQyMVx1YzQyMlx1YzQyM1x1YzQyNVx1YzQyNlx1YzQyN1x1YzQy'@;
put 'OFx1YzQyOVx1YzQyYVx1YzQyYlx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNVx1YzQzNlx1YzQzN1x1YzQzOFx1YzQzOVx1YzQzYVx1YzQzYlx1YzQzZVx1YzQzZlx1YzQ0MFx1YzQ0MVx1YzQ0Mlx1YzQ0M1x1YzQ0NFx1YzQ0NVx1YzQ0Nlx1YzQ0N1x1YzQ0OVx1'@;
put 'YzQ0YVx1YzQ0Ylx1YzQ0Y1x1YzQ0ZFx1YzQ0ZVx1YzQ0Zlx1YzQ1MFx1YzQ1MVx1YzQ1Mlx1YzQ1M1x1YzQ1NFx1YzQ1NVx1YzQ1Nlx1YzQ1N1x1YzQ1OFx1YzQ1OVx1YzQ1YVx1YzQ1Ylx1YzQ1Y1x1YzQ1ZFx1YzQ1ZVx1YzQ1Zlx1YzQ2MFx1YzQ2MVx1YzQ2Mlx1YzQ2M1x1YzQ2Nlx1YzQ2'@;
put 'N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZFx1YzQ2ZVx1YzQ2Zlx1YzQ3MFx1YzQ3MVx1YzQ3Mlx1YzQ3M1x1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YVx1YzQ3Ylx1YzQ3Y1x1YzQ3ZFx1YzQ3ZVx1YzQ3Zlx1YzQ4MVx1YzQ4Mlx1YzQ4M1x1YzQ4NFx1YzQ4NVx1YzQ4Nlx1YzQ4N1x1YzQ4OFx1'@;
put 'YzQ4OVx1YzQ4YVx1YzQ4Ylx1YzQ4Y1x1YzQ4ZFx1YzQ4ZVx1YzQ4Zlx1YzQ5MFx1YzQ5MVx1YzQ5Mlx1YzQ5M1x1YzQ5NVx1YzQ5Nlx1YzQ5N1x1YzQ5OFx1YzQ5OVx1YzQ5YVx1YzQ5Ylx1YzQ5ZFx1YzQ5ZVx1YzQ5Zlx1YzRhMFx1YzRhMVx1YzRhMlx1YzRhM1x1YzRhNFx1YzRhNVx1YzRh'@;
put 'Nlx1YzRhN1x1YzRhOFx1YzRhOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1Nl1bcF1dPTM5OTM2K3AsYlszOTkzNitwXT1fWzE1Nl1bcF0pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRhYVx1YzRhYlx1YzRhY1x1YzRhZFx1YzRhZVx1YzRhZlx1YzRiMFx1YzRiMVx1YzRiMlx1YzRiM1x1YzRiNFx1YzRiNVx1YzRiNlx1YzRiN1x1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZFx1YzRiZVx1YzRi'@;
put 'Zlx1YzRjMFx1YzRjMVx1YzRjMlx1YzRjM1x1YzRjNFx1YzRjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRjNlx1YzRjN1x1YzRjOFx1YzRjOVx1YzRjYVx1YzRjYlx1YzRjY1x1YzRjZFx1YzRjZVx1YzRjZlx1YzRkMFx1YzRkMVx1YzRkMlx1YzRkM1x1YzRkNFx1'@;
put 'YzRkNVx1YzRkNlx1YzRkN1x1YzRkOFx1YzRkOVx1YzRkYVx1YzRkYlx1YzRkY1x1YzRkZFx1YzRkZVx1YzRkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRlMFx1YzRlMVx1YzRlMlx1YzRlM1x1YzRlNFx1YzRlNVx1YzRlNlx1YzRlN1x1YzRlOFx1YzRlYVx1YzRl'@;
put 'Ylx1YzRlY1x1YzRlZFx1YzRlZVx1YzRlZlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMlx1YzUwM1x1YzUwNFx1YzUwNVx1YzUwNlx1YzUwN1x1YzUwOFx1YzUwOVx1YzUwYVx1YzUwYlx1YzUwZFx1YzUwZVx1YzUwZlx1'@;
put 'YzUxMVx1YzUxMlx1YzUxM1x1YzUxNVx1YzUxNlx1YzUxN1x1YzUxOFx1YzUxOVx1YzUxYVx1YzUxYlx1YzUxZFx1YzUxZVx1YzUxZlx1YzUyMFx1YzUyMVx1YzUyMlx1YzUyM1x1YzUyNFx1YzUyNVx1YzUyNlx1YzUyN1x1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMVx1YzUz'@;
put 'Mlx1YzUzM1x1YzUzNFx1YzUzNVx1YzUzNlx1YzUzN1x1YzUzYVx1YzUzY1x1YzUzZVx1YzUzZlx1YzU0MFx1YzU0MVx1YzU0Mlx1YzU0M1x1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1'@;
put 'YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OVx1YzU2YVx1YzU2Ylx1YzU2Y1x1YzU2ZFx1YzU2ZVx1YzU2Zlx1YzU3Mlx1YzU3Nlx1YzU3N1x1YzU3OFx1YzU3OVx1YzU3YVx1YzU3Ylx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4'@;
put 'Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1N11bcF1dPTQwMTkyK3AsYls0MDE5MitwXT1fWzE1N11bcF0pO2ZvcihfWzE1OF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzU5Nlx1YzU5OVx1YzU5YVx1YzU5Ylx1YzU5ZFx1YzU5ZVx1YzU5Zlx1YzVhMVx1YzVhMlx1YzVhM1x1YzVhNFx1YzVhNVx1YzVhNlx1YzVhN1x1YzVhOFx1YzVhYVx1YzVhYlx1YzVh'@;
put 'Y1x1YzVhZFx1YzVhZVx1YzVhZlx1YzViMFx1YzViMVx1YzViMlx1YzViM1x1YzViNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzViN1x1YzViYVx1YzViZlx1YzVjMFx1YzVjMVx1YzVjMlx1YzVjM1x1YzVjYlx1YzVjZFx1YzVjZlx1YzVkMlx1YzVkM1x1YzVkNVx1'@;
put 'YzVkNlx1YzVkN1x1YzVkOVx1YzVkYVx1YzVkYlx1YzVkY1x1YzVkZFx1YzVkZVx1YzVkZlx1YzVlMlx1YzVlNFx1YzVlNlx1YzVlN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzVlOFx1YzVlOVx1YzVlYVx1YzVlYlx1YzVlZlx1YzVmMVx1YzVmMlx1YzVmM1x1YzVm'@;
put 'NVx1YzVmOFx1YzVmOVx1YzVmYVx1YzVmYlx1YzYwMlx1YzYwM1x1YzYwNFx1YzYwOVx1YzYwYVx1YzYwYlx1YzYwZFx1YzYwZVx1YzYwZlx1YzYxMVx1YzYxMlx1YzYxM1x1YzYxNFx1YzYxNVx1YzYxNlx1YzYxN1x1YzYxYVx1YzYxZFx1YzYxZVx1YzYxZlx1YzYyMFx1YzYyMVx1YzYyMlx1'@;
put 'YzYyM1x1YzYyNlx1YzYyN1x1YzYyOVx1YzYyYVx1YzYyYlx1YzYyZlx1YzYzMVx1YzYzMlx1YzYzNlx1YzYzOFx1YzYzYVx1YzYzY1x1YzYzZFx1YzYzZVx1YzYzZlx1YzY0Mlx1YzY0M1x1YzY0NVx1YzY0Nlx1YzY0N1x1YzY0OVx1YzY0YVx1YzY0Ylx1YzY0Y1x1YzY0ZFx1YzY0ZVx1YzY0'@;
put 'Zlx1YzY1Mlx1YzY1Nlx1YzY1N1x1YzY1OFx1YzY1OVx1YzY1YVx1YzY1Ylx1YzY1ZVx1YzY1Zlx1YzY2MVx1YzY2Mlx1YzY2M1x1YzY2NFx1YzY2NVx1YzY2Nlx1YzY2N1x1YzY2OFx1YzY2OVx1YzY2YVx1YzY2Ylx1YzY2ZFx1YzY2ZVx1YzY3MFx1YzY3Mlx1YzY3M1x1YzY3NFx1YzY3NVx1'@;
put 'YzY3Nlx1YzY3N1x1YzY3YVx1YzY3Ylx1YzY3ZFx1YzY3ZVx1YzY3Zlx1YzY4MVx1YzY4Mlx1YzY4M1x1YzY4NFx1YzY4NVx1YzY4Nlx1YzY4N1x1YzY4YVx1YzY4Y1x1YzY4ZVx1YzY4Zlx1YzY5MFx1YzY5MVx1YzY5Mlx1YzY5M1x1YzY5Nlx1YzY5N1x1YzY5OVx1YzY5YVx1YzY5Ylx1YzY5'@;
put 'ZFx1YzY5ZVx1YzY5Zlx1YzZhMFx1YzZhMVx1YzZhMlx1YzZhM1x1YzZhNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1OF1bcF1dPTQwNDQ4K3AsYls0MDQ0OCtwXT1fWzE1OF1bcF0pO2Zv'@;
put 'cihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZhOFx1YzZhYVx1YzZhYlx1YzZhY1x1YzZhZFx1YzZhZVx1YzZhZlx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYlx1YzZiY1x1YzZiZFx1YzZi'@;
put 'ZVx1YzZiZlx1YzZjMlx1YzZjNFx1YzZjNlx1YzZjN1x1YzZjOFx1YzZjOVx1YzZjYVx1YzZjYlx1YzZjZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNVx1YzZkNlx1YzZkN1x1YzZkOFx1YzZkOVx1YzZkYVx1YzZkYlx1'@;
put 'YzZkZVx1YzZkZlx1YzZlMlx1YzZlM1x1YzZlNFx1YzZlNVx1YzZlNlx1YzZlN1x1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZmM1x1YzZmNFx1YzZmNVx1YzZmNlx1YzZmN1x1YzZmYVx1YzZm'@;
put 'Ylx1YzZmY1x1YzZmZVx1YzZmZlx1YzcwMFx1YzcwMVx1YzcwMlx1YzcwM1x1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZFx1YzcwZVx1YzcwZlx1YzcxMFx1YzcxMVx1YzcxMlx1YzcxM1x1YzcxNlx1YzcxOFx1YzcxYVx1YzcxYlx1YzcxY1x1YzcxZFx1YzcxZVx1YzcxZlx1'@;
put 'YzcyMlx1YzcyM1x1YzcyNVx1YzcyNlx1YzcyN1x1YzcyOVx1YzcyYVx1YzcyYlx1YzcyY1x1YzcyZFx1YzcyZVx1YzcyZlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1YzczOVx1YzczYVx1YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NVx1Yzc0Nlx1Yzc0N1x1Yzc0'@;
put 'OFx1Yzc0OVx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MVx1Yzc2Mlx1Yzc2M1x1Yzc2NFx1Yzc2NVx1Yzc2Nlx1Yzc2N1x1Yzc2OVx1Yzc2YVx1Yzc2Y1x1Yzc2ZFx1Yzc2ZVx1Yzc2Zlx1Yzc3MFx1Yzc3MVx1Yzc3Mlx1Yzc3M1x1'@;
put 'Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5Ylx1Yzc5Y1x1Yzc5ZFx1Yzc5ZVx1Yzc5Zlx1YzdhMlx1YzdhN1x1YzdhOFx1YzdhOVx1Yzdh'@;
put 'YVx1YzdhYlx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE1OV1bcF1dPTQwNzA0K3AsYls0MDcwNCtwXT1f'@;
put 'WzE1OV1bcF0pO2ZvcihfWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMlx1YzdjM1x1YzdjNFx1YzdjNVx1YzdjNlx1YzdjN1x1YzdjYVx1YzdjYlx1Yzdj'@;
put 'ZFx1YzdjZlx1YzdkMVx1YzdkMlx1YzdkM1x1YzdkNFx1YzdkNVx1YzdkNlx1YzdkN1x1YzdkOVx1YzdkYVx1YzdkYlx1YzdkY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdkZVx1YzdkZlx1YzdlMFx1YzdlMVx1YzdlMlx1YzdlM1x1YzdlNVx1YzdlNlx1YzdlN1x1'@;
put 'YzdlOVx1YzdlYVx1YzdlYlx1YzdlZFx1YzdlZVx1YzdlZlx1YzdmMFx1YzdmMVx1YzdmMlx1YzdmM1x1YzdmNFx1YzdmNVx1YzdmNlx1YzdmN1x1YzdmOFx1YzdmOVx1YzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdmYlx1YzdmY1x1YzdmZFx1YzdmZVx1Yzdm'@;
put 'Zlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYlx1YzgwY1x1YzgwZFx1YzgwZVx1YzgwZlx1YzgxMlx1YzgxNFx1YzgxN1x1YzgxOFx1YzgxOVx1YzgxYVx1YzgxYlx1YzgxZVx1YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNVx1YzgyNlx1YzgyN1x1YzgyOFx1'@;
put 'YzgyOVx1YzgyYVx1YzgyYlx1YzgyZVx1YzgzMFx1YzgzMlx1YzgzM1x1YzgzNFx1YzgzNVx1YzgzNlx1YzgzN1x1YzgzOVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MVx1Yzg0Mlx1Yzg0M1x1Yzg0NFx1Yzg0NVx1Yzg0Nlx1Yzg0N1x1Yzg0YVx1Yzg0Ylx1Yzg0ZVx1Yzg0'@;
put 'Zlx1Yzg1MFx1Yzg1MVx1Yzg1Mlx1Yzg1M1x1Yzg1NVx1Yzg1Nlx1Yzg1N1x1Yzg1OFx1Yzg1OVx1Yzg1YVx1Yzg1Ylx1Yzg1Y1x1Yzg1ZFx1Yzg1ZVx1Yzg1Zlx1Yzg2MFx1Yzg2MVx1Yzg2Mlx1Yzg2M1x1Yzg2NFx1Yzg2NVx1Yzg2Nlx1Yzg2N1x1Yzg2OFx1Yzg2OVx1Yzg2YVx1Yzg2Ylx1'@;
put 'Yzg2Y1x1Yzg2ZFx1Yzg2ZVx1Yzg2Zlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3Ylx1Yzg3Y1x1Yzg3ZFx1Yzg3ZVx1Yzg3Zlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZVx1Yzg4Zlx1Yzg5MFx1Yzg5MVx1Yzg5Mlx1Yzg5M1x1Yzg5NVx1Yzg5'@;
put 'Nlx1Yzg5N1x1Yzg5OFx1Yzg5OVx1Yzg5YVx1Yzg5Ylx1Yzg5Y1x1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2MF1bcF1dPTQwOTYwK3As'@;
put 'Yls0MDk2MCtwXT1fWzE2MF1bcF0pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhhNVx1YzhhNlx1YzhhN1x1YzhhOVx1YzhhYVx1YzhhYlx1YzhhY1x1YzhhZFx1YzhhZVx1YzhhZlx1YzhiMFx1Yzhi'@;
put 'MVx1YzhiMlx1YzhiM1x1YzhiNFx1YzhiNVx1YzhiNlx1YzhiN1x1YzhiOFx1YzhiOVx1YzhiYVx1YzhiYlx1YzhiZVx1YzhiZlx1YzhjMFx1YzhjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhjMlx1YzhjM1x1YzhjNVx1YzhjNlx1YzhjN1x1YzhjOVx1YzhjYVx1'@;
put 'YzhjYlx1YzhjZFx1YzhjZVx1YzhjZlx1YzhkMFx1YzhkMVx1YzhkMlx1YzhkM1x1YzhkNlx1YzhkOFx1YzhkYVx1YzhkYlx1YzhkY1x1YzhkZFx1YzhkZVx1YzhkZlx1YzhlMlx1YzhlM1x1YzhlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhlNlx1YzhlN1x1Yzhl'@;
put 'OFx1YzhlOVx1YzhlYVx1YzhlYlx1YzhlY1x1YzhlZFx1YzhlZVx1YzhlZlx1YzhmMFx1YzhmMVx1YzhmMlx1YzhmM1x1YzhmNFx1YzhmNlx1YzhmN1x1YzhmOFx1YzhmOVx1YzhmYVx1YzhmYlx1YzhmZVx1YzhmZlx1YzkwMVx1YzkwMlx1YzkwM1x1YzkwN1x1YzkwOFx1YzkwOVx1YzkwYVx1'@;
put 'YzkwYlx1YzkwZVx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTIwMjVcdTIwMjZceGE4XHUzMDAzXHhhZFx1MjAxNVx1MjIyNVx1ZmYzY1x1MjIzY1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAw'@;
put 'Zlx1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjI2MFx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMmJcdWZmZTBcdWZmZTFcdWZmZTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJceGE3XHUyMDNi'@;
put 'XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUyMTk0XHUzMDEzXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHUy'@;
put 'MjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHUyMjI3XHUyMjI4XHVmZmUyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTYxXVtwXV09NDEyMTYrcCxiWzQx'@;
put 'MjE2K3BdPV9bMTYxXVtwXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTEwXHVjOTEyXHVjOTEzXHVjOTE0XHVjOTE1XHVjOTE2XHVjOTE3XHVjOTE5XHVjOTFhXHVjOTFiXHVjOTFjXHVjOTFkXHVj'@;
put 'OTFlXHVjOTFmXHVjOTIwXHVjOTIxXHVjOTIyXHVjOTIzXHVjOTI0XHVjOTI1XHVjOTI2XHVjOTI3XHVjOTI4XHVjOTI5XHVjOTJhXHVjOTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTJkXHVjOTJlXHVjOTJmXHVjOTMwXHVjOTMxXHVjOTMyXHVjOTMzXHVjOTM1'@;
put 'XHVjOTM2XHVjOTM3XHVjOTM4XHVjOTM5XHVjOTNhXHVjOTNiXHVjOTNjXHVjOTNkXHVjOTNlXHVjOTNmXHVjOTQwXHVjOTQxXHVjOTQyXHVjOTQzXHVjOTQ0XHVjOTQ1XHVjOTQ2XHVjOTQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTQ4XHVjOTQ5XHVjOTRhXHVj'@;
put 'OTRiXHVjOTRjXHVjOTRkXHVjOTRlXHVjOTRmXHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5XHVjOTVhXHVjOTViXHVjOTVjXHVjOTVkXHVjOTVlXHVjOTVmXHVjOTYyXHVjOTY0XHVjOTY1XHVjOTY2XHVjOTY3XHVjOTY4XHVjOTY5XHVjOTZhXHVjOTZiXHVjOTZkXHVjOTZl'@;
put 'XHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBc'@;
put 'dTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIyOTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2'@;
put 'XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUyNjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2Ml1bcF1dPTQxNDcyK3AsYls0MTQ3'@;
put 'MitwXT1fWzE2Ml1bcF0pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NVx1Yzk3Nlx1Yzk3N1x1Yzk3OFx1Yzk3OVx1Yzk3YVx1Yzk3Ylx1Yzk3ZFx1Yzk3ZVx1Yzk3'@;
put 'Zlx1Yzk4MFx1Yzk4MVx1Yzk4Mlx1Yzk4M1x1Yzk4NFx1Yzk4NVx1Yzk4Nlx1Yzk4N1x1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk5MVx1Yzk5Mlx1Yzk5M1x1Yzk5NFx1Yzk5NVx1Yzk5Nlx1Yzk5N1x1Yzk5YVx1'@;
put 'Yzk5Y1x1Yzk5ZVx1Yzk5Zlx1YzlhMFx1YzlhMVx1YzlhMlx1YzlhM1x1YzlhNFx1YzlhNVx1YzlhNlx1YzlhN1x1YzlhOFx1YzlhOVx1YzlhYVx1YzlhYlx1YzlhY1x1YzlhZFx1YzlhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzlhZlx1YzliMFx1YzliMVx1Yzli'@;
put 'Mlx1YzliM1x1YzliNFx1YzliNVx1YzliNlx1YzliN1x1YzliOFx1YzliOVx1YzliYVx1YzliYlx1YzliY1x1YzliZFx1YzliZVx1YzliZlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYlx1YzljY1x1YzljZFx1YzljZVx1YzljZlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1'@;
put 'YzlkYlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmYwNFx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYx'@;
put 'Ylx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1'@;
put 'ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmZlNlx1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1'@;
put 'Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2M11bcF1dPTQx'@;
put 'NzI4K3AsYls0MTcyOCtwXT1fWzE2M11bcF0pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzlkZVx1YzlkZlx1YzllMVx1YzllM1x1YzllNVx1YzllNlx1YzllOFx1YzllOVx1YzllYVx1YzllYlx1Yzll'@;
put 'ZVx1YzlmMlx1YzlmM1x1YzlmNFx1YzlmNVx1YzlmNlx1YzlmN1x1YzlmYVx1YzlmYlx1YzlmZFx1YzlmZVx1YzlmZlx1Y2EwMVx1Y2EwMlx1Y2EwM1x1Y2EwNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2EwNVx1Y2EwNlx1Y2EwN1x1Y2EwYVx1Y2EwZVx1Y2EwZlx1'@;
put 'Y2ExMFx1Y2ExMVx1Y2ExMlx1Y2ExM1x1Y2ExNVx1Y2ExNlx1Y2ExN1x1Y2ExOVx1Y2ExYVx1Y2ExYlx1Y2ExY1x1Y2ExZFx1Y2ExZVx1Y2ExZlx1Y2EyMFx1Y2EyMVx1Y2EyMlx1Y2EyM1x1Y2EyNFx1Y2EyNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2EyNlx1Y2Ey'@;
put 'N1x1Y2EyOFx1Y2EyYVx1Y2EyYlx1Y2EyY1x1Y2EyZFx1Y2EyZVx1Y2EyZlx1Y2EzMFx1Y2EzMVx1Y2EzMlx1Y2EzM1x1Y2EzNFx1Y2EzNVx1Y2EzNlx1Y2EzN1x1Y2EzOFx1Y2EzOVx1Y2EzYVx1Y2EzYlx1Y2EzY1x1Y2EzZFx1Y2EzZVx1Y2EzZlx1Y2E0MFx1Y2E0MVx1Y2E0Mlx1Y2E0M1x1'@;
put 'Y2E0NFx1Y2E0NVx1Y2E0Nlx1MzEzMVx1MzEzMlx1MzEzM1x1MzEzNFx1MzEzNVx1MzEzNlx1MzEzN1x1MzEzOFx1MzEzOVx1MzEzYVx1MzEzYlx1MzEzY1x1MzEzZFx1MzEzZVx1MzEzZlx1MzE0MFx1MzE0MVx1MzE0Mlx1MzE0M1x1MzE0NFx1MzE0NVx1MzE0Nlx1MzE0N1x1MzE0OFx1MzE0'@;
put 'OVx1MzE0YVx1MzE0Ylx1MzE0Y1x1MzE0ZFx1MzE0ZVx1MzE0Zlx1MzE1MFx1MzE1MVx1MzE1Mlx1MzE1M1x1MzE1NFx1MzE1NVx1MzE1Nlx1MzE1N1x1MzE1OFx1MzE1OVx1MzE1YVx1MzE1Ylx1MzE1Y1x1MzE1ZFx1MzE1ZVx1MzE1Zlx1MzE2MFx1MzE2MVx1MzE2Mlx1MzE2M1x1MzE2NFx1'@;
put 'MzE2NVx1MzE2Nlx1MzE2N1x1MzE2OFx1MzE2OVx1MzE2YVx1MzE2Ylx1MzE2Y1x1MzE2ZFx1MzE2ZVx1MzE2Zlx1MzE3MFx1MzE3MVx1MzE3Mlx1MzE3M1x1MzE3NFx1MzE3NVx1MzE3Nlx1MzE3N1x1MzE3OFx1MzE3OVx1MzE3YVx1MzE3Ylx1MzE3Y1x1MzE3ZFx1MzE3ZVx1MzE3Zlx1MzE4'@;
put 'MFx1MzE4MVx1MzE4Mlx1MzE4M1x1MzE4NFx1MzE4NVx1MzE4Nlx1MzE4N1x1MzE4OFx1MzE4OVx1MzE4YVx1MzE4Ylx1MzE4Y1x1MzE4ZFx1MzE4ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtf'@;
put 'WzE2NF1bcF1dPTQxOTg0K3AsYls0MTk4NCtwXT1fWzE2NF1bcF0pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E0N1x1Y2E0OFx1Y2E0OVx1Y2E0YVx1Y2E0Ylx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1'@;
put 'Mlx1Y2E1M1x1Y2E1NVx1Y2E1Nlx1Y2E1N1x1Y2E1OFx1Y2E1OVx1Y2E1YVx1Y2E1Ylx1Y2E1ZVx1Y2E2Mlx1Y2E2M1x1Y2E2NFx1Y2E2NVx1Y2E2Nlx1Y2E2N1x1Y2E2OVx1Y2E2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E2Ylx1Y2E2Y1x1Y2E2ZFx1Y2E2ZVx1'@;
put 'Y2E2Zlx1Y2E3MFx1Y2E3MVx1Y2E3Mlx1Y2E3M1x1Y2E3NFx1Y2E3NVx1Y2E3Nlx1Y2E3N1x1Y2E3OFx1Y2E3OVx1Y2E3YVx1Y2E3Ylx1Y2E3Y1x1Y2E3ZVx1Y2E3Zlx1Y2E4MFx1Y2E4MVx1Y2E4Mlx1Y2E4M1x1Y2E4NVx1Y2E4Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1Y2E4N1x1Y2E4OFx1Y2E4OVx1Y2E4YVx1Y2E4Ylx1Y2E4Y1x1Y2E4ZFx1Y2E4ZVx1Y2E4Zlx1Y2E5MFx1Y2E5MVx1Y2E5Mlx1Y2E5M1x1Y2E5NFx1Y2E5NVx1Y2E5Nlx1Y2E5N1x1Y2E5OVx1Y2E5YVx1Y2E5Ylx1Y2E5Y1x1Y2E5ZFx1Y2E5ZVx1Y2E5Zlx1Y2FhMFx1Y2FhMVx1Y2FhMlx1'@;
put 'Y2FhM1x1Y2FhNFx1Y2FhNVx1Y2FhNlx1Y2FhN1x1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2'@;
put 'N1x1MjE2OFx1MjE2OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1'@;
put 'MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNi'@;
put 'ZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY1XVtwXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoRFtfWzE2NV1bcF1dPTQyMjQwK3AsYls0MjI0MCtwXT1fWzE2NV1bcF0pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FhOFx1Y2FhOVx1Y2FhYVx1Y2FhYlx1Y2FhY1x1Y2FhZFx1Y2Fh'@;
put 'ZVx1Y2FhZlx1Y2FiMFx1Y2FiMVx1Y2FiMlx1Y2FiM1x1Y2FiNFx1Y2FiNVx1Y2FiNlx1Y2FiN1x1Y2FiOFx1Y2FiOVx1Y2FiYVx1Y2FiYlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FjNlx1Y2FjN1x1'@;
put 'Y2FjOFx1Y2FjOVx1Y2FjYVx1Y2FjYlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYVx1Y2FkYlx1Y2FkY1x1Y2FkZFx1Y2FkZVx1Y2FkZlx1Y2FlMVx1Y2FlMlx1Y2FlM1x1Y2FlNFx1Y2FlNVx1Y2FlNlx1Y2FlN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZFx1Y2FlZVx1Y2FlZlx1Y2FmMFx1Y2FmMVx1Y2FmMlx1Y2FmM1x1Y2FmNVx1Y2FmNlx1Y2FmN1x1Y2FmOFx1Y2FmOVx1Y2FmYVx1Y2FmYlx1Y2FmY1x1Y2FmZFx1Y2FmZVx1Y2FmZlx1Y2IwMFx1Y2IwMVx1Y2IwMlx1'@;
put 'Y2IwM1x1Y2IwNFx1Y2IwNVx1Y2IwNlx1Y2IwN1x1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUz'@;
put 'Ylx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1'@;
put 'MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY2'@;
put 'XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2Nl1bcF1dPTQyNDk2K3AsYls0MjQ5NitwXT1fWzE2Nl1bcF0pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2IwYlx1Y2IwY1x1Y2IwZFx1Y2IwZVx1Y2Iw'@;
put 'Zlx1Y2IxMVx1Y2IxMlx1Y2IxM1x1Y2IxNVx1Y2IxNlx1Y2IxN1x1Y2IxOVx1Y2IxYVx1Y2IxYlx1Y2IxY1x1Y2IxZFx1Y2IxZVx1Y2IxZlx1Y2IyMlx1Y2IyM1x1Y2IyNFx1Y2IyNVx1Y2IyNlx1Y2IyN1x1Y2IyOFx1Y2IyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'Y2IyYVx1Y2IyYlx1Y2IyY1x1Y2IyZFx1Y2IyZVx1Y2IyZlx1Y2IzMFx1Y2IzMVx1Y2IzMlx1Y2IzM1x1Y2IzNFx1Y2IzNVx1Y2IzNlx1Y2IzN1x1Y2IzOFx1Y2IzOVx1Y2IzYVx1Y2IzYlx1Y2IzY1x1Y2IzZFx1Y2IzZVx1Y2IzZlx1Y2I0MFx1Y2I0Mlx1Y2I0M1x1Y2I0NFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I0NVx1Y2I0Nlx1Y2I0N1x1Y2I0YVx1Y2I0Ylx1Y2I0ZFx1Y2I0ZVx1Y2I0Zlx1Y2I1MVx1Y2I1Mlx1Y2I1M1x1Y2I1NFx1Y2I1NVx1Y2I1Nlx1Y2I1N1x1Y2I1YVx1Y2I1Ylx1Y2I1Y1x1Y2I1ZVx1Y2I1Zlx1Y2I2MFx1Y2I2MVx1Y2I2Mlx1'@;
put 'Y2I2M1x1Y2I2NVx1Y2I2Nlx1Y2I2N1x1Y2I2OFx1Y2I2OVx1Y2I2YVx1Y2I2Ylx1Y2I2Y1x1MzM5NVx1MzM5Nlx1MzM5N1x1MjExM1x1MzM5OFx1MzNjNFx1MzNhM1x1MzNhNFx1MzNhNVx1MzNhNlx1MzM5OVx1MzM5YVx1MzM5Ylx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM5Zlx1MzNhMFx1MzNh'@;
put 'MVx1MzNhMlx1MzNjYVx1MzM4ZFx1MzM4ZVx1MzM4Zlx1MzNjZlx1MzM4OFx1MzM4OVx1MzNjOFx1MzNhN1x1MzNhOFx1MzNiMFx1MzNiMVx1MzNiMlx1MzNiM1x1MzNiNFx1MzNiNVx1MzNiNlx1MzNiN1x1MzNiOFx1MzNiOVx1MzM4MFx1MzM4MVx1MzM4Mlx1MzM4M1x1MzM4NFx1MzNiYVx1'@;
put 'MzNiYlx1MzNiY1x1MzNiZFx1MzNiZVx1MzNiZlx1MzM5MFx1MzM5MVx1MzM5Mlx1MzM5M1x1MzM5NFx1MjEyNlx1MzNjMFx1MzNjMVx1MzM4YVx1MzM4Ylx1MzM4Y1x1MzNkNlx1MzNjNVx1MzNhZFx1MzNhZVx1MzNhZlx1MzNkYlx1MzNhOVx1MzNhYVx1MzNhYlx1MzNhY1x1MzNkZFx1MzNk'@;
put 'MFx1MzNkM1x1MzNjM1x1MzNjOVx1MzNkY1x1MzNjNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2N10ubGVuZ3RoOysrcCk2'@;
put 'NTUzMyE9PV9bMTY3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2N11bcF1dPTQyNzUyK3AsYls0Mjc1MitwXT1fWzE2N11bcF0pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I2ZFx1Y2I2ZVx1Y2I2'@;
put 'Zlx1Y2I3MFx1Y2I3MVx1Y2I3Mlx1Y2I3M1x1Y2I3NFx1Y2I3NVx1Y2I3Nlx1Y2I3N1x1Y2I3YVx1Y2I3Ylx1Y2I3Y1x1Y2I3ZFx1Y2I3ZVx1Y2I3Zlx1Y2I4MFx1Y2I4MVx1Y2I4Mlx1Y2I4M1x1Y2I4NFx1Y2I4NVx1Y2I4Nlx1Y2I4N1x1Y2I4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1Y2I4OVx1Y2I4YVx1Y2I4Ylx1Y2I4Y1x1Y2I4ZFx1Y2I4ZVx1Y2I4Zlx1Y2I5MFx1Y2I5MVx1Y2I5Mlx1Y2I5M1x1Y2I5NFx1Y2I5NVx1Y2I5Nlx1Y2I5N1x1Y2I5OFx1Y2I5OVx1Y2I5YVx1Y2I5Ylx1Y2I5ZFx1Y2I5ZVx1Y2I5Zlx1Y2JhMFx1Y2JhMVx1Y2JhMlx1Y2Jh'@;
put 'M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JhNFx1Y2JhNVx1Y2JhNlx1Y2JhN1x1Y2JhOFx1Y2JhOVx1Y2JhYVx1Y2JhYlx1Y2JhY1x1Y2JhZFx1Y2JhZVx1Y2JhZlx1Y2JiMFx1Y2JiMVx1Y2JiMlx1Y2JiM1x1Y2JiNFx1Y2JiNVx1Y2JiNlx1Y2JiN1x1Y2JiOVx1'@;
put 'Y2JiYVx1Y2JiYlx1Y2JiY1x1Y2JiZFx1Y2JiZVx1Y2JiZlx1Y2JjMFx1Y2JjMVx1Y2JjMlx1Y2JjM1x1Y2JjNFx4YzZceGQwXHhhYVx1MDEyNlx1ZmZmZFx1MDEzMlx1ZmZmZFx1MDEzZlx1MDE0MVx4ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YVx1ZmZmZFx1MzI2MFx1MzI2MVx1MzI2'@;
put 'Mlx1MzI2M1x1MzI2NFx1MzI2NVx1MzI2Nlx1MzI2N1x1MzI2OFx1MzI2OVx1MzI2YVx1MzI2Ylx1MzI2Y1x1MzI2ZFx1MzI2ZVx1MzI2Zlx1MzI3MFx1MzI3MVx1MzI3Mlx1MzI3M1x1MzI3NFx1MzI3NVx1MzI3Nlx1MzI3N1x1MzI3OFx1MzI3OVx1MzI3YVx1MzI3Ylx1MjRkMFx1MjRkMVx1'@;
put 'MjRkMlx1MjRkM1x1MjRkNFx1MjRkNVx1MjRkNlx1MjRkN1x1MjRkOFx1MjRkOVx1MjRkYVx1MjRkYlx1MjRkY1x1MjRkZFx1MjRkZVx1MjRkZlx1MjRlMFx1MjRlMVx1MjRlMlx1MjRlM1x1MjRlNFx1MjRlNVx1MjRlNlx1MjRlN1x1MjRlOFx1MjRlOVx1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2'@;
put 'M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OF0ubGVuZ3RoOysrcCk2NTUzMyE9'@;
put 'PV9bMTY4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2OF1bcF1dPTQzMDA4K3AsYls0MzAwOCtwXT1fWzE2OF1bcF0pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JjNVx1Y2JjNlx1Y2JjN1x1Y2Jj'@;
put 'OFx1Y2JjOVx1Y2JjYVx1Y2JjYlx1Y2JjY1x1Y2JjZFx1Y2JjZVx1Y2JjZlx1Y2JkMFx1Y2JkMVx1Y2JkMlx1Y2JkM1x1Y2JkNVx1Y2JkNlx1Y2JkN1x1Y2JkOFx1Y2JkOVx1Y2JkYVx1Y2JkYlx1Y2JkY1x1Y2JkZFx1Y2JkZVx1Y2JkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYVx1Y2JlYlx1Y2JlY1x1Y2JlZFx1Y2JlZVx1Y2JlZlx1Y2JmMFx1Y2JmMVx1Y2JmMlx1Y2JmM1x1Y2JmNFx1Y2JmNVx1Y2JmNlx1Y2JmN1x1Y2JmOFx1Y2JmOVx1Y2JmYVx1Y2JmYlx1Y2JmY1x1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JmZFx1Y2JmZVx1Y2JmZlx1Y2MwMFx1Y2MwMVx1Y2MwMlx1Y2MwM1x1Y2MwNFx1Y2MwNVx1Y2MwNlx1Y2MwN1x1Y2MwOFx1Y2MwOVx1Y2MwYVx1Y2MwYlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNVx1Y2MxNlx1'@;
put 'Y2MxN1x1Y2MxOFx1Y2MxOVx1Y2MxYVx1Y2MxYlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwXHUzMjAxXHUzMjAyXHUz'@;
put 'MjAzXHUzMjA0XHUzMjA1XHUzMjA2XHUzMjA3XHUzMjA4XHUzMjA5XHUzMjBhXHUzMjBiXHUzMjBjXHUzMjBkXHUzMjBlXHUzMjBmXHUzMjEwXHUzMjExXHUzMjEyXHUzMjEzXHUzMjE0XHUzMjE1XHUzMjE2XHUzMjE3XHUzMjE4XHUzMjE5XHUzMjFhXHUzMjFiXHUyNDljXHUyNDlkXHUyNDll'@;
put 'XHUyNDlmXHUyNGEwXHUyNGExXHUyNGEyXHUyNGEzXHUyNGE0XHUyNGE1XHUyNGE2XHUyNGE3XHUyNGE4XHUyNGE5XHUyNGFhXHUyNGFiXHUyNGFjXHUyNGFkXHUyNGFlXHUyNGFmXHUyNGIwXHUyNGIxXHUyNGIyXHUyNGIzXHUyNGI0XHUyNGI1XHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUy'@;
put 'NDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sx'@;
put 'NjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY5XVtwXV09NDMyNjQrcCxiWzQzMjY0K3BdPV9bMTY5XVtwXSk7Zm9yKF9bMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzI1XHVjYzI2XHVjYzJhXHVjYzJiXHVj'@;
put 'YzJkXHVjYzJmXHVjYzMxXHVjYzMyXHVjYzMzXHVjYzM0XHVjYzM1XHVjYzM2XHVjYzM3XHVjYzNhXHVjYzNmXHVjYzQwXHVjYzQxXHVjYzQyXHVjYzQzXHVjYzQ2XHVjYzQ3XHVjYzQ5XHVjYzRhXHVjYzRiXHVjYzRkXHVjYzRlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVjYzRmXHVjYzUwXHVjYzUxXHVjYzUyXHVjYzUzXHVjYzU2XHVjYzVhXHVjYzViXHVjYzVjXHVjYzVkXHVjYzVlXHVjYzVmXHVjYzYxXHVjYzYyXHVjYzYzXHVjYzY1XHVjYzY3XHVjYzY5XHVjYzZhXHVjYzZiXHVjYzZjXHVjYzZkXHVjYzZlXHVjYzZmXHVjYzcxXHVjYzcyXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzczXHVjYzc0XHVjYzc2XHVjYzc3XHVjYzc4XHVjYzc5XHVjYzdhXHVjYzdiXHVjYzdjXHVjYzdkXHVjYzdlXHVjYzdmXHVjYzgwXHVjYzgxXHVjYzgyXHVjYzgzXHVjYzg0XHVjYzg1XHVjYzg2XHVjYzg3XHVjYzg4XHVjYzg5XHVjYzhh'@;
put 'XHVjYzhiXHVjYzhjXHVjYzhkXHVjYzhlXHVjYzhmXHVjYzkwXHVjYzkxXHVjYzkyXHVjYzkzXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUz'@;
put 'MDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZl'@;
put 'XHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUz'@;
put 'MDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcwXS5sZW5ndGg7Kytw'@;
put 'KTY1NTMzIT09X1sxNzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTcwXVtwXV09NDM1MjArcCxiWzQzNTIwK3BdPV9bMTcwXVtwXSk7Zm9yKF9bMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzk0XHVjYzk1XHVj'@;
put 'Yzk2XHVjYzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExXHVjY2EyXHVjY2EzXHVjY2E0XHVjY2E1XHVjY2E2XHVjY2E3XHVjY2FhXHVjY2FlXHVjY2FmXHVjY2IwXHVjY2IxXHVjY2IyXHVjY2IzXHVjY2I2XHVjY2I3XHVjY2I5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVjY2JhXHVjY2JiXHVjY2JkXHVjY2JlXHVjY2JmXHVjY2MwXHVjY2MxXHVjY2MyXHVjY2MzXHVjY2M2XHVjY2M4XHVjY2NhXHVjY2NiXHVjY2NjXHVjY2NkXHVjY2NlXHVjY2NmXHVjY2QxXHVjY2QyXHVjY2QzXHVjY2Q1XHVjY2Q2XHVjY2Q3XHVjY2Q4XHVjY2Q5XHVj'@;
put 'Y2RhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2RiXHVjY2RjXHVjY2RkXHVjY2RlXHVjY2RmXHVjY2UwXHVjY2UxXHVjY2UyXHVjY2UzXHVjY2U1XHVjY2U2XHVjY2U3XHVjY2U4XHVjY2U5XHVjY2VhXHVjY2ViXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxXHVjY2Yy'@;
put 'XHVjY2YzXHVjY2Y0XHVjY2Y1XHVjY2Y2XHVjY2Y3XHVjY2Y4XHVjY2Y5XHVjY2ZhXHVjY2ZiXHVjY2ZjXHVjY2ZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUz'@;
put 'MGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNj'@;
put 'XHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUz'@;
put 'MGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcx'@;
put 'XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTcxXVtwXV09NDM3NzYrcCxiWzQzNzc2K3BdPV9bMTcxXVtwXSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj'@;
put 'Y2ZlXHVjY2ZmXHVjZDAwXHVjZDAyXHVjZDAzXHVjZDA0XHVjZDA1XHVjZDA2XHVjZDA3XHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExXHVjZDEyXHVjZDEzXHVjZDE0XHVjZDE1XHVjZDE2XHVjZDE3XHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkXHVjZDJlXHVjZDJmXHVjZDMwXHVjZDMxXHVjZDMyXHVjZDMzXHVjZDM0XHVjZDM1XHVjZDM2XHVjZDM3XHVjZDM4XHVjZDNhXHVjZDNiXHVj'@;
put 'ZDNjXHVjZDNkXHVjZDNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDNmXHVjZDQwXHVjZDQxXHVjZDQyXHVjZDQzXHVjZDQ0XHVjZDQ1XHVjZDQ2XHVjZDQ3XHVjZDQ4XHVjZDQ5XHVjZDRhXHVjZDRiXHVjZDRjXHVjZDRkXHVjZDRlXHVjZDRmXHVjZDUwXHVjZDUx'@;
put 'XHVjZDUyXHVjZDUzXHVjZDU0XHVjZDU1XHVjZDU2XHVjZDU3XHVjZDU4XHVjZDU5XHVjZDVhXHVjZDViXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUw'@;
put 'NDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUw'@;
put 'NDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'cD0wO3AhPV9bMTcyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTcyXVtwXV09NDQwMzIrcCxiWzQ0MDMyK3BdPV9bMTcyXVtwXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVjZDYxXHVjZDYyXHVjZDYzXHVjZDY1XHVjZDY2XHVjZDY3XHVjZDY4XHVjZDY5XHVjZDZhXHVjZDZiXHVjZDZlXHVjZDcwXHVjZDcyXHVjZDczXHVjZDc0XHVjZDc1XHVjZDc2XHVjZDc3XHVjZDc5XHVjZDdhXHVjZDdiXHVjZDdjXHVjZDdkXHVjZDdlXHVjZDdmXHVjZDgw'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDgxXHVjZDgyXHVjZDgzXHVjZDg0XHVjZDg1XHVjZDg2XHVjZDg3XHVjZDg5XHVjZDhhXHVjZDhiXHVjZDhjXHVjZDhkXHVjZDhlXHVjZDhmXHVjZDkwXHVjZDkxXHVjZDkyXHVjZDkzXHVjZDk2XHVjZDk3XHVjZDk5XHVj'@;
put 'ZDlhXHVjZDliXHVjZDlkXHVjZDllXHVjZDlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGEwXHVjZGExXHVjZGEyXHVjZGEzXHVjZGE2XHVjZGE4XHVjZGFhXHVjZGFiXHVjZGFjXHVjZGFkXHVjZGFlXHVjZGFmXHVjZGIxXHVjZGIyXHVjZGIzXHVjZGI0XHVjZGI1'@;
put 'XHVjZGI2XHVjZGI3XHVjZGI4XHVjZGI5XHVjZGJhXHVjZGJiXHVjZGJjXHVjZGJkXHVjZGJlXHVjZGJmXHVjZGMwXHVjZGMxXHVjZGMyXHVjZGMzXHVjZGM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIikscD0wO3AhPV9bMTczXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTczXVtwXV09NDQyODgrcCxiWzQ0Mjg4K3BdPV9bMTczXVtwXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGM2XHVjZGM3XHVjZGM4XHVjZGM5XHVjZGNhXHVjZGNiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxXHVjZGQyXHVjZGQzXHVjZGQ0XHVjZGQ1XHVjZGQ2XHVjZGQ3XHVjZGQ4XHVjZGQ5XHVjZGRhXHVjZGRiXHVjZGRjXHVjZGRkXHVjZGRlXHVjZGRm'@;
put 'XHVjZGUwXHVjZGUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGUyXHVjZGUzXHVjZGU0XHVjZGU1XHVjZGU2XHVjZGU3XHVjZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxXHVjZGYyXHVjZGYzXHVjZGY0XHVjZGY1XHVjZGY2XHVjZGY3XHVj'@;
put 'ZGZhXHVjZGZjXHVjZGZlXHVjZGZmXHVjZTAwXHVjZTAxXHVjZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkXHVjZTBlXHVjZTBmXHVjZTEwXHVjZTExXHVjZTEyXHVjZTEzXHVjZTE1'@;
put 'XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhXHVjZTFiXHVjZTFjXHVjZTFkXHVjZTFlXHVjZTFmXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3XHVjZTI5XHVjZTJhXHVjZTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc0XVtwXV09NDQ1NDQrcCxiWzQ0NTQ0K3BdPV9bMTc0XVtwXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2XHVjZTM3XHVjZTM4XHVjZTM5XHVjZTNhXHVjZTNiXHVjZTNjXHVjZTNkXHVjZTNlXHVjZTNmXHVjZTQwXHVjZTQxXHVjZTQyXHVjZTQzXHVjZTQ0XHVjZTQ1'@;
put 'XHVjZTQ2XHVjZTQ3XHVjZTQ4XHVjZTQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTRhXHVjZTRiXHVjZTRjXHVjZTRkXHVjZTRlXHVjZTRmXHVjZTUwXHVjZTUxXHVjZTUyXHVjZTUzXHVjZTU0XHVjZTU1XHVjZTU2XHVjZTU3XHVjZTVhXHVjZTViXHVjZTVkXHVj'@;
put 'ZTVlXHVjZTYyXHVjZTYzXHVjZTY0XHVjZTY1XHVjZTY2XHVjZTY3XHVjZTZhXHVjZTZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTZlXHVjZTZmXHVjZTcwXHVjZTcxXHVjZTcyXHVjZTczXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkXHVjZTdl'@;
put 'XHVjZTdmXHVjZTgwXHVjZTgxXHVjZTgyXHVjZTgzXHVjZTg2XHVjZTg4XHVjZThhXHVjZThiXHVjZThjXHVjZThkXHVjZThlXHVjZThmXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc1XVtwXV09NDQ4MDArcCxiWzQ0ODAwK3BdPV9bMTc1XVtwXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTlhXHVjZTliXHVjZTljXHVjZTlkXHVjZTllXHVjZTlmXHVjZWEyXHVjZWE2XHVjZWE3XHVjZWE4XHVjZWE5XHVjZWFhXHVjZWFiXHVjZWFlXHVjZWFmXHVjZWIwXHVjZWIxXHVjZWIyXHVjZWIzXHVjZWI0'@;
put 'XHVjZWI1XHVjZWI2XHVjZWI3XHVjZWI4XHVjZWI5XHVjZWJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZWJiXHVjZWJjXHVjZWJkXHVjZWJlXHVjZWJmXHVjZWMwXHVjZWMyXHVjZWMzXHVjZWM0XHVjZWM1XHVjZWM2XHVjZWM3XHVjZWM4XHVjZWM5XHVjZWNhXHVj'@;
put 'ZWNiXHVjZWNjXHVjZWNkXHVjZWNlXHVjZWNmXHVjZWQwXHVjZWQxXHVjZWQyXHVjZWQzXHVjZWQ0XHVjZWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZWQ2XHVjZWQ3XHVjZWQ4XHVjZWQ5XHVjZWRhXHVjZWRiXHVjZWRjXHVjZWRkXHVjZWRlXHVjZWRmXHVjZWUw'@;
put 'XHVjZWUxXHVjZWUyXHVjZWUzXHVjZWU2XHVjZWU3XHVjZWU5XHVjZWVhXHVjZWVkXHVjZWVlXHVjZWVmXHVjZWYwXHVjZWYxXHVjZWYyXHVjZWYzXHVjZWY2XHVjZWZhXHVjZWZiXHVjZWZjXHVjZWZkXHVjZWZlXHVjZWZmXHVhYzAwXHVhYzAxXHVhYzA0XHVhYzA3XHVhYzA4XHVhYzA5XHVh'@;
put 'YzBhXHVhYzEwXHVhYzExXHVhYzEyXHVhYzEzXHVhYzE0XHVhYzE1XHVhYzE2XHVhYzE3XHVhYzE5XHVhYzFhXHVhYzFiXHVhYzFjXHVhYzFkXHVhYzIwXHVhYzI0XHVhYzJjXHVhYzJkXHVhYzJmXHVhYzMwXHVhYzMxXHVhYzM4XHVhYzM5XHVhYzNjXHVhYzQwXHVhYzRiXHVhYzRkXHVhYzU0'@;
put 'XHVhYzU4XHVhYzVjXHVhYzcwXHVhYzcxXHVhYzc0XHVhYzc3XHVhYzc4XHVhYzdhXHVhYzgwXHVhYzgxXHVhYzgzXHVhYzg0XHVhYzg1XHVhYzg2XHVhYzg5XHVhYzhhXHVhYzhiXHVhYzhjXHVhYzkwXHVhYzk0XHVhYzljXHVhYzlkXHVhYzlmXHVhY2EwXHVhY2ExXHVhY2E4XHVhY2E5XHVh'@;
put 'Y2FhXHVhY2FjXHVhY2FmXHVhY2IwXHVhY2I4XHVhY2I5XHVhY2JiXHVhY2JjXHVhY2JkXHVhY2MxXHVhY2M0XHVhY2M4XHVhY2NjXHVhY2Q1XHVhY2Q3XHVhY2UwXHVhY2UxXHVhY2U0XHVhY2U3XHVhY2U4XHVhY2VhXHVhY2VjXHVhY2VmXHVhY2YwXHVhY2YxXHVhY2YzXHVhY2Y1XHVhY2Y2'@;
put 'XHVhY2ZjXHVhY2ZkXHVhZDAwXHVhZDA0XHVhZDA2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc2XVtwXV09NDUwNTYrcCxiWzQ1MDU2K3BdPV9bMTc2XVtwXSk7Zm9yKF9bMTc3XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5XHVjZjBhXHVjZjBiXHVjZjBjXHVjZjBkXHVjZjBlXHVjZjBmXHVjZjEyXHVjZjE0XHVjZjE2XHVjZjE3XHVjZjE4XHVjZjE5'@;
put 'XHVjZjFhXHVjZjFiXHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjI1XHVjZjI2XHVjZjI3XHVjZjI4XHVjZjI5XHVjZjJhXHVjZjJiXHVjZjJlXHVjZjMyXHVjZjMzXHVjZjM0XHVjZjM1XHVjZjM2XHVj'@;
put 'ZjM3XHVjZjM5XHVjZjNhXHVjZjNiXHVjZjNjXHVjZjNkXHVjZjNlXHVjZjNmXHVjZjQwXHVjZjQxXHVjZjQyXHVjZjQzXHVjZjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjQ1XHVjZjQ2XHVjZjQ3XHVjZjQ4XHVjZjQ5XHVjZjRhXHVjZjRiXHVjZjRjXHVjZjRk'@;
put 'XHVjZjRlXHVjZjRmXHVjZjUwXHVjZjUxXHVjZjUyXHVjZjUzXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVkXHVjZjVlXHVjZjVmXHVjZjYwXHVjZjYxXHVjZjYyXHVjZjYzXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVh'@;
put 'ZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVhZDYxXHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdj'@;
put 'XHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQwXHVhZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVh'@;
put 'ZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVhZTRhXHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYw'@;
put 'XHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc3XVtwXV09NDUzMTIrcCxiWzQ1MzEyK3BdPV9bMTc3XVtwXSk7Zm9y'@;
put 'KF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVjZjc5XHVjZjdhXHVjZjdiXHVjZjdjXHVjZjdkXHVjZjdlXHVjZjdmXHVjZjgx'@;
put 'XHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2XHVjZjg3XHVjZjg4XHVjZjg5XHVjZjhhXHVjZjhiXHVjZjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjhlXHVjZjhmXHVjZjkwXHVjZjkxXHVjZjkyXHVjZjkzXHVjZjk0XHVjZjk1XHVjZjk2XHVjZjk3XHVjZjk4XHVj'@;
put 'Zjk5XHVjZjlhXHVjZjliXHVjZjljXHVjZjlkXHVjZjllXHVjZjlmXHVjZmEwXHVjZmEyXHVjZmEzXHVjZmE0XHVjZmE1XHVjZmE2XHVjZmE3XHVjZmE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmFhXHVjZmFiXHVjZmFjXHVjZmFkXHVjZmFlXHVjZmFmXHVjZmIx'@;
put 'XHVjZmIyXHVjZmIzXHVjZmI0XHVjZmI1XHVjZmI2XHVjZmI3XHVjZmI4XHVjZmI5XHVjZmJhXHVjZmJiXHVjZmJjXHVjZmJkXHVjZmJlXHVjZmJmXHVjZmMwXHVjZmMxXHVjZmMyXHVjZmMzXHVjZmM1XHVjZmM2XHVjZmM3XHVjZmM4XHVjZmM5XHVjZmNhXHVjZmNiXHVhZTc5XHVhZTdiXHVh'@;
put 'ZTdjXHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEw'@;
put 'XHVhZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVh'@;
put 'ZmI5XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1'@;
put 'XHViMDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc4XVtwXV09NDU1NjgrcCxiWzQ1NTY4K3BdPV9b'@;
put 'MTc4XVtwXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmNjXHVjZmNkXHVjZmNlXHVjZmNmXHVjZmQwXHVjZmQxXHVjZmQyXHVjZmQzXHVjZmQ0XHVjZmQ1XHVjZmQ2XHVjZmQ3XHVjZmQ4XHVjZmQ5'@;
put 'XHVjZmRhXHVjZmRiXHVjZmRjXHVjZmRkXHVjZmRlXHVjZmRmXHVjZmUyXHVjZmUzXHVjZmU1XHVjZmU2XHVjZmU3XHVjZmU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmVhXHVjZmViXHVjZmVjXHVjZmVkXHVjZmVlXHVjZmVmXHVjZmYyXHVjZmY0XHVjZmY2XHVj'@;
put 'ZmY3XHVjZmY4XHVjZmY5XHVjZmZhXHVjZmZiXHVjZmZkXHVjZmZlXHVjZmZmXHVkMDAxXHVkMDAyXHVkMDAzXHVkMDA1XHVkMDA2XHVkMDA3XHVkMDA4XHVkMDA5XHVkMDBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDBiXHVkMDBjXHVkMDBkXHVkMDBlXHVkMDBm'@;
put 'XHVkMDEwXHVkMDEyXHVkMDEzXHVkMDE0XHVkMDE1XHVkMDE2XHVkMDE3XHVkMDE5XHVkMDFhXHVkMDFiXHVkMDFjXHVkMDFkXHVkMDFlXHVkMDFmXHVkMDIwXHVkMDIxXHVkMDIyXHVkMDIzXHVkMDI0XHVkMDI1XHVkMDI2XHVkMDI3XHVkMDI4XHVkMDI5XHVkMDJhXHVkMDJiXHVkMDJjXHVi'@;
put 'MDVkXHViMDdjXHViMDdkXHViMDgwXHViMDg0XHViMDhjXHViMDhkXHViMDhmXHViMDkxXHViMDk4XHViMDk5XHViMDlhXHViMDljXHViMDlmXHViMGEwXHViMGExXHViMGEyXHViMGE4XHViMGE5XHViMGFiXHViMGFjXHViMGFkXHViMGFlXHViMGFmXHViMGIxXHViMGIzXHViMGI0XHViMGI1'@;
put 'XHViMGI4XHViMGJjXHViMGM0XHViMGM1XHViMGM3XHViMGM4XHViMGM5XHViMGQwXHViMGQxXHViMGQ0XHViMGQ4XHViMGUwXHViMGU1XHViMTA4XHViMTA5XHViMTBiXHViMTBjXHViMTEwXHViMTEyXHViMTEzXHViMTE4XHViMTE5XHViMTFiXHViMTFjXHViMTFkXHViMTIzXHViMTI0XHVi'@;
put 'MTI1XHViMTI4XHViMTJjXHViMTM0XHViMTM1XHViMTM3XHViMTM4XHViMTM5XHViMTQwXHViMTQxXHViMTQ0XHViMTQ4XHViMTUwXHViMTUxXHViMTU0XHViMTU1XHViMTU4XHViMTVjXHViMTYwXHViMTc4XHViMTc5XHViMTdjXHViMTgwXHViMTgyXHViMTg4XHViMTg5XHViMThiXHViMThk'@;
put 'XHViMTkyXHViMTkzXHViMTk0XHViMTk4XHViMTljXHViMWE4XHViMWNjXHViMWQwXHViMWQ0XHViMWRjXHViMWRkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc5XVtwXV09NDU4MjQrcCxi'@;
put 'WzQ1ODI0K3BdPV9bMTc5XVtwXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDJlXHVkMDJmXHVkMDMwXHVkMDMxXHVkMDMyXHVkMDMzXHVkMDM2XHVkMDM3XHVkMDM5XHVkMDNhXHVkMDNiXHVkMDNk'@;
put 'XHVkMDNlXHVkMDNmXHVkMDQwXHVkMDQxXHVkMDQyXHVkMDQzXHVkMDQ2XHVkMDQ4XHVkMDRhXHVkMDRiXHVkMDRjXHVkMDRkXHVkMDRlXHVkMDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5XHVk'@;
put 'MDVhXHVkMDViXHVkMDVjXHVkMDVkXHVkMDVlXHVkMDVmXHVkMDYxXHVkMDYyXHVkMDYzXHVkMDY0XHVkMDY1XHVkMDY2XHVkMDY3XHVkMDY4XHVkMDY5XHVkMDZhXHVkMDZiXHVkMDZlXHVkMDZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDcxXHVkMDcyXHVkMDcz'@;
put 'XHVkMDc1XHVkMDc2XHVkMDc3XHVkMDc4XHVkMDc5XHVkMDdhXHVkMDdiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyXHVkMDgzXHVkMDg0XHVkMDg1XHVkMDg2XHVkMDg3XHVkMDg4XHVkMDg5XHVkMDhhXHVkMDhiXHVkMDhjXHVkMDhkXHVkMDhlXHVkMDhmXHVkMDkwXHVkMDkxXHVkMDkyXHVk'@;
put 'MDkzXHVkMDk0XHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBiXHViMjBjXHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0'@;
put 'XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHViMmEzXHViMmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHVi'@;
put 'MmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViXHViMmVjXHViMmVkXHViMmVlXHViMmVmXHViMmYzXHViMmY0XHViMmY1XHViMmY3XHViMmY4XHViMmY5XHViMmZhXHViMmZiXHViMmZmXHViMzAwXHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEz'@;
put 'XHViMzE0XHViMzE1XHViMzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgwXVtw'@;
put 'XV09NDYwODArcCxiWzQ2MDgwK3BdPV9bMTgwXVtwXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDk1XHVkMDk2XHVkMDk3XHVkMDk4XHVkMDk5XHVkMDlhXHVkMDliXHVkMDljXHVkMDlkXHVkMDll'@;
put 'XHVkMDlmXHVkMGEwXHVkMGExXHVkMGEyXHVkMGEzXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkXHVkMGFlXHVkMGFmXHVkMGIwXHVkMGIxXHVkMGIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhXHVkMGJiXHVk'@;
put 'MGJjXHVkMGJkXHVkMGJlXHVkMGJmXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhXHVkMGNiXHVkMGNjXHVkMGNkXHVkMGNlXHVkMGNmXHVkMGQyXHVkMGQ2XHVkMGQ3XHVkMGQ4XHVkMGQ5XHVkMGRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGRi'@;
put 'XHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUzXHVkMGU1XHVkMGU2XHVkMGU3XHVkMGU4XHVkMGU5XHVkMGVhXHVkMGViXHVkMGVlXHVkMGYyXHVkMGYzXHVkMGY0XHVkMGY1XHVkMGY2XHVkMGY3XHVkMGY5XHVkMGZhXHVkMGZiXHVkMGZjXHVkMGZkXHVkMGZlXHVkMGZmXHVkMTAwXHVk'@;
put 'MTAxXHVkMTAyXHVkMTAzXHVkMTA0XHViMzY3XHViMzY5XHViMzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2Ni'@;
put 'XHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHVi'@;
put 'NDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4'@;
put 'XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODFdW3BdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihEW19bMTgxXVtwXV09NDYzMzYrcCxiWzQ2MzM2K3BdPV9bMTgxXVtwXSk7Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTA1XHVkMTA2XHVkMTA3XHVkMTA4XHVkMTA5XHVkMTBhXHVkMTBiXHVkMTBj'@;
put 'XHVkMTBlXHVkMTBmXHVkMTEwXHVkMTExXHVkMTEyXHVkMTEzXHVkMTE0XHVkMTE1XHVkMTE2XHVkMTE3XHVkMTE4XHVkMTE5XHVkMTFhXHVkMTFiXHVkMTFjXHVkMTFkXHVkMTFlXHVkMTFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTIwXHVkMTIxXHVkMTIyXHVk'@;
put 'MTIzXHVkMTI0XHVkMTI1XHVkMTI2XHVkMTI3XHVkMTI4XHVkMTI5XHVkMTJhXHVkMTJiXHVkMTJjXHVkMTJkXHVkMTJlXHVkMTJmXHVkMTMyXHVkMTMzXHVkMTM1XHVkMTM2XHVkMTM3XHVkMTM5XHVkMTNiXHVkMTNjXHVkMTNkXHVkMTNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVkMTNmXHVkMTQyXHVkMTQ2XHVkMTQ3XHVkMTQ4XHVkMTQ5XHVkMTRhXHVkMTRiXHVkMTRlXHVkMTRmXHVkMTUxXHVkMTUyXHVkMTUzXHVkMTU1XHVkMTU2XHVkMTU3XHVkMTU4XHVkMTU5XHVkMTVhXHVkMTViXHVkMTVlXHVkMTYwXHVkMTYyXHVkMTYzXHVkMTY0XHVkMTY1XHVk'@;
put 'MTY2XHVkMTY3XHVkMTY5XHVkMTZhXHVkMTZiXHVkMTZkXHViNTQwXHViNTQxXHViNTQzXHViNTQ0XHViNTQ1XHViNTRiXHViNTRjXHViNTRkXHViNTUwXHViNTU0XHViNTVjXHViNTVkXHViNTVmXHViNTYwXHViNTYxXHViNWEwXHViNWExXHViNWE0XHViNWE4XHViNWFhXHViNWFiXHViNWIw'@;
put 'XHViNWIxXHViNWIzXHViNWI0XHViNWI1XHViNWJiXHViNWJjXHViNWJkXHViNWMwXHViNWM0XHViNWNjXHViNWNkXHViNWNmXHViNWQwXHViNWQxXHViNWQ4XHViNWVjXHViNjEwXHViNjExXHViNjE0XHViNjE4XHViNjI1XHViNjJjXHViNjM0XHViNjQ4XHViNjY0XHViNjY4XHViNjljXHVi'@;
put 'NjlkXHViNmEwXHViNmE0XHViNmFiXHViNmFjXHViNmIxXHViNmQ0XHViNmYwXHViNmY0XHViNmY4XHViNzAwXHViNzAxXHViNzA1XHViNzI4XHViNzI5XHViNzJjXHViNzJmXHViNzMwXHViNzM4XHViNzM5XHViNzNiXHViNzQ0XHViNzQ4XHViNzRjXHViNzU0XHViNzU1XHViNzYwXHViNzY0'@;
put 'XHViNzY4XHViNzcwXHViNzcxXHViNzczXHViNzc1XHViNzdjXHViNzdkXHViNzgwXHViNzg0XHViNzhjXHViNzhkXHViNzhmXHViNzkwXHViNzkxXHViNzkyXHViNzk2XHViNzk3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODJdW3BdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihEW19bMTgyXVtwXV09NDY1OTIrcCxiWzQ2NTkyK3BdPV9bMTgyXVtwXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTZlXHVkMTZmXHVkMTcwXHVkMTcxXHVkMTcyXHVkMTcz'@;
put 'XHVkMTc0XHVkMTc1XHVkMTc2XHVkMTc3XHVkMTc4XHVkMTc5XHVkMTdhXHVkMTdiXHVkMTdkXHVkMTdlXHVkMTdmXHVkMTgwXHVkMTgxXHVkMTgyXHVkMTgzXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMThiXHVk'@;
put 'MThjXHVkMThkXHVkMThlXHVkMThmXHVkMTkwXHVkMTkxXHVkMTkyXHVkMTkzXHVkMTk0XHVkMTk1XHVkMTk2XHVkMTk3XHVkMTk4XHVkMTk5XHVkMTlhXHVkMTliXHVkMTljXHVkMTlkXHVkMTllXHVkMTlmXHVkMWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVkMWE5XHVkMWFhXHVkMWFiXHVkMWFjXHVkMWFkXHVkMWFlXHVkMWFmXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxXHVkMWMyXHVkMWMzXHVkMWM0XHVkMWM1XHVkMWM2XHVkMWM3XHVk'@;
put 'MWM4XHVkMWM5XHVkMWNhXHVkMWNiXHVkMWNjXHVkMWNkXHVkMWNlXHVkMWNmXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2FiXHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHViN2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2Zk'@;
put 'XHViN2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHViODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0XHViODUxXHViODUzXHViODVjXHViODVkXHVi'@;
put 'ODYwXHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMxXHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHViOGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4'@;
put 'XHViOGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHViOTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgzXS5sZW5ndGg7KytwKTY1NTMzIT09'@;
put 'X1sxODNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgzXVtwXV09NDY4NDgrcCxiWzQ2ODQ4K3BdPV9bMTgzXVtwXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWQwXHVkMWQxXHVkMWQyXHVkMWQz'@;
put 'XHVkMWQ0XHVkMWQ1XHVkMWQ2XHVkMWQ3XHVkMWQ5XHVkMWRhXHVkMWRiXHVkMWRjXHVkMWRkXHVkMWRlXHVkMWRmXHVkMWUwXHVkMWUxXHVkMWUyXHVkMWUzXHVkMWU0XHVkMWU1XHVkMWU2XHVkMWU3XHVkMWU4XHVkMWU5XHVkMWVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVkMWViXHVkMWVjXHVkMWVkXHVkMWVlXHVkMWVmXHVkMWYwXHVkMWYxXHVkMWYyXHVkMWYzXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5XHVkMWZhXHVkMWZiXHVkMWZjXHVkMWZkXHVkMWZlXHVkMWZmXHVkMjAwXHVkMjAxXHVkMjAyXHVkMjAzXHVkMjA0XHVkMjA1XHVkMjA2XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjA4XHVkMjBhXHVkMjBiXHVkMjBjXHVkMjBkXHVkMjBlXHVkMjBmXHVkMjExXHVkMjEyXHVkMjEzXHVkMjE0XHVkMjE1XHVkMjE2XHVkMjE3XHVkMjE4XHVkMjE5XHVkMjFhXHVkMjFiXHVkMjFjXHVkMjFkXHVkMjFlXHVkMjFmXHVk'@;
put 'MjIwXHVkMjIxXHVkMjIyXHVkMjIzXHVkMjI0XHVkMjI1XHVkMjI2XHVkMjI3XHVkMjI4XHVkMjI5XHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJj'@;
put 'XHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlXHViOWNmXHViOWQwXHViOWQxXHViOWQyXHViOWQ4XHViOWQ5XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHVi'@;
put 'OWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHViYTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0'@;
put 'XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg0XS5sZW5ndGg7'@;
put 'KytwKTY1NTMzIT09X1sxODRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg0XVtwXV09NDcxMDQrcCxiWzQ3MTA0K3BdPV9bMTg0XVtwXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjJhXHVkMjJi'@;
put 'XHVkMjJlXHVkMjJmXHVkMjMxXHVkMjMyXHVkMjMzXHVkMjM1XHVkMjM2XHVkMjM3XHVkMjM4XHVkMjM5XHVkMjNhXHVkMjNiXHVkMjNlXHVkMjQwXHVkMjQyXHVkMjQzXHVkMjQ0XHVkMjQ1XHVkMjQ2XHVkMjQ3XHVkMjQ5XHVkMjRhXHVkMjRiXHVkMjRjXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVkMjRkXHVkMjRlXHVkMjRmXHVkMjUwXHVkMjUxXHVkMjUyXHVkMjUzXHVkMjU0XHVkMjU1XHVkMjU2XHVkMjU3XHVkMjU4XHVkMjU5XHVkMjVhXHVkMjViXHVkMjVkXHVkMjVlXHVkMjVmXHVkMjYwXHVkMjYxXHVkMjYyXHVkMjYzXHVkMjY1XHVkMjY2XHVkMjY3'@;
put 'XHVkMjY4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjY5XHVkMjZhXHVkMjZiXHVkMjZjXHVkMjZkXHVkMjZlXHVkMjZmXHVkMjcwXHVkMjcxXHVkMjcyXHVkMjczXHVkMjc0XHVkMjc1XHVkMjc2XHVkMjc3XHVkMjc4XHVkMjc5XHVkMjdhXHVkMjdiXHVkMjdjXHVk'@;
put 'MjdkXHVkMjdlXHVkMjdmXHVkMjgyXHVkMjgzXHVkMjg1XHVkMjg2XHVkMjg3XHVkMjg5XHVkMjhhXHVkMjhiXHVkMjhjXHViYjAwXHViYjA0XHViYjBkXHViYjBmXHViYjExXHViYjE4XHViYjFjXHViYjIwXHViYjI5XHViYjJiXHViYjM0XHViYjM1XHViYjM2XHViYjM4XHViYjNiXHViYjNj'@;
put 'XHViYjNkXHViYjNlXHViYjQ0XHViYjQ1XHViYjQ3XHViYjQ5XHViYjRkXHViYjRmXHViYjUwXHViYjU0XHViYjU4XHViYjYxXHViYjYzXHViYjZjXHViYjg4XHViYjhjXHViYjkwXHViYmE0XHViYmE4XHViYmFjXHViYmI0XHViYmI3XHViYmMwXHViYmM0XHViYmM4XHViYmQwXHViYmQzXHVi'@;
put 'YmY4XHViYmY5XHViYmZjXHViYmZmXHViYzAwXHViYzAyXHViYzA4XHViYzA5XHViYzBiXHViYzBjXHViYzBkXHViYzBmXHViYzExXHViYzE0XHViYzE1XHViYzE2XHViYzE3XHViYzE4XHViYzFiXHViYzFjXHViYzFkXHViYzFlXHViYzFmXHViYzI0XHViYzI1XHViYzI3XHViYzI5XHViYzJk'@;
put 'XHViYzMwXHViYzMxXHViYzM0XHViYzM4XHViYzQwXHViYzQxXHViYzQzXHViYzQ0XHViYzQ1XHViYzQ5XHViYzRjXHViYzRkXHViYzUwXHViYzVkXHViYzg0XHViYzg1XHViYzg4XHViYzhiXHViYzhjXHViYzhlXHViYzk0XHViYzk1XHViYzk3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b'@;
put 'MTg1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg1XVtwXV09NDczNjArcCxiWzQ3MzYwK3BdPV9bMTg1XVtwXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2XHVkMjk3XHVkMjk4XHVkMjk5XHVkMjlhXHVkMjliXHVkMjlkXHVkMjllXHVkMjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1XHVkMmE2XHVkMmE3XHVkMmE4XHVkMmE5XHVkMmFhXHVkMmFiXHVkMmFkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyXHVkMmIzXHVkMmI0XHVkMmI1XHVkMmI2XHVkMmI3XHVkMmJhXHVkMmJiXHVkMmJkXHVkMmJlXHVkMmMxXHVkMmMzXHVkMmM0XHVkMmM1XHVkMmM2XHVkMmM3XHVkMmNhXHVkMmNjXHVkMmNkXHVkMmNl'@;
put 'XHVkMmNmXHVkMmQwXHVkMmQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5XHVkMmRhXHVkMmRiXHVkMmRkXHVkMmRlXHVkMmRmXHVkMmUwXHVkMmUxXHVkMmUyXHVkMmUzXHVkMmU2XHVkMmU3XHVkMmU4XHVk'@;
put 'MmU5XHVkMmVhXHVkMmViXHVkMmVjXHVkMmVkXHVkMmVlXHVkMmVmXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZhXHViYzk5XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2Jk'@;
put 'XHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHViY2ZjXHViZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHVi'@;
put 'ZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkzXHViZDk1XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0'@;
put 'XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHViZTQ4XHViZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0XHVmZmZkIi5zcGxpdCgi'@;
put 'IikscD0wO3AhPV9bMTg2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg2XVtwXV09NDc2MTYrcCxiWzQ3NjE2K3BdPV9bMTg2XVtwXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVkMmZiXHVkMmZjXHVkMmZkXHVkMmZlXHVkMmZmXHVkMzAyXHVkMzA0XHVkMzA2XHVkMzA3XHVkMzA4XHVkMzA5XHVkMzBhXHVkMzBiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3XHVkMzE4XHVkMzE5XHVkMzFhXHVkMzFiXHVkMzFlXHVkMzIyXHVk'@;
put 'MzIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxXHVkMzMyXHVkMzMzXHVkMzM0XHVkMzM1XHVkMzM2XHVkMzM3XHVkMzNhXHVkMzNlXHVkMzNmXHVkMzQwXHVkMzQxXHVkMzQy'@;
put 'XHVkMzQzXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzRhXHVkMzRiXHVkMzRjXHVkMzRkXHVkMzRlXHVkMzRmXHVkMzUwXHVkMzUxXHVkMzUyXHVkMzUzXHVkMzU0XHVkMzU1XHVkMzU2XHVkMzU3XHVkMzU4XHVkMzU5XHVk'@;
put 'MzVhXHVkMzViXHVkMzVjXHVkMzVkXHVkMzVlXHVkMzVmXHVkMzYwXHVkMzYxXHVkMzYyXHVkMzYzXHVkMzY0XHVkMzY1XHVkMzY2XHVkMzY3XHVkMzY4XHVkMzY5XHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0'@;
put 'XHViZThjXHViZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHVi'@;
put 'ZjQxXHViZjQ0XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEw'@;
put 'XHVjMGExXHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0XHVm'@;
put 'ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg3XVtwXV09NDc4NzIrcCxiWzQ3ODcyK3BdPV9bMTg3XVtwXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzZhXHVkMzZiXHVkMzZjXHVkMzZkXHVkMzZlXHVkMzZmXHVkMzcwXHVkMzcxXHVkMzcyXHVkMzczXHVkMzc0XHVkMzc1XHVkMzc2XHVkMzc3XHVkMzc4XHVkMzc5XHVkMzdhXHVkMzdiXHVkMzdlXHVkMzdmXHVkMzgxXHVkMzgyXHVkMzgzXHVk'@;
put 'Mzg1XHVkMzg2XHVkMzg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzg4XHVkMzg5XHVkMzhhXHVkMzhiXHVkMzhlXHVkMzkyXHVkMzkzXHVkMzk0XHVkMzk1XHVkMzk2XHVkMzk3XHVkMzlhXHVkMzliXHVkMzlkXHVkMzllXHVkMzlmXHVkM2ExXHVkM2EyXHVkM2Ez'@;
put 'XHVkM2E0XHVkM2E1XHVkM2E2XHVkM2E3XHVkM2FhXHVkM2FjXHVkM2FlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2FmXHVkM2IwXHVkM2IxXHVkM2IyXHVkM2IzXHVkM2I1XHVkM2I2XHVkM2I3XHVkM2I5XHVkM2JhXHVkM2JiXHVkM2JkXHVkM2JlXHVkM2JmXHVk'@;
put 'M2MwXHVkM2MxXHVkM2MyXHVkM2MzXHVkM2M2XHVkM2M3XHVkM2NhXHVkM2NiXHVkM2NjXHVkM2NkXHVkM2NlXHVkM2NmXHVkM2QxXHVkM2QyXHVkM2QzXHVkM2Q0XHVkM2Q1XHVkM2Q2XHVjMGU1XHVjMGU4XHVjMGVjXHVjMGY0XHVjMGY1XHVjMGY3XHVjMGY5XHVjMTAwXHVjMTA0XHVjMTA4'@;
put 'XHVjMTEwXHVjMTE1XHVjMTFjXHVjMTFkXHVjMTFlXHVjMTFmXHVjMTIwXHVjMTIzXHVjMTI0XHVjMTI2XHVjMTI3XHVjMTJjXHVjMTJkXHVjMTJmXHVjMTMwXHVjMTMxXHVjMTM2XHVjMTM4XHVjMTM5XHVjMTNjXHVjMTQwXHVjMTQ4XHVjMTQ5XHVjMTRiXHVjMTRjXHVjMTRkXHVjMTU0XHVj'@;
put 'MTU1XHVjMTU4XHVjMTVjXHVjMTY0XHVjMTY1XHVjMTY3XHVjMTY4XHVjMTY5XHVjMTcwXHVjMTc0XHVjMTc4XHVjMTg1XHVjMThjXHVjMThkXHVjMThlXHVjMTkwXHVjMTk0XHVjMTk2XHVjMTljXHVjMTlkXHVjMTlmXHVjMWExXHVjMWE1XHVjMWE4XHVjMWE5XHVjMWFjXHVjMWIwXHVjMWJk'@;
put 'XHVjMWM0XHVjMWM4XHVjMWNjXHVjMWQ0XHVjMWQ3XHVjMWQ4XHVjMWUwXHVjMWU0XHVjMWU4XHVjMWYwXHVjMWYxXHVjMWYzXHVjMWZjXHVjMWZkXHVjMjAwXHVjMjA0XHVjMjBjXHVjMjBkXHVjMjBmXHVjMjExXHVjMjE4XHVjMjE5XHVjMjFjXHVjMjFmXHVjMjIwXHVjMjI4XHVjMjI5XHVj'@;
put 'MjJiXHVjMjJkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg4XVtwXV09NDgxMjgrcCxiWzQ4MTI4K3BdPV9bMTg4XVtwXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Q3XHVkM2Q5XHVkM2RhXHVkM2RiXHVkM2RjXHVkM2RkXHVkM2RlXHVkM2RmXHVkM2UwXHVkM2UyXHVkM2U0XHVkM2U1XHVkM2U2XHVkM2U3XHVkM2U4XHVkM2U5XHVkM2VhXHVkM2ViXHVkM2VlXHVkM2VmXHVkM2YxXHVk'@;
put 'M2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2ZiXHVkM2ZlXHVkNDAwXHVkNDAyXHVkNDAzXHVkNDA0XHVkNDA1XHVkNDA2XHVkNDA3XHVkNDA5XHVkNDBhXHVkNDBiXHVkNDBjXHVkNDBk'@;
put 'XHVkNDBlXHVkNDBmXHVkNDEwXHVkNDExXHVkNDEyXHVkNDEzXHVkNDE0XHVkNDE1XHVkNDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDE3XHVkNDE4XHVkNDE5XHVkNDFhXHVkNDFiXHVkNDFjXHVkNDFlXHVkNDFmXHVkNDIwXHVkNDIxXHVkNDIyXHVkNDIzXHVk'@;
put 'NDI0XHVkNDI1XHVkNDI2XHVkNDI3XHVkNDI4XHVkNDI5XHVkNDJhXHVkNDJiXHVkNDJjXHVkNDJkXHVkNDJlXHVkNDJmXHVkNDMwXHVkNDMxXHVkNDMyXHVkNDMzXHVkNDM0XHVkNDM1XHVkNDM2XHVkNDM3XHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0'@;
put 'XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVjMjk4XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVj'@;
put 'MmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAwXHVjMzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5'@;
put 'XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVjM2Q4XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVj'@;
put 'NDEwXHVjNDI0XHVjNDJjXHVjNDMwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg5XVtwXV09NDgzODQrcCxiWzQ4Mzg0K3BdPV9bMTg5XVtwXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDM4XHVkNDM5XHVkNDNhXHVkNDNiXHVkNDNjXHVkNDNkXHVkNDNlXHVkNDNmXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1XHVkNDQ2XHVkNDQ3XHVkNDQ4XHVkNDQ5XHVkNDRhXHVkNDRiXHVkNDRjXHVk'@;
put 'NDRkXHVkNDRlXHVkNDRmXHVkNDUwXHVkNDUxXHVkNDUyXHVkNDUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDU0XHVkNDU1XHVkNDU2XHVkNDU3XHVkNDU4XHVkNDU5XHVkNDVhXHVkNDViXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1'@;
put 'XHVkNDY2XHVkNDY3XHVkNDY4XHVkNDY5XHVkNDZhXHVkNDZiXHVkNDZjXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDczXHVkNDc0XHVkNDc1XHVkNDc2XHVkNDc3XHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVk'@;
put 'NDgzXHVkNDg0XHVkNDg1XHVkNDg2XHVkNDg3XHVkNDhhXHVkNDhjXHVkNDhlXHVkNDhmXHVkNDkwXHVkNDkxXHVkNDkyXHVkNDkzXHVkNDk1XHVkNDk2XHVkNDk3XHVkNDk4XHVkNDk5XHVkNDlhXHVkNDliXHVkNDljXHVkNDlkXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1'@;
put 'XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVj'@;
put 'NTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0'@;
put 'XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0XHVjNWM1XHVjNWM2XHVj'@;
put 'NWM3XHVjNWM4XHVjNWM5XHVjNWNhXHVjNWNjXHVjNWNlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkwXVtwXV09NDg2NDArcCxiWzQ4NjQwK3BdPV9bMTkwXVtwXSk7Zm9yKF9bMTkxXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDllXHVkNDlmXHVkNGEwXHVkNGExXHVkNGEyXHVkNGEzXHVkNGE0XHVkNGE1XHVkNGE2XHVkNGE3XHVkNGE4XHVkNGFhXHVkNGFiXHVkNGFjXHVkNGFkXHVkNGFlXHVkNGFmXHVk'@;
put 'NGIwXHVkNGIxXHVkNGIyXHVkNGIzXHVkNGI0XHVkNGI1XHVkNGI2XHVkNGI3XHVkNGI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGI5XHVkNGJhXHVkNGJiXHVkNGJjXHVkNGJkXHVkNGJlXHVkNGJmXHVkNGMwXHVkNGMxXHVkNGMyXHVkNGMzXHVkNGM0XHVkNGM1'@;
put 'XHVkNGM2XHVkNGM3XHVkNGM4XHVkNGM5XHVkNGNhXHVkNGNiXHVkNGNkXHVkNGNlXHVkNGNmXHVkNGQxXHVkNGQyXHVkNGQzXHVkNGQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGQ2XHVkNGQ3XHVkNGQ4XHVkNGQ5XHVkNGRhXHVkNGRiXHVkNGRkXHVkNGRlXHVk'@;
put 'NGUwXHVkNGUxXHVkNGUyXHVkNGUzXHVkNGU0XHVkNGU1XHVkNGU2XHVkNGU3XHVkNGU5XHVkNGVhXHVkNGViXHVkNGVkXHVkNGVlXHVkNGVmXHVkNGYxXHVkNGYyXHVkNGYzXHVkNGY0XHVkNGY1XHVkNGY2XHVkNGY3XHVkNGY5XHVkNGZhXHVkNGZjXHVjNWQwXHVjNWQxXHVjNWQ0XHVjNWQ4'@;
put 'XHVjNWUwXHVjNWUxXHVjNWUzXHVjNWU1XHVjNWVjXHVjNWVkXHVjNWVlXHVjNWYwXHVjNWY0XHVjNWY2XHVjNWY3XHVjNWZjXHVjNWZkXHVjNWZlXHVjNWZmXHVjNjAwXHVjNjAxXHVjNjA1XHVjNjA2XHVjNjA3XHVjNjA4XHVjNjBjXHVjNjEwXHVjNjE4XHVjNjE5XHVjNjFiXHVjNjFjXHVj'@;
put 'NjI0XHVjNjI1XHVjNjI4XHVjNjJjXHVjNjJkXHVjNjJlXHVjNjMwXHVjNjMzXHVjNjM0XHVjNjM1XHVjNjM3XHVjNjM5XHVjNjNiXHVjNjQwXHVjNjQxXHVjNjQ0XHVjNjQ4XHVjNjUwXHVjNjUxXHVjNjUzXHVjNjU0XHVjNjU1XHVjNjVjXHVjNjVkXHVjNjYwXHVjNjZjXHVjNjZmXHVjNjcx'@;
put 'XHVjNjc4XHVjNjc5XHVjNjdjXHVjNjgwXHVjNjg4XHVjNjg5XHVjNjhiXHVjNjhkXHVjNjk0XHVjNjk1XHVjNjk4XHVjNjljXHVjNmE0XHVjNmE1XHVjNmE3XHVjNmE5XHVjNmIwXHVjNmIxXHVjNmI0XHVjNmI4XHVjNmI5XHVjNmJhXHVjNmMwXHVjNmMxXHVjNmMzXHVjNmM1XHVjNmNjXHVj'@;
put 'NmNkXHVjNmQwXHVjNmQ0XHVjNmRjXHVjNmRkXHVjNmUwXHVjNmUxXHVjNmU4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkxXVtwXV09NDg4OTYrcCxiWzQ4ODk2K3BdPV9bMTkxXVtwXSk7'@;
put 'Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGZlXHVkNGZmXHVkNTAwXHVkNTAxXHVkNTAyXHVkNTAzXHVkNTA1XHVkNTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVkNTBkXHVkNTBlXHVkNTBmXHVk'@;
put 'NTEwXHVkNTExXHVkNTEyXHVkNTEzXHVkNTE2XHVkNTE4XHVkNTE5XHVkNTFhXHVkNTFiXHVkNTFjXHVkNTFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTFlXHVkNTFmXHVkNTIwXHVkNTIxXHVkNTIyXHVkNTIzXHVkNTI0XHVkNTI1XHVkNTI2XHVkNTI3XHVkNTI4'@;
put 'XHVkNTI5XHVkNTJhXHVkNTJiXHVkNTJjXHVkNTJkXHVkNTJlXHVkNTJmXHVkNTMwXHVkNTMxXHVkNTMyXHVkNTMzXHVkNTM0XHVkNTM1XHVkNTM2XHVkNTM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNmXHVk'@;
put 'NTQxXHVkNTQyXHVkNTQzXHVkNTQ1XHVkNTQ2XHVkNTQ3XHVkNTQ4XHVkNTQ5XHVkNTRhXHVkNTRiXHVkNTRlXHVkNTUwXHVkNTUyXHVkNTUzXHVkNTU0XHVkNTU1XHVkNTU2XHVkNTU3XHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVj'@;
put 'XHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVjNzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVj'@;
put 'NzRkXHVjNzRmXHVjNzUxXHVjNzUyXHVjNzUzXHVjNzU0XHVjNzU1XHVjNzU2XHVjNzU3XHVjNzU4XHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVjNzhl'@;
put 'XHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVjN2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVjN2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2QwXHVj'@;
put 'N2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkyXVtwXV09NDkxNTIrcCxiWzQ5MTUyK3Bd'@;
put 'PV9bMTkyXVtwXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlXHVkNTZmXHVkNTcwXHVkNTcxXHVkNTcyXHVkNTczXHVkNTc2XHVkNTc3XHVk'@;
put 'NTc5XHVkNTdhXHVkNTdiXHVkNTdkXHVkNTdlXHVkNTdmXHVkNTgwXHVkNTgxXHVkNTgyXHVkNTgzXHVkNTg2XHVkNThhXHVkNThiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxXHVkNTkyXHVkNTkzXHVkNTk0XHVkNTk1'@;
put 'XHVkNTk2XHVkNTk3XHVkNTk4XHVkNTk5XHVkNTlhXHVkNTliXHVkNTljXHVkNTlkXHVkNTllXHVkNTlmXHVkNWEwXHVkNWExXHVkNWEyXHVkNWEzXHVkNWE0XHVkNWE2XHVkNWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWE4XHVkNWE5XHVkNWFhXHVkNWFiXHVk'@;
put 'NWFjXHVkNWFkXHVkNWFlXHVkNWFmXHVkNWIwXHVkNWIxXHVkNWIyXHVkNWIzXHVkNWI0XHVkNWI1XHVkNWI2XHVkNWI3XHVkNWI4XHVkNWI5XHVkNWJhXHVkNWJiXHVkNWJjXHVkNWJkXHVkNWJlXHVkNWJmXHVkNWMwXHVkNWMxXHVkNWMyXHVkNWMzXHVkNWM0XHVkNWM1XHVkNWM2XHVkNWM3'@;
put 'XHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVjODc4XHVjODdhXHVjODgwXHVj'@;
put 'ODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0XHVjOGY1XHVjOGZjXHVjOGZk'@;
put 'XHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVjOThjXHVjOTkwXHVjOTk4XHVj'@;
put 'OTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkzXVtwXV09NDk0MDgr'@;
put 'cCxiWzQ5NDA4K3BdPV9bMTkzXVtwXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWNhXHVkNWNiXHVkNWNkXHVkNWNlXHVkNWNmXHVkNWQxXHVkNWQzXHVkNWQ0XHVkNWQ1XHVkNWQ2XHVkNWQ3XHVk'@;
put 'NWRhXHVkNWRjXHVkNWRlXHVkNWRmXHVkNWUwXHVkNWUxXHVkNWUyXHVkNWUzXHVkNWU2XHVkNWU3XHVkNWU5XHVkNWVhXHVkNWViXHVkNWVkXHVkNWVlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWVmXHVkNWYwXHVkNWYxXHVkNWYyXHVkNWYzXHVkNWY2XHVkNWY4'@;
put 'XHVkNWZhXHVkNWZiXHVkNWZjXHVkNWZkXHVkNWZlXHVkNWZmXHVkNjAyXHVkNjAzXHVkNjA1XHVkNjA2XHVkNjA3XHVkNjA5XHVkNjBhXHVkNjBiXHVkNjBjXHVkNjBkXHVkNjBlXHVkNjBmXHVkNjEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjE2XHVkNjE3XHVk'@;
put 'NjE4XHVkNjE5XHVkNjFhXHVkNjFiXHVkNjFkXHVkNjFlXHVkNjFmXHVkNjIxXHVkNjIyXHVkNjIzXHVkNjI1XHVkNjI2XHVkNjI3XHVkNjI4XHVkNjI5XHVkNjJhXHVkNjJiXHVkNjJjXHVkNjJlXHVkNjJmXHVkNjMwXHVkNjMxXHVkNjMyXHVkNjMzXHVkNjM0XHVkNjM1XHVkNjM2XHVkNjM3'@;
put 'XHVkNjNhXHVkNjNiXHVjOWQ1XHVjOWQ2XHVjOWQ5XHVjOWRhXHVjOWRjXHVjOWRkXHVjOWUwXHVjOWUyXHVjOWU0XHVjOWU3XHVjOWVjXHVjOWVkXHVjOWVmXHVjOWYwXHVjOWYxXHVjOWY4XHVjOWY5XHVjOWZjXHVjYTAwXHVjYTA4XHVjYTA5XHVjYTBiXHVjYTBjXHVjYTBkXHVjYTE0XHVj'@;
put 'YTE4XHVjYTI5XHVjYTRjXHVjYTRkXHVjYTUwXHVjYTU0XHVjYTVjXHVjYTVkXHVjYTVmXHVjYTYwXHVjYTYxXHVjYTY4XHVjYTdkXHVjYTg0XHVjYTk4XHVjYWJjXHVjYWJkXHVjYWMwXHVjYWM0XHVjYWNjXHVjYWNkXHVjYWNmXHVjYWQxXHVjYWQzXHVjYWQ4XHVjYWQ5XHVjYWUwXHVjYWVj'@;
put 'XHVjYWY0XHVjYjA4XHVjYjEwXHVjYjE0XHVjYjE4XHVjYjIwXHVjYjIxXHVjYjQxXHVjYjQ4XHVjYjQ5XHVjYjRjXHVjYjUwXHVjYjU4XHVjYjU5XHVjYjVkXHVjYjY0XHVjYjc4XHVjYjc5XHVjYjljXHVjYmI4XHVjYmQ0XHVjYmU0XHVjYmU3XHVjYmU5XHVjYzBjXHVjYzBkXHVjYzEwXHVj'@;
put 'YzE0XHVjYzFjXHVjYzFkXHVjYzIxXHVjYzIyXHVjYzI3XHVjYzI4XHVjYzI5XHVjYzJjXHVjYzJlXHVjYzMwXHVjYzM4XHVjYzM5XHVjYzNiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk0'@;
put 'XVtwXV09NDk2NjQrcCxiWzQ5NjY0K3BdPV9bMTk0XVtwXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVk'@;
put 'NjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkXHVkNjVlXHVkNjVmXHVkNjYwXHVkNjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjYyXHVkNjYzXHVkNjY0XHVkNjY1XHVkNjY2'@;
put 'XHVkNjY4XHVkNjZhXHVkNjZiXHVkNjZjXHVkNjZkXHVkNjZlXHVkNjZmXHVkNjcyXHVkNjczXHVkNjc1XHVkNjc2XHVkNjc3XHVkNjc4XHVkNjc5XHVkNjdhXHVkNjdiXHVkNjdjXHVkNjdkXHVkNjdlXHVkNjdmXHVkNjgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk'@;
put 'NjgxXHVkNjgyXHVkNjg0XHVkNjg2XHVkNjg3XHVkNjg4XHVkNjg5XHVkNjhhXHVkNjhiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1XHVkNjk2XHVkNjk3XHVkNjk4XHVkNjk5XHVkNjlhXHVkNjliXHVkNjljXHVkNjllXHVkNmEwXHVkNmEyXHVkNmEzXHVkNmE0XHVkNmE1'@;
put 'XHVkNmE2XHVkNmE3XHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVjYzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVjYzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVjY2E4XHVj'@;
put 'Y2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBjXHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0XHVjZDI4'@;
put 'XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVjZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVjZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVjZGY4XHVj'@;
put 'ZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMzXHVjZTM1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTVdW3BdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihEW19bMTk1XVtwXV09NDk5MjArcCxiWzQ5OTIwK3BdPV9bMTk1XVtwXSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxXHVkNmIyXHVkNmIzXHVk'@;
put 'NmI0XHVkNmI1XHVkNmI2XHVkNmI3XHVkNmI4XHVkNmJhXHVkNmJjXHVkNmJkXHVkNmJlXHVkNmJmXHVkNmMwXHVkNmMxXHVkNmMyXHVkNmMzXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmNkXHVkNmNlXHVkNmNm'@;
put 'XHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhXHVkNmRiXHVkNmRjXHVkNmRkXHVkNmRlXHVkNmRmXHVkNmUxXHVkNmUyXHVkNmUzXHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5XHVkNmVhXHVkNmViXHVkNmVjXHVkNmVkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2XHVkNmY3XHVkNmY4XHVkNmY5XHVkNmZhXHVkNmZiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1XHVkNzA2XHVkNzA3XHVkNzA4XHVkNzA5XHVkNzBhXHVkNzBiXHVkNzBjXHVkNzBk'@;
put 'XHVkNzBlXHVkNzBmXHVkNzEwXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVj'@;
put 'ZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFj'@;
put 'XHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVj'@;
put 'ZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVkMDM1XHVkMDM4XHVkMDNjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTZdW3Bd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihEW19bMTk2XVtwXV09NTAxNzYrcCxiWzUwMTc2K3BdPV9bMTk2XVtwXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzE1XHVkNzE2XHVkNzE3XHVkNzFhXHVkNzFiXHVk'@;
put 'NzFkXHVkNzFlXHVkNzFmXHVkNzIxXHVkNzIyXHVkNzIzXHVkNzI0XHVkNzI1XHVkNzI2XHVkNzI3XHVkNzJhXHVkNzJjXHVkNzJlXHVkNzJmXHVkNzMwXHVkNzMxXHVkNzMyXHVkNzMzXHVkNzM2XHVkNzM3XHVkNzM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzNh'@;
put 'XHVkNzNiXHVkNzNkXHVkNzNlXHVkNzNmXHVkNzQwXHVkNzQxXHVkNzQyXHVkNzQzXHVkNzQ1XHVkNzQ2XHVkNzQ4XHVkNzRhXHVkNzRiXHVkNzRjXHVkNzRkXHVkNzRlXHVkNzRmXHVkNzUyXHVkNzUzXHVkNzU1XHVkNzVhXHVkNzViXHVkNzVjXHVkNzVkXHVkNzVlXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzVmXHVkNzYyXHVkNzY0XHVkNzY2XHVkNzY3XHVkNzY4XHVkNzZhXHVkNzZiXHVkNzZkXHVkNzZlXHVkNzZmXHVkNzcxXHVkNzcyXHVkNzczXHVkNzc1XHVkNzc2XHVkNzc3XHVkNzc4XHVkNzc5XHVkNzdhXHVkNzdiXHVkNzdlXHVkNzdmXHVkNzgw'@;
put 'XHVkNzgyXHVkNzgzXHVkNzg0XHVkNzg1XHVkNzg2XHVkNzg3XHVkNzhhXHVkNzhiXHVkMDQ0XHVkMDQ1XHVkMDQ3XHVkMDQ5XHVkMDUwXHVkMDU0XHVkMDU4XHVkMDYwXHVkMDZjXHVkMDZkXHVkMDcwXHVkMDc0XHVkMDdjXHVkMDdkXHVkMDgxXHVkMGE0XHVkMGE1XHVkMGE4XHVkMGFjXHVk'@;
put 'MGI0XHVkMGI1XHVkMGI3XHVkMGI5XHVkMGMwXHVkMGMxXHVkMGM0XHVkMGM4XHVkMGM5XHVkMGQwXHVkMGQxXHVkMGQzXHVkMGQ0XHVkMGQ1XHVkMGRjXHVkMGRkXHVkMGUwXHVkMGU0XHVkMGVjXHVkMGVkXHVkMGVmXHVkMGYwXHVkMGYxXHVkMGY4XHVkMTBkXHVkMTMwXHVkMTMxXHVkMTM0'@;
put 'XHVkMTM4XHVkMTNhXHVkMTQwXHVkMTQxXHVkMTQzXHVkMTQ0XHVkMTQ1XHVkMTRjXHVkMTRkXHVkMTUwXHVkMTU0XHVkMTVjXHVkMTVkXHVkMTVmXHVkMTYxXHVkMTY4XHVkMTZjXHVkMTdjXHVkMTg0XHVkMTg4XHVkMWEwXHVkMWExXHVkMWE0XHVkMWE4XHVkMWIwXHVkMWIxXHVkMWIzXHVk'@;
put 'MWI1XHVkMWJhXHVkMWJjXHVkMWMwXHVkMWQ4XHVkMWY0XHVkMWY4XHVkMjA3XHVkMjA5XHVkMjEwXHVkMjJjXHVkMjJkXHVkMjMwXHVkMjM0XHVkMjNjXHVkMjNkXHVkMjNmXHVkMjQxXHVkMjQ4XHVkMjVjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk3XS5sZW5ndGg7KytwKTY1NTMz'@;
put 'IT09X1sxOTddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk3XVtwXV09NTA0MzIrcCxiWzUwNDMyK3BdPV9bMTk3XVtwXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzhkXHVkNzhlXHVkNzhmXHVk'@;
put 'NzkxXHVkNzkyXHVkNzkzXHVkNzk0XHVkNzk1XHVkNzk2XHVkNzk3XHVkNzlhXHVkNzljXHVkNzllXHVkNzlmXHVkN2EwXHVkN2ExXHVkN2EyXHVkN2EzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVk'@;
put 'MmMwXHVkMmMyXHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIw'@;
put 'XHVkMzIxXHVkMzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVk'@;
put 'M2E5XHVkM2FiXHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk4XS5sZW5n'@;
put 'dGg7KytwKTY1NTMzIT09X1sxOThdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk4XVtwXV09NTA2ODgrcCxiWzUwNjg4K3BdPV9bMTk4XVtwXSk7Zm9yKF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVk'@;
put 'NDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRj'@;
put 'XHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVk'@;
put 'NWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah'@;
put 'PV9bMTk5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk5XVtwXV09NTA5NDQrcCxiWzUwOTQ0K3BdPV9bMTk5XVtwXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjI0XHVkNjJkXHVkNjM4XHVkNjM5XHVkNjNjXHVkNjQwXHVkNjQ1XHVkNjQ4XHVkNjQ5XHVkNjRiXHVkNjRkXHVkNjUxXHVkNjU0XHVk'@;
put 'NjU1XHVkNjU4XHVkNjVjXHVkNjY3XHVkNjY5XHVkNjcwXHVkNjcxXHVkNjc0XHVkNjgzXHVkNjg1XHVkNjhjXHVkNjhkXHVkNjkwXHVkNjk0XHVkNjlkXHVkNjlmXHVkNmExXHVkNmE4XHVkNmFjXHVkNmIwXHVkNmI5XHVkNmJiXHVkNmM0XHVkNmM1XHVkNmM4XHVkNmNjXHVkNmQxXHVkNmQ0'@;
put 'XHVkNmQ3XHVkNmQ5XHVkNmUwXHVkNmU0XHVkNmU4XHVkNmYwXHVkNmY1XHVkNmZjXHVkNmZkXHVkNzAwXHVkNzA0XHVkNzExXHVkNzE4XHVkNzE5XHVkNzFjXHVkNzIwXHVkNzI4XHVkNzI5XHVkNzJiXHVkNzJkXHVkNzM0XHVkNzM1XHVkNzM4XHVkNzNjXHVkNzQ0XHVkNzQ3XHVkNzQ5XHVk'@;
put 'NzUwXHVkNzUxXHVkNzU0XHVkNzU2XHVkNzU3XHVkNzU4XHVkNzU5XHVkNzYwXHVkNzYxXHVkNzYzXHVkNzY1XHVkNzY5XHVkNzZjXHVkNzcwXHVkNzc0XHVkNzdjXHVkNzdkXHVkNzgxXHVkNzg4XHVkNzg5XHVkNzhjXHVkNzkwXHVkNzk4XHVkNzk5XHVkNzliXHVkNzlkXHVmZmZkIi5zcGxp'@;
put 'dCgiIikscD0wO3AhPV9bMjAwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAwXVtwXV09NTEyMDArcCxiWzUxMjAwK3BdPV9bMjAwXVtwXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2VmXHU1NDc1XHU1NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2'@;
put 'Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNmXHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2MTY0XHU2YmJjXHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQy'@;
put 'XHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZlXHU4MjcxXHU4YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2'@;
put 'NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIxXHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3N2IwXHU3ZDNhXHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1'@;
put 'XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAyXVtwXV09NTE3MTIrcCxiWzUxNzEyK3BdPV9bMjAyXVtwXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1'@;
put 'Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNl'@;
put 'XHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2'@;
put 'NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1Mjhk'@;
put 'XHU1MjkyXHU2YWEyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAzXVtwXV09NTE5NjgrcCxiWzUxOTY4K3BdPV9bMjAzXVtwXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2JjXHU5MjEwXHU5ZWQ0XHU1MmFiXHU2MDJmXHU4ZmYyXHU1MDQ4XHU2'@;
put 'MWE5XHU2M2VkXHU2NGNhXHU2ODNjXHU2YTg0XHU2ZmMwXHU4MTg4XHU4OWExXHU5Njk0XHU1ODA1XHU3MjdkXHU3MmFjXHU3NTA0XHU3ZDc5XHU3ZTZkXHU4MGE5XHU4OThiXHU4Yjc0XHU5MDYzXHU5ZDUxXHU2Mjg5XHU2YzdhXHU2ZjU0XHU3ZDUwXHU3ZjNhXHU4YTIzXHU1MTdjXHU2MTRh'@;
put 'XHU3YjlkXHU4YjE5XHU5MjU3XHU5MzhjXHU0ZWFjXHU0ZmQzXHU1MDFlXHU1MGJlXHU1MTA2XHU1MmMxXHU1MmNkXHU1MzdmXHU1NzcwXHU1ODgzXHU1ZTlhXHU1ZjkxXHU2MTc2XHU2MWFjXHU2NGNlXHU2NTZjXHU2NjZmXHU2NmJiXHU2NmY0XHU2ODk3XHU2ZDg3XHU3MDg1XHU3MGYxXHU3'@;
put 'NDlmXHU3NGE1XHU3NGNhXHU3NWQ5XHU3ODZjXHU3OGVjXHU3YWRmXHU3YWY2XHU3ZDQ1XHU3ZDkzXHU4MDE1XHU4MDNmXHU4MTFiXHU4Mzk2XHU4YjY2XHU4ZjE1XHU5MDE1XHU5M2UxXHU5ODAzXHU5ODM4XHU5YTVhXHU5YmU4XHU0ZmMyXHU1NTUzXHU1ODNhXHU1OTUxXHU1YjYzXHU1YzQ2'@;
put 'XHU2MGI4XHU2MjEyXHU2ODQyXHU2OGIwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA0XVtwXV09NTIyMjQrcCxiWzUyMjI0K3BdPV9bMjA0XVtwXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3'@;
put 'YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQxXHU1YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3Njkw'@;
put 'XHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4ZjljXHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1'@;
put 'NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZjXHU1MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2Ey'@;
put 'XHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA1XVtwXV09NTI0ODArcCxiWzUyNDgwK3BdPV9bMjA1XVtwXSk7Zm9yKF9bMjA2'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWQxXHU4M2QzXHU4YTg3XHU4'@;
put 'YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVk'@;
put 'XHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1'@;
put 'YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1'@;
put 'XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA2XVtwXV09NTI3MzYrcCxiWzUyNzM2K3BdPV9bMjA2XVtw'@;
put 'XSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzQwXHU1'@;
put 'M2UzXHU1M2U1XHU1NDhlXHU1NjE0XHU1Nzc1XHU1N2EyXHU1YmM3XHU1ZDg3XHU1ZWQwXHU2MWZjXHU2MmQ4XHU2NTUxXHU2N2I4XHU2N2U5XHU2OWNiXHU2YjUwXHU2YmM2XHU2YmVjXHU2YzQyXHU2ZTlkXHU3MDc4XHU3MmQ3XHU3Mzk2XHU3NDAzXHU3N2JmXHU3N2U5XHU3YTc2XHU3ZDdm'@;
put 'XHU4MDA5XHU4MWZjXHU4MjA1XHU4MjBhXHU4MmRmXHU4ODYyXHU4YjMzXHU4Y2ZjXHU4ZWMwXHU5MDExXHU5MGIxXHU5MjY0XHU5MmI2XHU5OWQyXHU5YTQ1XHU5Y2U5XHU5ZGQ3XHU5ZjljXHU1NzBiXHU1YzQwXHU4M2NhXHU5N2EwXHU5N2FiXHU5ZWI0XHU1NDFiXHU3YTk4XHU3ZmE0XHU4'@;
put 'OGQ5XHU4ZWNkXHU5MGUxXHU1ODAwXHU1YzQ4XHU2Mzk4XHU3YTlmXHU1YmFlXHU1ZjEzXHU3YTc5XHU3YWFlXHU4MjhlXHU4ZWFjXHU1MDI2XHU1MjM4XHU1MmY4XHU1Mzc3XHU1NzA4XHU2MmYzXHU2MzcyXHU2YjBhXHU2ZGMzXHU3NzM3XHU1M2E1XHU3MzU3XHU4NTY4XHU4ZTc2XHU5NWQ1'@;
put 'XHU2NzNhXHU2YWMzXHU2ZjcwXHU4YTZkXHU4ZWNjXHU5OTRiXHVmOTA2XHU2Njc3XHU2Yjc4XHU4Y2I0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA3XVtwXV09NTI5OTIrcCxiWzUyOTky'@;
put 'K3BdPV9bMjA3XVtwXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRi'@;
put 'XHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRiXHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3'@;
put 'OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2Zj'@;
put 'XHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA4XVtwXV09NTMy'@;
put 'NDgrcCxiWzUzMjQ4K3BdPV9bMjA4XVtwXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1'@;
put 'XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1MTNhXHVmOTBiXHVm'@;
put 'OTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlXHVmOTBmXHVmOTEwXHVmOTExXHVmOTEyXHVmOTEzXHU5MGEzXHVmOTE0XHVmOTE1XHVmOTE2XHVmOTE3XHVmOTE4XHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFjXHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFm'@;
put 'XHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19b'@;
put 'MjA5XVtwXV09NTM1MDQrcCxiWzUzNTA0K3BdPV9bMjA5XVtwXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDBkXHVmOTI2XHVmOTI3XHU4ODcyXHU1NmNhXHU1YTE4XHVmOTI4XHVmOTI5XHVmOTJhXHVmOTJiXHVmOTJjXHU0ZTQzXHVmOTJkXHU1MTY3XHU1OTQ4XHU2N2YwXHU4MDEwXHVmOTJlXHU1OTczXHU1ZTc0XHU2NDlhXHU3OWNhXHU1ZmY1'@;
put 'XHU2MDZjXHU2MmM4XHU2MzdiXHU1YmU3XHU1YmQ3XHU1MmFhXHVmOTJmXHU1OTc0XHU1ZjI5XHU2MDEyXHVmOTMwXHVmOTMxXHVmOTMyXHU3NDU5XHVmOTMzXHVmOTM0XHVmOTM1XHVmOTM2XHVmOTM3XHVmOTM4XHU5OWQxXHVmOTM5XHVmOTNhXHVmOTNiXHVmOTNjXHVmOTNkXHVmOTNlXHVm'@;
put 'OTNmXHVmOTQwXHVmOTQxXHVmOTQyXHVmOTQzXHU2ZmMzXHVmOTQ0XHVmOTQ1XHU4MWJmXHU4ZmIyXHU2MGYxXHVmOTQ2XHVmOTQ3XHU4MTY2XHVmOTQ4XHVmOTQ5XHU1YzNmXHVmOTRhXHVmOTRiXHVmOTRjXHVmOTRkXHVmOTRlXHVmOTRmXHVmOTUwXHVmOTUxXHU1YWU5XHU4YTI1XHU2Nzdi'@;
put 'XHU3ZDEwXHVmOTUyXHVmOTUzXHVmOTU0XHVmOTU1XHVmOTU2XHVmOTU3XHU4MGZkXHVmOTU4XHVmOTU5XHU1YzNjXHU2Y2U1XHU1MzNmXHU2ZWJhXHU1OTFhXHU4MzM2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTBdW3BdLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihEW19bMjEwXVtwXV09NTM3NjArcCxiWzUzNzYwK3BdPV9bMjEwXVtwXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTM5XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJi'@;
put 'XHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1'@;
put 'ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3'@;
put 'XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjExXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTFd'@;
put 'W3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjExXVtwXV09NTQwMTYrcCxiWzU0MDE2K3BdPV9bMjExXVtwXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUz'@;
put 'XHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1'@;
put 'MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZm'@;
put 'XHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEyXS5sZW5ndGg7KytwKTY1'@;
put 'NTMzIT09X1syMTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjEyXVtwXV09NTQyNzIrcCxiWzU0MjcyK3BdPV9bMjEyXVtwXSk7Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjNmXHU4N2JhXHU4OGY4XHU5MDhmXHVmOTVjXHU2ZDFiXHU3MGQ5XHU3M2RlXHU3ZDYxXHU4NDNkXHVmOTVkXHU5MTZhXHU5OWYxXHVmOTVlXHU0ZTgyXHU1Mzc1XHU2YjA0'@;
put 'XHU2YjEyXHU3MDNlXHU3MjFiXHU4NjJkXHU5ZTFlXHU1MjRjXHU4ZmEzXHU1ZDUwXHU2NGU1XHU2NTJjXHU2YjE2XHU2ZmViXHU3YzQzXHU3ZTljXHU4NWNkXHU4OTY0XHU4OWJkXHU2MmM5XHU4MWQ4XHU4ODFmXHU1ZWNhXHU2NzE3XHU2ZDZhXHU3MmZjXHU3NDA1XHU3NDZmXHU4NzgyXHU5'@;
put 'MGRlXHU0Zjg2XHU1ZDBkXHU1ZmEwXHU4NDBhXHU1MWI3XHU2M2EwXHU3NTY1XHU0ZWFlXHU1MDA2XHU1MTY5XHU1MWM5XHU2ODgxXHU2YTExXHU3Y2FlXHU3Y2IxXHU3Y2U3XHU4MjZmXHU4YWQyXHU4ZjFiXHU5MWNmXHU0ZmI2XHU1MTM3XHU1MmY1XHU1NDQyXHU1ZWVjXHU2MTZlXHU2MjNl'@;
put 'XHU2NWM1XHU2YWRhXHU2ZmZlXHU3OTJhXHU4NWRjXHU4ODIzXHU5NWFkXHU5YTYyXHU5YTZhXHU5ZTk3XHU5ZWNlXHU1MjliXHU2NmM2XHU2Yjc3XHU3MDFkXHU3OTJiXHU4ZjYyXHU5NzQyXHU2MTkwXHU2MjAwXHU2NTIzXHU2ZjIzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEzXS5s'@;
put 'ZW5ndGg7KytwKTY1NTMzIT09X1syMTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjEzXVtwXV09NTQ1MjgrcCxiWzU0NTI4K3BdPV9bMjEzXVtwXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5'@;
put 'XHU2NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5'@;
put 'NmI3XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRm'@;
put 'XHU1ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4NGZjXHVmZmZkIi5zcGxpdCgiIikscD0w'@;
put 'O3AhPV9bMjE0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE0XVtwXV09NTQ3ODQrcCxiWzU0Nzg0K3BdPV9bMjE0XVtwXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDdjXHU5YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFl'@;
put 'XHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2'@;
put 'MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYy'@;
put 'XHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjXHVmZmZkIi5z'@;
put 'cGxpdCgiIikscD0wO3AhPV9bMjE1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE1XVtwXV09NTUwNDArcCxiWzU1MDQwK3BdPV9bMjE1XVtwXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWNiXHU3YjIwXHU3YzkyXHU2NDY5XHU3NDZhXHU3NWYyXHU3OGJjXHU3OGU4XHU5OWFjXHU5YjU0XHU5ZWJi'@;
put 'XHU1YmRlXHU1ZTU1XHU2ZjIwXHU4MTljXHU4M2FiXHU5MDg4XHU0ZTA3XHU1MzRkXHU1YTI5XHU1ZGQyXHU1ZjRlXHU2MTYyXHU2MzNkXHU2NjY5XHU2NmZjXHU2ZWZmXHU2ZjJiXHU3MDYzXHU3NzllXHU4NDJjXHU4NTEzXHU4ODNiXHU4ZjEzXHU5OTQ1XHU5YzNiXHU1NTFjXHU2MmI5XHU2'@;
put 'NzJiXHU2Y2FiXHU4MzA5XHU4OTZhXHU5NzdhXHU0ZWExXHU1OTg0XHU1ZmQ4XHU1ZmQ5XHU2NzFiXHU3ZGIyXHU3ZjU0XHU4MjkyXHU4MzJiXHU4M2JkXHU4ZjFlXHU5MDk5XHU1N2NiXHU1OWI5XHU1YTkyXHU1YmQwXHU2NjI3XHU2NzlhXHU2ODg1XHU2YmNmXHU3MTY0XHU3Zjc1XHU4Y2I3'@;
put 'XHU4Y2UzXHU5MDgxXHU5YjQ1XHU4MTA4XHU4YzhhXHU5NjRjXHU5YTQwXHU5ZWE1XHU1YjVmXHU2YzEzXHU3MzFiXHU3NmYyXHU3NmRmXHU4NDBjXHU1MWFhXHU4OTkzXHU1MTRkXHU1MTk1XHU1MmM5XHU2OGM5XHU2Yzk0XHU3NzA0XHU3NzIwXHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWI1XHU2'@;
put 'ZWM1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE2XVtwXV09NTUyOTYrcCxiWzU1Mjk2K3BdPV9bMjE2XVtwXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJm'@;
put 'XHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4'@;
put 'MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3'@;
put 'XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1'@;
put 'NDNiXHU1NTRmXHU2NTg3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE3XVtwXV09NTU1NTIrcCxiWzU1NTUyK3BdPV9bMjE3XVtwXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVm'@;
put 'XHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2'@;
put 'NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmVi'@;
put 'XHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1'@;
put 'MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMThdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE4XVtwXV09NTU4MDgrcCxiWzU1ODA4K3BdPV9bMjE4XVtwXSk7Zm9yKF9bMjE5XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjdjXHU4ZGNiXHU5MWIxXHU5MjYyXHU5YWVl'@;
put 'XHU5YjQzXHU1MDIzXHU1MDhkXHU1NzRhXHU1OWE4XHU1YzI4XHU1ZTQ3XHU1Zjc3XHU2MjNmXHU2NTNlXHU2NWI5XHU2NWMxXHU2NjA5XHU2NzhiXHU2OTljXHU2ZWMyXHU3OGM1XHU3ZDIxXHU4MGFhXHU4MTgwXHU4MjJiXHU4MmIzXHU4NGExXHU4NjhjXHU4YTJhXHU4YjE3XHU5MGE2XHU5'@;
put 'NjMyXHU5ZjkwXHU1MDBkXHU0ZmYzXHVmOTYzXHU1N2Y5XHU1Zjk4XHU2MmRjXHU2MzkyXHU2NzZmXHU2ZTQzXHU3MTE5XHU3NmMzXHU4MGNjXHU4MGRhXHU4OGY0XHU4OGY1XHU4OTE5XHU4Y2UwXHU4ZjI5XHU5MTRkXHU5NjZhXHU0ZjJmXHU0ZjcwXHU1ZTFiXHU2N2NmXHU2ODIyXHU3Njdk'@;
put 'XHU3NjdlXHU5YjQ0XHU1ZTYxXHU2YTBhXHU3MTY5XHU3MWQ0XHU3NTZhXHVmOTY0XHU3ZTQxXHU4NTQzXHU4NWU5XHU5OGRjXHU0ZjEwXHU3YjRmXHU3ZjcwXHU5NWE1XHU1MWUxXHU1ZTA2XHU2OGI1XHU2YzNlXHU2YzRlXHU2Y2RiXHU3MmFmXHU3YmM0XHU4MzAzXHU2Y2Q1XHU3NDNhXHU1'@;
put 'MGZiXHU1Mjg4XHU1OGMxXHU2NGQ4XHU2YTk3XHU3NGE3XHU3NjU2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE5XVtwXV09NTYwNjQrcCxiWzU2MDY0K3BdPV9bMjE5XVtwXSk7Zm9yKF9b'@;
put 'MjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGE3XHU4NjE3XHU5NWUy'@;
put 'XHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1MTc1XHU1YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5'@;
put 'OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRjXHU4OTEzXHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJm'@;
put 'XHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2MzY3XHU2OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0'@;
put 'ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIwXVtwXV09NTYzMjArcCxiWzU2MzIwK3BdPV9bMjIw'@;
put 'XVtwXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjVh'@;
put 'XHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5'@;
put 'NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1Zjdm'@;
put 'XHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVm'@;
put 'OTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIxXVtwXV09NTY1NzYrcCxiWzU2'@;
put 'NTc2K3BdPV9bMjIxXVtwXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4MTNlXHU4MWMyXHU4M2YyXHU4NzFhXHU4OGU4XHU4YWI5XHU4YjZjXHU4Y2JiXHU5MTE5XHU5NzVlXHU5OGRiXHU5ZjNiXHU1NmFjXHU1YjJhXHU1ZjZjXHU2NThjXHU2YWIzXHU2YmFmXHU2ZDVjXHU2ZmYxXHU3MDE1XHU3MjVkXHU3M2FkXHU4Y2E3XHU4Y2QzXHU5ODNiXHU2'@;
put 'MTkxXHU2YzM3XHU4MDU4XHU5YTAxXHU0ZTRkXHU0ZThiXHU0ZTliXHU0ZWQ1XHU0ZjNhXHU0ZjNjXHU0ZjdmXHU0ZmRmXHU1MGZmXHU1M2YyXHU1M2Y4XHU1NTA2XHU1NWUzXHU1NmRiXHU1OGViXHU1OTYyXHU1YTExXHU1YmViXHU1YmZhXHU1YzA0XHU1ZGYzXHU1ZTJiXHU1Zjk5XHU2MDFk'@;
put 'XHU2MzY4XHU2NTljXHU2NWFmXHU2N2Y2XHU2N2ZiXHU2OGFkXHU2YjdiXHU2Yzk5XHU2Y2Q3XHU2ZTIzXHU3MDA5XHU3MzQ1XHU3ODAyXHU3OTNlXHU3OTQwXHU3OTYwXHU3OWMxXHU3YmU5XHU3ZDE3XHU3ZDcyXHU4MDg2XHU4MjBkXHU4MzhlXHU4NGQxXHU4NmM3XHU4OGRmXHU4YTUwXHU4'@;
put 'YTVlXHU4YjFkXHU4Y2RjXHU4ZDY2XHU4ZmFkXHU5MGFhXHU5OGZjXHU5OWRmXHU5ZTlkXHU1MjRhXHVmOTY5XHU2NzE0XHVmOTZhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIyXVtwXV09'@;
put 'NTY4MzIrcCxiWzU2ODMyK3BdPV9bMjIyXVtwXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4'@;
put 'ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFmXHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2UwXHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1'@;
put 'XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2'@;
put 'MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYyXHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3ZjcyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjNdW3BdLmNoYXJDb2RlQXQoMCkmJihE'@;
put 'W19bMjIzXVtwXV09NTcwODgrcCxiWzU3MDg4K3BdPV9bMjIzXVtwXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5'@;
put 'MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1'@;
put 'XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2'@;
put 'NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjRdW3BdLmNoYXJD'@;
put 'b2RlQXQoMCkmJihEW19bMjI0XVtwXV09NTczNDQrcCxiWzU3MzQ0K3BdPV9bMjI0XVtwXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDU2XHU4MDcyXHU4MTY1XHU4YWEwXHU5MTkyXHU0ZTE2XHU1MmUyXHU2YjcyXHU2ZDE3XHU3YTA1XHU3YjM5XHU3ZDMwXHVmOTZmXHU4Y2IwXHU1M2VjXHU1NjJmXHU1ODUxXHU1YmI1XHU1YzBmXHU1YzExXHU1'@;
put 'ZGUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJkXHU2OGIzXHU2Y2JjXHU2ZDg4XHU2ZWFmXHU3MDFmXHU3MGE0XHU3MWQyXHU3NTI2XHU3NThmXHU3NThlXHU3NjE5XHU3YjExXHU3YmUwXHU3YzJiXHU3ZDIwXHU3ZDM5XHU4NTJjXHU4NTZkXHU4NjA3XHU4YTM0XHU5MDBkXHU5MDYxXHU5MGI1'@;
put 'XHU5MmI3XHU5N2Y2XHU5YTM3XHU0ZmQ3XHU1YzZjXHU2NzVmXHU2ZDkxXHU3YzlmXHU3ZThjXHU4YjE2XHU4ZDE2XHU5MDFmXHU1YjZiXHU1ZGZkXHU2NDBkXHU4NGMwXHU5MDVjXHU5OGUxXHU3Mzg3XHU1YjhiXHU2MDlhXHU2NzdlXHU2ZGRlXHU4YTFmXHU4YWE2XHU5MDAxXHU5ODBjXHU1'@;
put 'MjM3XHVmOTcwXHU3MDUxXHU3ODhlXHU5Mzk2XHU4ODcwXHU5MWQ3XHU0ZmVlXHU1M2Q3XHU1NWZkXHU1NmRhXHU1NzgyXHU1OGZkXHU1YWMyXHU1Yjg4XHU1Y2FiXHU1Y2MwXHU1ZTI1XHU2MTAxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sy'@;
put 'MjVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI1XVtwXV09NTc2MDArcCxiWzU3NjAwK3BdPV9bMjI1XVtwXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3'@;
put 'OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4'@;
put 'XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3'@;
put 'NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI2XS5sZW5ndGg7Kytw'@;
put 'KTY1NTMzIT09X1syMjZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI2XVtwXV09NTc4NTYrcCxiWzU3ODU2K3BdPV9bMjI2XVtwXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3'@;
put 'ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5'@;
put 'XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3'@;
put 'MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI3'@;
put 'XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI3XVtwXV09NTgxMTIrcCxiWzU4MTEyK3BdPV9bMjI3XVtwXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTcyXHU2ZGYxXHU3MDBiXHU3NTFhXHU4MmFmXHU4YWY2XHU0ZWMwXHU1MzQxXHVmOTczXHU5NmQ5XHU2YzBmXHU0ZTllXHU0ZmM0XHU1MTUyXHU1'@;
put 'NTVlXHU1YTI1XHU1Y2U4XHU2MjExXHU3MjU5XHU4MmJkXHU4M2FhXHU4NmZlXHU4ODU5XHU4YTFkXHU5NjNmXHU5NmM1XHU5OTEzXHU5ZDA5XHU5ZDVkXHU1ODBhXHU1Y2IzXHU1ZGJkXHU1ZTQ0XHU2MGUxXHU2MTE1XHU2M2UxXHU2YTAyXHU2ZTI1XHU5MTAyXHU5MzU0XHU5ODRlXHU5YzEw'@;
put 'XHU5Zjc3XHU1Yjg5XHU1Y2I4XHU2MzA5XHU2NjRmXHU2ODQ4XHU3NzNjXHU5NmMxXHU5NzhkXHU5ODU0XHU5YjlmXHU2NWExXHU4YjAxXHU4ZWNiXHU5NWJjXHU1NTM1XHU1Y2E5XHU1ZGQ2XHU1ZWI1XHU2Njk3XHU3NjRjXHU4M2Y0XHU5NWM3XHU1OGQzXHU2MmJjXHU3MmNlXHU5ZDI4XHU0'@;
put 'ZWYwXHU1OTJlXHU2MDBmXHU2NjNiXHU2YjgzXHU3OWU3XHU5ZDI2XHU1MzkzXHU1NGMwXHU1N2MzXHU1ZDE2XHU2MTFiXHU2NmQ2XHU2ZGFmXHU3ODhkXHU4MjdlXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdjXHU2Mzk2XHU2ZGIyXHU3ZTBhXHU4MTRiXHU5ODRkXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'cD0wO3AhPV9bMjI4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI4XVtwXV09NTgzNjgrcCxiWzU4MzY4K3BdPV9bMjI4XVtwXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNiXHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4'@;
put 'MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAx'@;
put 'XHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2'@;
put 'MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyXHVmZmZk'@;
put 'Ii5zcGxpdCgiIikscD0wO3AhPV9bMjI5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI5XVtwXV09NTg2MjQrcCxiWzU4NjI0K3BdPV9bMjI5XVtwXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4'@;
put 'ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThm'@;
put 'XHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4'@;
put 'ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2'@;
put 'XHU4MmQyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMwXVtwXV09NTg4ODArcCxiWzU4ODgwK3BdPV9bMjMwXVtwXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOWE2XHU5NWJiXHU5YWU1XHU5ZTdkXHU2NmM0XHVmOWE3XHU3MWMxXHU4NDQ5XHVm'@;
put 'OWE4XHVmOWE5XHU1ODRiXHVmOWFhXHVmOWFiXHU1ZGI4XHU1ZjcxXHVmOWFjXHU2NjIwXHU2NjhlXHU2OTc5XHU2OWFlXHU2YzM4XHU2Y2YzXHU2ZTM2XHU2ZjQxXHU2ZmRhXHU3MDFiXHU3MDJmXHU3MTUwXHU3MWRmXHU3MzcwXHVmOWFkXHU3NDViXHVmOWFlXHU3NGQ0XHU3NmM4XHU3YTRl'@;
put 'XHU3ZTkzXHVmOWFmXHVmOWIwXHU4MmYxXHU4YTYwXHU4ZmNlXHVmOWIxXHU5MzQ4XHVmOWIyXHU5NzE5XHVmOWIzXHVmOWI0XHU0ZTQyXHU1MDJhXHVmOWI1XHU1MjA4XHU1M2UxXHU2NmYzXHU2YzZkXHU2ZmNhXHU3MzBhXHU3NzdmXHU3YTYyXHU4MmFlXHU4NWRkXHU4NjAyXHVmOWI2XHU4'@;
put 'OGQ0XHU4YTYzXHU4YjdkXHU4YzZiXHVmOWI3XHU5MmIzXHVmOWI4XHU5NzEzXHU5ODEwXHU0ZTk0XHU0ZjBkXHU0ZmM5XHU1MGIyXHU1MzQ4XHU1NDNlXHU1NDMzXHU1NWRhXHU1ODYyXHU1OGJhXHU1OTY3XHU1YTFiXHU1YmU0XHU2MDlmXHVmOWI5XHU2MWNhXHU2NTU2XHU2NWZmXHU2NjY0'@;
put 'XHU2OGE3XHU2YzVhXHU2ZmIzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMxXVtwXV09NTkxMzYrcCxiWzU5MTM2K3BdPV9bMjMxXVtwXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5'@;
put 'YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1XHU2NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1'@;
put 'XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3ZmViXHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1'@;
put 'MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJkXHU1OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJm'@;
put 'XHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMyXVtwXV09NTkzOTIrcCxiWzU5MzkyK3BdPV9bMjMyXVtwXSk7Zm9yKF9bMjMzXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4'@;
put 'MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3'@;
put 'XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3'@;
put 'NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1'@;
put 'XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMzXVtwXV09NTk2NDgrcCxiWzU5NjQ4K3BdPV9bMjMzXVtwXSk7Zm9y'@;
put 'KF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDRiXHU5Njk1XHU5'@;
put 'NmYyXHU5N2ZiXHU4NTFhXHU5YjMxXHU0ZTkwXHU3MThhXHU5NmM0XHU1MTQzXHU1MzlmXHU1NGUxXHU1NzEzXHU1NzEyXHU1N2EzXHU1YTliXHU1YWM0XHU1YmMzXHU2MDI4XHU2MTNmXHU2M2Y0XHU2Yzg1XHU2ZDM5XHU2ZTcyXHU2ZTkwXHU3MjMwXHU3MzNmXHU3NDU3XHU4MmQxXHU4ODgx'@;
put 'XHU4ZjQ1XHU5MDYwXHVmOWM2XHU5NjYyXHU5ODU4XHU5ZDFiXHU2NzA4XHU4ZDhhXHU5MjVlXHU0ZjRkXHU1MDQ5XHU1MGRlXHU1MzcxXHU1NzBkXHU1OWQ0XHU1YTAxXHU1YzA5XHU2MTcwXHU2NjkwXHU2ZTJkXHU3MjMyXHU3NDRiXHU3ZGVmXHU4MGMzXHU4NDBlXHU4NDY2XHU4NTNmXHU4'@;
put 'NzVmXHU4ODViXHU4OTE4XHU4YjAyXHU5MDU1XHU5N2NiXHU5YjRmXHU0ZTczXHU0ZjkxXHU1MTEyXHU1MTZhXHVmOWM3XHU1NTJmXHU1NWE5XHU1YjdhXHU1YmE1XHU1ZTdjXHU1ZTdkXHU1ZWJlXHU2MGEwXHU2MGRmXHU2MTA4XHU2MTA5XHU2M2M0XHU2NTM4XHU2NzA5XHVmOWM4XHU2N2Q0'@;
put 'XHU2N2RhXHVmOWM5XHU2OTYxXHU2OTYyXHU2Y2I5XHU2ZDI3XHVmOWNhXHU2ZTM4XHVmOWNiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM0XVtwXV09NTk5MDQrcCxiWzU5OTA0K3BdPV9b'@;
put 'MjM0XVtwXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2'@;
put 'ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVmOWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5'@;
put 'XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZiXHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVm'@;
put 'OWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVlXHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZm'@;
put 'XHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThmXHU4N2ZiXHU4ODYzXHU4YWJjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM1XVtwXV09NjAxNjArcCxi'@;
put 'WzYwMTYwK3BdPV9bMjM1XVtwXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2'@;
put 'XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1'@;
put 'NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5'@;
put 'XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM2XVtw'@;
put 'XV09NjA0MTYrcCxiWzYwNDE2K3BdPV9bMjM2XVtwXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOWY3XHVmOWY4XHVmOWY5XHU0ZWNkXHU1MjY5XHU1YjU1XHU4MmJmXHU0ZWQ0XHU1MjNhXHU1NGE4XHU1OWM5XHU1OWZmXHU1YjUwXHU1YjU3XHU1YjVjXHU2MDYzXHU2MTQ4XHU2ZWNiXHU3MDk5XHU3MTZlXHU3Mzg2XHU3NGY3XHU3NWI1XHU3OGMx'@;
put 'XHU3ZDJiXHU4MDA1XHU4MWVhXHU4MzI4XHU4NTE3XHU4NWM5XHU4YWVlXHU4Y2M3XHU5NmNjXHU0ZjVjXHU1MmZhXHU1NmJjXHU2NWFiXHU2NjI4XHU3MDdjXHU3MGI4XHU3MjM1XHU3ZGJkXHU4MjhkXHU5MTRjXHU5NmMwXHU5ZDcyXHU1YjcxXHU2OGU3XHU2Yjk4XHU2ZjdhXHU3NmRlXHU1'@;
put 'YzkxXHU2NmFiXHU2ZjViXHU3YmI0XHU3YzJhXHU4ODM2XHU5NmRjXHU0ZTA4XHU0ZWQ3XHU1MzIwXHU1ODM0XHU1OGJiXHU1OGVmXHU1OTZjXHU1YzA3XHU1ZTMzXHU1ZTg0XHU1ZjM1XHU2MzhjXHU2NmIyXHU2NzU2XHU2YTFmXHU2YWEzXHU2YjBjXHU2ZjNmXHU3MjQ2XHVmOWZhXHU3MzUw'@;
put 'XHU3NDhiXHU3YWUwXHU3Y2E3XHU4MTc4XHU4MWRmXHU4MWU3XHU4MzhhXHU4NDZjXHU4NTIzXHU4NTk0XHU4NWNmXHU4OGRkXHU4ZDEzXHU5MWFjXHU5NTc3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzddW3BdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihEW19bMjM3XVtwXV09NjA2NzIrcCxiWzYwNjcyK3BdPV9bMjM3XVtwXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFh'@;
put 'XHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5'@;
put 'ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0Zjdh'@;
put 'XHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2YmJmXHU2YzA4XHU2ZmIxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzhdW3BdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihEW19bMjM4XVtwXV09NjA5MjgrcCxiWzYwOTI4K3BdPV9bMjM4XVtwXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVh'@;
put 'XHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1'@;
put 'NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNh'@;
put 'XHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM5XS5sZW5ndGg7KytwKTY1NTMzIT09'@;
put 'X1syMzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM5XVtwXV09NjExODQrcCxiWzYxMTg0K3BdPV9bMjM5XVtwXSk7Zm9yKF9bMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzVjXHU5ODAyXHU5ZjBlXHU1MjM2XHU1MjkxXHU1NTdjXHU1ODI0XHU1ZTFkXHU1ZjFmXHU2MDhjXHU2M2QwXHU2OGFmXHU2ZmRmXHU3OTZkXHU3YjJjXHU4MWNkXHU4NWJhXHU4OGZk'@;
put 'XHU4YWY4XHU4ZTQ0XHU5MThkXHU5NjY0XHU5NjliXHU5NzNkXHU5ODRjXHU5ZjRhXHU0ZmNlXHU1MTQ2XHU1MWNiXHU1MmE5XHU1NjMyXHU1ZjE0XHU1ZjZiXHU2M2FhXHU2NGNkXHU2NWU5XHU2NjQxXHU2NmZhXHU2NmY5XHU2NzFkXHU2ODlkXHU2OGQ3XHU2OWZkXHU2ZjE1XHU2ZjZlXHU3'@;
put 'MTY3XHU3MWU1XHU3MjJhXHU3NGFhXHU3NzNhXHU3OTU2XHU3OTVhXHU3OWRmXHU3YTIwXHU3YTk1XHU3Yzk3XHU3Y2RmXHU3ZDQ0XHU3ZTcwXHU4MDg3XHU4NWZiXHU4NmE0XHU4YTU0XHU4YWJmXHU4ZDk5XHU4ZTgxXHU5MDIwXHU5MDZkXHU5MWUzXHU5NjNiXHU5NmQ1XHU5Y2U1XHU2NWNm'@;
put 'XHU3YzA3XHU4ZGIzXHU5M2MzXHU1YjU4XHU1YzBhXHU1MzUyXHU2MmQ5XHU3MzFkXHU1MDI3XHU1Yjk3XHU1ZjllXHU2MGIwXHU2MTZiXHU2OGQ1XHU2ZGQ5XHU3NDJlXHU3YTJlXHU3ZDQyXHU3ZDljXHU3ZTMxXHU4MTZiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQwXS5sZW5ndGg7'@;
put 'KytwKTY1NTMzIT09X1syNDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQwXVtwXV09NjE0NDArcCxiWzYxNDQwK3BdPV9bMjQwXVtwXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTJhXHU4ZTM1XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0'@;
put 'XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAyXHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4'@;
put 'ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVmXHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZm'@;
put 'XHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5XHU4ZDA4XHU0ZTRiXHU1M2VhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b'@;
put 'MjQxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQxXVtwXV09NjE2OTYrcCxiWzYxNjk2K3BdPV9bMjQxXVtwXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYw'@;
put 'XHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2'@;
put 'NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2Fk'@;
put 'XHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmXHVmZmZkIi5zcGxpdCgi'@;
put 'IikscD0wO3AhPV9bMjQyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQyXVtwXV09NjE5NTIrcCxiWzYxOTUyK3BdPV9bMjQyXVtwXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2Y2XHU5NmM2XHU1ZmI1XHU2MWYyXHU2Zjg0XHU0ZTE0XHU0Zjk4XHU1MDFmXHU1M2M5XHU1NWRmXHU1ZDZmXHU1ZGVl'@;
put 'XHU2YjIxXHU2YjY0XHU3OGNiXHU3YjlhXHVmOWZlXHU4ZTQ5XHU4ZWNhXHU5MDZlXHU2MzQ5XHU2NDNlXHU3NzQwXHU3YTg0XHU5MzJmXHU5NDdmXHU5ZjZhXHU2NGIwXHU2ZmFmXHU3MWU2XHU3NGE4XHU3NGRhXHU3YWM0XHU3YzEyXHU3ZTgyXHU3Y2IyXHU3ZTk4XHU4YjlhXHU4ZDBhXHU5'@;
put 'NDdkXHU5OTEwXHU5OTRjXHU1MjM5XHU1YmRmXHU2NGU2XHU2NzJkXHU3ZDJlXHU1MGVkXHU1M2MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MWZhXHU2NWFjXHU3YWQ5XHU4YjkyXHU4Yjk2XHU1MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1YTNjXHU1ZWUwXHU1ZjcwXHU2MTM0XHU2NTVlXHU2NjBj'@;
put 'XHU2NjM2XHU2NmEyXHU2OWNkXHU2ZWM0XHU2ZjMyXHU3MzE2XHU3NjIxXHU3YTkzXHU4MTM5XHU4MjU5XHU4M2Q2XHU4NGJjXHU1MGI1XHU1N2YwXHU1YmMwXHU1YmU4XHU1ZjY5XHU2M2ExXHU3ODI2XHU3ZGI1XHU4M2RjXHU4NTIxXHU5MWM3XHU5MWY1XHU1MThhXHU2N2Y1XHU3YjU2XHVm'@;
put 'ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQzXVtwXV09NjIyMDgrcCxiWzYyMjA4K3BdPV9bMjQzXVtwXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FjXHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdk'@;
put 'XHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4XHU1OTI5XHU1ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5'@;
put 'NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1YzE2XHU2Y2JlXHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThh'@;
put 'XHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAwXHU1MjQzXHU2NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2'@;
put 'MmRiXHU2OGEyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ0XVtwXV09NjI0NjQrcCxiWzYyNDY0K3BdPV9bMjQ0XVtwXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBl'@;
put 'XHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2'@;
put 'NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4'@;
put 'XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4'@;
put 'ODc3XHU2MGI0XHU4MWI1XHU4NDAzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ1XVtwXV09NjI3MjArcCxiWzYyNzIwK3BdPV9bMjQ1XVtwXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDA1XHU1M2Q2XHU1NDM5XHU1NjM0XHU1YTM2XHU1YzMx'@;
put 'XHU3MDhhXHU3ZmUwXHU4MDVhXHU4MTA2XHU4MWVkXHU4ZGEzXHU5MTg5XHU5YTVmXHU5ZGYyXHU1MDc0XHU0ZWM0XHU1M2EwXHU2MGZiXHU2ZTJjXHU1YzY0XHU0Zjg4XHU1MDI0XHU1NWU0XHU1Y2Q5XHU1ZTVmXHU2MDY1XHU2ODk0XHU2Y2JiXHU2ZGM0XHU3MWJlXHU3NWQ0XHU3NWY0XHU3'@;
put 'NjYxXHU3YTFhXHU3YTQ5XHU3ZGM3XHU3ZGZiXHU3ZjZlXHU4MWY0XHU4NmE5XHU4ZjFjXHU5NmM5XHU5OWIzXHU5ZjUyXHU1MjQ3XHU1MmM1XHU5OGVkXHU4OWFhXHU0ZTAzXHU2N2QyXHU2ZjA2XHU0ZmI1XHU1YmUyXHU2Nzk1XHU2Yzg4XHU2ZDc4XHU3NDFiXHU3ODI3XHU5MWRkXHU5Mzdj'@;
put 'XHU4N2M0XHU3OWU0XHU3YTMxXHU1ZmViXHU0ZWQ2XHU1NGE0XHU1NTNlXHU1OGFlXHU1OWE1XHU2MGYwXHU2MjUzXHU2MmQ2XHU2NzM2XHU2OTU1XHU4MjM1XHU5NjQwXHU5OWIxXHU5OWRkXHU1MDJjXHU1MzUzXHU1NTQ0XHU1NzdjXHVmYTAxXHU2MjU4XHVmYTAyXHU2NGUyXHU2NjZiXHU2'@;
put 'N2RkXHU2ZmMxXHU2ZmVmXHU3NDIyXHU3NDM4XHU4YTE3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ2XVtwXV09NjI5NzYrcCxiWzYyOTc2K3BdPV9bMjQ2XVtwXSk7Zm9yKF9bMjQ3XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2'@;
put 'XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJiXHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2'@;
put 'YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJh'@;
put 'XHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1'@;
put 'MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4ZmE2XHU5MjExXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ3XVtwXV09NjMyMzIrcCxiWzYzMjMyK3BdPV9bMjQ3XVtwXSk7'@;
put 'Zm9yKF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjJhXHU1MTZi'@;
put 'XHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5'@;
put 'YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIx'@;
put 'XHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2'@;
put 'NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ4XVtwXV09NjM0ODgrcCxiWzYzNDg4K3Bd'@;
put 'PV9bMjQ4XVtwXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU1NGMxXHU3YTFmXHU2OTUzXHU4YWY3XHU4YzRhXHU5OGE4XHU5OWFlXHU1ZjdjXHU2MmFiXHU3NWIyXHU3NmFlXHU4OGFiXHU5MDdmXHU5NjQyXHU1MzM5XHU1ZjNjXHU1ZmM1XHU2Y2NjXHU3M2NjXHU3NTYyXHU3NThiXHU3YjQ2XHU4MmZlXHU5OTlkXHU0ZTRmXHU5MDNjXHU0ZTBiXHU0'@;
put 'ZjU1XHU1M2E2XHU1OTBmXHU1ZWM4XHU2NjMwXHU2Y2IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Y2MwXHU5MDUwXHU5NzFlXHU5YzE1XHU1OGQxXHU1Yjc4XHU4NjUwXHU4YjE0XHU5ZGI0XHU1YmQyXHU2MDY4XHU2MDhkXHU2NWYxXHU2YzU3XHU2ZjIyXHU2ZmEzXHU3MDFhXHU3ZjU1XHU3ZmYw'@;
put 'XHU5NTkxXHU5NTkyXHU5NjUwXHU5N2QzXHU1MjcyXHU4ZjQ0XHU1MWZkXHU1NDJiXHU1NGI4XHU1NTYzXHU1NThhXHU2YWJiXHU2ZGI1XHU3ZGQ4XHU4MjY2XHU5MjljXHU5Njc3XHU5ZTc5XHU1NDA4XHU1NGM4XHU3NmQyXHU4NmU0XHU5NWE0XHU5NWQ0XHU5NjVjXHU0ZWEyXHU0ZjA5XHU1'@;
put 'OWVlXHU1YWU2XHU1ZGY3XHU2MDUyXHU2Mjk3XHU2NzZkXHU2ODQxXHU2Yzg2XHU2ZTJmXHU3ZjM4XHU4MDliXHU4MjJhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ5XVtwXV09NjM3NDQr'@;
put 'cCxiWzYzNzQ0K3BdPV9bMjQ5XVtwXSk7Zm9yKF9bMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmYTA4XHVmYTA5XHU5ODA1XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2'@;
put 'NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0'@;
put 'XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1'@;
put 'OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUw'@;
put 'XVtwXV09NjRlMytwLGJbNjRlMytwXT1fWzI1MF1bcF0pO2ZvcihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFh'@;
put 'Zlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1'@;
put 'Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRj'@;
put 'NFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUxXVtwXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoRFtfWzI1MV1bcF1dPTY0MjU2K3AsYls2NDI1NitwXT1fWzI1MV1bcF0pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk4ZFx1NzliZVx1ODJiMVx1ODNlZlx1OGE3MVx1OGI0MVx1OGNhOFx1OTc3NFx1ZmEwYlx1NjRmNFx1NjUyYlx1NzhiYVx1NzhiYlx1N2E2Ylx1NGUzOFx1NTU5YVx1NTk1MFx1NWJhNlx1NWU3Ylx1NjBhM1x1NjNkYlx1NmI2'@;
put 'MVx1NjY2NVx1Njg1M1x1NmUxOVx1NzE2NVx1NzRiMFx1N2QwOFx1OTA4NFx1OWE2OVx1OWMyNVx1NmQzYlx1NmVkMVx1NzMzZVx1OGM0MVx1OTVjYVx1NTFmMFx1NWU0Y1x1NWZhOFx1NjA0ZFx1NjBmNlx1NjEzMFx1NjE0Y1x1NjY0M1x1NjY0NFx1NjlhNVx1NmNjMVx1NmU1Zlx1NmVjOVx1'@;
put 'NmY2Mlx1NzE0Y1x1NzQ5Y1x1NzY4N1x1N2JjMVx1N2MyN1x1ODM1Mlx1ODc1N1x1OTA1MVx1OTY4ZFx1OWVjM1x1NTMyZlx1NTZkZVx1NWVmYlx1NWY4YVx1NjA2Mlx1NjA5NFx1NjFmN1x1NjY2Nlx1NjcwM1x1NmE5Y1x1NmRlZVx1NmZhZVx1NzA3MFx1NzM2YVx1N2U2YVx1ODFiZVx1ODMz'@;
put 'NFx1ODZkNFx1OGFhOFx1OGNjNFx1NTI4M1x1NzM3Mlx1NWI5Nlx1NmE2Ylx1OTQwNFx1NTRlZVx1NTY4Nlx1NWI1ZFx1NjU0OFx1NjU4NVx1NjZjOVx1Njg5Zlx1NmQ4ZFx1NmRjNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUyXVtwXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoRFtfWzI1Ml1bcF1dPTY0NTEyK3AsYls2NDUxMitwXT1fWzI1Ml1bcF0pO2ZvcihfWzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2'@;
put 'NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQzMVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1'@;
put 'ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFk'@;
put 'ZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1M10ubGVuZ3RoOysrcCk2NTUzMyE9'@;
put 'PV9bMjUzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI1M11bcF1dPTY0NzY4K3AsYls2NDc2OCtwXT1fWzI1M11bcF0pO3JldHVybntlbmM6RCxkZWM6Yn19KCksSls5NTBdPWZ1bmN0aW9uKCl7dmFyIHAsYj1bXSxEPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVc'@;
put 'eDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZn'@;
put 'aGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMF0ubGVuZ3Ro'@;
put 'OysrcCk2NTUzMyE9PV9bMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1swXVtwXV09MCtwLGJbMCtwXT1fWzBdW3BdKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdWZmMGNcdTMwMDFcdTMwMDJcdWZmMGVc'@;
put 'dTIwMjdcdWZmMWJcdWZmMWFcdWZmMWZcdWZmMDFcdWZlMzBcdTIwMjZcdTIwMjVcdWZlNTBcdWZlNTFcdWZlNTJceGI3XHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZjVjXHUyMDEzXHVmZTMxXHUyMDE0XHVmZTMzXHUyNTc0XHVmZTM0XHVmZTRmXHVmZjA4XHVmZjA5XHVmZTM1XHVmZTM2'@;
put 'XHVmZjViXHVmZjVkXHVmZTM3XHVmZTM4XHUzMDE0XHUzMDE1XHVmZTM5XHVmZTNhXHUzMDEwXHUzMDExXHVmZTNiXHVmZTNjXHUzMDBhXHUzMDBiXHVmZTNkXHVmZTNlXHUzMDA4XHUzMDA5XHVmZTNmXHVmZTQwXHUzMDBjXHUzMDBkXHVmZTQxXHVmZTQyXHUzMDBlXHUzMDBmXHVmZTQzXHVm'@;
put 'ZTQ0XHVmZTU5XHVmZTVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDFkXHUzMDFlXHUyMDM1XHUyMDMyXHVmZjAzXHVmZjA2XHVmZjBhXHUyMDNiXHhhN1x1MzAwM1x1MjVj'@;
put 'Ylx1MjVjZlx1MjViM1x1MjViMlx1MjVjZVx1MjYwNlx1MjYwNVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViZFx1MjViY1x1MzJhM1x1MjEwNVx4YWZcdWZmZTNcdWZmM2ZcdTAyY2RcdWZlNDlcdWZlNGFcdWZlNGRcdWZlNGVcdWZlNGJcdWZlNGNcdWZlNWZcdWZlNjBcdWZlNjFcdWZm'@;
put 'MGJcdWZmMGRceGQ3XHhmN1x4YjFcdTIyMWFcdWZmMWNcdWZmMWVcdWZmMWRcdTIyNjZcdTIyNjdcdTIyNjBcdTIyMWVcdTIyNTJcdTIyNjFcdWZlNjJcdWZlNjNcdWZlNjRcdWZlNjVcdWZlNjZcdWZmNWVcdTIyMjlcdTIyMmFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFc'@;
put 'dTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIxOTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIxOTlcdTIxOThcdTIyMjVcdTIyMjNcdWZmMGZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjFdLmxlbmd0aDsrK3ApNjU1MzMhPT1f'@;
put 'WzE2MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjFdW3BdXT00MTIxNitwLGJbNDEyMTYrcF09X1sxNjFdW3BdKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVc'@;
put 'dTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5'@;
put 'XHU3Y2NlXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4XHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUy'@;
put 'NTE0XHUyNTE4XHUyNTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVm'@;
put 'ZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHU1MzQxXHU1MzQ0XHU1MzQ1'@;
put 'XHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjQxXHVm'@;
put 'ZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYyXS5sZW5ndGg7Kytw'@;
put 'KTY1NTMzIT09X1sxNjJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTYyXVtwXV09NDE0NzIrcCxiWzQxNDcyK3BdPV9bMTYyXVtwXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjU3XHVmZjU4XHVmZjU5XHVm'@;
put 'ZjVhXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2Iz'@;
put 'XHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUz'@;
put 'MTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUz'@;
put 'MTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYz'@;
put 'XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTYzXVtwXV09NDE3MjgrcCxiWzQxNzI4K3BdPV9bMTYzXVtwXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAwXHU0'@;
put 'ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1MWUwXHU1MjAwXHU1MjAxXHU1MjliXHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0ZTA5XHU0ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJiXHU0ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4'@;
put 'XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFmXHU1OGViXHU1OTE1XHU1OTI3XHU1OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4XHU1YzBmXHU1YzIyXHU1YzM4XHU1YzcxXHU1ZGRkXHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1'@;
put 'ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTExXHU0ZTEwXHU0ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRiXHU1YzM5XHU0ZTg4XHU0ZTkxXHU0ZTk1XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0'@;
put 'ZWMxXHU0ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZjXHU1MTk3XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1MmZiXHU1MmZlXHU1MmZmXHU1MzE2XHU1MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1'@;
put 'XHU1MzVlXHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1YzZmXHU1ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1XHU1ZmMzXHU2MjA4XHU2MjM2XHU2MjRiXHU2MjRlXHU2NTJmXHU2NTg3XHU2'@;
put 'NTk3XHU2NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0XHU3MDZiXHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3MjU5XHU3MjViXHU3MmFjXHU3MzhiXHU0ZTE5XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'cD0wO3AhPV9bMTY0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY0XVtwXV09NDE5ODQrcCxiWzQxOTg0K3BdPV9bMTY0XVtwXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU0ZTE2XHU0ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBh'@;
put 'XHU1MmEwXHU1MjlmXHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1'@;
put 'M2YyXHU1M2YxXHU1M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1'@;
put 'ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0'@;
put 'XHU3Mzg5XHU3NGRjXHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0'@;
put 'ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4XHVmZmZk'@;
put 'Ii5zcGxpdCgiIikscD0wO3AhPV9bMTY1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY1XVtwXV09NDIyNDArcCxiWzQyMjQwK3BdPV9bMTY1XVtwXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4'@;
put 'XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1'@;
put 'Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2'@;
put 'MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRl'@;
put 'XHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4'@;
put 'MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2'@;
put 'XHU0ZjYzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY2XVtwXV09NDI0OTYrcCxiWzQyNDk2K3BdPV9bMTY2XVtwXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2XHU0ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1MTRjXHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFh'@;
put 'XHU1MmFjXHU1MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1NDRlXHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMzXHU1NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1'@;
put 'NDQwXHU1NDMxXHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRhXHU1NzUxXHU1NzQwXHU1NzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1'@;
put 'OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1YjVhXHU1YjViXHU1YjhjXHU1YjhiXHU1YjhmXHU1YzJjXHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1Yzhj'@;
put 'XHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNjXHU1ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1ZmY4XHU1ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2'@;
put 'Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2Mjg2XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYxXHU2NmY0XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVl'@;
put 'XHU2NzQ5XHU2NzQ2XHU2NzYwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY3XVtwXV09NDI3NTIrcCxiWzQyNzUyK3BdPV9bMTY3XVtwXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2Yzdk'@;
put 'XHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3'@;
put 'OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4'@;
put 'YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJj'@;
put 'XHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0'@;
put 'ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5'@;
put 'XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY4XVtwXV09NDMwMDgrcCxiWzQzMDA4K3BdPV9bMTY4XVtwXSk7Zm9yKF9bMTY5XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdk'@;
put 'XHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1'@;
put 'OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1'@;
put 'Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1'@;
put 'XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2'@;
put 'MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBj'@;
put 'XHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY5XVtwXV09NDMyNjQrcCxiWzQzMjY0K3BdPV9bMTY5XVtwXSk7Zm9y'@;
put 'KF9bMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZkXHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2NzczXHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5'@;
put 'XHU2NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2NzkzXHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2NjXHU2Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2'@;
put 'Y2QzXHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2MxXHU2Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2FjXHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MDk1XHU3MDhlXHU3'@;
put 'MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJkXHU3MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3MmMwXHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3NmMyXHU3NmYyXHU3NmY0XHU3N2U1'@;
put 'XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3OWM5XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZhXHU3Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGExXHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFmXHU4MWU1XHU4MWZlXHU4MjBkXHU4'@;
put 'MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJkXHU4MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4MmE1XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJlXHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5MGI1XHU5MGI4XHU5MGIxXHU5MGI2'@;
put 'XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5NjFjXHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTcwXVtwXV09NDM1MjArcCxiWzQzNTIwK3BdPV9b'@;
put 'MTcwXVtwXSk7Zm9yKF9bMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNm'@;
put 'XHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1'@;
put 'MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1'@;
put 'NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4'@;
put 'XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1'@;
put 'ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQx'@;
put 'XHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTcxXVtwXV09NDM3NzYrcCxi'@;
put 'WzQzNzc2K3BdPV9bMTcxXVtwXSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJk'@;
put 'XHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2'@;
put 'N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZm'@;
put 'XHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3'@;
put 'NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZm'@;
put 'XHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTcyXVtw'@;
put 'XV09NDQwMzIrcCxiWzQ0MDMyK3BdPV9bMTcyXVtwXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDEwXHU4MDBkXHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1XHU4MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUx'@;
put 'XHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4MmU1XHU4MzAyXHU4MzA5XHU4MmQyXHU4MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4MmQ0XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4'@;
put 'MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2EwXHU4ZDc0XHU4ZDczXHU4ZGI0XHU4ZWNkXHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUyXHU4ZmVhXHU4ZmU1XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNkXHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRjXHU5NjRkXHU5NzYyXHU5NzY5XHU5N2NiXHU5N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5OGRi'@;
put 'XHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1MDE0XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBiXHU1'@;
put 'MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNjXHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVjXHU1MjU0XHU1MjViXHU1MjVkXHU1MzJhXHU1MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1NGU4'@;
put 'XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1NGVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTczXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzNdW3BdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihEW19bMTczXVtwXV09NDQyODgrcCxiWzQ0Mjg4K3BdPV9bMTczXVtwXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0'@;
put 'XHU1N2NiXHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1'@;
put 'YmI1XHU1YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJm'@;
put 'XHU2MzU1XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2'@;
put 'NzE0XHU2NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2Yjhh'@;
put 'XHU2Yjg5XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzRdW3BdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihEW19bMTc0XVtwXV09NDQ1NDQrcCxiWzQ0NTQ0K3BdPV9bMTc0XVtwXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhj'@;
put 'XHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3'@;
put 'NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0'@;
put 'XHU3ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5'@;
put 'XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4'@;
put 'MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJj'@;
put 'XHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc1XS5sZW5ndGg7KytwKTY1NTMzIT09'@;
put 'X1sxNzVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc1XVtwXV09NDQ4MDArcCxiWzQ0ODAwK3BdPV9bMTc1XVtwXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0'@;
put 'XHU4NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4ODdkXHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBlXHU4YTBjXHU4YTE1XHU4YTBhXHU4YTE3XHU4YTEzXHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4'@;
put 'ZWFjXHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAwXHU4ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5MDA1XHU4ZmY4XHU5MDk1XHU5MGUxXHU5MGRkXHU5MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgz'@;
put 'XHU5NjYyXHU5NjYzXHU5NjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjViXHU5NjVkXHU5NjY0XHU5NjU4XHU5NjVlXHU5NmJiXHU5OGUyXHU5OWFjXHU5YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3'@;
put 'XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBmXHU1MDZmXHU1MDZkXHU1MTVjXHU1MTk1XHU1MWYwXHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1'@;
put 'MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1NTMxXHU1NTU2XHU1NTRmXHU1NTU1XHU1NTJmXHU1NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4'@;
put 'XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBhXHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5XHU1OTIwXHU1OTYyXHU1YTM2XHU1YTQxXHU1YTQ5XHU1YTY2XHU1YTZhXHU1YTQwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc2XS5sZW5ndGg7'@;
put 'KytwKTY1NTMzIT09X1sxNzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc2XVtwXV09NDUwNTYrcCxiWzQ1MDU2K3BdPV9bMTc2XVtwXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTNjXHU1YTYyXHU1YTVh'@;
put 'XHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1'@;
put 'ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZjXHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEw'@;
put 'XHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2Ew'@;
put 'XHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2'@;
put 'MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgx'@;
put 'XHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b'@;
put 'MTc3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc3XVtwXV09NDUzMTIrcCxiWzQ1MzEyK3BdPV9bMTc3XVtwXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmVi'@;
put 'XHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2'@;
put 'ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1'@;
put 'XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3Njhl'@;
put 'XHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3'@;
put 'Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIz'@;
put 'XHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjXHVmZmZkIi5zcGxpdCgi'@;
put 'IikscD0wO3AhPV9bMTc4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc4XVtwXV09NDU1NjgrcCxiWzQ1NTY4K3BdPV9bMTc4XVtwXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4Mzg2XHU4M2E3XHU4NjU1XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4NmM5XHU4ODUzXHU4ODllXHU4ODg4XHU4OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4YTFkXHU4'@;
put 'YTIzXHU4YTI1XHU4YTMxXHU4YTJkXHU4YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3XHU4ZDY3XHU4ZDY2XHU4ZGJlXHU4ZGJhXHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFmXHU5MDFk'@;
put 'XHU5MDEwXHU5MDE1XHU5MDFlXHU5MDIwXHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGU4XHU5MGVkXHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5'@;
put 'XHU5NjZhXHU5Njc1XHU5NjczXHU5Njc4XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3XHU5NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5ODAyXHU5ODAzXHU5YjVhXHU5Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEyXHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1'@;
put 'MDgwXHU1MDk2XHU1MDk4XHU1MDlhXHU2NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1Mjc1XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1XHU1NTdiXHU1NTgwXHU1NWE3XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThi'@;
put 'XHU1NTgzXHU1NWIzXHU1NWFlXHU1NTlmXHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJiXHU1NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1NzBkXHU1ODJmXHU1ODJhXHU1ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFkXHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwXHVm'@;
put 'ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc5XVtwXV09NDU4MjQrcCxiWzQ1ODI0K3BdPV9bMTc5XVtwXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1'@;
put 'ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAw'@;
put 'XHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2XHU2M2NkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2Vh'@;
put 'XHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2'@;
put 'OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJl'@;
put 'XHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2'@;
put 'ZTNlXHU2ZWNiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgwXVtwXV09NDYwODArcCxiWzQ2MDgwK3BdPV9bMTgwXVtwXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3'@;
put 'MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3Njkz'@;
put 'XHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUw'@;
put 'XHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4'@;
put 'MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2Nj'@;
put 'XHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4'@;
put 'YTU1XHU4YTVlXHU4YTNjXHU4YTQxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgxXVtwXV09NDYzMzYrcCxiWzQ2MzM2K3BdPV9bMTgxXVtwXSk7Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTU0XHU4YTViXHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4YTU2XHU4YzYxXHU4YzgyXHU4Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4Y2MxXHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4'@;
put 'Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4XHU4ZWZjXHU4ZjljXHU5MDJlXHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMyXHU5MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYz'@;
put 'XHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEwXHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5NTkxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5NjhlXHU5Njhi'@;
put 'XHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5N2NjXHU5ODA1XHU5ODA2XHU5ODA4XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5OGYyXHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMzXHU5ZWNkXHU5'@;
put 'ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1MjdmXHU1Mjc3XHU1MjdkXHU1MmRmXHU1MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJmXHU1NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1NWNlXHU1NWRj'@;
put 'XHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1ODVlXHU1ODUxXHU1ODU4XHU1ODU3XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1ODZkXHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRiXHU1OTY3XHU1'@;
put 'YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgyXVtwXV09NDY1OTIrcCxiWzQ2NTkyK3BdPV9bMTgyXVtwXSk7Zm9yKF9bMTgzXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2'@;
put 'MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2'@;
put 'XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0'@;
put 'XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2'@;
put 'ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4'@;
put 'XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3'@;
put 'NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3NzYzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgzXVtwXV09NDY4NDgrcCxiWzQ2ODQ4K3BdPV9bMTgzXVtwXSk7'@;
put 'Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3'@;
put 'ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhm'@;
put 'XHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTc5XHU4MTdh'@;
put 'XHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4'@;
put 'NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdj'@;
put 'XHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4'@;
put 'ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg0XVtwXV09NDcxMDQrcCxiWzQ3MTA0K3Bd'@;
put 'PV9bMTg0XVtwXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjlmXHU4ZmIyXHU5MDRiXHU5MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRkXHU5'@;
put 'MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5XHU5MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5MjNkXHU5MjQwXHU5MjNlXHU5MjViXHU5MjRiXHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5Njk4'@;
put 'XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5NmZiXHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0XHU5Nzc2XHU5ODEwXHU5ODExXHU5ODEzXHU5ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIxXHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3XHU1MGVlXHU1MGU1XHU1MGQ2XHU1MGVkXHU1MGRhXHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1'@;
put 'MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1NWY3XHU1NjE2XHU1NjFmXHU1NjA4XHU1NjEwXHU1NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdk'@;
put 'XHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4XHU1YWUzXHU1Yjc1XHU1YmRlXHU1YmU3XHU1YmUxXHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1'@;
put 'ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg1XVtwXV09NDczNjAr'@;
put 'cCxiWzQ3MzYwK3BdPV9bMTg1XVtwXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2'@;
put 'NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFi'@;
put 'XHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3'@;
put 'Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThl'@;
put 'XHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3'@;
put 'ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg2'@;
put 'XVtwXV09NDc2MTYrcCxiWzQ3NjE2K3BdPV9bMTg2XVtwXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4'@;
put 'MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFj'@;
put 'XHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5'@;
put 'MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4'@;
put 'XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5'@;
put 'Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODddW3BdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihEW19bMTg3XVtwXV09NDc4NzIrcCxiWzQ3ODcyK3BdPV9bMTg3XVtwXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1M2IyXHU1NjJlXHU1'@;
put 'NjNiXHU1NjM5XHU1NjMyXHU1NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlmXHU1ODllXHU1OGIzXHU1ODljXHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1XHU1YjBjXHU1YjA4'@;
put 'XHU1YmVlXHU1YmVjXHU1YmU5XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1ZWRkXHU1ZWUzXHU1ZWUwXHU1ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2MTU1XHU2MTgyXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTdjXHU2MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2MWFjXHU2MTlhXHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZmXHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2'@;
put 'NGIwXHU2NGE1XHU2NDkzXHU2NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2NGFkXHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1XHU2NTc3XHU2NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZk'@;
put 'XHU2YTIxXHU2YTEzXHU2YTBhXHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVkXHU2YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2ZjdjXHU2Zjg0XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjViXHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2'@;
put 'ZjY0XHU2Zjk3XHU2ZjU4XHU2ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3MTlmXHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3XHU3NDY5XHU3NDhiXHU3NDgzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODhdW3Bd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihEW19bMTg4XVtwXV09NDgxMjgrcCxiWzQ4MTI4K3BdPV9bMTg4XVtwXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3'@;
put 'NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFl'@;
put 'XHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3'@;
put 'Zjc3XHU3ZmFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4'@;
put 'NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1'@;
put 'XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4'@;
put 'ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg5XS5sZW5ndGg7KytwKTY1NTMz'@;
put 'IT09X1sxODldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg5XVtwXV09NDgzODQrcCxiWzQ4Mzg0K3BdPV9bMTg5XVtwXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5'@;
put 'MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3'@;
put 'XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5'@;
put 'Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1'@;
put 'NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5'@;
put 'XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2'@;
put 'NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkwXS5sZW5n'@;
put 'dGg7KytwKTY1NTMzIT09X1sxOTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkwXVtwXV09NDg2NDArcCxiWzQ4NjQwK3BdPV9bMTkwXVtwXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmMzXHU2ZmE0XHU2'@;
put 'ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1XHU3MWI5XHU3MWNlXHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0XHU3MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUy'@;
put 'XHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2EwXHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3OGU3XHU3OWE2XHU3YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3YTRiXHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3'@;
put 'YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTExXHU3ZTA4XHU3ZTFiXHU3ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3Zjc5XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVlXHU4MDI4XHU4MWIzXHU4'@;
put 'MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5XHU4NTZkXHU4NTZhXHU4NTVlXHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4NzhkXHU4ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4OTJiXHU4OTIxXHU4OWFh'@;
put 'XHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4YWY3XHU4YWVkXHU4YWYzXHU4YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4Y2Y0XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQyXHU4ZTM5XHU4ZTM1XHU4'@;
put 'ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0XHU5MTkyXHU5MzIwXHU5MzM2XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZjXHU5MzJiXHU5MzA0XHU5MzFhXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah'@;
put 'PV9bMTkxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkxXVtwXV09NDg4OTYrcCxiWzQ4ODk2K3BdPV9bMTkxXVtwXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5'@;
put 'MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5ODI0'@;
put 'XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFmXHU1'@;
put 'MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJhXHU1'@;
put 'ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2YTk0'@;
put 'XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVlXHU2'@;
put 'ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjXHVmZmZkIi5zcGxp'@;
put 'dCgiIikscD0wO3AhPV9bMTkyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkyXVtwXV09NDkxNTIrcCxiWzQ5MTUyK3BdPV9bMTkyXVtwXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJl'@;
put 'XHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4'@;
put 'MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4'@;
put 'N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4Yzcz'@;
put 'XHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5'@;
put 'MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAx'@;
put 'XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkzXVtwXV09NDk0MDgrcCxiWzQ5NDA4K3BdPV9bMTkzXVtwXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZmXHU5YmFlXHU5YmFiXHU5YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5ZThiXHU5ZWNmXHU5ZWRlXHU5ZWRjXHU5ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2MWUzXHU2MjMz'@;
put 'XHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2NGY3XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIzXHU2YWFjXHU2YWMzXHU2YWJiXHU2YWI4XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZhXHU3MDExXHU3'@;
put 'MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1XHU3NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3NjU4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3'@;
put 'YTYwXHU3YWM0XHU3YWM1XHU3YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3ZTU1XHU3ZTVlXHU3ZTVhXHU3ZTYxXHU3ZTUyXHU3ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNk'@;
put 'XHU4NWQwXHU4NWM5XHU4NWIwXHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2XHU4OWIyXHU4OWY0XHU4YjI4XHU4YjM5XHU4YjJjXHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4'@;
put 'ZjRkXHU5MDg3XHU5MDgzXHU5MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5M2IzXHU5M2FlXHU5M2FjXHU5M2IwXHU5Mzk4XHU5MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0'@;
put 'XHU5N2EzXHU5N2E2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk0XVtwXV09NDk2NjQrcCxiWzQ5NjY0K3BdPV9bMTk0XVtwXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5'@;
put 'XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2'@;
put 'YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3Mzc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3'@;
put 'NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0'@;
put 'XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4'@;
put 'ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3'@;
put 'XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk1XVtwXV09NDk5MjArcCxiWzQ5OTIwK3BdPV9bMTk1XVtwXSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkz'@;
put 'XHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3'@;
put 'NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4'@;
put 'NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4'@;
put 'XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1'@;
put 'YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIy'@;
put 'XHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk2XVtwXV09NTAxNzYrcCxiWzUwMTc2K3BdPV9bMTk2XVtwXSk7Zm9yKF9bMTk3'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThkXHU4ZThiXHU4ZjVmXHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMyXHU5NDJiXHU5NWUyXHU5NzM4'@;
put 'XHU5NzM5XHU5NzMyXHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5YzI1XHU5ZGFmXHU5ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5ZjY3XHU1MTNjXHU1MTNiXHU1'@;
put 'NmM4XHU1NmNhXHU1NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0XHU3NThhXHU3NjZlXHU3NjZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWIzXHU3YzYwXHU3YzVmXHU4'@;
put 'MDdlXHU4MDdkXHU4MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4YjgwXHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUxXHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMx'@;
put 'XHU5YzNlXHU5YzNiXHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZjXHU5ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4'@;
put 'ODMxXHU4YjhhXHU5MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5NDY0XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3Njcy'@;
put 'XHU3N2Q3XHU3ZjUwXHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYyXHU4YjkzXHU4YjkyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk3XVtwXV09NTA0MzIrcCxiWzUwNDMyK3BdPV9bMTk3XVtw'@;
put 'XSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZh'@;
put 'XHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5'@;
put 'YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOThdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk4XVtwXV09NTA2ODgrcCxiWzUwNjg4'@;
put 'K3BdPV9bMTk4XVtwXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBm'@;
put 'XHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0'@;
put 'ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEy'@;
put 'XHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1'@;
put 'YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNi'@;
put 'XHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAxXVtwXV09NTE0'@;
put 'NTYrcCxiWzUxNDU2K3BdPV9bMjAxXVtwXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4Mjdj'@;
put 'XHU4MjgwXHU4MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5MDk5XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIzXHU0ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0'@;
put 'ZjMzXHU0ZjNmXHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFjXHU1MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1MzhmXHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5XHU1NDFjXHU1NDI1XHU1NDE4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU1NDNkXHU1NDRmXHU1NDQxXHU1NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1NmU3XHU1NmU1XHU1NzQxXHU1NzQ1XHU1NzRjXHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1OWEyXHU1OTkwXHU1OThm'@;
put 'XHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1YzJhXHU1YzhkXHU1YzhmXHU1Yzg4XHU1YzhiXHU1Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2XHU1YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1XHU1ZjFkXHU1Zjc4XHU1'@;
put 'Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4XHU1ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1ZmUzXHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1ZmZiXHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2MjdiXHU2MjdhXHU2Mjcw'@;
put 'XHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2Mjc0XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYzXHU2NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19b'@;
put 'MjAyXVtwXV09NTE3MTIrcCxiWzUxNzEyK3BdPV9bMjAyXVtwXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5'@;
put 'XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3'@;
put 'MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3'@;
put 'XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1'@;
put 'MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3'@;
put 'XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDNdW3BdLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihEW19bMjAzXVtwXV09NTE5NjgrcCxiWzUxOTY4K3BdPV9bMjAzXVtwXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNl'@;
put 'XHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1'@;
put 'Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBi'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQx'@;
put 'XHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2'@;
put 'NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRl'@;
put 'XHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDRd'@;
put 'W3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA0XVtwXV09NTIyMjQrcCxiWzUyMjI0K3BdPV9bMjA0XVtwXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2QyXHU2Y2RkXHU2Y2I0XHU2YzhhXHU2YzlkXHU2Yzgw'@;
put 'XHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0XHU3MDk4XHU3MDg1XHU3MDkzXHU3MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgyXHU3MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3MmNiXHU3MmQ4XHU3MmM5XHU3MmRjXHU3'@;
put 'MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3M2FjXHU3MzlkXHU3NGRkXHU3NGU4XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3NTk4XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYwXHU3NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5'@;
put 'XHU3N2ZiXHU3N2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4XHU3YTdiXHU3YWZiXHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1XHU4MGFkXHU4MjIwXHU4MmEwXHU4MmMw'@;
put 'XHU4MmFiXHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4MmE5XHU4MmMyXHU4MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4YzU2XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4'@;
put 'ZmNkXHU4ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQzXHU0ZmNkXHU0ZmM1XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5XHU0ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3'@;
put 'XHU0ZmQ2XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1Mzk5XHU1Mzk4XHU1NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA1XS5sZW5ndGg7KytwKTY1'@;
put 'NTMzIT09X1syMDVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA1XVtwXV09NTI0ODArcCxiWzUyNDgwK3BdPV9bMjA1XVtwXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGMzXHU4MzBkXHU1NGI3XHU1NGFl'@;
put 'XHU1NGQ2XHU1NGI2XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1NzlhXHU1Nzk1XHU1'@;
put 'OGY0XHU1OTBkXHU1OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRjXHU1Y2QwXHU1Y2Q4'@;
put 'XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1Y2RiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIy'@;
put 'XHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2'@;
put 'MDI0XHU2MDQ0XHU2MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQz'@;
put 'XHU2NWFhXHU2NWJmXHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA2XS5s'@;
put 'ZW5ndGg7KytwKTY1NTMzIT09X1syMDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA2XVtwXV09NTI3MzYrcCxiWzUyNzM2K3BdPV9bMjA2XVtwXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2N2RjXHU2N2Ji'@;
put 'XHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2'@;
put 'N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5'@;
put 'XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlm'@;
put 'XHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3'@;
put 'M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZi'@;
put 'XHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwXHVmZmZkIi5zcGxpdCgiIikscD0w'@;
put 'O3AhPV9bMjA3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA3XVtwXV09NTI5OTIrcCxiWzUyOTkyK3BdPV9bMjA3XVtwXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU3YTdlXHU3YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3YzgxXHU3ZDAzXHU3ZDA4XHU3ZDAxXHU3ZjU4XHU3ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4'@;
put 'MGMyXHU4MGQwXHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNmXHU4MGQ3XHU4MGU2XHU4MGNkXHU4MWZmXHU4MjIxXHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVj'@;
put 'XHU4MmUxXHU4MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYzXHU4MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZh'@;
put 'XHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUzXHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1XHU5MGM1XHU5MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5MWQ0XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1'@;
put 'MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1MDE3XHU1MDFjXHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJmXHU1MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4'@;
put 'XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVmXHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUyXHU1NTE3XHU1NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1NTFhXHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxXHVmZmZkIi5z'@;
put 'cGxpdCgiIikscD0wO3AhPV9bMjA4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA4XVtwXV09NTMyNDgrcCxiWzUzMjQ4K3BdPV9bMjA4XVtwXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1'@;
put 'OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4'@;
put 'XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2MDk1XHU2MDliXHU2MDk3'@;
put 'XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJkXHU2MzQ3XHU2MzMzXHU2'@;
put 'MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2ODRmXHU2ODE2XHU2ODMx'@;
put 'XHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgyXHU2Yjg4XHU2YmU2XHU2'@;
put 'YmU0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA5XVtwXV09NTM1MDQrcCxiWzUzNTA0K3BdPV9bMjA5XVtwXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2'@;
put 'ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQy'@;
put 'XHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZi'@;
put 'XHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3'@;
put 'NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJi'@;
put 'XHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3'@;
put 'YTg3XHU3YWQ4XHU3YjEwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjEwXVtwXV09NTM3NjArcCxiWzUzNzYwK3BdPV9bMjEwXVtwXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3YjBlXHU3YjA5XHU3YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3'@;
put 'ZDE2XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBmXHU3ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2XHU3ZjkyXHU3ZmMzXHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAx'@;
put 'XHU4MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4MzQ0XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4MzFjXHU4MzIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzQyXHU4MzRlXHU4MzFiXHU4MzJhXHU4MzA4XHU4MzNjXHU4MzRk'@;
put 'XHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4MzJmXHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRjXHU4MzUzXHU4MzFlXHU4MzJjXHU4MzRiXHU4MzI3XHU4MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3XHU4Njk3XHU4Njg2XHU4NjhiXHU4'@;
put 'NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmExXHU4NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4NjlkXHU4NjkwXHU4Njk0XHU4ODQzXHU4ODQ0XHU4ODZkXHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4ODc0XHU4ODdjXHU4YTEyXHU4YzQ3'@;
put 'XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4ZDc2XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2XHU4ZWQxXHU4ZWQzXHU4ZmZlXHU4ZmY1XHU5MDAyXHU4ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUzXHU5MGRmXHU5MGU1XHU5MGQ4XHU5'@;
put 'MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjExXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjExXVtwXV09NTQwMTYrcCxiWzU0MDE2K3BdPV9bMjExXVtwXSk7Zm9yKF9bMjEyXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1'@;
put 'MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQz'@;
put 'XHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5'@;
put 'XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1'@;
put 'N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3'@;
put 'XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1'@;
put 'ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjEyXVtwXV09NTQyNzIrcCxiWzU0MjcyK3BdPV9bMjEyXVtwXSk7Zm9yKF9b'@;
put 'MjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2'@;
put 'MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2Mzll'@;
put 'XHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzc4XHU2Mzg1XHU2Mzgx'@;
put 'XHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2'@;
put 'OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2Yjkx'@;
put 'XHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2'@;
put 'ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjEzXVtwXV09NTQ1MjgrcCxiWzU0NTI4K3BdPV9bMjEz'@;
put 'XVtwXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZGQwXHU2ZGYyXHU2ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNkXHU2ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3MGY3XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3'@;
put 'MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3MTBiXHU3MTAyXHU3MTBlXHU3MjdlXHU3MjdiXHU3MjdjXHU3MjdmXHU3MzFkXHU3MzE3XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBhXHU3MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4'@;
put 'XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2ZjXHU3M2ZmXHU3NDBjXHU3NDBiXHU3M2Y0XHU3NDA4XHU3NTY0XHU3NTYzXHU3NWNlXHU3NWQyXHU3NWNmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWNi'@;
put 'XHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0XHU3NzMzXHU3NzNkXHU3NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3ODRjXHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0XHU3'@;
put 'OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3YTk0XHU3YTkwXHU3YjM1XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4XHU3YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3YjJk'@;
put 'XHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4XHU3ZDM2XHU3ZDNhXHU3ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3ZDNiXHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3ZjljXHU3'@;
put 'ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE0XVtwXV09NTQ3ODQrcCxiWzU0'@;
put 'Nzg0K3BdPV9bMjE0XVtwXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4'@;
put 'MTIxXHU4MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4Mzdk'@;
put 'XHU4MzgzXHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4'@;
put 'ODk4XHU4OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJj'@;
put 'XHU4ZGMyXHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5'@;
put 'MTU2XHU5MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE1XVtwXV09'@;
put 'NTUwNDArcCxiWzU1MDQwK3BdPV9bMjE1XVtwXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5'@;
put 'NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkx'@;
put 'XHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1'@;
put 'YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQx'@;
put 'XHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1'@;
put 'ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTZdW3BdLmNoYXJDb2RlQXQoMCkmJihE'@;
put 'W19bMjE2XVtwXV09NTUyOTYrcCxiWzU1Mjk2K3BdPV9bMjE2XVtwXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2'@;
put 'MGMxXHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRhXHU2Mzk0XHU2M2IxXHU2M2IwXHU2M2NlXHU2M2U1XHU2M2U4XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2Jl'@;
put 'XHU2M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2M2NiXHU2M2M4XHU2M2YwXHU2M2Q3XHU2M2Q5XHU2NTMyXHU2NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2NjZhXHU2NjcyXHU2NzAxXHU2OTBjXHU2OGQzXHU2OTA0XHU2OGRjXHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2'@;
put 'OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVmXHU2OGM2XHU2OTE0XHU2OGY4XHU2OGQwXHU2OGZkXHU2OGZjXHU2OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0'@;
put 'XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2Yjk0XHU2Yjk3XHU2Yjk5XHU2Yjk1XHU2YmJkXHU2YmYwXHU2YmYyXHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2'@;
put 'ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQwXHU2ZTUxXHU2ZTNiXHU2ZTAzXHU2ZTJlXHU2ZTVlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTddW3BdLmNoYXJD'@;
put 'b2RlQXQoMCkmJihEW19bMjE3XVtwXV09NTU1NTIrcCxiWzU1NTUyK3BdPV9bMjE3XVtwXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2'@;
put 'ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFm'@;
put 'XHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3'@;
put 'NDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3'@;
put 'NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVl'@;
put 'XHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3'@;
put 'ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sy'@;
put 'MThdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE4XVtwXV09NTU4MDgrcCxiWzU1ODA4K3BdPV9bMjE4XVtwXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4'@;
put 'MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2Mw'@;
put 'XHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4'@;
put 'NDA2XHU4M2MyXHU4M2YzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4'@;
put 'NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAx'@;
put 'XHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4'@;
put 'Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE5XS5sZW5ndGg7Kytw'@;
put 'KTY1NTMzIT09X1syMTldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE5XVtwXV09NTYwNjQrcCxiWzU2MDY0K3BdPV9bMjE5XVtwXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWY5XHU4ZWU2XHU4ZWVlXHU4'@;
put 'ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4XHU4ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5MDM0XHU5MDJmXHU5MTA2XHU5MTJjXHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYxXHU5MTY0'@;
put 'XHU5MTVmXHU5MTYyXHU5MTYwXHU5MjAxXHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBjXHU5MjAwXHU5MjEyXHU5MWZmXHU5MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5NThkXHU5'@;
put 'NThjXHU5NTkwXHU5Njg3XHU5NjdlXHU5Njg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg5XHU5NjgzXHU5NjgwXHU5NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0'@;
put 'ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJkXHU1MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1MGNhXHU1MGI0XHU1MGM4XHU1MGMyXHU1MGIwXHU1MGMxXHU1MGJhXHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNj'@;
put 'XHU1NWQwXHU1NWNiXHU1NWNhXHU1NWRkXHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5XHU1NWJmXHU1NWQyXHU1NThkXHU1NWNmXHU1NWQ1XHU1NWUyXHU1NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1'@;
put 'ODZmXHU1ODU1XHU1ODRlXHU1ODVkXHU1ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1ODYzXHU1ODcxXHU1OGZjXHU1YWM3XHU1YWM0XHU1YWNiXHU1YWJhXHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIw'@;
put 'XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIwXVtwXV09NTYzMjArcCxiWzU2MzIwK3BdPV9bMjIwXVtwXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWI3XHU1'@;
put 'YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRi'@;
put 'XHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2'@;
put 'M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDMzXHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2'@;
put 'NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVm'@;
put 'XHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2'@;
put 'OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'cD0wO3AhPV9bMjIxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIxXVtwXV09NTY1NzYrcCxiWzU2NTc2K3BdPV9bMjIxXVtwXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJl'@;
put 'XHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3'@;
put 'MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3'@;
put 'MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBm'@;
put 'XHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3'@;
put 'ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzXHVmZmZk'@;
put 'Ii5zcGxpdCgiIikscD0wO3AhPV9bMjIyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIyXVtwXV09NTY4MzIrcCxiWzU2ODMyK3BdPV9bMjIyXVtwXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3YjY2XHU3YjY0XHU3YjZkXHU3Yjc0XHU3YjY5XHU3YjcyXHU3YjY1XHU3YjczXHU3YjcxXHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2XHU3YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2'@;
put 'XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdjXHU3ZDhjXHU3ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3ZjZkXHU3ZjZiXHU3ZjY3XHU3ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3ZmE3XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4'@;
put 'MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4MTY3XHU4MTZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4MjQ0XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYxXHU4NDNmXHU4'@;
put 'NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMwXHU4NDRkXHU4NDdkXHU4NDVhXHU4NDU5XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNhXHU4NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4NDMyXHU4NDQ1'@;
put 'XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4NDRjXHU4NDUyXHU4NDZmXHU4NGM1XHU4NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4NDQ0XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZlXHU4NDUwXHU4'@;
put 'NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5XHU4NzAxXHU4NmY2XHU4NzBkXHU4NzA1XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRhXHU4OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4OWRmXHU4OWU1'@;
put 'XHU4OWU0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIzXVtwXV09NTcwODgrcCxiWzU3MDg4K3BdPV9bMjIzXVtwXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0'@;
put 'XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4'@;
put 'ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5'@;
put 'MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0'@;
put 'XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5'@;
put 'ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYw'@;
put 'XHU1MGVmXHU1MGUzXHU1MGUwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI0XVtwXV09NTczNDQrcCxiWzU3MzQ0K3BdPV9bMjI0XVtwXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZm'@;
put 'XHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1'@;
put 'YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1'@;
put 'ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJj'@;
put 'XHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2'@;
put 'NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1'@;
put 'XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI1XVtwXV09NTc2MDArcCxiWzU3NjAwK3BdPV9bMjI1XVtwXSk7Zm9yKF9bMjI2XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OWEwXHU2OWNlXHU2OTk2XHU2OWIwXHU2OWFjXHU2OWJjXHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2OWQ0'@;
put 'XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2OWExXHU2OTllXHU2OWQ5XHU2OTk3XHU2OTkwXHU2OWMyXHU2OWI1XHU2OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1XHU2'@;
put 'ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5XHU2ZjRlXHU2ZjE5XHU2ZjFhXHU2ZjI3XHU2ZjE4XHU2ZjNiXHU2ZjEyXHU2ZWVkXHU2ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2'@;
put 'ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2ZWZkXHU2ZWY2XHU2ZjM5XHU2ZjFjXHU2ZWZjXHU2ZjNhXHU2ZjFmXHU2ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThm'@;
put 'XHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQzXHU3MzRkXHU3MzUxXHU3MzRjXHU3NDYyXHU3NDczXHU3NDcxXHU3NDc1XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3'@;
put 'NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3NzZlXHU3NzgwXHU3NzZmXHU3NzdlXHU3NzgzXHU3OGIyXHU3OGFhXHU3OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0'@;
put 'XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2XHU3OTk1XHU3OTk0XHU3OTkzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI2XVtwXV09NTc4NTYrcCxiWzU3ODU2K3BdPV9bMjI2XVtwXSk7Zm9y'@;
put 'KF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3Yjhh'@;
put 'XHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3'@;
put 'ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDI0XHU4MDVkXHU4'@;
put 'MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlk'@;
put 'XHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4'@;
put 'NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3'@;
put 'XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI3XVtwXV09NTgxMTIrcCxiWzU4MTEyK3BdPV9b'@;
put 'MjI3XVtwXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThm'@;
put 'XHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5'@;
put 'MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5'@;
put 'MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmEx'@;
put 'XHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5'@;
put 'OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1Mjhj'@;
put 'XHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI4XVtwXV09NTgzNjgrcCxi'@;
put 'WzU4MzY4K3BdPV9bMjI4XVtwXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjVhXHU1NjQwXHU1NjMzXHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFiXHU1ODlkXHU1OGIx'@;
put 'XHU1OGEwXHU1OGEzXHU1OGFmXHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1YjAyXHU1YWY5XHU1YjAxXHU1YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1ZGEyXHU1ZDkzXHU1'@;
put 'ZDk1XHU1ZGEwXHU1ZDljXHU1ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVjXHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5XHU1ZmIyXHU2MThiXHU2MTgzXHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU2MTliXHU2MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2MTkyXHU2MWFhXHU2MWExXHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZlXHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4'@;
put 'XHU2NGIxXHU2NDk4XHU2NTc2XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIyXHU2NWIzXHU2NmI1XHU2NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYxXHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2'@;
put 'YTFiXHU2YTFkXHU2OWZlXHU2YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2OWY3XHU2OWU3XHU2YTQwXHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZjXHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1'@;
put 'XHU2YmEzXHU2YmEyXHU2YmE2XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAyXHU2ZjQxXHU2ZjI2XHU2ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI5XVtw'@;
put 'XV09NTg2MjQrcCxiWzU4NjI0K3BdPV9bMjI5XVtwXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2Zjgy'@;
put 'XHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3'@;
put 'MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3Njlj'@;
put 'XHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3'@;
put 'YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVl'@;
put 'XHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4MTlmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzBdW3BdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihEW19bMjMwXVtwXV09NTg4ODArcCxiWzU4ODgwK3BdPV9bMjMwXVtwXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUy'@;
put 'XHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4'@;
put 'NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZj'@;
put 'XHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4'@;
put 'OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2Rk'@;
put 'XHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzFdW3BdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihEW19bMjMxXVtwXV09NTkxMzYrcCxiWzU5MTM2K3BdPV9bMjMxXVtwXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFh'@;
put 'XHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3XHU5MDczXHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5MTJiXHU5MTI5XHU5MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5MTg1XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5'@;
put 'MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5MmRmXHU5MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVmXHU5MmMyXHU5MmU4XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2XHU5MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQx'@;
put 'XHU5MmQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmI1XHU5MmUxXHU5MmM2XHU5MmI0XHU5NTdjXHU5NWFjXHU5NWFiXHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1XHU5NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5NzhlXHU5Nzg4XHU5N2Qw'@;
put 'XHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3XHU5OGIyXHU5OTA4XHU5OGZhXHU5OTExXHU5OTE0XHU5OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5OWQzXHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2XHU5OWQ4XHU5OWNiXHU5'@;
put 'OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5YjQzXHU5YjY3XHU5Yjc0XHU5YjcxXHU5YjY2XHU5Yjc2XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2ZjXHU5Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5ZDA3XHU5ZDAwXHU5Y2Y5'@;
put 'XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFjXHU1MTEzXHU1MTE3XHU1MTFhXHU1MTExXHU1MWRlXHU1MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMyXS5sZW5ndGg7KytwKTY1NTMzIT09'@;
put 'X1syMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMyXVtwXV09NTkzOTIrcCxiWzU5MzkyK3BdPV9bMjMyXVtwXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1Njcy'@;
put 'XHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIxXHU1'@;
put 'ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2MWM2'@;
put 'XHU2MWMxXHU2MWNjXHU2MWJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2NWEy'@;
put 'XHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNmXHU2'@;
put 'YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2ZmFk'@;
put 'XHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMzXS5sZW5ndGg7'@;
put 'KytwKTY1NTMzIT09X1syMzNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMzXVtwXV09NTk2NDgrcCxiWzU5NjQ4K3BdPV9bMjMzXVtwXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmEyXHU2ZmM5XHU2ZmFi'@;
put 'XHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3'@;
put 'MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3Nzlj'@;
put 'XHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4'@;
put 'XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3'@;
put 'ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZj'@;
put 'XHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b'@;
put 'MjM0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM0XVtwXV09NTk5MDQrcCxiWzU5OTA0K3BdPV9bMjM0XVtwXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQw'@;
put 'XHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4NTQ3XHU4NTYzXHU4NTNlXHU4NTViXHU4NTcxXHU4NTRlXHU4NTZlXHU4NTc1XHU4NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0XHU4NzliXHU4'@;
put 'NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2XHU4Nzk4XHU4Nzc5XHU4Nzg3XHU4N2EzXHU4Nzg1XHU4NzkwXHU4NzkxXHU4NzlkXHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4OTMxXHU4OTIy'@;
put 'XHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4YWUwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWUyXHU4YWYyXHU4YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZm'@;
put 'XHU4YWVmXHU4YWZiXHU4YzkxXHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4Y2YwXHU4Y2YzXHU4ZDZjXHU4ZDZlXHU4ZGE1XHU4ZGE3XHU4ZTMzXHU4ZTNlXHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4'@;
put 'ZjJlXHU4ZjM1XHU4ZjMyXHU4ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdiXHU5MDg2XHU5MGZhXHU5MTMzXHU5MTM1XHU5MTM2XHU5MTkzXHU5MTkwXHU5MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNj'@;
put 'XHU5MzFiXHU5MzIzXHU5MzEyXHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5MmNiXHU5MzFkXHU5MmZhXHU5MzI1XHU5MzEzXHU5MmY5XHU5MmY3XHU5MzM0XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjXHVmZmZkIi5zcGxpdCgi'@;
put 'IikscD0wO3AhPV9bMjM1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM1XVtwXV09NjAxNjArcCxiWzYwMTYwK3BdPV9bMjM1XVtwXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5'@;
put 'ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3'@;
put 'XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEw'@;
put 'XHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1'@;
put 'NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUw'@;
put 'XHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlXHVm'@;
put 'ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM2XVtwXV09NjA0MTYrcCxiWzYwNDE2K3BdPV9bMjM2XVtwXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2'@;
put 'ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0'@;
put 'XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYy'@;
put 'XHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3'@;
put 'YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1'@;
put 'XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4'@;
put 'NTlhXHU4NTllXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM3XVtwXV09NjA2NzIrcCxiWzYwNjcyK3BdPV9bMjM3XVtwXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTc3XHU4NTdjXHU4NTg5XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4NTg2XHU4NThkXHU4NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4NTc2XHU4NTk4XHU4NTkwXHU4'@;
put 'NTlmXHU4NjY4XHU4N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2MyXHU4N2NjXHU4N2I3XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2JkXHU4N2RlXHU4N2IyXHU4OTM1'@;
put 'XHU4OTMzXHU4OTNjXHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFkXHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjE4XHU4YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEy'@;
put 'XHU4YjE1XHU4YjA3XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFjXHU4YjEzXHU4YjFhXHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUwXHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5'@;
put 'MTM4XHU5MTlhXHU5MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5MWExXHU5MTlkXHU5MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5'@;
put 'XHU5MzU3XHU5MzU1XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3XHU5MzdiXHU5MzYxXHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFlXHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5'@;
put 'NzE5XHU5NzlhXHU5N2ExXHU5NzljXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM4XVtwXV09NjA5MjgrcCxiWzYwOTI4K3BdPV9bMjM4XVtwXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5'@;
put 'OTMwXHU5OTk4XHU5OWEzXHU5OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmEx'@;
put 'XHU5YmE1XHU5YmE0XHU5Yjg2XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQw'@;
put 'XHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1'@;
put 'YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1'@;
put 'XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3'@;
put 'MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM5XVtwXV09NjExODQrcCxiWzYxMTg0K3BdPV9bMjM5XVtwXSk7Zm9yKF9bMjQwXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3'@;
put 'NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVj'@;
put 'XHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0'@;
put 'XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4'@;
put 'N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3'@;
put 'XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4'@;
put 'ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQwXVtwXV09NjE0NDArcCxiWzYxNDQwK3BdPV9bMjQwXVtwXSk7'@;
put 'Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4ZTVkXHU4ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5'@;
put 'MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5MzliXHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2XHU5Mzk1XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5MzhkXHU5M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1'@;
put 'XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMyXHU5NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5N2FlXHU5N2E4XHU5N2FiXHU5N2E0XHU5N2FhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2EyXHU5N2E1'@;
put 'XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5OTNhXHU5YTBmXHU5YTBiXHU5YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5YTA1XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRjXHU5YjA4XHU5YjA0XHU5YjA1XHU5'@;
put 'YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMzXHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4XHU5YmQzXHU5YmI2XHU5YmM0XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRmXHU5ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5ZDU2XHU5ZDRjXHU5ZDU3XHU5ZDUy'@;
put 'XHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5ZjJiXHU5ZjJhXHU5ZjI5XHU5ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1Mjk2XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFkXHU1NmE2XHU1NmE3XHU1NmFhXHU1'@;
put 'NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNmXHU1ZGMzXHU1ZTcwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQxXVtwXV09NjE2OTYrcCxiWzYxNjk2K3Bd'@;
put 'PV9bMjQxXVtwXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3XHU2YWUwXHU2'@;
put 'YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3MDJhXHU3MjBj'@;
put 'XHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU3OTIxXHU3OTFjXHU3OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRhXHU3ZjgzXHU3'@;
put 'Zjg2XHU3ZmI3XHU3ZmZkXHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4NWYwXHU4NWU2'@;
put 'XHU4NWVmXHU4NWRlXHU4NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5XHU4OTg4XHU4'@;
put 'OWI3XHU4OWI2XHU4OWY2XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQyXVtwXV09NjE5NTIr'@;
put 'cCxiWzYxOTUyK3BdPV9bMjQyXVtwXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4'@;
put 'ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2Vj'@;
put 'XHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5'@;
put 'YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1'@;
put 'XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5'@;
put 'ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQz'@;
put 'XVtwXV09NjIyMDgrcCxiWzYyMjA4K3BdPV9bMjQzXVtwXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVmXHU1ZmMwXHU1ZmMxXHU2'@;
put 'MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRmXHU2NmU4XHU2NmUzXHU2NmU0XHU2YWYzXHU2YWYwXHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYxXHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3MDNmXHU3MDNhXHU3MDM5'@;
put 'XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3MjE0XHU3MmE4XHU3MzdkXHU3MzdjXHU3NGJhXHU3NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWIyXHU3YTZlXHU3YTZjXHU3YTZkXHU3YWY3XHU3YzQ5XHU3YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3Y2VlXHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4'@;
put 'NjIyXHU4NWZmXHU4NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4NjA0XHU4NjA5XHU4NjA1XHU4NjBjXHU4NWZkXHU4ODE5XHU4ODEwXHU4ODExXHU4ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1'@;
put 'XHU4YjY3XHU4YjZkXHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5XHU4ZjU2XHU4ZjU3XHU4ZjU1XHU4ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5MTQxXHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5'@;
put 'NDEwXHU5NDI4XHU5NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5NDA3XHU5NDBlXHU5NDE2XHU5NDEyXHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBhXHU5M2ZmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDRdW3BdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihEW19bMjQ0XVtwXV09NjI0NjQrcCxiWzYyNDY0K3BdPV9bMjQ0XVtwXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5'@;
put 'NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJk'@;
put 'XHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5'@;
put 'ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4'@;
put 'XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3'@;
put 'ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFlXHU4NjI1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDVdW3Bd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihEW19bMjQ1XVtwXV09NjI3MjArcCxiWzYyNzIwK3BdPV9bMjQ1XVtwXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4'@;
put 'ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5'@;
put 'XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5'@;
put 'YTQxXHU5YTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5'@;
put 'ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4'@;
put 'XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3'@;
put 'MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ2XS5sZW5ndGg7KytwKTY1NTMz'@;
put 'IT09X1syNDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ2XVtwXV09NjI5NzYrcCxiWzYyOTc2K3BdPV9bMjQ2XVtwXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2Y0XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3'@;
put 'Zjg3XHU4MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJjXHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcxXHU4OWJmXHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4YjdmXHU4ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlh'@;
put 'XHU4ZTkyXHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5NDQ4XHU5NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5OTViXHU5YTRlXHU5YTUzXHU5YTU0XHU5'@;
put 'YTRjXHU5YTRmXHU5YTQ4XHU5YTRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5'@;
put 'YzM3XHU5YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5ZGRiXHU5ZGQyXHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZi'@;
put 'XHU5Zjk1XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4XHU1OGU3XHU1OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEyXHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3'@;
put 'MzgzXHU3NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3ZTk1XHU4MjZjXHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMwXHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4OTczXHU4OWZlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ3XS5sZW5n'@;
put 'dGg7KytwKTY1NTMzIT09X1syNDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ3XVtwXV09NjMyMzIrcCxiWzYzMjMyK3BdPV9bMjQ3XVtwXSk7Zm9yKF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjhjXHU4YjhlXHU4'@;
put 'YjhiXHU4Yjg4XHU4YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1'@;
put 'XHU5YzU5XHU5YzRjXHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5'@;
put 'ZjFjXHU5ZjM4XHU5ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3'@;
put 'MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4'@;
put 'XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5'@;
put 'ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah'@;
put 'PV9bMjQ4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ4XVtwXV09NjM0ODgrcCxiWzYzNDg4K3BdPV9bMjQ4XVtwXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3'@;
put 'ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZl'@;
put 'XHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5'@;
put 'Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5'@;
put 'ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgz'@;
put 'XHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUy'@;
put 'NTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzXHVmZmZkIi5zcGxp'@;
put 'dCgiIikscD0wO3AhPV9bMjQ5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ5XVtwXV09NjM3NDQrcCxiWzYzNzQ0K3BdPV9bMjQ5XVtwXSk7cmV0dXJue2VuYzpELGRlYzpifX0oKSxKWzEyNTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4'@;
put 'MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV'@;
put 'VldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAx'@;
put 'Y1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1'@;
put 'MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhk'@;
put 'M1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0'@;
put 'XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0o'@;
put 'KSxKWzEyNTFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAx'@;
put 'MjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQw'@;
put 'Y1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0XHUwNDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0'@;
put 'XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQx'@;
put 'OVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1'@;
put 'MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiIsRD1b'@;
put 'XSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTI1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgw'@;
put 'N1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xt'@;
put 'bm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0'@;
put 'XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNc'@;
put 'eGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4'@;
put 'ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0'@;
put 'KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMjUzXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThc'@;
put 'eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZc'@;
put 'dTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1'@;
put 'XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNc'@;
put 'dTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAz'@;
put 'YWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2Fc'@;
put 'dTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzEyNTRdPWZ1bmN0aW9uKCl7Zm9yKHZh'@;
put 'ciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktM'@;
put 'TU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1'@;
put 'MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhi'@;
put 'NFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1'@;
put 'MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiIsRD1bXSxfPXt9LHA9MDsy'@;
put 'NTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTI1NV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZc'@;
put 'clx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5'@;
put 'ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIy'@;
put 'XHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhi'@;
put 'Zlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1ZmZmZFx1MDViYlx1MDViY1x1MDViZFx1MDViZVx1MDViZlx1MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVl'@;
put 'Nlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgp'@;
put 'LEpbMTI1Nl09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEy'@;
put 'MzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2'@;
put 'XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNc'@;
put 'eGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1'@;
put 'MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUw'@;
put 'NjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJB'@;
put 'dChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTI1N109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4'@;
put 'XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2'@;
put 'XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVmZmZkXHhhMFx1ZmZmZFx4YTJc'@;
put 'eGEzXHhhNFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEy'@;
put 'XHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUw'@;
put 'MTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5IixEPVtdLF89e30scD0wOzI1NiE9cDsr'@;
put 'K3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMjU4XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4'@;
put 'MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4'@;
put 'N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRc'@;
put 'dTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMx'@;
put 'XHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZc'@;
put 'eGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihf'@;
put 'W2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxZTRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZc'@;
put 'eDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNc'@;
put 'eGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4'@;
put 'YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1'@;
put 'M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1'@;
put 'ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJB'@;
put 'dChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTAwMDZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFk'@;
put 'XHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGI5XHhiMlx4YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4'@;
put 'XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1MDNhMFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUw'@;
put 'Mzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAzYWNcdTAzOWRceGFjXHUwMzlmXHUwM2ExXHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3'@;
put 'XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNhZlx1MDNjY1x1MDM4Zlx1MDNjZFx1MDNiMVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNi'@;
put 'N1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1MDNjNVx1MDNiNlx1MDNjYVx1MDNjYlx1MDM5MFx1MDNiMFx1ZmZmZCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7Kytw'@;
put 'KTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTAwMDddPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgw'@;
put 'Zlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3'@;
put 'Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1'@;
put 'MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1'@;
put 'NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3'@;
put 'XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUw'@;
put 'NDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChw'@;
put 'KTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTAwMDhdPWZ1bmN0aW9uKCl7dmFyIHAsYj1bXSxEPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgx'@;
put 'OVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx1ZjhkOFx1ZjhkOVx1ZjhkYVx1ZjhkYlx1ZjhkY1x1Zjhk'@;
put 'ZFx1ZjhkZVx1ZjhkZlx1ZjhlMFx1ZjhlMVx1ZjhlMlx1ZjhlM1x1ZjhlNFx1ZjhlNVx1ZjhlNlx1ZjhlN1x1ZjhlOFx1ZjhlOVx1ZjhlYVx1ZjhlYlx1ZjhlY1x1ZjhlZFx1ZjhlZVx1ZjhlZlx1ZjhmMFx1ZjhmMVx1ZjhmMlx1ZjhmM1x1ZjhmNFx1ZjhmNVx1ZjhmNlx1ZjhmN1x1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjhmOFx1ZjhmOVx1ZjhmYVx1ZjhmYlx1ZjhmY1x1ZjhmZFx1ZjhmZVx1ZjhmZiIuc3BsaXQoIiIpLHA9MDtwIT1fWzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMF1bcF1dPTArcCxiWzArcF09X1swXVtwXSk7'@;
put 'Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAx'@;
put 'XHUzMDAyXHUzMGZiXHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNVx1ZmY1ZVx1ZmZmZFx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAx'@;
put 'MFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1'@;
put 'MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjVi'@;
put 'M1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2MV1bcF1dPTQxMjE2K3AsYls0MTIxNitwXT1fWzE2MV1bcF0pO2Zv'@;
put 'cihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5'@;
put 'NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1'@;
put 'MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2'@;
put 'NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2Ml1bcF1dPTQxNDcyK3AsYls0MTQ3MitwXT1f'@;
put 'WzE2Ml1bcF0pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYx'@;
put 'Y1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1'@;
put 'ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1'@;
put 'M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2M11bcF1dPTQxNzI4K3As'@;
put 'Yls0MTcyOCtwXT1fWzE2M11bcF0pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1'@;
put 'YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1'@;
put 'MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5'@;
put 'MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2NF1b'@;
put 'cF1dPTQxOTg0K3AsYls0MTk4NCtwXT1fWzE2NF1bcF0pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBi'@;
put 'OFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1'@;
put 'MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBl'@;
put 'Zlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY1XVtwXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoRFtfWzE2NV1bcF1dPTQyMjQwK3AsYls0MjI0MCtwXT1fWzE2NV1bcF0pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNh'@;
put 'N1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1'@;
put 'MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY2XVtwXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoRFtfWzE2Nl1bcF1dPTQyNDk2K3AsYls0MjQ5NitwXT1fWzE2Nl1bcF0pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQy'@;
put 'Mlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0'@;
put 'OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2N10ubGVuZ3RoOysrcCk2NTUzMyE9'@;
put 'PV9bMTY3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2N11bcF1dPTQyNzUyK3AsYls0Mjc1MitwXT1fWzE2N11bcF0pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZc'@;
put 'dTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1'@;
put 'MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY4XVtwXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoRFtfWzE2OF1bcF1dPTQzMDA4K3AsYls0MzAwOCtwXT1fWzE2OF1bcF0pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUx'@;
put 'MFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1'@;
put 'MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0'@;
put 'N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OV0ubGVuZ3RoOysrcCk2NTUzMyE9'@;
put 'PV9bMTY5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2OV1bcF1dPTQzMjY0K3AsYls0MzI2NCtwXT1fWzE2OV1bcF0pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4'@;
put 'OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1'@;
put 'NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYz'@;
put 'NFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Nl0ubGVuZ3Ro'@;
put 'OysrcCk2NTUzMyE9PV9bMTc2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3Nl1bcF1dPTQ1MDU2K3AsYls0NTA1NitwXT1fWzE3Nl1bcF0pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1'@;
put 'MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1'@;
put 'NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZh'@;
put 'OVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f'@;
put 'WzE3N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3N11bcF1dPTQ1MzEyK3AsYls0NTMxMitwXT1fWzE3N11bcF0pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYy'@;
put 'Zlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1'@;
put 'NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNk'@;
put 'Mlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLHA9MDtwIT1fWzE3OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3OF1bcF1dPTQ1NTY4K3AsYls0NTU2OCtwXT1fWzE3OF1bcF0pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4'@;
put 'NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1'@;
put 'NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBi'@;
put 'ZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3OV1bcF1dPTQ1ODI0K3AsYls0NTgyNCtwXT1fWzE3OV1bcF0pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1Njkz'@;
put 'ZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1'@;
put 'OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYw'@;
put 'MVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1'@;
put 'NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4MF1bcF1dPTQ2MDgwK3AsYls0NjA4MCtwXT1fWzE4MF1bcF0pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBj'@;
put 'Nlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1'@;
put 'NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThh'@;
put 'MFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1'@;
put 'ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4MV1bcF1dPTQ2MzM2K3AsYls0NjMzNitwXT1fWzE4MV1bcF0pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYw'@;
put 'ZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1'@;
put 'NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0'@;
put 'MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1'@;
put 'NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4Ml1bcF1dPTQ2NTkyK3AsYls0NjU5MitwXT1fWzE4Ml1bcF0pO2ZvcihfWzE4M109'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0'@;
put 'Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1'@;
put 'OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4'@;
put 'OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1'@;
put 'NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4M11bcF1dPTQ2ODQ4K3AsYls0Njg0OCtwXT1fWzE4M11bcF0p'@;
put 'O2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2ZVx1NmRh'@;
put 'YVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1'@;
put 'NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2Vi'@;
put 'Mlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1'@;
put 'OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4NF1bcF1dPTQ3MTA0K3AsYls0NzEwNCtw'@;
put 'XT1fWzE4NF1bcF0pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1'@;
put 'OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1Njhm'@;
put 'YVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1'@;
put 'OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4NV1bcF1dPTQ3MzYw'@;
put 'K3AsYls0NzM2MCtwXT1fWzE4NV1bcF0pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1'@;
put 'NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2'@;
put 'Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1'@;
put 'NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4'@;
put 'Nl1bcF1dPTQ3NjE2K3AsYls0NzYxNitwXT1fWzE4Nl1bcF0pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1'@;
put 'Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMy'@;
put 'NVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1'@;
put 'NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg3XVtwXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoRFtfWzE4N11bcF1dPTQ3ODcyK3AsYls0Nzg3MitwXT1fWzE4N11bcF0pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1'@;
put 'N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3'@;
put 'M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1'@;
put 'NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg4XVtw'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4OF1bcF1dPTQ4MTI4K3AsYls0ODEyOCtwXT1fWzE4OF1bcF0pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1'@;
put 'OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4'@;
put 'M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1'@;
put 'OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OV0ubGVuZ3RoOysrcCk2NTUz'@;
put 'MyE9PV9bMTg5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4OV1bcF1dPTQ4Mzg0K3AsYls0ODM4NCtwXT1fWzE4OV1bcF0pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1'@;
put 'OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMz'@;
put 'MVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1'@;
put 'OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MF0ubGVu'@;
put 'Z3RoOysrcCk2NTUzMyE9PV9bMTkwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5MF1bcF1dPTQ4NjQwK3AsYls0ODY0MCtwXT1fWzE5MF1bcF0pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1'@;
put 'NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0'@;
put 'Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1'@;
put 'OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw'@;
put 'IT1fWzE5MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5MV1bcF1dPTQ4ODk2K3AsYls0ODg5NitwXT1fWzE5MV1bcF0pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1'@;
put 'NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBj'@;
put 'ZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1'@;
put 'NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLHA9MDtwIT1fWzE5Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5Ml1bcF1dPTQ5MTUyK3AsYls0OTE1MitwXT1fWzE5Ml1bcF0pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1'@;
put 'OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFj'@;
put 'ZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1'@;
put 'OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2Fi'@;
put 'Zlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5M11bcF1dPTQ5NDA4K3AsYls0OTQwOCtwXT1fWzE5M11bcF0pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1'@;
put 'OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2'@;
put 'MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1'@;
put 'N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZm'@;
put 'Y1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5NF1bcF1dPTQ5NjY0K3AsYls0OTY2NCtwXT1fWzE5NF1bcF0pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1'@;
put 'NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTli'@;
put 'OVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1'@;
put 'NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRl'@;
put 'ZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5NV1bcF1dPTQ5OTIwK3AsYls0OTkyMCtwXT1fWzE5NV1bcF0pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1'@;
put 'NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2'@;
put 'N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1'@;
put 'NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0'@;
put 'ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5Nl1bcF1dPTUwMTc2K3AsYls1MDE3NitwXT1fWzE5Nl1bcF0pO2ZvcihfWzE5'@;
put 'N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlN1x1NmNkZVx1NzI1Ylx1'@;
put 'NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRi'@;
put 'NFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1'@;
put 'ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1Nzhi'@;
put 'MFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5N11bcF1dPTUwNDMyK3AsYls1MDQzMitwXT1fWzE5N11b'@;
put 'cF0pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU2NFx1'@;
put 'ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3'@;
put 'M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1'@;
put 'NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQy'@;
put 'Zlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5OF1bcF1dPTUwNjg4K3AsYls1MDY4'@;
put 'OCtwXT1fWzE5OF1bcF0pO2ZvcihfWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1'@;
put 'NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1'@;
put 'NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQw'@;
put 'M1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5OV1bcF1dPTUw'@;
put 'OTQ0K3AsYls1MDk0NCtwXT1fWzE5OV1bcF0pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhk'@;
put 'OVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1'@;
put 'NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1'@;
put 'ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtf'@;
put 'WzIwMF1bcF1dPTUxMjAwK3AsYls1MTIwMCtwXT1fWzIwMF1bcF0pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1'@;
put 'ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1'@;
put 'NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRm'@;
put 'MVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAxXVtwXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoRFtfWzIwMV1bcF1dPTUxNDU2K3AsYls1MTQ1NitwXT1fWzIwMV1bcF0pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5'@;
put 'ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1'@;
put 'NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5'@;
put 'Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAy'@;
put 'XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwMl1bcF1dPTUxNzEyK3AsYls1MTcxMitwXT1fWzIwMl1bcF0pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3'@;
put 'YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1'@;
put 'OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4'@;
put 'MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwM10ubGVuZ3RoOysrcCk2'@;
put 'NTUzMyE9PV9bMjAzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwM11bcF1dPTUxOTY4K3AsYls1MTk2OCtwXT1fWzIwM11bcF0pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYy'@;
put 'Ylx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1'@;
put 'NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBk'@;
put 'NVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNF0u'@;
put 'bGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwNF1bcF1dPTUyMjI0K3AsYls1MjIyNCtwXT1fWzIwNF1bcF0pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2Fl'@;
put 'NVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1'@;
put 'OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNh'@;
put 'OVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9'@;
put 'MDtwIT1fWzIwNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwNV1bcF1dPTUyNDgwK3AsYls1MjQ4MCtwXT1fWzIwNV1bcF0pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJj'@;
put 'N1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1'@;
put 'N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2'@;
put 'Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLHA9MDtwIT1fWzIwNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwNl1bcF1dPTUyNzM2K3AsYls1MjczNitwXT1fWzIwNl1bcF0pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1'@;
put 'MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1'@;
put 'OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3'@;
put 'Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1'@;
put 'NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwN11bcF1dPTUyOTkyK3AsYls1Mjk5MitwXT1fWzIwN11bcF0pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5'@;
put 'Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1'@;
put 'NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1Njcz'@;
put 'ZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1'@;
put 'NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwOF1bcF1dPTUzMjQ4K3AsYls1MzI0OCtwXT1fWzIwOF1bcF0pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2'@;
put 'Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1'@;
put 'ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3'@;
put 'M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1'@;
put 'NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwOV1bcF1dPTUzNTA0K3AsYls1MzUwNCtwXT1fWzIwOV1bcF0pO2ZvcihfWzIxMF09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMy'@;
put 'M1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1'@;
put 'NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFj'@;
put 'Nlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1'@;
put 'OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxMF1bcF1dPTUzNzYwK3AsYls1Mzc2MCtwXT1fWzIxMF1bcF0pO2Zvcihf'@;
put 'WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM3MFx1ODJmMVx1NmEz'@;
put 'MVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1'@;
put 'NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4'@;
put 'ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1'@;
put 'OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjExXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxMV1bcF1dPTU0MDE2K3AsYls1NDAxNitwXT1fWzIx'@;
put 'MV1bcF0pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ3'@;
put 'NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1'@;
put 'OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3'@;
put 'ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1'@;
put 'OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxMl1bcF1dPTU0MjcyK3AsYls1'@;
put 'NDI3MitwXT1fWzIxMl1bcF0pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1'@;
put 'NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2'@;
put 'OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1'@;
put 'OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxM11bcF1d'@;
put 'PTU0NTI4K3AsYls1NDUyOCtwXT1fWzIxM11bcF0pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1'@;
put 'NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3'@;
put 'N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1'@;
put 'OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE0XVtwXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'RFtfWzIxNF1bcF1dPTU0Nzg0K3AsYls1NDc4NCtwXT1fWzIxNF1bcF0pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1'@;
put 'OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVk'@;
put 'M1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1'@;
put 'NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE1XVtwXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoRFtfWzIxNV1bcF1dPTU1MDQwK3AsYls1NTA0MCtwXT1fWzIxNV1bcF0pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1'@;
put 'NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMy'@;
put 'Nlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1'@;
put 'NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b'@;
put 'MjE2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxNl1bcF1dPTU1Mjk2K3AsYls1NTI5NitwXT1fWzIxNl1bcF0pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1'@;
put 'NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBh'@;
put 'NVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1'@;
put 'OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxN10ubGVuZ3RoOysr'@;
put 'cCk2NTUzMyE9PV9bMjE3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxN11bcF1dPTU1NTUyK3AsYls1NTU1MitwXT1fWzIxN11bcF0pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1'@;
put 'OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMx'@;
put 'NFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1'@;
put 'OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIx'@;
put 'OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxOF1bcF1dPTU1ODA4K3AsYls1NTgwOCtwXT1fWzIxOF1bcF0pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1'@;
put 'OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFm'@;
put 'Y1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1'@;
put 'NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LHA9MDtwIT1fWzIxOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxOV1bcF1dPTU2MDY0K3AsYls1NjA2NCtwXT1fWzIxOV1bcF0pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1'@;
put 'NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJj'@;
put 'Ylx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1'@;
put 'ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyMF1bcF1dPTU2MzIwK3AsYls1NjMyMCtwXT1fWzIyMF1bcF0pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1'@;
put 'ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQx'@;
put 'Y1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1'@;
put 'ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUx'@;
put 'Zlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyMV1bcF1dPTU2NTc2K3AsYls1NjU3NitwXT1fWzIyMV1bcF0pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1'@;
put 'ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYw'@;
put 'OFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1'@;
put 'NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1'@;
put 'ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyMl1bcF1dPTU2ODMyK3AsYls1NjgzMitwXT1fWzIyMl1bcF0pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1'@;
put 'NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1'@;
put 'N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1'@;
put 'NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2'@;
put 'ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyM11bcF1dPTU3MDg4K3AsYls1NzA4OCtwXT1fWzIyM11bcF0pO2ZvcihfWzIyNF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1'@;
put 'NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVl'@;
put 'Y1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1'@;
put 'NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcx'@;
put 'Y1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNF1bcF1dPTU3MzQ0K3AsYls1NzM0NCtwXT1fWzIyNF1bcF0pO2Zv'@;
put 'cihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUzN1x1NWU0NFx1'@;
put 'NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNj'@;
put 'Ylx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1'@;
put 'NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJl'@;
put 'OFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNV1bcF1dPTU3NjAwK3AsYls1NzYwMCtwXT1f'@;
put 'WzIyNV1bcF0pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2'@;
put 'N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1'@;
put 'NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAw'@;
put 'Zlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNl1bcF1dPTU3ODU2K3As'@;
put 'Yls1Nzg1NitwXT1fWzIyNl1bcF0pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEy'@;
put 'Ylx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1'@;
put 'OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNm'@;
put 'N1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyN11b'@;
put 'cF1dPTU4MTEyK3AsYls1ODExMitwXT1fWzIyN11bcF0pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5'@;
put 'M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1'@;
put 'NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVm'@;
put 'OVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI4XVtwXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoRFtfWzIyOF1bcF1dPTU4MzY4K3AsYls1ODM2OCtwXT1fWzIyOF1bcF0pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJh'@;
put 'NVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1'@;
put 'OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1'@;
put 'OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI5XVtwXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoRFtfWzIyOV1bcF1dPTU4NjI0K3AsYls1ODYyNCtwXT1fWzIyOV1bcF0pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEz'@;
put 'Mlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1'@;
put 'NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5'@;
put 'MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMF0ubGVuZ3RoOysrcCk2NTUzMyE9'@;
put 'PV9bMjMwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzMF1bcF1dPTU4ODgwK3AsYls1ODg4MCtwXT1fWzIzMF1bcF0pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2Vl'@;
put 'ZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1'@;
put 'N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNi'@;
put 'M1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMV0ubGVuZ3Ro'@;
put 'OysrcCk2NTUzMyE9PV9bMjMxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzMV1bcF1dPTU5MTM2K3AsYls1OTEzNitwXT1fWzIzMV1bcF0pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4'@;
put 'Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1'@;
put 'Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2'@;
put 'NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f'@;
put 'WzIzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzMl1bcF1dPTU5MzkyK3AsYls1OTM5MitwXT1fWzIzMl1bcF0pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2'@;
put 'Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1'@;
put 'NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4'@;
put 'NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLHA9MDtwIT1fWzIzM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzM11bcF1dPTU5NjQ4K3AsYls1OTY0OCtwXT1fWzIzM11bcF0pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIy'@;
put 'MVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1'@;
put 'ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0'@;
put 'OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzNF1bcF1dPTU5OTA0K3AsYls1OTkwNCtwXT1fWzIzNF1bcF0pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMw'@;
put 'N1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1'@;
put 'ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEz'@;
put 'Nlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1'@;
put 'ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzNV1bcF1dPTYwMTYwK3AsYls2MDE2MCtwXT1fWzIzNV1bcF0pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1'@;
put 'OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1'@;
put 'NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIx'@;
put 'ZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1'@;
put 'NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzNl1bcF1dPTYwNDE2K3AsYls2MDQxNitwXT1fWzIzNl1bcF0pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1'@;
put 'OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1'@;
put 'NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1Nzhk'@;
put 'NFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1'@;
put 'Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzN11bcF1dPTYwNjcyK3AsYls2MDY3MitwXT1fWzIzN11bcF0pO2ZvcihfWzIzOF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4'@;
put 'ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1'@;
put 'N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRi'@;
put 'Mlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1'@;
put 'OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzOF1bcF1dPTYwOTI4K3AsYls2MDkyOCtwXT1fWzIzOF1bcF0p'@;
put 'O2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlOVx1OTRl'@;
put 'Ylx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1'@;
put 'OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1'@;
put 'NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1'@;
put 'NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzOV1bcF1dPTYxMTg0K3AsYls2MTE4NCtw'@;
put 'XT1fWzIzOV1bcF0pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1'@;
put 'OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3'@;
put 'MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1'@;
put 'NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0MF1bcF1dPTYxNDQw'@;
put 'K3AsYls2MTQ0MCtwXT1fWzI0MF1bcF0pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1'@;
put 'N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhm'@;
put 'ZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1'@;
put 'ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0'@;
put 'MV1bcF1dPTYxNjk2K3AsYls2MTY5NitwXT1fWzI0MV1bcF0pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1'@;
put 'ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZm'@;
put 'NFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1'@;
put 'ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQyXVtwXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoRFtfWzI0Ml1bcF1dPTYxOTUyK3AsYls2MTk1MitwXT1fWzI0Ml1bcF0pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1'@;
put 'ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2Iz'@;
put 'MVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1'@;
put 'N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQzXVtw'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0M11bcF1dPTYyMjA4K3AsYls2MjIwOCtwXT1fWzI0M11bcF0pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1'@;
put 'ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5'@;
put 'ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1'@;
put 'N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NF0ubGVuZ3RoOysrcCk2NTUz'@;
put 'MyE9PV9bMjQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0NF1bcF1dPTYyNDY0K3AsYls2MjQ2NCtwXT1fWzI0NF1bcF0pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1'@;
put 'OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRl'@;
put 'Y1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1'@;
put 'OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NV0ubGVu'@;
put 'Z3RoOysrcCk2NTUzMyE9PV9bMjQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0NV1bcF1dPTYyNzIwK3AsYls2MjcyMCtwXT1fWzI0NV1bcF0pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1'@;
put 'OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNj'@;
put 'YVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1'@;
put 'OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw'@;
put 'IT1fWzI0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0Nl1bcF1dPTYyOTc2K3AsYls2Mjk3NitwXT1fWzI0Nl1bcF0pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1'@;
put 'OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0'@;
put 'M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1'@;
put 'OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLHA9MDtwIT1fWzI0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0N11bcF1dPTYzMjMyK3AsYls2MzIzMitwXT1fWzI0N11bcF0pO3JldHVybntlbmM6RCxkZWM6Yn19KCksSlsxMDAyOV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9Ilww'@;
put 'XHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT'@;
put 'VFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx1MDEwMFx1MDEwMVx4YzlcdTAxMDRceGQ2XHhkY1x4ZTFcdTAxMDVcdTAxMGNceGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhlOVx1MDE3OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNc'@;
put 'dTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZceGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1MDEyZVx1MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1'@;
put 'MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1MDE0M1x4YWNcdTIyMWFcdTAxNDRcdTAxNDdcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhcdTAxNTBceGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUy'@;
put 'MDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1OVx1MDE1Nlx1MDE1N1x1MDE2MFx1MjAxYVx1MjAxZVx1MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAxNjRcdTAxNjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAx'@;
put 'NmJcdTAxNmVceGRhXHUwMTZmXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAxNDFcdTAxN2NcdTAxMjJcdTAyYzciLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5j'@;
put 'aGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzEwMDc5XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFj'@;
put 'XHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1'@;
put 'XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUy'@;
put 'MjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFk'@;
put 'XHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUw'@;
put 'MmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzEwMDgx'@;
put 'XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5'@;
put 'Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhm'@;
put 'MVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1'@;
put 'MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDEx'@;
put 'ZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRh'@;
put 'XHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMjg1OTFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJc'@;
put 'MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS'@;
put 'U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDlj'@;
put 'XHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVc'@;
put 'eGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4'@;
put 'ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6'@;
put 'XyxkZWM6RH19KCksY2UuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBBR0U+InUiJiYoY2UuZXhwb3J0cz1KKSxmdW5jdGlvbihiLEQpeyJ1c2Ugc3RyaWN0IjtpZih0eXBlb2YgSj4idSIpe3ZhciBfPUo7Y2UuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBB'@;
put 'R0U+InUiP2NlLmV4cG9ydHM9RChfKTpiLmNwdGFibGU9RChfKX1lbHNlIEo9RChKKX0odGhpcyxmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7dmFyIEQ9ezEyMDA6InV0ZjE2bGUiLDEyMDE6InV0ZjE2YmUiLDEyZTM6InV0ZjMybGUiLDEyMDAxOiJ1dGYzMmJlIiwxNjk2OToidXRmNjRsZSIs'@;
put 'MjAxMjc6ImFzY2lpIiw2NWUzOiJ1dGY3Iiw2NTAwMToidXRmOCJ9LF89Wzg3NCwxMjUwLDEyNTEsMTI1MiwxMjUzLDEyNTQsMTI1NSwxMjU2LDFlNF0scD1bOTMyLDkzNiw5NDksOTUwXSxOPVs2NTAwMV0sdz17fSxGPXt9LEg9e30sUj17fSxqPWZ1bmN0aW9uKFUpe3JldHVybiBTdHJpbmcu'@;
put 'ZnJvbUNoYXJDb2RlKFUpfSxQPWZ1bmN0aW9uKFUpe3JldHVybiBVLmNoYXJDb2RlQXQoMCl9LEw9dHlwZW9mIEJ1ZmZlcjwidSIsWT1mdW5jdGlvbigpe307aWYoTCl7dmFyIEI9IUJ1ZmZlci5mcm9tO2lmKCFCKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe0I9ITB9WT1C'@;
put 'P2Z1bmN0aW9uKFYsVSl7cmV0dXJuIFU/bmV3IEJ1ZmZlcihWLFUpOm5ldyBCdWZmZXIoVil9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBCdWZmZXIoVil9KTt2YXIgVz0xMDI0'@;
put 'LFo9QnVmZmVyLmFsbG9jVW5zYWZlKFcpLFE9ZnVuY3Rpb24oVSl7dmFyIEU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBFPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNiksbT0wO208NjU1MzY7KyttKUVbbV09MDtmb3IodmFyIEE9T2JqZWN0LmtleXMoVSksYWU9QS5sZW5ndGgsbmU9MCxsZT1BW25l'@;
put 'XTtuZTxhZTsrK25lKShsZT1BW25lXSkmJihFW2xlLmNoYXJDb2RlQXQoMCldPVVbbGVdKTtyZXR1cm4gRX0oYltVXS5lbmMpO3JldHVybiBmdW5jdGlvbihBLGFlKXt2YXIgbGUsbmU9QS5sZW5ndGgsd2U9MCxaZT0wLFFlPTAsYXQ9MDtpZigic3RyaW5nIj09dHlwZW9mIEEpZm9yKGxlPUJ1'@;
put 'ZmZlci5hbGxvY1Vuc2FmZShuZSksd2U9MDt3ZTxuZTsrK3dlKWxlW3dlXT1FW0EuY2hhckNvZGVBdCh3ZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKEEpKXtmb3IobGU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqbmUpLFplPTAsd2U9MDt3ZTxuZTsrK3dlKShRZT1BW3dlXSk8MTI4P2xlW1pl'@;
put 'KytdPUVbUWVdOlFlPDIyND8obGVbWmUrK109RVsoKDMxJlFlKTw8NikrKDYzJkFbd2UrMV0pXSwrK3dlKTpRZTwyNDA/KGxlW1plKytdPUVbKCgxNSZRZSk8PDEyKSsoKDYzJkFbd2UrMV0pPDw2KSsoNjMmQVt3ZSsyXSldLHdlKz0yKTooYXQ9KCg3JlFlKTw8MTgpKygoNjMmQVt3ZSsxXSk8'@;
put 'PDEyKSsoKDYzJkFbd2UrMl0pPDw2KSsoNjMmQVt3ZSszXSksd2UrPTMsYXQ8NjU1MzY/bGVbWmUrK109RVthdF06KGxlW1plKytdPUVbNTUyOTYrKChhdC09NjU1MzYpPj4xMCYxMDIzKV0sbGVbWmUrK109RVs1NjMyMCsoMTAyMyZhdCldKSk7bGU9bGUuc2xpY2UoMCxaZSl9ZWxzZSBmb3Io'@;
put 'bGU9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSx3ZT0wO3dlPG5lOysrd2UpbGVbd2VdPUVbQVt3ZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIGFlJiYiYnVmIiE9PWFlPyJhcnIiIT09YWU/bGUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwobGUpOmxlfX0scT1mdW5jdGlvbihVKXt2'@;
put 'YXIgRT1iW1VdLmRlYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MCxhZT0iIjtmb3IoQT0wO0E8RS5sZW5ndGg7KytBKWlmKGFlPUVbQV0pe3ZhciBuZT1hZS5jaGFyQ29kZUF0KDApO21bMipBXT0yNTUmbmUsbVsyKkErMV09bmU+Pjh9cmV0dXJuIGZ1bmN0aW9uKHdlKXt2YXIg'@;
put 'WmU9d2UubGVuZ3RoLFFlPTAsYXQ9MDtpZigyKlplPlcmJihXPTIqWmUsWj1CdWZmZXIuYWxsb2NVbnNhZmUoVykpLEJ1ZmZlci5pc0J1ZmZlcih3ZSkpZm9yKFFlPTA7UWU8WmU7UWUrKylaWzIqUWVdPW1bYXQ9Mip3ZVtRZV1dLFpbMipRZSsxXT1tW2F0KzFdO2Vsc2UgaWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiB3ZSlmb3IoUWU9MDtRZTxaZTtRZSsrKWF0PTIqd2UuY2hhckNvZGVBdChRZSksWlsyKlFlXT1tW2F0XSxaWzIqUWUrMV09bVthdCsxXTtlbHNlIGZvcihRZT0wO1FlPFplO1FlKyspWlsyKlFlXT1tW2F0PTIqd2VbUWVdXSxaWzIqUWUrMV09bVthdCsxXTtyZXR1cm4gWi5zbGlj'@;
put 'ZSgwLDIqWmUpLnRvU3RyaW5nKCJ1Y3MyIil9fSx0ZT1mdW5jdGlvbihVKXtmb3IodmFyIEU9YltVXS5lbmMsbT1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxBPTA7QTwxMzEwNzI7KytBKW1bQV09MDtmb3IodmFyIGFlPU9iamVjdC5rZXlzKEUpLG5lPTAsbGU9YWVbbmVdO25lPGFlLmxl'@;
put 'bmd0aDsrK25lKWlmKGxlPWFlW25lXSl7dmFyIHdlPWxlLmNoYXJDb2RlQXQoMCk7bVsyKndlXT0yNTUmRVtsZV0sbVsyKndlKzFdPUVbbGVdPj44fXJldHVybiBmdW5jdGlvbihRZSxhdCl7dmFyIHhlPVFlLmxlbmd0aCx2ZT1CdWZmZXIuYWxsb2NVbnNhZmUoMip4ZSkscWU9MCxqZT0wLEFl'@;
put 'PTAsRmU9MCxSZT0wO2lmKCJzdHJpbmciPT10eXBlb2YgUWUpe2ZvcihxZT1GZT0wO3FlPHhlOysrcWUpamU9MipRZS5jaGFyQ29kZUF0KHFlKSx2ZVtGZSsrXT1tW2plKzFdfHxtW2plXSxtW2plKzFdPjAmJih2ZVtGZSsrXT1tW2plXSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBpZihCdWZm'@;
put 'ZXIuaXNCdWZmZXIoUWUpKXtmb3IocWU9RmU9MDtxZTx4ZTsrK3FlKShSZT1RZVtxZV0pPDEyOD9qZT1SZTpSZTwyMjQ/KGplPSgoMzEmUmUpPDw2KSsoNjMmUWVbcWUrMV0pLCsrcWUpOlJlPDI0MD8oamU9KCgxNSZSZSk8PDEyKSsoKDYzJlFlW3FlKzFdKTw8NikrKDYzJlFlW3FlKzJdKSxx'@;
put 'ZSs9Mik6KGplPSgoNyZSZSk8PDE4KSsoKDYzJlFlW3FlKzFdKTw8MTIpKygoNjMmUWVbcWUrMl0pPDw2KSsoNjMmUWVbcWUrM10pLHFlKz0zKSxqZTw2NTUzNj8odmVbRmUrK109bVsxKyhqZSo9MildfHxtW2plXSxtW2plKzFdPjAmJih2ZVtGZSsrXT1tW2plXSkpOih2ZVtGZSsrXT1tWzEr'@;
put 'KGplPTIqKDU1Mjk2KygoQWU9amUtNjU1MzYpPj4xMCYxMDIzKSkpXXx8bVtqZV0sbVtqZSsxXT4wJiYodmVbRmUrK109bVtqZV0pLHZlW0ZlKytdPW1bMSsoamU9MiooNTYzMjArKDEwMjMmQWUpKSldfHxtW2plXSxtW2plKzFdPjAmJih2ZVtGZSsrXT1tW2plXSkpO3ZlPXZlLnNsaWNlKDAs'@;
put 'RmUpfWVsc2UgZm9yKHFlPUZlPTA7cWU8eGU7cWUrKylqZT0yKlFlW3FlXS5jaGFyQ29kZUF0KDApLHZlW0ZlKytdPW1bamUrMV18fG1bamVdLG1bamUrMV0+MCYmKHZlW0ZlKytdPW1bamVdKTtyZXR1cm4gYXQmJiJidWYiIT09YXQ/ImFyciIhPT1hdD92ZS50b1N0cmluZygiYmluYXJ5Iik6'@;
put 'W10uc2xpY2UuY2FsbCh2ZSk6dmV9fSxpZT1mdW5jdGlvbihVKXt2YXIgYWUsRT1iW1VdLmRlYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MCxuZT0wLGxlPTAsd2U9MDtmb3Iod2U9MDt3ZTw2NTUzNjsrK3dlKW1bMip3ZV09MjU1LG1bMip3ZSsxXT0yNTM7Zm9yKEE9MDtBPEUu'@;
put 'bGVuZ3RoOysrQSkoYWU9RVtBXSkmJihuZT1hZS5jaGFyQ29kZUF0KDApLG1bbGU9MipBXT0yNTUmbmUsbVtsZSsxXT1uZT4+OCk7cmV0dXJuIGZ1bmN0aW9uKFFlKXt2YXIgYXQ9UWUubGVuZ3RoLHhlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKmF0KSx2ZT0wLHFlPTAsamU9MDtpZihCdWZmZXIu'@;
put 'aXNCdWZmZXIoUWUpKWZvcih2ZT0wO3ZlPGF0O3ZlKyspMjU1PT09bVtxZT0yKlFlW3ZlXV0mJjI1Mz09PW1bcWUrMV0mJihxZT0yKigoUWVbdmVdPDw4KStRZVt2ZSsxXSksKyt2ZSkseGVbamUrK109bVtxZV0seGVbamUrK109bVtxZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUWUp'@;
put 'Zm9yKHZlPTA7dmU8YXQ7dmUrKylxZT0yKlFlLmNoYXJDb2RlQXQodmUpLDI1NT09PW1bcWVdJiYyNTM9PT1tW3FlKzFdJiYocWU9MiooKFFlLmNoYXJDb2RlQXQodmUpPDw4KStRZS5jaGFyQ29kZUF0KHZlKzEpKSwrK3ZlKSx4ZVtqZSsrXT1tW3FlXSx4ZVtqZSsrXT1tW3FlKzFdO2Vsc2Ug'@;
put 'Zm9yKHZlPTA7dmU8YXQ7dmUrKykyNTU9PT1tW3FlPTIqUWVbdmVdXSYmMjUzPT09bVtxZSsxXSYmKHFlPTIqKChRZVt2ZV08PDgpK1FlW3ZlKzFdKSwrK3ZlKSx4ZVtqZSsrXT1tW3FlXSx4ZVtqZSsrXT1tW3FlKzFdO3JldHVybiB4ZS5zbGljZSgwLGplKS50b1N0cmluZygidWNzMiIpfX07'@;
put 'd1s2NTAwMV09ZnVuY3Rpb24gVihVKXtpZigic3RyaW5nIj09dHlwZW9mIFUpcmV0dXJuIFYoVS5zcGxpdCgiIikubWFwKFApKTt2YXIgRT1VLmxlbmd0aCxtPTAsQT0wOzQqRT5XJiYoVz00KkUsWj1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO3ZhciBhZT0wO0U+PTMmJjIzOT09VVswXSYmMTg3'@;
put 'PT1VWzFdJiYxOTE9PVVbMl0mJihhZT0zKTtmb3IodmFyIG5lPTEsbGU9MCx3ZT0wO2FlPEU7YWUrPW5lKW5lPTEsKHdlPVVbYWVdKTwxMjg/bT13ZTp3ZTwyMjQ/KG09NjQqKDMxJndlKSsoNjMmVVthZSsxXSksbmU9Mik6d2U8MjQwPyhtPSgoMTUmd2UpPDwxMikrNjQqKDYzJlVbYWUrMV0p'@;
put 'Kyg2MyZVW2FlKzJdKSxuZT0zKToobT0yNjIxNDQqKDcmd2UpKygoNjMmVVthZSsxXSk8PDEyKSs2NCooNjMmVVthZSsyXSkrKDYzJlVbYWUrM10pLG5lPTQpLG08NjU1MzY/KFpbbGUrK109MjU1Jm0sWltsZSsrXT1tPj44KTooQT01NTI5NisoKG0tPTY1NTM2KT4+MTAmMTAyMyksbT01NjMy'@;
put 'MCsoMTAyMyZtKSxaW2xlKytdPTI1NSZBLFpbbGUrK109QT4+PjgsWltsZSsrXT0yNTUmbSxaW2xlKytdPW0+Pj44JjI1NSk7cmV0dXJuIFouc2xpY2UoMCxsZSkudG9TdHJpbmcoInVjczIiKX0sRls2NTAwMV09ZnVuY3Rpb24oVSxFKXtpZihMJiZCdWZmZXIuaXNCdWZmZXIoVSkpcmV0dXJu'@;
put 'IEUmJiJidWYiIT09RT8iYXJyIiE9PUU/VS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChVKTpVO3ZhciBtPVUubGVuZ3RoLEE9MCxhZT0wLG5lPTAsbGU9InN0cmluZyI9PXR5cGVvZiBVOzQqbT5XJiYoVz00Km0sWj1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO2Zvcih2YXIgd2U9'@;
put 'MDt3ZTxtOysrd2UpKEE9bGU/VS5jaGFyQ29kZUF0KHdlKTpVW3dlXS5jaGFyQ29kZUF0KDApKTw9MTI3P1pbbmUrK109QTpBPD0yMDQ3PyhaW25lKytdPTE5MisoQT4+NiksWltuZSsrXT0xMjgrKDYzJkEpKTpBPj01NTI5NiYmQTw9NTczNDM/KEEtPTU1Mjk2LCsrd2UsYWU9KGxlP1UuY2hh'@;
put 'ckNvZGVBdCh3ZSk6VVt3ZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKEE8PDEwKSxaW25lKytdPTI0MCsoYWU+Pj4xOCY3KSxaW25lKytdPTE0NCsoYWU+Pj4xMiY2MyksWltuZSsrXT0xMjgrKGFlPj4+NiY2MyksWltuZSsrXT0xMjgrKDYzJmFlKSk6KFpbbmUrK109MjI0KyhBPj4xMiksWltu'@;
put 'ZSsrXT0xMjgrKEE+PjYmNjMpLFpbbmUrK109MTI4Kyg2MyZBKSk7cmV0dXJuIEUmJiJidWYiIT09RT8iYXJyIiE9PUU/Wi5zbGljZSgwLG5lKS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChaLDAsbmUpOlouc2xpY2UoMCxuZSl9fXZhciBzZT1mdW5jdGlvbigpe2lmKEwpe2lm'@;
put 'KEhbX1swXV0pcmV0dXJuO3ZhciBVPTAsRT0wO2ZvcihVPTA7VTxfLmxlbmd0aDsrK1UpYltFPV9bVV1dJiYoSFtFXT1xKEUpLFJbRV09UShFKSk7Zm9yKFU9MDtVPHAubGVuZ3RoOysrVSliW0U9cFtVXV0mJihIW0VdPWllKEUpLFJbRV09dGUoRSkpO2ZvcihVPTA7VTxOLmxlbmd0aDsrK1Up'@;
put 'd1tFPU5bVV1dJiYoSFtFXT13W0VdKSxGW0VdJiYoUltFXT1GW0VdKX19LGdlPWZ1bmN0aW9uKFYsVSl7cmV0dXJuIiJ9LF9lPWZ1bmN0aW9uKFUpe2RlbGV0ZSBIW1VdLGRlbGV0ZSBSW1VdfSxTZT17ZW5jYWNoZTpzZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoTCl7aWYoIUhbX1swXV0pcmV0'@;
put 'dXJuO18uZm9yRWFjaChfZSkscC5mb3JFYWNoKF9lKSxOLmZvckVhY2goX2UpfWc9Z2UseT0wfSxzYmNzOl8sZGJjczpwfTtzZSgpO3ZhciB6ZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsZz1nZSx5PTA7cmV0dXJu'@;
put 'IGIudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBWKFUsRSl7dmFyIG07aWYobT1IW1VdKXJldHVybiBtKEUpO2lmKCJzdHJpbmciPT10eXBlb2YgRSlyZXR1cm4gVihVLEUuc3BsaXQoIiIpLm1hcChQKSk7dmFyIHZlLEE9RS5sZW5ndGgsYWU9bmV3IEFycmF5KEEpLG5lPSIiLGxlPTAsd2U9MCxa'@;
put 'ZT0xLFFlPTAsYXQ9MCx4ZT1iW1VdLHFlPSIiO2lmKHhlJiYodmU9eGUuZGVjKSlmb3Iod2U9MDt3ZTxBO3dlKz1aZSl7aWYoWmU9MiwobmU9dmVbKEVbd2VdPDw4KStFW3dlKzFdXSl8fChaZT0xLG5lPXZlW0Vbd2VdXSksIW5lKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6'@;
put 'ICIrRVt3ZV0rIiAiK0Vbd2UrWmUtMV0rIiAiK3dlKyIgIitaZSsiICIrdmVbRVt3ZV1dKTthZVtRZSsrXT1uZX1lbHNle2lmKCEocWU9RFtVXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrVSk7c3dpdGNoKHFlKXtjYXNlInV0ZjgiOmZvcihBPj0zJiYyMzk9PUVbMF0m'@;
put 'JjE4Nz09RVsxXSYmMTkxPT1FWzJdJiYod2U9Myk7d2U8QTt3ZSs9WmUpWmU9MSxFW3dlXTwxMjg/bGU9RVt3ZV06RVt3ZV08MjI0PyhsZT02NCooMzEmRVt3ZV0pKyg2MyZFW3dlKzFdKSxaZT0yKTpFW3dlXTwyNDA/KGxlPSgoMTUmRVt3ZV0pPDwxMikrNjQqKDYzJkVbd2UrMV0pKyg2MyZF'@;
put 'W3dlKzJdKSxaZT0zKToobGU9MjYyMTQ0Kig3JkVbd2VdKSsoKDYzJkVbd2UrMV0pPDwxMikrNjQqKDYzJkVbd2UrMl0pKyg2MyZFW3dlKzNdKSxaZT00KSxsZTw2NTUzNnx8KGF0PTU1Mjk2KygobGUtPTY1NTM2KT4+MTAmMTAyMyksbGU9NTYzMjArKDEwMjMmbGUpLGFlW1FlKytdPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoYXQpKSxhZVtRZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGxlKTticmVhaztjYXNlImFzY2lpIjppZihMJiZCdWZmZXIuaXNCdWZmZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcocWUpO2Zvcih3ZT0wO3dlPEE7d2UrKylhZVt3ZV09U3RyaW5nLmZyb21DaGFyQ29kZShF'@;
put 'W3dlXSk7UWU9QTticmVhaztjYXNlInV0ZjE2bGUiOmlmKEE+PTImJjI1NT09RVswXSYmMjU0PT1FWzFdJiYod2U9MiksTCYmQnVmZmVyLmlzQnVmZmVyKEUpKXJldHVybiBFLnRvU3RyaW5nKHFlKTtmb3IoWmU9Mjt3ZSsxPEE7d2UrPVplKWFlW1FlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUo'@;
put 'KEVbd2UrMV08PDgpK0Vbd2VdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihBPj0yJiYyNTQ9PUVbMF0mJjI1NT09RVsxXSYmKHdlPTIpLFplPTI7d2UrMTxBO3dlKz1aZSlhZVtRZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChFW3dlXTw8OCkrRVt3ZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxl'@;
put 'Ijpmb3IoQT49NCYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJjA9PT1FWzJdJiYwPT09RVszXSYmKHdlPTQpLFplPTQ7d2U8QTt3ZSs9WmUpKGxlPShFW3dlKzNdPDwyNCkrKEVbd2UrMl08PDE2KSsoRVt3ZSsxXTw8OCkrRVt3ZV0pPjY1NTM1PyhsZS09NjU1MzYsYWVbUWUrK109U3RyaW5nLmZy'@;
put 'b21DaGFyQ29kZSg1NTI5NisobGU+PjEwJjEwMjMpKSxhZVtRZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmxlKSkpOmFlW1FlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUobGUpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKEE+PTQmJjI1NT09RVszXSYmMjU0PT1FWzJdJiYw'@;
put 'PT09RVsxXSYmMD09PUVbMF0mJih3ZT00KSxaZT00O3dlPEE7d2UrPVplKShsZT0oRVt3ZV08PDI0KSsoRVt3ZSsxXTw8MTYpKyhFW3dlKzJdPDw4KStFW3dlKzNdKT42NTUzNT8obGUtPTY1NTM2LGFlW1FlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGxlPj4xMCYxMDIzKSksYWVb'@;
put 'UWUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZsZSkpKTphZVtRZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGxlKTticmVhaztjYXNlInV0ZjciOmZvcihBPj00JiY0Mz09RVswXSYmNDc9PUVbMV0mJjExOD09RVsyXSYmKEE+PTUmJjU2PT1FWzNdJiY0NT09RVs0XT93ZT01'@;
put 'Oig1Nj09RVszXXx8NTc9PUVbM118fDQzPT1FWzNdfHw0Nz09RVszXSkmJih3ZT00KSk7d2U8QTt3ZSs9WmUpaWYoNDM9PT1FW3dlXSlpZihaZT0xLDQ1IT09RVt3ZSsxXSl7Zm9yKDtTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrWmVdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspWmUrKzt2'@;
put 'YXIgamU9MDs0NT09PUVbd2UrWmVdJiYoKytaZSxqZT0xKTtmb3IodmFyIEFlPVtdLEZlPSIiLERlPTAsa2U9MCxfdD0wLG50PTAsSmU9MTtKZTxaZS1qZSYmKERlPXplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK0plKytdKSksa2U9emUuaW5kZXhPZihTdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKEVbd2UrSmUrK10pKSxBZS5wdXNoKERlPDwyfGtlPj40KSwtMSE9PShfdD16ZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStKZSsrXSkpKSYmKEFlLnB1c2goKDE1JmtlKTw8NHxfdD4+MiksLTEhPT0obnQ9emUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVb'@;
put 'd2UrSmUrK10pKSkpKTspbnQ8NjQmJkFlLnB1c2goKDMmX3QpPDw2fG50KTtmb3IoRmU9VigxMjAxLEFlKSxKZT0wO0plPEZlLmxlbmd0aDsrK0plKWFlW1FlKytdPUZlLmNoYXJBdChKZSl9ZWxzZSBaZT0yLGFlW1FlKytdPSIrIjtlbHNlIFplPTEsYWVbUWUrK109U3RyaW5nLmZyb21DaGFy'@;
put 'Q29kZShFW3dlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK1UrIiAiK0RbVV0pfX1yZXR1cm4gYWUuc2xpY2UoMCxRZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBWKFUsRSxtKXtpZihVPT09eSYmZylyZXR1cm4gZyhFLG0pO2lmKFJb'@;
put 'VV0pcmV0dXJuKGc9Ult5PVVdKShFLG0pO0wmJkJ1ZmZlci5pc0J1ZmZlcihFKSYmKEU9RS50b1N0cmluZygidXRmOCIpKTt2YXIgYXQsQT1FLmxlbmd0aCxhZT1MP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KkEpOltdLG5lPTAsbGU9MCx3ZT0wLFplPTAsUWU9YltVXSx4ZT0iIix2ZT0ic3RyaW5n'@;
put 'Ij09dHlwZW9mIEU7aWYoUWUmJihhdD1RZS5lbmMpKWZvcihsZT0wO2xlPEE7KytsZSwrK3dlKShuZT1hdFt2ZT9FLmNoYXJBdChsZSk6RVtsZV1dKT4yNTU/KGFlW3dlXT1uZT4+OCxhZVsrK3dlXT0yNTUmbmUpOmFlW3dlXT0yNTUmbmU7ZWxzZXtpZighKHhlPURbVV0pKXRocm93IG5ldyBF'@;
put 'cnJvcigiVW5yZWNvZ25pemVkIENQOiAiK1UpO3N3aXRjaCh4ZSl7Y2FzZSJ1dGY4IjppZihMJiZ2ZSl7d2U9KGFlPVkoRSx4ZSkpLmxlbmd0aDticmVha31mb3IobGU9MDtsZTxBOysrbGUsKyt3ZSkobmU9dmU/RS5jaGFyQ29kZUF0KGxlKTpFW2xlXS5jaGFyQ29kZUF0KDApKTw9MTI3P2Fl'@;
put 'W3dlXT1uZTpuZTw9MjA0Nz8oYWVbd2VdPTE5MisobmU+PjYpLGFlWysrd2VdPTEyOCsoNjMmbmUpKTpuZT49NTUyOTYmJm5lPD01NzM0Mz8obmUtPTU1Mjk2LFplPSh2ZT9FLmNoYXJDb2RlQXQoKytsZSk6RVsrK2xlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsobmU8PDEwKSxhZVt3ZV09MjQw'@;
put 'KyhaZT4+PjE4JjcpLGFlWysrd2VdPTE0NCsoWmU+Pj4xMiY2MyksYWVbKyt3ZV09MTI4KyhaZT4+PjYmNjMpLGFlWysrd2VdPTEyOCsoNjMmWmUpKTooYWVbd2VdPTIyNCsobmU+PjEyKSxhZVsrK3dlXT0xMjgrKG5lPj42JjYzKSxhZVsrK3dlXT0xMjgrKDYzJm5lKSk7YnJlYWs7Y2FzZSJh'@;
put 'c2NpaSI6aWYoTCYmInN0cmluZyI9PXR5cGVvZiBFKXt3ZT0oYWU9WShFLHhlKSkubGVuZ3RoO2JyZWFrfWZvcihsZT0wO2xlPEE7KytsZSwrK3dlKXtpZighKChuZT12ZT9FLmNoYXJDb2RlQXQobGUpOkVbbGVdLmNoYXJDb2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFz'@;
put 'Y2lpICIrbmUpO2FlW3dlXT1uZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKEwmJiJzdHJpbmciPT10eXBlb2YgRSl7d2U9KGFlPVkoRSx4ZSkpLmxlbmd0aDticmVha31mb3IobGU9MDtsZTxBOysrbGUpbmU9dmU/RS5jaGFyQ29kZUF0KGxlKTpFW2xlXS5jaGFyQ29kZUF0KDApLGFlW3dlKytd'@;
put 'PTI1NSZuZSxhZVt3ZSsrXT1uZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihsZT0wO2xlPEE7KytsZSluZT12ZT9FLmNoYXJDb2RlQXQobGUpOkVbbGVdLmNoYXJDb2RlQXQoMCksYWVbd2UrK109bmU+PjgsYWVbd2UrK109MjU1Jm5lO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKGxlPTA7'@;
put 'bGU8QTsrK2xlKShuZT12ZT9FLmNoYXJDb2RlQXQobGUpOkVbbGVdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmbmU8PTU3MzQzJiYobmU9NjU1MzYrKG5lLTU1Mjk2PDwxMCkrKEVbKytsZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLGFlW3dlKytdPTI1NSZuZSxhZVt3ZSsrXT0yNTUmKG5lPj49'@;
put 'OCksYWVbd2UrK109MjU1JihuZT4+PTgpLGFlW3dlKytdPTI1NSYobmU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihsZT0wO2xlPEE7KytsZSkobmU9dmU/RS5jaGFyQ29kZUF0KGxlKTpFW2xlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01'@;
put 'NTI5Njw8MTApKyhFWysrbGVdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxhZVt3ZSszXT0yNTUmbmUsYWVbd2UrMl09MjU1JihuZT4+PTgpLGFlW3dlKzFdPTI1NSYobmU+Pj04KSxhZVt3ZV09MjU1JihuZT4+PTgpLHdlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKGxlPTA7bGU8QTtsZSsrKXt2'@;
put 'YXIgcWU9dmU/RS5jaGFyQXQobGUpOkVbbGVdLmNoYXJBdCgwKTtpZigiKyIhPT1xZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YocWUpPi0xKWFlW3dlKytdPXFlLmNoYXJDb2RlQXQo'@;
put 'MCk7ZWxzZXt2YXIgamU9VigxMjAxLHFlKTthZVt3ZSsrXT00MyxhZVt3ZSsrXT16ZS5jaGFyQ29kZUF0KGplWzBdPj4yKSxhZVt3ZSsrXT16ZS5jaGFyQ29kZUF0KCgoMyZqZVswXSk8PDQpKygoamVbMV18fDApPj40KSksYWVbd2UrK109emUuY2hhckNvZGVBdCgoKDE1JmplWzFdKTw8Mikr'@;
put 'KChqZVsyXXx8MCk+PjYpKSxhZVt3ZSsrXT00NX1lbHNlIGFlW3dlKytdPTQzLGFlW3dlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitVKyIgIitEW1VdKX19cmV0dXJuIGFlPWFlLnNsaWNlKDAsd2UpLEw/bSYmImJ1ZiIhPT1tPyJh'@;
put 'cnIiIT09bT9hZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChhZSk6YWU6InN0ciI9PW0/YWUubWFwKGopLmpvaW4oIiIpOmFlfSxoYXNjcDpmdW5jdGlvbihVKXtyZXR1cm4hKCFiW1VdJiYhRFtVXSl9LG1hZ2ljOkQsY2FjaGU6U2V9LGJ9KX0sMzE3OTooY2UsSik9Pnt2YXIg'@;
put 'YixELF87IWZ1bmN0aW9uKHApe2lmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IiljZS5leHBvcnRzPXAoKTtlbHNlIGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilKU1ppcFN5bmM9cCgpLEQ9W10sdm9pZCAwIT09KF89ImZ1bmN0aW9uIj09dHlwZW9mKGI9cCk/Yi5h'@;
put 'cHBseShKLEQpOmIpJiYoY2UuZXhwb3J0cz1fKTtlbHNle3ZhciBOO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9OPWdsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/Tj13aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Tj1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9OPSQuZ2xvYmFsOnR5'@;
put 'cGVvZiBzZWxmPCJ1IiYmKE49c2VsZiksTi5KU1ppcFN5bmM9cCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gRihILFIsail7ZnVuY3Rpb24gUChCLFcpe2lmKCFSW0JdKXtpZighSFtCXSl7aWYoTClyZXR1cm4gTChCLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1v'@;
put 'ZHVsZSAnIitCKyInIil9dmFyIFg9UltCXT17ZXhwb3J0czp7fX07SFtCXVswXS5jYWxsKFguZXhwb3J0cyxmdW5jdGlvbihRKXtyZXR1cm4gUChIW0JdWzFdW1FdfHxRKX0sWCxYLmV4cG9ydHMsRixILFIsail9cmV0dXJuIFJbQl0uZXhwb3J0c31mb3IodmFyIEw9dm9pZCAwLFk9MDtZPGou'@;
put 'bGVuZ3RoO1krKylQKGpbWV0pO3JldHVybiBQfSh7MTpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO1IuZW5jb2RlPWZ1bmN0aW9uKFAsTCl7Zm9yKHZh'@;
put 'ciBCLFcsWixYLFEscSx0ZSxZPSIiLGllPTA7aWU8UC5sZW5ndGg7KVg9KEI9UC5jaGFyQ29kZUF0KGllKyspKT4+MixRPSgzJkIpPDw0fChXPVAuY2hhckNvZGVBdChpZSsrKSk+PjQscT0oMTUmVyk8PDJ8KFo9UC5jaGFyQ29kZUF0KGllKyspKT4+Nix0ZT02MyZaLGlzTmFOKFcpP3E9dGU9'@;
put 'NjQ6aXNOYU4oWikmJih0ZT02NCksWT1ZK2ouY2hhckF0KFgpK2ouY2hhckF0KFEpK2ouY2hhckF0KHEpK2ouY2hhckF0KHRlKTtyZXR1cm4gWX0sUi5kZWNvZGU9ZnVuY3Rpb24oUCxMKXt2YXIgVyxaLFgsUSxxLHRlLFk9IiIsaWU9MDtmb3IoUD1QLnJlcGxhY2UoL1teQS1aYS16MC05XCtc'@;
put 'L1w9XS9nLCIiKTtpZTxQLmxlbmd0aDspWD1qLmluZGV4T2YoUC5jaGFyQXQoaWUrKykpLFc9KDE1JihRPWouaW5kZXhPZihQLmNoYXJBdChpZSsrKSkpKTw8NHwocT1qLmluZGV4T2YoUC5jaGFyQXQoaWUrKykpKT4+MixaPSgzJnEpPDw2fCh0ZT1qLmluZGV4T2YoUC5jaGFyQXQoaWUrKykp'@;
put 'KSxZKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFg8PDJ8UT4+NCksNjQhPXEmJihZKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpKSw2NCE9dGUmJihZKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFopKTtyZXR1cm4gWX19LHt9XSwyOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGoo'@;
put 'KXt0aGlzLmNvbXByZXNzZWRTaXplPTAsdGhpcy51bmNvbXByZXNzZWRTaXplPTAsdGhpcy5jcmMzMj0wLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9bnVsbCx0aGlzLmNvbXByZXNzZWRDb250ZW50PW51bGx9ai5wcm90b3R5cGU9e2dldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0s'@;
put 'Z2V0Q29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LEguZXhwb3J0cz1qfSx7fV0sMzpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0IjtSLlNUT1JFPXttYWdpYzoiXDBcMCIsY29tcHJlc3M6ZnVuY3Rpb24oail7cmV0dXJuIGp9LHVuY29tcHJlc3M6ZnVuY3Rp'@;
put 'b24oail7cmV0dXJuIGp9LGNvbXByZXNzSW5wdXRUeXBlOm51bGwsdW5jb21wcmVzc0lucHV0VHlwZTpudWxsfSxSLkRFRkxBVEU9RigiLi9mbGF0ZSIpfSx7Ii4vZmxhdGUiOjh9XSw0OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vdXRpbHMiKSxQPVswLDE5OTY5'@;
put 'NTk4OTQsMzk5MzkxOTc4OCwyNTY3NTI0Nzk0LDEyNDYzNDEzNywxODg2MDU3NjE1LDM5MTU2MjE2ODUsMjY1NzM5MjAzNSwyNDkyNjgyNzQsMjA0NDUwODMyNCwzNzcyMTE1MjMwLDI1NDcxNzc4NjQsMTYyOTQxOTk1LDIxMjU1NjEwMjEsMzg4NzYwNzA0NywyNDI4NDQ0MDQ5LDQ5ODUzNjU0'@;
put 'OCwxNzg5OTI3NjY2LDQwODkwMTY2NDgsMjIyNzA2MTIxNCw0NTA1NDg4NjEsMTg0MzI1ODYwMyw0MTA3NTgwNzUzLDIyMTE2Nzc2MzksMzI1ODgzOTkwLDE2ODQ3NzcxNTIsNDI1MTEyMjA0MiwyMzIxOTI2NjM2LDMzNTYzMzQ4NywxNjYxMzY1NDY1LDQxOTUzMDI3NTUsMjM2NjExNTMxNyw5'@;
put 'OTcwNzMwOTYsMTI4MTk1Mzg4NiwzNTc5ODU1MzMyLDI3MjQ2ODgyNDIsMTAwNjg4ODE0NSwxMjU4NjA3Njg3LDM1MjQxMDE2MjksMjc2ODk0MjQ0Myw5MDEwOTc3MjIsMTExOTAwMDY4NCwzNjg2NTE3MjA2LDI4OTgwNjU3MjgsODUzMDQ0NDUxLDExNzIyNjYxMDEsMzcwNTAxNTc1OSwyODgy'@;
put 'NjE2NjY1LDY1MTc2Nzk4MCwxMzczNTAzNTQ2LDMzNjk1NTQzMDQsMzIxODEwNDU5OCw1NjU1MDcyNTMsMTQ1NDYyMTczMSwzNDg1MTExNzA1LDMwOTk0MzYzMDMsNjcxMjY2OTc0LDE1OTQxOTgwMjQsMzMyMjczMDkzMCwyOTcwMzQ3ODEyLDc5NTgzNTUyNywxNDgzMjMwMjI1LDMyNDQzNjcy'@;
put 'NzUsMzA2MDE0OTU2NSwxOTk0MTQ2MTkyLDMxMTU4NTM0LDI1NjM5MDc3NzIsNDAyMzcxNzkzMCwxOTA3NDU5NDY1LDExMjYzNzIxNSwyNjgwMTUzMjUzLDM5MDQ0MjcwNTksMjAxMzc3NjI5MCwyNTE3MjIwMzYsMjUxNzIxNTM3NCwzNzc1ODMwMDQwLDIxMzc2NTY3NjMsMTQxMzc2ODEzLDI0'@;
put 'MzkyNzc3MTksMzg2NTI3MTI5NywxODAyMTk1NDQ0LDQ3Njg2NDg2NiwyMjM4MDAxMzY4LDQwNjY1MDg4NzgsMTgxMjM3MDkyNSw0NTMwOTI3MzEsMjE4MTYyNTAyNSw0MTExNDUxMjIzLDE3MDYwODg5MDIsMzE0MDQyNzA0LDIzNDQ1MzIyMDIsNDI0MDAxNzUzMiwxNjU4NjU4MjcxLDM2NjYx'@;
put 'OTk3NywyMzYyNjcwMzIzLDQyMjQ5OTQ0MDUsMTMwMzUzNTk2MCw5ODQ5NjE0ODYsMjc0NzAwNzA5MiwzNTY5MDM3NTM4LDEyNTYxNzA4MTcsMTAzNzYwNDMxMSwyNzY1MjEwNzMzLDM1NTQwNzk5OTUsMTEzMTAxNDUwNiw4Nzk2Nzk5OTYsMjkwOTI0MzQ2MiwzNjYzNzcxODU2LDExNDExMjQ0'@;
put 'NjcsODU1ODQyMjc3LDI4NTI4MDE2MzEsMzcwODY0ODY0OSwxMzQyNTMzOTQ4LDY1NDQ1OTMwNiwzMTg4Mzk2MDQ4LDMzNzMwMTUxNzQsMTQ2NjQ3OTkwOSw1NDQxNzk2MzUsMzExMDUyMzkxMywzNDYyNTIyMDE1LDE1OTE2NzEwNTQsNzAyMTM4Nzc2LDI5NjY0NjA0NTAsMzM1Mjc5OTQxMiwx'@;
put 'NTA0OTE4ODA3LDc4MzU1MTg3MywzMDgyNjQwNDQzLDMyMzM0NDI5ODksMzk4ODI5MjM4NCwyNTk2MjU0NjQ2LDYyMzE3MDY4LDE5NTc4MTA4NDIsMzkzOTg0NTk0NSwyNjQ3ODE2MTExLDgxNDcwOTk3LDE5NDM4MDM1MjMsMzgxNDkxODkzMCwyNDg5NTk2ODA0LDIyNTI3NDQzMCwyMDUzNzkw'@;
put 'Mzc2LDM4MjYxNzU3NTUsMjQ2NjkwNjAxMywxNjc4MTY3NDMsMjA5NzY1MTM3Nyw0MDI3NTUyNTgwLDIyNjU0OTAzODYsNTAzNDQ0MDcyLDE3NjIwNTA4MTQsNDE1MDQxNzI0NSwyMTU0MTI5MzU1LDQyNjUyMjIyNSwxODUyNTA3ODc5LDQyNzUzMTM1MjYsMjMxMjMxNzkyMCwyODI3NTM2MjYs'@;
put 'MTc0MjU1NTg1Miw0MTg5NzA4MTQzLDIzOTQ4Nzc5NDUsMzk3OTE3NzYzLDE2MjIxODM2MzcsMzYwNDM5MDg4OCwyNzE0ODY2NTU4LDk1MzcyOTczMiwxMzQwMDc2NjI2LDM1MTg3MTk5ODUsMjc5NzM2MDk5OSwxMDY4ODI4MzgxLDEyMTk2Mzg4NTksMzYyNDc0MTg1MCwyOTM2Njc1MTQ4LDkw'@;
put 'NjE4NTQ2MiwxMDkwODEyNTEyLDM3NDc2NzIwMDMsMjgyNTM3OTY2OSw4MjkzMjkxMzUsMTE4MTMzNTE2MSwzNDEyMTc3ODA0LDMxNjA4MzQ4NDIsNjI4MDg1NDA4LDEzODI2MDUzNjYsMzQyMzM2OTEwOSwzMTM4MDc4NDY3LDU3MDU2MjIzMywxNDI2NDAwODE1LDMzMTczMTY1NDIsMjk5ODcz'@;
put 'MzYwOCw3MzMyMzk5NTQsMTU1NTI2MTk1NiwzMjY4OTM1NTkxLDMwNTAzNjA2MjUsNzUyNDU5NDAzLDE1NDEzMjAyMjEsMjYwNzA3MTkyMCwzOTY1OTczMDMwLDE5Njk5MjI5NzIsNDA3MzU0OTgsMjYxNzgzNzIyNSwzOTQzNTc3MTUxLDE5MTMwODc4NzcsODM5MDgzNzEsMjUxMjM0MTYzNCwz'@;
put 'ODAzNzQwNjkyLDIwNzUyMDg2MjIsMjEzMjYxMTEyLDI0NjMyNzI2MDMsMzg1NTk5MDI4NSwyMDk0ODU0MDcxLDE5ODk1ODg4MSwyMjYyMDI5MDEyLDQwNTcyNjA2MTAsMTc1OTM1OTk5Miw1MzQ0MTQxOTAsMjE3NjcxODU0MSw0MTM5MzI5MTE1LDE4NzM4MzYwMDEsNDE0NjY0NTY3LDIyODIy'@;
put 'NDg5MzQsNDI3OTIwMDM2OCwxNzExNjg0NTU0LDI4NTI4MTExNiwyNDA1ODAxNzI3LDQxNjcyMTY3NDUsMTYzNDQ2Nzc5NSwzNzYyMjk3MDEsMjY4NTA2Nzg5NiwzNjA4MDA3NDA2LDEzMDg5MTg2MTIsOTU2NTQzOTM4LDI4MDg1NTUxMDUsMzQ5NTk1ODI2MywxMjMxNjM2MzAxLDEwNDc0Mjcw'@;
put 'MzUsMjkzMjk1OTgxOCwzNjU0NzAzODM2LDEwODgzNTkyNzAsOTM2OTE4ZTMsMjg0NzcxNDg5OSwzNzM2ODM3ODI5LDEyMDI5MDA4NjMsODE3MjMzODk3LDMxODMzNDIxMDgsMzQwMTIzNzEzMCwxNDA0Mjc3NTUyLDYxNTgxODE1MCwzMTM0MjA3NDkzLDM0NTM0MjEyMDMsMTQyMzg1NzQ0OSw2'@;
put 'MDE0NTA0MzEsMzAwOTgzNzYxNCwzMjk0NzEwNDU2LDE1NjcxMDM3NDYsNzExOTI4NzI0LDMwMjA2Njg0NzEsMzI3MjM4MDA2NSwxNTEwMzM0MjM1LDc1NTE2NzExN107SC5leHBvcnRzPWZ1bmN0aW9uKFksQil7aWYodHlwZW9mIFk+InUifHwhWS5sZW5ndGgpcmV0dXJuIDA7dmFyIFc9InN0'@;
put 'cmluZyIhPT1qLmdldFR5cGVPZihZKTt0eXBlb2YgQj4idSImJihCPTApO3ZhciBRPTA7Qj1+Qjtmb3IodmFyIHE9MCx0ZT1ZLmxlbmd0aDtxPHRlO3ErKylRPVc/WVtxXTpZLmNoYXJDb2RlQXQocSksQj1CPj4+OF5QWzI1NSYoQl5RKV07cmV0dXJufkJ9fSx7Ii4vdXRpbHMiOjIxfV0sNTpb'@;
put 'ZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3V0aWxzIik7ZnVuY3Rpb24gUChMKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH1QLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5k'@;
put 'ZXgrTCl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oTCl7aWYodGhpcy5sZW5ndGg8THx8TDwwKXRocm93IG5ldyBFcnJvcigiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiK3RoaXMubGVuZ3RoKyIsIGFza2VkIGluZGV4ID0gIitMKyIpLiBDb3JydXB0ZWQgemlwID8iKX0sc2V0'@;
put 'SW5kZXg6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KEwpLHRoaXMuaW5kZXg9TH0sc2tpcDpmdW5jdGlvbihMKXt0aGlzLnNldEluZGV4KHRoaXMuaW5kZXgrTCl9LGJ5dGVBdDpmdW5jdGlvbihMKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oTCl7dmFyIEIsWT0wO2Zvcih0aGlzLmNoZWNrT2Zm'@;
put 'c2V0KEwpLEI9dGhpcy5pbmRleCtMLTE7Qj49dGhpcy5pbmRleDtCLS0pWT0oWTw8OCkrdGhpcy5ieXRlQXQoQik7cmV0dXJuIHRoaXMuaW5kZXgrPUwsWX0scmVhZFN0cmluZzpmdW5jdGlvbihMKXtyZXR1cm4gai50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKEwpKX0scmVh'@;
put 'ZERhdGE6ZnVuY3Rpb24oTCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbihMKXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZSgxOTgwKyhMPj4yNSYxMjcpLChMPj4yMSYxNSktMSxMPj4xNiYzMSxMPj4xMSYzMSxMPj41'@;
put 'JjYzLCgzMSZMKTw8MSl9fSxILmV4cG9ydHM9UH0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7Ui5iYXNlNjQ9ITEsUi5iaW5hcnk9ITEsUi5kaXI9ITEsUi5jcmVhdGVGb2xkZXJzPSExLFIuZGF0ZT1udWxsLFIuY29tcHJlc3Npb249bnVsbCxSLmNv'@;
put 'bW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi91dGlscyIpO1Iuc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihQKXtyZXR1cm4gai5zdHJpbmcyYmluYXJ5KFApfSxSLnN0cmluZzJVaW50OEFycmF5PWZ1bmN0aW9uKFApe3JldHVybiBqLnRy'@;
put 'YW5zZm9ybVRvKCJ1aW50OGFycmF5IixQKX0sUi51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihQKXtyZXR1cm4gai50cmFuc2Zvcm1Ubygic3RyaW5nIixQKX0sUi5zdHJpbmcyQmxvYj1mdW5jdGlvbihQKXt2YXIgTD1qLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsUCk7cmV0dXJuIGou'@;
put 'YXJyYXlCdWZmZXIyQmxvYihMKX0sUi5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKFApe3JldHVybiBqLmFycmF5QnVmZmVyMkJsb2IoUCl9LFIudHJhbnNmb3JtVG89ZnVuY3Rpb24oUCxMKXtyZXR1cm4gai50cmFuc2Zvcm1UbyhQLEwpfSxSLmdldFR5cGVPZj1mdW5jdGlvbihQKXtyZXR1'@;
put 'cm4gai5nZXRUeXBlT2YoUCl9LFIuY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKFApe3JldHVybiBqLmNoZWNrU3VwcG9ydChQKX0sUi5NQVhfVkFMVUVfMTZCSVRTPWouTUFYX1ZBTFVFXzE2QklUUyxSLk1BWF9WQUxVRV8zMkJJVFM9ai5NQVhfVkFMVUVfMzJCSVRTLFIucHJldHR5PWZ1bmN0aW9u'@;
put 'KFApe3JldHVybiBqLnByZXR0eShQKX0sUi5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oUCl7cmV0dXJuIGouZmluZENvbXByZXNzaW9uKFApfSxSLmlzUmVnRXhwPWZ1bmN0aW9uKFApe3JldHVybiBqLmlzUmVnRXhwKFApfX0seyIuL3V0aWxzIjoyMX1dLDg6W2Z1bmN0aW9uKEYsSCxSKXsi'@;
put 'dXNlIHN0cmljdCI7dmFyIGo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgVWludDMyQXJyYXk8InUiLFA9RigicGFrbyIpO1IudW5jb21wcmVzc0lucHV0VHlwZT1qPyJ1aW50OGFycmF5IjoiYXJyYXkiLFIuY29tcHJlc3NJbnB1dFR5cGU9'@;
put 'aj8idWludDhhcnJheSI6ImFycmF5IixSLm1hZ2ljPSJcYlwwIixSLmNvbXByZXNzPWZ1bmN0aW9uKEwpe3JldHVybiBQLmRlZmxhdGVSYXcoTCl9LFIudW5jb21wcmVzcz1mdW5jdGlvbihMKXtyZXR1cm4gUC5pbmZsYXRlUmF3KEwpfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihGLEgsUil7'@;
put 'InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vYmFzZTY0Iik7ZnVuY3Rpb24gUChMLFkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgUChMLFkpO3RoaXMuZmlsZXM9e30sdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PSIiLEwmJnRoaXMubG9hZChMLFkpLHRoaXMuY2xvbmU9'@;
put 'ZnVuY3Rpb24oKXt2YXIgQj1uZXcgUDtmb3IodmFyIFcgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tXXSYmKEJbV109dGhpc1tXXSk7cmV0dXJuIEJ9fShQLnByb3RvdHlwZT1GKCIuL29iamVjdCIpKS5sb2FkPUYoIi4vbG9hZCIpLFAuc3VwcG9ydD1GKCIuL3N1cHBvcnQiKSxQ'@;
put 'LmRlZmF1bHRzPUYoIi4vZGVmYXVsdHMiKSxQLnV0aWxzPUYoIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksUC5iYXNlNjQ9e2VuY29kZTpmdW5jdGlvbihMKXtyZXR1cm4gai5lbmNvZGUoTCl9LGRlY29kZTpmdW5jdGlvbihMKXtyZXR1cm4gai5kZWNvZGUoTCl9fSxQLmNvbXByZXNzaW9u'@;
put 'cz1GKCIuL2NvbXByZXNzaW9ucyIpLEguZXhwb3J0cz1QfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9kZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlv'@;
put 'bihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vYmFzZTY0IiksUD1GKCIuL3ppcEVudHJpZXMiKTtILmV4cG9ydHM9ZnVuY3Rpb24oTCxZKXt2YXIgQixXLFosWDtmb3IoKFk9WXx8e30pLmJhc2U2NCYmKEw9ai5kZWNvZGUoTCkpLEI9KFc9bmV3IFAoTCxZKSkuZmlsZXMsWj0wO1o8'@;
put 'Qi5sZW5ndGg7WisrKXRoaXMuZmlsZSgoWD1CW1pdKS5maWxlTmFtZSxYLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRlOlguZGF0ZSxkaXI6WC5kaXIsY29tbWVudDpYLmZpbGVDb21tZW50Lmxlbmd0aD9YLmZpbGVDb21tZW50Om51bGwsY3Jl'@;
put 'YXRlRm9sZGVyczpZLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gVy56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1XLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKEYsSCxSKXsoZnVuY3Rpb24oail7InVzZSBz'@;
put 'dHJpY3QiO3ZhciBQPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgajwidSIpe3ZhciBMPSFqLmZyb207aWYoIUwpdHJ5e2ouZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe0w9ITB9UD1MP2Z1bmN0aW9uKFksQil7cmV0dXJuIEI/bmV3IGooWSxCKTpuZXcgaihZKX06ai5mcm9tLmJpbmQoaiksai5h'@;
put 'bGxvY3x8KGouYWxsb2M9ZnVuY3Rpb24oWSl7cmV0dXJuIG5ldyBqKFkpfSl9SC5leHBvcnRzPWZ1bmN0aW9uKFksQil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBZP2ouYWxsb2MoWSk6UChZLEIpfSxILmV4cG9ydHMudGVzdD1mdW5jdGlvbihZKXtyZXR1cm4gai5pc0J1ZmZlcihZKX19KS5j'@;
put 'YWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBQKEwpe3RoaXMuZGF0YT1MLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgs'@;
put 'dGhpcy5pbmRleD0wfShQLnByb3RvdHlwZT1uZXcgaikucmVhZERhdGE9ZnVuY3Rpb24oTCl7dGhpcy5jaGVja09mZnNldChMKTt2YXIgWT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0wpO3JldHVybiB0aGlzLmluZGV4Kz1MLFl9LEguZXhwb3J0cz1QfSx7Ii4vdWlu'@;
put 'dDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3N1cHBvcnQiKSxQPUYoIi4vdXRpbHMiKSxMPUYoIi4vY3JjMzIiKSxZPUYoIi4vc2lnbmF0dXJlIiksQj1GKCIuL2RlZmF1bHRzIiksVz1GKCIuL2Jhc2U2NCIpLFo9RigiLi9j'@;
put 'b21wcmVzc2lvbnMiKSxYPUYoIi4vY29tcHJlc3NlZE9iamVjdCIpLFE9RigiLi9ub2RlQnVmZmVyIikscT1GKCIuL3V0ZjgiKSx0ZT1GKCIuL3N0cmluZ1dyaXRlciIpLGllPUYoIi4vdWludDhBcnJheVdyaXRlciIpLHNlPWZ1bmN0aW9uKFUpe2lmKFUuX2RhdGEgaW5zdGFuY2VvZiBYJiYo'@;
put 'VS5fZGF0YT1VLl9kYXRhLmdldENvbnRlbnQoKSxVLm9wdGlvbnMuYmluYXJ5PSEwLFUub3B0aW9ucy5iYXNlNjQ9ITEsInVpbnQ4YXJyYXkiPT09UC5nZXRUeXBlT2YoVS5fZGF0YSkpKXt2YXIgRT1VLl9kYXRhO1UuX2RhdGE9bmV3IFVpbnQ4QXJyYXkoRS5sZW5ndGgpLDAhPT1FLmxlbmd0'@;
put 'aCYmVS5fZGF0YS5zZXQoRSwwKX1yZXR1cm4gVS5fZGF0YX0sZ2U9ZnVuY3Rpb24oVSl7dmFyIEU9c2UoVSk7cmV0dXJuInN0cmluZyI9PT1QLmdldFR5cGVPZihFKT8hVS5vcHRpb25zLmJpbmFyeSYmai5ub2RlYnVmZmVyP1EoRSwidXRmLTgiKTpVLmFzQmluYXJ5KCk6RX0sX2U9ZnVuY3Rp'@;
put 'b24oVSl7dmFyIEU9c2UodGhpcyk7cmV0dXJuIG51bGw9PT1FfHx0eXBlb2YgRT4idSI/IiI6KHRoaXMub3B0aW9ucy5iYXNlNjQmJihFPVcuZGVjb2RlKEUpKSxFPVUmJnRoaXMub3B0aW9ucy5iaW5hcnk/Vi51dGY4ZGVjb2RlKEUpOlAudHJhbnNmb3JtVG8oInN0cmluZyIsRSksIVUmJiF0'@;
put 'aGlzLm9wdGlvbnMuYmluYXJ5JiYoRT1QLnRyYW5zZm9ybVRvKCJzdHJpbmciLFYudXRmOGVuY29kZShFKSkpLEUpfSxUZT1mdW5jdGlvbihVLEUsbSl7dGhpcy5uYW1lPVUsdGhpcy5kaXI9bS5kaXIsdGhpcy5kYXRlPW0uZGF0ZSx0aGlzLmNvbW1lbnQ9bS5jb21tZW50LHRoaXMuX2RhdGE9'@;
put 'RSx0aGlzLm9wdGlvbnM9bSx0aGlzLl9pbml0aWFsTWV0YWRhdGE9e2RpcjptLmRpcixkYXRlOm0uZGF0ZX19O1RlLnByb3RvdHlwZT17YXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcywhMCl9LGFzQmluYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcywhMSl9'@;
put 'LGFzTm9kZUJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBVPWdlKHRoaXMpO3JldHVybiBQLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixVKX0sYXNVaW50OEFycmF5OmZ1bmN0aW9uKCl7dmFyIFU9Z2UodGhpcyk7cmV0dXJuIFAudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLFUpfSxhc0FycmF5QnVm'@;
put 'ZmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXNVaW50OEFycmF5KCkuYnVmZmVyfX07dmFyIFNlPWZ1bmN0aW9uKFUsRSl7dmFyIEEsbT0iIjtmb3IoQT0wO0E8RTtBKyspbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmVSksVT4+Pj04O3JldHVybiBtfSx6ZT1mdW5jdGlvbigpe3ZhciBF'@;
put 'LG0sVT17fTtmb3IoRT0wO0U8YXJndW1lbnRzLmxlbmd0aDtFKyspZm9yKG0gaW4gYXJndW1lbnRzW0VdKWFyZ3VtZW50c1tFXS5oYXNPd25Qcm9wZXJ0eShtKSYmdHlwZW9mIFVbbV0+InUiJiYoVVttXT1hcmd1bWVudHNbRV1bbV0pO3JldHVybiBVfSxnPWZ1bmN0aW9uKFUsRSxtKXt2YXIg'@;
put 'YWUsQT1QLmdldFR5cGVPZihFKTtpZihtPWZ1bmN0aW9uKFUpe3JldHVybiEwPT09KFU9VXx8e30pLmJhc2U2NCYmbnVsbD09VS5iaW5hcnkmJihVLmJpbmFyeT0hMCksKFU9emUoVSxCKSkuZGF0ZT1VLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1VLmNvbXByZXNzaW9uJiYoVS5jb21wcmVzc2lv'@;
put 'bj1VLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLFV9KG0pLG0uY3JlYXRlRm9sZGVycyYmKGFlPXkoVSkpJiZ4LmNhbGwodGhpcyxhZSwhMCksbS5kaXJ8fG51bGw9PT1FfHx0eXBlb2YgRT4idSIpbS5iYXNlNjQ9ITEsbS5iaW5hcnk9ITEsRT1udWxsO2Vsc2UgaWYoInN0cmluZyI9PT1B'@;
put 'KW0uYmluYXJ5JiYhbS5iYXNlNjQmJiEwIT09bS5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcmJihFPVAuc3RyaW5nMmJpbmFyeShFKSk7ZWxzZXtpZihtLmJhc2U2ND0hMSxtLmJpbmFyeT0hMCwhKEF8fEUgaW5zdGFuY2VvZiBYKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIG9mICciK1UrIicg'@;
put 'aXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0ICEiKTsiYXJyYXlidWZmZXIiPT09QSYmKEU9UC50cmFuc2Zvcm1UbygidWludDhhcnJheSIsRSkpfXZhciBuZT1uZXcgVGUoVSxFLG0pO3JldHVybiB0aGlzLmZpbGVzW1VdPW5lLG5lfSx5PWZ1bmN0aW9uKFUpeyIvIj09VS5zbGljZSgtMSkm'@;
put 'JihVPVUuc3Vic3RyaW5nKDAsVS5sZW5ndGgtMSkpO3ZhciBFPVUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gRT4wP1Uuc3Vic3RyaW5nKDAsRSk6IiJ9LHg9ZnVuY3Rpb24oVSxFKXtyZXR1cm4iLyIhPVUuc2xpY2UoLTEpJiYoVSs9Ii8iKSxFPXR5cGVvZiBFPCJ1IiYmRSx0aGlzLmZpbGVz'@;
put 'W1VdfHxnLmNhbGwodGhpcyxVLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOkV9KSx0aGlzLmZpbGVzW1VdfSxDPWZ1bmN0aW9uKFUsRSl7dmFyIEEsbT1uZXcgWDtyZXR1cm4gVS5fZGF0YSBpbnN0YW5jZW9mIFg/KG0udW5jb21wcmVzc2VkU2l6ZT1VLl9kYXRhLnVuY29tcHJlc3NlZFNp'@;
put 'emUsbS5jcmMzMj1VLl9kYXRhLmNyYzMyLDA9PT1tLnVuY29tcHJlc3NlZFNpemV8fFUuZGlyPyhFPVouU1RPUkUsbS5jb21wcmVzc2VkQ29udGVudD0iIixtLmNyYzMyPTApOlUuX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9PT1FLm1hZ2ljP20uY29tcHJlc3NlZENvbnRlbnQ9VS5fZGF0YS5n'@;
put 'ZXRDb21wcmVzc2VkQ29udGVudCgpOihBPVUuX2RhdGEuZ2V0Q29udGVudCgpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhQLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSk6KCghKEE9Z2UoVSkpfHwwPT09QS5sZW5ndGh8fFUuZGlyKSYmKEU9Wi5TVE9SRSxB'@;
put 'PSIiKSxtLnVuY29tcHJlc3NlZFNpemU9QS5sZW5ndGgsbS5jcmMzMj1MKEEpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhQLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSxtLmNvbXByZXNzZWRTaXplPW0uY29tcHJlc3NlZENvbnRlbnQubGVuZ3RoLG0uY29t'@;
put 'cHJlc3Npb25NZXRob2Q9RS5tYWdpYyxtfSxUPWZ1bmN0aW9uKFUsRSxtLEEpe3ZhciB4ZSx2ZSxGZSxSZSxuZT1QLnRyYW5zZm9ybVRvKCJzdHJpbmciLHEudXRmOGVuY29kZShFLm5hbWUpKSxsZT1FLmNvbW1lbnR8fCIiLHdlPVAudHJhbnNmb3JtVG8oInN0cmluZyIscS51dGY4ZW5jb2Rl'@;
put 'KGxlKSksWmU9bmUubGVuZ3RoIT09RS5uYW1lLmxlbmd0aCxRZT13ZS5sZW5ndGghPT1sZS5sZW5ndGgsYXQ9RS5vcHRpb25zLHFlPSIiLGplPSIiLEFlPSIiO0ZlPUUuX2luaXRpYWxNZXRhZGF0YS5kaXIhPT1FLmRpcj9FLmRpcjphdC5kaXIseGU9KFJlPUUuX2luaXRpYWxNZXRhZGF0YS5k'@;
put 'YXRlIT09RS5kYXRlP0UuZGF0ZTphdC5kYXRlKS5nZXRIb3VycygpLHhlPDw9Nix4ZXw9UmUuZ2V0TWludXRlcygpLHhlPDw9NSx4ZXw9UmUuZ2V0U2Vjb25kcygpLzIsdmU9UmUuZ2V0RnVsbFllYXIoKS0xOTgwLHZlPDw9NCx2ZXw9UmUuZ2V0TW9udGgoKSsxLHZlPDw9NSx2ZXw9UmUuZ2V0'@;
put 'RGF0ZSgpLFplJiYoamU9U2UoMSwxKStTZShMKG5lKSw0KStuZSxxZSs9InVwIitTZShqZS5sZW5ndGgsMikramUpLFFlJiYoQWU9U2UoMSwxKStTZSh0aGlzLmNyYzMyKHdlKSw0KSt3ZSxxZSs9InVjIitTZShBZS5sZW5ndGgsMikrQWUpO3ZhciBJZT0iIjtyZXR1cm4gSWUrPSJcblwwIixJ'@;
put 'ZSs9WmV8fFFlPyJcMFxiIjoiXDBcMCIsSWUrPW0uY29tcHJlc3Npb25NZXRob2QsSWUrPVNlKHhlLDIpLEllKz1TZSh2ZSwyKSxJZSs9U2UobS5jcmMzMiw0KSxJZSs9U2UobS5jb21wcmVzc2VkU2l6ZSw0KSxJZSs9U2UobS51bmNvbXByZXNzZWRTaXplLDQpLEllKz1TZShuZS5sZW5ndGgs'@;
put 'MiksSWUrPVNlKHFlLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpZLkxPQ0FMX0ZJTEVfSEVBREVSK0llK25lK3FlLGRpclJlY29yZDpZLkNFTlRSQUxfRklMRV9IRUFERVIrIlx4MTRcMCIrSWUrU2Uod2UubGVuZ3RoLDIpKyJcMFwwXDBcMCIrKCEwPT09RmU/Ilx4MTBcMFwwXDAiOiJcMFwwXDBc'@;
put 'MCIpK1NlKEEsNCkrbmUrcWUrd2UsY29tcHJlc3NlZE9iamVjdDptfX0sVj17bG9hZDpmdW5jdGlvbihVLEUpe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMgbm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlwLWxvYWQuanMgaW5jbHVkZWQgPyIpfSxmaWx0ZXI6ZnVuY3Rpb24o'@;
put 'VSl7dmFyIG0sQSxhZSxuZSxFPVtdO2ZvcihtIGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShtKSYmKG5lPW5ldyBUZSgoYWU9dGhpcy5maWxlc1ttXSkubmFtZSxhZS5fZGF0YSx6ZShhZS5vcHRpb25zKSksQT1tLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgsbS5sZW5n'@;
put 'dGgpLG0uc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmVShBLG5lKSYmRS5wdXNoKG5lKSk7cmV0dXJuIEV9LGZpbGU6ZnVuY3Rpb24oVSxFLG0pe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihQLmlzUmVnRXhwKFUpKXt2YXIgQT1VO3JldHVybiB0aGlzLmZpbHRl'@;
put 'cihmdW5jdGlvbihhZSxuZSl7cmV0dXJuIW5lLmRpciYmQS50ZXN0KGFlKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihhZSxuZSl7cmV0dXJuIW5lLmRpciYmYWU9PT1VfSlbMF18fG51bGx9cmV0dXJuIGcuY2FsbCh0aGlzLFU9dGhpcy5yb290K1UsRSxtKSx0aGlzfSxmb2xkZXI6'@;
put 'ZnVuY3Rpb24oVSl7aWYoIVUpcmV0dXJuIHRoaXM7aWYoUC5pc1JlZ0V4cChVKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsbmUpe3JldHVybiBuZS5kaXImJlUudGVzdChhZSl9KTt2YXIgbT14LmNhbGwodGhpcyx0aGlzLnJvb3QrVSksQT10aGlzLmNsb25lKCk7cmV0dXJuIEEu'@;
put 'cm9vdD1tLm5hbWUsQX0scmVtb3ZlOmZ1bmN0aW9uKFUpe3ZhciBFPXRoaXMuZmlsZXNbVT10aGlzLnJvb3QrVV07aWYoRXx8KCIvIiE9VS5zbGljZSgtMSkmJihVKz0iLyIpLEU9dGhpcy5maWxlc1tVXSksRSYmIUUuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW1VdO2Vsc2UgZm9yKHZhciBtPXRo'@;
put 'aXMuZmlsdGVyKGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4gbmUubmFtZS5zbGljZSgwLFUubGVuZ3RoKT09PVV9KSxBPTA7QTxtLmxlbmd0aDtBKyspZGVsZXRlIHRoaXMuZmlsZXNbbVtBXS5uYW1lXTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24oVSl7VT16ZShVfHx7fSx7YmFzZTY0'@;
put 'OiEwLGNvbXByZXNzaW9uOiJTVE9SRSIsdHlwZToiYmFzZTY0Iixjb21tZW50Om51bGx9KSxQLmNoZWNrU3VwcG9ydChVLnR5cGUpO3ZhciBhZSxuZSxxZSxFPVtdLG09MCxBPTAsbGU9UC50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0ZjhlbmNvZGUoVS5jb21tZW50fHx0aGlzLmNvbW1l'@;
put 'bnR8fCIiKSk7Zm9yKHZhciB3ZSBpbiB0aGlzLmZpbGVzKWlmKHRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkod2UpKXt2YXIgWmU9dGhpcy5maWxlc1t3ZV0sUWU9WmUub3B0aW9ucy5jb21wcmVzc2lvbnx8VS5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpLGF0PVpbUWVdO2lmKCFhdCl0aHJv'@;
put 'dyBuZXcgRXJyb3IoUWUrIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3ZhciB4ZT1DLmNhbGwodGhpcyxaZSxhdCksdmU9VC5jYWxsKHRoaXMsd2UsWmUseGUsbSk7bSs9dmUuZmlsZVJlY29yZC5sZW5ndGgreGUuY29tcHJlc3NlZFNpemUsQSs9dmUuZGlyUmVjb3Jk'@;
put 'Lmxlbmd0aCxFLnB1c2godmUpfXFlPVkuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJcMFwwXDBcMCIrU2UoRS5sZW5ndGgsMikrU2UoRS5sZW5ndGgsMikrU2UoQSw0KStTZShtLDQpK1NlKGxlLmxlbmd0aCwyKStsZTt2YXIgamU9VS50eXBlLnRvTG93ZXJDYXNlKCk7Zm9yKGFlPSJ1aW50OGFy'@;
put 'cmF5Ij09PWplfHwiYXJyYXlidWZmZXIiPT09amV8fCJibG9iIj09PWplfHwibm9kZWJ1ZmZlciI9PT1qZT9uZXcgaWUobStBK3FlLmxlbmd0aCk6bmV3IHRlKG0rQStxZS5sZW5ndGgpLG5lPTA7bmU8RS5sZW5ndGg7bmUrKylhZS5hcHBlbmQoRVtuZV0uZmlsZVJlY29yZCksYWUuYXBwZW5k'@;
put 'KEVbbmVdLmNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpO2ZvcihuZT0wO25lPEUubGVuZ3RoO25lKyspYWUuYXBwZW5kKEVbbmVdLmRpclJlY29yZCk7YWUuYXBwZW5kKHFlKTt2YXIgQWU9YWUuZmluYWxpemUoKTtzd2l0Y2goVS50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2Ui'@;
put 'dWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1cm4gUC50cmFuc2Zvcm1UbyhVLnR5cGUudG9Mb3dlckNhc2UoKSxBZSk7Y2FzZSJibG9iIjpyZXR1cm4gUC5hcnJheUJ1ZmZlcjJCbG9iKFAudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixBZSkpO2Nh'@;
put 'c2UiYmFzZTY0IjpyZXR1cm4gVS5iYXNlNjQ/Vy5lbmNvZGUoQWUpOkFlO2RlZmF1bHQ6cmV0dXJuIEFlfX0sY3JjMzI6ZnVuY3Rpb24oVSxFKXtyZXR1cm4gTChVLEUpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKFUpe3JldHVybiBQLnRyYW5zZm9ybVRvKCJzdHJpbmciLHEudXRmOGVuY29kZShV'@;
put 'KSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oVSl7cmV0dXJuIHEudXRmOGRlY29kZShVKX19O0guZXhwb3J0cz1WfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjEx'@;
put 'LCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0IjtSLkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNc'@;
put 'eDA0IixSLkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLFIuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2IixSLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLFIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2'@;
put 'IixSLkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi9kYXRhUmVhZGVyIiksUD1GKCIuL3V0aWxzIik7ZnVuY3Rpb24gTChZLEIpe3RoaXMuZGF0YT1ZLEJ8fCh0aGlzLmRhdGE9UC5zdHJpbmcyYmluYXJ5'@;
put 'KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShMLnByb3RvdHlwZT1uZXcgaikuYnl0ZUF0PWZ1bmN0aW9uKFkpe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChZKX0sTC5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rp'@;
put 'b24oWSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihZKX0sTC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oWSl7dGhpcy5jaGVja09mZnNldChZKTt2YXIgQj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K1kpO3JldHVybiB0aGlzLmluZGV4Kz1ZLEJ9LEgu'@;
put 'ZXhwb3J0cz1MfSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9XSwxNjpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3V0aWxzIiksUD1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07UC5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihMKXtMPWoudHJhbnNm'@;
put 'b3JtVG8oInN0cmluZyIsTCksdGhpcy5kYXRhLnB1c2goTCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LEguZXhwb3J0cz1QfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKEYsSCxSKXsoZnVuY3Rpb24oail7InVzZSBzdHJpY3QiO2lmKFIu'@;
put 'YmFzZTY0PSEwLFIuYXJyYXk9ITAsUi5zdHJpbmc9ITAsUi5hcnJheWJ1ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsUi5ub2RlYnVmZmVyPXR5cGVvZiBqPCJ1IixSLnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJh'@;
put 'eUJ1ZmZlcj4idSIpUi5ibG9iPSExO2Vsc2V7dmFyIFA9bmV3IEFycmF5QnVmZmVyKDApO3RyeXtSLmJsb2I9MD09PW5ldyBCbG9iKFtQXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBZPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRC'@;
put 'bG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7WS5hcHBlbmQoUCksUi5ibG9iPTA9PT1ZLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7Ui5ibG9iPSExfX19fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1'@;
put 'ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gUChMKXtMJiYodGhpcy5kYXRhPUwsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfShQLnByb3RvdHlwZT1uZXcg'@;
put 'aikuYnl0ZUF0PWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLmRhdGFbTF19LFAucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgWT1MLmNoYXJDb2RlQXQoMCksQj1MLmNoYXJDb2RlQXQoMSksVz1MLmNoYXJDb2RlQXQoMiksWj1MLmNoYXJDb2RlQXQo'@;
put 'MyksWD10aGlzLmxlbmd0aC00O1g+PTA7LS1YKWlmKHRoaXMuZGF0YVtYXT09PVkmJnRoaXMuZGF0YVtYKzFdPT09QiYmdGhpcy5kYXRhW1grMl09PT1XJiZ0aGlzLmRhdGFbWCszXT09PVopcmV0dXJuIFg7cmV0dXJuLTF9LFAucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEwpe2lmKHRo'@;
put 'aXMuY2hlY2tPZmZzZXQoTCksMD09PUwpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciBZPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTCk7cmV0dXJuIHRoaXMuaW5kZXgrPUwsWX0sSC5leHBvcnRzPVB9LHsiLi9kYXRhUmVhZGVyIjo1fV0sMTk6W2Z1bmN0'@;
put 'aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi91dGlscyIpLFA9ZnVuY3Rpb24oTCl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KEwpLHRoaXMuaW5kZXg9MH07UC5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihMKXswIT09TC5sZW5ndGgmJihMPWoudHJhbnNmb3JtVG8oInVp'@;
put 'bnQ4YXJyYXkiLEwpLHRoaXMuZGF0YS5zZXQoTCx0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1MLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEguZXhwb3J0cz1QfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7'@;
put 'Zm9yKHZhciBqPUYoIi4vdXRpbHMiKSxQPUYoIi4vc3VwcG9ydCIpLEw9RigiLi9ub2RlQnVmZmVyIiksWT1uZXcgQXJyYXkoMjU2KSxCPTA7QjwyNTY7QisrKVlbQl09Qj49MjUyPzY6Qj49MjQ4PzU6Qj49MjQwPzQ6Qj49MjI0PzM6Qj49MTkyPzI6MTtZWzI1NF09WVsyNTRdPTE7dmFyIFo9'@;
put 'ZnVuY3Rpb24oUSxxKXt2YXIgdGU7Zm9yKChxPXF8fFEubGVuZ3RoKT5RLmxlbmd0aCYmKHE9US5sZW5ndGgpLHRlPXEtMTt0ZT49MCYmMTI4PT0oMTkyJlFbdGVdKTspdGUtLTtyZXR1cm4gdGU8MHx8MD09PXRlP3E6dGUrWVtRW3RlXV0+cT90ZTpxfSxYPWZ1bmN0aW9uKFEpe3ZhciB0ZSxp'@;
put 'ZSxzZSxnZSxfZT1RLmxlbmd0aCxUZT1uZXcgQXJyYXkoMipfZSk7Zm9yKGllPTAsdGU9MDt0ZTxfZTspaWYoKHNlPVFbdGUrK10pPDEyOClUZVtpZSsrXT1zZTtlbHNlIGlmKChnZT1ZW3NlXSk+NClUZVtpZSsrXT02NTUzMyx0ZSs9Z2UtMTtlbHNle2ZvcihzZSY9Mj09PWdlPzMxOjM9PT1n'@;
put 'ZT8xNTo3O2dlPjEmJnRlPF9lOylzZT1zZTw8Nnw2MyZRW3RlKytdLGdlLS07Z2U+MT9UZVtpZSsrXT02NTUzMzpzZTw2NTUzNj9UZVtpZSsrXT1zZTooVGVbaWUrK109NTUyOTZ8KHNlLT02NTUzNik+PjEwJjEwMjMsVGVbaWUrK109NTYzMjB8MTAyMyZzZSl9cmV0dXJuIFRlLmxlbmd0aCE9'@;
put 'PWllJiYoVGUuc3ViYXJyYXk/VGU9VGUuc3ViYXJyYXkoMCxpZSk6VGUubGVuZ3RoPWllKSxqLmFwcGx5RnJvbUNoYXJDb2RlKFRlKX07Ui51dGY4ZW5jb2RlPWZ1bmN0aW9uKHEpe3JldHVybiBQLm5vZGVidWZmZXI/TChxLCJ1dGYtOCIpOmZ1bmN0aW9uKFEpe3ZhciBxLHRlLGllLHNlLGdl'@;
put 'LF9lPVEubGVuZ3RoLFRlPTA7Zm9yKHNlPTA7c2U8X2U7c2UrKyk1NTI5Nj09KDY0NTEyJih0ZT1RLmNoYXJDb2RlQXQoc2UpKSkmJnNlKzE8X2UmJjU2MzIwPT0oNjQ1MTImKGllPVEuY2hhckNvZGVBdChzZSsxKSkpJiYodGU9NjU1MzYrKHRlLTU1Mjk2PDwxMCkrKGllLTU2MzIwKSxzZSsr'@;
put 'KSxUZSs9dGU8MTI4PzE6dGU8MjA0OD8yOnRlPDY1NTM2PzM6NDtmb3IocT1QLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoVGUpOm5ldyBBcnJheShUZSksZ2U9MCxzZT0wO2dlPFRlO3NlKyspNTUyOTY9PSg2NDUxMiYodGU9US5jaGFyQ29kZUF0KHNlKSkpJiZzZSsxPF9lJiY1NjMyMD09'@;
put 'KDY0NTEyJihpZT1RLmNoYXJDb2RlQXQoc2UrMSkpKSYmKHRlPTY1NTM2Kyh0ZS01NTI5Njw8MTApKyhpZS01NjMyMCksc2UrKyksdGU8MTI4P3FbZ2UrK109dGU6dGU8MjA0OD8ocVtnZSsrXT0xOTJ8dGU+Pj42LHFbZ2UrK109MTI4fDYzJnRlKTp0ZTw2NTUzNj8ocVtnZSsrXT0yMjR8dGU+'@;
put 'Pj4xMixxW2dlKytdPTEyOHx0ZT4+PjYmNjMscVtnZSsrXT0xMjh8NjMmdGUpOihxW2dlKytdPTI0MHx0ZT4+PjE4LHFbZ2UrK109MTI4fHRlPj4+MTImNjMscVtnZSsrXT0xMjh8dGU+Pj42JjYzLHFbZ2UrK109MTI4fDYzJnRlKTtyZXR1cm4gcX0ocSl9LFIudXRmOGRlY29kZT1mdW5jdGlv'@;
put 'bihxKXtpZihQLm5vZGVidWZmZXIpcmV0dXJuIGoudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLHEpLnRvU3RyaW5nKCJ1dGYtOCIpO2Zvcih2YXIgdGU9W10saWU9MCxzZT0ocT1qLnRyYW5zZm9ybVRvKFAudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixxKSkubGVuZ3RoO2llPHNl'@;
put 'Oyl7dmFyIF9lPVoocSxNYXRoLm1pbihpZSs2NTUzNixzZSkpO3RlLnB1c2goWChQLnVpbnQ4YXJyYXk/cS5zdWJhcnJheShpZSxfZSk6cS5zbGljZShpZSxfZSkpKSxpZT1fZX1yZXR1cm4gdGUuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMi'@;
put 'OjIxfV0sMjE6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi9zdXBwb3J0IiksUD1GKCIuL2NvbXByZXNzaW9ucyIpLEw9RigiLi9ub2RlQnVmZmVyIik7ZnVuY3Rpb24gWShRKXtyZXR1cm4gUX1mdW5jdGlvbiBCKFEscSl7Zm9yKHZhciB0ZT0wO3RlPFEubGVuZ3Ro'@;
put 'OysrdGUpcVt0ZV09MjU1JlEuY2hhckNvZGVBdCh0ZSk7cmV0dXJuIHF9ZnVuY3Rpb24gVyhRKXt2YXIgcT02NTUzNix0ZT1bXSxpZT1RLmxlbmd0aCxzZT1SLmdldFR5cGVPZihRKSxnZT0wLF9lPSEwO3RyeXtzd2l0Y2goc2Upe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxMKDApKX19Y2F0Y2h7X2U9ITF9aWYoIV9lKXtmb3IodmFyIFRlPSIiLFNlPTA7U2U8US5sZW5ndGg7U2UrKylUZSs9U3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZShRW1NlXSk7cmV0dXJuIFRlfWZvcig7Z2U8aWUmJnE+MTspdHJ5e3RlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCJhcnJheSI9PT1zZXx8Im5vZGVidWZmZXIiPT09c2U/US5zbGljZShnZSxNYXRoLm1pbihnZStxLGllKSk6US5zdWJhcnJheShnZSxNYXRo'@;
put 'Lm1pbihnZStxLGllKSkpKSxnZSs9cX1jYXRjaHtxPU1hdGguZmxvb3IocS8yKX1yZXR1cm4gdGUuam9pbigiIil9ZnVuY3Rpb24gWihRLHEpe2Zvcih2YXIgdGU9MDt0ZTxRLmxlbmd0aDt0ZSsrKXFbdGVdPVFbdGVdO3JldHVybiBxfVIuc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihRKXtmb3Io'@;
put 'dmFyIHE9IiIsdGU9MDt0ZTxRLmxlbmd0aDt0ZSsrKXErPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JlEuY2hhckNvZGVBdCh0ZSkpO3JldHVybiBxfSxSLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oUSl7Ui5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtRXSx7'@;
put 'dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgdGU9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gdGUuYXBwZW5kKFEpLHRlLmdldEJs'@;
put 'b2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LFIuYXBwbHlGcm9tQ2hhckNvZGU9Vzt2YXIgWD17fTtYLnN0cmluZz17c3RyaW5nOlksYXJyYXk6ZnVuY3Rpb24oUSl7cmV0dXJuIEIoUSxuZXcg'@;
put 'QXJyYXkoUS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oUSl7cmV0dXJuIFguc3RyaW5nLnVpbnQ4YXJyYXkoUSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFEpe3JldHVybiBCKFEsbmV3IFVpbnQ4QXJyYXkoUS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihRKXty'@;
put 'ZXR1cm4gQihRLEwoUS5sZW5ndGgpKX19LFguYXJyYXk9e3N0cmluZzpXLGFycmF5OlksYXJyYXlidWZmZXI6ZnVuY3Rpb24oUSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFEpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihRKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoUSl9LG5vZGVidWZm'@;
put 'ZXI6ZnVuY3Rpb24oUSl7cmV0dXJuIEwoUSl9fSxYLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oUSl7cmV0dXJuIFcobmV3IFVpbnQ4QXJyYXkoUSkpfSxhcnJheTpmdW5jdGlvbihRKXtyZXR1cm4gWihuZXcgVWludDhBcnJheShRKSxuZXcgQXJyYXkoUS5ieXRlTGVuZ3RoKSl9LGFy'@;
put 'cmF5YnVmZmVyOlksdWludDhhcnJheTpmdW5jdGlvbihRKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoUSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oUSl7cmV0dXJuIEwobmV3IFVpbnQ4QXJyYXkoUSkpfX0sWC51aW50OGFycmF5PXtzdHJpbmc6VyxhcnJheTpmdW5jdGlvbihRKXtyZXR1cm4gWihR'@;
put 'LG5ldyBBcnJheShRLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihRKXtyZXR1cm4gUS5idWZmZXJ9LHVpbnQ4YXJyYXk6WSxub2RlYnVmZmVyOmZ1bmN0aW9uKFEpe3JldHVybiBMKFEpfX0sWC5ub2RlYnVmZmVyPXtzdHJpbmc6VyxhcnJheTpmdW5jdGlvbihRKXtyZXR1cm4gWihR'@;
put 'LG5ldyBBcnJheShRLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihRKXtyZXR1cm4gWC5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoUSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFEpe3JldHVybiBaKFEsbmV3IFVpbnQ4QXJyYXkoUS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpZfSxS'@;
put 'LnRyYW5zZm9ybVRvPWZ1bmN0aW9uKFEscSl7aWYocXx8KHE9IiIpLCFRKXJldHVybiBxO1IuY2hlY2tTdXBwb3J0KFEpO3ZhciB0ZT1SLmdldFR5cGVPZihxKTtyZXR1cm4gWFt0ZV1bUV0ocSl9LFIuZ2V0VHlwZU9mPWZ1bmN0aW9uKFEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUT8ic3Ry'@;
put 'aW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFEpPyJhcnJheSI6ai5ub2RlYnVmZmVyJiZMLnRlc3QoUSk/Im5vZGVidWZmZXIiOmoudWludDhhcnJheSYmUSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/InVpbnQ4YXJyYXkiOmouYXJyYXlidWZm'@;
put 'ZXImJlEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj8iYXJyYXlidWZmZXIiOnZvaWQgMH0sUi5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oUSl7aWYoIWpbUS50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoUSsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyIil9LFIuTUFYX1ZB'@;
put 'TFVFXzE2QklUUz02NTUzNSxSLk1BWF9WQUxVRV8zMkJJVFM9LTEsUi5wcmV0dHk9ZnVuY3Rpb24oUSl7dmFyIHRlLGllLHE9IiI7Zm9yKGllPTA7aWU8KFF8fCIiKS5sZW5ndGg7aWUrKylxKz0iXFx4IisoKHRlPVEuY2hhckNvZGVBdChpZSkpPDE2PyIwIjoiIikrdGUudG9TdHJpbmcoMTYp'@;
put 'LnRvVXBwZXJDYXNlKCk7cmV0dXJuIHF9LFIuZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKFEpe2Zvcih2YXIgcSBpbiBQKWlmKFAuaGFzT3duUHJvcGVydHkocSkmJlBbcV0ubWFnaWM9PT1RKXJldHVybiBQW3FdO3JldHVybiBudWxsfSxSLmlzUmVnRXhwPWZ1bmN0aW9uKFEpe3JldHVybiJb'@;
put 'b2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFEpfX0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vc3RyaW5nUmVhZGVy'@;
put 'IiksUD1GKCIuL25vZGVCdWZmZXJSZWFkZXIiKSxMPUYoIi4vdWludDhBcnJheVJlYWRlciIpLFk9RigiLi91dGlscyIpLEI9RigiLi9zaWduYXR1cmUiKSxXPUYoIi4vemlwRW50cnkiKSxaPUYoIi4vc3VwcG9ydCIpLFg9RigiLi9vYmplY3QiKTtmdW5jdGlvbiBRKHEsdGUpe3RoaXMuZmls'@;
put 'ZXM9W10sdGhpcy5sb2FkT3B0aW9ucz10ZSxxJiZ0aGlzLmxvYWQocSl9US5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKHEpe3ZhciB0ZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO2lmKHRlIT09cSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDog'@;
put 'dW5leHBlY3RlZCBzaWduYXR1cmUgKCIrWS5wcmV0dHkodGUpKyIsIGV4cGVjdGVkICIrWS5wcmV0dHkocSkrIikiKX0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJT'@;
put 'dGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVh'@;
put 'ZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMu'@;
put 'emlwQ29tbWVudD1YLnV0ZjhkZWNvZGUodGhpcy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMudmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFk'@;
put 'U3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRz'@;
put 'T25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQo'@;
put 'OCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgaWUsc2UsZ2UscT10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPHE7KWllPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksc2U9dGhpcy5yZWFkZXIucmVhZEludCg0KSxnZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHNl'@;
put 'KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbaWVdPXtpZDppZSxsZW5ndGg6c2UsdmFsdWU6Z2V9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0'@;
put 'aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3Vw'@;
put 'cG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIHEsdGU7Zm9yKHE9MDtxPHRoaXMuZmlsZXMubGVuZ3RoO3ErKyl0aGlzLnJlYWRlci5zZXRJbmRleCgodGU9dGhpcy5maWxlc1txXSkubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUoQi5MT0NBTF9G'@;
put 'SUxFX0hFQURFUiksdGUucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksdGUuaGFuZGxlVVRGOCgpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBxO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9'@;
put 'PT1CLkNFTlRSQUxfRklMRV9IRUFERVI7KShxPW5ldyBXKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2gocSl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgcT10aGlzLnJlYWRl'@;
put 'ci5sYXN0SW5kZXhPZlNpZ25hdHVyZShCLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT1xKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7aWYodGhpcy5yZWFkZXIuc2V0SW5kZXgocSksdGhpcy5jaGVj'@;
put 'a1NpZ25hdHVyZShCLkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwoKSx0aGlzLmRpc2tOdW1iZXI9PT1ZLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1ZLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJh'@;
put 'bERpclJlY29yZHNPblRoaXNEaXNrPT09WS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPT09WS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09WS5NQVhfVkFMVUVfMzJCSVRTfHx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9PT1ZLk1BWF9WQUxV'@;
put 'RV8zMkJJVFMpe2lmKHRoaXMuemlwNjQ9ITAsLTE9PT0ocT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShCLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2Yg'@;
put 'Y2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO3RoaXMucmVhZGVyLnNldEluZGV4KHEpLHRoaXMuY2hlY2tTaWduYXR1cmUoQi5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLHRoaXMucmVhZGVyLnNldElu'@;
put 'ZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShCLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihxKXt2YXIgdGU9'@;
put 'WS5nZXRUeXBlT2YocSk7dGhpcy5yZWFkZXI9InN0cmluZyIhPT10ZXx8Wi51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PXRlP25ldyBQKHEpOm5ldyBMKFkudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHEpKTpuZXcgaihxLHRoaXMubG9hZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5n'@;
put 'KX0sbG9hZDpmdW5jdGlvbihxKXt0aGlzLnByZXBhcmVSZWFkZXIocSksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LEguZXhwb3J0cz1RfSx7Ii4vbm9kZUJ1ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywi'@;
put 'Li9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVJlYWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vc3RyaW5nUmVhZGVyIiks'@;
put 'UD1GKCIuL3V0aWxzIiksTD1GKCIuL2NvbXByZXNzZWRPYmplY3QiKSxZPUYoIi4vb2JqZWN0Iik7ZnVuY3Rpb24gQihXLFope3RoaXMub3B0aW9ucz1XLHRoaXMubG9hZE9wdGlvbnM9Wn1CLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMuYml0Rmxh'@;
put 'Zyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4hKDIwNDgmfnRoaXMuYml0RmxhZyl9LHByZXBhcmVDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbihXLFosWCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFE9Vy5pbmRleDtXLnNldEluZGV4KFopO3ZhciBxPVcucmVhZERhdGEoWCk7cmV0dXJu'@;
put 'IFcuc2V0SW5kZXgoUSkscX19LHByZXBhcmVDb250ZW50OmZ1bmN0aW9uKFcsWixYLFEscSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHRlPVAudHJhbnNmb3JtVG8oUS51bmNvbXByZXNzSW5wdXRUeXBlLHRoaXMuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKSksaWU9US51bmNvbXByZXNzKHRlKTtp'@;
put 'ZihpZS5sZW5ndGghPT1xKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBpZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oVyl7dmFyIFosWDtpZihXLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vy5yZWFkSW50KDIp'@;
put 'LFg9Vy5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLFcuc2tpcChYKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDog'@;
put 'ZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oWj1QLmZpbmRDb21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitQLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcgTCx0aGlzLmRlY29tcHJl'@;
put 'c3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRo'@;
put 'b2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChXLFcuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxaKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJl'@;
put 'cGFyZUNvbnRlbnQoVyxXLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsWix0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPVAudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVu'@;
put 'dCgpKSxZLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihXKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9Vy5yZWFkU3RyaW5nKDIpLHRo'@;
put 'aXMudmVyc2lvbk5lZWRlZD1XLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPVcucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPVcucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Vy5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9Vy5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9Vy5y'@;
put 'ZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVy'@;
put 'U3RhcnQ9Vy5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1XLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPVcucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVcucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1XLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoVyksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChXKSx0aGlzLmZpbGVDb21tZW50PVcucmVh'@;
put 'ZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihXKXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgWj1uZXcgaih0aGlzLmV4dHJhRmllbGRzWzFd'@;
put 'LnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1QLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9Wi5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09UC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1aLnJlYWRJbnQoOCkp'@;
put 'LHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1QLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVoucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1QLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1aLnJlYWRJbnQoNCkpfX0s'@;
put 'cmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKFcpe3ZhciBYLFEscSxaPVcuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307Vy5pbmRleDxaK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KVg9Vy5yZWFkSW50KDIpLFE9Vy5yZWFkSW50KDIpLHE9Vy5yZWFkU3Ry'@;
put 'aW5nKFEpLHRoaXMuZXh0cmFGaWVsZHNbWF09e2lkOlgsbGVuZ3RoOlEsdmFsdWU6cX19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPVkudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PVkudXRmOGRlY29kZSh0'@;
put 'aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBXPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1XJiYodGhpcy5maWxlTmFtZT1XKTt2YXIgWj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09WiYmKHRoaXMuZmlsZUNvbW1lbnQ9Wil9fSxm'@;
put 'aW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoVyl7dmFyIFo9bmV3IGooVy52YWx1ZSk7cmV0dXJuIDEhPT1aLnJlYWRJbnQoMSl8fFkuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1aLnJlYWRJbnQoNCk/bnVsbDpZLnV0'@;
put 'ZjhkZWNvZGUoWi5yZWFkU3RyaW5nKFcubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBXPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKFcpe3ZhciBaPW5ldyBqKFcudmFsdWUpO3JldHVybiAxIT09Wi5yZWFkSW50'@;
put 'KDEpfHxZLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09Wi5yZWFkSW50KDQpP251bGw6WS51dGY4ZGVjb2RlKFoucmVhZFN0cmluZyhXLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxILmV4cG9ydHM9Qn0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdS'@;
put 'ZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBCPXt9OygwLEYoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoQixGKCIuL2xpYi9kZWZsYXRlIiksRigiLi9saWIvaW5mbGF0ZSIpLEYoIi4vbGliL3psaWIvY29uc3RhbnRz'@;
put 'IikpLEguZXhwb3J0cz1CfSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi96bGliL2RlZmxhdGUu'@;
put 'anMiKSxQPUYoIi4vdXRpbHMvY29tbW9uIiksTD1GKCIuL3V0aWxzL3N0cmluZ3MiKSxZPUYoIi4vemxpYi9tZXNzYWdlcyIpLEI9RigiLi96bGliL3pzdHJlYW0iKSxzZT1mdW5jdGlvbihTZSl7dGhpcy5vcHRpb25zPVAuYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYz'@;
put 'ODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LFNlfHx7fSk7dmFyIHplPXRoaXMub3B0aW9uczt6ZS5yYXcmJnplLndpbmRvd0JpdHM+MD96ZS53aW5kb3dCaXRzPS16ZS53aW5kb3dCaXRzOnplLmd6aXAmJnplLndpbmRvd0JpdHM+MCYmemUud2luZG93Qml0'@;
put 'czwxNiYmKHplLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBCLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgej1qLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0semUubGV2ZWwsemUubWV0aG9k'@;
put 'LHplLndpbmRvd0JpdHMsemUubWVtTGV2ZWwsemUuc3RyYXRlZ3kpO2lmKDAhPT16KXRocm93IG5ldyBFcnJvcihZW3pdKTt6ZS5oZWFkZXImJmouZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0semUuaGVhZGVyKX07ZnVuY3Rpb24gZ2UoU2UsemUpe3ZhciB6PW5ldyBzZSh6ZSk7aWYoei5w'@;
put 'dXNoKFNlLCEwKSx6LmVycil0aHJvdyB6Lm1zZztyZXR1cm4gei5yZXN1bHR9c2UucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oU2UsemUpe3ZhciB5LHgsej10aGlzLnN0cm0sZz10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7eD16ZT09PX5+emU/emU6ITA9'@;
put 'PT16ZT80OjAsei5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIFNlP0wuc3RyaW5nMmJ1ZihTZSk6U2Usei5uZXh0X2luPTAsei5hdmFpbF9pbj16LmlucHV0Lmxlbmd0aDtkb3tpZigwPT09ei5hdmFpbF9vdXQmJih6Lm91dHB1dD1uZXcgUC5CdWY4KGcpLHoubmV4dF9vdXQ9MCx6LmF2YWlsX291'@;
put 'dD1nKSwxIT09KHk9ai5kZWZsYXRlKHoseCkpJiYwIT09eSlyZXR1cm4gdGhpcy5vbkVuZCh5KSx0aGlzLmVuZGVkPSEwLCExOygwPT09ei5hdmFpbF9vdXR8fDA9PT16LmF2YWlsX2luJiY0PT09eCkmJnRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP0wuYnVmMmJpbnN0'@;
put 'cmluZyhQLnNocmlua0J1Zih6Lm91dHB1dCx6Lm5leHRfb3V0KSk6UC5zaHJpbmtCdWYoei5vdXRwdXQsei5uZXh0X291dCkpfXdoaWxlKCh6LmF2YWlsX2luPjB8fDA9PT16LmF2YWlsX291dCkmJjEhPT15KTtyZXR1cm4gNCE9PXh8fCh5PWouZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMu'@;
put 'b25FbmQoeSksdGhpcy5lbmRlZD0hMCwwPT09eSl9LHNlLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oU2Upe3RoaXMuY2h1bmtzLnB1c2goU2UpfSxzZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oU2UpezA9PT1TZSYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRv'@;
put 'P3RoaXMuY2h1bmtzLmpvaW4oIiIpOlAuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPVNlLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LFIuRGVmbGF0ZT1zZSxSLmRlZmxhdGU9Z2UsUi5kZWZsYXRlUmF3PWZ1bmN0aW9uIF9lKFNlLHplKXtyZXR1'@;
put 'cm4oemU9emV8fHt9KS5yYXc9ITAsZ2UoU2UsemUpfSxSLmd6aXA9ZnVuY3Rpb24gVGUoU2UsemUpe3JldHVybih6ZT16ZXx8e30pLmd6aXA9ITAsZ2UoU2UsemUpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwiLi96'@;
put 'bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi96bGliL2luZmxhdGUuanMiKSxQPUYoIi4vdXRpbHMvY29tbW9uIiksTD1GKCIuL3V0aWxzL3N0cmluZ3MiKSxZPUYoIi4vemxpYi9jb25zdGFu'@;
put 'dHMiKSxCPUYoIi4vemxpYi9tZXNzYWdlcyIpLFc9RigiLi96bGliL3pzdHJlYW0iKSxaPUYoIi4vemxpYi9nemhlYWRlciIpLFg9ZnVuY3Rpb24odGUpe3RoaXMub3B0aW9ucz1QLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0sdGV8fHt9KTt2YXIgaWU9dGhp'@;
put 'cy5vcHRpb25zO2llLnJhdyYmaWUud2luZG93Qml0cz49MCYmaWUud2luZG93Qml0czwxNiYmKGllLndpbmRvd0JpdHM9LWllLndpbmRvd0JpdHMsMD09PWllLndpbmRvd0JpdHMmJihpZS53aW5kb3dCaXRzPS0xNSkpLGllLndpbmRvd0JpdHM+PTAmJmllLndpbmRvd0JpdHM8MTYmJiEodGUm'@;
put 'JnRlLndpbmRvd0JpdHMpJiYoaWUud2luZG93Qml0cys9MzIpLGllLndpbmRvd0JpdHM+MTUmJmllLndpbmRvd0JpdHM8NDgmJigxNSZpZS53aW5kb3dCaXRzfHwoaWUud2luZG93Qml0c3w9MTUpKSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10s'@;
put 'dGhpcy5zdHJtPW5ldyBXLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgc2U9ai5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGllLndpbmRvd0JpdHMpO2lmKHNlIT09WS5aX09LKXRocm93IG5ldyBFcnJvcihCW3NlXSk7dGhpcy5oZWFkZXI9bmV3IFosai5pbmZsYXRlR2V0SGVhZGVyKHRoaXMu'@;
put 'c3RybSx0aGlzLmhlYWRlcil9O2Z1bmN0aW9uIFEodGUsaWUpe3ZhciBzZT1uZXcgWChpZSk7aWYoc2UucHVzaCh0ZSwhMCksc2UuZXJyKXRocm93IHNlLm1zZztyZXR1cm4gc2UucmVzdWx0fVgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odGUsaWUpe3ZhciBfZSxUZSxTZSx6ZSx6LHNlPXRo'@;
put 'aXMuc3RybSxnZT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7VGU9aWU9PT1+fmllP2llOiEwPT09aWU/WS5aX0ZJTklTSDpZLlpfTk9fRkxVU0gsc2UuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiB0ZT9MLmJpbnN0cmluZzJidWYodGUpOnRlLHNlLm5leHRf'@;
put 'aW49MCxzZS5hdmFpbF9pbj1zZS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PXNlLmF2YWlsX291dCYmKHNlLm91dHB1dD1uZXcgUC5CdWY4KGdlKSxzZS5uZXh0X291dD0wLHNlLmF2YWlsX291dD1nZSksKF9lPWouaW5mbGF0ZShzZSxZLlpfTk9fRkxVU0gpKSE9PVkuWl9TVFJFQU1fRU5EJiZf'@;
put 'ZSE9PVkuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChfZSksdGhpcy5lbmRlZD0hMCwhMTtzZS5uZXh0X291dCYmKDA9PT1zZS5hdmFpbF9vdXR8fF9lPT09WS5aX1NUUkVBTV9FTkR8fDA9PT1zZS5hdmFpbF9pbiYmVGU9PT1ZLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRv'@;
put 'PyhTZT1MLnV0Zjhib3JkZXIoc2Uub3V0cHV0LHNlLm5leHRfb3V0KSx6ZT1zZS5uZXh0X291dC1TZSx6PUwuYnVmMnN0cmluZyhzZS5vdXRwdXQsU2UpLHNlLm5leHRfb3V0PXplLHNlLmF2YWlsX291dD1nZS16ZSx6ZSYmUC5hcnJheVNldChzZS5vdXRwdXQsc2Uub3V0cHV0LFNlLHplLDAp'@;
put 'LHRoaXMub25EYXRhKHopKTp0aGlzLm9uRGF0YShQLnNocmlua0J1ZihzZS5vdXRwdXQsc2UubmV4dF9vdXQpKSl9d2hpbGUoc2UuYXZhaWxfaW4+MCYmX2UhPT1ZLlpfU1RSRUFNX0VORCk7cmV0dXJuIF9lPT09WS5aX1NUUkVBTV9FTkQmJihUZT1ZLlpfRklOSVNIKSxUZSE9PVkuWl9GSU5J'@;
put 'U0h8fChfZT1qLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLF9lPT09WS5aX09LKX0sWC5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHRlKXt0aGlzLmNodW5rcy5wdXNoKHRlKX0sWC5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odGUpe3RlPT09'@;
put 'WS5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6UC5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9dGUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sUi5JbmZsYXRlPVgsUi5p'@;
put 'bmZsYXRlPVEsUi5pbmZsYXRlUmF3PWZ1bmN0aW9uIHEodGUsaWUpe3JldHVybihpZT1pZXx8e30pLnJhdz0hMCxRKHRlLGllKX0sUi51bmd6aXA9UX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9jb25zdGFudHMiOjMwLCIuL3psaWIvZ3poZWFk'@;
put 'ZXIiOjMzLCIuL3psaWIvaW5mbGF0ZS5qcyI6MzUsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI3OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9m'@;
put 'IEludDMyQXJyYXk8InUiO1IuYXNzaWduPWZ1bmN0aW9uKFkpe2Zvcih2YXIgQj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Qi5sZW5ndGg7KXt2YXIgVz1CLnNoaWZ0KCk7aWYoVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXKXRocm93IG5ldyBUeXBlRXJyb3IoVysi'@;
put 'bXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBaIGluIFcpVy5oYXNPd25Qcm9wZXJ0eShaKSYmKFlbWl09V1taXSl9fXJldHVybiBZfSxSLnNocmlua0J1Zj1mdW5jdGlvbihZLEIpe3JldHVybiBZLmxlbmd0aD09PUI/WTpZLnN1YmFycmF5P1kuc3ViYXJyYXkoMCxCKTooWS5sZW5ndGg9'@;
put 'QixZKX07dmFyIFA9e2FycmF5U2V0OmZ1bmN0aW9uKFksQixXLFosWCl7aWYoQi5zdWJhcnJheSYmWS5zdWJhcnJheSlZLnNldChCLnN1YmFycmF5KFcsVytaKSxYKTtlbHNlIGZvcih2YXIgUT0wO1E8WjtRKyspWVtYK1FdPUJbVytRXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihZKXt2YXIg'@;
put 'QixXLFosWCxRLHE7Zm9yKFo9MCxCPTAsVz1ZLmxlbmd0aDtCPFc7QisrKVorPVlbQl0ubGVuZ3RoO2ZvcihxPW5ldyBVaW50OEFycmF5KFopLFg9MCxCPTAsVz1ZLmxlbmd0aDtCPFc7QisrKXEuc2V0KFE9WVtCXSxYKSxYKz1RLmxlbmd0aDtyZXR1cm4gcX19LEw9e2FycmF5U2V0OmZ1bmN0'@;
put 'aW9uKFksQixXLFosWCl7Zm9yKHZhciBRPTA7UTxaO1ErKylZW1grUV09QltXK1FdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKFkpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxZKX19O1Iuc2V0VHlwZWQ9ZnVuY3Rpb24oWSl7WT8oUi5CdWY4PVVpbnQ4QXJyYXksUi5CdWYxNj1VaW50MTZB'@;
put 'cnJheSxSLkJ1ZjMyPUludDMyQXJyYXksUi5hc3NpZ24oUixQKSk6KFIuQnVmOD1BcnJheSxSLkJ1ZjE2PUFycmF5LFIuQnVmMzI9QXJyYXksUi5hc3NpZ24oUixMKSl9LFIuc2V0VHlwZWQoail9LHt9XSwyODpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL2NvbW1v'@;
put 'biIpLFA9ITAsTD0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2h7UD0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaHtMPSExfWZvcih2YXIgWT1uZXcgai5CdWY4KDI1NiksQj0wO0I8MjU2'@;
put 'O0IrKylZW0JdPUI+PTI1Mj82OkI+PTI0OD81OkI+PTI0MD80OkI+PTIyND8zOkI+PTE5Mj8yOjE7ZnVuY3Rpb24gVyhaLFgpe2lmKFg8NjU1MzcmJihaLnN1YmFycmF5JiZMfHwhWi5zdWJhcnJheSYmUCkpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxqLnNocmlua0J1'@;
put 'ZihaLFgpKTtmb3IodmFyIFE9IiIscT0wO3E8WDtxKyspUSs9U3RyaW5nLmZyb21DaGFyQ29kZShaW3FdKTtyZXR1cm4gUX1ZWzI1NF09WVsyNTRdPTEsUi5zdHJpbmcyYnVmPWZ1bmN0aW9uKFope3ZhciBYLFEscSx0ZSxpZSxzZT1aLmxlbmd0aCxnZT0wO2Zvcih0ZT0wO3RlPHNlO3RlKysp'@;
put 'NTUyOTY9PSg2NDUxMiYoUT1aLmNoYXJDb2RlQXQodGUpKSkmJnRlKzE8c2UmJjU2MzIwPT0oNjQ1MTImKHE9Wi5jaGFyQ29kZUF0KHRlKzEpKSkmJihRPTY1NTM2KyhRLTU1Mjk2PDwxMCkrKHEtNTYzMjApLHRlKyspLGdlKz1RPDEyOD8xOlE8MjA0OD8yOlE8NjU1MzY/Mzo0O2ZvcihYPW5l'@;
put 'dyBqLkJ1ZjgoZ2UpLGllPTAsdGU9MDtpZTxnZTt0ZSsrKTU1Mjk2PT0oNjQ1MTImKFE9Wi5jaGFyQ29kZUF0KHRlKSkpJiZ0ZSsxPHNlJiY1NjMyMD09KDY0NTEyJihxPVouY2hhckNvZGVBdCh0ZSsxKSkpJiYoUT02NTUzNisoUS01NTI5Njw8MTApKyhxLTU2MzIwKSx0ZSsrKSxRPDEyOD9Y'@;
put 'W2llKytdPVE6UTwyMDQ4PyhYW2llKytdPTE5MnxRPj4+NixYW2llKytdPTEyOHw2MyZRKTpRPDY1NTM2PyhYW2llKytdPTIyNHxRPj4+MTIsWFtpZSsrXT0xMjh8UT4+PjYmNjMsWFtpZSsrXT0xMjh8NjMmUSk6KFhbaWUrK109MjQwfFE+Pj4xOCxYW2llKytdPTEyOHxRPj4+MTImNjMsWFtp'@;
put 'ZSsrXT0xMjh8UT4+PjYmNjMsWFtpZSsrXT0xMjh8NjMmUSk7cmV0dXJuIFh9LFIuYnVmMmJpbnN0cmluZz1mdW5jdGlvbihaKXtyZXR1cm4gVyhaLFoubGVuZ3RoKX0sUi5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKFope2Zvcih2YXIgWD1uZXcgai5CdWY4KFoubGVuZ3RoKSxRPTAscT1YLmxl'@;
put 'bmd0aDtRPHE7USsrKVhbUV09Wi5jaGFyQ29kZUF0KFEpO3JldHVybiBYfSxSLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24oWixYKXt2YXIgUSxxLHRlLGllLHNlPVh8fFoubGVuZ3RoLGdlPW5ldyBBcnJheSgyKnNlKTtmb3IocT0wLFE9MDtRPHNlOylpZigodGU9WltRKytdKTwxMjgpZ2VbcSsrXT10'@;
put 'ZTtlbHNlIGlmKChpZT1ZW3RlXSk+NClnZVtxKytdPTY1NTMzLFErPWllLTE7ZWxzZXtmb3IodGUmPTI9PT1pZT8zMTozPT09aWU/MTU6NztpZT4xJiZRPHNlOyl0ZT10ZTw8Nnw2MyZaW1ErK10saWUtLTtpZT4xP2dlW3ErK109NjU1MzM6dGU8NjU1MzY/Z2VbcSsrXT10ZTooZ2VbcSsrXT01'@;
put 'NTI5NnwodGUtPTY1NTM2KT4+MTAmMTAyMyxnZVtxKytdPTU2MzIwfDEwMjMmdGUpfXJldHVybiBXKGdlLHEpfSxSLnV0Zjhib3JkZXI9ZnVuY3Rpb24oWixYKXt2YXIgUTtmb3IoKFg9WHx8Wi5sZW5ndGgpPloubGVuZ3RoJiYoWD1aLmxlbmd0aCksUT1YLTE7UT49MCYmMTI4PT0oMTkyJlpb'@;
put 'UV0pOylRLS07cmV0dXJuIFE8MHx8MD09PVE/WDpRK1lbWltRXV0+WD9ROlh9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO0guZXhwb3J0cz1mdW5jdGlvbiBqKFAsTCxZLEIpe2Zvcih2YXIgVz02NTUzNSZQLFo9UD4+PjE2JjY1NTM1LFg9MDsw'@;
put 'IT09WTspe1ktPVg9WT4yZTM/MmUzOlk7ZG97Wj1aKyhXPVcrTFtCKytdfDApfDB9d2hpbGUoLS1YKTtXJT02NTUyMSxaJT02NTUyMX1yZXR1cm4gV3xaPDwxNn19LHt9XSwzMDpbZnVuY3Rpb24oRixILFIpe0guZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lO'@;
put 'Q19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNT'@;
put 'SU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dO'@;
put 'OjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBQPWZ1bmN0aW9uIGooKXtmb3IodmFyIFksQj1bXSxXPTA7VzwyNTY7VysrKXtZPVc7Zm9yKHZhciBaPTA7Wjw4O1orKylZPTEmWT8zOTg4MjkyMzg0Xlk+Pj4xOlk+Pj4xO0JbV109WX1y'@;
put 'ZXR1cm4gQn0oKTtILmV4cG9ydHM9ZnVuY3Rpb24gTChZLEIsVyxaKXt2YXIgWD1QLFE9WitXO1k9flk7Zm9yKHZhciBxPVo7cTxRO3ErKylZPVk+Pj44XlhbMjU1JihZXkJbcV0pXTtyZXR1cm5+WX19LHt9XSwzMjpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuLi91'@;
put 'dGlscy9jb21tb24iKSxQPUYoIi4vdHJlZXMiKSxMPUYoIi4vYWRsZXIzMiIpLFk9RigiLi9jcmMzMiIpLEI9RigiLi9tZXNzYWdlcyIpLFc9MCx0ZT0wLHNlPS0yLHg9MixDPTgsQT0yODYsYWU9MzAsbmU9MTksbGU9MipBKzEsd2U9MTUsWmU9MyxRZT0yNTgsYXQ9UWUrWmUrMSx2ZT00MixS'@;
put 'ZT0xMTM7ZnVuY3Rpb24gSmUoV2UsQXQpe3JldHVybiBXZS5tc2c9QltBdF0sQXR9ZnVuY3Rpb24gb24oV2Upe3JldHVybihXZTw8MSktKFdlPjQ/OTowKX1mdW5jdGlvbiB5dChXZSl7Zm9yKHZhciBBdD1XZS5sZW5ndGg7LS1BdD49MDspV2VbQXRdPTB9ZnVuY3Rpb24gTXQoV2Upe3ZhciBB'@;
put 'dD1XZS5zdGF0ZSxpcj1BdC5wZW5kaW5nO2lyPldlLmF2YWlsX291dCYmKGlyPVdlLmF2YWlsX291dCksMCE9PWlyJiYoai5hcnJheVNldChXZS5vdXRwdXQsQXQucGVuZGluZ19idWYsQXQucGVuZGluZ19vdXQsaXIsV2UubmV4dF9vdXQpLFdlLm5leHRfb3V0Kz1pcixBdC5wZW5kaW5nX291'@;
put 'dCs9aXIsV2UudG90YWxfb3V0Kz1pcixXZS5hdmFpbF9vdXQtPWlyLEF0LnBlbmRpbmctPWlyLDA9PT1BdC5wZW5kaW5nJiYoQXQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIEl0KFdlLEF0KXtQLl90cl9mbHVzaF9ibG9jayhXZSxXZS5ibG9ja19zdGFydD49MD9XZS5ibG9ja19zdGFydDot'@;
put 'MSxXZS5zdHJzdGFydC1XZS5ibG9ja19zdGFydCxBdCksV2UuYmxvY2tfc3RhcnQ9V2Uuc3Ryc3RhcnQsTXQoV2Uuc3RybSl9ZnVuY3Rpb24gcnQoV2UsQXQpe1dlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109QXR9ZnVuY3Rpb24gS2UoV2UsQXQpe1dlLnBlbmRpbmdfYnVmW1dlLnBlbmRp'@;
put 'bmcrK109QXQ+Pj44JjI1NSxXZS5wZW5kaW5nX2J1ZltXZS5wZW5kaW5nKytdPTI1NSZBdH1mdW5jdGlvbiB0dChXZSxBdCxpcixodCl7dmFyIEV0PVdlLmF2YWlsX2luO3JldHVybiBFdD5odCYmKEV0PWh0KSwwPT09RXQ/MDooV2UuYXZhaWxfaW4tPUV0LGouYXJyYXlTZXQoQXQsV2UuaW5w'@;
put 'dXQsV2UubmV4dF9pbixFdCxpciksMT09PVdlLnN0YXRlLndyYXA/V2UuYWRsZXI9TChXZS5hZGxlcixBdCxFdCxpcik6Mj09PVdlLnN0YXRlLndyYXAmJihXZS5hZGxlcj1ZKFdlLmFkbGVyLEF0LEV0LGlyKSksV2UubmV4dF9pbis9RXQsV2UudG90YWxfaW4rPUV0LEV0KX1mdW5jdGlvbiBO'@;
put 'ZShXZSxBdCl7dmFyIEV0LHpuLGlyPVdlLm1heF9jaGFpbl9sZW5ndGgsaHQ9V2Uuc3Ryc3RhcnQsYW49V2UucHJldl9sZW5ndGgsanQ9V2UubmljZV9tYXRjaCxkaT1XZS5zdHJzdGFydD5XZS53X3NpemUtYXQ/V2Uuc3Ryc3RhcnQtKFdlLndfc2l6ZS1hdCk6MCxjbj1XZS53aW5kb3csZm49'@;
put 'V2Uud19tYXNrLERpPVdlLnByZXYsUXQ9V2Uuc3Ryc3RhcnQrUWUsdG49Y25baHQrYW4tMV0sY2E9Y25baHQrYW5dO1dlLnByZXZfbGVuZ3RoPj1XZS5nb29kX21hdGNoJiYoaXI+Pj0yKSxqdD5XZS5sb29rYWhlYWQmJihqdD1XZS5sb29rYWhlYWQpO2Rve2lmKGNuWyhFdD1BdCkrYW5dPT09'@;
put 'Y2EmJmNuW0V0K2FuLTFdPT09dG4mJmNuW0V0XT09PWNuW2h0XSYmY25bKytFdF09PT1jbltodCsxXSl7aHQrPTIsRXQrKztkb3t9d2hpbGUoY25bKytodF09PT1jblsrK0V0XSYmY25bKytodF09PT1jblsrK0V0XSYmY25bKytodF09PT1jblsrK0V0XSYmY25bKytodF09PT1jblsrK0V0XSYm'@;
put 'Y25bKytodF09PT1jblsrK0V0XSYmY25bKytodF09PT1jblsrK0V0XSYmY25bKytodF09PT1jblsrK0V0XSYmY25bKytodF09PT1jblsrK0V0XSYmaHQ8UXQpO2lmKHpuPVFlLShRdC1odCksaHQ9UXQtUWUsem4+YW4pe2lmKFdlLm1hdGNoX3N0YXJ0PUF0LGFuPXpuLHpuPj1qdClicmVhazt0'@;
put 'bj1jbltodCthbi0xXSxjYT1jbltodCthbl19fX13aGlsZSgoQXQ9RGlbQXQmZm5dKT5kaSYmMCE9LS1pcik7cmV0dXJuIGFuPD1XZS5sb29rYWhlYWQ/YW46V2UubG9va2FoZWFkfWZ1bmN0aW9uIHV0KFdlKXt2YXIgaXIsaHQsRXQsem4sYW4sQXQ9V2Uud19zaXplO2Rve2lmKHpuPVdlLndp'@;
put 'bmRvd19zaXplLVdlLmxvb2thaGVhZC1XZS5zdHJzdGFydCxXZS5zdHJzdGFydD49QXQrKEF0LWF0KSl7ai5hcnJheVNldChXZS53aW5kb3csV2Uud2luZG93LEF0LEF0LDApLFdlLm1hdGNoX3N0YXJ0LT1BdCxXZS5zdHJzdGFydC09QXQsV2UuYmxvY2tfc3RhcnQtPUF0LGlyPWh0PVdlLmhh'@;
put 'c2hfc2l6ZTtkb3tFdD1XZS5oZWFkWy0taXJdLFdlLmhlYWRbaXJdPUV0Pj1BdD9FdC1BdDowfXdoaWxlKC0taHQpO2lyPWh0PUF0O2Rve0V0PVdlLnByZXZbLS1pcl0sV2UucHJldltpcl09RXQ+PUF0P0V0LUF0OjB9d2hpbGUoLS1odCk7em4rPUF0fWlmKDA9PT1XZS5zdHJtLmF2YWlsX2lu'@;
put 'KWJyZWFrO2lmKGh0PXR0KFdlLnN0cm0sV2Uud2luZG93LFdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZCx6biksV2UubG9va2FoZWFkKz1odCxXZS5sb29rYWhlYWQrV2UuaW5zZXJ0Pj1aZSlmb3IoV2UuaW5zX2g9V2Uud2luZG93W2FuPVdlLnN0cnN0YXJ0LVdlLmluc2VydF0sV2UuaW5zX2g9'@;
put 'KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1thbisxXSkmV2UuaGFzaF9tYXNrO1dlLmluc2VydCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbYW4rWmUtMV0pJldlLmhhc2hfbWFzayxXZS5wcmV2W2FuJldlLndfbWFza109V2UuaGVhZFtX'@;
put 'ZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09YW4sYW4rKyxXZS5pbnNlcnQtLSwhKFdlLmxvb2thaGVhZCtXZS5pbnNlcnQ8WmUpKTspO313aGlsZShXZS5sb29rYWhlYWQ8YXQmJjAhPT1XZS5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBMdChXZSxBdCl7Zm9yKHZhciBpcixodDs7KXtpZihX'@;
put 'ZS5sb29rYWhlYWQ8YXQpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8YXQmJkF0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKGlyPTAsV2UubG9va2FoZWFkPj1aZSYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3Rh'@;
put 'cnQrWmUtMV0pJldlLmhhc2hfbWFzayxpcj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLDAhPT1pciYmV2Uuc3Ryc3RhcnQtaXI8PVdlLndfc2l6ZS1hdCYmKFdlLm1hdGNoX2xlbmd0aD1OZShX'@;
put 'ZSxpcikpLFdlLm1hdGNoX2xlbmd0aD49WmUpaWYoaHQ9UC5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtV2UubWF0Y2hfc3RhcnQsV2UubWF0Y2hfbGVuZ3RoLVplKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5tYXRjaF9sZW5ndGg8PVdlLm1heF9sYXp5X21hdGNoJiZXZS5s'@;
put 'b29rYWhlYWQ+PVplKXtXZS5tYXRjaF9sZW5ndGgtLTtkb3tXZS5zdHJzdGFydCsrLFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrWmUtMV0pJldlLmhhc2hfbWFzayxpcj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVh'@;
put 'ZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnR9d2hpbGUoMCE9LS1XZS5tYXRjaF9sZW5ndGgpO1dlLnN0cnN0YXJ0Kyt9ZWxzZSBXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aD0wLFdlLmluc19oPVdlLndpbmRvd1tXZS5zdHJzdGFy'@;
put 'dF0sV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCsxXSkmV2UuaGFzaF9tYXNrO2Vsc2UgaHQ9UC5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxXZS5sb29rYWhlYWQtLSxXZS5zdHJzdGFydCsrO2lmKGh0JiYoSXQo'@;
put 'V2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD1XZS5zdHJzdGFydDxaZS0xP1dlLnN0cnN0YXJ0OlplLTEsND09PUF0PyhJdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihJdChXZSwhMSksMD09PVdl'@;
put 'LnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gUHQoV2UsQXQpe2Zvcih2YXIgaXIsaHQsRXQ7Oyl7aWYoV2UubG9va2FoZWFkPGF0KXtpZih1dChXZSksV2UubG9va2FoZWFkPGF0JiZBdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihpcj0wLFdlLmxvb2th'@;
put 'aGVhZD49WmUmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1plLTFdKSZXZS5oYXNoX21hc2ssaXI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0cnN0'@;
put 'YXJ0KSxXZS5wcmV2X2xlbmd0aD1XZS5tYXRjaF9sZW5ndGgsV2UucHJldl9tYXRjaD1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGg9WmUtMSwwIT09aXImJldlLnByZXZfbGVuZ3RoPFdlLm1heF9sYXp5X21hdGNoJiZXZS5zdHJzdGFydC1pcjw9V2Uud19zaXplLWF0JiYoV2UubWF0'@;
put 'Y2hfbGVuZ3RoPU5lKFdlLGlyKSxXZS5tYXRjaF9sZW5ndGg8PTUmJigxPT09V2Uuc3RyYXRlZ3l8fFdlLm1hdGNoX2xlbmd0aD09PVplJiZXZS5zdHJzdGFydC1XZS5tYXRjaF9zdGFydD40MDk2KSYmKFdlLm1hdGNoX2xlbmd0aD1aZS0xKSksV2UucHJldl9sZW5ndGg+PVplJiZXZS5tYXRj'@;
put 'aF9sZW5ndGg8PVdlLnByZXZfbGVuZ3RoKXtFdD1XZS5zdHJzdGFydCtXZS5sb29rYWhlYWQtWmUsaHQ9UC5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtMS1XZS5wcmV2X21hdGNoLFdlLnByZXZfbGVuZ3RoLVplKSxXZS5sb29rYWhlYWQtPVdlLnByZXZfbGVuZ3RoLTEsV2UucHJldl9sZW5n'@;
put 'dGgtPTI7ZG97KytXZS5zdHJzdGFydDw9RXQmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1plLTFdKSZXZS5oYXNoX21hc2ssaXI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRb'@;
put 'V2UuaW5zX2hdPVdlLnN0cnN0YXJ0KX13aGlsZSgwIT0tLVdlLnByZXZfbGVuZ3RoKTtpZihXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5tYXRjaF9sZW5ndGg9WmUtMSxXZS5zdHJzdGFydCsrLGh0JiYoSXQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihX'@;
put 'ZS5tYXRjaF9hdmFpbGFibGUpe2lmKChodD1QLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSkpJiZJdChXZSwhMSksV2Uuc3Ryc3RhcnQrKyxXZS5sb29rYWhlYWQtLSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpcmV0dXJuIDF9ZWxzZSBXZS5tYXRjaF9hdmFpbGFibGU9'@;
put 'MSxXZS5zdHJzdGFydCsrLFdlLmxvb2thaGVhZC0tfXJldHVybiBXZS5tYXRjaF9hdmFpbGFibGUmJihodD1QLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSksV2UubWF0Y2hfYXZhaWxhYmxlPTApLFdlLmluc2VydD1XZS5zdHJzdGFydDxaZS0xP1dlLnN0cnN0YXJ0'@;
put 'OlplLTEsND09PUF0PyhJdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihJdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9dmFyIElpLHNuPWZ1bmN0aW9uKFdlLEF0LGlyLGh0LEV0KXt0aGlzLmdvb2RfbGVuZ3RoPVdlLHRoaXMubWF4'@;
put 'X2xhenk9QXQsdGhpcy5uaWNlX2xlbmd0aD1pcix0aGlzLm1heF9jaGFpbj1odCx0aGlzLmZ1bmM9RXR9O2Z1bmN0aW9uIGZ0KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291'@;
put 'dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9Qyx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRv'@;
put 'd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMu'@;
put 'cHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0w'@;
put 'LHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgai5CdWYxNigyKmxlKSx0aGlzLmR5bl9kdHJlZT1uZXcgai5CdWYxNigyKigyKmFlKzEpKSx0aGlzLmJsX3RyZWU9bmV3IGouQnVmMTYoMiooMipuZSsxKSkseXQo'@;
put 'dGhpcy5keW5fbHRyZWUpLHl0KHRoaXMuZHluX2R0cmVlKSx5dCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBqLkJ1ZjE2KHdlKzEpLHRoaXMuaGVhcD1uZXcgai5CdWYxNigyKkErMSks'@;
put 'eXQodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IGouQnVmMTYoMipBKzEpLHl0KHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49'@;
put 'MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIEZyKFdlKXt2YXIgQXQ7cmV0dXJuIFdlJiZXZS5zdGF0ZT8oV2UudG90YWxfaW49V2UudG90YWxfb3V0PTAsV2UuZGF0YV90eXBlPXgs'@;
put 'KEF0PVdlLnN0YXRlKS5wZW5kaW5nPTAsQXQucGVuZGluZ19vdXQ9MCxBdC53cmFwPDAmJihBdC53cmFwPS1BdC53cmFwKSxBdC5zdGF0dXM9QXQud3JhcD92ZTpSZSxXZS5hZGxlcj0yPT09QXQud3JhcD8wOjEsQXQubGFzdF9mbHVzaD1XLFAuX3RyX2luaXQoQXQpLHRlKTpKZShXZSxzZSl9'@;
put 'ZnVuY3Rpb24gWnQoV2Upe3ZhciBBdD1GcihXZSk7cmV0dXJuIEF0PT09dGUmJmZ1bmN0aW9uIGRuKFdlKXtXZS53aW5kb3dfc2l6ZT0yKldlLndfc2l6ZSx5dChXZS5oZWFkKSxXZS5tYXhfbGF6eV9tYXRjaD1JaVtXZS5sZXZlbF0ubWF4X2xhenksV2UuZ29vZF9tYXRjaD1JaVtXZS5sZXZl'@;
put 'bF0uZ29vZF9sZW5ndGgsV2UubmljZV9tYXRjaD1JaVtXZS5sZXZlbF0ubmljZV9sZW5ndGgsV2UubWF4X2NoYWluX2xlbmd0aD1JaVtXZS5sZXZlbF0ubWF4X2NoYWluLFdlLnN0cnN0YXJ0PTAsV2UuYmxvY2tfc3RhcnQ9MCxXZS5sb29rYWhlYWQ9MCxXZS5pbnNlcnQ9MCxXZS5tYXRjaF9s'@;
put 'ZW5ndGg9V2UucHJldl9sZW5ndGg9WmUtMSxXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5pbnNfaD0wfShXZS5zdGF0ZSksQXR9ZnVuY3Rpb24gTG4oV2UsQXQsaXIsaHQsRXQsem4pe2lmKCFXZSlyZXR1cm4gc2U7dmFyIGFuPTE7aWYoLTE9PT1BdCYmKEF0PTYpLGh0PDA/KGFuPTAsaHQ9LWh0'@;
put 'KTpodD4xNSYmKGFuPTIsaHQtPTE2KSxFdDwxfHxFdD45fHxpciE9PUN8fGh0PDh8fGh0PjE1fHxBdDwwfHxBdD45fHx6bjwwfHx6bj40KXJldHVybiBKZShXZSxzZSk7OD09PWh0JiYoaHQ9OSk7dmFyIGp0PW5ldyBmdDtyZXR1cm4gV2Uuc3RhdGU9anQsanQuc3RybT1XZSxqdC53cmFwPWFu'@;
put 'LGp0Lmd6aGVhZD1udWxsLGp0LndfYml0cz1odCxqdC53X3NpemU9MTw8anQud19iaXRzLGp0LndfbWFzaz1qdC53X3NpemUtMSxqdC5oYXNoX2JpdHM9RXQrNyxqdC5oYXNoX3NpemU9MTw8anQuaGFzaF9iaXRzLGp0Lmhhc2hfbWFzaz1qdC5oYXNoX3NpemUtMSxqdC5oYXNoX3NoaWZ0PX5+'@;
put 'KChqdC5oYXNoX2JpdHMrWmUtMSkvWmUpLGp0LndpbmRvdz1uZXcgai5CdWY4KDIqanQud19zaXplKSxqdC5oZWFkPW5ldyBqLkJ1ZjE2KGp0Lmhhc2hfc2l6ZSksanQucHJldj1uZXcgai5CdWYxNihqdC53X3NpemUpLGp0LmxpdF9idWZzaXplPTE8PEV0KzYsanQucGVuZGluZ19idWZfc2l6'@;
put 'ZT00Kmp0LmxpdF9idWZzaXplLGp0LnBlbmRpbmdfYnVmPW5ldyBqLkJ1ZjgoanQucGVuZGluZ19idWZfc2l6ZSksanQuZF9idWY9anQubGl0X2J1ZnNpemU+PjEsanQubF9idWY9MypqdC5saXRfYnVmc2l6ZSxqdC5sZXZlbD1BdCxqdC5zdHJhdGVneT16bixqdC5tZXRob2Q9aXIsWnQoV2Up'@;
put 'fUlpPVtuZXcgc24oMCwwLDAsMCxmdW5jdGlvbiBKdChXZSxBdCl7dmFyIGlyPTY1NTM1O2Zvcihpcj5XZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihpcj1XZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKFdlLmxvb2thaGVhZDw9MSl7aWYodXQoV2UpLDA9PT1XZS5sb29rYWhlYWQmJkF0PT09'@;
put 'VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfVdlLnN0cnN0YXJ0Kz1XZS5sb29rYWhlYWQsV2UubG9va2FoZWFkPTA7dmFyIGh0PVdlLmJsb2NrX3N0YXJ0K2lyO2lmKCgwPT09V2Uuc3Ryc3RhcnR8fFdlLnN0cnN0YXJ0Pj1odCkmJihXZS5sb29rYWhlYWQ9V2Uuc3Ryc3Rh'@;
put 'cnQtaHQsV2Uuc3Ryc3RhcnQ9aHQsSXQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCl8fFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0Pj1XZS53X3NpemUtYXQmJihJdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09PUF0'@;
put 'PyhJdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6KFdlLnN0cnN0YXJ0PldlLmJsb2NrX3N0YXJ0JiZJdChXZSwhMSksMSl9KSxuZXcgc24oNCw0LDgsNCxMdCksbmV3IHNuKDQsNSwxNiw4LEx0KSxuZXcgc24oNCw2LDMyLDMyLEx0KSxuZXcgc24oNCw0LDE2LDE2LFB0KSxu'@;
put 'ZXcgc24oOCwxNiwzMiwzMixQdCksbmV3IHNuKDgsMTYsMTI4LDEyOCxQdCksbmV3IHNuKDgsMzIsMTI4LDI1NixQdCksbmV3IHNuKDMyLDEyOCwyNTgsMTAyNCxQdCksbmV3IHNuKDMyLDI1OCwyNTgsNDA5NixQdCldLFIuZGVmbGF0ZUluaXQ9ZnVuY3Rpb24gb3QoV2UsQXQpe3JldHVybiBM'@;
put 'bihXZSxBdCxDLDE1LDgsMCl9LFIuZGVmbGF0ZUluaXQyPUxuLFIuZGVmbGF0ZVJlc2V0PVp0LFIuZGVmbGF0ZVJlc2V0S2VlcD1GcixSLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24ga3QoV2UsQXQpe3JldHVybiBXZSYmV2Uuc3RhdGUmJjI9PT1XZS5zdGF0ZS53cmFwPyhXZS5zdGF0ZS5n'@;
put 'emhlYWQ9QXQsdGUpOnNlfSxSLmRlZmxhdGU9ZnVuY3Rpb24genQoV2UsQXQpe3ZhciBpcixodCxFdCx6bjtpZighV2V8fCFXZS5zdGF0ZXx8QXQ+NXx8QXQ8MClyZXR1cm4gV2U/SmUoV2Usc2UpOnNlO2lmKGh0PVdlLnN0YXRlLCFXZS5vdXRwdXR8fCFXZS5pbnB1dCYmMCE9PVdlLmF2YWls'@;
put 'X2lufHw2NjY9PT1odC5zdGF0dXMmJjQhPT1BdClyZXR1cm4gSmUoV2UsMD09PVdlLmF2YWlsX291dD8tNTpzZSk7aWYoaHQuc3RybT1XZSxpcj1odC5sYXN0X2ZsdXNoLGh0Lmxhc3RfZmx1c2g9QXQsaHQuc3RhdHVzPT09dmUpaWYoMj09PWh0LndyYXApV2UuYWRsZXI9MCxydChodCwzMSks'@;
put 'cnQoaHQsMTM5KSxydChodCw4KSxodC5nemhlYWQ/KHJ0KGh0LChodC5nemhlYWQudGV4dD8xOjApKyhodC5nemhlYWQuaGNyYz8yOjApKyhodC5nemhlYWQuZXh0cmE/NDowKSsoaHQuZ3poZWFkLm5hbWU/ODowKSsoaHQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLHJ0KGh0LDI1NSZodC5nemhl'@;
put 'YWQudGltZSkscnQoaHQsaHQuZ3poZWFkLnRpbWU+PjgmMjU1KSxydChodCxodC5nemhlYWQudGltZT4+MTYmMjU1KSxydChodCxodC5nemhlYWQudGltZT4+MjQmMjU1KSxydChodCw5PT09aHQubGV2ZWw/MjpodC5zdHJhdGVneT49Mnx8aHQubGV2ZWw8Mj80OjApLHJ0KGh0LDI1NSZodC5n'@;
put 'emhlYWQub3MpLGh0Lmd6aGVhZC5leHRyYSYmaHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKHJ0KGh0LDI1NSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSxydChodCxodC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLGh0Lmd6aGVhZC5oY3JjJiYoV2UuYWRsZXI9WShXZS5hZGxlcixodC5w'@;
put 'ZW5kaW5nX2J1ZixodC5wZW5kaW5nLDApKSxodC5nemluZGV4PTAsaHQuc3RhdHVzPTY5KToocnQoaHQsMCkscnQoaHQsMCkscnQoaHQsMCkscnQoaHQsMCkscnQoaHQsMCkscnQoaHQsOT09PWh0LmxldmVsPzI6aHQuc3RyYXRlZ3k+PTJ8fGh0LmxldmVsPDI/NDowKSxydChodCwzKSxodC5z'@;
put 'dGF0dXM9UmUpO2Vsc2V7dmFyIGFuPUMrKGh0LndfYml0cy04PDw0KTw8ODthbnw9KGh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzA6aHQubGV2ZWw8Nj8xOjY9PT1odC5sZXZlbD8yOjMpPDw2LDAhPT1odC5zdHJzdGFydCYmKGFufD0zMiksYW4rPTMxLWFuJTMxLGh0LnN0YXR1cz1SZSxL'@;
put 'ZShodCxhbiksMCE9PWh0LnN0cnN0YXJ0JiYoS2UoaHQsV2UuYWRsZXI+Pj4xNiksS2UoaHQsNjU1MzUmV2UuYWRsZXIpKSxXZS5hZGxlcj0xfWlmKDY5PT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5leHRyYSl7Zm9yKEV0PWh0LnBlbmRpbmc7aHQuZ3ppbmRleDwoNjU1MzUmaHQuZ3poZWFk'@;
put 'LmV4dHJhLmxlbmd0aCkmJihodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZXx8KGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPkV0JiYoV2UuYWRsZXI9WShXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLUV0LEV0KSksTXQoV2UpLEV0PWh0LnBlbmRpbmcsaHQucGVu'@;
put 'ZGluZyE9PWh0LnBlbmRpbmdfYnVmX3NpemUpKTspcnQoaHQsMjU1Jmh0Lmd6aGVhZC5leHRyYVtodC5nemluZGV4XSksaHQuZ3ppbmRleCsrO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPkV0JiYoV2UuYWRsZXI9WShXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLUV0LEV0'@;
put 'KSksaHQuZ3ppbmRleD09PWh0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihodC5nemluZGV4PTAsaHQuc3RhdHVzPTczKX1lbHNlIGh0LnN0YXR1cz03MztpZig3Mz09PWh0LnN0YXR1cylpZihodC5nemhlYWQubmFtZSl7RXQ9aHQucGVuZGluZztkb3tpZihodC5wZW5kaW5nPT09aHQucGVuZGlu'@;
put 'Z19idWZfc2l6ZSYmKGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPkV0JiYoV2UuYWRsZXI9WShXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLUV0LEV0KSksTXQoV2UpLEV0PWh0LnBlbmRpbmcsaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUpKXt6bj0xO2JyZWFr'@;
put 'fXpuPWh0Lmd6aW5kZXg8aHQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZodC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGh0Lmd6aW5kZXgrKyk6MCxydChodCx6bil9d2hpbGUoMCE9PXpuKTtodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz5FdCYmKFdlLmFkbGVyPVkoV2UuYWRsZXIsaHQucGVu'@;
put 'ZGluZ19idWYsaHQucGVuZGluZy1FdCxFdCkpLDA9PT16biYmKGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9OTEpfWVsc2UgaHQuc3RhdHVzPTkxO2lmKDkxPT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5jb21tZW50KXtFdD1odC5wZW5kaW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5kaW5n'@;
put 'X2J1Zl9zaXplJiYoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+RXQmJihXZS5hZGxlcj1ZKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmctRXQsRXQpKSxNdChXZSksRXQ9aHQucGVuZGluZyxodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSkpe3puPTE7YnJlYWt9'@;
put 'em49aHQuZ3ppbmRleDxodC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLHJ0KGh0LHpuKX13aGlsZSgwIT09em4pO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPkV0JiYoV2UuYWRsZXI9WShXZS5hZGxlcixo'@;
put 'dC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLUV0LEV0KSksMD09PXpuJiYoaHQuc3RhdHVzPTEwMyl9ZWxzZSBodC5zdGF0dXM9MTAzO2lmKDEwMz09PWh0LnN0YXR1cyYmKGh0Lmd6aGVhZC5oY3JjPyhodC5wZW5kaW5nKzI+aHQucGVuZGluZ19idWZfc2l6ZSYmTXQoV2UpLGh0LnBlbmRpbmcr'@;
put 'Mjw9aHQucGVuZGluZ19idWZfc2l6ZSYmKHJ0KGh0LDI1NSZXZS5hZGxlcikscnQoaHQsV2UuYWRsZXI+PjgmMjU1KSxXZS5hZGxlcj0wLGh0LnN0YXR1cz1SZSkpOmh0LnN0YXR1cz1SZSksMCE9PWh0LnBlbmRpbmcpe2lmKE10KFdlKSwwPT09V2UuYXZhaWxfb3V0KXJldHVybiBodC5sYXN0'@;
put 'X2ZsdXNoPS0xLHRlfWVsc2UgaWYoMD09PVdlLmF2YWlsX2luJiZvbihBdCk8PW9uKGlyKSYmNCE9PUF0KXJldHVybiBKZShXZSwtNSk7aWYoNjY2PT09aHQuc3RhdHVzJiYwIT09V2UuYXZhaWxfaW4pcmV0dXJuIEplKFdlLC01KTtpZigwIT09V2UuYXZhaWxfaW58fDAhPT1odC5sb29rYWhl'@;
put 'YWR8fEF0IT09VyYmNjY2IT09aHQuc3RhdHVzKXt2YXIgZGk9Mj09PWh0LnN0cmF0ZWd5P2Z1bmN0aW9uIGVuKFdlLEF0KXtmb3IodmFyIGlyOzspe2lmKDA9PT1XZS5sb29rYWhlYWQmJih1dChXZSksMD09PVdlLmxvb2thaGVhZCkpe2lmKEF0PT09VylyZXR1cm4gMTticmVha31pZihXZS5t'@;
put 'YXRjaF9sZW5ndGg9MCxpcj1QLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KyssaXImJihJdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09PUF0PyhJdChX'@;
put 'ZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihJdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KGh0LEF0KTozPT09aHQuc3RyYXRlZ3k/ZnVuY3Rpb24gb2koV2UsQXQpe2Zvcih2YXIgaXIsaHQsRXQsem4sYW49V2Uud2luZG93Ozspe2lm'@;
put 'KFdlLmxvb2thaGVhZDw9UWUpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8PVFlJiZBdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihXZS5tYXRjaF9sZW5ndGg9MCxXZS5sb29rYWhlYWQ+PVplJiZXZS5zdHJzdGFydD4wJiYoaHQ9YW5bRXQ9V2Uuc3Ryc3RhcnQt'@;
put 'MV0pPT09YW5bKytFdF0mJmh0PT09YW5bKytFdF0mJmh0PT09YW5bKytFdF0pe3puPVdlLnN0cnN0YXJ0K1FlO2Rve313aGlsZShodD09PWFuWysrRXRdJiZodD09PWFuWysrRXRdJiZodD09PWFuWysrRXRdJiZodD09PWFuWysrRXRdJiZodD09PWFuWysrRXRdJiZodD09PWFuWysrRXRdJiZo'@;
put 'dD09PWFuWysrRXRdJiZodD09PWFuWysrRXRdJiZFdDx6bik7V2UubWF0Y2hfbGVuZ3RoPVFlLSh6bi1FdCksV2UubWF0Y2hfbGVuZ3RoPldlLmxvb2thaGVhZCYmKFdlLm1hdGNoX2xlbmd0aD1XZS5sb29rYWhlYWQpfWlmKFdlLm1hdGNoX2xlbmd0aD49WmU/KGlyPVAuX3RyX3RhbGx5KFdl'@;
put 'LDEsV2UubWF0Y2hfbGVuZ3RoLVplKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aD0wKTooaXI9UC5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxXZS5sb29rYWhlYWQtLSxXZS5z'@;
put 'dHJzdGFydCsrKSxpciYmKEl0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09QXQ/KEl0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKEl0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9v'@;
put 'dXQpPzE6Mn0oaHQsQXQpOklpW2h0LmxldmVsXS5mdW5jKGh0LEF0KTtpZigoMz09PWRpfHw0PT09ZGkpJiYoaHQuc3RhdHVzPTY2NiksMT09PWRpfHwzPT09ZGkpcmV0dXJuIDA9PT1XZS5hdmFpbF9vdXQmJihodC5sYXN0X2ZsdXNoPS0xKSx0ZTtpZigyPT09ZGkmJigxPT09QXQ/UC5fdHJf'@;
put 'YWxpZ24oaHQpOjUhPT1BdCYmKFAuX3RyX3N0b3JlZF9ibG9jayhodCwwLDAsITEpLDM9PT1BdCYmKHl0KGh0LmhlYWQpLDA9PT1odC5sb29rYWhlYWQmJihodC5zdHJzdGFydD0wLGh0LmJsb2NrX3N0YXJ0PTAsaHQuaW5zZXJ0PTApKSksTXQoV2UpLDA9PT1XZS5hdmFpbF9vdXQpKXJldHVy'@;
put 'biBodC5sYXN0X2ZsdXNoPS0xLHRlfXJldHVybiA0IT09QXQ/dGU6aHQud3JhcDw9MD8xOigyPT09aHQud3JhcD8ocnQoaHQsMjU1JldlLmFkbGVyKSxydChodCxXZS5hZGxlcj4+OCYyNTUpLHJ0KGh0LFdlLmFkbGVyPj4xNiYyNTUpLHJ0KGh0LFdlLmFkbGVyPj4yNCYyNTUpLHJ0KGh0LDI1'@;
put 'NSZXZS50b3RhbF9pbikscnQoaHQsV2UudG90YWxfaW4+PjgmMjU1KSxydChodCxXZS50b3RhbF9pbj4+MTYmMjU1KSxydChodCxXZS50b3RhbF9pbj4+MjQmMjU1KSk6KEtlKGh0LFdlLmFkbGVyPj4+MTYpLEtlKGh0LDY1NTM1JldlLmFkbGVyKSksTXQoV2UpLGh0LndyYXA+MCYmKGh0Lndy'@;
put 'YXA9LWh0LndyYXApLDAhPT1odC5wZW5kaW5nP3RlOjEpfSxSLmRlZmxhdGVFbmQ9ZnVuY3Rpb24gbmkoV2Upe3ZhciBBdDtyZXR1cm4gV2UmJldlLnN0YXRlPyhBdD1XZS5zdGF0ZS5zdGF0dXMpIT09dmUmJjY5IT09QXQmJjczIT09QXQmJjkxIT09QXQmJjEwMyE9PUF0JiZBdCE9PVJlJiY2'@;
put 'NjYhPT1BdD9KZShXZSxzZSk6KFdlLnN0YXRlPW51bGwsQXQ9PT1SZT9KZShXZSwtMyk6dGUpOnNlfSxSLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9t'@;
put 'ZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7SC5leHBvcnRzPWZ1bmN0aW9uIGooKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0'@;
put 'aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9ZnVuY3Rpb24oWSxCKXt2YXIgVyxaLFgsUSxxLHRlLGllLHNlLGdlLF9lLFRlLFNlLHplLHosZyx5LHgsQyxU'@;
put 'LFYsVSxFLG0sQSxhZTtBPVkuaW5wdXQsWD0oWj1ZLm5leHRfaW4pKyhZLmF2YWlsX2luLTUpLGFlPVkub3V0cHV0LHE9KFE9WS5uZXh0X291dCktKEItWS5hdmFpbF9vdXQpLHRlPVErKFkuYXZhaWxfb3V0LTI1NyksaWU9KFc9WS5zdGF0ZSkuZG1heCxzZT1XLndzaXplLGdlPVcud2hhdmUs'@;
put 'X2U9Vy53bmV4dCxUZT1XLndpbmRvdyxTZT1XLmhvbGQsemU9Vy5iaXRzLHo9Vy5sZW5jb2RlLGc9Vy5kaXN0Y29kZSx5PSgxPDxXLmxlbmJpdHMpLTEseD0oMTw8Vy5kaXN0Yml0cyktMTtlOmRve3plPDE1JiYoU2UrPUFbWisrXTw8emUsU2UrPUFbWisrXTw8KHplKz04KSx6ZSs9OCksQz16'@;
put 'W1NlJnldO3Q6Zm9yKDs7KXtpZihTZT4+Pj1UPUM+Pj4yNCx6ZS09VCwwPT0oVD1DPj4+MTYmMjU1KSlhZVtRKytdPTY1NTM1JkM7ZWxzZXtpZighKDE2JlQpKXtpZig2NCZUKXtpZigzMiZUKXtXLm1vZGU9MTI7YnJlYWsgZX1ZLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixX'@;
put 'Lm1vZGU9MzA7YnJlYWsgZX1DPXpbKDY1NTM1JkMpKyhTZSYoMTw8VCktMSldO2NvbnRpbnVlIHR9Zm9yKFY9NjU1MzUmQywoVCY9MTUpJiYoemU8VCYmKFNlKz1BW1orK108PHplLHplKz04KSxWKz1TZSYoMTw8VCktMSxTZT4+Pj1ULHplLT1UKSx6ZTwxNSYmKFNlKz1BW1orK108PHplLFNl'@;
put 'Kz1BW1orK108PCh6ZSs9OCksemUrPTgpLEM9Z1tTZSZ4XTs7KXtpZihTZT4+Pj1UPUM+Pj4yNCx6ZS09VCwxNiYoVD1DPj4+MTYmMjU1KSl7aWYoVT02NTUzNSZDLHplPChUJj0xNSkmJihTZSs9QVtaKytdPDx6ZSwoemUrPTgpPFQmJihTZSs9QVtaKytdPDx6ZSx6ZSs9OCkpLChVKz1TZSYo'@;
put 'MTw8VCktMSk+aWUpe1kubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVy5tb2RlPTMwO2JyZWFrIGV9aWYoU2U+Pj49VCx6ZS09VCxVPihUPVEtcSkpe2lmKChUPVUtVCk+Z2UmJlcuc2FuZSl7WS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixXLm1vZGU9'@;
put 'MzA7YnJlYWsgZX1pZihFPTAsbT1UZSwwPT09X2Upe2lmKEUrPXNlLVQsVDxWKXtWLT1UO2Rve2FlW1ErK109VGVbRSsrXX13aGlsZSgtLVQpO0U9US1VLG09YWV9fWVsc2UgaWYoX2U8VCl7aWYoRSs9c2UrX2UtVCwoVC09X2UpPFYpe1YtPVQ7ZG97YWVbUSsrXT1UZVtFKytdfXdoaWxlKC0t'@;
put 'VCk7aWYoRT0wLF9lPFYpe1YtPVQ9X2U7ZG97YWVbUSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1RLVUsbT1hZX19fWVsc2UgaWYoRSs9X2UtVCxUPFYpe1YtPVQ7ZG97YWVbUSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1RLVUsbT1hZX1mb3IoO1Y+MjspYWVbUSsrXT1tW0UrK10sYWVbUSsr'@;
put 'XT1tW0UrK10sYWVbUSsrXT1tW0UrK10sVi09MztWJiYoYWVbUSsrXT1tW0UrK10sVj4xJiYoYWVbUSsrXT1tW0UrK10pKX1lbHNle0U9US1VO2Rve2FlW1ErK109YWVbRSsrXSxhZVtRKytdPWFlW0UrK10sYWVbUSsrXT1hZVtFKytdLFYtPTN9d2hpbGUoVj4yKTtWJiYoYWVbUSsrXT1hZVtF'@;
put 'KytdLFY+MSYmKGFlW1ErK109YWVbRSsrXSkpfWJyZWFrfWlmKDY0JlQpe1kubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLFcubW9kZT0zMDticmVhayBlfUM9Z1soNjU1MzUmQykrKFNlJigxPDxUKS0xKV19fWJyZWFrfX13aGlsZShaPFgmJlE8dGUpO1NlJj0oMTw8KHplLT0oVj16ZT4+'@;
put 'Myk8PDMpKS0xLFkubmV4dF9pbj1aLT1WLFkubmV4dF9vdXQ9USxZLmF2YWlsX2luPVo8WD9YLVorNTo1LShaLVgpLFkuYXZhaWxfb3V0PVE8dGU/dGUtUSsyNTc6MjU3LShRLXRlKSxXLmhvbGQ9U2UsVy5iaXRzPXplfX0se31dLDM1OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3Zh'@;
put 'ciBqPUYoIi4uL3V0aWxzL2NvbW1vbiIpLFA9RigiLi9hZGxlcjMyIiksTD1GKCIuL2NyYzMyIiksWT1GKCIuL2luZmZhc3QiKSxCPUYoIi4vaW5mdHJlZXMiKSxpZT0wLF9lPS0yLGc9MSx5dD04NTIsTXQ9NTkyO2Z1bmN0aW9uIEtlKGt0KXtyZXR1cm4oa3Q+Pj4yNCYyNTUpKyhrdD4+Pjgm'@;
put 'NjUyODApKygoNjUyODAma3QpPDw4KSsoKDI1NSZrdCk8PDI0KX1mdW5jdGlvbiB0dCgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVh'@;
put 'ZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5k'@;
put 'aXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgai5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgai5CdWYxNigyODgpLHRo'@;
put 'aXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBOZShrdCl7dmFyIExuO3JldHVybiBrdCYma3Quc3RhdGU/KGt0LnRvdGFsX2luPWt0LnRvdGFsX291dD0oTG49a3Quc3RhdGUpLnRvdGFsPTAsa3QubXNn'@;
put 'PSIiLExuLndyYXAmJihrdC5hZGxlcj0xJkxuLndyYXApLExuLm1vZGU9ZyxMbi5sYXN0PTAsTG4uaGF2ZWRpY3Q9MCxMbi5kbWF4PTMyNzY4LExuLmhlYWQ9bnVsbCxMbi5ob2xkPTAsTG4uYml0cz0wLExuLmxlbmNvZGU9TG4ubGVuZHluPW5ldyBqLkJ1ZjMyKHl0KSxMbi5kaXN0Y29kZT1M'@;
put 'bi5kaXN0ZHluPW5ldyBqLkJ1ZjMyKE10KSxMbi5zYW5lPTEsTG4uYmFjaz0tMSxpZSk6X2V9ZnVuY3Rpb24gdXQoa3Qpe3ZhciBMbjtyZXR1cm4ga3QmJmt0LnN0YXRlPygoTG49a3Quc3RhdGUpLndzaXplPTAsTG4ud2hhdmU9MCxMbi53bmV4dD0wLE5lKGt0KSk6X2V9ZnVuY3Rpb24gSnQo'@;
put 'a3QsTG4pe3ZhciBvdCx6dDtyZXR1cm4ha3R8fCFrdC5zdGF0ZXx8KHp0PWt0LnN0YXRlLExuPDA/KG90PTAsTG49LUxuKToob3Q9MSsoTG4+PjQpLExuPDQ4JiYoTG4mPTE1KSksTG4mJihMbjw4fHxMbj4xNSkpP19lOihudWxsIT09enQud2luZG93JiZ6dC53Yml0cyE9PUxuJiYoenQud2lu'@;
put 'ZG93PW51bGwpLHp0LndyYXA9b3QsenQud2JpdHM9TG4sdXQoa3QpKX1mdW5jdGlvbiBMdChrdCxMbil7dmFyIG90LHp0O3JldHVybiBrdD8oenQ9bmV3IHR0LGt0LnN0YXRlPXp0LHp0LndpbmRvdz1udWxsLChvdD1KdChrdCxMbikpIT09aWUmJihrdC5zdGF0ZT1udWxsKSxvdCk6X2V9dmFy'@;
put 'IGVuLHNuLG9pPSEwO2Z1bmN0aW9uIElpKGt0KXtpZihvaSl7dmFyIExuO2Zvcihlbj1uZXcgai5CdWYzMig1MTIpLHNuPW5ldyBqLkJ1ZjMyKDMyKSxMbj0wO0xuPDE0NDspa3QubGVuc1tMbisrXT04O2Zvcig7TG48MjU2OylrdC5sZW5zW0xuKytdPTk7Zm9yKDtMbjwyODA7KWt0LmxlbnNb'@;
put 'TG4rK109Nztmb3IoO0xuPDI4ODspa3QubGVuc1tMbisrXT04O2ZvcihCKDEsa3QubGVucywwLDI4OCxlbiwwLGt0Lndvcmsse2JpdHM6OX0pLExuPTA7TG48MzI7KWt0LmxlbnNbTG4rK109NTtCKDIsa3QubGVucywwLDMyLHNuLDAsa3Qud29yayx7Yml0czo1fSksb2k9ITF9a3QubGVuY29k'@;
put 'ZT1lbixrdC5sZW5iaXRzPTksa3QuZGlzdGNvZGU9c24sa3QuZGlzdGJpdHM9NX1SLmluZmxhdGVSZXNldD11dCxSLmluZmxhdGVSZXNldDI9SnQsUi5pbmZsYXRlUmVzZXRLZWVwPU5lLFIuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24gUHQoa3Qpe3JldHVybiBMdChrdCwxNSl9LFIuaW5mbGF0ZUlu'@;
put 'aXQyPUx0LFIuaW5mbGF0ZT1mdW5jdGlvbiBmdChrdCxMbil7dmFyIG90LHp0LG5pLFdlLEF0LGlyLGh0LEV0LHpuLGFuLGp0LGRpLGNuLGZuLFF0LHRuLGNhLHhpLHlyLEduLEtpLEpyLE5pLEhpLERpPTAsUXI9bmV3IGouQnVmOCg0KSxJYT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEs'@;
put 'NCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIWt0fHwha3Quc3RhdGV8fCFrdC5vdXRwdXR8fCFrdC5pbnB1dCYmMCE9PWt0LmF2YWlsX2luKXJldHVybiBfZTsxMj09PShvdD1rdC5zdGF0ZSkubW9kZSYmKG90Lm1vZGU9MTMpLEF0PWt0Lm5leHRfb3V0LG5pPWt0Lm91dHB1dCxXZT1rdC5uZXh0'@;
put 'X2luLHp0PWt0LmlucHV0LEV0PW90LmhvbGQsem49b3QuYml0cyxhbj1pcj1rdC5hdmFpbF9pbixqdD1odD1rdC5hdmFpbF9vdXQsSnI9aWU7ZTpmb3IoOzspc3dpdGNoKG90Lm1vZGUpe2Nhc2UgZzppZigwPT09b3Qud3JhcCl7b3QubW9kZT0xMzticmVha31mb3IoO3puPDE2Oyl7aWYoMD09'@;
put 'PWlyKWJyZWFrIGU7aXItLSxFdCs9enRbV2UrK108PHpuLHpuKz04fWlmKDImb3Qud3JhcCYmMzU2MTU9PT1FdCl7b3QuY2hlY2s9MCxRclswXT0yNTUmRXQsUXJbMV09RXQ+Pj44JjI1NSxvdC5jaGVjaz1MKG90LmNoZWNrLFFyLDIsMCksRXQ9MCx6bj0wLG90Lm1vZGU9MjticmVha31pZihv'@;
put 'dC5mbGFncz0wLG90LmhlYWQmJihvdC5oZWFkLmRvbmU9ITEpLCEoMSZvdC53cmFwKXx8KCgoMjU1JkV0KTw8OCkrKEV0Pj44KSklMzEpe2t0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsb3QubW9kZT0zMDticmVha31pZig4IT0oMTUmRXQpKXtrdC5tc2c9InVua25vd24gY29tcHJl'@;
put 'c3Npb24gbWV0aG9kIixvdC5tb2RlPTMwO2JyZWFrfWlmKHpuLT00LEtpPTgrKDE1JihFdD4+Pj00KSksMD09PW90LndiaXRzKW90LndiaXRzPUtpO2Vsc2UgaWYoS2k+b3Qud2JpdHMpe2t0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsb3QubW9kZT0zMDticmVha31vdC5kbWF4PTE8PEtp'@;
put 'LGt0LmFkbGVyPW90LmNoZWNrPTEsb3QubW9kZT01MTImRXQ/MTA6MTIsRXQ9MCx6bj0wO2JyZWFrO2Nhc2UgMjpmb3IoO3puPDE2Oyl7aWYoMD09PWlyKWJyZWFrIGU7aXItLSxFdCs9enRbV2UrK108PHpuLHpuKz04fWlmKG90LmZsYWdzPUV0LDghPSgyNTUmb3QuZmxhZ3MpKXtrdC5tc2c9'@;
put 'InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixvdC5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0Jm90LmZsYWdzKXtrdC5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsb3QubW9kZT0zMDticmVha31vdC5oZWFkJiYob3QuaGVhZC50ZXh0PUV0Pj44JjEpLDUxMiZvdC5mbGFncyYmKFFy'@;
put 'WzBdPTI1NSZFdCxRclsxXT1FdD4+PjgmMjU1LG90LmNoZWNrPUwob3QuY2hlY2ssUXIsMiwwKSksRXQ9MCx6bj0wLG90Lm1vZGU9MztjYXNlIDM6Zm9yKDt6bjwzMjspe2lmKDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0W1dlKytdPDx6bix6bis9OH1vdC5oZWFkJiYob3QuaGVhZC50aW1l'@;
put 'PUV0KSw1MTImb3QuZmxhZ3MmJihRclswXT0yNTUmRXQsUXJbMV09RXQ+Pj44JjI1NSxRclsyXT1FdD4+PjE2JjI1NSxRclszXT1FdD4+PjI0JjI1NSxvdC5jaGVjaz1MKG90LmNoZWNrLFFyLDQsMCkpLEV0PTAsem49MCxvdC5tb2RlPTQ7Y2FzZSA0OmZvcig7em48MTY7KXtpZigwPT09aXIp'@;
put 'YnJlYWsgZTtpci0tLEV0Kz16dFtXZSsrXTw8em4sem4rPTh9b3QuaGVhZCYmKG90LmhlYWQueGZsYWdzPTI1NSZFdCxvdC5oZWFkLm9zPUV0Pj44KSw1MTImb3QuZmxhZ3MmJihRclswXT0yNTUmRXQsUXJbMV09RXQ+Pj44JjI1NSxvdC5jaGVjaz1MKG90LmNoZWNrLFFyLDIsMCkpLEV0PTAs'@;
put 'em49MCxvdC5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQmb3QuZmxhZ3Mpe2Zvcig7em48MTY7KXtpZigwPT09aXIpYnJlYWsgZTtpci0tLEV0Kz16dFtXZSsrXTw8em4sem4rPTh9b3QubGVuZ3RoPUV0LG90LmhlYWQmJihvdC5oZWFkLmV4dHJhX2xlbj1FdCksNTEyJm90LmZsYWdzJiYoUXJbMF09'@;
put 'MjU1JkV0LFFyWzFdPUV0Pj4+OCYyNTUsb3QuY2hlY2s9TChvdC5jaGVjayxRciwyLDApKSxFdD0wLHpuPTB9ZWxzZSBvdC5oZWFkJiYob3QuaGVhZC5leHRyYT1udWxsKTtvdC5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmb3QuZmxhZ3MmJigoZGk9b3QubGVuZ3RoKT5pciYmKGRpPWlyKSxkaSYm'@;
put 'KG90LmhlYWQmJihLaT1vdC5oZWFkLmV4dHJhX2xlbi1vdC5sZW5ndGgsb3QuaGVhZC5leHRyYXx8KG90LmhlYWQuZXh0cmE9bmV3IEFycmF5KG90LmhlYWQuZXh0cmFfbGVuKSksai5hcnJheVNldChvdC5oZWFkLmV4dHJhLHp0LFdlLGRpLEtpKSksNTEyJm90LmZsYWdzJiYob3QuY2hlY2s9'@;
put 'TChvdC5jaGVjayx6dCxkaSxXZSkpLGlyLT1kaSxXZSs9ZGksb3QubGVuZ3RoLT1kaSksb3QubGVuZ3RoKSlicmVhayBlO290Lmxlbmd0aD0wLG90Lm1vZGU9NztjYXNlIDc6aWYoMjA0OCZvdC5mbGFncyl7aWYoMD09PWlyKWJyZWFrIGU7ZGk9MDtkb3tLaT16dFtXZStkaSsrXSxvdC5oZWFk'@;
put 'JiZLaSYmb3QubGVuZ3RoPDY1NTM2JiYob3QuaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEtpKSl9d2hpbGUoS2kmJmRpPGlyKTtpZig1MTImb3QuZmxhZ3MmJihvdC5jaGVjaz1MKG90LmNoZWNrLHp0LGRpLFdlKSksaXItPWRpLFdlKz1kaSxLaSlicmVhayBlfWVsc2Ugb3QuaGVh'@;
put 'ZCYmKG90LmhlYWQubmFtZT1udWxsKTtvdC5sZW5ndGg9MCxvdC5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmb3QuZmxhZ3Mpe2lmKDA9PT1pcilicmVhayBlO2RpPTA7ZG97S2k9enRbV2UrZGkrK10sb3QuaGVhZCYmS2kmJm90Lmxlbmd0aDw2NTUzNiYmKG90LmhlYWQuY29tbWVudCs9U3RyaW5n'@;
put 'LmZyb21DaGFyQ29kZShLaSkpfXdoaWxlKEtpJiZkaTxpcik7aWYoNTEyJm90LmZsYWdzJiYob3QuY2hlY2s9TChvdC5jaGVjayx6dCxkaSxXZSkpLGlyLT1kaSxXZSs9ZGksS2kpYnJlYWsgZX1lbHNlIG90LmhlYWQmJihvdC5oZWFkLmNvbW1lbnQ9bnVsbCk7b3QubW9kZT05O2Nhc2UgOTpp'@;
put 'Zig1MTImb3QuZmxhZ3Mpe2Zvcig7em48MTY7KXtpZigwPT09aXIpYnJlYWsgZTtpci0tLEV0Kz16dFtXZSsrXTw8em4sem4rPTh9aWYoRXQhPT0oNjU1MzUmb3QuY2hlY2spKXtrdC5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLG90Lm1vZGU9MzA7YnJlYWt9RXQ9MCx6bj0wfW90LmhlYWQm'@;
put 'JihvdC5oZWFkLmhjcmM9b3QuZmxhZ3M+PjkmMSxvdC5oZWFkLmRvbmU9ITApLGt0LmFkbGVyPW90LmNoZWNrPTAsb3QubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7em48MzI7KXtpZigwPT09aXIpYnJlYWsgZTtpci0tLEV0Kz16dFtXZSsrXTw8em4sem4rPTh9a3QuYWRsZXI9b3QuY2hl'@;
put 'Y2s9S2UoRXQpLEV0PTAsem49MCxvdC5tb2RlPTExO2Nhc2UgMTE6aWYoMD09PW90LmhhdmVkaWN0KXJldHVybiBrdC5uZXh0X291dD1BdCxrdC5hdmFpbF9vdXQ9aHQsa3QubmV4dF9pbj1XZSxrdC5hdmFpbF9pbj1pcixvdC5ob2xkPUV0LG90LmJpdHM9em4sMjtrdC5hZGxlcj1vdC5jaGVj'@;
put 'az0xLG90Lm1vZGU9MTI7Y2FzZSAxMjppZig1PT09TG58fDY9PT1MbilicmVhayBlO2Nhc2UgMTM6aWYob3QubGFzdCl7RXQ+Pj49NyZ6bix6bi09NyZ6bixvdC5tb2RlPTI3O2JyZWFrfWZvcig7em48Mzspe2lmKDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0W1dlKytdPDx6bix6bis9OH1z'@;
put 'd2l0Y2gob3QubGFzdD0xJkV0LHpuLT0xLDMmKEV0Pj4+PTEpKXtjYXNlIDA6b3QubW9kZT0xNDticmVhaztjYXNlIDE6aWYoSWkob3QpLG90Lm1vZGU9MjAsNj09PUxuKXtFdD4+Pj0yLHpuLT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOm90Lm1vZGU9MTc7YnJlYWs7Y2FzZSAzOmt0Lm1zZz0i'@;
put 'aW52YWxpZCBibG9jayB0eXBlIixvdC5tb2RlPTMwfUV0Pj4+PTIsem4tPTI7YnJlYWs7Y2FzZSAxNDpmb3IoRXQ+Pj49NyZ6bix6bi09NyZ6bjt6bjwzMjspe2lmKDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0W1dlKytdPDx6bix6bis9OH1pZigoNjU1MzUmRXQpIT0oRXQ+Pj4xNl42NTUz'@;
put 'NSkpe2t0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsb3QubW9kZT0zMDticmVha31pZihvdC5sZW5ndGg9NjU1MzUmRXQsRXQ9MCx6bj0wLG90Lm1vZGU9MTUsNj09PUxuKWJyZWFrIGU7Y2FzZSAxNTpvdC5tb2RlPTE2O2Nhc2UgMTY6aWYoZGk9b3QubGVuZ3RoKXtpZihk'@;
put 'aT5pciYmKGRpPWlyKSxkaT5odCYmKGRpPWh0KSwwPT09ZGkpYnJlYWsgZTtqLmFycmF5U2V0KG5pLHp0LFdlLGRpLEF0KSxpci09ZGksV2UrPWRpLGh0LT1kaSxBdCs9ZGksb3QubGVuZ3RoLT1kaTticmVha31vdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDt6bjwxNDspe2lmKDA9PT1p'@;
put 'cilicmVhayBlO2lyLS0sRXQrPXp0W1dlKytdPDx6bix6bis9OH1pZihvdC5ubGVuPTI1NysoMzEmRXQpLHpuLT01LG90Lm5kaXN0PTErKDMxJihFdD4+Pj01KSksem4tPTUsb3QubmNvZGU9NCsoMTUmKEV0Pj4+PTUpKSxFdD4+Pj00LHpuLT00LG90Lm5sZW4+Mjg2fHxvdC5uZGlzdD4zMCl7'@;
put 'a3QubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIsb3QubW9kZT0zMDticmVha31vdC5oYXZlPTAsb3QubW9kZT0xODtjYXNlIDE4OmZvcig7b3QuaGF2ZTxvdC5uY29kZTspe2Zvcig7em48Mzspe2lmKDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0W1dlKytdPDx6'@;
put 'bix6bis9OH1vdC5sZW5zW0lhW290LmhhdmUrK11dPTcmRXQsRXQ+Pj49Myx6bi09M31mb3IoO290LmhhdmU8MTk7KW90LmxlbnNbSWFbb3QuaGF2ZSsrXV09MDtpZihvdC5sZW5jb2RlPW90LmxlbmR5bixvdC5sZW5iaXRzPTcsSnI9QigwLG90LmxlbnMsMCwxOSxvdC5sZW5jb2RlLDAsb3Qu'@;
put 'd29yayxOaT17Yml0czpvdC5sZW5iaXRzfSksb3QubGVuYml0cz1OaS5iaXRzLEpyKXtrdC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsb3QubW9kZT0zMDticmVha31vdC5oYXZlPTAsb3QubW9kZT0xOTtjYXNlIDE5OmZvcig7b3QuaGF2ZTxvdC5ubGVuK290Lm5kaXN0Oyl7Zm9y'@;
put 'KDt0bj0oRGk9b3QubGVuY29kZVtFdCYoMTw8b3QubGVuYml0cyktMV0pPj4+MTYmMjU1LGNhPTY1NTM1JkRpLCEoKFF0PURpPj4+MjQpPD16bik7KXtpZigwPT09aXIpYnJlYWsgZTtpci0tLEV0Kz16dFtXZSsrXTw8em4sem4rPTh9aWYoY2E8MTYpRXQ+Pj49UXQsem4tPVF0LG90LmxlbnNb'@;
put 'b3QuaGF2ZSsrXT1jYTtlbHNle2lmKDE2PT09Y2Epe2ZvcihIaT1RdCsyO3puPEhpOyl7aWYoMD09PWlyKWJyZWFrIGU7aXItLSxFdCs9enRbV2UrK108PHpuLHpuKz04fWlmKEV0Pj4+PVF0LHpuLT1RdCwwPT09b3QuaGF2ZSl7a3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0Iixv'@;
put 'dC5tb2RlPTMwO2JyZWFrfUtpPW90LmxlbnNbb3QuaGF2ZS0xXSxkaT0zKygzJkV0KSxFdD4+Pj0yLHpuLT0yfWVsc2UgaWYoMTc9PT1jYSl7Zm9yKEhpPVF0KzM7em48SGk7KXtpZigwPT09aXIpYnJlYWsgZTtpci0tLEV0Kz16dFtXZSsrXTw8em4sem4rPTh9em4tPVF0LEtpPTAsZGk9Myso'@;
put 'NyYoRXQ+Pj49UXQpKSxFdD4+Pj0zLHpuLT0zfWVsc2V7Zm9yKEhpPVF0Kzc7em48SGk7KXtpZigwPT09aXIpYnJlYWsgZTtpci0tLEV0Kz16dFtXZSsrXTw8em4sem4rPTh9em4tPVF0LEtpPTAsZGk9MTErKDEyNyYoRXQ+Pj49UXQpKSxFdD4+Pj03LHpuLT03fWlmKG90LmhhdmUrZGk+b3Qu'@;
put 'bmxlbitvdC5uZGlzdCl7a3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixvdC5tb2RlPTMwO2JyZWFrfWZvcig7ZGktLTspb3QubGVuc1tvdC5oYXZlKytdPUtpfX1pZigzMD09PW90Lm1vZGUpYnJlYWs7aWYoMD09PW90LmxlbnNbMjU2XSl7a3QubXNnPSJpbnZhbGlkIGNvZGUg'@;
put 'LS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLG90Lm1vZGU9MzA7YnJlYWt9aWYob3QubGVuYml0cz05LEpyPUIoMSxvdC5sZW5zLDAsb3QubmxlbixvdC5sZW5jb2RlLDAsb3Qud29yayxOaT17Yml0czpvdC5sZW5iaXRzfSksb3QubGVuYml0cz1OaS5iaXRzLEpyKXtrdC5tc2c9ImludmFsaWQg'@;
put 'bGl0ZXJhbC9sZW5ndGhzIHNldCIsb3QubW9kZT0zMDticmVha31pZihvdC5kaXN0Yml0cz02LG90LmRpc3Rjb2RlPW90LmRpc3RkeW4sSnI9QigyLG90LmxlbnMsb3QubmxlbixvdC5uZGlzdCxvdC5kaXN0Y29kZSwwLG90LndvcmssTmk9e2JpdHM6b3QuZGlzdGJpdHN9KSxvdC5kaXN0Yml0'@;
put 'cz1OaS5iaXRzLEpyKXtrdC5tc2c9ImludmFsaWQgZGlzdGFuY2VzIHNldCIsb3QubW9kZT0zMDticmVha31pZihvdC5tb2RlPTIwLDY9PT1MbilicmVhayBlO2Nhc2UgMjA6b3QubW9kZT0yMTtjYXNlIDIxOmlmKGlyPj02JiZodD49MjU4KXtrdC5uZXh0X291dD1BdCxrdC5hdmFpbF9vdXQ9'@;
put 'aHQsa3QubmV4dF9pbj1XZSxrdC5hdmFpbF9pbj1pcixvdC5ob2xkPUV0LG90LmJpdHM9em4sWShrdCxqdCksQXQ9a3QubmV4dF9vdXQsbmk9a3Qub3V0cHV0LGh0PWt0LmF2YWlsX291dCxXZT1rdC5uZXh0X2luLHp0PWt0LmlucHV0LGlyPWt0LmF2YWlsX2luLEV0PW90LmhvbGQsem49b3Qu'@;
put 'Yml0cywxMj09PW90Lm1vZGUmJihvdC5iYWNrPS0xKTticmVha31mb3Iob3QuYmFjaz0wO3RuPShEaT1vdC5sZW5jb2RlW0V0JigxPDxvdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsY2E9NjU1MzUmRGksISgoUXQ9RGk+Pj4yNCk8PXpuKTspe2lmKDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0'@;
put 'W1dlKytdPDx6bix6bis9OH1pZih0biYmISgyNDAmdG4pKXtmb3IoeGk9UXQseXI9dG4sR249Y2E7dG49KERpPW90LmxlbmNvZGVbR24rKChFdCYoMTw8eGkreXIpLTEpPj54aSldKT4+PjE2JjI1NSxjYT02NTUzNSZEaSwhKHhpKyhRdD1EaT4+PjI0KTw9em4pOyl7aWYoMD09PWlyKWJyZWFr'@;
put 'IGU7aXItLSxFdCs9enRbV2UrK108PHpuLHpuKz04fUV0Pj4+PXhpLHpuLT14aSxvdC5iYWNrKz14aX1pZihFdD4+Pj1RdCx6bi09UXQsb3QuYmFjays9UXQsb3QubGVuZ3RoPWNhLDA9PT10bil7b3QubW9kZT0yNjticmVha31pZigzMiZ0bil7b3QuYmFjaz0tMSxvdC5tb2RlPTEyO2JyZWFr'@;
put 'fWlmKDY0JnRuKXtrdC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsb3QubW9kZT0zMDticmVha31vdC5leHRyYT0xNSZ0bixvdC5tb2RlPTIyO2Nhc2UgMjI6aWYob3QuZXh0cmEpe2ZvcihIaT1vdC5leHRyYTt6bjxIaTspe2lmKDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0'@;
put 'W1dlKytdPDx6bix6bis9OH1vdC5sZW5ndGgrPUV0JigxPDxvdC5leHRyYSktMSxFdD4+Pj1vdC5leHRyYSx6bi09b3QuZXh0cmEsb3QuYmFjays9b3QuZXh0cmF9b3Qud2FzPW90Lmxlbmd0aCxvdC5tb2RlPTIzO2Nhc2UgMjM6Zm9yKDt0bj0oRGk9b3QuZGlzdGNvZGVbRXQmKDE8PG90LmRp'@;
put 'c3RiaXRzKS0xXSk+Pj4xNiYyNTUsY2E9NjU1MzUmRGksISgoUXQ9RGk+Pj4yNCk8PXpuKTspe2lmKDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0W1dlKytdPDx6bix6bis9OH1pZighKDI0MCZ0bikpe2Zvcih4aT1RdCx5cj10bixHbj1jYTt0bj0oRGk9b3QuZGlzdGNvZGVbR24rKChFdCYo'@;
put 'MTw8eGkreXIpLTEpPj54aSldKT4+PjE2JjI1NSxjYT02NTUzNSZEaSwhKHhpKyhRdD1EaT4+PjI0KTw9em4pOyl7aWYoMD09PWlyKWJyZWFrIGU7aXItLSxFdCs9enRbV2UrK108PHpuLHpuKz04fUV0Pj4+PXhpLHpuLT14aSxvdC5iYWNrKz14aX1pZihFdD4+Pj1RdCx6bi09UXQsb3QuYmFj'@;
put 'ays9UXQsNjQmdG4pe2t0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixvdC5tb2RlPTMwO2JyZWFrfW90Lm9mZnNldD1jYSxvdC5leHRyYT0xNSZ0bixvdC5tb2RlPTI0O2Nhc2UgMjQ6aWYob3QuZXh0cmEpe2ZvcihIaT1vdC5leHRyYTt6bjxIaTspe2lmKDA9PT1pcilicmVhayBlO2ly'@;
put 'LS0sRXQrPXp0W1dlKytdPDx6bix6bis9OH1vdC5vZmZzZXQrPUV0JigxPDxvdC5leHRyYSktMSxFdD4+Pj1vdC5leHRyYSx6bi09b3QuZXh0cmEsb3QuYmFjays9b3QuZXh0cmF9aWYob3Qub2Zmc2V0Pm90LmRtYXgpe2t0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG90'@;
put 'Lm1vZGU9MzA7YnJlYWt9b3QubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1odClicmVhayBlO2lmKG90Lm9mZnNldD4oZGk9anQtaHQpKXtpZigoZGk9b3Qub2Zmc2V0LWRpKT5vdC53aGF2ZSYmb3Quc2FuZSl7a3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsb3QubW9kZT0z'@;
put 'MDticmVha31jbj1kaT5vdC53bmV4dD9vdC53c2l6ZS0oZGktPW90LnduZXh0KTpvdC53bmV4dC1kaSxkaT5vdC5sZW5ndGgmJihkaT1vdC5sZW5ndGgpLGZuPW90LndpbmRvd31lbHNlIGZuPW5pLGNuPUF0LW90Lm9mZnNldCxkaT1vdC5sZW5ndGg7ZGk+aHQmJihkaT1odCksaHQtPWRpLG90'@;
put 'Lmxlbmd0aC09ZGk7ZG97bmlbQXQrK109Zm5bY24rK119d2hpbGUoLS1kaSk7MD09PW90Lmxlbmd0aCYmKG90Lm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWh0KWJyZWFrIGU7bmlbQXQrK109b3QubGVuZ3RoLGh0LS0sb3QubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKG90LndyYXAp'@;
put 'e2Zvcig7em48MzI7KXtpZigwPT09aXIpYnJlYWsgZTtpci0tLEV0fD16dFtXZSsrXTw8em4sem4rPTh9aWYoa3QudG90YWxfb3V0Kz1qdC09aHQsb3QudG90YWwrPWp0LGp0JiYoa3QuYWRsZXI9b3QuY2hlY2s9b3QuZmxhZ3M/TChvdC5jaGVjayxuaSxqdCxBdC1qdCk6UChvdC5jaGVjayxu'@;
put 'aSxqdCxBdC1qdCkpLGp0PWh0LChvdC5mbGFncz9FdDpLZShFdCkpIT09b3QuY2hlY2spe2t0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG90Lm1vZGU9MzA7YnJlYWt9RXQ9MCx6bj0wfW90Lm1vZGU9Mjg7Y2FzZSAyODppZihvdC53cmFwJiZvdC5mbGFncyl7Zm9yKDt6bjwzMjspe2lm'@;
put 'KDA9PT1pcilicmVhayBlO2lyLS0sRXQrPXp0W1dlKytdPDx6bix6bis9OH1pZihFdCE9PSg0Mjk0OTY3Mjk1Jm90LnRvdGFsKSl7a3QubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIixvdC5tb2RlPTMwO2JyZWFrfUV0PTAsem49MH1vdC5tb2RlPTI5O2Nhc2UgMjk6SnI9MTticmVhayBl'@;
put 'O2Nhc2UgMzA6SnI9LTM7YnJlYWsgZTtjYXNlIDMxOnJldHVybi00O2RlZmF1bHQ6cmV0dXJuIF9lfXJldHVybiBrdC5uZXh0X291dD1BdCxrdC5hdmFpbF9vdXQ9aHQsa3QubmV4dF9pbj1XZSxrdC5hdmFpbF9pbj1pcixvdC5ob2xkPUV0LG90LmJpdHM9em4sKG90LndzaXplfHxqdCE9PWt0'@;
put 'LmF2YWlsX291dCYmb3QubW9kZTwzMCYmKG90Lm1vZGU8Mjd8fDQhPT1MbikpJiZmdW5jdGlvbiBkbihrdCxMbixvdCx6dCl7dmFyIG5pLFdlPWt0LnN0YXRlO3JldHVybiBudWxsPT09V2Uud2luZG93JiYoV2Uud3NpemU9MTw8V2Uud2JpdHMsV2Uud25leHQ9MCxXZS53aGF2ZT0wLFdlLndp'@;
put 'bmRvdz1uZXcgai5CdWY4KFdlLndzaXplKSksenQ+PVdlLndzaXplPyhqLmFycmF5U2V0KFdlLndpbmRvdyxMbixvdC1XZS53c2l6ZSxXZS53c2l6ZSwwKSxXZS53bmV4dD0wLFdlLndoYXZlPVdlLndzaXplKTooKG5pPVdlLndzaXplLVdlLnduZXh0KT56dCYmKG5pPXp0KSxqLmFycmF5U2V0'@;
put 'KFdlLndpbmRvdyxMbixvdC16dCxuaSxXZS53bmV4dCksKHp0LT1uaSk/KGouYXJyYXlTZXQoV2Uud2luZG93LExuLG90LXp0LHp0LDApLFdlLnduZXh0PXp0LFdlLndoYXZlPVdlLndzaXplKTooV2Uud25leHQrPW5pLFdlLnduZXh0PT09V2Uud3NpemUmJihXZS53bmV4dD0wKSxXZS53aGF2'@;
put 'ZTxXZS53c2l6ZSYmKFdlLndoYXZlKz1uaSkpKSwwfShrdCxrdC5vdXRwdXQsa3QubmV4dF9vdXQsanQta3QuYXZhaWxfb3V0KT8ob3QubW9kZT0zMSwtNCk6KGp0LT1rdC5hdmFpbF9vdXQsa3QudG90YWxfaW4rPWFuLT1rdC5hdmFpbF9pbixrdC50b3RhbF9vdXQrPWp0LG90LnRvdGFsKz1q'@;
put 'dCxvdC53cmFwJiZqdCYmKGt0LmFkbGVyPW90LmNoZWNrPW90LmZsYWdzP0wob3QuY2hlY2ssbmksanQsa3QubmV4dF9vdXQtanQpOlAob3QuY2hlY2ssbmksanQsa3QubmV4dF9vdXQtanQpKSxrdC5kYXRhX3R5cGU9b3QuYml0cysob3QubGFzdD82NDowKSsoMTI9PT1vdC5tb2RlPzEyODow'@;
put 'KSsoMjA9PT1vdC5tb2RlfHwxNT09PW90Lm1vZGU/MjU2OjApLCgwPT09YW4mJjA9PT1qdHx8ND09PUxuKSYmSnI9PT1pZSYmKEpyPS01KSxKcil9LFIuaW5mbGF0ZUVuZD1mdW5jdGlvbiBGcihrdCl7aWYoIWt0fHwha3Quc3RhdGUpcmV0dXJuIF9lO3ZhciBMbj1rdC5zdGF0ZTtyZXR1cm4g'@;
put 'TG4ud2luZG93JiYoTG4ud2luZG93PW51bGwpLGt0LnN0YXRlPW51bGwsaWV9LFIuaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBadChrdCxMbil7dmFyIG90O3JldHVybiBrdCYma3Quc3RhdGUmJjImKG90PWt0LnN0YXRlKS53cmFwPyhvdC5oZWFkPUxuLExuLmRvbmU9ITEsaWUpOl9lfSxS'@;
put 'LmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgaj1GKCIuLi91dGlscy9jb21tb24iKSxYPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sUT1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgs'@;
put 'MTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLHE9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwy'@;
put 'NDU3NywwLDBdLHRlPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF07SC5leHBvcnRzPWZ1bmN0aW9uKHNlLGdlLF9lLFRlLFNlLHplLHosZyl7dmFyIGxlLHdlLFpl'@;
put 'LFFlLGF0LHFlLEllLEhlLERlLHk9Zy5iaXRzLHg9MCxDPTAsVD0wLFY9MCxVPTAsRT0wLG09MCxBPTAsYWU9MCxuZT0wLHhlPW51bGwsdmU9MCxqZT1uZXcgai5CdWYxNigxNiksQWU9bmV3IGouQnVmMTYoMTYpLEZlPW51bGwsUmU9MDtmb3IoeD0wO3g8PTE1O3grKylqZVt4XT0wO2ZvcihD'@;
put 'PTA7QzxUZTtDKyspamVbZ2VbX2UrQ11dKys7Zm9yKFU9eSxWPTE1O1Y+PTEmJjA9PT1qZVtWXTtWLS0pO2lmKFU+ViYmKFU9ViksMD09PVYpcmV0dXJuIFNlW3plKytdPTIwOTcxNTIwLFNlW3plKytdPTIwOTcxNTIwLGcuYml0cz0xLDA7Zm9yKFQ9MTtUPFYmJjA9PT1qZVtUXTtUKyspO2Zv'@;
put 'cihVPFQmJihVPVQpLEE9MSx4PTE7eDw9MTU7eCsrKWlmKEE8PD0xLChBLT1qZVt4XSk8MClyZXR1cm4tMTtpZihBPjAmJigwPT09c2V8fDEhPT1WKSlyZXR1cm4tMTtmb3IoQWVbMV09MCx4PTE7eDwxNTt4KyspQWVbeCsxXT1BZVt4XStqZVt4XTtmb3IoQz0wO0M8VGU7QysrKTAhPT1nZVtf'@;
put 'ZStDXSYmKHpbQWVbZ2VbX2UrQ11dKytdPUMpO2lmKDA9PT1zZT8oeGU9RmU9eixxZT0xOSk6MT09PXNlPyh4ZT1YLHZlLT0yNTcsRmU9USxSZS09MjU3LHFlPTI1Nik6KHhlPXEsRmU9dGUscWU9LTEpLG5lPTAsQz0wLHg9VCxhdD16ZSxFPVUsbT0wLFplPS0xLFFlPShhZT0xPDxVKS0xLDE9'@;
put 'PT1zZSYmYWU+ODUyfHwyPT09c2UmJmFlPjU5MilyZXR1cm4gMTtmb3IoOzspe0llPXgtbSx6W0NdPHFlPyhIZT0wLERlPXpbQ10pOnpbQ10+cWU/KEhlPUZlW1JlK3pbQ11dLERlPXhlW3ZlK3pbQ11dKTooSGU9OTYsRGU9MCksbGU9MTw8eC1tLFQ9d2U9MTw8RTtkb3tTZVthdCsobmU+Pm0p'@;
put 'Kyh3ZS09bGUpXT1JZTw8MjR8SGU8PDE2fERlfXdoaWxlKDAhPT13ZSk7Zm9yKGxlPTE8PHgtMTtuZSZsZTspbGU+Pj0xO2lmKDAhPT1sZT8obmUmPWxlLTEsbmUrPWxlKTpuZT0wLEMrKywwPT0tLWplW3hdKXtpZih4PT09VilicmVhazt4PWdlW19lK3pbQ11dfWlmKHg+VSYmKG5lJlFlKSE9'@;
put 'PVplKXtmb3IoMD09PW0mJihtPVUpLGF0Kz1ULEE9MTw8KEU9eC1tKTtFK208ViYmISgoQS09amVbRSttXSk8PTApOylFKyssQTw8PTE7aWYoYWUrPTE8PEUsMT09PXNlJiZhZT44NTJ8fDI9PT1zZSYmYWU+NTkyKXJldHVybiAxO1NlW1plPW5lJlFlXT1VPDwyNHxFPDwxNnxhdC16ZX19cmV0'@;
put 'dXJuIDAhPT1uZSYmKFNlW2F0K25lXT14LW08PDI0fDY0PDwxNiksZy5iaXRzPVUsMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO0guZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6'@;
put 'ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0sMzg6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7'@;
put 'dmFyIGo9RigiLi4vdXRpbHMvY29tbW9uIik7ZnVuY3Rpb24gVyhmdCl7Zm9yKHZhciBGcj1mdC5sZW5ndGg7LS1Gcj49MDspZnRbRnJdPTB9dmFyIHplPTE1LHo9MTYsVj1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxVPVswLDAs'@;
put 'MCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxFPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxtPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxhZT1uZXcg'@;
put 'QXJyYXkoNTc2KTtXKGFlKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtXKG5lKTt2YXIgbGU9bmV3IEFycmF5KDUxMik7VyhsZSk7dmFyIHdlPW5ldyBBcnJheSgyNTYpO1cod2UpO3ZhciBaZT1uZXcgQXJyYXkoMjkpO1coWmUpO3ZhciBRZT1uZXcgQXJyYXkoMzApO1coUWUpO3ZhciB4ZSx2ZSxx'@;
put 'ZSxhdD1mdW5jdGlvbihmdCxGcixadCxrdCxMbil7dGhpcy5zdGF0aWNfdHJlZT1mdCx0aGlzLmV4dHJhX2JpdHM9RnIsdGhpcy5leHRyYV9iYXNlPVp0LHRoaXMuZWxlbXM9a3QsdGhpcy5tYXhfbGVuZ3RoPUxuLHRoaXMuaGFzX3N0cmVlPWZ0JiZmdC5sZW5ndGh9LGplPWZ1bmN0aW9uKGZ0'@;
put 'LEZyKXt0aGlzLmR5bl90cmVlPWZ0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1Gcn07ZnVuY3Rpb24gQWUoZnQpe3JldHVybiBmdDwyNTY/bGVbZnRdOmxlWzI1NisoZnQ+Pj43KV19ZnVuY3Rpb24gRmUoZnQsRnIpe2Z0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JkZy'@;
put 'LGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109RnI+Pj44JjI1NX1mdW5jdGlvbiBSZShmdCxGcixadCl7ZnQuYmlfdmFsaWQ+ei1adD8oZnQuYmlfYnVmfD1Gcjw8ZnQuYmlfdmFsaWQmNjU1MzUsRmUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9RnI+PnotZnQuYmlfdmFsaWQsZnQuYmlf'@;
put 'dmFsaWQrPVp0LXopOihmdC5iaV9idWZ8PUZyPDxmdC5iaV92YWxpZCY2NTUzNSxmdC5iaV92YWxpZCs9WnQpfWZ1bmN0aW9uIEllKGZ0LEZyLFp0KXtSZShmdCxadFsyKkZyXSxadFsyKkZyKzFdKX1mdW5jdGlvbiBIZShmdCxGcil7dmFyIFp0PTA7ZG97WnR8PTEmZnQsZnQ+Pj49MSxadDw8'@;
put 'PTF9d2hpbGUoLS1Gcj4wKTtyZXR1cm4gWnQ+Pj4xfWZ1bmN0aW9uIF90KGZ0LEZyLFp0KXt2YXIgb3QsenQsa3Q9bmV3IEFycmF5KHplKzEpLExuPTA7Zm9yKG90PTE7b3Q8PXplO290Kyspa3Rbb3RdPUxuPUxuK1p0W290LTFdPDwxO2Zvcih6dD0wO3p0PD1Gcjt6dCsrKXt2YXIgbmk9ZnRb'@;
put 'Mip6dCsxXTswIT09bmkmJihmdFsyKnp0XT1IZShrdFtuaV0rKyxuaSkpfX1mdW5jdGlvbiBKZShmdCl7dmFyIEZyO2ZvcihGcj0wO0ZyPDI4NjtGcisrKWZ0LmR5bl9sdHJlZVsyKkZyXT0wO2ZvcihGcj0wO0ZyPDMwO0ZyKyspZnQuZHluX2R0cmVlWzIqRnJdPTA7Zm9yKEZyPTA7RnI8MTk7'@;
put 'RnIrKylmdC5ibF90cmVlWzIqRnJdPTA7ZnQuZHluX2x0cmVlWzUxMl09MSxmdC5vcHRfbGVuPWZ0LnN0YXRpY19sZW49MCxmdC5sYXN0X2xpdD1mdC5tYXRjaGVzPTB9ZnVuY3Rpb24gb24oZnQpe2Z0LmJpX3ZhbGlkPjg/RmUoZnQsZnQuYmlfYnVmKTpmdC5iaV92YWxpZD4wJiYoZnQucGVu'@;
put 'ZGluZ19idWZbZnQucGVuZGluZysrXT1mdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gTXQoZnQsRnIsWnQsa3Qpe3ZhciBMbj0yKkZyLG90PTIqWnQ7cmV0dXJuIGZ0W0xuXTxmdFtvdF18fGZ0W0xuXT09PWZ0W290XSYma3RbRnJdPD1rdFtadF19ZnVuY3Rp'@;
put 'b24gSXQoZnQsRnIsWnQpe2Zvcih2YXIga3Q9ZnQuaGVhcFtadF0sTG49WnQ8PDE7TG48PWZ0LmhlYXBfbGVuJiYoTG48ZnQuaGVhcF9sZW4mJk10KEZyLGZ0LmhlYXBbTG4rMV0sZnQuaGVhcFtMbl0sZnQuZGVwdGgpJiZMbisrLCFNdChGcixrdCxmdC5oZWFwW0xuXSxmdC5kZXB0aCkpOylm'@;
put 'dC5oZWFwW1p0XT1mdC5oZWFwW0xuXSxadD1MbixMbjw8PTE7ZnQuaGVhcFtadF09a3R9ZnVuY3Rpb24gcnQoZnQsRnIsWnQpe3ZhciBrdCxMbix6dCxuaSxvdD0wO2lmKDAhPT1mdC5sYXN0X2xpdClkb3trdD1mdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKm90XTw8OHxmdC5wZW5kaW5nX2J1'@;
put 'ZltmdC5kX2J1ZisyKm90KzFdLExuPWZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK290XSxvdCsrLDA9PT1rdD9JZShmdCxMbixGcik6KEllKGZ0LCh6dD13ZVtMbl0pKzI1NisxLEZyKSwwIT09KG5pPVZbenRdKSYmUmUoZnQsTG4tPVplW3p0XSxuaSksSWUoZnQsenQ9QWUoLS1rdCksWnQpLDAh'@;
put 'PT0obmk9VVt6dF0pJiZSZShmdCxrdC09UWVbenRdLG5pKSl9d2hpbGUob3Q8ZnQubGFzdF9saXQpO0llKGZ0LDI1NixGcil9ZnVuY3Rpb24gS2UoZnQsRnIpe3ZhciB6dCxuaSxBdCxadD1Gci5keW5fdHJlZSxrdD1Gci5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsTG49RnIuc3RhdF9kZXNjLmhh'@;
put 'c19zdHJlZSxvdD1Gci5zdGF0X2Rlc2MuZWxlbXMsV2U9LTE7Zm9yKGZ0LmhlYXBfbGVuPTAsZnQuaGVhcF9tYXg9NTczLHp0PTA7enQ8b3Q7enQrKykwIT09WnRbMip6dF0/KGZ0LmhlYXBbKytmdC5oZWFwX2xlbl09V2U9enQsZnQuZGVwdGhbenRdPTApOlp0WzIqenQrMV09MDtmb3IoO2Z0'@;
put 'LmhlYXBfbGVuPDI7KVp0WzIqKEF0PWZ0LmhlYXBbKytmdC5oZWFwX2xlbl09V2U8Mj8rK1dlOjApXT0xLGZ0LmRlcHRoW0F0XT0wLGZ0Lm9wdF9sZW4tLSxMbiYmKGZ0LnN0YXRpY19sZW4tPWt0WzIqQXQrMV0pO2ZvcihGci5tYXhfY29kZT1XZSx6dD1mdC5oZWFwX2xlbj4+MTt6dD49MTt6'@;
put 'dC0tKUl0KGZ0LFp0LHp0KTtBdD1vdDtkb3t6dD1mdC5oZWFwWzFdLGZ0LmhlYXBbMV09ZnQuaGVhcFtmdC5oZWFwX2xlbi0tXSxJdChmdCxadCwxKSxuaT1mdC5oZWFwWzFdLGZ0LmhlYXBbLS1mdC5oZWFwX21heF09enQsZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1uaSxadFsyKkF0XT1adFsy'@;
put 'Knp0XStadFsyKm5pXSxmdC5kZXB0aFtBdF09KGZ0LmRlcHRoW3p0XT49ZnQuZGVwdGhbbmldP2Z0LmRlcHRoW3p0XTpmdC5kZXB0aFtuaV0pKzEsWnRbMip6dCsxXT1adFsyKm5pKzFdPUF0LGZ0LmhlYXBbMV09QXQrKyxJdChmdCxadCwxKX13aGlsZShmdC5oZWFwX2xlbj49Mik7ZnQuaGVh'@;
put 'cFstLWZ0LmhlYXBfbWF4XT1mdC5oZWFwWzFdLGZ1bmN0aW9uIGtlKGZ0LEZyKXt2YXIgQXQsaXIsaHQsRXQsem4sYW4sWnQ9RnIuZHluX3RyZWUsa3Q9RnIubWF4X2NvZGUsTG49RnIuc3RhdF9kZXNjLnN0YXRpY190cmVlLG90PUZyLnN0YXRfZGVzYy5oYXNfc3RyZWUsenQ9RnIuc3RhdF9k'@;
put 'ZXNjLmV4dHJhX2JpdHMsbmk9RnIuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsV2U9RnIuc3RhdF9kZXNjLm1heF9sZW5ndGgsanQ9MDtmb3IoRXQ9MDtFdDw9emU7RXQrKylmdC5ibF9jb3VudFtFdF09MDtmb3IoWnRbMipmdC5oZWFwW2Z0LmhlYXBfbWF4XSsxXT0wLEF0PWZ0LmhlYXBfbWF4KzE7'@;
put 'QXQ8NTczO0F0KyspKEV0PVp0WzIqWnRbMiooaXI9ZnQuaGVhcFtBdF0pKzFdKzFdKzEpPldlJiYoRXQ9V2UsanQrKyksWnRbMippcisxXT1FdCwhKGlyPmt0KSYmKGZ0LmJsX2NvdW50W0V0XSsrLHpuPTAsaXI+PW5pJiYoem49enRbaXItbmldKSxmdC5vcHRfbGVuKz0oYW49WnRbMippcl0p'@;
put 'KihFdCt6biksb3QmJihmdC5zdGF0aWNfbGVuKz1hbiooTG5bMippcisxXSt6bikpKTtpZigwIT09anQpe2Rve2ZvcihFdD1XZS0xOzA9PT1mdC5ibF9jb3VudFtFdF07KUV0LS07ZnQuYmxfY291bnRbRXRdLS0sZnQuYmxfY291bnRbRXQrMV0rPTIsZnQuYmxfY291bnRbV2VdLS0sanQtPTJ9'@;
put 'd2hpbGUoanQ+MCk7Zm9yKEV0PVdlOzAhPT1FdDtFdC0tKWZvcihpcj1mdC5ibF9jb3VudFtFdF07MCE9PWlyOykhKChodD1mdC5oZWFwWy0tQXRdKT5rdCkmJihadFsyKmh0KzFdIT09RXQmJihmdC5vcHRfbGVuKz0oRXQtWnRbMipodCsxXSkqWnRbMipodF0sWnRbMipodCsxXT1FdCksaXIt'@;
put 'LSl9fShmdCxGciksX3QoWnQsV2UsZnQuYmxfY291bnQpfWZ1bmN0aW9uIHR0KGZ0LEZyLFp0KXt2YXIga3Qsb3QsTG49LTEsenQ9RnJbMV0sbmk9MCxXZT03LEF0PTQ7Zm9yKDA9PT16dCYmKFdlPTEzOCxBdD0zKSxGclsyKihadCsxKSsxXT02NTUzNSxrdD0wO2t0PD1adDtrdCsrKW90PXp0'@;
put 'LHp0PUZyWzIqKGt0KzEpKzFdLCEoKytuaTxXZSYmb3Q9PT16dCkmJihuaTxBdD9mdC5ibF90cmVlWzIqb3RdKz1uaTowIT09b3Q/KG90IT09TG4mJmZ0LmJsX3RyZWVbMipvdF0rKyxmdC5ibF90cmVlWzMyXSsrKTpuaTw9MTA/ZnQuYmxfdHJlZVszNF0rKzpmdC5ibF90cmVlWzM2XSsrLG5p'@;
put 'PTAsTG49b3QsMD09PXp0PyhXZT0xMzgsQXQ9Myk6b3Q9PT16dD8oV2U9NixBdD0zKTooV2U9NyxBdD00KSl9ZnVuY3Rpb24gTmUoZnQsRnIsWnQpe3ZhciBrdCxvdCxMbj0tMSx6dD1GclsxXSxuaT0wLFdlPTcsQXQ9NDtmb3IoMD09PXp0JiYoV2U9MTM4LEF0PTMpLGt0PTA7a3Q8PVp0O2t0'@;
put 'KyspaWYob3Q9enQsenQ9RnJbMiooa3QrMSkrMV0sISgrK25pPFdlJiZvdD09PXp0KSl7aWYobmk8QXQpZG97SWUoZnQsb3QsZnQuYmxfdHJlZSl9d2hpbGUoMCE9LS1uaSk7ZWxzZSAwIT09b3Q/KG90IT09TG4mJihJZShmdCxvdCxmdC5ibF90cmVlKSxuaS0tKSxJZShmdCwxNixmdC5ibF90'@;
put 'cmVlKSxSZShmdCxuaS0zLDIpKTpuaTw9MTA/KEllKGZ0LDE3LGZ0LmJsX3RyZWUpLFJlKGZ0LG5pLTMsMykpOihJZShmdCwxOCxmdC5ibF90cmVlKSxSZShmdCxuaS0xMSw3KSk7bmk9MCxMbj1vdCwwPT09enQ/KFdlPTEzOCxBdD0zKTpvdD09PXp0PyhXZT02LEF0PTMpOihXZT03LEF0PTQp'@;
put 'fX12YXIgUHQ9ITE7ZnVuY3Rpb24gZW4oZnQsRnIsWnQsa3Qpe1JlKGZ0LDArKGt0PzE6MCksMyksZnVuY3Rpb24geXQoZnQsRnIsWnQsa3Qpe29uKGZ0KSxrdCYmKEZlKGZ0LFp0KSxGZShmdCx+WnQpKSxqLmFycmF5U2V0KGZ0LnBlbmRpbmdfYnVmLGZ0LndpbmRvdyxGcixadCxmdC5wZW5k'@;
put 'aW5nKSxmdC5wZW5kaW5nKz1adH0oZnQsRnIsWnQsITApfVIuX3RyX2luaXQ9ZnVuY3Rpb24gb2koZnQpe1B0fHwoZnVuY3Rpb24gbnQoKXt2YXIgZnQsRnIsWnQsa3QsTG4sb3Q9bmV3IEFycmF5KHplKzEpO2ZvcihadD0wLGt0PTA7a3Q8Mjg7a3QrKylmb3IoWmVba3RdPVp0LGZ0PTA7ZnQ8'@;
put 'MTw8VltrdF07ZnQrKyl3ZVtadCsrXT1rdDtmb3Iod2VbWnQtMV09a3QsTG49MCxrdD0wO2t0PDE2O2t0KyspZm9yKFFlW2t0XT1MbixmdD0wO2Z0PDE8PFVba3RdO2Z0KyspbGVbTG4rK109a3Q7Zm9yKExuPj49NztrdDwzMDtrdCsrKWZvcihRZVtrdF09TG48PDcsZnQ9MDtmdDwxPDxVW2t0'@;
put 'XS03O2Z0KyspbGVbMjU2K0xuKytdPWt0O2ZvcihGcj0wO0ZyPD16ZTtGcisrKW90W0ZyXT0wO2ZvcihmdD0wO2Z0PD0xNDM7KWFlWzIqZnQrMV09OCxmdCsrLG90WzhdKys7Zm9yKDtmdDw9MjU1OylhZVsyKmZ0KzFdPTksZnQrKyxvdFs5XSsrO2Zvcig7ZnQ8PTI3OTspYWVbMipmdCsxXT03'@;
put 'LGZ0Kyssb3RbN10rKztmb3IoO2Z0PD0yODc7KWFlWzIqZnQrMV09OCxmdCsrLG90WzhdKys7Zm9yKF90KGFlLDI4NyxvdCksZnQ9MDtmdDwzMDtmdCsrKW5lWzIqZnQrMV09NSxuZVsyKmZ0XT1IZShmdCw1KTt4ZT1uZXcgYXQoYWUsViwyNTcsMjg2LHplKSx2ZT1uZXcgYXQobmUsVSwwLDMw'@;
put 'LHplKSxxZT1uZXcgYXQobmV3IEFycmF5KDApLEUsMCwxOSw3KX0oKSxQdD0hMCksZnQubF9kZXNjPW5ldyBqZShmdC5keW5fbHRyZWUseGUpLGZ0LmRfZGVzYz1uZXcgamUoZnQuZHluX2R0cmVlLHZlKSxmdC5ibF9kZXNjPW5ldyBqZShmdC5ibF90cmVlLHFlKSxmdC5iaV9idWY9MCxmdC5i'@;
put 'aV92YWxpZD0wLEplKGZ0KX0sUi5fdHJfc3RvcmVkX2Jsb2NrPWVuLFIuX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uIElpKGZ0LEZyLFp0LGt0KXt2YXIgTG4sb3QsenQ9MDtmdC5sZXZlbD4wPygyPT09ZnQuc3RybS5kYXRhX3R5cGUmJihmdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiBMdChm'@;
put 'dCl7dmFyIFp0LEZyPTQwOTM2MjQ0NDc7Zm9yKFp0PTA7WnQ8PTMxO1p0KyssRnI+Pj49MSlpZigxJkZyJiYwIT09ZnQuZHluX2x0cmVlWzIqWnRdKXJldHVybiAwO2lmKDAhPT1mdC5keW5fbHRyZWVbMThdfHwwIT09ZnQuZHluX2x0cmVlWzIwXXx8MCE9PWZ0LmR5bl9sdHJlZVsyNl0pcmV0'@;
put 'dXJuIDE7Zm9yKFp0PTMyO1p0PDI1NjtadCsrKWlmKDAhPT1mdC5keW5fbHRyZWVbMipadF0pcmV0dXJuIDE7cmV0dXJuIDB9KGZ0KSksS2UoZnQsZnQubF9kZXNjKSxLZShmdCxmdC5kX2Rlc2MpLHp0PWZ1bmN0aW9uIHV0KGZ0KXt2YXIgRnI7Zm9yKHR0KGZ0LGZ0LmR5bl9sdHJlZSxmdC5s'@;
put 'X2Rlc2MubWF4X2NvZGUpLHR0KGZ0LGZ0LmR5bl9kdHJlZSxmdC5kX2Rlc2MubWF4X2NvZGUpLEtlKGZ0LGZ0LmJsX2Rlc2MpLEZyPTE4O0ZyPj0zJiYwPT09ZnQuYmxfdHJlZVsyKm1bRnJdKzFdO0ZyLS0pO3JldHVybiBmdC5vcHRfbGVuKz0zKihGcisxKSs1KzUrNCxGcn0oZnQpLChvdD1m'@;
put 'dC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oTG49ZnQub3B0X2xlbiszKzc+Pj4zKSYmKExuPW90KSk6TG49b3Q9WnQrNSxadCs0PD1MbiYmLTEhPT1Gcj9lbihmdCxGcixadCxrdCk6ND09PWZ0LnN0cmF0ZWd5fHxvdD09PUxuPyhSZShmdCwyKyhrdD8xOjApLDMpLHJ0KGZ0LGFlLG5lKSk6KFJl'@;
put 'KGZ0LDQrKGt0PzE6MCksMyksZnVuY3Rpb24gSnQoZnQsRnIsWnQsa3Qpe3ZhciBMbjtmb3IoUmUoZnQsRnItMjU3LDUpLFJlKGZ0LFp0LTEsNSksUmUoZnQsa3QtNCw0KSxMbj0wO0xuPGt0O0xuKyspUmUoZnQsZnQuYmxfdHJlZVsyKm1bTG5dKzFdLDMpO05lKGZ0LGZ0LmR5bl9sdHJlZSxG'@;
put 'ci0xKSxOZShmdCxmdC5keW5fZHRyZWUsWnQtMSl9KGZ0LGZ0LmxfZGVzYy5tYXhfY29kZSsxLGZ0LmRfZGVzYy5tYXhfY29kZSsxLHp0KzEpLHJ0KGZ0LGZ0LmR5bl9sdHJlZSxmdC5keW5fZHRyZWUpKSxKZShmdCksa3QmJm9uKGZ0KX0sUi5fdHJfdGFsbHk9ZnVuY3Rpb24gZG4oZnQsRnIs'@;
put 'WnQpe3JldHVybiBmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3RfbGl0XT1Gcj4+PjgmMjU1LGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXQrMV09MjU1JkZyLGZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK2Z0Lmxhc3RfbGl0XT0yNTUmWnQsZnQubGFzdF9saXQr'@;
put 'KywwPT09RnI/ZnQuZHluX2x0cmVlWzIqWnRdKys6KGZ0Lm1hdGNoZXMrKyxGci0tLGZ0LmR5bl9sdHJlZVsyKih3ZVtadF0rMjU2KzEpXSsrLGZ0LmR5bl9kdHJlZVsyKkFlKEZyKV0rKyksZnQubGFzdF9saXQ9PT1mdC5saXRfYnVmc2l6ZS0xfSxSLl90cl9hbGlnbj1mdW5jdGlvbiBzbihm'@;
put 'dCl7UmUoZnQsMiwzKSxJZShmdCwyNTYsYWUpLGZ1bmN0aW9uIERlKGZ0KXsxNj09PWZ0LmJpX3ZhbGlkPyhGZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTApOmZ0LmJpX3ZhbGlkPj04JiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT0yNTUmZnQuYmlfYnVm'@;
put 'LGZ0LmJpX2J1Zj4+PTgsZnQuYmlfdmFsaWQtPTgpfShmdCl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzOTpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9ZnVuY3Rpb24gaigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAs'@;
put 'dGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV19LHt9LFs5XSkoOSl9KX0sNjM1'@;
put 'Nzg6KGNlLEosYik9PnshZnVuY3Rpb24gXyh3KXt3LnZlcnNpb249IjEuMjAyMTExMjIuMSI7dmFyIEY9MTIwMCxIPTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsLmNwdGFibGU9Yig0MjkyNCk6dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuY3B0'@;
put 'YWJsZT1iKDQyOTI0KSkpO2Zvcih2YXIgUj1bODc0LDkzMiw5MzYsOTQ5LDk1MCwxZTRdLGo9MDtqPD04OysrailSLnB1c2goMTI1MCtqKTt2YXIgUD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEzMDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1'@;
put 'MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LEw9ZnVuY3Rpb24oUyl7LTEhPVIuaW5kZXhPZihTKSYmKEg9UFswXT1TKX0sQj1mdW5jdGlvbihTKXtGPVMsTChTKX07ZnVuY3Rp'@;
put 'b24gVygpe0IoMTIwMCksZnVuY3Rpb24gWSgpe0woMTI1Mil9KCl9ZnVuY3Rpb24gWihTKXtmb3IodmFyIE89W10saz0wLEs9Uy5sZW5ndGg7azxLOysraylPW2tdPVMuY2hhckNvZGVBdChrKTtyZXR1cm4gT312YXIgcT1mdW5jdGlvbihTKXt2YXIgTz1TLmNoYXJDb2RlQXQoMCksaz1TLmNo'@;
put 'YXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09TyYmMjU0PT1rP2Z1bmN0aW9uIFgoUyl7Zm9yKHZhciBPPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylPW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoUy5jaGFyQ29kZUF0KDIqaykrKFMuY2hhckNvZGVBdCgyKmsrMSk8PDgpKTtyZXR1cm4gTy5qb2lu'@;
put 'KCIiKX0oUy5zbGljZSgyKSk6MjU0PT1PJiYyNTU9PWs/ZnVuY3Rpb24gUShTKXtmb3IodmFyIE89W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKU9ba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKzEpKyhTLmNoYXJDb2RlQXQoMiprKTw8OCkpO3JldHVybiBPLmpvaW4o'@;
put 'IiIpfShTLnNsaWNlKDIpKTo2NTI3OT09Tz9TLnNsaWNlKDEpOlN9LHRlPWZ1bmN0aW9uKE8pe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE8pfSxpZT1mdW5jdGlvbihPKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShPKX07dHlwZW9mIGNwdGFibGU8InUiJiYoQj1mdW5jdGlvbihT'@;
put 'KXtGPVMsTChTKX0scT1mdW5jdGlvbihTKXtyZXR1cm4gMjU1PT09Uy5jaGFyQ29kZUF0KDApJiYyNTQ9PT1TLmNoYXJDb2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxaKFMuc2xpY2UoMikpKTpTfSx0ZT1mdW5jdGlvbihPKXtyZXR1cm4gMTIwMD09PUY/U3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZShPKTpjcHRhYmxlLnV0aWxzLmRlY29kZShGLFsyNTUmTyxPPj44XSlbMF19LGllPWZ1bmN0aW9uKE8pe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZShILFtPXSlbMF19KTt2YXIgc2U9bnVsbCxfZT1mdW5jdGlvbigpe3ZhciBPPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ'@;
put 'WmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7cmV0dXJue2VuY29kZTpmdW5jdGlvbihrKXtmb3IodmFyIEs9IiIsZWU9MCxvZT0wLG1lPTAscGU9MCxiZT0wLFBlPTAsVmU9MCxZZT0wO1llPGsubGVuZ3RoOylwZT0oZWU9ay5jaGFyQ29kZUF0KFllKyspKT4+Mixi'@;
put 'ZT0oMyZlZSk8PDR8KG9lPWsuY2hhckNvZGVBdChZZSsrKSk+PjQsUGU9KDE1Jm9lKTw8MnwobWU9ay5jaGFyQ29kZUF0KFllKyspKT4+NixWZT02MyZtZSxpc05hTihvZSk/UGU9VmU9NjQ6aXNOYU4obWUpJiYoVmU9NjQpLEsrPU8uY2hhckF0KHBlKStPLmNoYXJBdChiZSkrTy5jaGFyQXQo'@;
put 'UGUpK08uY2hhckF0KFZlKTtyZXR1cm4gS30sZGVjb2RlOmZ1bmN0aW9uKEspe3ZhciBlZT0iIixiZT0wLFBlPTAsVmU9MCxZZT0wO0s9Sy5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIGV0PTA7ZXQ8Sy5sZW5ndGg7KWJlPU8uaW5kZXhPZihLLmNoYXJBdChldCsrKSksUGU9'@;
put 'Ty5pbmRleE9mKEsuY2hhckF0KGV0KyspKSxlZSs9U3RyaW5nLmZyb21DaGFyQ29kZShiZTw8MnxQZT4+NCksNjQhPT0oVmU9Ty5pbmRleE9mKEsuY2hhckF0KGV0KyspKSkmJihlZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUGUpPDw0fFZlPj4yKSksNjQhPT0oWWU9Ty5pbmRleE9mKEsu'@;
put 'Y2hhckF0KGV0KyspKSkmJihlZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZWZSk8PDZ8WWUpKTtyZXR1cm4gZWV9fX0oKSxUZT10eXBlb2YgQnVmZmVyPCJ1IiYmdHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9uczwidSImJiEhcHJvY2Vzcy52ZXJzaW9ucy5ub2Rl'@;
put 'LFNlPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgQnVmZmVyPCJ1Iil7dmFyIHplPSFCdWZmZXIuZnJvbTtpZighemUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7emU9ITB9U2U9emU/ZnVuY3Rpb24oUyxPKXtyZXR1cm4gTz9uZXcgQnVmZmVyKFMsTyk6bmV3IEJ1ZmZlcihT'@;
put 'KX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY3x8KEJ1ZmZlci5hbGxvYz1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IEJ1ZmZlcihTKX0pLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IEJ1ZmZlcihTKX0p'@;
put 'fWZ1bmN0aW9uIHooUyl7cmV0dXJuIFRlP0J1ZmZlci5hbGxvYyhTKTpuZXcgQXJyYXkoUyl9ZnVuY3Rpb24gZyhTKXtyZXR1cm4gVGU/QnVmZmVyLmFsbG9jVW5zYWZlKFMpOm5ldyBBcnJheShTKX12YXIgeT1mdW5jdGlvbihPKXtyZXR1cm4gVGU/U2UoTywiYmluYXJ5Iik6Ty5zcGxpdCgi'@;
put 'IikubWFwKGZ1bmN0aW9uKGspe3JldHVybiAyNTUmay5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHgoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1IilyZXR1cm4geShTKTtmb3IodmFyIE89bmV3IEFycmF5QnVmZmVyKFMubGVuZ3RoKSxrPW5ldyBVaW50OEFycmF5KE8pLEs9MDtLIT1T'@;
put 'Lmxlbmd0aDsrK0spa1tLXT0yNTUmUy5jaGFyQ29kZUF0KEspO3JldHVybiBPfWZ1bmN0aW9uIEMoUyl7aWYoQXJyYXkuaXNBcnJheShTKSlyZXR1cm4gUy5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoSyl9KS5qb2luKCIiKTtmb3IodmFyIE89W10saz0wO2s8'@;
put 'Uy5sZW5ndGg7KytrKU9ba109U3RyaW5nLmZyb21DaGFyQ29kZShTW2tdKTtyZXR1cm4gTy5qb2luKCIiKX1mdW5jdGlvbiBWKFMpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO2lmKFMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1'@;
put 'cm4gVihuZXcgVWludDhBcnJheShTKSk7Zm9yKHZhciBPPW5ldyBBcnJheShTLmxlbmd0aCksaz0wO2s8Uy5sZW5ndGg7KytrKU9ba109U1trXTtyZXR1cm4gT312YXIgVT1mdW5jdGlvbihTKXt2YXIgTz1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe0FycmF5LmlzQXJyYXkoayk/'@;
put 'Tz1PLmNvbmNhdChrKToodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZrIGluc3RhbmNlb2YgVWludDhBcnJheXx8dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmayBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSYmKE89Ty5jb25jYXQoVihrKSkpfSksT30sRT0vXHUwMDAwL2csbT0vW1x1MDAwMS1cdTAw'@;
put 'MDZdL2csQT17fSxhZT1mdW5jdGlvbihPKXtmdW5jdGlvbiBrKGxuKXtmb3IodmFyIEVuPSIiLFpuPWxuLmxlbmd0aC0xO1puPj0wOylFbis9bG4uY2hhckF0KFpuLS0pO3JldHVybiBFbn1mdW5jdGlvbiBLKGxuLEVuKXtmb3IodmFyIFpuPSIiO1puLmxlbmd0aDxFbjspWm4rPWxuO3JldHVy'@;
put 'biBabn1mdW5jdGlvbiBlZShsbixFbil7dmFyIFpuPSIiK2xuO3JldHVybiBabi5sZW5ndGg+PUVuP1puOksoIjAiLEVuLVpuLmxlbmd0aCkrWm59ZnVuY3Rpb24gb2UobG4sRW4pe3ZhciBabj0iIitsbjtyZXR1cm4gWm4ubGVuZ3RoPj1Fbj9abjpLKCIgIixFbi1abi5sZW5ndGgpK1pufWZ1'@;
put 'bmN0aW9uIG1lKGxuLEVuKXt2YXIgWm49IiIrbG47cmV0dXJuIFpuLmxlbmd0aD49RW4/Wm46Wm4rSygiICIsRW4tWm4ubGVuZ3RoKX1PLnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIFBlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIFZlKGxuLEVuKXtyZXR1cm4gbG4+UGV8fGxuPC1QZT9m'@;
put 'dW5jdGlvbiBwZShsbixFbil7dmFyIFpuPSIiK01hdGgucm91bmQobG4pO3JldHVybiBabi5sZW5ndGg+PUVuP1puOksoIjAiLEVuLVpuLmxlbmd0aCkrWm59KGxuLEVuKTpmdW5jdGlvbiBiZShsbixFbil7dmFyIFpuPSIiK2xuO3JldHVybiBabi5sZW5ndGg+PUVuP1puOksoIjAiLEVuLVpu'@;
put 'Lmxlbmd0aCkrWm59KE1hdGgucm91bmQobG4pLEVuKX1mdW5jdGlvbiBZZShsbixFbil7cmV0dXJuIGxuLmxlbmd0aD49NysoRW49RW58fDApJiYxMDM9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKSkmJjEwMT09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMSkpJiYxMTA9PSgzMnxsbi5jaGFyQ29kZUF0'@;
put 'KEVuKzIpKSYmMTAxPT0oMzJ8bG4uY2hhckNvZGVBdChFbiszKSkmJjExND09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNCkpJiY5Nz09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNSkpJiYxMDg9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzYpKX1mdW5jdGlvbiBldChsbil7Zm9yKHZhciBFbj1bXSxabj1P'@;
put 'YmplY3Qua2V5cyhsbiksTWk9MDtNaSE9PVpuLmxlbmd0aDsrK01pKUVuW2xuW1puW01pXV1dPVpuW01pXTtyZXR1cm4gRW59dmFyIGN0PVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJz'@;
put 'ZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVyZGF5Il1dLFR0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJGIiwiRmViIiwiRmVicnVhcnkiXSxbIk0iLCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5IiwiTWF5Il0sWyJKIiwiSnVuIiwiSnVu'@;
put 'ZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJBdWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8iLCJPY3QiLCJPY3RvYmVyIl0sWyJOIiwiTm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlvbiBpdChsbil7bG5bMF09IkdlbmVy'@;
put 'YWwiLGxuWzFdPSIwIixsblsyXT0iMC4wMCIsbG5bM109IiMsIyMwIixsbls0XT0iIywjIzAuMDAiLGxuWzldPSIwJSIsbG5bMTBdPSIwLjAwJSIsbG5bMTFdPSIwLjAwRSswMCIsbG5bMTJdPSIjID8vPyIsbG5bMTNdPSIjID8/Lz8/IixsblsxNF09Im0vZC95eSIsbG5bMTVdPSJkLW1tbS15'@;
put 'eSIsbG5bMTZdPSJkLW1tbSIsbG5bMTddPSJtbW0teXkiLGxuWzE4XT0iaDptbSBBTS9QTSIsbG5bMTldPSJoOm1tOnNzIEFNL1BNIixsblsyMF09Img6bW0iLGxuWzIxXT0iaDptbTpzcyIsbG5bMjJdPSJtL2QveXkgaDptbSIsbG5bMzddPSIjLCMjMCA7KCMsIyMwKSIsbG5bMzhdPSIjLCMj'@;
put 'MCA7W1JlZF0oIywjIzApIixsblszOV09IiMsIyMwLjAwOygjLCMjMC4wMCkiLGxuWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixsbls0NV09Im1tOnNzIixsbls0Nl09IltoXTptbTpzcyIsbG5bNDddPSJtbXNzLjAiLGxuWzQ4XT0iIyMwLjBFKzAiLGxuWzQ5XT0iQCIsbG5bNTZd'@;
put 'PSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsSG4obG4pfXZhciBidD17fTtpdChidCk7dmFyIEJ0PVtdLER0PTA7Zm9yKER0PTU7RHQ8PTg7KytEdClCdFtEdF09MzIrRHQ7Zm9yKER0PTIzO0R0PD0yNjsrK0R0KUJ0W0R0XT0w'@;
put 'O2ZvcihEdD0yNztEdDw9MzE7KytEdClCdFtEdF09MTQ7Zm9yKER0PTUwO0R0PD01ODsrK0R0KUJ0W0R0XT0xNDtmb3IoRHQ9NTk7RHQ8PTYyOysrRHQpQnRbRHRdPUR0LTU4O2ZvcihEdD02NztEdDw9Njg7KytEdClCdFtEdF09RHQtNTg7Zm9yKER0PTcyO0R0PD03NTsrK0R0KUJ0W0R0XT1E'@;
put 'dC01ODtmb3IoRHQ9Njc7RHQ8PTY4OysrRHQpQnRbRHRdPUR0LTU3O2ZvcihEdD03NjtEdDw9Nzg7KytEdClCdFtEdF09RHQtNTY7Zm9yKER0PTc5O0R0PD04MTsrK0R0KUJ0W0R0XT1EdC0zNDt2YXIgT3Q9W107ZnVuY3Rpb24gS3QobG4sRW4sWm4pe2Zvcih2YXIgTWk9bG48MD8tMToxLGNy'@;
put 'PWxuKk1pLExpPTAseHI9MSxPaT0wLFlhPTEsRmk9MCxnYT0wLGtpPU1hdGguZmxvb3IoY3IpO0ZpPEVuJiYoT2k9KGtpPU1hdGguZmxvb3IoY3IpKSp4citMaSxnYT1raSpGaStZYSwhKGNyLWtpPDVlLTgpKTspY3I9MS8oY3Ita2kpLExpPXhyLHhyPU9pLFlhPUZpLEZpPWdhO2lmKGdhPkVu'@;
put 'JiYoRmk+RW4/KGdhPVlhLE9pPUxpKTooZ2E9RmksT2k9eHIpKSwhWm4pcmV0dXJuWzAsTWkqT2ksZ2FdO3ZhciBvbz1NYXRoLmZsb29yKE1pKk9pL2dhKTtyZXR1cm5bb28sTWkqT2ktb28qZ2EsZ2FdfWZ1bmN0aW9uIFRuKGxuLEVuLFpuKXtpZihsbj4yOTU4NDY1fHxsbjwwKXJldHVybiBu'@;
put 'dWxsO3ZhciBNaT0wfGxuLGNyPU1hdGguZmxvb3IoODY0MDAqKGxuLU1pKSksTGk9MCx4cj1bXSxPaT17RDpNaSxUOmNyLHU6ODY0MDAqKGxuLU1pKS1jcix5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKE9pLnUpPDFlLTYmJihPaS51PTApLEVuJiZFbi5kYXRlMTkw'@;
put 'NCYmKE1pKz0xNDYyKSxPaS51Pi45OTk5JiYoT2kudT0wLDg2NDAwPT0rK2NyJiYoT2kuVD1jcj0wLCsrTWksKytPaS5EKSksNjA9PT1NaSl4cj1abj9bMTMxNywxMCwyOV06WzE5MDAsMiwyOV0sTGk9MztlbHNlIGlmKDA9PT1NaSl4cj1abj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLExpPTY7'@;
put 'ZWxzZXtNaT42MCYmLS1NaTt2YXIgWWE9bmV3IERhdGUoMTkwMCwwLDEpO1lhLnNldERhdGUoWWEuZ2V0RGF0ZSgpK01pLTEpLHhyPVtZYS5nZXRGdWxsWWVhcigpLFlhLmdldE1vbnRoKCkrMSxZYS5nZXREYXRlKCldLExpPVlhLmdldERheSgpLE1pPDYwJiYoTGk9KExpKzYpJTcpLFpuJiYo'@;
put 'TGk9ZnVuY3Rpb24gb3MobG4sRW4pe0VuWzBdLT01ODE7dmFyIFpuPWxuLmdldERheSgpO3JldHVybiBsbjw2MCYmKFpuPShabis2KSU3KSxabn0oWWEseHIpKX1yZXR1cm4gT2kueT14clswXSxPaS5tPXhyWzFdLE9pLmQ9eHJbMl0sT2kuUz1jciU2MCxjcj1NYXRoLmZsb29yKGNyLzYwKSxP'@;
put 'aS5NPWNyJTYwLGNyPU1hdGguZmxvb3IoY3IvNjApLE9pLkg9Y3IsT2kucT1MaSxPaX1PdFs1XT1PdFs2M109JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLE90WzZdPU90WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxPdFs3XT1PdFs2NV09JyIkIiMsIyMwLjAwXyk7'@;
put 'XFwoIiQiIywjIzAuMDBcXCknLE90WzhdPU90WzY2XT0nIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxPdFs0MV09J18oKiAjLCMjMF8pO18oKiBcXCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLE90WzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwp'@;
put 'O18oIiQiKiAiLSJfKTtfKEBfKScsT3RbNDNdPSdfKCogIywjIzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/Xyk7XyhAXyknLE90WzQ0XT0nXygiJCIqICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18pO18oQF8pJyxPLnBhcnNlX2RhdGVf'@;
put 'Y29kZT1Ubjt2YXIgc3I9bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksQ249c3IuZ2V0VGltZSgpLHVyPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBlcihsbixFbil7dmFyIFpuPWxuLmdldFRpbWUoKTtyZXR1cm4gRW4/Wm4tPTEyNjIzMDRlNTpsbj49dXImJihabis9ODY0'@;
put 'ZTUpLChabi0oQ24rNmU0Kihsbi5nZXRUaW1lem9uZU9mZnNldCgpLXNyLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9dmFyIGpuPSIiLHByPXsiZW4tdXMiOnt5OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5OiJqIixkOiJ0IiwiLCI6Ii4iLCIu'@;
put 'IjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJkIiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0sYnI9cHJbam4udG9Mb3dlckNhc2UoKV18fHByWyJlbi11cyJdLHJyPWV0KGJyKSxTaT0iJCIsUGk9IiIsUmk9IiwiLFJyPSIuIixCbj0iLyI7ZnVuY3Rpb24gSG4obG4pe3N3'@;
put 'aXRjaCgoam58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpsblsyN109IlskLTQwNF1lL20vZCIsbG5bMjhdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMwXT0nbSIvImQi'@;
put 'LyJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMyXT0naGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzMzXT0naGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1'@;
put 'NTIwNiInLGxuWzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM2XT0iWyQtNDA0XWUvbS9kIixsbls1MF09IlskLTQwNF1lL20vZCIsbG5bNTFdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1'@;
put 'Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzUzXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5b'@;
put 'NTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1N109IlskLTQwNF1lL20vZCIsbG5bNThdPSdbJC00MDRdZSJcdTVlNzQi'@;
put 'bSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNuIjpsblsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bMjhdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLSJkIi0ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQi'@;
put 'bSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2giXHU2NWY2Im1tIlx1NTIwNiInLGxuWzMzXT0naCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsblszNV09J1x1NGUwYVx1NTM0OC9c'@;
put 'dTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1MF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxs'@;
put 'bls1M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNz'@;
put 'Ilx1NzlkMiInLGxuWzU3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJqYS1qcCI6bG5bMjddPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsy'@;
put 'OV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMwXT0nbSIvImQiLyJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsbG5bMzNdPSdoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3'@;
put 'OWQyIicsbG5bMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszNl09J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1MF09J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1MV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSIn'@;
put 'LGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTZdPSdtIlx1NjcwOCJkIlx1NjVlNSIn'@;
put 'LGxuWzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzU4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJrby1rciI6bG5bMjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsblsyOF09Im1tLWRkIixsblsyOV09Im1tLWRk'@;
put 'IixsblszMF09Im1tLWRkLXl5IixsblszMV09J3l5eXkiXHViMTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLGxuWzMyXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCInLGxuWzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsbG5bMzRdPSJ5eXl5LW1tLWRkIixsblszNV09Inl5'@;
put 'eXktbW0tZGQiLGxuWzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNTBdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsbls1MV09Im1tLWRkIixsbls1Ml09Inl5eXktbW0tZGQiLGxuWzUzXT0ieXl5eS1tbS1kZCIsbG5bNTRdPSJtbS1k'@;
put 'ZCIsbG5bNTVdPSJ5eXl5LW1tLWRkIixsbls1Nl09Inl5eXktbW0tZGQiLGxuWzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNThdPSJtbS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6bG5bNTldPScidCIwJyxsbls2MF09JyJ0IjAuMDAnLGxuWzYxXT0nInQiIywj'@;
put 'IzAnLGxuWzYyXT0nInQiIywjIzAuMDAnLGxuWzY3XT0idDAlIixsbls2OF09InQwLjAwJSIsbG5bNjldPSJ0IyA/Lz8iLGxuWzcwXT0idCMgPz8vPz8iLGxuWzcxXT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxsbls3Ml09J1x1MGUyNyItIlx1MGUxNFx1'@;
put 'MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsbG5bNzNdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLGxuWzc0XT0nXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxsbls3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsbG5bNzZdPSdcdTBlMGEiOiJcdTBlMTlcdTBl'@;
put 'MTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc3XT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1MGUwYSI6Ilx1MGUxOVx1MGUxOScsbG5bNzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc5XT0nW1x1MGUwYV1cdTBlMTlcdTBlMTkiOiJcdTBl'@;
put 'MTdcdTBlMTcnLGxuWzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3LjAnLGxuWzgxXT0iZC9tL2JiIn19Ty5fZ2VuZXJhbF9pbnQ9ZnVuY3Rpb24gV2kobG4pe3JldHVybiBsbi50b1N0cmluZygxMCl9O3ZhciBDaT1mdW5jdGlvbigpe3ZhciBFbj0vKD86XC4wKnwoXC5cZCpbMS05'@;
put 'XSkwKykkLztmdW5jdGlvbiBabihGaSl7cmV0dXJuLTE9PUZpLmluZGV4T2YoIi4iKT9GaTpGaS5yZXBsYWNlKEVuLCIkMSIpfXZhciBNaT0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxjcj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24oZ2Epe3ZhciBraT1mdW5jdGlvbiBZ'@;
put 'YShGaSl7dmFyIGtpLGdhPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoRmkpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIGtpPWdhPj0tNCYmZ2E8PS0xP0ZpLnRvUHJlY2lzaW9uKDEwK2dhKTpNYXRoLmFicyhnYSk8PTk/ZnVuY3Rpb24geHIoRmkpe3ZhciBnYT1GaTwwPzEyOjExLGtpPVpu'@;
put 'KEZpLnRvRml4ZWQoMTIpKTtyZXR1cm4ga2kubGVuZ3RoPD1nYXx8KGtpPUZpLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD1nYT9raTpGaS50b0V4cG9uZW50aWFsKDUpfShGaSk6MTA9PT1nYT9GaS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gT2koRmkpe3ZhciBnYT1abihG'@;
put 'aS50b0ZpeGVkKDExKSk7cmV0dXJuIGdhLmxlbmd0aD4oRmk8MD8xMjoxMSl8fCIwIj09PWdhfHwiLTAiPT09Z2E/RmkudG9QcmVjaXNpb24oNik6Z2F9KEZpKSxabihmdW5jdGlvbiBMaShGaSl7cmV0dXJuLTE9PUZpLmluZGV4T2YoIkUiKT9GaTpGaS5yZXBsYWNlKE1pLCIkMUUiKS5yZXBs'@;
put 'YWNlKGNyLCIkMTAkMiIpfShraS50b1VwcGVyQ2FzZSgpKSl9KGdhKTtyZXR1cm4iLCI9PT1SaSYmIi4iPT09UnI/a2k6a2kucmVwbGFjZSgvWywuXS9nLGZ1bmN0aW9uKG9vKXtyZXR1cm4iLCI9PW9vP1JpOlJyfSl9fSgpO2Z1bmN0aW9uIHdhKGxuLEVuKXtzd2l0Y2godHlwZW9mIGxuKXtj'@;
put 'YXNlInN0cmluZyI6cmV0dXJuIGxuO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGxuPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxsbik9PT1sbj9sbi50b1N0cmluZygxMCk6Q2kobG4pO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09bG4p'@;
put 'cmV0dXJuIiI7aWYobG4gaW5zdGFuY2VvZiBEYXRlKXJldHVybiBndSgxNCxlcihsbixFbiYmRW4uZGF0ZTE5MDQpLEVuKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK2xuKX1PLl9nZW5lcmFsX251bT1DaSxPLl9nZW5lcmFsPXdhO3Zh'@;
put 'ciBpYT0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxpdCgiIik7ZnVuY3Rpb24gT3MobG4sRW4sWm4sTWkpe3ZhciBZYSxjcj0iIixMaT0wLHhyPTAsT2k9Wm4ueSxGaT0wO3N3aXRjaChsbil7Y2FzZSA5ODpPaT1abi55'@;
put 'KzU0MztjYXNlIDEyMTpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOllhPU9pJTEwMCxGaT0yO2JyZWFrO2RlZmF1bHQ6WWE9T2klMWU0LEZpPTR9YnJlYWs7Y2FzZSAxMDk6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpZYT1abi5tLEZpPUVuLmxlbmd0aDticmVhaztj'@;
put 'YXNlIDM6cmV0dXJuIFR0W1puLm0tMV1bMV07Y2FzZSA1OnJldHVybiBUdFtabi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIFR0W1puLm0tMV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpZYT1abi5kLEZpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6'@;
put 'cmV0dXJuIGN0W1puLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGN0W1puLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WWE9MSsoWm4uSCsxMSklMTIsRmk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK0Vu'@;
put 'fWJyZWFrO2Nhc2UgNzI6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpZYT1abi5ILEZpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDc3OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WWE9Wm4uTSxG'@;
put 'aT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgbWludXRlIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDExNTppZigicyIhPUVuJiYic3MiIT1FbiYmIi4wIiE9RW4mJiIuMDAiIT1FbiYmIi4wMDAiIT1Fbil0aHJvdyJiYWQgc2Vjb25kIGZvcm1hdDogIitFbjtyZXR1cm4gMCE9'@;
put 'PVpuLnV8fCJzIiE9RW4mJiJzcyIhPUVuPyh4cj1NaT49Mj8zPT09TWk/MWUzOjEwMDoxPT09TWk/MTA6MSwoTGk9TWF0aC5yb3VuZCh4ciooWm4uUytabi51KSkpPj02MCp4ciYmKExpPTApLCJzIj09PUVuPzA9PT1MaT8iMCI6IiIrTGkveHI6KGNyPWVlKExpLDIrTWkpLCJzcyI9PT1Fbj9j'@;
put 'ci5zdWJzdHIoMCwyKToiLiIrY3Iuc3Vic3RyKDIsRW4ubGVuZ3RoLTEpKSk6ZWUoWm4uUyxFbi5sZW5ndGgpO2Nhc2UgOTA6c3dpdGNoKEVuKXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjYXNlIltcdTBlMGFdIjpjYXNlIltcdTBlMGFcdTBlMGFdIjpZYT0yNCpabi5EK1puLkg7YnJlYWs7Y2Fz'@;
put 'ZSJbbV0iOmNhc2UiW21tXSI6Y2FzZSJbXHUwZTE5XSI6Y2FzZSJbXHUwZTE5XHUwZTE5XSI6WWE9NjAqKDI0KlpuLkQrWm4uSCkrWm4uTTticmVhaztjYXNlIltzXSI6Y2FzZSJbc3NdIjpjYXNlIltcdTBlMTddIjpjYXNlIltcdTBlMTdcdTBlMTddIjpZYT02MCooNjAqKDI0KlpuLkQrWm4u'@;
put 'SCkrWm4uTSkrTWF0aC5yb3VuZChabi5TK1puLnUpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAiK0VufUZpPTM9PT1Fbi5sZW5ndGg/MToyO2JyZWFrO2Nhc2UgMTAxOllhPU9pLEZpPTE7YnJlYWs7Y2FzZSAzNjIzOllhPVpuLmQsRmk9RW4ubGVuZ3RoO2JyZWFr'@;
put 'O2Nhc2UgMzYwNDpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOllhPVpuLm0sRmk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gVHRbWm4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIFR0W1puLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gVHRbWm4ubS0xXVsyXX1icmVhaztjYXNl'@;
put 'IDM2MTE6c3dpdGNoKE9pPVpuLnkrNTQzLEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpZYT1PaSUxMDAsRmk9MjticmVhaztkZWZhdWx0OllhPU9pJTFlNCxGaT00fWJyZWFrO2Nhc2UgMzU5NDpZYT1abi5ILEZpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDk6WWE9Wm4uTSxGaT1Fbi5sZW5n'@;
put 'dGg7YnJlYWs7Y2FzZSAzNjA3OllhPVpuLlMsRmk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbG4udG9TdHJpbmcoMTYpfXZhciBnYT1GaT4wP2VlKFlhLEZpKToiIjtyZXR1cm4oOTA9PWxuP0VuLmNoYXJDb2RlQXQoMSk8MzU4NDpsbjwzNTg0KT9nYTpnYS5yZXBsYWNlKC9bMC05'@;
put 'XS9nLGZ1bmN0aW9uKGtpKXtyZXR1cm4gaWFbK2tpXX0pfWZ1bmN0aW9uIFBhKGxuKXtpZihsbi5sZW5ndGg8PTMpcmV0dXJuIGxuO2Zvcih2YXIgWm49bG4ubGVuZ3RoJTMsTWk9bG4uc3Vic3RyKDAsWm4pO1puIT1sbi5sZW5ndGg7Wm4rPTMpTWkrPShNaS5sZW5ndGg+MD8iLCI6IiIpK2xu'@;
put 'LnN1YnN0cihabiwzKTtyZXR1cm4gTWl9dmFyIHVzPWZ1bmN0aW9uKCl7dmFyIEVuPS8lL2c7ZnVuY3Rpb24gY3IoX24sVXQpe3ZhciBubixTbj1fbi5pbmRleE9mKCJFIiktX24uaW5kZXhPZigiLiIpLTE7aWYoX24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVV0KXJldHVybiIwLjBF'@;
put 'KzAiO2lmKFV0PDApcmV0dXJuIi0iK2NyKF9uLC1VdCk7dmFyIFVuPV9uLmluZGV4T2YoIi4iKTstMT09PVVuJiYoVW49X24uaW5kZXhPZigiRSIpKTt2YXIgX3I9TWF0aC5mbG9vcihNYXRoLmxvZyhVdCkqTWF0aC5MT0cxMEUpJVVuO2lmKF9yPDAmJihfcis9VW4pLC0xPT09KG5uPShVdC9N'@;
put 'YXRoLnBvdygxMCxfcikpLnRvUHJlY2lzaW9uKFNuKzErKFVuK19yKSVVbikpLmluZGV4T2YoImUiKSl7dmFyIFpyPU1hdGguZmxvb3IoTWF0aC5sb2coVXQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1ubi5pbmRleE9mKCIuIik/bm49bm4uY2hhckF0KDApKyIuIitubi5zdWJzdHIoMSkrIkUr'@;
put 'IisoWnItbm4ubGVuZ3RoK19yKTpubis9IkUrIisoWnItX3IpOyIwLiI9PT1ubi5zdWJzdHIoMCwyKTspbm49KG5uPW5uLmNoYXJBdCgwKStubi5zdWJzdHIoMixVbikrIi4iK25uLnN1YnN0cigyK1VuKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIp'@;
put 'O25uPW5uLnJlcGxhY2UoL1wrLS8sIi0iKX1ubj1ubi5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGlpLHRpLEppLFVpKXtyZXR1cm4gdGkrSmkrVWkuc3Vic3RyKDAsKFVuK19yKSVVbikrIi4iK1VpLnN1YnN0cihfcikrIkUifSl9ZWxzZSBubj1VdC50b0V4'@;
put 'cG9uZW50aWFsKFNuKTtyZXR1cm4gX24ubWF0Y2goL0VcKzAwJC8pJiZubi5tYXRjaCgvZVsrLV1cZCQvKSYmKG5uPW5uLnN1YnN0cigwLG5uLmxlbmd0aC0xKSsiMCIrbm4uY2hhckF0KG5uLmxlbmd0aC0xKSksX24ubWF0Y2goL0VcLS8pJiZubi5tYXRjaCgvZVwrLykmJihubj1ubi5yZXBs'@;
put 'YWNlKC9lXCsvLCJlIikpLG5uLnJlcGxhY2UoImUiLCJFIil9dmFyIExpPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyxZYT0vXiMqMCpcLihbMCNdKykvLEZpPS9cKS4qWzAjXS8sZ2E9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIGtpKF9uKXtmb3IodmFyIG5uLFV0PSIiLFNuPTA7'@;
put 'U24hPV9uLmxlbmd0aDsrK1NuKXN3aXRjaChubj1fbi5jaGFyQ29kZUF0KFNuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlV0Kz0iICI7YnJlYWs7Y2FzZSA0ODpVdCs9IjAiO2JyZWFrO2RlZmF1bHQ6VXQrPVN0cmluZy5mcm9tQ2hhckNvZGUobm4pfXJldHVybiBVdH1mdW5jdGlvbiBvbyhf'@;
put 'bixVdCl7dmFyIG5uPU1hdGgucG93KDEwLFV0KTtyZXR1cm4iIitNYXRoLnJvdW5kKF9uKm5uKS9ubn1mdW5jdGlvbiBHcyhfbixVdCl7aWYoVXQ+MTEpcmV0dXJuIEdzKF9uLDExKSpNYXRoLnBvdygxMCxVdC0xMSk7dmFyIG5uPV9uLU1hdGguZmxvb3IoX24pLFNuPU1hdGgucG93KDEwLFV0'@;
put 'KTtyZXR1cm4gVXQ8KCIiK01hdGgucm91bmQobm4qU24pKS5sZW5ndGg/MDpNYXRoLnJvdW5kKG5uKlNuKX1mdW5jdGlvbiBNbChfbixVdCxubil7aWYoNDA9PT1fbi5jaGFyQ29kZUF0KDApJiYhVXQubWF0Y2goRmkpKXt2YXIgU249VXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBc'@;
put 'KS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5uPj0wP01sKCJuIixTbixubik6IigiK01sKCJuIixTbiwtbm4pKyIpIn1pZig0ND09PVV0LmNoYXJDb2RlQXQoVXQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBNaShfbixVdCxubil7Zm9yKHZhciBTbj1VdC5sZW5ndGgtMTs0ND09'@;
put 'PVV0LmNoYXJDb2RlQXQoU24tMSk7KS0tU247cmV0dXJuIHVzKF9uLFV0LnN1YnN0cigwLFNuKSxubi9NYXRoLnBvdygxMCwzKihVdC5sZW5ndGgtU24pKSl9KF9uLFV0LG5uKTtpZigtMSE9PVV0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gWm4oX24sVXQsbm4pe3ZhciBTbj1VdC5y'@;
put 'ZXBsYWNlKEVuLCIiKSxVbj1VdC5sZW5ndGgtU24ubGVuZ3RoO3JldHVybiB1cyhfbixTbixubipNYXRoLnBvdygxMCwyKlVuKSkrSygiJSIsVW4pfShfbixVdCxubik7aWYoLTEhPT1VdC5pbmRleE9mKCJFIikpcmV0dXJuIGNyKFV0LG5uKTtpZigzNj09PVV0LmNoYXJDb2RlQXQoMCkpcmV0'@;
put 'dXJuIiQiK01sKF9uLFV0LnN1YnN0cigiICI9PVV0LmNoYXJBdCgxKT8yOjEpLG5uKTt2YXIgVW4sX3IsWnIsaWksdGk9TWF0aC5hYnMobm4pLEppPW5uPDA/Ii0iOiIiO2lmKFV0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBKaStWZSh0aSxVdC5sZW5ndGgpO2lmKFV0Lm1hdGNoKC9eWyM/XSsk'@;
put 'LykpcmV0dXJuIjAiPT09KFVuPVZlKG5uLDApKSYmKFVuPSIiKSxVbi5sZW5ndGg+VXQubGVuZ3RoP1VuOmtpKFV0LnN1YnN0cigwLFV0Lmxlbmd0aC1Vbi5sZW5ndGgpKStVbjtpZihfcj1VdC5tYXRjaChMaSkpcmV0dXJuIGZ1bmN0aW9uIHhyKF9uLFV0LG5uKXt2YXIgU249cGFyc2VJbnQo'@;
put 'X25bNF0sMTApLFVuPU1hdGgucm91bmQoVXQqU24pLF9yPU1hdGguZmxvb3IoVW4vU24pLFpyPVVuLV9yKlNuLGlpPVNuO3JldHVybiBubisoMD09PV9yPyIiOiIiK19yKSsiICIrKDA9PT1acj9LKCIgIixfblsxXS5sZW5ndGgrMStfbls0XS5sZW5ndGgpOm9lKFpyLF9uWzFdLmxlbmd0aCkr'@;
put 'X25bMl0rIi8iK19uWzNdK2VlKGlpLF9uWzRdLmxlbmd0aCkpfShfcix0aSxKaSk7aWYoVXQubWF0Y2goL14jKzArJC8pKXJldHVybiBKaStWZSh0aSxVdC5sZW5ndGgtVXQuaW5kZXhPZigiMCIpKTtpZihfcj1VdC5tYXRjaChZYSkpcmV0dXJuIFVuPW9vKG5uLF9yWzFdLmxlbmd0aCkucmVw'@;
put 'bGFjZSgvXihbXlwuXSspJC8sIiQxLiIra2koX3JbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitraShfclsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihBcyxNbyl7cmV0dXJuIi4iK01vK0soIjAiLGtpKF9yWzFdKS5sZW5ndGgtTW8ubGVuZ3RoKX0pLC0xIT09VXQuaW5kZXhPZigi'@;
put 'MC4iKT9VbjpVbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFV0PVV0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksX3I9VXQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBKaStvbyh0aSxfclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2Uo'@;
put 'L14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLF9yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoX3I9VXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIEppK1BhKFZlKHRpLDApKTtpZihfcj1VdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48MD8i'@;
put 'LSIrTWwoX24sVXQsLW5uKTpQYSgiIisoTWF0aC5mbG9vcihubikrZnVuY3Rpb24gU2woX24sVXQpe3JldHVybiBVdDwoIiIrTWF0aC5yb3VuZCgoX24tTWF0aC5mbG9vcihfbikpKk1hdGgucG93KDEwLFV0KSkpLmxlbmd0aD8xOjB9KG5uLF9yWzFdLmxlbmd0aCkpKSsiLiIrZWUoR3Mobm4s'@;
put 'X3JbMV0ubGVuZ3RoKSxfclsxXS5sZW5ndGgpO2lmKF9yPVV0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBNbChfbixVdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxubik7aWYoX3I9VXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIFVuPWsoTWwoX24sVXQucmVwbGFj'@;
put 'ZSgvW1xcLV0vZywiIiksbm4pKSxacj0wLGsoayhVdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKEFzKXtyZXR1cm4gWnI8VW4ubGVuZ3RoP1VuLmNoYXJBdChacisrKToiMCI9PT1Bcz8iMCI6IiJ9KSk7aWYoVXQubWF0Y2goZ2EpKXJldHVybiIoIisoVW49'@;
put 'TWwoX24sIiMjIyMjIyMjIyMiLG5uKSkuc3Vic3RyKDAsMykrIikgIitVbi5zdWJzdHIoMywzKSsiLSIrVW4uc3Vic3RyKDYpO3ZhciBVaT0iIjtpZihfcj1VdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFpyPU1hdGgubWluKF9yWzRdLmxlbmd0aCw3KSxp'@;
put 'aT1LdCh0aSxNYXRoLnBvdygxMCxaciktMSwhMSksVW49IiIrSmksIiAiPT0oVWk9dXMoIm4iLF9yWzFdLGlpWzFdKSkuY2hhckF0KFVpLmxlbmd0aC0xKSYmKFVpPVVpLnN1YnN0cigwLFVpLmxlbmd0aC0xKSsiMCIpLFVuKz1VaStfclsyXSsiLyIrX3JbM10sKFVpPW1lKGlpWzJdLFpyKSku'@;
put 'bGVuZ3RoPF9yWzRdLmxlbmd0aCYmKFVpPWtpKF9yWzRdLnN1YnN0cihfcls0XS5sZW5ndGgtVWkubGVuZ3RoKSkrVWkpLFVuKz1VaTtpZihfcj1VdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gWnI9TWF0aC5taW4oTWF0aC5tYXgoX3JbMV0ubGVuZ3Ro'@;
put 'LF9yWzRdLmxlbmd0aCksNyksSmkrKChpaT1LdCh0aSxNYXRoLnBvdygxMCxaciktMSwhMCkpWzBdfHwoaWlbMV0/IiI6IjAiKSkrIiAiKyhpaVsxXT9vZShpaVsxXSxacikrX3JbMl0rIi8iK19yWzNdK21lKGlpWzJdLFpyKTpLKCIgIiwyKlpyKzErX3JbMl0ubGVuZ3RoK19yWzNdLmxlbmd0'@;
put 'aCkpO2lmKF9yPVV0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBVbj1WZShubiwwKSxVdC5sZW5ndGg8PVVuLmxlbmd0aD9VbjpraShVdC5zdWJzdHIoMCxVdC5sZW5ndGgtVW4ubGVuZ3RoKSkrVW47aWYoX3I9VXQubWF0Y2goL14oWyMwP10rKVwuKFsjMF0rKSQvKSl7VW49IiIrbm4udG9G'@;
put 'aXhlZChNYXRoLm1pbihfclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLFpyPVVuLmluZGV4T2YoIi4iKTt2YXIgbnM9VXQuaW5kZXhPZigiLiIpLVpyLFVhPVV0Lmxlbmd0aC1Vbi5sZW5ndGgtbnM7cmV0dXJuIGtpKFV0LnN1YnN0cigwLG5zKStVbitVdC5zdWJz'@;
put 'dHIoVXQubGVuZ3RoLVVhKSl9aWYoX3I9VXQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBacj1HcyhubixfclsxXS5sZW5ndGgpLG5uPDA/Ii0iK01sKF9uLFV0LC1ubik6UGEoZnVuY3Rpb24gbXUoX24pe3JldHVybiBfbjwyMTQ3NDgzNjQ3JiZfbj4tMjE0NzQ4MzY0OD8i'@;
put 'IisoX24+PTA/MHxfbjpfbi0xfDApOiIiK01hdGguZmxvb3IoX24pfShubikpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oQXMpe3JldHVybiIwMCwiKyhBcy5sZW5ndGg8Mz9lZSgwLDMtQXMubGVuZ3RoKToiIikrQXN9KSsiLiIrZWUoWnIs'@;
put 'X3JbMV0ubGVuZ3RoKTtzd2l0Y2goVXQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIE1sKF9uLCIjLCMjMC4wMCIsbm4pO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciB5YT1QYShWZSh0aSwwKSk7cmV0dXJuIjAiIT09eWE/SmkreWE6IiI7Y2FzZSIjIyMsIyMj'@;
put 'LjAwIjpyZXR1cm4gTWwoX24sIiMjIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBNbChfbiwiIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1V0KyJ8Iil9'@;
put 'ZnVuY3Rpb24gcG4oX24sVXQpe3ZhciBubixTbj1fbi5pbmRleE9mKCJFIiktX24uaW5kZXhPZigiLiIpLTE7aWYoX24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVV0KXJldHVybiIwLjBFKzAiO2lmKFV0PDApcmV0dXJuIi0iK3BuKF9uLC1VdCk7dmFyIFVuPV9uLmluZGV4T2YoIi4i'@;
put 'KTstMT09PVVuJiYoVW49X24uaW5kZXhPZigiRSIpKTt2YXIgX3I9TWF0aC5mbG9vcihNYXRoLmxvZyhVdCkqTWF0aC5MT0cxMEUpJVVuO2lmKF9yPDAmJihfcis9VW4pLCEobm49KFV0L01hdGgucG93KDEwLF9yKSkudG9QcmVjaXNpb24oU24rMSsoVW4rX3IpJVVuKSkubWF0Y2goL1tFZV0v'@;
put 'KSl7dmFyIFpyPU1hdGguZmxvb3IoTWF0aC5sb2coVXQpKk1hdGguTE9HMTBFKTstMT09PW5uLmluZGV4T2YoIi4iKT9ubj1ubi5jaGFyQXQoMCkrIi4iK25uLnN1YnN0cigxKSsiRSsiKyhaci1ubi5sZW5ndGgrX3IpOm5uKz0iRSsiKyhaci1fciksbm49bm4ucmVwbGFjZSgvXCstLywiLSIp'@;
put 'fW5uPW5uLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oaWksdGksSmksVWkpe3JldHVybiB0aStKaStVaS5zdWJzdHIoMCwoVW4rX3IpJVVuKSsiLiIrVWkuc3Vic3RyKF9yKSsiRSJ9KX1lbHNlIG5uPVV0LnRvRXhwb25lbnRpYWwoU24pO3JldHVybiBfbi5t'@;
put 'YXRjaCgvRVwrMDAkLykmJm5uLm1hdGNoKC9lWystXVxkJC8pJiYobm49bm4uc3Vic3RyKDAsbm4ubGVuZ3RoLTEpKyIwIitubi5jaGFyQXQobm4ubGVuZ3RoLTEpKSxfbi5tYXRjaCgvRVwtLykmJm5uLm1hdGNoKC9lXCsvKSYmKG5uPW5uLnJlcGxhY2UoL2VcKy8sImUiKSksbm4ucmVwbGFj'@;
put 'ZSgiZSIsIkUiKX1mdW5jdGlvbiBEbihfbixVdCxubil7aWYoNDA9PT1fbi5jaGFyQ29kZUF0KDApJiYhVXQubWF0Y2goRmkpKXt2YXIgU249VXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5uPj0wP0RuKCJuIixTbixubik6'@;
put 'IigiK0RuKCJuIixTbiwtbm4pKyIpIn1pZig0ND09PVV0LmNoYXJDb2RlQXQoVXQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBqZihfbixVdCxubil7Zm9yKHZhciBTbj1VdC5sZW5ndGgtMTs0ND09PVV0LmNoYXJDb2RlQXQoU24tMSk7KS0tU247cmV0dXJuIHVzKF9uLFV0LnN1YnN0cigw'@;
put 'LFNuKSxubi9NYXRoLnBvdygxMCwzKihVdC5sZW5ndGgtU24pKSl9KF9uLFV0LG5uKTtpZigtMSE9PVV0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gX2QoX24sVXQsbm4pe3ZhciBTbj1VdC5yZXBsYWNlKEVuLCIiKSxVbj1VdC5sZW5ndGgtU24ubGVuZ3RoO3JldHVybiB1cyhfbixT'@;
put 'bixubipNYXRoLnBvdygxMCwyKlVuKSkrSygiJSIsVW4pfShfbixVdCxubik7aWYoLTEhPT1VdC5pbmRleE9mKCJFIikpcmV0dXJuIHBuKFV0LG5uKTtpZigzNj09PVV0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK0RuKF9uLFV0LnN1YnN0cigiICI9PVV0LmNoYXJBdCgxKT8yOjEpLG5uKTt2'@;
put 'YXIgVW4sX3IsWnIsaWksdGk9TWF0aC5hYnMobm4pLEppPW5uPDA/Ii0iOiIiO2lmKFV0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBKaStlZSh0aSxVdC5sZW5ndGgpO2lmKFV0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIFVuPSIiK25uLDA9PT1ubiYmKFVuPSIiKSxVbi5sZW5ndGg+VXQubGVu'@;
put 'Z3RoP1VuOmtpKFV0LnN1YnN0cigwLFV0Lmxlbmd0aC1Vbi5sZW5ndGgpKStVbjtpZihfcj1VdC5tYXRjaChMaSkpcmV0dXJuIGZ1bmN0aW9uIE9pKF9uLFV0LG5uKXtyZXR1cm4gbm4rKDA9PT1VdD8iIjoiIitVdCkrSygiICIsX25bMV0ubGVuZ3RoKzIrX25bNF0ubGVuZ3RoKX0oX3IsdGks'@;
put 'SmkpO2lmKFV0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gSmkrZWUodGksVXQubGVuZ3RoLVV0LmluZGV4T2YoIjAiKSk7aWYoX3I9VXQubWF0Y2goWWEpKXJldHVybiBVbj0oVW49KCIiK25uKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitraShfclsxXSkpLnJlcGxhY2UoL1wuJC8sIi4i'@;
put 'K2tpKF9yWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihBcyxNbyl7cmV0dXJuIi4iK01vK0soIjAiLGtpKF9yWzFdKS5sZW5ndGgtTW8ubGVuZ3RoKX0pLC0xIT09VXQuaW5kZXhPZigiMC4iKT9VbjpVbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFV0PVV0LnJlcGxhY2UoL14j'@;
put 'KyhbMC5dKS8sIiQxIiksX3I9VXQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBKaSsoIiIrdGkpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLF9yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoX3I9'@;
put 'VXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIEppK1BhKCIiK3RpKTtpZihfcj1VdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48MD8iLSIrRG4oX24sVXQsLW5uKTpQYSgiIitubikrIi4iK0soIjAiLF9yWzFdLmxlbmd0aCk7aWYoX3I9VXQubWF0Y2go'@;
put 'L14jLCMqLCMwLykpcmV0dXJuIERuKF9uLFV0LnJlcGxhY2UoL14jLCMqLC8sIiIpLG5uKTtpZihfcj1VdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gVW49ayhEbihfbixVdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxubikpLFpyPTAsayhrKFV0LnJlcGxhY2UoL1xc'@;
put 'L2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oQXMpe3JldHVybiBacjxVbi5sZW5ndGg/VW4uY2hhckF0KFpyKyspOiIwIj09PUFzPyIwIjoiIn0pKTtpZihVdC5tYXRjaChnYSkpcmV0dXJuIigiKyhVbj1EbihfbiwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK1Vu'@;
put 'LnN1YnN0cigzLDMpKyItIitVbi5zdWJzdHIoNik7dmFyIFVpPSIiO2lmKF9yPVV0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gWnI9TWF0aC5taW4oX3JbNF0ubGVuZ3RoLDcpLGlpPUt0KHRpLE1hdGgucG93KDEwLFpyKS0xLCExKSxVbj0iIitKaSwiICI9'@;
put 'PShVaT11cygibiIsX3JbMV0saWlbMV0pKS5jaGFyQXQoVWkubGVuZ3RoLTEpJiYoVWk9VWkuc3Vic3RyKDAsVWkubGVuZ3RoLTEpKyIwIiksVW4rPVVpK19yWzJdKyIvIitfclszXSwoVWk9bWUoaWlbMl0sWnIpKS5sZW5ndGg8X3JbNF0ubGVuZ3RoJiYoVWk9a2koX3JbNF0uc3Vic3RyKF9y'@;
put 'WzRdLmxlbmd0aC1VaS5sZW5ndGgpKStVaSksVW4rPVVpO2lmKF9yPVV0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBacj1NYXRoLm1pbihNYXRoLm1heChfclsxXS5sZW5ndGgsX3JbNF0ubGVuZ3RoKSw3KSxKaSsoKGlpPUt0KHRpLE1hdGgucG93KDEw'@;
put 'LFpyKS0xLCEwKSlbMF18fChpaVsxXT8iIjoiMCIpKSsiICIrKGlpWzFdP29lKGlpWzFdLFpyKStfclsyXSsiLyIrX3JbM10rbWUoaWlbMl0sWnIpOksoIiAiLDIqWnIrMStfclsyXS5sZW5ndGgrX3JbM10ubGVuZ3RoKSk7aWYoX3I9VXQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFV0Lmxl'@;
put 'bmd0aDw9KFVuPSIiK25uKS5sZW5ndGg/VW46a2koVXQuc3Vic3RyKDAsVXQubGVuZ3RoLVVuLmxlbmd0aCkpK1VuO2lmKF9yPVV0Lm1hdGNoKC9eKFsjMF0rKVwuKFsjMF0rKSQvKSl7VW49IiIrbm4udG9GaXhlZChNYXRoLm1pbihfclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkw'@;
put 'KyQvLCIkMSIpLFpyPVVuLmluZGV4T2YoIi4iKTt2YXIgbnM9VXQuaW5kZXhPZigiLiIpLVpyLFVhPVV0Lmxlbmd0aC1Vbi5sZW5ndGgtbnM7cmV0dXJuIGtpKFV0LnN1YnN0cigwLG5zKStVbitVdC5zdWJzdHIoVXQubGVuZ3RoLVVhKSl9aWYoX3I9VXQubWF0Y2goL14wMCwwMDBcLihbIzBd'@;
put 'KjApJC8pKXJldHVybiBubjwwPyItIitEbihfbixVdCwtbm4pOlBhKCIiK25uKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKEFzKXtyZXR1cm4iMDAsIisoQXMubGVuZ3RoPDM/ZWUoMCwzLUFzLmxlbmd0aCk6IiIpK0FzfSkrIi4iK2VlKDAs'@;
put 'X3JbMV0ubGVuZ3RoKTt2YXIgeWE9UGEoIiIrdGkpO3N3aXRjaChVdCl7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6cmV0dXJuIjAiIT09eWE/SmkreWE6IiI7Y2FzZSIjLCMwMCI6cmV0dXJuIjAwIiE9PSh5YT1lZSh5YSwyKSk/SmkreWE6IiI7ZGVmYXVsdDppZihV'@;
put 'dC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIERuKF9uLFV0LnNsaWNlKDAsVXQubGFzdEluZGV4T2YoIi4iKSksbm4pK2tpKFV0LnNsaWNlKFV0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitVdCsifCIpfXJldHVybiBmdW5jdGlv'@;
put 'bihVdCxubixTbil7cmV0dXJuIjAsMCI9PW5uJiYobm49IiMsIzAwIiksKDB8U24pPT09U24/RG4oVXQsbm4sU24pOk1sKFV0LG5uLFNuKX19KCk7ZnVuY3Rpb24gcWEobG4pe2Zvcih2YXIgRW49W10sWm49ITEsTWk9MCxjcj0wO01pPGxuLmxlbmd0aDsrK01pKXN3aXRjaChsbi5jaGFyQ29k'@;
put 'ZUF0KE1pKSl7Y2FzZSAzNDpabj0hWm47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNhc2UgOTI6KytNaTticmVhaztjYXNlIDU5OkVuW0VuLmxlbmd0aF09bG4uc3Vic3RyKGNyLE1pLWNyKSxjcj1NaSsxfWlmKEVuW0VuLmxlbmd0aF09bG4uc3Vic3RyKGNyKSwhMD09PVpuKXRocm93IG5ldyBF'@;
put 'cnJvcigiRm9ybWF0IHwiK2xuKyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0dXJuIEVufU8uX3NwbGl0PXFhO3ZhciBWaT0vXFtbSGhNbVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gSW8obG4pe2Zvcih2YXIgRW49MCxabj0iIixNaT0iIjtFbjxsbi5sZW5ndGg7KXN3'@;
put 'aXRjaChabj1sbi5jaGFyQXQoRW4pKXtjYXNlIkciOlllKGxuLEVuKSYmKEVuKz02KSxFbisrO2JyZWFrO2Nhc2UnIic6Zm9yKDszNCE9PWxuLmNoYXJDb2RlQXQoKytFbikmJkVuPGxuLmxlbmd0aDspOysrRW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpFbis9MjticmVhaztjYXNlIkAiOisr'@;
put 'RW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWxuLmNoYXJBdChFbisxKXx8IjIiPT09bG4uY2hhckF0KEVuKzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2Fz'@;
put 'ZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PWxuLnN1YnN0cihFbiwzKS50b1VwcGVyQ2FzZSgpfHwiQU0vUE0iPT09bG4uc3Vic3RyKEVuLDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1'@;
put 'MzQ4Ij09PWxuLnN1YnN0cihFbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrRW47YnJlYWs7Y2FzZSJbIjpmb3IoTWk9Wm47Il0iIT09bG4uY2hhckF0KEVuKyspJiZFbjxsbi5sZW5ndGg7KU1pKz1sbi5jaGFyQXQoRW4pO2lmKE1pLm1hdGNoKFZpKSlyZXR1cm4hMDticmVhaztjYXNl'@;
put 'Ii4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO0VuPGxuLmxlbmd0aCYmKCIwIz8uLEUrLSUiLmluZGV4T2YoWm49bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09Wm4mJiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4uY2hhckF0KEVuKzIpKT4tMSk7KTticmVhaztjYXNlIj8i'@;
put 'OmZvcig7bG4uY2hhckF0KCsrRW4pPT09Wm47KTticmVhaztjYXNlIioiOisrRW4sKCIgIj09bG4uY2hhckF0KEVuKXx8IioiPT1sbi5jaGFyQXQoRW4pKSYmKytFbjticmVhaztjYXNlIigiOmNhc2UiKSI6KytFbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2Ui'@;
put 'NSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO0VuPGxuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrRW4pKT4tMTspO2JyZWFrO2RlZmF1bHQ6KytFbn1yZXR1cm4hMX1mdW5jdGlvbiBGbihsbixFbixabixNaSl7Zm9yKHZhciBGaSxnYSxr'@;
put 'aSxjcj1bXSxMaT0iIix4cj0wLE9pPSIiLFlhPSJ0Iixvbz0iSCI7eHI8bG4ubGVuZ3RoOylzd2l0Y2goT2k9bG4uY2hhckF0KHhyKSl7Y2FzZSJHIjppZighWWUobG4seHIpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK09pKyIgaW4gIitsbik7Y3JbY3IubGVu'@;
put 'Z3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LHhyKz03O2JyZWFrO2Nhc2UnIic6Zm9yKExpPSIiOzM0IT09KGtpPWxuLmNoYXJDb2RlQXQoKyt4cikpJiZ4cjxsbi5sZW5ndGg7KUxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGtpKTtjcltjci5sZW5ndGhdPXt0OiJ0Iix2OkxpfSwrK3hyO2JyZWFr'@;
put 'O2Nhc2UiXFwiOnZhciBHcz1sbi5jaGFyQXQoKyt4cik7Y3JbY3IubGVuZ3RoXT17dDoiKCI9PT1Hc3x8IikiPT09R3M/R3M6InQiLHY6R3N9LCsreHI7YnJlYWs7Y2FzZSJfIjpjcltjci5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0seHIrPTI7YnJlYWs7Y2FzZSJAIjpjcltjci5sZW5ndGhdPXt0'@;
put 'OiJUIix2OkVufSwrK3hyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1sbi5jaGFyQXQoeHIrMSl8fCIyIj09PWxuLmNoYXJBdCh4cisxKSl7aWYobnVsbD09RmkmJm51bGw9PShGaT1UbihFbixabiwiMiI9PT1sbi5jaGFyQXQoeHIrMSkpKSlyZXR1cm4iIjtjcltjci5sZW5ndGhd'@;
put 'PXt0OiJYIix2OmxuLnN1YnN0cih4ciwyKX0sWWE9T2kseHIrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6T2k9T2kudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNl'@;
put 'ImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOmlmKEVuPDB8fG51bGw9PUZpJiZudWxsPT0oRmk9VG4oRW4sWm4pKSlyZXR1cm4iIjtmb3IoTGk9T2k7Kyt4cjxsbi5sZW5ndGgmJmxuLmNoYXJB'@;
put 'dCh4cikudG9Mb3dlckNhc2UoKT09PU9pOylMaSs9T2k7Im0iPT09T2kmJiJoIj09PVlhLnRvTG93ZXJDYXNlKCkmJihPaT0iTSIpLCJoIj09PU9pJiYoT2k9b28pLGNyW2NyLmxlbmd0aF09e3Q6T2ksdjpMaX0sWWE9T2k7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIg'@;
put 'bXU9e3Q6T2ksdjpPaX07aWYobnVsbD09RmkmJihGaT1UbihFbixabikpLCJBL1AiPT09bG4uc3Vic3RyKHhyLDMpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUZpJiYobXUudj1GaS5IPj0xMj8iUCI6IkEiKSxtdS50PSJUIixvbz0iaCIseHIrPTMpOiJBTS9QTSI9PT1sbi5zdWJzdHIoeHIsNSku'@;
put 'dG9VcHBlckNhc2UoKT8obnVsbCE9RmkmJihtdS52PUZpLkg+PTEyPyJQTSI6IkFNIiksbXUudD0iVCIseHIrPTUsb289ImgiKToiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1sbi5zdWJzdHIoeHIsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9RmkmJihtdS52PUZpLkg+PTEyPyJcdTRl'@;
put 'MGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSxtdS50PSJUIix4cis9NSxvbz0iaCIpOihtdS50PSJ0IiwrK3hyKSxudWxsPT1GaSYmIlQiPT09bXUudClyZXR1cm4iIjtjcltjci5sZW5ndGhdPW11LFlhPU9pO2JyZWFrO2Nhc2UiWyI6Zm9yKExpPU9pOyJdIiE9PWxuLmNoYXJBdCh4cisrKSYm'@;
put 'eHI8bG4ubGVuZ3RoOylMaSs9bG4uY2hhckF0KHhyKTtpZigiXSIhPT1MaS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcrTGkrInwiO2lmKExpLm1hdGNoKFZpKSl7aWYobnVsbD09RmkmJm51bGw9PShGaT1UbihFbixabikpKXJldHVybiIiO2NyW2NyLmxlbmd0'@;
put 'aF09e3Q6IloiLHY6TGkudG9Mb3dlckNhc2UoKX0sWWE9TGkuY2hhckF0KDEpfWVsc2UgTGkuaW5kZXhPZigiJCIpPi0xJiYoTGk9KExpLm1hdGNoKC9cJChbXi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLElvKGxuKXx8KGNyW2NyLmxlbmd0aF09e3Q6InQiLHY6TGl9KSk7YnJlYWs7Y2FzZSIu'@;
put 'IjppZihudWxsIT1GaSl7Zm9yKExpPU9pOysreHI8bG4ubGVuZ3RoJiYiMCI9PT0oT2k9bG4uY2hhckF0KHhyKSk7KUxpKz1PaTtjcltjci5sZW5ndGhdPXt0OiJzIix2OkxpfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKExpPU9pOysreHI8bG4ubGVuZ3RoJiYiMCM/LixFKy0lIi5pbmRl'@;
put 'eE9mKE9pPWxuLmNoYXJBdCh4cikpPi0xOylMaSs9T2k7Y3JbY3IubGVuZ3RoXT17dDoibiIsdjpMaX07YnJlYWs7Y2FzZSI/Ijpmb3IoTGk9T2k7bG4uY2hhckF0KCsreHIpPT09T2k7KUxpKz1PaTtjcltjci5sZW5ndGhdPXt0Ok9pLHY6TGl9LFlhPU9pO2JyZWFrO2Nhc2UiKiI6Kyt4ciwo'@;
put 'IiAiPT1sbi5jaGFyQXQoeHIpfHwiKiI9PWxuLmNoYXJBdCh4cikpJiYrK3hyO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpjcltjci5sZW5ndGhdPXt0OjE9PT1NaT8idCI6T2ksdjpPaX0sKyt4cjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2Ijpj'@;
put 'YXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoTGk9T2k7eHI8bG4ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFyQXQoKyt4cikpPi0xOylMaSs9bG4uY2hhckF0KHhyKTtjcltjci5sZW5ndGhdPXt0OiJEIix2OkxpfTticmVhaztjYXNlIiAiOmNyW2NyLmxlbmd0aF09e3Q6'@;
put 'T2ksdjpPaX0sKyt4cjticmVhaztjYXNlIiQiOmNyW2NyLmxlbmd0aF09e3Q6InQiLHY6U2l9LCsreHI7YnJlYWs7Y2FzZSIvIjpjcltjci5sZW5ndGhdPWNyLmxlbmd0aD4wJiZJbyhjcltjci5sZW5ndGgtMV0udik/e3Q6InQiLHY6Qm59Ont0OiJ0Iix2OiIvIn0sKyt4cjticmVhaztkZWZh'@;
put 'dWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFydHV2d3h6UCIuaW5kZXhPZihPaSkpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrT2krIiBpbiAiK2xuKTtjcltjci5sZW5ndGhdPXt0OiJ0Iix2Ok9pfSwrK3hyfXZhciBfZCxN'@;
put 'bD0wLGpmPTA7Zm9yKHhyPWNyLmxlbmd0aC0xLFlhPSJ0Ijt4cj49MDstLXhyKXN3aXRjaChjclt4cl0udCl7Y2FzZSJoIjpjYXNlIkgiOmNyW3hyXS50PW9vLFlhPSJoIixNbDwxJiYoTWw9MSk7YnJlYWs7Y2FzZSJzIjooX2Q9Y3JbeHJdLnYubWF0Y2goL1wuMCskLykpJiYoamY9TWF0aC5t'@;
put 'YXgoamYsX2RbMF0ubGVuZ3RoLTEpKSxNbDwzJiYoTWw9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjpZYT1jclt4cl0udDticmVhaztjYXNlIm0iOiJzIj09PVlhJiYoY3JbeHJdLnQ9Ik0iLE1sPDImJihNbD0yKSk7YnJlYWs7Y2FzZSJYIjpicmVhaztjYXNlIloiOk1sPDEm'@;
put 'JmNyW3hyXS52Lm1hdGNoKC9bSGhdLykmJihNbD0xKSxNbDwyJiZjclt4cl0udi5tYXRjaCgvW01tXS8pJiYoTWw9MiksTWw8MyYmY3JbeHJdLnYubWF0Y2goL1tTc10vKSYmKE1sPTMpfXN3aXRjaChNbCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpGaS51Pj0uNSYmKEZpLnU9MCwrK0ZpLlMpLEZp'@;
put 'LlM+PTYwJiYoRmkuUz0wLCsrRmkuTSksRmkuTT49NjAmJihGaS5NPTAsKytGaS5IKTticmVhaztjYXNlIDI6RmkudT49LjUmJihGaS51PTAsKytGaS5TKSxGaS5TPj02MCYmKEZpLlM9MCwrK0ZpLk0pfXZhciBEbixwbj0iIjtmb3IoeHI9MDt4cjxjci5sZW5ndGg7Kyt4cilzd2l0Y2goY3Jb'@;
put 'eHJdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2FzZSJYIjpjclt4cl0udj0iIixjclt4cl0udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpj'@;
put 'YXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3Ijpjclt4cl0udj1Pcyhjclt4cl0udC5jaGFyQ29kZUF0KDApLGNyW3hyXS52LEZpLGpmKSxjclt4cl0udD0idCI7YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZv'@;
put 'cihEbj14cisxO251bGwhPWNyW0RuXSYmKCI/Ij09PShPaT1jcltEbl0udCl8fCJEIj09PU9pfHwoIiAiPT09T2l8fCJ0Ij09PU9pKSYmbnVsbCE9Y3JbRG4rMV0mJigiPyI9PT1jcltEbisxXS50fHwidCI9PT1jcltEbisxXS50JiYiLyI9PT1jcltEbisxXS52KXx8IigiPT09Y3JbeHJdLnQm'@;
put 'JigiICI9PT1PaXx8Im4iPT09T2l8fCIpIj09PU9pKXx8InQiPT09T2kmJigiLyI9PT1jcltEbl0udnx8IiAiPT09Y3JbRG5dLnYmJm51bGwhPWNyW0RuKzFdJiYiPyI9PWNyW0RuKzFdLnQpKTspY3JbeHJdLnYrPWNyW0RuXS52LGNyW0RuXT17djoiIix0OiI7In0sKytEbjtwbis9Y3JbeHJd'@;
put 'LnYseHI9RG4tMTticmVhaztjYXNlIkciOmNyW3hyXS50PSJ0Iixjclt4cl0udj13YShFbixabil9dmFyIFV0LG5uLF9uPSIiO2lmKHBuLmxlbmd0aD4wKXs0MD09cG4uY2hhckNvZGVBdCgwKT8oVXQ9RW48MCYmNDU9PT1wbi5jaGFyQ29kZUF0KDApPy1FbjpFbixubj11cygibiIscG4sVXQp'@;
put 'KToobm49dXMoIm4iLHBuLFV0PUVuPDAmJk1pPjE/LUVuOkVuKSxVdDwwJiZjclswXSYmInQiPT1jclswXS50JiYobm49bm4uc3Vic3RyKDEpLGNyWzBdLnY9Ii0iK2NyWzBdLnYpKSxEbj0obm49bm4ucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihacil7cmV0dXJuIi4iPT1acj9ScjpSaX0p'@;
put 'KS5sZW5ndGgtMTt2YXIgU249Y3IubGVuZ3RoO2Zvcih4cj0wO3hyPGNyLmxlbmd0aDsrK3hyKWlmKG51bGwhPWNyW3hyXSYmInQiIT1jclt4cl0udCYmY3JbeHJdLnYuaW5kZXhPZigiLiIpPi0xKXtTbj14cjticmVha312YXIgVW49Y3IubGVuZ3RoO2lmKFNuPT09Y3IubGVuZ3RoJiYtMT09'@;
put 'PW5uLmluZGV4T2YoIkUiKSl7Zm9yKHhyPWNyLmxlbmd0aC0xO3hyPj0wOy0teHIpbnVsbD09Y3JbeHJdfHwtMT09PSJuPyIuaW5kZXhPZihjclt4cl0udCl8fChEbj49Y3JbeHJdLnYubGVuZ3RoLTE/Y3JbeHJdLnY9bm4uc3Vic3RyKDErKERuLT1jclt4cl0udi5sZW5ndGgpLGNyW3hyXS52'@;
put 'Lmxlbmd0aCk6RG48MD9jclt4cl0udj0iIjooY3JbeHJdLnY9bm4uc3Vic3RyKDAsRG4rMSksRG49LTEpLGNyW3hyXS50PSJ0IixVbj14cik7RG4+PTAmJlVuPGNyLmxlbmd0aCYmKGNyW1VuXS52PW5uLnN1YnN0cigwLERuKzEpK2NyW1VuXS52KX1lbHNlIGlmKFNuIT09Y3IubGVuZ3RoJiYt'@;
put 'MT09PW5uLmluZGV4T2YoIkUiKSl7Zm9yKERuPW5uLmluZGV4T2YoUnIpLTEseHI9U247eHI+PTA7LS14cilpZihudWxsIT1jclt4cl0mJi0xIT09Im4/Ii5pbmRleE9mKGNyW3hyXS50KSl7Zm9yKGdhPWNyW3hyXS52LmluZGV4T2YoIi4iKT4tMSYmeHI9PT1Tbj9jclt4cl0udi5pbmRleE9m'@;
put 'KCIuIiktMTpjclt4cl0udi5sZW5ndGgtMSxfbj1jclt4cl0udi5zdWJzdHIoZ2ErMSk7Z2E+PTA7LS1nYSlEbj49MCYmKCIwIj09PWNyW3hyXS52LmNoYXJBdChnYSl8fCIjIj09PWNyW3hyXS52LmNoYXJBdChnYSkpJiYoX249bm4uY2hhckF0KERuLS0pK19uKTtjclt4cl0udj1fbixjclt4'@;
put 'cl0udD0idCIsVW49eHJ9Zm9yKERuPj0wJiZVbjxjci5sZW5ndGgmJihjcltVbl0udj1ubi5zdWJzdHIoMCxEbisxKStjcltVbl0udiksRG49bm4uaW5kZXhPZihScikrMSx4cj1Tbjt4cjxjci5sZW5ndGg7Kyt4cilpZihudWxsIT1jclt4cl0mJigtMSE9PSJuPygiLmluZGV4T2YoY3JbeHJd'@;
put 'LnQpfHx4cj09PVNuKSl7Zm9yKGdhPWNyW3hyXS52LmluZGV4T2YoUnIpPi0xJiZ4cj09PVNuP2NyW3hyXS52LmluZGV4T2YoUnIpKzE6MCxfbj1jclt4cl0udi5zdWJzdHIoMCxnYSk7Z2E8Y3JbeHJdLnYubGVuZ3RoOysrZ2EpRG48bm4ubGVuZ3RoJiYoX24rPW5uLmNoYXJBdChEbisrKSk7'@;
put 'Y3JbeHJdLnY9X24sY3JbeHJdLnQ9InQiLFVuPXhyfX19Zm9yKHhyPTA7eHI8Y3IubGVuZ3RoOysreHIpbnVsbCE9Y3JbeHJdJiYibj8iLmluZGV4T2YoY3JbeHJdLnQpPi0xJiYoY3JbeHJdLnY9dXMoY3JbeHJdLnQsY3JbeHJdLnYsVXQ9TWk+MSYmRW48MCYmeHI+MCYmIi0iPT09Y3JbeHIt'@;
put 'MV0udj8tRW46RW4pLnJlcGxhY2UoL1wuL2csUnIpLnJlcGxhY2UoLywvLFJpKSxjclt4cl0udD0idCIpO3ZhciBfcj0iIjtmb3IoeHI9MDt4ciE9PWNyLmxlbmd0aDsrK3hyKW51bGwhPWNyW3hyXSYmKF9yKz1jclt4cl0udik7cmV0dXJuIF9yfU8uaXNfZGF0ZT1JbyxPLl9ldmFsPUZuO3Zh'@;
put 'ciBocj0vXFtbPTw+XS8sSmw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIFVsKGxuLEVuKXtpZihudWxsPT1FbilyZXR1cm4hMTt2YXIgWm49cGFyc2VGbG9hdChFblsyXSk7c3dpdGNoKEVuWzFdKXtjYXNlIj0iOmlmKGxuPT1abilyZXR1cm4hMDti'@;
put 'cmVhaztjYXNlIj4iOmlmKGxuPlpuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYobG48Wm4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYobG4hPVpuKXJldHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKGxuPj1abilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihsbjw9Wm4pcmV0dXJuITB9'@;
put 'cmV0dXJuITF9ZnVuY3Rpb24gZ3UobG4sRW4sWm4pe251bGw9PVpuJiYoWm49e30pO3ZhciBNaT0iIjtzd2l0Y2godHlwZW9mIGxuKXtjYXNlInN0cmluZyI6TWk9Im0vZC95eSI9PWxuJiZabi5kYXRlTkY/Wm4uZGF0ZU5GOmxuO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oTWk9MTQ9PWxu'@;
put 'JiZabi5kYXRlTkY/Wm4uZGF0ZU5GOihudWxsIT1abi50YWJsZT9abi50YWJsZTpidClbbG5dKSYmKE1pPVpuLnRhYmxlJiZabi50YWJsZVtCdFtsbl1dfHxidFtCdFtsbl1dKSxudWxsPT1NaSYmKE1pPU90W2xuXXx8IkdlbmVyYWwiKX1pZihZZShNaSwwKSlyZXR1cm4gd2EoRW4sWm4pO0Vu'@;
put 'IGluc3RhbmNlb2YgRGF0ZSYmKEVuPWVyKEVuLFpuLmRhdGUxOTA0KSk7dmFyIGNyPWZ1bmN0aW9uIFpsKGxuLEVuKXt2YXIgWm49cWEobG4pLE1pPVpuLmxlbmd0aCxjcj1abltNaS0xXS5pbmRleE9mKCJAIik7aWYoTWk8NCYmY3I+LTEmJi0tTWksWm4ubGVuZ3RoPjQpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK1puLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgRW4pcmV0dXJuWzQsND09PVpuLmxlbmd0aHx8Y3I+LTE/Wm5bWm4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKFpuLmxlbmd0aCl7Y2FzZSAxOlpuPWNyPi0xP1si'@;
put 'R2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixablswXV06W1puWzBdLFpuWzBdLFpuWzBdLCJAIl07YnJlYWs7Y2FzZSAyOlpuPWNyPi0xP1tablswXSxablswXSxablswXSxablsxXV06W1puWzBdLFpuWzFdLFpuWzBdLCJAIl07YnJlYWs7Y2FzZSAzOlpuPWNyPi0xP1tablswXSxablsx'@;
put 'XSxablswXSxablsyXV06W1puWzBdLFpuWzFdLFpuWzJdLCJAIl19dmFyIExpPUVuPjA/Wm5bMF06RW48MD9ablsxXTpablsyXTtpZigtMT09PVpuWzBdLmluZGV4T2YoIlsiKSYmLTE9PT1ablsxXS5pbmRleE9mKCJbIikpcmV0dXJuW01pLExpXTtpZihudWxsIT1ablswXS5tYXRjaChocil8'@;
put 'fG51bGwhPVpuWzFdLm1hdGNoKGhyKSl7dmFyIHhyPVpuWzBdLm1hdGNoKEpsKSxPaT1ablsxXS5tYXRjaChKbCk7cmV0dXJuIFVsKEVuLHhyKT9bTWksWm5bMF1dOlVsKEVuLE9pKT9bTWksWm5bMV1dOltNaSxabltudWxsIT14ciYmbnVsbCE9T2k/MjoxXV19cmV0dXJuW01pLExpXX0oTWks'@;
put 'RW4pO2lmKFllKGNyWzFdKSlyZXR1cm4gd2EoRW4sWm4pO2lmKCEwPT09RW4pRW49IlRSVUUiO2Vsc2UgaWYoITE9PT1FbilFbj0iRkFMU0UiO2Vsc2UgaWYoIiI9PT1Fbnx8bnVsbD09RW4pcmV0dXJuIiI7cmV0dXJuIEZuKGNyWzFdLEVuLFpuLGNyWzBdKX1mdW5jdGlvbiBDbChsbixFbil7'@;
put 'aWYoIm51bWJlciIhPXR5cGVvZiBFbil7RW49K0VufHwtMTtmb3IodmFyIFpuPTA7Wm48MzkyOysrWm4paWYobnVsbCE9YnRbWm5dKXtpZihidFtabl09PWxuKXtFbj1abjticmVha319ZWxzZSBFbjwwJiYoRW49Wm4pO0VuPDAmJihFbj0zOTEpfXJldHVybiBidFtFbl09bG4sRW59Ty5sb2Fk'@;
put 'PUNsLE8uX3RhYmxlPWJ0LE8uZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSxPLmxvYWRfdGFibGU9ZnVuY3Rpb24oRW4pe2Zvcih2YXIgWm49MDszOTIhPVpuOysrWm4pdm9pZCAwIT09RW5bWm5dJiZDbChFbltabl0sWm4pfSxPLmluaXRfdGFibGU9aXQsTy5mb3JtYXQ9Z3UsTy5n'@;
put 'ZXRsb2NhbGU9ZnVuY3Rpb24ganIoKXtyZXR1cm4gam58fCJlbi1VUyJ9LE8uc2V0bG9jYWxlPWZ1bmN0aW9uIHdyKGxuKXtpZihmdW5jdGlvbiB6cihsbil7dmFyIEVuPTA7c3dpdGNoKChqbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNhc2UiemgtY24iOmNhc2UiamEtanAi'@;
put 'OmNhc2Uia28ta3IiOmZvcihFbj0yNztFbjw9MzY7KytFbilkZWxldGUgbG5bRW5dO2ZvcihFbj01MDtFbjw9NTg7KytFbilkZWxldGUgbG5bRW5dO2JyZWFrO2Nhc2UidGgtdGgiOmZvcihFbj01OTtFbjw9NjI7KytFbilkZWxldGUgbG5bRW5dO2ZvcihFbj02NztFbjw9ODE7KytFbilkZWxl'@;
put 'dGUgbG5bRW5dfX0oYnQpLGpuPWxuLEhuKGJ0KSx0eXBlb2YgSW50bDwidSIpe3ZhciBFbj1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuKTtpZihFbi5mb3JtYXRUb1BhcnRzKXtmb3IodmFyIFpuPUVuLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUsMCwwLDApKSxNaT0wO01pPDc7KytN'@;
put 'aSljdFtNaV1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7d2Vla2RheToibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K01pLDAsMCwwKSlbMF0udmFsdWUsY3RbTWldWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se3dlZWtkYXk6InNob3J0In0pLmZvcm1hdFRv'@;
put 'UGFydHMobmV3IERhdGUoMjAyMCwwLDUrTWksMCwwLDApKVswXS52YWx1ZTtmb3IodmFyIGNyPTA7Y3I8MTI7KytjcilUdFtjcl1bMl09SW50bC5EYXRlVGltZUZvcm1hdChsbix7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLGNyLDIsMCwwLDApKVswXS52YWx1'@;
put 'ZSxUdFtjcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7bW9udGg6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxjciwyLDAsMCwwKSlbMF0udmFsdWUsVHRbY3JdWzBdPVR0W2NyXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgTGk9IiIseHI9MDt4cjxabi5sZW5ndGg7'@;
put 'Kyt4cil7dmFyIE9pPVpuW3hyXS52YWx1ZTtzd2l0Y2goWm5beHJdLnR5cGUpe2Nhc2UieWVhciI6TGkrPTI9PU9pLmxlbmd0aD8ieXkiOiJ5eXl5IjticmVhaztjYXNlIm1vbnRoIjpMaSs9IjEiPT1PaT8ibSI6IjAxIj09T2k/Im1tIjpPaT09VHRbMF1bMV0/Im1tbSI6T2k9PVR0WzBdWzJd'@;
put 'PyJtbW1tIjpPaT09VHRbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5IjpMaSs9IjUiPT1PaT8iZCI6IjA1Ij09T2k/ImRkIjpPaT09Y3RbMF1bMF0/ImRkZCI6T2k9PWN0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6TGkrPU9pLnJlcGxhY2UoLy4vZywi'@;
put 'XFwkJiIpLDE9PU9pLmxlbmd0aCYmKEJuPU9pKX19KGxuLm1hdGNoKC9lbi9pKSYmbG4ubWF0Y2goL3VzL2kpfHwhbG4pJiYoTGk9Im0vZC95eSIpLGJ0WzE0XT1MaX1lbHNlImphLWpwIj09bG4udG9Mb3dlckNhc2UoKSYmKGJ0WzE0XT0ieXl5eVxcL21cXC9kIik7dmFyIFlhPUludGwuTnVt'@;
put 'YmVyRm9ybWF0KGxuLHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7WWEmJihSaT0oWWEubWF0Y2goLzEoLiopMi8pfHxbXSlbMV0sUnI9KFlhLm1hdGNoKC83KC4qKTgvKXx8W10pWzFdKX1wcltsbi50b0xvd2VyQ2FzZSgpXXx8KHByW2xuLnRvTG93ZXJDYXNlKCldPXsiLiI6UnIsIiwiOlJpfSks'@;
put 'cnI9ZXQoYnI9cHJbbG4udG9Mb3dlckNhc2UoKV18fHByWyJlbi11cyJdKX0sTy5ub3JtYWxpemU9ZnVuY3Rpb24gWXMobG4pe2Zvcih2YXIgRW49MCxabj0wLE1pPSIiLGNyPSIiLExpPSIiLHhyPWJyLnl8fCJ5IixPaT14ci50b1VwcGVyQ2FzZSgpLFlhPWJyLmR8fCJkIixGaT1ZYS50b1Vw'@;
put 'cGVyQ2FzZSgpLGdhPWJyWyIuIl0sa2k9YnJbIiwiXSxvbz0iMCM/RSstJSIrYnJbIiwiXStnYTtFbjxsbi5sZW5ndGg7KXN3aXRjaChNaT1sbi5jaGFyQXQoRW4pKXtjYXNlIkciOkVuKyssTGkrPU1pO2JyZWFrO2Nhc2UnIic6Zm9yKExpKz1NaTszNCE9PShabj1sbi5jaGFyQ29kZUF0KCsr'@;
put 'RW4pKSYmRW48bG4ubGVuZ3RoOylMaSs9U3RyaW5nLmZyb21DaGFyQ29kZShabik7TGkrPSciJywrK0VuO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6TGkrPWxuLnNsaWNlKEVuLEVuKzIpLEVuKz0yO2JyZWFrO2Nhc2UiQCI6TGkrPU1pLCsrRW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOisrRW4s'@;
put 'TGkrPU1pO2JyZWFrO2Nhc2UgeHI6Y2FzZSBPaTpjYXNlIFlhOmNhc2UgRmk6TGkrPXJyW01pLnRvTG93ZXJDYXNlKCldLCsrRW47YnJlYWs7Y2FzZSJNIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJBIjpjYXNl'@;
put 'ImEiOkxpKz1NaSwrK0VuO2JyZWFrO2Nhc2UiWyI6Zm9yKGNyPU1pOyJdIiE9PWxuLmNoYXJBdChFbisrKSYmRW48bG4ubGVuZ3RoOyljcis9bG4uY2hhckF0KEVuKTtMaSs9Y3I7YnJlYWs7Y2FzZSBraTpMaSs9JyInK01pKyciJywrK0VuO2JyZWFrO2Nhc2UgZ2E6aWYoIShFbjxsbi5sZW5n'@;
put 'dGgmJihvby5pbmRleE9mKE1pPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PU1pJiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGxuLmNoYXJBdChFbisyKSk+LTEpKSl7TGkrPSciJytnYSsnIic7YnJlYWt9TWk9Z2EsLS1FbjtjYXNlIjAiOmNhc2UiIyI6Zm9yKExpKz1y'@;
put 'cltNaS50b0xvd2VyQ2FzZSgpXXx8TWk7RW48bG4ubGVuZ3RoJiYob28uaW5kZXhPZihNaT1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT1NaSYmIi0iPT1sbi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKTspTGkrPXJyW01pLnRvTG93ZXJDYXNlKCld'@;
put 'fHxNaTticmVhaztjYXNlIj8iOmZvcihMaSs9TWk7bG4uY2hhckF0KCsrRW4pPT09TWk7KUxpKz1NaTticmVhaztjYXNlIioiOkxpKz1NaSwrK0VuLCgiICI9PWxuLmNoYXJBdChFbil8fCIqIj09bG4uY2hhckF0KEVuKSkmJihMaSs9bG4uY2hhckF0KEVuKSwrK0VuKTticmVhaztjYXNlIigi'@;
put 'OmNhc2UiKSI6TGkrPU1pLCsrRW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKExpKz1NaTtFbjxsbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK0VuKSk+LTE7'@;
put 'KUxpKz1sbi5jaGFyQXQoRW4pO2JyZWFrO2RlZmF1bHQ6TGkrPU1pLCsrRW59cmV0dXJuIExpfSxPLmdldGN1cnJlbmN5PWZ1bmN0aW9uIG5hKCl7cmV0dXJuIFBpfHwiVVNEIn0sTy5zZXRjdXJyZW5jeT1mdW5jdGlvbiBsYShsbil7UGk9bG4sU2k9dHlwZW9mIEludGw8InUiP0ludGwuTnVt'@;
put 'YmVyRm9ybWF0KGpuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToic3ltYm9sIixjdXJyZW5jeTpsbn0pLmZvcm1hdCgwKS5yZXBsYWNlKC9bMFwuXCxcc10vZywiIik6IiQifX07YWUoQSk7dmFyIHhlLG5lPXsiR2VuZXJhbCBOdW1iZXIiOiJHZW5lcmFsIiwiR2VuZXJhbCBE'@;
put 'YXRlIjpBLl90YWJsZVsyMl0sIkxvbmcgRGF0ZSI6ImRkZGQsIG1tbW0gZGQsIHl5eXkiLCJNZWRpdW0gRGF0ZSI6QS5fdGFibGVbMTVdLCJTaG9ydCBEYXRlIjpBLl90YWJsZVsxNF0sIkxvbmcgVGltZSI6QS5fdGFibGVbMTldLCJNZWRpdW0gVGltZSI6QS5fdGFibGVbMThdLCJTaG9ydCBU'@;
put 'aW1lIjpBLl90YWJsZVsyMF0sQ3VycmVuY3k6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsRml4ZWQ6QS5fdGFibGVbMl0sU3RhbmRhcmQ6QS5fdGFibGVbNF0sUGVyY2VudDpBLl90YWJsZVsxMF0sU2NpZW50aWZpYzpBLl90YWJsZVsxMV0sIlllcy9ObyI6JyJZZXMi'@;
put 'OyJZZXMiOyJObyI7QCcsIlRydWUvRmFsc2UiOiciVHJ1ZSI7IlRydWUiOyJGYWxzZSI7QCcsIk9uL09mZiI6JyJZZXMiOyJZZXMiOyJObyI7QCd9LGxlPXs1OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6JyIkIiMsIyMw'@;
put 'LjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDg6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsMjM6IkdlbmVyYWwiLDI0OiJHZW5lcmFsIiwyNToiR2VuZXJhbCIsMjY6IkdlbmVyYWwiLDI3OiJtL2QveXkiLDI4OiJtL2QveXkiLDI5OiJtL2QveXkiLDMwOiJtL2QveXki'@;
put 'LDMxOiJtL2QveXkiLDMyOiJoOm1tOnNzIiwzMzoiaDptbTpzcyIsMzQ6Img6bW06c3MiLDM1OiJoOm1tOnNzIiwzNjoibS9kL3l5Iiw0MTonXygqICMsIyMwXyk7XygqICgjLCMjMCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqICgjLCMjMCk7XygiJCIqICIt'@;
put 'Il8pO18oQF8pJyw0MzonXygqICMsIyMwLjAwXyk7XygqICgjLCMjMC4wMCk7XygqICItIj8/Xyk7XyhAXyknLDQ0OidfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogKCMsIyMwLjAwKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsNTA6Im0vZC95eSIsNTE6Im0vZC95eSIsNTI6Im0vZC95eSIsNTM6'@;
put 'Im0vZC95eSIsNTQ6Im0vZC95eSIsNTU6Im0vZC95eSIsNTY6Im0vZC95eSIsNTc6Im0vZC95eSIsNTg6Im0vZC95eSIsNTk6IjAiLDYwOiIwLjAwIiw2MToiIywjIzAiLDYyOiIjLCMjMC4wMCIsNjM6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwo'@;
put 'IiQiIywjIzBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw2NjonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw2NzoiMCUiLDY4OiIwLjAwJSIsNjk6IiMgPy8/Iiw3MDoiIyA/Py8/PyIsNzE6Im0vZC95eSIsNzI6Im0vZC95eSIsNzM6ImQt'@;
put 'bW1tLXl5Iiw3NDoiZC1tbW0iLDc1OiJtbW0teXkiLDc2OiJoOm1tIiw3NzoiaDptbTpzcyIsNzg6Im0vZC95eSBoOm1tIiw3OToibW06c3MiLDgwOiJbaF06bW06c3MiLDgxOiJtbXNzLjAifSx3ZT0vW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xbU3NdKy9nOyFmdW5jdGlvbihTKXtTLnZl'@;
put 'cnNpb249IjEuMi4wIjt2YXIgaz1mdW5jdGlvbiBPKCl7Zm9yKHZhciBwZT0wLGJlPW5ldyBBcnJheSgyNTYpLFBlPTA7MjU2IT1QZTsrK1BlKWJlW1BlXT1wZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT1QZSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+'@;
put 'Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2'@;
put 'Njc0OTEyXnBlPj4+MTpwZT4+PjE7cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheShiZSk6YmV9KCk7Uy50YWJsZT1rLFMuYnN0cj1mdW5jdGlvbiBLKHBlLGJlKXtmb3IodmFyIFBlPX5iZSxWZT1wZS5sZW5ndGgtMSxZZT0wO1llPFZlOylQZT0oUGU9UGU+Pj44'@;
put 'XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKyspKV0pPj4+OF5rWzI1NSYoUGVecGUuY2hhckNvZGVBdChZZSsrKSldO3JldHVybiBZZT09PVZlJiYoUGU9UGU+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKSldKSx+UGV9LFMuYnVmPWZ1bmN0aW9uIGVlKHBlLGJlKXtpZihwZS5s'@;
put 'ZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBvZShwZSxiZSl7Zm9yKHZhciBQZT1+YmUsVmU9cGUubGVuZ3RoLTcsWWU9MDtZZTxWZTspUGU9KFBlPShQZT0oUGU9KFBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+'@;
put 'Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO2Zvcig7WWU8VmUr'@;
put 'NzspUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO3JldHVybn5QZX0ocGUsYmUpO2Zvcih2YXIgUGU9fmJlLFZlPXBlLmxlbmd0aC0zLFllPTA7WWU8VmU7KVBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+'@;
put 'Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtmb3IoO1llPFZlKzM7KVBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtyZXR1cm5+UGV9LFMuc3RyPWZ1bmN0aW9uIG1lKHBlLGJlKXtmb3IodmFyIGV0LGN0LFBlPX5iZSxWZT0wLFllPXBlLmxl'@;
put 'bmd0aDtWZTxZZTspKGV0PXBlLmNoYXJDb2RlQXQoVmUrKykpPDEyOD9QZT1QZT4+Pjhea1syNTUmKFBlXmV0KV06ZXQ8MjA0OD9QZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMTkyfGV0Pj42JjMxKSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmZXQpKV06ZXQ+PTU1Mjk2JiZldDw1NzM0ND8o'@;
put 'ZXQ9NjQrKDEwMjMmZXQpLGN0PTEwMjMmcGUuY2hhckNvZGVBdChWZSsrKSxQZT0oUGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXigyNDB8ZXQ+PjgmNykpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj4yJjYzKSldKT4+Pjhea1syNTUmKFBlXigxMjh8Y3Q+PjYmMTV8KDMmZXQpPDw0KSld'@;
put 'KT4+Pjhea1syNTUmKFBlXigxMjh8NjMmY3QpKV0pOlBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMjI0fGV0Pj4xMiYxNSkpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj42JjYzKSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmZXQpKV07cmV0dXJuflBlfX0oeGU9e30pO3ZhciBxZSx2'@;
put 'ZT1mdW5jdGlvbigpe3ZhciBiZSxPPXt9O2Z1bmN0aW9uIEsocG4pe2lmKCIvIj09cG4uY2hhckF0KHBuLmxlbmd0aC0xKSlyZXR1cm4tMT09PXBuLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9wbjpLKHBuLnNsaWNlKDAsLTEpKTt2YXIgRG49cG4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4t'@;
put 'MT09PURuP3BuOnBuLnNsaWNlKDAsRG4rMSl9ZnVuY3Rpb24gZWUocG4pe2lmKCIvIj09cG4uY2hhckF0KHBuLmxlbmd0aC0xKSlyZXR1cm4gZWUocG4uc2xpY2UoMCwtMSkpO3ZhciBEbj1wbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09RG4/cG46cG4uc2xpY2UoRG4rMSl9ZnVuY3Rp'@;
put 'b24gb2UocG4sRG4peyJzdHJpbmciPT10eXBlb2YgRG4mJihEbj1uZXcgRGF0ZShEbikpO3ZhciBfbj1Ebi5nZXRIb3VycygpO19uPShfbj1fbjw8NnxEbi5nZXRNaW51dGVzKCkpPDw1fERuLmdldFNlY29uZHMoKT4+PjEscG4ud3JpdGVfc2hpZnQoMixfbik7dmFyIFV0PURuLmdldEZ1bGxZ'@;
put 'ZWFyKCktMTk4MDtVdD0oVXQ9VXQ8PDR8RG4uZ2V0TW9udGgoKSsxKTw8NXxEbi5nZXREYXRlKCkscG4ud3JpdGVfc2hpZnQoMixVdCl9ZnVuY3Rpb24gcGUocG4pe2duKHBuLDApO2Zvcih2YXIgRG49e30sX249MDtwbi5sPD1wbi5sZW5ndGgtNDspe3ZhciBVdD1wbi5yZWFkX3NoaWZ0KDIp'@;
put 'LG5uPXBuLnJlYWRfc2hpZnQoMiksU249cG4ubCtubixVbj17fTsyMTU4OT09PVV0JiYoMSYoX249cG4ucmVhZF9zaGlmdCgxKSkmJihVbi5tdGltZT1wbi5yZWFkX3NoaWZ0KDQpKSxubj41JiYoMiZfbiYmKFVuLmF0aW1lPXBuLnJlYWRfc2hpZnQoNCkpLDQmX24mJihVbi5jdGltZT1wbi5y'@;
put 'ZWFkX3NoaWZ0KDQpKSksVW4ubXRpbWUmJihVbi5tdD1uZXcgRGF0ZSgxZTMqVW4ubXRpbWUpKSkscG4ubD1TbixEbltVdF09VW59cmV0dXJuIERufWZ1bmN0aW9uIFBlKCl7cmV0dXJuIGJlfHwoYmU9Yig4MzMzNykpfWZ1bmN0aW9uIFZlKHBuLERuKXtpZig4MD09cG5bMF0mJjc1PT1wblsx'@;
put 'XSlyZXR1cm4ga2kocG4sRG4pO2lmKHBuLmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9yKCJDRkIgZmlsZSBzaXplICIrcG4ubGVuZ3RoKyIgPCA1MTIiKTt2YXIgX24sbm4sU24sVW4sX3IsWnIsVXQ9NTEyLGlpPVtdLHRpPXBuLnNsaWNlKDAsNTEyKTtnbih0aSwwKTt2YXIgSmk9ZnVuY3Rp'@;
put 'b24gWWUocG4pe2lmKDgwPT1wbltwbi5sXSYmNzU9PXBuW3BuLmwrMV0pcmV0dXJuWzAsMF07cG4uY2hrKFNpLCJIZWFkZXIgU2lnbmF0dXJlOiAiKSxwbi5sKz0xNjt2YXIgRG49cG4ucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJuW3BuLnJlYWRfc2hpZnQoMiwidSIpLERuXX0odGkpO3N3aXRj'@;
put 'aChfbj1KaVswXSl7Y2FzZSAzOlV0PTUxMjticmVhaztjYXNlIDQ6VXQ9NDA5NjticmVhaztjYXNlIDA6aWYoMD09SmlbMV0pcmV0dXJuIGtpKHBuLERuKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyAiK19uKX01MTIhPT1VdCYm'@;
put 'Z24odGk9cG4uc2xpY2UoMCxVdCksMjgpO3ZhciBVaT1wbi5zbGljZSgwLFV0KTshZnVuY3Rpb24gZXQocG4sRG4pe3ZhciBfbjtzd2l0Y2gocG4ubCs9Mixfbj1wbi5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9RG4pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVk'@;
put 'IDkgc2F3ICIrX24pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9RG4pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNhdyAiK19uKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK19uKX1wbi5j'@;
put 'aGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIikscG4uY2hrKCIwMDAwMDAwMDAwMDAiLCJSZXNlcnZlZDogIil9KHRpLF9uKTt2YXIgbnM9dGkucmVhZF9zaGlmdCg0LCJpIik7aWYoMz09PV9uJiYwIT09bnMpdGhyb3cgbmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBl'@;
put 'Y3RlZCAwIHNhdyAiK25zKTt0aS5sKz00LFVuPXRpLnJlYWRfc2hpZnQoNCwiaSIpLHRpLmwrPTQsdGkuY2hrKCIwMDEwMDAwMCIsIk1pbmkgU3RyZWFtIEN1dG9mZiBTaXplOiAiKSxfcj10aS5yZWFkX3NoaWZ0KDQsImkiKSxubj10aS5yZWFkX3NoaWZ0KDQsImkiKSxacj10aS5yZWFkX3No'@;
put 'aWZ0KDQsImkiKSxTbj10aS5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIFVhPS0xLHlhPTA7eWE8MTA5JiYhKChVYT10aS5yZWFkX3NoaWZ0KDQsImkiKSk8MCk7Kyt5YSlpaVt5YV09VWE7dmFyIEFzPWZ1bmN0aW9uIGN0KHBuLERuKXtmb3IodmFyIF9uPU1hdGguY2VpbChwbi5sZW5ndGgv'@;
put 'RG4pLTEsVXQ9W10sbm49MTtubjxfbjsrK25uKVV0W25uLTFdPXBuLnNsaWNlKG5uKkRuLChubisxKSpEbik7cmV0dXJuIFV0W19uLTFdPXBuLnNsaWNlKF9uKkRuKSxVdH0ocG4sVXQpO2J0KFpyLFNuLEFzLFV0LGlpKTt2YXIgTW89ZnVuY3Rpb24gRHQocG4sRG4sX24sVXQpe3ZhciBubj1w'@;
put 'bi5sZW5ndGgsU249W10sVW49W10sX3I9W10sWnI9W10saWk9VXQtMSx0aT0wLEppPTAsVWk9MCxucz0wO2Zvcih0aT0wO3RpPG5uOysrdGkpaWYoX3I9W10sKFVpPXRpK0RuKT49bm4mJihVaS09bm4pLCFVbltVaV0pe1pyPVtdO3ZhciBVYT1bXTtmb3IoSmk9VWk7Smk+PTA7KXtVYVtKaV09'@;
put 'ITAsVW5bSmldPSEwLF9yW19yLmxlbmd0aF09SmksWnIucHVzaChwbltKaV0pO3ZhciB5YT1fbltNYXRoLmZsb29yKDQqSmkvVXQpXTtpZihVdDw0Kyhucz00KkppJmlpKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK0ppKyIgNCAiK1V0KTtpZighcG5beWFdfHxV'@;
put 'YVtKaT1Obyhwblt5YV0sbnMpXSlicmVha31TbltVaV09e25vZGVzOl9yLGRhdGE6bTAoW1pyXSl9fXJldHVybiBTbn0oQXMsVW4saWksVXQpO01vW1VuXS5uYW1lPSIhRGlyZWN0b3J5Iixubj4wJiZfciE9PXJyJiYoTW9bX3JdLm5hbWU9IiFNaW5pRkFUIiksTW9baWlbMF1dLm5hbWU9IiFG'@;
put 'QVQiLE1vLmZhdF9hZGRycz1paSxNby5zc3o9VXQ7dmFyIG8wPVtdLHIxPVtdLEI4PVtdOyhmdW5jdGlvbiBPdChwbixEbixfbixVdCxubixTbixVbixfcil7Zm9yKHZhciBucyxacj0wLGlpPVV0Lmxlbmd0aD8yOjAsdGk9RG5bcG5dLmRhdGEsSmk9MCxVaT0wO0ppPHRpLmxlbmd0aDtKaSs9'@;
put 'MTI4KXt2YXIgVWE9dGkuc2xpY2UoSmksSmkrMTI4KTtnbihVYSw2NCksVWk9VWEucmVhZF9zaGlmdCgyKSxucz1JbChVYSwwLFVpLWlpKSxVdC5wdXNoKG5zKTt2YXIgeWE9e25hbWU6bnMsdHlwZTpVYS5yZWFkX3NoaWZ0KDEpLGNvbG9yOlVhLnJlYWRfc2hpZnQoMSksTDpVYS5yZWFkX3No'@;
put 'aWZ0KDQsImkiKSxSOlVhLnJlYWRfc2hpZnQoNCwiaSIpLEM6VWEucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6VWEucmVhZF9zaGlmdCgxNiksc3RhdGU6VWEucmVhZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT1VYS5yZWFkX3NoaWZ0KDIpK1VhLnJlYWRfc2hpZnQoMikrVWEu'@;
put 'cmVhZF9zaGlmdCgyKStVYS5yZWFkX3NoaWZ0KDIpJiYoeWEuY3Q9S3QoVWEsVWEubC04KSksMCE9PVVhLnJlYWRfc2hpZnQoMikrVWEucmVhZF9zaGlmdCgyKStVYS5yZWFkX3NoaWZ0KDIpK1VhLnJlYWRfc2hpZnQoMikmJih5YS5tdD1LdChVYSxVYS5sLTgpKSx5YS5zdGFydD1VYS5yZWFk'@;
put 'X3NoaWZ0KDQsImkiKSx5YS5zaXplPVVhLnJlYWRfc2hpZnQoNCwiaSIpLHlhLnNpemU8MCYmeWEuc3RhcnQ8MCYmKHlhLnNpemU9eWEudHlwZT0wLHlhLnN0YXJ0PXJyLHlhLm5hbWU9IiIpLDU9PT15YS50eXBlPyhacj15YS5zdGFydCxubj4wJiZaciE9PXJyJiYoRG5bWnJdLm5hbWU9IiFT'@;
put 'dHJlYW1EYXRhIikpOnlhLnNpemU+PTQwOTY/KHlhLnN0b3JhZ2U9ImZhdCIsdm9pZCAwPT09RG5beWEuc3RhcnRdJiYoRG5beWEuc3RhcnRdPUJ0KF9uLHlhLnN0YXJ0LERuLmZhdF9hZGRycyxEbi5zc3opKSxEblt5YS5zdGFydF0ubmFtZT15YS5uYW1lLHlhLmNvbnRlbnQ9RG5beWEuc3Rh'@;
put 'cnRdLmRhdGEuc2xpY2UoMCx5YS5zaXplKSk6KHlhLnN0b3JhZ2U9Im1pbmlmYXQiLHlhLnNpemU8MD95YS5zaXplPTA6WnIhPT1yciYmeWEuc3RhcnQhPT1yciYmRG5bWnJdJiYoeWEuY29udGVudD1pdCh5YSxEbltacl0uZGF0YSwoRG5bX3JdfHx7fSkuZGF0YSkpKSx5YS5jb250ZW50JiZn'@;
put 'bih5YS5jb250ZW50LDApLFNuW25zXT15YSxVbi5wdXNoKHlhKX19KShVbixNbyxBcyxvMCxubix7fSxyMSxfciksZnVuY3Rpb24gVHQocG4sRG4sX24pe2Zvcih2YXIgVXQ9MCxubj0wLFNuPTAsVW49MCxfcj0wLFpyPV9uLmxlbmd0aCxpaT1bXSx0aT1bXTtVdDxacjsrK1V0KWlpW1V0XT10'@;
put 'aVtVdF09VXQsRG5bVXRdPV9uW1V0XTtmb3IoO19yPHRpLmxlbmd0aDsrK19yKW5uPXBuW1V0PXRpW19yXV0uTCxTbj1wbltVdF0uUixVbj1wbltVdF0uQyxpaVtVdF09PT1VdCYmKC0xIT09bm4mJmlpW25uXSE9PW5uJiYoaWlbVXRdPWlpW25uXSksLTEhPT1TbiYmaWlbU25dIT09U24mJihp'@;
put 'aVtVdF09aWlbU25dKSksLTEhPT1VbiYmKGlpW1VuXT1VdCksLTEhPT1ubiYmVXQhPWlpW1V0XSYmKGlpW25uXT1paVtVdF0sdGkubGFzdEluZGV4T2Yobm4pPF9yJiZ0aS5wdXNoKG5uKSksLTEhPT1TbiYmVXQhPWlpW1V0XSYmKGlpW1NuXT1paVtVdF0sdGkubGFzdEluZGV4T2YoU24pPF9y'@;
put 'JiZ0aS5wdXNoKFNuKSk7Zm9yKFV0PTE7VXQ8WnI7KytVdClpaVtVdF09PT1VdCYmKC0xIT09U24mJmlpW1NuXSE9PVNuP2lpW1V0XT1paVtTbl06LTEhPT1ubiYmaWlbbm5dIT09bm4mJihpaVtVdF09aWlbbm5dKSk7Zm9yKFV0PTE7VXQ8WnI7KytVdClpZigwIT09cG5bVXRdLnR5cGUpe2lm'@;
put 'KChfcj1VdCkhPWlpW19yXSlkb3tEbltVdF09RG5bX3I9aWlbX3JdXSsiLyIrRG5bVXRdfXdoaWxlKDAhPT1fciYmLTEhPT1paVtfcl0mJl9yIT1paVtfcl0pO2lpW1V0XT0tMX1mb3IoRG5bMF0rPSIvIixVdD0xO1V0PFpyOysrVXQpMiE9PXBuW1V0XS50eXBlJiYoRG5bVXRdKz0iLyIpfShy'@;
put 'MSxCOCxvMCksbzAuc2hpZnQoKTt2YXIgJDU9e0ZpbGVJbmRleDpyMSxGdWxsUGF0aHM6Qjh9O3JldHVybiBEbiYmRG4ucmF3JiYoJDUucmF3PXtoZWFkZXI6VWksc2VjdG9yczpBc30pLCQ1fWZ1bmN0aW9uIGl0KHBuLERuLF9uKXtmb3IodmFyIG5uPXBuLnNpemUsU249W10sVW49cG4uc3Rh'@;
put 'cnQ7X24mJm5uPjAmJlVuPj0wOylTbi5wdXNoKERuLnNsaWNlKFVuKmJyLFVuKmJyK2JyKSksbm4tPWJyLFVuPU5vKF9uLDQqVW4pO3JldHVybiAwPT09U24ubGVuZ3RoP3ZuKDApOlUoU24pLnNsaWNlKDAscG4uc2l6ZSl9ZnVuY3Rpb24gYnQocG4sRG4sX24sVXQsbm4pe3ZhciBTbj1ycjtp'@;
put 'Zihwbj09PXJyKXtpZigwIT09RG4pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQiKX1lbHNlIGlmKC0xIT09cG4pe3ZhciBVbj1fbltwbl0sX3I9KFV0Pj4+MiktMTtpZighVW4pcmV0dXJuO2Zvcih2YXIgWnI9MDtacjxfciYmKFNuPU5vKFVuLDQq'@;
put 'WnIpKSE9PXJyOysrWnIpbm4ucHVzaChTbik7YnQoTm8oVW4sVXQtNCksRG4tMSxfbixVdCxubil9fWZ1bmN0aW9uIEJ0KHBuLERuLF9uLFV0LG5uKXt2YXIgU249W10sVW49W107bm58fChubj1bXSk7dmFyIF9yPVV0LTEsWnI9MCxpaT0wO2Zvcihacj1Ebjtacj49MDspe25uW1pyXT0hMCxT'@;
put 'bltTbi5sZW5ndGhdPVpyLFVuLnB1c2gocG5bWnJdKTt2YXIgdGk9X25bTWF0aC5mbG9vcig0KlpyL1V0KV07aWYoVXQ8NCsoaWk9NCpaciZfcikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitacisiIDQgIitVdCk7aWYoIXBuW3RpXSlicmVhaztacj1Obyhwblt0'@;
put 'aV0saWkpfXJldHVybntub2RlczpTbixkYXRhOm0wKFtVbl0pfX1mdW5jdGlvbiBLdChwbixEbil7cmV0dXJuIG5ldyBEYXRlKDFlMyooenMocG4sRG4rNCkvMWU3Kk1hdGgucG93KDIsMzIpK3pzKHBuLERuKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiBDbihwbixEbil7dmFyIF9uPURu'@;
put 'fHx7fSxVdD1fbi5yb290fHwiUm9vdCBFbnRyeSI7aWYocG4uRnVsbFBhdGhzfHwocG4uRnVsbFBhdGhzPVtdKSxwbi5GaWxlSW5kZXh8fChwbi5GaWxlSW5kZXg9W10pLHBuLkZ1bGxQYXRocy5sZW5ndGghPT1wbi5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0'@;
put 'ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09cG4uRnVsbFBhdGhzLmxlbmd0aCYmKHBuLkZ1bGxQYXRoc1swXT1VdCsiLyIscG4uRmlsZUluZGV4WzBdPXtuYW1lOlV0LHR5cGU6NX0pLF9uLkNMU0lEJiYocG4uRmlsZUluZGV4WzBdLmNsc2lkPV9uLkNMU0lEKSxmdW5jdGlvbiB1cihwbil7dmFy'@;
put 'IERuPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQocG4sIi8iK0RuKSl7dmFyIF9uPXZuKDQpO19uWzBdPTU1LF9uWzFdPV9uWzNdPTUwLF9uWzJdPTU0LHBuLkZpbGVJbmRleC5wdXNoKHtuYW1lOkRuLHR5cGU6Mixjb250ZW50Ol9uLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLHBuLkZ1bGxQ'@;
put 'YXRocy5wdXNoKHBuLkZ1bGxQYXRoc1swXStEbiksZXIocG4pfX0ocG4pfWZ1bmN0aW9uIGVyKHBuLERuKXtDbihwbik7Zm9yKHZhciBfbj0hMSxVdD0hMSxubj1wbi5GdWxsUGF0aHMubGVuZ3RoLTE7bm4+PTA7LS1ubil7dmFyIFNuPXBuLkZpbGVJbmRleFtubl07c3dpdGNoKFNuLnR5cGUp'@;
put 'e2Nhc2UgMDpVdD9fbj0hMDoocG4uRmlsZUluZGV4LnBvcCgpLHBuLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6VXQ9ITAsaXNOYU4oU24uUipTbi5MKlNuLkMpJiYoX249ITApLFNuLlI+LTEmJlNuLkw+LTEmJlNuLlI9PVNuLkwmJihfbj0hMCk7YnJlYWs7'@;
put 'ZGVmYXVsdDpfbj0hMH19aWYoX258fERuKXt2YXIgVW49bmV3IERhdGUoMTk4NywxLDE5KSxfcj0wLFpyPVtdO2Zvcihubj0wO25uPHBuLkZ1bGxQYXRocy5sZW5ndGg7KytubikwIT09cG4uRmlsZUluZGV4W25uXS50eXBlJiZaci5wdXNoKFtwbi5GdWxsUGF0aHNbbm5dLHBuLkZpbGVJbmRl'@;
put 'eFtubl1dKTtmb3Iobm49MDtubjxaci5sZW5ndGg7Kytubil7dmFyIGlpPUsoWnJbbm5dWzBdKTtmb3IoVXQ9ITEsX3I9MDtfcjxaci5sZW5ndGg7Kytfcilacltfcl1bMF09PT1paSYmKFV0PSEwKTtVdHx8WnIucHVzaChbaWkse25hbWU6ZWUoaWkpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEs'@;
put 'Y2xzaWQ6bmEsY3Q6VW4sbXQ6VW4sY29udGVudDpudWxsfV0pfWZvcihaci5zb3J0KGZ1bmN0aW9uKFVpLG5zKXtyZXR1cm4gZnVuY3Rpb24gayhwbixEbil7Zm9yKHZhciBfbj1wbi5zcGxpdCgiLyIpLFV0PURuLnNwbGl0KCIvIiksbm49MCxTbj0wLFVuPU1hdGgubWluKF9uLmxlbmd0aCxV'@;
put 'dC5sZW5ndGgpO25uPFVuOysrbm4pe2lmKFNuPV9uW25uXS5sZW5ndGgtVXRbbm5dLmxlbmd0aClyZXR1cm4gU247aWYoX25bbm5dIT1VdFtubl0pcmV0dXJuIF9uW25uXTxVdFtubl0/LTE6MX1yZXR1cm4gX24ubGVuZ3RoLVV0Lmxlbmd0aH0oVWlbMF0sbnNbMF0pfSkscG4uRnVsbFBhdGhz'@;
put 'PVtdLHBuLkZpbGVJbmRleD1bXSxubj0wO25uPFpyLmxlbmd0aDsrK25uKXBuLkZ1bGxQYXRoc1tubl09WnJbbm5dWzBdLHBuLkZpbGVJbmRleFtubl09WnJbbm5dWzFdO2Zvcihubj0wO25uPFpyLmxlbmd0aDsrK25uKXt2YXIgdGk9cG4uRmlsZUluZGV4W25uXSxKaT1wbi5GdWxsUGF0aHNb'@;
put 'bm5dO2lmKHRpLm5hbWU9ZWUoSmkpLnJlcGxhY2UoIi8iLCIiKSx0aS5MPXRpLlI9dGkuQz0tKHRpLmNvbG9yPTEpLHRpLnNpemU9dGkuY29udGVudD90aS5jb250ZW50Lmxlbmd0aDowLHRpLnN0YXJ0PTAsdGkuY2xzaWQ9dGkuY2xzaWR8fG5hLDA9PT1ubil0aS5DPVpyLmxlbmd0aD4xPzE6'@;
put 'LTEsdGkuc2l6ZT0wLHRpLnR5cGU9NTtlbHNlIGlmKCIvIj09Smkuc2xpY2UoLTEpKXtmb3IoX3I9bm4rMTtfcjxaci5sZW5ndGgmJksocG4uRnVsbFBhdGhzW19yXSkhPUppOysrX3IpO2Zvcih0aS5DPV9yPj1aci5sZW5ndGg/LTE6X3IsX3I9bm4rMTtfcjxaci5sZW5ndGgmJksocG4uRnVs'@;
put 'bFBhdGhzW19yXSkhPUsoSmkpOysrX3IpO3RpLlI9X3I+PVpyLmxlbmd0aD8tMTpfcix0aS50eXBlPTF9ZWxzZSBLKHBuLkZ1bGxQYXRoc1tubisxXXx8IiIpPT1LKEppKSYmKHRpLlI9bm4rMSksdGkudHlwZT0yfX19ZnVuY3Rpb24gam4ocG4sRG4pe3ZhciBfbj1Ebnx8e307aWYoZXIocG4p'@;
put 'LCJ6aXAiPT1fbi5maWxlVHlwZSlyZXR1cm4gZnVuY3Rpb24gR3MocG4sRG4pe3ZhciBfbj1Ebnx8e30sVXQ9W10sbm49W10sU249dm4oMSksVW49X24uY29tcHJlc3Npb24/ODowLF9yPTAsaWk9MCx0aT0wLEppPTAsVWk9MCxucz1wbi5GdWxsUGF0aHNbMF0sVWE9bnMseWE9cG4uRmlsZUlu'@;
put 'ZGV4WzBdLEFzPVtdLE1vPTA7Zm9yKGlpPTE7aWk8cG4uRnVsbFBhdGhzLmxlbmd0aDsrK2lpKWlmKFVhPXBuLkZ1bGxQYXRoc1tpaV0uc2xpY2UobnMubGVuZ3RoKSwoeWE9cG4uRmlsZUluZGV4W2lpXSkuc2l6ZSYmeWEuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9VWEpe3ZhciBuMT1KaSxv'@;
put 'MD12bihVYS5sZW5ndGgpO2Zvcih0aT0wO3RpPFVhLmxlbmd0aDsrK3RpKW8wLndyaXRlX3NoaWZ0KDEsMTI3JlVhLmNoYXJDb2RlQXQodGkpKTtvMD1vMC5zbGljZSgwLG8wLmwpLEFzW1VpXT14ZS5idWYoeWEuY29udGVudCwwKTt2YXIgcjE9eWEuY29udGVudDs4PT1VbiYmKHIxPXpyKHIx'@;
put 'KSksKFNuPXZuKDMwKSkud3JpdGVfc2hpZnQoNCw2NzMyNDc1MiksU24ud3JpdGVfc2hpZnQoMiwyMCksU24ud3JpdGVfc2hpZnQoMixfciksU24ud3JpdGVfc2hpZnQoMixVbikseWEubXQ/b2UoU24seWEubXQpOlNuLndyaXRlX3NoaWZ0KDQsMCksU24ud3JpdGVfc2hpZnQoLTQsOCZfcj8w'@;
put 'OkFzW1VpXSksU24ud3JpdGVfc2hpZnQoNCw4Jl9yPzA6cjEubGVuZ3RoKSxTbi53cml0ZV9zaGlmdCg0LDgmX3I/MDp5YS5jb250ZW50Lmxlbmd0aCksU24ud3JpdGVfc2hpZnQoMixvMC5sZW5ndGgpLFNuLndyaXRlX3NoaWZ0KDIsMCksSmkrPVNuLmxlbmd0aCxVdC5wdXNoKFNuKSxKaSs9'@;
put 'bzAubGVuZ3RoLFV0LnB1c2gobzApLEppKz1yMS5sZW5ndGgsVXQucHVzaChyMSksOCZfciYmKChTbj12bigxMikpLndyaXRlX3NoaWZ0KC00LEFzW1VpXSksU24ud3JpdGVfc2hpZnQoNCxyMS5sZW5ndGgpLFNuLndyaXRlX3NoaWZ0KDQseWEuY29udGVudC5sZW5ndGgpLEppKz1Tbi5sLFV0'@;
put 'LnB1c2goU24pKSwoU249dm4oNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxTbi53cml0ZV9zaGlmdCgyLDApLFNuLndyaXRlX3NoaWZ0KDIsMjApLFNuLndyaXRlX3NoaWZ0KDIsX3IpLFNuLndyaXRlX3NoaWZ0KDIsVW4pLFNuLndyaXRlX3NoaWZ0KDQsMCksU24ud3JpdGVfc2hpZnQo'@;
put 'LTQsQXNbVWldKSxTbi53cml0ZV9zaGlmdCg0LHIxLmxlbmd0aCksU24ud3JpdGVfc2hpZnQoNCx5YS5jb250ZW50Lmxlbmd0aCksU24ud3JpdGVfc2hpZnQoMixvMC5sZW5ndGgpLFNuLndyaXRlX3NoaWZ0KDIsMCksU24ud3JpdGVfc2hpZnQoMiwwKSxTbi53cml0ZV9zaGlmdCgyLDApLFNu'@;
put 'LndyaXRlX3NoaWZ0KDIsMCksU24ud3JpdGVfc2hpZnQoNCwwKSxTbi53cml0ZV9zaGlmdCg0LG4xKSxNbys9U24ubCxubi5wdXNoKFNuKSxNbys9bzAubGVuZ3RoLG5uLnB1c2gobzApLCsrVWl9cmV0dXJuKFNuPXZuKDIyKSkud3JpdGVfc2hpZnQoNCwxMDEwMTAyNTYpLFNuLndyaXRlX3No'@;
put 'aWZ0KDIsMCksU24ud3JpdGVfc2hpZnQoMiwwKSxTbi53cml0ZV9zaGlmdCgyLFVpKSxTbi53cml0ZV9zaGlmdCgyLFVpKSxTbi53cml0ZV9zaGlmdCg0LE1vKSxTbi53cml0ZV9zaGlmdCg0LEppKSxTbi53cml0ZV9zaGlmdCgyLDApLFUoW1UoVXQpLFUobm4pLFNuXSl9KHBuLF9uKTt2YXIg'@;
put 'VXQ9ZnVuY3Rpb24obnMpe2Zvcih2YXIgVWE9MCx5YT0wLEFzPTA7QXM8bnMuRmlsZUluZGV4Lmxlbmd0aDsrK0FzKXt2YXIgTW89bnMuRmlsZUluZGV4W0FzXTtpZihNby5jb250ZW50KXt2YXIgbjE9TW8uY29udGVudC5sZW5ndGg7bjE+MCYmKG4xPDQwOTY/VWErPW4xKzYzPj42OnlhKz1u'@;
put 'MSs1MTE+PjkpfX1mb3IodmFyIG8wPW5zLkZ1bGxQYXRocy5sZW5ndGgrMz4+MixCOD1VYSsxMjc+PjcsJDU9KFVhKzc+PjMpK3lhK28wK0I4LEs1PSQ1KzEyNz4+NyxNZT1LNTw9MTA5PzA6TWF0aC5jZWlsKChLNS0xMDkpLzEyNyk7JDUrSzUrTWUrMTI3Pj43Pks1OylNZT0rK0s1PD0xMDk/'@;
put 'MDpNYXRoLmNlaWwoKEs1LTEwOSkvMTI3KTt2YXIgZmg9WzEsTWUsSzUsQjgsbzAseWEsVWEsMF07cmV0dXJuIG5zLkZpbGVJbmRleFswXS5zaXplPVVhPDw2LGZoWzddPShucy5GaWxlSW5kZXhbMF0uc3RhcnQ9ZmhbMF0rZmhbMV0rZmhbMl0rZmhbM10rZmhbNF0rZmhbNV0pKyhmaFs2XSs3'@;
put 'Pj4zKSxmaH0ocG4pLG5uPXZuKFV0WzddPDw5KSxTbj0wLFVuPTA7Zm9yKFNuPTA7U248ODsrK1NuKW5uLndyaXRlX3NoaWZ0KDEsUGlbU25dKTtmb3IoU249MDtTbjw4OysrU24pbm4ud3JpdGVfc2hpZnQoMiwwKTtmb3Iobm4ud3JpdGVfc2hpZnQoMiw2Miksbm4ud3JpdGVfc2hpZnQoMiwz'@;
put 'KSxubi53cml0ZV9zaGlmdCgyLDY1NTM0KSxubi53cml0ZV9zaGlmdCgyLDkpLG5uLndyaXRlX3NoaWZ0KDIsNiksU249MDtTbjwzOysrU24pbm4ud3JpdGVfc2hpZnQoMiwwKTtmb3Iobm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LFV0WzJdKSxubi53cml0ZV9zaGlmdCg0'@;
put 'LFV0WzBdK1V0WzFdK1V0WzJdK1V0WzNdLTEpLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCw0MDk2KSxubi53cml0ZV9zaGlmdCg0LFV0WzNdP1V0WzBdK1V0WzFdK1V0WzJdLTE6cnIpLG5uLndyaXRlX3NoaWZ0KDQsVXRbM10pLG5uLndyaXRlX3NoaWZ0KC00LFV0WzFd'@;
put 'P1V0WzBdLTE6cnIpLG5uLndyaXRlX3NoaWZ0KDQsVXRbMV0pLFNuPTA7U248MTA5OysrU24pbm4ud3JpdGVfc2hpZnQoLTQsU248VXRbMl0/VXRbMV0rU246LTEpO2lmKFV0WzFdKWZvcihVbj0wO1VuPFV0WzFdOysrVW4pe2Zvcig7U248MjM2KzEyNypVbjsrK1NuKW5uLndyaXRlX3NoaWZ0'@;
put 'KC00LFNuPFV0WzJdP1V0WzFdK1NuOi0xKTtubi53cml0ZV9zaGlmdCgtNCxVbj09PVV0WzFdLTE/cnI6VW4rMSl9dmFyIF9yPWZ1bmN0aW9uKG5zKXtmb3IoVW4rPW5zO1NuPFVuLTE7KytTbilubi53cml0ZV9zaGlmdCgtNCxTbisxKTtucyYmKCsrU24sbm4ud3JpdGVfc2hpZnQoLTQscnIp'@;
put 'KX07Zm9yKFVuPVNuPTAsVW4rPVV0WzFdO1NuPFVuOysrU24pbm4ud3JpdGVfc2hpZnQoLTQsbGEuRElGU0VDVCk7Zm9yKFVuKz1VdFsyXTtTbjxVbjsrK1NuKW5uLndyaXRlX3NoaWZ0KC00LGxhLkZBVFNFQ1QpO19yKFV0WzNdKSxfcihVdFs0XSk7Zm9yKHZhciBacj0wLGlpPTAsdGk9cG4u'@;
put 'RmlsZUluZGV4WzBdO1pyPHBuLkZpbGVJbmRleC5sZW5ndGg7KytacikodGk9cG4uRmlsZUluZGV4W1pyXSkuY29udGVudCYmISgoaWk9dGkuY29udGVudC5sZW5ndGgpPDQwOTYpJiYodGkuc3RhcnQ9VW4sX3IoaWkrNTExPj45KSk7Zm9yKF9yKFV0WzZdKzc+PjMpOzUxMSZubi5sOylubi53'@;
put 'cml0ZV9zaGlmdCgtNCxsYS5FTkRPRkNIQUlOKTtmb3IoVW49U249MCxacj0wO1pyPHBuLkZpbGVJbmRleC5sZW5ndGg7KytacikodGk9cG4uRmlsZUluZGV4W1pyXSkuY29udGVudCYmKGlpPXRpLmNvbnRlbnQubGVuZ3RoKSYmIShpaT49NDA5NikmJih0aS5zdGFydD1VbixfcihpaSs2Mz4+'@;
put 'NikpO2Zvcig7NTExJm5uLmw7KW5uLndyaXRlX3NoaWZ0KC00LGxhLkVORE9GQ0hBSU4pO2ZvcihTbj0wO1NuPFV0WzRdPDwyOysrU24pe3ZhciBKaT1wbi5GdWxsUGF0aHNbU25dO2lmKEppJiYwIT09SmkubGVuZ3RoKXt0aT1wbi5GaWxlSW5kZXhbU25dLDA9PT1TbiYmKHRpLnN0YXJ0PXRp'@;
put 'LnNpemU/dGkuc3RhcnQtMTpycik7dmFyIFVpPTA9PT1TbiYmX24ucm9vdHx8dGkubmFtZTtpZihpaT0yKihVaS5sZW5ndGgrMSksbm4ud3JpdGVfc2hpZnQoNjQsVWksInV0ZjE2bGUiKSxubi53cml0ZV9zaGlmdCgyLGlpKSxubi53cml0ZV9zaGlmdCgxLHRpLnR5cGUpLG5uLndyaXRlX3No'@;
put 'aWZ0KDEsdGkuY29sb3IpLG5uLndyaXRlX3NoaWZ0KC00LHRpLkwpLG5uLndyaXRlX3NoaWZ0KC00LHRpLlIpLG5uLndyaXRlX3NoaWZ0KC00LHRpLkMpLHRpLmNsc2lkKW5uLndyaXRlX3NoaWZ0KDE2LHRpLmNsc2lkLCJoZXgiKTtlbHNlIGZvcihacj0wO1pyPDQ7Kytacilubi53cml0ZV9z'@;
put 'aGlmdCg0LDApO25uLndyaXRlX3NoaWZ0KDQsdGkuc3RhdGV8fDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCx0aS5zdGFydCksbm4ud3JpdGVfc2hpZnQoNCx0'@;
put 'aS5zaXplKSxubi53cml0ZV9zaGlmdCg0LDApfWVsc2V7Zm9yKFpyPTA7WnI8MTc7Kytacilubi53cml0ZV9zaGlmdCg0LDApO2Zvcihacj0wO1pyPDM7Kytacilubi53cml0ZV9zaGlmdCg0LC0xKTtmb3IoWnI9MDtacjwxMjsrK1pyKW5uLndyaXRlX3NoaWZ0KDQsMCl9fWZvcihTbj0xO1Nu'@;
put 'PHBuLkZpbGVJbmRleC5sZW5ndGg7KytTbilpZigodGk9cG4uRmlsZUluZGV4W1NuXSkuc2l6ZT49NDA5Nil7Zm9yKG5uLmw9dGkuc3RhcnQrMTw8OSxacj0wO1pyPHRpLnNpemU7Kytacilubi53cml0ZV9zaGlmdCgxLHRpLmNvbnRlbnRbWnJdKTtmb3IoOzUxMSZacjsrK1pyKW5uLndyaXRl'@;
put 'X3NoaWZ0KDEsMCl9Zm9yKFNuPTE7U248cG4uRmlsZUluZGV4Lmxlbmd0aDsrK1NuKWlmKCh0aT1wbi5GaWxlSW5kZXhbU25dKS5zaXplPjAmJnRpLnNpemU8NDA5Nil7Zm9yKFpyPTA7WnI8dGkuc2l6ZTsrK1pyKW5uLndyaXRlX3NoaWZ0KDEsdGkuY29udGVudFtacl0pO2Zvcig7NjMmWnI7'@;
put 'Kytacilubi53cml0ZV9zaGlmdCgxLDApfWZvcig7bm4ubDxubi5sZW5ndGg7KW5uLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIG5ufU8udmVyc2lvbj0iMS4xLjQiO3ZhciBqcixicj02NCxycj0tMixTaT0iZDBjZjExZTBhMWIxMWFlMSIsUGk9WzIwOCwyMDcsMTcsMjI0LDE2MSwxNzcsMjYs'@;
put 'MjI1XSxuYT0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLGxhPXtNQVhSRUdTRUNUOi02LERJRlNFQ1Q6LTQsRkFUU0VDVDotMyxFTkRPRkNIQUlOOnJyLEZSRUVTRUNUOi0xLEhFQURFUl9TSUdOQVRVUkU6U2ksSEVBREVSX01JTk9SX1ZFUlNJT046IjNlMDAiLE1BWFJFR1NJ'@;
put 'RDotNixOT1NUUkVBTTotMSxIRUFERVJfQ0xTSUQ6bmEsRW50cnlUeXBlczpbInVua25vd24iLCJzdG9yYWdlIiwic3RyZWFtIiwibG9ja2J5dGVzIiwicHJvcGVydHkiLCJyb290Il19O2Z1bmN0aW9uIFJyKHBuKXtmb3IodmFyIERuPW5ldyBBcnJheShwbi5sZW5ndGgpLF9uPTA7X248cG4u'@;
put 'bGVuZ3RoOysrX24pRG5bX25dPVN0cmluZy5mcm9tQ2hhckNvZGUocG5bX25dKTtyZXR1cm4gRG4uam9pbigiIil9ZnVuY3Rpb24genIocG4pe3JldHVybiBqcj9qci5kZWZsYXRlUmF3U3luYyhwbik6WmwocG4pfWZvcih2YXIgcG4sRG4sV2k9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDEx'@;
put 'LDQsMTIsMywxMywyLDE0LDEsMTVdLENpPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSx3YT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1Nywz'@;
put 'ODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxpYT10eXBlb2YgVWludDhBcnJheTwidSIsT3M9aWE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxQYT0wO1BhPDI1NjsrK1BhKU9zW1BhXT0odm9pZCAwLDI1NSYoKERuPTEzOTUz'@;
put 'NiYoKHBuPVBhKTw8MXxwbjw8MTEpfDU1ODE0NCYocG48PDV8cG48PDE1KSk+PjE2fERuPj44fERuKSk7ZnVuY3Rpb24gdXMocG4sRG4pe3ZhciBfbj1Pc1syNTUmcG5dO3JldHVybiBEbjw9OD9fbj4+PjgtRG46KF9uPV9uPDw4fE9zW3BuPj44JjI1NV0sRG48PTE2P19uPj4+MTYtRG46KF9u'@;
put 'PV9uPDw4fE9zW3BuPj4xNiYyNTVdKT4+PjI0LURuKX1mdW5jdGlvbiBxYShwbixEbil7dmFyIF9uPTcmRG4sVXQ9RG4+Pj4zO3JldHVybihwbltVdF18KF9uPD02PzA6cG5bVXQrMV08PDgpKT4+Pl9uJjN9ZnVuY3Rpb24gVmkocG4sRG4pe3ZhciBfbj03JkRuLFV0PURuPj4+MztyZXR1cm4o'@;
put 'cG5bVXRdfChfbjw9NT8wOnBuW1V0KzFdPDw4KSk+Pj5fbiY3fWZ1bmN0aW9uIEZuKHBuLERuKXt2YXIgX249NyZEbixVdD1Ebj4+PjM7cmV0dXJuKHBuW1V0XXwoX248PTM/MDpwbltVdCsxXTw8OCkpPj4+X24mMzF9ZnVuY3Rpb24gWXMocG4sRG4pe3ZhciBfbj03JkRuLFV0PURuPj4+Mzty'@;
put 'ZXR1cm4ocG5bVXRdfChfbjw9MT8wOnBuW1V0KzFdPDw4KSk+Pj5fbiYxMjd9ZnVuY3Rpb24gaHIocG4sRG4sX24pe3ZhciBVdD03JkRuLG5uPURuPj4+MyxVbj1wbltubl0+Pj5VdDtyZXR1cm4gX248OC1VdHx8KFVufD1wbltubisxXTw8OC1VdCxfbjwxNi1VdCl8fChVbnw9cG5bbm4rMl08'@;
put 'PDE2LVV0LF9uPDI0LVV0KXx8KFVufD1wbltubiszXTw8MjQtVXQpLFVuJigxPDxfbiktMX1mdW5jdGlvbiBKbChwbixEbil7dmFyIF9uPXBuLmxlbmd0aCxVdD0yKl9uPkRuPzIqX246RG4rNSxubj0wO2lmKF9uPj1EbilyZXR1cm4gcG47aWYoVGUpe3ZhciBTbj1nKFV0KTtpZihwbi5jb3B5'@;
put 'KXBuLmNvcHkoU24pO2Vsc2UgZm9yKDtubjxwbi5sZW5ndGg7KytubilTbltubl09cG5bbm5dO3JldHVybiBTbn1pZihpYSl7dmFyIFVuPW5ldyBVaW50OEFycmF5KFV0KTtpZihVbi5zZXQpVW4uc2V0KHBuKTtlbHNlIGZvcig7bm48cG4ubGVuZ3RoOysrbm4pVW5bbm5dPXBuW25uXTtyZXR1'@;
put 'cm4gVW59cmV0dXJuIHBuLmxlbmd0aD1VdCxwbn1mdW5jdGlvbiBVbChwbil7Zm9yKHZhciBEbj1uZXcgQXJyYXkocG4pLF9uPTA7X248cG47KytfbilEbltfbl09MDtyZXR1cm4gRG59dmFyIFpsPWZ1bmN0aW9uKCl7dmFyIHBuPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKF9uLFV0KXtm'@;
put 'b3IodmFyIG5uPTA7bm48X24ubGVuZ3RoOyl7dmFyIFNuPU1hdGgubWluKDY1NTM1LF9uLmxlbmd0aC1ubik7Zm9yKFV0LndyaXRlX3NoaWZ0KDEsKyhubitTbj09X24ubGVuZ3RoKSksVXQud3JpdGVfc2hpZnQoMixTbiksVXQud3JpdGVfc2hpZnQoMiw2NTUzNSZ+U24pO1NuLS0gPjA7KVV0'@;
put 'W1V0LmwrK109X25bbm4rK119cmV0dXJuIFV0Lmx9fSgpO3JldHVybiBmdW5jdGlvbihEbil7dmFyIF9uPXZuKDUwK01hdGguZmxvb3IoMS4xKkRuLmxlbmd0aCkpLFV0PXBuKERuLF9uKTtyZXR1cm4gX24uc2xpY2UoMCxVdCl9fSgpO2Z1bmN0aW9uIGd1KHBuLERuLF9uKXt2YXIgVXQ9MSxu'@;
put 'bj0wLFNuPTAsVW49MCxfcj0wLFpyPXBuLmxlbmd0aCxpaT1pYT9uZXcgVWludDE2QXJyYXkoMzIpOlVsKDMyKTtmb3IoU249MDtTbjwzMjsrK1NuKWlpW1NuXT0wO2ZvcihTbj1acjtTbjxfbjsrK1NuKXBuW1NuXT0wO1pyPXBuLmxlbmd0aDt2YXIgdGk9aWE/bmV3IFVpbnQxNkFycmF5KFpy'@;
put 'KTpVbChacik7Zm9yKFNuPTA7U248WnI7KytTbilpaVtubj1wbltTbl1dKyssVXQ8bm4mJihVdD1ubiksdGlbU25dPTA7Zm9yKGlpWzBdPTAsU249MTtTbjw9VXQ7KytTbilpaVtTbisxNl09X3I9X3IraWlbU24tMV08PDE7Zm9yKFNuPTA7U248WnI7KytTbikwIT0oX3I9cG5bU25dKSYmKHRp'@;
put 'W1NuXT1paVtfcisxNl0rKyk7dmFyIEppPTA7Zm9yKFNuPTA7U248WnI7KytTbilpZigwIT0oSmk9cG5bU25dKSlmb3IoX3I9dXModGlbU25dLFV0KT4+VXQtSmksVW49KDE8PFV0KzQtSmkpLTE7VW4+PTA7LS1VbilEbltfcnxVbjw8SmldPTE1JkppfFNuPDw0O3JldHVybiBVdH12YXIgQ2w9'@;
put 'aWE/bmV3IFVpbnQxNkFycmF5KDUxMik6VWwoNTEyKSxsbj1pYT9uZXcgVWludDE2QXJyYXkoMzIpOlVsKDMyKTtpZighaWEpe2Zvcih2YXIgRW49MDtFbjw1MTI7KytFbilDbFtFbl09MDtmb3IoRW49MDtFbjwzMjsrK0VuKWxuW0VuXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgcG49W10sRG49'@;
put 'MDtEbjwzMjtEbisrKXBuLnB1c2goNSk7Z3UocG4sbG4sMzIpO3ZhciBfbj1bXTtmb3IoRG49MDtEbjw9MTQzO0RuKyspX24ucHVzaCg4KTtmb3IoO0RuPD0yNTU7RG4rKylfbi5wdXNoKDkpO2Zvcig7RG48PTI3OTtEbisrKV9uLnB1c2goNyk7Zm9yKDtEbjw9Mjg3O0RuKyspX24ucHVzaCg4'@;
put 'KTtndShfbixDbCwyODgpfSgpO3ZhciBabj1pYT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOlVsKDMyNzY4KSxNaT1pYT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOlVsKDMyNzY4KSxjcj1pYT9uZXcgVWludDE2QXJyYXkoMTI4KTpVbCgxMjgpLExpPTEseHI9MTtmdW5jdGlvbiBPaShwbixEbil7'@;
put 'dmFyIF9uPUZuKHBuLERuKSsyNTcsVXQ9Rm4ocG4sRG4rPTUpKzEsbm49ZnVuY3Rpb24gSW8ocG4sRG4pe3ZhciBfbj03JkRuLFV0PURuPj4+MztyZXR1cm4ocG5bVXRdfChfbjw9ND8wOnBuW1V0KzFdPDw4KSk+Pj5fbiYxNX0ocG4sRG4rPTUpKzQ7RG4rPTQ7Zm9yKHZhciBTbj0wLFVuPWlh'@;
put 'P25ldyBVaW50OEFycmF5KDE5KTpVbCgxOSksX3I9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFpyPTEsaWk9aWE/bmV3IFVpbnQ4QXJyYXkoOCk6VWwoOCksdGk9aWE/bmV3IFVpbnQ4QXJyYXkoOCk6VWwoOCksSmk9VW4ubGVuZ3RoLFVpPTA7VWk8bm47KytVaSlV'@;
put 'bltXaVtVaV1dPVNuPVZpKHBuLERuKSxacjxTbiYmKFpyPVNuKSxpaVtTbl0rKyxEbis9Mzt2YXIgbnM9MDtmb3IoaWlbMF09MCxVaT0xO1VpPD1acjsrK1VpKXRpW1VpXT1ucz1ucytpaVtVaS0xXTw8MTtmb3IoVWk9MDtVaTxKaTsrK1VpKTAhPShucz1VbltVaV0pJiYoX3JbVWldPXRpW25z'@;
put 'XSsrKTt2YXIgVWE9MDtmb3IoVWk9MDtVaTxKaTsrK1VpKWlmKDAhPShVYT1VbltVaV0pKXtucz1Pc1tfcltVaV1dPj44LVVhO2Zvcih2YXIgeWE9KDE8PDctVWEpLTE7eWE+PTA7LS15YSljcltuc3x5YTw8VWFdPTcmVWF8VWk8PDN9dmFyIEFzPVtdO2Zvcihacj0xO0FzLmxlbmd0aDxfbitV'@;
put 'dDspc3dpdGNoKG5zPWNyW1lzKHBuLERuKV0sRG4rPTcmbnMsbnM+Pj49Myl7Y2FzZSAxNjpmb3IoU249MytxYShwbixEbiksRG4rPTIsbnM9QXNbQXMubGVuZ3RoLTFdO1NuLS0gPjA7KUFzLnB1c2gobnMpO2JyZWFrO2Nhc2UgMTc6Zm9yKFNuPTMrVmkocG4sRG4pLERuKz0zO1NuLS0gPjA7'@;
put 'KUFzLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoU249MTErWXMocG4sRG4pLERuKz03O1NuLS0gPjA7KUFzLnB1c2goMCk7YnJlYWs7ZGVmYXVsdDpBcy5wdXNoKG5zKSxacjxucyYmKFpyPW5zKX12YXIgTW89QXMuc2xpY2UoMCxfbiksbjE9QXMuc2xpY2UoX24pO2ZvcihVaT1fbjtVaTwy'@;
put 'ODY7KytVaSlNb1tVaV09MDtmb3IoVWk9VXQ7VWk8MzA7KytVaSluMVtVaV09MDtyZXR1cm4gTGk9Z3UoTW8sWm4sMjg2KSx4cj1ndShuMSxNaSwzMCksRG59ZnVuY3Rpb24gRmkocG4sRG4pe3ZhciBVdD1mdW5jdGlvbiBZYShwbixEbil7aWYoMz09cG5bMF0mJiEoMyZwblsxXSkpcmV0dXJu'@;
put 'W3ooRG4pLDJdO2Zvcih2YXIgX249MCxVdD0wLG5uPWcoRG58fDE8PDE4KSxTbj0wLFVuPW5uLmxlbmd0aD4+PjAsX3I9MCxacj0wOyEoMSZVdCk7KWlmKFV0PVZpKHBuLF9uKSxfbis9MyxVdD4+PjEpZm9yKFV0Pj4+MT09MT8oX3I9OSxacj01KTooX249T2kocG4sX24pLF9yPUxpLFpyPXhy'@;
put 'KSwhRG4mJlVuPFNuKzMyNzY3JiYoVW49KG5uPUpsKG5uLFNuKzMyNzY3KSkubGVuZ3RoKTs7KXt2YXIgdGk9aHIocG4sX24sX3IpLEppPVV0Pj4+MT09MT9DbFt0aV06Wm5bdGldO2lmKF9uKz0xNSZKaSwoSmk+Pj49NCk+Pj44JjI1NSl7aWYoMjU2PT1KaSlicmVhazt2YXIgVWk9KEppLT0y'@;
put 'NTcpPDg/MDpKaS00Pj4yO1VpPjUmJihVaT0wKTt2YXIgbnM9U24rQ2lbSmldO1VpPjAmJihucys9aHIocG4sX24sVWkpLF9uKz1VaSksdGk9aHIocG4sX24sWnIpLF9uKz0xNSYoSmk9VXQ+Pj4xPT0xP2xuW3RpXTpNaVt0aV0pO3ZhciBVYT0oSmk+Pj49NCk8ND8wOkppLTI+PjEseWE9d2Fb'@;
put 'SmldO2ZvcihVYT4wJiYoeWErPWhyKHBuLF9uLFVhKSxfbis9VWEpLCFEbiYmVW48bnMmJihVbj0obm49Smwobm4sbnMpKS5sZW5ndGgpO1NuPG5zOylubltTbl09bm5bU24teWFdLCsrU259ZWxzZSBubltTbisrXT1KaX1lbHNlezcmX24mJihfbis9OC0oNyZfbikpO3ZhciBpaT1wbltfbj4+'@;
put 'PjNdfHBuWzErKF9uPj4+MyldPDw4O2lmKF9uKz0zMiwhRG4mJlVuPFNuK2lpJiYoVW49KG5uPUpsKG5uLFNuK2lpKSkubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2YgcG4uY29weSlwbi5jb3B5KG5uLFNuLF9uPj4+MywoX24+Pj4zKStpaSksU24rPWlpLF9uKz04KmlpO2Vsc2UgZm9yKDtp'@;
put 'aS0tID4wOylubltTbisrXT1wbltfbj4+PjNdLF9uKz04fXJldHVybltEbj9ubjpubi5zbGljZSgwLFNuKSxfbis3Pj4+M119KHBuLnNsaWNlKHBuLmx8fDApLERuKTtyZXR1cm4gcG4ubCs9VXRbMV0sVXRbMF19ZnVuY3Rpb24gZ2EocG4sRG4pe2lmKCFwbil0aHJvdyBuZXcgRXJyb3IoRG4p'@;
put 'O3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihEbil9ZnVuY3Rpb24ga2kocG4sRG4pe3ZhciBfbj1wbjtnbihfbiwwKTt2YXIgU249e0ZpbGVJbmRleDpbXSxGdWxsUGF0aHM6W119O0NuKFNuLHtyb290OkRuLnJvb3R9KTtmb3IodmFyIFVuPV9uLmxlbmd0aC00Oyg4MCE9X25b'@;
put 'VW5dfHw3NSE9X25bVW4rMV18fDUhPV9uW1VuKzJdfHw2IT1fbltVbiszXSkmJlVuPj0wOyktLVVuO19uLmw9VW4rNCxfbi5sKz00O3ZhciBfcj1fbi5yZWFkX3NoaWZ0KDIpO19uLmwrPTY7dmFyIFpyPV9uLnJlYWRfc2hpZnQoNCk7Zm9yKF9uLmw9WnIsVW49MDtVbjxfcjsrK1VuKXtfbi5s'@;
put 'Kz0yMDt2YXIgaWk9X24ucmVhZF9zaGlmdCg0KSx0aT1fbi5yZWFkX3NoaWZ0KDQpLEppPV9uLnJlYWRfc2hpZnQoMiksVWk9X24ucmVhZF9zaGlmdCgyKSxucz1fbi5yZWFkX3NoaWZ0KDIpO19uLmwrPTg7dmFyIFVhPV9uLnJlYWRfc2hpZnQoNCkseWE9cGUoX24uc2xpY2UoX24ubCtKaSxf'@;
put 'bi5sK0ppK1VpKSk7X24ubCs9SmkrVWkrbnM7dmFyIEFzPV9uLmw7X24ubD1VYSs0LG9vKF9uLGlpLHRpLFNuLHlhKSxfbi5sPUFzfXJldHVybiBTbn1mdW5jdGlvbiBvbyhwbixEbixfbixVdCxubil7cG4ubCs9Mjt2YXIgU249cG4ucmVhZF9zaGlmdCgyKSxVbj1wbi5yZWFkX3NoaWZ0KDIp'@;
put 'LF9yPWZ1bmN0aW9uIG1lKHBuKXt2YXIgRG49NjU1MzUmcG4ucmVhZF9zaGlmdCgyKSxfbj02NTUzNSZwbi5yZWFkX3NoaWZ0KDIpLFV0PW5ldyBEYXRlLG5uPTMxJl9uLFNuPTE1Jihfbj4+Pj01KTtfbj4+Pj00LFV0LnNldE1pbGxpc2Vjb25kcygwKSxVdC5zZXRGdWxsWWVhcihfbisxOTgw'@;
put 'KSxVdC5zZXRNb250aChTbi0xKSxVdC5zZXREYXRlKG5uKTt2YXIgVW49MzEmRG4sX3I9NjMmKERuPj4+PTUpO3JldHVybiBVdC5zZXRIb3VycyhEbj4+Pj02KSxVdC5zZXRNaW51dGVzKF9yKSxVdC5zZXRTZWNvbmRzKFVuPDwxKSxVdH0ocG4pO2lmKDgyNTcmU24pdGhyb3cgbmV3IEVycm9y'@;
put 'KCJVbnN1cHBvcnRlZCBaSVAgZW5jcnlwdGlvbiIpO2Zvcih2YXIgWnI9cG4ucmVhZF9zaGlmdCg0KSxpaT1wbi5yZWFkX3NoaWZ0KDQpLHRpPXBuLnJlYWRfc2hpZnQoNCksSmk9cG4ucmVhZF9zaGlmdCgyKSxVaT1wbi5yZWFkX3NoaWZ0KDIpLG5zPSIiLFVhPTA7VWE8Smk7KytVYSlucys9'@;
put 'U3RyaW5nLmZyb21DaGFyQ29kZShwbltwbi5sKytdKTtpZihVaSl7dmFyIHlhPXBlKHBuLnNsaWNlKHBuLmwscG4ubCtVaSkpOyh5YVsyMTU4OV18fHt9KS5tdCYmKF9yPXlhWzIxNTg5XS5tdCksKChubnx8e30pWzIxNTg5XXx8e30pLm10JiYoX3I9bm5bMjE1ODldLm10KX1wbi5sKz1VaTt2'@;
put 'YXIgQXM9cG4uc2xpY2UocG4ubCxwbi5sK2lpKTtzd2l0Y2goVW4pe2Nhc2UgODpBcz1mdW5jdGlvbiBIbihwbixEbil7aWYoIWpyKXJldHVybiBGaShwbixEbik7dmFyIFV0PW5ldygwLGpyLkluZmxhdGVSYXcpLG5uPVV0Ll9wcm9jZXNzQ2h1bmsocG4uc2xpY2UocG4ubCksVXQuX2Zpbmlz'@;
put 'aEZsdXNoRmxhZyk7cmV0dXJuIHBuLmwrPVV0LmJ5dGVzUmVhZCxubn0ocG4sdGkpO2JyZWFrO2Nhc2UgMDpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIENvbXByZXNzaW9uIG1ldGhvZCAiK1VuKX12YXIgTW89ITE7OCZTbiYmKDEzNDY5NTc2MD09KFpy'@;
put 'PXBuLnJlYWRfc2hpZnQoNCkpJiYoWnI9cG4ucmVhZF9zaGlmdCg0KSxNbz0hMCksaWk9cG4ucmVhZF9zaGlmdCg0KSx0aT1wbi5yZWFkX3NoaWZ0KDQpKSxpaSE9RG4mJmdhKE1vLCJCYWQgY29tcHJlc3NlZCBzaXplOiAiK0RuKyIgIT0gIitpaSksdGkhPV9uJiZnYShNbywiQmFkIHVuY29t'@;
put 'cHJlc3NlZCBzaXplOiAiK19uKyIgIT0gIit0aSk7dmFyIG4xPXhlLmJ1ZihBcywwKTsoMHxacikhPSgwfG4xKSYmZ2EoTW8sIkJhZCBDUkMzMiBjaGVja3N1bTogIitacisiICE9ICIrbjEpLG11KFV0LG5zLEFzLHt1bnNhZmU6ITAsbXQ6X3J9KX1mdW5jdGlvbiBtdShwbixEbixfbixVdCl7'@;
put 'dmFyIG5uPVV0JiZVdC51bnNhZmU7bm58fENuKHBuKTt2YXIgU249IW5uJiZ2ZS5maW5kKHBuLERuKTtpZighU24pe3ZhciBVbj1wbi5GdWxsUGF0aHNbMF07RG4uc2xpY2UoMCxVbi5sZW5ndGgpPT1Vbj9Vbj1EbjooIi8iIT1Vbi5zbGljZSgtMSkmJihVbis9Ii8iKSxVbj0oVW4rRG4pLnJl'@;
put 'cGxhY2UoIi8vIiwiLyIpKSxTbj17bmFtZTplZShEbiksdHlwZToyfSxwbi5GaWxlSW5kZXgucHVzaChTbikscG4uRnVsbFBhdGhzLnB1c2goVW4pLG5ufHx2ZS51dGlscy5jZmJfZ2MocG4pfXJldHVybiBTbi5jb250ZW50PV9uLFNuLnNpemU9X24/X24ubGVuZ3RoOjAsVXQmJihVdC5DTFNJ'@;
put 'RCYmKFNuLmNsc2lkPVV0LkNMU0lEKSxVdC5tdCYmKFNuLm10PVV0Lm10KSxVdC5jdCYmKFNuLmN0PVV0LmN0KSksU259cmV0dXJuIE8uZmluZD1mdW5jdGlvbiBwcihwbixEbil7dmFyIF9uPXBuLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oWnIpe3JldHVybiBaci50b1VwcGVyQ2FzZSgpfSks'@;
put 'VXQ9X24ubWFwKGZ1bmN0aW9uKFpyKXt2YXIgaWk9WnIuc3BsaXQoIi8iKTtyZXR1cm4gaWlbaWkubGVuZ3RoLSgiLyI9PVpyLnNsaWNlKC0xKT8yOjEpXX0pLG5uPSExOzQ3PT09RG4uY2hhckNvZGVBdCgwKT8obm49ITAsRG49X25bMF0uc2xpY2UoMCwtMSkrRG4pOm5uPS0xIT09RG4uaW5k'@;
put 'ZXhPZigiLyIpO3ZhciBTbj1Ebi50b1VwcGVyQ2FzZSgpLFVuPSEwPT09bm4/X24uaW5kZXhPZihTbik6VXQuaW5kZXhPZihTbik7aWYoLTEhPT1VbilyZXR1cm4gcG4uRmlsZUluZGV4W1VuXTt2YXIgX3I9IVNuLm1hdGNoKG0pO2ZvcihTbj1Tbi5yZXBsYWNlKEUsIiIpLF9yJiYoU249U24u'@;
put 'cmVwbGFjZShtLCIhIikpLFVuPTA7VW48X24ubGVuZ3RoOysrVW4paWYoKF9yP19uW1VuXS5yZXBsYWNlKG0sIiEiKTpfbltVbl0pLnJlcGxhY2UoRSwiIik9PVNufHwoX3I/VXRbVW5dLnJlcGxhY2UobSwiISIpOlV0W1VuXSkucmVwbGFjZShFLCIiKT09U24pcmV0dXJuIHBuLkZpbGVJbmRl'@;
put 'eFtVbl07cmV0dXJuIG51bGx9LE8ucmVhZD1mdW5jdGlvbiBzcihwbixEbil7c3dpdGNoKERuJiZEbi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24gVG4ocG4sRG4pe3JldHVybiBQZSgpLFZlKGJlLnJlYWRGaWxlU3luYyhwbiksRG4pfShwbixEbik7Y2FzZSJi'@;
put 'YXNlNjQiOnJldHVybiBWZSh5KF9lLmRlY29kZShwbikpLERuKTtjYXNlImJpbmFyeSI6cmV0dXJuIFZlKHkocG4pLERuKX1yZXR1cm4gVmUocG4sRG4pfSxPLnBhcnNlPVZlLE8ud3JpdGU9ZnVuY3Rpb24gQm4ocG4sRG4pe3ZhciBfbj1qbihwbixEbik7c3dpdGNoKERuJiZEbi50eXBlKXtj'@;
put 'YXNlImZpbGUiOnJldHVybiBQZSgpLGJlLndyaXRlRmlsZVN5bmMoRG4uZmlsZW5hbWUsX24pLF9uO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUnIoX24pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gX2UuZW5jb2RlKFJyKF9uKSl9cmV0dXJuIF9ufSxPLndyaXRlRmlsZT1mdW5jdGlvbiBSaShwbixEbixf'@;
put 'bil7UGUoKTt2YXIgVXQ9am4ocG4sX24pO2JlLndyaXRlRmlsZVN5bmMoRG4sVXQpfSxPLnV0aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIFNsKHBuKXt2YXIgRG49e307cmV0dXJuIENuKERuLHBuKSxEbn0sY2ZiX2FkZDptdSxjZmJfZGVsOmZ1bmN0aW9uIE1sKHBuLERuKXtDbihwbik7dmFyIF9u'@;
put 'PXZlLmZpbmQocG4sRG4pO2lmKF9uKWZvcih2YXIgVXQ9MDtVdDxwbi5GaWxlSW5kZXgubGVuZ3RoOysrVXQpaWYocG4uRmlsZUluZGV4W1V0XT09X24pcmV0dXJuIHBuLkZpbGVJbmRleC5zcGxpY2UoVXQsMSkscG4uRnVsbFBhdGhzLnNwbGljZShVdCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21v'@;
put 'djpmdW5jdGlvbiBqZihwbixEbixfbil7Q24ocG4pO3ZhciBVdD12ZS5maW5kKHBuLERuKTtpZihVdClmb3IodmFyIG5uPTA7bm48cG4uRmlsZUluZGV4Lmxlbmd0aDsrK25uKWlmKHBuLkZpbGVJbmRleFtubl09PVV0KXJldHVybiBwbi5GaWxlSW5kZXhbbm5dLm5hbWU9ZWUoX24pLHBuLkZ1'@;
put 'bGxQYXRoc1tubl09X24sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiBfZChwbil7ZXIocG4sITApfSxSZWFkU2hpZnQ6TmwsQ2hlY2tGaWVsZDp5bixwcmVwX2Jsb2I6Z24sYmNvbmNhdDpVLHVzZV96bGliOmZ1bmN0aW9uIHdyKHBuKXt0cnl7dmFyIF9uPW5ldygwLHBuLkluZmxhdGVS'@;
put 'YXcpO2lmKF9uLl9wcm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLF9uLl9maW5pc2hGbHVzaEZsYWcpLCFfbi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTtqcj1wbn1jYXRjaChVdCl7Y29uc29sZS5lcnJvcigiY2Fu'@;
put 'bm90IHVzZSBuYXRpdmUgemxpYjogIisoVXQubWVzc2FnZXx8VXQpKX19LF9kZWZsYXRlUmF3OlpsLF9pbmZsYXRlUmF3OkZpLGNvbnN0czpsYX0sT30oKTt0cnl7cWU9Yig4MzMzNyl9Y2F0Y2h7fWZ1bmN0aW9uIGplKFMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUz94KFMpOkFycmF5Lmlz'@;
put 'QXJyYXkoUyk/ZnVuY3Rpb24gVChTKXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheShTKX0oUyk6U31mdW5jdGlvbiBBZShTLE8sayl7aWYodHlwZW9mIHFlPCJ1IiYmcWUud3JpdGVGaWxlU3luYyly'@;
put 'ZXR1cm4gaz9xZS53cml0ZUZpbGVTeW5jKFMsTyxrKTpxZS53cml0ZUZpbGVTeW5jKFMsTyk7dmFyIEs9InV0ZjgiPT1rP0hvKE8pOk87aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoSyxTKTtpZih0eXBlb2YgQmxvYjwidSIpe3ZhciBlZT1uZXcgQmxvYihb'@;
put 'amUoSyldLHt0eXBlOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifSk7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXJldHVybiBuYXZpZ2F0b3IubXNTYXZlQmxvYihlZSxTKTtpZih0eXBlb2Ygc2F2ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKGVlLFMpO2lm'@;
put 'KHR5cGVvZiBVUkw8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgb2U9VVJMLmNyZWF0ZU9iamVjdFVSTChlZSk7aWYoIm9iamVjdCI9PXR5cGVvZiBjaHJvbWUmJiJmdW5jdGlvbiI9PXR5cGVvZihjaHJv'@;
put 'bWUuZG93bmxvYWRzfHx7fSkuZG93bmxvYWQpcmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwob2UpfSw2ZTQpLGNocm9tZS5kb3dubG9hZHMuZG93bmxvYWQoe3VybDpvZSxm'@;
put 'aWxlbmFtZTpTLHNhdmVBczohMH0pO3ZhciBtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYobnVsbCE9bWUuZG93bmxvYWQpcmV0dXJuIG1lLmRvd25sb2FkPVMsbWUuaHJlZj1vZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lKSxtZS5jbGljaygpLGRvY3VtZW50LmJvZHku'@;
put 'cmVtb3ZlQ2hpbGQobWUpLFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwob2UpfSw2ZTQpLG9lfX1pZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwi'@;
put 'dSIpdHJ5e3ZhciBwZT1GaWxlKFMpO3JldHVybiBwZS5vcGVuKCJ3IikscGUuZW5jb2Rpbmc9ImJpbmFyeSIsQXJyYXkuaXNBcnJheShPKSYmKE89QyhPKSkscGUud3JpdGUoTykscGUuY2xvc2UoKSxPfWNhdGNoKGJlKXtpZighYmUubWVzc2FnZXx8IWJlLm1lc3NhZ2UubWF0Y2goL29uc3Ry'@;
put 'dWN0LykpdGhyb3cgYmV9dGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2F2ZSBmaWxlICIrUyl9ZnVuY3Rpb24gUmUoUyl7Zm9yKHZhciBPPU9iamVjdC5rZXlzKFMpLGs9W10sSz0wO0s8Ty5sZW5ndGg7KytLKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLE9bS10pJiZr'@;
put 'LnB1c2goT1tLXSk7cmV0dXJuIGt9ZnVuY3Rpb24gSWUoUyxPKXtmb3IodmFyIGs9W10sSz1SZShTKSxlZT0wO2VlIT09Sy5sZW5ndGg7KytlZSludWxsPT1rW1NbS1tlZV1dW09dXSYmKGtbU1tLW2VlXV1bT11dPUtbZWVdKTtyZXR1cm4ga31mdW5jdGlvbiBIZShTKXtmb3IodmFyIE89W10s'@;
put 'az1SZShTKSxLPTA7SyE9PWsubGVuZ3RoOysrSylPW1Nba1tLXV1dPWtbS107cmV0dXJuIE99ZnVuY3Rpb24gRGUoUyl7Zm9yKHZhciBPPVtdLGs9UmUoUyksSz0wO0shPT1rLmxlbmd0aDsrK0spT1tTW2tbS11dXT1wYXJzZUludChrW0tdLDEwKTtyZXR1cm4gT312YXIgSmUsb24sX3Q9bmV3'@;
put 'IERhdGUoMTg5OSwxMSwzMCwwLDAsMCksbnQ9MDtmdW5jdGlvbiB5dCgpe250PV90LmdldFRpbWUoKSs2ZTQqKChuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKSxKZT1mdW5jdGlvbihPLGspe3ZhciBLPU8uZ2V0VGltZSgpO3JldHVybiBrJiYo'@;
put 'Sy09MTI2MzE2OGU1KSwoSy1udCkvODY0ZTV9LG9uPWZ1bmN0aW9uKE8pe3ZhciBrPW5ldyBEYXRlO3JldHVybiBrLnNldFRpbWUoMjQqTyo2MCo2MCoxZTMrbnQpLGt9fWZ1bmN0aW9uIHJ0KFMpe3ZhciBPPTAsaz0wLEs9ITEsZWU9Uy5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00p'@;
put 'PyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighZWUpdGhyb3cgbmV3IEVycm9yKCJ8IitTKyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uIik7Zm9yKHZhciBvZT0xO29lIT1lZS5sZW5ndGg7KytvZSlpZihlZVtvZV0pe3N3aXRjaChr'@;
put 'PTEsb2U+MyYmKEs9ITApLGVlW29lXS5zbGljZShlZVtvZV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK2VlW29lXS5zbGljZShlZVtvZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOmsqPTI0O2Nhc2UiSCI6ayo9NjA7'@;
put 'Y2FzZSJNIjppZighSyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO2sqPTYwfU8rPWsqcGFyc2VJbnQoZWVbb2VdLDEwKX1yZXR1cm4gT315dCgpO3ZhciBLZT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIik7aXNOYU4oS2Uu'@;
put 'Z2V0RnVsbFllYXIoKSkmJihLZT1uZXcgRGF0ZSgiMi8xOS8xNyIpKTt2YXIgdHQ9MjAxNz09S2UuZ2V0RnVsbFllYXIoKTtmdW5jdGlvbiBOZShTLE8pe3ZhciBrPW5ldyBEYXRlKFMpO2lmKHR0KXJldHVybiBPPjA/ay5zZXRUaW1lKGsuZ2V0VGltZSgpKzYwKmsuZ2V0VGltZXpvbmVPZmZz'@;
put 'ZXQoKSoxZTMpOk88MCYmay5zZXRUaW1lKGsuZ2V0VGltZSgpLTYwKmsuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpLGs7aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIFM7aWYoMTkxNz09S2UuZ2V0RnVsbFllYXIoKSYmIWlzTmFOKGsuZ2V0RnVsbFllYXIoKSkpe3ZhciBLPWsuZ2V0RnVs'@;
put 'bFllYXIoKTtyZXR1cm4gUy5pbmRleE9mKCIiK0spPi0xfHxrLnNldEZ1bGxZZWFyKGsuZ2V0RnVsbFllYXIoKSsxMDApLGt9dmFyIGVlPVMubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5IiwiMCIsIjAiLCIwIl0sb2U9bmV3IERhdGUoK2VlWzBdLCtlZVsxXS0xLCtlZVsyXSwrZWVb'@;
put 'M118fDAsK2VlWzRdfHwwLCtlZVs1XXx8MCk7cmV0dXJuIFMuaW5kZXhPZigiWiIpPi0xJiYob2U9bmV3IERhdGUob2UuZ2V0VGltZSgpLTYwKm9lLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksb2V9ZnVuY3Rpb24gdXQoUyl7Zm9yKHZhciBPPSIiLGs9MDtrIT1TLmxlbmd0aDsrK2spTys9'@;
put 'U3RyaW5nLmZyb21DaGFyQ29kZShTW2tdKTtyZXR1cm4gT31mdW5jdGlvbiBKdChTKXtpZigib2JqZWN0IiE9dHlwZW9mIFN8fG51bGw9PVMpcmV0dXJuIFM7aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKFMuZ2V0VGltZSgpKTtpZihBcnJheS5pc0FycmF5KFMpKXJldHVy'@;
put 'biBmdW5jdGlvbiBMdChTKXtmb3IodmFyIE89W10saz0wO2s8Uy5sZW5ndGg7KytrKXt2YXIgSz1TW2tdOyJvYmplY3QiPT10eXBlb2YgSz9PW2tdPUp0KEspOm51bGwhPUsmJihPW2tdPUspfXJldHVybiBPfShTKTt2YXIgTz17fTtmb3IodmFyIGsgaW4gUylPYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5LmNhbGwoUyxrKSYmKE9ba109SnQoU1trXSkpO3JldHVybiBPfWZ1bmN0aW9uIFB0KFMsTyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPfHxudWxsPT1PKXJldHVybiBTO2Zvcih2YXIgayBpbiBPKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPLGspJiYo'@;
put 'U1trXT1KdChPW2tdKSk7cmV0dXJuIFN9ZnVuY3Rpb24gb2koUyxPKXtmb3IodmFyIGs9IiI7ay5sZW5ndGg8Tzspays9UztyZXR1cm4ga31mdW5jdGlvbiBlbihTKXt2YXIgTz1OdW1iZXIoUyk7aWYoIWlzTmFOKE8pKXJldHVybiBpc0Zpbml0ZShPKT9POk5hTjtpZighL1xkLy50ZXN0KFMp'@;
put 'KXJldHVybiBPO3ZhciBrPTEsSz1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBrKj0xMDAsIiJ9KTtyZXR1cm4gaXNOYU4oTz1OdW1iZXIoSykpJiYoSz1LLnJlcGxhY2UoL1soXSgu'@;
put 'KilbKV0vLGZ1bmN0aW9uKGVlLG9lKXtyZXR1cm4gaz0tayxvZX0pLGlzTmFOKE89TnVtYmVyKEspKSk/TzpPL2t9ZnVuY3Rpb24gc24oUyl7dmFyIE89bmV3IERhdGUoUyksaz1uZXcgRGF0ZShOYU4pLEs9Ty5nZXRZZWFyKCksZWU9Ty5nZXRNb250aCgpLG9lPU8uZ2V0RGF0ZSgpO3JldHVy'@;
put 'biBpc05hTihvZSl8fEs8MHx8Sz44MDk5P2s6KGVlPjB8fG9lPjEpJiYxMDEhPUt8fFMudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKT9POlMubWF0Y2goL1teLTAtOTosXC9cXF0vKT9rOk99ZnVuY3Rpb24gSWko'@;
put 'UyxPKXtpZihPJiZPLnJhdylyZXR1cm57dDoicyIsdjpTfTtpZighUylyZXR1cm57dDoieiJ9O2lmKCJUUlVFIj09PVMpcmV0dXJue3Q6ImIiLHY6ITB9O2lmKCJGQUxTRSI9PT1TKXJldHVybnt0OiJiIix2OiExfTt2YXIgaz0iIixLPU51bWJlcihTKTtpZihpc0Zpbml0ZShLKSlyZXR1cm57'@;
put 'dDoibiIsdjpLfTtpZihpc05hTihLKSYmL1xkLy50ZXN0KFMpKXt2YXIgZWU9MSxvZT1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihldCxjdCxUdCl7cmV0dXJuIGt8fChrPSIjLCMjMCIpLGN0K1R0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5j'@;
put 'dGlvbihldCl7a3x8KGs9IjAiKSxrKz0iLiI7Zm9yKHZhciBjdD0yO2N0PD1ldC5sZW5ndGg7KytjdClrKz0iMCI7cmV0dXJuIGV0fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gZWUqPTEwMCxrfHwoaz0iMCIpLGsrPSIlIiwiIn0pO2lmKCFpc05hTihLPU51bWJlcihvZSkp'@;
put 'KXJldHVybnt0OiJuIix2OksvZWUsejprfTtpZihvZT1vZS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihldCxjdCl7cmV0dXJuIGVlPS1lZSxjdH0pLCFpc05hTihLPU51bWJlcihvZSkpKXJldHVybnt0OiJuIix2OksvZWUsejooa3x8IjAiKSsiXyk7KCIrKGt8fCIwIikrIik7QCJ9'@;
put 'fWU6aWYoIU98fCFPLnJhd0RhdGVzKXt2YXIgbWU9TyYmTy5jZWxsRGF0ZXMscGU9bmV3IERhdGUoUyksUGU9cGUuZ2V0WWVhcigpLFZlPXBlLmdldE1vbnRoKCksWWU9cGUuZ2V0RGF0ZSgpO2lmKGlzTmFOKFllKXx8UGU8MHx8UGU+ODA5OSlicmVhayBlO2lmKChWZT4wfHxZZT4xKSYmMTAx'@;
put 'IT1QZSlyZXR1cm57dDptZT8iZCI6Im4iLHY6bWU/cGU6SmUocGUpLHo6Ty5kYXRlTkZ8fEEuX3RhYmxlWzE0XX07aWYoUy50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pKXJldHVybnt0Om1lPyJkIjoibiIsdjpt'@;
put 'ZT9wZTpKZShwZSksejpPLmRhdGVORnx8QS5fdGFibGVbMTRdfTtpZihTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLykpYnJlYWsgZTtyZXR1cm4gcGV9cmV0dXJue3Q6InMiLHY6U319dmFyIGp0LGRuPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO2Z1bmN0aW9uIFp0KFMpe3Jl'@;
put 'dHVybiBudWxsIT1TJiYhU31mdW5jdGlvbiBrdChTKXtyZXR1cm4gUy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStTLnNsaWNlKDEpfWZ1bmN0aW9uIExuKFMpe3JldHVybiBTP1MuZGF0YT9xKFMuZGF0YSk6Uy5hc05vZGVCdWZmZXImJlRlP3EoUy5hc05vZGVCdWZmZXIoKS50b1N0cmluZygi'@;
put 'YmluYXJ5IikpOlMuYXNCaW5hcnk/cShTLmFzQmluYXJ5KCkpOlMuX2RhdGEmJlMuX2RhdGEuZ2V0Q29udGVudD9xKHV0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFMuX2RhdGEuZ2V0Q29udGVudCgpLDApKSk6Uy5jb250ZW50JiZTLnR5cGU/cSh1dChTLmNvbnRlbnQpKTpudWxsOm51'@;
put 'bGx9ZnVuY3Rpb24gb3QoUyl7aWYoIVMpcmV0dXJuIG51bGw7aWYoUy5kYXRhKXJldHVybiBaKFMuZGF0YSk7aWYoUy5hc05vZGVCdWZmZXImJlRlKXJldHVybiBTLmFzTm9kZUJ1ZmZlcigpO2lmKFMuX2RhdGEmJlMuX2RhdGEuZ2V0Q29udGVudCl7dmFyIE89Uy5fZGF0YS5nZXRDb250ZW50'@;
put 'KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBPP1ooTyk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoTyl9cmV0dXJuIFMuY29udGVudCYmUy50eXBlP1MuY29udGVudDpudWxsfWZ1bmN0aW9uIG5pKFMsTyl7Zm9yKHZhciBrPVMuRnVsbFBhdGhzfHxSZShTLmZpbGVzKSxLPU8udG9Mb3dl'@;
put 'ckNhc2UoKSxlZT1LLnJlcGxhY2UoL1wvL2csIlxcIiksb2U9MDtvZTxrLmxlbmd0aDsrK29lKXt2YXIgbWU9a1tvZV0udG9Mb3dlckNhc2UoKTtpZihLPT1tZXx8ZWU9PW1lKXJldHVybiBTLmZpbGVzW2tbb2VdXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBXZShTLE8pe3ZhciBrPW5pKFMsTyk7'@;
put 'aWYobnVsbD09ayl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZpbGUgIitPKyIgaW4gemlwIik7cmV0dXJuIGt9ZnVuY3Rpb24gQXQoUyxPLGspe2lmKCFrKXJldHVybiBmdW5jdGlvbiB6dChTKXtyZXR1cm4gUyYmIi5iaW4iPT09Uy5uYW1lLnNsaWNlKC00KT9vdChTKTpMbihTKX0o'@;
put 'V2UoUyxPKSk7aWYoIU8pcmV0dXJuIG51bGw7dHJ5e3JldHVybiBBdChTLE8pfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBpcihTLE8sayl7aWYoIWspcmV0dXJuIExuKFdlKFMsTykpO2lmKCFPKXJldHVybiBudWxsO3RyeXtyZXR1cm4gaXIoUyxPKX1jYXRjaHtyZXR1cm4gbnVsbH19'@;
put 'ZnVuY3Rpb24gaHQoUyxPLGspe2lmKCFrKXJldHVybiBvdChXZShTLE8pKTtpZighTylyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGh0KFMsTyl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHpuKFMsTyxrKXtTLkZ1bGxQYXRocz92ZS51dGlscy5jZmJfYWRkKFMsTyxrKTpTLmZpbGUoTyxr'@;
put 'KX1mdW5jdGlvbiBkaSgpe3JldHVybiBqdD9uZXcganQ6dmUudXRpbHMuY2ZiX25ldygpfWZ1bmN0aW9uIGNuKFMsTyl7dmFyIGs7aWYoanQpc3dpdGNoKE8udHlwZSl7Y2FzZSJiYXNlNjQiOms9bmV3IGp0KFMse2Jhc2U2NDohMH0pO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlImFycmF5Ijpr'@;
put 'PW5ldyBqdChTLHtiYXNlNjQ6ITF9KTticmVhaztjYXNlImJ1ZmZlciI6az1uZXcganQoUyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTy50eXBlKX1lbHNlIHN3aXRjaChPLnR5cGUpe2Nhc2UiYmFzZTY0IjprPXZlLnJlYWQoUyx7dHlwZToi'@;
put 'YmFzZTY0In0pO2JyZWFrO2Nhc2UiYmluYXJ5IjprPXZlLnJlYWQoUyx7dHlwZToiYmluYXJ5In0pO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjprPXZlLnJlYWQoUyx7dHlwZToiYnVmZmVyIn0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlw'@;
put 'ZSAiK08udHlwZSl9cmV0dXJuIGt9ZnVuY3Rpb24gZm4oUyxPKXtpZigiLyI9PVMuY2hhckF0KDApKXJldHVybiBTLnNsaWNlKDEpO3ZhciBrPU8uc3BsaXQoIi8iKTsiLyIhPU8uc2xpY2UoLTEpJiZrLnBvcCgpO2Zvcih2YXIgSz1TLnNwbGl0KCIvIik7MCE9PUsubGVuZ3RoOyl7dmFyIGVl'@;
put 'PUsuc2hpZnQoKTsiLi4iPT09ZWU/ay5wb3AoKToiLiIhPT1lZSYmay5wdXNoKGVlKX1yZXR1cm4gay5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJihqdD1KU1ppcFN5bmMpLGNlLmV4cG9ydHMmJnR5cGVvZiBqdD4idSImJihqdD1iKDMxNzkpKTt2YXIgRGk9Jzw/eG1sIHZlcnNp'@;
put 'b249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxRdD0vKD86W14iXHM/PlwvXSspXHMqPVxzKigoPzoiKSg/OlteIl0qPykoPzoiKXwoPzonKSg/OlteJ10qPykoPzonKXwoPzpbXiciPlxzXSspKS9nLHRuPS88W1wvXD9dP1thLXpBLVowLTk6Xy1dKyg/'@;
put 'OlxzK1teIlxzPz5cL10rXHMqPVxzKig/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPlxzPV0rKSkqXHM/W1wvXD9dPz4vZztEaS5tYXRjaCh0bil8fCh0bj0vPFtePl0qPi9nKTt2YXIgY2E9Lzxcdyo6Lyx4aT0vPChcLz8pXHcrOi87ZnVuY3Rpb24geXIoUyxPLGspe2Zvcih2YXIgSz17fSxlZT0w'@;
put 'LG9lPTA7ZWUhPT1TLmxlbmd0aCYmMzIhPT0ob2U9Uy5jaGFyQ29kZUF0KGVlKSkmJjEwIT09b2UmJjEzIT09b2U7KytlZSk7aWYoT3x8KEtbMF09Uy5zbGljZSgwLGVlKSksZWU9PT1TLmxlbmd0aClyZXR1cm4gSzt2YXIgbWU9Uy5tYXRjaChRdCkscGU9MCxiZT0iIixQZT0wLFZlPSIiLFll'@;
put 'PSIiLGV0PTE7aWYobWUpZm9yKFBlPTA7UGUhPW1lLmxlbmd0aDsrK1BlKXtmb3IoWWU9bWVbUGVdLG9lPTA7b2UhPVllLmxlbmd0aCYmNjEhPT1ZZS5jaGFyQ29kZUF0KG9lKTsrK29lKTtmb3IoVmU9WWUuc2xpY2UoMCxvZSkudHJpbSgpOzMyPT1ZZS5jaGFyQ29kZUF0KG9lKzEpOykrK29l'@;
put 'O2ZvcihldD0zND09KGVlPVllLmNoYXJDb2RlQXQob2UrMSkpfHwzOT09ZWU/MTowLGJlPVllLnNsaWNlKG9lKzErZXQsWWUubGVuZ3RoLWV0KSxwZT0wO3BlIT1WZS5sZW5ndGgmJjU4IT09VmUuY2hhckNvZGVBdChwZSk7KytwZSk7aWYocGU9PT1WZS5sZW5ndGgpVmUuaW5kZXhPZigiXyIp'@;
put 'PjAmJihWZT1WZS5zbGljZSgwLFZlLmluZGV4T2YoIl8iKSkpLEtbVmVdPWJlLGt8fChLW1ZlLnRvTG93ZXJDYXNlKCldPWJlKTtlbHNle3ZhciBjdD0oNT09PXBlJiYieG1sbnMiPT09VmUuc2xpY2UoMCw1KT8ieG1sbnMiOiIiKStWZS5zbGljZShwZSsxKTtpZihLW2N0XSYmImV4dCI9PVZl'@;
put 'LnNsaWNlKHBlLTMscGUpKWNvbnRpbnVlO0tbY3RdPWJlLGt8fChLW2N0LnRvTG93ZXJDYXNlKCldPWJlKX19cmV0dXJuIEt9ZnVuY3Rpb24gR24oUyl7cmV0dXJuIFMucmVwbGFjZSh4aSwiPCQxIil9dmFyIEtpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsi'@;
put 'OiI8IiwiJmFtcDsiOiImIn0sSnI9SGUoS2kpLFFyPWZ1bmN0aW9uKCl7dmFyIFM9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSxPPS9feChbXGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIGsoSyl7dmFyIGVlPUsrIiIsb2U9ZWUuaW5kZXhP'@;
put 'ZigiPCFbQ0RBVEFbIik7aWYoLTE9PW9lKXJldHVybiBlZS5yZXBsYWNlKFMsZnVuY3Rpb24ocGUsYmUpe3JldHVybiBLaVtwZV18fFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYmUscGUuaW5kZXhPZigieCIpPi0xPzE2OjEwKSl8fHBlfSkucmVwbGFjZShPLGZ1bmN0aW9uKHBlLGJl'@;
put 'KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChiZSwxNikpfSk7dmFyIG1lPWVlLmluZGV4T2YoIl1dPiIpO3JldHVybiBrKGVlLnNsaWNlKDAsb2UpKStlZS5zbGljZShvZSs5LG1lKStrKGVlLnNsaWNlKG1lKzMpKX19KCksTmk9L1smPD4nIl0vZyxIaT0vW1x1MDAwMC1c'@;
put 'dTAwMDhcdTAwMGItXHUwMDFmXS9nLElhPS9feFswLTlhLWZBLUZdezR9Xy9nO2Z1bmN0aW9uIFByKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKElhLCJfeDAwNUYkJiIpLnJlcGxhY2UoTmksZnVuY3Rpb24oayl7cmV0dXJuIEpyW2tdfSkucmVwbGFjZShIaSxmdW5jdGlvbihrKXtyZXR1cm4i'@;
put 'X3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIl8ifSl9ZnVuY3Rpb24gWWkoUyl7cmV0dXJuIFByKFMpLnJlcGxhY2UoL1xuL2csIl94MDAwYV8iKX1mdW5jdGlvbiBmYShTKXtyZXR1cm4gUHIoUykucmVwbGFjZSgvIC9nLCJfeDAwMjBfIil9dmFy'@;
put 'IG5yPS9bXHUwMDAwLVx1MDAxZl0vZztmdW5jdGlvbiBvYShTKXtyZXR1cm4oUysiIikucmVwbGFjZShOaSxmdW5jdGlvbihrKXtyZXR1cm4gSnJba119KS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpLnJlcGxhY2UobnIsZnVuY3Rpb24oayl7cmV0dXJuIiYjeCIrKCIwMDAiK2suY2hhckNvZGVB'@;
put 'dCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiOyJ9KX1mdW5jdGlvbiBfYShTKXtyZXR1cm4oUysiIikucmVwbGFjZShOaSxmdW5jdGlvbihrKXtyZXR1cm4gSnJba119KS5yZXBsYWNlKG5yLGZ1bmN0aW9uKGspe3JldHVybiImI3giK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiku'@;
put 'dG9VcHBlckNhc2UoKSsiOyJ9KX12YXIgT2E9ZnVuY3Rpb24oKXt2YXIgUz0vJiMoXGQrKTsvZztmdW5jdGlvbiBPKGssSyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoSywxMCkpfXJldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gSy5yZXBsYWNlKFMsTyl9fSgpLE5hPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoLyhcclxufFtcclxuXSkvZywiJiMxMDsiKX19KCk7ZnVuY3Rpb24gZWkoUyl7c3dpdGNoKFMpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1'@;
put 'cm4hMX19dmFyIGZzPWZ1bmN0aW9uKE8pe2Zvcih2YXIgaz0iIixLPTAsZWU9MCxvZT0wLG1lPTAscGU9MCxiZT0wO0s8Ty5sZW5ndGg7KShlZT1PLmNoYXJDb2RlQXQoSysrKSk8MTI4P2srPVN0cmluZy5mcm9tQ2hhckNvZGUoZWUpOihvZT1PLmNoYXJDb2RlQXQoSysrKSxlZT4xOTEmJmVl'@;
put 'PDIyND8ocGU9KDMxJmVlKTw8NixwZXw9NjMmb2Usays9U3RyaW5nLmZyb21DaGFyQ29kZShwZSkpOihtZT1PLmNoYXJDb2RlQXQoSysrKSxlZTwyNDA/ays9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmZWUpPDwxMnwoNjMmb2UpPDw2fDYzJm1lKTooYmU9KCg3JmVlKTw8MTh8KDYzJm9lKTw8'@;
put 'MTJ8KDYzJm1lKTw8Nnw2MyYocGU9Ty5jaGFyQ29kZUF0KEsrKykpKS02NTUzNixrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhiZT4+PjEwJjEwMjMpKSxrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmJlKSkpKSk7cmV0dXJuIGt9LEhvPWZ1bmN0aW9uKFMpe2Zvcih2'@;
put 'YXIgTz1bXSxrPTAsSz0wLGVlPTA7azxTLmxlbmd0aDspc3dpdGNoKEs9Uy5jaGFyQ29kZUF0KGsrKyksITApe2Nhc2UgSzwxMjg6Ty5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoSykpO2JyZWFrO2Nhc2UgSzwyMDQ4Ok8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoSz4+NikpKSxP'@;
put 'LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJkspKSk7YnJlYWs7Y2FzZSBLPj01NTI5NiYmSzw1NzM0NDpLLT01NTI5NixlZT1TLmNoYXJDb2RlQXQoaysrKS01NjMyMCsoSzw8MTApLE8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDI0MCsoZWU+PjE4JjcpKSksTy5wdXNoKFN0'@;
put 'cmluZy5mcm9tQ2hhckNvZGUoMTQ0KyhlZT4+MTImNjMpKSksTy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhlZT4+NiY2MykpKSxPLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJmVlKSkpO2JyZWFrO2RlZmF1bHQ6Ty5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjI0'@;
put 'KyhLPj4xMikpKSxPLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKEs+PjYmNjMpKSksTy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZLKSkpfXJldHVybiBPLmpvaW4oIiIpfTtpZihUZSl7dmFyIG1sPWZ1bmN0aW9uKE8pe3ZhciBLLGVlLGJlLGs9QnVmZmVyLmFsbG9j'@;
put 'KDIqTy5sZW5ndGgpLG9lPTEsbWU9MCxwZT0wO2ZvcihlZT0wO2VlPE8ubGVuZ3RoO2VlKz1vZSlvZT0xLChiZT1PLmNoYXJDb2RlQXQoZWUpKTwxMjg/Sz1iZTpiZTwyMjQ/KEs9NjQqKDMxJmJlKSsoNjMmTy5jaGFyQ29kZUF0KGVlKzEpKSxvZT0yKTpiZTwyNDA/KEs9NDA5NiooMTUmYmUp'@;
put 'KzY0Kig2MyZPLmNoYXJDb2RlQXQoZWUrMSkpKyg2MyZPLmNoYXJDb2RlQXQoZWUrMikpLG9lPTMpOihvZT00LEs9MjYyMTQ0Kig3JmJlKSs0MDk2Kig2MyZPLmNoYXJDb2RlQXQoZWUrMSkpKzY0Kig2MyZPLmNoYXJDb2RlQXQoZWUrMikpKyg2MyZPLmNoYXJDb2RlQXQoZWUrMykpLHBlPTU1'@;
put 'Mjk2KygoSy09NjU1MzYpPj4+MTAmMTAyMyksSz01NjMyMCsoMTAyMyZLKSksMCE9PXBlJiYoa1ttZSsrXT0yNTUmcGUsa1ttZSsrXT1wZT4+PjgscGU9MCksa1ttZSsrXT1LJTI1NixrW21lKytdPUs+Pj44O3JldHVybiBrLnNsaWNlKDAsbWUpLnRvU3RyaW5nKCJ1Y3MyIil9LHV1PSJmb28g'@;
put 'YmFyIGJhelx4ZTJceDk4XHg4M1x4ZjBceDlmXHg4ZFx4YTMiO2ZzKHV1KT09bWwodXUpJiYoZnM9bWwpO3ZhciBJYz1mdW5jdGlvbihPKXtyZXR1cm4gU2UoTywiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX07ZnModXUpPT1JYyh1dSkmJihmcz1JYyksSG89ZnVuY3Rpb24oUyl7cmV0dXJu'@;
put 'IFNlKFMsInV0ZjgiKS50b1N0cmluZygiYmluYXJ5Iil9fXZhciBTLEEwPWZ1bmN0aW9uKCl7dmFyIFM9e307cmV0dXJuIGZ1bmN0aW9uKGssSyl7dmFyIGVlPWsrInwiKyhLfHwiIik7cmV0dXJuIFNbZWVdP1NbZWVdOlNbZWVdPW5ldyBSZWdFeHAoIjwoPzpcXHcrOik/IitrKycoPzogeG1s'@;
put 'OnNwYWNlPSJwcmVzZXJ2ZSIpPyg/OltePl0qKT4oW1xcc1xcU10qPyk8Lyg/Olxcdys6KT8nK2srIj4iLEt8fCIiKX19KCksb3I9KFM9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9zIiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIs'@;
put 'IiYiXV0ubWFwKGZ1bmN0aW9uKE8pe3JldHVybltuZXcgUmVnRXhwKCImIitPWzBdKyI7IiwiaWciKSxPWzFdXX0pLGZ1bmN0aW9uKGspe2Zvcih2YXIgSz1rLnJlcGxhY2UoL15bXHRcblxyIF0rLywiIikucmVwbGFjZSgvW1x0XG5cciBdKyQvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rL2cs'@;
put 'IiAiKS5yZXBsYWNlKC88XHMqW2JCXVtyUl1ccypcLz8+L2csIlxuIikucmVwbGFjZSgvPFtePl0qPi9nLCIiKSxlZT0wO2VlPFMubGVuZ3RoOysrZWUpSz1LLnJlcGxhY2UoU1tlZV1bMF0sU1tlZV1bMV0pO3JldHVybiBLfSksVGE9ZnVuY3Rpb24oKXt2YXIgUz17fTtyZXR1cm4gZnVuY3Rp'@;
put 'b24oayl7cmV0dXJuIHZvaWQgMCE9PVNba10/U1trXTpTW2tdPW5ldyBSZWdFeHAoIjwoPzp2dDopPyIraysiPihbXFxzXFxTXSo/KTwvKD86dnQ6KT8iK2srIj4iLCJnIil9fSgpLGxpPS88XC8/KD86dnQ6KT92YXJpYW50Pi9nLE50PS88KD86dnQ6KShbXj5dKik+KFtcc1xTXSopPC87ZnVu'@;
put 'Y3Rpb24gWHIoUyxPKXt2YXIgaz15cihTKSxLPVMubWF0Y2goVGEoay5iYXNlVHlwZSkpfHxbXSxlZT1bXTtpZihLLmxlbmd0aCE9ay5zaXplKXtpZihPLldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK0subGVuZ3RoKyIgIT0gIitrLnNpemUpO3JldHVy'@;
put 'biBlZX1yZXR1cm4gSy5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgbWU9b2UucmVwbGFjZShsaSwiIikubWF0Y2goTnQpO21lJiZlZS5wdXNoKHt2OmZzKG1lWzJdKSx0Om1lWzFdfSl9KSxlZX12YXIgZzA9LyheXHN8XHMkfFxuKS87ZnVuY3Rpb24gVmEoUyxPKXtyZXR1cm4iPCIrUysoTy5t'@;
put 'YXRjaChnMCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitPKyI8LyIrUysiPiJ9ZnVuY3Rpb24gRHUoUyl7cmV0dXJuIFJlKFMpLm1hcChmdW5jdGlvbihPKXtyZXR1cm4iICIrTysnPSInK1NbT10rJyInfSkuam9pbigiIil9ZnVuY3Rpb24gSHIoUyxPLGspe3JldHVybiI8IitT'@;
put 'KyhudWxsIT1rP0R1KGspOiIiKSsobnVsbCE9Tz8oTy5tYXRjaChnMCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitPKyI8LyIrUzoiLyIpKyI+In1mdW5jdGlvbiBwZihTLE8pe3RyeXtyZXR1cm4gUy50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqLywiIil9Y2F0Y2goayl7'@;
put 'aWYoTyl0aHJvdyBrfXJldHVybiIifXZhciBYaCxxaCxHaT17ZGM6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIixkY3Rlcm1zOiJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvIixkY21pdHlwZToiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlLyIsbXg6Imh0dHA6Ly9zY2hl'@;
put 'bWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL21hYy9leGNlbC8yMDA4L21haW4iLHI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLHNqczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2Uv'@;
put 'MjAwNi9zaGVldGpzL2NvcmUtcHJvcGVydGllcyIsdnQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzIix4c2k6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIix4c2Q6Imh0dHA6Ly93'@;
put 'd3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIixtYWluOlsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvc3ByZWFkc2hlZXRtbC9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0'@;
put 'LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi8yIl19LHZsPXtvOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiLHg6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNl'@;
put 'OmV4Y2VsIixzczoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXQiLGR0OiJ1dWlkOkMyRjQxMDEwLTY1QjMtMTFkMS1BMjlGLTAwQUEwMEMxNDg4MiIsbXY6Imh0dHA6Ly9tYWNWbWxTY2hlbWFVcmkiLHY6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1s'@;
put 'IixodG1sOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0sbTA9ZnVuY3Rpb24oUyl7Zm9yKHZhciBPPVtdLEs9MDtLPFNbMF0ubGVuZ3RoOysrSylpZihTWzBdW0tdKWZvcih2YXIgZWU9MCxvZT1TWzBdW0tdLmxlbmd0aDtlZTxvZTtlZSs9MTAyNDApTy5wdXNoLmFwcGx5KE8s'@;
put 'U1swXVtLXS5zbGljZShlZSxlZSsxMDI0MCkpO3JldHVybiBPfSxlNT1tMCxJbD1mdW5jdGlvbihTLE8sayl7Zm9yKHZhciBLPVtdLGVlPU87ZWU8aztlZSs9MilLLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShRYShTLGVlKSkpO3JldHVybiBLLmpvaW4oIiIpLnJlcGxhY2UoRSwiIil9LGdm'@;
put 'PUlsLGNkPWZ1bmN0aW9uKFMsTyxrKXtmb3IodmFyIEs9W10sZWU9TztlZTxPK2s7KytlZSlLLnB1c2goKCIwIitTW2VlXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIEsuam9pbigiIil9LG1mPWNkLEQxPWZ1bmN0aW9uKFMsTyxrKXtmb3IodmFyIEs9W10sZWU9TztlZTxrO2Vl'@;
put 'KyspSy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoRnMoUyxlZSkpKTtyZXR1cm4gSy5qb2luKCIiKX0sdmY9RDEsZWg9ZnVuY3Rpb24oUyxPKXt2YXIgaz16cyhTLE8pO3JldHVybiBrPjA/RDEoUyxPKzQsTys0K2stMSk6IiJ9LHlmPWVoLEtoPWZ1bmN0aW9uKFMsTyl7dmFyIGs9enMoUyxP'@;
put 'KTtyZXR1cm4gaz4wP0QxKFMsTys0LE8rNCtrLTEpOiIifSxSYz1LaCxCYT1mdW5jdGlvbihTLE8pe3ZhciBrPTIqenMoUyxPKTtyZXR1cm4gaz4wP0QxKFMsTys0LE8rNCtrLTEpOiIifSxJMz1CYTtYaD1xaD1mdW5jdGlvbihPLGspe3ZhciBLPXpzKE8sayk7cmV0dXJuIEs+MD9JbChPLGsr'@;
put 'NCxrKzQrSyk6IiJ9O3ZhciBybixtaSxKaD1mdW5jdGlvbihTLE8pe3ZhciBrPXpzKFMsTyk7cmV0dXJuIGs+MD9EMShTLE8rNCxPKzQrayk6IiJ9LEFuPUpoO3JuPW1pPWZ1bmN0aW9uKFMsTyl7cmV0dXJuIGZ1bmN0aW9uIFhjKFMsTyl7Zm9yKHZhciBrPTEtMiooU1tPKzddPj4+NyksSz0o'@;
put 'KDEyNyZTW08rN10pPDw0KSsoU1tPKzZdPj4+NCYxNSksZWU9MTUmU1tPKzZdLG9lPTU7b2U+PTA7LS1vZSllZT0yNTYqZWUrU1tPK29lXTtyZXR1cm4gMjA0Nz09Sz8wPT1lZT9rKigxLzApOk5hTjooMD09Sz9LPS0xMDIyOihLLT0xMDIzLGVlKz1NYXRoLnBvdygyLDUyKSksaypNYXRoLnBv'@;
put 'dygyLEstNTIpKmVlKX0oUyxPKX07dmFyIEFyPWZ1bmN0aW9uKE8pe3JldHVybiBBcnJheS5pc0FycmF5KE8pfTtUZSYmKElsPWZ1bmN0aW9uKFMsTyxrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFMpP1MudG9TdHJpbmcoInV0ZjE2bGUiLE8saykucmVwbGFjZShFLCIiKTpnZihTLE8sayl9'@;
put 'LGNkPWZ1bmN0aW9uKFMsTyxrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFMpP1MudG9TdHJpbmcoImhleCIsTyxPK2spOm1mKFMsTyxrKX0sZWg9ZnVuY3Rpb24oTyxrKXtpZighQnVmZmVyLmlzQnVmZmVyKE8pKXJldHVybiB5ZihPLGspO3ZhciBLPU8ucmVhZFVJbnQzMkxFKGspO3JldHVy'@;
put 'biBLPjA/Ty50b1N0cmluZygidXRmOCIsays0LGsrNCtLLTEpOiIifSxLaD1mdW5jdGlvbihPLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoTykpcmV0dXJuIFJjKE8sayk7dmFyIEs9Ty5yZWFkVUludDMyTEUoayk7cmV0dXJuIEs+MD9PLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0stMSk6IiJ9'@;
put 'LEJhPWZ1bmN0aW9uKE8sayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihPKSlyZXR1cm4gSTMoTyxrKTt2YXIgSz0yKk8ucmVhZFVJbnQzMkxFKGspO3JldHVybiBPLnRvU3RyaW5nKCJ1dGYxNmxlIixrKzQsays0K0stMSl9LFhoPWZ1bmN0aW9uKE8sayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihPKSly'@;
put 'ZXR1cm4gcWgoTyxrKTt2YXIgSz1PLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gTy50b1N0cmluZygidXRmMTZsZSIsays0LGsrNCtLKX0sSmg9ZnVuY3Rpb24oTyxrKXtpZighQnVmZmVyLmlzQnVmZmVyKE8pKXJldHVybiBBbihPLGspO3ZhciBLPU8ucmVhZFVJbnQzMkxFKGspO3JldHVybiBP'@;
put 'LnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0spfSxEMT1mdW5jdGlvbihPLGssSyl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihPKT9PLnRvU3RyaW5nKCJ1dGY4IixrLEspOnZmKE8sayxLKX0sbTA9ZnVuY3Rpb24oUyl7cmV0dXJuIFNbMF0ubGVuZ3RoPjAmJkJ1ZmZlci5pc0J1ZmZlcihTWzBd'@;
put 'WzBdKT9CdWZmZXIuY29uY2F0KFNbMF0pOmU1KFMpfSxVPWZ1bmN0aW9uKFMpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoU1swXSk/QnVmZmVyLmNvbmNhdChTKTpbXS5jb25jYXQuYXBwbHkoW10sUyl9LHJuPWZ1bmN0aW9uKE8sayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihPKT9PLnJlYWRE'@;
put 'b3VibGVMRShrKTptaShPLGspfSxBcj1mdW5jdGlvbihPKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKE8pfHxBcnJheS5pc0FycmF5KE8pfSksdHlwZW9mIGNwdGFibGU8InUiJiYoSWw9ZnVuY3Rpb24oUyxPLGspe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoTyxr'@;
put 'KSkucmVwbGFjZShFLCIiKX0sRDE9ZnVuY3Rpb24oUyxPLGspe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxTLnNsaWNlKE8saykpfSxlaD1mdW5jdGlvbihTLE8pe3ZhciBrPXpzKFMsTyk7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShILFMuc2xpY2UoTys0LE8r'@;
put 'NCtrLTEpKToiIn0sS2g9ZnVuY3Rpb24oUyxPKXt2YXIgaz16cyhTLE8pO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoRixTLnNsaWNlKE8rNCxPKzQray0xKSk6IiJ9LEJhPWZ1bmN0aW9uKFMsTyl7dmFyIGs9Mip6cyhTLE8pO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNv'@;
put 'ZGUoMTIwMCxTLnNsaWNlKE8rNCxPKzQray0xKSk6IiJ9LFhoPWZ1bmN0aW9uKFMsTyl7dmFyIGs9enMoUyxPKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShPKzQsTys0K2spKToiIn0sSmg9ZnVuY3Rpb24oUyxPKXt2YXIgaz16cyhTLE8pO3JldHVybiBr'@;
put 'PjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsUy5zbGljZShPKzQsTys0K2spKToiIn0pO3ZhciBGcz1mdW5jdGlvbihTLE8pe3JldHVybiBTW09dfSxRYT1mdW5jdGlvbihTLE8pe3JldHVybiAyNTYqU1tPKzFdK1NbT119LHJsPWZ1bmN0aW9uKFMsTyl7dmFyIGs9MjU2KlNbTysxXStT'@;
put 'W09dO3JldHVybiBrPDMyNzY4P2s6LTEqKDY1NTM1LWsrMSl9LHpzPWZ1bmN0aW9uKFMsTyl7cmV0dXJuIFNbTyszXSooMTw8MjQpKyhTW08rMl08PDE2KSsoU1tPKzFdPDw4KStTW09dfSxObz1mdW5jdGlvbihTLE8pe3JldHVybiBTW08rM108PDI0fFNbTysyXTw8MTZ8U1tPKzFdPDw4fFNb'@;
put 'T119LENvPWZ1bmN0aW9uKFMsTyl7cmV0dXJuIFNbT108PDI0fFNbTysxXTw8MTZ8U1tPKzJdPDw4fFNbTyszXX07ZnVuY3Rpb24gTmwoUyxPKXt2YXIgSyxlZSxtZSxwZSxiZSxQZSxrPSIiLG9lPVtdO3N3aXRjaChPKXtjYXNlImRiY3MiOmlmKFBlPXRoaXMubCxUZSYmQnVmZmVyLmlzQnVm'@;
put 'ZmVyKHRoaXMpKWs9dGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykudG9TdHJpbmcoInV0ZjE2bGUiKTtlbHNlIGZvcihiZT0wO2JlPFM7KytiZSlrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFFhKHRoaXMsUGUpKSxQZSs9MjtTKj0yO2JyZWFrO2Nhc2UidXRmOCI6az1EMSh0aGlzLHRoaXMu'@;
put 'bCx0aGlzLmwrUyk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjprPUlsKHRoaXMsdGhpcy5sLHRoaXMubCsoUyo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgY3B0YWJsZTwidSIpKXJldHVybiBObC5jYWxsKHRoaXMsUywiZGJjcyIpO2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoRix0aGlz'@;
put 'LnNsaWNlKHRoaXMubCx0aGlzLmwrMipTKSksUyo9MjticmVhaztjYXNlImxwc3RyLWFuc2kiOms9ZWgodGhpcyx0aGlzLmwpLFM9NCt6cyh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6az1LaCh0aGlzLHRoaXMubCksUz00K3pzKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxw'@;
put 'd3N0ciI6az1CYSh0aGlzLHRoaXMubCksUz00KzIqenModGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBwNCI6Uz00K3pzKHRoaXMsdGhpcy5sKSxrPVhoKHRoaXMsdGhpcy5sKSwyJlMmJihTKz0yKTticmVhaztjYXNlIjhscHA0IjpTPTQrenModGhpcyx0aGlzLmwpLGs9SmgodGhpcyx0aGlz'@;
put 'LmwpLDMmUyYmKFMrPTQtKDMmUykpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKFM9MCxrPSIiOzAhPT0obWU9RnModGhpcyx0aGlzLmwrUysrKSk7KW9lLnB1c2godGUobWUpKTtrPW9lLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcihTPTAsaz0iIjswIT09KG1lPVFhKHRoaXMsdGhpcy5s'@;
put 'K1MpKTspb2UucHVzaCh0ZShtZSkpLFMrPTI7Uys9MixrPW9lLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3Ioaz0iIixQZT10aGlzLmwsYmU9MDtiZTxTOysrYmUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIG1lPUZzKHRoaXMsUGUp'@;
put 'LHRoaXMubD1QZSsxLHBlPU5sLmNhbGwodGhpcyxTLWJlLG1lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxvZS5qb2luKCIiKStwZTtvZS5wdXNoKHRlKFFhKHRoaXMsUGUpKSksUGUrPTJ9az1vZS5qb2luKCIiKSxTKj0yO2JyZWFrO2Nhc2UiY3BzdHIiOmlmKHR5cGVvZiBjcHRhYmxlPCJ1'@;
put 'Iil7az1jcHRhYmxlLnV0aWxzLmRlY29kZShGLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCtTKSk7YnJlYWt9Y2FzZSJzYmNzLWNvbnQiOmZvcihrPSIiLFBlPXRoaXMubCxiZT0wO2JlIT1TOysrYmUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIG1l'@;
put 'PUZzKHRoaXMsUGUpLHRoaXMubD1QZSsxLHBlPU5sLmNhbGwodGhpcyxTLWJlLG1lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxvZS5qb2luKCIiKStwZTtvZS5wdXNoKHRlKEZzKHRoaXMsUGUpKSksUGUrPTF9az1vZS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChTKXtjYXNlIDE6'@;
put 'cmV0dXJuIEs9RnModGhpcyx0aGlzLmwpLHRoaXMubCsrLEs7Y2FzZSAyOnJldHVybiBLPSgiaSI9PT1PP3JsOlFhKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLEs7Y2FzZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT1PJiYxMjgmdGhpc1t0aGlzLmwrM10/KGVlPXpzKHRoaXMsdGhpcy5sKSx0aGlz'@;
put 'LmwrPTQsZWUpOihLPShTPjA/Tm86Q28pKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsSyk7Y2FzZSA4OmNhc2UtODppZigiZiI9PT1PKXJldHVybiBlZT04PT1TP3JuKHRoaXMsdGhpcy5sKTpybihbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlz'@;
put 'LmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxlZTtTPTg7Y2FzZSAxNjprPWNkKHRoaXMsdGhpcy5sLFMpfX1yZXR1cm4gdGhpcy5sKz1TLGt9dmFyIE5zPWZ1bmN0aW9uKFMsTyxrKXtTW2tdPTI1'@;
put 'NSZPLFNbaysxXT1PPj4+OCYyNTUsU1trKzJdPU8+Pj4xNiYyNTUsU1trKzNdPU8+Pj4yNCYyNTV9LElzPWZ1bmN0aW9uKFMsTyxrKXtTW2tdPTI1NSZPLFNbaysxXT1PPj44JjI1NSxTW2srMl09Tz4+MTYmMjU1LFNbayszXT1PPj4yNCYyNTV9LFN0PWZ1bmN0aW9uKFMsTyxrKXtTW2tdPTI1'@;
put 'NSZPLFNbaysxXT1PPj4+OCYyNTV9O2Z1bmN0aW9uIFZ0KFMsTyxrKXt2YXIgSz0wLGVlPTA7aWYoImRiY3MiPT09ayl7Zm9yKGVlPTA7ZWUhPU8ubGVuZ3RoOysrZWUpU3QodGhpcyxPLmNoYXJDb2RlQXQoZWUpLHRoaXMubCsyKmVlKTtLPTIqTy5sZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1r'@;
put 'KXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09SClmb3IoZWU9MDtlZSE9Ty5sZW5ndGg7KytlZSl7dmFyIG9lPWNwdGFibGUudXRpbHMuZW5jb2RlKEgsTy5jaGFyQXQoZWUpKTt0aGlzW3RoaXMubCtlZV09b2VbMF19ZWxzZSBmb3IoTz1PLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJf'@;
put 'IiksZWU9MDtlZSE9Ty5sZW5ndGg7KytlZSl0aGlzW3RoaXMubCtlZV09MjU1Jk8uY2hhckNvZGVBdChlZSk7Sz1PLmxlbmd0aH1lbHNle2lmKCJoZXgiPT09ayl7Zm9yKDtlZTxTOysrZWUpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoTy5zbGljZSgyKmVlLDIqZWUrMiksMTYpfHwwO3JldHVy'@;
put 'biB0aGlzfWlmKCJ1dGYxNmxlIj09PWspe3ZhciBtZT1NYXRoLm1pbih0aGlzLmwrUyx0aGlzLmxlbmd0aCk7Zm9yKGVlPTA7ZWU8TWF0aC5taW4oTy5sZW5ndGgsUyk7KytlZSl7dmFyIHBlPU8uY2hhckNvZGVBdChlZSk7dGhpc1t0aGlzLmwrK109MjU1JnBlLHRoaXNbdGhpcy5sKytdPXBl'@;
put 'Pj44fWZvcig7dGhpcy5sPG1lOyl0aGlzW3RoaXMubCsrXT0wO3JldHVybiB0aGlzfXN3aXRjaChTKXtjYXNlIDE6Sz0xLHRoaXNbdGhpcy5sXT0yNTUmTzticmVhaztjYXNlIDI6Sz0yLHRoaXNbdGhpcy5sXT0yNTUmTyx0aGlzW3RoaXMubCsxXT0yNTUmKE8+Pj49OCk7YnJlYWs7Y2FzZSAz'@;
put 'Oks9Myx0aGlzW3RoaXMubF09MjU1Jk8sdGhpc1t0aGlzLmwrMV09MjU1JihPPj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoTz4+Pj04KTticmVhaztjYXNlIDQ6Sz00LE5zKHRoaXMsTyx0aGlzLmwpO2JyZWFrO2Nhc2UgODppZihLPTgsImYiPT09ayl7IWZ1bmN0aW9uIFFnKFMsTyxrKXt2'@;
put 'YXIgSz0oTzwwfHwxL089PS0xLzA/MTowKTw8NyxlZT0wLG9lPTAsbWU9Sz8tTzpPO2lzRmluaXRlKG1lKT8wPT1tZT9lZT1vZT0wOihlZT1NYXRoLmZsb29yKE1hdGgubG9nKG1lKS9NYXRoLkxOMiksb2U9bWUqTWF0aC5wb3coMiw1Mi1lZSksZWU8PS0xMDIzJiYoIWlzRmluaXRlKG9lKXx8'@;
put 'b2U8TWF0aC5wb3coMiw1MikpP2VlPS0xMDIyOihvZS09TWF0aC5wb3coMiw1MiksZWUrPTEwMjMpKTooZWU9MjA0NyxvZT1pc05hTihPKT8yNjk4NTowKTtmb3IodmFyIHBlPTA7cGU8PTU7KytwZSxvZS89MjU2KVNbaytwZV09MjU1Jm9lO1Nbays2XT0oMTUmZWUpPDw0fDE1Jm9lLFNbays3'@;
put 'XT1lZT4+NHxLfSh0aGlzLE8sdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDpLPTQsSXModGhpcyxPLHRoaXMubCl9fXJldHVybiB0aGlzLmwrPUssdGhpc31mdW5jdGlvbiB5bihTLE8pe3ZhciBrPWNkKHRoaXMsdGhpcy5sLFMubGVuZ3RoPj4xKTtpZihrIT09Uyl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoTysiRXhwZWN0ZWQgIitTKyIgc2F3ICIrayk7dGhpcy5sKz1TLmxlbmd0aD4+MX1mdW5jdGlvbiBnbihTLE8pe1MubD1PLFMucmVhZF9zaGlmdD1ObCxTLmNoaz15bixTLndyaXRlX3NoaWZ0PVZ0fWZ1bmN0aW9uIFJuKFMsTyl7Uy5sKz1PfWZ1bmN0aW9uIHZuKFMpe3ZhciBP'@;
put 'PXooUyk7cmV0dXJuIGduKE8sMCksT31mdW5jdGlvbiBkcihTLE8sayl7aWYoUyl7dmFyIEssZWUsb2U7Z24oUyxTLmx8fDApO2Zvcih2YXIgbWU9Uy5sZW5ndGgscGU9MCxiZT0wO1MubDxtZTspezEyOCYocGU9Uy5yZWFkX3NoaWZ0KDEpKSYmKHBlPSgxMjcmcGUpKygoMTI3JlMucmVhZF9z'@;
put 'aGlmdCgxKSk8PDcpKTt2YXIgUGU9TDhbcGVdfHxMOFs2NTUzNV07Zm9yKG9lPTEyNyYoSz1TLnJlYWRfc2hpZnQoMSkpLGVlPTE7ZWU8NCYmMTI4Jks7KytlZSlvZSs9KDEyNyYoSz1TLnJlYWRfc2hpZnQoMSkpKTw8NyplZTtiZT1TLmwrb2U7dmFyIFZlPShQZS5mfHxSbikoUyxvZSxrKTtp'@;
put 'ZihTLmw9YmUsTyhWZSxQZS5uLHBlKSlyZXR1cm59fX1mdW5jdGlvbiB2aSgpe3ZhciBTPVtdLE89VGU/MjU2OjIwNDgsaz1mdW5jdGlvbihQZSl7dmFyIFZlPXZuKFBlKTtyZXR1cm4gZ24oVmUsMCksVmV9LEs9ayhPKSxlZT1mdW5jdGlvbigpe0smJihLLmxlbmd0aD5LLmwmJigoSz1LLnNs'@;
put 'aWNlKDAsSy5sKSkubD1LLmxlbmd0aCksSy5sZW5ndGg+MCYmUy5wdXNoKEspLEs9bnVsbCl9LG9lPWZ1bmN0aW9uKFBlKXtyZXR1cm4gSyYmUGU8Sy5sZW5ndGgtSy5sP0s6KGVlKCksSz1rKE1hdGgubWF4KFBlKzEsTykpKX07cmV0dXJue25leHQ6b2UscHVzaDpmdW5jdGlvbihQZSl7ZWUo'@;
put 'KSxudWxsPT0oSz1QZSkubCYmKEsubD1LLmxlbmd0aCksb2UoTyl9LGVuZDpmdW5jdGlvbigpe3JldHVybiBlZSgpLG0wKFtTXSl9LF9idWZzOlN9fWZ1bmN0aW9uIFZyKFMsTyxrLEspe3ZhciBvZSxlZT0ranpbT107aWYoIWlzTmFOKGVlKSl7S3x8KEs9TDhbZWVdLnB8fChrfHxbXSkubGVu'@;
put 'Z3RofHwwKSxvZT0xKyhlZT49MTI4PzE6MCkrMSxLPj0xMjgmJisrb2UsSz49MTYzODQmJisrb2UsSz49MjA5NzE1MiYmKytvZTt2YXIgbWU9Uy5uZXh0KG9lKTtlZTw9MTI3P21lLndyaXRlX3NoaWZ0KDEsZWUpOihtZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JmVlKSksbWUud3JpdGVfc2hp'@;
put 'ZnQoMSxlZT4+NykpO2Zvcih2YXIgcGU9MDs0IT1wZTsrK3BlKXtpZighKEs+PTEyOCkpe21lLndyaXRlX3NoaWZ0KDEsSyk7YnJlYWt9bWUud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZLKSksSz4+PTd9Sz4wJiZBcihrKSYmUy5wdXNoKGspfX1mdW5jdGlvbiB0YShTLE8sayl7dmFyIEs9SnQo'@;
put 'Uyk7aWYoTy5zPyhLLmNSZWwmJihLLmMrPU8ucy5jKSxLLnJSZWwmJihLLnIrPU8ucy5yKSk6KEsuY1JlbCYmKEsuYys9Ty5jKSxLLnJSZWwmJihLLnIrPU8ucikpLCFrfHxrLmJpZmY8MTIpe2Zvcig7Sy5jPj0yNTY7KUsuYy09MjU2O2Zvcig7Sy5yPj02NTUzNjspSy5yLT02NTUzNn1yZXR1'@;
put 'cm4gS31mdW5jdGlvbiBhYShTLE8sayl7dmFyIEs9SnQoUyk7cmV0dXJuIEsucz10YShLLnMsTy5zLGspLEsuZT10YShLLmUsTy5zLGspLEt9ZnVuY3Rpb24gamEoUyxPKXtpZihTLmNSZWwmJlMuYzwwKWZvcihTPUp0KFMpO1MuYzwwOylTLmMrPU8+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZT'@;
put 'LnI8MClmb3IoUz1KdChTKTtTLnI8MDspUy5yKz1PPjg/MTA0ODU3NjpPPjU/NjU1MzY6MTYzODQ7aWYoUy5jUmVsJiZTLmM+PShPPjg/MTYzODQ6MjU2KSlmb3IoUz1KdChTKTtTLmM+PShPPjg/MTYzODQ6MjU2KTspUy5jLT1PPjg/MTYzODQ6MjU2O2lmKFMuclJlbCYmUy5yPj0xMDQ4NTc2'@;
put 'KWZvcihTPUp0KFMpO1Mucj49MTA0ODU3NjspUy5yLT0xMDQ4NTc2O3ZhciBrPXFpKFMpO3JldHVybiFTLmNSZWwmJm51bGwhPVMuY1JlbCYmKGs9ZnVuY3Rpb24gUWgoUyl7cmV0dXJuIFMucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KGspKSwhUy5yUmVsJiZudWxsIT1TLnJSZWwmJihr'@;
put 'PWZ1bmN0aW9uIExjKFMpe3JldHVybiBTLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShrKSksa31mdW5jdGlvbiAkcyhTLE8pe3JldHVybiAwIT1TLnMucnx8Uy5zLnJSZWx8fFMuZS5yIT0oTy5iaWZmPj0xMj8xMDQ4NTc1Ok8uYmlmZj49OD82NTUzNjoxNjM4NCl8fFMu'@;
put 'ZS5yUmVsPzAhPVMucy5jfHxTLnMuY1JlbHx8Uy5lLmMhPShPLmJpZmY+PTEyPzE2MzgzOjI1NSl8fFMuZS5jUmVsP2phKFMucyxPLmJpZmYpKyI6IitqYShTLmUsTy5iaWZmKTooUy5zLnJSZWw/IiI6IiQiKStqaShTLnMucikrIjoiKyhTLmUuclJlbD8iIjoiJCIpK2ppKFMuZS5yKTooUy5z'@;
put 'LmNSZWw/IiI6IiQiKStrYShTLnMuYykrIjoiKyhTLmUuY1JlbD8iIjoiJCIpK2thKFMuZS5jKX12YXIgS2w9e307ZnVuY3Rpb24gYnMoUyl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIFZsKFMpe3JldHVybiBTLnJlcGxhY2UoL1wkKFxkKykkLywiJDEiKX0oUyksMTApLTF9ZnVuY3Rpb24g'@;
put 'amkoUyl7cmV0dXJuIiIrKFMrMSl9ZnVuY3Rpb24gU2EoUyl7Zm9yKHZhciBPPWZ1bmN0aW9uIFkwKFMpe3JldHVybiBTLnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfShTKSxrPTAsSz0wO0shPT1PLmxlbmd0aDsrK0spaz0yNiprK08uY2hhckNvZGVBdChLKS02NDtyZXR1cm4gay0xfWZ1'@;
put 'bmN0aW9uIGthKFMpe2lmKFM8MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY29sdW1uICIrUyk7dmFyIE89IiI7Zm9yKCsrUztTO1M9TWF0aC5mbG9vcigoUy0xKS8yNikpTz1TdHJpbmcuZnJvbUNoYXJDb2RlKChTLTEpJTI2KzY1KStPO3JldHVybiBPfWZ1bmN0aW9uIFZzKFMpe2Zvcih2'@;
put 'YXIgTz0wLGs9MCxLPTA7SzxTLmxlbmd0aDsrK0spe3ZhciBlZT1TLmNoYXJDb2RlQXQoSyk7ZWU+PTQ4JiZlZTw9NTc/Tz0xMCpPKyhlZS00OCk6ZWU+PTY1JiZlZTw9OTAmJihrPTI2KmsrKGVlLTY0KSl9cmV0dXJue2M6ay0xLHI6Ty0xfX1mdW5jdGlvbiBxaShTKXtmb3IodmFyIE89Uy5j'@;
put 'KzEsaz0iIjtPO089KE8tMSkvMjZ8MClrPVN0cmluZy5mcm9tQ2hhckNvZGUoKE8tMSklMjYrNjUpK2s7cmV0dXJuIGsrKFMucisxKX1mdW5jdGlvbiBTbyhTKXt2YXIgTz1TLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09Tz97czpWcyhTKSxlOlZzKFMpfTp7czpWcyhTLnNsaWNlKDAsTykpLGU6'@;
put 'VnMoUy5zbGljZShPKzEpKX19ZnVuY3Rpb24gcmEoUyxPKXtyZXR1cm4gdHlwZW9mIE8+InUifHwibnVtYmVyIj09dHlwZW9mIE8/cmEoUy5zLFMuZSk6KCJzdHJpbmciIT10eXBlb2YgUyYmKFM9cWkoUykpLCJzdHJpbmciIT10eXBlb2YgTyYmKE89cWkoTykpLFM9PU8/UzpTKyI6IitPKX1m'@;
put 'dW5jdGlvbiBzcyhTKXt2YXIgTz1KU09OLnBhcnNlKCd7InMiOnsiYyI6MCwiciI6MH0sImUiOnsiYyI6MCwiciI6MH19Jyksaz0wLEs9MCxlZT0wLG9lPVMubGVuZ3RoO2ZvcihrPTA7SzxvZSYmISgoZWU9Uy5jaGFyQ29kZUF0KEspLTY0KTwxfHxlZT4yNik7KytLKWs9MjYqaytlZTtmb3Io'@;
put 'Ty5zLmM9LS1rLGs9MDtLPG9lJiYhKChlZT1TLmNoYXJDb2RlQXQoSyktNDgpPDB8fGVlPjkpOysrSylrPTEwKmsrZWU7aWYoTy5zLnI9LS1rLEs9PT1vZXx8NTg9PT1TLmNoYXJDb2RlQXQoKytLKSlyZXR1cm4gTy5lLmM9Ty5zLmMsTy5lLnI9Ty5zLnIsTztmb3Ioaz0wO0shPW9lJiYhKChl'@;
put 'ZT1TLmNoYXJDb2RlQXQoSyktNjQpPDF8fGVlPjI2KTsrK0spaz0yNiprK2VlO2ZvcihPLmUuYz0tLWssaz0wO0shPW9lJiYhKChlZT1TLmNoYXJDb2RlQXQoSyktNDgpPDB8fGVlPjkpOysrSylrPTEwKmsrZWU7cmV0dXJuIE8uZS5yPS0tayxPfWZ1bmN0aW9uIHQ1KFMsTyl7dmFyIGs9ImQi'@;
put 'PT1TLnQmJk8gaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPVMueil0cnl7cmV0dXJuIFMudz1BLmZvcm1hdChTLnosaz9KZShPKTpPKX1jYXRjaHt9dHJ5e3JldHVybiBTLnc9QS5mb3JtYXQoKFMuWEZ8fHt9KS5udW1GbXRJZHx8KGs/MTQ6MCksaz9KZShPKTpPKX1jYXRjaHtyZXR1cm4iIitP'@;
put 'fX1mdW5jdGlvbiB5bChTLE8sayl7cmV0dXJuIG51bGw9PVN8fG51bGw9PVMudHx8InoiPT1TLnQ/IiI6dm9pZCAwIT09Uy53P1MudzooImQiPT1TLnQmJiFTLnomJmsmJmsuZGF0ZU5GJiYoUy56PWsuZGF0ZU5GKSwiZSI9PVMudD9DY1tTLnZdfHxTLnY6dDUoUyxudWxsPT1PP1MudjpPKSl9'@;
put 'ZnVuY3Rpb24gdGgoUyxPKXt2YXIgaz1PJiZPLnNoZWV0P08uc2hlZXQ6IlNoZWV0MSIsSz17fTtyZXR1cm4gS1trXT1TLHtTaGVldE5hbWVzOltrXSxTaGVldHM6S319ZnVuY3Rpb24gZjQoUyxPLGspe3ZhciBLPWt8fHt9LGVlPVM/QXJyYXkuaXNBcnJheShTKTpLLmRlbnNlO251bGwhPXNl'@;
put 'JiZudWxsPT1lZSYmKGVlPXNlKTt2YXIgb2U9U3x8KGVlP1tdOnt9KSxtZT0wLHBlPTA7aWYob2UmJm51bGwhPUsub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIEsub3JpZ2luKW1lPUsub3JpZ2luO2Vsc2V7dmFyIGJlPSJzdHJpbmciPT10eXBlb2YgSy5vcmlnaW4/VnMoSy5vcmlnaW4p'@;
put 'Oksub3JpZ2luO21lPWJlLnIscGU9YmUuY31vZVsiIXJlZiJdfHwob2VbIiFyZWYiXT0iQTE6QTEiKX12YXIgUGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYob2VbIiFyZWYiXSl7dmFyIFZlPXNzKG9lWyIhcmVmIl0pO1BlLnMuYz1WZS5zLmMsUGUucy5yPVZlLnMucixQZS5l'@;
put 'LmM9TWF0aC5tYXgoUGUuZS5jLFZlLmUuYyksUGUuZS5yPU1hdGgubWF4KFBlLmUucixWZS5lLnIpLC0xPT1tZSYmKFBlLmUucj1tZT1WZS5lLnIrMSl9Zm9yKHZhciBZZT0wO1llIT1PLmxlbmd0aDsrK1llKWlmKE9bWWVdKXtpZighQXJyYXkuaXNBcnJheShPW1llXSkpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIGV0PTA7ZXQhPU9bWWVdLmxlbmd0aDsrK2V0KWlmKCEodHlwZW9mIE9bWWVdW2V0XT4idSIpKXt2YXIgY3Q9e3Y6T1tZZV1bZXRdfSxUdD1tZStZZSxpdD1wZStldDtpZihQZS5zLnI+VHQmJihQ'@;
put 'ZS5zLnI9VHQpLFBlLnMuYz5pdCYmKFBlLnMuYz1pdCksUGUuZS5yPFR0JiYoUGUuZS5yPVR0KSxQZS5lLmM8aXQmJihQZS5lLmM9aXQpLCFPW1llXVtldF18fCJvYmplY3QiIT10eXBlb2YgT1tZZV1bZXRdfHxBcnJheS5pc0FycmF5KE9bWWVdW2V0XSl8fE9bWWVdW2V0XWluc3RhbmNlb2Yg'@;
put 'RGF0ZSlpZihBcnJheS5pc0FycmF5KGN0LnYpJiYoY3QuZj1PW1llXVtldF1bMV0sY3Qudj1jdC52WzBdKSxudWxsPT09Y3QudilpZihjdC5mKWN0LnQ9Im4iO2Vsc2UgaWYoSy5udWxsRXJyb3IpY3QudD0iZSIsY3Qudj0wO2Vsc2V7aWYoIUsuc2hlZXRTdHVicyljb250aW51ZTtjdC50PSJ6'@;
put 'In1lbHNlIm51bWJlciI9PXR5cGVvZiBjdC52P2N0LnQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGN0LnY/Y3QudD0iYiI6Y3QudiBpbnN0YW5jZW9mIERhdGU/KGN0Lno9Sy5kYXRlTkZ8fEEuX3RhYmxlWzE0XSxLLmNlbGxEYXRlcz8oY3QudD0iZCIsY3Qudz1BLmZvcm1hdChjdC56LEplKGN0'@;
put 'LnYpKSk6KGN0LnQ9Im4iLGN0LnY9SmUoY3QudiksY3Qudz1BLmZvcm1hdChjdC56LGN0LnYpKSk6Y3QudD0icyI7ZWxzZSBjdD1PW1llXVtldF07aWYoY3QmJmN0LmgpdHJ5e2N0LlI9dmQuaHRtbF90b19ycyhjdC5oKSxjdC52PSIiO2Zvcih2YXIgYnQ9MDtidDxjdC5SLmxlbmd0aDsrK2J0'@;
put 'KWN0LnYrPWN0LlJbYnRdLnZ8fCIifWNhdGNoe31pZihlZSlvZVtUdF18fChvZVtUdF09W10pLG9lW1R0XVtpdF0mJm9lW1R0XVtpdF0ucyYmKGN0LnM9b2VbVHRdW2l0XS5zKSxvZVtUdF1baXRdJiZvZVtUdF1baXRdLnomJihjdC56PW9lW1R0XVtpdF0ueiksb2VbVHRdW2l0XT1jdDtlbHNl'@;
put 'e3ZhciBCdD1xaSh7YzppdCxyOlR0fSk7b2VbQnRdJiZvZVtCdF0ucyYmKGN0LnM9b2VbQnRdLnMpLG9lW0J0XSYmb2VbQnRdLnomJihjdC56PW9lW0J0XS56KSxvZVtCdF09Y3R9fX1yZXR1cm4gUGUucy5jPDFlNyYmKG9lWyIhcmVmIl09cmEoUGUpKSxvZX1mdW5jdGlvbiBwNChTLE8pe3Jl'@;
put 'dHVybiBmNChudWxsLFMsTyl9ZnVuY3Rpb24gJDAoUyxPKXtyZXR1cm4gT3x8KE89dm4oNCkpLE8ud3JpdGVfc2hpZnQoNCxTKSxPfWZ1bmN0aW9uIGR1KFMpe3ZhciBPPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PU8/IiI6Uy5yZWFkX3NoaWZ0KE8sImRiY3MiKX1mdW5jdGlvbiBPYyhT'@;
put 'LE8pe3ZhciBrPSExO3JldHVybiBudWxsPT1PJiYoaz0hMCxPPXZuKDQrMipTLmxlbmd0aCkpLE8ud3JpdGVfc2hpZnQoNCxTLmxlbmd0aCksUy5sZW5ndGg+MCYmTy53cml0ZV9zaGlmdCgwLFMsImRiY3MiKSxrP08uc2xpY2UoMCxPLmwpOk99ZnVuY3Rpb24gSHcoUyl7cmV0dXJue2ljaDpT'@;
put 'LnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIGlsKFMsTyl7dmFyIGs9Uy5sLEs9Uy5yZWFkX3NoaWZ0KDEpLGVlPWR1KFMpLG9lPVtdLG1lPXt0OmVlLGg6ZWV9O2lmKDEmSyl7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCksYmU9MDtiZSE9cGU7KytiZSlv'@;
put 'ZS5wdXNoKEh3KFMpKTttZS5yPW9lfWVsc2UgbWUucj1be2ljaDowLGlmbnQ6MH1dO3JldHVybiBTLmw9aytPLG1lfSFmdW5jdGlvbihTLE8pe3ZhciBrO2lmKHR5cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IilrPWNyeXB0b0Jyb3dzZXJpZnk7ZWxzZSBpZih0eXBlb2YgTzwidSIpaz1PO2Vs'@;
put 'c2UgdHJ5e2s9Yig5MTQyNil9Y2F0Y2h7az1udWxsfVMucmM0PWZ1bmN0aW9uKEssZWUpe3ZhciBvZT1uZXcgQXJyYXkoMjU2KSxtZT0wLHBlPTAsYmU9MCxQZT0wO2ZvcihwZT0wOzI1NiE9cGU7KytwZSlvZVtwZV09cGU7Zm9yKHBlPTA7MjU2IT1wZTsrK3BlKWJlPWJlK29lW3BlXStLW3Bl'@;
put 'JUsubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxQZT1vZVtwZV0sb2VbcGVdPW9lW2JlXSxvZVtiZV09UGU7cGU9YmU9MDt2YXIgVmU9eihlZS5sZW5ndGgpO2ZvcihtZT0wO21lIT1lZS5sZW5ndGg7KyttZSlQZT1vZVtwZT1wZSsxJjI1NV0sb2VbcGVdPW9lW2JlPShiZStvZVtwZV0pJTI1'@;
put 'Nl0sb2VbYmVdPVBlLFZlW21lXT1lZVttZV1eb2Vbb2VbcGVdK29lW2JlXSYyNTVdO3JldHVybiBWZX0sUy5tZDU9ZnVuY3Rpb24oSyl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gay5jcmVhdGVIYXNoKCJtZDUiKS51cGRhdGUoQnVmZmVyLmZy'@;
put 'b20oSykpLmRpZ2VzdCgiaGV4Iil9fShLbCx0eXBlb2YgY3J5cHRvPCJ1Ij9jcnlwdG86dm9pZCAwKTt2YXIgTnc9aWw7ZnVuY3Rpb24gSTEoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrKz1TLnJlYWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOk8s'@;
put 'aVN0eWxlUmVmOmt9fWZ1bmN0aW9uIENyKFMsTyl7cmV0dXJuIG51bGw9PU8mJihPPXZuKDgpKSxPLndyaXRlX3NoaWZ0KC00LFMuYyksTy53cml0ZV9zaGlmdCgzLFMuaVN0eWxlUmVmfHxTLnMpLE8ud3JpdGVfc2hpZnQoMSwwKSxPfWZ1bmN0aW9uIGUyKFMpe3ZhciBPPVMucmVhZF9zaGlm'@;
put 'dCgyKTtyZXR1cm4gTys9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzotMSxpU3R5bGVSZWY6T319ZnVuY3Rpb24gaGkoUyxPKXtyZXR1cm4gbnVsbD09TyYmKE89dm4oNCkpLE8ud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxPLndyaXRlX3NoaWZ0KDEsMCksT312YXIgbjU9'@;
put 'ZHUscjU9T2M7ZnVuY3Rpb24gUXUoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09T3x8NDI5NDk2NzI5NT09PU8/IiI6Uy5yZWFkX3NoaWZ0KE8sImRiY3MiKX1mdW5jdGlvbiBiZihTLE8pe3ZhciBrPSExO3JldHVybiBudWxsPT1PJiYoaz0hMCxPPXZuKDEyNykpLE8ud3Jp'@;
put 'dGVfc2hpZnQoNCxTLmxlbmd0aD4wP1MubGVuZ3RoOjQyOTQ5NjcyOTUpLFMubGVuZ3RoPjAmJk8ud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9PLnNsaWNlKDAsTy5sKTpPfXZhciBhNT1kdSxnND1RdSxzNT1iZjtmdW5jdGlvbiBSMShTKXt2YXIgTz1TLnNsaWNlKFMubCxTLmwrNCksaz0x'@;
put 'Jk9bMF0sSz0yJk9bMF07Uy5sKz00LE9bMF0mPTI1Mjt2YXIgZWU9MD09PUs/cm4oWzAsMCwwLDAsT1swXSxPWzFdLE9bMl0sT1szXV0sMCk6Tm8oTywwKT4+MjtyZXR1cm4gaz9lZS8xMDA6ZWV9ZnVuY3Rpb24gc3YoUyxPKXtudWxsPT1PJiYoTz12big0KSk7dmFyIGs9MCxLPTAsZWU9MTAw'@;
put 'KlM7aWYoUz09KDB8UykmJlM+PS0oMTw8MjkpJiZTPDE8PDI5P0s9MTplZT09KDB8ZWUpJiZlZT49LSgxPDwyOSkmJmVlPDE8PDI5JiYoSz0xLGs9MSksIUspdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBSa051bWJlciAiK1MpO08ud3JpdGVfc2hpZnQoLTQsKChrP2VlOlMpPDwyKSso'@;
put 'aysyKSl9ZnVuY3Rpb24gdWQoUyl7dmFyIE89e3M6e30sZTp7fX07cmV0dXJuIE8ucy5yPVMucmVhZF9zaGlmdCg0KSxPLmUucj1TLnJlYWRfc2hpZnQoNCksTy5zLmM9Uy5yZWFkX3NoaWZ0KDQpLE8uZS5jPVMucmVhZF9zaGlmdCg0KSxPfXZhciBodT11ZCxfZj1mdW5jdGlvbiBUNihTLE8p'@;
put 'e3JldHVybiBPfHwoTz12bigxNikpLE8ud3JpdGVfc2hpZnQoNCxTLnMuciksTy53cml0ZV9zaGlmdCg0LFMuZS5yKSxPLndyaXRlX3NoaWZ0KDQsUy5zLmMpLE8ud3JpdGVfc2hpZnQoNCxTLmUuYyksT307ZnVuY3Rpb24gZTAoUyl7Zm9yKHZhciBPPVMucmVhZF9zaGlmdCg0KSxrPVtdLEs9'@;
put 'MDtLPE87KytLKXt2YXIgZWU9aHUoUyk7ay5wdXNoKHJhKGVlKSl9cmV0dXJuIGsuam9pbigiLCIpfWZ1bmN0aW9uIFJsKFMpe2lmKFMubGVuZ3RoLVMubDw4KXRocm93IlhMUyBYbnVtIEJ1ZmZlciB1bmRlcmZsb3ciO3JldHVybiBTLnJlYWRfc2hpZnQoOCwiZiIpfWZ1bmN0aW9uIEl1KFMs'@;
put 'Tyl7cmV0dXJuKE98fHZuKDgpKS53cml0ZV9zaGlmdCg4LFMsImYiKX1mdW5jdGlvbiB0MihTKXt2YXIgTz17fSxLPVMucmVhZF9zaGlmdCgxKT4+PjEsZWU9Uy5yZWFkX3NoaWZ0KDEpLG9lPVMucmVhZF9zaGlmdCgyLCJpIiksbWU9Uy5yZWFkX3NoaWZ0KDEpLHBlPVMucmVhZF9zaGlmdCgx'@;
put 'KSxiZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKFMubCsrLEspe2Nhc2UgMDpPLmF1dG89MTticmVhaztjYXNlIDE6Ty5pbmRleD1lZTt2YXIgUGU9dDBbZWVdO1BlJiYoTy5yZ2I9cGQoUGUpKTticmVhaztjYXNlIDI6Ty5yZ2I9cGQoW21lLHBlLGJlXSk7YnJlYWs7Y2FzZSAzOk8udGhlbWU9'@;
put 'ZWV9cmV0dXJuIDAhPW9lJiYoTy50aW50PW9lPjA/b2UvMzI3Njc6b2UvMzI3NjgpLE99ZnVuY3Rpb24gd2YoUyxPKXtpZihPfHwoTz12big4KSksIVN8fFMuYXV0bylyZXR1cm4gTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoNCwwKSxPO251bGwhPVMuaW5kZXg/KE8ud3JpdGVf'@;
put 'c2hpZnQoMSwyKSxPLndyaXRlX3NoaWZ0KDEsUy5pbmRleCkpOm51bGwhPVMudGhlbWU/KE8ud3JpdGVfc2hpZnQoMSw2KSxPLndyaXRlX3NoaWZ0KDEsUy50aGVtZSkpOihPLndyaXRlX3NoaWZ0KDEsNSksTy53cml0ZV9zaGlmdCgxLDApKTt2YXIgaz1TLnRpbnR8fDA7aWYoaz4wP2sqPTMy'@;
put 'NzY3Oms8MCYmKGsqPTMyNzY4KSxPLndyaXRlX3NoaWZ0KDIsayksUy5yZ2ImJm51bGw9PVMudGhlbWUpe3ZhciBLPVMucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIEsmJihLPSgiMDAwMDAwIitLLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxPLndyaXRlX3NoaWZ0KDEscGFyc2VJ'@;
put 'bnQoSy5zbGljZSgwLDIpLDE2KSksTy53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEsuc2xpY2UoMiw0KSwxNikpLE8ud3JpdGVfc2hpZnQoMSxwYXJzZUludChLLnNsaWNlKDQsNiksMTYpKSxPLndyaXRlX3NoaWZ0KDEsMjU1KX1lbHNlIE8ud3JpdGVfc2hpZnQoMiwwKSxPLndyaXRlX3NoaWZ0'@;
put 'KDEsMCksTy53cml0ZV9zaGlmdCgxLDApO3JldHVybiBPfWZ1bmN0aW9uIFZ3KFMpe3ZhciBPPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKysse2ZCb2xkOjEmTyxmSXRhbGljOjImTyxmVW5kZXJsaW5lOjQmTyxmU3RyaWtlb3V0OjgmTyxmT3V0bGluZToxNiZPLGZTaGFkb3c6MzImTyxm'@;
put 'Q29uZGVuc2U6NjQmTyxmRXh0ZW5kOjEyOCZPfX1mdW5jdGlvbiBCdyhTLE8pe3ZhciBLPVMucmVhZF9zaGlmdCg0KTtzd2l0Y2goSyl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJE'@;
put 'SUIiLDE0OiJFTkhNRVRBRklMRSJ9W1MucmVhZF9zaGlmdCg0KV18fCIifWlmKEs+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK0sudG9TdHJpbmcoMTYpKTtyZXR1cm4gUy5sLT00LFMucmVhZF9zaGlmdCgwLDE9PU8/Imxwc3RyIjoibHB3c3RyIil9dmFy'@;
put 'IG4yPTIsWGw9MyxrMD0xMixWbj04MSxqdz1bODAsVm5dLG00PXsxOntuOiJDb2RlUGFnZSIsdDpuMn0sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4MH0sNDp7bjoiQnl0ZUNvdW50Iix0OlhsfSw1OntuOiJMaW5lQ291bnQiLHQ6WGx9LDY6e246'@;
put 'IlBhcmFncmFwaENvdW50Iix0OlhsfSw3OntuOiJTbGlkZUNvdW50Iix0OlhsfSw4OntuOiJOb3RlQ291bnQiLHQ6WGx9LDk6e246IkhpZGRlbkNvdW50Iix0OlhsfSwxMDp7bjoiTXVsdGltZWRpYUNsaXBDb3VudCIsdDpYbH0sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRp'@;
put 'bmdQYWlycyIsdDo0MDk2fGswfSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6WGx9LDE5OntuOiJTaGFyZWRE'@;
put 'b2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNpb24iLHQ6WGwscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9LDI4OntuOiJMYW5n'@;
put 'dWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxsNT17MTp7bjoiQ29kZVBhZ2UiLHQ6bjJ9LDI6e246IlRpdGxlIix0OjgwfSwzOntu'@;
put 'OiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1l'@;
put 'Iix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpYbH0sMTU6e246IldvcmRDb3VudCIsdDpYbH0sMTY6e246IkNoYXJDb3VudCIsdDpYbH0sMTc6e246'@;
put 'IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6WGx9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxjNT1JZShtNCwibiIp'@;
put 'LENmPUllKGw1LCJuIiksRDY9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIs'@;
put 'NDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4Njoi'@;
put 'VFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LGx2PVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtI'@;
put 'b3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1Iiwi'@;
put 'Z3JheTA2MjUiXTtmdW5jdGlvbiBJNihTKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuW08+PjE2JjI1NSxPPj44JjI1NSwyNTUmT119KX12YXIgdjQ9STYoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3'@;
put 'MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMs'@;
put 'MTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4'@;
put 'LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pLHQwPUp0KHY0KSx6dz1JNihbMTI2MzIyNTYsOTg2ODk1'@;
put 'MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQzNTIsOTk2'@;
put 'NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAsNzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0pLENjPXswOiIjTlVM'@;
put 'TCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sRjM9RGUoQ2MpLHk0PXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50'@;
put 'LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJp'@;
put 'bkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWwiOiJjdXN0'@;
put 'cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3htbCI6ImN1'@;
put 'c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3Bl'@;
put 'bnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGljYXRpb24vdm5kLm1z'@;
put 'LW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJhcHBsaWNhdGlvbi92'@;
put 'bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv'@;
put 'Y3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRh'@;
put 'Y2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMiLCJhcHBsaWNhdGlv'@;
put 'bi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6'@;
put 'IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0'@;
put 'aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24v'@;
put 'dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m'@;
put 'ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1l'@;
put 'eGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJl'@;
put 'YWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxzIjoiVE9E'@;
put 'TyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNl'@;
put 'ckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8iLCJhcHBsaWNhdGlv'@;
put 'bi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUr'@;
put 'eG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVs'@;
put 'aW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5j'@;
put 'aWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiY3RybHByb3Bz'@;
put 'IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50'@;
put 'LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRp'@;
put 'YWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlh'@;
put 'Z3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIjoi'@;
put 'VE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hlZXQ6Impz'@;
put 'In0sY3Y9ZnVuY3Rpb24oKXt2YXIgUz17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvRW5hYmxl'@;
put 'ZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm'@;
put 'b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoiYXBwbGljYXRpb24v'@;
put 'dm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMifSxzaGVl'@;
put 'dHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRz'@;
put 'aGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0'@;
put 'In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm'@;
put 'b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJl'@;
put 'YWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hl'@;
put 'ZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4'@;
put 'bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMt'@;
put 'ZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVybiBSZShTKS5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKE8pe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1NbT11ba118fChTW09dW2tdPVNbT10ueGxzeCl9KX0pLFJlKFMpLmZvckVhY2goZnVuY3Rpb24oTyl7UmUoU1tPXSkuZm9yRWFjaChmdW5jdGlvbihrKXt5NFtTW09dW2tdXT1PfSl9KSxTfSgpLHV2'@;
put 'PWZ1bmN0aW9uIGtlKFMpe2Zvcih2YXIgTz1bXSxrPVJlKFMpLEs9MDtLIT09ay5sZW5ndGg7KytLKW51bGw9PU9bU1trW0tdXV0mJihPW1Nba1tLXV1dPVtdKSxPW1Nba1tLXV1dLnB1c2goa1tLXSk7cmV0dXJuIE99KHk0KTtHaS5DVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMu'@;
put 'b3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgaHY9SHIoIlR5cGVzIixudWxsLHt4bWxuczpHaS5DVCwieG1sbnM6eHNkIjpHaS54c2QsInhtbG5zOnhzaSI6R2kueHNpfSksWnc9W1sieG1sIiwiYXBwbGljYXRpb24veG1sIl0sWyJiaW4iLCJhcHBsaWNhdGlvbi92bmQubXMt'@;
put 'ZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2Rl'@;
put 'bCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdlL3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYiXSxbImpwZyIsImltYWdlL2pwZWciXSxbImpwZWciLCJpbWFnZS9qcGVnIl0sWyJ0aWYiLCJp'@;
put 'bWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwiYXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIix1di5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKFMpe3JldHVybiBIcigiRGVmYXVsdCIsbnVsbCx7RXh0ZW5zaW9uOlNbMF0sQ29udGVudFR5cGU6U1sxXX0pfSksWGE9e1dC'@;
put 'OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZp'@;
put 'Y2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9u'@;
put 'c2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIsWE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRp'@;
put 'b25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIsWExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0'@;
put 'cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sUHJvcHMiLFZCQToiaHR0cDovL3NjaGVtYXMubWlj'@;
put 'cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3QifTtmdW5jdGlvbiBOcihTKXt2YXIgTz1TLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIFMuc2xpY2UoMCxPKzEpKyJfcmVscy8iK1Muc2xpY2UoTysxKSsiLnJlbHMifWZ1bmN0aW9uIFNmKFMsTyl7dmFyIGs9'@;
put 'eyIhaWQiOnt9fTtpZighUylyZXR1cm4gazsiLyIhPT1PLmNoYXJBdCgwKSYmKE89Ii8iK08pO3ZhciBLPXt9O3JldHVybihTLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBvZT15cihlZSk7aWYoIjxSZWxhdGlvbnNoaXAiPT09b2VbMF0pe3ZhciBtZT17fTttZS5U'@;
put 'eXBlPW9lLlR5cGUsbWUuVGFyZ2V0PW9lLlRhcmdldCxtZS5JZD1vZS5JZCxtZS5UYXJnZXRNb2RlPW9lLlRhcmdldE1vZGU7dmFyIHBlPSJFeHRlcm5hbCI9PT1vZS5UYXJnZXRNb2RlP29lLlRhcmdldDpmbihvZS5UYXJnZXQsTyk7a1twZV09bWUsS1tvZS5JZF09bWV9fSksa1siIWlkIl09'@;
put 'SyxrfUdpLlJFTFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI7dmFyIHU1PUhyKCJSZWxhdGlvbnNoaXBzIixudWxsLHt4bWxuczpHaS5SRUxTfSk7ZnVuY3Rpb24gQWkoUyl7dmFyIE89W0RpLHU1XTtyZXR1cm4gUmUoU1si'@;
put 'IWlkIl0pLmZvckVhY2goZnVuY3Rpb24oayl7T1tPLmxlbmd0aF09SHIoIlJlbGF0aW9uc2hpcCIsbnVsbCxTWyIhaWQiXVtrXSl9KSxPLmxlbmd0aD4yJiYoT1tPLmxlbmd0aF09IjwvUmVsYXRpb25zaGlwcz4iLE9bMV09T1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksTy5qb2luKCIiKX12YXIg'@;
put 'YjQ9W1hhLkhMSU5LLFhhLlhQQVRILFhhLlhNSVNTXTtmdW5jdGlvbiBFcihTLE8sayxLLGVlLG9lKXtpZihlZXx8KGVlPXt9KSxTWyIhaWQiXXx8KFNbIiFpZCJdPXt9KSxPPDApZm9yKE89MTtTWyIhaWQiXVsicklkIitPXTsrK08pO2lmKGVlLklkPSJySWQiK08sZWUuVHlwZT1LLGVlLlRh'@;
put 'cmdldD1rLG9lP2VlLlRhcmdldE1vZGU9b2U6YjQuaW5kZXhPZihlZS5UeXBlKT4tMSYmKGVlLlRhcmdldE1vZGU9IkV4dGVybmFsIiksU1siIWlkIl1bZWUuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgcklkICIrTyk7cmV0dXJuIFNbIiFpZCJdW2VlLklkXT1lZSxTWygi'@;
put 'LyIrZWUuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09ZWUsT312YXIgYWw9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiO2Z1bmN0aW9uIHFjKFMsTyxrKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrUysnIj5cbicsJyAg'@;
put 'ICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvJysoa3x8Im9kZiIpKyIjIitPKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBhMihTLE8pe3JldHVyblsnICA8cmRm'@;
put 'OkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxuczA6aGFzUGFydCB4bWxuczpuczA9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrTysnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxu'@;
put 'Il0uam9pbigiIil9dmFyIFI2PWZ1bmN0aW9uKCl7dmFyIFM9JzxvZmZpY2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpvZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVu'@;
put 'dDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcr'@;
put 'dy52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTfX0oKSxEMD1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJd'@;
put 'LFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJB'@;
put 'dXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3Jl'@;
put 'YXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXTtHaS5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIsWGEuQ09SRV9QUk9QUz0i'@;
put 'aHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIGQ1PWZ1bmN0aW9uKCl7Zm9yKHZhciBTPW5ldyBBcnJheShEMC5sZW5ndGgpLE89MDtPPEQwLmxlbmd0aDsrK08pe3ZhciBrPUQw'@;
put 'W09dLEs9Iig/OiIra1swXS5zbGljZSgwLGtbMF0uaW5kZXhPZigiOiIpKSsiOikiK2tbMF0uc2xpY2Uoa1swXS5pbmRleE9mKCI6IikrMSk7U1tPXT1uZXcgUmVnRXhwKCI8IitLKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrSysiPiIpfXJldHVybiBTfSgpO2Z1bmN0aW9uIGZ2KFMpe3ZhciBP'@;
put 'PXt9O1M9ZnMoUyk7Zm9yKHZhciBrPTA7azxEMC5sZW5ndGg7KytrKXt2YXIgSz1EMFtrXSxlZT1TLm1hdGNoKGQ1W2tdKTtudWxsIT1lZSYmZWUubGVuZ3RoPjAmJihPW0tbMV1dPVFyKGVlWzFdKSksImRhdGUiPT09S1syXSYmT1tLWzFdXSYmKE9bS1sxXV09TmUoT1tLWzFdXSkpfXJldHVy'@;
put 'biBPfXZhciBZdz1IcigiY3A6Y29yZVByb3BlcnRpZXMiLG51bGwseyJ4bWxuczpjcCI6R2kuQ09SRV9QUk9QUywieG1sbnM6ZGMiOkdpLmRjLCJ4bWxuczpkY3Rlcm1zIjpHaS5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6R2kuZGNtaXR5cGUsInhtbG5zOnhzaSI6R2kueHNpfSk7ZnVuY3Rp'@;
put 'b24gTWYoUyxPLGssSyxlZSl7bnVsbCE9ZWVbU118fG51bGw9PU98fCIiPT09T3x8KGVlW1NdPU8sTz1QcihPKSxLW0subGVuZ3RoXT1rP0hyKFMsTyxrKTpWYShTLE8pKX12YXIgcmg9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIsInN0cmluZyJdLFsiQXBwVmVyc2lvbiIsIkFwcFZl'@;
put 'cnNpb24iLCJzdHJpbmciXSxbIkNvbXBhbnkiLCJDb21wYW55Iiwic3RyaW5nIl0sWyJEb2NTZWN1cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5nZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIsImJvb2wi'@;
put 'XSxbIlNoYXJlZERvYyIsIlNoYXJlZERvYyIsImJvb2wiXSxbIkxpbmtzVXBUb0RhdGUiLCJMaW5rc1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1BhaXJzIiwicmF3Il0sWyJUaXRsZXNPZlBhcnRzIiwi'@;
put 'VGl0bGVzT2ZQYXJ0cyIsInJhdyJdXTtmdW5jdGlvbiBfNChTLE8sayxLKXt2YXIgZWU9W107aWYoInN0cmluZyI9PXR5cGVvZiBTKWVlPVhyKFMsSyk7ZWxzZSBmb3IodmFyIG9lPTA7b2U8Uy5sZW5ndGg7KytvZSllZT1lZS5jb25jYXQoU1tvZV0ubWFwKGZ1bmN0aW9uKFZlKXtyZXR1cm57'@;
put 'djpWZX19KSk7dmFyIG1lPSJzdHJpbmciPT10eXBlb2YgTz9YcihPLEspLm1hcChmdW5jdGlvbihWZSl7cmV0dXJuIFZlLnZ9KTpPLHBlPTAsYmU9MDtpZihtZS5sZW5ndGg+MClmb3IodmFyIFBlPTA7UGUhPT1lZS5sZW5ndGg7UGUrPTIpe3N3aXRjaChiZT0rZWVbUGUrMV0udixlZVtQZV0u'@;
put 'dil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMw'@;
put 'ZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgiOmNhc2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxh'@;
put 'clx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBjYWxjdWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpjYXNlIldlcmtibGFkZW4iOmsuV29ya3No'@;
put 'ZWV0cz1iZSxrLlNoZWV0TmFtZXM9bWUuc2xpY2UocGUscGUrYmUpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5hbm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZu'@;
put 'Z2l2bmUgb21yXHhlNWRlciI6ay5OYW1lZFJhbmdlcz1iZSxrLkRlZmluZWROYW1lcz1tZS5zbGljZShwZSxwZStiZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjprLkNoYXJ0c2hlZXRzPWJlLGsuQ2hhcnROYW1lcz1tZS5zbGljZShwZSxwZStiZSl9cGUrPWJlfX1HaS5F'@;
put 'WFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLFhhLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw'@;
put 'cy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIgTDY9SHIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOkdpLkVYVF9QUk9QUywieG1sbnM6dnQiOkdpLnZ0fSk7R2kuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvY3VzdG9t'@;
put 'LXByb3BlcnRpZXMiLFhhLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBPNj0vPFtePl0rPltePF0qL2csbXY9SHIoIlByb3BlcnRpZXMiLG51bGwse3ht'@;
put 'bG5zOkdpLkNVU1RfUFJPUFMsInhtbG5zOnZ0IjpHaS52dH0pO3ZhciBQNj17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RBdXRob3I6Ikxhc3RBdXRob3IiLFJldk51'@;
put 'bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9uOiJBcHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJNYW5hZ2VyIixDb21wYW55OiJDb21wYW55'@;
put 'IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250ZW50U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxGNj1IZShQNik7ZnVuY3Rpb24gSDMoUyxPLGspe1NbTz1GNltPXXx8T109a31mdW5jdGlvbiBOMyhTKXt2YXIgTz1T'@;
put 'LnJlYWRfc2hpZnQoNCksaz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooay8xZTcqTWF0aC5wb3coMiwzMikrTy8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gZGQoUyxPLGspe3ZhciBLPVMubCxlZT1TLnJl'@;
put 'YWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihrKWZvcig7Uy5sLUsmMzspKytTLmw7cmV0dXJuIGVlfWZ1bmN0aW9uIGg1KFMsTyxrKXt2YXIgSz1TLnJlYWRfc2hpZnQoMCwibHB3c3RyIik7cmV0dXJuIGsmJihTLmwrPTQtKEsubGVuZ3RoKzEmMykmMyksS31mdW5jdGlvbiB2dihTLE8sayl7'@;
put 'cmV0dXJuIDMxPT09Tz9oNShTKTpkZChTLDAsayl9ZnVuY3Rpb24gTjYoUyxPLGspe3JldHVybiB2dihTLE8sITE9PT1rPzA6NCl9ZnVuY3Rpb24gYnYoUyl7dmFyIE89Uy5sLGs9RWYoUyxWbik7cmV0dXJuIDA9PVNbUy5sXSYmMD09U1tTLmwrMV0mJlMubC1PJjImJihTLmwrPTIpLFtrLEVm'@;
put 'KFMsWGwpXX1mdW5jdGlvbiBmNShTLE8pe2Zvcih2YXIgaz1TLnJlYWRfc2hpZnQoNCksSz17fSxlZT0wO2VlIT1rOysrZWUpe3ZhciBvZT1TLnJlYWRfc2hpZnQoNCksbWU9Uy5yZWFkX3NoaWZ0KDQpO0tbb2VdPVMucmVhZF9zaGlmdChtZSwxMjAwPT09Tz8idXRmMTZsZSI6InV0ZjgiKS5y'@;
put 'ZXBsYWNlKEUsIiIpLnJlcGxhY2UobSwiISIpLDEyMDA9PT1PJiZtZSUyJiYoUy5sKz0yKX1yZXR1cm4gMyZTLmwmJihTLmw9Uy5sPj4zPDwyKSxLfWZ1bmN0aW9uIEswKFMpe3ZhciBPPVMucmVhZF9zaGlmdCg0KSxrPVMuc2xpY2UoUy5sLFMubCtPKTtyZXR1cm4gUy5sKz1PLCgzJk8pPjAm'@;
put 'JihTLmwrPTQtKDMmTykmMyksa31mdW5jdGlvbiBFZihTLE8sayl7dmFyIGVlLEs9Uy5yZWFkX3NoaWZ0KDIpLG9lPWt8fHt9O2lmKFMubCs9MixPIT09azAmJkshPT1PJiYtMT09PWp3LmluZGV4T2YoTykmJig0MTI2IT0oNjU1MzQmTyl8fDQxMjYhPSg2NTUzNCZLKSkpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJFeHBlY3RlZCB0eXBlICIrTysiIHNhdyAiK0spO3N3aXRjaChPPT09azA/SzpPKXtjYXNlIDI6cmV0dXJuIGVlPVMucmVhZF9zaGlmdCgyLCJpIiksb2UucmF3fHwoUy5sKz0yKSxlZTtjYXNlIDM6cmV0dXJuIFMucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PVMu'@;
put 'cmVhZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBTLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gZGQoUywwLDQpLnJlcGxhY2UoRSwiIik7Y2FzZSAzMTpyZXR1cm4gaDUoUyk7Y2FzZSA2NDpyZXR1cm4gTjMoUyk7Y2FzZSA2NTpyZXR1cm4gSzAoUyk7Y2FzZSA3MTpyZXR1cm4gZnVu'@;
put 'Y3Rpb24gX3YoUyl7dmFyIE89e307cmV0dXJuIE8uU2l6ZT1TLnJlYWRfc2hpZnQoNCksUy5sKz1PLlNpemUrMy0oTy5TaXplLTEpJTQsT30oUyk7Y2FzZSA4MDpyZXR1cm4gTjYoUyxLLCFvZS5yYXcpLnJlcGxhY2UoRSwiIik7Y2FzZSA4MTpyZXR1cm4gZnVuY3Rpb24geXYoUyxPKXtpZigh'@;
put 'Tyl0aHJvdyBuZXcgRXJyb3IoIlZ0VW5hbGlnbmVkU3RyaW5nIG11c3QgaGF2ZSBwb3NpdGl2ZSBsZW5ndGgiKTtyZXR1cm4gdnYoUyxPLDApfShTLEspLnJlcGxhY2UoRSwiIik7Y2FzZSA0MTA4OnJldHVybiBmdW5jdGlvbiBxdyhTKXtmb3IodmFyIE89Uy5yZWFkX3NoaWZ0KDQpLGs9W10s'@;
put 'Sz0wO0s8Ty8yOysrSylrLnB1c2goYnYoUykpO3JldHVybiBrfShTKTtjYXNlIDQxMjY6Y2FzZSA0MTI3OnJldHVybiA0MTI3PT1LP2Z1bmN0aW9uIFYzKFMpe2Zvcih2YXIgTz1TLnJlYWRfc2hpZnQoNCksaz1bXSxLPTA7SyE9TzsrK0spe3ZhciBlZT1TLmw7a1tLXT1TLnJlYWRfc2hpZnQo'@;
put 'MCwibHB3c3RyIikucmVwbGFjZShFLCIiKSxTLmwtZWUmMiYmKFMubCs9Mil9cmV0dXJuIGt9KFMpOmZ1bmN0aW9uIFh3KFMpe2Zvcih2YXIgTz1TLnJlYWRfc2hpZnQoNCksaz1bXSxLPTA7SyE9TzsrK0spa1tLXT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKEUsIiIpO3Jl'@;
put 'dHVybiBrfShTKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrTysiICIrSyl9fWZ1bmN0aW9uIFRmKFMsTyl7dmFyIGs9dm4oNCksSz12big0KTtzd2l0Y2goay53cml0ZV9zaGlmdCg0LDgwPT1TPzMxOlMpLFMpe2Nhc2Ug'@;
put 'MzpLLndyaXRlX3NoaWZ0KC00LE8pO2JyZWFrO2Nhc2UgNTooSz12big4KSkud3JpdGVfc2hpZnQoOCxPLCJmIik7YnJlYWs7Y2FzZSAxMTpLLndyaXRlX3NoaWZ0KDQsTz8xOjApO2JyZWFrO2Nhc2UgNjQ6Sz1mdW5jdGlvbiBxbChTKXt2YXIgaz0oInN0cmluZyI9PXR5cGVvZiBTP25ldyBE'@;
put 'YXRlKERhdGUucGFyc2UoUykpOlMpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsSz1rJU1hdGgucG93KDIsMzIpLGVlPShrLUspL01hdGgucG93KDIsMzIpO2VlKj0xZTc7dmFyIG9lPShLKj0xZTcpL01hdGgucG93KDIsMzIpfDA7b2U+MCYmKEslPU1hdGgucG93KDIsMzIpLGVlKz1vZSk7'@;
put 'dmFyIG1lPXZuKDgpO3JldHVybiBtZS53cml0ZV9zaGlmdCg0LEspLG1lLndyaXRlX3NoaWZ0KDQsZWUpLG1lfShPKTticmVhaztjYXNlIDMxOmNhc2UgODA6Zm9yKChLPXZuKDQrMiooTy5sZW5ndGgrMSkrKE8ubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsTy5sZW5ndGgrMSksSy53'@;
put 'cml0ZV9zaGlmdCgwLE8sImRiY3MiKTtLLmwhPUsubGVuZ3RoOylLLndyaXRlX3NoaWZ0KDEsMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK1MrIiAiK08pfXJldHVybiBVKFtrLEtdKX1mdW5jdGlvbiBpaChT'@;
put 'LE8pe3ZhciBrPVMubCxLPVMucmVhZF9zaGlmdCg0KSxlZT1TLnJlYWRfc2hpZnQoNCksb2U9W10sbWU9MCxwZT0wLGJlPS0xLFBlPXt9O2ZvcihtZT0wO21lIT1lZTsrK21lKXt2YXIgVmU9Uy5yZWFkX3NoaWZ0KDQpLFllPVMucmVhZF9zaGlmdCg0KTtvZVttZV09W1ZlLFllK2tdfW9lLnNv'@;
put 'cnQoZnVuY3Rpb24oRHQsT3Qpe3JldHVybiBEdFsxXS1PdFsxXX0pO3ZhciBldD17fTtmb3IobWU9MDttZSE9ZWU7KyttZSl7aWYoUy5sIT09b2VbbWVdWzFdKXt2YXIgY3Q9ITA7aWYobWU+MCYmTylzd2l0Y2goT1tvZVttZS0xXVswXV0udCl7Y2FzZSAyOlMubCsyPT09b2VbbWVdWzFdJiYo'@;
put 'Uy5sKz0yLGN0PSExKTticmVhaztjYXNlIDgwOmNhc2UgNDEwODpTLmw8PW9lW21lXVsxXSYmKFMubD1vZVttZV1bMV0sY3Q9ITEpfWlmKCghT3x8MD09bWUpJiZTLmw8PW9lW21lXVsxXSYmKGN0PSExLFMubD1vZVttZV1bMV0pLGN0KXRocm93IG5ldyBFcnJvcigiUmVhZCBFcnJvcjogRXhw'@;
put 'ZWN0ZWQgYWRkcmVzcyAiK29lW21lXVsxXSsiIGF0ICIrUy5sKyIgOiIrbWUpfWlmKE8pe3ZhciBUdD1PW29lW21lXVswXV07aWYoZXRbVHQubl09RWYoUyxUdC50LHtyYXc6ITB9KSwidmVyc2lvbiI9PT1UdC5wJiYoZXRbVHQubl09U3RyaW5nKGV0W1R0Lm5dPj4xNikrIi4iKygiMDAwMCIr'@;
put 'U3RyaW5nKDY1NTM1JmV0W1R0Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBhZ2UiPT1UdC5uKXN3aXRjaChldFtUdC5uXSl7Y2FzZSAwOmV0W1R0Lm5dPTEyNTI7Y2FzZSA4NzQ6Y2FzZSA5MzI6Y2FzZSA5MzY6Y2FzZSA5NDk6Y2FzZSA5NTA6Y2FzZSAxMjUwOmNhc2UgMTI1MTpjYXNlIDEyNTM6'@;
put 'Y2FzZSAxMjU0OmNhc2UgMTI1NTpjYXNlIDEyNTY6Y2FzZSAxMjU3OmNhc2UgMTI1ODpjYXNlIDFlNDpjYXNlIDEyMDA6Y2FzZSAxMjAxOmNhc2UgMTI1MjpjYXNlIDY1ZTM6Y2FzZS01MzY6Y2FzZSA2NTAwMTpjYXNlLTUzNTpCKHBlPWV0W1R0Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVs'@;
put 'dDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK2V0W1R0Lm5dKX19ZWxzZSBpZigxPT09b2VbbWVdWzBdKXtpZihwZT1ldC5Db2RlUGFnZT1FZihTLG4yKSxCKHBlKSwtMSE9PWJlKXt2YXIgaXQ9Uy5sO1MubD1vZVtiZV1bMV0sUGU9ZjUoUyxwZSksUy5sPWl0fX1l'@;
put 'bHNlIGlmKDA9PT1vZVttZV1bMF0pe2lmKDA9PT1wZSl7YmU9bWUsUy5sPW9lW21lKzFdWzFdO2NvbnRpbnVlfVBlPWY1KFMscGUpfWVsc2V7dmFyIEJ0LGJ0PVBlW29lW21lXVswXV07c3dpdGNoKFNbUy5sXSl7Y2FzZSA2NTpTLmwrPTQsQnQ9SzAoUyk7YnJlYWs7Y2FzZSAzMDpjYXNlIDMx'@;
put 'OlMubCs9NCxCdD1ONihTLFNbUy5sLTRdKS5yZXBsYWNlKC9cdTAwMDArJC8sIiIpO2JyZWFrO2Nhc2UgMzpTLmwrPTQsQnQ9Uy5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OlMubCs9NCxCdD1TLnJlYWRfc2hpZnQoNCk7YnJlYWs7Y2FzZSA1OlMubCs9NCxCdD1TLnJlYWRfc2hp'@;
put 'ZnQoOCwiZiIpO2JyZWFrO2Nhc2UgMTE6Uy5sKz00LEJ0PWNzKFMsNCk7YnJlYWs7Y2FzZSA2NDpTLmwrPTQsQnQ9TmUoTjMoUykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIitTW1MubF0pfWV0W2J0XT1CdH19cmV0dXJuIFMubD1rK0ssZXR9dmFy'@;
put 'IFY2PVsiQ29kZVBhZ2UiLCJUaHVtYm5haWwiLCJfUElEX0xJTktCQVNFIiwiX1BJRF9ITElOS1MiLCJTeXN0ZW1JZGVudGlmaWVyIiwiRk1USUQiXS5jb25jYXQoWyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyIsIk5hbWVkUmFuZ2VzIiwiRGVmaW5lZE5hbWVzIiwiQ2hhcnRzaGVldHMiLCJD'@;
put 'aGFydE5hbWVzIl0pO2Z1bmN0aW9uIFBjKFMpe3N3aXRjaCh0eXBlb2YgUyl7Y2FzZSJib29sZWFuIjpyZXR1cm4gMTE7Y2FzZSJudW1iZXIiOnJldHVybigwfFMpPT1TPzM6NTtjYXNlInN0cmluZyI6cmV0dXJuIDMxO2Nhc2Uib2JqZWN0IjppZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4g'@;
put 'NjR9cmV0dXJuLTF9ZnVuY3Rpb24gQjYoUyxPLGspe3ZhciBLPXZuKDgpLGVlPVtdLG9lPVtdLG1lPTgscGU9MCxiZT12big4KSxQZT12big4KTtpZihiZS53cml0ZV9zaGlmdCg0LDIpLGJlLndyaXRlX3NoaWZ0KDQsMTIwMCksUGUud3JpdGVfc2hpZnQoNCwxKSxvZS5wdXNoKGJlKSxlZS5w'@;
put 'dXNoKFBlKSxtZSs9OCtiZS5sZW5ndGgsIU8peyhQZT12big4KSkud3JpdGVfc2hpZnQoNCwwKSxlZS51bnNoaWZ0KFBlKTt2YXIgVmU9W3ZuKDQpXTtmb3IoVmVbMF0ud3JpdGVfc2hpZnQoNCxTLmxlbmd0aCkscGU9MDtwZTxTLmxlbmd0aDsrK3BlKXt2YXIgWWU9U1twZV1bMF07Zm9yKChi'@;
put 'ZT12big4KzIqKFllLmxlbmd0aCsxKSsoWWUubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQscGUrMiksYmUud3JpdGVfc2hpZnQoNCxZZS5sZW5ndGgrMSksYmUud3JpdGVfc2hpZnQoMCxZZSwiZGJjcyIpO2JlLmwhPWJlLmxlbmd0aDspYmUud3JpdGVfc2hpZnQoMSwwKTtWZS5wdXNo'@;
put 'KGJlKX1iZT1VKFZlKSxvZS51bnNoaWZ0KGJlKSxtZSs9OCtiZS5sZW5ndGh9Zm9yKHBlPTA7cGU8Uy5sZW5ndGg7KytwZSlpZigoIU98fE9bU1twZV1bMF1dKSYmIShWNi5pbmRleE9mKFNbcGVdWzBdKT4tMSkmJm51bGwhPVNbcGVdWzFdKXt2YXIgZXQ9U1twZV1bMV0sY3Q9MDtpZihPKXt2'@;
put 'YXIgVHQ9a1tjdD0rT1tTW3BlXVswXV1dO2lmKCJ2ZXJzaW9uIj09VHQucCYmInN0cmluZyI9PXR5cGVvZiBldCl7dmFyIGl0PWV0LnNwbGl0KCIuIik7ZXQ9KCtpdFswXTw8MTYpKygraXRbMV18fDApfWJlPVRmKFR0LnQsZXQpfWVsc2V7dmFyIGJ0PVBjKGV0KTstMT09YnQmJihidD0zMSxl'@;
put 'dD1TdHJpbmcoZXQpKSxiZT1UZihidCxldCl9b2UucHVzaChiZSksKFBlPXZuKDgpKS53cml0ZV9zaGlmdCg0LE8/Y3Q6MitwZSksZWUucHVzaChQZSksbWUrPTgrYmUubGVuZ3RofXZhciBCdD04KihvZS5sZW5ndGgrMSk7Zm9yKHBlPTA7cGU8b2UubGVuZ3RoOysrcGUpZWVbcGVdLndyaXRl'@;
put 'X3NoaWZ0KDQsQnQpLEJ0Kz1vZVtwZV0ubGVuZ3RoO3JldHVybiBLLndyaXRlX3NoaWZ0KDQsbWUpLEsud3JpdGVfc2hpZnQoNCxvZS5sZW5ndGgpLFUoW0tdLmNvbmNhdChlZSkuY29uY2F0KG9lKSl9ZnVuY3Rpb24gajYoUyxPLGspe3ZhciBLPVMuY29udGVudDtpZighSylyZXR1cm57fTtn'@;
put 'bihLLDApO3ZhciBlZSxvZSxtZSxwZSxiZT0wO0suY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksSy5yZWFkX3NoaWZ0KDIpO3ZhciBQZT1LLnJlYWRfc2hpZnQoNCksVmU9Sy5yZWFkX3NoaWZ0KDE2KTtpZihWZSE9PXZlLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJlZlIT09ayl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK1ZlKTtpZigxIT09KGVlPUsucmVhZF9zaGlmdCg0KSkmJjIhPT1lZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAjU2V0czogIitlZSk7aWYob2U9Sy5yZWFkX3NoaWZ0KDE2KSxwZT1LLnJlYWRfc2hpZnQoNCksMT09'@;
put 'PWVlJiZwZSE9PUsubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIitwZSsiICE9PSAiK0subCk7Mj09PWVlJiYobWU9Sy5yZWFkX3NoaWZ0KDE2KSxiZT1LLnJlYWRfc2hpZnQoNCkpO3ZhciBUdCxZZT1paChLLE8pLGV0PXtTeXN0ZW1JZGVudGlmaWVyOlBlfTtmb3IodmFy'@;
put 'IGN0IGluIFllKWV0W2N0XT1ZZVtjdF07aWYoZXQuRk1USUQ9b2UsMT09PWVlKXJldHVybiBldDtpZihiZS1LLmw9PTImJihLLmwrPTIpLEsubCE9PWJlKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrSy5sKyIgIT09ICIrYmUpO3RyeXtUdD1paChLLG51bGwpfWNhdGNo'@;
put 'e31mb3IoY3QgaW4gVHQpZXRbY3RdPVR0W2N0XTtyZXR1cm4gZXQuRk1USUQ9W29lLG1lXSxldH1mdW5jdGlvbiB6aShTLE8sayxLLGVlLG9lKXt2YXIgbWU9dm4oZWU/Njg6NDgpLHBlPVttZV07bWUud3JpdGVfc2hpZnQoMiw2NTUzNCksbWUud3JpdGVfc2hpZnQoMiwwKSxtZS53cml0ZV9z'@;
put 'aGlmdCg0LDg0MjQxMjU5OSksbWUud3JpdGVfc2hpZnQoMTYsdmUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCwiaGV4IiksbWUud3JpdGVfc2hpZnQoNCxlZT8yOjEpLG1lLndyaXRlX3NoaWZ0KDE2LE8sImhleCIpLG1lLndyaXRlX3NoaWZ0KDQsZWU/Njg6NDgpO3ZhciBiZT1CNihTLGss'@;
put 'Syk7aWYocGUucHVzaChiZSksZWUpe3ZhciBQZT1CNihlZSxudWxsLG51bGwpO21lLndyaXRlX3NoaWZ0KDE2LG9lLCJoZXgiKSxtZS53cml0ZV9zaGlmdCg0LDY4K2JlLmxlbmd0aCkscGUucHVzaChQZSl9cmV0dXJuIFUocGUpfWZ1bmN0aW9uIHMyKFMsTyl7cmV0dXJuIFMucmVhZF9zaGlm'@;
put 'dChPKSxudWxsfWZ1bmN0aW9uIGNzKFMsTyl7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoTyl9ZnVuY3Rpb24gSmMoUyxPKXtyZXR1cm4gT3x8KE89dm4oMikpLE8ud3JpdGVfc2hpZnQoMiwrISFTKSxPfWZ1bmN0aW9uIE1jKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9u'@;
put 'IG4wKFMsTyl7cmV0dXJuIE98fChPPXZuKDIpKSxPLndyaXRlX3NoaWZ0KDIsUyksT31mdW5jdGlvbiB3NChTLE8pe3JldHVybiBmdW5jdGlvbiB3dihTLE8sayl7Zm9yKHZhciBLPVtdLGVlPVMubCtPO1MubDxlZTspSy5wdXNoKGsoUyxlZS1TLmwpKTtpZihlZSE9PVMubCl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIEt9KFMsTyxNYyl9ZnVuY3Rpb24gWGkoUyxPLGspe3JldHVybiBrfHwoaz12bigyKSksay53cml0ZV9zaGlmdCgxLCJlIj09Tz8rUzorISFTKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1PPzE6MCksa31mdW5jdGlvbiBXYShTLE8sayl7dmFyIEs9'@;
put 'Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZj49MTI/MjoxKSxlZT0ic2Jjcy1jb250IixvZT1GO2smJmsuYmlmZj49OCYmKEY9MTIwMCksayYmOCE9ay5iaWZmPzEyPT1rLmJpZmYmJihlZT0id3N0ciIpOlMucmVhZF9zaGlmdCgxKSYmKGVlPSJkYmNzLWNvbnQiKSxrLmJpZmY+PTImJmsuYmlmZjw9'@;
put 'NSYmKGVlPSJjcHN0ciIpO3ZhciBwZT1LP1MucmVhZF9zaGlmdChLLGVlKToiIjtyZXR1cm4gRj1vZSxwZX1mdW5jdGlvbiBkYyhTKXt2YXIgTz1GO0Y9MTIwMDt2YXIgYmUsaz1TLnJlYWRfc2hpZnQoMiksSz1TLnJlYWRfc2hpZnQoMSksZWU9NCZLLG9lPTgmSyxtZT0xKygxJkspLHBlPTAs'@;
put 'UGU9e307b2UmJihwZT1TLnJlYWRfc2hpZnQoMikpLGVlJiYoYmU9Uy5yZWFkX3NoaWZ0KDQpKTt2YXIgWWU9MD09PWs/IiI6Uy5yZWFkX3NoaWZ0KGssMj09bWU/ImRiY3MtY29udCI6InNiY3MtY29udCIpO2lmKG9lKWZvcihQZS5fUj1bXTtwZS0tID4wOylQZS5fUi5wdXNoKHtpZHg6Uy5y'@;
put 'ZWFkX3NoaWZ0KDIpLGlmbnQ6Uy5yZWFkX3NoaWZ0KDIpfSk7cmV0dXJuIGVlJiYoUy5sKz1iZSksUGUudD1ZZSxvZXx8KFBlLnI9Ijx0PiIrUGUudCsiPC90PiIpLEY9TyxQZX1mdW5jdGlvbiBGYyhTLE8pe3ZhciBrPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj15NShTLnIpKTt2'@;
put 'YXIgSz0iIixlZT0wO2s/Uy5SLmZvckVhY2goZnVuY3Rpb24oVHQpe2VlKyssSys9VHQudnx8IiJ9KTooSz1TLnR8fCIiLGVlPTEpO3ZhciBvZT12bigzKyhlZT4xPzI6MCkpO29lLndyaXRlX3NoaWZ0KDIsSy5sZW5ndGgpLG9lLndyaXRlX3NoaWZ0KDEsMXwoZWU+MT84OjApKSxlZT4xJiZv'@;
put 'ZS53cml0ZV9zaGlmdCgyLGVlKTt2YXIgbWU9dm4oMipLLmxlbmd0aCk7bWUud3JpdGVfc2hpZnQoMipLLmxlbmd0aCxLLCJ1dGYxNmxlIik7dmFyIHBlPVtvZSxtZV07aWYoayl7dmFyIGJlPXZuKDQqUy5SLmxlbmd0aCksUGU9MDtwZS5wdXNoKGJlKTtmb3IodmFyIFZlPTA7VmU8Uy5SLmxl'@;
put 'bmd0aDsrK1ZlKXt2YXIgWWU9Uy5SW1ZlXTtiZS53cml0ZV9zaGlmdCgyLFBlKSxQZSs9KFllLnZ8fCIiKS5sZW5ndGg7dmFyIGV0PVllLnM/czAoTy5jZWxsWGZzLE8uY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpZZS5zfSxPKTowLGN0PU8uY2VsbFhmc1tldF0uZm9udElkO2JlLndyaXRl'@;
put 'X3NoaWZ0KDIsY3Q8ND9jdDpjdCsxKX19cmV0dXJuIFUocGUpfWZ1bmN0aW9uIG5jKFMsTyxrKXtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gUy5yZWFkX3NoaWZ0KE8sImNwc3RyIik7aWYoay5iaWZmPj0xMilyZXR1cm4gUy5yZWFkX3NoaWZ0KE8sImRiY3MtY29udCIp'@;
put 'fXZhciBlZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMucmVhZF9zaGlmdChPLDA9PT1lZT8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gUWMoUyxPLGspe3ZhciBLPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKTtyZXR1cm4gMD09PUs/KFMubCsrLCIiKTpuYyhTLEss'@;
put 'ayl9ZnVuY3Rpb24gWDAoUyxPLGspe2lmKGsuYmlmZj41KXJldHVybiBRYyhTLDAsayk7dmFyIEs9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09Sz8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChLLGsuYmlmZjw9NHx8IVMubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiBzbChT'@;
put 'LE8sayl7cmV0dXJuIGt8fChrPXZuKDMrMipTLmxlbmd0aCkpLGsud3JpdGVfc2hpZnQoMixTLmxlbmd0aCksay53cml0ZV9zaGlmdCgxLDEpLGsud3JpdGVfc2hpZnQoMzEsUywidXRmMTZsZSIpLGt9ZnVuY3Rpb24gQzQoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBPPjA/Uy5y'@;
put 'ZWFkX3NoaWZ0KE8sInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpOiIifWZ1bmN0aW9uIHIwKFMsTyl7T3x8KE89dm4oNisyKlMubGVuZ3RoKSksTy53cml0ZV9zaGlmdCg0LDErUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKU8ud3JpdGVfc2hpZnQoMixTLmNoYXJDb2RlQXQo'@;
put 'aykpO3JldHVybiBPLndyaXRlX3NoaWZ0KDIsMCksT31mdW5jdGlvbiBTNChTKXt2YXIgTz12big1MTIpLGs9MCxLPVMuVGFyZ2V0OyJmaWxlOi8vIj09Sy5zbGljZSgwLDcpJiYoSz1LLnNsaWNlKDcpKTt2YXIgZWU9Sy5pbmRleE9mKCIjIiksb2U9ZWU+LTE/MzE6MjM7c3dpdGNoKEsuY2hh'@;
put 'ckF0KDApKXtjYXNlIiMiOm9lPTI4O2JyZWFrO2Nhc2UiLiI6b2UmPS0zfU8ud3JpdGVfc2hpZnQoNCwyKSxPLndyaXRlX3NoaWZ0KDQsb2UpO3ZhciBtZT1bOCw2ODE1ODI3LDY2MTkyMzcsNDg0OTc4MCw4M107Zm9yKGs9MDtrPG1lLmxlbmd0aDsrK2spTy53cml0ZV9zaGlmdCg0LG1lW2td'@;
put 'KTtpZigyOD09b2UpcjAoSz1LLnNsaWNlKDEpLE8pO2Vsc2UgaWYoMiZvZSl7Zm9yKG1lPSJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxrPTA7azxtZS5sZW5ndGg7KytrKU8ud3JpdGVfc2hpZnQoMSxwYXJzZUludChtZVtrXSwx'@;
put 'NikpO3ZhciBwZT1lZT4tMT9LLnNsaWNlKDAsZWUpOks7Zm9yKE8ud3JpdGVfc2hpZnQoNCwyKihwZS5sZW5ndGgrMSkpLGs9MDtrPHBlLmxlbmd0aDsrK2spTy53cml0ZV9zaGlmdCgyLHBlLmNoYXJDb2RlQXQoaykpO08ud3JpdGVfc2hpZnQoMiwwKSw4Jm9lJiZyMChlZT4tMT9LLnNsaWNl'@;
put 'KGVlKzEpOiIiLE8pfWVsc2V7Zm9yKG1lPSIwMyAwMyAwMCAwMCAwMCAwMCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQoIiAiKSxrPTA7azxtZS5sZW5ndGg7KytrKU8ud3JpdGVfc2hpZnQoMSxwYXJzZUludChtZVtrXSwxNikpO2Zvcih2YXIgYmU9MDsiLi4vIj09Sy5z'@;
put 'bGljZSgzKmJlLDMqYmUrMyl8fCIuLlxcIj09Sy5zbGljZSgzKmJlLDMqYmUrMyk7KSsrYmU7Zm9yKE8ud3JpdGVfc2hpZnQoMixiZSksTy53cml0ZV9zaGlmdCg0LEsubGVuZ3RoLTMqYmUrMSksaz0wO2s8Sy5sZW5ndGgtMypiZTsrK2spTy53cml0ZV9zaGlmdCgxLDI1NSZLLmNoYXJDb2Rl'@;
put 'QXQoayszKmJlKSk7Zm9yKE8ud3JpdGVfc2hpZnQoMSwwKSxPLndyaXRlX3NoaWZ0KDIsNjU1MzUpLE8ud3JpdGVfc2hpZnQoMiw1NzAwNSksaz0wO2s8NjsrK2spTy53cml0ZV9zaGlmdCg0LDApfXJldHVybiBPLnNsaWNlKDAsTy5sKX1mdW5jdGlvbiBrZihTKXtyZXR1cm5bUy5yZWFkX3No'@;
put 'aWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBoZChTLE8pe3ZhciBrPWtmKFMpO3JldHVybiBrWzNdPTAsa31mdW5jdGlvbiB5MChTKXtyZXR1cm57cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMiksaXhmZTpT'@;
put 'LnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIG8yKFMsTyxrLEspe3JldHVybiBLfHwoSz12big2KSksSy53cml0ZV9zaGlmdCgyLFMpLEsud3JpdGVfc2hpZnQoMixPKSxLLndyaXRlX3NoaWZ0KDIsa3x8MCksS31mdW5jdGlvbiBEZihTLE8sayl7dmFyIEs9ay5iaWZmPjg/NDoyO3JldHVybltT'@;
put 'LnJlYWRfc2hpZnQoSyksUy5yZWFkX3NoaWZ0KEssImkiKSxTLnJlYWRfc2hpZnQoSywiaSIpXX1mdW5jdGlvbiBfcyhTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLFIxKFMpXX1mdW5jdGlvbiBjMihTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6'@;
put 'e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6T30sZTp7YzpTLnJlYWRfc2hpZnQoMikscjprfX19ZnVuY3Rpb24gZnUoUyxPKXtyZXR1cm4gT3x8KE89dm4oOCkpLE8ud3JpdGVfc2hpZnQoMixTLnMuciksTy53cml0ZV9zaGlmdCgyLFMuZS5yKSxPLndyaXRlX3NoaWZ0KDIsUy5zLmMpLE8ud3JpdGVf'@;
put 'c2hpZnQoMixTLmUuYyksT31mdW5jdGlvbiBNNChTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFkX3NoaWZ0KDEpLHI6T30sZTp7YzpTLnJlYWRfc2hpZnQoMSkscjprfX19dmFyIGZjPU00O2Z1bmN0aW9uIGc1KFMpe1MubCs9NDt2'@;
put 'YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksSz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW2ssTyxLXX1mdW5jdGlvbiBldShTKXtTLmwrPTIsUy5sKz1TLnJlYWRfc2hpZnQoMil9dmFyIElmPXswOmV1LDQ6ZXUsNTpldSw2OmV1LDc6ZnVuY3Rpb24gT3Uo'@;
put 'Uyl7cmV0dXJuIFMubCs9NCxTLmNmPVMucmVhZF9zaGlmdCgyKSx7fX0sODpldSw5OmV1LDEwOmV1LDExOmV1LDEyOmV1LDEzOmZ1bmN0aW9uIEx1KFMpe3ZhciBPPXt9O3JldHVybiBTLmwrPTQsUy5sKz0xNixPLmZTaGFyZWROb3RlPVMucmVhZF9zaGlmdCgyKSxTLmwrPTQsT30sMTQ6ZXUs'@;
put 'MTU6ZXUsMTY6ZXUsMTc6ZXUsMTg6ZXUsMTk6ZXUsMjA6ZXUsMjE6ZzV9O2Z1bmN0aW9uIEhjKFMsTyl7dmFyIGs9e0JJRkZWZXI6MCxkdDowfTtzd2l0Y2goay5CSUZGVmVyPVMucmVhZF9zaGlmdCgyKSwoTy09Mik+PTImJihrLmR0PVMucmVhZF9zaGlmdCgyKSxTLmwtPTIpLGsuQklGRlZl'@;
put 'cil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3Njg6Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0OmlmKE8+Nil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitrLkJJRkZWZXIpfXJldHVybiBTLnJlYWRfc2hpZnQoTyksa31mdW5j'@;
put 'dGlvbiB4NChTLE8sayl7dmFyIEs9MTUzNixlZT0xNjtzd2l0Y2goay5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOks9MTI4MCxlZT04O2JyZWFrO2Nhc2UiYmlmZjQiOks9NCxlZT02O2JyZWFrO2Nhc2UiYmlmZjMiOks9MyxlZT02O2JyZWFrO2Nh'@;
put 'c2UiYmlmZjIiOks9MixlZT00O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBCSUZGIHZlcnNpb24iKX12YXIgb2U9dm4oZWUpO3JldHVybiBvZS53cml0ZV9zaGlmdCgyLEspLG9lLndyaXRlX3NoaWZ0KDIsTyksZWU+NCYmb2Uud3JpdGVfc2hpZnQoMiwyOTI4'@;
put 'MiksZWU+NiYmb2Uud3JpdGVfc2hpZnQoMiwxOTk3KSxlZT44JiYob2Uud3JpdGVfc2hpZnQoMiw0OTE2MSksb2Uud3JpdGVfc2hpZnQoMiwxKSxvZS53cml0ZV9zaGlmdCgyLDE3OTgpLG9lLndyaXRlX3NoaWZ0KDIsMCkpLG9lfWZ1bmN0aW9uIHUyKFMsTyl7dmFyIGs9IU98fE8uYmlmZj49'@;
put 'OD8yOjEsSz12big4K2sqUy5uYW1lLmxlbmd0aCk7Sy53cml0ZV9zaGlmdCg0LFMucG9zKSxLLndyaXRlX3NoaWZ0KDEsUy5oc3x8MCksSy53cml0ZV9zaGlmdCgxLFMuZHQpLEsud3JpdGVfc2hpZnQoMSxTLm5hbWUubGVuZ3RoKSxPLmJpZmY+PTgmJksud3JpdGVfc2hpZnQoMSwxKSxLLndy'@;
put 'aXRlX3NoaWZ0KGsqUy5uYW1lLmxlbmd0aCxTLm5hbWUsTy5iaWZmPDg/InNiY3MiOiJ1dGYxNmxlIik7dmFyIGVlPUsuc2xpY2UoMCxLLmwpO3JldHVybiBlZS5sPUsubCxlZX1mdW5jdGlvbiByaShTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGh1KFMpfWZ1bmN0aW9uIENzKFMpe3JldHVy'@;
put 'biBTLnJlYWRfc2hpZnQoNCksZTAoUyl9ZnVuY3Rpb24gUHUoUyxPLGspe3JldHVybiBTLnJlYWRfc2hpZnQoNCksdGooUywwLGspfWZ1bmN0aW9uIGQyKFMsTyxrKXt2YXIgSz0wO2smJjI9PWsuYmlmZnx8KEs9Uy5yZWFkX3NoaWZ0KDIpKTt2YXIgZWU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVy'@;
put 'biBrJiYyPT1rLmJpZmYmJihLPTEtKGVlPj4xNSksZWUmPTMyNzY3KSxbe1Vuc3luY2VkOjEmSyxEeVplcm86KDImSyk+PjEsRXhBc2M6KDQmSyk+PjIsRXhEc2M6KDgmSyk+PjN9LGVlXX1mdW5jdGlvbiBjVihTLE8sayxLKXt2YXIgZWU9ayYmNT09ay5iaWZmO0t8fChLPXZuKGVlPzMrTy5s'@;
put 'ZW5ndGg6NSsyKk8ubGVuZ3RoKSksSy53cml0ZV9zaGlmdCgyLFMpLEsud3JpdGVfc2hpZnQoZWU/MToyLE8ubGVuZ3RoKSxlZXx8Sy53cml0ZV9zaGlmdCgxLDEpLEsud3JpdGVfc2hpZnQoKGVlPzE6MikqTy5sZW5ndGgsTyxlZT8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgb2U9Sy5sZW5ndGg+'@;
put 'Sy5sP0suc2xpY2UoMCxLLmwpOks7cmV0dXJuIG51bGw9PW9lLmwmJihvZS5sPW9lLmxlbmd0aCksb2V9dmFyIGgyPVgwO2Z1bmN0aW9uIG5DKFMsTyxrKXt2YXIgSz1TLmwrTyxlZT04IT1rLmJpZmYmJmsuYmlmZj8yOjQsb2U9Uy5yZWFkX3NoaWZ0KGVlKSxtZT1TLnJlYWRfc2hpZnQoZWUp'@;
put 'LHBlPVMucmVhZF9zaGlmdCgyKSxiZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubD1LLHtzOntyOm9lLGM6cGV9LGU6e3I6bWUsYzpiZX19fWZ1bmN0aW9uIG01KFMsTyxrLEspe3ZhciBvZT0ha3x8IWsuYmlmZnx8OD09ay5iaWZmO0t8fChLPXZuKGsmJjU9PWsuYmlmZj8xNjoyMCkpLEsu'@;
put 'd3JpdGVfc2hpZnQoMixvZSYmay5jZWxsU3R5bGVzJiZTLmZvbnRJZCYmKFMuZm9udElkPDQ/Uy5mb250SWQ6Uy5mb250SWQrMSl8fDApO3ZhciBtZT0xO1MucHJvdGVjdGlvbiYmKFMucHJvdGVjdGlvbi5lZGl0YWJsZSYmKG1lJj0tMiksUy5wcm90ZWN0aW9uLmhpZGRlbiYmKG1lfD0yKSks'@;
put 'Uy5zdHlsZT8oSy53cml0ZV9zaGlmdCgyLFMubnVtRm10SWR8fDApLEsud3JpdGVfc2hpZnQoMiw2NTUyNHxtZSkpOihLLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksSy53cml0ZV9zaGlmdCgyLE88PDR8bWUpKTt2YXIgcGU9Uy5hbGlnbm1lbnR8fHt9O2lmKG9lKXt2YXIgYmU9MCxQ'@;
put 'ZT0wO1Q1LmluZGV4T2YocGUuaG9yaXpvbnRhbCk+LTEmJihiZXw9VDUuaW5kZXhPZihwZS5ob3Jpem9udGFsKSkscGUud3JhcFRleHQmJihiZXw9OCksdDguaW5kZXhPZihwZS52ZXJ0aWNhbCk+LTE/YmV8PXQ4LmluZGV4T2YocGUudmVydGljYWwpPDw0Om51bGw9PXBlLnZlcnRpY2FsJiYo'@;
put 'YmV8PTMyKSxLLndyaXRlX3NoaWZ0KDEsYmUpLEsud3JpdGVfc2hpZnQoMSwwKSxwZS5zaHJpbmtUb0ZpdCYmKFBlfD0xNiksSy53cml0ZV9zaGlmdCgyLFBlKTt2YXIgVmU9bnVsbDtudWxsIT1TLmJvcmRlcklkJiYoVmU9ay5Cb3JkZXJzJiZrLkJvcmRlcnNbUy5ib3JkZXJJZHx8MF18fHt9'@;
put 'KTt2YXIgWWU9MCxldD0wLGN0PTA7VmUmJihudWxsIT1WZS5sZWZ0JiZWZS5sZWZ0LnN0eWxlJiYoWWV8PShjdD1nZC5pbmRleE9mKFZlLmxlZnQuc3R5bGUpKT4tMT9jdDowKSxudWxsIT1WZS5yaWdodCYmVmUucmlnaHQuc3R5bGUmJihZZXw9KChjdD1nZC5pbmRleE9mKFZlLnJpZ2h0LnN0'@;
put 'eWxlKSk+LTE/Y3Q6MCk8PDQpLG51bGwhPVZlLnRvcCYmVmUudG9wLnN0eWxlJiYoZXR8PShjdD1nZC5pbmRleE9mKFZlLnRvcC5zdHlsZSkpPi0xP2N0OjApLG51bGwhPVZlLmJvdHRvbSYmVmUuYm90dG9tLnN0eWxlJiYoZXR8PSgoY3Q9Z2QuaW5kZXhPZihWZS5ib3R0b20uc3R5bGUpKT4t'@;
put 'MT9jdDowKTw8NCkpLEsud3JpdGVfc2hpZnQoMSxZZSksSy53cml0ZV9zaGlmdCgxLGV0KSxLLndyaXRlX3NoaWZ0KDIsMCksSy53cml0ZV9zaGlmdCgyLDApLEsud3JpdGVfc2hpZnQoMSwwKTt2YXIgVHQ9MCxpdD1rLkZpbGxzJiZrLkZpbGxzW1MuZmlsbElkfHwwXXx8e307KGl0LmZnQ29s'@;
put 'b3J8fGl0LmJnQ29sb3IpJiYoVHR8PTQpLEsud3JpdGVfc2hpZnQoMSxUdCk7dmFyIGJ0PTA7YnR8PVA0KGl0LmZnQ29sb3IsNjUpLGJ0fD1QNChpdC5iZ0NvbG9yLDY1KTw8NyxLLndyaXRlX3NoaWZ0KDIsYnQpfWVsc2UgSy53cml0ZV9zaGlmdCg0LDApLEsud3JpdGVfc2hpZnQoNCwwKSxL'@;
put 'LndyaXRlX3NoaWZ0KDIsMCk7cmV0dXJuIEt9ZnVuY3Rpb24gRTQoUyxPLGspe3ZhciBLPXkwKFMpOygyPT1rLmJpZmZ8fDk9PU8pJiYrK1MubDt2YXIgZWU9ZnVuY3Rpb24gQmwoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAxPT09Uy5yZWFkX3NoaWZ0KDEpP086MT09PU99KFMp'@;
put 'O3JldHVybiBLLnZhbD1lZSxLLnQ9ITA9PT1lZXx8ITE9PT1lZT8iYiI6ImUiLEt9dmFyIHRrPWZ1bmN0aW9uIHA1KFMsTyxrKXtyZXR1cm4gMD09PU8/IiI6WDAoUywwLGspfTtmdW5jdGlvbiBhQyhTLE8sayl7dmFyIGVlLEs9Uy5yZWFkX3NoaWZ0KDIpLG9lPXtmQnVpbHRJbjoxJkssZldh'@;
put 'bnRBZHZpc2U6Sz4+PjEmMSxmV2FudFBpY3Q6Sz4+PjImMSxmT2xlOks+Pj4zJjEsZk9sZUxpbms6Sz4+PjQmMSxjZjpLPj4+NSYxMDIzLGZJY29uOks+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1rLnNiY2NoJiYoZWU9ZnVuY3Rpb24gejYoUyxPLGspe1MubCs9NDt2YXIgSz1TLmwrKE8tPTQp'@;
put 'LGVlPVdhKFMsMCxrKSxvZT1TLnJlYWRfc2hpZnQoMik7aWYob2UhPT0oSy09Uy5sKSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBBZGRpblVkZjogcGFkZGluZyA9ICIrSysiICE9ICIrb2UpO3JldHVybiBTLmwrPW9lLGVlfShTLE8tMixrKSksb2UuYm9keT1lZXx8Uy5yZWFkX3NoaWZ0'@;
put 'KE8tMiksInN0cmluZyI9PXR5cGVvZiBlZSYmKG9lLk5hbWU9ZWUpLG9lfXZhciBmVj1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJf'@;
put 'eGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtm'@;
put 'dW5jdGlvbiBzQyhTLE8sayl7dmFyIEs9Uy5sK08sZWU9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgxKSxtZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLGJlPTA7KCFrfHxrLmJpZmY+PTUpJiYoNSE9ay5iaWZmJiYoUy5sKz0yKSxi'@;
put 'ZT1TLnJlYWRfc2hpZnQoMiksNT09ay5iaWZmJiYoUy5sKz0yKSxTLmwrPTQpO3ZhciBQZT1uYyhTLG1lLGspOzMyJmVlJiYoUGU9ZlZbUGUuY2hhckNvZGVBdCgwKV0pO3ZhciBWZT1LLVMubDtrJiYyPT1rLmJpZmYmJi0tVmU7dmFyIFllPUshPVMubCYmMCE9PXBlJiZWZT4wP2Z1bmN0aW9u'@;
put 'IE5uZShTLE8sayxLKXt2YXIgbWUsZWU9Uy5sK08sb2U9Y2goUyxLLGspO3JldHVybiBlZSE9PVMubCYmKG1lPUI0KFMsZWUtUy5sLG9lLGspKSxbb2UsbWVdfShTLFZlLGsscGUpOltdO3JldHVybntjaEtleTpvZSxOYW1lOlBlLGl0YWI6YmUscmdjZTpZZX19ZnVuY3Rpb24gU3YoUyxPLGsp'@;
put 'e2lmKGsuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBvQyhTLE8sayl7Mz09U1tTLmwrMV0mJlNbUy5sXSsrO3ZhciBLPVdhKFMsMCxrKTtyZXR1cm4gMz09Sy5jaGFyQ29kZUF0KDApP0suc2xpY2UoMSk6S30oUywwLGspO2Zvcih2YXIgSz1bXSxlZT1TLmwrTyxvZT1TLnJlYWRfc2hpZnQoay5i'@;
put 'aWZmPjg/NDoyKTswIT1vZS0tOylLLnB1c2goRGYoUywwLGspKTtpZihTLmwhPWVlKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK1MubCsiICE9ICIrZWUpO3JldHVybiBLfWZ1bmN0aW9uIHh2KFMsTyxrKXt2YXIgSz1mYyhTLDYpO3N3aXRjaChrLmJpZmYpe2Nhc2UgMjpT'@;
put 'LmwrKyxPLT03O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Uy5sKz0yLE8tPTg7YnJlYWs7ZGVmYXVsdDpTLmwrPTYsTy09MTJ9cmV0dXJuW0ssaEQoUyxPLGspXX12YXIgcms9W107ZnVuY3Rpb24gdlYoUyl7dmFyIE89dm4oMjQpLGs9VnMoU1swXSk7Ty53cml0ZV9zaGlmdCgyLGsuciksTy53cml0'@;
put 'ZV9zaGlmdCgyLGsuciksTy53cml0ZV9zaGlmdCgyLGsuYyksTy53cml0ZV9zaGlmdCgyLGsuYyk7Zm9yKHZhciBLPSJkMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxlZT0wO2VlPDE2OysrZWUpTy53cml0ZV9zaGlmdCgxLHBhcnNl'@;
put 'SW50KEtbZWVdLDE2KSk7cmV0dXJuIFUoW08sUzQoU1sxXSldKX1mdW5jdGlvbiBiVihTKXt2YXIgTz1TWzFdLlRvb2x0aXAsaz12bigxMCsyKihPLmxlbmd0aCsxKSk7ay53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBLPVZzKFNbMF0pO2sud3JpdGVfc2hpZnQoMixLLnIpLGsud3JpdGVfc2hp'@;
put 'ZnQoMixLLnIpLGsud3JpdGVfc2hpZnQoMixLLmMpLGsud3JpdGVfc2hpZnQoMixLLmMpO2Zvcih2YXIgZWU9MDtlZTxPLmxlbmd0aDsrK2VlKWsud3JpdGVfc2hpZnQoMixPLmNoYXJDb2RlQXQoZWUpKTtyZXR1cm4gay53cml0ZV9zaGlmdCgyLDApLGt9ZnVuY3Rpb24gbEMoUyxPLGspe2lm'@;
put 'KCFrLmNlbGxTdHlsZXMpcmV0dXJuIFJuKFMsTyk7dmFyIEs9ayYmay5iaWZmPj0xMj80OjIsZWU9Uy5yZWFkX3NoaWZ0KEspLG9lPVMucmVhZF9zaGlmdChLKSxtZT1TLnJlYWRfc2hpZnQoSykscGU9Uy5yZWFkX3NoaWZ0KEspLGJlPVMucmVhZF9zaGlmdCgyKTsyPT1LJiYoUy5sKz0yKTt2'@;
put 'YXIgUGU9e3M6ZWUsZTpvZSx3Om1lLGl4ZmU6cGUsZmxhZ3M6YmV9O3JldHVybihrLmJpZmY+PTV8fCFrLmJpZmYpJiYoUGUubGV2ZWw9YmU+PjgmNyksUGV9cmtbOF09ZnVuY3Rpb24oUyxPKXt2YXIgaz1TLmwrTztTLmwrPTEwO3ZhciBLPVMucmVhZF9zaGlmdCgyKTtTLmwrPTQsUy5sKz0y'@;
put 'LFMubCs9MixTLmwrPTIsUy5sKz00O3ZhciBlZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9ZWUsUy5sPWsse2ZtdDpLfX07dmFyIGNuZT15MCxhaz13NCxSMD1RYzt2YXIgajM9ZnVuY3Rpb24oKXt2YXIgUz17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2Niwx'@;
put 'MDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAz'@;
put 'OjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAsMTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUy'@;
put 'LDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LE89SGUoezE6NDM3'@;
put 'LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUy'@;
put 'OjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtmdW5jdGlvbiBlZShiZSxQZSl7dmFyIFZlPVBlfHx7fTtyZXR1cm4gVmUuZGF0ZU5GfHwoVmUuZGF0ZU5GPSJ5eXl5bW1kZCIpLHA0KGZ1bmN0aW9uIEsoYmUsUGUpe3ZhciBWZT1bXSxZZT16KDEp'@;
put 'O3N3aXRjaChQZS50eXBlKXtjYXNlImJhc2U2NCI6WWU9eShfZS5kZWNvZGUoYmUpKTticmVhaztjYXNlImJpbmFyeSI6WWU9eShiZSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOlllPWJlfWduKFllLDApO3ZhciBldD1ZZS5yZWFkX3NoaWZ0KDEpLGN0PSEhKDEzNiZldCksVHQ9'@;
put 'ITEsaXQ9ITE7c3dpdGNoKGV0KXtjYXNlIDI6Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMjQ1OmJyZWFrO2Nhc2UgNDg6Y2FzZSA0OTpUdD0hMCxjdD0hMDticmVhaztjYXNlIDE0MDppdD0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIFZl'@;
put 'cnNpb246ICIrZXQudG9TdHJpbmcoMTYpKX12YXIgYnQ9MCxCdD01MjE7Mj09ZXQmJihidD1ZZS5yZWFkX3NoaWZ0KDIpKSxZZS5sKz0zLDIhPWV0JiYoYnQ9WWUucmVhZF9zaGlmdCg0KSksYnQ+MTA0ODU3NiYmKGJ0PTFlNiksMiE9ZXQmJihCdD1ZZS5yZWFkX3NoaWZ0KDIpKTt2YXIgRHQ9'@;
put 'WWUucmVhZF9zaGlmdCgyKSxPdD1QZS5jb2RlcGFnZXx8MTI1MjsyIT1ldCYmKFllLmwrPTE2LFllLnJlYWRfc2hpZnQoMSksMCE9PVllW1llLmxdJiYoT3Q9U1tZZVtZZS5sXV0pLFllLmwrPTEsWWUubCs9MiksaXQmJihZZS5sKz0zNik7Zm9yKHZhciBLdD1bXSxUbj17fSxzcj1NYXRoLm1p'@;
put 'bihZZS5sZW5ndGgsMj09ZXQ/NTIxOkJ0LTEwLShUdD8yNjQ6MCkpLENuPWl0PzMyOjExO1llLmw8c3ImJjEzIT1ZZVtZZS5sXTspc3dpdGNoKFRuPXt9LFRuLm5hbWU9Y3B0YWJsZS51dGlscy5kZWNvZGUoT3QsWWUuc2xpY2UoWWUubCxZZS5sK0NuKSkucmVwbGFjZSgvW1x1MDAwMFxyXG5d'@;
put 'LiokL2csIiIpLFllLmwrPUNuLFRuLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShZZS5yZWFkX3NoaWZ0KDEpKSwyIT1ldCYmIWl0JiYoVG4ub2Zmc2V0PVllLnJlYWRfc2hpZnQoNCkpLFRuLmxlbj1ZZS5yZWFkX3NoaWZ0KDEpLDI9PWV0JiYoVG4ub2Zmc2V0PVllLnJlYWRfc2hpZnQoMikp'@;
put 'LFRuLmRlYz1ZZS5yZWFkX3NoaWZ0KDEpLFRuLm5hbWUubGVuZ3RoJiZLdC5wdXNoKFRuKSwyIT1ldCYmKFllLmwrPWl0PzEzOjE0KSxUbi50eXBlKXtjYXNlIkIiOighVHR8fDghPVRuLmxlbikmJlBlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7'@;
put 'YnJlYWs7Y2FzZSJHIjpjYXNlIlAiOlBlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNl'@;
put 'Ik8iOmNhc2UiVCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK1RuLnR5cGUpfWlmKDEzIT09WWVbWWUubF0mJihZZS5sPUJ0LTEpLDEzIT09WWUucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9y'@;
put 'IG5vdCBmb3VuZCAiK1llLmwrIiAiK1llW1llLmxdKTtZZS5sPUJ0O3ZhciB1cj0wLGVyPTA7Zm9yKFZlWzBdPVtdLGVyPTA7ZXIhPUt0Lmxlbmd0aDsrK2VyKVZlWzBdW2VyXT1LdFtlcl0ubmFtZTtmb3IoO2J0LS0gPjA7KWlmKDQyIT09WWVbWWUubF0pZm9yKCsrWWUubCxWZVsrK3VyXT1b'@;
put 'XSxlcj0wLGVyPTA7ZXIhPUt0Lmxlbmd0aDsrK2VyKXt2YXIgam49WWUuc2xpY2UoWWUubCxZZS5sK0t0W2VyXS5sZW4pO1llLmwrPUt0W2VyXS5sZW4sZ24oam4sMCk7dmFyIHByPWNwdGFibGUudXRpbHMuZGVjb2RlKE90LGpuKTtzd2l0Y2goS3RbZXJdLnR5cGUpe2Nhc2UiQyI6cHIudHJp'@;
put 'bSgpLmxlbmd0aCYmKFZlW3VyXVtlcl09cHIucmVwbGFjZSgvXHMrJC8sIiIpKTticmVhaztjYXNlIkQiOlZlW3VyXVtlcl09OD09PXByLmxlbmd0aD9uZXcgRGF0ZSgrcHIuc2xpY2UoMCw0KSwrcHIuc2xpY2UoNCw2KS0xLCtwci5zbGljZSg2LDgpKTpwcjticmVhaztjYXNlIkYiOlZlW3Vy'@;
put 'XVtlcl09cGFyc2VGbG9hdChwci50cmltKCkpO2JyZWFrO2Nhc2UiKyI6Y2FzZSJJIjpWZVt1cl1bZXJdPWl0PzIxNDc0ODM2NDheam4ucmVhZF9zaGlmdCgtNCwiaSIpOmpuLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UiTCI6c3dpdGNoKHByLnRyaW0oKS50b1VwcGVyQ2FzZSgpKXtj'@;
put 'YXNlIlkiOmNhc2UiVCI6VmVbdXJdW2VyXT0hMDticmVhaztjYXNlIk4iOmNhc2UiRiI6VmVbdXJdW2VyXT0hMTticmVhaztjYXNlIiI6Y2FzZSI/IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVucmVjb2duaXplZCBMOnwiK3ByKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZigh'@;
put 'Y3QpdGhyb3cgbmV3IEVycm9yKCJEQkYgVW5leHBlY3RlZCBNRU1PIGZvciB0eXBlICIrZXQudG9TdHJpbmcoMTYpKTtWZVt1cl1bZXJdPSIjI01FTU8jIyIrKGl0P3BhcnNlSW50KHByLnRyaW0oKSwxMCk6am4ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJOIjoocHI9cHIucmVwbGFjZSgv'@;
put 'XHUwMDAwL2csIiIpLnRyaW0oKSkmJiIuIiE9cHImJihWZVt1cl1bZXJdPStwcnx8MCk7YnJlYWs7Y2FzZSJAIjpWZVt1cl1bZXJdPW5ldyBEYXRlKGpuLnJlYWRfc2hpZnQoLTgsImYiKS02MjEzNTY4MzJlNSk7YnJlYWs7Y2FzZSJUIjpWZVt1cl1bZXJdPW5ldyBEYXRlKDg2NGU1Kihqbi5y'@;
put 'ZWFkX3NoaWZ0KDQpLTI0NDA1ODgpK2puLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6VmVbdXJdW2VyXT1qbi5yZWFkX3NoaWZ0KDQsImkiKS8xZTQ7YnJlYWs7Y2FzZSJPIjpWZVt1cl1bZXJdPS1qbi5yZWFkX3NoaWZ0KC04LCJmIik7YnJlYWs7Y2FzZSJCIjppZihUdCYmOD09S3Rb'@;
put 'ZXJdLmxlbil7VmVbdXJdW2VyXT1qbi5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6am4ubCs9S3RbZXJdLmxlbjticmVhaztjYXNlIjAiOmlmKCJfTnVsbEZsYWdzIj09PUt0W2VyXS5uYW1lKWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBw'@;
put 'b3J0ZWQgZGF0YSB0eXBlICIrS3RbZXJdLnR5cGUpfX1lbHNlIFllLmwrPUR0O2lmKDIhPWV0JiZZZS5sPFllLmxlbmd0aCYmMjYhPVllW1llLmwrK10pdGhyb3cgbmV3IEVycm9yKCJEQkYgRU9GIE1hcmtlciBtaXNzaW5nICIrKFllLmwtMSkrIiBvZiAiK1llLmxlbmd0aCsiICIrWWVbWWUu'@;
put 'bC0xXS50b1N0cmluZygxNikpO3JldHVybiBQZSYmUGUuc2hlZXRSb3dzJiYoVmU9VmUuc2xpY2UoMCxQZS5zaGVldFJvd3MpKSxWZX0oYmUsVmUpLFZlKX12YXIgbWU9e0I6OCxDOjI1MCxMOjEsRDo4LCI/IjowLCIiOjB9O3JldHVybnt2ZXJzaW9uczpbMiwzLDQ4LDQ5LDEzMSwxMzksMTQw'@;
put 'LDI0NV0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gb2UoYmUsUGUpe3RyeXtyZXR1cm4gdGgoZWUoYmUsUGUpLFBlKX1jYXRjaChWZSl7aWYoUGUmJlBlLldURil0aHJvdyBWZX1yZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSx0b19zaGVldDplZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIHBl'@;
put 'KGJlLFBlKXt2YXIgVmU9UGV8fHt9O2lmKCtWZS5jb2RlcGFnZT49MCYmQigrVmUuY29kZXBhZ2UpLCJzdHJpbmciPT1WZS50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIERCRiB0byBKUyBzdHJpbmciKTt2YXIgWWU9dmkoKSxldD1LNChiZSx7aGVhZGVyOjEscmF3OiEwLGNl'@;
put 'bGxEYXRlczohMH0pLGN0PWV0WzBdLFR0PWV0LnNsaWNlKDEpLGl0PTAsYnQ9MCxCdD0wLER0PTE7Zm9yKGl0PTA7aXQ8Y3QubGVuZ3RoOysraXQpaWYobnVsbCE9aXQpe2lmKCsrQnQsIm51bWJlciI9PXR5cGVvZiBjdFtpdF0mJihjdFtpdF09Y3RbaXRdLnRvU3RyaW5nKDEwKSksInN0cmlu'@;
put 'ZyIhPXR5cGVvZiBjdFtpdF0pdGhyb3cgbmV3IEVycm9yKCJEQkYgSW52YWxpZCBjb2x1bW4gbmFtZSAiK2N0W2l0XSsiIHwiK3R5cGVvZiBjdFtpdF0rInwiKTtpZihjdC5pbmRleE9mKGN0W2l0XSkhPT1pdClmb3IoYnQ9MDtidDwxMDI0OysrYnQpaWYoLTE9PWN0LmluZGV4T2YoY3RbaXRd'@;
put 'KyJfIitidCkpe2N0W2l0XSs9Il8iK2J0O2JyZWFrfX12YXIgT3Q9c3MoYmVbIiFyZWYiXSksS3Q9W107Zm9yKGl0PTA7aXQ8PU90LmUuYy1PdC5zLmM7KytpdCl7dmFyIFRuPVtdO2ZvcihidD0wO2J0PFR0Lmxlbmd0aDsrK2J0KW51bGwhPVR0W2J0XVtpdF0mJlRuLnB1c2goVHRbYnRdW2l0'@;
put 'XSk7aWYoMCE9VG4ubGVuZ3RoJiZudWxsIT1jdFtpdF0pe3ZhciBzcj0iIixDbj0iIjtmb3IoYnQ9MDtidDxUbi5sZW5ndGg7KytidCl7c3dpdGNoKHR5cGVvZiBUbltidF0pe2Nhc2UibnVtYmVyIjpDbj0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6Q249IkMiO2JyZWFrO2Nhc2Ui'@;
put 'Ym9vbGVhbiI6Q249IkwiO2JyZWFrO2Nhc2Uib2JqZWN0IjpDbj1UbltidF1pbnN0YW5jZW9mIERhdGU/IkQiOiJDIn1pZigiQyI9PShzcj1zciYmc3IhPUNuPyJDIjpDbikpYnJlYWt9RHQrPW1lW3NyXXx8MCxLdFtpdF09c3J9ZWxzZSBLdFtpdF09Ij8ifXZhciB1cj1ZZS5uZXh0KDMyKTtm'@;
put 'b3IodXIud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLHVyLndyaXRlX3NoaWZ0KDQsVHQubGVuZ3RoKSx1ci53cml0ZV9zaGlmdCgyLDI5NiszMipCdCksdXIud3JpdGVfc2hpZnQoMixEdCksaXQ9MDtpdDw0OysraXQpdXIud3JpdGVfc2hpZnQoNCwwKTtmb3IodXIud3JpdGVfc2hpZnQoNCwo'@;
put 'K09bSF18fDMpPDw4KSxpdD0wLGJ0PTA7aXQ8Y3QubGVuZ3RoOysraXQpaWYobnVsbCE9Y3RbaXRdKXt2YXIgZXI9WWUubmV4dCgzMiksam49KGN0W2l0XS5zbGljZSgtMTApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7ZXIud3JpdGVfc2hpZnQoMSxqbiwic2JjcyIp'@;
put 'LGVyLndyaXRlX3NoaWZ0KDEsIj8iPT1LdFtpdF0/IkMiOkt0W2l0XSwic2JjcyIpLGVyLndyaXRlX3NoaWZ0KDQsYnQpLGVyLndyaXRlX3NoaWZ0KDEsbWVbS3RbaXRdXXx8MCksZXIud3JpdGVfc2hpZnQoMSwwKSxlci53cml0ZV9zaGlmdCgxLDIpLGVyLndyaXRlX3NoaWZ0KDQsMCksZXIu'@;
put 'd3JpdGVfc2hpZnQoMSwwKSxlci53cml0ZV9zaGlmdCg0LDApLGVyLndyaXRlX3NoaWZ0KDQsMCksYnQrPW1lW0t0W2l0XV18fDB9dmFyIHByPVllLm5leHQoMjY0KTtmb3IocHIud3JpdGVfc2hpZnQoNCwxMyksaXQ9MDtpdDw2NTsrK2l0KXByLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGl0PTA7'@;
put 'aXQ8VHQubGVuZ3RoOysraXQpe3ZhciBicj1ZZS5uZXh0KER0KTtmb3IoYnIud3JpdGVfc2hpZnQoMSwwKSxidD0wO2J0PGN0Lmxlbmd0aDsrK2J0KWlmKG51bGwhPWN0W2J0XSlzd2l0Y2goS3RbYnRdKXtjYXNlIkwiOmJyLndyaXRlX3NoaWZ0KDEsbnVsbD09VHRbaXRdW2J0XT82MzpUdFtp'@;
put 'dF1bYnRdPzg0OjcwKTticmVhaztjYXNlIkIiOmJyLndyaXRlX3NoaWZ0KDgsVHRbaXRdW2J0XXx8MCwiZiIpO2JyZWFrO2Nhc2UiRCI6VHRbaXRdW2J0XT8oYnIud3JpdGVfc2hpZnQoNCwoIjAwMDAiK1R0W2l0XVtidF0uZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTQpLCJzYmNzIiksYnIud3Jp'@;
put 'dGVfc2hpZnQoMiwoIjAwIisoVHRbaXRdW2J0XS5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksInNiY3MiKSxici53cml0ZV9zaGlmdCgyLCgiMDAiK1R0W2l0XVtidF0uZ2V0RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6YnIud3JpdGVfc2hpZnQoOCwiMDAwMDAwMDAiLCJzYmNzIik7YnJl'@;
put 'YWs7Y2FzZSJDIjp2YXIgcnI9U3RyaW5nKFR0W2l0XVtidF18fCIiKTtmb3IoYnIud3JpdGVfc2hpZnQoMSxyciwic2JjcyIpLEJ0PTA7QnQ8MjUwLXJyLmxlbmd0aDsrK0J0KWJyLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1cm4gWWUubmV4dCgxKS53cml0ZV9zaGlmdCgxLDI2KSxZZS5lbmQo'@;
put 'KX19fSgpLHBDPWZ1bmN0aW9uKCl7dmFyIFM9e0FBOiJceGMwIixCQToiXHhjMSIsQ0E6Ilx4YzIiLERBOjE5NSxIQToiXHhjNCIsSkE6MTk3LEFFOiJceGM4IixCRToiXHhjOSIsQ0U6Ilx4Y2EiLEhFOiJceGNiIixBSToiXHhjYyIsQkk6Ilx4Y2QiLENJOiJceGNlIixISToiXHhjZiIsQU86'@;
put 'Ilx4ZDIiLEJPOiJceGQzIixDTzoiXHhkNCIsRE86MjEzLEhPOiJceGQ2IixBVToiXHhkOSIsQlU6Ilx4ZGEiLENVOiJceGRiIixIVToiXHhkYyIsQWE6Ilx4ZTAiLEJhOiJceGUxIixDYToiXHhlMiIsRGE6MjI3LEhhOiJceGU0IixKYToyMjksQWU6Ilx4ZTgiLEJlOiJceGU5IixDZToiXHhl'@;
put 'YSIsSGU6Ilx4ZWIiLEFpOiJceGVjIixCaToiXHhlZCIsQ2k6Ilx4ZWUiLEhpOiJceGVmIixBbzoiXHhmMiIsQm86Ilx4ZjMiLENvOiJceGY0IixEbzoyNDUsSG86Ilx4ZjYiLEF1OiJceGY5IixCdToiXHhmYSIsQ3U6Ilx4ZmIiLEh1OiJceGZjIixLQzoiXHhjNyIsS2M6Ilx4ZTciLHE6Ilx4'@;
put 'ZTYiLHo6Ilx1MDE1MyIsYToiXHhjNiIsajoiXHUwMTUyIixETjoyMDksRG46MjQxLEh5OjI1NSxTOjE2OSxjOjE3MCxSOjE3NCwiQiAiOjE4MCwwOjE3NiwxOjE3NywyOjE3OCwzOjE3OSw1OjE4MSw2OjE4Miw3OjE4MyxROjE4NSxrOjE4NixiOjIwOCxpOjIxNixsOjIyMixzOjI0MCx5OjI0'@;
put 'OCwiISI6MTYxLCciJzoxNjIsIiMiOjE2MywiKCI6MTY0LCIlIjoxNjUsIiciOjE2NywiSCAiOjE2OCwiKyI6MTcxLCI7IjoxODcsIjwiOjE4OCwiPSI6MTg5LCI+IjoxOTAsIj8iOjE5MSwieyI6MjIzfSxPPW5ldyBSZWdFeHAoIlx4MWJOKCIrUmUoUykuam9pbigifCIpLnJlcGxhY2UoL1x8'@;
put 'XHxcfC8sInxcXHx8IikucmVwbGFjZSgvKFs/KCkrXSkvZywiXFwkMSIpKyJ8XFx8KSIsImdtIiksaz1mdW5jdGlvbihldCxjdCl7dmFyIFR0PVNbY3RdO3JldHVybiJudW1iZXIiPT10eXBlb2YgVHQ/aWUoVHQpOlR0fSxLPWZ1bmN0aW9uKGV0LGN0LFR0KXt2YXIgaXQ9Y3QuY2hhckNvZGVB'@;
put 'dCgwKS0zMjw8NHxUdC5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09aXQ/ZXQ6aWUoaXQpfTtmdW5jdGlvbiBvZShldCxjdCl7dmFyIHByLFR0PWV0LnNwbGl0KC9bXG5ccl0rLyksaXQ9LTEsYnQ9LTEsQnQ9MCxEdD0wLE90PVtdLEt0PVtdLFRuPW51bGwsc3I9e30sQ249W10sdXI9W10s'@;
put 'ZXI9W10sam49MDtmb3IoK2N0LmNvZGVwYWdlPj0wJiZCKCtjdC5jb2RlcGFnZSk7QnQhPT1UdC5sZW5ndGg7KytCdCl7am49MDt2YXIgUGksYnI9VHRbQnRdLnRyaW0oKS5yZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNGXSkvZyxLKS5yZXBsYWNlKE8saykscnI9YnIucmVw'@;
put 'bGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihXaSl7cmV0dXJuIFdpLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtpZihici5sZW5ndGg+MClzd2l0Y2gocnJbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoi'@;
put 'UCI9PXJyWzFdLmNoYXJBdCgwKSYmS3QucHVzaChici5zbGljZSgzKS5yZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIG5hPSExLGxhPSExLFJpPSExLFJyPSExLEJuPS0xLGpyPS0xO2ZvcihEdD0xO0R0PHJyLmxlbmd0aDsrK0R0KXN3aXRjaChycltEdF0uY2hhckF0KDAp'@;
put 'KXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpidD1wYXJzZUludChycltEdF0uc2xpY2UoMSkpLTEsbGE9ITA7YnJlYWs7Y2FzZSJZIjpmb3IoaXQ9cGFyc2VJbnQocnJbRHRdLnNsaWNlKDEpKS0xLGxhfHwoYnQ9MCkscHI9T3QubGVuZ3RoO3ByPD1pdDsrK3ByKU90W3ByXT1bXTti'@;
put 'cmVhaztjYXNlIksiOiciJz09PShQaT1ycltEdF0uc2xpY2UoMSkpLmNoYXJBdCgwKT9QaT1QaS5zbGljZSgxLFBpLmxlbmd0aC0xKToiVFJVRSI9PT1QaT9QaT0hMDoiRkFMU0UiPT09UGk/UGk9ITE6aXNOYU4oZW4oUGkpKT9pc05hTihzbihQaSkuZ2V0RGF0ZSgpKXx8KFBpPU5lKFBpKSk6'@;
put 'KFBpPWVuKFBpKSxudWxsIT09VG4mJkEuaXNfZGF0ZShUbikmJihQaT1vbihQaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10eXBlb2YgUGkmJiJzdHJpbmciIT0oY3R8fHt9KS50eXBlJiYoY3R8fHt9KS5jb2RlcGFnZSYmKFBpPWNwdGFibGUudXRpbHMuZGVjb2RlKGN0LmNv'@;
put 'ZGVwYWdlLFBpKSksbmE9ITA7YnJlYWs7Y2FzZSJFIjpScj0hMDt2YXIgd3I9TzUocnJbRHRdLnNsaWNlKDEpLHtyOml0LGM6YnR9KTtPdFtpdF1bYnRdPVtPdFtpdF1bYnRdLHdyXTticmVhaztjYXNlIlMiOlJpPSEwLE90W2l0XVtidF09W090W2l0XVtidF0sIlM1UyJdO2JyZWFrO2Nhc2Ui'@;
put 'UiI6Qm49cGFyc2VJbnQocnJbRHRdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6anI9cGFyc2VJbnQocnJbRHRdLnNsaWNlKDEpKS0xO2JyZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2JyKX1pZihuYSYmKE90W2l0XVtidF0m'@;
put 'JjI9PU90W2l0XVtidF0ubGVuZ3RoP090W2l0XVtidF1bMF09UGk6T3RbaXRdW2J0XT1QaSxUbj1udWxsKSxSaSl7aWYoUnIpdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIEhuPUJuPi0xJiZPdFtCbl1banJdO2lmKCFI'@;
put 'bnx8IUhuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgZmluZCBiYXNlIik7T3RbaXRdW2J0XVsxXT1YayhIblsxXSx7cjppdC1CbixjOmJ0LWpyfSl9YnJlYWs7Y2FzZSJGIjp2YXIgenI9MDtmb3IoRHQ9MTtEdDxyci5sZW5ndGg7KytEdClzd2l0Y2go'@;
put 'cnJbRHRdLmNoYXJBdCgwKSl7Y2FzZSJYIjpidD1wYXJzZUludChycltEdF0uc2xpY2UoMSkpLTEsKyt6cjticmVhaztjYXNlIlkiOmZvcihpdD1wYXJzZUludChycltEdF0uc2xpY2UoMSkpLTEscHI9T3QubGVuZ3RoO3ByPD1pdDsrK3ByKU90W3ByXT1bXTticmVhaztjYXNlIk0iOmpuPXBh'@;
put 'cnNlSW50KHJyW0R0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpjYXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6VG49S3RbcGFyc2VJbnQocnJbRHRdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3IoZXI9cnJbRHRdLnNsaWNlKDEpLnNwbGl0KCIg'@;
put 'IikscHI9cGFyc2VJbnQoZXJbMF0sMTApO3ByPD1wYXJzZUludChlclsxXSwxMCk7Kytwcilqbj1wYXJzZUludChlclsyXSwxMCksdXJbcHItMV09MD09PWpuP3toaWRkZW46ITB9Ont3Y2g6am59LEowKHVyW3ByLTFdKTticmVhaztjYXNlIkMiOnVyW2J0PXBhcnNlSW50KHJyW0R0XS5zbGlj'@;
put 'ZSgxKSktMV18fCh1cltidF09e30pO2JyZWFrO2Nhc2UiUiI6Q25baXQ9cGFyc2VJbnQocnJbRHRdLnNsaWNlKDEpKS0xXXx8KENuW2l0XT17fSksam4+MD8oQ25baXRdLmhwdD1qbixDbltpdF0uaHB4PW9oKGpuKSk6MD09PWpuJiYoQ25baXRdLmhpZGRlbj0hMCk7YnJlYWs7ZGVmYXVsdDpp'@;
put 'ZihjdCYmY3QuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYnIpfXpyPDEmJihUbj1udWxsKTticmVhaztkZWZhdWx0OmlmKGN0JiZjdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIiticil9fXJldHVybiBDbi5sZW5ndGg+MCYmKHNyWyIhcm93'@;
put 'cyJdPUNuKSx1ci5sZW5ndGg+MCYmKHNyWyIhY29scyJdPXVyKSxjdCYmY3Quc2hlZXRSb3dzJiYoT3Q9T3Quc2xpY2UoMCxjdC5zaGVldFJvd3MpKSxbT3Qsc3JdfWZ1bmN0aW9uIG1lKGV0LGN0KXt2YXIgVHQ9ZnVuY3Rpb24gZWUoZXQsY3Qpe3N3aXRjaChjdC50eXBlKXtjYXNlImJhc2U2'@;
put 'NCI6cmV0dXJuIG9lKF9lLmRlY29kZShldCksY3QpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gb2UoZXQsY3QpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gb2UoZXQudG9TdHJpbmcoImJpbmFyeSIpLGN0KTtjYXNlImFycmF5IjpyZXR1cm4gb2UodXQoZXQpLGN0KX10aHJvdyBuZXcgRXJyb3IoIlVucmVj'@;
put 'b2duaXplZCB0eXBlICIrY3QudHlwZSl9KGV0LGN0KSxidD1UdFsxXSxCdD1wNChUdFswXSxjdCk7cmV0dXJuIFJlKGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKER0KXtCdFtEdF09YnRbRHRdfSksQnR9ZnVuY3Rpb24gYmUoZXQsY3QsVHQsaXQpe3ZhciBidD0iQztZIisoVHQrMSkrIjtYIisoaXQr'@;
put 'MSkrIjtLIjtzd2l0Y2goZXQudCl7Y2FzZSJuIjpidCs9ZXQudnx8MCxldC5mJiYhZXQuRiYmKGJ0Kz0iO0UiK0g0KGV0LmYse3I6VHQsYzppdH0pKTticmVhaztjYXNlImIiOmJ0Kz1ldC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6YnQrPWV0Lnd8fGV0LnY7YnJlYWs7Y2FzZSJk'@;
put 'IjpidCs9JyInKyhldC53fHxldC52KSsnIic7YnJlYWs7Y2FzZSJzIjpidCs9JyInK2V0LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiBTWyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiBwZShldCxjdCl7cmV0dXJuIHRoKG1lKGV0LGN0KSxjdCl9LHRvX3No'@;
put 'ZWV0Om1lLGZyb21fc2hlZXQ6ZnVuY3Rpb24gWWUoZXQsY3Qpe3ZhciBCdCxUdD1bIklEO1BTaGVldEpTO047RSJdLGl0PVtdLGJ0PXNzKGV0WyIhcmVmIl0pLER0PUFycmF5LmlzQXJyYXkoZXQpLE90PSJcclxuIjtUdC5wdXNoKCJQO1BHZW5lcmFsIiksVHQucHVzaCgiRjtQMDtERzBHODtN'@;
put 'MjU1IiksZXRbIiFjb2xzIl0mJmZ1bmN0aW9uIFBlKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKFR0LGl0KXt2YXIgYnQ9IkY7VyIrKGl0KzEpKyIgIisoaXQrMSkrIiAiO1R0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9mIFR0LndpZHRoJiYhVHQud3B4JiYoVHQud3B4PXc1'@;
put 'KFR0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBUdC53cHgmJiFUdC53Y2gmJihUdC53Y2g9QzUoVHQud3B4KSksIm51bWJlciI9PXR5cGVvZiBUdC53Y2gmJihidCs9TWF0aC5yb3VuZChUdC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQubGVuZ3RoLTEpJiZldC5wdXNoKGJ0KX0pfShUdCxl'@;
put 'dFsiIWNvbHMiXSksZXRbIiFyb3dzIl0mJmZ1bmN0aW9uIFZlKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKFR0LGl0KXt2YXIgYnQ9IkY7IjtUdC5oaWRkZW4/YnQrPSJNMDsiOlR0LmhwdD9idCs9Ik0iKzIwKlR0LmhwdCsiOyI6VHQuaHB4JiYoYnQrPSJNIisyMCpaMyhUdC5ocHgpKyI7'@;
put 'IiksYnQubGVuZ3RoPjImJmV0LnB1c2goYnQrIlIiKyhpdCsxKSl9KX0oVHQsZXRbIiFyb3dzIl0pLFR0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQuZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0LmUuYyxidC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZh'@;
put 'ciBLdD1idC5zLnI7S3Q8PWJ0LmUucjsrK0t0KWZvcih2YXIgVG49YnQucy5jO1RuPD1idC5lLmM7KytUbil7dmFyIHNyPXFpKHtyOkt0LGM6VG59KTsoQnQ9RHQ/KGV0W0t0XXx8W10pW1RuXTpldFtzcl0pJiYobnVsbCE9QnQudnx8QnQuZiYmIUJ0LkYpJiZpdC5wdXNoKGJlKEJ0LDAsS3Qs'@;
put 'VG4pKX1yZXR1cm4gVHQuam9pbihPdCkrT3QraXQuam9pbihPdCkrT3QrIkUiK090fX19KCksRXY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBPKG9lLG1lKXtmb3IodmFyIHBlPW9lLnNwbGl0KCJcbiIpLGJlPS0xLFBlPS0xLFZlPTAsWWU9W107VmUhPT1wZS5sZW5ndGg7KytWZSlpZigiQk9UIiE9'@;
put 'PXBlW1ZlXS50cmltKCkpe2lmKCEoYmU8MCkpe2Zvcih2YXIgZXQ9cGVbVmVdLnRyaW0oKS5zcGxpdCgiLCIpLGN0PWV0WzBdLFR0PWV0WzFdLGl0PXBlWysrVmVdfHwiIjsxJihpdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZWZTxwZS5sZW5ndGgtMTspaXQrPSJcbiIrcGVbKytWZV07'@;
put 'c3dpdGNoKGl0PWl0LnRyaW0oKSwrY3Qpe2Nhc2UtMTppZigiQk9UIj09PWl0KXtZZVsrK2JlXT1bXSxQZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09aXQpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK2l0KTticmVhaztjYXNlIDA6WWVbYmVdW1Bl'@;
put 'XT0iVFJVRSI9PT1pdHx8IkZBTFNFIiE9PWl0JiYoaXNOYU4oZW4oVHQpKT9pc05hTihzbihUdCkuZ2V0RGF0ZSgpKT9UdDpOZShUdCk6ZW4oVHQpKSwrK1BlO2JyZWFrO2Nhc2UgMTooaXQ9KGl0PWl0LnNsaWNlKDEsaXQubGVuZ3RoLTEpKS5yZXBsYWNlKC8iIi9nLCciJykpJiZpdC5tYXRj'@;
put 'aCgvXj0iLioiJC8pJiYoaXQ9aXQuc2xpY2UoMiwtMSkpLFllW2JlXVtQZSsrXT0iIiE9PWl0P2l0Om51bGx9aWYoIkVPRCI9PT1pdClicmVha319ZWxzZSBZZVsrK2JlXT1bXSxQZT0wO3JldHVybiBtZSYmbWUuc2hlZXRSb3dzJiYoWWU9WWUuc2xpY2UoMCxtZS5zaGVldFJvd3MpKSxZZX1m'@;
put 'dW5jdGlvbiBrKG9lLG1lKXtyZXR1cm4gcDQoZnVuY3Rpb24gUyhvZSxtZSl7c3dpdGNoKG1lLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTyhfZS5kZWNvZGUob2UpLG1lKTtjYXNlImJpbmFyeSI6cmV0dXJuIE8ob2UsbWUpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gTyhvZS50b1N0cmluZygi'@;
put 'YmluYXJ5IiksbWUpO2Nhc2UiYXJyYXkiOnJldHVybiBPKHV0KG9lKSxtZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK21lLnR5cGUpfShvZSxtZSksbWUpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBLKG9lLG1lKXtyZXR1cm4gdGgoayhvZSxtZSksbWUpfSx0'@;
put 'b19zaGVldDprLGZyb21fc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgb2U9ZnVuY3Rpb24oYmUsUGUsVmUsWWUsZXQpe2JlLnB1c2goUGUpLGJlLnB1c2goVmUrIiwiK1llKSxiZS5wdXNoKCciJytldC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0sbWU9ZnVuY3Rpb24oYmUsUGUsVmUsWWUpe2JlLnB1'@;
put 'c2goUGUrIiwiK1ZlKSxiZS5wdXNoKDE9PVBlPyciJytZZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOlllKX07cmV0dXJuIGZ1bmN0aW9uKGJlKXt2YXIgWWUsUGU9W10sVmU9c3MoYmVbIiFyZWYiXSksZXQ9QXJyYXkuaXNBcnJheShiZSk7b2UoUGUsIlRBQkxFIiwwLDEsInNoZWV0anMiKSxv'@;
put 'ZShQZSwiVkVDVE9SUyIsMCxWZS5lLnItVmUucy5yKzEsIiIpLG9lKFBlLCJUVVBMRVMiLDAsVmUuZS5jLVZlLnMuYysxLCIiKSxvZShQZSwiREFUQSIsMCwwLCIiKTtmb3IodmFyIGN0PVZlLnMucjtjdDw9VmUuZS5yOysrY3Qpe21lKFBlLC0xLDAsIkJPVCIpO2Zvcih2YXIgVHQ9VmUucy5j'@;
put 'O1R0PD1WZS5lLmM7KytUdCl7dmFyIGl0PXFpKHtyOmN0LGM6VHR9KTtpZihZZT1ldD8oYmVbY3RdfHxbXSlbVHRdOmJlW2l0XSlzd2l0Y2goWWUudCl7Y2FzZSJuIjp2YXIgYnQ9WWUudzshYnQmJm51bGwhPVllLnYmJihidD1ZZS52KSxudWxsPT1idD9tZShQZSwxLDAsWWUuZiYmIVllLkY/'@;
put 'Ij0iK1llLmY6IiIpOm1lKFBlLDAsYnQsIlYiKTticmVhaztjYXNlImIiOm1lKFBlLDAsWWUudj8xOjAsWWUudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjptZShQZSwxLDAsaXNOYU4oWWUudik/WWUudjonPSInK1llLnYrJyInKTticmVhaztjYXNlImQiOlllLnd8fChZZS53PUEu'@;
put 'Zm9ybWF0KFllLnp8fEEuX3RhYmxlWzE0XSxKZShOZShZZS52KSkpKSxtZShQZSwwLFllLncsIlYiKTticmVhaztkZWZhdWx0Om1lKFBlLDEsMCwiIil9ZWxzZSBtZShQZSwxLDAsIiIpfX1yZXR1cm4gbWUoUGUsLTEsMCwiRU9EIiksUGUuam9pbigiXHJcbiIpfX0oKX19KCksSzY9ZnVuY3Rp'@;
put 'b24oKXtmdW5jdGlvbiBTKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiBPKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFwvZywiXFxiIikucmVwbGFjZSgvOi9nLCJcXGMiKS5yZXBsYWNl'@;
put 'KC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBLKFllLGV0KXtyZXR1cm4gcDQoZnVuY3Rpb24gayhZZSxldCl7Zm9yKHZhciBjdD1ZZS5zcGxpdCgiXG4iKSxUdD0tMSxpdD0tMSxidD0wLEJ0PVtdO2J0IT09Y3QubGVuZ3RoOysrYnQpe3ZhciBEdD1jdFtidF0udHJpbSgpLnNwbGl0KCI6Iik7aWYo'@;
put 'ImNlbGwiPT09RHRbMF0pe3ZhciBPdD1WcyhEdFsxXSk7aWYoQnQubGVuZ3RoPD1PdC5yKWZvcihUdD1CdC5sZW5ndGg7VHQ8PU90LnI7KytUdClCdFtUdF18fChCdFtUdF09W10pO3N3aXRjaChUdD1PdC5yLGl0PU90LmMsRHRbMl0pe2Nhc2UidCI6QnRbVHRdW2l0XT1TKER0WzNdKTticmVh'@;
put 'aztjYXNlInYiOkJ0W1R0XVtpdF09K0R0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgS3Q9RHRbRHQubGVuZ3RoLTFdO2Nhc2UidnRjIjpCdFtUdF1baXRdPSJubCI9PT1EdFszXT8hIStEdFs0XTorRHRbNF0sInZ0ZiI9PUR0WzJdJiYoQnRbVHRdW2l0XT1bQnRbVHRdW2l0XSxLdF0pfX19cmV0'@;
put 'dXJuIGV0JiZldC5zaGVldFJvd3MmJihCdD1CdC5zbGljZSgwLGV0LnNoZWV0Um93cykpLEJ0fShZZSxldCksZXQpfXZhciBvZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2Np'@;
put 'YWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksbWU9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLHBlPVsiIyBTb2NpYWxDYWxjIFNwcmVh'@;
put 'ZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLGJlPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIFBlKFllKXtpZighWWV8fCFZZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIgVHQsZXQ9W10sY3Q9W10saXQ9IiIsYnQ9'@;
put 'U28oWWVbIiFyZWYiXSksQnQ9QXJyYXkuaXNBcnJheShZZSksRHQ9YnQucy5yO0R0PD1idC5lLnI7KytEdClmb3IodmFyIE90PWJ0LnMuYztPdDw9YnQuZS5jOysrT3QpaWYoaXQ9cWkoe3I6RHQsYzpPdH0pLChUdD1CdD8oWWVbRHRdfHxbXSlbT3RdOlllW2l0XSkmJm51bGwhPVR0LnYmJiJ6'@;
put 'IiE9PVR0LnQpe3N3aXRjaChjdD1bImNlbGwiLGl0LCJ0Il0sVHQudCl7Y2FzZSJzIjpjYXNlInN0ciI6Y3QucHVzaChPKFR0LnYpKTticmVhaztjYXNlIm4iOlR0LmY/KGN0WzJdPSJ2dGYiLGN0WzNdPSJuIixjdFs0XT1UdC52LGN0WzVdPU8oVHQuZikpOihjdFsyXT0idiIsY3RbM109VHQu'@;
put 'dik7YnJlYWs7Y2FzZSJiIjpjdFsyXT0idnQiKyhUdC5mPyJmIjoiYyIpLGN0WzNdPSJubCIsY3RbNF09VHQudj8iMSI6IjAiLGN0WzVdPU8oVHQuZnx8KFR0LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBLdD1KZShOZShUdC52KSk7Y3RbMl09InZ0YyIsY3RbM109Im5k'@;
put 'IixjdFs0XT0iIitLdCxjdFs1XT1UdC53fHxBLmZvcm1hdChUdC56fHxBLl90YWJsZVsxNF0sS3QpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9ZXQucHVzaChjdC5qb2luKCI6IikpfXJldHVybiBldC5wdXNoKCJzaGVldDpjOiIrKGJ0LmUuYy1idC5zLmMrMSkrIjpyOiIrKGJ0LmUuci1idC5z'@;
put 'LnIrMSkrIjp0dmY6MSIpLGV0LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksZXQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gZWUoWWUsZXQpe3JldHVybiB0aChLKFllLGV0KSxldCl9LHRvX3NoZWV0OkssZnJvbV9zaGVldDpmdW5jdGlvbiBWZShZZSl7'@;
put 'cmV0dXJuW29lLG1lLHBlLG1lLFBlKFllKSxiZV0uam9pbigiXG4iKX19fSgpLHozPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhWZSxZZSxldCxjdCxUdCl7VHQucmF3P1llW2V0XVtjdF09VmU6IiI9PT1WZXx8KFllW2V0XVtjdF09SWkoVmUsVHQpP0lpKFZlLFR0KS52OlZlKX12YXIgaz17NDQ6'@;
put 'IiwiLDk6Ilx0Iiw1OToiOyJ9LEs9ezQ0OjMsOToyLDU5OjF9O2Z1bmN0aW9uIGVlKFZlKXtmb3IodmFyIFllPXt9LGV0PSExLGN0PTAsVHQ9MDtjdDxWZS5sZW5ndGg7KytjdCkzND09KFR0PVZlLmNoYXJDb2RlQXQoY3QpKT9ldD0hZXQ6IWV0JiZUdCBpbiBrJiYoWWVbVHRdPShZZVtUdF18'@;
put 'fDApKzEpO2ZvcihjdCBpbiBUdD1bXSxZZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWWUsY3QpJiZUdC5wdXNoKFtZZVtjdF0sY3RdKTtpZighVHQubGVuZ3RoKWZvcihjdCBpbiBZZT1LKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChZZSxjdCkm'@;
put 'JlR0LnB1c2goW1llW2N0XSxjdF0pO3JldHVybiBUdC5zb3J0KGZ1bmN0aW9uKGl0LGJ0KXtyZXR1cm4gaXRbMF0tYnRbMF18fEtbaXRbMV1dLUtbYnRbMV1dfSksa1tUdC5wb3AoKVsxXV19ZnVuY3Rpb24gbWUoVmUsWWUpe3JldHVybiFZZXx8IVllLlBSTnx8InNlcD0iPT1WZS5zbGljZSgw'@;
put 'LDQpfHxWZS5pbmRleE9mKCJcdCIpPj0wfHxWZS5pbmRleE9mKCIsIik+PTB8fFZlLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBvZShWZSxZZSl7dmFyIGV0PVllfHx7fSxjdD0iIjtudWxsIT1zZSYmbnVsbD09ZXQuZGVuc2UmJihldC5kZW5zZT1zZSk7dmFyIFR0PWV0LmRlbnNlP1tdOnt9'@;
put 'LGl0PXtzOntjOjAscjowfSxlOntjOjAscjowfX07InNlcD0iPT1WZS5zbGljZSgwLDQpPzEzPT1WZS5jaGFyQ29kZUF0KDUpJiYxMD09VmUuY2hhckNvZGVBdCg2KT8oY3Q9VmUuY2hhckF0KDQpLFZlPVZlLnNsaWNlKDcpKToxMz09VmUuY2hhckNvZGVBdCg1KXx8MTA9PVZlLmNoYXJDb2Rl'@;
put 'QXQoNSk/KGN0PVZlLmNoYXJBdCg0KSxWZT1WZS5zbGljZSg2KSk6Y3Q9ZWUoVmUuc2xpY2UoMCwxMDI0KSk6Y3Q9ZWUoVmUuc2xpY2UoMCwxMDI0KSk7dmFyIGJ0PTAsQnQ9MCxEdD0wLE90PTAsS3Q9MCxUbj1jdC5jaGFyQ29kZUF0KDApLHNyPSExLENuPTAsdXI9VmUuY2hhckNvZGVBdCgw'@;
put 'KTtWZT1WZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBlcj1udWxsIT1ldC5kYXRlTkY/ZnVuY3Rpb24gWmUoUyl7dmFyIE89Im51bWJlciI9PXR5cGVvZiBTP0EuX3RhYmxlW1NdOlM7cmV0dXJuIE89Ty5yZXBsYWNlKHdlLCIoXFxkKykiKSxuZXcgUmVnRXhwKCJeIitPKyIkIil9KGV0'@;
put 'LmRhdGVORik6bnVsbDtmdW5jdGlvbiBqbigpe3ZhciBwcj1WZS5zbGljZShPdCxLdCksYnI9e307aWYoJyInPT1wci5jaGFyQXQoMCkmJiciJz09cHIuY2hhckF0KHByLmxlbmd0aC0xKSYmKHByPXByLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyInKSksMD09PXByLmxlbmd0aClici50'@;
put 'PSJ6IjtlbHNlIGlmKGV0LnJhdylici50PSJzIixici52PXByO2Vsc2UgaWYoMD09PXByLnRyaW0oKS5sZW5ndGgpYnIudD0icyIsYnIudj1wcjtlbHNlIGlmKDYxPT1wci5jaGFyQ29kZUF0KDApKTM0PT1wci5jaGFyQ29kZUF0KDEpJiYzND09cHIuY2hhckNvZGVBdChwci5sZW5ndGgtMSk/'@;
put 'KGJyLnQ9InMiLGJyLnY9cHIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpmdW5jdGlvbiBDbmUoUyl7cmV0dXJuIDEhPVMubGVuZ3RofShwcik/KGJyLnQ9Im4iLGJyLmY9cHIuc2xpY2UoMSkpOihici50PSJzIixici52PXByKTtlbHNlIGlmKCJUUlVFIj09cHIpYnIudD0iYiIs'@;
put 'YnIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PXByKWJyLnQ9ImIiLGJyLnY9ITE7ZWxzZSBpZihpc05hTihEdD1lbihwcikpKWlmKCFpc05hTihzbihwcikuZ2V0RGF0ZSgpKXx8ZXImJnByLm1hdGNoKGVyKSl7YnIuej1ldC5kYXRlTkZ8fEEuX3RhYmxlWzE0XTt2YXIgcnI9MDtlciYmcHIubWF0'@;
put 'Y2goZXIpJiYocHI9ZnVuY3Rpb24gUWUoUyxPLGspe3ZhciBLPS0xLGVlPS0xLG9lPS0xLG1lPS0xLHBlPS0xLGJlPS0xOyhPLm1hdGNoKHdlKXx8W10pLmZvckVhY2goZnVuY3Rpb24oWWUsZXQpe3ZhciBjdD1wYXJzZUludChrW2V0KzFdLDEwKTtzd2l0Y2goWWUudG9Mb3dlckNhc2UoKS5j'@;
put 'aGFyQXQoMCkpe2Nhc2UieSI6Sz1jdDticmVhaztjYXNlImQiOm9lPWN0O2JyZWFrO2Nhc2UiaCI6bWU9Y3Q7YnJlYWs7Y2FzZSJzIjpiZT1jdDticmVhaztjYXNlIm0iOm1lPj0wP3BlPWN0OmVlPWN0fX0pLGJlPj0wJiYtMT09cGUmJmVlPj0wJiYocGU9ZWUsZWU9LTEpO3ZhciBQZT0oIiIr'@;
put 'KEs+PTA/SzoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgtNCkrIi0iKygiMDAiKyhlZT49MT9lZToxKSkuc2xpY2UoLTIpKyItIisoIjAwIisob2U+PTE/b2U6MSkpLnNsaWNlKC0yKTs3PT1QZS5sZW5ndGgmJihQZT0iMCIrUGUpLDg9PVBlLmxlbmd0aCYmKFBlPSIyMCIrUGUp'@;
put 'O3ZhciBWZT0oIjAwIisobWU+PTA/bWU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKHBlPj0wP3BlOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhiZT49MD9iZTowKSkuc2xpY2UoLTIpO3JldHVybi0xPT1tZSYmLTE9PXBlJiYtMT09YmU/UGU6LTE9PUsmJi0xPT1lZSYmLTE9PW9lP1ZlOlBl'@;
put 'KyJUIitWZX0oMCxldC5kYXRlTkYscHIubWF0Y2goZXIpfHxbXSkscnI9MSksZXQuY2VsbERhdGVzPyhici50PSJkIixici52PU5lKHByLHJyKSk6KGJyLnQ9Im4iLGJyLnY9SmUoTmUocHIscnIpKSksITEhPT1ldC5jZWxsVGV4dCYmKGJyLnc9QS5mb3JtYXQoYnIueixici52IGluc3RhbmNl'@;
put 'b2YgRGF0ZT9KZShici52KTpici52KSksZXQuY2VsbE5GfHxkZWxldGUgYnIuen1lbHNlIGJyLnQ9InMiLGJyLnY9cHI7ZWxzZSBici50PSJuIiwhMSE9PWV0LmNlbGxUZXh0JiYoYnIudz1wciksYnIudj1EdDtpZigieiI9PWJyLnR8fChldC5kZW5zZT8oVHRbYnRdfHwoVHRbYnRdPVtdKSxU'@;
put 'dFtidF1bQnRdPWJyKTpUdFtxaSh7YzpCdCxyOmJ0fSldPWJyKSx1cj1WZS5jaGFyQ29kZUF0KE90PUt0KzEpLGl0LmUuYzxCdCYmKGl0LmUuYz1CdCksaXQuZS5yPGJ0JiYoaXQuZS5yPWJ0KSxDbj09VG4pKytCdDtlbHNlIGlmKEJ0PTAsKytidCxldC5zaGVldFJvd3MmJmV0LnNoZWV0Um93'@;
put 'czw9YnQpcmV0dXJuITB9ZTpmb3IoO0t0PFZlLmxlbmd0aDsrK0t0KXN3aXRjaChDbj1WZS5jaGFyQ29kZUF0KEt0KSl7Y2FzZSAzNDozND09PXVyJiYoc3I9IXNyKTticmVhaztjYXNlIFRuOmNhc2UgMTA6Y2FzZSAxMzppZighc3ImJmpuKCkpYnJlYWsgZX1yZXR1cm4gS3QtT3Q+MCYmam4o'@;
put 'KSxUdFsiIXJlZiJdPXJhKGl0KSxUdH0oVmUsWWUpOnA0KGZ1bmN0aW9uIE8oVmUsWWUpe3ZhciBldD1ZZXx8e30sY3Q9W107aWYoIVZlfHwwPT09VmUubGVuZ3RoKXJldHVybiBjdDtmb3IodmFyIFR0PVZlLnNwbGl0KC9bXHJcbl0vKSxpdD1UdC5sZW5ndGgtMTtpdD49MCYmMD09PVR0W2l0'@;
put 'XS5sZW5ndGg7KS0taXQ7Zm9yKHZhciBidD0xMCxCdD0wLER0PTA7RHQ8PWl0OysrRHQpLTE9PShCdD1UdFtEdF0uaW5kZXhPZigiICIpKT9CdD1UdFtEdF0ubGVuZ3RoOkJ0KyssYnQ9TWF0aC5tYXgoYnQsQnQpO2ZvcihEdD0wO0R0PD1pdDsrK0R0KXtjdFtEdF09W107dmFyIE90PTA7Zm9y'@;
put 'KFMoVHRbRHRdLnNsaWNlKDAsYnQpLnRyaW0oKSxjdCxEdCxPdCxldCksT3Q9MTtPdDw9KFR0W0R0XS5sZW5ndGgtYnQpLzEwKzE7KytPdClTKFR0W0R0XS5zbGljZShidCsxMCooT3QtMSksYnQrMTAqT3QpLnRyaW0oKSxjdCxEdCxPdCxldCl9cmV0dXJuIGV0LnNoZWV0Um93cyYmKGN0PWN0'@;
put 'LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksY3R9KFZlLFllKSxZZSl9ZnVuY3Rpb24gcGUoVmUsWWUpe3ZhciBldD0iIixjdD0ic3RyaW5nIj09WWUudHlwZT9bMCwwLDAsMF06aU0oVmUsWWUpO3N3aXRjaChZZS50eXBlKXtjYXNlImJhc2U2NCI6ZXQ9X2UuZGVjb2RlKFZlKTticmVhaztjYXNl'@;
put 'ImJpbmFyeSI6Y2FzZSJzdHJpbmciOmV0PVZlO2JyZWFrO2Nhc2UiYnVmZmVyIjpldD02NTAwMT09WWUuY29kZXBhZ2U/VmUudG9TdHJpbmcoInV0ZjgiKTpZZS5jb2RlcGFnZSYmdHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdlLFZlKTpWZS50b1N0'@;
put 'cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6ZXQ9dXQoVmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1llLnR5cGUpfXJldHVybiAyMzk9PWN0WzBdJiYxODc9PWN0WzFdJiYxOTE9PWN0WzJdP2V0PWZzKGV0LnNsaWNlKDMpKToi'@;
put 'YmluYXJ5Ij09WWUudHlwZSYmdHlwZW9mIGNwdGFibGU8InUiJiZZZS5jb2RlcGFnZSYmKGV0PWNwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdlLGNwdGFibGUudXRpbHMuZW5jb2RlKDI4NTkxLGV0KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246Ij09ZXQuc2xpY2UoMCwxOSk/SzYudG9f'@;
put 'c2hlZXQoInN0cmluZyI9PVllLnR5cGU/ZXQ6ZnMoZXQpLFllKTptZShldCxZZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGJlKFZlLFllKXtyZXR1cm4gdGgocGUoVmUsWWUpLFllKX0sdG9fc2hlZXQ6cGUsZnJvbV9zaGVldDpmdW5jdGlvbiBQZShWZSl7Zm9yKHZhciBjdCxZZT1b'@;
put 'XSxldD1zcyhWZVsiIXJlZiJdKSxUdD1BcnJheS5pc0FycmF5KFZlKSxpdD1ldC5zLnI7aXQ8PWV0LmUucjsrK2l0KXtmb3IodmFyIGJ0PVtdLEJ0PWV0LnMuYztCdDw9ZXQuZS5jOysrQnQpe3ZhciBEdD1xaSh7cjppdCxjOkJ0fSk7aWYoKGN0PVR0PyhWZVtpdF18fFtdKVtCdF06VmVbRHRd'@;
put 'KSYmbnVsbCE9Y3Qudil7Zm9yKHZhciBPdD0oY3Qud3x8KHlsKGN0KSxjdC53KXx8IiIpLnNsaWNlKDAsMTApO090Lmxlbmd0aDwxMDspT3QrPSIgIjtidC5wdXNoKE90KygwPT09QnQ/IiAiOiIiKSl9ZWxzZSBidC5wdXNoKCIgICAgICAgICAgIil9WWUucHVzaChidC5qb2luKCIiKSl9cmV0'@;
put 'dXJuIFllLmpvaW4oIlxuIil9fX0oKSxUdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoQm4sanIsd3Ipe2lmKEJuKXtnbihCbixCbi5sfHwwKTtmb3IodmFyIEhuPXdyLkVudW18fFJpO0JuLmw8Qm4ubGVuZ3RoOyl7dmFyIHpyPUJuLnJlYWRfc2hpZnQoMiksV2k9SG5benJdfHxIbls2NTUzNV0s'@;
put 'Q2k9Qm4ucmVhZF9zaGlmdCgyKSx3YT1Cbi5sK0NpLG9zPVdpLmYmJldpLmYoQm4sQ2ksd3IpO2lmKEJuLmw9d2EsanIob3MsV2ksenIpKXJldHVybn19fWZ1bmN0aW9uIGsoQm4sanIpe2lmKCFCbilyZXR1cm4gQm47dmFyIHdyPWpyfHx7fTtudWxsIT1zZSYmbnVsbD09d3IuZGVuc2UmJih3'@;
put 'ci5kZW5zZT1zZSk7dmFyIEhuPXdyLmRlbnNlP1tdOnt9LHpyPSJTaGVldDEiLFdpPTAsQ2k9e30sd2E9W3pyXSxvcz1bXSxpYT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LE9zPXdyLnNoZWV0Um93c3x8MDtpZigyPT1CblsyXSl3ci5FbnVtPVJpLFMoQm4sZnVuY3Rpb24oVmksSW8sRm4p'@;
put 'e3N3aXRjaChGbil7Y2FzZSAwOndyLnZlcnM9VmksVmk+PTQwOTYmJih3ci5xcHJvPSEwKTticmVhaztjYXNlIDY6aWE9Vmk7YnJlYWs7Y2FzZSAxNTpjYXNlIDUxOndyLnFwcm98fChWaVsxXS52PVZpWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2OjE0PT1GbiYmISgx'@;
put 'MTImflZpWzJdKSYmKDE1JlZpWzJdKT4xJiYoMTUmVmlbMl0pPDE1JiYoVmlbMV0uej13ci5kYXRlTkZ8fEEuX3RhYmxlWzE0XSx3ci5jZWxsRGF0ZXMmJihWaVsxXS50PSJkIixWaVsxXS52PW9uKFZpWzFdLnYpKSk7dmFyIFlzPXdyLmRlbnNlPyhIbltWaVswXS5yXXx8W10pW1ZpWzBdLmNd'@;
put 'OkhuW3FpKFZpWzBdKV07aWYoWXMpe1lzLnQ9VmlbMV0udCxZcy52PVZpWzFdLnYsbnVsbCE9VmlbMV0ueiYmKFlzLno9VmlbMV0ueiksbnVsbCE9VmlbMV0uZiYmKFlzLmY9VmlbMV0uZik7YnJlYWt9d3IuZGVuc2U/KEhuW1ZpWzBdLnJdfHwoSG5bVmlbMF0ucl09W10pLEhuW1ZpWzBdLnJd'@;
put 'W1ZpWzBdLmNdPVZpWzFdKTpIbltxaShWaVswXSldPVZpWzFdfX0sd3IpO2Vsc2V7aWYoMjYhPUJuWzJdJiYxNCE9Qm5bMl0pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgTE9UVVMgQk9GICIrQm5bMl0pO3dyLkVudW09UnIsMTQ9PUJuWzJdJiYod3IucXBybz0hMCxCbi5sPTApLFMo'@;
put 'Qm4sZnVuY3Rpb24oVmksSW8sRm4pe3N3aXRjaChGbil7Y2FzZSAyMjpWaVsxXS52PVZpWzFdLnYuc2xpY2UoMSk7Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAzNzpjYXNlIDM5OmNhc2UgNDA6aWYoVmlbM10+V2kmJihIblsiIXJlZiJdPXJhKGlhKSxDaVt6cl09SG4sSG49d3IuZGVu'@;
put 'c2U/W106e30saWE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSx3YS5wdXNoKHpyPSJTaGVldCIrKChXaT1WaVszXSkrMSkpKSxPcz4wJiZWaVswXS5yPj1PcylicmVhazt3ci5kZW5zZT8oSG5bVmlbMF0ucl18fChIbltWaVswXS5yXT1bXSksSG5bVmlbMF0ucl1bVmlbMF0uY109VmlbMV0p'@;
put 'OkhuW3FpKFZpWzBdKV09VmlbMV0saWEuZS5jPFZpWzBdLmMmJihpYS5lLmM9VmlbMF0uYyksaWEuZS5yPFZpWzBdLnImJihpYS5lLnI9VmlbMF0ucik7YnJlYWs7Y2FzZSAyNzpWaVsxNGUzXSYmKG9zW1ZpWzE0ZTNdWzBdXT1WaVsxNGUzXVsxXSl9fSx3cil9aWYoSG5bIiFyZWYiXT1yYShp'@;
put 'YSksQ2lbenJdPUhuLCFvcy5sZW5ndGgpcmV0dXJue1NoZWV0TmFtZXM6d2EsU2hlZXRzOkNpfTtmb3IodmFyIFBhPXt9LHVzPVtdLHFhPTA7cWE8b3MubGVuZ3RoOysrcWEpQ2lbd2FbcWFdXSYmKHVzLnB1c2gob3NbcWFdKSxQYVtvc1txYV1dPUNpW3dhW3FhXV0pO3JldHVybntTaGVldE5h'@;
put 'bWVzOnVzLFNoZWV0czpQYX19ZnVuY3Rpb24gUGUoQm4sanIsd3Ipe3ZhciBIbj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiB3ci5xcHJvJiYyMDc2OCE9d3IudmVycz8oSG5bMF0uYz1Cbi5yZWFkX3NoaWZ0KDEpLEJuLmwrKyxIblswXS5yPUJuLnJlYWRfc2hpZnQoMiksQm4u'@;
put 'bCs9Mik6KEhuWzJdPUJuLnJlYWRfc2hpZnQoMSksSG5bMF0uYz1Cbi5yZWFkX3NoaWZ0KDIpLEhuWzBdLnI9Qm4ucmVhZF9zaGlmdCgyKSksSG59ZnVuY3Rpb24gVmUoQm4sanIsd3Ipe3ZhciBIbj1Cbi5sK2pyLHpyPVBlKEJuLDAsd3IpO2lmKHpyWzFdLnQ9InMiLDIwNzY4PT13ci52ZXJz'@;
put 'KXtCbi5sKys7dmFyIFdpPUJuLnJlYWRfc2hpZnQoMSk7cmV0dXJuIHpyWzFdLnY9Qm4ucmVhZF9zaGlmdChXaSwidXRmOCIpLHpyfXJldHVybiB3ci5xcHJvJiZCbi5sKyssenJbMV0udj1Cbi5yZWFkX3NoaWZ0KEhuLUJuLmwsImNzdHIiKSx6cn1mdW5jdGlvbiBZZShCbixqcix3cil7dmFy'@;
put 'IEhuPXZuKDcrd3IubGVuZ3RoKTtIbi53cml0ZV9zaGlmdCgxLDI1NSksSG4ud3JpdGVfc2hpZnQoMixqciksSG4ud3JpdGVfc2hpZnQoMixCbiksSG4ud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciB6cj0wO3pyPEhuLmxlbmd0aDsrK3pyKXt2YXIgV2k9d3IuY2hhckNvZGVBdCh6cik7SG4u'@;
put 'd3JpdGVfc2hpZnQoMSxXaT49MTI4Pzk1OldpKX1yZXR1cm4gSG4ud3JpdGVfc2hpZnQoMSwwKSxIbn1mdW5jdGlvbiBjdChCbixqcix3cil7dmFyIEhuPXZuKDcpO3JldHVybiBIbi53cml0ZV9zaGlmdCgxLDI1NSksSG4ud3JpdGVfc2hpZnQoMixqciksSG4ud3JpdGVfc2hpZnQoMixCbiks'@;
put 'SG4ud3JpdGVfc2hpZnQoMix3ciwiaSIpLEhufWZ1bmN0aW9uIGl0KEJuLGpyLHdyKXt2YXIgSG49dm4oMTMpO3JldHVybiBIbi53cml0ZV9zaGlmdCgxLDI1NSksSG4ud3JpdGVfc2hpZnQoMixqciksSG4ud3JpdGVfc2hpZnQoMixCbiksSG4ud3JpdGVfc2hpZnQoOCx3ciwiZiIpLEhufWZ1'@;
put 'bmN0aW9uIEJ0KEJuLGpyLHdyKXt2YXIgSG49MzI3NjgmanI7cmV0dXJuIGpyPShIbj9CbjowKSsoKGpyJj0tMzI3NjkpPj04MTkyP2pyLTE2Mzg0OmpyKSwoSG4/IiI6IiQiKSsod3I/a2EoanIpOmppKGpyKSl9dmFyIE90PXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVO'@;
put 'IiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxLdD1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIisiLCItIiwiKiIsIi8iLCJeIiwiPSIsIjw+IiwiPD0iLCI+'@;
put 'PSIsIjwiLCI+IiwiIiwiIiwiIiwiIiwiJiIsIiIsIiIsIiIsIiIsIiIsIiIsIiJdO2Z1bmN0aW9uIHNyKEJuKXt2YXIganI9W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4ganJbMF0ucj1Cbi5yZWFkX3NoaWZ0KDIpLGpyWzNdPUJuW0JuLmwrK10sanJbMF0uYz1CbltCbi5sKytd'@;
put 'LGpyfWZ1bmN0aW9uIHVyKEJuLGpyLHdyLEhuKXt2YXIgenI9dm4oNitIbi5sZW5ndGgpO3pyLndyaXRlX3NoaWZ0KDIsQm4pLHpyLndyaXRlX3NoaWZ0KDEsd3IpLHpyLndyaXRlX3NoaWZ0KDEsanIpLHpyLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgV2k9MDtXaTxIbi5sZW5ndGg7KytX'@;
put 'aSl7dmFyIENpPUhuLmNoYXJDb2RlQXQoV2kpO3pyLndyaXRlX3NoaWZ0KDEsQ2k+PTEyOD85NTpDaSl9cmV0dXJuIHpyLndyaXRlX3NoaWZ0KDEsMCksenJ9ZnVuY3Rpb24gam4oQm4sanIpe3ZhciB3cj1zcihCbiksSG49Qm4ucmVhZF9zaGlmdCg0KSx6cj1Cbi5yZWFkX3NoaWZ0KDQpLFdp'@;
put 'PUJuLnJlYWRfc2hpZnQoMik7aWYoNjU1MzU9PVdpKXJldHVybiAwPT09SG4mJjMyMjEyMjU0NzI9PT16cj8od3JbMV0udD0iZSIsd3JbMV0udj0xNSk6MD09PUhuJiYzNDg5NjYwOTI4PT09enI/KHdyWzFdLnQ9ImUiLHdyWzFdLnY9NDIpOndyWzFdLnY9MCx3cjt2YXIgQ2k9MzI3NjgmV2k7'@;
put 'cmV0dXJuIFdpPSgzMjc2NyZXaSktMTY0NDYsd3JbMV0udj0oMS0yKkNpKSooenIqTWF0aC5wb3coMixXaSszMikrSG4qTWF0aC5wb3coMixXaSkpLHdyfWZ1bmN0aW9uIHByKEJuLGpyLHdyLEhuKXt2YXIgenI9dm4oMTQpO2lmKHpyLndyaXRlX3NoaWZ0KDIsQm4pLHpyLndyaXRlX3NoaWZ0'@;
put 'KDEsd3IpLHpyLndyaXRlX3NoaWZ0KDEsanIpLDA9PUhuKXJldHVybiB6ci53cml0ZV9zaGlmdCg0LDApLHpyLndyaXRlX3NoaWZ0KDQsMCksenIud3JpdGVfc2hpZnQoMiw2NTUzNSksenI7dmFyIFdpPTAsQ2k9MCxvcz0wO3JldHVybiBIbjwwJiYoV2k9MSxIbj0tSG4pLENpPTB8TWF0aC5s'@;
put 'b2cyKEhuKSwyMTQ3NDgzNjQ4Jihvcz0oSG4vPU1hdGgucG93KDIsQ2ktMzEpKT4+PjApfHwoKytDaSxvcz0oSG4vPTIpPj4+MCksSG4tPW9zLG9zfD0yMTQ3NDgzNjQ4LG9zPj4+PTAsSG4qPU1hdGgucG93KDIsMzIpLHpyLndyaXRlX3NoaWZ0KDQsSG4+Pj4wKSx6ci53cml0ZV9zaGlmdCg0'@;
put 'LG9zKSx6ci53cml0ZV9zaGlmdCgyLENpKz0xNjM4MysoV2k/MzI3Njg6MCkpLHpyfWZ1bmN0aW9uIFNpKEJuLGpyKXt2YXIgd3I9c3IoQm4pLEhuPUJuLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVybiB3clsxXS52PUhuLHdyfWZ1bmN0aW9uIGxhKEJuLGpyKXt2YXIgd3I9dm4oNStCbi5sZW5n'@;
put 'dGgpO3dyLndyaXRlX3NoaWZ0KDIsMTRlMyksd3Iud3JpdGVfc2hpZnQoMixqcik7Zm9yKHZhciBIbj0wO0huPEJuLmxlbmd0aDsrK0huKXt2YXIgenI9Qm4uY2hhckNvZGVBdChIbik7d3Jbd3IubCsrXT16cj4xMjc/OTU6enJ9cmV0dXJuIHdyW3dyLmwrK109MCx3cn12YXIgUmk9ezA6e246'@;
put 'IkJPRiIsZjpNY30sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01PREUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6e246IlNZTkMifSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiBwZShCbil7dmFyIGpyPXtzOntjOjAscjowfSxlOntjOjAscjowfX07cmV0dXJuIGpyLnMuYz1C'@;
put 'bi5yZWFkX3NoaWZ0KDIpLGpyLnMucj1Cbi5yZWFkX3NoaWZ0KDIpLGpyLmUuYz1Cbi5yZWFkX3NoaWZ0KDIpLGpyLmUucj1Cbi5yZWFkX3NoaWZ0KDIpLDY1NTM1PT1qci5zLmMmJihqci5zLmM9anIuZS5jPWpyLnMucj1qci5lLnI9MCksanJ9fSw3OntuOiJXSU5ET1cxIn0sODp7bjoiQ09M'@;
put 'VzEifSw5OntuOiJXSU5UV08ifSwxMDp7bjoiQ09MVzIifSwxMTp7bjoiTkFNRSJ9LDEyOntuOiJCTEFOSyJ9LDEzOntuOiJJTlRFR0VSIixmOmZ1bmN0aW9uIGV0KEJuLGpyLHdyKXt2YXIgSG49UGUoQm4sMCx3cik7cmV0dXJuIEhuWzFdLnY9Qm4ucmVhZF9zaGlmdCgyLCJpIiksSG59fSwx'@;
put 'NDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIFR0KEJuLGpyLHdyKXt2YXIgSG49UGUoQm4sMCx3cik7cmV0dXJuIEhuWzFdLnY9Qm4ucmVhZF9zaGlmdCg4LCJmIiksSG59fSwxNTp7bjoiTEFCRUwiLGY6VmV9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIGJ0KEJuLGpyLHdyKXt2YXIgSG49'@;
put 'Qm4ubCtqcix6cj1QZShCbiwwLHdyKTtpZih6clsxXS52PUJuLnJlYWRfc2hpZnQoOCwiZiIpLHdyLnFwcm8pQm4ubD1IbjtlbHNle3ZhciBXaT1Cbi5yZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBUbihCbixqcil7Z24oQm4sMCk7Zm9yKHZhciB3cj1bXSxIbj0wLHpyPSIiLFdpPSIiO0JuLmw8'@;
put 'Qm4ubGVuZ3RoOyl7dmFyIENpPUJuW0JuLmwrK107c3dpdGNoKENpKXtjYXNlIDA6d3IucHVzaChCbi5yZWFkX3NoaWZ0KDgsImYiKSk7YnJlYWs7Y2FzZSAxOldpPUJ0KGpyWzBdLmMsQm4ucmVhZF9zaGlmdCgyKSwhMCksenI9QnQoanJbMF0ucixCbi5yZWFkX3NoaWZ0KDIpLCExKSx3ci5w'@;
put 'dXNoKFdpK3pyKTticmVhaztjYXNlIDI6dmFyIHdhPUJ0KGpyWzBdLmMsQm4ucmVhZF9zaGlmdCgyKSwhMCksb3M9QnQoanJbMF0ucixCbi5yZWFkX3NoaWZ0KDIpLCExKTtXaT1CdChqclswXS5jLEJuLnJlYWRfc2hpZnQoMiksITApLHpyPUJ0KGpyWzBdLnIsQm4ucmVhZF9zaGlmdCgyKSwh'@;
put 'MSksd3IucHVzaCh3YStvcysiOiIrV2krenIpO2JyZWFrO2Nhc2UgMzppZihCbi5sPEJuLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5kIik7YnJlYWs7Y2FzZSA0OndyLnB1c2goIigiK3dyLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSA1'@;
put 'OndyLnB1c2goQm4ucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgaWE9IiI7Q2k9Qm5bQm4ubCsrXTspaWErPVN0cmluZy5mcm9tQ2hhckNvZGUoQ2kpO3dyLnB1c2goJyInK2lhLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UgODp3ci5wdXNoKCItIit3ci5w'@;
put 'b3AoKSk7YnJlYWs7Y2FzZSAyMzp3ci5wdXNoKCIrIit3ci5wb3AoKSk7YnJlYWs7Y2FzZSAyMjp3ci5wdXNoKCJOT1QoIit3ci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp2YXIgT3M9d3IucG9wKCksUGE9d3IucG9wKCk7d3IucHVzaChbIkFORCIsIk9SIl1bQ2ktMjBdKyIo'@;
put 'IitQYSsiLCIrT3MrIikiKTticmVhaztkZWZhdWx0OmlmKENpPDMyJiZLdFtDaV0pT3M9d3IucG9wKCksUGE9d3IucG9wKCksd3IucHVzaChQYStLdFtDaV0rT3MpO2Vsc2V7aWYoIU90W0NpXSlyZXR1cm4gQ2k8PTc/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrQ2kudG9T'@;
put 'dHJpbmcoMTYpKTpDaTw9MjQ/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIG9wICIrQ2kudG9TdHJpbmcoMTYpKTpDaTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrQ2kudG9TdHJpbmcoMTYpKTpDaTw9MTE1P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBv'@;
put 'cnRlZCBmdW5jdGlvbiBvcGNvZGUgIitDaS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrQ2kudG9TdHJpbmcoMTYpKTtpZig2OT09KEhuPU90W0NpXVsxXSkmJihIbj1CbltCbi5sKytdKSxIbj53ci5sZW5ndGgpcmV0dXJuIHZvaWQgY29u'@;
put 'c29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitDaS50b1N0cmluZygxNikrIjp8Iit3ci5qb2luKCJ8IikrInwiKTt2YXIgdXM9d3Iuc2xpY2UoLUhuKTt3ci5sZW5ndGgtPUhuLHdyLnB1c2goT3RbQ2ldWzBdKyIoIit1cy5qb2luKCIsIikrIikiKX19fTE9PXdyLmxlbmd0'@;
put 'aD9qclsxXS5mPSIiK3dyWzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8Iit3ci5qb2luKCJ8IikrInwiKX0pKEJuLnNsaWNlKEJuLmwsQm4ubCtXaSksenIpLEJuLmwrPVdpfXJldHVybiB6cn19LDI0OntuOiJUQUJMRSJ9LDI1OntuOiJPUkFOR0UifSwyNjp7bjoi'@;
put 'UFJBTkdFIn0sMjc6e246IlNSQU5HRSJ9LDI4OntuOiJGUkFOR0UifSwyOTp7bjoiS1JBTkdFMSJ9LDMyOntuOiJIUkFOR0UifSwzNTp7bjoiS1JBTkdFMiJ9LDM2OntuOiJQUk9URUMifSwzNzp7bjoiRk9PVEVSIn0sMzg6e246IkhFQURFUiJ9LDM5OntuOiJTRVRVUCJ9LDQwOntuOiJNQVJH'@;
put 'SU5TIn0sNDE6e246IkxBQkVMRk1UIn0sNDI6e246IlRJVExFUyJ9LDQzOntuOiJTSEVFVEpTIn0sNDU6e246IkdSQVBIIn0sNDY6e246Ik5HUkFQSCJ9LDQ3OntuOiJDQUxDQ09VTlQifSw0ODp7bjoiVU5GT1JNQVRURUQifSw0OTp7bjoiQ1VSU09SVzEyIn0sNTA6e246IldJTkRPVyJ9LDUx'@;
put 'OntuOiJTVFJJTkciLGY6VmV9LDU1OntuOiJQQVNTV09SRCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoiUVVFUllOQU1FIn0sNjI6e246IlBSSU5UIn0sNjM6e246IlBSSU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7bjoiR1JBUEhOQU1FIn0sNjY6e246IlpP'@;
put 'T00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNST1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntuOiJOTkFNRSJ9LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFDUk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBSQU5HRVM/PyJ9LDEwMzp7bjoiUlJBTkdF'@;
put 'Uz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJNUkFOR0VTPz8ifSw2NTUzNTp7bjoiIn19LFJyPXswOntuOiJCT0YifSwxOntuOiJFT0YifSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNBTENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1OntuOiJTSEVFVENFTExQVFIifSw2OntuOiJT'@;
put 'SEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0sODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6e246IlNZU1RFTVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJTEVTRUFMIn0sMTQ6e246IkRBVEFGSUxM'@;
put 'TlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoiUFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdSQVBIU1RSSU5HIn0sMTk6e246Ij8/In0sMjA6e246IkVSUkNFTEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxBQkVMMTYiLGY6ZnVuY3Rpb24gQ24oQm4s'@;
put 'anIpe3ZhciB3cj1zcihCbik7cmV0dXJuIHdyWzFdLnQ9InMiLHdyWzFdLnY9Qm4ucmVhZF9zaGlmdChqci00LCJjc3RyIiksd3J9fSwyMzp7bjoiTlVNQkVSMTciLGY6am59LDI0OntuOiJOVU1CRVIxOCIsZjpmdW5jdGlvbiBlcihCbixqcil7dmFyIHdyPXNyKEJuKTt3clsxXS52PUJuLnJl'@;
put 'YWRfc2hpZnQoMik7dmFyIEhuPXdyWzFdLnY+PjE7aWYoMSZ3clsxXS52KXN3aXRjaCg3JkhuKXtjYXNlIDA6SG49NWUzKihIbj4+Myk7YnJlYWs7Y2FzZSAxOkhuPTUwMCooSG4+PjMpO2JyZWFrO2Nhc2UgMjpIbj0oSG4+PjMpLzIwO2JyZWFrO2Nhc2UgMzpIbj0oSG4+PjMpLzIwMDticmVh'@;
put 'aztjYXNlIDQ6SG49KEhuPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkhuPShIbj4+MykvMmU0O2JyZWFrO2Nhc2UgNjpIbj0oSG4+PjMpLzE2O2JyZWFrO2Nhc2UgNzpIbj0oSG4+PjMpLzY0fXJldHVybiB3clsxXS52PUhuLHdyfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBicihCbixq'@;
put 'cil7dmFyIHdyPWpuKEJuKTtyZXR1cm4gQm4ubCs9anItMTQsd3J9fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQiLGY6ZnVuY3Rpb24gbmEoQm4sanIpe2Zvcih2YXIgd3I9e30sSG49Qm4ubCtqcjtCbi5sPEhuOyl7dmFyIHpyPUJuLnJlYWRfc2hpZnQoMik7aWYoMTRlMz09'@;
put 'enIpe2Zvcih3clt6cl09WzAsIiJdLHdyW3pyXVswXT1Cbi5yZWFkX3NoaWZ0KDIpO0JuW0JuLmxdOyl3clt6cl1bMV0rPVN0cmluZy5mcm9tQ2hhckNvZGUoQm5bQm4ubF0pLEJuLmwrKztCbi5sKyt9fXJldHVybiB3cn19LDI4OntuOiJEVExBQkVMTUlTQyJ9LDI5OntuOiJEVExBQkVMQ0VM'@;
put 'TCJ9LDMwOntuOiJHUkFQSFdJTkRPVyJ9LDMxOntuOiJDUEEifSwzMjp7bjoiTFBMQVVUTyJ9LDMzOntuOiJRVUVSWSJ9LDM0OntuOiJISURERU5TSEVFVCJ9LDM1OntuOiI/PyJ9LDM3OntuOiJOVU1CRVIyNSIsZjpmdW5jdGlvbiBycihCbixqcil7dmFyIHdyPXNyKEJuKSxIbj1Cbi5yZWFk'@;
put 'X3NoaWZ0KDQpO3JldHVybiB3clsxXS52PUhuPj42LHdyfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOlNpfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIFBpKEJuLGpyKXt2YXIgd3I9U2koQm4pO3JldHVybiBCbi5sKz1qci0xMCx3cn19LDE0Mjp7bjoiPz8ifSwxNDc6'@;
put 'e246Ij8/In0sMTUwOntuOiI/PyJ9LDE1MTp7bjoiPz8ifSwxNTI6e246Ij8/In0sMTUzOntuOiI/PyJ9LDE1NDp7bjoiPz8ifSwxNTU6e246Ij8/In0sMTU2OntuOiI/PyJ9LDE2Mzp7bjoiPz8ifSwxNzQ6e246Ij8/In0sMTc1OntuOiI/PyJ9LDE3Njp7bjoiPz8ifSwxNzc6e246Ij8/In0s'@;
put 'MTg0OntuOiI/PyJ9LDE4NTp7bjoiPz8ifSwxODY6e246Ij8/In0sMTg3OntuOiI/PyJ9LDE4ODp7bjoiPz8ifSwxOTU6e246Ij8/In0sMjAxOntuOiI/PyJ9LDIwNTp7bjoiPz8ifSwyMDY6e246Ij8/In0sMjA3OntuOiI/PyJ9LDIwODp7bjoiPz8ifSwyNTY6e246Ij8/In0sMjU5OntuOiI/'@;
put 'PyJ9LDI2MDp7bjoiPz8ifSwyNjE6e246Ij8/In0sMjYyOntuOiI/PyJ9LDI2Mzp7bjoiPz8ifSwyNjU6e246Ij8/In0sMjY2OntuOiI/PyJ9LDI2Nzp7bjoiPz8ifSwyNjg6e246Ij8/In0sMjcwOntuOiI/PyJ9LDI3MTp7bjoiPz8ifSwzODQ6e246Ij8/In0sMzg5OntuOiI/PyJ9LDM5MDp7'@;
put 'bjoiPz8ifSwzOTM6e246Ij8/In0sMzk2OntuOiI/PyJ9LDUxMjp7bjoiPz8ifSw1MTQ6e246Ij8/In0sNTEzOntuOiI/PyJ9LDUxNjp7bjoiPz8ifSw1MTc6e246Ij8/In0sNjQwOntuOiI/PyJ9LDY0MTp7bjoiPz8ifSw2NDI6e246Ij8/In0sNjQzOntuOiI/PyJ9LDY0NDp7bjoiPz8ifSw2'@;
put 'NDU6e246Ij8/In0sNjQ2OntuOiI/PyJ9LDY0Nzp7bjoiPz8ifSw2NDg6e246Ij8/In0sNjU4OntuOiI/PyJ9LDY1OTp7bjoiPz8ifSw2NjA6e246Ij8/In0sNjYxOntuOiI/PyJ9LDY2Mjp7bjoiPz8ifSw2NjU6e246Ij8/In0sNjY2OntuOiI/PyJ9LDc2ODp7bjoiPz8ifSw3NzI6e246Ij8/'@;
put 'In0sMTYwMDp7bjoiPz8ifSwxNjAyOntuOiI/PyJ9LDE3OTM6e246Ij8/In0sMTc5NDp7bjoiPz8ifSwxNzk1OntuOiI/PyJ9LDE3OTY6e246Ij8/In0sMTkyMDp7bjoiPz8ifSwyMDQ4OntuOiI/PyJ9LDIwNDk6e246Ij8/In0sMjA1Mjp7bjoiPz8ifSwyNjg4OntuOiI/PyJ9LDEwOTk4Ontu'@;
put 'OiI/PyJ9LDEyODQ5OntuOiI/PyJ9LDI4MjMzOntuOiI/PyJ9LDI4NDg0OntuOiI/PyJ9LDY1NTM1OntuOiIifX07cmV0dXJue3NoZWV0X3RvX3drMTpmdW5jdGlvbiBLKEJuLGpyKXt2YXIgd3I9anJ8fHt9O2lmKCt3ci5jb2RlcGFnZT49MCYmQigrd3IuY29kZXBhZ2UpLCJzdHJpbmciPT13'@;
put 'ci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMSB0byBKUyBzdHJpbmciKTt2YXIgSG49dmkoKSx6cj1zcyhCblsiIXJlZiJdKSxXaT1BcnJheS5pc0FycmF5KEJuKSxDaT1bXTskaShIbiwwLGZ1bmN0aW9uIG9lKEJuKXt2YXIganI9dm4oMik7cmV0dXJuIGpyLndyaXRl'@;
put 'X3NoaWZ0KDIsQm4pLGpyfSgxMDMwKSksJGkoSG4sNixmdW5jdGlvbiBiZShCbil7dmFyIGpyPXZuKDgpO3JldHVybiBqci53cml0ZV9zaGlmdCgyLEJuLnMuYyksanIud3JpdGVfc2hpZnQoMixCbi5zLnIpLGpyLndyaXRlX3NoaWZ0KDIsQm4uZS5jKSxqci53cml0ZV9zaGlmdCgyLEJuLmUu'@;
put 'ciksanJ9KHpyKSk7Zm9yKHZhciB3YT16ci5zLnI7d2E8PXpyLmUucjsrK3dhKWZvcih2YXIgb3M9amkod2EpLGlhPXpyLnMuYztpYTw9enIuZS5jOysraWEpe3dhPT09enIucy5yJiYoQ2lbaWFdPWthKGlhKSk7dmFyIFBhPVdpPyhCblt3YV18fFtdKVtpYV06Qm5bQ2lbaWFdK29zXTtQYSYm'@;
put 'InoiIT1QYS50JiYoIm4iPT1QYS50PygwfFBhLnYpPT1QYS52JiZQYS52Pj0tMzI3NjgmJlBhLnY8PTMyNzY3PyRpKEhuLDEzLGN0KHdhLGlhLFBhLnYpKTokaShIbiwxNCxpdCh3YSxpYSxQYS52KSk6JGkoSG4sMTUsWWUod2EsaWEseWwoUGEpLnNsaWNlKDAsMjM5KSkpKX1yZXR1cm4gJGko'@;
put 'SG4sMSksSG4uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIGVlKEJuLGpyKXt2YXIgd3I9anJ8fHt9O2lmKCt3ci5jb2RlcGFnZT49MCYmQigrd3IuY29kZXBhZ2UpLCJzdHJpbmciPT13ci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMyB0byBKUyBzdHJpbmciKTt2'@;
put 'YXIgSG49dmkoKTskaShIbiwwLGZ1bmN0aW9uIG1lKEJuKXt2YXIganI9dm4oMjYpO2pyLndyaXRlX3NoaWZ0KDIsNDA5NiksanIud3JpdGVfc2hpZnQoMiw0KSxqci53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgd3I9MCxIbj0wLHpyPTAsV2k9MDtXaTxCbi5TaGVldE5hbWVzLmxlbmd0aDsr'@;
put 'K1dpKXt2YXIgd2E9Qm4uU2hlZXRzW0JuLlNoZWV0TmFtZXNbV2ldXTtpZih3YSYmd2FbIiFyZWYiXSl7Kyt6cjt2YXIgb3M9U28od2FbIiFyZWYiXSk7d3I8b3MuZS5yJiYod3I9b3MuZS5yKSxIbjxvcy5lLmMmJihIbj1vcy5lLmMpfX1yZXR1cm4ganIud3JpdGVfc2hpZnQoMix3ciksanIu'@;
put 'd3JpdGVfc2hpZnQoMSx6ciksanIud3JpdGVfc2hpZnQoMSxIbiksanIud3JpdGVfc2hpZnQoMiwwKSxqci53cml0ZV9zaGlmdCgyLDApLGpyLndyaXRlX3NoaWZ0KDEsMSksanIud3JpdGVfc2hpZnQoMSwyKSxqci53cml0ZV9zaGlmdCg0LDApLGpyLndyaXRlX3NoaWZ0KDQsMCksanJ9KEJu'@;
put 'KSk7Zm9yKHZhciB6cj0wLFdpPTA7enI8Qm4uU2hlZXROYW1lcy5sZW5ndGg7Kyt6cikoQm4uU2hlZXRzW0JuLlNoZWV0TmFtZXNbenJdXXx8e30pWyIhcmVmIl0mJiRpKEhuLDI3LGxhKEJuLlNoZWV0TmFtZXNbenJdLFdpKyspKTt2YXIgQ2k9MDtmb3IoenI9MDt6cjxCbi5TaGVldE5hbWVz'@;
put 'Lmxlbmd0aDsrK3pyKXt2YXIgd2E9Qm4uU2hlZXRzW0JuLlNoZWV0TmFtZXNbenJdXTtpZih3YSYmd2FbIiFyZWYiXSl7Zm9yKHZhciBvcz1zcyh3YVsiIXJlZiJdKSxpYT1BcnJheS5pc0FycmF5KHdhKSxPcz1bXSxQYT1vcy5zLnI7UGE8PW9zLmUucjsrK1BhKWZvcih2YXIgdXM9amkoUGEp'@;
put 'LHFhPW9zLnMuYztxYTw9b3MuZS5jOysrcWEpe1BhPT09b3Mucy5yJiYoT3NbcWFdPWthKHFhKSk7dmFyIElvPWlhPyh3YVtQYV18fFtdKVtxYV06d2FbT3NbcWFdK3VzXTtJbyYmInoiIT1Jby50JiYoIm4iPT1Jby50PyRpKEhuLDIzLHByKFBhLHFhLENpLElvLnYpKTokaShIbiwyMix1cihQ'@;
put 'YSxxYSxDaSx5bChJbykuc2xpY2UoMCwyMzkpKSkpfSsrQ2l9fXJldHVybiAkaShIbiwxKSxIbi5lbmQoKX0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gTyhCbixqcil7c3dpdGNoKGpyLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gayh5KF9lLmRlY29kZShCbikpLGpyKTtjYXNlImJpbmFyeSI6'@;
put 'cmV0dXJuIGsoeShCbiksanIpO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm4gayhCbixqcil9dGhyb3ciVW5zdXBwb3J0ZWQgdHlwZSAiK2pyLnR5cGV9fX0oKSx5NT1mdW5jdGlvbigpe3ZhciBTPUEwKCJ0IiksTz1BMCgiclByIik7ZnVuY3Rpb24gayhvZSl7dmFyIG1lPW9lLm1h'@;
put 'dGNoKFMpO2lmKCFtZSlyZXR1cm57dDoicyIsdjoiIn07dmFyIHBlPXt0OiJzIix2OlFyKG1lWzFdKX0sYmU9b2UubWF0Y2goTyk7cmV0dXJuIGJlJiYocGUucz1mdW5jdGlvbiBjayhTKXt2YXIgTz17fSxrPVMubWF0Y2godG4pLEs9MCxlZT0hMTtpZihrKWZvcig7SyE9ay5sZW5ndGg7KytL'@;
put 'KXt2YXIgb2U9eXIoa1tLXSk7c3dpdGNoKG9lWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRlbmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIW9lLnZhbClicmVhaztjYXNlIjxzaGFkb3c+IjpjYXNlIjxzaGFkb3cvPiI6Ty5zaGFkb3c9MTticmVh'@;
put 'aztjYXNlIjwvc2hhZG93PiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1vZS52YWwpYnJlYWs7Ty5jcD1QW3BhcnNlSW50KG9lLnZhbCwxMCldO2JyZWFrO2Nhc2UiPG91dGxpbmUiOmlmKCFvZS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6Ty5vdXRs'@;
put 'aW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6Ty5uYW1lPW9lLnZhbDticmVhaztjYXNlIjxzeiI6Ty5zej1vZS52YWw7YnJlYWs7Y2FzZSI8c3RyaWtlIjppZighb2UudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+IjpPLnN0cmlr'@;
put 'ZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighb2UudmFsKWJyZWFrO3N3aXRjaChvZS52YWwpe2Nhc2UiZG91YmxlIjpPLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6Ty51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2Nv'@;
put 'dW50aW5nIjpPLnVuZGVybGluZT0zNH1jYXNlIjx1PiI6Y2FzZSI8dS8+IjpPLnVuZGVybGluZXx8KE8udW5kZXJsaW5lPTEpO2JyZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8YiI6aWYoIjAiPT1vZS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6Ty5ib2xkPTE7YnJlYWs7Y2Fz'@;
put 'ZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PW9lLnZhbClicmVhaztjYXNlIjxpPiI6Y2FzZSI8aS8+IjpPLml0YWxpYz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOm9lLnJnYiYmKE8uY29sb3I9e3JnYjo4PT1vZS5yZ2IubGVuZ3RoP29lLnJnYi5zbGljZSgy'@;
put 'LDgpOigiMDAwMDAwIitvZS5yZ2IpLnNsaWNlKC02KX0pO2JyZWFrO2Nhc2UiPGZhbWlseSI6Ty5mYW1pbHk9b2UudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6Im5vbmUiIT0ob2UudmFsfHwibm9uZSIpJiYoTy52YWxpZ249b2UudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztj'@;
put 'YXNlIjxzY2hlbWUiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6ZWU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmVlPSExO2JyZWFrO2RlZmF1bHQ6aWYoNDchPT1vZVswXS5jaGFyQ29kZUF0KDEpJiYhZWUpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbnJlY29nbml6ZWQgcmljaCBmb3JtYXQgIitvZVswXSl9fXJldHVybiBPfShiZVsxXSkpLHBlfXZhciBLPS88KD86XHcrOik/cj4vZyxlZT0vPFwvKD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlvbihtZSl7cmV0dXJuIG1lLnJlcGxhY2UoSywiIikuc3BsaXQoZWUpLm1hcChrKS5m'@;
put 'aWx0ZXIoZnVuY3Rpb24ocGUpe3JldHVybiBwZS52fSl9fSgpLHhWPXsxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZS1hY2NvdW50aW5nIiwzNDoiZG91YmxlLWFjY291bnRpbmcifSxGdT1mdW5jdGlvbigpe3ZhciBPPS8oXHJcbnxcbikvZztmdW5jdGlvbiBLKGVlKXt2YXIgb2U9'@;
put 'W1tdLGVlLnYsW11dO3JldHVybiBlZS52PyhlZS5zJiZmdW5jdGlvbiBrKGVlLG9lLG1lKXt2YXIgcGU9W107ZWUudW5kZXJsaW5lJiZwZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiKSxlZS51bmRlcmxpbmU+MSYmcGUucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6Iit4'@;
put 'VltlZS51bmRlcmxpbmVdKyI7IiksZWUuc3omJnBlLnB1c2goImZvbnQtc2l6ZToiK2VlLnN6KyJwdDsiKSxlZS5vdXRsaW5lJiZwZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxlZS5zaGFkb3cmJnBlLnB1c2goInRleHQtc2hhZG93OiBhdXRvOyIpLGVlLmNvbG9yJiZlZS5jb2xv'@;
put 'ci5yZ2ImJnBlLnB1c2goImNvbG9yOiAjIitMMChlZS5jb2xvci5yZ2IpKyI7Iiksb2UucHVzaCgnPHNwYW4gc3R5bGU9IicrcGUuam9pbigiIikrJyI+JyksZWUuYm9sZCYmKG9lLnB1c2goIjxiPiIpLG1lLnB1c2goIjwvYj4iKSksZWUuaXRhbGljJiYob2UucHVzaCgiPGk+IiksbWUucHVz'@;
put 'aCgiPC9pPiIpKSxlZS5zdHJpa2UmJihvZS5wdXNoKCI8cz4iKSxtZS5wdXNoKCI8L3M+IikpO3ZhciBiZT1lZS52YWxpZ258fCIiOyJzdXBlcnNjcmlwdCI9PWJlfHwic3VwZXIiPT1iZT9iZT0ic3VwIjoic3Vic2NyaXB0Ij09YmUmJihiZT0ic3ViIiksIiIhPWJlJiYob2UucHVzaCgiPCIr'@;
put 'YmUrIj4iKSxtZS5wdXNoKCI8LyIrYmUrIj4iKSksbWUucHVzaCgiPC9zcGFuPiIpfShlZS5zLG9lWzBdLG9lWzJdKSxvZVswXS5qb2luKCIiKStvZVsxXS5yZXBsYWNlKE8sIjxici8+Iikrb2VbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIG9lLm1hcChLKS5q'@;
put 'b2luKCIiKX19KCk7ZnVuY3Rpb24gSm8oUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbiBBNChTKXt2YXIgTz0iIixrPVtdO3JldHVybiBTLnMmJihTLnMuYm9sZCYmay5wdXNoKCI8Yi8+IiksUy5zLml0YWxpYyYmay5wdXNoKCI8aS8+IiksUy5zLnN0cmlrZSYm'@;
put 'ay5wdXNoKCI8c3RyaWtlLz4iKSxTLnMudW5kZXJsaW5lJiZrLnB1c2goJzx1IHZhbD0iJysoeDVbUy5zLnVuZGVybGluZV18fCJzaW5nbGUiKSsnIi8+JyksUy5zLmNvbG9yJiZrLnB1c2gobWQoUy5zLmNvbG9yKSksUy5zLnN6JiZrLnB1c2goJzxzeiB2YWw9IicrUy5zLnN6KyciLz4nKSxT'@;
put 'LnMubmFtZSYmay5wdXNoKCc8ckZvbnQgdmFsPSInK1Mucy5uYW1lKyciLz4nKSwoInN1cGVyIj09Uy5zLnZhbGlnbnx8InN1YiI9PVMucy52YWxpZ24pJiZrLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK1Mucy52YWxpZ24rJ3NjcmlwdCIvPicpKSxrLmxlbmd0aCYmKE8rPSI8clByPiIray5q'@;
put 'b2luKCIiKSsiPC9yUHI+IiksIjxyPiIrKE8rPUhyKCJ0IixQcihTLnYpLG51bGwpKSsiPC9yPiJ9KGspfSkuam9pbigiIil9dmFyIEVWPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFRWPS88KD86XHcrOik/clxiW14+XSo+LyxBVj0vPCg/Olx3KzopP3JQaC4q'@;
put 'Pz4oW1xzXFNdKj8pPFwvKD86XHcrOik/clBoPi9nO2Z1bmN0aW9uIGdDKFMsTyl7dmFyIGs9IU98fE8uY2VsbEhUTUwsSz17fTtyZXR1cm4gUz8oUy5tYXRjaCgvXlxzKjwoPzpcdys6KT90W14+XSo+Lyk/KEsudD1RcihmcyhTLnNsaWNlKFMuaW5kZXhPZigiPiIpKzEpLnNwbGl0KC88XC8o'@;
put 'Pzpcdys6KT90Pi8pWzBdfHwiIikpLEsucj1mcyhTKSxrJiYoSy5oPW9hKEsudCkpKTpTLm1hdGNoKFRWKSYmKEsucj1mcyhTKSxLLnQ9UXIoZnMoKFMucmVwbGFjZShBViwiIikubWF0Y2goRVYpfHxbXSkuam9pbigiIikucmVwbGFjZSh0biwiIikpKSxLLlI9eTUoSy5yKSxrJiYoSy5oPUZ1'@;
put 'KEsuUikpKSxLKTp7dDoiIn19dmFyIHVrPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyxkaz0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLFg2PS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO1hhLlNTVD0iaHR0cDovL3NjaGVtYXMub3Bl'@;
put 'bnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzIjt2YXIga1Y9L15cc3xccyR8W1x0XG5ccl0vO2Z1bmN0aW9uIEF2KFMsTyl7aWYoIU8uYm9va1NTVClyZXR1cm4iIjt2YXIgaz1bRGldO2tbay5sZW5ndGhdPUhyKCJzc3QiLG51'@;
put 'bGwse3htbG5zOkdpLm1haW5bMF0sY291bnQ6Uy5Db3VudCx1bmlxdWVDb3VudDpTLlVuaXF1ZX0pO2Zvcih2YXIgSz0wO0shPVMubGVuZ3RoOysrSylpZihudWxsIT1TW0tdKXt2YXIgZWU9U1tLXSxvZT0iPHNpPiI7ZWUucj9vZSs9ZWUucjoob2UrPSI8dCIsZWUudHx8KGVlLnQ9IiIpLGVl'@;
put 'LnQubWF0Y2goa1YpJiYob2UrPScgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxvZSs9Ij4iK1ByKGVlLnQpKyI8L3Q+Iiksa1trLmxlbmd0aF09b2UrPSI8L3NpPiJ9cmV0dXJuIGsubGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zc3Q+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsu'@;
put 'am9pbigiIil9dmFyIGhrPWZ1bmN0aW9uIFIzKFMsTyxrKXt2YXIgSz0xMys0KlMudC5sZW5ndGgsZWU9Uy5SJiZTLlIubGVuZ3RofHxTLnI7Uy5yJiYoUy5SPXk1KFMucikpLGVlJiYoSys9NCs0KlMuUi5sZW5ndGgpO3ZhciBvZT0hMTtpZihudWxsPT1rJiYob2U9ITAsaz12bihLKSksay53'@;
put 'cml0ZV9zaGlmdCgxLGVlPzE6MCksT2MoUy50LGspLGVlKXtrLndyaXRlX3NoaWZ0KDQsUy5SLmxlbmd0aCk7Zm9yKHZhciBtZT0wLHBlPTA7cGU8Uy5SLmxlbmd0aDsrK3BlKXt2YXIgYmU9Uy5SW3BlXTtrLndyaXRlX3NoaWZ0KDIsbWUpLG1lKz0oYmUudnx8IiIpLmxlbmd0aDt2YXIgUGU9'@;
put 'YmUucz9zMChPLmNlbGxYZnMsTy5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOmJlLnN9LE8pOjA7ay53cml0ZV9zaGlmdCgyLE8uY2VsbFhmc1tQZV0uZm9udElkKX19cmV0dXJuIG9lP2suc2xpY2UoMCxrLmwpOmt9O2Z1bmN0aW9uIGZrKFMsTyl7dmFyIGs9dmkoKTtWcihrLCJCcnRCZWdp'@;
put 'blNzdCIsZnVuY3Rpb24gbUMoUyxPKXtyZXR1cm4gT3x8KE89dm4oOCkpLE8ud3JpdGVfc2hpZnQoNCxTLkNvdW50KSxPLndyaXRlX3NoaWZ0KDQsUy5VbmlxdWUpLE99KFMpKTtmb3IodmFyIEs9MDtLPFMubGVuZ3RoOysrSylWcihrLCJCcnRTU1RJdGVtIixoayhTW0tdLE8pKTtyZXR1cm4g'@;
put 'VnIoaywiQnJ0RW5kU3N0Iiksay5lbmQoKX1mdW5jdGlvbiBrNChTKXtpZih0eXBlb2YgY3B0YWJsZTwidSIpcmV0dXJuIGNwdGFibGUudXRpbHMuZW5jb2RlKEgsUyk7Zm9yKHZhciBPPVtdLGs9Uy5zcGxpdCgiIiksSz0wO0s8ay5sZW5ndGg7KytLKU9bS109a1tLXS5jaGFyQ29kZUF0KDAp'@;
put 'O3JldHVybiBPfWZ1bmN0aW9uIEYxKFMsTyl7dmFyIGs9e307cmV0dXJuIGsuTWFqb3I9Uy5yZWFkX3NoaWZ0KDIpLGsuTWlub3I9Uy5yZWFkX3NoaWZ0KDIpLE8+PTQmJihTLmwrPU8tNCksa31mdW5jdGlvbiB2QyhTKXtmb3IodmFyIE89Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5sK08tNCxLPXt9'@;
put 'LGVlPVMucmVhZF9zaGlmdCg0KSxvZT1bXTtlZS0tID4wOylvZS5wdXNoKHt0OlMucmVhZF9zaGlmdCg0KSx2OlMucmVhZF9zaGlmdCgwLCJscHA0Iil9KTtpZihLLm5hbWU9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxLLmNvbXBzPW9lLFMubCE9ayl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRh'@;
put 'U3BhY2VNYXBFbnRyeTogIitTLmwrIiAhPSAiK2spO3JldHVybiBLfWZ1bmN0aW9uIFBWKFMsTyl7dmFyIGs9Uy5sK08sSz17fTtLLkZsYWdzPTYzJlMucmVhZF9zaGlmdCg0KSxTLmwrPTQsSy5BbGdJRD1TLnJlYWRfc2hpZnQoNCk7dmFyIGVlPSExO3N3aXRjaChLLkFsZ0lEKXtjYXNlIDI2'@;
put 'MTI2OmNhc2UgMjYxMjc6Y2FzZSAyNjEyODplZT0zNj09Sy5GbGFnczticmVhaztjYXNlIDI2NjI1OmVlPTQ9PSg1MiZLLkZsYWdzKTticmVhaztjYXNlIDA6ZWU9MTY9PUsuRmxhZ3N8fDQ9PUsuRmxhZ3N8fDM2PT1LLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVu'@;
put 'Y3J5cHRpb24gYWxnb3JpdGhtOiAiK0suQWxnSUR9aWYoIWVlKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBGbGFncy9BbGdJRCBtaXNtYXRjaCIpO3JldHVybiBLLkFsZ0lESGFzaD1TLnJlYWRfc2hpZnQoNCksSy5LZXlTaXplPVMucmVhZF9zaGlmdCg0KSxLLlByb3ZpZGVyVHlwZT1T'@;
put 'LnJlYWRfc2hpZnQoNCksUy5sKz04LEsuQ1NQTmFtZT1TLnJlYWRfc2hpZnQoay1TLmw+PjEsInV0ZjE2bGUiKSxTLmw9ayxLfWZ1bmN0aW9uIEl2KFMsTyl7dmFyIGs9e30sSz1TLmwrTztyZXR1cm4gUy5sKz00LGsuU2FsdD1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYsay5WZXJpZmll'@;
put 'cj1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYsUy5yZWFkX3NoaWZ0KDQpLGsuVmVyaWZpZXJIYXNoPVMuc2xpY2UoUy5sLEspLFMubD1LLGt9ZnVuY3Rpb24gRlYoUyl7aWYoMzYhPSg2MyZTLnJlYWRfc2hpZnQoNCkpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbkluZm8gbWlzbWF0'@;
put 'Y2giKTt2YXIgaz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJue3Q6IlN0ZCIsaDpQVihTLGspLHY6SXYoUyxTLmxlbmd0aC1TLmwpfX1mdW5jdGlvbiBKNigpe3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQ6IEVDTUEtMzc2IEV4dGVuc2libGUiKX1mdW5jdGlvbiB5'@;
put 'QyhTKXt2YXIgTz1bInNhbHRTaXplIiwiYmxvY2tTaXplIiwia2V5Qml0cyIsImhhc2hTaXplIiwiY2lwaGVyQWxnb3JpdGhtIiwiY2lwaGVyQ2hhaW5pbmciLCJoYXNoQWxnb3JpdGhtIiwic2FsdFZhbHVlIl07Uy5sKz00O3ZhciBrPVMucmVhZF9zaGlmdChTLmxlbmd0aC1TLmwsInV0Zjgi'@;
put 'KSxLPXt9O3JldHVybiBrLnJlcGxhY2UodG4sZnVuY3Rpb24ob2Upe3ZhciBtZT15cihvZSk7c3dpdGNoKEduKG1lWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZW5jcnlwdGlvbiI6Y2FzZSI8L2VuY3J5cHRpb24+IjpjYXNlIjwva2V5RW5jcnlwdG9ycz4iOmNhc2UiPC9rZXlFbmNyeXB0b3I+'@;
put 'IjpicmVhaztjYXNlIjxrZXlEYXRhIjpPLmZvckVhY2goZnVuY3Rpb24ocGUpe0tbcGVdPW1lW3BlXX0pO2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOksuZW5jcnlwdGVkSG1hY0tleT1tZS5lbmNyeXB0ZWRIbWFjS2V5LEsuZW5jcnlwdGVkSG1hY1ZhbHVlPW1lLmVuY3J5cHRlZEhtYWNW'@;
put 'YWx1ZTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3JzPiI6Y2FzZSI8a2V5RW5jcnlwdG9ycyI6Sy5lbmNzPVtdO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvciI6Sy51cmk9bWUudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6Sy5lbmNzLnB1c2gobWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cg'@;
put 'bWVbMF19fSksS31mdW5jdGlvbiBMdihTKXt2YXIgayxvZSxPPTAsSz1rNChTKSxlZT1LLmxlbmd0aCsxO2Zvcigoaz16KGVlKSlbMF09Sy5sZW5ndGgsb2U9MTtvZSE9ZWU7KytvZSlrW29lXT1LW29lLTFdO2ZvcihvZT1lZS0xO29lPj0wOy0tb2UpTz0oKDE2Mzg0Jk8/MTowKXxPPDwxJjMy'@;
put 'NzY3KV5rW29lXTtyZXR1cm4gNTI4MTFeT312YXIgYkM9ZnVuY3Rpb24oKXt2YXIgUz1bMTg3LDI1NSwyNTUsMTg2LDI1NSwyNTUsMTg1LDEyOCwwLDE5MCwxNSwwLDE5MSwxNSwwXSxPPVs1Nzg0MCw3NDM5LDUyMzgwLDMzOTg0LDQzNjQsMzYwMCw2MTkwMiwxMjYwNiw2MjU4LDU3NjU3LDU0'@;
put 'Mjg3LDM0MDQxLDEwMjUyLDQzMzcwLDIwMTYzXSxrPVs0NDc5NiwxOTkyOSwzOTg1OCwxMDA1MywyMDEwNiw0MDIxMiwxMDc2MSwzMTU4NSw2MzE3MCw2NDkzMyw2MDI2Nyw1MDkzNSw0MDM5OSwxMTE5OSwxNzc2MywzNTUyNiwxNDUzLDI5MDYsNTgxMiwxMTYyNCwyMzI0OCw4ODUsMTc3MCwz'@;
put 'NTQwLDcwODAsMTQxNjAsMjgzMjAsNTY2NDAsNTUzNjksNDExMzksMjA4MDcsNDE2MTQsMjE4MjEsNDM2NDIsMTc2MjEsMjg0ODUsNTY5NzAsNDQzNDEsMTkwMTksMzgwMzgsMTQ2MDUsMjkyMTAsNjAxOTUsNTA3OTEsNDAxNzUsMTA3NTEsMjE1MDIsNDMwMDQsMjQ1MzcsMTgzODcsMzY3NzQs'@;
put 'Mzk0OSw3ODk4LDE1Nzk2LDMxNTkyLDYzMTg0LDQ3MjAxLDI0ODAzLDQ5NjA2LDM3ODA1LDE0MjAzLDI4NDA2LDU2ODEyLDE3ODI0LDM1NjQ4LDE2OTcsMzM5NCw2Nzg4LDEzNTc2LDI3MTUyLDQzNjAxLDE3NTM5LDM1MDc4LDU1NywxMTE0LDIyMjgsNDQ1NiwzMDM4OCw2MDc3Niw1MTk1Mywz'@;
put 'NDI0Myw3MDc5LDE0MTU4LDI4MzE2LDE0MTI4LDI4MjU2LDU2NTEyLDQzNDI1LDE3MjUxLDM0NTAyLDc1OTcsMTMxMDUsMjYyMTAsNTI0MjAsMzUyNDEsODgzLDE3NjYsMzUzMiw0MTI5LDgyNTgsMTY1MTYsMzMwMzIsNDY1Nyw5MzE0LDE4NjI4XSxlZT1mdW5jdGlvbihtZSxwZSl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKG1lKXtyZXR1cm4gMjU1JihtZT4+MXxtZTw8Nyl9KG1lXnBlKX07cmV0dXJuIGZ1bmN0aW9uKHBlKXtmb3IodmFyIGJlPWs0KHBlKSxQZT1mdW5jdGlvbihtZSl7Zm9yKHZhciBwZT1PW21lLmxlbmd0aC0xXSxiZT0xMDQsUGU9bWUubGVuZ3RoLTE7UGU+PTA7LS1QZSlmb3Io'@;
put 'dmFyIFZlPW1lW1BlXSxZZT0wOzchPVllOysrWWUpNjQmVmUmJihwZV49a1tiZV0pLFZlKj0yLC0tYmU7cmV0dXJuIHBlfShiZSksVmU9YmUubGVuZ3RoLFllPXooMTYpLGV0PTA7MTYhPWV0OysrZXQpWWVbZXRdPTA7dmFyIGl0O2ZvcighKDEmflZlKSYmKFllW1ZlXT1lZShTWzBdLFBlPj44'@;
put 'KSxZZVstLVZlXT1lZShiZVtiZS5sZW5ndGgtMV0sMjU1JlBlKSk7VmU+MDspWWVbLS1WZV09ZWUoYmVbVmVdLFBlPj44KSxZZVstLVZlXT1lZShiZVtWZV0sMjU1JlBlKTtmb3IoVmU9MTUsaXQ9MTUtYmUubGVuZ3RoO2l0PjA7KVllW1ZlXT1lZShTW2l0XSxQZT4+OCksLS1pdCxZZVstLVZl'@;
put 'XT1lZShiZVtWZV0sMjU1JlBlKSwtLVZlLC0taXQ7cmV0dXJuIFllfX0oKTt2YXIgUHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKGVlLG9lKXtzd2l0Y2gob2UudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBPKF9lLmRlY29kZShlZSksb2UpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTyhlZSxvZSk7'@;
put 'Y2FzZSJidWZmZXIiOnJldHVybiBPKGVlLnRvU3RyaW5nKCJiaW5hcnkiKSxvZSk7Y2FzZSJhcnJheSI6cmV0dXJuIE8odXQoZWUpLG9lKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrb2UudHlwZSl9ZnVuY3Rpb24gTyhlZSxvZSl7dmFyIHBlPShvZXx8e30pLmRlbnNl'@;
put 'P1tdOnt9O2lmKCFlZS5tYXRjaCgvXFx0cm93ZC8pKXRocm93IG5ldyBFcnJvcigiUlRGIG1pc3NpbmcgdGFibGUiKTtyZXR1cm4gcGVbIiFyZWYiXT1yYSh7czp7YzowLHI6MH0sZTp7YzowLHI6MH19KSxwZX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gayhlZSxvZSl7cmV0dXJuIHRo'@;
put 'KFMoZWUsb2UpLG9lKX0sdG9fc2hlZXQ6Uyxmcm9tX3NoZWV0OmZ1bmN0aW9uIEsoZWUpe2Zvcih2YXIgcGUsb2U9WyJ7XFxydGYxXFxhbnNpIl0sbWU9c3MoZWVbIiFyZWYiXSksYmU9QXJyYXkuaXNBcnJheShlZSksUGU9bWUucy5yO1BlPD1tZS5lLnI7KytQZSl7b2UucHVzaCgiXFx0cm93'@;
put 'ZFxcdHJhdXRvZml0MSIpO2Zvcih2YXIgVmU9bWUucy5jO1ZlPD1tZS5lLmM7KytWZSlvZS5wdXNoKCJcXGNlbGx4IisoVmUrMSkpO2ZvcihvZS5wdXNoKCJcXHBhcmRcXGludGJsIiksVmU9bWUucy5jO1ZlPD1tZS5lLmM7KytWZSl7dmFyIFllPXFpKHtyOlBlLGM6VmV9KTsocGU9YmU/KGVl'@;
put 'W1BlXXx8W10pW1ZlXTplZVtZZV0pJiYobnVsbCE9cGUudnx8cGUuZiYmIXBlLkYpJiYob2UucHVzaCgiICIrKHBlLnd8fCh5bChwZSkscGUudykpKSxvZS5wdXNoKCJcXGNlbGwiKSl9b2UucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0dXJuIG9lLmpvaW4oIiIpKyJ9In19fSgpO2Z1'@;
put 'bmN0aW9uIGI1KFMpe3ZhciBPPVMuc2xpY2UoIiMiPT09U1swXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KE8uc2xpY2UoMCwyKSwxNikscGFyc2VJbnQoTy5zbGljZSgyLDQpLDE2KSxwYXJzZUludChPLnNsaWNlKDQsNiksMTYpXX1mdW5jdGlvbiBwZChTKXtmb3IodmFyIE89'@;
put 'MCxrPTE7MyE9TzsrK08paz0yNTYqaysoU1tPXT4yNTU/MjU1OlNbT108MD8wOlNbT10pO3JldHVybiBrLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uIHNoKFMsTyl7aWYobnVsbD09UylyZXR1cm4gbnVsbCE9TztpZihudWxsPT1PKXJldHVybiEwO2lmKDE9'@;
put 'PVMuYXV0byYmMT09Ty5hdXRvKXJldHVybiExO2lmKCEhUy5hdXRvIT0hIU8uYXV0b3x8bnVsbD09Uy50aGVtZSE9KG51bGw9PU8udGhlbWUpKXJldHVybiEwO2lmKG51bGwhPVMudGhlbWUpcmV0dXJuIFMudGhlbWUhPU8udGhlbWV8fFMudGludCE9Ty50aW50O2lmKG51bGw9PVMucmdiJiZu'@;
put 'dWxsPT1PLnJnYilyZXR1cm4hMTt2YXIgaz1TLnJnYjsibnVtYmVyIj09dHlwZW9mIGsmJihrPWsudG9TdHJpbmcoMTYpKSxrPWsuc2xpY2UoLTYpO3ZhciBLPU8ucmdiO3JldHVybiJudW1iZXIiPT10eXBlb2YgSyYmKEs9Sy50b1N0cmluZygxNikpLEs9Sy5zbGljZSgtNiksay50b0xvd2Vy'@;
put 'Q2FzZSgpIT1LLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZ2soUyxPKXtyZXR1cm4gbnVsbD09Uz9udWxsIT1POm51bGw9PU8/bnVsbCE9UzpTLnN0eWxlIT1PLnN0eWxlfHxzaChTLmNvbG9yLE8uY29sb3IpfWZ1bmN0aW9uIF81KFMsTyl7aWYoMD09PU8pcmV0dXJuIFM7dmFyIGs9ZnVuY3Rp'@;
put 'b24gVlYoUyl7dmFyIE89U1swXS8yNTUsaz1TWzFdLzI1NSxLPVNbMl0vMjU1LGVlPU1hdGgubWF4KE8sayxLKSxvZT1NYXRoLm1pbihPLGssSyksbWU9ZWUtb2U7aWYoMD09PW1lKXJldHVyblswLDAsT107dmFyIGJlLHBlPTAsUGU9ZWUrb2U7c3dpdGNoKGJlPW1lLyhQZT4xPzItUGU6UGUp'@;
put 'LGVlKXtjYXNlIE86cGU9KChrLUspL21lKzYpJTY7YnJlYWs7Y2FzZSBrOnBlPShLLU8pL21lKzI7YnJlYWs7Y2FzZSBLOnBlPShPLWspL21lKzR9cmV0dXJuW3BlLzYsYmUsUGUvMl19KGI1KFMpKTtyZXR1cm4ga1syXT1PPDA/a1syXSooMStPKToxLSgxLWtbMl0pKigxLU8pLHBkKGZ1bmN0'@;
put 'aW9uIHBrKFMpe3ZhciBiZSxrPVNbMV0sSz1TWzJdLGVlPTIqayooSzwuNT9LOjEtSyksb2U9Sy1lZS8yLG1lPVtvZSxvZSxvZV0scGU9NipTWzBdO2lmKDAhPT1rKXN3aXRjaCgwfHBlKXtjYXNlIDA6Y2FzZSA2OmJlPWVlKnBlLG1lWzBdKz1lZSxtZVsxXSs9YmU7YnJlYWs7Y2FzZSAxOm1l'@;
put 'WzBdKz1iZT1lZSooMi1wZSksbWVbMV0rPWVlO2JyZWFrO2Nhc2UgMjpiZT1lZSoocGUtMiksbWVbMV0rPWVlLG1lWzJdKz1iZTticmVhaztjYXNlIDM6bWVbMV0rPWJlPWVlKig0LXBlKSxtZVsyXSs9ZWU7YnJlYWs7Y2FzZSA0OmJlPWVlKihwZS00KSxtZVsyXSs9ZWUsbWVbMF0rPWJlO2Jy'@;
put 'ZWFrO2Nhc2UgNTptZVsyXSs9YmU9ZWUqKDYtcGUpLG1lWzBdKz1lZX1mb3IodmFyIFBlPTA7MyE9UGU7KytQZSltZVtQZV09TWF0aC5yb3VuZCgyNTUqbWVbUGVdKTtyZXR1cm4gbWV9KGspKX12YXIgbWs9Nix4Yz1taztmdW5jdGlvbiB3NShTKXtyZXR1cm4gTWF0aC5mbG9vcigoUytNYXRo'@;
put 'LnJvdW5kKDEyOC94YykvMjU2KSp4Yyl9ZnVuY3Rpb24gQzUoUyl7cmV0dXJuIE1hdGguZmxvb3IoKFMtNSkveGMqMTAwKy41KS8xMDB9ZnVuY3Rpb24gT2YoUyl7cmV0dXJuIE1hdGgucm91bmQoKFMqeGMrNSkveGMqMjU2KS8yNTZ9ZnVuY3Rpb24gSjAoUyl7Uy5iZXN0Rml0JiZkZWxldGUg'@;
put 'Uy5iZXN0Rml0LFMud2lkdGg/KFMud3B4PXc1KFMud2lkdGgpLFMud2NoPUM1KFMud3B4KSxTLk1EVz14Yyk6Uy53cHg/KFMud2NoPUM1KFMud3B4KSxTLndpZHRoPU9mKFMud2NoKSxTLk1EVz14Yyk6Im51bWJlciI9PXR5cGVvZiBTLndjaCYmKFMud2lkdGg9T2YoUy53Y2gpLFMud3B4PXc1'@;
put 'KFMud2lkdGgpLFMuTURXPXhjKSxTLmN1c3RvbVdpZHRoJiZkZWxldGUgUy5jdXN0b21XaWR0aH12YXIgVW89OTYsUGY9VW87ZnVuY3Rpb24gWjMoUyl7cmV0dXJuIDcyKlMvUGZ9ZnVuY3Rpb24gb2goUyl7cmV0dXJuIFMqUGYvNzJ9ZnVuY3Rpb24gRmYoUyl7UGY9Uz17b3N4OjcyLHdpbjo5'@;
put 'Nix3aW4xMDA6OTYsd2luMTI1OjEyMCx3aW4xNTA6MTQ0fVtTXXx8U3x8VW8sU0M9TTVbU119ZnVuY3Rpb24gSHYoUyl7Uy5ocHg/Uy5ocHQ9WjMoUy5ocHgpOlMuaHB0JiYoUy5ocHg9b2goUy5ocHQpKX12YXIgd0M9e05vbmU6Im5vbmUiLFNvbGlkOiJzb2xpZCIsR3JheTUwOiJtZWRpdW1H'@;
put 'cmF5IixHcmF5NzU6ImRhcmtHcmF5IixHcmF5MjU6ImxpZ2h0R3JheSIsSG9yelN0cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdTdHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJkYXJrVXAiLERpYWdDcm9zczoiZGFya0dyaWQi'@;
put 'LFRoaWNrRGlhZ0Nyb3NzOiJkYXJrVHJlbGxpcyIsVGhpbkhvcnpTdHJpcGU6ImxpZ2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlhZ1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNyb3NzOiJsaWdodEdyaWQifSxDQz1IZSh3Qyks'@;
put 'UTY9e29yYW5nZToxNjc1MzkyMCxibGFjazowLG5hdnk6MTI4LGJsdWU6MjU1LGdyZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1NixtYXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixvbGl2ZTo4NDIxMzc2LGdyYXk6ODQyMTUwNCxy'@;
put 'ZWQ6MTY3MTE2ODAsZnVjaHNpYToxNjcxMTkzNSx5ZWxsb3c6MTY3NzY5NjAsd2hpdGU6MTY3NzcyMTV9O2Z1bmN0aW9uIFM1KFMsTyl7aWYoUy5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15bMC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJbnQoUy5yZXBsYWNlKCIjIiwiIiksMTYpO2lm'@;
put 'KFE2W1NdKXJldHVybiBRNltTXTt2YXIgaz1TLm1hdGNoKC9yZ2JcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihrKXJldHVybigra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdO2lmKGs9Uy5tYXRjaCgvcmdiYVwoXHMqKFxkKilccyosXHMqKFxkKilccyos'@;
put 'XHMqKFxkKilccyooXGQqKS8pKXJldHVybiAwIT0oa1s0XSYma1s0XS5sZW5ndGg+MCYmK2tbNF18fDApfHwra1sxXT4wfHwra1syXT4wfHwra1szXT4wPygra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdOk8/LTE6MTY3NzcyMTU7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEhUTUwgY29s'@;
put 'b3IgIitTKX12YXIgTTU9e307ZnVuY3Rpb24gTnYoUyl7Uz1TfHw5Njt2YXIgTz17Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJDZW50dXJ5IEdvdGhpYyI6W119O3JldHVybiBP'@;
put 'LkNhbGlicmlbMTFdPTcsTy5DYWxpYnJpWzEyXT17NzI6Niw5Njo4LDEyMDoxMCwxNDQ6MTJ9W1NdfHw4LE8uQ2FsaWJyaVsxM109MTAsTy5DYWxpYnJpWzE0XT0xMSxPLkNhbGlicmlbMTZdPTEyLE8uQ2FsaWJyaVsxOF09MTQsTy5DYWxpYnJpWzIwXT0xNixPLlx1NWI4Ylx1NGY1M1sxMV09'@;
put 'OCxPLlx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZlsxMV09OCxPWyJTcGFya2Fzc2UgUmciXVsxMV09NyxPLkFyaWFsWzEwXT03LE9bIkNlbnR1cnkgR290aGljIl1bMTJdPTksT31NNVs3Ml09TnYoNzIpLE01Wzk2XT1Odig5NiksTTVbMTIwXT1OdigxMjApLE01WzE0NF09TnYoMTQ0'@;
put 'KTt2YXIgU0M9TTVbOTZdO2Z1bmN0aW9uIE1DKFMpe3JldHVybihTQ1tTLm5hbWV8fFMuRm9udE5hbWVdfHxbXSlbUy5zenx8Uy5TaXplXX1mdW5jdGlvbiBJNChTKXtpZihTKXt2YXIgTz1NQyhTKTtpZihPKXJldHVybiB4Yz1PfXJldHVybiB4Yz02fWZ1bmN0aW9uIHhDKFMsTyxrKXtyZXR1'@;
put 'cm4gcGQoZnVuY3Rpb24gdmsoUyxPLGspe3JldHVybltNYXRoLnJvdW5kKE9bMF0qaytTWzBdKigxLWspKSxNYXRoLnJvdW5kKE9bMV0qaytTWzFdKigxLWspKSxNYXRoLnJvdW5kKE9bMl0qaytTWzJdKigxLWspKV19KGI1KCJudW1iZXIiPT10eXBlb2YgUy5yZ2I/KCIwMDAwMCIrUy50b1N0'@;
put 'cmluZygxNikpLnNsaWNlKC02KTpTLnJnYiksYjUoIm51bWJlciI9PXR5cGVvZiBPLnJnYj8oIjAwMDAwIitPLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOk8ucmdiKSxrKSl9ZnVuY3Rpb24gVnYoUyxPLGspe2lmKGspc3dpdGNoKCtTKXtjYXNlIDY0OlM9NjU7YnJlYWs7Y2FzZSA2NTpTPTY0'@;
put 'fXZhciBLPU8mJk9bK1NdfHx0MFsrU118fHp3WytTLTIwMF07aWYoODE9PStTJiYoSz10MFsxXSksS3x8KEs9dDBbMV0pLCFLKXRocm93IG5ldyBFcnJvcigiYmFkIElDViBpbmRleCAiK1MpO3JldHVybiBwZChLKX1mdW5jdGlvbiB5ayhTLE8sayl7dmFyIEs9e307cmV0dXJuIG51bGwhPVMu'@;
put 'aW5kZXhlZCYmKEsuaW5kZXg9cGFyc2VJbnQoUy5pbmRleGVkLDEwKSxLLnJnYj1WdihLLmluZGV4LE8uSW5kZXhlZCkpLG51bGwhPVMudGhlbWUmJihLLnRoZW1lPXBhcnNlSW50KFMudGhlbWUsMTApKSxudWxsIT1TLnRpbnQmJihLLnRpbnQ9cGFyc2VGbG9hdChTLnRpbnQpKSxudWxsIT1T'@;
put 'LnJnYiYmKEsucmdiPVMucmdiLnNsaWNlKC02KSksbnVsbCE9Sy50aGVtZSYmIUsucmdiJiZrLnRoZW1lRWxlbWVudHMmJihLLnJnYj1fNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0sudGhlbWVdLnJnYixLLnRpbnR8fDApLEsucmF3X3JnYj1rLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1l'@;
put 'W0sudGhlbWVdLnJnYiksS31mdW5jdGlvbiBFQyhTLE8sayxLKXtPLkJvcmRlcnM9W107dmFyIGVlPXt9LG9lPXt9LG1lPSExOyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBiZT15cihwZSk7c3dpdGNoKEduKGJlWzBdKSl7Y2FzZSI8Ym9yZGVycyI6Y2Fz'@;
put 'ZSI8Ym9yZGVycz4iOmNhc2UiPC9ib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcj4iOmNhc2UiPGxlZnQvPiI6Y2FzZSI8L2xlZnQ+IjpjYXNlIjxyaWdodC8+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0b3AvPiI6Y2FzZSI8L3RvcD4iOmNhc2UiPGJvdHRvbS8+IjpjYXNlIjwvYm90dG9tPiI6Y2Fz'@;
put 'ZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2FzZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2FzZSI8dmVydGljYWwvPiI6Y2FzZSI8c3Rh'@;
put 'cnQiOmNhc2UiPHN0YXJ0PiI6Y2FzZSI8c3RhcnQvPiI6Y2FzZSI8L3N0YXJ0PiI6Y2FzZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNlIjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4'@;
put 'dExzdD4iOmJyZWFrO2Nhc2UiPGJvcmRlciI6Y2FzZSI8Ym9yZGVyPiI6Y2FzZSI8Ym9yZGVyLz4iOmVlPXt9LGJlLmRpYWdvbmFsVXAmJihlZS5kaWFnb25hbFVwPWVpKGJlLmRpYWdvbmFsVXApKSxiZS5kaWFnb25hbERvd24mJihlZS5kaWFnb25hbERvd249ZWkoYmUuZGlhZ29uYWxEb3du'@;
put 'KSksTy5Cb3JkZXJzLnB1c2goZWUpO2JyZWFrO2Nhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpvZT1lZS5sZWZ0PXt9LGJlLnN0eWxlJiYob2Uuc3R5bGU9YmUuc3R5bGUpO2JyZWFrO2Nhc2UiPHJpZ2h0IjpjYXNlIjxyaWdodD4iOm9lPWVlLnJpZ2h0PXt9LGJlLnN0eWxlJiYob2Uuc3R5bGU9'@;
put 'YmUuc3R5bGUpO2JyZWFrO2Nhc2UiPHRvcCI6Y2FzZSI8dG9wPiI6b2U9ZWUudG9wPXt9LGJlLnN0eWxlJiYob2Uuc3R5bGU9YmUuc3R5bGUpO2JyZWFrO2Nhc2UiPGJvdHRvbSI6Y2FzZSI8Ym90dG9tPiI6b2U9ZWUuYm90dG9tPXt9LGJlLnN0eWxlJiYob2Uuc3R5bGU9YmUuc3R5bGUpO2Jy'@;
put 'ZWFrO2Nhc2UiPC9kaWFnb25hbD4iOmVlLmRpYWdvbmFsPW9lLG9lPXt9O2JyZWFrO2Nhc2UiPC9ob3Jpem9udGFsPiI6ZWUuaG9yaXpvbnRhbD1vZSxvZT17fTticmVhaztjYXNlIjwvdmVydGljYWw+IjplZS52ZXJ0aWNhbD1vZSxvZT17fTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8Y29s'@;
put 'b3I+IjpvZS5jb2xvcnx8KG9lLmNvbG9yPXt9KSxiZS5hdXRvJiYob2UuY29sb3IuYXV0bz1laShiZS5hdXRvKSksbnVsbCE9YmUucmdiP29lLmNvbG9yLnJnYj1iZS5yZ2Iuc2xpY2UoLTYpOmJlLmluZGV4ZWQ/KG9lLmNvbG9yLmluZGV4PXBhcnNlSW50KGJlLmluZGV4ZWQsMTApLG9lLmNv'@;
put 'bG9yLnJnYj1WdihvZS5jb2xvci5pbmRleCxPLkluZGV4ZWQsITEpKTpiZS50aGVtZSYmKG9lLmNvbG9yLnRoZW1lPXBhcnNlSW50KGJlLnRoZW1lLDEwKSxiZS50aW50JiYob2UuY29sb3IudGludD1wYXJzZUZsb2F0KGJlLnRpbnQpKSxiZS50aGVtZSYmay50aGVtZUVsZW1lbnRzJiZrLnRo'@;
put 'ZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYob2UuY29sb3IucmdiPV81KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbb2UuY29sb3IudGhlbWVdLnJnYixvZS5jb2xvci50aW50fHwwKSkpLCFiZS5hdXRvJiZudWxsPT1iZS5yZ2ImJiFiZS5pbmRleGVkJiZkZWxldGUgb2UuY29sb3I7YnJlYWs7'@;
put 'Y2FzZSI8ZXh0IjptZT0hMDticmVhaztjYXNlIjwvZXh0PiI6bWU9ITE7YnJlYWs7ZGVmYXVsdDppZihLJiZLLldURiYmIW1lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrYmVbMF0rIiBpbiBib3JkZXJzIil9fSl9ZnVuY3Rpb24gUjQoUyxPKXt2YXIgaz1bIjwiK09dO3JldHVy'@;
put 'biBTJiZTLnN0eWxlPyhrLnB1c2goJyBzdHlsZT0iJytTLnN0eWxlKyciJyksUy5jb2xvcj8oay5wdXNoKCI+Iiksay5wdXNoKG1kKFMuY29sb3IsITApKSxrLmpvaW4oIiIpKyI8LyIrTysiPiIpOmsuam9pbigiIikrIi8+Iik6a1swXSsiLz4ifWZ1bmN0aW9uIEJWKFMsTyxrLEspe08uRmls'@;
put 'bHM9W107dmFyIGVlPXt9LG9lPXt9LG1lPSExLHBlPSExOyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYmUpe3ZhciBQZT15cihiZSk7c3dpdGNoKEduKFBlWzBdKSl7Y2FzZSI8ZmlsbHMiOmNhc2UiPGZpbGxzPiI6Y2FzZSI8L2ZpbGxzPiI6Y2FzZSI8L2ZpbGw+Ijpj'@;
put 'YXNlIjwvZ3JhZGllbnRGaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxzdG9wLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2Fz'@;
put 'ZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOk8uRmlsbHMucHVzaChlZT17fSk7YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsPiI6ZWUuc3RvcHM9W107YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsIjplZS5zdG9wcz1bXSxQZS5kZWdyZWUm'@;
put 'JihlZS5hbmdsZT0rUGUuZGVncmVlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpQZS5wYXR0ZXJuVHlwZSYmKGVlLnBhdHRlcm5UeXBlPVBlLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbC8+IjpjYXNlIjwvcGF0dGVybkZpbGw+Ijpp'@;
put 'ZihtZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBWZT1HbihQZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9VmUmJiFlZVtWZV0mJihlZVtWZV09e30pO3ZhciBZZT1tZT9vZTplZVtWZV07bnVs'@;
put 'bCE9UGUuaW5kZXhlZCYmKFllLmluZGV4PXBhcnNlSW50KFBlLmluZGV4ZWQsMTApLFllLnJnYj1WdihZZS5pbmRleCxPLkluZGV4ZWQpKSxudWxsIT1QZS50aGVtZSYmKFllLnRoZW1lPXBhcnNlSW50KFBlLnRoZW1lLDEwKSksbnVsbCE9UGUudGludCYmKFllLnRpbnQ9cGFyc2VGbG9hdChQ'@;
put 'ZS50aW50KSksbnVsbCE9UGUucmdiJiYoWWUucmdiPVBlLnJnYi5zbGljZSgtNikpLG51bGwhPVBlLmF1dG8mJmRlbGV0ZSBlZVtWZV0sbnVsbCE9WWUudGhlbWUmJiFZZS5yZ2ImJmsudGhlbWVFbGVtZW50cyYmKFllLnJnYj1fNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1llLnRoZW1l'@;
put 'XS5yZ2IsWWUudGludHx8MCksSy5XVEYmJihZZS5yYXdfcmdiPWsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbWWUudGhlbWVdLnJnYikpO2JyZWFrO2Nhc2UiPHN0b3A+IjptZT0hMCxvZT17fTticmVhaztjYXNlIjxzdG9wIjptZT0hMCxvZT17fSxudWxsIT1QZS5wb3NpdGlvbiYmKG9lLnY9'@;
put 'cGFyc2VGbG9hdChQZS5wb3NpdGlvbikpO2JyZWFrO2Nhc2UiPC9zdG9wPiI6bWU9ITEsZWUuc3RvcHMucHVzaChvZSk7YnJlYWs7Y2FzZSI8ZXh0IjpwZT0hMDticmVhaztjYXNlIjwvZXh0PiI6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZihLJiZLLldURiYmIXBlKXRocm93IG5ldyBFcnJvcigi'@;
put 'dW5yZWNvZ25pemVkICIrUGVbMF0rIiBpbiBmaWxscyIpfX0pfWZ1bmN0aW9uIGpWKFMsTyxrLEspe08uRm9udHM9W107dmFyIGVlPXt9LG9lPSExOyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24obWUpe3ZhciBwZT15cihtZSk7c3dpdGNoKEduKHBlWzBdKSl7Y2FzZSI8'@;
put 'Zm9udHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPW1lLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6Ty5Gb250cy5wdXNoKGVlKSxlZT17fTticmVhaztjYXNlIjxuYW1lIjpw'@;
put 'ZS52YWwmJihlZS5uYW1lPWZzKHBlLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUvPiI6Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjplZS5ib2xkPXBlLnZhbD9laShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8Yi8+IjpjYXNlIjxiPiI6ZWUuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7'@;
put 'Y2FzZSI8aSI6ZWUuaXRhbGljPXBlLnZhbD9laShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8aS8+IjpjYXNlIjxpPiI6ZWUuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjx1Ijpzd2l0Y2gocGUudmFsKXtjYXNlIm5vbmUiOmVlLnVuZGVybGluZT0wO2JyZWFrO2Nhc2Uic2lu'@;
put 'Z2xlIjplZS51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6ZWUudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjplZS51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjplZS51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpjYXNl'@;
put 'Ijx1PiI6ZWUudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxzdHJpa2UiOmVlLnN0cmlrZT1wZS52YWw/ZWkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHN0cmlrZS8+IjplZS5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5lIjplZS5vdXRsaW5lPXBlLnZhbD9laShw'@;
put 'ZS52YWwpOjE7YnJlYWs7Y2FzZSI8b3V0bGluZS8+IjplZS5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjplZS5zaGFkb3c9cGUudmFsP2VpKHBlLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6ZWUuc2hhZG93PTE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UiOmVlLmNvbmRlbnNlPXBl'@;
put 'LnZhbD9laShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UvPiI6ZWUuY29uZGVuc2U9MTticmVhaztjYXNlIjxleHRlbmQiOmVlLmV4dGVuZD1wZS52YWw/ZWkocGUudmFsKToxO2JyZWFrO2Nhc2UiPGV4dGVuZC8+IjplZS5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6cGUudmFsJiYo'@;
put 'ZWUuc3o9K3BlLnZhbCk7YnJlYWs7Y2FzZSI8c3ovPiI6Y2FzZSI8L3N6PiI6YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShwZS52YWx8fCJub25lIikmJihlZS52YWxpZ249cGUudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztjYXNlIjx2ZXJ0QWxpZ24vPiI6Y2FzZSI8'@;
put 'L3ZlcnRBbGlnbj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6cGUudmFsJiYoZWUuZmFtaWx5PXBhcnNlSW50KHBlLnZhbCwxMCkpO2JyZWFrO2Nhc2UiPGZhbWlseS8+IjpjYXNlIjwvZmFtaWx5PiI6YnJlYWs7Y2FzZSI8c2NoZW1lIjpwZS52YWwmJihlZS5zY2hlbWU9cGUudmFsKTticmVhaztj'@;
put 'YXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09cGUudmFsKWJyZWFrO3BlLmNvZGVwYWdlPVBbcGFyc2VJbnQocGUudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOmVlLmNvbG9yfHwoZWUuY29sb3I9e30pLHBlLmF1dG8mJihlZS5j'@;
put 'b2xvci5hdXRvPWVpKHBlLmF1dG8pKSxwZS5yZ2I/ZWUuY29sb3IucmdiPXBlLnJnYi5zbGljZSgtNik6cGUuaW5kZXhlZD8oZWUuY29sb3IuaW5kZXg9cGFyc2VJbnQocGUuaW5kZXhlZCwxMCksZWUuY29sb3IucmdiPVZ2KGVlLmNvbG9yLmluZGV4LE8uSW5kZXhlZCkpOnBlLnRoZW1lJiYo'@;
put 'ZWUuY29sb3IudGhlbWU9cGFyc2VJbnQocGUudGhlbWUsMTApLHBlLnRpbnQmJihlZS5jb2xvci50aW50PXBhcnNlRmxvYXQocGUudGludCkpLHBlLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihlZS5jb2xvci5yZ2I9XzUoay50aGVtZUVsZW1l'@;
put 'bnRzLmNsclNjaGVtZVtlZS5jb2xvci50aGVtZV0ucmdiLGVlLmNvbG9yLnRpbnR8fDApKSk7YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6b2U9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpvZT0hMTti'@;
put 'cmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOm9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpvZT0hMTticmVhaztkZWZhdWx0OmlmKEsmJksuV1RGJiYhb2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVsw'@;
put 'XSsiIGluIGZvbnRzIil9fSl9dmFyIHg1PXswOiJub25lIiwxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZUFjY291bnRpbmciLDM0OiJkb3VibGVBY2NvdW50aW5nIn0sVzM9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLFkzPVsiYXBwbHlB'@;
put 'bGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0b24iLCJxdW90ZVByZWZpeCJdLEw0PWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9mb250KFtePl0qKT5bXFNcc10q'@;
put 'PzxcLyg/Olx3KzopP2ZvbnQ+LyxPPS88KD86XHcrOik/bnVtRm10KFtePl0qKVwvPi8saz0vPCg/Olx3KzopP2ZpbGwoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbD4vLGVlPS88KD86XHcrOik/Ym9yZGVyKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcj4vO3JldHVy'@;
put 'biBmdW5jdGlvbihwZSxiZSxQZSxWZSl7dmFyIGN0LFR0LFllPXt9LGV0PXt9O3JldHVybihjdD1wZS5tYXRjaChTKSkmJihqVihjdCxZZSxQZSxWZSksKFllLkZvbnRzfHxbXSlbMF0mJlB0KGV0LFllLkZvbnRzWzBdKSksKGN0PXBlLm1hdGNoKE8pKSYmKFR0PXlyKGZzKGN0WzBdKSksZXQu'@;
put 'ej1UdC5mb3JtYXRDb2RlP1FyKFR0LmZvcm1hdENvZGUpOihiZS5OdW1iZXJGbXR8fFtdKVsrVHQubnVtRm10SWRdfHwiR2VuZXJhbCIpLChjdD1wZS5tYXRjaChrKSkmJihCVihjdCxZZSxQZSxWZSksKFllLkZpbGxzfHxbXSlbMF0mJlB0KGV0LFllLkZpbGxzWzBdKSksKGN0PXBlLm1hdGNo'@;
put 'KGVlKSkmJihFQyhjdCxZZSxQZSxWZSksKFllLkJvcmRlcnN8fFtdKVswXSYmUHQoZXQsWWUuQm9yZGVyc1swXSkpLGV0fX0oKSxRaT0vPCg/Olx3KzopP2R4Zj5bXFNcc10qPzxcLyg/Olx3KzopP2R4Zj4vZyxLcj0vPCg/Olx3KzopP3RhYmxlU3R5bGVcYi4qPz5bXFNcc10qPzxcLyg/Olx3'@;
put 'KzopP3RhYmxlU3R5bGU+L2c7dmFyIFNrPWZ1bmN0aW9uKCl7dmFyIE89LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxrPS88KD86XHcrOik/Y2VsbFN0eWxlWGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZVhmcz4v'@;
put 'LEs9LzwoPzpcdys6KT9jZWxsU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZXM+LyxlZT0vPCg/Olx3KzopP2NlbGxYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLG9lPS88KD86XHcrOik/ZmlsbHMoW14+XSopPltcU1xzXSo/PFwvKD86'@;
put 'XHcrOik/ZmlsbHM+LyxtZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8scGU9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+LyxiZT0vPCg/Olx3KzopP2luZGV4ZWRDb2xvcnMoW14+XSopPltc'@;
put 'U1xzXSo/PFwvKD86XHcrOik/aW5kZXhlZENvbG9ycz4vLFBlPS88KD86XHcrOik/dGFibGVTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZXM+LyxWZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmcz4vO3JldHVybiBmdW5j'@;
put 'dGlvbihldCxjdCxUdCl7dmFyIGJ0LGl0PXt9O3JldHVybiBldD8oKGJ0PShldD1ldC5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaChiZSkpJiZmdW5jdGlvbiB6VihTLE8sayl7Ty5JbmRl'@;
put 'eGVkfHwoTy5JbmRleGVkPVtdKTt2YXIgSz0hMTsoU1swXS5tYXRjaCh0bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXt2YXIgb2U9eXIoZWUpO3N3aXRjaChHbihvZVswXSkpe2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29sb3JzIjpjYXNlIjxpbmRleGVkQ29sb3Jz'@;
put 'Lz4iOmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8cmdiQ29sb3IiOmRlbGV0ZSBvZVswXTt2YXIgbWU9cGFyc2VJbnQob2UucmdiLnNsaWNlKC02KSwxNik7Ty5J'@;
put 'bmRleGVkLnB1c2goW21lPj4xNiYyNTUsbWU+PjgmMjU1LDI1NSZtZV0pO2JyZWFrO2Nhc2UiPGV4dCI6Sz0hMDticmVhaztjYXNlIjwvZXh0PiI6Sz0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhSyl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK29lWzBdKyIgaW4gY2Vs'@;
put 'bFN0eWxlcyIpfX0pfShidCxpdCxUdCksKGJ0PWV0Lm1hdGNoKE8pKSYmZnVuY3Rpb24gX2soUyxPLGspe08uTnVtYmVyRm10PVtdO2Zvcih2YXIgSz1SZShBLl90YWJsZSksZWU9MDtlZTxLLmxlbmd0aDsrK2VlKU8uTnVtYmVyRm10W0tbZWVdXT1BLl90YWJsZVtLW2VlXV07dmFyIG9lPVNb'@;
put 'MF0ubWF0Y2godG4pO2lmKG9lKWZvcihlZT0wO2VlPG9lLmxlbmd0aDsrK2VlKXt2YXIgbWU9eXIob2VbZWVdKTtzd2l0Y2goR24obWVbMF0pKXtjYXNlIjxudW1GbXRzIjpjYXNlIjwvbnVtRm10cz4iOmNhc2UiPG51bUZtdHMvPiI6Y2FzZSI8bnVtRm10cz4iOmNhc2UiPC9udW1GbXQ+Ijpi'@;
put 'cmVhaztjYXNlIjxudW1GbXQiOnZhciBwZT1RcihmcyhtZS5mb3JtYXRDb2RlKSksYmU9cGFyc2VJbnQobWUubnVtRm10SWQsMTApO2lmKE8uTnVtYmVyRm10W2JlXT1wZSxiZT4wKXtpZihiZT4zOTIpe2ZvcihiZT0zOTI7YmU+NjAmJm51bGwhPU8uTnVtYmVyRm10W2JlXTstLWJlKTtPLk51'@;
put 'bWJlckZtdFtiZV09cGV9QS5sb2FkKHBlLGJlKX1icmVhaztkZWZhdWx0OmlmKGsuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbWVbMF0rIiBpbiBudW1GbXRzIil9fX0oYnQsaXQsVHQpLChidD1ldC5tYXRjaChtZSkpJiZqVihidCxpdCxjdCxUdCksKGJ0PWV0Lm1hdGNo'@;
put 'KG9lKSkmJkJWKGJ0LGl0LGN0LFR0KSwoYnQ9ZXQubWF0Y2gocGUpKSYmRUMoYnQsaXQsY3QsVHQpLChidD1ldC5tYXRjaChrKSkmJmZ1bmN0aW9uIGZuZShTLE8sayl7Ty5DZWxsU3R5bGVYZj1bXTt2YXIgSyxlZT0hMTsoU1swXS5tYXRjaCh0bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9l'@;
put 'KXt2YXIgbWU9eXIob2UpLHBlPTA7c3dpdGNoKEduKG1lWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlWGZzIjpjYXNlIjxjZWxsU3R5bGVYZnM+IjpjYXNlIjxjZWxsU3R5bGVYZnMvPiI6Y2FzZSI8L2NlbGxTdHlsZVhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJv'@;
put 'dGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoSz1tZSlbMF0scGU9MDtwZTxXMy5sZW5ndGg7KytwZSlLW1czW3BlXV0mJihLW1czW3Bl'@;
put 'XV09cGFyc2VJbnQoS1tXM1twZV1dLDEwKSk7Zm9yKHBlPTA7cGU8WTMubGVuZ3RoOysrcGUpS1tZM1twZV1dJiYoS1tZM1twZV1dPWVpKEtbWTNbcGVdXSkpO2lmKE8uTnVtYmVyRm10JiZLLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoTy5OdW1iZXJGbXRbSy5udW1G'@;
put 'bXRJZF09PU8uTnVtYmVyRm10W3BlXSl7Sy5udW1GbXRJZD1wZTticmVha31PLkNlbGxTdHlsZVhmLnB1c2goSyk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGJlPXt9O21lLnZlcnRpY2FsJiYoYmUudmVydGljYWw9bWUudmVydGljYWwpLG1lLmhvcml6'@;
put 'b250YWwmJihiZS5ob3Jpem9udGFsPW1lLmhvcml6b250YWwpLG51bGwhPW1lLnRleHRSb3RhdGlvbiYmKGJlLnRleHRSb3RhdGlvbj1tZS50ZXh0Um90YXRpb24pLG1lLmluZGVudCYmKGJlLmluZGVudD1tZS5pbmRlbnQpLG1lLndyYXBUZXh0JiYoYmUud3JhcFRleHQ9bWUud3JhcFRleHQp'@;
put 'LG1lLnNocmlua1RvRml0JiYoYmUuc2hyaW5rVG9GaXQ9ZWkobWUuc2hyaW5rVG9GaXQpKSxLLmFsaWdubWVudD1iZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpLLnByb3RlY3Rpb249e30sZWkobWUuaGlkZGVuKSYmKEsucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPW1lLmxvY2tlZCYm'@;
put 'KEsucHJvdGVjdGlvbi5lZGl0YWJsZT0hZWkobWUubG9ja2VkKSk7YnJlYWs7Y2FzZSI8ZXh0IjplZT0hMDticmVhaztjYXNlIjwvZXh0PiI6ZWU9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIWVlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbWVbMF0rIiBpbiBjZWxs'@;
put 'U3R5bGVYZnMiKX19KX0oYnQsaXQsVHQpLChidD1ldC5tYXRjaChLKSkmJmZ1bmN0aW9uIGduZShTLE8sayl7Ty5DZWxsU3R5bGVYZnx8KE8uQ2VsbFN0eWxlWGY9W10pO3ZhciBLPSExOyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBvZT15cihlZSk7c3dp'@;
put 'dGNoKEduKG9lWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0'@;
put 'PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIG9lWzBdO3ZhciBtZT0rb2UueGZJZDtpZihPLkNlbGxTdHlsZVhmW21lXSlPLkNlbGxTdHlsZVhmW21lXS5zdHlsZT1mcyhvZS5uYW1lKTtlbHNlIGlmKCFvZS5idWlsdGluSWQpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIittZSk7YnJlYWs7Y2FzZSI8ZXh0IjpLPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpLPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFLKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBjZWxsU3R5bGVz'@;
put 'Iil9fSl9KGJ0LGl0LFR0KSwoYnQ9ZXQubWF0Y2goZWUpKSYmZnVuY3Rpb24gd2soUyxPLGspe08uQ2VsbFhmPVtdO3ZhciBLLGVlPSExOyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBtZT15cihvZSkscGU9MDtzd2l0Y2goR24obWVbMF0pKXtjYXNlIjxj'@;
put 'ZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwv'@;
put 'ZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoSz1tZSlbMF0scGU9MDtwZTxXMy5sZW5ndGg7KytwZSlLW1czW3BlXV0mJihLW1czW3BlXV09cGFyc2VJbnQoS1tXM1twZV1dLDEwKSk7Zm9yKHBlPTA7cGU8WTMubGVuZ3RoOysrcGUpS1tZM1twZV1dJiYo'@;
put 'S1tZM1twZV1dPWVpKEtbWTNbcGVdXSkpO2lmKE8uTnVtYmVyRm10JiZLLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoTy5OdW1iZXJGbXRbSy5udW1GbXRJZF09PU8uTnVtYmVyRm10W3BlXSl7Sy5udW1GbXRJZD1wZTticmVha31PLkNlbGxTdHlsZVhmJiZLLnhmSWQm'@;
put 'Jk8uQ2VsbFN0eWxlWGZbSy54ZklkXSYmTy5DZWxsU3R5bGVYZltLLnhmSWRdLnN0eWxlJiYoSy5zdHlsZT1PLkNlbGxTdHlsZVhmW0sueGZJZF0uc3R5bGUpLE8uQ2VsbFhmLnB1c2goSyk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGJlPXt9O21lLnZl'@;
put 'cnRpY2FsJiYoYmUudmVydGljYWw9bWUudmVydGljYWwpLG1lLmhvcml6b250YWwmJihiZS5ob3Jpem9udGFsPW1lLmhvcml6b250YWwpLG51bGwhPW1lLnRleHRSb3RhdGlvbiYmKGJlLnRleHRSb3RhdGlvbj1tZS50ZXh0Um90YXRpb24pLG1lLmluZGVudCYmKGJlLmluZGVudD1tZS5pbmRl'@;
put 'bnQpLG1lLndyYXBUZXh0JiYoYmUud3JhcFRleHQ9ZWkobWUud3JhcFRleHQpKSxtZS5zaHJpbmtUb0ZpdCYmKGJlLnNocmlua1RvRml0PWVpKG1lLnNocmlua1RvRml0KSksSy5hbGlnbm1lbnQ9YmU7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6Sy5wcm90ZWN0aW9uPXt9LGVpKG1lLmhpZGRl'@;
put 'bikmJihLLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1tZS5sb2NrZWQmJihLLnByb3RlY3Rpb24uZWRpdGFibGU9IWVpKG1lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6ZWU9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+Ijpj'@;
put 'YXNlIjwvZXh0PiI6ZWU9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIWVlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbWVbMF0rIiBpbiBjZWxsWGZzIil9fSl9KGJ0LGl0LFR0KSwoYnQ9ZXQubWF0Y2goVmUpKSYmZnVuY3Rpb24gQ2soUyxPLGssSyl7Ty5EWEZ8fChP'@;
put 'LkRYRj1bXSksKFNbMF0ubWF0Y2goUWkpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihlZSl7Ty5EWEYucHVzaChMNChlZSxPLGssSykpfSl9KGJ0LGl0LGN0LFR0KSwoYnQ9ZXQubWF0Y2goUGUpKSYmZnVuY3Rpb24gWlYoUyxPLGssSyl7Ty5UYWJsZXx8KE8uVGFibGU9W10pLChTWzBdLm1hdGNo'@;
put 'KEtyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZWUpe08uVGFibGUucHVzaChmdW5jdGlvbiBVVihTLE8sayxLKXt2YXIgZWU9ITEsb2U9e307cmV0dXJuKFMubWF0Y2godG4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihtZSl7dmFyIHBlPXlyKG1lKTtzd2l0Y2goR24ocGVbMF0pKXtjYXNlIjx0'@;
put 'YWJsZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6b2UubmFtZT1wZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxvZS5yYXduYW1lPXBlLm5hbWUsb2UucGl2b3Q9IXBlLnBpdm90fHxlaShwZS5waXZvdCksb2UudGFibGU9IXBlLnRhYmxlfHxlaShwZS50YWJsZSk7'@;
put 'YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZihwZS50eXBlJiZwZS5keGZJZCl7aWYoIU8uRFhGfHwhTy5EWEZbK3Bl'@;
put 'LmR4ZklkXSl0aHJvdyBuZXcgRXJyb3IobWUrIiBjYW5ub3QgZmluZCBEWEYiKTtvZVtwZS50eXBlXT1PLkRYRlsrcGUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6ZWU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmVlPSExO2JyZWFrO2RlZmF1bHQ6aWYoSyYmSy5XVEYmJiFlZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoInVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLG9lfShlZSxPLDAsSykpfSl9KGJ0LGl0LDAsVHQpLChpdC5Gb250c3x8W10pWzBdJiZJNChpdC5Gb250c1swXSksaXQpOml0fX0oKSxNaz1Icigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6R2kubWFpblsw'@;
put 'XSwieG1sbnM6dnQiOkdpLnZ0fSk7ZnVuY3Rpb24gQnYoUyxPKXt2YXIgSyxrPVtEaSxNa107Uy5TU0YmJm51bGwhPShLPWZ1bmN0aW9uIEU1KFMpe3ZhciBPPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihrKXtm'@;
put 'b3IodmFyIEs9a1swXTtLPD1rWzFdOysrSyludWxsIT1TW0tdJiYoT1tPLmxlbmd0aF09SHIoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6Syxmb3JtYXRDb2RlOlByKFNbS10pfSkpfSksMT09PU8ubGVuZ3RoPyIiOihPW08ubGVuZ3RoXT0iPC9udW1GbXRzPiIsT1swXT1IcigibnVtRm10cyIs'@;
put 'bnVsbCx7Y291bnQ6Ty5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLE8uam9pbigiIikpfShTLlNTRikpJiYoa1trLmxlbmd0aF09Syksa1trLmxlbmd0aF09ZnVuY3Rpb24gdjIoUyl7dmFyIE89W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgSz1bIjxmb250PiJdO2su'@;
put 'Ym9sZCYmSy5wdXNoKCI8Yi8+Iiksay5pdGFsaWMmJksucHVzaCgiPGkvPiIpLGsuc3RyaWtlJiZLLnB1c2goIjxzdHJpa2UvPiIpLGsuc2hhZG93JiZLLnB1c2goIjxzaGFkb3cvPiIpLHg1WytrLnVuZGVybGluZV0mJksucHVzaCgnPHUgdmFsPSInK3g1WytrLnVuZGVybGluZV0rJyIvPicp'@;
put 'LGsuc3omJksucHVzaCgnPHN6IHZhbD0iJytrLnN6KyciLz4nKSxrLmNvbG9yJiZLLnB1c2gobWQoay5jb2xvciwhMCkpLGsubmFtZSYmSy5wdXNoKCc8bmFtZSB2YWw9Iicray5uYW1lKyciLz4nKSxrLmZhbWlseSYmSy5wdXNoKCc8ZmFtaWx5IHZhbD0iJytrLmZhbWlseSsnIi8+Jyksay5z'@;
put 'Y2hlbWUmJksucHVzaCgnPHNjaGVtZSB2YWw9Iicray5zY2hlbWUrJyIvPicpLGsudmFsaWduJiZLLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK2sudmFsaWduKygic3ViIj09ay52YWxpZ258fCJzdXBlciI9PWsudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksTy5wdXNoKEsuam9pbigiIikr'@;
put 'IjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrTy5sZW5ndGgrJyI+JytPLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KChTLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gYmsoUyl7dmFyIE89W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgSz1u'@;
put 'dWxsO2lmKGsuc3RvcHMmJmsuc3RvcHMubGVuZ3RoKXt2YXIgZWU9e307ay5hbmdsZSYmKGVlLmRlZ3JlZT1NYXRoLnJvdW5kKGsuYW5nbGUpKSxLPWsuc3RvcHMubWFwKGZ1bmN0aW9uKG9lKXtyZXR1cm4gSHIoInN0b3AiLG1kKG9lLCJjb2xvciIsITApLG51bGwhPW9lLnY/e3Bvc2l0aW9u'@;
put 'Om9lLnZ9Ont9KX0pLE8ucHVzaCgiPGZpbGw+IitIcigiZ3JhZGllbnRGaWxsIixLLmpvaW4oIiIpLGVlKSsiPC9maWxsPiIpfWVsc2V7aWYoay5mZ0NvbG9yKXtpZihLPShLfHwiIikrIjxmZ0NvbG9yICIsay5mZ0NvbG9yLnRoZW1lKUsrPSd0aGVtZT0iJytrLmZnQ29sb3IudGhlbWUrJyIn'@;
put 'KyhrLmZnQ29sb3IudGludD8nIHRpbnQ9Iicray5mZ0NvbG9yLnRpbnQrJyInOiIiKSsiLz4iO2Vsc2UgaWYobnVsbCE9ay5mZ0NvbG9yLmluZGV4JiZudWxsPT1rLmZnQ29sb3IucmdiKUsrPSdpbmRleGVkPSInK2suZmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuZmdDb2xvci5hdXRv'@;
put 'KUsrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuZmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIitSZShrLmZnQ29sb3IpLmpvaW4oInwiKSk7Sys9J3JnYj0iRkYnK0wwKGsuZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PWsucGF0dGVyblR5cGUmJiFrLmJn'@;
put 'Q29sb3ImJihrLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoay5iZ0NvbG9yKWlmKEs9KEt8fCIiKSsiPGJnQ29sb3IgIixrLmJnQ29sb3IudGhlbWUpSys9J3RoZW1lPSInK2suYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPWsuYmdDb2xvci5pbmRleCYmbnVsbD09ay5iZ0NvbG9y'@;
put 'LnJnYilLKz0naW5kZXhlZD0iJytrLmJnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihrLmJnQ29sb3IuYXV0bylLKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1rLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrUmUoay5iZ0NvbG9yKS5qb2luKCJ8IikpO0sr'@;
put 'PSdyZ2I9IkZGJytMMChrLmJnQ29sb3IucmdiKSsnIi8+J31PLnB1c2goIjxmaWxsPiIrSHIoInBhdHRlcm5GaWxsIixLLHtwYXR0ZXJuVHlwZTprLnBhdHRlcm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK08ubGVuZ3RoKyciPicrTy5qb2luKCIiKSsiPC9maWxscz4i'@;
put 'fSgoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIERvKFMpe3ZhciBPPVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEs9W107Sy5wdXNoKFI0KGsubGVmdCwibGVmdCIpKSxLLnB1c2goUjQoay5yaWdodCwicmlnaHQiKSksSy5wdXNoKFI0'@;
put 'KGsudG9wLCJ0b3AiKSksSy5wdXNoKFI0KGsuYm90dG9tLCJib3R0b20iKSksSy5wdXNoKFI0KGsuZGlhZ29uYWwsImRpYWdvbmFsIikpLE8ucHVzaCgiPGJvcmRlcj4iK0suam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK08ubGVuZ3RoKyciPicrTy5qb2luKCIi'@;
put 'KSsiPC9ib3JkZXJzPiJ9KChTLlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBwbmUoUyl7dmFyIE89Wyc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsr'@;
put 'K2spTy5wdXNoKEhyKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6U1trXS5udW1GbXRJZHx8MCxmb250SWQ6U1trXS5mb250SWR8fDAsZmlsbElkOlNba10uZmlsbElkfHwwLGJvcmRlcklkOlNba10uYm9yZGVySWR8fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMgY291bnQ9IicrTy5sZW5ndGgrJyI+'@;
put 'JytPLmpvaW4oIiIpKyI8L2NlbGxTdHlsZVhmcz4ifShPLmNlbGxTdHlsZVhmcyksKEs9ZnVuY3Rpb24gaG5lKFMpe3ZhciBPPVtdO3JldHVybiBPW08ubGVuZ3RoXT1IcigiY2VsbFhmcyIsbnVsbCksUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBLPWsuYWxpZ25tZW50O2RlbGV0ZSBrLmFs'@;
put 'aWdubWVudDt2YXIgZWU9ay5wcm90ZWN0aW9uO2RlbGV0ZSBrLnByb3RlY3Rpb247dmFyIG9lPUs/SHIoImFsaWdubWVudCIsbnVsbCxLKToiIjtvZSs9ZWU/SHIoInByb3RlY3Rpb24iLG51bGwse2hpZGRlbjplZS5oaWRkZW4/MTowLGxvY2tlZDplZS5lZGl0YWJsZT8wOjF9KToiIixPW08u'@;
put 'bGVuZ3RoXT1IcigieGYiLG9lfHxudWxsLGspLEsmJihrLmFsaWdubWVudD1LKSxlZSYmKGsucHJvdGVjdGlvbj1lZSl9KSxPW08ubGVuZ3RoXT0iPC9jZWxsWGZzPiIsMj09PU8ubGVuZ3RoPyIiOihPWzBdPUhyKCJjZWxsWGZzIixudWxsLHtjb3VudDpPLmxlbmd0aC0yfSkucmVwbGFjZSgi'@;
put 'Lz4iLCI+IiksTy5qb2luKCIiKSl9KE8uY2VsbFhmcykpJiYoa1trLmxlbmd0aF09Syksa1trLmxlbmd0aF09ZnVuY3Rpb24gbW5lKFMpe3ZhciBPPVsnPGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0'@;
put 'aDsrK2spTy5wdXNoKEhyKCJjZWxsU3R5bGUiLG51bGwse25hbWU6U1trXS5uYW1lLHhmSWQ6a30pKTtyZXR1cm4nPGNlbGxTdHlsZXMgY291bnQ9IicrTy5sZW5ndGgrJyI+JytPLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oTy5jZWxsU3R5bGVYZnMpLFMuU3R5bGVzLkRYRnx8KFMuU3R5'@;
put 'bGVzLkRYRj1bXSk7dmFyIGVlPWZ1bmN0aW9uIGxoKFMsTyxrKXt2YXIgSz1bJzx0YWJsZVN0eWxlcyBjb3VudD0iJysoU3x8W10pLmxlbmd0aCsnIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCInXTty'@;
put 'ZXR1cm4gUyYmUy5sZW5ndGg/KEtbMF0rPSI+IixTLmZvckVhY2goZnVuY3Rpb24oZWUpe0sucHVzaChmdW5jdGlvbiBUQyhTLE8sayl7dmFyIEs9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxhc3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlw'@;
put 'ZSIsInNlY29uZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRvdGFsQ29sdW1uIiwic2Vjb25kU3VidG90'@;
put 'YWxDb2x1bW4iLCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3ViaGVhZGluZyIsInRoaXJkQ29sdW1uU3Vi'@;
put 'aGVhZGluZyIsImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtpZihTW29lXSl7dmFyIG1lPWZTKE8sU1tvZV0pO0sucHVz'@;
put 'aCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK21lKyciIHR5cGU9Iicrb2UrJyIvPicpfX0pO3ZhciBlZT0nPHRhYmxlU3R5bGUgY291bnQ9IicrSy5sZW5ndGgrJyIgcGl2b3Q9IicrICshIVMucGl2b3QrJyIgbmFtZT0iJytTLm5hbWUrJyInO3JldHVybiBLLmxlbmd0aD9lZSsiPiIr'@;
put 'Sy5qb2luKCIiKSsiPC90YWJsZVN0eWxlPiI6ZWUrIi8+In0oZWUsTykpfSksSy5qb2luKCIiKSsiPC90YWJsZVN0eWxlcz4iKTpLWzBdKyIvPiJ9KChTLlN0eWxlc3x8e30pLlRhYmxlfHxbXSxTLlN0eWxlcy5EWEYpO3JldHVybiBrW2subGVuZ3RoXT1mdW5jdGlvbiBXVihTLE8pe2lmKCFT'@;
put 'Lmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBrPVsnPGR4ZnMgY291bnQ9IicrUy5sZW5ndGgrJyI+J107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihLKXtrLnB1c2goZnVuY3Rpb24gZTgoUyxPKXt2YXIgaz17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRB'@;
put 'bGlnbiJ9LEs9WyI8ZHhmPiJdLGVlPVtdLG9lPVtdLG1lPVtdLGJlPVtdO3JldHVybiBSZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXtzd2l0Y2goVmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlInVuZGVybGluZSI6Y2FzZSJjb2xvciI6Y2FzZSJ2YWxpZ24i'@;
put 'OmNhc2Uic3oiOmNhc2UibmFtZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjaGFyc2V0IjpjYXNlImZhbWlseSI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOmNhc2Uic2NoZW1lIjplZS5wdXNoKFZlKTticmVhaztjYXNlImJnQ29sb3IiOmNhc2UiZmdDb2xvciI6bWUu'@;
put 'cHVzaChWZSk7YnJlYWs7Y2FzZSJ6IjpvZS5wdXNoKFZlKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjpiZS5wdXNoKFZlKTticmVhaztjYXNlInBhdHRlcm5U'@;
put 'eXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitWZSsiIGluIERYRiJ9fSksZWUubGVuZ3RoPjAmJihLLnB1c2goIjxmb250PiIpLGVlLmZvckVhY2goZnVuY3Rp'@;
put 'b24oVmUpe3N3aXRjaChWZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpLLnB1c2goIjwiKyhrW1ZlXXx8VmUpKycgdmFsPSInKyhTW1ZlXT8iMSI6IjAiKSsnIi8+Jyk7'@;
put 'YnJlYWs7Y2FzZSJjb2xvciI6Sy5wdXNoKG1kKFNbVmVdLFZlLCEwKSk7YnJlYWs7Y2FzZSJmYW1pbHkiOmNhc2UibmFtZSI6Y2FzZSJzeiI6Y2FzZSJzY2hlbWUiOksucHVzaCgiPCIrKGtbVmVdfHxWZSkrJyB2YWw9IicrU1tWZV0rJyIvPicpO2JyZWFrO2Nhc2UidW5kZXJsaW5lIjpLLnB1'@;
put 'c2goJzx1IHZhbD0iJyt4NVtTW1ZlXXx8MF0rJyIvPicpO2JyZWFrO2Nhc2UidmFsaWduIjpLLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK1MudmFsaWduKygic3ViIj09Uy52YWxpZ258fCJzdXBlciI9PVMudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+Jyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJV'@;
put 'bnN1cHBvcnRlZCAiK1ZlKyIgOiBmb250IERYRiJ9fSksSy5wdXNoKCI8L2ZvbnQ+IikpLG9lLmxlbmd0aD4wJiZLLnB1c2goJzxudW1GbXQgZm9ybWF0Q29kZT0iJytQcihTLnopKyciIG51bUZtdElkPSInK2Z1bmN0aW9uIGhTKFMsTyl7aWYoIm51bWJlciI9PXR5cGVvZiBTKXJldHVybiBT'@;
put 'O3ZhciBrPU8ucmV2c3NmW1M/PyJHZW5lcmFsIl0sSz02MDtpZihudWxsPT1rKWZvcig7SzwzOTI7KytLKWlmKG51bGw9PU8uc3NmW0tdKXJldHVybiBBLmxvYWQoUyxLKSxPLnNzZltLXT1TLE8ucmV2c3NmW1NdPUssSztyZXR1cm4ga30oUy56LE8pKyciLz4nKSxtZS5sZW5ndGg+MCYmKEsu'@;
put 'cHVzaCgiPGZpbGw+IiksSy5wdXNoKCI8cGF0dGVybkZpbGwiKyhTLnBhdHRlcm5UeXBlPycgcGF0dGVyblR5cGU9IicrUy5wYXR0ZXJuVHlwZSsnIj4nOiI+IikpLG1lLmZvckVhY2goZnVuY3Rpb24oVmUpe3N3aXRjaChWZSl7Y2FzZSJwYXR0ZXJuVHlwZSI6YnJlYWs7Y2FzZSJmZ0NvbG9y'@;
put 'IjpjYXNlImJnQ29sb3IiOksucHVzaChtZChTW1ZlXSxWZSwhMCkpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitWZSsiIDogZmlsbCBEWEYifX0pLEsucHVzaCgiPC9wYXR0ZXJuRmlsbD4iKSxLLnB1c2goIjwvZmlsbD4iKSksYmUubGVuZ3RoPjA/KEsucHVzaChbIjxib3Jk'@;
put 'ZXIiLG51bGwhPVMuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISFTLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9Uy5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEhUy5kaWFnb25hbFVwKyciJzoiIiwiPiJdLmpvaW4oIiIpKSxiZS5mb3JFYWNoKGZ1bmN0aW9uKFZl'@;
put 'KXtLLnB1c2goUjQoU1tWZV0sVmUpKX0pLEsucHVzaCgiPC9ib3JkZXI+IikpOihudWxsIT1TLmRpYWdvbmFsRG93bnx8bnVsbCE9Uy5kaWFnb25hbFVwKSYmSy5wdXNoKFsiPGJvcmRlciIsbnVsbCE9Uy5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIVMuZGlhZ29uYWxEb3du'@;
put 'KyciJzoiIixudWxsIT1TLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISFTLmRpYWdvbmFsVXArJyInOiIiLCIvPiJdLmpvaW4oIiIpKSwxPT1LLmxlbmd0aD8iPGR4Zi8+IjpLLmpvaW4oIiIpKyI8L2R4Zj4ifShLLE8pKX0pLGsuam9pbigiIikrIjwvZHhmcz4ifShTLlN0eWxlcy5E'@;
put 'WEYsTyksa1trLmxlbmd0aF09ZWUsay5sZW5ndGg+MiYmKGtbay5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9ZnVuY3Rpb24gQUMoUyxPLGspe2t8fChrPXZuKDYrNCpPLmxlbmd0aCkpLGsud3JpdGVfc2hpZnQoMixTKSxP'@;
put 'YyhPLGspO3ZhciBLPWsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprO3JldHVybiBudWxsPT1rLmwmJihrLmw9ay5sZW5ndGgpLEt9ZnVuY3Rpb24gJFYoUyl7cmV0dXJue2NvbG9yOnQyKFMpLHBvczpSbChTKX19WGEuU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcv'@;
put 'b2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIGtDPVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwi'@;
put 'ZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLEtWPUhlKGtDKSxUNT1bImdlbmVyYWwiLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQi'@;
put 'LCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLHQ4PVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24gTnUoUyxPLGspe2t8fChrPXZuKDE2KSksay53cml0ZV9zaGlmdCgyLE98fDApLGsud3Jp'@;
put 'dGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5mb250SWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmZpbGxJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuYm9yZGVySWR8fDApLGsud3JpdGVfc2hpZnQoMSxTLmFsaWdubWVudCYmUy5hbGlnbm1lbnQudGV4dFJvdGF0'@;
put 'aW9ufHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1lbnQmJlMuYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIEs9MCxlZT0wO2lmKFMuYWxpZ25tZW50KXtpZihTLmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgb2U9VDUuaW5kZXhPZihTLmFsaWdubWVudC5ob3Jpem9udGFsKTtvZTwwJiYo'@;
put 'b2U9MCksS3w9b2V9aWYoUy5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBtZT10OC5pbmRleE9mKFMuYWxpZ25tZW50LnZlcnRpY2FsKTttZTwwJiYobWU9MiksS3w9bWU8PDN9Uy5hbGlnbm1lbnQud3JhcFRleHQmJihLfD02NCksUy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihlZXw9MSl9cmV0'@;
put 'dXJuIGsud3JpdGVfc2hpZnQoMSxLKSxrLndyaXRlX3NoaWZ0KDEsZWUpLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa312YXIgZ2Q9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFpciIsIm1lZGl1bURh'@;
put 'c2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBBNShTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBrPXQyKFMpO3JldHVybntzdHlsZTpnZFtPXSxjb2xvcjprfX1m'@;
put 'dW5jdGlvbiBrNShTLE8pe3JldHVybiBPfHwoTz12bigxMCkpLFMmJlMuc3R5bGUmJiIiIT1TLnN0eWxlJiYibm9uZSIhPVMuc3R5bGUmJi0xIT09Z2QuaW5kZXhPZihTLnN0eWxlKT8oTy53cml0ZV9zaGlmdCgxLGdkLmluZGV4T2YoUy5zdHlsZSkpLE8ud3JpdGVfc2hpZnQoMSwwKSxTLmNv'@;
put 'bG9yP3dmKFMuY29sb3IsTyk6KE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDQsMCkpKTooTy53cml0ZV9zaGlmdCgxLDApLE8ud3JpdGVfc2hpZnQoMSwwKSxPLndyaXRlX3NoaWZ0KDQsMCksTy53cml0ZV9zaGlmdCg0LDApKSxPfWZ1bmN0aW9uIEVrKFMsTyl7cmV0dXJuIE98'@;
put 'fChPPXZuKDUyKSksTy53cml0ZV9zaGlmdCg0LFMueGZJZCksTy53cml0ZV9zaGlmdCgyLDEpLE8ud3JpdGVfc2hpZnQoMSwrUy5idWlsdGluSWQpLE8ud3JpdGVfc2hpZnQoMSwwKSxiZihTLm5hbWV8fCIiLE8pLE8ubGVuZ3RoPk8ubD9PLnNsaWNlKDAsTy5sKTpPfWZ1bmN0aW9uIHp2KFMs'@;
put 'Tyl7IU98fCFPLnRoZW1lRWxlbWVudHN8fCFPLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT1TLnRoZW1lJiYoUy5yZ2I9XzUoTy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtTLnRoZW1lXS5yZ2IsUy50aW50fHwwKSl9ZnVuY3Rpb24gTGsoUyxPKXt2YXIgaz12aSgpO3JldHVybiBW'@;
put 'cihrLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBKVihTLE8pe2lmKE8pe3ZhciBrPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihLKXtmb3IodmFyIGVlPUtbMF07ZWU8PUtbMV07KytlZSludWxsIT1PW2VlXSYmKytrfSksMCE9ayYm'@;
put 'KFZyKFMsIkJydEJlZ2luRm10cyIsJDAoaykpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oSyl7Zm9yKHZhciBlZT1LWzBdO2VlPD1LWzFdOysrZWUpbnVsbCE9T1tlZV0mJlZyKFMsIkJydEZtdCIsQUMoZWUsT1tlZV0pKX0pLFZyKFMsIkJydEVu'@;
put 'ZEZtdHMiKSl9fShrLFMuU1NGKSxmdW5jdGlvbiBRVihTLE8pe3ZhciBrPU8ubGVuZ3RoOzAhPWsmJihWcihTLCJCcnRCZWdpbkZvbnRzIiwkMChrKSksTy5mb3JFYWNoKGZ1bmN0aW9uKEspe1ZyKFMsIkJydEZvbnQiLGZ1bmN0aW9uIEdWKFMsTyl7T3x8KE89dm4oMTUzKSksTy53cml0ZV9z'@;
put 'aGlmdCgyLDIwKlMuc3opLGZ1bmN0aW9uIG92KFMsTyl7T3x8KE89dm4oMikpLE8ud3JpdGVfc2hpZnQoMSwoUy5pdGFsaWM/MjowKXwoUy5zdHJpa2U/ODowKXwoUy5vdXRsaW5lPzE2OjApfChTLnNoYWRvdz8zMjowKXwoUy5jb25kZW5zZT82NDowKXwoUy5leHRlbmQ/MTI4OjApKSxPLndy'@;
put 'aXRlX3NoaWZ0KDEsMCl9KFMsTyksTy53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKTt2YXIgaz0wOyJzdXBlciI9PVMudmFsaWduP2s9MToic3ViIj09Uy52YWxpZ24mJihrPTIpLE8ud3JpdGVfc2hpZnQoMixrKSxPLndyaXRlX3NoaWZ0KDEsUy51bmRlcmxpbmV8fDApLE8ud3JpdGVf'@;
put 'c2hpZnQoMSxTLmZhbWlseXx8MCksTy53cml0ZV9zaGlmdCgxLFMuY2hhcnNldHx8MCksTy53cml0ZV9zaGlmdCgxLDApLHdmKFMuY29sb3IsTyk7dmFyIEs9MDtyZXR1cm4ibWFqb3IiPT1TLnNjaGVtZSYmKEs9MSksIm1pbm9yIj09Uy5zY2hlbWUmJihLPTIpLE8ud3JpdGVfc2hpZnQoMSxL'@;
put 'KSxPYyhTLm5hbWUsTyksTy5sZW5ndGg+Ty5sP08uc2xpY2UoMCxPLmwpOk99KEspKX0pLFZyKFMsIkJydEVuZEZvbnRzIikpfShrLChTLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gZUIoUyxPKXt2YXIgaz1PLmxlbmd0aDswIT1rJiYoVnIoUywiQnJ0QmVnaW5GaWxscyIsJDAo'@;
put 'aykpLE8uZm9yRWFjaChmdW5jdGlvbihLKXtWcihTLCJCcnRGaWxsIixmdW5jdGlvbiBRMChTLE8pe098fChPPXZuKDg0KSk7dmFyIGs9S1ZbUy5wYXR0ZXJuVHlwZV07bnVsbD09ayYmKGs9NDApLE8ud3JpdGVfc2hpZnQoNCxrPStrKTt2YXIgSz0wO2lmKDQwIT1rKWZvcih3ZihTLmZnQ29s'@;
put 'b3J8fHtpbmRleDo2NH0sTyksd2YoUy5iZ0NvbG9yfHx7aW5kZXg6NjV9LE8pO0s8MTI7KytLKU8ud3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7Szw0OysrSylPLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtLPDEyOysrSylPLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIE8ubGVuZ3RoPk8ubD9P'@;
put 'LnNsaWNlKDAsTy5sKTpPfShLKSl9KSxWcihTLCJCcnRFbmRGaWxscyIpKX0oaywoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIHRCKFMsTyl7dmFyIGs9Ty5sZW5ndGg7MCE9ayYmKFZyKFMsIkJydEJlZ2luQm9yZGVycyIsJDAoaykpLE8uZm9yRWFjaChmdW5jdGlvbihLKXtW'@;
put 'cihTLCJCcnRCb3JkZXIiLGZ1bmN0aW9uIHhrKFMsTyl7cmV0dXJuIE98fChPPXZuKDUxKSksTy53cml0ZV9zaGlmdCgxLDApLGs1KFMudG9wLE8pLGs1KFMuYm90dG9tLE8pLGs1KFMubGVmdCxPKSxrNShTLnJpZ2h0LE8pLGs1KG51bGwsTyksTy5sZW5ndGg+Ty5sP08uc2xpY2UoMCxPLmwp'@;
put 'Ok99KEspKX0pLFZyKFMsIkJydEVuZEJvcmRlcnMiKSl9KGssKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIGtrKFMsTyl7dmFyIGs9MTtpZihPJiYoaz1PLmxlbmd0aCksVnIoUywiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLCQwKGspKSxWcihTLCJCcnRYRiIsTnUoe251bUZt'@;
put 'dElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxPKWZvcih2YXIgSz0xO0s8Ty5sZW5ndGg7KytLKVZyKFMsIkJydFhGIixOdSh7bnVtRm10SWQ6T1tLXS5udW1GbXRJZHx8MCxmb250SWQ6T1tLXS5mb250SWR8fDAsZmlsbElkOk9bS10uZmlsbElkfHwwLGJvcmRl'@;
put 'cklkOk9bS10uYm9yZGVySWR8fDB9LDY1NTM1KSk7VnIoUywiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KGssTy5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIERrKFMsTyl7VnIoUywiQnJ0QmVnaW5DZWxsWEZzIiwkMChPLmxlbmd0aCkpLE8uZm9yRWFjaChmdW5jdGlvbihrKXtWcihTLCJCcnRYRiIs'@;
put 'TnUoaywwKSl9KSxWcihTLCJCcnRFbmRDZWxsWEZzIil9KGssTy5jZWxsWGZzKSxmdW5jdGlvbiBJayhTLE8pe3ZhciBrPTE7aWYoTyYmKGs9Ty5sZW5ndGgpLFZyKFMsIkJydEJlZ2luU3R5bGVzIiwkMChrKSksVnIoUywiQnJ0U3R5bGUiLEVrKHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToi'@;
put 'Tm9ybWFsIn0pKSxPKWZvcih2YXIgSz0xO0s8Ty5sZW5ndGg7KytLKVZyKFMsIkJydFN0eWxlIixFayh7eGZJZDpLLGJ1aWx0aW5JZDowLG5hbWU6T1tLXS5uYW1lfSkpO1ZyKFMsIkJydEVuZFN0eWxlcyIpfShrLE8uY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBVdihTKXtWcihTLCJCcnRCZWdp'@;
put 'bkRYRnMiLCQwKDApKSxWcihTLCJCcnRFbmREWEZzIil9KGspLGZ1bmN0aW9uIFJrKFMpe1ZyKFMsIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIFRrKFMsTyxrKXt2YXIgSz12bigyMDUyKTtyZXR1cm4gSy53cml0ZV9zaGlmdCg0LFMpLGJmKE8sSyksYmYoayxLKSxLLmxlbmd0aD5L'@;
put 'Lmw/Sy5zbGljZSgwLEsubCk6S30oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxWcihTLCJCcnRFbmRUYWJsZVN0eWxlcyIpfShrKSxWcihrLCJCcnRFbmRTdHlsZVNoZWV0Iiksay5lbmQoKX1YYS5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h'@;
put 'dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIE9rPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6'@;
put 'YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIHJCKFMsTyxrKXtPLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBLPXt9OyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBvZT15cihl'@;
put 'ZSk7c3dpdGNoKG9lWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6Sy5yZ2I9b2UudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpLLnJnYj1vZS5sYXN0'@;
put 'Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNh'@;
put 'c2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+Ijpj'@;
put 'YXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09b2VbMF0uY2hhckF0KDEpPyhPLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW09rLmluZGV4T2Yob2VbMF0pXT1LLEs9e30p'@;
put 'OksubmFtZT1vZVswXS5zbGljZSgzLG9lWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiBpQigpe31mdW5jdGlvbiBhQigpe312YXIgc0I9LzxhOmNs'@;
put 'clNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sUGs9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+Lyx2bmU9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sb0I9LzxhOnRoZW1lRWxlbWVudHMoW14+XSop'@;
put 'Pltcc1xTXSo8XC9hOnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBJQyhTLE8pe2lmKCFTfHwwPT09Uy5sZW5ndGgpcmV0dXJuIElDKGxCKCkpO3ZhciBrLEs9e307aWYoIShrPVMubWF0Y2gob0IpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGluIHRoZW1lIik7'@;
put 'cmV0dXJuIGZ1bmN0aW9uIEZrKFMsTyxrKXt2YXIgSztPLnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIixzQixyQl0sWyJmb250U2NoZW1lIixQayxpQl0sWyJmbXRTY2hlbWUiLHZuZSxhQl1dLmZvckVhY2goZnVuY3Rpb24oZWUpe2lmKCEoSz1TLm1hdGNoKGVlWzFdKSkpdGhyb3cg'@;
put 'bmV3IEVycm9yKGVlWzBdKyIgbm90IGZvdW5kIGluIHRoZW1lRWxlbWVudHMiKTtlZVsyXShLLE8sayl9KX0oa1swXSxLLE8pLEsucmF3PVMsS31mdW5jdGlvbiBsQihTLE8pe2lmKE8mJk8udGhlbWVYTFNYKXJldHVybiBPLnRoZW1lWExTWDtpZihTJiYic3RyaW5nIj09dHlwZW9mIFMucmF3'@;
put 'KXJldHVybiBTLnJhdzt2YXIgaz1bRGldO3JldHVybiBrW2subGVuZ3RoXT0nPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSI+JyxrW2subGVuZ3RoXT0iPGE6dGhlbWVFbGVt'@;
put 'ZW50cz4iLGtbay5sZW5ndGhdPSc8YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSc8YTpkazE+PGE6c3lzQ2xyIHZhbD0id2luZG93VGV4dCIgbGFzdENscj0iMDAwMDAwIi8+PC9hOmRrMT4nLGtbay5sZW5ndGhdPSc8YTpsdDE+PGE6c3lzQ2xyIHZhbD0id2luZG93'@;
put 'IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPicsa1trLmxlbmd0aF09JzxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8+PC9hOmRrMj4nLGtbay5sZW5ndGhdPSc8YTpsdDI+PGE6c3JnYkNsciB2YWw9IkVFRUNFMSIvPjwvYTpsdDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50MT48'@;
put 'YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8+PC9hOmFjY2VudDE+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0iQzA1MDREIi8+PC9hOmFjY2VudDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mz48YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8+PC9hOmFjY2VudDM+Jyxr'@;
put 'W2subGVuZ3RoXT0nPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD0iODA2NEEyIi8+PC9hOmFjY2VudDQ+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2Ii8+PC9hOmFjY2VudDU+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Nj48YTpzcmdiQ2xyIHZhbD0i'@;
put 'Rjc5NjQ2Ii8+PC9hOmFjY2VudDY+JyxrW2subGVuZ3RoXT0nPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGluaz4nLGtbay5sZW5ndGhdPSc8YTpmb2xIbGluaz48YTpzcmdiQ2xyIHZhbD0iODAwMDgwIi8+PC9hOmZvbEhsaW5rPicsa1trLmxlbmd0aF09IjwvYTpj'@;
put 'bHJTY2hlbWU+IixrW2subGVuZ3RoXT0nPGE6Zm9udFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOm1ham9yRm9udD4iLGtbay5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPicsa1trLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLGtbay5s'@;
put 'ZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNl'@;
put 'PSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIv'@;
put 'Picsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhh'@;
put 'aSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJH'@;
put 'dWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJNb29sQm9yYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxrW2subGVu'@;
put 'Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0'@;
put 'eXBlZmFjZT0iTVYgQm9saSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRh'@;
put 'bWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpm'@;
put 'b250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxrW2su'@;
put 'bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBl'@;
put 'ZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0aF09IjwvYTptYWpvckZvbnQ+IixrW2subGVuZ3RoXT0iPGE6bWlub3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5'@;
put 'cGVmYWNlPSJDYWxpYnJpIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdc'@;
put 'dTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09'@;
put 'JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iQXJp'@;
put 'YWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZy'@;
put 'aW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJEYXVuUGVuaCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFj'@;
put 'ZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBl'@;
put 'ZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+'@;
put 'JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRh'@;
put 'bWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0'@;
put 'eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9'@;
put 'IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhd'@;
put 'PSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLGtbay5sZW5ndGhdPSI8L2E6bWlub3JGb250PiIsa1trLmxlbmd0aF09IjwvYTpmb250U2No'@;
put 'ZW1lPiIsa1trLmxlbmd0aF09JzxhOmZtdFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09JzxhOmdy'@;
put 'YWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6'@;
put 'Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIzNTAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIzNzAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpz'@;
put 'Y2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjE1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEiLz4nLGtb'@;
put 'ay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTAwMDAw'@;
put 'Ii8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIxMzAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNoYWRlIHZhbD0i'@;
put 'MTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjAiLz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVu'@;
put 'Z3RoXT0iPC9hOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOmxuIHc9Ijk1MjUiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFs'@;
put 'PSI5NTAwMCIvPjxhOnNhdE1vZCB2YWw9IjEwNTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09JzxhOmxuIHc9IjI1NDAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xp'@;
put 'ZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMzgxMDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVD'@;
put 'bHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSI8L2E6bG5TdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5n'@;
put 'dGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzgwMDAiLz48L2E6c3JnYkNscj48'@;
put 'L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJh'@;
put 'ZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5n'@;
put 'dGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIw'@;
put 'Ij48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOnNjZW5lM2Q+PGE6Y2FtZXJhIHByc3Q9Im9ydGhvZ3JhcGhpY0Zyb250Ij48'@;
put 'YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPjwvYTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPSJ0aHJlZVB0IiBkaXI9InQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAwMDAwIi8+PC9hOmxpZ2h0UmlnPjwvYTpzY2VuZTNkPicsa1trLmxlbmd0aF09JzxhOnNwM2Q+PGE6'@;
put 'YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPjwvYTpzcDNkPicsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6YmdGaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6c29saWRGaWxsPjxh'@;
put 'OnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRp'@;
put 'bnQgdmFsPSI0MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iNDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDUwMDAiLz48YTpzaGFkZSB2YWw9Ijk5MDAwIi8+PGE6'@;
put 'c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjIwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjU1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6'@;
put 'Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSItODAwMDAiIHI9IjUwMDAwIiBiPSIxODAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2su'@;
put 'bGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iODAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6'@;
put 'c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMzAwMDAiLz48YTpzYXRNb2QgdmFsPSIyMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NM'@;
put 'c3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1MDAwMCIgYj0iNTAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmJnRmlsbFN0eWxlTHN0'@;
put 'PiIsa1trLmxlbmd0aF09IjwvYTpmbXRTY2hlbWU+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lRWxlbWVudHM+IixrW2subGVuZ3RoXT0iPGE6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6c3BEZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHls'@;
put 'ZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIzIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0i'@;
put 'YWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0iPC9hOnNwRGVmPiIsa1trLmxlbmd0aF09IjxhOmxuRGVmPiIsa1trLmxlbmd0aF09JzxhOnNwUHIv'@;
put 'PjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9'@;
put 'IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0idHgxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsa1trLmxlbmd0aF09IjwvYTpsbkRlZj4iLGtbay5sZW5ndGhdPSI8L2E6b2JqZWN0'@;
put 'RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPiIsa1trLmxlbmd0aF09IjwvYTp0aGVtZT4iLGsuam9pbigiIil9ZnVuY3Rpb24gWnYoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLTQsSz1bT107c3dpdGNoKE8pe2Nhc2UgNDpj'@;
put 'YXNlIDU6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6S1sxXT1mdW5jdGlvbiBSQyhTKXt2YXIgTz17fTtzd2l0Y2goTy54Y2xyVHlwZT1TLnJlYWRfc2hpZnQoMiksTy5uVGludFNoYWRlPVMucmVhZF9zaGlmdCgyKSxPLnhjbHJUeXBlKXtjYXNlIDA6Y2Fz'@;
put 'ZSA0OlMubCs9NDticmVhaztjYXNlIDE6Ty54Y2xyVmFsdWU9ZnVuY3Rpb24gdUIoUyxPKXtyZXR1cm4gUm4oUyxPKX0oUyw0KTticmVhaztjYXNlIDI6Ty54Y2xyVmFsdWU9a2YoUyk7YnJlYWs7Y2FzZSAzOk8ueGNsclZhbHVlPWZ1bmN0aW9uIEhrKFMpe3JldHVybiBTLnJlYWRfc2hpZnQo'@;
put 'NCl9KFMpfXJldHVybiBTLmwrPTgsT30oUyk7YnJlYWs7Y2FzZSA2OktbMV09ZnVuY3Rpb24gRzMoUyxPKXtyZXR1cm4gUm4oUyxPKX0oUyxrKTticmVhaztjYXNlIDE0OmNhc2UgMTU6S1sxXT1TLnJlYWRfc2hpZnQoMT09PWs/MToyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigi'@;
put 'VW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogIitPKyIgIitrKX1yZXR1cm4gS31mdW5jdGlvbiBOayhTLE8pe08uZm9yRWFjaChmdW5jdGlvbihrKXtzd2l0Y2goa1swXSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTQ6'@;
put 'Y2FzZSAxNTpicmVhaztjYXNlIDEzOlMuZm9udCYmUy5mb250LmNvbG9yJiZBcnJheS5pc0FycmF5KGtbMV0ueGNsclZhbHVlKSYmKFMuZm9udC5jb2xvci5yZ2I9cGQoa1sxXS54Y2xyVmFsdWUpKX19KX1mdW5jdGlvbiBpcyhTKXtyZXR1cm4gUy85MTQ0MDAqUGZ9ZnVuY3Rpb24gVmsoUyxP'@;
put 'KXt2YXIgaz17fTtpZihTLnBvcylrLng9aXMoUy5wb3MueCksay55PWlzKFMucG9zLnkpO2Vsc2V7aWYoIVMuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtrLnI9Uy5mcm9tLnJ8fDAsay5jPVMuZnJvbS5jfHwwLFMuZnJvbS5jT2ZmJiYoay54PWlzKFMuZnJvbS5jT2ZmKSksUy5mcm9t'@;
put 'LnJPZmYmJihrLnk9aXMoUy5mcm9tLnJPZmYpKX1pZihTLmV4dClrLnc9aXMoUy5leHQueCksay5oPWlzKFMuZXh0LnkpO2Vsc2V7aWYoIVMudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO2suQz1TLnRvLmMsay5SPVMudG8ucixTLnRvLmNPZmYmJihrLlg9aXMoUy50by5jT2ZmKSksUy50by5y'@;
put 'T2ZmJiYoay5ZPWlzKFMudG8uck9mZikpfXJldHVybiBrfWZ1bmN0aW9uIEQ1KFMsTyl7dmFyIGs9e3g6LTEseTotMSx3Oi0xLGg6LTF9O2lmKFMucG9zKWsueD1pcyhTLnBvcy54KSxrLnk9aXMoUy5wb3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sueD1J'@;
put 'NShPLFMuZnJvbS5jLCJDIikraXMoUy5mcm9tLmNPZmYpLGsueT1JNShPLFMuZnJvbS5yLCJSIikraXMoUy5mcm9tLnJPZmYpfWlmKFMuZXh0KWsudz1pcyhTLmV4dC54KSxrLmg9aXMoUy5leHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay53PUk1KE8sUy50by5j'@;
put 'LCJDIikraXMoUy50by5jT2ZmKS1rLngsay5oPUk1KE8sUy50by5yLCJSIikraXMoUy50by5yT2ZmKS1rLnl9cmV0dXJuIGt9ZnVuY3Rpb24gTEMoUyxPKXt2YXIgaz17cjotMSxjOi0xLHg6LTEseTotMSxSOi0xLEM6LTEsWDotMSxZOi0xfTtzd2l0Y2goUy50eXBlKXtjYXNlInR3b0NlbGxB'@;
put 'bmNob3IiOmsucj1TLmZyb20ucixrLnk9aXMoUy5mcm9tLnJPZmYpLGsuUj1TLnRvLnIsay5ZPWlzKFMudG8uck9mZiksay5jPVMuZnJvbS5jLGsueD1pcyhTLmZyb20uY09mZiksay5DPVMudG8uYyxrLlg9aXMoUy50by5jT2ZmKTticmVhaztjYXNlIm9uZUNlbGxBbmNob3IiOmsucj1TLmZy'@;
put 'b20ucixrLnk9aXMoUy5mcm9tLnJPZmYpO3ZhciBLPUhmKE8say5yLGsueStpcyhTLmV4dC55KSk7ay5SPUtbMF0say5ZPUtbMV0say5jPVMuZnJvbS5jLGsueD1pcyhTLmZyb20uY09mZik7dmFyIGVlPSQzKE8say5jLGsueCtpcyhTLmV4dC54KSk7ay5DPWVlWzBdLGsuWD1lZVsxXTticmVh'@;
put 'aztjYXNlImFic29sdXRlQW5jaG9yIjp2YXIgb2U9SGYoTywwLGlzKFMucG9zLnkpKTtrLnI9b2VbMF0say55PW9lWzFdO3ZhciBtZT1IZihPLGsucixrLnkraXMoUy5leHQueSkpO2suUj1tZVswXSxrLlk9bWVbMV07dmFyIHBlPUhmKE8sMCxpcyhTLnBvcy54KSk7ay5jPXBlWzBdLGsueD1w'@;
put 'ZVsxXTt2YXIgYmU9SGYoTyxrLmMsay54K2lzKFMuZXh0LngpKTtrLkM9YmVbMF0say5YPWJlWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFuY2hvciB0eXBlICIrUy50eXBlfXJldHVybiBrfWZ1bmN0aW9uIEJrKFMsTyl7dmFyIGs9Uy50cmltKCkuc3BsaXQoL1xzKixccyovKTtPWyIh'@;
put 'cG9zIl09e2M6K2tbMF0seDora1sxXSxyOitrWzJdLHk6K2tbM10sQzora1s0XSxYOitrWzVdLFI6K2tbNl0sWTora1s3XX19ZnVuY3Rpb24gaEIoUyxPLGspe3ZhciBLPS0xO2lmKG51bGwhPVMuUnx8bnVsbCE9Uy5DKUs9MDtlbHNle2lmKG51bGw9PVMueHx8bnVsbD09Uy55fHxudWxsPT1T'@;
put 'Lnd8fG51bGw9PVMuaCl0aHJvdyJjYW5ub3QgcGFyc2UgYW5jaG9yICIrSlNPTi5zdHJpbmdpZnkoUyk7Sz0xKzIqIShTLmN8fFMucil9aWYoSyE9Tyl7c3dpdGNoKE8pe2Nhc2UgMDpjYXNlIDE6aWYoMyE9SylicmVhazt2YXIgZWU9JDMoayxTLmN8fDAsUy54fHwwKTtTLmM9ZWVbMF0sUy54'@;
put 'PWVlWzFdO3ZhciBvZT1IZihrLFMucnx8MCxTLnl8fDApO1Mucj1vZVswXSxTLnk9b2VbMV07YnJlYWs7Y2FzZSAzOmlmKDM9PUspYnJlYWs7dmFyIG1lPVMuY3x8MCxwZT1TLnh8fDA7ZGVsZXRlIFMuYyxkZWxldGUgUy54LFMueD0obWU/V3YoayxtZSk6MCkrcGU7dmFyIGJlPVMucnx8MCxQ'@;
put 'ZT1TLnl8fDA7ZGVsZXRlIFMucixkZWxldGUgUy55LFMueT0oYmU/TzQoayxiZSk6MCkrUGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK099c3dpdGNoKE8pe2Nhc2UgMDppZigwPT1LKWJyZWFrO3ZhciBWZT0kMyhrLFMuY3x8MCwoUy54'@;
put 'fHwwKStTLncpO2RlbGV0ZSBTLncsUy5DPVZlWzBdLFMuWD1WZVsxXTt2YXIgWWU9SGYoayxTLnJ8fDAsKFMueXx8MCkrUy5oKTtkZWxldGUgUy5oLFMuUj1ZZVswXSxTLlk9WWVbMV07YnJlYWs7Y2FzZSAxOmNhc2UgMzppZigwIT1LKWJyZWFrO3ZhciBldD1TLkN8fDAsY3Q9Uy5YfHwwO2Rl'@;
put 'bGV0ZSBTLkMsZGVsZXRlIFMuWCxTLnc9V3YoayxldCkrY3QtKFMuYz9XdihrLFMuYyk6MCktKFMueHx8MCk7dmFyIFR0PVMuUnx8MCxpdD1TLll8fDA7ZGVsZXRlIFMuUixkZWxldGUgUy5ZLFMuaD1PNChrLFR0KStpdC0oUy5yP080KGssUy5yKTowKS0oUy55fHwwKTticmVhaztkZWZhdWx0'@;
put 'OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrT319fWZ1bmN0aW9uIGZCKFMpe3ZhciBPPVtTLmN8fDAsTWF0aC5yb3VuZChTLnh8fDApLFMucnx8MCxNYXRoLnJvdW5kKFMueXx8MCldO3JldHVybihPPU8uY29uY2F0KFMuaCYmUy53P1tPWzBdLE1hdGgucm91bmQo'@;
put 'T1sxXStTLncpLE9bMl0sTWF0aC5yb3VuZChPWzNdK1MuaCldOltTLkN8fDAsTWF0aC5yb3VuZChTLlh8fDApLFMuUnx8MCxNYXRoLnJvdW5kKFMuWXx8MCldKSkuam9pbigiLCAiKX1mdW5jdGlvbiBPNChTLE8pe2lmKCFTKXJldHVybiAwO2Zvcih2YXIgaz0wOy0tTz49MDspe3ZhciBLPSgo'@;
put 'U1siIXJvd3MiXXx8W10pW09dfHx7fSkuaHB4O251bGw9PUsmJihLPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PUsmJihLPTI0KSxrKz1LfXJldHVybiBrfWZ1bmN0aW9uIFd2KFMsTyl7aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1PPj0wOyl7dmFy'@;
put 'IEs9KChTWyIhY29scyJdfHxbXSlbT118fHt9KS53cHg7aWYobnVsbD09SyYmKEs9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09Syl7dmFyIGVlPXt3Y2g6OC40M307SjAoZWUpLFNbIiFjb2xzIl0mJihTWyIhY29scyJdW09dPWVlKSxLPWVlLndweH1rKz1L'@;
put 'fXJldHVybiBrfWZ1bmN0aW9uIEk1KFMsTyxrKXtyZXR1cm4iQyI9PWs/V3YoUyxPKTpPNChTLE8pfWZ1bmN0aW9uIEhmKFMsTyxrKXt2YXIgSz1bTyxrXTtpZighUylyZXR1cm4gSztmb3IoOzspe3ZhciBlZT0oU1siIXJvd3MiXXx8W10pW0tbMF1dfHx7fTtpZihlZS5oaWRkZW4pKytLWzBd'@;
put 'O2Vsc2V7dmFyIG9lPWVlLmhweDtpZihudWxsPT1vZSYmKG9lPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PW9lJiYob2U9b2goMTUpKSxLWzFdPG9lKWJyZWFrO0tbMF0rKyxLWzFdLT1vZX19cmV0dXJuIEt9ZnVuY3Rpb24gJDMoUyxPLGspe3ZhciBLPVtP'@;
put 'LGtdO2lmKCFTKXJldHVybiBLO2Zvcig7Oyl7dmFyIGVlPShTWyIhY29scyJdfHxbXSlbS1swXV18fHt9O2lmKGVlLmhpZGRlbnx8MD09PWVlLndweCkrK0tbMF07ZWxzZXt2YXIgb2U9ZWUud3B4O2lmKG51bGw9PW9lJiYob2U9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndw'@;
put 'eCksbnVsbD09b2Upe3ZhciBtZT17d2NoOjguNDN9O0owKG1lKSxTWyIhY29scyJdJiYoU1siIWNvbHMiXVtLWzBdXT1tZSksb2U9bWUud3B4fWlmKEtbMV08b2UpYnJlYWs7S1swXSsrLEtbMV0tPW9lfX1yZXR1cm4gS31mdW5jdGlvbiBMMChTKXtyZXR1cm4oIjAwMDAwMCIrKCJudW1iZXIi'@;
put 'PT10eXBlb2YgUz9TLnRvU3RyaW5nKDE2KTpTKSkuc2xpY2UoLTYpfWZ1bmN0aW9uIG1kKFMsTyxrKXt2YXIgSz0ic3RyaW5nIj09dHlwZW9mIE8/ISFrOiEhTzsic3RyaW5nIiE9dHlwZW9mIE8mJihPPSJjb2xvciIpO3ZhciBlZT0iPCIrTysiICI7cmV0dXJuIFMuYXV0bz9lZSsnYXV0bz0i'@;
put 'MSIvPic6Uy5pbmRleCYmbnVsbD09Uy5yZ2I/ZWUrJ2luZGV4ZWQ9IicrUy5pbmRleCsnIi8+JzpudWxsIT1TLnRoZW1lP2VlKyd0aGVtZT0iJytTLnRoZW1lKyciJysoUy50aW50PycgdGludD0iJytTLnRpbnQrJyInOiIiKSsiLz4iOm51bGwhPVMucmdiP2VlKydyZ2I9IicrKEs/IkZGIjoi'@;
put 'IikrTDAoUy5yZ2IpKyciLz4nOmVlKyIvPiJ9ZnVuY3Rpb24gUDQoUyxPKXtpZighU3x8bnVsbD09Uy5yZ2IpcmV0dXJuIE87Zm9yKHZhciBrPSgiMDAwMDAwIitTLnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxLPVtrLnNsaWNlKDAsMiksay5zbGljZSgyLDQpLGsuc2xpY2UoNCw2KV0u'@;
put 'bWFwKGZ1bmN0aW9uKG1lKXtyZXR1cm4gcGFyc2VJbnQobWUsMTYpfSksZWU9MDtlZTx0MC5sZW5ndGg7KytlZSl7dmFyIG9lPXQwW2VlXTtpZihvZVswXT09S1swXSYmb2VbMV09PUtbMV0mJm9lWzJdPT1LWzJdKXJldHVybiBlZX1yZXR1cm4gdDAubGVuZ3RoPDY0Pyh0MC5wdXNoKFtLWzBd'@;
put 'LEtbMV0sS1syXV0pLHQwLmxlbmd0aC0xKTpPfWZ1bmN0aW9uIGUxKFMpe3ZhciBPPVsiIiwiIiwiIl07aWYoIVMpcmV0dXJuW107dmFyIGs9IiIsSz1TJiZTLnM/ZnVuY3Rpb24gWXYoUyl7dmFyIE89WyIiLCIiXTtpZighUylyZXR1cm4gTztpZihTLnN6JiYoT1swXSs9IiYiK1Muc3osT1sx'@;
put 'XT0iJjEyIitPWzFdKSxTLm5hbWUmJihPWzBdKz0nJiInK1MubmFtZSsnLFJlZ3VsYXIiJyxPWzFdPScmIi0sUmVndWxhciInK09bMV0pLFMuYm9sZCYmKE9bMF0rPSImQiIsT1sxXT0iJkIiK09bMV0pLFMudW5kZXJsaW5lKXt2YXIgaz0yPT1TLnVuZGVybGluZT8iJkUiOiImVSI7T1swXSs9'@;
put 'ayxPWzFdPWsrT1sxXX1yZXR1cm4gUy5pdGFsaWMmJihPWzBdKz0iJkkiLE9bMV09IiZJIitPWzFdKSxTLmNvbG9yJiZudWxsIT1TLmNvbG9yLnJnYiYmKE9bMF0rPSImSyIrTDAoUy5jb2xvci5yZ2IpLE9bMV0rPSImSzAwMDAwMCIpLFMuc3RyaWtlJiYoT1swXSs9IiZTIixPWzFdPSImUyIr'@;
put 'T1sxXSksInN1cGVyIj09Uy52YWxpZ24mJihPWzBdKz0iJlgiLE9bMV09IiZYIitPWzFdKSwic3ViIj09Uy52YWxpZ24mJihPWzBdKz0iJlkiLE9bMV09IiZZIitPWzFdKSxPfShTLnMpOlsiIiwiIl07cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTP1tTLFMsU106bnVsbCE9Uy5maXJzdHx8bnVs'@;
put 'bCE9Uy5ldmVufHxudWxsIT1TLm9kZD8obnVsbCE9Uy5vZGQmJihPWzBdPWUxKFMub2RkKVswXSksdm9pZCAwPT09Uy5maXJzdCYmT1swXSYmKE9bMV09T1swXSksbnVsbCE9Uy5maXJzdCYmKE9bMV09ZTEoUy5maXJzdClbMF0pLG51bGwhPVMuZXZlbiYmKE9bMl09ZTEoUy5ldmVuKVswXSks'@;
put 'Tyk6Uy5sZWZ0fHxTLmNlbnRlcnx8Uy5yaWdodD8oUy5sZWZ0JiYoays9IiZMIitlMShTLmxlZnQpWzBdKSxTLmNlbnRlciYmKGsrPSImQyIrZTEoUy5jZW50ZXIpWzBdKSxTLnJpZ2h0JiYoays9IiZSIitlMShTLnJpZ2h0KVswXSksW2ssayxrXSk6bnVsbCE9Uy52P1trPUtbMF0rUy52LnJl'@;
put 'cGxhY2UoLyYvZywiJiYiKStLWzFdLGssa106bnVsbCE9Uy53P1trPUtbMF0rUy53K0tbMV0sayxrXTpBcnJheS5pc0FycmF5KFMuUik/KFMuUi5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtrKz1lMShlZSlbMF19KSxbayxrLGtdKTpbXX12YXIgbjg9ezE6IkxldHRlciIsMzoiVGFibG9pZCIsNToi'@;
put 'TGVnYWwiLDc6IkV4ZWN1dGl2ZSIsODoiQTMiLDk6IkE0IiwxMToiQTUiLDEyOiJCNCIsMTM6IkI1IiwxNDoiRm9saW8iLDIwOiJFbnZlbG9wZSIsMzc6Ik1vbmFyY2giLDcwOiJBNiJ9LHBCPUhlKG44KTtYYS5DT05OPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNl'@;
put 'RG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2Nvbm5lY3Rpb25zIjt2YXIgbUI9SHIoImV4dGVybmFsTGluayIsbnVsbCx7eG1sbnM6R2kubWFpblswXX0pO1hhLklNRz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw'@;
put 'cy9pbWFnZSIsWGEuRFJBVz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nIjt2YXIgeUI9e3Q6InRvcCIsY3RyOiJjZW50ZXIiLGI6ImJvdHRvbSIsanVzdDoidG9wIixkaXN0OiJ0b3AifSxSNT17Y3Ry'@;
put 'OiJjZW50ZXIiLGRpc3Q6ImNlbnRlciIsanVzdDoiY2VudGVyIixqdXN0TG93OiJjZW50ZXIiLGw6ImxlZnQiLHI6InJpZ2h0Iix0aGFpRGlzdDoiY2VudGVyIn07ZnVuY3Rpb24gX0IoKXt2YXIgUz1bRGldO3JldHVybiBTLnB1c2goJzx4ZHI6d3NEciB4bWxuczp4ZHI9Imh0dHA6Ly9zY2hl'@;
put 'bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9zcHJlYWRzaGVldERyYXdpbmciIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIi8+JyksUy5qb2luKCIiKX1mdW5jdGlvbiBibmUoUyl7dmFyIGssTz1TWyIh'@;
put 'ZGF0YSJdO3JldHVybiJiYXNlNjQiPT09U1siIWRhdGF0eXBlIl0/KChrPU8ubWF0Y2goL15kYXRhOi4qLC8pKSYmKE89Ty5zbGljZShrWzBdLmxlbmd0aCkpLF9lLmRlY29kZShPKSk6T31YYS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50'@;
put 'LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIENCPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIFZDKFMsTyxrLEspe3ZhciBlZT1bMjE2MDAsMjE2MDBdLG9lPVsibTAsMGwwIixlZVsxXSxlZVswXSxl'@;
put 'ZVsxXSxlZVswXSwiMHhlIl0uam9pbigiLCIpLG1lPVtIcigieG1sIixudWxsLHsieG1sbnM6diI6dmwudiwieG1sbnM6byI6dmwubywieG1sbnM6eCI6dmwueCwieG1sbnM6bXYiOnZsLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLEhyKCJvOnNoYXBlbGF5b3V0IixIcigibzppZG1hcCIsbnVs'@;
put 'bCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0scGU9MTAyNCpTLGJlPWt8fFtdO2JlLmxlbmd0aD4wJiZtZS5wdXNoKEhyKCJ2OnNoYXBldHlwZSIsW0hyKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxIcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoi'@;
put 'ZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxIcigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTplZS5qb2luKCIs'@;
put 'IiksIm86c3B0IjoyMDEscGF0aDpvZX0pKSxiZS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXsrK3BlLG1lPW1lLmNvbmNhdChmdW5jdGlvbiBpOChTLE8pe3ZhciBrPXtpZDoiX3gwMDAwX3MiK08sdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJhZGlv'@;
put 'Ij09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXXx8Ikxpc3QiPT1TWyIhdHlwZSJdfHwiRHJvcCI9PVNbIiF0eXBlIl0pJiYoay5zdHJva2VkPSJmIiksIkxhYmVsIj09U1siIXR5cGUiXSYmKGsuZmlsbGVkPSJmIik7dmFyIEs9IiI7Uy50JiZCQ1tTWyIhdHlwZSJdXSYmKEs9'@;
put 'QkNbU1siIXR5cGUiXV0ucmVwbGFjZSgvIyMjIy8sUHIoUy50KSkpO3ZhciBlZT1bXTtyZXR1cm4gUy5tYWNybyYmZWUucHVzaChWYSgieDpGbWxhTWFjcm8iLFMubWFjcm8pKSxTLmxpbmsmJmVlLnB1c2goVmEoIng6Rm1sYUxpbmsiLFMubGluaykpLFMudmFsJiZlZS5wdXNoKFZhKCJSYWRp'@;
put 'byI9PVNbIiF0eXBlIl18fCJDaGVja2JveCI9PVNbIiF0eXBlIl0/Ing6Q2hlY2tlZCI6Ing6VmFsIixTdHJpbmcoUy52YWwpKSksUy5yZWYmJmVlLnB1c2goVmEoIng6Rm1sYVJhbmdlIixTLnJlZikpLFMuc2VsJiYiTGlzdCI9PVNbIiF0eXBlIl0mJmVlLnB1c2goVmEoIng6U2VsVHlwZSIs'@;
put 'Uy5zZWwpKSxTLm1pbiYmZWUucHVzaChWYSgieDpNaW4iLFN0cmluZyhTLm1pbikpKSxTLm1heCYmZWUucHVzaChWYSgieDpNYXgiLFN0cmluZyhTLm1heCkpKSxTLnN0ZXAmJmVlLnB1c2goVmEoIng6SW5jIixTdHJpbmcoUy5zdGVwKSkpLFMucGFnZSYmZWUucHVzaChWYSgieDpQYWdlIixT'@;
put 'dHJpbmcoUy5wYWdlKSkpLFtdLmNvbmNhdChbIjx2OnNoYXBlIitEdShrKSsiPiJdKS5jb25jYXQoakNbU1siIXR5cGUiXV18fFtdKS5jb25jYXQoW0tdKS5jb25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9IicrU1siIXR5cGUiXSsnIj4nLFZhKCJ4OkFuY2hvciIsZkIoU1siIXBv'@;
put 'cyJdKSksVmEoIng6UHJpbnRPYmplY3QiLCJGYWxzZSIpXSkuY29uY2F0KGVlKS5jb25jYXQoU0JbU1siIXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShWZSxwZSkpfSk7dmFyIFBlPU98fFtdO3JldHVybiBQZS5sZW5ndGg+MCYmbWUucHVz'@;
put 'aChIcigidjpzaGFwZXR5cGUiLFtIcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksSHIoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTplZS5q'@;
put 'b2luKCIsIiksIm86c3B0IjoyMDIscGF0aDpvZX0pKSxQZS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXsrK3BlLG1lPW1lLmNvbmNhdChmdW5jdGlvbiAkdihTLE8sayl7dmFyIEs9VnMoU1swXSksZWU9U1sxXS5maWxsfHx7fTtTWzFdLnMmJihlZT17dHlwZTpTWzFdLnMucGF0dGVyblR5cGV8fCJz'@;
put 'b2xpZCJ9LFNbMV0ucy5mZ0NvbG9yJiYoZWUuY29sb3IyPWVlLmNvbG9yMT0iIyIrTDAoU1sxXS5zLmZnQ29sb3IucmdiKSksU1sxXS5zLmJnQ29sb3ImJihlZS5jb2xvcjI9IiMiK0wwKFNbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgb2U9e2NvbG9yMjplZS5jb2xvcjJ8fCIjQkVGRjgyIix0'@;
put 'eXBlOmVlLnR5cGV8fCJncmFkaWVudCJ9OyJncmFkaWVudCI9PW9lLnR5cGUmJihvZS5hbmdsZT0iLTE4MCIpO3ZhciBtZT0iZ3JhZGllbnQiPT1vZS50eXBlP0hyKCJvOmZpbGwiLG51bGwse3R5cGU6ImdyYWRpZW50VW5zY2FsZWQiLCJ2OmV4dCI6InZpZXcifSk6bnVsbCxwZT1Icigidjpm'@;
put 'aWxsIixtZSxvZSksYmU9e307U1sxXS5zaGFkb3cmJihTWzFdLnNoYWRvdy5jb2xvciYmKGJlLmNvbG9yPVNbMV0uc2hhZG93LmNvbG9yKSxTWzFdLnNoYWRvdy5vbiYmKGJlLm9uPVNbMV0uc2hhZG93Lm9uKSksYmUub2JzY3VyZWQ9InQiO3ZhciBQZT0hMCxWZT0hMCxZZT1TWzFdWyIhcG9z'@;
put 'Il0/SnQoU1sxXVsiIXBvcyJdKTpudWxsO3JldHVybiBZZSYmKFZlPW51bGw9PVllLlImJm51bGw9PVllLkMmJm51bGw9PVllLlgmJm51bGw9PVllLlksUGU9IVllLnImJiFZZS5jLGhCKFllLDAsaykpLFsiPHY6c2hhcGUiK0R1KHtpZDoiX3gwMDAwX3MiK08sdHlwZToiI194MDAwMF90MjAy'@;
put 'IixzdHlsZToicG9zaXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjgwcHQ7bWFyZ2luLXRvcDo1cHQ7d2lkdGg6MTA0cHQ7aGVpZ2h0OjY0cHQ7ei1pbmRleDoxMCIrKFNbMV0uaGlkZGVuPyI7dmlzaWJpbGl0eTpoaWRkZW4iOiIiKSxmaWxsY29sb3I6ZWUuY29sb3IxfHwiI0VDRkFENCIs'@;
put 'c3Ryb2tlY29sb3I6KFNbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+IixwZSxIcigidjpzaGFkb3ciLG51bGwsYmUpLEhyKCJ2OnBhdGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwv'@;
put 'ZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxQZT8iPHg6TW92ZVdpdGhDZWxscy8+IjoiIixWZT8iPHg6U2l6ZVdpdGhDZWxscy8+IjoiIixWYSgieDpBbmNob3IiLFllP2ZCKFllKTpTWzFdLnJhd2FuY2hvcnx8W0suYysxLDAsSy5yKzEsMCxL'@;
put 'LmMrMywyMCxLLnIrNSwyMF0uam9pbigiLCIpKSxWYSgieDpBdXRvRmlsbCIsIkZhbHNlIiksVmEoIng6Um93IixTdHJpbmcoSy5yKSksVmEoIng6Q29sdW1uIixTdHJpbmcoSy5jKSksU1sxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4i'@;
put 'XX0oVmUscGUsSykpfSksbWUucHVzaCgiPC94bWw+IiksbWUuam9pbigiIil9dmFyIFNCPXtCdXR0b246WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxp'@;
put 'Z24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsi'@;
put 'PHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENl'@;
put 'bGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xp'@;
put 'bmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwveDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExp'@;
put 'c3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4x'@;
put 'PC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxCQz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxl'@;
put 'PSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRl'@;
put 'eHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJv'@;
put 'eD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9k'@;
put 'aXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAw'@;
put 'Jz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0n'@;
put 'MjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6ImRhZnVxIn0sakM9e0J1dHRvbjpbJzx2OmZpbGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0'@;
put 'aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJvcDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10s'@;
put 'U3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8'@;
put 'djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0'@;
put 'IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIFVrKFMsTyxrLEspe3ZhciBlZT17IiFpZCI6e319LG9lPVtIcigieG1sIixudWxsLHsieG1sbnM6diI6dmwudiwieG1sbnM6byI6dmwubywieG1sbnM6eCI6dmwueH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxIcigibzpzaGFw'@;
put 'ZWxheW91dCIsSHIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0'@;
put 'QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+Jywn'@;
put 'PHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYg'@;
put 'ZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8'@;
put 'L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sbWU9MTtbImhlYWRlciIsImZvb3Rl'@;
put 'ciJdLmZvckVhY2goZnVuY3Rpb24ocGUpe0tbcGVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oYmUpe0tbcGVdW2JlXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtpZihBcnJheS5pc0FycmF5KEtbcGVdW2JlXVtQZV0p'@;
put 'KWZvcih2YXIgVmU9MDtWZTxLW3BlXVtiZV1bUGVdLmxlbmd0aDsrK1ZlKWlmKEtbcGVdW2JlXVtQZV1bVmVdKXt2YXIgWWU9S1twZV1bYmVdW1BlXVtWZV07aWYoInJlbW90ZSI9PVllWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9v'@;
put 'dGVyIjtmb3IoO25pKFMsInhsL21lZGlhL2ltYWdlIittZSsiLmpwZyIpOykrK21lO1MuZmlsZSgieGwvbWVkaWEvaW1hZ2UiK21lKyIuanBnIixibmUoWWUpLHtiaW5hcnk6ITB9KSxFcihlZSwtMSwiLi4vbWVkaWEvaW1hZ2UiK21lKyIuanBnIixYYS5JTUcpO3ZhciBldD0iX3gwMDAwX3Mi'@;
put 'KygxMDI1K1llLl9jbnQpLGN0PSJwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDt6LWluZGV4OiIrKFllLl9jbnQrMSkrIjsiO2N0Kz0id2lkdGg6IitZZVsiIXBvcyJdLncrInB4OyIsY3QrPSJoZWlnaHQ6IitZZVsiIXBvcyJdLmgrInB4OyI7dmFyIFR0PVBl'@;
put 'LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3BlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOyJvZGQiIT09YmUmJihUdCs9YmUudG9VcHBlckNhc2UoKSksS1twZV1bYmVdW1BlXS5sZW5ndGg+MSYmKFR0Kz1WZSksb2UucHVzaChIcigidjpzaGFwZSIsWyc8djppbWFnZWRhdGEgbzpyZWxpZD0i'@;
put 'cklkJysoWWUuX2NudCsxKSsnIiBvOnRpdGxlPSJzaGVldGpzIi8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXS5qb2luKCIiKSx7aWQ6VHQsIm86c3BpZCI6ZXQsdHlwZToiI194MDAwMF90NzUiLHN0eWxlOmN0fSkpfX0pfSl9KSxvZS5wdXNoKCI8L3htbD4iKSxT'@;
put 'LmZpbGUoInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK2srIkhGLnZtbCIsb2Uuam9pbigiIikpLFMuZmlsZSgieGwvZHJhd2luZ3MvX3JlbHMvdm1sRHJhd2luZyIraysiSEYudm1sLnJlbHMiLEFpKGVlKSl9WGEuQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj'@;
put 'ZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyI7dmFyIEt2PUhyKCJjb21tZW50cyIsbnVsbCx7eG1sbnM6R2kubWFpblswXX0pO2Z1bmN0aW9uIHpDKFMpe3ZhciBPPVtEaSxLdl0saz1bXTtyZXR1cm4gTy5wdXNoKCI8YXV0aG9ycz4iKSxTLmZvckVhY2goZnVuY3Rpb24o'@;
put 'Syl7S1sxXS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXt2YXIgb2U9UHIoZWUuYSk7ay5pbmRleE9mKG9lKT4tMXx8KGsucHVzaChvZSksTy5wdXNoKCI8YXV0aG9yPiIrb2UrIjwvYXV0aG9yPiIpKX0pfSksTy5wdXNoKCI8L2F1dGhvcnM+IiksTy5wdXNoKCI8Y29tbWVudExpc3Q+IiksUy5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKEspe0tbMV0uZm9yRWFjaChmdW5jdGlvbihlZSl7Ty5wdXNoKCc8Y29tbWVudCByZWY9IicrS1swXSsnIiBhdXRob3JJZD0iJytrLmluZGV4T2YoUHIoZWUuYSkpKyciPjx0ZXh0PicpLE8ucHVzaChlZS5SP0pvKGVlLlIpOlZhKCJ0IixudWxsPT1lZS50PyIiOlByKGVl'@;
put 'LnQpKSksTy5wdXNoKCI8L3RleHQ+PC9jb21tZW50PiIpfSl9KSxPLnB1c2goIjwvY29tbWVudExpc3Q+IiksTy5sZW5ndGg+MiYmKE9bTy5sZW5ndGhdPSI8L2NvbW1lbnRzPiIsT1sxXT1PWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxPLmpvaW4oIiIpfXZhciB4Qj1kdTtmdW5jdGlvbiBVQyhT'@;
put 'KXt2YXIgTz12aSgpLGs9W107cmV0dXJuIFZyKE8sIkJydEJlZ2luQ29tbWVudHMiKSxWcihPLCJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIiksUy5mb3JFYWNoKGZ1bmN0aW9uKEspe0tbMV0uZm9yRWFjaChmdW5jdGlvbihlZSl7ay5pbmRleE9mKGVlLmEpPi0xfHwoay5wdXNoKGVlLmEuc2xp'@;
put 'Y2UoMCw1NCkpLFZyKE8sIkJydENvbW1lbnRBdXRob3IiLGZ1bmN0aW9uIF9uZShTKXtyZXR1cm4gT2MoUy5zbGljZSgwLDU0KSl9KGVlLmEpKSl9KX0pLFZyKE8sIkJydEVuZENvbW1lbnRBdXRob3JzIiksVnIoTywiQnJ0QmVnaW5Db21tZW50TGlzdCIpLFMuZm9yRWFjaChmdW5jdGlvbihL'@;
put 'KXtLWzFdLmZvckVhY2goZnVuY3Rpb24oZWUpe2VlLmlhdXRob3I9ay5pbmRleE9mKGVlLmEpO3ZhciBvZT17czpWcyhLWzBdKSxlOlZzKEtbMF0pfTtWcihPLCJCcnRCZWdpbkNvbW1lbnQiLGZ1bmN0aW9uIE1CKFMsTyl7cmV0dXJuIG51bGw9PU8mJihPPXZuKDM2KSksTy53cml0ZV9zaGlm'@;
put 'dCg0LFNbMV0uaWF1dGhvciksX2YoU1swXSxPKSxPLndyaXRlX3NoaWZ0KDQsMCksTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDQsMCksT30oW29lLGVlXSkpLGVlLnQmJmVlLnQubGVuZ3RoPjAmJlZyKE8sIkJydENvbW1lbnRUZXh0IixmdW5j'@;
put 'dGlvbiBuaChTLE8pe3ZhciBrPSExO3JldHVybiBudWxsPT1PJiYoaz0hMCxPPXZuKDIzKzQqUy50Lmxlbmd0aCkpLE8ud3JpdGVfc2hpZnQoMSwxKSxPYyhTLnQsTyksTy53cml0ZV9zaGlmdCg0LDEpLGZ1bmN0aW9uIGF2KFMsTyl7T3x8KE89dm4oNCkpLE8ud3JpdGVfc2hpZnQoMixTLmlj'@;
put 'aHx8MCksTy53cml0ZV9zaGlmdCgyLFMuaWZudHx8MCl9KHtpY2g6MCxpZm50OjB9LE8pLGs/Ty5zbGljZSgwLE8ubCk6T30oZWUpKSxWcihPLCJCcnRFbmRDb21tZW50IiksZGVsZXRlIGVlLmlhdXRob3J9KX0pLFZyKE8sIkJydEVuZENvbW1lbnRMaXN0IiksVnIoTywiQnJ0RW5kQ29tbWVu'@;
put 'dHMiKSxPLmVuZCgpfXZhciBZaz0iYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IixLaz1bInhsc2IiLCJ4bHNtIiwieGxhbSIsImJpZmY4IiwieGxhIl07WGEuRFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0'@;
put 'aW9uc2hpcHMvZGlhbG9nc2hlZXQiLFhhLk1TPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxNYWNyb3NoZWV0Ijt2YXIgTzU9ZnVuY3Rpb24oKXt2YXIgUz0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8KUMoXFs/'@;
put 'LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLE89e3I6MCxjOjB9O2Z1bmN0aW9uIGsoSyxlZSxvZSxtZSl7dmFyIHBlPSExLGJlPSExOzA9PW9lLmxlbmd0aD9iZT0hMDoiWyI9PW9lLmNoYXJBdCgwKSYmKGJlPSEwLG9lPW9lLnNsaWNlKDEsLTEpKSwwPT1tZS5sZW5ndGg/'@;
put 'cGU9ITA6IlsiPT1tZS5jaGFyQXQoMCkmJihwZT0hMCxtZT1tZS5zbGljZSgxLC0xKSk7dmFyIFBlPW9lLmxlbmd0aD4wPzB8cGFyc2VJbnQob2UsMTApOjAsVmU9bWUubGVuZ3RoPjA/MHxwYXJzZUludChtZSwxMCk6MDtyZXR1cm4gcGU/VmUrPU8uYzotLVZlLGJlP1BlKz1PLnI6LS1QZSxl'@;
put 'ZSsocGU/IiI6IiQiKStrYShWZSkrKGJlPyIiOiIkIikramkoUGUpfXJldHVybiBmdW5jdGlvbihlZSxvZSl7cmV0dXJuIE89b2UsZWUucmVwbGFjZShTLGspfX0oKSx5Mj0vKF58W14uX0EtWjAtOV0pKFskXT8pKFtBLVpdezEsMn18W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURd'@;
put 'KShbJF0/KSgxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9KSg/IVtfLlwoQS1aYS16MC05XSkvZyxIND1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPLGspe3JldHVybiBPLnJlcGxhY2UoeTIs'@;
put 'ZnVuY3Rpb24oSyxlZSxvZSxtZSxwZSxiZSl7dmFyIFBlPVNhKG1lKS0ob2U/MDprLmMpLFZlPWJzKGJlKS0ocGU/MDprLnIpO3JldHVybiBlZSsiUiIrKDA9PVZlPyIiOnBlP1ZlKzE6IlsiK1ZlKyJdIikrIkMiKygwPT1QZT8iIjpvZT9QZSsxOiJbIitQZSsiXSIpfSl9fSgpO2Z1bmN0aW9u'@;
put 'IFhrKFMsTyl7cmV0dXJuIFMucmVwbGFjZSh5MixmdW5jdGlvbihrLEssZWUsb2UsbWUscGUpe3JldHVybiBLKygiJCI9PWVlP2VlK29lOmthKFNhKG9lKStPLmMpKSsoIiQiPT1tZT9tZStwZTpqaShicyhwZSkrTy5yKSl9KS5yZXBsYWNlKC8oXGQrKTooXGQrKS9nLGZ1bmN0aW9uKGssSyxl'@;
put 'ZSl7cmV0dXJuIGppKGJzKEspK08ucikrIjoiK2ppKGJzKGVlKStPLnIpfSl9ZnVuY3Rpb24gd25lKFMsTyxrKXt2YXIgZWU9U28oTykucyxvZT1WcyhrKTtyZXR1cm4gWGsoUyx7cjpvZS5yLWVlLnIsYzpvZS5jLWVlLmN9KX1mdW5jdGlvbiBEQihTKXtyZXR1cm4gUy5yZXBsYWNlKC9feGxm'@;
put 'blwuL2csIiIpfWZ1bmN0aW9uIHB1KFMpe1MubCs9MX1mdW5jdGlvbiBONChTLE8pe3ZhciBrPVMucmVhZF9zaGlmdCgxPT1PPzE6Mik7cmV0dXJuWzE2MzgzJmssaz4+MTQmMSxrPj4xNSYxXX1mdW5jdGlvbiBaQyhTLE8sayl7dmFyIEs9MjtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9'@;
put 'NSlyZXR1cm4gcWsoUyk7MTI9PWsuYmlmZiYmKEs9NCl9dmFyIGVlPVMucmVhZF9zaGlmdChLKSxvZT1TLnJlYWRfc2hpZnQoSyksbWU9TjQoUywyKSxwZT1ONChTLDIpO3JldHVybntzOntyOmVlLGM6bWVbMF0sY1JlbDptZVsxXSxyUmVsOm1lWzJdfSxlOntyOm9lLGM6cGVbMF0sY1JlbDpw'@;
put 'ZVsxXSxyUmVsOnBlWzJdfX19ZnVuY3Rpb24gcWsoUyl7dmFyIE89TjQoUywyKSxrPU40KFMsMiksSz1TLnJlYWRfc2hpZnQoMSksZWU9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOk9bMF0sYzpLLGNSZWw6T1sxXSxyUmVsOk9bMl19LGU6e3I6a1swXSxjOmVlLGNSZWw6a1sxXSxyUmVs'@;
put 'OmtbMl19fX1mdW5jdGlvbiBKayhTLE8sayl7aWYoayYmay5iaWZmPj0yJiZrLmJpZmY8PTUpcmV0dXJuIGZ1bmN0aW9uIFJCKFMpe3ZhciBPPU40KFMsMiksaz1TLnJlYWRfc2hpZnQoMSk7cmV0dXJue3I6T1swXSxjOmssY1JlbDpPWzFdLHJSZWw6T1syXX19KFMpO3ZhciBLPVMucmVhZF9z'@;
put 'aGlmdChrJiYxMj09ay5iaWZmPzQ6MiksZWU9TjQoUywyKTtyZXR1cm57cjpLLGM6ZWVbMF0sY1JlbDplZVsxXSxyUmVsOmVlWzJdfX1mdW5jdGlvbiBXQyhTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6TyxjOjI1NSZrLGZRdW90ZWQ6ISEoMTYz'@;
put 'ODQmayksY1JlbDprPj4xNSxyUmVsOms+PjE1fX1mdW5jdGlvbiByRChTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gS0MoUyxPKXt2YXIgaz1bUy5yZWFkX3NoaWZ0KDEpXTtpZigxMj09Tylzd2l0Y2goa1swXSl7Y2FzZSAyOmtbMF09NDticmVh'@;
put 'aztjYXNlIDQ6a1swXT0xNjticmVhaztjYXNlIDA6a1swXT0xO2JyZWFrO2Nhc2UgMTprWzBdPTJ9c3dpdGNoKGtbMF0pe2Nhc2UgNDprWzFdPWNzKFMsMSk/IlRSVUUiOiJGQUxTRSIsMTIhPU8mJihTLmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjprWzFdPUNjW1NbUy5sXV0sUy5sKz0x'@;
put 'Mj09Tz80Ojg7YnJlYWs7Y2FzZSAwOlMubCs9ODticmVhaztjYXNlIDE6a1sxXT1SbChTKTticmVhaztjYXNlIDI6a1sxXT1YMChTLDAse2JpZmY6Tz4wJiZPPDg/MjpPfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitrWzBdKX1yZXR1cm4ga31mdW5jdGlv'@;
put 'biBvRChTLE8sayl7Zm9yKHZhciBLPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksZWU9W10sb2U9MDtvZSE9SzsrK29lKWVlLnB1c2goKDEyPT1rLmJpZmY/aHU6YzIpKFMsOCkpO3JldHVybiBlZX1mdW5jdGlvbiB6QihTLE8sayl7dmFyIEs9MCxlZT0wOzEyPT1rLmJpZmY/KEs9Uy5y'@;
put 'ZWFkX3NoaWZ0KDQpLGVlPVMucmVhZF9zaGlmdCg0KSk6KGVlPTErUy5yZWFkX3NoaWZ0KDEpLEs9MStTLnJlYWRfc2hpZnQoMikpLGsuYmlmZj49MiYmay5iaWZmPDgmJigtLUssMD09LS1lZSYmKGVlPTI1NikpO2Zvcih2YXIgb2U9MCxtZT1bXTtvZSE9SyYmKG1lW29lXT1bXSk7KytvZSlm'@;
put 'b3IodmFyIHBlPTA7cGUhPWVlOysrcGUpbWVbb2VdW3BlXT1LQyhTLGsuYmlmZik7cmV0dXJuIG1lfWZ1bmN0aW9uIEY1KFMsTyxrKXtyZXR1cm4gUy5sKz0yLFtXQyhTKV19ZnVuY3Rpb24gWEMoUyl7cmV0dXJuIFMubCs9NixbXX12YXIgS0I9RjUsWEI9WEMscUI9WEMsSkI9RjU7ZnVuY3Rp'@;
put 'b24gY0QoUyl7cmV0dXJuIFMubCs9MixbTWMoUyksMSZTLnJlYWRfc2hpZnQoMildfXZhciBxQz1GNSxEbmU9Y0QsSW5lPVhDLEpDPUY1LFJuZT1GNSxMbmU9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIsIj8/IiwiP0RhdGEyIiwiPz8iLCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRvdGFscyIsIj8/'@;
put 'IiwiPz8iLCI/PyIsIj9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1cnJlbnQiXSxleT17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIFZCKFMsTyxrKXtyZXR1cm4gUy5sKyssayYmMTI9PWsuYmlmZj9bUy5yZWFkX3NoaWZ0KDQsImkiKSwwXTpbUy5yZWFkX3NoaWZ0KDIpLFMucmVh'@;
put 'ZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwyOntuOiJQdGdUYmwiLGY6Um59LDM6e246IlB0Z0FkZCIsZjpwdX0sNDp7bjoiUHRnU3ViIixmOnB1fSw1OntuOiJQdGdNdWwiLGY6cHV9LDY6e246IlB0Z0RpdiIsZjpwdX0sNzp7bjoiUHRnUG93ZXIiLGY6cHV9LDg6e246IlB0Z0NvbmNh'@;
put 'dCIsZjpwdX0sOTp7bjoiUHRnTHQiLGY6cHV9LDEwOntuOiJQdGdMZSIsZjpwdX0sMTE6e246IlB0Z0VxIixmOnB1fSwxMjp7bjoiUHRnR2UiLGY6cHV9LDEzOntuOiJQdGdHdCIsZjpwdX0sMTQ6e246IlB0Z05lIixmOnB1fSwxNTp7bjoiUHRnSXNlY3QiLGY6cHV9LDE2OntuOiJQdGdVbmlv'@;
put 'biIsZjpwdX0sMTc6e246IlB0Z1JhbmdlIixmOnB1fSwxODp7bjoiUHRnVXBsdXMiLGY6cHV9LDE5OntuOiJQdGdVbWludXMiLGY6cHV9LDIwOntuOiJQdGdQZXJjZW50IixmOnB1fSwyMTp7bjoiUHRnUGFyZW4iLGY6cHV9LDIyOntuOiJQdGdNaXNzQXJnIixmOnB1fSwyMzp7bjoiUHRnU3Ry'@;
put 'IixmOmZ1bmN0aW9uIGpCKFMsTyxrKXtyZXR1cm4gUy5sKyssV2EoUywwLGspfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIEZuZShTLE8sayl7cmV0dXJuIFMubCs9NSxTLmwrPTIsUy5sKz0yPT1rLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpm'@;
put 'dW5jdGlvbiBRQihTLE8sayl7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzQ6NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uICRDKFMpe3JldHVybiBTLmwrKyxDY1tTLnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gUDUoUyl7cmV0'@;
put 'dXJuIFMubCsrLDAhPT1TLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRnSW50IixmOmZ1bmN0aW9uIEJCKFMpe3JldHVybiBTLmwrKyxTLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIFY0KFMpe3JldHVybiBTLmwrKyxSbChTKX19LDMyOntuOiJQdGdBcnJheSIs'@;
put 'ZjpmdW5jdGlvbiB4bmUoUyxPLGspe3ZhciBLPSg5NiZTW1MubCsrXSk+PjU7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzY6MTI9PWsuYmlmZj8xNDo3LFtLXX19LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0aW9uIEhCKFMsTyxrKXt2YXIgSz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIGVlPVMu'@;
put 'cmVhZF9zaGlmdChrJiZrLmJpZmY8PTM/MToyKTtyZXR1cm5baWpbZWVdLHZEW2VlXSxLXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIE5CKFMsTyxrKXt2YXIgSz1TW1MubCsrXSxlZT1TLnJlYWRfc2hpZnQoMSksb2U9ayYmay5iaWZmPD0zP1s4OD09Sz8tMTowLFMucmVhZF9z'@;
put 'aGlmdCgxKV06ZnVuY3Rpb24gc0QoUyl7cmV0dXJuW1NbUy5sKzFdPj43LDMyNzY3JlMucmVhZF9zaGlmdCgyKV19KFMpO3JldHVybltlZSwoMD09PW9lWzBdP3ZEOmxTKVtvZVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24gVUIoUyxPLGspe3ZhciBLPVMucmVhZF9zaGlmdCgx'@;
put 'KT4+PjUmMyxvZT1TLnJlYWRfc2hpZnQoIWt8fGsuYmlmZj49OD80OjIpO3N3aXRjaChrLmJpZmYpe2Nhc2UgMjpTLmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDpTLmwrPTg7YnJlYWs7Y2FzZSA1OlMubCs9MTJ9cmV0dXJuW0ssMCxvZV19fSwzNjp7bjoiUHRnUmVmIixmOmZ1bmN0aW9uIEZC'@;
put 'KFMsTyxrKXt2YXIgSz0oOTYmU1tTLmxdKT4+NTtyZXR1cm4gUy5sKz0xLFtLLEprKFMsMCxrKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBRayhTLE8sayl7cmV0dXJuWyg5NiZTW1MubCsrXSk+PjUsWkMoUywwLGspXX19LDM4OntuOiJQdGdNZW1BcmVhIixmOmZ1bmN0aW9uIGxE'@;
put 'KFMsTyxrKXt2YXIgSz1TLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbSyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sMzk6e246IlB0Z01lbUVyciIsZjpSbn0sNDA6e246IlB0Z01lbU5vTWVtIixmOlJufSw0MTp7bjoiUHRnTWVt'@;
put 'RnVuYyIsZjpmdW5jdGlvbiBBbmUoUyxPLGspe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24ga25lKFMsTyxrKXt2YXIgSz1TLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJu'@;
put 'IFMubCs9NCxrLmJpZmY8OCYmUy5sLS0sMTI9PWsuYmlmZiYmKFMubCs9MiksW0tdfX0sNDM6e246IlB0Z0FyZWFFcnIiLGY6ZnVuY3Rpb24gdEQoUyxPLGspe3ZhciBLPSg5NiZTW1MubCsrXSk+PjU7cmV0dXJuIFMubCs9ayYmay5iaWZmPjg/MTI6ay5iaWZmPDg/Njo4LFtLXX19LDQ0Ontu'@;
put 'OiJQdGdSZWZOIixmOmZ1bmN0aW9uIGlEKFMsTyxrKXt2YXIgSz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIGVlPWZ1bmN0aW9uIE5mKFMsTyxrKXt2YXIgSz1rJiZrLmJpZmY/ay5iaWZmOjg7aWYoSz49MiYmSzw9NSlyZXR1cm4gZnVuY3Rpb24gYTgoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0'@;
put 'KDIpLGs9Uy5yZWFkX3NoaWZ0KDEpLEs9KDMyNzY4Jk8pPj4xNSxlZT0oMTYzODQmTyk+PjE0O3JldHVybiBPJj0xNjM4MywxPT1LJiZPPj04MTkyJiYoTy09MTYzODQpLDE9PWVlJiZrPj0xMjgmJihrLT0yNTYpLHtyOk8sYzprLGNSZWw6ZWUsclJlbDpLfX0oUyk7dmFyIGVlPVMucmVhZF9z'@;
put 'aGlmdChLPj0xMj80OjIpLG9lPVMucmVhZF9zaGlmdCgyKSxtZT0oMTYzODQmb2UpPj4xNCxwZT0oMzI3Njgmb2UpPj4xNTtpZihvZSY9MTYzODMsMT09cGUpZm9yKDtlZT41MjQyODc7KWVlLT0xMDQ4NTc2O2lmKDE9PW1lKWZvcig7b2U+ODE5MTspb2UtPTE2Mzg0O3JldHVybntyOmVlLGM6'@;
put 'b2UsY1JlbDptZSxyUmVsOnBlfX0oUywwLGspO3JldHVybltLLGVlXX19LDQ1OntuOiJQdGdBcmVhTiIsZjpmdW5jdGlvbiBNbmUoUyxPLGspe3ZhciBLPSg5NiZTW1MubCsrXSk+PjUsZWU9ZnVuY3Rpb24gSUIoUyxPLGspe2lmKGsuYmlmZjw4KXJldHVybiBxayhTKTt2YXIgSz1TLnJlYWRf'@;
put 'c2hpZnQoMTI9PWsuYmlmZj80OjIpLGVlPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6Miksb2U9TjQoUywyKSxtZT1ONChTLDIpO3JldHVybntzOntyOkssYzpvZVswXSxjUmVsOm9lWzFdLHJSZWw6b2VbMl19LGU6e3I6ZWUsYzptZVswXSxjUmVsOm1lWzFdLHJSZWw6bWVbMl19fX0oUyww'@;
put 'LGspO3JldHVybltLLGVlXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBKdihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIFF2KFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSk+'@;
put 'Pj41JjMsUy5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBaQihTLE8sayl7cmV0dXJuIDU9PWsuYmlmZj9mdW5jdGlvbiBXQihTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMSk+Pj41JjMsaz1TLnJlYWRfc2hpZnQoMiwiaSIpO1MubCs9ODt2YXIgSz1TLnJlYWRf'@;
put 'c2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW08sayxLXX0oUyk6W1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBhRChTLE8sayl7dmFyIEs9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBl'@;
put 'ZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjU9PWsuYmlmZiYmKFMubCs9MTIpLFtLLGVlLEprKFMsMCxrKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0aW9uIGVEKFMsTyxrKXt2YXIgSz0oOTYmU1tTLmwrK10pPj41LGVlPVMucmVhZF9zaGlmdCgyLCJpIik7aWYoayYmNT09PWsu'@;
put 'YmlmZilTLmwrPTEyO3JldHVybltLLGVlLFpDKFMsMCxrKV19fSw2MDp7bjoiUHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gczgoUyxPLGspe3ZhciBLPSg5NiZTW1MubCsrXSk+PjUsZWU9Uy5yZWFkX3NoaWZ0KDIpLG9lPTQ7aWYoaylzd2l0Y2goay5iaWZmKXtjYXNlIDU6b2U9MTU7YnJlYWs7'@;
put 'Y2FzZSAxMjpvZT02fXJldHVybiBTLmwrPW9lLFtLLGVlXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gU25lKFMsTyxrKXt2YXIgSz0oOTYmU1tTLmwrK10pPj41LGVlPVMucmVhZF9zaGlmdCgyKSxvZT04O2lmKGspc3dpdGNoKGsuYmlmZil7Y2FzZSA1OlMubCs9MTIsb2U9'@;
put 'NjticmVhaztjYXNlIDEyOm9lPTEyfXJldHVybiBTLmwrPW9lLFtLLGVlXX19LDI1NTp7fX0sZVM9ezY0OjMyLDk2OjMyLDY1OjMzLDk3OjMzLDY2OjM0LDk4OjM0LDY3OjM1LDk5OjM1LDY4OjM2LDEwMDozNiw2OTozNywxMDE6MzcsNzA6MzgsMTAyOjM4LDcxOjM5LDEwMzozOSw3Mjo0MCwx'@;
put 'MDQ6NDAsNzM6NDEsMTA1OjQxLDc0OjQyLDEwNjo0Miw3NTo0MywxMDc6NDMsNzY6NDQsMTA4OjQ0LDc3OjQ1LDEwOTo0NSw3ODo0NiwxMTA6NDYsNzk6NDcsMTExOjQ3LDg4OjM0LDEyMDozNCw4OTo1NywxMjE6NTcsOTA6NTgsMTIyOjU4LDkxOjU5LDEyMzo1OSw5Mjo2MCwxMjQ6NjAsOTM6'@;
put 'NjEsMTI1OjYxfTshZnVuY3Rpb24oKXtmb3IodmFyIFMgaW4gZVMpZXlbU109ZXlbZVNbU11dfSgpO3ZhciB0Uz17MTp7bjoiUHRnRWxmTGVsIixmOmNEfSwyOntuOiJQdGdFbGZSdyIsZjpKQ30sMzp7bjoiUHRnRWxmQ29sIixmOktCfSw2OntuOiJQdGdFbGZSd1YiLGY6Um5lfSw3OntuOiJQ'@;
put 'dGdFbGZDb2xWIixmOkpCfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpxQ30sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOkluZX0sMTM6e246IlB0Z0VsZkNvbFMiLGY6WEJ9LDE1OntuOiJQdGdFbGZDb2xTViIsZjpxQn0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6RG5lfSwyNTp7bjoi'@;
put 'UHRnTGlzdCIsZjpmdW5jdGlvbiBPbmUoUyl7Uy5sKz0yO3ZhciBPPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxLPVMucmVhZF9zaGlmdCg0KSxlZT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntpeHRpOk8sY29sdHlwZTozJmsscnQ6TG5lW2s+'@;
put 'PjImMzFdLGlkeDpLLGM6ZWUsQzpvZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIFBuZShTKXtyZXR1cm4gUy5sKz0yLFtTLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxLMz17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gUUMoUyl7cmV0dXJuIFMubCs9NCxbMCwwXX19'@;
put 'LDE6e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIExCKFMsTyxrKXt2YXIgSz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPWsmJjI9PWsuYmlmZj8zOjQsW0tdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIFRuZShTLE8sayl7dmFyIEs9MjU1JlNbUy5sKzFdPzE6MDtyZXR1'@;
put 'cm4gUy5sKz0yLFtLLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0OntuOiJQdGdBdHRyQ2hvb3NlIixmOmZ1bmN0aW9uIEdDKFMsTyxrKXtTLmwrPTI7Zm9yKHZhciBLPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSxlZT1bXSxvZT0wO29lPD1LOysrb2UpZWUucHVz'@;
put 'aChTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MikpO3JldHVybiBlZX19LDg6e246IlB0Z0F0dHJHb3RvIixmOmZ1bmN0aW9uIEVuZShTLE8sayl7dmFyIEs9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtLLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwxNjp7'@;
put 'bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiBxdihTLE8sayl7Uy5sKz1rJiYyPT1rLmJpZmY/Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gWUMoUyl7dmFyIE89MSZTW1MubCsxXTtyZXR1cm4gUy5sKz00LFtPLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5j'@;
put 'dGlvbiBPQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLHJEKFMpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gUEIoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxyRChTKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gbkQoUyl7dmFyIE89MjU1'@;
put 'JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtPLFMucmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIEI0KFMsTyxrLEssZWUpe2lmKEsuYmlmZjw4KXJldHVybiBSbihTLE8pO2Zvcih2YXIgb2U9Uy5sK08sbWU9W10scGU9MDtwZSE9PWsubGVuZ3RoOysrcGUpc3dpdGNoKGtb'@;
put 'cGVdWzBdKXtjYXNlIlB0Z0FycmF5IjprW3BlXVsxXT16QihTLDAsSyksbWUucHVzaChrW3BlXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjprW3BlXVsyXT1vRChTLDAsSyksbWUucHVzaChrW3BlXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOksmJjEyPT1LLmJpZmYmJihrW3BlXVsxXVsx'@;
put 'XT1TLnJlYWRfc2hpZnQoNCksbWUucHVzaChrW3BlXVsxXSkpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK2tbcGVdWzBdfXJldHVybiBPPW9lLVMubCwhZWUmJjAh'@;
put 'PT1PJiZtZS5wdXNoKFJuKFMsTykpLG1lfWZ1bmN0aW9uIGNoKFMsTyxrKXtmb3IodmFyIGVlLG9lLEs9Uy5sK08sbWU9W107SyE9Uy5sOylPPUstUy5sLGVlPWV5W29lPVNbUy5sXV0sKDI0PT09b2V8fDI1PT09b2UpJiYoZWU9KDI0PT09b2U/dFM6SzMpW1NbUy5sKzFdXSksZWUmJmVlLmY/'@;
put 'bWUucHVzaChbZWUubixlZS5mKFMsTyxrKV0pOlJuKFMsTyk7cmV0dXJuIG1lfWZ1bmN0aW9uIEgxKFMpe2Zvcih2YXIgTz1bXSxrPTA7azxTLmxlbmd0aDsrK2spe2Zvcih2YXIgSz1TW2tdLGVlPVtdLG9lPTA7b2U8Sy5sZW5ndGg7KytvZSl7dmFyIG1lPUtbb2VdO2VlLnB1c2gobWU/Mj09'@;
put 'PW1lWzBdPyciJyttZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOm1lWzFdOiIiKX1PLnB1c2goZWUuam9pbigiLCIpKX1yZXR1cm4gTy5qb2luKCI7Iil9SzNbMzNdPUszWzMyXTt2YXIgdWg9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToi'@;
put 'Pj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LHVEPW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiBkRChTLE8sayl7aWYoIVMpcmV0dXJuIlNI'@;
put 'MzNUSlNFUlIwIjtpZihrLmJpZmY+OCYmKCFTLlhUSXx8IVMuWFRJW09dKSlyZXR1cm4gUy5TaGVldE5hbWVzW09dO2lmKCFTLlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBLPVMuWFRJW09dO2lmKGsuYmlmZjw4KXJldHVybiBPPjFlNCYmKE8tPTY1NTM2KSxPPDAmJihPPS1PKSwwPT1P'@;
put 'PyIiOlMuWFRJW08tMV07aWYoIUspcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgZWU9IiI7aWYoay5iaWZmPjgpc3dpdGNoKFNbS1swXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBlZT0tMT09S1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0tbMV1dLEtbMV09PUtbMl0/ZWU6ZWUrIjoiK1MuU2hlZXRO'@;
put 'YW1lc1tLWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9ay5TSUQ/Uy5TaGVldE5hbWVzW2suU0lEXToiU0gzM1RKU1NBTUUiK1NbS1swXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrU1tLWzBdXVswXX1zd2l0Y2goU1tLWzBdXVswXVswXSl7Y2FzZSAxMDI1OnJldHVybiBlZT0t'@;
put 'MT09S1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0tbMV1dfHwiU0gzM1RKU0VSUjMiLEtbMV09PUtbMl0/ZWU6ZWUrIjoiK1MuU2hlZXROYW1lc1tLWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBTW0tbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLk5hbWV9KS5qb2luKCI7'@;
put 'OyIpO2RlZmF1bHQ6cmV0dXJuIFNbS1swXV1bMF1bM10/KGVlPS0xPT1LWzFdPyIjUkVGIjpTW0tbMF1dWzBdWzNdW0tbMV1dfHwiU0gzM1RKU0VSUjQiLEtbMV09PUtbMl0/ZWU6ZWUrIjoiK1NbS1swXV1bMF1bM11bS1syXV0pOiJTSDMzVEpTRVJSMiJ9fWZ1bmN0aW9uIGVqKFMsTyxrKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24gSG5lKFMsTyl7aWYoIShTfHxPJiZPLmJpZmY8PTUmJk8uYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuLyNSRUYvLnRlc3QoUyk/Uzp1RC50ZXN0KFMpPyInIitTKyInIjpTfShkRChTLE8sayksayl9ZnVuY3Rpb24gYTAo'@;
put 'UyxPLGssSyxlZSxvZSl7dmFyIFBlLFZlLFllLFR0LG1lPWVlJiZlZS5iaWZmfHw4LHBlPW9lJiZudWxsIT1PP086e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxiZT1bXSxldD0wLGN0PTAsaXQ9IiI7aWYoIVNbMF18fCFTWzBdWzBdKXJldHVybiIiO2Zvcih2YXIgYnQ9LTEsQnQ9IiIsRHQ9'@;
put 'MCxPdD1TWzBdLmxlbmd0aDtEdDxPdDsrK0R0KXt2YXIgS3Q9U1swXVtEdF07c3dpdGNoKEt0WzBdKXtjYXNlIlB0Z1VtaW51cyI6YmUucHVzaCgiLSIrYmUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmJlLnB1c2goIisiK2JlLnBvcCgpKTticmVhaztjYXNlIlB0Z1BlcmNlbnQiOmJl'@;
put 'LnB1c2goYmUucG9wKCkrIiUiKTticmVhaztjYXNlIlB0Z0FkZCI6Y2FzZSJQdGdDb25jYXQiOmNhc2UiUHRnRGl2IjpjYXNlIlB0Z0VxIjpjYXNlIlB0Z0dlIjpjYXNlIlB0Z0d0IjpjYXNlIlB0Z0xlIjpjYXNlIlB0Z0x0IjpjYXNlIlB0Z011bCI6Y2FzZSJQdGdOZSI6Y2FzZSJQdGdQb3dl'@;
put 'ciI6Y2FzZSJQdGdTdWIiOmlmKFBlPWJlLnBvcCgpLFZlPWJlLnBvcCgpLGJ0Pj0wKXtzd2l0Y2goU1swXVtidF1bMV1bMF0pe2Nhc2UgMDpCdD1vaSgiICIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpCdD1vaSgiXHIiLFNbMF1bYnRdWzFdWzFdKTticmVhaztkZWZhdWx0OmlmKEJ0'@;
put 'PSIiLGVlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1WZSs9QnQsYnQ9LTF9YmUucHVzaChWZSt1aFtLdFswXV0rUGUpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOlBlPWJlLnBvcCgpLFZlPWJlLnBvcCgpLGJlLnB1c2go'@;
put 'VmUrIiAiK1BlKTticmVhaztjYXNlIlB0Z1VuaW9uIjpQZT1iZS5wb3AoKSxWZT1iZS5wb3AoKSxiZS5wdXNoKFZlKyIsIitQZSk7YnJlYWs7Y2FzZSJQdGdSYW5nZSI6UGU9YmUucG9wKCksVmU9YmUucG9wKCksYmUucHVzaChWZSsiOiIrUGUpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6'@;
put 'Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRnQXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRn'@;
put 'TWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpZZT10YShLdFsxXVsxXSxwZSxlZSksYmUucHVzaChqYShZZSxtZSkpO2JyZWFrO2Nh'@;
put 'c2UiUHRnUmVmTiI6WWU9az90YShLdFsxXVsxXSxrLGVlKTpLdFsxXVsxXSxiZS5wdXNoKGphKFllLG1lKSk7YnJlYWs7Y2FzZSJQdGdSZWYzZCI6ZXQ9S3RbMV1bMV0sWWU9dGEoS3RbMV1bMl0scGUsZWUpLGl0PWVqKEssZXQsZWUpLGJlLnB1c2goaXQrIiEiK2phKFllLG1lKSk7YnJlYWs7'@;
put 'Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBzcj1LdFsxXVswXSxDbj1LdFsxXVsxXTtzcnx8KHNyPTApO3ZhciB1cj0wPT0oc3ImPTEyNyk/W106YmUuc2xpY2UoLXNyKTtiZS5sZW5ndGgtPXNyLCJVc2VyIj09PUNuJiYoQ249dXIuc2hpZnQoKSksYmUucHVzaChDbisiKCIr'@;
put 'dXIuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjpiZS5wdXNoKEt0WzFdPyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlIlB0Z0ludCI6Y2FzZSJQdGdOdW0iOmJlLnB1c2goU3RyaW5nKEt0WzFdKSk7YnJlYWs7Y2FzZSJQdGdTdHIiOmJlLnB1c2goJyInK0t0WzFdLnJlcGxh'@;
put 'Y2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UiUHRnRXJyIjpiZS5wdXNoKEt0WzFdKTticmVhaztjYXNlIlB0Z0FyZWFOIjpUdD1hYShLdFsxXVsxXSxrP3tzOmt9OnBlLGVlKSxiZS5wdXNoKCRzKFR0LGVlKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpUdD1hYShLdFsxXVsxXSxwZSxlZSks'@;
put 'YmUucHVzaCgkcyhUdCxlZSkpO2JyZWFrO2Nhc2UiUHRnQXJlYTNkIjpldD1LdFsxXVsxXSxUdD1hYShLdFsxXVsyXSxwZSxlZSksaXQ9ZWooSyxldCxlZSksYmUucHVzaChpdCsiISIrJHMoVHQsZWUpKTticmVhaztjYXNlIlB0Z0F0dHJTdW0iOmJlLnB1c2goIlNVTSgiK2JlLnBvcCgpKyIp'@;
put 'Iik7YnJlYWs7Y2FzZSJQdGdOYW1lIjp2YXIgZXI9KEsubmFtZXN8fFtdKVsoY3Q9S3RbMV1bMl0pLTFdfHwoS1swXXx8W10pW2N0XSxqbj1lcj9lci5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKGN0KTtqbiBpbiB0eSYmKGpuPXR5W2puXSksYmUucHVzaChqbik7YnJlYWs7Y2FzZSJQdGdO'@;
put 'YW1lWCI6dmFyIGJyLHByPUt0WzFdWzFdO2lmKGN0PUt0WzFdWzJdLCEoZWUuYmlmZjw9NSkpe3ZhciBycj0iIjtpZigxNDg0OT09KChLW3ByXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKEtbcHJdfHxbXSlbMF18fFtdKVswXT9LW3ByXVtjdF0mJktbcHJdW2N0XS5pdGFiPjAmJihycj1L'@;
put 'LlNoZWV0TmFtZXNbS1twcl1bY3RdLml0YWItMV0rIiEiKTpycj1LLlNoZWV0TmFtZXNbY3QtMV0rIiEiKSxLW3ByXSYmS1twcl1bY3RdKXJyKz1LW3ByXVtjdF0uTmFtZTtlbHNlIGlmKEtbMF0mJktbMF1bY3RdKXJyKz1LWzBdW2N0XS5OYW1lO2Vsc2V7dmFyIFBpPShkRChLLHByLGVlKXx8'@;
put 'IiIpLnNwbGl0KCI7OyIpO1BpW2N0LTFdP3JyPVBpW2N0LTFdOnJyKz0iU0gzM1RKU0VSUlgifWJlLnB1c2gocnIpO2JyZWFrfXByPDAmJihwcj0tcHIpLEtbcHJdJiYoYnI9S1twcl1bY3RdKSxicnx8KGJyPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxiZS5wdXNoKGJyLk5hbWUpO2JyZWFrO2Nh'@;
put 'c2UiUHRnUGFyZW4iOnZhciBuYT0iKCIsbGE9IikiO2lmKGJ0Pj0wKXtzd2l0Y2goQnQ9IiIsU1swXVtidF1bMV1bMF0pe2Nhc2UgMjpuYT1vaSgiICIsU1swXVtidF1bMV1bMV0pK25hO2JyZWFrO2Nhc2UgMzpuYT1vaSgiXHIiLFNbMF1bYnRdWzFdWzFdKStuYTticmVhaztjYXNlIDQ6bGE9'@;
put 'b2koIiAiLFNbMF1bYnRdWzFdWzFdKStsYTticmVhaztjYXNlIDU6bGE9b2koIlxyIixTWzBdW2J0XVsxXVsxXSkrbGE7YnJlYWs7ZGVmYXVsdDppZihlZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitTWzBdW2J0XVsxXVswXSl9YnQ9LTF9YmUu'@;
put 'cHVzaChuYStiZS5wb3AoKStsYSk7YnJlYWs7Y2FzZSJQdGdSZWZFcnIiOmNhc2UiUHRnQXJlYUVyciI6Y2FzZSJQdGdBcmVhRXJyM2QiOmNhc2UiUHRnUmVmRXJyM2QiOmJlLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBScj17YzprLmMscjprLnJ9O2lmKEsuc2hhcmVk'@;
put 'ZltxaShZZT17YzpLdFsxXVsxXSxyOkt0WzFdWzBdfSldKXt2YXIgQm49Sy5zaGFyZWRmW3FpKFllKV07YmUucHVzaChhMChCbixwZSxScixLLGVlKSl9ZWxzZXt2YXIganI9ITE7Zm9yKFBlPTA7UGUhPUsuYXJyYXlmLmxlbmd0aDsrK1BlKWlmKCEoWWUuYzwoVmU9Sy5hcnJheWZbUGVdKVsw'@;
put 'XS5zLmN8fFllLmM+VmVbMF0uZS5jfHxZZS5yPFZlWzBdLnMucnx8WWUucj5WZVswXS5lLnIpKXtiZS5wdXNoKGEwKFZlWzFdLHBlLFJyLEssZWUpKSxqcj0hMDticmVha31qcnx8YmUucHVzaChLdFsxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6YmUucHVzaCgieyIrSDEoS3RbMV0pKyJ9Iik7'@;
put 'YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0clNwYWNlU2VtaSI6YnQ9RHQ7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjpiZS5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmJlLnB1c2goIlRhYmxlIitLdFsxXS5pZHgrIlsjIitLdFsxXS5ydCsiXSIpO2JyZWFrO2Nhc2Ui'@;
put 'UHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0'@;
put 'Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhLdCkpfWlmKDMhPWVlLmJpZmYmJmJ0Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3Bh'@;
put 'Y2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKFNbMF1bRHRdWzBdKSl7dmFyIEhuPSEwO3N3aXRjaCgoS3Q9U1swXVtidF0pWzFdWzBdKXtjYXNlIDQ6SG49ITE7Y2FzZSAwOkJ0PW9pKCIgIixLdFsxXVsxXSk7YnJlYWs7Y2FzZSA1OkhuPSExO2Nhc2UgMTpCdD1vaSgiXHIiLEt0WzFd'@;
put 'WzFdKTticmVhaztkZWZhdWx0OmlmKEJ0PSIiLGVlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK0t0WzFdWzBdKX1iZS5wdXNoKChIbj9CdDoiIikrYmUucG9wKCkrKEhuPyIiOkJ0KSksYnQ9LTF9fWlmKGJlLmxlbmd0aD4xJiZlZS5XVEYpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJiYWQgZm9ybXVsYSBzdGFjayIpO3JldHVybiBiZVswXX1mdW5jdGlvbiBoRChTLE8sayl7dmFyIG9lLEs9Uy5sK08sZWU9Mj09ay5iaWZmPzE6MixtZT1TLnJlYWRfc2hpZnQoZWUpO2lmKDY1NTM1PT1tZSlyZXR1cm5bW10sUm4oUyxPLTIpXTt2YXIgcGU9Y2goUyxt'@;
put 'ZSxrKTtyZXR1cm4gTyE9PW1lK2VlJiYob2U9QjQoUyxPLW1lLWVlLHBlLGspKSxTLmw9SyxbcGUsb2VdfWZ1bmN0aW9uIFgzKFMsTyxrKXt2YXIgZWUsSz1TLmwrTyxvZT1TLnJlYWRfc2hpZnQoMiksbWU9Y2goUyxvZSxrKTtyZXR1cm4gNjU1MzU9PW9lP1tbXSxSbihTLE8tMildOihPIT09'@;
put 'b2UrMiYmKGVlPUI0KFMsSy1vZS0yLG1lLGspKSxbbWUsZWVdKX1mdW5jdGlvbiBpUyhTLE8sayl7dmFyIEs9Uy5sK08sZWU9eTAoUyk7Mj09ay5iaWZmJiYrK1MubDt2YXIgb2U9ZnVuY3Rpb24gblMoUyl7dmFyIE87aWYoNjU1MzUhPT1RYShTLFMubCs2KSlyZXR1cm5bUmwoUyksIm4iXTtz'@;
put 'd2l0Y2goU1tTLmxdKXtjYXNlIDA6cmV0dXJuIFMubCs9OCxbIlN0cmluZyIsInMiXTtjYXNlIDE6cmV0dXJuIE89MT09PVNbUy5sKzJdLFMubCs9OCxbTywiYiJdO2Nhc2UgMjpyZXR1cm4gTz1TW1MubCsyXSxTLmwrPTgsW08sImUiXTtjYXNlIDM6cmV0dXJuIFMubCs9OCxbIiIsInMiXX1y'@;
put 'ZXR1cm5bXX0oUyksbWU9Uy5yZWFkX3NoaWZ0KDEpOzIhPWsuYmlmZiYmKFMucmVhZF9zaGlmdCgxKSxrLmJpZmY+PTUmJlMucmVhZF9zaGlmdCg0KSk7dmFyIHBlPWZ1bmN0aW9uIGZEKFMsTyxrKXt2YXIgb2UsSz1TLmwrTyxlZT0yPT1rLmJpZmY/MToyLG1lPVMucmVhZF9zaGlmdChlZSk7'@;
put 'aWYoNjU1MzU9PW1lKXJldHVybltbXSxSbihTLE8tMildO3ZhciBwZT1jaChTLG1lLGspO3JldHVybiBPIT09bWUrZWUmJihvZT1CNChTLE8tbWUtZWUscGUsaykpLFMubD1LLFtwZSxvZV19KFMsSy1TLmwsayk7cmV0dXJue2NlbGw6ZWUsdmFsOm9lWzBdLGZvcm11bGE6cGUsc2hhcmVkOm1l'@;
put 'Pj4zJjEsdHQ6b2VbMV19fWZ1bmN0aW9uIGo0KFMsTyxrKXt2YXIgSz1TLnJlYWRfc2hpZnQoNCksZWU9Y2goUyxLLGspLG9lPVMucmVhZF9zaGlmdCg0KTtyZXR1cm5bZWUsb2U+MD9CNChTLG9lLGVlLGssITApOm51bGxdfXZhciBhUz1qNCx6ND1qNCxnRD1qNCx0aj1mdW5jdGlvbiBwRChT'@;
put 'LE8sayl7dmFyIEs9Uy5yZWFkX3NoaWZ0KDQpLGVlPVMucmVhZF9zaGlmdCg0KSxvZT1jaChTLEssayk7cmV0dXJuW29lLGVlPjA/QjQoUyxlZSxvZSxrLCEwKTpudWxsXX0sbUQ9ajQsbmo9ajQ7ZnVuY3Rpb24gc1MoUyl7aWYoKDB8Uyk9PVMmJlM8TWF0aC5wb3coMiwxNikmJlM+PTApe3Zh'@;
put 'ciBPPXZuKDExKTtyZXR1cm4gTy53cml0ZV9zaGlmdCg0LDMpLE8ud3JpdGVfc2hpZnQoMSwzMCksTy53cml0ZV9zaGlmdCgyLFMpLE8ud3JpdGVfc2hpZnQoNCwwKSxPfXZhciBrPXZuKDE3KTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LDExKSxrLndyaXRlX3NoaWZ0KDEsMzEpLGsud3JpdGVf'@;
put 'c2hpZnQoOCxTKSxrLndyaXRlX3NoaWZ0KDQsMCksa31mdW5jdGlvbiBvUyhTKXt2YXIgTz12big3KTtPLndyaXRlX3NoaWZ0KDQsMysyKlMubGVuZ3RoKSxPLndyaXRlX3NoaWZ0KDEsMjMpLE8ud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7dmFyIGs9dm4oMipTLmxlbmd0aCk7ay53cml0ZV9z'@;
put 'aGlmdCgyKlMubGVuZ3RoLFMsInV0ZjE2bGUiKTt2YXIgSz12big0KTtyZXR1cm4gSy53cml0ZV9zaGlmdCg0LDApLFUoW08sayxLXSl9ZnVuY3Rpb24gVTQoUyl7aWYoUy5tYXRjaCgvXiMoRElWXC8wIXxHRVRUSU5HX0RBVEF8TlwvQXxOQU1FXD98TlVMTCF8TlVNIXxSRUYhfFZBTFVFISkk'@;
put 'LykpcmV0dXJuIGZ1bmN0aW9uIHJqKFMpe3ZhciBPPXZuKDEwKTtyZXR1cm4gTy53cml0ZV9zaGlmdCg0LDIpLE8ud3JpdGVfc2hpZnQoMSwyOCksTy53cml0ZV9zaGlmdCgxLFMpLE8ud3JpdGVfc2hpZnQoNCwwKSxPfSgrRjNbU10pO2lmKFMubWF0Y2goL15cJD8oPzpbQS1XXVtBLVpdezJ9'@;
put 'fFhbQS1FXVtBLVpdfFhGW0EtRF18W0EtWl17MSwyfSlcJD8oPzoxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9KSQvKSlyZXR1cm4gZnVuY3Rpb24gbzgoUyl7dmFyIE89VnMoUyksaz12bigxNSk7'@;
put 'cmV0dXJuIGsud3JpdGVfc2hpZnQoNCw3KSxrLndyaXRlX3NoaWZ0KDEsMzYpLGsud3JpdGVfc2hpZnQoNCxPLnIpLGsud3JpdGVfc2hpZnQoMixPLmN8KCIkIj09Uy5jaGFyQXQoMCk/MDoxKTw8MTR8KFMubWF0Y2goL1wkXGQvKT8wOjEpPDwxNSksay53cml0ZV9zaGlmdCg0LDApLGt9KFMp'@;
put 'O2lmKFMubWF0Y2goL14iLioiJC8pKXJldHVybiBvUyhTKTt0aHJvdyJGb3JtdWxhIHwiK1MrInwgbm90IHN1cHBvcnRlZCBmb3IgWExTQiJ9dmFyIGxTPXswOiJCRUVQIiwxOiJPUEVOIiwyOiJPUEVOLkxJTktTIiwzOiJDTE9TRS5BTEwiLDQ6IlNBVkUiLDU6IlNBVkUuQVMiLDY6IkZJTEUu'@;
put 'REVMRVRFIiw3OiJQQUdFLlNFVFVQIiw4OiJQUklOVCIsOToiUFJJTlRFUi5TRVRVUCIsMTA6IlFVSVQiLDExOiJORVcuV0lORE9XIiwxMjoiQVJSQU5HRS5BTEwiLDEzOiJXSU5ET1cuU0laRSIsMTQ6IldJTkRPVy5NT1ZFIiwxNToiRlVMTCIsMTY6IkNMT1NFIiwxNzoiUlVOIiwyMjoiU0VU'@;
put 'LlBSSU5ULkFSRUEiLDIzOiJTRVQuUFJJTlQuVElUTEVTIiwyNDoiU0VULlBBR0UuQlJFQUsiLDI1OiJSRU1PVkUuUEFHRS5CUkVBSyIsMjY6IkZPTlQiLDI3OiJESVNQTEFZIiwyODoiUFJPVEVDVC5ET0NVTUVOVCIsMjk6IlBSRUNJU0lPTiIsMzA6IkExLlIxQzEiLDMxOiJDQUxDVUxBVEUu'@;
put 'Tk9XIiwzMjoiQ0FMQ1VMQVRJT04iLDM0OiJEQVRBLkZJTkQiLDM1OiJFWFRSQUNUIiwzNjoiREFUQS5ERUxFVEUiLDM3OiJTRVQuREFUQUJBU0UiLDM4OiJTRVQuQ1JJVEVSSUEiLDM5OiJTT1JUIiw0MDoiREFUQS5TRVJJRVMiLDQxOiJUQUJMRSIsNDI6IkZPUk1BVC5OVU1CRVIiLDQzOiJB'@;
put 'TElHTk1FTlQiLDQ0OiJTVFlMRSIsNDU6IkJPUkRFUiIsNDY6IkNFTEwuUFJPVEVDVElPTiIsNDc6IkNPTFVNTi5XSURUSCIsNDg6IlVORE8iLDQ5OiJDVVQiLDUwOiJDT1BZIiw1MToiUEFTVEUiLDUyOiJDTEVBUiIsNTM6IlBBU1RFLlNQRUNJQUwiLDU0OiJFRElULkRFTEVURSIsNTU6IklO'@;
put 'U0VSVCIsNTY6IkZJTEwuUklHSFQiLDU3OiJGSUxMLkRPV04iLDYxOiJERUZJTkUuTkFNRSIsNjI6IkNSRUFURS5OQU1FUyIsNjM6IkZPUk1VTEEuR09UTyIsNjQ6IkZPUk1VTEEuRklORCIsNjU6IlNFTEVDVC5MQVNULkNFTEwiLDY2OiJTSE9XLkFDVElWRS5DRUxMIiw2NzoiR0FMTEVSWS5B'@;
put 'UkVBIiw2ODoiR0FMTEVSWS5CQVIiLDY5OiJHQUxMRVJZLkNPTFVNTiIsNzA6IkdBTExFUlkuTElORSIsNzE6IkdBTExFUlkuUElFIiw3MjoiR0FMTEVSWS5TQ0FUVEVSIiw3MzoiQ09NQklOQVRJT04iLDc0OiJQUkVGRVJSRUQiLDc1OiJBREQuT1ZFUkxBWSIsNzY6IkdSSURMSU5FUyIsNzc6'@;
put 'IlNFVC5QUkVGRVJSRUQiLDc4OiJBWEVTIiw3OToiTEVHRU5EIiw4MDoiQVRUQUNILlRFWFQiLDgxOiJBREQuQVJST1ciLDgyOiJTRUxFQ1QuQ0hBUlQiLDgzOiJTRUxFQ1QuUExPVC5BUkVBIiw4NDoiUEFUVEVSTlMiLDg1OiJNQUlOLkNIQVJUIiw4NjoiT1ZFUkxBWSIsODc6IlNDQUxFIiw4'@;
put 'ODoiRk9STUFULkxFR0VORCIsODk6IkZPUk1BVC5URVhUIiw5MDoiRURJVC5SRVBFQVQiLDkxOiJQQVJTRSIsOTI6IkpVU1RJRlkiLDkzOiJISURFIiw5NDoiVU5ISURFIiw5NToiV09SS1NQQUNFIiw5NjoiRk9STVVMQSIsOTc6IkZPUk1VTEEuRklMTCIsOTg6IkZPUk1VTEEuQVJSQVkiLDk5'@;
put 'OiJEQVRBLkZJTkQuTkVYVCIsMTAwOiJEQVRBLkZJTkQuUFJFViIsMTAxOiJGT1JNVUxBLkZJTkQuTkVYVCIsMTAyOiJGT1JNVUxBLkZJTkQuUFJFViIsMTAzOiJBQ1RJVkFURSIsMTA0OiJBQ1RJVkFURS5ORVhUIiwxMDU6IkFDVElWQVRFLlBSRVYiLDEwNjoiVU5MT0NLRUQuTkVYVCIsMTA3'@;
put 'OiJVTkxPQ0tFRC5QUkVWIiwxMDg6IkNPUFkuUElDVFVSRSIsMTA5OiJTRUxFQ1QiLDExMDoiREVMRVRFLk5BTUUiLDExMToiREVMRVRFLkZPUk1BVCIsMTEyOiJWTElORSIsMTEzOiJITElORSIsMTE0OiJWUEFHRSIsMTE1OiJIUEFHRSIsMTE2OiJWU0NST0xMIiwxMTc6IkhTQ1JPTEwiLDEx'@;
put 'ODoiQUxFUlQiLDExOToiTkVXIiwxMjA6IkNBTkNFTC5DT1BZIiwxMjE6IlNIT1cuQ0xJUEJPQVJEIiwxMjI6Ik1FU1NBR0UiLDEyNDoiUEFTVEUuTElOSyIsMTI1OiJBUFAuQUNUSVZBVEUiLDEyNjoiREVMRVRFLkFSUk9XIiwxMjc6IlJPVy5IRUlHSFQiLDEyODoiRk9STUFULk1PVkUiLDEy'@;
put 'OToiRk9STUFULlNJWkUiLDEzMDoiRk9STVVMQS5SRVBMQUNFIiwxMzE6IlNFTkQuS0VZUyIsMTMyOiJTRUxFQ1QuU1BFQ0lBTCIsMTMzOiJBUFBMWS5OQU1FUyIsMTM0OiJSRVBMQUNFLkZPTlQiLDEzNToiRlJFRVpFLlBBTkVTIiwxMzY6IlNIT1cuSU5GTyIsMTM3OiJTUExJVCIsMTM4OiJP'@;
put 'Ti5XSU5ET1ciLDEzOToiT04uREFUQSIsMTQwOiJESVNBQkxFLklOUFVUIiwxNDI6Ik9VVExJTkUiLDE0MzoiTElTVC5OQU1FUyIsMTQ0OiJGSUxFLkNMT1NFIiwxNDU6IlNBVkUuV09SS0JPT0siLDE0NjoiREFUQS5GT1JNIiwxNDc6IkNPUFkuQ0hBUlQiLDE0ODoiT04uVElNRSIsMTQ5OiJX'@;
put 'QUlUIiwxNTA6IkZPUk1BVC5GT05UIiwxNTE6IkZJTEwuVVAiLDE1MjoiRklMTC5MRUZUIiwxNTM6IkRFTEVURS5PVkVSTEFZIiwxNTU6IlNIT1JULk1FTlVTIiwxNTk6IlNFVC5VUERBVEUuU1RBVFVTIiwxNjE6IkNPTE9SLlBBTEVUVEUiLDE2MjoiREVMRVRFLlNUWUxFIiwxNjM6IldJTkRP'@;
put 'Vy5SRVNUT1JFIiwxNjQ6IldJTkRPVy5NQVhJTUlaRSIsMTY2OiJDSEFOR0UuTElOSyIsMTY3OiJDQUxDVUxBVEUuRE9DVU1FTlQiLDE2ODoiT04uS0VZIiwxNjk6IkFQUC5SRVNUT1JFIiwxNzA6IkFQUC5NT1ZFIiwxNzE6IkFQUC5TSVpFIiwxNzI6IkFQUC5NSU5JTUlaRSIsMTczOiJBUFAu'@;
put 'TUFYSU1JWkUiLDE3NDoiQlJJTkcuVE8uRlJPTlQiLDE3NToiU0VORC5UTy5CQUNLIiwxODU6Ik1BSU4uQ0hBUlQuVFlQRSIsMTg2OiJPVkVSTEFZLkNIQVJULlRZUEUiLDE4NzoiU0VMRUNULkVORCIsMTg4OiJPUEVOLk1BSUwiLDE4OToiU0VORC5NQUlMIiwxOTA6IlNUQU5EQVJELkZPTlQi'@;
put 'LDE5MToiQ09OU09MSURBVEUiLDE5MjoiU09SVC5TUEVDSUFMIiwxOTM6IkdBTExFUlkuM0QuQVJFQSIsMTk0OiJHQUxMRVJZLjNELkNPTFVNTiIsMTk1OiJHQUxMRVJZLjNELkxJTkUiLDE5NjoiR0FMTEVSWS4zRC5QSUUiLDE5NzoiVklFVy4zRCIsMTk4OiJHT0FMLlNFRUsiLDE5OToiV09S'@;
put 'S0dST1VQIiwyMDA6IkZJTEwuR1JPVVAiLDIwMToiVVBEQVRFLkxJTksiLDIwMjoiUFJPTU9URSIsMjAzOiJERU1PVEUiLDIwNDoiU0hPVy5ERVRBSUwiLDIwNjoiVU5HUk9VUCIsMjA3OiJPQkpFQ1QuUFJPUEVSVElFUyIsMjA4OiJTQVZFLk5FVy5PQkpFQ1QiLDIwOToiU0hBUkUiLDIxMDoi'@;
put 'U0hBUkUuTkFNRSIsMjExOiJEVVBMSUNBVEUiLDIxMjoiQVBQTFkuU1RZTEUiLDIxMzoiQVNTSUdOLlRPLk9CSkVDVCIsMjE0OiJPQkpFQ1QuUFJPVEVDVElPTiIsMjE1OiJISURFLk9CSkVDVCIsMjE2OiJTRVQuRVhUUkFDVCIsMjE3OiJDUkVBVEUuUFVCTElTSEVSIiwyMTg6IlNVQlNDUklC'@;
put 'RS5UTyIsMjE5OiJBVFRSSUJVVEVTIiwyMjA6IlNIT1cuVE9PTEJBUiIsMjIyOiJQUklOVC5QUkVWSUVXIiwyMjM6IkVESVQuQ09MT1IiLDIyNDoiU0hPVy5MRVZFTFMiLDIyNToiRk9STUFULk1BSU4iLDIyNjoiRk9STUFULk9WRVJMQVkiLDIyNzoiT04uUkVDQUxDIiwyMjg6IkVESVQuU0VS'@;
put 'SUVTIiwyMjk6IkRFRklORS5TVFlMRSIsMjQwOiJMSU5FLlBSSU5UIiwyNDM6IkVOVEVSLkRBVEEiLDI0OToiR0FMTEVSWS5SQURBUiIsMjUwOiJNRVJHRS5TVFlMRVMiLDI1MToiRURJVElPTi5PUFRJT05TIiwyNTI6IlBBU1RFLlBJQ1RVUkUiLDI1MzoiUEFTVEUuUElDVFVSRS5MSU5LIiwy'@;
put 'NTQ6IlNQRUxMSU5HIiwyNTY6IlpPT00iLDI1OToiSU5TRVJULk9CSkVDVCIsMjYwOiJXSU5ET1cuTUlOSU1JWkUiLDI2NToiU09VTkQuTk9URSIsMjY2OiJTT1VORC5QTEFZIiwyNjc6IkZPUk1BVC5TSEFQRSIsMjY4OiJFWFRFTkQuUE9MWUdPTiIsMjY5OiJGT1JNQVQuQVVUTyIsMjcyOiJH'@;
put 'QUxMRVJZLjNELkJBUiIsMjczOiJHQUxMRVJZLjNELlNVUkZBQ0UiLDI3NDoiRklMTC5BVVRPIiwyNzY6IkNVU1RPTUlaRS5UT09MQkFSIiwyNzc6IkFERC5UT09MIiwyNzg6IkVESVQuT0JKRUNUIiwyNzk6Ik9OLkRPVUJMRUNMSUNLIiwyODA6Ik9OLkVOVFJZIiwyODE6IldPUktCT09LLkFE'@;
put 'RCIsMjgyOiJXT1JLQk9PSy5NT1ZFIiwyODM6IldPUktCT09LLkNPUFkiLDI4NDoiV09SS0JPT0suT1BUSU9OUyIsMjg1OiJTQVZFLldPUktTUEFDRSIsMjg4OiJDSEFSVC5XSVpBUkQiLDI4OToiREVMRVRFLlRPT0wiLDI5MDoiTU9WRS5UT09MIiwyOTE6IldPUktCT09LLlNFTEVDVCIsMjky'@;
put 'OiJXT1JLQk9PSy5BQ1RJVkFURSIsMjkzOiJBU1NJR04uVE8uVE9PTCIsMjk1OiJDT1BZLlRPT0wiLDI5NjoiUkVTRVQuVE9PTCIsMjk3OiJDT05TVFJBSU4uTlVNRVJJQyIsMjk4OiJQQVNURS5UT09MIiwzMDI6IldPUktCT09LLk5FVyIsMzA1OiJTQ0VOQVJJTy5DRUxMUyIsMzA2OiJTQ0VO'@;
put 'QVJJTy5ERUxFVEUiLDMwNzoiU0NFTkFSSU8uQUREIiwzMDg6IlNDRU5BUklPLkVESVQiLDMwOToiU0NFTkFSSU8uU0hPVyIsMzEwOiJTQ0VOQVJJTy5TSE9XLk5FWFQiLDMxMToiU0NFTkFSSU8uU1VNTUFSWSIsMzEyOiJQSVZPVC5UQUJMRS5XSVpBUkQiLDMxMzoiUElWT1QuRklFTEQuUFJP'@;
put 'UEVSVElFUyIsMzE0OiJQSVZPVC5GSUVMRCIsMzE1OiJQSVZPVC5JVEVNIiwzMTY6IlBJVk9ULkFERC5GSUVMRFMiLDMxODoiT1BUSU9OUy5DQUxDVUxBVElPTiIsMzE5OiJPUFRJT05TLkVESVQiLDMyMDoiT1BUSU9OUy5WSUVXIiwzMjE6IkFERElOLk1BTkFHRVIiLDMyMjoiTUVOVS5FRElU'@;
put 'T1IiLDMyMzoiQVRUQUNILlRPT0xCQVJTIiwzMjQ6IlZCQUFjdGl2YXRlIiwzMjU6Ik9QVElPTlMuQ0hBUlQiLDMyODoiVkJBLklOU0VSVC5GSUxFIiwzMzA6IlZCQS5QUk9DRURVUkUuREVGSU5JVElPTiIsMzM2OiJST1VUSU5HLlNMSVAiLDMzODoiUk9VVEUuRE9DVU1FTlQiLDMzOToiTUFJ'@;
put 'TC5MT0dPTiIsMzQyOiJJTlNFUlQuUElDVFVSRSIsMzQzOiJFRElULlRPT0wiLDM0NDoiR0FMTEVSWS5ET1VHSE5VVCIsMzUwOiJDSEFSVC5UUkVORCIsMzUyOiJQSVZPVC5JVEVNLlBST1BFUlRJRVMiLDM1NDoiV09SS0JPT0suSU5TRVJUIiwzNTU6Ik9QVElPTlMuVFJBTlNJVElPTiIsMzU2'@;
put 'OiJPUFRJT05TLkdFTkVSQUwiLDM3MDoiRklMVEVSLkFEVkFOQ0VEIiwzNzM6Ik1BSUwuQURELk1BSUxFUiIsMzc0OiJNQUlMLkRFTEVURS5NQUlMRVIiLDM3NToiTUFJTC5SRVBMWSIsMzc2OiJNQUlMLlJFUExZLkFMTCIsMzc3OiJNQUlMLkZPUldBUkQiLDM3ODoiTUFJTC5ORVhULkxFVFRF'@;
put 'UiIsMzc5OiJEQVRBLkxBQkVMIiwzODA6IklOU0VSVC5USVRMRSIsMzgxOiJGT05ULlBST1BFUlRJRVMiLDM4MjoiTUFDUk8uT1BUSU9OUyIsMzgzOiJXT1JLQk9PSy5ISURFIiwzODQ6IldPUktCT09LLlVOSElERSIsMzg1OiJXT1JLQk9PSy5ERUxFVEUiLDM4NjoiV09SS0JPT0suTkFNRSIs'@;
put 'Mzg4OiJHQUxMRVJZLkNVU1RPTSIsMzkwOiJBREQuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkxOiJERUxFVEUuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkyOiJDSEFSVC5BREQuREFUQSIsMzkzOiJBVVRPLk9VVExJTkUiLDM5NDoiVEFCLk9SREVSIiwzOTU6IlNIT1cuRElBTE9HIiwzOTY6IlNFTEVDVC5B'@;
put 'TEwiLDM5NzoiVU5HUk9VUC5TSEVFVFMiLDM5ODoiU1VCVE9UQUwuQ1JFQVRFIiwzOTk6IlNVQlRPVEFMLlJFTU9WRSIsNDAwOiJSRU5BTUUuT0JKRUNUIiw0MTI6IldPUktCT09LLlNDUk9MTCIsNDEzOiJXT1JLQk9PSy5ORVhUIiw0MTQ6IldPUktCT09LLlBSRVYiLDQxNToiV09SS0JPT0su'@;
put 'VEFCLlNQTElUIiw0MTY6IkZVTEwuU0NSRUVOIiw0MTc6IldPUktCT09LLlBST1RFQ1QiLDQyMDoiU0NST0xMQkFSLlBST1BFUlRJRVMiLDQyMToiUElWT1QuU0hPVy5QQUdFUyIsNDIyOiJURVhULlRPLkNPTFVNTlMiLDQyMzoiRk9STUFULkNIQVJUVFlQRSIsNDI0OiJMSU5LLkZPUk1BVCIs'@;
put 'NDI1OiJUUkFDRVIuRElTUExBWSIsNDMwOiJUUkFDRVIuTkFWSUdBVEUiLDQzMToiVFJBQ0VSLkNMRUFSIiw0MzI6IlRSQUNFUi5FUlJPUiIsNDMzOiJQSVZPVC5GSUVMRC5HUk9VUCIsNDM0OiJQSVZPVC5GSUVMRC5VTkdST1VQIiw0MzU6IkNIRUNLQk9YLlBST1BFUlRJRVMiLDQzNjoiTEFC'@;
put 'RUwuUFJPUEVSVElFUyIsNDM3OiJMSVNUQk9YLlBST1BFUlRJRVMiLDQzODoiRURJVEJPWC5QUk9QRVJUSUVTIiw0Mzk6IlBJVk9ULlJFRlJFU0giLDQ0MDoiTElOSy5DT01CTyIsNDQxOiJPUEVOLlRFWFQiLDQ0MjoiSElERS5ESUFMT0ciLDQ0MzoiU0VULkRJQUxPRy5GT0NVUyIsNDQ0OiJF'@;
put 'TkFCTEUuT0JKRUNUIiw0NDU6IlBVU0hCVVRUT04uUFJPUEVSVElFUyIsNDQ2OiJTRVQuRElBTE9HLkRFRkFVTFQiLDQ0NzoiRklMVEVSIiw0NDg6IkZJTFRFUi5TSE9XLkFMTCIsNDQ5OiJDTEVBUi5PVVRMSU5FIiw0NTA6IkZVTkNUSU9OLldJWkFSRCIsNDUxOiJBREQuTElTVC5JVEVNIiw0'@;
put 'NTI6IlNFVC5MSVNULklURU0iLDQ1MzoiUkVNT1ZFLkxJU1QuSVRFTSIsNDU0OiJTRUxFQ1QuTElTVC5JVEVNIiw0NTU6IlNFVC5DT05UUk9MLlZBTFVFIiw0NTY6IlNBVkUuQ09QWS5BUyIsNDU4OiJPUFRJT05TLkxJU1RTLkFERCIsNDU5OiJPUFRJT05TLkxJU1RTLkRFTEVURSIsNDYwOiJT'@;
put 'RVJJRVMuQVhFUyIsNDYxOiJTRVJJRVMuWCIsNDYyOiJTRVJJRVMuWSIsNDYzOiJFUlJPUkJBUi5YIiw0NjQ6IkVSUk9SQkFSLlkiLDQ2NToiRk9STUFULkNIQVJUIiw0NjY6IlNFUklFUy5PUkRFUiIsNDY3OiJNQUlMLkxPR09GRiIsNDY4OiJDTEVBUi5ST1VUSU5HLlNMSVAiLDQ2OToiQVBQ'@;
put 'LkFDVElWQVRFLk1JQ1JPU09GVCIsNDcwOiJNQUlMLkVESVQuTUFJTEVSIiw0NzE6Ik9OLlNIRUVUIiw0NzI6IlNUQU5EQVJELldJRFRIIiw0NzM6IlNDRU5BUklPLk1FUkdFIiw0NzQ6IlNVTU1BUlkuSU5GTyIsNDc1OiJGSU5ELkZJTEUiLDQ3NjoiQUNUSVZFLkNFTEwuRk9OVCIsNDc3OiJF'@;
put 'TkFCTEUuVElQV0laQVJEIiw0Nzg6IlZCQS5NQUtFLkFERElOIiw0ODA6IklOU0VSVERBVEFUQUJMRSIsNDgxOiJXT1JLR1JPVVAuT1BUSU9OUyIsNDgyOiJNQUlMLlNFTkQuTUFJTEVSIiw0ODU6IkFVVE9DT1JSRUNUIiw0ODk6IlBPU1QuRE9DVU1FTlQiLDQ5MToiUElDS0xJU1QiLDQ5Mzoi'@;
put 'VklFVy5TSE9XIiw0OTQ6IlZJRVcuREVGSU5FIiw0OTU6IlZJRVcuREVMRVRFIiw1MDk6IlNIRUVULkJBQ0tHUk9VTkQiLDUxMDoiSU5TRVJULk1BUC5PQkpFQ1QiLDUxMToiT1BUSU9OUy5NRU5PTk8iLDUxNzoiTVNPQ0hFQ0tTIiw1MTg6Ik5PUk1BTCIsNTE5OiJMQVlPVVQiLDUyMDoiUk0u'@;
put 'UFJJTlQuQVJFQSIsNTIxOiJDTEVBUi5QUklOVC5BUkVBIiw1MjI6IkFERC5QUklOVC5BUkVBIiw1MjM6Ik1PVkUuQlJLIiw1NDU6IkhJREVDVVJSLk5PVEUiLDU0NjoiSElERUFMTC5OT1RFUyIsNTQ3OiJERUxFVEUuTk9URSIsNTQ4OiJUUkFWRVJTRS5OT1RFUyIsNTQ5OiJBQ1RJVkFURS5O'@;
put 'T1RFUyIsNjIwOiJQUk9URUNULlJFVklTSU9OUyIsNjIxOiJVTlBST1RFQ1QuUkVWSVNJT05TIiw2NDc6Ik9QVElPTlMuTUUiLDY1MzoiV0VCLlBVQkxJU0giLDY2NzoiTkVXV0VCUVVFUlkiLDY3MzoiUElWT1QuVEFCTEUuQ0hBUlQiLDc1MzoiT1BUSU9OUy5TQVZFIiw3NTU6Ik9QVElPTlMu'@;
put 'U1BFTEwiLDgwODoiSElERUFMTC5JTktBTk5PVFMifSx2RD17MDoiQ09VTlQiLDE6IklGIiwyOiJJU05BIiwzOiJJU0VSUk9SIiw0OiJTVU0iLDU6IkFWRVJBR0UiLDY6Ik1JTiIsNzoiTUFYIiw4OiJST1ciLDk6IkNPTFVNTiIsMTA6Ik5BIiwxMToiTlBWIiwxMjoiU1RERVYiLDEzOiJET0xM'@;
put 'QVIiLDE0OiJGSVhFRCIsMTU6IlNJTiIsMTY6IkNPUyIsMTc6IlRBTiIsMTg6IkFUQU4iLDE5OiJQSSIsMjA6IlNRUlQiLDIxOiJFWFAiLDIyOiJMTiIsMjM6IkxPRzEwIiwyNDoiQUJTIiwyNToiSU5UIiwyNjoiU0lHTiIsMjc6IlJPVU5EIiwyODoiTE9PS1VQIiwyOToiSU5ERVgiLDMwOiJS'@;
put 'RVBUIiwzMToiTUlEIiwzMjoiTEVOIiwzMzoiVkFMVUUiLDM0OiJUUlVFIiwzNToiRkFMU0UiLDM2OiJBTkQiLDM3OiJPUiIsMzg6Ik5PVCIsMzk6Ik1PRCIsNDA6IkRDT1VOVCIsNDE6IkRTVU0iLDQyOiJEQVZFUkFHRSIsNDM6IkRNSU4iLDQ0OiJETUFYIiw0NToiRFNUREVWIiw0NjoiVkFS'@;
put 'Iiw0NzoiRFZBUiIsNDg6IlRFWFQiLDQ5OiJMSU5FU1QiLDUwOiJUUkVORCIsNTE6IkxPR0VTVCIsNTI6IkdST1dUSCIsNTM6IkdPVE8iLDU0OiJIQUxUIiw1NToiUkVUVVJOIiw1NjoiUFYiLDU3OiJGViIsNTg6Ik5QRVIiLDU5OiJQTVQiLDYwOiJSQVRFIiw2MToiTUlSUiIsNjI6IklSUiIs'@;
put 'NjM6IlJBTkQiLDY0OiJNQVRDSCIsNjU6IkRBVEUiLDY2OiJUSU1FIiw2NzoiREFZIiw2ODoiTU9OVEgiLDY5OiJZRUFSIiw3MDoiV0VFS0RBWSIsNzE6IkhPVVIiLDcyOiJNSU5VVEUiLDczOiJTRUNPTkQiLDc0OiJOT1ciLDc1OiJBUkVBUyIsNzY6IlJPV1MiLDc3OiJDT0xVTU5TIiw3ODoi'@;
put 'T0ZGU0VUIiw3OToiQUJTUkVGIiw4MDoiUkVMUkVGIiw4MToiQVJHVU1FTlQiLDgyOiJTRUFSQ0giLDgzOiJUUkFOU1BPU0UiLDg0OiJFUlJPUiIsODU6IlNURVAiLDg2OiJUWVBFIiw4NzoiRUNITyIsODg6IlNFVC5OQU1FIiw4OToiQ0FMTEVSIiw5MDoiREVSRUYiLDkxOiJXSU5ET1dTIiw5'@;
put 'MjoiU0VSSUVTIiw5MzoiRE9DVU1FTlRTIiw5NDoiQUNUSVZFLkNFTEwiLDk1OiJTRUxFQ1RJT04iLDk2OiJSRVNVTFQiLDk3OiJBVEFOMiIsOTg6IkFTSU4iLDk5OiJBQ09TIiwxMDA6IkNIT09TRSIsMTAxOiJITE9PS1VQIiwxMDI6IlZMT09LVVAiLDEwMzoiTElOS1MiLDEwNDoiSU5QVVQi'@;
put 'LDEwNToiSVNSRUYiLDEwNjoiR0VULkZPUk1VTEEiLDEwNzoiR0VULk5BTUUiLDEwODoiU0VULlZBTFVFIiwxMDk6IkxPRyIsMTEwOiJFWEVDIiwxMTE6IkNIQVIiLDExMjoiTE9XRVIiLDExMzoiVVBQRVIiLDExNDoiUFJPUEVSIiwxMTU6IkxFRlQiLDExNjoiUklHSFQiLDExNzoiRVhBQ1Qi'@;
put 'LDExODoiVFJJTSIsMTE5OiJSRVBMQUNFIiwxMjA6IlNVQlNUSVRVVEUiLDEyMToiQ09ERSIsMTIyOiJOQU1FUyIsMTIzOiJESVJFQ1RPUlkiLDEyNDoiRklORCIsMTI1OiJDRUxMIiwxMjY6IklTRVJSIiwxMjc6IklTVEVYVCIsMTI4OiJJU05VTUJFUiIsMTI5OiJJU0JMQU5LIiwxMzA6IlQi'@;
put 'LDEzMToiTiIsMTMyOiJGT1BFTiIsMTMzOiJGQ0xPU0UiLDEzNDoiRlNJWkUiLDEzNToiRlJFQURMTiIsMTM2OiJGUkVBRCIsMTM3OiJGV1JJVEVMTiIsMTM4OiJGV1JJVEUiLDEzOToiRlBPUyIsMTQwOiJEQVRFVkFMVUUiLDE0MToiVElNRVZBTFVFIiwxNDI6IlNMTiIsMTQzOiJTWUQiLDE0'@;
put 'NDoiRERCIiwxNDU6IkdFVC5ERUYiLDE0NjoiUkVGVEVYVCIsMTQ3OiJURVhUUkVGIiwxNDg6IklORElSRUNUIiwxNDk6IlJFR0lTVEVSIiwxNTA6IkNBTEwiLDE1MToiQURELkJBUiIsMTUyOiJBREQuTUVOVSIsMTUzOiJBREQuQ09NTUFORCIsMTU0OiJFTkFCTEUuQ09NTUFORCIsMTU1OiJD'@;
put 'SEVDSy5DT01NQU5EIiwxNTY6IlJFTkFNRS5DT01NQU5EIiwxNTc6IlNIT1cuQkFSIiwxNTg6IkRFTEVURS5NRU5VIiwxNTk6IkRFTEVURS5DT01NQU5EIiwxNjA6IkdFVC5DSEFSVC5JVEVNIiwxNjE6IkRJQUxPRy5CT1giLDE2MjoiQ0xFQU4iLDE2MzoiTURFVEVSTSIsMTY0OiJNSU5WRVJT'@;
put 'RSIsMTY1OiJNTVVMVCIsMTY2OiJGSUxFUyIsMTY3OiJJUE1UIiwxNjg6IlBQTVQiLDE2OToiQ09VTlRBIiwxNzA6IkNBTkNFTC5LRVkiLDE3MToiRk9SIiwxNzI6IldISUxFIiwxNzM6IkJSRUFLIiwxNzQ6Ik5FWFQiLDE3NToiSU5JVElBVEUiLDE3NjoiUkVRVUVTVCIsMTc3OiJQT0tFIiwx'@;
put 'Nzg6IkVYRUNVVEUiLDE3OToiVEVSTUlOQVRFIiwxODA6IlJFU1RBUlQiLDE4MToiSEVMUCIsMTgyOiJHRVQuQkFSIiwxODM6IlBST0RVQ1QiLDE4NDoiRkFDVCIsMTg1OiJHRVQuQ0VMTCIsMTg2OiJHRVQuV09SS1NQQUNFIiwxODc6IkdFVC5XSU5ET1ciLDE4ODoiR0VULkRPQ1VNRU5UIiwx'@;
put 'ODk6IkRQUk9EVUNUIiwxOTA6IklTTk9OVEVYVCIsMTkxOiJHRVQuTk9URSIsMTkyOiJOT1RFIiwxOTM6IlNUREVWUCIsMTk0OiJWQVJQIiwxOTU6IkRTVERFVlAiLDE5NjoiRFZBUlAiLDE5NzoiVFJVTkMiLDE5ODoiSVNMT0dJQ0FMIiwxOTk6IkRDT1VOVEEiLDIwMDoiREVMRVRFLkJBUiIs'@;
put 'MjAxOiJVTlJFR0lTVEVSIiwyMDQ6IlVTRE9MTEFSIiwyMDU6IkZJTkRCIiwyMDY6IlNFQVJDSEIiLDIwNzoiUkVQTEFDRUIiLDIwODoiTEVGVEIiLDIwOToiUklHSFRCIiwyMTA6Ik1JREIiLDIxMToiTEVOQiIsMjEyOiJST1VORFVQIiwyMTM6IlJPVU5ERE9XTiIsMjE0OiJBU0MiLDIxNToi'@;
put 'REJDUyIsMjE2OiJSQU5LIiwyMTk6IkFERFJFU1MiLDIyMDoiREFZUzM2MCIsMjIxOiJUT0RBWSIsMjIyOiJWREIiLDIyMzoiRUxTRSIsMjI0OiJFTFNFLklGIiwyMjU6IkVORC5JRiIsMjI2OiJGT1IuQ0VMTCIsMjI3OiJNRURJQU4iLDIyODoiU1VNUFJPRFVDVCIsMjI5OiJTSU5IIiwyMzA6'@;
put 'IkNPU0giLDIzMToiVEFOSCIsMjMyOiJBU0lOSCIsMjMzOiJBQ09TSCIsMjM0OiJBVEFOSCIsMjM1OiJER0VUIiwyMzY6IkNSRUFURS5PQkpFQ1QiLDIzNzoiVk9MQVRJTEUiLDIzODoiTEFTVC5FUlJPUiIsMjM5OiJDVVNUT00uVU5ETyIsMjQwOiJDVVNUT00uUkVQRUFUIiwyNDE6IkZPUk1V'@;
put 'TEEuQ09OVkVSVCIsMjQyOiJHRVQuTElOSy5JTkZPIiwyNDM6IlRFWFQuQk9YIiwyNDQ6IklORk8iLDI0NToiR1JPVVAiLDI0NjoiR0VULk9CSkVDVCIsMjQ3OiJEQiIsMjQ4OiJQQVVTRSIsMjUxOiJSRVNVTUUiLDI1MjoiRlJFUVVFTkNZIiwyNTM6IkFERC5UT09MQkFSIiwyNTQ6IkRFTEVU'@;
put 'RS5UT09MQkFSIiwyNTU6IlVzZXIiLDI1NjoiUkVTRVQuVE9PTEJBUiIsMjU3OiJFVkFMVUFURSIsMjU4OiJHRVQuVE9PTEJBUiIsMjU5OiJHRVQuVE9PTCIsMjYwOiJTUEVMTElORy5DSEVDSyIsMjYxOiJFUlJPUi5UWVBFIiwyNjI6IkFQUC5USVRMRSIsMjYzOiJXSU5ET1cuVElUTEUiLDI2'@;
put 'NDoiU0FWRS5UT09MQkFSIiwyNjU6IkVOQUJMRS5UT09MIiwyNjY6IlBSRVNTLlRPT0wiLDI2NzoiUkVHSVNURVIuSUQiLDI2ODoiR0VULldPUktCT09LIiwyNjk6IkFWRURFViIsMjcwOiJCRVRBRElTVCIsMjcxOiJHQU1NQUxOIiwyNzI6IkJFVEFJTlYiLDI3MzoiQklOT01ESVNUIiwyNzQ6'@;
put 'IkNISURJU1QiLDI3NToiQ0hJSU5WIiwyNzY6IkNPTUJJTiIsMjc3OiJDT05GSURFTkNFIiwyNzg6IkNSSVRCSU5PTSIsMjc5OiJFVkVOIiwyODA6IkVYUE9ORElTVCIsMjgxOiJGRElTVCIsMjgyOiJGSU5WIiwyODM6IkZJU0hFUiIsMjg0OiJGSVNIRVJJTlYiLDI4NToiRkxPT1IiLDI4Njoi'@;
put 'R0FNTUFESVNUIiwyODc6IkdBTU1BSU5WIiwyODg6IkNFSUxJTkciLDI4OToiSFlQR0VPTURJU1QiLDI5MDoiTE9HTk9STURJU1QiLDI5MToiTE9HSU5WIiwyOTI6Ik5FR0JJTk9NRElTVCIsMjkzOiJOT1JNRElTVCIsMjk0OiJOT1JNU0RJU1QiLDI5NToiTk9STUlOViIsMjk2OiJOT1JNU0lO'@;
put 'ViIsMjk3OiJTVEFOREFSRElaRSIsMjk4OiJPREQiLDI5OToiUEVSTVVUIiwzMDA6IlBPSVNTT04iLDMwMToiVERJU1QiLDMwMjoiV0VJQlVMTCIsMzAzOiJTVU1YTVkyIiwzMDQ6IlNVTVgyTVkyIiwzMDU6IlNVTVgyUFkyIiwzMDY6IkNISVRFU1QiLDMwNzoiQ09SUkVMIiwzMDg6IkNPVkFS'@;
put 'IiwzMDk6IkZPUkVDQVNUIiwzMTA6IkZURVNUIiwzMTE6IklOVEVSQ0VQVCIsMzEyOiJQRUFSU09OIiwzMTM6IlJTUSIsMzE0OiJTVEVZWCIsMzE1OiJTTE9QRSIsMzE2OiJUVEVTVCIsMzE3OiJQUk9CIiwzMTg6IkRFVlNRIiwzMTk6IkdFT01FQU4iLDMyMDoiSEFSTUVBTiIsMzIxOiJTVU1T'@;
put 'USIsMzIyOiJLVVJUIiwzMjM6IlNLRVciLDMyNDoiWlRFU1QiLDMyNToiTEFSR0UiLDMyNjoiU01BTEwiLDMyNzoiUVVBUlRJTEUiLDMyODoiUEVSQ0VOVElMRSIsMzI5OiJQRVJDRU5UUkFOSyIsMzMwOiJNT0RFIiwzMzE6IlRSSU1NRUFOIiwzMzI6IlRJTlYiLDMzNDoiTU9WSUUuQ09NTUFO'@;
put 'RCIsMzM1OiJHRVQuTU9WSUUiLDMzNjoiQ09OQ0FURU5BVEUiLDMzNzoiUE9XRVIiLDMzODoiUElWT1QuQURELkRBVEEiLDMzOToiR0VULlBJVk9ULlRBQkxFIiwzNDA6IkdFVC5QSVZPVC5GSUVMRCIsMzQxOiJHRVQuUElWT1QuSVRFTSIsMzQyOiJSQURJQU5TIiwzNDM6IkRFR1JFRVMiLDM0'@;
put 'NDoiU1VCVE9UQUwiLDM0NToiU1VNSUYiLDM0NjoiQ09VTlRJRiIsMzQ3OiJDT1VOVEJMQU5LIiwzNDg6IlNDRU5BUklPLkdFVCIsMzQ5OiJPUFRJT05TLkxJU1RTLkdFVCIsMzUwOiJJU1BNVCIsMzUxOiJEQVRFRElGIiwzNTI6IkRBVEVTVFJJTkciLDM1MzoiTlVNQkVSU1RSSU5HIiwzNTQ6'@;
put 'IlJPTUFOIiwzNTU6Ik9QRU4uRElBTE9HIiwzNTY6IlNBVkUuRElBTE9HIiwzNTc6IlZJRVcuR0VUIiwzNTg6IkdFVFBJVk9UREFUQSIsMzU5OiJIWVBFUkxJTksiLDM2MDoiUEhPTkVUSUMiLDM2MToiQVZFUkFHRUEiLDM2MjoiTUFYQSIsMzYzOiJNSU5BIiwzNjQ6IlNUREVWUEEiLDM2NToi'@;
put 'VkFSUEEiLDM2NjoiU1RERVZBIiwzNjc6IlZBUkEiLDM2ODoiQkFIVFRFWFQiLDM2OToiVEhBSURBWU9GV0VFSyIsMzcwOiJUSEFJRElHSVQiLDM3MToiVEhBSU1PTlRIT0ZZRUFSIiwzNzI6IlRIQUlOVU1TT1VORCIsMzczOiJUSEFJTlVNU1RSSU5HIiwzNzQ6IlRIQUlTVFJJTkdMRU5HVEgi'@;
put 'LDM3NToiSVNUSEFJRElHSVQiLDM3NjoiUk9VTkRCQUhURE9XTiIsMzc3OiJST1VOREJBSFRVUCIsMzc4OiJUSEFJWUVBUiIsMzc5OiJSVEQiLDM4MDoiQ1VCRVZBTFVFIiwzODE6IkNVQkVNRU1CRVIiLDM4MjoiQ1VCRU1FTUJFUlBST1BFUlRZIiwzODM6IkNVQkVSQU5LRURNRU1CRVIiLDM4'@;
put 'NDoiSEVYMkJJTiIsMzg1OiJIRVgyREVDIiwzODY6IkhFWDJPQ1QiLDM4NzoiREVDMkJJTiIsMzg4OiJERUMySEVYIiwzODk6IkRFQzJPQ1QiLDM5MDoiT0NUMkJJTiIsMzkxOiJPQ1QySEVYIiwzOTI6Ik9DVDJERUMiLDM5MzoiQklOMkRFQyIsMzk0OiJCSU4yT0NUIiwzOTU6IkJJTjJIRVgi'@;
put 'LDM5NjoiSU1TVUIiLDM5NzoiSU1ESVYiLDM5ODoiSU1QT1dFUiIsMzk5OiJJTUFCUyIsNDAwOiJJTVNRUlQiLDQwMToiSU1MTiIsNDAyOiJJTUxPRzIiLDQwMzoiSU1MT0cxMCIsNDA0OiJJTVNJTiIsNDA1OiJJTUNPUyIsNDA2OiJJTUVYUCIsNDA3OiJJTUFSR1VNRU5UIiw0MDg6IklNQ09O'@;
put 'SlVHQVRFIiw0MDk6IklNQUdJTkFSWSIsNDEwOiJJTVJFQUwiLDQxMToiQ09NUExFWCIsNDEyOiJJTVNVTSIsNDEzOiJJTVBST0RVQ1QiLDQxNDoiU0VSSUVTU1VNIiw0MTU6IkZBQ1RET1VCTEUiLDQxNjoiU1FSVFBJIiw0MTc6IlFVT1RJRU5UIiw0MTg6IkRFTFRBIiw0MTk6IkdFU1RFUCIs'@;
put 'NDIwOiJJU0VWRU4iLDQyMToiSVNPREQiLDQyMjoiTVJPVU5EIiw0MjM6IkVSRiIsNDI0OiJFUkZDIiw0MjU6IkJFU1NFTEoiLDQyNjoiQkVTU0VMSyIsNDI3OiJCRVNTRUxZIiw0Mjg6IkJFU1NFTEkiLDQyOToiWElSUiIsNDMwOiJYTlBWIiw0MzE6IlBSSUNFTUFUIiw0MzI6IllJRUxETUFU'@;
put 'Iiw0MzM6IklOVFJBVEUiLDQzNDoiUkVDRUlWRUQiLDQzNToiRElTQyIsNDM2OiJQUklDRURJU0MiLDQzNzoiWUlFTERESVNDIiw0Mzg6IlRCSUxMRVEiLDQzOToiVEJJTExQUklDRSIsNDQwOiJUQklMTFlJRUxEIiw0NDE6IlBSSUNFIiw0NDI6IllJRUxEIiw0NDM6IkRPTExBUkRFIiw0NDQ6'@;
put 'IkRPTExBUkZSIiw0NDU6Ik5PTUlOQUwiLDQ0NjoiRUZGRUNUIiw0NDc6IkNVTVBSSU5DIiw0NDg6IkNVTUlQTVQiLDQ0OToiRURBVEUiLDQ1MDoiRU9NT05USCIsNDUxOiJZRUFSRlJBQyIsNDUyOiJDT1VQREFZQlMiLDQ1MzoiQ09VUERBWVMiLDQ1NDoiQ09VUERBWVNOQyIsNDU1OiJDT1VQ'@;
put 'TkNEIiw0NTY6IkNPVVBOVU0iLDQ1NzoiQ09VUFBDRCIsNDU4OiJEVVJBVElPTiIsNDU5OiJNRFVSQVRJT04iLDQ2MDoiT0RETFBSSUNFIiw0NjE6Ik9ERExZSUVMRCIsNDYyOiJPRERGUFJJQ0UiLDQ2MzoiT0RERllJRUxEIiw0NjQ6IlJBTkRCRVRXRUVOIiw0NjU6IldFRUtOVU0iLDQ2Njoi'@;
put 'QU1PUkRFR1JDIiw0Njc6IkFNT1JMSU5DIiw0Njg6IkNPTlZFUlQiLDcyNDoiU0hFRVRKUyIsNDY5OiJBQ0NSSU5UIiw0NzA6IkFDQ1JJTlRNIiw0NzE6IldPUktEQVkiLDQ3MjoiTkVUV09SS0RBWVMiLDQ3MzoiR0NEIiw0NzQ6Ik1VTFRJTk9NSUFMIiw0NzU6IkxDTSIsNDc2OiJGVlNDSEVE'@;
put 'VUxFIiw0Nzc6IkNVQkVLUElNRU1CRVIiLDQ3ODoiQ1VCRVNFVCIsNDc5OiJDVUJFU0VUQ09VTlQiLDQ4MDoiSUZFUlJPUiIsNDgxOiJDT1VOVElGUyIsNDgyOiJTVU1JRlMiLDQ4MzoiQVZFUkFHRUlGIiw0ODQ6IkFWRVJBR0VJRlMifSxpaj17MjoxLDM6MSwxMDowLDE1OjEsMTY6MSwxNzox'@;
put 'LDE4OjEsMTk6MCwyMDoxLDIxOjEsMjI6MSwyMzoxLDI0OjEsMjU6MSwyNjoxLDI3OjIsMzA6MiwzMTozLDMyOjEsMzM6MSwzNDowLDM1OjAsMzg6MSwzOToyLDQwOjMsNDE6Myw0MjozLDQzOjMsNDQ6Myw0NTozLDQ3OjMsNDg6Miw1MzoxLDYxOjMsNjM6MCw2NTozLDY2OjMsNjc6MSw2ODox'@;
put 'LDY5OjEsNzA6MSw3MToxLDcyOjEsNzM6MSw3NDowLDc1OjEsNzY6MSw3NzoxLDc5OjIsODA6Miw4MzoxLDg1OjAsODY6MSw4OTowLDkwOjEsOTQ6MCw5NTowLDk3OjIsOTg6MSw5OToxLDEwMTozLDEwMjozLDEwNToxLDEwNjoxLDEwODoyLDExMToxLDExMjoxLDExMzoxLDExNDoxLDExNzoy'@;
put 'LDExODoxLDExOTo0LDEyMToxLDEyNjoxLDEyNzoxLDEyODoxLDEyOToxLDEzMDoxLDEzMToxLDEzMzoxLDEzNDoxLDEzNToxLDEzNjoyLDEzNzoyLDEzODoyLDE0MDoxLDE0MToxLDE0MjozLDE0Mzo0LDE0NDo0LDE2MToxLDE2MjoxLDE2MzoxLDE2NDoxLDE2NToyLDE3MjoxLDE3NToyLDE3'@;
put 'NjoyLDE3NzozLDE3ODoyLDE3OToxLDE4NDoxLDE4NjoxLDE4OTozLDE5MDoxLDE5NTozLDE5NjozLDE5NzoxLDE5ODoxLDE5OTozLDIwMToxLDIwNzo0LDIxMDozLDIxMToxLDIxMjoyLDIxMzoyLDIxNDoxLDIxNToxLDIyNTowLDIyOToxLDIzMDoxLDIzMToxLDIzMjoxLDIzMzoxLDIzNDox'@;
put 'LDIzNTozLDI0NDoxLDI0Nzo0LDI1MjoyLDI1NzoxLDI2MToxLDI3MToxLDI3Mzo0LDI3NDoyLDI3NToyLDI3NjoyLDI3NzozLDI3ODozLDI3OToxLDI4MDozLDI4MTozLDI4MjozLDI4MzoxLDI4NDoxLDI4NToyLDI4Njo0LDI4NzozLDI4ODoyLDI4OTo0LDI5MDozLDI5MTozLDI5MjozLDI5'@;
put 'Mzo0LDI5NDoxLDI5NTozLDI5NjoxLDI5NzozLDI5ODoxLDI5OToyLDMwMDozLDMwMTozLDMwMjo0LDMwMzoyLDMwNDoyLDMwNToyLDMwNjoyLDMwNzoyLDMwODoyLDMwOTozLDMxMDoyLDMxMToyLDMxMjoyLDMxMzoyLDMxNDoyLDMxNToyLDMxNjo0LDMyNToyLDMyNjoyLDMyNzoyLDMyODoy'@;
put 'LDMzMToyLDMzMjoyLDMzNzoyLDM0MjoxLDM0MzoxLDM0NjoyLDM0NzoxLDM1MDo0LDM1MTozLDM1MjoxLDM1MzoyLDM2MDoxLDM2ODoxLDM2OToxLDM3MDoxLDM3MToxLDM3MjoxLDM3MzoxLDM3NDoxLDM3NToxLDM3NjoxLDM3NzoxLDM3ODoxLDM4MjozLDM4NToxLDM5MjoxLDM5MzoxLDM5'@;
put 'NjoyLDM5NzoyLDM5ODoyLDM5OToxLDQwMDoxLDQwMToxLDQwMjoxLDQwMzoxLDQwNDoxLDQwNToxLDQwNjoxLDQwNzoxLDQwODoxLDQwOToxLDQxMDoxLDQxNDo0LDQxNToxLDQxNjoxLDQxNzoyLDQyMDoxLDQyMToxLDQyMjoyLDQyNDoxLDQyNToyLDQyNjoyLDQyNzoyLDQyODoyLDQzMDoz'@;
put 'LDQzODozLDQzOTozLDQ0MDozLDQ0MzoyLDQ0NDoyLDQ0NToyLDQ0NjoyLDQ0Nzo2LDQ0ODo2LDQ0OToyLDQ1MDoyLDQ2NDoyLDQ2ODozLDQ3NjoyLDQ3OToxLDQ4MDoyLDY1NTM1OjB9LHR5PXsiX3hsZm4uQUNPVCI6IkFDT1QiLCJfeGxmbi5BQ09USCI6IkFDT1RIIiwiX3hsZm4uQUdHUkVH'@;
put 'QVRFIjoiQUdHUkVHQVRFIiwiX3hsZm4uQVJBQklDIjoiQVJBQklDIiwiX3hsZm4uQVZFUkFHRUlGIjoiQVZFUkFHRUlGIiwiX3hsZm4uQVZFUkFHRUlGUyI6IkFWRVJBR0VJRlMiLCJfeGxmbi5CQVNFIjoiQkFTRSIsIl94bGZuLkJFVEEuRElTVCI6IkJFVEEuRElTVCIsIl94bGZuLkJFVEEu'@;
put 'SU5WIjoiQkVUQS5JTlYiLCJfeGxmbi5CSU5PTS5ESVNUIjoiQklOT00uRElTVCIsIl94bGZuLkJJTk9NLkRJU1QuUkFOR0UiOiJCSU5PTS5ESVNULlJBTkdFIiwiX3hsZm4uQklOT00uSU5WIjoiQklOT00uSU5WIiwiX3hsZm4uQklUQU5EIjoiQklUQU5EIiwiX3hsZm4uQklUTFNISUZUIjoi'@;
put 'QklUTFNISUZUIiwiX3hsZm4uQklUT1IiOiJCSVRPUiIsIl94bGZuLkJJVFJTSElGVCI6IkJJVFJTSElGVCIsIl94bGZuLkJJVFhPUiI6IkJJVFhPUiIsIl94bGZuLkNFSUxJTkcuTUFUSCI6IkNFSUxJTkcuTUFUSCIsIl94bGZuLkNFSUxJTkcuUFJFQ0lTRSI6IkNFSUxJTkcuUFJFQ0lTRSIs'@;
put 'Il94bGZuLkNISVNRLkRJU1QiOiJDSElTUS5ESVNUIiwiX3hsZm4uQ0hJU1EuRElTVC5SVCI6IkNISVNRLkRJU1QuUlQiLCJfeGxmbi5DSElTUS5JTlYiOiJDSElTUS5JTlYiLCJfeGxmbi5DSElTUS5JTlYuUlQiOiJDSElTUS5JTlYuUlQiLCJfeGxmbi5DSElTUS5URVNUIjoiQ0hJU1EuVEVT'@;
put 'VCIsIl94bGZuLkNPTUJJTkEiOiJDT01CSU5BIiwiX3hsZm4uQ09OQ0FUIjoiQ09OQ0FUIiwiX3hsZm4uQ09ORklERU5DRS5OT1JNIjoiQ09ORklERU5DRS5OT1JNIiwiX3hsZm4uQ09ORklERU5DRS5UIjoiQ09ORklERU5DRS5UIiwiX3hsZm4uQ09UIjoiQ09UIiwiX3hsZm4uQ09USCI6IkNP'@;
put 'VEgiLCJfeGxmbi5DT1VOVElGUyI6IkNPVU5USUZTIiwiX3hsZm4uQ09WQVJJQU5DRS5QIjoiQ09WQVJJQU5DRS5QIiwiX3hsZm4uQ09WQVJJQU5DRS5TIjoiQ09WQVJJQU5DRS5TIiwiX3hsZm4uQ1NDIjoiQ1NDIiwiX3hsZm4uQ1NDSCI6IkNTQ0giLCJfeGxmbi5EQVlTIjoiREFZUyIsIl94'@;
put 'bGZuLkRFQ0lNQUwiOiJERUNJTUFMIiwiX3hsZm4uRUNNQS5DRUlMSU5HIjoiRUNNQS5DRUlMSU5HIiwiX3hsZm4uRVJGLlBSRUNJU0UiOiJFUkYuUFJFQ0lTRSIsIl94bGZuLkVSRkMuUFJFQ0lTRSI6IkVSRkMuUFJFQ0lTRSIsIl94bGZuLkVYUE9OLkRJU1QiOiJFWFBPTi5ESVNUIiwiX3hs'@;
put 'Zm4uRi5ESVNUIjoiRi5ESVNUIiwiX3hsZm4uRi5ESVNULlJUIjoiRi5ESVNULlJUIiwiX3hsZm4uRi5JTlYiOiJGLklOViIsIl94bGZuLkYuSU5WLlJUIjoiRi5JTlYuUlQiLCJfeGxmbi5GLlRFU1QiOiJGLlRFU1QiLCJfeGxmbi5GSUxURVJYTUwiOiJGSUxURVJYTUwiLCJfeGxmbi5GTE9P'@;
put 'Ui5NQVRIIjoiRkxPT1IuTUFUSCIsIl94bGZuLkZMT09SLlBSRUNJU0UiOiJGTE9PUi5QUkVDSVNFIiwiX3hsZm4uRk9SRUNBU1QuRVRTIjoiRk9SRUNBU1QuRVRTIiwiX3hsZm4uRk9SRUNBU1QuRVRTLkNPTkZJTlQiOiJGT1JFQ0FTVC5FVFMuQ09ORklOVCIsIl94bGZuLkZPUkVDQVNULkVU'@;
put 'Uy5TRUFTT05BTElUWSI6IkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSIsIl94bGZuLkZPUkVDQVNULkVUUy5TVEFUIjoiRk9SRUNBU1QuRVRTLlNUQVQiLCJfeGxmbi5GT1JFQ0FTVC5MSU5FQVIiOiJGT1JFQ0FTVC5MSU5FQVIiLCJfeGxmbi5GT1JNVUxBVEVYVCI6IkZPUk1VTEFURVhUIiwi'@;
put 'X3hsZm4uR0FNTUEiOiJHQU1NQSIsIl94bGZuLkdBTU1BLkRJU1QiOiJHQU1NQS5ESVNUIiwiX3hsZm4uR0FNTUEuSU5WIjoiR0FNTUEuSU5WIiwiX3hsZm4uR0FNTUFMTi5QUkVDSVNFIjoiR0FNTUFMTi5QUkVDSVNFIiwiX3hsZm4uR0FVU1MiOiJHQVVTUyIsIl94bGZuLkhZUEdFT00uRElT'@;
put 'VCI6IkhZUEdFT00uRElTVCIsIl94bGZuLklGRVJST1IiOiJJRkVSUk9SIiwiX3hsZm4uSUZOQSI6IklGTkEiLCJfeGxmbi5JRlMiOiJJRlMiLCJfeGxmbi5JTUNPU0giOiJJTUNPU0giLCJfeGxmbi5JTUNPVCI6IklNQ09UIiwiX3hsZm4uSU1DU0MiOiJJTUNTQyIsIl94bGZuLklNQ1NDSCI6'@;
put 'IklNQ1NDSCIsIl94bGZuLklNU0VDIjoiSU1TRUMiLCJfeGxmbi5JTVNFQ0giOiJJTVNFQ0giLCJfeGxmbi5JTVNJTkgiOiJJTVNJTkgiLCJfeGxmbi5JTVRBTiI6IklNVEFOIiwiX3hsZm4uSVNGT1JNVUxBIjoiSVNGT1JNVUxBIiwiX3hsZm4uSVNPLkNFSUxJTkciOiJJU08uQ0VJTElORyIs'@;
put 'Il94bGZuLklTT1dFRUtOVU0iOiJJU09XRUVLTlVNIiwiX3hsZm4uTE9HTk9STS5ESVNUIjoiTE9HTk9STS5ESVNUIiwiX3hsZm4uTE9HTk9STS5JTlYiOiJMT0dOT1JNLklOViIsIl94bGZuLk1BWElGUyI6Ik1BWElGUyIsIl94bGZuLk1JTklGUyI6Ik1JTklGUyIsIl94bGZuLk1PREUuTVVM'@;
put 'VCI6Ik1PREUuTVVMVCIsIl94bGZuLk1PREUuU05HTCI6Ik1PREUuU05HTCIsIl94bGZuLk1VTklUIjoiTVVOSVQiLCJfeGxmbi5ORUdCSU5PTS5ESVNUIjoiTkVHQklOT00uRElTVCIsIl94bGZuLk5FVFdPUktEQVlTLklOVEwiOiJORVRXT1JLREFZUy5JTlRMIiwiX3hsZm4uTklHQklOT00i'@;
put 'OiJOSUdCSU5PTSIsIl94bGZuLk5PUk0uRElTVCI6Ik5PUk0uRElTVCIsIl94bGZuLk5PUk0uSU5WIjoiTk9STS5JTlYiLCJfeGxmbi5OT1JNLlMuRElTVCI6Ik5PUk0uUy5ESVNUIiwiX3hsZm4uTk9STS5TLklOViI6Ik5PUk0uUy5JTlYiLCJfeGxmbi5OVU1CRVJWQUxVRSI6Ik5VTUJFUlZB'@;
put 'TFVFIiwiX3hsZm4uUERVUkFUSU9OIjoiUERVUkFUSU9OIiwiX3hsZm4uUEVSQ0VOVElMRS5FWEMiOiJQRVJDRU5USUxFLkVYQyIsIl94bGZuLlBFUkNFTlRJTEUuSU5DIjoiUEVSQ0VOVElMRS5JTkMiLCJfeGxmbi5QRVJDRU5UUkFOSy5FWEMiOiJQRVJDRU5UUkFOSy5FWEMiLCJfeGxmbi5Q'@;
put 'RVJDRU5UUkFOSy5JTkMiOiJQRVJDRU5UUkFOSy5JTkMiLCJfeGxmbi5QRVJNVVRBVElPTkEiOiJQRVJNVVRBVElPTkEiLCJfeGxmbi5QSEkiOiJQSEkiLCJfeGxmbi5QT0lTU09OLkRJU1QiOiJQT0lTU09OLkRJU1QiLCJfeGxmbi5RVUFSVElMRS5FWEMiOiJRVUFSVElMRS5FWEMiLCJfeGxm'@;
put 'bi5RVUFSVElMRS5JTkMiOiJRVUFSVElMRS5JTkMiLCJfeGxmbi5RVUVSWVNUUklORyI6IlFVRVJZU1RSSU5HIiwiX3hsZm4uUkFOSy5BVkciOiJSQU5LLkFWRyIsIl94bGZuLlJBTksuRVEiOiJSQU5LLkVRIiwiX3hsZm4uUlJJIjoiUlJJIiwiX3hsZm4uU0VDIjoiU0VDIiwiX3hsZm4uU0VD'@;
put 'SCI6IlNFQ0giLCJfeGxmbi5TSEVFVCI6IlNIRUVUIiwiX3hsZm4uU0hFRVRTIjoiU0hFRVRTIiwiX3hsZm4uU0tFVy5QIjoiU0tFVy5QIiwiX3hsZm4uU1RERVYuUCI6IlNUREVWLlAiLCJfeGxmbi5TVERFVi5TIjoiU1RERVYuUyIsIl94bGZuLlNVTUlGUyI6IlNVTUlGUyIsIl94bGZuLlNX'@;
put 'SVRDSCI6IlNXSVRDSCIsIl94bGZuLlQuRElTVCI6IlQuRElTVCIsIl94bGZuLlQuRElTVC4yVCI6IlQuRElTVC4yVCIsIl94bGZuLlQuRElTVC5SVCI6IlQuRElTVC5SVCIsIl94bGZuLlQuSU5WIjoiVC5JTlYiLCJfeGxmbi5ULklOVi4yVCI6IlQuSU5WLjJUIiwiX3hsZm4uVC5URVNUIjoi'@;
put 'VC5URVNUIiwiX3hsZm4uVEVYVEpPSU4iOiJURVhUSk9JTiIsIl94bGZuLlVOSUNIQVIiOiJVTklDSEFSIiwiX3hsZm4uVU5JQ09ERSI6IlVOSUNPREUiLCJfeGxmbi5WQVIuUCI6IlZBUi5QIiwiX3hsZm4uVkFSLlMiOiJWQVIuUyIsIl94bGZuLldFQlNFUlZJQ0UiOiJXRUJTRVJWSUNFIiwi'@;
put 'X3hsZm4uV0VJQlVMTC5ESVNUIjoiV0VJQlVMTC5ESVNUIiwiX3hsZm4uV09SS0RBWS5JTlRMIjoiV09SS0RBWS5JTlRMIiwiX3hsZm4uWE9SIjoiWE9SIiwiX3hsZm4uWi5URVNUIjoiWi5URVNUIn07ZnVuY3Rpb24gY1MoUyl7cmV0dXJuIm9mOiI9PVMuc2xpY2UoMCwzKSYmKFM9Uy5zbGlj'@;
put 'ZSgzKSksNjE9PVMuY2hhckNvZGVBdCgwKSYmNjE9PShTPVMuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkmJihTPVMuc2xpY2UoMSkpLChTPShTPShTPVMucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAt'@;
put 'OV0rKT8pXF0vZyxmdW5jdGlvbihPLGspe3JldHVybiBrLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxhY2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gWjQoUyl7cmV0dXJuKCJvZjo9IitTLnJl'@;
put 'cGxhY2UoeTIsIiQxWy4kMiQzJDQkNV0iKS5yZXBsYWNlKC9cXTpcWy9nLCI6IikpLnJlcGxhY2UoLzsvZywifCIpLnJlcGxhY2UoLywvZywiOyIpfWZ1bmN0aW9uIG55KFMpe3ZhciBPPVMuc3BsaXQoIjoiKTtyZXR1cm5bT1swXS5zcGxpdCgiLiIpWzBdLE9bMF0uc3BsaXQoIi4iKVsxXSso'@;
put 'Ty5sZW5ndGg+MT8iOiIrKE9bMV0uc3BsaXQoIi4iKVsxXXx8T1sxXS5zcGxpdCgiLiIpWzBdKToiIildfWZ1bmN0aW9uIHlEKFMpe3JldHVybiBTLnJlcGxhY2UoL1wuLywiISIpfXZhciBsOD17fSxjOD17fTtYYS5XUz1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZp'@;
put 'Y2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvb2ZmaWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiXTt2YXIgcTM9dHlwZW9mIE1hcDwidSI7ZnVuY3Rpb24gdVMoUyxPLGssSyl7dmFyIGVlPTAsb2U9'@;
put 'Uy5sZW5ndGg7aWYoSyl7aWYocTM/Sy5oYXMoTyk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEssTykpZm9yKHZhciBtZT1xMz9LLmdldChPKTpLW09dO2VlPG1lLmxlbmd0aDsrK2VlKWlmKFNbbWVbZWVdXS50PT09TyYmKCFTW21lW2VlXV0uciYmIWt8fFNbbWVbZWVd'@;
put 'XS5yPT1rKSlyZXR1cm4gUy5Db3VudCsrLG1lW2VlXX1lbHNlIGZvcig7ZWU8b2U7KytlZSlpZihTW2VlXS50PT09TyYmKCFTW2VlXS5yJiYha3x8U1tlZV0ucj09aykpcmV0dXJuIFMuQ291bnQrKyxlZTtyZXR1cm4gU1tvZV09e3Q6TyxyOmt9LFMuQ291bnQrKyxTLlVuaXF1ZSsrLEsmJihx'@;
put 'Mz8oSy5oYXMoTyl8fEsuc2V0KE8sW10pLEsuZ2V0KE8pLnB1c2gob2UpKTooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEssTyl8fChLW09dPVtdKSxLW09dLnB1c2gob2UpKSksb2V9ZnVuY3Rpb24gdTgoUyxPKXt2YXIgaz17bWluOlMrMSxtYXg6UysxfSxLPXhjO2lm'@;
put 'KCFPKXJldHVybiBPO3ZhciBlZT0tMTtyZXR1cm4gTy5hdXRvJiYoay5iZXN0Rml0PTEsTy5iZXN0d2lkdGgmJihlZT1PLmJlc3R3aWR0aCksZGVsZXRlIE8uYmVzdHdpZHRoKSxudWxsIT1PLndweD9lZT1DNShPLndweCk6bnVsbCE9Ty53Y2g/ZWU9Ty53Y2g6bnVsbCE9Ty53aWR0aCYmKGsu'@;
put 'Y3VzdG9tV2lkdGg9MSksZWU+LTE/KGsud2lkdGg9T2YoZWUpLGsuY3VzdG9tV2lkdGg9MSk6bnVsbCE9Ty53aWR0aCYmKGsud2lkdGg9Ty53aWR0aCksTy5oaWRkZW4mJihrLmhpZGRlbj0hMCksay5iZXN0Rml0JiZkZWxldGUgay5jdXN0b21XaWR0aCx4Yz1LLG51bGwhPU8ubGV2ZWwmJihr'@;
put 'Lm91dGxpbmVMZXZlbD1rLmxldmVsPU8ubGV2ZWwpLG51bGwhPU8uc3R5bGUmJihrLnN0eWxlPU8uc3R5bGUpLGt9ZnVuY3Rpb24gZFMoUyxPLGspe3ZhciBLPVNvKFNbIiFyZWYiXSksZWU9MCxvZT1TWyIhbWVyZ2VzIl18fFtdLG1lPUFycmF5LmlzQXJyYXkoUyk7ZTpmb3IodmFyIHBlPTA7'@;
put 'cGU8PUsuZS5yOysrcGUpe2Zvcih2YXIgYmU9MDtiZTxvZS5sZW5ndGg7KytiZSlpZihvZVtiZV0ucy5yPD1wZSYmcGU8PW9lW2JlXS5lLnImJm9lW2JlXS5zLmM8PWsmJms8PW9lW2JlXS5lLmMpY29udGludWUgZTt2YXIgUGU9bWU/KFNbcGVdfHxbXSlba106U1txaSh7cjpwZSxjOmt9KV07'@;
put 'aWYoUGUpe3ZhciBWZT0xO2lmKFBlLnMmJihWZT1NQyhQZS5zKS9TQy5DYWxpYnJpWzEyXXx8MSksUGUudyllZT1NYXRoLm1heChlZSxQZS53Lmxlbmd0aCpWZSk7ZWxzZSBzd2l0Y2goUGUudCl7Y2FzZSJiIjpjYXNlImUiOmVlPU1hdGgubWF4KGVlLDUqVmUpO2JyZWFrO2Nhc2UicyI6ZWU9'@;
put 'TWF0aC5tYXgoZWUsUGUudi5sZW5ndGgqVmUqMS4yfDApO2JyZWFrO2Nhc2UibiI6dDUoUGUsUGUudiksZWU9TWF0aC5tYXgoZWUsU3RyaW5nKFBlLnd8fFBlLnYpLmxlbmd0aCpWZSk7YnJlYWs7Y2FzZSJkIjplZT1NYXRoLm1heChlZSw4KlZlKX19fWVlPDEmJihlZT0xKSxPLmJlc3R3aWR0'@;
put 'aD1lZX1mdW5jdGlvbiBKMyhTLE8pe2lmKFMpe3ZhciBrPVsuNywuNywuNzUsLjc1LC4zLC4zXTsieGxtbCI9PU8mJihrPVsxLDEsMSwxLC41LC41XSksbnVsbD09Uy5sZWZ0JiYoUy5sZWZ0PWtbMF0pLG51bGw9PVMucmlnaHQmJihTLnJpZ2h0PWtbMV0pLG51bGw9PVMudG9wJiYoUy50b3A9'@;
put 'a1syXSksbnVsbD09Uy5ib3R0b20mJihTLmJvdHRvbT1rWzNdKSxudWxsPT1TLmhlYWRlciYmKFMuaGVhZGVyPWtbNF0pLG51bGw9PVMuZm9vdGVyJiYoUy5mb290ZXI9a1s1XSl9fWZ1bmN0aW9uIGZTKFMsTyl7Zm9yKHZhciBrPVJlKE8pLEs9MDtLPFMubGVuZ3RoOysrSyl7dmFyIGVlPSEw'@;
put 'LG9lPVNbS107aWYob2UmJmsubGVuZ3RoPT1SZShvZSkubGVuZ3RoJiYoay5mb3JFYWNoKGZ1bmN0aW9uKG1lKXtpZihlZSl7aWYobnVsbD09PU9bbWVdIT0obnVsbD09PW9lW21lXSkpcmV0dXJuIHZvaWQoZWU9ITEpO2lmKCJvYmplY3QiPT10eXBlb2YgT1ttZV0paWYoWyJjb2xvciIsImZn'@;
put 'Q29sb3IiLCJiZ0NvbG9yIl0uaW5kZXhPZihtZSk+LTEpe2lmKHNoKE9bbWVdLG9lW21lXSkpcmV0dXJuIHZvaWQoZWU9ITEpfWVsc2V7aWYoIShbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmluZGV4T2YobWUpPi0xKSlyZXR1cm4gdm9pZChlZT0hMSk7aWYoZ2soT1ttZV0sb2Vb'@;
put 'bWVdKSlyZXR1cm4gdm9pZChlZT0hMSl9aWYoT1ttZV0hPW9lW21lXSlyZXR1cm4gdm9pZChlZT0hMSl9fSksZWUpKXJldHVybiBLfXJldHVybiBTW1MubGVuZ3RoXT1KdChPKSxTLmxlbmd0aC0xfWZ1bmN0aW9uIHMwKFMsTyxrLEspe3ZhciBlZT1LLnJldnNzZltudWxsIT1rLno/ay56OiJH'@;
put 'ZW5lcmFsIl0sb2U9NjAsbWU9Uy5sZW5ndGg7aWYobnVsbD09ZWUmJksuc3NmKWZvcig7b2U8MzkyOysrb2UpaWYobnVsbD09Sy5zc2Zbb2VdKXtBLmxvYWQoay56LG9lKSxLLnNzZltvZV09ay56LEsucmV2c3NmW2suel09ZWU9b2U7YnJlYWt9dmFyIHBlPTAsYmU9MCxQZT0wLFZlPTA7aWYo'@;
put 'Sy5jZWxsU3R5bGVzKXtpZihrLnMpe2lmKEsuRm9udHMpe2sucy5jb2xvcnx8KGsucy5jb2xvcj17dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9KTtmb3IodmFyIFllPShrLnMuYm9sZD8xOjApfChrLnMuaXRhbGljPzI6MCl8KGsucy5zdHJpa2U/NDowKXwoay5zLnNoYWRvdz84OjApO3BlPEsuRm9u'@;
put 'dHMubGVuZ3RoOysrcGUpe3ZhciBldD1LLkZvbnRzW3BlXTtpZihudWxsPT1ldC5mb250aGFzaCYmKGV0LmZvbnRoYXNoPShldC5ib2xkPzE6MCl8KGV0Lml0YWxpYz8yOjApfChldC5zdHJpa2U/NDowKXwoZXQuc2hhZG93Pzg6MCkpLCEoWWUhPWV0LmZvbnRoYXNofHwhIWsucy5jb2xvciE9'@;
put 'ISFldC5jb2xvcnx8ay5zLnZhbGlnbiE9ZXQudmFsaWdufHwoay5zLnN6fHxldC5zeikmJihrLnMuc3p8fDEyKSE9KGV0LnN6fHwxMil8fGsucy5uYW1lJiZrLnMubmFtZSE9ZXQubmFtZXx8KGsucy51bmRlcmxpbmV8fDApIT0oZXQudW5kZXJsaW5lfHwwKXx8ay5zLmNvbG9yJiZzaChrLnMu'@;
put 'Y29sb3IsZXQuY29sb3IpKSlicmVha31wZT09Sy5Gb250cy5sZW5ndGgmJihLLkZvbnRzLnB1c2goe3N6Omsucy5zenx8MTIsY29sb3I6ay5zLmNvbG9yfHx7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6ay5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6ay5zLmZhbWlseXx8MixzY2hlbWU6'@;
put 'ay5zLnNjaGVtZSxib2xkOmsucy5ib2xkLGl0YWxpYzprLnMuaXRhbGljLHN0cmlrZTprLnMuc3RyaWtlLHNoYWRvdzprLnMuc2hhZG93LHZhbGlnbjprLnMudmFsaWduLHVuZGVybGluZTprLnMudW5kZXJsaW5lfSksMT09Sy5Gb250cy5sZW5ndGgmJkk0KEsuRm9udHNbMF0pKX1pZihLLkZp'@;
put 'bGxzKXtmb3IoO2JlPEsuRmlsbHMubGVuZ3RoOysrYmUpe3ZhciBjdD1LLkZpbGxzW2JlXTtpZighIWsucy5zdG9wcz09ISFjdC5zdG9wcyl7aWYoay5zLnN0b3BzKXtpZihrLnMuYW5nbGUhPWN0LmFuZ2xlKWNvbnRpbnVlO3ZhciBUdD0hMDtpZihrLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlv'@;
put 'bihEdCxPdCl7c2goRHQsY3Quc3RvcHNbT3RdKSYmKFR0PSExKSxEdC52IT1jdC5zdG9wc1tPdF0udiYmKFR0PSExKX0pLCFUdCljb250aW51ZX1lbHNle2lmKG51bGw9PWsucy5wYXR0ZXJuVHlwZSYmay5zLmZnQ29sb3ImJihrLnMucGF0dGVyblR5cGU9InNvbGlkIiksbnVsbD09ay5zLnBh'@;
put 'dHRlcm5UeXBlKWJyZWFrO2lmKGsucy5wYXR0ZXJuVHlwZSE9Y3QucGF0dGVyblR5cGV8fHNoKGsucy5mZ0NvbG9yLGN0LmZnQ29sb3IpfHxzaChrLnMuYmdDb2xvcixjdC5iZ0NvbG9yKSljb250aW51ZX1icmVha319aWYoYmU9PUsuRmlsbHMubGVuZ3RoKXt2YXIgaXQ9e307ay5zLnN0b3Bz'@;
put 'PyhudWxsIT1rLnMuYW5nbGUmJihpdC5hbmdsZT1rLnMuYW5nbGUpLGl0LnN0b3BzPVtdLGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKER0KXtpdC5zdG9wcy5wdXNoKEp0KER0KSl9KSk6aXQ9e3BhdHRlcm5UeXBlOmsucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOmsucy5mZ0NvbG9yLGJnQ29s'@;
put 'b3I6ay5zLmJnQ29sb3J9LEsuRmlsbHMucHVzaChpdCl9fWlmKEsuQm9yZGVycyl7Zm9yKDtQZTxLLkJvcmRlcnMubGVuZ3RoOysrUGUpe3ZhciBidD1LLkJvcmRlcnNbUGVdLEJ0PSJ0b3AiO2lmKGsuc1tCdF0pe2lmKCFidFtCdF18fGsuc1tCdF0uc3R5bGUhPWJ0W0J0XS5zdHlsZXx8c2go'@;
put 'ay5zW0J0XS5jb2xvcixidFtCdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbQnRdKWNvbnRpbnVlO2lmKGsuc1tCdD0iYm90dG9tIl0pe2lmKCFidFtCdF18fGsuc1tCdF0uc3R5bGUhPWJ0W0J0XS5zdHlsZXx8c2goay5zW0J0XS5jb2xvcixidFtCdF0uY29sb3IpKWNvbnRp'@;
put 'bnVlfWVsc2UgaWYobnVsbCE9YnRbQnRdKWNvbnRpbnVlO2lmKGsuc1tCdD0ibGVmdCJdKXtpZighYnRbQnRdfHxrLnNbQnRdLnN0eWxlIT1idFtCdF0uc3R5bGV8fHNoKGsuc1tCdF0uY29sb3IsYnRbQnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W0J0XSljb250aW51ZTtp'@;
put 'ZihrLnNbQnQ9InJpZ2h0Il0pe2lmKCFidFtCdF18fGsuc1tCdF0uc3R5bGUhPWJ0W0J0XS5zdHlsZXx8c2goay5zW0J0XS5jb2xvcixidFtCdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbQnRdKWNvbnRpbnVlO2JyZWFrfVBlPT1LLkJvcmRlcnMubGVuZ3RoJiZLLkJvcmRl'@;
put 'cnMucHVzaCh7dG9wOmsucy50b3AmJkp0KGsucy50b3ApfHx2b2lkIDAsYm90dG9tOmsucy5ib3R0b20mJkp0KGsucy5ib3R0b20pfHx2b2lkIDAsbGVmdDprLnMubGVmdCYmSnQoay5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6ay5zLnJpZ2h0JiZKdChrLnMucmlnaHQpfHx2b2lkIDB9KX1pZihP'@;
put 'JiZrLnMuc3R5bGUmJiJOb3JtYWwiIT09ay5zLnN0eWxlKXtmb3IoVmU9MTtWZTxPLmxlbmd0aCYmT1tWZV0ubmFtZSE9ay5zLnN0eWxlOysrVmUpO1ZlPT1PLmxlbmd0aCYmTy5wdXNoKHtuYW1lOmsucy5zdHlsZSxudW1GbXRJZDplZSxmb250SWQ6cGUsZmlsbElkOmJlLGJvcmRlcklkOlBl'@;
put 'fSl9fWZvcihvZT0wO29lIT1tZTsrK29lKWlmKFNbb2VdLm51bUZtdElkPT1lZSYmU1tvZV0uZm9udElkPT1wZSYmU1tvZV0uZmlsbElkPT1iZSYmU1tvZV0uYm9yZGVySWQ9PVBlJiZTW29lXS54ZklkPT1WZSl7aWYoay5zJiZrLnMuYWxpZ25tZW50KXtpZighU1tvZV0uYWxpZ25tZW50KWNv'@;
put 'bnRpbnVlO2lmKGsucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9U1tvZV0uYWxpZ25tZW50Lmhvcml6b250YWx8fGsucy5hbGlnbm1lbnQudmVydGljYWwhPVNbb2VdLmFsaWdubWVudC52ZXJ0aWNhbHx8ay5zLmFsaWdubWVudC53cmFwVGV4dCE9U1tvZV0uYWxpZ25tZW50LndyYXBUZXh0fHxr'@;
put 'LnMuYWxpZ25tZW50LnNocmlua1RvRml0IT1TW29lXS5hbGlnbm1lbnQuc2hyaW5rVG9GaXR8fGsucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT1TW29lXS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHxrLnMuYWxpZ25tZW50LmluZGVudCE9U1tvZV0uYWxpZ25tZW50LmluZGVudCljb250aW51'@;
put 'ZX1lbHNlIGlmKFNbb2VdLmFsaWdubWVudCljb250aW51ZTtpZihrLnMpe2lmKCEhay5zLmhpZGRlbj09KCFTW29lXS5wcm90ZWN0aW9ufHwhU1tvZV0ucHJvdGVjdGlvbi5oaWRkZW4pfHwhIWsucy5lZGl0YWJsZT09KCFTW29lXS5wcm90ZWN0aW9ufHwhU1tvZV0ucHJvdGVjdGlvbi5lZGl0'@;
put 'YWJsZSkpY29udGludWV9ZWxzZSBpZihTW29lXS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBvZX19ZWxzZSBmb3Iob2U9MDtvZSE9bWU7KytvZSlpZihTW29lXS5udW1GbXRJZD09PWVlKXJldHVybiBvZTtyZXR1cm4gU1ttZV09e251bUZtdElkOmVlLGZvbnRJZDpwZSxmaWxsSWQ6YmUs'@;
put 'Ym9yZGVySWQ6UGUseGZJZDpWZSxhcHBseU51bWJlckZvcm1hdDoxfSxwZT4wJiYoU1ttZV0uYXBwbHlGb250PTEpLGJlPjAmJihTW21lXS5hcHBseUZpbGw9MSksUGU+MCYmKFNbbWVdLmFwcGx5Qm9yZGVyPTEpLCFPJiZrLnMmJmsucy5zdHlsZSYmIk5vcm1hbCIhPWsucy5zdHlsZSYmKFNb'@;
put 'bWVdLnN0eWxlPWsucy5zdHlsZSksay5zJiZrLnMuYWxpZ25tZW50JiYoU1ttZV0uYWxpZ25tZW50PXt9LFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwid3JhcFRleHQiLCJzaHJpbmtUb0ZpdCIsImluZGVudCIsInRleHRSb3RhdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oRHQpe251bGwhPWsu'@;
put 'cy5hbGlnbm1lbnRbRHRdJiYoU1ttZV0uYWxpZ25tZW50W0R0XT1rLnMuYWxpZ25tZW50W0R0XSl9KSksay5zJiZrLnMuaGlkZGVuJiYoU1ttZV0ucHJvdGVjdGlvbnx8KFNbbWVdLnByb3RlY3Rpb249e30pLFNbbWVdLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxrLnMmJmsucy5lZGl0YWJsZSYm'@;
put 'KFNbbWVdLnByb3RlY3Rpb258fChTW21lXS5wcm90ZWN0aW9uPXt9KSxTW21lXS5wcm90ZWN0aW9uLmVkaXRhYmxlPSEwKSxtZX1mdW5jdGlvbiBRMyhTLE8sayxLLGVlLG9lLG1lLHBlKXsiZCI9PT1TLnQmJiJzdHJpbmciPT10eXBlb2YgUy52JiYoUy52PU5lKFMudikpO3RyeXtvZS5jZWxs'@;
put 'TkYmJihTLno9QS5fdGFibGVbT10pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9aWYoKCFvZXx8ITEhPT1vZS5jZWxsVGV4dCkmJiJ6IiE9Uy50KXRyeXtpZihudWxsPT1BLl90YWJsZVtPXSYmQS5sb2FkKGxlW09dfHwiR2VuZXJhbCIsTyksImUiPT09Uy50KVMudz1TLnd8fENjW1Mu'@;
put 'dl07ZWxzZSBpZigwPT09TylpZigibiI9PT1TLnQpUy53PSgwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpO2Vsc2UgaWYoImQiPT09Uy50KXt2YXIgYmU9SmUoUy52KTtTLnc9KDB8YmUpPT09YmU/QS5fZ2VuZXJhbF9pbnQoYmUpOkEuX2dlbmVy'@;
put 'YWxfbnVtKGJlKX1lbHNle2lmKHZvaWQgMD09PVMudilyZXR1cm4iIjtTLnc9QS5fZ2VuZXJhbChTLnYsYzgpfWVsc2UgUy53PUEuZm9ybWF0KE8sImQiPT09Uy50P0plKFMudik6Uy52LGM4KX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfWlmKG9lLmNlbGxTdHlsZXMmJnBlKXtpZihT'@;
put 'LnM9e30sbnVsbCE9ayYmcGUuRmlsbHMpdHJ5e1B0KFMucyxwZS5GaWxsc1trXSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZihudWxsIT1LJiZwZS5Gb250cyl0cnl7UHQoUy5zLHBlLkZvbnRzW0tdKX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfWlmKG51bGwhPWVlJiZw'@;
put 'ZS5Cb3JkZXJzKXRyeXtQdChTLnMscGUuQm9yZGVyc1tlZV0pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9fX1mdW5jdGlvbiBiRChTLE8sayl7aWYoUyYmU1siIXJlZiJdKXt2YXIgSz1zcyhTWyIhcmVmIl0pO2lmKEsuZS5jPEsucy5jfHxLLmUucjxLLnMucil0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkJhZCByYW5nZSAoIitrKyIpOiAiK1NbIiFyZWYiXSl9fXZhciBkOD0vPCg/Olx3Oik/bWVyZ2VDZWxsIHJlZj0iW0EtWjAtOTpdKyJccypbXC9dPz4vZyxfRD0vPCg/Olx3KzopP3NoZWV0RGF0YVtePl0qPihbXHNcU10qKTxcLyg/Olx3KzopP3NoZWV0RGF0YT4vLGdTPS88KD86XHc6'@;
put 'KT9oeXBlcmxpbmsgW14+XSo+L2dtLHJ5PS8iKFx3KjpcdyopIi8sYWo9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyx3RD0vPCg/Olx3Oik/Y29udHJvbFxiW14+XSpbXC9dPz4vZyxzaj0vPCg/Olx3Oik/YXV0b0ZpbHRlcltePl0qKFtcL118PihbXHNcU10qKTxcLyg/Olx3Oik/YXV0'@;
put 'b0ZpbHRlcik+L2csQ0Q9LzwoPzpcdzopP3BhZ2VNYXJnaW5zW14+XSpcLz4vZyxTRD0vPCg/Olx3Oik/c2hlZXRQclxiKD86W14+YS16XVtePl0qKT9cLz4vLE1EPS88KD86XHc6KT9zaGVldFByb3RlY3Rpb25cYig/OltePmEtel1bXj5dKik/XC8+Lyx4RD0vPCg/Olx3Oik/c2hlZXRQclte'@;
put 'Pl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFByKT4vLExzPS88KD86XHc6KT9zaGVldFZpZXdzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0Vmlld3MpPi8sZmU9LzwoPzpcdys6KT9kYXRhVmFsaWRhdGlvbnNbXj5dKig/OltcL118PihbXHNcU10q'@;
put 'Pyk8XC8oPzpcdys6KT9kYXRhVmFsaWRhdGlvbnMpPi8sbVM9LzwoPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmdcYltePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZyk+L2csJGU9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5dKlwv'@;
put 'Pi8sRUQ9LzwoPzpcdys6KT90YWJsZVBhcnRzLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT90YWJsZVBhcnRzPi8sVEQ9LzwoPzpcdzopP3BhZ2VTZXR1cFtePl0qXC8+Lyxvaj0vPCg/Olx3Oik/cm93QnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3Jvd0JyZWFrcyk+'@;
put 'LyxpeT0vPCg/Olx3Oik/Y29sQnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2NvbEJyZWFrcyk+LyxONT0vPCg/Olx3Oik/aGVhZGVyRm9vdGVyW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2hlYWRlckZvb3Rlcik+Lyx2Uz0vPCg/Olx3Oik/cHJpbnRP'@;
put 'cHRpb25zXGJbXj5cL10qXC8+Lzt2YXIgeVM9LzwoPzpcdzopP3RhYmxlUGFydFxiW15cLz5dKltcL10/Pi9nO2Z1bmN0aW9uIGF5KFMsTyxrLEspe3ZhciBlZT15cihTKTtrLlNoZWV0c1tLXXx8KGsuU2hlZXRzW0tdPXt9KSxlZS5jb2RlTmFtZSYmKGsuU2hlZXRzW0tdLkNvZGVOYW1lPWVl'@;
put 'LmNvZGVOYW1lKX12YXIgd1M9LzwoPzpcdzopP3RhYkNvbG9yW14+XSpbXC9dPz4vLGxqPS88KD86XHc6KT9wYWdlU2V0VXBQcltePl0qW1wvXT8+Lyxjaj0vPCg/Olx3Oik/b3V0bGluZVByW14+XSpbXC9dPz4vLEREPXtkaXNwbGF5ZWQ6ImFzRGlzcGxheWVkIixlbmQ6ImF0RW5kIixub25l'@;
put 'OiJub25lIn0sSUQ9SGUoREQpLFJEPXtkaXNwbGF5ZWQ6ImRpc3BsYXllZCIsbm9uZToiYmxhbmsiLGRhc2g6ImRhc2giLCJuL2EiOiJOQSJ9LExEPUhlKFJEKSxPMD0vPCg/Olx3Oik/YnJrW14+XSpcLz4vZyxTUz1bIm9iamVjdHMiLCJzY2VuYXJpb3MiLCJzZWxlY3RMb2NrZWRDZWxscyIs'@;
put 'InNlbGVjdFVubG9ja2VkQ2VsbHMiXSxGRD1bImZvcm1hdENvbHVtbnMiLCJmb3JtYXRSb3dzIiwiZm9ybWF0Q2VsbHMiLCJpbnNlcnRDb2x1bW5zIiwiaW5zZXJ0Um93cyIsImluc2VydEh5cGVybGlua3MiLCJkZWxldGVDb2x1bW5zIiwiZGVsZXRlUm93cyIsInNvcnQiLCJhdXRvRmlsdGVy'@;
put 'IiwicGl2b3RUYWJsZXMiXTtmdW5jdGlvbiBORChTKXt2YXIgTz17fTtyZXR1cm5bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24oayl7U1trXSYmKE9ba109cGFyc2VGbG9hdChTW2tdKSl9KSxPfXZhciBkaD17Q3VzdG9t'@;
put 'OiJjdXN0b20iLERhdGU6ImRhdGUiLFRpbWU6InRpbWUiLExlbmd0aDoidGV4dExlbmd0aCIsTGlzdDoibGlzdCIsRGVjaW1hbDoiZGVjaW1hbCIsV2hvbGU6Indob2xlIixBbnk6Im5vbmUifSx4Uz1IZShkaCksc3k9e0lOOiJiZXR3ZWVuIixPVDoibm90QmV0d2VlbiIsRVE6ImVxdWFsIixO'@;
put 'RToibm90RXF1YWwiLEdUOiJncmVhdGVyVGhhbiIsTFQ6Imxlc3NUaGFuIixHRToiZ3JlYXRlclRoYW5PckVxdWFsIixMRToibGVzc1RoYW5PckVxdWFsIn0sVkQ9SGUoc3kpO2Z1bmN0aW9uIEVTKFMsTyxrKXt2YXIgSz1bXSxlZT17fSxvZT0iIixtZT0hMSxwZT0wLGJlPTA7cmV0dXJuIFMu'@;
put 'cmVwbGFjZSh0bixmdW5jdGlvbihQZSxWZSl7dmFyIFllPXlyKFBlKTtzd2l0Y2goR24oWWVbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6ZWU9e3Q6'@;
put 'eFNbWWUudHlwZXx8Im5vbmUiXSxyZWY6KG9lPVllLnNxcmVmKT9vZS5pbmRleE9mKCIgIik+LTE/b2U6c3Mob2UpOiIifSxZZS5vcGVyYXRvciYmKGVlLm9wPVZEW1llLm9wZXJhdG9yXSksZWUuYmxhbms9ISFZZS5hbGxvd0JsYW5rJiZlaShZZS5hbGxvd0JsYW5rKSwoIVllLnNob3dJbnB1'@;
put 'dE1lc3NhZ2V8fCFlaShZZS5zaG93SW5wdXRNZXNzYWdlKSkmJihlZS5pbnB1dD0hMSksWWUucHJvbXB0VGl0bGUmJigoZWUuaW5wdXR8fChlZS5pbnB1dD17fSkpLnRpdGxlPVFyKFllLnByb21wdFRpdGxlKSksWWUucHJvbXB0JiYoKGVlLmlucHV0fHwoZWUuaW5wdXQ9e30pKS5tZXNzYWdl'@;
put 'PVFyKFllLnByb21wdCkpLCghWWUuc2hvd0Vycm9yTWVzc2FnZXx8IWVpKFllLnNob3dFcnJvck1lc3NhZ2UpKSYmKGVlLmVycm9yPSExKSxZZS5lcnJvclRpdGxlJiYoKGVlLmVycm9yfHwoZWUuZXJyb3I9e30pKS50aXRsZT1RcihZZS5lcnJvclRpdGxlKSksWWUuZXJyb3ImJigoZWUuZXJy'@;
put 'b3J8fChlZS5lcnJvcj17fSkpLm1lc3NhZ2U9UXIoWWUuZXJyb3IpKSxlZS5lcnJvcj9lZS5lcnJvci5zdHlsZT1ZZS5lcnJvclN0eWxlfHwic3RvcCI6WWUuZXJyb3JTdHlsZSYmKGVlLmVycm9yPXtzdHlsZTpZZS5lcnJvclN0eWxlfSksZWUudCYmSy5wdXNoKGVlKTticmVhaztjYXNlIjxk'@;
put 'YXRhVmFsaWRhdGlvbi8+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb24+IjpicmVhaztjYXNlIjxzcXJlZj4iOmJlPVZlK1BlLmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpvZT1TLnNsaWNlKGJlLFZlKSxlZS5yZWY9b2U/b2UuaW5kZXhPZigiICIpPi0xP29lOnNzKG9lKToiIjticmVhaztj'@;
put 'YXNlIjxmPiI6Y2FzZSI8Zm9ybXVsYTEiOmNhc2UiPGZvcm11bGExPiI6Y2FzZSI8Zm9ybXVsYTIiOmNhc2UiPGZvcm11bGEyPiI6cGU9VmUrUGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhMT4iOmNhc2UiPC9mb3JtdWxhMj4iOmlmKGspYnJlYWs7Y2FzZSI8L2Y+Ijp2YXIgZXQ9UXIo'@;
put 'ZnMoUy5zbGljZShwZSxWZSkpKTtzd2l0Y2goZWUudCl7Y2FzZSJMaXN0IjppZihlZS5sfHxlZS5mKWJyZWFrO2lmKDM0PT1ldC5jaGFyQ29kZUF0KDApKXtlZS5sPWV0LnNsaWNlKDEsLTEpLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOm51bGw9PWVlLmYmJihlZS5mPWV0KTticmVh'@;
put 'aztjYXNlIkRhdGUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiVGltZSI6Y2FzZSJXaG9sZSI6ZWUub3B8fChlZS5vcD0iSU4iKSxudWxsPT1lZS52P2VlLnY9aXNOYU4oK2V0KT9ldDorZXQ6KGVlLm1pbj1lZS52LGVlLm1heD1pc05hTigrZXQpP2V0OitldCxkZWxldGUgZWUu'@;
put 'dil9YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjptZT0hMDticmVhaztjYXNlIjwvZXh0PiI6bWU9ITE7YnJlYWs7ZGVmYXVsdDppZihPJiZPLldURiYmIW1lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIr'@;
put 'WWVbMF0rIiBpbiBkYXRhIHZhbGlkYXRpb24iKX1yZXR1cm4gUGV9KSxLfXZhciBmOD17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2luc1dpdGgiLE5EOiJlbmRzV2l0aCJ9LG95PUhlKGY4KSxTaj17TE06Imxhc3RNb250aCIsTFM6Imxhc3Q3RGF5cyIs'@;
put 'TFc6Imxhc3RXZWVrIixOTToibmV4dE1vbnRoIixOVzoibmV4dFdlZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlTOiJ5ZXN0ZXJkYXkifSxqRD1IZShTaik7ZnVuY3Rpb24gcDgoUyl7dmFyIE89e307cmV0dXJuIG51bGwhPVMudmFs'@;
put 'JiYoaXNOYU4oK1MudmFsKT9PLmY9Uy52YWw6Ty52PStTLnZhbCksTy50PVMudHlwZSxPfWZ1bmN0aW9uIFc0KFMpe3JldHVybiBIcigiY2Z2byIsbnVsbCx7dHlwZTpTLnQsdmFsOm51bGwhPVMudj9TLnY6UHIoUy5mKX0pfWZ1bmN0aW9uIFY1KFMsTyxrLEspe3ZhciBlZT1wOChTKTtyZXR1'@;
put 'cm4gZWUuY29sb3I9eWsoTyxrLEspLGVlfWZ1bmN0aW9uIGIyKFMsTyxrLEssZWUpe3ZhciBvZT0oUy5tYXRjaCgvc3FyZWY9IihbXHc6JCBdKikiLyl8fFtdKVsxXTtyZXR1cm4gZnVuY3Rpb24gVFMoUyxPLGssSyxlZSxvZSl7dmFyIG1lPSExLHBlPVtdLGJlPXtmOltdfSxQZT0wLFZlPTAs'@;
put 'WWU9e2Nmdm9zOltdLGNvbG9yczpbXX0sZXQ9e30sY3Q9LTEsVHQ9MCxpdD0iIjtyZXR1cm4gUy5yZXBsYWNlKHRuLGZ1bmN0aW9uKGJ0LEJ0KXt2YXIgRHQ9eXIoYnQpO3N3aXRjaChHbihEdFswXSkpe2Nhc2UiPGNvbmRpdGlvbmFsRm9ybWF0dGluZyI6Y2FzZSI8L2NvbmRpdGlvbmFsRm9y'@;
put 'bWF0dGluZz4iOmJyZWFrO2Nhc2UiPGNmUnVsZSI6Y2FzZSI8Y2ZSdWxlPiI6aWYoVmU9QnQsZXQ9RHQsYmU9e3JlZjpPLGY6W119LCFidC5tYXRjaCgvXC8+LykpYnJlYWs7Y2FzZSI8L2NmUnVsZT4iOnN3aXRjaChldC5keGZJZCYmZWUmJmVlLkRYRiYmKGJlLnM9ZWUuRFhGWytldC5keGZJ'@;
put 'ZF0pLGV0LnR5cGUpe2Nhc2UiZHVwbGljYXRlVmFsdWVzIjpiZS50PSJkdXAiO2JyZWFrO2Nhc2UidW5pcXVlVmFsdWVzIjpiZS50PSJ1bmlxdWUiO2JyZWFrO2Nhc2UiY29udGFpbnNCbGFua3MiOmJlLnQ9ImJsYW5rIixiZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNCbGFua3MiOmJl'@;
put 'LnQ9ImJsYW5rIixiZS52PSExO2JyZWFrO2Nhc2UiY29udGFpbnNFcnJvcnMiOmJlLnQ9ImVycm9yIixiZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNFcnJvcnMiOmJlLnQ9ImVycm9yIixiZS52PSExO2JyZWFrO2Nhc2UiY2VsbElzIjpzd2l0Y2goZXQub3BlcmF0b3Ipe2Nhc2UiY29u'@;
put 'dGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zIjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKGJlLnQ9InRleHQiLGJlLm9wPW95W2V0Lm9wZXJhdG9yXSxudWxsPT1ldC50ZXh0KXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrYmUub3ArIiBtaXNzaW5nIHRleHQi'@;
put 'KTtiZS52PWV0LnRleHQsYmUuZj1iZS5mWzBdLG51bGw9PWJlLmYmJmRlbGV0ZSBiZS5mO2JyZWFrO2RlZmF1bHQ6YmUudD0idmFsIixiZS5vcD1WRFtldC5vcGVyYXRvcl0sMT09YmUuZi5sZW5ndGg/aXNOYU4oK2JlLmZbMF0pP2JlLmY9YmUuZlswXTooYmUudj0rYmUuZlswXSxkZWxldGUg'@;
put 'YmUuZik6KGJlLm1pbj1pc05hTigrYmUuZlswXSk/YmUuZlswXTorYmUuZlswXSxiZS5tYXg9aXNOYU4oK2JlLmZbMV0pP2JlLmZbMV06K2JlLmZbMV0sZGVsZXRlIGJlLmYpfWJyZWFrO2Nhc2UiZXhwcmVzc2lvbiI6YmUudD0iZm9ybXVsYSIsYmUuZj1iZS5mWzBdO2JyZWFrO2Nhc2UiY29u'@;
put 'dGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zVGV4dCI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZihiZS50PSJ0ZXh0IixiZS5vcD1veVtldC50eXBlXSxudWxsPT1ldC50ZXh0JiZiZS5mLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrYmUub3Ar'@;
put 'IiBtaXNzaW5nIHRleHQiKTtiZS52PW51bGwhPWV0LnRleHQ/ZXQudGV4dDpiZS5mWzFdLm1hdGNoKC8iLioiLyk/YmUuZlsxXS5zbGljZSgxLC0xKTpiZS5mWzFdLGJlLmY9YmUuZlswXSxudWxsPT1iZS5mJiZkZWxldGUgYmUuZjticmVhaztjYXNlImNvbG9yU2NhbGUiOmlmKGJlLnQ9InNj'@;
put 'YWxlIiwhYmUuY29sb3JTY2FsZSl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgY29sb3JTY2FsZSIpO2JlLmNtaW49VjUoKFllPWJlLmNvbG9yU2NhbGUpLmNmdm9zWzBdLFllLmNvbG9yc1swXSxlZSxLKSwzPT1ZZS5jZnZvcy5sZW5ndGgmJihiZS5jbWlkPVY1KFllLmNmdm9zWzFdLFllLmNv'@;
put 'bG9yc1sxXSxlZSxLKSksYmUuY21heD1WNShZZS5jZnZvc1tZZS5jZnZvcy5sZW5ndGgtMV0sWWUuY29sb3JzW1llLmNmdm9zLmxlbmd0aC0xXSxlZSxLKTticmVhaztjYXNlImRhdGFCYXIiOmlmKGJlLnQ9ImJhciIsIWJlLmRhdGFCYXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGRhdGFC'@;
put 'YXIiKTsoWWU9YmUuZGF0YUJhcikuY29sb3JzWzBdJiYoYmUuY29sb3I9eWsoWWUuY29sb3JzWzBdLGVlLEspKSxiZS5jbWluPXA4KFllLmNmdm9zWzBdKSxiZS5jbWF4PXA4KFllLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKGJlLnQ9Imljb24iLCFiZS5pY29uU2V0KXRocm93'@;
put 'IG5ldyBFcnJvcigibWlzc2luZyBpY29uU2V0Iik7YmUudGhyZXNoPShZZT1iZS5pY29uU2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oT3Qpe3JldHVybiBwOChPdCl9KSxiZS52PVllLnRhZyYmWWUudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLGJlLnJldj1laShZZS50YWcucmV2ZXJz'@;
put 'ZXx8ImZhbHNlIiksYmUucGN0PWVpKFllLnRhZy5wZXJjZW50fHwidHJ1ZSIpLGJlLmhpZGRlbj0hZWkoWWUudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRpbWVQZXJpb2QiOmJlLnQ9ImRhdGUiLGJlLm9wPWpEW2V0LnRpbWVQZXJpb2RdO2JyZWFrO2Nhc2UiYWJvdmVBdmVy'@;
put 'YWdlIjpiZS50PSJhdmciLGJlLm9wPSIwIj09ZXQuYWJvdmVBdmVyYWdlPyJMIjoiRyIsYmUub3ArPWV0LnN0ZERldj9ldC5zdGREZXY6ZWkoZXQuZXF1YWxBdmVyYWdlfHwiMCIpPyJFIjoiVCI7YnJlYWs7Y2FzZSJ0b3AxMCI6YmUudD0icmFuayIsYmUub3A9KGVpKGV0LmJvdHRvbXx8IjAi'@;
put 'KT8iQiI6IlQiKSsoZWkoZXQucGVyY2VudHx8IjAiKT8iUCI6IlYiKSxiZS52PStldC5yYW5rO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgQ0YgVHlwZSAiK2V0LnR5cGV9aWYoZGVsZXRlIGJlLmNvbG9yU2NhbGUsZGVsZXRlIGJlLmRhdGFCYXIsZGVsZXRlIGJlLmljb25TZXQs'@;
put 'IWJlLnQpdGhyb3cgY29uc29sZS5sb2coUy5zbGljZShWZSxCdCtidC5sZW5ndGgpKSwiYmFkIENGIHJ1bGUiO251bGwhPWJlLmYmJiFiZS5mLmxlbmd0aCYmZGVsZXRlIGJlLmYsYmUuZGVsfHxwZS5wdXNoKGJlKTticmVhaztjYXNlIjxmb3JtdWxhIjpjYXNlIjxmb3JtdWxhPiI6UGU9QnQr'@;
put 'YnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhPiI6YmUuZi5wdXNoKFFyKFMuc2xpY2UoUGUsQnQpKSk7YnJlYWs7Y2FzZSI8ZiI6Y2FzZSI8Zj4iOlBlPUJ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZj4iOmJlLmYucHVzaChRcihTLnNsaWNlKFBlLEJ0KSkpO2JyZWFrO2Nhc2UiPHNx'@;
put 'cmVmPiI6VHQ9QnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOml0PVMuc2xpY2UoVHQsQnQpLE89aXQ/aXQuaW5kZXhPZigiICIpPi0xP2l0OnNzKGl0KToiIixiZS5yZWY9TyxwZS5mb3JFYWNoKGZ1bmN0aW9uKE90KXtPdC5yZWY9T30pO2JyZWFrO2Nhc2UiPGNvbG9yU2NhbGUi'@;
put 'OmNhc2UiPGNvbG9yU2NhbGU+IjpjYXNlIjxkYXRhQmFyIjpjYXNlIjxkYXRhQmFyPiI6Y2FzZSI8aWNvblNldCI6Y2FzZSI8aWNvblNldD4iOlllPXtjZnZvczpbXSxjb2xvcnM6W10sdGFnOkR0fSxQZT1CdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbG9yU2NhbGU+IjpiZS5jb2xvclNj'@;
put 'YWxlPVllO2JyZWFrO2Nhc2UiPC9kYXRhQmFyPiI6YmUuZGF0YUJhcj1ZZTticmVhaztjYXNlIjwvaWNvblNldD4iOmJlLmljb25TZXQ9WWU7YnJlYWs7Y2FzZSI8Y2Z2byI6Y2FzZSI8Y2Z2by8+IjpZZS5jZnZvcy5wdXNoKER0KTticmVhaztjYXNlIjwvY2Z2bz4iOmJyZWFrO2Nhc2UiPGNv'@;
put 'bG9yIjpZZS5jb2xvcnMucHVzaChEdCk7YnJlYWs7Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjptZT0hMDticmVhaztjYXNlIjwvZXh0PiI6bWU9ITE7YnJlYWs7Y2FzZSI8bmVnYXRpdmVGaWxsQ29s'@;
put 'b3IiOmNhc2UiPGF4aXNDb2xvciI6Y2FzZSI8Ym9yZGVyQ29sb3IiOmNhc2UiPG5lZ2F0aXZlQm9yZGVyQ29sb3IiOmNhc2UiPGNmSWNvbiI6YmUuZGVsPSEwO2JyZWFrO2Nhc2UiPGR4Zj4iOm1lPSEwLGN0PUJ0O2JyZWFrO2Nhc2UiPC9keGY+IjptZT0hMSxiZS5zPUw0KFMuc2xpY2UoY3Qs'@;
put 'QnQrYnQubGVuZ3RoKSxlZSxLLGspO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYpe2lmKG9lKWJyZWFrO2lmKCFtZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0R0WzBdKyIgaW4gY29uZGZtdCIpfX1yZXR1cm4gYnR9KSxwZX0oUyxvZSxPLGssSyxlZSl9dmFyIEFTPS88KD86'@;
put 'XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vZztmdW5jdGlvbiBtOChTLE8pe3ZhciBrPTAsSz0wLGVlPTAsb2U9MDtpZighT3x8IU8uQ2VsbFhmKXJldHVybiBudWxsO3ZhciBtZT1PLkNlbGxYZltTXTtudWxsIT1tZSYmKG51bGwhPW1lLm51bUZtdElkJiYoaz1tZS5udW1G'@;
put 'bXRJZCksbnVsbCE9bWUuZmlsbElkJiYoSz1tZS5maWxsSWQpLG51bGwhPW1lLmZvbnRJZCYmKGVlPW1lLmZvbnRJZCksbnVsbCE9bWUuYm9yZGVySWQmJihvZT1tZS5ib3JkZXJJZCkpO3ZhciBwZT17dDoieiJ9O3RyeXtRMyhwZSxrLEssZWUsb2Use1dURjoxLGNlbGxTdHlsZXM6ITB9LDAs'@;
put 'Tyl9Y2F0Y2h7fXJldHVybiBwZS5zfWZ1bmN0aW9uIEI1KFMsTyxrLEspe2lmKHZvaWQgMD09PVMudiYmdm9pZCAwPT09Uy5mJiZudWxsPT1TLnMmJiFTLmN8fCJ6Ij09PVMudCYmIVMuYyYmIUsuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgZWU9IiIsb2U9Uy50LG1lPVMudjtpZigieiIhPT1T'@;
put 'LnQpc3dpdGNoKFMudCl7Y2FzZSJiIjplZT1TLnY/IjEiOiIwIjticmVhaztjYXNlIm4iOmVlPSIiK1MudjticmVhaztjYXNlImUiOmVlPUNjW1Mudl07YnJlYWs7Y2FzZSJkIjpLJiZLLmNlbGxEYXRlcz9lZT1OZShTLnYsLTEpLnRvSVNPU3RyaW5nKCk6KChTPUp0KFMpKS50PSJuIixlZT0i'@;
put 'IisoUy52PUplKE5lKFMudikpKSksdHlwZW9mIFMuej4idSImJihTLno9QS5fdGFibGVbMTRdKTticmVhaztkZWZhdWx0OmVlPVMudn12YXIgcGU9InoiPT1TLnQ/IiI6VmEoInYiLFByKGVlKSksYmU9e3I6T30sUGU9Sz9zMChLLmNlbGxYZnMsSy5jZWxsU3R5bGVYZnMsUyxLKTowO3N3aXRj'@;
put 'aCgwIT09UGUmJihiZS5zPVBlKSxTLnQpe2Nhc2UibiI6Y2FzZSJ6IjpicmVhaztjYXNlImQiOmJlLnQ9ImQiO2JyZWFrO2Nhc2UiYiI6YmUudD0iYiI7YnJlYWs7Y2FzZSJlIjpiZS50PSJlIjticmVhaztkZWZhdWx0OmlmKG51bGw9PVMudil7ZGVsZXRlIFMudDticmVha31pZihLJiZLLmJv'@;
put 'b2tTU1Qpe3BlPVZhKCJ2IiwiIit1UyhLLlN0cmluZ3MsUy52LFMuUj9TLnI9Sm8oUy5SKTpudWxsLEsucmV2U3RyaW5ncykpLGJlLnQ9InMiO2JyZWFrfUFycmF5LmlzQXJyYXkoUy5SKT8ocGU9Ijxpcz4iK0pvKFMuUikrIjwvaXM+IixiZS50PSJpbmxpbmVTdHIiKTpiZS50PSJzdHIifWlm'@;
put 'KFMudCE9b2UmJihTLnQ9b2UsUy52PW1lKSxTLmYpe3ZhciBWZT1TLkYmJlMuRi5zbGljZSgwLE8ubGVuZ3RoKT09Tz97dDoiYXJyYXkiLHJlZjpTLkZ9Om51bGw7cGU9SHIoImYiLFByKFMuZiksVmUpKyhudWxsIT1TLnY/cGU6IiIpfXJldHVybiBTLmwmJmtbIiFsaW5rcyJdLnB1c2goW08s'@;
put 'Uy5sXSksUy5jJiZrWyIhY29tbWVudHMiXS5wdXNoKFtPLFMuY10pLEhyKCJjIixwZSxiZSl9dmFyIHY4PWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9jWyBcLz5dLyxPPS88XC8oPzpcdys6KT9yb3c+LyxrPS9yPVsiJ10oW14iJ10qKVsiJ10vLEs9LzwoPzpcdys6KT9pcz4oW1xTXHNd'@;
put 'Kj8pPFwvKD86XHcrOik/aXM+LyxlZT0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLG9lPUEwKCJ2IiksbWU9QTAoImYiKTtyZXR1cm4gZnVuY3Rpb24oYmUsUGUsVmUsWWUsZXQsY3QsVHQpe2Zvcih2YXIgQ24sdXIscHIsYnIsUmksaXQ9MCxidD0iIixCdD1bXSxEdD1bXSxPdD0wLEt0PTAsVG49'@;
put 'MCxzcj0iIixlcj0wLGpuPTAscnI9MCxTaT0wLFBpPTAsbmE9MCxsYT1BcnJheS5pc0FycmF5KFR0LkNlbGxYZiksUnI9W10sQm49W10sanI9QXJyYXkuaXNBcnJheShWZSksd3I9W10sSG49e30senI9ITEsV2k9YmUuc3BsaXQoTyksQ2k9ISFZZS5zaGVldFN0dWJzLHdhPSEhWWUuY2VsbEhU'@;
put 'TUwsb3M9ISghMT09PVllLmNlbGxUZXh0JiYhWWUuY2VsbE5GJiYhWWUuY2VsbFN0eWxlcyksaWE9MCxPcz1XaS5sZW5ndGg7aWEhPU9zOysraWEpe3ZhciBQYT0oYnQ9V2lbaWFdLnRyaW0oKSkubGVuZ3RoO2lmKDAhPT1QYSl7dmFyIHVzPTA7ZTpmb3IoaXQ9MDtpdDxQYTsrK2l0KXN3aXRj'@;
put 'aChidFtpdF0pe2Nhc2UiPiI6aWYoIi8iIT1idFtpdC0xXSl7KytpdDticmVhayBlfVllLmNlbGxTdHlsZXMmJm51bGwhPSh1cj15cihidC5zbGljZSh1cyxpdCksITApKS5yJiZwYXJzZUludCh1ci5yLDEwKSYmKGVyPXBhcnNlSW50KHVyLnIsMTApLEhuPXt9LHpyPSExLHVyLmh0JiYoenI9'@;
put 'ITAsSG4uaHB0PXBhcnNlRmxvYXQodXIuaHQpLEhuLmhweD1vaChIbi5ocHQpKSx1ci5keURlc2NlbnQmJih6cj0hMCxIbi5keURlc2NlbnQ9dXIuZHlEZXNjZW50KSwiMSI9PXVyLmhpZGRlbiYmKHpyPSEwLEhuLmhpZGRlbj0hMCksbnVsbCE9dXIub3V0bGluZUxldmVsJiYoenI9ITAsSG4u'@;
put 'bGV2ZWw9K3VyLm91dGxpbmVMZXZlbCksdXIucyYmVHQmJlR0LkNlbGxYZiYmKHpyPSEwLEhuLnM9bTgodXIucyxUdCkpLHpyJiYod3JbZXItMV09SG4pKTticmVhaztjYXNlIjwiOnVzPWl0fWlmKHVzPj1pdClicmVhaztpZihlcj1udWxsIT0odXI9eXIoYnQuc2xpY2UodXMsaXQpLCEwKSku'@;
put 'cj9wYXJzZUludCh1ci5yLDEwKTplcisxLGpuPS0xLCEoWWUuc2hlZXRSb3dzJiZZZS5zaGVldFJvd3M8ZXIpKXtZZS5ub2RpbXx8KGV0LnMucj5lci0xJiYoZXQucy5yPWVyLTEpLGV0LmUucjxlci0xJiYoZXQuZS5yPWVyLTEpKTt2YXIgcWE9e3Q6InJvdyIscm93OltdLFI6ZXItMSxpZHg6'@;
put 'UGV9O1llLmNlbGxTdHlsZXMmJihIbj17fSx6cj0hMSx1ci5odCYmKHpyPSEwLEhuLmhwdD1wYXJzZUZsb2F0KHVyLmh0KSxIbi5ocHg9b2goSG4uaHB0KSksdXIuZHlEZXNjZW50JiYoenI9ITAsSG4uZHlEZXNjZW50PXVyLmR5RGVzY2VudCksIjEiPT11ci5oaWRkZW4mJih6cj0hMCxIbi5o'@;
put 'aWRkZW49ITApLG51bGwhPXVyLm91dGxpbmVMZXZlbCYmKHpyPSEwLEhuLmxldmVsPSt1ci5vdXRsaW5lTGV2ZWwpLHVyLnMmJih6cj0hMCxIbi5zPW04KHVyLnMsVHQpKSx6ciYmKFllLmNhbGxiYWNrP3FhLnByb3BzPUhuOndyW2VyLTFdPUhuKSksQnQ9YnQuc2xpY2UoaXQpLnNwbGl0KFMp'@;
put 'O2Zvcih2YXIgVmk9MDtWaSE9QnQubGVuZ3RoJiYiPCI9PUJ0W1ZpXS50cmltKCkuY2hhckF0KDApOysrVmkpO2ZvcihCdD1CdC5zbGljZShWaSksaXQ9MDtpdCE9QnQubGVuZ3RoOysraXQpaWYoMCE9PShidD1CdFtpdF0udHJpbSgpKS5sZW5ndGgpe2lmKER0PWJ0Lm1hdGNoKGspLE90PWl0'@;
put 'LEt0PTAsVG49MCxidD0iPGMgIisoIjwiPT1idC5zbGljZSgwLDEpPyI+IjoiIikrYnQsbnVsbCE9RHQmJjI9PT1EdC5sZW5ndGgpe2ZvcihPdD0wLHNyPUR0WzFdLEt0PTA7S3QhPXNyLmxlbmd0aCYmISgoVG49c3IuY2hhckNvZGVBdChLdCktNjQpPDF8fFRuPjI2KTsrK0t0KU90PTI2Kk90'@;
put 'K1RuO2puPS0tT3R9ZWxzZSsram47Zm9yKEt0PTA7S3QhPWJ0Lmxlbmd0aCYmNjIhPT1idC5jaGFyQ29kZUF0KEt0KTsrK0t0KTtpZigrK0t0LCh1cj15cihidC5zbGljZSgwLEt0KSwhMCkpLnJ8fCh1ci5yPXFpKHtyOmVyLTEsYzpqbn0pKSxDbj17dDoiIn0sbnVsbCE9KER0PShzcj1idC5z'@;
put 'bGljZShLdCkpLm1hdGNoKG9lKSkmJiIiIT09RHRbMV0mJihDbi52PVFyKER0WzFdKSksWWUuY2VsbEZvcm11bGEpe2lmKG51bGwhPShEdD1zci5tYXRjaChtZSkpJiYiIiE9PUR0WzFdKXtpZihDbi5mPVFyKGZzKER0WzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLFllLnhsZm58fChDbi5m'@;
put 'PURCKENuLmYpKSxEdFswXS5pbmRleE9mKCd0PSJhcnJheSInKT4tMSlDbi5GPShzci5tYXRjaChlZSl8fFtdKVsxXSxDbi5GLmluZGV4T2YoIjoiKT4tMSYmUnIucHVzaChbc3MoQ24uRiksQ24uRl0pO2Vsc2UgaWYoRHRbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXticj15cihEdFsw'@;
put 'XSk7dmFyIElvPVFyKGZzKER0WzFdKSk7WWUueGxmbnx8KElvPURCKElvKSksQm5bcGFyc2VJbnQoYnIuc2ksMTApXT1bYnIsSW8sdXIucl19fWVsc2UoRHQ9c3IubWF0Y2goLzxmW14+XSpcLz4vKSkmJkJuWyhicj15cihEdFswXSkpLnNpXSYmKENuLmY9d25lKEJuW2JyLnNpXVsxXSxCblti'@;
put 'ci5zaV1bMl0sdXIucikpO3ZhciBGbj1Wcyh1ci5yKTtmb3IoS3Q9MDtLdDxSci5sZW5ndGg7KytLdClGbi5yPj1ScltLdF1bMF0ucy5yJiZGbi5yPD1ScltLdF1bMF0uZS5yJiZGbi5jPj1ScltLdF1bMF0ucy5jJiZGbi5jPD1ScltLdF1bMF0uZS5jJiYoQ24uRj1ScltLdF1bMV0pfWlmKG51'@;
put 'bGw9PXVyLnQmJnZvaWQgMD09PUNuLnYpaWYoQ24uZnx8Q24uRilDbi52PTAsQ24udD0ibiI7ZWxzZXtpZighQ2kpY29udGludWU7Q24udD0ieiJ9ZWxzZSBDbi50PXVyLnR8fCJuIjtzd2l0Y2goZXQucy5jPmpuJiYoZXQucy5jPWpuKSxldC5lLmM8am4mJihldC5lLmM9am4pLENuLnQpe2Nh'@;
put 'c2UibiI6aWYoIiI9PUNuLnZ8fG51bGw9PUNuLnYpe2lmKCFDaSljb250aW51ZTtDbi50PSJ6In1lbHNlIENuLnY9cGFyc2VGbG9hdChDbi52KTticmVhaztjYXNlInMiOmlmKHR5cGVvZiBDbi52PiJ1Iil7aWYoIUNpKWNvbnRpbnVlO0NuLnQ9InoifWVsc2UgcHI9bDhbcGFyc2VJbnQoQ24u'@;
put 'diwxMCldLENuLnY9cHIudCxDbi5yPXByLnIscHIuUiYmKENuLlI9cHIuUiksd2EmJihDbi5oPXByLmgpO2JyZWFrO2Nhc2Uic3RyIjpDbi50PSJzIixDbi52PW51bGwhPUNuLnY/ZnMoQ24udik6IiIsd2EmJihDbi5oPW9hKENuLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6RHQ9c3IubWF0'@;
put 'Y2goSyksQ24udD0icyIsbnVsbCE9RHQmJihwcj1nQyhEdFsxXSkpPyhDbi52PXByLnQscHIuUiYmKENuLlI9cHIuUiksd2EmJihDbi5oPXByLmgpKTpDbi52PSIiO2JyZWFrO2Nhc2UiYiI6Q24udj1laShDbi52KTticmVhaztjYXNlImQiOlllLmNlbGxEYXRlcz9Dbi52PU5lKENuLnYsMSk6'@;
put 'KENuLnY9SmUoTmUoQ24udiwxKSksQ24udD0ibiIpO2JyZWFrO2Nhc2UiZSI6ITEhPT1ZZS5jZWxsVGV4dCYmKENuLnc9Q24udiksQ24udj1GM1tDbi52XX1pZihvcyl7cnI9U2k9UGk9bmE9MCxSaT1udWxsLGxhJiZ2b2lkIDAhPT11ci5zJiZudWxsIT0oUmk9VHQuQ2VsbFhmW3VyLnNdKSYm'@;
put 'KG51bGwhPVJpLm51bUZtdElkJiYocnI9UmkubnVtRm10SWQpLFllLmNlbGxTdHlsZXMmJihudWxsIT1SaS5maWxsSWQmJihTaT1SaS5maWxsSWQpLG51bGwhPVJpLmZvbnRJZCYmKFBpPVJpLmZvbnRJZCksbnVsbCE9UmkuYm9yZGVySWQmJihuYT1SaS5ib3JkZXJJZCkpKTt0cnl7UTMoQ24s'@;
put 'cnIsU2ksUGksbmEsWWUsMCxUdCl9Y2F0Y2h7fVllLmNlbGxTdHlsZXMmJkNuLnMmJihSaSYmUmkuYWxpZ25tZW50JiYoQ24ucy5hbGlnbm1lbnQ9SnQoUmkuYWxpZ25tZW50KSksUmkmJlJpLnByb3RlY3Rpb24mJihudWxsIT1SaS5wcm90ZWN0aW9uLmhpZGRlbiYmKENuLnMuaGlkZGVuPVJp'@;
put 'LnByb3RlY3Rpb24uaGlkZGVuKSxudWxsIT1SaS5wcm90ZWN0aW9uLmVkaXRhYmxlJiYoQ24ucy5lZGl0YWJsZT1SaS5wcm90ZWN0aW9uLmVkaXRhYmxlKSksUmkmJlJpLnN0eWxlJiYoQ24ucy5zdHlsZT1SaS5zdHlsZSkpLFllLmNlbGxEYXRlcyYmbGEmJiJuIj09Q24udCYmQS5pc19kYXRl'@;
put 'KEEuX3RhYmxlW3JyXSkmJihDbi50PSJkIixDbi52PW9uKENuLnYpKX12YXIgWXM7WWUubm9kaW0mJihZcz1Wcyh1ci5yKSxldC5zLnI+WXMuciYmKGV0LnMucj1Zcy5yKSxldC5lLnI8WXMuciYmKGV0LmUucj1Zcy5yKSksWWUuY2FsbGJhY2s/KFlzPVZzKHVyLnIpLHFhLnJvd1tZcy5jXT1D'@;
put 'bik6anI/KFZlWyhZcz1Wcyh1ci5yKSkucl18fChWZVtZcy5yXT1bXSksVmVbWXMucl1bWXMuY109Q24pOlZlW3VyLnJdPUNufVllLmNhbGxiYWNrJiZZZS5jYWxsYmFjayhxYSl9fX1DaSYmIVllLmNhbGxiYWNrJiZtOCgwLFR0KSx3ci5sZW5ndGg+MCYmKFZlWyIhcm93cyJdPXdyKX19KCks'@;
put 'eTg9SHIoIndvcmtzaGVldCIsbnVsbCx7eG1sbnM6R2kubWFpblswXSwieG1sbnM6ciI6R2kuciwieG1sbnM6eDE0YWMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyIsInhtbG5zOm1jIjoiaHR0cDovL3NjaGVtYXMub3Blbnht'@;
put 'bGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiLCJtYzpJZ25vcmFibGUiOiJ4MTRhYyJ9KTtmdW5jdGlvbiB6RChTLE8sayxLKXt2YXIgbWUsZWU9W0RpLHk4XSxwZT0iIixiZT1rLlNoZWV0c1trLlNoZWV0TmFtZXNbU11dO251bGw9PWJlJiYoYmU9e30pO3ZhciBQZT1i'@;
put 'ZVsiIXJlZiJdfHwiQTEiLFZlPXNzKFBlKTtpZihWZS5lLmM+MTYzODN8fFZlLmUucj4xMDQ4NTc1KXtpZihPLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrUGUrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7VmUuZS5jPU1hdGgubWluKFZlLmUuYywxNjM4Myks'@;
put 'VmUuZS5yPU1hdGgubWluKFZlLmUuYywxMDQ4NTc1KSxQZT1yYShWZSl9S3x8KEs9e30pLGJlWyIhY29tbWVudHMiXT1bXTt2YXIgWWU9W10sZXQ9YmVbIiFwcmludCJdO2lmKGZ1bmN0aW9uIGtEKFMsTyxrLEssZWUpe3ZhciBvZT0hMSxtZT17fSxwZT1udWxsO2lmKCJ4bHN4IiE9PUsuYm9v'@;
put 'a1R5cGUmJk8udmJhcmF3KXt2YXIgYmU9Ty5TaGVldE5hbWVzW2tdO3RyeXtPLldvcmtib29rJiYoYmU9Ty5Xb3JrYm9vay5TaGVldHNba10uQ29kZU5hbWV8fGJlKX1jYXRjaHt9b2U9ITAsbWUuY29kZU5hbWU9UHIoYmUpfVMmJlNbIiFjb25kZm10Il0mJihtZS5lbmFibGVGb3JtYXRDb25k'@;
put 'aXRpb25zQ2FsY3VsYXRpb249IjEiKSxTJiZTWyIhdGFiY29sb3IiXSYmKHBlPShwZXx8IiIpKyc8dGFiQ29sb3IgcmdiPSJGRicrTDAoU1siIXRhYmNvbG9yIl0ucmdiKSsnIi8+Jyk7dmFyIFBlPSExLFZlPXt9O2lmKCgoKFN8fHt9KVsiIXByaW50Il18fHt9KS5wcm9wc3x8e30pLmZpdCYm'@;
put 'KFBlPSEwLFZlLmZpdFRvUGFnZT0xKSxQZSYmKHBlPShwZXx8IiIpK0hyKCJwYWdlU2V0VXBQciIsbnVsbCxWZSkpLFMmJlNbIiFvdXRsaW5lIl0pe3ZhciBZZT17c3VtbWFyeUJlbG93OjEsc3VtbWFyeVJpZ2h0OjF9O1NbIiFvdXRsaW5lIl0uYWJvdmUmJihZZS5zdW1tYXJ5QmVsb3c9MCks'@;
put 'U1siIW91dGxpbmUiXS5sZWZ0JiYoWWUuc3VtbWFyeVJpZ2h0PTApLHBlPShwZXx8IiIpK0hyKCJvdXRsaW5lUHIiLG51bGwsWWUpfSFvZSYmIXBlfHwoZWVbZWUubGVuZ3RoXT1Icigic2hlZXRQciIscGUsbWUpKX0oYmUsayxTLE8sZWUpLGVlW2VlLmxlbmd0aF09SHIoImRpbWVuc2lvbiIs'@;
put 'bnVsbCx7cmVmOlBlfSksZWVbZWUubGVuZ3RoXT1mdW5jdGlvbiBnOChTLE8sayxLKXt2YXIgZWU9e3dvcmtib29rVmlld0lkOiIwIn07aWYoKCgoS3x8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKS5sZW5ndGgpe3ZhciBvZT1LLldvcmtib29rLlZpZXdzLG1lPW9lW2tdfHxvZVswXTtl'@;
put 'ZS5yaWdodFRvTGVmdD1tZS5SVEw/IjEiOiIwIixtZS56b29tJiYoZWUuem9vbVNjYWxlPW1lLnpvb20pLG51bGwhPW1lLmdyaWQmJihlZS5zaG93R3JpZExpbmVzPW1lLmdyaWQpLG1lLnZpZXcmJihlZS52aWV3PW1lLnZpZXcpfW51bGwhPVNbIiFncmlkbGluZXMiXSYmKGVlLnNob3dHcmlk'@;
put 'TGluZXM9ISFTWyIhZ3JpZGxpbmVzIl0pO3ZhciBwZT0iIixiZT17cjowLGM6MH07aWYoU1siIXNlbCJdKXtpZighKGJlPVNbIiFzZWwiXS5jZWxsKSl7aWYoIVNbIiFzZWwiXS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7'@;
put 'YmU9U28oU1siIXNlbCJdLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnN9InN0cmluZyI9PXR5cGVvZiBiZSYmKGJlPVZzKGJlKSl9dmFyIFZlPVNbIiFmcmVlemUiXT8ic3RyaW5nIj09dHlwZW9mIFNbIiFmcmVlemUiXT9WcyhTWyIhZnJlZXplIl0pOlNbIiFmcmVlemUiXTp7YzowLHI6'@;
put 'MH07aWYoU1siIWZyZWV6ZSJdKXt2YXIgWWU9cWkoVmUpLGV0PXtzdGF0ZToiZnJvemVuIix4U3BsaXQ6VmUuYyx5U3BsaXQ6VmUucix0b3BMZWZ0Q2VsbDpZZX07U1siIXNlbCJdJiYoZXQuYWN0aXZlUGFuZT0oYmUucj49VmUuciYmVmUucj4wPyJib3R0b20iOiJ0b3AiKSsoYmUuYz49VmUu'@;
put 'YyYmVmUuYz4wPyJSaWdodCI6IkxlZnQiKSkscGU9SHIoInBhbmUiLG51bGwsZXQpfWlmKFNbIiFzZWwiXSl7dmFyIGN0PXthY3RpdmVDZWxsOiJzdHJpbmciPT10eXBlb2YgYmU/YmU6cWkoYmUpfTtjdC5zcXJlZj1TWyIhc2VsIl0ucmFuZ2U/U1siIXNlbCJdLnJhbmdlOmN0LmFjdGl2ZUNl'@;
put 'bGwrIjoiK2N0LmFjdGl2ZUNlbGwscGUrPUhyKCJzZWxlY3Rpb24iLG51bGwsY3QpLFNbIiFmcmVlemUiXSYmKFZlLmM+MCYmKGN0LnBhbmU9InRvcFJpZ2h0IixwZSs9SHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpLFZlLnI+MCYmKGN0LnBhbmU9ImJvdHRvbUxlZnQiLHBlKz1Icigic2VsZWN0'@;
put 'aW9uIixudWxsLGN0KSksVmUuYz4wJiZWZS5yPjAmJihjdC5wYW5lPSJib3R0b21SaWdodCIscGUrPUhyKCJzZWxlY3Rpb24iLG51bGwsY3QpKSl9cmV0dXJuIEhyKCJzaGVldFZpZXdzIixIcigic2hlZXRWaWV3IixwZXx8bnVsbCxlZSkse30pfShiZSwwLFMsayksTy5zaGVldEZvcm1hdCl7'@;
put 'dmFyIGN0PXtkZWZhdWx0Um93SGVpZ2h0Ok8uc2hlZXRGb3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6Ty5zaGVldEZvcm1hdC5iYXNlQ29sV2lkdGh8fCIxMCJ9O251bGwhPU8uc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93JiYoY3Qub3V0bGluZUxldmVsUm93'@;
put 'PU8uc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxlZVtlZS5sZW5ndGhdPUhyKCJzaGVldEZvcm1hdFByIixudWxsLGN0KX1lbHNlIGlmKGJlWyIhc2hlZXRGb3JtYXQiXSl7dmFyIFR0PXt9LGl0PSExO2JlWyIhc2hlZXRGb3JtYXQiXS5yb3cmJihiZVsiIXNoZWV0Rm9ybWF0Il0ucm93'@;
put 'LmhwdD8oaXQ9ITAsVHQuZGVmYXVsdFJvd0hlaWdodD1iZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdCxUdC5jdXN0b21IZWlnaHQ9MSk6YmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHg/KGl0PSEwLFR0LmRlZmF1bHRSb3dIZWlnaHQ9WjMoYmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHgpLFR0'@;
put 'LmN1c3RvbUhlaWdodD0xKTooMD09PWJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0fHwwPT09YmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHh8fGJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaGlkZGVuKSYmKGl0PSEwLFR0LmRlZmF1bHRSb3dIZWlnaHQ9VHQuZGVmYXVsdFJvd0hlaWdodHx8MTYs'@;
put 'VHQuY3VzdG9tSGVpZ2h0PTEsVHQuemVyb0hlaWdodD0xKSxiZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50JiYoVHRbIngxNGFjOmR5RGVzY2VudCJdPWJlWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQpKSxiZVsiIXNoZWV0Rm9ybWF0Il0uY29sJiYoYmVbIiFzaGVldEZvcm1hdCJdLmNv'@;
put 'bC53Y2h8fEowKGJlWyIhc2hlZXRGb3JtYXQiXS5jb2wpLFR0LmRlZmF1bHRDb2xXaWR0aD1iZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaCs1L3hjfHwwLGl0PSEwKSxudWxsPT1UdC5kZWZhdWx0Um93SGVpZ2h0JiYoVHQuZGVmYXVsdFJvd0hlaWdodD0xNiksbnVsbD09VHQuZGVmYXVsdENv'@;
put 'bFdpZHRoJiYoVHQuZGVmYXVsdENvbFdpZHRoPTEwKSxUdC5vdXRsaW5lTGV2ZWxSb3c9VHQub3V0bGluZUxldmVsUm93fHw3LGl0JiYoZWVbZWUubGVuZ3RoXT1Icigic2hlZXRGb3JtYXRQciIsbnVsbCxUdCkpfW51bGwhPWJlWyIhY29scyJdJiZiZVsiIWNvbHMiXS5sZW5ndGg+MCYmKGVl'@;
put 'W2VlLmxlbmd0aF09ZnVuY3Rpb24geWooUyxPLGspe2Zvcih2YXIgZWUsSz1bIjxjb2xzPiJdLG9lPTA7b2UhPU8ubGVuZ3RoOysrb2UpaWYoZWU9T1tvZV0pe2lmKGVlLmF1dG8mJmRTKFMsZWUsb2UpLGVlLnN8fGVlLnope3ZhciBtZT17dDoieiJ9O251bGwhPWVlLnMmJihtZS5zPWVlLnMp'@;
put 'LG51bGwhPWVlLnomJihtZS56PWVlLnopLGVlLnN0eWxlPXMwKGsuY2VsbFhmcyxrLmNlbGxTdHlsZVhmcyxtZSxrKX1LW0subGVuZ3RoXT1IcigiY29sIixudWxsLHU4KG9lLGVlKSl9cmV0dXJuIEtbSy5sZW5ndGhdPSI8L2NvbHM+IixLLmpvaW4oIiIpfShiZSxiZVsiIWNvbHMiXSxPKSks'@;
put 'ZWVbbWU9ZWUubGVuZ3RoXT0iPHNoZWV0RGF0YS8+IixiZVsiIWxpbmtzIl09W10sbnVsbCE9YmVbIiFyZWYiXSYmKHBlPWZ1bmN0aW9uIGtTKFMsTyxrLEspe3ZhciBiZSxidCxlZT1bXSxvZT1bXSxtZT1zcyhTWyIhcmVmIl0pLHBlPSIiLFBlPSIiLFZlPVtdLFllPTAsZXQ9MCxjdD1TWyIh'@;
put 'cm93cyJdLFR0PUFycmF5LmlzQXJyYXkoUyksaXQ9e3I6UGV9LEJ0PS0xO2ZvcihldD1tZS5zLmM7ZXQ8PW1lLmUuYzsrK2V0KVZlW2V0XT1rYShldCk7Zm9yKFllPW1lLnMucjtZZTw9bWUuZS5yOysrWWUpe2ZvcihvZT1bXSxQZT1qaShZZSksZXQ9bWUucy5jO2V0PD1tZS5lLmM7KytldCl7'@;
put 'YmU9VmVbZXRdK1BlO3ZhciBEdD1UdD8oU1tZZV18fFtdKVtldF06U1tiZV07dm9pZCAwIT09RHQmJm51bGwhPShwZT1CNShEdCxiZSxTLE8pKSYmb2UucHVzaChwZSl9KG9lLmxlbmd0aD4wfHxjdCYmY3RbWWVdKSYmKGl0PXtyOlBlfSxjdCYmY3RbWWVdJiYoKGJ0PWN0W1llXSkuaGlkZGVu'@;
put 'JiYoaXQuaGlkZGVuPTEpLEJ0PS0xLGJ0LmhweD9CdD1aMyhidC5ocHgpOmJ0LmhwdCYmKEJ0PWJ0LmhwdCksQnQ+LTEmJihpdC5odD1CdCxpdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihpdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLGJ0LmR5RGVzY2VudCYmKGl0WyJ4MTRhYzpkeURl'@;
put 'c2NlbnQiXT1idC5keURlc2NlbnQpLGJ0LnMmJihpdC5zPXMwKE8uY2VsbFhmcyxPLmNlbGxTdHlsZVhmcyx7dDoieiIsczpidC5zfSxPKSxpdC5jdXN0b21Gb3JtYXQ9MSkpLGVlW2VlLmxlbmd0aF09SHIoInJvdyIsb2Uuam9pbigiIiksaXQpKX1pZihjdClmb3IoO1llPGN0Lmxlbmd0aDsr'@;
put 'K1llKWN0JiZjdFtZZV0mJihpdD17cjpZZSsxfSwoYnQ9Y3RbWWVdKS5oaWRkZW4mJihpdC5oaWRkZW49MSksQnQ9LTEsYnQuaHB4P0J0PVozKGJ0LmhweCk6YnQuaHB0JiYoQnQ9YnQuaHB0KSxCdD4tMSYmKGl0Lmh0PUJ0LGl0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGl0Lm91dGxp'@;
put 'bmVMZXZlbD1idC5sZXZlbCksZWVbZWUubGVuZ3RoXT1Icigicm93IiwiIixpdCkpO3JldHVybiBlZS5qb2luKCIiKX0oYmUsTykscGUubGVuZ3RoPjAmJihlZVtlZS5sZW5ndGhdPXBlKSksZWUubGVuZ3RoPm1lKzEmJihlZVtlZS5sZW5ndGhdPSI8L3NoZWV0RGF0YT4iLGVlW21lXT1lZVtt'@;
put 'ZV0ucmVwbGFjZSgiLz4iLCI+IikpLGJlWyIhcHJvdGVjdCJdJiYoZWVbZWUubGVuZ3RoXT1mdW5jdGlvbiBnaihTKXt2YXIgTz17c2hlZXQ6MX07cmV0dXJuIFNTLmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmU1trXSYmKE9ba109IjEiKX0pLEZELmZvckVhY2goZnVuY3Rpb24o'@;
put 'ayl7bnVsbCE9U1trXSYmIVNba10mJihPW2tdPSIwIil9KSxTLnBhc3N3b3JkP08ucGFzc3dvcmQ9THYoUy5wYXNzd29yZCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Uy5lbmNyeXB0aW9uJiYoTy5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvLE8uaGFzaFZhbHVlPVMuZW5j'@;
put 'cnlwdGlvbi5oYXNoLE8uc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0LE8uc3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSxIcigic2hlZXRQcm90ZWN0aW9uIixudWxsLE8pfShiZVsiIXByb3RlY3QiXSkpLG51bGwhPWJlWyIhYXV0b2ZpbHRlciJdJiYoZWVbZWUubGVuZ3RoXT1mdW5j'@;
put 'dGlvbiBfaihTLE8sayxLKXt2YXIgZWU9InN0cmluZyI9PXR5cGVvZiBTLnJlZj9TLnJlZjpyYShTLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgb2U9ay5Xb3JrYm9vay5OYW1lcyxt'@;
put 'ZT1TbyhlZSk7bWUucy5yPT1tZS5lLnImJihtZS5lLnI9U28oT1siIXJlZiJdKS5lLnIsZWU9cmEobWUpKTtmb3IodmFyIHBlPTA7cGU8b2UubGVuZ3RoOysrcGUpe3ZhciBiZT1vZVtwZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PWJlLk5hbWUmJmJlLlNoZWV0PT1LKXtiZS5SZWY9'@;
put 'IiciK2suU2hlZXROYW1lc1tLXSsiJyEiK2VlO2JyZWFrfX1yZXR1cm4gcGU9PW9lLmxlbmd0aCYmb2UucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpLLFJlZjoiJyIray5TaGVldE5hbWVzW0tdKyInISIrZWV9KSxIcigiYXV0b0ZpbHRlciIsbnVsbCx7cmVmOmVl'@;
put 'fSl9KGJlWyIhYXV0b2ZpbHRlciJdLGJlLGssUykpLG51bGwhPWJlWyIhbWVyZ2VzIl0mJmJlWyIhbWVyZ2VzIl0ubGVuZ3RoPjAmJihlZVtlZS5sZW5ndGhdPWZ1bmN0aW9uIF9TKFMpe2lmKDA9PT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIE89JzxtZXJnZUNlbGxzIGNvdW50PSInK1Mu'@;
put 'bGVuZ3RoKyciPicsaz0wO2shPVMubGVuZ3RoOysraylPKz0nPG1lcmdlQ2VsbCByZWY9IicrcmEoU1trXSkrJyIvPic7cmV0dXJuIE8rIjwvbWVyZ2VDZWxscz4ifShiZVsiIW1lcmdlcyJdKSksYmVbIiFjb25kZm10Il0mJihlZVtlZS5sZW5ndGhdPWZ1bmN0aW9uIHhqKFMsTyl7cmV0dXJu'@;
put 'IFMubWFwKGZ1bmN0aW9uKGssSyl7cmV0dXJuIGZ1bmN0aW9uIE1qKFMsTyxrKXt2YXIgSz1TLnM/ZlMoay5EWEYsUy5zKTotMSxlZT0ic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOnJhKFMucmVmKSxtZT1zcyhlZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zO21lLnI8MCYmKG1lLnI9MCks'@;
put 'bWUuYzwwJiYobWUuYz0wKTt2YXIgcGU9IiIsYmU9e3ByaW9yaXR5Ok8rMX07c3dpdGNoKEs+LTEmJihiZS5keGZJZD1LKSxTLnQpe2Nhc2UidW5pcXVlIjpiZS50eXBlPSJ1bmlxdWVWYWx1ZXMiO2JyZWFrO2Nhc2UiZHVwIjpiZS50eXBlPSJkdXBsaWNhdGVWYWx1ZXMiO2JyZWFrO2Nhc2Ui'@;
put 'YmxhbmsiOmJlLnR5cGU9KFMudj8iYyI6Im5vdEMiKSsib250YWluc0JsYW5rcyIscGU9Ijxmb3JtdWxhPkxFTihUUklNKCIrcWkobWUpKyIpKSIrKFMudj8iPSI6IiZndDsiKSsiMDwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiZXJyb3IiOmJlLnR5cGU9KFMudj8iYyI6Im5vdEMiKSsib250YWlu'@;
put 'c0Vycm9ycyI7YnJlYWs7Y2FzZSJmb3JtdWxhIjpiZS50eXBlPSJleHByZXNzaW9uIixwZT1IcigiZm9ybXVsYSIsUHIoUy5mKSx7fSk7YnJlYWs7Y2FzZSJkYXRlIjpiZS50eXBlPSJ0aW1lUGVyaW9kIixiZS50aW1lUGVyaW9kPVNqW1Mub3BdO2JyZWFrO2Nhc2UidGV4dCI6c3dpdGNoKGJl'@;
put 'LnR5cGU9YmUub3BlcmF0b3I9ZjhbUy5vcF0sYmUudGV4dD1TLnYsUy5vcCl7Y2FzZSJJTiI6cGU9Jzxmb3JtdWxhPk5PVChJU0VSUk9SKFNFQVJDSCgiJytQcihTLnYpKyciLCcrcWkobWUpKyIpKSk8L2Zvcm11bGE+IjticmVhaztjYXNlIk9UIjpwZT0nPGZvcm11bGE+SVNFUlJPUihTRUFS'@;
put 'Q0goIicrUHIoUy52KSsnIiwnK3FpKG1lKSsiKSk8L2Zvcm11bGE+IjticmVhaztjYXNlIlNUIjpwZT0iPGZvcm11bGE+TEVGVCgiK3FpKG1lKSsnLExFTigiJytQcihTLnYpKyciKSk9IicrUHIoUy52KSsnIjwvZm9ybXVsYT4nO2JyZWFrO2Nhc2UiTkQiOnBlPSI8Zm9ybXVsYT5SSUdIVCgi'@;
put 'K3FpKG1lKSsnLExFTigiJytQcihTLnYpKyciKSk9IicrUHIoUy52KSsnIjwvZm9ybXVsYT4nfWJyZWFrO2Nhc2UidmFsIjpiZS50eXBlPSJjZWxsSXMiLGJlLm9wZXJhdG9yPXN5W1Mub3BdLHBlPW51bGwhPVMubWluP0hyKCJmb3JtdWxhIixQcihTdHJpbmcoUy5taW4pKSx7fSkrSHIoImZv'@;
put 'cm11bGEiLFByKFN0cmluZyhTLm1heCkpLHt9KTpIcigiZm9ybXVsYSIsUHIobnVsbCE9Uy52P1N0cmluZygic3RyaW5nIj09dHlwZW9mIFMudj8nIicrUy52LnJlcGxhY2UoLyIvZywnIiInKSsnIic6Uy52KTpTLmYpLHt9KTticmVhaztjYXNlImF2ZyI6c3dpdGNoKGJlLnR5cGU9ImFib3Zl'@;
put 'QXZlcmFnZSIsYmUuYWJvdmVBdmVyYWdlPSJMIj09Uy5vcC5jaGFyQXQoMCk/IjAiOiIxIixTLm9wLmNoYXJBdCgxKSl7Y2FzZSJUIjpiZS5lcXVhbEF2ZXJhZ2U9IjAiO2JyZWFrO2Nhc2UiRSI6YmUuZXF1YWxBdmVyYWdlPSIxIjticmVhaztkZWZhdWx0OmJlLnN0ZERldj1TLm9wLmNoYXJB'@;
put 'dCgxKX1icmVhaztjYXNlInJhbmsiOmJlLnR5cGU9InRvcDEwIixiZS5ib3R0b209IkIiPT1TLm9wLmNoYXJBdCgwKT8iMSI6IjAiLGJlLnBlcmNlbnQ9IlAiPT1TLm9wLmNoYXJBdCgxKT8iMSI6IjAiLGJlLnJhbms9Uy52O2JyZWFrO2Nhc2UiaWNvbiI6YmUudHlwZT0iaWNvblNldCI7dmFy'@;
put 'IFBlPXtpY29uU2V0OlMudixwZXJjZW50OlMucGN0PyJ0cnVlIjoiZmFsc2UifTtTLnJldiYmKFBlLnJldmVyc2U9InRydWUiKSxTLmhpZGRlbiYmKFBlLnNob3dWYWx1ZT0iZmFsc2UiKSxwZT1IcigiaWNvblNldCIsUy50aHJlc2gubWFwKFc0KS5qb2luKCIiKSxQZSk7YnJlYWs7Y2FzZSJz'@;
put 'Y2FsZSI6YmUudHlwZT0iY29sb3JTY2FsZSIscGUrPVc0KFMuY21pbiksUy5jbWlkJiYocGUrPVc0KFMuY21pZCkpLHBlKz1XNChTLmNtYXgpLHBlKz1tZChTLmNtaW4uY29sb3IpLFMuY21pZCYmKHBlKz1tZChTLmNtaWQuY29sb3IpKSxwZT1IcigiY29sb3JTY2FsZSIscGUrPW1kKFMuY21h'@;
put 'eC5jb2xvcikse30pO2JyZWFrO2Nhc2UiYmFyIjpiZS50eXBlPSJkYXRhQmFyIixwZSs9VzQoUy5jbWluKSxwZSs9VzQoUy5jbWF4KSxwZT1IcigiZGF0YUJhciIscGUrPW1kKFMuY29sb3IpLHt9KTticmVhaztkZWZhdWx0OnRocm93IGNvbnNvbGUubG9nKFMpLCJDRiBtaXNzaW5nIHR5cGUg'@;
put 'IitTLnR9cmV0dXJuJzxjb25kaXRpb25hbEZvcm1hdHRpbmcgc3FyZWY9IicrZWUrJyI+JytIcigiY2ZSdWxlIiwiIj09cGU/bnVsbDpwZSxiZSkrIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiJ9KGssSyxPKX0pLmpvaW4oIiIpfShiZVsiIWNvbmRmbXQiXSxPKSksYmVbIiF2YWxpZGF0aW9u'@;
put 'cyJdJiYoZWVbZWUubGVuZ3RoXT1mdW5jdGlvbiBCRChTKXtpZighU3x8MD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBPPVtdLGs9MCxLPTA7SzxTLmxlbmd0aDsrK0spe3ZhciBlZT1TW0tdLG9lPWRoW2VlLnRdO2lmKGVlLnJlZiYmKCJzdHJpbmciIT10eXBlb2YgZWUucmVmfHwtMSE9'@;
put 'ZWUucmVmLmluZGV4T2YoIiAiKXx8KGVlLnJlZj1zcyhlZS5yZWYpLGVlLnJlZi5zJiYhKGVlLnJlZi5zLmM8MCkpKSl7KytrO3ZhciBtZT17dHlwZTpvZSxhbGxvd0JsYW5rOisoMCE9ZWUuYmxhbmspLHNob3dJbnB1dE1lc3NhZ2U6KygwIT1lZS5pbnB1dCksc2hvd0Vycm9yTWVzc2FnZTor'@;
put 'KDAhPWVlLmVycm9yKSxzcXJlZjoic3RyaW5nIj09dHlwZW9mIGVlLnJlZj9lZS5yZWY6cmEoZWUucmVmKX07aWYoZWUuaW5wdXQmJihlZS5pbnB1dC50aXRsZSYmKG1lLnByb21wdFRpdGxlPVlpKGVlLmlucHV0LnRpdGxlKSksZWUuaW5wdXQubWVzc2FnZSYmKG1lLnByb21wdD1ZaShlZS5p'@;
put 'bnB1dC5tZXNzYWdlKSkpLGVlLmVycm9yJiYoZWUuZXJyb3IudGl0bGUmJihtZS5lcnJvclRpdGxlPVlpKGVlLmVycm9yLnRpdGxlKSksZWUuZXJyb3IubWVzc2FnZSYmKG1lLmVycm9yPVlpKGVlLmVycm9yLm1lc3NhZ2UpKSxlZS5lcnJvci5zdHlsZSYmKG1lLmVycm9yU3R5bGU9ZWUuZXJy'@;
put 'b3Iuc3R5bGUpKSwhb2UpdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIitlZS50KTt2YXIgcGU9IiI7c3dpdGNoKGVlLnQpe2Nhc2UiQW55IjpicmVhaztjYXNlIkxpc3QiOmNhc2UiQ3VzdG9tIjppZihlZS5sKXtpZihlZS5sLmpvaW4oIiwiKS5s'@;
put 'ZW5ndGg+MjUwKXRocm93IG5ldyBFcnJvcigiRFYgbGVuZ3RoID4gMjUwIHRyaWdnZXJzIGNvcnJ1cHRpb24gZXJyb3JzIGluIEV4Y2VsLiAgVXNlIGEgbG9va3VwIHRhYmxlIik7cGU9Jzxmb3JtdWxhMT4iJytQcihlZS5sLmpvaW4oIiwiKSkrJyI8L2Zvcm11bGExPid9ZWxzZSBwZT0iPGZv'@;
put 'cm11bGExPiIrUHIoZWUuZikrIjwvZm9ybXVsYTE+IjticmVhaztjYXNlIkRhdGUiOmNhc2UiVGltZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYoIXN5W2VlLm9wXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK2VlLm9wKyIg'@;
put 'Zm9yICIrZWUudCk7aWYobWUub3BlcmF0b3I9c3lbZWUub3BdLG51bGwhPWVlLnYpcGU9Ijxmb3JtdWxhMT4iK1ByKFN0cmluZyhlZS52IGluc3RhbmNlb2YgRGF0ZT9KZShlZS52KTplZS52KSkrIjwvZm9ybXVsYTE+IjtlbHNle2lmKG51bGw9PWVlLm1pbnx8bnVsbD09ZWUubWF4KXRocm93'@;
put 'IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrZWUudCk7cGU9Ijxmb3JtdWxhMT4iK1ByKFN0cmluZyhlZS5taW4gaW5zdGFuY2VvZiBEYXRlP0plKGVlLm1pbik6ZWUubWluKSkrIjwvZm9ybXVsYTE+PGZvcm11'@;
put 'bGEyPiIrUHIoU3RyaW5nKGVlLm1heCBpbnN0YW5jZW9mIERhdGU/SmUoZWUubWF4KTplZS5tYXgpKSsiPC9mb3JtdWxhMj4ifX1PLnB1c2goSHIoImRhdGFWYWxpZGF0aW9uIixwZXx8bnVsbCxtZSkpfX1yZXR1cm4gaz4wPyc8ZGF0YVZhbGlkYXRpb25zIGNvdW50PSInK2srJyI+JytPLmpv'@;
put 'aW4oIiIpKyI8L2RhdGFWYWxpZGF0aW9ucz4iOiIifShiZVsiIXZhbGlkYXRpb25zIl0pKTt2YXIgQnQsYnQ9LTEsRHQ9LTE7aWYoYmVbIiFsaW5rcyJdLmxlbmd0aD4wJiYoZWVbZWUubGVuZ3RoXT0iPGh5cGVybGlua3M+IixiZVsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihDbil7Q25b'@;
put 'MV0uVGFyZ2V0JiYoQnQ9e3JlZjpDblswXX0sIiMiIT1DblsxXS5UYXJnZXQuY2hhckF0KDApJiYoRHQ9RXIoSywtMSxQcihDblsxXS5UYXJnZXQpLnJlcGxhY2UoLyMuKiQvLCIiKSxYYS5ITElOSyksQnRbInI6aWQiXT0icklkIitEdCksKGJ0PUNuWzFdLlRhcmdldC5pbmRleE9mKCIjIikp'@;
put 'Pi0xJiYoQnQubG9jYXRpb249UHIoQ25bMV0uVGFyZ2V0LnNsaWNlKGJ0KzEpKSksQ25bMV0uVG9vbHRpcCYmKEJ0LnRvb2x0aXA9UHIoQ25bMV0uVG9vbHRpcCkpLGVlW2VlLmxlbmd0aF09SHIoImh5cGVybGluayIsbnVsbCxCdCkpfSksZWVbZWUubGVuZ3RoXT0iPC9oeXBlcmxpbmtzPiIp'@;
put 'LGRlbGV0ZSBiZVsiIWxpbmtzIl0sZXQpe3ZhciBPdD1mdW5jdGlvbiBoaihTKXtpZihTLnByb3BzKXt2YXIgTz17fSxrPVMucHJvcHM7cmV0dXJuIGsuZ3JpZGxpbmVzJiYoTy5ncmlkTGluZXM9Ty5ncmlkTGluZXNTZXQ9MSksay5oZWFkaW5ncyYmKE8uaGVhZGluZ3M9MSksay5jZW50ZXJY'@;
put 'JiYoTy5ob3Jpem9udGFsQ2VudGVyZWQ9MSksay5jZW50ZXJZJiYoTy52ZXJ0aWNhbENlbnRlcmVkPTEpLEhyKCJwcmludE9wdGlvbnMiLG51bGwsTyl9cmV0dXJuIiJ9KGV0KTtPdC5sZW5ndGgmJihlZVtlZS5sZW5ndGhdPU90KX1pZigobnVsbCE9YmVbIiFtYXJnaW5zIl18fGV0JiZldC5t'@;
put 'YXJnaW5zKSYmKGVlW2VlLmxlbmd0aF09ZnVuY3Rpb24gdmooUyl7cmV0dXJuIEozKFMpLEhyKCJwYWdlTWFyZ2lucyIsbnVsbCxTKX0oYmVbIiFtYXJnaW5zIl18fGV0Lm1hcmdpbnMpKSxldCl7dmFyIEt0PWZ1bmN0aW9uIFBEKFMpe2lmKFMucHJvcHMpe3ZhciBPPXt9LGs9Uy5wcm9wcztp'@;
put 'ZihrLm9yaWVudGF0aW9uJiYoTy5vcmllbnRhdGlvbj1rLm9yaWVudGF0aW9uKSxrLnNjYWxlJiYoTy5zY2FsZT1rLnNjYWxlKSxrLmZpdCYmKG51bGwhPWsuZml0LmhlaWdodCYmKE8uZml0VG9IZWlnaHQ9ay5maXQuaGVpZ2h0KSxudWxsIT1rLmZpdC53aWR0aCYmKE8uZml0VG9XaWR0aD1r'@;
put 'LmZpdC53aWR0aCkpLGsuZHBpJiYoTy5ob3Jpem9udGFsRHBpPU8udmVydGljYWxEcGk9ay5kcGkpLG51bGwhPWsuZmlyc3QmJihPLmZpcnN0UGFnZU51bWJlcj1rLmZpcnN0LE8udXNlRmlyc3RQYWdlTnVtYmVyPTEpLGsuYncmJihPLmJsYWNrQW5kV2hpdGU9MSksay5kcmFmdCYmKE8uZHJh'@;
put 'ZnQ9MSksay5jb21tZW50cyYmKE8uY2VsbENvbW1lbnRzPUREW2suY29tbWVudHNdfHwibm9uZSIpLGsuZXJyb3JzJiYoTy5lcnJvcnM9UkRbay5lcnJvcnNdfHwibm9uZSIpLGsucGFwZXIpc3dpdGNoKHR5cGVvZiBrLnBhcGVyKXtjYXNlIm51bWJlciI6Ty5wYXBlclNpemU9ay5wYXBlcjti'@;
put 'cmVhaztjYXNlInN0cmluZyI6cEJbay5wYXBlcl0/Ty5wYXBlclNpemU9cEJbay5wYXBlcl06K2sucGFwZXImJihPLnBhcGVyU2l6ZT0ray5wYXBlcik7YnJlYWs7Y2FzZSJvYmplY3QiOmlmKCFrLnBhcGVyLmhlaWdodHx8IWsucGFwZXIud2lkdGgpdGhyb3ciQ3VzdG9tIFBhcGVyIFNpemUg'@;
put 'bXVzdCBpbmNsdWRlIHdpZHRoIGFuZCBoZWlnaHQhIjtPLnBhcGVySGVpZ2h0PWsucGFwZXIuaGVpZ2h0LE8ucGFwZXJXaWR0aD1rLnBhcGVyLndpZHRofXJldHVyblsxLCEwLCJ0cnVlIiwib3ZlciJdLmluZGV4T2Yoay5vcmRlcik+LTEmJihPLnBhZ2VPcmRlcj0ib3ZlclRoZW5Eb3duIiks'@;
put 'SHIoInBhZ2VTZXR1cCIsbnVsbCxPKX1yZXR1cm4iIn0oZXQpO0t0Lmxlbmd0aCYmKGVlW2VlLmxlbmd0aF09S3QpLEt0PWZ1bmN0aW9uIENqKFMpe3ZhciBPPVtdLGs9IiIsSz0iIixlZT0iIixvZT0iIixtZT0iIixwZT0iIixiZT0iIixQZT1lMShTLmhlYWRlcik7UGUubGVuZ3RoJiYoSz1Q'@;
put 'ZVswXSxwZT1QZVsxXSxvZT1QZVsyXSk7dmFyIFZlPWUxKFMuZm9vdGVyKTtyZXR1cm4gVmUubGVuZ3RoJiYoZWU9VmVbMF0sYmU9VmVbMV0sbWU9VmVbMl0pLEsmJk8ucHVzaCgiPG9kZEhlYWRlcj4iK1ByKEspKyI8L29kZEhlYWRlcj4iKSxlZSYmTy5wdXNoKCI8b2RkRm9vdGVyPiIrUHIo'@;
put 'ZWUpKyI8L29kZEZvb3Rlcj4iKSwobWUhPWVlfHxvZSE9SykmJihrKz0nIGRpZmZlcmVudE9kZEV2ZW49IjEiJyxPLnB1c2goIjxldmVuSGVhZGVyPiIrUHIob2UpKyI8L2V2ZW5IZWFkZXI+IiksTy5wdXNoKCI8ZXZlbkZvb3Rlcj4iK1ByKG1lKSsiPC9ldmVuRm9vdGVyPiIpKSwoYmUhPWVl'@;
put 'fHxwZSE9SykmJihrKz0nIGRpZmZlcmVudEZpcnN0PSIxIicsTy5wdXNoKCI8Zmlyc3RIZWFkZXI+IitQcihwZSkrIjwvZmlyc3RIZWFkZXI+IiksTy5wdXNoKCI8Zmlyc3RGb290ZXI+IitQcihiZSkrIjwvZmlyc3RGb290ZXI+IikpLE8ubGVuZ3RoPyI8aGVhZGVyRm9vdGVyIitrKyI+IitP'@;
put 'LmpvaW4oIiIpKyI8L2hlYWRlckZvb3Rlcj4iOiIifShldCksS3QubGVuZ3RoJiYoZWVbZWUubGVuZ3RoXT1LdCl9aWYoKG51bGwhPWJlWyIhcm93QnJlYWtzIl18fGV0JiZldC5yb3dCcmVha3MpJiYoZWVbZWUubGVuZ3RoXT1mdW5jdGlvbiBwaihTKXtpZigwPT1TLmxlbmd0aClyZXR1cm4i'@;
put 'Ijtmb3IodmFyIE89Wyc8cm93QnJlYWtzIGNvdW50PSInK1MubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrUy5sZW5ndGgrJyI+J10saz0wO2s8Uy5sZW5ndGg7KytrKU8ucHVzaCgnPGJyayBpZD0iJytTW2tdLlIrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIE8uam9pbigiIikrIjwvcm93'@;
put 'QnJlYWtzPiJ9KGJlWyIhcm93QnJlYWtzIl18fGV0LnJvd0JyZWFrcykpLChudWxsIT1iZVsiIWNvbEJyZWFrcyJdfHxldCYmZXQuY29sQnJlYWtzKSYmKGVlW2VlLmxlbmd0aF09ZnVuY3Rpb24gQ1MoUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBPPVsnPGNvbEJyZWFrcyBj'@;
put 'b3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylPLnB1c2goJzxicmsgaWQ9IicrU1trXS5DKyciIG1hbj0iMSIvPicpO3JldHVybiBPLmpvaW4oIiIpKyI8L2NvbEJyZWFrcz4ifShiZVsiIWNvbEJyZWFrcyJd'@;
put 'fHxldC5jb2xCcmVha3MpKSwoIU98fE8uaWdub3JlRUN8fG51bGw9PU8uaWdub3JlRUMpJiYoZWVbZWUubGVuZ3RoXT1WYSgiaWdub3JlZEVycm9ycyIsSHIoImlnbm9yZWRFcnJvciIsbnVsbCx7bnVtYmVyU3RvcmVkQXNUZXh0OjEsc3FyZWY6UGV9KSkpLGJlWyIhY2hhcnRzIl0mJlllLnB1'@;
put 'c2guYXBwbHkoWWUsYmVbIiFjaGFydHMiXSksYmVbIiFpbWFnZXMiXSYmWWUucHVzaC5hcHBseShZZSxiZVsiIWltYWdlcyJdKSxiZVsiIXNoYXBlcyJdJiZZZS5wdXNoLmFwcGx5KFllLGJlWyIhc2hhcGVzIl0pLFllLmxlbmd0aD4wJiYoRHQ9RXIoSywtMSwiLi4vZHJhd2luZ3MvZHJhd2lu'@;
put 'ZyIrKFMrMSkrIi54bWwiLFhhLkRSQVcpLGVlW2VlLmxlbmd0aF09SHIoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitEdH0pLGJlWyIhZHJhd2luZyJdPVllKSwoYmVbIiFjb21tZW50cyJdLmxlbmd0aD4wfHwoYmVbIiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjApJiYoRHQ9RXIoSywt'@;
put 'MSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKFMrMSkrIi52bWwiLFhhLlZNTCksZWVbZWUubGVuZ3RoXT1IcigibGVnYWN5RHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK0R0fSksYmVbIiFsZWdhY3kiXT1EdCksYmVbIiFwcmludCJdJiZiZVsiIXByaW50Il0uaW1hZ2VzKXt2YXIgVG49'@;
put 'YmVbIiFwcmludCJdLmltYWdlcyxzcj0wO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihDbil7VG5bQ25dJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24odXIpe1RuW0NuXVt1cl0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChm'@;
put 'dW5jdGlvbihlcil7aWYoQXJyYXkuaXNBcnJheShUbltDbl1bdXJdW2VyXSkpZm9yKHZhciBqbj0wO2puPFRuW0NuXVt1cl1bZXJdLmxlbmd0aDsrK2puKVRuW0NuXVt1cl1bZXJdW2puXSYmKFRuW0NuXVt1cl1bZXJdW2puXS5fY250PXNyKyspfSl9KX0pLHNyPjAmJihEdD1FcihLLC0xLCIu'@;
put 'Li9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiSEYudm1sIixYYS5WTUwpLGVlW2VlLmxlbmd0aF09SHIoImxlZ2FjeURyYXdpbmdIRiIsbnVsbCx7InI6aWQiOiJySWQiK0R0fSksYmVbIiFsZWdhY3lIRiJdPUR0KX1yZXR1cm4oYmVbIiF0YWJsZXMiXXx8W10pLmxlbmd0aD4wJiYoZWVb'@;
put 'ZWUubGVuZ3RoXT0nPHRhYmxlUGFydHMgY291bnQ9IicrYmVbIiF0YWJsZXMiXS5sZW5ndGgrJyI+JyxiZVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24oQ24sdXIpe0R0PUVyKEssLTEsIi4uL3RhYmxlcy90YWJsZSIrKFMrMSkrIl8iK3VyKyIueG1sIixYYS5UQUJMRSksZWVbZWUubGVu'@;
put 'Z3RoXT0nPHRhYmxlUGFydCByOmlkPSJySWQnK0R0KyciLz4nfSksZWVbZWUubGVuZ3RoXT0iPC90YWJsZVBhcnRzPiIpLGVlLmxlbmd0aD4xJiYoZWVbZWUubGVuZ3RoXT0iPC93b3Jrc2hlZXQ+IixlZVsxXT1lZVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksZWUuam9pbigiIil9ZnVuY3Rpb24g'@;
put 'QWooUyxPLGssSyl7dmFyIGVlPWZ1bmN0aW9uIFRqKFMsTyxrKXt2YXIgSz12bigxNDUpLGVlPShrWyIhcm93cyJdfHxbXSlbU118fHt9O0sud3JpdGVfc2hpZnQoNCxTKSxLLndyaXRlX3NoaWZ0KDQsMCk7dmFyIG9lPTMyMDtlZS5ocHg/b2U9MjAqWjMoZWUuaHB4KTplZS5ocHQmJihvZT0y'@;
put 'MCplZS5ocHQpLEsud3JpdGVfc2hpZnQoMixvZSksSy53cml0ZV9zaGlmdCgxLDApO3ZhciBtZT0wO2VlLmxldmVsJiYobWV8PWVlLmxldmVsKSxlZS5oaWRkZW4mJihtZXw9MTYpLChlZS5ocHh8fGVlLmhwdCkmJihtZXw9MzIpLEsud3JpdGVfc2hpZnQoMSxtZSksSy53cml0ZV9zaGlmdCgx'@;
put 'LDApO3ZhciBwZT0wLGJlPUsubDtLLmwrPTQ7Zm9yKHZhciBQZT17cjpTLGM6MH0sVmU9MDtWZTwxNjsrK1ZlKWlmKCEoTy5zLmM+VmUrMTw8MTB8fE8uZS5jPFZlPDwxMCkpe2Zvcih2YXIgWWU9LTEsZXQ9LTEsY3Q9VmU8PDEwO2N0PFZlKzE8PDEwOysrY3QpUGUuYz1jdCwoQXJyYXkuaXNB'@;
put 'cnJheShrKT8oa1tQZS5yXXx8W10pW1BlLmNdOmtbcWkoUGUpXSkmJihZZTwwJiYoWWU9Y3QpLGV0PWN0KTtZZTwwfHwoKytwZSxLLndyaXRlX3NoaWZ0KDQsWWUpLEsud3JpdGVfc2hpZnQoNCxldCkpfXZhciBpdD1LLmw7cmV0dXJuIEsubD1iZSxLLndyaXRlX3NoaWZ0KDQscGUpLEsubD1p'@;
put 'dCxLLmxlbmd0aD5LLmw/Sy5zbGljZSgwLEsubCk6S30oSyxrLE8pOyhlZS5sZW5ndGg+MTd8fChPWyIhcm93cyJdfHxbXSlbS10pJiZWcihTLCJCcnRSb3dIZHIiLGVlKX12YXIga2o9aHUsRGo9X2Y7ZnVuY3Rpb24gQmooUyl7cmV0dXJuW2UyKFMpLFJsKFMpLCJuIl19dmFyICREPWh1LEM4'@;
put 'PV9mLEpEPVsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0sUUQ9WyJBbnkiLCJXaG9sZSIsIkRlY2ltYWwiLCJMaXN0IiwiRGF0ZSIsIlRpbWUiLCJMZW5ndGgiLCJDdXN0b20iXSxQUz1bIklOIiwiT1QiLCJFUSIsIk5FIiwiR1QiLCJMVCIsIkdFIiwi'@;
put 'TEUiXTtmdW5jdGlvbiBlSShTKXt2YXIgTz12big0KSxrPVtPXSxLPVFELmluZGV4T2YoUy50KTtpZihLPDApdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIitTLnQpO3ZhciBvZT1QUy5pbmRleE9mKFMub3ApO3N3aXRjaChLKXtjYXNlIDA6Y2Fz'@;
put 'ZSAzOmNhc2UgNzpvZT0wO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PW9lKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrUy5vcCsiIGZvciAiK1MudCl9Ty53cml0ZV9zaGlmdCgxLDB8SyksTy53cml0ZV9zaGlmdCgxLDEpLE8ud3JpdGVfc2hpZnQoMSwxMnxvZTw8'@;
put 'NCksTy53cml0ZV9zaGlmdCgxLDApLGsucHVzaChmdW5jdGlvbiBMMyhTKXt2YXIgTz1TLnNwbGl0KC9ccyosXHMqLyksaz12big0KTtrLndyaXRlX3NoaWZ0KDQsTy5sZW5ndGgpO3ZhciBLPVtrXTtyZXR1cm4gTy5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtLLnB1c2goX2Yoc3MoZWUpKSl9KSxV'@;
put 'KEspfSgic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOnJhKFMucmVmKSkpO3ZhciBtZT12bigxNik7bWUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxtZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLG1lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksbWUud3JpdGVfc2hpZnQoNCw0'@;
put 'Mjk0OTY3Mjk1KSxrLnB1c2gobWUpO3ZhciBwZT12big4KTtwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGJlPTE7c3dpdGNoKFMudCl7Y2FzZSJBbnkiOmsucHVzaChwZSksay5wdXNoKHBlKTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNl'@;
put 'Ildob2xlIjppZihudWxsIT1TLnZ8fG51bGwhPVMuZilrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLnY/c1MoUy52KTpVNChudWxsPT1TLnY/Uy5mOlMudikpO2Vsc2V7aWYobnVsbD09Uy5taW58fG51bGw9PVMubWF4KXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9y'@;
put 'IGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUy50O2sucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWluP3NTKFMubWluKTpVNChTLm1pbikpLGsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWF4P3NTKFMubWF4KTpVNChTLm1heCkpLGJlPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihu'@;
put 'dWxsIT1TLmwpe2sucHVzaChvUyhTLmwuam9pbigiLCIpKSk7YnJlYWt9Y2FzZSJDdXN0b20iOmlmKCJudWxsIiE9Uy5mKXtrLnB1c2goVTQoUy5mKSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgZmAiKygiTGlzdCI9PVMudD8iIG9yIGBsYCI6IiIpKyIgcmVx'@;
put 'dWlyZWQgZm9yIFR5cGUgIitTLnQ7ZGVmYXVsdDp0aHJvdyJYTFNCIGRvZXMgbm90IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLnR9cmV0dXJuIDE9PWJlJiZrLnB1c2gocGUpLFUoayl9ZnVuY3Rpb24gaXooUyxPLGssSyxlZSxvZSxtZSl7aWYodm9pZCAwPT09Ty52JiZudWxs'@;
put 'PT1PLnN8fCJ6Ij09PU8udCYmIWVlLnNoZWV0U3R1YnMpcmV0dXJuITE7dmFyIHBlPSIiO3N3aXRjaChPLnQpe2Nhc2UiYiI6cGU9Ty52PyIxIjoiMCI7YnJlYWs7Y2FzZSJkIjooTz1KdChPKSkuej1PLnp8fEEuX3RhYmxlWzE0XSxPLnY9SmUoTmUoTy52KSksTy50PSJuIjticmVhaztjYXNl'@;
put 'Im4iOmNhc2UiZSI6cGU9IiIrTy52O2JyZWFrO2RlZmF1bHQ6cGU9Ty52fXZhciBiZT17cjprLGM6S307c3dpdGNoKGJlLnM9czAoZWUuY2VsbFhmcyxlZS5jZWxsU3R5bGVYZnMsTyxlZSksTy5sJiZvZVsiIWxpbmtzIl0ucHVzaChbcWkoYmUpLE8ubF0pLE8uYyYmb2VbIiFjb21tZW50cyJd'@;
put 'LnB1c2goW3FpKGJlKSxPLmNdKSxPLnQpe2Nhc2UicyI6Y2FzZSJzdHIiOmlmKGVlLmJvb2tTU1Qpe2lmKHBlPXVTKGVlLlN0cmluZ3MsTy52LE8uUj9PLnI9Sm8oTy5SKTpudWxsLGVlLnJldlN0cmluZ3MpLE8uUilmb3IodmFyIFBlPTA7UGU8Ty5SLmxlbmd0aDsrK1BlKU8uUltQZV0ucyYm'@;
put 'czAoZWUuY2VsbFhmcyxlZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOk8uUltQZV0uc30sZWUpO2JlLnQ9InMiLGJlLnY9cGUsbWU/VnIoUywiQnJ0U2hvcnRJc3N0IixmdW5jdGlvbiBjeShTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXZuKDgpKSxoaShPLGspLGsud3JpdGVfc2hpZnQo'@;
put 'NCxPLnYpLGt9KDAsYmUpKTpWcihTLCJCcnRDZWxsSXNzdCIsZnVuY3Rpb24gSGooUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz12bigxMikpLENyKE8sayksay53cml0ZV9zaGlmdCg0LE8udiksa30oMCxiZSkpfWVsc2UgYmUudD0ic3RyIixtZT9WcihTLCJCcnRTaG9ydFN0IixmdW5jdGlv'@;
put 'biBZaihTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXZuKDgrNCpTLnYubGVuZ3RoKSksaGkoTyxrKSxPYyhTLnYsayksay5sZW5ndGg+ay5sP2suc2xpY2UoMCxrLmwpOmt9KE8sYmUpKTpWcihTLCJCcnRDZWxsU3QiLGZ1bmN0aW9uIFpqKFMsTyxrKXtyZXR1cm4gbnVsbD09ayYmKGs9dm4o'@;
put 'MTIrNCpTLnYubGVuZ3RoKSksQ3IoTyxrKSxPYyhTLnYsayksay5sZW5ndGg+ay5sP2suc2xpY2UoMCxrLmwpOmt9KE8sYmUpKTtyZXR1cm4hMDtjYXNlIm4iOnJldHVybiBPLnY9PSgwfE8udikmJk8udj4tMWUzJiZPLnY8MWUzP21lP1ZyKFMsIkJydFNob3J0UmsiLGZ1bmN0aW9uIFVqKFMs'@;
put 'TyxrKXtyZXR1cm4gbnVsbD09ayYmKGs9dm4oOCkpLGhpKE8sayksc3YoUy52LGspLGt9KE8sYmUpKTpWcihTLCJCcnRDZWxsUmsiLGZ1bmN0aW9uIHpqKFMsTyxrKXtyZXR1cm4gbnVsbD09ayYmKGs9dm4oMTIpKSxDcihPLGspLHN2KFMudixrKSxrfShPLGJlKSk6bWU/VnIoUywiQnJ0U2hv'@;
put 'cnRSZWFsIixmdW5jdGlvbiBqbmUoUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz12bigxMikpLGhpKE8sayksSXUoUy52LGspLGt9KE8sYmUpKTpWcihTLCJCcnRDZWxsUmVhbCIsZnVuY3Rpb24gVmooUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz12bigxNikpLENyKE8sayksSXUoUy52LGsp'@;
put 'LGt9KE8sYmUpKSwhMDtjYXNlImIiOnJldHVybiBiZS50PSJiIixtZT9WcihTLCJCcnRTaG9ydEJvb2wiLGZ1bmN0aW9uIERTKFMsTyxrKXtyZXR1cm4gbnVsbD09ayYmKGs9dm4oNSkpLGhpKE8sayksay53cml0ZV9zaGlmdCgxLFMudj8xOjApLGt9KE8sYmUpKTpWcihTLCJCcnRDZWxsQm9v'@;
put 'bCIsZnVuY3Rpb24gUGooUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz12big5KSksQ3IoTyxrKSxrLndyaXRlX3NoaWZ0KDEsUy52PzE6MCksa30oTyxiZSkpLCEwO2Nhc2UiZSI6cmV0dXJuIGJlLnQ9ImUiLG1lP1ZyKFMsIkJydFNob3J0RXJyb3IiLGZ1bmN0aW9uIHdsKFMsTyxrKXtyZXR1'@;
put 'cm4gbnVsbD09ayYmKGs9dm4oOCkpLGhpKE8sayksay53cml0ZV9zaGlmdCgxLFMudiksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMSwwKSxrfShPLGJlKSk6VnIoUywiQnJ0Q2VsbEVycm9yIixmdW5jdGlvbiBiOChTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXZuKDkpKSxD'@;
put 'cihPLGspLGsud3JpdGVfc2hpZnQoMSxTLnYpLGt9KE8sYmUpKSwhMH1yZXR1cm4gbWU/VnIoUywiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gV0QoUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz12big0KSksaGkoTyxrKX0oMCxiZSkpOlZyKFMsIkJydENlbGxCbGFuayIsZnVuY3Rpb24gUmoo'@;
put 'UyxPLGspe3JldHVybiBudWxsPT1rJiYoaz12big4KSksQ3IoTyxrKX0oMCxiZSkpLCEwfWZ1bmN0aW9uIHo1KFMsTyxrLEspe3ZhciBlZT12aSgpLG9lPWsuU2hlZXROYW1lc1tTXSxtZT1rLlNoZWV0c1tvZV18fHt9LHBlPW9lO3RyeXtrJiZrLldvcmtib29rJiYocGU9ay5Xb3JrYm9vay5T'@;
put 'aGVldHNbU10uQ29kZU5hbWV8fHBlKX1jYXRjaHt9dmFyIGJlPXNzKG1lWyIhcmVmIl18fCJBMSIpO2lmKGJlLmUuYz4xNjM4M3x8YmUuZS5yPjEwNDg1NzUpe2lmKE8uV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisobWVbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1p'@;
put 'dCBBMTpYRkQxMDQ4NTc2Iik7YmUuZS5jPU1hdGgubWluKGJlLmUuYywxNjM4MyksYmUuZS5yPU1hdGgubWluKGJlLmUuYywxMDQ4NTc1KX1yZXR1cm4gbWVbIiFsaW5rcyJdPVtdLG1lWyIhY29tbWVudHMiXT1bXSxWcihlZSwiQnJ0QmVnaW5TaGVldCIpLChrLnZiYXJhd3x8bWVbIiFvdXRs'@;
put 'aW5lIl0pJiZWcihlZSwiQnJ0V3NQcm9wIixmdW5jdGlvbiBJaihTLE8sayl7bnVsbD09ayYmKGs9dm4oODQrNCpTLmxlbmd0aCkpO3ZhciBLPTE5MjtPJiYoTy5hYm92ZSYmKEsmPS02NSksTy5sZWZ0JiYoSyY9LTEyOSkpLGsud3JpdGVfc2hpZnQoMSxLKTtmb3IodmFyIGVlPTE7ZWU8Mzsr'@;
put 'K2VlKWsud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gd2Yoe2F1dG86MX0sayksay53cml0ZV9zaGlmdCgtNCwtMSksay53cml0ZV9zaGlmdCgtNCwtMSkscjUoUyxrKSxrLnNsaWNlKDAsay5sKX0ocGUsbWVbIiFvdXRsaW5lIl0pKSxWcihlZSwiQnJ0V3NEaW0iLERqKGJlKSksZnVuY3Rpb24g'@;
put 'bHooUyxPLGspe1ZyKFMsIkJydEJlZ2luV3NWaWV3cyIpLFZyKFMsIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBNOChTLE8sayl7bnVsbD09ayYmKGs9dm4oMzApKTt2YXIgSz05MjQ7cmV0dXJuKCgoT3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihLfD0zMiksWnQoU1siIWdyaWRs'@;
put 'aW5lcyJdKSYmKEsmPS01KSxadCgoKChPfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYoSyY9LTUpLGsud3JpdGVfc2hpZnQoMixLKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0'@;
put 'ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDQsMCksa30oTyxrKSksT1siIWZyZWV6ZSJdJiZWcihTLCJCcnRQYW5l'@;
put 'IixmdW5jdGlvbiAkaihTKXt2YXIgTz1WcyhTWyIhZnJlZXplIl0pLGs9dm4oMjkpO3JldHVybiBrLndyaXRlX3NoaWZ0KDgsTy5jLCJmIiksay53cml0ZV9zaGlmdCg4LE8uciwiZiIpLGsud3JpdGVfc2hpZnQoNCxPLnIpLGsud3JpdGVfc2hpZnQoNCxPLmMpLGsud3JpdGVfc2hpZnQoNCww'@;
put 'KSxrLndyaXRlX3NoaWZ0KDEsMyksa30oTykpLE9bIiFzZWwiXSYmVnIoUywiQnJ0U2VsIixmdW5jdGlvbiBLaihTLE8pe3ZhciBrPXZuKDM2KSxLPVMuY2VsbDtpZighSyl7aWYoIVMucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5n'@;
put 'ZSIpO0s9cWkoU28oUy5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgZWU9InN0cmluZyI9PXR5cGVvZiBLP1ZzKEspOks7aWYoTyl7dmFyIG9lPSJzdHJpbmciPT10eXBlb2YgTz9WcyhPKTpPO2sud3JpdGVfc2hpZnQoNCxlZS5yPj1vZS5yJiZlZS5jPj1vZS5jPzA6ZWUucj49'@;
put 'b2UuciYmZWUuYzxvZS5jPzI6ZWUucjxvZS5yJiZlZS5jPj1vZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCxlZS5yKSxrLndyaXRlX3NoaWZ0KDQsZWUuYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwxKSxrLndyaXRl'@;
put 'X3NoaWZ0KDQsZWUuciksay53cml0ZV9zaGlmdCg0LGVlLnIpLGsud3JpdGVfc2hpZnQoNCxlZS5jKSxrLndyaXRlX3NoaWZ0KDQsZWUuYyksa30oT1siIXNlbCJdLE9bIiFmcmVlemUiXSkpLFZyKFMsIkJydEVuZFdzVmlldyIpLFZyKFMsIkJydEVuZFdzVmlld3MiKX0oZWUsbWUsay5Xb3Jr'@;
put 'Ym9vayksZnVuY3Rpb24gc3ooUyxPKXshT3x8IU9bIiFjb2xzIl18fChWcihTLCJCcnRCZWdpbkNvbEluZm9zIiksT1siIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGssSyl7ayYmVnIoUywiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gcWooUyxPLGspe251bGw9PWsmJihrPXZuKDE4KSk7dmFyIEs9'@;
put 'dTgoUyxPKTtrLndyaXRlX3NoaWZ0KC00LFMpLGsud3JpdGVfc2hpZnQoLTQsUyksay53cml0ZV9zaGlmdCg0LDI1NiooSy53aWR0aHx8MTApKSxrLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGVlPTA7cmV0dXJuIE8uaGlkZGVuJiYoZWV8PTEpLCJudW1iZXIiPT10eXBlb2YgSy53aWR0aCYmKGVl'@;
put 'fD0yKSxPLmxldmVsJiYoZWV8PU8ubGV2ZWw8PDgpLGsud3JpdGVfc2hpZnQoMixlZSksa30oSyxrKSl9KSxWcihTLCJCcnRFbmRDb2xJbmZvcyIpKX0oZWUsbWUpLGZ1bmN0aW9uIHRJKFMsTyxrLEspe3ZhciBlZT1zcyhPWyIhcmVmIl18fCJBMSIpLG1lPSIiLHBlPVtdO1ZyKFMsIkJydEJl'@;
put 'Z2luU2hlZXREYXRhIik7dmFyIGJlPUFycmF5LmlzQXJyYXkoTyksUGU9ZWUuZS5yO09bIiFyb3dzIl0mJihQZT1NYXRoLm1heChlZS5lLnIsT1siIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgVmU9ZWUucy5yO1ZlPD1QZTsrK1ZlKXttZT1qaShWZSksQWooUyxPLGVlLFZlKTt2YXIgWWU9'@;
put 'ITE7aWYoVmU8PWVlLmUucilmb3IodmFyIGV0PWVlLnMuYztldDw9ZWUuZS5jOysrZXQpe1ZlPT09ZWUucy5yJiYocGVbZXRdPWthKGV0KSk7dmFyIGN0PWJlPyhPW1ZlXXx8W10pW2V0XTpPW3BlW2V0XSttZV07WWU9ISFjdCYmaXooUyxjdCxWZSxldCxLLE8sWWUpfX1WcihTLCJCcnRFbmRT'@;
put 'aGVldERhdGEiKX0oZWUsbWUsMCxPKSxmdW5jdGlvbiBabmUoUyxPKXtPWyIhcHJvdGVjdCJdJiZWcihTLCJCcnRTaGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIGh5KFMsTyl7cmV0dXJuIG51bGw9PU8mJihPPXZuKDY2KSksTy53cml0ZV9zaGlmdCgyLFMucGFzc3dvcmQ/THYoUy5wYXNzd29y'@;
put 'ZCk6MCksTy53cml0ZV9zaGlmdCg0LDEpLFtbIm9iamVjdHMiLCExXSxbInNjZW5hcmlvcyIsITFdLFsiZm9ybWF0Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEwXSxbImZvcm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMiLCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5'@;
put 'cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMiLCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxbInNlbGVjdExvY2tlZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRvRmlsdGVyIiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2VsZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKGspe08ud3JpdGVfc2hpZnQoNCxrWzFdP251bGw9PVNba1swXV18fFNba1swXV0/MDoxOm51bGwhPVNba1swXV0mJlNba1swXV0/MDoxKX0pLE99KE9bIiFwcm90ZWN0Il0pKX0oZWUsbWUpLGZ1bmN0aW9uIG5JKFMsTyxrLEspe2lmKE9bIiFhdXRvZmlsdGVyIl0pe3ZhciBlZT1P'@;
put 'WyIhYXV0b2ZpbHRlciJdLG9lPSJzdHJpbmciPT10eXBlb2YgZWUucmVmP2VlLnJlZjpyYShlZS5yZWYpO2suV29ya2Jvb2t8fChrLldvcmtib29rPXtTaGVldHM6W119KSxrLldvcmtib29rLk5hbWVzfHwoay5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIG1lPWsuV29ya2Jvb2suTmFtZXMscGU9'@;
put 'U28ob2UpO3BlLnMucj09cGUuZS5yJiYocGUuZS5yPVNvKE9bIiFyZWYiXSkuZS5yLG9lPXJhKHBlKSk7Zm9yKHZhciBiZT0wO2JlPG1lLmxlbmd0aDsrK2JlKXt2YXIgUGU9bWVbYmVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1QZS5OYW1lJiZQZS5TaGVldD09Syl7UGUuUmVmPSIn'@;
put 'IitrLlNoZWV0TmFtZXNbS10rIichIitvZTticmVha319YmU9PW1lLmxlbmd0aCYmbWUucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpLLFJlZjoiJyIray5TaGVldE5hbWVzW0tdKyInISIrb2V9KSxWcihTLCJCcnRCZWdpbkFGaWx0ZXIiLF9mKHNzKG9lKSkpLFZy'@;
put 'KFMsIkJydEVuZEFGaWx0ZXIiKX19KGVlLG1lLGssUyksZnVuY3Rpb24gYXooUyxPKXshT3x8IU9bIiFtZXJnZXMiXXx8KFZyKFMsIkJydEJlZ2luTWVyZ2VDZWxscyIsZnVuY3Rpb24gS0QoUyxPKXtyZXR1cm4gbnVsbD09TyYmKE89dm4oNCkpLE8ud3JpdGVfc2hpZnQoNCxTKSxPfShPWyIh'@;
put 'bWVyZ2VzIl0ubGVuZ3RoKSksT1siIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24oayl7VnIoUywiQnJ0TWVyZ2VDZWxsIixDOChrKSl9KSxWcihTLCJCcnRFbmRNZXJnZUNlbGxzIikpfShlZSxtZSksZnVuY3Rpb24gdXooUyxPKXtpZihPKXtWcihTLCJCcnRCZWdpbkRWYWxzIixmdW5jdGlv'@;
put 'biBmeShTLE8pe251bGw9PU8mJihPPXZuKDE4KSksTy53cml0ZV9zaGlmdCgyLDApLE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDQsMCksTy53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgaz0wLEs9MDtLPFMubGVuZ3RoOysrSykoKFNbS118fHt9KS5yZWZ8fHt9KS5zJiZTW0td'@;
put 'LnJlZi5zLmM8MHx8KytrO3JldHVybiBPLndyaXRlX3NoaWZ0KDQsayksT30oTykpO2Zvcih2YXIgaz0wO2s8Ty5sZW5ndGg7KytrKSgoT1trXXx8e30pLnJlZnx8e30pLnMmJk9ba10ucmVmLnMuYzwwfHxWcihTLCJCcnREVmFsIixlSShPW2tdKSk7VnIoUywiQnJ0RW5kRFZhbHMiKX19KGVl'@;
put 'LG1lWyIhdmFsaWRhdGlvbnMiXSksZnVuY3Rpb24gcHkoUyxPLGspe09bIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24oSyl7aWYoS1sxXS5UYXJnZXQpe3ZhciBlZT1FcihrLC0xLEtbMV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSxYYS5ITElOSyk7VnIoUywiQnJ0SExpbmsiLGZ1bmN0'@;
put 'aW9uIFM4KFMsTyl7dmFyIGs9dm4oNTArNCooU1sxXS5UYXJnZXQubGVuZ3RoKyhTWzFdLlRvb2x0aXB8fCIiKS5sZW5ndGgpKTtfZih7czpWcyhTWzBdKSxlOlZzKFNbMF0pfSxrKSxzNSgicklkIitPLGspO3ZhciBLPVNbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4gT2MoKC0xPT1L'@;
put 'PyIiOlNbMV0uVGFyZ2V0LnNsaWNlKEsrMSkpfHwiIixrKSxPYyhTWzFdLlRvb2x0aXB8fCIiLGspLE9jKCIiLGspLGsuc2xpY2UoMCxrLmwpfShLLGVlKSl9fSksZGVsZXRlIE9bIiFsaW5rcyJdfShlZSxtZSxLKSxtZVsiIW1hcmdpbnMiXSYmVnIoZWUsIkJydE1hcmdpbnMiLGZ1bmN0aW9u'@;
put 'IFFqKFMsTyl7cmV0dXJuIG51bGw9PU8mJihPPXZuKDQ4KSksSjMoUyksSkQuZm9yRWFjaChmdW5jdGlvbihrKXtJdShTW2tdLE8pfSksT30obWVbIiFtYXJnaW5zIl0pKSwoIU98fE8uaWdub3JlRUN8fG51bGw9PU8uaWdub3JlRUMpJiZmdW5jdGlvbiBqNShTLE8peyFPfHwhT1siIXJlZiJd'@;
put 'fHwoVnIoUywiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIiksVnIoUywiQnJ0Q2VsbElnbm9yZUVDIixmdW5jdGlvbiBleihTKXt2YXIgTz12bigyNCk7cmV0dXJuIE8ud3JpdGVfc2hpZnQoNCw0KSxPLndyaXRlX3NoaWZ0KDQsMSksX2YoUyxPKSxPfShzcyhPWyIhcmVmIl0pKSksVnIoUywiQnJ0'@;
put 'RW5kQ2VsbElnbm9yZUVDcyIpKX0oZWUsbWUpLGZ1bmN0aW9uIG96KFMsTyxrLEspe2lmKE9bIiFjb21tZW50cyJdLmxlbmd0aD4wKXt2YXIgZWU9RXIoSywtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKGsrMSkrIi52bWwiLFhhLlZNTCk7VnIoUywiQnJ0TGVnYWN5RHJhd2luZyIsczUo'@;
put 'InJJZCIrZWUpKSxPWyIhbGVnYWN5Il09ZWV9fShlZSxtZSxTLEspLFZyKGVlLCJCcnRFbmRTaGVldCIpLGVlLmVuZCgpfWZ1bmN0aW9uIHg4KFMpe3ZhciBLLE89W10saz1TLm1hdGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KFMubWF0Y2goLzxjOnB0IGlkeD0iKFxkKikiPiguKj8pPFwvYzpwdD4v'@;
put 'Z20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIG1lPW9lLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7bWUmJihPWyttZVsxXV09az8rbWVbMl06bWVbMl0pfSk7dmFyIGVlPVFyKChTLm1hdGNoKC88Yzpmb3JtYXRDb2RlPihbXHNc'@;
put 'U10qPyk8XC9jOmZvcm1hdENvZGU+Lyl8fFsiIiwiR2VuZXJhbCJdKVsxXSk7cmV0dXJuKFMubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ob2Upe0s9b2UucmVwbGFjZSgvPC4qPz4vZywiIil9KSxbTyxlZSxLXX1YYS5DSEFSVD0iaHR0cDovL3Nj'@;
put 'aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsWGEuQ0hBUlRFWD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiO3ZhciBoej0vPCg/Olx3KzopP2NoYXJ0'@;
put 'PihbXHNcU10qPyk8XC8oPzpcdys6KT9jaGFydD4vLEhTPS88KD86XHcrOik/cGxvdEFyZWE+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3Bsb3RBcmVhPi8sV25lPS88KD86XHcrOik/bGVnZW5kPihbXHNcU10qPyk8XC8oPzpcdys6KT9sZWdlbmQ+LyxyST0vPCg/Olx3KzopP3RpdGxlPihbXHNc'@;
put 'U10qPyk8XC8oPzpcdys6KT90aXRsZT4vO2Z1bmN0aW9uIF8yKFMsTyxrLEssZWUsb2UsbWUscGUpe3ZhciBiZT1vZXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIVMpcmV0dXJuIG9lO21lJiZtZS5BbmNob3ImJihiZVsiIXBvcyJdPUQ1KG1lLkFuY2hvcixwZSksYmVbIiFwb3NUeXBlIl09bWUu'@;
put 'QW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksYmVbIiFhYnNwb3MiXT1ENShtZS5BbmNob3IscGUpLGJlWyIhcmVscG9zIl09TEMobWUuQW5jaG9yLHBlKSksYmVbIiFwbG90Il09W107dmFyIFBlPSIiLFZlPSIiLFllPVMubWF0Y2goaHopO1llPyhQZT1TLnNsaWNlKDAsWWUuaW5k'@;
put 'ZXgpLFZlPVMuc2xpY2UoWWUuaW5kZXgrWWVbMF0ubGVuZ3RoKSk6UGU9VmU9Uzt2YXIgZXQ9W10sY3Q9UGUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fFMubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fFZlLm1hdGNoKC88YzpsYW5nLio/Pi8pO3JldHVybiBjdCYmKGJlWyIhbGFuZyJdPSh5cihjdFsw'@;
put 'XSl8fHt9KS52YWx8fCJlbi1VUyIpLFllJiYoKGV0PVllWzFdLm1hdGNoKHJJKSkmJmZ1bmN0aW9uIGR6KFMsTyl7dmFyIGs9IiI7Uy5tYXRjaCgvPGM6cmljaD4vKSYmUy5yZXBsYWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+L2csZnVuY3Rpb24oSyxlZSl7ays9ZWV9KSxPWyIhdGl0bGUi'@;
put 'XT1rfHwiQ2hhcnQgVGl0bGUifShldFsxXSxiZSksZnVuY3Rpb24gWW5lKFMsTyl7aWYoUyl7dmFyIGs9MCxLPTAsZWU9IkEiLG9lPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O1MucmVwbGFjZShpSSxmdW5jdGlvbihtZSxwZSl7dmFyIGJlPXt0OnBlLGM6ayx3OjAsc2VyOltdfSxQ'@;
put 'ZT1bXSxWZT0obWUubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5kZXgsWWU9VmU/bWUuc2xpY2UoMCxWZSk6bWU7InNjYXR0ZXIiPT1wZSYmKFBlPW1lLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUoW15cLz5dKilcLz4vbSkpJiZ5cihQZVswXSksImJhciI9PXBlJiYoUGU9bWUubWF0Y2goLzxjOmJh'@;
put 'ckRpcihbXlwvPl0qKVwvPi9tKSkmJihiZS5iYXJEaXI9ImJhciI9PXlyKFBlWzBdKS52YWw/ImgiOiJ2IiksKFBlPVllLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJihiZS5ncm91cGluZz15cihQZVswXSkudmFsfHwic3RhbmRhcmQiKSwobWUubWF0Y2goZnopfHxbXSku'@;
put 'Zm9yRWFjaChmdW5jdGlvbihjdCl7dmFyIFR0PVtdLGl0PXt9LGJ0PVtdO2lmKGN0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIEJ0PXg4KChjdC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtCdFswXSYmQnRbMF1bMF0mJihpdC5uYW1lPUJ0WzBdWzBd'@;
put 'KSxCdFsyXSYmKGl0Lm5hbWVyZWY9QnRbMl0pfVsieFZhbCIsInlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihEdCl7dmFyIEt0LE90PWN0Lm1hdGNoKG5ldyBSZWdFeHAoIjxjOiIrRHQrIj5bXFxzXFxTXSo/PFxcL2M6IitEdCsiPiIsImdtIikpO090'@;
put 'JiYoKE90WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFRuKXtLdD1Ubi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChPdFswXS5tYXRjaCgvPGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVh'@;
put 'Y2goZnVuY3Rpb24oVG4pe3ZhciBzcj14OChUbik7b2Uucy5yPW9lLnMuYz0wLG9lLmUuYz1rLGVlPWthKGspLHNyWzBdLmZvckVhY2goZnVuY3Rpb24oQ24sdXIpe09bZWUramkodXIpXT17dDoibnVtYmVyIj09dHlwZW9mIENuPyJuIjoicyIsdjpDbix6OnNyWzFdfSxLPXVyfSksb2UuZS5y'@;
put 'PEsmJihvZS5lLnI9SyksKytrLGJlLncrKyxUdC5wdXNoKER0KSwoc3JbMl18fEt0KSYmYnQucHVzaChzclsyXXx8S3QpLCJ2YWwiPT1EdCYmKGl0Lno9c3JbMV18fCJHZW5lcmFsIil9KSl9KSwoUGU9bWUubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihpdC5zbW9vdGg9bnVs'@;
put 'bD09eXIoUGVbMF0pLnZhbHx8ZWkoeXIoUGVbMF0pLnZhbCkpLGl0LmNvbHM9VHQsaXQucmFuZ2VzPWJ0LGJlLnNlci5wdXNoKGl0KX0pLCJkb3VnaG51dCI9PXBlJiYoUGU9bWUubWF0Y2goLzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKGJlLmhvbGU9KHlyKFBlWzBdKS52YWx8fDEw'@;
put 'KS8xMDApLE9bIiFwbG90Il0ucHVzaChiZSl9KSxrPjAmJihPWyIhcmVmIl09cmEob2UpKX19KChZZVsxXS5tYXRjaChIUyl8fFtdKVsxXSxiZSksbnVsbCE9KGV0PVllWzFdLm1hdGNoKFduZSkpJiZmdW5jdGlvbiBFcyhTLE8pe3ZhciBrO09bIiFsZWdlbmQiXT17cG9zOiJyIn0sKGs9Uy5t'@;
put 'YXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20pKSYmKE9bIiFsZWdlbmQiXS5wb3M9eXIoa1swXSkudmFsfHwiciIpfShldFswXSxiZSkpLGJlfXZhciBpST0vPGM6KCg/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxi'@;
put 'dWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10qPyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpP0NoYXJ0Pi9nbSxmej0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4vZ207WGEu'@;
put 'Q1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVldCI7dmFyIEdhPUhyKCJjaGFydHNoZWV0IixudWxsLHt4bWxuczpHaS5tYWluWzBdLCJ4bWxuczpyIjpHaS5yfSk7ZnVuY3Rpb24gTlMoUyxPLGss'@;
put 'Syl7dmFyIGVlPVtEaSxHYV07cmV0dXJuIGVlLnB1c2goIjxzaGVldFByLz4iKSxlZS5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21TY2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLGVlW2VlLmxlbmd0aF09SHIoImRy'@;
put 'YXdpbmciLG51bGwseyJyOmlkIjoicklkMSJ9KSxFcihLLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoUysxKSsiLnhtbCIsWGEuRFJBVyksZWUubGVuZ3RoPjImJihlZVtlZS5sZW5ndGhdPSI8L2NoYXJ0c2hlZXQ+IixlZVsxXT1lZVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksZWUuam9pbigi'@;
put 'Iil9ZnVuY3Rpb24gVlMoKXt2YXIgUz12aSgpO3JldHVybiBWcihTLCJCcnRCZWdpblNoZWV0IiksVnIoUywiQnJ0RW5kU2hlZXQiKSxTLmVuZCgpfXZhciBneT1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEsImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFj'@;
put 'a3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAsImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZp'@;
put 'ZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsic2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJV'@;
put 'bnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0sWyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sYUk9W1siYWN0aXZlVGFiIiwwLCJp'@;
put 'bnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwiYm9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNh'@;
put 'bFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sc0k9W10sdno9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwiYXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwi'@;
put 'dHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEiLCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIG9JKFMsTyl7Zm9y'@;
put 'KHZhciBrPTA7ayE9Uy5sZW5ndGg7KytrKWZvcih2YXIgSz1TW2tdLGVlPTA7ZWUhPU8ubGVuZ3RoOysrZWUpe3ZhciBvZT1PW2VlXTtpZihudWxsPT1LW29lWzBdXSlLW29lWzBdXT1vZVsxXTtlbHNlIHN3aXRjaChvZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIEtbb2VbMF1d'@;
put 'JiYoS1tvZVswXV09ZWkoS1tvZVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBLW29lWzBdXSYmKEtbb2VbMF1dPXBhcnNlSW50KEtbb2VbMF1dLDEwKSl9fX1mdW5jdGlvbiBlcChTLE8pe2Zvcih2YXIgaz0wO2shPU8ubGVuZ3RoOysrayl7dmFyIEs9T1trXTtpZihu'@;
put 'dWxsPT1TW0tbMF1dKVNbS1swXV09S1sxXTtlbHNlIHN3aXRjaChLWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgU1tLWzBdXSYmKFNbS1swXV09ZWkoU1tLWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIFNbS1swXV0mJihTW0tbMF1dPXBhcnNlSW50KFNb'@;
put 'S1swXV0sMTApKX19fWZ1bmN0aW9uIEJTKFMpe2VwKFMuV0JQcm9wcyxneSksZXAoUy5DYWxjUHIsdnopLG9JKFMuV0JWaWV3LGFJKSxvSShTLlNoZWV0cyxzSSksYzguZGF0ZTE5MDQ9ZWkoUy5XQlByb3BzLmRhdGUxOTA0KX12YXIgeXo9Il1bKj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBt'@;
put 'eShTLE8pe2lmKFMubGVuZ3RoPjMxKXtpZihPKXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciBrPSEwO3JldHVybiB5ei5mb3JFYWNoKGZ1bmN0aW9uKEspe2lmKC0xIT1TLmluZGV4T2YoSykpe2lmKCFPKXRocm93IG5l'@;
put 'dyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO2s9ITF9fSksa312YXIgRTg9Lzxcdys6d29ya2Jvb2svLHVJPUhyKCJ3b3JrYm9vayIsbnVsbCx7eG1sbnM6R2kubWFpblswXSwieG1sbnM6ciI6R2kucn0pO2Z1bmN0aW9uIFQ4KFMsTyl7dmFyIGs9'@;
put 'T3x8e30sSz1bRGldO0tbSy5sZW5ndGhdPXVJO3ZhciBlZT1TLldvcmtib29rJiYoUy5Xb3JrYm9vay5OYW1lc3x8W10pLmxlbmd0aD4wO1MuV29ya2Jvb2smJlMuV29ya2Jvb2suTW9kaWZ5JiYoS1tLLmxlbmd0aF09ZnVuY3Rpb24gdHAoUyl7dmFyIE89e307cmV0dXJuIFMud2FybiYmKE8u'@;
put 'cmVhZE9ubHlSZWNvbW1lbmRlZD0xKSxPLnVzZXJOYW1lPVMudXNlcnx8IlNoZWV0IEpTIixTLmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24uYWxnbyYmKE8uYWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyksUy5lbmNyeXB0aW9uLmhhc2gmJihPLmhhc2hWYWx1ZT1TLmVuY3J5cHRp'@;
put 'b24uaGFzaCksUy5lbmNyeXB0aW9uLnNhbHQmJihPLnNhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCksUy5lbmNyeXB0aW9uLnNwaW4mJihPLnNwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbikpLEhyKCJmaWxlU2hhcmluZyIsbnVsbCxPKX0oUy5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgb2U9'@;
put 'e2NvZGVOYW1lOiJUaGlzV29ya2Jvb2sifTtTLldvcmtib29rJiZTLldvcmtib29rLldCUHJvcHMmJihneS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtudWxsIT1TLldvcmtib29rLldCUHJvcHNbUGVbMF1dJiZTLldvcmtib29rLldCUHJvcHNbUGVbMF1dIT1QZVsxXSYmKG9lW1BlWzBdXT1TLldv'@;
put 'cmtib29rLldCUHJvcHNbUGVbMF1dKX0pLFMuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSYmKG9lLmNvZGVOYW1lPVMuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSxkZWxldGUgb2UuQ29kZU5hbWUpKSxLW0subGVuZ3RoXT1Icigid29ya2Jvb2tQciIsbnVsbCxvZSksUy5Xb3JrYm9vayYm'@;
put 'Uy5Xb3JrYm9vay5Qcm90ZWN0aW9uJiYoS1tLLmxlbmd0aF09ZnVuY3Rpb24gdnkoUyl7dmFyIE89e307cmV0dXJuIFMubG9ja1N0cnVjdHVyZSYmKE8ubG9ja1N0cnVjdHVyZT0xKSxTLmxvY2tXaW5kb3dzJiYoTy5sb2NrV2luZG93cz0xKSxTLmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24u'@;
put 'YWxnbyYmKE8ud29ya2Jvb2tBbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvKSxTLmVuY3J5cHRpb24uaGFzaCYmKE8ud29ya2Jvb2tIYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gpLFMuZW5jcnlwdGlvbi5zYWx0JiYoTy53b3JrYm9va1NhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2Fs'@;
put 'dCksUy5lbmNyeXB0aW9uLnNwaW4mJihPLndvcmtib29rU3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSksSHIoIndvcmtib29rUHJvdGVjdGlvbiIsbnVsbCxPKX0oUy5Xb3JrYm9vay5Qcm90ZWN0aW9uKSk7dmFyIG1lPVMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSxwZT0w'@;
put 'O2lmKG1lJiZtZVswXSYmbWVbMF0uSGlkZGVuKXtmb3IoS1tLLmxlbmd0aF09Ijxib29rVmlld3M+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoJiZtZVtwZV0mJm1lW3BlXS5IaWRkZW47KytwZSk7cGU9PVMuU2hlZXROYW1lcy5sZW5ndGgmJihwZT0wKSxLW0subGVuZ3RoXT0nPHdv'@;
put 'cmtib29rVmlldyBmaXJzdFNoZWV0PSInK3BlKyciIGFjdGl2ZVRhYj0iJytwZSsnIi8+JyxLW0subGVuZ3RoXT0iPC9ib29rVmlld3M+In1mb3IoS1tLLmxlbmd0aF09IjxzaGVldHM+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciBiZT17bmFtZTpQcihTLlNoZWV0'@;
put 'TmFtZXNbcGVdLnNsaWNlKDAsMzEpKX07aWYoYmUuc2hlZXRJZD0iIisocGUrMSksYmVbInI6aWQiXT0icklkIisocGUrMSksbWVbcGVdKXN3aXRjaChtZVtwZV0uSGlkZGVuKXtjYXNlIDE6YmUuc3RhdGU9ImhpZGRlbiI7YnJlYWs7Y2FzZSAyOmJlLnN0YXRlPSJ2ZXJ5SGlkZGVuIn1LW0su'@;
put 'bGVuZ3RoXT1Icigic2hlZXQiLG51bGwsYmUpfXJldHVybiBLW0subGVuZ3RoXT0iPC9zaGVldHM+IixTLkV4dGVybmFsV0ImJlMuRXh0ZXJuYWxXQi5sZW5ndGgmJihLW0subGVuZ3RoXT0iPGV4dGVybmFsUmVmZXJlbmNlcz4iLChTLkV4dGVybmFsV0J8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KFBlLFZlKXt2YXIgWWU9RXIoay53YnJlbHMsLTEsImV4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoVmUrMSkrIi54bWwiLFhhLlhMSU5LKTtLW0subGVuZ3RoXT0nPGV4dGVybmFsUmVmZXJlbmNlIHI6aWQ9InJJZCcrWWUrJyIvPid9KSxLW0subGVuZ3RoXT0iPC9leHRlcm5hbFJlZmVy'@;
put 'ZW5jZXM+IiksZWUmJihLW0subGVuZ3RoXT0iPGRlZmluZWROYW1lcz4iLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suTmFtZXMmJlMuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihQZSl7dmFyIFZlPXtuYW1lOlBlLk5hbWV9O1BlLkNvbW1lbnQmJihWZS5jb21tZW50PVBlLkNvbW1l'@;
put 'bnQpLG51bGwhPVBlLlNoZWV0JiYoVmUubG9jYWxTaGVldElkPSIiK1BlLlNoZWV0KSxQZS5IaWRkZW4mJihWZS5oaWRkZW49IjEiKSxQZS5SZWYmJihLW0subGVuZ3RoXT1IcigiZGVmaW5lZE5hbWUiLFByKFBlLlJlZiksVmUpKX0pLEtbSy5sZW5ndGhdPSI8L2RlZmluZWROYW1lcz4iKSxr'@;
put 'JiZrLnBpdm90cyYmay5waXZvdHMubGVuZ3RoPjAmJihLLnB1c2goIjxwaXZvdENhY2hlcz4iKSxrLnBpdm90cy5mb3JFYWNoKGZ1bmN0aW9uKFBlLFZlKXtLLnB1c2goJzxwaXZvdENhY2hlIGNhY2hlSWQ9IicrKFZlKzEpKyciIHI6aWQ9InJJZCcrUGVbMl0rJyIvPicpfSksSy5wdXNoKCI8'@;
put 'L3Bpdm90Q2FjaGVzPiIpKSxLLmxlbmd0aD4yJiYoS1tLLmxlbmd0aF09Ijwvd29ya2Jvb2s+IixLWzFdPUtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEsuam9pbigiIil9ZnVuY3Rpb24gX3ooUyxPKXtyZXR1cm4gT3x8KE89dm4oMTI3KSksTy53cml0ZV9zaGlmdCg0LFMuSGlkZGVuKSxPLndy'@;
put 'aXRlX3NoaWZ0KDQsUy5pVGFiSUQpLHM1KFMuc3RyUmVsSUQsTyksT2MoUy5uYW1lLnNsaWNlKDAsMzEpLE8pLE8ubGVuZ3RoPk8ubD9PLnNsaWNlKDAsTy5sKTpPfWZ1bmN0aW9uIG5wKFMsTyl7dmFyIGs9e307cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxrLkFyY2hJRD1TLnJlYWRfc2hpZnQo'@;
put 'NCksUy5sKz1PLTgsa31mdW5jdGlvbiBieShTLE8pe3ZhciBrPXZpKCk7cmV0dXJuIFZyKGssIkJydEJlZ2luQm9vayIpLFZyKGssIkJydEZpbGVWZXJzaW9uIixmdW5jdGlvbiBoSShTLE8pe098fChPPXZuKDEyNykpO2Zvcih2YXIgaz0wOzQhPWs7KytrKU8ud3JpdGVfc2hpZnQoNCwwKTty'@;
put 'ZXR1cm4gT2MoIlNoZWV0SlMiLE8pLE9jKHcudmVyc2lvbixPKSxPYyh3LnZlcnNpb24sTyksT2MoIjcyNjIiLE8pLE8ubGVuZ3RoPk8ubD9PLnNsaWNlKDAsTy5sKTpPfSgpKSxWcihrLCJCcnRXYlByb3AiLGZ1bmN0aW9uIGRJKFMsTyl7T3x8KE89dm4oNzIpKTt2YXIgaz0wO3JldHVybiBT'@;
put 'JiZTLmZpbHRlclByaXZhY3kmJihrfD04KSxPLndyaXRlX3NoaWZ0KDQsayksTy53cml0ZV9zaGlmdCg0LDApLHI1KFMmJlMuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siLE8pLE8uc2xpY2UoMCxPLmwpfShTLldvcmtib29rJiZTLldvcmtib29rLldCUHJvcHN8fG51bGwpKSxmdW5jdGlvbiB3'@;
put 'eihTLE8pe2lmKE8uV29ya2Jvb2smJk8uV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIGs9Ty5Xb3JrYm9vay5TaGVldHMsSz0wLGVlPS0xLG9lPS0xO0s8ay5sZW5ndGg7KytLKSFrW0tdfHwha1tLXS5IaWRkZW4mJi0xPT1lZT9lZT1LOjE9PWtbS10uSGlkZGVuJiYtMT09b2UmJihvZT1LKTtv'@;
put 'ZT5lZXx8KFZyKFMsIkJydEJlZ2luQm9va1ZpZXdzIiksVnIoUywiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIGZJKFMsTyl7cmV0dXJuIE98fChPPXZuKDI5KSksTy53cml0ZV9zaGlmdCgtNCwwKSxPLndyaXRlX3NoaWZ0KC00LDQ2MCksTy53cml0ZV9zaGlmdCg0LDI4ODAwKSxPLndyaXRlX3No'@;
put 'aWZ0KDQsMTc2MDApLE8ud3JpdGVfc2hpZnQoNCw1MDApLE8ud3JpdGVfc2hpZnQoNCxTKSxPLndyaXRlX3NoaWZ0KDQsUyksTy53cml0ZV9zaGlmdCgxLDEyMCksTy5sZW5ndGg+Ty5sP08uc2xpY2UoMCxPLmwpOk99KGVlKSksVnIoUywiQnJ0RW5kQm9va1ZpZXdzIikpfX0oayxTKSxmdW5j'@;
put 'dGlvbiB5eShTLE8pe1ZyKFMsIkJydEJlZ2luQnVuZGxlU2hzIik7Zm9yKHZhciBrPTA7ayE9Ty5TaGVldE5hbWVzLmxlbmd0aDsrK2spVnIoUywiQnJ0QnVuZGxlU2giLF96KHtIaWRkZW46Ty5Xb3JrYm9vayYmTy5Xb3JrYm9vay5TaGVldHMmJk8uV29ya2Jvb2suU2hlZXRzW2tdJiZPLldv'@;
put 'cmtib29rLlNoZWV0c1trXS5IaWRkZW58fDAsaVRhYklEOmsrMSxzdHJSZWxJRDoicklkIisoaysxKSxuYW1lOk8uU2hlZXROYW1lc1trXX0pKTtWcihTLCJCcnRFbmRCdW5kbGVTaHMiKX0oayxTKSxWcihrLCJCcnRFbmRCb29rIiksay5lbmQoKX1mdW5jdGlvbiBwSShTLE8sayxLLGVlKXty'@;
put 'ZXR1cm4oIi5iaW4iPT09Ty5zbGljZSgtNCk/ejU6ekQpKFMsayxLLGVlKX1mdW5jdGlvbiBnSShTLE8sayxLLGVlKXtyZXR1cm4oIi5iaW4iPT09Ty5zbGljZSgtNCk/VlM6TlMpKFMsayxLLGVlKX1mdW5jdGlvbiBtSShTLE8sayl7cmV0dXJuKCIuYmluIj09PU8uc2xpY2UoLTQpP2ZrOkF2'@;
put 'KShTLGspfWZ1bmN0aW9uIFJ6KFMsTyxrKXtyZXR1cm4oIi5iaW4iPT09Ty5zbGljZSgtNCk/VUM6ekMpKFMsayl9dmFyIFdTPS8oW1x3Ol0rKT0oKD86IikoW14iXSopKD86Iil8KD86JykoW14nXSopKD86JykpL2csX3k9LyhbXHc6XSspPSgoPzoiKSg/OlteIl0qKSg/OiIpfCg/OicpKD86'@;
put 'W14nXSopKD86JykpLztmdW5jdGlvbiBQMChTLE8pe3ZhciBrPVMuc3BsaXQoL1xzKy8pLEs9W107aWYoT3x8KEtbMF09a1swXSksMT09PWsubGVuZ3RoKXJldHVybiBLO3ZhciBvZSxtZSxiZSxlZT1TLm1hdGNoKFdTKTtpZihlZSlmb3IoYmU9MDtiZSE9ZWUubGVuZ3RoOysrYmUpLTE9PT0o'@;
put 'bWU9KG9lPWVlW2JlXS5tYXRjaChfeSkpWzFdLmluZGV4T2YoIjoiKSk/S1tvZVsxXV09b2VbMl0uc2xpY2UoMSxvZVsyXS5sZW5ndGgtMSk6S1sieG1sbnM6Ij09PW9lWzFdLnNsaWNlKDAsNik/InhtbG5zIitvZVsxXS5zbGljZSg2KTpvZVsxXS5zbGljZShtZSsxKV09b2VbMl0uc2xpY2Uo'@;
put 'MSxvZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEt9ZnVuY3Rpb24gWVMoUyl7dmFyIGs9e307aWYoMT09PVMuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gazt2YXIgZWUsb2UscGUsSz1TLm1hdGNoKFdTKTtpZihLKWZvcihwZT0wO3BlIT1LLmxlbmd0aDsrK3BlKS0xPT09KG9lPShlZT1LW3Bl'@;
put 'XS5tYXRjaChfeSkpWzFdLmluZGV4T2YoIjoiKSk/a1tlZVsxXV09ZWVbMl0uc2xpY2UoMSxlZVsyXS5sZW5ndGgtMSk6a1sieG1sbnM6Ij09PWVlWzFdLnNsaWNlKDAsNik/InhtbG5zIitlZVsxXS5zbGljZSg2KTplZVsxXS5zbGljZShvZSsxKV09ZWVbMl0uc2xpY2UoMSxlZVsyXS5sZW5n'@;
put 'dGgtMSk7cmV0dXJuIGt9ZnVuY3Rpb24gTHooUyl7dmFyIE89e307aWYoUy5EZWZhdWx0Um93SGVpZ2h0KXt2YXIgaz17aHB4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Um93SGVpZ2h0KS8zfTtIdihrKSxPLnJvdz1rfWlmKFMuRGVmYXVsdENvbFdpZHRoKXt2YXIgSz17d3B4OjQqcGFyc2VJbnQo'@;
put 'Uy5EZWZhdWx0Q29sV2lkdGgpLzN9O0owKEspLE8uY29sPUt9cmV0dXJuIE99ZnVuY3Rpb24gUHooUyxPLGssSyl7dmFyIGVlPUs7c3dpdGNoKChrWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4iOmVlPWVpKEspO2JyZWFrO2Nhc2UiaTIi'@;
put 'OmNhc2UiaW50IjplZT1wYXJzZUludChLLDEwKTticmVhaztjYXNlInI0IjpjYXNlImZsb2F0IjplZT1wYXJzZUZsb2F0KEspO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6ZWU9TmUoSyk7YnJlYWs7Y2FzZSJpOCI6Y2FzZSJzdHJpbmciOmNhc2UiZml4ZWQiOmNhc2UidXVp'@;
put 'ZCI6Y2FzZSJiaW4uYmFzZTY0IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYmFkIGN1c3Rwcm9wOiIra1swXSl9U1tRcihPKV09ZWV9dmFyIHd5PXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3VibGVBY2NvdW50aW5n'@;
put 'In0sdkk9RGUod3kpO2Z1bmN0aW9uICRTKFMsTyxrLEspe2lmKEsuY2VsbFN0eWxlcyl7aWYoaz1rLnJlcGxhY2UoL1xzKy9nLCIgIiksTy5JbnRlcmlvcil7dmFyIGVlPU8uSW50ZXJpb3I7ZWUuUGF0dGVybiYmKGVlLnBhdHRlcm5UeXBlPXdDW2VlLlBhdHRlcm5dfHxlZS5QYXR0ZXJuKSxl'@;
put 'ZS5Db2xvciYmZWUuQ29sb3IubWF0Y2goLyNbMC05QS1GYS1mXSovKSYmKGVlLmZnQ29sb3I9e3JnYjplZS5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBGeihTKXtTLkJvcmRlcnMmJihTLkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgaz1PLlBvc2l0aW9uLnRvTG93ZXJDYXNl'@;
put 'KCk7U1trXT17c3R5bGU6S1MoTy5MaW5lU3R5bGUsK08uV2VpZ2h0KSxjb2xvcjp7cmdiOihPLkNvbG9yfHwiIzAwMDAwMCIpLnNsaWNlKDEpfX19KSxkZWxldGUgUy5Cb3JkZXJzKX0oTyk7dmFyIG1lLG9lPWsubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTtvZSYmKGVpKChtZT15'@;
put 'cihvZVswXSkpLkJvbGQpJiYoTy5Cb2xkPSEwKSxlaShtZS5JdGFsaWMpJiYoTy5JdGFsaWM9ITApLGVpKG1lLlN0cmlrZVRocm91Z2gpJiYoTy5TdHJpa2U9ITApLG1lLlNpemUmJihPLlNpemU9K21lLlNpemUpLE8uRm9udE5hbWU9bWUuRm9udE5hbWU/bWUuRm9udE5hbWU6IkFyaWFsIixt'@;
put 'ZS5VbmRlcmxpbmUmJihPLlVuZGVybGluZT12SVttZS5VbmRlcmxpbmVdKSxtZS5Db2xvciYmKE8uUkdCPW1lLkNvbG9yLnNsaWNlKC02KSkpLE8uQWxpZ25tZW50JiYoTy5hbGlnbm1lbnQ9e30sTy5BbGlnbm1lbnQuVmVydGljYWwmJihPLmFsaWdubWVudC52ZXJ0aWNhbD1PLkFsaWdubWVu'@;
put 'dC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxPLkFsaWdubWVudC5Ib3Jpem9udGFsJiYoTy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1PLkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJDYXNlKCkpLGVpKE8uQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP08uYWxpZ25tZW50LndyYXBUZXh0PSEw'@;
put 'Om51bGw9PU8uQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgTy5hbGlnbm1lbnQud3JhcFRleHQsZWkoTy5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJihPLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK08uQWxpZ25tZW50LkluZGVudCYmKE8uYWxpZ25tZW50LmluZGVudD0rTy5B'@;
put 'bGlnbm1lbnQuSW5kZW50fHwwKSwrTy5BbGlnbm1lbnQuUm90YXRlJiYoTy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPStPLkFsaWdubWVudC5Sb3RhdGV8fDApKX1TW08uSURdPU8sKCJEZWZhdWx0Ij09Ty5JRHx8Ik5vcm1hbCI9PU8uTmFtZSkmJkk0KE8pfWZ1bmN0aW9uIEtTKFMsTyl7c3dp'@;
put 'dGNoKFMpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nhc2UiRGFzaCI6cmV0dXJuImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJkb3R0ZWQiO2Nhc2UiRGFzaERvdCI6cmV0dXJuImRhc2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnREYXNoRG90'@;
put 'IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJsZSI6cmV0dXJuImRvdWJsZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2goK098fDApe2Nhc2UgMDpyZXR1cm4iaGFpciI7Y2FzZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0aGljayJ9'@;
put 'cmV0dXJuInRoaW4ifXJldHVybiBTfWZ1bmN0aW9uIHlJKFMsTyxrLEssZWUsb2UsbWUscGUsYmUsUGUpe3ZhciBWZT0iR2VuZXJhbCIsWWU9Sy5TdHlsZUlELGV0PXt9O1BlPVBlfHx7fTt2YXIgY3Q9W10sVHQ9MDtmb3Iodm9pZCAwPT09WWUmJnBlJiYoWWU9cGUuU3R5bGVJRCksdm9pZCAw'@;
put 'PT09WWUmJm1lJiYoWWU9bWUuU3R5bGVJRCk7dm9pZCAwIT09b2VbWWVdOyl7dmFyIGl0PW9lW1llXTtpZigiR2VuZXJhbCI9PVZlJiZpdC5uZiYmKFZlPW9lW1llXS5uZiksaXQuSW50ZXJpb3ImJmN0LnB1c2gob2VbWWVdLkludGVyaW9yKSxpdC5hbGlnbm1lbnQmJihldC5hbGlnbm1lbnR8'@;
put 'fChldC5hbGlnbm1lbnQ9SnQoaXQuYWxpZ25tZW50KSkpLG51bGw9PWV0LmJvbGQmJml0LkJvbGQmJihldC5ib2xkPSEwKSxudWxsPT1ldC5pdGFsaWMmJml0Lkl0YWxpYyYmKGV0Lml0YWxpYz0hMCksbnVsbD09ZXQuc3RyaWtlJiZpdC5TdHJpa2UmJihldC5zdHJpa2U9ITApLG51bGw9PWV0'@;
put 'LnN6JiZpdC5TaXplJiYoZXQuc3o9aXQuU2l6ZSksbnVsbD09ZXQubmFtZSYmaXQuRm9udE5hbWUmJihldC5uYW1lPWl0LkZvbnROYW1lKSxudWxsPT1ldC51bmRlcmxpbmUmJml0LlVuZGVybGluZSYmKGV0LnVuZGVybGluZT1pdC5VbmRlcmxpbmUpLG51bGw9PWV0LmNvbG9yJiZpdC5SR0Im'@;
put 'JihldC5jb2xvcj17cmdiOml0LlJHQn0pLFsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihPdCl7bnVsbD09ZXRbT3RdJiZpdFtPdF0mJihldFtPdF09SnQoaXRbT3RdKSl9KSwiRGVmYXVsdCI9PVllKWJyZWFrO1llPWl0LlBhcmVudHx8IkRlZmF1bHQi'@;
put 'fWV0Lm5hbWV8fChldC5uYW1lPW9lLkRlZmF1bHQmJm9lLkRlZmF1bHQuRm9udE5hbWV8fCJBcmlhbCIpLGV0LnN6fHwoZXQuc3o9b2UuRGVmYXVsdCYmb2UuRGVmYXVsdC5TaXplfHwxMik7dmFyIGJ0PSIiO2lmKFN8fEsuRm9ybXVsYXx8IlN0cmluZyI9PWsuVHlwZXx8Ik51bWJlciI9PWsu'@;
put 'VHlwZSlzd2l0Y2goay5UeXBlKXtjYXNlIkJvb2xlYW4iOksudD0iYiIsSy52PWVpKFMpO2JyZWFrO2Nhc2UiU3RyaW5nIjpLLnQ9InMiLGJ0PU9hKFFyKFMpKSxLLnY9Uy5pbmRleE9mKCI8Iik+LTE/UXIoT3x8UykucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCxTLmluZGV4T2YoIjwiKT4t'@;
put 'MSYmKEsuUj12ZC5odG1sX3RvX3JzKFFyKFMpKSk7YnJlYWs7Y2FzZSJEYXRlVGltZSI6IloiIT1TLnNsaWNlKC0xKSYmKFMrPSJaIiksSy52PShOZShTKS1uZXcgRGF0ZShEYXRlLlVUQygxODk5LDExLDMwKSkpLzg2NGU1LEsudiE9Sy52P0sudj1RcihTKTpLLnY8NjAmJihLLnY9Sy52LTEp'@;
put 'LCghVmV8fCJHZW5lcmFsIj09VmUpJiYoVmU9Inl5eXktbW0tZGQiKTtjYXNlIk51bWJlciI6dm9pZCAwPT09Sy52JiYoSy52PStTKSxLLnR8fChLLnQ9Im4iKTticmVhaztjYXNlIkVycm9yIjpLLnQ9ImUiLEsudj1GM1tTXSwhMSE9PVBlLmNlbGxUZXh0JiYoSy53PVMpO2JyZWFrO2RlZmF1'@;
put 'bHQ6IiI9PVMmJiIiPT1PP0sudD0ieiI6KEsudD0icyIsYnQ9T2EoUXIoUykpLEsudj1TLmluZGV4T2YoIjwiKT4tMT9RcihPfHxTKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigiPCIpPi0xJiYoSy5SPXZkLmh0bWxfdG9fcnMoUXIoUykpKSl9ZWxzZSBLLnQ9InoiLGRl'@;
put 'bGV0ZSBLLnY7aWYoZnVuY3Rpb24gR1MoUyxPLGspe2lmKCJ6IiE9PVMudCl7aWYoIWt8fCExIT09ay5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fENjW1Mudl06IkdlbmVyYWwiPT09Tz8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVy'@;
put 'YWxfbnVtKFMudik6QS5fZ2VuZXJhbChTLnYpOmZ1bmN0aW9uIE96KFMsTyl7dmFyIGs9bmVbU118fFFyKFMpO3JldHVybiJHZW5lcmFsIj09PWs/QS5fZ2VuZXJhbChPKTpBLmZvcm1hdChrLE8pfShPfHwiR2VuZXJhbCIsUy52KX1jYXRjaChvZSl7aWYoay5XVEYpdGhyb3cgb2V9dHJ5e3Zh'@;
put 'ciBLPW5lW09dfHxPfHwiR2VuZXJhbCI7aWYoay5jZWxsTkYmJihTLno9Syksay5jZWxsRGF0ZXMmJiJuIj09Uy50JiZBLmlzX2RhdGUoSykpe3ZhciBlZT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO2VlJiYoUy50PSJkIixTLnY9bmV3IERhdGUoZWUueSxlZS5tLTEsZWUuZCxlZS5ILGVlLk0s'@;
put 'ZWUuUyxlZS51KSl9fWNhdGNoKG9lKXtpZihrLldURil0aHJvdyBvZX19fShLLFZlLFBlKSwhMSE9PVBlLmNlbGxGb3JtdWxhKWlmKEsuRm9ybXVsYSl7dmFyIEJ0PVFyKEsuRm9ybXVsYSk7NjE9PUJ0LmNoYXJDb2RlQXQoMCkmJihCdD1CdC5zbGljZSgxKSksSy5mPU81KEJ0LGVlKSxkZWxl'@;
put 'dGUgSy5Gb3JtdWxhLCJSQyI9PUsuQXJyYXlSYW5nZT9LLkY9TzUoIlJDOlJDIixlZSk6Sy5BcnJheVJhbmdlJiYoSy5GPU81KEsuQXJyYXlSYW5nZSxlZSksYmUucHVzaChbc3MoSy5GKSxLLkZdKSl9ZWxzZSBmb3IoVHQ9MDtUdDxiZS5sZW5ndGg7KytUdCllZS5yPj1iZVtUdF1bMF0ucy5y'@;
put 'JiZlZS5yPD1iZVtUdF1bMF0uZS5yJiZlZS5jPj1iZVtUdF1bMF0ucy5jJiZlZS5jPD1iZVtUdF1bMF0uZS5jJiYoSy5GPWJlW1R0XVsxXSk7aWYoUGUuY2VsbFN0eWxlcyYmKGN0LmZvckVhY2goZnVuY3Rpb24oT3QpeyFldC5wYXR0ZXJuVHlwZSYmT3QucGF0dGVyblR5cGUmJihldC5wYXR0'@;
put 'ZXJuVHlwZT1PdC5wYXR0ZXJuVHlwZSksIWV0LmZnQ29sb3ImJk90LmZnQ29sb3ImJihldC5mZ0NvbG9yPU90LmZnQ29sb3IpfSksSy5zPWV0KSx2b2lkIDAhPT1LLlN0eWxlSUQmJihLLml4ZmU9Sy5TdHlsZUlEKSxLLlImJksucyl7dmFyIER0PUp0KEsucyk7ZGVsZXRlIER0LmJvbGQsZGVs'@;
put 'ZXRlIER0Lml0YWxpYyxkZWxldGUgRHQudW5kZXJsaW5lLGRlbGV0ZSBEdC5zdHJpa2UsSy5SLmZvckVhY2goZnVuY3Rpb24oT3Qpe090LnM9UHQoSnQoRHQpLE90LnMpfSl9fWZ1bmN0aW9uIEh6KFMpe1MudD1TLnZ8fCIiLFMudD1TLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2Uo'@;
put 'L1xyL2csIlxuIiksUy52PVMudz1TLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIFhTKFMpe2lmKFRlJiZCdWZmZXIuaXNCdWZmZXIoUykpcmV0dXJuIFMudG9TdHJpbmcoInV0ZjgiKTtpZigic3RyaW5nIj09dHlwZW9mIFMpcmV0dXJuIFM7aWYodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZTIGluc3Rh'@;
put 'bmNlb2YgVWludDhBcnJheSlyZXR1cm4gZnMoQyhWKFMpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIFU1PS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXFtdKykoPzpbXHM/OjxcL11bXj5dKik/'@;
put 'Pi9nbTtmdW5jdGlvbiBEOChTLE8pe3ZhciBrPU98fHt9LEs9cShYUyhTKSk7KCJiaW5hcnkiPT1rLnR5cGV8fCJhcnJheSI9PWsudHlwZXx8ImJhc2U2NCI9PWsudHlwZSkmJihLPXR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxaKEspKTpmcyhLKSk7dmFy'@;
put 'IGVlPUsuc2xpY2UoMCwxMDI0KS50b0xvd2VyQ2FzZSgpLG9lPSExO2lmKCgxMDIzJmVlLmluZGV4T2YoIj4iKSk+TWF0aC5taW4oMTAyMyZlZS5pbmRleE9mKCIsIiksMTAyMyZlZS5pbmRleE9mKCI7IikpKXt2YXIgbWU9SnQoayk7cmV0dXJuIG1lLnR5cGU9InN0cmluZyIsejMudG9fd29y'@;
put 'a2Jvb2soSyxtZSl9aWYoLTE9PWVlLmluZGV4T2YoIjw/eG1sIikmJlsiaHRtbCIsInRhYmxlIiwiaGVhZCIsIm1ldGEiLCJzY3JpcHQiLCJzdHlsZSIsImRpdiJdLmZvckVhY2goZnVuY3Rpb24oZ3Upe2VlLmluZGV4T2YoIjwiK2d1KT49MCYmKG9lPSEwKX0pLG9lKXJldHVybiB2ZC50b193'@;
put 'b3JrYm9vayhLLGspO3ZhciBwZSxQZSxiZT1bXTtudWxsIT1zZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9c2UpO3ZhciBScixWZT17fSxZZT1bXSxldD1rLmRlbnNlP1tdOnt9LGN0PSIiLFR0PXt9LGl0PXt9LGJ0PXt9LEJ0PVAwKCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicpLER0PTAs'@;
put 'T3Q9MCxLdD0wLFRuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LHNyPXt9LENuPXt9LHVyPSIiLGVyPTAsam49W10scHI9e30sYnI9e30scnI9MCxTaT1bXSxQaT17fSxuYT1bXSxsYT17fSxSaT1bXSxCbj0hMSxqcj1bXSx3cj1bXSxIbj17fSx6cj0wLFdpPTAsQ2k9e1NoZWV0czpb'@;
put 'XSxXQlByb3BzOntkYXRlMTkwNDohMX19LHdhPXt9O1U1Lmxhc3RJbmRleD0wLEs9Sy5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBvcz0iIjtwZT1VNS5leGVjKEspOylzd2l0Y2gocGVbM109KG9zPXBlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRhdGEiOmlm'@;
put 'KCJkYXRhIj09b3Mpe2lmKCIvIj09PXBlWzFdKXtpZigoUGU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmYmUucHVzaChbcGVbM10sITBdKTticmVh'@;
put 'a31pZihiZVtiZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8iPT09cGVbMV0/eUkoSy5zbGljZShEdCxwZS5pbmRleCksdXIsQnQsImNvbW1lbnQiPT1iZVtiZS5sZW5ndGgtMV1bMF0/bGE6aXQse2M6T3QscjpLdH0sc3IsUmlbT3RdLGJ0LGpyLGspOih1cj0iIixCdD1QMChwZVswXSksRHQ9cGUu'@;
put 'aW5kZXgrcGVbMF0ubGVuZ3RoKTticmVhaztjYXNlImNlbGwiOmlmKCIvIj09PXBlWzFdfHwiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigoaXQ9WVMocGVbMF0pKS5JbmRleCYmKE90PStpdC5JbmRleC0xKSxPdDxUbi5zLmMmJihUbi5zLmM9'@;
put 'T3QpLE90PlRuLmUuYyYmKFRuLmUuYz1PdCksbmE9W10sIWsuc2hlZXRTdHVicyl7KytPdDticmVha315SSgiIiwiIix7fSwiY29tbWVudCI9PWJlW2JlLmxlbmd0aC0xXVswXT9sYTppdCx7YzpPdCxyOkt0fSxzcixSaVtPdF0sYnQsanIsayl9aWYobmEubGVuZ3RoPjAmJihpdC5jPW5hKSwo'@;
put 'IWsuc2hlZXRSb3dzfHxrLnNoZWV0Um93cz5LdCkmJih2b2lkIDAhPT1pdC52fHxrLnNoZWV0U3R1YnMpJiYoay5kZW5zZT8oZXRbS3RdfHwoZXRbS3RdPVtdKSxldFtLdF1bT3RdPWl0KTpldFtrYShPdCkramkoS3QpXT1pdCksaXQuSFJlZiYmKGl0Lmw9e1RhcmdldDpRcihpdC5IUmVmKX0s'@;
put 'aXQuSFJlZlNjcmVlblRpcCYmKGl0LmwuVG9vbHRpcD1pdC5IUmVmU2NyZWVuVGlwKSxkZWxldGUgaXQuSFJlZixkZWxldGUgaXQuSFJlZlNjcmVlblRpcCksKGl0Lk1lcmdlQWNyb3NzfHxpdC5NZXJnZURvd24pJiYoenI9T3QrKDB8cGFyc2VJbnQoaXQuTWVyZ2VBY3Jvc3MsMTApKSxXaT1L'@;
put 'dCsoMHxwYXJzZUludChpdC5NZXJnZURvd24sMTApKSwoenI+T3R8fFdpPkt0KSYmam4ucHVzaCh7czp7YzpPdCxyOkt0fSxlOntjOnpyLHI6V2l9fSkpLGsuc2hlZXRTdHVicylpZihpdC5NZXJnZUFjcm9zc3x8aXQuTWVyZ2VEb3duKXtmb3IodmFyIGlhPU90O2lhPD16cjsrK2lhKWZvcih2'@;
put 'YXIgT3M9S3Q7T3M8PVdpOysrT3MpKGlhPk90fHxPcz5LdCkmJihrLmRlbnNlPyhldFtPc118fChldFtPc109W10pLGV0W09zXVtpYV09e3Q6InoifSk6ZXRba2EoaWEpK2ppKE9zKV09e3Q6InoifSk7T3Q9enIrMX1lbHNlKytPdDtlbHNlIGl0Lk1lcmdlQWNyb3NzP090PXpyKzE6KytPdH1l'@;
put 'bHNlKGl0PVlTKHBlWzBdKSkuSW5kZXgmJihPdD0raXQuSW5kZXgtMSksT3Q8VG4ucy5jJiYoVG4ucy5jPU90KSxPdD5Ubi5lLmMmJihUbi5lLmM9T3QpLCIvPiI9PT1wZVswXS5zbGljZSgtMikmJisrT3QsbmE9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PXBlWzFdfHwiLz4iPT09cGVbMF0u'@;
put 'c2xpY2UoLTIpPyhLdDxUbi5zLnImJihUbi5zLnI9S3QpLEt0PlRuLmUuciYmKFRuLmUucj1LdCksIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKGJ0PVAwKHBlWzBdKSkuSW5kZXgmJihLdD0rYnQuSW5kZXgtMSksT3Q9MCwrK0t0KTooKGJ0PVAwKHBlWzBdKSkuSW5kZXgmJihLdD0rYnQuSW5k'@;
put 'ZXgtMSksSG49e30sKCIwIj09YnQuQXV0b0ZpdEhlaWdodHx8YnQuSGVpZ2h0KSYmKEhuLmhwdD1wYXJzZUZsb2F0KGJ0LkhlaWdodCksSG4uaHB4PW9oKEhuLmhwdCksd3JbS3RdPUhuKSwiMSI9PWJ0LkhpZGRlbiYmKEhuLmhpZGRlbj0hMCx3cltLdF09SG4pKTticmVhaztjYXNlIndvcmtz'@;
put 'aGVldCI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpO1llLnB1c2goY3QpLFRuLnMucjw9VG4uZS5yJiZUbi5zLmM8PVRuLmUuYyYmKGV0WyIhcmVmIl09cmEoVG4pLGsuc2hlZXRS'@;
put 'b3dzJiZrLnNoZWV0Um93czw9VG4uZS5yJiYoZXRbIiFmdWxscmVmIl09ZXRbIiFyZWYiXSxUbi5lLnI9ay5zaGVldFJvd3MtMSxldFsiIXJlZiJdPXJhKFRuKSkpLGpuLmxlbmd0aCYmKGV0WyIhbWVyZ2VzIl09am4pLFJpLmxlbmd0aD4wJiYoZXRbIiFjb2xzIl09UmkpLHdyLmxlbmd0aD4w'@;
put 'JiYoZXRbIiFyb3dzIl09d3IpLFR0JiYoZXRbIiFzaGVldEZvcm1hdCJdPUx6KFR0KSksVmVbY3RdPWV0fWVsc2UgVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sS3Q9T3Q9MCxiZS5wdXNoKFtwZVszXSwhMV0pLFBlPVAwKHBlWzBdKSxjdD1RcihQZS5OYW1lKSxldD1rLmRlbnNl'@;
put 'P1tdOnt9LGpuPVtdLGpyPVtdLHdyPVtdLENpLlNoZWV0cy5wdXNoKHdhPXtuYW1lOmN0LEhpZGRlbjowfSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8'@;
put 'IikpfWVsc2V7aWYoIi8+Ij09cGVbMF0uc2xpY2UoLTIpKWJyZWFrO1R0PVAwKHBlWzBdKSxiZS5wdXNoKFtwZVszXSwhMV0pLFJpPVtdLEJuPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIvIj09PXBlWzFdPyRTKHNyLENuLHVyLGspOihDbj1QMChwZVswXSksdXI9IiIpO2JyZWFrO2Nhc2UibnVt'@;
put 'YmVyZm9ybWF0IjpDbi5uZj1RcihQMChwZVswXSkuRm9ybWF0fHwiR2VuZXJhbCIpLG5lW0NuLm5mXSYmKENuLm5mPW5lW0NuLm5mXSk7Zm9yKHZhciBQYT0wOzM5MiE9UGEmJkEuX3RhYmxlW1BhXSE9Q24ubmY7KytQYSk7aWYoMzkyPT1QYSlmb3IoUGE9NTc7MzkyIT1QYTsrK1BhKWlmKG51'@;
put 'bGw9PUEuX3RhYmxlW1BhXSl7QS5sb2FkKENuLm5mLFBhKTticmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PWJlW2JlLmxlbmd0aC0xXVswXXx8Ii8iPT09cGVbMV0pYnJlYWs7aWYoKFJyPVAwKHBlWzBdKSkuSGlkZGVuJiYoUnIuaGlkZGVuPSEwLGRlbGV0ZSBSci5IaWRk'@;
put 'ZW4pLFJyLldpZHRoP1JyLndweD00KnBhcnNlSW50KFJyLldpZHRoLDEwKS8zOitSci5BdXRvRml0V2lkdGgmJihSci5hdXRvPTEpLCFCbiYmUnIud3B4PjEwKXtCbj0hMCx4Yz1taztmb3IodmFyIHVzPTA7dXM8UmkubGVuZ3RoOysrdXMpUmlbdXNdJiZKMChSaVt1c10pfUJuJiZKMChSciks'@;
put 'UmlbUnIuSW5kZXgtMXx8UmkubGVuZ3RoXT1Scjtmb3IodmFyIHFhPTA7cWE8K1JyLlNwYW47KytxYSlSaVtSaS5sZW5ndGhdPUp0KFJyKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PXBlWzFdKWJyZWFrO0NpLk5hbWVzfHwoQ2kuTmFtZXM9W10pO3ZhciBWaT15cihwZVswXSks'@;
put 'SW89e05hbWU6VmkuTmFtZSxSZWY6TzUoVmkuUmVmZXJzVG8uc2xpY2UoMSkse3I6MCxjOjB9KX07Q2kuU2hlZXRzLmxlbmd0aD4wJiYoSW8uU2hlZXQ9Q2kuU2hlZXRzLmxlbmd0aC0xKSxDaS5OYW1lcy5wdXNoKElvKTticmVhaztjYXNlIm5hbWVkY2VsbCI6Y2FzZSJiIjpjYXNlImkiOmNh'@;
put 'c2UidSI6Y2FzZSJzIjpjYXNlImVtIjpjYXNlImgyIjpjYXNlImgzIjpjYXNlInN1YiI6Y2FzZSJzdXAiOmNhc2Uic3BhbiI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFncmFwaHMiOmNhc2UibmFtZSI6YnJlYWs7Y2FzZSJhbGlnbm1lbnQiOmlmKCFrLmNlbGxTdHlsZXN8fCIvIj09PXBl'@;
put 'WzFdKWJyZWFrO0NuLkFsaWdubWVudD1QMChwZVswXSk7YnJlYWs7Y2FzZSJib3JkZXJzIjoiLyIhPT1wZVsxXSYmKENuLkJvcmRlcnM9W10pO2JyZWFrO2Nhc2UiYm9yZGVyIjppZigiLyI9PT1wZVsxXSlicmVhaztDbi5Cb3JkZXJzfHwoQ24uQm9yZGVycz1bXSksQ24uQm9yZGVycy5wdXNo'@;
put 'KFAwKHBlWzBdKSk7YnJlYWs7Y2FzZSJmb250IjppZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXt1cis9cGVbMF07YnJlYWt9Ii8iPT09cGVbMV0/dXIrPUsuc2xpY2UoZXIscGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTplcj1wZS5pbmRleDticmVhaztjYXNlImludGVyaW9yIjppZighay5jZWxs'@;
put 'U3R5bGVzfHwiLyI9PT1wZVsxXSlicmVhaztDbi5JbnRlcmlvcj1QMChwZVswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNvbXBh'@;
put 'bnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRlbnRp'@;
put 'ZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP0gzKHByLG9zLEsuc2xpY2UocnIscGUuaW5kZXgpKTpycj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jv'@;
put 'b2siOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIGJlLnB1c2goW3BlWzNdLCExXSk7YnJlYWs7Y2FzZSJjb21tZW50IjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPWJlLnBv'@;
put 'cCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSk7SHoobGEpLG5hLnB1c2gobGEpfWVsc2UgYmUucHVzaChbcGVbM10sITFdKSxsYT17YTooUGU9UDAocGVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYoIi8iPT09'@;
put 'cGVbMV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSl7dmFyIEZuPVAwKHBlWzBdKTtldFsiIWF1dG9maWx0ZXIiXT17cmVmOk81'@;
put 'KEZuLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0sYmUucHVzaChbcGVbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZihldFsiIXZhbGlkYXRpb25zIl18fChldFsiIXZhbGlkYXRpb25zIl09W10pLCIvIj09PXBlWzFdKXtpZigoUGU9YmUucG9wKCkpWzBdIT09cGVbM10p'@;
put 'dGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmYmUucHVzaChbcGVbM10sITBdKSxQaT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXBlWzFdKXt2YXIgWXM9K0suc2xp'@;
put 'Y2UoRHQscGUuaW5kZXgpOyg3Mj09WXN8fDk2PT1ZcykmJkZmKFlzKX1lbHNlIER0PXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOmNhc2UiZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJvZmZp'@;
put 'Y2Vkb2N1bWVudHNldHRpbmdzIjpjYXNlInBpdm90dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6Y2FzZSJuYW1lcyI6Y2FzZSJtYXBpbmZvIjpjYXNlInBhZ2VicmVha3MiOmNhc2UicXVlcnl0YWJsZSI6Y2FzZSJzb3J0aW5nIjpjYXNlInNjaGVtYSI6Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRp'@;
put 'bmciOmNhc2Uic21hcnR0YWd0eXBlIjpjYXNlInNtYXJ0dGFncyI6Y2FzZSJleGNlbHdvcmtib29rIjpjYXNlIndvcmtib29rb3B0aW9ucyI6Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPWJlLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigi'@;
put 'QmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJmJlLnB1c2goW3BlWzNdLCEwXSk7YnJlYWs7ZGVmYXVsdDppZigwPT1iZS5sZW5ndGgmJiJkb2N1bWVudCI9PXBlWzNdfHwwPT1iZS5sZW5ndGgmJiJ1b2YiPT1wZVszXSly'@;
put 'ZXR1cm4gT0koSyxrKTt2YXIgaHI9ITA7c3dpdGNoKGJlW2JlLmxlbmd0aC0xXVswXSl7Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpzd2l0Y2gocGVbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMi'@;
put 'OmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNlInJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRv'@;
put 'cHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidG9vbGJhciI6Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlvbiI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVyIjpicmVh'@;
put 'aztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiZXhjZWx3b3JrYm9vayI6c3dpdGNoKHBlWzNdKXtjYXNlImRhdGUxOTA0IjpDaS5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93'@;
put 'dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJvdGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNh'@;
put 'c2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0'@;
put 'ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVkc2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2Ui'@;
put 'Zm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2FzZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVm'@;
put 'b3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNhc2Uid2lk'@;
put 'dGgiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidmlzaWJsZSI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1wZVsxXSlzd2l0Y2goSy5zbGljZShycixwZS5pbmRleCkpe2Nhc2UiU2hlZXRIaWRk'@;
put 'ZW4iOndhLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRWZXJ5SGlkZGVuIjp3YS5IaWRkZW49Mn1lbHNlIHJyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6ZXRbIiFtYXJnaW5zIl18fEozKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJnaW5zIl0u'@;
put 'aGVhZGVyPXlyKHBlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJmb290ZXIiOmV0WyIhbWFyZ2lucyJdfHxKMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmZvb3Rlcj15cihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBKbD15cihwZVsw'@;
put 'XSk7ZXRbIiFtYXJnaW5zIl18fEozKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksSmwuVG9wJiYoZXRbIiFtYXJnaW5zIl0udG9wPUpsLlRvcCksSmwuTGVmdCYmKGV0WyIhbWFyZ2lucyJdLmxlZnQ9SmwuTGVmdCksSmwuUmlnaHQmJihldFsiIW1hcmdpbnMiXS5yaWdodD1KbC5SaWdodCks'@;
put 'SmwuQm90dG9tJiYoZXRbIiFtYXJnaW5zIl0uYm90dG9tPUpsLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOkNpLlZpZXdzfHwoQ2kuVmlld3M9W10pLENpLlZpZXdzWzBdfHwoQ2kuVmlld3NbMF09e30pLENpLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNlImZyZWV6'@;
put 'ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2UiYWN0aXZlcm93IjpjYXNlImFjdGl2ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2UicGFuZXMi'@;
put 'OmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1iZXIiOmNhc2UibGF5b3V0IjpjYXNlInBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHByaW50ZXJp'@;
put 'bmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpjYXNlInZlcnRpY2FscmVzb2x1dGlvbiI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNlInJhbmdl'@;
put 'c2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4IjpjYXNlInBhZ2VsYXlvdXR6b29tIjpjYXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVmdHRvcmln'@;
put 'aHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29ydCI6Y2FzZSJhbGxvd2ZpbHRlciI6Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRoeXBlcmxp'@;
put 'bmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2UiYWxsb3dzaXplY29scyI6Y2FzZSJhbGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUiOmNhc2Ui'@;
put 'ZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBhZ2VicmVhayI6Y2FzZSJyb3djb2xoZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZpZXdhYmxl'@;
put 'cmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3RlY3Rjb250ZW50cyI6YnJlYWs7Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PXBlWzFdKXtldFsiIWZyZWV6ZSJdfHwoZXRbIiFmcmVlemUiXT0i'@;
put 'QTEiKTt2YXIgVWw9VnMoZXRbIiFmcmVlemUiXSk7InNwbGl0aG9yaXpvbnRhbCI9PXBlWzNdP1VsLnI9K0suc2xpY2UocnIscGUuaW5kZXgpOlVsLmM9K0suc2xpY2UocnIscGUuaW5kZXgpLGV0WyIhZnJlZXplIl09cWkoVWwpfWVsc2UgcnI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFr'@;
put 'O2Nhc2UiZG9ub3RkaXNwbGF5Z3JpZGxpbmVzIjpldFsiIWdyaWRsaW5lcyJdPSExO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5cm93c2JlbG93ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsiIW91dGxpbmUiXS5hYm92ZT0hMDticmVhaztjYXNlIm5vc3VtbWFy'@;
put 'eWNvbHVtbnNyaWdodGRldGFpbCI6ZXRbIiFvdXRsaW5lIl18fChldFsiIW91dGxpbmUiXT17fSksZXRbIiFvdXRsaW5lIl0ubGVmdD0hMDticmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaW1tZWRp'@;
put 'YXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRpb24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9u'@;
put 'IjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZpZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291'@;
put 'bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dy'@;
put 'YW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJlZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdl'@;
put 'bGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2UidmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNh'@;
put 'c2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKHBlWzNdKXtjYXNlImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJlYWsiOmNh'@;
put 'c2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJvd2VuZCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImF1dG9maWx0ZXIiOnN3aXRjaChwZVszXSl7Y2FzZSJhdXRvZmlsdGVyY29sdW1uIjpjYXNlImF1dG9maWx0ZXJjb25kaXRpb24iOmNhc2UiYXV0b2ZpbHRlcmFuZCI6'@;
put 'Y2FzZSJhdXRvZmlsdGVyb3IiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJxdWVyeXRhYmxlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1hdHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpj'@;
put 'YXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJlZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJj'@;
put 'b2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFsIjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNu'@;
put 'dW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFzdGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0'@;
put 'OmhyPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChwZVszXSl7Y2FzZSJyYW5nZSI6UGkucmVmPXBlO2JyZWFrO2Nhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZl'@;
put 'IjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVy'@;
put 'IjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpjYXNlImNlbGxyYW5nZWxpc3QiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJzb3J0aW5nIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6c3dpdGNoKHBlWzNdKXtjYXNlInJh'@;
put 'bmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNl'@;
put 'ImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9y'@;
put 'bWF0IjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKHBlWzNdKXtjYXNlIm1hcCI6Y2FzZSJlbnRyeSI6Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNlImZpbHRl'@;
put 'cm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50dHlwZSI6Y2FzZSJhdHRyaWJ1dGV0eXBlIjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50IjpjYXNlImNvbXBsZXh0eXBlIjpjYXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6Y2FzZSJy'@;
put 'b3ciOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9aWYoaHJ8fHBlWzNdLm1hdGNoKC8hXFtDREFUQS8pKWJyZWFrO2lmKCFiZVtiZS5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsifCIrYmUu'@;
put 'am9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09YmVbYmUubGVuZ3RoLTFdWzBdKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP1B6KGJyLG9zLFNpLEsuc2xpY2UocnIscGUuaW5kZXgpKTooU2k9cGUscnI9cGUuaW5kZXgrcGVbMF0u'@;
put 'bGVuZ3RoKTticmVha31pZihrLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3BlWzNdKyJ8IitiZS5qb2luKCJ8Iil9dmFyIFpsPXt9O3JldHVybiFrLmJvb2tTaGVldHMmJiFrLmJvb2tQcm9wcyYmKFpsLlNoZWV0cz1WZSksWmwuU2hlZXROYW1lcz1ZZSxabC5Xb3JrYm9vaz1DaSxa'@;
put 'bC5TU0Y9QS5nZXRfdGFibGUoKSxabC5Qcm9wcz1wcixabC5DdXN0cHJvcHM9YnIsWmwuU2hlZXRzJiZabC5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oZ3Upe3ZhciBDbD1abC5TaGVldHNbZ3VdO0NsWyIhbWVyZ2VzIl0mJkNsWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihsbil7'@;
put 'InN0cmluZyI9PXR5cGVvZiBsbiYmKGxuPXcudXRpbHMuZGVjb2RlX3JhbmdlKGxuKSk7dmFyIEVuPXcudXRpbHMuZW5jb2RlX2NlbGwobG4ucyksWm49QXJyYXkuaXNBcnJheShDbCk/KENsW2xuLnMucl18fFtdKVtsbi5zLmNdOkNsW0VuXTtabiYmWm4ucyYmKG51bGwhPVpuLnMudG9wJiZW'@;
put 'dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoQ2wsbG4se3RvcDpabi5zLnRvcH0pLG51bGwhPVpuLnMuYm90dG9tJiZWdS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoQ2wsbG4se2JvdHRvbTpabi5zLmJvdHRvbX0pLG51bGwhPVpuLnMubGVmdCYmVnUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKENsLGxu'@;
put 'LHtsZWZ0OlpuLnMubGVmdH0pLG51bGwhPVpuLnMucmlnaHQmJlZ1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShDbCxsbix7cmlnaHQ6Wm4ucy5yaWdodH0pKX0pfSksWmx9ZnVuY3Rpb24gSTgoUyxPKXtzd2l0Y2goakkoTz1PfHx7fSksTy50eXBlfHwiYmFzZTY0Iil7Y2FzZSJiYXNlNjQiOnJl'@;
put 'dHVybiBEOChfZS5kZWNvZGUoUyksTyk7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJldHVybiBEOChTLE8pO2Nhc2UiYXJyYXkiOnJldHVybiBEOChDKFMpLE8pfX1mdW5jdGlvbiBDSShTKXtyZXR1cm4gSHIoIk5hbWVkUmFuZ2UiLG51bGwseyJzczpOYW1lIjpTLk5h'@;
put 'bWUsInNzOlJlZmVyc1RvIjoiPSIrSDQoUy5SZWYse3I6MCxjOjB9KX0pfWZ1bmN0aW9uICRuZShTLE8sayxLLGVlLG9lLG1lKXtpZighU3x8bnVsbD09Uy52JiZudWxsPT1TLmYmJiFLLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIHBlPXt9O2lmKFMuZiYmKHBlWyJzczpGb3JtdWxhIl09Ij0i'@;
put 'K1ByKEg0KFMuZixtZSkpKSxTLkYmJlMuRi5zbGljZSgwLE8ubGVuZ3RoKT09Tyl7dmFyIGJlPVZzKFMuRi5zbGljZShPLmxlbmd0aCsxKSk7cGVbInNzOkFycmF5UmFuZ2UiXT0iUkM6UiIrKGJlLnI9PW1lLnI/IiI6IlsiKyhiZS5yLW1lLnIpKyJdIikrIkMiKyhiZS5jPT1tZS5jPyIiOiJb'@;
put 'IisoYmUuYy1tZS5jKSsiXSIpfWlmKFMubCYmUy5sLlRhcmdldCYmKHBlWyJzczpIUmVmIl09UHIoUy5sLlRhcmdldCksUy5sLlRvb2x0aXAmJihwZVsieDpIUmVmU2NyZWVuVGlwIl09UHIoUy5sLlRvb2x0aXApKSksa1siIW1lcmdlcyJdKWZvcih2YXIgUGU9a1siIW1lcmdlcyJdLFZlPTA7'@;
put 'VmUhPVBlLmxlbmd0aDsrK1ZlKVBlW1ZlXS5zLmMhPW1lLmN8fFBlW1ZlXS5zLnIhPW1lLnJ8fChQZVtWZV0uZS5jPlBlW1ZlXS5zLmMmJihwZVsic3M6TWVyZ2VBY3Jvc3MiXT1QZVtWZV0uZS5jLVBlW1ZlXS5zLmMpLFBlW1ZlXS5lLnI+UGVbVmVdLnMuciYmKHBlWyJzczpNZXJnZURvd24i'@;
put 'XT1QZVtWZV0uZS5yLVBlW1ZlXS5zLnIpKTt2YXIgWWU9IiIsZXQ9IiI7c3dpdGNoKFMudCl7Y2FzZSJ6IjppZighSy5zaGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2UibiI6WWU9Ik51bWJlciIsZXQ9U3RyaW5nKFMudik7YnJlYWs7Y2FzZSJiIjpZZT0iQm9vbGVhbiIsZXQ9Uy52PyIx'@;
put 'IjoiMCI7YnJlYWs7Y2FzZSJlIjpZZT0iRXJyb3IiLGV0PUNjW1Mudl07YnJlYWs7Y2FzZSJkIjpZZT0iRGF0ZVRpbWUiLGV0PW5ldyBEYXRlKFMudikudG9JU09TdHJpbmcoKSxudWxsPT1TLnomJihTLno9Uy56fHxBLl90YWJsZVsxNF0pO2JyZWFrO2Nhc2UicyI6WWU9IlN0cmluZyIsZXQ9'@;
put 'X2EoUy52fHwiIil9dmFyIGN0PXMwKEsuY2VsbFhmcyxudWxsLFMsSyk7cGVbInNzOlN0eWxlSUQiXT0icyIrKDIxK2N0KSxwZVsic3M6SW5kZXgiXT1tZS5jKzE7dmFyIFR0PW51bGwhPVMudj9ldDoiIixpdD0ieiI9PVMudD8iIjpTLlI/ZnVuY3Rpb24gQ3koUyl7cmV0dXJuJzxzczpEYXRh'@;
put 'IHNzOlR5cGU9IlN0cmluZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPicrUy5tYXAoZnVuY3Rpb24oayl7dmFyIEs9X2Eoay52KTtyZXR1cm4gay5zJiYoay5zLmJvbGQmJihLPSI8Qj4iK0srIjwvQj4iKSxrLnMuaXRhbGljJiYoSz0iPEk+IitLKyI8L0k+Iiks'@;
put 'ay5zLnN0cmlrZSYmKEs9IjxTPiIrSysiPC9TPiIpLGsucy51bmRlcmxpbmUmJihLPSI8VT4iK0srIjwvVT4iKSwic3VwZXIiPT1rLnMudmFsaWduJiYoSz0iPFN1cD4iK0srIjwvU3VwPiIpLCJzdWIiPT1rLnMudmFsaWduJiYoSz0iPFN1Yj4iK0srIjwvU3ViPiIpLChrLnMubmFtZXx8ay5z'@;
put 'LnN6fHxrLnMuY29sb3ImJm51bGwhPWsucy5jb2xvci5yZ2IpJiYoSz1bIjxGb250IixrLnMubmFtZT8nIGh0bWw6RmFjZT0iJytrLnMubmFtZSsnIic6IiIsay5zLnN6PycgaHRtbDpTaXplPSInK2sucy5zeisnIic6IiIsay5zLmNvbG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygi'@;
put 'bnVtYmVyIj09dHlwZW9mIGsucy5jb2xvci5yZ2I/ay5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6ay5zLmNvbG9yLnJnYikpLnNsaWNlKC02KSsnIic6IiIsIj4iLEssIjwvRm9udD4iXS5qb2luKCIiKSkpLEt9KS5qb2luKCIiKSsiPC9EYXRhPiJ9KFMuUik6JzxEYXRhIHNzOlR5cGU9Iicr'@;
put 'WWUrJyI+JytUdCsiPC9EYXRhPiI7cmV0dXJuKFMuY3x8W10pLmxlbmd0aD4wJiYoaXQrPWZ1bmN0aW9uIE1JKFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihPKXt2YXIgSz1Icigic3M6RGF0YSIsTmEoTy50fHwiIikse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0p'@;
put 'O3JldHVybiBIcigiQ29tbWVudCIsSyx7InNzOkF1dGhvciI6Ty5hfSl9KS5qb2luKCIiKX0oUy5jKSksSHIoIkNlbGwiLGl0LHBlKX1mdW5jdGlvbiBLbmUoUyxPKXt2YXIgaz0nPFJvdyBzczpJbmRleD0iJysoUysxKSsnIic7cmV0dXJuIE8mJihPLmhweCYmIU8uaHB0JiYoTy5ocHQ9WjMo'@;
put 'Ty5ocHgpKSxPLmhwdCYmKGsrPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK08uaHB0KyciJyksTy5oaWRkZW4mJihrKz0nIHNzOkhpZGRlbj0iMSInKSksaysiPiJ9ZnVuY3Rpb24geEkoUyxPLGspe3ZhciBLPVtdLG9lPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV0sbWU9'@;
put 'b2U/ZnVuY3Rpb24gTnooUyxPLGssSyl7aWYoIVN8fCEoKEt8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgZWU9Sy5Xb3JrYm9vay5OYW1lcyxvZT1bXSxtZT0wO21lPGVlLmxlbmd0aDsrK21lKXt2YXIgcGU9ZWVbbWVdO3BlLlNoZWV0PT1rJiYocGUuTmFtZS5t'@;
put 'YXRjaCgvXl94bGZuXC4vKXx8b2UucHVzaChDSShwZSkpKX1yZXR1cm4gb2Uuam9pbigiIil9KG9lLDAsUyxrKToiIjtyZXR1cm4gbWUubGVuZ3RoPjAmJksucHVzaCgiPE5hbWVzPiIrbWUrIjwvTmFtZXM+IiksbWU9b2U/ZnVuY3Rpb24gVnooUyxPLGssSyl7aWYoIVNbIiFyZWYiXSlyZXR1'@;
put 'cm4iIjt2YXIgZWU9c3MoU1siIXJlZiJdKSxvZT1TWyIhbWVyZ2VzIl18fFtdLG1lPTAscGU9W107U1siIWNvbHMiXSYmU1siIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0LEJ0KXtKMChidCk7dmFyIER0PSEhYnQud2lkdGgsT3Q9dTgoQnQsYnQpLEt0PXsic3M6SW5kZXgiOkJ0KzF9O0R0'@;
put 'JiYoS3RbInNzOldpZHRoIl09dzUoT3Qud2lkdGgpKSxidC5oaWRkZW4mJihLdFsic3M6SGlkZGVuIl09IjEiKSxwZS5wdXNoKEhyKCJDb2x1bW4iLG51bGwsS3QpKX0pO2Zvcih2YXIgYmU9QXJyYXkuaXNBcnJheShTKSxQZT1lZS5zLnI7UGU8PWVlLmUucjsrK1BlKXtmb3IodmFyIFZlPVtL'@;
put 'bmUoUGUsKFNbIiFyb3dzIl18fFtdKVtQZV0pXSxZZT1lZS5zLmM7WWU8PWVlLmUuYzsrK1llKXt2YXIgZXQ9ITE7Zm9yKG1lPTA7bWUhPW9lLmxlbmd0aDsrK21lKWlmKCEob2VbbWVdLnMuYz5ZZXx8b2VbbWVdLnMucj5QZXx8b2VbbWVdLmUuYzxZZXx8b2VbbWVdLmUucjxQZSkpeyhvZVtt'@;
put 'ZV0ucy5jIT1ZZXx8b2VbbWVdLnMuciE9UGUpJiYoZXQ9ITApO2JyZWFrfWlmKCFldCl7dmFyIGN0PXtyOlBlLGM6WWV9LFR0PXFpKGN0KTtWZS5wdXNoKCRuZShiZT8oU1tQZV18fFtdKVtZZV06U1tUdF0sVHQsUyxPLDAsMCxjdCkpfX1WZS5wdXNoKCI8L1Jvdz4iKSxWZS5sZW5ndGg+MiYm'@;
put 'cGUucHVzaChWZS5qb2luKCIiKSl9cmV0dXJuIHBlLmpvaW4oIiIpfShvZSxPKToiIixtZS5sZW5ndGg+MCYmSy5wdXNoKCI8VGFibGU+IittZSsiPC9UYWJsZT4iKSxLLnB1c2goZnVuY3Rpb24gcVMoUyxPLGssSyl7aWYoIVMpcmV0dXJuIiI7dmFyIGVlPVtdO2lmKFNbIiFtYXJnaW5zIl0m'@;
put 'JihlZS5wdXNoKCI8UGFnZVNldHVwPiIpLFNbIiFtYXJnaW5zIl0uaGVhZGVyJiZlZS5wdXNoKEhyKCJIZWFkZXIiLG51bGwseyJ4Ok1hcmdpbiI6U1siIW1hcmdpbnMiXS5oZWFkZXJ9KSksU1siIW1hcmdpbnMiXS5mb290ZXImJmVlLnB1c2goSHIoIkZvb3RlciIsbnVsbCx7Ing6TWFyZ2lu'@;
put 'IjpTWyIhbWFyZ2lucyJdLmZvb3Rlcn0pKSxlZS5wdXNoKEhyKCJQYWdlTWFyZ2lucyIsbnVsbCx7Ing6Qm90dG9tIjpTWyIhbWFyZ2lucyJdLmJvdHRvbXx8IjAuNzUiLCJ4OkxlZnQiOlNbIiFtYXJnaW5zIl0ubGVmdHx8IjAuNyIsIng6UmlnaHQiOlNbIiFtYXJnaW5zIl0ucmlnaHR8fCIw'@;
put 'LjciLCJ4OlRvcCI6U1siIW1hcmdpbnMiXS50b3B8fCIwLjc1In0pKSxlZS5wdXNoKCI8L1BhZ2VTZXR1cD4iKSksSyYmSy5Xb3JrYm9vayYmSy5Xb3JrYm9vay5TaGVldHMmJksuV29ya2Jvb2suU2hlZXRzW2tdKWlmKEsuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbillZS5wdXNoKEhyKCJW'@;
put 'aXNpYmxlIiwxPT1LLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW4/IlNoZWV0SGlkZGVuIjoiU2hlZXRWZXJ5SGlkZGVuIix7fSkpO2Vsc2V7Zm9yKHZhciBvZT0wO29lPGsmJighSy5Xb3JrYm9vay5TaGVldHNbb2VdfHxLLldvcmtib29rLlNoZWV0c1tvZV0uSGlkZGVuKTsrK29lKTtvZT09'@;
put 'ayYmZWUucHVzaCgiPFNlbGVjdGVkLz4iKX1pZigoKCgoS3x8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmZWUucHVzaCgiPERpc3BsYXlSaWdodFRvTGVmdC8+IiksWnQoU1siIWdyaWRsaW5lcyJdKSYmZWUucHVzaCgiPERvTm90RGlzcGxheUdyaWRsaW5lcy8+'@;
put 'IiksU1siIWZyZWV6ZSJdKXtlZS5wdXNoKCI8RnJlZXplUGFuZXMvPiIpLGVlLnB1c2goIjxGcm96ZW5Ob1NwbGl0Lz4iKTt2YXIgbWU9VnMoU1siIWZyZWV6ZSJdKTttZS5yPjAmJihlZS5wdXNoKFZhKCJTcGxpdEhvcml6b250YWwiLCIiK21lLnIpKSxlZS5wdXNoKFZhKCJUb3BSb3dCb3R0'@;
put 'b21QYW5lIiwiIittZS5yKSkpLG1lLmM+MCYmKGVlLnB1c2goVmEoIlNwbGl0VmVydGljYWwiLCIiK21lLmMpKSxlZS5wdXNoKFZhKCJMZWZ0Q29sdW1uUmlnaHRQYW5lIiwiIittZS5jKSkpfXJldHVybiBTWyIhcHJvdGVjdCJdJiYoZWUucHVzaChWYSgiUHJvdGVjdENvbnRlbnRzIiwiVHJ1'@;
put 'ZSIpKSxTWyIhcHJvdGVjdCJdLm9iamVjdHMmJmVlLnB1c2goVmEoIlByb3RlY3RPYmplY3RzIiwiVHJ1ZSIpKSxTWyIhcHJvdGVjdCJdLnNjZW5hcmlvcyYmZWUucHVzaChWYSgiUHJvdGVjdFNjZW5hcmlvcyIsIlRydWUiKSksbnVsbD09U1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxs'@;
put 'c3x8U1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxscz9udWxsIT1TWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJiFTWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJmVlLnB1c2goVmEoIkVuYWJsZVNlbGVjdGlvbiIsIlVubG9ja2VkQ2VsbHMiKSk6ZWUucHVz'@;
put 'aChWYSgiRW5hYmxlU2VsZWN0aW9uIiwiTm9TZWxlY3Rpb24iKSksW1siZm9ybWF0Q2VsbHMiLCJBbGxvd0Zvcm1hdENlbGxzIl0sWyJmb3JtYXRDb2x1bW5zIiwiQWxsb3dTaXplQ29scyJdLFsiZm9ybWF0Um93cyIsIkFsbG93U2l6ZVJvd3MiXSxbImluc2VydENvbHVtbnMiLCJBbGxvd0lu'@;
put 'c2VydENvbHMiXSxbImluc2VydFJvd3MiLCJBbGxvd0luc2VydFJvd3MiXSxbImluc2VydEh5cGVybGlua3MiLCJBbGxvd0luc2VydEh5cGVybGlua3MiXSxbImRlbGV0ZUNvbHVtbnMiLCJBbGxvd0RlbGV0ZUNvbHMiXSxbImRlbGV0ZVJvd3MiLCJBbGxvd0RlbGV0ZVJvd3MiXSxbInNvcnQi'@;
put 'LCJBbGxvd1NvcnQiXSxbImF1dG9GaWx0ZXIiLCJBbGxvd0ZpbHRlciJdLFsicGl2b3RUYWJsZXMiLCJBbGxvd1VzZVBpdm90VGFibGVzIl1dLmZvckVhY2goZnVuY3Rpb24ocGUpe1NbIiFwcm90ZWN0Il1bcGVbMF1dJiZlZS5wdXNoKCI8IitwZVsxXSsiLz4iKX0pKSwwPT1lZS5sZW5ndGg/'@;
put 'IiI6SHIoIldvcmtzaGVldE9wdGlvbnMiLGVlLmpvaW4oIiIpLHt4bWxuczp2bC54fSl9KG9lLDAsUyxrKSksSy5qb2luKCIiKX1mdW5jdGlvbiBFSShTLE8pe098fChPPXt9KSxTLlNTRnx8KFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxP'@;
put 'LnJldnNzZj1EZShTLlNTRiksTy5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLE8uc3NmPVMuU1NGLFMuU3R5bGVzPXtGb250czpPLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOk8u'@;
put 'RmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOk8uQm9yZGVycz1be31dfSxPLmNlbGxYZnM9W10sTy5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sczAoTy5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0p'@;
put 'KTt2YXIgaz1bXTtrLnB1c2goZnVuY3Rpb24gYkkoUyxPKXt2YXIgaz1bXTtyZXR1cm4gUy5Qcm9wcyYmay5wdXNoKGZ1bmN0aW9uIEt3KFMsTyl7dmFyIGs9W107cmV0dXJuIFJlKFA2KS5tYXAoZnVuY3Rpb24oSyl7Zm9yKHZhciBlZT0wO2VlPEQwLmxlbmd0aDsrK2VlKWlmKEQwW2VlXVsx'@;
put 'XT09SylyZXR1cm4gRDBbZWVdO2ZvcihlZT0wO2VlPHJoLmxlbmd0aDsrK2VlKWlmKHJoW2VlXVsxXT09SylyZXR1cm4gcmhbZWVdO3Rocm93IEt9KS5mb3JFYWNoKGZ1bmN0aW9uKEspe2lmKG51bGwhPVNbS1sxXV0pe3ZhciBlZT1PJiZPLlByb3BzJiZudWxsIT1PLlByb3BzW0tbMV1dP08u'@;
put 'UHJvcHNbS1sxXV06U1tLWzFdXTsiZGF0ZSI9PT1LWzJdJiYoZWU9bmV3IERhdGUoZWUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIGVlP2VlPVN0cmluZyhlZSk6ITA9PT1lZXx8ITE9PT1lZT9lZT1lZT8iMSI6IjAiOmVlIGluc3RhbmNl'@;
put 'b2YgRGF0ZSYmKGVlPW5ldyBEYXRlKGVlKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIiIpKSxrLnB1c2goVmEoUDZbS1sxXV18fEtbMV0sZWUpKX19KSxIcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixrLmpvaW4oIiIpLHt4bWxuczp2bC5vfSl9KFMuUHJvcHMsTykpLFMuQ3VzdHBy'@;
put 'b3BzJiZrLnB1c2goZnVuY3Rpb24gSDYoUyxPKXt2YXIgaz1bIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIl0sSz0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixlZT1bXTtyZXR1cm4gUyYmUmUoUykuZm9yRWFjaChmdW5jdGlvbihvZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w'@;
put 'ZXJ0eS5jYWxsKFMsb2UpKXtmb3IodmFyIG1lPTA7bWU8RDAubGVuZ3RoOysrbWUpaWYob2U9PUQwW21lXVsxXSlyZXR1cm47Zm9yKG1lPTA7bWU8cmgubGVuZ3RoOysrbWUpaWYob2U9PXJoW21lXVsxXSlyZXR1cm47Zm9yKG1lPTA7bWU8ay5sZW5ndGg7KyttZSlpZihvZT09a1ttZV0pcmV0'@;
put 'dXJuO3ZhciBwZT1TW29lXSxiZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHBlPyhiZT0iZmxvYXQiLHBlPVN0cmluZyhwZSkpOiEwPT09cGV8fCExPT09cGU/KGJlPSJib29sZWFuIixwZT1wZT8iMSI6IjAiKTpwZT1TdHJpbmcocGUpLGVlLnB1c2goSHIoZmEob2UpLHBlLHsiZHQ6ZHQi'@;
put 'OmJlfSkpfX0pLE8mJlJlKE8pLmZvckVhY2goZnVuY3Rpb24ob2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPLG9lKSYmKCFTfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsb2UpKSl7dmFyIG1lPU9bb2VdLHBlPSJzdHJpbmciOyJu'@;
put 'dW1iZXIiPT10eXBlb2YgbWU/KHBlPSJmbG9hdCIsbWU9U3RyaW5nKG1lKSk6ITA9PT1tZXx8ITE9PT1tZT8ocGU9ImJvb2xlYW4iLG1lPW1lPyIxIjoiMCIpOm1lIGluc3RhbmNlb2YgRGF0ZT8ocGU9ImRhdGVUaW1lLnR6IixtZT1tZS50b0lTT1N0cmluZygpKTptZT1TdHJpbmcobWUpLGVl'@;
put 'LnB1c2goSHIoZmEob2UpLG1lLHsiZHQ6ZHQiOnBlfSkpfX0pLCI8IitLKycgeG1sbnM9IicrdmwubysnIj4nK2VlLmpvaW4oIiIpKyI8LyIrSysiPiJ9KFMuUHJvcHMsUy5DdXN0cHJvcHMpKSxrLmpvaW4oIiIpfShTLE8pKSxrLnB1c2goIiIpLGsucHVzaCgiIiksay5wdXNoKCIiKTtmb3Io'@;
put 'dmFyIEs9MDtLPFMuU2hlZXROYW1lcy5sZW5ndGg7KytLKWsucHVzaChIcigiV29ya3NoZWV0Iix4SShLLE8sUykseyJzczpOYW1lIjpQcihTLlNoZWV0TmFtZXNbS10pfSkpO3JldHVybiBrWzJdPWZ1bmN0aW9uIHdJKFMsTyl7dmFyIEs9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpO'@;
put 'YW1lPSJOb3JtYWwiPicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIgc3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1i'@;
put 'ZXJGb3JtYXQvPiIsIjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4gTy5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oZWUsb2Upe3ZhciBtZT1bXTtpZihlZS5hbGlnbm1lbnQpe3ZhciBwZT17fTtlZS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihwZVsic3M6U2hy'@;
put 'aW5rVG9GaXQiXT0iMSIpLGVlLmFsaWdubWVudC53cmFwVGV4dCYmKHBlWyJzczpXcmFwVGV4dCJdPSIxIiksZWUuYWxpZ25tZW50LnZlcnRpY2FsJiYocGVbInNzOlZlcnRpY2FsIl09a3QoZWUuYWxpZ25tZW50LnZlcnRpY2FsKSksZWUuYWxpZ25tZW50Lmhvcml6b250YWwmJihwZVsic3M6'@;
put 'SG9yaXpvbnRhbCJdPWt0KGVlLmFsaWdubWVudC5ob3Jpem9udGFsKSksZWUuYWxpZ25tZW50LmluZGVudCYmKHBlWyJzczpJbmRlbnQiXT1lZS5hbGlnbm1lbnQuaW5kZW50KSxlZS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uJiYocGVbInNzOlJvdGF0ZSJdPWVlLmFsaWdubWVudC50ZXh0Um90'@;
put 'YXRpb24pLG1lLnB1c2goSHIoIkFsaWdubWVudCIsbnVsbCxwZSkpfWU6aWYobnVsbCE9ZWUuZm9udElkKXt2YXIgYmU9Ty5Gb250c1tlZS5mb250SWRdO2lmKCFiZSlicmVhayBlO3ZhciBQZT17InNzOkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LFZlPSExO2JlLmJvbGQm'@;
put 'JihWZT0hMCxQZVsic3M6Qm9sZCJdPSIxIiksYmUuaXRhbGljJiYoVmU9ITAsUGVbInNzOkl0YWxpYyJdPSIxIiksYmUuc3RyaWtlJiYoVmU9ITAsUGVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51bGwhPWJlLnVuZGVybGluZSYmKFZlPSEwLFBlWyJzczpVbmRlcmxpbmUiXT13eVtiZS51'@;
put 'bmRlcmxpbmVdfHwoYmUudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPWJlLnN6JiYoVmU9ITAsUGVbInNzOlNpemUiXT1iZS5zeiksbnVsbCE9YmUubmFtZSYmKFZlPSEwLFBlWyJzczpGb250TmFtZSJdPWJlLm5hbWUpLGJlLmNvbG9yJiZudWxsIT1iZS5jb2xvci5yZ2ImJihW'@;
put 'ZT0hMCxQZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgYmUuY29sb3IucmdiPyIwMDAwMDAiK2JlLmNvbG9yLnJnYi50b1N0cmluZygxNik6YmUuY29sb3IucmdiKS5zbGljZSgtNikpLFsic3ViIiwic3VwZXIiXS5pbmRleE9mKGJlLnZhbGlnbik+LTEmJihQZVsic3M6VmVy'@;
put 'dGljYWxBbGlnbiJdPWt0KGJlLnZhbGlnbikrInNjcmlwdCIpLFZlJiZtZS5wdXNoKEhyKCJGb250IixudWxsLFBlKSl9ZTppZihlZS5maWxsSWQ+MCl7dmFyIFllPU8uRmlsbHNbZWUuZmlsbElkXTtpZighWWV8fCFZZS5mZ0NvbG9yfHxudWxsPT1ZZS5mZ0NvbG9yLnJnYilicmVhayBlO21l'@;
put 'LnB1c2goSHIoIkludGVyaW9yIixudWxsLHsic3M6UGF0dGVybiI6Q0NbWWUucGF0dGVyblR5cGVdfHwiU29saWQiLCJzczpDb2xvciI6IiMiKygibnVtYmVyIj09dHlwZW9mIFllLmZnQ29sb3IucmdiPyIwMCIrWWUuZmdDb2xvci5yZ2IudG9TdHJpbmcoMTYpOlllLmZnQ29sb3IucmdiKS5z'@;
put 'bGljZSgtNil9KSl9bWUucHVzaChIcigiTnVtYmVyRm9ybWF0IixudWxsLHsic3M6Rm9ybWF0IjpQcihBLl90YWJsZVtlZS5udW1GbXRJZF0pfSkpO3ZhciBldD17InNzOklEIjoicyIrKDIxK29lKX07ZWUuc3R5bGUmJihldFsic3M6TmFtZSJdPWVlLnN0eWxlKSxLLnB1c2goSHIoIlN0eWxl'@;
put 'IixtZS5qb2luKCIiKSxldCkpfSksSHIoIlN0eWxlcyIsSy5qb2luKCIiKSl9KDAsTyksa1szXT1mdW5jdGlvbiBTSShTKXtpZighKChTfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIE89Uy5Xb3JrYm9vay5OYW1lcyxrPVtdLEs9MDtLPE8ubGVuZ3RoOysrSyl7'@;
put 'dmFyIGVlPU9bS107bnVsbD09ZWUuU2hlZXQmJihlZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxrLnB1c2goQ0koZWUpKSl9cmV0dXJuIEhyKCJOYW1lcyIsay5qb2luKCIiKSl9KFMpLERpK0hyKCJXb3JrYm9vayIsay5qb2luKCIiKSx7eG1sbnM6dmwuc3MsInhtbG5zOm8iOnZsLm8sInht'@;
put 'bG5zOngiOnZsLngsInhtbG5zOnNzIjp2bC5zcywieG1sbnM6ZHQiOnZsLmR0LCJ4bWxuczpodG1sIjp2bC5odG1sfSl9ZnVuY3Rpb24gVEkoUyxPLGssSyl7dmFyIGVlPWssb2U9W10sbWU9Ty5zbGljZShPLmwsTy5sK2VlKTtpZihLJiZLLmVuYyYmSy5lbmMuaW5zaXR1JiZtZS5sZW5ndGg+'@;
put 'MClzd2l0Y2goUy5uKXtjYXNlIkJPRiI6Y2FzZSJGaWxlUGFzcyI6Y2FzZSJGaWxlTG9jayI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2UiUlJESW5mbyI6Y2FzZSJSUkRIZWFkIjpjYXNlIlVzckV4Y2wiOmNhc2UiRU9GIjpLLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDptZS5sZW5ndGh9KSwic2tp'@;
put 'cCIpO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOksuZW5jLmluc2l0dShTZSh7bGVuZ3RoOjR9KSwic2tpcCIpLG1lPUJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKG1lLnNsaWNlKDAsNCkpLEJ1ZmZlci5mcm9tKEsuZW5jLmluc2l0dShtZS5zbGljZSg0KSkpXSk7YnJlYWs7ZGVmYXVsdDpt'@;
put 'ZT1LLmVuYy5pbnNpdHUobWUpfUFycmF5LmlzQXJyYXkoTykmJiFBcnJheS5pc0FycmF5KG1lKSYmKG1lPUFycmF5LmZyb20obWUpKSxvZS5wdXNoKG1lKSxPLmwrPWVlO2Zvcih2YXIgcGU9ZU1bUWEoTyxPLmwpXSxiZT0wO251bGwhPXBlJiYiQ29udGludWUiPT09cGUubi5zbGljZSgwLDgp'@;
put 'OyllZT1RYShPLE8ubCsyKSxiZT1PLmwrNCxLJiZLLmVuYyYmSy5lbmMuaW5zaXR1JiZLLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT1wZS5uP2JlKz00OiJDb250aW51ZUZydCI9PXBlLm4uc2xpY2UoMCwxMSkmJihiZSs9MTIsSyYmSy5lbmMmJksu'@;
put 'ZW5jLmluc2l0dSYmSy5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6OH0pLCJza2lwIikpLG1lPU8uc2xpY2UoYmUsTy5sKzQrZWUpLEsmJksuZW5jJiZLLmVuYy5pbnNpdHUmJm1lLmxlbmd0aD4wJiYobWU9Sy5lbmMuaW5zaXR1KG1lKSksb2UucHVzaChtZSksTy5sKz00K2VlLHBlPWVNW1FhKE8s'@;
put 'Ty5sKV07dmFyIFBlPVUob2UpO2duKFBlLDApO3ZhciBWZT0wO1BlLmxlbnM9W107Zm9yKHZhciBZZT0wO1llPG9lLmxlbmd0aDsrK1llKVBlLmxlbnMucHVzaChWZSksVmUrPW9lW1llXS5sZW5ndGg7aWYoUGUubGVuZ3RoPGspdGhyb3ciWExTIFJlY29yZCAiKyhTJiZTLm58fCI/PyIpKyIg'@;
put 'VHJ1bmNhdGVkOiAiK1BlLmxlbmd0aCsiIDwgIitrO3JldHVybiBTLmYoUGUsUGUubGVuZ3RoLEspfWZ1bmN0aW9uIGhoKFMsTyxrKXtpZigieiIhPT1TLnQmJlMuWEYpe3ZhciBLPTA7dHJ5e0s9Uy56fHxTLlhGLm51bUZtdElkfHwwLE8uY2VsbE5GJiYoUy56PUEuX3RhYmxlW0tdKX1jYXRj'@;
put 'aChvZSl7aWYoTy5XVEYpdGhyb3cgb2V9aWYoIU98fCExIT09Ty5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fENjW1Mudl06MD09PUt8fCJHZW5lcmFsIj09Sz8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik6QS5f'@;
put 'Z2VuZXJhbChTLnYpOkEuZm9ybWF0KEssUy52LHtkYXRlMTkwNDohIWssZGF0ZU5GOk8mJk8uZGF0ZU5GfSl9Y2F0Y2gob2Upe2lmKE8uV1RGKXRocm93IG9lfWlmKE8uY2VsbERhdGVzJiZLJiYibiI9PVMudCYmQS5pc19kYXRlKEEuX3RhYmxlW0tdfHxTdHJpbmcoSykpKXt2YXIgZWU9QS5w'@;
put 'YXJzZV9kYXRlX2NvZGUoUy52KTtlZSYmKFMudD0iZCIsUy52PW5ldyBEYXRlKGVlLnksZWUubS0xLGVlLmQsZWUuSCxlZS5NLGVlLlMsZWUudSkpfX19ZnVuY3Rpb24gUjgoUyxPLGspe3JldHVybnt2OlMsaXhmZTpPLHQ6a319dmFyIEFJPWZ1bmN0aW9uKFMsTyxrKXtPWyIhb2JqZWN0cyJd'@;
put 'PVN9LFN5PXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLERTSToiMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUifTtmdW5jdGlvbiBRUyhTLE8pe3ZhciBrLEssZWUsb2U7aWYoT3x8KE89'@;
put 'e30pLGpJKE8pLFcoKSxPLmNvZGVwYWdlJiZMKE8uY29kZXBhZ2UpLFMuRnVsbFBhdGhzKXtpZih2ZS5maW5kKFMsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2s9dmUuZmluZChTLCIhQ29tcE9iaiIpLEs9dmUuZmluZChTLCIv'@;
put 'V29ya2Jvb2siKXx8dmUuZmluZChTLCIvQm9vayIpfWVsc2V7c3dpdGNoKE8udHlwZSl7Y2FzZSJiYXNlNjQiOlM9eShfZS5kZWNvZGUoUykpO2JyZWFrO2Nhc2UiYmluYXJ5IjpTPXkoUyk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoUyl8fChT'@;
put 'PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFMpKX1nbihTLDApLEs9e2NvbnRlbnQ6U319aWYoayYmZnVuY3Rpb24gSlMoUyl7dmFyIE89e30saz1TLmNvbnRlbnQ7aWYoay5sPTI4LE8uQW5zaVVzZXJUeXBlPWsucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksTy5BbnNpQ2xpcGJvYXJk'@;
put 'Rm9ybWF0PWZ1bmN0aW9uIHYwKFMpe3JldHVybiBCdyhTLDEpfShrKSxrLmxlbmd0aC1rLmw8PTQpcmV0dXJuIE87dmFyIEs9ay5yZWFkX3NoaWZ0KDQpO2lmKDA9PUt8fEs+NDB8fChrLmwtPTQsTy5SZXNlcnZlZDE9ay5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxrLmxlbmd0aC1rLmw8'@;
put 'PTQpfHwxOTA3NTA1NjUyIT09KEs9ay5yZWFkX3NoaWZ0KDQpKXx8KE8uVW5pY29kZUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBBNihTKXtyZXR1cm4gQncoUywyKX0oayksMD09KEs9ay5yZWFkX3NoaWZ0KDQpKXx8Sz40MCkpcmV0dXJuIE87ay5sLT00LE8uUmVzZXJ2ZWQyPWsucmVhZF9z'@;
put 'aGlmdCgwLCJscHdzdHIiKX0oayksTy5ib29rUHJvcHMmJiFPLmJvb2tTaGVldHMpZWU9e307ZWxzZXt2YXIgbWU9VGU/ImJ1ZmZlciI6ImFycmF5IjtpZihLJiZLLmNvbnRlbnQpZWU9ZnVuY3Rpb24gQnooUyxPKXt2YXIgaz17b3B0czp7fX0sSz17fTtudWxsIT1zZSYmbnVsbD09Ty5kZW5z'@;
put 'ZSYmKE8uZGVuc2U9c2UpO3ZhciBZZSxjdCxpdCxidCxPdCxLdCxlZT1PLmRlbnNlP1tdOnt9LG9lPXt9LG1lPXt9LHBlPW51bGwsYmU9W10sUGU9IiIsVmU9e30sZXQ9IiIsQnQ9e30sRHQ9W10sVG49W10sc3I9W10sQ249e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6'@;
put 'W3t9XX0sdXI9e30sZXI9e0ZvbnRzOltdfSxqbj1mdW5jdGlvbihraSl7cmV0dXJuIGtpPDg/dDBba2ldOmtpPDY0JiZzcltraS04XXx8dDBba2ldfSxwcj1mdW5jdGlvbihraSxvbyl7dmFyIFNsLEdzPWtpLlhGLmRhdGE7R3MmJihHcy5wYXR0ZXJuVHlwZXx8bnVsbCE9R3MuaWN2Rm9yZSkm'@;
put 'Jm9vJiZvby5jZWxsU3R5bGVzJiYoa2kucz17fSxraS5zLnBhdHRlcm5UeXBlPUdzLnBhdHRlcm5UeXBlLGtpLlhGLmZvbnQmJlB0KGtpLnMsa2kuWEYuZm9udCksR3MuZldyYXAmJigoa2kucy5hbGlnbm1lbnR8fChraS5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSxHcy5mU2hyaW5r'@;
put 'VG9GaXQmJigoa2kucy5hbGlnbm1lbnR8fChraS5zLmFsaWdubWVudD17fSkpLnNocmlua1RvRml0PSEwKSxHcy5oYWxpZ24mJigoa2kucy5hbGlnbm1lbnR8fChraS5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9R3MuaGFsaWduKSxHcy52YWxpZ24mJigoa2kucy5hbGlnbm1lbnR8fChr'@;
put 'aS5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPUdzLnZhbGlnbiksR3MuY0luZGVudCYmKChraS5zLmFsaWdubWVudHx8KGtpLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PUdzLmNJbmRlbnQpLDY0IT1Hcy5pY3ZGb3JlJiY2NSE9R3MuaWN2QmFjayYmKChTbD1wZChqbihHcy5pY3ZGb3JlKSkp'@;
put 'JiYoa2kucy5mZ0NvbG9yPXtyZ2I6U2x9KSwoU2w9cGQoam4oR3MuaWN2QmFjaykpKSYmKGtpLnMuYmdDb2xvcj17cmdiOlNsfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihtdSl7R3NbImRnIittdV0mJihraS5zW211LnRvTG93ZXJDYXNlKCld'@;
put 'PXtzdHlsZTpnZFtHc1siZGciK211XV0sY29sb3I6e3JnYjpwZChqbihHc1siaWN2IittdV0pKX19KX0pKX0sYnI9ZnVuY3Rpb24oa2ksb28sR3Mpe2lmKCEoV2k+MXx8R3Muc2hlZXRSb3dzJiZraS5yPj1Hcy5zaGVldFJvd3MpKXtpZihHcy5jZWxsU3R5bGVzJiZvby5YRiYmb28uWEYuZGF0'@;
put 'YSYmcHIob28sR3MpLGRlbGV0ZSBvby5peGZlLGRlbGV0ZSBvby5YRixZZT1raSxldD1xaShraSksKCFtZXx8IW1lLnN8fCFtZS5lKSYmKG1lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLGtpLnI8bWUucy5yJiYobWUucy5yPWtpLnIpLGtpLmM8bWUucy5jJiYobWUucy5jPWtpLmMpLGtp'@;
put 'LnIrMT5tZS5lLnImJihtZS5lLnI9a2kucisxKSxraS5jKzE+bWUuZS5jJiYobWUuZS5jPWtpLmMrMSksR3MuY2VsbEZvcm11bGEmJm9vLmYpZm9yKHZhciBTbD0wO1NsPER0Lmxlbmd0aDsrK1NsKWlmKCEoRHRbU2xdWzBdLnMuYz5raS5jfHxEdFtTbF1bMF0ucy5yPmtpLnJ8fER0W1NsXVsw'@;
put 'XS5lLmM8a2kuY3x8RHRbU2xdWzBdLmUucjxraS5yKSl7b28uRj1yYShEdFtTbF1bMF0pLChEdFtTbF1bMF0ucy5jIT1raS5jfHxEdFtTbF1bMF0ucy5yIT1raS5yKSYmZGVsZXRlIG9vLmYsb28uZiYmKG9vLmY9IiIrYTAoRHRbU2xdWzFdLG1lLGtpLEhuLHJyKSk7YnJlYWt9R3MuZGVuc2U/'@;
put 'KGVlW2tpLnJdfHwoZWVba2kucl09W10pLGVlW2tpLnJdW2tpLmNdPW9vKTplZVtldF09b299fSxycj17ZW5jOiExLHNiY2NoOjAsc25hbWVzOltdLHNoYXJlZGY6QnQsYXJyYXlmOkR0LHJydGFiaWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0'@;
put 'eWxlczohIU8mJiEhTy5jZWxsU3R5bGVzLFdURjohIU8mJiEhTy53dGZ9O3JyLnBhc3N3b3JkPU8ucGFzc3dvcmQ/Ty5wYXNzd29yZDoiVmVsdmV0U3dlYXRzaG9wIjt2YXIgUGksU2k9bnVsbCxuYT1bXSxsYT1bXSxSaT1bXSxScj1bXSx3cj0hMSxIbj1bXTtIbi5TaGVldE5hbWVzPXJyLnNu'@;
put 'YW1lcyxIbi5zaGFyZWRmPXJyLnNoYXJlZGYsSG4uYXJyYXlmPXJyLmFycmF5ZixIbi5uYW1lcz1bXSxIbi5YVEk9W107dmFyIGlhLHpyPSIiLFdpPTAsQ2k9MCx3YT1bXSxvcz1bXTtyci5jb2RlcGFnZT0xMjAwLEIoMTIwMCk7Zm9yKHZhciBPcz0hMTtTLmw8Uy5sZW5ndGgtMTspe3ZhciBQ'@;
put 'YT1TLmwsdXM9Uy5yZWFkX3NoaWZ0KDIpO2lmKHJyJiZyci5lbmMmJnJyLmVuYy5pbnNpdHUmJnJyLmVuYy5pbnNpdHUoU2UoWzAsMF0pLCJoZWFkZXItMCIpLDA9PT11cyYmIkVPRiI9PT16cilicmVhazt2YXIgcWE9Uy5sPT09Uy5sZW5ndGg/MDpTLnJlYWRfc2hpZnQoMik7cnImJnJyLmVu'@;
put 'YyYmcnIuZW5jLmluc2l0dSYmcnIuZW5jLmluc2l0dShTZShbMCwwXSksImxlbmd0aC0wIik7dmFyIFZpPWVNW3VzXTtpZihWaSYmVmkuZil7aWYoTy5ib29rU2hlZXRzJiYiQm91bmRTaGVldDgiPT09enImJiJCb3VuZFNoZWV0OCIhPT1WaS5uKWJyZWFrO2lmKHpyPVZpLm4sMj09PVZpLnJ8'@;
put 'fDEyPT1WaS5yKXt2YXIgSW89Uy5yZWFkX3NoaWZ0KDIpO2lmKHFhLT0yLHJyJiZyci5lbmMmJnJyLmVuYy5pbnNpdHUmJnJyLmVuYy5pbnNpdHUoU2UoWzAsMF0pKSwhcnIuZW5jJiZJbyE9PXVzJiYoKDI1NSZJbyk8PDh8SW8+PjgpIT09dXMpdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRj'@;
put 'aDogIitJbysiIT0iK3VzKTsxMj09VmkuciYmKFMubCs9MTAscWEtPTEwLHJyJiZyci5lbmMmJnJyLmVuYy5pbnNpdHUmJnJyLmVuYy5pbnNpdHUoU2UoWzAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpfXZhciBGbj1USShWaSxTLHFhLHJyKSxZcz1WaS5uO2lmKDA9PVdpJiYiQk9GIiE9WXMpY29u'@;
put 'dGludWU7c3dpdGNoKFlzKXtjYXNlIkRhdGUxOTA0IjprLm9wdHMuRGF0ZTE5MDQ9Q24uV0JQcm9wcy5kYXRlMTkwND1GbjticmVhaztjYXNlIldyaXRlUHJvdGVjdCI6ay5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIkZpbGVQYXNzIjppZihyci5lbmN8fChTLmw9MCxXaT0wKSxy'@;
put 'ci5lbmM9Rm4sIU8ucGFzc3dvcmQmJm51bGw9PUZuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtpZihudWxsPT1Gbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIUZuLnZhbGlkKXRo'@;
put 'cm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSJXcml0ZUFjY2VzcyI6cnIubGFzdHVzZXI9Rm47YnJlYWs7Y2FzZSJGaWxlU2hhcmluZyI6Y2FzZSJUZW1wbGF0ZSI6Y2FzZSJCb29rQm9vbCI6Y2FzZSJVc2VzRUxGcyI6Y2FzZSJNVFJTZXR0aW5ncyI6'@;
put 'Y2FzZSJVbmNhbGNlZCI6Y2FzZSJFeHRTU1QiOmNhc2UiQm9va0V4dCI6Y2FzZSJSaWNoVGV4dFN0cmVhbSI6Y2FzZSJCa0hpbSI6Y2FzZSJJbmRleCI6Y2FzZSJQcm90NFJldiI6Y2FzZSJQcm90NFJldlBhc3MiOmJyZWFrO2Nhc2UiQ29kZVBhZ2UiOnZhciBocj1OdW1iZXIoRm4pO3N3aXRj'@;
put 'aChocil7Y2FzZSAyMTAxMDpocj0xMjAwO2JyZWFrO2Nhc2UgMzI3Njg6aHI9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6aHI9MTI1Mn1CKHJyLmNvZGVwYWdlPWhyKSxPcz0hMDticmVhaztjYXNlIlJSVGFiSWQiOnJyLnJydGFiaWQ9Rm47YnJlYWs7Y2FzZSJXaW5Qcm90ZWN0Ijpyci53aW5sb2Nr'@;
put 'ZWQ9Rm47YnJlYWs7Y2FzZSJSZWZyZXNoQWxsIjpjYXNlIkNhbGNDb3VudCI6Y2FzZSJDYWxjRGVsdGEiOmNhc2UiQ2FsY0l0ZXIiOmNhc2UiQ2FsY01vZGUiOmNhc2UiQ2FsY1ByZWNpc2lvbiI6Y2FzZSJDYWxjU2F2ZVJlY2FsYyI6ay5vcHRzW1lzXT1GbjticmVhaztjYXNlIkNhbGNSZWZN'@;
put 'b2RlIjpyci5DYWxjUmVmTW9kZT1GbjticmVhaztjYXNlIkZvcmNlRnVsbENhbGN1bGF0aW9uIjprLm9wdHMuRnVsbENhbGM9Rm47YnJlYWs7Y2FzZSJXc0Jvb2wiOkZuLmZEaWFsb2cmJihlZVsiIXR5cGUiXT0iZGlhbG9nIiksRm4uZkJlbG93fHwoKGVlWyIhb3V0bGluZSJdfHwoZWVbIiFv'@;
put 'dXRsaW5lIl09e30pKS5hYm92ZT0hMCksRm4uZlJpZ2h0fHwoKGVlWyIhb3V0bGluZSJdfHwoZWVbIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpGbi5mb250PWVyLkZvbnRzW0ZuLmlmbnQ8ND9Gbi5pZm50OkZuLmlmbnQtMV0sVG4ucHVzaChGbik7YnJlYWs7Y2Fz'@;
put 'ZSJTdXBCb29rIjpIbi5wdXNoKFtGbl0pLEhuW0huLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJFeHRlcm5OYW1lIjpIbltIbi5sZW5ndGgtMV0ucHVzaChGbik7YnJlYWs7Y2FzZSJMYmwiOmlhPXtOYW1lOkZuLk5hbWUsUmVmOmEwKEZuLnJnY2UsbWUsbnVsbCxIbixycil9LEZuLml0'@;
put 'YWI+MCYmKGlhLlNoZWV0PUZuLml0YWItMSksSG4ubmFtZXMucHVzaChpYSksSG5bMF18fChIblswXT1bXSxIblswXS5YVEk9W10pLEhuW0huLmxlbmd0aC0xXS5wdXNoKEZuKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09Rm4uTmFtZSYmRm4uaXRhYj4wJiZGbi5yZ2NlJiZGbi5yZ2NlWzBd'@;
put 'JiZGbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09Rm4ucmdjZVswXVswXVswXSYmKG9zW0ZuLml0YWItMV09e3JlZjpyYShGbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOnJyLkV4dGVybkNvdW50PUZuO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PUhu'@;
put 'Lmxlbmd0aCYmKEhuWzBdPVtdLEhuWzBdLlhUST1bXSksSG5bSG4ubGVuZ3RoLTFdLlhUST1IbltIbi5sZW5ndGgtMV0uWFRJLmNvbmNhdChGbiksSG4uWFRJPUhuLlhUSS5jb25jYXQoRm4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYocnIuYmlmZjw4KWJyZWFrO251bGwhPWlhJiYoaWEuQ29t'@;
put 'bWVudD1GblsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjplZVsiIXByb3RlY3QiXT1GbjticmVhaztjYXNlIlBhc3N3b3JkIjowIT09Rm4mJnJyLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dvcmQgdmVyaWZpZXI6ICIrRm4pO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOm9lW0ZuLnBvc109Rm4s'@;
put 'cnIuc25hbWVzLnB1c2goRm4ubmFtZSk7YnJlYWs7Y2FzZSJFT0YiOmlmKGVlWyIhZ3JpZGxpbmVzIl09IVNpfHxTaS5ncmlkLFNpPW51bGwsLS1XaSlicmVhaztpZihtZS5lKXtpZihtZS5lLnI+MCYmbWUuZS5jPjApe2lmKG1lLmUuci0tLG1lLmUuYy0tLGVlWyIhcmVmIl09cmEobWUpLE8u'@;
put 'c2hlZXRSb3dzJiZPLnNoZWV0Um93czw9bWUuZS5yKXt2YXIgSmw9bWUuZS5yO21lLmUucj1PLnNoZWV0Um93cy0xLGVlWyIhZnVsbHJlZiJdPWVlWyIhcmVmIl0sZWVbIiFyZWYiXT1yYShtZSksbWUuZS5yPUpsfW1lLmUucisrLG1lLmUuYysrfW5hLmxlbmd0aD4wJiYoZWVbIiFtZXJnZXMi'@;
put 'XT1uYSksbGEubGVuZ3RoPjAmJkFJKGxhLGVlLGVyKSxSaS5sZW5ndGg+MCYmKGVlWyIhY29scyJdPVJpKSxSci5sZW5ndGg+MCYmKGVlWyIhcm93cyJdPVJyKSxDbi5TaGVldHMucHVzaCh1cil9IiI9PT1QZT9WZT1lZTpLW1BlXT1lZSxlZT1PLmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UiQk9G'@;
put 'IjppZig4PT09cnIuYmlmZiYmKHJyLmJpZmY9ezk6Miw1MjE6MywxMDMzOjR9W3VzXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0ZuLkJJRkZWZXJdfHw4KSxyci5iaWZmZ3Vlc3M9MD09Rm4uQklGRlZlciwwPT1Gbi5CSUZGVmVyJiY0MDk2PT1Gbi5kdCYm'@;
put 'KHJyLmJpZmY9NSxPcz0hMCxCKHJyLmNvZGVwYWdlPTI4NTkxKSksOD09cnIuYmlmZiYmMD09Rm4uQklGRlZlciYmMTY9PUZuLmR0JiYocnIuYmlmZj0yKSxXaSsrKWJyZWFrO2lmKGVlPU8uZGVuc2U/W106e30scnIuYmlmZjw4JiYhT3MmJihPcz0hMCxCKHJyLmNvZGVwYWdlPU8uY29kZXBh'@;
put 'Z2V8fDEyNTIpKSxyci5iaWZmPDV8fDA9PUZuLkJJRkZWZXImJjQwOTY9PUZuLmR0KXsiIj09PVBlJiYoUGU9IlNoZWV0MSIpLG1lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIFVsPXtwb3M6Uy5sLXFhLG5hbWU6UGV9O29lW1VsLnBvc109VWwscnIuc25hbWVzLnB1c2goUGUpfWVs'@;
put 'c2UgUGU9KG9lW1BhXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Gbi5kdCYmKGVlWyIhdHlwZSJdPSJjaGFydCIpLDY0PT1Gbi5kdCYmKGVlWyIhdHlwZSJdPSJtYWNybyIpLG5hPVtdLGxhPVtdLHJyLmFycmF5Zj1EdD1bXSxSaT1bXSxScj1bXSx3cj0hMSx1cj17SGlkZGVuOihvZVtQYV18fHto'@;
put 'czowfSkuaHMsbmFtZTpQZX07YnJlYWs7Y2FzZSJOdW1iZXIiOmNhc2UiQklGRjJOVU0iOmNhc2UiQklGRjJJTlQiOiJjaGFydCI9PWVlWyIhdHlwZSJdJiYoTy5kZW5zZT8oZWVbRm4ucl18fFtdKVtGbi5jXTplZVtxaSh7YzpGbi5jLHI6Rm4ucn0pXSkmJisrRm4uYyxPdD17aXhmZTpGbi5p'@;
put 'eGZlLFhGOlRuW0ZuLml4ZmVdfHx7fSx2OkZuLnZhbCx0OiJuIn0sQ2k+MCYmKE90Lno9d2FbT3QuaXhmZT4+OCY2M10pLGhoKE90LE8say5vcHRzLkRhdGUxOTA0KSxicih7YzpGbi5jLHI6Rm4ucn0sT3QsTyk7YnJlYWs7Y2FzZSJCb29sRXJyIjpPdD17aXhmZTpGbi5peGZlLFhGOlRuW0Zu'@;
put 'Lml4ZmVdLHY6Rm4udmFsLHQ6Rm4udH0sQ2k+MCYmKE90Lno9d2FbT3QuaXhmZT4+OCY2M10pLGhoKE90LE8say5vcHRzLkRhdGUxOTA0KSxicih7YzpGbi5jLHI6Rm4ucn0sT3QsTyk7YnJlYWs7Y2FzZSJSSyI6T3Q9e2l4ZmU6Rm4uaXhmZSxYRjpUbltGbi5peGZlXSx2OkZuLnJrbnVtLHQ6'@;
put 'Im4ifSxDaT4wJiYoT3Quej13YVtPdC5peGZlPj44JjYzXSksaGgoT3QsTyxrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOkZuLmMscjpGbi5yfSxPdCxPKTticmVhaztjYXNlIk11bFJrIjpmb3IodmFyIFpsPUZuLmM7Wmw8PUZuLkM7KytabCl7dmFyIGd1PUZuLnJrcmVjW1psLUZuLmNdWzBdO090'@;
put 'PXtpeGZlOmd1LFhGOlRuW2d1XSx2OkZuLnJrcmVjW1psLUZuLmNdWzFdLHQ6Im4ifSxDaT4wJiYoT3Quej13YVtPdC5peGZlPj44JjYzXSksaGgoT3QsTyxrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlpsLHI6Rm4ucn0sT3QsTyl9YnJlYWs7Y2FzZSJGb3JtdWxhIjppZigiU3RyaW5nIj09Rm4u'@;
put 'dmFsKXtwZT1GbjticmVha31pZigoT3Q9UjgoRm4udmFsLEZuLmNlbGwuaXhmZSxGbi50dCkpLlhGPVRuW090Lml4ZmVdLE8uY2VsbEZvcm11bGEpe3ZhciBDbD1Gbi5mb3JtdWxhO2lmKENsJiZDbFswXSYmQ2xbMF1bMF0mJiJQdGdFeHAiPT1DbFswXVswXVswXSl7dmFyIGxuPUNsWzBdWzBd'@;
put 'WzFdWzBdLEVuPUNsWzBdWzBdWzFdWzFdLFpuPXFpKHtyOmxuLGM6RW59KTtCdFtabl0/T3QuZj0iIithMChGbi5mb3JtdWxhLG1lLEZuLmNlbGwsSG4scnIpOk90LkY9KChPLmRlbnNlPyhlZVtsbl18fFtdKVtFbl06ZWVbWm5dKXx8e30pLkZ9ZWxzZSBPdC5mPSIiK2EwKEZuLmZvcm11bGEs'@;
put 'bWUsRm4uY2VsbCxIbixycil9Q2k+MCYmKE90Lno9d2FbT3QuaXhmZT4+OCY2M10pLGhoKE90LE8say5vcHRzLkRhdGUxOTA0KSxicihGbi5jZWxsLE90LE8pLHBlPUZuO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighcGUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9y'@;
put 'bXVsYSIpO3BlLnZhbD1GbiwoT3Q9UjgoRm4scGUuY2VsbC5peGZlLCJzIikpLlhGPVRuW090Lml4ZmVdLE8uY2VsbEZvcm11bGEmJihPdC5mPSIiK2EwKHBlLmZvcm11bGEsbWUscGUuY2VsbCxIbixycikpLENpPjAmJihPdC56PXdhW090Lml4ZmU+PjgmNjNdKSxoaChPdCxPLGsub3B0cy5E'@;
put 'YXRlMTkwNCksYnIocGUuY2VsbCxPdCxPKSxwZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXkiOkR0LnB1c2goRm4pO3ZhciBNaT1xaShGblswXS5zKTtpZihjdD1PLmRlbnNlPyhlZVtGblswXS5zLnJdfHxbXSlbRm5bMF0ucy5jXTplZVtNaV0sTy5jZWxsRm9ybXVsYSYmY3Qpe2lmKCFwZXx8IU1p'@;
put 'fHwhY3QpYnJlYWs7Y3QuZj0iIithMChGblsxXSxtZSxGblswXSxIbixyciksY3QuRj1yYShGblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZighTy5jZWxsRm9ybXVsYSlicmVhaztpZihldCl7aWYoIXBlKWJyZWFrO0J0W3FpKHBlLmNlbGwpXT1GblswXSwoKGN0PU8uZGVuc2U/KGVlW3Bl'@;
put 'LmNlbGwucl18fFtdKVtwZS5jZWxsLmNdOmVlW3FpKHBlLmNlbGwpXSl8fHt9KS5mPSIiK2EwKEZuWzBdLG1lLFllLEhuLHJyKX1icmVhaztjYXNlIkxhYmVsU3N0IjpPdD1SOChiZVtGbi5pc3N0XS50LEZuLml4ZmUsInMiKSxiZVtGbi5pc3N0XS5oJiYoT3QuaD1iZVtGbi5pc3N0XS5oKSxP'@;
put 'dC5YRj1UbltPdC5peGZlXSxDaT4wJiYoT3Quej13YVtPdC5peGZlPj44JjYzXSksaGgoT3QsTyxrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOkZuLmMscjpGbi5yfSxPdCxPKSxiZVtGbi5pc3N0XS5SJiYoT3QuUj1iZVtGbi5pc3N0XS5SLm1hcChmdW5jdGlvbihnYSl7dmFyIGtpPUp0KGdhKTty'@;
put 'ZXR1cm4gZ2Eucz09ZXIuRm9udHNbMF0mJihraS5zPU90LnMpLGtpfSkpO2JyZWFrO2Nhc2UiQmxhbmsiOk8uc2hlZXRTdHVicyYmKE90PXtpeGZlOkZuLml4ZmUsWEY6VG5bRm4uaXhmZV0sdDoieiJ9LENpPjAmJihPdC56PXdhW090Lml4ZmU+PjgmNjNdKSxoaChPdCxPLGsub3B0cy5EYXRl'@;
put 'MTkwNCksYnIoe2M6Rm4uYyxyOkZuLnJ9LE90LE8pKTticmVhaztjYXNlIk11bEJsYW5rIjppZihPLnNoZWV0U3R1YnMpZm9yKHZhciBjcj1Gbi5jO2NyPD1Gbi5DOysrY3Ipe3ZhciBMaT1Gbi5peGZlW2NyLUZuLmNdO090PXtpeGZlOkxpLFhGOlRuW0xpXSx0OiJ6In0sQ2k+MCYmKE90Lno9'@;
put 'd2FbT3QuaXhmZT4+OCY2M10pLGhoKE90LE8say5vcHRzLkRhdGUxOTA0KSxicih7YzpjcixyOkZuLnJ9LE90LE8pfWJyZWFrO2Nhc2UiUlN0cmluZyI6Y2FzZSJMYWJlbCI6Y2FzZSJCSUZGMlNUUiI6KE90PVI4KEZuLnZhbCxGbi5peGZlLCJzIikpLlhGPVRuW090Lml4ZmVdLENpPjAmJihP'@;
put 'dC56PXdhW090Lml4ZmU+PjgmNjNdKSxoaChPdCxPLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6Rm4uYyxyOkZuLnJ9LE90LE8pO2JyZWFrO2Nhc2UiRGltZW5zaW9ucyI6MT09PVdpJiYobWU9Rm4pO2JyZWFrO2Nhc2UiU1NUIjooYmU9Rm4pLmZvckVhY2goZnVuY3Rpb24oZ2Epe2dhLl9SPyhn'@;
put 'YS5fUlswXSYmZ2EuX1JbMF0uaWR4PjAmJmdhLl9SLnVuc2hpZnQoe2lkeDowLGlmbnQ6MH0pLGdhLlI9Z2EuX1IubWFwKGZ1bmN0aW9uKGtpLG9vKXtyZXR1cm57dDoicyIsdjpnYS50LnNsaWNlKGtpLmlkeCwoZ2EuX1Jbb28rMV18fHt9KS5pZHgpLHM6ZXIuRm9udHNba2kuaWZudDw0P2tp'@;
put 'LmlmbnQ6a2kuaWZudC0xXX19KSxPLmNlbGxIVE1MJiYoZ2EuaD1GdShnYS5SKSkpOk8uY2VsbEhUTUwmJihnYS5oPW9hKGdhLnQpKSxkZWxldGUgZ2EuX1J9KTticmVhaztjYXNlIkZvcm1hdCI6aWYoND09cnIuYmlmZil7d2FbQ2krK109Rm5bMV07Zm9yKHZhciB4cj0wO3hyPENpKzE2MyYm'@;
put 'QS5fdGFibGVbeHJdIT1GblsxXTsrK3hyKTt4cj49MTYzJiZBLmxvYWQoRm5bMV0sQ2krMTYzKX1lbHNlIEEubG9hZChGblsxXSxGblswXSk7YnJlYWs7Y2FzZSJCSUZGMkZPUk1BVCI6d2FbQ2krK109Rm47Zm9yKHZhciBPaT0wO09pPENpKzE2MyYmQS5fdGFibGVbT2ldIT1GbjsrK09pKTtP'@;
put 'aT49MTYzJiZBLmxvYWQoRm4sQ2krMTYzKTticmVhaztjYXNlIk1lcmdlQ2VsbHMiOm5hPW5hLmNvbmNhdChGbik7YnJlYWs7Y2FzZSJPYmoiOmxhW0ZuLmNtb1swXV09cnIubGFzdG9iaj1GbjticmVhaztjYXNlIlR4TyI6cnIubGFzdG9iai5UeE89Rm47YnJlYWs7Y2FzZSJJbURhdGEiOnJy'@;
put 'Lmxhc3RvYmouSW1EYXRhPUZuO2JyZWFrO2Nhc2UiSExpbmsiOmZvcihidD1GblswXS5zLnI7YnQ8PUZuWzBdLmUucjsrK2J0KWZvcihpdD1GblswXS5zLmM7aXQ8PUZuWzBdLmUuYzsrK2l0KShjdD1PLmRlbnNlPyhlZVtidF18fFtdKVtpdF06ZWVbcWkoe2M6aXQscjpidH0pXSkmJihjdC5s'@;
put 'PUZuWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PUZuWzBdLnMucjtidDw9Rm5bMF0uZS5yOysrYnQpZm9yKGl0PUZuWzBdLnMuYztpdDw9Rm5bMF0uZS5jOysraXQpKGN0PU8uZGVuc2U/KGVlW2J0XXx8W10pW2l0XTplZVtxaSh7YzppdCxyOmJ0fSldKSYmY3QubCYmKGN0'@;
put 'LmwuVG9vbHRpcD1GblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihyci5iaWZmPD01JiZyci5iaWZmPj0yKWJyZWFrO2N0PU8uZGVuc2U/KGVlW0ZuWzBdLnJdfHxbXSlbRm5bMF0uY106ZWVbcWkoRm5bMF0pXTt2YXIgWWE9bGFbRm5bMl1dO2N0fHwoTy5kZW5zZT8oZWVbRm5bMF0ucl18fChl'@;
put 'ZVtGblswXS5yXT1bXSksY3Q9ZWVbRm5bMF0ucl1bRm5bMF0uY109e3Q6InoifSk6Y3Q9ZWVbcWkoRm5bMF0pXT17dDoieiJ9LG1lLmUucj1NYXRoLm1heChtZS5lLnIsRm5bMF0uciksbWUucy5yPU1hdGgubWluKG1lLnMucixGblswXS5yKSxtZS5lLmM9TWF0aC5tYXgobWUuZS5jLEZuWzBd'@;
put 'LmMpLG1lLnMuYz1NYXRoLm1pbihtZS5zLmMsRm5bMF0uYykpLGN0LmN8fChjdC5jPVtdKSxjdC5jLnB1c2goe2E6Rm5bMV0sdDpZYS5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKFZpLm4pe2Nhc2UiQ2xydENsaWVudCI6Y2FzZSJIZWFkZXIiOmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50'@;
put 'ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hWREV4IjpjYXNlIlN4SXZkIjpjYXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMi'@;
put 'OmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2UiRmVhdHVyZTEyIjpjYXNlIkxpc3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2Fz'@;
put 'ZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3QiOmNhc2UiQ29uZEZtdDEyIjpjYXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5'@;
put 'bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENvbk5hbWUiOmNhc2UiU1hQSSI6Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNl'@;
put 'bGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJpbnRHcmlkIjpjYXNlIlByaW50U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JO'@;
put 'IjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJbmZvIjpjYXNlIk9sZU9iamVjdFNpemUiOmNhc2UiRFhGIjpjYXNlIkRY'@;
put 'Rk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4iOmNhc2UiRGJPclBhcmFtUXJ5IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2Ui'@;
put 'T2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIk1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQi'@;
put 'OmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVnaW4iOmNhc2UiVXNlclNWaWV3RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpj'@;
put 'YXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOk5rKFRuW0ZuLml4ZmVdLEZuLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighcnIuY2VsbFN0eWxlcylicmVhaztmb3IoO0ZuLmU+PUZuLnM7KVJpW0ZuLmUtLV09e3dpZHRoOkZuLncvMjU2LGxldmVsOkZuLmxldmVs'@;
put 'fHwwLGhpZGRlbjohISgxJkZuLmZsYWdzKX0sd3J8fCh3cj0hMCksSjAoUmlbRm4uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBGaT17fTtudWxsIT1Gbi5sZXZlbCYmKFJyW0ZuLnJdPUZpLEZpLmxldmVsPUZuLmxldmVsKSxGbi5oaWRkZW4mJihScltGbi5yXT1GaSxGaS5oaWRkZW49ITAp'@;
put 'LEZuLmhwdCYmKFJyW0ZuLnJdPUZpLEZpLmhwdD1Gbi5ocHQsRmkuaHB4PW9oKEZuLmhwdCkpLEZuLml4ZmUmJihScltGbi5yXT1GaSxwcihPdD17aXhmZTpGbi5peGZlLFhGOlRuW0ZuLml4ZmVdfHx7fSx2OjAsdDoibiJ9LE8pLEZpLnM9T3Qucyk7YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpj'@;
put 'YXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOmVlWyIhbWFyZ2lucyJdfHxKMyhlZVsiIW1hcmdpbnMiXT17fSksZWVbIiFtYXJnaW5zIl1bWXMuc2xpY2UoMCwtNikudG9Mb3dlckNhc2UoKV09Rm47YnJlYWs7Y2FzZSJTZWxlY3Rpb24iOmVlWyIh'@;
put 'c2VsIl09Rm47YnJlYWs7Y2FzZSJTZXR1cCI6ZWVbIiFtYXJnaW5zIl18fEozKGVlWyIhbWFyZ2lucyJdPXt9KSxlZVsiIW1hcmdpbnMiXS5oZWFkZXI9Rm4uaGVhZGVyLGVlWyIhbWFyZ2lucyJdLmZvb3Rlcj1Gbi5mb290ZXI7YnJlYWs7Y2FzZSJXaW5kb3cyIjpGbi5SVEwmJihDbi5WaWV3'@;
put 'c1swXS5SVEw9ITApLFNpPUZuO2JyZWFrO2Nhc2UiQ291bnRyeSI6S3Q9Rm47YnJlYWs7Y2FzZSJGb250IjpGbi5pY3YmJmpuKEZuLmljdikmJihGbi5jb2xvcj17cmdiOnBkKGpuKEZuLmljdikpfSksZGVsZXRlIEZuLmljdiwwPT1lci5Gb250cy5sZW5ndGgmJkk0KEZuKSxlci5Gb250cy5w'@;
put 'dXNoKEZuKTticmVhaztjYXNlIlBhbGV0dGUiOnNyPUZuO2JyZWFrO2Nhc2UiVGhlbWUiOlBpPUZuO2JyZWFrO2Nhc2UiQ29kZU5hbWUiOlBlP3VyLkNvZGVOYW1lPUZufHx1ci5uYW1lOkNuLldCUHJvcHMuQ29kZU5hbWU9Rm58fCJUaGlzV29ya2Jvb2siO2JyZWFrO2Nhc2UiUGFuZSI6KFNp'@;
put 'fHx7fSkuZnJvemVuJiYoZWVbIiFmcmVlemUiXT1xaSh7cjpGbi55fHwwLGM6Rm4ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaChWaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3RhcnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2FzZSJGcmFtZSI6Y2FzZSJB'@;
put 'cmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpjYXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0Q29udGludWUiOmNhc2Ui'@;
put 'TGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNlIlNlcmllc0xpc3QiOmNh'@;
put 'c2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2FzZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4dCI6Y2FzZSJUZXh0Ijpj'@;
put 'YXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2VyRm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0IjpjYXNlIkVuZE9iamVjdCI6'@;
put 'Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdlIjpjYXNlIlNYVmlld0V4'@;
put 'OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2UiUXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6Y2FzZSJRc2lTWFRhZyI6'@;
put 'Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNlIlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNTdHJlYW0iOmNhc2UiTXNv'@;
put 'RHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpjYXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFnZUJyZWFrcyI6Y2FzZSJW'@;
put 'ZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZhdWx0OnN3aXRjaChWaS5u'@;
put 'KXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xSIjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJRkYyRk9OVFhUUkEiOmNh'@;
put 'c2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJTyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0YiOmNhc2UiRGF0YUxhYkV4'@;
put 'dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51IjpjYXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNlIkxpc3RGaWVsZCI6Y2Fz'@;
put 'ZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKE8uV1RGKXRocm93IlVucmVjb2duaXplZCBSZWNvcmQgIitWaS5ufX19fX1lbHNlIFMubCs9cWEs'@;
put 'cnImJnJyLmVuYyYmcnIuZW5jLmluc2l0dSYmcnIuZW5jLmluc2l0dShTZSh7bGVuZ3RoOnFhfSkpfXJldHVybiBrLlNoZWV0TmFtZXM9UmUob2UpLnNvcnQoZnVuY3Rpb24oZ2Esa2kpe3JldHVybiBOdW1iZXIoZ2EpLU51bWJlcihraSl9KS5tYXAoZnVuY3Rpb24oZ2Epe3JldHVybiBvZVtn'@;
put 'YV0ubmFtZX0pLE8uYm9va1NoZWV0c3x8KGsuU2hlZXRzPUspLCFrLlNoZWV0TmFtZXMubGVuZ3RoJiZWZVsiIXJlZiJdPyhrLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksay5TaGVldHMmJihrLlNoZWV0cy5TaGVldDE9VmUpKTprLlByZWFtYmxlPVZlLGsuU2hlZXRzJiZvcy5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKGdhLGtpKXtrLlNoZWV0c1trLlNoZWV0TmFtZXNba2ldXVsiIWF1dG9maWx0ZXIiXT1nYX0pLGsuU3RyaW5ncz1iZSxrLlNTRj1BLmdldF90YWJsZSgpLHJyLmVuYyYmKGsuRW5jcnlwdGlvbj1yci5lbmMpLFBpJiYoay5UaGVtZXM9UGkpLGsuTWV0YWRhdGE9e30sdm9pZCAw'@;
put 'IT09S3QmJihrLk1ldGFkYXRhLkNvdW50cnk9S3QpLEhuLm5hbWVzLmxlbmd0aD4wJiYoQ24uTmFtZXM9SG4ubmFtZXMpLGsuV29ya2Jvb2s9Q24sa30oSy5jb250ZW50LE8pO2Vsc2UgaWYoKG9lPXZlLmZpbmQoUywiUGVyZmVjdE9mZmljZV9NQUlOIikpJiZvZS5jb250ZW50KWVlPVR2LnRv'@;
put 'X3dvcmtib29rKG9lLmNvbnRlbnQsKE8udHlwZT1tZSxPKSk7ZWxzZXtpZighKG9lPXZlLmZpbmQoUywiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhb2UuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO2VlPVR2LnRvX3dvcmtib29rKG9lLmNv'@;
put 'bnRlbnQsKE8udHlwZT1tZSxPKSl9Ty5ib29rVkJBJiZTLkZ1bGxQYXRocyYmdmUuZmluZChTLCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyIikmJihlZS52YmFyYXc9ZnVuY3Rpb24gR2soUyl7dmFyIE89dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gUy5GdWxsUGF0aHMu'@;
put 'Zm9yRWFjaChmdW5jdGlvbihrLEspe2lmKCIvIiE9PWsuc2xpY2UoLTEpJiZrLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBlZT1rLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFjZSgvXC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO3ZlLnV0aWxzLmNmYl9hZGQoTyxl'@;
put 'ZSxTLkZpbGVJbmRleFtLXS5jb250ZW50KX19KSx2ZS53cml0ZShPKX0oUykpfXZhciBwZT17fTtyZXR1cm4gUy5GdWxsUGF0aHMmJmZ1bmN0aW9uIFhuZShTLE8sayl7dmFyIEs9dmUuZmluZChTLCIhRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihLJiZLLnNpemU+MCl0cnl7dmFy'@;
put 'IGVlPWo2KEssbTQsU3kuRFNJKTtmb3IodmFyIG9lIGluIGVlKU9bb2VdPWVlW29lXX1jYXRjaChQZSl7aWYoay5XVEYpdGhyb3cgUGV9dmFyIG1lPXZlLmZpbmQoUywiIVN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKG1lJiZtZS5zaXplPjApdHJ5e3ZhciBwZT1qNihtZSxsNSxTeS5TSSk7Zm9y'@;
put 'KHZhciBiZSBpbiBwZSludWxsPT1PW2JlXSYmKE9bYmVdPXBlW2JlXSl9Y2F0Y2goUGUpe2lmKGsuV1RGKXRocm93IFBlfU8uSGVhZGluZ1BhaXJzJiZPLlRpdGxlc09mUGFydHMmJihfNChPLkhlYWRpbmdQYWlycyxPLlRpdGxlc09mUGFydHMsTyxrKSxkZWxldGUgTy5IZWFkaW5nUGFpcnMs'@;
put 'ZGVsZXRlIE8uVGl0bGVzT2ZQYXJ0cyl9KFMscGUsTyksZWUuUHJvcHM9ZWUuQ3VzdHByb3BzPXBlLE8uYm9va0ZpbGVzJiYoZWUuY2ZiPVMpLGVlfXZhciBMOD17MDp7bjoiQnJ0Um93SGRyIixmOmZ1bmN0aW9uIFVEKFMsTyl7dmFyIGs9e30sSz1TLmwrTztrLnI9Uy5yZWFkX3NoaWZ0KDQp'@;
put 'LFMubCs9NDt2YXIgZWU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MTt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmw9Syw3Jm9lJiYoay5sZXZlbD03Jm9lKSwxNiZvZSYmKGsuaGlkZGVuPSEwKSwzMiZvZSYmKGsuaHB0PWVlLzIwKSxrfX0sMTp7bjoiQnJ0Q2VsbEJsYW5rIixmOmZ1'@;
put 'bmN0aW9uIEJuZShTKXtyZXR1cm5bSTEoUyldfX0sMjp7bjoiQnJ0Q2VsbFJrIixmOmZ1bmN0aW9uIGpqKFMpe3JldHVybltJMShTKSxSMShTKSwibiJdfX0sMzp7bjoiQnJ0Q2VsbEVycm9yIixmOmZ1bmN0aW9uIEdEKFMpe3JldHVybltJMShTKSxTLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6'@;
put 'e246IkJydENlbGxCb29sIixmOmZ1bmN0aW9uIE9qKFMpe3JldHVybltJMShTKSxTLnJlYWRfc2hpZnQoMSksImIiXX19LDU6e246IkJydENlbGxSZWFsIixmOmZ1bmN0aW9uIElTKFMpe3JldHVybltJMShTKSxSbChTKSwibiJdfX0sNjp7bjoiQnJ0Q2VsbFN0IixmOmZ1bmN0aW9uIFVuZShT'@;
put 'KXtyZXR1cm5bSTEoUyksZHUoUyksInN0ciJdfX0sNzp7bjoiQnJ0Q2VsbElzc3QiLGY6ZnVuY3Rpb24gRmooUyl7cmV0dXJuW0kxKFMpLFMucmVhZF9zaGlmdCg0KSwicyJdfX0sODp7bjoiQnJ0Rm1sYVN0cmluZyIsZjpmdW5jdGlvbiB1eShTLE8sayl7dmFyIEs9Uy5sK08sZWU9STEoUyk7'@;
put 'ZWUucj1rWyIhcm93Il07dmFyIG1lPVtlZSxkdShTKSwic3RyIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEstUy5sLGspO21lWzNdPWEwKHBlLG51bGwsZWUsay5zdXBib29rcyxrKX1lbHNlIFMubD1LO3JldHVybiBtZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVu'@;
put 'Y3Rpb24gTFMoUyxPLGspe3ZhciBLPVMubCtPLGVlPUkxKFMpO2VlLnI9a1siIXJvdyJdO3ZhciBtZT1bZWUsUmwoUyksIm4iXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsSy1TLmwsayk7bWVbM109YTAocGUsbnVsbCxlZSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUs7'@;
put 'cmV0dXJuIG1lfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIFJTKFMsTyxrKXt2YXIgSz1TLmwrTyxlZT1JMShTKTtlZS5yPWtbIiFyb3ciXTt2YXIgbWU9W2VlLFMucmVhZF9zaGlmdCgxKSwiYiJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxLLVMubCxr'@;
put 'KTttZVszXT1hMChwZSxudWxsLGVlLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9SztyZXR1cm4gbWV9fSwxMTp7bjoiQnJ0Rm1sYUVycm9yIixmOmZ1bmN0aW9uIHc4KFMsTyxrKXt2YXIgSz1TLmwrTyxlZT1JMShTKTtlZS5yPWtbIiFyb3ciXTt2YXIgbWU9W2VlLFMucmVhZF9zaGlmdCgxKSwi'@;
put 'ZSJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxLLVMubCxrKTttZVszXT1hMChwZSxudWxsLGVlLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9SztyZXR1cm4gbWV9fSwxMjp7bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBMaihTKXtyZXR1cm5bZTIoUyldfX0sMTM6'@;
put 'e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24gem5lKFMpe3JldHVybltlMihTKSxSMShTKSwibiJdfX0sMTQ6e246IkJydFNob3J0RXJyb3IiLGY6ZnVuY3Rpb24gXzgoUyl7cmV0dXJuW2UyKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlv'@;
put 'biBZRChTKXtyZXR1cm5bZTIoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7bjoiQnJ0U2hvcnRSZWFsIixmOkJqfSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiBXaihTKXtyZXR1cm5bZTIoUyksZHUoUyksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlv'@;
put 'biBOaihTKXtyZXR1cm5bZTIoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSwxOTp7bjoiQnJ0U1NUSXRlbSIsZjppbH0sMjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1iZXIifSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6'@;
put 'e246IkJydFBDRElTdHJpbmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1lIn0sMjY6e246IkJydFBDRElJbmRleCJ9LDI3OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1iZXIifSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwz'@;
put 'MTp7bjoiQnJ0UENESUFTdHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRldGltZSJ9LDMzOntuOiJCcnRQQ1JSZWNvcmQifSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVnaW4ifSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0'@;
put 'QUNFbmQifSwzOTp7bjoiQnJ0TmFtZSIsZjpmdW5jdGlvbiBBOChTLE8sayl7dmFyIEs9Uy5sK087Uy5sKz00LFMubCs9MTt2YXIgZWU9Uy5yZWFkX3NoaWZ0KDQpLG9lPWE1KFMpLG1lPW1EKFMsMCxrKSxwZT1RdShTKTtTLmw9Szt2YXIgYmU9e05hbWU6b2UsUHRnOm1lfTtyZXR1cm4gZWU8'@;
put 'MjY4NDM1NDU1JiYoYmUuU2hlZXQ9ZWUpLHBlJiYoYmUuQ29tbWVudD1wZSksYmV9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQiLGY6ZnVuY3Rpb24gWVYoUyxPLGspe3ZhciBLPXt9O0suc3o9Uy5yZWFkX3NoaWZ0KDIp'@;
put 'LzIwO3ZhciBlZT1WdyhTKTtzd2l0Y2goZWUuZkJvbGQmJihLLmJvbGQ9MSksZWUuZkl0YWxpYyYmKEsuaXRhbGljPTEpLGVlLmZVbmRlcmxpbmUmJihLLnVuZGVybGluZT0xKSxlZS5mQ29uZGVuc2UmJihLLmNvbmRlbnNlPTEpLGVlLmZFeHRlbmQmJihLLmV4dGVuZD0xKSxlZS5mU2hhZG93'@;
put 'JiYoSy5zaGFkb3c9MSksZWUuZk91dGxpbmUmJihLLm91dGxpbmU9MSksZWUuZlN0cmlrZW91dCYmKEsuc3RyaWtlPTEpLDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEsuYm9sZD0xKSxTLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpLLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpLLnZhbGln'@;
put 'bj0ic3ViIn12YXIgbWU9Uy5yZWFkX3NoaWZ0KDEpOzAhPW1lJiYoSy51bmRlcmxpbmU9bWUpO3ZhciBwZT1TLnJlYWRfc2hpZnQoMSk7cGU+MCYmKEsuZmFtaWx5PXBlKTt2YXIgYmU9Uy5yZWFkX3NoaWZ0KDEpO3N3aXRjaChiZT4wJiYoSy5jaGFyc2V0PWJlKSxTLmwrKyxLLmNvbG9yPXQy'@;
put 'KFMpLFMucmVhZF9zaGlmdCgxKSl7Y2FzZSAxOksuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOksuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIEsubmFtZT1kdShTKSxLfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlvbiBqdihTLE8pe3JldHVybltTLnJlYWRfc2hpZnQoMiksZHUoUyldfX0s'@;
put 'NDU6e246IkJydEZpbGwiLGY6ZnVuY3Rpb24gWFYoUyxPKXt2YXIgaz1TLmwrTyxLPXt9LGVlPVMucmVhZF9zaGlmdCg0KTtpZig0MCE9ZWUpe0sucGF0dGVyblR5cGU9a0NbZWVdO3ZhciBvZT10MihTKTs2NCE9b2UuaW5kZXgmJihLLmZnQ29sb3I9b2UpO3ZhciBtZT10MihTKTs2NSE9bWUu'@;
put 'aW5kZXgmJihLLmJnQ29sb3I9bWUpfWVsc2V7Uy5sKz0xNixTLnJlYWRfc2hpZnQoNCksUmwoUyksUmwoUyksUmwoUyksUmwoUyksUmwoUyk7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCksYmU9W10sUGU9MDtQZTxwZTsrK1BlKWJlLnB1c2goJFYoUykpfXJldHVybiBTLmw9ayxLfX0sNDY6'@;
put 'e246IkJydEJvcmRlciIsZjpmdW5jdGlvbiBxVihTKXt2YXIgTz17fTtTLnJlYWRfc2hpZnQoMSk7dmFyIGs9QTUoUyk7Im5vbmUiIT1rLnN0eWxlJiYoTy50b3A9ayk7dmFyIEs9QTUoUyk7Im5vbmUiIT1LLnN0eWxlJiYoTy5ib3R0b209Syk7dmFyIGVlPUE1KFMpOyJub25lIiE9ZWUuc3R5'@;
put 'bGUmJihPLmxlZnQ9ZWUpO3ZhciBvZT1BNShTKTsibm9uZSIhPW9lLnN0eWxlJiYoTy5yaWdodD1vZSk7dmFyIG1lPUE1KFMpO3JldHVybiJub25lIiE9bWUuc3R5bGUmJihPLmRpYWc9bWUpLE99fSw0Nzp7bjoiQnJ0WEYiLGY6ZnVuY3Rpb24gREMoUyxPKXt2YXIgaz1TLmwrTyxLPXt9LGVl'@;
put 'PVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMiksbWU9Uy5yZWFkX3NoaWZ0KDIpLHBlPVMucmVhZF9zaGlmdCgyKSxiZT1TLnJlYWRfc2hpZnQoMiksUGU9Uy5yZWFkX3NoaWZ0KDEpO1MucmVhZF9zaGlmdCgxKTt2YXIgVmU9Uy5yZWFkX3NoaWZ0KDIpLFllPVMucmVhZF9zaGlm'@;
put 'dCgxKTtTLmw9ayxLLnhmSWQ9ZWUsSy5udW1GbXRJZD1vZSxLLmZvbnRJZD1tZSxLLmZpbGxJZD1wZSxLLmJvcmRlcklkPWJlLDEmWWUmJjAhPUsubnVtRm10SWQmJihLLmFwcGx5TnVtYmVyRm9ybWF0PSEwKSxLLmFsaWdubWVudD17fSxQZT4wJiYoSy5hbGlnbm1lbnQudGV4dFJvdGF0aW9u'@;
put 'PVBlKTt2YXIgZXQ9ITE7cmV0dXJuIDcmVmUmJihldD0hMCxLLmFsaWdubWVudC5ob3Jpem9udGFsPVQ1WzcmVmVdKSxLLmFsaWdubWVudC52ZXJ0aWNhbD10OFtWZT4+PjMmN10sSy5hbGlnbm1lbnQudmVydGljYWwmJihldD0hMCksVmU+Pj42JjEmJihLLmFsaWdubWVudC53cmFwVGV4dD0h'@;
put 'MCksVmU+Pj44JjEmJihLLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksZXR8fGRlbGV0ZSBLLmFsaWdubWVudCw0JlllJiZldCYmKEsuYXBwbHlBbGlnbm1lbnQ9ITApLEt9fSw0ODp7bjoiQnJ0U3R5bGUifSw0OTp7bjoiQnJ0Q2VsbE1ldGEifSw1MDp7bjoiQnJ0VmFsdWVNZXRhIn0sNTE6'@;
put 'e246IkJydE1kYiJ9LDUyOntuOiJCcnRCZWdpbkZtZCJ9LDUzOntuOiJCcnRFbmRGbWQifSw1NDp7bjoiQnJ0QmVnaW5NZHgifSw1NTp7bjoiQnJ0RW5kTWR4In0sNTY6e246IkJydEJlZ2luTWR4VHVwbGUifSw1Nzp7bjoiQnJ0RW5kTWR4VHVwbGUifSw1ODp7bjoiQnJ0TWR4TWJySXN0ciJ9'@;
put 'LDU5OntuOiJCcnRTdHIifSw2MDp7bjoiQnJ0Q29sSW5mbyIsZjpsQ30sNjI6e246IkJydENlbGxSU3RyaW5nIn0sNjM6e246IkJydENhbGNDaGFpbkl0ZW0kIixmOmZ1bmN0aW9uIHI4KFMpe3ZhciBPPXt9O08uaT1TLnJlYWRfc2hpZnQoNCk7dmFyIGs9e307ay5yPVMucmVhZF9zaGlmdCg0'@;
put 'KSxrLmM9Uy5yZWFkX3NoaWZ0KDQpLE8ucj1xaShrKTt2YXIgSz1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImSyYmKE8ubD0iMSIpLDgmSyYmKE8uYT0iMSIpLE99fSw2NDp7bjoiQnJ0RFZhbCIsZjpmdW5jdGlvbiB0eihTLE8sayl7dmFyIEs9Uy5sK08sZWU9Uy5yZWFkX3NoaWZ0KDQpLG9l'@;
put 'PWUwKFMpLG1lPVF1KFMpLHBlPVF1KFMpLGJlPVF1KFMpLFBlPVF1KFMpLFZlPWdEKFMsTyxrKSxZZT1TLmw8Sz9nRChTLE8sayk6bnVsbCxldD0xNSZlZSxjdD17dDpRRFtldF0sc3FyZng6b2UsczpbbWUscGUsYmUsUGVdfTtyZXR1cm4gVmUmJihjdC5mMT1WZSksWWUmJihjdC5mMj1ZZSks'@;
put 'MD09ZXR8fDM9PWV0fHw3PT1ldHx8KGN0Lm9wPVBTW2VlPj4yMCYxNV0pLGN0fX0sNjU6e246IkJydFN4dmNlbGxOdW0ifSw2Njp7bjoiQnJ0U3h2Y2VsbFN0ciJ9LDY3OntuOiJCcnRTeHZjZWxsQm9vbCJ9LDY4OntuOiJCcnRTeHZjZWxsRXJyIn0sNjk6e246IkJydFN4dmNlbGxEYXRlIn0s'@;
put 'NzA6e246IkJydFN4dmNlbGxOaWwifSwxMjg6e246IkJydEZpbGVWZXJzaW9uIn0sMTI5OntuOiJCcnRCZWdpblNoZWV0In0sMTMwOntuOiJCcnRFbmRTaGVldCJ9LDEzMTp7bjoiQnJ0QmVnaW5Cb29rIixmOlJuLHA6MH0sMTMyOntuOiJCcnRFbmRCb29rIn0sMTMzOntuOiJCcnRCZWdpbldz'@;
put 'Vmlld3MifSwxMzQ6e246IkJydEVuZFdzVmlld3MifSwxMzU6e246IkJydEJlZ2luQm9va1ZpZXdzIn0sMTM2OntuOiJCcnRFbmRCb29rVmlld3MifSwxMzc6e246IkJydEJlZ2luV3NWaWV3IixmOmZ1bmN0aW9uIE9TKFMpe3ZhciBPPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz0yOCx7'@;
put 'UlRMOjMyJk8sZ3JpZDohISg0Jk8pfX19LDEzODp7bjoiQnJ0RW5kV3NWaWV3In0sMTM5OntuOiJCcnRCZWdpbkNzVmlld3MifSwxNDA6e246IkJydEVuZENzVmlld3MifSwxNDE6e246IkJydEJlZ2luQ3NWaWV3In0sMTQyOntuOiJCcnRFbmRDc1ZpZXcifSwxNDM6e246IkJydEJlZ2luQnVu'@;
put 'ZGxlU2hzIn0sMTQ0OntuOiJCcnRFbmRCdW5kbGVTaHMifSwxNDU6e246IkJydEJlZ2luU2hlZXREYXRhIn0sMTQ2OntuOiJCcnRFbmRTaGVldERhdGEifSwxNDc6e246IkJydFdzUHJvcCIsZjpmdW5jdGlvbiBseShTLE8pe3ZhciBrPXt9LEs9U1tTLmxdO3JldHVybisrUy5sLGsuYWJvdmU9'@;
put 'ISg2NCZLKSxrLmxlZnQ9ISgxMjgmSyksUy5sKz0xOCxrLm5hbWU9bjUoUyxPLTE5KSxrfX0sMTQ4OntuOiJCcnRXc0RpbSIsZjpraixwOjE2fSwxNTE6e246IkJydFBhbmUiLGY6ZnVuY3Rpb24gWEQoUyxPKXt2YXIgaz1TLmwrTztSbChTKSxSbChTKTt2YXIgSz1TLnJlYWRfc2hpZnQoNCwi'@;
put 'aSIpLGVlPVMucmVhZF9zaGlmdCg0LCJpIik7aWYoUy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCgxKSxrIT1TLmwpdGhyb3cgbmV3IEVycm9yKCJCYWQgQnJ0UGFuZTogIitrKyIgIT0gIitTLmwpO3JldHVybltxaSh7cjpLLGM6ZWV9KV19fSwxNTI6e246IkJydFNlbCIsZjpmdW5jdGlv'@;
put 'biBxRChTLE8pe3JldHVybiBTLnJlYWRfc2hpZnQoNCkse2NlbGw6cWkoe3I6Uy5yZWFkX3NoaWZ0KDQpLGM6Uy5yZWFkX3NoaWZ0KDQpfSl9fX0sMTUzOntuOiJCcnRXYlByb3AiLGY6ZnVuY3Rpb24gVVMoUyxPKXt2YXIgaz17fSxLPVMucmVhZF9zaGlmdCg0KTtrLmRlZmF1bHRUaGVtZVZl'@;
put 'cnNpb249Uy5yZWFkX3NoaWZ0KDQpO3ZhciBlZT1PPjg/ZHUoUyk6IiI7cmV0dXJuIGVlLmxlbmd0aD4wJiYoay5Db2RlTmFtZT1lZSksay5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZLKSxrLmJhY2t1cEZpbGU9ISEoNjQmSyksay5jaGVja0NvbXBhdGliaWxpdHk9ISEoNDA5NiZL'@;
put 'KSxrLmRhdGUxOTA0PSEhKDEmSyksay5maWx0ZXJQcml2YWN5PSEhKDgmSyksay5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZLKSxrLnByb21wdGVkU29sdXRpb25zPSEhKDE2JkspLGsucHVibGlzaEl0ZW1zPSEhKDIwNDgmSyksay5yZWZyZXNoQWxsQ29ubmVjdGlvbnM9ISEoMjYyMTQ0'@;
put 'JkspLGsuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmSyksay5zaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JkspLGsuc2hvd0lua0Fubm90YXRpb249ISEoMzImSyksay5zaG93T2JqZWN0cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUiXVtLPj4xMyYzXSxrLnNob3dQ'@;
put 'aXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JkspLGsudXBkYXRlTGlua3M9WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVtLPj44JjNdLGt9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoiQnJ0RmlsZVJlY292ZXIifSwxNTY6e246IkJydEJ1bmRsZVNoIixmOmZ1bmN0aW9uIGJ6'@;
put 'KFMsTyl7dmFyIGs9e307cmV0dXJuIGsuSGlkZGVuPVMucmVhZF9zaGlmdCg0KSxrLmlUYWJJRD1TLnJlYWRfc2hpZnQoNCksay5zdHJSZWxJRD1nNChTLE8tOCksay5uYW1lPWR1KFMpLGt9fSwxNTc6e246IkJydENhbGNQcm9wIn0sMTU4OntuOiJCcnRCb29rVmlldyJ9LDE1OTp7bjoiQnJ0'@;
put 'QmVnaW5Tc3QiLGY6ZnVuY3Rpb24ga3YoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfX0sMTYwOntuOiJCcnRFbmRTc3QifSwxNjE6e246IkJydEJlZ2luQUZpbHRlciIsZjpodX0sMTYyOntuOiJCcnRFbmRBRmlsdGVyIn0sMTYzOntuOiJCcnRCZWdpbkZpbHRl'@;
put 'ckNvbHVtbiJ9LDE2NDp7bjoiQnJ0RW5kRmlsdGVyQ29sdW1uIn0sMTY1OntuOiJCcnRCZWdpbkZpbHRlcnMifSwxNjY6e246IkJydEVuZEZpbHRlcnMifSwxNjc6e246IkJydEZpbHRlciJ9LDE2ODp7bjoiQnJ0Q29sb3JGaWx0ZXIifSwxNjk6e246IkJydEljb25GaWx0ZXIifSwxNzA6e246'@;
put 'IkJydFRvcDEwRmlsdGVyIn0sMTcxOntuOiJCcnREeW5hbWljRmlsdGVyIn0sMTcyOntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMifSwxNzM6e246IkJydEVuZEN1c3RvbUZpbHRlcnMifSwxNzQ6e246IkJydEN1c3RvbUZpbHRlciJ9LDE3NTp7bjoiQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW0i'@;
put 'fSwxNzY6e246IkJydE1lcmdlQ2VsbCIsZjokRH0sMTc3OntuOiJCcnRCZWdpbk1lcmdlQ2VsbHMifSwxNzg6e246IkJydEVuZE1lcmdlQ2VsbHMifSwxNzk6e246IkJydEJlZ2luUGl2b3RDYWNoZURlZiJ9LDE4MDp7bjoiQnJ0RW5kUGl2b3RDYWNoZURlZiJ9LDE4MTp7bjoiQnJ0QmVnaW5Q'@;
put 'Q0RGaWVsZHMifSwxODI6e246IkJydEVuZFBDREZpZWxkcyJ9LDE4Mzp7bjoiQnJ0QmVnaW5QQ0RGaWVsZCJ9LDE4NDp7bjoiQnJ0RW5kUENERmllbGQifSwxODU6e246IkJydEJlZ2luUENEU291cmNlIn0sMTg2OntuOiJCcnRFbmRQQ0RTb3VyY2UifSwxODc6e246IkJydEJlZ2luUENEU1Jh'@;
put 'bmdlIn0sMTg4OntuOiJCcnRFbmRQQ0RTUmFuZ2UifSwxODk6e246IkJydEJlZ2luUENERkF0YmwifSwxOTA6e246IkJydEVuZFBDREZBdGJsIn0sMTkxOntuOiJCcnRCZWdpblBDRElSdW4ifSwxOTI6e246IkJydEVuZFBDRElSdW4ifSwxOTM6e246IkJydEJlZ2luUGl2b3RDYWNoZVJlY29y'@;
put 'ZHMifSwxOTQ6e246IkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzIn0sMTk1OntuOiJCcnRCZWdpblBDREhpZXJhcmNoaWVzIn0sMTk2OntuOiJCcnRFbmRQQ0RIaWVyYXJjaGllcyJ9LDE5Nzp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaHkifSwxOTg6e246IkJydEVuZFBDREhpZXJhcmNoeSJ9LDE5'@;
put 'OTp7bjoiQnJ0QmVnaW5QQ0RIRmllbGRzVXNhZ2UifSwyMDA6e246IkJydEVuZFBDREhGaWVsZHNVc2FnZSJ9LDIwMTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9uIn0sMjAyOntuOiJCcnRFbmRFeHRDb25uZWN0aW9uIn0sMjAzOntuOiJCcnRCZWdpbkVDRGJQcm9wcyJ9LDIwNDp7bjoiQnJ0'@;
put 'RW5kRUNEYlByb3BzIn0sMjA1OntuOiJCcnRCZWdpbkVDT2xhcFByb3BzIn0sMjA2OntuOiJCcnRFbmRFQ09sYXBQcm9wcyJ9LDIwNzp7bjoiQnJ0QmVnaW5QQ0RTQ29uc29sIn0sMjA4OntuOiJCcnRFbmRQQ0RTQ29uc29sIn0sMjA5OntuOiJCcnRCZWdpblBDRFNDUGFnZXMifSwyMTA6e246'@;
put 'IkJydEVuZFBDRFNDUGFnZXMifSwyMTE6e246IkJydEJlZ2luUENEU0NQYWdlIn0sMjEyOntuOiJCcnRFbmRQQ0RTQ1BhZ2UifSwyMTM6e246IkJydEJlZ2luUENEU0NQSXRlbSJ9LDIxNDp7bjoiQnJ0RW5kUENEU0NQSXRlbSJ9LDIxNTp7bjoiQnJ0QmVnaW5QQ0RTQ1NldHMifSwyMTY6e246'@;
put 'IkJydEVuZFBDRFNDU2V0cyJ9LDIxNzp7bjoiQnJ0QmVnaW5QQ0RTQ1NldCJ9LDIxODp7bjoiQnJ0RW5kUENEU0NTZXQifSwyMTk6e246IkJydEJlZ2luUENERkdyb3VwIn0sMjIwOntuOiJCcnRFbmRQQ0RGR3JvdXAifSwyMjE6e246IkJydEJlZ2luUENERkdJdGVtcyJ9LDIyMjp7bjoiQnJ0'@;
put 'RW5kUENERkdJdGVtcyJ9LDIyMzp7bjoiQnJ0QmVnaW5QQ0RGR1JhbmdlIn0sMjI0OntuOiJCcnRFbmRQQ0RGR1JhbmdlIn0sMjI1OntuOiJCcnRCZWdpblBDREZHRGlzY3JldGUifSwyMjY6e246IkJydEVuZFBDREZHRGlzY3JldGUifSwyMjc6e246IkJydEJlZ2luUENEU0RUdXBsZUNhY2hl'@;
put 'In0sMjI4OntuOiJCcnRFbmRQQ0RTRFR1cGxlQ2FjaGUifSwyMjk6e246IkJydEJlZ2luUENEU0RUQ0VudHJpZXMifSwyMzA6e246IkJydEVuZFBDRFNEVENFbnRyaWVzIn0sMjMxOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVycyJ9LDIzMjp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXJzIn0s'@;
put 'MjMzOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyIn0sMjM0OntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlciJ9LDIzNTp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcmllcyJ9LDIzNjp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJpZXMifSwyMzc6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJ5In0sMjM4Ontu'@;
put 'OiJCcnRFbmRQQ0RTRFRDUXVlcnkifSwyMzk6e246IkJydEJlZ2luUENEU0RUQ1NldHMifSwyNDA6e246IkJydEVuZFBDRFNEVENTZXRzIn0sMjQxOntuOiJCcnRCZWdpblBDRFNEVENTZXQifSwyNDI6e246IkJydEVuZFBDRFNEVENTZXQifSwyNDM6e246IkJydEJlZ2luUENEQ2FsY0l0ZW1z'@;
put 'In0sMjQ0OntuOiJCcnRFbmRQQ0RDYWxjSXRlbXMifSwyNDU6e246IkJydEJlZ2luUENEQ2FsY0l0ZW0ifSwyNDY6e246IkJydEVuZFBDRENhbGNJdGVtIn0sMjQ3OntuOiJCcnRCZWdpblBSdWxlIn0sMjQ4OntuOiJCcnRFbmRQUnVsZSJ9LDI0OTp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMifSwy'@;
put 'NTA6e246IkJydEVuZFBSRmlsdGVycyJ9LDI1MTp7bjoiQnJ0QmVnaW5QUkZpbHRlciJ9LDI1Mjp7bjoiQnJ0RW5kUFJGaWx0ZXIifSwyNTM6e246IkJydEJlZ2luUE5hbWVzIn0sMjU0OntuOiJCcnRFbmRQTmFtZXMifSwyNTU6e246IkJydEJlZ2luUE5hbWUifSwyNTY6e246IkJydEVuZFBO'@;
put 'YW1lIn0sMjU3OntuOiJCcnRCZWdpblBOUGFpcnMifSwyNTg6e246IkJydEVuZFBOUGFpcnMifSwyNTk6e246IkJydEJlZ2luUE5QYWlyIn0sMjYwOntuOiJCcnRFbmRQTlBhaXIifSwyNjE6e246IkJydEJlZ2luRUNXZWJQcm9wcyJ9LDI2Mjp7bjoiQnJ0RW5kRUNXZWJQcm9wcyJ9LDI2Mzp7'@;
put 'bjoiQnJ0QmVnaW5FY1dwVGFibGVzIn0sMjY0OntuOiJCcnRFbmRFQ1dQVGFibGVzIn0sMjY1OntuOiJCcnRCZWdpbkVDUGFyYW1zIn0sMjY2OntuOiJCcnRFbmRFQ1BhcmFtcyJ9LDI2Nzp7bjoiQnJ0QmVnaW5FQ1BhcmFtIn0sMjY4OntuOiJCcnRFbmRFQ1BhcmFtIn0sMjY5OntuOiJCcnRC'@;
put 'ZWdpblBDREtQSXMifSwyNzA6e246IkJydEVuZFBDREtQSXMifSwyNzE6e246IkJydEJlZ2luUENES1BJIn0sMjcyOntuOiJCcnRFbmRQQ0RLUEkifSwyNzM6e246IkJydEJlZ2luRGltcyJ9LDI3NDp7bjoiQnJ0RW5kRGltcyJ9LDI3NTp7bjoiQnJ0QmVnaW5EaW0ifSwyNzY6e246IkJydEVu'@;
put 'ZERpbSJ9LDI3Nzp7bjoiQnJ0SW5kZXhQYXJ0RW5kIn0sMjc4OntuOiJCcnRCZWdpblN0eWxlU2hlZXQifSwyNzk6e246IkJydEVuZFN0eWxlU2hlZXQifSwyODA6e246IkJydEJlZ2luU1hWaWV3In0sMjgxOntuOiJCcnRFbmRTWFZJIn0sMjgyOntuOiJCcnRCZWdpblNYVkkifSwyODM6e246'@;
put 'IkJydEJlZ2luU1hWSXMifSwyODQ6e246IkJydEVuZFNYVklzIn0sMjg1OntuOiJCcnRCZWdpblNYVkQifSwyODY6e246IkJydEVuZFNYVkQifSwyODc6e246IkJydEJlZ2luU1hWRHMifSwyODg6e246IkJydEVuZFNYVkRzIn0sMjg5OntuOiJCcnRCZWdpblNYUEkifSwyOTA6e246IkJydEVu'@;
put 'ZFNYUEkifSwyOTE6e246IkJydEJlZ2luU1hQSXMifSwyOTI6e246IkJydEVuZFNYUElzIn0sMjkzOntuOiJCcnRCZWdpblNYREkifSwyOTQ6e246IkJydEVuZFNYREkifSwyOTU6e246IkJydEJlZ2luU1hESXMifSwyOTY6e246IkJydEVuZFNYRElzIn0sMjk3OntuOiJCcnRCZWdpblNYTEki'@;
put 'fSwyOTg6e246IkJydEVuZFNYTEkifSwyOTk6e246IkJydEJlZ2luU1hMSVJ3cyJ9LDMwMDp7bjoiQnJ0RW5kU1hMSVJ3cyJ9LDMwMTp7bjoiQnJ0QmVnaW5TWExJQ29scyJ9LDMwMjp7bjoiQnJ0RW5kU1hMSUNvbHMifSwzMDM6e246IkJydEJlZ2luU1hGb3JtYXQifSwzMDQ6e246IkJydEVu'@;
put 'ZFNYRm9ybWF0In0sMzA1OntuOiJCcnRCZWdpblNYRm9ybWF0cyJ9LDMwNjp7bjoiQnJ0RW5kU3hGb3JtYXRzIn0sMzA3OntuOiJCcnRCZWdpblN4U2VsZWN0In0sMzA4OntuOiJCcnRFbmRTeFNlbGVjdCJ9LDMwOTp7bjoiQnJ0QmVnaW5JU1hWRFJ3cyJ9LDMxMDp7bjoiQnJ0RW5kSVNYVkRS'@;
put 'd3MifSwzMTE6e246IkJydEJlZ2luSVNYVkRDb2xzIn0sMzEyOntuOiJCcnRFbmRJU1hWRENvbHMifSwzMTM6e246IkJydEVuZFNYTG9jYXRpb24ifSwzMTQ6e246IkJydEJlZ2luU1hMb2NhdGlvbiJ9LDMxNTp7bjoiQnJ0RW5kU1hWaWV3In0sMzE2OntuOiJCcnRCZWdpblNYVEhzIn0sMzE3'@;
put 'OntuOiJCcnRFbmRTWFRIcyJ9LDMxODp7bjoiQnJ0QmVnaW5TWFRIIn0sMzE5OntuOiJCcnRFbmRTWFRIIn0sMzIwOntuOiJCcnRCZWdpbklTWFRIUndzIn0sMzIxOntuOiJCcnRFbmRJU1hUSFJ3cyJ9LDMyMjp7bjoiQnJ0QmVnaW5JU1hUSENvbHMifSwzMjM6e246IkJydEVuZElTWFRIQ29s'@;
put 'cyJ9LDMyNDp7bjoiQnJ0QmVnaW5TWFRETVBTIn0sMzI1OntuOiJCcnRFbmRTWFRETVBzIn0sMzI2OntuOiJCcnRCZWdpblNYVERNUCJ9LDMyNzp7bjoiQnJ0RW5kU1hURE1QIn0sMzI4OntuOiJCcnRCZWdpblNYVEhJdGVtcyJ9LDMyOTp7bjoiQnJ0RW5kU1hUSEl0ZW1zIn0sMzMwOntuOiJC'@;
put 'cnRCZWdpblNYVEhJdGVtIn0sMzMxOntuOiJCcnRFbmRTWFRISXRlbSJ9LDMzMjp7bjoiQnJ0QmVnaW5NZXRhZGF0YSJ9LDMzMzp7bjoiQnJ0RW5kTWV0YWRhdGEifSwzMzQ6e246IkJydEJlZ2luRXNtZHRpbmZvIn0sMzM1OntuOiJCcnRNZHRpbmZvIn0sMzM2OntuOiJCcnRFbmRFc21kdGlu'@;
put 'Zm8ifSwzMzc6e246IkJydEJlZ2luRXNtZGIifSwzMzg6e246IkJydEVuZEVzbWRiIn0sMzM5OntuOiJCcnRCZWdpbkVzZm1kIn0sMzQwOntuOiJCcnRFbmRFc2ZtZCJ9LDM0MTp7bjoiQnJ0QmVnaW5TaW5nbGVDZWxscyJ9LDM0Mjp7bjoiQnJ0RW5kU2luZ2xlQ2VsbHMifSwzNDM6e246IkJy'@;
put 'dEJlZ2luTGlzdCJ9LDM0NDp7bjoiQnJ0RW5kTGlzdCJ9LDM0NTp7bjoiQnJ0QmVnaW5MaXN0Q29scyJ9LDM0Njp7bjoiQnJ0RW5kTGlzdENvbHMifSwzNDc6e246IkJydEJlZ2luTGlzdENvbCJ9LDM0ODp7bjoiQnJ0RW5kTGlzdENvbCJ9LDM0OTp7bjoiQnJ0QmVnaW5MaXN0WG1sQ1ByIn0s'@;
put 'MzUwOntuOiJCcnRFbmRMaXN0WG1sQ1ByIn0sMzUxOntuOiJCcnRMaXN0Q0NGbWxhIn0sMzUyOntuOiJCcnRMaXN0VHJGbWxhIn0sMzUzOntuOiJCcnRCZWdpbkV4dGVybmFscyJ9LDM1NDp7bjoiQnJ0RW5kRXh0ZXJuYWxzIn0sMzU1OntuOiJCcnRTdXBCb29rU3JjIixmOmc0fSwzNTc6e246'@;
put 'IkJydFN1cFNlbGYifSwzNTg6e246IkJydFN1cFNhbWUifSwzNTk6e246IkJydFN1cFRhYnMifSwzNjA6e246IkJydEJlZ2luU3VwQm9vayJ9LDM2MTp7bjoiQnJ0UGxhY2Vob2xkZXJOYW1lIn0sMzYyOntuOiJCcnRFeHRlcm5TaGVldCIsZjpTdn0sMzYzOntuOiJCcnRFeHRlcm5UYWJsZVN0'@;
put 'YXJ0In0sMzY0OntuOiJCcnRFeHRlcm5UYWJsZUVuZCJ9LDM2Njp7bjoiQnJ0RXh0ZXJuUm93SGRyIn0sMzY3OntuOiJCcnRFeHRlcm5DZWxsQmxhbmsifSwzNjg6e246IkJydEV4dGVybkNlbGxSZWFsIn0sMzY5OntuOiJCcnRFeHRlcm5DZWxsQm9vbCJ9LDM3MDp7bjoiQnJ0RXh0ZXJuQ2Vs'@;
put 'bEVycm9yIn0sMzcxOntuOiJCcnRFeHRlcm5DZWxsU3RyaW5nIn0sMzcyOntuOiJCcnRCZWdpbkVzbWR4In0sMzczOntuOiJCcnRFbmRFc21keCJ9LDM3NDp7bjoiQnJ0QmVnaW5NZHhTZXQifSwzNzU6e246IkJydEVuZE1keFNldCJ9LDM3Njp7bjoiQnJ0QmVnaW5NZHhNYnJQcm9wIn0sMzc3'@;
put 'OntuOiJCcnRFbmRNZHhNYnJQcm9wIn0sMzc4OntuOiJCcnRCZWdpbk1keEtQSSJ9LDM3OTp7bjoiQnJ0RW5kTWR4S1BJIn0sMzgwOntuOiJCcnRCZWdpbkVzc3RyIn0sMzgxOntuOiJCcnRFbmRFc3N0ciJ9LDM4Mjp7bjoiQnJ0QmVnaW5QUkZJdGVtIn0sMzgzOntuOiJCcnRFbmRQUkZJdGVt'@;
put 'In0sMzg0OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRHMifSwzODU6e246IkJydEVuZFBpdm90Q2FjaGVJRHMifSwzODY6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEIn0sMzg3OntuOiJCcnRFbmRQaXZvdENhY2hlSUQifSwzODg6e246IkJydEJlZ2luSVNYVklzIn0sMzg5OntuOiJCcnRFbmRJ'@;
put 'U1hWSXMifSwzOTA6e246IkJydEJlZ2luQ29sSW5mb3MifSwzOTE6e246IkJydEVuZENvbEluZm9zIn0sMzkyOntuOiJCcnRCZWdpblJ3QnJrIn0sMzkzOntuOiJCcnRFbmRSd0JyayJ9LDM5NDp7bjoiQnJ0QmVnaW5Db2xCcmsifSwzOTU6e246IkJydEVuZENvbEJyayJ9LDM5Njp7bjoiQnJ0'@;
put 'QnJrIn0sMzk3OntuOiJCcnRVc2VyQm9va1ZpZXcifSwzOTg6e246IkJydEluZm8ifSwzOTk6e246IkJydENVc3IifSw0MDA6e246IkJydFVzciJ9LDQwMTp7bjoiQnJ0QmVnaW5Vc2VycyJ9LDQwMzp7bjoiQnJ0RU9GIn0sNDA0OntuOiJCcnRVQ1IifSw0MDU6e246IkJydFJSSW5zRGVsIn0s'@;
put 'NDA2OntuOiJCcnRSUkVuZEluc0RlbCJ9LDQwNzp7bjoiQnJ0UlJNb3ZlIn0sNDA4OntuOiJCcnRSUkVuZE1vdmUifSw0MDk6e246IkJydFJSQ2hnQ2VsbCJ9LDQxMDp7bjoiQnJ0UlJFbmRDaGdDZWxsIn0sNDExOntuOiJCcnRSUkhlYWRlciJ9LDQxMjp7bjoiQnJ0UlJVc2VyVmlldyJ9LDQx'@;
put 'Mzp7bjoiQnJ0UlJSZW5TaGVldCJ9LDQxNDp7bjoiQnJ0UlJJbnNlcnRTaCJ9LDQxNTp7bjoiQnJ0UlJEZWZOYW1lIn0sNDE2OntuOiJCcnRSUk5vdGUifSw0MTc6e246IkJydFJSQ29uZmxpY3QifSw0MTg6e246IkJydFJSVFFTSUYifSw0MTk6e246IkJydFJSRm9ybWF0In0sNDIwOntuOiJC'@;
put 'cnRSUkVuZEZvcm1hdCJ9LDQyMTp7bjoiQnJ0UlJBdXRvRm10In0sNDIyOntuOiJCcnRCZWdpblVzZXJTaFZpZXdzIn0sNDIzOntuOiJCcnRCZWdpblVzZXJTaFZpZXcifSw0MjQ6e246IkJydEVuZFVzZXJTaFZpZXcifSw0MjU6e246IkJydEVuZFVzZXJTaFZpZXdzIn0sNDI2OntuOiJCcnRB'@;
put 'cnJGbWxhIixmOmZ1bmN0aW9uIGR5KFMsTyxrKXt2YXIgSz1TLmwrTyxlZT11ZChTKSxvZT1TLnJlYWRfc2hpZnQoMSksbWU9W2VlXTtpZihtZVsyXT1vZSxrLmNlbGxGb3JtdWxhKXt2YXIgcGU9YVMoUyxLLVMubCxrKTttZVsxXT1wZX1lbHNlIFMubD1LO3JldHVybiBtZX19LDQyNzp7bjoi'@;
put 'QnJ0U2hyRm1sYSIsZjpmdW5jdGlvbiBYaihTLE8sayl7dmFyIEs9Uy5sK08sb2U9W2h1KFMsMTYpXTtpZihrLmNlbGxGb3JtdWxhKXt2YXIgbWU9bmooUyxLLVMubCxrKTtvZVsxXT1tZSxTLmw9S31lbHNlIFMubD1LO3JldHVybiBvZX19LDQyODp7bjoiQnJ0VGFibGUifSw0Mjk6e246IkJy'@;
put 'dEJlZ2luRXh0Q29ubmVjdGlvbnMifSw0MzA6e246IkJydEVuZEV4dENvbm5lY3Rpb25zIn0sNDMxOntuOiJCcnRCZWdpblBDRENhbGNNZW1zIn0sNDMyOntuOiJCcnRFbmRQQ0RDYWxjTWVtcyJ9LDQzMzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtIn0sNDM0OntuOiJCcnRFbmRQQ0RDYWxjTWVt'@;
put 'In0sNDM1OntuOiJCcnRCZWdpblBDREhHTGV2ZWxzIn0sNDM2OntuOiJCcnRFbmRQQ0RIR0xldmVscyJ9LDQzNzp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVsIn0sNDM4OntuOiJCcnRFbmRQQ0RIR0xldmVsIn0sNDM5OntuOiJCcnRCZWdpblBDREhHTEdyb3VwcyJ9LDQ0MDp7bjoiQnJ0RW5kUENE'@;
put 'SEdMR3JvdXBzIn0sNDQxOntuOiJCcnRCZWdpblBDREhHTEdyb3VwIn0sNDQyOntuOiJCcnRFbmRQQ0RIR0xHcm91cCJ9LDQ0Mzp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVycyJ9LDQ0NDp7bjoiQnJ0RW5kUENESEdMR01lbWJlcnMifSw0NDU6e246IkJydEJlZ2luUENESEdMR01lbWJlciJ9'@;
put 'LDQ0Njp7bjoiQnJ0RW5kUENESEdMR01lbWJlciJ9LDQ0Nzp7bjoiQnJ0QmVnaW5RU0kifSw0NDg6e246IkJydEVuZFFTSSJ9LDQ0OTp7bjoiQnJ0QmVnaW5RU0lSIn0sNDUwOntuOiJCcnRFbmRRU0lSIn0sNDUxOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lcyJ9LDQ1Mjp7bjoiQnJ0RW5kRGVs'@;
put 'ZXRlZE5hbWVzIn0sNDUzOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lIn0sNDU0OntuOiJCcnRFbmREZWxldGVkTmFtZSJ9LDQ1NTp7bjoiQnJ0QmVnaW5RU0lGcyJ9LDQ1Njp7bjoiQnJ0RW5kUVNJRnMifSw0NTc6e246IkJydEJlZ2luUVNJRiJ9LDQ1ODp7bjoiQnJ0RW5kUVNJRiJ9LDQ1OTp7'@;
put 'bjoiQnJ0QmVnaW5BdXRvU29ydFNjb3BlIn0sNDYwOntuOiJCcnRFbmRBdXRvU29ydFNjb3BlIn0sNDYxOntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYzOntuOiJCcnRCZWdpbkNGUnVsZSJ9LDQ2NDp7'@;
put 'bjoiQnJ0RW5kQ0ZSdWxlIn0sNDY1OntuOiJCcnRCZWdpbkljb25TZXQifSw0NjY6e246IkJydEVuZEljb25TZXQifSw0Njc6e246IkJydEJlZ2luRGF0YWJhciJ9LDQ2ODp7bjoiQnJ0RW5kRGF0YWJhciJ9LDQ2OTp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlIn0sNDcwOntuOiJCcnRFbmRDb2xv'@;
put 'clNjYWxlIn0sNDcxOntuOiJCcnRDRlZPIn0sNDcyOntuOiJCcnRFeHRlcm5WYWx1ZU1ldGEifSw0NzM6e246IkJydEJlZ2luQ29sb3JQYWxldHRlIn0sNDc0OntuOiJCcnRFbmRDb2xvclBhbGV0dGUifSw0NzU6e246IkJydEluZGV4ZWRDb2xvciJ9LDQ3Njp7bjoiQnJ0TWFyZ2lucyIsZjpm'@;
put 'dW5jdGlvbiBKaihTKXt2YXIgTz17fTtyZXR1cm4gSkQuZm9yRWFjaChmdW5jdGlvbihrKXtPW2tdPVJsKFMpfSksT319LDQ3Nzp7bjoiQnJ0UHJpbnRPcHRpb25zIn0sNDc4OntuOiJCcnRQYWdlU2V0dXAifSw0Nzk6e246IkJydEJlZ2luSGVhZGVyRm9vdGVyIn0sNDgwOntuOiJCcnRFbmRI'@;
put 'ZWFkZXJGb290ZXIifSw0ODE6e246IkJydEJlZ2luU1hDcnRGb3JtYXQifSw0ODI6e246IkJydEVuZFNYQ3J0Rm9ybWF0In0sNDgzOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0cyJ9LDQ4NDp7bjoiQnJ0RW5kU1hDcnRGb3JtYXRzIn0sNDg1OntuOiJCcnRXc0ZtdEluZm8iLGY6ZnVuY3Rpb24g'@;
put 'WkQoUyl7dmFyIE89e30saz17fSxLPXt9LGVlPVMucmVhZF9zaGlmdCg0KSxvZT1TLnJlYWRfc2hpZnQoMik7Sy53Y2g9ZWU8PTY1NTM2P2VlLzI1NjpvZTt2YXIgbWU9Uy5yZWFkX3NoaWZ0KDIpO2suaHB0PW1lLzIwO3ZhciBwZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDImcGUmJihrLmhp'@;
put 'ZGRlbj0hMCksNCZwZSYmKE8udG9wdGhpY2s9ITApLDgmcGUmJihPLmJvdHRoaWNrPSEwKSxPLnJvd291dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLE8uY29sb3V0bGluZT1TLnJlYWRfc2hpZnQoMSksSHYoayksTy5yb3c9ayxKMChLKSxPLmNvbD1LLE99fSw0ODY6e246IkJydEJlZ2luTWdzIn0s'@;
put 'NDg3OntuOiJCcnRFbmRNR3MifSw0ODg6e246IkJydEJlZ2luTUdNYXBzIn0sNDg5OntuOiJCcnRFbmRNR01hcHMifSw0OTA6e246IkJydEJlZ2luTUcifSw0OTE6e246IkJydEVuZE1HIn0sNDkyOntuOiJCcnRCZWdpbk1hcCJ9LDQ5Mzp7bjoiQnJ0RW5kTWFwIn0sNDk0OntuOiJCcnRITGlu'@;
put 'ayIsZjpmdW5jdGlvbiBHaihTLE8pe3ZhciBrPVMubCtPLEs9aHUoUywxNiksZWU9UXUoUyksb2U9ZHUoUyksbWU9ZHUoUykscGU9ZHUoUyk7Uy5sPWs7dmFyIGJlPXtyZng6SyxyZWxJZDplZSxsb2M6b2UsZGlzcGxheTpwZX07cmV0dXJuIG1lJiYoYmUuVG9vbHRpcD1tZSksYmV9fSw0OTU6'@;
put 'e246IkJydEJlZ2luRENvbiJ9LDQ5Njp7bjoiQnJ0RW5kRENvbiJ9LDQ5Nzp7bjoiQnJ0QmVnaW5EUmVmcyJ9LDQ5ODp7bjoiQnJ0RW5kRFJlZnMifSw0OTk6e246IkJydERSZWYifSw1MDA6e246IkJydEJlZ2luU2Nlbk1hbiJ9LDUwMTp7bjoiQnJ0RW5kU2Nlbk1hbiJ9LDUwMjp7bjoiQnJ0'@;
put 'QmVnaW5TY3QifSw1MDM6e246IkJydEVuZFNjdCJ9LDUwNDp7bjoiQnJ0U2xjIn0sNTA1OntuOiJCcnRCZWdpbkRYRnMifSw1MDY6e246IkJydEVuZERYRnMifSw1MDc6e246IkJydERYRiJ9LDUwODp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlcyJ9LDUwOTp7bjoiQnJ0RW5kVGFibGVTdHlsZXMi'@;
put 'fSw1MTA6e246IkJydEJlZ2luVGFibGVTdHlsZSJ9LDUxMTp7bjoiQnJ0RW5kVGFibGVTdHlsZSJ9LDUxMjp7bjoiQnJ0VGFibGVTdHlsZUVsZW1lbnQifSw1MTM6e246IkJydFRhYmxlU3R5bGVDbGllbnQifSw1MTQ6e246IkJydEJlZ2luVm9sRGVwcyJ9LDUxNTp7bjoiQnJ0RW5kVm9sRGVw'@;
put 'cyJ9LDUxNjp7bjoiQnJ0QmVnaW5Wb2xUeXBlIn0sNTE3OntuOiJCcnRFbmRWb2xUeXBlIn0sNTE4OntuOiJCcnRCZWdpblZvbE1haW4ifSw1MTk6e246IkJydEVuZFZvbE1haW4ifSw1MjA6e246IkJydEJlZ2luVm9sVG9waWMifSw1MjE6e246IkJydEVuZFZvbFRvcGljIn0sNTIyOntuOiJC'@;
put 'cnRWb2xTdWJ0b3BpYyJ9LDUyMzp7bjoiQnJ0Vm9sUmVmIn0sNTI0OntuOiJCcnRWb2xOdW0ifSw1MjU6e246IkJydFZvbEVyciJ9LDUyNjp7bjoiQnJ0Vm9sU3RyIn0sNTI3OntuOiJCcnRWb2xCb29sIn0sNTI4OntuOiJCcnRCZWdpbkNhbGNDaGFpbiQifSw1Mjk6e246IkJydEVuZENhbGND'@;
put 'aGFpbiQifSw1MzA6e246IkJydEJlZ2luU29ydFN0YXRlIn0sNTMxOntuOiJCcnRFbmRTb3J0U3RhdGUifSw1MzI6e246IkJydEJlZ2luU29ydENvbmQifSw1MzM6e246IkJydEVuZFNvcnRDb25kIn0sNTM0OntuOiJCcnRCb29rUHJvdGVjdGlvbiJ9LDUzNTp7bjoiQnJ0U2hlZXRQcm90ZWN0'@;
put 'aW9uIn0sNTM2OntuOiJCcnRSYW5nZVByb3RlY3Rpb24ifSw1Mzc6e246IkJydFBob25ldGljSW5mbyJ9LDUzODp7bjoiQnJ0QmVnaW5FQ1R4dFdpeiJ9LDUzOTp7bjoiQnJ0RW5kRUNUeHRXaXoifSw1NDA6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QifSw1NDE6e246IkJydEVuZEVDVFdG'@;
put 'bGRJbmZvTHN0In0sNTQyOntuOiJCcnRCZWdpbkVDVHdGbGRJbmZvIn0sNTQ4OntuOiJCcnRGaWxlU2hhcmluZyJ9LDU0OTp7bjoiQnJ0T2xlU2l6ZSJ9LDU1MDp7bjoiQnJ0RHJhd2luZyIsZjpnNH0sNTUxOntuOiJCcnRMZWdhY3lEcmF3aW5nIn0sNTUyOntuOiJCcnRMZWdhY3lEcmF3aW5n'@;
put 'SEYifSw1NTM6e246IkJydFdlYk9wdCJ9LDU1NDp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtcyJ9LDU1NTp7bjoiQnJ0RW5kV2ViUHViSXRlbXMifSw1NTY6e246IkJydEJlZ2luV2ViUHViSXRlbSJ9LDU1Nzp7bjoiQnJ0RW5kV2ViUHViSXRlbSJ9LDU1ODp7bjoiQnJ0QmVnaW5TWENvbmRGbXQi'@;
put 'fSw1NTk6e246IkJydEVuZFNYQ29uZEZtdCJ9LDU2MDp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzIn0sNTYxOntuOiJCcnRFbmRTWENvbmRGbXRzIn0sNTYyOntuOiJCcnRCa0hpbSJ9LDU2NDp7bjoiQnJ0Q29sb3IifSw1NjU6e246IkJydEJlZ2luSW5kZXhlZENvbG9ycyJ9LDU2Njp7bjoiQnJ0'@;
put 'RW5kSW5kZXhlZENvbG9ycyJ9LDU2OTp7bjoiQnJ0QmVnaW5NUlVDb2xvcnMifSw1NzA6e246IkJydEVuZE1SVUNvbG9ycyJ9LDU3Mjp7bjoiQnJ0TVJVQ29sb3IifSw1NzM6e246IkJydEJlZ2luRFZhbHMifSw1NzQ6e246IkJydEVuZERWYWxzIn0sNTc3OntuOiJCcnRTdXBOYW1lU3RhcnQi'@;
put 'fSw1Nzg6e246IkJydFN1cE5hbWVWYWx1ZVN0YXJ0In0sNTc5OntuOiJCcnRTdXBOYW1lVmFsdWVFbmQifSw1ODA6e246IkJydFN1cE5hbWVOdW0ifSw1ODE6e246IkJydFN1cE5hbWVFcnIifSw1ODI6e246IkJydFN1cE5hbWVTdCJ9LDU4Mzp7bjoiQnJ0U3VwTmFtZU5pbCJ9LDU4NDp7bjoi'@;
put 'QnJ0U3VwTmFtZUJvb2wifSw1ODU6e246IkJydFN1cE5hbWVGbWxhIn0sNTg2OntuOiJCcnRTdXBOYW1lQml0cyJ9LDU4Nzp7bjoiQnJ0U3VwTmFtZUVuZCJ9LDU4ODp7bjoiQnJ0RW5kU3VwQm9vayJ9LDU4OTp7bjoiQnJ0Q2VsbFNtYXJ0VGFnUHJvcGVydHkifSw1OTA6e246IkJydEJlZ2lu'@;
put 'Q2VsbFNtYXJ0VGFnIn0sNTkxOntuOiJCcnRFbmRDZWxsU21hcnRUYWcifSw1OTI6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFncyJ9LDU5Mzp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFncyJ9LDU5NDp7bjoiQnJ0QmVnaW5TbWFydFRhZ3MifSw1OTU6e246IkJydEVuZFNtYXJ0VGFncyJ9LDU5Njp7'@;
put 'bjoiQnJ0U21hcnRUYWdUeXBlIn0sNTk3OntuOiJCcnRCZWdpblNtYXJ0VGFnVHlwZXMifSw1OTg6e246IkJydEVuZFNtYXJ0VGFnVHlwZXMifSw1OTk6e246IkJydEJlZ2luU1hGaWx0ZXJzIn0sNjAwOntuOiJCcnRFbmRTWEZpbHRlcnMifSw2MDE6e246IkJydEJlZ2luU1hGSUxURVIifSw2'@;
put 'MDI6e246IkJydEVuZFNYRmlsdGVyIn0sNjAzOntuOiJCcnRCZWdpbkZpbGxzIn0sNjA0OntuOiJCcnRFbmRGaWxscyJ9LDYwNTp7bjoiQnJ0QmVnaW5DZWxsV2F0Y2hlcyJ9LDYwNjp7bjoiQnJ0RW5kQ2VsbFdhdGNoZXMifSw2MDc6e246IkJydENlbGxXYXRjaCJ9LDYwODp7bjoiQnJ0QmVn'@;
put 'aW5DUkVycnMifSw2MDk6e246IkJydEVuZENSRXJycyJ9LDYxMDp7bjoiQnJ0Q3Jhc2hSZWNFcnIifSw2MTE6e246IkJydEJlZ2luRm9udHMifSw2MTI6e246IkJydEVuZEZvbnRzIn0sNjEzOntuOiJCcnRCZWdpbkJvcmRlcnMifSw2MTQ6e246IkJydEVuZEJvcmRlcnMifSw2MTU6e246IkJy'@;
put 'dEJlZ2luRm10cyJ9LDYxNjp7bjoiQnJ0RW5kRm10cyJ9LDYxNzp7bjoiQnJ0QmVnaW5DZWxsWEZzIn0sNjE4OntuOiJCcnRFbmRDZWxsWEZzIn0sNjE5OntuOiJCcnRCZWdpblN0eWxlcyJ9LDYyMDp7bjoiQnJ0RW5kU3R5bGVzIn0sNjI1OntuOiJCcnRCaWdOYW1lIn0sNjI2OntuOiJCcnRC'@;
put 'ZWdpbkNlbGxTdHlsZVhGcyJ9LDYyNzp7bjoiQnJ0RW5kQ2VsbFN0eWxlWEZzIn0sNjI4OntuOiJCcnRCZWdpbkNvbW1lbnRzIn0sNjI5OntuOiJCcnRFbmRDb21tZW50cyJ9LDYzMDp7bjoiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyJ9LDYzMTp7bjoiQnJ0RW5kQ29tbWVudEF1dGhvcnMifSw2'@;
put 'MzI6e246IkJydENvbW1lbnRBdXRob3IiLGY6eEJ9LDYzMzp7bjoiQnJ0QmVnaW5Db21tZW50TGlzdCJ9LDYzNDp7bjoiQnJ0RW5kQ29tbWVudExpc3QifSw2MzU6e246IkJydEJlZ2luQ29tbWVudCIsZjpmdW5jdGlvbiBMNShTKXt2YXIgTz17fTtPLmlhdXRob3I9Uy5yZWFkX3NoaWZ0KDQp'@;
put 'O3ZhciBrPWh1KFMsMTYpO3JldHVybiBPLnJmeD1rLnMsTy5yZWY9cWkoay5zKSxTLmwrPTE2LE99fSw2MzY6e246IkJydEVuZENvbW1lbnQifSw2Mzc6e246IkJydENvbW1lbnRUZXh0IixmOk53fSw2Mzg6e246IkJydEJlZ2luT2xlT2JqZWN0cyJ9LDYzOTp7bjoiQnJ0T2xlT2JqZWN0In0s'@;
put 'NjQwOntuOiJCcnRFbmRPbGVPYmplY3RzIn0sNjQxOntuOiJCcnRCZWdpblN4cnVsZXMifSw2NDI6e246IkJydEVuZFN4UnVsZXMifSw2NDM6e246IkJydEJlZ2luQWN0aXZlWENvbnRyb2xzIn0sNjQ0OntuOiJCcnRBY3RpdmVYIn0sNjQ1OntuOiJCcnRFbmRBY3RpdmVYQ29udHJvbHMifSw2'@;
put 'NDY6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzU29ydEJ5In0sNjQ4OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MifSw2NDk6e246IkJydENlbGxJZ25vcmVFQyJ9LDY1MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDcyJ9LDY1MTp7bjoiQnJ0Q3NQcm9wIixmOmZ1bmN0aW9uIGd6KFMsTyl7'@;
put 'cmV0dXJuIFMubCs9MTAse25hbWU6ZHUoUyl9fX0sNjUyOntuOiJCcnRDc1BhZ2VTZXR1cCJ9LDY1Mzp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3cyJ9LDY1NDp7bjoiQnJ0RW5kVXNlckNzVmlld3MifSw2NTU6e246IkJydEJlZ2luVXNlckNzVmlldyJ9LDY1Njp7bjoiQnJ0RW5kVXNlckNzVmll'@;
put 'dyJ9LDY1Nzp7bjoiQnJ0QmVnaW5QY2RTRkNJRW50cmllcyJ9LDY1ODp7bjoiQnJ0RW5kUENEU0ZDSUVudHJpZXMifSw2NTk6e246IkJydFBDRFNGQ0lFbnRyeSJ9LDY2MDp7bjoiQnJ0QmVnaW5MaXN0UGFydHMifSw2NjE6e246IkJydExpc3RQYXJ0In0sNjYyOntuOiJCcnRFbmRMaXN0UGFy'@;
put 'dHMifSw2NjM6e246IkJydFNoZWV0Q2FsY1Byb3AifSw2NjQ6e246IkJydEJlZ2luRm5Hcm91cCJ9LDY2NTp7bjoiQnJ0Rm5Hcm91cCJ9LDY2Njp7bjoiQnJ0RW5kRm5Hcm91cCJ9LDY2Nzp7bjoiQnJ0U3VwQWRkaW4ifSw2Njg6e246IkJydFNYVERNUE9yZGVyIn0sNjY5OntuOiJCcnRDc1By'@;
put 'b3RlY3Rpb24ifSw2NzE6e246IkJydEJlZ2luV3NTb3J0TWFwIn0sNjcyOntuOiJCcnRFbmRXc1NvcnRNYXAifSw2NzM6e246IkJydEJlZ2luUlJTb3J0In0sNjc0OntuOiJCcnRFbmRSUlNvcnQifSw2NzU6e246IkJydFJSU29ydEl0ZW0ifSw2NzY6e246IkJydEZpbGVTaGFyaW5nSXNvIn0s'@;
put 'Njc3OntuOiJCcnRCb29rUHJvdGVjdGlvbklzbyJ9LDY3ODp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uSXNvIn0sNjc5OntuOiJCcnRDc1Byb3RlY3Rpb25Jc28ifSw2ODA6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbyJ9LDY4MTp7bjoiQnJ0RFZhbExpc3QifSwxMDI0OntuOiJCcnRSd0Rlc2Nl'@;
put 'bnQifSwxMDI1OntuOiJCcnRLbm93bkZvbnRzIn0sMTAyNjp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0In0sMTAyNzp7bjoiQnJ0RW5kU1hUdXBsZVNldCJ9LDEwMjg6e246IkJydEJlZ2luU1hUdXBsZVNldEhlYWRlciJ9LDEwMjk6e246IkJydEVuZFNYVHVwbGVTZXRIZWFkZXIifSwxMDMwOntu'@;
put 'OiJCcnRTWFR1cGxlU2V0SGVhZGVySXRlbSJ9LDEwMzE6e246IkJydEJlZ2luU1hUdXBsZVNldERhdGEifSwxMDMyOntuOiJCcnRFbmRTWFR1cGxlU2V0RGF0YSJ9LDEwMzM6e246IkJydEJlZ2luU1hUdXBsZVNldFJvdyJ9LDEwMzQ6e246IkJydEVuZFNYVHVwbGVTZXRSb3cifSwxMDM1Ontu'@;
put 'OiJCcnRTWFR1cGxlU2V0Um93SXRlbSJ9LDEwMzY6e246IkJydE5hbWVFeHQifSwxMDM3OntuOiJCcnRQQ0RIMTQifSwxMDM4OntuOiJCcnRCZWdpblBDRENhbGNNZW0xNCJ9LDEwMzk6e246IkJydEVuZFBDRENhbGNNZW0xNCJ9LDEwNDA6e246IkJydFNYVEgxNCJ9LDEwNDE6e246IkJydEJl'@;
put 'Z2luU3BhcmtsaW5lR3JvdXAifSwxMDQyOntuOiJCcnRFbmRTcGFya2xpbmVHcm91cCJ9LDEwNDM6e246IkJydFNwYXJrbGluZSJ9LDEwNDQ6e246IkJydFNYREkxNCJ9LDEwNDU6e246IkJydFdzRm10SW5mb0V4MTQifSwxMDQ2OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZzE0'@;
put 'In0sMTA0Nzp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ4OntuOiJCcnRCZWdpbkNGUnVsZTE0In0sMTA0OTp7bjoiQnJ0RW5kQ0ZSdWxlMTQifSwxMDUwOntuOiJCcnRDRlZPMTQifSwxMDUxOntuOiJCcnRCZWdpbkRhdGFiYXIxNCJ9LDEwNTI6e246IkJydEJlZ2lu'@;
put 'SWNvblNldDE0In0sMTA1Mzp7bjoiQnJ0RFZhbDE0IixmOmZ1bmN0aW9uIEZTKFMsTyxrKXt2YXIgSz1mdW5jdGlvbiB1bihTLE8sayl7dmFyIEs9Uy5yZWFkX3NoaWZ0KDQpLGVlPXt9O3JldHVybiAxJksmJihlZS5yZWZzPWZ1bmN0aW9uIFFuKFMpe2Zvcih2YXIgTz1TLnJlYWRfc2hpZnQo'@;
put 'NCksaz1bXTtPLS0gPjA7KWsucHVzaChyaShTKSk7cmV0dXJuIGt9KFMpKSwyJksmJihlZS5zcXJlZnM9ZnVuY3Rpb24gUmEoUyl7Zm9yKHZhciBPPVMucmVhZF9zaGlmdCg0KSxrPVtdO08tLSA+MDspay5wdXNoKENzKFMpKTtyZXR1cm4ga30oUykpLDQmSyYmKGVlLmZvcm11bGFzPWZ1bmN0'@;
put 'aW9uIGhvKFMsTyxrKXtmb3IodmFyIEs9Uy5yZWFkX3NoaWZ0KDQpLGVlPVtdO0stLSA+MDspZWUucHVzaChQdShTLDAsaykpO3JldHVybiBlZX0oUywwLGspKSw4JksmJihlZS5yZWxJRD1mdW5jdGlvbiBpdihTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDA9PT1PPyIiOlMucmVh'@;
put 'ZF9zaGlmdChPLCJ1dGYxNmxlIil9KFMpKSxlZX0oUywwLGspLGVlPVMucmVhZF9zaGlmdCg0KSxvZT1RdShTKSxtZT1RdShTKSxwZT1RdShTKSxiZT1RdShTKSxQZT0oSy5mb3JtdWxhc3x8W10pWzBdLFZlPShLLmZvcm11bGFzfHxbXSlbMV0sWWU9MTUmZWUsZXQ9e3Q6UURbWWVdLHNxcmZ4'@;
put 'Oksuc3FyZWZzWzBdLHM6W29lLG1lLHBlLGJlXX07cmV0dXJuIFBlJiYoZXQuZjE9UGUpLFZlJiYoZXQuZjI9VmUpLDA9PVllfHwzPT1ZZXx8Nz09WWV8fChldC5vcD1QU1tlZT4+MjAmMTVdKSxldH19LDEwNTQ6e246IkJydEJlZ2luRFZhbHMxNCJ9LDEwNTU6e246IkJydENvbG9yMTQifSwx'@;
put 'MDU2OntuOiJCcnRCZWdpblNwYXJrbGluZXMifSwxMDU3OntuOiJCcnRFbmRTcGFya2xpbmVzIn0sMTA1ODp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cHMifSwxMDU5OntuOiJCcnRFbmRTcGFya2xpbmVHcm91cHMifSwxMDYxOntuOiJCcnRTWFZEMTQifSwxMDYyOntuOiJCcnRCZWdpblNY'@;
put 'VmlldzE0In0sMTA2Mzp7bjoiQnJ0RW5kU1hWaWV3MTQifSwxMDY0OntuOiJCcnRCZWdpblNYVmlldzE2In0sMTA2NTp7bjoiQnJ0RW5kU1hWaWV3MTYifSwxMDY2OntuOiJCcnRCZWdpblBDRDE0In0sMTA2Nzp7bjoiQnJ0RW5kUENEMTQifSwxMDY4OntuOiJCcnRCZWdpbkV4dENvbm4xNCJ9'@;
put 'LDEwNjk6e246IkJydEVuZEV4dENvbm4xNCJ9LDEwNzA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRHMifSwxMDcxOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEcyJ9LDEwNzI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRCJ9LDEwNzM6e246IkJydEVuZFNsaWNlckNhY2hlSUQifSwxMDc1Ontu'@;
put 'OiJCcnRCZWdpblNsaWNlckNhY2hlIn0sMTA3Njp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGUifSwxMDc3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlRGVmIn0sMTA3ODp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVEZWYifSwxMDc5OntuOiJCcnRCZWdpblNsaWNlcnNFeCJ9LDEwODA6e246IkJydEVuZFNs'@;
put 'aWNlcnNFeCJ9LDEwODE6e246IkJydEJlZ2luU2xpY2VyRXgifSwxMDgyOntuOiJCcnRFbmRTbGljZXJFeCJ9LDEwODM6e246IkJydEJlZ2luU2xpY2VyIn0sMTA4NDp7bjoiQnJ0RW5kU2xpY2VyIn0sMTA4NTp7bjoiQnJ0U2xpY2VyQ2FjaGVQaXZvdFRhYmxlcyJ9LDEwODY6e246IkJydEJl'@;
put 'Z2luU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODc6e246IkJydEVuZFNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg4OntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwODk6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwOTA6e246IkJydEJlZ2luU2xpY2Vy'@;
put 'Q2FjaGVMZXZlbERhdGEifSwxMDkxOntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTM6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDk0OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5n'@;
put 'ZSJ9LDEwOTU6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTY6e246IkJydFNsaWNlckNhY2hlT2xhcEl0ZW0ifSwxMDk3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDEwOTg6e246IkJydFNsaWNlckNhY2hlU2VsZWN0aW9uIn0sMTA5OTp7bjoiQnJ0RW5k'@;
put 'U2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTEwMDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDE6e246IkJydEVuZFNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMjp7bjoiQnJ0U2xpY2VyQ2FjaGVOYXRpdmVJdGVtIn0sMTEwMzp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uMTQifSwx'@;
put 'MTA0OntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28xNCJ9LDExMDU6e246IkJydENlbGxJZ25vcmVFQzE0In0sMTExMTp7bjoiQnJ0TGlzdDE0In0sMTExMjp7bjoiQnJ0Q0ZJY29uIn0sMTExMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNDp7bjoiQnJ0RW5k'@;
put 'U2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTU6e246IkJydEJlZ2luU2xpY2VycyJ9LDExMTY6e246IkJydEVuZFNsaWNlcnMifSwxMTE3OntuOiJCcnRXYlByb3AxNCJ9LDExMTg6e246IkJydEJlZ2luU1hFZGl0In0sMTExOTp7bjoiQnJ0RW5kU1hFZGl0In0sMTEyMDp7bjoiQnJ0'@;
put 'QmVnaW5TWEVkaXRzIn0sMTEyMTp7bjoiQnJ0RW5kU1hFZGl0cyJ9LDExMjI6e246IkJydEJlZ2luU1hDaGFuZ2UifSwxMTIzOntuOiJCcnRFbmRTWENoYW5nZSJ9LDExMjQ6e246IkJydEJlZ2luU1hDaGFuZ2VzIn0sMTEyNTp7bjoiQnJ0RW5kU1hDaGFuZ2VzIn0sMTEyNjp7bjoiQnJ0U1hU'@;
put 'dXBsZUl0ZW1zIn0sMTEyODp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZSJ9LDExMjk6e246IkJydEVuZFNsaWNlclN0eWxlIn0sMTEzMDp7bjoiQnJ0U2xpY2VyU3R5bGVFbGVtZW50In0sMTEzMTp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0RXh0MTQifSwxMTMyOntuOiJCcnRFbmRTdHlsZVNoZWV0'@;
put 'RXh0MTQifSwxMTMzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzU6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzY6e246IkJydEVuZENvbmRpdGlvbmFsRm9y'@;
put 'bWF0dGluZ3MifSwxMTM3OntuOiJCcnRCZWdpblBDRENhbGNNZW1FeHQifSwxMTM4OntuOiJCcnRFbmRQQ0RDYWxjTWVtRXh0In0sMTEzOTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtc0V4dCJ9LDExNDA6e246IkJydEVuZFBDRENhbGNNZW1zRXh0In0sMTE0MTp7bjoiQnJ0UENERmllbGQxNCJ9'@;
put 'LDExNDI6e246IkJydEJlZ2luU2xpY2VyU3R5bGVzIn0sMTE0Mzp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVzIn0sMTE0NDp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0NTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDY6e246IkJydENGUnVsZUV4dCJ9LDEx'@;
put 'NDc6e246IkJydEJlZ2luU1hDb25kRm10MTQifSwxMTQ4OntuOiJCcnRFbmRTWENvbmRGbXQxNCJ9LDExNDk6e246IkJydEJlZ2luU1hDb25kRm10czE0In0sMTE1MDp7bjoiQnJ0RW5kU1hDb25kRm10czE0In0sMTE1Mjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZDE0In0sMTE1Mzp7bjoiQnJ0RW5k'@;
put 'U29ydENvbmQxNCJ9LDExNTQ6e246IkJydEVuZERWYWxzMTQifSwxMTU1OntuOiJCcnRFbmRJY29uU2V0MTQifSwxMTU2OntuOiJCcnRFbmREYXRhYmFyMTQifSwxMTU3OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUxNCJ9LDExNTg6e246IkJydEVuZENvbG9yU2NhbGUxNCJ9LDExNTk6e246IkJy'@;
put 'dEJlZ2luU3hydWxlczE0In0sMTE2MDp7bjoiQnJ0RW5kU3hydWxlczE0In0sMTE2MTp7bjoiQnJ0QmVnaW5QUnVsZTE0In0sMTE2Mjp7bjoiQnJ0RW5kUFJ1bGUxNCJ9LDExNjM6e246IkJydEJlZ2luUFJGaWx0ZXJzMTQifSwxMTY0OntuOiJCcnRFbmRQUkZpbHRlcnMxNCJ9LDExNjU6e246'@;
put 'IkJydEJlZ2luUFJGaWx0ZXIxNCJ9LDExNjY6e246IkJydEVuZFBSRmlsdGVyMTQifSwxMTY3OntuOiJCcnRCZWdpblBSRkl0ZW0xNCJ9LDExNjg6e246IkJydEVuZFBSRkl0ZW0xNCJ9LDExNjk6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDczE0In0sMTE3MDp7bjoiQnJ0RW5kQ2VsbElnbm9y'@;
put 'ZUVDczE0In0sMTE3MTp7bjoiQnJ0RHhmMTQifSwxMTcyOntuOiJCcnRCZWdpbkR4RjE0cyJ9LDExNzM6e246IkJydEVuZER4ZjE0cyJ9LDExNzc6e246IkJydEZpbHRlcjE0In0sMTE3ODp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzMTQifSwxMTgwOntuOiJCcnRDdXN0b21GaWx0ZXIxNCJ9'@;
put 'LDExODE6e246IkJydEljb25GaWx0ZXIxNCJ9LDExODI6e246IkJydFBpdm90Q2FjaGVDb25uZWN0aW9uTmFtZSJ9LDIwNDg6e246IkJydEJlZ2luRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNDk6e246IkJydEVuZERlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDUwOntuOiJCcnREZWNv'@;
put 'dXBsZWRQaXZvdENhY2hlSUQifSwyMDUxOntuOiJCcnRCZWdpblBpdm90VGFibGVSZWZzIn0sMjA1Mjp7bjoiQnJ0RW5kUGl2b3RUYWJsZVJlZnMifSwyMDUzOntuOiJCcnRQaXZvdFRhYmxlUmVmIn0sMjA1NDp7bjoiQnJ0U2xpY2VyQ2FjaGVCb29rUGl2b3RUYWJsZXMifSwyMDU1OntuOiJC'@;
put 'cnRCZWdpblN4dmNlbGxzIn0sMjA1Njp7bjoiQnJ0RW5kU3h2Y2VsbHMifSwyMDU3OntuOiJCcnRCZWdpblN4Um93In0sMjA1ODp7bjoiQnJ0RW5kU3hSb3cifSwyMDYwOntuOiJCcnRQY2RDYWxjTWVtMTUifSwyMDY3OntuOiJCcnRRc2kxNSJ9LDIwNjg6e246IkJydEJlZ2luV2ViRXh0ZW5z'@;
put 'aW9ucyJ9LDIwNjk6e246IkJydEVuZFdlYkV4dGVuc2lvbnMifSwyMDcwOntuOiJCcnRXZWJFeHRlbnNpb24ifSwyMDcxOntuOiJCcnRBYnNQYXRoMTUifSwyMDcyOntuOiJCcnRCZWdpblBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3Mzp7bjoiQnJ0RW5kUGl2b3RUYWJsZVVJU2V0dGluZ3Mi'@;
put 'fSwyMDc1OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSURzIn0sMjA3Njp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEIn0sMjA3Nzp7bjoiQnJ0QmVnaW5UYWJsZVNsaWNlckNhY2hlIn0sMjA3ODp7bjoiQnJ0RW5kVGFibGVTbGljZXJDYWNoZSJ9LDIwNzk6e246IkJydFN4RmlsdGVyMTUifSwy'@;
put 'MDgwOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4MTp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgyOntuOiJCcnRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEIn0sMjA4Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSURzIn0s'@;
put 'MjA4NDp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEcyJ9LDIwODU6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEIn0sMjA4Njp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEIn0sMjA4Nzp7bjoiQnJ0QmVnaW5UaW1lbGluZXNFeCJ9LDIwODg6e246IkJydEVuZFRpbWVsaW5lc0V4In0sMjA4'@;
put 'OTp7bjoiQnJ0QmVnaW5UaW1lbGluZUV4In0sMjA5MDp7bjoiQnJ0RW5kVGltZWxpbmVFeCJ9LDIwOTE6e246IkJydFdvcmtCb29rUHIxNSJ9LDIwOTI6e246IkJydFBDREgxNSJ9LDIwOTM6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZSJ9LDIwOTQ6e246IkJydEVuZFRpbWVsaW5lU3R5bGUi'@;
put 'fSwyMDk1OntuOiJCcnRUaW1lbGluZVN0eWxlRWxlbWVudCJ9LDIwOTY6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk3OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTg6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXMifSwyMDk5OntuOiJC'@;
put 'cnRFbmRUaW1lbGluZVN0eWxlcyJ9LDIxMDA6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMjp7bjoiQnJ0RHhmMTUifSwyMTAzOntuOiJCcnRCZWdpbkR4ZnMxNSJ9LDIxMDQ6e246ImJydEVuZER4'@;
put 'ZnMxNSJ9LDIxMDU6e246IkJydFNsaWNlckNhY2hlSGlkZUl0ZW1zV2l0aE5vRGF0YSJ9LDIxMDY6e246IkJydEJlZ2luSXRlbVVuaXF1ZU5hbWVzIn0sMjEwNzp7bjoiQnJ0RW5kSXRlbVVuaXF1ZU5hbWVzIn0sMjEwODp7bjoiQnJ0SXRlbVVuaXF1ZU5hbWUifSwyMTA5OntuOiJCcnRCZWdp'@;
put 'bkV4dENvbm4xNSJ9LDIxMTA6e246IkJydEVuZEV4dENvbm4xNSJ9LDIxMTE6e246IkJydEJlZ2luT2xlZGJQcjE1In0sMjExMjp7bjoiQnJ0RW5kT2xlZGJQcjE1In0sMjExMzp7bjoiQnJ0QmVnaW5EYXRhRmVlZFByMTUifSwyMTE0OntuOiJCcnRFbmREYXRhRmVlZFByMTUifSwyMTE1Ontu'@;
put 'OiJCcnRUZXh0UHIxNSJ9LDIxMTY6e246IkJydFJhbmdlUHIxNSJ9LDIxMTc6e246IkJydERiQ29tbWFuZDE1In0sMjExODp7bjoiQnJ0QmVnaW5EYlRhYmxlczE1In0sMjExOTp7bjoiQnJ0RW5kRGJUYWJsZXMxNSJ9LDIxMjA6e246IkJydERiVGFibGUxNSJ9LDIxMjE6e246IkJydEJlZ2lu'@;
put 'RGF0YU1vZGVsIn0sMjEyMjp7bjoiQnJ0RW5kRGF0YU1vZGVsIn0sMjEyMzp7bjoiQnJ0QmVnaW5Nb2RlbFRhYmxlcyJ9LDIxMjQ6e246IkJydEVuZE1vZGVsVGFibGVzIn0sMjEyNTp7bjoiQnJ0TW9kZWxUYWJsZSJ9LDIxMjY6e246IkJydEJlZ2luTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEy'@;
put 'Nzp7bjoiQnJ0RW5kTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyODp7bjoiQnJ0TW9kZWxSZWxhdGlvbnNoaXAifSwyMTI5OntuOiJCcnRCZWdpbkVDVHh0V2l6MTUifSwyMTMwOntuOiJCcnRFbmRFQ1R4dFdpejE1In0sMjEzMTp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdDE1In0sMjEzMjp7'@;
put 'bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzM6e246IkJydEJlZ2luRUNUV0ZsZEluZm8xNSJ9LDIxMzQ6e246IkJydEZpZWxkTGlzdEFjdGl2ZUl0ZW0ifSwyMTM1OntuOiJCcnRQaXZvdENhY2hlSWRWZXJzaW9uIn0sMjEzNjp7bjoiQnJ0U1hESTE1In0sMjEzNzp7bjoiQnJ0QmVn'@;
put 'aW5Nb2RlbFRpbWVHcm91cGluZ3MifSwyMTM4OntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZ3MifSwyMTM5OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MDp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQxOntuOiJCcnRNb2RlbFRpbWVHcm91cGluZ0NhbGND'@;
put 'b2wifSwzMDcyOntuOiJCcnRVaWQifSwzMDczOntuOiJCcnRSZXZpc2lvblB0ciJ9LDUwOTU6e246IkJydEJlZ2luQ2FsY0ZlYXR1cmVzIn0sNTA5Njp7bjoiQnJ0RW5kQ2FsY0ZlYXR1cmVzIn0sNTA5Nzp7bjoiQnJ0Q2FsY0ZlYXR1cmUifSw2NTUzNTp7bjoiIn19LGp6PUllKEw4LCJuIik7'@;
put 'anouQnJ0RlJUQXJjaElEJD0xNjt2YXIgZU09ezY6e246IkZvcm11bGEiLGY6aVN9LDEwOntuOiJFT0YiLGY6czJ9LDEyOntuOiJDYWxjQ291bnQiLGY6TWN9LDEzOntuOiJDYWxjTW9kZSIsZjpNY30sMTQ6e246IkNhbGNQcmVjaXNpb24iLGY6Y3N9LDE1OntuOiJDYWxjUmVmTW9kZSIsZjpj'@;
put 'c30sMTY6e246IkNhbGNEZWx0YSIsZjpSbH0sMTc6e246IkNhbGNJdGVyIixmOmNzfSwxODp7bjoiUHJvdGVjdCIsZjpjc30sMTk6e246IlBhc3N3b3JkIixmOk1jfSwyMDp7bjoiSGVhZGVyIixmOnRrfSwyMTp7bjoiRm9vdGVyIixmOnRrfSwyMzp7bjoiRXh0ZXJuU2hlZXQiLGY6U3Z9LDI0'@;
put 'OntuOiJMYmwiLGY6c0N9LDI1OntuOiJXaW5Qcm90ZWN0IixmOmNzfSwyNjp7bjoiVmVydGljYWxQYWdlQnJlYWtzIn0sMjc6e246Ikhvcml6b250YWxQYWdlQnJlYWtzIn0sMjg6e246Ik5vdGUiLGY6ZnVuY3Rpb24gbmsoUyxPLGspe3JldHVybiBmdW5jdGlvbiB3cyhTLE8sayl7aWYoIShr'@;
put 'LmJpZmY8OCkpe3ZhciBLPVMucmVhZF9zaGlmdCgyKSxlZT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpLG1lPVMucmVhZF9zaGlmdCgyKSxwZT1YMChTLDAsayk7cmV0dXJuIGsuYmlmZjw4JiZTLnJlYWRfc2hpZnQoMSksW3tyOkssYzplZX0scGUsbWUsb2VdfX0oUywwLGsp'@;
put 'fX0sMjk6e246IlNlbGVjdGlvbiIsZjpmdW5jdGlvbiBSZihTLE8sayl7cmV0dXJuIGsmJmsuYmlmZjw1PyhTLmwrPU8se2NlbGw6e3I6MCxjOjB9fSk6KFMucmVhZF9zaGlmdCgxKSx7Y2VsbDpxaSh7cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMil9KX0pfX0sMzQ6e246IkRh'@;
put 'dGUxOTA0IixmOmNzfSwzNTp7bjoiRXh0ZXJuTmFtZSIsZjphQ30sMzg6e246IkxlZnRNYXJnaW4iLGY6Umx9LDM5OntuOiJSaWdodE1hcmdpbiIsZjpSbH0sNDA6e246IlRvcE1hcmdpbiIsZjpSbH0sNDE6e246IkJvdHRvbU1hcmdpbiIsZjpSbH0sNDI6e246IlByaW50Um93Q29sIixmOmNz'@;
put 'fSw0Mzp7bjoiUHJpbnRHcmlkIixmOmNzfSw0Nzp7bjoiRmlsZVBhc3MiLGY6ZnVuY3Rpb24gX0MoUyxPLGspe2lmKGsuZW5jKXJldHVybiBrLmVuYzt2YXIgSz17VHlwZTprLmJpZmY+PTg/Uy5yZWFkX3NoaWZ0KDIpOjB9O3JldHVybiBLLlR5cGU/ZnVuY3Rpb24gT3YoUyxPLGssSyl7dmFy'@;
put 'IGVlPUt8fHt9O2lmKGVlLkluZm89Uy5yZWFkX3NoaWZ0KDIpLFMubC09MiwxPT09ZWUuSW5mbyl7aWYoZWUuRGF0YT1mdW5jdGlvbiBkbmUoUyl7dmFyIE89e30saz1PLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1GMShTLDQpO2lmKDEhPWsuTWFqb3J8fDEhPWsuTWlub3IpdGhyb3cidW5yZWNv'@;
put 'Z25pemVkIHZlcnNpb24gY29kZSAiK2suTWFqb3IrIiA6ICIray5NaW5vcjtyZXR1cm4gTy5TYWx0PVMucmVhZF9zaGlmdCgxNiksTy5FbmNyeXB0ZWRWZXJpZmllcj1TLnJlYWRfc2hpZnQoMTYpLE8uRW5jcnlwdGVkVmVyaWZpZXJIYXNoPVMucmVhZF9zaGlmdCgxNiksT30oUyksay5wYXNz'@;
put 'd29yZCYmdHlwZW9mIEc0PCJ1Iil7dmFyIG9lPUc0KGsucGFzc3dvcmQsZWUuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLG1lPVNlKGVlLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrZWUuRGF0YS5FbmNyeXB0ZWRWZXJpZmllckhhc2gsImhleCIpLHBlPUtsLnJjNChTZShvZSwiaGV4IikudG9TdHJp'@;
put 'bmcoImJpbmFyeSIpLG1lKTtLLnZhbGlkPUtsLm1kNShwZS5zbGljZSgwLDE2KSk9PUJ1ZmZlci5mcm9tKHBlLnNsaWNlKDE2KSkudG9TdHJpbmcoImhleCIpLGVlLkRhdGEuS2V5PW9lLEsuaW5zaXR1PWZ1bmN0aW9uIGVVKFMsTyl7dmFyIGs9bmV3IEFycmF5KDI1NiksSz0wLGVlPTAsb2U9'@;
put 'MCxtZT0wO2Z1bmN0aW9uIHBlKGV0KXtmb3IoSz0wLGVlPTAsb2U9MCxtZT0wLGVlPTA7MjU2IT1lZTsrK2VlKWtbZWVdPWVlO2ZvcihvZT0wLGVlPTA7MjU2IT1lZTsrK2VlKXt0cnl7b2U9b2Ura1tlZV0rZXRbZWUlZXQubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NX1jYXRjaChjdCl7dGhy'@;
put 'b3cgY29uc29sZS5sb2coZWUsZXRbZWUlZXQubGVuZ3RoXSksY3R9bWU9a1tlZV0sa1tlZV09a1tvZV0sa1tvZV09bWV9ZWU9b2U9MH1mdW5jdGlvbiBiZShldCl7dmFyIGN0PXooZXQubGVuZ3RoKTtmb3IoSz0wO0shPWV0Lmxlbmd0aDsrK0spbWU9a1tlZT1lZSsxJjI1NV0sa1tlZV09a1tv'@;
put 'ZT0ob2Ura1tlZV0pJTI1Nl0sa1tvZV09bWUsY3RbS109ZXRbS11ea1trW2VlXStrW29lXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShjdCl9dmFyIFBlPVMuS2V5LFZlPTA7cGUoU2UoUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIFllPTA7cmV0dXJuIGZ1bmN0aW9uKGV0KXtp'@;
put 'ZihZZStldC5sZW5ndGg8MTAyNClyZXR1cm4gWWUrPWV0Lmxlbmd0aCxiZShldCk7dmFyIGl0PTAsYnQ9U2UoZXQuc2xpY2UoaXQsaXQrKFR0PTEwMjQtWWUpKSk7aXQrPVR0LFllPTA7dmFyIEJ0PWJlKGJ0KTtmb3IoaXQ9PWV0Lmxlbmd0aCYmKCsrVmUsUGU9RzQoTyxTLlNhbHQsRjgoVmUp'@;
put 'KSxwZShTZShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7aXQ8ZXQubGVuZ3RoOyl7KytWZSxQZT1HNChPLFMuU2FsdCxGOChWZSkpLHBlKEJ1ZmZlci5mcm9tKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBUdD1NYXRoLm1pbigxMDI0LGV0Lmxlbmd0aC1pdCk7YnQ9'@;
put 'U2UoZXQuc2xpY2UoaXQsaXQrVHQpKSxpdCs9VHQsWWU9VHQsQnQ9QnVmZmVyLmNvbmNhdChbQnQsYmUoYnQpXSl9cmV0dXJuIEJ0fX0oZWUuRGF0YSxrLnBhc3N3b3JkKX19ZWxzZSBpZihlZS5EYXRhPWZ1bmN0aW9uIFJ2KFMsTyl7dmFyIGs9e30sSz1rLkVuY3J5cHRpb25WZXJzaW9uSW5m'@;
put 'bz1GMShTLDQpO2lmKE8tPTQsMiE9Sy5NaW5vcil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtaW5vciB2ZXJzaW9uIGNvZGU6ICIrSy5NaW5vcik7aWYoSy5NYWpvcj40fHxLLk1ham9yPDIpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWFqb3IgdmVyc2lvbiBjb2RlOiAi'@;
put 'K0suTWFqb3IpO2suRmxhZ3M9Uy5yZWFkX3NoaWZ0KDQpLE8tPTQ7dmFyIGVlPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gTy09NCxrLkVuY3J5cHRpb25IZWFkZXI9UFYoUyxlZSksay5FbmNyeXB0aW9uVmVyaWZpZXI9SXYoUyxPLT1lZSksa30oUyxPKSxlZS5EYXRhJiZlZS5EYXRhLkVuY3J5'@;
put 'cHRpb25IZWFkZXImJjI2NjI1PT09ZWUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLkFsZ0lEJiZrLnBhc3N3b3JkJiZ0eXBlb2YgJDQ8InUiKXt2YXIgYmU9JDQoay5wYXNzd29yZCxlZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxQZT1l'@;
put 'ZS5EYXRhLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7NT09UGV8fFBlPGJlLmxlbmd0aCYmKGJlPWJlLnNsaWNlKDAsUGUpKTt2YXIgVmU9U2UoZWUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXIudG9TdHJpbmcoImhleCIpK2VlLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVy'@;
put 'LlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhleCIpLFllPUtsLnJjNChiZS50b1N0cmluZygiYmluYXJ5IiksVmUpO0sudmFsaWQ9cGMoWWUuc2xpY2UoMCxQZSksIlNIQTEiKS50b1N0cmluZygiaGV4Iik9PVllLnNsaWNlKFBlKS50b1N0cmluZygiaGV4IiksZWUuRGF0YS5LZXk9'@;
put 'YmUsSy52YWxpZCYmKEsuaW5zaXR1PWZ1bmN0aW9uIGRyZShTLE8pe3ZhciBrPW5ldyBBcnJheSgyNTYpLEs9MCxlZT0wLG9lPTAsbWU9MCxwZT1TLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24gYmUoY3Qpe2ZvcihjdD1CdWZmZXIuZnJvbShjdC5zbGljZSgwLHBlKSks'@;
put 'Sz0wLGVlPTAsb2U9MCxtZT0wLGVlPTA7MjU2IT1lZTsrK2VlKWtbZWVdPWVlO2ZvcihvZT0wLGVlPTA7MjU2IT1lZTsrK2VlKXt2YXIgVHQ9Y3RbZWUlY3QubGVuZ3RoXTtvZT1vZStrW2VlXSsoInN0cmluZyI9PXR5cGVvZiBUdD9UdC5jaGFyQ29kZUF0KDApOlR0KSYyNTUsbWU9a1tlZV0s'@;
put 'a1tlZV09a1tvZV0sa1tvZV09bWV9ZWU9b2U9MH1mdW5jdGlvbiBQZShjdCl7dmFyIFR0PXooY3QubGVuZ3RoKTtmb3IoSz0wO0shPWN0Lmxlbmd0aDsrK0spbWU9a1tlZT1lZSsxJjI1NV0sa1tlZV09a1tvZT0ob2Ura1tlZV0pJTI1Nl0sa1tvZV09bWUsVHRbS109Y3RbS11ea1trW2VlXStr'@;
put 'W29lXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShUdCl9dmFyIFZlPVMuS2V5LFllPTA7YmUoU2UoVmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIGV0PTA7cmV0dXJuIGZ1bmN0aW9uKGN0KXtpZihldCtjdC5sZW5ndGg8MTAyNClyZXR1cm4gZXQrPWN0Lmxlbmd0aCxQZShjdCk7'@;
put 'dmFyIGl0PTEwMjQtZXQsYnQ9MCxCdD1CdWZmZXIuZnJvbShjdC5zbGljZShidCxidCtpdCkpO2J0Kz1pdCxldD0wO3ZhciBEdD1QZShCdCk7Zm9yKGJ0PT1jdC5sZW5ndGgmJigrK1llLFZlPSQ0KE8sUy5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxGOChZZSkpLGJlKEJ1ZmZlci5mcm9tKFZl'@;
put 'LCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtidDxjdC5sZW5ndGg7KSsrWWUsVmU9JDQoTyxTLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LEY4KFllKSksYmUoQnVmZmVyLmZyb20oVmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksaXQ9TWF0aC5taW4oMTAyNCxjdC5sZW5ndGgtYnQp'@;
put 'LEJ0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKGJ0LGJ0K2l0KSksYnQrPWl0LGl0PDEwMjQmJihldD1pdCksRHQ9QnVmZmVyLmNvbmNhdChbRHQsUGUoQnQpXSk7cmV0dXJuIER0fX0oZWUuRGF0YSxrLnBhc3N3b3JkKSl9cmV0dXJuIGVlfShTLE8tMixrLEspOmZ1bmN0aW9uIE5WKFMsTyxrLEsp'@;
put 'e3ZhciBlZT17a2V5Ok1jKFMpLHZlcmlmaWNhdGlvbkJ5dGVzOk1jKFMpfTtrLnBhc3N3b3JkJiYoZWUudmVyaWZpZXI9THYoay5wYXNzd29yZCkpLEsudmFsaWQ9ZWUudmVyaWZpY2F0aW9uQnl0ZXM9PT1lZS52ZXJpZmllcixLLnZhbGlkJiYoSy5pbnNpdHU9ZnVuY3Rpb24oUyxPKXt2YXIg'@;
put 'az1PfHwwLEs9YkMoUyk7cmV0dXJuIGZ1bmN0aW9uKGVlKXt2YXIgb2U9ZnVuY3Rpb24oUyxPLGssSyxlZSl7dmFyIG9lLG1lO2ZvcihlZXx8KGVlPU8pLEt8fChLPWJDKCIiKSksb2U9MDtvZSE9Ty5sZW5ndGg7KytvZSltZT0yNTUmKChtZT1PW29lXSk+PjV8bWU8PDMpLGVlW29lXT1tZV49'@;
put 'S1trXSxrPWsrMSYxNTtyZXR1cm5bZWUsayxLXX0oMCxlZSxrLEspO3JldHVybiBrPW9lWzFdLG9lWzBdfX0oay5wYXNzd29yZCwwKSl9KFMsMCxrLEspLEt9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBYQShTLE8sayl7dmFyIEs9e3N6OlMucmVhZF9zaGlmdCgyKS8yMH0sZWU9VncoUyk7'@;
put 'ZWUuZkJvbGQmJihLLmJvbGQ9MSksZWUuZkl0YWxpYyYmKEsuaXRhbGljPTEpLGVlLmZVbmRlcmxpbmUmJihLLnVuZGVybGluZT0xKSxlZS5mQ29uZGVuc2UmJihLLmNvbmRlbnNlPTEpLGVlLmZFeHRlbmQmJihLLmV4dGVuZD0xKSxlZS5mU2hhZG93JiYoSy5zaGFkb3c9MSksZWUuZk91dGxp'@;
put 'bmUmJihLLm91dGxpbmU9MSksZWUuZlN0cmlrZW91dCYmKEsuc3RyaWtlPTEpO3ZhciBvZT1rJiZrLmJpZmZ8fDg7aWYoMiE9b2UmJihLLmljdj1TLnJlYWRfc2hpZnQoMiksMyE9b2UmJjQhPW9lKSl7c3dpdGNoKDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEsuYm9sZD0xKSxTLnJlYWRfc2hp'@;
put 'ZnQoMikpe2Nhc2UgMTpLLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpLLnZhbGlnbj0ic3ViIn12YXIgcGU9Uy5yZWFkX3NoaWZ0KDEpOzAhPXBlJiYoSy51bmRlcmxpbmU9cGUpO3ZhciBiZT1TLnJlYWRfc2hpZnQoMSk7YmU+MCYmKEsuZmFtaWx5PWJlKTt2YXIgUGU9Uy5yZWFkX3No'@;
put 'aWZ0KDEpO1BlPjAmJihLLmNoYXJzZXQ9UGUpLFMubCs9MX1yZXR1cm4gSy5uYW1lPVdhKFMsMCxrKSxLfX0sNTE6e246IlByaW50U2l6ZSIsZjpNY30sNjA6e246IkNvbnRpbnVlIn0sNjE6e246IldpbmRvdzEiLGY6ZnVuY3Rpb24gaW5lKFMpe3JldHVybntQb3M6W1MucmVhZF9zaGlmdCgy'@;
put 'KSxTLnJlYWRfc2hpZnQoMildLERpbTpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRmxhZ3M6Uy5yZWFkX3NoaWZ0KDIpLEN1clRhYjpTLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6Uy5yZWFkX3NoaWZ0KDIpLFNlbGVjdGVkOlMucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzpTLnJl'@;
put 'YWRfc2hpZnQoMil9fX0sNjQ6e246IkJhY2t1cCIsZjpjc30sNjU6e246IlBhbmUiLGY6ZnVuY3Rpb24gS0EoUyxPLGspe2lmKGsmJmsuYmlmZjw1KXJldHVybnt9O3ZhciBLPXt9O3JldHVybiBLLng9Uy5yZWFkX3NoaWZ0KDIpLEsueT1TLnJlYWRfc2hpZnQoMiksSy5yd1RvcD1TLnJlYWRf'@;
put 'c2hpZnQoMiksSy5jb2xMZWZ0PVMucmVhZF9zaGlmdCgyKSxLLnBubkFjY3Q9Uy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxLfX0sNjY6e246IkNvZGVQYWdlIixmOk1jfSw3Nzp7bjoiUGxzIixmOlJufSw4MDp7bjoiRENvbiJ9LDgxOntuOiJEQ29uUmVmIn0sODI6e246IkRDb25O'@;
put 'YW1lIn0sODU6e246IkRlZkNvbFdpZHRoIixmOk1jfSw4OTp7bjoiWENUIn0sOTA6e246IkNSTiJ9LDkxOntuOiJGaWxlU2hhcmluZyJ9LDkyOntuOiJXcml0ZUFjY2VzcyIsZjpmdW5jdGlvbiBlQyhTLE8sayl7aWYoay5lbmMpcmV0dXJuIFMubCs9TywiIjt2YXIgSz1TLmwsZWU9WDAoUyww'@;
put 'LGspO3JldHVybiBTLnJlYWRfc2hpZnQoTytLLVMubCksZWV9fSw5Mzp7bjoiT2JqIixmOmZ1bmN0aW9uIGdWKFMsTyxrKXtpZihrJiZrLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gaWsoUyxPLGspe1MubCs9NDt2YXIgSz1TLnJlYWRfc2hpZnQoMiksZWU9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMu'@;
put 'cmVhZF9zaGlmdCgyKTtTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTY7dmFyIG1lPVtdO3JldHVybiBtZS5wdXNoKChya1tLXXx8Um4pKFMsTy09MzYsaykpLHtjbW86W2VlLEssb2VdLGZ0Om1lfX0oUyxPLGspO3Zh'@;
put 'ciBLPWc1KFMpLGVlPWZ1bmN0aW9uIHEwKFMsTyxrKXtmb3IodmFyIEs9Uy5sK08sZWU9W107Uy5sPEs7KXt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDIpO1MubC09Mjt0cnl7ZWVbb2VdPUlmW29lXShTLEstUy5sKX1jYXRjaHtyZXR1cm4gUy5sPUssZWV9fXJldHVybiBTLmwhPUsmJihTLmw9Syks'@;
put 'ZWV9KFMsTy0yMik7cmV0dXJue2NtbzpLLGZ0OmVlfX19LDk0OntuOiJVbmNhbGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjpjc30sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjpjc30sMTI1OntuOiJDb2xJbmZvIixmOmxDfSwxMjg6'@;
put 'e246Ikd1dHMiLGY6ZnVuY3Rpb24gZFYoUyl7Uy5sKz00O3ZhciBPPVtTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXTtpZigwIT09T1swXSYmT1swXS0tLDAhPT1PWzFdJiZPWzFdLS0sT1swXT43fHxPWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitPLmpvaW4o'@;
put 'InwiKSk7cmV0dXJuIE99fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBDdihTLE8sayl7dmFyIEs9ayYmOD09ay5iaWZmfHwyPT1PP1MucmVhZF9zaGlmdCgyKTooUy5sKz1PLDApO3JldHVybntmRGlhbG9nOjE2JkssZkJlbG93OjY0JkssZlJpZ2h0OjEyOCZLfX19LDEzMDp7bjoiR3Jp'@;
put 'ZFNldCIsZjpNY30sMTMxOntuOiJIQ2VudGVyIixmOmNzfSwxMzI6e246IlZDZW50ZXIiLGY6Y3N9LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24gWjYoUyxPLGspe3ZhciBLPVMucmVhZF9zaGlmdCg0KSxlZT0zJlMucmVhZF9zaGlmdCgxKSxvZT1TLnJlYWRfc2hpZnQoMSk7c3dp'@;
put 'dGNoKG9lKXtjYXNlIDA6b2U9IldvcmtzaGVldCI7YnJlYWs7Y2FzZSAxOm9lPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6b2U9IkNoYXJ0c2hlZXQiO2JyZWFrO2Nhc2UgNjpvZT0iVkJBTW9kdWxlIn12YXIgbWU9V2EoUywwLGspO3JldHVybiAwPT09bWUubGVuZ3RoJiYobWU9IlNoZWV0'@;
put 'MSIpLHtwb3M6SyxoczplZSxkdDpvZSxuYW1lOm1lfX19LDEzNDp7bjoiV3JpdGVQcm90ZWN0In0sMTQwOntuOiJDb3VudHJ5IixmOmZ1bmN0aW9uIF9WKFMpe3ZhciBrLE89WzAsMF07cmV0dXJuIGs9Uy5yZWFkX3NoaWZ0KDIpLE9bMF09RDZba118fGssaz1TLnJlYWRfc2hpZnQoMiksT1sx'@;
put 'XT1ENltrXXx8ayxPfX0sMTQxOntuOiJIaWRlT2JqIixmOk1jfSwxNDQ6e246IlNvcnQifSwxNDY6e246IlBhbGV0dGUiLGY6ZnVuY3Rpb24gd3QoUyl7Zm9yKHZhciBPPVMucmVhZF9zaGlmdCgyKSxrPVtdO08tLSA+MDspay5wdXNoKGhkKFMpKTtyZXR1cm4ga319LDE1MTp7bjoiU3luYyJ9'@;
put 'LDE1Mjp7bjoiTFByIn0sMTUzOntuOiJEeEdDb2wifSwxNTQ6e246IkZuR3JvdXBOYW1lIn0sMTU1OntuOiJGaWx0ZXJNb2RlIn0sMTU2OntuOiJCdWlsdEluRm5Hcm91cENvdW50IixmOk1jfSwxNTc6e246IkF1dG9GaWx0ZXJJbmZvIn0sMTU4OntuOiJBdXRvRmlsdGVyIn0sMTYwOntuOiJT'@;
put 'Y2wiLGY6YWt9LDE2MTp7bjoiU2V0dXAiLGY6ZnVuY3Rpb24gcDIoUyxPKXt2YXIgaz17fTtyZXR1cm4gTzwzMnx8KFMubCs9MTYsay5oZWFkZXI9UmwoUyksay5mb290ZXI9UmwoUyksUy5sKz0yKSxrfX0sMTc0OntuOiJTY2VuTWFuIn0sMTc1OntuOiJTQ0VOQVJJTyJ9LDE3Njp7bjoiU3hW'@;
put 'aWV3In0sMTc3OntuOiJTeHZkIn0sMTc4OntuOiJTWFZJIn0sMTgwOntuOiJTeEl2ZCJ9LDE4MTp7bjoiU1hMSSJ9LDE4Mjp7bjoiU1hQSSJ9LDE4NDp7bjoiRG9jUm91dGUifSwxODU6e246IlJlY2lwTmFtZSJ9LDE4OTp7bjoiTXVsUmsiLGY6ZnVuY3Rpb24gdVYoUyxPKXtmb3IodmFyIGs9'@;
put 'Uy5sK08tMixLPVMucmVhZF9zaGlmdCgyKSxlZT1TLnJlYWRfc2hpZnQoMiksb2U9W107Uy5sPGs7KW9lLnB1c2goX3MoUykpO2lmKFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxSSyByZWFkIGVycm9yIik7dmFyIG1lPVMucmVhZF9zaGlmdCgyKTtpZihvZS5sZW5ndGghPW1lLWVlKzEp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpLLGM6ZWUsQzptZSxya3JlYzpvZX19fSwxOTA6e246Ik11bEJsYW5rIixmOmZ1bmN0aW9uIG9uZShTLE8pe2Zvcih2YXIgaz1TLmwrTy0yLEs9Uy5yZWFkX3NoaWZ0KDIpLGVlPVMucmVhZF9zaGlmdCgy'@;
put 'KSxvZT1bXTtTLmw8azspb2UucHVzaChTLnJlYWRfc2hpZnQoMikpO2lmKFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayByZWFkIGVycm9yIik7dmFyIG1lPVMucmVhZF9zaGlmdCgyKTtpZihvZS5sZW5ndGghPW1lLWVlKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5n'@;
put 'dGggbWlzbWF0Y2giKTtyZXR1cm57cjpLLGM6ZWUsQzptZSxpeGZlOm9lfX19LDE5Mzp7bjoiTW1zIixmOnMyfSwxOTc6e246IlNYREkifSwxOTg6e246IlNYREIifSwxOTk6e246IlNYRkRCIn0sMjAwOntuOiJTWERCQiJ9LDIwMTp7bjoiU1hOdW0ifSwyMDI6e246IlN4Qm9vbCIsZjpjc30s'@;
put 'MjAzOntuOiJTeEVyciJ9LDIwNDp7bjoiU1hJbnQifSwyMDU6e246IlNYU3RyaW5nIn0sMjA2OntuOiJTWER0ciJ9LDIwNzp7bjoiU3hOaWwifSwyMDg6e246IlNYVGJsIn0sMjA5OntuOiJTWFRCUkdJSVRNIn0sMjEwOntuOiJTeFRicGcifSwyMTE6e246Ik9iUHJvaiJ9LDIxMzp7bjoiU1hT'@;
put 'dHJlYW1JRCJ9LDIxNTp7bjoiREJDZWxsIn0sMjE2OntuOiJTWFJuZyJ9LDIxNzp7bjoiU3hJc3hvcGVyIn0sMjE4OntuOiJCb29rQm9vbCIsZjpNY30sMjIwOntuOiJEYk9yUGFyYW1RcnkifSwyMjE6e246IlNjZW5hcmlvUHJvdGVjdCIsZjpjc30sMjIyOntuOiJPbGVPYmplY3RTaXplIn0s'@;
put 'MjI0OntuOiJYRiIsZjpmdW5jdGlvbiByQyhTLE8sayl7dmFyIEs9e307cmV0dXJuIEsuaWZudD1TLnJlYWRfc2hpZnQoMiksSy5udW1GbXRJZD1TLnJlYWRfc2hpZnQoMiksSy5mbGFncz1TLnJlYWRfc2hpZnQoMiksSy5mU3R5bGU9Sy5mbGFncz4+MiYxLEsuZGF0YT1mdW5jdGlvbiBfbChT'@;
put 'LE8sayxLKXt2YXIgZWU9e30sb2U9Uy5yZWFkX3NoaWZ0KDQpLG1lPVMucmVhZF9zaGlmdCg0KSxwZT1TLnJlYWRfc2hpZnQoNCksYmU9Uy5yZWFkX3NoaWZ0KDIpO2lmKGVlLnBhdHRlcm5UeXBlPWx2W3BlPj4yNl0sIUsuY2VsbFN0eWxlcylyZXR1cm4gZWU7dmFyIFBlPTcmb2U7c3dpdGNo'@;
put 'KFBlKXtjYXNlIDE6ZWUuaGFsaWduPSJsZWZ0IjticmVhaztjYXNlIDI6ZWUuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMzplZS5oYWxpZ249InJpZ2h0In1zd2l0Y2goZWUuZldyYXA9b2U+PjMmMSxQZT1vZT4+NCY3KXtjYXNlIDA6ZWUudmFsaWduPSJ0b3AiO2JyZWFrO2Nhc2UgMTpl'@;
put 'ZS52YWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAyOmVlLnZhbGlnbj0iYm90dG9tIn1yZXR1cm4gZWUuZkp1c3RMYXN0PW9lPj43JjEsZWUudHJvdD1vZT4+OCYyNTUsZWUuY0luZGVudD1vZT4+MTYmMTUsZWUuZlNocmlua1RvRml0PW9lPj4yMCYxLGVlLmlSZWFkT3JkZXI9b2U+PjIyJjIs'@;
put 'ZWUuZkF0ck51bT1vZT4+MjYmMSxlZS5mQXRyRm50PW9lPj4yNyYxLGVlLmZBdHJBbGM9b2U+PjI4JjEsZWUuZkF0ckJkcj1vZT4+MjkmMSxlZS5mQXRyUGF0PW9lPj4zMCYxLGVlLmZBdHJQcm90PW9lPj4zMSYxLGVlLmRnTGVmdD0xNSZtZSxlZS5kZ1JpZ2h0PW1lPj40JjE1LGVlLmRnVG9w'@;
put 'PW1lPj44JjE1LGVlLmRnQm90dG9tPW1lPj4xMiYxNSxlZS5pY3ZMZWZ0PW1lPj4xNiYxMjcsZWUuaWN2UmlnaHQ9bWU+PjIzJjEyNyxlZS5ncmJpdERpYWc9bWU+PjMwJjMsZWUuaWN2VG9wPTEyNyZwZSxlZS5pY3ZCb3R0b209cGU+PjcmMTI3LGVlLmljdkRpYWc9cGU+PjE0JjEyNyxlZS5k'@;
put 'Z0RpYWc9cGU+PjIxJjE1LGVlLmljdkZvcmU9MTI3JmJlLGVlLmljdkJhY2s9YmU+PjcmMTI3LGVlLmZzeEJ1dHRvbj1iZT4+MTQmMSxlZX0oUywwLDAsayksS319LDIyNTp7bjoiSW50ZXJmYWNlSGRyIixmOmZ1bmN0aW9uIFF3KFMsTyl7cmV0dXJuIDA9PT1PfHxTLnJlYWRfc2hpZnQoMiks'@;
put 'MTIwMH19LDIyNjp7bjoiSW50ZXJmYWNlRW5kIixmOnMyfSwyMjc6e246IlNYVlMifSwyMjk6e246Ik1lcmdlQ2VsbHMiLGY6ZnVuY3Rpb24gbG5lKFMsTyl7Zm9yKHZhciBrPVtdLEs9Uy5yZWFkX3NoaWZ0KDIpO0stLTspay5wdXNoKGMyKFMpKTtyZXR1cm4ga319LDIzMzp7bjoiQmtIaW0i'@;
put 'fSwyMzU6e246Ik1zb0RyYXdpbmdHcm91cCJ9LDIzNjp7bjoiTXNvRHJhd2luZyJ9LDIzNzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlvbiJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1bGUifSwyNDE6e246IlNYRXgifSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYi'@;
put 'fSwyNDU6e246IlN4SXRtIn0sMjQ2OntuOiJTeE5hbWUifSwyNDc6e246IlN4U2VsZWN0In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246IlNTVCIsZjpmdW5jdGlvbiBXNihTLE8pe2Zvcih2YXIgaz1TLmwrTyxLPVMucmVhZF9z'@;
put 'aGlmdCg0KSxlZT1TLnJlYWRfc2hpZnQoNCksb2U9W10sbWU9MDttZSE9ZWUmJlMubDxrOysrbWUpb2UucHVzaChkYyhTKSk7cmV0dXJuIG9lLkNvdW50PUssb2UuVW5pcXVlPWVlLG9lfX0sMjUzOntuOiJMYWJlbFNzdCIsZjpmdW5jdGlvbiBvVihTKXt2YXIgTz15MChTKTtyZXR1cm4gTy5p'@;
put 'c3N0PVMucmVhZF9zaGlmdCg0KSxPfX0sMjU1OntuOiJFeHRTU1QiLGY6ZnVuY3Rpb24gQ2UoUyxPKXt2YXIgaz17fTtyZXR1cm4gay5kc3N0PVMucmVhZF9zaGlmdCgyKSxTLmwrPU8tMixrfX0sMjU2OntuOiJTWFZERXgifSwyNTk6e246IlNYRm9ybXVsYSJ9LDI5MDp7bjoiU1hEQkV4In0s'@;
put 'MzExOntuOiJSUkRJbnNEZWwifSwzMTI6e246IlJSREhlYWQifSwzMTU6e246IlJSRENoZ0NlbGwifSwzMTc6e246IlJSVGFiSWQiLGY6dzR9LDMxODp7bjoiUlJEUmVuU2hlZXQifSwzMTk6e246IlJSU29ydCJ9LDMyMDp7bjoiUlJETW92ZSJ9LDMzMDp7bjoiUlJGb3JtYXQifSwzMzE6e246'@;
put 'IlJSQXV0b0ZtdCJ9LDMzMzp7bjoiUlJJbnNlcnRTaCJ9LDMzNDp7bjoiUlJETW92ZUJlZ2luIn0sMzM1OntuOiJSUkRNb3ZlRW5kIn0sMzM2OntuOiJSUkRJbnNEZWxCZWdpbiJ9LDMzNzp7bjoiUlJESW5zRGVsRW5kIn0sMzM4OntuOiJSUkRDb25mbGljdCJ9LDMzOTp7bjoiUlJERGVmTmFt'@;
put 'ZSJ9LDM0MDp7bjoiUlJEUnN0RXR4cCJ9LDM1MTp7bjoiTFJuZyJ9LDM1Mjp7bjoiVXNlc0VMRnMiLGY6Y3N9LDM1Mzp7bjoiRFNGIixmOnMyfSw0MDE6e246IkNVc3IifSw0MDI6e246IkNiVXNyIn0sNDAzOntuOiJVc3JJbmZvIn0sNDA0OntuOiJVc3JFeGNsIn0sNDA1OntuOiJGaWxlTG9j'@;
put 'ayJ9LDQwNjp7bjoiUlJESW5mbyJ9LDQwNzp7bjoiQkNVc3JzIn0sNDA4OntuOiJVc3JDaGsifSw0MjU6e246IlVzZXJCVmlldyJ9LDQyNjp7bjoiVXNlclNWaWV3QmVnaW4ifSw0Mjc6e246IlVzZXJTVmlld0VuZCJ9LDQyODp7bjoiUlJEVXNlclZpZXcifSw0Mjk6e246IlFzaSJ9LDQzMDp7'@;
put 'bjoiU3VwQm9vayIsZjpmdW5jdGlvbiBmMihTLE8sayl7dmFyIEs9Uy5sK08sZWU9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTtpZihrLnNiY2NoPW9lLDEwMjU9PW9lfHwxNDg0OT09b2UpcmV0dXJuW29lLGVlXTtpZihvZTwxfHxvZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJV'@;
put 'bmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitvZSk7Zm9yKHZhciBtZT1uYyhTLG9lKSxwZT1bXTtLPlMubDspcGUucHVzaChRYyhTKSk7cmV0dXJuW29lLGVlLG1lLHBlXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6Y3N9LDQzMjp7bjoiQ29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRW'@;
put 'YWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246IlR4TyIsZjpmdW5jdGlvbiB2NShTLE8sayl7dmFyIEs9Uy5sLGVlPSIiLG9lPS0xO3RyeXtTLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoay5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9TLmwrPTY6ZnVuY3Rp'@;
put 'b24gaGMoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDEpO1MubCsrO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtTLmwrPTJ9KFMpO3ZhciBiZT1TLnJlYWRfc2hpZnQoMik7Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTt2YXIgVmU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9VmU7Zm9yKHZh'@;
put 'ciBZZT0xO1llPFMubGVucy5sZW5ndGgtMTsrK1llKXtpZihTLmwtSyE9Uy5sZW5zW1llXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBldD1TW1MubF07aWYoKGVlKz1uYyhTLFMubGVuc1tZZSsxXS1TLmxlbnNbWWVdLTEpKS5sZW5ndGg+PShldD9i'@;
put 'ZToyKmJlKSlicmVha31pZihlZS5sZW5ndGghPT1iZSYmZWUubGVuZ3RoIT09MipiZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIrYmUrIiAhPSAiK2VlLmxlbmd0aCk7cmV0dXJuIFMubD1LK08se3Q6ZWUsaWZudDpvZX19Y2F0Y2h7cmV0dXJuIFMubD1LK08se3Q6ZWUsaWZudDpvZX19'@;
put 'fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOmNzfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0aW9uIG1WKFMsTyl7dmFyIGs9YzIoUyk7Uy5sKz0xNjt2YXIgSz1mdW5jdGlvbiBqbChTLE8pe3ZhciBrPVMubCtPLEs9Uy5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1LKXRocm93IG5ldyBFcnJvcigiVW5y'@;
put 'ZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrSyk7dmFyIGVlPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7dmFyIG9lLG1lLHBlLGJlLFZlLFllLFBlPSIiOzE2JmVlJiYob2U9QzQoUykpLDEyOCZlZSYmKG1lPUM0KFMpKSwhKDI1NyZ+ZWUpJiYocGU9QzQoUykpLDE9PSgyNTcmZWUpJiYoYmU9'@;
put 'ZnVuY3Rpb24gQWYoUyxPKXt2YXIgaz1TLnJlYWRfc2hpZnQoMTYpO3N3aXRjaChrKXtjYXNlImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gTzEoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5sLEs9ITE7Tz4yNCYmKFMubCs9Ty0yNCwiNzk1'@;
put 'ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09Uy5yZWFkX3NoaWZ0KDE2KSYmKEs9ITApLFMubD1rKTt2YXIgZWU9Uy5yZWFkX3NoaWZ0KChLP08tMjQ6Tyk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBLJiYoUy5sKz0yNCksZWV9KFMpO2Nhc2UiMDMwMzAwMDAw'@;
put 'MDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiB2cyhTKXtmb3IodmFyIE89Uy5yZWFkX3NoaWZ0KDIpLGs9IiI7Ty0tID4wOylrKz0iLi4vIjt2YXIgSz1TLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKFMubCs9Miw1NzAwNSE9Uy5yZWFkX3NoaWZ0KDIpKXRo'@;
put 'cm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PVMucmVhZF9zaGlmdCg0KSlyZXR1cm4gaytLLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDQpO2lmKDMhPVMucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIp'@;
put 'O3JldHVybiBrK1MucmVhZF9zaGlmdChvZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRSwiIil9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrayl9fShTKSksOCZlZSYmKFBlPUM0KFMpKSwzMiZlZSYmKFZlPVMucmVhZF9zaGlmdCgxNikpLDY0JmVl'@;
put 'JiYoWWU9TjMoUykpLFMubD1rO3ZhciBldD1tZXx8cGV8fGJlfHwiIjtldCYmUGUmJihldCs9IiMiK1BlKSxldHx8KGV0PSIjIitQZSksMiZlZSYmIi8iPT1ldC5jaGFyQXQoMCkmJiIvIiE9ZXQuY2hhckF0KDEpJiYoZXQ9ImZpbGU6Ly8iK2V0KTt2YXIgY3Q9e1RhcmdldDpldH07cmV0dXJu'@;
put 'IFZlJiYoY3QuZ3VpZD1WZSksWWUmJihjdC50aW1lPVllKSxvZSYmKGN0LlRvb2x0aXA9b2UpLGN0fShTLE8tMjQpO3JldHVybltrLEtdfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOlFjfSw0NDM6e246IlNYRkRCVHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOk1j'@;
put 'fSw0NDU6e246Ik9iTm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNlbDlGaWxlIixmOnMyfSw0NDk6e246IlJlY2FsY0lkIixmOmZ1bmN0aW9uIGZkKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpzMn0s'@;
put 'NTEyOntuOiJEaW1lbnNpb25zIixmOm5DfSw1MTM6e246IkJsYW5rIixmOmNuZX0sNTE1OntuOiJOdW1iZXIiLGY6ZnVuY3Rpb24gaFYoUyxPLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9NSk7dmFyIEs9eTAoUyksZWU9UmwoUyk7cmV0dXJuIEsudmFsPWVlLEt9fSw1MTY6'@;
put 'e246IkxhYmVsIixmOmZ1bmN0aW9uIEpBKFMsTyxrKXtrLmJpZmZndWVzcyYmMj09ay5iaWZmJiYoay5iaWZmPTUpO3ZhciBlZT15MChTKTsyPT1rLmJpZmYmJlMubCsrO3ZhciBvZT1RYyhTLDAsayk7cmV0dXJuIGVlLnZhbD1vZSxlZX19LDUxNzp7bjoiQm9vbEVyciIsZjpFNH0sNTE5Ontu'@;
put 'OiJTdHJpbmciLGY6UjB9LDUyMDp7bjoiUm93IixmOmZ1bmN0aW9uIFhlKFMpe3ZhciBPPXt9O08ucj1TLnJlYWRfc2hpZnQoMiksTy5jPVMucmVhZF9zaGlmdCgyKSxPLmNudD1TLnJlYWRfc2hpZnQoMiktTy5jO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtTLmwrPTQ7dmFyIEs9Uy5yZWFkX3No'@;
put 'aWZ0KDEpO1MubCs9MTt2YXIgZWU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBPLml4ZmU9NDA5NSZlZSw3JksmJihPLmxldmVsPTcmSyksMzImSyYmKE8uaGlkZGVuPSEwKSw2NCZLJiYoTy5ocHQ9ay8yMCksT319LDUyMzp7bjoiSW5kZXgifSw1NDU6e246IkFycmF5IixmOnh2fSw1NDk6e246'@;
put 'IkRlZmF1bHRSb3dIZWlnaHQiLGY6ZDJ9LDU2Njp7bjoiVGFibGUifSw1NzQ6e246IldpbmRvdzIiLGY6ZnVuY3Rpb24gc25lKFMsTyxrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw1KXJldHVybnt9O3ZhciBLPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57UlRMOjY0JkssZ3JpZDohISgyJksp'@;
put 'LGZyb3plbjohISg4JkspfX19LDYzODp7bjoiUksiLGY6ZnVuY3Rpb24gZWsoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEs9X3MoUyk7cmV0dXJue3I6TyxjOmssaXhmZTpLWzBdLHJrbnVtOktbMV19fX0sNjU5OntuOiJTdHlsZSIsZjpmdW5jdGlvbiBJMChT'@;
put 'LE8sayl7cmV0dXJuIFMubCs9Tyx7fX19LDEwNDg6e246IkJpZ05hbWUifSwxMDU0OntuOiJGb3JtYXQiLGY6ZnVuY3Rpb24gdEMoUyxPLGspe3JldHVybltTLnJlYWRfc2hpZnQoMiksWDAoUywwLGspXX19LDEwODQ6e246IkNvbnRpbnVlQmlnTmFtZSJ9LDEyMTI6e246IlNockZtbGEiLGY6'@;
put 'ZnVuY3Rpb24gTXYoUyxPLGspe3ZhciBLPU00KFMpO1MubCsrO3ZhciBlZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuW1gzKFMsTy09OCxrKSxlZSxLXX19LDIwNDg6e246IkhMaW5rVG9vbHRpcCIsZjpmdW5jdGlvbiB5VihTLE8pe1MucmVhZF9zaGlmdCgyKTt2YXIgaz1jMihTKSxLPVMucmVh'@;
put 'ZF9zaGlmdCgoTy0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW2ssSz1LLnJlcGxhY2UoRSwiIildfX0sMjA0OTp7bjoiV2ViUHViIn0sMjA1MDp7bjoiUXNpU1hUYWcifSwyMDUxOntuOiJEQlF1ZXJ5RXh0In0sMjA1Mjp7bjoiRXh0U3RyaW5nIn0sMjA1Mzp7bjoiVHh0UXJ5In0sMjA1NDp7'@;
put 'bjoiUXNpciJ9LDIwNTU6e246IlFzaWYifSwyMDU2OntuOiJSUkRUUVNJRiJ9LDIwNTc6e246IkJPRiIsZjpIY30sMjA1ODp7bjoiT2xlRGJDb25uIn0sMjA1OTp7bjoiV09wdCJ9LDIwNjA6e246IlNYVmlld0V4In0sMjA2MTp7bjoiU1hUSCJ9LDIwNjI6e246IlNYUElFeCJ9LDIwNjM6e246'@;
put 'IlNYVkRURXgifSwyMDY0OntuOiJTWFZpZXdFeDkifSwyMDY2OntuOiJDb250aW51ZUZydCJ9LDIwNjc6e246IlJlYWxUaW1lRGF0YSJ9LDIxMjg6e246IkNoYXJ0RnJ0SW5mbyJ9LDIxMjk6e246IkZydFdyYXBwZXIifSwyMTMwOntuOiJTdGFydEJsb2NrIn0sMjEzMTp7bjoiRW5kQmxvY2si'@;
put 'fSwyMTMyOntuOiJTdGFydE9iamVjdCJ9LDIxMzM6e246IkVuZE9iamVjdCJ9LDIxMzQ6e246IkNhdExhYiJ9LDIxMzU6e246IllNdWx0In0sMjEzNjp7bjoiU1hWaWV3TGluayJ9LDIxMzc6e246IlBpdm90Q2hhcnRCaXRzIn0sMjEzODp7bjoiRnJ0Rm9udExpc3QifSwyMTQ2OntuOiJTaGVl'@;
put 'dEV4dCJ9LDIxNDc6e246IkJvb2tFeHQiLHI6MTJ9LDIxNDg6e246IlNYQWRkbCJ9LDIxNDk6e246IkNyRXJyIn0sMjE1MDp7bjoiSEZQaWN0dXJlIn0sMjE1MTp7bjoiRmVhdEhkciIsZjpzMn0sMjE1Mjp7bjoiRmVhdCJ9LDIxNTQ6e246IkRhdGFMYWJFeHQifSwyMTU1OntuOiJEYXRhTGFi'@;
put 'RXh0Q29udGVudHMifSwyMTU2OntuOiJDZWxsV2F0Y2gifSwyMTYxOntuOiJGZWF0SGRyMTEifSwyMTYyOntuOiJGZWF0dXJlMTEifSwyMTY0OntuOiJEcm9wRG93bk9iaklkcyJ9LDIxNjU6e246IkNvbnRpbnVlRnJ0MTEifSwyMTY2OntuOiJEQ29ubiJ9LDIxNjc6e246Ikxpc3QxMiJ9LDIx'@;
put 'Njg6e246IkZlYXR1cmUxMiJ9LDIxNjk6e246IkNvbmRGbXQxMiJ9LDIxNzA6e246IkNGMTIifSwyMTcxOntuOiJDRkV4In0sMjE3Mjp7bjoiWEZDUkMiLGY6ZnVuY3Rpb24gb2woUyl7Uy5sKz0yO3ZhciBPPXtjeGZzOjAsY3JjOjB9O3JldHVybiBPLmN4ZnM9Uy5yZWFkX3NoaWZ0KDIpLE8u'@;
put 'Y3JjPVMucmVhZF9zaGlmdCg0KSxPfSxyOjEyfSwyMTczOntuOiJYRkV4dCIsZjpmdW5jdGlvbiBkQihTLE8pe1MubCs9Mjt2YXIgSz1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yO2Zvcih2YXIgZWU9Uy5yZWFkX3NoaWZ0KDIpLG9lPVtdO2VlLS0gPjA7KW9lLnB1c2goWnYoUykpO3JldHVybntp'@;
put 'eGZlOkssZXh0Om9lfX0scjoxMn0sMjE3NDp7bjoiQXV0b0ZpbHRlcjEyIn0sMjE3NTp7bjoiQ29udGludWVGcnQxMiJ9LDIxODA6e246Ik1EVEluZm8ifSwyMTgxOntuOiJNRFhTdHIifSwyMTgyOntuOiJNRFhUdXBsZSJ9LDIxODM6e246Ik1EWFNldCJ9LDIxODQ6e246Ik1EWFByb3AifSwy'@;
put 'MTg1OntuOiJNRFhLUEkifSwyMTg2OntuOiJNREIifSwyMTg3OntuOiJQTFYifSwyMTg4OntuOiJDb21wYXQxMiIsZjpjcyxyOjEyfSwyMTg5OntuOiJEWEYifSwyMTkwOntuOiJUYWJsZVN0eWxlcyIscjoxMn0sMjE5MTp7bjoiVGFibGVTdHlsZSJ9LDIxOTI6e246IlRhYmxlU3R5bGVFbGVt'@;
put 'ZW50In0sMjE5NDp7bjoiU3R5bGVFeHQifSwyMTk1OntuOiJOYW1lUHVibGlzaCJ9LDIxOTY6e246Ik5hbWVDbXQiLGY6ZnVuY3Rpb24gRzYoUyxPLGspe2lmKCEoay5iaWZmPDgpKXt2YXIgSz1TLnJlYWRfc2hpZnQoMiksZWU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybltuYyhTLEssayksbmMo'@;
put 'UyxlZSxrKV19Uy5sKz1PfSxyOjEyfSwyMTk3OntuOiJTb3J0RGF0YSJ9LDIxOTg6e246IlRoZW1lIixmOmZ1bmN0aW9uIGNCKFMsTyxrKXt2YXIgSz1TLmwrTztpZigxMjQyMjYhPT1TLnJlYWRfc2hpZnQoNCkpe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIHZvaWQoUy5sPUspO3ZhciBtZSxv'@;
put 'ZT1TLnNsaWNlKFMubCk7Uy5sPUs7dHJ5e21lPWNuKG9lLHt0eXBlOiJhcnJheSJ9KX1jYXRjaHtyZXR1cm59dmFyIHBlPWlyKG1lLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYocGUpcmV0dXJuIElDKHBlLGspfX0scjoxMn0sMjE5OTp7bjoiR1VJRFR5cGVMaWIifSwyMjAwOntu'@;
put 'OiJGbkdycDEyIn0sMjIwMTp7bjoiTmFtZUZuR3JwMTIifSwyMjAyOntuOiJNVFJTZXR0aW5ncyIsZjpmdW5jdGlvbiBUNChTKXtyZXR1cm5bMCE9PVMucmVhZF9zaGlmdCg0KSwwIT09Uy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19LHI6MTJ9LDIyMDM6e246IkNvbXByZXNzUGlj'@;
put 'dHVyZXMiLGY6czJ9LDIyMDQ6e246IkhlYWRlckZvb3RlciJ9LDIyMDU6e246IkNydExheW91dDEyIn0sMjIwNjp7bjoiQ3J0TWxGcnQifSwyMjA3OntuOiJDcnRNbEZydENvbnRpbnVlIn0sMjIxMTp7bjoiRm9yY2VGdWxsQ2FsY3VsYXRpb24iLGY6ZnVuY3Rpb24gUnQoUyl7dmFyIE89ZnVu'@;
put 'Y3Rpb24gbDIoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTgse3R5cGU6TyxmbGFnczprfX0oUyk7aWYoMjIxMSE9Ty50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrTy50eXBlKTtyZXR1cm4gMCE9PVMu'@;
put 'cmVhZF9zaGlmdCg0KX19LDIyMTI6e246IlNoYXBlUHJvcHNTdHJlYW0ifSwyMjEzOntuOiJUZXh0UHJvcHNTdHJlYW0ifSwyMjE0OntuOiJSaWNoVGV4dFN0cmVhbSJ9LDIyMTU6e246IkNydExheW91dDEyQSJ9LDQwOTc6e246IlVuaXRzIn0sNDA5ODp7bjoiQ2hhcnQifSw0MDk5OntuOiJT'@;
put 'ZXJpZXMifSw0MTAyOntuOiJEYXRhRm9ybWF0In0sNDEwMzp7bjoiTGluZUZvcm1hdCJ9LDQxMDU6e246Ik1hcmtlckZvcm1hdCJ9LDQxMDY6e246IkFyZWFGb3JtYXQifSw0MTA3OntuOiJQaWVGb3JtYXQifSw0MTA4OntuOiJBdHRhY2hlZExhYmVsIn0sNDEwOTp7bjoiU2VyaWVzVGV4dCJ9'@;
put 'LDQxMTY6e246IkNoYXJ0Rm9ybWF0In0sNDExNzp7bjoiTGVnZW5kIn0sNDExODp7bjoiU2VyaWVzTGlzdCJ9LDQxMTk6e246IkJhciJ9LDQxMjA6e246IkxpbmUifSw0MTIxOntuOiJQaWUifSw0MTIyOntuOiJBcmVhIn0sNDEyMzp7bjoiU2NhdHRlciJ9LDQxMjQ6e246IkNydExpbmUifSw0'@;
put 'MTI1OntuOiJBeGlzIn0sNDEyNjp7bjoiVGljayJ9LDQxMjc6e246IlZhbHVlUmFuZ2UifSw0MTI4OntuOiJDYXRTZXJSYW5nZSJ9LDQxMjk6e246IkF4aXNMaW5lIn0sNDEzMDp7bjoiQ3J0TGluayJ9LDQxMzI6e246IkRlZmF1bHRUZXh0In0sNDEzMzp7bjoiVGV4dCJ9LDQxMzQ6e246IkZv'@;
put 'bnRYIixmOk1jfSw0MTM1OntuOiJPYmplY3RMaW5rIn0sNDE0Njp7bjoiRnJhbWUifSw0MTQ3OntuOiJCZWdpbiJ9LDQxNDg6e246IkVuZCJ9LDQxNDk6e246IlBsb3RBcmVhIn0sNDE1NDp7bjoiQ2hhcnQzZCJ9LDQxNTY6e246IlBpY0YifSw0MTU3OntuOiJEcm9wQmFyIn0sNDE1ODp7bjoi'@;
put 'UmFkYXIifSw0MTU5OntuOiJTdXJmIn0sNDE2MDp7bjoiUmFkYXJBcmVhIn0sNDE2MTp7bjoiQXhpc1BhcmVudCJ9LDQxNjM6e246IkxlZ2VuZEV4Y2VwdGlvbiJ9LDQxNjQ6e246IlNodFByb3BzIixmOmZ1bmN0aW9uIHVDKFMsTyxrKXt2YXIgSz17YXJlYTohMX07aWYoNSE9ay5iaWZmKXJl'@;
put 'dHVybiBTLmwrPU8sSzt2YXIgZWU9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmwrPTMsMTYmZWUmJihLLmFyZWE9ITApLEt9fSw0MTY1OntuOiJTZXJUb0NydCJ9LDQxNjY6e246IkF4ZXNVc2VkIn0sNDE2ODp7bjoiU0Jhc2VSZWYifSw0MTcwOntuOiJTZXJQYXJlbnQifSw0MTcxOntuOiJT'@;
put 'ZXJBdXhUcmVuZCJ9LDQxNzQ6e246IklGbXRSZWNvcmQifSw0MTc1OntuOiJQb3MifSw0MTc2OntuOiJBbFJ1bnMifSw0MTc3OntuOiJCUkFJIn0sNDE4Nzp7bjoiU2VyQXV4RXJyQmFyIn0sNDE4ODp7bjoiQ2xydENsaWVudCIsZjpmdW5jdGlvbiBzbyhTKXtmb3IodmFyIE89Uy5yZWFkX3No'@;
put 'aWZ0KDIpLGs9W107Ty0tID4wOylrLnB1c2goaGQoUykpO3JldHVybiBrfX0sNDE4OTp7bjoiU2VyRm10In0sNDE5MTp7bjoiQ2hhcnQzREJhclNoYXBlIn0sNDE5Mjp7bjoiRmJpIn0sNDE5Mzp7bjoiQm9wUG9wIn0sNDE5NDp7bjoiQXhjRXh0In0sNDE5NTp7bjoiRGF0In0sNDE5Njp7bjoi'@;
put 'UGxvdEdyb3d0aCJ9LDQxOTc6e246IlNJSW5kZXgifSw0MTk4OntuOiJHZWxGcmFtZSJ9LDQxOTk6e246IkJvcFBvcEN1c3RvbSJ9LDQyMDA6e246IkZiaTIifSwwOntuOiJEaW1lbnNpb25zIixmOm5DfSwxOntuOiJCSUZGMkJMQU5LIn0sMjp7bjoiQklGRjJJTlQiLGY6ZnVuY3Rpb24gU1Yo'@;
put 'Uyl7dmFyIE89eTAoUyk7KytTLmw7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBPLnQ9Im4iLE8udmFsPWssT319LDM6e246IkJJRkYyTlVNIixmOmZ1bmN0aW9uIENWKFMpe3ZhciBPPXkwKFMpOysrUy5sO3ZhciBrPVJsKFMpO3JldHVybiBPLnQ9Im4iLE8udmFsPWssT319LDQ6e246'@;
put 'IkJJRkYyU1RSIixmOmZ1bmN0aW9uIExmKFMsTyxrKXtrLmJpZmZndWVzcyYmNT09ay5iaWZmJiYoay5iaWZmPTIpO3ZhciBLPXkwKFMpOysrUy5sO3ZhciBlZT1YMChTLDAsayk7cmV0dXJuIEsudD0ic3RyIixLLnZhbD1lZSxLfX0sNTp7bjoiQm9vbEVyciIsZjpFNH0sNzp7bjoiU3RyaW5n'@;
put 'IixmOmZ1bmN0aW9uIGRDKFMpe3ZhciBPPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PU8/KFMubCsrLCIiKTpTLnJlYWRfc2hpZnQoTywic2Jjcy1jb250Iil9fSw4OntuOiJCSUZGMlJPVyJ9LDk6e246IkJPRiIsZjpIY30sMTE6e246IkluZGV4In0sMjI6e246IkV4dGVybkNvdW50Iixm'@;
put 'Ok1jfSwzMDp7bjoiQklGRjJGT1JNQVQiLGY6aDJ9LDMxOntuOiJCSUZGMkZNVENOVCJ9LDMyOntuOiJCSUZGMkNPTElORk8ifSwzMzp7bjoiQXJyYXkiLGY6eHZ9LDM2OntuOiJDT0xXSURUSCJ9LDM3OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOmQyfSw1MDp7bjoiQklGRjJGT05UWFRSQSIs'@;
put 'ZjpmdW5jdGlvbiBoQyhTLE8pe1MubCs9NixTLmwrPTIsUy5sKz0xLFMubCs9MyxTLmwrPTEsUy5sKz1PLTEzfX0sNjI6e246IkJJRkYyV0lORE9XMiJ9LDUyOntuOiJEREVPYmpOYW1lIn0sNjc6e246IkJJRkYyWEYifSw2ODp7bjoiQklGRjJYRklOREVYIixmOk1jfSw2OTp7bjoiQklGRjJG'@;
put 'T05UQ0xSIn0sODY6e246IkJJRkY0Rk1UQ05UIn0sMTI2OntuOiJSSyJ9LDEyNzp7bjoiSW1EYXRhIixmOmZ1bmN0aW9uIGFoKFMpe3ZhciBPPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxLPVMucmVhZF9zaGlmdCg0KSxlZT17Zm10Ok8sZW52OmssbGVuOkssZGF0YTpTLnNs'@;
put 'aWNlKFMubCxTLmwrSyl9O3JldHVybiBTLmwrPUssZWV9fSwxMzU6e246IkFkZGluIn0sMTM2OntuOiJFZGcifSwxMzc6e246IlB1YiJ9LDE0NTp7bjoiU3ViIn0sMTQ4OntuOiJMSFJlY29yZCJ9LDE0OTp7bjoiTEhOR3JhcGgifSwxNTA6e246IlNvdW5kIn0sMTY5OntuOiJDb29yZExpc3Qi'@;
put 'fSwxNzE6e246IkdDVyJ9LDE4ODp7bjoiU2hyRm1sYSJ9LDE5MTp7bjoiVG9vbGJhckhkciJ9LDE5Mjp7bjoiVG9vbGJhckVuZCJ9LDE5NDp7bjoiQWRkTWVudSJ9LDE5NTp7bjoiRGVsTWVudSJ9LDIxNDp7bjoiUlN0cmluZyIsZjpmdW5jdGlvbiBmQyhTLE8sayl7dmFyIEs9Uy5sK08sZWU9'@;
put 'eTAoUyksb2U9Uy5yZWFkX3NoaWZ0KDIpLG1lPW5jKFMsb2Usayk7cmV0dXJuIFMubD1LLGVlLnQ9InN0ciIsZWUudmFsPW1lLGVlfX0sMjIzOntuOiJVRERlc2MifSwyMzQ6e246IlRhYklkQ29uZiJ9LDM1NDp7bjoiWEw1TW9kaWZ5In0sNDIxOntuOiJGaWxlU2hhcmluZzIifSw1MTg6e246'@;
put 'IkZvcm11bGEiLGY6aVN9LDUyMTp7bjoiQk9GIixmOkhjfSw1MzY6e246IkxibCIsZjpzQ30sNTQ3OntuOiJFeHRlcm5OYW1lIixmOmFDfSw1NjE6e246IkZvbnQifSw1Nzk6e246IkJJRkYzWEYifSwxMDMwOntuOiJGb3JtdWxhIixmOmlTfSwxMDMzOntuOiJCT0YiLGY6SGN9LDEwOTE6e246'@;
put 'IkJJRkY0WEYifSwyMTU3OntuOiJGZWF0SW5mbyJ9LDIxNjM6e246IkZlYXRJbmZvMTEifSwyMTc3OntuOiJTWEFkZGwxMiJ9LDIyNDA6e246IkF1dG9XZWJQdWIifSwyMjQxOntuOiJMaXN0T2JqIn0sMjI0Mjp7bjoiTGlzdEZpZWxkIn0sMjI0Mzp7bjoiTGlzdERWIn0sMjI0NDp7bjoiTGlz'@;
put 'dENvbmRGbXQifSwyMjQ1OntuOiJMaXN0Q0YifSwyMjQ2OntuOiJGTVFyeSJ9LDIyNDc6e246IkZNU1FyeSJ9LDIyNDg6e246IlBMViJ9LDIyNDk6e246IkxuRXh0In0sMjI1MDp7bjoiTWtyRXh0In0sMjI1MTp7bjoiQ3J0Q29vcHQifSwyMjYyOntuOiJGUlRBcmNoSWQkIixyOjEyfSwyOTI4'@;
put 'Mjp7fX0sdE09SWUoZU0sIm4iKTtmdW5jdGlvbiAkaShTLE8sayxLKXt2YXIgZWU9K098fCt0TVtPXTtpZighaXNOYU4oZWUpKXt2YXIgb2U9S3x8KGt8fFtdKS5sZW5ndGh8fDAsbWU9Uy5uZXh0KDQpO21lLndyaXRlX3NoaWZ0KDIsZWUpLG1lLndyaXRlX3NoaWZ0KDIsb2UpLG9lPjAmJkFy'@;
put 'KGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIE15KFMsTyxrKXtyZXR1cm4gU3x8KFM9dm4oNykpLFMud3JpdGVfc2hpZnQoMixPKSxTLndyaXRlX3NoaWZ0KDIsayksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMSwwKSxTfWZ1bmN0aW9uIG5yZShTLE8sayxLKXtpZihudWxsIT1P'@;
put 'LnYpc3dpdGNoKE8udCl7Y2FzZSJkIjpjYXNlIm4iOnZhciBlZT0iZCI9PU8udD9KZShOZShPLnYpKTpPLnY7cmV0dXJuIHZvaWQoZWU9PSgwfGVlKSYmZWU+PTAmJmVlPDY1NTM2PyRpKFMsMixmdW5jdGlvbiBNVihTLE8sayl7dmFyIEs9dm4oOSk7cmV0dXJuIE15KEssUyxPKSxLLndyaXRl'@;
put 'X3NoaWZ0KDIsayksS30oayxLLGVlKSk6JGkoUywzLGZ1bmN0aW9uIG9rKFMsTyxrKXt2YXIgSz12bigxNSk7cmV0dXJuIE15KEssUyxPKSxLLndyaXRlX3NoaWZ0KDgsaywiZiIpLEt9KGssSyxlZSkpKTtjYXNlImIiOmNhc2UiZSI6cmV0dXJuIHZvaWQgJGkoUyw1LGZ1bmN0aW9uIGVyZShT'@;
put 'LE8sayxLKXt2YXIgZWU9dm4oOSk7cmV0dXJuIE15KGVlLFMsTyksWGkoayxLfHwiYiIsZWUpLGVlfShrLEssTy52LE8udCkpO2Nhc2UicyI6Y2FzZSJzdHIiOnJldHVybiB2b2lkICRpKFMsNCxmdW5jdGlvbiB0cmUoUyxPLGspe3ZhciBLPXZuKDgrMiprLmxlbmd0aCk7cmV0dXJuIE15KEss'@;
put 'UyxPKSxLLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEsud3JpdGVfc2hpZnQoay5sZW5ndGgsaywic2JjcyIpLEsubDxLLmxlbmd0aD9LLnNsaWNlKDAsSy5sKTpLfShrLEssKE8udnx8IiIpLnNsaWNlKDAsMjU1KSkpfSRpKFMsMSxNeShudWxsLGssSykpfWZ1bmN0aW9uIG9yZShTLE8sayxL'@;
put 'LGVlKXt2YXIgb2U9MTYrczAoZWUuY2VsbFhmcyxlZS5jZWxsU3R5bGVYZnMsTyxlZSk7aWYobnVsbCE9Ty52fHxPLmJmKWlmKE8uYmYpJGkoUywiRm9ybXVsYSIsZnVuY3Rpb24gSDUoUyxPLGssSyxlZSl7dmFyIG9lPW8yKE8sayxlZSksbWU9ZnVuY3Rpb24gclMoUyl7aWYobnVsbD09Uyl7'@;
put 'dmFyIE89dm4oOCk7cmV0dXJuIE8ud3JpdGVfc2hpZnQoMSwzKSxPLndyaXRlX3NoaWZ0KDEsMCksTy53cml0ZV9zaGlmdCgyLDApLE8ud3JpdGVfc2hpZnQoMiwwKSxPLndyaXRlX3NoaWZ0KDIsNjU1MzUpLE99cmV0dXJuIEl1KCJudW1iZXIiPT10eXBlb2YgUz9TOjApfShTLnYpLHBlPXZu'@;
put 'KDYpO3BlLndyaXRlX3NoaWZ0KDIsMzMpLHBlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBQZT12bihTLmJmLmxlbmd0aCksVmU9MDtWZTxTLmJmLmxlbmd0aDsrK1ZlKVBlW1ZlXT1TLmJmW1ZlXTtyZXR1cm4gVShbb2UsbWUscGUsUGVdKX0oTyxrLEssMCxvZSkpO2Vsc2Ugc3dpdGNoKE8u'@;
put 'dCl7Y2FzZSJkIjpjYXNlIm4iOiRpKFMsIk51bWJlciIsZnVuY3Rpb24gaUMoUyxPLGssSyl7dmFyIGVlPXZuKDE0KTtyZXR1cm4gbzIoUyxPLEssZWUpLEl1KGssZWUpLGVlfShrLEssImQiPT1PLnQ/SmUoTmUoTy52KSk6Ty52LG9lKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOiRpKFMsNTE3'@;
put 'LGZ1bmN0aW9uIFAxKFMsTyxrLEssZWUsb2Upe3ZhciBtZT12big4KTtyZXR1cm4gbzIoUyxPLEssbWUpLFhpKGssb2UsbWUpLG1lfShrLEssTy52LG9lLDAsTy50KSk7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6aWYoZWUuYm9va1NTVCl7dmFyIHBlPXVTKGVlLlN0cmluZ3MsTy52LE8uUj9P'@;
put 'LnI9Sm8oTy5SKTpudWxsLGVlLnJldlN0cmluZ3MpO2lmKE8uUilmb3IodmFyIGJlPTA7YmU8Ty5SLmxlbmd0aDsrK2JlKU8uUltiZV0ucyYmczAoZWUuY2VsbFhmcyxlZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOk8uUltiZV0uc30sZWUpOyRpKFMsIkxhYmVsU3N0IixmdW5jdGlvbiBx'@;
put 'QShTLE8sayxLKXt2YXIgZWU9dm4oMTApO3JldHVybiBvMihTLE8sSyxlZSksZWUud3JpdGVfc2hpZnQoNCxrKSxlZX0oayxLLHBlLG9lKSl9ZWxzZSAkaShTLCJMYWJlbCIsZnVuY3Rpb24gbFYoUyxPLGssSyxlZSl7dmFyIG9lPSFlZXx8OD09ZWUuYmlmZixtZT12bigrb2UrOCsoMStvZSkq'@;
put 'ay5sZW5ndGgpO3JldHVybiBvMihTLE8sSyxtZSksbWUud3JpdGVfc2hpZnQoMixrLmxlbmd0aCksb2UmJm1lLndyaXRlX3NoaWZ0KDEsMSksbWUud3JpdGVfc2hpZnQoKDErb2UpKmsubGVuZ3RoLGssb2U/InV0ZjE2bGUiOiJzYmNzIiksbWV9KGssSywoTy52fHwiIikuc2xpY2UoMCwyNTUp'@;
put 'LG9lLGVlKSk7YnJlYWs7ZGVmYXVsdDokaShTLCJCbGFuayIsbzIoayxLLG9lKSl9ZWxzZSAkaShTLCJCbGFuayIsbzIoayxLLG9lKSl9ZnVuY3Rpb24ga0koUyxPLGspe3ZhciBWZSxLPXZpKCksZWU9ay5TaGVldE5hbWVzW1NdLG9lPWsuU2hlZXRzW2VlXXx8e30sbWU9KGt8fHt9KS5Xb3Jr'@;
put 'Ym9va3x8e30scGU9KG1lLlNoZWV0c3x8W10pW1NdfHx7fSxiZT1BcnJheS5pc0FycmF5KG9lKSxQZT04PT1PLmJpZmYsWWU9IiIsZXQ9W10sY3Q9c3Mob2VbIiFyZWYiXXx8IkExIiksVHQ9UGU/NjU1MzY6MTYzODQ7aWYoY3QuZS5jPjI1NXx8Y3QuZS5yPj1UdCl7aWYoTy5XVEYpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJSYW5nZSAiKyhvZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtjdC5lLmM9TWF0aC5taW4oY3QuZS5jLDI1NSksY3QuZS5yPU1hdGgubWluKGN0LmUuYyxUdC0xKX0kaShLLDIwNTcseDQoMCwxNixPKSksJGkoSywiQ2FsY01v'@;
put 'ZGUiLG4wKDEpKSwkaShLLCJDYWxjQ291bnQiLG4wKDEwMCkpLCRpKEssIkNhbGNSZWZNb2RlIixKYyghMCkpLCRpKEssIkNhbGNJdGVyIixKYyghMSkpLCRpKEssIkNhbGNEZWx0YSIsSXUoLjAwMSkpLCRpKEssIkNhbGNTYXZlUmVjYWxjIixKYyghMCkpLCRpKEssIlByaW50Um93Q29sIixK'@;
put 'YyghMSkpLCRpKEssIlByaW50R3JpZCIsSmMoITEpKSwkaShLLCJHcmlkU2V0IixuMCgxKSksJGkoSywiR3V0cyIsZnVuY3Rpb24gWTYoUyl7dmFyIE89dm4oOCk7cmV0dXJuIE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDIsU1swXT9TWzBdKzE6MCksTy53cml0ZV9zaGlmdCgy'@;
put 'LFNbMV0/U1sxXSsxOjApLE99KFswLDBdKSksJGkoSywiSENlbnRlciIsSmMoITEpKSwkaShLLCJWQ2VudGVyIixKYyghMSkpO3ZhciBpdD1vZVsiIXByaW50Il0mJm9lWyIhcHJpbnQiXS5tYXJnaW5zfHxvZVsiIW1hcmdpbnMiXTtpdCYmKG51bGwhPWl0LmxlZnQmJiRpKEssIkxlZnRNYXJn'@;
put 'aW4iLEl1KGl0LmxlZnQpKSxudWxsIT1pdC5yaWdodCYmJGkoSywiUmlnaHRNYXJnaW4iLEl1KGl0LnJpZ2h0KSksbnVsbCE9aXQudG9wJiYkaShLLCJUb3BNYXJnaW4iLEl1KGl0LnRvcCkpLG51bGwhPWl0LmJvdHRvbSYmJGkoSywiQm90dG9tTWFyZ2luIixJdShpdC5ib3R0b20pKSwobnVs'@;
put 'bCE9aXQuaGVhZGVyfHxudWxsIT1pdC5mb290ZXIpJiYkaShLLCJTZXR1cCIsZnVuY3Rpb24gY0MoUyxPKXt2YXIgaz12bigzNCksSz0hMSxlZT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KE8ucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKEs9ITAsZWUmPS02NyksSyYmKGVlJj0tNSksay53cml0'@;
put 'ZV9zaGlmdCgyLDEpLGsud3JpdGVfc2hpZnQoMiwxMDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMSxlZSksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMiw2MDApLGsud3JpdGVfc2hpZnQo'@;
put 'Miw2MDApLEl1KG51bGw9PVMuaGVhZGVyPy41OlMuaGVhZGVyLGspLEl1KG51bGw9PVMuZm9vdGVyPy41OlMuZm9vdGVyLGspLGsud3JpdGVfc2hpZnQoMiwxKSxrfShpdCxvZVsiIXByaW50Il18fHt9KSkpLFBlJiZmdW5jdGlvbiBVeihTLE8sayl7aWYoTyl7dmFyIEs9MDtPLmZvckVhY2go'@;
put 'ZnVuY3Rpb24oZWUsb2UpeysrSzw9MjU2JiZlZSYmKGVlLmF1dG8mJmRTKGssZWUsb2UpLCRpKFMsIkNvbEluZm8iLGZ1bmN0aW9uICQ2KFMsTyl7dmFyIGs9dm4oMTIpO2sud3JpdGVfc2hpZnQoMixPKSxrLndyaXRlX3NoaWZ0KDIsTyksay53cml0ZV9zaGlmdCgyLDI1NipTLndpZHRoKSxr'@;
put 'LndyaXRlX3NoaWZ0KDIsMCk7dmFyIEs9MDtyZXR1cm4gUy5oaWRkZW4mJihLfD0xKSxrLndyaXRlX3NoaWZ0KDEsSyksay53cml0ZV9zaGlmdCgxLEs9Uy5sZXZlbHx8MCksay53cml0ZV9zaGlmdCgyLDApLGt9KHU4KG9lLGVlKSxvZSkpKX0pfX0oSyxvZVsiIWNvbHMiXSxvZSksJGkoSywi'@;
put 'RGltZW5zaW9ucyIsZnVuY3Rpb24gUUEoUyxPKXt2YXIgaz04IT1PLmJpZmYmJk8uYmlmZj8yOjQsSz12bigyKmsrNik7cmV0dXJuIEsud3JpdGVfc2hpZnQoayxTLnMuciksSy53cml0ZV9zaGlmdChrLFMuZS5yKzEpLEsud3JpdGVfc2hpZnQoMixTLnMuYyksSy53cml0ZV9zaGlmdCgyLFMu'@;
put 'ZS5jKzEpLEsud3JpdGVfc2hpZnQoMiwwKSxLfShjdCxPKSksUGUmJihvZVsiIWxpbmtzIl09W10pLG9lWyIhcm93cyJdJiZQZSYmb2VbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihLdCxUbil7Zm9yKHZhciBzcj1qaShUbiksQ249MjU2LHVyPTAsZXI9S3Qucz8xNitzMChPLmNlbGxYZnMs'@;
put 'Ty5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOkt0LnN9LE8pOjAsam49Y3Qucy5jO2puPD1jdC5lLmM7KytqbikoYmU/KG9lW1RuXXx8W10pW2puXTpvZVtldFtqbl0rc3JdKSYmKGpuPENuJiYoQ249am4pLGpuPnVyJiYodXI9am4pKTt1cjxDbiYmKENuPXVyPTApLCRpKEssIlJvdyIsZnVu'@;
put 'Y3Rpb24gbXQoUyxPLGspe3ZhciBLPXZuKDE2KTtLLndyaXRlX3NoaWZ0KDIsTyksSy53cml0ZV9zaGlmdCgyLGtbMF0pLEsud3JpdGVfc2hpZnQoMixrWzFdKzEpLEsud3JpdGVfc2hpZnQoMiwyMCpTLmhwdHx8MjAqWjMoUy5ocHgpfHwzMzApLEsud3JpdGVfc2hpZnQoNCwwKTt2YXIgZWU9'@;
put 'MDtyZXR1cm4gZWV8PTB8Uy5sZXZlbCxTLmhpZGRlbiYmKGVlfD0zMiksZWV8PTY0LGtbMl0mJihlZXw9MTI4KSxLLndyaXRlX3NoaWZ0KDEsZWUpLEsud3JpdGVfc2hpZnQoMSwxKSxLLndyaXRlX3NoaWZ0KDIsa1syXXx8MCksS30oS3QsVG4sW0NuLHVyLGVyXSkpfSk7Zm9yKHZhciBidD1j'@;
put 'dC5zLnI7YnQ8PWN0LmUucjsrK2J0KXtZZT1qaShidCk7Zm9yKHZhciBCdD1jdC5zLmM7QnQ8PWN0LmUuYzsrK0J0KXtidD09PWN0LnMuciYmKGV0W0J0XT1rYShCdCkpLFZlPWV0W0J0XStZZTt2YXIgRHQ9YmU/KG9lW2J0XXx8W10pW0J0XTpvZVtWZV07RHQmJihvcmUoSyxEdCxidCxCdCxP'@;
put 'KSxQZSYmRHQubCYmb2VbIiFsaW5rcyJdLnB1c2goW1ZlLER0LmxdKSl9fXZhciBPdD1wZS5Db2RlTmFtZXx8cGUubmFtZXx8ZWU7cmV0dXJuKFBlfHw1PT1PLmJpZmYmJm9lWyIhZnJlZXplIl0pJiYkaShLLCJXaW5kb3cyIixmdW5jdGlvbiBhVihTLE8sayxLKXt2YXIgZWU9SyYmSy5iaWZm'@;
put 'fHw4LG9lPXZuKDg9PWVlPzE4OjEwKSxtZT0xNzE4O3JldHVybiBrPjAmJihtZSY9LTUxMyksWnQoT1siIWdyaWRsaW5lcyJdKSYmKG1lJj0tMyksT1siIWZyZWV6ZSJdJiYobWV8PTgpLFMmJlMuUlRMJiYobWV8PTY0KSw1PT1lZSYmKG1lPTQ0Niksb2Uud3JpdGVfc2hpZnQoMixtZSksOD09'@;
put 'ZWU/KG9lLndyaXRlX3NoaWZ0KDQsMCksb2Uud3JpdGVfc2hpZnQoNCw2NCksb2Uud3JpdGVfc2hpZnQoNCwwKSxvZS53cml0ZV9zaGlmdCg0LDApKToob2Uud3JpdGVfc2hpZnQoNCwwKSxvZS53cml0ZV9zaGlmdCg0LDApKSxvZX0oKG1lLlZpZXdzfHxbXSlbMF0sb2UsUykpLChQZXx8NT09'@;
put 'Ty5iaWZmKSYmb2VbIiFmcmVlemUiXSYmJGkoSywiUGFuZSIsZnVuY3Rpb24gYmwoUyl7InN0cmluZyI9PXR5cGVvZiBTJiYoUz1WcyhTKSk7dmFyIE89dm4oMTApO3JldHVybiBPLndyaXRlX3NoaWZ0KDIsUy5jKSxPLndyaXRlX3NoaWZ0KDIsUy5yKSxPLndyaXRlX3NoaWZ0KDIsUy5yKSxP'@;
put 'LndyaXRlX3NoaWZ0KDIsUy5jKSxPLndyaXRlX3NoaWZ0KDEsMyksTy53cml0ZV9zaGlmdCgxLDApLE99KG9lWyIhZnJlZXplIl0pKSxQZSYmb2VbIiFzZWwiXSYmJGkoSywiU2VsZWN0aW9uIixmdW5jdGlvbiBzayhTLE8pe3ZhciBrPXZuKDE1KSxLPVMuY2VsbDtpZighSyl7aWYoIVMucmFu'@;
put 'Z2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO0s9cWkoU28oUy5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgZWU9InN0cmluZyI9PXR5cGVvZiBLP1ZzKEspOks7aWYoTyl7dmFyIG9lPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'Tz9WcyhPKTpPO2sud3JpdGVfc2hpZnQoMSxlZS5yPj1vZS5yJiZlZS5jPj1vZS5jPzA6ZWUucj49b2UuciYmZWUuYzxvZS5jPzI6ZWUucjxvZS5yJiZlZS5jPj1vZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDEsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoMixlZS5yKSxrLndyaXRlX3No'@;
put 'aWZ0KDIsZWUuYyksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwxKSxmdW5jdGlvbiBCMyhTLE8pe098fChPPXZuKDYpKSxPLndyaXRlX3NoaWZ0KDIsUy5zP1Mucy5yOlMuciksTy53cml0ZV9zaGlmdCgyLFMuZT9TLmUucjpTLnIpLE8ud3JpdGVfc2hpZnQoMSxTLnM/Uy5z'@;
put 'LmM6Uy5jKSxPLndyaXRlX3NoaWZ0KDEsUy5lP1MuZS5jOlMuYyl9KHtzOmVlLGU6ZWV9LGspLGt9KG9lWyIhc2VsIl0sb2VbIiFmcmVlemUiXSkpLFBlJiYob2VbIiFtZXJnZXMiXXx8W10pLmxlbmd0aCYmJGkoSywiTWVyZ2VDZWxscyIsZnVuY3Rpb24gcFYoUyl7dmFyIE89dm4oMis4KlMu'@;
put 'bGVuZ3RoKTtPLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKWZ1KFNba10sTyk7cmV0dXJuIE99KG9lWyIhbWVyZ2VzIl0pKSxQZSYmZnVuY3Rpb24gTzgoUyxPKXtmb3IodmFyIGs9MDtrPE9bIiFsaW5rcyJdLmxlbmd0aDsrK2spe3ZhciBLPU9b'@;
put 'IiFsaW5rcyJdW2tdOyRpKFMsIkhMaW5rIix2VihLKSksS1sxXS5Ub29sdGlwJiYkaShTLCJITGlua1Rvb2x0aXAiLGJWKEspKX1kZWxldGUgT1siIWxpbmtzIl19KEssb2UpLCRpKEssIkNvZGVOYW1lIixzbChPdCkpLFBlJiZmdW5jdGlvbiB6eihTLE8pe3ZhciBrPXZuKDE5KTtrLndyaXRl'@;
put 'X3NoaWZ0KDQsMjE1MSksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDEpLGsud3JpdGVfc2hpZnQoNCwwKSwkaShTLCJGZWF0SGRyIixrKSwoaz12bigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1Miksay53cml0'@;
put 'ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMSksay53cml0ZV9zaGlmdCg0LDQpLGsud3JpdGVfc2hpZnQoMiwwKSxmdShzcyhPWyIhcmVmIl18fCJB'@;
put 'MSIpLGspLGsud3JpdGVfc2hpZnQoNCw0KSwkaShTLCJGZWF0IixrKX0oSyxvZSksJGkoSywiRU9GIiksSy5lbmQoKX1mdW5jdGlvbiBaeihTLE8sayl7dmFyIEs9dmkoKSxlZT0oU3x8e30pLldvcmtib29rfHx7fSxvZT1lZS5TaGVldHN8fFtdLG1lPWVlLldCUHJvcHN8fHt9LHBlPTg9PWsu'@;
put 'YmlmZixiZT01PT1rLmJpZmY7JGkoSywyMDU3LHg0KDAsNSxrKSksInhsYSI9PWsuYm9va1R5cGUmJiRpKEssIkFkZGluIiksJGkoSywiSW50ZXJmYWNlSGRyIixwZT9uMCgxMjAwKTpudWxsKSwkaShLLCJNbXMiLGZ1bmN0aW9uIEp3KFMsTyl7T3x8KE89dm4oUykpO2Zvcih2YXIgaz0wO2s8'@;
put 'UzsrK2spTy53cml0ZV9zaGlmdCgxLDApO3JldHVybiBPfSgyKSksYmUmJiRpKEssIlRvb2xiYXJIZHIiKSxiZSYmJGkoSywiVG9vbGJhckVuZCIpLCRpKEssIkludGVyZmFjZUVuZCIpLCRpKEssIldyaXRlQWNjZXNzIixmdW5jdGlvbiBVNihTLE8pe3ZhciBrPSFPfHw4PT1PLmJpZmYsSz12'@;
put 'bihrPzExMjo1NCk7Zm9yKEsud3JpdGVfc2hpZnQoOD09Ty5iaWZmPzI6MSw3KSxrJiZLLndyaXRlX3NoaWZ0KDEsMCksSy53cml0ZV9zaGlmdCg0LDg1OTAwNzA1OSksSy53cml0ZV9zaGlmdCg0LDU0NTg1NDh8KGs/MDo1MzY4NzA5MTIpKTtLLmw8Sy5sZW5ndGg7KUsud3JpdGVfc2hpZnQo'@;
put 'MSxrPzA6MzIpO3JldHVybiBLfSgwLGspKSwkaShLLCJDb2RlUGFnZSIsbjAocGU/MTIwMDoxMjUyKSkscGUmJiRpKEssIkRTRiIsbjAoMCkpLHBlJiYkaShLLCJFeGNlbDlGaWxlIiksJGkoSywiUlJUYWJJZCIsZnVuY3Rpb24gd1YoUyl7Zm9yKHZhciBPPXZuKDIqUyksaz0wO2s8UzsrK2sp'@;
put 'Ty53cml0ZV9zaGlmdCgyLGsrMSk7cmV0dXJuIE99KFMuU2hlZXROYW1lcy5sZW5ndGgpKSxwZSYmUy52YmFyYXcmJiRpKEssIk9iUHJvaiIpLHBlJiZTLnZiYXJhdyYmJGkoSywiQ29kZU5hbWUiLHNsKG1lLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIikpLCRpKEssIkJ1aWx0SW5Gbkdyb3Vw'@;
put 'Q291bnQiLG4wKDE3KSksJGkoSywiV2luUHJvdGVjdCIsSmMoITEpKSwkaShLLCJQcm90ZWN0IixKYyghMSkpLCRpKEssIlBhc3N3b3JkIixuMCgwKSkscGUmJiRpKEssIlByb3Q0UmV2IixKYyghMSkpLHBlJiYkaShLLCJQcm90NFJldlBhc3MiLG4wKDApKSwkaShLLCJXaW5kb3cxIixmdW5j'@;
put 'dGlvbiBhbmUoKXt2YXIgUz12bigxOCk7cmV0dXJuIFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDI5MjgwKSxTLndyaXRlX3NoaWZ0KDIsMTc2MDApLFMud3JpdGVfc2hpZnQoMiw1NiksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hp'@;
put 'ZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMSksUy53cml0ZV9zaGlmdCgyLDUwMCksU30oKSksJGkoSywiQmFja3VwIixKYyghMSkpLCRpKEssIkhpZGVPYmoiLG4wKDApKSwkaShLLCJEYXRlMTkwNCIsSmMoInRydWUiPT1mdW5jdGlvbiBqUyhTKXtyZXR1cm4gUy5Xb3JrYm9vayYmUy5Xb3Jr'@;
put 'Ym9vay5XQlByb3BzJiZlaShTLldvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQpPyJ0cnVlIjoiZmFsc2UifShTKSkpLCRpKEssIkNhbGNQcmVjaXNpb24iLEpjKCEwKSkscGUmJiRpKEssIlJlZnJlc2hBbGwiLEpjKCExKSksJGkoSywiQm9va0Jvb2wiLG4wKDApKSx0MD1JNihbMCwxNjc3NzIx'@;
put 'NSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzVdKSxmdW5jdGlvbiBhcmUoUyxPLGspeygoKE98fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7'@;
put 'dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oSyl7JGkoUywiRm9udCIsZnVuY3Rpb24gc1YoUyxPKXt2YXIgaz1TLm5hbWV8fCJBcmlhbCIsSz1PJiY1PT1PLmJpZmYsb2U9dm4oSz8xNStrLmxlbmd0aDoxNisyKmsubGVu'@;
put 'Z3RoKTtvZS53cml0ZV9zaGlmdCgyLDIwKihTLnN6fHwxMikpO3ZhciBtZT0wO3JldHVybiBTLmJvbGQmJihtZXw9MSksUy5pdGFsaWMmJihtZXw9MiksUy5zdHJpa2UmJihtZXw9OCksUy5zaGFkb3cmJihtZXw9MzIpLG9lLndyaXRlX3NoaWZ0KDEsbWUpLG9lLndyaXRlX3NoaWZ0KDEsMCks'@;
put 'b2Uud3JpdGVfc2hpZnQoMixTLmNvbG9yP1A0KFMuY29sb3IsNjQpOjY0KSxvZS53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKSxvZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PVMudmFsaWduPzE6InN1YiI9PVMudmFsaWduPzI6MCksb2Uud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8'@;
put 'MCksb2Uud3JpdGVfc2hpZnQoMSxvZS5mYW1pbHl8fDApLG9lLndyaXRlX3NoaWZ0KDEsb2UuY2hhcnNldHx8MCksb2Uud3JpdGVfc2hpZnQoMSwwKSxvZS53cml0ZV9zaGlmdCgxLGsubGVuZ3RoKSxLfHxvZS53cml0ZV9zaGlmdCgxLDEpLG9lLndyaXRlX3NoaWZ0KChLPzE6Mikqay5sZW5n'@;
put 'dGgsayxLPyJzYmNzIjoidXRmMTZsZSIpLG9lfShLLGspKX0pfShLLFMsayksZnVuY3Rpb24gc3JlKFMsTyxrKXtPJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKEspe2Zvcih2YXIgZWU9S1swXTtlZTw9S1sxXTsrK2VlKW51bGwhPU9bZWVdJiYk'@;
put 'aShTLCJGb3JtYXQiLGNWKGVlLE9bZWVdLGspKX0pfShLLFMuU1NGLGspLGZ1bmN0aW9uIFo1KFMsTyl7Zm9yKHZhciBrPTA7azwxNjsrK2spJGkoUywiWEYiLG01KHtudW1GbXRJZDowLHN0eWxlOiEwfSwwLE8pKTtPLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihLKXskaShTLCJYRiIsbTUo'@;
put 'SywwLE8pKX0pfShLLGspLCRpKEssIlBhbGV0dGUiLGZ1bmN0aW9uIEN0KFMpe3ZhciBPPXZuKDIyNik7Ty53cml0ZV9zaGlmdCgyLDU2KTtmb3IodmFyIGs9MDtrPDU2Oysrayl7dmFyIEs9U1trKzhdfHx2NFtrKzhdO08ud3JpdGVfc2hpZnQoMSxLWzBdKSxPLndyaXRlX3NoaWZ0KDEsS1sx'@;
put 'XSksTy53cml0ZV9zaGlmdCgxLEtbMl0pLE8ud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gT30odDApKSx0MD1KdCh2NCkscGUmJiRpKEssIlVzZXNFTEZzIixKYyghMSkpO3ZhciBWZT1LLmVuZCgpLFllPXZpKCk7cGUmJiRpKFllLCJDb3VudHJ5IixmdW5jdGlvbiBjaShTKXtyZXR1cm4gU3x8'@;
put 'KFM9dm4oNCkpLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsMSksU30oKSkscGUmJmsuU3RyaW5ncyYmZnVuY3Rpb24gUW5lKFMsTyxrLEspe3ZhciBlZT1LfHwoa3x8W10pLmxlbmd0aHx8MDtpZihlZTw9ODIyNClyZXR1cm4gJGkoUyxPLGssZWUpO3ZhciBvZT0rT3x8K3RN'@;
put 'W09dO2lmKCFpc05hTihvZSkpe2Zvcih2YXIgbWU9ay5wYXJ0c3x8W10scGU9MCxiZT0wLFBlPTA7UGUrKG1lW3BlXXx8ODIyNCk8PTgyMjQ7KVBlKz1tZVtwZV18fDgyMjQscGUrKzt2YXIgVmU9Uy5uZXh0KDQpO2ZvcihWZS53cml0ZV9zaGlmdCgyLG9lKSxWZS53cml0ZV9zaGlmdCgyLFBl'@;
put 'KSxTLnB1c2goay5zbGljZShiZSxiZStQZSkpLGJlKz1QZTtiZTxlZTspe2ZvcigoVmU9Uy5uZXh0KDQpKS53cml0ZV9zaGlmdCgyLDYwKSxQZT0wO1BlKyhtZVtwZV18fDgyMjQpPD04MjI0OylQZSs9bWVbcGVdfHw4MjI0LHBlKys7VmUud3JpdGVfc2hpZnQoMixQZSksUy5wdXNoKGsuc2xp'@;
put 'Y2UoYmUsYmUrUGUpKSxiZSs9UGV9fX0oWWUsIlNTVCIsZnVuY3Rpb24gZ28oUyxPKXt2YXIgaz12big4KTtrLndyaXRlX3NoaWZ0KDQsUy5Db3VudCksay53cml0ZV9zaGlmdCg0LFMuVW5pcXVlKTtmb3IodmFyIEs9W10sZWU9MDtlZTxTLmxlbmd0aDsrK2VlKUtbZWVdPUZjKFNbZWVdLE8p'@;
put 'O3ZhciBvZT1VKFtrXS5jb25jYXQoSykpO3JldHVybiBvZS5wYXJ0cz1bay5sZW5ndGhdLmNvbmNhdChLLm1hcChmdW5jdGlvbihtZSl7cmV0dXJuIG1lLmxlbmd0aH0pKSxvZX0oay5TdHJpbmdzLGspKSwkaShZZSwiRU9GIik7dmFyIGV0PVllLmVuZCgpLGN0PXZpKCksVHQ9MCxpdD0wO2Zv'@;
put 'cihpdD0wO2l0PFMuU2hlZXROYW1lcy5sZW5ndGg7KytpdClUdCs9KHBlPzEyOjExKSsocGU/MjoxKSpTLlNoZWV0TmFtZXNbaXRdLmxlbmd0aDt2YXIgYnQ9VmUubGVuZ3RoK1R0K2V0Lmxlbmd0aDtmb3IoaXQ9MDtpdDxTLlNoZWV0TmFtZXMubGVuZ3RoOysraXQpJGkoY3QsIkJvdW5kU2hl'@;
put 'ZXQ4Iix1Mih7cG9zOmJ0LGhzOihvZVtpdF18fHt9KS5IaWRkZW58fDAsZHQ6MCxuYW1lOlMuU2hlZXROYW1lc1tpdF19LGspKSxidCs9T1tpdF0ubGVuZ3RoO3ZhciBEdD1jdC5lbmQoKTtpZihUdCE9RHQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQlM4ICIrVHQrIiAhPSAiK0R0Lmxlbmd0'@;
put 'aCk7dmFyIE90PVtdO3JldHVybiBWZS5sZW5ndGgmJk90LnB1c2goVmUpLER0Lmxlbmd0aCYmT3QucHVzaChEdCksZXQubGVuZ3RoJiZPdC5wdXNoKGV0KSxtMChbT3RdKX1mdW5jdGlvbiBESShTLE8pe3ZhciBrPU98fHt9O3N3aXRjaChrLmJpZmZ8fDIpe2Nhc2UgODpjYXNlIDU6cmV0dXJu'@;
put 'IGZ1bmN0aW9uIGxyZShTLE8pe3ZhciBrPU98fHt9LEs9W107RmYoTyYmTy5QUEl8fDk2KSxTJiYhUy5TU0YmJihTLlNTRj1BLmdldF90YWJsZSgpKSxTJiZTLlNTRiYmKGFlKEEpLEEubG9hZF90YWJsZShTLlNTRiksay5yZXZzc2Y9RGUoUy5TU0YpLGsucmV2c3NmW1MuU1NGWzY1NTM1XV09'@;
put 'MCxrLnNzZj1TLlNTRiksUy5TdHlsZXM9e0ZvbnRzOmsuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6ay5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBl'@;
put 'OiJncmF5MTI1In1dLEJvcmRlcnM6ay5Cb3JkZXJzPVt7fV0sRFhGOmsuRFhGPVMuU3R5bGVzJiZTLlN0eWxlcy5EWEZ8fFtdfSxJNChrLkZvbnRzWzBdKSxrLlN0cmluZ3M9W10say5TdHJpbmdzLkNvdW50PTAsay5TdHJpbmdzLlVuaXF1ZT0wLHEzP2sucmV2U3RyaW5ncz1uZXcgTWFwOihr'@;
put 'LnJldlN0cmluZ3M9e30say5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgay5yZXZTdHJpbmdzLmZvbyksQmYoayksay5jZWxsWGZzPVtdLGsuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHMwKGsuY2VsbFhmcyxrLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSks'@;
put 'Uy5Qcm9wc3x8KFMuUHJvcHM9e30pO2Zvcih2YXIgZWU9MDtlZTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrZWUpS1tLLmxlbmd0aF09a0koZWUsayxTKTtyZXR1cm4gSy51bnNoaWZ0KFp6KFMsSyxrKSksbTAoW0tdKX0oUyxPKTtjYXNlIDQ6Y2FzZSAzOmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24g'@;
put 'aXJlKFMsTyl7dmFyIGs9T3x8e307bnVsbCE9c2UmJm51bGw9PWsuZGVuc2UmJihrLmRlbnNlPXNlKTtmb3IodmFyIEs9dmkoKSxlZT0wLG9lPTA7b2U8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK29lKVMuU2hlZXROYW1lc1tvZV09PWsuc2hlZXQmJihlZT1vZSk7aWYoMD09ZWUmJmsuc2hlZXQm'@;
put 'JlMuU2hlZXROYW1lc1swXSE9ay5zaGVldCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitrLnNoZWV0KTtyZXR1cm4gJGkoSyw0PT1rLmJpZmY/MTAzMzozPT1rLmJpZmY/NTIxOjkseDQoMCwxNixrKSksZnVuY3Rpb24gcnJlKFMsTyxrLEspe3ZhciBtZSxlZT1BcnJheS5p'@;
put 'c0FycmF5KE8pLG9lPXNzKE9bIiFyZWYiXXx8IkExIikscGU9IiIsYmU9W107aWYob2UuZS5jPjI1NXx8b2UuZS5yPjE2MzgzKXtpZihLLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKE9bIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7b2Uu'@;
put 'ZS5jPU1hdGgubWluKG9lLmUuYywyNTUpLG9lLmUucj1NYXRoLm1pbihvZS5lLmMsMTYzODMpLG1lPXJhKG9lKX1mb3IodmFyIFBlPW9lLnMucjtQZTw9b2UuZS5yOysrUGUpe3BlPWppKFBlKTtmb3IodmFyIFZlPW9lLnMuYztWZTw9b2UuZS5jOysrVmUpe1BlPT09b2Uucy5yJiYoYmVbVmVd'@;
put 'PWthKFZlKSksbWU9YmVbVmVdK3BlO3ZhciBZZT1lZT8oT1tQZV18fFtdKVtWZV06T1ttZV07WWUmJm5yZShTLFllLFBlLFZlKX19fShLLFMuU2hlZXRzW1MuU2hlZXROYW1lc1tlZV1dLDAsayksJGkoSywxMCksSy5lbmQoKX0oUyxPKX10aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAi'@;
put 'K2suYm9va1R5cGUrIiBmb3IgQklGRiIpfXZhciB2ZD1mdW5jdGlvbigpe3ZhciBTPXtjZW50ZXJDb250aW51b3VzOiJjZW50ZXIiLGp1c3RpZnk6ImxlZnQifTtmdW5jdGlvbiBrKFllLGV0KXt2YXIgY3Q9ZXR8fHt9O251bGwhPXNlJiZudWxsPT1jdC5kZW5zZSYmKGN0LmRlbnNlPXNlKTt2'@;
put 'YXIgVHQ9Y3QuZGVuc2U/W106e30saXQ9KFllPVllLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIWl0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8dGFibGU+Iik7dmFyIGJ0PVllLm1hdGNoKC88XC90YWJsZS9p'@;
put 'KSxCdD1pdC5pbmRleCxEdD1idCYmYnQuaW5kZXh8fFllLmxlbmd0aCxPdD1mdW5jdGlvbiBmdChTLE8sayl7aWYoZG58fCJzdHJpbmciPT10eXBlb2YgTylyZXR1cm4gUy5zcGxpdChPKTtmb3IodmFyIEs9Uy5zcGxpdChPKSxlZT1bS1swXV0sb2U9MTtvZTxLLmxlbmd0aDsrK29lKWVlLnB1'@;
put 'c2goayksZWUucHVzaChLW29lXSk7cmV0dXJuIGVlfShZZS5zbGljZShCdCxEdCksLyg6Pzx0cltePl0qPikvaSwiPHRyPiIpLEt0PS0xLFRuPTAsc3I9MCxDbj0wLHVyPXtzOntyOjFlNyxjOjFlN30sZTp7cjowLGM6MH19LGVyPVtdO2ZvcihCdD0wO0J0PE90Lmxlbmd0aDsrK0J0KXt2YXIg'@;
put 'am49T3RbQnRdLnRyaW0oKSxwcj1qbi5zbGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIhPXByKXtpZigiPHRkIj09cHJ8fCI8dGgiPT1wcil7dmFyIGJyPWpuLnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKER0PTA7RHQ8YnIubGVuZ3RoOysrRHQpe3ZhciBycj1icltEdF0udHJpbSgp'@;
put 'O2lmKHJyLm1hdGNoKC88dFtkaF0vaSkpe2Zvcih2YXIgU2k9cnIsUGk9MDsiPCI9PVNpLmNoYXJBdCgwKSYmKFBpPVNpLmluZGV4T2YoIj4iKSk+LTE7KVNpPVNpLnNsaWNlKFBpKzEpO2Zvcih2YXIgbmE9MDtuYTxlci5sZW5ndGg7KytuYSl7dmFyIGxhPWVyW25hXTtsYS5zLmM9PVRuJiZs'@;
put 'YS5zLnI8S3QmJkt0PD1sYS5lLnImJihUbj1sYS5lLmMrMSxuYT0tMSl9dmFyIFJpPXlyKHJyLnNsaWNlKDAscnIuaW5kZXhPZigiPiIpKSk7Q249UmkuY29sc3Bhbj8rUmkuY29sc3BhbjoxLCgoc3I9K1JpLnJvd3NwYW4pPjF8fENuPjEpJiZlci5wdXNoKHtzOntyOkt0LGM6VG59LGU6e3I6'@;
put 'S3QrKHNyfHwxKS0xLGM6VG4rQ24tMX19KTt2YXIgUnI9UmkudHx8UmlbImRhdGEtdCJdfHwiIjtpZighU2kubGVuZ3RoKXtUbis9Q247Y29udGludWV9aWYoU2k9b3IoU2kpLHVyLnMucj5LdCYmKHVyLnMucj1LdCksdXIuZS5yPEt0JiYodXIuZS5yPUt0KSx1ci5zLmM+VG4mJih1ci5zLmM9'@;
put 'VG4pLHVyLmUuYzxUbiYmKHVyLmUuYz1UbiksU2kubGVuZ3RoKXt2YXIgQm49e3Q6InMiLHY6U2l9O2N0LnJhd3x8IVNpLnRyaW0oKS5sZW5ndGh8fCJzIj09UnJ8fChCbj1JaShTaSxjdCkpLGN0LmRlbnNlPyhUdFtLdF18fChUdFtLdF09W10pLFR0W0t0XVtUbl09Qm4pOlR0W3FpKHtyOkt0'@;
put 'LGM6VG59KV09Qm4sVG4rPUNufX19fX1lbHNle2lmKCsrS3QsY3Quc2hlZXRSb3dzJiZjdC5zaGVldFJvd3M8PUt0KXstLUt0O2JyZWFrfVRuPTB9fXJldHVybiBUdFsiIXJlZiJdPXJhKHVyKSxlci5sZW5ndGgmJihUdFsiIW1lcmdlcyJdPWVyKSxUdH1mdW5jdGlvbiBlZShZZSxldCxjdCxU'@;
put 'dCxpdCxidCl7dmFyIE90LEJ0PVllWyIhbWVyZ2VzIl18fFtdLER0PVtdLEt0PXtzdHlsZTpbXX0sVG49ITE7ZnVuY3Rpb24gc3IoaWEsT3MsUGEpe3ZhciB1cz0iIixxYT0wO2lmKE90W2lhXSlzd2l0Y2goT3RbaWFdLnN0eWxlKXtjYXNlInRoaW4iOmNhc2UiaGFpciI6dXM9InNvbGlkIixx'@;
put 'YT0xO2JyZWFrO2Nhc2UibWVkaXVtIjp1cz0ic29saWQiLHFhPTI7YnJlYWs7Y2FzZSJ0aGljayI6dXM9InNvbGlkIixxYT0zO2JyZWFrO2Nhc2UiZG91YmxlIjp1cz0iZG91YmxlIixxYT0zO2JyZWFrO2Nhc2UiZG90dGVkIjpjYXNlImRhc2hEb3REb3QiOnVzPSJkb3R0ZWQiLHFhPTE7YnJl'@;
put 'YWs7Y2FzZSJtZWRpdW1EYXNoRG90RG90Ijp1cz0iZG90dGVkIixxYT0yO2JyZWFrO2Nhc2UiZGFzaGVkIjpjYXNlImRhc2hEb3QiOmNhc2Uic2xhbnREYXNoRG90Ijp1cz0iZGFzaGVkIixxYT0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaGVkIjpjYXNlIm1lZGl1bURhc2hEb3QiOnVzPSJkYXNo'@;
put 'ZWQiLHFhPTJ9ZTppZigwPT1xYSl7c3dpdGNoKGlhKXtjYXNlInRvcCI6LS1PczticmVhaztjYXNlImxlZnQiOi0tUGE7YnJlYWs7Y2FzZSJib3R0b20iOisrT3M7YnJlYWs7Y2FzZSJyaWdodCI6KytQYX12YXIgVmk9T3M+PTAmJlBhPj0wP1R0LmRlbnNlPyhZZVtPc118fFtdKVtQYV06WWVb'@;
put 'cWkoe3I6T3MsYzpQYX0pXTpudWxsO2lmKFZpKXtpZihWaS5zJiZWaS5zW3t0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9W2lhXV0pYnJlYWsgZTtWaS5zJiZWaS5zLmZnQ29sb3ImJihxYT0xKX1PdC5mZ0NvbG9yJiYocWE9MSksIVZpJiZUbiYm'@;
put 'MD09cWEmJihxYT0xKX0wIT1xYSYmcWEmJihLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLXN0eWxlOiIrKHVzfHwidHJhbnNwYXJlbnQiKSksS3Quc3R5bGUucHVzaCgiYm9yZGVyLSIraWErIi13aWR0aDoiK3FhKyJweCIpLCIiPT11cz9LdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsi'@;
put 'LWNvbG9yOiB0cmFuc3BhcmVudCIpOk90W2lhXS5jb2xvciYmT3RbaWFdLmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiYm9yZGVyLSIraWErIi1jb2xvcjojIitMMChPdFtpYV0uY29sb3IucmdiKSkpfWZvcih2YXIgQ249ZXQucy5jO0NuPD1ldC5lLmM7KytDbil7Zm9yKHZhciB1cj0wLGVy'@;
put 'PTAsam49MDtqbjxCdC5sZW5ndGg7KytqbilpZighKEJ0W2puXS5zLnI+Y3R8fEJ0W2puXS5zLmM+Q258fEJ0W2puXS5lLnI8Y3R8fEJ0W2puXS5lLmM8Q24pKXtpZihCdFtqbl0ucy5yPGN0fHxCdFtqbl0ucy5jPENuKXt1cj0tMTticmVha311cj1CdFtqbl0uZS5yLUJ0W2puXS5zLnIrMSxl'@;
put 'cj1CdFtqbl0uZS5jLUJ0W2puXS5zLmMrMTticmVha31pZighKHVyPDApKXt2YXIgcHI9cWkoe3I6Y3QsYzpDbn0pLGJyPVR0LmRlbnNlPyhZZVtjdF18fFtdKVtDbl06WWVbcHJdO2JyP1RuPSExOihUbj0hMCxicj17dDoieiIsczp7fX0pO3ZhciBycj0ieiI9PWJyLnQ/IiI6YnIuaHx8b2Eo'@;
put 'YnIud3x8KHlsKGJyKSxici53KXx8IiIpO2lmKEt0PXtzdHlsZTpbXX0sT3Q9YnIucyl7dmFyIFNpPTE7aWYoKCJzdXBlciI9PU90LnZhbGlnbnx8InN1YiI9PU90LnZhbGlnbikmJihTaT0uODMscnI9SHIoInNwYW4iLHJyLHtzdHlsZToidmVydGljYWwtYWxpZ246ICIrT3QudmFsaWdufSkp'@;
put 'LEt0LnN0eWxlLnB1c2goImZvbnQtd2VpZ2h0OiIrKE90LmJvbGQ/NzAwOjQwMCkpLE90Lml0YWxpYyYmS3Quc3R5bGUucHVzaCgiZm9udC1zdHlsZTogaXRhbGljIiksKE90LnVuZGVybGluZXx8T3Quc3RyaWtlKSYmS3Quc3R5bGUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiIrKE90LnVuZGVy'@;
put 'bGluZT8iIHVuZGVybGluZSI6IiIpKyhPdC5zdHJpa2U/IiBsaW5lLXRocm91Z2giOiIiKSksT3QuY29sb3ImJk90LmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiY29sb3I6ICMiK0wwKE90LmNvbG9yLnJnYikpLE90Lm5hbWUmJkt0LnN0eWxlLnB1c2goImZvbnQtZmFtaWx5OiIrT3QubmFt'@;
put 'ZSsiLCBzYW5zLXNlcmlmIiksT3Quc3omJkt0LnN0eWxlLnB1c2goImZvbnQtc2l6ZToiK090LnN6KlNpKyJwdCIpLG51bGwhPT1PdC5wYXR0ZXJuVHlwZSYmT3QuZmdDb2xvciYmT3QuZmdDb2xvci5yZ2ImJkt0LnN0eWxlLnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK0wwKE90LmZnQ29s'@;
put 'b3IucmdiKSksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaChmdW5jdGlvbihpYSl7c3IoaWEsY3QsQ24pfSksdXI+MXx8ZXI+MSl7dmFyIFBpPXFpKHtyOmN0K3VyLTEsYzpDbitlci0xfSksbmE9VHQuZGVuc2U/KFllW2N0K3VyLTFdfHxbXSlbQ24rZXItMV06WWVbUGldLFJpPU90O090PW5hJiZu'@;
put 'YS5zfHxPdCxbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihpYSl7c3IoaWEsY3QsQ24pfSksT3Q9Uml9ZWxzZVsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGlhKXtzcihpYSxjdCxDbil9KTtpZihPdC5hbGlnbm1lbnQpe2lmKE90LmFsaWdubWVudC5ob3Jp'@;
put 'em9udGFsP0t0LnN0eWxlLnB1c2goInRleHQtYWxpZ246ICIrKFNbT3QuYWxpZ25tZW50Lmhvcml6b250YWxdfHxPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpOiJuIj09YnIudCYmS3Quc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKSxPdC5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBS'@;
put 'cj1PdC5hbGlnbm1lbnQudmVydGljYWw7S3Quc3R5bGUucHVzaCgidmVydGljYWwtYWxpZ246ICIrKCJjZW50ZXIiPT1Scj8ibWlkZGxlIjpScikpfWlmKE90LmFsaWdubWVudC53cmFwVGV4dClLdC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKTtlbHNle3ZhciBCbj1UdC5k'@;
put 'ZW5zZT8oWWVbY3RdfHxbXSlbQ24rMV06WWVbcWkoe3I6Y3QsYzpDbisxfSldO0JuJiYieiIhPUJuLnQmJkt0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpfX1lbHNlIm4iPT1ici50JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpO3ZhciBqcj0oKFllWyIh'@;
put 'Y29scyJdfHxbXSlbQ25dfHx7fSkud3B4O251bGw9PWpyJiYoanI9KChZZVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpfXZhciB3cj0wO2lmKGVyPD0xJiZ1cjw9MSYmKHdyPSgoWWVbIiFjb2xzIl18fFtdKVtDbl18fHt9KS53cHgpJiZLdC5zdHlsZS5wdXNoKCJ3aWR0aDog'@;
put 'Iit3cisicHgiKSxZZVsiIWNvbmRmbXQiXSYmb2UoYnIsY3QsQ24sWWVbIiFjb25kZm10Il0sS3Quc3R5bGUsWWUpLDA9PUt0LnN0eWxlLmxlbmd0aD9kZWxldGUgS3Quc3R5bGU6S3Quc3R5bGU9S3Quc3R5bGUuam9pbigiOyIpLFR0LmNzcyl7dmFyIEhuPWl0LmluZGV4T2YoS3Quc3R5bGUp'@;
put 'Oy0xPT1IbiYmKGl0LnB1c2goS3Quc3R5bGUpLEhuPWl0Lmxlbmd0aC0xKSxkZWxldGUgS3Quc3R5bGUsS3QuY2xhc3M9InNqcyIrKGJ0fHwiIikrIi0iK0hufXVyPjEmJihLdC5yb3dzcGFuPXVyKSxlcj4xJiYoS3QuY29sc3Bhbj1lciksVHQuZWRpdGFibGU/cnI9JzxzcGFuIGNvbnRlbnRl'@;
put 'ZGl0YWJsZT0idHJ1ZSI+JytycisiPC9zcGFuPiI6YnImJihLdFsiZGF0YS10Il09YnImJmJyLnR8fCJ6IixudWxsIT1ici52JiYoS3RbImRhdGEtdiJdPWJyLnYpLG51bGwhPWJyLnomJihLdFsiZGF0YS16Il09YnIueikpLEt0LmlkPShUdC5pZHx8InNqcyIpKyItIitwcixEdC5wdXNoKEhy'@;
put 'KCJ0ZCIscnIsS3QpKX19dmFyIFdpLHpyPXtzdHlsZTpbXX07KFdpPVllWyIhc2hlZXRGb3JtYXQiXSkmJldpLnJvdyYmKEh2KFdpLnJvdyksV2kucm93LmhweCYmKHpyLnN0eWxlLnB1c2goWyJoZWlnaHQiLFdpLnJvdy5ocHgrInB4Il0pLHpyLmhlaWdodD1NYXRoLnJvdW5kKFdpLnJvdy5o'@;
put 'cHgpKSk7dmFyIENpPVllWyIhcm93cyJdO2lmKENpJiZDaVtjdF0pe3ZhciB3YT1DaVtjdF07d2EuaHB4JiYoenIuc3R5bGUucHVzaChbImhlaWdodCIsK3dhLmhweCsicHgiXSksenIuaGVpZ2h0PU1hdGgucm91bmQod2EuaHB4KSksd2EuaGlkZGVuJiZ6ci5zdHlsZS5wdXNoKFsiZGlzcGxh'@;
put 'eSIsIm5vbmUiXSl9dmFyIG9zPVtdO3JldHVybiB6ci5zdHlsZT16ci5zdHlsZS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGlhKXtyZXR1cm4hKG9zLmluZGV4T2YoaWFbMF0pPi0xfHwob3MucHVzaChpYVswXSksMCkpfSkubWFwKGZ1bmN0aW9uKGlhKXtyZXR1cm4gaWFbMF0rIjoiK2lh'@;
put 'WzFdfSksMD09enIuc3R5bGUubGVuZ3RoP2RlbGV0ZSB6ci5zdHlsZTp6ci5zdHlsZT16ci5zdHlsZS5qb2luKCI7IiksSHIoInRyIixEdC5qb2luKCIiKSx6cil9ZnVuY3Rpb24gb2UoWWUsZXQsY3QsVHQsaXQsYnQpe1R0LmZvckVhY2goZnVuY3Rpb24oQnQpe2lmKEJ0Ll9yZWZ8fChCdC5f'@;
put 'cmVmPSJzdHJpbmciPT10eXBlb2YgQnQucmVmP1NvKEJ0LnJlZik6QnQucmVmKSwhKEJ0Ll9yZWYucy5jPmN0fHxCdC5fcmVmLmUuYzxjdHx8QnQuX3JlZi5zLnI+ZXR8fEJ0Ll9yZWYuZS5yPGV0fHwic2NhbGUiIT09QnQudCkpe2lmKCJuIiE9WWUudClyZXR1cm47dmFyIER0O2lmKG51bGw9'@;
put 'PUJ0Ll9taW4pe0J0Ll92YWx1ZXM9W107Zm9yKHZhciBPdD1CdC5fcmVmLnMucjtPdDw9QnQuX3JlZi5lLnI7KytPdClmb3IodmFyIEt0PUJ0Ll9yZWYucy5jO0t0PD1CdC5fcmVmLmUuYzsrK0t0KXt2YXIgVG49QXJyYXkuaXNBcnJheShidCk/KGJ0W090XXx8W10pW0t0XTpidFtxaSh7cjpP'@;
put 'dCxjOkt0fSldO1RuJiYibiI9PVRuLnQmJkJ0Ll92YWx1ZXMucHVzaChUbi52KX1pZihCdC5fdmFsdWVzLnNvcnQoZnVuY3Rpb24oc3IsQ24pe3JldHVybiBzci1Dbn0pLEJ0Ll9taW49QnQuX3ZhbHVlc1swXSxCdC5fbWF4PUJ0Ll92YWx1ZXMuc2xpY2UoLTEpWzBdLEJ0Ll9iYW5kPUJ0Ll9t'@;
put 'YXgtQnQuX21pbixCdC5jbWlkKXtzd2l0Y2goQnQuY21pZC50KXtjYXNlIm51bSI6QnQuX21pZD1CdC5jbWlkLnY7YnJlYWs7Y2FzZSJwZXJjZW50IjpCdC5fbWlkPUJ0LmNtaWQudi8xMDAqQnQuX2JhbmQrQnQuX21pbjticmVhaztjYXNlInBlcmNlbnRpbGUiOkJ0Ll9taWQ9ZnVuY3Rpb24g'@;
put 'RnIoUyxPKXtpZigwPT1PKXJldHVybiBTWzBdO2lmKDEwMD09TylyZXR1cm4gU1tTLmxlbmd0aC0xXTt2YXIgSz1PLzEwMCooUy5sZW5ndGgtMSksZWU9Sy1NYXRoLmZsb29yKEspO3JldHVybiBlZSpTW01hdGguY2VpbChLKV0rKDEtZWUpKlNbTWF0aC5mbG9vcihLKV19KEJ0Ll92YWx1ZXMs'@;
put 'QnQuY21pZC52KX1CdC5fYmFuZGg9QnQuX21heC1CdC5fbWlkLEJ0Ll9iYW5kbD1CdC5fbWlkLUJ0Ll9taW59fShEdD1CdC5jbWlkP1llLnY+PUJ0Ll9taWQ/eEMoQnQuY21pZC5jb2xvcixCdC5jbWF4LmNvbG9yLChZZS52LUJ0Ll9taWQpL0J0Ll9iYW5kaCk6eEMoQnQuY21pbi5jb2xvcixC'@;
put 'dC5jbWlkLmNvbG9yLChZZS52LUJ0Ll9taW4pL0J0Ll9iYW5kbCk6eEMoQnQuY21pbi5jb2xvcixCdC5jbWF4LmNvbG9yLChZZS52LUJ0Ll9taW4pL0J0Ll9iYW5kKSkmJml0LnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK0R0KX19KX1mdW5jdGlvbiBtZShZZSxldCl7dmFyIGN0PXtzcGFu'@;
put 'OmV0fHwxLHN0eWxlOiIifSxUdD1bXTtyZXR1cm4gWWUmJlllLndweCYmKGN0LndpZHRoPU1hdGgucm91bmQoNCpZZS53cHgvMyksVHQucHVzaCgid2lkdGg6IisoWWUud3B4fHwwKSsicHgiKSksVHQubGVuZ3RoPjAmJihjdC5zdHlsZT1UdC5qb2luKCI7IikpLEhyKCJjb2wiLG51bGwsY3Qp'@;
put 'fWZ1bmN0aW9uIHBlKFllLGV0LGN0KXt2YXIgVHQ9e2JvcmRlcjowLGNlbGxwYWRkaW5nOjAsY2VsbHNwYWNpbmc6MCxzdHlsZTpbImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSIsInRhYmxlLWxheW91dDpmaXhlZCJdLmpvaW4oIjsiKX07Y3QmJmN0LmlkJiYoVHQuaWQ9Y3QuaWQpO3ZhciBp'@;
put 'dD1ZZVsiIWNvbHMiXSxidD1ZZVsiIXNoZWV0Rm9ybWF0Il07aWYoWWUmJml0KXtmb3IodmFyIEJ0PTAsT3Q9ZXQucy5jO090PD1ldC5lLmM7KytPdCl7dmFyIEt0PWl0W090XTtCdCs9S3QmJkt0LndweD9LdC53cHg6YnQmJmJ0LmNvbCYmYnQuY29sLndweD9idC5jb2wud3B4OjUzfVR0LnN0'@;
put 'eWxlKz0iO3dpZHRoOiIrQnQrInB4In12YXIgc3IsVG49WyI8dGFibGUiK0R1KFR0KSsiPiJdO2lmKFRuLnB1c2goIjxzdHlsZT50ZCB7IHBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctcmlnaHQ6MXB4OyBwYWRkaW5nLWxlZnQ6MXB4OyB0ZXh0LWFsaWduOmdlbmVyYWw7IHZlcnRpY2FsLWFs'@;
put 'aWduOmJvdHRvbTsgYm9yZGVyOjFweCBzb2xpZDsgYm9yZGVyLWNvbG9yOiIrKGN0JiZjdC5ncmlkY29sb3I/Y3QuZ3JpZGNvbG9yOlp0KFllWyIhZ3JpZGxpbmVzIl0pPyJ0cmFuc3BhcmVudCI6ImJsYWNrIikrIjsgd2hpdGUtc3BhY2U6bm93cmFwOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lz'@;
put 'fTwvc3R5bGU+IiksVG4ucHVzaCgnPGNvbGdyb3VwIHNwYW49IicrKGV0LmUuYy1ldC5zLmMrMSkrJyI+JyksaXQpe2Zvcih2YXIgQ249ZXQucy5jO0NuPE1hdGgubWluKGl0Lmxlbmd0aCxldC5lLmMrMSk7KytDbikhKHNyPWl0W0NuXSkmJmJ0JiZidC5jb2wmJihzcj1idC5jb2wpLHNyfHwo'@;
put 'c3I9e3dweDo1M30pLFRuLnB1c2gobWUoc3IsMSkpO2V0LmUuYy1ldC5zLmMrMT5pdC5sZW5ndGgmJihzcj1udWxsLGJ0JiZidC5jb2wmJihzcj1idC5jb2wpLHNyfHwoc3I9e3dweDo1M30pLFRuLnB1c2gobWUoc3IsZXQuZS5jLWV0LnMuYysxLWl0Lmxlbmd0aCkpKX1lbHNlIHNyPW51bGws'@;
put 'YnQmJmJ0LmNvbCYmKHNyPWJ0LmNvbCksc3J8fChzcj17d3B4OjUzfSksVG4ucHVzaChtZShzcixldC5lLmMtZXQucy5jKzEpKTtyZXR1cm4gVG4ucHVzaCgiPC9jb2xncm91cD4iKSxUbi5qb2luKCIiKX12YXIgYmU9JzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PHRpdGxl'@;
put 'PlNoZWV0SlMgVGFibGUgRXhwb3J0PC90aXRsZT48L2hlYWQ+PGJvZHk+JyxQZT0iPC9ib2R5PjwvaHRtbD4iO3JldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBLKFllLGV0KXtyZXR1cm4gdGgoayhZZSxldCksZXQpfSx0b19zaGVldDprLF9yb3c6ZWUsQkVHSU46YmUsRU5EOlBlLF9wcmVh'@;
put 'bWJsZTpwZSxodG1sX3RvX3JzOmZ1bmN0aW9uIE8oWWUpe3ZhciBldD1bXSxjdD17fSxUdD0wO3JldHVybiBZZS5yZXBsYWNlKC88KFwvPykoW15ccz8+IVwvOl0qOnwpKFteXHM/PjpcL10rKVtePl0qPi9nbSxmdW5jdGlvbihpdCxidCxCdCxEdCxPdCl7dmFyIFRuPUduKHlyKGl0KVswXSku'@;
put 'cmVwbGFjZSgvWzxcLz5dL2csIiIpLHNyPVllLnNsaWNlKFR0LE90KS5yZXBsYWNlKC9ccy9nLCIgIik7c3dpdGNoKHNyLmxlbmd0aD4wJiYoZXQucHVzaCh7dDoicyIsdjpzcixzOmN0fSksY3Q9SnQoY3QpKSxUbi50b0xvd2VyQ2FzZSgpKXtjYXNlImIiOiIvIiE9YnQ/Y3QuYm9sZD0hMDpk'@;
put 'ZWxldGUgY3QuYm9sZDticmVhaztjYXNlImkiOiIvIiE9YnQ/Y3QuaXRhbGljPSEwOmRlbGV0ZSBjdC5pdGFsaWM7YnJlYWs7Y2FzZSJ1IjoiLyIhPWJ0P2N0LnVuZGVybGluZT0xOmRlbGV0ZSBjdC51bmRlcmxpbmU7YnJlYWs7Y2FzZSJzIjoiLyIhPWJ0P2N0LnN0cmlrZT0hMDpkZWxldGUg'@;
put 'Y3Quc3RyaWtlfXJldHVybiBUdD1PdCtpdC5sZW5ndGgsaXR9KSxldH0sZnJvbV9zaGVldDpmdW5jdGlvbiBWZShZZSxldCl7dmFyIGN0PWV0fHx7fSxpdD1udWxsIT1jdC5mb290ZXI/Y3QuZm9vdGVyOlBlLGJ0PVtudWxsIT1jdC5oZWFkZXI/Y3QuaGVhZGVyOmJlLCIiXSxCdD1bXSxEdD0o'@;
put 'bmV3IERhdGUpLnZhbHVlT2YoKTtZZXx8KFllPXt9KSxZZVsiIXJlZiJdfHwoWWVbIiFyZWYiXT0iQTE6QTEiKTt2YXIgT3Q9U28oWWVbIiFyZWYiXSk7aWYoY3QuZGVuc2U9QXJyYXkuaXNBcnJheShZZSksY3Quc2tpcGVuZCl7dmFyIEt0PU90LmUucjtlOmZvcig7S3Q+PU90LnMucjstLUt0'@;
put 'KWZvcih2YXIgVG49T3QuZS5jO1RuPj1PdC5zLmM7LS1UbilpZihudWxsIT0oKGN0LmRlbnNlPyhZZVtLdF18fFtdKVtUbl06WWVbcWkoe3I6S3QsYzpUbn0pXSl8fHt9KS52KWJyZWFrIGU7T3QuZS5yPUt0O3ZhciBzcj1PdC5lLmM7ZTpmb3IoO3NyPj1PdC5zLmM7LS1zcilmb3IodmFyIENu'@;
put 'PU90LmUucjtDbj49T3Qucy5yOy0tQ24paWYobnVsbCE9KChjdC5kZW5zZT8oWWVbQ25dfHxbXSlbc3JdOlllW3FpKHtyOkNuLGM6c3J9KV0pfHx7fSkudilicmVhayBlO090LmUuYz1zcn1idC5wdXNoKHBlKFllLE90LGN0KSk7Zm9yKHZhciB1cj1PdC5zLnI7dXI8PU90LmUucjsrK3VyKWJ0'@;
put 'LnB1c2goZWUoWWUsT3QsdXIsY3QsQnQsRHQpKTtyZXR1cm4gYnQucHVzaCgiPC90YWJsZT4iK2l0KSxjdC5jc3MmJihidFsxXT0iPHN0eWxlPlxuIitCdC5tYXAoZnVuY3Rpb24oZXIsam4pe3JldHVybiIuc2pzIitEdCsiLSIram4rIiB7IitlcisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxl'@;
put 'PiIpLGJ0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24gSUkoUyxPLGspe3ZhciBLPXt9O2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPiJ1IilyZXR1cm4gSzt2YXIgZWU9Z2V0Q29tcHV0ZWRTdHlsZShTKTtpZigoNzAwPT1lZVsiZm9udC13ZWlnaHQiXXx8ImJvbGQiPT1lZVsiZm9udC13ZWln'@;
put 'aHQiXSkmJihLLmJvbGQ9ITApLChlZVsiZm9udC1zdHlsZSJdfHwiIikubWF0Y2goL2l0YWxpYy8pJiYoSy5pdGFsaWM9ITApLChlZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvdW5kZXJsaW5lLykmJihLLnVuZGVybGluZT0xKSwoZWVbInRleHQtZGVjb3JhdGlvbiJdfHwiIiku'@;
put 'bWF0Y2goL2xpbmUtdGhyb3VnaC8pJiYoSy5zdHJpa2U9MSkscGFyc2VJbnQoZWVbImZvbnQtc2l6ZSJdKSYmKEsuc3o9cGFyc2VGbG9hdChlZVsiZm9udC1zaXplIl0pKihlZVsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEpKSxlZVsiZm9udC1mYW1pbHkiXSYmKEsubmFtZT1lZVsi'@;
put 'Zm9udC1mYW1pbHkiXS5zcGxpdCgiLCIpWzBdLnJlcGxhY2UoL1xzKiJccyovZywiIikpLGVlLmNvbG9yKXt2YXIgb2U9UzUoZWUuY29sb3IudG9Mb3dlckNhc2UoKSwhMCk7b2U+PTAmJihLLmNvbG9yPXtyZ2I6b2V9KX1zd2l0Y2goZWVbInRleHQtdHJhbnNmb3JtIl0mJihLLnRleHRfdHJh'@;
put 'bnNmb3JtPWVlWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93ZXJDYXNlKCkpLCJub25lIiE9KGVlWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoSy5zaGFkb3c9ITApLGVlWyJ0ZXh0LWFsaWduIl0pe2Nhc2UiY2VudGVyIjpLLmFsaWdubWVudD17aG9yaXpvbnRhbDoiY2VudGVyIn07YnJlYWs7'@;
put 'Y2FzZSJyaWdodCI6Sy5hbGlnbm1lbnQ9e2hvcml6b250YWw6InJpZ2h0In07YnJlYWs7Y2FzZSJsZWZ0IjpLLmFsaWdubWVudD17aG9yaXpvbnRhbDoibGVmdCJ9O2JyZWFrO2Nhc2UianVzdGlmeSI6Sy5hbGlnbm1lbnQ9e2hvcml6b250YWw6Imp1c3RpZnkifX1zd2l0Y2goZWVbInZlcnRp'@;
put 'Y2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20iOksuYWxpZ25tZW50fHwoSy5hbGlnbm1lbnQ9e30pLEsuYWxpZ25tZW50LnZlcnRpY2FsPWVlWyJ2ZXJ0aWNhbC1hbGlnbiJdLCJtaWRkbGUiPT1LLmFsaWdubWVudC52ZXJ0aWNhbCYmKEsuYWxpZ25tZW50'@;
put 'LnZlcnRpY2FsPSJjZW50ZXIiKTticmVhaztjYXNlInN1YiI6Y2FzZSJzdXBlciI6Sy52YWxpZ249ZWVbInZlcnRpY2FsLWFsaWduIl0sSy5zeiYmKEsuc3ovPS44Myl9dmFyIG1lPU8mJmdldENvbXB1dGVkU3R5bGUoTyk7cmV0dXJuIG1lJiZrJiZPJiZbImxlZnQiLCJyaWdodCIsInRvcCIs'@;
put 'ImJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBiZT1wZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStwZS5zbGljZSgxKSxQZT1tZVsiYm9yZGVyLSIrcGUrIi1zdHlsZSJdO2lmKCgibm9uZSI9PVBlfHwhUGUpJiYoUGU9bWVbImJvcmRlciIrYmUrIlN0eWxlIl0pLCJub25lIiE9'@;
put 'UGUmJlBlKXt2YXIgVmU9cGFyc2VJbnQobWVbImJvcmRlci0iK3BlKyItd2lkdGgiXXx8bWVbImJvcmRlciIrYmUrIldpZHRoIl0sMTApLFllPSJ0aGluIjtpZihWZT4wKXtzd2l0Y2goUGUpe2Nhc2UiZG91YmxlIjpZZT0iZG91YmxlIjticmVhaztjYXNlImRhc2hlZCI6WWU9VmU+PTI/Im1l'@;
put 'ZGl1bURhc2hlZCI6ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOlllPVZlPj0yPyJtZWRpdW1EYXNoRG90RG90IjoiZG90dGVkIjticmVhaztjYXNlInNvbGlkIjpZZT1WZT49Mz8idGhpY2siOlZlPj0yPyJtZWRpdW0iOiJ0aGluIn1pZihLW3BlXT17c3R5bGU6WWV9LG1lWyJib3JkZXIt'@;
put 'IitwZSsiLWNvbG9yIl18fG1lWyJib3JkZXIiK2JlKyJDb2xvciJdKXt2YXIgZXQ9UzUoKG1lWyJib3JkZXItIitwZSsiLWNvbG9yIl18fG1lWyJib3JkZXIiK2JlKyJDb2xvciJdKS50b0xvd2VyQ2FzZSgpLCEwKTtldD49MCYmKEtbcGVdLmNvbG9yPXtyZ2I6ZXR9KX19fX0pLEt9ZnVuY3Rp'@;
put 'b24gTEkoUyxPLGspe3ZhciBLPVMuY2hpbGROb2RlcztpZigxPT1TLm5vZGVUeXBlKXN3aXRjaChTLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSJwIjpPLmxlbmd0aD4wJiZPLnB1c2goe3Q6InQiLHY6IlxuIixzOmt9KTticmVhaztjYXNlInNlbGVjdCI6cmV0dXJuIGZ1bmN0aW9uIFJJ'@;
put 'KFMsTyxrKXtPLnB1c2goe3Q6InQiLHY6Uy5jaGlsZHJlbltTLnNlbGVjdGVkSW5kZXhdLmlubmVyVGV4dCxzOmt9KX0oUyxPLGspfWlmKEsubGVuZ3RoPjApe3ZhciBlZT1JSShTLG51bGwsITEpO2smJihrLnVuZGVybGluZSYmKGVlLnVuZGVybGluZT1rLnVuZGVybGluZSksay5zdHJpa2Um'@;
put 'JihlZS5zdHJpa2U9ay5zdHJpa2UpKTtmb3IodmFyIG9lPTA7b2U8Sy5sZW5ndGg7KytvZSl7dHJ5e2lmKEtbb2VdLmdldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSljb250aW51ZX1jYXRjaHt9TEkoS1tvZV0sTyxlZSl9ZGVsZXRlIGVlLnRleHRfdHJhbnNmb3JtfWVsc2UgaWYoMz09Uy5u'@;
put 'b2RlVHlwZSl7dmFyIG1lPXt0OiJ0Iix2OlMubm9kZVZhbHVlLnJlcGxhY2UoL15bXG4gXSsvLCIgIikucmVwbGFjZSgvW1xuIF0rJC8sIiAiKSxzOmt9O3N3aXRjaChrLnRleHRfdHJhbnNmb3JtKXtjYXNlInVwcGVyY2FzZSI6bWUudj1tZS52LnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJs'@;
put 'b3dlcmNhc2UiOm1lLnY9bWUudi50b0xvd2VyQ2FzZSgpfShPLmxlbmd0aD4wfHxtZS52JiYiICIhPW1lLnYpJiZPLnB1c2gobWUpfWVsc2UgMT09Uy5ub2RlVHlwZSYmImJyIj09PVMudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZPLnB1c2goe3Q6InQiLHY6IlxuIixzOmt9KX1mdW5jdGlvbiBF'@;
put 'eShTLE8sayxLLGVlKXt2YXIgbWUsb2U9Uy5pbm5lckhUTUw7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiKXN3aXRjaChtZT1nZXRDb21wdXRlZFN0eWxlKFMpLChtZVsid2hpdGUtc3BhY2UiXXx8IiIpLm1hdGNoKC9wcmUvKSYmKG9lPW9lLnJlcGxhY2UoL1xuL2csIjxici8+Iikp'@;
put 'LChtZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpvZT1vZS50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpvZT1vZS50b0xvd2VyQ2FzZSgpfXZhciBwZT1mdW5jdGlvbiB4eShTLE8sayxLKXt2YXIgZWU9e3Q6InMiLHY6'@;
put 'T30sb2U9IiI7aWYoUyl7az1TLmdldEF0dHJpYnV0ZSgiZGF0YS10Iil8fFMuZ2V0QXR0cmlidXRlKCJ0Iik7dmFyIG1lPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXYiKXx8Uy5nZXRBdHRyaWJ1dGUoInYiKTtpZihudWxsIT0ob2U9Uy5nZXRBdHRyaWJ1dGUoImRhdGEteiIpfHxTLmdldEF0dHJp'@;
put 'YnV0ZSgieiIpKSYmKGVlLno9b2UpLG51bGwhPWsmJm51bGwhPW1lKXJldHVybiBlZS50PWssZWUudj1tZSxlZX1yZXR1cm4gbnVsbCE9TyYmKDA9PU8ubGVuZ3RoP2VlLnQ9a3x8InoiOksucmF3fHwhTy50cmltKCkubGVuZ3RofHwicyI9PWt8fChlZT1JaShPLEspKSksb2UmJihlZS56PW9l'@;
put 'KSxlZX0oUyxvcihvZSksayxlZSk7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiJiYocGUucz1JSShTLE8sZWUuYm9yZGVycyksZGVsZXRlIHBlLnMudGV4dF90cmFuc2Zvcm0sUy5jaGlsZE5vZGVzLmxlbmd0aD4xfHwxPT1TLmNoaWxkTm9kZXMubGVuZ3RoJiYzIT1TLmNoaWxkTm9k'@;
put 'ZXNbMF0ubm9kZVR5cGUpKXN3aXRjaChMSShTLHBlLlI9W10sbnVsbCkscGUuUiYmcGUuUltwZS5SLmxlbmd0aC0xXSYmIlxuIj09cGUuUltwZS5SLmxlbmd0aC0xXS52JiZwZS5SLmxlbmd0aC0tLChtZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJj'@;
put 'YXNlIjpwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpe2V0LnY9ZXQudi50b1VwcGVyQ2FzZSgpfSk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvTG93ZXJDYXNlKCl9KX1pZigicyI9PXBlLnQpe3ZhciBiZT1wZS52Lm1hdGNoKC9c'@;
put 'bi8pOyFiZSYmcGUuUiYmcGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXsic3RyaW5nIj09dHlwZW9mIGV0LnYmJmV0LnYubWF0Y2goL1xuLykmJihiZT0hMCl9KSwicyI9PXBlLnQmJmJlJiYocGUuc3x8KHBlLnM9e30pLHBlLnMuYWxpZ25tZW50fHwocGUucy5hbGlnbm1lbnQ9e30pLHBlLnMu'@;
put 'YWxpZ25tZW50LndyYXBUZXh0PSEwKX1pZihPKXt2YXIgUGU9IiIsVmU9Ty5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQSIpO2lmKFZlJiZWZS5sZW5ndGgpZm9yKHZhciBZZT0wO1llPFZlLmxlbmd0aCYmKCFWZVtZZV0uaGFzQXR0cmlidXRlKCJocmVmIil8fCIjIj09KFBlPVZlW1llXS5nZXRB'@;
put 'dHRyaWJ1dGUoImhyZWYiKSkuY2hhckF0KDApKTsrK1llKTtQZSYmIiMiIT1QZS5jaGFyQXQoMCkmJihwZS5sPXtUYXJnZXQ6UGV9KX1yZXR1cm4gcGV9ZnVuY3Rpb24gVHkoUyxPLGspe3ZhciBlZSxLPU8ucm93cztpZighSyl7aWYoayYmbnVsbCE9ay5vcmlnaW4pdGhyb3ciVW5zdXBwb3J0'@;
put 'ZWQgb3JpZ2luIHdoZW4gIitPLnRhZ05hbWUrIiBpcyBub3QgYSBUQUJMRSI7cmV0dXJuIGZ1bmN0aW9uIGNyZShTLE8sayl7az1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGt8fHt9KSk7dmFyIG9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07U1siIW1lcmdlcyJdfHwoU1siIW1lcmdl'@;
put 'cyJdPVtdKTtmb3IodmFyIHBlLG1lPU8uY2hpbGRyZW4sYmU9MCxQZT0wO1BlPG1lLmxlbmd0aDsrK1BlKXt2YXIgZXQsVmU9bWVbUGVdLFllPSIiO3RyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/ZXQ9Z2V0Q29tcHV0ZWRTdHlsZTpWZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3'@;
put 'JiYiZnVuY3Rpb24iPT10eXBlb2YgVmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoZXQ9VmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9aWYoIWV0fHwibm9uZSIhPWV0KFZlKS5kaXNwbGF5KXN3aXRjaChW'@;
put 'ZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpe2Nhc2UiVEFCTEUiOmJlPS0xLFNbIiFyZWYiXSYmKGsub3JpZ2luPS0xKSxUeShTLFZlLGspO2JyZWFrO2Nhc2UiQlIiOmNhc2UiSFIiOmJlPS0xLFNbIiFyZWYiXT8oKysob2U9U28oU1siIXJlZiJdKSkuZS5yLFNbIiFyZWYiXT1yYShvZSkpOlNb'@;
put 'IiFyZWYiXT0iQTE6QTEiO2JyZWFrO2Nhc2UiRElWIjpjYXNlIlAiOmNhc2UiSDEiOmNhc2UiSDIiOmNhc2UiSDMiOmNhc2UiSDQiOmNhc2UiSDUiOmNhc2UiSDYiOmJlPS0xLHBlPUV5KFZlLG51bGwsIiIsMCxrKSxTWyIhcmVmIl0/KGsub3JpZ2luPS0xLGY0KFMsW1twZV1dLGspKTooU1si'@;
put 'IXJlZiJdPSJBMSIsQXJyYXkuaXNBcnJheShTKT8oU1swXXx8KFNbMF09W10pLFNbMF1bMF09cGUpOlMuQTE9cGUpLFNbIiFyb3dzIl18fChTWyIhcm93cyJdPVtdKSxldCYmKG9lPVNvKFNbIiFyZWYiXSksKFllPWV0KFZlKS5oZWlnaHQpJiYiYXV0byIhPVllJiYoU1siIXJvd3MiXVtvZS5l'@;
put 'LnJdPXtocHQ6cGFyc2VJbnQoWWUsMTApfSkpO2JyZWFrO2Nhc2UiU1BBTiI6Y2FzZSJBIjpjYXNlIkIiOmNhc2UiRU0iOmNhc2UiSSI6Y2FzZSJGT05UIjpjYXNlIlMiOmNhc2UiU1VCIjpjYXNlIlNVUCI6Y2FzZSJVIjpwZT1FeShWZSxudWxsLCIiLDAsayksU1siIXJlZiJdfHwoU1siIXJl'@;
put 'ZiJdPSJBMTpBMSIpLGY0KFMsW1twZV1dLHtvcmlnaW46cWkoe3I6KGJlPDA/MTowKSsob2U9U28oU1siIXJlZiJdKSkuZS5yLGM6KytiZX0pfSk7YnJlYWs7Y2FzZSJETCI6Y2FzZSJVTCI6Y2FzZSJPTCI6YmU9LTEsY29uc29sZS5lcnJvcigiSFRNTCBDb252ZXJzaW9uIGRvZXMgbm90IHN1'@;
put 'cHBvcnQgbGlzdCBlbGVtZW50ICIrVmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKTticmVhaztkZWZhdWx0OmJlPS0xLGNvbnNvbGUuZXJyb3IoIlNraXBwaW5nICIrVmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKX19cmV0dXJuIFN9KFMsTyxrKX10cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8'@;
put 'InUiP2VlPWdldENvbXB1dGVkU3R5bGU6Ty5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgTy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihlZT1PLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHls'@;
put 'ZSl9Y2F0Y2h7fXZhciBvZT1rfHx7fTtudWxsIT1zZSYmKG9lLmRlbnNlPXNlKTt2YXIgbWU9MCxwZT0wO2lmKG51bGwhPW9lLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIG9lLm9yaWdpbiltZT1vZS5vcmlnaW47ZWxzZXt2YXIgYmU9InN0cmluZyI9PXR5cGVvZiBvZS5vcmlnaW4/VnMo'@;
put 'b2Uub3JpZ2luKTpvZS5vcmlnaW47bWU9YmUucixwZT1iZS5jfXZhciBQZT1NYXRoLm1pbihvZS5zaGVldFJvd3N8fDFlNyxLLmxlbmd0aCksVmU9e3M6e3I6MCxjOjB9LGU6e3I6bWUsYzpwZX19O2lmKFNbIiFyZWYiXSl7dmFyIFllPVNvKFNbIiFyZWYiXSk7VmUucy5yPU1hdGgubWluKFZl'@;
put 'LnMucixZZS5zLnIpLFZlLnMuYz1NYXRoLm1pbihWZS5zLmMsWWUucy5jKSxWZS5lLnI9TWF0aC5tYXgoVmUuZS5yLFllLmUuciksVmUuZS5jPU1hdGgubWF4KFZlLmUuYyxZZS5lLmMpLC0xPT1tZSYmKFZlLmUucj1tZT1ZZS5lLnIrMSl9dmFyIGV0PVtdLGN0PTAsVHQ9U1siIXJvd3MiXXx8'@;
put 'KFNbIiFyb3dzIl09W10pLGl0PTAsYnQ9MCxCdD0wLER0PTAsT3Q9MCxLdD0wO2ZvcihTWyIhY29scyJdfHwoU1siIWNvbHMiXT1bXSk7aXQ8Sy5sZW5ndGgmJmJ0PFBlOysraXQpe2Zvcih2YXIgVG49S1tpdF0sc3I9VG4ucGFyZW50RWxlbWVudDsiVEFCTEUiIT1zci50YWdOYW1lLnRvVXBw'@;
put 'ZXJDYXNlKCk7KXNyPXNyLnBhcmVudEVsZW1lbnQ7aWYoc3I9PU8pe2U6aWYodHlwZW9mIGVlPCJ1Iil7dmFyIENuPWVlKFRuKTtpZihudWxsPT1DbilicmVhayBlO2lmKENuLnN0eWxlfHwoQ24uc3R5bGU9e30pLG9lLmRpc3BsYXkmJiJub25lIj09KENuLmRpc3BsYXl8fENuLnN0eWxlLmRp'@;
put 'c3BsYXkpKWNvbnRpbnVlOyJub25lIj09KENuLmRpc3BsYXl8fENuLnN0eWxlLmRpc3BsYXkpJiYoKFR0W2J0XXx8KFR0W2J0XT17fSkpLmhpZGRlbj0hMCl9dmFyIHVyPVRuLmNlbGxzO2ZvcihCdD1EdD0wO0J0PHVyLmxlbmd0aDsrK0J0KXt2YXIgZXI9dXJbQnRdLGpuPW51bGw7aWYoISh0'@;
put 'eXBlb2YgZWU8InUiJiYobnVsbD09am4mJihqbj1lZShlcikpLGpuLnN0eWxlfHwoam4uc3R5bGU9e30pLG9lLmRpc3BsYXkmJm51bGwhPWpuJiYibm9uZSI9PShqbi5kaXNwbGF5fHxqbi5zdHlsZS5kaXNwbGF5KSkpKXtmb3IoS3Q9K2VyLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpfHwxLGN0'@;
put 'PTA7Y3Q8ZXQubGVuZ3RoOysrY3Qpe3ZhciBwcj1ldFtjdF07cHIucy5jPT1EdCtwZSYmcHIucy5yPGJ0K21lJiZidCttZTw9cHIuZS5yJiYoRHQ9cHIuZS5jKzEtcGUsY3Q9LTEpfSgoT3Q9K2VyLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpfHwxKT4xfHxLdD4xKSYmZXQucHVzaCh7czp7cjpi'@;
put 'dCttZSxjOkR0K3BlfSxlOntyOmJ0K21lKyhPdHx8MSktMSxjOkR0K3BlKyhLdHx8MSktMX19KTt2YXIgYnI9ZXIuZ2V0QXR0cmlidXRlKCJ0Iil8fCIiLHJyPWVyLmdldEF0dHJpYnV0ZSgiYmdjb2xvciIpO2U6aWYodHlwZW9mIGVlPCJ1Iil7aWYobnVsbD09am4mJihqbj1lZShlcikpLG51'@;
put 'bGw9PWpuKWJyZWFrIGU7aWYoam4uc3R5bGV8fChqbi5zdHlsZT17fSksMT09S3QmJmpuLndpZHRoJiYoU1siIWNvbHMiXVtEdCtwZV09U1siIWNvbHMiXVtEdCtwZV18fHt9LGpuLndpZHRoLm1hdGNoKC9weC8pP1NbIiFjb2xzIl1bRHQrcGVdLndweD1NYXRoLm1heChwYXJzZUludChqbi53'@;
put 'aWR0aCwxMCkrNSxTWyIhY29scyJdW0R0K3BlXS53cHh8fDApOmpuLndpZHRoLm1hdGNoKC9wdC8pJiYoU1siIWNvbHMiXVtEdCtwZV0ud3B4PU1hdGgubWF4KDQqcGFyc2VJbnQoam4ud2lkdGgsMTApLzMrNSxTWyIhY29scyJdW0R0K3BlXS53cHh8fDApKSksT3Q8PTEpe1R0W2J0K21lXXx8'@;
put 'KFR0W2J0K21lXT17fSk7dmFyIFNpPWpuLmhlaWdodDsoU2k9U2kubWF0Y2goL3B0Lyk/b2gocGFyc2VJbnQoU2ksMTApKTpwYXJzZUludChTaSwxMCkpPihUdFtidCttZV0uaHB4fHxvaChUdFtidCttZV0uaHB0KXx8MCkmJihkZWxldGUgVHRbYnQrbWVdLmhwdCxUdFtidCttZV0uaHB4PVNp'@;
put 'KX19dmFyIFBpPWVyO2lmKGVyLmZpcnN0RWxlbWVudENoaWxkJiYxPT1lci5jaGlsZHJlbi5sZW5ndGgmJiJzcGFuIj09ZXIuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBuYT0wLGxhPWVyLmNoaWxkTm9kZXMsUmk9MDtSaTxsYS5sZW5ndGg7KytS'@;
put 'aSkzPT1sYVtSaV0ubm9kZVR5cGUmJisrbmE7MD09bmEmJihlcj1lci5maXJzdEVsZW1lbnRDaGlsZCl9dmFyIFJyPUV5KGVyLFBpLGJyLDAsb2UpO2lmKGpuKXt2YXIgQm49ZWUoZXIpO2lmKEJuJiYhQm4uc3R5bGUmJihCbi5zdHlsZT17fSksKEJuJiZCblsiYmFja2dyb3VuZC1jb2xvciJd'@;
put 'fHxqblsiYmFja2dyb3VuZC1jb2xvciJdKSYmKFJyLnN8fChSci5zPXt9KSwhUnIucy5mZ0NvbG9yKSl0cnl7dmFyIGpyPUJuJiZCblsiYmFja2dyb3VuZC1jb2xvciJdfHxqblsiYmFja2dyb3VuZC1jb2xvciJdO2pyLm1hdGNoKC9yZ2JhWyhdXHMqMC4qWyldL2kpJiYoanI9am5bImJhY2tn'@;
put 'cm91bmQtY29sb3IiXSk7dmFyIHdyPVM1KGpyLnRvTG93ZXJDYXNlKCksITApO3dyPj0wJiYoUnIucy5mZ0NvbG9yPXtyZ2I6d3J9KX1jYXRjaHt9c3dpdGNoKGpuWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlIm1pZGRsZSI6Y2FzZSJiYXNlbGluZSI6UnIuc3x8KFJyLnM9e30pLFJyLnMuYWxp'@;
put 'Z25tZW50fHwoUnIucy5hbGlnbm1lbnQ9e30pLFJyLnMuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIifX1pZihyciYmKFJyLnN8fChSci5zPXt9KSwhUnIucy5mZ0NvbG9yKSl0cnl7dmFyIEhuPVM1KHJyLnRvTG93ZXJDYXNlKCksITApO0huPj0wJiYoUnIucy5mZ0NvbG9yPXtyZ2I6SG59'@;
put 'KX1jYXRjaHt9aWYob2UuZGVuc2U/KFNbYnQrbWVdfHwoU1tidCttZV09W10pLFNbYnQrbWVdW0R0K3BlXT1Scik6U1txaSh7YzpEdCtwZSxyOmJ0K21lfSldPVJyLE90PjF8fEt0PjEpZm9yKHZhciB6cj1idDt6cjxidCtPdDsrK3pyKWZvcih2YXIgV2k9RHQ7V2k8RHQrS3Q7KytXaSlidD09'@;
put 'enImJkR0PT1XaXx8KG9lLmRlbnNlPyhTW3pyK21lXXx8KFNbenIrbWVdPVtdKSxTW3pyK21lXVtXaStwZV09e3Q6InoiLHM6SnQoUnIuc3x8e30pfSk6U1txaSh7YzpXaStwZSxyOnpyK21lfSldPXt0OiJ6IixzOkp0KFJyLnN8fHt9KX0pO1ZlLmUuYzxEdCtwZSYmKFZlLmUuYz1EdCtwZSks'@;
put 'RHQrPUt0fX0rK2J0fX1pZihldC5sZW5ndGgmJihTWyIhbWVyZ2VzIl09KFNbIiFtZXJnZXMiXXx8W10pLmNvbmNhdChldCkpLFZlLmUucj1NYXRoLm1heChWZS5lLnIsYnQtMSttZSksU1siIXJlZiJdPXJhKFZlKSxidD49UGUmJihTWyIhZnVsbHJlZiJdPXJhKChWZS5lLnI9Sy5sZW5ndGgt'@;
put 'aXQrYnQtMSttZSxWZSkpKSxvZS5ib3JkZXJzKWZvcihidD1WZS5zLnI7YnQ8PVZlLmUucjsrK2J0KWZvcihEdD1WZS5zLmM7RHQ8PVZlLmUuYzsrK0R0KWlmKCFvZS5kZW5zZSl7dmFyIENpPVNbcWkoe3I6YnQsYzpEdH0pXTtpZighQ2l8fCFDaS5zKWNvbnRpbnVlO2lmKGJ0PjApe3ZhciB3'@;
put 'YT1TW3FpKHtyOmJ0LTEsYzpEdH0pXTt3YSYmd2EucyYmd2Eucy5ib3R0b20mJmRlbGV0ZSBDaS5zLnRvcH1pZihEdD4wKXt2YXIgb3M9U1txaSh7cjpidCxjOkR0LTF9KV07b3MmJm9zLnMmJm9zLnMuYm90dG9tJiZkZWxldGUgQ2kucy5sZWZ0fX1yZXR1cm4gU31mdW5jdGlvbiBXeihTLE8p'@;
put 'e3JldHVybiBUeSgoT3x8e30pLmRlbnNlP1tdOnt9LFMsTyl9dmFyIG5NPWZ1bmN0aW9uKCl7dmFyIFM9ZnVuY3Rpb24oSyxlZSxvZSl7dmFyIG1lPUsucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9nLCIgIiku'@;
put 'cmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKFZlLFllKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoWWUsMTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0IikucmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wvPi9nLCJc'@;
put 'biIpLHBlPVFyKG1lLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLGJlPVtdLFBlPTA7cmV0dXJuIG1lLnJlcGxhY2UoLyg8dGV4dDpzcGFuLio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKFZlLFllLGV0LGN0KXtjdCE9UGUmJmJlLnB1c2goe3Q6InMiLHY6UXIobWUuc2xpY2Uo'@;
put 'UGUsY3QpKX0pO3ZhciBUdD17dDoicyIsdjpRcihldCl9LGl0PXlyKFllKVsic3R5bGUtbmFtZSJdO3JldHVybiBpdCYmb2VbaXRdJiYoVHQucz1KdChvZVtpdF0pKSxiZS5wdXNoKFR0KSxQZT1jdCtWZS5sZW5ndGgsIiJ9KSxQZTxtZS5sZW5ndGgmJmJlLnB1c2goe3Q6InMiLHY6UXIobWUu'@;
put 'c2xpY2UoUGUpKX0pLFtwZSxiZV19LE89e2RheTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5eSJdLGhvdXJzOlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJzIiwic3MiXSwiYW0tcG0iOlsiQS9QIiwiQU0vUE0iXSwiZGF5LW9mLXdlZWsi'@;
put 'OlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJlZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LGs9ZnVuY3Rpb24oSyxlZSl7dmFyIG9lPXlyKEsuc2xpY2UoMCxLLmluZGV4T2YoIj4iKSkpLG1lPUsuc2xpY2UoSy5pbmRleE9mKCI+IikrMSkscGU9e25hbWU6b2UubmFt'@;
put 'ZSxmYW1pbHk6b2UuZmFtaWx5fTtbWyJwYXJlbnQiLCJwYXJlbnQtc3R5bGUtbmFtZSJdLFsiZGF0YW5hbWUiLCJkYXRhLXN0eWxlLW5hbWUiXSxbIm1wbmFtZSIsIm1hc3Rlci1wYWdlLW5hbWUiXV0uZm9yRWFjaChmdW5jdGlvbihQZSl7b2VbUGVbMV1dJiYocGVbUGVbMF1dPW9lW1BlWzFd'@;
put 'XSl9KTt2YXIgYmU9e307bWUucmVwbGFjZSh0bixmdW5jdGlvbihQZSl7dmFyIFZlPXlyKFBlKTtpZigiPHN0eWxlOnRleHQtcHJvcGVydGllcyI9PT1WZVswXSl7aWYoVmVbImZvbnQtd2VpZ2h0Il0mJihiZS5ib2xkPSsoImJvbGQiPT1WZVsiZm9udC13ZWlnaHQiXXx8IjcwMCI9PVZlWyJm'@;
put 'b250LXdlaWdodCJdKSksKCJpdGFsaWMiPT1WZVsiZm9udC1zdHlsZSJdfHwib2JsaXF1ZSI9PVZlWyJmb250LXN0eWxlIl0pJiYoYmUuaXRhbGljPTEpLCJub25lIiE9KFZlWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSIpP2JlLnVuZGVybGluZT0iZG91YmxlIj09VmVbInRleHQt'@;
put 'dW5kZXJsaW5lLXR5cGUiXT8yOjE6KFZlWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSI9PVZlWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0pJiYoYmUudW5kZXJsaW5lPTApLChWZVsiZm9udC1zaXplIl18fCIiKS5tYXRjaCgvcHQkLykmJihiZS5zej0rVmVbImZvbnQtc2l6ZSJdLnJl'@;
put 'cGxhY2UoInB0IiwiIikpLCJub25lIiE9KFZlWyJ0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdfHwibm9uZSIpJiYoYmUuc3RyaWtlPTEpLFZlWyJmb250LW5hbWUiXSYmKGJlLm5hbWU9VmVbImZvbnQtbmFtZSJdKSxWZS5jb2xvcil7dmFyIFllPVM1KFZlLmNvbG9yLCEwKTtZZT49MCYmKGJl'@;
put 'LmNvbG9yPVllKX1zd2l0Y2goVmVbInRleHQtcG9zaXRpb24iXSl7Y2FzZSJzdXBlciI6YmUudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSJzdWIiOmJlLnZhbGlnbj0ic3ViIjticmVhaztkZWZhdWx0OihWZVsidGV4dC1wb3NpdGlvbiJdfHwiIikubWF0Y2goLyUvKSYmKGJlLnZhbGlnbj0i'@;
put 'LSI9PVZlWyJ0ZXh0LXBvc2l0aW9uIl0uY2hhckF0KDApPyJzdWIiOiJzdXBlciIpfSJub25lIiE9KFZlWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoYmUuc2hhZG93PTEpfXJldHVybiIifSksZWVbb2UubmFtZV09YmV9O3JldHVybiBmdW5jdGlvbihlZSxvZSl7dmFyIG1lPW9lfHx7fTtu'@;
put 'dWxsIT1zZSYmbnVsbD09bWUuZGVuc2UmJihtZS5kZW5zZT1zZSk7dmFyIFBlLFZlLFR0LGl0LE90LEt0LHBlPVhTKGVlKSxiZT1bXSxZZT17bmFtZToiIn0sZXQ9IiIsY3Q9MCxidD17fSxCdD1bXSxEdD1tZS5kZW5zZT9bXTp7fSxUbj17dmFsdWU6IiJ9LHNyPSIiLENuPTAsZXI9W10sam49'@;
put 'LTEscHI9LTEsYnI9e3M6e3I6MWU2LGM6MWU3fSxlOntyOjAsYzowfX0scnI9MCxTaT17fSxQaT1bXSxuYT17fSxsYT0wLFJpPTAsUnI9W10sQm49MSxqcj0xLHdyPVtdLEhuPXtOYW1lczpbXX0senI9e30sV2k9WyIiLCIiXSxDaT1bXSx3YT17fSxvcz17fSxpYT0wLE9zPSIiLFBhPTAsdXM9'@;
put 'ITEscWE9ITEsVmk9MDtmb3IoVTUubGFzdEluZGV4PTAscGU9cGUucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKTtPdD1VNS5leGVjKHBlKTspc3dpdGNoKE90WzNdPU90WzNdLnJlcGxhY2UoL18uKiQv'@;
put 'LCIiKSl7Y2FzZSJ0YWJsZSI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOiIvIj09PU90WzFdPyhEdFsiIXJlZiJdPWJyLmUuYz49YnIucy5jJiZici5lLnI+PWJyLnMucj9yYShicik6IkExOkExIixtZS5zaGVldFJvd3M+MCYmbWUuc2hlZXRSb3dzPD1ici5lLnImJihEdFsiIWZ1bGxyZWYi'@;
put 'XT1EdFsiIXJlZiJdLGJyLmUucj1tZS5zaGVldFJvd3MtMSxEdFsiIXJlZiJdPXJhKGJyKSksUGkubGVuZ3RoJiYoRHRbIiFtZXJnZXMiXT1QaSksUnIubGVuZ3RoJiYoRHRbIiFyb3dzIl09UnIpLFR0Lm5hbWU9VHQuXHU1NDBkXHU3OWYwfHxUdC5uYW1lLHR5cGVvZiBKU09OPCJ1IiYmSlNP'@;
put 'Ti5zdHJpbmdpZnkoVHQpLEJ0LnB1c2goVHQubmFtZSksYnRbVHQubmFtZV09RHQscWE9ITEpOiIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJihUdD15cihPdFswXSwhMSksam49cHI9LTEsYnIucy5yPWJyLnMuYz0xZTcsYnIuZS5yPWJyLmUuYz0wLER0PW1lLmRlbnNlP1td'@;
put 'Ont9LFBpPVtdLFJyPVtdLHFhPSEwKTticmVhaztjYXNlInRhYmxlLXJvdy1ncm91cCI6Ii8iPT09T3RbMV0/LS1ycjorK3JyO2JyZWFrO2Nhc2UidGFibGUtcm93IjpjYXNlIlx1ODg0YyI6aWYoIi8iPT09T3RbMV0pe2puKz1CbixCbj0xO2JyZWFrfWlmKChpdD15cihPdFswXSwhMSkpLlx1'@;
put 'ODg0Y1x1NTNmNz9qbj1pdC5cdTg4NGNcdTUzZjctMTotMT09am4mJihqbj0wKSwoQm49K2l0WyJudW1iZXItcm93cy1yZXBlYXRlZCJdfHwxKTwxMClmb3IoVmk9MDtWaTxCbjsrK1ZpKXJyPjAmJihScltqbitWaV09e2xldmVsOnJyfSk7cHI9LTE7YnJlYWs7Y2FzZSJjb3ZlcmVkLXRhYmxl'@;
put 'LWNlbGwiOiIvIiE9PU90WzFdJiYrK3ByLG1lLnNoZWV0U3R1YnMmJihtZS5kZW5zZT8oRHRbam5dfHwoRHRbam5dPVtdKSxEdFtqbl1bcHJdPXt0OiJ6In0pOkR0W3FpKHtyOmpuLGM6cHJ9KV09e3Q6InoifSksc3I9IiIsZXI9W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpjYXNlIlx1NjU3'@;
put 'MFx1NjM2ZSI6aWYoIi8iPT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSkrK3ByLFRuPXlyKE90WzBdLCExKSxqcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxLdD17dDoieiIsdjpudWxsfSxUbi5mb3JtdWxhJiYwIT1tZS5jZWxsRm9ybXVs'@;
put 'YSYmKEt0LmY9Y1MoUXIoVG4uZm9ybXVsYSkpKSwic3RyaW5nIj09KFRuLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSkmJihLdC50PSJzIixLdC52PVFyKFRuWyJzdHJpbmctdmFsdWUiXXx8IiIpLG1lLmRlbnNlPyhEdFtqbl18fChEdFtqbl09W10pLER0W2pu'@;
put 'XVtwcl09S3QpOkR0W3FpKHtyOmpuLGM6cHJ9KV09S3QpLHByKz1qci0xO2Vsc2UgaWYoIi8iIT09T3RbMV0pe2pyPTE7dmFyIElvPUJuP2puK0JuLTE6am47aWYoKytwcj5ici5lLmMmJihici5lLmM9cHIpLHByPGJyLnMuYyYmKGJyLnMuYz1wciksam48YnIucy5yJiYoYnIucy5yPWpuKSxJ'@;
put 'bz5ici5lLnImJihici5lLnI9SW8pLENpPVtdLHdhPXt9LEt0PXt0OihUbj15cihPdFswXSwhMSkpLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSx2Om51bGx9LG1lLmNlbGxGb3JtdWxhKWlmKFRuLmZvcm11bGEmJihUbi5mb3JtdWxhPVFyKFRuLmZvcm11bGEp'@;
put 'KSxUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSYmVG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJihsYT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsUmk9cGFyc2VJbnQoVG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1z'@;
put 'cGFubmVkIl0sMTApfHwwLEt0LkY9cmEobmE9e3M6e3I6am4sYzpwcn0sZTp7cjpqbitsYS0xLGM6cHIrUmktMX19KSx3ci5wdXNoKFtuYSxLdC5GXSkpLFRuLmZvcm11bGEpS3QuZj1jUyhUbi5mb3JtdWxhKTtlbHNlIGZvcihWaT0wO1ZpPHdyLmxlbmd0aDsrK1ZpKWpuPj13cltWaV1bMF0u'@;
put 'cy5yJiZqbjw9d3JbVmldWzBdLmUuciYmcHI+PXdyW1ZpXVswXS5zLmMmJnByPD13cltWaV1bMF0uZS5jJiYoS3QuRj13cltWaV1bMV0pO3N3aXRjaCgoVG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8VG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihsYT1wYXJzZUludChUblsibnVt'@;
put 'YmVyLXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxSaT1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxQaS5wdXNoKG5hPXtzOntyOmpuLGM6cHJ9LGU6e3I6am4rbGEtMSxjOnByK1JpLTF9fSkpLFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYoanI9cGFy'@;
put 'c2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0sMTApKSxLdC50KXtjYXNlImJvb2xlYW4iOkt0LnQ9ImIiLEt0LnY9ZWkoVG5bImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5IjpLdC50PSJuIixLdC52PXBh'@;
put 'cnNlRmxvYXQoVG4udmFsdWUpO2JyZWFrO2Nhc2UiZGF0ZSI6S3QudD0iZCIsS3Qudj1OZShUblsiZGF0ZS12YWx1ZSJdKSxtZS5jZWxsRGF0ZXN8fChLdC50PSJuIixLdC52PUplKEt0LnYpKSxLdC56PSJtL2QveXkiO2JyZWFrO2Nhc2UidGltZSI6S3QudD0ibiIsS3Qudj1ydChUblsidGlt'@;
put 'ZS12YWx1ZSJdKS84NjQwMCxtZS5jZWxsRGF0ZXMmJihLdC50PSJkIixLdC52PW9uKEt0LnYpKSxLdC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0'@;
put 'cmluZyIhPT1LdC50JiYidGV4dCIhPT1LdC50JiZLdC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK0t0LnQpO0t0LnQ9InMiLG51bGwhPVRuWyJzdHJpbmctdmFsdWUiXSYmKHNyPVFyKFRuWyJzdHJpbmctdmFsdWUiXSksZXI9W10pfX1lbHNle2lmKHVzPSEx'@;
put 'LCJzIj09PUt0LnQmJihLdC52PXNyfHwiIixlci5sZW5ndGgmJihLdC5SPWVyKSx1cz0wPT1DbiksenIuVGFyZ2V0JiYoS3QubD16ciksQ2kubGVuZ3RoPjAmJihLdC5jPUNpLENpPVtdKSxzciYmITEhPT1tZS5jZWxsVGV4dCYmKEt0Lnc9c3IpLHVzJiYoS3QudD0ieiIsZGVsZXRlIEt0LnYp'@;
put 'LG1lLmNlbGxIVE1MJiYoS3QuaD1LdC5SP0Z1KEt0LlIpOm9hKCIiK0t0LnYpKSwoIXVzfHxtZS5zaGVldFN0dWJzKSYmIShtZS5zaGVldFJvd3MmJm1lLnNoZWV0Um93czw9am4pKWZvcih2YXIgRm49MDtGbjxCbjsrK0ZuKXtpZihqcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVw'@;
put 'ZWF0ZWQiXXx8IjEiLDEwKSxtZS5kZW5zZSlmb3IoRHRbam4rRm5dfHwoRHRbam4rRm5dPVtdKSxEdFtqbitGbl1bcHJdPTA9PUZuP0t0Okp0KEt0KTstLWpyPjA7KUR0W2puK0ZuXVtwcitqcl09SnQoS3QpO2Vsc2UgZm9yKER0W3FpKHtyOmpuK0ZuLGM6cHJ9KV09S3Q7LS1qcj4wOylEdFtx'@;
put 'aSh7cjpqbitGbixjOnByK2pyfSldPUp0KEt0KTtici5lLmM8PXByJiYoYnIuZS5jPXByKX1wcis9KGpyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLGpyPTAsS3Q9e30sc3I9IiIsZXI9W119enI9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2Fz'@;
put 'ZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHls'@;
put 'ZXMiOmlmKCIvIj09PU90WzFdKXtpZigoUGU9YmUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtPdFszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09T3Rb'@;
put 'MV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGU7d2EudD1zcixlci5sZW5ndGgmJih3YS5SPWVyKSx3YS5hPU9zLENpLnB1c2god2EpfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtPdFszXSwhMV0pO09z'@;
put 'PSIiLFBhPTAsc3I9IiIsQ249MCxlcj1bXTticmVhaztjYXNlImNyZWF0b3IiOiIvIj09PU90WzFdP09zPXBlLnNsaWNlKFBhLE90LmluZGV4KTpQYT1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJtZXRhIjpjYXNlIlx1NTE0M1x1NjU3MFx1NjM2ZSI6Y2FzZSJzZXR0aW5ncyI6'@;
put 'Y2FzZSJjb25maWctaXRlbS1zZXQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWluZGV4ZWQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWVudHJ5IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1uYW1lZCI6Y2FzZSJzaGFwZXMiOmNhc2UiZnJhbWUiOmNhc2UidGV4dC1ib3giOmNhc2UiaW1hZ2UiOmNhc2Ui'@;
put 'ZGF0YS1waWxvdC10YWJsZXMiOmNhc2UibGlzdC1zdHlsZSI6Y2FzZSJmb3JtIjpjYXNlImRkZS1saW5rcyI6Y2FzZSJldmVudC1saXN0ZW5lcnMiOmNhc2UiY2hhcnQiOmlmKCIvIj09PU90WzFdKXtpZigoUGU9YmUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVs'@;
put 'c2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtPdFszXSwhMV0pO3NyPSIiLENuPTAsZXI9W107YnJlYWs7Y2FzZSJzY2llbnRpZmljLW51bWJlciI6Y2FzZSJjdXJyZW5jeS1zeW1ib2wiOmNhc2UiY3VycmVuY3ktc3R5bGUiOmNhc2Uic2NyaXB0IjpjYXNl'@;
put 'ImxpYnJhcmllcyI6Y2FzZSJhdXRvbWF0aWMtc3R5bGVzIjpjYXNlImRlZmF1bHQtc3R5bGUiOmNhc2UicGFnZS1sYXlvdXQiOmNhc2UibWFwIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJwYXJhZ3JhcGgtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNvbHVt'@;
put 'bi1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXJvdy1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNlbGwtcHJvcGVydGllcyI6Y2FzZSJmcmFjdGlvbiI6Y2FzZSJib29sZWFuLXN0eWxlIjpjYXNlImJvb2xlYW4iOmNhc2UidGV4dC1zdHlsZSI6Y2FzZSJ0ZXh0LWNvbnRlbnQiOmNhc2UidGV4dC1w'@;
put 'cm9wZXJ0aWVzIjpjYXNlImVtYmVkZGVkLXRleHQiOmNhc2UiYm9keSI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2MiOmNhc2UiZm9ybXMiOmNhc2UidGFibGUtY29sdW1uIjpjYXNlInRhYmxlLWhlYWRlci1yb3dzIjpjYXNlInRhYmxlLXJvd3MiOmNhc2UidGFibGUtY29sdW1uLWdy'@;
put 'b3VwIjpjYXNlInRhYmxlLWhlYWRlci1jb2x1bW5zIjpjYXNlInRhYmxlLWNvbHVtbnMiOmNhc2UibnVsbC1kYXRlIjpjYXNlImdyYXBoaWMtcHJvcGVydGllcyI6Y2FzZSJjYWxjdWxhdGlvbi1zZXR0aW5ncyI6Y2FzZSJuYW1lZC1leHByZXNzaW9ucyI6Y2FzZSJsYWJlbC1yYW5nZSI6Y2Fz'@;
put 'ZSJsYWJlbC1yYW5nZXMiOmNhc2UibmFtZWQtZXhwcmVzc2lvbiI6Y2FzZSJzb3J0IjpjYXNlInNvcnQtYnkiOmNhc2Uic29ydC1ncm91cHMiOmNhc2UidGFiIjpjYXNlImxpbmUtYnJlYWsiOmNhc2Uic3BhbiI6Y2FzZSJzIjpjYXNlImRhdGUiOmNhc2Uib2JqZWN0IjpjYXNlInRpdGxlIjpj'@;
put 'YXNlIlx1NjgwN1x1OTg5OCI6Y2FzZSJkZXNjIjpjYXNlImJpbmFyeS1kYXRhIjpjYXNlInRhYmxlLXNvdXJjZSI6Y2FzZSJzY2VuYXJpbyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UiY29udGVudC12YWxpZGF0aW9ucyI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb24iOmNhc2UiaGVscC1tZXNzYWdl'@;
put 'IjpjYXNlImVycm9yLW1lc3NhZ2UiOmNhc2UiZGF0YWJhc2UtcmFuZ2VzIjpjYXNlImZpbHRlciI6Y2FzZSJmaWx0ZXItYW5kIjpjYXNlImZpbHRlci1vciI6Y2FzZSJmaWx0ZXItY29uZGl0aW9uIjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0IjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUt'@;
put 'bnVtYmVyIjpjYXNlImxpc3QtbGV2ZWwtcHJvcGVydGllcyI6Y2FzZSJzZW5kZXItZmlyc3RuYW1lIjpjYXNlInNlbmRlci1sYXN0bmFtZSI6Y2FzZSJzZW5kZXItaW5pdGlhbHMiOmNhc2Uic2VuZGVyLXRpdGxlIjpjYXNlInNlbmRlci1wb3NpdGlvbiI6Y2FzZSJzZW5kZXItZW1haWwiOmNh'@;
put 'c2Uic2VuZGVyLXBob25lLXByaXZhdGUiOmNhc2Uic2VuZGVyLWZheCI6Y2FzZSJzZW5kZXItY29tcGFueSI6Y2FzZSJzZW5kZXItcGhvbmUtd29yayI6Y2FzZSJzZW5kZXItc3RyZWV0IjpjYXNlInNlbmRlci1jaXR5IjpjYXNlInNlbmRlci1wb3N0YWwtY29kZSI6Y2FzZSJzZW5kZXItY291'@;
put 'bnRyeSI6Y2FzZSJzZW5kZXItc3RhdGUtb3ItcHJvdmluY2UiOmNhc2UiYXV0aG9yLW5hbWUiOmNhc2UiYXV0aG9yLWluaXRpYWxzIjpjYXNlImNoYXB0ZXIiOmNhc2UiZmlsZS1uYW1lIjpjYXNlInRlbXBsYXRlLW5hbWUiOmNhc2Uic2hlZXQtbmFtZSI6Y2FzZSJldmVudC1saXN0ZW5lciI6'@;
put 'Y2FzZSJpbml0aWFsLWNyZWF0b3IiOmNhc2UiY3JlYXRpb24tZGF0ZSI6Y2FzZSJwcmludC1kYXRlIjpjYXNlImdlbmVyYXRvciI6Y2FzZSJkb2N1bWVudC1zdGF0aXN0aWMiOmNhc2UidXNlci1kZWZpbmVkIjpjYXNlImVkaXRpbmctZHVyYXRpb24iOmNhc2UiZWRpdGluZy1jeWNsZXMiOmNh'@;
put 'c2UiY29uZmlnLWl0ZW0iOmNhc2UicGFnZS1udW1iZXIiOmNhc2UicGFnZS1jb3VudCI6Y2FzZSJ0aW1lIjpjYXNlImNlbGwtcmFuZ2Utc291cmNlIjpjYXNlImRldGVjdGl2ZSI6Y2FzZSJvcGVyYXRpb24iOmNhc2UiaGlnaGxpZ2h0ZWQtcmFuZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZSI6'@;
put 'Y2FzZSJzb3VyY2UtY2VsbC1yYW5nZSI6Y2FzZSJzb3VyY2Utc2VydmljZSI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkIjpjYXNlImRhdGEtcGlsb3QtbGV2ZWwiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbHMiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbCI6Y2FzZSJkYXRhLXBpbG90LW1lbWJl'@;
put 'cnMiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXIiOmNhc2UiZGF0YS1waWxvdC1kaXNwbGF5LWluZm8iOmNhc2UiZGF0YS1waWxvdC1zb3J0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1sYXlvdXQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkLXJlZmVyZW5jZSI6Y2FzZSJkYXRhLXBpbG90LWdy'@;
put 'b3VwcyI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAtbWVtYmVyIjpjYXNlInJlY3QiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbHMiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbCI6Y2FzZSJkZGUtbGluayI6Y2FzZSJkZGUtc291cmNlIjpjYXNlInByb3Bl'@;
put 'cnRpZXMiOmNhc2UicHJvcGVydHkiOmNhc2UidGFibGUtcHJvdGVjdGlvbiI6Y2FzZSJkYXRhLXBpbG90LWdyYW5kLXRvdGFsIjpjYXNlIm9mZmljZS1kb2N1bWVudC1jb21tb24tYXR0cnMiOmJyZWFrO2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlInBlcmNlbnRhZ2Utc3R5bGUiOmNhc2UiZGF0'@;
put 'ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjppZigiLyI9PT1PdFsxXSl7aWYoU2lbWWUubmFtZV09ZXQsKFBlPWJlLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZX1lbHNlIi8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmKGV0PSIiLFllPXlyKE90WzBd'@;
put 'LCExKSxiZS5wdXNoKFtPdFszXSwhMF0pKTticmVhaztjYXNlInN0eWxlIjoiLz4iPT09T3RbMF0uc2xpY2UoLTIpP2soT3RbMF0sb3MpOiIvIj09T3RbMV0/ayhwZS5zbGljZShpYSxPdC5pbmRleCtPdFswXS5sZW5ndGgpLG9zKTppYT1PdC5pbmRleDticmVhaztjYXNlIm51bWJlciI6Y2Fz'@;
put 'ZSJkYXkiOmNhc2UibW9udGgiOmNhc2UieWVhciI6Y2FzZSJlcmEiOmNhc2UiZGF5LW9mLXdlZWsiOmNhc2Uid2Vlay1vZi15ZWFyIjpjYXNlInF1YXJ0ZXIiOmNhc2UiaG91cnMiOmNhc2UibWludXRlcyI6Y2FzZSJzZWNvbmRzIjpjYXNlImFtLXBtIjpzd2l0Y2goYmVbYmUubGVuZ3RoLTFd'@;
put 'WzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6VmU9eXIoT3RbMF0sITEpLGV0Kz1PW090WzNdXVsibG9uZyI9PT1WZS5zdHlsZT8xOjBdfWJyZWFrO2Nhc2UidGV4dCI6aWYoIi8+Ij09PU90WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT1PdFsxXSlzd2l0Y2goYmVb'@;
put 'YmUubGVuZ3RoLTFdWzBdKXtjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmV0Kz1wZS5zbGljZShjdCxPdC5pbmRleCl9ZWxzZSBjdD1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6V2k9bnkoKFZlPXlyKE90'@;
put 'WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgWXM9e05hbWU6VmUubmFtZSxSZWY6V2lbMF0rIiEiK1dpWzFdfTtxYSYmKFlzLlNoZWV0PUJ0Lmxlbmd0aCksSG4uTmFtZXMucHVzaChZcyk7YnJlYWs7Y2FzZSJwIjpjYXNlIlx1NjU4N1x1NjcyY1x1NGUzMiI6aWYoWyJtYXN0'@;
put 'ZXItc3R5bGVzIl0uaW5kZXhPZihiZVtiZS5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PU90WzFdfHxUbiYmVG5bInN0cmluZy12YWx1ZSJdKXlyKE90WzBdLCExKSxDbj1PdC5pbmRleCtPdFswXS5sZW5ndGg7ZWxzZXt2YXIgaHI9UyhwZS5zbGljZShDbixPdC5pbmRleCksMCxv'@;
put 'cyk7c3I9KHNyLmxlbmd0aD4wP3NyKyJcbiI6IiIpK2hyWzBdLGVyPWhyWzFdfWJyZWFrO2Nhc2UiZGF0YWJhc2UtcmFuZ2UiOmlmKCIvIj09PU90WzFdKWJyZWFrO3RyeXtidFsoV2k9bnkoeXIoT3RbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2ZpbHRlciJdPXty'@;
put 'ZWY6V2lbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PU90WzFdKXtpZighKHpyPXlyKE90WzBdLCExKSkuaHJlZilicmVhazt6ci5UYXJnZXQ9UXIoenIuaHJlZiksZGVsZXRlIHpyLmhyZWYsIiMiPT16ci5UYXJnZXQuY2hhckF0KDApJiZ6ci5UYXJnZXQuaW5kZXhPZigiLiIp'@;
put 'Pi0xPyhXaT1ueSh6ci5UYXJnZXQuc2xpY2UoMSkpLHpyLlRhcmdldD0iIyIrV2lbMF0rIiEiK1dpWzFdKTp6ci5UYXJnZXQubWF0Y2goL15cLlwuW1xcXC9dLykmJih6ci5UYXJnZXQ9enIuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaChPdFsyXSl7Y2FzZSJkYzoiOmNh'@;
put 'c2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6IjpjYXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYobWUuV1RG'@;
put 'KXRocm93IG5ldyBFcnJvcihPdCl9fXZhciBKbD17U2hlZXRzOmJ0LFNoZWV0TmFtZXM6QnQsV29ya2Jvb2s6SG59O3JldHVybiBtZS5ib29rU2hlZXRzJiZkZWxldGUgSmwuU2hlZXRzLEpsfX0oKTtmdW5jdGlvbiBPSShTLE8pe3JldHVybiBuTShTLE8pfXZhciBHej1mdW5jdGlvbigpe3Zh'@;
put 'ciBTPVsiICA8b2ZmaWNlOm1hc3Rlci1zdHlsZXM+IiwnICAgIDxzdHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0eWxlOmRpc3Bs'@;
put 'YXk9ImZhbHNlIi8+JywiICAgICAgPHN0eWxlOmZvb3Rlci8+IiwnICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIiksTz0iPG9mZmlj'@;
put 'ZTpkb2N1bWVudC1zdHlsZXMgIitEdSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHls'@;
put 'ZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxu'@;
put 'czpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9l'@;
put 'bGVtZW50cy8xLjEvIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpvZiI6'@;
put 'InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5cbiIrUysiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRGkrT319KCksUDg9ZnVuY3Rpb24oKXt2YXIgUz1m'@;
put 'dW5jdGlvbihwZSxiZSl7cmV0dXJuIFByKHBlKS5yZXBsYWNlKC8gICsvZyxmdW5jdGlvbihQZSl7cmV0dXJuJzx0ZXh0OnMgdGV4dDpjPSInK1BlLmxlbmd0aCsnIi8+J30pLnJlcGxhY2UoL1x0L2csIjx0ZXh0OnRhYi8+IikucmVwbGFjZSgvXG4vZyxiZT8iPHRleHQ6bGluZS1icmVhay8+'@;
put 'IjoiPC90ZXh0OnA+PHRleHQ6cD4iKS5yZXBsYWNlKC9eIC8sIjx0ZXh0OnMvPiIpLnJlcGxhY2UoLyAkLywiPHRleHQ6cy8+Iil9LE89ZnVuY3Rpb24ocGUpe3JldHVybiBwZS5tYXAoZnVuY3Rpb24oYmUpe3ZhciBQZT0iIjtyZXR1cm4gbnVsbCE9YmUub2RzJiYoUGUrPScgdGV4dDpzdHls'@;
put 'ZS1uYW1lPSJUJytiZS5vZHMrJyInKSxiZS52PyI8dGV4dDpzcGFuIitQZSsiPiIrUyhiZS52LCEwKSsiPC90ZXh0OnNwYW4+IjoiIn0pLmpvaW4oIiIpfSxrPSIgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cbiIsZWU9ZnVuY3Rpb24ocGUsYmUsUGUpe3ZhciBWZT1bXTtWZS5wdXNo'@;
put 'KCcgICAgICA8dGFibGU6dGFibGUgdGFibGU6bmFtZT0iJytQcihiZS5TaGVldE5hbWVzW1BlXSkrJyIgdGFibGU6c3R5bGUtbmFtZT0idGExIj5cbicpO3ZhciBZZT0wLGV0PTAsY3Q9U28ocGVbIiFyZWYiXXx8IkExIiksVHQ9cGVbIiFtZXJnZXMiXXx8W10saXQ9MCxidD1BcnJheS5pc0Fy'@;
put 'cmF5KHBlKTtpZihwZVsiIWNvbHMiXSlmb3IoZXQ9MDtldDw9Y3QuZS5jOysrZXQpVmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtY29sdW1uIisocGVbIiFjb2xzIl1bZXRdPycgdGFibGU6c3R5bGUtbmFtZT0iY28nK3BlWyIhY29scyJdW2V0XS5vZHMrJyInOiIiKSsiPjwvdGFibGU6'@;
put 'dGFibGUtY29sdW1uPlxuIik7dmFyIER0PXBlWyIhcm93cyJdfHxbXTtmb3IoWWU9MDtZZTxjdC5zLnI7KytZZSlWZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhEdFtZZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycrRHRbWWVdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJs'@;
put 'ZS1yb3c+XG4iKTtmb3IoO1llPD1jdC5lLnI7KytZZSl7Zm9yKFZlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKER0W1llXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytEdFtZZV0ub2RzKyciJzoiIikrIj5cbiIpLGV0PTA7ZXQ8Y3Qucy5jOysrZXQpVmUucHVzaChrKTtmb3Io'@;
put 'O2V0PD1jdC5lLmM7KytldCl7dmFyIE90PSExLEt0PXt9LFRuPSIiO2ZvcihpdD0wO2l0IT1UdC5sZW5ndGg7KytpdClpZighKFR0W2l0XS5zLmM+ZXR8fFR0W2l0XS5zLnI+WWV8fFR0W2l0XS5lLmM8ZXR8fFR0W2l0XS5lLnI8WWUpKXsoVHRbaXRdLnMuYyE9ZXR8fFR0W2l0XS5zLnIhPVll'@;
put 'KSYmKE90PSEwKSxLdFsidGFibGU6bnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdPVR0W2l0XS5lLmMtVHRbaXRdLnMuYysxLEt0WyJ0YWJsZTpudW1iZXItcm93cy1zcGFubmVkIl09VHRbaXRdLmUuci1UdFtpdF0ucy5yKzE7YnJlYWt9aWYoT3QpVmUucHVzaCgiICAgICAgICAgIDx0YWJsZTpj'@;
put 'b3ZlcmVkLXRhYmxlLWNlbGwvPlxuIik7ZWxzZXt2YXIgc3I9cWkoe3I6WWUsYzpldH0pLENuPWJ0PyhwZVtZZV18fFtdKVtldF06cGVbc3JdO2lmKENuJiZDbi5mJiYoS3RbInRhYmxlOmZvcm11bGEiXT1QcihaNChDbi5mKSksQ24uRiYmQ24uRi5zbGljZSgwLHNyLmxlbmd0aCk9PXNyKSl7'@;
put 'dmFyIHVyPVNvKENuLkYpO0t0WyJ0YWJsZTpudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdPXVyLmUuYy11ci5zLmMrMSxLdFsidGFibGU6bnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXT11ci5lLnItdXIucy5yKzF9aWYoQ24pe3N3aXRjaChDbi50KXtjYXNlImIiOlRuPUNuLnY/'@;
put 'IlRSVUUiOiJGQUxTRSIsS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09ImJvb2xlYW4iLEt0WyJvZmZpY2U6Ym9vbGVhbi12YWx1ZSJdPUNuLnY/InRydWUiOiJmYWxzZSI7YnJlYWs7Y2FzZSJuIjpUbj1Dbi53fHxTdHJpbmcoQ24udnx8MCksS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09ImZsb2F0'@;
put 'IixLdFsib2ZmaWNlOnZhbHVlIl09Q24udnx8MDticmVhaztjYXNlInMiOmNhc2Uic3RyIjpUbj1Dbi52LEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJzdHJpbmciO2JyZWFrO2Nhc2UiZCI6VG49Q24ud3x8TmUoQ24udikudG9JU09TdHJpbmcoKSxLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0i'@;
put 'ZGF0ZSIsS3RbIm9mZmljZTpkYXRlLXZhbHVlIl09TmUoQ24udikudG9JU09TdHJpbmcoKSxLdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZTEiO2JyZWFrO2RlZmF1bHQ6VmUucHVzaChrKTtjb250aW51ZX1udWxsIT1Dbi5vZHMmJiFLdFsidGFibGU6c3R5bGUtbmFtZSJdJiYoS3RbInRhYmxl'@;
put 'OnN0eWxlLW5hbWUiXT0iY2UiK0NuLm9kcyk7dmFyIGVyPSFDbi5SfHxDbi5sJiZDbi5sLlRhcmdldD9TKFRuKTpPKENuLlIpO2lmKENuLmwmJkNuLmwuVGFyZ2V0KXt2YXIgam49Q24ubC5UYXJnZXQ7IiMiIT0oam49IiMiPT1qbi5jaGFyQXQoMCk/IiMiK3lEKGpuLnNsaWNlKDEpKTpqbiku'@;
put 'Y2hhckF0KDApJiYham4ubWF0Y2goL15cdys6LykmJihqbj0iLi4vIitqbiksZXI9SHIoInRleHQ6YSIsZXIseyJ4bGluazpocmVmIjpqbi5yZXBsYWNlKC8mL2csIiZhbXA7Iil9KX1WZS5wdXNoKCIgICAgICAgICAgIitIcigidGFibGU6dGFibGUtY2VsbCIsSHIoInRleHQ6cCIsZXIse30p'@;
put 'LEt0KSsiXG4iKX1lbHNlIFZlLnB1c2goayl9fVZlLnB1c2goIiAgICAgICAgPC90YWJsZTp0YWJsZS1yb3c+XG4iKX1yZXR1cm4gVmUucHVzaCgiICAgICAgPC90YWJsZTp0YWJsZT5cbiIpLFZlLmpvaW4oIiIpfSxvZT17Y2VudGVyOiJjZW50ZXIiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5k'@;
put 'In07cmV0dXJuIGZ1bmN0aW9uKGJlLFBlKXt2YXIgVmU9W0RpXSxZZT1EdSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0'@;
put 'YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVz'@;
put 'OnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6'@;
put 'Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bWV0YSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAi'@;
put 'LCJ4bWxuczpwcmVzZW50YXRpb24iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnByZXNlbnRhdGlvbjoxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOmNoYXJ0Ijoi'@;
put 'dXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjaGFydDoxLjAiLCJ4bWxuczpkcjNkIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcjNkOjEuMCIsInhtbG5zOm1hdGgiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwieG1s'@;
put 'bnM6Zm9ybSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpzY3JpcHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnNjcmlwdDoxLjAiLCJ4bWxuczpvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC9v'@;
put 'ZmZpY2UiLCJ4bWxuczpvb293IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvd3JpdGVyIiwieG1sbnM6b29vYyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L2NhbGMiLCJ4bWxuczpkb20iOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC1ldmVudHMiLCJ4bWxuczp4Zm9ybXMi'@;
put 'OiJodHRwOi8vd3d3LnczLm9yZy8yMDAyL3hmb3JtcyIsInhtbG5zOnhzZCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwieG1sbnM6eHNpIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLCJ4bWxuczpzaGVldCI6InVybjpvYXNpczpuYW1l'@;
put 'czp0YzpvcGVuZG9jdW1lbnQ6c2gzM3RqczoxLjAiLCJ4bWxuczpycHQiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNS9yZXBvcnQiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwieG1sbnM6eGh0bWwiOiJodHRwOi8vd3d3Lncz'@;
put 'Lm9yZy8xOTk5L3hodG1sIiwieG1sbnM6Z3JkZGwiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAzL2cvZGF0YS12aWV3IyIsInhtbG5zOnRhYmxlb29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDkvdGFibGUiLCJ4bWxuczpkcmF3b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMTAv'@;
put 'ZHJhdyIsInhtbG5zOmNhbGNleHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6Y2FsYzp4bWxuczpjYWxjZXh0OjEuMCIsInhtbG5zOmxvZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOm9mZmljZTp4bWxu'@;
put 'czpsb2V4dDoxLjAiLCJ4bWxuczpmaWVsZCI6InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb28tbXMtaW50ZXJvcDp4bWxuczpmaWVsZDoxLjAiLCJ4bWxuczpmb3JteCI6InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb3htbC1vZGYtaW50ZXJvcDp4bWxu'@;
put 'czpmb3JtOjEuMCIsInhtbG5zOmNzczN0IjoiaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10ZXh0LyIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0pLGV0PUR1KHsieG1sbnM6Y29uZmlnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjb25maWc6MS4wIiwib2ZmaWNl'@;
put 'Om1pbWV0eXBlIjoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCJ9KTsiZm9kcyI9PVBlLmJvb2tUeXBlPyhWZS5wdXNoKCI8b2ZmaWNlOmRvY3VtZW50IitZZStldCsiPlxuIiksVmUucHVzaChSNigpLnJlcGxhY2UoL29mZmljZTpkb2N1bWVudC1tZXRh'@;
put 'L2csIm9mZmljZTptZXRhIikpKTpWZS5wdXNoKCI8b2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQiK1llKyI+XG4iKSxmdW5jdGlvbihwZSxiZSl7dmFyIFBlPVtdLFZlPXt9O1BlLnB1c2goIiA8b2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKSxQZS5wdXNoKCcgIDxudW1iZXI6ZGF0ZS1zdHls'@;
put 'ZSBzdHlsZTpuYW1lPSJOMzciIG51bWJlcjphdXRvbWF0aWMtb3JkZXI9InRydWUiPlxuJyksUGUucHVzaCgnICAgPG51bWJlcjptb250aCBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLFBlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLFBlLnB1c2goJyAgIDxu'@;
put 'dW1iZXI6ZGF5IG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksUGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksUGUucHVzaCgiICAgPG51bWJlcjp5ZWFyLz5cbiIpLFBlLnB1c2goIiAgPC9udW1iZXI6ZGF0ZS1zdHlsZT5cbiIpO3ZhciBZZT0wO2JlLlNoZWV0'@;
put 'TmFtZXMubWFwKGZ1bmN0aW9uKGl0KXtyZXR1cm4gYmUuU2hlZXRzW2l0XX0pLmZvckVhY2goZnVuY3Rpb24oaXQpe2lmKGl0JiZpdFsiIWNvbHMiXSlmb3IodmFyIGJ0PTA7YnQ8aXRbIiFjb2xzIl0ubGVuZ3RoOysrYnQpaWYoaXRbIiFjb2xzIl1bYnRdKXt2YXIgQnQ9aXRbIiFjb2xzIl1b'@;
put 'YnRdO2lmKG51bGw9PUJ0LndpZHRoJiZudWxsPT1CdC53cHgmJm51bGw9PUJ0LndjaCljb250aW51ZTtKMChCdCksQnQub2RzPVllO3ZhciBEdD1pdFsiIWNvbHMiXVtidF0ud3B4KyJweCI7UGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY28nK1llKyciIHN0eWxlOmZhbWls'@;
put 'eT0idGFibGUtY29sdW1uIj5cbicpLFBlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1jb2x1bW4tcHJvcGVydGllcyBmbzpicmVhay1iZWZvcmU9ImF1dG8iIHN0eWxlOmNvbHVtbi13aWR0aD0iJytEdCsnIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK1llfX0pO3ZhciBl'@;
put 'dD0wO2JlLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGl0KXtyZXR1cm4gYmUuU2hlZXRzW2l0XX0pLmZvckVhY2goZnVuY3Rpb24oaXQpe2lmKGl0JiZpdFsiIXJvd3MiXSlmb3IodmFyIGJ0PTA7YnQ8aXRbIiFyb3dzIl0ubGVuZ3RoOysrYnQpaWYoaXRbIiFyb3dzIl1bYnRdKXtpdFsiIXJv'@;
put 'd3MiXVtidF0ub2RzPWV0O3ZhciBCdD1pdFsiIXJvd3MiXVtidF0uaHB4KyJweCI7UGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0icm8nK2V0KyciIHN0eWxlOmZhbWlseT0idGFibGUtcm93Ij5cbicpLFBlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1yb3ctcHJvcGVydGllcyBm'@;
put 'bzpicmVhay1iZWZvcmU9ImF1dG8iIHN0eWxlOnJvdy1oZWlnaHQ9IicrQnQrJyIvPlxuJyksUGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksKytldH19KSxQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJ0YTEiIHN0eWxlOmZhbWlseT0idGFibGUiIHN0eWxlOm1hc3Rl'@;
put 'ci1wYWdlLW5hbWU9Im1wMSI+XG4nKSxQZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtcHJvcGVydGllcyB0YWJsZTpkaXNwbGF5PSJ0cnVlIiBzdHlsZTp3cml0aW5nLW1vZGU9ImxyLXRiIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSxQZS5wdXNoKCcgIDxzdHlsZTpzdHls'@;
put 'ZSBzdHlsZTpuYW1lPSJjZTEiIHN0eWxlOmZhbWlseT0idGFibGUtY2VsbCIgc3R5bGU6cGFyZW50LXN0eWxlLW5hbWU9IkRlZmF1bHQiIHN0eWxlOmRhdGEtc3R5bGUtbmFtZT0iTjM3Ii8+XG4nKTt2YXIgY3Q9MjtldD0wLGJlLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGl0KXtyZXR1cm4g'@;
put 'YmUuU2hlZXRzW2l0XX0pLmZvckVhY2goZnVuY3Rpb24oaXQpe2lmKGl0KWZvcih2YXIgYnQ9MCxCdD0wLER0PVNvKGl0WyIhcmVmIl0pLE90PUFycmF5LmlzQXJyYXkoaXQpO2J0PD1EdC5lLnI7KytidClmb3IoQnQ9MDtCdDw9RHQuZS5jOysrQnQpe3ZhciBLdD1xaSh7cjpidCxjOkJ0fSks'@;
put 'VG49T3Q/KGl0W2J0XXx8W10pW0J0XTppdFtLdF07aWYoVG4mJihUbi5zfHxUbi5SKSl7dmFyIHNyPVtdO1RuLnMmJnNyLnB1c2goW1RuLCEwXSksVG4uUiYmVG4uUi5mb3JFYWNoKGZ1bmN0aW9uKENuKXtDbiYmQ24ucyYmc3IucHVzaChbQ24sITFdKX0pLHNyLmZvckVhY2goZnVuY3Rpb24o'@;
put 'Q24pe3ZhciB1cj1DblswXSxlcj11ci5zLGpuPSIiLHByPXsic3R5bGU6bmFtZSI6KENuWzFdPyJjZSI6IlQiKStjdCwic3R5bGU6ZmFtaWx5IjpDblsxXT8idGFibGUtY2VsbCI6InRleHQifTtDblsxXSYmKHByWyJzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZSJdPSJEZWZhdWx0Iixwclsic3R5'@;
put 'bGU6ZGF0YS1zdHlsZS1uYW1lIl09Ik4wIik7dmFyIGJyPXt9LHJyPSExLFNpPXt9LFBpPSExLG5hPXt9LGxhPSExO2lmKGVyLmNvbG9yJiYoU2lbImZvOmNvbG9yIl09IiMiK0wwKGVyLmNvbG9yLnJnYiksUGk9ITApLGVyLnN6JiYoU2lbImZvOmZvbnQtc2l6ZSJdPWVyLnN6KyJwdCIsUGk9'@;
put 'ITApLGVyLmJvbGQmJihTaVsiZm86Zm9udC13ZWlnaHQiXT0iYm9sZCIsUGk9ITApLGVyLml0YWxpYyYmKFNpWyJmbzpmb250LXN0eWxlIl09Iml0YWxpYyIsUGk9ITApLGVyLm5hbWUmJihWZVtlci5uYW1lXXx8KFZlW2VyLm5hbWVdPWVyLm5hbWUubWF0Y2goLyAvKT8iJmFwb3M7Iitlci5u'@;
put 'YW1lKyImYXBvczsiOmVyLm5hbWUpLFNpWyJzdHlsZTpmb250LW5hbWUiXT1lci5uYW1lLFBpPSEwKSxlci5zdHJpa2UmJihTaVsic3R5bGU6dGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXT0ic29saWQiLFNpWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC10eXBlIl09InNpbmdsZSIsUGk9ITAp'@;
put 'LGVyLnVuZGVybGluZSYmKFNpWyJzdHlsZTp0ZXh0LXVuZGVybGluZS1zdHlsZSJdPSJzb2xpZCIsU2lbInN0eWxlOnRleHQtdW5kZXJsaW5lLXdpZHRoIl09ImF1dG8iLFNpWyJzdHlsZTp0ZXh0LXVuZGVybGluZS1jb2xvciJdPSJmb250LWNvbG9yIixQaT0hMCksQ25bMV0pe2lmKGVyLmFs'@;
put 'aWdubWVudCl7dmFyIFJpPWVyLmFsaWdubWVudDtSaS53cmFwVGV4dCYmKGJyWyJmbzp3cmFwLW9wdGlvbiJdPSJ3cmFwIixycj0hMCksUmkudmVydGljYWwmJihiclsic3R5bGU6dmVydGljYWwtYWxpZ24iXT0iY2VudGVyIj09UmkudmVydGljYWw/Im1pZGRsZSI6UmkudmVydGljYWwscnI9'@;
put 'ITApLG9lW1JpLmhvcml6b250YWxdJiYobmFbImZvOnRleHQtYWxpZ24iXT1vZVtSaS5ob3Jpem9udGFsXSxsYT0hMCl9ZXIuZmdDb2xvciYmKGJyWyJmbzpiYWNrZ3JvdW5kLWNvbG9yIl09IiMiK0wwKGVyLmZnQ29sb3IucmdiKSxycj0hMCl9cnImJihqbis9SHIoInN0eWxlOnRhYmxlLWNl'@;
put 'bGwtcHJvcGVydGllcyIsbnVsbCxicikpLFBpJiYoam4rPUhyKCJzdHlsZTp0ZXh0LXByb3BlcnRpZXMiLG51bGwsU2kpKSxsYSYmKGpuKz1Icigic3R5bGU6cGFyYWdyYXBoLXByb3BlcnRpZXMiLG51bGwsbmEpKSxQZS5wdXNoKCIgICIrSHIoInN0eWxlOnN0eWxlIixqbixwcikrIlxuIiks'@;
put 'dXIub2RzPWN0LCsrY3R9KX19fSksUGUucHVzaCgiIDwvb2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKTt2YXIgVHQ9IiA8b2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiIrUmUoVmUpLm1hcChmdW5jdGlvbihpdCl7cmV0dXJuJyAgPHN0eWxlOmZvbnQtZmFjZSBzdHlsZTpuYW1lPSInK2l0'@;
put 'KyciIHN2Zzpmb250LWZhbWlseT0iJytWZVtpdF0rJyIvPlxuJ30pLmpvaW4oIiIpKyIgPC9vZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIjtwZS5wdXNoKFR0KSxwZS5wdXNoKFBlLmpvaW4oIiIpKX0oVmUsYmUpLFZlLnB1c2goIiAgPG9mZmljZTpib2R5PlxuIiksVmUucHVzaCgiICAgIDxv'@;
put 'ZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKTtmb3IodmFyIGN0PTA7Y3QhPWJlLlNoZWV0TmFtZXMubGVuZ3RoOysrY3QpVmUucHVzaChlZShiZS5TaGVldHNbYmUuU2hlZXROYW1lc1tjdF1dLGJlLGN0KSk7cmV0dXJuIFZlLnB1c2goIiAgICA8L29mZmljZTpzcHJlYWRzaGVldD5cbiIpLFZlLnB1'@;
put 'c2goIiAgPC9vZmZpY2U6Ym9keT5cbiIpLFZlLnB1c2goImZvZHMiPT1QZS5ib29rVHlwZT8iPC9vZmZpY2U6ZG9jdW1lbnQ+IjoiPC9vZmZpY2U6ZG9jdW1lbnQtY29udGVudD4iKSxWZS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gUEkoUyxPKXtpZigiZm9kcyI9PU8uYm9va1R5cGUpcmV0dXJu'@;
put 'IFA4KFMsTyk7dmFyIGs9ZGkoKSxLPSIiLGVlPVtdLG9lPVtdO3JldHVybiB6bihrLEs9Im1pbWV0eXBlIiwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIpLHpuKGssSz0iY29udGVudC54bWwiLFA4KFMsTykpLGVlLnB1c2goW0ssInRleHQveG1sIl0p'@;
put 'LG9lLnB1c2goW0ssIkNvbnRlbnRGaWxlIl0pLHpuKGssSz0ic3R5bGVzLnhtbCIsR3ooUyxPKSksZWUucHVzaChbSywidGV4dC94bWwiXSksb2UucHVzaChbSywiU3R5bGVzRmlsZSJdKSx6bihrLEs9Im1ldGEueG1sIixEaStSNigpKSxlZS5wdXNoKFtLLCJ0ZXh0L3htbCJdKSxvZS5wdXNo'@;
put 'KFtLLCJNZXRhZGF0YUZpbGUiXSksem4oayxLPSJtYW5pZmVzdC5yZGYiLGZ1bmN0aW9uIFJ1KFMpe3ZhciBPPVtEaV07Ty5wdXNoKCc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciBrPTA7ayE9Uy5s'@;
put 'ZW5ndGg7KytrKU8ucHVzaChxYyhTW2tdWzBdLFNba11bMV0pKSxPLnB1c2goYTIoIiIsU1trXVswXSkpO3JldHVybiBPLnB1c2gocWMoIiIsIkRvY3VtZW50IiwicGtnIikpLE8ucHVzaCgiPC9yZGY6UkRGPiIpLE8uam9pbigiIil9KG9lKSksZWUucHVzaChbSywiYXBwbGljYXRpb24vcmRm'@;
put 'K3htbCJdKSx6bihrLEs9Ik1FVEEtSU5GL21hbmlmZXN0LnhtbCIsZnVuY3Rpb24gU2MoUyl7dmFyIE89W0RpXTtPLnB1c2goJzxtYW5pZmVzdDptYW5pZmVzdCB4bWxuczptYW5pZmVzdD0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptYW5pZmVzdDoxLjAiIG1hbmlm'@;
put 'ZXN0OnZlcnNpb249IjEuMiI+XG4nKSxPLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSIvIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiIG1hbmlmZXN0Om1lZGlhLXR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hl'@;
put 'ZXQiLz5cbicpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKU8ucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9IicrU1trXVswXSsnIiBtYW5pZmVzdDptZWRpYS10eXBlPSInK1Nba11bMV0rJyIvPlxuJyk7cmV0dXJuIE8ucHVzaCgiPC9tYW5pZmVz'@;
put 'dDptYW5pZmVzdD4iKSxPLmpvaW4oIiIpfShlZSkpLGt9ZnVuY3Rpb24gVmYoUyl7cmV0dXJuIGZ1bmN0aW9uKGssSyl7dmFyIGVlPWZ1bmN0aW9uICR6KFMsTyl7aWYoIU8pcmV0dXJuIDA7dmFyIGs9Uy5TaGVldE5hbWVzLmluZGV4T2YoTyk7aWYoLTE9PWspdGhyb3cgbmV3IEVycm9yKCJT'@;
put 'aGVldCBub3QgZm91bmQ6ICIrTyk7cmV0dXJuIGt9KGssSy5zaGVldCk7cmV0dXJuIFMuZnJvbV9zaGVldChrLlNoZWV0c1trLlNoZWV0TmFtZXNbZWVdXSxLLGspfX12YXIgS3o9VmYodmQpLFh6PVZmKHtmcm9tX3NoZWV0OmIwfSkscXo9VmYodHlwZW9mIHBDPCJ1Ij9wQzp7fSkseWQ9VmYo'@;
put 'dHlwZW9mIEV2PCJ1Ij9Fdjp7fSksRkk9VmYodHlwZW9mIHozPCJ1Ij96Mzp7fSksSEk9VmYodHlwZW9mIFB2PCJ1Ij9Qdjp7fSksSno9VmYoe2Zyb21fc2hlZXQ6Wkl9KSx1cmU9VmYodHlwZW9mIGozPCJ1Ij9qMzp7fSksTkk9VmYodHlwZW9mIEs2PCJ1Ij9LNjp7fSksemw9Yig5MTQyNil8'@;
put 'fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvQnJvd3NlcmlmeTtpZighemwpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBjcnlwdG8gZXh0ZW5zaW9ucyEiKTt2YXIgcnA9e1NIQTUxMjoic2hhNTEyIixTSEEyNTY6InNoYTI1NiIsU0hBMzg0OiJzaGEzODQiLFNIQTE6InNo'@;
put 'YTEiLE1ENToibWQ1IixNRDQ6Im1kNCIsTUQyOiJtZDIifTtmdW5jdGlvbiBwYyhTLE8pe3N3aXRjaChPPShPfHwiIikucmVwbGFjZSgvLS9nLCIiKSl7Y2FzZSJTSEEtNTEyIjpjYXNlIlNIQTUxMiI6cmV0dXJuIG5ldyB6bC5jcmVhdGVIYXNoKCJzaGE1MTIiKS51cGRhdGUoUykuZGlnZXN0'@;
put 'KCk7Y2FzZSJTSEEtMSI6Y2FzZSJTSEExIjpyZXR1cm4gbmV3IHpsLmNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUoUykuZGlnZXN0KCk7Y2FzZSJNRDIiOnJldHVybiBuZXcgemwuY3JlYXRlSGFzaCgibWQyIikudXBkYXRlKFMpLmRpZ2VzdCgpO2RlZmF1bHQ6aWYocnBbT10pcmV0dXJuIG5l'@;
put 'dyB6bC5jcmVhdGVIYXNoKHJwW09dKS51cGRhdGUoUykuZGlnZXN0KCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK08pfX1mdW5jdGlvbiBZNChTLE8sayl7aWYoInJjMiI9PWspdGhyb3ciVW5zdXBwb3J0ZWQgUkMyIjt2YXIgSz16bC5jcmVhdGVEZWNp'@;
put 'cGhlcml2KGt8fCJhZXMtMjU2LWNiYyIsUyxPKTtyZXR1cm4gSy5zZXRBdXRvUGFkZGluZyghMSksS31mdW5jdGlvbiBGOChTKXtyZXR1cm5bKCIwMCIrKDI1NSZTKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoUz4+PjgmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAw'@;
put 'IisoUz4+PjE2JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj4yNCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpXS5qb2luKCIiKX12YXIgRzQ9ZnVuY3Rpb24oUyxPLGspe2Zvcih2YXIgSz0ic3RyaW5nIj09dHlwZW9mIE8/QnVmZmVyLmZyb20oTywiaGV4Iik6'@;
put 'TyxlZT0ic3RyaW5nIj09dHlwZW9mIFM/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxTKSk6UyxvZT0ic3RyaW5nIj09dHlwZW9mIGs/QnVmZmVyLmZyb20oaywiaGV4Iik6ayxtZT1wYyhlZSwiTUQ1IikscGU9QnVmZmVyLmNvbmNhdChbbWUuc2xpY2UoMCw1KSxLXSks'@;
put 'YmU9MDtiZTw0OysrYmUpcGU9QnVmZmVyLmNvbmNhdChbcGUscGVdKTt2YXIgUGU9cGMocGUsIk1ENSIpO3JldHVybihwYyhCdWZmZXIuY29uY2F0KFtQZS5zbGljZSgwLDUpLG9lXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5z'@;
put 'bGljZSgwLDMyKX0sJDQ9ZnVuY3Rpb24oUyxPLGspe3ZhciBLPSJzdHJpbmciPT10eXBlb2YgTz9CdWZmZXIuZnJvbShPLCJoZXgiKTpPLGVlPSJzdHJpbmciPT10eXBlb2YgUz9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFMpKTpTLG9lPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'az9CdWZmZXIuZnJvbShrLCJoZXgiKTprLG1lPXBjKEJ1ZmZlci5jb25jYXQoW0ssZWVdKSwiU0hBMSIpO3JldHVybiBwYyhCdWZmZXIuY29uY2F0KFttZSxvZV0pLCJTSEExIil9LHRVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTygpe31PLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbihpdCl7dGhp'@;
put 'cy5faT0wO3ZhciBidD10aGlzLl9idWlsZChpdCwiIik7cmV0dXJuIiI9PT1idD8iIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrYnR9LE8ucHJvdG90eXBlLl9idWlsZD1mdW5jdGlvbihpdCxidCl7aWYodGhpcy5faSsrJTFlNj09'@;
put 'MCYmKHRoaXMuX2M9YnRbMF0pLG51bGw9PWl0fHwib2JqZWN0IiE9dHlwZW9mIGl0JiYiZnVuY3Rpb24iIT10eXBlb2YgaXQpbnVsbCE9aXQmJihidCs9ZnVuY3Rpb24gUyhpdCxidCl7cmV0dXJuIG51bGw9PWl0fHwoaXQ9aXQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVw'@;
put 'bGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksYnQmJihpdD1pdC5yZXBsYWNlKC8iL2csIiZxdW90OyIpKSksaXR9KGl0KSk7ZWxzZXtpZighaXQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhhdmUgbmFtZTogIitKU09OLnN0cmluZ2lmeShp'@;
put 'dCkpO2J0Kz0iPCIraXQubmFtZTt2YXIgQnQ9dGhpcztidCs9aXQuYXR0cmlidXRlcyYmRHUoaXQuYXR0cmlidXRlcyl8fCIiLEFycmF5LmlzQXJyYXkoaXQuY2hpbGRyZW4pJiYwIT1pdC5jaGlsZHJlbi5sZW5ndGg/KGJ0Kz0iPiIsaXQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihEdCl7'@;
put 'YnQ9QnQuX2J1aWxkKER0LGJ0KX0pLGJ0Kz0iPC8iK2l0Lm5hbWUrIj4iKTpidCs9Ii8+In1yZXR1cm4gYnR9O3ZhciBrPUJ1ZmZlci5mcm9tKFs0LDAsNCwwLDY0LDAsMCwwXSksb2U9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZyb20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1'@;
put 'LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUs'@;
put 'MTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24gbWUoaXQsYnQsQnQsRHQsT3QsS3Qpe3ZhciBUbj1idC50b0xvd2VyQ2FzZSgpKyItIis4KkR0Lmxlbmd0aDtpZigiQ2hhaW5pbmdNb2RlQ0JDIiE9PUJ0KXRocm93IG5l'@;
put 'dyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIrQnQpO3ZhciBzcj16bFtpdD8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0oVG4rPSItY2JjIixEdCxPdCk7c3Iuc2V0QXV0b1BhZGRpbmcoITEpO3ZhciBDbj1zci51cGRhdGUoS3QpLHVyPVtDbl07dHJ5e3Zh'@;
put 'ciBlcj1zci5maW5hbCgpO3VyLnB1c2goZXIpfWNhdGNoe31yZXR1cm4gQnVmZmVyLmNvbmNhdCh1cil9ZnVuY3Rpb24gcGUoaXQpe2l0PWl0LnRvTG93ZXJDYXNlKCk7dmFyIGJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKHpsLmdldEhhc2hlcygpLmluZGV4T2YoaXQpPDApdGhy'@;
put 'b3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK2l0KTt2YXIgRHQ9emwuY3JlYXRlSGFzaChpdCk7cmV0dXJuIER0LnVwZGF0ZShCdWZmZXIuY29uY2F0KGJ0KSksRHQuZGlnZXN0KCl9ZnVuY3Rpb24gYmUoaXQsYnQsQnQsRHQpeyJudW1iZXIiPT10eXBlb2YgRHQm'@;
put 'JihEdD1QZShEdCkpO3ZhciBPdD1wZShpdCxidCxEdCk7aWYoT3QubGVuZ3RoPEJ0KXt2YXIgS3Q9QnVmZmVyLmFsbG9jKEJ0LDU0KTtPdC5jb3B5KEt0KSxPdD1LdH1lbHNlIE90Lmxlbmd0aD5CdCYmKE90PU90LnNsaWNlKDAsQnQpKTtyZXR1cm4gT3R9ZnVuY3Rpb24gUGUoaXQsYnQpe3Zh'@;
put 'ciBCdD1CdWZmZXIuYWxsb2MoYnR8fDQpO3JldHVybiBCdC53cml0ZVVJbnQzMkxFKGl0LDApLEJ0fWZ1bmN0aW9uIFZlKGl0LGJ0LEJ0LER0LE90LEt0KXtmb3IodmFyIHNyPXBlKGJ0LEJ0LEJ1ZmZlci5mcm9tKGl0LCJ1dGYxNmxlIikpLENuPTA7Q248RHQ7Q24rKylzcj1wZShidCxQZShD'@;
put 'biksc3IpO3ZhciBlcj1PdC84O2lmKChzcj1wZShidCxzcixLdCkpLmxlbmd0aDxlcil7dmFyIGpuPUJ1ZmZlci5hbGxvYyhlciw1NCk7c3IuY29weShqbiksc3I9am59ZWxzZSBzci5sZW5ndGg+ZXImJihzcj1zci5zbGljZSgwLGVyKSk7cmV0dXJuIHNyfXJldHVybiB6bC5yYW5kb21CeXRl'@;
put 'c3x8KHpsLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGl0KXtmb3IodmFyIGJ0PUJ1ZmZlci5hbGxvYyhpdCksQnQ9MDtCdDxpdDsrK0J0KWJ0W0J0XT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gYnR9KSxmdW5jdGlvbiBUdChpdCxidCl7aWYoInN0cmluZyI9PXR5cGVvZiBp'@;
put 'dClyZXR1cm4gVHQoQnVmZmVyLmZyb20oaXQsImJpbmFyeSIpLGJ0KTt2YXIgQnQ9emwucmFuZG9tQnl0ZXMoMzIpLER0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOnpsLnJhbmRvbUJ5dGVzKDE2KSxo'@;
put 'YXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixrZXlCaXRzOjgqQnQubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6emwucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdv'@;
put 'cml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0sT3Q9ZnVuY3Rpb24gWWUoaXQsYnQsQnQsRHQsT3QsS3QsVG4sc3Ipe2Zvcih2YXIgQ249W10sdXI9aXQ/MDo4LGVyPTAsam49MCxwcj0wO3ByPHNyLmxlbmd0aDspeyhwcj0o'@;
put 'am49cHIpKzQwOTYpPnNyLmxlbmd0aCYmKHByPXNyLmxlbmd0aCk7dmFyIGJyPXNyLnNsaWNlKGpuK3VyLHByK3VyKSxycj1ici5sZW5ndGglT3Q7cnImJihicj1CdWZmZXIuY29uY2F0KFticixCdWZmZXIuYWxsb2MoT3QtcnIpXSkpO3ZhciBQaT1tZShpdCxidCxCdCxUbixiZShEdCxLdCxP'@;
put 'dCxlciksYnIpO0NuLnB1c2goUGkpLGVyKyt9dmFyIG5hPUJ1ZmZlci5jb25jYXQoQ24pO2lmKGl0KW5hPUJ1ZmZlci5jb25jYXQoW1BlKHNyLmxlbmd0aCw4KSxuYV0pO2Vsc2V7dmFyIGxhPXNyLnJlYWRVSW50MzJMRSgwKTtuYT1uYS5zbGljZSgwLGxhKX1yZXR1cm4gbmF9KCEwLER0LnBh'@;
put 'Y2thZ2UuY2lwaGVyQWxnb3JpdGhtLER0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRHQucGFja2FnZS5oYXNoQWxnb3JpdGhtLER0LnBhY2thZ2UuYmxvY2tTaXplLER0LnBhY2thZ2Uuc2FsdFZhbHVlLEJ0LGl0KSxLdD16bC5yYW5kb21CeXRlcyg2NCksVG49YmUoRHQucGFja2FnZS5oYXNo'@;
put 'QWxnb3JpdGhtLER0LnBhY2thZ2Uuc2FsdFZhbHVlLER0LnBhY2thZ2UuYmxvY2tTaXplLG9lLmRhdGFJbnRlZ3JpdHkuaG1hY0tleSksc3I9bWUoITAsRHQucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sRHQucGFja2FnZS5jaXBoZXJDaGFpbmluZyxCdCxUbixLdCksQ249ZnVuY3Rpb24gZXQo'@;
put 'aXQsYnQpe2l0PWl0LnRvTG93ZXJDYXNlKCk7dmFyIEJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKHpsLmdldEhhc2hlcygpLmluZGV4T2YoaXQpPDApdGhyb3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIitpdCsiJyBub3Qgc3VwcG9ydGVkISIpO3ZhciBPdD16bC5jcmVh'@;
put 'dGVIbWFjKGl0LGJ0KTtyZXR1cm4gT3QudXBkYXRlKEJ1ZmZlci5jb25jYXQoQnQpKSxPdC5kaWdlc3QoKX0oRHQucGFja2FnZS5oYXNoQWxnb3JpdGhtLEt0LE90KSx1cj1iZShEdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sRHQucGFja2FnZS5zYWx0VmFsdWUsRHQucGFja2FnZS5ibG9ja1Np'@;
put 'emUsb2UuZGF0YUludGVncml0eS5obWFjVmFsdWUpLGVyPW1lKCEwLER0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLER0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsQnQsdXIsQ24pO0R0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6c3IsZW5jcnlwdGVkSG1hY1ZhbHVlOmVyfTt2'@;
put 'YXIgam49VmUoYnQsRHQua2V5Lmhhc2hBbGdvcml0aG0sRHQua2V5LnNhbHRWYWx1ZSxEdC5rZXkuc3BpbkNvdW50LER0LmtleS5rZXlCaXRzLG9lLmtleSk7RHQua2V5LmVuY3J5cHRlZEtleVZhbHVlPW1lKCEwLER0LmtleS5jaXBoZXJBbGdvcml0aG0sRHQua2V5LmNpcGhlckNoYWluaW5n'@;
put 'LGpuLER0LmtleS5zYWx0VmFsdWUsQnQpO3ZhciBwcj16bC5yYW5kb21CeXRlcygxNiksYnI9VmUoYnQsRHQua2V5Lmhhc2hBbGdvcml0aG0sRHQua2V5LnNhbHRWYWx1ZSxEdC5rZXkuc3BpbkNvdW50LER0LmtleS5rZXlCaXRzLG9lLnZlcmlmaWVySGFzaC5pbnB1dCk7RHQua2V5LmVuY3J5'@;
put 'cHRlZFZlcmlmaWVySGFzaElucHV0PW1lKCEwLER0LmtleS5jaXBoZXJBbGdvcml0aG0sRHQua2V5LmNpcGhlckNoYWluaW5nLGJyLER0LmtleS5zYWx0VmFsdWUscHIpO3ZhciBycj1wZShEdC5rZXkuaGFzaEFsZ29yaXRobSxwciksU2k9VmUoYnQsRHQua2V5Lmhhc2hBbGdvcml0aG0sRHQu'@;
put 'a2V5LnNhbHRWYWx1ZSxEdC5rZXkuc3BpbkNvdW50LER0LmtleS5rZXlCaXRzLG9lLnZlcmlmaWVySGFzaC52YWx1ZSk7RHQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlPW1lKCEwLER0LmtleS5jaXBoZXJBbGdvcml0aG0sRHQua2V5LmNpcGhlckNoYWluaW5nLFNpLER0LmtleS5z'@;
put 'YWx0VmFsdWUscnIpO3ZhciBQaT1mdW5jdGlvbiBjdChpdCl7dmFyIGJ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRyaWJ1dGVzOnt4bWxuczoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1sbnM6cCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jv'@;
put 'c29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1lOiJrZXlEYXRhIixhdHRyaWJ1dGVzOntzYWx0'@;
put 'U2l6ZTppdC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOml0LnBhY2thZ2UuYmxvY2tTaXplLGtleUJpdHM6aXQucGFja2FnZS5rZXlCaXRzLGhhc2hTaXplOml0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOml0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGNp'@;
put 'cGhlckNoYWluaW5nOml0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTppdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOml0LnBhY2thZ2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJkYXRhSW50ZWdyaXR5IixhdHRyaWJ1dGVzOntl'@;
put 'bmNyeXB0ZWRIbWFjS2V5Oml0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkSG1hY1ZhbHVlOml0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJrZXlFbmNyeXB0b3Jz'@;
put 'IixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNyeXB0ZWRLZXkiLGF0dHJpYnV0ZXM6e3NwaW5D'@;
put 'b3VudDppdC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOml0LmtleS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTppdC5rZXkuYmxvY2tTaXplLGtleUJpdHM6aXQua2V5LmtleUJpdHMsaGFzaFNpemU6aXQua2V5Lmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTppdC5rZXkuY2lwaGVyQWxnb3Jp'@;
put 'dGhtLGNpcGhlckNoYWluaW5nOml0LmtleS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOml0LmtleS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTppdC5rZXkuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dDppdC5rZXkuZW5jcnlwdGVk'@;
put 'VmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOml0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6aXQua2V5LmVuY3J5cHRlZEtleVZhbHVlLnRvU3Ry'@;
put 'aW5nKCJiYXNlNjQiKX19XX1dfV19LER0PShuZXcgTykuYnVpbGQoYnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKER0LCJ1dGY4IildKX0oRHQpLG5hPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gdmUudXRpbHMuY2ZiX2FkZChuYSwiRW5jcnlwdGlvbkluZm8iLFBp'@;
put 'KSx2ZS51dGlscy5jZmJfYWRkKG5hLCJFbmNyeXB0ZWRQYWNrYWdlIixPdCksbmF9fSgpO2Z1bmN0aW9uIEJJKFMpe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIEs9MDtLIT1TLmxlbmd0aDsrK0spe3ZhciBlZT1TW0tdO3ZvaWQgMD09PWtbZWVbMF1dJiYoa1tlZVswXV09ZWVbMV0pLCJu'@;
put 'Ij09PWVlWzJdJiYoa1tlZVswXV09TnVtYmVyKGtbZWVbMF1dKSl9fX12YXIgakk9ZnVuY3Rpb24oUyl7QkkoW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxb'@;
put 'InNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShTKSxTLmJvb2tJbWFnZXMm'@;
put 'JihTLmNlbGxTdHlsZXM9ITApfSxCZj1CSShbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gaHJlKFMpe3JldHVybiBYYS5XUy5pbmRleE9mKFMpPi0xPyJzaGVldCI6WGEu'@;
put 'Q1MmJlM9PVhhLkNTPyJjaGFydCI6WGEuRFMmJlM9PVhhLkRTPyJkaWFsb2ciOlhhLk1TJiZTPT1YYS5NUz8ibWFjcm8iOlMmJlMubGVuZ3RoP1M6InNoZWV0In12YXIgSXk9W107ZnVuY3Rpb24gdzIoUyxPLGssSyxlZSxvZSxtZSxwZSxiZSxQZSxWZSxZZSl7dHJ5e29lW0tdPVNmKGlyKFMs'@;
put 'aywhMCksTyk7dmFyIGN0LGV0PUF0KFMsTyk7c3dpdGNoKHBlKXtjYXNlInNoZWV0IjpjdD1mdW5jdGlvbiBDeihTLE8sayxLLGVlLG9lLG1lLHBlKXtyZXR1cm4iLmJpbiI9PT1PLnNsaWNlKC00KT9mdW5jdGlvbiByeihTLE8sayxLLGVlLG9lLG1lKXtpZighUylyZXR1cm4gUzt2YXIgcGU9'@;
put 'T3x8e307S3x8KEs9eyIhaWQiOnt9fSksbnVsbCE9c2UmJm51bGw9PXBlLmRlbnNlJiYocGUuZGVuc2U9c2UpO3ZhciBQZSxUdCxpdCxidCxCdCxEdCxPdCxLdCxUbixzcixiZT1wZS5kZW5zZT9bXTp7fSxWZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxZZT1bXSxldD0hMSxjdD0h'@;
put 'MSxDbj1bXTtwZS5iaWZmPTEyLHBlWyIhcm93Il09MDt2YXIgdXI9MCxlcj0hMSxqbj1bXSxwcj17fSxicj1wZS5zdXBib29rc3x8ZWUuc3VwYm9va3N8fFtbXV07aWYoYnIuc2hhcmVkZj1wcixici5hcnJheWY9am4sYnIuU2hlZXROYW1lcz1lZS5TaGVldE5hbWVzfHxlZS5TaGVldHMubWFw'@;
put 'KGZ1bmN0aW9uKFJpKXtyZXR1cm4gUmkubmFtZX0pLCFwZS5zdXBib29rcyYmKHBlLnN1cGJvb2tzPWJyLGVlLk5hbWVzKSlmb3IodmFyIHJyPTA7cnI8ZWUuTmFtZXMubGVuZ3RoOysrcnIpYnJbMF1bcnIrMV09ZWUuTmFtZXNbcnJdO3ZhciBTaT1bXSxQaT1bXSxuYT0hMTtpZihMOFsxNl09'@;
put 'e246IkJydFNob3J0UmVhbCIsZjpCan0sZHIoUyxmdW5jdGlvbihScixCbixqcil7aWYoIWN0KXN3aXRjaChqcil7Y2FzZSAxNDg6UGU9UnI7YnJlYWs7Y2FzZSAwOlR0PVJyLHBlLnNoZWV0Um93cyYmcGUuc2hlZXRSb3dzPD1UdC5yJiYoY3Q9ITApLFRuPWppKEJ0PVR0LnIpLHBlWyIhcm93'@;
put 'Il09VHQuciwoUnIuaGlkZGVufHxSci5ocHR8fG51bGwhPVJyLmxldmVsKSYmKFJyLmhwdCYmKFJyLmhweD1vaChSci5ocHQpKSxQaVtSci5yXT1Scik7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6'@;
put 'Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6c3dpdGNoKGl0PXt0OlJyWzJdfSxSclsyXSl7Y2FzZSJuIjppdC52PVJyWzFdO2JyZWFrO2Nhc2UicyI6aXQudj0oS3Q9bDhbUnJbMV1dKS50LHBlLmNlbGxTdHlsZXMmJihpdC5SPWZ1bmN0aW9uIERWKFMs'@;
put 'Tyl7aWYoUy5SKXJldHVybiBTLlI7aWYoTyYmTy5Gb250cyYmKDEhPVMuci5sZW5ndGh8fDAhPVMuclswXS5pY2gpKXtTLlI9W107dmFyIGs9MCxLPVMucltrXSxlZT1TLnJbaysxXTtmb3IoSy5pY2g+MCYmUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKDAsSy5pY2gpfSk7azxTLnIubGVu'@;
put 'Z3RoLTE7KytrKVMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgoSz1TLnJba10pLmljaCwoZWU9Uy5yW2srMV0pLmljaCksczpPLkZvbnRzW0suaWZudF19KTtyZXR1cm4gUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKChlZXx8SykuaWNoKSxzOk8uRm9udHNbKGVlfHxLKS5pZm50XX0p'@;
put 'LFMuUn19KEt0LG1lKSk7YnJlYWs7Y2FzZSJiIjppdC52PSEhUnJbMV07YnJlYWs7Y2FzZSJlIjppdC52PVJyWzFdLCExIT09cGUuY2VsbFRleHQmJihpdC53PUNjW2l0LnZdKTticmVhaztjYXNlInN0ciI6aXQudD0icyIsaXQudj1SclsxXX1pZigoYnQ9bWUuQ2VsbFhmW1JyWzBdLmlTdHls'@;
put 'ZVJlZl0pJiZRMyhpdCxidC5udW1GbXRJZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHBlLDAsbWUpLHBlLmNlbGxTdHlsZXMmJml0LnMmJmJ0LmFsaWdubWVudCYmKGl0LnMuYWxpZ25tZW50PUp0KGJ0LmFsaWdubWVudCkpLER0PS0xPT1SclswXS5jP0R0KzE6UnJbMF0uYyxw'@;
put 'ZS5kZW5zZT8oYmVbQnRdfHwoYmVbQnRdPVtdKSxiZVtCdF1bRHRdPWl0KTpiZVtrYShEdCkrVG5dPWl0LHBlLmNlbGxGb3JtdWxhKXtmb3IoZXI9ITEsdXI9MDt1cjxqbi5sZW5ndGg7Kyt1cil7dmFyIHdyPWpuW3VyXTtUdC5yPj13clswXS5zLnImJlR0LnI8PXdyWzBdLmUuciYmRHQ+PXdy'@;
put 'WzBdLnMuYyYmRHQ8PXdyWzBdLmUuYyYmKGl0LkY9cmEod3JbMF0pLGVyPSEwKX0hZXImJlJyLmxlbmd0aD4zJiYoaXQuZj1SclszXSl9aWYoVmUucy5yPlR0LnImJihWZS5zLnI9VHQuciksVmUucy5jPkR0JiYoVmUucy5jPUR0KSxWZS5lLnI8VHQuciYmKFZlLmUucj1UdC5yKSxWZS5lLmM8'@;
put 'RHQmJihWZS5lLmM9RHQpLHBlLmNlbGxEYXRlcyYmYnQmJiJuIj09aXQudCYmQS5pc19kYXRlKEEuX3RhYmxlW2J0Lm51bUZtdElkXSkpe3ZhciBIbj1BLnBhcnNlX2RhdGVfY29kZShpdC52KTtIbiYmKGl0LnQ9ImQiLGl0LnY9bmV3IERhdGUoSG4ueSxIbi5tLTEsSG4uZCxIbi5ILEhuLk0s'@;
put 'SG4uUyxIbi51KSl9YnJlYWs7Y2FzZSAxOmNhc2UgMTI6aWYoIXBlLnNoZWV0U3R1YnN8fGV0KWJyZWFrO2l0PXt0OiJ6Iix2OnZvaWQgMH0sRHQ9LTE9PVJyWzBdLmM/RHQrMTpSclswXS5jLChidD1tZS5DZWxsWGZbUnJbMF0uaVN0eWxlUmVmXSkmJlEzKGl0LGJ0Lm51bUZtdElkLGJ0LmZp'@;
put 'bGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQscGUsMCxtZSkscGUuY2VsbFN0eWxlcyYmaXQucyYmYnQuYWxpZ25tZW50JiYoaXQucy5hbGlnbm1lbnQ9SnQoYnQuYWxpZ25tZW50KSkscGUuZGVuc2U/KGJlW0J0XXx8KGJlW0J0XT1bXSksYmVbQnRdW0R0XT1pdCk6YmVba2EoRHQpK1RuXT1p'@;
put 'dCxWZS5zLnI+VHQuciYmKFZlLnMucj1UdC5yKSxWZS5zLmM+RHQmJihWZS5zLmM9RHQpLFZlLmUucjxUdC5yJiYoVmUuZS5yPVR0LnIpLFZlLmUuYzxEdCYmKFZlLmUuYz1EdCk7YnJlYWs7Y2FzZSAxNzY6Q24ucHVzaChScik7YnJlYWs7Y2FzZSA0OTQ6dmFyIHpyPUtbIiFpZCJdW1JyLnJl'@;
put 'bElkXTtmb3IoenI/KFJyLlRhcmdldD16ci5UYXJnZXQsUnIubG9jJiYoUnIuVGFyZ2V0Kz0iIyIrUnIubG9jKSxSci5SZWw9enIpOiIiPT1Sci5yZWxJZCYmKFJyLlRhcmdldD0iIyIrUnIubG9jKSxCdD1Sci5yZngucy5yO0J0PD1Sci5yZnguZS5yOysrQnQpZm9yKER0PVJyLnJmeC5zLmM7'@;
put 'RHQ8PVJyLnJmeC5lLmM7KytEdClwZS5kZW5zZT8oYmVbQnRdfHwoYmVbQnRdPVtdKSxiZVtCdF1bRHRdfHwoYmVbQnRdW0R0XT17dDoieiIsdjp2b2lkIDB9KSxiZVtCdF1bRHRdLmw9UnIpOihPdD1xaSh7YzpEdCxyOkJ0fSksYmVbT3RdfHwoYmVbT3RdPXt0OiJ6Iix2OnZvaWQgMH0pLGJl'@;
put 'W090XS5sPVJyKTticmVhaztjYXNlIDQyNjppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7am4ucHVzaChSciksKHNyPXBlLmRlbnNlP2JlW0J0XVtEdF06YmVba2EoRHQpK1RuXSkuZj1hMChSclsxXSxWZSx7cjpUdC5yLGM6RHR9LGJyLHBlKSxzci5GPXJhKFJyWzBdKTticmVhaztjYXNlIDQy'@;
put 'NzppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7cHJbcWkoUnJbMF0ucyldPVJyWzFdLChzcj1wZS5kZW5zZT9iZVtCdF1bRHRdOmJlW2thKER0KStUbl0pLmY9YTAoUnJbMV0sVmUse3I6VHQucixjOkR0fSxicixwZSk7YnJlYWs7Y2FzZSA2MDppZighcGUuY2VsbFN0eWxlcylicmVhaztmb3Io'@;
put 'O1JyLmU+PVJyLnM7KVNpW1JyLmUtLV09e3dpZHRoOlJyLncvMjU2LGhpZGRlbjohISgxJlJyLmZsYWdzKSxsZXZlbDpSci5sZXZlbH0sbmF8fChuYT0hMCksSjAoU2lbUnIuZSsxXSk7YnJlYWs7Y2FzZSAxNjE6YmVbIiFhdXRvZmlsdGVyIl09e3JlZjpyYShScil9O2JyZWFrO2Nhc2UgNDc2'@;
put 'OmJlWyIhbWFyZ2lucyJdPVJyO2JyZWFrO2Nhc2UgMTQ3OmVlLlNoZWV0c1trXXx8KGVlLlNoZWV0c1trXT17fSksUnIubmFtZSYmKGVlLlNoZWV0c1trXS5Db2RlTmFtZT1Sci5uYW1lKSwoUnIuYWJvdmV8fFJyLmxlZnQpJiYoYmVbIiFvdXRsaW5lIl09e2Fib3ZlOlJyLmFib3ZlLGxlZnQ6'@;
put 'UnIubGVmdH0pO2JyZWFrO2Nhc2UgMTM3OmVlLlZpZXdzfHwoZWUuVmlld3M9W3t9XSksZWUuVmlld3NbMF18fChlZS5WaWV3c1swXT17fSksUnIuUlRMJiYoZWUuVmlld3NbMF0uUlRMPSEwKSxSci5ncmlkfHwoZWUuVmlld3NbMF0uZ3JpZD0hMSxiZVsiIWdyaWRsaW5lcyJdPSExKTticmVh'@;
put 'aztjYXNlIDQ4NTpiZVsiIXNoZWV0Rm9ybWF0Il09UnI7YnJlYWs7Y2FzZSA2NDpjYXNlIDEwNTM6IWZ1bmN0aW9uIG56KFMsTyxrLEspe2lmKE8pe3ZhciBlZT17cmVmOk8uc3FyZngsdDpPLnR9O08ub3AmJihlZS5vcD1PLm9wKTt2YXIgb2U9IiIsbWU9IiIscGU9Ty5zcXJmeD8ic3RyaW5n'@;
put 'Ij09dHlwZW9mIE8uc3FyZng/c3MoTy5zcXJmeC5zcGxpdCgiLCIpWzBdKTpPLnNxcmZ4Om51bGw7aWYoTy5mMSYmKG9lPWEwKE8uZjEscGUsbnVsbCxrLEssITApKSxPLmYyJiYobWU9YTAoTy5mMixwZSxudWxsLGssSywhMCkpLE8ub3AmJlsiSU4iLCJPVCJdLmluZGV4T2YoTy5vcCk+PS0x'@;
put 'KWVlLm1pbj1vZSxlZS5tYXg9bWU7ZWxzZSBpZihPLm9wKWVlLnY9b2U7ZWxzZSB0cnl7c3dpdGNoKE8udCl7Y2FzZSJMaXN0IjppZigiUHRnU3RyIj09PU8uZjFbMF1bMF1bMF0mJjE9PU8uZjFbMF0ubGVuZ3RoKXtlZS5sPU8uZjFbMF1bMF1bMV0uc3BsaXQoIiwiKTticmVha31jYXNlIkN1'@;
put 'c3RvbSI6ZWUuZj1vZX19Y2F0Y2h7fVNbIiF2YWxpZGF0aW9ucyJdfHwoU1siIXZhbGlkYXRpb25zIl09W10pLFNbIiF2YWxpZGF0aW9ucyJdLnB1c2goZWUpfX0oYmUsUnIsYnIscGUpO2JyZWFrO2Nhc2UgMTUxOmJlWyIhZnJlZXplIl09UnJbMF07YnJlYWs7Y2FzZSAxNTI6YmVbIiFzZWwi'@;
put 'XT1ScjticmVhaztjYXNlIDE3NTpjYXNlIDY0NDpjYXNlIDYyNTpjYXNlIDU2MjpjYXNlIDM5NjpjYXNlIDExMTI6Y2FzZSAxMTQ2OmNhc2UgNDcxOmNhc2UgMTA1MDpjYXNlIDY0OTpjYXNlIDExMDU6Y2FzZSA0OTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAx'@;
put 'Njg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1'@;
put 'MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEwMjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTpldD0hMDti'@;
put 'cmVhaztjYXNlIDM2OmV0PSExO2JyZWFrO2Nhc2UgMzc6WWUucHVzaChCbiksZXQ9ITA7YnJlYWs7Y2FzZSAzODpZZS5wb3AoKSxldD0hMTticmVhaztkZWZhdWx0OmlmKCEoKEJufHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoQm58fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFldHx8'@;
put 'cGUuV1RGJiYiQnJ0QUNCZWdpbiIhPVllW1llLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK2pyKyIgIitCbil9fSxwZSksZGVsZXRlIHBlLnN1cGJvb2tzLGRlbGV0ZSBwZVsiIXJvdyJdLCFiZVsiIXJlZiJdJiYoVmUucy5yPDJlNnx8UGUmJihQZS5l'@;
put 'LnI+MHx8UGUuZS5jPjB8fFBlLnMucj4wfHxQZS5zLmM+MCkpJiYoYmVbIiFyZWYiXT1yYShQZXx8VmUpKSxwZS5zaGVldFJvd3MmJmJlWyIhcmVmIl0pe3ZhciBsYT1zcyhiZVsiIXJlZiJdKTtwZS5zaGVldFJvd3M8PStsYS5lLnImJihsYS5lLnI9cGUuc2hlZXRSb3dzLTEsbGEuZS5yPlZl'@;
put 'LmUuciYmKGxhLmUucj1WZS5lLnIpLGxhLmUucjxsYS5zLnImJihsYS5zLnI9bGEuZS5yKSxsYS5lLmM+VmUuZS5jJiYobGEuZS5jPVZlLmUuYyksbGEuZS5jPGxhLnMuYyYmKGxhLnMuYz1sYS5lLmMpLGJlWyIhZnVsbHJlZiJdPWJlWyIhcmVmIl0sYmVbIiFyZWYiXT1yYShsYSkpfXJldHVy'@;
put 'biBDbi5sZW5ndGg+MCYmKGJlWyIhbWVyZ2VzIl09Q24pLFNpLmxlbmd0aD4wJiYoYmVbIiFjb2xzIl09U2kpLFBpLmxlbmd0aD4wJiYoYmVbIiFyb3dzIl09UGkpLGJlfShTLEssayxlZSxvZSwwLHBlKTpmdW5jdGlvbiBoOChTLE8sayxLLGVlLG9lLG1lKXtpZighUylyZXR1cm4gUztLfHwo'@;
put 'Sz17IiFpZCI6e319KSxudWxsIT1zZSYmbnVsbD09Ty5kZW5zZSYmKE8uZGVuc2U9c2UpO3ZhciBwZT1PLmRlbnNlP1tdOnt9LGJlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LFBlPSIiLFZlPSIiLFllPVMubWF0Y2goX0QpO1llPyhQZT1TLnNsaWNlKDAsWWUuaW5kZXgpLFZlPVMu'@;
put 'c2xpY2UoWWUuaW5kZXgrWWVbMF0ubGVuZ3RoKSk6UGU9VmU9Uzt2YXIgZXQ9VmUubGFzdEluZGV4T2YoImV4dExzdCIpLFR0PSgtMT09ZXR8fFZlLnNsaWNlKGV0KSxQZS5tYXRjaChTRCkpO1R0P2F5KFR0WzBdLDAsZWUsayk6KFR0PVBlLm1hdGNoKHhEKSkmJmZ1bmN0aW9uIHVqKFMsTyxr'@;
put 'LEssZWUsb2UsbWUpe2F5KFMuc2xpY2UoMCxTLmluZGV4T2YoIj4iKSksMCxLLGVlKTt2YXIgcGU9Ty5tYXRjaCh3Uyk7aWYocGUpe3ZhciBQZT15ayh5cihwZVswXSksb2UsbWUpO2tbIiF0YWJjb2xvciJdPVBlfWlmKChwZT1PLm1hdGNoKGxqKSkmJnlyKHBlWzBdKS5maXRUb1BhZ2UmJihr'@;
put 'WyIhcHJpbnQiXXx8KGtbIiFwcmludCJdPXt9KSxrWyIhcHJpbnQiXS5wcm9wc3x8KGtbIiFwcmludCJdLnByb3BzPXt9KSxrWyIhcHJpbnQiXS5wcm9wcy5maXR8fChrWyIhcHJpbnQiXS5wcm9wcy5maXQ9e30pLG51bGw9PWtbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQmJihrWyIhcHJp'@;
put 'bnQiXS5wcm9wcy5maXQuaGVpZ2h0PTEpLG51bGw9PWtbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aCYmKGtbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aD0xKSkscGU9Ty5tYXRjaChjaikpe2tbIiFvdXRsaW5lIl09e307dmFyIFllPXlyKHBlWzBdKTtZZS5zdW1tYXJ5QmVsb3cmJihrWyIh'@;
put 'b3V0bGluZSJdLmFib3ZlPSFlaShZZS5zdW1tYXJ5QmVsb3cpKSxZZS5zdW1tYXJ5UmlnaHQmJihrWyIhb3V0bGluZSJdLmxlZnQ9IWVpKFllLnN1bW1hcnlSaWdodCkpfX0oVHRbMF0sVHRbMV18fCIiLHBlLGVlLGssbWUsb2UpO3ZhciBpdD0oUGUubWF0Y2goLzwoPzpcdyo6KT9kaW1lbnNp'@;
put 'b24vKXx8e2luZGV4Oi0xfSkuaW5kZXg7aWYoaXQ+MCl7dmFyIGJ0PVBlLnNsaWNlKGl0LGl0KzUwKS5tYXRjaChyeSk7YnQmJighT3x8IU8ubm9kaW0pJiZmdW5jdGlvbiBwUyhTLE8pe3ZhciBrPXNzKE8pO2sucy5yPD1rLmUuciYmay5zLmM8PWsuZS5jJiZrLnMucj49MCYmay5zLmM+PTAm'@;
put 'JihTWyIhcmVmIl09cmEoaykpfShwZSxidFsxXSl9dmFyIEJ0PVBlLm1hdGNoKExzKTtCdCYmQnRbMV0mJmZ1bmN0aW9uIEVqKFMsTyxrLEspe2suVmlld3N8fChrLlZpZXdzPVt7fV0pO3ZhciBlZT0wO1MucmVwbGFjZShBUyxmdW5jdGlvbihvZSxtZSl7dmFyIHBlPXlyKG9lKTtpZihrLlZp'@;
put 'ZXdzW0tdfHwoay5WaWV3c1tLXT17fSksZWkocGUucmlnaHRUb0xlZnQpJiYoay5WaWV3c1tLXS5SVEw9ITApLHBlLnNob3dHcmlkTGluZXMmJihrLlZpZXdzW0tdLmdyaWQ9ZWkocGUuc2hvd0dyaWR